pax_global_header00006660000000000000000000000064130464121620014511gustar00rootroot0000000000000052 comment=bbd1e9bcea0db784bb519ede09d1a0d88fdb3e65 fifengine-0.4.1/000077500000000000000000000000001304641216200134455ustar00rootroot00000000000000fifengine-0.4.1/.gitattributes000066400000000000000000000010001304641216200163270ustar00rootroot00000000000000# Set default behaviour * text=auto # Explicitly declare text file we always want to be normalized *.c text *.cpp text *.h text *.i text *.hpp text *.xml text *.py text *.yml text *.md text # Declare files that will always have CRLF endings *.sln text eol=crlf *.bat text eol=crlf *.iss text eol=crlf *.user text eol=crlf *.vcproj text eol=crlf *.sln text eol=crlf # Denote all files that are truly binary *.png binary *.gif binary *.pdf binary *.ai binary *.svg binary *.rtf binary *.dll binary *.exe binary fifengine-0.4.1/.gitignore000066400000000000000000000034221304641216200154360ustar00rootroot00000000000000# Install dir for external libs ext/install # Swig wrappers engine/python/fife/fife.py engine/python/fife/fifechan.py engine/swigwrappers/python/fife.i engine/swigwrappers/python/fife_wrap.cc engine/swigwrappers/python/fife_wrap.h engine/swigwrappers/python/fifechan.i engine/swigwrappers/python/fifechan_wrap.cc engine/swigwrappers/python/fifechan_wrap.h # Project files build/linux/KDevelop/FIFE.kdevses build/linux/code_blocks/fife_engine.cbp build/win32/build_environments/code_blocks/fife_engine.cbp build/win32/build_environments/code_blocks/.objs build/win32/build_environments/code_blocks/fife_engine.layout build/win32/build_environments/scons/engine_build_log.txt build/win32/build_environments/visual_studio_8/fife.vcproj build/win32/build_environments/visual_studio_9/fife.vcproj #CMAKE stuff build/win32/CMakeCache.txt build/win32/CMakeFiles build/win32/version.h # Ignore the dev kit build/win32/applications build/win32/binaries build/win32/includes build/win32/static_libs # Demos demos/rio_de_hola/maps/savefile.xml demos/shooter/gui/highscores.xml demos/rpg/saves/*.xml settings.xml # All log files *.log # Docs doc/doxygen/html build/win32/doxygen_log.txt doc/dependencies/*.dot~ doc/dependencies/*.dot doc/dependencies/*.ps doc/dependencies/*.png # scons *.sconsign .sconsign.tmp .sconsign.dblite build/.sconf_temp build/config.log build/bdist.win32 build/engine build/lib # Python *.py[cod] dist # Compiled Object files *.slo *.lo *.o # Compiled Dynamic libraries *.dll *.so *.dylib # Compiled Static libraries *.lib *.lai *.la *.a # Executables OpenALwEAX.exe # Automake and Autoconf Makefile.in autom4te.cache aclocal.m4 compile configure depcomp install-sh missing # OS generated files .DS_Store .DS_Store? ._* .Spotlight-V100 .Trashes Icon? ehthumbs.db Thumbs.db .*.swp fifengine-0.4.1/.pylintrc000066400000000000000000000301531304641216200153140ustar00rootroot00000000000000[MASTER] # Specify a configuration file. #rcfile= # Python code to execute, usually for sys.path manipulation such as # pygtk.require(). #init-hook= # Add files or directories to the blacklist. They should be base names, not # paths. ignore=CVS # Pickle collected data for later comparisons. persistent=yes # List of plugins (as comma separated values of python modules names) to load, # usually to register additional checkers. load-plugins= # Use multiple processes to speed up Pylint. jobs=1 # Allow loading of arbitrary C extensions. Extensions are imported into the # active Python interpreter and may run arbitrary code. unsafe-load-any-extension=no # A comma-separated list of package or module names from where C extensions may # be loaded. Extensions are loading into the active Python interpreter and may # run arbitrary code extension-pkg-whitelist= # Allow optimization of some AST trees. This will activate a peephole AST # optimizer, which will apply various small optimizations. For instance, it can # be used to obtain the result of joining multiple strings with the addition # operator. Joining a lot of strings can lead to a maximum recursion error in # Pylint and this flag can prevent that. It has one side effect, the resulting # AST will be different than the one from reality. optimize-ast=no [MESSAGES CONTROL] # Only show warnings with the listed confidence levels. Leave empty to show # all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED confidence= # Enable the message, report, category or checker with the given id(s). You can # either give multiple identifier separated by comma (,) or put this option # multiple time. See also the "--disable" option for examples. #enable= # Disable the message, report, category or checker with the given id(s). You # can either give multiple identifiers separated by comma (,) or put this # option multiple times (only on the command line, not in the configuration # file where it should appear only once).You can also use "--disable=all" to # disable everything first and then reenable specific checks. For example, if # you want to run only the similarities checker, you can use "--disable=all # --enable=similarities". If you want to run only the classes checker, but have # no Warning level messages displayed, use"--disable=all --enable=classes # --disable=W" disable=import-star-module-level,old-octal-literal,oct-method,unpacking-in-except,parameter-unpacking,backtick,old-raise-syntax,old-ne-operator,long-suffix,dict-view-method,dict-iter-method,metaclass-assignment,next-method-called,raising-string,indexing-exception,raw_input-builtin,long-builtin,file-builtin,execfile-builtin,coerce-builtin,cmp-builtin,buffer-builtin,basestring-builtin,apply-builtin,filter-builtin-not-iterating,using-cmp-argument,useless-suppression,range-builtin-not-iterating,suppressed-message,no-absolute-import,old-division,cmp-method,reload-builtin,zip-builtin-not-iterating,intern-builtin,unichr-builtin,reduce-builtin,standarderror-builtin,unicode-builtin,xrange-builtin,coerce-method,delslice-method,getslice-method,setslice-method,input-builtin,round-builtin,hex-method,nonzero-method,map-builtin-not-iterating [REPORTS] # Set the output format. Available formats are text, parseable, colorized, msvs # (visual studio) and html. You can also give a reporter class, eg # mypackage.mymodule.MyReporterClass. output-format=text # Put messages in a separate file for each module / package specified on the # command line instead of printing them on stdout. Reports (if any) will be # written in a file name "pylint_global.[txt|html]". files-output=no # Tells whether to display a full report or only the messages reports=yes # Python expression which should return a note less than 10 (10 is the highest # note). You have access to the variables errors warning, statement which # respectively contain the number of errors / warnings messages and the total # number of statements analyzed. This is used by the global evaluation report # (RP0004). evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) # Template used to display messages. This is a python new-style format string # used to format the message information. See doc for all details #msg-template= [SIMILARITIES] # Minimum lines number of a similarity. min-similarity-lines=4 # Ignore comments when computing similarities. ignore-comments=yes # Ignore docstrings when computing similarities. ignore-docstrings=yes # Ignore imports when computing similarities. ignore-imports=no [BASIC] # List of builtins function names that should not be used, separated by a comma bad-functions=map,filter,input # Good variable names which should always be accepted, separated by a comma good-names=i,j,k,ex,Run,_ # Bad variable names which should always be refused, separated by a comma bad-names=foo,bar,baz,toto,tutu,tata # Colon-delimited sets of names that determine each other's naming style when # the name regexes allow several styles. name-group= # Include a hint for the correct naming format with invalid-name include-naming-hint=no # Regular expression matching correct function names function-rgx=[a-z_][a-z0-9_]{2,30}$ # Naming hint for function names function-name-hint=[a-z_][a-z0-9_]{2,30}$ # Regular expression matching correct variable names variable-rgx=[a-z_][a-z0-9_]{2,30}$ # Naming hint for variable names variable-name-hint=[a-z_][a-z0-9_]{2,30}$ # Regular expression matching correct constant names const-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__))$ # Naming hint for constant names const-name-hint=(([A-Z_][A-Z0-9_]*)|(__.*__))$ # Regular expression matching correct attribute names attr-rgx=[a-z_][a-z0-9_]{2,30}$ # Naming hint for attribute names attr-name-hint=[a-z_][a-z0-9_]{2,30}$ # Regular expression matching correct argument names argument-rgx=[a-z_][a-z0-9_]{2,30}$ # Naming hint for argument names argument-name-hint=[a-z_][a-z0-9_]{2,30}$ # Regular expression matching correct class attribute names class-attribute-rgx=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$ # Naming hint for class attribute names class-attribute-name-hint=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$ # Regular expression matching correct inline iteration names inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$ # Naming hint for inline iteration names inlinevar-name-hint=[A-Za-z_][A-Za-z0-9_]*$ # Regular expression matching correct class names class-rgx=[A-Z_][a-zA-Z0-9]+$ # Naming hint for class names class-name-hint=[A-Z_][a-zA-Z0-9]+$ # Regular expression matching correct module names module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ # Naming hint for module names module-name-hint=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ # Regular expression matching correct method names method-rgx=[a-z_][a-z0-9_]{2,30}$ # Naming hint for method names method-name-hint=[a-z_][a-z0-9_]{2,30}$ # Regular expression which should only match function or class names that do # not require a docstring. no-docstring-rgx=^_ # Minimum line length for functions/classes that require docstrings, shorter # ones are exempt. docstring-min-length=-1 [ELIF] # Maximum number of nested blocks for function / method body max-nested-blocks=5 [FORMAT] # Maximum number of characters on a single line. max-line-length=90 # Regexp for a line that is allowed to be longer than the limit. ignore-long-lines=^\s*(# )??$ # Allow the body of an if to be on the same line as the test if there is no # else. single-line-if-stmt=no # List of optional constructs for which whitespace checking is disabled. `dict- # separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}. # `trailing-comma` allows a space between comma and closing bracket: (a, ). # `empty-line` allows space-only lines. no-space-check=trailing-comma,dict-separator # Maximum number of lines in a module max-module-lines=1000 # String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 # tab). indent-string=\t # Number of spaces of indent required inside a hanging or continued line. indent-after-paren=4 # Expected format of line ending, e.g. empty (any line ending), LF or CRLF. expected-line-ending-format= [VARIABLES] # Tells whether we should check for unused import in __init__ files. init-import=no # A regular expression matching the name of dummy variables (i.e. expectedly # not used). dummy-variables-rgx=_$|dummy # List of additional names supposed to be defined in builtins. Remember that # you should avoid to define new builtins when possible. additional-builtins=_,__,N_,S_,SN_ # List of strings which can identify a callback function by name. A callback # name must start or end with one of those strings. callbacks=cb_,_cb [SPELLING] # Spelling dictionary name. Available dictionaries: none. To make it working # install python-enchant package. spelling-dict= # List of comma separated words that should not be checked. spelling-ignore-words= # A path to a file that contains private dictionary; one word per line. spelling-private-dict-file= # Tells whether to store unknown words to indicated private dictionary in # --spelling-private-dict-file option instead of raising a message. spelling-store-unknown-words=no [LOGGING] # Logging modules to check that the string format arguments are in logging # function parameter format logging-modules=logging [TYPECHECK] # Tells whether missing members accessed in mixin class should be ignored. A # mixin class is detected if its name ends with "mixin" (case insensitive). ignore-mixin-members=yes # List of module names for which member attributes should not be checked # (useful for modules/projects where namespaces are manipulated during runtime # and thus existing member attributes cannot be deduced by static analysis. It # supports qualified module names, as well as Unix pattern matching. ignored-modules= # List of classes names for which member attributes should not be checked # (useful for classes with attributes dynamically set). This supports can work # with qualified names. ignored-classes= # List of members which are set dynamically and missed by pylint inference # system, and so shouldn't trigger E1101 when accessed. Python regular # expressions are accepted. generated-members= [MISCELLANEOUS] # List of note tags to take in consideration, separated by a comma. notes=FIXME,XXX,TODO [DESIGN] # Maximum number of arguments for function / method max-args=5 # Argument names that match this expression will be ignored. Default to name # with leading underscore ignored-argument-names=_.* # Maximum number of locals for function / method body max-locals=15 # Maximum number of return / yield for function / method body max-returns=6 # Maximum number of branch for function / method body max-branches=12 # Maximum number of statements in function / method body max-statements=50 # Maximum number of parents for a class (see R0901). max-parents=7 # Maximum number of attributes for a class (see R0902). max-attributes=7 # Minimum number of public methods for a class (see R0903). min-public-methods=2 # Maximum number of public methods for a class (see R0904). max-public-methods=20 # Maximum number of boolean expressions in a if statement max-bool-expr=5 [IMPORTS] # Deprecated modules which should not be used, separated by a comma deprecated-modules=regsub,TERMIOS,Bastion,rexec # Create a graph of every (i.e. internal and external) dependencies in the # given file (report RP0402 must not be disabled) import-graph= # Create a graph of external dependencies in the given file (report RP0402 must # not be disabled) ext-import-graph= # Create a graph of internal dependencies in the given file (report RP0402 must # not be disabled) int-import-graph= [CLASSES] # List of method names used to declare (i.e. assign) instance attributes. defining-attr-methods=__init__,__new__,setUp # List of valid names for the first argument in a class method. valid-classmethod-first-arg=cls # List of valid names for the first argument in a metaclass class method. valid-metaclass-classmethod-first-arg=mcs # List of member names, which should be excluded from the protected access # warning. exclude-protected=_asdict,_fields,_replace,_source,_make [EXCEPTIONS] # Exceptions that will emit a warning when being caught. Defaults to # "Exception" overgeneral-exceptions=Exceptionfifengine-0.4.1/.travis.yml000066400000000000000000000042411304641216200155570ustar00rootroot00000000000000language: cpp sudo: false matrix: include: - os: linux sudo: required dist: trusty compiler: clang - os: linux sudo: required dist: trusty compiler: gcc - os: osx compiler: clang - os: osx compiler: gcc git: depth: 5 addons: apt: packages: - mesa-common-dev - swig - libsdl2-dev - libsdl2-image-dev - libsdl2-ttf-dev - libfreetype6-dev - libxcursor-dev - libopenal-dev - libasound2-dev - zlib1g-dev - libboost-dev - libboost-regex-dev - libboost-system-dev - libboost-filesystem-dev - libboost-test-dev - libtinyxml-dev before_install: - if [ $TRAVIS_OS_NAME == linux ]; then sudo apt-get -qq update && sudo apt-get install -y libgle3-dev liballegro5-dev libvorbis-dev libalut-dev cppcheck; fi - if [ $TRAVIS_OS_NAME == osx ]; then brew update && brew install swig sdl2 sdl2_image sdl2_ttf allegro freetype openal-soft tinyxml; fi # install newer version of pylint, the one fetched with apt-get is broken - if [ $TRAVIS_OS_NAME == linux ]; then sudo pip install pylint; fi install: - git clone --quiet --depth 1 git://github.com/fifengine/fifechan.git # https://github.com/fifengine/fifechan/blob/master/INSTALL.md - mkdir build_fifechan; cd build_fifechan; cmake ../fifechan - make -j2 - sudo make install - cd .. script: - cd .. - mkdir build; cd build; cmake ../fifengine - ls -alh . - make -j2 - sudo make install after_script: - cd /home/travis/build/fifengine/fifengine - if [ $TRAVIS_OS_NAME == linux ]; then cppcheck --verbose --enable=all --std=posix --std=c++11 --quiet -iengine/core/ext engine/core; fi - if [ $TRAVIS_OS_NAME == linux ]; then pylint --rcfile=.pylintrc ./engine/python/fife/; fi notifications: irc: irc.freenode.org#fife email: false #deploy: # provider: releases # api_key: # secure: "TiE1MLzq8DE2vJjiTeWnuhjEM/cH4hQ7yL/SSDkIqTijCY1eiCX6KPE7yDNh9F1SkCfxYyDPTuRc+f1EaAbk073aL56kUTM/bV/4TEcHk4TS40Hcd5aA10gR3XOH3lYwagT2edgXgXLA1cvU1tuwj8stKz1hEnkVlCvFdbvy4qg=" # file: Fifengine*.tar.gz # file_glob: true # skip_cleanup: true # overwrite: true # on: # tags: true fifengine-0.4.1/AUTHORS000066400000000000000000000034531304641216200145220ustar00rootroot00000000000000anchorite aldart anxs ashen cheesesucker chewie chris ChrisOelmueller donbachi hahasound helios2000 icelus ifoobar ismarc jakoch jasoka joe_hegarty joshdan jwt kaelisebonrai kozmo labrat lynxis m64 mortiz_ MuteX mvbarracuda neurogeek nihathrael Niektory nikn novade ottar phiker phoku plcstpierre prock rogerwilco shadowdancer shales sja skybound sleek spq stro stubb tesseract thebastion trapdoor undeadinsanity vdaras < vasileiosdaras@gmail.com> vja virus vovansim vtchill wulax yonibear zahlman zbyte64 fifengine-0.4.1/CHANGELOG.md000066400000000000000000001442771304641216200152750ustar00rootroot00000000000000# ChangeLog ## [0.4.1] - 2017-02-07 ### Engine * Corrected wrong postion handling for events. * Added AnimationManager, issue #675 * Enhanced XML formats, issue #963 * Added events for mouse wheel left and right, issue #967 * Fixed Location::getLayerCoordinates() on hex grids, issue #970 * Removed special treatment of function keys, issue #976 * Fixed tinyxml issue, was not being able to overwrite existing file, issue #978 * Map more SDL keys to CEGUI keys, issue #980 ### Extensions * Load default settings if settings file has no FIFE module, issue #959 * Update exception handler in ApplicationBase, issue #969 * Remove Icon from manager on source load failure, issue #972 ### Misc * Ensure that FIFE exception message is printed in Python, issue #974 * Several build fixes and improvements ## [0.4.0] - 2017-01-16 * removed Psyco JIT support (by removing "UsePsyco" and the related code) * removed "scons" build system * rename "cegui-0" (v0.8+) to "cegui" * removed cegui compatibility layer for versions below v0.7.9 ### Engine * renamed overloaded createTrigger and removeTrigger methods, issue #947 + PR #950 * Got rid of various compiler warnings * Add getCellsInCircleSegment() to CellCache and getInstancesInCircle(), getInstancesInCircleSegment() to Layer * Add MultiPathfinderTest * Add new instance function, prepareForUpdate() * Local tinyxml files are now only added to the compile list if either local-tinyxml is defined for SCons or the system version of tinyxml is not found. [t:619] * Add animation & color overlays [t:201], fixes [t:762], [t:764] and [t:763] * Merge GSOC work done by vdaras. * Replaces Guichan dependency by Fifechan * Add support for librocket * Add support for cegui [t:726] * Fixed keyboard input of control characters for CEGUI by Niektory [t: 796] * Make use of Fifechan optional * Add overlay test ### Extensions * Added the gl/GLU.h header to the atlas creator [t:740] * Removing the soundmanagers dep on pychan [t:767] * Slightly modified frange() to be more robust and fixed the ceil() call, fixes [t:725] * Convince SWIG that Color.r (g, b, a) should be a python property [t:799] * Inherit fife.Exception from python's (Base)Exception [t:788] * Import cleanup in pychan.widgets [t:787] * Fix password- and textfield not accepting initial data * Remove cell_pathfinding compatibility layer [t:775] * Fix typo in fife_settings ### Misc * Renamed all --with/--without scons options, fixes [t:797] * Add travis configuration by jakoch [t:784] * Modifying the versioning scheme [t:783] * Darwin config now expects everything to be installed from source ## [0.3.5] - 2013-08-21 ### Engine * Fixed another LayerCache bug. * Fixed blocking bug, which has affected multi cell objects. * Fixed segmentation fault within pathfinder. * Fixed segmentation fault within Instance::follow. * Fixed the visible/invisible problem. [t:780] * Fixed facing location and a related bug. [t:773] ## [0.3.4] - 2013-02-28 ### Engine * Fixed a couple of compiler errors when SDL renderer is chosen (i.e. HAVE_OPENGL macro is not defined). [t:693] * Changed the way instance rotation works. Instead of using a facing location the instance now use only a rotation value. But the possibility to get and set facing locations is still available. In case you set a facing location, internally it is converted to a angle or in case of get, the angle is converted to a location. [t:647] * Fixed grid scaling by camera rotation. [t:695] * Optimized camera update() function. Old caused two matrix updates. * Changed the angle/rotation functions to use MapCoordinates instead of ExactLayerCoordinates. * Added a virtual destructor to the IResourceManager interface. [t:709] * Fixed a problem with the usage of the size_t type. [t:702] * Addressed some API inconsistencies. Renamed LogManager::isLoggingToPrompt() to isLogToPrompt() and LogManager::isLoggingToFile() to isLogToFile(). This shouldn't affect python clients as the appropriate changes have been made to the python extension. [t:711] * Addressed more API inconsistencies. Renamed (in serveral places) setMouseAcceleration() to setMouseAccelerationEnabled() and getMouseAcceleration() to isMouseAccelerationEnabled(). This shouldn't affect python clients as the appropriate changes have been made to the python extensions. [t:711] * Fixed some problems when zooming at 200% or 300%.. etc etc. Images were not exactly 2x2 or 3x3. [t:719] * Added getMapViewPort() and getLayerViewPort() functions to camera class. These functions return the position and size of the camera in map or layer coordinates. CellRenderer make use of it to speed up rendering, especially when many cells exist in the cache. [t:647] * Added Fog of War support. * Pathfinder has been completely re-written. * Added getDesktopHeight() and getDesktopWidth() to DeviceCaps. [t:669] * Enhanced Instance coloring. The new alpha component is used as interpolation factor. [t:729] * Ensure SCons version is 2.0+. [t:735] * Added the staticLayer feature so that layers can be rendered as one texture. [t:742] * Client can now select, per Layer, between three sorting algorithm. ### Extensions * Fix event groups in pychan; only the last group's callback used to be considered. [t:23] * Added the getter and setter functions to the fifelog extension. [t:711] * Replace 'dct.has_key(k)' with 'k in dct'. [t:631] * You can now overwrite existing widget types without pychan "trying" to throw an exception. There is no feedback if you do overwrite an existing widget, it will silently allow you to do so. fixes[t:748] * Allow client to set focus to a child widget when using widget.execute(). [t:750] * Fixed a bug in the slider widget which caused it to ignore the step length. [t:754] * Unknown exceptions are now caught by BasicApplication and the engine is exited gracefully. This prevents an endless output of exceptions from being printed to the console window. [t:755] * Added the ability to set the horizontal_scroll_amount and vertical_scroll_amount via XML for scroll areas. [t:692] * Modified the default settings dialog box to no longer use drop downs. This prevents the dropdown segfault from happening. [t:756] * Fix typo in xml serializer. This was leading to a crash when extra_attrs were passed. [t:760] ### Misc * Added some excludes to the fife.iss file so it doesn't include some files that it shouldn't when building the windows installer. [t:601] * Changed the python executable back to python.exe from pythonw.exe in the windows installer. pythonw.exe crashes with some version of python when you output something to the console screen. [t:601] * Added PathfinderTest to fife tests. It demonstrates multilayer movement and how speed and cost multiplier could be used. [t:647] * Updated the header file location for fifechan when building with mingw on windows. [t:698] * Update to allow FIFE to find fifechan when it is installed in the libpath. Tested this on archlinux. [t:698] * Allow for parallel builds. fixes[t:696] * Removed unused file - freebsd8-config-dist.py. [t:716] * Updated the COPYING file to be the current copy of the LGPL 2.1 text. It seemed to contain an older version of LGPL. fixes[t:718] * Modifying code/comments/file headers that apply to this branch to conform to the new coding standard. Also applied the correct eol-style svn property for some of the new files. [t:647] * Applying patch provided by gscai. This allows for custom command line parameters to be passed to the windows build batch files. [t:737] * Applying patch provided by gscai. This allows the use of the CXX environment variable to change the path to the desired C++ compiler. [t:738] * Fixed a bug where the shooter demo would crash after a few seconds after starting a new game. This also prevents the player ship from being lost off the left side of the screen. [t:747] ### Docs * Updated the doxygen configuration file to be current with the latest doxygen version. * Added a process on the web host to generate doxygen documentation as well as epydocs for the python modules. * Doxygen docs now include the FIFE revision number they were generated from. * Updated a comment in quadtreerenderer.cpp that was being mistaken by doxygen for the FIFE namespace docs. * Added FIFE namespace documentation to version.h * Fixed a bunch of doxygen warning/error messages (now that we are able to see them). [t:550] * Epydoc formatting fixes for xml loader files. [t:724] ## [0.3.3r3] - 2012-04-17 ### Engine * Implemented C++ map savers which is now being used by the editor. [t:491] * Fixed instance Z so it works now as expected. This should only be used for small optical corrections. (r3810) * Added layer z offset. [t:366] * Fixed a problem with instance setLocation(). (r3810) * Removed sub image loaders as they are not used. (r3811) * Object is no longer derived from IResource. (r3811) * SDL Renderer now renders quads as expected. [t:607] * Changed the Image creation in CoordinateRenderer. The coordinate is now splitted into three images. So the TextRenderPool can reuse the most images and must not create one for each coordinate. Additional the images take camera zoom into account, but you can also disable it. [t:612] * Added InstanceDeleteListener to InstanceRenderer and RenderNode. [t:602] * All images created by effects are now owned by ImageManager and freed if no longer used after 60 seconds. [t:611] * Added the set method to PointType2D and PointeType3D. [t:615] * Changed the way Atlases and SubImages?(SharedImages?) are loaded and freed. SubImages now store a ImagePtr to its Atlas and the name. So a AtlasImage is only unreferenced if all SubImages are removed. It is also possible to free all images. Images that are required but were freed, invite self-adjusting. [t:605] * Added functions to allow the client to set the mouse position on the screen and retrieve it as a tuple in python. [t:617] * Added another version of captureScreen() that takes width and height params allowing you to resize the resulting image. [t:618] * Fixed a bug that led to Segmentation Faults, if the BitsPerPixel setting was different than 32. [t:623] * Added support for True Type Collection fonts. [t:614] * Optimized getMatchingInstances(). [t:592] * TargetRenderer is no longer dependent on map loading. [t:636] * Small fix in the AtlasLoader to set the filename of any objects read from the atlas file to the atlas xml file instead of the image file like it was doing previously. This fixes a problem seen in the map loading/saving where the imports would save the image file instead of the xml description file in the map. [t:491] * Zooming now works as expected with x and y offsets. [t:667] * We now get more information when gcn::Exception is thrown. [t:665] * MapLoader now allows for .zip files to be loaded. ZipSource implements a smarter file search so it can properly load files from a zip archive. [t:491] * Removed the lasttime_draw reset from TargetRenderer, because this can cause problems. [t:674] * Cursor no longer moves to 0,0 on startup. [t:670] * Removed unneeded command line option -Wl from both release and debug builds as this was breaking builds on gcc 4.7 and above. [t:691] ### Extensions * Fixed the file extensions registration for python plugin map loaders. [t:609] * Setting module is more robust on errors concerning non-string parameters. [t:626] * SimpleXMLSerializer now saves XML files with platform specific line engines. [t:630] * Child widgets should correctly report if they are hidden or not. [t:628] * Removing the hack to grab references to the GUIChanManager. Now we just use the pychan manager to grab what we need to grab from the GUIManager. Added 4 new functions to pychan Manager. getConsole(), getDefaultFont(), createFont(), and releaseFont(). [t:644] * Fixed deepApply() to now include hidden children in it's search. also added the ability to only search for visible widgets. [t:608] * GUI Icons can now be resized at render time. [t:655] * Widgets can now be cloned to make widget templating possible. [t:376] ### Editor * Users can now specify an additional plugin directory for the editor. [t:598] * Fixed a couple small editor bugs regarding map loading. [t:603] and [t:604] * Added a plugin interface to extend the editor with savers. [t:610] * Toolbars can be docked/undocked again. [t:635], [t:640], and [t:641] * The toolbox, toolbar, and statusbars statuses are now reflected correctly in the menu. [t:643] * Object Editor plugin now displays animations as expected. [t:624] * Added InstanceHighlighter plugin * Added docking status saving to ToolBar widget class, added default docking settings for Toolbox * Re-arranged init order in MainWindow.initGui() to make dockareas available for ToolBar * Small change to screenshot icon to give it a bit more space on the left * Refactored ObjectSelector ** Added auto-alignment depending on docking area (vertical/horizontal) ** Right click can be used to trigger the alignment change manually ** No annoying resizes on object selection ** Speed issues not fully solved, but pin-pointed: resizing ~200 icons is a bit too much for pychan * GUI Plugins can now use auto-alignment functionality from the ToolBar class * Small design fix in LayerTool * Small fix for MapFileHistory * Editor now doesn't load the same mapfile twice (gives feedback in the statusbar) * Re-enabled saving for ObjectEdit? plugin * Implemented XMLObjectSaver which allows serialization of a fife.Object ** NOTE: only well-formed xml files are accepted ** NOTE: provides a compat-mode to scan for tree roots, but also uses new tree root * Added namespace sorting to ObjectSelector * Refactored ObjectEdit ### Misc * Removed some unnecessary warning messages from Model. [t:645] * Removed non-free icons from the atlas editor and added license file to the atlas editor. [t:637] * Added a proper distclean build target. [t:622] * Added getRevision() to allow client to query the revision FIFE was build from. This only works if svnverion is present in the users PATH. Window users will always get 0. [t:671] * Added a check to animpacker.py to convert double points in action names to underlines. Additional the convert now consumes less RAM, because the ImageManager free images. [t:677] ## [0.3.3r2] - 2011-11-02 ### Engine * Added getVersion(), getMajor(), getMinor(), getSubMinor() functions and exposed them to python. [t:582] * Added a new math function to compare floats/doubles. It returns true if the difference is smaller as delta. * Fixed the getMatchingInstances() function. [t:579] * Added an bool to getMatchingInstances(). If a client need pixel accuracy results it should be set to true. Otherwise it should be set to false because so it skips the pixel compare and is much faster. [t:586] * Added two more InstanceChangeTypes, ICHANGE_BLOCK and ICHANGE_CELL. [t:574] * The ActionFrame for animations has been made functional. This means a minor API change. For details look into the changed demo scripts. [t:573] * Fixed the broken FIFE::Command type events. Now all event states are evaluated and not just one. Example from the ticket works now as expected. [t:503] * The DELETE macro which is defined in winnt.h is undef'ed on any windows platform that defines the WIN32 macro. This fixes compilation when using visual studio. [t:589] * Added two new mouse settings. The first one is the mouse sensitivity and the second can enable mouse acceleration. The sensitivity is limited to -0.99 (the slowest) and 10.0 (the fastest). If you enable mouse acceleration then the sensitivity is used as the max speed value. You can also change it on runtime with the EventManager. [t:487] * Added the getPtr() functions to ImageManager. All loaders now check to see if an image has been defined before creating it. This was a small bug that caused the image to be loaded even if the image was defined but not loaded in the first place. [t:590] * Fixed a bug in ImageManager::removeUnreferenced(). It would cause a segfault when executed. This has been fixed. * Fixed the problem where the animation atlas image becomes invalid after deleting all objects from model. [t:590] * Added a setting to allow users to deactivate the usage of the Framebuffer Object in opengl backends. refs[t:581] * Added a setting to allow users to deactivate the usage of NPOT Textures in opengl backends. [t:581] * Fixed a condition where if a widget is dragged to an area on the screen where there is no widget the event gets lost. It also prevents the focus from being dropped. [t:594] * Fixed a condition where the user drags from the map to a guichan widget and an event is lost. [t:594] * Added getRealCellDimensions() function to camera. [t:592] * Fixed a bug with Image names in TargetRenderer. [t:595] * Added 1024x600 as a valid resolution. [t:597] ### Extensions * Fixed a problem where the setting value cache is not updated [t:578] * Fixed a problem in fife_settings.py when starting the editor because the editor tried to modify the value of a setting not in the FIFE module. [t:578] * Added 'all' to the valid LogModules setting [t:578] * Pychan widgets can now be shown/hidden even if they are not top level containers [t:375] * Fixed a small bug with basicapplication. It was grabbing a reference to the gui manager incorrectly. ### Editor * Fixed a bug in the layertool GUI. It was using the quit.png icon as its delete layer image instead of the delete_layer.png icon. [t:583] * Replacing the editor's icon files with free ones. [t:584] * fixed a bug in pychan.internal (hide() method didn't handle deletion correctly, added a guard & docstring to explain why this is bad) * added new functionality to Plugin base class (read settings from editor's settings file) * added afterDock / afterUndock methods to Panel widget; did some code cleanup & improvements to meet coding standard * added documentation to the editor (mostly in docking functionality) * updated both MapFileHistory? and LayerTool? plugins to use the new Plugin functionality - their docking status is now saved & loaded again * added new event 'onOpenMapFile' to the signalmanager which sends the path of the requested mapfile * added MapFileHistory? plugin * records previous loaded mapfiles and loads them on editor startup via settings xml * selecting a mapfile either loads the map or updates outdated entries (e.g. if a map has been deleted) * I added a max value of 5 entries, can be adjusted in the plugin file though * fixed minor issue with moving multiple selected instances * fixed "move"-mode of editor - it now doesn't try to select / deselect cells (that's the task of "selection mode") * fifedit now can handle instances on hex grids again * deselection of cells is now possible (previous implementation never could work) * switched instance selection from pixel-perfect to location (click on a cell -> you select your instance, even if the cursor didn't scratch the instance image) ### Misc * Fixed the Free Software Foundation address in COPYING as it was outdated. * Added some more tiles to the rpg tileset in fife_test. * Added a Show Hide test to the PychanTest module in fife_test. * Small fix for the base class Test in the fife_test application. The create function reversed the engine and application parameters from what is actually passed in by the TestManager. The PychanTest was unaffected because it had the parameters in the correct order as opposed to reversed in the base class. * Commented out a whole lot of debug statements to make the debug output in FIFE useful again. I left them in the code in case anyone still needed them. * Added more tests to the fife_test testing platform. [t:683] ## [0.3.3] - 2011-10-06 ### Engine * Many optimizations/improvements to the OpenGL renderer. Depth testing was modified and now works properly with alpha blending enabled. Alpha testing is used to discard pixels. [t:556] * Optimized color overlays. [t:539] * Customizable alpha threshold value for outlines / outlining [t:569] * Added support for drawing/modifying images. [t:553] * Re-implemented the Resouce Pools (ImagePool AnimationPool, etc) as ImangeManager, SoundClipManager, etc. [t:504] * Setting module no longer crashes when settings dialog has not been loaded. [t:555] * Fixed the problem that the objects of the renderers don't get deallocated when the camera deconstructor was called. Affected renderers: Instance-, Cellsection-, Generic- and LightRenderer. * Added the missing reset() and removeAll() functions to the GenericRender and LightRenderer. * Removed the Engine::preInit() function. * Removed EngineSetting::getPossibleResolutions() and validate() functions * EngineSettings no longer throws any exceptions. Instead default values as assigned and a warning message is sent to the logger. * Some optimizations to LayerCache and Camera * Removed some unnecessary includes. * Changed when some exceptions are thrown. [t:511] * Added setBackgroundColor(), so a client can change the clearing color for the screen. [t:307] * Added camera overlay functions. Clients can now add a color, image and animation overlay to the camera [t:460] * Made sure that the fife logger is part of the FIFE namespace. * Modifying all integer definitions to conform to the C99 standard. * Added the getMinMaxCoordinates() function to the map class. It retrieves the minimum/maximum coordinates of instances on the map. * Changed Model::getNumMaps() to Model::getMapCount(). * Changed Map::getNumLayers() to Map::getLayerCount(). * Changed Animation::getNumFrames() to Animation::getFrameCount(). * FifeClass is no longer derived from IReferenceCounted. * ResourceClass now implements the reference counting routines. * Singletons are no longer derived from FifeClass. * Modified the HexGrid? and SquareGrid? clone process to work as expected (even though it's not really used). This doesn't fix the obvious problems with CellGrid? and the way grids are created. This will have to be looked at closer in the future. * Made the quad tree depth easily changeable (instead of hard coded to 2) . * SquareGrid? now uses diagonals by default. * Model now logs to the LM_MODEL log module. * Small modifications to Exception to make it output to the log correctly. Now we can read the exception output. * Changed a few sqrt to match the new math definition. * Added layers getMinMaxCoordinate() function to python. * Renaming the only 2 .hpp files to conform to standards. * Optimized the lightrenderer a bit. * Fixed a build error on updating project files. This was caused by not installing the mingw part in the devkit installer. * Added code to support different versions of boost filesystem. [t:529] * Fixed some color variables (Uint8, int32_t to uint8_t). * Added some code to the python build environment to support python 2.4+. [t:465] * Fixed a segfault in the view_tests.py unittest. * Settings now list valid screen modes. [t:494] * the default image loader now throws exceptions if the image fails to load. * Fixed a bug in RawData::read where an incorrect calculation was done to check the validity of a passed in parameter. This caused a problem with loading asset files when the file did not have an appended new line at the bottom. Also modified the RawData::getDataInBytes, RawData::readString, and RawData::read methods so that they do not create a temporary data array and instead read directly into the output buffer, this should be more efficient. Added a quick comment to xmlobject.py describing why a raise call is subverted by an earlier return statement. [t:516] * Removes an unnecessary call from endFrame(). * Fixed some unittests. * Added a framerate limiter. [t:525] * Replaced the Generic- and LightRendererNode with RendererNode. * Fixed the distance calculation in routepather.cpp. * Added the OffRenderer. This is the only renderer that does not need a map or camera. The functions are identical to those of the GenericRenderer, but it use screen coordinates. This renderer is only intended for cases where no map is loaded, eg for an intro. * Changed the swig video_tests.py to use the new renderer. * Removed the primitives and a few other functions from the python interface. These are no longer needed. * Added the swig cursor unit test. * Added some getter functions to cursor along with some documentation. * RenderItem now stores an ImagePtr. * Fixed SharedPtr destructor. [t:561] * Added the getInstancesIn() function to Layer. This picks the Instances from the InstanceTree. * Fixed getMatchingInstances(). The picked instances be checked with the instances of the layer. To compare the instances, getInstancesIn() is used. [t:562] * Unnecessary InstanceActivity? are now detected and deleted. Inactive Instances are removed from Layer m_active_instances. [t:564] * Changed from using RawData::getDataInBytes to use RawData::readString in the animation/atlas/object/map loaders because the readString function appends a null terminator onto the end of the data contents. Without the null terminator errors were sometimes seen when trying to load map assets. * Added some error log printing indicating when map assets fail to load. [t:567] * Modified the RawData::read function so that it no longer appends a null terminator as this was causing the python xml loaders to throw a ParseError exception. Also fixed the RawData::readString function so that it now appends the null terminator in the proper place. [t:567] * Made scons check for the dev libraries of whatever python the user ran scons with. [t:523] * Fixed a problem where pychan will throw an exception when trying to print UTF8 characters to the console. [t:571] * Fixed and optimized a few functions in location.cpp. [t:563] and [t:568] * Added option --lib-dir to scons build system to specify a shared library install location. The shared library generated will now contain an soname that will be libfife.so.major. Also changed the generated shared library name to be libfife.so.major.minor.release. Added a version.h file to engine/core that will contain the current fife major, minor, and subminor versions and should be updated for each fife release. [t:575] * Fixed minor bug in getMatchingInstances(). This means that sometimes a wrong choice was made, because alpha value was not correct. * Change the way you set FIFE::Cursor to allow cursor to save a reference to the image or animation. Added a function to reset the cursor drag to nothing. * Added GLee - currently it's compiled with fife as .cpp (scons doesn't get compiled .c files). * Initial support for c++ map/object/animation loaders. [t:491] * Added dependency tinyxml for reading xml files. This is stored in engine/core/ext/tinyxml directory. The scons scripts will attempt to use system version of tinyxml if available otherwise the local one will be used. [t:491] * Added image Atlas support. [t:542] * Added a zoom flag to the image/animation functions of the GenericRenderer. So a client can disable the zoom for images. [t:543] * Fixed a bug that caused the generated SWIG interface file for fife to not compile when building with gcc 4.6.1. [t:546] * Began work on de-coupling FIFE from guichan. [t:549] * Changed Guichan graphics renderer to utilize vertex array instead of immediate mode. [t:549] * Removed Abstract* classes in favor of I* classes. This is to conform to our coding standards. [t:550] * After a new layer is added it is now activated for all renderers. This fixes the problem of no instances being rendered for a newly created layer. [t:551] * Added the option to change the alpha value for instance picking. * Added a setting for backbuffer clearing. So clients can deactivate it if they have reasons for this. * Removed the old setImageChunkingSize() setting because its useless. * Changed the pump function. Model update gets only called if a map is loaded. * Adding a quick and dirty shared pointer implementation that does not rely on any 3rd party libraries. This will need to be extensively tested and can always be swapped out for another implementation including boost::shared_ptr. * Added the unittest for SharedPtr. * Instances now inherit blocking property from objects [t:514] * Settings are now validated. [t:528] * VFS now allows paths outside of launched applications when using a python client. [t:544] * Reworked the lighting module. [t:557] * The Windows icon is now freed correctly. [t:530] ### Demos * Fixed a bug in the shooter demo that caused a crash. [t:495] * Updating the rio settings-dist.xml file to include the log level filter setting. * Added animated percentagebar widget to gui animation demo. * Pychan demo now closes when you press escape or when you close the window. [t:531] * Shooter demo now generates a hichscore file if one does not exist. ### Documentation * Documented the shooter World.reset() function. * Updating the dependency graphs. [t:554] * Documented all valid FIFE settings. [t:527] ### Extensions * Updated basicapplication.py to initialize the logger before settings so that setting messages will be logged. * Removed some deprecated functions in pychan. * Removed the deprecated ClickLabel widget from pychan. [t:552] * Added changeBlending() to python. ### Tools * Editor no longer crashes when there are too many instances on the map when using the OpenGL renderer. [t:500] * Added Atlas Creator tool. Currently it's a standalone application written in Qt. [t:541] ## [0.3.2] - 2010-11-19 ### Engine * Removed the Camreazone renderer * Added light support (OpenGL only) by merging the light branch. Speacial thanks to Helios for all his hard work in this area (#364) * Added a percentage bar widget (#411) * Modified some size_t definitions to more appropriate ones (#152) * Instance rotation changes are reported to the instance change listeners (#475) * Fixed the GenericRenderingNode to no longer cause a segfault (#446) * Fixed an API inconsistency in SoundEmitter (#461) * There is no longer a memory leak when adding coloring overlays to instance (#472) * instance.get2dGfxVisual().setVisible(False) now works as expected (#471) * Removed the last 0(n) loop through instances when rendering (#419) * Generic renderer now only renders objects on the specified layer (#458) * Fixed a memory leak when deleting maps. The camera was not being deleted * Removed the NotFound exceptions in layer.getInstance() and model.getObjects() to be more consistent with the rest of the API * Fixed a bug in RenderBackendSDL, the clip area was not properly set * Renamed the backquad and border commands of the FloatingTextRenderer * Added the TransparentArea commands to the InstanceRenderer * Improved InstanceRenderer::addTransparentArea. You can now pass a list of namespaces to be marked as transparent * Updated Instance to no longer derive from ResourceClass. It now derives from FifeClass directly * Improved the floatingtextrenderer. Now you can set an alpha value for font, background quad and border. Split quad and border into own commands * Added a triangle function to backend and genericrenderer, also added the functions to set an alpha value for geometric figures * floatingtextrenderer now can change colors of the font via setColor(uint r, uint b, uint g) * Added the colorbuffer patch with a small change due to SDL. Performance boost between under OpenGL * Improved the most renderers with setColor() function to allow the user to modify the color used to render the primitives * Fixed the genericrenderer. It is now tested whether the images are in the viewport * Fixed the gridrenderer to only render the grin within the viewport * Changed the vertex functions in opengl/renderbackendopengl.cpp from vertex3f() to vertex2f() * Moved the layer visibility and transparency, from instancerenderer.cpp to layercache.cpp and improved it (r3395) * Corrected the h,w calculation for zooming in layercache.cpp (r3369) * Fixed the bug, that x,y camera position result in an screen offset. (r3369) * GLImage now only creates one "texture chunk" (r3445, r3452) * Added nextPow2() math function (r3445) * Fixed color mask definitions and use them throughout the engine (r3445) * Moved the GLEnable and GLDisable structures to be globally accessible (r3445) * Templatized Rect to extend it's functionality beyond integers (r3447) * Added some typedefs: Rect, FloatRect, DoubleRect (r3447) * Removed the unused "trigger" system as it was unused (r3449) * Applied GreyGhosts patch to fife_settings. Allows the user to load the gui XML whenever they want. Also returns a reference to the dialog so it can be worked with outside of fife_settings. (r3451) * Removed unused files containing the unused GUIEventListener class (r3453) * Removed old and unused functions: set/getSourceWidget() (r3455) * Added drawRectangle() and fillRectangle() functions to the renderers (r3456) * Modified FIFE::FloatingTextRenderer? to use the new functions (r3456) * Updated some data types in FIFE::FloatingTextRenderer to use integer types defined in fife_stdint.h (r3456) * Added FIFE::DeviceCaps and FIFE::ScreenMode to detect valid screen modes * Added the ability to query the current running screen mode (r3467) * Added a method to detect the closest supported screen mode (not complete yet). If no matching screen modes are detected an exception is thrown. (r3467) * Small change to the way the screen is initialized. The screen mode now MUST be in the supported screen mode list before the screen will initialize. (r3467) * Added clearResourceLoaders() to the Pool class. This can be used if different resourceloaders have to be added at a later point in time (running editor for example, a plugin might want to have it's own loader added) (r3469) * Added the ability to normalize a 2D and 3D point (r3470) * You can now rotate a 2D point around the origin or a specific point (r3470) * Major improvements to fife_math.h and added corresponding Python bindings. Users now have access to FIFE's internal math functions. These functions are recommended to be used by all clients if required. Note: this may cause some problems with certain compilers. I hope this wont have to be reverted. TODO: remove the static constant globals somehow. (r3471) * Adopted the new math functions for all subsystems (r3471) * Added the ability to change screen modes on the fly. This works both in OpenGL and SDL modes. (#315) * Added IEngineChangeListener so the client can update the cameras viewport if the screen mode has been changed. I chose to do it this way because the engine has no way to know which camera it should update. It will be up to the client to do it. (#315) * The cursor surface is now correctly freed when exiting. (r3483) * Added DeviceCaps::getNearestScreenMode() for the client to request a supported screen mode. (#315) ### Build System * Removed libpng from ext (#385) * Debug is now automatically enabled when you build with profiling enabled (r3292) ### Editor * Re-arranged the ObjectEdit gui to avoid misunderstandings * Can now place instances (which are visible) on new maps again (r3392) ### Extensions * Added the SimpleXMLSerializer extension * Removed the XML portion out of fife_settings in favor of SimpleXMLSerializer * Made the serializer used in fife_settings "pluggable" * fife_settings widgets are now updated when the settings are reset to default * Can now specify the default settings filename instead of using settings-dist.xml * Fixed the write_instances function so it saves the stack position variable of instance visual when saving maps * Added getVolume() to the SoundManager * Added debug flag to loaders to enable/disable annoying print spam on maploading * BasicApplication now initializes pychan (r3388) * loaders extension can now handle multiple loaders for different filetypes. A difference between map and object files is now being made! (r3469) * Modified the sound manager to better take care of sound clips (r3476) ### Docs * Added some documentation to the filebrowser module ### Pychan * Timers are now handled correctly by pychan (#483) * Can now modify the step length for sliders (#482) * Built in pychan dialogs now work (r3384) ### Demos * Renamed /demos/pychan_demo/pychan_test.py to pychan_demo.py * Added a new pychan demo - gui animations * Added the Shooter demo * Made the dynamic widget test in the pychan_demo work/look a little better (r3484) ### Misc * Fixed some compiler warning messages * Added license information for the gimp icon ## [0.3.1] - 2010-03-01 ### Engine * Updated a lot of the python source files to have the correct headers * Fixed SWIG wrappers that didn't handle simple output parameters (#340) * Added color key support for both OpenGL and SDL renderer (#451, #146) * Changed the EventManager to use deque rather than vectors for storing listeners (#454) * Added the ability to prepend event listeners to the front of the listener list (#454) * Updated instance rotation values to be valid in all cases (#361) * VFS no longer crashes when entering a restricted path (#413) * Filename case is no longer transformed to be lower case (#418) * OpenGL renderer now clears the backbuffer correctly (#392) * Added the ability to render Vertexes (#455) * Camera names no longer clash when loading multiple maps (#342) * All layers are no longer activated when calling Camera::resetRenderers() (#457) * Word wrapping in a pychan label now works as expected (#408) * SWIG wrappers now handle all simple output parameters (#340) * Added ActionVisual::getActionImageAngles() * Added Cursor::getX() and Cursor::getY() ### Build System * FIFE now builds as expected on win32 using the FIFE dev kit * Win32 batch scripts no longer overwrite the users PATH variable (#429) * Requied DLLs are now installed as required on win32 (#430) * CXXFLAGS should now be honored * Fixed a problem with the dependency checks when using pkg-config on linux * Added OpenBSD support ### Editor * Can now re-load a map (#381) * Opening more than one map and then closing them no longer causes a crash (#441) * Undo/Redo works properly if you select different layers (#443) * Docked widgets no longer shrink when you click inside them (#444) * Object editor can now skip to first and last frames of an animation (#448) * Object editor sends some messages for the user to the editor status bar * Cleaned up object editor by adding preMapClosed and preMapShown events * Object editor now uses getActionImageAngles() to fetch animation angles * Object editor animation views should now work with all clients * Object offsets can now be saved to the object.xml file * Object offsets can now be manipulated by using the mousewheel * Added undo/redo support for the moving of instances ### Extensions * File Browser now refreshes correctly (#391) ### Docs * Fixed the Linux:Scons tutorial (#422) ### Pychan * Fixed a couple python import lines (#440) * Added Widget.requestFocus() ### Rio De Hola * Fixed the path to the AUTHORS file so the credits are displayed correctly ### Misc * Added color tester to pychan demo * Demos now look for a local copy of FIFE before importing the installed version of FIFE ## [0.3.0] - 2010-01-20 ### Engine * Moved to Python 2.6 (#345) * Upgraded guichan in ext to 0.8.2 (#420) * Added UTF8 support * SCons build system has been re-written (#328) * Support for native mouse cursors * The background of Label widgets will be painted * Added adaptive pathfinding (#347) * Modified CellSelectionRenderer to support multiple cell selection * Added method Layer::getInstancesAt() * Added SoundEmitter::setCallback() * Added a setRolloff() function to the SoundEmitter class. * Added function to fife_utils: getUserDataDirectory. Returns the proper path to save setting and data files depending on OS. * Removed UnitTest++ from ext (#421) * Changed the way the fife python module is imported * The serializers will use LogManager instead of printing directly to the console * GuiManager: Proper translation of Guichan key events to FIFE key events * Proper size calculation for ToggleButton * Fixed a layer visibility bug where the toggleInstancesVisible and setInstanceVisible functions were not working correctly. (#335) * Fixed building FIFE on OS X (#360) * Fixed setActionRuntime() (#373) * Fixed unreliable time handling when changing time factors. * Fixed a bug in the OpenGl renderer where the last chunk of images would not be displayed when image_height % chunk_size was 0. * Fixed layer and instance transparency (#378) * Fixed a lot of small bugs ### Rio de hola * Made rio_de_hola save its settings to the proper OS folder. * Added a prefix to cameras in Rio de Hola to avoid name clashes * Fixed second camera in rio so multiple Camera.setLocation calls are handled correctly * More documentation has been written ### Editor * Rewrote editor: - Improved GUI: - Resizable windows - Docking - Toolbars, menubar, statusbar - Model/View approach to toolbar and menubar buttons - New signal event system based on the one from django - Support for opening multiple maps - Better plugin support * New plugin: LayerTool * New plugin: LightEdit * New plugin: CameraEdit * Enhanced ObjectSelector * Enhanced ObjectEdit * New tool: ObjectPicker. Click on an instance on the map to set the current object to the instance object * Ability to select cells and perform actions on them (move, delete, fill, ...) * New type of scrolling: Press middle mouse button and move the mouse * New icons based on Bluesphere * Made the editor save its settings to the proper OS folder. * Fixed editor bug where the map didn't render after saving (#333) * Editor can now re-open a map (#381) * Fixed a problem navigating directory structure with the filebrowser (#377) * Filebrowser now refreshes when expected (#391) * Fixed a lot of bugs, and made a lot of new ones ;-) ### PyChan * New greedy layout engine: Widgets is now able to expand in addition to shrinking * New events: mouseWheelMovedUp and mouseWheelMovedDown * Added the position_technique attribute * Added Widget.removeAllChildren() method * Added a new method Widget.getNamedChildren * New method: Widget.insertChild() * New method: Widget.insertChildBefore() * New property: is_focusable * New properties: min_size, max_size * Moved helptext property from C++ to pychan * New togglebutton widget * ScrollArea: Size is not static anymore (can shrink and expand) * Allow objects with a call attribute to be used as event callbacks * Removed unused TimerListener * Switched to new content structure (#336) * Made the distribute and mapEvents methods faster * Added a small decorator for profiling rarely called functions * Optimized adaptLayout() * Added fast path for Widget.findChild(name=name). Roughly 10x faster * Fixed an input problem when a dropdown box is clicked on (#337) * Fixed pychan event_map to support callable objects (#374) * Fixed the pychan demo (#363) * Fixed a pychan problem where unknown characters were displayed when holding the shift key (#383) * Lots of bug fixes ### Documentation * Fixed some doxygen documentation problems (#343) * Created python coding standards article (#372) * Created "Bug Report" template (#409) ### Misc * New versioning scheme (x.y.z) instead of (yyyy.r) * Moved extensions and fife.py to /engine/python/fife * Moved rio_de_hola and pychan_demo to /demos * Moved some misc scripts to /tools * Moved the FIFE editor to /editor * Added a Win32 installer for FIFE and the win32 SDK ## [2009.0] - 2009-01-07 ### Engine * Merged input rework branch * Possibility to hide instances/instance visuals * Added input and focus events * Modified clicklabel to provide a mouse listener for hover events * Use strings as grouping in generic renderer instead of numbers * Omission of a camera viewport in xml map files now indicate that the camera should use the full window * Added removeActionListener to SWIG export * Some improvements to Scons build scripts * Prepared basicapplication to use WindowTitle and WindowIcon from clients' settings.py * Logger now ignores non-existing log modules (warns to prompt) * Pools now have a function called purgeLoadedResources which deletes all loaded resources that have a reference count of zero. * Movie: Switched to using FIFE::Image instead of Overlays * Reworked matrix vector multiplication * OpenAL-soft patch for OSS support Optimizations: * Added hasing to pool to improve techdemo loading time * Lazy loading for animations * Combined events to reduce lag * Small optimizations for instance renderer Bugs: * Initialize instance visuals properly * Fixed false positives when searching for instances in a rectangle * Fixed a horrendous misconception in Pool. The map was sorted by pointer comparison. * Fix for textwrapping * Fixed bug where instances couldn't change layer * Fixed a small bug when initializing OpenGL * Fixed a scons issue where libraries checked for C instead of C++ * Fixed a shutdown order problem * Fixed segfault on shutdown when profiling was activated (#334) * Fixed: Editors camera doesn't show map after saving (#333) * Fixed: FIFE crashes with a segmentation fault (#297) ### Pychan * Modified pychan to accept RGBA colors * More documentation for layout system * adaptLayout now acts a bit smarter * Fix for scrollarea bug ### Rio de hola * Improved some graphics and added some new ones * Profiling support ### Editor * Scrolling support * Added an undo feature to the map-editor * Object editor plugin * Some bug fixes ### Documentation * Updated the map format article to reflect the datasets changes (#323) ### Misc * Removed old testmaps ## [2008.1] - 2008-06-01 ### Model improvements & simplifications * Elevations removed (Fallout legacy). * Support for namespaces: * New resource infrastructure migrated into whole engine. This enables: * uniform pooling for all resources that need to be pooled. * uniform loading for all resources (model stuff, images, sounds...). * uniform saving for resources which support saving (model stuff). * Datasets are now stored in a flat list in model instead of dataset hierarchy. * Changes in model are now bookkeeped. Observer interfaces provided for change listeners. * This enables e.g. reacting only to changes instead of polling on every round. * Also critical enabler for triggers. * Instances now support initial rotation value. * Objects support default actions. * Further model cleanup. ### XML format changes * All resources are now defined with principle 1 file / 1 resource. * Importing of objects can now be done also based on directories where they are contained. * Relative paths are now used instead of absolute ones. ### Loaders * All loading happens now from python (tinyxml dependency removed). * Improved error reporting. ### Editor * Possibility to move instances on map. * Possibility to rotate instances on map. * Possibility to zoom the map (OpenGL mode only). * Painting with currently selected instance (e.g. large ground areas). * Importing of multiple objects based on given directory. * Initial map creation wizard (still work in progress). ### Rio de hola * More assets: * Graphics, sounds, music... * Two new maps matching the storyline. * Rio de hola now conforms to package structure * Popup menu integration, demonstration of actions (kick, talk). ### Pychan improvements * Hiding of scrollbars. * Text wrapping. * A lot of smaller improvements. ### Functionality * Pixel perfect instance picking (taking transparency into account). * Ability to get list of instances from given screen rectangle. * Distance calculations made easy, exposed to scripts. * Instance outlining. * Instance coloring. * Screenshots are now saved in png format (instead of bmp). * Stereo sound support in linux (introduced with the help of openal-soft). ### Video / view improvements * Both renderbackend and separate images can now render graphical primitives (e.g. lines, dots..). * Each camera now has separate set of renderers. Allows truly adjusting cameras independently. * Zooming capability (currently properly supported only by OpenGL backend). * Support for drag cursor definitions. * OpenGL graphics chunking size is now definable in settings. Should help e.g. with large backgrounds. * GenericRenderer adding customised rendering capabilities for scripts. ### Misc. changes * Initial package structure defined for FIFE clients. * Updated guichan to the latest release 0.8.1. * Usage of unittest++ instead of boost unittests. * Lots of bug fixes. ### Non-code related changes * Switch from GPL 2.0 to LGPL 2.1 (or newer). [Unreleased]: https://github.com/fifengine/fifengine/compare/0.3.5...HEAD [0.3.5]: https://github.com/fifengine/fifengine/compare/0.3.4...0.3.5 [0.3.4]: https://github.com/fifengine/fifengine/compare/0.3.3r3...0.3.4 [0.3.3r3]: https://github.com/fifengine/fifengine/compare/0.3.3r2...0.3.3r3 [0.3.3r2]: https://github.com/fifengine/fifengine/compare/0.3.3...0.3.3r2 [0.3.3]: https://github.com/fifengine/fifengine/compare/0.3.2...0.3.3 [0.3.2]: https://github.com/fifengine/fifengine/compare/0.3.1...0.3.2 [0.3.1]: https://github.com/fifengine/fifengine/compare/0.3.0...0.3.1 [0.3.0]: https://github.com/fifengine/fifengine/compare/2009.0...0.3.0 [2009.0]: https://github.com/fifengine/fifengine/compare/2008.1...2009.0 [2008.1]: https://github.com/fifengine/fifengine/compare/2008.1 fifengine-0.4.1/CMakeLists.txt000066400000000000000000001276171304641216200162230ustar00rootroot00000000000000#------------------------------------------------------------------------------ # Fifengine #------------------------------------------------------------------------------ cmake_minimum_required (VERSION 2.6) project (fifengine) #------------------------------------------------------------------------------ # Version #------------------------------------------------------------------------------ set (FIFE_MAJOR_VERSION 0) set (FIFE_MINOR_VERSION 4) set (FIFE_PATCH_VERSION 1) set(FIFE_VERSION ${FIFE_MAJOR_VERSION}.${FIFE_MINOR_VERSION}.${FIFE_PATCH_VERSION}) configure_file ( "${PROJECT_SOURCE_DIR}/engine/core/version.h.in" "${PROJECT_SOURCE_DIR}/engine/core/version.h" ) #------------------------------------------------------------------------------ # Options #------------------------------------------------------------------------------ option(opengl "Enable OpenGL support" ON) option(fifechan "Enable Fifechan GUI subsystem" ON) option(librocket "Enable Librocket GUI subsystem" OFF) option(cegui "Enable Crazy Eddie's GUI subsystem" OFF) option(zip "Enable ZIP archive support" ON) option(logging "Enable logging" ON) option(rend-camzone "Enable camera zone renderer" OFF) option(rend-grid "Enable camera grid renderer" OFF) option(use-githash "Try to determine the git hash for the current commit" ON) option(build-python "Build the python extension module" ON) option(build-library "Build and install files to directly develop with c++" OFF) #------------------------------------------------------------------------------ # Configure #------------------------------------------------------------------------------ # set path to our custom CMAKE scripts set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake") # Create a "Release" build by default. if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Select build type. Options are: 'Debug', 'Release', 'RelWithDebInfo' and 'MinSizeRel'." FORCE ) message(STATUS "Set CMAKE_BUILD_TYPE to default '${CMAKE_BUILD_TYPE}'.") endif(NOT CMAKE_BUILD_TYPE) # if building a C++ library is enabled, then build a shared library by default # if you need a static library, set "-Dbuild-library=ON -DBUILD_SHARED_LIBS=OFF" if(build-library) set(BUILD_SHARED_LIBS ON CACHE BOOL "Build a shared or static library") endif(build-library) # Do not allow an in-source-tree build, request an out-of-source-tree build. if (CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR) message(FATAL_ERROR "#Please build outside of the source tree!\n Make a separate folder for building and run CMake there:\n mkdir _build; cd _build; cmake ..\n Before that, cleanup:\nrm -rf CMakeCache.txt CMakeFiles") endif() # Do not allow the build directory to be in the source directory for older # versions of cmake. if (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_BINARY_DIR} MATCHES "^${CMAKE_SOURCE_DIR}") message(FATAL_ERROR "# Please chose a different build directory.\n In cmake versions < 3 SWIG does not work well when the build directory is placed inside the source directory. Use something like this:\n mkdir ../_build; cd ../_build; cmake ../fifengine\n You can remove your current build folder.") endif() # Disable in-source builds and modifications to the source tree. set(CMAKE_DISABLE_SOURCE_CHANGES ON) set(CMAKE_DISABLE_IN_SOURCE_BUILD ON) # organize targets into folders set_property(GLOBAL PROPERTY USE_FOLDERS ON) #------------------------------------------------------------------------------ # Compiler Options #------------------------------------------------------------------------------ if(WIN32) if(MSVC) # ensure we use minimal "windows.h" lib without the crazy min max macros SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D \"WIN32_LEAN_AND_MEAN\"") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D \"NOMINMAX\"") # disable SAFESEH - to avoid "LNK2026: module unsafe" on "OpenAL32.lib" SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D \"SAFESEH:NO\"") SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SAFESEH:NO") SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /SAFESEH:NO") SET(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} /SAFESEH:NO") # use static libs - to avoid "LNK1104: cannot open file 'libboost_filesystem-vc140-mt-1_59.lib'" set(Boost_USE_STATIC_LIBS ON) set(Boost_USE_MULTITHREADED ON) endif(MSVC) endif(WIN32) # defines # define for using TinyXML with Standard Template Library (STL) support enabled add_definitions(-DTIXML_USE_STL) #------------------------------------------------------------------------------ # Display Status #------------------------------------------------------------------------------ message("") message("== Building FIFE version ${FIFE_VERSION} using build type '${CMAKE_BUILD_TYPE}'.") message(STATUS " Source directory is '${PROJECT_SOURCE_DIR}'.") message(STATUS " Build directory is '${PROJECT_BINARY_DIR}'.") message(STATUS " Installation path is '${CMAKE_INSTALL_PREFIX}' (set -DCMAKE_INSTALL_PREFIX= to change).") message(STATUS " CXX Compiler Flags: '${CMAKE_CXX_FLAGS}'.") message(STATUS " Dependencies folder: '${PROJECT_SOURCE_DIR}/../fifengine-dependencies'.") message("") #------------------------------------------------------------------------------ # Find Dependencies - Windows #------------------------------------------------------------------------------ # Tell CMake where to search for binaries (dlls), includes and libs on Windows if(WIN32) set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} # help to find dependencies on Appveyor "${PROJECT_SOURCE_DIR}/../fifengine-dependencies/build-tools/swig" "${PROJECT_SOURCE_DIR}/../fifengine-dependencies/includes/bin" "${PROJECT_SOURCE_DIR}/../fifengine-dependencies/includes/include" "${PROJECT_SOURCE_DIR}/../fifengine-dependencies/includes/include/SDL2" "${PROJECT_SOURCE_DIR}/../fifengine-dependencies/includes/include/OpenAL" "${PROJECT_SOURCE_DIR}/../fifengine-dependencies/includes/lib/x86" "${PROJECT_SOURCE_DIR}/../fifengine-dependencies/includes/lib" # help to find dependencies on your local env (FifeSDK) "${PROJECT_SOURCE_DIR}/../swig" "${PROJECT_SOURCE_DIR}/../python" "${PROJECT_SOURCE_DIR}/../fifengine-dependencies/bin" "${PROJECT_SOURCE_DIR}/../fifengine-dependencies/include" "${PROJECT_SOURCE_DIR}/../fifengine-dependencies/include/boost" "${PROJECT_SOURCE_DIR}/../fifengine-dependencies/lib" "${PROJECT_SOURCE_DIR}/../fifengine-dependencies/lib/boost" "${PROJECT_SOURCE_DIR}/../fifengine-dependencies/lib/x86" "${PROJECT_SOURCE_DIR}/../fifengine-dependencies/include/SDL2" "${PROJECT_SOURCE_DIR}/../fifengine-dependencies/include/OpenAL" "${PROJECT_SOURCE_DIR}/../fifengine-dependencies/include/lib/x86" "${PROJECT_SOURCE_DIR}/../fifengine-dependencies/include/lib" ) endif(WIN32) #------------------------------------------------------------------------------ # Source Files #------------------------------------------------------------------------------ # tell compiler to search in the following folders for include files include_directories("${PROJECT_BINARY_DIR}") include_directories("${PROJECT_SOURCE_DIR}/engine/core") include_directories("${PROJECT_SOURCE_DIR}") # Core set (FIFE_CORE_SRC ${PROJECT_SOURCE_DIR}/engine/core/audio/soundclip.cpp ${PROJECT_SOURCE_DIR}/engine/core/audio/soundclipmanager.cpp ${PROJECT_SOURCE_DIR}/engine/core/audio/soundemitter.cpp ${PROJECT_SOURCE_DIR}/engine/core/audio/soundmanager.cpp ${PROJECT_SOURCE_DIR}/engine/core/controller/engine.cpp ${PROJECT_SOURCE_DIR}/engine/core/controller/enginesettings.cpp ${PROJECT_SOURCE_DIR}/engine/core/eventchannel/eventmanager.cpp ${PROJECT_SOURCE_DIR}/engine/core/ext/glee/GLee.cpp ${PROJECT_SOURCE_DIR}/engine/core/loaders/native/audio/ogg_loader.cpp ${PROJECT_SOURCE_DIR}/engine/core/loaders/native/audio/sounddecoder_ogg.cpp ${PROJECT_SOURCE_DIR}/engine/core/loaders/native/map/animationloader.cpp ${PROJECT_SOURCE_DIR}/engine/core/loaders/native/map/atlasloader.cpp ${PROJECT_SOURCE_DIR}/engine/core/loaders/native/map/maploader.cpp ${PROJECT_SOURCE_DIR}/engine/core/loaders/native/map/objectloader.cpp ${PROJECT_SOURCE_DIR}/engine/core/loaders/native/map/percentdonelistener.cpp ${PROJECT_SOURCE_DIR}/engine/core/loaders/native/video/imageloader.cpp ${PROJECT_SOURCE_DIR}/engine/core/loaders/native/video/resourceanimationloader.cpp ${PROJECT_SOURCE_DIR}/engine/core/model/model.cpp ${PROJECT_SOURCE_DIR}/engine/core/model/metamodel/action.cpp ${PROJECT_SOURCE_DIR}/engine/core/model/metamodel/object.cpp ${PROJECT_SOURCE_DIR}/engine/core/model/metamodel/timeprovider.cpp ${PROJECT_SOURCE_DIR}/engine/core/model/metamodel/grids/cellgrid.cpp ${PROJECT_SOURCE_DIR}/engine/core/model/metamodel/grids/hexgrid.cpp ${PROJECT_SOURCE_DIR}/engine/core/model/metamodel/grids/squaregrid.cpp ${PROJECT_SOURCE_DIR}/engine/core/model/structures/cell.cpp ${PROJECT_SOURCE_DIR}/engine/core/model/structures/cellcache.cpp ${PROJECT_SOURCE_DIR}/engine/core/model/structures/instance.cpp ${PROJECT_SOURCE_DIR}/engine/core/model/structures/instancetree.cpp ${PROJECT_SOURCE_DIR}/engine/core/model/structures/layer.cpp ${PROJECT_SOURCE_DIR}/engine/core/model/structures/location.cpp ${PROJECT_SOURCE_DIR}/engine/core/model/structures/map.cpp ${PROJECT_SOURCE_DIR}/engine/core/model/structures/renderernode.cpp ${PROJECT_SOURCE_DIR}/engine/core/model/structures/trigger.cpp ${PROJECT_SOURCE_DIR}/engine/core/model/structures/triggercontroller.cpp ${PROJECT_SOURCE_DIR}/engine/core/pathfinder/route.cpp ${PROJECT_SOURCE_DIR}/engine/core/pathfinder/routepather/multilayersearch.cpp ${PROJECT_SOURCE_DIR}/engine/core/pathfinder/routepather/routepather.cpp ${PROJECT_SOURCE_DIR}/engine/core/pathfinder/routepather/routepathersearch.cpp ${PROJECT_SOURCE_DIR}/engine/core/pathfinder/routepather/singlelayersearch.cpp ${PROJECT_SOURCE_DIR}/engine/core/savers/native/map/mapsaver.cpp ${PROJECT_SOURCE_DIR}/engine/core/util/base/exception.cpp ${PROJECT_SOURCE_DIR}/engine/core/util/base/fifeclass.cpp ${PROJECT_SOURCE_DIR}/engine/core/util/base/stringutils.cpp ${PROJECT_SOURCE_DIR}/engine/core/util/log/logger.cpp ${PROJECT_SOURCE_DIR}/engine/core/util/math/angles.cpp ${PROJECT_SOURCE_DIR}/engine/core/util/resource/resource.cpp ${PROJECT_SOURCE_DIR}/engine/core/util/time/timeevent.cpp ${PROJECT_SOURCE_DIR}/engine/core/util/time/timemanager.cpp ${PROJECT_SOURCE_DIR}/engine/core/util/time/timer.cpp ${PROJECT_SOURCE_DIR}/engine/core/vfs/directoryprovider.cpp ${PROJECT_SOURCE_DIR}/engine/core/vfs/fife_boost_filesystem.cpp ${PROJECT_SOURCE_DIR}/engine/core/vfs/vfs.cpp ${PROJECT_SOURCE_DIR}/engine/core/vfs/vfsdirectory.cpp ${PROJECT_SOURCE_DIR}/engine/core/vfs/vfssource.cpp ${PROJECT_SOURCE_DIR}/engine/core/vfs/vfssourceprovider.cpp ${PROJECT_SOURCE_DIR}/engine/core/vfs/dat/dat1.cpp ${PROJECT_SOURCE_DIR}/engine/core/vfs/dat/dat2.cpp ${PROJECT_SOURCE_DIR}/engine/core/vfs/dat/lzssdecoder.cpp ${PROJECT_SOURCE_DIR}/engine/core/vfs/dat/rawdatadat1.cpp ${PROJECT_SOURCE_DIR}/engine/core/vfs/dat/rawdatadat2.cpp ${PROJECT_SOURCE_DIR}/engine/core/vfs/raw/rawdata.cpp ${PROJECT_SOURCE_DIR}/engine/core/vfs/raw/rawdatafile.cpp ${PROJECT_SOURCE_DIR}/engine/core/vfs/raw/rawdatamemsource.cpp ${PROJECT_SOURCE_DIR}/engine/core/vfs/raw/rawdatasource.cpp ${PROJECT_SOURCE_DIR}/engine/core/video/animation.cpp ${PROJECT_SOURCE_DIR}/engine/core/video/animationmanager.cpp ${PROJECT_SOURCE_DIR}/engine/core/video/atlasbook.cpp ${PROJECT_SOURCE_DIR}/engine/core/video/color.cpp ${PROJECT_SOURCE_DIR}/engine/core/video/cursor.cpp ${PROJECT_SOURCE_DIR}/engine/core/video/devicecaps.cpp ${PROJECT_SOURCE_DIR}/engine/core/video/image.cpp ${PROJECT_SOURCE_DIR}/engine/core/video/imagemanager.cpp ${PROJECT_SOURCE_DIR}/engine/core/video/renderbackend.cpp ${PROJECT_SOURCE_DIR}/engine/core/video/fonts/fontbase.cpp ${PROJECT_SOURCE_DIR}/engine/core/video/fonts/imagefontbase.cpp ${PROJECT_SOURCE_DIR}/engine/core/video/fonts/subimagefont.cpp ${PROJECT_SOURCE_DIR}/engine/core/video/fonts/textrenderpool.cpp ${PROJECT_SOURCE_DIR}/engine/core/video/fonts/truetypefont.cpp ${PROJECT_SOURCE_DIR}/engine/core/video/opengl/glimage.cpp ${PROJECT_SOURCE_DIR}/engine/core/video/opengl/renderbackendopengl.cpp ${PROJECT_SOURCE_DIR}/engine/core/video/sdl/renderbackendsdl.cpp ${PROJECT_SOURCE_DIR}/engine/core/video/sdl/sdlblendingfunctions.cpp ${PROJECT_SOURCE_DIR}/engine/core/video/sdl/sdlimage.cpp ${PROJECT_SOURCE_DIR}/engine/core/view/camera.cpp ${PROJECT_SOURCE_DIR}/engine/core/view/layercache.cpp ${PROJECT_SOURCE_DIR}/engine/core/view/rendererbase.cpp ${PROJECT_SOURCE_DIR}/engine/core/view/renderitem.cpp ${PROJECT_SOURCE_DIR}/engine/core/view/visual.cpp ${PROJECT_SOURCE_DIR}/engine/core/view/renderers/blockinginforenderer.cpp ${PROJECT_SOURCE_DIR}/engine/core/view/renderers/cellrenderer.cpp ${PROJECT_SOURCE_DIR}/engine/core/view/renderers/cellselectionrenderer.cpp ${PROJECT_SOURCE_DIR}/engine/core/view/renderers/coordinaterenderer.cpp ${PROJECT_SOURCE_DIR}/engine/core/view/renderers/floatingtextrenderer.cpp ${PROJECT_SOURCE_DIR}/engine/core/view/renderers/genericrenderer.cpp ${PROJECT_SOURCE_DIR}/engine/core/view/renderers/gridrenderer.cpp ${PROJECT_SOURCE_DIR}/engine/core/view/renderers/instancerenderer.cpp ${PROJECT_SOURCE_DIR}/engine/core/view/renderers/lightrenderer.cpp ${PROJECT_SOURCE_DIR}/engine/core/view/renderers/offrenderer.cpp ${PROJECT_SOURCE_DIR}/engine/core/view/renderers/quadtreerenderer.cpp ${PROJECT_SOURCE_DIR}/engine/core/view/renderers/targetrenderer.cpp ${PROJECT_SOURCE_DIR}/engine/core/gui/hybrid/hybridguimanager.cpp ) # ZIP set (FIFE_ZIP_SRC ${PROJECT_SOURCE_DIR}/engine/core/vfs/zip/zipfilesource.cpp ${PROJECT_SOURCE_DIR}/engine/core/vfs/zip/zipnode.cpp ${PROJECT_SOURCE_DIR}/engine/core/vfs/zip/zipprovider.cpp ${PROJECT_SOURCE_DIR}/engine/core/vfs/zip/zipsource.cpp ${PROJECT_SOURCE_DIR}/engine/core/vfs/zip/ziptree.cpp ) # CEGUI v0.8.0+ set (FIFE_CEGUI_SRC ${PROJECT_SOURCE_DIR}/engine/core/gui/cegui/ceguimanager.cpp ${PROJECT_SOURCE_DIR}/engine/core/gui/cegui/base/ceguiinputprocessor.cpp ) # FIFECHAN set (FIFE_FCHAN_SRC ${PROJECT_SOURCE_DIR}/engine/core/gui/fifechan/fifechanmanager.cpp ${PROJECT_SOURCE_DIR}/engine/core/gui/fifechan/base/gui_font.cpp ${PROJECT_SOURCE_DIR}/engine/core/gui/fifechan/base/gui_image.cpp ${PROJECT_SOURCE_DIR}/engine/core/gui/fifechan/base/gui_imageloader.cpp ${PROJECT_SOURCE_DIR}/engine/core/gui/fifechan/base/opengl/opengl_gui_graphics.cpp ${PROJECT_SOURCE_DIR}/engine/core/gui/fifechan/base/sdl/sdl_gui_graphics.cpp ${PROJECT_SOURCE_DIR}/engine/core/gui/fifechan/console/commandline.cpp ${PROJECT_SOURCE_DIR}/engine/core/gui/fifechan/console/console.cpp ${PROJECT_SOURCE_DIR}/engine/core/gui/fifechan/util/utf8/utf8stringeditor.cpp ${PROJECT_SOURCE_DIR}/engine/core/gui/fifechan/widgets/clicklabel.cpp ${PROJECT_SOURCE_DIR}/engine/core/gui/fifechan/widgets/icon2.cpp ${PROJECT_SOURCE_DIR}/engine/core/gui/fifechan/widgets/percentagebar.cpp ${PROJECT_SOURCE_DIR}/engine/core/gui/fifechan/widgets/togglebutton.cpp ${PROJECT_SOURCE_DIR}/engine/core/gui/fifechan/widgets/twobutton.cpp ) # LIBROCKET set (FIFE_LROCKET_SRC ${PROJECT_SOURCE_DIR}/engine/core/gui/librocket/librocketmanager.cpp ${PROJECT_SOURCE_DIR}/engine/core/gui/librocket/base/librocketinputprocessor.cpp ${PROJECT_SOURCE_DIR}/engine/core/gui/librocket/base/librocketrenderinterface.cpp ) #------------------------------------------------------------------------------ # Source Groups for Source Files #------------------------------------------------------------------------------ source_group("sources\\fife.core" FILES ${FIFE_CORE_SRC}) source_group("sources\\fife.core.vfs.zip" FILES ${FIFE_ZIP_SRC}) source_group("sources\\fife.core.gui.cegui" FILES ${FIFE_CEGUI_SRC}) source_group("sources\\fife.core.gui.fifechan" FILES ${FIFE_FCHAN_SRC}) source_group("sources\\fife.core.gui.librocket" FILES ${FIFE_LROCKET_SRC}) #------------------------------------------------------------------------------ # Header Files #------------------------------------------------------------------------------ # Core set (FIFE_CORE_HDR ${PROJECT_SOURCE_DIR}/engine/core/export.h ${PROJECT_SOURCE_DIR}/engine/core/modules.h ${PROJECT_SOURCE_DIR}/engine/core/audio/fife_openal.h ${PROJECT_SOURCE_DIR}/engine/core/audio/soundclip.h ${PROJECT_SOURCE_DIR}/engine/core/audio/soundclipmanager.h ${PROJECT_SOURCE_DIR}/engine/core/audio/soundconfig.h ${PROJECT_SOURCE_DIR}/engine/core/audio/sounddecoder.h ${PROJECT_SOURCE_DIR}/engine/core/audio/soundemitter.h ${PROJECT_SOURCE_DIR}/engine/core/audio/soundmanager.h ${PROJECT_SOURCE_DIR}/engine/core/controller/engine.h ${PROJECT_SOURCE_DIR}/engine/core/controller/enginesettings.h ${PROJECT_SOURCE_DIR}/engine/core/eventchannel/eventmanager.h ${PROJECT_SOURCE_DIR}/engine/core/eventchannel/base/ec_event.h ${PROJECT_SOURCE_DIR}/engine/core/eventchannel/base/ec_inputevent.h ${PROJECT_SOURCE_DIR}/engine/core/eventchannel/command/ec_command.h ${PROJECT_SOURCE_DIR}/engine/core/eventchannel/command/ec_commandids.h ${PROJECT_SOURCE_DIR}/engine/core/eventchannel/command/ec_icommandcontroller.h ${PROJECT_SOURCE_DIR}/engine/core/eventchannel/command/ec_icommandlistener.h ${PROJECT_SOURCE_DIR}/engine/core/eventchannel/drop/ec_dropevent.h ${PROJECT_SOURCE_DIR}/engine/core/eventchannel/drop/ec_idropcontroller.h ${PROJECT_SOURCE_DIR}/engine/core/eventchannel/drop/ec_idroplistener.h ${PROJECT_SOURCE_DIR}/engine/core/eventchannel/key/ec_ikeycontroller.h ${PROJECT_SOURCE_DIR}/engine/core/eventchannel/key/ec_ikeyfilter.h ${PROJECT_SOURCE_DIR}/engine/core/eventchannel/key/ec_ikeylistener.h ${PROJECT_SOURCE_DIR}/engine/core/eventchannel/key/ec_key.h ${PROJECT_SOURCE_DIR}/engine/core/eventchannel/key/ec_keyevent.h ${PROJECT_SOURCE_DIR}/engine/core/eventchannel/mouse/ec_imousecontroller.h ${PROJECT_SOURCE_DIR}/engine/core/eventchannel/mouse/ec_imousefilter.h ${PROJECT_SOURCE_DIR}/engine/core/eventchannel/mouse/ec_imouselistener.h ${PROJECT_SOURCE_DIR}/engine/core/eventchannel/mouse/ec_mouseevent.h ${PROJECT_SOURCE_DIR}/engine/core/eventchannel/sdl/ec_isdleventcontroller.h ${PROJECT_SOURCE_DIR}/engine/core/eventchannel/sdl/ec_isdleventlistener.h ${PROJECT_SOURCE_DIR}/engine/core/eventchannel/source/ec_eventsourcetypes.h ${PROJECT_SOURCE_DIR}/engine/core/eventchannel/source/ec_ieventsource.h ${PROJECT_SOURCE_DIR}/engine/core/eventchannel/text/ec_itextcontroller.h ${PROJECT_SOURCE_DIR}/engine/core/eventchannel/text/ec_itextlistener.h ${PROJECT_SOURCE_DIR}/engine/core/eventchannel/text/ec_text.h ${PROJECT_SOURCE_DIR}/engine/core/eventchannel/text/ec_textevent.h ${PROJECT_SOURCE_DIR}/engine/core/ext/glee/GLee.h ${PROJECT_SOURCE_DIR}/engine/core/loaders/native/audio/ogg_loader.h ${PROJECT_SOURCE_DIR}/engine/core/loaders/native/audio/sounddecoder_ogg.h ${PROJECT_SOURCE_DIR}/engine/core/loaders/native/map/animationloader.h ${PROJECT_SOURCE_DIR}/engine/core/loaders/native/map/atlasloader.h ${PROJECT_SOURCE_DIR}/engine/core/loaders/native/map/ianimationloader.h ${PROJECT_SOURCE_DIR}/engine/core/loaders/native/map/iatlasloader.h ${PROJECT_SOURCE_DIR}/engine/core/loaders/native/map/imaploader.h ${PROJECT_SOURCE_DIR}/engine/core/loaders/native/map/iobjectloader.h ${PROJECT_SOURCE_DIR}/engine/core/loaders/native/map/maploader.h ${PROJECT_SOURCE_DIR}/engine/core/loaders/native/map/objectloader.h ${PROJECT_SOURCE_DIR}/engine/core/loaders/native/map/percentdonelistener.h ${PROJECT_SOURCE_DIR}/engine/core/loaders/native/video/imageloader.h ${PROJECT_SOURCE_DIR}/engine/core/loaders/native/video/resourceanimationloader.h ${PROJECT_SOURCE_DIR}/engine/core/model/model.h ${PROJECT_SOURCE_DIR}/engine/core/model/metamodel/action.h ${PROJECT_SOURCE_DIR}/engine/core/model/metamodel/ipather.h ${PROJECT_SOURCE_DIR}/engine/core/model/metamodel/ivisual.h ${PROJECT_SOURCE_DIR}/engine/core/model/metamodel/modelcoords.h ${PROJECT_SOURCE_DIR}/engine/core/model/metamodel/object.h ${PROJECT_SOURCE_DIR}/engine/core/model/metamodel/timeprovider.h ${PROJECT_SOURCE_DIR}/engine/core/model/metamodel/grids/cellgrid.h ${PROJECT_SOURCE_DIR}/engine/core/model/metamodel/grids/hexgrid.h ${PROJECT_SOURCE_DIR}/engine/core/model/metamodel/grids/squaregrid.h ${PROJECT_SOURCE_DIR}/engine/core/model/structures/cell.h ${PROJECT_SOURCE_DIR}/engine/core/model/structures/cellcache.h ${PROJECT_SOURCE_DIR}/engine/core/model/structures/instance.h ${PROJECT_SOURCE_DIR}/engine/core/model/structures/instancetree.h ${PROJECT_SOURCE_DIR}/engine/core/model/structures/layer.h ${PROJECT_SOURCE_DIR}/engine/core/model/structures/location.h ${PROJECT_SOURCE_DIR}/engine/core/model/structures/map.h ${PROJECT_SOURCE_DIR}/engine/core/model/structures/renderernode.h ${PROJECT_SOURCE_DIR}/engine/core/model/structures/trigger.h ${PROJECT_SOURCE_DIR}/engine/core/model/structures/triggercontroller.h ${PROJECT_SOURCE_DIR}/engine/core/pathfinder/route.h ${PROJECT_SOURCE_DIR}/engine/core/pathfinder/routepather/multilayersearch.h ${PROJECT_SOURCE_DIR}/engine/core/pathfinder/routepather/routepather.h ${PROJECT_SOURCE_DIR}/engine/core/pathfinder/routepather/routepathersearch.h ${PROJECT_SOURCE_DIR}/engine/core/pathfinder/routepather/singlelayersearch.h ${PROJECT_SOURCE_DIR}/engine/core/savers/native/map/ianimationsaver.h ${PROJECT_SOURCE_DIR}/engine/core/savers/native/map/iatlassaver.h ${PROJECT_SOURCE_DIR}/engine/core/savers/native/map/imapsaver.h ${PROJECT_SOURCE_DIR}/engine/core/savers/native/map/iobjectsaver.h ${PROJECT_SOURCE_DIR}/engine/core/savers/native/map/mapsaver.h ${PROJECT_SOURCE_DIR}/engine/core/util/base/exception.h ${PROJECT_SOURCE_DIR}/engine/core/util/base/fifeclass.h ${PROJECT_SOURCE_DIR}/engine/core/util/base/fife_stdint.h ${PROJECT_SOURCE_DIR}/engine/core/util/base/sharedptr.h ${PROJECT_SOURCE_DIR}/engine/core/util/base/singleton.h ${PROJECT_SOURCE_DIR}/engine/core/util/base/stringutils.h ${PROJECT_SOURCE_DIR}/engine/core/util/log/logger.h ${PROJECT_SOURCE_DIR}/engine/core/util/math/angles.h ${PROJECT_SOURCE_DIR}/engine/core/util/math/fife_math.h ${PROJECT_SOURCE_DIR}/engine/core/util/math/matrix.h ${PROJECT_SOURCE_DIR}/engine/core/util/resource/resource.h ${PROJECT_SOURCE_DIR}/engine/core/util/resource/resourcemanager.h ${PROJECT_SOURCE_DIR}/engine/core/util/structures/point.h ${PROJECT_SOURCE_DIR}/engine/core/util/structures/priorityqueue.h ${PROJECT_SOURCE_DIR}/engine/core/util/structures/purge.h ${PROJECT_SOURCE_DIR}/engine/core/util/structures/quadtree.h ${PROJECT_SOURCE_DIR}/engine/core/util/structures/rect.h ${PROJECT_SOURCE_DIR}/engine/core/util/time/timeevent.h ${PROJECT_SOURCE_DIR}/engine/core/util/time/timemanager.h ${PROJECT_SOURCE_DIR}/engine/core/util/time/timer.h ${PROJECT_SOURCE_DIR}/engine/core/util/utf8/utf8.h ${PROJECT_SOURCE_DIR}/engine/core/util/utf8/utf8/checked.h ${PROJECT_SOURCE_DIR}/engine/core/util/utf8/utf8/core.h ${PROJECT_SOURCE_DIR}/engine/core/util/utf8/utf8/unchecked.h ${PROJECT_SOURCE_DIR}/engine/core/vfs/directoryprovider.h ${PROJECT_SOURCE_DIR}/engine/core/vfs/fife_boost_filesystem.h ${PROJECT_SOURCE_DIR}/engine/core/vfs/vfs.h ${PROJECT_SOURCE_DIR}/engine/core/vfs/vfsdirectory.h ${PROJECT_SOURCE_DIR}/engine/core/vfs/vfssource.h ${PROJECT_SOURCE_DIR}/engine/core/vfs/vfssourceprovider.h ${PROJECT_SOURCE_DIR}/engine/core/vfs/dat/dat1.h ${PROJECT_SOURCE_DIR}/engine/core/vfs/dat/dat2.h ${PROJECT_SOURCE_DIR}/engine/core/vfs/dat/lzssdecoder.h ${PROJECT_SOURCE_DIR}/engine/core/vfs/dat/rawdatadat1.h ${PROJECT_SOURCE_DIR}/engine/core/vfs/dat/rawdatadat2.h ${PROJECT_SOURCE_DIR}/engine/core/vfs/raw/rawdata.h ${PROJECT_SOURCE_DIR}/engine/core/vfs/raw/rawdatafile.h ${PROJECT_SOURCE_DIR}/engine/core/vfs/raw/rawdatamemsource.h ${PROJECT_SOURCE_DIR}/engine/core/vfs/raw/rawdatasource.h ${PROJECT_SOURCE_DIR}/engine/core/vfs/zip/zipfilesource.h ${PROJECT_SOURCE_DIR}/engine/core/vfs/zip/zipnode.h ${PROJECT_SOURCE_DIR}/engine/core/vfs/zip/zipprovider.h ${PROJECT_SOURCE_DIR}/engine/core/vfs/zip/zipsource.h ${PROJECT_SOURCE_DIR}/engine/core/vfs/zip/ziptree.h ${PROJECT_SOURCE_DIR}/engine/core/video/animation.h ${PROJECT_SOURCE_DIR}/engine/core/video/animationmanager.h ${PROJECT_SOURCE_DIR}/engine/core/video/atlasbook.h ${PROJECT_SOURCE_DIR}/engine/core/video/color.h ${PROJECT_SOURCE_DIR}/engine/core/video/cursor.h ${PROJECT_SOURCE_DIR}/engine/core/video/devicecaps.h ${PROJECT_SOURCE_DIR}/engine/core/video/image.h ${PROJECT_SOURCE_DIR}/engine/core/video/imagemanager.h ${PROJECT_SOURCE_DIR}/engine/core/video/renderbackend.h ${PROJECT_SOURCE_DIR}/engine/core/video/fonts/fontbase.h ${PROJECT_SOURCE_DIR}/engine/core/video/fonts/ifont.h ${PROJECT_SOURCE_DIR}/engine/core/video/fonts/imagefontbase.h ${PROJECT_SOURCE_DIR}/engine/core/video/fonts/subimagefont.h ${PROJECT_SOURCE_DIR}/engine/core/video/fonts/textrenderpool.h ${PROJECT_SOURCE_DIR}/engine/core/video/fonts/truetypefont.h ${PROJECT_SOURCE_DIR}/engine/core/video/opengl/fife_opengl.h ${PROJECT_SOURCE_DIR}/engine/core/video/opengl/glimage.h ${PROJECT_SOURCE_DIR}/engine/core/video/opengl/renderbackendopengl.h ${PROJECT_SOURCE_DIR}/engine/core/video/sdl/renderbackendsdl.h ${PROJECT_SOURCE_DIR}/engine/core/video/sdl/sdlblendingfunctions.h ${PROJECT_SOURCE_DIR}/engine/core/video/sdl/sdlimage.h ${PROJECT_SOURCE_DIR}/engine/core/view/camera.h ${PROJECT_SOURCE_DIR}/engine/core/view/layercache.h ${PROJECT_SOURCE_DIR}/engine/core/view/rendererbase.h ${PROJECT_SOURCE_DIR}/engine/core/view/renderitem.h ${PROJECT_SOURCE_DIR}/engine/core/view/visual.h ${PROJECT_SOURCE_DIR}/engine/core/view/renderers/blockinginforenderer.h ${PROJECT_SOURCE_DIR}/engine/core/view/renderers/cellrenderer.h ${PROJECT_SOURCE_DIR}/engine/core/view/renderers/cellselectionrenderer.h ${PROJECT_SOURCE_DIR}/engine/core/view/renderers/coordinaterenderer.h ${PROJECT_SOURCE_DIR}/engine/core/view/renderers/floatingtextrenderer.h ${PROJECT_SOURCE_DIR}/engine/core/view/renderers/genericrenderer.h ${PROJECT_SOURCE_DIR}/engine/core/view/renderers/gridrenderer.h ${PROJECT_SOURCE_DIR}/engine/core/view/renderers/instancerenderer.h ${PROJECT_SOURCE_DIR}/engine/core/view/renderers/lightrenderer.h ${PROJECT_SOURCE_DIR}/engine/core/view/renderers/offrenderer.h ${PROJECT_SOURCE_DIR}/engine/core/view/renderers/quadtreerenderer.h ${PROJECT_SOURCE_DIR}/engine/core/view/renderers/targetrenderer.h ${PROJECT_SOURCE_DIR}/engine/core/gui/guimanager.h ${PROJECT_SOURCE_DIR}/engine/core/gui/hybrid/hybridguimanager.h ) # ZIP set (FIFE_ZIP_HDR ${PROJECT_SOURCE_DIR}/engine/core/vfs/zip/zipfilesource.h ${PROJECT_SOURCE_DIR}/engine/core/vfs/zip/zipnode.h ${PROJECT_SOURCE_DIR}/engine/core/vfs/zip/zipprovider.h ${PROJECT_SOURCE_DIR}/engine/core/vfs/zip/zipsource.h ${PROJECT_SOURCE_DIR}/engine/core/vfs/zip/ziptree.h ) # CEGUI set (FIFE_CEGUI_HDR ${PROJECT_SOURCE_DIR}/engine/core/gui/cegui/ceguimanager.h ${PROJECT_SOURCE_DIR}/engine/core/gui/cegui/base/ceguiinputprocessor.h ) # Fifechan set (FIFE_FCHAN_HDR ${PROJECT_SOURCE_DIR}/engine/core/gui/fifechan/fifechanmanager.h ${PROJECT_SOURCE_DIR}/engine/core/gui/fifechan/base/gui_font.h ${PROJECT_SOURCE_DIR}/engine/core/gui/fifechan/base/gui_image.h ${PROJECT_SOURCE_DIR}/engine/core/gui/fifechan/base/gui_imageloader.h ${PROJECT_SOURCE_DIR}/engine/core/gui/fifechan/base/opengl/opengl_gui_graphics.h ${PROJECT_SOURCE_DIR}/engine/core/gui/fifechan/base/sdl/sdl_gui_graphics.h ${PROJECT_SOURCE_DIR}/engine/core/gui/fifechan/console/commandline.h ${PROJECT_SOURCE_DIR}/engine/core/gui/fifechan/console/console.h ${PROJECT_SOURCE_DIR}/engine/core/gui/fifechan/util/utf8/utf8stringeditor.h ${PROJECT_SOURCE_DIR}/engine/core/gui/fifechan/widgets/clicklabel.h ${PROJECT_SOURCE_DIR}/engine/core/gui/fifechan/widgets/icon2.h ${PROJECT_SOURCE_DIR}/engine/core/gui/fifechan/widgets/percentagebar.h ${PROJECT_SOURCE_DIR}/engine/core/gui/fifechan/widgets/togglebutton.h ${PROJECT_SOURCE_DIR}/engine/core/gui/fifechan/widgets/twobutton.h ) # Librocket set (FIFE_LROCKET_HDR ${PROJECT_SOURCE_DIR}/engine/core/gui/librocket/librocketmanager.h ${PROJECT_SOURCE_DIR}/engine/core/gui/librocket/base/librocketinputprocessor.h ${PROJECT_SOURCE_DIR}/engine/core/gui/librocket/base/librocketrenderinterface.h ) #------------------------------------------------------------------------------ # Source Groups for Header Files #------------------------------------------------------------------------------ source_group("headers\\fife.core" FILES ${FIFE_CORE_HDR}) source_group("headers\\fife.core.vfs.zip" FILES ${FIFE_ZIP_HDR}) source_group("headers\\fife.core.gui.cegui" FILES ${FIFE_CEGUI_HDR}) source_group("headers\\fife.core.gui.fifechan" FILES ${FIFE_FCHAN_HDR}) source_group("headers\\fife.core.gui.librocket" FILES ${FIFE_LROCKET_HDR}) #------------------------------------------------------------------------------ # SWIG files #------------------------------------------------------------------------------ # Core set (FIFE_CORE_SWIG version.i audio/soundclip.i audio/soundclipmanager.i audio/soundemitter.i audio/soundmanager.i controller/engine.i eventchannel/eventchannel.i loaders/native/map/ianimationloader.i loaders/native/map/iatlasloader.i loaders/native/map/imaploader.i loaders/native/map/iobjectloader.i loaders/native/map/maploader.i loaders/native/map/percentdonelistener.i model/metamodel/action.i model/metamodel/ipather.i model/metamodel/ivisual.i model/metamodel/modelcoords.i model/metamodel/object.i model/metamodel/timeprovider.i model/metamodel/grids/cellgrids.i model/structures/cell.i model/structures/cellcache.i model/structures/instance.i model/structures/layer.i model/structures/location.i model/structures/map.i model/structures/renderernode.i model/structures/trigger.i model/model.i pathfinder/route.i pathfinder/routepather/routepather.i savers/native/map/ianimationsaver.i savers/native/map/iatlassaver.i savers/native/map/imapsaver.i savers/native/map/iobjectsaver.i savers/native/map/mapsaver.i util/base/utilbase.i util/log/logger.i util/math/math.i util/resource/resource.i util/structures/utilstructures.i util/time/timeevent.i util/time/timemanager.i vfs/vfs.i vfs/raw/rawdata.i video/video.i video/fonts/fonts.i view/camera.i view/rendererbase.i view/visual.i view/renderers/blockinginforenderer.i view/renderers/cellrenderer.i view/renderers/cellselectionrenderer.i view/renderers/coordinaterenderer.i view/renderers/floatingtextrenderer.i view/renderers/genericrenderer.i view/renderers/gridrenderer.i view/renderers/instancerenderer.i view/renderers/lightrenderer.i view/renderers/offrenderer.i view/renderers/targetrenderer.i gui/guimanager.i gui/hybrid/hybridguimanager.i ) # CEGUI set (FIFE_CEGUI_SWIG gui/cegui/ceguimanager.i ) # FIFECHAN set (FIFE_FCHAN_SWIG_LIB gui/fifechan/lib/fifechanlistener.i gui/fifechan/lib/widgets.i ) set (FIFE_FCHAN_SWIG gui/fifechan/base/gui_font.i gui/fifechan/base/gui_image.i gui/fifechan/console/console.i gui/fifechan/fifechanmanager.i gui/fifechan/widgets/widgets.i ) # LIBROCKET set (FIFE_LROCKET_SWIG gui/librocket/librocketmanager.i ) #------------------------------------------------------------------------------ # Source Groups for SWIG Files #------------------------------------------------------------------------------ source_group("swig\\fife.core" FILES ${FIFE_CORE_SWIG}) source_group("swig\\fife.core.gui.cegui" FILES ${FIFE_CEGUI_HDR}) source_group("swig\\fife.core.gui.fifechan" FILES ${FIFE_FCHAN_SWIG_LIB}) source_group("swig\\fife.core.gui.fifechan" FILES ${FIFE_FCHAN_SWIG}) source_group("swig\\fife.core.gui.librocket" FILES ${FIFE_LROCKET_SWIG}) #------------------------------------------------------------------------------ # Find Packages #------------------------------------------------------------------------------ find_package(SDL2 REQUIRED) find_package(SDL2_image REQUIRED) find_package(SDL2_ttf REQUIRED) find_package(Boost 1.33.1 COMPONENTS system filesystem regex) find_package(PNG REQUIRED) find_package(OpenAL REQUIRED) find_package(OpenGL REQUIRED) find_package(TinyXML REQUIRED) if(cegui) find_package(CEGUI REQUIRED) if(NOT CEGUI_OpenGLRenderer_FOUND) message(FATAL_ERROR "FIFE needs CEGUI with the OpenGLRenderer enabled.") endif(NOT CEGUI_OpenGLRenderer_FOUND) if(NOT opengl) message(FATAL_ERROR "OpenGL cannot be disabled, when CEGUI is enabled.") endif(NOT opengl) include_directories(${CEGUI_INCLUDE_DIR}) message("Using CEGUI v0.8+") set(CEGUI TRUE) set(FIFE_CORE_SRC ${FIFE_CORE_SRC} ${FIFE_CEGUI_SRC}) find_package(GLEW REQUIRED) include_directories(${GLEW_INCLUDE_DIRS}) endif(cegui) if(build-python) # Setting up SWIG files set(SWIG_MODULE_fife_EXTRA_DEPS) set(CMAKE_SWIG_IMPORTS "") set(CMAKE_SWIG_INCLUSIONS "") set(CMAKE_SWIG_IMPORTS_FCHAN "") set(CMAKE_SWIG_INCLUSIONS_FCHAN "") foreach(filename ${FIFE_CORE_SWIG}) list(APPEND SWIG_MODULE_fife_EXTRA_DEPS "${PROJECT_SOURCE_DIR}/engine/core/${filename}") set(CMAKE_SWIG_INCLUSIONS "${CMAKE_SWIG_INCLUSIONS}%include ${filename}\n") endforeach(filename ${FIFE_CORE_SWIG}) endif(build-python) if(fifechan) find_package(FifeChan COMPONENTS sdl REQUIRED) if(build-python) set(SWIG_MODULE_fifechan_EXTRA_DEPS) foreach(filename ${FIFE_FCHAN_SWIG_LIB}) list(APPEND SWIG_MODULE_fife_EXTRA_DEPS "${PROJECT_SOURCE_DIR}/engine/core/${filename}") list(APPEND SWIG_MODULE_fifechan_EXTRA_DEPS "${PROJECT_SOURCE_DIR}/engine/core/${filename}") set(CMAKE_SWIG_INCLUSIONS_FCHAN "${CMAKE_SWIG_INCLUSIONS_FCHAN}%include ${filename}\n") endforeach(filename ${FIFE_FCHAN_SWIG_LIB}) foreach(filename ${FIFE_FCHAN_SWIG}) list(APPEND SWIG_MODULE_fife_EXTRA_DEPS "${PROJECT_SOURCE_DIR}/engine/core/${filename}") list(APPEND SWIG_MODULE_fifechan_EXTRA_DEPS "${PROJECT_SOURCE_DIR}/engine/core/${filename}") set(CMAKE_SWIG_INCLUSIONS "${CMAKE_SWIG_INCLUSIONS}%include ${filename}\n") endforeach(filename ${FIFE_FCHAN_SWIG}) set(CMAKE_SWIG_IMPORTS "${CMAKE_SWIG_IMPORTS}%import ${PROJECT_BINARY_DIR}/fifechan.i") endif(build-python) if(opengl) find_package(FifeChan COMPONENTS opengl REQUIRED) add_definitions(-DHAVE_OPENGL) endif(opengl) if(zip) set(FIFE_CORE_SRC ${FIFE_CORE_SRC} ${FIFE_ZIP_SRC}) add_definitions(-DHAVE_ZIP) endif(zip) if(logging) add_definitions(-DLOG_ENABLED) endif(logging) if(rend-camzone) add_definitions(-DRENDER_CAMZONES) endif(rend-camzone) if(rend-grid) add_definitions(-DRENDER_GRID) endif(rend-grid) if(use-githash) execute_process( COMMAND git rev-parse --short=8 HEAD WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE GIT_COMMIT_HASH OUTPUT_STRIP_TRAILING_WHITESPACE ) add_definitions(-DFIFE_GIT_HASH=${GIT_COMMIT_HASH}) endif(use-githash) include_directories(${FIFECHAN_INCLUDE_DIR}) link_directories(${FIFECHAN_LIBRARIES}) if(build-python) configure_file ( "${PROJECT_SOURCE_DIR}/engine/swigwrappers/python/fifechan.i.templ.cm" "${PROJECT_BINARY_DIR}/fifechan.i" ) endif(build-python) endif(fifechan) if(cegui) if(build-python) foreach(filename ${FIFE_CEGUI_SWIG}) list(APPEND SWIG_MODULE_fife_EXTRA_DEPS "${PROJECT_SOURCE_DIR}/engine/core/${filename}") set(CMAKE_SWIG_INCLUSIONS "${CMAKE_SWIG_INCLUSIONS}%include ${filename}\n") endforeach(filename ${FIFE_CEGUI_SWIG}) endif(build-python) endif(cegui) # TODO: Add the other gui libraries if(build-python) configure_file ( "${PROJECT_SOURCE_DIR}/engine/swigwrappers/python/fife.i.templ.cm" "${PROJECT_BINARY_DIR}/fife.i" ) # find SWIG find_package(SWIG REQUIRED) # protect user from working with Swig v3.0.8, which is broken if("${SWIG_VERSION}" VERSION_EQUAL "3.0.8") message(FATAL_ERROR "You are using SWIG v3.0.8.\n This version doesn't work with fifengine.\n Please upgrade SWIG.") endif() # include the use swig file include(${SWIG_USE_FILE}) endif(build-python) # Find ogg dependency find_package(PkgConfig QUIET) pkg_check_modules(PC_OGG QUIET ogg) find_path(OGG_INCLUDE_DIRS NAMES ogg/ogg.h HINTS ${PC_OGG_INCLUDE_DIRS} PATH_SUFFIXES ogg) find_library(OGG_LIBRARIES NAMES ogg HINTS ${PC_OGG_LIBRARY_DIRS}) # Find vorbis dependency find_package(PkgConfig QUIET) pkg_check_modules(PC_VORBISFILE QUIET vorbisfile) find_path(VORBIS_INCLUDE_DIRS NAMES vorbis/vorbisfile.h HINTS ${PC_VORBIS_INCLUDE_DIRS} PATH_SUFFIXES vorbis) find_library(VORBIS_LIBRARY NAMES vorbis HINTS ${PC_VORBIS_LIBRARY_DIRS}) # Find vorbisfile dependency find_package(PkgConfig QUIET) pkg_check_modules(PC_VORBISFILE QUIET vorbisfile) find_library(VORBISFILE_LIBRARY NAMES vorbisfile HINTS ${PC_VORBIS_LIBRARY_DIRS}) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(OGG DEFAULT_MSG OGG_INCLUDE_DIRS OGG_LIBRARIES) find_package_handle_standard_args(vorbisfile DEFAULT_MSG VORBIS_INCLUDE_DIRS VORBIS_LIBRARY) find_package_handle_standard_args(vorbisfile DEFAULT_MSG VORBIS_INCLUDE_DIRS VORBISFILE_LIBRARY) include_directories(${SDL2_INCLUDE_DIR} ${SDL2_IMAGE_INCLUDE_DIR} ${SDL2_TTF_INCLUDE_DIR}) include_directories(${Boost_INCLUDE_DIRS}) include_directories(${PNG_INCLUDE_DIRS}) include_directories(${OPENAL_INCLUDE_DIR}) include_directories(${OGG_INCLUDE_DIRS}) include_directories(${VORBIS_INCLUDE_DIRS}) include_directories(${TinyXML_INCLUDE_DIRS}) include_directories(${OPENGL_INCLUDE_DIR}) add_definitions(${PNG_DEFINITIONS}) add_definitions(${Boost_LIB_DIAGNOSTIC_DEFINITIONS}) #------------------------------------------------------------------------------ # Build fifengine as a Python extension module #------------------------------------------------------------------------------ if(build-python) # Find python library and add include path for python headers find_package (PythonInterp 2 EXACT) set(PYTHON_LIBRARY "PYTHON_LIBRARY-NOTFOUND") set(PYTHON_INCLUDE_DIR "PYTHON_INCLUDE_DIR-NOTFOUND") find_package (PythonLibs ${PYTHON_VERSION_STRING} EXACT) include_directories (${PYTHON_INCLUDE_PATH}) set (CMAKE_SWIG_FLAGS -modern -modernargs -w511 -w473 -w404) set_source_files_properties("${PROJECT_BINARY_DIR}/fife.i" PROPERTIES CPLUSPLUS ON) swig_add_module(fife python "${PROJECT_BINARY_DIR}/fife.i" ${FIFE_CORE_SRC} ${FIFE_FCHAN_SRC}) swig_link_libraries(fife ${PYTHON_LIBRARIES}) swig_link_libraries(fife ${SDL2_LIBRARY} ${SDL2_IMAGE_LIBRARIES} ${SDL2_TTF_LIBRARIES} ${OPENAL_LIBRARY}) swig_link_libraries(fife ${Boost_LIBRARIES}) swig_link_libraries(fife ${PNG_LIBRARIES}) swig_link_libraries(fife ${VORBISFILE_LIBRARY}) swig_link_libraries(fife ${VORBIS_LIBRARY}) swig_link_libraries(fife ${OGG_LIBRARIES}) swig_link_libraries(fife ${TinyXML_LIBRARIES}) swig_link_libraries(fife ${OPENGL_gl_LIBRARY}) if(fifechan) set_source_files_properties("${PROJECT_BINARY_DIR}/fifechan.i" PROPERTIES CPLUSPLUS ON) swig_add_module(fifechan python "${PROJECT_BINARY_DIR}/fifechan.i") swig_link_libraries(fifechan ${PYTHON_LIBRARIES}) swig_link_libraries(fifechan ${FIFECHAN_LIBRARIES}) swig_link_libraries(fife ${FIFECHAN_LIBRARIES}) endif(fifechan) if(cegui) swig_link_libraries(fife ${CEGUI_LIBRARIES}) swig_link_libraries(fife ${CEGUI_OpenGLRenderer_LIBRARIES}) endif(cegui) if(NOT DEFINED PYTHON_SITE_PACKAGES) # # Install Python package locally, e.g. into "C:\Python27\Lib\site-packages\fife" # execute_process( COMMAND ${PYTHON_EXECUTABLE} -c "from distutils.sysconfig import get_python_lib; print (get_python_lib())" OUTPUT_VARIABLE PYTHON_SITE_PACKAGES OUTPUT_STRIP_TRAILING_WHITESPACE ) # Slash-Fix: Cmake would create a warning, when using the variable in FILES or DIRECTORY without changing it. file(TO_CMAKE_PATH ${PYTHON_SITE_PACKAGES} PYTHON_SITE_PACKAGES) endif(NOT DEFINED PYTHON_SITE_PACKAGES) message(STATUS " Python install directory is '${PYTHON_SITE_PACKAGES}/fife'.") install(TARGETS _fife DESTINATION ${PYTHON_SITE_PACKAGES}/fife) install(FILES ${PROJECT_BINARY_DIR}/fife.py DESTINATION ${PYTHON_SITE_PACKAGES}/fife) install(FILES ${CMAKE_SOURCE_DIR}/engine/python/fife/__init__.py DESTINATION ${PYTHON_SITE_PACKAGES}/fife) install(DIRECTORY ${CMAKE_SOURCE_DIR}/engine/python/fife/extensions DESTINATION ${PYTHON_SITE_PACKAGES}/fife) if(fifechan) install(TARGETS _fifechan DESTINATION ${PYTHON_SITE_PACKAGES}/fife) install(FILES ${PROJECT_BINARY_DIR}/fifechan.py DESTINATION ${PYTHON_SITE_PACKAGES}/fife) endif(fifechan) endif(build-python) #------------------------------------------------------------------------------ # Build fifengine as a library #------------------------------------------------------------------------------ if(build-library) add_library(fife ${FIFE_CORE_SRC} ${FIFE_FCHAN_SRC}) set_target_properties(fife PROPERTIES SOVERSION ${FIFE_VERSION}) target_link_libraries(fife ${SDL2_LIBRARY} ${SDL2_IMAGE_LIBRARIES} ${SDL2_TTF_LIBRARIES} ${OPENAL_LIBRARY}) target_link_libraries(fife ${Boost_LIBRARIES}) target_link_libraries(fife ${PNG_LIBRARIES}) target_link_libraries(fife ${VORBISFILE_LIBRARY}) target_link_libraries(fife ${VORBIS_LIBRARY}) target_link_libraries(fife ${OGG_LIBRARIES}) target_link_libraries(fife ${TinyXML_LIBRARIES}) target_link_libraries(fife ${OPENGL_gl_LIBRARY}) target_link_libraries(fife ${FIFECHAN_LIBRARIES}) install(TARGETS fife DESTINATION ${CMAKE_INSTALL_PREFIX}/lib) install(FILES ${PROJECT_SOURCE_DIR}/engine/core/version.h DESTINATION ${CMAKE_INSTALL_PREFIX}/include/fife/core/) MACRO(INSTALL_HEADERS_WITH_DIRECTORY HEADER_LIST) FOREACH(HEADER ${${HEADER_LIST}}) get_filename_component(DIR ${HEADER} DIRECTORY) string(REPLACE ${CMAKE_CURRENT_LIST_DIR}/engine "" DIR ${DIR}) INSTALL(FILES ${HEADER} DESTINATION ${CMAKE_INSTALL_PREFIX}/include/fife/${DIR}) ENDFOREACH(HEADER) ENDMACRO(INSTALL_HEADERS_WITH_DIRECTORY) INSTALL_HEADERS_WITH_DIRECTORY(FIFE_CORE_HDR) if(fifechan) INSTALL_HEADERS_WITH_DIRECTORY(FIFE_FCHAN_HDR) endif(fifechan) if(cegui) INSTALL_HEADERS_WITH_DIRECTORY(FIFE_CEGUI_HDR) endif(cegui) if(rocket) INSTALL_HEADERS_WITH_DIRECTORY(FIFE_LROCKET_HDR) endif(rocket) endif(build-library) fifengine-0.4.1/INSTALL.md000066400000000000000000000076471304641216200151130ustar00rootroot00000000000000__/\\\\\\\\\\\\\\\___/\\\\\\\\\\\___/\\\\\\\\\\\\\\\___/\\\\\\\\\\\\\\\_ _\/\\\///////////___\/////\\\///___\/\\\///////////___\/\\\///////////__ _\/\\\__________________\/\\\______\/\\\______________\/\\\_____________ _\/\\\\\\\\\\\__________\/\\\______\/\\\\\\\\\\\______\/\\\\\\\\\\\_____ _\/\\\///////___________\/\\\______\/\\\///////_______\/\\\///////______ _\/\\\__________________\/\\\______\/\\\______________\/\\\_____________ _\/\\\__________________\/\\\______\/\\\______________\/\\\_____________ _\/\\\_______________/\\\\\\\\\\\__\/\\\______________\/\\\\\\\\\\\\\\\_ _\///_______________\///////////___\///_______________\///////////////__ == Building, Installing and Running FIFE == === Notes === We are finally able to provide install targets for most platforms. There may be a few minor issues left over to work out but for the most part the install targets work as advertized. === Dependencies === A list of all dependencies (including accurate version numbers) that you'll need to obtain to build FIFE on your platform can be found at the project wiki: * https://github.com/fifengine/fifengine/wiki/dependencies === SCons Build System Notes === FIFE utilizes the SCons (http://www.scons.org) build system. Here is a quick list of scons commands that can be important for building FIFE on your platform: * 'scons -h' will list additional compile options. * 'scons -c' deletes any compiled objects (scons equivalent of 'make clean'). * 'scons' will build FIFE (default target is fife-python). Valid targets include: * ext : builds the external dependencies (only REQUIRED in Linux) * tests : builds unittests (needed for test_fife.py) * fife-shared : builds a shared library (DLL on Windows) * fife-static : builds a static library * fife-python : (default) builds a python module (uses swig) * fife-swig : build the swig python wrappers * fife : builds fife-shared, fife-static and fife-python * install-shared : installs the shared library * install-static : installs the static library * install-python : installs the python module and library * install-dev : installed the shared, static and header files * install-all : installs the shared, static and python libraries * projects : build msvc, msvc9 and code-blocks (win32 and linux) project files Build options: * --release : builds the release versions of the binaries * --disable-opengl : removes opengl support * --disable-zip : removes ZIP archive support * --disable-log : disable engine logging support * --enable-rend-camzone : enables camera zone renderer * --enable-rend-grid : enables camera grid renderer * --enable-profile : build with profiling information * --prefix : installation prefix for the shared and static libraries * --python-prefix : installation prefix for the python library * --lib-dir : installation directory for the libraries == Platform specific details == === Linux === Detailed information how to build FIFE on Linux-based distributions can be found at the project wiki: * https://github.com/fifengine/fifengine/wiki/Building-on-linux After FIFE has been built successfully move into the /demos/rio_de_hola directory and run: 'python run.py' === OS X === Detailed information how to build FIFE on OS X systems can be found at the project wiki: * https://github.com/fifengine/fifengine/wiki/Building-on-osx After FIFE has been built successfully move into the /demos/rio_de_hola directory and run: 'python run.py' === Win32 === The Win32 package ships with precompiled binaries. Simply unpack the package to location of your choice. After that you'll need to install the 32bit version of ActivePython 2.7. Move into the \demos\rio_de_hola directory and start the run.py script. You can simply double-click with your mouse on it. It should be automatically associated with the Python interpreter after installing ActivePython. fifengine-0.4.1/LICENSE.md000066400000000000000000000636421304641216200150640ustar00rootroot00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! fifengine-0.4.1/README.md000066400000000000000000000146311304641216200147310ustar00rootroot00000000000000![FIFE LOGO](https://raw.githubusercontent.com/fifengine/fifengine/master/doc/logo/FIFE_small_c3.png) # FIFE Flexible Isometric Free Engine (FIFE) is a multi-platform isometric game engine written in C++. It comes with Python bindings allowing users to create games using Python as well as C++. The engine is extendable and enables you to add any feature you can imagine to your project. | [Website](http://fifengine.net/) | [![#fife on Freenode](https://img.shields.io/badge/freenode-%23fife-green.svg)](https://webchat.freenode.net/?channels=fife) | [Changelog](https://github.com/fifengine/fifengine/blob/master/CHANGELOG.md) | [Releases](https://github.com/fifengine/fifengine/releases) | [Source Code (zip)](https://github.com/fifengine/fifengine/archive/master.zip) | |:--------:|:--------:|:--------:|:--------:|:--------:|:--------:|:--------:| | Continuous Integration | Linux | Mac | Windows | |:----------------------:|:-----:|:--------:|:-------:| | **Build Status** | [![Travis Build status](https://travis-ci.org/fifengine/fifengine.svg?branch=master)](https://travis-ci.org/fifengine/fifengine) | [![Travis Build status](https://travis-ci.org/fifengine/fifengine.svg?branch=master)](https://travis-ci.org/fifengine/fifengine) | [![Appveyor Build status](https://ci.appveyor.com/api/projects/status/github/fifengine/fifengine?branch=master&svg=true)](https://ci.appveyor.com/project/LinuxDonald/fifengine) | | **Development Releases** | - | - | [All artifacts](https://ci.appveyor.com/project/LinuxDonald/fifengine/build/artifacts) | | **Documentations** | | | | |:----------------------:|:----------------:|:-------:|:----------:| | [Overview](https://fifengine.github.io/fifengine-docs/) | [Developer Manual](https://fifengine.github.io/fifengine-docs/developer-manual/en/) | [C++ API](http://www.fifengine.net/doxygen) | [Python API](http://www.fifengine.net/epydoc) | # Table of contents 1. [Features] (#1-features) 2. [License] (#2-license) 3. [Tests] (#3-tests) 4. [Python Demos] (#4-python-demos) 6. [Python Tutorials] (#5-python-tutorials) 5. [C++ Tutorials] (#6-c-tutorials) 7. [Troubleshooting] (#7-troubleshooting) 8. [Feedback] (#8-feedback) ## 1) Features A [complete list of the features](https://fifengine.github.io/fifengine-docs/user-manual/en/#_features) that FIFE offers can be found in the user-manual. ## 2) License The source code (*.cpp, *.h & *.py) is licensed under [LGPL v2.1 or newer](http://www.gnu.org/licenses/lgpl-2.1.html): Content was taken from a lot a lot of different 3rd party sources. Therefore each client directory comes with a separate LICENSE file that states the origin of the content, the author and the actual license it was published under. ## 3) Tests The test tool can be found within the `/tests/fife_test` directory. You can launch it by running `run.py`. Open the console with `F10`. To run a test enter `run` and the test name like `PathfinderTest`. ## 4) Python Demos ### [Editor](https://github.com/fifengine/fifengine-editor) The Python based editor tool can be found within the [fifengine-editor repo](https://github.com/fifengine/fifengine-editor). You can launch it by running `run.py`. It is used to edit map files for the [Rio De Hola demo](https://github.com/fifengine/fifengine-demos/tree/master/rio_de_hola). Other clients extend it and use it to edit their maps. ### [Rio De Hola](https://github.com/fifengine/fifengine-demos/tree/master/rio_de_hola) Rio de hola is a technology demo showing off many of the FIFE features. It is located in the `rio_de_hola` directory and can be launched by running `run.py`. Once started as an example game, it's now a playground for developers to test their code. It serves as a good starting point for own game developments. ### [Shooter](https://github.com/fifengine/fifengine-demos/tree/master/shooter) The Shooter demo was an attempt to show the versatility and flexibility of FIFE. It is a simple side scrolling shooter that has a main menu, one level and an end boss. Try your luck and see if you can defeat the boss! ### [PyChan](https://github.com/fifengine/fifengine-demos/tree/master/pychan_demo) There is an example client residing in `pychan_demo` that shows how the pychan GUI library works. You may start the GUI demo application by running `pychan_demo.py`. ### Configuring the Editor and Demos The engine utilizes special settings files for configuring FIFE. This file is called `settings.xml` and resides in the `~/.fife` directory (in `\Application Data\fife` for Windows users). The Shooter Demo and the PyChan demo are exceptions. They both store their `settings.xml` file in their root directories. NOTE that the `settings.xml` file is auto generated and wont be there until you run the demos for the first time. FIFE automatically fills the settings file with default values. You find more information on [FIFE settings in the Developer-Manual](https://fifengine.github.io/fifengine-docs/developer-manual/en/#_engine_settings). ## 5) [Python Tutorials](https://github.com/fifengine/python-tutorials) Our Python tutorials demonstrate how to use the engine when working with Python. ## 6) [C++ Tutorials](https://github.com/fifengine/cpp-tutorials) There is also a set of C++ tutorials demonstrating the usage of the engine, when working with C++. ## 7) Troubleshooting ### Video Card/Driver Issues There are some known driver/card combinations that exhibit some problems with FIFE. Users have reported seeing blank screens or fuzzy images. If this is happening to you please report it on our forums in the Help and troubleshooting section here: http://forums.fifengine.net/index.php?board=4.0 Please include your Card/Driver/OS information in your post. Currently the fix is to modify your `settings.xml` file and set both GLUseFramebuffer and GLUseNPOT to `False` (they are `True` by default). ### Audio Win32 users tend to suffer from problems with the OpenAL drivers. If you don't hear sound while running a FIFE client, run `oalinst.exe` that ships with the Win32 FIFE Development Kit. This is the latest OpenAL driver for Win32. ## 8) Feedback We appreciate every kind of feedback concerning the release, the project in general and the bundled techdemo. Feedback is a great way to help us to improve FIFE. If you would like to get in contact with us and provide feedback you can either visit our IRC channel or our forums: * #fife on freenode.net * http://forums.fifengine.net/ fifengine-0.4.1/appveyor.yml000066400000000000000000000144571304641216200160500ustar00rootroot00000000000000# Build worker image (VM template) image: Visual Studio 2015 clone_depth: 5 version: '{build}' platform: - x86 configuration: - Release #- Debug environment: MSBUILD_FLAGS: /verbosity:minimal /maxcpucount matrix: # VS 14 + Py2.7 - generator: "Visual Studio 14" PYTHON: "C:\\Python27" PYTHON_VERSION: "2.7" # VS 14 + Py3.4 - generator: "Visual Studio 14" PYTHON: "C:\\Python34" PYTHON_VERSION: "3.4" #- generator: "MinGW Makefiles" matrix: fast_finish: true cache: - C:\projects\fifengine-dependencies\downloads # - C:\projects\fifengine-dependencies\includes # scripts that are called at very beginning, before repo cloning init: - date /T & time /T - git config --global core.autocrlf input - cmake --version # go to hell Xamarin (see http://help.appveyor.com/discussions/problems/4569) - del "C:\Program Files (x86)\MSBuild\14.0\Microsoft.Common.targets\ImportAfter\Xamarin.Common.targets" # Set "build version number" to "short-commit-hash" or when tagged to "tag name" (Travis style) - ps: >- if ($env:APPVEYOR_REPO_TAG -eq "true") { Update-AppveyorBuild -Version "$env:APPVEYOR_REPO_TAG_NAME" } else { Update-AppveyorBuild -Version "dev-$($env:APPVEYOR_REPO_COMMIT.substring(0,7))" } # There are multiple pre-installed versions of Python on Appveyor # see https://www.appveyor.com/docs/installed-software/#python - echo %PYTHON% %PYTHON_VERSION% - "SET PATH=%PYTHON%;%PYTHON%\\bin;%PYTHON%\\Scripts;%PATH%" # Show version and architecture for Python - "%PYTHON%\\python.exe --version" - "%PYTHON%\\python.exe -c \"import struct; print(struct.calcsize('P') * 8)\"" install: # set path to boost according to compiler toolchain - if "%generator%" == "Visual Studio 14" (SET boost_root=C:\Libraries\boost_1_63_0) - if "%generator%" == "Visual Studio 14" (SET boost_librarydir=C:\Libraries\boost_1_63_0\lib32-msvc-14.0) # get dependencies - cmake dependencies -G "%generator%" -B../fifengine-dependencies/build - cmake --build ../fifengine-dependencies/build --target ALL_BUILD --config %configuration% # show dependency folders - dir ..\fifengine-dependencies - dir ..\fifengine-dependencies\downloads - dir ..\fifengine-dependencies\includes /s #before_build: # git sh.exe conflicts with MinGW makefiles #- if "%generator%"=="MinGW Makefiles" (set "PATH=%PATH:C:\Program Files\Git\usr\bin;=%") build_script: - dir # create folder for an out-of-source-tree build: "c:\projects\build" - cd.. - mkdir build - cd build # generate build script - SHARED LIB - > cmake ..\fifengine -G "%generator%" -DCMAKE_BUILD_TYPE=%configuration% -DCMAKE_INSTALL_PREFIX="c:/fife/install" -DBOOST_ROOT="%boost_root%" -DBOOST_LIBRARYDIR="%boost_librarydir%" -Dbuild-library=ON -DBUILD_SHARED_LIBS=ON # build - cmake --build . --target ALL_BUILD --config %configuration% -- /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll" # install - cmake --build . --target INSTALL --config %configuration% # generate build script - STATIC LIB - > cmake ..\fifengine -G "%generator%" -DCMAKE_BUILD_TYPE=%configuration% -DCMAKE_INSTALL_PREFIX="c:/fife/install" -DBOOST_ROOT="%boost_root%" -DBOOST_LIBRARYDIR="%boost_librarydir%" -Dbuild-library=ON -DBUILD_SHARED_LIBS=OFF # build - cmake --build . --target ALL_BUILD --config %configuration% -- /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll" # install - cmake --build . --target INSTALL --config %configuration% after_build: - dir C:\projects\build\Release /s - if "%generator%"=="Visual Studio 14" (set COMPILER="VC14") - if "%generator%"=="MinGW Makefiles" (set COMPILER="MinGW") # package dependencies artifact - call %APPVEYOR_BUILD_FOLDER%\build\appveyor\copy-boost-to-includes.bat - cd C:\projects\fifengine-dependencies\includes - 7z a -tzip -mx9 "%APPVEYOR_BUILD_FOLDER%\libfife-dependencies-%APPVEYOR_BUILD_VERSION%-%COMPILER%-%platform%.zip" - appveyor PushArtifact "%APPVEYOR_BUILD_FOLDER%\libfife-dependencies-%APPVEYOR_BUILD_VERSION%-%COMPILER%-%platform%.zip" # package libfife artifact - cd c:\fife\install - 7z a -tzip -mx9 "%APPVEYOR_BUILD_FOLDER%\libfife-%APPVEYOR_BUILD_VERSION%-%COMPILER%-%platform%.zip" - appveyor PushArtifact "%APPVEYOR_BUILD_FOLDER%\libfife-%APPVEYOR_BUILD_VERSION%-%COMPILER%-%platform%.zip" # package Python Installer artifact - xcopy /Y /S "C:\projects\build\*.py" "%APPVEYOR_BUILD_FOLDER%\engine\python\fife\" - xcopy /Y /S "C:\projects\build\Release\*.*" "%APPVEYOR_BUILD_FOLDER%\engine\python\fife\" - xcopy /Y /S "C:\projects\fifengine-dependencies\includes\bin\*.dll" "%APPVEYOR_BUILD_FOLDER%\engine\python\fife\" - xcopy /Y /S "C:\projects\fifengine-dependencies\includes\lib\x86\*.dll" "%APPVEYOR_BUILD_FOLDER%\engine\python\fife\" - cd %APPVEYOR_BUILD_FOLDER% - python setup.py set_metadata --version=0.4.1 bdist_msi --target-version="%PYTHON_VERSION%" - python setup.py set_metadata --version=0.4.1 bdist_dumb --format=zip - dir %APPVEYOR_BUILD_FOLDER%\dist - appveyor PushArtifact "%APPVEYOR_BUILD_FOLDER%\dist\libfife-0.4.1.win32-py%PYTHON_VERSION%.msi" - appveyor PushArtifact "%APPVEYOR_BUILD_FOLDER%\dist\libfife-0.4.1.win32.zip" - dir C:\projects\build /s - dir "%APPVEYOR_BUILD_FOLDER%\engine\python\fife\" /s artifacts: - path: 'libfife-dependencies-*.zip' name: Dependencies - path: 'libfife-*.zip' name: LibFife - path: 'dist\libfife-*py2.7.msi' name: Python27Installer - path: 'dist\libfife-0.4.1.win32.zip' name: Python27-zip # deploy to Github Releases on tag push deploy: provider: GitHub release: 'Fifengine $(APPVEYOR_REPO_TAG_NAME)' tag: $(APPVEYOR_REPO_TAG_NAME) description: '[**Changelog**](https://github.com/fifengine/fifengine/blob/master/CHANGELOG.md)' artifact: Dependencies, LibFife, Python27Installer, Python27-zip draft: false prerelease: false force_update: true # overwrite files of existing release on GitHub on: branch: master # release from master branch only appveyor_repo_tag: true # deploy on tag push only auth_token: # encrypted token from GitHub secure: 4QuwNtXXqe6cIFwL3YCCn/47V7LdKBNbJVGjBSGDzJyUefOER3b7OrMrXm2FQYy3 fifengine-0.4.1/build/000077500000000000000000000000001304641216200145445ustar00rootroot00000000000000fifengine-0.4.1/build/appveyor/000077500000000000000000000000001304641216200164115ustar00rootroot00000000000000fifengine-0.4.1/build/appveyor/copy-boost-to-includes.bat000066400000000000000000000027761304641216200234370ustar00rootroot00000000000000@echo off echo "=== Copy the pre-installed Boost to the includes folder" :: create folders mkdir C:\projects\fifengine-dependencies\includes\lib\boost mkdir C:\projects\fifengine-dependencies\includes\include\boost :: copy boost includes xcopy /Y /S "C:\Libraries\boost_1_63_0\boost" "C:\projects\fifengine-dependencies\includes\include\boost" >nul 2>&1 :: copy binaries (dlls) and libs copy "C:\Libraries\boost_1_63_0\lib32-msvc-14.0\boost_filesystem-vc140-mt-1_63.dll" "C:\projects\fifengine-dependencies\includes\bin\boost_filesystem-vc140-mt-1_63.dll" copy "C:\Libraries\boost_1_63_0\lib32-msvc-14.0\boost_system-vc140-mt-1_63.dll" "C:\projects\fifengine-dependencies\includes\bin\boost_system-vc140-mt-1_63.dll" copy "C:\Libraries\boost_1_63_0\lib32-msvc-14.0\boost_regex-vc140-mt-1_63.dll" "C:\projects\fifengine-dependencies\includes\bin\boost_regex-vc140-mt-1_63.dll" copy "C:\Libraries\boost_1_63_0\lib32-msvc-14.0\libboost_filesystem-vc140-mt-1_63.lib" "C:\projects\fifengine-dependencies\includes\lib\boost\libboost_filesystem-vc140-mt-1_63.lib" copy "C:\Libraries\boost_1_63_0\lib32-msvc-14.0\libboost_system-vc140-mt-1_63.lib" "C:\projects\fifengine-dependencies\includes\lib\boost\libboost_system-vc140-mt-1_63.lib" copy "C:\Libraries\boost_1_63_0\lib32-msvc-14.0\libboost_regex-vc140-mt-1_63.lib" "C:\projects\fifengine-dependencies\includes\lib\boost\libboost_regex-vc140-mt-1_63.lib" :: remove the "share" folder rmdir /S /Q C:\projects\fifengine-dependencies\includes\share echo "Done." fifengine-0.4.1/cmake/000077500000000000000000000000001304641216200145255ustar00rootroot00000000000000fifengine-0.4.1/cmake/FindCEGUI.cmake000066400000000000000000000710501304641216200171670ustar00rootroot00000000000000################################################################################ # FindCEGUI # # Locate CEGUI LIBRARIES # # This module defines # CEGUI_FOUND, if false, do not try to link to CEGUI # CEGUI_INCLUDE_DIR, where to find headers. # CEGUI_LIBRARIES, the LIBRARIES to link against # CEGUI_BINARY_REL - location of the main CEGUI binary (win32 non-static only, release) # CEGUI_BINARY_DBG - location of the main CEGUI binaries (win32 non-static only, debug) # # # Modules : # CEGUI_${COMPONENT}_FOUND - ${COMPONENT} is available # CEGUI_${COMPONENT}_INCLUDE_DIRS - additional include directories for ${COMPONENT} # CEGUI_${COMPONENT}_LIBRARIES - link these to use ${COMPONENT} # CEGUI_${COMPONENT}_BINARY_REL - location of the component binary (win32 non-static only, release) # CEGUI_${COMPONENT}_BINARY_DBG - location of the component binary (win32 non-static only, debug) # # VERSION 0.7.X: # WindowsRenderer: # Falagard # Renderer: # Direct3D9Renderer Direct3D10Renderer Direct3D11Renderer IrrlichtRenderer NullRenderer OgreRenderer OpenGLRenderer # ImageCodec: # CoronaImageCodec DevILImageCodec FreeImageImageCodec SILLYImageCodec STBImageCodec TGAImageCodec # Parser: # ExpatParser LibxmlParser RapidXMLParser TinyXMLParser XercesParser) # Script: # LuaScriptModule toluapp # VERSION 0.8.X: # WindowsRenderer: # CoreWindowRendererSet # Renderer: # Direct3D9Renderer Direct3D10Renderer Direct3D11Renderer IrrlichtRenderer NullRenderer OgreRenderer OpenGLRenderer OpenGL3Renderer OpenGLESRenderer # ImageCodec: # CoronaImageCodec DevILImageCodec FreeImageImageCodec SILLYImageCodec STBImageCodec TGAImageCodec PVRImageCodec # Parser: # ExpatParser LibXMLParser RapidXMLParser TinyXMLParser XercesParser) # Script: # LuaScriptModule # # author: Guillaume Smaha # # People have asked us to include a FindCEGUI that is high quality that they will # be able to copy and use to find CEGUI, so we have finally done that. # # If you have improvements for this scripts, please consider sending them upstream. # See https://bitbucket.org/cegui/cegui ################################################################################ ################################################################################ # Get the value of a preprocessor entry ################################################################################ macro(get_preprocessor_entry CONTENTS KEYWORD VARIABLE) string(REGEX MATCH "# *define +${KEYWORD} +((\"([^\n]*)\")|([^ \n]*))" PREPROC_TEMP_VAR ${${CONTENTS}} ) if (CMAKE_MATCH_3) set(${VARIABLE} ${CMAKE_MATCH_3}) else () set(${VARIABLE} ${CMAKE_MATCH_4}) endif () endmacro() ################################################################################ # Check if exist a preprocessor entry ################################################################################ macro(has_preprocessor_entry CONTENTS KEYWORD VARIABLE) string(REGEX MATCH "\n *# *define +(${KEYWORD})" PREPROC_TEMP_VAR ${${CONTENTS}} ) if (CMAKE_MATCH_1) set(${VARIABLE} TRUE) else () set(${VARIABLE} FALSE) endif () endmacro() ################################################################################ # Replace the value of a preprocessor entry ################################################################################ macro(replace_preprocessor_entry VARIABLE KEYWORD NEW_VALUE) string(REGEX REPLACE "(// *)?# *define +${KEYWORD} +[^ \n]*" "#define ${KEYWORD} ${NEW_VALUE}" ${VARIABLE}_TEMP ${${VARIABLE}} ) set(${VARIABLE} ${${VARIABLE}_TEMP}) endmacro() ################################################################################ # Define the value of preprocessor entry ################################################################################ macro(set_preprocessor_entry VARIABLE KEYWORD ENABLE) if (${ENABLE}) set(TMP_REPLACE_STR "#define ${KEYWORD}") else () set(TMP_REPLACE_STR "// #define ${KEYWORD}") endif () string(REGEX REPLACE "(// *)?# *define +${KEYWORD} *\n" ${TMP_REPLACE_STR} ${VARIABLE}_TEMP ${${VARIABLE}} ) set(${VARIABLE} ${${VARIABLE}_TEMP}) endmacro() ################################################################################ # Begin processing of package ################################################################################ macro(findpkg_begin PREFIX) if (NOT ${PREFIX}_FIND_QUIETLY) message(STATUS "Looking for ${PREFIX}...") endif () endmacro(findpkg_begin) ################################################################################ # Display a status message unless FIND_QUIETLY is set ################################################################################ macro(pkg_message PREFIX) if (NOT ${PREFIX}_FIND_QUIETLY) message(STATUS ${ARGN}) endif () endmacro(pkg_message) ################################################################################ # Get environment variable, define it as ENV_$var and make sure backslashes are converted to forward slashes ################################################################################ macro(getenv_path VAR) set(ENV_${VAR} $ENV{${VAR}}) # replace won't work if var is blank if (ENV_${VAR}) string( REGEX REPLACE "\\\\" "/" ENV_${VAR} ${ENV_${VAR}} ) endif () endmacro(getenv_path) ################################################################################ # Construct search paths for includes and libraries from a PREFIX_PATH ################################################################################ macro(create_search_paths PREFIX) foreach(dir ${${PREFIX}_PREFIX_PATH}) set(${PREFIX}_INC_SEARCH_PATH ${${PREFIX}_INC_SEARCH_PATH} ${dir}/include ${dir}/Include ${dir}/include/${PREFIX} ${dir}/Headers) set(${PREFIX}_INC_SEARCH_PATH ${${PREFIX}_INC_SEARCH_PATH} ${dir}/${PREFIX}/include ${dir}/${PREFIX}/Include ${dir}/${PREFIX}/include/${PREFIX} ${dir}/${PREFIX}/Headers) set(${PREFIX}_LIB_SEARCH_PATH ${${PREFIX}_LIB_SEARCH_PATH} ${dir}/lib ${dir}/Lib ${dir}/lib/${PREFIX} ${dir}/Libs) set(${PREFIX}_BIN_SEARCH_PATH ${${PREFIX}_BIN_SEARCH_PATH} ${dir}/bin) endforeach(dir) if(ANDROID) set(${PREFIX}_LIB_SEARCH_PATH ${${PREFIX}_LIB_SEARCH_PATH} ${OGRE_DEPENDENCIES_DIR}/lib/${ANDROID_ABI}) endif() set(${PREFIX}_FRAMEWORK_SEARCH_PATH ${${PREFIX}_PREFIX_PATH}) endmacro(create_search_paths) ################################################################################ # clear cache variables if a certain variable changed ################################################################################ macro(clear_if_changed TESTVAR) # test against internal check variable # HACK: Apparently, adding a variable to the cache cleans up the list # a bit. We need to also remove any empty strings from the list, but # at the same time ensure that we are actually dealing with a list. list(APPEND ${TESTVAR} "") list(REMOVE_ITEM ${TESTVAR} "") if (NOT "${${TESTVAR}}" STREQUAL "${${TESTVAR}_INT_CHECK}") message(STATUS "${TESTVAR} changed.") foreach(var ${ARGN}) set(${var} "NOTFOUND" CACHE STRING "${var}-docstring" FORCE) endforeach(var) endif () set(${TESTVAR}_INT_CHECK ${${TESTVAR}} CACHE INTERNAL "${TESTVAR}-docstring" FORCE) endmacro(clear_if_changed) ################################################################################ # Try to get some hints from pkg-config, if available ################################################################################ macro(use_pkgconfig PREFIX PKGNAME) find_package(PkgConfig) if (PKG_CONFIG_FOUND) pkg_check_modules(${PREFIX} ${PKGNAME} QUIET) endif () endmacro (use_pkgconfig) ################################################################################ # Couple a set of release AND debug libraries (or frameworks) ################################################################################ macro(make_library_set PREFIX) if (${PREFIX}_FWK) set(${PREFIX} ${${PREFIX}_FWK}) elseif (${PREFIX}_REL AND ${PREFIX}_DBG) set(${PREFIX} optimized ${${PREFIX}_REL} debug ${${PREFIX}_DBG}) elseif (${PREFIX}_REL) set(${PREFIX} ${${PREFIX}_REL}) elseif (${PREFIX}_DBG) set(${PREFIX} ${${PREFIX}_DBG}) endif () endmacro(make_library_set) ################################################################################ # Generate debug names from given release names ################################################################################ macro(get_debug_names PREFIX) foreach(i ${${PREFIX}}) set(${PREFIX}_DBG ${${PREFIX}_DBG} ${i}d ${i}D ${i}_d ${i}_D ${i}_debug ${i}) endforeach(i) endmacro(get_debug_names) ################################################################################ # Add the parent dir from DIR to VAR ################################################################################ macro(add_parent_dir VAR DIR) get_filename_component(${DIR}_TEMP "${${DIR}}/.." ABSOLUTE) set(${VAR} ${${VAR}} ${${DIR}_TEMP}) endmacro(add_parent_dir) ################################################################################ # Do the final processing for the package find. ################################################################################ macro(findpkg_finish PREFIX) # skip if already processed during this run if (NOT ${PREFIX}_FOUND) if (${PREFIX}_INCLUDE_DIR AND ${PREFIX}_LIBRARY) set(${PREFIX}_FOUND TRUE) set(${PREFIX}_INCLUDE_DIRS ${${PREFIX}_INCLUDE_DIR}) set(${PREFIX}_LIBRARIES ${${PREFIX}_LIBRARY}) if (NOT ${PREFIX}_FIND_QUIETLY) message(STATUS "Found ${PREFIX}: ${${PREFIX}_LIBRARIES}") endif () else () if (NOT ${PREFIX}_FIND_QUIETLY) message(STATUS "Could not locate ${PREFIX}") endif () if (${PREFIX}_FIND_REQUIRED) message(FATAL_ERROR "Required library ${PREFIX} not found! Install the library (including dev packages) and try again. If the library is already installed, set the missing variables manually in cmake.") endif () endif () mark_as_advanced(${PREFIX}_FOUND ${PREFIX}_LIBRARIES ${PREFIX}_INCLUDE_DIRS ${PREFIX}_INCLUDE_DIR ${PREFIX}_LIBRARY ${PREFIX}_LIBRARY_REL ${PREFIX}_LIBRARY_DBG ${PREFIX}_LIBRARY_FWK) endif () endmacro(findpkg_finish) ######################################################### # Find cegui modules ######################################################### macro(cegui_find_modules PLUGIN_COMPONENT) foreach (comp ${CEGUI_${PLUGIN_COMPONENT}_MODULES}) set(LIBNAME ${comp}) set(HEADER ${CEGUI_${PLUGIN_COMPONENT}_MODULES_${comp}_HEADER}) set(PKGCONFIG ${CEGUI_${PLUGIN_COMPONENT}_MODULES_${comp}_PKGCONFIG}) set(CHECKNOPREFIX ${CEGUI_${PLUGIN_COMPONENT}_MODULES_${comp}_CHECKNOPREFIX}) if (NOT "${HEADER}" STREQUAL "") findpkg_begin(CEGUI_${comp}) if(PKGCONFIG) use_pkgconfig(CEGUI_${comp}_PKGC "CEGUI-${PKGCONFIG}") if(NOT CEGUI_${comp}_PKGC_INCLUDE_DIRS AND CEGUI_LIB_SUFFIX) use_pkgconfig(CEGUI_${comp}_PKGC "CEGUI${CEGUI_LIB_SUFFIX}-${PKGCONFIG}") endif() endif() list(LENGTH HEADER len) math(EXPR lenmax "${len} - 1") foreach(val RANGE ${lenmax}) list(GET HEADER ${val} pathHeader) if(CEGUI_${comp}_INCLUDE_DIR) set(CEGUI_${comp}_INCLUDE_DIR_TMP ${CEGUI_${comp}_INCLUDE_DIR}) unset(CEGUI_${comp}_INCLUDE_DIR CACHE) endif() get_filename_component(head "${pathHeader}" NAME) get_filename_component(dir "${pathHeader}" DIRECTORY) if (NOT "${dir}" STREQUAL "") set(dir "${dir}/") endif () find_path(CEGUI_${comp}_INCLUDE_DIR NAMES ${head} HINTS ${CEGUI_INCLUDE_DIRS} ${CEGUI_${comp}_PKGC_INCLUDE_DIRS} PATH_SUFFIXES ${dir} CEGUI/${dir}) if(CEGUI_${comp}_INCLUDE_DIR_TMP) set(CEGUI_${comp}_INCLUDE_DIR ${CEGUI_${comp}_INCLUDE_DIR} ${CEGUI_${comp}_INCLUDE_DIR_TMP}) unset(CEGUI_${comp}_INCLUDE_DIR_TMP CACHE) endif() endforeach() list(REMOVE_DUPLICATES CEGUI_${comp}_INCLUDE_DIR) set(CEGUI_SUBLIB_DIR "cegui-${CEGUI_VERSION_MAJOR}.${CEGUI_VERSION_MINOR}") set(CEGUI_${comp}_LIBRARY_NAMES "CEGUI${comp}") get_debug_names(CEGUI_${comp}_LIBRARY_NAMES) set(CEGUI_${comp}_LIBRARY_NAMES_SUFFIX "CEGUI${comp}${CEGUI_LIB_SUFFIX}") get_debug_names(CEGUI_${comp}_LIBRARY_NAMES_SUFFIX) find_library(CEGUI_${comp}_LIBRARY_REL NAMES ${CEGUI_${comp}_LIBRARY_NAMES} ${CEGUI_${comp}_LIBRARY_NAMES_SUFFIX} HINTS ${CEGUI_LIBRARY_DIR_REL} ${CEGUI_LIBRARY_DIR_REL}/${CEGUI_SUBLIB_DIR} ${CEGUI_${comp}_PKGC_LIBRARY_DIRS} PATH_SUFFIXES "" "Release" "RelWithDebInfo" "MinSizeRel") find_library(CEGUI_${comp}_LIBRARY_DBG NAMES ${CEGUI_${comp}_LIBRARY_NAMES_DBG} ${CEGUI_${comp}_LIBRARY_NAMES_SUFFIX_DBG} HINTS ${CEGUI_LIBRARY_DIR_DBG} ${CEGUI_LIBRARY_DIR_DBG}/${CEGUI_SUBLIB_DIR} ${CEGUI_${comp}_PKGC_LIBRARY_DIRS} PATH_SUFFIXES "" "Debug") if(CHECKNOPREFIX AND (NOT CEGUI_${comp}_LIBRARY_REL OR NOT CEGUI_${comp}_LIBRARY_DBG)) set(CEGUI_${comp}_LIBRARY_NAMES "${comp}") get_debug_names(CEGUI_${comp}_LIBRARY_NAMES) set(CEGUI_${comp}_LIBRARY_NAMES_SUFFIX "${comp}${CEGUI_LIB_SUFFIX}") get_debug_names(CEGUI_${comp}_LIBRARY_NAMES_SUFFIX) find_library(CEGUI_${comp}_LIBRARY_REL NAMES ${CEGUI_${comp}_LIBRARY_NAMES} ${CEGUI_${comp}_LIBRARY_NAMES_SUFFIX} HINTS ${CEGUI_LIBRARY_DIR_REL} ${CEGUI_LIBRARY_DIR_REL}/${CEGUI_SUBLIB_DIR} ${CEGUI_${comp}_PKGC_LIBRARY_DIRS} PATH_SUFFIXES "" "Release" "RelWithDebInfo" "MinSizeRel") find_library(CEGUI_${comp}_LIBRARY_DBG NAMES ${CEGUI_${comp}_LIBRARY_NAMES_DBG} ${CEGUI_${comp}_LIBRARY_NAMES_SUFFIX_DBG} HINTS ${CEGUI_LIBRARY_DIR_DBG} ${CEGUI_LIBRARY_DIR_DBG}/${CEGUI_SUBLIB_DIR} ${CEGUI_${comp}_PKGC_LIBRARY_DIRS} PATH_SUFFIXES "" "Debug") endif() make_library_set(CEGUI_${comp}_LIBRARY) if (NOT CEGUI_STATIC) if (WIN32) find_file(CEGUI_${comp}_BINARY_REL NAMES "CEGUI${comp}.dll" "CEGUI${comp}${CEGUI_LIB_SUFFIX}.dll" HINTS ${CEGUI_BIN_SEARCH_PATH} ${CEGUI_${comp}_PKGC_LIBRARY_DIRS} PATH_SUFFIXES "" "Release" "RelWithDebInfo" "MinSizeRel") find_file(CEGUI_${comp}_BINARY_DBG NAMES "CEGUI${comp}_d.dll" "CEGUI${comp}${CEGUI_LIB_SUFFIX}_d.dll" HINTS ${CEGUI_BIN_SEARCH_PATH} ${CEGUI_${comp}_PKGC_LIBRARY_DIRS} PATH_SUFFIXES "" "Debug") if(CHECKNOPREFIX AND (NOT CEGUI_${comp}_LIBRARY_REL OR NOT CEGUI_${comp}_LIBRARY_DBG)) find_file(CEGUI_${comp}_BINARY_REL NAMES "${comp}${CEGUI_LIB_SUFFIX}.dll" HINTS ${CEGUI_BIN_SEARCH_PATH} PATH_SUFFIXES "" "Release" "RelWithDebInfo" "MinSizeRel") find_file(CEGUI_${comp}_BINARY_DBG NAMES "${comp}${CEGUI_LIB_SUFFIX}_d.dll" HINTS ${CEGUI_BIN_SEARCH_PATH} PATH_SUFFIXES "" "Debug") endif() endif() get_filename_component(CEGUI_${comp}_BINARY_DIR_REL "${CEGUI_${comp}_BINARY_REL}" PATH) get_filename_component(CEGUI_${comp}_BINARY_DIR_DBG "${CEGUI_${comp}_BINARY_DBG}" PATH) mark_as_advanced(CEGUI_${comp}_BINARY_REL CEGUI_${comp}_BINARY_DBG CEGUI_${comp}_BINARY_DIR_REL CEGUI_${comp}_BINARY_DIR_DBG) endif() findpkg_finish(CEGUI_${comp}) endif () endforeach (comp) endmacro(cegui_find_modules) ######################################################### # register a module ######################################################### macro(cegui_register_module TYPE LIBNAME HEADER PKGCONFIG) set(CEGUI_MODULES ${CEGUI_MODULES} ${LIBNAME}) set(CEGUI_${TYPE}_MODULES ${CEGUI_${TYPE}_MODULES} ${LIBNAME}) set(CEGUI_${TYPE}_MODULES_${LIBNAME}_HEADER ${HEADER}) if(NOT "${PKGCONFIG}" STREQUAL "") set(CEGUI_${TYPE}_MODULES_${LIBNAME}_PKGCONFIG ${PKGCONFIG}) endif() endmacro() ######################################################### # Main ######################################################### set(CEGUI_VERSION_MAJOR_DEFAULT "0") # Register var to check change on base set(CEGUI_RESET_VARS CEGUI_CONFIG_INCLUDE_DIR CEGUI_INCLUDE_DIR CEGUI_LIBRARY_REL CEGUI_LIBRARY_DBG) set(CEGUI_PREFIX_WATCH ${CEGUI_PREFIX_PATH}) clear_if_changed(CEGUI_PREFIX_WATCH ${CEGUI_RESET_VARS}) findpkg_begin(CEGUI) # Get path, convert backslashes as ${ENV_${var}} getenv_path(CEGUI_HOME) getenv_path(CEGUI_DIR) getenv_path(CEGUI_ROOT) getenv_path(PROGRAMFILES) # Determine whether to search for a dynamic or static build if (CEGUI_STATIC) set(CMAKE_FIND_LIBRARY_SUFFIXES_OLD "${CMAKE_FIND_LIBRARY_SUFFIXES}") if (WIN32) set(CMAKE_FIND_LIBRARY_SUFFIXES ".lib;.dll") else() set(CMAKE_FIND_LIBRARY_SUFFIXES ".a;.so") endif() endif () # construct search paths from environmental hints and # OS specific guesses if (WIN32) set(CEGUI_PREFIX_GUESSES ${ENV_PROGRAMFILES}/cegui ${ENV_PROGRAMFILES}/CEGUI C:/CEGUI-SDK C:/lib/cegui [HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Session\ Manager\\Environment;CEGUI_HOME] [HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Session\ Manager\\Environment;CEGUI_DIR] [HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Session\ Manager\\Environment;CEGUI_ROOT] ) elseif (UNIX) set(CEGUI_PREFIX_GUESSES /opt/cegui /opt/CEGUI /usr /usr/local $ENV{HOME}/cegui $ENV{HOME}/CEGUI ) if (APPLE) set(CEGUI_PREFIX_GUESSES ${CMAKE_CURRENT_SOURCE_DIR}/lib/macosx ${CEGUI_PREFIX_GUESSES} ) endif () endif () set(CEGUI_PREFIX_PATH $ENV{CEGUI_HOME} $ENV{CEGUI_DIR} $ENV{CEGUI_ROOT} ${CEGUI_PREFIX_GUESSES} ) # Construct search paths for includes and libraries create_search_paths(CEGUI) # try to locate CEGUI via pkg-config use_pkgconfig(CEGUI_PKGC "CEGUI${CEGUI_LIB_SUFFIX};CEGUI${CEGUI_LIB_SUFFIX}-${CEGUI_VERSION_MAJOR_DEFAULT}") # locate CEGUI include files find_path(CEGUI_CONFIG_INCLUDE_DIR_PREFIX NAMES CEGUIConfig.h HINTS ${CEGUI_INC_SEARCH_PATH} ${CEGUI_FRAMEWORK_INCLUDES} ${CEGUI_PKGC_INCLUDE_DIRS} PATH_SUFFIXES CEGUI cegui cegui-${CEGUI_VERSION_MAJOR_DEFAULT} cegui-${CEGUI_VERSION_MAJOR_DEFAULT}/CEGUI) find_path(CEGUI_CONFIG_INCLUDE_DIR NAMES CEGUIConfig.h Config.h HINTS ${CEGUI_INC_SEARCH_PATH} ${CEGUI_FRAMEWORK_INCLUDES} ${CEGUI_PKGC_INCLUDE_DIRS} PATH_SUFFIXES CEGUI cegui cegui-${CEGUI_VERSION_MAJOR_DEFAULT} cegui-${CEGUI_VERSION_MAJOR_DEFAULT}/CEGUI) find_path(CEGUI_INCLUDE_DIR NAMES CEGUI.h HINTS ${CEGUI_INC_SEARCH_PATH} ${CEGUI_FRAMEWORK_INCLUDES} ${CEGUI_PKGC_INCLUDE_DIRS} PATH_SUFFIXES CEGUI cegui cegui-${CEGUI_VERSION_MAJOR_DEFAULT} cegui-${CEGUI_VERSION_MAJOR_DEFAULT}/CEGUI) set(CEGUI_INCOMPATIBLE FALSE) if (CEGUI_INCLUDE_DIR) # determine CEGUI version if(CEGUI_CONFIG_INCLUDE_DIR_PREFIX) file(READ ${CEGUI_INCLUDE_DIR}/CEGUIVersion.h CEGUI_TEMP_VERSION_CONTENT) else() file(READ ${CEGUI_INCLUDE_DIR}/Version.h CEGUI_TEMP_VERSION_CONTENT) endif() if (NOT "${CEGUI_TEMP_VERSION_CONTENT}" STREQUAL "") get_preprocessor_entry(CEGUI_TEMP_VERSION_CONTENT CEGUI_VERSION_MAJOR CEGUI_VERSION_MAJOR) get_preprocessor_entry(CEGUI_TEMP_VERSION_CONTENT CEGUI_VERSION_MINOR CEGUI_VERSION_MINOR) get_preprocessor_entry(CEGUI_TEMP_VERSION_CONTENT CEGUI_VERSION_PATCH CEGUI_VERSION_PATCH) get_preprocessor_entry(CEGUI_TEMP_VERSION_CONTENT CEGUI_VERSION_NAME CEGUI_VERSION_NAME) set(CEGUI_VERSION "${CEGUI_VERSION_MAJOR}.${CEGUI_VERSION_MINOR}.${CEGUI_VERSION_PATCH}") pkg_message(CEGUI "Found CEGUI ${CEGUI_VERSION_NAME} (${CEGUI_VERSION})") else() message(SEND_ERROR "Can't found CEGUI version !") set(CEGUI_INCOMPATIBLE FALSE) endif() else () set(CEGUI_INCOMPATIBLE FALSE) endif () if ("${CEGUI_VERSION}" VERSION_GREATER "0.8.0") set(CEGUI_LIB_SUFFIX "-${CEGUI_VERSION_MAJOR}") endif () set(CEGUI_LIBRARY_NAMES "CEGUIBase${CEGUI_LIB_SUFFIX}") get_debug_names(CEGUI_LIBRARY_NAMES) find_library(CEGUI_LIBRARY_REL NAMES ${CEGUI_LIBRARY_NAMES} HINTS ${CEGUI_LIB_SEARCH_PATH} ${CEGUI_PKGC_LIBRARY_DIRS} ${CEGUI_FRAMEWORK_SEARCH_PATH} PATH_SUFFIXES "" "release" "relwithdebinfo" "minsizerel") find_library(CEGUI_LIBRARY_DBG NAMES ${CEGUI_LIBRARY_NAMES_DBG} HINTS ${CEGUI_LIB_SEARCH_PATH} ${CEGUI_PKGC_LIBRARY_DIRS} ${CEGUI_FRAMEWORK_SEARCH_PATH} PATH_SUFFIXES "" "debug") make_library_set(CEGUI_LIBRARY) if (CEGUI_INCOMPATIBLE) set(CEGUI_LIBRARY "NOTFOUND") endif () set(CEGUI_INCLUDE_DIR ${CEGUI_CONFIG_INCLUDE_DIR} ${CEGUI_INCLUDE_DIR}) list(REMOVE_DUPLICATES CEGUI_INCLUDE_DIR) findpkg_finish(CEGUI) # Starting CEGUI 0.8, the headers are in the CEGUI subdirectory, and we must include # its parent rather than directly the subdirectory. Otherwise we'll get compiler errors. if ("${CEGUI_VERSION}" VERSION_GREATER "0.8.0") add_parent_dir(CEGUI_INCLUDE_DIRS_TEMP CEGUI_INCLUDE_DIR) # we basically overwrite CEGUI_INCLUDE_DIR so that it contains only the parent directory. set(CEGUI_INCLUDE_DIR ${CEGUI_INCLUDE_DIRS_TEMP}) endif() set(CEGUI_INCLUDE_DIRS ${CEGUI_INCLUDE_DIR}) mark_as_advanced(CEGUI_CONFIG_INCLUDE_DIR) if (NOT CEGUI_FOUND) return() endif () get_filename_component(CEGUI_LIBRARY_DIR_REL "${CEGUI_LIBRARY_REL}" PATH) get_filename_component(CEGUI_LIBRARY_DIR_DBG "${CEGUI_LIBRARY_DBG}" PATH) set(CEGUI_LIBRARY_DIRS ${CEGUI_LIBRARY_DIR_REL} ${CEGUI_LIBRARY_DIR_DBG}) # find binaries if (NOT CEGUI_STATIC) if (WIN32) find_file(CEGUI_BINARY_REL NAMES "CEGUIBase${CEGUI_LIB_SUFFIX}.dll" "CEGUIBase.dll" HINTS ${CEGUI_BIN_SEARCH_PATH} PATH_SUFFIXES "" "Release" "RelWithDebInfo" "MinSizeRel") find_file(CEGUI_BINARY_DBG NAMES "CEGUIBase${CEGUI_LIB_SUFFIX}_d.dll" "CEGUIBase_d.dll" HINTS ${CEGUI_BIN_SEARCH_PATH} PATH_SUFFIXES "" "Debug") endif() get_filename_component(CEGUI_BINARY_DIR_REL "${CEGUI_BINARY_REL}" PATH) get_filename_component(CEGUI_BINARY_DIR_DBG "${CEGUI_BINARY_DBG}" PATH) mark_as_advanced(CEGUI_BINARY_REL CEGUI_BINARY_DBG CEGUI_BINARY_DIR_REL CEGUI_BINARY_DIR_DBG) endif() if ("${CEGUI_VERSION}" VERSION_GREATER "0.8.0") # Base cegui_register_module(BASE CommonDialogs CommonDialogs/Module.h "") # WindowsRenderer cegui_register_module(WINDOWSRENDERER CoreWindowRendererSet WindowRendererSets/Core/Module.h "") # Renderer cegui_register_module(RENDERER Direct3D9Renderer RendererModules/Direct3D9/Renderer.h "") cegui_register_module(RENDERER Direct3D10Renderer RendererModules/Direct3D10/Renderer.h "") cegui_register_module(RENDERER Direct3D11Renderer RendererModules/Direct3D11/Renderer.h "") cegui_register_module(RENDERER DirectFBRenderer RendererModules/DirectFB/Renderer.h "") cegui_register_module(RENDERER IrrlichtRenderer RendererModules/Irrlicht/Renderer.h "IRRLICHT") cegui_register_module(RENDERER NullRenderer RendererModules/Null/Renderer.h "NULL") cegui_register_module(RENDERER OgreRenderer RendererModules/Ogre/Renderer.h "OGRE") cegui_register_module(RENDERER OpenGLRenderer RendererModules/OpenGL/GLRenderer.h "OPENGL") cegui_register_module(RENDERER OpenGL3Renderer RendererModules/OpenGL/GL3Renderer.h "OPENGL3") cegui_register_module(RENDERER OpenGLESRenderer RendererModules/OpenGLES/Renderer.h "") # ImageCodec cegui_register_module(IMAGECODEC CoronaImageCodec ImageCodecModules/Corona/ImageCodec.h "") cegui_register_module(IMAGECODEC DevILImageCodec ImageCodecModules/DevIL/ImageCodec.h "") cegui_register_module(IMAGECODEC FreeImageImageCodec ImageCodecModules/FreeImage/ImageCodec.h "") cegui_register_module(IMAGECODEC SILLYImageCodec ImageCodecModules/SILLY/ImageCodec.h "") cegui_register_module(IMAGECODEC STBImageCodec ImageCodecModules/STB/ImageCodec.h "") cegui_register_module(IMAGECODEC TGAImageCodec ImageCodecModules/TGA/ImageCodec.h "") cegui_register_module(IMAGECODEC PVRImageCodec ImageCodecModules/PVR/ImageCodec.h "") # Parser cegui_register_module(PARSER ExpatParser XMLParserModules/Expat/XMLParser.h "") cegui_register_module(PARSER LibXMLParser XMLParserModules/Libxml2/XMLParser.h "") cegui_register_module(PARSER RapidXMLParser XMLParserModules/RapidXML/XMLParser.h "") cegui_register_module(PARSER TinyXMLParser XMLParserModules/TinyXML/XMLParser.h "") cegui_register_module(PARSER XercesParser XMLParserModules/Xerces/XMLParser.h "") # Script cegui_register_module(SCRIPT LuaScriptModule ScriptModules/Lua/ScriptModule.h "LUA") else () # WindowsRenderer cegui_register_module(WINDOWSRENDERER FalagardWRBase "WindowRendererSets/Falagard/FalModule.h;falagard/CEGUIFalNamedArea.h" "") # Renderer cegui_register_module(RENDERER Direct3D9Renderer RendererModules/Direct3D9/CEGUIDirect3D9Renderer.h "") cegui_register_module(RENDERER Direct3D10Renderer RendererModules/Direct3D10/CEGUIDirect3D10Renderer.h "") cegui_register_module(RENDERER Direct3D11Renderer RendererModules/Direct3D11/CEGUIDirect3D11Renderer.h "") cegui_register_module(RENDERER DirectFBRenderer RendererModules/DirectFB/CEGUIDirectFBRenderer.h "") cegui_register_module(RENDERER IrrlichtRenderer RendererModules/Irrlicht/CEGUIIrrlichtRenderer.h "") cegui_register_module(RENDERER NullRenderer RendererModules/Null/CEGUINullRenderer.h "NULL") cegui_register_module(RENDERER OgreRenderer RendererModules/Ogre/CEGUIOgreRenderer.h "OGRE") cegui_register_module(RENDERER OpenGLRenderer RendererModules/OpenGL/CEGUIOpenGLRenderer.h "OPENGL") # ImageCodec cegui_register_module(IMAGECODEC CoronaImageCodec ImageCodecModules/CoronaImageCodec/CEGUICoronaImageCodec.h "") cegui_register_module(IMAGECODEC DevILImageCodec ImageCodecModules/DevILImageCodec/CEGUIDevILImageCodec.h "") cegui_register_module(IMAGECODEC FreeImageImageCodec ImageCodecModules/FreeImageImageCodec/CEGUIFreeImageImageCodec.h "") cegui_register_module(IMAGECODEC SILLYImageCodec ImageCodecModules/SILLYImageCodec/CEGUISILLYImageCodec.h "") cegui_register_module(IMAGECODEC STBImageCodec ImageCodecModules/STBImageCodec/CEGUISTBImageCodec.h "") cegui_register_module(IMAGECODEC TGAImageCodec ImageCodecModules/TGAImageCodec/CEGUITGAImageCodec.h "") # Parser cegui_register_module(PARSER ExpatParser XMLParserModules/ExpatParser/CEGUIExpatParser.h "") cegui_register_module(PARSER LibxmlParser XMLParserModules/LibxmlParser/CEGUILibxmlParser.h "") cegui_register_module(PARSER RapidXMLParser XMLParserModules/RapidXMLParser/CEGUIRapidXMLParser.h "") cegui_register_module(PARSER TinyXMLParser XMLParserModules/TinyXMLParser/CEGUITinyXMLParser.h "") cegui_register_module(PARSER XercesParser XMLParserModules/XercesParser/CEGUIXercesParser.h "") # Script cegui_register_module(SCRIPT LuaScriptModule ScriptingModules/LuaScriptModule/CEGUILua.h "") if(WIN32) cegui_register_module(SCRIPT tolua++ ScriptingModules/LuaScriptModule/support/tolua++/tolua++.h "") set(CEGUI_SCRIPT_MODULES_tolua++_CHECKNOPREFIX TRUE) else() cegui_register_module(SCRIPT toluapp ScriptingModules/LuaScriptModule/support/tolua++/tolua++.h "") endif() endif () # Register var to check change on modules set(CEGUI_RESET_MODULES_VARS "") foreach (comp ${CEGUI_MODULES}) set(CEGUI_RESET_MODULES_VARS ${CEGUI_RESET_MODULES_VARS} CEGUI_${comp}_INCLUDE_DIR CEGUI_${comp}_LIBRARY_FWK CEGUI_${comp}_LIBRARY_DBG CEGUI_${comp}_LIBRARY_REL ) endforeach (comp) set(CEGUI_PREFIX_MODULES_WATCH ${CEGUI_PREFIX_MODULES_PATH}) clear_if_changed(CEGUI_PREFIX_WATCH ${CEGUI_RESET_MODULES_VARS}) # Find modules cegui_find_modules(BASE) cegui_find_modules(WINDOWSRENDERER) cegui_find_modules(RENDERER) cegui_find_modules(IMAGECODEC) cegui_find_modules(PARSER) cegui_find_modules(SCRIPT) # Find modules if (CEGUI_STATIC) set(CMAKE_FIND_LIBRARY_SUFFIXES "${CMAKE_FIND_LIBRARY_SUFFIXES_OLD}") endif() #Check change on modules clear_if_changed(CEGUI_PREFIX_WATCH) clear_if_changed(CEGUI_PREFIX_MODULES_WATCH) fifengine-0.4.1/cmake/FindFifeChan.cmake000066400000000000000000000062321304641216200177760ustar00rootroot00000000000000#------------------------------------------------------------------------------ # FindFifeChan.cmake #------------------------------------------------------------------------------ # # Find the native fifechan includes and libraries. Supports components. # # Usage: find_package(FifeChan COMPONENTS opengl sdl REQUIRED) # # FIFECHAN_INCLUDE_DIR - where to find fifechan/fifechan.hüü, etc. # FIFECHAN_LIBRARIES - List of libraries when using fifechan. # FIFECHAN_FOUND - True, if fifechan found. # # FIFECHAN_${component}_FOUND - True, if fifechan_component found. # #------------------------------------------------------------------------------ # Author: Jens A. Koch #------------------------------------------------------------------------------ if(FIFECHAN_INCLUDE_DIR) # Already in cache, be silent set(FIFECHAN_FIND_QUIETLY TRUE) endif(FIFECHAN_INCLUDE_DIR) #------------------------------------------------------------------------------ # Find FIFECHAN_INCLUDE_DIR #------------------------------------------------------------------------------ find_path(FIFECHAN_INCLUDE_DIR NAMES fifechan.hpp PATH_SUFFIXES fifechan) #------------------------------------------------------------------------------ # Find FIFECHAN_LIBRARY #------------------------------------------------------------------------------ # support alternative library names: suffix "_static" and prefix "lib" find_library(FIFECHAN_LIBRARY NAMES fifechan fifechan_static libfifechan libfifechan_static) #------------------------------------------------------------------------------ # Find libraries (components) # # Example: find_package(FifeChan COMPONENTS opengl sdl REQUIRED) #------------------------------------------------------------------------------ IF(FifeChan_FIND_COMPONENTS) message(STATUS "Found the following FifeChan libraries:") FOREACH(component ${FifeChan_FIND_COMPONENTS}) find_library(FIFECHAN_${component}_LIBRARY NAMES fifechan_${component}) if(FIFECHAN_${component}_LIBRARY) SET(FIFECHAN_${component}_FOUND 1) list(APPEND FIFECHAN_COMPONENTS "${FIFECHAN_${component}_LIBRARY}") message(STATUS " fifechan_${component}") else() SET(FIFECHAN_${component}_FOUND 0) message(STATUS " fifechan_${component} not found.") endif() ENDFOREACH() ENDIF() # - handle the QUIETLY and REQUIRED arguments # - set FIFECHAN_FOUND to TRUE if all REQUIRED_VARS are TRUE # - additionally handle components, which are found: FIFECHAN_${component}_FOUND include(FindPackageHandleStandardArgs) find_package_handle_standard_args(FIFECHAN REQUIRED_VARS FIFECHAN_LIBRARY FIFECHAN_INCLUDE_DIR HANDLE_COMPONENTS ) if(FIFECHAN_FOUND) set(FIFECHAN_LIBRARIES ${FIFECHAN_LIBRARY} ${FIFECHAN_COMPONENTS}) endif(FIFECHAN_FOUND) # for debugging #message(STATUS "FIFECHAN_INCLUDE_DIR = '${FIFECHAN_INCLUDE_DIR}'") #message(STATUS "FIFECHAN_LIBRARIES = '${FIFECHAN_LIBRARIES}'") mark_as_advanced(FIFECHAN_INCLUDE_DIR FIFECHAN_LIBRARY) fifengine-0.4.1/cmake/FindLibRocket.cmake000066400000000000000000000015711304641216200202120ustar00rootroot00000000000000# - Try to find libRocket # and define # # LIBROCKET_FOUND - System has libRocket # LIBROCKET_INCLUDE_DIRS - The LibRocket include directories # LIBROCKET_LIBRARIES - The libraries needed to use LibRocket # LIBROCKET_DEFINITIONS - Compiler switches required for using LibRocket find_path(LIBROCKET_INCLUDE_DIR Rocket/Core.h PATH_SUFFIXES Rocket ) find_library(LIBROCKET_LIBRARY NAMES RocketCore RocketCore_d) set(LIBROCKET_LIBRARIES ${LIBROCKET_LIBRARY} ) set(LIBROCKET_INCLUDE_DIRS ${LIBROCKET_INCLUDE_DIR} ) include(FindPackageHandleStandardArgs) # handle the QUIETLY and REQUIRED arguments and set LIBROCKET_FOUND to TRUE # if all listed variables are TRUE find_package_handle_standard_args(LibRocket DEFAULT_MSG LIBROCKET_LIBRARY LIBROCKET_INCLUDE_DIR) mark_as_advanced(LIBROCKET_INCLUDE_DIR LIBROCKET_LIBRARY ) fifengine-0.4.1/cmake/FindOgg.cmake000066400000000000000000000007051304641216200170460ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) find_path(OGG_INCLUDE_DIR ogg/ogg.h) set(OGG_NAMES ${OGG_NAMES} ogg libogg) find_library(OGG_LIBRARY NAMES ${OGG_NAMES} PATH) if(OGG_INCLUDE_DIR AND OGG_LIBRARY) set(OGG_FOUND TRUE) endif() if(OGG_FOUND) if(NOT OGG_FIND_QUIETLY) message(STATUS "Found Ogg: ${OGG_LIBRARY}") endif() else(OGG_FOUND) if(OGG_FIND_REQUIRED) message(FATAL_ERROR "Could not find ogg") endif() endif()fifengine-0.4.1/cmake/FindSDL2.cmake000066400000000000000000000141011304641216200170310ustar00rootroot00000000000000 # This module defines # SDL2_LIBRARY, the name of the library to link against # SDL2_FOUND, if false, do not try to link to SDL2 # SDL2_INCLUDE_DIR, where to find SDL.h # # This module responds to the the flag: # SDL2_BUILDING_LIBRARY # If this is defined, then no SDL2main will be linked in because # only applications need main(). # Otherwise, it is assumed you are building an application and this # module will attempt to locate and set the the proper link flags # as part of the returned SDL2_LIBRARY variable. # # Don't forget to include SDLmain.h and SDLmain.m your project for the # OS X framework based version. (Other versions link to -lSDL2main which # this module will try to find on your behalf.) Also for OS X, this # module will automatically add the -framework Cocoa on your behalf. # # # Additional Note: If you see an empty SDL2_LIBRARY_TEMP in your configuration # and no SDL2_LIBRARY, it means CMake did not find your SDL2 library # (SDL2.dll, libsdl2.so, SDL2.framework, etc). # Set SDL2_LIBRARY_TEMP to point to your SDL2 library, and configure again. # Similarly, if you see an empty SDL2MAIN_LIBRARY, you should set this value # as appropriate. These values are used to generate the final SDL2_LIBRARY # variable, but when these values are unset, SDL2_LIBRARY does not get created. # # # $SDL2DIR is an environment variable that would # correspond to the ./configure --prefix=$SDL2DIR # used in building SDL2. # l.e.galup 9-20-02 # # Modified by Eric Wing. # Added code to assist with automated building by using environmental variables # and providing a more controlled/consistent search behavior. # Added new modifications to recognize OS X frameworks and # additional Unix paths (FreeBSD, etc). # Also corrected the header search path to follow "proper" SDL guidelines. # Added a search for SDL2main which is needed by some platforms. # Added a search for threads which is needed by some platforms. # Added needed compile switches for MinGW. # # On OSX, this will prefer the Framework version (if found) over others. # People will have to manually change the cache values of # SDL2_LIBRARY to override this selection or set the CMake environment # CMAKE_INCLUDE_PATH to modify the search paths. # # Note that the header path has changed from SDL2/SDL.h to just SDL.h # This needed to change because "proper" SDL convention # is #include "SDL.h", not . This is done for portability # reasons because not all systems place things in SDL2/ (see FreeBSD). #============================================================================= # Copyright 2003-2009 Kitware, Inc. # # Distributed under the OSI-approved BSD License (the "License"); # see accompanying file Copyright.txt for details. # # This software is distributed WITHOUT ANY WARRANTY; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the License for more information. #============================================================================= # (To distribute this file outside of CMake, substitute the full # License text for the above reference.) message("") SET(SDL2_SEARCH_PATHS ~/Library/Frameworks /Library/Frameworks /usr/local /usr /sw # Fink /opt/local # DarwinPorts /opt/csw # Blastwave /opt ${SDL2_PATH} ) FIND_PATH(SDL2_INCLUDE_DIR SDL.h HINTS $ENV{SDL2DIR} PATH_SUFFIXES include/SDL2 include PATHS ${SDL2_SEARCH_PATHS} ) FIND_LIBRARY(SDL2_LIBRARY_TEMP NAMES SDL2 HINTS $ENV{SDL2DIR} PATH_SUFFIXES lib64 lib lib/x64 lib/x86 PATHS ${SDL2_SEARCH_PATHS} ) IF(NOT SDL2_BUILDING_LIBRARY) IF(NOT ${SDL2_INCLUDE_DIR} MATCHES ".framework") # Non-OS X framework versions expect you to also dynamically link to # SDL2main. This is mainly for Windows and OS X. Other (Unix) platforms # seem to provide SDL2main for compatibility even though they don't # necessarily need it. FIND_LIBRARY(SDL2MAIN_LIBRARY NAMES SDL2main HINTS $ENV{SDL2DIR} PATH_SUFFIXES lib64 lib PATHS ${SDL2_SEARCH_PATHS} ) ENDIF(NOT ${SDL2_INCLUDE_DIR} MATCHES ".framework") ENDIF(NOT SDL2_BUILDING_LIBRARY) # SDL2 may require threads on your system. # The Apple build may not need an explicit flag because one of the # frameworks may already provide it. # But for non-OSX systems, I will use the CMake Threads package. IF(NOT APPLE) FIND_PACKAGE(Threads) ENDIF(NOT APPLE) # MinGW needs an additional library, mwindows # It's total link flags should look like -lmingw32 -lSDL2main -lSDL2 -lmwindows # (Actually on second look, I think it only needs one of the m* libraries.) IF(MINGW) SET(MINGW32_LIBRARY mingw32 CACHE STRING "mwindows for MinGW") ENDIF(MINGW) IF(SDL2_LIBRARY_TEMP) # For SDL2main IF(NOT SDL2_BUILDING_LIBRARY) IF(SDL2MAIN_LIBRARY) SET(SDL2_LIBRARY_TEMP ${SDL2MAIN_LIBRARY} ${SDL2_LIBRARY_TEMP}) ENDIF(SDL2MAIN_LIBRARY) ENDIF(NOT SDL2_BUILDING_LIBRARY) # For OS X, SDL2 uses Cocoa as a backend so it must link to Cocoa. # CMake doesn't display the -framework Cocoa string in the UI even # though it actually is there if I modify a pre-used variable. # I think it has something to do with the CACHE STRING. # So I use a temporary variable until the end so I can set the # "real" variable in one-shot. IF(APPLE) SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} "-framework Cocoa") ENDIF(APPLE) # For threads, as mentioned Apple doesn't need this. # In fact, there seems to be a problem if I used the Threads package # and try using this line, so I'm just skipping it entirely for OS X. IF(NOT APPLE) SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} ${CMAKE_THREAD_LIBS_INIT}) ENDIF(NOT APPLE) # For MinGW library IF(MINGW) SET(SDL2_LIBRARY_TEMP ${MINGW32_LIBRARY} ${SDL2_LIBRARY_TEMP}) ENDIF(MINGW) # Set the final string here so the GUI reflects the final state. SET(SDL2_LIBRARY ${SDL2_LIBRARY_TEMP} CACHE STRING "Where the SDL2 Library can be found") # Set the temp variable to INTERNAL so it is not seen in the CMake GUI SET(SDL2_LIBRARY_TEMP "${SDL2_LIBRARY_TEMP}" CACHE INTERNAL "") ENDIF(SDL2_LIBRARY_TEMP) message("") INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2 REQUIRED_VARS SDL2_LIBRARY SDL2_INCLUDE_DIR) fifengine-0.4.1/cmake/FindSDL2_image.cmake000066400000000000000000000075421304641216200202060ustar00rootroot00000000000000# Locate SDL_image library # # This module defines: # # :: # # SDL_IMAGE_LIBRARIES, the name of the library to link against # SDL_IMAGE_INCLUDE_DIRS, where to find the headers # SDL_IMAGE_FOUND, if false, do not try to link against # SDL_IMAGE_VERSION_STRING - human-readable string containing the version of SDL_image # # # # For backward compatiblity the following variables are also set: # # :: # # SDLIMAGE_LIBRARY (same value as SDL_IMAGE_LIBRARIES) # SDLIMAGE_INCLUDE_DIR (same value as SDL_IMAGE_INCLUDE_DIRS) # SDLIMAGE_FOUND (same value as SDL_IMAGE_FOUND) # # # # $SDLDIR is an environment variable that would correspond to the # ./configure --prefix=$SDLDIR used in building SDL. # # Created by Eric Wing. This was influenced by the FindSDL.cmake # module, but with modifications to recognize OS X frameworks and # additional Unix paths (FreeBSD, etc). #============================================================================= # Copyright 2005-2009 Kitware, Inc. # Copyright 2012 Benjamin Eikel # # Distributed under the OSI-approved BSD License (the "License"); # see accompanying file Copyright.txt for details. # # This software is distributed WITHOUT ANY WARRANTY; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the License for more information. #============================================================================= # (To distribute this file outside of CMake, substitute the full # License text for the above reference.) find_path(SDL2_IMAGE_INCLUDE_DIR SDL_image.h HINTS ENV SDL2IMAGEDIR ENV SDL2DIR PATH_SUFFIXES SDL2 # path suffixes to search inside ENV{SDLDIR} include/SDL2 include PATHS ${SDL2_PATH} ) if(CMAKE_SIZEOF_VOID_P EQUAL 8) set(VC_LIB_PATH_SUFFIX lib/x64) else() set(VC_LIB_PATH_SUFFIX lib/x86) endif() find_library(SDL2_IMAGE_LIBRARY NAMES SDL2_image HINTS ENV SDL2IMAGEDIR ENV SDL2DIR PATH_SUFFIXES lib ${VC_LIB_PATH_SUFFIX} PATHS ${SDL2_PATH} ) if(SDL2_IMAGE_INCLUDE_DIR AND EXISTS "${SDL2_IMAGE_INCLUDE_DIR}/SDL_image.h") file(STRINGS "${SDL2_IMAGE_INCLUDE_DIR}/SDL_image.h" SDL2_IMAGE_VERSION_MAJOR_LINE REGEX "^#define[ \t]+SDL_IMAGE_MAJOR_VERSION[ \t]+[0-9]+$") file(STRINGS "${SDL2_IMAGE_INCLUDE_DIR}/SDL_image.h" SDL2_IMAGE_VERSION_MINOR_LINE REGEX "^#define[ \t]+SDL_IMAGE_MINOR_VERSION[ \t]+[0-9]+$") file(STRINGS "${SDL2_IMAGE_INCLUDE_DIR}/SDL_image.h" SDL2_IMAGE_VERSION_PATCH_LINE REGEX "^#define[ \t]+SDL_IMAGE_PATCHLEVEL[ \t]+[0-9]+$") string(REGEX REPLACE "^#define[ \t]+SDL_IMAGE_MAJOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_IMAGE_VERSION_MAJOR "${SDL2_IMAGE_VERSION_MAJOR_LINE}") string(REGEX REPLACE "^#define[ \t]+SDL_IMAGE_MINOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_IMAGE_VERSION_MINOR "${SDL2_IMAGE_VERSION_MINOR_LINE}") string(REGEX REPLACE "^#define[ \t]+SDL_IMAGE_PATCHLEVEL[ \t]+([0-9]+)$" "\\1" SDL2_IMAGE_VERSION_PATCH "${SDL2_IMAGE_VERSION_PATCH_LINE}") set(SDL2_IMAGE_VERSION_STRING ${SDL2_IMAGE_VERSION_MAJOR}.${SDL2_IMAGE_VERSION_MINOR}.${SDL2_IMAGE_VERSION_PATCH}) unset(SDL2_IMAGE_VERSION_MAJOR_LINE) unset(SDL2_IMAGE_VERSION_MINOR_LINE) unset(SDL2_IMAGE_VERSION_PATCH_LINE) unset(SDL2_IMAGE_VERSION_MAJOR) unset(SDL2_IMAGE_VERSION_MINOR) unset(SDL2_IMAGE_VERSION_PATCH) endif() set(SDL2_IMAGE_LIBRARIES ${SDL2_IMAGE_LIBRARY}) set(SDL2_IMAGE_INCLUDE_DIRS ${SDL2_IMAGE_INCLUDE_DIR}) include(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2_image REQUIRED_VARS SDL2_IMAGE_LIBRARIES SDL2_IMAGE_INCLUDE_DIRS VERSION_VAR SDL2_IMAGE_VERSION_STRING) # for backward compatiblity #set(SDLIMAGE_LIBRARY ${SDL_IMAGE_LIBRARIES}) #set(SDLIMAGE_INCLUDE_DIR ${SDL_IMAGE_INCLUDE_DIRS}) #set(SDLIMAGE_FOUND ${SDL_IMAGE_FOUND}) mark_as_advanced(SDL2_IMAGE_LIBRARY SDL2_IMAGE_INCLUDE_DIR) fifengine-0.4.1/cmake/FindSDL2_ttf.cmake000066400000000000000000000072461304641216200177220ustar00rootroot00000000000000# Locate SDL_image library # # This module defines: # # :: # # SDL_TTF_LIBRARIES, the name of the library to link against # SDL_TTF_INCLUDE_DIRS, where to find the headers # SDL_TTF_FOUND, if false, do not try to link against # SDL_F_VERSION_STRING - human-readable string containing the version of SDL_ttf # # # # For backward compatiblity the following variables are also set: # # :: # # SDLTTF_LIBRARY (same value as SDL_TTF_LIBRARIES) # SDLTTF_INCLUDE_DIR (same value as SDL_TTF_INCLUDE_DIRS) # SDLTTF_FOUND (same value as SDL_TTF_FOUND) # # # # $SDLDIR is an environment variable that would correspond to the # ./configure --prefix=$SDLDIR used in building SDL. # # Created by Eric Wing. This was influenced by the FindSDL.cmake # module, but with modifications to recognize OS X frameworks and # additional Unix paths (FreeBSD, etc). #============================================================================= # Copyright 2005-2009 Kitware, Inc. # Copyright 2012 Benjamin Eikel # # Distributed under the OSI-approved BSD License (the "License"); # see accompanying file Copyright.txt for details. # # This software is distributed WITHOUT ANY WARRANTY; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the License for more information. #============================================================================= # (To distribute this file outside of CMake, substitute the full # License text for the above reference.) find_path(SDL2_TTF_INCLUDE_DIR SDL_ttf.h HINTS ENV SDL2TTFDIR ENV SDL2DIR PATH_SUFFIXES SDL2 # path suffixes to search inside ENV{SDLDIR} include/SDL2 include PATHS ${SDL2_PATH} ) if (CMAKE_SIZEOF_VOID_P EQUAL 8) set(VC_LIB_PATH_SUFFIX lib/x64) else () set(VC_LIB_PATH_SUFFIX lib/x86) endif () find_library(SDL2_TTF_LIBRARY NAMES SDL2_ttf HINTS ENV SDL2TTFDIR ENV SDL2DIR PATH_SUFFIXES lib ${VC_LIB_PATH_SUFFIX} PATHS ${SDL2_PATH} ) if (SDL2_TTF_INCLUDE_DIR AND EXISTS "${SDL2_TTF_INCLUDE_DIR}/SDL_ttf.h") file(STRINGS "${SDL2_TTF_INCLUDE_DIR}/SDL_ttf.h" SDL2_TTF_VERSION_MAJOR_LINE REGEX "^#define[ \t]+SDL_TTF_MAJOR_VERSION[ \t]+[0-9]+$") file(STRINGS "${SDL2_TTF_INCLUDE_DIR}/SDL_ttf.h" SDL2_TTF_VERSION_MINOR_LINE REGEX "^#define[ \t]+SDL_TTF_MINOR_VERSION[ \t]+[0-9]+$") file(STRINGS "${SDL2_TTF_INCLUDE_DIR}/SDL_ttf.h" SDL2_TTF_VERSION_PATCH_LINE REGEX "^#define[ \t]+SDL_TTF_PATCHLEVEL[ \t]+[0-9]+$") string(REGEX REPLACE "^#define[ \t]+SDL_TTF_MAJOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_TTF_VERSION_MAJOR "${SDL2_TTF_VERSION_MAJOR_LINE}") string(REGEX REPLACE "^#define[ \t]+SDL_TTF_MINOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_TTF_VERSION_MINOR "${SDL2_TTF_VERSION_MINOR_LINE}") string(REGEX REPLACE "^#define[ \t]+SDL_TTF_PATCHLEVEL[ \t]+([0-9]+)$" "\\1" SDL2_TTF_VERSION_PATCH "${SDL2_TTF_VERSION_PATCH_LINE}") set(SDL2_TTF_VERSION_STRING ${SDL2_TTF_VERSION_MAJOR}.${SDL2_TTF_VERSION_MINOR}.${SDL2_TTF_VERSION_PATCH}) unset(SDL2_TTF_VERSION_MAJOR_LINE) unset(SDL2_TTF_VERSION_MINOR_LINE) unset(SDL2_TTF_VERSION_PATCH_LINE) unset(SDL2_TTF_VERSION_MAJOR) unset(SDL2_TTF_VERSION_MINOR) unset(SDL2_TTF_VERSION_PATCH) endif () set(SDL2_TTF_LIBRARIES ${SDL2_TTF_LIBRARY}) set(SDL2_TTF_INCLUDE_DIRS ${SDL2_TTF_INCLUDE_DIR}) include(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2_ttf REQUIRED_VARS SDL2_TTF_LIBRARIES SDL2_TTF_INCLUDE_DIRS VERSION_VAR SDL2_TTF_VERSION_STRING) # for backward compatiblity #set(SDLTTF_LIBRARY ${SDL_TTF_LIBRARIES}) #set(SDLTTF_INCLUDE_DIR ${SDL_TTF_INCLUDE_DIRS}) #set(SDLTTF_FOUND ${SDL_TTF_FOUND}) fifengine-0.4.1/cmake/FindTinyXML.cmake000066400000000000000000000107271304641216200176430ustar00rootroot00000000000000################################################################################################## #Copyright (c) 2013-2017, Open Source Robotics Foundation #All rights reserved. # #Redistribution and use in source and binary forms, with or without modification, #are permitted provided that the following conditions are met: # # Redistributions of source code must retain the above copyright notice, this # list of conditions and the following disclaimer. # # Redistributions in binary form must reproduce the above copyright notice, this # list of conditions and the following disclaimer in the documentation and/or # other materials provided with the distribution. # # Neither the name of the {organization} nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # #THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND #ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED #WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE #DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR #ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES #(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; #LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON #ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT #(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ################################################################################################## ################################################################################################## # # CMake script for finding TinyXML. # # Input variables: # # - TinyXML_ROOT_DIR (optional): When specified, header files and libraries will be searched for in # ${TinyXML_ROOT_DIR}/include # ${TinyXML_ROOT_DIR}/libs # respectively, and the default CMake search order will be ignored. When unspecified, the default # CMake search order is used. # This variable can be specified either as a CMake or environment variable. If both are set, # preference is given to the CMake variable. # Use this variable for finding packages installed in a nonstandard location, or for enforcing # that one of multiple package installations is picked up. # # # Cache variables (not intended to be used in CMakeLists.txt files) # # - TinyXML_INCLUDE_DIR: Absolute path to package headers. # - TinyXML_LIBRARY: Absolute path to library. # # # Output variables: # # - TinyXML_FOUND: Boolean that indicates if the package was found # - TinyXML_INCLUDE_DIRS: Paths to the necessary header files # - TinyXML_LIBRARIES: Package libraries # # # Example usage: # # find_package(TinyXML) # if(NOT TinyXML_FOUND) # # Error handling # endif() # ... # include_directories(${TinyXML_INCLUDE_DIRS} ...) # ... # target_link_libraries(my_target ${TinyXML_LIBRARIES}) # ################################################################################################## # Get package location hint from environment variable (if any) if(NOT TinyXML_ROOT_DIR AND DEFINED ENV{TinyXML_ROOT_DIR}) set(TinyXML_ROOT_DIR "$ENV{TinyXML_ROOT_DIR}" CACHE PATH "TinyXML base directory location (optional, used for nonstandard installation paths)") endif() # Search path for nonstandard package locations if(TinyXML_ROOT_DIR) set(TinyXML_INCLUDE_PATH PATHS "${TinyXML_ROOT_DIR}/include" NO_DEFAULT_PATH) set(TinyXML_LIBRARY_PATH PATHS "${TinyXML_ROOT_DIR}/lib" NO_DEFAULT_PATH) endif() # Find headers and libraries find_path(TinyXML_INCLUDE_DIR NAMES tinyxml.h PATH_SUFFIXES "tinyxml" ${TinyXML_INCLUDE_PATH}) find_library(TinyXML_LIBRARY NAMES tinyxml PATH_SUFFIXES "tinyxml" ${TinyXML_LIBRARY_PATH}) mark_as_advanced(TinyXML_INCLUDE_DIR TinyXML_LIBRARY) # Output variables generation include(FindPackageHandleStandardArgs) find_package_handle_standard_args(TinyXML DEFAULT_MSG TinyXML_LIBRARY TinyXML_INCLUDE_DIR) set(TinyXML_FOUND ${TINYXML_FOUND}) # Enforce case-correctness: Set appropriately cased variable... unset(TINYXML_FOUND) # ...and unset uppercase variable generated by find_package_handle_standard_args if(TinyXML_FOUND) set(TinyXML_INCLUDE_DIRS ${TinyXML_INCLUDE_DIR}) set(TinyXML_LIBRARIES ${TinyXML_LIBRARY}) endif() fifengine-0.4.1/cmake/get-fifechan.cmake000066400000000000000000000061071304641216200200530ustar00rootroot00000000000000#------------------------------------------------------------------------------ # External Project: FifeChan / FifeGUI # Downloads: https://github.com/fifengine/fifechan/releases #------------------------------------------------------------------------------ include(ExternalProject) set(FIFECHAN_VERSION "0.1.4") # For Windows it's faster to download the pre-compiled development binaries. if (WIN32) #if(MINGW) # download pre-compiled dev package for MinGW 32/64-bit #ExternalProject_Add( #fifechan #PREFIX ${DEPENDENCY_EXTRACT_DIR} #DOWNLOAD_DIR ${DEPENDENCY_DOWNLOAD_DIR} #URL https://github.com/fifengine/fifechan/releases/tag/${FIFECHAN_VERSION}/fifechan-v${FIFECHAN_VERSION}-MinGW.tar.gz #URL https://ci.appveyor.com/api/projects/jakoch/fifechan/artifacts/fifechan-shared-MinGW.tar.gz #URL_MD5 1 #CONFIGURE_COMMAND "" #BUILD_COMMAND "" #INSTALL_COMMAND #COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPENDENCY_EXTRACT_DIR}/src/fifechan/lib ${DEPENDENCY_INSTALL_DIR}/lib #COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPENDENCY_EXTRACT_DIR}/src/fifechan/include ${DEPENDENCY_INSTALL_DIR}/include/fifechan #) #endif(MINGW) if(MSVC) # download pre-compiled dev package for Visual C++ 32/64-bit ExternalProject_Add( fifechan PREFIX ${DEPENDENCY_EXTRACT_DIR} DOWNLOAD_DIR ${DEPENDENCY_DOWNLOAD_DIR} #URL https://github.com/fifengine/fifechan/releases/tag/${FIFECHAN_VERSION}/fifechan-v${FIFECHAN_VERSION}-VC14.zip URL https://ci.appveyor.com/api/buildjobs/k6gfl3mdxnkhy9mn/artifacts/fifechan-shared-0.1.4-VC14-x86.zip URL_MD5 4925a3d07994b1e360e034ed0475dc37 CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPENDENCY_EXTRACT_DIR}/src/fifechan/bin ${DEPENDENCY_INSTALL_DIR}/bin COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPENDENCY_EXTRACT_DIR}/src/fifechan/lib ${DEPENDENCY_INSTALL_DIR}/lib COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPENDENCY_EXTRACT_DIR}/src/fifechan/include ${DEPENDENCY_INSTALL_DIR}/include/fifechan ) endif(MSVC) else() # build from source set(FIFECHAN_CMAKE_ARGS -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} -DCMAKE_INSTALL_PREFIX:PATH= -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} ) ExternalProject_Add( fifechan PREFIX ${DEPENDENCY_EXTRACT_DIR} DOWNLOAD_DIR ${DEPENDENCY_DOWNLOAD_DIR} URL https://github.com/fifengine/fifechan/archive/master.zip URL_MD5 1 #CONFIGURE_COMMAND /configure --prefix=${DEPENDENCY_INSTALL_DIR} INSTALL_DIR ${DEPENDENCY_INSTALL_DIR} CMAKE_ARGS ${FIFECHAN_CMAKE_ARGS} ) endif() fifengine-0.4.1/cmake/get-libogg.cmake000066400000000000000000000021561304641216200175530ustar00rootroot00000000000000#------------------------------------------------------------------------------ # External Project: libogg # Downloads: http://downloads.xiph.org/releases/ogg/ #------------------------------------------------------------------------------ include(ExternalProject) set(LIBOGG_VERSION "1.3.2") set(LIBOGG_CMAKE_ARGS ${COMMON_CMAKE_ARGS} -G ${CMAKE_GENERATOR} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=${DEPENDENCY_INSTALL_DIR} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} ) ExternalProject_Add( libogg PREFIX ${DEPENDENCY_EXTRACT_DIR} DOWNLOAD_DIR ${DEPENDENCY_DOWNLOAD_DIR} DOWNLOAD_NAME libogg-v${LIBOGG_VERSION}.zip URL http://downloads.xiph.org/releases/ogg/libogg-${LIBOGG_VERSION}.zip URL_MD5 621b890fb8ce1383327df1d5bd000817 PATCH_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_MODULE_PATH}/patches/libogg/CMakeLists.txt ${DEPENDENCY_EXTRACT_DIR}/src/libogg CMAKE_ARGS ${LIBOGG_CMAKE_ARGS} ) fifengine-0.4.1/cmake/get-libpng.cmake000066400000000000000000000037751304641216200175730ustar00rootroot00000000000000#------------------------------------------------------------------------------ # External Project: libpng # Website: http://www.libpng.org/pub/png/libpng.html # Downloads: https://github.com/glennrp/libpng/archive/v1.6.28.zip # Github: https://github.com/glennrp/libpng #------------------------------------------------------------------------------ include(ExternalProject) set(LIBPNG_VERSION "1.6.28") set(LIBPNG_CMAKE_ARGS ${COMMON_CMAKE_ARGS} -DCMAKE_INSTALL_PREFIX:PATH= -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_CONFIGURATION_TYPES=Release -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} -DBUILD_SHARED_LIBS=FALSE -DPNG_SHARED=off -DPNG_STATIC=on -DPNG_TESTS=off -DZLIB_LIBRARY:FILEPATH=${DEPENDENCY_INSTALL_DIR}/lib/zlib.lib -DZLIB_INCLUDE_DIR:PATH=${DEPENDENCY_INSTALL_DIR}/include ) ExternalProject_Add( libpng DEPENDS zlib PREFIX ${DEPENDENCY_EXTRACT_DIR} DOWNLOAD_DIR ${DEPENDENCY_DOWNLOAD_DIR} DOWNLOAD_NAME libpng-v${LIBPNG_VERSION}.zip URL https://github.com/glennrp/libpng/archive/v${LIBPNG_VERSION}.zip URL_MD5 eeb04099fb0910df8d4691ecf8135cb8 INSTALL_DIR ${DEPENDENCY_INSTALL_DIR} CONFIGURE_COMMAND ${CMAKE_COMMAND} ${DEPENDENCY_EXTRACT_DIR}/src/libpng -G ${CMAKE_GENERATOR} -DZLIB_INCLUDE_DIR:PATH=${DEPENDENCY_INSTALL_DIR}/include -DZLIB_LIBRARY:FILEPATH=${DEPENDENCY_INSTALL_DIR}/lib/zlib.lib -DCMAKE_INSTALL_PREFIX=${DEPENDENCY_INSTALL_DIR} BUILD_COMMAND ${CMAKE_COMMAND} --build ${DEPENDENCY_EXTRACT_DIR}/src/libpng-build --config Release --target INSTALL #BUILD_COMMAND msbuild libpng.sln /target:INSTALL /p:Platform=Win32 /p:Configuration=Release #INSTALL_COMMAND msbuild libpng.sln /build Release /project INSTALL #CMAKE_ARGS ${LIBPNG_CMAKE_ARGS} ) fifengine-0.4.1/cmake/get-libvorbis.cmake000066400000000000000000000026741304641216200203100ustar00rootroot00000000000000#------------------------------------------------------------------------------ # External Project: libvorbis # Downloads: http://downloads.xiph.org/releases/vorbis/ #------------------------------------------------------------------------------ include(ExternalProject) set(LIBVORBIS_VERSION "1.3.5") set(LIBVORBIS_CMAKE_ARGS ${COMMON_CMAKE_ARGS} -G ${CMAKE_GENERATOR} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=${DEPENDENCY_INSTALL_DIR} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} # find libogg -DCMAKE_PREFIX_PATH=${DEPENDENCY_INSTALL_DIR} ${CMAKE_PREFIX_PATH} -DOGG_LIBRARY=${DEPENDENCY_INSTALL_DIR}/lib/ogg.lib -DOGG_INCLUDE_DIR=${DEPENDENCY_INSTALL_DIR}/include ) if(WIN32) add_definitions(-D_USE_MATH_DEFINES) endif() ExternalProject_Add( libvorbis DEPENDS libogg PREFIX ${DEPENDENCY_EXTRACT_DIR} DOWNLOAD_DIR ${DEPENDENCY_DOWNLOAD_DIR} DOWNLOAD_NAME libvorbis-v${LIBOGG_VERSION}.zip URL http://downloads.xiph.org/releases/vorbis/libvorbis-${LIBOGG_VERSION}.zip URL_MD5 c39454ff13e79dc8c89bc3a9295b3298 PATCH_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_MODULE_PATH}/patches/libvorbis/CMakeLists.txt ${DEPENDENCY_EXTRACT_DIR}/src/libvorbis CMAKE_ARGS ${LIBVORBIS_CMAKE_ARGS} ) fifengine-0.4.1/cmake/get-openal.cmake000066400000000000000000000046531304641216200175720ustar00rootroot00000000000000#------------------------------------------------------------------------------ # External Project: OpenAL-Soft # # Website: http://kcat.strangesoft.net/openal.html # Downloads: http://kcat.strangesoft.net/openal.html#download # # Alternative Downloads: http://kcat.strangesoft.net/openal-binaries/ # http://kcat.strangesoft.net/openal-releases/ #------------------------------------------------------------------------------ INCLUDE(ExternalProject) set(OPENAL_VERSION "1.17.2") # For win32 it's faster to download the pre-compiled development binaries. if (WIN32) ExternalProject_Add( openal PREFIX ${DEPENDENCY_EXTRACT_DIR} DOWNLOAD_DIR ${DEPENDENCY_DOWNLOAD_DIR} URL http://kcat.strangesoft.net/openal-binaries/openal-soft-${OPENAL_VERSION}-bin.zip URL_MD5 5f5a0484f8fcc808fead0cd23fd557b4 INSTALL_DIR ${DEPENDENCY_INSTALL_DIR} CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND COMMAND ${CMAKE_COMMAND} -E copy ${DEPENDENCY_EXTRACT_DIR}/src/openal/bin/Win32/soft_oal.dll ${DEPENDENCY_INSTALL_DIR}/bin/OpenAL32.dll COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPENDENCY_EXTRACT_DIR}/src/openal/libs/Win32 ${DEPENDENCY_INSTALL_DIR}/lib COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPENDENCY_EXTRACT_DIR}/src/openal/include/AL ${DEPENDENCY_INSTALL_DIR}/include/OpenAL ) else() # build from source SET(OPENAL_PREFIX ${CMAKE_CURRENT_BINARY_DIR}/openal) SET(OPENAL_CMAKE_ARGS ${COMMON_CMAKE_ARGS} -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} -DCMAKE_INSTALL_PREFIX:PATH= -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} -DCMAKE_DEBUG_POSTFIX=d -DALSOFT_CONFIG=OFF -DALSOFT_EXAMPLES=OFF -DALSOFT_NO_CONFIG_UTIL=ON -DALSOFT_UTILS=OFF #-DLIBTYPE=STATIC ) ExternalProject_Add( openal PREFIX ${DEPENDENCY_EXTRACT_DIR} DOWNLOAD_DIR ${DEPENDENCY_DOWNLOAD_DIR} URL http://kcat.strangesoft.net/openal-releases/openal-soft-${OPENAL_VERSION}.tar.bz2 URL_MD5 1764e0d8fec499589b47ebc724e0913d INSTALL_DIR ${DEPENDENCY_INSTALL_DIR} CMAKE_ARGS ${OPENAL_CMAKE_ARGS} ) endif() fifengine-0.4.1/cmake/get-sdl2.cmake000066400000000000000000000046061304641216200171560ustar00rootroot00000000000000#------------------------------------------------------------------------------ # External Project: SDL2 # Downloads: https://libsdl.org/release/ #------------------------------------------------------------------------------ include(ExternalProject) set(SDL2_VERSION "2.0.5") # For Windows it's faster to download the pre-compiled development binaries. if (WIN32) if(MINGW) # download pre-compiled SDL2 dev package for MinGW 32/64-bit ExternalProject_Add( sdl2 PREFIX ${DEPENDENCY_EXTRACT_DIR} DOWNLOAD_DIR ${DEPENDENCY_DOWNLOAD_DIR} URL http://libsdl.org/release/SDL2-devel-${SDL2_VERSION}-mingw.tar.gz URL_MD5 ecf8fb614d57e7d284086a36dae6878f CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPENDENCY_EXTRACT_DIR}/src/sdl2/lib ${DEPENDENCY_INSTALL_DIR}/lib COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPENDENCY_EXTRACT_DIR}/src/sdl2/include ${DEPENDENCY_INSTALL_DIR}/include/SDL2 ) endif(MINGW) if(MSVC) # download pre-compiled SDL2 dev package for Visual C++ 32/64-bit ExternalProject_Add( sdl2 PREFIX ${DEPENDENCY_EXTRACT_DIR} DOWNLOAD_DIR ${DEPENDENCY_DOWNLOAD_DIR} URL http://libsdl.org/release/SDL2-devel-${SDL2_VERSION}-VC.zip URL_MD5 b771f36bb640c173e53fa8259cdd3835 CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPENDENCY_EXTRACT_DIR}/src/sdl2/lib ${DEPENDENCY_INSTALL_DIR}/lib COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPENDENCY_EXTRACT_DIR}/src/sdl2/include ${DEPENDENCY_INSTALL_DIR}/include/SDL2 ) endif(MSVC) else() # build from source set(SDL2_CMAKE_ARGS -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} -DCMAKE_INSTALL_PREFIX:PATH= -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} ) ExternalProject_Add( sdl2 PREFIX ${DEPENDENCY_EXTRACT_DIR} DOWNLOAD_DIR ${DEPENDENCY_DOWNLOAD_DIR} URL http://libsdl.org/release/SDL2-${SDL2_VERSION}.tar.gz URL_MD5 1 #CONFIGURE_COMMAND /configure --prefix=${DEPENDENCY_INSTALL_DIR} INSTALL_DIR ${DEPENDENCY_INSTALL_DIR} CMAKE_ARGS ${SDL2_CMAKE_ARGS} ) endif() fifengine-0.4.1/cmake/get-sdl2_image.cmake000066400000000000000000000043151304641216200203150ustar00rootroot00000000000000#------------------------------------------------------------------------------ # External Project: SDL2_image # Downloads: https://libsdl.org/projects/SDL_image/ #------------------------------------------------------------------------------ include(ExternalProject) set(SDL2_IMAGE_VERSION "2.0.1") # For win32 it's faster to download the pre-compiled development binaries. if (WIN32) if(MINGW) # download pre-compiled SDL2 dev package for MinGW 32/64-bit ExternalProject_Add( sdl2-image DEPENDS sdl2 PREFIX ${DEPENDENCY_EXTRACT_DIR} DOWNLOAD_DIR ${DEPENDENCY_DOWNLOAD_DIR} URL https://libsdl.org/projects/SDL_image/release/SDL2_image-devel-${SDL2_IMAGE_VERSION}-mingw.tar.gz URL_MD5 1 CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPENDENCY_EXTRACT_DIR}/src/sdl2-image/lib ${DEPENDENCY_INSTALL_DIR}/lib COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPENDENCY_EXTRACT_DIR}/src/sdl2-image/include ${DEPENDENCY_INSTALL_DIR}/include/SDL2 ) endif(MINGW) if(MSVC) # download pre-compiled SDL2 dev package for Visual C++ 32/64-bit ExternalProject_Add( sdl2-image DEPENDS sdl2 PREFIX ${DEPENDENCY_EXTRACT_DIR} DOWNLOAD_DIR ${DEPENDENCY_DOWNLOAD_DIR} URL https://libsdl.org/projects/SDL_image/release/SDL2_image-devel-${SDL2_IMAGE_VERSION}-VC.zip URL_MD5 00338534c605262dcbf8ffe90ec2785d CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPENDENCY_EXTRACT_DIR}/src/sdl2-image/lib ${DEPENDENCY_INSTALL_DIR}/lib COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPENDENCY_EXTRACT_DIR}/src/sdl2-image/include ${DEPENDENCY_INSTALL_DIR}/include/SDL2 ) endif(MSVC) else() # build from source ExternalProject_Add( sdl2-image PREFIX ${DEPENDENCY_EXTRACT_DIR} DOWNLOAD_DIR ${DEPENDENCY_DOWNLOAD_DIR} URL https://libsdl.org/projects/SDL_image/release/SDL2_image-${SDL2_IMAGE_VERSION}.tar.gz URL_MD5 1 CONFIGURE_COMMAND /configure --prefix=${DEPENDENCY_INSTALL_DIR} ) endif()fifengine-0.4.1/cmake/get-sdl2_ttf.cmake000066400000000000000000000050131304641216200200240ustar00rootroot00000000000000#------------------------------------------------------------------------------ # External Project: SDL2_ttf # Downloads: https://libsdl.org/projects/SDL_ttf/ #------------------------------------------------------------------------------ include(ExternalProject) set(SDL2_TTF_VERSION "2.0.14") # For win32 it's faster to download the pre-compiled development binaries. if (WIN32) if(MINGW) # download pre-compiled SDL2 dev package for MinGW 32/64-bit ExternalProject_Add( sdl2-ttf DEPENDS sdl2 PREFIX ${DEPENDENCY_EXTRACT_DIR} DOWNLOAD_DIR ${DEPENDENCY_DOWNLOAD_DIR} URL https://libsdl.org/projects/SDL_ttf/release/SDL2_ttf-devel-${SDL2_TTF_VERSION}-mingw.tar.gz URL_MD5 1 CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPENDENCY_EXTRACT_DIR}/src/sdl2-ttf/lib ${DEPENDENCY_INSTALL_DIR}/lib COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPENDENCY_EXTRACT_DIR}/src/sdl2-ttf/include ${DEPENDENCY_INSTALL_DIR}/include/SDL2 ) endif(MINGW) if(MSVC) # download pre-compiled SDL2 dev package for Visual C++ 32/64-bit ExternalProject_Add( sdl2-ttf DEPENDS sdl2 PREFIX ${DEPENDENCY_EXTRACT_DIR} DOWNLOAD_DIR ${DEPENDENCY_DOWNLOAD_DIR} URL https://libsdl.org/projects/SDL_ttf/release/SDL2_ttf-devel-${SDL2_TTF_VERSION}-VC.zip URL_MD5 304d4aa67fec7a5a8c3c47c4639b91e2 CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPENDENCY_EXTRACT_DIR}/src/sdl2-ttf/lib ${DEPENDENCY_INSTALL_DIR}/lib COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPENDENCY_EXTRACT_DIR}/src/sdl2-ttf/include ${DEPENDENCY_INSTALL_DIR}/include/SDL2 ) endif(MSVC) else() # build from source ExternalProject_Add( freetype2 PREFIX ${DEPENDENCY_EXTRACT_DIR} URL http://download.savannah.gnu.org/releases/freetype/freetype-2.4.12.tar.gz URL_MD5 1 DOWNLOAD_DIR ${DOWNLOAD_DIR} CONFIGURE_COMMAND /configure --prefix=${DEPENDENCY_INSTALL_DIR} ) ExternalProject_Add( sdl2-ttf DEPENDS freetype2 PREFIX ${DEPENDENCY_EXTRACT_DIR} DOWNLOAD_DIR ${DEPENDENCY_DOWNLOAD_DIR} URL https://www.libsdl.org/projects/SDL_ttf/release/SDL2_ttf-${SDL2_TTF_VERSION}.tar.gz URL_MD5 1 CONFIGURE_COMMAND /configure --prefix=${DEPENDENCY_INSTALL_DIR} --with-freetype-prefix=${DEPENDENCY_INSTALL_DIR} ) endif()fifengine-0.4.1/cmake/get-swig.cmake000066400000000000000000000030471304641216200172610ustar00rootroot00000000000000#------------------------------------------------------------------------------ # External Project: SWIG (Simplified Wrapper and Interface Generator) # # Website: http://www.swig.org/ # Downloads: http://www.swig.org/download.html #------------------------------------------------------------------------------ INCLUDE(ExternalProject) set(SWIG_VERSION "3.0.12") # For Windows it's faster to download the pre-compiled development binaries. if(WIN32) ExternalProject_Add( swig PREFIX ${DEPENDENCY_EXTRACT_DIR} DOWNLOAD_DIR ${DEPENDENCY_DOWNLOAD_DIR} URL http://downloads.sourceforge.net/project/swig/swigwin/swigwin-${SWIG_VERSION}/swigwin-${SWIG_VERSION}.zip URL_MD5 a49524dad2c91ae1920974e7062bfc93 #INSTALL_DIR ${DEPENDENCY_INSTALL_DIR}/../build-tools/swig CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND COMMAND ${CMAKE_COMMAND} -E copy_directory ${DEPENDENCY_EXTRACT_DIR}/src/swig ${DEPENDENCY_INSTALL_DIR}/../build-tools/swig ) else() # TODO ExternalProject_Add( swig PREFIX ${DEPENDENCY_EXTRACT_DIR} DOWNLOAD_DIR ${DEPENDENCY_DOWNLOAD_DIR} URL http://prdownloads.sourceforge.net/swig/swig-${SWIG_VERSION}.tar.gz URL_MD5 1 INSTALL_DIR ${DEPENDENCY_INSTALL_DIR}/../build-tools/swig ) endif() fifengine-0.4.1/cmake/get-tinyxml.cmake000066400000000000000000000032751304641216200200170ustar00rootroot00000000000000#------------------------------------------------------------------------------ # External Project: TinyXML v1 # Website: https://sourceforge.net/projects/tinyxml # Downloads: https://sourceforge.net/projects/tinyxml/files/tinyxml/ #------------------------------------------------------------------------------ include(ExternalProject) set(TINYXML_VERSION "2.6.2") if (WIN32) ExternalProject_Add( tinyxml PREFIX ${DEPENDENCY_EXTRACT_DIR} DOWNLOAD_DIR ${DEPENDENCY_DOWNLOAD_DIR} DOWNLOAD_NAME tinyxml-v${TINYXML_VERSION}.zip URL http://sourceforge.net/projects/tinyxml/files/tinyxml/2.6.2/tinyxml_2_6_2.zip/download URL_MD5 2a0aaf609c9e670ec9748cd01ed52dae PATCH_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_MODULE_PATH}/patches/tinyxml/CMakeLists.txt ${DEPENDENCY_EXTRACT_DIR}/src/tinyxml INSTALL_COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPENDENCY_INSTALL_DIR}/include/tinyxml COMMAND ${CMAKE_COMMAND} -E copy ${DEPENDENCY_EXTRACT_DIR}/src/tinyxml-build/Release/tinyxml.dll ${DEPENDENCY_INSTALL_DIR}/bin/tinyxml.dll COMMAND ${CMAKE_COMMAND} -E copy ${DEPENDENCY_EXTRACT_DIR}/src/tinyxml-build/Release/tinyxml.lib ${DEPENDENCY_INSTALL_DIR}/lib/tinyxml.lib COMMAND ${CMAKE_COMMAND} -E copy ${DEPENDENCY_EXTRACT_DIR}/src/tinyxml/tinystr.h ${DEPENDENCY_INSTALL_DIR}/include/tinyxml/tinystr.h COMMAND ${CMAKE_COMMAND} -E copy ${DEPENDENCY_EXTRACT_DIR}/src/tinyxml/tinyxml.h ${DEPENDENCY_INSTALL_DIR}/include/tinyxml/tinyxml.h ) else() # build from source # TODO endif()fifengine-0.4.1/cmake/get-zlib.cmake000066400000000000000000000017441304641216200172520ustar00rootroot00000000000000#------------------------------------------------------------------------------ # External Project: zlib # Downloads: http://zlib.net/ # Github: https://github.com/madler/zlib #------------------------------------------------------------------------------ include(ExternalProject) set(ZLIB_VERSION "1.2.11") set(ZLIB_CMAKE_ARGS ${COMMON_CMAKE_ARGS} -G ${CMAKE_GENERATOR} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=${DEPENDENCY_INSTALL_DIR} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} ) ExternalProject_Add( zlib PREFIX ${DEPENDENCY_EXTRACT_DIR} DOWNLOAD_DIR ${DEPENDENCY_DOWNLOAD_DIR} DOWNLOAD_NAME zlib-v${ZLIB_VERSION}.zip URL https://github.com/madler/zlib/archive/v${ZLIB_VERSION}.zip URL_MD5 9d6a627693163bbbf3f26403a3a0b0b1 CMAKE_ARGS ${ZLIB_CMAKE_ARGS} ) fifengine-0.4.1/cmake/patches/000077500000000000000000000000001304641216200161545ustar00rootroot00000000000000fifengine-0.4.1/cmake/patches/libogg/000077500000000000000000000000001304641216200174175ustar00rootroot00000000000000fifengine-0.4.1/cmake/patches/libogg/CMakeLists.txt000066400000000000000000000020051304641216200221540ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) project(Ogg C) set(LIBOGG_SRC src/bitwise.c src/framing.c ) set(LIBOGG_HEADER include/ogg/ogg.h include/ogg/os_types.h ) if(MSVC) ADD_DEFINITIONS(/DLIBOGG_EXPORTS /D_UNICODE /DUNICODE) LIST(APPEND LIBOGG_SRC win32/ogg.def) endif(MSVC) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) add_library(ogg SHARED ${LIBOGG_SRC} ${LIBOGG_HEADER}) if(UNIX AND NOT APPLE) # create "ogg/config_types.h" add_custom_command( OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/include/ogg/config_types.h COMMAND ./configure --silent WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) add_custom_target(config_types SOURCES include/ogg/config_types.h) add_dependencies(ogg config_types) install(FILES include/ogg/config_types.h DESTINATION include/ogg) endif(UNIX AND NOT APPLE) install(TARGETS ogg RUNTIME DESTINATION bin ARCHIVE DESTINATION lib LIBRARY DESTINATION lib ) install(FILES ${LIBOGG_HEADER} DESTINATION include/ogg) fifengine-0.4.1/cmake/patches/libvorbis/000077500000000000000000000000001304641216200201475ustar00rootroot00000000000000fifengine-0.4.1/cmake/patches/libvorbis/CMakeLists.txt000066400000000000000000000051431304641216200227120ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) project(LIBVORBIS C) message("CMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}") message("OGG_LIBRARY=${OGG_LIBRARY}") message("OGG_INCLUDE_DIR=${OGG_INCLUDE_DIR}") #find_package(Ogg REQUIRED) include_directories( ${OGG_INCLUDE_DIR} ${PROJECT_SOURCE_DIR}/lib ) set(LIBVORBIS_SOURCE lib/analysis.c #lib/barkmel.c # unnecessary: bark scale utility lib/bitrate.c lib/block.c lib/codebook.c lib/envelope.c lib/floor0.c lib/floor1.c lib/info.c lib/lookup.c lib/lpc.c lib/lsp.c lib/mapping0.c lib/mdct.c lib/psy.c #lib/psytune.c # dead code lib/registry.c lib/res0.c lib/sharedbook.c lib/smallft.c lib/synthesis.c #lib/tone.c # error: 'M_PI': undeclared identifier lib/vorbisenc.c lib/window.c ) SET(libvorbis_HEADER lib/backends.h lib/bitrate.h lib/codebook.h lib/codec_internal.h lib/envelope.h lib/modes/floor_all.h lib/books/floor/floor_books.h lib/highlevel.h lib/lookup.h lib/lookup_data.h lib/lpc.h lib/lsp.h lib/masking.h lib/mdct.h lib/misc.h lib/os.h lib/psy.h lib/modes/psych_11.h lib/modes/psych_16.h lib/modes/psych_44.h lib/modes/psych_8.h lib/registry.h lib/books/coupled/res_books_stereo.h lib/books/uncoupled/res_books_uncoupled.h lib/modes/residue_16.h lib/modes/residue_44.h lib/modes/residue_44u.h lib/modes/residue_8.h lib/scales.h lib/modes/setup_11.h lib/modes/setup_16.h lib/modes/setup_22.h lib/modes/setup_32.h lib/modes/setup_44.h lib/modes/setup_44u.h lib/modes/setup_8.h lib/modes/setup_X.h lib/smallft.h lib/window.h ) if(WIN32 AND NOT MINGW) set(vorbis_defs win32/vorbis.def) set(vorbisfile_defs win32/vorbisfile.def) endif() include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) add_library(vorbis SHARED ${LIBVORBIS_SOURCE} ${LIBVORBIS_HEADER} ${vorbis_defs}) add_library(vorbisfile SHARED lib/vorbisfile.c ${vorbisfile_defs}) add_library(vorbisfile_static STATIC lib/vorbisfile.c ${vorbisfile_defs}) if(UNIX) set(PLATFORM_LIBS m) endif(UNIX) target_link_libraries(vorbis ${OGG_LIBRARY} ${PLATFORM_LIBS}) target_link_libraries(vorbisfile vorbis ${OGG_LIBRARY}) if(NOT WIN32) set_target_properties(vorbisfile_static PROPERTIES OUTPUT_NAME vorbisfile) endif(NOT WIN32) install(TARGETS vorbis vorbisfile RUNTIME DESTINATION bin ARCHIVE DESTINATION lib LIBRARY DESTINATION lib ) install(DIRECTORY include/vorbis DESTINATION include FILES_MATCHING PATTERN "*.h")fifengine-0.4.1/cmake/patches/tinyxml/000077500000000000000000000000001304641216200176605ustar00rootroot00000000000000fifengine-0.4.1/cmake/patches/tinyxml/CMakeLists.txt000066400000000000000000000010721304641216200224200ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8.3) project(TINYXML) option(BUILD_SHARED_LIBS "Building shared libs. Default is ON" ON) if(MSVC AND BUILD_SHARED_LIBS) set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) endif() add_definitions(-DTIXML_USE_STL=1) set(TINYXML_SRC tinystr.cpp tinyxml.cpp tinyxmlerror.cpp tinyxmlparser.cpp ) set(TINYXML_HEADERS tinystr.h tinyxml.h ) add_library(tinyxml ${TINYXML_SRC}) install(TARGETS tinyxml RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION lib ) install(FILES ${TINYXML_HEADERS} DESTINATION include)fifengine-0.4.1/dependencies/000077500000000000000000000000001304641216200160735ustar00rootroot00000000000000fifengine-0.4.1/dependencies/CMakeLists.txt000066400000000000000000000120531304641216200206340ustar00rootroot00000000000000#------------------------------------------------------------------------------ # Fifengine Dependencies #------------------------------------------------------------------------------ CMAKE_MINIMUM_REQUIRED(VERSION 3.5) PROJECT(fifengine-dependencies) set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/../../${PROJECT_NAME}/includes) set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/../cmake) set(CMAKE_VERBOSE_MAKEFILE ON) if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) set (CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}" CACHE PATH "default install path" FORCE ) endif() message(STATUS "\nWelcome!\n== Build System for ${PROJECT_NAME}") # create a "Release" build by default if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Select build type. Options are: 'Debug', 'Release', 'RelWithDebInfo' and 'MinSizeRel'." FORCE ) message(STATUS "Set CMAKE_BUILD_TYPE to default '${CMAKE_BUILD_TYPE}'.") endif(NOT CMAKE_BUILD_TYPE) # set a fallback download folder for dependencies ("dependencies/../../${PROJECT_NAME}/downloads") if(NOT DEPENDENCY_DOWNLOAD_DIR) set(DEPENDENCY_DOWNLOAD_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../${PROJECT_NAME}/downloads) message(" DEPENDENCY_DOWNLOAD_DIR not set. Using default.") endif(NOT DEPENDENCY_DOWNLOAD_DIR) # set a fallback installation folder for dependencies ("dependencies/../../${PROJECT_NAME}/includes") if(NOT DEPENDENCY_INSTALL_DIR) set(DEPENDENCY_INSTALL_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../${PROJECT_NAME}/includes) message(" DEPENDENCY_INSTALL_DIR not set. Using default.") endif(NOT DEPENDENCY_INSTALL_DIR) # set a fallback folder for the extracted dependencies ("dependencies/../../${PROJECT_NAME}/extracted") if(NOT DEPENDENCY_EXTRACT_DIR) set(DEPENDENCY_EXTRACT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../${PROJECT_NAME}/extracted) message(" DEPENDENCY_EXTRACT_DIR not set. Using default.") endif(NOT DEPENDENCY_EXTRACT_DIR) #------------------------------------------------------------------------------ # Display Status #------------------------------------------------------------------------------ message("") message("== Config Overview") message("") message(" CMAKE_BUILD_TYPE | ${CMAKE_BUILD_TYPE}") message(" CMAKE_BINARY_DIR | ${CMAKE_BINARY_DIR}") message(" CMAKE_INSTALL_PREFIX | ${CMAKE_INSTALL_PREFIX}") message(" DEPENDENCY_INSTALL_DIR | ${DEPENDENCY_INSTALL_DIR}") message(" DEPENDENCY_DOWNLOAD_DIR | ${DEPENDENCY_DOWNLOAD_DIR}") message(" DEPENDENCY_EXTRACT_DIR | ${DEPENDENCY_EXTRACT_DIR}") message("") #------------------------------------------------------------------------------ # Options #------------------------------------------------------------------------------ OPTION(FIFE_DEPENDENCY_SDL2 "Download and build dependency: SDL2" ON) OPTION(FIFE_DEPENDENCY_SDL2_IMAGE "Download and build dependency: SDL2_IMAGE" ON) OPTION(FIFE_DEPENDENCY_SDL2_TTF "Download and build dependency: SDL2_TTF" ON) # TODO boost OPTION(FIFE_DEPENDENCY_ZLIB "Download and build dependency: ZLIB" ON) OPTION(FIFE_DEPENDENCY_LIBPNG "Download and build dependency: LIBPNG" ON) OPTION(FIFE_DEPENDENCY_OPENAL "Download and build dependency: OPENAL" ON) OPTION(FIFE_DEPENDENCY_SWIG "Download and build dependency: SWIG" ON) OPTION(FIFE_DEPENDENCY_TINYXML "Download and build dependency: TINYXML" ON) OPTION(FIFE_DEPENDENCY_LIBOGG "Download and build dependency: LIBOGG" ON) OPTION(FIFE_DEPENDENCY_LIBVORBIS "Download and build dependency: LIBVORBIS" ON) OPTION(FIFE_DEPENDENCY_FIFECHAN "Download and build dependency: FIFECHAN" ON) #------------------------------------------------------------------------------ # Check Options + Include external build scripts #------------------------------------------------------------------------------ IF(FIFE_DEPENDENCY_SDL2) INCLUDE(get-sdl2) ENDIF(FIFE_DEPENDENCY_SDL2) IF(FIFE_DEPENDENCY_SDL2_IMAGE) INCLUDE(get-sdl2_image) ENDIF(FIFE_DEPENDENCY_SDL2_IMAGE) IF(FIFE_DEPENDENCY_SDL2_TTF) INCLUDE(get-sdl2_ttf) ENDIF(FIFE_DEPENDENCY_SDL2_TTF) # TODO: boost IF(FIFE_DEPENDENCY_ZLIB) INCLUDE(get-zlib) ENDIF(FIFE_DEPENDENCY_ZLIB) IF(FIFE_DEPENDENCY_LIBPNG) INCLUDE(get-libpng) ENDIF(FIFE_DEPENDENCY_LIBPNG) IF(FIFE_DEPENDENCY_OPENAL) INCLUDE(get-openal) ENDIF(FIFE_DEPENDENCY_OPENAL) IF(FIFE_DEPENDENCY_SWIG) INCLUDE(get-swig) ENDIF(FIFE_DEPENDENCY_SWIG) IF(FIFE_DEPENDENCY_TINYXML) INCLUDE(get-tinyxml) ENDIF(FIFE_DEPENDENCY_TINYXML) IF(FIFE_DEPENDENCY_LIBOGG) INCLUDE(get-libogg) ENDIF(FIFE_DEPENDENCY_LIBOGG) IF(FIFE_DEPENDENCY_LIBVORBIS) INCLUDE(get-libvorbis) ENDIF(FIFE_DEPENDENCY_LIBVORBIS) IF(FIFE_DEPENDENCY_FIFECHAN) INCLUDE(get-fifechan) ENDIF(FIFE_DEPENDENCY_FIFECHAN) fifengine-0.4.1/doc/000077500000000000000000000000001304641216200142125ustar00rootroot00000000000000fifengine-0.4.1/doc/dependencies/000077500000000000000000000000001304641216200166405ustar00rootroot00000000000000fifengine-0.4.1/doc/dependencies/README000066400000000000000000000003021304641216200175130ustar00rootroot00000000000000This is a placeholder to git wont remove this directory as this is where the tools/analyzers/dep_analyzer.py tool sends all it's output. See the README in tools/analyzers for more information. fifengine-0.4.1/doc/diagrams/000077500000000000000000000000001304641216200160015ustar00rootroot00000000000000fifengine-0.4.1/doc/diagrams/classes_eventchannel.dia000066400000000000000000000071211304641216200226500ustar00rootroot00000000000000‹í]s㶆ï÷Wx”[ÆQv3ÉnÛtº™tšfzé¡%®Ì†UŠÞ{Ñß^€”l}‹"Ùò¾šIÖ’xxhòåy€Ãƒï¾ÿcœ]|NŠYšOÞö¡½‹d2ȇédô¶÷Û?ÿ|õ¾÷æ»akþñøÂ|c2³ïÞöîÊrúíõõ—/_Hö0‹Ë¼ YzOfÉõÿâ,‹¯ÑuïÝ›‹‹å ã2¶ŸÍ?˲HoïËäb“·½Ûxðû¨Èï'Ã^m5·äY^\|޳·½o>U¯Þõ|3×+ÛÙ³íiL7LvlÇþÉfn53F“Ñ»o>&e™ßÔ»5ÿði{Ûvv§£r£t²éËŸ¬>œH¡íK±H ÊC±8.Ç»»=­»ì´îŠÓºKg7Ó¼(‹8-7]Þæy–Ä“ÚkYÜ'íýÌqfN±}a±ö[ÿ”–e~`ÿ?ÅÙ¬IõÇWܱWï¨H‡û/Þ‹[ù’Ë»›?ö.J8­_\G” ΃ö°ö÷p2ŸÓYz›%Û"L'¥óù°ØüC7›_ÿ V*ÿôuÇ3¦ÞÚÎÛÈ0Jd"¿ŒîÓa2;p*®ÚìØÒÝÜìúÐQ_·kz`êÖnê•‹,~HŠùæ|º_ÌÿÀsUZ: ùí¿“A9ï·Ÿ?^\]|4‚šüÝ|Ùܲ{OŠÉOÒáÛÞ/tõ­e6hrãMóÇ銓E¡¼T$Ð"”ëño*Ì.?··ën L<eÉ“+e]IÆU_H0./5‰¤â-]'Y2¾äÅd3§è<ÌÊW¥6›¡.”Æ:¨^T°€2ppu—¤£»r·/AÌñ³î$UÂzl—¹¹%7ö²½ß8†ë9!¥í\|J³¬‹[qËCV&”ž£˜™¬3Éíõ¹îa‘™nÍIq±–ø®lü×›o¿þ°–”ýó>‹g³-âÂ\Å%4¼¹æ#§°7lî¦Ï(QÒü,÷©'î‘5Ñn2œËIýò(&Œ„zåµs¶ïþÓçdR:_"'¸ ÍmlvÕÛöã[óÝx°á`_ÒÔ!ºŸN‹d6»yüÅÌ»«Ü`}\ñæj‘ûjá©aL«xÙÆÑü„óЗ"žú¦ò2×çÍà.ÞÐGù ZÞçGé¦JX²d2ÚTÏ'D Ý|”ñh´ ýþAs.ÿ)×^«cˆ-3.o1Lòbg7ŸòM-¶Ÿ]|ŠÇiöð¶7Î'ùl #ÍÊËV&‰©7ñÞäƒiR´ó¿Ðé6{Ek»põcž ¹ÍÒÿ´½¾¦yö0΋é]:hµGë;ä´3›6ÚïÊ,6’󸚟’ìsR¦ƒ¸:2ޡֻmß·c3‘#wesOœöbéê9˜þQÑÕWÐÍ9z:Ï+ëéÜ®žx‡óìNÏs_î–Oà‡R­¢ƒV-ƒ|Jì®÷sáS&s}à5žfq™øº/¶?[ãtÁnîŠÝŠTlʨöÈÝÆ7~ÑŠê¾aá0°~#)ª}Òw6ÁoI(w–| Èý×Éô¾wƒ»ÁÝànp7¸Ü îwƒ»ÁÝànp÷w çZf€”Ÿ‚¼­§eöD‰S€w'6Aï€HÍå’Fð3Çð÷溎'C08 ƒƒÁÁà`p08 ƒ× ¸283§¶%ãún±Ú‘ù§oH\„—ö)¿²t_³¹ï@®”ž«3pBÈ{s=y–íxr †ÃáÀp`80 †ÿB —®Î‰.C©_7nBiü0Û?¢Ï‘²ê'A}÷“p¯Ù,xHù2„‡çáSÃÎ 8‚Áà@p 8‚/\u1~ye85 =σ7~l[E; ®ó–êÖe±ÑD¸[xͦÁC½Ò€MŸ?HM>PîÀà`p08 ƒƒÁÁà`p08 ¾`ðЕÁ£ºXÛNSSÅ=RxT£GJ*Þ·íÏCÎ/¹ R*¯Ð»±Ù\¸ZEO5éç>þ·ämÙá€p@8 „Âá€p@8 | Â#ç‰pI; …OR-cxHT„§ÀðN‚l¶&åÜ.¥øZ:³‚Áà@p 8‚Áà@p xàÚÁ%Ñ\žàypI¢¥çÁ'?ÍóàØ¾ ‚•®lÑkXüçxP …ƒÂAá pP8( …ƒÂAá gÔ¹+[µn¶"^Ÿ çd1 np¼Ø·‚ÈÈï3áÄ×ì¡pÉÂåÅÉØ™SøÏùý,A1: ƒƒÁÁà`p08 ƒ/38sepÁjH%‘G·N,rƒß"$BQ^áÛ5°fä­Â•eÁÅk˜ÿþÕÜñ Ðè ôz½Þ@o 7Ðè ôz½çèÍ•—,$”Qíó1ðà’)¢Õ}¦Ig¶MÕ^Ÿw®aGôˆ¿¦ô¥ÃQRbö‚Áà@p 8‚•þ»@sœ¥ÿ­Ybq¶`qáÊâš°ªo¸íTN©×Ê"¬<1IeŸÙµÉ¯H¹5’çEywS…Ó*È=¦’0*Ã}¦& ¨ èS§1knîÊ›7Œdr?Þ¸˜7~G÷üŽ9ìS|_æE~àjÏ Iä½·,ò1×öçbߨÇKð䓉¹‚­‚n‘Åo.îâÉpžK—¹¤ÞÅÓomºr}ø»lþ]±úÝ3rc‡ºÒ C!eÒë B,üØeµf¢Ö&N¤¡¬±‚²h¿,šÝìîajt"=_uJB ¡ç)¡ê e|§þž@Cåù$£Æ“XòÔ×&A«Þ!Œ¿´dôÓj«içRÚP.÷}É(”ô9’ÑgRÕ™Úõȼα?¦£ «‰vF¨æ¢î.£“éz»M9µƒÁÞDÓØŽ0µmæbÕCH_°r‡”4|N! ÏGH%õáBHçãu¨£Á^KI‚j´÷˪M D" ÝàzêOEwÖy:/øsň¨ºñ ºiT½†¹ìÛ¡ÉÐöf^Ÿ°t«Ù2»à¯©·Ñ¯>¢¶µ¨íDm'j;QÛ‰ÚNÔv¢¶µ¨íDmçWYÛùÃl–Ò#—ºƒÕv¥âü’s¢<¯¶kg§Yhð"jWÛ]xªex|]î ÒÍÔÚQNÓsŸK_ \ÊÛÓ‚×A¿aZÔÃa½®L2Î6óݱ¹Ó§oîüva]oÙªIà{vq§£ñ}V¦Ó,¤åÃIÆE‘ÙæiŸÖ¶r4ÉhUÔ]/Ç{©È<Ív½ãÝ,†i7Nœ@/ôbgqu>M9Í„§Ÿ¥à΋1ˆzµ‚+F´ÏŠCQ/ÆpÅû®h~¢„yíéW“y AB¾‚QüÌç)Þg6»øó˜§À<æ)0Oy ÌS`žó˜§À<æ)ÐrÞ¬#ð ?z×öÉŠ¿mÉ`D´híø(w ±!…³•fúuPø pP8( …ƒÂAá pP8(þµQø‡dšL†Édð°¥X»¯ÈÀIÀ¹6H̨òÊâ O!ÖSß rXwðܬXpWN¦öùì@‡N¦h¼ƒG_è£Î…•Eüåf½TËåÏܪHI;)IEJÿHl7Šd¶M£;õrE$­†1µg6žY˜J«ÑÕ(f`LCéY£w¹ÅT©Ä±¦«ã°ÛGly°Åý2ô·¯¢Åš G5GcÏ£¡ÎMzE@$cÜ.ÈhøœsD)ãéŠÞ’U»ÕíÝ6Ðî6e„k†‡L~6·´Å­½| ž¯´³¤SkIº³WõtnÏË(©…é7Õ„ê(”—ÔNkW+EhV%…œÊÐëJ»BÜÚ -°ûØÜ24’è¶û¥”P>(_[å VµK#|úy²FÕ…îÙçh˜¹ŠO zWœPV²Lô6ãÛ-dG˜Bó yg¯yêejÞþ9¡° VmÙ$ }¶¾5ž¨ÅcÛ/‚ªoÞkU{ލ_éÛänSI¢€*Ñ„¬0 ˆ’&v 3æ„0'Ô®¿® “3ö\:uQFog,LVæwýFE˜–õÙôïqZÈq:¤ÆÍtz{[¦zŒŠ@aH‰>ÌšÈU`#_7Åœ4}ŒFSVÏ%ѺËTšy]Ò®Îh—Iä„+."›JËhžJ3&O•J³ýKD.LÍåÐ|¼ HÚ.0åvÔXDX": ~†\:ð§Óû›f ÷^P„I¥ÙeD|6̶þÓx ‰°2ØW6· Õ¥&^×KÛܦY@)”nnv°îU’(´ñ½ºº×¦M2T]2Ñä]2q½Ôˆ]2™K›Lýl ël=ĪPú]X¶š ìƒB!ë›ä¨zϸùAË“,ˆ¸äSJX±FCÍMµ-ÀÙë!YtG¾„| ùò¥¯-_:Ët‰wP9¨¨¹å âwÔŸ)ëÞâ&ePQxÉâwBv{d["¢«jjxe’®ý†Êd†rÝCIHpgCj„Ô©ÑY§F¡Ë£dÁ©j"„èª&""‘çö¯vÀEÚ¤¨nÿ:/‰°I')ˆØˆp·©Ù§ýUk‹´‹·¯õëpXµf¨a8›uT=°«®Öï³ø!)Þ½©ß˜ÿFE<~÷æÿ·SÕBædfifengine-0.4.1/doc/diagrams/classes_model.dia000066400000000000000000000073461304641216200213070ustar00rootroot00000000000000‹í]Ûrã6}Ÿ¯p9o[ LÜ0ÊL*Éî&[5©¤*›g-sdn(Q¡è™ñ>ì·/@J–u¡D„lkŽªæ"¹…fÓ`³ÏAãÛï>O²‹I1OóéÛKJ‚Ë‹d:ÊoÓéøíåÿþç×úò»wo¾½MãoÌŸqO.Ì7¦sûîíå]Yξ¹ºúôéÉæq™$KïÉ<¹ú_œeñ•1ºº|÷æââé·qÛÏŸÆeY¤7÷er1'ÉÛË›xôç¸Èï§·—µÕÂn”gyqñ1ÎÞ^~õ¡z]^-†¹ZgÏØ³xœÜIügóÐyEQ—¡gI±9ìd–ÏScR>̶LƱ?±YXÍÑtüî«÷IY&ÅWõa->\·ë`•“¸§Óm_æüdõÉ`DòȾBª%˜âËór¼»›ÓºËNë®8­»t~=Ë‹²ˆÓrÛåMžgI<­½–Å}ÒÝÏ|gfŠí ‹výCZ–ùãÿgó6Ô?^qÇ^½ã"½Ýñ®Y4Œò)½-ï®?ï;]aAýb‘gLt?µ¿‡“ùû˜ÎÓ›,Ùa:-çÃrø‡~†ßü VY~õuÇSÖx¹Õ‰Läñ·‘ñ}z›ÌLÅu›†‘îfW‡Îú¦]ÛS´qS¯\dñCR,†ÿau;¿Xü‚YéÉYÈoþ“ŒÊExüòþâë‹÷&¡&¿™/›[öåªB1õIzûöò×`ýme4rëÍòÕDR„ hDôfàÛ©¥ÉÁÍÍæø…‰"žŽ³äÑ•ª‰’CP˜&ìæ1É’Éõ(/¦Û5DaUNª´²Ú2¥pND•QD¤ÂH+-|Ý%éø®lv¦ù‹2Fu$Í_Ýœ™ÛXrm/Ðû­³·YýA7Ò,káâ†Å"îxÊÊäsé9й©/“Ü^‰›–5èÎêó%îÚà¿›Ô0*ï‹dÞÞMýaCœ’ uM*Ñæ1¡&“ É!—6˜Ô"¼¦‡€Z¥At5W¥©‰Ã@P™„†‹´Å„à* „@&9çLòKRÆ“ü6É|$’³x>ß‘A˜sYˆ)ÔÍEg®<&½'Æ“¨=)%õJÂEÈŒ‘PIíµHé#È6ù…‘(R2X½¼&¢¢µWÇÀöNêã&ôó]™>L’iémüøÆ|7m9Ø÷ðà¨St?›™"d~ýøƒ¹wWù,)âÒäo®–ÛPKO-cZLÕÅÑbÂy èSÏüGSy‰?˜ëóztoåÐÇ *:Þ“géº*b²d:ÞΞO ¤›2×öú y¬Ãü—a{=¬s«0o1Lóbg×òí\l?»øOÒìáíå$ŸæóY<2°h^>Øg4¦¤©‡øÑÔˆiRtó¿ÌÓ]Ž@ëCøú‡<»ýõ&Kÿêz}Íòìa’³»tÔéˆ6Èé`F¶ˆ´ÿ=|(óØ¤œÇ£xüÕüœd“2ÅÕ™qü u>½ûpÜÎÍ"‰y(ÛGâtO®žƒå_°€²«—ègŽžÎóÚÅz:·ëïpÝë<÷åîénq*Ãuè…ƒ\vWû!⪒¹:p‹šÌ²¸L|ÝÆ—ãÏ×¹ÎA8%L VZIŸœÚ‡õÆ WrHCÂ#ãU‘+¿{xmÀ·$A$zÀÃ/|ÿD ü¼¸pà, ¢b‡=‚o3<—û-‡–óŽ &¶ÿz…ÞŽµã¼™`Oq·zí°;žppppppppppppi€ûûù<¥UO`7]ÀnéÌ{sçÔ‚ƒöª=7ŽÄ££!„Û·~s%yGÇEyw]Ó%Ä>,k%=ïdzt¤¹¹oß(’éýdqmÆêgtÏÏ:V]ñ}™ù}y¨üíö="p×·©¡ö²êûÄ$ÓÛùeÓÊä­uÎ[}Ì©[[ Ý&ð½K£Mî³2eé(-ö9¤½yŒ‹"ÿ´ËÕþõÿÇE2^Oè‡.˜ã½T¨<ÍNßñnv®Â>‡t¶ˆ½Š ´/wòé´Nƒó­ù¶üÉÅ]<½] å2¯Ôv«ŸZ@ruø»tñ]ÖøÝåÑoP_¥RØCÁE¤Œå³PDFahë…ˆ²hhÝFÖ-'¼ûòÀV•ÒîwvÐB³£ìÖ}‡iµ1Ü6E•„*é5Üãþ†* Uª$TIU’x™UR“‚Cõ°„"âöé %Œy^C¡uíˆÚU’¨À¾å$ð¾ŠÂ9ÂV=RL ´öÌ™½r=Çßã2ž'%4Ðt@ÓM4Ðt@ÓM4Ðt@ÓM4O‰ Ý›¦£ÄÒ¯¨# OLJ«ê ‘ïÞGá8UÇf{LœönêÔ3¢ cÑ’•Ø÷=0`,ÀX€±cÆ¢™±PŒÅ†&„žL×õÆ[TEŒÇj)"ÑŠ´`$Ôu¡2¿…RCx;,ƒ–FfÄF+¢$bòËs8À ÔF¸³¡4ÂBiô’K#yLi´ñ]~1 úØ•B¡ž÷£0.‚JÃ!Ô@›É÷&1µ“nÐ'¢¯\ºñk5é Ü€rÊ (7 Ü€rÊ (7 Ü€rÊ (7 ÜxJEPÚƒtCsi°`!?rCO+å#J3áY¹±3ÆFK díÄG˜RBÝ"}¥º n€;vâlØ 8(7Ôsuä ¬’ÂT^UÊr¬ÒlD’ªAD4õ,nÝŽkÛÈF+“½Åq˜44(ƒÐ— eÊ s˜@eÐÑ*=5”?™†û¾¥¶}ªo™†m ñªcZ®Æóxñ,êÇ{oäc™íÏ…×…žut[ž£\ºˆi]ÄgQúв¨&´Êš‹,Ê)ÑÌæ—W™EÍÑ+Õ"‹>Ú!‹"‹"‹6fÑè¹¶Ædî[cÊ…’’ˆyma‹ý´™)CmjÊæ_¿»ˆ7Ä·#yR"™9¢ö–¬;kÖc#j4›Ftq@tq@³éæg£¾ÇÔ7âô=˜óŽ—ÌÜø«;4“^¥-’Hiý(%µ}¸Ù>Ó¦ª •Ô^å-ÎñµQ¸Â9îÏ_ŒÚåYò1F§iˆ] vØbˆ] vØbˆ] vئ·Ñ—"RfÐg(NI$˜² 8¢,ZÏ‘õÌ ÷JÐ6E¸Ã”Ëgº×Ž™iÏԆݗ²+&úMƒ©S¦ý¦Ï†©`.ÛbŠÓïŠÉœwÅ䜰PÆ ]Q<$•ôT…{|m¨ FT(¥)“çÑë}ü )@S€¦Mš4h Р)@S€¦Mšb¦{ÀàôD4Edé ZÑÌñ¥gNxwÏ­˜ŠÆ LkÑ£v2ýRø ,¬]ºt芳¡+¤]±‡ëð½rTõ¶ø^»BÀïâû(ª=QS.¹´«ªUÂsÅÔäÓ½VÜî€ÞÚÊÂ>â(”žë6GQ(¡PB¡„¨ý´ØØ¬²N²ÕyG3®‰>…°CÛMÍ–ÂÁˆÕIÖ ºÇ×n j@Ïjo³Mçæ×7J í€¶Úh; í€¶Úh; í€¶Úh; íXc*¢`¸:¶ƒK ¡VÚŽ¥çh;š‚t3­V‰'Sh;@Y@ÛÊ”´¯LÛ¡{¤,N±•;oL#B—¶Ömj$aj¤š­C ¬© ¯{Á:EÕ–£xJQ¯½Oæû|„6™à(ÀQ€£GŽ8 pà(ÀQ€£G±ÅQpç­ -*^>“÷ ¾¡TéÇ™Ömt‚bw„;ìÖGÙ &jI$–‚šÀj P &@M¼zj‚.Ô„~jÂy«R®lII˜O‡ªzdJó÷Ð!· ) ¼²޵á'ázm ;“5ïÓyi7Ož<x ðà)ÀS€§Ož<x ðk<…ó¶ÚÂÌðˆë "‹Hú¤*»ëçû ÙPP"«÷ ½RMAî1å¡rÈ´",Ž0µ=Böåõaµ ,@X ýÓÙì…*&ç P©$‚ ”×5ÆWµª‘üwÆÜVsÓÒÌ»K”4(i Á@Iƒ’%{GË †p)ièéJÙGIcps¢¸’žëšª6‰Œ£S—7»Bl.^Ú[¢ÌA™óboR! •*T:¨tV•Ž|ÖJ§~ŸÙý°ß½©ß˜?ã"ž¼{óM6•¨žfifengine-0.4.1/doc/diagrams/classes_video.dia000066400000000000000000000067611304641216200213150ustar00rootroot00000000000000‹í]]sâF}Ÿ_A‘WÒVI-O*IídS5[Ie7Ï.2ÖF Vˆ™xö·oKc¡V3f|¨òxÀW:ºBººç~õwßÿ5‹{ŸÂt%ó»>%N¿ÎÇÉ$šOïúüë÷ªÿýûwßM¢àVÿLÓ`ÖÓ[Ì—ù»»þc–-non>þLâ§e%)‰£Y†7ÿ â8¸ÑB7ý÷ïz½—;˜Y¶þ4Ȳ4­²°7fá]Œÿœ¦Éj>é—Rk¹q'iïSßõ¿y(^ý›õnn*û9²ïE0 GiüY¿kG¿|¿Í®aº»ÛÙ"YFZ${Zì‰Ôì'ÿ÷…ÌZj©…æÓ÷ß| ³,L¿)kýáv‡¶(›é4šïcéó—'ƒÉýüåR%¹Ã<¾9/çÃ. _.½,\´¼_$i–Q¶9J’8 æ%j–®Âö8ËqëKì˜Z´ýÞ¢,KNÿC/›(P~ü|Ç{÷NÓhrüæ­HÔìås4Éïÿ:vºœòÅ|å0ΘhK¼§‹á}Š–Ñ(iÍ3ãëa³û§nv¿û V~»¹áSî­ö12Q¡ åù‘é*š„Ë—bU¦fOk±›Sg}W®é‰)?Úy¨qð¦ëÝÿ¸}œ÷Ö_ðÚ*½8 Éèßá8[«÷Ç?>ö¾íýËeëšhÇ$šÜõuªçfW½'m÷NÎ"y¾‚´VÊ“p.=º«÷¾e©ƒvQR­D0ŸÆáÖâ—HLi¤¡G[Ná´Ûÿú,Ýk9¼ÃùtßjnÏ # ¦Óª[ÞéR¨Põojˆ²Óòd=Dq|¡ÊòÏCÈ¿2»:ÌMúâû‡dßçŸõ‚Y?ÝõgÉŠç¯æïaü)Ì¢qPœÃo¨õá¨Ã‡cvnÖFäÌCÙ?££xq÷œt¢œêKts^¹r³^¶záÄ¥^ç¶à^^À N¥[¥¾ÛRÉ­_wsœn=™›¨Ù"²ÐÖc|³ÿe5 Qrív䛚’o‡xÌPF<‡*‹ì[C± ”+©jÚ-”ÏT_¶…nF¿»Q³ ÿVZKO¼¸¼é•sñ¿|øÛííÏ«H{ésprprprprprprprprprprprpò·ÈÉ5ç âè¿…"/È9]“sfJÎ%¡¢HNsÊ-sA41Ö0\à %ñ×,Ùmé€%iöx_hq¾n5r”zBˆKªšËå#ýýüÝ4„óÕìPYLõoΑ¿Qƒc VY’&+›7ËÚ_\YsŸÝj{Ç‚¯1´1Næs}ÃæÆrïŒlþÒ{ 擵ۜ%EUNoû×Ü3¹9½-]oKk·ÝT"íy“›šJŸ(ÁÕ€9DJ‹¦Ò'ž¿†Ò¼ÔFé7ŒX]š«Ö¬nˆQQñ®ÇÎQJ’ͨuŽm¬U’-ˆwí-8?Ì£Yqk€fƒfƒfƒfƒfƒfƒfƒfƒfƒfƒfƒf£ó¦Úyãóm¦™)åEm·ãØl¾Q„²|¥Fò¤Ã‡”îäÈš ßj N­’GDáò˜ VÇ+Ôi,(‰ð}´â çkmÅá­8Â^+ÎI#ê]¥”¸N‰TQ(YØ÷Ú h~èŽl.g†ñ„ñüš§¬nK/ÐǨŒ‡¡çý×y·ŸK˜ÍIèF”0T9'ÊÍ“ÒFÊêtcíšd|´e¤•l×ßʸÔvd~LÆH! „4Ò@H! „4Ò@H! „4Ò@¨¶Ü’p¿.¹'Œ¶Ž6$áB•0R“pA8Íßi2n›„j×p:ïÂ8¼ÂyB á á á á á á á á á á á á¨Æ<\HDÍ—÷‰ïäÅ‚.¡í‹"qr_³oV°pÏóÝ!wˆcŽÜ¨š¨VÉnDó°Âñ¥ZÑΫŠVÛÎRUQ{΀¢¢«)*REEþ凣SãUµàyÈKâëß6í§K˜*‘”þ—q_Û®UžÝ¸fJ6«/Ò>Ö×9*ý7m ÖDXaM„5ÖDXaM„5ÖDXaM„5Q]T²qãeU¹ §„1iµµ¼X¬LãPÍÄ©fæžËš‘ »D¼ýšÑp®˜|a øµORÏÙw8Ùtû€‡ƒ‡ƒ‡ƒ‡ƒ‡ƒ‡ƒ‡ƒ‡ƒ‡ƒ‡ƒ‡ƒ‡¿1þ{˜×…ËC…E¼ƒE’KZrdáYQ¤d1Sý刢‚$ ÛcÞëX/Êü¢3©Éü¡æ’žÉ¨ëžUÔž*\ äç…Ko¢ªˆ²îfuYVtÌ€Šë1 Ïƒ2½í LU"_§}ž€y†(l(l(lèå‡eÖ&ƒÌWöÑfL*àÎeÛ•jšy ùdá‰)4d”p¡ßûD*i´FÎé…~ºP²YNÈ_U×ùt<¿½-–Øý˜“0ERI!$…BRI!$…BRI!$…zcI¡–ËdÕ6œ›¯ÿãÆòbIJ|«5šˆz%erÈ4wòFN$“Vcš5è«ä„*E»•TÄ“ž4;¿¯°Ó|Ê´èüZN¢´Œõ»>3á|²Ü÷tgú6Œ¶[Önês×)ÕDñ#‡X 4[ÅY´ˆ£q”=]0HÓäó!¤c×K+ é4 §Us~ê†9¥àäQ\sö·ÙDn÷.\@¯ôbWqYÏ\ˆs2Ô«nÌ/‘º0^ßëÅCÜn#Kä”@y'‹þåø¥“d¹“¥ ›¤-a×>C“#œ@rÉ $'œ@rÉ $'œ@rÉ Ä=ŸP] Ä-)0·;בk$&y>×+ÞSÙ%âî)yDTWÑS¢Jœ!X ²d(¹Æ0ܯ´äÚ3(¹¦Ô^Íõ‰¯ßEåµ£ïpE„åÊk¸ž£Üþ# 7ÈÔ!ŽþÀjš·NI#Qx‚JÏHô­¤zÛQdz‘¨C¦Ðk½€èÍôJ‡ÉùRþëhwÀô£¼ýò 9'-aÑHŽSpN·àœŒ(»Uqµ:Õ4‘{n£…Uš‹åÔ_!ë„·o Þ¼%ÔŽ1oÉd­¥Ýн@Y3^l‰{DäÏo›’Æà¥“ ‡BêË0¹´Z g¨X³þ}åTf:³«_Z©æü[š|ŠÐ¿9”È¡D%r(‘C‰JäP"‡9”È¡Dýû;¹ ÖçÂ/2Â& w4ŒW,u$]MÅsX?‡6“‡•; 'cÜ;GŽoÛ/;ïÔž$j9@pÙ d'¸ªì£¦'.1p˜/y!8ñä€IâZtŒrCÊ¡dÄ)–½PV“¦j5ÉN(Âh…5]{ÓþóhV8áHO =ôÒHO =ôÒHO =ôÒo4=Q˾×K‚HÅÕ€1Âlòo ÃKª)8-‡ 3A„]n¬]î)*E‚×¾ÈO±¾(8(8(8(8(8(8(8(8(8(8(8(8(x•‚Ëàj@Q–óß2ñ öí»F‰c;n¢V³ü7u*òµï®FàÞàÞàÞàÞàÞàÞàÞàÞàÞàÞàÞàÞ`d€=3^`WPÂÊŠ6¢-µkFÅ"¤FʫчIÎ1[ÓÉf-zµêÕ‹2—7¸.pw[Ïêp* æÍcÞüi¹aÜÞB™§­žw…V:‚¸y5Ð+5|ŒøGå¶EE>LLß[5}âKš>Õ¡éã°{yê¥ðöŠ)‰\^Èæñ&úDžðôÔŽ¬¬Ýµ[;z–µ“ö¬Ý‰á3Æ ùÄL©œ«¹6—EÆ‘ÚÌ ©$ÂsD>ºÞîŒüõ õ¡sí—¶ÄøŒŸÁôŒŸÁøŒŸ¹ªñ3€Ê/µ’7^Iˆ²œ¤ñÓdÍ·#\IªÙ” Tÿjd·@fı «U²^”zÄsuLTÊ …ÎÄw¨ÂZBp—𴃻w +/^©»ÄM†õU·u/0«/%D)‘Âí xíáM%$üÉÍ%Æ u©(œI•ÍÆ…N”lÒ¾¹òÊ[>üòáo··?¯¢±¾Â‹æ…I€Ö´. u­ h]@ëZк€Ö´. u­ h]ØÏ^¯-D=™ò>‘Êæ }ü ÎP¿9jÎ’cV3‡ì@°Œ.ÈV¢×^äò8”ǽ fRiÍäÔ4û[¾ƒ§0}ÿ®|£¦i0{ÿîÿê?dY…pfifengine-0.4.1/doc/diagrams/concepts_cam_correction_1.dia000066400000000000000000000046671304641216200236020ustar00rootroot00000000000000‹í]KoãȾϯ4W¹ÝïÇjíÅæä`d$¹”DËÌÒ¤BÑöø²¿=ÕMÚz±-‰Ts­‰ÌK.vu5ë«úºú1?þôí1<ÇÅ2ɳ›!Ax8ˆ³i>K²ùÍð¿þùJºýòã,‰~€_ó"zÀÙÒþëføP–‹®¯_^^PúºŒÊ¼@iò„–ñõïQšF× t=¼ý2¬70‹ÊÈ~W•e‘LžÊxEñÍpM›ùS6VRµÜ4Oóbð¥7ï÷î3¼®›¹Þh烶Ñ<žqô›¿i cÚ4½ˆ‹ífù2‘òu±#âiÇþ¾&SK-A(›ß~ý­ºT±j«©£^%åcTÌ“lWŒMZ EšR ƒ!Œ6XqEÞÆäxu“~Õ¥ýª+úU—,ïyQQRäyGY¥õ>J—q{EËi”‚}dW3ÌOd@õõ;ÜŽ…î¼Hf#wCÂÓÊK2+î¾}4\Y°j4¦ŒRÞ~+}¯½é{N–É$›,L²²³?¼5ÿzšæ·ß  ñ«Ç;zLÕš7‡Ìt,bq|™?%³x¹Ç7e<-=Ôb×ûF}[îЩ¾ÚÊèNE½ÆEÝüŸV¹|P¿`H>ÅÓ[†sä“ÿÄÓ²6ïïe”Í¢b6¸ü-O_çy6\Ñ 'Éìfø Þ¢m£ A‘;c´ÈßÉ É å#¢–ë ðŸšÉd[K¶DÙ<ß4 ¥©tÌ Ò’©£H NÛi^ÀÈÜ9sZ¹+JâÚPÛKI>”¥ ÙÓ*F zàl%mGRP|·‰7k[Â\4Ý}—«HŠÞü¨vÚ–ùË]Ç= ÿ5’ë†:ŠtaÈ8'bˆ“  ºbˆ0Ƭ&F(3ˆ!Úú$%T„•×È]Q¦¨EÙ¤XX*²GôŠ"#±’N60ªîï­£‡÷s—zrsÚÕÍ™ •|áUR¦º9h¢ÂG I*4C”fÚt… &!½Ükc ¤K3¶“ûD¡ÿ´Î2ûatœ©Z^RǧHcÅ:ç ‰°õ ‚h`@aƒ·UD(QcPLÅàÂ0Ej§xšgÙ]œÍögŸ™¢ÄöJ´LeÙÓãt±Ý•¦YT@·àã¬DJt…Ã\¾\öTêÊ ì Ö5;®»'Úvê3¸ƒ8A” „Ój$$ èƒÁÒjâZº(¡9QŠ£2|”h6sWT»lê:&[çÈ^}ã×ø[¹æ¤ö Ù9TˆšX@|ç«â}J&Þ)ŒÏ˜‰z:Aƒ·}¥–=õ«-Cp«r[ ÿô¬|POópó¬lÒd¿ÜGIú вåp°,_mábAõè_âô9.“i´îÞÇ÷à!Næ}X«P#f6?Ýtn:âQÎØFÝ6{õ2ØõiZEQšÌ³Ç¸ù•Æ%j2{ –Æ2âq¨xv]򮁻+¬—ؤN·8q´O ®UX*ôá#Œ´X¿UKlUlû Nÿ¾§ÀÁÉë—àt†ÁIw NÊ: ¥ Q”8½k¢ˆa Na˜‚;ÍFœqú×%6ŽM^g¼Ä¦3ŒM¦klº"H a:"B]OzWÅݪÎþ`ܺ¢@ ŸCtŠÓø9*á i”Å`¬Ò;±êê—Išü÷)î#f‘ÍB; ³üNz ZŸ9hý\L›–À;o,¡@¬Y5ù¼NÝ> m51¥øØ•'1sUKBtà2¥×ÎQ˜~Ö%2ÖºL9}*žã»Y²„!˜ÆþŶ+Œ¨ÖÔ`E´Œ0Ò–ÕZÚ;Mr%7kصXÎ鈄EXG}Ó„ùƒ£2†T­Yu¹uQäöå\’kßÉÕ룗Üz†Òyç dmªµ±Ð1ëM“@Â%WŽ –Êå0s•Ô"/Ýtàÿ4Va$·Š2x°ò9ç%XáD€u¯¬Êjä°;Ìš+SQq©Ç æ\»í Z„žxÍl%Õvtè =°'_” &˜RΤÔç< ðlª!¼ûAˆì³<ÈMm­6Õ`ÅôØ I•Öö²ì¥^+Ž7 óæ¥íwWwÛTÓÍÅVâëâ÷.“ûCñ£c_S5Zî°Ÿ·Ÿ À×륎2wÛ´«ŸÞ åî ¥­FODR;ïS†Èy% Ѝ5M¶ôÓ:u$µLÒòBPû"¨^ǼÔÏLP?8°Õyß$w›Á%0$tö§›‘Aœ 6TD»’‡=Éâ5±aoL}²ÑX*»gƒ¾¨½ºÅe›h¯®:À;”¿¿·“, $ïâ€óg$æ*:Çóg>z¡ºve\§V¦<¹ü®‰R àÀWÇ1?z1¹"<'ñ‹½0ãÂ4úb^½0ÏÌ4|E†Î» !÷J{¦En'Ö4ƒ+&­& Ajl5 I\öœ…>»ã³3󺔺—¶ê xç¥5M‘‡ÈÎ{ë€ê2 žª-' ŠH ¿ÜžYM”05Í Z1ÆC#Ògg ž~AäÉ)» Rö„HÚyãp%B(RÝ6SvLÈnYä HFôØ*æJØY¯Q2ø!xŸ™GLÇ/€ì>LѾ0uŠ ‰¸àöþC$zôÎÞ$œ[+©…­oI·ºE‘Á1å3óˆºÕSý&9vÂ$ÇÛÒVÆÆ´¸N‰î»Šp§ÇÍœŽºEr­¼Â´ËÞÂ'S’I—1gÀ9§´ƒþæ¢ôQ7fB)+a²_˜"l…•½I쀖½üø¸+w›à{dùè‹p‹È Õ!EŽ&.Âõ–’÷“÷ÜY»ŽÉöd'Á ø‚&Ö4_ß- ‚ Ž A#ˆ€”ÉÀZZ‚/’ èµ·TUŠ%†ðý4ÔkÙÂ$ïïB¦õwŒ@~"Jp†QµÉ¸JÌ­£{3™Í‚K¾È0ªú nž&lo%ûK€ˆìHsº­°óM—ÐwÉ‚$ÅI0¾ ¤´‘^Ü}Ô1Q)’Ú4ˆ©eo” Ãz€ ßÞfTAÊP„@ãd>€†;h£ˆ¾$Áó ˆ´!F ÚåËïg’«oÞ«3Õ?Ý«pûeãÿ]¸ýò?a0MùÀififengine-0.4.1/doc/diagrams/concepts_cam_correction_2.dia000066400000000000000000000060711304641216200235720ustar00rootroot00000000000000‹í][oÛF~÷¯”Wy<÷KU§hXì ´ÀvŸ Zbd64å¥hÇîÃþö=gHG¶DÚ ÉÑ¥¥€´¡2šgøÛÌ™á?=Þ¦£‡8_%ËìrÌâl¶œ'ÙârüŸßþ~nÇ?}<ûqžD?ÀŸEÝŽàÙ ¯.Ç7Eq÷ÃÅÅׯ_Iú´ŠŠeNÒ䞬â‹ÿEi]@£‹ñdzÑèeó¨ˆð»êÛ¨(òäú¾ˆGYt_ޝ£Ù—E¾¼Ïæã²UÕn¶L—ùè!J/Ç>ûÏø¢êæâU?oô}-âë<޾4wMáã\›®ïâ|³ÛÛ»å*&ÅÓÝV“†~ð¿/ÚT­VÐ([|üð3ýPÞRõź¯ºm)n£|‘dÛ806i9œXÎ9 †rÖQ# {“Þ/\º_¸|¿pÉêên™y”Û×ËeGY‰ú9JWq{ Õ,JcoÉÕAŒÏIQ,{ üú›º}¯ê.òdþ¶æ¾jÑÐË×d^Ü\=¾5\” ðÃ¥\p.Û`‰÷´7¼‡d•\§q„IVtæÃs÷Oýt¿ù½‰_ÿ¼#cÊÞ}ÈÜÆ*VßïC÷É<^½CÅ×mzº©š]¼7ê›ív˜ò« î!Òè)Ϋî?­}ù¨zÀà|òûgç°¼þ=ž•xÿ.¢låóÑùè×eú´XfãuxÁI2¿ÿB_ѦPÐ!˜È­1º[®‰D 3\M4a–²Mé·íKÊõõ&H¢DÙ"K sMsÚ"’ó?†(§'\ÆŒk‡|så¥i#ãvK! ·BCK®¬y»)ܾþþ)´}«)ˆnŒ‘zÂ4±­GwŸzl´FK jƦp§nÑá ¾#˜{4}œXQ™>ªÑô‰À‡VT`ÚxgÍᥳææDõ0¹_gýco}Š“+ÖÀŠøø Oým­ÈnéF…$ {¤)7D8¸Vxó‰Ù¯³¡bm¿YFK«uŠVËõñò<¨Ð„·Z’®¬–€<—{duVëoi2ûâ‡îæªÆ^}Z¦ó?µÍjâè°br‚6KÒ¦vý@y4Ž ;±["ah%ÌTà£ñýïhÄNaµ÷×2ÒŠç£Ù`½6¯[ÏÖÁz¢õêþºC†5ËÞ¦ØÀÖkÄÑzá;L ^ãù§`½þ™Í–9 u6Ä^‡²^Ml¬×A­WyFOqþñ¬¼€?‹<ºýxöpB°a½¤fifengine-0.4.1/doc/diagrams/concepts_engine_high_level.odp000066400000000000000000001772451304641216200240560ustar00rootroot00000000000000PKZ 973&¬¨//mimetypeapplication/vnd.oasis.opendocument.presentationPKZ 97Configurations2/statusbar/PKZ 97'Configurations2/accelerator/current.xmlPKPKZ 97Configurations2/floater/PKZ 97Configurations2/popupmenu/PKZ 97Configurations2/progressbar/PKZ 97Configurations2/menubar/PKZ 97Configurations2/toolbar/PKZ 97Configurations2/images/Bitmaps/PKZ 97:Š ¤Ã¤Ã-Pictures/100002010000020000000280BD0BB934.png‰PNG  IHDR€êÈÀ"bKGDÿÿÿ ½§“ pHYsHHFÉk>€IDATxÚìÝwX•é7ðï©ôÞ«(½© QE± öé“Lf6Ù$oÊfóîl6™l’k³)“™ŒSœ±bWT@¬i‚ A”Þû9pÚûǬ¼cl”sÎ}Êïs]{]yžçþÞÏ*çwžç.…B¡!„Bô —uB!„¨„Bˆ¢€BÑCTB!zˆ B!DQ@!„è!*!„=D!„¢‡¨ „Bô„Bˆ¢€BÑCTB!zˆ B!DQ@!„è!*!„=D!„¢‡¨ „Bô„Bˆ¢€BÑCTB!zˆ B!DQ@!„è!*!„=D!„¢‡¨ „Bô„Bˆ¢€BÑCTB!zˆ B!DQ@!„è!*!„=D!„¢‡¨ Ì) ÈårÈd²§þO.—ãÚµk|î1 …‚u!DëðY úG¡PàÑ£GÇÉ'ÐÐГ§>Ì9nݺ…yóæÁØØø©Ÿ+ Œã»ßý.ŒŒŒÀãñàææ###ÖÝ$„ÆQÐ×'¢bßþ†úôiüðCXYY±ŽôR …{öìÁ¹sçð‹_ü!!!¬#BˆZQ@fåèÑ£¨­­EZZ‚‚‚ÀãñXGš2¹\Ž8pãããxã7`iiÉ:!„¨-Df¬»»X¹r%,X UþÀårammíÛ·£µµ555¬#BˆÚÐ2#ýýýؽ{7RRRÄ:άŒŒ`÷î݈¥1„½@OÈ´õõõáŸÿùŸÑß߯þ`jjŠ… â‡?ü!ÊÊÊXÇ!„•£€L[nn.à_ÿõ__xœB¡€D"ÁÄÄärùŒÛ“ÉdH$Éd*íWBBÞ|óM|üñÇ*m‡B4dZd2†‡‡±cǘšš¾ðØññqœ>}¯¿þ:fÜæÍ›7ñÎ;ïàêÕ«*ïßš5kàææ†®®.•·E!,Q@¦¥½½µµµX¾|ùK544„‹‹ .]º„¡¡¡·ikk‹üü|tvvª¼666ÀùóçUÞ!„°D»’™ê?ÆÆÆàr¹“Ç755A*•bll NNN°··‡D"™üs>Ÿ´¶¶bxxcccO\S*•âÁƒ„¥¥%ÜÜÜÐßß¾¾> ¿¿ÞÞÞèèèˆÅbMkßKÑuTiÉÉÉAÿ´Ï“ËåÈÊÊBMM Q]]’’üò—¿DMM Μ9ƒÍ›7ã“O>Á~ô#ØØØà³Ï>Ê+011áááÉ""77ýýý@aa!¾ûÝ¼™™™Ø¾};ÚÛÛáããƒÜÜ\|ï{ßCAA<<<`nn>¥¬999ظq#ŒYßrBQ z@¦eÁ‚011™Ö9\.ÝÝÝøä“OŒ¨¨(lܸ]]]øä“O`ccƒõë×ÃÛÛMMM¸qãþþ÷¿ÃÎÎ)))ˆ‰‰©©)8º»»ñå—_âÊ•+¸wïÆÇÇÑÛÛ CCCŒŽŽ"##ï¿ÿ>ÆÇÇQVV†ÖÖVlÚ´iZ™ ,X@þ„FOÈ´899A(Nû¼ááa´´´L´µµ…··7=zwwwœ?~ògb±7nÜÀ¦M›|S@ðù|p8tuuA¡Pàƒ>€½½=€o¾±ïÞ½B¡æææ011Á¦M›ÐÚÚŠ>ø!!!ø¿ÿ÷ÿÂßßZý$„]FOÈ´ÁÂÂmmmS>G¡PÀÚÚ>>>“#ùÇÆÆ011åË—cß¾}8uê<=='·é7oŠŠŠÐÓÓƒ±±1ˆÅb( ØÛÛcll GEww7ª««QVV™LöÄ{ûÚÚZ¼úê«øüóÏQZZгgÏN)«T*ÅÀÀ\\\XßjBQ)*È´ØØØÀÛÛ{J¨ãã㨭­—ËÅðð0þùŸÿ½½½ÈÌÌDnn.¢££±mÛ6899¡³³/^„¿¿?nß¾5kÖøf­cÇŽÁÓÓ|>vvvxã7™™‰þð‡¸|ù2¬¬¬ÐÝÝ …B»wïn߾ÇcddË–-C\\Ü”ú×ÔÔ„»wïbÙ²e¬o5!„¨-L¦­  ?ûÙÏð›ßüæ…”2™ ƒƒƒ‚¥¥%,,,000€ññq˜˜˜ÀÐÐb±]]]011‡ÃÁØØìíí1::о¾>˜˜˜€ÏçÃÐÐ&&&Ëåèìì„H$‚LMMÑÓÓ‘Hkkk˜ššbpp£££000‡ÃµµõKg.tttà½÷ÞCpp0Þÿ}Ö·™BTŠ 2#ÇŽÃÅ‹ñÇ?þ¬ã(Åþýûqýúu|øá‡044d‡BTŠ 2# …/^DKK ¶mÛ6£š¤¨¨·nÝÂŽ;¦=ËB´ 3Âáp°|ùr”••áã?†X,fiÆ®]»†ÿüÏÿĪU«èߢ7è ™•ÁÁA\»v ÷îÝCtt´Vm¥ÛÞÞŽœœH$¬^½àñx¬cBˆZÐ2+HNN†››~ñ‹_àòåË3Z)PD"êëëñ«_ý ÕÕÕØ¹s'œéߢWè Q ™L†žž>| Bjj*Á”÷ P%…B‡ƒëׯãÚµkèèèÀöíÛáééIþ!z‰ ¢t÷ïßGaa!jjj––7778;;ÃÈÈHíY =z„ÑÑQ=zÆÆÆG\\œF&„ D%¤R)zzzpäÈ<|øîîî011AjjêKø*›B¡€B¡€\.ÇÙ³gÑÑÑÖÖVH¥RlÙ²^^^´Æ?!„€ ¢r¹………èééAee%úúú ðÖ[oÇãA ÀÝÝ}FS  ÚÛÛ188äääàúõë077Ghh(¬¬¬°xñbXYY±¾ „¢Q¨ j£P(000‘H„Ï?ÿ###àóù(++CLL œœœ —ËŸx2ðøýã=¾ýçr¹§N‚¿¿?ªªªŒW^yžžž077‡@ `ÝmBÑHTæjkkÑÐЀ±±1ìß¿o¾ù&x<z{{qüøqØÚÚbÉ’%°±±´¶¶"//o¼ñ$ ÌÍÍ‹ììltvvâ7Þ`Ý%BÑx´0aÎÏÏ~~~¸téÒÒÒ°zõjp8´µµ¡²²~ø!„B!¸Üof­öõõ¡¯¯¾¾¾ððð˜¼Nhh(¾øâ ´¶¶Òn~„ò´Ñ/^Dttôä£þÞÞ^XYYÁÐÐpòì­­accƒ7n>þÔÏŒŒŒÒÒRH$Ö]#„DanddÅÅÅX»víäŸ ÂÐÐð¹Ëôr8ØÙÙ¡««ë™?OLL„½½=öìÙú{„¢‘¨ ̉Åb <ñþÿòåËpwwîh~‡ƒõë×ãСCϽnDDzzzðèÑ#Ö]$„Ca.33ëÖ­{â}ÿ?.ô,<2™ì¹?wqqÁæÍ›ññÇ?óU!„è3*síííO þ›*XZZâÞ½{Ï=fîܹpuuEAAënBˆF¡€0UZZ +++Lþ™\.Çàà ^x®••ÌÍÍ_Xðx<ÄÆÆ¢¸¸ccc¬»K!ƒ ÂT?„B!øüÿ¿(eOOª««‘œœüÒóù|þ _À‚ ‡/¿üò¥ÇBˆ¾ €03::Šüü|lÞ¼ù‰?ÿö@/³nÝ:”””<µÀ?ŠŒŒD{{;Yw›B4„™L†¡¡!X[[ÏøÖÖÖ‹Å/}¼odd„wÞy™™™hmmeÝuBaŽ ÂLss3\\\žXçºx<6n܈¼ôX8::¢¼¼œu× !„9*3ÇGRRÒïÿàÒ¥KX²dÉ” kkkô÷÷c*;[¿úê«èììD^^ëîBST&Àãñ`iiùÔϪ««4åkùûûÃÖÖ………/=–Ïç#<<ׯ_§Y„½FaâÆ044„§§ç¬¯ÅápÀãñ¦üŠ˜˜|öÙgËå¬o!„0AQ;…B¶¶6Ì›7Oi×ôðð@GGÇ”?ÐÃÂÂÐÛÛ‹û÷ï³¾„ÂDíFGGqíÚ5¤¤¤<õ³êêjØÙÙÁÕÕuZ×\µj®_¿Ž¡¡¡)obb‚ï|ç;8pàÚÛÛYßBQ;*ˆFyøð!LMMabb2­ó¸\.<<<^¸*à?rvv†‹‹ ÊÊÊXw›BÔŽ ¢v999X¼x1 ”vM‡ÄÄDœ={vZç½úê«hkk£Y„½CQ»ÚÚZÌ;wJ+ýM‡ º»»§|ÎãY7nÜ Y„½BQ«{÷îÇãÁÏÏï™?‹ÅÓ~üÿ˜››LLLPSS3­óÂÂÂŽO?ý”õí!„µ¡€¨UWW8,,,žúY__JKK±nݺ_ß××>œö¦?¡¡¡žÖBÑfTµƒ™™Ù3&—Ë111##£_?11Öyæææxã7°oß>tuu±¾M„¢rTµ‰DÈÎÎÆÖ­[YGy&gggxxx ¸¸˜uBQ9*ˆÚ @(ÂØØXem 11§NšÑù;wîÄàà rrr¦´·!„h+*ˆÚ:t«V­‚¡¡á3^]]€€€Yí|3°©©iFç lÙ².\À£GXß2BQ*ˆÚŒC(>÷ç—.]B\\ܬ§úûûC(âÖ­[3:_(bÓ¦MÈÎÎÆðð0Ó{F!ªBQ‹îîn(Ši/ñ;&&&àñxèëë›ñ5¢¢¢  ‘­ÎÛD!jCQ‹ÆÆFÈårÌ™3G-íY[[cpppV×HNNF{{;êëëÕ’™BÔ‰ ¢rr¹·oßFhhèKUÖê€ééé8þü´§~›££#’’’ðùçŸÓ€@BˆÎ¡€¨ÜÄÄ*++÷ÜcJKKacc///¥´i`` ‹i- ü,^^^˜?>²³³§¼Õ0!„h*ˆÊÉåò—~³ïëëƒÁ  N‡P(Drr2233gu@€M›6!//¶ &„è*ˆÊ?~ 055Uk»<oÚK?‹P(ĶmÛpúôi ©µ„¢*T•kkkƒÚÛuwwŸl¶ÂÃÃÁãñpñâEµ÷ƒBT ¢RµµµGDDÄ €½½½RÛvvv‡ÃÁƒ”r½uëÖáÑ£G¨­­UÕí"„µ¡€¨Ôèè(ärù 7øéïïGqq1Ö¬Y£ôö£££Q]]­”WöööX¶löîÝK³!Z ¢Rpqqyéq …bÖK?Kxx8nß¾‰‰ ¥\Ï××óçÏÇ™3ghV!D«Q@TfbbçÎæM›˜eàp8àñxH$J¹ž@ ÀºuëpñâEtvv2ë!„ÌDeZ[[akk«´©}3allŒ+VàðáÃJ»¦víÚ…ãÇc``€Yß!d6¨ *súôiÄÆÆ¾tûß«W¯"** |>_%9,,,ÐÛÛ«Ôk>^Õ°¸¸X%™ !DÕ¨ *£P(¦´´oee%‚‚‚”¶ ð?²¶¶†B¡˜Õ²Àϲyóf\¾|™v $„h%*ˆJ´··cll ¬£ 00‰·oßVêuíìì‚‹/Ò€@BˆÖ¡€¨DWWÄb1œYGQ‡ƒôôtܽ{¥¥¥¬ãBÈ´P@”N.—£°°Ë—/é±_¨êýÿcË—/Gqq±RÖø6‡•+Wâúõë´L0!D«P@”N&“¡¶¶ÁÁÁ/=öÚµk°°°Pù«‚   Ô××C*•*ýÚ¡¡¡ðóóÃ矮Ò>Bˆ2Q@”N,C(Nia‘H.—«²€q¹\@$©äú‹-¥3 „U¡€(ÝÑ£G±xñbXXX°Ž2ÉÄĉ‰‰³Þøy¬­­±uëV|þùç*+2!D™¨ J744¤QþaddDe×wpp@hh(Μ9ú«„òRT¥ºwïzzz°dÉÖQžâèè©Tª²Áz‘‘‘¨­­E?ëîBÈ Q@”J"‘@.—OiT¿X,Fyy9’’’Ô’Íßß"‘ *kÃÛÛ©©©øä“O”¶ÿ!„¨D©îÝ»7åýhmm…———Úò ¡¡A¥Ûù>^ÕðæÍ›jë!„LDid2._¾Œ•+W²Žò\+W®D~~¾J¿ …B|ç;ßAVV–JŸ6BÈlP@”¦®®.../ÝüGXYY! %%%*}Ú@!3EQš‚‚ht`ff†ÈÈHdgg«¼­””TUU¡³³“u· !ä)Tfª««áçç§¶6¹\.ðàÁ•·ebb‚7Þxû÷ïG__ŸÚúH!SAQŠÖÖVttt &&fÊç\ºt ÑÑÑj- <<CCChnnVy[àp8¨¬¬Tk !äe¨ J1<< ‘HÖQ^ÊÊÊ PK{o½õîܹƒŠŠ Ö]'„ITYS(8}ú46mÚÄ:Ê”mÚ´ çÎSúî€Ïbff†ÐÐP\¼xQ%›BÈLP@fM¡P µµnnn¬£L™››ÚÚÚÔ6B?66>>>ÈÌ̤Y„@™µþþ~˜˜˜@ Lù±X .—ËlƟχ™™z{{ÕÒ‡ÃABBnÞ¼‰îîn&}&„o£€ÌÚéÓ§kkë)ŸSVV###øûû3Élnnލ¨(œ8qBmmZXX`ñâÅ8~ü8“>BÈ·Q@fE&“all ¶¶¶Ó:O.—³ŽˆÅbµ¾—‹‹ƒ\.§„æ¨ ³ÒÜÜŒ‡"!!u”i‹Eww7êëëÕÖ¦……Ö­[‡}ûöabb‚õ- „è1*ȬÈår­Ô¦P(ÔžßÑщ‰‰8~ü8íHa† 2+¥¥¥ÓZüç1¹\®ö€ž%66eeej-¸\.RSSQ]]­Ö§„òmTS((//GDDĴΉD¸té6oÞ̺ ˆˆˆ@ee¥ÚÇ$p8¼ú꫸páí@a‚ 2c•••˜3g¬¬¬¦užL&ÃÀÀÀ´ª‚¹¹9¼¼¼P^^®ö¶}}}áì쬖‰!äQ@fìöíÛpqq‘‘ë(3f``€9sæ ¦¦†Iû+W®D]]Z[[Yß Bˆž¡€Ì˜L&ŸÏgcÖø|>³Œfffˆ‰‰ÁåË—i™`BˆZQ@f¤­­ HJJbeÖÐÒÒ¢–ÝŸ%-- ccc8{ö,ë[AÑ#T™˜˜Àøø8LMM§}îåË—¡PȺccc( 3ˆ†Z&˜¢6Tyðà<<>}ôë[AÑšó˜h•Ó§OcíÚµ¬c(µµ5FFF0>>Î,C@@LMMQVVÆúvBôdÚZZZ`iiÉl'?U°··Ç¢E‹••Å,ƒ‘‘BBBPVVF+BTŽ 2mùùùðôô„ ë(Jehhˆ‘‘¦1gÎ|ýõ׬o!DÇQ@Ôj``\.W#úG®®®‚X,fš#22ÍÍÍ´6!D¥¨ Ó200€¦¦&ÄÆÆÎèü[·nËåÂÓÓ“uWž‰––´µµ1Íaoo;wâóÏ?ÇÐÐëÛBÑQTiAooïŒgh:___Ü»wu xyyÁ•••¬£BtdZFFF`bbÂ:†Ê$''#77—u p8¤¥¥!''‡ù+ Bˆn¢€LËþýû±uëVÖ1ô¼y󘘈ƒÒ¬BˆÒQ@¦L$A*•ÂÜÜ|Æ×ƒ™™ë®<—½½=|||põêUÖQ|3+ ®®<`…¢c¨ SvþüyxyyÁÕÕuFç‹D"ääähô@+++<|øu—ËÅ;#S§NѬBˆRQ@¦lbbbV»ÿ) LLLÀÐÐuW^hÉ’%hllDOOë(€9sæÀÎÎÅÅŬ£BtdJÆÇÇÑÑÑÖQTÎÙÙCCCeeÒ¦M›PTT„¾¾>ÖQ!:‚ 2%}}}¸ÿ>¢¢¢XGQ KKK °Ž1ÉÄÄ«W¯ÆéÓ§iV!D)¨ S¢P(ÀápfuêêjøøøhÌ6À/²uëVÄøø8YwkVáää„’’ÖQ¦œ788YYY¬£B4ä)°±±ŸŸß¬¯ÕÝÝ ©T ;;;ÖÝš5tuuA*•²Ž2%qqq°µµENNë(„ DyŠH$Òû¹ÿϲlÙ2ܼyýýý¬£L‰P(ÄêÕ«‘——7¹#!„,X sŸÏGrr²ÖN­[±bîܹƒ®®.ÖQ! Q@|óáÿþ}ÌŸ?Ÿu­àææ†ææfÖ1fÄÁÁ^^^¸víë(„†¨ ¾™¯_SSƒÅ‹³Ž¢ Áãñ ‹YG™‘íÛ·£¥¥yyy¬£B¡€ …Rÿ?¦ŠkjoooXZZ¢°°u”áóùˆŽŽÆÍ›7µn0#!D9¨ €£GbÕªUJ{_ßØØˆ¡¡!„‡‡³îšÊØÙÙa``€uŒ[´hÂÂÂð·¿ýuBT@kk+”v½ááaH¥R˜››³îšÊlذdeÆ,X€‰‰ ܽ{—uBˆšQ@&wÿ311aE«ðx<Èd2Ö1fÅÂÂÁÁÁ(((  Ñ3T\¿~J›ÿ¯/ø|>BBBPRRÂ:ʬ¬^½¦¦¦8qâë(„5¢€¨dƒ˜îîn8::²îšJq¹\„††¢¸¸˜u”Y÷cÉ’%(//G?ë8„5¡@ÏI¥Rܺu QQQJ»¦D"AVV222XwOå\]]a``€°Ž2ë~lÞ¼_|ñÆÆÆXÇ!„¨zn||wïÞUúh}¹\.W÷ÿzÙÙÙÁÀÀ¬£ÌZHHÆÆÆpçÎÖQ!j û¿¡É I$ðx<Ö1´ŸÏ×úÁ€À7k6¼÷Þ{¸xñ"Í DP ç233‘œœ CCCÖQ´Ö¦M›pùòextnee”––Ò¬Btz®§§–––J½æã§ ºº à?²±±Áèè¨Ö. üÒÒÒPSSƒ¶¶6ÖQ!*D€‡ÃQzpüøq,^¼Xé×ÕTHKKÃÁƒYGQ >ŸW_}ÇG__ë8„¡@ÕÔÔ€ÃáÀÏÏO©×лE…,,,têÃrþüù(((`…¢"T¢–––àr¹bEi222ðèÑ#TWW³ŽBQ*ô”T*EYY–-[Æ:ŠNðöö†@ ЩK+++,]ºÇ§„è *ô”D"ACC‚ƒƒ•z]‘H„ññq_ðYæÎ‹ÖÖVú° ‚™™®]»Æ: !DɨÐS"‘J©ßØØˆ¾¾>„„„°î¢Ú­^½………:1ð1‡ƒåË—#??ããã¬ãB”ˆ =uðàA¬\¹FFF¬£ ‡ƒ›7o²ŽBQ"*ôÔÈÈŒYÇÐ)†††ˆ‰‰Ann.ë(JÅçóñÎ;ï ''µµµ¬ãB”„ =488¹\{{{ÖQt ‡Ã‡‡êêêXGQ:  ´´T%»GBÔ =TWW™L¥^W¡PàÂ… HMMeÝEf &ïÅÐк»»ufP`jj*jjjÐÑÑÁ: !D ¨ J#—Ëqÿþ}¥ÚdÑ¢EÉdøàƒðÖ[oáÕW_Õ™oÌxóÍ7‘™™‰ÞÞ^Öq!³Äg€¨—T*Å•+W°zõjÖQtÊøø8ZZZð·¿ý gΜÁ½{÷qqq:óüýýqáÂTTT ))‰uBÈ,Ð=#•JñðáCxzz²Ž¢SúûûñOÿôOøãÿ8ùᯫ¶oߎœœˆD"ÖQ!³@€ž‚‰‰ x<žÒ¯=<< ###ðùú÷`ÉÑÑ)))z±¢••"""pòäIÖQ!³@€ž9|ø0U2ðĉˆŠŠÒ›]ÿÑo¼ïÿû¬c¨‡ÃAxx8îß¿OcÑbTè™ññq•\{bbB/¿ý?fdd„7Þx¬£¨œ§§'Ö¬Yƒ>ú‰„uBÈ P Gúúú ‘HàîîÎ:ŠÎ ÂG}ÖQTÎÏÏÆÆÆ¨¬¬d…2Tè‘@,Ó@[³f "##YÇP9¡Pˆ%K–àÊ•+J¥¬ãB¦‰ =¢P(T:HMÕ××þóŸ™LÆ:ŽJEDD`||\§¶A&D_P '¤R)²³³±yóf•\¿¥¥ˆeÝUàéé‰mÛ¶M® øØÐÐÎ œËÈÈ@QQ:;;YG!„LƒþŽØÒ3r¹pqqQÉõGGG!‹aeeź«ÌÈd2H$p8´··cxxøÃþ‡ÚÚZ !""≧ …«V­‚ŸŸär9J¦jª‚¯¯/qäȼ÷Þ{¬ãB¦ˆ =ÑÓÓKKK½¥¯* …uuuÈÌÌDCCÌÍÍakk‹„„,[¶ì‰úððpxjy`‡ƒœœ|òÉ'‹Å077Çk¯½†ÀÀ@­øÿY\\JJJÐÐÐ///Öq!S ù¿YˆR?~qqq011aE'ÈårˆD"œ8qÍÍÍàp8àp8øå/ 777p8NkLÄ㧃ƒƒøúë¯qæÌœ={VVVغu+ÌÌÌ4ö©€©©)ÂÃÃQTT„¹sçjlNBÈÿG€žÉdàrU7䣳³ŽŽŽ¬»©¨¬¬D^^ââ☘ˆ€€˜››Ï꺆††üüç?‡X,FMM úûûñ«_ý 111‡‡‡ë[ðL«W¯ÆÞ½{qäÈlÙ²…uBÈKP º»»166ooo•\_.—ãĉøéOʺ«*%•JÑÑуÂÜÜÿþïÿSSS•}Û544DDDär9âââpòäI8pëׯ‡———Êtš˜˜eåÊ•àr¹¸rå ë(„ÿE€ŽR(™™ë(ZG*•Nû+++ÂßßžžžË倿¿?úûû144„ÔÔTlܸ<Ààà ÆÆÆààà>Ÿèèh¬\¹kÖ¬AnnôI¥Rœvgdd„U«Váܹs‹Å¬ãB@€Îjll„ƒƒÃäsdjø|>”~ÝÇßÎ÷ïß''§ç®Ë`gg;;»m0$—˱`Á-ú\\\àïïììlÖQ! @g]¾|ÁÁÁ*ŸÿŸ››‹””ÖÝUº¡¡¡i?:: ‰D±X ±X ‰D‘H„±±1H$LLLàüù󨨨Ààà  ÚÛÛÑ××…B‰‰ LLL ££[¶l™Ñ‡øãëj²„„TWW£¿¿ŸuBôdÆ êëëÕº3ž:Ì;'Nœ@{{û”Ž‹Å@ZZÄb1œœœƒ¦¦&Œ#-- CCCHIIAxx8:::ðÎ;ï€Çãatt2™ E||<6oÞ<íÌb±_|ñ¼¼¼Xß¾òðð€½½=ÊËËYG!DïÑ,ÔÑÑÎÎN¬]»–u­‰ØØXôööNi4¾¡¡!RSS‘šš à›¹ïaåÊ•“ÿÿĹ999pssƒ••ÕçNG?|||´âiÌo¼>ú&&&ˆe‡½EOtÐÐÐFGGáààÀ:ŠÖÚ¹s'þã?þC¥Óꆇ‡‘››‹þþ~>|ÝÝÝ3ºNoo/~ö³Ÿ!--M+öc000@xx8®_¿N+ÂdÆFFF`hh>_÷$yxx`þüùÈÏÏWY«V­ÂW_}…ÀÀÀ ü¾Y¹ÐÊÊ !!!¬n×´-^¼]]]¨¯¯g…½ÅQhú¨!2mLJX,Vù.v‡‚\.×èÝòfC"‘à½÷ÞCRR6nÜÈ:Î3á¯ý+>ùäXXX°Ž3-mmm8pà6mÚÖqÑ;ô@ÇÈår\½zË–-Sy[:ùíÿ1@€ŒŒ üþ÷¿Ç‘#GXÇyJAA~üã#--Më>üÀÙÙ®®®(**b…½D€âp8àp8¬cè„eË–á·¿ý-JKK‘——™LÆtªB¡€B¡@yy9Ξ=‹ÿóþ¶nÝÊú6ÍØºuëPQQ®®.ÖQÑ;Tè˜óçÏ#88X«v²ÓtñññøàƒðèÑ#üë¿þ+ššš˜eéîîÆo~óâç?ÿ96mÚ¤ÕÅž¡¡!Ö¯_Ó§OcllŒuBôŠî>¿ÕSmmm°´´—«úÚN¡Phõ‡Ït`ÇŽhmmÅÑ£Gagg‡M›6ÁØØXå÷úñBAYYY¨¯¯Çºuëàãã£#þ§"..ÕÕÕ¸zõ*’““YÇ!DoÐ2#hllDBBë(j# 1wî\lݺø¿ÿ÷ÿâܹs¨ªªÂðð°ÒÛŸü`üå/‰ññqlÞ¼ÁÁÁ:óáÿØÚµkQXX¨’ûHy6z C†‡‡ÑÛÛ‹ÈÈH•·%‰0:: [[[ÖÝV;WWW899!11GÅõë×add‡ƒôôt8;;C¡P@(Në ÉÄÄär9†‡‡qðàÁÉe…¥R)"##±nÝ:téêêŠ9sæ   @+3"Dèæo=ÕÝÝ®®.²Ž¢óx<ÌÍÍñúë¯C¡PàÖ­[Ø¿?víÚ…ÀÀ@888`åÊ•O\.wòÏd2ÙäŸs8 ±±qr§À_üâ L&ÃÁƒ‘——‡U«Véäk‡ƒeË–aÏž=X²d‰Ê÷° „P Sd2ÙŒ“!3ÇápŒŸýìgøÙÏ~†_ÿú×À‘#G —Ë'ãr¹¨¯¯G{{;D"–/_>ùa®P(œœŒ÷Þ{ Ø»w/ÂÃÃ|³Cá¶mÛ°ÿ~dggëì7d///$''ãË/¿Äw¾óçî˜HQ*tÈÑ£G‘žž®–¶:;;i©áo‹Å8yò$¶nÝ [[[ØÚÚâ_þå_ž:n``­­­Ø½{7~ñ‹_räÈŒv­ÓUÕÕÕhkk{é HKKKØÛÛxòÀ·ñx<ÄÆÆ¢¢¢â‰©q^^^HIIÁÞ½{1::ʺË*Áçó±~ýz:tˆuBtdFär9½nø_‰§OŸÆ–-[¦t¼••õÜcBBB011;wî<ñçÑÑÑX°`¾úê+ ±îºJÂËË 999L]"D×Q #*++áîî+++ÖQôNaa!ÜÜÜ0gΜ)ŸcjjŠÞÞÞçþœÃáàÝwßÅ¥K—ž*bcc±`Áìß¿"‘ˆu÷•N(bÆ ÈÉÉÁÀÀë8„è,*tÄíÛ·áääcccÖQôÊÝ»wqéÒ%¼òÊ+JŸ¢gee”––>õM866îîîøâ‹/Xß•066FJJ öïßÏ: !:‹ !—Ë!ÔÒVee%\]]accúÛL£°° 022šÖ¹|>J·W¯^[·n¡££ã©Ÿ…‡‡ctt÷îÝc}+T"$$ccchhh`…D€hooǽ{÷””¤–öjkkáàà ÷O:ssóí¼˜€GááÇ/<îñ ¸½{÷>õ3{{{ìØ±gÏžE]]ëÛ¡tvvvغu+þþ÷¿ëä«BX£@LLL@,ëìÔ0MÔÞÞŽææfÄÆÆÎè|LLL`||ü¥ÇC*•>5øfKÝ-[¶ ++K'Ÿ¸¸¸Àßßyyy¬£¢s¨ dÊËËáèèWWW•·eaa€€”””<±°ÐcNNNضm›N> àr¹ˆ‰‰AUU•ÎÎz „*tÀ¥K—fôšÌÌÅ‹ÑÚÚŠ×^{mV×100˜ÒX·nŒqøðágþÜÙÙ[·nÅáÇ_úZAÛøùùaåʕؽ{7¤R)ë8„è *tÀ­[·¬–¶$ ÔòÍW‰D"TVV",,lÖƒ.·oߎÌÌÌ)ÏuŠŠBmm-úúúžùsGGG¸»»£¬¬ŒõmRºÇuí !,Q@¦¥³³ Xºt)ë(Lܽ{"‘hrþÙ077ŸÖö·prrBqqñsÙ±cD"Μ9óÌ×ÚÊÀÀ+V¬À©S§hq B”„ -×ÒÒKKK˜˜˜°Ž¢óär9Ž9‚;v0˰yóf\¾|ù¹…ÇCzz:úúúÍ,§*„……aÞ¼yÈÊÊ¢"€% @Ë`îܹz?'_.]º777¸¹¹)åz<`ZSܬ­­_ºŒ°¶mÛ†¾¾>zÀçó±zõj\¹r…V$D ¨ d D"ªªª®´—ìííòÂóg‰ŠŠB}}=zzzž{ ŸÏ×É'¦¦¦X¾|9233YG!DëQ Åpÿþ},^¼Xmmž;w«V­bÝuµ«­­ÅØØ˜RÞý›P(œö"7°··Gyyù 300@ZZ.^¼¨Sߘ#"" ‰p÷î]ÖQÑjTh±‘‘ôööÂÃÃCmmÞ»wÞÞÞ¬»®V …™™™Ø¹s'ë(“¶lÙ‚¼¼¼—n lee…-[¶`ÿþýa[)lmm±yóf|öÙgH$¬ã¢µ¨ ä%.^¼www¸»»+ýÚÆÆÆ3ú³²²Bdd$Nž<ùÒc#""Н¿þZgÓqvvFPPÎ;Ç: !Z‹ -vûöm°Ž¡ÓÆÆÆ&ßý+{·?X±bîß¿?£Å{"""pÿþ}tww¿ôØèèh„„„`ïÞ½:ñ$€Ëå"""·oßÖ™¢†u£@‹]¸p‰‰‰jkoll B¡Pm»j‚ºº:¥Íû@©T ™L6ísÏþ¨¨¨˜ÒñÑÑÑ“OUzßÔ!00<UUU¬£¢•¨ SvþüyxyyéÍ*€ …‡b:ïÿe¶mÛ†ÜÜÜ—Žxìñ“€¯¿þzÊçh²ï|ç;¨ªªBMM ë(„h*´Taa!ÜÝÝÕúa,‘HÀãñXw]- rrr0þ|¥ÍûWKKK,_¾§NšòX‚èèhôõõéÄ(zKKK,\¸—.]¢Å™&*´TGGLMM! YGÑI---¸xñ"6oÞ¬òWgÆ^©©©¸ÿ>nܸ1åóÞ}÷]äç磶¶V¥}S‡¥K—¢§§G'úBˆ:Q@È3>|k×®UKµaÆ)æ‘7âܹsS~ `kk‹­[·";;[ëŸp8lÞ¼/^D?ë8„h *´X,Fkk+ÕÞ¦>Ì:¨­­…X,ÆüùóÕÒž››=z4«kx{{ÃÌÌ쥋}›““¶mÛ†ììl­ÿö¼`Á8::κ"DŸP …ÐÔÔ¤²‘éÏÒßß ,,Œu÷U®¨¨ÁÁÁ°°°`eÊ–,Y‚üüüi­+ààà 3O–-[†ÆÆF´´´°ŽBˆV @ Éårp8Ö1tRKK jkk‘’’Â:Ê´………A*•N{Düã'çÎý{÷XwcƬ­­ŒÂÂBHÈP …Ž9‚õë×S ÄÚµkU²è:lÚ´ §OŸžöꂟ|ùå—Zý}Ó¦M™3gXG!DãQ …ÚÚÚàää¤Ö6e2¸\Ýþër÷î]Èår«µ]KKK¸¸¸àæÍ›³¾–§§'lmmQVV6ísáçç‡üü|­ýÍår‹[·nÑ „¼„nÿF'JsøðalܸQgŸ:ôõõ᫯¾Â+¯¼¢öwÿ¦¦¦pqqAuuõ¬¯%ðÚk¯!''õõõÓ>ëÖ­FVVär¹Z<^!ðÖ­[¬£¢Ñ¨Ð2uuu°¶¶†½½½ZÛíè考ƒëî«Ì¥K—GGGÖQfÍÔÔÑÑѸ|ùò´¿É …BlÙ²eò1º¶[·nʼn'f´Ä2!ú‚ -S[[ kkk­¡®épãÆ ÄÇÇ³Ž¢4K–,AssóŒFÄóù|¤§§chhÙÙÙZù:ÀÕÕ¾¾¾ÈÎÎf…EÑ{W®\Áܹs5zÉßé255ÅÒ¥Kqúôé/ ±iÓ&äåå¡««‹uw¦Ãá &&5554€ç @‹Èårô÷÷«ý1u__ŒallÌú(]?Š‹‹±víZ¦9ìíí122¢ÔGÖ‹/FGGft¾¡¡!vìØ#GŽ```€éý™‰€€¥ ®$DQ Ez{{QUU…äädµ¶›ŸŸWWW8;;³¾J———‡ùóçÃÖÖ–iŽÄÄDÔ××£­­Mi×466Fll,.\¸0ãÇøaaaǾ}û´ò›tFFNœ81íi‘„è*´ŒB¡PûH|m|<½½½¸yó&âââXGðÍ}Vö½ŽEKK š››g|ÈÈH­-\]]£GB*•²ŽCˆF¡@‹LLL@(êìTtwwÏø:‘‘‘˜˜˜@II ë.M —ËEJJ ªªªf½ß!º† -²ÿ~lÚ´IçäQ‡;wî@&“©mÖæÌ™kkkTVVÎê:;vì@mm-n߾ͺKÓÂår±eËìÛ·uB4 }’h‘µOÿŽ{÷úûJ£P(pêÔ)¬[·NoŠ©Í›7ãüùó‹Å3¾Æã-„sssQWWǺKÓâëë TTT°ŽBˆÆÐß~dÆFGGÑÖÖ???ÖQ”¦°°ð÷÷gå óæÍCcc£J®mgg‡E‹Íz»\;;;ddd`÷îݳ*&ÔÍÄÄ .Dyy9 äQ %nÞ¼ +++š«ÎÂÀÀ*++±bÅ K‘––†¬¬,•]?66­­­³Þ.×ÉÉ ¡¡¡ÈÉÉѪ•öV¬X¦¦&Ú.˜ÿE€–xøð!LLL`jjÊ:ŠVÛ½{7æÏŸ¯ïþÿÑœ9sœœŒ¿ýío³šmÀår±iÓ&Œ!++Kkf‰p8¤§§cïÞ½¬£¢¨ /466###Ö1”âîÝ»˜˜˜@hh(ë(ÌxyyÁÑÑùùù³ºŽP(DFFÆÆÆ´jÏ???X[[£´´”uB˜£@ Èd2´··ÃÓÓSímïÛ·›7oÖúÁrr¹¥¥¥ Ôë}„B!ÂÂÂPYY9ëwø<ééé(//ך™&&&رc233Ñ××Ç:!Li÷ou=188ˆêêj$&&ª½íÑÑQ˜˜˜°¾³ÖÕÕ…[·n!%%…u”çâñx*\ƒþþþ/üm|>kÖ¬ÁÕ«Wµf¹` ,]ºtÖ" ÑvT½°oß>¬Y³B¡u”çruu…rssUÞÖöíÛqðàA¥\+,, ‘‘‘øú믵f¥Àˆˆ<|øííí¬£ Z`xx¦¦¦7j][TVVÂÀÀ ,`奸|¾Z¦×Í;^^^¸xñ¢R®ŽèèhìÝ»W+Š'''xxxàÚµk¬£ Z`ß¾}ذax<žZÛmii©©)¬­­Yß‚‰DØ»w/¶nݪ×ïþÿ‘P(Ä–-[­´ ˆÂÃÃáää„dzîÞ”lÚ´ EEEZóê‚e£@ ˆD"ª½Ý7nÀÆÆööö¬oÁŒ8qQQQÌwûÓDFFFHNNÆÑ£G•v͸¸8ŒŒŒhż¦¦¦“¢¨ :«§§÷ïßGxx8ë(S¦î×>Î:!jC€†S(L €‰‰ ôõõÁÙÙ™õ-˜¶ªª*H$­z÷Ïš»»;æÍ›‡¼¼<¥^×ÞÞ(,,Ôèå‚`nnŽ’’ÖQQ*4Øèè(®]»†5kÖ°Ž¢5:;;Q\\ŒŒŒ ÖQf„ÃáÀÆÆ===jo;55ÍÍÍJY!ðÛ222 “ÉpòäIÞ=pݺu¸pá‚Z_¿ÂL"‘ ··NNN¬£hÌÌLøúújõ˜‰Í›7+m•¾éprr²eËðÕW_)õº|>›6mÂÄÄN:¥±OæÌ™GGGHôDgÔ××£¯¯±±±¬£Ì ŸÏ‡T*eÒöãÝò •Þ§ÇE€¦> àñxXºt)ŠŠŠÔ²#!¬Q ÁJKK>Ÿ¯ö¶KJJªöÕgJ¡PàêÕ« ƒ©©)ë8ZK  ::eeeJ÷¸‹Å8qâë®>SPPŒŒŒh»`¢¨Ð`ÅÅÅ e²oqq1´fÿ––444 >>žu­ÁÁAÔÕÕ)ýÚ|>ñññ¨¨¨ÐØíx322pãÆ 477³ŽBˆJQ@´^ww7öíÛ‡·ÞzK'¾ýÛÙÙÁÎÎwïÞeÒ>—ËÅ{gsçÎ)}@ ðÍZØ»w¯F®ÃïîîŽÐÐP:tˆuBTŠ 522§hªvãÆ ˜ššÂÓÓ“u¥077‡­­-³ø¦™;w®Ê…/\¸‹/Æ×_­‘O"""011ššÖQQ*4Tyy9LLLàííÍ,‹WÓ%‰pöìYlݺ•u³~ýz\¿~*¹þ¢E‹‹/¾øccc¬»û,^¼W¯^ÕÈ‹„(ƒæÿ†×S …‚YÛ×®]ƒ |}}Y߆Ç‘#Gšš ÖqtŽP(ÄöíÛqìØ1 ©¤ÐÐPˆÅbܹs‡uwŸîîn455±ŽBˆJP ¡¤R)“¶‡††Àçó5~@}}=êëë±bÅ ­¬8U|>_#¾y†……A&“©l…<‡ƒ÷Þ{÷¸ÝÐÐIII8yò$ë(„¨hll —/_ÆæÍ›YGÑXr¹™™™Ø¾};ë(*‘––†ÊÊJôöö²Ž‚ôôt\¸pA©û|›¥¥%vìØ+W®hÜîÕŠ­ ™.*4L&Ãðð0¬¬¬XGÑX×®]ƒ­­-æÎË:ŠJXXX`llŒÙ‚@ßfooÀÀ@œ?^emØÙÙaÙ²eÈÌÌÔ¨•…B!âããqñâEx"Cˆ2Q@´Îøø8JKKÖqt‡ÃALL ª««U:mÏßß!!!8~ü¸FèëëSÉ”HBX¢@]¼xQQQ …jo[,ãæÍ›X²d ëÛð\{öìAPPÖ/ù«M¼½½±zõjìÞ½*iƒÇãaýúõËå8yò¤ÆFFFøîw¿‹Ã‡£µµ•uB”† tóæMøúú2Ø&‹ñðáC°¾ ÏôðáC´¶¶"22’u½³`ÁŒ£¶¶Vemp¹\lܸ÷îÝÓ¨­yœœàââ‚òòrÖQQ*ˆVÉËËâE‹`iiÉ:ŠJq¹\,[¶L¥ïݧK  99YYY*m‡ÇãaÕªU(//רE‚6n܈üü| ³ŽBˆRP aúûûÁåri^û3ë(ÌÂÆÆ¾¾¾¬£0‹»wïbppu”çZ»v-²²²Ô¶s!—ËÅæÍ›qõêUtww3í{HH¤R)îÞ½Ë4!3AÑ8ããã¸~ý:"""˜lˆD¦ÇÏÏB¡P­#ôƒƒƒ¯¿þýýýLû¿cÇ9rDåS" Q6*ˆÆillDoo/bbbXG!S```€Å‹ãÊ•+j}/?þ|( æë¸ººÂÓÓ999Ls2]ThˆÎÎN€‹‹ “ö¥R)°páBÖ·û÷ïÇ–-[˜ì†¨‰8ŽÆ»Œ‰‰Áðð°ÚßËç;ßÁíÛ·QYYɬï<‘‘‘¸}û6mD´ ¢±±À7#‹YÃÍ›7™~ëV(8þ<|||àååÅ,‡&áñxHKKÓŠ h222ŸŸ¯Ö÷òfffرcŽ?Žææff}_¸p!¢££ñ·¿ýYB¦‹ ¢1zzzÍ›7ÃÀÀ€uáì쬛ÏÀÃÃÇŽSk»VVV Aaa!Ó©óçχ\.g>;©¢€hŒƒbõêÕ´ÛŸ[ºt)ÚÚÚðàÁµ¶»~ýzãðáÃ̦Lš™™aÁ‚(**ÒøW6„Th™L†›7o"""‚Y¹\Ît û÷ïchh ,`–Ìž¹¹9BCCÕþmüñ"AB¡‡fÖÿU«Váþýûxøð!³ „L`bb555ˆŽŽf–áðáÃHIIaöè½´´^^^°µµevˆr¬]»‰'NœPk»\. ¸yóæä Zu{¼PÑÁƒ™´OÈtP@Ì>|{zzP^^Žõë׳¾ ÉÑÑfffhhh`eJ8bccQ[[‹¾¾>µ¶mmm]»váÀjoû±ÀÀ@( µ­ŽHÈLQ@˜Û¿?V¯^MÿžÃÚÚfffZµóœLLLÔ¶Qз ..}ô“¾›™™aþüù())¡‚ˆF£@\»v óçχ¡¡!ë(jW__ññqz÷¯ƒ¶nÝŠÓ§O3ÙÎØßߦ¦¦(//gÒ÷äädÜ»wÆF€¨¨¨€ŸŸx<ë(j5::ŠÝ»wcûöíôî_988`ÅŠ8zô¨ÚG曘˜àÕW_Eii)***ÔÞw.—‹W^yYYYèííU{û„LMMMðððPk».\€¿¿?œYߢÉÉɸ}ûöäBWêdee…Õ«WãàÁƒL¦ÁÌÌ —/_V{Û„L>ŸÏWë·ð¡¡!ܸq‹/¦%§ÀÅÅ===Z9¿|ëÖ­ÌFÅ»»»#>>žÙúk×®Eyy9= ‰ ÆZZZ •JáããÃ:ŠZ•••ÁÊÊ ÞÞÞ¬£h…ÔÔT”••a``€u”i{<½³¤¤Díms¹\¤¦¦ÂÈȈIbee…ÐÐPÚ(ˆh$*koo‡L&ƒ££#ë(j366†óçÏ#==u­¡ÍOIŒŒŒ°k×.?~mmmjoŸÃá &&÷îÝCGG‡ÚÛ_¼x1êêêÐÓÓ£ö¶ y*ˆÚåææ"00¬£5177G\\Î;Ǥ}GGGìØ±TûãxÌ;ùùùLúNÈóP ç ÚÚÚ0wî\µ´788ˆ›7o"::Z«¿Õ’é‹ŽŽÆÃ‡™mläçç‡èèh|üñÇjo{ýúõ(..F?“¾ò,T0$“ÉpíÚ5¬X±‚Y†±±1aõêÕji¯´´æææz7æA !‰Xǘ1[[[#//Y†   XXX¨}<‚¥¥%bcc‘›› ©Tʬÿ„| I¥RÔ××#00uµ¸uëjkk±k×.ÖQ´ŸÏÇúõë±oß>ÖQf%55‰LÚ755Å®]»PQQÒÒRµ¶½víZ´¶¶2ë;!ÿˆ ¢6YYYˆŠŠ‚µµ5ë(ZÉÔÔÃÃìcÌŠ±±1V®\‰3gÎ`bb‚I ¬X±'OžTëÔ@‡ƒU«V¡¨¨cccLúNÈ·Q@Ô¢²²2™ aaa¬£ÆÜÝÝáåå…óçÏ3Ëàíí¸¸8dffªõ‘¼¿¿? Q]]ͬÃAJJ ŒŒŒ°ÿ~µµËår‘’’‚œœÈd2&}'ä1úmÌP}}=\]]™~(ÖÕÕÁÃÃC¥#òoݺ…Bàà`fý$šeÞ¼y°¶¶Æõëי戌ŒÄƒÐÙÙ©¶6`aa¢¢"¦}'„ ¢R8yò$¾óï@(²Ž£Õ<==ann®3ûÌ¿õÖ[¨ªªRû`¼osuuEFF<ˆ®®.µµ›œœŒ+W®hõ¬¢ý¨ *£P(P\\ ø§&&& …LV³SCCC,Z´åååLÖéÌÏÏ‹-Â矮¶6}||`jjŠÊÊJfý&„ F>Ž7²Ž¢s/^ŒššŒŽŽ²Ž¢TñññðððPë@¼çYµj Õ²ì2ÇòeËpåʦ!‰~¢€‰D‚S§NaÛ¶m¬£(]?jkki·?2maaaèîîÆÃ‡YGAdd$ZZZÔ²>Àüùó! é)Q;*‘J¥L3 ÀÖÖV©×¼yó& àççÇ´oDû888`îܹÌÇÀœ9s°aÃ|ôÑGjy-±aÃäää`||œu׉¡@O‰D"äææ"##Ciל˜˜À‰'°sçNÖÝ#ZjÓ¦M(**Boo/ë(ðòò‚­­­Z ’¹sçÂÖÖ–fµ¢@Éd2ðù|¥\K*•âĉHHH€ë®é,.— tww³Ž¢FFFظq#Nœ8Á|Ç<@€×^{ ·nÝBqq±JÛâóùX²d ™„$úƒ d28ŽN½#ohh@uu5ÒÒÒhÃâóùX½z5:Ä:ŠÊÄÅÅahhH#¾ ›™™!==‡RyA²páBp¹\TUU±î6Ñô›š“'O"66¬£(…B¡ÀáÇ‘‘‘¡SE¦âñx:¿“ܦM›páÂæOÀÚÚ«W¯ÆÑ£GUþŽ~óæÍÈÊÊ¢§D-¨` «« –––L3””” ((H)Û_¿~ÆÆÆðññaÚ'¢;\]]1gÎ\½z•up8¬X±*߈ÉÃôS Q *ôTYY‚‚‚Àãñfu©TŠââb„……ÁÈȈu·ˆŽàr¹X²d ÊËË5â)¼òÊ+(,,Ä£GTÖŸÏGll,JJJhFQ9*ȬܿˆgEo¸¹¹A(âÁƒ¬£¨”¿¿?LMMQVVÆ: €oFê§¥¥aïÞ½*Ý:844r¹ÕÕÕ¬»Ltj6>>‰DÖQ”âСCزe ëzÅÎÎN/ HOOGNND"ë(OOO˜››£¢¢B¥ílÙ²§N¢Õ‰JQ fõõõ@XXë(³VVVSSSx{{³ŽBt”³³3<==qéÒ%ÖQ&½õÖ[¸ÿ> TÖÆœ9sàììŒüü|ÖÝ%:Œ 5S(P(L3ŒA¡PÌj£©TŠÒÒR„††Ò»¢2\.±±±¨¬¬ÄÈÈë8,Z´H¥ïéù|>¢¢¢pýúuÚ)¨ zèÖ­[J¥ œñ5ÑÞÞŽ„„ÖÝÑK@oÀØØ•••¬£LŠŽŽÆÂ… qàÀ•MÙ[´h$ nݺź»DGQ@fäÀôŒŒ \¼xQcFȫږ-[pöìY¿bÅ ðx<œ8qBemlÛ¶ ÇŽө퟉æ @Í&&&`hhÈ:Ƭ”––ÂÌÌŒÞý3daa‘‘ÈårÖQÔÂÉÉ >>>ÈËËcå K–,Á£GÐÖÖ¦’ë»»»ÃÍÍ W®\aÝU¢ƒ¨P#™L†ãÇcûöí¬£Ì˜D"Ayy9½û'jÅår…êêj ³Ž3ÉÃÃÉÉÉøè£T2¶‡Ïç#22•••3‚è*ÔH¡P`hhˆéÀ2™ ×®]ÃòåËgtþýû÷ÑÚÚJïþ‰ÚB(ª| ÞtyyyaΜ9*û–¾hÑ" ¢±±‘uW‰Ž¡@ÏH$444Ìh`kk+²³³ñöÛo³î†ÞãóùpwwGCCë(jõÚk¯¡ººwïÞee’¶oߎ††•^^^T¥£€LÙ•+Wàä䄹s粎¢÷ø|>–.]Š3gÎ°Ž¢V¶¶¶X´hΞ=Ë:ÊLLLššŠ¬¬,• Ì\»v-®\¹¢1S!‰n @îß¿'''¥lÀ£n]]]¸qãÒÒÒXG!z.::###7=ÎÙÙiii8pà€Òg+X[[#** ÇgÝM¢C¨P£K—.aÁ‚011a–all †††àr§÷ÿú“'O">>živB€o¶C^µj²³³5n[äøøx455¡¾¾^é×^¼xñäú„(z&33Ë—/ŸÖyKK ÚÚÚÎ:>!€ `bbB£Æ<öÎ;ïàüùóhnnVêuœœàîî®1›#íG€ž›ö+ˆ‚‚øøøÀÞÞžu|ò-þþþàñx¨««cE파ŒðöÛoãÈ‘#xøð!ë8Opuu…›››Jö/X³f 5j*$Ñ^TêééÁõë×±nÝ:ÖQÈ?077—ËEww7ë(LØÙÙÁÇÇ%%%¬£”––bãÆ¬»@^`þüù¨¯¯×›MžgçÎ8vì˜ÆM äp8x÷ÝwqöìYÿüs444@¡PàÁƒøío‹•+WâOúýrÑ`G¯Ç<|øéé騶mÚÚÚ&ÿù?ùÉOžxz@4­­­^ocii‰ßýîwøýïÿÔ×¼¼<ˆD"Ö'ñx<¼÷Þ{8}ú´ÒfØÙÙÁßßW®\aÝ=¢e¨Pƒîîn˜››3ý åóù¾ydheeõÄÏþøÇ?bÍš5044|â>q8p¹Ü§þÍp¹\TVVâäÉ“Éd›o¾‰¨¨(˜˜˜(-gDDΟ?û÷ïÃÏÏoV×âp8HOOÇþýûñóŸÿ\½7œh%Ž‚~k¨ÜîÝ»agg‡uëÖÍê:ããã¸}û6Nž< ¡P###xzz"%% …|>ÿ‰oÿ/#—Ë!•JÁçóqõêUTTT`bbcccX¶l¢££ahhÈìõ™º>ø‰‰‰ˆŠŠb… …B‘‘äääàÆ077ŸÏÇŠ+©T @0­¿ËR©2™ 2™ ™™™èëëÃÈÈx<¶oß—'fÓÌTyy9òòòð‹_übÖ×ÂG}„Õ«W#88X¥÷œh?z ¤R)JJJPTT…Bõë×ÃÒÒsçÎÕu¹\îä/°„„$$$ ­­ ÝÝÝ(**ÂÕ«W‡˜˜Z €h¬žž””” ??¡¡¡ÈÈÈ€««+¬­­'™É5ŸÏŸœóÚk¯A.—ãÞ½{ÆîÝ»áææ†¨¨(„„„Ì*ÿÂ… ‘——‡ÊÊÊ)ïÔù<æææ Bii)™î>J4L¡P`xx.\@cc#V®\‰ ¨ô¹³³3œ1þ|455áôéÓhmmEZZ,,,¦õ„¨O||<ÊËË®7ÿ?’H$èééÁÑ£G!ð³Ÿý ÖÖÖ*û÷Áåráçç…BÐÐPäçç#77ƒƒƒŸñ«@€øøx”””ÀÏÏoÖÅvJJ ~þóŸ£­­ ®®®*¹D7Py¨b©;88LûÜÛ·oã7¿ù $ ~ðƒ`áÂ…j{Ïáp0oÞ<üà?€³³3~ýë_+uÞ2Q®  ®®î©u•\.GVV~÷»ß!..ßýîwacc£–< xï½÷pëÖ-üá˜Õîƒ111pssÞ={fÇãaãÆØ»w¯ÊïÑnT¨Xss3ÚÚÚ=ås†††ð«_ý 999øéOŠôôtf‹q8,_¾|ðnß¾Ÿþô§O¬·NˆºUWWãG?ú ~ÿûß?µ®…:™ššâ½÷ÞÃŽ;°{÷nüõ¯q‰žž¥¬øxiä›7o2»7DóQ añãÿ÷ïßÇ«¯¾ [[[æƒð8Œ±cÇ( ¼ûî»T&jjjðýïÞÞÞX»v-ø|>óÀ7ýìØ±§OŸÆï~÷»->doo¹s碼¼|ÖyÌÌÌ&ÇèóFQäŨÐ0J¥øóŸÿ [[[Öqž`bb‚>ø^^^ÈËËc‡| ‡ÃP(„X,fE¥Ž=ŠÍ›7ãÝwßÕ¸eª½½½ññÇ£ººÍÍÍ3ºÆ† PTT¤”Å|’““QWWGÅ:y.*4HUUöíÛ‡ßýîwL— ~¡Pˆ_ýêW(//Gnn.ë8䙘˜`ÅŠ8tèë(*óé§ŸÂÀÀßûÞ÷XGy.OOO¼ÿþûøõ¯ÖÖÖiŸobb‚;vàСCšU–ÇcöíÛÇú¶ E€ÉÊÊBhh¨Æ/ÅkllŒeË–!++Kiûš“Ù366VÚ²²š¦··ùùùX¹r¥ÆOmóòò‚ÝŒwç Ãèè(jjjfÅÒÒ£££·-2Ñ šý/ITTT€ÏçãÝwßeeJ6lØ€… "''‡u¢öíÛ‡×^{ aaa¬£¼”~õ«_¡ºº3ºÆŽ;pêÔ©YÏêðóóƒ Xߢ¨Ð2™ _~ùå´W*› ‘H„³gÏâW¿úՌߚ››ã믿ÖÙoD3ýôSôõõÍèiii°³³Ãðð°ÚrýÓÑÑèèèY¯¸7Uööö022šÕuÞyç¾Yt(""·nÝšõX€Ç‹ UUU©ìžíD€†Ó^IL"‘ ­­ ===‰DèììÄØØär9†‡‡Ñßß¾¾>´µµa||xøðáäHñÙ.œbhhÚ„FCc||MMM¬£(•B¡˜õ<ãããèîîÆ£GÐÜÜŒææftuu¡½½}òßË£G0>>™L†+VÀËËkVmš™™ÍjUÆ   ,[¶ Ÿ|òɬ¦òq¹\$''#77wFÓ‰î¢@ܼyÓÜ4::Š?ýéOxë­·ŸŸ¿ÿýïxôèd2öìÙƒW_}ÇŽömÛðùçŸãÔ©SxçwðÑG)%7‡ÃÁðð°Ræ-“Ù³¶¶†L&Ó¹ýà‹‹‹gõÁ5<<ŒÏ?ÿÙÙÙøÅ/~eË–á/ù þú׿bÆ ‹Å(--EBBª««ÑÑÑwß}‡žUn.—‹{÷îáÑ£G3¾Æ‚ ‘HpûöíYe €……®]»6«ëÝB€044ŸÏŸö7iKKK¼ýöÛH$ÈÍÍEzz:|}}'W ¼wï’““ajjŠÊÊJ¼ýöÛHHHÀñãÇ•öM€ËåÎúQ)!/bll<«'U555Ø»w/V­Z…7ß| …éééðööÆðð0 ÜÝÝ1>>Žññq8::¢¡¡ÝÝݳÎ. gµŠ§‘‘bccqñâÅY?iKIIÁåË—i,™D€ðöö†­­íŒþ{zz")) ÅÅÅOLõ022‚……„Báä#†††WÊcûÇfƒ‚‚XßB¢Ã,X0«Géæææàp8(++ƒlll`nnþÜ|>\.wÖrår9<<<àèè8«ë,Y²½½½¨­­Õu¼½½aaaÊÊÊY]‡è*4‡ÃX,Fÿ´Ïmhh€™™.\ˆÏ?ÿ\­Õýðð0FFF4b)Vò ”ÉápÐßß?ã¹ìÞÞÞØ¶mvïÞýû÷ã'?ù üüü —Ë¡P( ‘H ‰ P(”ºlnww·Rž´q¹\lذ—.]ÂÀÀÀŒ¯Ããñ°xñb\¼xQi}$Ú  aii‰¯¿þzZçµ··ãÀÆo¼K—.á‹/¾@ww7ZZZ066†ÖÖV £³³ÝÝÝhooÇØØšššpÿþ}ˆD¢O>>J¹!!!pppÀñãÇguGGGðx<´··+%Ñn¼ÿ÷ÿwÖ!t™™™êêê —ËáææöÌc8P__¨¨¨)?î”Éd°³³ƒ¯¯/ìììØØØÀÅÅ+V¬€»»;BBB[[[¸»»cùòåpvv†µµ5’’’àëë;£ñââbÄÅÅ! €õm&ÿK*•âüùóHJJÒ¸µògÊÜÜ£££ …3™_QQááaÄÅÅÁÙÙ\.§NBjj*âââàââ‚ððp¬\¹¾¾¾022¢E‹;;»½~DUUÞxãYÏ`xÌÁÁ¹¹¹ðöö†¹¹ùŒïemm-†‡‡áëë«”\D{éÆo öøý{WW× [°`NŸ>?üáøùÏ>¥Çê––– ü˜Éÿmee5ù¿ííí'ÿ÷·Sqttœñ/¯¿þ7nÜÀ›o¾©þ›JôζmÛðæ›oÂØØK–,™òyCCCøÝï~‡ððpDGGƒÃáàÆ …àóùOl%ìââ2ù¿ãââfœU$á§?ý)”º¬· PPP€­[·Îø:[·nÅ¿ýÛ¿!!!¦¦¦JËG´½Ð éééxôè‘ÆïÞõøÛÍöíÛ5~]v¢ÌÍͱaÃäççOky\|ï{ßCOO~ûÛßbß¾}‰DxýõוöÍüݽ{B¡Ë—/Wúµ“’’PYY9« fffˆÇ±cÇTÒ¢=è··ñõõÅÖ­[ñƒü`Ækˆ«ÚØØ~ò“Ÿ ,, ±±±¬ã`hh\õmË–-H$øýï?åÁz<©©©øïÿþoüô§?ÅŽ;°téÒ'žŠ)Ó­[·ðþûïã'?ù‰J¶ó¶¶¶Æ®]»ðõ×_Ïj…@‡Y­O@tfÑ¢EðððÀ÷¾÷½/#ª*øá‘H„•+W²ŽCžA(" %%%¬£¨ÄÎ;qåÊüö·¿ò@G‡˜ššÂÈÈhVS _¤ººï¾û.V®\ WWW•݃àà`H¥ÒY-ôøÕÇÍ›7U–“h>*4Œ±±1~ýë_céҥطoZZZ˜oå)“ÉÐ×ׇ}ûöÁÃÃÿó?ÿ£’o7„¼Œ——>úè#ˆÅb>|xrék–¤R)nÞ¼‰“'Oâí·ßÆ÷¾÷=•¿Û¶mŽ?>ãß FFFˆŒŒDaa!óß/„š •••011ŸŸß”ŽˆŒŒ„££#>þøc´µµÁßߟɨn¹\޳gÏbÏž=HMMEzzúä¢BD3566¢«« QQQ¬£¨„ âããÑÖÖ†¿ÿýï°¶¶Vé7îéïïÇÇŒ;wîà;ßùÎä@CU377ÇÇÑÑÑ1㩆...8sæ ¼¼¼`ii©æ;G4j0Ýà1+++,Y²ÝÝÝÈÌÌ„P(„ƒƒƒÊa~›D"Amm->ýôS˜››ãÝwß…««+-ú£t½¾y¬?oÞ<,^¼gÏžÅÕ«Wáááccc•ûV(Gvv6N:…åË—cãÆ3žš7Óþ ¤¤044œö5ø|>ø|>Ο?OãyôMÔ`ÿ‘'%%ÁÅÅ—.]ÂÅ‹;;;*½Íû÷¥•••ŪU«<£_0„ +++H¥RLLL@(²Ž£2<­­­àr¹ˆŒŒÄŸÿügøùùÁÓÓ>>>³^‚÷Éd2TVVbppyyyð÷÷ÇÖ­[áííͤÿÁ_ÿúWüò—¿œÑ5¬¬¬ —Ë!‹é߸â(h/W•Û½{7ììì°nݺY]G&“¡¾¾YYYÉdüyó°qãF( Mkã™L†ÑÑQðx<äååáúõë011ÇÃÒ¥K±hÑ"ðx<úÖ¯…Þÿ}lذá‰yîºddd{öìH$Â+¯¼{{{LLLàÂ… ¸yóæä¿””,X° …bÚOo$•J±wï^ô÷÷ÃØØÈÈȘñ"AÊ4::Š¿þõ¯HJJBHHÈŒ®ñÛßþñññ:ýĈ<=Ð"<~~~ðóóÃÀÀªªª°{÷n\¿~777Èårp¹\( ( p¹Ü§Jq8ôõõ!?? …ضmbbbT6EЍ.×õƒƒƒØ¿?¼½½2ù÷U("%%)))xôèÎ;‡¿üå/°µµ…¡¡!`llüÄ 7‡‡óÌwîÜÁ;w ‘HÐÜÜŒ?üµû¥‰‰ .\ˆ’’ÌŸ?FIFFvïÞÐÐP~bDžF€–²´´D||<âââ “ÉÀáp““ƒÊÊJ…BÁÌÌ 8{ö,–-[öÄ#>…Bü×ý¸\.¸\.ø|>}Û'K.—#;;¥¥¥HMMEddäsussÃÛo¿×_ …###8rä<ˆeË–MîØÞÞŽÛ·ocùòåOr¹QQQøîw¿‹‰‰ |õÕWÔ¨ÿÇ’’’ð³Ÿý MMM3Z*ÙÍÍ îîî(((@bb"ëî5¢@‹q8œÉ<°f͚ɟÀÑÑkÖ¬Á–-[4âq%!3¥P(pîÜ9ôôôàÕW_Åܹs_z‡Ã™|%fmmµk×¢££ßÿþ÷'G½‹Åb ½ð©ŸÏGdd$rrr­qE‡ÃÁ믿ŽsçÎaË–-Ó~‚Ççóáëë‹ÊÊJ*ô ­ £ärùdaðx0¢?P\\Ì|޼2Ü»wÿöoÿ†ÁÁAìØ±óæÍ›Ñ“ªììl>1åÍÐÐpJ˜¡¡¡ˆ‰‰Áþýû1>>Îú–<ÅÏÏÖÖÖ¸téҌϼ{(ÑTè  µµ ¬£F.\ˆÛ·oký"/uuu8wî6mÚ„ 6Ìx-Œ‰‰ ŒŒŒÀÉÉiÆYâããaff†C‡±¾-Ï”––6ã}œœœàìì<9žˆè*tÐÄÄ$‰Æ=ª$dªFFFð—¿üÇGFF,X0«¿Ï---xøðá¬ç»ÇÆÆ¢«« MMM¬oÑS,,,‰sçÎÍèüÍ›7ãÊ•+aÝ¢&TB4ÊÈÈöîÝ‹€€¼ýöÛ³úÖþXSSæÍ›7ë븺º"##'OžÔÈ" && èèè˜ö¹æææXºt)Ž9ºDM¨ Dq¹\ˆÅbÖQ¦ìñ(ÿßüæ7X¸p!acc£”kŸ9sæ‰A²³áî€dee±¼]Ïäää„íÛ·ã³Ï>›Ñ7yKKK °îQ*ÑAˆ‹‹Óª=ßsssÑÙÙ‰wß}÷…Sü4A||<,,,pþüyÖQžâëë ###TWWOûÜØØXô÷÷£¶¶–u7ˆP ƒ.\¸@ÛõiÅûÜþþ~œ9sؾ};ÜÜÜ”ºžQQ<==•ºƒ¥¶mÛ†úúú¼W‡ƒµk×âܹsJ¥Ó:W  )) çϟ׉$äŨÐ1r¹uuuð÷÷g…—ºÿ>þû¿ÿ]]]زeË´–²žªÆÆFØÚÚÂÀÀ@©×Gee%D"‘ºnÙ”xyyÁÉÉ —/_žö¹¨¯¯§@P@a¢¡¡'OžÄw¿û]¼þúë*ÙŒ¦¯¯ÍÍ͈‰‰QI"""ŠÝ»w«úvMÛŠ+P\\ŒÑÑÑigaaùóç#//uˆŠQ@Q«±±1dffâôéÓØ²e \\\TÖÖðð0úûûáî6-Z„þþ~444¨¬™ðöö†™™*++§uÇCxx8jjj¦]<íB!:êñ“&­î6222¹š^zzºJ?üàܹsHIIQixã7púôišÈår‘’’‚óçÏC"‘LëÜ… bppÍÍͬ»ATˆ ÓÐÐGGG˜˜˜°ŽB³³³ƒX,F?ë(¾ùæ¿oß>øúúb×®]puuUy› ðööVy;®®®HIIÁ§Ÿ~ªò¶¦Ã××¶¶¶(((˜ö¹¸{÷.ë.¢@ÇÂÇÇfff¬£à›|Ο?_þò— Â’%KÔÒnAAæÍ›GGGµ´7oÞ<øùù!//O£¶cNIIA~~>ÆÆÆ¦u^rr2JJJ088Ⱥ DE¨ „¨T^^ZZZð‹_üÑÑÑjk·µµjÛã^("##999õÚÅÓÓVVV(//ŸÖyÖÖÖˆŒŒÄ‰'Xw¨„è0KKK 1i»³³YYYhiiÁöíÛakk«¶])ûúúPWW§ö ± ±aÜ;wNcÐq¹\$%%áÒ¥K˜˜˜˜Ö¹VVVÕ¨'Dy¨Ð!£££èï—ë(DCl߾ǎSû®€MMMøôÓOÑÕÕ…mÛ¶)}þˈD" ¨|á³ÄÆÆ‚Çã!''Gím?¿¿?,--Q\\<­óÐÚÚŠû÷ï³îQ*tHgg':::°`ÁÖQˆ†000˜öðÙjllĉ'°k×.¼ñÆ*™ßÿ2}}}°²²R{»%''ãÑ£G¸wï³ ÿ(-- /^œÖ¢E\.ëÖ­ÃÉ“'é)€¢€¢b±_}õŽ=ŠÍ›7cΜ9̲ìß¿ÌÚwvvFFFN:¥1ëÌ;vvv())™ÖysæÌÁ£G¨ÐATBfmttûö탱±1¶mÛ777fY†‡‡ÁçóajjÊôž899aîܹÈÏÏgšã1‡eË–!??ãããS>ÏÎÎÁÁÁ8wîë.%£@‡TTT ,,Œu ¢a8ŽÊÖu—ËåÅþýûáéé‰Í›7«e~ÿ‹äååÁÃÃÉûÿ´nÝ:ðù|œ9s†ußÌí711AYYÙ”Ïár¹ˆŒŒÄíÛ·1<<̺ D‰¨Ð!×®]ÃâÅ‹YÇ ÄÚÚaaa*ûºrå þå_þ¾¾¾jqÿ<ÃÃð³³cÀçó±téR1›ñ6lØ€ÜÜ\ˆÅâ)ŸŒžžtww³ŽO”ˆ 5X¸p!Q"*Ô`Ñ¢Ehll¤ÇgDg\¼x<À¶mÛ`nn®¶ùý/ÓÙÙ ÉóXDDúúú4bVÇÃ’%KpíÚµi$ñññ¨©©AOOë.%¡@GÈd2p8p8ÖQˆknnÆþ碹¹;v쀱±1ëHOÈÌÌĆ 4îß—ËÅ{gììl˜ TTTLùœÇƒ³³³YÇ'JB€ŽÈÉÉAPPœœœXG!:ª©© 'NœÀÒ¥K‘žžÎd~ÿËÈd2p¹šùkÍÎθvíšFL©KOOÇÙ³g§5#ÀÞÞ£££j_XЍ†fþK!ÓÖ××cccûæCØ ÀÀÀúúúf|ææf;v ëׯGll,ó)vÏr÷î]ØØØÀÁÁu”çÚ´iàôéÓ¬£ÀÍÍ nnnÓš¦˜˜˜ˆÐ6Á:‚ Btœ§§'ÑÕÕ5ísGGGqéÒ%œ8q7ndº¸ÏËÜ»wVVV°°°`å¹x<bccqýúuæ»ì=ÎRVV6åÕ9ÒÓÓqèÐ!¦Ù‰rP@y&±XŒÃ‡£ªª ëÖ­ÃܹsYGz.‘H„úúzDDD°ŽòRžžžHKKþ}û˜o4þ|ðx<ܸqcÊçØÙÙ¡··—^è*t€T*Åðð°Úö='ºO$aß¾}pssÃ~ô#xxx°ŽôB###xøð!‚‚‚XG™’ˆˆxyyá³Ï>c[·nÅéÓ§§¼S ››üýý‘››Ë::™%*tÀãݺâããYG!ZN&“¡¯¯€‡‡–/_®ãJ&&&  µ"ëc‹-‚D"A]]Ó®®®˜3g._¾<åsLMMg5¦„h*Ñ7ty™¢¢"üÇü<<<˜˜È:ö”íß¿7nÔØÏbkk‹­[·b÷îÝc–ƒÇã!::•••SΑ’’‚›7oªd)¢>Úó¯…2cëׯǙ3g^¸'ÀåË—Q[[‹?üË–-ÓšoÓr¹°¶¶feÚœœœ‚ .0øx ñššš)onnŽèèhz  å¨ D¼ìÃüòå˨¯¯ÇöíÛadd¤5þŸŸGGGøøø°Ž2m\.¨®®žÖ¢<ª°}ûvœ8q‰dJÇü¿ C8IDATÏŸ?7oÞdš™Ì:@,kä¢,Dóµ´´àý÷ßG}}=víÚÖ‘¦mtt|>_«Š–oãóùXµjJJJ˜.îââ‚yóæáâÅ‹S:ÞÑÑÎÎÎÌ 2sT考bÛ¶m¬c-óðáC>|ëׯǶmÛ´²ˆ”ÉdèììÔè)ŠSŽyóæaÏž=Ì2ðxÊÊÊ`hhKKKÖq”¦ººæææpqqaE©x<Ö®]‹‚‚f-\¸2™ wîÜyé±öööpppÀõë×™d%3G!:èñ¢2¸sçÞ|óMÄÆÆ²ŽE¦(44nnn8pà³ »víÂÑ£G§´é··7Z[[§¼†Ñ T¢ƒÚÛÛñoÿöo¸yó&vîÜ ¡Pˆèèh´¶¶êÄò­"‘eeeXµjë(*‹‰‰ ܾ}›IûÎÎÎðññ™ÒX€%K– ¥¥ÍÍÍL²’™¡€ÓÖÖ†ƒ"##¯½öÚäâ>ŽŽŽaºØŒ²LLL ££Cãw)œ lÚ´ Ÿþ9“oÖ<öööxøðáKår¹Ø¼y3öíÛÇâV‘¢@ËÓ@2©¥¥™™™X³f addÄ:’Jœ8qIII …¬£¨”““bbb••5¥GñÊ––´µµ½ôXsssÈd2ˆÅb·ŠÌZ¬­­ ·nÝBJJ ë(„1‰D‚ÇcÿþýHKKƒ··7ëH*ÕÔÔ777Ö1TŽËåbÆ ¨¨¨`²Žˆ|||PTTôÒc===áè舫W¯²¸Ud¨Ðbr¹2™ €uÂX,ÆÁƒ!‘H°yófxyy±Ž¤RÕÕÕ011ŸŸë(jÁår‘žžŽK—.¡¿¿_íí'''ãúõëSj;55%%%Sš>HØ£€-%—Ë!‹‘™™ [[[lÛ¶í¥+û…††âƬ£ÏJoo/ø|¾Î¾Þx– ÀÙÙGU{Û666 Ù3g^z¬««+zzz˜®dH¦Ž B´Tii)~ö³ŸÁÁÁÉÉÉSÚ oéÒ¥(,,dº÷ül éÔâ?SññqÔÔÔ¨½í„„ÔÕÕ¡½½ý…Çñù|¬^½šI¡B¦ -¦P(tf T2=EEE¸qãÞÿ},_¾\k·Â®ááa\¼x›7ofEí¬­­±víZìÙ³gJëô+“­­-ŸŸÿÒc§4s€°GŸZìèѣذaëD:;;‘ššlß¾ÖÖÖàóù¬c©Mww7¬¬¬t~ôÿ󸸸 ..'OžT{°bŠܸq}}}/<Î××–––(--ey«ÈP ÅÚÚÚàääÄ:Q“ŽŽ|õÕWxðàvíÚsssÖ‘ÔîàÁƒHNNÖÛ¯\.k×®Eyy9ÕÚ¶.\ˆììì' …²²2ZPÃQ@ˆx¼¸Ïš5kðÎ;ïL.î3]B¡¦¦¦èííeÝ¥i‰DP(:µŸÁLp¹\ìÚµ 999èêêRkÛ+V¬ÀíÛ·ÑÑÑñÂã"##QWW‡ÑÑQ–·Š¼„h0‰D‚ýû÷ã‹/¾@JJʬ§¾ÙØØ 88ø¥ßâ4QEE„B!üýýYGa.00ñññسg†††ÔÖ®µµ5æÏŸK—.½ð8@€ÐÐP³¾Uä¨ÐR}}}022Ò«©Púfbb‡‚@ ÀÎ;áëë«”ër8f{Íφ6Ï\P…ùóçC¡P¨}V@BBnß¾ý§H!!!4@ÃQ ¥®\¹‚¹sçÒ$—Ë122‚ÌÌLXZZbóæÍ˜3gëXLI¥RÔÔÔ ::šuò½ï}•••¨ªªR[› Äùóç_xœ››ÚÇ*©£@Kiã7825ׯ_Ç/ùKXYY!55Uo¦ø½Èøø8îÞ½‹°°0ÖQ4Š™™vìØC‡©u—ÇäädTWW¿p ‚­­-<<ÕÕÕjioþüù/]‹ ##çÏŸ‡H$b}{È·P@ˆMLL 33ÆÆÆøÝï~§´Å}¦kÍš5ÈÊÊb};^J*•¢¤¤Ë—/gEkp8¼óÎ;¨¨¨@ee¥ÊÛsvv†­­í ×"°´´ÄÄÄÆÆÆXßò-T¢&ÕÕÕøüóÏajjŠÕ«WƒËåÒÿ—H$¸ÿ>YGÑ*fffؾ};öíÛ‡•¶ebb‚àà`”••A&“=óCCC¤¦¦âÀ¬o ù*´Pnn.éÃC‹”——#//^^^X³f x<ëHZA$ÁÀÀ€þ®Ï€µµ5–.]гgϪ|ÆGRRîß¿–––çcaaAëh*´Ð;wh@”)//Gii)Þ|óM¬X±‚>̦áСCHJJ‚±±1ë(ZiõêÕ055ÅÑ£GŸûí\¸\.ÒÓÓ±oß¾ç³hÑ"ßlêD4„¨Èàà ŠŠŠPRR‚]»viÔ6¶|>@ãeŒŒÐâ?³ÀãñššŠÊÊJ´¶¶ª´- ˆD"H$’gþœËåÂØØƒƒƒ¬o ù_T¢===øä“OP\\Œ]»viÜ”M'''hô¶ÀËåpttdE«ñù|¼ýöÛ8zô¨J×ðöö†ƒƒ®^½úÜc¶oߎ³gÏB,³¾-T¨Íœ9s^:Rv*ÆÇÇÁçói]t ÖÝÝ}ûö!55ÿçÿü¿öî;,Šsíøw ,méÒA@AcA@PD{Á‚Š šcrrR[îÏuyåÊìîì=ÃìÌ=Ï<Ïý¼©´ãûµ´´”úD\XX±X WWW¶CQy®®®000Àµk×Fô{.\ˆ”””ÇÖ 000—Ë¥¾J‚€Q¢§§==½!×_OLL„½½=œœœØÞ$ò'2™ gΜÁþýû1oÞõþFááᨪªÂ7Fì;\\\`llüØçüºººX°`¢¢¢ØÞ”¨±XL=È•D"ÁñãÇQSSƒºø‘X,FJJ ,XÀv(jC__³gÏF\\ÜcŸÓ—ËEPPÐg ìî+ j3Rª#J"¹\Ž'N@KK [¶l¡à 77NNNl‡¢V&Mš„3f **jÄF˜››CGGç±}|| ‰F­R!yiff±X ±XÌö.Ð8”Œ¢åË—ãæÍ›TüBIeeeáòåˈˆˆÀôéÓ5¢ -—Ë…®®.ëÇdZZ\]]! ÙÞ%­ûŽ<99yXŸËÛÙÙaìØ±HJJêõšPPPÀöækJF—Ë¥;y%T__sçÎ!)) T܇YYYpvvÖˆ¤KÙ-^¼ZZZøõ×_‡m<“'Oîó1888 ¦¦†íM×8”¨€®®.PóèhjjBdd$Š‹‹sss¶CÒH èýãU2kÖ,TTT ººzØÖéìì ¹\ÞçÀ5kÖ &&F©†¤jJT@GGŠ‹‹©'ú0khhÀÁƒáïï­[·j쿵µ5š››Glzا)..FMM ØÞäÿqrrÂÒ¥Kñ¿ÿû¿ÃÖjiii ;;;¤§§÷zMGGfff¨ªªb{Ó5 %DãÈd2œæÍ›×gùé9sæ ¦¦<`{Ó5%D#0 ƒææfœ>>‰DÈÉÉéõZDDŽ?N£¥F U@tt4.\H­AhooÇ­[·pñâE¼õÖ[X¿~=´´´ØKéèèèôYªu¤%''c„ j1µ²: DYYÙc'õ>Ÿyóæá·ß~ëÕñÔÄÄ} "î(Dm555áûï¿G\\6mÚDCüƒÃá ,, GŽõï.((€ %eJÎÑÑ¡¡¡8~üø°$Ï<ó { û377‡Ï°µ6'£€¨¥¦¦&:tøïÿþo˜™™±’R …hmmõï•Éd4õ¯Šprr‚““.\¸0äuéëëÃÓÓñññ½^322Bss3Û›«( jE.—#11ûö탟Ÿ¼¼¼€ž1+¡’’”——#88˜íPH?-^¼\.¿ýöÛÖÃåráããƒÛ·o÷J<ƒƒƒQ^^Žââb¶7WíQ äd2x<5‘öƒL&Cll,îÞ½‹àà`ÅÅŸ('‰D©TJåUˆŽŽ-Z„³gÏ¢££cHëš4ix<^¯Î€ÚÚÚÔ 0 (PrÉÉÉ011Á„ ØE©1 ƒØØX´··ãoûïW÷îÝ£ãZÙÚÚbÙ²e8räD"ÑÖµiÓ&DGG÷šx(""ÇŽc}šjuG À(âóù˜?þ€ª]‰D"êýÿyyyxûí·ÑÕÕ…°°0º£;;;ØØØàæÍ›£ò} ÃàâÅ‹X´hÛ›N!00%%%¸ÿþÖc``†aÐÖÖÖc¹¡¡!d2ÚÛÛÙÞTµFW–Qæää„{÷ڸ{÷..\¸€W^y«V­¢ eIGGB¡•••l‡BTÄË/¿ŒóçÏ©J ¡¡!æÌ™ÓkæÁ1cÆ`Ú´iˆe{3Õ%D%577ãóÏ?ÇéÓ§±aÃ899Qor’˜˜wwwŒ3†íPÈ ÙÙÙÁÞÞ—/_ÒzüüüPUUÕkxa`` QWWÇö¦ª-J”˜T*Eii)<<<ØE©´¶¶âСCðõõÅ«¯¾ KKK¶C"T^^333ðù|¶C!C°bÅ Èår$$$ zæææpssÃ7z,·¶¶Fkkk¯ÇdøP ÄÚÚÚMÓ¤þ?‰÷îÝÃÁƒáííY³fÁÀÀ€í°Ô†P(•j€>Dii)fÏžÍö&“! BBBž×/\¸III½ ­X±111lo¦Ú¢€¨†aýû÷ÃÛÛ3fÌ`;$µ‚ôôôormooGkk+µÜ¨ GGG,Y²‡ô¨]]]888àÎ;½Ö=\3’Þ( JO.—ãÌ™3hllÄ|¶CRKÚÚÚÉd#>ôª±±¦¦¦lo.Fþþþ(//GQQÑ >¯«« ooo\¾|¹ÇD@VVVpuuÅÅ‹ÙÞDµD Qjøâ‹/ÐÚÚŠ°°0*ˆ¤¢¢¢°~ýz¶Ã ÈËåbëÖ­ˆ‹‹ôûœ9sP[[‹ÂÂBÅ2>Ÿäää ¹ðé%ÖÐЭŸŸsçÎÁÛÛ¡¡¡tñWMMMÐÒÒ¢¾jÈÆÆ¡¡¡øá‡5¯‡Ã¹¹9êëë{,Ÿ>}:ªªªz-'C§™W…ë)-—Ë‘——‡³gÏbãÆ˜3g ñ%gDçb‹‹ƒ‡‡,,,ØÞT2ÆŽ‹±cÇâÚµkƒúüÆqòäÉ^===‘‘‘Áöæ©J”˜T*Õ¸‹KK vïÞ_ý7n¤Žb£ˆËåbåÊ•½Š² —îŠo4-³úâp8xöÙg‘™™9¨ª’VVV˜4iR¯j©þþþHNNf{óÔ%Di´··ãСCðööÆ»ï¾ kkk¶CÒ8VVV¨ªª‘uWTT    ,`{3ɘ5kÒÒÒ<*€ÃáÀ××ùùù=&255………rssÙÞ<µB aL&Cvv6~þùgL›6 ³fÍ¢zþjˆaÈåríÓ¢IfÏž '''üøãþ¬»»;ñðáCÅ2¡Pˆ‰'âúõë4AÐ0¢_â(³±±¾¾> OOOÌœ9“íȹqã|}}ÙƒŒ’éÓ§£¥¥ePùúúöª ¸xñbܹsÕÕÕlošÚ `”™™™A__¿ÇP—¾¤§§C__'Nd;äÃ0 âââððáC¼óÎ;ðóóc;$2‚RSS©€“±´´DDDΜ93àúsæÌA^^^VkkkJ†%Jª¥¥<Om‡¾bçÎxôè6nÜH½ü•„••ŒQPP0¬ë½}û6¬­­affÆö&’Qdoo???DFFès¦¦¦˜2e Î;×cùêÕ«qôèQ¶7KmP@Fݽ{÷pöìY,^¼«W¯VÛ$GÃÈÈhا¬¾{÷.,,,hü¿š:u*? ç÷–––hooï1$ÐÀÀzzzxôèÛ›¥( £F,#??111X·n¼½½¡§§ÇvXd„µµµ¡´´Ó§Og;Â@€Õ«WãìÙ³hllì÷çQYYÙ£¿”µµ5ìííñÛo¿±½Yj%UWW;;;¶Ã6mmmØ»w/¢¢¢°qãFØØØ°%---¨®®¦i­5˜¾¾>6lØ€_~ùe@Óû†……!**ªÇ2[[[455hÁ*MA €jmmErr2BBBØeX´··ãðáØ2e vìØAãû•œ––d2Ù°­O,CKKKíG´'óõõEKK ÒÓÓûýWWW…ŸY¸p!rrrF|ÖJM@ €’bFåO˜ à 55?ýô&NœˆÙ³gƒËåªüv©»U«VáÆhjj–õEFF",,ŒíÍ"JàÙgŸEvvv¿û˜èêêÂÚÚùùùŠe4Mð0 €ŒˆîñýW¯^…——fÏžÍvH¤ŸŒŒŒÐÑÑ1,­2™ MMM4ý/ð{Ç>///DGG÷û3ÞÞÞ())Q$¤Ë–-éS§ØÞ•G .\@UUþþ÷¿Óø~ –ggg899± Q3fÌ@WWrrrúõ~ ++K±ÌÐÐzzzô`ˆ(PB ˜9s¦J–Ã}ðà¶oߎÚÚZDDD@WW—íÈ tvvy=ííí*y“‘Ãçó1þ|¤¤¤ ½½½_Ÿ Źsç ‘Hü>ÀÊÊ ×¯_g{sT%JèÎ;?~¼Ê=+/**ÂéÓ§±~ýz¬]»–Æ÷«(‡ÐÐP9rdHë‘J¥¨¯¯‡ƒƒÛ›D”ŒŸŸ¬­­û}ŒÙÛÛÃÍÍ çÏŸg;tµB ‚‚‚••…®®.¶C6EEEˆŽŽÆÚµk1iÒ$߯â ÐÒÒ2¤u444 77AAAloQB~~~hmm}jYônB¡°GÇÔ€€äææö»ôF ÜÜÜPQQ¡ @{{;Nœ8˜˜„……©Uí24÷î݃‹‹‹Êµd‘Ñaii‰5kÖàûï¿W4í?ɲeË““ƒÚÚZÀøñãQ]]=,ª4%JF.—ƒÃá¨Dóy{{;¢¢¢ÐÜÜŒµk×ÒÅ_hiiÇãõ(Ã:PgϞł ( egg‡iÓ¦õ«L°žžæÎ«AÀãñÜk¾Ò”(™´´4hiiaêÔ©l‡òD8|ø0\\\ðÜsÏÑÅ_͸¹¹ÁÜÜIIIl‡BÔÇúuëpíÚµ~M@åííššTTTø½à5ÈÀP dÄb±Rß11 ƒ„„lß¾ d;$2B¸\.D"Ñ >›‘‘ êHžJKK Ë–-CllìSËûŽ3öööHMM8::ÂÔÔ´ÇAÒ”IHH@ii)Þ~ûmÌœ9“ípˆ’ª¬¬„¾¾> %ý2eʈÅbäåå=õ½...¨©©X,†žžtuuQUUÅö&¨$JH¿ÔÕÕáܹs(++Cxx8,--ÁãñØ‹Œ ¡P8¨VmmmÈÎÎÆüùóÙÞ¢"ôôôð /àØ±c¨¬¬|â{gÏžªª*E)à… âÖ­[4`( OURR‚ï¾û•••‡ŽŽÛ!‘QФ¤$477ès]]]¨««ÃرcÙÞ¢B,,,àêêŠ7n<ñ}aaaŠŽŽŽ¨­­…X,f{T%JD$áêÕ«X¾|9Û¡(ãäɓؼy3^xáºøk@‰D2àiW£££±xñbj!"¶aÃÔ××ãìÙ³O|Ÿ››Œ‘šš >Ÿ… Ò܃@ €‘J¥¨®®†££#Û¡€aãĉX³fRÄDTÃèîŸ Çƒ¯¯/rssŸXˆJ @__555³¾Ê¡€ôÒÞÞŽ={ö`ÿþýX»v-õäÖPFFFhllì÷gÒÓÓannggg¶Ã'*jÊ”)˜;w.>üÄÇO‹-Bzz:Z[[áêê ###dff²¾J¡€<'NTʃU$!22ãÇÇ»ï¾K Æçó±råJDFFöû3µµµô¨ˆ ‰··7LLLpúôéǾÇÞÞvvv¸víttt ¥¥E³%,àr¹˜1c._¾Ìv( r¹8pàœ1oÞ<èéé)uM2ò´´´úݹª­­ iiiJÕ‡…¨®ùó磩© ·oßîóu‡ƒÙ³gãÊ•+€\»v l‡®2(P" ðvÁ½zõ*Ž9³½+ˆ ‰D¨¯¯‡ Û¡5`nnŽððpÄÇÇãÎ;}¾ÇÂÂúúú(..†½½=êëë]¼JQ DŽ?Žyóæzñ”ÄÄDâÝwߥ™ÛHºººàóùýªð믿"$$|>Ÿí°‰š033ƒ»»;®^½Úçhsss899áÆàóùXºt)Ž?ÎvØ*ƒ%RUU ‹Qù.†a ‘HpéÒ%aÓ¦M4…/饻sU_c³»!™L¨¨¨€••Û!5³hÑ"˜™™áäÉ“}¾Š›7o¢©© VVVŠBB2™ R©ô©“ i2JÕGÃ0(,,Dkk+òóóQ]]ÌÌLÈd2ðù|TVV"//zzzpss±Gåå娻w/ììì°iÓ&ê´EzèêêÂÝ»wÁårQVV---C `„ àr¹H$زe &MšGGGÅÝ!ÉËåbΜ9øŸÿùÌ;fff=^Xºt)"##1gÎÔÖÖbíÚµpssCYYöíÛ§³«²ÃPz4j†ÁÊ•+ †azK‘Édàp8Ëå B\\܈4§–••á—_~ÁªU«0vìXj²%½Ü¿³fÍBcc£bŠj¹\OOO$''C  «« ~~~ÈÊÊ—Ëżyó°iÓ&„††B €Ë¥F2|²²²påÊlÙ²†††`2™ <·o߯¶mÛPYY‰ÂÂB0 †aàåå…””hkk³¾R¢_è(âp8xõÕW¡££©T ™L±X¬ø×ÝdÅãñð_ÿõ_#ra.--ʼn'°zõjŒ7Ž.þ¤ONNNزe‹¢‰_*•B.—ÃÁÁ¡Ï »\.G||<^~ùe¼ð xôèÛ›@ÔÌÔ©S1}út|÷ÝwH$HKKÿþõ/ìØ±aaa¸|ù2 —˩ٿŸèì?ÊìííŸZ"uÞ¼yðóóÖï‰D8r䪫«N•ýÈñx¼^5 ø|>^{íµ'6§¶µµÁÛÛæææloQCÏ<ó ®^½Š×^{ D{{»¢uŠ µŒ2}}ý'^|uuu6¬'ÐÎÎN9rffføË_þBÒ/kÖ¬OeOK^7n܈ððp¶C'j¨®®W¯^Edd$¾ýö[´µµaºø%£ÌÎÎÏ=÷œâÿ¹\n;ªÉ“'cýúõƒZwuu5N:¥è• üÞ™+22öööX±blmmÙÞDEXXX`Ó¦MŠ‹>ŸÏâs}ccc¼÷Þ{t÷O†]GGÞxã „„„ 77·×ëôŒp(`ƒƒ„B!ÀÝÝÏ?ÿ¼â5WW×A?—ßµkž}öYEe¬¬¬,üüóÏpppÀ¼yóØÞl¢‚‚‚‚#D"""àééÙçû„B!>üðC¸¸¸°2QC:::˜7o|}}{=‚âr¹xÿý÷1eʶÃT9”°`åÊ•ðòòðûIÕÉÉ ```€×^{mPÓ¨^»v çÏŸGkk+<ˆK—.áüùópssÃüùó©¤/[[[,^¼ÀïEWw§åç燗^z‰:•’Áår±yóf$$$à¹çžëQ,M.—cêÔ©8pà C JXðÇ‹±¿¿?þú׿ÂÃÛ6mÂäÉ“¼¾úúz¼øâ‹(**8p'NœÀ?þñÌ;—íÍ%*ÌÈÈ3fÌÇës†?†aàêêŠ?üpP‰+!¡¯¯O?ý‰‰‰Š›(øøãáææ†o¾ùÚÚÚ044„ƒƒx JXÀår±nÝ:ÃÉÉ B¡ð”T*Å¡C‡pïÞ½˯^½Jóc“a„¬_¿^Ññª‡ÃÁK/½ooo¶Ã$ÂÐо¾¾8pàþýïC(¢ººííí˜>}:V­Z… &àù矇Ãéq¼J$š+਽n””” 33SqçÏãñ —Ë‘——‡_ýöööèììDuu5¢££Áãñ##£§®;>>Û·oï5c[nn.bbbàîîNÍÿä±ÒÓÓQ^^þÄc„aˆÅbÄÄÄ ²²...àr¹‰D011P(ÄéÓ§{Ým1 ̘1ƒíÍ$jÈÃÃÛ·o‡““~üñG|ÿý÷ø×¿þ…¯¿þ[·n…‘‘‘âØÔÖÖÇC^^ª«« ©TÚc}ÚÚÚ Ô¨’èT p˜Éd2ŒŒŒ`iiÙç @¯“/Ã0¨¨¨€H$Bgg'0þ|öxo]]þö·¿!::Z±L[[ºººðõõÅóÏ?+VPY %‰ÐØØàÿijjêq YYYA(ö«©”ÇãÁÇÇiiiŠ“g÷ºúú<‡ÃA[[ª««Ë†Á²eË0aÂÅð-ccc*EME&“¡µµÙÙÙØ±cüüüÀ0 lmm¡§§§¨ØíqçÜîu•——C*•¢³³K–,··7„B¡ÚžC)&"‘—.]BSS233ÑÜÜŒ—^z Š ¿är9*** ‘HŸŸ_~ùÎÎÎpww‡­­-fÍšxíµ×ðÕW_A `îܹÐÒÒ‚ŸŸÂÃᯯ߫f6Q·oßF^^x<qçÎ0 ¬[·FFFŠ“ Ã0°¶¶VŒH N8Ο?‚‚EŸ˜™™A&“ÁÕÕS§Ne{7P\\ŒsçÎ!66NNNpuuEHHär9ììì<«ªL&CYY†AZZ.^¼ˆ††¸»»cíÚµ˜6mÛ›<ì(¢––dff"..ÎÎÎ044ÄòåË¡¯¯?¬ßSQQK—.¡¹¹=Âĉ±{÷n„††ÂÖÖË–-õi„ »Äb1PRR‚C‡AOO–––3f är9lmm{Q†ÇA>å\ºt ¥¥¥àñxhhh@MM ÚÛÛ±aø¸¸ÀÌÌLmïÀÈÀ´µµ!!!ñññ°³³ƒ••ÜÝÝwþÃ}|ß¿IIIhjjƒàææ†7ÂØØX-溠`ª««ñÓO?A(*ŠìŒô0¨ŽŽ”––âÇ„¾¾>ÞyçaO6ˆrkjjBBBš››q÷î]´µµÁÓÓ‹-‚‘‘ŒÙqК››ÑÔÔ„K—.!55pww‡‘‘‚ƒƒajjÊvˆ„%%%%xýõס££ƒ°°0ÀÄÄdT¾»­­ yyyØ»w/JJJ°cÇøûû³½K†Œ€A‰DˆŠŠBQQ6oÞŒñãdzGRRbbb°hÑ")ÅÝmmm(,,ÄÑ£GÁçóáêê sss,Z´H­‡ßuO2T[[‹û÷« aaapssÑGDytttààÁƒ¨­­ÅäÉ“±xñbÖúŒ0 ƒË—/###xñÅaaaÁö.4J(##)))prrÂÌ™3ajjÊÚ…W&“¡¶¶çÏŸ‡L& 0vìX¶wF<átuuaýúõÐ×ׇ¥¥¥Z4Ad?ÔÖÖ¢££ÇŽǃ§§'‚ƒƒ)ñUcׯ_Gjj*<<<àíí=jwüOÓÖÖ†{÷î!11&LÀ¢E‹T²%œœŒ7ÞxÛ¶mt½þ‘ ‹ñÁ 33{öì½½=Û!‘!jkkÃýû÷qôèQ888À××÷±ex5Qvv6®_¿Žââb¬[·®®®Ô" fΟ?;vàÿüŸÿƒ¥K—²NŸîÞ½‹­[·båʕغu«Ê%”ôS{{;¡Tÿnb±;wîDKK ¾úê+¶Ã!CÐÞÞŽ ¾¾°±±¡ar}‰D¨®®Æ‘#G  ±eËJÔDCCÖ¯_mÛ¶aÉ’%l‡óDùùùxå•WðÑGÁ××—íp„€~H$øî»ï`gg‡Õ«W³Îc‰D"|ûí·?~<–-[Æv8dNœ8 .à¹çžS¹“ ›ÒÓÓ±oß>Ìž=6l Ç*¬»f…££#‚‚‚ا_òòò7b̘1l‡ÓošóqÒÓÓ«ô'd@€éÓ§c÷îÝxôèÛá:qâ>ýôS¬_¿^é5eãåå…ððpìÞ½QQQl‡CI*•b×®]èììT™‹?ðû¬®S§NÅë¯¿Ž††¶Ãé7Jž¢«« —.]Â7ß|›a]·H$ÂÇQZZŠŽŽŽaYg@@Þ|óMüúë¯lì.2HÇÇgŸ}†O?ýT)O|Ý.kkkGu‚•îï­®®îUîúÏüýýñå—_â›o¾Add$M£‚|Øãï/•JÑÐÐÐkùpòòò‚––RRRF}¿ %OqãÆ dgg+¦ì."‘‡ƹsçðÕW_!))iØÖíììŒ3gΠ¬¬l´w„ÚÚZ|ÿý÷øä“O0gÎÖâ‹ÅH$}í‡~ÀÖ­[Ÿz!N‰gÏžEXX>>˜>}:’’’ðî»ïâÿø¦L™‚®®.ddd@"‘@,cöìÙÐÖÖ†\.Gff&2331qâDÌš5 ]]]HMM‡Ã\.‡¯¯/8ÒÓÓ3¦§§ÃÇÇãÆÃ­[·üžTdeeaÖ¬Y˜>‹/ÆäÉ“ñÖ[oaÖ¬Y`FFF DHHÐÔÔ///lÞ¼ððáCTTT(î´LMMáïï… ¢¼¼ ÃÀÊÊ ³fÍBpp0JKK‘ŸŸ‹/¢´´mmmðññ@ ô>år¹pqqaûOKFˆ……"""““ƒ‡¢©© «V­‚ŽŽ ‹qéÒ%deeaùòå7nœœœÀçó‘““ƒ+W®(~ÞÞÞàr¹8þÿüó!'åp8X¼x1´´´ØÞä LLLðÃ?`éÒ¥Oý{×ÔÔ`Ò¤Iؾ};€ßï˜$ ¬¬¬àçç‡o¿ýóçχ——òóóajjŠþóŸËåŠdðwYN49>|ˆúúz´µµììì —ËÁ0 ¸\®¢ÚY÷g»O¶Ë—/ïQ ÃáôHlþø]Ý1p8p¹\477^ýu˜››ƒa˜!Œijj¡C‡ðÊ+¯°ñg%£ ‘‘‘øúë¯áçç×£©žÃá ººÍÍÍJ¥Šeõõõ½~b±ÑÑÑèêê‚D"@ À¸qã ¥¥5¤ó¿²£€~j¯ÑÅ‹£ªª R©T1”P.—C.—C*•B&“!99ï½÷Þyç\¼xµµµ¬ÆLFGPP<<<À'™ù×®]Crr2ÊÊÊïÿã9Ž?ŽÄÄD…BÈår´µµA"‘@*•*ÖÝý™îã½;©T ©T Èd2|ñŸ}û6Î;§h¾—ÉdŠýÕÒÒ‚qãÆaÑ¢Elÿ‰I??---hllì×û…B!BBBpéÒ%Œ?^q³ÓìNœ8‰§OŸFkk+jjj ‘HûÛð÷÷Ç£GÇݽ{÷àçç~oƒL&ÃÝ»wáååÅöîìÞûï¿ÿ>ÛA(³œœœ9sË—/ôä+FFFÐÒÒÂÌ™3aff‘H„ÔÔT`âĉ°··Ç©S§ÐÚÚŠÎÎNøùù!((hÐ#ª««±k×.,^¼lïBòæææøùçŸÍôccc‰D‚˜˜”––ÂÓÓÏ<ó ¸\.Œ!àïï¡PSSS"66¹¹¹?~<\]]qíÚ5p¹\Ìœ9999ŠõØÛÛãþýû3f æÎ ܸq°¶¶†‡‡RSSñèÑ#øøø ²²wî܇‡““###˜˜˜àáÇpvvFVV8fÍš¥ø.C À××·nÝBUUáíí¸¸8¤¥¥)Zß8®_¿Žû÷ïÃÓÓ³_ÍúÍÍÍøâ‹/°víZ:þUˆ™™NŸ> Œ7®_Ÿ111‰‰ üüü ­­ ‘H„””455!44...HHHÀ½{÷Àçóáââ‚   XYY!&&wîÜ‹‹ f̘GGG#''hiiÁ† `kkÛïm())ÁáÇñòË/«Dë+•~ŠææfüóŸÿÄþóèéé j ÀaEÃ0Š»£î&Õ?>«çñxCšâ5//û÷ïǧŸ~Êöî#ýÐÙÙ‰¿ÿýïJ¥øúë¯ahhøØ÷v7W¿w„êNJÿ|Œu/‹ÅËåŠçéÝÍ¡|>_qWÞ}¼ußaw{‰2™Lñ=‰ ÀÏçƒaÈd2Åñ+‹ÁårÁår!•Jëÿówq¹\ÅÝ_1üñ;y<^ßJ÷{žÔ?¦½½Û¶mCGGöìÙ¶ÿ¼dŽ=ŠÓ§OãСCýšX§û¸ÿãï ûxáóùàr¹Šß€–––â÷ÁápË»µîÏÿñQÙÓŽ·?û÷¿ÿ ‰D‚;wªD9jJúáäÉ“¸{÷.Þzë­!uL >ÄG}„çŸÏ<ó Ûá~jjj›o¾ ¹\ŽÏ?ÿ\i¦=U%ÍÍÍxçwÐÑÑ/¿üfffl‡D¨­­ 6lÀ³Ï>‹5kÖ°΀äååáÅ_Äž={ôØ€MÔ |||póæÍÇIQ&gΜX,†««+Û¡066Æ—_~ xçwúÕ'€ümmmؾ};Z[[±{÷nºø«(|úé§xðàÊÓ~ï›””„÷Þ{Oe.þµô[QQ¾øâ ¼ýöÛ;v,ÛáôéêÕ«ˆ‰‰ÁŽ;hZTÕØØˆììläääÀÛÛ[Q_œôM*•"##7oÞ„‡‡¦M›SSS¶Ã"C”~øÛ·o‡••ÛáþøcL™2E©g‹í µô“££#LLLðòË/x9ÉÁHNNÆÛo¿ oooºø«0bΜ9HNNÆ®]»™™©2µÅG‹H$ÂíÛ·±k×.\¹r3gÎDpp0]üÕ„»»;¸\.^}õU<|øípK$açÎHKKƒŸŸÛá µ @WW>ùä´µµáÕW_UšÆéééøú믱páBlܸ‘ípÈ0‰D(((ÀÙ³gÁãñàïïŸ~uŽRW2™ iiiHIIAgg'–/_777èèè°fmmmعs'´µµ±uëV¥k èèèÀÁƒ‘ššŠ>øöööl‡4`” Bqq1Ž9+++DDD°vò©««Ã?þ¡PˆÍ›7C(ªDÏSÒݽœ³³³‘˜˜ˆÆÆF˜››cÆ ÐÑÑ¡¡¡Zÿ͆Akk+D"Ž=Ššš˜˜˜`Μ9˜>}zQD=åççãØ±c7nV®\ }}}Vÿæ]]]HIIAbb"æÏŸ¯˜ÄKCJ©¦¦iii¨¨¨ÀŒ3àéé9jß-‹‘’’‚ììløøø`âĉ𰂍&‘H„¢¢"ÔÕÕáÔ©SÐ××WL¼ãîîÞï±Óª ¸¸wïÞÃ0HMMEKK V¬X+++899=±^Q?•••¸qãöíÛ‡gŸ}sçÎ………ŨÆÐÑÑ””ìÝ»þþþXºt)œ]FP0D—/_FZZºººcccûA!‹ÑÚÚŠû÷ï#66˜?>Ít¦º[êêê‹û÷ï#;;Ó¦Mƒ¿¿?f̘¡Kodd¤ôw&ÍÍ͉DàóùHOOÇåË—‘ www¸¹¹aéÒ¥°²²¢»} Ç0 âããqôèQ´µµaÍš5˜7otuu]£åiÄb1ÚÛÛ‘¨¨(TUUaýúõ U‹ÇN” ƒÖÖVâøñã‹Åðññ‰‰ †\7 ¾¾7nÜÀÇqëÖ-899aùòåprr¢ÞáÀïM’åååËå¸~ý:ÒÓÓÁáp`ff†©S§ø½hМ9s ¯¯Ïv¸Š–³î$9;;uuu`S§NÅìÙ³Ááp`ooOwú¤—––ÔÖÖâöíÛˆŽŽÇêU«0nÜ8Lœ8qX¾£ªª ·nÝÂõë×q÷î],\¸033Ò-ʆ€aÒ}WÖÑÑÓ§OãÈ‘#prr‚žž&OžŒ ôšâ·»*ÚŸ—K¥R=zuuu¨¨¨ÇCxx8æÍ›§˜<…¾üqÒžŠŠ Å4¾r¹ååå=*N2 ƒ¥K—ÂÝݽ_žp8…B´¶¶ökºj.—‹ÂÂBÄÄÄôXnee¡P¨XÇüùóáè記[€ŽoÒ_ˆ‰‰AYY®^½ª¨Á¿víZÅ$VÔÝŠÔ×ñÞÙÙ‰#GŽ ½½÷î݃••<==¨V×zìJFF÷•<wîÜÁ¥K—zÍÂvïÞ=ÁÒÒ²Ç •ÇãaÍš5ŠLÓÂÂâ‰åa y™L†²²2H$’Íè.\@AAA¿JOs88;;£¸¸¸_ ƒL&ƒ‹‹ –,Y¢XÆ0 ¬­­i¨*V‰ŠrÕ§NBUUU¯snmm-š››áææÖãfºººX·n¢3µµµµR´˜$JFA_»˜ÃáàÎ;055…ÍcßCÈHÈÏ¿{ÞôéÓôø‰Žc2šwLs8TVV¢±±“&Mzâû4%„Bˆ¢‡m„Bˆ¢€BÑ@”B!ˆB!DQ@!„h J!„ D !„¢( „B4%„Bˆ¢€BÑ@”B!ˆB!DQ@!„h J!„ D !„¢( „B4%„Bˆ¢€BÑ@”B!ˆB!DQ@!„h J!„ D !„¢( „B4%„Bˆ¢€BÑ@”B!ˆB!DQ@!„h J!„ ôÀ£R²Q\ö‰IEND®B`‚PKZ 97 content.xmlí]ënã¸þß§0T,ÐîÖ²®¶L²Ø™ÝHŠ&»]ôÏ€–h›;º’ãx_¢?û~}’êfJ²n±œ8ŽÌ8&Eò;žC2ï¾tѦ!ñ½kA%a„=Ë·‰·¼~¹ÿilßßüé¿X _Ù¾µv±-ß‹às­½ð*©½ÖÔ»òQHÂ+¹8¼Š¬+?À^Öꊧ¾ŠûJJÂhëtnó­#üumÌh mѼ{Ï11ßÚ¦hÓµ1£Pùæ ¿kãÇÐ/|@Ý PDJ£xtˆ÷õZXEQp5™l6q£Š>]NdÓ4'qm>`+§ ÖÔ‰©lk‚Ì: '²(O2ZG¨ëø-?$oíÎ1í ŠP…«Å!Àt™`v{ߦ _ËÎÒõ°¬ÙZ!ÚYÎb⢨¨vwQQm¾­‹¢U ÉTÆÿÝÝî䊺]ûb´¨,J‚ÎÓL¨ùö¾ïçCe e‡«H’6I¾sÔ›Fò %¦¹ÕHn!ÇÊ÷Ý} <Š1~`"Ÿ+"¬i L’êœ8´kýÛÝígk…]´#&íÄcâ…òvÈ„.q:shk„y¤³(0ZNuR3]Xn²… a|8É Ð:òYkkkrxó.ÑèøÿQò;ëüZ°YH F¾…¢Ä6Ž´ÄBÖ’/L#‚ÃQAÉçÈúº¤þÚ³Ç$$±1è`¬#óç¿c+ ÉmÚ‚Éõ#fÆHâÑeænœ°ŽŒGÄÍzè&DMx)Ãá•f…‘Ý2³“˜ü’V„eIQ°"VV Ê’øË8iÄ4ÉFÔΡI›ð¨0´®ÄqâÚž!ì ÇYYúÄ[âaD¿(Ò—[²\Eì—÷ƒ%nÁœ ¯|JþÏ9cä%(Íïë0"‹m™ðÂÚ‘¹Ä¶ìqL•`þ¸ÄzË¡kòc£ M°×ÉŠ½,’[ì8þ拲ø2‡¹zƒ@Ô õU¡q\Éê›vZ°ýˆèWLëôñØ`èG#Œ¨ÿx¾#·4-…ÞñÁÜþYŠº„v[FºˆÚeÊÁ‹¨d(UnˆÍ|Ó¤ná_¹ÄËH–›—¥t¬¨¾Ó:|ÀK‘§°xY0ˆüÑ‹¥³gci…oeøDÓ0úáe¼ÜàÛDË‚Ž™#ßCAc黾Í3©rÖ€s—¦orr/¢GrEKäºÃÊR^B±Í×SŒ=îûlHòxa9$¸(HÑ_@lGÜ¿¿¦äà.ƒÿãÈ"Ñ6ë&AÑ%”2Õ‹ÁéÁAóˆŠ;}œ7éˆóqcÛ?†8æZøàÞåòÜìˆ*³E/ƒBPuay¹‰ñ­XôÀ–…VÏý¿Î–— ެˆúLícq‚ªOù|S«Ž^U”>£ÿTå ¢(C>¢¼„ëÑ%tÎLn¡K iqùc‚T–°¬˜xàÃG=×ÅOUÐ_xÜIŸqM±»è×8å” 'ú®f¼Ä¦ÄÕß0,P$²@´;‰ÌÆ1͵@@}ÁštÇ®âöŸ&v\©¿Žðw9¥}.Tó!g1gî§ÄÄ›Tó<Ÿº0„î<¨ÄÇãÁÓ¬â×WX'ìÌß¼-ˆzôWñsŸ ˆ8íÉ8¡î>ÊŠk|šªs RñãÛ寻Áø œÞ;ßó!a^7õöa² ØJò.ë ï]A’ƒh$3znÌkà,e£ÎïGrî;v+Þtw‰Ý#†=‹ŠÛûU%‘ ¥‡d ¤>rÇ®Ù~Ç£îÑáÅ#Ë‘Ó^€ß¯Ä©{ø§õð÷ô=´S´Á~uô¾bØLZmÑ)N÷w*S8’U¹¯•N~Šÿ_Q·Æ®.®Þ+!Û ŠçK9>÷•8²‡Èösyî+Áà‹ãýüŽÇ}%N{q†Xþï+aÓ‹O«Ï"§x:$L S»•žÀÁØI÷¥çkÇÁÑ(©dåЭ|MªÆ,§ïZøßÿÓŠÏ¢Ÿ·.˜²l¶ë7àÛø›qL™njÍw2iMÿ&ž\Óp{LFi› ÷nJq›0@</|Šó]¦¸†íÀ;hmòW-Ó>Û)!¤†,*g‰6 BÆY"¤†"jg‰Ðt0„Ô³Äg6>gj§ÁÒÎÔN›"tžvšíБþº 5W:Ì“Úþ´bîÛÛü Ÿàqó.NÏ`iàI¢Fšßå,]9îœËüOStÂÓ4œOÙ0ˆ\Œâã)»-|kæùÐIe@laã,½4Y,ÏãLòÂÖ!4g¡_€«cŠÌó„ŸBŽÊ§¬ÆA[–àþ:Jr1Söʆ¨É:c?+ÌRQtQ2²²G¦Cš–Ó“ Ñ0ák*­A*SÅŽÓJ4¯Zõ–¦ìdtkƒÆO^®6Æ{+–·gC4è»8¢Û•‚7ï}ÀJI#EžJéÿk¶NRñ·ÌóóGñù¨»k|›6/¨‡œÑ-™SDÁ‰}ÕlZP˜Ù>þèµüÑ»™Ú}Ú£òêcˆŠ^àhªFÌŸ]Çsÿ±]Z »Ô\þCݲh`tˆM¼å~¶MJ}Ov(ݼ+íŒ3·÷ùøŠÀ…ãhµvç"Î>§íP‚ÐN ”’¨Í¦–¼µe«š¬ì2þ §TåÒ UËAa˜„,¹šEŒwÐ2t˜Ñ ¬¨\™Q–{ŸÍ¦ ›EíM›í~’F_¬ ˆRW¾³;ç[’¬I‰½“*3 OC°§œL°W«Ï³Z–i]XfÚ>}6 Ë¡QÂtµ<†:ß‚e\3>|B4"Œ]OSèÓˆù¯Û]¼Äǧ¹džB|<ãä%‹Y“—´>©´Àþ*»ˆ ‘žKx}îñÒÑÃël#‡ÛØIÄý…e÷ Ÿe€>§J1>ODô¡¡ÏŠÐKޏøªz ž%BO·s¨‹7Ô¤ÕÙ¹ébå©G÷F;oEMßÃZIÕ:©ÞPÑÔøî»§:ýGAbõªóVF¦a š¿’KÊN "EÔ¤=f»Qƒ; @'ˆM'ñÑE]-‹š)¿áéPyQÑg'†Ð9ì#*Cì#Öì#&·`¼Ê}ÄÌ>Ó}Ä™8SZ·+루JÊ‘öë}ø,œQ‹Ù.Ôš¨ÈUˆÀ¦™¼POEYâ1JÕ6Y|-Ó(¾÷øjEñz&V´¡œÈìÊ4EŠ?à3ùQ éýÒû÷¦ª‰·Ò¦‰§7`njR®Øé &ÀΊ<E@é{·>²›œwmç¬Æc!¸æ PiâXšñv ugV{„ÔY².3}xvu8øÖÖ~ÐK‡`OJ~a•K•U¯-Ž_ ÏšÞÃåKZ•c5> 7ö§voæt~w†½˜+\Ãò˜¼jUÝá-…cØÞ÷rÓB1ÿªMÉ!ãÞË͸BžX:Æ ÌcÛšºQFN;9ã §‰SI9ó g¦›¢ ÚZ8iÛŽ\>ºŽÐÉòùb7Õc"§œ/r}õµ/v¯UaÛW×~2×smRäÎa«_¿lõ¿Õ¿“ÉSßêoˆs:\z–^ýÚÙ”oà*&S¸ùà{õ¾øZ¢Ðãpgˆ¸ØÃN9¾á‚vÞtÙØswîÁwó˜qò?ŒÊ|”F âÙµ×›_Ô-Þ,])8P¸ù+@üZùrû»ÓËþî“÷w‹ˆà(;u}ö×HHæ¿ù:Ùû§'…¿–˜}³}kíâø7z|ÞüPK`põwr§PKZ 97 styles.xmlí]K¯£8Þϯˆ2šÞAxåÁíºÕêVkVÕRIU=Û’NB俦Wóf1‹ùóKÆObž„$$ãj©ucÃ9Ÿíãs>løðÓûÖ½Á8ñÂàu¬«Úx't½`ý:þýëߕŸ§ù®Vž_ÜÐÙma*Izða2Bƒä…V¾Žwqð‚ÄK^°…ÉK꼄 x£Qú…ÜŠ–‹µmN„ÅÖ)|OÛ6Ʋ¹¶`ÙþÎDXlíÆ`ß¶1–E˜ŠÍWaÛÆï‰¯¬BÅ ·H½‚ï¾|oÒ4z™Löû½º7Õ0^OtÛ¶'¤6SØÉä¢]ì)×™@â›%]Õ'\v SÐV?,+ªì¶K·†¤ Ô«Q $‚ÌÅã²Ý…Ä6¹ñõ¶n=ºÞÖ50;·gD8?TL·ýP1]±í¤›šþ]L~C•ä¿}:Ž«xÛö^X6•{Qk3©´Ø> ÃLUÜ€Nv¢®¡iÖ„þ¤÷âûØKa,ˆ;âð ñp[’Ó'HBoxÈgvo=¿µÕH¶f€Àk =–†*s‹9Wü‘û]ên?~À^äe×Cב_ø¯ãO^AüÍоý âïüõ‹¿CH!×K"QxD%G‚sÄ>©ÏÊÐPFæú!šÐE(ÏW+V…LÊ*Vä_®¤0H¼ô€ŒÑ´¿ ªk@°Æw×í©ÆJ–aìb?‚D&­Œÿä­7iÛ‰`WÓmûʦ[ç[~€¾î¿«oË8ÜM¶Sщ(wÚzlâlVa½mÏf¦yë­éÑü-­‚ñ?ÇÈ‚ñ¹ì—7î ß^#mdh#S£åÈçnuT¦è¸lchâëÑÅÆ…+°óY(3¢e+€æ6Ram1‹ÙoqT3¯‡ßñuBßs©ã Eh¨»8öÒœm®ø¸$àÌiQ¥PȪ&nZ®wÐlÅŽNÑœö“õ͉ë­h¼ò|?³ +¼´ãà5 M‹¸8»S+ÀwÐ)¾‡P± ÓOUu>\¥¸¦TãõXCqÝ—xžë W¨ À&©òž72_y¨¬ä&-4üê\’Ôù^’“c¢<Ÿ+ËïÃtD+q9ZƒÆô'­RpÔþ:þïþ5®s‚E÷uæ—Ãvúã.’z.¶ºMšÔí`ŒqÊá"‚I¤ Y»”%DéÄ Ï0è¤f늖¨M6&qåä2{CHW§DÈê¡ÅS"4í !Cµž¡Yo™O‰Ï¼?|žÔO/zCÈzR?m÷ˆÐsúi]ë ¢éc9j¡šÅÓºô§‘Þ@÷F9ÇLƒ~ñ³BðçKiR‘/Ëò VLHŠ ¤í) DT†Î+úð@ 0p‚«GHz¡ZÄ[ *4 w)V'»•PEÔL7q¸[oFÑÜû.<‡¾`<-ãúÄ[àâ—ÈŠ‚.¦ìP•%{Öüzl†Àå™ J;Ò"zÃbR(8b%™c"Z%Ü 08R¥ÆD:©3²F„Œ ¸6€°¯C߃«)s‚Œ —@'Ý{)r¸”Ÿ­äd8- âìq²R`s.§mT}Ú•¹ÉhåNgÞÌéÐiÒHéœ&Úׄ“ùŽ7/ñÈP¼ ]s†åÈGc.늦Sò¬Û8ÇÓ烛ÎÊ‹´\†îážš6GFlu›!ïÖÙª?v °–ø½uu}:ä{k´Ê`m½Õ¡»™4î¹›‘WeX;’’C ´%3+™YÉÌ!ÉÌJfV2³’™½/B’™•Ìì°˜Ù×'`?%>ý1º6G}ß|W¯{A@ÕëêNO’ãÌäbnÜn>kn,7=ÈM˜—ÞˆËG™¿)ã/¥Ø|{vt™oâ—(ºŸV¹#´Jß­ ÊÊ#²8çL?ÃËìv£ìfÚv³öVëªøYì:Ø++óßo>v«ØÍn°³g—Ánô{‰¾k¤/ËÔß¹°OûÝê{c]`Ðgý€>íú¼¨ó‘aŸ÷û¬ì‹>ÔG†}Ñìón°Û},¨ »Ýì‹n°ëZ+ê€qQT"°†Š«\WüüIûj`?!J¿D>pà&ôQ>9ÊUÐÁ¯ã @i÷kö¶~Áz¨Ú”|4ÿ>`Þ`n™ü7cMfª®eeüë¨*Ãd ¼LÔŸöìÎ*ØêbfÞW‡bO p]7îÛ÷P¡ØwСØSÕZè÷í‰{¨P쉳t˜4»4$®VžÃ<`òñû vÈO#qGá|…¨v‡ŸÓÆ2M¯Y¬YòÅmΊ‘û1@Œ¹j[b9ÅÐÕ)!ï9 ZÂØã¨¼Ž}Ô‰"‘ÎÉAu },ªÍ¿®íÆ0lç\2Ÿ‹Z¢0Ncà¥Í”C27*mpÁ»T¼`MæY‹XXÚår<9ÄB›e»øÈãÙ_wu£·ØI­œ‹r½¹¯ƒ‚_äzüŒq¥È* Ó"äVôIFöd¡RÐ)TR| ¦ÓÁ£u|¿·ôV~@ÿc5ر*¨¯÷ÙØ¸5}O£Ž€}.Ï"Îtcº|•®= 7=ר®Ìè½ÓsÏå9t5 XC|<ú1À)ϪkƒÓÃn‡Ï×Ò,š|ÿÙµÔ,ìÉ©úIËW»ÉóÐò<ôyÉóÐò<ôpv??ç yZž‡ÎîgyúÙŽ©”÷‡7̆ ˜eÀ,f0Ë€ỸÄGÌ2`–³ ˜o0Oj·±Š-HRòõPZJbùà€‹ð¿éó-jÓ}X¡êzáµ²-døó»ZQá‡~ƒû&+ÞPK¤&E;(àl›—BÎo|¨Û¥¥ä¶œfÏ%‹õxÌxÈVâ LçUŒJÊd»Dö€1÷¤ó3¯!vT!&îFÓ U7¬âv4ü¸~Á ßÙ¶§üÃÀñA’ÐoØ+NôZ†ïlFlžäe•höåú¯zq«.½C6 q3þwÄ{ïxßÉÀóÁ4úSŸª }ÚÑl7MP® f7¹®Æ½©¡©S]¯Ã•îxºæH¥w¸)¢·©Í° »Äz°´ññòðÓéŸ?¬Ó9²‚À¹À“k¤t‘x~D§êt1+j©úÂ5Ô¹m xZªimÓÇ{ó]vz¶l]W%]Wõù¬B§ÝÞV§ÓÅÝn_ìÝDS@¿õEðo}ÿ"úâý'UщXˆÕ«:îÔñ蕞xrþE”,|ë½= ÆTÕm»ˆˆ©Nµ™ˆˆ*M]˜ó:wÇ4¨;2À"ò‚#œÔ{û“&ßÎw©Õ¨›S»ÖlKµu«Îl¦Å- úŠrgêÔ(¹À1µ ©¡›µKÝ9‘Yç ¢·Èì,€Í./ÔÅ|z `älòήâÎAšyŸ í,p;k­F/ Í´ù´5º«åL"+iXp²dº°˜ö¿Æ ¿jÏ¥®ÒTk..2ÈûêBOáXÜlê¨,h¹P°¯·tÐ{®s½¤·&¬!Ž1U?®4Z`ͪ4gZÜb™è)Ï´UsV^+UÓ;喝³0íä¼ZaŠFša´Áõ±‘tÍ;X-&V­³ybä,`¯?l›Á}ð%wR^s³QÈ Ïx±:»mv<'ùø?PKG X—µÐPKZ 97meta.xml”Moœ0†ïýåj ìn»XàH=DŠT)•²9GÄž¥nÁFþènÿ}±Y¬ràÈÌóÎ¼Ì ”×®þ‚6BÉ*Î’4Ž@2Å…lªøíô„Žñ#ýRªóY0 \1×´¨[GƒT2¦ªØiITm„!²îÀˈêAN²¤Ih4F®­ªø—µ=Áør¹$—]¢tƒ³¢(pÈN(g3×;ÝŠ3 -øgI†'Ö;ÜjʳKK½3dk†²­ÆR³¬¥”šM{Ù8€`=OÓ=Ÿ'Út¢ÝÚѳˆ©®z~´«™ÖRt[Ëxváú¶ ÕIÐiÿ~P´ ãj@‚®­Òôe¨ù²x«$ø!¤»FëÄ{¯Õo`=¦]¶øîDËQ‘íö%¾«8v`‚/Äk tÖ7”(?œòI3’oº5WrF>ää—xJzª­eãê(Hôörsht\ØáC@ìkÁÐôÖð.¼f¹ÓÁ ýyJ_ïsn”8q8 < ¿§*~–ge1Þ‚åÛ°Ý6l?có—nüI+Ø«¿Ãá윴U\¼¯®ö¯ ÿPKSŠ58±iPKZ 97Thumbnails/thumbnail.pngíWû?Þÿß\b¼…Ò…\º(ך[îÌ-÷û\’ËT®o„ä2ÓF­„·K”%lIèFnÃ\b1›(·Q³°Ê&Û|öþ|ÿ‚ï/ߟ¾¿œÇyÇó¼¯óz¾Îë’åîj'!&'$ìm<  èÝÇ_W™aüó%K¯”2&5*΋¦@ÜØ[jW>j‹Y}?ñ¾¤>ä2*ÝpW6Êdbù£ñTI×G"å†íŒ±ÌèÓòG«šK&]R Ž£ o}¤G÷ì‡Ú ¢>ÜlÂOGl¡%TJ-®!ôñ»{È0+ýR²ÑÈ].—2MN ,ÙTzŸ@)’€î@¿*ÀB[ àþ@¦òÿÅÿ•øùHú='oûh|4â³Á—«¼VÄ»ïÙ*É1O(„?úˆÉ¼î0šbÑϽíøé> Í@P³íZ~%³ ŽËXìzð³!cqwðÙO¨Ð\%`l˜ÇÍmL GfÙØøÔ¾¼?6f 2² ‡ÒQ®¤ß“ÞöI-nV ÒÓ6ø§×gÆþŽŒ9YZæ }1®ª×ÊüÙ÷”¯d›YB~lÔx¹ï|µLË39CȵSžU³TqF°°­˜WêD{üÁmm£MüoÜPI‚‚§÷f&¶Tó|QNj±;‘o³ƒ6úË ¯–µÉ@ßsýýpOS}ß“”‰ÎŠ ëß?U iî—.•Ÿí:È{­‰û¾ÛJ>°A§?óf« ¬{"—ºv«ð{/jkµQŠEu”çiëøOLÖð5¨#á-ú6“ûóNý…Þå¦7vÑm{ë%£.i¬¬7Xà x(•ÑØ6Gwzs„#ŠÚtDªCaÌÑÂ>­”e|&ë²P#Ôa¼g¤øµmTQ@K]0Øq¨ θ ì¸ yä,qò!!R½ù|ÿ|į#O‹q­OØ-}l•”ôu T`êêž—½ŽÂpqCm¡…˜¢³ åÛt1uŠVÒ–±{ù*ªIä×£o@ç¯äÏ¥ ’.á15}Ë‚e p˜åßt.§eØãL_ˆ–Fm¯›tJ>ßÚÌýçùd2'$PkÉ.l…!üH%@™˜“ ÙÞ—C̆@ü‡ŸußÄ?€üe |VŽ-‰…”ñ–Rº,ˆÜ2ö0§r¼‰¹oB“›ƒ›0q»c+Xœ ç^`ì(«äÛz/^d=7²g0Ù–/®œ'©@fwóÃLnè³ï.µÉçÅÊVò êõ þqh¿Y#)pÖšŒR¸¨„§ÜÜ F„ó-m¿†øF åf$«¦+oéhVžø´–¯/cq®Pì^ØWɲ;%Ö-¸N€…ï1||ŠÁ"ûõ7iEý¸ÒÓá”SŸRGÊ}ÏÌ´b›ÃHàƒŽ;Ñê£çÒ¼ÖÚjlƒÌúDLÉš#¼m[8;¬{ÏuJE…„ÅÔ´«¾p- øº‰ù­ƒS m-¢ž|dÌ~§„û[=÷ÊŸînÏCšÑ™dN™}h(R×àn’`Œâ•åƒ[ß;Y+!«"*´¥ÒR`²sÖäìÕ³µÏm¶À”l‚§÷y[eõmª­¿̓‡KNä ‹H§±¢$Óð7´"ïì* ïÎûÕK¿þÛ;ÔóR!8ÑušŒõ>yáN"áP¼Ø™ZÌV|Ÿôxí¼­\!p;jKÞˆÚ{eÕžOáIæ0èõMs8û%BWá ZS”·ç¹L2áqÉ)Gxlœ‹2+u˜Ý™Úöc‰PU’ʫ㣢w9'-\\r¸Øù‘+`ÿdt¿ÓSœI8ß=0™ô¹@Iê«‚˜…m’¦únþ ™þ"æ2Jo¾ $wNÊF¬uuQÛ·r+]S2Žf„õbbµ,‡Ñ‰OÁbÁDQ©µ¹•€}qì¸&Æ”˜>"B«Èì:‡û¥š+Ûå5hŽìß®mß@|ë–\”47<­9<Øž¸BRÛžÊðÕ—/$*•kÜ6ê,6úŠ7ÛùNÜüÙ7iáÎuŽ7gíÞ<°Æ8Ã4¥©0–Ú103匉5ÒÒqq‚vPµë¹“+à_ÝòœÍ bø³.óã ÏåÙ¯=®ÅßZ%ÉñŠçµüWÍ•p3­¸ÂS°fûªƒÝPÊDʧ¥ÊFÆRVáj4ÈîR—™2Y§»ñ>Gýíw³1eÃ&2i;x8D;½36&Wh¯ü·dÜßl‰­Öœ ûrÖ®_¥ƒäÅ;DöÉ䀒yï¢U—!·´/§5p¡8‚žÿã2³×PJhÁíœX0`IjÊ5üÕ¡¿s~1Ìi``—!0õ'1‚¦0ü×h“K½8¾ŠŽ×ð–¢ ÷(ñd¼jº¥Ö‚ÁI†°R6+¨Å_“c«É¹«–•W¼pgžŒ†´(¶ò‚~æHÒÎ/( ËtîûØÓqeÖøM‚öÅ»eXFݽ¨r÷®À»¿zÝØº ÂÇç\Ë]&CkÆŒøŸ§ÃèlJæ*<):*âMlµÜÒõüÃfè¸l_.ù½v²}5SE ùH¸ Zç÷82ûxoþ¯*cñxTéÈïpÒµè ©/Àéz+ÇØ>až0@z˜ àÉQa€ª-íH¿ò&î‰È…&˜¯DŽþ;ÿ9\pµ©³ ¾õPKÍà ‡³ PKZ 97 settings.xmlÝZ[sÚ8~ß_‘aöawv†´iav BK(áÚð&[ŠQ#KIŽ¡¿~%YvCe¼ÓY¸XÒ÷£s¬s1W/}röŒ¸ÀŒ^ÊçVá Q—AL½ëÂdÜ.~,ü]ÿíŠ=>bÕ sCQYHJ5Eœ©åTÔÖÃ×…Ó‹>5éÖX€èvYmwv-&[_YLŸ® )ƒZ©EÑytqθW*W«ÕR<ºp$±ÀÇî®Ù¥u}ÄÞ±(ëÙ»ëc/BëkÅbÁ+–õ®´þ½-|LŽåÒs‹.ó%³C^í Ø?FÏÝÑz³ñ¯Ì]ßÚvkÒúÕFÑõGKäk{Ÿm.k¾ë‚R½öŒQôâ …¤u¯×L±ÐÊØ1 ÛA¹ Ô ¦²P/V.ß_•q~ »‡exµ\ÎŒ=ÃP.’À+V¹šþao‘(|å¢l}8¿èƒ ˆ)DK÷¹P”lªxò¾:FbuមBrå…ºö Ãîp »b³{ðcZ¨?"Pü6gtOÞ# ‚1Ó,ið’‡ÑÀCw€{˜ŠüHô{S”Jq‚múâ|C®lsu1w–S7Q>Ê H(n… ›D`•£ûj×U_n8ðFêV#éæ1÷€Á>¦@¢#«xÛzê‚´5]Ò¹T~oY¦Úråa¢=z`¥ÂÞ>>èò]C ÁW…zéè×Çk3YꈔàW‘¦ÇÜ'ߥô6TŸÙRÿNì³&#ìPÄìÎ> ây}XVx?T.W÷Žá3BDijðd`ê+b_¸c0ŸÓ«½ÍI™ ü •›»Oc´”-ˆS£|–4€zhÈÖ5EꌆH ²(ÙÈï xµ-ÚÂ#©Lø¾kƇº¡cn¡ûL˜ø¸ÚyX˜˜gÏìÿIÅpîH>šçáM¸@©Ò—+ …ÿ<]ölèm•§ ~yaè/[ät©3Aët8úk?ô’ñ9neqn—Ì’¡>|áxøôxÈG®ˆóiMÓ¢:L­³D…žCÚ>gÌÿBrcdN¸¸ÛwHÞ´2’'$oY­/„<Û?Ó»²ƒ€¬&ñ AÖj`©4kg˜ {)­•ßÿ•nJbÂÏsÌXUÃÊ%y“ùºIªÛ‚cEyÒ|5ÎÞ5sÍHo€XsBCNôB"íH&g?wÒ›xmÆ !¢/æËÞÒë©|6L((6{…¨©íCÍŸ‚:æ'€cpÐÃÛ Q­6‡©îo#´(üáú¬ÝÛQ @¬ÀŒ]Ü3Ûù[ ]óûja.?#Nm¡l>©+Ã¼Š®®ˆ4 ÆžʧE¼KÐîSê.ǛݙIT0̧U°Fç Ò•—ôm, ó˜# ’ ÖSÄa@+‘ËÀ˜#©š?¡ _BIOÒèÝéçõ!fc‚òu¤1ÎE~ÂT$3>ÏMi€C £d?38UÓUÕ†â*QòAb)mØ<¨|Ëã XŒBßÏ+ Å¿Ár{²tÑbXÄ»*ÅÐPÉC¬O§­Õ ‹Šª"`$Ôjf¢L¸û¶,DÇîÙff&š’á~Öýú‘Ê̾ý«dAâøÓ˜Ýy“ÛOC‡Äõì_ò5±`{L£éÛSg¶}§ªý—ßm»=Ÿ¨Ï'çÞ¶G~;mëad/›´¡toÍ¿v«ÃÊ4œý<¬÷®OBØ™®š~UOÕ÷¶fÕp0m<»t¸z˜«é÷ŸÝ!îwkÙôË ×‡ã€N¿ÃN™8ô¾z׌¢Þ-îìà›SY>»¾ÚßÛ!Œ»–âþît¦•ù,ªîŽCŸ|›­¨I÷ÃVÿYÛµ† Øi}žtÚt>íÈŸ\Ž;SK˨ô2|ä5  JYTR䑳ô%µ Q:ø+M)íSõPK›+Cj×z%PKZ 97META-INF/manifest.xmlµ•Knà @÷9…ÅÞÆI»H­8‘ܪë.ÒÍ LòFK´ÍÝ"ÉíöþDóù’©‹)«mËmuÇ˦m“Ubñë°HÊÖ‡Ïq4y¢yÁÒä~j"c:¡I†,YÞOÿñø“6›~|øÝ‡t±`½ Ó`Ó¤Ô‚4)áuÚIqWÕÞO×yr—’‚w ‰iqWwiF“FëN–¾mU%E¹« aY»¤ÏåPe.ÛÑ%óá- aY;ÌÉf¨2—PeõE:Tù¹ˆ´E ¨Ç)ÙžÏK¾ÞOWe™Ýéúf³A ¥ùR7}ß×EmkpÐÊeë<Ra ÓˆòÆ ÝD¦ÞÈÆ´$Cíã²²IÉ:žÓ|04¤$=¯f9-@ºËæ° É:ñõ´<ºž–`V$<΄pw¨Xáð¡b…²nLÊÕÿÎôÏP)þ|þ´Wy<´-.Û*ÈY6¸›•´¬Ÿ¦ik*W¨‚]˜‹ ÃÖ«Ï’ôæ¨ø&g%Í%ñà¨x@¢ E<_ äL$4úć|Dˆâ€Ö«êV¸^úŸŸ?} V4&;avZXcIQ’d‡L³h°@öÀ % <¸¬:5Mw憇f"¨_èmY—)×4ÉÅÇ*¢ÅßIõž7~? 3sZ,X¾…¢ŠµŒ,é´Ñ” µ,ƒó’ÑbÒ ò9 ¾.ót„Ú+˜ ó2_Œ‡ÄÒù/4(‹£â!+²ˆlrÓ’ÓØa]Cw ‡ä¨V²¸i Ó%ˆŽá…Çë±fEIx¢gWÑùeÞ,Ëœd+4ÅÉyB">h•¤äa M­"£ÂÑÙ¨m•æìWHiH¤‘ˆ-a´ÿ².J¶ØN÷Ÿ¸z°‹YF´–â1 Á0Û¼l¹*LÎèmÏÕ#ö¶(óô+($iÃDW—uD)8ð÷†øWwfÁ¢¨‘m ZÑ…ø·Nƈ.ʃèT#k¯rÃB>ÛÕ£i‘ÞÅ,i5 4³Í nËkaÙö ŠÏÚz7 GGóÍ0±ar¤Ã5Z9pEÆì׳ƻóÑýÖAëþ†(*ë²ÌøGºü7º ë¨Ô*ÅÉ~ŽC<²&FŽg?÷{Fr" lÍmKdƒ¡eŽ~x=‡œux»=ÒÞnLò%tš0AÃUa^óC]*LdIÖU…zsqQÓ½îFšÖ˜óSNéš³Ekç®V[Òª -/6¬(:+`¢'’3¾r>‘;ß("í…7õ¨§QxN=Æ~-NÈŽ”VI·²GòoçÍn^‡“‡Õ›H~[@µæY0ø,+‡ƒ÷ØconöôjýØcýAö¾Ž({„:¨±Êgå¥LõØcª3 8s ôèæ› „A}ÛÑ+êL©ÓOæTˆèê„j¾Ž"ZNªJ^ןV«*ï?ÞOÿ÷ßÿ î÷È¿lcpkÓ­uAa1‘„i É:k³-©w¶óGѹcæžÑ|ª3ÒE¤. "#\”.Òœ¶›¨áÙaDæ S/‘ÚyìûCÈ !á›DÈ¡ÙM"䌆FöM"䎆u“øxãás£<= !ûFyÚ¡ÛäiÓ "çû"j©ºN˜õƒÇuÅ< ·íygòáƒØ=äGVÕ>b½Ÿ ŸÍi³o¿mw+Å)¥(IKäú¬KÞÉ܆ŠÃá‰8Jß¶Hƒu!dðÊ,ƒEDH X{kqRiûU´ ®+’ѾMâ0¬Ýìíl®þÜÔDdËãà%]—Õ)Oí^ ÍÄ1/j6I-dz/¬®š“¤¨nÈS@Nþ¤™Èñ Ïw-ìz¾ãù?L„T$jMŒ|ßâ Fޝ?4+–¬éMVüT;„•SÓ2ߊæŸÝü5}†!71&Øtúoƒ8Ëó4—v¼[åêfŸ»[¹ŒÖTËR–”œ™Á›0&Õ»ê¯Ô`U"ƒÊ·ÐAóãšTÿmþ¿‘Øf€õŠ>“%ßꮬIC¶`4%Çn¯Õö;÷n|†‹p3>Á«9é4.JªÏ\¦z×Ôýkò÷iƒä¿×b˃wÑÖÓÖ¹ŸþÁ˜´ƒéE s_C4¨ÔÃ/´ôgÓ0tlÙÇ5­}Í <ù‹éVGõì—-å^iä0ª#¥z¾/XuÏXX¦Ù´S cÂøYòcñºq ž¥7¡UÓY3]ÉsêÀô#ù­½‚‘ëì[¾­_yå5^q¶Æ÷ V^¹Ä+ÆuЦbeÜyÅA°^»Ø-ÆÁßOTnyÕÄ2Ž[ÿ¬¥rË«f–qÜ‚oÝ-îA·¸o1µŒàçèÀÞˆ[Þ~Æïl"ÀTãŽ0³(Ÿ\8ß»£;ÅTN¹tZ±Gw VN¹0óF÷‰¦"eÜåJ›(_:«`å–—+#¹ÅTnu¹2’[°r˘˕‘¼¢}ÇÑr €X¾ú°‹-K–,‹n£qÊÂõÄ 6äÓ9ýÅ'bé‡f5ŸÂ4XÇT<¿+)áõáÿPK³WFÍI %ŽPKz¢97 styles.xmlí]˲ã¶Ýç+TJÅ;R|éé¹×eÇåd1®šªgë‚HH¢‡"Y$uu5«üAYäÿò%Á“Ÿ"%J¢ÜTÅ# AvîC€üðÃûÖ¼Á(vÿe¨«Úp};p\ý2üíË/ÊløÃëŸ>«•kÃ…Ø»-ô%NŒ¨±/håËpù‹Än¼ðÁÆ‹Ä^!ôy£…(½ ·¢%äbM›a±uß“¦±l¦-X6¿3[;Ø7mŒe¦bóUдñ{ì)«@±ƒm7§Å»çú__†›$ £Ñ~¿W÷¦Dë‘>ŸÏG¤6UØNåÂ]ä)ÇAâ›Å#]ÕG\v ÐT?,+ªäï¶K5†$ Ð«ac$‚ÌÅã²Ù…Ä6™ñõ¶n<ºÞÖ0Û5gD8;TL§ùP1±í$›Šþ~E•äÿ~ýxWѶ齰l*;rÃÆfRi±}©ª¸ìD]CÓ¬ý-HïkÅ÷‘›ÀH·kÅmàÙ)âÁ¶ 4$§„ßðOíÞº^c«‘lÅ ¾Ûz,+ Uæ3®ø•û]ên_?`/²XGÀqÑuä¾ÅËðo¬ìwCû}:¤5އ8(Y‰¯f^ù¢´ [d› Ùûgü±*¤Z±"™6®Ÿ@?v“Ò\Óþ"4*¯þß_}Dö¨~ÄÌÜ€ÄÞˆ6þ`õRIõ@ÏZ»ø>¬¬Ô.t‘øxùÒTͰ·¬8 ¸ïÑRV®ç)¨ÓÖPTë'7Ù‚V+ưjÄ/6\½ ?¹v²Ck¤kâŸ!ü×Ôæ¿èUCÍ›&‡Xµ ±U´,ÞàY‘Ëux@— ’ üpR ¶ ú #Qû£(ØÈï-Þ\¸ÿ)xG´¡ L–#ǵÕQ™¢ã²¡}K¯'Qð*ˆ3=õ3úñ0JñÀµ#ÛO´.$±ŽÆŠøSñ ¿Æ^0ÓG¸ÊÈJ’ùNFÐ%Ç+°óX@3 e+€f8®h¢…×rÙD€”)a„&t”¸(¢U8°PÀ. âàÛ¸ ¨(ð 2±p瓞AKÙ£êcWÒz<•eZж.…Ö`OˆÆ²² À £lÎÁJiÊ‘-K³ VL˜ž³P6”¨ }œL+ô¹‰ÀÚà6W—0;ôB•ˆ7@Uhì¬Nz+¡Š¨™l¢`·Þ(Œ¡£„Ã]È}ÆÈZÆõ‰¶À;"Äó1‘!;]D)±2Kö¬7øõØ ÊŸ”Nû¤;DôúEQpÄJ2%RšH´J0¸F wLR…‰_Ted…pn`2-‚ž‹9úu‚ –@;Ù» r¸”U/%¢8 ¢ôIº’£°ZrU%t”ªÛ2RéÀ®jZÏUÑiRKU&Úׄ“ùŽ77v—éã¢22§–Ê9Aäœa9òј캢é”l7Îñô¹Á঳ò"-—s¸§¦õ‘[Ý&È»µ¶ê]Œ†¬d»og]UE‰yî­2X[wuho&{îfäUÖ–¤dŸmÉÌJfV2³½AH2³’™•̬dfï‹df%3Û/f6KrPf n"R=Í-«UîˆMÒïaSå¦#­¸Ç¥ cÔÑ0…Ê" Óîv«ìŒuýAŸtú¸èÓ.¢ÎG†}Ú ì“v°ÏºXPöY7°OÛÁ>ïbA}dØçÝÀ>k»®u±¢öwE%k¨xà€°Êtŵ/ö¢ô"ô€ 7‡òÉA¦‚î~nJ»wX³·õë¡jcòÑ@üû€yƒ©eòߌ5™¨º––ñ¯£"¨ “}0ð2PÎ'wVa®Î&æ}uÈ÷ ×uã¾=qò=qò=1V­™~ßž¸‡ ùž8K‡Q½KCÁjåÚÌƯØO°C~‰Û ¯à+D¹;üô«6,‘©{ÍbÅÊ-nrVŒÜbLÕ¹%–sP ]òžâ¢5!ˆ\ŽÊËÐCÛ éœ T§ÐûÀ¬ÜüëÚnôÃvÞÉóù°¨D ¢$nR@1$s¼KÅõ×dž¥°ˆ……].Ç“C,´Y‘ƒ<žýuW',p‹­Ôʸ(Ç‘û:(øE®ÇÏ—Ь‚ 9!BnEŸd¤OJ@%qÉ·`Zü¤Ñ÷{¿î)£q_úF:ï¯ MX-3¥âѾ¾ŒËj Å¥Ïú …9Ÿ¶ƒâÒç·†¢ëiÔ°OÅYÄù‚v B›¯Ò5§ôºçå•) ·z®ñ©8‡®ëaˆG?8ÅYump:ø`ÂíðùR˜EX³“ï?»–š¹ý/U?êCùj7yZž‡>!yZž‡îÏîççn‚hº›¦¨F[PÓ›\Wã^ƒÔÐÔ±®WáJw<]s¤Ò;ÜÑ[ŒÔzX…]bXÚøxù×ï¼ä{úÏïÖÉ÷YAà\àÉ5’ ºˆ\¯¢cu<›ä5ÕùXÀÓP§sK€ÓR-‹ìš>Þšo²ÓÓUëª麪O'%*Ýæîsu<žÝëîùÞÐMUŸë7³=üoŸ‡^¼ý¨,îáÑ ý°veêb½4Öѳ±NƳˆ’¹¯¼7ÇÃ#ÓæE@ÆÚDDD5BäMü3sRåê˜UÇX4žs‚£jOÒèã›ù.µuôl<¯1ÜRçºYe8Ó㦇]ŸulN\àm˜³Ð©FáœÀ¬u ÑY`vÂf„gêl:>…0ò8ÓqS„[‡hæ}B´³°mª5½(0Ó¦VSp™zJS­©¸Î ÷« …ñÚŽJã†+ûtK ½§ª1Õ zhºâSõñ<0°feš3-n±Jt”dÎUsR\,Ѫ vÞS!gaÚÊw5Â4Ãh‚ëcÑ!5èšw±ZK¬î–Ü;±"g{ýa[îƒ/¹£â𛦉BBx|r{@À‹ÀÞmÓ³9ñëÿPKøóľ@­ÑPKz¢97meta.xml”Ánœ0†ï} „r5–4‹Dê¡R¥J©”͹rìYêÖØÈ6ÝíÛ›Á*ŽÌ|ÿÌÏÌ@õ|ídôŒZÕq–¤qŠi.T[Ço§¯è?7Ÿ*}> „k6t êÀÑh”*K¦TFM­°DÑ,qŒèÔ,!kš„FSä*…úSÇ¿œë Æ—Ë%¹mZœ•e‰CvF9[¸~02Pœaà;Xœ%žYïp¯)Ï®-õ옥. e_µf]Kk½˜ö²iÁzž¦žžgÚvBîíèYÄt×=ßåf¦T‰noÏ®\ß´9‰fÞ¿TS…qµ ÀP§Mó2Ö|Y½U’?|j¸FÛÄÏÞèßÀþ|L»¬xø2ÉQ™Š ßUœ:0ÁâÔA3ë ¥%ÊOùd%)Ž7Ý–«8# ³ ÏIOIªÚ¶Ð€Bo¯!·„&À…?Äþ1 ¶Io ïÂ[–&¸i~œÒ×;Á’›$ƒƒ8œ……ˆßSSge1Þƒåû°Ã>¬X°åK·þ¤­l‚õ»ßáxvƒruüêâÍuàþÍPKdÌì­®iPKz¢97Thumbnails/thumbnail.pngÍViP“IþˆF4ŠR˜QNQA@ÀD!؈Â5Ë%†e¹&@Ä$@ƒƒ CÐ1¢¹ 923`pÁ!äHȜ٪ÝòÇÖþÙ?]ÝýÔÛÝïñ¨Ë1ó­ºàFb¨Mý²Í͈ßž!S¤T¯ßÖ«wŵֽçUoê ?i;hú¤®7rµÁâ–èÀ[[¨”q>/°ˆîüj Ánψp‘ÔŽšÅÞ÷4+á„0NcNX~˜Ú=MpVzçÃ'½‚g&Ô8êÓ`п¿£Š)sòuý¨Qq §m“=…Ͷ~È£†…ö%#-÷«ˆ>÷†Ž>}µ"‘©F·‘~ÒFÊE³U”x2±Ã2|Œ~>NÙü®)a #hW0vÄEü¬ÂšK–nÌ>o-Ñü<ÕÖZ¼Þ`Ë먽`ÄGôöí7$Ïeên¦'òŸí«¹š— 2ê[_ίòÊ5¼»"¹yá²r‘IžÁ îfGš}£W•¾×TìþÀ°qJ.—¬d˜oXq‹[EcB®Dâß­­OB¾ä—ÝÄ^ª–õÛÉå‚ù_î¢kRЦ5š—º”ˬÍÙê yŒÔ®­7ÇÏRꮼw~<è…¹«=2n5ÞʉZ¿i̲í­oRÕ¡%ò7–&L"¹½«Ë<9@(®(|ÛöF__ü(zyµÓvÑé+eÒ‡)[¯Ý­ËÁ“ó+¿áÍÙ«0Ë=LÝÙ}NÀkk”ÌÀÓðááá=O w—ô]¦ÖŠ•ÀY¾ãÊÞÅHÒ éð¢-ûð8†÷’J’逳˜YÇ-'2k™¢ÛÏ Íjx»íK–’kÝsM×%d~Ÿöe÷¼!!ú_Ê |< jÛA°»ÎTþhY_½T’MEz-tì3JOœmŒŠÚh—MsF¨m(%è€9»¿ß_˜…«ÆãÃþÕÁ$z]:1ƒM‹s j| IÉÈý¡že£5¡‘å×mS³ fS­:×™:Ùcy¼sD[n®ë±aS#»ëhš`lix#&³Ç²Ÿ+>{çd²Þ–LmE®Rд&\v5DÈWB\àŸf‘|>Šk+ ¡¦æÚ°2Xæ(<‚kˆÂ÷o•äJa¢`½}ÈšœEJ׸uáj™ibY ®kƒcß1Sg‘„-º~µo3@²ÁZÉ®–%^¨ÊÀʰ!¥€:Týû÷W"ý‹Íö‡r ïÞ úšß—Å#…ÐÒ}5H°ŠÆú7£$§ŠHB¢í}²¾¬ù® JõÚ ‚Ñ«'’Ö½]3AB+csF,(lå2PƒˆÊB½rþ᪴óSÐ]ø$“°/Ï*ÙÁ§È“ó$ôòÅùevø;ˆüy¢ôå‹‹³ËCñ‹ED=¸€Þ.Œ’M¯QžÃ—‡H £Ž·#¦\ùA¡®½¢l¶m޼ŽXïǼÆ€êO ˜¿ÅÝÝãc wÄ‚`Ä4K¼äaFô>ðá=à>¢"?ýÞE¦Ra›¾8ß +[\]Ì¥ÏÔM”2}Š;@= …#°ÌÑ}µëª/7øCu«átó˜{À-FQ aŸáe¼m]uAÚš.ñ\:·,Smö¹ò0ÑÚ]°Taoxñ¡¡„àËB½tðëãµ™,}uDJð«HÓeî3ôÞ¥ô>TÙRÿNì±&Ãl_ÄìÎ>1äy}XVx7TÎW÷Žá3„XiÐÓàGîˆØî™—ÏéÕ@þú¤Ìþ†…ÊŠMŒÜç\È[¥Fù,2&hÎõိjŠÔbäAч|À¢d#f›z[´…‡R™ð]׌uCÿÙ@÷˜Ü3ñ1pµó°09=Μzÿ/+’óœ+’æyx“.`ºô•KCoùü²gBo©Ì8Uð‹3ÃMß §K Z§Ã±Ð_{!HÆs且Ź]2K†úð•ãñ?Ðã1=:"Χ5Í-Õé`j½˜%‚(ôÒöcä MÈ=‘9áâvß!mxÝÊHž  <¼eµºò8lÿLïʼ Èo€9X«¤Òt¤a<覴V~ÿ#Tü¹&(‰u?Ì1cUi *—äMFt“T·GŠò¨ieœ½kæš‘Þ17æô 9á±T´C™œMüLÜIoâµwçAúj¾ì-½®ÊgÄ‚b½WšÚ>Ôü)¨ã¡a~8{=¼5êÕjúˆêþ–1Â-õ~¸>ëA÷~”R`Æ.î›íü®ù}57 —Ÿ!§¶P6ï‡Ô•a^EWGÄ šcÏæÓ"Þ&h÷9 u›ã‡ÍîÌ$*æÓ*X¡siÊKú’†yÌÉë1 â0 •Èåa@Ì‘TÍQ…/¡Äû'é ôîôòzÈ3Œ†ù:Òå"¿a*’Ÿç¦´ x¦l­©U|/Â%Ǩ x> ^H âÒz.ƒ÷ݧÆl&w%ÔÚ ‚Dpg]p±B"¼·M,±t'Ý…ž NÖêdpÕŠ¿*j…Ã¤Ž‘ìï}ƒéþž"¨B‹a¤¼™;Ó<¦¿)I!V_̇Ïr0>Í_v‹mÑ!¦ÈéÍ8’Fp&Þ5‡Ô˜Hú_Wú‹tÑ€“c[ 1YÝ„ö`„ÒÈé:ì¸ði Dñ†¿¥vÅ\ðëOPK3“ÊáfPKz¢973&¬¨//mimetypePKz¢97UConfigurations2/statusbar/PKz¢97'Configurations2/accelerator/current.xmlPKz¢97äConfigurations2/floater/PKz¢97Configurations2/popupmenu/PKz¢97RConfigurations2/progressbar/PKz¢97ŒConfigurations2/menubar/PKz¢97ÂConfigurations2/toolbar/PKz¢97øConfigurations2/images/Bitmaps/PKz¢97Ï£€ï[[-5Pictures/10000000000000200000002000309F1C.pngPKz¢97³WFÍI %Ž Ûcontent.xmlPKz¢97øóľ@­Ñ ]styles.xmlPKz¢97dÌì­®iÕmeta.xmlPKz¢97Ñ:x¢þ ¹!Thumbnails/thumbnail.pngPKz¢97·¨–!Ðz% ¡*settings.xmlPKz¢973“Êáf«0META-INF/manifest.xmlPKIT2fifengine-0.4.1/doc/diagrams/concepts_pather.ods000066400000000000000000000333131304641216200216740ustar00rootroot00000000000000PKì¤97…l9Š..mimetypeapplication/vnd.oasis.opendocument.spreadsheetPKì¤97Configurations2/statusbar/PKì¤97'Configurations2/accelerator/current.xmlPKPKì¤97Configurations2/floater/PKì¤97Configurations2/popupmenu/PKì¤97Configurations2/progressbar/PKì¤97Configurations2/menubar/PKì¤97Configurations2/toolbar/PKì¤97Configurations2/images/Bitmaps/PKì¤97 content.xmlí]Ysã¸~ϯpi«ò&›x:3³Ù3;›J2»[y¥%ÊfFU$åc}xI"Á¦ < ©=U3cÀ¾ÐÝè¯õáÛ×ÕòæÙâ \œè·ÚäÆ_ÏÂy°~ü8ùý·¦ÎäÛOù.ÁÌ¿Ÿ‡³íÊ_'ÓY¸NÒoÒ§×ñ}q÷ãd­ïC/âûµ·òãûdvnüõî©ûêèû|®âJœ¼-¹ÏWŸNüׄ÷állíYïæ|põéyä½ð>œM‰Z}|ò>ü/§‹0¥újã%³Š×e°þúqò”$›û»»———ÛzFwºëºwùÝý‚gûq›m´ÌGÍgwþÒÏ&‹ïô[ýn7vå'ïú²±Õ%­·«?â&—x ®ÆÏÜñüØBšÙ“qËF>¸Î^:çg/WŸ]yÉS Oœ»_Ó›ù_¿~>ÈB´â+[#Õ, 6ܯYŒ®>†á~©Ù…‚æË%šfÜ¿WF¿þ‰U†ÏŽŸyËÙžâá "Z:N¿KGLýçLL÷‚Ÿ"ny€Ü·÷ƒãyëGÿ÷×Ï_fOþÊ; Þ< Öqâ­3Ê”&­fG?íŒfAðøna‘Ïé›ùÓ¹?[ÆŸ>¿¿|Süž1ñãä;ÿÞÛ›/Þ:}•TÒwÃVÁòíãä¯Þ&ŒÿVS\˜ÜT>r$³TŸ½(È ØäŽ{BýÄ‹±ÓGíGAÊýø%ˆc™5ý3X=lã|º›Ï­‹ªbY*®Hõ'þê½EݵIRyÝÛ&aj‚Ù4ÿœ½ˆå×^aêûÉÊeçÛ\jP—ÛÕz²{²zqº‰REŽ’ÀoáýCä{_§~ªnéfSï>±þÌ3c¨ÝRšÁ:ÊzŽ-Ž ·8Ç%B‹‹Ú(…/ÌÊÒ+Õe·²‹O~ðø”d³ë–£§³_ò6ö§á& VÞrZ}<‰¶>ÿÂ^øîâ*ÝŒýhºñýéNÎÞv™0oUy£Â3šñf齕ë)?-Û R¿gº çé'-£iò ~›túËåîÎÆ‹2—4ÿå肳‡Xñðf_£p»žgâ¦.Ë7‹üg÷á™Ã8õ–Áãz‡Û(órÁëînäo|oï §·¼e\±éʼÇÈÛ<1³>4{Åu¾[¦—W^ô¬§K‘‰„¢ømŠÒÂhžÊÄC˜$Ù­Ýjšæë›8\ó›o´ügÒE+K(©s«QÂPŒ‹všÕ¾Òb`nZ?o NRä¤$'¡acpÒP˜“³ü9ÉÇIshN¶uRŽ“–Â:©i‹EvWmNª²OÚÈÉ ÑIGaN>8šfØÈI>Nº srw9Éwk ³r±°¨æ"+9YÙwEÎ{EV °²ï4°ÒìO7 R‹–×—hyGÚÏ6ÐûδôË µÔ¢ï\G¿¹(µh9x¶aô¼Q×&FV^_ºábw‹¾ó ý2H-µè;âï7#£-‰Ê!÷î.š.VŽQ¶Ð] ­–Z ^Ú0zúâR(ÒwÈݯÝR‹–ÃǼY”v™´>æÕ´ç"óDåö~ª^.Ö‹é;æ…ÔÂó/ÓÄ ~È-àÅtIõ+ðb†yÝôç"w ÚwÌÛ¤å|FèEšªò9o—T¿|C‡?çõ­ìÏ%ªÅàç¼jÑ%Õ¯@-®¯¢ž›•¨[ÐÁKê/Ž•Êh¥ÊÿȧÜçÆÊÁO¹Ï§`áÜX©rUýî®Ú¬Tf¯¼¾²úKÕJCå3þ.³LWÀÊÁÓ-‚n5^\yn¬T»ÄY)ÀÊáK :GHèTZŽVVϽÈǨa…sâ³ýôåïµ<ÏégEáWÿÐþG#ZÞ€'ëÓ—Qík*Üq’·û{Ͳö8[•§íæÓþz?›Þhy2cbJPoúFÁŸ©xK–§õqÏÙÍ£VÁ|¾,jãͳ.Ž u²ÁÐîNukiÜ}(:å—ÝŒŠ%Én§Ë.®UŬõ! )ZQS´k±è-·þ4yÛ¤7Ržš£Œ$YW×ͧהªÅÿêäÍfæ|±ì„¡¯™Ú9T¤Š"AùEÂxW$¬SD‚À"‘ÁÔ‰gºz‘09ƒ1œcÙÇŒC­Ó„ÙìGö+Êþc4PxCQ¼.QqÙhûö—‘¹Ã3wŒØÐ{Û`¸’‹º8)ìÔÄ8×KG~'>kãÒí󠣺iJ8¸X†^R¿óq¢¬Ž>ˆY¶X[[U,Òp0cV¥‡ BÑ&°0«zY#ŽT!‡™I·BÓ¢*t0UqQUªôGz B(t˜U½¬m8qV ØÇ©`Öf\¸Á ó°6Sž*¼«÷234(hPР AAƒ‚åÌ Ê`ц‹à¥‚u˜ÙB‚ È`d´ä áGû0³† Ó† >ôgv3;h¨ÐP¡¡êÇP‘3o9?NQåPåÆS9] +äè㢃¼“]›*:Iø¡fÖPG/XGÔašŽuT ¬éXGøÑ±ŽÂÙ”!tT€Ï¤£X,w‚MÀb¹ÑŠåÀâOòÞË`½k5ªÈîL½ù<òãx×áöß™U=ŒyÍ›AX–›5Š8\~Ë/›¦»ïoñç4XÏýtx¶WåWªÄÈ›yìû[Ô@ûyçˆçÇûW=ûLbjyOŠìÊ[~…ºšµ»òJò+–ãîÇäWtÍ é•I3…Ý¿°„۵°sSý?ÕS[§CT'@t"CtÓ0m†èaˆ^cLAtJìv¢s¿úo½:‘zuצäÝW'®^uèÈÛ‘n®ªÛ΀¦½ë‚Vn™üRÇR ™LM ¥” $£ŽÄ&¬HV†Ú¨ëýJ¤jUƊÀ8è¶fB&ÊÍ-#†Œ8èe©Š8˜îòPS˜(×¶ºß$úÏY †ÝlÀˆn4ÏÎO':µ-£Nt­¹/è†ÅšÝÓ\éÚ,§Ç#]…Žt±ÖDuƒqÝÕ¯ü_‘àV"þ?;r`wZÓwZ‡B!¿ÜVkéÌVkèŽþnôIL9ÿF$:‡Ô¢Ú¹ÛÅHÊ$–ÉÒGwêô¡–c6âcÜ”lÔäò°ÿ§ë.àf= N'ºe³AXIѪT”²TÏSSÒ9‘C³ËCÀa8¼®oæ¥Kˆ›£1onSBëon›Ä`Þܤrh†ÞݸÙð$‚図"H©0Â’AÓâAƒ üºJËQ£)‚®kA2˜G=ì«»2¯žZךÍÓÓIÜú›§‹!ì›»r&¯„] ~¶B- p:Þ–²ÔbÓ£®Ææ¢ªcv{Ószã2ŒË®/.ã6ÿÈâ,Öz¾ ŸK/µqéN%1¦—“˜u«a9ÄÓ,·çC•Ë I¹â3´h…Ñð¦ ÂH9Ó¤tS«'.#µ1Î4¦÷pé¯${¼MBzfþÀ&ì" v“p“w©¬nÛŒgYžXU÷2Qf¹\Ó Ëu¡{ù»?Ša½Á·d«­þ=m‡œP”M䊭…Ôr™“åÚAèn[î¤ÔàtvöW^Šq%:WW"~läm‘Ï ì¾~Oæ”ñH0¤¡íSƲÉÏÌíƒüù ŽæŠ\ ÈiRq€a³¹¢fÁ·CÙ\Qá•tHwà/)„Nø(…ˆW˜J9~»ƒœÊÉRQA_ ¾¨É¹kEêø³öåòó÷ЉPN:Ê…“¿‡¶ÄÔ hULàÀšHÙrÒSÅ‘lŬ˜E@½’§³r:·dÅúH„݇ †`÷¡ãk»ÎîC G WÑ·„6˾Åú–HÕ}w߸Dà< €jÁ‡˜:)*š˜bF©7w‡=Pkt‹0¨Í:FzH­Ÿ WoA§–~óê~¸ž²˜=¿eKý›!{sìV#e~Œ€P·"#\g»H ÚÕP)ˆøEµ«á§¹€ZJaci^î;L_&¹>]¦Ã Z¨EY|nc¿Ó pÔðUتË×z+"û>K®³æ¸ b¸¾ŒJÌ(Õ]F0ÞtÀº˜©R4xNø(~÷¬”q-Ù7H²¤Üƒhïv_ðÝ`Y¯±îšð»¸ñ!f1+=Ÿ˜Q‚P/*WàÞC3©¹y¶´Ñu]rZö1;ÂWr–Ûí`(¿Mð×Å×’‘Ó5¨i! ëÔ™¸4…‘8ËnÓG—ÊQýšk@Z&Ò\ƒHcw …UÜŽ–™Y·ãËI±³ 8•~ÊûËõŠ3Ùe‹eÚߪô“>¬Ýeà{a÷ Œ¿ ¹î°®ÆdvʇGão£öØ›Ìzð÷f!rµuÕœE€è÷yx’jÈõùmœ'8ãs ò8§ gÔ–FÀkÂçZú½Â™!•ÄÖ ƒI5š¦Îh]u³#›‹næ—0¿¤²ft¤;Ó÷§”<–°HÜb å ÉšßØðé›Í×µâô]6gö à´îhÊeHù^q™]Àn85wŽŠ Láþ£Òî2d_0îèKCä¾víJÓTjLC¤|`ìLƒþ "…Ußø°yªœtó ÄjB¥òÊØ<ä|Ì 6QËaóÔQ%»q´éèxÝ8l ¤­DCP¹Ž¢×Ù¢¹ËàR)’^ixÒv6n”fµÂŸŽi±5¶†(‚­!ޝ [C(&°WѰ²"­!L¹/¯5ÄOF/ÔÁ’8GP´?B‹ ºŠþ?Cò €Ô·¤|¶+Eê›@…¼Rß’¬'@¤>è RÿRôù«õMàë^Dú–\=7"õ±HQåÇòˆ*WÅHcÕïµþt;àÑ ¡Ê-åPå瀬¨.„¬¶ä¾Ç‘Õ#«gUYm"²úR7gU¶^qd5nò5\$,Òl~ÿ,Ò’Ä ,RYŒÚÎ3©aî XB!X¤%wˆÚ,ë!Ñg„¥qlh”/Ê(cáöè† ±\¨rÒX.À/ÂrYr /Ëu6æ±\jÙ#Är¡Ž"–‹KG¥±\ã!šÕ3†ŽÖ?>WWÇæzøô;ám—Éä½ÕëÇ4þÈ;SD2!’‰kmˆdRL`ÏÉtÈ‘ï­fo,¢ÙÐWQé”ÐC.ý¯Ùì7kV¾~Wb3߬©Ó#Å(ü * ¨oQMM©fl®MßEQ˜©j€oN¾G¿eBô@ÑŠ¢Pufç0*ö$ìòPTÔ•Äpj%´“¡¹,ŠŠI³A(*—ýfßnº ˆê\|,ì¾eÅX†nÄÐ6,ÞÚáÄjl)Vµ\«L´;=˜]¬çQ½òŒ ÔÑB__m ”T€7[~orc'T檖§h¹Õõf6 ‚  º‚ÊD•”¿’Õ6”²ê@åhlœŽ*Œž@uN{<¨m0ÿ7 A1»|ŠÚL¦”èÓp€Ou²£Æà ç%T wž‚Ì`KÀ§[æ—kQÝøÒYÈ{ŸnX=a"aq#€è)4ÊX*­”¡Bôªª"ˆA„"ÔQD×QD!‚Håé#€ˆêϧèeaŒt¾„Ûíím'm£m˜"3Ëæ.NŸ¹[sß/gèž{f²>„ü äÎdgÎ( ¬­Û͹ef”Ð1씀t›A™ùÂß%Ü­ Ùmà$2sÇÞJ¨þ”!$“Šóçhde™†iEtÕ6aõJú[ÉŸxùÞ<ΪÂùÛá·y8Û®üu’N¶NÒ?ýPKáŸSÞÍ?“PKì¤97 styles.xmlÝYmoÛ6þ¾_!¨CÑcôb;‰Üض¢Ø‡¶(Úußi‰–¹J¤@R~é¯ß‘”dÉ’µÍÖuiaEäsÇãsÇ»£sw¿Ï3gK„¤œ-ÜàÊwÂbžP–.ܼB·îýò§;¾^Ә̗9a IuȈt@˜É¹\¸¥`sŽ%•s†s"ç*žó‚°ZhÞFÏÍRvÄ(+nÀmiEöj¬°ÆvdñjüÊÜ–NÞÖXà´-¾æc…÷2CkŽbžXÑ+öeŸîF©bîy»Ýîj7¹â"õ‚(Š<3Û7¸¢™A%±G2¢“^px56' µOcÛ&±2_1š¬pÏ«r›ŽŽˆmz†šxƒÅèØ0à®{'Éx÷N’¶lŽÕæŒOn½70i>Þ¼>Æ‚ÈÇ®¥±ªbA‹ÑÛ´è¶<ç¼1U ØjÌ }êÙ÷zw¾TÑ‚Çá1Îâ†qž‘¸À"[¦®S¥NÚZÖ9jÍ!?­qLPBâL.ïll5ÃŽ}×-Ü—ä/ügé|À ÔB Õ°œf‡…û\¾haì€ë´TTÅàê-Tç×½`ð•+Z,J #‚¹rG¥ü›ÞÒ|UJ³œóú¬QÔ¿aV‹…ð±¨:HEò‡ŒòÎER5n‹_m|Bָ̪’Xk®l4%Å$ËÜ~B…€!…BZ«ŠiŽa"ƒEå XàTàbÓ—°8/PB¥ÂLWbÿjFÙQX—½¾œÙÞ`¬ù<Ã,-q s„™˜—L ØÓÇî©Y³ÓÓd0µžòy¿¯§*õ ãŒô5ëÄž‘ýeÝ h@{3gôkï¸mŒ/ û4nY½·yÕE~.78á;±"‰B{íŒ ¸ ÀCó‡Öü(gkWâRqY`íišn¡8+6¸Þ}Q²X•P9C;˜†Ð§š‡†:ÊZ ‚¡s Άªgtú†Få<õÐÛq e ÑEE7F‰¶Ã4‹kœIÒs”òÈøÐ®.Gh) ‚®IÓeyÆ¡­P¢$&&Ïg©÷<ÇÌyË£Q©JhôŬЬ&ég % õeÇDËÕ‘N õçèlÂ{Pé# ÛËU-]ç`T©C—ÞÈ©ÞrÊ \IA.¡)UѳЀÎFG\ 7ÃÐR?}ç×ûØò â[·ï&òÏjkºžª±-o-n ;Qqfýl}yçõl*xY˜#c oÒÝûXJÜs‡È„£91OÖk~ôZ•N]¢feóú3h ÈqÑ9K¨2Íág%yöüiª^,šàÁE‘U|¢Np]ð†•ìûà¥=0îùÚï~OäeÙ:¡cÑÜ»QwÝ î·yÂ^¯©Â”¯v)! ›Å-FòŒ&g ;šè;®=gU°Sõ1mîM7pGXHZ¹æf-9áW±Ó%Vß1{î¾ä—ß Öß<Žc.´|¶žg4eHòRè’¾¦M®Pk±&ŽSu½Ü'åG¥ 7A¸ŽíO ÛuU؆"çÛœY1|¥µ;ÆP*¸²ä+m~ä÷4XŽÅ'HFæw»ÌoTĦI‚ËÆ–’ݯ\÷oŽïÁ$0v.Y¸ùô:„‘à~ˆÂÈ·ï?õ=§zÕ'?fcÔ½éeøÀKÕqx‘î¦ï°nË™ ¤VÇxÝ€çMBglÍ9„öI0ëʱ©Ô¿ £Ù µx;…¹Œ¬õLwPTøîèŠ+¥¿‘ð¯üèvjtï¼U•9ßÃRh´Íìšäõ|ñ° Ãÿ™ õÜŠ‹D= ƒ“é5eŽ){ÎßüHû8`ü› Äñ'Ý{°¤®uOb_ÿkHj! ³II/bzþ1Bê¿KÛÃ!îÍ_ÕDŽe£B{I3¨5]êöÚ§¢Ÿö¬õË;ów‡¢zÊ !¼¼¿¿¿óN«‘℃ÿkWÖÍ •ÐAzí¥¦YýÞJõ¢­¶mî2¨×kõL¨Uu8¿h‚×£ñ!fß“‚‹‹Ä†=bë6)Õõ^Ûó…\;Ï,NQ•µ!öýy‡ÎJ!sŠNV‡®“œm@¡­m@È\Rà§ù gîÒ¼p¦¿û¾©¬ÐÀå/Nm0XNæ“hN£‡¢§kßw )Çk͵qEm û‡BÏ>ëÞð6—PKàS‹ÂPKì¤97meta.xml“ËnÛ0E÷ý È–¢vbtQ @ˆ³r¬²¥HƒÚýûJ¢%XF^êΙ¹Wä°~>÷*ù ÖI£”§J@s#¤îô¶ÿ†wè™}©Íá 9PaxèA{܃o“¡U;K VSÓ:é¨n{pÔsjŽ çzMÓÉ(*g%õŸýòþH 9Né©LíH^U™ª3*øÂƒU%8£ƒ#yš“™Þjd¯#c£¡'»"Ë6$~£äò3«ãcóYCY=î@ƒm½±ìe˜ör5--~HÎɺð~´æ7pOwYŸo¾©®òrS“›‰Ñ[hý‹ÖB>á¬ÂÅv_”´¬h¶»ô­¹ZpúyC1ÍÅ‘R­îBÛß^§Ú"Å ¤–ó\cÙÅðF^³"Ø) û¹Ï^o–Zl ,pD2)ã…6è»>˜$G䬸+ïÃ6 ¶¼ ç‡ÈÎKaß~(ÀÜí‡Ý@Qä Ô¬m·OÕ|Œ×=ëÕ8›¬‰|öÙPK-+„°™ÀPKì¤97Thumbnails/thumbnail.pngWy8”}÷ŸIª‡ž$ÆnTLõ¨±bÈLYclqÛ—òØncì3-˜”¡±UêÁŒekC•aÆ6Bï=z~ïõ^×ûûý®÷zÿùÞ÷}Î÷œïùžùœÏ9“tcºCTVƒí@›[AO ¶ &²z“6S¸ƒI˜£OÙ„|+Œò½0°¿-FâIû-ùDšYÝÃ$®ròœDç1á±?ee!û¿v. ɚϧ‰^ŽñBj;Ó1¢X^¯T2*Ù¥xÞãþe-÷#†ÒÄæ†‡+ññ†¡þÎÏ¢Âý§t_ð†‚0vfÁì<ë#9äÏé`ÝO8˜°ÃÅVœï2°7¢¬MOopaO0Í{(ñœÌBU"V‰ üR’.ä²í¿WW°JmÔõ)·Á8N¦ÞO!èBwmØn)±éÅÆu6y0HÉ1ë|6~}•_òå‚=5°ølÎáƒ:Ýž<¯Á-¯Â-.|.«whH3yï¡îák¦AÌÍt¡„Ï_¿VVÂuÆŒÕxÊçä~}“|¨Y@Tyõ•^“i™*Ùêþ¿°âN•9Ôæo¼l$­Ò~/0J¡?˜–ý”ϼµ¡Œ"˜ø)ð—‹ñð-O7£E]¶Ò/%áj°‚½æÐ‡YI¶àJç÷è³^ç»ýòðŽ8Mþ´'ˆúAîeÈ*=£ø1ò_6ÂIDÂU]K`E%û¨ŠMúšužÀ>ÒÑ0‹rÔÑÿÁqóµ8~ÏÛA;º0Ó™ÀãKîÂ^ñ–iËV½¨´E>‹öªŽòŠW4 ¬NÄdü±èæ»g|¬hy&7kþnñŒöŒYkñdÀi+Ch}ÙQ»™ÈÔÃÒ…Ü7$:;QØJþ÷ëÁÏê¼!Ú\и·ÍfkÒþ@ÞÝ´´öÒ‰‚…̉¡ ­¬€*swü¤,žÒWæåÔ•Z •™p ©ŒêäöÑî½³Ù„‡ižyïàà=g¸Á¢Ö?æ¢2¦@½ÚA Ù¹µæç©3¹\EÉ»®«Ú¬›òCƒŽ»¼…À]óÐÇ@™ûÊG‚Íc]šÈç?÷¬Ñ8Å÷¯œsïnì ¤â 1êÅE¥˜õ¥aî³HMJ¦i/0õãöû3ð½<ÉÌ#&Njè/Ó­ôÉ®P´iÛ.ûª tõ5˜ rløç~…·Ò¤ŒPåé[ òç7Z%*SS‰GamÙÿ³p{~—r¶WAª$(çß'98¬PÊáÊ£‚ è«§ %£ˆ(-fVéÐ/U2³ˆ¿‚¢`¿‘ J¡'ÂeIÃ}žPÅ™õÆW«e¼ÈìåC…>»#/õ¯o¸ít‹Y9nÐû¡Þ®¾¾žU’-¿4|<¢}ÉF=&P;æ0«t+Z–_hº4³¶ôW‚%Ãýçr;s*Ï\:à)ÖàŠ“ÖÒË8qàÓÍ-U׿Õv N‚ä%×qò«x„ˆÄ §#¨C¥Ö/4ª=°ñ.ãÖ”ÇÕ+2ŠJï )™ohÛüÈŠþžoålp†LRÎØ[ lm Û7gwàj}ªñwÚ`íkÇ”b;ºd/ák¡¼ŒTãØº‘˳éŒáN“Þ™uØëfaþUOÏ—¼‰8¶…ýþyÀƒßN›1#8zÕIß_òDH”2’Jñ“'–yùùOªÂä^ñ¼àààöœ#®áÑ©;’ùs§™rå¸Ðá÷LqC1Œ$gþÝ·Ï–7Àb7¨‡ðõ½+¹P§m˜;e»²¹Å+ù¢E~w¡lØÍSJb^<ë¦Îî;Ï¿ãV‘.¨o²D’kØÔO[3²g¢}sÛ?ú{´F$g‡X‘ͻߒ¿, •µ×M-.Eü2»_}±­ñÍm¥ð«©ìÝ cн©E¾ØÔÂÕ#ç/‰&xõ­sSฦ•Û¹$~èhwt} ¾êêÂÕKúž¿žÀQóFMŽºàÖAœ×[TèÈNã « ÐC„:høCâUvå\ ´±èçåì|’Ñ)P‹1†A, dZ´»d€ØAnÆÛîò³ù&o|?ÀDŸ¸H;SËwªÑžFÁo6;Ê¥øò6”ð©Ämµ(Ù÷“ô‡<³Þ]R%ÔXe‡Zµ¢ò;.ì†ø“dà¥w\è}QK¡[£?9r×Ùìðò¼U.÷uœþUC%Ë€˜—¢DÎ>JóQš¢ÈpúþÅ(Äè ,wœ°“2ñ£ªžŒØ÷êºø#­š;w? p± =¥‚Ü= ÃyX!ŠjkÞéõ½y¾qûRêÉl x©ÐLC½S9“[£Y“JÒŽðjRv\ÊSnJ:7Ï×v8*íª!¨ž»Ôt¤jýCmZ·ÊKº‰ßðwË-y¥±:”ÑçRr½ÿ¯è nSŽ™Fi~üרÖ=DDÄ Ž%‰«‹ïêÒ,O'\ø¶!z>ûNñÌÑ+¼äðÛh@’4üÙõ˜«Ê8×ýžÀ-q)[᥊éEîP‹‘{¡¥ü,}AéïK/Ї›€âà»Jq¸šáfèçAa!‚¡·ØwfC`Cë¸ë:0¹ËŒH!mñýF„|ì/ßœ7iÚàg¥qª[mùƒ¡zjuå¯J™/v¿Y©(¡qÛ'ˆÃçhf#5%‚z~D²÷óƵ!§Äbº8W0i÷×ÝN?~p•ë©•èé|®%òŸØfÁH /àzF–V”qP©ï5 —+˨µåj7M³ÖkþK]Üýy¾šüO(¬S³öè—)WÖ{x•éÜ_=»ìå–²ï¾0£ï6вÀÀ½DÁg‹|Û´¾_ÔìÄ£è(iݨfºm@õïïsû12ªº‚Æ­Á G°KÄB/ßÝÃÓø{KËèes±äEòhÛlÅ€.4šsn]¤ÙÙàëøf¨–_ÆéëNy|~×Yàz{W‚¾¾ Ä‚Aoµ¨6­4õܬ\B¡b÷…ÿ ƒÁ~GO¦¶‰Gë&Ã3úTª_P*Aòþœ‘EÛÅ·}ÂjkÅ c8L\UÔ÷×Úc6¹G}îu6(è0ûmæˆØj-‘ÔÀ³ªcÉÒ¼ÍìŽÅyà&î—¯å´ W,ìQaEšè:37Ãõƒc¸ßåˆF·õ ¹:þH3TÐ tŒ´ˆQ4ò wÀ™H³öýá¤àï?î=#õðË´´Wò½ âÜ]-LKôuð }ë}UøF7zõ®ïÐó‹“]ûÂû†ÓyÊ›IØb£òôm\°3{7SµËc(œºê߯ßýœ âøë䞪s•8E††ÒT®Ž žNèÀ¯.[53W˯7oøÐš"RX®º…¨z[- Í/ ’!™”èˆD÷ðçĬãj˜;Vàà@JVW>LMU¬r£eº‚q–ó•š”õFîå=¦Z$è{Þ®ñHJ½(ð-û×ßCsŠÎ\VÈé-ºžUjæèG JÍh¡Ò°³¨+l/ïoÀVi5ά0c\Fàcõá"j-‚ô(ˆ´®€/¼ËŽë1¼ySýYqÒ.ºÐƒ¼¸ÛÄòír‚éx‹‡µù$p)âÞ3ólæ")}4ͼxlÍàÐûèî†oâ‘$E~´ÔºDš#pæœßדПkÚc\~Ú%þPK=šŠDƒPKì¤97 settings.xmlíYms¢:þ~…Ã×;­H[{uª;ÈÖ—níZTlý ÕlóÂ$A´¿þѽ- [‹:sg§~AHòóB©<PJÕE”Ôp*êIsC 9­3 ¨S@ ¨K¯ÎH·Ãê¯{××dÉ“%Fô¹¡Í¥ êårE§ÑÙ)ã³r¥V«•×­Û®£Oh¶+UÒû5cì'Q< ³&3tý¼œÜk¥È7¦iní°~ójC\N„$¶Mió8–ÖÐe}`ôÓjZÖ¸·c$‹¡É!±@Û6ÊU •Z³b\^\•Åùö-|’Yà—Õ˽±'È—óLåU¥}oø.D³y¦ø3ą̃ìŠB@p‚¨—ÐOsÁ(ÛUë1j‘ñÕ.ŠaÔóS2…äjh͸ñcJcДÎPyOèÛ!Ã9„²²Ã2´B.0¤ÚYÖ6ªÅ\ùú1 ú\/Ýe½0*É>óaÚsÆAA|r‰¼c¡§Ôo-”e Cè?¾éI´€ktÐYŽyŒbà[½y¡« æ-¬UöÄ͉â{¢¶˜”Œ|8ãáëh–×¼;»:~r"^yöÞg»€çæã² e§Œ‘‘Â9è–ŽA€Ã4j’k ¦ñ˜Á8ü¼ZPñp΢˜ ¥2íó€Ã¸~IỌa¨Ö|XÀâ4SÈÙZ¿È#<ÜÿŽÉcAw8J§ö ǨÃŒ§ 1‹wPŨžÆEÁ¬ûƯG°J%=$ÔfQ_•ÏG!YÇhŽ€ÞßC©Žp¸".ÃbÓùà $C ‚³0íèC쬸'6óÑl(”¿s«ÃJá@œ†Ï¬÷…†®HäÊ?x¶ø¢K'7—H WÔ›sFÑ ,ˆ ›ÓRvuÆÝýTœ<9ˆü‘ãñgÞøÃòÆ-¢ÏãÀ柧Î>SÒgJúLItJzÉ %³öB¬BÅááꔪæq§nr°H!G^iÓs/µÃô[X=o! øJkNÌîßeÝÇ.qV`ÒŸ»7KmìÍÌÿåo¬ûín ÷»NL³oÒÿæÑ6ÛÓ±º>»÷¦9$5dwÚúãÐ\Z´¥æ~¡Oz5ÛpÂéÃMð¸jÝ{‡~ÇYY¤¦Úõ¿­ƒI-8­…GíÕãë¹[xŒ½}i‘ÊÜ#~à{¨óâw*Ø¥÷µ¾E·_MÑ7ƒ®±\xDÙ·k³Á¨§+î·ãÓIT{Ýîüc:Ò# ·îíë»EìxmÏýÎõ·q§M§Î]ɸ:ê8z¬QÍ«QpÁ^ä_G™Öpà©Åh1p(âÐpð÷=ñ rj è ¤ž AÆǃ¼O è$Ÿl¾S 3qŒ,“Ô)mÎÈ’àwhcUqÅq↹ ÄG¨ºðmU1ŠWæ[ÿ—ùNVÎû‚ØüPKÚçÆ‡{ƒPKì¤97META-INF/manifest.xmlµ•KjÃ0@÷=…ÑÞVÛU1q-ôé&òØè‡f’ÛWäÓ6”¦X; HïFi±Ú[Sí0’ö®OÍ£¨Ð)ßk7vâcý^¿ˆÕòaaÁé‰ÛÓ ÊëÃN¤èZ¤©u`‘ZV­èz¯’EÇí×ùídZ>Tð  Öybì„`´ÎyÊ뛣«¹V4"BO[DÈŒ©ð¶RÈ»œ·)oÞ zLñ˜ =KbàDˆeð Ì¡R¥§æbw Æc!xð!…|R!|ôcD*wÒSêÅàì½)×F$ùªÙB ¢Ž;Ùߟ Jnêž&éF] þ–ÃrÆ=Ë©Wo³Ÿÿ×Ì¿s‰iv¬E†Ùžõ6ÙmHòiØ7Î Ÿ·°ÈœÿÅsiòÇ·¸üPKÌMfBQPKì¤97…l9Š..mimetypePKì¤97TConfigurations2/statusbar/PKì¤97'ŒConfigurations2/accelerator/current.xmlPKì¤97ãConfigurations2/floater/PKì¤97Configurations2/popupmenu/PKì¤97QConfigurations2/progressbar/PKì¤97‹Configurations2/menubar/PKì¤97ÁConfigurations2/toolbar/PKì¤97÷Configurations2/images/Bitmaps/PKì¤97áŸSÞÍ?“ 4content.xmlPKì¤97àS‹Â :styles.xmlPKì¤97-+„°™À4meta.xmlPKì¤97=šŠDƒThumbnails/thumbnail.pngPKì¤97ÚçÆ‡{ƒ ,settings.xmlPKì¤97ÌMfBQB1META-INF/manifest.xmlPKîÇ2fifengine-0.4.1/doc/diagrams/proposal_memory_manager.dia000066400000000000000000000144461304641216200234120ustar00rootroot00000000000000‹í]Ûn#G’}÷WòÛ‚Êûe8íÁÎÀëY`ŒÜÀö‹P¢ªÕ\S¤–¤º­yØoßÌ*JÍKY¬¬¤Hêð…RˆQQ*fž“q"âÏùã~tñ9ŸÎ†“ñûKFèåE>Ln‡ã»÷—ÿúù¿ÞÙË¿|÷ÍŸo‡ÙŸü?wÓìþÂÿÆx^½¿ü4Ÿ?üéêêË—/dô4Ëæ“) É,¿ú¿l4Ê®¼ÑÕåwß\\,¿Ám6ÏÂ÷ßÍæóéðæqž_Œ³ûüýåM6øýn:yß^–V »Ád4™^|ÎFï/¿ýX|]^-Þæjå}¶¼÷Cv—ßLóì÷ú·¦þ˹6oýO×ßöþa2z“ùÓÆIÍû„/Ù,¬fÞh|÷Ý·ÿÈçó|úmyY‹o~}¿ª‹­u4¿Ï¦wÃñ¦/FåÍàD ¾4³JPnÄó}ÙßÝÍaÝënzXwÃÙõÃd:ŸfÃù¦Ë›Éd”gãÒë|ú˜·÷3d#ÿˆm ‹µ÷Ãù|²ãú?f£Y“Êo¿|âöýôÞM‡·Û?¼+5ïòex;ÿtýǶÛE §åw–rÁ¹lKOó÷y8ÞŒòª‡ãyôóðüöOݼýú_°Xå¿þzäS¾[í6rks•«ý·‘»Çám>Ûñ(®ÚÔ¼Ó§…ÙÕ®»¾n×ôÆ”ßZÛÔ £ì)Ÿ.Þþ¯_·ó‹Åx±*-Ý…ÉÍÿäƒù"¼ýø‹we³ÙåWhâÉðöýå?éê½YÆ¿“_7nÎÃäå âŽpaTƸZ{sa©órs³îdêcÈÆw£üų…#ª¹¢”õ…!Z¨#N·õœòûëÁd:ÞDÇXx*V˜Í8ŸWK„4Š~ýb¾>åûOózgŒ·òeÛ9[CX+øê¿ÌÆ#Þþ”Ï&ÓA^‰´öq6óp-Ÿ„»Îe´ ÿI½ÏÇódïŸÝøßͶíÓ{ݢLJ‡i>›]¿ü`–ÜÕÄ#ñlî–d®ž7³ôA={jÓ*"lãhñÀ% èË4{HMá%ûè?Ÿ×ƒOÙÆjú²–JÚîýwéÚèüz”ï6Ò¯¨ÆÄù˜gww«8½Ó?HÂ*à©aδåÍú8v{X¥ýûy˜çÌÓÆ0žx8ºþ8Ù\‹Ã÷.>f÷ÃÑÓûËûÉx2{ÈùåÅlþàÇ6å[üÍo:Ã|ÚÎÿó:Ýæ ¬]»„wŒnÿy3þoÛÏ×Ãdôt?™>|Z]ÑúE]Ì  Éð¿»/e–ù%çå*^þ4ÏGŸóùpw&ò/ÔúrlõåÄÝ›Å"²ç¥l^IÔU,}zv"AJ,]ý’Ý<£‡ó¼òa=œÛÕo7äîô9Oånùnp+õ*‹pºe_ÝÕv²øÉ\íØ¢îFÙçØ±)bSĦˆM›âqoŠm’¬'”Äå±I\ƈ(Ò©žÔ[Ʀqƒ'¶ðäÿ§Ï1¬ÇCmM[¿Í¹„ØLRÍ‘KÇ"òÄ%Õ&÷ù÷ã»á8/ž¿_ÊE*©\¤r‘ÊE*©\¤r‘ÊE*©\¤r!©.Ù¸ˆ.pæÄJ,´5)Ë›91ªðìé Fó/%ᬭۆµÍÑá5¤áz¹°™êó¢á¿†ƒ†ƒ†ƒ†ƒ†ƒ†ƒ†ƒ†ƒ†ƒ†ƒ†ƒ†ƒ†—4\v@ÃMèÁŬÄ5OËĵ-=¥yàâ´ÌT+ÍSñø›²q¾œçÅÆklü?g³É`X–™-%YprÕ'—Îô¸ð„2ivÜSb§Œ ,Ü¡zðì‚gIl{ÏÓù§ë"œVAV˜2"œ°{™2¢VðZyG ±¯›îëÄïÈ››EMMÈÚÏØ–ŸµD^Ùã|2<ÎBàm‡Ñ ûvžÒÕÎnîL>¾­ïª°³¢lêïÝAj ïGóáÃh8¨) ì¾¸q:|9DQž'fÓünuQï¾.´ëòÓ†EÈx€Žæâ'ñm[º“ñ¸\gÏÛóO.>eãÛcžO QÞÅןRrµûwÙâwyíï>_ýÚu—tpÉ£Ñ+6ô¤)Œg¸ä=…¤E¿Ì,ˆLX„h—ªƒ¬Ç@{˜......½¸$O.™n /$a‰–‘š‰P!‹£%A”êqELúƒ¥Šø*"Š… ÜÃÔÇrØ'¾iŸ;¼Áî”pwb€7x€Î§> RðFwo꤬6Ø„19èîĉ^êídˆJëCtwê À&2Véã£ZËrpûìúÑÈXÎgóƒéða+¬°BÀ ë1Xs}ãn¬°BÀ +¬°BÀúºå¤.–ƒ{îX4>‡ýI¥’(½päyªgኅ䂤ikI»ˆ¯Ñ¨\b¥Q•{þƒÿØ7Ø7Ø7Ø7Ø÷1°ïžÉL‚}ƒ}ƒ}ƒ}ƒ}ƒ}ƒ}Cù(£] :bœGJõ›°pC¸Q\žŠAGÏžÓDÔeZdóŠ2}+ Bc¨‡8Á ¨‡°¯UÁØéÀ%MŒ¦B¯À%6¼¦á—›xP}^Dü7qqqqqqqqqqqqñ×qJ„Ò&9÷n¨6%/säœjs&_S&ΗSâ⼘ø¯`â`â`â`â`â`â`â`â`â`â`â`âè­¹RÐ×ÅôlO#m‹Û´©ñÐ|ÀPH¸BõÀ”eð¬‰lï¹éíê +LY8"{™ ÂVôïJù ʱ¯›¾•vQ(èC= úPЇ‚¾s)èc*¢“¯Ö1Êv†˜üöŸ6‡ñ‚˜  ±„˜$1q(¢9bZr ÚÈ ˆ ˆ ˆ ˆ ˆéí &}šˆÉu¤ùPÄ$>aR„a‹:ˆâ„I5 é—ªâ«5Š.pSIèQàtÅÄÁˆƒè|0ròC!qôú<ñèátœH{>OÞ‘0_û<”eú}žº±‰¨UÍ©Öa潊ɵ¨õç|6ÿ0˜æ³BÎ 9+䬳bT<䬳BÎ 9+䬳¢°tÁã§žJ"yqÏhRQ†$ WaÂi`á¢h¶¬‰Si K;ˆ¯ çÄJ³Üã‰8ÿÁÿ ììììììììììììŤËB?λ˜yÄ¥‰í7aáš(ížh1õ(Œ" ž Ñíù#µ_m›¦Žp^ê›ZjBéöŠâÄ!D¾núV # „æ š/ˆ¡:=Ñ`Ì,mÎ^«.‚w1L[[Æm*yÒ¤•ÆŠw¡F“÷½g[xĦ®$­ ²ÞÔ_å.SIŒ[ÔÔ4N¡yÂô˜°ß000¡´¨xXùev8À$;Lü¥¤ŠPgK‡£¼ À<;¢˜HŽ—x£rÒSëMÅ6KElYÂÑܲP´°·‡–Ðw»àààÒ¹¥ê9_Šz곆÷¡Œ«”¥©Ò£"n{”p£úáIx·œèÖ^›A¥šø*, 2Ý} wØ©0€Å®"Œ„- éT þ61iM¶v ÄÑ·#z£¤8á1E/U–²-™÷$ OÚzO}截爲­7«ê$ƆãèœYG'ÏkÝ/¨ B*ˆPA„ "Œ£C*ˆPA„ "T¡‚ý;|¼‹AtÖsâ0 Ž¥ o÷Úûé FS=Æ×mõ$çÂG†×t,üróªÏ‹‡ÿ¾àá]Œ75![­ˆUÚ$¦âÚ–ž¨÷È8-rÕT§M‹wbS:ΗÓââ¼èø¯ ã ã ã ã ã ã ã ã ã ã ã ãh¬¹RÉ×Åm#é13̺‘XÝe÷4ÜbõàÙÏŒ¸ôc´«ƒ¬0eD8a÷1µD¯jà+äò…0Ÿo𾕲>ô>@YêúPׇº¾s©ëã&¦U”~­Þ‚v€˜´5¢§‰IœÆxFLºL\ôËì‚Ø„§î­Yd= ÚÈ ˆ ˆ ˆ ˆ ˆé !&{šˆ‰uR€*!0)B­¡¢<`D©óÎÓ/UÄWiaÂ_঎¨ã€?èõ„ƒv†@8x€Î"'?R1G Ù“ˆLlj>H«§¢ååK£'C„TZ¢ÓS6´JÕZRfLžýh­?ç³ù‡Átø0‡”RVHY!e…”õ¤¬¹¾q7RVHY!e…”RVHY!e}ÝÊR=îÔ“Gf+Иíͦ*]:RJOà ÏÅMJÞE|MH8'Všå.OìÄIøþg ß ß ß ß ß ß ß ß ß ß ß ß¨$]QùÉ.Æ…áŒqŠý&,\£©Ð=[f¿ûå0"Þc‚°öü¿‘Ô¯6ÈMSG8oVë°°dŒ¨•Ëß´ !ò SŒ‡„dŠ/(¾ DQÄiIuDQ„¯V?B[«­){T&¡- Jˆž š\õ¹!4x–qµ»+#ꂬ7•»M¥‡{e@MãšMSCP„ &ìwLx€ÞF‘ÎqU‘ ¾6Qûp€Iw˜œàê…¤Šp«KOL;+<+B™HŒ—ªcÜbêáÝòEmZjB…Þϲ´¼A´„¦Øí———ε$UËùÒOy6þ;ŸUa¥è‘§¡}DØÈ‹âM™²ç†$‚•ޏ’}æã‹rÑÖ‡ZÍ2q5!Ö[úÿ+D“¶{˜%¹Q¡V*®é0剗^ähÉ´\/j±t.’b¾²ãV+([£ŒüXÚm[A£‡U A$c¼ÇˆÓ¼­¾¤Ñ*(q*øaÞO_x’¦Yè’-"ºK6ZAkC¬7ÕEÝÃV1ƒ`›V¯µ$bÙò×vÙ£1ÍÚÖÎèäV=wB«óHqsÙ úªÄÝÚZ,{þªØŽã¸V›–Xú°ô½©¥Ï¤[ú¶gdtgoG”¢÷Næ¨N™a ÄÒ\ñÐò¨ïˆf¢èìMwö® rÓ”+WÙØÖ¹KîZv”Ú0DcoäpDŒr È1œVŽAó%âm/e|Ko&ªKN¨“)w…)y ˆJô¤ N¶uÙ°ãe|lMšm("ùJ›9ñf¿^{þ•㆞蹞蹞ÇÐsã†g2“蹞蹞蹞è¹ñº-/%³pÞ®‘i{^:¬KOA’RðpgükExâ¾—Ù‹ ÙÁÃ}4\ü·ëïÁÅÁÅÁÅÁÅÁÅÁÅÁÅÁÅÁÅÁÅÁÅÁÅÁÅ׸xôø f E›ž'͆G¼t2â\æÂkO_çÄ»±!×+(ø‰ñ_@ÄAÄAÄAÄAÄAÄAÄAÄAÄAÄAÄAÄAÄ7ˆxü M¸45ðd—r…÷ÄléIÇú\eýKG¤q,)ï"Æ&TÜîÌrR\ž8ÿ0¹Ï¿{l›Oà/àãàãàãàãàãÇÀÇ?_àãàãàãàãàãàãàã¯ÌÇãg-²ÆŽ¦Svã‹Ä¸#\kÝŠ8×S¡}¿ÖIêØ‹ëå¬8ÕçÅÅ_pqÝg¥XÜ(ÉÒ’q¥ž¨dçešJ–šŽGÇØ”óåܸ8/>þ+ø8ø8ø8ø8ø8ø8ø8ø8ø8ø8ø8øø[ãã;FΘ.X9—¦§(á‰Sä‚XÁM á¦P¬‡Ôuð̈mï¹ÙTûº +§Úsm÷2•–¨!|…iPçó SÌœÁÌŒ ÁÌÌœ9Ùˆ¿Í™3REÌœ‘2ÝTæˆÉv€˜”æ¢'5щóψI‰‹~™]›°8Ñ1U¹ía ÄÄÄÄÄÄôv“>MÄä:ªÂ剘(B‹¢¢8b²D†îýœ˜œ0U…Xaé¯ÑúkÜÃ44u8 ”ç´Ï#æ`—J¸K1À<@ç““ ©˜£0ŒXÑX€#ªÏä]ŸäBغhúä·‚éCt}ê"Ä&ÂVï‡S­e˜ø“o?aëÏùlþa0>Ì!i…¤’VHZ!i=Ik®o܃¤’VHZ!i…¤’VHZ_·ÄT±X®‰RA¡hR]†w¼H%—Ò)¡ÒÖ–ÆׄsbåÊü#vâüûÿ30o0o0o0o0o0o0o0o0o0o0o0o“. ýïj±$<íbK”\žÂ bïØpuˆÂˆº+,9¡ÌÚ½Lw×E)ÿ9ê" „Þ z/Qqâ‚A±ªùû}­º%N.ig´Ù€K‚Ðö™’ׇKŠIå¸$eˆ|Ãp p »àààÒ[‚KìÕàRôpmÁˆÑKøÝ?-\Ò„nEO2B\òŽ.‡{%>]ª ±Þ’í´ÔÄñçhššF²4AK ŠQ–°×,ázÕÌ݃¥5¼ÃbΖØáÀ’ê,ù\)©6 ±’ñ˜H”/ŠeÂCï×$!C¥ªk a+W´iè¯Ù¡ìa#û=e „c%lt@J@J@Jgƒ”xmç£>VÒ] %ºèÝ•*yGÔ–}¿LÀIÊ¿Ä)'U…·Å’®™n€© “¢ÂÄyP69 $<@@I§Ûõž¿J2]$ߤ0åL]¡Ã$¦zRV$ß_ª…¡Z{P0Tkç"‚¡Zª…¡ZªUÅÅò÷oøï|V•¶ˆ¡JµÅ;ÿ·áJR‘Vé! Vì ¸£L÷™&”•Ε‰pÞlRD}¤[Œq‚»ËVîgZœ@0}>EÅ5=ç1òD¬á ?&Ñ/H5‹¤©˜G­6×»¢ò}6õ«µ±ÐÑ=ä¹&V[ÓSÄ*mXÚÊLWg¾œoBƒkCd„ëf¹º(ëMßùÅõ(´²àR›Ò†ík­(@Y\dqñ!‹[ v¸è¯£³¸åëQö”O¿û¦|áÿ¹›f÷ß}óÿZ ¤.ÿfifengine-0.4.1/doc/diagrams/xml_format.dia000066400000000000000000000132401304641216200206300ustar00rootroot00000000000000‹í]ËrãÈ•Ý÷W(Ô{‚Jåù€é*Ç´ŽYx ÛkDB§I‚B]%/æÛ' $¯„JÒQD· R ÄMܼçÜ›üÓ÷õêâ·8Ý-“Í—KFèåE¼™%óåfñåò_ÿü땹üÓןþ8_F°ÿ-Òh}aÿb³sG_.ï³lû‡ëëoß¾‘Õã.Ê’”¬–d_ÿ_´ZE×vÐõåן..^Ÿ`e‘ûÙþ§Q–¥ËÛ‡,¾ØDëøËåm4ûu‘&›ùe1j?n–¬’ôâ·hõåòç»üëòzšëƒóÔœ{-âÛ4Ž~­>5µ_aØåÔÛ8=>íz›ì–vHö¸=Rq÷ÿWcö£vvÐfñõç¿ÅY§?—µÿáËùÊ.¶([Géb¹9Ų÷gUÜ N¤Ý—bF ʵxº/íánÇ…[ —Ž ·ÜÝl“4K£ev y›$«8Ú¨YúwÇÙÍ¢•}ÄêÌbÝÏ~·Ì²äÌõßE«]Š?{\[ï]¤Ëy½óŒ¨8Ë·å<»¿ù^w»(‘ÝoXqþGoçÿm¹[Þ®â2 –›¬÷çýtúÇaNü å³øËŸ÷|"гU¾&æ&–±lÿšX<,çñîÌ£v8¦âL÷ûa×çîúñ¸¦7¦øÑÑK;‡XEqº?ý//¯ë‹ý¼Ÿu^Ý…äöâY¶7ï_ÿý·‹«‹?¯¢Ýîò%ô°ÇrþåòïôðÞ[cÏd§¾“›³M^ž JŒ¡ÁÄ#—ÇvŸÎU0··Ç(©5"Ú,Vñ ’(¨Eš2M´;fŒ0ûƒnÈñ*^ßÌ’ts* md•Ï)§†>Í'ŠèðàËôÀº—‹û¬ŒN¾:Þãê ‚ZGÛÒð©Íùw6‹÷4W¢ÄYä\frq·\Ž­³®ãMV…ÖûüÑ­ýÛhvP÷*nuöÛ4Þínž±ó•Ø`;ÊìÜâ êé}æß¨'¤ñlÚ?qÞp¾¥Ñ¶©9‡1lk”èκëÍì>:™PŸ§Ó€v;ÿþ.ÝØ 9¾YÅ›ÅéTú2eë~Y´XÆâƒ~ ¹ ‡AOÅê˜v¼Yv&\G8\Ú·CÈâï™_6‰]é­nî’ÓÉØýìâ.Z/W_.×É&Ùm£Y|y±Ë]Hdã›âNÒeœvÚ¨»\1G—põK²šÿývµüß®þµMVë$ÝÞ/g®èø‚z]ÌÌE”îŸç/eÙ)çù*ž?šÿŠW¿ÅÙråw¦ç'ÔùrLùåô»7ûI¤å¥œ^I¯«xå=gcAàÆ‚4æùÀYǃ=|ðÎâ²AŸs_p¯à·R.ZBÕÑÈÊÈîxÍþ°^=>MoœMòôî÷IÞš¬HÕ[ñprV| Î~µxƒ!®ŠüaåqñrµÌËàâÍÃzÿè½ÎÇ´‡)Yˆ5Ì‹v¸}Îqov³¤üñè Wš_Éqöé¤Ñ|çn•D\®óþ]çÎg<žÏiç9ûGâÃlÉÖåè¢|>䎢‡ì>IáBp¡èB­¨çRäúL¶{½µ.ûbžÎ¿;T9\~7rŸõ%÷CÂnÔ„ÂŒöI†OHBË) IòpÂ) „–>ÉýAŒlBî3JÄAÆ‘½srßQî»8•à×·ñ|ÏAõƒêÕªT?¨~Pý úAõƒêÕªT?Ò]È¿ª¹] ÇÑ¢žóI=Çý>_ÖŽæ<®v¾ß;9;Éû²“‚¡å„Äoá± Ü8RË©"’ÙE¨_Zrëš’‚0®ƒ×+z¤$#â(}0<)¹Òh=% êÔ#¨GP A=‚zõêÔ#¨GP•)wNPÈe! Ύdzw<žúäýÒ'ÿ¹Û%³enÅ+…íI1T‰§Dø-ñDK‘—YIWá“W|qF튛f÷7¹1L,#] mF²0'‡êF>×—mmi’.KƒŠIãèw¬æwófÑC–¤ÉCæ1Ù úl×›(™/Ý“êükè;oæÕ‹Ì³kjïá(/¥õÃ*[nWËYÅké ð?CŒÒ4ù6ÆË)Z,Òxe±××íÐoõ†Aãû{‚>ìÄÞÅT7w͒ͦ˜w'ÏÛÓo.î£Í|O|dI^a~ñòÛ/—§ïÁ’¿eå+N[æ]PÉIÐ7Zâš(§Q$Ì«èÄ!‰É‹4ÒBÚcMƽ*O1²‰öÄv˜Ñï¼ Þ^Èoy¤þ&%ñP¤@‘E )P¤@‘E )P¤@‘E )ÕT£u¾·(BP„ סJã€[·þÌ­Ë!²Å„C¨çl1S$4MD`´œæ \‹Ë‘²ëΨ͸õJK†r˜bm††$<ÜoµdkV· ìé@pëÃ$²Á®Æ²+ðëà×Á¯ƒ_á׃CŽÜ´á×iåßzã×U߈)àĽǟXo“Cb’‹F¦’‡èøuá™_ÄÈOɯWg«À­ƒ[·nÜ:¸upëàÖÁ­ƒ[·ný͸õ|i†nÙ Áª·q›b^€ßÀoà7müf'ë8K¡HóÀy å‚ã@Ê)׳”KAL2Î'š„ž‰I!Ý6ÔNÌÅóÂß‚-䓨"²Fb®J#KÚŸ„„sÙbdÕWQâlzÊåÞ±˜«;Kr–4…Ž :.踠ゎëMt\ª‡Ž+_Çez‡Kšnóãyk‡Ãs·5”DÛ#N‰ñ»7Ïæ}JýV¶\ÅoA¾ùä[oA¾ùä[oA¾ùä[?–|ëCS‚ÉÖ…|Ñ Ô 8uo‚”wR‡Š Nó)œæûÇt¼oà:¾]ç®׊뫸þoãÍ<ÞÌKD\aoVR5Nw‰+MŒá$°Hrjqµë-Á->£Ú«„«ÊÄê¡’HU¿ƒ•µFkMó‘ÖR¦zYzNÂÕP¦U÷w­¯éIÇåÑsöéóoùóg–ÁD\[§0, Ü_ñ–FßnŽ4}ȱ!¤#¬•t„Uþ±7í£}§iaŠýg¼«GÐÏò‘@[ìø× aá§Ï!$$@B $$@B $$@B $$à%ÀK|JogŠ3Àuà:’Àeà2Àeà2Ž´nÿÃØýô(œ¤¢N•Á¤ûn¦(6 a¡«t÷Üý§ÔÄš‘špfÂ3CómUÚ •î»ù8Ú‘·mÿƒÆ?c5mAÛ´ýAÛ´ýyÑn1ÚC¼ÅC΄K¼w¸DBš¿Ë"u |j¸ˆ¤Êè £Dبaªˆ(Ž%Ý‘›LUFÖ u1ŽÑg†¶ÉòHñÒ0ñÒ“ò qâ&ÄMˆ›77ñíYðfa“è6ÙH‚‡ÜÇÝ'8œ (¸(–b9ÓDUÐ{þ…ÿ´Ï½z•A &\©i0U„= ¦;rÓÞóåFÖ ¥„…ú\›ú¼Ê¹ÅТö:@Õ«¥ÑAu¬þ—ì =TÑC=TÑCõUUÕ§û¼ô×}¾R›bzkS$QTØ@&èÑH¥™8E) $®)› AL~¬\åµ…Ë F~Ê.Û4Ére š¸@®¹ ä*«@®¹ ä*«@®¹ ä*hâ¾$áû«dv=1»Y®£ÅÇu °íp$ߎ”ÜÝíâìæ;ªëáAð ô‚Áƒ ž„+Á•ÞÌ•þ?…xÁ >þØâãpññó>A,4^ÅÇ&ßüˆ…D­§LðÐ!›îÈMÅÇåFÖ „…¯›Âœeá¡3 ÅPJ¡õç÷pž{5A€<šxòcÈ!?†üø•üXö‘ûS×GNœöÖ ‡DÓgepà1rb‚H)¹ÈIh9”ð\ƒ,ÝÞŽÏÈ©ÒÈš¡¾"'aº¶DäT-‘Fì„Ø ±b'ÄNo;™áb'5BågDM”+“Wl3åµrËPHT©¼rKçÇœ¥üVn aä§ì,|—Vi!ÑZµZ¨ÕB­jµP«…Z-Ôj¡V µZ¨ÕB­Z £Z ª*|!ð…+¡^ _x<õZð ˆä!’ß“–¼7iÉãTN#!7³ÔKÐ ïÐÍ)›Zd¥2'º;r3©W•‘5C)¡aÈÏé·Œ5¨ÅPnòV›èÐ= ¥m–ëÂÁ¡ô‚Ò J/(½ ô_é%t¥o õ}£&F ËßçÊÉÔ}J½’Ø#¹¨‰ˆ"’èÙ9û¬Ôk#?e“î(^Ñ¡ª/¨¾ ú‚ê ª/¨¾ ú‚ê ª/¨¾ úB‡nh¾@‚$Ž$¬Lt½]Œ„J‡!HȺNmÍ]‰HF…jÊÑù±ÛÉ·+rÃD×F~ÊšÆ]ò°™£¦Ù-d·ÝBv Ù-d·ÝBv Ù-d·ÝBM#ò[Èo!¿å]/{g¹"^rOžEð<Ù³žI"ܱˆêŽÜH_idÍPF¨ u#|ó¡ÁŸƒƒxà!€‡þ ð<øAð‰·vò7³Ç²°IõÞ`‡m´t Ì —£&²ˆ¼+<%ZË©Å5Âá*"„V^·×©0±f¤$Á0ÿt¨‹ÀhÑä>à?B Ô÷)â‰=Å;Ïùço èç4½?ˆ3Q[UbbXê´`˜FßnŽß4}>ìní¤iå4Ù ôQ/ê`´9V÷c%#rŒ)6 ¢š=M±Vq9šh!}N°öUnK5-ÏìsÆœ)m†Ú/ÿ@;p´˜¤{et>ú,½XÎ1E7¢MŸZù‹‚ÏdMß)ú* Fšp„}&-RHÍËnI#î3YidÍPA8ºánI‡~ÖÝ’üdq²Ží¿±Y2ˆÈ "ƒˆ â[dþÎ6Kê¿97µ N»Ât]Á”ß•­Eb{$û}HÂóciƒ¦®ÈÍ 1òSÏâ¥(-@iJ PZ€Ò” ´¥(-@iJ ~”ÆùT9ZuÁâ¡‚ŽBmj P[ࣶ@ÐDræ9ý$¸ÏD'Úe› †9 ô>ñåÔü‘›ÊäʬʈTgÔŠ(ÕnhèºåšOÈöpžy¸8=zô èAЃoQ`ö Uåßz£ë5Ù¹SÓ@ºA¿ÐƒR0?ÂÈOIfËUlƒЃ A‚=zô èAЃ A‚=zô èAÿô ¨¾›û-Ðó\’ý)\Í âf*9áùqHDwä65Þ'6VÔ„…œ)ZÍ3z•ƒÃäà@‚!B„àø„ éÁ æ<-‰!¢%1-(IÈ^‰©l¸Dóp) Bqï-qJ¬ 1Õ;SíYKH©9!rBä„Èé "§ãè‡ýèRªÞ[8ò€0Ä‹\¤6ÌcÌäĉ6œù±"†wEn&¥ÄÈ&R*CØ!-!Þ¹”je‘ JnÒøn9Õ:Î"‡8¹€° Â*« ¬‚° Â*« ¬‚° Â*« ¬:+¬rçĆŽPU}$UöB…ëÀu HìO±Ë!ÒÅ‚1§–S~ÓÅL‘ÐP6 §ŠË)W$pµ"2”^wõª´±d('ûfÁ G†$<ÇÚ3·«Nnx(•×mgrèC±Ço̯¿JeƒcÇŽ;8ö·àØûì‡Jýqìµ[õ‰ÞÛ¡º}ÍMAwkÏ‘“!¡Û É!9¢Ý" G´sš‹½†NUFÖ óJ“Úˆ($ÛÈêd(vDý4{ía£½®ó«ê±[L0††©÷.¨vÂӚʉ`$ÔFùZ5ß#q£¦\™„ó®ÈÍ4Lƒù)ÛAE›å:ψ !tKÐ-A·ÝtKÐ-A·ÝtKÐ-A·ô#è–ž ¥Ñ.LùÝ<^¤q¼ûýxBŒd묌Vd@ËäÍ™âUô8¦#AÇ·Ži<“€ µÊ³©œ)¯e¯ÜåmÍDP"…PSÊUž2VÝ“ÕMÙ¸r#K†*£[ „P24O›Ó¡ŸEÊä§·Ú]꺇BÃ4–…_AÅTLP1½Út‰õi²¦ßJÆöœ$QT¨‰ýpêUƤI(hà„¦lê¥CÖDuGn8UY2”9±U›‘š0]?’åmå‚Ó¡ï=l‚jAC13@Õt²fG1E›Éš š¨úenÐ{{ažÏ$Ê.:½NÖv…§˜rMeô”I"™=ä®·“שºÊš‘’0ðsC‚¶ÍPJ¡Ñ ó›â°ÆEV¸Xáb…Û~…+z¬p‡ê"¾°ï í-QÔ?l 2Ò¹ ¥~I¾—ˆËvÈÓoH(M˜‡ØÇ™ /OH(ÝãqʦW”èüØÁûà7~ú‡2¸ÙÓ_×4ÖÓÓ_WvÑòDŒq¸í\œ¬ã,­Rc´t´²„E·²m¡ËäMŸv(¥ †±OËÛX[›á°Tþï°¶NÃ#ÞØö•Ôlx@«®Üèñ~k]¿QWÁÑÑ›+ª8êê8º"Örxø J+:$¦Ûâ”Öu4¨ìh‹SZÝáÁžò¾U]'ÿn×Ѱ֣íEÕÔ{ UñÑÚ¥ªÊ,¨ûèü™õ¸¨¦Õ]§žÖÔ ¤‡‡5Ok #ú>Ác㟩 ñ ~®T£®Xc _ð Z_%Ò®N¤µÁ5Ñec{s‰{Éâ•9×Ú4es{»¦]@ËïMË]ðÊeï>+ó¿ç2À]À*$ð ènh¥~ÐJ¶d47«m( 7ƒ›Á͆p³ÝòßñÅ÷‘­®r ^/û˜^ö/ƒ—ÁË<†Œi´ÙÝ%éú3¼ÐÎÖóÃåàr#ºÜ#\.÷‰]®¥$§¤W@ón(Ì“ž¥ÒÀëm`q¸ŠãôëOÅýo‘Fë¯?ý?(Ò4gÉ·fifengine-0.4.1/doc/doxygen/000077500000000000000000000000001304641216200156675ustar00rootroot00000000000000fifengine-0.4.1/doc/doxygen/doxyfile000066400000000000000000002072311304641216200174420ustar00rootroot00000000000000# Doxyfile 1.7.1 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = FIFE # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. @INCLUDE = doc/doxygen/revision # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = "doc/doxygen" # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = "The $name class" \ "The $name widget" \ "The $name file" \ is \ provides \ specifies \ contains \ represents \ a \ an \ the # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = YES # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = YES # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 4 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this # tag. The format is ext=language, where ext is a file extension, and language # is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, # C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make # doxygen treat .inc files as Fortran files (default is PHP), and .f files as C # (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions # you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. EXTENSION_MAPPING = # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = NO # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen to replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penality. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will rougly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols SYMBOL_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = YES # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespace are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = YES # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = YES # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = NO # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen # will list include files with double quotes in the documentation # rather than with sharp brackets. FORCE_LOCAL_INCLUDES = NO # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen # will sort the (brief and detailed) documentation of class members so that # constructors and destructors are listed first. If set to NO (the default) # the constructors will appear in the respective orders defined by # SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. # This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO # and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = NO # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = NO # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. # This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated # output files in an output format independent way. The create the layout file # that represents doxygen's defaults, run doxygen with the -l option. # You can optionally specify a file name after the option, if omitted # DoxygenLayout.xml will be used as the name of the layout file. LAYOUT_FILE = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = YES # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = doc/doxygen/html/doxygen-log.txt #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = engine/core # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 FILE_PATTERNS = *.c \ *.cc \ *.cxx \ *.cpp \ *.c++ \ *.d \ *.java \ *.ii \ *.ixx \ *.ipp \ *.i++ \ *.inl \ *.h \ *.hh \ *.hxx \ *.hpp \ *.h++ \ *.idl \ *.odl \ *.cs \ *.php \ *.php3 \ *.inc \ *.m \ *.mm \ *.dox \ *.py \ *.lua # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = engine/core/ext/ # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = */.svn/* # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = * # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = YES # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = YES # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. # Doxygen will adjust the colors in the stylesheet and background images # according to this color. Hue is specified as an angle on a colorwheel, # see http://en.wikipedia.org/wiki/Hue for more information. # For instance the value 0 represents red, 60 is yellow, 120 is green, # 180 is cyan, 240 is blue, 300 purple, and 360 is red again. # The allowed range is 0 to 359. HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of # the colors in the HTML output. For a value of 0 the output will use # grayscales only. A value of 255 will produce the most vivid colors. HTML_COLORSTYLE_SAT = 100 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to # the luminance component of the colors in the HTML output. Values below # 100 gradually make the output lighter, whereas values above 100 make # the output darker. The value divided by 100 is the actual gamma applied, # so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, # and 100 does not change the gamma. HTML_COLORSTYLE_GAMMA = 80 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting # this to NO can help when comparing the output of multiple runs. HTML_TIMESTAMP = YES # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = YES # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html # for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify # the documentation publisher. This should be a reverse domain-name style # string, e.g. com.mycompany.MyDocSet.documentation. DOCSET_PUBLISHER_ID = org.doxygen.Publisher # The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated # that can be used as input for Qt's qhelpgenerator to generate a # Qt Compressed Help (.qch) of the generated HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to # add. For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see # # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's # filter section matches. # # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files # will be generated, which together with the HTML files, form an Eclipse help # plugin. To install this plugin and make it available under the help contents # menu in Eclipse, the contents of the directory containing the HTML and XML # files needs to be copied into the plugins directory of eclipse. The name of # the directory within the plugins directory should be the same as # the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before # the help appears. GENERATE_ECLIPSEHELP = NO # A unique identifier for the eclipse help plugin. When installing the plugin # the directory name containing the HTML and XML files should also have # this name. ECLIPSE_DOC_ID = org.doxygen.Project # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to YES, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). # Windows users are probably better off using the HTML help feature. GENERATE_TREEVIEW = YES # By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list. USE_INLINE_TREES = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open # links to external symbols imported via tag files in a separate window. EXT_LINKS_IN_WINDOW = NO # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 # Use the FORMULA_TRANPARENT tag to determine whether or not the images # generated for formulas are transparent PNGs. Transparent PNGs are # not supported properly for IE 6.0, but are supported on all modern browsers. # Note that when changing this option you need to delete any form_*.png files # in the HTML output before the changes have effect. FORMULA_TRANSPARENT = YES # When the SEARCHENGINE tag is enabled doxygen will generate a search box # for the HTML output. The underlying search engine uses javascript # and DHTML and should work on any modern browser. Note that when using # HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets # (GENERATE_DOCSET) there is already a search function so this one should # typically be disabled. For large projects the javascript based search engine # can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. SEARCHENGINE = YES # When the SERVER_BASED_SEARCH tag is enabled the search engine will be # implemented using a PHP enabled web server instead of at the web client # using Javascript. Doxygen will generate the search PHP script and index # file to put on the web server. The advantage of the server # based approach is that it scales better to large projects and allows # full text search. The disadvances is that it is more difficult to setup # and does not have live searching capabilities. SERVER_BASED_SEARCH = NO #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. # Note that when enabling USE_PDFLATEX this option is only used for # generating bitmaps for formulas in the HTML output, but not in the # Makefile that is written to the output directory. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = NO # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = NO # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO # If LATEX_SOURCE_CODE is set to YES then doxygen will include # source code with syntax highlighting in the LaTeX output. # Note that which sources are shown also depends on other settings # such as SOURCE_BROWSER. LATEX_SOURCE_CODE = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = YES # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is # allowed to run in parallel. When set to 0 (the default) doxygen will # base this on the number of processors available in the system. You can set it # explicitly to a value larger than 0 to get control over the balance # between CPU load and processing speed. DOT_NUM_THREADS = 0 # By default doxygen will write a font called FreeSans.ttf to the output # directory and reference it in all dot files that doxygen generates. This # font does not include all possible unicode characters however, so when you need # these (or just want a differently looking font) you can specify the font name # using DOT_FONTNAME. You need need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. DOT_FONTNAME = FreeSans.ttf # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = YES # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = YES # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 100 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 1000 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES fifengine-0.4.1/doc/editor_mockups/000077500000000000000000000000001304641216200172415ustar00rootroot00000000000000fifengine-0.4.1/doc/editor_mockups/geometry_tool.ui000066400000000000000000000650111304641216200224730ustar00rootroot00000000000000 Form 0 0 853 507 Form 10 10 831 484 0 6 0 6 0 6 <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:14pt;">Geometry browser:</span></p></body></html> 0 6 <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:12pt;">Load geometries:</span></p></body></html> ... Geometry #2 Geometry #3 Geometry #7 Geometry #8 Qt::Horizontal 40 20 Qt::Horizontal 0 6 <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:14pt;">Required information:</span></p></body></html> 0 6 0 6 0 6 <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:12pt;">ID #:</span></p></body></html> 3 Rectangular Point <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Type:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">Size:</span></p></body></html> 0 6 0 6 0 6 <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">X:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Y:</span></p></body></html> Qt::Vertical Qt::Vertical 20 40 0 6 0 6 0 6 <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:14pt;">Geometry preview window:</span></p></body></html> Qt::Horizontal 40 20 Qt::Horizontal <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:14pt;">Geometry preview options:</span></p></body></html> 0 6 Update preview window Show geometry in fullscreen Qt::Vertical 20 40 Qt::Vertical 0 6 0 6 0 6 0 6 0 6 <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:14pt;">Optional information:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:12pt;">Transform:</span></p></body></html> 0 6 0 6 0 6 <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">X:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Y:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-size:12pt;">Shift:</span></p></body></html> 0 6 0 6 0 6 <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">X:</span></p></body></html> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Y:</span></p></body></html> 0 6 Qt::Horizontal 40 20 Qt::Horizontal <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt;">Save / apply:</span></p></body></html> Save selected geometries to active map Create new layer with the current geometry Apply current geometry to active layer fifengine-0.4.1/doc/logo/000077500000000000000000000000001304641216200151525ustar00rootroot00000000000000fifengine-0.4.1/doc/logo/FIFE_large.png000066400000000000000000006062321304641216200175540ustar00rootroot00000000000000‰PNG  IHDRÎÖRYsRGB®ÎégAMA± üa pHYsÃÃÇo¨dtEXtSoftwarePaint.NET v3.5.100ôr¡ÿIDATx^ì¸Uºµ'È9I0¢ IQ¢"( ˜ÅœsÂ,"¢( DD ŠädÎbBÆ1Ç1£sïýgîüýßÚU»zwuuŸîsº9ÕÝëžïÑÿŽúT­®ðîµ×ú•ˆüŠÃc@ PÔ@Õ5ðàÛ¿4Õ9[çE.U9¦úç—êÌÐé­óëªü,þÙªŸ[CCj€ ¨j€ ¨j€ ¨j ¼4@hÎ…j€ ª …ÚõuNÒyRç_:âO·ªÜPõglp~Ö—úï·èt¯ÊÏäŸ-¯<Ï7Ï75@ PÔ5@ PÔ5@ PÔ5Py ˜U˜Qx•]1k@vm£uÔù»¸-4Ç?ó ÎÝŸû¡þìëuv+æcÈÏÎk5@ PÔ5@ PÔ5@ PÔ5@ ÄYççÔ5@ d¡ÕÛ릳\ç¯i`ùÖçîß±E?Çxâ|£ágãƒ5@ PÔ5@ PÔ5@ PÔ5@ ›̲fÅvRùyy!¢ò£Ò¿Óª³H翳€å[œ»ß+úùÎ×iÁóŸŸóÏãÈãH PÔ5@ PÔ5@ PÔ5@ ”¯ΠΩj€p4 àù7:ûëÌÕùSް¼:Á¹ý»ÿ­Ÿù9Óuñ_¾7xž{ž{j€ ¨j€ ¨j€ ¨j ò 0#4¥¨j@5 ¹—Îí:ßU–Çœ»ŸáŸú»<ªs¼N]Þ,+³ä±ã±£¨j€ ¨j€ ¨j€ ÊKf„¦Ô5P¶P˜ÜUg²Îy‚åqçîçù›þŽktÆèÔä;¼nö<ß<ßÔ5@ PÔ5@ PÔ5@ PÔ@n([`F¡ä&/¯RÑ€Bã:×éü¾°<ÎàÜýlÿO÷%:#t¶-•sË߃×)j€ ¨j€ ¨j€ ¨j€È—Îé6¦¨’×€Âáu.Óy³À°¼XÀ¹û9ÿ¬ÇäÁ:¿Í×Í…?‡*Ô5@ PÔ5@ PÔ5@ PÔ5PÌ(y`VÌ'‡Ÿj òPÜ\ç<:ÿÙŠÀÜBénU9úy7TÃgþQÿÎY:ýt~]•ÏÏ?[yíòØñØQÔ5@ PÔ5@ PÔ5@ PÕ¯‚sº©j d4 °·¡Î©:Ïèü»Às1:ÎÝÏìþû×zünÓéÁ›uõ߬yx¨j€ ¨j€ ¨j€ ¨­«’fÎÖ7w\4 `·ŽÎq:èü£šay)s÷wùDëDNq9ïü¼QÔ5@ PÔ5@ PÔ5@ PÔ@!5@pN·15@ àÖЭ³JçÿbËKœ»¿×»z¼¯Òi[È›6~¨j€ ¨j€ ¨j€ ¨j :5PtÀ¬:ÿn~Y©êÓ€‚Úmt†ëܯóÿb ËËœ»¿ãf=é´âw£ú¾<ö<öÔ5@ PÔ5@ PÔ5@ PÔ@þ5@pN·15@ ÄV d«s€ÎÝ:¿,/7pn_”¯¾ s–NÞ¬ó³æ1å1¥¨j€ ¨j€ ¨j€ ¶®b Ì(„­+oï¸h@Áë¯uúêÌÔù¡È`y¹‚s÷÷þ—ž³'tNÔ©]ñsðG PÔ5@ PÔ5@ PÔ5@ P¹h€àœncj€ˆ…²î©3Eç«"†åçoÿ⃿ë¹\¯s”N­\nNüoù0C PÔ5@ PÔ5@ PÔ5@ PÕ©X³ê<ü»ù¤ªO S;êÜ óq‰Àr‚ódpî¿ê9^¦s¨ÎvüÞUß÷ŽÇžÇž ¨j€ ¨j€ ¨j€¨XçtSÔÀVÕ€BÓ]t®Ðy§a9Áyzpî›ÿÒs¿Pç ßñf]ñ͚LjLj ¨j€ ¨j€ ¨j€غتÀŒ'wëž\oï¸h@áhK u^-qXNpž8wÓOª‰;uúëü&.šåçàõ“ ¨j€ ¨j€ ¨j€(o œÓmL PÑ€BÐÆ:gè<¯óï2æ w«Ê V׆2ÒïÏÝùÐć&j€ ¨j€ ¨j€ ¨j ü4@hZBД_àòûãœ+ØÛ^çp:ÿKX^­°œà¼tÀ¹{.ßÖïÕ:;ó:[ž×Yžwžwj€ ¨j€ ¨j€ ÊOççÔ@j@Þ6:Cuëü7ayl`9Áyi‚s÷¼nÒïÛ:;ð¡©üšxÎyΩj€ ¨j€ ¨j€( š!4å´|¾ î¹VP÷:wéü‰°<–°œà¼ôÁ¹=ÇÿÖï \O×iÌëry^—yÞyÞ©j€ ¨j€ ¨j€(] œœS1×€B¹^:3t¾#,=,'8/pîžëêwó1têò¡©tšxnyn©j€ ¨j€ ¨j€( šÆšòËX>_Æ»¼›¸›u¾ ,/*XNp^žàÜ=ïÓïìZ1:5y /Ïk8Ï;Ï;5@ PÔ5@ PÔ5@ Pů‚s‚sj &PÈÖAçz Ë‹–œœ»ø‹~—Щ³-šŠÿ¡‰çç ¨j€ ¨j€ ¨òÑ¡iL )¿tåó¥ 9ËwR v¹Î[„å%Ë Î Î] ¸ÿþgýŽß«3Xç·¼æ—ç5Ÿçç ¨j€ ¨j€ ¨âÑÁ9Á95°•5 Ð¬…Îù:¯–—,'8'8OÎÝÿûúÝŸ­³¯Î¯ùÐT<M¨s´N-Þ¯Ê÷~ÅsÏsO PÔ5@ PÔ5@ PÔ@þ4@pNpN Dh@áSG‰:ŸäJ·$ãßS@–à¼8ÎS©}Ÿþª×¬å:‡élǦü=0ñXòXRÔ5@ PÔ5@ PÔ5P^ 4%8§| (dÚEçJwËé,σΠΫÊÿ·êx‘ÎPßñ¯¼ðx¾y¾©j€ ¨j€ ¨j€¨šM ÎËZ “Zê\¤óZ@iuC2þýñµçñ:åþýø“^ãæêì¯ó>Ï;Ï;5@ PÔ5@ PÔ5@ “Îé8ßêPhÒ@ç§uþUB ”€.€..çàœzˆ‹ãö9¾Òëþ=‹é‰Ÿ•øÔ5@ PÔ5@ PÔ5@ ”—¶:4¥ÀÊK`ö|+ ©­sŒÎC:ÿ ,§³¼ 4@pNp7`ÇÏó±^ nÐéÈçƒò|>àyçy§¨j€ ¨j€ ¨¸j€àœŽó‚i@AÈö:£tVêüo€Ò8B)~¦êƒ·çÕwì©ûâ<öoë}â ]âúÐÄÏÅzj€ ¨j€ ¨j€ ÊGƒ¦QùˆÈ=× <¶Ñ9Xg±Îÿ–ÓY^Æ 8/NxKèóöª^;.ÔiÉç‰ò|žàyçy§¨j€ ¨j€ ¨êÖÁ9çUÖ€‚ßè Ô™§ósƒR·x·¸œ‚sê!.Z,æÏño½§lÐ9C§qu?4ñïçƒ;5@ PÔ5@ PÔ5@ På£*CSŠ¥|Är–ÿZ!Fo:ß–ÓYN ¤h #8¯ÑòÚßdº~ú°°˜'?;ò­ê÷âqq:õøüQžÏ<ï<ïÔ5@ PÔ5@ PÔ5°µ4@pNÇyNPXÑ]ç/ J Ë©ŒHç5Z^÷[Ãu6èü¨sƒN‹¨ >Á9¿_ü~eÔÀßôø¬Õ«Ssk=4ñïá:5@ PÔ5@ PÔ5@ P壜 )…Q>¹ËwS0q½Î‡9„yÔ@ÖÀyV×7йTçK Í?ôÿ¿D§gè{‡xŠ|;vùóxLKQÑïÊRCt¶ã³Jy>«ð¼ó¼SÔ5@ PÔ5@ PÔ@¾5@pNÇy¤>ì¤3^g áá%5P) t«ÑúúŽ:suþª#YÌ&ýoŽÖAÉ.Á9!w)BîBÿNÿ¥ß{u†èü.ßMüy|§¨j€ ¨j€ ¨j |4@pNph@!C óu^!(­(-4âÏ/º~ËÏrÝÝoHãÝoV>Aay¥æ»Qç¬ÿâ¾ç¿å9/‚sÎëel¯—Ôs3Gg?_óá¶|ny®y®©j€ ¨j€ ¨j  8/sp®0¡‘Îé:Ïéü›(¶ˆ5æuù+?È7<+;õ¼]j´QXž‡©ÛöF9èÄ2cÍG<ÿ1?ÿ¼vÆþÚù=GSuöÎÇéj€ ¨j€ ¨j€(} œ—!8WpPWçxGuþIà{àChchz×£ŸËag­“†&KÍo(Øì9ôn¹rÎk²öÍ?Q1Ö¯§Eq=ýLÏÓ$Î|Ð-ý]žcžcj€ ¨j€ ¨j€¨¬ÎËœ+ ¨©3FgÎßwŠîÆ®ßò‹L\°Eú¾Xjí4QayhðËׄ~v뽦ËÉ×<%K^úŽúˆ©>x}-ªëëûz¾®ÖiWÙ)þ9>„SÔ5@ PÔ5@ PÔ5Pš 8/ap® `[:KtþB˜ST0‡P4†PtÅ«?Ê9“Ÿ—v}gæŒW°×ßu² ?uµÌzðj%†Záõ¶(¯·¯ëy»D§5zKó¡—ç•ç• ¨j€ ¨j€ rÑÁy‰s}áÿ­Î`{tþLxS”ð† 4f tþ_Êèó”ƦHÍoŒÝì=r\s×ë‚bR~çù§ª¬ÿè1|Qçlf¹)5`É߇¾:5pïÓ_Ë‘?*M»Ü–˜·½IjÆmÒ€öZm'I/-0pï[ãB}U§¾øw—œþþWÏé Ãu¶çÃpq? óüñüQÔ5@ PÔ5@ PÔ@”΋œëKy[«tÞ%|)9øB'k5;Yoyà=pì2©Ý~r•€x­v7Iú™¬ÿ[6“égT ØïÒo¶œuÓó²|ÓÔ\5kŽ×ñ’»Žÿ·žÓE:Cu¶á7¸©j€ ¨j€ ¨j€( œÇœëËw+‹t6²”d!¸¬fp¹úõŸä¢é¥ã y‘°<€g¼ãößx>Êßh[åðó’yAV³ym/ÉkûŸô¼Þ¥3@ç7|X.‡ežGžGj€ ¨j€ ¨j <5@p#p®/ÙMtÎÒyAç?„*% U+«V.|î9æòǥŞÓ}wx–À[Ýèµ2ÎÍú¿o­ÉðY²rµãw¾Iö7I¿±KäÆEo3Æ¥5Éë|I_ç¿Óó{»N/>d—çC6Ï;Ï;5@ PÔ5@ PÔ5PÜ 8¯fp®/ÔõuNÔyRç_„(% QÍ« PN]ñ{´‡û®ûÏ•s§¼$(Få5ˆ× j  øBëÍ:Ýøà\ÜÎ<<Ô5@ PÔ5@ PÔ@ùh€à¼À¹¾8×Ò9Jg½Îß ) )« RÇEÏkÞø“\6óUérÐü·x0žWø¾kH_ÕÉæïÉæ3g„ì °Þ¤ëTsÑ#2ÿ©¯øý)óïO\¾Ç%ú9>Ôßë:|à.Ÿnžkžkj€ ¨j€ ¨j ø4@p¾•À¹¾ o§s¨Îr¿–( l#l«v Ü÷ü·rÂUOI˽OI š#`xNà{Š‚òì§öî·æôßçáÓ÷4.ùX¯­¾ÿ1Keò’÷ªý|òZÉ…Å×À[úû]®³¢‹ï!šçŒçŒ ¨j€ ¨j€(m œœë‹ðïtÒY¨óß%þòOÀFh^­¸}ÍGrÐ)«¥Þî ¯³…ãiÁx¾›þß«0u:Þ*ýO_'7=ýµ,üô¯rüm¥eßÙUú™æó¤ö\ï)p=ª+Pßí€yrá´²j3c\x 'Ä/°^ÑŸžN >|—öÃ7Ï/Ï/5@ PÔ5@ PÔ5P 8Ï38×Þßèô×™«óS_²«Tòw#Dªn ¬}óOrÅ›¥ûˆ!Xî¸Ç#áxlÎ ˆ«[|·ÄÀ=žiší3SÆÜ°Aîzï¿dõŸþ“4+~ø—\²ô}é:êþŒ?Ã8Ô¿Óû÷A~ `OÖ“ ºÔ›íu»}Ùã²à™¯yÝá"5PX ü[¯­ÏꜦӈÔÅñ@ÍóÄóD PÔ5@ PÔ5@ ”žÎóÎõå¶§Îto«&òï'Ð.u ,yé;9éºg¤u¯Y‰¼ñŠyVÙƒÓðlÿ÷]‡Þ+gßó–,ùæï²ò§W8·<ÿtîCR¯óÔ¼|†dÐ^dO‚ê@݇éuàp ¹uù„§……§<¾<¾ÐÀ?tÕ9N§.ÄKïAœç”ç” ¨j€ ¨j€ˆ¯ΫÎõ%¶‹ÎM:Ÿ—:¨äïG Ì\ÿ‰ ;cÔß㶈âMÇEž’WŒw¼Mjg9u:M•~§¬‘ëýBVüøïJÍÝüuó‹²CŸ9Yÿ½æóUà|ÿï °žªgê{t\2c“¬~ý'B^B^j ðø?½¯Ö9B§®ãûpÍsÃsC PÔ5@ PÔ5@ ”†Îsçú²º«Îµ:Ä$ò3h—ºÖ½õ³\=ïMéqØb–û<€S6?å¿ÉÖ¹ž¨§ƒé]†-Ëgo¸–ºfùûñº# ü Ÿe–N__ó½xÐyîxî¨j€ ¨j€ ¨ê×Á¹Îõ%³¡Î):Ïèü;F/ÂO[ϹÇc] Çzý–Ÿåú{·H¯#–„`ynòŒ<@îè ÿÞhï™2üЧeê¦?ÊýøgµÎu¸Ÿ1‹t¾( Wô»d³`DÐdˆƒIÓà ½eïY2îÚgäþ¾åw«¾[¼•5ÔÿZÏÿ­:{ñ»ú¸yx¨j€ ¨j€ ¨âÓ@Ùƒs}¡¬£s¬ÎÃ:ÿ d(kÈ@°·•ÁÞòM?Ê™“_]úÏõyP^$¯W”íÿ®nòÚÁh,Jçé²Óà{dÜ›eÞ‡‘û¾ùGìæšG¾¾§®“:]n7Ÿ×ÿ÷Èö÷®èøUÓ+éõ;O•¡§¯•ë>æ÷l+Ïx_ã}M5ð±ÎDŽ|X/¾‡už3ž3j€ ¨j€ ¨j z4P–à\_kèŒÒY¥ó„ „ ÔÀÖÕÀ]!‡_ð°4êv»ó4°<-(¯ {<Pã Øl¡³÷ϽŽ]!—¬üH~õ7Yôõßc?Ó6ÿ$‡hAi“^ãôäß)g°ž ¨gŠzÉÒ÷)“Ÿÿ^~ù÷¢8ãO¾óMiwðÂà÷ò~?ïwÍ|L²pªW¦G€ôÖ}çÈÉž“^úžµz*;ûkz¾P§%Ü‹ãÁç‰ç‰ ¨j€ ¨j€Øz(ip®/‚¿Ñ¨s·ÎÏ„·„·ÔÀÖ×ÀŠW”s¦¼$í˜'µÃð4–gp”§å8ÈÃpÜBr÷Ÿm˜/ÇLÛ$³Þýo¹÷‹¿•ÄÜóùßä²µŸHÏ“ÖHÝ®ÞÂ@úɨgZ¨HÓÓ¹Ò- vÄÙÊì‡>#È%È¥ªG(A^çL&|ßzâ<Ö<ÖÔ5@ PÔ5@ PÔ@|5Prà\_ø~­ÓGçï J·>(å1ç1‡æ?ù•Œ¹ø1iº×Œ0Ï+(O½Ùò:ÈÁÌ®G­ó–| wúÐ\ªsóË?ʰ+Ÿ‘Æã’| 2ÃôÌuu§§ƒéQ = ˆ¾Ï¨ûåÚùo cy-ᵄ¨ üSû:ãtêñ!>¾ñ<7<7Ô5@ PÔ5@ PÔ@a5P2à\_îºëLÑùŠ/ÚÕò¢MÈU=.ÁØ÷›–¼'ý]®q,·yÀ<Xa3¸É݈•'u×é:C±7 4Žeà…ÉõOÿÁórš™ê¨?nÆfÙùÀÁñpMTOëPÏ›^Uî;ÑwÞïN9}Òó²lã±Ó8ï1¼Ç”‘þ¦¿ë:#ujñ¡¼°å<¾<¾Ô5@ PÔ5@ PÔ@¼4PÔà\_âv×™ óQ½Ä"PÇN+_û£\0m£ì6x~Xž&~%Pž$OÀñwÓÿ›?-Ü-cnÙ(ÓÞø³ÌûäÿÊzîúøÿä‚eÉ^ǯŽ9NÎCâß—~$LϤçàFoÔmºzÞCr磟ÇN÷¼ï —™þª¿ï2Ct¶ã}¼èy>x>¨j€ ¨j€ ¨ük èÀ¹¾¬í¬s…ÎÛeöÂJhD`; ÜûÌ×rÔåOH³wD8Ës…åÉð5-(Ïà$·€<ñÏ; ß!{±LÎXø®Ìþý_dîÇÿË ƒžûN†\ú”4ê©1.z¼RcP÷az!@zT¤‹:Ñ{y@&,|[c\lyÿ£ªYÿ¥ÿu~Çôü? ó˜ò˜RÔ5@ PÔ5@ PÕ¯¢çúR¶ƒÎ:›ªùE1và’ǃð¤:40eÙ2pÜJ©»‡Âñ¤(–,a¹‰_É”‡à­ã$÷@¯ÉÍt¿Cêï=Kö;÷¹ò‘/åÎÿÊÉâL{óÏräm›¤Í{Í14ׄs?ëIîôL®ô(Gzš|ô°=¢·p—œuË‹²|Ó¼&sA‘¨~ ü¤÷¡;uöÓù î«ÿážç€ç€ ¨j€ ¨j€Èb Îõ嫱Î:tþ]p'¡45ÐÀê×’‹gl’NCïMu—GEo„cX²…åNqgRlH(O†ääUÐÛbÿùrØ/ÉͯüIæåTâÌ|ÿ/rÖâ¤ë1«Ý‚ôL0= ¤gåH¯Do¬Å³£.|Dæ=ñ%áiõÃSžžhà:Ótöáƒz~Ôyy©j€ ¨j€ ¨êÓ@¬À¹¾hÕÓ9Aç1Z\SÕ¯…ÏýA޽ò)iÑsVÅîòÊÀòtÑ+Q Ü…·æßg³Û¨ääyoËŒwþGf}ðNžŽÁÕ#.zB Æ%8Þ¾½"WzV =•}ŸÁ‰^§ÓmÒïèerã}ï2Æ…ð–?>øLïá7étæƒ~õ=èóØóØSÔ5@ PÔ5@ P•×@µƒs}¡ª©3Vg­ÎßJ«”òð@SW~(ƒO^-õàâX"¢X*€å‘YåQ®ò\@ùž Ìuêí=[úœù°\²ös¹ã½¿p x nÞô³Œš¼QZ Òÿø» ®ë?2Þ¥P=å²ë »å¼Û^ÖòZÆk5 ¼¯çâö|h¯üC;5@ PÔ5@ PÔ5°u5P-à\_œ¶Õ©ó€Î_øb›[‚¦ø8õªå\¬yãOr٬פËð…Éîò°Ûw«ÁrßQnA­ÿÏfýï–á×>/ŸÿQf¼ûÿ8[ñLßò?rÊ=ïÊc—'zA@z؉ç’Á…ÞT kÇ\ò˜ÜóÔWÕò]â}÷5j ­ÞÐcs©N>ôo݇~ooj€ ¨j€ ¨j 7 l5p®/H¿Õ¢s¯ÎŸùBI¨@ ÄG÷½ð­œpÍ3ÒªÏìÝåá‚O-ˆt3­ÃÎò ]åÑ Üs8Ï’ö‡.‘ãf¿)·¾ñg™®‘,œê=—>ø…ìwÞc^Œ‹žŸÀ‰žÒh—¨²Ñ Ýè9BtÇ…^GázÿãWÈͼO€^æ ƒ¼çÄçžãŸ‹ÿè?_Ò9G§às{€çñâñ¢¨j€ ¨j€  ¯‚‚s}úµÎ¾:³uþÈ—ÖØ½´$•9Hº}íÇrÐik¥~— q,¹ºËóËgIݽfI}céyêƒrÞòOdšº9ñ;7¼ðG9䆗d‡÷˜sæAô\@ú ©cUÂ=¥\4ÑÃúÌàBßýÀ{äÂé¯ÈªÍ?ñÚWæ×>>Äîyä_zNžÖ9E§_ ÿÀcÌcL PÔ5@ PÔ5@ T¬‚€s}éé¡3U羜Æîå”À¨ÌÑÚ7ÿ$WÌ}]º²8û8äœwNË”Üòœ`y:W¹Êí4Ýwžxå³rÍÓßÉmoý7§ŽÁ-›ÿ,'ܹEvµ4é\æÑÕžD¯¼ ½ù>3å¨ËŸÏ~Ãëa™_ùŒËg”èyyHçÚ|˜¯øažÇˆÇˆ ¨j€ ¨j€(ŒòÎõåfu>å‹h,_D ˆÊ-yé;9yÂsҦߜôq,ºË£¢XÔ-l]ÂA à§ÏÑ=;XhÞvÄ}räôÍr“–QÞúæsŠô\°ê3é}Æ#RŸ9I=áH÷ ^ÍX}tGºD9ÑUƒX¨Ir¢çàBwb\êî1U·Jn]þ{^ËüúÈç–Ø>·ü¯ž›•:£t¶çË@a^x\y\©j€ ¨j€ ¨h T œëKL;«uÞãKgl_: „ÊÍ|ðSvæziÐUábÇÛü™*µÝH‹`^‘»<¿°¼^9²×IëäÌû?”)oü§„ŽÁ5Ï|/k‘kóýç§ô¼@ôL;%\m§Ä¸ØïÃm²ÇÁ ä’;^•Õ¯3Æ…÷sÞÏcªÿÑϵXç`mø`Ï—;j€ ¨j€ ¨j€(´rçú²ÒZçbÍ1}±"(.sPL]þ"ëÞúY®¹ûMéqø}Éq,pÛ¦æ™âX*ŠbqÂp['±ÿO7‚%ñï³¥I¿yrÀeÏÈåþAnÞü_œ>“^ùE޾ãM-x}@úìÊAôp±h‡^‘ ={€¾C¯YrÜUOÉ¢ ང÷j ¾øYïõótêü¦ÐËüù|!£¨j€ ¨j€ ÊSYs})iªs¶Î‹:ÿ!˜¤ˆ§–nü^N»ñyÙiß;«ÌŒ´ÀÜaÁ¿§ÂräZ§s¦=fËN/–QS^• Z*9ùµ?sÊìœõÀG²·¾ÖCŒ‹ê! ¤§ä¢‡ã\ DOåRé—„½ž.$ 9eL[ýái|á)Ï Ï 4ð½Î Þ:¿æ My¾Ðð¼ó¼SÔ5@ PÔ5@ BiÁ¹¾|Ô×9IçI”Æ”ò¼ð¼@sùLFžó4êæÆ±fç0.ûôãXrÊ-OËëî=[º·FN¾÷}™´é™ô*§ÜÁåýA_ñ¬4í·ÐÓBôÐÂŒèþâMÖ.ô\rÐñF]G,”ËçlëòšËk.5k |©ççî…xhæÏäË5@ PÔ5@ PÔ5P^Hçú¢Q[çhuþΗÃX¿à”¹Óný–Ÿåú{·H¯#–HíÝo­”Ã< ˜gr—‡‹>“¢X2Àr¡ûÞ%ý/|J.\÷¥Ü¨qƒ°®á'9â¶Í²ËˆûÝ@ôdmåË…^»³ Ñ3ĸ Òõ;Öª÷lwí3rÿ ßòú[æ×_>Åóчzž®×Ù/7åõrÃóÍóM PÔ5@ PÔ5/ ü ÛZuÓY®óW¾ ÅË ¡MC›e¯ü gN~Qvé?7G`ž¦ð3«88|“]¿ébX¬s¸õ‹dä¤rÕ3?È æðd¥S~ ÝO\/õööc\rŠrÉÂ…îĸT 7è2M†ž¾Vf¬û„×â2¾óy©¨ž—¶èù¯³C¾ ùsŠûeìW¿úU738<E¢Ñqºæè1;,&Çmdu=crx-ãõ< Sßûwëwæx~oxï-" t€vã\_$þÌÀ¢z$¬)CX3÷±/äðó‘ÆÝoÏ#0Ï"Ž%w9 ùG¯–ãæ¾#׿ô'™ðòσJiࢿ’—>#Möub\" zN.t·L4.ô=],WÞõc\ÊðšÌ禢|n‡—F~†ê‡îúÂ6^Gß„8<E¡-qºn¨f6ÅD7ªó¸øà‡×^G‹E_Vç÷Åç?ÄäúQ,石z¯1æÝÁ‚óçøX”/€è%kÖoùE&.zGú¹TêtÔ8D²$ŲT"ÃÜ8Ì« Ìý'ýsÒßôþŽÐºú¡uÎç×E¶xApNpN G WU œSCUÕP9þù$p~ _‹þ…¦ Íü'¿’Ñ=*MöôãXRæZRXp`.ûLv—×í1Gv³BŽœù–\ýÜåšçâðlU œ³êsÙ÷‚'¥Q¿y]èÑ1.èöûªÿ¬µÛ­²÷á÷É5w¿)ëÞú™×ç¸>ó9©èŸ“6ÇØò3ÄÜœœœWþ»È¨ïØ1ª…ב"»Žœœ—#ø®êïœÎwç aÑ¿Ì1˜¹éþ÷dßc–w9€[j$‹s8\-4/ˆÃ<30oÐ{®ô<óQ9mÉÇrÕ†?rx ª]—>þ­ ›ø²´>h±t§LԸГõ\ÇÍê7»+ò Ðñõ'  O‘ö½SN»ñyY¶ñ^§‹ø:Í礢Nº‹Ðºò ¬ÔŽÁ9W‘/:Îé8¯*üáŸ'4%8§xÈ]Iàü7úBøW¾ýK!¡LA™•¯ýQΟºQ: º[aù30Ï:Ç|º‰eÉ9’%cá§ë0Ÿ#-X ƒ¯z^.|è¹òÙ?rx b§+žùQŽšý¶t:zUº÷]óƉFÂ"–]ÐJß‚Å0|¿v&‡œóÜùèç¼VѵšÏF%óltF©Á_þ>•_ 8'8'8¯Ò÷‡å tœÀåàªû˜œß9«nÍðïÿÕ¯àÞúb¸‘/‡%órH(c(sïÓ_Ë‘—>&M÷œó´.ó´±, ˆW§‹–}bLé§_ü‰üf3¾«Ö¸kÕe› ˜ûEŸuÍ?çHûQËdÔ´×å²'¿—ñ &9<Å Ó—~"½Ïy\ö¹«‚çû“= @O—rŸ›E²S¤×÷Ëõ÷nóÞËc@ l ìCÐ\yPVjÇŽàœàœà¼ò×Fµ0ª¥È¾?„0&8'8çw!w ¤€óY|qÛ*/n„$1†Ú…üܲô}pür©câX<‡y0Oç2OËâóš»ÅŸ•æõ{Ε½N}XN\ð{¹üé9<E« t‡Ä×¾(-/,<@O[ šßbÝç ·í§œ9ùY¾‰1.…¼þòg—ýóÍ?UÛ—üåïS%ð7žà‡ð¼ˆ4À¨Fµxå¼xÌ’Á95ÄïDîHç'óŲì_, õó õW¿þ“\4ýé8d¾ºLo1NÓ̱,iÊ? áÇDdŽeQ`¸Ì‘ãìºÌCæŽÃ¼Ù€{dÀåÏÉÙ«¿”KŸüÃcP2¸äñïeôô7¥ƒÚ&å ï•œƒž}º¿³Ãßé‘S|K÷9® »M“ÃÏXæ=þ¯Ãy¾óÙ†Ï6ªw™+™KñØÑqNh^DРƒàœàœÀ+wàÅcFpN ð{SU ¤€óî|¹äË%5 ,|î9füÒ|/c óÜË?«šcž˜ïrÈ2òæWå¢G¿•KžøžÃcPÒ8qч²÷Hƒ^NŒK®½«¿³±H6&©K6ñ-»Ïq­¨­Ó÷ÈäÆEï0Æ…‹(ùÓÀ¢R„¿ü*¿@pNpNp^¥ï3Ιq^UÅ?¿õ&ç[ÿ˜SçÅÌSÀù¶ MÿNpšpÊãXžÇqêÊßË q+¥îîê,ßól\æSå‚ÈI¶±I.óˆX– sÌ£yý}æH·×Ë1óÞ“‹ÔËá1(7 œµæ+xÅi1pA"Æ%€ŽÝf,<Ç?Óô¨ø·<4ƒûÜ\7ôúÑ~À\9wÊK‚"aÞSÊóžÂóž·ó~>!så!Y);‚s‚s‚óÊ_˜qÎŒó"ûþ^2ãœ(~€]]ç0œû¡oð%-o/iùsŠÅúX®yãOré¯JçƒîQØu³ÌÓ@óŽŽó´‚òÏ cYLég¸ø3˜7ÙïnÙ÷¢§å´eŸÉ…~Çá1({ œÿð·rÈ”ÍÒî°e‘½Îž³…º9ˆFÆ·$•‡fç>7‹ozMiÒ}šŒ¹èQ™ÿÔW±¾òùÏ1ÖÀ¾¥ù;U ü1ãœ/ÑÕõ^™¿—Q-Œj©Œnøgxs5@Ç9õÀkBîˆçócüÒC`P& ºX4¸øù?ÈñW=);ì­q,˜»Ð<‘eÍâ¸Ì+*ÿ„£ÕÆC¤¸ÌÝ ó™Rw/šk†³æ˜ï4ì~9xâ+rîúoä‚G¾ãðP8öî¤ûÉJýžwzÝù.eÐ ç>Çõ¥¶‚ôþG/•É÷¿Ëû!ï‡Ô@öø>WÔ!d®ô-‡Ç€¨¤Î^÷ ›´Iv¹DÝçaº¿ÓÃÄ·`œìó ÿ¼îs?ºÅìn1× ÉÒ¬Û49êÒÇdÁ3_Wù:Çû?ïÿ%ªe„Ì•d¥zìΠ΋ üÑqNÇùÖEü»J°œ—æyå÷µ°ç5œ×Ô—¦•è‹¡ÂVÍ¥¢¡%/~''^ó´´Þç˜ûÐGOB°›Åô$x®îs{jw“t4O.žþЬ~ý'TBtjàí_U'Xáß]y8WÈcGpNp^dÀ“Žs:η&(âßUš€•à¼4Ï+¿¯…=¯iÁù}•…üsÕŬuoý,WÍ}]ö±@j¶½ÉL44Ï6š¥0.óF}æÊÞg>&ÇÜû¡œ±ö5°•5pêʯdðu/ËŽßçt7¾ÅV²½*îsù¤ÿ¬žcqÏtïúÕ¼ût9öòÇeÑsßž —³ÀògÇŒWt^Î Î Î+ÿÝeÆ93΋ìûC°èE‚óÂVê¬4oZp~a1ÃO~vÂû\5°ôåïå”럑6=g8ÀÜ…æQyæ6Ë|J"˼¢h–*d™ÃeÞrðpÅórÒÒÏåôÕ_sx ¨hà°éoI§£WK½³%2¾¥JîóÛqO>@O ÏÜs»àgë(P| ™ºâ÷å Où»—çâÁWTþgÅ|ìΠ΋ üÑqNÇ9¡\iB¹­y^ Ω¡­©·Rù»Ò‚óýsüï «‹QsúTFœ¾Fì~‹ÔÜeR*4G³ ÁijD@ó £Y*Ÿe¾ë+dø-›åÔU_sx ¨˜jàè{>’}Î~\÷½KzÝçu犽¾ðÜuŸû×¥ˆÜst ÏÍ5N§ËwËewlãu›Ÿ™Ï9j`m1Ã]~öÂA}‚s‚s‚óÊ¿è8§ã¼È¾?¥ðªú{œœWUCåøçÓ‚ózúRòŸ_Lø^žN®¢;ïë·ü,×Ýý¦ìsÈB©¹ó0O‚æÙæ™kñ§PȺÔÏ9FÞ±n09È~¬CwüÓn zΑ=O}XÆÎ}_NÑX5P8ñÏeÀU/H«!‹RzVîóiR{:9qO!xŽëOæèÛâÀsDPù×¼öœ&'\ù¤Üÿ·Ewçó áy¸†ð¹òp¬”Á9Áy‘?:Îé8/G`Åß9¿ —à<¿Ç“ú,ã Îý‚ÐOsx)áK7¡yì5°ì•䌉ÏÉN½îð€yÖм y晢Ylq`Í=`Þ|À=Òï’çä¸ÅŸÊIË¿âðPE¬áS^—cVšt³(fÇPê—‡¦dŸ{;SÌXxŽZ€îîl©(º¥½1Ê=7t»`¨×Áºío’ƒN\!·¯ù(ö×q>—˜WBÃKþòw«ü¢Á9Á9Áy•¾?›brü6TçuPÁ19xåðªzž Ω“ªj¨ÿ|Fp¾¢/'|é&@æ>ú¹zÖ:i¸ÛÍ©À¼B§y†h7ÏÜu…ZØåï:]¦K.Öi®îr€²—yÛÖÊ7ɸ¥_ȉ˾äðP%¤#æ~ {žöˆ4ìug gpŸð‹oa÷ydt‹…)ÄIÙØ–”Üs¯44 ÏÍBâN¥ûÐùrÅì×ãÂ{yìîåUx&Ý¡:¡ ÿîʃ¹B;‚s‚ó"žtœÓq^ŽÀŠ¿s~A/Áy~'õYÇ3#8¿¢ /)¥ôÂÅߥÂú-¿È ÷¾%½[$µvžh€P:—9’-Ò«eš€M¹æ™»îКgŽf©¿÷éŠà¹ò`¬ÔBŸ^><ÏþŠÇàW±?'Æé;©ß™ãbò½9º:‹ƒn19üÇÿ;‡stfu~_ìß­ß™sø½‰ý='zËgè íþ*Ý—GÁéƒÅOùË î¯|írÞÍ/Hû¾3¥Fë Ì1U…æ˜ë?wËšg‘gÞ¤ß]Òã¬ÇeÔÜßËQ‹>ãðPÔ@V8r᧺3e£ì ¾hýT†/[|ѯ¦ý…Ï~-G_ô4EKËkc Í[Z ½/~N»ë#5ÿ5@ lu ™ü†Ùé‚/@ŸÝâ—†…¡Àó ÷ü&/ºe—IÞ (ÔÎN%\êŶ$œçfÁS§¦^Çû²@&Þû–Ƹ0úŒÏS[UÕZ—‡|~¾pRÔ5@ PÔ5@ PUÓ@Eàü ¾èmÕ½²„ö·.}Oy¿Ôn­°eóøAsä ·=|™ ¼áU9üî9<Ô5 ¿ã=évÚ£ºæÎÊÁsÝ¢q-At‹- ­$<Çî ŒÏÍ5]§­Æ¸œ=é9YùêeyŸã³ÔV–Ú/U{Aàñãñ£¨j€ ¨j€ äWóÉ|ÙÛê/{eÖ¼ñ“\2í%éÔ¦lßâ+˜@óP hƒ³¤ó‰ÉÐiïÈaó>æðPÔ@,5pèܤ÷%¤åà:Ïk«ÝĶ˜èç…ç8ÇàZß°Ý2úìµ2ÿ‰/Êâ^Çg¨jy†ú‹÷ßð!Ÿ/zÔ5@ PÔ5@ PÔ5PU TÎÇð¥¯Z^úJ(,~î9î’‡¥Ùî7)D¹:h>AjîxƒŽ€¸`ã- S«ï˜DìŠïŒ›Ò‡CÈ÷5ÀèV<2ÓÑ3p yóþóeïóž–³/‡(âðPÔ@±h`À ¯I»QË¥®î”©m¯kµèØ^ë‚è–ÀóÖ~l‹qž{‘-f‘ÏÍb©Î¾‡-›m)ÙûŸŸªíùéåª>óÏó‹ ¨j€ ¨j€  ŠÀy;¾øUÛ‹_IÁ„é+>ÁGk‹”훘{ÐÜs›Wä4ß:мÎÓdç‘Kdß«_–‘w~Èá1 ¨¢ÖÀASß6;fî=Ëè•„ç&ï<‹Ìómn/ï<<÷®ûfp/Ðißsºœ?yƒ¬zí%ußãóSµ=?ÍäK_r¨j€ ¨j€ ¨j ¨œÿZ_üþ›/ÕöòWÔaí›’Ëoß(]öŸ%Û7»Ê”$AsÎÕ•w"\ЦdNÁ ŒŽç4×±¥tyvš×ßóÙýص2è–·døœ9<Ô5PR8xÖÒãü§¥Åþó ϱH¯Ó•ƒçÞý¡q»‰2öÜurïS_õ½ÏLÕþÌtb>ù3ø¢E PÔ5@ PÔ5@ PÁ9¢/€øXí/Eîá2î²Ge‡ŽÇÒôÊì ¹çšë?·4oÚw®t?ë 9èö÷d˜F²px ¨j Ô5Ðï꺳橳‡Ý’Ml‹U¡ó¼RðÜsoßÜ_\Õ{FMý÷ýG-”[î}|VŠÍ³RW¾àð‡ ¨j€ ¨j€ ò¡lÀùt¾ Ææe0ÖáŽÕÊAÇ*i©[ð̳‚æÖmŽ<\œš·ºXz]þ¢ ù{5@ ”¥N~KwÚ¬“ºãÆö=d, ­žÛA9Àó ²Ñ]€çvg’½4¹Bvï=].šò‚¬~ý§Xßÿøœ›ç¤¿é¹Ø&Èü|Ñ¢¨j€ ¨j€ ¨lÀùq|!ŒÍ aìÀÁº·~–+gn’îgËv¯ítlß$ Íýˆ– Ó¼â\óìãYü2Ð Š@ëu.»ŽY)ûO|]ºã5@ Pª!Óß3;ošõ»ËôHxŽ’eLÎðÜÜŠÊ<•…1^ð÷•&ín£Ï_/‹žý:v÷A>#Åêéu¾Üð冠¨j€ ¨j€ ò¥lÀy'¾Æê¥0Ðà—¾““¯xLZî>Iùx3IÐܺͱýÞ)­±ÃÖ…æ{ΑΧ>"Üö¶ ™ñ>‡Ç€ ¨4èyù Òæàû½Ã-RkWŒÎs‚ç^7…ÝJ* E4&xŽ…YÜgj6»R8b‘ܶô½XÜ ù|»ç£yùz@æÏáË5@ PÔ5@ PÔ5@ dΫ/†ÿË—ÃØ½V 4˜½þcvüRW·Öo×èò4W·yTD ¶ánsD³d*MSŠBÐ]&‰ÍØ­Õ.³Ó¼å Òã 2xúûj€ rÐÀ~7¼.íÇ®’z]¦K­x>9çyžû‘\ˆå2ð\ïÙÀsìbR×¹…çÛ5ÒÅZ½ÿtês»\:õEYûÆŸªå~Èç¢X>Á—¾ÜPÔ5@ PÔ5@ PÔ@¾4P!8Ç_¤/‡›ø‚ËÄ­ Ök˵s^•Ì‘í^¦£ÀÐð"p𧿯m®™ç:`ÒÊ-õ·ó·ñ¡92r‘— XnÐÜçé yN·É.‡-“¾×n’AÓÞãðPÔ5P œò¶t>åQiÜkvÈy^IxÙÀsï>a&TjdxîÝw¼{ŽÞšµ Ç_ô Ü·á›­rOäóP¬Ÿ‡zæë™?‡/[Ô5@ PÔ5@ PÔ5-8ŸÃÅX¿(,Ûø½œvÕãÒ¦£Æ±40O…æA®yÖe é ù³­¿¦…æ.8w 9ç&g×É4o¸×LÙý„¥¿–Ý œú‡Ç€ ¨5-8ßV_hþ‘‡—¾¸¾/çúŠM?È™×>!;uš$ÛÖ½XäsHÌžCòølyA>ù³øÂE PÔ5@ PÔ5@ PYsE_lÞÊãË _\«ùÅuÞ£ŸÉá'/“zͯð€¹Í=pîC‡‚çšûe v+DhÓ¾seÓž¾“¶H¿Éosx ¨j€ˆ©z\þ²ÙT»Ã-^\KšÈ/¶ÅÂsíj…Ñþ‹$xnËBý¼sìfBl‹íÓP×y¦¼óxnïsu.’nûΫîØ(ë´øšÏ5ñZ̯âùØ/6|±¡¨j€ ¨j€ ¨|j p~O_hø‚ZͰçïÆù¯KŸï”íê^$Û*@0c y:·¹noäORD‹n—ÀrÍ}¸Ñ"œkž® Ô‡æ¶ ÔÙÖÜÜV-–=/~QúÞô6‡Ç€ ¨"Ò@¯ë_—öG¯•ú]§W ϳÉ;Ç.¦æ•Ï;÷\ç:<ǽ¯e»ëå”Ë‘¥/}Çç“<ŸTñó?úçëæó™?‹/\Ô5@ PÔ5@ PÔ5 8?§Š/5|1­¦Ó•¯þ(çLxJvÙCãXj](ÛÖÖq¡y6-Yåš[h~Ô@VmËŠÊ@ýÒ88Μ×ët«ì2z¥ì}õkÒ[æj€ ŠX7¾%uÇvå\ZÕ¼ó4‘-Ið÷B:.•áÇÞ'sÖ}Äç”jzNÉÃóåÇ|©áK 5@ PÔ5@ PÔ5@ ä[¹€ó>yx±áKéV|)½ç‰Ïeô©Ë¥A³Ë˜_à §y-ØoÆn•wÝæ~®yÂÐŽs݆ßZ'Mhã}fÉn㑞ޒ^·px ¨j€(1 t»èEiuàb©Ýn²Ô¬¨,ÔD¶èDÂó,òÎݢЈ¼sÏíâ±½'êýq›šÈ^ýgȵ³7ÉzƸÛóÚò|? óçñ¥‹ ¨j€ ¨j€ r絜ÿ›ð<þy “¼)ûÕ8Î70 šgÑ2^¶3nó Ð[è݈–Àiî@slÇWpnË@kír£ìpÀ½ÒùÜç¤ç oqx ¨j€( ô¸êU³³¨^§Ûô~. µyçúÏÊæ£Àñb.<·½¶,4Ùb”±ˇç¸o¶Ö—Ó¯|T–oü¾Ør¹~ÞËùR×j€ ¨j€ ¨j€È·²çø‹š@pOp¾zó傉OKûΓd›íÏ“mjè¸Ðgc¾Ô𥆠¨j€ ¨j€ ò­\ÁùÅçñçSîÛ"û›+ÛÃY¾sŒušûмà-~®¹ÎÝ2P/¢¥æŽ¤Ù~ód·ÓŸ’=¯}ƒÃc@ PÔ5V].{EÚ²Lêt¸9Ï“"[® bÁÌn',à¢kÃönø=)®ó†—ÉvQe¡#[®ssoÅ´¹×ž#;íz½œuõã²â•Ê LÇùwý:ßÇüy|ᢨj€ ¨j€ ¨h Wp>€à¼úÀùš×’‹ozV:t½I¶ÙölsÌK¼Íp^ðˆ‹P®¹ÑR»íMÒêàûe‹^’î×¼Áá1 ¨j€ÈZÝ®z]Úó 4ì>#á:Gw†) ½Æ‡çþ}È–T;ð<çÈ–4E¡nd‹çv‘÷^½×mp±>n‰Üýè§q†ÊåðÙÖñ¥†/5¹jàW¿úÕ©:rx *Ð@¿\µUÿ½³e1ùî,®Îã­Ç`lLޝeñ¾žV:Ûß­ß™ù½á½· <;Ýæòš×'8ßúà|ñ³_É1g­”ÆM/“ßms–Nh¾Õ"Z`øÜdpD´Ø˜–èBÐmk] fj_è @€ÝŠ^σpÚ™AYJÓ^.Û5ÂŒ”ªmſtkÈE ›n‰¯»Û-Òú°Òñ’W¤Óø×8<Ô5@ PÕ¢¶ºÓ©qï;½ÜójŒlIr;ðüþ ßÄ 0—âçù1W`ÊÿžQ-„]YÂ.‚óhîÕBÇ9A`ö àœàœß—ì¿/8V%Î"8/<8sʲ·y• Aë©›Î@sœ7°à<š£TÍ€s[´æ¯5ì1Sv:öÙý²×8<Ô5@ P±Ñ@û³Ÿ—æƒIÍ'Èö¸g9E¡¸ŸaAØ, c ÅX0ÆÂqU"[BE¡<÷#ÕÔq^³æy¥©ãø;=FN^ ÐqNxž%<§ãœŽs:Îs^„©Ç‹àœàœß‹Ü®#%ΛœœŸuõc på6ß^ç(+CiY–… ©ÐÜq›,nó+ x¨Ùê:iºÿ=ÒöŒge·K_åðPÔ5@ ÄV.Ú(-]avF¹ð Â)ðà ÈžçÙ’¹(ÔF«µÙåš8BæRüL“*MùgÛ Î Î Î+`Æ93γüþz°àœàœß…rçxÙPpþ-áyaáùu³^© TÁ¹Í·©ÑbcZ·yv-µÛN’ÖJ»ó_–]/y•Ãc@ PÔ5PTh£;¤ì5Sº:ЭëÜ8ÏC®ó0<·Ñf¸ÚÈ3?môˆ`¡÷^,\cÛ8ÏÏìs]ç{ö¹­!u§Ñ„à•‡_å|ìΠγtœÓqNÇynÀ‹€Žó´ß?êé‡,¯¿ÔRù~÷Šßqîƒó‡Î Îg®þ½ÎÍöo›k®/çxIOq›ûм–“kÊ6Ï&¢¥~×éÒjìziÑ&5@ PÔ@Ñk`çÓž•&ý-¯Í-²%§¢P€sžë½ûÀQ÷Ä2—âgÚ¥œá/÷Ê/œœg nÎ Î ÎËÞå ÜÒqNÇy¾´T.?§dÀù ç…çË^þ.ç‰lóèBÐH·y¶… êÀ«¿×²ãIOIÛ 7qx ¨j€ JN»œû²4;x©)ºNÊ;Šlq]çÖyŽ…iužã~ë9Ï£#[ìb÷1g¯*EH·ßéÏÇ•Çå~ìÎ Î Î+ý`T £Z²üþ” ä«è÷$8'8¯H#üß“èJœJp^XpŽã[·þE™Ýæxy·-Qnó, A·oq4=ð~Ùù¼—e— ^áðPÔ5@ ””Zû¨ÔÑìs“uÙ’eQhœ;ð<¢(ô‚‰OÇ 2—âçy¶Üá/ÿ*¿ñ?„çYh€Žs:Îé8§ã¼ªP“àœà¼ª*·?_2༠ÁyáÁùÎ&˜ÜT³ܾ˜°´²ÍG¯•ÎßÈá1 ¨j€(z ´Ö¨–ûÌöÊB5ë<È;oääg[šƒëüÆ»7—"¨ŽÛï4•à¸òà¸Üç„æY@s€ ‚s‚s‚s‚óªBK‚s‚óªj¨Üþ|i€s?çüO„ç……çûôŸáCóˆls×mn Ìl&+¶™§¸Í/“íb´ åh€꺳 Á@L³«¤n×Û¥å OÊŽçnäðPÔ5@ Úœõ’4>`±ÔØáZs_ îq…* ¹Îç>ôqÜ s)~žcÊþò÷¯üÂÁ9Á9Áy•¾?›²<~…†=ªó:¨ÇàŒ˜‡Bgþüª-œœó;”Ûw¨¤ÀùSç…çÃŽ\˜p›§‚žoòVÍœ»ÐÜ€óK$›BPÎhnCó«eû®‘ûΗV§oÖç¼Ìá1 ¨j€( 4=tµÔj{“w/ÄÀy¤ë Ëpž'E¶è½÷ÓŒE¡ÑYç«^û±AuÜ~§Ý«˜ðï®ÝæÍ}·¹Ì´¼Njw¼UšŽyPZ*@çðPÔ5@ ÄE;œò¬Ôï{·Ôhu½Þ¯¼ûV8·®s Ï›xyç9…ft+ œþ¢4<ð©¹óÞ=ª•Þ«p¿ò}“á¹. gÙUé:×…ë(×¹Âó~Ήd.ÅÏ3‹ð—à¼* 8§ãmCøKp^ ÐqΗö,Á Á9Á9Á9ÁyUá%çtœWUCåöçKœŸ@p^Xp¾Ç>·Ùæp¶™±/ì(+³ÛÇu+y¤Û¼Üæ4t›g(Mr›û®>Ïmž€æçdèÔës·4=îIáÂá1 ¨j€¨²NÞ ^®;œ¦x÷Üs0vñÖ¸Î}çyšÈ–¬‹B]×¹…çׂ{«ÙRëÜß!6õwã™Kñ³¼Q`Ê?Kàî;ÞXJ– ˆ 8'8'8çµ"›kE¦ÿ†àœà¼ª*·?_rà¼3ÁyaÁyÿáwåà6÷2YS A+r›WPŽhqÝæ8o{“ÔÔ©­ñ- ß/p6;ù95@ PÔ@¥4Ðxôz©Óm†¹·˜ñi“à9r3E¶dYšpÛÈ–Ê»Î=óU)Âê8ýNw~~WUtœÓqNÇyå¯#Ì8gÆy–ߟrƒ}Ì8Xh ߯ÕÂûo×’ç¿Spþ„ç…ƒç£OYnÀyînóäBÐ¬Ýæé Aƒlóh·9 F­v˜ÉR«ýd©Óyº4¹Zš¤ðœÃc@ PÔ5¥šý¸î`š§÷’›½{ŠN©µû­Þ=÷]ˆõày×y¥ŠBýާ(Ô,0ãžYQQ¨HÃ}8”uÞªýõ¥ªãö;õ*xËߣú>Á9Á9Áyå¿tœÓqžå÷§Ü`çtœSóùYh+Ip>—à¼pàü꙯TÉmÞr¿¹Òñ¸uRgÇ ^!¨-Ê6Oq›OÐìXLj!¨›mî¹Í}¸á@óZÛ‚\ÚZ»M‘úýHÓcžfã4Â…Ãc@ PÔ5àh Ñð•R»Ëts¿0÷]x ÃóÈÈ'ë<ÒunŠB¯Sz½Ã5âåG…jiv«ód“ñ:AÐâ…ú‹Óewëw{Ü s©}žé3g çÊ/»x1ãxÔ½¥ªãöû¼GðKhž ÐqNÇy–ŽY‚s‚s‚s‚óªBK‚s‚óªj¨Üþ|I‚óç…çK^øÖçv;¸hÁK»‰hñcZðR—{8äà”ó Aëµ»QÜö®ôŸò®ìwË;²ÏøÒ¼Ïœ{î;ãÄ Üæ Zc²p›»-&Û<Ñbƒ :ˆÔîx›Ôî8Uêî5KºÆèj€ ÊNMŽzLêïw¯Ôî4Uï ¸7èp†çÉ‘-Y…ºY瞇\çuÚM’ÝŽHúN~Û@sÜ#ÛZîóJºÎ>{uÜ@s©}žÅù€¦ü„ï MÔ™Ëá1¨@y½H½^è1»,&ß‹ªóüè1Ø7&Çײx_Ï{W§Nãöwëwæ~oxï­@×ÇN·Uý@ Í·Óù'áyáàyF—åœmn_ük¨›n :Îá:·ð¼ŸB‚Îg>)õ;Ýêo_8¹ÍMDËÁÖ÷š;fWå6O†æ FI0{L“z}ï–Æc’¦Ç=Éá1 ¨j 4pìÒ`ÈËr»¹xà܇ç®ë<*²¥2®s,Ãyî¸Îkêÿm§‘H¯ oHß›ÞÜÎûOyGvr¯lßäŠJ»ÎÏ›øt©ê¸ý>Võ¹•žÐœ ¨j€ ¨j€ ²Õ@Ú­GÙþ¿ ôm‚óÂó;MJ€s»=< ·9^þ1û^ÿšqﯮóþê¨ (è=q‹´»Zjï2ÑçÉnsšëØ Ùo” Ûlª@…Ãc@ PÔ@ij ÑˆUR·Çlsí¯ÝY\ç©‘-9…b¡Wï[^?‡Žç¾ë¼ù¾wÉž—¿,½oÜ"}&% 9ÜæX\nÑkvœWÂu~üÍqÍ¥öyúçò|Êÿ–/DÔ5@ PÔ5@ PÔ5P ä œ/ 8/8ß{àLÙ-6¦¥žiñ3WMD‹Óâo37à\Ë@{^¼AN}O¸®ó›ß6N»>“¶H«_“V.’švk{ÎnóPD‹_é6(ñ¡¹çê:-='¾%½ 4߸Í=hþŽÙ™Õ°ÓÎ+ë:Ÿ³þãRÕqú}þ£Ïšu«òÐË?Ë—&j€ ¨j€ ¨j€ÈEùç眜=jqšg™mn_üλö¨p×¹ç ×y…ç½ ôR÷y— Ÿ—&=g;-!·ù.“¤&&Û<¢4È®r›€p>CêtÃÜ!õzßeòÏ›ý‡Ç€ ¨"Ö@ã±Ký‹ÌµÝ\ãq­÷á¹ç:Áó¨È–´E¡7y÷"{_rá¹ã:¯³ëÍÒö¨µ²÷õoJÏšë½÷<ÜûlD À9vdáY[ê¸oà* ‡.“º{Ïö®é¸¶»ðÜ_4­(²¥RE¡¾ë¼ÖÎ¥ÕÁ÷K÷+_“ ÍqoÃ=΋hQ·¹ÞûúéÎ+Ñb•oÚâAsœçê:oØòªRÕqû}VTõ¡—ž/NÔ5@ PÔ5@ PÔ5‹òÎk+8ÿ7áyaàù…“Ÿ“m+‘mn^þµt—ƒÉàéïˀ緽—Rj#[°}޼½'¼%{]óºì8j…ÔV·^kž·9rmmDKÈmnàŠBs ¢[…Û`Èi2æi¢ †Ãc@ PÔ@¼5ÐhäjÝ94Ï\Ãëì‰8·ð<ÙuÙ’“ë|r¤ë¼Iß»d ^½®{Ó@sÜÓŒÛ\ïqp›'‚:nó^W¾lî™.<·EÛÛ5º\#Ñ0‹†x´úˆJ»D¶Õ¾‘mŸ¦÷è]»ß7Ð\jŸg|.¸üoùBD PÔ5@ PÔ5@ PUÕ@^À9>„Bó Î Î'Ýû¦ÎsÌ6·à¼e¿;eÈíï«ë\á¹Ùâ…šÈÇu¾÷„7 tèréFi>hAjD çíCÙæÈ£ÕIÎ6Ou›–Øló(·¹æ>8<7ñ-ÃVH“± Ð9<Ô5@ ÄN_¯;…è‚ç³èi¯ãv1tk¸Îëw»]ÚŸü¸t¿æ ÙóÚ7|hv›k¿‡ºÍ±ãʺÍÑÿEå=Ï}*œçâ:ï3tn©ê¸ý>CªúÐË?Ï'j€ ¨j€ ¨j€ÈEù眜Ï{ä3œ_bnÆéÖã‚6/pÆ¹Ùæœ7î:Õ€s¸ÎƒÈ–4E¡Æu®ÛÙáЃS𼻈ÝÎ|Föœ#µÚݤhî€s'Û<²ùæ… n¶yŠÛ|//€/{+„Áìs§Ôß÷iŒüó1sx ¨j€ˆƒF?( ß/u{ÎM\¯qíÃóªºÎ£ŠBýȰÚú¿µ½Fº\¹YºùÐܺÍmDK¸àÜ‚" ‹Ê{œ°ÞçÖuÞ$›¬ó„ë|严qÍ¥öyçò€Ëÿ–/DÔ5@ PÔ5@ PÔ5PU äœ_Jp^p¾úõŸ–Ãqî‚s@sœ£ÀÌ‚s›Ñê€:šõzàŒ<×9"[Ò…bûº- l°ðÎ=8øº^ýºìrìCROãV2ºÍ;Þ&¦4²ÔºÍ… šûÙæa·¹…æçÌè48à>iðòÏ󥉠¨j€ ¨j€ rÕ@>Áùç…ç8®Mwº®RnstO}G†ÌP×¹‰lɾ(ÔºÎÏáäëªpbË_•–#—+ÌȸŃ)->8‡Ó<“ÛÜæÈÃõÀyªÛÜ‚óz½î3}î–†-ÕÑõÒøˆ9<Ô5@ l% 4:d•Ôßo‰ÑÂõØ.j&Áó¨È–ŠŠBíý"žpî¸ÎiŽyû3Ÿ“ÎWlV§ùëfa7[·¹ÑòŽéû°nsD™í8h~œWÂu~ù´—âšKí³¬Ïõ—ÿ=_Ѝj€ ¨j€ ¨j ªÈ'8oHp^8pÞ±çTœgp›ck¹_ j¶›œ·¸Fú_¿)p»E¡Èv…ë ¡Ÿæ¾F…žÃÁ'}pöuÖ-ñÎ{Qš \àÁŒÝËs}¸åÏ"j€ ¨j€ ¨j€ȇò Î&8/ 8¿jæ+æå|;¼¤ÃéæÄ´˜ˆ–ÈlsÏm°ËA eØlç¾ëüÀd, …;¯Ï¤· x€p]çnQ(òemd  à ÇÎg<',0ÝlÃïê@slÑ8<É¥4Ñxã¸ÍÀw$æ€Å&ÿ¼Ñ¡k8<Ô5@ d£CVKݹƒHsÅp†ç!×yÆ¢P¿ðÙ”?gÎ:ÇB+@{Ë#”öm’]/Þ$ô¾‚…YÑ‚{Ž)E¶yÈmn¡9Üæ&¢Åu›§‚¾gîƒØ…Õgü‹8ÏÆuÇyÂuÞm¿;J VÇé÷y<¼ü|q¢¨j€ ¨j€ ¨\5opÞœà¼0à|úŠ÷}hî€ó,Ýæç;ô™-Ãgè¹Îg&²ÎóUj]ç€ç€€€­Lêky\œûм; ùLQ̘lóì A£"Z Ôܱ Ð3`‘‰oi4b¥f ¯æðPÔ5FØ©ƒ¾\7ÍõÓÂóŒ®ó4‘-Ø1„±Ñ[ÆuŽñÁy„ë¼®.¨6ÓkõÎç¾,íôþÑÐ<ƒÛeÕ&Û\Ë«=·¹·Èk A 8O.5ns&ˆ\su›ãþ‡ls,$÷8ë ÎkìÇy:×¹×%’\ªð\´Y'Ð\jŸå¦\nùßó…ˆ ¨j€ ¨j€ ò¡¼‚s| çßžçžß·á› ns¿Efä³b«¹q›{Žó†{Ü*#æ|h\ç;®s@ƒA•, °@)[¢(ÔlQpØèø±Ëù¥ù¨µ Ƙ·¹Í3ºÍ³(M‰h±àÜæ@ 5€û\Ëí?Ðh$‡Ç€ ¨«†Ã–KƒÁ÷{×Ê ÍÎ8à<“ë<¢(Ô”„fSŠ{_ÚhÐbisús²Ë¯HÛ ½…Wì^ÂB¬h1… p›û… ÙºÍ÷Ó\óþ)nó4G÷ÇÇ­ÕŒs€s×’ÉuîǤaç—ï:{öšRƒÕqú}Fçã—?ƒ/NÔ5@ PÔ5@ PÔ5« Î!8Ï?8_¿å©ÝLn6¦Å¸ÍÇ÷Ûö(.Ãhžœmnt jµ™ #îüP†ž×y‹B­ëð\á `ÈŽg½ ‡.5À<·y¶… )-Æiî¹Íl­4?íi¡×w\ç­ÛÜD´¸ns…æˆõ2-iÜæØÙdÜæºÓÉs›¿e²ÍM!¨î† ‚b×TJD‹‚óghD Üæ Íá6?àÆÍ pžµëÜ»ãžÜ¾Çm¥¬ãò;uÌ×/_ž¨j€ ¨j€ ¨j W  œßJpžp~ã½oš—tÏmQ Ú"ºÔ¸èœï<ä^9lÞÇž¼S#[bPD¶(Pi©nÄg¼(ÍO×ø–#’úêR »Í=h®ƒ‚: 2wl󌅠®ÛÜ‚0×m¸¤É+ ]©å¡ œ|g¦‰uáðPÔ@1h@¯kæ¦ô7¤qgŒl©¨(4ƒëоÙIÏ™ë9®ëa·¹Ím¶¹Bs¸ÍšÃmŽ˜/Ä}u¯-p›ë‚lW…æÙºÍ½ˆ–D¶¹)¦NsšÛls¸Í±€Ü÷² zœPI×ùxé=l^\ s©}Ž¿ê³äos}°åÏ—!j€ ¨j€ ¨j€È— Î"8Ï?8Ÿûð§ pn·‹›ˆŒÍSKA=h(м×L9ü\çiŠBàÖÛßÏ:‡ë¼Ÿq¿mÜ}È:Oï:Ýl¯ï4ÞË:‡ƒNÂä¢PÍ;÷‹Bmd à @ ŠÍOÙ Yí;Í·¹ Í-8Üæ‹¥œ’š¥Û`F]”ƒ1N!hTD‹ïÌ  ù…N#VI£‘«ŒÝ”èqx ¨j ÎÐ…>ÌqíÂxnË#\çQ‘-¸fâÚ‰k¨ï:Ç‚d¦¬s/²q-óÍõ;‡Ì5£×sì&Šr›»… a·9î^¶y"¢}®ÛÜ‚Âm®ýa·9î[Qnsš{nóázïÃò^g<&5Ú8à<ÉuîÝWÍ=×2âÄe¥¬ãòûlÌ×Ã._œ¨j€ ¨j€ ¨j 2(8ï@pžp¾òµÓÄ´¤)ÅË¿ï6¨·û-2j>À¹ï:[Q¨Í;WÈÀóSŸ—¦'=Ùm~ðL/¢nst~ìqÌjœ[xî—„¶ôºBì¢tÎ-×gÈmóõ°ËŸÃ§°~õ«_Ñy<³Šú¤>‹Mú½™ƒï¾¿SªóØéßpLŽÃãÕyøwó–‹ô;ó@\¾7ü±xŠÃ³X¦Ï0ú.$8Gpžp~Ø©«"ÀyæRPë6è}þ“rÀ¹ï:/š¢P'²Åƒç lN|Fšó¸WÞibZ*ç6*õÀy"¢%š+°ý 4>âAi¤Ð NM ñùO¿HÐ_Ôàñàñ ò -êl¨ {xÈ»öèΛœû®sÏyž&²¥¢¢Ðl\çá‚¿»Ù¸g|h®×aßmnœæ§& A[¤)E<L±p.E¤—WºYºê¢k7ë6×ÅXÏmîR›BP€sšns-´†Û|.øv²ÍÛ\¡9bɼˆ–M\îµÛÝ”ç9–„ÖÐìµoþ) ¹Ô>Û¹¼„ñ¿åK{®Зåñ:ú&Tíó_¹~vþ÷Ô{uk@¿7›bðÝÁ÷wCu ýûψÉqÐÃÀïAqh@¿3?Äå{ÃÏQíÏ@qx«è3Œ+48ïBpžp~êÕO$À9ÜæÆq~˜a´È ef¡RМï4Qº['cîýÄs;E¡pàÁ‰¸0T·³¤ Y瀀€ØßÊ»žë\‹Øàöƒëϸε¨ÍºÎ‘EÛ]·Ö|tñ]ç"#»[×¹nχã0pŸrkÞ9à‹[jâüÈãvT€ÓTÝçMÆ>¬QZÞé–‚ºÙæ‘nó&j mDK’ÛÜušûÐÜ€ó‡¤ÉÌÃXÞ26J†ÿä1¡¨*h‹ƒMükçº`gà¹ë:OÙ’EQhE®s渾5=þ)½æ>m-su›cWQÂm®Ð<]!¨Þ'pÏp#ZÂ… Inó 4‘mn Aµ£÷/ìžÂ½ ÷4ã6WhŽ{îyp›»ý]©©÷F,,§ºÎ£JB“ãZvèxS©ë¸ü>óù\/ÀÅzžΩ¯bÕn>7Á¹÷ý!8çu$ßÇbû ç„ÕE¶`Qppþ;ç#<Ï/<¿âŽWÒÄ´(07à… ©¥  (Øí°%2fÁ§ràyà:/¾¢Ð ²ÅçM{ÊÄQ ΑÛk`hè2oœló„Û܇K… )ns8=}hîó‡½ûˆøñž£<Ãc@ P•Ôv²àZc¯-ÞµàܺÎCðÜl©°(t¹w-´×Ež»Y縞59úqͱH™p›#¢ÅË6rͱ3… iÜæˆåJç6ï4>µ‹¯)… p›ëb­ë67… º ›Rªà܃æžÛ|xà6ÿÈw›,ܰÉç<Ï5®¥Ëþ³âšKísœUl/‚ü¼ÅP΋ë|ñû¯óEpNpÎïd¼¾“Åt>Î Î ÎC[„šo&8Ï/8Ÿºì}?ÛÜæ›gÓ¢P@ÁùŽÌ—± ?U×¹Âs'²%E¡Ø:×9¶Òc[=€²i»i±¶ÝwÖÌZ×uŽ28”Ây®óM&ëŽDd·9çei¬suÂD…:‘-pA긣ñ-YmâShnÁy Aw§ÑâºÍÌ Ü:òQÍþÕóˆõõ÷»—Ãc@ P9iÑSÈ-7×\SŽÄ¢œŽ¿Hç¹ÎÓG¶d]j¯‡.<·‹/3_Óãž Asu›#*+C¶¹)Õk7®ámôzî¹Í½>‹v(Mç6׈–(·yj!¨f›kÏv=%‚j‡q›;-çQ… ¸ç¡ç£ß%ÏzàÜwg. õî·¦W»½4¦eà˜Å¥¬ãòûô*¦—@~ÖâçÅwÎø=‹Ï9#8'8ç÷1>ßÇb;ççç©àü.‚óü‚óEÏ~(M‰iqÝæ×{ι6Þös šö˜!G.üLÆZ×y)…º®s€óãô(ìl‚[²²nóÈBPÇmn#ZÐÜçG?¦.MT@|Lý}ïáðPÔ@f ¨3…ž(Þ4×üÓÂsGK’ë<*²%Ë¢PÄT™ »Î¢£ø¸é±O$Aó Ýæê47ns…æXð4Ð\@±º“.ˆºnsSª‹¦n!¨—m®-È6×ÅV·`X”ED ÜæI… p›k„Üæ^D‹Ÿmî‚znshA¶¹Ñh~¸–dïuÚ#Rsç3ĵè½;¹ƒ¦»ºÎ Î ÎSÁùéçùçë·ü,µZú/íþ |mncZZë‹~k@ó An«ç êì:YŽZô™ÂsuûðuŒ±YÂéÜæp„Z·¹½à|7£Ÿ?¯~ÿ…R¯ß=j€HÑ"SÊqÍÂuÀsÏC®sìnI‰lɲ(TËEaÜ¢PÇunrÌõï  y:·¹ÑÒì‚êø-¦ns…æ­-4»ÍõZF¸öãà‚†Ýæ^!è›fî+¦Tï3p›ã¾“ä6×ûÒQ… È6׈d›»… €æèùètäÊ8\çÞý³0iÀyó«ä¬ž)%`—ßåýbzäg-Nx@p^œçß·xœ7‚s‚s~ãñ],Æó@pNpNpž Î÷!8Ï/8ÇñlÓmJP êƒú¥ œš‡Á¹¿ ®:Qw~`à9\ç¥XD¶ð\!”Â'ð†Ãm!¨-Î6Or›»Ð‡Ç€ tGÊý¦!Xì3 ~Þõ#ÅužÙâǵdUºZì˜ä¢Ð`Qÿ7c®[ú÷‡Üæ¦T‹˜s-…ÛÔwë\óc×¹n‘¼\ç7©ë\·Ò÷Ò7¸áĶûîÈ:¿úu“a PÒiüfã6@ \ç&ïÜq+xsy¹ˆhqF:×¹–Ô…#[,8÷A”P ‡àª¬¼Û܃UI… iÝæ€²ÎMuÃN!½^Ÿ»9<Ô@™jÅÁØÉbvÈØ]2)׬xÙ‚=Œ]äÃ.ì˜Ñ1×;·(Ôu+H7å£î.™š‡³Í‘k®ã‚žªe ®Û\¯ÓQnót… ®ÛÜD´èý÷‰=¯{ÃÜ7Ñ‚ûî'Æm®÷ìnJr›ëî§nD‹Îm!(îa&¢EÁù!ÓrؼLD vZ¡çc‡~wzà<ˆkÉ­$ôŽ5–°ŽËïra1½ò³'< 8/ÎóÆï[<ÎÁ9Á9¿‹ñø.ãy 8'8'8s|‘š¿Cpž_p>ø˜%AÎj®ns€óW¾ G/þÌs—zQ¨ë:·™ÁˆTý“àÀ„SËDÍÿ_!“œ""ZÒºÍýBP›Kå6Gî:à LuàÞ|¯¿ÿ"©×{‡Ç€( ô½ÛÄ¥4ó¯Á™0<¯(²%ª(Ôç>”œ›RP?ßÀÏ7·ŽóÞç<.ÇÜ÷¹ç¶(4ˆlQ €Ò4ã:WЧÞpë:ŸéeN †ë\ódÞöž)fë¯yçÈ›…Åm}à:GÞ¹q¿å¹ÎÕE˜ä:¿2á:GÖ-¶ïc;ßu޼sÀl÷7®sÍÍE~n´ë|ƒº!#\ç~Q¨—wnÝ›È ÖXun¡é¹1=h™mî‚ft›û™Ä)Êq›{ÐÜÆx0 ¾~?néu‡Ç€(a 4<ðÉbwǽ €èN±±¹^׬ª¸Î=ç¹ë:ÇõÆ;e¼x© Z*åzåBs½Æž²!‘kî»Íw@¶y„ÛÜ-E…)õ³ÍÑs.íî@sSjÝæz?qÝæèÖ@Ǻ6ÂnstrX·9î]žÛü#ßmî‚Z·ùhÍ8Çb²™$×9¢Zl\‹ÞOƒœó世z;O(%X—ßå?úÌX¯˜^ùY‹œçyã÷-çàœàœßÅx|‹ñ<œœœGƒóó Îó Îϼ¡Ò1-]_#ÇÞÿ¹ÂsÏu^NE¡ˆI1±pxŽ¢=uŸ«û2£Û9Â&¢ÅiÁŸCdB†BÐDNpªÛ<áàDüÁsÒTèÈ®«Ð°nϹj „4Pÿ…æºcbNì\ÜÈ ×…´¼ºÎ±Ðç¹-66à\GÿÙD¯c&fʽv¹Ð<%ÛÜw›Ûˆ–“uÒçZÖŒ…LSªà œmt¡Ós›¿bÊžQúl²ÍšcqÔ‚"ª«³.žF¹ÍS A·˜BÐ~Û\¡¹.Øbá±aˆsÝæ(µ‚ns…åp›c±xø´-R³íMà<»¸–¶ûL l.¥Ïñi1¾ò3@ 8/¾sÆïY|ÎÁ9Á9¿ñù>Û¹ 8'8'8çûœçœO˜ÿ¦Îs+5®:…»r¿gÀ¹ç:O…~j€Â( ÖuŽííØæ>\ËÕ†!ë\}Öu>®s€ë\áF’ë|bÂuŽ-øp"Ë™¶'p"ë6p+`hi«ÀŸÎu»?\çm¬ë\M u86WhcòuO}ÞÀœf€:Žë< H¥D¶œë )Howrx ¨"×z p1×'sòÁ9¾ûèdðá¹pJç:, Ê:* Eì®e¶›×/,ja²—mî\·ìõʉ”J‚†Üæ¸þê {nóÖº#×h\«qÍvÝæ¦nsÝY„k= yØmîF´·¹Þ7°k ¸ŸØlsã6×û Üæšë=; †ÌxßÜ›pB/îYÆmîD´ns…æc´{Ðõ£Áy–q-=‡Ï/%`—ßeE±½òó'< 8/ÎóÆï[<ÎÁ9Á9¿‹ñø.ãy 8'8'8çuœcëm\^ÊŠþsÌ~ð“ô༂˜€óVýï’ã—|á»Î?/ߢP€£ÀuîÃs·`Ï€s8Í#Üæi ABY×fšÛló°ÛÜ–í5;åù Ÿ«þ¾÷Hݽçpx ¨bÓ€îlwq/ Ï+r§D¶ø‹~~Ü”·kÆ¿~aÐ…:®ó”n†ä¿¤ˆœ7<À¾Sê]£B… p›+4‡ÛÜ@ó°Û\¡9Üæ6¢Å- »Í½BÐD¶¹)¤ ±áBP¸Íš#.Ì@s[ªà<Êmž(M¸ÍÇ*8ï{Ñ3 p×RsÇÌq-ÃN\^ôÏ1|6»¢_ù™‹ œß9ã÷,>çŒàœàœßÇø|‹í\œœœG€s¿ ô㾜í ïòM?ÊɼbPÍ\m…¹^j´Ö1àüÁ ¿É6·ùæ6ÇUÁy£îÓåø¾ã–|nàyRQ¨Â„#Œëü“ à×ùH¸ÎÕ½‡íïë\~ƒX®su"wYçûÞüŽ€€p¢è `®s¸ »iœç:=ÉuÀÐ×9¶ùùˆ’9ë:‡³Gäê&\ç/(¤²Îs¸:­›Ó‰AHWê»ÎÃb yÏÕ©™¶Ôul¦q›G‚z0 NóT·9œó.”‚›ùÄõzj|Kèj öh0è~Á\›‚]1ÎΘˆÈ–d×¹ ãzå\³"]çΟwýò¯a¶$ÔÙ1ãE´8nó`—LT!¨ía°×©èˆ–(·yJ!(ÜæzMwÝæQª×}‚â>Pa!¨ÎûOI-Å=(©ÔºÍõžåºÍM!¨Þ×P ·9"Êö:å!œW2®å„Ë+Úçˆ?“Xl/€ü¼Å ΋ó¼ñûóFpNpÎïb<¾‹ÅxÎ Î ÎÓƒóe1~I+Ê߯í')4·à܇æ­RÐSKA- ¨Õ~²Fµ|–ä:/ï¢ÐPd‹çˆkñcÙæpk¦Ë6wT… áˆ×mnâgüì`,ìpêi4t™ÔÝk6‡Ç€ˆ©ê÷»Gšó˜‰. Œƒ8)'R**²Å¸ÎŸñ²Î³- zlWƒBq,üîç›;fün†¤^†¨BÐDCÒ ¿Í5wÜæé A‘mÞöBÍ6×…Ïp!¨ë6Ç¢)"»Ý…âhÏmî-°öš¨-p›;-XEXT!(À¹-Åâ®Wú¡_úQR!è˜{?¸ÍQÖñˆåR«]pžE\ËÅS_*Ê燘?5)Æ—@~æâçÅwÎø=‹Ï9#8'8ç÷1>ßÇb;çççéÁùe1Q+º—ß}ïHçYÄ´ž×j7Yޏó=9Á¸ÎmdK¦¢ÐS\çØ” ¹Íáãl†0Ê÷ZõˆÔë}—ÔÙs&‡Ç€¨. (¸o2l¹´9óSЉÅ<|OMŒ”YÐ󣤲ugYjüpíñá9®SæÚd¡yÎm7ƒÑÐn Aýë–ícÀ¢"FÝî ·¹_\lÝæv… ú»¹×%›mns¯ôµ”BP¸Í±ˆjÝæ=­Û\ A]·¹)Mã6÷ A5ÛÜD´X·¹1†’ë TÁ9"ZÆúл¬š÷žç•ˆk¹ûñ/ŠîÙ!æÏbëK ?wñ‚óâ;güžÅ眜œóûŸïc± ‚s‚s‚óôà¼QÌ_ÖŠîå÷ÓWûà<ǘ…æˆj8~ƒŒ[ö¥qG…•w2a½¬ó{oä™mðC]×¹–´%¹Î5ÖºÎûÂu®0[ð±[òKm ×!܇p!"û¶ÓøÍžëü²×’\çØþo]ç5(£3N쌮s…?pNÚ×u”îY÷f"ò Òu~¨ÂóCÖH£‘«£Óƒç€æ~!h¡‘¹‚Z7§Óâý^œR 8gÕŽç¾$Í[­yϳ¤N÷;8<ÔÀVÔ@£ ¥Í©Ïš0¦{Á¿xî;ÏS®K¾ë‹dˆ>iv2;cük”γu7V—9€¹¹&éµ)Ùmî•'GLš{ ~©×,š;… øŒ.8÷wÂ`A¿'®ÁøÝS Au—z*m¾»^Ç=p¾Yû,¢Ýæ©… [LGF?Çm>… ·y… ƒœBP€ó¨BÐÀm>?¹ôÈ…Þîªcîû\êv¼Õ€óÊĵÔlu­¬~ý§¢{vˆù³ØõÅöòÇÏ[¼à€à¼xÏ¿wÕîÎ Îù=¬þïa±ž‚s‚s‚ó4àÜ/ý*æ/lEõ|òÕO¦çn)èÎ7JMl?÷ Ð $PpÞëÌGåÄå_ªëüË2* ŠlqÜ›pc&…FD¶PµÚÀsLuÉÎmže!hDD `œTœcÁÄלõ¼49p‰Ôé6ƒÃc@ Xõu§G«ã3ß=[ZÀs¸Î±˜—ÉužÙâƒsSfl +È:Wø Hn®A¸¹nó 4ÂmhnÜæÎbŸÝãg«gt›Ã9·y(¢Å\“‚ˆ/Û|W‚*8w AÅ…"h“mŠhÁB* ¤{!×\X±ÐŠ˜/,¼·¹BsÄ€aaeÔ(¢åÔžÛÜ[Ä>ûC/Û܉h ÜæN!( 9ÜæGÌûPï…7ûàÛ¹ 8'8'8Ï Î×É‹[Q¼ _6ãóòn^â[ë˜|ó¤æŽ:.84÷Á¹i,èrôJ9iùWr"\çˆlѬs7²®<¸ÎÇÀu®[ÜG¹®sžëüCÏu®ÛämÖù`¸ÎlÀ‡ ÊÜPê(8‚-ùë\‹áà:GQœq«+ѺÎáV„k ¦½¸Î¬,¬ @UZ×¹:&­£Óu#ƒÐ(Åu^AQ¨ÙâÁóUÒhÄ*i¬ŽOd ›Ÿ—1ÛÜ>ð]œ™ A£"ZÐÜËöb¼ øNyJî;_êt½Ãc@ äYu÷š);Œ^#íô;‡ï›½™0 ƒîÙå:Šlq]çž›¢P·$4ÑÍ€.¸æ˜k®AiÝæ~!¨ºÒ“zR"ZÂ… ŽÛÜô/ FÊÏh÷w·¹¿˜^Èk§×#D´ÀmŽž ë6÷ yªÛÜ‹hyÓìB87… “ô^áCó ns…渷àƒ^ SšÆm~ؼD!(î_¸yÙæ4‡Û|Ämozà\’ƒœóâZö0§(žŠì¹«U±½üñó/8 8/ÞsÇï]õŸ;‚s‚s~«ÿ{X¬ç€àœàœà<38¿¶È^àbýR<å÷7n<ÀliG‘Ú˜{?õ\çš‹­ïÈŽEñÚÃÕypíòØ>G ¶ÓÃ!ˆíõë\ójá$ \çê04ëq(ŠTÁV~¸áRD6nà:¸2nÏMžë\!²…U6!(ä "ü,aÇužäæÌÆuž¦(Ôu7¾R[a¦±‚+Às/öÀ‚óÜÝæ™"Z 4‡»àÜwxX…¹øÙáЕê:ž!µ;OçðP•Ð@£ýæK»3ž5×|¯=báy:×yÏ«Zê»Î‘Gw9®+¸Æ$¹ÍmDËaë´´XÇ€s ÍœuÝæQ… a·¹'…Üu›kî¸ÍÓ‚b!/Xij-nsÑ¢à×ù=u—‘-Å=ÝÆmîD´ns½‡à^b"Z\·yJ!è‡~!hÂm~„q›'‚âþpÞ÷ü§|pž!®ÅîÞ2àÜÆµxà|ô9ëbû|P¤ÏZOãË?sñ‚‚óâ=wüÞUÿ¹#8'8ç÷°ú¿‡ÅzÎ Î Î3ƒóŠôe.–/ÇëÞúYjY÷[Ž1-pÙÕÛcªœêƒs×u^–E¡‘ð ùçë¤)àTD ?"fl~°-Þs•ë6OÑ’€æ>°2…|^áj׫6ËÎG?(õºi|KÇÛ8<Ô€£æCK§‹^21QÈâ¶QQnI±u›È›uQjòtP\ w6\ÚfA/\`r79êQ”ãškGà6÷³Í±³%È6»Íá4PsÍÝlóÛÜBsSbá6÷Pê/ìù‹z¦nsýð»ynsoÁÀ^Ânót… ç©… [LŒW?ÇmŽri”L£tÑp~°Fƒ óÝæX¼Mr›k¤X¸àÜF´Àm~Â_H›Aó=pnrÎm\ËMRÓ„bÑ‘giâZn_õa¬žJàÙª]±¾òs'< 8/ÎóÆï[<ÎÁ9Á9¿‹ñø.ãy 8'8'8¯œO*—»Ø¼,:ö °,(È7¯Õî¦d·9`:·ÝôŠœ¶úëÀuÙâe®sÝúžp¸ÎáúÈÐØ€ëÛêM{_ð³Î±íNÂÀu®y¶®ë0P%pëÖ~@,¸áb´®OD” gØszz1 V)¨Š„T ‚²s?¡îÌÇ=—¦‚,ãÚ„{ST.E¡€ù®s Ïô€ùYÍϳp›[WgÚBPÄ"DD´¸nsšûÙÂÈÿª´¹Têî~+‡Ç ¬5ШÏ\Ùý¬gL„ˆÙé‚kŽéXÐÑëŽ{í ²Î3F¶¤/ õÀ¹¿ g#[tG vCìVѶThŽh ¹Í‘kž”mî¸Íqý2ns‚†Üæ'<-Mu¼†4ns|F¨BP\“\·¹-'v AqìL!(®?¡ˆã6×ÝF‘… p›ë½nsÜ;L¶¹ÞKПa#Z¶… p›;-Û<¢Ը͵Ããx…æ',ýBï=ÓÜpîÆµš[pná¹_¾mãZî{þÛØ< ”ÀsÕëïðëb|ùãg.^p@p^¼çŽß»ê?wççüVÿ÷°XÏÁ9Á9ÁyÅà|T ¼àÅæeùÈ òÁ¹—¿8ãð¢o_üÕ=g"ZܘΧȀ˞•ÓœÃu^ŠE¡É‘-ç:ˆK±E¡&²ÅHÆ™’u®Ð Qcž±ð\£}X•â:W¨Žl \çžó¼Á% Ô—™È'ã»Íáèðv›{Îδ… š¿Ñb¡` À•)åó£:_ô¢4Ûÿ©µÛAÙi ^·Û¥ÝqÉ^~Q%¾žëwŸ΂âì"[l\‹WZŒ…<,|erã:„]+æšàBó·9œæ:‡èõå5¦_.²×)\¯LD‹NJDK·9â¬ôÙÜ)è7ns]Äïbó·¹SNŒEM{rÝæ¦Ôç^!h"ÛÜ‚jlâ»° ‚Âm®Ðnó¤BÐ4nsD‡Yhv›#r̺ÍÑ·9¦ön·¦çÖunK¶± ½#ÆË9¯ÛöÆØ<”È3Õ†b}ùãç.^p /m=t.ˆÁœI¯ŽÊõÜé÷fl ¾;øþŽ®Îs ç˜‡ ªó8ðïæ5, èwæÔ¸|oø9bñ‡g±LŸ¡#ôý«\D^ÕÿV_ðv.‘—¼X¼4ŸsÓóæ%Þ@s Î틾ŸmŽmç4OÎ78ßç´‡äŒ5ß×yvE¡Ÿ™¢5®Ö ÙQ&ëücSȆŒY¸Î‡Ãu®nÀ¡®ë\·ÙÃ9ˆm÷Æu>%á:ï ×¹æÛöš¸ÅdɸbAVàu2‡Md‚_Ò×9€²u[X…X”h„$×¹æùÂiÎ:/@Q¨‰]ð#[ Qx>x‰4t¿ìÍ5s=ˆhqŠ÷¢ÝæžË>]!h)ìF´Xhr|zë-Ùýô'¥Aßy ÷%‡Ç „5P{÷)²ã¡Ë¥Ç5› ÀÅ÷ÀîrÁÂ’ugÙ’UQ(âZtžƒ0ºX†,æÞ¨Óü@]XK‰h‰*]‚溈§™èÉ…  Î}hî¹Í£ AÃns@sÝ Šh‰r›§+uÝæpë›…;ÿúSa!¨‚sš‡Ýæï·9v0… Öm®-®Û÷#Ü—pB¶¹-8÷ A=·ù8u›û·XdçâZ\pnà¹Îwé9#Ï%ô<5­ªÏ—üó|i§¨j€ ¨j€ ¨Bh`«‚süú¢÷çzÙ«Ö—çëï~ÓçÙæ›ûpT¡Ác—Ëk¿‘Óׄ\ç1. ¶‘ \!c×-çC6¸Ùâ… eÙ¢q-êÖ4Q)®sm¬BDBE®ó¨ÈÀ²Á÷+<¿Ïô&úsv8ý…¬Ýæ6!S!h8¢àjÏë’‹ù°P¸„ž ÛµVêvºÍ‹-àð” Z ¼Gº_örPHlé’ày.‘-È:OZÀs¢£×¹½a1¯ùqOh~ùRó½7 ha·yP ªÐ\ã[Ìë6?Ô‡æÚ—é6G¤Tà6* »ÍÑ¢ƒlóˆî·4ì6* »Íƒˆ(ÿÚcëpÝÁB©q›ë©ë6OW pžZêe›»nsSzoj!(À¹u›[ö¥Œ˜òºÎž§€óÉæœï=âÞj½÷—à3Ôq…xÀåÏä‹5@ PÔ5@ PÔ5@ TUÕΟ-Á—¾jy‰ž¹îã8·f)1-ÑùæpÛí|à9sÝ7 ×¹ÙrÒr§(TzÇ)tÀVw8÷w×ù¸ÎRŒÒ"¶Àu®c„º‡ÏþÐsÏô\‚È:Çv{l»Çö{”¾õŸò®qšÀuÞ®s)=]×¹‚^Ÿ`£ܲ>€c[ÒxîF$—§›+”ñ©»Òlq]çÇ+\Št'"[R²Îs, u]çž°X*Ho~ô£ÒF?³ë6ÇïäÅ´„Üæú»»ÑÝæNDKRT‚ÎqÜáúßçêפõÁ÷{ eyƒÐ@#ÝQÑùì§Í5°Ð Fîã:×ëM6‘-fá»^ô;˜TªßQ{rwÀœ·<åYi¬ ¼ÁX,ÓÁ™…æY»ÍÃ-ºp§… ÉnóPDK¤Û¹æ:€æˆ­Âµ0ÛÜ‚ê5 ¿ƒWj³Íuç‹î~ ‚âúlÜæèVp"Zp|qí±‹uIÙæN!(v$™BP“m®¹æa·yºBP¸Íõ~·9îOÖm~Ì}Ömþ…ï6ÿRNTp>èêà<]Îyd\‹·»kè‰+ªåž_ÂÏNªú0Ë?Ï"j€ ¨j€ ¨j€(„ªœßVÂ/[õezéËß+8OÓâGµ¤ä››/׺i¯ÙrÖº?È™¾ë<®E¡€ç&²%( Ýœç¢ÐˆÈÍ GÄ) 5Îs·(ôá‹BW¤…®sh€iKý‹L\CË“žö!•“mŽˆ€*-E¬³ns¦b2‚º1 ®ëÓ–óy9Ã[Ì2ö¼äiÖwn"ßfäóŸ<&E¤ºZ€ÛáØõÒ××6²´M,è°ÓBŽ2,ÂmîAsÏmŽ]PžÛÜÛ.·TÝæ ÍO^ñ•t;~‚s-­dÎù·½´Uïó%þÌôJUdùçù2D PÔ5@ PÔ5@ P…Ò@u€óÝKü%p«¾PïÚo–‚ó,òÍMfq"ßРöî·Ê¸EÉYë=×yœŠB“"[Ôµ¸ÎÏ#ŠBáÄÎTêE¶¼‚çˆlQx„¸‚pQhÚÈ-ÞC–ð˜(×ù:itèZuˆ®ñ\¢È&¡L¤ ‡E¹ÎE¡6²­þ€…xŽi1f½´½`cŠÛÜæ GºÍ+(ű Üæ€æêĵns€FSÒgŠú4Ngòi?v•ÔVý÷%‡Ç Æh¾ï]ÒsüËÆ½Œ¢IhÙÀsDBaqÎ…ÊÙ‚ëMÆ¢Po—‡íZïükPÝ1ÒHw”˜ï°î"ñÜæNDKZ·9œæáBÐÛNótnsìŠ1ns‚ê`׌Í+t›«ÓܸÍõZ ·¹h1nó ¢EÁ¹³óÅ-87… zÆ¢»ÓŸÍuA4)¢EÏÎq›+4 ‹©^DË{¦‹­¶Ôs›è¹ÍuqÖu›§+8w AÑ·9Àù®‡Üoî8·%¡~<•¿«"pœ[×¹CÓ…ê½½Uïó%þÌ4§P¸ü¹|y¢¨j€ ¨j€ ¨ªj :Àùoô%ð/%þ"¸Õ^ª{¶PjV"ßÜ‚ó1wl‘³œ#²%SQè È:×íî(Y³YçÈ‘ÅÖx²šï¹ÎQÔ–ä:W— u£à @Äup¹pËÄ)8nP× (ƒ(@š’+ ¹Îë÷_ õ÷»W*xk}ÂãAžpr¶ùf?!ÙmŽ…†L… A9ŸÑ÷gÎõ¼X˜è¾6K›UkÈÐçðÄL »N“îg=éu((€…v±ð(›Ï 8ŽlÁµ&sQ¨÷]³= €çnÖyÛ³Ÿ—¦#VˆùÞÐ\Á9"Z 8p›]¦e¡:(Õŵ¨BP,Æ5>L'%¢å!³€—(Up®±RÉÐ<ƒÛ\sÍ=·¹Æ³ns…æp›k®y¸Ô¸Í¥ Øåã^‡\·y7'Û<©SAÁ¹ •¼³çɸÍõÜÁmŽIÖm>Tw+š‡Ýæn!¨ç6׈ßmn#ZÂ… šŸ²ò+i¹ÿ¼ôà¼Â¸–dmµ{|<+RÕYþy¾ QÔ5@ PÔ5@ PÔ@¡4°ÕÁ9~}|¹ ^·Ê‹õˆÓV{àÜ‚,ëÕ(…LùæpÛa¾áe9çÁ?x^íE¡ˆlq‹B´À©ø‚â>ãEÖy…‘-~Q¨Ùd#[Z¤D¶d* ÕLà\ŠBáÍ©(t©É96yÇ€j~Q¨ç:×|óáyý}ï‘Æ= »œñœqº¦f›{Ç &¢%ÅñéóE¹ÍC-pêš¼aßjÊúz^ú‚4Ýgfb±Æ.ÚðŸ<&Õ : 9w?zF|¼cäàXÆB ÏpžedK¸(ß),ØÁMÝYãì¢]uÑFÙaÌ:ï»j¡y:·9º L¶yTDKØm®;W]‚æz.Õ]0p›£‹Á¸ÍÕir›7÷´WŠ5‚†Ýæé A]·¹)…ÛÜ¿þ¸nóÈBP½æ˜-¸Ö$¹Í5Ò+\jÝææºÍG¡TlQŠ\[ phžê6ÿJÍOÕìÝg$À¹×’eÎùªÍÜ*÷÷2yNÚ³P¸ü¹|y¢¨j€ ¨j€ ¨ªj ºÀù¬2y!,øËõ‰W=™ ÎýüaÎáž @T‹S jÀ¹fœ÷¿ø)9÷¡oål…ç6²åô5_ ŠBOUÈ€mípê¡T ®s”¬JsŸ—#¸Î^bx®ó×9¶ÖÃ-ˆŒZl»‡ënB@X@®p9‘ ˆSp]çÈÇ50Ël)ƒ¢P×âÂózýæKóÃVI‡ _N.µ ŽÛ‹ n1Ÿ °Â… AְѸÍáµñ ¾tÈíïI×S‘ú»Oñòõ9<Õ ‡.’“Þ0ׯ?A¯)N‡~2E¶dUª Pf§KhÁκÎwÔ °Èµï½fwH¤Û bÆmh¾$µ4ƒÛÜ8ÍÓ2Ð(·9"£Æ*4O[v›[h®ÑTê67¹æŽÛÜ- »ÍÛ^˜p›ÛBP»€gÝæ&¢×½NãÚãv*;\üb»³%]!(î©… šûŠë6Çn'ã6‚fr›Ÿ¸ä3sïó¢ZrÏ9oÖåÖ‚ß×Ëèùèú»n[ÕYþy¾ QÔ5@ PÔ5@ PÔ@¡4P]àü¤2z1,èKö¥·¿R18O“oxÐãäõrÞÃß®óê. PÉT xžˆlñÜŸ™ŠBá–Ì\ú‚‰+0%ypbž¤p ÎLuh"ؔꥸÎÕÙ Xh…¨„1Iã#Ô:ÚÏNqkNñÍ;¾25ëÅ€ªëNÔÁÖu® MãY¢\çõúÝ#€çõ÷»GZýtºüU]“­ÛÜh‰* ÜæwaŠú|h޲>“;ì¸AO}[:ŒZ.µt·C67px ¶Ššõœ%}¯|9±§YØ xî»Î³ŠlÙb袊B+r·?ë9i<ä~ﻨ»A’¡yšls ͳv›‡#Zôú‚ëÌD´¤¸Íá4÷ A+p››BPiI‚n Š£ A±€`Üæþn—ðN—H·¹SŠºÄu&ùú‚ˆ¯¨BP,Ì·¹Bs¸Í½ˆ–OýBPë6×E^]è5… ºè‹`ë6sç»8¯LÎy§æôž^fÏFoêá–?—/NÔ5@ PÔ5@ PÔ5 T8ïVf/‡{ѾyÉ{‘à¼V;?ªÅºÍ#ŠAÎwµTÎWp×yÙâ…ê¶ö$×ùR×uîå¹ð3/1à:ÔÜ@ÛÈ;?2…nÃá:×-÷Ȭ \ç cm´‚—IìùÁu®ùÛ½, MŽl¬«×÷n©×çni¤E¢íN}Ê+äËÉmž¾4Ém®^8yÝÜaS؇Q°…s:àÆÍÒzÀÝR£õAÁ4€=Î|\†©æ°ƒŽdw‹éO0Îó "[Ò…jŒ@/v¸¤Ë:ïxñFiqÈJïûg¡y¤Û¹æ:InsD´è`±,È5_î‚ꢚY\©‹l(v#ZRÜæpšë™Ém® ~XôÓÅ¿fã܈ÇmŽ\s?ÛÜu›·Ñh«¨BPd›[·¹WJüšß¯(…ÛÜÝå‚k7&p-ÇBJZƒBPÄAa.´£Å+õ²Íqß0… zq AÑ©aÜæzß »ÍÓQØu‚Þ«°SÊf›cvR¸ùÕŠÁ¹›snãÏü8´þG.)Øý¼ Ÿ‹îÉǃ,_ˆ¨j€ ¨j€ ¨j P¨.p¾¾ þ½ _óþÂ=ÿÉ/à<Ç|s€óÖÌ— ùθÎMdK5…‘-y* Üäiwá&ã–ÜùüWd§ó6 €Ü”ÈðÝA ðšŸþ¢Ž0[€ø‚f'»®ógÒ¸Î×LaÇuˆe\ç:ÈNÉ:׬b1ßuPÖp˜–"¢-Åu®Îó4E¡&B® x>Oêõž'͆> /x1}¶¹æÅGºÍ3‚ºns8z‡¨³‹Øò ¹q„ÎþÐÀ­>—nÆÝ¦KV×sx ò¦ZÓqì 9X#‚†Ûè',ž«“àyDdK…E¡Y¸Î»i¶ùŽG?(õí¢þ©»?¢Üæè(ÀŽ‘´… IàÀ ¸Î.à:ÌÔÜ\çšK;B‹ÝXëÜwŠÚx… —ظÎß5¥q,, Uø–¦(ÔD¶ôUx§®s€óz½ï2ÓzôjézÅ«Æ1ëf ÷8·ÎÏInó … )ns¸A¶|G(`&Î/\¡#õß»Ÿü Ôm;Ij´¼ŽÃcP% ì4h¾ ¹ù S 9R5æí^ñ{|x€ó¨È– E¡&Ê/#6‘-ØÝ¢ß“°ë¼ý©OJ#-ý4ß3|ß\·¹Í5·¥ šwž€æ¹„ø%“må64‚†ÜæX„Ã$‚úns‚bÏ‚ê„"Z*t›ëÂa‹3^4‹ˆáBÐ4â ÐÙæš[·¹_LŒˆ€sSŠÝ.)eÄo™c‰kNu›ãZžä6O*}Ï‹Òóç.ÊÙ9·à<]!(îE©… 8·nsôwô:ëQ…æS+s~Ú„góvÿæ3Ð/½óñ ËŸÁ"j€ ¨j€ ¨j€(”ªœßÍ—Æ_òò¾ÃžÓ*çꢃ›®:[ jw¦ÊÙk¿2ðý9Ü×´hŠÅžû®óˆÈÓEQ(à-Œ°«@7ì:ßëªW¥õá«Ì"”ÍuðýJç6Ç‚&ÊmŽÒ_ã6×\󔈖°Û-k¤ñaÓäš‡ÝæÈ5×Á‚îŒÛ\òR A5Û… Xü« 4ì6G¡²ç6Žh Aá6׈–°Û<²T³Íß è¼((¯tØ€2;Yì.1.(E¶¹îjB¶¹-8GDKªÛBØhQêSêt»CÚŒ\*}'l6.ÿ ¬/%B!‡BЈˆèàÈ…ÉÐÜ”ùzÝÿ…ô¿èIiÐîFپɜ>5tq ãÈE2ö®̵ÀõqnÌSTd‹ë:O) ­×…®p,»ñOœ‡\çûßúŽt:å1©ßëN]@še’’Ýæ(µ¥  AñÝKWŠ"¦T§ÂBÐÛ× ®&ÛÐÜw›£ô([ª¥ Q… ™Üæ>4ßA¡y¸Ôu›cwº!:èNÝt׎ç6ßl®©]·9®¹Ins½&÷Òk3®Ñè¥@?zú#Û\çmî]cÞ3ç×{,r˜ˆã6÷Š_ýäºÍMäSD!(´U pîºÍQ ·ùÙ=6|Ò¦ŠÁ9¢ÍLTK(®E£Zè²%~aàeœ¢6bÁÏ&†ŽÆÎyOÚž'Û5ºœSÇ aû‰2è²gä$=·(m´…´0»Ön¡‚аã\ï¯çßúÁy~Àù…|°åÏæ‹5@ PÔ5@ PÔ5@ äKÕ ÎñK(4ÿ„à¼êà¼Ý¾³à¼}p*5¡ót9{ÕÆun"[XZE¡ˆ6²¥NW…Š]n7Zh¡ùç}¯~%ˆQÈÕmŽ|j[â—6¢ÅºÍ-4wJý¿FNzEšw™"Û5¼ŒS„Ç Vó+¥ç¸Õr⟙Å5@M»ÀЉE6ïçÙ…q-¶lð\ãZa­ë|ðmïH‡cÖI]g¢‰"ÝæXTÂèšêõŽr›G‚j¶yJ!hÈmnœæéÝæ&×<Û oˆ}J[å6G®¹Sê¸ÍÝBаۼí…ÑnóD!èfƒeÜæÑ’p›¿%=52«×D/B«Ñpn:4¢QP&¢Åu›ÏL-Å.×mn A±* g›caÆf›šŸ¾Æs›Ÿåg›ÃmpÞqìŠ8Ï­ tâÂ-çùçåë!–?‡/DÔ5@ PÔ5@ PÔ5PH Äœ¯ 8¯:8ïyøâpîƒN‰,µà|Üü÷åò§”KýÈ–Àuî…>À½‡ÌX€ dÉz`,á:‡“ØÂ°°ëB›W ø5%È:·źunD¸ž‚L\€däöŸâ¸ÎÐôÖ,]8QN‡¼s8!#€ò:”ØÁ) Ç$â׸Î5’°(pkÞ9` óŒ½h×¹B)¸:5K8%ë.ÐcÔu®ÎPã \ççè:Wçy¤ë\ݬˆƒð³ÎQJX€f'å»®su̦¸Î“‹B®ó<‡.Ú¾LݲÅÏN÷ÁšÓ¢ç‘ &‹8ä6ÏѲçõÀ—[ìwꪯdÀùJ½6×Êv .åÉ1Øý »åØùç/®vgJà:Çî7²%Òuž\ maÇJV®s²ÝÏ~Jì3Û,™E¡·y… }Ó‚¢g m!h¤Û… ¶Tw™¤-u³Í-4‚¦¸Íá4÷ A+p››BPi ‚ft›§)ÅõÖºÍ 4·ÙæN!(®ÛQ pžÒˆ G?·¹=ñ A½˜–„ÛÜ[x±×÷ºáºÍQj¡ùy+;¸@]Çyœ×6®s5ë “¦ tÎßœçœ7-äƒ-6_œ¨j€ ¨j€ ¨j _ˆ8Op^up>ì´5ÉàåfxùGÑ`€nC¨mç :éØ-ëê2}Ûf¯à!_°ü9|¢¨j€ ¨j€ ¨Bk ÚÁ9~AçßžW žßtß» εcçYsÄrL—®G¯”+Ÿû£\¡®ó¤È–,ŠBáòƒK®RS¨N@šò?uxXæ¹Î?õc®s¸˜MÜ‚Â@•¡êH_ž¨j€ ¨j€ ¨j _ˆ 8_ÏÒª½Î{ü šgç&ß܇L!дËÐErÕ†?Ê•®ëœE¡, uó€Cp©~×iÒã¬Çe´ºDÝlóh·¹·r‚Sè—¾2D´¸ÌÆ. ¯0ìŒeŸJ÷CÊvǵ/äø4ß}’Œ¾e£9öè9”L‚çºÈa „sˆl‰. Mï:¬;ZpO"z*iM´Û‘DfÓ’.¢%Û1H˜(·9±ŒÛ<*¢EÁyJ!è³PÖ8È5×´ÑáBPv‚ÛÜBóc´t8¥T³ÍQŠÈ¨ AÃnóuÐIÁ–F& ¨Ïd#ƒ +p«s%~Ö9rŒSóÎݬssgÃÁ:t™¡‘É®su¿Œrß«YÍê:G^s’ëü®4®sÍ;G"\º&ï<¹(Ô¸zÃYÀgЬ÷xÍËÙæ©nsìDçgGºÍ×x… Q-ah="ƒÿ"Õæñw¾-;ï3M¶­u§Ç n³ñ2øüGäÂG¾5ÇüÂǼ… ÷zàv äÙ¢× ,¨¸× w—ŠÍ:?dÖ{ÒáˆåɱS)ns§4Û»-0ºó¢^/Ñ¢Žó¤ló{ӻ͓ A#ÜæÃÒ»Í 4?Lw™¤‚j¶ùX7Û<[·9rÍBPÇmî‚†Ýæm/Œv›' A7{-p›ë5Ôu›£O¢×D¯´öL¸ns\—Ñ‚ÝA&¢Ew a×À9º+à6¸Í½k~ûD>¥)Õ] fáM¯î¢[íäÄ:!Ò z´ lÐlÿ‹ž¬œ'„"ªÅç§\ÿ ÁyÕÁùO…~¨åÏç‹5@ PÔ5@ PÔ5@ äSqç#ΫÎqüZìu»·­/ûN1(\t‰bP'ÖÀéY‡æí2þÉïS\ç, eQ(4â…&Ãs —& v-Œ˜övD¶y%Üæi"ZLì‚ï6¼4¿Xç’'¾äò:aƒ4ÚéZÙ¦æùœ<ƒmk_ =F/–s×|¡Çø¹X3޹çp‡à¹)Î2²ÅÄ:aMAhØuîfUòÞg<"õö˜šÜÙÍÝk"ZÙæžÛ<‹BPÄéBSý}Ã-a·y(¢%ÒmŽBPþŽÌTú`Å… )ns8ÍýBÐ Üæ¦TÃ… ÝækÕE¡y¸‹‘É-[LTV?̲… È6G‘³É6w yà6WhŽ…Q·àÜ‚Âmî– #ïÞD=Yh®‹,ˆs AÎíb[8ÒɸÍýëÄ^'­sÀyDA¨_ í9ÎmÎyÂq>~ökçUçOæó–?‹/DÔ5@ PÔ5@ PÔ5Ph Äœ·"8¯:8ï|àüD¾yZpžZ Ç9ÜÅç¬øL®~þ'¹Êq_þôHL˜§©ë:WHw©[ˆíóp(f\ç_‚(lã¶% ×ùÇ)®óƒý¬s8á\4í}eàj¤é¯ñpÃõ÷£ë:ß{BÈu®îI”Ý!ëÎJäÃuÞ®s-ÇCÞ¯ç:×¼óó4ë\óÎ×¹ì¡h/á<ÏÖuþ„)÷3%ˆ_8Rcà,Më:Wçù!šƒ Ø×9àÛðš—¬.Ö´®syÈ\»ÎQhˆŒfÉ®suתÓ65ë\á¢BÆ:{ªë¼»ë:×âÅÈÈ0Ù=3¨ÓáfézÜ;ÿÔlóʸͭs4Åm¦ðÖ…æÐ)z.~ô[ÙÿÔÕR³ÁŲMó8•<m{M““ïyOp °»O <8·×‚,#[ܬs9º×¯!Úu>ðª¥iÏYI ‰E@÷Z–X  9vOìÑv›G‚¦d›/Öï˜N’Û<ªt¹ù¾6pn¡y¨4Åm§¹® Ø™b AÃÙæº“;Zt°»%Ñâ¸Í±#;ct\·9:°‹Æ- g›{… ¯™k#væØBP¸Í±sÇf›·¹îìÛÜ@s[ª×áH·¹Sv›zWÈm* Aõ¾abžt· ´bÝæn!(î?¸œ‡¯ö:Ñáð¥œ×éâõz‹¡þ†Hp® Ò·.ÿ€à¼êàüæB?Ôòçóʼn ¨j€ ¨j€ ò©X€süB ÎÿHx^5x>àØe!p®`SÝs4aLTKzp~Â]ïÊ5 ΃È…²(´‚¢ÐDp™Y³íMÒ ËTéwÑS Ï?Ë*ÛÜûiDK¦BP»àF´À ˜k¡9 /ÊmÇ«vÏ]ù™t:ÏçÛs²=Mv¾NŽ˜ô¢W¬€s]”°‹hžgÙ’¹(4ë|äô-²ó‰4(:†ØÝ=ô4L30Ô[´… ºð£ @A®y9é³Í“"ZRÝæ j!¨.J™Å©¨BPÄ'!F)]!(ÂL!¨›mnsÍ5¢%©ÔÉ6·NsD?!*€æ¾Û-(*6… :>87… ºÐgÜæ ÍÃnsÄRa¡1Utá0ª4ì6Ç"d¸YI… Öm®-®Û|( A‘má6GL—u›£'Ás›{‹«Øu€ÅV·;\·¹½n S?ªԺͱðÛrà=©à»®,8ÇPAs6ªEÁù‚g¾&8¯:8“ÏXþ,¾QÔ5@ PÔ5@ PÔ@¡5'pþ8ÁyÕÀùè N€s¼ôc»yœ‡Šôܨ–ÃoÙ$×¾ð'ÏÓ…˜Ù|c·Ðªëð[çá »Î@<×ùçë ®s”ÂyYç œˆ#ïüHFè–~äá©ø¸Î5 Éu®…tÖu$ÜÈàèÙ{‚—wެóîÈ:‡ëyçÆu¾Ùs_öZ’ëù¿Öu§&à Ô]ç ±PÔÎ:OÉ;w]çGd¯3-p#ê!p«ó<Åu®y烵 @`®X}õø…†‘®suØöŽr+\DybŠë\a¤BÉh×¹[¦x®QAê<<¯¹Ë$iÙwŽ ›üšq‹fŸmî9GÃnó舖hhŽœ~Ýb÷ĉw¾%mºL–m¶;—“áÔª± :kŒê{Óu€ã—ÏÍî“,#["ŠB͵a•w}ˆruÏGÒå˜UR{WOG¦˜Ñìžq®e) €Ñ… Ñnsäšëô¶Ùæns|g0é Añ}3… :)Ð<\r›Ò2PLR!¨ï6÷ A±Cý‘… ¸Í±+שp!¨ë6o¯;kvUphŽkŸç6ßlÜæØ‘cÝæn!(®£è‚⺛ZªÙæº;hˆã67… ³µ1-škîºÍ£ A·¹öcÀmŽÝ*žÛÜ»¯ØBPìdðú¼ˆ ×mnØpϺT5[;iŒãܹ–¥ç&®à\G5ˆ4ëÞú™à¼êà¼]¡jùóùâD PÔ5@ PÔ5@ PùÔ@œÀùMçUç§ß¸!gpî:5F®{QÁù ŽëœE¡Æu΢ÐìŠB ètÀyÍoÌn‡Ü'c羟Têx é6WfÁ9hÂnó¤ˆuB#JĸÍÕ!m¡9à/€?tßvõÓҠŲͶçpÜc 0}¯óå¢u_;NÌ™Ù6‘-v1-²(TÕÜÈ–8ÿJÆ)íwþR¿Ó­fÑ%ÍUO¾ÛV3œ5>â!Ï '*ò1ëÐÐíu¬׹޿&7VëÌë\çpͦ¸Îµ±OÂunÝžšû¼ cÖ®sýIŠ7H…¦Àó&Jêûœò ŒS) ©ëµå~6§8 š§- ¹ÍÍuà” ¹sì ¸Vƒ°(tÅSßÉ~',“í´8ówÛœ]ö³S·›å´ùo›ccv›èq²qMpë×¹¿x–1²%]Qh®óá7m’½f™ hžÁmn¯_IåÆé Au4 m÷„ÛNs@s|L!èüÔBÐtnó!Öm®ñ,ºÍÍׄ"ZÂnsäšëønsã4?æ‰h·9 Aq}© Ôu›ãúµóù͵,c!¨u›ëµ± ¹“mn¡yØmî‚j¶¹^Ñ9a Aµƒnsì Aá6×ëøš[·9®õQnóD!hªÛܽn× Õ˜ë67… ªGSì—»÷ƒTpÞYcZǹ{-Kç{ŽX@p^upþ|¡hùóùÒD PÔ5@ PÔ5@ PùÖ@œÀy[‚óªóé«?Lç&ØÏ8wÁ9` |pÞqÌ2¹^Á¹ÑÔu΢P…f]ª° q¶(ÔD¶h\‹Ùbœç Ïkîxƒ4êr› ¾rCÎS²Íӹͣ A­ÓÜu›[§¹Íƒ…¡kè{ÂË?Ë…«>•=Ì”ßýœ-ÆËž• z<Ìw>øÞ{QMæ»ï»Î³‰l±ñM€–v1­"×ùQw½/»_hv$hžÎÑr›‡¯aZðh‹M!h7Í57… !·9 y8Ov›£<·þ¾Z¢›Rê»Í“ A—DD´hq¯.h% Au‘ ^š–ÆmŽBP,ž¥- g›[h*õÝæn!¨ë6÷ y´Û<¥ns…æ®ÛÜ‚jô"°PÀìºÍ# A}pŽ…Îp!¨ç6ÿ8p›aÝæZíºÍ±¸êf›»nsÄýX·ùYálsÕtÅÁº¸¦×ˆÑÓ^ÏœcgC¢»Á[ |â*‚óªƒóéù~€åÏãK5@ PÔ5@ PÔ5@ Zqç¿Vpþ_„畇狟ÿƒ“ lËô²ç~ÌAëA÷¨háyRQ(\§ '‰‚@8ù'Œë\a"àF65¶Îc ="8à*¶‘ p#«™µÇ©ëYçp˜ŒUp‚íúÆu>ß+p&´À©Ç"rr‡jÉœŒÈÏ…ë|\çêt„ã1p߬®suž®sÍæ…kYç{]÷¦CpU"Ë®sdû"ç7pkižç:ßä¹ÎÕ± ×9"[G' U²ëüy¯¨ÏºÎá÷´)ô3Å~)®se0ó]çMƨëüuö3S\ç âÒºÎÕýªyË à†¬YçÆu®£…†õD¹Îï1.Ûz(E„ó\uâ‘í:W (YÉ¢PDýÈ Ïk´™ ;ö¿SŽ˜ñ–ÉÅrŠlsÑâ¸Í¡7ë"M)u"Zà”FÁ-ôÍoPß°ñg™øÊ/rҬͲCûëåw¿=³,fûçʧ¬ëžûQ&ê1Àq¾ó΢Yà:¯0²E]½ŠBí5Át ø×…“–~&{Ÿ¸Vjca‹)œ-ºèh•mî‚&úÒ¹Í+(5ns@óÔBP|oÒ‚å6_éu`wÈHý®¦-}Pw™TPjKA£ A+p››BP½FE‚"ÛiÓ/ Ðÿ$‡^þ˜ÔmxqIÃónƒçÈeë¿I¯þ"7šßûΓày.‘-¡¢Ð ]纘6xü³ÒpÍ1ÿÿ콘eU™¶=ßÿE@AňQ@É"Qaˆ‚ Q‚(A‘( ‚ˆdi@BuÃ7ˆYT‚Š *£ftÌ:êþŸû]{í³öÚkŸ:UÕÕœ¦ÞïºÖå|ÚUÕ}ö»wó¬{ÝNä¡yÛm>x†Ÿ_9mþÊH›Ÿm嶦j-sB!¨iZ¢¢E›F©¢¥C›ã5×jÑæ¥BÐy"ÍSÚœÐ<+e¬¯´—6×f›nZ-m¾Ï—l/¥ÍÙàc£/-Åmn…  ÎW’’*‚~Ó6 WV m.å´9 ¬H›¯¯à¼H›'… 9mž‚â6'4ß^¡9›¦Ú\¡9…¡4çt"´ióð¼H AsÚáŽj-\çuŽÃw@Ë$‚$¨s‚%ÈÌ4-_Sçx‚ñ·ŠBå;Pç*èÛ[Ôù^¢Î)îÛCZ£Î¿0Iê<ó·\çu¾¹”RPˆoydêü"#mG§ÎÏ ¨ó†ÚTèÔrËŸß(eK¡(4¥ÎŸôœ÷VOzö{«E_ø¾ê5oÿtµ¿æ…b¥´y¤H9é0*m½æhHZ¡¹ÂbBsÂcBä÷ó×Õ‰ZÇü¿ŸVë½é²êñ—ûü1D ?çÅÇUûž[uâ­áßùþoüÚ6 x šð¼Þ0¨šºÊ–è:ï…NLowúwªç¬svņI+4ï£ÍK mž–E‹VªhY}š… :­1´4–‚–-½´9¤ù´9'SX%Úœç §Z¬T+-Õ³Èhs…æEÚ\Ï2ži<ÛJ… )miþªcsÚ<œâá¹isº%Œ6שŸ”6ߌBP âYÍ3;‚œ‡BP¹ÍMÑiópêˆHy!èîuhÝæ±HxX!hN›S¼Ê.×ÖÏ®°ñÇüðû¯qœOœ¿÷¢Û=8Ÿ^pþG½?ù¿3ý†Ö¿¿hòððððððððð˜ß30nÁù›=8Ÿ^pþê½´«8(çÅàüÌjÿ+ïmT/ õ¢ÐnQhAÙb¡S_Q¨Èó<<7×ùñ Q³ 5„çÇTOzÖÑÕÒ¯øPõÆ÷}ÕÔ?eÚ| _ ¬’·SŠ¢%£Í9EéjÂâ&4WˆL˜|’Bå“nýMõoý¦:äc÷V/^çÔ…><Ú’‡TÛùÙêú÷ñïâßgÁyOx>TÙÒW:„:çî¡“/Ûú²p¹Öºæ\û®¢åý6'‹¬Ð£ha¾Z¥Æá”ŒmäÔ¡ùSW-ÑææZèˆúhsÊsY}… ›ÄBPç‚f´9¤ym^‚.µ… ZEËÄ´ù2ûŠ6Whž‚æ´9Ú)£Íš¯¤Á@›EÕË{hó¾BP‚ón!è÷l}V«T¥Îh¶¶ÔÆgJ›— AÙ<%8GáŦ*J¯@›ÿ(ÐæR~EÚ¼Ñ:I –ÒæV*ê ¨h±g„‚ó¾á££ç­²ct-8?û†zp>½àüëóûÍ«?ÿ@ä3à3à3à3à3à3à3à3à3à3° f`Ü‚ó—xp>½à|³·^Ûœ<Á ¡êr½]ι­¡PKE¡DHN@ÿu.•~YÂ2£Îjì½¼Æ5uNè]ç½ßM¡[ à  qÛB6Ô¹hÄu~oC¿¡¦Î! i Îñên|ê÷ͳ‹ëï.*†:—b ¥Î¡)qC¿×¹ ñu|ç™h Œ:Wð„ëüùÊwu. as+´"¼jûÎSê\äy‘:¿©"0[j'¹Î ÐvTI eÛJ®óu~]ð&ãOÆuŽOYŠJ û©sùÎs×9á !!j ¹ÛÔ¹4E×¹´Ò_@ôZH™»‚Ñþ$Äæ"+^•-PçOz–Âóe®ž¸ÌQÕòŸWíú‘ï™CdÚ\>îè6ï¥Í ÍkE ä5A2$v ÍOþöoª~çªS´ö<ãëÕÒÏ;r¡ Пð„·WìzEõ¾/ýÜþ-ü›NVpÂóš:׿;*[Œ<ïS¶ŠB¹ÿ‡Rçºfo¿þÇÕzû²zêóµAµ•’gbÚ¼P7ýZ¡¹JAë^†ÞBÐFÓ’*Z4ßxýñûÝæxÍóBPÝCêà4G+4ç¤GO!èÓ·º®Z²¯T÷÷ä Aõ 6ç4‹Ñæ:Ý’Òæzѽ‚ò¬â™Å³‹gXT´”hóWPªç`ZJpn… :­Ã©´·9ÏYº%8íC×Dt›m®. hsžÕ‘6çäP Íï«is)Ztº(U´ä´yZJp A‡Ñæ„æñDJ Í9)ñŒõÎÏ‚óÓÄyúüê ίúê#œO/8?gA¼¡õŸáœ||||||||||æ÷ Œ[pþœÿÁÃó©‡ç»þÙ@ÉQl¦‚3ó§áS@µT-upþÆ÷}%øÓÒ@y½(Ô‹BCp^( íU¶ZÓ(â‘”-:áù“¢¿êÍóª·}ì!£HÓ²¿H›â²™sxê6—^(u›GÚœ™.)ZJ¡ù)·ýOõ¡Û[}PAóúdõ”Eß¹Pè/[ÿŒê=Ÿ¸ßþîüX1<'8o…ç([rßyÔ4•ŠB'¢Î) ÕÚò¸/UÏXùƒa#ÄBó@››¢¥H›Cš¡Íã3«ÕËÐWšºÍch.Úœܵš[!èÝBÐ>ÚœÂÝMq›— Aå6g‹¬¦ôZ…æ ί¹ˆsJµƦX͵jÚÜHóo*Óæ¨žvWh>A!hJ›³±‡VŠÐœrc£ÍK… ‘6Wh޲ŠMD6ÓBPÜæ,G·yP´Èm®I‚s+Õ†e§TÁ9Šhs4[‘6ßFÁy‰6O AsÚ<*ZÒBPëBHhs+…6×ì¡rJisN£¼û³?K6ü¢ªe„àÜ B?P-¹Ê©šO/4çõÛ{~¿yõïçˆ||||||||||Ä ŒUpÎ?X°¾æÁùÔƒówžúÕ‘ƒó¶'˜ êÌjƒƒ?´º8ЊB¢Dž!ª·E.Pç›±75ÔùÛ¡Îr@ï{íOì¨=o½/SçÔÔùýF#RGÐBà²õù÷Z³åœ{ŒdÜBD#d#„cC‹|$ÌÁ»kÔ¹BžHþPpE¹†hÊW{›…D-êüˆoU+§Ô¹´šh 7_øÎuŽÂ¯ð³†Rç"E ¿Rê|×ÚcŒšAÁÙhÔùõ$«Qç”n9u~Eµ8ЉEÌRpHÑ¡hÚÅ6qÞK+XDgÑ¡Î勦l±CÏߢД:Ò²GyþÄgY-öÂã«×úÙê`ir4)óx„BÝœ6o¼æµ¦¥OÑB˜ ‘ÝÐæuh~ªÂçÓîкó·Õñÿñ³jm/®÷¸ýÇ2@_ö…GWûιµ:ýÎßÙßùT­&<už†ç¦l)ùÎG¤Îs×ù¡zp]vûÈw«¼vŽm|Øú>Úü'TOf½0U´hƒ¥v› AåÎï(Z'dl#'u›GÒüÕsªE×(Óæœ´Xl=¸è‚æ´9¡y6§[ E›g… EÚœÐ|"Ú\… -·y ͳBК6O ASÚ<„æeÚ¼S m®Ð<¥Íy>m®çåÚI!(Áy±T'~‚¢%Ðæ<›mú)xvGÚœþŠí/ê)Õé# A9”ÒæíBП´ „£Î)*ZŒ6×<¦´ùÛ®¾¿œsZAžóÆq^$Îuj¦Î_´ÑùœO?8_mA¼¡õŸáœ||||||||||æ÷ ŒcpþaΧœ¿ïÒ;»Á9ÇÏY-U‹t*H³¢´è Vp¾ú×[y Qç„ç^êE¡„‘Mp^…¶”-YÑ^®;XQäyNšR i¾óÔuÞV¶œþÀ€¶ÿôIDAT?qé#l=kµUo:ýÖê] ÆP…@›[p> m>ª¢…Ð\« Í@FŸñ]­ïý®z×5÷T+®~òØ„çO]ì jÛÃþ½:íöߨßñtV Ïü Ïkßy‰:fÇè´ Ú›xâ„ 6*bxN@ùo°ZmÇ+˜‡ÍŽœhs®5kX!hzR&>³Œ4OËŒûhóR!hM›£h1ÚœÐ\«šk3i4-=… EÚÒ\‹ ¬†6GÑ’Òææ7L\Úq›CškQ0<mn… Ò´ AûhóÃå6×&aZšÓæAÑ"Ú\… ëžtGSʆ¤‚B›'Š‚ó¾BP‚ón!hд¤´9ê.Š£óBД6§xš Ùè67Ú\š°N!(Ýõ³a×ó¿;bpžö4 ‚óuv¸ÂƒóéçÕ{º'Ìï7¯þýü‘πππππππππÏÀ‚˜q Î÷ôà|êÁùœ`xpNÕ(²à\aèŠ[]aÞçœ:‡ÞmQç Ðì¼ ‚LˆS¨sÈ?¼Ô€‘:'ìÀKÛPçòÕrŸâ7 à  9¢¿‹¹Î¨(Š#T:ßê\”"ÁKC‹bD°…ÊçŒ:éHpƒ2ßîFòîâßÝÀ¨óïZèCøuN„‚`ãêü¹ÎE]âú%PZYÁ¾s\ç8)ÕCw€ö’¢óyÒ!4Ôyí;_fß/\çò~u¨sÑ¥»ˆ<ïPçò£sÈ]ç ¢P0÷ô­Rê\ÁÝ×\çWšb¢L‹Û Ýqîý¶9Ê&i^šÓæûHïņë°BÐmžœDAß´Éáÿ1éàœŒª–Ýù‚çÓ Î/š‰7¯þ=ýC‘πππππππππÏÀ‚˜q Î¯àœ£½þauНÁÒ«>ô·èÍÄœ–ìeÁ9çû”[ •-ó©(t¨sùÎ Cö®©sÈB(ÃÝ"u~yF‹Nĉ¨óû,ˆ!ÁK@CP³¹Qç?Ô¹H¨ó#u®»H¥Ô9aÁª|çå­2!uŠB)áƒô„ø$Ä¢¤ï0D¨…\{ßR-½×CøuŽzÃnŸ¯ K-,ëPç¢QwPçoV.¸­ˆó"u.Ú•rÂê|‰×‰:§àp“è:Q«5E—:¿ÐŠŸ†Ö‚2ŵDìv|çip¾àŠBÛÔùáÕ–|Oõ„§V-±üqÕVÇüGu”2Â]Ô"„½„¾h†ŽÓì¶Üæ}´y®h±ö‚;%Ích~Îݨæ°îùcuâ-?­ÖxÃù3ž/½ÜÕ¾g}½:W?sÎ=¨ø;äá9W”2Fž|ç9uÎB¼×Ù(£Û€U^7t-9u¾ÿå÷T+mr^ØÀ°Ð|œ·Üæu!h ÍKŠ–Ômž•µRí ¾ÆkƒóVh.ÚœÙåä„‚jå… ë_æ¿¥hѽÁ}ÒK›Cšç… mÎ=ÊÚ¶‡6i¾ÔNC AÕ…0ÙBМ6·BPhs…æ+éÄL ÍÃ)š—÷Ðæ14Ï A6ï‚~¯ÚD§{xÖ·¹Bss›‡BÐ-“BPž×¥BМï¢ç}^j´¹~?´ A¯o‚r¢É AuÂ)/…Ál¨±™¶æ~Ÿç”`÷ç¨ÌjÍÔ 8?¹:ô¬oø{‘)¾©ßǽ}A¼™õŸáš||||||||||fbÆ.8ç©[ßñà|ê/yÝ£ç„Ñq^ëÞýéKc¡à¼ lñ¢ÐY^ZT¶Fõ…¶|ç HêüÄê\¾sô‘:§d2) M©ó',y˜…çOXâÝÕó^}jµçùwXpÞ”‚šk ³-mÚü•gö)ZП˜ž¥V´@xÇМûÜ{ÿX§uþ}ªÞ=ï®ê/?a¾è‹<åÀê_º¡ú°þ.çÝ~Þ¨áyKÙ2Iê< Îß-²Ý®©žDX¾”Bó&8Š¹Í¹VÛE˱mEK‡6× æ!U´ˆômúR¥Tóœ*ÐæÌäthó–¢EÁy©´6G›d´¹4JEKN›—-9mŽ×\ Ú|¯›µù&Ò\p-Ú\t‘6·Ðü€¯j/(¤P´¬(ZJ´9JªWjƒ0-%8·BPs›ËkžÓæÚ€Dņ$“h±(e6Ú\¡9´y(½».´yPmY!¨hóTÑ’Óæi!(Áù>׊6×F+®©Ûœòi-¸Íу• A9Ë‚_ú¦k†çêgˆå =Áù®ü¾çÓ Îמ‰7¯þ=ýC‘πππππππππÏÀ‚˜q Î/ôà|êÁùkv¾ªÎíAZ´—ç…à|¿þÀ4-ê¼§(¿t, Œ®óCn’ë\D åm(èÀKKø±¿ÈA£ÎŠ´¨sym)†£ n—Ë´#üÑuŽ7îv u¾õùu®à&Rç:‘„<”Øm Ð絵낒Pˆpˆ5A?uþ-£4q@¡=ÀL0µü;#u.ß¹‚+¨sJúŒ:—F¡¡Î<u®̰†:ÿBuþéê|¹‘:ׂbíPç î('L©óÍç­z T#SçYyâèÔù£W•-!<·ÂówiZ­ºÕÅÕÁŸxÐhé©Òæ}Š–44‡4OCóüðO•-Û»ŸtsµÄÒïšv€þ¸Þ¿Zç_/¬Nùê#Õ÷‡ïO@_ Ï£²…€¿å;:O]ç”7Ô9Ĺ6"ÞxÄç«Åä1çµÆ1ߢÍÑè +-ÒæÒõ ì¡0–âØ¾BÐÖsª¯T' :¡y]j´9… t AûhsNg¨`‰b!hN›š_›)ZD›sBD÷+=ÖWÝæÑk¾óM¡Û ¥h‘ÛœÓ(t!LPÊ3Æ AõÌ ¡ùW-4¡žIF›ëmCshó•¡ÍëBPNÕpº&/Íió h¹³¢”g¨‚ž:Í[´¹BshsNE·ù6=´yZšÓæt_thsýÞx[^ m®ß1)mNa0½ÑmÕM˽~î´‚ó >÷#Χœÿ]ïåYofýgø‡&ŸŸŸŸŸŸŸŸŸŸ™˜q ÎßæÁùÔƒó=ðS…à<)Ú› 8ßùÌoW'+8d/ mE¡ Ï cQ¨)[†…”-‘â¤à±H+4]¾DKë¡"Ihå'¡ûxö1d^öh hó¢Ð”:Ââ Ï;´zÊ3ßSmúöª£oþ¹…À„Á‘6'$NÝæÚ¼GÑb¡y¤Í{BsÂí ø³­s¾û›jó}¯©žøÄ·O)@_aÕ«#¯»§º¨þ~Üÿçþðe‹Vê;/*[( FÓkð:8×ë¶çy·UÏYõ”°1‘†æÚÒ¼.夀‚f´9>{–Üö\÷šg´¹‚&J©•cyq]úŠÚœòZJl×H A¥iI-ë]T-Ö)½däBÐ%6RZ¤Í ÍcpŽÛ¼§´å6¡yB›³ñV»ÍÑ@šç´yÍË´y©”"ä”6·BPhs‚®­å”6gÑÐ<§ÍChhó-ÚõМ×îòõfÖŽpòððððððððð˜‰×àüÉúÀÅ_ÿÐ:…×à=s¾5­à|½nl‚µH{Qhu¾…NJÙBp>eKLµB)mÐ4ä¹Hbù«­´§5Ѝãœ:ǃMàÚ¡ÎEž©óº(4U¶,~¨‘ç„ç_ôàj…uΨ¸âµß¼œ+L&T¶à¼Pš{Í ÍÑ¥œ_ëY:¡¹﹬ý¥º„õã¿Vï¾üÎj¹•Ží Пø¤«¶|ûÇ«óïþþ|ø:¾~¤ð<) Í•-¢ÐHkÓ žÿº:ö–_Tïw]µÈ3T¼Ê„ÜñÚǹ•‚¦¡yM›sBÀhs Aµ¸Ž‰×¼M›£hÑj'§brÚ¼î_xêªgW‹v AçØ‰6wz A;´ù¥#ÓæVªò]Ó!Yhž‚vÜæ5m-}´9ÁZl  -mÎÆ›ú§H›£hÉ Aq›[!¨4-ƒBÐošjjåžBÐW{[e´¹BshóuÚœ ƨhiÑæI!h Í¥h1·ù@ÑÒÐæÚäD±Å¦gê6ßE.-ÐæCG·9¨mÚ\Šm²¢ù"4§4§Íу±Y›‚²™‹‚÷¿ê¾iç¯Øb®¿™Â{ä½ÛÁ3ñÆÕ¿§ òðððððððððXP30–Á9ÿx}ðºËƒó©m|èš ©X¶‡2ƒò3Ó´ 'ÎWyóÇ*5©¡T1W¶ + %Ѐ:§¼-R町‚¼]Ô9Ôù¾×þļ¶-ê\¡Ê€:¾óçÞosÛAã;¯©sœº[Š<'ÀA@ ƒF ¡ÎUf·‘|ç“„Ax{ñ÷¢$ ,"4"<"D"LZý½ß1•ACË ¼²¨Í†:—ï‡0AšÈs|ÃZÏQ°…NáY »&E甆@¼Ç©ê\äy‘:¿ÞÊ €%ЃˆJ_!ºVçEØn,êœbÄ /©ƒÂí¥ÎEï®U ÎÇ´(4RçOXLÁùÓ¶ðü ZkïxYuôçÿÓ4DF›×ÄyN›6 A Š–¾Ð<æ©.Uh~éOþZ]¦u‰Èñ]ÿ\õ´%nèküËœêÔ¯üÌþ ‹¯!lïÏkß¹‚û–ï¼OÙu]ççuÎæØ›ÞKõôÈc® ‡'°ñ€3E‹Ñæòš·ÜæI!¨63…  Î',qž(Z‘ ƒ •¶¢åTÓh„1ÐæEËêó¡”SÜ9mN7«¯´—6Çkž‚êÔHt›GÒ¼å6Ohs:öTÂ^‚jÕŠ–eP´èY-EÚ\Ï"Üæœˆ)‚rz&Òæ<ß8]Ã):b!(´9§q‚Û\Šhs‘æ<;SÚÜ Au²‡>[$… <‡Ch~o]zŸ=¯ynóüÞù²¬»‚çºÑæ ÍsÚ|ý.àwÂ~C A;´¹N:•hs~?í2çŽÉç‰Zj£Ý>æÁùô‚ó Ô›Yÿ9þÁÉgÀgÀgÀgÀgÀgÀgÀgÀgÀg`&f`œƒózp>µà|îüdZÁùó6»4¸,6Êç uîE¡ EQhP¶ + -([]˨Ê•3ІJ„¨CÀ!|zÛ!Ür‹<Ï©sù¯Íƒ]¤ÎÊ>+£ÎŸYÓÏ8·ì¶ŠB3êüñO=¨züSÞY-úŒÃª7¾ûÆê¤oþwд@›w4-¡`óì»~oÞp4(s´rE ¡9ú4*¦g©Ió44aøGþß*®ó¾÷›êu»_Q½àå龜¸æûÕåÿ9øß.{¸Ïc€ž“çó<) Í”-%×¹éZäo‡ªOƒó>úýêkœjt> !8´yIÑ’Óæº&xè¡ÍñÒm^R´¤nóžBÐfc/ Íœ× )#Í;´9¤¹~6w¬T+/e®û AÙH²BP­Ž¢%/ÍhsÊz·e¥… "ΓBÐ¥vúŒ6Âz A[´9¡ùÍYh> Íc!hN›[!(´¹Bóm~«Ñ樦VÑÆß¨… ç¥BPÊ–7MhóÍ#m®BP6-c!(Á9*-67sÚœÐ|—Ëm¾[C›MW§T%Òi!(´9eÓÝØ.ÍióPúKS‰½WÁùVïÿÚ 8ožMUKz2&yNípÈœO/8_l&Þ¸ú÷ôD>>>>>>>>>> jÆ98?ȃó©矸ý¿ªE_Ô-š³8ÇûjTgpœ/®¢=ÂÄÆ… Pç?¨pñâ:ßDÔùÆPç"(!)!*:—Ï꿯Qç"0#uŽïœ"½Wà:¯©sÂ(\çPF‹ò$¸j¨ó3ê\NbˆÑ®ë\!>ãÔuŽº²À"u.ru‡uNp‡*bkQç[¥Ô¹Èsé%º®ó+-$,Sç"Ï;ÔùÂ]¨ó l‰áùãyGµÌJÇW{ŸskÎÑ´ +%8F›×Nsô,Ð\A89á8늟–Wüßc¸näyOxÞë;GÙu®°¿žÿ®:#£ÎùÜÃÕÛ^R=¡&òCpCóš6^ó¥´1Ñ)=*‚²™ÑWšhZz A;´9¡¹V«{A2z.µBsN;X)h¹´ì6W¨NWØ) N[mNh~y74ï£Í¹ÇtÂcÉb!hN›— Au¢¤Sª¾hóšï=(5Ú¼PJ¯§\8ñ²BT´ôÐæ<¿Œ6×)š@›ßf´¹‚šÛ¼]j´y¡”*u.ß9Åæ;—ë|)<–qÞK‹f& M©sÊ)qmãÜîPçí¢Ð&8¯ÉsÂóÇ=ùÀêež]~Ü.§š£Íµ†ÑæMhtš×z#Í“Ð|˜ÿ­ºògÝÿ÷4@áy£mÑÏ ttPšQç×9äü™ßû}œð[ÿ]½á OUOYêÝa# …H›CéOD›OTZ¤Í“BPNô‚šFjm®[]«š×… F›SzA·´6Whhó+G Í ͯµM*Û¬Š´ùv)m®Í­„6G¹ÔK›SÊÆÙ… ç‘6Gõ|mΚ¿pX!(´¹6ûP´ŒJ›EËÀmn… *Wfã‘МMH6#6WhÎ&%›•‘6GEhžÓæi!h Í¥h1·ùªš§… ”G£óŠns+…6Wh~ðM?³ÍX6e£T›´SSPhó_mNh~ÜWÿ«zÕ^7 Γ1=ÄùÑÜæÁùÔƒóÍÔWÿ¾þ¡ÈgÀgÀgÀgÀgÀgÀgÀgÀgÀg`AÍÀ8ç‹yp>õà|µ­.œŸ–TRjdÄ9Áù¡7“è(¹C?@0„ÇÂr}‘–Pçëu~Ç„Ô9…{PçиΡÎ_„ë\®áåhA„pt-÷ö¯˜fÁ¨saæ:gA•î-ê\^ã6uþ…êü3bÔù"\:×¢˜°CK+AàWSç^zhÁuþNéZuÂó«÷„·WÏ}Ùûªw\zç TÁùy*à„ê¡ùŸB!¨ê”è6OióÏ< ÍCX~5ëɪCt£ÐKáyt©ó‚®…à\ëä¯ý¢Z—Ë«',þMpž+ZZ… mއſDš×´9… lfX!¨ÖóT šxÍÛ´9Š­•Nô.¼D(}´yÝ·Àé—n!èœPºæBÐmNhž»ÍË´9÷ '5ìÞ±Ð<+m4-=… F›£hÑÊBsN”,Ý*ÍhóúùÀ³"U´ä… ¸Í­TÏA!h—6ç´L Íq›m®S5Ðæt;ð̳BPhs…æ·yRhs)ZÌmÞ.åù[*唜‚6Š–œï­“EmÚ\… ¢ÍchÎÉ$z1¬´v›s‚)/å÷MZÊ)(hóc¢/ºz,-NR±t¸ªe‰UNõÐ|ê¡9¯ÝÒ ê¬ÿÿÐä3à3à3à3à3à3à3à3à3à30S30îÁù{<8ŸZp~À)_18§´]JXµÙÿa^äÓœ{QhP¶ŒuQh¯²Eá_Ÿ²E^ç†:ßDE‰&.ª@BwhQèÚøÎ\*À4mF‘:WXEéì*!¨‚(~Jt ˜©sùΗ/P焲 gŸ´œ‚ZÛ†:?º‡:O §#uŽ¿»§(×¹…ç¢Î÷…ç»ÖÛªÕÿåÜê„/<\[ççßió:8§´à6Oiói^‡æ ̯aý²^õÿŸ0Pðœ¯R‡Ð’@Pçè†ê\¥x u."0jB'Â'èMÔî¡BXÙ¨ó[-´‚úl¨sÑ 8ˆê\ÁÚHÒeöí£ÎEŸR("µë:¿ÉÂ8B¹¥Þ¤pŽB£Î?ÕC_ô‘:G;!’w³„…×¹ÂsÂE)-,8ŸeE¡ê<„çÿü¸·UOZä€jóý?^uÇoª ƒóަ%¡ÍkÊœÐüc¿üGX¿ ÿy ð\ê–Ax|çžGê\Jw‚sˆw”1ðÑs~ÀE·UÏ^é¸@Ïסy ÍKŠ–¨iyWØ`(*ZrÚ\š6-ؼ`Ãhsmjd´9E¯·yO!h‡6¯7ñjÚ<(Z´:… ¢ÍÙ´Ad… !8o)ZÖ¿8lü´-šm6ˆ6‰… "Î;ŠÑæÜ+}´y,唇N{pÿÙ}˜‚Ú\÷kGÑ’Óæ:m¢'íÐüKöŒÈióA!èת"m®Ð|@›+4§T§aèbµÔhóB!('s6Mhs+…6WÄ–I!(Á9ÏÝmNhN7E(´yx¦Óe‘‚rò(¥Í­Ú<)Íió hù¥ýÞ!8Š–÷é÷Ò¾½gZÁùšÛ_îÁùÔƒóO.È7²þ³üƒ“πππππππππÏÀLÍÀ¸çÏðà|jÁù‡?uÿ´‚ó—lw•Ѝó;uîE¡ã^ZR¶H3‘([ZÁy1<‡:OÂsÂGBHÔ*\„ê5º×|ç‘:?OÔ¹Èóu.ÚÒ3RçFyRL{ê€K!®œÛ]×¹J-—u.W÷ ©—P8lÔyIÙ"]KT¶Dê\ʨsÂóþçý«%—=¬ÚëC_VxþǪ¥EœJA£¦Åhs-ÂpBñš\yºBxÔ-mê¼?8GCpJBÿT½ïó?®^¹ÉÙ¦š1jž}N›/ª2PÖÓÒÐ\¯ ¯Qôš/U*mŽWž×»¯4Ñ´ô‚¾X~ó¾BÐ>Ú>³e¥ ©¢%§ÍG-½¼ZâuYhÞG›Ó°ÕuÕ’ÅBМ6GÑ’Ñæ»æ´9^s­´to‘æ)m® ¶mÞWšÒæškcÏÜæÇ|Û6üP´°h… Ò´ä… ”$w- ÎÙd4Ú\¡9›AÑr·©°PbÅBÐ@›«T´9 ­>Ú<-%8GËmN9tê6?P /-(½¢¢%-Íióš³qió¾ñßÕNg}gZÁùûƒó©çÇÎÔ›Vÿ¾þÈgÀgÀgÀgÀgÀgÀgÀgÀgÀg`AÎÀXç¼ Îöð|òáù¼¯ÿ|ZÁù³Tªv–ŠÏ„:/([BQèoª¡ÎRp4¾¡ÎEþ}˯ŠÔ9Gí¡Î D  HJ ¡Î P Î÷½ö'F$°Dê?.žÜ”:'¤A @hƒ*€gQ u®‡Àg‹HŸ5 Î7:—–€2<ü¾Hh ðþâÿ]ê\A^`Â'£ÎFµ¨s©"uŽ2áE¢@qã &èÂwŽfÝ‚QçøÎ'K¾¡{€`íPç"Ï‹Ôùõø=Ý‹BÛÊ|Þ¦l©d´%”eª83([BQhT¶ÄàüŸÿï~k…ÕNªŽ¼îžà8¯ƒóK¬4ç}šBñ48¿ö¿ª*¬¢CœëçYp®Ÿ¶HøÍÞzuõþÞ(f,4Ðæ¦hé£ÍÙHX|Ú|™ÔmCó@››×¼H›Ÿ¨Í­µÂFˆ‚&nóHš£Ç¾g hqÞ¢Í)ÕŠÁyš×… F›£hÉhs6{úhóMëÐ\š¢‰isBókš+8o¼æŸižÒæºÿÚܼæ}´ùî*åDÉBМ6Š–¯Úsä…à A¡Íšs¦¯”gÏ4s›7… ·¹‚ªÿ!-Ý E ´¹ž¡Ðæ„æœæ±BPhs=osÚ<- ´¹ AÍm^.å¤Ïþ¦Tns£Íõ;"¥Í£Tš A9ÍÔ‚Š6¡9§Ÿ Íßÿ_Wo8öËÓ ÎßrÔ<8Ÿzp¾Õ‚|#ë?Ë?8ù ø ø ø ø ø ø ø ø ø ÌÔ , Áù'=8Ÿ|pÎköŒÕÎñV%j„N`e^a-ù`Ñ#£D+(.RçuQhž‡¢Ð¨l:áùãô¯·ÝEÕißø…9ÎGÎE•C—”—‚s‚õ‘ˆsçIѲÇn®_ú]FŇÐ\‹Ð¼¡ÍK… ÛƯÁ 4Ï AyÝú Aûhs®Kת—6‡4ï£Í›ž…ÌmÞ„æý´¹)ZtÂNE´-—Œ\ÊIŒÞBÐ"mž(Z(ìµBМ6ÿ\æ6¡yVZÓæËâ6/Ðæ!4ÿšmÆQ@l… µÛœ‚âà6(Zèbè‚B›+4Ois+í¡Í)SÞL›Œ¡4Òæ¡x™Ð<ÒæÛA›kÓr5§´¹‚J«ÅF'š­”6o‚hs´]¥BД6GýEñô‘7K–(ZÎ)e—\6t×ÇMÓ Î>ãëœO=8_n¦Þ´ú÷õD>>>>>>>>>> r†àüXΧœ¿øuL98'ð<î‹Tgu^+[F( %¼ ÄÀ7©sB(AhA¨A¨sŠÞZÔ¹(Ãu®ãûPç”ÇAï%ß9Ä"ä"¾\HF è Î muþÃ@«°.Rç„=Ð’8z¡'¡( † +¡Î7†:mI9^C‹ÈlQçǨó´(”ðœB>Â+” u®p 1”¨Qç¢F[Ô¹2J)4MƒÊñ/½§Djê:ËçCW¤ÎÚíQç^‚ß&8Ÿ~Qè??NÁyž¢/òÔwTÛ½ûÓÕ…÷ý¡!Î/{ø¯æ%§Øs"UK¤Í'«j9âc?¨^°ò áJ™mŽ¢%+…¨ï+íu›Òœ5­BP£Í¥gé(ZrÚ¼½q·èjÐæR´ôÑæ¨‚Œ6'4×j…æs­àW¿i‡6Æk®is¼æ·9^s­-U¦‹Ú¨·ô†‰ A;nsHs--Chs+Õsá9:•²\©·¹ž+œj‰… œv)‚òŒê‚Š6×išm.E … :qc´¹ž…)mÞWj´y¡”gpJ›¿%Òæê¨àÔÏðÜmž*ZΣ¢%‚þlP m®Ðœß#š›ÛüWÕ1ú=“Òætn@›Ÿ¨ŽWîzÝ´‚ó/ÿžçS ε ßÄúÏòM>>>>>>>>>>39 CpþFΧœ¯»ÓUÓ ÎþøýÕÙwý>Pç^:>E¡EeËü, Uy"ací:'„^ª“¢Æu®à“T›0œd° Ÿ¬_~ºi:ž‚®£Eд‹¼HŠT(?–?qu®‚J(èÔuNàûL¿­ð<ºÎEW£'I©sœßEe Ôù (4Î#¾Ìó¬üÈ·ªK)UpŽ®…àüŠŸ†rÐyhÅrК:·bÐI–ƒž&ýÒZ[žßï!8OCóZÑbnómi>mÎkÖG›SúœX*MKVÚ¦ÍQ´h¥Š–—´O½E‹3QŸvyꪥBÐ9š­Ôm^(íÐæ14Áù… [LPj¥ =… F›£hÑÊBsJ~)û(Z2Úœ3­R!(›m)mŽÊhs)¡Ø¤+Ñæœ†iÑæÚðCÑmnŠçV m®Ð·yP´|Ï6ÓBÐ@›KÑ‚Û<+ݦ§”L£ÍšC›EKÎ){nÓæAÍ•‚œ[!¨çØ&k^zd^is…æ‘6G#ö‚->:­àüüÏ<èÁùÔ‚óÏÎä›VÿÞþ¡ÈgÀgÀgÀgÀgÀgÀgÀgÀgÀg`AÎÀœ?ǃó©ç[ðÉ)ç1¼Úó#wTþÁ,ÚG»ÑæÒ³t-9m®×bÉòÐ\Ä9´~KѢו×W… ¼ÞåBP¹Í9°ÂBФc¡¿TÄy§T´ùZ*åTƒ‚†à¼¥hi¹ÍÚE ³¬™f¶'.ÕÆR©´6Whhs÷v-9m®{Z:¦vh^¦Í… _³Í7£Íµ7 Í¥h¡4q›§´y Í[… ‘6?¹[ÊæáëθËVM!(´¹6SÚÜ A{hs60ÙÈ … ‘6ÿQ Í¥Û‚6G¿Eù3… oK AÙ4µBPhóDÑ’ÓæAÑòËŠ Y‚s ©ÓBP6p¡Í»åÙi—aÁù²kœí¡ùÔBs^·fòM«oÿPä3à3à3à3à3à3à3à3à3à3° g`a Î?ëÁùäƒówøÖiçú¹jŽ‚óH§E¡§AßþÛê”ïüOuò·c„¤_‹:W¨A¸AÈAØÁ{ŠÝ ¡ E  qÙu~ãO«w¤Ô¹‚•ý¯¸¡Î ^ðäÄpüŸÒ9<º»¨„ŽÐ¿.žÝ#u."r@ßÛ¡ÎqøA[n|ê÷M[€¾:Mô”ê¥Ô9Dg«(ôH/ 5¸¨l Áùc±(´>íŽs[®só[x´-­¥@ÿ- Í ÎûÔÛ9¡y ÎMÑ’Óæ„æ*4Wpž†æ¨hž–†æRÕÔ´¹‘æK‰4/ÑælB Àé+¥¬u¢BÐŽÛ<’æhZ¤h± »žBP6^ÖH-9m>j!èåÝм6Whþô­®Ó) m6qZ£¥hm¾¥ êè-Íis¼æZ5mn¡ùÞê4¨ Aé9(‚B›÷‚¦´9 ¯Ð³ç•*+^õ˜oÛi˜WNƬI!(´y¢hihs=ã ÍEK¤ÍëBPhsS´(8… ÷´ AÕ%mž‚ò ¶BP‚ó¬”àœ“CÐæœ$JÝæ&nó¨hI AsÚ<†æ-Ú\… Ðæ'Õ´ùÁŸx0{æL.8ùæ{p>õà|…ù&Ö–hòððððððððð˜ÉXX‚ó“<8Ÿ|p~ò¼»¦œ¯¾ÇõÕ¹÷üѨs Ͻ(Ô|Áè§¢²å•ò ^M¶(e z‚³QŠB‡+[Dœ'Ê–%·‹ÊéZŠÊ–aÔù•:W™¢•*6Ôù¥=Ôù…¡¨ØÂsÑÁrRz–©s…X¦¹ë¼ã;O]ç"™s×9Á-žíçŠ:‡†nQçG¨óÃEX'E¡K(@^üPó~,?¾ã:‡Š6F?Qú\ç(QV—ŠBó}ý.î([bY¨…äÙ⋤y¤Íýä}Ýà¼.-ºÍchÞG›óo…´ZšÓæxÍmÎël¯wæ6çºmŽ“~EÜæ(ZNî‚r}åµï§Í)Õê+5ÚEKF›s ‚¥ƒBP”H A_W*½:‚rú¢·T÷ê#ÝOKmŸ†æ‰¢¥H›×… ”ü)ÍÝæAÑÝæR´ô‚B›+4_%†æ‰Û¼H›«ì8„æ]Ú<-mhs…æÐæ„æ[Gp®BPhs)Z¶k-!8O Amþ¹Íû A¡ÍßžÐæl–m®ÍÓ”6§HšBi A¸ùƒBPmĦ… èÁ¬´¦ÍÙÈÝûâïO+8ßà-×xp>µàü·z¯öfòM«oÿPä3à3à3à3à3à3à3à3à3à3° g`a η÷à|òÁùE_øqOpžXýª–å·ühuÞ½¬æÜó‡êœÚu>™¢Ð÷á:uNȨsùΡ΂žRçòØâ´…64ê\!Jt°´p¼ŸcþPç”ÌåÔ9¤c Îh¨sˆHBÔÁu~¯…@[ιÇhÊ-DUR€·YJËõÛ¢Î4Eêœr=Jö 9 §bxŽ"â“‹0 …ÂK»Õ üP+P臣xy…`P¤Ð¤dËÉeŒÓøÙ¸Îå8^fßPh4ªÈT´Áu®E§’ÁŽëÜ‹B“àüÑ/ úúÛ‡àœ…r%”…þ¯…㥕:Íùó|Ý{o¸·'8…  òŸ¨@Ÿ`¿·ôà‰ A;´9¤¹ê›>ÚÒ|"Úí«£hI AûhsT?=´¹)ZÖ•6/)Zæ™ßÏÿ 4O-EÚœÐ\kÇa´9*¥ÔmCó¬´¦Íé7(Ñæi!(Ï +•¦åÅz–” AÙ¸k‚FÚ\Ϫ”6·BPÜæÚ<(Zî²ç!ÏÅ@›‡nž›>>>>>>>>> r–àüÿ(8ÿÏ'ž/·Î9ú|‰Š'œ£M8ý¶ßÔÔù@Ù2¬(ôd”³ql°E+ôÈ©sŽâã:WBSG ‚ûöß>ùŸv¬ŸÀ¥EË™¨ó™Òâòê|§KqßoÞí¡ÎEJ¢h¨s‘”:¿;Pç¢-£ë|¨óS¿Wm¨€i\ç¢4Ñà:‡:_êeKJË/Ü¢ÎnEêR”b? þ"uNxNPöÜH£lé¥Î½(tBYT (AòðÜt-ãUúç—þXÁyžGúœ€<_‘N'hçk.Õ:æqÞWÚK›ã5Ï AµY‚.‚Ö´9ŠŠW­´Ö´´Bs‚š¦%*ZtREK뙓¸ÍÙ,©CóXDÜV´Ì1ÕÏÓÖRÚ Î3EËÆ#‚öÑæÑkÞr›'´ù›¤haƒÊ Aµ²Ðœ!œ ±"¦hÉhsN”h办Ïk-_³ç„‚B›ëùÁéž'/Ói–•{ A9ƒFŠg'cxVñÌâÄŒÑæz–A›[h®çϹMÏø~Shs)Z ÍEKC›ë9 mN‡D‡6WhÎ3˜g1ýVª“AœÂmn… ê«à9Î3½D›ÓwÁï¼Ú¼UªLF›+4Ois~÷šŸrÛÿTkïÿéiçGžÿΧœïº ßÀúÏòL>>>>>>>>>>3= Ep΋ Ðü‹œO>8_õ—Nœ7%}Mì÷~þáêüûþT‹²Å‹B§TjÊ穲%P牲¥vW¶ £Îo²0ÏB=Â=”¨%¶Çu^¢Î¯«žþF!âvÆñŒëy‹«¥°qÞK+„èÍ©sÈ_‚L‘Àmê\¾s…Ÿ]ê<”…Ú¬ 6Ôùé”M6|T.¹ÈJZx³#unáùû«'¿P ]HÇu^R¶ÈÝýLÄ„Äê\a2îïÅJÔù;­l“ÒM#»Q£@z‹øÆ3þτٱ´3ùO‚óKœ7á9ºV ÈóÿŒ¹…æõ×sý=ƒïÝ„æy!hF›?õ êñ¬V!hM›×… xÞ­´T:Ú\¡9׊kÖU´¤nóžBÐm®ùÁ™mÎi†"mNh®µÑÚÒ¼C›Cšk½QóÏ}`… Z¥BÐ>·y ÍwÉ Aœ'… KïU(…6×=mn¡¹¹Í¿f§Q8•‚¢eÅDÑ’‚ænóPúÓGœ[!è Úä«Có¦TÁ9… l Zh A{hóA!h—6gc’ ʼ´H›+4ßoH!h Í1Ú<†æ%Úœ¢éV!(´¹6h)¥ŽŠʪ?¤àüe;^3¹àœçM|æè¹sÚµ÷xp>µàüe3ý¦Õ¿¿0òðððððððððX3°0ç§yp>ùà|“=?>…à¼Ö'ˆ8ç¼{ªüðOF÷…ÞùÛêÔÛk¤ÄÇå[Ô¹ABÂ<µ½ç>Gñ I(‚ƒ6$<¡ ®¡ÎåÀ…Nl¨s0û*ˆÙ×¹¨ó½jß9¤ãnPç"w¹|@CFâãÝþ¢ê\ÊJø{)ÀÛB„åæFÿÀèK(L‚%¨L‚&(͆:—ö E{QhPf4Á¹…¤[pþ£¿(Úœ@ÿÉïP¸¯€¿£hÉiséirڜ̈́gæ… ÒÜ@›S¸j´y©T´9 m^(í¸ÍEš'´9›'¶:… ¢Í)˜]‹àEKÎ[Š–FÓR.¥Üv‰×iu-y!hâ6oBs‚¢7j Ak·9R(‘Œ6¿©C›SÞÛ¦ÍËŠ–mÞ)…6×f[J›Óðrhsu)¼B t+D·y±4Òæ…BÐMêÐ<¸Í¥h‰´¹ž‡)mn… ¸Í ´9¡9ÏÚPióÐ?Á³Úœ^ £ÍEš¿-)Åmn… :]”‚œ[!(nó¦tà6§3EK§4¡Íù]ôœMçvƒóF ¥9|yÔCÕª–,8¿ì–ÿôà|òÁùŸôíŸäXÿYþÉgÀgÀgÀgÀgÀgÀgÀgÀgÀg`¦g`a Îwõà|òÁù›Þ}ÓÔƒóÕ>\ívÎw,8‡:÷¢Ð™+ m”-S- …zTQèõFÙ6Ô9ômC‹<ïPçWT‹o"ß9 ¨s_‘¾‹m0·ZìµZEê\'ág‡:—Ëš°´C‡@«ñ'Ôy ÏÎN¨l9.¾(F(¶¬]çOZ6ø»-$…:ÚÁÚ†Þ&ž$uþší.®æ>ô—j.áy\1@/ü'áz ÌùÖQ×ÕÄy/mNh~ ýÝÚ¡¹þÞOKCsÑô5mn¤ùRò¼—hs Ay½ú A;ns-Z\“¨h)Òæ )ñØ7'[8Õ2Øœk¼æ¯î/ ´ù¨… —wCsæ¹UZÓæ[EÚüú2mΩ†‚æ´9Š­TѲ·Ê~ëBÐez A¡Í)FÑ’‚¦´ù**~…‚s AW•*Ðæ·mNi±Ñ扢¥¡Í … ¨©b!(nóPzw]zO»Th¯REKN›GE ›™ç(ZØäÜmN!´Ñ扢…T+­Ýæi!(Áy»4£Íë ÜÅ^­gL½1N¶¤ ÃóÅ_~jõ‰Û'ÿ»Öߟü÷7fú «ÿPä3à3à3à3à3à3à3à3à3à3° g`a Î_æL'ÿaþí'¹œS„ÖõÅ@+õ û¶:î–ê‚ûÿ¨ó!E¡§ßù»êÔ;~kÇä#uÎñy\çïÿƯ„<.¥Îoɨs‘†‘:§(Ž#üP‰Ð‰Pç¸qqäÄu®`¦EË­K9] Î4J¼¼øy·3êü> …P@u®ð(Rç„JP™)uþÚÚuŽ3 :‚*ôW„X  ¡„\øˆñ~á:GÙ‚‚ad^Š®å±YºÞvU?ø—êbÂó:@o…èi ^ÿߘëÏò5|í‘çu!(Z˜ÞBÐ"m^‚¢ ZšÓæxͳBPò}… èsÐè¤nóHš·ž3%ÚœBP­¾BP£ÍQ´d´95lØlP¦Í4Ê@'¤ÍKŠÑæ*Ðæ14´¹yÍ‹´y]Ú¸ÍG£Íƒ¢å«¦hy!Š–¾BPhs=O ÍéR˜6O AÛn󢥡ÍõÜãùÇ鞇M!(´¹ž—Ðæ„æÑm¾óe÷Û³•gl ÍUª?æ14ÏisN E·ù;"m®ç{J›sêÈhs…æÚ<œPŠŠ–œ6Š–è6‡6ïü¬Ù˜koÎE-Ôðàü…¯=ÏióÉÓæ¼fsôXÿyþ¡ÉgÀgÀgÀgÀgÀgÀgÀgÀgÀg`¦g`a Îÿ¯>˜ýÑÃóÉ…çÇ\tûä‚sȼHƒŠ8_ÿ€« ø³…çç×Ê–9÷xQè(E¡¡„]+÷…’A™ö…~ÙŠVÝû‹ÕÒ{)ŒÛs>…¢¦×ùéP·¸ž:×Rq"tîPê|ã”:y^¤Îz~ÖÔ9…‹®!ª²˜°´C+Ø‚JîPç©ï<¥ÎE;+ 5ò\!ð³EQCSËßÝOKcBÀ\»Î)Õ„Úî§ÎåÏ]ç‰ïœàü"Ý7=øç&@oBô¦'ÿiay˜ó5¬#åYn+ZÞëOÔÏî-=xâBÐmi^‚öÑæ¸äYòÊ A3ÚÜJˆµ:ŠmÎEEKú|i…æý´¹)ZŠ´9^s-fqh!hN›ã5Ï-·yRºc,­ƒó´t×ÏU‚Ö´ù²=´yÍË´ùKûf§Ú<*Z¬4Òæ*Mis+Õfª)”SM!¨6Ch~—#oÑÐæa#‘å¦TÁ9Žè®:…  Î)Ý­§4§ÍK… 9mnŠhs©¼ŽÒÆjJ›[!¨6_ÓBP‚óšH¡ùiÚ¼}çÇïOž-i—B;8·“-,6xUË«·ý¨çS Î÷žé7¬þýýC‘πππππππππÏÀ‚ž…&8ç…Qhþ Î'œŸõ‰ûêà< ´†çYpþò®±ï‚ûÿÜ([bQè9?øCuö]¿¯Îúþï«3¾û» êœà‚ƒ’6\çF«¼ êü„H+‰®ó£¡Î’–š&âÏ-®sB£Îoüi¥ØPç¢÷¿þasçBC7F×9º‚œ·ˆ„ܵ¦Î!$[Ô¹Êu~oC£*€:ÿ—ÚuuNÞÆ§~¿Ú¨vCoHAžT¥Ô9%}-êœð¼¦Î Á¼(Táy+8l…®·íE¶áÄŠz ÄDOVüïãƯ;âã η¿Hó!´9™ŽÛ¼¦Í—¨-O/¹ÍiÎbCa hÉhsHó>ÚE‹Ñæ¥BÐôT ´9… ¡|8(4 ÍµyÒG›ã57ÚœÐ\ ‡~ã5Ÿ AURkÚ Íµ6M-Ú\å·¨ˆØ¢··ô+Ô]jX!hœ¿%zÍ“BP6·´ÉÅf×@Ñò¥êY‚JÅD!èr¥BÐ>Ú\o%Ú¼[z»„Y7¡Í7 ô”PºqRJpÎsŽç´yT´4´¹º  Í·ohóð … Ðæµà|õýÖžhòððððððððð˜éXØ‚ó9œO.8¿â+?œS’fîáZÕ’甬òEêÜ‹B³¢PS¶Ü^­YP¶@†”-·¶”-ÿEe Š£Î¥lÀu¾œ‚µg¿í+Õ³ð‹RmSç"ÏSê|wv*%„z}ôkÇu®2CˆY<Í„ ME±­”Ûhu¨s…Š½Ô¹ôÒ`PZPiÔ¹–L´]ê\E¡ÒlX¹ãÚrSøØñ§Áyí!N©ó•ÀF"š¹ã:/Pç½èEž}çQ燫4ó=ò€+`ÆN༸Âç^êüø†ü†:‚Hp…Û„ÜFˆ«t]çœÒ`Ã)á­ =êõ¦†¯ákøøÝúžih®Ÿõ¤a´9^ó¼Tÿž¼Ç{«´¦Í¡óqÃ[!¨VGÑ’Òæ„æ‰ÛÜhs F›ãš–š§[:Gs¡BPÍFo!h+8/(ZðïO§”{¡¯ôM±Tš–,4Ÿ6çĈV©”û=¥ÍW¤T§´Íº's›gŠ£Í¥‰âÙ³–žA”³™Ç¦žÑæ Í¡ÍÙô3Ú\›€GEK Í¥h!8O- m^(%8… Ðæ(Z¢Û|o¹ÍÙÄd3Ó Aµ¹Ip-(·Þ AœÇМR6Lc!(©l¨FÚ½—Ñæ ÍSÚüämÎæí6'}mÁyò|©;v9âóœO>8ÿ«Þ›=a¦ß°ú÷÷E>>>>>>>>>> z¶à|oÎ'œóz=ý•¢ëR…BJœ ÎÏ®ž&"ôB…xа²%- ½;¡Î¿'ê\äyC×¾s¨ó“ Îå;'øà¸=%oxk! ! ‚:¿9£ÎE"BS gÔ9¾óÚuŸ¿BèF‚ÈÇ2uþ@Mßo¾^¼½ÛÊu¾¹Îï5¯ï–sî± u¡Òf¢2ê\´f‹:?Ù‹B½(T!6ê”\ÙRçl2±B€W8½Ñ ÊCX_w¸‚s£Í æù¦hÑ*‚RdÚ‚*ô´¹Bs6z A[´9¡ù±íÐ|‚BÐ2m~šˆ^Ö… Ú\›+l°°Ñ†K‘6'4×BÑÒG›ovUµ«¯´—6‡4Ÿ€6gcj×¼4¡ÍÑ)í%ÒóãjÔù¢P¨?‚ Sj꜠ƒÀãÄuYØ¢Îå¹%L!TÁ ™uNèbÔ¹BŽÿC£€nl¨s8øÎ÷˜÷#Ó ØUtä. } & €põBãï…¬lQçRêüî@«@/RçP›Ð›8ƒq¯¯â=èN/ õ¢Ðœ:GÕrÞ½´ez\„âõ",ÿw Ëùsçݾî°k~Ñæ„æ*4WpÞòš§´¹43 mÎf@/mN!( }… Ðæhsl +ÍŸ)ihŽë~TÑ’Óæòšw-5mÞ*MÜæ‘4ï£Í)ÂÝJ¡ùÖ Í;… ¢Íw ”༯4§Í ͵öTp½æ mÞW mÞWšÒæ¦hQpŽöiÕc¾]Úü6£Í×<^Š‚óDÑÒÐæ…BPžc±·¹)Zœ‡BÐm¾¹Í»… ç)m-Sv‘:—|qÑ‹¨s‚kØÙ¦OÉ”-ëˆ8?÷ž?V鯽ùO‚ñtþ _{Ø5"ÎKŠ–"m^‚ò÷]BïÞBÐP :´´C›Cškñ÷Ñæ1€TÙâ@ÑRŸbi‚æ´9¤¹Š£ÍQ´d´9³´«L›sb‰×é$D§ôê0¿Ìqo!¨hsœÿºz Aw¾©ã6ç^³“„æÐæVªÓ#œ" Š–è6—¢¥¯Ú\¡9Ï ž«*8§t˜à¼H›'… 9mNÁq‹6¯ AßP‡æM!(´¹Bshs6#mN¹r ÍÃ&¤‚jS2-ÍióV!(´y]zp^ m®Ð|@›«ôKEKN›ÇиÎkêœ`‡€g·HK3ТÎçBÿ0PçÜk~_B$LB¥-DdnnÔùLq@±Ô9E{¸ƒQ¶4Ô¹‚+Ã^êE¡xÉ×q>çž?h)a!(š¾BÐ>Úœ6 ´Y>*ZœO¶ÔN°” AÛ´y¦hY¯D›ã5×jÑæ„æZ­Ð\Z!mô<}‹44×FPªhéÐææZl,õÒæ*ߥ€WE¼!8¡yB›¿U*%… *ö¥à·9¡yt›§… ¸Í­TšHs4Ny!(´y Í­4ÒæR´¤´¹‚ê Ï%žOVZ»Íƒ¢EnsS´DÚ<<ëèxh A¡Íšï g#'s¢Ûœ;F›ëYŠÛ¼TšÓæ<ŸóBМ67E ´¹žûG%… üN°BPÜæêÅà¤'–ÎchmnŠ–„6ÿÐw~]ûͳÒᑈóSªg¾ú,Í'šÿ]ïÉYÐo^ýçù&ŸŸŸŸŸŸŸŸŸŸ1 cpþvÎ'œzÖ7 Á¹Ž¨7Á¹\Ò8¥{‚óÍøêÒŸüµºäÇ©æÖÔ¹…e tçú=E¡\]P¢£ u.’ñK«©s•ž­ˆë\* TЩ„m B­>K®óeöýRâ;ÿ¢é!LõJ—Rç”Rføf³;J_o* £Îߨ°qˉ¨ó+ªÅ7¹\a¦¨sM‚M•7!ÜK+$ÅgSç”E¢òˆnâ4ìŠe~)uÞò§Ôù‰=Ôùqry'Ô9ª’e2û‰Ï‰Ý¡Îå‡Þ®©sêÇ?MZŠ8ŸzPÐ¥´¨sÜuQèÚ"ÎÏQqn\sô‡ =„éíUÿ÷ü™äkÞ5à¼PÚÒ´D¯yRÚK›‡ëPÚ=KGÑRÓæ„æþ+•-éó¤ý,ázÚu]]×·SZÓæC Aç†BÐ ‡‚vhsBs-æ·—6‡4¿aâBPî+MCó¤ÔÜæ‚jÕ¡9÷)÷«Ñ溗+‚hóš—ión!¨ÜæÚ¬[7¡ÍQHñ\B)µqRJp^*mhsmæ… ç±ÚÜ A¡Íçµis6+Qeå… 稵"m~HN›+4gƒ4*ZÐuQ A¡Í­T›¬i!(Á¹‚ÖÁyP´Úü¨Ï=ÜG›&©Û¼PÚq›ÇÐ\óŬ±Y³i‰6‡4Ï-mN!¨•‚¦Š–š6Ggô¦XªRÐ,4Ÿ6in´¹Bshó¨h1Ú¼Q´|Í6ÈØ(3Ú\g6¿Õhs+Åmž)ZŒ6?^nóR!(´¹Bshó"m®ç§db!h Íïns=ßbhÞÐæ…BP‚óX mÎ žm¾Ÿž»<yó<.ÑætU𧻂gz,…6o‚B›ëw'’RÚ<-ÍisBs~ï0ïÞƒó¤t8 Î×ßõjÎ'œ_ñh¼yõŸéš||||||||||Ä ,ŒÁù" Î9ìpG| >òÙ‡¦œŸeä/Þé•þõŠê£ÿ¯…ç—ÔÊ–ÇlQ¨ÈKÔ„J„K¦lIŠBMÙ¢@ª) EÙ’…¢lQY_ªli¨s•û¡] ì1d)A¡Ù‹¡Î¥kXQAÞc¨s”„m u.åaÜ2R@ÎÝ*Ê5PçZEê\”l‘:W@H bî:'PDc±µ¨sŠê\ä®Ô]×ù•`–©ó<<Çu®…ÇŸ5Ô9~k…¨‹®¡¢HÊ";Ô¹hQNB°±Ó¡ÎC™•ºìšë\Ko×u~¼ÄOZNa1¡ñ³UŒiÔùÑ“¤ÎEžO@¯½ÍÅäÅCôQþ3~Í¡çç¥BP~þÓ ´¹Bó',9¤TÿÖé‚–isBs­Uš7pIÉp,íÐæxÍóBÐ û Añès²à|Ó¬4–‚¶-šYæ—ÓVªU*Õ=0(Õ}¡>Nh Bó!´9÷žÑæE ÷§Ñæº_¡Í£¢…S$ÜÓ„æ(Z¸×Q´pï§… <¬´ÎC!èÀmn… 'ˆ4m¾ÞIwZA1Ê(£Íõ<‚6Š+í¡ÍÓBМ6Š–¼´H›+4Ïió;´y(yŽ¡9¢9mŽ®+ÒæQÑò~m°¦´¹‚B›k3ö´;Û‚œso½åœÛÊÁ9ÏNUÕÏæ•WM1(Êz–üë;>íï+F|_‘¼;dA¼YõŸáŠ||||||||||Xè‚s^$}`ûç£o\ûí_UO}iFœCÙ¥ª ¼ê2?ó‚óg¬w~uù*8XÔ9áyRвêüüûþdÞfT¶„„gè=Ô9.Z(ÁSz4Ôù­¢ÎŒpÂð¸ÚwŽë‘Ò8ÈDEB—CE,âÉ5ê\…s¨êüQç"¡¡Î)¬ÛëšY‰”$n^t¸z „(½CGÐPç".Ôù½ u¡ uŽê€àœ0Šð|ãS¿ïE¡(2ä˜&È Ô¹…â%_{Û‹mþ„+ ÒÓP½õ×_Ã×r•‚sÊGŸ,¯y±4§Í Í3ÚœâS44-E‹6 Ø8Ђ‘æÏÕ†B‰6§”Mˆ¾BÐæôʰBÐZÓRR´°qb… Z¥BP+-‚Ú|ÔBÐk³Ð<§ÍñškA›S¢«2Ýg As·9¡ùÍEK‰6ï+MisôMF›+4Ïiób!¨‚óšç´¹6öòBÐH›k#0¥Í·¡T'm(åäM,%8… r››¢%Òæáyʉž¼ômzþ¦´9§‚è¤H Ay†¿'¡Íé´hÑæú‚â6Oió¨h¡”ß/‘6'8ßê¸/%º§³C_‡)ŸÚÁ¹…æ…àü­ïû¢ç“Î7|4Þ¼úÏôM>>>>>>>>>> bÖàürÎGÎy­ž½ö‡žsBóIçø‰/¸ï uþØ/ Ê–XÚ([F, …VŠïœ` ÃpêüëF¨ºA­R0Å uNñà€:¿Å¨×†:ßC®óÝå`ÞíóVdhnæu®€Äš:_jûOšïyÉmkE‡:¹û†ê¼žã:ïS¶ÔÔ¹‚R L!Ž:?OÔ¹Èó¨ó@‹Ö3\“¢mê\äy‰:ÇÝM@Ü¡Î$©óÃÞ&Œ~ÂÓ¥@Yâ]òË%¾Ø¡F{w©ów­Š¼äk‰8Ç»Œ²ˆCôQþ3~ÍÁWÞU¦Íñ¬7´¹þNü½øûÅÐ|)•v Aå6‡®–þ­}… ·9¡yV*ºß(ÿNhžö$hs®+Kטkm§ :´y©TÁy§4£ÍÿEe ¬m A·Ö)ŠmN!(÷@o!hN›SªE¯@ ÍÚ<-ÍisN‘DÚ<‚æ´¹)Z ÍõŒXU'Tm~[Ep¾æñ·WF›ëDKJ›÷‚mÞ)½».½§]ª’ä¼4§Í£¢…ÍH‚s6'óBP‚óXÊÆæÁÚàÌ A¡Í­T:.‚s6JK´y(ýµ©½Øl5Ú\›¯Ðæi!(S¦D’ iýwÜ4ApžøÍÓgHýyϹßòà|òÁùâ âͪÿ ÿPä3à3à3à3à3à3à3à3à3à3ðhÌÀœâÁùä‚óUÞpIpNYZ/qˆÑS¾þ £ÎÊ–aE¡´#RçˆÐ)uNÁÁ .[Žç7Ô¹ŽíSG°’Sçxr ce"uŽ€Ðæí uNaTäÞC©ójêüþj\ç"/!0!1eË)[DouNxžRç*àÃ)ìE¡Pç^j„¸ô*km;×4¶4ÿ¬¤ÂôþûúÏÖ_w‚sÊGË´¹|B|Bs L{ AsÚ¯yB›³‘СÍ!ÍëBÐ>Ú¼³ù–œXIN«X)h_!¨ÑæÚ@)Ñæ”ËöÐæœp6Ï-Úbƒh»O𦍍h)ÒæÚˆb3ŠÐ%’‚–is+Õ]üöÑæ14Çmn´¹Bshó¨hYí˜ïXp^¤Í“BPÜæVjnsyÍsÚ\Ï-ºؤ»¡)…6W·Ï<ž}‘6ç$N Íu:'‚ê´¤y ÍsÚœçn¤Í鞈… )m~X¤ÍšóL´¹ Aœ§… ¸Í­T¿bhÎï N+¥´y,å÷ §œ8íôŠ]>Þœó;PT>µ6ß‚ªåC×ÜíÁùä‚ó7®þ3ý“πππππππππÏÀ‚š…58ßЃóÉçíþ±žà<Ó,p¤½¥j ÁùŸ| ºâ§ÿ”-¢P”-ó³(”Њb¾ùU ‘ŠyùwFê\¾s…p„q„rFË£ÜPç-ß¹‚½†:ÿBuþ™P‚©sÈ[£Îµ(Mì¸Îå‰Þr@SÀ¸Äæ5é‹_zeËúõz,Èó”:ÜK§Ê…,üJŠýÔ¹|ç¾)uþÂ÷WO~Á Õ“‹Ô¹‚dHì”:GqB©&ä¶Š6G£ÎßiZ¨óµ¶™kT¬­ øŸüy¾îWÔÁùSÞY=þ©Â]´ù„… ÚÒ\ §{mÎkÃk¤…>(Z2Ú¼S0\(µgݹ¢%§Í3E 3Q,U)èÆÑmÞW:/‚ÊÁo§"˜SÜæ‘6‡4ïÐæ„æu!h/m®“œÖЩ¥w#8¡yB›sß±(Åm®û’S!ܧÑmΩ‘m A¿i=+'… Ðæ14·BÐH›ŸÐ¦Í×§·¹ž;¸Í),ŽnóPz—mô±ág… Úì‚*8GÑ’Óæ»(8GiE!(Š«R!hN›— AsÚÜ A¡Íš%WJ›/MKt›Ú<IÇÐþïõg‚Ï@wÊàœ ©àüAÏGÏ÷?éKÅà¼UJ¸`)9ºÃ¾Z]õÁùßÚ¢ÐáÊ–nQ(ÊB&”-( 6ӢЖ²e„¢PÅhÄ Jq£e 0£]ÚHÔ•®5Ô¹·à:¯©s…rPç„tPç„vß¹\çRH˜ƒ¥”¬hÙ®ëü& Š:§ ‘RDÊ:ÿTu~]##uþѽFká—…:G¿AácCžB+|ma1K” êüƒ!ð%ø…šF;²| ©ËÔù±ÄN©óe¤8¡T³HÂóNpNÐ-½ÊšRµôÙŠúÿÉŸµ¥¯{ÇåIpn´9¡y^š¸ÍchÎß¹UZÓæµ¢åIËQªU*mhsBs­•N„æ {ÝæuhÞG›?mÍÔm^(-ÒææZ”ÎnÒG›Cšk1}´9§'Xœ¤h-5mÎìsò AµÞ¬û" Í'¤ÍEšm®ûÚ<*ZŒ6W7AJ›¯¨$æ6×7íç^‡6·BPÜæzðLhÑæÇËmŽ×\´ù:‰ÛÜhs…æÐæAÑ"Ú\Š–MÏø¾o¦Ð<ÐæwÚóæàü㜜uÁm…à<¥F£ç|@ަ!Ø&‡|¶š÷Èß;ÔyZzÑ®.¸ÿOÕG~ø§ê¼{ÿhaF¤Î)pk¨sQµƒP„F«ø-RçІ8n9¶œ¨sŽóãÃm¨s0Œ u.²1¥Î!qîBïu®g\ç5uNu¾[¤Î/Ϩó¹Pç?¬©s/ 5ÍÅÖ Î¥¾0F¢léç^jÁùRµ0ß~q5Az Ô³ÿLÿ,ÿ÷UpIó&8OÜæu!h Í{ A¥Ÿ™N!h™6甊Ú ëFÈôNÑkÞq›— AsÚÒ¼.¥`vãmÎ&Mm^+Zž¾Uî6¡ù·yš¡ÍÙ”2Ú| hYE ´¹6³òBP‚óX mΆX‰6·BÐ:8… ·¹‚žÐ.]E ´¹Bshó¨h±BPç%Ú|ëó… 6—¢ÅÜæ÷Û‰›mž(ZšBP=Gyžæ´9mÚ<œŠ¡y‰6/‚¾_Š–”6·BPhóúäF ÍCÙnT´ÌÑï~ßqãG Î)ÖÊ‚óÕ·ù¨ç“ΟéoÌçÿsMý5õðððð˜™P¾þ$Bó _á×cf®‡¿®þº.,3°0çGxp>zp~Æu÷†à¼E–‚sa =zVp‹ø]í-¯æýüïF£lYXŠBMÙ¢ 'U¶œãìÅÝkʹ|ÑDe ARSв%- ¹Ù* •G˜° EªB¬´(ô5"Cו^Zt-Q£Ð£8‹q­zLB‹:]ùð„:™ŠÖR•ð O2A ˆVB:Â:B»IQç»*„ª%(ìPç"Ï‹Ôùõ ÎÓð\.i£Î¯é¡ÎûŠB/B‹D^+s¿ZêXÂØè-NÕ )=Z+lÎ¥–nSç'¨óã+ì'=§¦Îñ€ã_ö¨ ÍI™:/)[D„nt‹:‡8GG”/ Ó «ôg¼, ΋´9Š–Ã2EKN›ã5תis#ÍŸ[*•Û2ßÜæQÑ’Ðæ¼¶-ÅSV(œ©Š… \[+Õ*‚r¡§”âÙÑ A¯µž×<§Í5㜰€6çÄ…Ñæº2Ú|éÝä6§´q›÷‚æ´y_!hJ›[!(´¹Bóœ6/‚ê9Âódý“sÚüûF›óŠ´ùæ‘6W!hJ›ó,ë£ÍC!¨ÜæVú m.¢¶ê+Mis+´y¢h!8G¯ióP:p›S¢%-e5¥ÍÓBPJvSÚ|NM›Ÿwß«·]vW98gc'ªZŒ8O‚ó8×zf¼þ­×yp>¹àü§ Ë]ÿ{ú‡2ŸŸŸŸŸŸf@ÿï)ç?ðùñùñ˜Ý3°0ç›yp>zpþÑ/ý´œC܉¼ãèú€­ƒóVA臫çÿË%ÕÕ¿ø{Ïk×¹…>ü× êü’ý¥ºø¡¿T=uþç@+Ì8W$ át En„Pƒøž¡!k¡ ¡Î)‚ƒ6l¨s*+ u®Àêœr9FŽÿGêŸîAÒÞâ@ã;ÔùÃ:—b EžËáëE¡^ú¤åœ.çÊ”'S( …8ç4Eº˜óa+ÿó@œ×… AÓm.¿úZ5mn^ó>Úœ ô3à AëRÐá… Úˆè„æzf4j§PÂØ)eÓcTÑ¢à¼å6/‚Ö´y«ôr…æ ÎS¯9z i‚… ÚÈI A·.‚Š6GG´ÁyT´Ü˜)ZrÚ¼PšÐæi!hN›— AsÚÜ-ÐæR´°‰hóÛLé„ÚÉhóDÑBpÞWj´y§ônÓL¥´ùv‘6×ɼæ£ÐæQÑ’‚òŒ¥["U´ä… <«­TÏî¼”ç{»ô×ö{€ßF›×ª#~_DÚœÓK9m~þ}ªv>ýÖdƒ--.è"qžç;¿ç³œO.8ÿ”€˜Ý üúûõ÷ðððXØf@¡ùSλ°ý;ýïë÷¦ÏÀü…98¦ç£ç¼V‹¯"Ò7†`ipná9Ú…Rp~vµØ«ÏQhþ·êjçójêü±RÚ([F, %ˆzƒHNüÁx„ñ CzB£LÀ7ŒB•J£ÎUèuŽ«Ø¨s¹‹#uŽÓ˜àŒíå5uŽû2A›QçÒŠ‹Ô¹E‚Å”:ß¶vDw”-PçZEêüÊ JØÜÔ8ª B7ºÔ4PÅ]×¹|çë\ˆäµ°®u^…{QÊþŠÔ¹ÂZHRf6§ÎA!h‹6Ï A Î#mBó?UœpZfƒ ‡çV zºõz˜¦%ªZ¬4û”jÞ×îÁùèÁùùñù÷FÜ_K-}||||ì ( _Gëj­ÿí ÑÔÿ­§øµY°×Æ_o½Çqöà|kÎGÎßrÔ绡º‚Д8¯KÿVûpµ×œïTWpþ±H?ÚE¡„çIQ¨)[Þ4E¡([Ò¢P”-IQ(ʨJ”»S*EAZŠûê0zÜÀ‘:§l¯EKñIˆJ¨…˜‹° Åá!aØÚ'Ü1!uNÀFІÞ×9Ô9AúˆÖ@­zÞu®PϨs„¬HYTmê< Ï×ùMò>'E¡;ÊM™¢QçZêüº@úBüâ:ƒ(`…šKH¥±åEê\¾s¨bÑÅ×ùk¤ïܦÎåÆ^³LC:Û©ˆFÇc×y›:_dù *1úºHË N¹fJXú*ç´­¥pÑЕ|Í~s¿[‚&´9”»Ñæ‡whó'-›»Í¥IÝæEÚ\þŠZuh¾ÈJ%Ú¼>•Õo=< … Ú\×.ºÍ{isHóº´6gŽXC AŸ¾ÕuÕ’[ku-*•¯Pš¸Í›Ð|mÎ}c´¹î£†6Whm®Sy!¨Ñæ ÍSEK^ŠÛÜ A ΛBÐÛÜ Aõ|ˆ¡y‹6×óÚ<*Z¬TÏBóÜmž‚Ú\Šs›VJ‘ò>zF¢hÙïúŸØÆct›³!٦ͱgo ÍK´9%Ï(·ÒBPî6I[… ÐæRx hs)Zz A Î ÍϽû÷ß|ð\¨O¤°ÑSw!„S)upžøÍŸ±ú™ššóZ}nßÐúßÉ?hù ø ø ø ø ø Lf Éµž§µ¶ÖëµVÑZr2ßÃÿ¬ÏœÏÀcöàü¹œœtú×»ÁyZÚc¥‚ÐW[ûÅêZqf„ç×üRÔ¹)[þV]ù³¿U¥¢Ð‹ü‹…xh9Z)1ˆ§–0o-Gñq§Ô9h”%êœ&RçGÞüK+Ÿ{Oí:‡x$À:?èÆŸY¸I‘]C+ÚWês+"<ßcžÂsç^ªà\¥‰KAæ&Ê–&8÷¢Ðê‰Þ(R¤J1e ê ;Ê–C*‚sJQQØÒɉ‘—þ<_kÁ9 ¾oo!¨þ.BP…ýÏI AEÒQŸÓæ‚¢®é+%ÂC As·y$ÍUºÁymiÞG›oióQ A3Úœe“G›=ƒÐ\›@Ì4³­Í¡r!¨Ü樌8•1A!hN›£M ´y[Ñ’ÒæV m®Ð<§Í‹… Ú` ¡yN›K•(Z¬Ú\¤9¥Å)mn… ¸ÍµéÇæ_,ÝéÒX*M‹)Z´çÏÁ¾BД6·BP=[yÆ|ÓÏì™isžÅôO Aiý<· Í‹´¹ŠtK… g¤Š A#m^‚FÚü_ùE1¨çi1h78ñë.ðà|rÁùÉþá±ÿÁ¯±_cŸŸŸŸŸŸŸŸŸêŸêàœ ¨àü¿<<-<ÿG¿Wç:šC±48O=çP¼)U*º÷5oûtuÝW Ïu>E¡%e˰¢PÂóÉ…>СΠ¢ðSº‡>ôŸŸ  ø‡ñ7Ô¹T „` u.€k»¹Îqã;GßJÀJàöÒÃnµrA‚¸†:ÙŠ¢¡Îå;‡€Å»ŒJs™:/(["u…»sžGêüS“¤ÎEž©s…¢¨shãÅ6¨CTÔê\Á+l‡:—O[§ ºÔ¹B²TÇТÎ?h*£«¡¬ އRçS/ µàEºê@œP¼¸²?¿ïÅç14O-EÚ\z–g±š+m¹ÍÛ´ù@Ñ’<ÒÓ(Æ©@›¿Ze ,ùè¹V!4×ÂWßÐæ¥BК6o‚^^,]bó´T'Þ˜(Z¶Vh‰6çľþÞBМ6¡yRšÐæi!hN›s/ND››¢Ú\÷ø€6¿­ZƒBP=Œ6O-ç}… F› A9 “ÒæV mž‚¶ÜæI!(Á9›Š)ç… l@– Ay榴9'ØÔL AsÚœMÑm.e´9ÅÑÁmަ͛BP¹Ích~у®ûÄíçAsE¿Ç ÍûŠAëçÃz;]åÁùä‚óý ´ˆòððððððððð˜ 3ðXÎ?ïÁùhÁùyŸy°œ·ˆÒ´ø¯ cPpþÒí¯ªƒóHw‹B/ÿÏÿ­.ûÉ_«Kü×jîþR]üÐ_ª‹jêœcõç‰ì¥ÎUuN1ôáÉ¢#uŽò‚°ñx‹Çé¸?ô"#ÁyC‹r>>>>>>>>>…àüdÎG Î?vë/ÅÑïZç-ÏyOAè2¯½À‚ó@W °(´¬l!¥(´Q¶ŒXJˆô© v½üÁ *“=Ô¸  ¶WE E0ÕPç ¬ Î·ˆÔ¹HÐHã#ÆKLøE¶¾|ç¤8Œ)¤B@¨ÓW{[ Îå>nQ燨s¹ÉwNù „+¤+š\çÏÔ¹‚=<Ìeê\ÞfÂÁ‘‹B:BíÊÝu‹ô•[šrF#€·Äu®µÅ5r—¨ó+ÖÔ9”ñF—šãºã;o¹Î3ê|šn&°%¸í¸ÎKÔyÈáyJŸXpO¯(tõmœãs®Îá#¯úëÞz!Áy¡M̰BÐçÜæ5iŽÓ}‘壢eà6¹ÔN¡HÏ¢×¼šç´y¦hY¯D›ëÚsý[´y©t^(ÕLÙláÔOisHómi®…§¿—6ÿ\õŒ]µÞ"E‹çÚ¯yí6Oióåt²ƒ{--ÍisNˆÐO@OÁÊI!(´y«Ú\÷?§ORÚÜ Aõ¬ #aÃXJpÞ‚·9Ï+ÕÉ—´”>£ÍõÌÊió]ô\CÑÂsŽn‡=Ôñ@p¾w‡6¥Êç„æ%Ú¼S m® Í”6ç>`‰(‹mþs›ÇмUió»~oZ¯´íWJ›ÏÕæìøê´ŠA÷:î?<8=8ÿ­Þsýÿá ||||||||||fà <‚ó=8-8çuZv³B€Ø ÎG/½ò?ÿÚ„ç±(´Q¶Ô®s£ÎÔù%‘:×qú îÿsÕPç"ñÕšë\áÈYòs4Ÿ#úÕ'D9¥¦Î WNT\C+|!„l¨ó[D{Q¨….È¢P¼âCŠBWqËQTLvñµ{_x§üéç±T¥ YhþÄeòBÐÄmIó–Û<¡ÍQÖ@ß AO•ò&=…2( nBóÕµq1Œ6ï- AUkE±¨{RÚüõ}´9¡y­h¡”v:… ¨‰Z¡yM›ï© ¥=c!¨JA›BÐ/…BPhs…æÚê\Aß2û~¹à:oSçKïöy#o-LŒ¾ó–ë<£Î·“c:E¡@–6Ôù¥=Ôù…òdK÷+göZòg¯y®¹´Í©Ý¡ÎED˜á5Î]ç-ßyê:y- ûÉÙÍQqòÜãª'-'‚ýɳåÇ#¾ìÑR¤¥à\áyOQ(Ä9¡!‹ÌŠ_·÷up¾äaVD:ÍUÊÏnBsýø»ÕŠ–'-w\õä¾BІ6¡ùɃS(/•?A!h™6ÇkžºÍ{ AqØ÷‚r aÓmi®ÕR´$nóHšo“‚Ö´9Š–7ÅBP•‚v-Ðæû|ÉNmЂ¦´¹…æ:Bÿ@ZÊýj… ¸Í3E §KÖÐýmΩžœB¡Áhs=' ÍMÑ¢g… Ú<ô)ð¬1Úyr¶NDDMËà8Ÿá ü„πππππππππÏÀl™ÇBpþœÿÎÃóÑÂó×îzõ´ B»éGMpîE¡R¶xQhÐd˜®E •J ÂN…žee Áù¸…–”-18/…–Âóà:_mÛËL#Dx8•Å×îEp®Ðü K*4/‚æ´yAÑÒ¡Í … r¿7§Pš²`Ñæ*²ÁFDZ½æÚ¼Tza(|m…æu!hm¾ÙUÕ,Êe{ AG§Í Ío´ÂÛAh^*•¦Ú|¯H›-l<𳕂m®Ð|…š÷ÐæVJp.*¦mCs4Nl¬m®ÐÍolÀY!¨6ãÍsÚ<- ´¹-Ò´@š£š*ÑæQÑÝæF›+4Ïió;´ù#æ6O Aq›[!¨ça³(/}©Ú\§Œ´y»tÎ=lÑæ14‡6çD'›^¸ÅeeÓ$‹AÑ]ô…{p>zpþ–ÙòÙÿþaÐgÀgÀgÀgÀgÀgÀgÀgÀgÀg`¡Îb…æ_òà|´à|Ûwþûà|â‚Ð?úý,8ŸE¡:–æ÷‚²…Å”-IQ¨)[¼´”-iQ(Ê78h  [E¡"ÏÓ¢PHJü½û_ÿ ‹ö¹v@C`¢0ØíʇÌ ¥‰â€Š g0î`¸„¡< ® Î)飬`«¡Îå%†m¨s‘¤ø‹ É LQ4¬}ÂÊ(TlPç B«êü[-ê|%\ç5uŽ.‚ ïù uN‰!¡~ægŠž5õD, %$$,¤‘bDyžû©s¸¢k×ùRÛ²à;O]çuxžºÎ B DQq¨’"Èu.e‡Ô]×ùE*—uŽö£EŸ×C‹8%äÔ9ᯔ#Oi¦®ó™) ]MªD<Ï,ÜÁ nþöüïñköüHÎ;´9š˜–¢e@›?Y„|/mN!è çÚ<ë<€Ö¡¹Ö+œ+Œ4EKÇmIsàDÀÚ=´9¤ymÎm^R´ä´9Š–km£fà5Ïis¼æZu!èR;)4ßù¦2mÎÜ7nsBó›u´-%Úœ{Œ{“%EKS m®Ð<§Í‹… z„Ð<§ÍóƒÐœ,V m®g '\RÚÜ Aq›KÑÂó)‚òÜâùU¢Íû ASÚÜ A¥i¡ôऔàÜ Aõ¼m‚jÈàÜ rK´¹ŠŸK… g$´ù9‚JÓB™4¥Ò)mN!(Š–Kšœ/Á)”¦ë`rÅ ‹¾ô”êºïüʃóуó•ýÃxðððððððððð˜-3ðX ÎÏðà|´à|Ÿ¾8­‚Ð7ŸúõVpÞ* ýåß««þ÷êªGþV])ß9®ó>,ßùOä:×qzŽÕs¼bãöøjñÖBâ±®ó3žœNx®àïí)uxNpN¡á9s8s f ½(Ô‹BHQhKÙ"⼨l9¬Zm›ËÌ»o%‰SX|Ý Î-4/ÒæÒ³ y–BógK#ÓWZ—‚/­;ÚœÐ\«) ¦´Î#mŽ&‡%eÎÓÖTh¾V‰6/‚Ö´y«ôrÛH± •†4ï§Í-4ߺTúÉPÊæNo!h‰6Çkhs ͵±T*ÍisJyK´ù ôÖ h6׿׀6—¢…BÐãUЦ%Q´œ A#m®Òá¼”ͺ”6·BPhsmîJ›¿U¤9‡l ²‘ AÙ\,‚ú¹6m~D¤ÍEKN›‡BÐÛœç:]lÒmÁ†)§gËmÞ)ÕïŠTÑ’Òæç|ÿ¦U ºÜ:çxh>zhþ'½×úçÙòÙÿþaÐgÀgÀgÀgÀgÀgÀgÀgÀgÀg౜¿ÅƒóÑ‚ó#ÎûvOp>ZAèfïþ|'8'<ŸjQ(áù¹CŠB Ï'S Õ;?‹BQìvÕCÕ[Œ:ШÍ/ Ô94§Qç¢;Ôù½êœ?HQˆQt Ÿú}óã/ÆcŒÏêU!ZJ£thQç áp&ãN& ÃwuŽ[]A^ Îå;?@®sùÎê\žf|Íòü‹AM1!u~“tŸ ®h(^h^Ê^ê¼OÙ¢0´—:—ïuGN£ø@õ±^N+¨U`[rÈÓè8†:?]Ô¹Èó´PІEVÂuÞ¦ÎY^®óÜwÞr+¨&°Ž®óBQèª"Î!pãâ$Ĩ+~Íçß‘Ñææ9mNhž‚ÆRÐVh.Ú|Å!´¹…æé3 D›¸Zt¢BP|ô:!Àõj+ZDœo0¤´H›KõÓr›÷‚Ê·¿BóíÓÐ\sš*Z:nsHóºtXZ¦Í­T'7òBС´¹ú^®ÐÿôOÿôÿi=qšëñ>[þléþŸi^ÇÉÎÁãüº?ú×}²×`>ÍÉ&ûsýÏÏܬèš>n*÷¾_“½&O˜Ê5™â×øý(ÕõÂ8ϺÞócNþÏTÿí å‹–ÿc9:¬Åbÿ<ÁkpéÍ'Áy¢hHKS¿qV øÂÍ/-ç“) M•-xkÊ–?Txm£²ß-Gøê\„âÉrãe‹\ç([Ì´”-rëâŽFI°ƒëœ ½ÁÏÁ¸ÎEP¾CÎ^Â!t––——„I„JP™)u¾kC?ÐPçÐPž}E¡[ˆE¯@©_C+kQçòGê|¨s…j¨ S ÛÝpS0Šͺ²Qç·êü] ÏêD¤Î üÐL@Îâkî§Î â{Î]ç»Ho±«‚E(Þ6uþ©‚ëüúvQè–…Êwž…®nx‰åÚ‹]¤ÎÔ¢éPçç(DÝøŽ#u.‚º—:äy ÏEgçá9wœO\ºªÊAñìÇÅŽ²Ò¯Ùí¼:8_úˆê‰Ï ¡yÛm^ Í ù;… 5mþ¢è6Wh§ôTsÁÜæ„æ‰ÛEËD´9úÚœëÉi;U°±Nl¢%·y£hiiZÒÐ\³ChNé¬ÊgÛnóšO@›3¿¬Vh^Óæœ¶Ø3‚¶ÝæÏÒ½b´¹îœ6§O€ô °iõbÝ܇œY¹‡6/‚ÒmÀ}ß*…6WhžÒæVŠÛ¼@›‡Ð<ÐæÛ7´y8S*¥»!¥Í­Úî–Ñ‚s6‡›Ó&õï@m ½ýä/{p>zp¾ºpœ¹ŽþÚŽÏk«RÿWkO­ÿœOÔ†¬ªó´^è3°àf@¯÷‚ÎóøkýÁý~ÝÜuöZëzü«Ö= àžgþ]Ë˶…ð΃óñ¸ßÒ{ñQÎóç±ß½Ø÷<Ö<¬¢uÓzóÌÿ×Q~?–‚ós=8Ÿ88ç5zÁúçNËs~ñ}¿BWÕÇ~õꚬ(´­l Ô`«(´V¶Ä¢Pľ¢Ð’²eXQ(a%Ô9šHtãÏŒ¨<0¡ÎÑ´¨óý¸¦Îd^`TP稥vº×ùýæ†ö„úÄ5ŒsA× ¼Œ:—n!Rçh Kño€ë\šÈS\çPç„k„l 6Ôù1:§pШsÑ­‘:‡z5e‹=‚=¨s|ç¸Îê\®fHÚe¤¡èºÎEÞâ{Ωó]kb·C+¤¤ˆQniÓdh¢Ñ`©Äñé[‰†6ê\Kú%6¿ºà:O¨sT už‡ç©ë<£Îר +_%êBz$ê| ßùDÔùñAµ•q) }¥‚sæ-]8¡'ZéŸçQÑr”yÕ‡‚vhs¼æZü»ôï3Ò¼C›³Y¦ÅÆ‚)š¢¢%+åu°4w›Cš×… }´y,ůÙ(ZjÚœ2Ú¼§´å6'4¿1 ÍK… :YQ‚.½W»”{#*ZòBPî§R!hN›[!(Á¹îרhi»Íï°û¼E›×Šž ¦h‰… Ðæzv@›[h^»ÍÓBÐ@›KÑ¢çШ… {ëÙf´¹Bóœ6ç™Ø¦Í©Σ¢¥D›¿7§Í¥h6o‚FÚ\ ®”6O AùÒæh½"m~IF›ó{åµü{;8g~m£,œ2a¶›~ƒTÓÄÆ±î…÷^t»ç£çÿ«÷~¼uŒ>XŒò&ßÿÌä}€ZOëû è[úá õ -¿ÏÀ}6Áy¼ö¿ÕßåÝZS>>î÷ùäïó,´{™^ÿ¯> ÷üßë÷©~ §w 'óúyp¾à^ëQ¯Ëç<ý~\¿{'ؼ|j}r-&s¢k~üY~¼lèßoÔ÷?§tûxp>Zpþêm>:-Ïù)_y¤78÷¢P/ mÂs ÎÍ¢ÐRx>¬(TÊ–´(t”-ÊBKÊ…Ü"Ä_¹íGm“¦´ò@½ïÏí:çö@›w A´9ú˜'?W™N!¨Üæüýq¶¯-up^Õïñßúùkô’ð ËCn¢¿§BóWyp>Zp¾Ù[¯›Às‡@Ÿv Ô÷\wßÐà|P•-k”-([.‰Ê–¤(Ô”-ÊBåÃ%t9E~\B˜VQ¨|ºiQ(aÁΑ7ÿÒ\¼P’¿•ГB u® §/®s£Îåû…Ä„È$d"lBo@øDE…!RçPžòA}u.ç0 ¨ó7B+ð"øÚܨóX ††²”@Ê Îêü$Qç"Rê\ŠÂ7èUÔΡ„€:GõÚPçøÎ:ÿz ÎüA>êßy‡:ÿbð=Gêœq·Ï[™¢ù¡;®sѽ1ÖÔùRÛ‹:ßNÔù¶µJ£C‹<ï¥Î¢JÛ÷Úü×FkÉ‹½XGÙu®µŽœÚë(¸%ÀE"}È¢khAEw¨ó[JpÎŒµs7le~—sÎ … ÏÆm®Ð~¹cÍ»Þ Í_pÂ… I· ý^‚öÑæ¼¦ÒæU‹u AkÚ¼Uš¸Í#m¾y?mn^ó>Ú|‚2½… %Ú¯yRºw¹4§Í9ÁQ¢Í… ·E ´¹îÏ”6çÔk¡iÑi’”6m©4Òæ…BPž'œhi‚B›ëù“ÒæVªÓ1o!8O Ay–µ AÒ‚Ò÷+Z8¡Ãܦ´¹‚ê¹zT¢hi¹Í›BÐ_['ÏjžÛÒóûTÑætWD·yJ›£ë2Ú<+EíÕÐæ*EÑmŽ ìÙ]X‡æIpÎï.S3hó•MKâ7‡8¿ò«?óà|´àüâ‰Þ‡ùÿ>~FýšŒ~Môaé-Z{”?´Å{_×ßc ¿~£_¿É¾Vcœsí?¦åå± (´Ñk½©ÖïÇäžÿþÏžìûŸŸü3ƒóÉ¿f3=gcœó,öûq=‡™-ž}õk>ÕÀ{~~ô J3ÿXRµñÆÁúj×uÜçi˜–:cp~VµÍñ·ŒœWÕÇå:ÿØ/‡…BN¦(RbñC uN8s¢\ºïÿƯ«÷A«˜î¸¯üW…sרsQ‘-ê\áO¤Î †ˆÐ@Z &í©ók3ê|ÔùC5uþ`õf‘¸Î¡= ¯P&lgÔù}F…â"†ÅMlÔ¹‚°H£c@ËR稄jø!S×>᎑‹B¡_¡ÎWÂuu.ßùò5uŽn‚ êœ`Шsùήs‘·{‹:ßKÔ9DîRZuþ…IRç™ï¼å:ϨsHcÜÖÇh;F¦ÎÇ»(t磹ȗæ“Å•ýÙ7˜àzp¾îl|3ïÿæñû€=×DN³m|h'Ô[l&þ½þ=p{´ËAû6V~¤¿›ûÎg˜vÔk|ÀÞóÌÄŠ~ÎìïÎgöõÊüŽipÎýè¥Ý3ÿ,^qLŸÅoÍgù±œÏõà|âàüøKîlçi˜ÖPçµ¾!êZšPí¬êµÿöé ƒó@{Q¨….ˆ¢PQϸ¶×’²…`×”-ÊB×ÅMi éúŠBå WM(ýdT(pByË-nE¡Fž‹¶¨ógA]œ£j–Bq6h&\É×ì|vœë{›¢E+W´t AkÚ¼.]d¥R!è©¡´Q2š‡Í±&4_]e }ns9ëöÓæV*ÍŽév6–zýŽ4mŽRˆ…^¨ ÍkÚœ !tDVªUçVªM$£Íµ±”Óæl>± Åf¼lNå… «ÄBÐ:8Õ±9môK­BÐH›K×”Òæ›Q*¥›ll¶ÅBP‚ó h¹×”PÚG´yZzÁýƒBPФ/•Ú Åª¯H›_õÈߪã>ûãiùÍ×Úá ÎG Îÿ®÷Vî\žáSù°é_3}h{hL?¸íæ×xþ\ãÎàñ Î kÖôë>3×=¾®Ð¤czÏã×~ƯýÜ©\{¿.3w]Æ88?̯ûÌ]÷ZÓrÌTîÇð5ÿñXÎðà|âàüœO? E¦Å²ÀxœÝô ™Â!q¿|Çy#çýE¡3G-ô HC?øçŠÀ×9Çõ9¶OYÜ9*;[d"A ¡ Ô9ä"ã)µëܨs…5Pç'Dê\d¤Î†:% - 5IEI0„Nèsé Ð4Ô¹ô™ûá:uŽÞ ºÎ!8ñã&¤"¬Úù²Œ:W¨5 Îïm¨ó7ÔÔ9Ád)Ôù¦Fßt ¸ÎÑ7¬ŸRçÒ;àG^£vÊAµ®ªî•¸ÎÚ½\Ô+ôëK ¾s¨óEê\¾sth'Œ:—†"¥Î—Ù7P·$v¨s‘çEêü&•1~Æ ­˜‘‚FœÓÛJ®óuÞWzõê\kÉu¾þÅÁ§½¾óÔuÂó®ë|Á…®¢^N1ØÒ\Mzéëv:û¶ !Œ'”¯Có@›÷‚¶hó“M;c š^Ú¼î1¨Có2mi®…GžÍ‰¾BP®I_!è&±´Î·9¤y^šÑææ}´y]Ê>cg­R!è´9³ÏÉ‹¼4¥Íé XQÁ9¡ùJuhÎ}ÆýÆ}gns݇Ü-Ú\÷k^JpÞ-ýž<¡÷ Uúa‚œëÄJJ›o[(åÔ Á9Ý y!¨Ñæu!(Ï2žiF›'Šhs+Õæ '%bhޢ͛BÐ_ A¡ÍuÊÚœç/§¬´6O-9mž‚^¤ß„æ—üXÁyš·ùß*hóy?ÿ{õŽ+îÊüæMË¿ùÞvƒç£çwû‡™ýàà¯ï£ûú.€`SÕ¶¼×gcffcŒ‰sfeG¿î3sÝ“àü‘1½ïçúµŸñkïÁù˜cœŸë÷ãxÞ àùýÐc=8_׃ó‰ƒó«¿ñó,P«Ë‹žó´40©ËnpÁÈÁ¹…zQèÀw®à|+‘Äh8ÐqÌÏ¢ÐVxu^ Ï2A)už†k„Ì×y:oÈó.u¾Ê¶—Û&Ì;DNu½é¬œGÚ¼PÚ¡Íõ÷\Q«¦Í£·Ý‚óüþÆm'J¢¢%¡Í!Í;´9¡¹ÖPÚÒ¼.í£ÍchŽ¢góTÑRÓæÌÈVC Aµ13ùBPmþÔ… 6‚m.ÒœÒܼ”ͦR!hN›[!(Áù1ß¶ßWÊ|Ùè²BPé–ÒBPJ€Ù £x#Ñæ”³yÆ&šÑæR´@›[h.ÅS(´¹:Œ6W!¨hó´4§Í£¢¥¡Íš£h¡ü8u›ˆÛ¼Þä!4·BPm*¦… ¸Í­T(°Ø”Ì A¡ÍOJhs666×FgJ›§… sb!¨6K Î/”לмUšÑæóD›_­à|×3¾YÎ9I‹A{üælï~Ì<8-8¿Â?8Ìì}Ý×w|óà|ü‚šqUµxp¾feŒƒ:Îgøú»ªåÑý}[z¿3Æ÷£çcz?.€÷mùàü© ÎÿááùÄáù3V;c’žsl‰®eÞÏþwá¹\çò_ó‹¿%Èû+E Brôšª—- ÁÉ÷êœãûã?GäyC‹X<]äyC×¾s¨sBÂ<»ïÃu.êœp¥ÀÑ·Èwu.j²EKE@PD`dÔ9¾óÚuNiÞþrCh¢7€:Ç ÁY¦Î¨]ç÷[¨EqthKÙ2ç Äp”5Ô¹4¨sÊ:?yà:§TOòšÇ‹añe+”]lƒ¹l.RçeK›:W¼‹B!Ι![ Ð'µê¯{ ¥£ mn^ó>ÚœBÐÎå5QF›Çм¥bjÓæ¦hYBP­>E‹Ñæ(Z.0ÚߨÿHš÷ÑæR´,¾)nó’¢%§Í ͯ­–” hq¾í vŠÓ !4תis#ÍwÖ–hsýÌî… )m A¿:q!h¤Íšç´y ÍsÚ<‚Êm®{›àÜ AuÒÚœg@‹6×3â uhisž#%ÚœÓ.„æ%Ú<†æi!(Ï´”6·BPhs<ûI!(Á¹‚â6ohóÐCó"mþíÛÜ-¸ÍõÌ>#/Õs“EçÝ÷G Íyîóü/‚6´¹~ð{„ß'›ñÿêà\›?l½¢&Î-8?ÍÊo­ôše:&<ÿƒ±CÎú†ç£ç‡z°;~4ýšÌ¿k2Å`§ëëÞ;‰uû~Žç3ô¡}Äùd®9v*d³ç3tݧIœt÷;×þËS¸ç=8ŸùkïÄù ¿Æ“}2Åç$×q2Ïã©ÜœÏð¬Lq#‹k9™kϳ{²Ãc;8ç&Uh~çç/yÝ™®%) LõÆÜÎϹãדν(Ô‹B~⪧¢P6‚,hËB¶°5Ô¹BhÂhBéÔuÞò§Ôù{«—‹8…‹¨&»øÚÎ ÍÍm^ Íùù¬V!hF›Ç °E›×ýüÛûhóW׎øV!è€6·Ð|=…æBК6o‚&nóFÑÒO›[h¾uíÆo)Zœ£²à\j 7I$MP[Ñ’»Íchž‚&´yZšÒææl2•hóN!(´¹-)mÎÆ\lt­­ ¯”6/‚FÚ¼Phó{k·ù}VZp¾ÄdÞ úŸù ×_ãùûOá•ç3üaz¦g܃óù{Íôõšßߊ„«ç ù}_‡´œÙuœâýèÁù˜]Ç©<§=8/¢BóC=8Ÿ88ßú€O ‚óX©¼š8„l© 9çï¸üû“ ν(Ô‹BÛ®óùTÚ«lM‘eÇu®`˜€XZæx¸eNäuþÁ >!”ÆŽeù÷émÄwÇu~¬ç¨0Øt™Êâk·#8§Ôhs-ZYhÞ¦ÍQ´hMXZ÷4ê%-Z-EËœPª×¯·´C›K¥ÃÆF‹6GÑ’‚Î … Ú,±M ͳBP6Xú A{ismä¼åó¶(³(ZÚœò[JpµRÚ|9)‹ØDJ A¡Í­TÁ9E»lBuhóR!(´¹6¶ ÍÙ芴9e¿EÚ<)e …Sp›· A9µBh¾½Bó"m®Ðœ ¢W£ÍÿQ±ûôµæ„༣i©‰ó^M åØ'W×~ûWœOœ?8•7Âþ5³;”ZØ®¿ç³o^=8Ÿ}×<}.M1¨óàüQÌxæ×ï•)uúñ³ûž™ÉÿïGÎ39ÅûщóùqC*4ߨƒó‰ƒó½»¹œ¿$ѵ´èÔŒPUP±Ëi_Ÿtp>JQè¥5uŽã6ºÎ¡¡ÎÏM¨sÊåÎüÞïu~gF‹xŒÔ9$$á!N^¨sT¸ÎQ@SBUBW6Ô¹¨Ë”:‡ÊŒÔ9štûà:¯©sÈNªÝ"u~yF‹ E­¨óûL¹uŽ‚â¿-’mnÔùu® ê|ãHË…©óõNºÓÖ”:‡p…t]í˜à;Ç·¼Ê„Ôù×:ÇåL`HpH9"Ô9â€:¿¥¢Lqé=kê|©/ yw å3v-QçRhnÖÔ9´ð’ÛÉQ½­ˆó"uþØ+ ]™àô4Öv§×ÁùrǶCó>Ú¼Í)=´RÐV!è©æ|Ðæ‚†M°&4Ÿˆ6§€µH›×… œëTNúM´ä6o…榥PÚK›CšO@›sêÅ,6¡yM›SÊìZ!¨Vœ[!¨¼þF›kö‹´¹Bóœ6çG‰6… 9m®"ºW¹g#mÎ £Íuo§´¹‚êþ§”çA,å9Áó"Òæœ^ ´y8ÑÂé–¼t÷ymÚœg'e†‚vhsĉ´y,å´]­BPhsî91)%8·BPÜæz6Úü÷F›ÇÐÚœgz‹6Ÿ ”SJœVÂmNgÆ¥þ±à7`-¿yªiIüæÏZëlÍ'Íy®ïÍü{øîqžÎgß|zp>û®¹ç³ûš'š'ÎÇ,põà|öÞ›œ?Š7£>ä-áÁùÄÁùaçÜjÁy+dKƒ¶Æsž©j'ò¿¼çó“΃²Å‹B½(×ù4ŠB[Ê–)…R|9™¢Ð$l3¢»¡ÎOì¡Î«VÞö *Yl¶´— g¯OW÷ÏðuÛžþm‘æ‘6—ž¥£hy¿9×{ A[aeEËSW-ÑææZk ¡Í)¥ -E‹‚sBsJ]­4§Í ÍóBÐŒ6gs¥6¯ A—Ú‰BP­R!è´9%¸Ë*4O AsÚ¥‘Ñæ"ÍW’ê(ÐæAôòÃ¥hÑÆÔ¨… çÝBÐïY!(›d­BP©›P8¡rŠ… ç¥BPtPç¥BP6óØØ‹´9åÆÌ\Z mn… RS¡¨BUÕ¡Í›BÐÛÜhs)ZØŒŠ6*ÑdióDÑBp>‡BPm‚œ§… (ºPuQº …WS m®ÐÚE ´ùißøÅèš–‚ß|•-æzp>Zp~ä8žþw›½¶æçµ÷à|öÍ‘ç³ïš{p>»¯¹çã{ý=8ßk3?ßk•¾—çbpÎQpþ‡çÃÃó^ýƒ ŸhiN jI‘`K×Ò” žY­±çuS λE¡Áç(>! Ô9Gõ)ˆÃy‹ûÖ¨óûuNðBƒ+7Rç§ßù»êTùÎ!OÁu.êm®ó†:WØCèÓPç*ºƒ¦¤øÎ¨sQ–‘:Çõ …I°„ê½1”Qç*ÛkQç"=ñ ãÞåò®s|Ä((ö›lQ(.ä D£y€\%ˆCÿ°ö wTkÕ®ó~êü[ö¡˜ÀuŽrõÄ —g¤Îå;? P縞:W°ØPçPº¢u—ÞKä.oC¡‡:ÿL(nìPç"Ï·y> u¾¹Ê#ÿE JùõWZ Ál¡¬çZ"œñj·]çý4èèu>R=mm”- €;Ê–¨k‘²¥åHž?E¡/SpÎŒ¤‹ðr¢•þùmN ÁyKÑÒ¡Í¥Ž!ÈO-ÚœÐ\ ÷3å‰}… l(P ÚS:”6o)Z ´9×’µy6ßêÚêé[ )•+ò… :Á¬2³F›k†SÚ\3Î ‹´ôù÷©”à<¥Íéx%šu Úü¶ÌmÞ.åÄ÷0½œ$áD }¯;ã®Êhs86Š–»í4ÊÖçGÚ¾×f¦ß§ypþèç×zp><8¿øÿý¤œ=çi™`[ײü—N)8÷¢P/ µà|ÒE¡WÁl$3* ‹BžSd¹¶Âs\瞟«PXÁ0áp‡:¯=ÉËiðf¤jºi³©¡ÎX‹øîºÎ7âœÐÒ‚Ki2&³â×ýë©ß¡ùsK´9¤ùÚ»¯¹çã{ý=8ßk3ÓïÓ<8ôƒó£<8œ_ÛU‹¾$wm]KBœ§¡„ѪX]üÕçXxA>•eʹÇWK(B8rÅOÿ¨sÂQ ×P碡 Z  ^päžSSç¸s h ÎOƒ:—[—rº†: y®s¨óÚwEy4Ô¹|ç„D„EPç„G‡ª  Ó¨óC^C+€"ˆ‚&äD‡@ zˆÏÝ`AïZSç„\P¢ u.O1a †­Ï¿·vßc´)Ô)®c(ThT¨T‚¶†:WGÉ`C«|ê|Íão7âÏrtCÄ®¢µÄÊFßjʉu®0¸Îkê\¾s¨sÜÏPçh-¾ó”:ÍK@)-F×u~S…Jc©Dvî¨ÐsQÃ"‡ C»Ôùc¯(✹H®éa+ÿóMpž*Z(#U)é@Ñ’Ñæ„ƒ-·yT´Ô… }´9› ChóÅÖ»PÁùEÕbBPùÍ;… ™ÛÜHóœ6Ï A¥îçih>m.¯yËmCó¬´¦ÍÓBД6¡y™6ï‚B›«K ¥Í× T÷ … k'… çÅBÐH›Ÿhó´4Ðæ÷Öns‚FÚ\§VRÚ|háC!(Ïœ”6o‚þÄNÊÐÓ@p^*åy—ÒæœÂ1·¹ž)mn… z† Am'{xÖ– A9”ÒæQÑr¾žåÜÿ'{®whó¤4Ðæ±ôï¦h‰¿wv8é+I¹¯~/q¢"nzÑÑC󂦅ÓVûx‹çç?›é7ÌþýgqºöœÏ¾9ôà|ö]sÎg÷5÷à||¯¿çã{mfú½šç~p¾¹ç{Ο»Î‡ëàüäA™` Ý]Ë T0 ßάæÞÿ‡)…æmêüæ­§àœe nÛ¨lBô¢P/ 5ryRÊt-“Q¶ˆ8GÙB°\Sç¡`0 à:®sùÎW(PçÒ©œ£Ê˜ÎÚúC"Î Í;nóš6Š–\¹Ôܻ鉑zÓ+-]M¤ùD… F›škµBóœ6Ï A‹´ù5ÕÓß µåÇ´Σ¢%¥Í Ío˜¸´ã6‡4¯ A' Í­T›CÅBÐ>Úüp¹Íå5g#Ê- ÎÙ BÓ†ÕÇßfX”öRºîIw4… ÐæV mž(ZÚ¼PJpÞ- ÁyJ›³A‡*/%8·BPm9›F›k3°S m®ÍC “[´yRÊÆ#ÑmCóè6·BPm^†BÐßY!(J-69ÙìdÓ³Uªà¼D›ó{ 6µ¿ó3íà|M ¥¹¶Y¬{æ¨|ǃó‰ƒóOÏôfÿþ³÷ÃÒ8]{Îgßzp>û®¹ç³ûš{p>¾×߃óñ½63ý^̓óG?8_ƃó‰ƒóUßxÉ´t-úÚϧœÇð_mJ–@Ç𜢸¹¸ÎkêJ‘àGîùÎÏÑÑ‚‚ô)uN C¸ƒ‡ß9¤$ÄdC+:ú–_UG¨s|çPç8€#u~`í:‡Þ$"˜" 2ê\Ai‹: : Îƒï|ǹ÷›§x;¨s|ç5uŽšB@¨sèS(ÔÍD£6Ô¹·äF&€#ˆCÿÍŠë|¨svkâ;7êü6 ô bê\¡ßÊ ÿê\¾sŠ)@Äé m u‹¶‚¢Dh\ÐÏš,u¾ëg«gì¢E°)¥ÆhÔùc¯(”à|/BÈ'J«ôg·:å[мM›+¸OÝæF›·; pÄ夡9›ÅBÐ9¡T.xSÛ˜¢E+U´thóK ´y©t^(Ý‚à<†æY!h£iÉhsN+pjg¾N0” A9ñÀɇ¢%£Í÷ §&b!(sÏ?/å>°BPiZ8• A£Û¼\ʽf´¹î=îAîEîI+í£Í“BМ6O AéBà9A7§U:´¹Bshó hyÈž=ÌV›6Ï©¨h)Ñæ¥BPNᤴ¹‚B›+4Ðæ¡G¢Xªçp Í£Û¼6çùÎé"NqÚ(ºÍé¾Ðæ¡4=åôʯ]Ìvk³K^ÐæEMK Î?PqݽœOœ?Óo˜ýûÏÞKãtí=8Ÿ}sèÁùì»æœÏîkîÁùø^ÎÇ÷ÚÌô{5Îåà¼.}ÄÃóááù¦{|¼ Χ¢k9üúN;8' AÙ¨s)[¼(´Ú¢V¶l&e T*áù&¦l ÔêB]jÊéZŠÊÈPÈÐȬ­ \MóÑ[*ÒyHQ(¤t»(T¡ð°¢ÐU!Ïc— &ʇH­.²bFK£òdéT^ºí•dNg½‘àœ2ÐN!¨ˆó¤´uï&´ùà¤HO!h‘6'4תCó¡… *gµ×ç<¥­r›SâÚxÍ[nóšëº¾qmŽ×IM NýÒO=8Ÿ88ßz¦ß0û÷Ÿ½–ÆéÚ{p>ûæÐƒóÙwÍ=8ŸÝ×܃óñ½þœïµ™é÷jœGpþïœÎwz×M ±JÈ1vó#¨kÙçüÛ¦œ—ŠBKÊ ãP¶´¨s9r¡Î¡¡Î hu.ßyMäàÝ%Ø9Ù¨óß©ó÷&Ô9^_Täáü…Æ<ô³:?èÆŸYðµ ÁÙPç ¨Rêz˜’>HPJû(ïÃGLèuNu¾}¤Î/®sB3üÆnñá»kê<„ç¸Î7uNx¾!á¹Qçß Ô¹´®h"Œ:—6"Rçè$ð1¿×yM¿L¾sBAÂA£ÎRˆØPç*JlQçR[,³ï— ®s”h1r×9f‘:WºƒâÜuþ, }©ˆs(à°Â<¤+ê¥ÿ-üwUoü`œ7^óÔmmN?Arßš·K}… gKÑ’‚Š6§@µ6_ÿâj1V_!(¥­Všçæ6‡4Ï A3Ú<–ÅnÛC›ãÊ—3¿D›/½[N›šß\=sï44Ðæ¦h)ÐæV m®ûa¥:4çt÷ «èÞµÔhóN!è÷lókÓ„6ßÜÜæ¡”Ó&)m^*åÙÁ3d—Ëœg… F›ëÄKªhÙÿúv!(Ï-+Õs,/¥Û¡]:p›m®ÐÚ<*Zx–òL-Òæ‰¢…çò Aõœæy‚ò<… i‚Òua´¹Bs6TÙXÍióé¿_”M®m~ºÔJ9m>(öM5-‹¯ü!Í'Íyž7Óo˜ýûÏÞKãtí=8Ÿ}sèÁùì»æœÏîkîÁùø^ÎÇ÷ÚÌô{5ÎÇ#8ŸçÃóûà—Cpžp1…n ÿ6/A/z‘‘¨ósªEq~¯v¶T&£RçÒ>pïpA€¯ |yç¢Î_"✓ÖRû®¹ç³ûš{p>¾×߃óñ½63ý~̓óñΟïÁùðàüßüaÂ)ˆ“òa"] ÇàÓ²ÁUv˜7_‚s/ E¡e ‘[×E¡Pɸ°·”û ¸Î¯1íG×u~…üÚ nñlo,ß6$ô†—T‹m ÕK+FI’ºÎ!¯!°Q˜t¨sÐ ¢ „¹Î ˆà;O©ó8ÇAÝYR÷PèX\ÙŸßâ·fÁy6OÕJ mž‚öÑæFš³ÒBÐÛJ±õDëw A/¹4hZz Au—ì+µà|H!hËmCó¬´v›³ÙChžÓæ!4/Óæ¥BPtG)mn… ÐæÚ¨Z;)%8-nómBó@›Shó gBÕÜæ*´y©·¹æ‡˜”6o‚fns…æ(¦LÑÒC›ió[Ú´¹‚â6W©2åÊ-Ú\’Ðæ”1Ÿ~§BsçlZ¦´y_!èűT®´4ÐæAÑmž+Zø]Á:tÞÝSÖ´p¯n¾ïuœOœŸ<Óo–ýûÏÞJãví=8Ÿ}³èÁùì»æœÏîkîÁùø^ÎÇ÷ÚÌôû5ÎÇ 8¯ BÿÛÃóþðüª¯=2Ð>LA×òì >2ß‚sÂVQ¨Žé·ŠBþku©B–KäÄ%tÁKÁœQ碡qéâÔ=û®PLGC ƒF€€ç”š:G3@¹]C+‚¬l¨s…GGŠ<'L¢0ÿ/¾s\ç‡@+|¢`Šêªº§°QçÒ%d5Ô¹ô]„¨»(øB·AŠ‚aG¨sé¶“ïÚ|.´¹ A/UhžÒæVÚÐæÝBÐ48ßò¨/„{¼/Ù8â÷Tìç¨ïÍ´4ž 9è´¯yp>qpþ¢™~³ìßö~P·kïÁùì›EÎgß5÷à|v_sÎÇ÷ú{p>¾×f¦ß¯yp>>Áù=8œ¿h£ó¦®kQpqîw3ß‚ó‰ŠB! [RꜢ9¨s¨F|çPŽÐŽ u. ê*Ò¨sQ’¸Î¡ÎÑPvQ Y uŽ×¿ïÑ ‘ 0!1ñÿ6Ô¹B'Šõê\ „HCyî¯Ðj¿„:'ØÂuNЩs(ä@?СÎñÇ¢PB5T„l ºQ,HÁ EƒÐ¬P­h!ìp+7Ô¹=‚=t²¯:6в„€´«¨ìóÊFßj¡áJ"Ïê\¡b‹:­‹#z—@r™}C8Ù¥ÎbâœV°ÙuËS½³¨s¢K½‰ð\J£Î?e~k Ï[®ó…·(ôŠιÆÓY›xk—67¥R©ôT£nnóB!èê%Ú¯ù@Ñ2a!èFÒá Åa“Bnó%^'·y$Í;´9¤¹Ê^Ú¯y^ªÙÈCs|ù-EKM›sÒϾ|ûœ~°yÔ\.ƒ¢Es-Ë•hs…æ¸ý ÍK… Ü#‘6… 9m~‡ÑæÜsM!(´¹îÉTšÒæVªS#ÜǸÍc!(÷xP´ÈmnŠ–û¬tǹ÷W;] mfˆg†Ñæ”ÇêYÂ3%ºÍéUØ÷Úá… Ú\§h"m AsÚÜ-ÐæzFæ´9½F›«G"*ZÎchž‚m®SB-EK6·BPhsm R]¢ÍùïÖÝçÍfVkC+ç‰J©œŸpÙw=8œÿNïþ¿™~³ìßö~P·kïÁùì›EÎgß5÷à|v_sÎÇ÷ú{p>¾×f¦ß¯yp>>ÁùNœÎ×ÙþòẈu^;”œŸð…ŸÌçàÜ‹Bê¢Ð–²e*E¡yx]ç=E¡„µ“* ½ÈT$”_> 5ICŸg¾ï.u~¶Èí„:7Â-DB·¶¨sÛ*ï|ñ¶W™b#¬°I2¹uµÙ‰ß¬ƒó!… ñÞZ*âw{KÑ"ÚÚ×»‚jå… ë_<ñ-E‹‚sBs+M‚ó™gz£ÍñÒsJÀ-Z¥BP6JšBPm $… Kíôm²ô‚¶hsBó›³Ð|@›ÇBÐçœ7… _ … Ðæ ÍÙ0 ´ù­¦/BcD‰î¨… F› A7ÑæÖ¦ mNÑ¯Ñæ*Ý2)%8/‚œšsb!/%8ï‚J•‚B›[!(nóDÑ’ÓæAÑ2p›m®ÐÚÜ-æ6B›'Š‚s”YF›g… çAÑò—FÑB!è?ý›i¹P´à6Š–¼4 Ñ_¼ÕG3Ú\÷dN›§÷es"$tœwボο4Óo”ýûÏÞIãxí=8Ÿ}óèÁùì»æœÏîkîÁùø^ÎÇ÷ÚÌô{6ÎÇ'8_ɃóáÁù–û"ç ûì{N´> ѵtÅ]ó58Ï‹B!¯zäo¥q„,Pçxq _8òOu~Áý)uþGSDê÷îéR @CIBP¾ó@Ëwu®ò;ˆ:ÿ2Ôù¯ŠÔ9ª¨sŠö¥P!X»Î¡ÎQ%@C¢Q àŠÔ9št )uN@a i q yºÂ4¼ÇF+dƒ:§PШs Fê|¨sÑ­8•uþ]£_ÑG ‘ÀÁŒV½š £Îɨsùœ[Ô¹ÂDBET(Bžã:'||ÎÛE‹<‡æu¾«ˆa¨a´êü±Wº’‚s®ëtÖë߯à|…B!¨Ô0¦ˆi…æ¢Í õÑWô‚vÜæ“¤Í)_í£Í Í›à<†æ5mNÑ«¹ÍKŠ–œ6/)ZrÚœBP-6ibh¾wíÜ´y¡g?³Ì\ãòŠ–mþŠH›ë^ ´ùmvrà AÍm>P´4´y¡”ûÔhsÝ·ÐæAÑrw]iópÏoÑí*ZrÚ<-å¹BŸ½ û_Ÿ‚êyÄs‰.†¾BPÜæ‘6ç” œ¸á A¡Í[… znrr‡Þˆ”6O AsÚœçs‰6¡ùÿÚ³-—ÑæÒtÚ<”€ö­g¬5gÊšî©Ýú ·çgÎôeÿþ³÷CÒ8^{Îgßû®¹ç³ûš{p>¾×߃óñ½63ýžÍƒóñ Îÿ?ç¿÷ð¼?<ßã˜/Ôá\œçŃ1 kBº´€ðôê-§c¾ç^º…•- 6)oìQ¶@7E¡²Eº–I)[ê°¶H‹ŠF+¢2Kˆi#§!¨ñv³T~Ù¦Î"Ë÷]¢Îñƒ?uUQç8Ãq‡§^åF ‘ºÎO®Î @§³,8o6µP´$nóâ)¾BМ6‡4¯ A6§ô‚n!hm.EK ÍUÚ)ÍisBók³BÐOX!è€6ׯIB›³±ÒK›3S¨€&(Åmis6}žßÐæ ͥ͡h6¡9Gh‹Ð¡h•6¡ùÀmn… §Š4mNhN!èf(Z ÍšC›SüÝælšçnó´4ÐæR´˜Û| hI AQDu A¡Íµ¹—ÒæV*M ú©V!¨‚óšisé­ØlL AÙŒ<#/…6—2+§Í/~°[JpNhÎÆh^:,8¿ü'I4-£–‚†“ ÜOˬvº‡æûÍw›é7Êþýgq¼öœÏ¾yôà|ö]sÎg÷5÷à||¯¿çã{mfú=›çcœs¡šÙƒóþàü]g}£Mµ¦Áy$[ût-*eÛâ=ŸŸ‘à¼UªãûÊB eê\¾s\稠ÎQ@Cžù½ß›‹7§ÎO.Pç”â"A`Fê2B“Љð êüÐÏfÔ¹Ô”ò5Ô¹(P¨sÄС8‰ ¾Àvƒ:W Fé ÈdBÖ@ÿ0PçòGꜰРÕ!a¡ÔùÆPçøÎSêü¤Œ:?~@¯vÌwªWÊwYk®sQçh*PV&*.26Ô¹ÂÇu®p—t×u.}Áfê:ŸeE¡/Rp¾ƒ )yœêÚô„:8¯O‚ AsÚ¼V'ê÷Ñæu!(ƒBÐÛœ„ÅÖ«7ZŠ–KF. š–EK‘6—žÇ=¡9e±}… -·y ͳBÐÚm¾,nómiΗhóR!(÷'3"mn… Ðæ:Á±vRJpþZò g Uªû2„æ6ç´H,å^æ¾ns…æÐæºï™—N!(ns=+p›§´y»t@›Ó·P*=4/´y¢há™g… ¸Íu'(Z~m'sè… 4‡6çJoDt›§´y_!hËmþð_íôЀ6ŠhsÊ¡'¢ÍÏüÖ¯&¦Í‡hZ^öº <8Ÿ88ùL¿Qöï?{?$ãµ÷à|öÍ£ç³ïš{p>»¯¹çã{ý=8ßk3ÓïÙ<8¯àü,Îûƒó\ùýAp>‘®%QC<¥v*¯µçµ3œ{Q¨ô cTJèˆêz—¢ES¶L§(´¨l™ŸE¡¢¢ÑŠÔÔùâŠ:ß@ÔyJž·¨s‘×ø¾;Ô¹ 5W±Ý¡ÎRkãˆû q+7aÝ«m;ÏÂиØuůÙô} Î Ím3«\ïâET¼èxþ¾ö÷.‚Ö´9^s£Í ͵ ñ›Ðû®¹ç³ûš{p>¾×߃óñ½63ýžÍƒóñ Îw÷à¼?8¿ðs?Rp~âÄÔ9¡yAײâ—Ì`pÞ_ ±ˆëüR…1„2„3„4¸Î mP´¨s…; u~gpô~¨vCSBUBXQŠG€DIÔ9þߣDf6Թ§ÃDž7Ô¹Š÷©(âƒö„ú„<'ÐÂ=Œƒq¤Îñ„ˆu®ò?\Æ u.ò”ð5…n}þ=¦xÀŒò_rC«€"†:ý K°Gq!ANf‚?@‚@A‚ÁU¡Îú¶•!®¬RÄ”:_©EÝüÐ(/ Î—SpŽ ºÊw@ß"ïôåŸu>‹‹B!ÎM¿Ñ»ÂÉ‚¾ÿ¯Ýä}: Ò¡ÍÓûP^sDÔ1Ðæ¨dPʬJhž‚ÎѦ@J› A[Á¹HsinßH«q›÷‚Î … }´9¡y+8^ó¤´6礂ÊŸ¢%£ÍQi-«Ð<8¿u¦ß$û÷Ÿ½ÆõÚ{p>ûfÒƒóÙwÍ=8ŸÝ×܃óñ½þœïµ™é÷mœWp¾ŠçýÁùußùUõ c ¡QçÁ§Ü¢\{JBŸþê³g,8÷¢ÐG·(´Q¶L¹(´ lA»Ñ[*]ÇýE¡Kn}ù²ŸþFÑÌPÍoÐRX‹"ÄŠ)[®ó+ªÅ7©©s‚_`£Î3ßù0ê|9Õ¢(N(Õ\}Tê<„wçèvÒÅFÈD+ýó¯à<¿“Í«§¾<ç=Š–"m>ÉBPˆý¾BP^ï¾BÐ^ÚœÐÚ¼.esæ™{kÕŠ”AF›k3‡Óš›Û¼.}g(E?ĆP©·y¤Íƒ¢%§Í¥>ªCó¦Ú\¤9½)mn… ¸ÍµÁÅFW,ÅmBóà6gã„“”³q†¶)/ÍisÔO( öRhó “"8g£¯D›w A¡Íµ˜Òæ§PªMFŠ•ÓBP‚óšç… F›«¸¹¥hQpN¹sJ›[!¨4-¡ô#ý.yÓ¾œçê܈´y ÎQŒi…Ð<çõï8mïó¾›=8œŸ7Óo’ýûÏÞHãzí=8Ÿ}3éÁùì»æœÏîkîÁùø^ÎÇ÷ÚÌôû6ÎÇ+8œ‚sŽû‡åž×à9¯>3PçM¡Âs ì’2Â!%¡—>øÇ‘‰Žà÷ýïxo?öËXÀB‰¤"á‹Qç"¡Î/‰Ô¹ÂB¨s”¨æD×¹¨sÂ48zqõâì%j¨sé ZÔ¹(ÌH u.Ró\ç5uÉI8uH¤ÎoüiõŽ”:¿êüá†:‡Åu= EŠ»Ã.r˜¡i€<…@5ê\ÁÚ€:¿·CÎáR¦ˆEÅ„(# `¡a¡b¡c¡dG¡Î_^SçxŸ  !t —Wø¨óZÙ’Rç -:÷¢P ÎWTpÎu›ÎÚ踜7nóÖ©44ÐæAÑ’ÓææZ‚¢£±BP­¼´å6‡6'4×ÚMKmiž‚jc£Tjš–m®Ðœ²ØÞBÐm®Í˜½nÎBó2m>(ýZ(…6×<hóº´‡6ŠhsS´¤´y¡”S›&´¹‚B›ë”È–I!(Á9¦¼”àœg'PB!h¤ÍÃó‚+­BP=WÞ¦çKJ›sêå Û… 9m~TN›ëW,Õ)œN!(nóDÑBpÎóÕhsò Š–?YçÁyP´ü¥Q´·¹ A¡Íõ,Çmγ}·yüý°éA7*8ŸD)¨çup¾ü‰Õç~Ëß ?´ÏL¿Iöï?{? ëµ÷à|öͤç³ïš{p>»¯¹çã{ý=8ßk3ÓïÛ<8£à¼.ý–çý¯Øü¢Ñt-=%¡§}ýç3œ{Qè‚+ Ê–aE¡!<^¢lòE‘1JQèÒ»õÆ3 Ï¡Š;®óŒ:—{Ém寯îcdêüÊjñMEoªÀ—à·¡Î/í¡Î/ ¾oåµ.2+l¦L³LK‰Bç*™ë¼¦_ Î Hóµ ´qÏÊÿì†Ç}=„汤7é0ÚE ?X!¨•‚– AƒÛ|ÔBÐË«%^wEµDê5ï£Í9°•¼æÅBМ6'4ÏhsN$t AU ZÓæFšï}K›6/‚²ÁÓWJ nP´Ü-‘6O A έ”à<+]¿§” ,£ÍšC›EËݶá…n)*Zm¼÷©¢%§ÍÓBP‚s”O¨ŸP@¥nó¥‡zGí6?8Òæ‰¢%§ÍÑOuhs‚B›· A¡Íµ¹ˆÚª¯4¥ÍÓÐ<§ÍÛ… «Œ6W!h Í«‘‡¬¶óÕ¡[`åm>¤ÔNU)8?ícw{p><8ÕL¿Iöï?{? ëµ÷à|öͤç³ïš{p>»¯¹çã{ý=8ßk3ÓïÛ<8¿àü|ÎûƒóvgB[שó$¸ëPçú;ò†ŽzL•:ç‹:êüoFsü.Ô9>]HGˆÇHŸu®â: ì(²3ê\Ôd‹:—Š RçGH”ä½×¹ˆÌcå;'l¢Lbóˆ›U²—Rç ©P#Z½ê\!VtSÜ·¿<Äû)ðB±5Š«8§Îwm¨óêœ` 2µ¯(t …s„t„u u®‚Âu.:¶¡Îâj&$DG–×9š t”$®¬Pñ¥‡ÝZ0Bè6Ô¹È]/ =;¸ÄqŠãÏÃsÜç@Ngmxlœ5I14Ïis AµÐË´BóºÔhs A/è‚Rœ*•Mp›'´¹6,4Ý•íà\Šœ.mNh~­mp ¼æÚô`¤¡Í¥ãÙQëM‰¢eg)Z:… r›ïžºÍG£Íƒ¢å«¶ÁóB-}… šñ‰ A[´yS:p›[!¨Ny¤… tm®ÐÚœÐE‹‚B›£ìÉÜæi!h ÍUjnóÙ •mž‚ê”‹Ñæzþ¬Ó/¢…BPiZxVñÌ ´yèmà™Æ³­H›«÷¡C›— A¡Íõ|Mis+}°[ʳúJ‘æ¥BÐÉçÏßäÂA)ï$JAíT•~Ï]zóÜ÷çÿ«÷JOœé7Éþýgï¤q½öœÏ¾™ôà|ö]sÎg÷5÷à||¯¿çã{mfú}›çãœïëÁyp¾ýAŸ®ƒóI–„Z(8ßÿ‚Û@pîE¡ãR:P¶ŒX*µF»(ô C¨sÈ;¨s|Ø®K¢ù(RçÒ‚ä®óŽï<¥Î+îºÎ/R˜,ê\r›:?¯‡:WxþÊš:·ð\A¶é#»‚‚sÂÒÒ‚<ÎWéÏmð^ç±ì°E›'… Ãhsí=´ùbr»N›šg´ùærÊ[p~Mxý·ÔuÀ=Có"m®2ÐêBP®q_!h‡6WhJ›ã5¯ÝæÓrÚ!w›‡Ðük… h†¬´v›£!Ê A_©#ÊrƒÛ¼.…6×&SJ›[!hmŽ2i³³mΆV, ´y8}À=Œç Ó¥BPmžQŠÂ)¥ÍÛ… Ú¼¯ôмTz)Ê)9Nióã)Õæ`ZJQ2›ˆ§h3Ú¥U‹6׿ãH… ÚÈD£•‚œO¥4n¸¢tyšî7#Îs·ù¥ „æO[éÕ'nwmÛ÷CwÎôdÿþ³÷ÃÑ8_{Îgß\zp>û®¹ç³ûš{p>¾×߃óñ½63ýÞ̓óñ Î×ðà¼?,ØÿÄ[BpÞ¡ÎG+ Ýá„[f<8o…êx?Çü! bðC_u.Ÿ.^ÝH£8_ÞÝ@ÿ±:§öCŸ u.Š’`ˆâ;‚"(Ë“tëoª¡Î¥/hQç_îRçx„)á‹Ô9ža¨s 8ˆ¡ÎQ+´¨s©uþ#£K Ì Îw1×ùVHi Ô9%‚ª«„p­x“ çð(u®Ð.Rç›@«°pÃS¾\ç û(4ÄuŽ«g34íFߨsi*ZÔ¹4‘:÷¢ÐÉ…œ˜Ng½6çI!(áS_ž*ZD½‹~nshs‘æ}´9£Í ͵^#MKã5Ÿkå©Ú¯¹V¤ÍQ´¤š–&4WpNQ«çQÑ’Òææ7L\Ú¡Í!͵ö¢e‚ó2mn…  Ο#]Ðr¥BÐ>Ú\³]¢Í»… r›ëžY·¡Í¿[m@!¨î+£ÍuŸ¥´y_!¨Ñæ…BP4-)mNßÑæê?àÙP¢ÍSE ÁyT´„BÐŒ6i~x Í#m®gXJ›s²†^‡´4§Íé…àyÉs“S;ÚU ʘUK… sB!¨þî½… ­à»¯¹çã{ý=8ßk3ÓïÝ<8³à¼.ý®çåàüÌëï­žüÂ$8§DðüE  D´J ³’ÐWìpÕ ÎE¡ÿ°f^‘:ÿ«xvqCCDBŸ›Pçgu.ß9Ôùu.UA‹:WÀDЩI©¾`ô”ïVSçø…ñ 7Ô¹üá u®b? þöÁu.ꪔŒÀl7¨sh»\> Î¡RÑ:P&hÔ¹ÈUÂs¨sÂs<Ê„ux•ñ+£Œ€‚%Ô#ÜÛP!”lC‹žmQç Ï#uN€ˆ¶‚²D/ zQèòÛ\máiké:q­zWöç×?ZÁy²Ae… -ڜм¦Íñšisÿ”B›£¡)Òæ„æZE·y6ßìªj V_!h/mNh^š¸ÍchNQlKÑRÓæµ¢eé½(Õª-Ñm®Ðü9147·ù×lCŠ–EKZšÓæAÑòÛDb3É AOÐ}"Úœ~NkX!(´¹î'NsXh®û¬)Åm® ,6²º… ÁmÎÉNp’$†æy!hN›óœày±ßBÐ@›?2p›ëL^ŠÛ¼S m®“5)m~ … :}Ã)ž‹6Ý14O AÚ\Ýy!(Á9'‚¢ÛÜ A¡Í­ô“þ½ñîkî.—‚Ö%ºš[pNhƒóú4•6‡_¿çÇ<8œ¯7ÓoýûÏÞGã|í=8Ÿ}séÁùì»æœÏîkîÁùø^ÎÇ÷ÚÌô{7ÎÇ38¿Äƒórp~ù—Zç1<¯ƒs‚ˆ:Œ°ðûæÒƒóÙwÍ=8ŸÝ×܃óñ½þœïµ™é÷nœgpþÎû=ç‹¿ää)Sç°S 20|2_©s˜@ÿ½qÔÚà×½ê\¾]¼» u~_FËשs ðNUXmi®sQçåá:ÇŒÖàxé¡9h¨sR-ê\¤'ª¨s|à„[ÖÔ9¡ª…ý#u~mFKÑ€ã8PçVk©Pç;B‹V¥\ЋBÌÒn­à\…”VL•-RˆP\iÁù£TJp}<µÞQ"ÎëÞ@š§nóŒ6^óW÷‚Ú\:šŽ¢¥¦Í7ÖfB£h¹¼[ÚG›óúkcÉb!¨hst;;H»Ó[šÓæx͵ÒBн… F› A¡Íû ASÚÜBs¨Àç×?‚œ¯I!(´¹6•èhÑæR´@›7Š–”6Whε… wÛI `[… :1mνÜG›§… çûèùmÎó"u›ÓÝæQÑ’‚æ´yZz\R m~Ò­¿¶çœ‚B›+4ç9Ø*í¡Íy®ÆÐ<§Í£¢%‚þ­V´DÚ¼šÒï‹­ŽþÂRÐm®M`ëïx¿ý~;ð”/{pÞœß3ÓoŽýûÏÞFã~í=8Ÿ}³éÁùì»æœÏîkîÁùø^ÎÇ÷ÚÌôû7ÎÇ38çýÁùòë}xœwJB#u.⼇:?ÿû¿™R2™À<ý³„ç÷¿Æ‹B'UÚR¶ŒPJÀˆÖb垢PÈ^ÂJôÏ“*£¡Îñ›ëüË>jSlHµ«ÚŠ)|Ì©ó]û¨s©=^·/Pçðê\+ ÏQŒPlù:碨꜠¸¡ÎEž©séMÖPçxÃ]cXQ¨¼ã«œaÄ9Îùf)XÅ=Òª¿nÝ#óà¼D›£hÑê+åïn… t Aù÷nP Íc!èëJ… "Ρúy›BÐkmÃ62Ìk®¥BÐ%·¢h)Òæu!(s1¤4w›3wÚ\Š–¾BPhsÍò*14OÜæEÚ¼)íÒæi!(z$£ÍQíÔ¡9'A¬TJ%-¸Íƒ¢%çi!h ÍU*US_!èþÚlCõiówh#ÎhsmÌ¥´9º(ÊŠÑGqó/L'…¢…à<-eÐ A-8¡y^Jqr«4ÒæR^¥´¹‚J‹hóA!(ÁyT´¤… S¥Íyþ¯·ÏõS¦Í Ο{‡çýÁù•3ýæØ¿ÿìý`4î×ÞƒóÙ7›œÏ¾kîÁùì¾æœïõ÷à||¯ÍL¿óà|<ƒóEœsÙ?8^ƒ5ÿõR Χê:?ñÿýdçýE¡³2ºËΨsi.¸ÿÏæ:?ÿ¾?Uç*üA9pŽÂ ³EãïÅå e‰¢êú²¡ÎEe4©sQ›‘:Gƒ@ùÞ «Çu®à ]B Î Ôù?­»pu®lÿë®öÃu.ª”Àè:‡:ÝM!Ú[¨íZSçm-ê\AÜ€:÷¢Ð–²e ŠB_¨à|3¹æ7;«o}ÿÿ~Wµî‘_µ"Ć6Š–WöÐæúk¤… ·9¥§£Óæ%E‹è}QülH BóDÑR¤Í!͵(yí¥Í¥éi¹Íchž‚Önóe{hs6núhóR!(ÿN!(´¹ ASÚ|} Aq›hsº¸~¡4Òæ¡w€Ð¼E›+4§§ ¥Í­T÷7… Üïý… Úœç§WòBД6çijˆgÒQ‰¢…àÜ Auj&-mhs´É A9Ãóq¤BPçœôáÙۦͧWšn˜¾d«Ë‚¾ˆµa­RÐÔmióÃï¶œPÍùôýþû¿ÿ=лfúͱÿÙûÁhܯ½ç³o6=8Ÿ}×܃óÙ}Í=8ßëïÁùø^›™~ÿæÁùçuAè}œ—7¶ØçÚvp>Iêü+ïZàÁ¹…ö…Š|m…ž‘…*l…Š<_[!ngŠ¡oÑW4E¡RZL§(”°³M‹«Sªà—|C›£hIisHó&.¥ }… Ì‡N'´ A¿ A¥iÁ¥¿œ¼æ6O Aûhs˜(ÑæÝBÐÛ­t݆6¯ AOQ!(𖤔kˉ‚¼´¡ÍU⛂æ´9›cF›k³,¥Í­ôZ‚jc-U´œGEK(ýÙ Ú\¡9´9ú¨†6W™qJ›³ùg´y¢hÉióPú;ÛP$8?G›Œsî‘Û\Žl<6… ÐæÒaA›[h.MV^šÒæS)Mƒó¥×:§Íëà<-¥ÈÚJA˜Sp½B(ÂçWãçœ÷çÏô›cÿþ³÷ƒÑ¸_{Îgßlzp>û®¹ç³ûš{p>¾×߃óñ½63ýþ̓óñ Îçyp^ÎßrÄgÈ Äy, Uð@KB &Tjº–FÙè¿ÝNÿúΛ¢P”-¸Îþ÷ê*¹tÑ@<à\ª ‡²º¹¸ÎEããÅËKøsԹ B¡†:WX„¢ ¡Îkß9T&.`œÀКP›¸‚ ¤ŽQ0…  =B‹:—ïê±QçøÎkêõ Â1B2¨ó½¯ Å€eêü†:Gû€þa[•zQ(®óñ* }ˆsŠ#_wÆ]SZ|íZG|µK›¯ m^*£@?¥ÍQ´h¥Š–ŽÛ<†æ©Û|H!hm-¦iI-5mNÉë›b!¨JA³Ðœ ŠbMÝcŠ–Œ6Gõ£•+ZÐ=ïÀ¯š&(ÒæVzH»ôeR´¬ÜSúªco³Í"6 Í)Ìns£Í?hs ÍOý^µ Á¹®M ÍƒzÇ Aq›'…  m®{”^‚¨h‰ns£ÍšC›£hé§Í¶à<-MisNµÐ©‚B›· A#m®Ð<¥ÍON AsÚ<†æ#ÑæzÆò¬å™ió«Ìm>ÿhó+ÿó¯Ó¢Í—zù)š?q·ÄL¿9öï?{?ûµ÷à|öͦç³ïš{p>»¯¹çã{ý=8ßk3Óïß<8ßàüÝœ—ƒóƒOûjœu-ž×åk+u]çoxÏç¥à¼ªpæzQè½VFˆ&‚rB|˰„{„|¸›¨Ìð‚CÂ@¯Q8H"aáÚ'Üaň9u¾ª´¯h¨óoU‘è/^ü®oV+újE•+(°\þ_·ß4$ðr¢‚Ÿƒë\„0¡ç€:O}ç I)‚4êü “¤ÎEžÔŽBo¾`‹B_ âötÖZ‡Çà<ÒæEKÇm.*>ÒæòEÚÒ¼.í£Í!Í;´9¤¹E¬oŒ… 9mŽ×|ˆÛ<†æ»ä… ºþI!èÒ{}1£ÍU m®y‚6·Ð<§Í5ƒÌ"3Él¦… 9m A¿c§+˜w+ÕüC›· Aœs¿lCó´´@› A»´y_!h‘6×fÚ~C AmJˆch^¢ÍÑIEÚÜ-ÐæÚüKis+Õ!… §Ýù[SV¡h!8¡ùœ{ä5ÏismDæ… 9m~µ63ÙÔ¤bº´ù‡oû¯hsýžJhóX ʦð‹7<׃óþàü¡™~cìßö~(Z®½ç³o>=8Ÿ}×܃óÙ}Í=8ßëïÁùø^›™~çÁùøç›xp^ÎO¼ì»!8/Qç}Ÿ€:_{?*Áy ÎCx>¼(ô¯¦hQçòêüF¡( <‚:?×yMCgR¤G¡^NPµ¨sé(é#Ô‚%à‚:?èÆŸê\žb(R¨sˆRB²†:ÿØkêüGF£B¥âB†RÝù²*¸çÞoeƒÛC«|B¼Êh" _!`!a!bñ0œâBÌn(õ„…Î\Qèóœ£õ`ñšOfů[“à\E£OnsÑæ‹®V¢Í!͵ÐȬEp^ Í׿¸ZŒ5¤”âT T»Š–¼4q›§… }´ùN‘6¿©C›£èiÓæeEK‰6ï‚B›+4_©Í_z˜Hs A¡ÍUÊæ›@Ñm^,­ƒóõOñÄ}is+…6×FUJ›[!¨N‚p"$§Í߬{x—Ëm¾[C›‡S&{ë¾çÔIT´p….„”6·BP=CÒBМ6Š–_Z!(Ï%NƯмSšÐæ<çxÞqÚæŒDÑÂ3‘.ˆs Îïûc­hù“ÜáY AÿÒ(Zmþ7;ùà  « Íù{>óœžj4_wÜgâ6צ.¿£†hZÖÛþ£œ÷ç×Íôcÿþ³÷CÑÂpí=8Ÿ}óéÁùì»æœÏîkîÁùø^ÎÇ÷ÚÌô{8ÎÇ78_Òƒórp~¾B‰'?ÿ}ésü±=Ôù‹6Ÿ;­Pd:Š…–‹B Ï¡Îñ0Gêœð|ãSžGê\D-JІ:—ª"¥Î¡r  _ u®’ 2Pç·Õ á‹ès9¦uþµ@‹ N©óeö ÚgRö¸·\çòX›šÃ¨s­"u~SµÔNŸÑR‹öƒ²IJ'·ÿ”|Ú%êüº@Dãán…^]-ñ/"Ïß¹‚s9½ƒë\+w26£8‘#¼í:W@ÝqËw¾š¼ã ·-8×ÅtÖïùJœã6ï)ųÞShsýÝ;Š–š6Çïnns½©Û<’æ¼V­BК6ß*ÒæRä4ÁyT´ˆ6çÚà£ï-Íis-Z©¢eoÍG]ºLO!(3ÖWšÒæøù_¡¹¥tÕc¾mþ~-çkR mž(Z8…A@©”à<‚ro™¢EÁy(½§]z‘ Aµ¹•‚œ[!(Áy¢h¡˜àœ¢à}E›ï?„6gÎhóDÑ’Óæ14oÑæRL±é‡rª)…6WhmN1r¤ÍÏî¡ÍÑ\ÅÐ<§ÍÛ… ³ÐœÍÌ@›O/4çÀ%wªt˜Û¼Ÿ6gCx«·]ïÁyp~ÔL¿1öï?{?- ×ÞƒóÙ7ŸœÏ¾kîÁùì¾æœïõ÷à||¯ÍL¿‡óà|Lƒóº ôÇžwÃóë—Õ"/¨ƒóuq>œ:_rõ3Õà|”¢PÊë $/~ð/뜒;¨sˆÊH¡*0ê\ê‚uþíuNÁçñµëº“À â“r>Jú´K©s•ù¥Ô9e-ê\¡Å€„h„i¨PçЩPªÐª‘:'Ûa.Ôùu®2BÜÊPçy°¦l1ê<„çø™¡ŸSe‹…Îÿ¢P‚sq±Q1êŠ_óêÜwhs Aµ:Š–ºÔhs- A)@‚*8O A_W*Íió’¢EnsÊZµ‰ÁfÆ 4×&‡6;ž±³¼æ;—hs¼æ©Û|4Ú<(Z¢ÛüëÕ }… Ðæ ÍÙìaÓgBÚ<)m»Íƒr§E›+4çÞâã^k A¡Íu/B›šG·ùΗÝ_Ú<ÜÇVªû:-Íisž ‘6‡N¨m®Ð<¥Íy¶p²…g ý M!¨žCi!hJ›ÇÐ(%8§_"Òæ¦h™O´9ÁùÎ'YÁù)a©cc)ÃèܰÍÜ hs6…÷zï<8ïÎ7Ÿé7Æþýg…áÚ{p>ûæÓƒóÙwÍ=8ŸÝ×܃óñ½þœïµ™é÷pœwp~½çeê|™Wž:-êü£?úÓ£žËu>ëŠBƒ²%…¶”-s¢²%”nV»Î:GÙB°+e !!jŠHSHQ"4î¢r¡s¡t[Ô¹I4 u.=Ô9åŒPçÀ‘:ÇG—úÙrã©î§ÎEžçÔù®¢“ñaãÆV;už…âãÆËý†kª§o!â\u—:ïS¶ˆ8ï¥ÎP£EÉ©smÛçËÓYœ¿rm¾F?m!_¦Í)ÕjÑæ%EKN›ã5Ï-ڜм.í¥Í?W=cW­‰ AkÚ|ÙÚ<-夃‚Önsüûy!(´yT´X!h¤Í5ç)mn… =´yP´ÜU‚FÚ»¯¹çã{ý=8ßk3Óïá<8ïàühÎËÁùÊ›ž?Χ@Ÿyë/åà¼[z•‚œ+~ú¿ì\¦êü¨ó‡ä;9yÁý6o/D%Ô9>_B#£H£0@e@Ez'‹:‡ÚD{ÐPç §ŽSPÕPç ° Î ´Œ:]ç‡@‹… %#ƒ,ÅuŽ¢U!Z‹:ŸuþPM?hô*®s‚9¨V‚ºíŒ:¿ÏKêšÿôIDATNß̹çÝBPhs=;¡Íy–òLÍ Aq›GÚ|º… ipþªçM™6‡8?eÞ]œ—ƒóŸÍô›bÿþ³÷ÑÂrí=8Ÿ}3êÁùì»æœÏîkîÁùø^ÎÇ÷ÚÌôû8ÎÇ;8ƒçåà|ƒ®Áù]çGêþG58¬…¢lÙc^Rв%) 5eKZª¯Uв%) 5eKZŠïܨóïVø ¡Î׆:—ÿyãê\Žhè]œÑh0VV@ Ý‹SúÅPç¢~WÄw^SçÁÏ“V£¡Îßö•êY BñVw]ç O÷(Qç"”‹Ô¹T ¸´s×ù6R‡@Co†çPçZ1NÆymçËÈ8O7Î÷=ùÞ¸q^&u~âM¯´¹q˜çˆlA¶.©GÒÌÜøÙOuŽX>u>÷¿6ïœÔù¨wþcF"Ï—¤åð:§™4$&©óÁ¤ÎQ¤7äyD£hï ç¤:Iw^æ3ëœF -f3NÔ9 /š_Œ[°Ô9HRæGÔ9rižÑD#uΗuN³¤Vù@Š•ÙÉ1êÆ]Ž:Ÿcc$Hƪ(´u‹Biœs"9’6Ò~vóÿjs–F¹æy´9Œûî¤Í‘k‚&is’æa!h!Úœ¤ymNÒ<,-H›3×¼H¶ydš' A=Úœ±G?…²ØD!(is,´6çÂKmÓœ‹4.¢Å/Mf›… 3l!(s[z9ˆBÓ<*%mÎlÎèzÖ_ÓÜ7ÎI´ã3,mÎÏ$ñn Aã/¥qn A™m‚~m‹‰iœsñŽ‹x~!hÿé7>mÎÂc.²” ƒ>mθ*ÆVù… \\¤q‚þE´D´9Ls.RNiáBPwî¿ù5‹6ï¼Éµ2Í ç›ï]í›býýì>ÕËÜË8ÏžFeœgoÎeœg{Îeœ×îüË8¯Ý¹©ö}œŒóÚ7Îqžoœ_0ò¥|ã¼ ê|û“ÿ\ƹ‹l)VÊl^@c™uRç£ß ¨s’–$.™ó˼_šJÌÿ¥ÉäSçŒ<`ÖyPçÌ;g$‹ø"ê&ÖEÓ¾±ÙÃyÔ92ŠIžá¨sæ‡YçÌ7>q ¤Î™{Ls‘4ÛÒ©ó÷Cê\E¡‹íóœñ!‘qÞ6E¡ËÃ8gHsF×3ŸÎ7Í#ãÜ™æIÚ|L"ÛÜ£Íc… òMs.$ žq66ÖÆÑæÌŠßs*¢o“W Úœ… \¼(Xš¤Í±(Â…‘£°@Ú|©>qÚ¼P!(ËfY:ËòÙd!¨O›s1‡QBŒêŠh¡€6ÅÒæ,¼µ´¹ÑÑæˆh!mn#Z|Ú<,e¶¹hq‚ÎŽ‚ŽA!(Œs¿”ƹO›»ˆ¾EBã<­”1-®”o¤ð‘,%mn AÃlsgšÇhó¨ôo¹BPÒæ0ÍI›ó-G›+@›óœèLó$m˜æ?š ´9LóÛ¿þÙ4sñ²ÜÏb??ð¯ŸUL›s1¸ë.7É8/lœ¯Pí›býýì>ÕËÜË8ÏžFeœgoÎeœg{Îeœ×îüË8¯Ý¹©ö}œŒóÚ7ίqžoœ¾ãíÀ8/•:_í*Ónõ¦ÝW›®LlQ³¤9Æ‹£ÎÙBCgòˆl©ñ¢ÐXd‹- ý¤hQ(#[ #[Z¢(”¹ÎÌwÞ*Ì:'-Mã—‘4qQ˜:Éf¯}NuÎø fOÓà\å4G#ïüä€:_ÎQçˆãˆ¨ócÕ•fª5U#êü±Ôùƒ œ=Ꜯ¥Î“æ¹Ë:‡ì….º[SE¡ Ï Rç0¨‰§Îab‡ÔùòûÞió³£ýH‚¿ÉáýÎg’8g!(F¡BPK›3¢%A›[Ò¼0mnIóAÙ7I›;ÓÆydšƒ6'ÙýÌ|ùœiÐæKRˆ6'iF´ð­‚… Ì6·… ÐµD´¸ls˜æ… AI›Ã4'm¾A)´¹Wš¤ÍýBнBÐÝCÓ<*%mŽBPÒæA!h`œ3BÉ‚´9 A³ä‚&ióX!(ió°ôŒd!(is˜æ9ÚüK›;ÓC?[Ú|'1ÇVpžì_ξÆßß©‚Ïø ùÿ¯œm”Ÿ…i¾¯Œó|ã|üSŸ˜–O1Îó¨ó+M»ÕúcÐ8Ï™çË÷Y3ÆyZQ(©H=¤$™ÍPçÿ³†PŒ:G¦/©sÆ:gîo@#ï<¤ÎuÀ¬sšQŒ@`BuÎè„uË1 Œ[8Ô93‹I”2Ž%€$MIœÒDcI s#ꄪŠBë£(´3ˆsÆÜpÑ¡²1Ót9ÄyÌ4w1-"Z¶H£ÍYŠ£ÍÓ"Z’´9âYöHD´äÑæ4Í1ÑR6Ç|1fq;ñˆ6ç‚  AßÃòXÆùÐ4wÙæ~!¨O›“4çbM²”´9#…mÞÍÑæœ“d!(Џ`”¤ÍƒBPd›ÛˆG›Ïió9qÚ¦ù¡iî²ÍYàkisD´°› ­ô8[ú±=Öy̳ëÀÑæ6¢%…6·-¤Íñ&Ë…èQðió~ˆiá[/~!(óB… <§ñ­š’ Aqžd?{"â´yÑr;)«ašó\~ÌðévqÖ.ÒòšÃk¯A«ràz´Ê•f•¯¯W®ä:\>èŒûeœ§ç5Ê}¶£ü‡í³Ü>«àŠF»Œó:6’dœgûœQ¡Q'㼎yçµ{ÌWx<Ê8Ïîñ(ã¼µnâaš¯$ã<ß8¿gæ<³ð*0ʦÎabÀÐh¿Ö@”rþ\cæy…†‘-QQ(ÌóXQhÙâŠB‹G¶ä…2{™Yç{rE¡³cE¡,=dŽ3 Ûí½a"ê%‰,±Œ¨s˜¤ÎuAêœE‹.ëœt/)_fK3czís¦š1ê”puRçȬ&QL²˜„q§ãžöòÎ}êëˆõ@.v~ÖùC–n¶™ÚÌÖ¦k©óû Pç ÏYré¨óÝIb©s ?ï<–už ÎIq“æf~ø–…©óΠι¿b¦ífÅFâ络Nã|xaÚ¼h!èØ í–šßÛÁìvd¸G¹æy´9#Z0ÑÂ}T°ôÞ¦ A£RPß4÷ A ÐæË8Ú¦yç´BÐÚ<0ÍÓióüBЙ–úßܣͷf!èÀ t;/¢…ÆyZ!hD›hóý#Ú<8þ\!(ßá[!–6G±¯O›‹ø%.ˆ1ŽÉ™æ\0ã±Ï4G›Ÿ™¤Íaš“6w-\”ëë‚’6gQñ/Ä AiœÛBÐ0Û<ˆhÉe›s¥Èy… ¤ÍgÅÅÅqmî"Z’´yK‚úoíÓ÷±Ð4÷ŒsÏ4o·Šgš's,ŸÔšŒótãüêÖºïÒçÔî«æ†øÿqÞàåhYÆy¶ÏIu2ÎàYîHòœ¹Õ4F—YÌX’ÆeQ燡pòP š´yÔ9ÈóTê<, eÙ%cHHV[êüöÔùDPÚ0›Ik3ê„‘' ¸Ù£ uŽÌñÍFç4l›3Ö;mZ mŽõîÉBЛ ‚¢Íw¾Ítä(TZ6g®y‘lóÈ4O‚z´93쎂vbD ishšp-|Czq… «Ñ4‡ž˜£ï‚2ÛÜ‚†ÆyÑ2þÁ9°… ˆÍq¦yTJÚÙþÔ|¬´mî‚&isÑ’,M¥Íq<3†É§ÍY§Íƒ('gšs±-I›sQ.YzŠŠ¯Da±Ë6èhs˜æƒ±àç Aiœ»ˆ–!û´y¡BPç±BÐ/Ñ‚˜– ô—ªû×Ùó– OÃÆ´Ä#ZŠÓ渖áz6ìžwdœ§çk´æ}—>+»Fµ>÷hŠj©¢‰Òz‘qžíóQ…FŒó:?îyn©Ð¨“q^ʝðxq^Å9iëp3ŽGç­5Aü˜æ×È8Ï7Îw>bJ`œ—šun©sŒ0ëü¬ÛÞ¬šyÒœ²PRçQQ(ÌžXQ(2{IßBêt%óÎG¿÷߀:Yç 0YšG“‰yÀ4œh>‘Ü3ŠÔ9Í)Rç4«˜uQçˆN Qç DI3£ØRç H]Ö9cld ¢TZßE¡÷½Ëš¶ÍëÒ8ßÄ嚃6߬mîHs[ êG´Àð#ZÚ¼ÔBлÌb{% Ac´9sÍ1H›3*ÇÒæXÄÈ‹hIf›Ó4Ò–Àº\s.˜¤Ñæy… ¤Íašû´9£,mÓXðJ‚žˆ\sŸ6ç±o³Í½ˆçìE°ÙæO~eß\‰Ñæx³%YÊ·_|ÚÜE´°tˆÑÂsš-¥qŽsO›ç A°}1Ú¼ Aýó}§M‡åg›—H›ÏßùRsÛ³_È8Ï7Îÿ…{ _µæ}—>+ÛFU-Ï¿ŒóìiSÆyöæ\Äy¶ç\çµ;ÿ2Îkwnª}ïVáB–ŒójOŒÿ÷ñÀxˆŒó|ãüг04J¢Îi\8ã<Œl9rÈó5iœßõ­‹lA´Œó¶. "[Z¨(”&Í::êœyËÀØc3éØ}É̬sRç{:‡!Hc0 Îß²†!³ÎIÞnGê$.óŸ{¢<ÑRçÈ…&uÎÈ KƒäuÔ9óÎYÈHê—ô/©sFh &l©sЫúÔ9b8bÔ9b:H3¶Ãšª0Wi².É<ì#Yç(›´¥“©Ô9ÌÜÔù¾ˆaÔ .a/£ÎAž§Rç“l´‰¥Îi>7Ißdî1Døf9çŽz&ù\ÉXçTß8w¦y’6O+…qžWêe›;Ò¼mŽ}cMó½°¯ò AA›3Gžû·`!h’6GÔΑGy… }Ò A“´9ßPp´¹hI¡ÍmD isèo?¸BPçŒÊ±´¹ÑB-oU ”Æy~!èÛa!èìx!è˜üBÐ$mî"ZXêKãœ]ÉBPç.¢…Ùæi… \d³… Xt£qî‚^šWš ÍÑÂ>Ñb A Ðæ~D ¹˜è²Íã… ?…… ?W­Ôç“?ÿ± m+ÍË6®c׸R¦y:mþ×Ö¼çÒge÷¡¨æ^Æyöô)ã<{s.ã<Ûs.ã¼vç_ÆyíÎMµïádœ×Ák0Í×’qžoœŸ2àéçï|IH‡‘-+^fà 1Á±rPÄÆlÙv«zæ9¨ó=Î}¸&ó ²¥pQ(iJføúÔ9ã H`Žzä9©s”ç ÷©s›4£˜Ìüà Ï#êQ ŒL`QiPš[ŒT áEZ”ŤGI‘’:'Uz–ŠB¦(Ôç4q+Ö8ïærÍaœ3¢¦¼5ç7mÙ"ÑR˜6·… %Óæ4Í´ù~~¶¹3ÍÚÜæš§Òæˆg9"ŒháÂGBPÒæ,‰uÙæŒñÉ£ÍašsñÅE´0 ÈÒæ0ÍI›»ˆ.àp§Òæ^!(cˆl!(‡XŠË£mŽ£Ý˜kŽÅ%.2E… ¤Í±EÚœ‹RŽ}7,u´y°€e A‘mî‚&isvD… ÷ç A}Úœ=–6‡iž£ÍƒÎÑ’¤Í]D »xNòióX!(isœÓøFO›³ç!G›ÿ/F›³"YÊ·yšó6PS¿;¥ÕAD‹ÓâÓæîºä®S®Ü¦9¯e+ovݺÖç_ë±O®«öͰþ~v„êmîeœgO«2γ7ç2γ=ç2Îkwþeœ×îÜTû~NÆy}ç¿Âƒã¿õ@{ ¾w³=oîM³¡Rê|ÉM®3—üåýª)M-…þ{Ž:o›¢ÐXdK E¡Œm ‰ZzQèuލˆusoбûYêüKÍ:êœÆ BÆRDÔ9ÊcÔùÀuÎRÅÈ;'uN’—Ô9MJš•4-»’:GÎ4)àu¡áS礅sÔùó6»š)©óÎȵ¦qÊrÈ¥cÔù4›‡mMWË$—iÆöq^:Gtiè:g&÷b4~5’J#ï|÷êœdöNˆ6éÜaŸ:GüÉ6ãR²ÎÇÀÐuS{YDµ~æ>©dðw×:å)Ï8w¦9Œsgšo‘F›#‡=6§iŽÁm‰rÍ'ƒ²ŸbI{»í½°˜ûîhs’æy´9Ió°´ mŽ·ø&æfÉÞ4ÎI›Ó4÷hs¾MÀÁBPf›cΙmN ¸lsj#6ç kŸó¢Õõå AI›;ÓÜ‚:Ú:õis[Z€6"ZÞ Aß AG¤‚â8bDË¡iî²Íù¶»XÚ»@!h’6ç±,eßÑb… ¤ÍqθÐ+¥qÎâ˰0ç‚Ò8w¦y²ÔÒæˆ›rÙæ®tTZ!(is,&ŽG”Uœ6oBPžÇÇð³ÅQw¦f›§ÒæžiNڜײvË_ú®ógaüC×ûØõþˆjß ëïg÷A¨Þæ^Æyö´*ã<{s.ã<Ûs.ã¼vç_ÆyíÎMµïçdœ×qæœ?«iû ý&ÆÜ'ó/wñêó/Gãm¾ "‹vM¡Í¹ØÄ¨£d!(ã¸H‹h!m>9N›{'"ZîÊ/¥q/ýÜ‚ò<`ió”Bо^!(is¾ÕÂN¿”ç v/8Ú<(ýÎö3ðÜÅsis¿”½–6ǹo¬Ñâ‚&iój‚˜ö©é¼åÈ´yðÖSô”O›³Ÿ#4Íí"ðr¯÷Kâ:7ãg]÷íuýjß ëïg÷A¨Þæ^Æyö´*ã<{s.ã<Ûs.ã¼vç_ÆyíÎMµïçdœ×q>,ãÐó°ý'cüÚó/{ñ0¬qž3ÏaD8ã«IêœÅ4:I 3fƒÔ9³ªWEÑã*0Fêü9k˜Æ¨sª6ë86yŒòX=Ç,Ýd!(s[Šb`gšÇhsD:‘6‚’6‡iÎóŠO›û… IÚÜ™æIÚÜ/e12 ¹xHÚÕÛÜË8ÏžVeœgoÎeœg{Îeœ×îüË8¯Ý¹©öýœŒóú1ÎÊèÃóOØîë1M;`4|S”:wæy¡¬sgžƒnî÷¦Çw˜v¸vpñ5È6Ç¢,K¨CÓœ‹µeÐæ‹ÁH»Îáúw ÆG½˜^íaýýì>ÕãÜË8Ïž^eœgoÎeœg{Îeœ×îüË8¯Ý¹©ö=Œóú1Î7ÈàCócØæu‹0fTFÇ‹B­ñAd«Í¾?nî€áRi>yKÿ^k…2²¥XQhZdK±¢Po'À€#Áê¨s’­$\ô¨sæ-ÔùûyÔ9éY‚{ òΙåLÊ–1¤ni$’:§±È8‹ˆ:±Ûs€G_ê9Ò›ö›i³Î•A“0MMÇ49YäHZ˜Ô0éáˆ:G³¬#êq4RßA"¹Óq…¨sçÌÏFŽv^Ö9 hÐ,®\œttDßW&uò<•:ɽ]Ž:§i½ÈÖ(æÜ ƒ8HpçÜn7HG—2üßY=2ÎYêe›û¤9?36g&»¥Í‘kžÑ’¤Íišß•_£ÍYŠÁýÉýjisìçmÎìy›Ae›Ó42/¢%6/TêÓæ¶”´9t•¤ÍS Aaœ¦y’6G޲ÔÑæÈý÷ió}ŠÐæ<¾òióí[ }îÞ±-¤ÍqÌú´9ß$a¥ÍŠÓæ¶1-¹BЯm!(sF>% AûOÿ»ñis¿tˆÑBã|bZl¶ù;ß[ÓœQT4Îs… ?Ä A'~–^ÊÈ–c÷£ª}#¬¿ŸÝ‡ zœ{çÙÓ«Œóì͹ŒólϹŒóÚçµ;7Õ¾§“q^?Æùoñ°üCF˜ßÃvîUŠøa4Üm ‡0ë¼Ò¢PK †æù‚k^mÖßçVsãÿhQ³¥RãFE¡* ­fQ(sæp³À²Ò±ÚŸL¡ÍÓ"ZBÚ|;ÄÇÐз-ò#Z¸°k mîLó½Ò A‘mΨ­,MÒæ)… mî‚&ió´BPFüpÁÅe›ÛˆÒæÌG‰j@›%µ\À±´9t|Ú¼P!(‡ò Aß¶F>mÎb]K›' A‹Ñæ.¢%YzÒŸ›.%mΧ žÌ/¥q/ý›íTðòßmL#ZH›_ûêwm>¬mîLó4Ú<^ ÚÜF´üÜâ-w^ï=ø¹ š‹¬ÅhóÔBPšçŒó³Ís¦9Œó¾+4uÝõq9ŒI¹`¾ùqMíý÷ì>ÄdqîeœgOï2γ7ç2γ=ç2Îkwþeœ×îÜTûžPÆyç _nð‡åï°}ç`ü®TáÃh¸æy@ëÅŠB gÓÐ`ö¬}ž¯ÕóõzÙ’£Îiž/±ÉPsþÔ95cžW«(”Äç@Ä%äŠBÿÞ¬¢PR©ÌBf¼7RçŒ} ÉJ¢•& WGÁ¬óIsO3Z‚ŒšØY猞 MQç0 Iïæ¨ó¡9ꜱŒ·Ø¥ŠÌ‰î‰¼s’¼4'{À¤ìNê†e7K¿Pç05cÔ9ŒdGÓ eá#3¬ËAÔÌ:_ÞQçˆñ`œG:u’ùÈ꜑!,©Ì£ÎAJÓüÝ?:‡a¼²Îa 7Ù2Ñ’ÜÖœ¦IM³z[rZê#¤Î—†qN£×¤¥‹äϯv"Œs’æ=X::µ´mnsÍK¦Í“… È6ßÏ•‚ú¦y@›Û\óTÚœ¤yXʹ±… é´¹-Åüæ A]¶yz!(ucis’û^D‹Ë6O¥Í½BPj–Ú ²Íã… ;(åqais'ì"ZÞµoo°;  ÍqŒ¡S 7 AqÌñø+D›»ˆ[JÚý§#ל}±BPÒæ0Ís´ù7&YÊls[Š˜gšó\ÃsŽO›Ç AI›£t$"Z|Ú܂ΠAoùè1ÚœÅÉÉBPvDTº`™ü½±ïþÛt;ìvÃkGÜ4/@›¯tyP ÚmÎkز}ž™¾%gyã:Ù㥿' q¾I©÷ú¹ì>ÌdiîeœgOç2γ7ç2γ=ç2Îkwþeœ×îÜTû^PÆy}ç£ô!ùl×XŒNå FÙ0øŠ{iÔ9M kœ. ¥!âÌ‘×höºð1sû—?µ˜S©‘£¢PÙ¢¢Pf|·TQ(sš½Í«žçÎ4ߢP!(ŒûmžV:9(Ý­H!èÞX@(TZ6Ä,qÆáˆhAlN.¢ƹošƒ|s”‚ú´9Ë`¹H’,eq¬-ÅÂJPêhó\!(ióX!(is,Ü06ȧÍm!(yXº+ ³ÍƒBPd›Ûˆ–·‚BPD1ºˆ¦¹Ë6·´9Ló$m~(Œs.LqŠ¥¼ŒIJ‚&isšæ§À4÷ AÏ|è sö#¹lsÑBÚ… Nó"ZXšG›ÿÝçÎ4O‚2Û|Ø›¹lsÑÂls/¢%*…qÎBÐñŸüÏÄióê‚^þȇf™ÍGÄMs›mNÃOYSÖÍuÎ|í¼¼óXÖy‚:'U½/èjšÅ4K¦Î'Ô9sÄ·÷©óquNãœÛØœ± s˜æ oŽ2Ð-’… cƒBÐm`š*ÍË6w¦9 P{µ@!(Éþ˜iÒæG9Úœ… ¡iÎ7l!(isÌmŽ6Þ6XóO°”o#$#ZÒhsfê' A{à-ˆÍ=ÚœZµ´9´Ë¼~WJ]§‚Ò8Ló€6çÛ®4 Íß·´¹5ÍmšæŽ6ç±h³Í… –6Ç›#is˜æ<þmD ÎΣÍ'~ö£I£Í[¢”‹•‡^ýŒi¿Î5†‹¨i^<¢¥‚BPšæ‹ÀWzÄ5t!Œ çöZ¥ûD¿—Ý›FŸû sÓ ¿wq£ïû¶Ú>çÙ>ŸUhÔíTŽ^ñý+8GŒ-ç3ô³åë¸B£»ºüÏÒï”¶Ï*<·*gÿVx<Ž,ç3ô³¥ÍwbslçÉÖ¸ÿú 9Ÿÿ/댇âMÈ8ÿÛrÆ|ÍWûÀxø{Ù²5Œ–‡qÎ,Ù¤qžG. µä9 ŒÅÝò§ÛßncóüsÇ׿˜Û‘á;ùËŸm4 ñH]Þúɖ¼Æ &Ò™4ÏYª7êÀ<§!5œÆ9 *U,ãc¾0Ís ŒO`þ0M.…f£(´Ó¾w[ã·9cåãã«Ñ‡6>Ê8¯’Y%ã¼¶ÉjŸ3+4êdœWéx¬ö|·„Qךß1kŸUáñ(ã<ÃÇc+Ü·É8Ožˆð0¼ÆOuþPü|ÿ~íZòD ãaEç/V£(Ô7Ï\ûÓë¼GÌ”/~l½XQ(M¤ñ0”Hc’Ê´æyHÓ€bVpŒ:‡yQç¯%}$A¥àÌsRçÌ'¦ ÖfØ¥!uÞ÷iPç0Ë"êô)Í´ˆ:G23‘OcÖ9¨sÒ«$Ï™u~©suÇÞd“|elÄ a™¿l©ó )QçÈk¦)È(Š}`’²e!"©ó^¤Îa&ˆ:‡áHã1¢ÎaH2ƒYç[ôÕôí~ù,[ÎØ f&I`fÓä¤ÙIÓ3 Î_ŠQçŒä eLÚ˜Ô1éã=êœF+ WÆ|ä¨ói ÎyÂùHR2_q!…©s˜¿Œ ³ÎßÿÏÈòÆØäy*usywÐÙˆ7a©fG–krì|›éHš9âqêyç À™;Þ Ä9·«9cåãž(@›“4 A ÑæüŽE AMCÊÞÒö1Ó… È‚Ï‚zÙæ‘i^„6çÛ˜›¥¼BP¾1`isÌe²ÔÒæ˜{F´PÜgi´¹-¥q‚æÓæ~!(sø-mÓœ´9ߘp´ùΤÍašSßÔ9õž, hsD´Xãü={ÜäÑæ^DKŒ6DZ˜¤ÍÙO§Íƒ·IœiÎBÐ$mηQøVŠ_zÎ\€‹‚’6ǹ&G›ƒ4/PÊóÿÒ Aiœ;Ú|2§À8g!(» šK›_úà¦Sá0Ís¤y”k^jDK2ÛÜ/åâ.{9–½ø{,úÝ’×Bþ-\_·Çx£Îï˜o~JKïý½lP0ÿ­ðV)u~#ìßZÜçÙ>oUhÔÉ8ϰQW‹ç±FùN2Î3|<¶Â}Û;"ÎSVçÃSðý—¯Ö‰Äo`D j™¢ÐôÈk¤À<_sqføÌymfž«(TE¡‹íUNdKá¢Pç$§£3˜ñ#MïwV‚qžÑRˆ6glŒ¥ÍaèçE´$is” &isFÖp 9Óeª¤ÍQºøÁ… A‘m΋#°pÑD!h’6çâMsFôø->mn AI›Ã4OÒæ©… X¼áBNÏIÚŸ6/Tjis˜æ¤Íù߯a¼ +é’¸ÆûAW>D³à<ïÞ6jvD ßzÂPówæ inó7q½Z§Z×C\kqƼ:6з¨ÖþÑßͶUÏóß `•çÝêy¿Öòw—qžíóU…FŒó uµ|>«÷ïVáñ(ã<ÃÇc+Ü·qžnœ¯Ã‡àWð·l­% ‰^0&¾µŒ Ù’–u^ad‹5T0Ýh¨9sÒ›4•˜:þ︢Ð(²Q¤/-uŽÂÈÚgÉ8Ïöù¥B£NÆy†º¬#[s{+<eœgøxl…û¶ž2ÎÓóÓêÈ8ÿ ßõŒ_µæ Ÿó¼s»å/}>—u^BQ( Uû›v«q€8_#¿(ÔRˆÎ\YgÙåì‡Ìd˜ÖÍ5ÃËù}…ª(´¥ŠBiœ“¢Î0Ĺ87R~v…c`œo ã<Ê5kc`r… ˆ†a9)hskš§Òæ,u¥ Å A“´9sÍ-‰lsÆâXÚœ19MÐæ¶”ÙæXábH!ÚÜ™æÌ6·´9LsÒæ6¢ÅË6O¥Í½BP.æØBPf›' A=”ŒhqÙæ–6‡iÎ…¤ ¢%0ιÐÐæAÙ.ãH›3©mþÇ$mŽÅ.F-qñËe›³ØÒæ0Ís´y¼4I›û… ìOðióë’´9ú¸¨ÇH)G›ÛBP3zê– A¹ XÎyÔýìE÷½o–êŽhœÏÓ¼:-íV¸ô{\›oíë!?×áu0­£û‡9m±Ÿô™Ù6¨êaþ[á¬\ãüøN»×þ«×ï(ã<Ûç¥ :ç6êêõ\Wß»ÂãQÆy†Ç*ß·MÄßÏëŒÌ|9høð»U<øþßñŒ…ÛâˆÏãð©3¾ùìÀÓïqÞtQ(iARƒíVM1Ï™i‹áÊá‚×÷C*‘F Æê»ßb†½üME¦M%F‡9¾¥…Žmá¢Ð˘u꜄i@#ïœÔ9¢áQç TÏ|è s³ÎI#úÁeÓ¨;yç,%<î® Ø>aÖ¹OQçïGÔ9MBš…Œ¨²ÎçØ¢Ä^#fÛâÄÝÍLhfCGÔ9 ÉuŽx G³¤q3”5’¦É¹ñ%AÞ9ÍOš 4CiŠÒ¥Ij©sBúÔ9idG/Oê…’4`Y2Y˜:õÌØdÖù¡ ¤iüêœÑ#1êü¾”¬ó»gâQç½@kÓ€FÉf”wË:Gl Ë9·ƒ‘ÜqçÌk·ƒÙíåü^¾qîLóqø˜æü¬‚… “ƒBPä³Ûœö^4Í… y´9Is ÒøióĠaŽˆkœ§ÐæÇL3Kq°”Ùæ˜3f›*å"‚£Í©¾…À·˜…ï AI›Ç AI›ƒ4§Æ|ÚÜ‚2ÛoB0ÛÜ‚†ÆyPd›S϶úö AùÖ…¥Íq<$ióCaœÓ4?-|ƒƒÇscqÚ… 8y<òØL£ÍÙ[+%mŽãݧÍÙ}Ðçž.až hó d˜ 4Íc… Ž6Ç/×#¢Å/…\sŸ6çù‹oϰ”oÓ… ?… _4¯ôêûõ{Ê´_78§ÑæíÖ¸Úžÿí"*S¹°ÊV^+,m~E@›ó ¦d®¹Ѳú–Ã̈ûß#E=c©¶¸6†÷{âóß«ƒûˆÛÚjés³mRÕúüWù¬Ó|¯ZßgõþýdœgûœT¡Q'ã<ÃF]½ŸójùûWx<Ê8ÏðñXÅû¶Ûð·ÿ/íx‘qPc cðá›ÅYµ8îÇ÷Z­­NxøìM1^ð÷Í¥c^1K¬3 j‘-ÖpÁè¸ñPsê­¯·šy®¢P…¶DQè’0Îiü7g,Ìã1ÚÜ‚¢|”Æ|`š{´9sÍó²ÍiîŒsf›7£”‹1Ó<¤ÍÂbÅQ®¥ ¡iÎÅ [JÚ‹9Úü9ÅÃE?Û<­4I›3öÇÑæ6¢e´,¥ÝÜ£Ím!(is˜æIÚœ‘Ci´9‹öÐæûG´yg”VÊÒ]Ÿ6?‹T\¬J‚Úls,nq‘+6ižVÚ7YŠaÆ:]é‚Ò8gé°¥ÍQBD´xÙæˆÚüÐæ£ÑÐæ(%mÓœ´9£§X|ì‚&³ÍË-½ñ͘õ˜d,bš·TDËn}î0wLÿÊ¿^ÿר³1~Û×J|îï0ÎÁø®Fï#¸¯În‹}£Ï̶AUó_ŰrMóÿà»ìSû¬Þ¿£ŒólŸ—*4êdœgب«÷s^-ÿ Gç>«tß6 ÷×…Žç¡àð@ùn >ì¾…ï´s[èðÙË`0ÿ=uQá–'>6î2º°yNbÐQçF¶X}ÝÁfÇ30“>ý_«è4ÏmQ(ò}§  fÒ¤0ïœ&ͦ[> ̧1sÿk3ƒIs’ê¤Q5bö÷–ö$õÉ’>Z×ÂØŒb]$Ei| 9J‚”$)‰Òuó,I3Ò”*iUG³hÆÜ)0蘥LÊ•´kŒ:¿ã#kò±Äñ$fI“ ¥)ÈüæǾg£)hÒ8MUÏ4YïQç —iÈvÍœŸu—±!Iêü0˜¾©Ô9âH˜ç½ uN"{/Pç(Ò´´¶¥Î1@q7EÓ8ç÷nÎèÜÇ7ÎS"Z Òæ$Í“…  Ú|”rÄ ACÚœ4>³àm!(F^DK´9Hsšæ|3 YºBTú\`š;ÚóÐæÓ-mn A™mžˆhá› Ýú´9µEQk|ÓÁÒæÐ isÑBÚyü; y#* hs‚’6‡®}Ú¼P!(‘´BÐ$mÎcŽ=~!h’6w-1Úo•6g·ß6aץ͛(Ñæžiž¤ÍýBPž¯,mŽóisžÏÚ… ¤Íq¾ ²ÍË/½àžwÍ›!šÅ™æUŠhYtþæOCŸ/¶ÀÍky¯6¼n.…Ï¿¹Fã·o«ý¢ÏͶIUëó_¥°rMóGð=V©õ}Õ(ßOÆy¶ÏIu2Î3lÔ5ʹ¯·£ÂãQÆy†Ç¾oûïÀ¦Ž ç9ã|J çÃw9ã7MM`5þ;>÷÷`ü«©}r÷+ßš?œý€i·ÂeAYèŠø'‡{ÅÞ7ÏKŽl‰ç[#æùj»Þb†LÿºUÌs…æ"[XœØkâZ`6’ÖUQ¨‹lAùæ.±Èĵ€_rß{lŽwsƲG?fÙÊ嚇… …hs~~Ÿ… Í¢Í¹ðÑ‚˜ÒæG;Ú<ÑÂE Ñ’,µ´93ݽˆ–4ÚÜ‚Ò8ÇB c~Òhsgšs±†‹6–6‡iÎÅÑb AÓBÓ{_Œ¹åî‹ËÇÍ2º\SЀÀïõ¯p\Nº £s–÷{[n»ŒólŸï*4êdœgبkËóU£v…Ç£ŒóìÏUxïåîÙNÁïo\,–%혓qž3Îw¬Âƒj9ùOàó×k«#>{}Œ'›³Æ?õ‰Ùd›óÍó#[XgËBmQh‚:#[h ·_ïZ³Ý)÷›‰ŸüФ±Ó”ñSì¿«(TE¡ÖhÞ«ü¢Ð%`œ3Ó›F%ƒ¿»ÌQ0ηfDKH›Ç A'À4‡qË5/L›[ÓÛ‘3α8°ßŸQƒÁBP.,M£Í™kÐæÖ4ï“^š¤Í½“F›ç A§-¤Í±°’£ÍÑÂBP”ÍÚls/¢…Æy¡BPK›§‚r!ȧÍm!(is,q‰¦yZ¶¹+¥q/ý8*edRZ!èY^!(ÀÎg!(ÄüBÐ$m‚þÍ‚€qî AI›_ûêwa¶yœ6·¦y˜mî‚2ÛÜ‚2ÛÜ+e •¥ÍmDËÏ%›æçÜ9ÛF³D¦y)¹æ¶”e ù… ¶ 4¥t±µ®2ç˜^ε4íg¿ÅµíDŒÔ²—j_wñ¹ `\ŠñŸæ\c›ù»S«½úûÙ6¢êyþ+4ÎW¨çmÎúw—qžíóU…FŒóìu8efû˜©æöWx<Ê8oMbîÇVpÖ¿šz,ô·eœçŒóÅ›ùPZéƒ=éî6+Âgs»I¹ÿÜÛÏÌoMïó6 ®|yy‘-«ÃP©bó&Ìs54ÏWÞùf3øù/«fž;êœ&M¥É_üe“ÔdÖ9M(šQ4¥X¼G£ÊRçï$¨ó7sÔ9 /_,÷³Yç0ÄhŒÑ$c àe¤Î‘oÌœãˆ:GþqŒ:±ê¨ó3Iƒj%ÝJÃŽÔ9Í;fŸà¨ó»Ô9Ê {Oú ¤ÎçZ²–f!MC·$oi&2‚Ô9MÆdd‹£ÎiN’îõ©s™44™=Í8 –8Òðd>µOwQç/Yêœ&*©ó5˜uNê‘,’$uNj™7©óåuŽ,íuF®¡±{$âD,uþX™Ô9Èsæ3æÝu¨B£NÆyç¾ÂãQÆy礵îÛ*<eœ·Öú<Ð~Üæq‰ƒùáçcü¾-¶ŸûŒÓ0þ^â÷-˼è?áu³Ì†ƒóÌóÔÈÒ‡4SBs¥¨yæ;ó¼Ã†CÍ £gVÕšæ0Îc´9#Zòis[ŠâRkê÷¢iž(bZ|Ó<,-H›#Þ&/Û—Ôù-u>êÿXús2‡‡ƒ¥Á5yçÌ:'u>˜ÔùÌš>uŽXRç—;êFš£Î/"u³ÌG>ä*Í8f'ŸùÐuÊ•´kDÃÌ;áîO,{,¨sR².ëœF ÁÃa6! ÎIÚÆ¨s¸9ê|NDÓ„lÉ¢P–@’4^æi@yç¤ÎWwÔ9 %êyç¤ÎaÊúÔy§ãžNäûÔ9ÈóTêü!PÖZÒÚæ{3ç›Ñ%ûßg£Lò©ó©ÅMcšõîéE¡$ΙÁÞœÑéˆG ÓæŒh‰Å´ø¦9¾Mó‚´yÑ‚mÌE´$hsfÁsÄLó6'ÉoisF´Ä³Í—ýoisRõ4Í1Oœ/[Z€6LótÚ<­”¹ù|“!VJÚ¦¹O›ÛBPf›§ÐæA!h@›ïÑæöÓ"ZŽMs—mn AI›ãgšG´9ÞüH¥Íq¼¦‚öM‚âØg!è•^D s¾¡b³ÍÑ“ÀsMsžOx^Žs is¿”ç¡18ñmÒæ6¢%Qz›+ ³Í‹‚ž5ù-³ø¦ˆfYß'Í‹›æEsÍCÚ<ѲøºW›¾7Î(ÕoÎÏý€k`Œömq-Æçþ £ÆWÕ¾‡¿Íî9Úbÿê3³mŠ•;ÿ2γ§çÙ›sçÙžsçµ;ÿ2ÎkwnʽŸ*÷çeœ×¯q~q•`ŸÇßïV® ZêçñÙ«cÜ_åmŒ÷ÌœgŽî‹×úa’,°â[ªwîÌówºÙ |æó7ÏUª¢Ð’#[¢Pç,Ètƒ†r)Ãÿ¥`ôwØe ¤Í·¿c‚-ͧÍiš' A´9#g8?c³Íiš‡´9 ÂÂ-ÅH+ÅwÉ‚zÙæ¤Í}ÚpÑ"­Ô§ÍWÅÂÇjˆÝáBȈâ hó – &6Û (Œï‰Ñæˆ÷Ù”¹æIÚ<¯´9"Zr´yXz= AI›{-4Î ‚Ò8O+MÒæ6¢‹R~!h’6÷ A¹Ðå A¹Æ…0–ÿraÌÒæˆg"mÎ…3G›(D›{… IÚœ‹v1ÚÜF´´ù­Ÿühü&~ö“±´9 AI›+üùf×s± ”Î4/« ´H®y2¢¥ËN£Í˜G?jŽ^Éï~ŽkâóµÔµ¶œ¿ƒÏ]ãŒÿUñÚüE9ßI?›Ý˜¬Î½Œóìi^Æyöæ\Æy¶ç\ÆyíοŒóÚ›jßÊ8¯_ã¼W•\?Åß=´ÌUùÁ¼¨a1pò›f¹M†ä›ç¤uî"[ÊÈ;we¡Öб³ÈFCÍ1#gšÝÍ)Mþ®- EöïíÌ:‡ÙDR“¥z4¡hFÑ”¢9ÅHRž7…yç¤ÎI’%Qç0¾®5QçaÞ9cXHâ”q —1ëÔ9KI¦^4ís!©ó'Ô9¢ HŸá¨sæ‡YçŒ`3>R²¤Î7A#0:?¤Îß³¹Ï̦ÉÈ<è½FͱùÐŒ¼ É FaîeÖ9³¥Iý2kš™ÓÌžî ƒÓe÷@©#ã6XòȲGÆp0ŽƒfiDÃ@]×§Îa²Òl¥éʨL:êœQ ¤›I9Ó˜.LÃì="ARÕ4Ša—F—VJâœß¥ÓqüN•%{ƒ8·Æ9MsŒR A™­¾k m¾§Ë6/P£Íiš{Ùæ–4O+Åþ AÚ<ÑÂm$]o£i\D‹O›cÞ˜UoMs¼EÀ {ç>mn Aiœ÷}9ŒhIf›Ï²yù1Ú<Œh!mn#ZÂlsK›C—¤Íƒˆ– ÛÜ/ hsD´@㥂ö¹ã#cisKIÚœÇÛ©1Úü û6ˆ‹hI£Íiš' AyìÇ AmŽ7T|Ú|hsgšð Aiœóüãhó¨4A›ÛBPœËXÊs[Ú9sØ+ßš5ö¼5aš'rÍù6Psrͱ˜Úž~¿™:ã›JŒï–úé¸Fv¯ö b‘¨¸Õª¸°ý@[m—>7»Cõ4÷2γ§SçÙ›sçÙžsçµ;ÿ2Îkwnª}/'ã¼~óåZØ8ÿþÞå V[ti?|ü˜V|¼¨14øLˆÌófç3ºÅt.ïÜ™çí» 1[¯¹õÃÿ´˜y®¢P…–Dï #f6Én[XÚŒ±Äá0ÎmÓ< ÍÓ"Z’´9Mó»Ìb{M ŠM-iž¤ÍIÃXÒæÎ4? i´9 A¹èÐD!(s[ç,reDKÑBPG›Ã4OÒæ®4I›-¯ÚEf›ÛBÐAoXÚœ‹7;Á4gqí®Ì6‡i¾{Z!(³Í± ÄlóüBÐ Û¼7²ÍYzääm¼Mód!¨O›ÛBPçŒL:…½>mn A¯+u´9ÆRis”§‚ñhsF@1 j$sû´yZ!hD›Ã4ç  Ñæ§MxÃ,ÚíúÐ4m+MD´¸2а´ÝW'Ê@ çš/ÙåséÍ3[Êün‰¿3×ÌeÛâšÍÏÄgï„ñV ß‹\ÞVÛ£ÏÍîÃP=ͽŒóìéTÆyöæ\Æy¶ç\ÆyíοŒóÚ›jßËÉ8¯Sã<|hýº…XïÄßY±Úb+B¯õÄç·vùXI¦Å±ýž0í‘kÎØÃÙá“ç±¼ó&^Ò.ó40-Iý’þ%ÌÂÆ­-uþšÍ¤Þ¼ÿ,Cꜱ4D»!†#¢ÎA³’äñz¤Î‘{M"™d2 åÕA*¯Æ¼ó:§)Ë(ˆ:‡iKó–ô³5¬#‚ î%fÖ9ß<êå—$¬ó¨sÊÀXNË:§ Sšæ´Íï•_js¯4³l¿»Äá„´9MóÚœ&}ÚÜšæ{ ÍÑÂm+XšF›' A=Ú|é"´9ßH‚r.s… ÓƒˆÒæ˜ûm‚âÍ„ÍÓÍø´ùVi… Ž6‡“… m>ÇÙæa!(ió±qÚÜ‚"ÿ~!(šæì m~B"Û<­ô,¯”´9» .x2^š¤Íƒˆ–¿ÙBÐ0ÎyN` œ#Ø‹à²Í}ÚÜšæ8¿ðí?¢…ÙæmŽ.†À4ÿѾ)cis˜æ<—±ÃÁ§Í'}ú?³ãY™ö]®Ã`¨ÎÂïo]m‘1Ì—ÇçOiæ6”j.TüsƒîxÛ,¿ÙЄy…&"[H/ZCÆ™3¤‹–…±-4}Ùp˜9êú—Z,ºEE¡ïXó‘&$ÍHF`¨(4Y:% Îq^á?­qîG´¤Òæ('eA)‹JYXZ°ô^,¸lsgš' Aóhs’æa!h´¹-%mž(-J›(et£Í­iî²Í±èâ AI›3 ÈÒæ^DKD›§‚R³®”´9„òióÐ4Ÿô]LbœQmžWJÚż¤ÍÏôhós° eis˜æ1ÚÜ‹hIÒæÎ4O£Í¹Ø‚’6G ˆiš;Ú| bZÒhsgšsÁ/I›»hªë^úƬÖk|Ü4¯¤ ´‰\s.–röƒænDÁÔøµêC|¿ýÛðz¾>$ÆOÍÜOm¶ˆßVûNŸ›Ý‡°Jæ^Æyöô"ã<{s.ã<Ûs.ã¼vç_ÆyíÎM%÷TåüŽŒóú6ί¬ð•¤úqÿWŽXZêgñ¹í0úa0¦ÖÍûý&=û¹ÙêI9ó¼¥òÎ)`‹ìó¼ý×™îÇÜmÆÍý¾Ùôy)E¡ãBêœæ•Ë:§©E*”t¨£ÎI^÷ú¿êüÕuÚÔQç, di`¿0ëœÔ9K™uN‚•¦‰VštuóΧÎOFþ²£ÎIË’šeV3ã'h Ò ¤QÈx KOHPç s™Pçyάsgž3ƒÑŒÈ°Ôù€:ßÎQçˆÔpÔ93ª{ «Ú§Îi”Ò0e)$óÎÛA¹8uþ¼a$©sF„0c›Ô9)èu> Ô9ÈsG‰ØÂÈgʇ¥QçÈý&‘Rç4ÛÅšŒÁX²‰BPî_Ÿ6w-~!h’6 A]¶y®”´y¬zà ÌÃç Ž6Risè-0Íóisê4F›‡-©´9´Ï7/‚ˆ–À8g@œ6ÞÞà›<®Òhs‡.ÛÜF´6Çñza²Ç4m¾Yâ Aiœ;Óœ´9ßH‰Ñæoæ²Í#Ú{=Œ'*¼¶ÿ­ÜÏÓÏg÷&«s/ã<{š—qž½9—qží9—q^»ó/ã¼vç¦Ú÷…2ÎëÛ8߿̇Óñóƒ1©¶°Òþ>>w>ŒC0>)ó{׌qqâ•ÓÌ"kÂdIF¶8òœô"F<²±®”ŽYçaÞyTêÌsç¡yÞy»1æÊ'?ió\E¡* e\‹WE¶ÀȆ¡MãÜšõÍŒ‰E´ì„|óo³ê©-is’æMÐæŒ«±¥ q˜æ!mÎBP.:ØBP ô0Ím!( Y-mŽE‹$m¾ÊiA!(ãu³“Vº¾+ ó/É/å"K¬ÔÑæX”ñis[ÊlóÚ<ˆh™c~;ÐæAc‰þˆh9"4Ímn AQ¬Ût!h.Ûüæi… ,ùE´À8g!è•^D ókÓÂ'¿4¢ÍùDÚÜE´´y®”qQ\Àc|c¤|ÚÜ‚†Ùæ,=žøÉf»Ó´ ŒEMsÆbñ<[° 4ѾAĈ–0’kã=o1ãžú¤f®=e^3ÆÏ߈±D[\ëù™øì}0æ–ù½o«ï«ÏÍîƒP½Í½ŒóìiUÆyöæ\Æy¶ç\ÆyíοŒóÚ›jßÏÉ8¯oã|•2JÀÏ®QmA‰eÙŸÿlß·f ‹!S瘕7¿¾@Þ9LõJÌsÒ’Ž:'E chaD·>äED·üR±žVJ’“æs„iVÑ´b¾0s†@SËRç(ð#%ÊB?f=ê¨sR¥Ì2¦a6Æ3ŽIŸ’D¨óçæ™KŸùÖDÔ9VRç$Z-u³ÎQ猌`t Y\H:–”,iÙîþ$ Î‘Ù£ÎaöFL3žEÖ3 E—uÎX –)îçQç{JPç0-u΢F6’:g¤‹I 3nƒF()âî—ϲÖÌ:/L¿d³ÎI*Ó|]&ìêÌ:‡)Ks6 Î‘w~r@32ÄRç0u#ê<–w#8¢Î+“:yS¼)ê<0Îi6W>㜅 y¦y²4A›“Š·¥ )´9 AQðƒf‰C0Ò A› Í;Úû7YêÓæÌ¢_ sDÓ| Ì[@›¹õë—£Íù†AŒ6‡’… ÔK~!èëV_|»!VŠÌ}ÆõB”O›ï›RJmÓ8çÉBPK›‡… 7»Bõ6÷2γ§UçÙ›sçÙžsçµ;ÿ2Îkwnª}?'㼎óðuè' M™çËn{“¹ìÑšaž#²9ÁŒ= ÉÉÒ½‰ŸýPçÈ&ñQç0µhn‘e‘ ýµ0<¤ÎÁ0T)©sf3Ûx Èóˆ:GŒ ¶Ë™uNê<Ì;§w©sä'³|„+IWšwg!g™fž¥ÎQ\x*ÈØˆ:5{ÈsR´¤i™áÌ,gR¶4{#ã™Ôùa!u~Èø Ö"¢ÎwA‚7^ óœYç0/™A3“¦&ÍÍí½‘£ÎµÁ¬êˆ:G†5©óMûÍ´Ô9ã:\Ö9UÆyP^×RçÓ-¹£ÎA6Ǩs˜¸¤Î!B*štt.ïœñ)0‚i[êtu~ÖùC–È^ü`Ù$´D¡æ0Ÿa@/¶_u>5(ædA§3ÎY¨ÙŒ±Ä†qŽx–&isšæw!:Æy”kž¤ÍYŠÁmÁ6YÒü‡ÒisF´p¿4QêÓæiþ¬‡¢… Ž6Çœ2ÇÞ§Íiž¤ÍƒBPd›C74Îm!(ôDÚœúŠÑæÐphš;Úœ±Bi´95MÓ<6O+åñâÓæ|‹ÃÒæ8¾Îð AyìÙBPf›ã˜dÁEÓ‚^gš§ÒæxÃ$­”ç…X!(isœ?øöŠO›§‚F´¹W:nîÌV'ÝoÚwZ‚iãÜEaE-)¦y2ÐÍö½ÕÜúô§5sm©ÒuóAüÝ5«}cYd!½>ÿù"ÛÖfß­­ö‰>7»`•νŒóìiFÆyöæ\Æy¶ç\ÆyíοŒóÚ›Jï«Jý=çõoœ3³ÜØg¶é(ŒÅKAKÿ>{OŒ÷ªôà_sÆÆ°{ß1«öÑ´y¾Vhâ0:ÀÏmÞ… Xm/ýØF±`—1-i… \¨òis[Š%¿”Æ9K~/ÃâW®ôo6’‰‹d\,K-ÅÂZ2¢eT¢4F›{… “l!(hs,ð øëçfÅÇæLs›k)3ÖŠoé`¤yå¦ùBk\eŽºøqD³ÔGQu \WÙur-F[v†Ïÿ4±-ŒsùUKßèïe÷§Qç^Æyö4-ã<{s.ã<Ûs.ã¼vç_ÆyíÎMµïûdœ×¿q~¨÷ðùþ½KµES„&[Ÿÿh <Ø×œ9ÞÔ6ÝþâWf§£ï,hžç•…:ó<* -<'y¹Qï»Ì˜9ÿ*Ë8§ÑNóœ±>uN£Š¤'Kù˜wμá±Ì:©óÑïÔ9£¹À¼bf“*½ŽÔùkqêœ*5Æ90·ˆ:Gf2‰V’­Iêœyç¤Î%á¨óS¬sš€4I³øÐRçÈtŽQç“|ê<È;g©"ã.ö#uμs½4)£ÈP¿»‘:GtÆÎ05#êÑŒØØfàë–&ELS”Yç=HÃ0%mLuãK^1]<ëuŽxÆ|DÔ9r³™ŸÍmFƒÐ´¥yKú™Ñ!4uI³À²0us8Ie2ûdviÔy¼(ÔFµXr»òÁÏΧÍQ>º;F/DÂn/XzoÓ… yÙæ^!h´¹-ÕŸ,-J›‡-ÉBPÎs<¢e¦a!èæýgY}0¢…z¡n,mîE´D´yJ!(5é A©Õ 40Îs´ù\ûfsýÀ[Ô~mî›æ|kÃÒæx‹ƒ´9»\¶ù9Ž6‡i£Í½BPÒæ|s„½<žiž¤Í‡à<ÀóAŒ6Ç[*¤Íyþˆ Añ&Kmî‚ÞöÅϦÏÈf‘M®¯‚iŽ·ƒ§Å·ƒð–Pç͆™«'¿Yw×›¦®G%þ÷¯ñsÇaü_[Ü3àsĸã¿á÷}¦-¾‡>3»@õ:÷2γ§YçÙ›sçÙžsçµ;ÿ2Îkwnª}_'ã¼þóµñÐùÆ~ÕKÃ|Q|þõ?•øÀÞ°FÅ×>g:®30ÛRrY¨3Ï’²Pæ9Íó¥·m.yðƒ²Ìs…æ¨óÆ- …yÎ2MÛ$·md âZR#[›3›ÿ0ÍÖ8ßù6ÓÑæšO6‹î†BÐÝhœ;Ó7»Aõ8÷2γ§WçÙ›sçÙžsçµ;ÿ2Îkwnª}O'ã¼þó_áó÷ÕJÚßÇçþã$Œye<¤7¼Q1üþ÷ÌêÛܘç¶,£dó<ˆp1ÅÌsF·4àYd—ÿ\²ž‹lùÙ–ï1Ô9«uþ?3ÆVŒ:GÔ©ó‘!uNs, Î‘wRçƒÂ¬sk,uþ÷Têüb:g<Äy0L3¦‰XRç4ûhú1j‚F`Dß§ÎIÝ9ùCk(ö&uƒ‘±‡Œ¨sR»$x÷wÔùèuΘŒxQè[6‡šYç,tÜŽÔ9Èá­-uþZ@ƒ.¦aÚÝQçýrÔ9óÎëÁ2I–J’:gÉ$MÙ5u~æ fUŸ:‡™Qç £™ÇÝ鸿¦d#ïœtuuCùPçyÔyhž'³ÎE¡4Î!]é?™±ž3Î}ÓÆùÅhsijÀØg{.¢ÅË6w¤9·ï°À8Ls ÆÊØBSWŠ˜¿ô¾¥Íaš'ióUN{Þ¬ ú5ÌßàÜ$ A“´9óì“… ¤Íiš;Úœ:±´9tãÓæ¶YúÌÔßÍ+å›ÌÞw´95Ðæn©ád!èÈõ÷iócñößÂ(VšG›ãxK‚Úls6·-¤ÍAš_‰7H|ÚüÄ´ðx÷ Ay>p¦9;üBÐÑï5]zÙ㟘v £Y¬iîrÍËE´4Ï‚,Fb±S£Ý4Ìs¦ùBè¤8ö²'³ÍRê5—æõŠmq/ÁÏÄg·k«ÏÖçf÷!¨ç^Æyöô*ã<{s.ã<Ûs.ã¼vç_ÆyíÎMµïédœ×¹q^m¡Ì·Çƒî2ÌÓsqï˜þ•Ùí¸»=óÆMÌóö]‡™ »ÃŒ~ûŸe˜ç* ­ï¢Ðó<2ÎˉlAIèž(él)ãÜÒæ4Í1ÑRˆ6§qϱo m‚Òˆ·¥ y-MÓæŒºaѪ_š¤Í¹pÁØšæk„¦9cu¸ÈÁr×õ±è‘,e$O7,’$ A-mžWúº-ÝÁ£Íwµ´yPÚË+¥Ó A¹èCã<­”Æ9£ŠmΣrÁÉ‚bŠ Q.¢%F›G… _ÛBP.jYÚ¦9isÑÂE0.†¥Òæ^D ó,Ås¿” q\cc¡¸PGÚ|§?™Þ×MG4Ëp4/lš³H9=Ó¼iÓ|…×›Áw¾]ª‘œÅŸcl ãSl«{ }nvH4÷¥Í½ŒóÒöS#éIÆyöæ\Æy¶ç\ÆyíοŒóÚ›j_÷eœË8ÿåˆ Ô«`Ü+ü´"¹³‡½h]ïš<¯žyÞi«Ñ梿Ì-É<Ï/ ý9:÷Q@3x r‰™uN,Ió©óWÿi)TÒ¨–:G £ÎiÀшcü9t4ê˜uQçˆ`îrD#™¦Í?š€ÌkvÔù ¤Îa’¶¥Hêœfb@PçÔ92£YºÈòEÆbа$ñKê¼ÌL’À47wl©s˜ž1ê|`Ž:§YJÚ˜ÔùfÌ:‡¡J™ؤλ’:¿ðekÀ® #¶0uþ¼Í:_1¤Î)²lH3j„‘#–¢Fáå’G?ÐÕ¤ÎI[“ºîD—X;:÷"[HtÛȘÕû†Æ5ãRö sþ~3³Õƒ˜–Ú… Ö /T£Íññ·â¦yZ!hH›£”ûÅ/%­OÓœûÑ/]ñ” Wžó¤ÍWm¾FÚœo 0¯Þ/MÒæ.¢%¢Í¡¾À·¨¾µÀÌ|K›CW¤Íƒˆ–·­æÐæAþ¾-mî‚&is¿”º?ö.Ðæ8ŠÑæ4ÍÑBãÜ/å›¶Ç 3ÍYÊ>WJÚœ}Q!(ŽkK›ÏŠÓæ<ähóÀ4wÙæ7áüAÓf“ei©s–ø‘%1ÊœbKã9ÆHR¦ÃÞü—Í;gÖùµ¯~giT ©sÒªÌHލsÄ@j¨ói ÎA½²¤¹Ëç„yç$dÏ$uóï´>34IÓ¤IÈh KƒºedED#º7LÆÃ-u>×fDÓˆ$É{ ©sP½û!KÚQçiE¡Ì£¦éIb˜&(ÍPš¢4G·BÖ9‹ I“:î~ù¬’©s–O2O›¤3‰g’ÏÌÛ¨óç M^RçË9êæyD[òÔ9)kf{GÔùc¨óÒŠBoQãÜE´„ÙæÎ4O¥Í™kîg›§Ñæ! ßT!h˜mî‚ú´y`š§Óæy… ¤ÍñÆ€O›wc!h¿ ´»WJãœz .Rió¡mî‚´ùœˆ6ç–6‡6}Úœ9ý‡A¿,¥ž}Ú<^ú±-åÛ<6øvF²ô,¯”ǘ-%mŽcϧÍm!(³Í_˜gû b´9Hód!(;|ÚÜE´ŒÂy‚o©¤Ñæã>þÁ|Í f‘¯/Ÿ4w¦¹3Î ™æ6×ü*³Ò#Ì©sd€ÏªüÚ…ëØ/ã0–Ö½Qù7ÙÚgÚg-­ ¦M¿Ó»¥¿·þ^åÇ‚ŒóÊ÷]#è®B£®’ã¾Üß‘q^eƒºB£NÆyç¥ÂãQÆy礵Îó•eÞƒ=ØÛ#㼕‡å/É0o–é3mÎù’Y¬Ëà ¬ÎfžWÇ<_rËQæü{Þ-jž«(”æy…ŒlAÙæ)E¡ad #\,ÝÝŒÁ¿¿èn4Í1zÁ4ïU¬ôÞ¦ Aóhs¯´ ÚÜ‚bá!µ”Ùæ‰BPf›³Ä•e®ÉBPFïÄ#ZfÚˆĺˆÒæ¶”´¹ÑÑæ)… –6‡öÑÂEœ 40Î}Úœ‹?ŒJ‚Ò8·… X8òMs.,YÚ My… ¤Íaš3¢%F›{… ¤Ím!(¢•hœû… ]!(ƸHv]’6G!(Ô\D‹-EL‹O›_ÿÚßÍÆGLµ†y<ž„ù!ež(Í#ÍK4Í·ë}»™ü¼¢YZðúý/ü­ó1Ú¤Œ¼%n"õ7²m>5Êü—ùV®æ~^Æy+?s5A¯Qɼ—«y|ÆÌ >çÀr?G?_Þ¹¸B£®Òc¿œß“q^åóD¥FޱòޱröW…Ç£Œó*+åÌa¥?[éñXæuUÆy¥Ô¿‡ãå0&µà·ˆ?øýð‡foªºyNcjï~ÓÌí_þTÐ@¿ëÛÂE¡,ï‡,bŸ:'AJêœæsŒGÀ,îSç0ÓHvÔ9Ì6fÓ€#½ÊÌds4èH3‚ÄëE _™µLC1uR–ùÌuŽø G“°eDÍCG÷ ³ÎIç:êœÔn@¿ŸG³”Ñ…2>£×ˆÙ6‡šyÔ$…™OMêœyÕ4E#êf)#:"ê2idRÉ4Z7¾$—uάl²,\q 4j×úS‚:‡¡£ÎOzÖš¿4YtÉÂË\Þ¹O7¿(Ôç6Å,-6â?¿ø÷‡Æ¹3Íaœû-QLKJ!(Mýƒ Ðæ\ hŠ6g<†+e¶9©ýd!(³Ím!h˜mÎ9ȣ͙kÚœ9õ4Ím!(isäØs~{x´9ß:H¥Í½BÐ$mî"Z\¶9Ms¾‘J›Ã4'mD´|`3ü©ï8mŽˆ.¢%6gg@²”oxø´¹-%mŽc3G›Çmj!(Œs¾e·M\¶y!Ú|,ÞXá9äüûæše¶Ó2¦¹hI‰gÁbä"ë 4§ |FלæQæÅöß\ÜìÓ÷&úÌê=jßÖϾ­ð¡½3Œ?+㼆òEœ×ÏñYsi… åó•ü¼Œó*Ÿ'*5ꪡCýÍà42¨Ö=p²ùúßSÍs…¶mQ(#[H@¯ S—ùÛÉ¢Ð(²¥PQh,²¥’¢PÙ,ç<8iœ—÷ÿ/~ŒóÝiš‡-{¸BP?ÛÜ™æ~¶9MsŒd!(óÖYV™æ ÎMÃíeAª-Å#Zl!(\!h*mÓœûºP!¨O›¦y’6Ÿeis.–D… Ž6G!¨O›ÛBPÄýp†Ùæ®”Æy`š´ùþmD qq'Yš¤ÍYˆkisäÆ"ZH›ca)•6Gü‘£Í]!èEÓmîÑæ6¢…´9·­äÓæ¶ñKƒQÐæA´É8¯±|çå'tnÁüÿ©ŽùJÎ2Ϋ|®q^{ǾŒóÚ›“Ö:ßcî×o…s±ŒóÖšÐJ?À`|(üº†yrÿ^4z†Y¢ë±-aù¢Š2Ïsæù[Œ2ºkNAóüäߎ¬ó)Ì:ÿâ'3 yçÌ:'u>žÔùG?’£4ÃH3¿8Go†#ïÜe3ÂŤÎi¶1âÔj@#ïœÔ92”iÔEÔ9 <yiÔ9‰YRçg ëüô>·æà)aÖ9©sš‡¤Îi&’ÆísÇG–Î%¥KZ—Ô®O<ŽYçïÙx —40YÒÈø K#ƒšÔ9s©-uŽœjGoOê&)£9ÑÑùÖ4Q™uNÙRç “I)“V¦ˬìˆ:GcA"êyç«Ó®åŸÅü/1¯ÊǼŒó:æeœ×Þ±/ã¼öæ¤5ÏߘÿiU>Ë8oÍ -ç³ðÀÛãiæ­k˜ûû{Ì£™.»­ºy¾Ð†×›^=a¦ÀŸ:ÏĆŠB]dËlÃòFÂ$…mdK …2²…†mÅE¡Œ&)«(ô!K”Û8Æ¢ VÅ–rÂ0_ 1-‹Ñ8§m~¦ìßµÑæˆhYtOæ©… IÚ<-¢%I›ƒ4w´9‹Q-mŽ¢TŸ6G¤£ÍmD X¶ÊE.H°„ÕE´°œ•Æ9çÀe›wa!(cZ°Èá"Z¹c A±ÂX.ŽÄhóB… ¤ÍašS;\€q´9Kh]DK@›#¢‹7~!h’6÷ Aiœ3’ˆ…¸Åhs.0q¡)YÊlsG›û… \¼r… ¤Íc… Xðb!( }ÚÜ/1ûûmî AÏšú®Yz›› ›æ]ÂLóõ‡˜öv\kÚ¯Ç"/˜,-`šw\9ýÚçe˜·®ažÜßÃ5íTŒß”sÿ¡ŸÍöÇæ¿òùÇCÛN?TñáMÆy ™h2Î+?Vå< l‚ñÏ*ó2Îk蘗q^»Ç¼ŒóÚ›Ö8ßcþ;b¼ZÅs±ŒóÖ˜Èr>¸K`ŒÆøY¦yÛ™ænßOñ9àÌÌ‚kV£04GžÓ<_{ÿÛÌp˜,¾y+ y>9¤Î'~æSçÿ3c‘U̲¿ˆ:GÞ9³ÎIœ’:'JSQŒtHRç¤X“Ô9³•™u~±GÓà£Ñw.HÙsPjHêü¬‡Ô9[f;GÔ9¢+H3Ê‚&ãÑȃ>rò‡–:ïMêï¡aÖ9é^–uþn@( %9¼shž3ëœÔùv¤ÎQ¹µO£0’ÔywG÷ËQçÌÌÞÙÙ4hYBIÖÆ- \¹–:"[Bêü”us˜‘$ùYç0“Y˜y fÐÙŒ7±ƒQ'Œmn AI›Ã4OÒæ<†â´9"ZÐ+Àcަy*mŽ^—mn#Z`œó-’!ÉBPÒæ8þoxç{Û}À7QnÄ¿ïÕïi³ðÆA4KPš Í“¦¹5̯ óÒMóÕ·»Ñ ¿ÿ}™æmkšûûÿ-\Óv*ç^D?›íÍåó‡¶=0~¬ÒÛŒó2ÑdœW~œ4Ò9:ØãßU:æeœ×Ð1/ã¼vyçµ;7­u¾‡–Ę]¥s±Œó֚Ȧ>µ¿Å8ã2ÌÛÞ0OÎÁ%7Ï2KnÌè–«a¢‡Ã•à‘¸lØY‹o>Êœ9åí„y®¢Ðj…ÚÈç±È¿(”æ9s/²…Ä4M`æuÛÈ–æ…æ™çŽ:¿/È8§‘Ýœj=Ñ’J›ãsHº#Ýšô… AcÙæ¤Í™kžˆh ió¥™mžB›¦y:mžVÊE Ÿ6·… ¤Í±ÒÝ+¥qžZ ã<0ÍÚœ1?m¼ÁÀ ¨ÔÑæcã´9u)Äh!Ûú´y¼4‘mÓœñE6¢¥m~¾£ÍQÂëÓæ¶”ÙæˆNb„RŒ6GÄiskš£ð×e›û´y²tà‹ß˜õ¾f¹oš#–¥+£YÂx–¦LsKåÎwHó]¿ÛÜþâW2ÍkÇ4÷çâ~\ÛVkê~Dÿ]Ò@ó4€‡¶Uzx“q^C&šŒóæ'tž˜±;³J†M¹æ¹2Ϋ|žÀ<­d®Ióµ¶-2Îu>¦&ñ‹aLªäølâwdœ×ÂAÙÝ0æÈ0¯=ÃÜŸ“±lºî9®ÍsD"и²# @í@Yß®ç?f&þ£5Ћ…2ïœYçã> ©sæ‡Yç$MIœÆ¨ó7=ê…‚Œz`Á )Ö Y™wN£Ž™ÊÌV&õʬeRç4ö.„ÁQçe˜ÑQç!ë! [æ:Ÿæ3ëüR爲`¤…£Î™Í‚ÅÞ“>¨sdH3#¢Îa`îò|?KŽl‰¨säXǨsÇ.ëœQ,$uΈn ÎùAãœÔ9ÍsÒÍë[ê<ˆlqÔy[…Z3»9Dù¢ Aïµ±0ŒsÉ™æ‰BÐ<Úœ¤yXjó´9l¶y2¢¥mâßÑæ6¢óÂùám^¨”Æy~!h`œû´ùá6ÛÙüÐ+u›F›û… Ô¾¥Íhó3qlðÍ +|SžÿäW¶? YÊã΂â8äñ育›ÀÑæiþ-e—Ápf›ÏhsvðpÚä9f©­F—aš»h4Ošæka±Ð-† ‰‹vlÎö¢ óÚ4Ìýyù®k×`,\ ÷?úzÐiT àl~Œ«1~nÁ8çU6ÄÊÑ£Œs¿|½@¿Á¸£Zoœ”j Ë8¯òyBÆyíû2ÎkoNʹž¶ôÏB½0>mÁû/ç-=Iåü=<¸®‰ñ óÚ6Ìýù¹û•oÍ!ç>œ£Îi$ÏÙˆfÛŒ`f33¸K8\ ‰Ïó|Í}&šaøG,¢%¤ÍÑbis‚bø… 0Î]!h*mÓœÙæ4ÍÓ A×w…  ÍƒBÐ$mŽÌúd!(is˜æÛÂ4÷ióYŠ|‚2ÛÜ‚Ò8"Zmn#ZÞ±¹úŽ}ϾñpÈøàíÑBÚúLÒæÌì·Ùæx›Â§ÍO!mŽ·.Ris+Ž6w… IÚÜF´6i~%ŽCŸ6çÛ!–6ÇÛ".¢…Dz3Íi–³Û ÿ³_™µ˜šæ‰<ó‚ñ,•™æ{œôgsçK_Ë4¯/ÓÜͳϗiËû }¶t²¤<´ýc©fŒù³´¿j}[1ÿWÉ\–»]¡[®n~_îçèç[þ|Œ¹ûu%ñ~ghfŒóêç W2¯:ÆZþsûó±xsòÛræÁ >c¡r>C?[sq×Þ-17ÿ¯%þHVÿZÅøIzýèãžüÄl²Ï­å›ç–>u^¢yNbtdz1aŽÓ<¿ýëŸÍ…Zóœ%$‰[º(4ˆl)Vú¼-¹\!, %YM³˜¹Þ¥….Ù»„¢Pæ‹¡ ´YÆy^!(ÿ7Úˆ–0G=,]üàQXZ 4F›—VºüLóú5Í'°\7áq®yÔݰgó†]ó®y—¤i ~4 ã¼~æJÇ•æJšÒ€Œó0ÎCó|9<о*ó¼>Íó[§}jº01Ý<_ûšœ!UÔ<Z¬4tCý>ßöô‡Ì¸ÿc¦0ëÔ¹3ÏI'uþ¨sçÌ:'u>ú=d#ï< Î¿·%‚Œw ùv©s˜qÌ:§97Ô9Í:FD0*âJRç/$¨ó¿æSç4GÁDG3®‚Ô9sŸi.Òd$¡£ÎAðÔù‡Ö¤d#©óCCêœ0³§I3‹š†'ϽFͱF(ã7Hﲘ„ñÎCß´Äñ0ÎYÉÜëm¾n ${†æ9‹%ùQÓE¡$Îi|7w*=€Æù_`œ§Ñæ,/Å€±_´4Ì6çB \¶¹hq˜æé´yZ!èÈ5ïêÑæ¶”´9"Zº{-4ι’F›sá„ Am>;¤Íç„Ùæ0ÍmŽ}Ÿ6§îl¶9tÈlsŸ6‚æhóB… g% AmîE´Ð8·… Ì6ÇqÆã-F›ãxL‚^÷ú¿Œ£Í½ùu³øæ£bÑ, m8,,Fw‚‹géƳ8Óܽù‚òâ`A¯ˆiŽ·i–Øhˆ¹pô+2Ìë×0ÿ÷G7uC§ÿ®›~i@¤i 64 ã¼6æAǃæAZB2Î[È8Íó…ðpû°Ìóú4Ïï™9ÏuÉf¡µ=Js-˜æ4ÎË1Ïir) ¥y¾ÊîãÍÀg¿PQ(ŒsÆp,f,Ë iž:óœ$2‰dKÓ<©sšç4cÒ­_ Â"Ê ûÎ0]aà’~&ÍìmfpÓèe&7K-7ÂØÆÔ9òÎa³ 3¢ÎQ’Ùé8Pçy^*uþbS ˆsšÞÍ4Þm®ù½aÉ(³ÍiãÜh‰bZ|Ó<,=Ò‚>™(}Ú,ÃBPçÜöÔBPf›cŸ1ÛÜE´0Ûœ9òŽ6ßû›ûûŸ¥ Ž6"ZmŽùÚ¼ÿ,ûÖ@8—\±´9H¸PÂ9çÜ*åbK~!h`œû´¹-%mŽâZ.ê°È6™mîG´Ð8/XJÚ¤¹Ñ’,%mn A_È/åB–£ÍƒBЀ6<óf»³M¡Ì}Ó<<ÄLó”<ó&Ló.»57=ú‘Lóú5Íÿ‰{ŠZâ†OCÒ€4 HÒ@ëh@ÆyëìgéYûYZC2Î[Ð8Íó_ã!÷&™çõižsÞ®žü–éÜcx.â Õ<¢[Úƒø´Ñ-.ó¼Hihû®È;MjÌ󎛎0ÇÞ8ËLN¥Îÿg©ó›çþQçÌ;'uÎAG“\%ÁJSŽùÉ1êQ1êæéXR²ƒ:gF3³Î/xòkk Ò d,©ó³FÖ9Ê#ê14#êùÐ̉>–Yç ÎiNÒ¤$uÞ›Ô9ÌKŸ:§¹PçïÔùèuÞE¡$ΙO^h8C½ØÏð¿EÆyJ!h!Úœ2MÑæ\ÀX¦9iskš£$5YÊÅ[ ãmn A™mŽ7ø‚+e¤O`šÙæŒüá" #€ ‚&is.ð°Ôöø"… Ì6§iÎE#çç ¾(6碓Ë6·-¤ÍÑr% y¯BD z²ÔÑæXÐ hó™#GÍ2‹õ¸¡üh–(Ï<Å4 s¼šæKmr¹äæ™™?×ù5x&¾ÿ2m}“¨Ï׃Š4 HÒ€4P¾dœ—¿Ï¤3í3i@¨U È8¯’qÒçÀƒïuþðžYó…Ñ-Ç\þ”Yxœ!•gž7YêèÎ<š#ÏCú|Å]Ç™+žú æùf§AÖù¸wNêüä‡Yç–:'A¿™£Î¯}õ;3yç4ílÖ9L<šyÌ^f”éXFK\êSçÈlŽQç0 u~&©sŠ,M$™KꜤ.‰Ýu~W‚:é˨ KOxßü$0 NK#“z˜žÌ¨&=LCt¯QA†µÙBò¸ž‹Bq¾èžw5oÐxŒsF´`x… Œ„)X C¿ÜBPç¹BÐç̪Ž6‡iž£ÍAš³´m^¨”ÆyZ!(K`Yëhs[JÚñ=Ì¿w… Ôɾhsê‹: Am¼‘Œh9ánÐæ^!(5m AI›CëÎ4OÒæ|3ã"/Û¼`!(޵¼BP“güÍluÚCMD³0ÓœYæ•ä™çÎQ]÷gÆ>ñqfÏÛ r½}ÛѾVoõ½ôP# HÒ€4 ×€Œs#:F¤i q4 㼊Æyhžo…à¿5ÈÃ|&͘Aw¼mVØbDŽ>w„g)¹çeD·t@tË‘ÃgXã<ÛE¡o- ݺ̢Ð.Ž:G&·£ÎIO3³›1$4ˆI3ïœYçu›Dv'”gægƒàfnx’:?, ¿Iœ/ºŒóæŒ=aœ§Òæi… IÚ4ü‘¤ÍsÍûL3K…… Ü¦´BЈ6Ç>!mn#ZRhóõAñs¿ZÚÜ+¥qn A™mž(e¶yZ!(³Í-mÓœ´yÑòvXêhó X–Q?¤ÍýBPç¶”Æy¢”Æù±XØa¬züls–ÞºlsÑâ‚&isFåÑæ(%m+%mŽ¢^.`q!ë¼?6+÷ºµiÊ<Ï4/5Ï<0ÍÛ£›ásV4Kýf™»ëë¸_øµn´çF[s©¹”¤i {qž½9×q®9—W2Ϋlœ‡æùšxž+ó¼~sÏ'=û¹Ùê°)M䞎çžÛèçyæyñè–ÇßgF½ýÿI‚:Ÿû_3ú½ÿRç£Þù‰¼óoÿÛ ëßf¨sæ'3‚fÝ`Rç0ïQ爒 uÎh K#ŸÙe“¦e†óùÈ:?Yç ÎIÝ’Àe|…¥Î@´OƒÜ%Ák³ÎaN2GÚe3_š&&ÍÌCajÒÜd# ÏuŽÈu>':¯ç¢ÐÀ8¿³yÄz`œ»BP”‚äE´òY"¯ôQ˜ùåÓæ\0ÈÑæÁbBj!(is˜æ~DK²”Ùæ¶”ÆyTšË6·… (}õ Aù†¥Íaš“6çŽ6߇´9Lód¶¹_Ðæ(µÆyz!è xK‚ý.ÛœZ¶´9´íÓæÌù?úçqpþ“_Ù[ ãÜE´ðøáÛ¶ÔçADK’6?ìúWÌ¢ÝGÆLsÆ5±M$Ì”y…yæKo:Ì\6îÕL.l6Ðuõl˹ºánÜnÍ­æV¤ìh@ÆyvæZǵæZh| È8oã<4Ï—ÄCñ‹ ôŸI“æ„þO›EÖC¶¹ÍéY ÷<( ‰QWjsÏK‹nY~§±æ’G>±‘-· ²¥î‹B¥qÈøDd‹WÊ(¥QQ( T©±Èdo‡\læc“\&ÁÌÜlš³ÌѦYKÓ¶[¿WlÎ63·iên€¼ó.Ì;gÖ9¨s[2ë<¢ÎAUÔùóu~J@³,“ùß$³—ΣΟ rÃuN³ºwPÊÉœqkœ÷º#eÀLï•6R~Æy`š‡-Â4/TË6'mÎ\s6'iÒæÜ–4ÚœÛNòž… IÚ|ísò A¹_}ÚÜ‚’6Ç<ø´yO‚ Íƒˆ–€6ß-¢Íì5jN˜mÓœ´9HsFýø´¹-%mŽˆ–$m/ÍÑæŒJ+õiskšc‰Fz-4ÎY°k³ÍA›¦¹—mŽˆ$.X]õâ<³ùÿR8šÅæiÑ,Qžy°g#¡üPžwÂ<óMö¹ÕŒ{ê“Lžèzú_lËAºénü›nͱæX¤lh@Æy6æYdzæYȆdœ·’qšç àáøžzØÏ¤YsíÔ9f¥­nÈnqæV±ÜóR£[PºH·æÐ!Ó­q~ËG?˜±Ì:u~S˜wNêüRç³Aƒ<¨ó×Aƒ<¨ó0ïœYç4ù-AÓæ©sš}QxHª–t-)ÛuŽ¢DR猳°Ô9(]—uN‚—$ïñ ÎY¾H³²ÏíA¾´OÓÜ ¨ó÷#꜑¤ˆ™]dæy¯³m\TªŒñ`œ e–IÖCQ¨5Îw‡Þœ˜—mNÓm^¨”zH+¥qîÓæ6¢…´9Þr îøÖC2ÛÜh¡v]DKPšË6·´9Lóóœiîhs¯”´¹-%mî™æŽ6?ûÏšwßt4‹Ë2O¡ÌÛ¯çLóÐ0÷Ms.ØÙh–kÌagd‹…‹C»õ¹Ç ýŸ P˜ç®(4Šl)±(”æ9Ë$}êœ$3©s–Onn©óY6_;IwQç/Yêœ5©sfx3–„”5cÈŒ-¡¡Lꜳ¥Îa8ç²ÎAp÷ucÚ’ÝÌ·Ôùc–:g‰ç¢»ßÞ¼¨—X!¨¥ÍYŠ‘0Íù™üì\!h‚6?öiûݹ ÜkšcÛHÖ“°÷isæ¾Ûlsì’ùi´9÷§‹hÙø’WŒ¥Í±ßI›ÛˆÌ…-%mÓœo-¯›íiœ{… mŽˆf›' A哌h¡~¸cis˜æ¤Íƒˆ–À8çÂMœ6G!(w\DKmÎ2Üd!(£‹b… Ž6‡iž£ÍÑâ‚tíK¦ã¦ˆfÁÂ×B,þÅ(Í⢜"ÊüÚe¾naÓ|Ùî×›+'¾žÉsoƒ];ßÃö¬®îlÜpkž5ÏÒ€4 dG2γ3×:®5×Ò@ãk@Æy+çî ÂÃòi?7˜ 9#çäϘëƒmáèšmÎx£ ·Ü7› þò¡l‰QçÈ;¨óï-u~=òΙu~¨sæ“:Ĭó:§ÉÇm~ù3ߘM»¯iÊ<-šÅE:E”¹Í#Í5ÐlvÀ$sëÓŸfî\Û€×Êç±MKèF»ño´5Çšci@²§çÙ›sçšsi q5 㼌ó>ßÎß7 !)Sgè½ïšU·½±°y^Vt‹_:Ô3χ™E6nø¼5Î9j±(”æy±¢Ð\dKiE¡4Ïi¬¶TQèÌ:¿à%³ÞyŽ:òÎi“²¶Ô9¢Jêyç¤ÎAeûÔy§ãzÛÒyÔ9Èsß$Î;î:¥Yƒéü;Î4hó… 1Ú<=¢%6Ï‚>D´6ǾÈÑæÓͺ,ÅþbF<³â}ÚÜ™æ±BPG›È/å>mn AI›£Ô§Ím!hÚœ¦ù¡ÈÌ AmÄ%#Z#t¢WJÚÜ‚bñÇ/MÒæA!è×¶”Æ9#R A±uúÔ÷Íò;ßR:e^¬42óÌZçsäÅ+šeVý–L{×ú»ðïóëæºqo®5·š[i@²­çÙžÿši ±4 ã¼ óÐ<ï†è¯dž×·2å…/ÍŽ}¦63º%½84IŸotÄT3ä•¿GYç7†ÔùH:f©óÔù« êüåuΜæË@вðYç4 iÒ8d1"³žIá2û™T.é\Žu#’™Ñu—¤/‰_š˜Ì›¦¡Iêœ&'ÍNšž^jó]&ÇÇ®øÿ‹ÄÏ3= ÍÑò@"¢%I›³Ã/í“+íT ”‹… A¹ ÀHªZÓ \xð AiœÛBPÒæ^DKD›#¢…´yÑ㜑;–6‡iÎEÑã<(‚´9 AA›û… IÚÜE´¸ls.ÜPƒ'¡Í™×ois/¢%I›;ÓœÇsWJÚÜ‚î;àyÓ]¹·CÍÆ.•TêE³ø ®t8Ì3ï¼ùp3`ò›™Zlàkâ`lÛ¯t3ÝX7ÓšOͧ4 HÒ€¯ç҃ΠҀ4Ð8qÞÆÆyhž¯„é·Ø(ÈŒásúµÏ›Ž]*ŒnÉ+-LŸ/³ísÎ=ï×DQ¨ÙRYQhÙâŠBc‘-%…²t’9Ú=A8»¬sæl3o›¦.ó·™ÃÍhÒÒu3˜4õÚç„Ô92½I“º&uNCÙQçÌg¼ K5Y®Y˜:G¶ø[Ã;Ï8OéMüÿÖ8÷#ZRi󰟹d‘BÐ$m‚ºló"… ¤Í±ŸHé[ÓÜË6O¥ÍûÏ #Zòis¿tgF´6‡iNÚœ¦9‹am!(is˜æÉls¿4 ÍQŠ™B… Ô"t\¶ù©Ž6‡iîÓæ¶1-\$b1n@› HÎ4OÒæ?õ•Ùøè{†yŠi^R¨Íâ ó2g4Ëæßf&üõ³ÌœCø:Èh¶“uÝ87КKÍ¥4 HÒ@! È8—6t~¤ÆÑ€Œó0ÎCó¼#ª§5°iãçúûÞ3«o?ºÄè–BÅ¡MÓç ot½Ù÷Êg̨wþc,uþÎ÷†Ôùˆ0ë|Ø›9êüÚW¿3ƒw~ ²ÎÎø‡êü*ÄL0ë<¢ÎŸ›g.õ©sDUĨs˜‹Ž:?“Ô9 HÆ^0þ‚Ô9 Jf“ôµÔ9ÈßuŽòFšuÞØE¡–8ßù¶f æ¢§ÓæÈ5e›;Óûßfø[ÿ6¤Î‡"ï|ÈëßRçƒIÏü§ò<¢Î§Ô9ÍAFR0ÏÙe³ ‘.i\R¹ç€:g‘"sfD[ê†$c0"ê”ï wb²\Ú2Æ9ˆs[Š‘0Í—8üQ[BÊX˜ ¢%A›³¼”´9Lsšü,7í ãœæ?|ÚÜ‚’6Ç¢]d›§‚r‚ \ mΊÍ]!(is,`6·¦95¸¸á‚´9"Z˜mîE´ìˆ–} ‚2ßÒæ0ÍI›3¢Åe›÷É£ÍQ ÚÜ™æIÚœÚå›ÉBPêm²?4Íc´9æ‚oXÓÜ/e¶9"Z8ù… ù´ùÁãH›¿o’… G$hs–Ñ2èø"… mÜÒ8ç"PmÎE#¿ôø ³Í2Û±Çßô(ZþÙ Ê|‘õ™ú?‰sbF®kOb;;èf·6nv5ši@¤æhFøž§–1ÅÏš2ÇØæ|Gý®4. HÒ@u4 ã¼Fó>ß Þÿ̈ÉÐІÑ/}mzýñÏ9ó¼ú¼Äø–ušb®zö+Pçyî¨óëH¿§Î¯FÞ9³Îû“:G~óå/̳yΤÎiö…‰È¢DFX°81FÃ|¤ÉÈK3ï<Ì:g¶t–‹BIœwØab³FÇ]hœ#ž%/¢%I›#æè'¦y:mž+}ÎFÑXÚÑ4>mÎÂÔõH›#ʆ M‚:Úå¬qÚ‹¡id›‡… ¤Í±âÓæ¶´mNÓüÐ mÞ;¢Í?´1-Œbcø†5w¢WJÚœ9üŒò A“´yÑòµ-¥qNý÷{vžÙí’§ÍÂ_šæáb­ìÀV^ù'c–·F/¹(¦‘W¾ {Ë$¥t¥­n0×NÓÐçÀŒ]ÇnÅöþV7®Õ¹qÕ~Õ~•¤i@hm À°L¼\Óœ?/㼆½™ÖÖœ>Oç9i v4 ã¼ÆOÎxø^㓌™ k ;â%³Ø†C*¤ÏÃüsR­v8ú<Ÿ@_ªçæä‰o·xQ(#[Hé’ÖM+ E¶Ø¢ÐOŠ…2¯º%‹BBêœå”$ I3F¤ûå³ÌfaÖyaêü%QÂbLf“Âf„ ‹3™PçÈ;µMêœñ'ŒAaJD“öõMâ¼ÃöòÇøßÒFÊÏvÜe²gš?œRŠ˜?¢¥>Û§ÍñÝÒhs涯Óm~ A¡_‚ò-Ѝ´9Mó£oyÓtÚæ¦æÇ²4A™wX°9éêgò—Ñk£ÕŽÒÍp}Þ kÞ4oÒ€4 HÅ4ÐJÆùåÒ¡t( HÒ@íi@Æyç¡y¾Êʨ!Ñpæ£[ö>å~ÏgÎ|TŠù"ZÞ4A!¨£ÍƒÌzÎgT ãœó}@hš;ÚÜ‚B,¥V ‚æhsj/Yš¤Í9Ä·'XzaÑÒ÷é¯ÍŽ<‰§ëKÌ1/!–…DZ;®ÏdK‚šU¶¾Á ½ç†;¯eøúôlûºÉ­½›\͉æD¤i %4ÐJÆùÚ-ñ]õ7¤yi@ZV2ÎëÄ8Íó_ãá|t†Í‰†3š.5Ã,±‘ÝR0ûÜ7ÐsÊ6O92Ï Ç·,¾ù æøqo˜a* 5›6Ù2ÝšÈ4ÎÙ ph2|å(²¥xQ¨%ηŒíÊáïuÜé¶œq~¸Ë5m~dтҴls[ 㜅 Ó A™mŽíávqû¸\(`Ajmž_:Ó‚nîÑæ[c‘b›(¥qî‚Ò8çâF²4¢ÍGç‚´yPÊ.¬XÚ<­4Ì6÷#Zhœ»ˆ– ôó\!(is˜æ¤Í/x¦¹Í6ÿÆœù—ÍÚÜ^‘aÞd, óÐ0ç?w<ú.3åù/î\–áëÒÇØöõtsÚ²7§ÚŸÚŸÒ€4 Hµ¤V0Ο©¥íÕwÑñ' HÒ@N2ÎëÈ8wÂÅCúù¿dبh(Óé¦G>4ëï>¶iúœôjIôya}‡?=jÏú‡l)VšÙR¬(”‘-ÅŠBil’:g‰#Ë™M£ÎAç¨ó÷m¾õc߳і:‘ÌIRÊ4]Y,Iêœ3ifRÍuãvÛA¯[#×Rç(­d7³Î{:1mÍsK¿b‰jæxGÔ9¢Jh"GÔ¹3Ï™unÍóç,yÎø“åIà&ÝMÃÚQç–8ßv\³FÇ'E¹æ¹˜–´9Iw æ­“6' Ïv~¿¢ˆ– ÛÜ‚Â8÷ A“´¹_Ê}Ô­²Í±Ï¸ï¸¹/™oisìcÒæÖ4Ç~ßžÆùG›ó³ A™mîE´D´9æ—´¹‹h‰hó°”´9#ZÒhs[Š}êËE´$ió³þÂæñ' AI›ó-ŠÞ7¾n–D'@û(ÃÜ/þd(Ér7¼E«õGÇcáòÏœiÞqýAæ´ÁÏ5Ô¹K× y¯`,£›J=XHÒ€4 H­*çoâï/! 5¶†4¿š_i ~5 ã¼ó>?ì?ȸ˜×FÔÔߘýÏxÀ,¸æÕéÙç¤VËŽoI7ÐWß{¢éûØg6ëüÚW¿3ƒfýÓ\óÊ?Ì@f¿üwsòÎiœ_ñÂßÌe.²q-Ì:gd £-Hëª(´pQ¨5ηqÞŒÑq§œq¾doæš{´ùѤ͟Bi¢”´9LsšùÖ4·ÙæÑÏ‚SF´6g£ÍÓ<Ÿ6"ZfØXç¶%«¤ÍišG… ¤Íašs±Âšæˆh±… hs¿” "ûGÙæ… ASis˜æÇ) hs‚Â8w¦¹O›_ê|Û?=nÚoèJ?K5̯M7Ì Ä²2_}»Íõ÷½×ç*]s¢kÎØíu\¿7Àš;Í4 HÒ@©¨¢q>»S©ßC?'ÍJÒ€4Ðúq^§Æyhž÷ăû<ažs/3Ó,µñuqú¼¤ø–Á¦ýz! ëâ[ŠD¸,Ö}¤9zôkÍ* ¥yÎÈ‹–* íMê±̵fTÉcÆv:§¹j©sD{8êœ9Ù,š$ÍPçoÙLm·4pI?ÓÐeŒHOdp[êñ"$¦»;ꆰ£Î™çÍ\ï.Ì:©ó‘-!uš;Fƒöqç‹l}K³F‡aœÛˆÓâhóÒ Aù½ò AI›Ã4÷isfº3Ûï]J)u´9Hþd!èö¡id›#¢ÅÑæ˜'Ÿ6çÛÌ®çÛIÚ<ˆhA¶¹hq´y‹Ï7øÆß\°´9Hó½BPÒæ§!cÿôâ… 4Îm!(³Í‘ÑÚ=š5ö½Í´ßÀ™æ Ë7 ]æeÎ(¤eîÞø°ÿt Y¾ažˆeáBØ.ÇÝmnñ+™æ8¿5еêl˯uÓÚú7­ÚçÚçÒ€4 Hm¡*çâï.ÝÛ£ÏÔq$ HÒ@éq^ÇÆyhž¯ø÷Èh$s¥¢m¹ùñM×=Æ%èóå¡^| ͼÈ<§‰^‚¾Í™ Ì“:ŸùO3äyDOu®¢ÐŠŠB—°ÆùØf;N sÒæ4ÍÃlsÐæKõ‰Óæ… AI›3Z†-ÉBPf›;Ú|},pÁ€ Œ­q… ¤ÍY¦jis/¢%¢ÍS A-m‚2ÛÜF´À8 AgÇ AÇ  #\ q-4Îm!(s/¢åh”ÊÒ8?ö.ç6¢%WʘÑrÚŸ™3mîE´6ç[‡ Ÿeß|Thš—f˜ÇrÌYØëLs¿Ð×+ÿ¤a¾h—Á次/VtÐù¼fMvF¤£›ÌÒo2µ¯´¯¤i@A-lœŽ¿w`#ìmƒŽoi@È‚dœ×¹qšçKàaþE™-5k¶”mž1ºå ?=dÚ¯…è–Râ[ša ¯ÒëVsþC›A0ÎÙruÙÒz"²åÙoÍ¥~d 2¢#ê¦ä9 z™%ÍhŒ3PÈHê—ô/ M6þd0³¨ixÒø<6Ì:§!Jš˜9Ö,´Ô9ˆãu>–Ô9òÎ-uþŽ5_™uN3–¦ìn0gI7GÔ92¶cÔ9 ^G3f„q#¤Îi3†„1ÍbRçÌ÷&yM3y]Ø>uΈ“bE¡ÌgÆø=`Ù Æy3óXDË‘O˜% ‚2ÛÜ‚†ÙæAD˳6¢……¦,6M-%mŽí$mÎŒw?ÛÜE´0ÛœûÊf›{… IÚÜE´D´9LsÎ ß à‡ÿó£‡Ü¸gÊÂͽ¶Q±Ò€4 ´¬ZÀ8ÿãŒ30Öü´ìühjJÒ@55 ã¼Añ@¿ÆÝ2^jÚx)ÛHëwË«fénCóés?¾ÅÏ?¯Ð@_tÓáæðá¯DÔ9Ísf÷u®¢Ðò‹B—$qÞóæf;Ló… Ç ßœ… ˆ†¡YÏló¨Æy`šçÓæ$Í×>ÇÑæ0ÍI›Ã4'mÎ…G›³<ÕÒæ0Í}ÚÜ‚"ú†… ŒÂ‰ AÓ˜æo†… Ž68±‚2Û¦ùXñisÆôXÚ->mÞ‹+4ÍÓhs.Ê$ Am¶¹G›Ÿtç\³êž¼8–d$K†yJ, Mó^¼×Ü1]Ñ, v-úÛ³E5oÆô·u³/ HÒ€4 Ô®`vwÀXªÂ±~o>ÍoíίæFs# HÅ4 ã¼AŒó<ÿî‡4˜aQ¶ÙÜhÛË“Ÿ˜ö˜ç1úñ-%䟗á²åI1ý_œ/ ed‹_ òÔ9(cÆt •±$‘i®’L¦ÙJRÙQçŒþˆQç œw ³ÎÂÌíí½a¶eÖ9Œ^¾4~Ion©óYMRçÌÿ&uN³™…š¤ÎWGÁ&£OX¸Iƒš‘(¤¼i\“ú^ò`ç[ŽÉRMtïw:nãÜ/-@›/ãhs|vç´BÐÚ¼P!(óüBPÐæØW>mÎÜøm… Ûy… 4ιÿÑBÚÜE´D´92ê“… œ[¾]d›‡-¤Í¡Ÿ6ç .Ûœo.Ähs¼ÙàhsêΧ͸n†a¦_^=Ã|±®×šs†OÏüùªÑο؞÷0VÓÍ´n¦¥i@¤i@¤i@Èždœ7qî`<䟊ñs™5¥î~å[sèùˆ™X fyšîg-û¥…Ìcf‘a8JÉ@_i×qæO÷}D¶Xê<ˆl¹ü…yæ²çæ™Kaœ_F¶\4ís¡Ù‚H çQd ŒsF¶œF¶Ð8w‘-Ç3²%4Ι]MóüÈÉ.²¥¾‹B—J羉^â¿ÆyÚ¤¹¥Íaš“6w-,]!Šh hóÕX £ß/¥qn ACÚÜhaY*ãkb-®”´9Ls.Bp1ÂÒæXœØÑ8.¢…E­,lµÙæ^DKD›§‚Ò8w… ¤ÍÑrdhœû´¹-Å¢ sÑ’¤Íi~ ôÍO~°°Y^n$‹%Ì9¸`ŽðX\{§1fÔƒs3{~jàkÍóضÅusœ½›c͹æ\¤i@¤i@¨ç hœ‡ôù^xàÿ¾ LšTWLxÑ-Ãræy’@o!½ã&×›C†¼…2²¥XQ(ÍóóŸüʜǬóÐÝ0ê„&tDÜf$JDü¶Æù75ktÜþÖX!è’GÇ A;1¢…´9÷å@›[ÓÜf›?g)xÒð¤â™mNJž´¼_Êm²… a¶yÑ2Ãîç¶D>É|úQ!(is˜æ¤Í™#ï²Í¹¿Óhs¿4I›*M¥Í¡.¶ø´ù)x‹‹29Ú<ÈØ?~ò{fåÝo…iŽŽõÝKsYžkGnQiA¿ôÓÏ0/b˜sk¯Sî3w¾ôu&ÏG ~}¹Û7¿n–u³, HÒ€4 HÒ€4 HÒ@v5 ã¼AóÐ<ßþ_6¸¹‘9Ãjü´OM·}o5íÖ£[ªH w?îÏæ²g¿‰¨ó(²EE¡ÖŒ.TJã|áÍojÖè°óâ… IÚ<¯”´9¾§O›sÀÒæ0Í™mÞd!(ŒóÀ4OÒæ(`Å¢'¢BPG›£Ô§Í÷a!(:³Ã¸WJã<ˆhA¶¹-u´y°ˆÂ7’… ŒúñisÐò­WºÏ5Ó 3ûó óÈ,oÃ|qD³\0êåÌ2r=„íü•n޳{s¬¹×ÜKÒ€4 HÒ€4 HÒ€ˆó6ͽؖ•`¼³#3&Ö=3¿5½/z Ñ-WÇ t?F‚ÿ^ˆ@o²D”dn@é®°ÓÍæô©ïŒléû×oŒ‹lIRçŒl!u~†ÙfG‘- ‰ýÈG3®ƒ±>uN£õÀ±ï™`¾î–3MÙˆ:G4©óÝuŽ¢JG“Ž&%ÍlnÆôDÞ9 aÕ=@w'uÊš¥˜Œ+±Ôyßu~^Ž:'ÁMSšQ(ŒD!uNÒ›Ôw§ChœnÖè°Ýx³äQ0Î~Ò,Õ'N›û… IÚ<­4I›ÛˆÒæ ê¹®”´¹-%mŽ}âÓæ… A¹ó Aß AgÇ AÇä‚Ò8·… 4νˆF÷Ð8O+¥qî"ZH›S_§!GÓãﯺaΫõv½ÙŒ~äÃÌœo2tý`ÄÙIºAÖ ²4 HÒ€4 HÒ€4 HÒ€Œó ç!yÞfÀS2?2ch]5é ³ìfÃ`ž(ßR–>8Œ°£,˜ ó¼ÃFÃÌþ_0Wª(´¤¢Ð¥iœ÷¸±Y#0ΟÌçÇL³¹æŽ ²Í—õ²Íƒˆ–g­q¿2#ZR A3cis˜æ¤Í]D Aiœ»ˆ–X¶yG›£XÕ‚Úló\DKD›*%mŽÒæ\ðp´9K_]!h@›£ƹ_š¤Íc… 0Ê]DËÑæ˜w¾%\ìIƱ\Ëù¯4’…†9³}Oÿ‹¹ëåo2sŽÉÐuãߨÖ^º9Öͱ4 HÒ€4 HÒ€4 HÒ€Ó€¢Z²cžÿ¦ÀÄ ™ ™1¶n}ú3ÓýÀ‰ÖÔkžž+eösZ‘è&GÝc.~ꫨ(´_E¡ç”YzlÙE¡ïÔùèu¾©sD…° rWf}ËF‰0‹›Ô9 -™Ñ½µOà ŽQçÈøvÔ9e’Ù$´Ij¯ êœåšÌ ¨säˆÓ¬¦iMóÚçÝaœ7ctØƹ£Íiš‡Æ¹O›wö²ÍÓ<(e¶¹-Ïï¹ö9/Úï¼®WÊmr¦¹-u´9È{Ÿ6ïÉBPÐù,å~³… a¶y`š#ÛÜF´¼‚"kž™ó| *Å1¢å€±ïÚ¬z—m~¨£ÍñfO›û… ÇÙBÐ\¶9sòýBÐ=ú¿`:n|=LóbùåÌ2‡¾ýâ\ÿmŒ¥ŸÌ0w†ù’ 1}oz%3界]+¾Àön¤›cÝKÒ€4 HÒ€4 HÒ€4 øqžã<$Ïçƒ9pyÆ ‘L]÷Ìœg޾ô ³ÐÚË7Ði ú†" Æus¥‰I½óv7™“o×\þü<Óï¹yæÒÐ<ïû4#[¾6* uÆù(ç•ÛŽƒqΈ 6·… ¤ÍašwN+M¡ÍÓ<6Ï/iz ¾fs6ç"#nuâUWJã<­”Æy`š´9cuÚü=kœ³ì5ÑBÚ¥°>mÎEFø$ Aiœ³ô¤{?6}o`˜Ì/‡Ž}m—Qúé s.FuÙ}¬óØG™8—dðúð&¶yÝëæX¤i@¤i@¤i ©ç2ÎÝäÃ$8ãÇ $ o| œò–éÜýúÈ<Ï#ÐY$êç ûÔm“zŽB_¤ëufï+Ÿ5—9óü™oÍÅÈ:§y~!Ìó žüÚœ÷ÄWæÜÇ¿2ç<ö¥aÖùY#ëü¡ÏÍéÌ£†ñIj˜&(óªO¼çK“.f¦5³­™qM#•†*c<çÁI®$–iÀ’`&ɼŸ¥Îß±fí^£fÛ|í^¤ÎA@ï :¢Î‡…–uŠš45³Î·èÿª5Œ»_>Ëf|wuÎøƘÌf‰&Ë4êü¥uî…®ê|™?€8ß ¦y3F‡mÆÅLsÆ´0¢%YºBÑÐæÌ\·´92ØÚ< äm!(³Í… –6ǶÆ"Z°¸?,mÓœ´ù¶Ž6ÇþÛûÑE´´ùÛmŽýžG›§‚Ò8Ï/ ŒsŸ6?ÞÒæŸ˜d!hï±o›Î;Ü3ÌýÅž<º¼BÃ|A˜æžý ™:CÑ, z½xÛµˆnŽus, HÒ€4 HÒ€4 HÒ€4¦ç4ÎCú|GÿlP3¤á òbó6ñ™ÏÍO2íV¢[R#\’:£*Љ¦Sè~§¹à±/rÔ¹ŠB­y½,óMohÖŒó\DK§ã`š“6?ñK›/Ÿ¤ÍÈ–Õˆ–d!(³Ím!hhœ… ¹ls[ŠE¿”ª–6‡iNÚÜE´ØBд9.\DK’6w-M‚’6‡iž¤ÍOÁBË®ýž56šæ¹7#ã¼H õ,ÏåqŸ0ç±³ÔF×™KÇÎÊô¹¤Á¯ã±}¿ÕͱnŽ¥i@¤i@¤i@ i@ÆyFóÐ<_ÆÁ' nŽdÖø:ÌBk!£¹9z ú2[ßhN˜8ÇšçŽ:gdËO}mÎ÷¨ó?!ïœÔù™Ž:à3sªOßKêü“ˆ:g1¤£Î$uŽâÈÃ-u>×Rç,—$uβIKƒlÎQçsò¨sFŠ’¦é˨\’¢&MMªšt5)kÇÌøö©sÌ1ê4 n’ÜÌ'ÙMꜤ7óÅiœ/Ôm$ŒóÊw‘­o‰E´¤Ñæ… A}ÚÜ‚’6ÇwNÒæ©… Ø~ø=$ió€Öçþ‹ Amºß§Í÷a!(Þàœpn\!(ó ô}ûAod›³ôÈÉÁÛ|Ó YêhóîúÐlÐûnæM˜åMÑå4Ï‹æíV¿Êl´ç83ö‰3{îÈÀ5¡ŸnŒuc, HÒ€4 HÒ€4 HÒ€4ДdœgØ8Íóe`’ÌÊ€Q’Ilð³ÍŠ[ ‡y~UžNÂÖ7óhÜb1.4'½,ô…º 1½.yÚ\ò×À<¿h"[`œG‘-ˆkÉRQ¨3Îi€W:|ãÜ/MÒæi… IÚÜF´6GÜL×¾/ÛøF´Ð8ß´ßL»Hà‚Ò8/Tjió¼BзíB…O›3>gÿ1ù… MÒæˆêI‚þaô›fÙmnŠeïÍ.·ty‚0÷Ìò ôÓ{#ƒ‹K8FÍò‡s6w¿òm&ϸ0¢ìȦnŒôßuó, HÒ€4 HÒ€4 HÒ€4@ È8ϸqšçía&<˜Ó$“fØmÏ~a¶>trhž‡zŒBoÂ@OƸ$)tk¢ðúßnÎyø3›uîÌóóŸüÊœf[êyçg>„¼sf“:GÞ¹Ë:ÿ#©sä3ۚŤ™yM٧΋¨ó÷#êœå“$œI:YçslÞv¯³mþönÈ:g7#F"êE—1ꔵ£Î{:¿|¦5–i0Óh¦á̬sÆàfü ‰næˆ[ê¹â¤Î­q¾ÉˆfE¶k˜kÞé¸ ÛÜ‚"¦%Wú¬YéÔçÌÊÈT_5¥”ßÉÒæøŽü®.¢…ä<·#•6÷ AIáÛBP›m/ef<³ã™!Ï,yšæ.ÛÜÒæ0Í9A!è»a!¨£Í熴9 AA›û… IÚœzØñ¢§ÍÂÈÔObIÒåMı2Ìiš/½ñuæòñ¯eò‘‘sÿ?°ÛëæW7¿Ò€4 HÒ€4 HÒ€4 H¥j@ƹŒs« ¿Æ¸1#J&ͱ¯zÚ,²öÀ"ú€8ž—ƒŽˆ‹(ôN[Þ`úŒ}3ÓE¡Ë ã|ãáÍ‹lç>mÞÙe›' Ac A‚¾hcdXbê AI›;ÓÜ‚’6iÎÅŸ6·… Ì6G„ ³ÍY¤ê²Íƒˆ–7í"l!(&ò AI›Ã4gy+ãt\¶ù¡ˆiá¢ÇáˆhaôC’… Ž6?fÊfÝCîÈÏ-O5ËËÈ/'iæöMŒÕ®2›ì=ÎŒ{ê“Lž2rÎÿÛ¹n©7Fú9ÝDKÒ€4 HÒ€4 HÒ€4 ˆ8—iž·psá<Œ_2b¦dÎ(»îî9få-ݳÐáRAŒKúBÈ¡Þé‚'ÌEO‘-Ž:?‘-¤ÎÏö¨óÓøÜRç,~<éÏŸRÆ'&©sd_Ôù‡–R¦ñJ–Fì!ãß·Æìcß³„óþ¤ÎaÜ’|ލsÑuþv@ÃüuÔ9Ma_’®f& 1U¬sRçÝIÃ`¦ÑQçˆ;!ÁÍøKŸ—£Î“Ò¹…ŒsÒæ¶”´9Lómþœ¥ÍW)@›¦y:mžVÚÛº¹G›ÛBPÒæØ/Ûaÿ0Þe›3+>6 AÚœsÐæA=ç(Ñ2 ´yhš3ÇžÙæÇ²o°ô ‘¯™¥{Ž2±8–ä¢M2Š%‘]Ðå^$‹5˃Hg˜·_ã*sø…š{f*š¥Ïù¯`Û–ÖM¯nz¥i@¤i@¤i@ÊÕ€ˆs™çiæùÁ0~h`#%s†¹?—“ŸÿÒlÄí0Îû—o §QèELôuö»Íœõ—3Wjó®oÖX¤çÍ6¢eÑR€6_ÍÑæ0ìÚ|º¥Ím!(³Íað3^&F›÷ hs. pq€‹Œ¨±´9LsÒæAD hs˜æ; y#* hó·ÚÜ‹h¡q^¨”Æy~!h>mΈžmÏ}Ò,ÜåÚÀ4OšåiÙåÅÊ>“tyH˜SûËv»Î\5éLŸ 2pŽÿ ¶qÁroŒô󺙖¤i@¤i@¤i@q.Ó¼à ̆-1æeÀXɬqvÊÀgÌ"kȵzh¢ûz,EЉ,ôMô%{Œ0GŒ~=Wʼó:?ëad?ô¹‰¨óûƒ¼óˆ:}ÌèÒȤ’I'“<'uÞ›ÔùDPçrÔ9éfƃ°”ÒRç  iè2J„9Ü»#›¹Ü»Zêü-kÓ&uN“˜Ñ$4#ê6iìˆ:‡áÌlpf„Óˆfü iÔ$¼iXÓ¼^žÆù†Ãš5hœ[Ú¹æÉBPK›#ל-«…-ÉBP’ð¶44΃BÐ\¶¹-½mn AQÊÊBPf›»BPç4Íóióí"CXºßÐYf©ÍGÆMór£X"³<Ç- Aã ágŽºøqD³ÌËäñž‘s9£ÆþTéM‘~O7ÔÒ€4 HÒ€4 HÒ€4 HN2ÎeœÕ ˆ%0^Ȉá’I3íö¿2;}g`žÇ ô–¢Ðs&úš{O0§Þó¡9—Ô9òΙuNêüLRç~nNcÖyH3ïœYç'8êü®uŽŒìÞÈʨó¹Ö ¥QKêœÆ- Üý,uþŽ¥ÎIF“:ïå¨s”[:êœD5MbŸ:gA& eF˜0Ê„t6)ín êœ1(9êü%KÓ8oßuh³Æ"[ŽI¥ÍW>-G›»BÐ$mn#ZH›ã»uE{@›´ü¦ýPJÚÜ‹háv*µ´yJ!(÷¥O›s_[ÚÏäq¡óö7ØÖÍ[âÆHC7ØÒ€4 HÒ€4 HÒ€4 HÔ@“¦©„"¡P0$~…qm†L˜LšlÃïϬ¾5¢[V¡yžf ')têyzÓyèíAo}ÚCæO Îÿ„¼ó€:ÿ" ÎøÌœêSç÷’:ÿİ8òXP礔]Öù‘¤ÎaÆcö°:?d|‚:‡¡›£ÎçDÔ9Ë-iïf“¬ÞÁRçoXó˜Yç4“Y˜Qç ´}ꜙá4¦IÓ¨¦a͘”À8¿®Yc‘-n2 ‚2ÛÜÑæADË‹–t_×+%m+%mÒ|3‚ú´¹-e¶9¶—Ùæ¶™ïÜÌ€O£ÍiN’ŸûÖÒæ0Í“´ù¡x €¦ùáÈ£çˆû ½œN¿f¿gãC#ÂòJÆŠ0^„Ät¯³ ©óÝH£ôrg˜Äuó˜Ô9ÍdK£8ÓQç=HƒÚfVx7PÜÌg†¸O¯t8ˆóõaœ7ctØ|´Yþ¤gÍ Q!èsfÕÓŸ7«9ÚÜ+¥qn A™mòß%F›#—´yw|o~f¶s{,mŽí#mD´€6i¾ÃG›ûf·ëQʘ/¢…Æy¡BPçÉBÐCnžcVíukÓTyÁ’O,_-Ìã£X|ÜzÝú“̤gÍ’sôŒÓ ­nh¥i@¤i@¤i@ª¡ŠŒÓj|ýÍú8ÌŠM0¾Ì€1“£þF× "vx %\8±ƒ )á°Yån0(Wò™ËØ›åÔÜ«÷7'øk&Å žo?Ç6o¤›YÝÌJÒ€4 HÒ€4 HÒ€4 ´–šmš¶ÖÕçÔöACc>ŒË2hædδ»ëåoÌÞ'ݘç)ze&z:¾âö7™£o˜çuTº ¢Z\ûšæçÝG¥ÒækýéE“£Ís… ¤Íc… ¤ÍAš³È4¯”ÙæXà‚€-¥q‚æÓæÎ4çb,mÓ<6‡y¾Ñ1÷™mfyuÌr§»U¶¸Þ »çÌ=Ǿí^^÷µ} ùÑüHÒ€4 HÒ€4 HÒ@£i@ƹˆóÕÌ£0~̨¹“)ïÂQ/›Å×Ct‹3ÐK5Ñ‘Km‰b;<ÒØ'í¿dr‡.ƒÍžW>oNEÖ9©sæÔù'u~W‚:ŸLêyçÌ:Ÿ0×fn»¬sÒÑ4|iü:êœñ#1ꤵ£Î[ÂÜošË$³i63â„Q'¤ÎY´ÉÂMF¡0ëÜQç«ôqNã¼£ŒóU Ðæëœ[˜6ßø’üBPÒñü¾±BPÒæØ.Ÿ6·… hóÀ4hsæÅ»BЀ6ßì;â ³ÂcüIªœóžN–û,Ñ¿ûÿïxÄífÊ _fêxËð9õqlû"vó¥íÑ…4 HÒ€4 HÒ€4 Hµ¯5M5áµ?á­1G09vÀøg†žÌzcýЬ¿Óf/‹è™èÅô¼Ûüñžë¢(tÕÞ ÎQˆÙœÑ¡û fUd›¯vÆófõ3_0kœý¢ hó醯ùz,e¶ù…È5OÒæ0ñI›3J&F›ç‚‚6ÇÂ@Ž6 AQ–j³Í½ˆç… A·¿øYӱ˵EâW åɼòBf9h:¬Ñßœ>èÙÌ_:‡ÎÇ(°Ö¸né3tÿ" HÒ€4 HÒ€4 HÒ€4Ô€ŒsçUÑÌŽõ0>–ñ3¯áM¾©3¾1ûŸvŸi·Ìsèi&z é·ezßüv@#ïüçLJÔù1Ì;¿ýCìó#I#ïœÔùa!uÎ nÒÑujšF0 afwÔùlk3ß›ä5 lRç;XêüuŽ|ðž>uŽâMRç,â$u¾Ú-dœ;Óü¬Ìš¡qîÓæ¶”Æyß—m¾zmN*>F›‡-¤ÍmD ¶Í‚’6GÆ;·=( ²ÍýBЀ6GD ¨}î˃@ðopÄÝaË)/f”3¿þ‘éºËh³À ýR Ðrhô‚Fzh¦w=ôsüÚ¼sRçÇÝõ±±ÔùÅ©óI>uä8ö=KMÓ&E½OH³“ñ$$®w#u#yç¡uB›¤ö6ȧ M3š¦4©nF¢°ˆ“¦õêˆjiÇ‚ÌfŒ›Ž "ZBãW÷+Ò€4 HÒ€4 HÒ€4 HI È8qÞj€)r.Æ/2гa _6v¦YŠÑ-Î<÷ÿ™ÇQF/b¤Ó˜]x­f§ §™ãïŽSçG#ïüÈÉš#uÞ›Ô9òνõ}sÈø€:gF7©óýu>:È:§aLÚšq%»¡$3 Îß²q&Ìg.øv¤Îa@om©ó×ê&5©sšÖ«#ª¥ÝêW5ktØt„¥ÍƒBÐm!èº^!(ió ûγÍCÚ¦9©÷X!(¾[*m>ä0¢%Ÿ6w¦¹O›ï~í,³Ì–# ç“2É‹åvÎSô±ÇqSÍÓ¿–ižÓ|® t“ª›Ti@¤i@¤i@¤ZÒ@«™¦µ´Ñú.mwÂ9ã¿2ϳaž{òc³ñncÌË_Šá襘è…JF]¤#šÃ®wàdÓgÊ\sì]‘-mXº‰sf6ctè6<µ4I›§‚öH‚:Ú†¿O›ÛBPf›§ÐæiÐæ[þéI³ðÚW¹?’ežîÿ/´0RÀ(·Ú€F]³¿9÷úe˜gÇ0ç\ß± ®Ëmw]Ö¾×¾—¤i@¤i@¤i ]2ÎEœ·º`’lñ­Ìól˜ç÷ÌüÖv΃¦Írk ‡&z%Fzfz§î×›G¼fŽ ³ÎI5ÅQçÔù„uŽÌîý‘ݽ³ÎQ€IÃØQçŒ-a| K3#ê¤vŒ:GÙ¦£Î·èÿª¡ims™6gÐ8hóé–6_ϣͻ&ió~È6÷#ZBã<¿ôu[ºCD›‡…  ëm¶9H{Ÿ6ßôýZN)¹R©QnµàëáR³Î¶#ÍΕiž-Ó|®ÿ§4ݤKÒ€4 HÒ€4 HÒ€4 Ô¢ZÝ4­Å ïÔú'Ì’Õ1Þ“yž óœó|åøWÍÒ]šù;;óÜÿg½X>ºO5{äsûÕû›íÎy¢M‹B×<’Æ9Š3›1:†ÆyÑd›ÛBÐ ã… ñlóx!( }WÊRSþŒ›ÙqÈ›ÆÒæX m‚¾‚ζ‹;_ýŠéÔ}¸Y I•£É å)F¹[D¡ö>ñns×ËŠfÉÐù‘]gëÚÛú×^ísísi@¤i@¤i@J×€Œsçm¦'‹c<Ÿ!³(ó4íøiŸšn{Ü óüo0Ò é%šékï3Ñ9ñ}Qç“‘u޼óÃ-u>×üÁæYç’:GÞ9 0u¾×¨ ë<¢Îa03Ö„Yç4žIn3ëœe›4§™#άsRçkÑ8_Æy3FÇM†[Ú|]G›Ã4ïBÓ<¥4I›ó{äÓæ åCÓ<*…qN¢žyîÜVG›w?ý1³ÐW›A^n슋áIå¾Qîæ1D³\0rz拌ÿƒíÝ_7j¥ß¨i_i_IÒ€4 HÒ€4 HÒ€4Ð6h3ÓTÞ6^kûÊüweÌ8Ê´QxÏÌyæˆó6íÙ7Йžf¤ÉHwFmŠÁ»Ô&×™}¯›iÍóÖ, %qž—žÌoâÿï°ÉõñBPÒæ0Í»ö}9^Ú/(íŽbÒͽlóÔBPG›Í/¥q¾Çð·Ìê{OJ7ËÓJ^c&y³ÍÑBÚ|þ3â´9 AI›÷ðhs÷©´¹WÊlóÝ¢lóÙ¦ÛI›ö«]™ošÛ¸•t’œD9ç!u±Ã-„Øææu D³\mn AAÌ“œg¶ù®×½aVíukhŽ7eŠÖ 9&¹77Ÿøç;Ž27?öQæô­sÙ¼Û±~¯·–»qÓ¾Ô¾”¤i@¤i@¤i u4PS¦©&½u&½Ö÷3L–1¾á4/S&ã5“ß4»"ºeپሯå›éŒz ¨h—·Í.¸Òe¦ÇIT¡(4Ù²ó´È“2Š6;n44¢ÍýBÐ/yÅtë÷ŠI‚Ò8Ï/}Ý‚îàÑæ»ZÚüm³M¿Ìâ^Û7n¥Gæ„Ñ9hò¤Q˜æ}ÍËõ5vŸ™:CÑ,<§ Ä6ÏWë×}?Ý{HÒ€4 HÒ€4 HÒ€4 ¤i@ƹˆóšÔÌ–0ÞÌ Ñ”)³<9¿“žùÜl¹ï83ÿ20ÏÝ(d¤WD¦çrÔWÝùfsð˜Ùæ°‰sÍ¡·¾oÿ¾!u~Ð- ê|tŽ:gæî#H¿Rçof†3ë|{PçÛ‘:G¦øº…ŒóRòÃß¡qÞ…… ˆiñ AãÙæñBPf›o=ð5ûHÀó;ñ»‘Œ·´9LsÒæ÷€YpåË dÊ—`'hrg’G‹áÜ-µöUæ²›_É´¦3zû Û}‚nš(!]lýkÌný_ŒE¶Ð8?p,âZÙ²#[Š…2²Å/ ed‹3ÎA·û¤{¹ÿÞqÃël¶¹O›;ÓδŽ3zîú¶{7] [îZ¨}©}) HÒ€4 HÒ€4 HÒ@Ûh@ƹˆóšÖ ˜ßbÜšQ*Ó¦ãµw¼mVèz™i±¡!›j¦Wl¨_lÚ![½Ûq÷åSç4ÏÇÀÇvo¨º¶¹¡Ó~×~—¤i@¤i@¤i e5PÓ¦©&»e'»ž÷'̘~5¢2m>N~î ³õãaœ_˜3Б^Š™^Š¡Æ+m?Úì?ê­(²¥Ò¢Pšç9ã< S47ÜàÞ?Iœ§Ñæ›]ÓÆ9 A7ï?+*%mÎrRK›{-¤Í×?ê>,ôK'ôÃ,òâyŽ$· þxÿÞiíþæŠ[feZ³>O½m_¾ž¯3úîºç¤i@¤i@¤i@ð5 ã\ÄyÝh¦Ì‘?fؘʬ!ùÇËŸ°Ñ-¿ït¡‘^ÀLÏ3ÔSâ^òòÓªºãÚÌN—=ó<È:÷#[u¾×¨uŽÌð]Bꜱ(ŒGYÄùr!É]á?;vb6ì;Ãltñ c AI›Ã4'mÞãÍ{¢ÍIÀœe–ß~L"Þ&$Èó"V\®|>Ežn”sáÆ&»Ž6ãŸú$³Íøyé1lÿºÁÔ ¦4 HÒ€4 HÒ€4 HÒ@#i nLÓFÚéÚ–ÊO"0g¶ÇøGÆMªLš“C§Î6+n4(fÖúÆmÎP/LDçG¾ä›ê ÀèÞèÈ{ÌÁ0ÎsE¡ïš}mdKzQh,²Æùú4Î FŸ¤ä²§ü,óÀ4Ÿa’… ¤Í·èÿjD›oíhs‚:Ú¼ÇyÏ`!àêüŒx/‡<Š¿)@†y°H‘Ü×îÿ_zïsP4ˬy™<.q.¾ã7º®U~]Ó¾Ó¾“¤i@¤i@¤i 65 ã\ÄyÝi&ͺË<ÏžQ7åù/ÍöO0¿_ê‚`tâ(lê–L¨§Ä¿¬°ÕH³÷õoTTjó‚Dw±ÌpG}ƒ~ßàZkœ*¥qž_úº%Þ×9ün³@gô.¾¨1îŠä¹ýîwìÿ¥×éo®šðZV cm÷¬yëæ®6oî4/ši@¤i@¤i@š¯º3M5éÍŸôF؇0Í—ÆxEæyöÌsÎù©W=eZþâœîŒôÈL/ÍPǾäG¿tXýJ³}ßgÌ, ½9^šÙâŠB×ïCãkatKd ;#=ùÏ õÐŒ^hÅKÍg>nö}¾ç È:‹B7lã|QçÝ´y÷‹§›¥º mšª/d–GÆxÎ/´zî=ÖÜöìç2ͳkš3úê,]gtc, HÒ€4 HÒ€4 HÒ€4U È8qÞ€á³8Æs2ϳkžúË{fÍÍ›ß-vŽ7ÎÅ¿£iS=A­;Ó9iJ/yžYkŸ‰fÏ‘oGÔ¹5ÎË!½S~vÑõ®qŽ\ó6ßà¤GÍB+õKÿ»eâþv»}áï£;oþØï1æÙ5Ì9÷ÿÁØ/«7FÚn=HÒ€4 HÒ€4 HÒ€4 P išJÜ75ãg~Œ;ežg×<¿ó¥¯ÍGM1¿[æ9GÌD/ôÿWb®Ÿk:m8ØìtÕ kžox,Œó&i÷âæý¢ë ²Í¯˜iVÞs¢™Ÿæz3Í/ºýØ?+¬•¹îηešgÛ4ÿçÌê:* HÒ€4 HÒ€4 HÒ€4u È8qÞЀô+ŒA2ϳkžsîÏö¼é¸üE0ÏÿäÐLw¦zÉÆzšá˜í .××lvê#f#ç9ãºtºÝÿŽë4Ý.xÁ,ÞõZïo•jþ§üœ¿Ñ¿çöǶûßb&?÷…Lól›æïàxY%ë7FÚ~=HÒ€4 HÒ€4 HÒ€4 ˆ8—iÞЦ¹’ƒôGŒŸe g×@ýà\³vw˜Ða»3Ò}SÝý{й^‚ѾØ:J¤Û á .‰Y°óÅé'Õ÷¿kÚ¶xÿ›·Ú#šå”+žažmÜóÿ Æbº9ÔÍ¡4 HÒ€4 HÒ€4 HÒ€4h 3Æ©&\=L¡^ÿ–yž]ó|êËߘ}޽ÆùÙ‰á™é¾±^²ÁÞ„QݤAßB¿ŸöÝóþ·Ü¶¯´ÁUfØÝ³ešË4Ÿ‚óâïuÔuR¤i@¤i@¤i@Èi@ƹ¨óLiæÐF_È<Ï®yι¿hÄ‹fQF·t€‰œ6òŒug67a°—d\Wão$¼ÿ¿À6îxÐxsû _Ê4—i~5މùtc¤›ci@¤i@¤i@¤i ®L™¦š|¨˜D+`¼)ó<ÛæùÍ|`ÖÛ|ˆùÝ"gÁ’y.ó|Ü› ·j~ÛþôÊG¥&{3>s‘Nçšó†<+Ã\†¹Ó@߬ÜÐh;uó. HÒ€4 HÒ€4 HÒ€4Ð’i*ã\Hh¦ùÒ3džË<¿Ñ-‡vùýB0Ï<->šan7ËŒwŸ›ü>øÿ×Úøj3úÁ÷ešË4§=uXKÞ0èoéT¤i@¤i@¤i Ki*ã\HÑ §1þ"ó\æ95Ðÿ–™f)F·¤˜Õµò¿í}ÔmfêËßÈ4—iN üc›,ÝÌh[uó. HÒ€4 HÒ€4 HÒ€4ÐÒi*ã\( Oÿ‡1Ræ¹Ìsj`ÂSŸ˜nÛ3¿mwj tz»–Å?¯#¢Y.öœ sæN@¯k·ôÍ‚þžn@¥i@¤i@¤i@²¦™¦2Î¥&4êlŒ_d Ë@¿gæcÑN瘋G¾ Ê\”¹¯ë-¥ó¶nd¥i@¤i@¤i@¤–Ó€ŒsçÒ@€9µ*Æ»2Ïež; ô9ç~ó{”†þæ÷0·ÓFÌX÷Möÿ^èïà_³kÌØG?i.ÓÜi€Rg覨ånŠ´/µ/¥i@¤i@¤i@œdš–ašêÀÑC À¨Z ãY™ç2ÏMzÍ,³ÒE0ÎOªÊøí'›ƒN¸ÃÜýŠ¢YtÜEÇݰ/öÕuI×%i@¤i@¤i@¤i :q.ã\¨@0¬~q‡L<™çN·=ó™Ùbçæ7¿ƒyÞ‚cñNçšËn|I”¹(s__Cw›éƨ:7FÚ¯Ú¯Ò€4 HÒ€4 HÒ€4 HÔ€LÓ LS<:xBò|>˜WežË<÷5pü˜<æù›=ºödÆ=þ‘Ls™æ¾æ@o«è:¤ë4 HÒ€4 HÒ€4 HÒ€4P] È8—q. 4S0±NÄøIº t§!SÞ0Ë­|¡ùÍoO¬hü‘/‡žt—¹ç•oešË4÷5ðWhlQÝU÷ÆHûWûW¤i@¤i@¤i@Äy3 SD:ˆœ`fíŽñ/™ç2Ï&?÷¹Ùjבæ×¿9±¬±ÄÒç˜+ož!Ã\†yR“¥ëŽ®;Ò€4 HÒ€4 HÒ€4 HÒ@ëh@´±Ìsi …4SkCŒÏežË<÷5ðǾ™ùQîùë_ŸÐäØxËÁæÖ'?–i.Ó<©« ©ùtcÔ:7FÚÏÚÏÒ€4 HÒ€4 HÒ€4 H"Î[È0ÕÁ¤ƒÉ#Ï—‡Áõ†Ìs™ç¾†Þù–Y~•¾óß!½÷iw›{f*šEÇNìØaÔqºÆè# HÒ€4 HÒ€4 HÒ€4 ´¾DË<—ZX0ºÁx\ Ìs_SžÿÂl·Ç(óëÿ;>6–B4Ë€[^e.Ê<©ï Ÿ]tcÔú7FÚçÚçÒ€4 HÒ€4 HÒ€4 H"Î[Ø0ÕA¥ƒÊ#ÏÓkœÌs™çI œÚïQÓ®¢[` o¶õ3qÚ§2Íeš'5ðt³®)º¦HÒ€4 HÒ€4 HÒ€4 Hm§ÑÆ2Ï¥*jæ×%2Ïež'50üîÙæ„ a.äi@¤i@¤i@Dœ·¢aªNœGž/³ì~§2N¥Lkào˜ÿ­umеA¤i@¤i@¤i@¨M ˆ6–y. ´`˜ýƧ™6Næ?³óÿæ~-ÝÕæ‘æEó" HÒ€4 HÒ€4 HÒ€4 â¼ Sx:ð| À<; 㨙5PežÏÊÜÜOÇñ¾”®ºHÒ€4 HÒ€4 HÒ€4 Hµ­ÑÆ2Ï¥6ÖL´ý0þ#ónŠ4Oš'i@¤i@¤i@¤§™¦5bšê ÔAI À`[ ã™ç2Ï¥†ÐÀ÷˜Ç}t~×ù]¤i@¤i@¤i@¨? È8—q. Ô˜`´ýãv§ aœŠ2Ï&eÎyÿ cSÝÕß‘æLs& HÒ€4 HÒ€4 HÒ€4@ È4­1ÓT¦Ì<Ÿ¦ÛÕ2ÏežKu©Ù˜·•u>×ù\¤i@¤i@¤i@¨_ È8—q. Ô°`¾€ñ“ÌÓº4OE›g“6Ç뢺1ªß#ÍæN¤i@¤i@¤i@Äy ¦:@u€: À„Û ã_2ÏežK5¯Û0G¿Óù[çoi@¤i@¤i@¤i þ5 ÚXæ¹4P€×ãs§5oœŠ2Ï&eÎyï1ŸnŒêÿÆHs¨9”¤i@¤i@¤i@q^†©T¨yÞÆÜë2ÏežK5¥F)«sµÎÕÒ€4 HÒ€4 HÒ€4 HÒ@ci@´±Ìsi Ž4ƒnaŒÇdœÖ”q*Ê<»”ùw8wÖQcÝi>5ŸÒ€4 HÒ€4 HÒ€4 H"ÎëÈ0Õ«Ö#ϳn¬Ìs™çÒ@›jàSìÿ.:7ëÜ, HÒ€4 HÒ€4 HÒ€4 4¦DË<—êT0í.–qڦƩHóì’æ¯âØ[N7Fyc¤yÕ¼JÒ€4 HÒ€4 HÒ€4 ˆ8¯SÃT¯^>?Þÿd Ë@—ZM`_/¤ó°ÎÃÒ€4 HÒ€4 HÒ€4 HÒ@ck@´±Ìsi Î5oŒ¿Ë8m5ãT¤yvIó18Î~££Æ¾1Òüj~¥i@¤i@¤i@Dœ×¹aªƒX±Gž¯ CïC™ç2Ï¥ªiàBsuΕ¤i@¤i@¤i@²£ÑÆ2촄 ÓN/Ë8­šq*Ò<›¤ù8¦þ £ìÜi®5×Ò€4 HÒ€4 HÒ€4 H"ÎÄ0ÕÁ¬ƒÙ#ÏÛÁä»Oæ¹Ìsi E4ð7ìÇ­tŽÕ9V¤i@¤i@¤i@ÈžDË<—L0úþãz§-bœŠ2Ï&eÎyŸ‹±¦nŒ²wc¤9לKÒ€4 HÒ€4 HÒ€4 ˆ8o0ÃTµj_0ýÎÄøEº ti l LÇ>[RçTS¥i@¤i@¤i@¤ìj@´±Ìsi 5óo_ŒÿÈ8-Û8iž]Òü/ èÆ(»7Fš{ͽ4 HÒ€4 HÒ€4 HÒ€ˆó6Lu€ëw€ Øãk™ç2Ï¥&50ûèW:êü) HÒ€4 HÒ€4 HÒ€4 H¢ežKÐÌÀU0æÈ8mÒ8ižMÒüg§é¦H7EÒ€4 HÒ€4 HÒ€4 HÒ€4à4 Ó4¦©xðÔŒÁE1ž‘y.ó\ˆià{ì½užÔyR¤i@¤i@¤i@| È8—q. dH01EÆ©ÌsiÀjà+ŒMuc¤#i@¤i@¤i@¤i@Hj@¦i†LStÉóù`q*ó<ã˜í_IçE¥i@¤i@¤i@¤i M2ÎeœKÕLÃã1~ʸyªLólfšOƒî;êÆH7FÒ€4 HÒ€4 HÒ€4 HÒ€4PH2M3jšê¤ “BHŸï ñ;™ç¢Ï3¤IØÖßé¨s 4 HÒ€4 HÒ€4 HÒ€4 Ó€ŒsçÒ@Æ5±+Æg2NE™g“2ç¼_‰1ŸnŒtc$ HÒ€4 HÒ€4 HÒ€4 HMi@¦iÆMÓ¦¢ÿž“ÌÄίÉ<yÞ øÛuŒÎgÙ8Ÿiž5ÏÒ€4 HÒ€4 HÒ€4 H-¡ç2Î¥iÀjÆâÂ6¨q*Ê<»”ù?¡éZâ‚©¿¡/i@¤i@¤i@¤i ;i*ÓT" À`ü ÆÍ2ÏEž7ˆ>ÅvtÑMMvnj4ךki@¤i@¤i@¤–Ò€LS™¦Ò€4§˜5ˆq*Ò<»¤ù«Ðð²-u±ÔßÑ—4 HÒ€4 HÒ€4 HÒ€4- È4•i* H©€éxÆÿd ‹>¯C <Œï¼nh²uC£ùÖ|KÒ€4 HÒ€4 HÒ€4 ´¤dšÊ4•¤‚€ù¸5ÆßêÐ8iž]Òü&èõ×-y¡ÔßÒ—4 HÒ€4 HÒ€4 HÒ€4= È4•i* HE5r-Œdž‹<¯ œ¯™ìÝÈhÎ5çÒ€4 HÒ€4 HÒ€4 HÕЀLS™¦Ò€4Ф`˜.…ñR§"ͳIšÿmR‹¤þ¦n¾¤i@¤i@¤i@¤lj IÃLÂȦ04ïš÷¤`L¶Ãø³Ìs‘ç5¦yø>=uÎÒ9K¤i@¤i@¤i@ZR2ÎEKÒ@É€AùÃjÌ8ežMÊœó>c–¼(êoé&K¤i@¤i@¤i@¨’ 3 F‚‘¤§˜•g`ü"]ôyjàE|ö’:/é¼$ HÒ€4 HÒ€4 HÒ€4 HÕЀŒsÑÆÒ€4P‘`ZîƒñŸ64NEšg—4¿º[ EýMÝlIÒ€4 HÒ€4 HÒ€4 HÒ€ˆs¦¦:yèäá‘ç›ÁÀüZæ¹ÈóVÔÀ|Ö¯tÒyH¤i@¤i@¤i@ª©§2Ï¥i Y€‰¹2ÆœV4NEšg“4ÿ;µšDýmÝpIÒ€4 HÒ€4 HÒ€4 HÒ€Ó@³ 3 IB’¤j†æ¢•y.ò¼Jøw/ot¾‘¤i@¤i@¤i@¤ÖÒ€ŒsÑÆÒ€4Ð"€±ù;ŒÉU2NE™g“2缉ѭµ.ŠúÝ€IÒ€4 HÒ€4 HÒ€4 HÒ5Ð"†™Ä$1IÒ@HžÏ“ó*™ç"Ï[Hoãﬤó‹Î/Ò€4 HÒ€4 HÒ€4 HÒ€4ÐÚq.ÚXZ\0;Ãø©…ÌSÑæÙ¤Í§A?[û¢¨ÏÓ˜4 HÒ€4 HÒ€4 HÒ€4 ˆ8—aÚ↩N,:±8 ÀôÜã;™ç¢Ï+ÐÀDFÿè|¢ó‰4 HÒ€4 HÒ€4 HÒ€4 ´•dœÊ<—¤ªiæçŸV`œŠ2Ï&eÎy¿c¾¶º(êsuC& HÒ€4 HÒ€4 HÒ€4 H"Îe˜VÍ0Õ F'<_Fèk2ÏEž7¡ñßûèÜ¡s‡4 HÒ€4 HÒ€4 HÒ€4 Ô‚dœÊ<—¤ªk†èBÈ<—y^@ÿÄÿ¾c-\õts& HÒ€4 HÒ€4 HÒ€4 H"Îe˜VÝ0Õ‰F'<ÿ ÌѼú” ~IDAT12Ïež'4ð þÿõu®Ð¹B¤i@¤i@¤i@jI2NežKÒ@«j&é…2Ïež‡˜….[KE}ݤIÒ€4 HÒ€4 HÒ€4 HÒ€ˆs¦­j˜ê¤£“ŽGŸ Ãôè™6ÐÂü·×yAçi@¤i@¤i@¤i@¨E È8•y. Hm¢˜¦[cüMæy&Íó1○ŋ¢¾“nÖ¤i@¤i@¤i@¤i@Ĺ Ó61LuòÑÉÇ#ÏׂúÌó̘ç¿`®ÏÓ9@çi@¤i@¤i@¤i@¨u È8•y. Hmª©KbL—yÞðæ9£y®õ‹¢¾Ÿnܤi@¤i@¤i@¤i@Ĺ Ó65LuÒIÈ#Ï€©z¯Ìó†5Ïçan·Ô1¯c^¤i@¤i@¤i@êE2NežKÒ@MhÆê¯0†Êóæå›ÉŽu0õóë;y>™¨û…x>°x~!sû¼5gÍ1À 0À 0À 0À@-„Sñœ:c q÷Cñ¼x<ÿ9sº¡–MÑuzd€`€`€`€'ÎÓÎS4´¾Óço%ôÞЋô“™ÇÕÖ—õÅ 0À 0À 0ÀµNÅsèœÄÞ-WÄó%ÅóC™¿ÉÚ6E×ëE`€`€`€œ8L;L=Ø<ØúNž?›ðû»x¾àx~'s¶ÇZ²–`€`€`€` f©xÎ5¼>ãGñ|ÞñüFæêÍš7E×î¥`€`€`€œ8L;L=à<àúNž¯J >!žÏÏ/gŽ6[;Ö 0À 0À 0À 0ð÷C©xÎ7 ¼,ã€x>kƒx~!¿ãs5nd®Ù  0À 0À 0À ”6 ˜‰¦ 0ÀÀ< $Jï͸3¢ý§ü^•Þ |ž—`€`€`€¨Õ€`6`V+×íÁÈÀL‰Ó;3nŽX<ÿ:¿Ïj÷Êze€`€`€`€ÊÎ…s``©_θ2"ñü`óU26År›¢¹4— 0À 0À 0À 0ÐÌÌ,‹†‰ÕÏdü6ÄxÞ|eÌnyd€`€`€`€c@8Î`€EH¸^—ñÃâùüÌ7lŠƒÙÍ«ye€`€`€`€'ÎË, ‡z°Weo1ž_ÎÏÚÌ ƒ 0À 0À 0À 0ÀÀ` 8i*ž3ÀK0½,c ñü|~ÆS6ÅÁnŠæ×ü2À 0À 0À 0À€çKˆeÄýµßϸ= €þ}>÷Qæ˜c€`€`€`€Ú1ऩxÎ 2¸ýjÆõÂñüË|ÞJ›b;›¢y6Ï 0À 0À 0À 0àÄy¡Xf1YL 0Ð3ÈýRÆ…âù¾æ«`øâ‹`€`€`€h×€“¦â9 0PØ@b÷ç–Ï›¯|y׆Øî†h¾Í7 0À 0À 0À ô f…ƒ™Åeq1À@c á{mÆ·‹ˆç×òvpÄ 0À 0À 0À 00<¹pÎ È@øŠŒ£ ˆç—òo_°)oS4÷æž`€`€`€‚Ù€‚™f1ÀÀôÉó‰ÄðOæÏÍ¿™â†`€`€`€``ø„sáœhÁ@¢øÛ·f è§ó÷Û‡¿)ºî 0À 0À 0À 8qÞB,³Ð,4èHß–qõžx~8^Î ' 0À 0À 0À 0ÀÀèpÒTúlEëg¢õ a†fÁ¸q^&§4›Ýµ“½îvøîtØVC{p0Ãé[ÂæÂ¸ôЖ bÌ'çÈ\×Þ?„OO†m2D°3œ»ŒK oÍà!Fæ:°ÿ ¾~;l½¡€-Ìpâ:0.!äRÂ#§ë2 12Wµ)W]{+lœÁÎ f8ku— ~F'º&æüó¸ÿ¹êìK°7ÂVÉ ìäa†SV†qI —ÒY1æ³l‚y²ž€V>;¶|`' 39—þq —ú„$•{ fs]üú$ìU°dW%3öJ—úqÉ_*Pù.'÷Ïæ²Ó±Sø7®h;ÆÉ!ßåJå~¡mþ¶WUÆÁ£†™ ãR>.éãÒ¾TỜ2^‹ÆuâCZnYÄŽ1ÖE|·aÕýDû|¶+,úUgÑÁÌFƒíûŒKøbpj¬eàÞa§ÀžÕ5bàZÎúsÑ…k=c(×½hŸ³`;vmk××E3é¹0.Ñ»G¢j„НÛ„YÛËyqnÎò†Ú%`MËpÚé`[»´MþAaFcl{ŒKòLr¨éxŠ7¤^wI[ŒŒþëí@³.o+FG›vik›×x‡ßöNذQÆG¹0ï§6âžëÃÞ{D¾2òOß<6Ó&¤¦yy•[Æ¥uß•(ŒDÁÑ…q(,ø«”¯¹5’:àæHMßqÿ7¾Uàéœç3L!žNç fVö6ØõEå†:mw6l{P™tJhîÁÆ4×Ò³Ÿ ýÞÛ¼Üæøÿ©¿‡ñǤ~onxlEA+ Ý=5ÆÕR®Ï©N][Må¿møØòlÔ¦Äú½º8\¼¶‡‘Ôü•‘hÂCøfäëÒbg©EÎOhƱ¥ˆ¸1OVØBw¸ö™ojj´+OIá,¯˜‚ÜílSþ¹®¥˜cª„ϲ܉v:¦ãG ÛëÚÙ¡yLî‰0}k6rþÔ4Ìœúö Ej÷ú*Ú‡Ûµzç×UȺ®tÜÊÓ;ÍìãG ©éÆgyÿnf~™ãóÆ)Ü‹Kí.„EõñùA‡/¶‡qÁ’– óº×4Ì[ æ…Ù<´Å °U‡ NÌu‡oø5ßÀpˤƒ2®> 3‡2CŸpà¼Á«a:Øñó°­Ž¾âN£Á†zbÉt'q÷µ"ÑClî·ýqØv¶¦|ìÎn›¶'|È‹Ÿ€ñC‘0¦{|nf®½Ž©€.ËÂ%ªÜ¶(ës‡LAÈ)|º6ìݰ!íêzê(ÌÜÆ%@1ä}#êÈ£H:b–“ðs® |Ì8±ËÕQ1hÏeö…y‡L+Ía×%°çæ,^Õ­~xßï »–ëÎ7ëŽÂÌž,§“ îG}Nƒ­%¡‡yŽ­Ý¡…™0~uÄï…]FJŸy?Pnç…Ÿ@¢‚·dPIîþy‡Y±‰I剣S6–…q«¦[3Ðû5u0sf×g¯bë^Qpû¢˜8€IÅÐÌl·pâVN¶ôè3Ÿ3ê`æ'|> Ò÷^Üù„§a,|fHED*g\4´!Œ[:¥v8ákê`~a"0ÿå< feGCX!ýMñ›`nñ”Ê÷ý×Á̊ĺ±9‡AWÂv élÝ{8àCk¹ýôË`Ü2*äN£7Á¼{@˜»#U>u2‹L8MMý: /[6Á<#`áþ XK*'\5*2s›â±oÆ6ÁG¢ûf¯–Š3UÎaw<àd“€ïÆ*ýUÁÌW@]žym\3K ’TüFB>’žg óÉa~U*ÎT9‡Ý逑7ääM¦0sSwQ¶KG ’aC’ŠÿÁ÷!ë¢q×TŽ`«†Ùk,äûSq¦Ê9ìNŒp³~`¶Íƒ»“.e™™Bþ¸`3o™Ú  €¦xJ%8SS_ óÍumSw¤+פ¶í1l¤¿)'ª ÃîL ý5`Üß|¼æPKŸ?Òæ¹`¾W ¤þ‡æ—„ {¬¤ÿÓj`u$í[Û¼_ ˜¹¤SîéQÃû£t·7¬*Ú>¶Òêé³°lŒD»äñü¶0¯°°†ìuïa  ó-`_˜ ÷=+`žˆûk?>ªíqQ¨ÏôͲ"³óÈ }¯; Ö´‘åØÑ½¸æU`¾mR°™ó—øEÇaEGŸþ†¦y¸;÷‰ÐPßËVDf~ ÙeˆÜ÷šë 37è{ó.ןìÓ¹º×p:èyW·2ÕåC5“_Ü/Ì4›éŽë óëø6À|ø:æ†}Ü¿-X•ït‘ϧ:äÕöÞUéwë óf üEÖ=òï0 _îkw:¬ë)§Ÿ­‰Ì7`ƒŸ[®Üfî¨bߣ ´üAsích÷`ؽ=¡;§æ+$ooj³‰³†hˆë{6F—¡Åü¦BëwÁ^û®ujjGh–‡vÑÞè5ÇWL~ñ\è;v^Ѥû&˜Ï¶Ô(mvâp¢©Rú}x°C§<Îõ"˜ÍÝ?ö¯€y£@LœØ¤ë&˜y,f[m¤ß¦©àú}xÀÖ y—FO„ýÎVwª€y7÷1af¯&Í7Á¼u ‚¿¼©àú]0C›s`w:ÔèÚ0¿Þáý&A½z“æ›`^¢ÇL IoS—¦v1yS…ô{þC“ÛÀ¾æ*ží½XÌït|ß*&î6Ñuã²9ü; ÿ^“Â+Mþà–} ò‡Á|œÚxgͰþÂ<\e¢u˜ù]gŸ(ÛåÚO˜^i†3ôÇOù<¥qìøê ®Àé&Z7™ëX»ÙçšL ¯4ùà íí q*ãÅ5‘ùÇxØ×Dë&0ï ðw™^iò…šã ÄÏÐÞt:½f³æMÏè r˜¹sÓgbM…iûû“¸çØŽý‚7_x§} ¿¯ ㇠œ€j«›éß\1ù5#@™4Õ}#ÌÅsÂ-*±ži%”.}ÈÙyÇ=@kUÀÞ0?'@Ù®1Õ·)ÌP‰šVBéÒ†ÚÚvsMŠäÏ®€yße<ÃTߦ0 ˜VBéÒ„šâöT—ЖÉp|… ˜ PÖטêÛæTâÓJ(]Z0CKËÁæÂº~šhcŸ4ÖL~…ذcS}›Â¼Þ÷—"•‡c™VLéâ::vO€àÐî[j`þ¤çr?ÖFÇF0“`¾7ýþ|›Š(mœð–f©Ÿ ¾é†6—ÓVjeÿ–çòW.\©Óz˜?á¹"? qjâhf-'P}캂ÌëªLõ?¢8ˤv˜¦‰QÁã=ÃüˆiÙ”.>è¡®O8b·š> óÚ±ùü?:ò±&¼\öƒÛh»Md~±g˜Y©±Å6•SÚ0ÃoÜWúŽzé ñôõcoRP—CŒ½›¤é60Ïàœ-d »´;ô±ì+tb âé|ÆÖ8 N/ò\/žeÕj¤1ÌÅ$Ø{®ÐK»ˆJ×øí ‰Uaÿ ã2\Û`…Èolõ!êuçºÝØVÇma¾Òs…Žh[!¥÷rñÉEzÖ…KÀ+¿ @ý¸5‘ËûŽæÝúÕl[˜}ï²Pù劀õlík©©= îÛ< ÜLwÕ¼cþ°çºŽ>Ù¤û¶0ïã¹B•ß”6UJ¿»ƒþßö9Ï:ðñô=®¯ù?=×yV[·…yMÏjõÒ¼må•Þzø}%—3>áY>Aæ½.­ù‡ëÍÏ?—j«ÏV0“`>wó¿£m…”ÞP“¶‚¨x²Éa°û=ŠÙ7ÀåûU~¥„º?æ±þ•g\5ù« Ì>‡Œc;$6UJ¿ÛmÏl¾çQÄ!!ž¾÷ØÎ°Å¨ÄgÙ>ÚEÃ]`~·gç®Õ¥bº¦;ÐðïLØežýì–I÷Û³íà{ÿø·uÑo˜÷óìäçu©˜®i3üÊOß{ܳc™å;Mÿö2Ïíñü.úí³ïemÆgwi]ó4ôøÃó¸çymLO—eìœ3´Éßxl®ÿ^®‹.[Ã\8þa•{{—Šé³È ?n»Á£?cxºLókf²ÏðØ>·uÕnW˜}®¿=»kåt]=Ð'_3~–Ò§‰®;‚ʳÁÑF—z„ù’®ºí ³ÏíS>Óµrºnfˆ’ç ÿ-l¾Gº†ÐVþ_¨‰Ì>Ï)?®«n»ÂÌç+[ Ø”Ïw»VN×- 3|Æ…¿ðè»&߯öûù50ßå±ÍvëªÛ®0ó´_Žx kåtÝÌ<Ü—ßR¼ÏI£šA{q?o_‡@ð ø± 8Sw…™«‚|í Á .cZ!¥›øœ,˜'wfc;{@{ëyì{­xìs1£íó9b3Aj6;=© JÁ<æ]*"ó =Â|E÷ùl•|IŸJêÚ…ï’ód˜7¨€ù:?±VûÀ|¨ÇJÖ§’ºV0h•‹5–¬€™›úzþß«VûÀ¼ÇJ6ݧ!†p­†Ù¡¼§f&û<:_£ûÀÌ­G}/ò±>•ÔµŠÌ@~«f_gDWv&m´Ûæbì;dcˆò•6•RÚêÉ2E扑ù“50ßâIãWõÕm_˜Ï÷TÑŸõ­¨®_ð1…&ÀêŸϬÙ×f…½%ûÂ|„'˜Œz5åXkGVL~ñÀD#K“<öí«ñ¾0ó00“‚ÚH³zßÊýzEæ‰Z}eÌÏö¨ï±½ºÛêµ/ÌfK“½a.&Á~ê¡û•­J5Á\ ó)“_üfŸÇĘŒû¤±v“-˜}l˜Îèßúü¡‚[i´¬ÎC+`öÕV´¥Q[0sƒ¸>½“éµÙªøóQd®Õèì ˜wò¤éCliÑÌ/öTñΛÙj°”ó̵0o\óþž4ýl[š²ó O½­Š1Á\ såãÚêxšþ--Z¹˜ó1ó÷N[b>‚¹æûjæÎñó6uhæO{¨ü…6+?´¼s%Ìß®ù³ôü!›´ ó;=Tþj›•Z^‚¹æÊÅHh«›=èùp›´ ó>*ßùP-›–j^‚¹æÊeÂh«‡<èy–M-Ù„™‘™¾bêšî·6+?´¼s¥>Ç>àA;ñœê®5½Ž R¬®›°s1 vŸ‡FXehÚª¯`®tNÅk©-<èøû¶ü:m˜ÿÓC#lk»†’Ÿ`®„y‡ ˜÷ô ãÚÖm˜ßí¡^a»†’Ÿ`®„yl¯j´Óátü6Ûº³ ó~)6‚íF5?Á<såF‘h§¹tü|Û:± óá}¶a(ù æ1˜^óŽù_ë˜Gá,g[wVa.&ÁqÜ—Ùn„¡ä'˜Ç`®<\íô5Çþ± ͹€ù+Žâ 1„<ó̕ǡnw¬áK\èÍÌg:nˆy.by æ1˜+O‘@;ýɱ†s¡70¿ÎqC<‰ü—pѹç)˜Ç`>¬âµ”ÅON>åuóæŽaæ ›™¹ƒç¢~‚y æ=*`Þѱ~ÿ‚üWvâ_Û™¢ Ü;é·ŽdgÛåB~‚y æÍ+`~µcíÞáJkÖ#s1£}½Ã¹Š¢tÕ 9ç+˜ùr´ÇØÚhüÛ&°¯;Ô¯³-£]Á|¶ƒÆø1òÜ3gØ\×M0/€™8ÕÔÖHó`¿t ã›îÝõwW0¿Áb#ð|Ü£4é¥#]-hŠ»áìh Ò.;ö{ ÷žþšê¥¦÷o›ÎÌÛX¨ƒ\D‘™TéæÀê¶ôå,å±&ù 5Í@`æãÝ_7@¼8Òœ«;ððGøí%&:AºaŸ1 \¯4ɳk—0?·¡‚7áw£™E¤ã„šé—,W!mãp©kƒ¥|Ý`þ ê8q®¿s2ëZCø¸Ý®Ñq«HÇ(ÿÆ|×s©—0s8üçŠÊÝ‹;ؤRH·ìC0Îl·™Eœ‡ô/0¹ÇÒd3¿A^¾!"ï…4¶ÔÒHÿ^ØÄ!{1Oĉ߷®¸Çƒ®µæ æ¢r·”*Åg‹Ó›¼¸nI¤;ÆwÌm .§å'Às݈©äŸ)Ì<âeìDzOð;!ûXŸsÄùlýF=!Í Ø90jpZ“•ºÛÔŽk˜§wlà;¾ M Žtì=¹Ú«+Ä£×}y­nrïÜÓd3‡µÕg"Í7-ê鿗Ѩéž ûRqï÷ºÖ—k˜_ŠÌ6©Òm û¼ÅF/CÍ¡ý.&åÈ9Mf0ÿ ê³lÈÔŸ‹o8q{)l]½ ݾ0'Ÿ=.21)ŒË4¨äJ°„¹>¥žÏݧ{xõõ´0@¯äÆ}€s}-¼E_Gø¸>Ì_Ä='~p€ßgÁnÜÇ× |+ùðQŸ{D sô²hÈOGîlîá}HGø¸Ö#ÌFû¯¡<Ü£:æù‚À&.fñá;“{Ds4728+r éøÁ–3iøi<Á<÷™¸G~_veäþä[•“Cø©ë=“€¹ôꊧA¶Ýv×õ0{4nF¸UW‡¸¼ÎÌWáWBá÷auøöUÝý8Z8Ð¥/\äÌE”ææh1/$˜þræ0ë“§C˜NÁý…¹Þë­o‡À¯¶&NØõñËk“ƒ¹š§eøÞ;¬‹H.A9WpéÀ6y;‚¹ñœ/Fk£v—6ôy ë2qëÞ6íí;m’0@oˆ†çq$>Ýå^üšf[ߎ­ºŸ˜¹ú*“êÆçgؼüÄSKŸƒŸº–!Y˜  gÀ_O@(<Íã-]dë:‹0ó™râ™Çø“–ï€UQÔ¥Sty Ï”ŠvâÒÔÿIÃ\Í=’yª½KgÛÊûr”3ØûJK0óÌãY Ñxu¤á;f[íæ2Ÿ³QÎ,6uLæÒL÷ÜDÄsʹƒiok3˜¹³jÓ™Ç\ŠËe.´‘7¿Ü:Æfû†Î+˜‹(ýÆD†u¦íÛù=`69ó˜Ãjžû«Ãé· ûùn×÷Ë æè= ¨ù DŠŠ‡tÏpíäÒèeííbræñšÈ—'…؈˜®óxå ¶O—K_gsôÖpØÝ‰ˆë—(çN.Üæ‹P¶¦3yÈ8Oq ¡üùiåÄ}¸}øÁÕ=²„¹z8ŽgÙë<8ãûvWNî³É™Ç‹£Ì§Áúœyìº]Ëù_‡²ß§Ë¥³…¹š;Vð|fŸ¢és¯ÿ@YWsåpÃgfžy¼eÃl5;JžÒ§®>¯fŸ.W¾] w—™Ç7ÇýÅøÝ±Oñô¹·ÞÙEÛÀlræ1÷<çþÐ}êèóÚ÷¸hËóÌæÒ“ bÞ_¬,p~BÈýЬn7fîEÝtæ1;Ežø‘R#t®Ê4˜‹a÷k!F®ÆòúÜ‹Å[[bX³É™ÇëáÚj7në´—+hbÍwP0@ólè‡æ}(ëlª€ÙäÌã—'Ö^\°ÅZx>k“Çà`.€Þ }«šrDçBŒwÁz-;,Áüþ»éÌã%‘æý «Ù^·ÀÖm@Ni s4×ߘP„¦X¿[«« ˜MÎ<Þicß{môñ…$—švm·T®,ÌÐÜ_ŒŸñõy®õ}-W0íÑE`¸Ž¥4y¼Òðßõês?ÎÂ'±OW¿™^3h˜  ¹¦˜ÃÉ>bò}-jðàzkgI#¯¥ag'ÖœY?ÉTì¹§<Ì¥WWo…0RøH Üq\oãyl û^b '¹O—ËE0cåL hÎÜrÛ\ß‘¶Ïý83¿OW‘àÚýaó«3÷éÚ¥ks½N0—`.†ÝÛC(©|80Ý p¸yf›çF¤]öáÄ f}¹OW‡øî4óÌÐëC01Ÿ \É9;¿~“ˆfsØ™ge[[DÓÔN©ý.˜+`.€^Âùj‚‚çô•uBÄoÁ¸|³ÏÐ>ĵüö;ù}º\v‚¹æh¾Ê¹(Aá¶‚-| E`]žôµ@c1÷4¹• âžãq3} IáÚ;QGíÓådÁì¹±‹=BOq£ÓNDûtЕ`ÕèSS+è/g¡?:iŸ®PºÊm(›J} zÌö±Œ€þ ê¢}º¬È°áK3ݧ$4OÑ>]1h)•H–s9Ã!°÷ãÞbµÛúæì³ë¦ÙìzÔbbl6ÀHéôÅûQ^íÓ‰~4ÌŽÈÐÜ÷— »‚2nctr™™ãzM€ÂÑM_ùNw-ʦ}º"Ó"s„)"ôò檾eÒ>]±êfÈÃ’˜ëÎ×<°s#ZûtE ñÂ7#1 ZeãzêXXÈýÅ´OWä æDT »çèû‹qŸ®=Õ©>•ÄÜR…”˜Dè`zvsŸ®mÔöi€¬ °„¢s¡y¢ãÏ<̓صOWjúPÏ›NÏ[½*@»Þ!Ð_DÞÚ§+1™tXôÒî2@_€<µOWªºPdN+2—>ÐàþbgXšûtý´¦4›hï;  <Ög1îÓõ:œ6ÈfçôKäï:DiîÓõ"œ>È‚9˜‹çèçÌ{[Í}º6Èy€,˜3‚¹z=z«Ð7!Í9sf0@¯P¯™4÷éZV ç²`Îæhî/ö‘  Ï¿-&óY0g séõÕÉ€—¯¸O×Q‚8Oˆõj*sK@÷Èyƒ¬È< rþ fÁ¬¯æ2Ò€œ™‘3‡ëü,˜³4‰äÈL©¨<쨬gf¬Î<# È™9SÑyØÑY0 fi  È‘™8RQyØQYÏÌYyF33r¦¢ó°£³`ÌÒ@&#3q¤¢ò°£²ž™²:óŒ4 gfäLEçaGgÁ,˜¥L4 GfâHEåaGe=3 duæi@ÎÌÈ™ŠÎÎ΂Y0K™h@ŽÌÄ‘ŠÊÃŽÊzfÈêÌ3Ò€œ™‘3‡³`–2Ñ€™‰#•‡•õÌ,Õ™g¤93#g*:;: fÁ, d¢92G**;*ë™Y «3ÏHrfFÎTtvtÌ‚YÈDrd&ŽTTvTÖ3³@Vgž‘äÌŒœ©è<ìè,˜³4‰äÈL©¨<쨬gf¬Î<# È™9SÑyØÑY0 fi  È‘™8RQyØQYÏÌYyF33r¦¢ó°£³`ÌÒ@&#3q¤¢ò°£²ž™²:óŒ4 gfäLEçaGgÁ,˜¥L4 GfâHEåaGe=3 duæi@ÎÌÈ™ŠÎÎ΂Y0K™h@ŽÌÄ‘ŠÊÃŽÊzfÈêÌ3Ò€œ™‘3‡³`–2Ñ€™‰#•‡•õÌ,Õ™g¤93#g*:;: fÁ, d¢92G**;*ë™Y «3ÏHrfFÎTtvtÌ‚YÈDrd&ŽTTvTÖ3³@Vgž‘äÌŒœ©è<ìè,˜³4‰äÈL©¨<쨬gf¬Î<# È™9SÑyØÑY0 fi  È‘™8RQyØQYÏÌYyF33r¦¢ó°£³`ÌÒ@&#3q¤¢ò°£²ž™²:óŒ4 gfäLEçaGgÁ,˜¥L4 GfâHEåaGe=3 duæi@ÎÌÈ™ŠÎÎ΂Y0K™h@ŽÌÄ‘ŠÊÃŽÊzfÈêÌ3Ò€œ™‘3‡³`–2Ñ€™‰#•‡•?3OMMm »8#[ÃÔwÓ:æ7Ç4¿ÒkXç ¨KmojRï>iœFf8cØSÙF&ú>£zæ7×4¿Ò=`XçY ÔÅÈÇE=^`Rï>i³!t…Cs»öª»`vôh'˜Û‰S0·k/ÁüL{)2G6ÔÌ‚¹ÍкœV0 fêaJÏÌý;‘®ÚºN0 fÁ™ºÂ-˜#s¤†Ùý#¤&À[0–‘­hòêõå;R£zæÇ×4Fù%îÃ:¯–@]ÚøäY&õî“ÆélvŸ‚éZ­h’Úi@0;òHˆí„¨öêß^‚Y0K™h@ŽÌÄ‘Šlý#[êm(˜³4‰äÈL™zTQùû,³`–2Ñ€SGâ=á’°‘ÛJ¶£ê»”iMî¼–5Í/`ºåLêbšõX"`]L5»²i}|¤s s ß3ßj»¡!Â9¦+×LîÈÚì MêbšuæB™®K'}]g´šÍ´Î}Ó æ©)ÁlÁx¸.˜³­(&˜sð¡”"³"s×MÃìÈž…³`ÌMì€V`  4µ!×XðÑ[ìŠÌŠÌψS0W/–ÐlvûE$®'ÀvS~¹}Ψ6iPß=Lël’/ò:Ú4¿€éæšÔÅ4 ê±eÀº˜jö›¦õñ‘Î)Ì>* {´ïÁÕfy¶™`ü:A`å V¿ fÁ, d¢92G†ˆºg\£ Á,˜¥L4 GfâHEɸ¢dfÁ, d¢92G†ˆºg\£§0ã¥ÿV° 켜„úngPçíbRo¤Û×0¿ãMòK! ê;Ó°Î&úŠ!ÍÆ®ÛÝ5̦k³Ÿp]QŸùÜœà:Ÿõty¯D–s¶ù@c0gM æ ÃýZf;_€µÔ4­`vÙû»Ê[‘¹ÿ³¤"sû6Ô0ÛÁ˜`n/ÄÑŽU0·oCÁ,˜j ëèG0 æ(„©ÈÜ^ˆŠÌÚ¬kÏirD­Ùl¿;hL`ý{…*¸ófÅLì܆¿ÿÞ¤sH%Mña}SünR'¤Ûݰ3É/…4¨ïÚ†u6jçòšéºÝ£–º®¤òwÓY«]ãjWÁì`L"KäCñ‡`ÌÒ@&#3qäP¢êY?êÌ‚YÈDrd&ŽTÄÒsº`ÌÒ@&#3q¤"³"³`ÌÒ@&#3q¤"³"³`ÌÒ@&#3q¤"³"³`ÌÒ@&#3q¤"³"³`ÌÒ@&#3q¤"³"³`ÌÒ@&#3q¤"³"³`ÌÒ@&#3q¤"³"³`ÌÒ@&#3q¤"³"³`ÌÒ@&#3q¤"³"³`ÌÒ@&#3q¤"³"³`ÌÒ@&#3q¤ëÈŒ³š^»vìe®ï§üÛ4³`nÔà]öì©Â~-ØÚÃæºÍéºÊ?>QÔœèy@þKa—ßâó›`Vd6Ö@^¶º@ŽdúÄØ‘r`œ”_ä—i fEfi  xs$†gKÀö€8bûãÿ×ða*Ê1Z®ÙH³˜ïr-ìe§¦ÖÅý_WQÎ]}— ÷[j´¾Ú%?­Ÿ|8•}3ì×¥ÙÐéYÑé¿ÿŒß>[ÞGy<_<33;Z–òÿßtù*SQ®5pÏ/ÁþgBïÂoûû*î5c´,ï=É?Ó¿…ðç¾Øà§y쌼µ•ë¡2/€=iÏù®ËSŠ|&"aš?¶ôX®Ï¶Õî¯|”+˜é§?Á¶ñÑE§{¥¡Ÿ¼éÇù0>g¤Ò÷àÿo-YªùQ¾/;›r™î)óI>Ê…{.;rßÑrŽn|•+–Èü¿ ~š;h?¹®|̇•ï9"ÞP0?0R¦ã"y´\'*W,0/¢´Å¨ŸBÁ‡Ÿó‚UM‚yÂŒnDÃlÁ<ÉO‚Y07i@0/ú.»âqH‘¹bVYÃìEgÙãI<³ÙŠÌŠÌã«„Fž=5ÌÖ0Ûx2X‘ù™ˆ£ °p¢‰"ó" G맦祾¿k6Û|íp´"Ì‚¹x&}ϬȬÈÜfH[»A¯¦F&æúFަ뙙›42é÷Ië³`^4Öª“Ñ¢‘Òh*ÚÇ¡>½¦ÉµŠÌ­ ]ΩWS‹¾ªÓ«)½šÒ«)“Ž·.hÑÈôpV`†¿G;|Ól¶f³5›m>Ä.ÚJÃ쑎O`æ2~EÐu˜¦gæÎÿRÏÌzf6fÔ8¡`6‡²G[)2+2wf²ó…¦‚Ud6ïôÌÜ8Q©ÙlÍf7ŠDZèC ãÀm§ka»¦SdVdOdµ,ü 0np6¿dåµ·öq|›kµ¬U'£`“W€ñØž²¦¹¹`Y×'´Ñf×´ÆC‹Î7ßÐoÒ®˜§v½OÛë³`n«™éôÃìIš~é×éz¯6×ÅóoPáÀ–lSø>i³`0ß„´»w½OÛëBÀ|**8kļm~_ê]˽©&À4fÌBÌThz³¶0öMo\®7jšëšoßë™™»j¨i6»k¾}¯ÌOOT(2+2³ ˜köëÛu½^‘Y‘¹‡v&®ÔëšoßëŒ{£®7Ò0»4ZΙÁrή¬ô½N0k˜Ý¨tÈzÏÜb§‘¾Pv½¾Ñ‘]3.ÍŸ32¤å1˜gN[ßü»^ŸÈ0›'=.l+ü÷u#åÚÁq±®ÍõÓ>]uÙç:0ÿõˆyÁÞ§ð}®æÅQ®_Lj/ÁüÌc Ú⸑ö˜ÛG¦×âžM~:Ó4/›é|À¼*σÔ+WÉØ¬L›¼b„™åÇžgÍUC&çG+2/ÚN^`6ðSž0—†Û;A À..[m¦)ǹå¼ñÛKG~…Í{7å…{¯;f´­ðÿß™—å·‘ûžßà§9Mmków”írd…Ÿ^kó>¦y9̦QºæYoˆ&ÈùÌòM³obh#Ál¸Ù^ÎÌÒkÈÍ b€ —2(2§!CéM="³4&urdBŽTdVdÌ ;ÑYzfVðÑ3sš=:"ñZ°'JöäÈ«©w„z>Ó}ãÓ”zºˆ£6À]{Â⑇ñÛš‚*>¨BùD0§ óµùE¡D£ûÆÙæ¸a^Ðn9b3Sœ0…öËÿûì’ëÐ~ÇsIEND®B`‚fifengine-0.4.1/doc/logo/FIFE_small_a2.png000066400000000000000000001002031304641216200201370ustar00rootroot00000000000000‰PNG  IHDRþÖW4¾sRGB®ÎégAMA± üa pHYsÃÃÇo¨dtEXtSoftwarePaint.NET v3.5.100ôr¡òIDATx^í]´Ŷ}A@TrÎ" ((¨H ŠŠ¢ˆÐ'"Š€‚"¢d”œs’Œ˜É ˆŠŠ9`ÎÙ—óûõ÷®®ê©™éI÷Nîr­³ïÜ™žª³ëœÚ'ýFñ+v ¬øK,èíÁguÀ‡:`7݇›n­»¿¬»×~[à[à[ð¡ØM÷á¦[‹o-¾¾¾Õê€ÝtnºµøÖâ[à[à[ð¡ØM÷á¦[‹o-¾¾¾Õê€ÝtŸlú“oüRÒÒÝËâãÿ„œc½xøy |¹¤ dä/™øß©Ÿßc! í!¿‡€~ž€ý=¤=d!äf^K,à›¯}Kyuì!_‡€~àü-¤5d&D[nÀ¾ù{/ã½ï‚T·‡@îø9 |€ðlÈ$Èç–=ÙÀ×ï÷ø¬ýþ öÈÍCÀ?Ç€°yòa`O†Å÷:Hþ‹gعRÚ¹sXàçðªÚ{!o쩾ù¾ÿ³=é 9ÑÙ}Xàg)ðžª;!‡“ötßüŒ¿á™×B.‡³‡@öøY|€¤<ä6È^Èÿ’ ø‚°ú‘x‚Dþÿñ=–B.†gì8,ð3 |€¡$äFÈ6ÈRöt[üHÃø~s!çC~gÌø>”þÈÕ-¦ìÙ|ó9¾Â÷~ÒÌé?,ðÓ|(xQH7ÈÈ_Ó öl¾ùLc=ÆAΰ‡@z üŠÌ,ºÅ_3öl¾ù|ï`î‡Ô³‡@ê ü$ Ë,ºó ³!ßg Øs øæ³¾Šõ ©iäøI>”³)d äË,{®ßÌ|ë:RÉ…?,ð |(aC+ÙXÑ–Hˆ+“¯M¤H'“Ïé³™-¸ÒRÆ;,ð>”­„µë¬\ËF`Äz¦\~h¶àS؇^“ì!ÿ!`ð¡TÕ!¬Lc…Z,`eûÏó øæZÿ{³räx{D?,ð#ÊS 4V¢±"-Ûïóå+ðÍïÿ'ì× H'H{„øð¡$¥ ¬4cÅï’ñ‚)—^çà›ûñöq>¤Äf *}÷=ð¡ 'BXQÆÊ2V˜åˆ ò¬~¾¹Fß`§CZøÝ ð%ð±ñÅ —AXAÆJ²‚(WÇÏÀ7÷ìSìûH?¾>6ø8+Ä–BX1–«À-ìs[à‡ïý{ЇÑú~9òøØHfѱläƒ=×x {Ø%òû¯CO†CNÎçC /M;ÂÊ/V€%²é~xí„âÕG— ƒ<éùÖ)V“N?¬Mèw<„u¹R%ß¼>6ç È#VzùQIc~ç9O}$Îíºäõâ5Çü " ù¨ßè^÷âw1ßçk˦(»!·BÊåÃ!ÓÀÇ&Ô…Œ‚°¢Ë*­Çl=ú³½ð5ѬÛRqÂÉc£J¹Ó&ˆ+nß*æ?û‰]ËÈúôoèÚ3Þ¹zäð±Ø5 ¬Ø:bÁù°[ ë}ÛØ=âä3Ä µ–S'„ŠñšOyX´ºr…»ì¨ØzÔ¨QôìøÙ&ÈUâ¹täð±¨!·C@ò)‹.é–u¬õå°ÚeN'Ô&'Ö'"‰×ëëž?G œ°_lxéû¤?kžÜQÆQeY–õÙ‚Y |,^H+±ò5‹.)`¢U»ì ѪÇ*qR½ñâDW&àï†œŠ¿Çóõú}êŽΜ*®òŒX´ãó¤tM8ºl„£Ì~Ÿž@V‹tä:È“?dÑ Dëa…N< êµgz¢8±¾)“ðoHƒ`9óŠ•âÊÑ»Då3ƒÆ×º¢ÞçTü)e‚8 ïÝöºµbüª· õìy|sm-áh3Ž8ûm¶>ƒYtÝ!ë ~Ë¢+x=ÿ™èq׳¢ÂY)› ž,N:ÍCNŸ"Jù¨h?è)1aïWbÃÿ“²æ«‰ÁËß§w[.NÂk¤xü~ÐÁ!†‰¢ÁE ÄS‰¯üP ïá#ðëõá¨3Ž<;;Ó@F€/Î,:VN-‡°’Ê*Nk0V¶ ¬-I TƒVþ9UœÔ0 UZÍ׌Û/æ¼õG±æ›ÿD”1Û?çß¶U”<ãÑ ß—ïg¾¿q0ð9*5.®¶],Ýý¥ÝÇ8öQé;G qÚé™8Ò||A&‰\™aÅ”U’8Ö`ÃË?ˆÁ°ªõ/Zº¡î“¬ZÜ3§]¾J Xò¦Xòñ?ÄŠ/þ·L{õgÑ}Ì>Q©Õ\¼ñ¾úýõ皃’ §ˆ oÚ &­{×îm{k`€£Ñ8"í”t)>¾LsÈc¯-Øã?ì–ìúB\;|;¬éŒ€µÕ€ 8A^âLÊ4QªÉtѦÿ“bä3ŸŠ%Ÿþ³P2ïý¿Š~ó_õº¬ïíÈcòP‘å hÔi‰¸{úKbÓ‘í!Ø!ðp2R-•‡@J€‡n ùÄ‚=~°s­&­}WZÍ’è^+w=èä%ˆ§K©tÞ<ÑíÁ½bâáÅücOº Ýü‘hÑï Qò¬ê3õA0-ÊA0ETm1Kô¹C,¯`u!!]`¶ G©q¤ZùdI>îTÈwí'´ÁÒ*Þ=ý°h+ö€5w«^¢ Öë¶RÜ8û51í?‹Ùïý-å2vßw¢ÓÈÝ¢BëyÎ3ÈgqíyÊK)…+CÇ~›Å£ß·@b׋£ÕžƒÜ)•ŒC PÀÇCÔ„ ƒ¼fÁžع^Ëö|%®¿o‡´Š’Œs-» v,ôgÍ%Ï™%šõÛ*î\LLë/‘ɯü*®{ìQ»3®gÏ”‡{H/Äñ¼Æ]—‹á³_[^ûɉ¹¶r ä„‚ V2rb³èß81uÃû¢¬_)Þ“5à{º´ž†U—À‚Tl³@\|ïnqÿÎoÄÔ£ÎyýÏ¢ÿª÷ÅÙ7m‘’sèƒ@yæ!`ðÕm¸é]bÕ¯íP=þ8ŠíqG³Mäˆ øxÓ²~ToÎëÍßüêObج—Eã®Ë¡2‚@žwuu_×–]`ªÝy¥¸zê+âáƒ?‰‰Gþ˜µ2ü™/Ä…CwŠò­æE>L‚ß_™Æ‰N·=!¦?q,¯u Å^ñ¯xÿ%Ž˜Ù‚_.¹ò4„IvS °+÷-n¼—¨Þj¶‡;¯ÁËHW™–€'ØK6-šÜ¸Eô[ö®xøÅ_ÄÇsGØû½¸|ü‹¢æ%Ëïbzšõèù Lyöå+ÄÈù¯Úk@tÍÀ(›Îp„[ˆg¶`4à¿nÁ^ðÃnÚ–E§[·ˆÒÈ– "ì\ ¯Üy^ƒ)ßz¾h{×1xËgâÁ~Êi}àGqÃü7E£ë6ɃÌû*`pÊàP³õÑw̱æ…o­Á)Ü!0Üë  ø+-ð>ɪ{çgu[á$Û0Ñ&èîÎ;q¶´Ž]>$†=÷µ÷Ǽ“ë>­='ʶÔ×ͨÈ@ lãGE—[Ŭ'?²@Á€Î‰ŸIv±ãXƒÕ/|#ú<¸[Ô ;ðÊ¥7Üù†×n×Î~CŒØù½±+ÿeÈÓ_‰‹GÕ:, ¹D?¸®ç¢°è4as«›qcÓ³mX4‹ÏôZ»ÀQÖ`æÖc¢3H©ÒH¶9±A$ +O†Þpé˶š/ZܾMô[õ¡ºý[_ÊÝÛ¾W=öª¨ßcôx×€Ààfªû¿®Q8ù¼9âïkÙVa10ú]$¦?ðKÙp]øÁ÷Äë?‹û¼*š^¶Ü©ŒÓÅ2¡n=]×ÀW½h©h?r¿è¿és1ø™o¬¨5è½ø=qέO‹2Íç‚ïÀ€$'I@•äy B°ìSÅåŸsŸùØ(oõlÂÀç/øY«ï€ÿñƒßŠ[Ú#jµšåÔ¾kÐG½Ç“¥Ÿ%N½rè6éˆðÄ—âö­_Y‰°ýÿD´¶GTn·ØH ÒÉ@ª6 ÄúË}@ó–W®c–¼n[…øüü9O,ºõß‚VV¨AgG6¤€µñ¼ËV¾t³9⬾O‰kæ½-þ°ù + ¬Á­?9,N¹lsD²þª±î°mì^QPà³TÐwnÉ£½&š_¾L6¥¤BÉV}¨kt'ÇÉŸ¯Ôv‘h}×.Ñ{ù1ÑwýçV ¹WÌ@8ð†-¢TS\dM€J6BòîÏæ ?gö,‡ƒúŠAOŠÛ|Ý1¸vAÏ‘S¾>ûÊ÷x¨­;ÓB\ÐÝçU^½ŽÉC!OîºJ´}Hô^õ‰¸aͧV’¼×,z_4´ÅAó»¿j¢ºÉ.A<œøå¡ŽÁ­Ñ1øaÿu þ%Z oÔ”]€žÝmóøóaºxB”k0Áé;ÏVÓôQîó¥Îž!NGrJç)¯‰ëV|l% kÐsé1Ñö¾ý¢ÆÅËE@´þaà§ë.Ãl#ÎýľÖm=S ¿Ï/ƒwøŠàËË1T²3-È VÝ1hSeN¨õPЇêÊ·œ+ξm›¸|ö»âê¥YÉÐtDœzõéÈÊFö/0ïý¼ž…€ŸÓƒÊ7/z Ú*£wa¶É…>;ÞæÍ±?üíìu›O˜'Š×x0 èƒI¼j–ˆV÷ìÝç ®Xø¡•,YƒÎÓÞgöyJ”=W•7‡÷~mùkuF‡UǾCÚ\¹LŒ_ñFÞè·Õë ü1ùüEÛ?W Ø,ÊÖÁÆW}@¯æ€¾xÍH–Þ} $çÔéþ¸¸àÁâÛÜ÷­dñt™õ®8wðNQå‚…Òõ—w~î#WãþâÕÇW¹_œÚršgÕåÔ)ÈSûŽGv‹zM§ˆã+Ü+ޝxŸ=Oö€¥÷}E°ÆMúoí§¼%:<öŽ•_ƒóÇ‚è¹IÎ!YóÎo‚^ õãøJ#¥¾œPé>qÁKŤÕoæ”î+¬¾«)G¼8~Ìð/Á)}Í€M¢\­D±rÃE±òôØL z¸ø¸×ñ¤?w=Éöâîw˜{²ÄM‡îíx+ù·m'ú=+Ê7ŸíÌäŸÞÁ_ƒw~\ý$øa þ ÷AFˆbe‡‹ÓšMwMÜ—Kƒg& øÏg3ð'®8*Úv[(Ž/s(FÁfqÓ¤¥ç&ô¼×» Ç½ /yúdQçÊõ¢ùý/‹6Þ´â“5hrÇQõÂ%Îà‚¼®‚Ò;”à¿„à&Š•¾GT€A¹nб|÷ÙîÜœ,àOÈ6àoÂØ¦!ãv‹úgMEKÜ%Š–º[nŽÜ$l–tñ¹yò^OГÌsÂveÏž.êßð”h>æUÑòá£V|ºç ?$juEZ0<>yß'Ù ðK—Ÿà‡á ×(½Ç2ÿPQ´äÝ¢xé»Å…—/SÏÚù“ü«³øËv~.®í¿Q”«r¯(zâ¢èICäfpSäæ`“<ïõØX6«<í¶¢éƒ¯Y±kàêÀÙ£^uz¢[ªý¤W¨˜~}ß×.?½É¢¥~è]‘‹ÓÏ™$†MÚ'¶¼š5ƒCØ…7æ˜îxïøõ2 ü)«ßíºÌÇŸ8X9þ¹èôÒÚô!.>ZžÜ'Ö+ª]²R4r@4¹ÿU+v ¢ê@½>ωò-æ„Ü÷ƒ]~©w0y_&9€I¾JÝÝ—)«ß¤Åd¹¨EŠ TÖ>²‹_÷÷Z×?-êßó’»…ÖzwU»<.NªóˆËòÓи.ÿ‰ŽË_äx¤¢¥ºë‘]™þmÉþ´L¿Ãå å¢ÊÅ¥‹Åv]|i퇋±1µúîu†¶b× %:På² Ù§X~éòóº)]þ€Õ·äÕL¿Y²C¦€mÿ ÊÅ¿#„Ð fñK K«j¯gE­A`k­Ø5H– <(*\²¹ý£ –?œè“Ü ÔÂg3Öø¿ÀèñÉ~£LÿŽ1;"zA‰:Nv^©óD•>»Dµ/X±kP(¨xÕVqø"7«ÏHìq\~“èƒaø7gn4ø[ñ€>nrOÝñàÿ#à»àéJE&ôŒD•Ç2­•û¤¹u¿» é@Åë·Ë! AY}A‰=^Dß`Q±úÈLºùË“|þ—2ü¹[? „ïx¯’á»ð˜}h¢ÁÏåºm•úîµb× ¦T¼i—(Ý-טÓ’Õç$ö8¹ünl?ÄêŸÞtR&?8UÀŸ› ೆ>ÜÚeNCÑEuäWë´\Z{³ÔVöËCû,g”#—¿ »5!½×Ìè#Ñ×¶Ë‚L¿Mª€k&€ÏÏ,Wí>³7­}Íö‹D«^ÕÚ- ¤åš8lŸ¥;ã²I&j´K_°LT¸n›¨xÃ+v ¤”¿â †9î=ªco ~Ÿ…³oŸªß—E<Úê£Æ£ZÇåâ\tП7æH ˆÇÈã¿mÔs™þ‡ñ‚>!rOÝñ‹øÿÉø[_:/ìnOW¿ý£o‹¶“Þ­±ÍǾ.êö~J”l8Åi–Éúkl¢Û›[âLÌ£g+lLk)Õr¾¼ÿWèù¬?­Á5ψ2W‹Ý%G›é–ÝjX‡Ó­×éÓO«Ï‹ïÍBÆqoˆó'¾)šßsÀó®?jÖ‹™þÚ”_ÿh&€ùÍkUjn äöÜï;N{G\8åm¹­9*šasšÜ÷²¨Þ ÷µÓ°ÊÅ—SkÙ›C/ä;g}Éfs¥û_®ûQ¾ÇSVò| Êv^/JµZ(]{w^ûõ»V_5ì„Á(…ÿÊÏŠ³xUœ;æ5YÅyÞ„7Ä“ßg¡YKP鮲úÓ6¼›)àK5ð—føýîÝæâèê;UrÛ~Âkâ¢Gß‘›A¬6‡Õw,Èi0ø€¨pá2§ûª´öjžžVËÍo>OZ~*­ï{å¯Üj%ÏÖ Üe›pÀ/Ç>/@žÇ|yà—lªÀ/­>:õÂ0Ð@Ð+¬Ú}£h8ü%ÑxÔqÎh W7ÙÖ¾- Ì…Sß {o1Jw†¼ë¯ÞÿU¦€ß!ÕÀ” à˜vÐI• i°qþȃââéïŠöØ n ]1ºdg~Uœ9òˆ8}øËâä>Ï‹ÒØpÇÅŸáŒgVÖžJ •¡õ"QºÍbiýË^ºV”»|³•|Xžzéó—ˆRç-Æ>/ÄA¿@øÒêCÜ1]0 å;®uzCý9[Zû×EKx“ä’È)±%Û©—¯1ºõ8<%*ß—)ÐósË¥ø­3ü)hzÜNËi°Ñ|ðÙ“›¡‰>ºdtÍ΂Õ?ã¾WÄiÃ^õ¿^åê­ØpœôËlZ{*”‚ÊAà—¹p¹(Óaµ(·°\WÔþ[ÉÉ5(Ûi-’¸V".¿$ÞRìÿ¢`«¯\þ2Øû}vŠzw  /¬è¤×Hï±ÅØ£’C"—DCCS ¥Ð¸~íÆ2üÏ}Â䞺ãŸàÿ/Ýà_¾ë‹àÎ:ª‡ÞY}Ÿ]f¿'7㢢.]µ†#^‘UZu†¼(j8 ÊwÙà¸øÚÚC¤µ§r@IÊ´_!³þh)¨›VŸž^Åkž’u ÔúC_‚¾¬=9#rG䤵§Ôi滈(ÍtjöU§–ížÛqn¦€¿%åÀWà?ÝÀç ËàJ鎹²M6Š&Në±Vöº¿tÖ{žD]µ3ïs\þzwµ¿(j è‚‰ÔÅU^!½ÃƸÛKBÏß‘Ðc‰×ÊÎÜádó©Î¼Êê÷¾û©L¿Kº€O&€Vû9N®´ÛŒ¨Új¶¸rчâ²yÈ“Ø$úÈÂj¢›I«*\¹Sî„Ë×®j€Å+•úì–l¾tï]kÐKkOÐop” d_WîòMÒ[\€•Œ®‰X‰A8¶Üe dq8—ÃUN[}zmÚê—Áß+\»MTR…[Õ°ÿ´öÔ‡Saí©gÀ;tÂw ôŒð#G4,]f¿/:"’Ä L¡ýù† w&pϬš.à·ÏÄìpí*£k®Ó¿L£É¢Ç’c°úŠ®pù½‰¾×ƒ‰>XýÚƒ‰8íyêW¾eÀ¿GTìý¼tÿè"¬=Ae‚RQ¹d¨¯Ç“‚Y_ü¥|é-XIëÈÐ+ö¢ÂÕȽ¸êIu ü´úðÌ´Õ§Ë)òZZyî3÷»ÊmäþŸ = Ho^aXøn’¾£µçu’×Ê F½èÇïvå)Á(î àâ»DA_ rOÝñËfà Škï|20C»Äüó«(®ZtL\Ža–$ú¤Ë¯ˆ>Þσõ"úHè°f_Z}XJ7ï–¹ÛÌäÓÊ#}*Óå=- ”ŒÊVÙ_¼&0í·,,L)Ƀ8²’Ò5 ùÊ}`½…̸Dá•L¼â,½±`«ÏÄ,™–}ãN¹¿ÒÚã°ç¾sÿ¥µ‡+|׉Ö×IêXKD’X¹T¼wþ³gøÛÒ|þÏÒ þAãö¹ùzÎeÓߣª9Á¶ÛÜDNj3£Ï$úèÚqÓIôU¹ à¿àï»GZZ~* AÖ^%ö@ɨlRé˜ëºíŠ7<¿?÷Œ[IÁŒÃuKW©ýqÀÞ—´ú¿tù7‰òØ3îSÅ^ÜŸ޵ÇþrŸ¹ßÜwIèEßÑ`˜á»Î´ö¸NRÇI’9ür O 7g=¤ø¼GÒ üÍéþ’c½<‡õÒÈ¥¾dìaqíòEÅtù¢'tÜDŸrù]«ë@@ó>(-ÊŽ5q¬=AOk¯ |¨„´&ʤ@·_æ XIʔ턂*m±y0ü÷ˆ‡³Ü#íaØ€{ƒ÷!¡« ½DÂw$©[ô,k_²Ô½§Ýý†mgg øµÓ üKÓ üu‡¿SÓn¡—¨Âk~Û3â†ÕŸJ«u(ÑRÆÍèC"ÙÚ Œ>ƒè#áã}J¹¤bi‹Â;$\~×…ÔÖ„ŠÒH³Å|† kô? *vY' ‚X h%¾5àYåÚ§¥;.9IÀ*†–[ÌÆ•L¯’Áa-ïõø¹<”¡WÐðIc’Ç$‘©cUZbð&‡nî~Û«Wdø¿ô&÷Ô¿JºÏÏ+_¼3íV¹ù,<óº â¦Ç?ׯúDô\ö‘Aô©Ø>ˆ>&`D&úK¢Ç‹ès\~Z}Þ#ÕwMº”ü™ãâCµµ'q«B¥e|˜×­€Õ/Ñ'•̃èã½^³Ç’9fȉ=p·”Àçý‘®$~ŸÊJ¥%yÄPÓ@™V§ÏvQ¦9:½°DØJÐTê¸BÔG5%óäI¼òþÍPÝr×ê«èKÅvð ñM!á'­=e‡QÖW„¡—XøŽùøføŽ„=IZûž‹ßWµúQÛ4D“‘!S2ügÒ üÖW._5Û¨zÞ\qËÆ/ÄÍk?½WDô‘”ÑD_;–Ú,Ý Ëès‰>ÆöËâÞ%Iô‘=†»/Ù~&Рɇi¢t-u˜ˆÊJ¥¥òR‰©ÌÌÿfrù…Ú=Ñê ¥Ÿ²AˆÏ¥|«yâ´»düü ÄÑVcÙvmõo—ÉV°ø´êÄ*„ZURå kŸ@øŽ„^hõ¾c¨˜ž$­ýåÓ^ð'ºM:œ°ÞCb䜗3añ¯ËðN7ð/»m³áæ£Ë:¥”B;­?lþBZýÿÔ úŽ…gôi¢OÇöÑG«¬3úèJB) ÑǸ>{d¢ˆÌ G5¼€ª}w»ña*/•Xf„©ä2ÇÌ?gäK¢f—Õ²Cìöâ3)Õø1Qÿ¦§E3TQ’p%ïÂ2XÄôŽ[çT$&Zñ ­Ô ùL¡fý„L£†µgØŽaVma^Eá;¾hõ]´ð=Hz’ä‘.~è³gèåè¶æ‚úØÆ÷2üÓ2ü+Ò ü¾÷;É$WèæKÀ ËNß5‹[7}!ú¬ûLntùÑÇl+™ÑçEôˆné®$úÛ‡…‰‹ècŠ(sÃeJ E%X¥+·ˆS½ •—JÆüo*5•›J.- ÒAihŠN•Λç(‘„íÐN¹bhõÐk¨zs’«H¸²BZ}ȘV¿æ-»¥G%S©™Q©Ó¨™Mɤ*™IIB/røŽDkhõ ßá3ã ßõ\ö±äÈ#µºKöpä÷¬X¹/í 8þ ìý.SÀ?9ÝÀ>ó°s¿×tUO½ëæ½%nÛò¥è·ásq\~—èCÜÕÉè 'úXgMë\ºk} êÌŒ¾`¢.?­>]~§(DVƒ©úï2È0«qý³âôa/Ieæg8Mœn.Tz6v`’[‡5€ûÿ™SC-O¥ú…‹Äy–Q&VÑÊÒÅf=÷9ò$­ñ©VY¹;R¢ÙeÒ(ŠrÓ¨Y;¡ ½‡ïHèIkþˆF¥Ùž–†ÆìÉWªÞ8±õè/é¶ø úB±úúCü_Ò þÉkß1€h¦yù¤—Åí[¿€Õ×D_¯•±ˆ¾7ä‰/3útl_eôѽŒLôMVi¢.ÑÇrPºü¬‡¢ÊúoÔ~—ï°RÔ»m·[æ©­=•^×x3½˜dÒž%öڄɬ;é y"åÏ~L´ºG¦R³a É3VPòà£×CÎ…V_æX _bÍ^O¹yÿ² ÅSºDZVJjBOåê'¾Óí´<ªï.…g¾ëMkcB£Ò¨çzrÐ=ÿ”–3Ò z~ÞÌLW:¿ 9ßqóÙ/¿ãȽbÐS_‹þ°úÞDŠxÑ'»õD"úàš»¥»ñ}Œík¢O»üPTÝõEÖ~#·J—µ¢ñ°e7¶£Ò3ÄÈ>AÁ">ãÅ“^u.Yâ$+å°”¬û°8»ßSò;ÑãâuËi˜âäV´ßÂ.hõëß¶S”CØ“kævCBÉ´ìÀû=û"ÈÚ‰á;“Ћ3|'÷º`Vß…†ïn„µ§1áU²v§åNÿ}ãžîeK3ü>™þätÿ‰×'q:Žq¿'ð[|VÜùÌ7âö'¿·mþ2˜è#Ë8lXé®ÑGö]}2¶o}Ìcº¨NUÙb^DŸ¬ñW]_d³vûÁ0ÏSzn-q¿e@*¿´öÓ:o‚ƒùàL!“|у‡D•¦Óœ./9$l’rZ÷Uâ²Yo‹+ #ȳ°lš½mõéõœ3ì¨Üi•ꈴÐí†ÄÎ9ÁÖ>…á;쮾3Ãw½Á1Zt ¬=¯’•ZÍUÀÜó;õݘ à7É4ð¯K'ðùY5›OWÀ» ·‹ÀorýFq×¶oÅO-<ñ•'ÑçñÄIôén="úèò£¶Ÿ-Ÿd¯7Tí¡¡§nðX¦å<ÑèÛE{Õʉ`E x6imðœÌ“!$Ü/Û ~N”®3VpÈv©Õz–è6ùURåý˜¹í\wº¬¡ +-­>¼œó~MÔî±ý‘Ö,»£¸G[{Ù„ž¶öªŠWøÎÍ Œ¯úNzfóÌHá;F‰hí5à—@‰ú¸ç½GlO7ðÿÉ4ð¤øgwYâŒÆÒÃ2 S·ë qÏó߉;ŸýF ¤Õ#ú>–JÑGrÉéÑçtëÑ $%úœ¯ŽË/Û:«A•Û--ï=èX{€‚à HøœšT"IIWóúåÇÄÙ×®'p`#[9g™”¯ÿˆèxß^yfT…1o'…Úñ¶XàâZ}Xü3nA1S3§½5×DzDðŒt§ciíIè%)|ÇpªÙ<Ó ßévZFõ¾»„¯Ž¼BöYy̸c|C¦L7ðôÉ"÷~à3´¶/ßá&,政r›ùbøÎïÅÝÏ}+Óå7ˆ>G}´¦t§Ý}né®ѧcûšè“±ýàÒ]Kñ}Úåw‡9``{¹×î¶FtĽ޹[2Kì# ‚‡ "˜hu¨€½æ½-Nm?=Ü118 ä¤Ê÷ŠÖ·lýÖ*Ýa2ß´’L¤"~ ¼VMj«ßr8 ˜Ú Õ9‡Xp¾îvÌç´öºZ\á;'_VîÕwÉ ß‘ÐãÕ‘úÔsö›ðßÃËßH›î+œ-Ì8ðUêî é~Ï¡Ûð3ñ˜?|ÇwâÈmßD&út‰>tK5‰>ÆÖõ0ZfÜÅGô!Wwñ úÈLS¡ukgéò³Ÿ; w8¾ Ã>JÂ…<óæ­¢û¼÷]kO6™ "˜*én>ñ¥ôh®œð¢¨|ú8Q´Ä]™‘’w‰3».ýV}(yZD’_ ïÄ ¹V.ÿ%“^'_ºÂl"§ôlsNkÏ&´öº½y:Âw’Ð 4ÏÔÕwN>~ |ÇïÄ5'qÜmüa9{Q¦[ß¼g?I7ðûg ðg¦øƒ&pwxßr¦ä<&îØü™±ë{1tû·’è“.¿"únÒ}^DŸnËÍ}FFŸ&ú˜z™è3Šxt#Ñ'cû ï…}ŽËª½&˜âÂô]Žg_Q¾étÑæž=޵x"Í(\y ^iî‚tòŒ(Yi„(rÂà´Iͳ'‰f¿.î‚wÅu&(h¹ÖôJø¼\oZý Þ®ß$JèÚŽ1ƒµ—.>¬= O9ЄŽq8f"|Ç+ˆY}g†ïø¨GüžíGìq§í€?Alx9í 8šg ðoN'ð\Ì|é@(OÇê»ô]qßžÄ0X}*ed¢OwëqÈ&²Ìºt—¡%Yºkfôm¹ÍŒ>–|ÒÕ +Ý•}HçU-¹£}rŠ‹ߤH#™6^Ô¸`è6åˆcí&*à€‹ £òû‘Óàõæ®'¿-®Y)ŠüÅ¥LÊbTy÷v‰{ñ™\ã¡Ûïj0"‚£?,#ó(d€Þ¢LãGiÅú€VKÝIFA„“u<Âw.¡R}-|§Úi…6Ï”„^¤ðÊÇ7Ãw\sê‰ãýŸ þ$Qéìié¶öÿÖŠg ð§ø³ÐCJè˜j.Þ5÷ïûQÜ «¯‰>%*ѧÛr³tWÏßS}L!ÕDÛ/G'úP·¯[@EÉè #ú¤ËO«—_»øn23iÉ®Z#nXöt¥ .*!ÁF¯†à»w÷bÔÞÅûW½'Nm1UwÜ€¤Êñ'Ü!.ì»^Ü·ó[¹¾<\éYñZEN…Þ‡iõ»M|Yv?vB®jZ±œIÇÙ…j„™´öÎÌB=Ì$á;îaÐì;„peõ]œá;iíñýxÈ5ºvCøŠÙoØqQºÿvaAŸrOÝñ‹øÿLø×ú. PÆ@ÌΣ÷‹Ñ~#÷þ“è“ÝzL¢ŠÀdÙ£.XFŸIô¹±}Eô¡TÆön=Œ>UĒщèã€OÉ3œÍ¾[²î#¢ÍÀgÄí¿tñ•µ'øB‚ñÁ~úY¸ªÓ­œÙÃ|õ.œ'nYîð<äø} J‚“ üÚŸÄÔ£ÓÞü‹xdß·¢õUKD‘"pÿãðJ—¿G\÷Ð.1í?‹Ç S^ÿ“?”‡áMЫp­þ®ÄeîåN›àL•ag$]@¥9y0;„^xøÎ˜WXÈð¯aaÍ3Ýê»@]„3ûN7Ïtr&Ìê;7|Ÿaa^e¤g³íkEÄ:QÄsëØ½éþùÙüþé~ëžkB€?]œÒy¥TP*'ï¼aD\·ðÒ]o¢O·å–%£’è;âLÝIôÑåWÝztŸ÷¨DßB7£/Ñ']þZìèŠVÎÔˆYm'`¢PËë׊áÛ¾’.8AÉïN¬íô·ÿ"f½ûW1çý¿‰‘O|(ê7›üÅŠ ÷[+;ò‹˜ýÞßÄÌwþ*¦¿õñ()8HèE˜V¿ß¢7EíV3NØÕ,—¦µw =¾Ó£És$|G.…ÖžœÑ€µy²¸oî‘tÿÿ€±’Ùüæé~·O†¿—è󘿧ˆ>9/Ñg¶å.,ÑG«ÂX±ìö‚Z}XRY­§'·0ƒ¯ÜQºæ¢Û½ÏÃÓùÙµö+AKðôó>ü»XøÑ?ÄâOþ)úÏ|QT¬~oÐpöE3ÅøÝ_ŠEÿC,8ö1÷ƒ¿KðÏxû¯Òk˜jXýáÏ|!š^µBcú0‡Erœ™´öªïö°ök˜WøN *MuøŽåÏàkxˆ»Óp`í£†ï‰ÊÈÉÝêJÅkÍ óß °Òâ;^ÙÔ ï§øÇ’ú¤‘{êŽ_Àg¨!- ÑçÁÝaÀgRÈØ~ã_q>Ý­G%™˜DsæÉøRQXH“mDŸìã®Ç3|2u|ÕÏœ nÿškígÀÚ¼1ÁLÐ/ýô_bùçÿ‹ýM\5ôIQ§ñ81lÕbÅÿËðÿ—|úO þù8(x`Ì2¬þø—~—yZ”¨:ÒWŽƒ‡×§Ý¹ÑüT¦R‡„çZ{3?»ÃwäˆÈ£Ð€\1ñ%ø.ã$ñ,ß›Öë²ø üo§ øÃf½ì üáO.Ý]º¥$¼HDi¢ì³,ÝÕDb䬾Їèc MôI—ŸSw#}A±}5×-jF_âD---n±ò#D±2ÃDÑRCEÑ“†ˆ&Ï÷oûܵö1ÁLPô+¿ü·XýõÄãßþWÊšoþ#ÿ½ÿŸàç±ÞÁ<×êÿEô~XT:õ!'E,Âg;£Êáâ«æ§… ßévZ¡Í3e;-¤æÆÙ<“á;f_2‹µþ,ý ß9õºy¦[}Ç\ míUøŽ¹¢ÑàP:Þ»'|™s1U”j4 8~N‹¡S¸ž­À_‘.àO\ûn8ðaYú¯|OZ=’\¼÷ÆCôén=ºt—ó÷äÔ]Ñç5Oö„S}q}˜²«†9º}.ÑÇ"ƒè3bûш>ZÞbåhõïEKÞ-Šžx§(ŽtÚKþ°A<öÚ/bþ1Öþ³IpäkøußÿO¬ÿábÝwÿ“Àª¯þ#–Ãò›VÔÖÄim¦Ë… 4ÒÚë‰ÅºÕy:Âw2?xö&ôÌÙwÉ ßÑ`ÐpЀ´èoG[|•¶[»í¼t‚žŸÕ![gº€¿xççžÀ¿~Æ«’Ø"³­‰>ºü‘‰>£-7Šcté®Îèc[¬Ðù{I!úd·Uº«ºõ0™E—îˆ>¤óÊðž“ÑçEôÑ+«¬>r÷eú.2øÊV.úLÚ/->­9­=-®îD£B…ïÐ`#‘晪…¹9û.®ðs=ûά¾‹¾c¾ #E ¯Yüs¯\™nà—ÏVàŸŸ.àoyí'Q‚¬±©änî—ÄÃY’èC<;Ñ'»õD]~·t7A¢aŒíGœ¿'Ûr«1Ϊ-·Ù£Ï;£é¼Ìè‹DôT“.?­¾tùµÕ"Š¿C):P’xuÏ/îßò¾cí7ô›bÃà/ÃuàúŸ%Ë uÒ~q€È" ÓÚz™ß93 XSÜ<3røŽ•‚ñ„ïh(b„ˆ×Æš1%ÄâwºuK:ÿE²@ŸTrOÝñKø 9¤eAj¶žü¶wl“¤Ôco:a(—èÃÉí™ÑçEô¡4VvëQDïˆADâÃn¾„3ú~=¿=¬GŸŠísæËUelß)ÝubûÁ}‘ˆ>‚µ¬u‘ã‰ãŠÜ.Á_i¼m®\,æ½ù‹´ðtóiíyÐÕ¹þQãÔeª/ EO„‹oZ{Mèik¯Ãwº7BBá;Õ`ƒÖ>Í3Uõlrkï]}ç´ÓÒÕwnøNzÒÚ«0ii4 þõ÷íH‹ž+<=‘µÀWà?–.àŸuúŸ™¬~ã^%#ÍPÃZ.Ñ'cûÑ'‹xâ&úЖ›=úŒŒ>—èC÷\“èc[î°Œ¾HDŸÙ–=ú¥»^DÀ¯“F<2ú"}EŠÓå‡Õgî¾JÞ4ç%éîì¼ëóOºùMÚMw^ƒƒ‚×ÚãQ¬¼¾C>A„ð+ ëïÌ|ü$5ÏT3 غœŒÍ|üd„ïx=Kk܈ûw}ãÂ!ÿÎG¥ød;ð×¥ øú #mðk]¼L†£˜¸2 .ч{[䌾@[n}N·Ý VÍ1[ÇKô„r3úÌù{nénÁˆ>'¶èéîÆöٓσè+r<]~ÇêSnŸ}Xºü$óxþÉKàÓÚã à! =Z{\Ò¾‹2 '´y¦ÎÇGb+)™hÅ4k·úN50eC·yfŒê;]ôÄð¯‡ÌáuñÎM‡¬þØo¦ø]³ø#ÒüžÃž >]2.¬>XL¢'¸&úd9«.Ýu3ú¼æï¡t—.?R=#}d”ƒ3úœqOr‚.'»J«%£/ÑÇZuºü’èÓ.\Dßp'¼g}Ç©”ݳ^”a=2ø$ó–ñ/Iü5¾`º< xPHB¿¾¡—høN·Ó’É:Fó̆ï8Y‡ÍQ˜H%§á"|§+uõ¾cÉa’Ä}¾¾æ\ü9ϤµGµl~ÇtऀO—lê+?Ë0X"},âA:¦Îè3‰>6bÐD{űïŠlÁì–îÝzÂæïÅEôÏß““xÔ0·[îѧ»õD$ú’ÙsžD,·KôÁ¢ß6ãE±±z†í´0v&,¾Kè¥*|'óñ=šgêi8zÒmP;­ä…ïdÿB£yfhõ¾#)LkO’¸Ç¤ÃΨsÙ4%«¿îð÷é²øß'ôI'÷Ô¿Bº€? 9‚]}§Öûí_È“PHô1íT} Í0!Ã%ú–éöè‹AôÉØ¾"ú˜Â^ðÃѧÚr•îz}ª[O›8‰>ŽÝb3úE'Ûp»}`ùCˆ¾[§’é»®ÿdÂΙíf(B/ÂwºyiAÂw$…iíé1v±+ ø•Ι.Ðós¶e=ðø¿LøglE×S£,—ä Çš÷¤5£BÇKô9ÝzT鮚¿”ѧÛrÇAôÑ &úö8Sw=‰¾ù{)&úú=vPˆÌß畈2­÷Œv3³,|‡kG#DÊP©S}ç !¾ãU,´úŽá;}©ú.4|GR˜Öžcó[Ÿt¯[Ú⟎'éÐqõãrø[Ó±(k^øV¦N8:À¿qæ''.¬&ú¸%ú8ÜB}ŽË…è“m¹C2ú"}˜é>OõèC_y§t7rF_D¢¯Jd¢¯ï£åÈ¡g\83Áð™Oõ]òÃwŒ®pü[e;ÓpÞ–W2²… ß1듺BO‘cƒ+~›ë×¥øWå ðG§øüŒrg9w.ÝÖ‰w±nì•L5³ÐèÊÎý 2Ñ7‰&ÑÇ{ŸSºëEôm¹=2úÎì‰>ŽÜfv›DH¢/¬-w„ÒݘDŸÛ׃tFŸtù¥»Úå7‰¾›Ñž< wjaùn£ g„^xøNçãËÎ:Fõ¾3Ûi±yfaÂw»$)Ê5“Ö!RZ{z޵ß1Ç"áê;äã›Õw:|§K› æ:ÍÁ!Yù‚Eð‘S}ë>ø™tÿ”\~·tÿÔ‹Àwš=œ7ài«–¹ç´úšèÃFzfôi¢Ï«-·"úè2}pùÓNô5GgÞˆDŸÓ­‡ñõp¢é¼Ìãiwã”ä½U ’œôßµŸgøŽƒJ#Tßáù‚§á¨ê;—ÐS³ï¼¦á ä)ûã߬òñ£„ÃÉ ß‘Ð ßIk‘žÐ ¬‘Ã×MQdª[Ò×€ã×dƒ>%䞺ãWOð[õ|< ø {¬•ÙiŒQ3Tå}Œí+¢oÈ“èÁašèC÷ö°g›hgºõ°GŸÎèÓE<$úôü=Eô1u”VŸ}ßhõkbþ^UsþÃ{zþ^(ѧÛrÓê›m¹=‰¾á}žDŸQÄ¢¯÷ä¤$ ±øi ß¡J‘×›ò¸æ°9i·ún‡ }Ò3¢µg7cò$äKX 龃‹¹úÎJbVßévZ±Âw< é ‘»÷[Oà˜óJº,þžœ¾ÿé×ÛÑ#$_¿rÛE2uÍ7ÿ•iaD668£E=ïñ@F_€èÓ±}‡è#Áäã@R ï¢Îü=/¢ :iõÍŒ¾HDŸŽí»ó÷¼Kwc}(âA…ݵ^E'¡rúE~*«ïd>>­ýrêkíéâc-\kOõ"ô¸î,f˜ÕÍÇg­=¼3ŽïâíVß©i8fóL³úÎ ß1ñ‹ `ä‡nYø†G ªXŠŽEéÐo|F¯\þøt,ÌÐ/À'»ìM³Žþ‚ʳÿ“¹è!úØVY}´œjCe¢R9¥»^ó÷ŽÚr+¢ïTôèÓD_UIôyÍßSDYm¹×É™ð^¥»Œ¾8‰>ôçÓD_Ïñd:3Ó´°í4Ÿµö Uß9Óp¤µ7¦á”æ¤Û„›g„^Xø„®PÌ™pjíU;-¬Ì¨4›g&|§[–Ñ80ĨÐÕ…1ú¥PÏqíéÐo|Æi¹üéX˜ñkÞ 4uTÈì?´ýsYvºÕg$ú˜žª‰>2µd² Kôue[n†÷4Ñ7á ^Òó÷Â2úT,ÝES éòK«a×<íÌ߃E¤e,§JwŒ¾U‚` Êè3‰>ÝJÏsSm¹½ˆ¾«Ç5æ¦0¡©ÁEóBÚiÍ3ÃÚiy…ï0ð2hö]jÂwÌÇOVøN7) ß1¯Öž­Ê:Þ³#ŒÑ?ùü´5àø0ô»\~táóŸ…ßaö¯zGlùEȺó¨DŸìÖã}n·Eô±á"gÕ¹DŸž¿'‰¾cNén¢ÕbšècÍxÒˆ>Ý–›¥»Æü½°ÒÝDßU,v¨4¸h¾aíí´2¾#¡—ÌðžGÀ¬Íhá;FhíYÇÐô¦ÍaŒþ9ÝW¤ËÚJèSÆê+rï·þS þMG~Ä@F£!‡êß~ýÔÃøMôÑåHô™m¹=ˆ¾ð¶ÜQˆ>=/™DŸîÖ#§îš¥»^Dêöiõ=ˆ¾+ÆDf¨Ôïà#ñ'¼yfȌ i8IßÁÅg„‡¤; W¦¨á;x]‘ªï8ÇÏœ}Çê;¾Cy¶Y}g†ï˜ÕÈ(s@¨/uº¬0ÊqPÞÅý6§ ø³rø ü{S |¾õ–³Ârö; ßáŸ-¦Øp"ÑÇöÑ&ÑGkVº«‰>L¯Õ=ú¼ˆ¾ ¢.?kÅDßagênhO\DŸQÄFôyÍßó(ݰ/h¿LX2…€ ðe;­XÕwzŽž}§«ïÐ>̳ú® á;44 «¾“á;zA³ïtóL‡Ð+løŽ‰ix5d8¸L3¬!Å9×x>]Àï“«À4ÀoÜuYXÎ~³›7»À—V_}_ÅÈèÓm¹UF'©h¢$~¢Ï˜¿BôÕDF_‰>ÌŽ/môèãàI§t׋è ÌßÓ}ÝÆì—ù t{µðß§vX({öËi81gß0|‡A#œ,Ìš™¬S˜æ™3‘𫬽3 ç#•%|'Ûi9Í3Íê;†ïHè1|§ûô Þýs±Çþ‡ƒ&LðÏÊUà÷Nð/¼ SLuÛ'IðaªÎ¥Ëƒ€/‰>Û}<ÝM¢o’Ù£ žê²t×+£³ßeÌèClß ú8†ù¼¸‰>Öí‡ÎßSDŸŒí'‡èsbû£Eô$d ÃZZøo |NÃIxöÝyIkëHÙ‹UóÌ‚†ï kž™‚ðy]}g†ï´µ§žLÜÿmØýžaÓ1KßHðÿìÉUà7Lð¯ºÍ¾‘ÈÆ›þ¿ ð”è£eÔDçÔËŒ>MôyÍß33úÐß]}¬*3‰¾jfFŸ;OOÝøex¥»‘2ú"}ÌŸw{ô™ó÷Pº{éè}r¶…‰Júïõ:ø1gß,|WájtÖ‘Öýñ]kŸ‚ð®a‘ªïX“a6Ïd— ß©Á#:|ÇœZ{Â#6 »ßø³Ÿú(À5U O)¹§îø¿ðÿžjð÷¿?l€&ãùKý5øšèÓ±}žî Û¸¥»:£Ïkþzô9}^ó÷«ÏÑLŒ)³4Ôíѧ‰>9/У¯ö`ñ ¼—xFŸÛÑÇÙòŒ¡Ë¶ÜMc}îß'óL!V·ãâÀì»B‡ï6Ê,Df#Êd„*²dèR&ëà«„a£•™¬ƒÃWzìb$­=Ö‰¬¾‹¾;&S©{­D²ò,XXå4ÏüÊ™t«gßùøLØŠ¾sZ;ÍHoÿº3ìÓh¾Ák_ü.À_˜³ÀWà?œjàß¿ð59Ç,ØÝŸ!&ü6 øADÂ5ºt×íÖc}º-· —Ÿ.ñ@„÷8qENÝ5‰>¸üNén £O}-Æ:±}}$¬œŒ¾x‰>Õ–fÊuY/ÊvZ‹<~/¢à—á½èDßÅ£öÉð$=-üwÝ‹|ùpN_¦ªït>~hó̘Õw¸vq/¤µš†ó­` †gøNæã;ÕwføŽ03>é^5v?Ff©.Ç*5ºüY¥ôüŒ¹ü9©þô-ÊÖÓà;^Gl9|Mô±ÃìÊ ¢ïïá=ú¼æï©Œ>Mô9E¸üÎ0ƒèÓE<*£/:Ñ÷¬(ßyüž}¬Û7ˆ>ŽÜöjËí–î:D_‡‘û$@(œ) ÿ^‡Àç`Œz… ß­—­Ã™}(­=ž½‚n§åU}‡è£Ãwð–šgÆßÑ“¡gÆ.Ê ßÑdø—zrÁ gœYyª½9Ýü¨Mµ>«÷o‘ëÀï—ê…Zuà§T¸çO·Ì{ÕøaD»õ(¢V@¶åVD`Æ}ã"út"úd[nEôÑe ÊèƒKËsÖš³æÜÆ'чF•:£/Ж› ;´ËO«Ï2Rc‡jËÝþÞ½âf ¬å)/‘±NçÕë({8|gäãËÙw1ªï² |§§ Ñ+$ðϸzm˜›Ïñì©Ög¼?‡ÏÏuàŸ“†…¥Ü#ð vÿŠ1û<1£O·åf鮞¿gfôÁå×DŸtùã&úЖ›=ú<ˆ>·ˆ'ч²U´Ðê;Ýz6:ó÷BKwc}N[îv#öÊûp¨Ô¾xi°µ‡•£›Ë,Hr||•šëæã#5×>“kíuóÌ$‡ï9áu*±ð¦áDßé¢,Ý–„­=¾:ñ«jÛ޵×ð*/Ãxö4èóÛ©}ÊÉ=uÇ/Š…úwª«NÛ¹Aî>7¬í€§"?”èc^¶Iô±&[–îz}º-·'ј¿G¢E$Q‰>¸ü)!út[nyGåtWgþ^Ûá{eP‘À‡W OÝÑH[{p¼F”’É:1ÂwšÐÓµöA„˜üÐê»(á;r$ Wß)BO¶Ê6fß1|dž«Ü×°ðš)Ⱥ ZV?ÔÍçúõA5hªuï¿2ç¯Àÿzª«ù+ÃÜýFW­Ž üx‰>V¿™èóš¿÷¶%úØÞ$úèòGÎèC­¾ž¿W¢¯Í°=rv\°|$N¾À'AªC¢2õ¹0á;x*‘ÂwªV y¦S}ǰgÄê;DL9 ª¾KrøŽƒDµµŸûæ¯an>¯AÃf¾”àÉà/N5ð;ߺYÞOMv¿j›ùQ/]~l¶Iô1s‹ÕYrÚ.é©»,aea‡çü=•Ñg}W²t7^¢/Îù{áDŸrù;ÄKôM­ïÙ#z€‹•“/Á8²¨³ï¢Uß,|Ç’eÏ𒟼›gFß‘ÐK8|§òñuøŽÜþÃ;¿zš ÅUiâãï¤ømóøS üî{^Þa%»o|ë¾ýOTðG$úäü½ÑÇÆšèc¡Ç=Èow3út[nX Þ:£Ï$ú^ª‰>²Ô&ÑwÂ{ 4ч6Sщ>ÔíÓê›}‘ˆ>7¶¢“xÑ×jèÙO Tjuræ¾y&böh)V‘„’udƒ Õ<“9 fó̸Âw˜bÄüií±¦N;­OÄÍ ß¡V„ð&ô4ð‡¬F¹·¼Û£‹³.wFÄcñŽÏS |-™/Ào•jàÁCÎw頻íöñèÍŒô§tùƒzôýSæmËù{±ˆ>ÛWD[=É}^}º-wˆ>ÖíG údl_µåf¢¯Å]{d9q¨Ô$ðÁ½Ù ôbUߥ/|Ç‚(®)×–ž•l§O+jøNMÉV}g†ïLý¸áуH=™Ûàs<{Šuù£Tƒ>-䞺㟈Åú_*ì 0tÂQFlìóŸÇ~4¢OÏß#ÑÇÖËìVÃÔO`Swã$ú.5ˆ>'¶TvŠåÀÇ3PÄ#§îj¢O¶å>`Ìß3†q€)—.¿Û£,¿´ú^} Œ>ƒèk6d·L2b‹+øwÍN(?'|'óñ×ÈÏd³§›gF ßíož#|ÇvŻ`§#z'W/ ´Ó¢µ¿e㢠Í3Íê»Ðð üÎ÷;|‡´öÎxòêçNO5èùþëóø üï¥øó·}"dÓ& hvwçÊ·â~L¢±}–îz}zþ^xFŸÑg´åV}&ÑW})!úd[î¢éàÝH+~7LjtZ™•á;¶4O8|‡ÃÙ«úÎ ßýSv^ö ß™Ào~ÓF'‚«£äŽ`Tš\º8À‘oÀ_Jào|å'óL%¡èL¾ÞSÅ|“è“m¹Aüh¢ÓTâ&ú‚Úrì´åVD_gNÝŽ©»:£.?Yl6šˆoþÊYqwæš…/Á}ñ}gø 1†Š¾ ßÁÅ÷ ß!Kгú.jøNåã£× ‡‹0liæã7A>>“šÜi8ßqNÄæ™2_Y{Ý<3Vøm<á»Ðk`]ŒÈ2­=S™Ûß–é9ó øw§ø|ïÊM5¬¾Còuú\ÜÀ‹ècl_}¬íŽNô9m¹IJ¹¥»šè›ò–LG%ÑÇbÙ–[}ì#²Aô9#·Ué®9/.¢Ï,â™-šÜ±[6²•ê—®*tøNzN­}ø4¯ðz6Ï,@øŽQ^Ÿ?ñTß™á»Pà—Å„&Fˆ¤µç¤"x“×Ü•–é9ò ø¦øÐ7.Ôê7ë½>nàsóM¢%št ]¢ÏkþÞ^n= úd"úØ$"¬GŸ×ü=IJe·„÷ÂÚr£šUmÎ0Ž8‰¾vÑ×ÒéÑwæÀ]2§ Tª]ºZNé‘Ö¯å̾ÈÍ3c…ï0 Ç£úŽá; «¾‹¾û$¬úNçã³xŠéÔzNÔê»(á;ø+>ù{ÀÚ“3‚µ§^Ý>n_ª]ý/Óú´‘{êŽ_&ÕÀoÛsµÓgνëOuÐ`"«úsi¸m¹UFû¬k¢OÇö#}îü= ãÐm¹AN9m¹ßšèãtW“è£Ë?ÑG—?Žù{né®Cô5º}—lBoC ÿ]­3€¯Ûi%4û.zøŽ¥Çzö]aÃw,*J¬úΙ†ãU}¾3uàQ”ݺw{eíY¹8zá«©þÖ¼¾ÿ'©ÿ•·ÊÒRÓê—>cªl³ø™¶éöèCïµ°ÒÝ8‰>*ª.Ý¥ËO’J–î‚Qw¦îzÌßS}‰&ú8&Ú)â¡ÕÔ–›yün=‘JwØ)# ¡R•À ß¡?~û•2TÈÚ€ |üWß1|GO)Yá;r6¬µ¾3õc$«=“¯­=Û‘ÍÀÿO¥þâ½Gç+ð7¥rán³Ëm&a2üË>ú[BÀw‰>ÛWD;°j¢yßœ¾5£Ïkþ¬¾lËm}¬7o¥‰> (8Ñð£,Ö-â ÊèãÈí…â´Ûv Þ«C¥JçÇ|üÅ!í´ ¾¡gξÓá;Eè±`©µÑEôÕ»u§`ÂH‚þ»¾Y}+|'Ûi!5׫V„ð?/Yá»{#UßE ß» íÃhþ+?ý»hÝg£“¦ç(k_¼Æ˜w¡cÇCFAþš=þ!] O+¹§îø•’¼`?ãýAŽãû£=te·S,[DVŸw¶6„°òÓ$äöoøÑ úàò³t׋èã<:†“Â2ú\¢Ïkþž7ѧcû$úÈ‚gôqþÃ{{¯3úâ$úÎ[ç–’@ •J]ÖÊAÁÖ.>¶üb6þ¤µwšgòñßáZCkOrÓ}#|ÇþƒaíÙîœ3Ø<3™á»‰{¿5ÛΓÉ_®µ'è¡G4&0*Ïi`BߪAVB˜WŸ,÷ß}ÿt¿ILJ˜Ÿ…ú& ‹Å%³ eÍ÷Æ@ˆß¢…ô§Òê×ð]«ït–!S[ó‚ùb⾯ã¿&ú˜Þ¹<ч¼p·tW·åF¿tùq7ÕD_ïUN[>XHwþžÊè‹›è k˽Rºïµûî‡I¨Tê²ÎßÐ? =¦æ²–nž‰+ExóL„ïà…„6Ï „ïŽ7ÏtÃwïH’“žyzBNóL'ßlžé†ïàâ'¾#¡Çæ™^$/ÿ_Ÿé/‰R¦:„ž§µÇÈñj£ Å ô¯äå$è3qéÄb&€ÿt!j'~¿Q¤E¨2°ú[80R† ï9&8í´ÏÌ—ãvýeén¢Oñ˜DPz–îz}‹DŸtùÙ–[}$ß86>¢±ýÐŒ>o¢¯€ÏfŸ¡R‘ÀÇÝž|y™/­=òñ-ùøÒÚǾCòÛŠ%¾c¨3´ú.fø¥Ò¬ŸÉ:²yf€ÐÓ³ïtóL¯ðÝòÿ&ZÞ’šk„ïh<`Dþk[$}ƒ.rTÜI0h=òøøá÷.gqðºÊ=îxòpÉ: f‚Â{Áe»-ûlLÖˆê }ÿ+ôü=öè“¥»‘‰>YÄ£ˆ¾ш>Ý–›=ú¼2ú‚Úr’l9Ã{Úå—SwÍŒ>—èÛ kLôÕ¸y‡e¨T„;/ ½t„ïð9aXZ{ÝN+VøNzæì;U}Çhä\ȽèÙw2|‡fª‘Âwã0ß¾zÛùN£ìÖ$ôNn>ý¿÷L{q,ôé÷±ô¯9 ÂÑð$ âþ׉õÉüy&,~÷æÏxýpH±X_œ¯Q¯åïˆi›Þ'·˜îéòë5Ú-ã÷|üÑ>/"Ñç5ÏÍèóš¿ç}ÌUHôɶÜ/æï¡•ÛWDŸ¹­Jw¯Ò=ú‚‰¾j7í9ó¡RD`NÃw2ÿŒD°Ç€œ}+|?¬ú.FøŽSF¥µ7§áľãÕí†G˾AÕw!.~Ç׉õ/}¯üôé‚Xú§x¬SðÚÍ ê8‡Ëþ6ž÷OÖk2üZq. ‰“¥´Þñ|Y¼î2½‚ Óv²°.ìõ¸§Ë¯;ΔD“Ч½•ñuÚr'Nô‘ˆÒ¥»¬w¦îF úÛG™ÑçñD#úú’èø¥ÕNôU½ñy9À"TÊø©dÝ<Ó ôd«ìB6ÏŒ¾ûØ{ö"ô¼Âw서HøŽùÍoÚäô dÉ­Y}§\üÒõ'ˆ!S^ˆd±7B¿NŽS™¢þfœº¾'ž÷LækÒ|u*’æÄÏ›ÆóEñºFÞû£ºWƒ&©n;nÇ­vдÀ ÍhÉ>´lȨ‰¾%˜¡ÎtPw‡Îèó"úÌù{ÈècM¹Iô1~ífôÁ fë©óÞcåZP[nfôé¶ÜqeôÏß«|Ãó²·_¨”ïà³ÖÞ%ôT­}Ð4œá;töª¾KvøŽùø´öÃÚ»Í3c†ïœ¬Í±;¾Õt×\ô¬µ°ø§¶#æÄõèÚÃcé'¯Ÿbè磱Þ+Ù?Ïð#õK,Ðuñ|I¼®,„Ì>þ¸îT3·~(ê´™ܰC·éRe«·[(Øo-Ò½?ˆè“E<ÿ÷J·["ú¨œ£ÑÇi.œHËp­>'×Èù{rºõ°tW}:¶¯ˆ>Ù–;чaAE6½’¶ú²ˆÇƒèSm¹w—ü@ˆ0\Ç4ß@øé¿Âw #zUß1ؤ! tóLY}-|§Úi1ÇÁ†ƒ+ÃwœWè¾Ó„^ŒÙwÜ+^ÑzMyQ”Ĩk³U¶y¯§1èÔo“Øðòqé‘Ò·¯ñ'‡ÂÆtÑñÖ©L‡ü'‚®^Î'ó5™þ¤à|=’~'ÄúrxÍqöð‹å5xn"ïm0]W¶éR!¾ÀÀM´žBš’¨K¿~êa©4¡‰>ñ°A£Kô™ó÷Â2úÛ!¥‰>gþÂ{è ÃÚòB3ú"}èÖÃÒÝB}øÈ2÷‘Ãwx4û.Žð ŽÜÙwq†ïxêÙwq‡ï@è±9*ó+–†äã/þ௢é #¼ÓõÐsBwe‘ÜuόÉ>ôµ/B›ÅÒ[å鞎×n÷ÿéñü~2_“)à÷4¾ü:ü½V<_ ¯ëy;^ íuC¦e²×¼Ñ™W·–V£¶›Þ¸Ésðf$¢O»üî0´å¦kÊþîìó>t»Çü½Ç½‰>§ˆÇ!úèò‡eôE$úPÄC«è£7 ½ƒa ­˜á;\B›gÊê»,ßñÚµ³uønô³ŸŠª,T W…t+-ÕU§AûùbÞ³ŸôúwÉG-‡T‰S»âµ*ýüþŒ5ˆç}yM¦€__ö5Èùñ<,^W²5€7߃ãŽOmçdk¹SxÜQÛ…ÞòUáú?´=¼oŸ'Ñ÷Axé®Îèc¦™&ú«ù{‘‰>¯ù{GÝz ¢sçx¿®‚4ÙÊ·.?ÇQK—_•îªù{¯ÛæL«E•Ÿ#üû.Ù;/)Õwè)Àòböl©gß©|üˆá;ô-kž#|Ç||¯ðÝj„ð®ÿ‚(yöŒàI·!d^·OˆMG~LèÍ÷ø ôë^H<(š¹’ÖŒ=·LŸI¿‹z¼¦d"ä_ɽ~?Þë.eO~—ìC\—.¡!Eð³ÕLqí¤CèÁï S¤Èؾ"úV £/ˆèC[n²Í²G_,¢.¿Iôq`„&ú:ÑêÇKô¹ó÷¢•î>á¸ìŒû‡‹o"7ÏTã­Ù*ž4.¡ç¾ã„`Ï껆ïÈ™x†ïàâsÜ9÷`Ö¿Š³®ßàÌ´×ã­CüòèÒ4bÎ+É|èû±üüŠXú­Üÿ´[{~nF€kA°h<ú@¾KàCßw(îyeÏàù{&øÙ›þÜðü1‰>9ïWÉB“èÅn=&ÑË%út[îHDߤ7ù{ ËXMGòŒi·§êaADÀÏðžÑ' kè „ˆ~\á;ð à¤[æ°cPÃ/Ë,CZ{gÎQ™/«ï¢ ¯¾Knønئc¢r[¸öA?Y4¼d‘X°ý³TƒÞ|ÿÝг3bé{&~žuÀÇBµ†IàÍÏá}¯A‡EÀï ¬rÁ"ñîÚòG%úôü=öèÓm¹=ˆ>Çå}Wë}šèóš¿è3Ûr‡gô9±xÙ/Dä@N¶Ê ßÁ;ðª¾C$y¡Í3 ¾ã÷g 3ëÜi8àD¢†ïp­"¡·áÔË0•ã¾¢¾ûO¥ÂµçaÔ‰£âËeà‘>3k€…©Y“ À›ŸÉn½]o22ø1~ºä9³ä=r#Øýxˆ>ºüìG¢Êœѧ»õæïy}‡=2ú‰>§ÀÙ}!R¾;æÙ»ùøÁÕwß!$V}+|‡°gXõ]„ðݤ®^çL ¢¥—ì=çÙt*œ=]ŒZò–Yñ¿@ÏCd%i¦%々`ó²›ñ,`Z^Ã{`ù³¡DjžœtûÛÏÙó“^ÄÂ÷þ,G+»=úté®ѧçï)¢1j“è#ÁåöèƒËïôè‹èc%œ&úªF!úd‘ Á"ø²«ï¾ °öð]5eíùYAÕwšÐCÂ{ø9³ïtõÝûžÕw… ß Zýž¨ÔfATПÙy™X”ú‘W‰ê#ëúÓÒB;Úá’ Àgv]¡D0å¯_ðܧ¢Q'ôW÷?, ÜËÊm‰‘O~ìIôqNÛtEô1½4n¢OÏßSD;Ó}VÔŒ>—è3Úr3¼0—g?~Nâ ‚>´ú® á;ðœ@kïLÃy_åãϾ+HõÝŒ·ÿ,.¹w· ~•Þ+- -Žÿ=׉¯ÿ"»¹2Ä´ÀÌèÓDŸ×ü=”î:}ºˆÇ!ú®[ñ1fÆ9Ã8h5;aþr·tWÏß #úÛ‡Õ÷"úä´]ÞåCE[{²þèÛψ€LÖI |ÇD#&±¯€Û·[†[êŒ>ÄÐ},âiŒ¶Ür‡Ìè3ˆ>³-7À,Çn±;OˆH7ß³ú.røŽ!ÅÄÃwŸ9É:¨W`Ý‚ÙN+´y&¯Gþvw=°òAá:ô%úk1ä2 “l z¨<}. ŒéüyÖ_%50SïX6‚ó«?‰w? ~—ô XÿKGîFkg'‡|n‚DÇ?k¢¯×JXý¨DŸÇü=Eô1äJô•¿Õz(Á •ò¨ßÎǧµo§eξ‹+|‡â#>¿´öjö“%|‡óF<ó…¨{úýó>/­|8s_¥ù,ñÐò7 ÈtüÞÂlaò̓%+¯À_ ÆòÜtlNŸ1zÉQQéÜ™êÞï÷¸®¿²þ§á>:áà÷²·»&úd[n“èC[nöã((ưÝ}:£/ˆèûP¶ æÝ™-©Û±t7A¢¯îòe;£õ6»ðº²N޹ֳïR¾c ²gõ]„ðÝõ³^å[Í °ö®}Ó+W‰eh¢’¥:B¾ê¾tZñD>+k¯ÀÏPßú,ÝXyŸä½RßûƒC~Žõ¯Ðz¾è¿ìíàÒ]/¢Oñˆ¾ÛPš*KwuFŸ×ü=–îz}Ì¢ÓD³ëL¢w{ã„ I¿ˆá;¼G¢á;¶mžOønôþDëÛ"XyåÚýï=r‡xâõŸ³ôl¿Wyy"`Mæk³ø üLß -ãÍš ç½²ç°çä=ÓÍñw­¿¾ûÏ }^LóO²Gßc… úôü½ˆDŸœ¿÷ŠÃ8àò3»Î$úXc/i†H_‡ï$¡·O’ƒqUßáð!¡—xøî;™ÂÌæ¤l•=xó§¢vgŒëÖ 9V¾ZËÙbܪ·³fÿ=Œuâ*>K&}¯¬¾îë»éFº½„‡–½!xß ³þšù‡û_¯Ûj1zç×rÒ DÊ"ÜgM¢.?GD±DÊ©».Ñg´åö úX£‰>ö»ó"úØ&[N×A·Wðo |Ž·fÅ[eÇß1?´ú.føNz²ÖÞ¨¾ã¢«¦¼,Ê4ŸH»u³ð¬}ó«Å ´FO÷Þ&ðy,ΩŸ(3ñúœ¾²þ±°©˜b’eâ}³i÷•ˆùÃú˘?ïþºÊωû—m9WÜ4÷uiõõÔݨó÷Ñçtë1ˆ>„ɘ#{ôÁÚ:Sw=ˆ>ÛWDÙü2œ’"Ì苾£a6Ïä!SÐðÝlìMÀˆÆ0\oνåIò.ø’èyÓ»ÄÖ£YëÚS^‚T̈ ò™9|þ³±ÀÉÊ‘°‡ZÞ;¯¿o‡ãú‡¹ÿN?€ó=+& d—Dß8ñüYܯ‰>´åŽJôé"}˜9g}-}gÀê³Û­Û£±}Ç(ÍqZ!RžÀïCk#|‡^ÿÞÕwï…̾ÓÕwŸI¯Å+|w˪EŽËBØúày€V‡k?áñwR²W XòXŸ¿ïU¼ ÌÔïäðøkb¡“Ò‰'‰›¤¬|KT¥ë¯3þt¿¼ÿ;@íK—‹{žü ¡+ñ aÅÍè3ˆ>éò+¢ï¦˜Dæï±t×ÈèÓDŸnËÍnº¥Ï_â‡cª¿3w?Yá;öŒ¾ë2ö (Ýa:Ó¥gq‘vÛªçãbÕ”O¨êX? :³·D¦éssø ü¥°à1»ë¦ Øñ¼/ï£Í®ZÜÝ'ä(åïùèËbœWFîÁ‘3út“ÑG—_gô±ž)´gy}>gä…J…kžuúðán_í´îÀ4³y&„˜ÔÙ–›¥»šè››è«ˆäR-æ‡ ŸpøŸç]}‡||D"Ìê»÷í¥Àm˜¹õº’N¶ºFÌ6×­k^Èzמ]¡ÎÍF0'òLy|eýoÀ†ü;›€Uû¿-¯^íLe =Hp\þÈAIô±-÷=&ѧçïqGh[n“è3æï1¼'Ûr+¢¯bçµ¢d³¹aÂt]ÝNË«úNzm&¨vZÈŒ'|wËÚOÄé׬wšc˜Ö]ϬàKâïxxo¶»ö<ØßƒÄ5I'fâµy|þvؘ_³ü¼·ö}p·(ÁÏò˜ð "ðìÞ›Ä=Há +âqçï©a^}zþžÑWéR”µ6"³»ïšÍ3£†ïðþñTß]5iÍçÍs¢ªN^z;ʳ»q-¸ön|?«½5¥O{ñg™L€4Ÿ™WÀWàçЂϲü|¶ÉëÞ5ZÌt†zÈÞþ!^j˜æÚwÙ{Î0Mô¹ó÷ÌÒÝÑw©Aô9±}“è;"*uzÜ)m ‘Ê~hóLY}WÀðÝùwí%håy˜Ö]vü¾fѶ×Z±öÐw¹úUس¢©`¦Þ3À_•‘†‰8«qŸ=ï¸þõ0ÓÓZå!àxú*Pàé4j¯Săėø‰>ù{ ú*wZãÄÍC¤J¯m2?jõl§¥¬=ƒ°AG‘k`r«ïz-ý@œz¹ŠdhË.½‚Ý™SWê´‰bÀ¸ý¹x>ãØL3•Ÿ›—ÀWà?›öd"@ÌÄkéúßúÐQ’ÀÀ 7ïC`’8ãêµbàæÏ£ÏßSD_gfô)¢¯-­>\~=u·r§ÕN%aˆT»~[¡Ãw]&»à\Øy¨ñpÃ÷;å¼YbÚærôœs×'•àËä{ç-ðøÙσ5³^ѦnxOÔ„ëBqê=&ŠJ-f‹^sßtJw5чn6ñ}œeWå’UÉ"Õ{osÛiI=Ìí´ HB/´y¦[}ŽÉ:Íú£G-¼r㥣À~bÝqò{µï½VplyìÇŸðŒ2 ÌTv^ß÷Ý…dÂEV+Ýã¿m{®'œòˆŠ{HOÀ9H ¶»{‡ˆ»>3údÊèëi}]t>Mô©ù{U.f-ºwÖ¸a›h€î=2_'ë ™€,ý•Õwá»+æ¼+j_²Ì¹ªè|N>¯;¿ Ç“šx «×ÞÐ NlÎÊ!É< ||eý¯Ä†r*oÖ+à€GöŠ’õüÚ;‡€ÇAP¿Û ÑwÍÇrºlŸuF[î%áDß…StÏQQõâ.‡@Á‘I¢æÛ‚šgÆ ß¡ðEåÎz,è<°ô3ãùë´ž%f>ñaÖ¯¹Ò‹×ñgÕd,[ßË7ÀWàoý!À?mÓûâäæÓÅ 'u-ÆAÀ¾ÿWL="etéîµËÒ]7£/@ôUëà“d ‘Ú7='cýMógì?¨ú.$|ÇÙ~MnÞ*/=èò9ùÌŽ7®Kž ëg|rR¶5ÙÏå+à+ð×Á ÊÈûp»ëV‹â5'Ô‚(@™‡Á‰u­<#Gp9¥»ŸH–l»lË­ˆ>ºê$úªu\®,´vÉ?O¹y›œÇß½2ûΩ¾»ôÑ7E L:ŒôsÕàñœ¥àæß9å…\<Ÿs>$#Ã+“ èxßÏwÀWà/‡> àç3·O”“Ÿ-åQÞÈÐGæ àùœ?CÎK(ùöZ_ß÷Ý EÈÚ~~¡Óà‰pýkÇW¹_Š<´¨¡f›¹¢û¬·‡qŒã(+–îÖh¿8à5hï6è÷œ´öfø®é;EIÜ×CÆø |–þìS[NsŸþ(—@ÿÖóÔ|r¢ßÇ_,†2t‚ü%W¬ÿì­Š:çNÇW åHŠsPJÕ{D´»oÑW³ý¢àƒB§ÝòœÌë—É:“ÞuÑÔ|/ùwý9òÏ‘¢ËÍëÄÆÜqíy8½©(HòñõøÆ¬r(EÈ×¹þ //.¾­xŸ#•p„J•‘‚3ý.ÃÏ.95/\`çÐhxËvIèµ…fˆÍË%ô½Ôç”9ùA1|Ú¡\²ò|֜ꋗÊÇß¾º÷W‡‚¼™+àçsÞ=ù€(Yý~Q¬ü½âø ¦¨€­Úlº¸dòë¢Ö… …>0ðg£[·‹3nAÚ-È:yˆTÐx?¾ƒ‰Ï~œk ŸŠuʹ¾xø!àLå‚(ð—„¢<ŸKàŸûÔ1Q¯éQ¬Üp%#ð§’òøR¢æhQö´ñòï¡R®ñÔàÿ§×}¿áâ²>ëdžçк·¹=Õú’‹ïo-~„C sdq)¹¼owî½Z+sdX@ÊâïA‚á¬)¡?7~ïS¦ú(qßÌs ð|VÎ_èš‹ LÇ3[àÇð& <£r ü|ÖaSˆRUîEK ÅJ›‚¡t4 ¼–¿K9½ùT±è¹Or ôßbš¦@¹úøq\# D½ ÿÊ¥`þ3‰úçLEKÜ%Š–¼;qÁï]Ñw­Ø‚±à¹ô½ñ¬ï@jå* ÓõÜøq_ÝûÛB¡81g€ÀûxW¸þEO’”­zŸ¸ÖáœùžÆžìÆßK§ <¹ü9øq_¿ëÓ\?ŸõÞÇ^¥*ENS5›,–lÿ4A¿ßµH.ƒ1ÏnŸðø+AÁ^Î5ð/Úö±hpÖxQäøAžR´ø¢Ç-ëÇ~çÚwÃóŽI'hòá³,ð¾ÿ P¶'r ›áúw¿qµ(RôvÈ@WÊU¼G<87']{ÎQ¸)€˜îï`_à+ðÿJ7=×ÀÏç5+ËÞ-Ž;n€8óÜIbÙŽÏrÑÊÿߥ}º“/Ÿg_@àk€òÝ Éú~~¡Ԓ퟈[†=%žx=']ûÏñ}å 3ñ=,ð |eý»Cs¢Ÿ_.z(!Ïü*þ]%`ɧϴÀOðø›C!¿Ï`e³Ûÿ4Ö×7}ñRyÐXà' ø ü§@1ß·àOI®Ã¬«¯úâYà'œ©\Lþ²PÐ}üI?ûâÝ“ê}óÛû[‹Ÿ‚CŠÊ~~k,ø þ` {ø ”éø¾ø)¾²üìç÷ˆÁÿ#Ö®U:@àÇϰÀOðp_?(00f3i–mÏv ëU×€L×w¶ÀO1ð•õ¿Šüg þ¸¿ƒX§òé€_?Ç? ÀWà? ý•Tð¯ÇúïW0¦ó{[à§ ø üÕ ØG-ø=Á? ëòÛt*¿Ÿ?Ë?ÀWà/΂ß?ûâõ÷33ñÝ-ðÓ |~öó[hÁ/ûâu΄âûý3-ð3|ƒñ¿ŠÏ•lcÕÓñ<ßà{Ÿíwfêû[àgøÊú_ p€c:À–-Ÿñ¾oÍL)½ý\ñ ü _¿ €ÀAŽÙÌT>ÇN|ÏR|"£ØËè‡ÛÍl>ÀPòqžƒ)¾Ÿí‹—ÆÆ? 6Á¸óW0ç)ø°}f­¼¹þøY|åöð7çøÙï úì=÷Â?Ë€¯ÀÏ~~åøÅwhgAŸ] ·ÀÏBЛ hAr®ŸŸ:°>ß§[Ðgè-ð³øÊú_ý-Ǭÿw@o]ýÜ>ÆføÀ3´° Ï-Ð[àç0ðÕ½¿€—©~~à³ëXÐçè-ðsø üÀ?¥ÙúÀ畳 ÏMÐ[àçðøÏ¿Hø×âsŠYÐç.è-ðóø üUÈ×S þ xÛ/ôƆóò`pßIæ³)?ûâÝj­|n[yÎË#°{„û~ÎK"øÿ‚÷êdAŸ? ·®~~ÃØÂöóûïÑÄ‚>¿@oŸÇÀW÷þkÜ‚öó{¿[Ý‚>ÿ@oŸçÀWà?þ)A×ÿy¼¾¤}~‚ÞßÀW௠'øãuÇYÐç/è-ð}|þòô¡àeŸß€×ûkÃyþÿñþFðÿ ÿ¯—½?@o-¾@oÄú O1Àÿ þÞÖ‚Þ? ·À÷!ðàvþ¤½¿@oïcà«{¿%ñ|ªöŽïÓ·VÞVÞ¦ìZ°Ûßç:`Àç `-¿?-¿¾¾Õê€Ýtnºµòþ´òöŽoÁn|Ÿë€UŸ+€µþþ´þøøV|¨vÓ}¸éÖÊûÓÊÛ;¾»=ð}®V|®ÖúûÓú[à[à[ð¡ØM÷á¦[+ïO+oïøìöÀ÷¹Xð¹XëïOëooouÀ‡:`7݇›n­¼?­¼½ã[°Ûßç:`Àç `­¿?­¿¾¾Õê€Ýtnºµòþ´òöŽoÁn|Ÿë€UŸ+€µþþ´þøøV|¨vÓ}¸éÖÊûÓÊÛ;¾»=ð}®V|®ÖúûÓú[à[à[ð¡ØM÷á¦[+ïO+oïøìöÀ÷¹Xð¹XëïOëooouÀ‡:`7݇›n­¼?­¼½ã[°Ûßç:`Àç `­¿?­¿¾¾Õê€Ýtnºµòþ´òöŽoÁn|Ÿë€UŸ+€µþþ´þøøV|¨vÓ}¸éÖÊûÓÊÛ;¾»=ð}®V|®ÖúûÓú[à[à[ð¡ØM÷á¦[+ïO+oïøìöÀ÷¹Xð¹XëïOëooouÀ‡:`7݇›n­¼?­¼½ã[°Ûßç:`Àç `­¿?­¿¾¾Õê€Ýtnºµòþ´òöŽoÁn|Ÿë€UŸ+€µþþ´þøøV|¨vÓ}¸éÖÊûÓÊÛ;¾»=ð}®V|®ÖúûÓú[à[à[ð¡ØM÷á¦[+ïO+oïøìöÀ÷¹Xð¹XëïOëooouÀ‡:`7݇›n­¼?­¼½ã[°Ûßç:`Àç `­¿?­¿¾¾Õê€Ýtnºµòþ´òöŽoÁn|Ÿë€UŸ+€µþþ´þøøV|¨vÓ}¸éÖÊûÓÊgÅÿ7¿ùÍȲ<‘Îñ‚)ïÝ<Ö{⽪äÉúi=hë;óçøo|}ïëâùÎÉ~MÆ,>6îîb>Ȉx7&ïÝ3Ö{â½äÉúi¸ ÖwVÀ?¾÷´x¾s²_cŸœƒÇ?9ëhŸ¦«§~rÖ?9ëhoŸSW | ü‚^Y­«ŸÃ÷6 | | üxˆˆH®‚.h:Ïß¿ úf-¾µøA×ËêG¸ïBO,«_H. “äÞuØÀ›òDΈÇËQ¡¨x¿wíX+•'ë§õ r¬ï¬Ö°{}ïfñ|çd¿&cÀOö±ïg³Ñ¬įø…t™¬²Å¯lv­²g­,ð-ð­øPì¦ûpÓ­åÍË›©½°À·À·:àC°›îÃMÏ”•±Ÿ›=ž†¾¾Õê@Æ6]Å KãÏl–ß'ÛJ%ð½‹Äúl¼×ï²|ý¸·¥b}DŽ÷,‘ßû¸D¿W:_ŸIàçB=~“doF©Êù’¹÷Ǭa.dî]’ìïÌ÷³Àžcn_ø| ü,¼JXà[à´¸$Þß³À·À°š ¸¼ñ*X*^g-¾µøÕ+ëê{ÝM,ðc6±wüܮγÀ·À/§coŸ²«xÊÞ8i-¾µø±t$ÒÏs¤ßZüÿeµ Íd«ÄÕç=Æw÷{_ë}ñ^µ³xíôž¾ë{$ús|çgsà{Ÿ—è÷Jçë3fñÓù%ígeOª¨Ý‹ìØ ü, µXpd8òy,ð-ð­øPì¦ûpÓóÙ’ÙdoouÀ‡:`7݇›n­b|V1Ÿ×Éßßê€uÀnº7=Ÿ-™ýnñy3>0…Ì‹CšæÓf&ó{ã½*ű~zËåË:â;?˜À÷ŽGÇ2ù𙨗L?ÞF1sÖ3±pýÌR•c~o¼WH¼Õc'ô™³í÷r$e7Þ}™–‰õµÀO³«oŸ+ øIXÃLœ6üÌd Sß¡ Ÿ›Ìïm-~ÜÞN¼Ö7¯³?‚ÛÓå-3õ;øI°VvZn¡=õB¿AA”Lô2ñ{ÉüÞÖâ[‹_P¶À·wüŒé@•ÖZüBïY¡ß ›gYýèŒ|Ì+޵øÖâýÅÂþ”v„ŠÇ2&Mö³²é÷“ù½ñ^åã\C®oélZ‡Â< ¾ËÀ¾w,ýÊôÏ3Ò©'c¿0o·ð™]C¯¡~šïøpþ\¶ì¿¾¾Õê€Ýtnz¶Xû™ó~,ð-ð­øPì¦ûpÓ­¥Íœ¥Í–µ·À·À·:àC°›îÃMÏ«cŸ#sž‡¾¾Õê€Ýtnºµ´™³´Ù²öøøV|¨vÓ}¸éÙbuìsdÎó°À·À·:àC°›îÃM·–6s–6[ÖÞßßê€uÀnº7=[¬Ž}ŽÌyøøV|¨vÓ}¸éÖÒfÎÒfËÚ[à[à[ð¡ØM÷á¦g‹Õ±Ï‘9ÏÃßßê€uÀnº7ÝZÚÌYÚlY{ | |«>Ô»é>Üôl±:ö92çyXà[à[ð¡ØM÷á¦[K›9K›-kooouÀ‡:`7݇›žL«ƒvÕ Ó!Û £ ¿MæûÛ÷Jwbo_(Ч@„!ç[°¦¬É\×Bmz2ľWö+‹×ð UÀÿ2Ÿ¦òæ³NZà[‹_h؃ÔÊg äÛw+ô¦çÛ‚Øï“›ž‡Ý·ÄöÍßZ|«>Ô¬Øt¸‰§B®ô ‘&é>Éñù-=žÃ|®îøyÉt?—þ<|v1È¥Ϙ‘çÂsœò,µÓ±6øÌæY¾OEÿªÓÙ§Ð=É(ð±0§C^ a…M†˜ƒ`L‡2ñ3ðßÚÏÃý²òût=—z6†Ë~‰ò||®ߥë¹ðYO„<ÏMéøl|æ²,ß§Ÿ³iŸ²øXžˆ¯Ç±yÚ2iR¨x€¯§ÒñL ôÝâ\+>Û°4>W6?Û÷idºö)›€ß$D‘ÿŒ5$Ô²]žŽEò°øÏôVÈ3¿ŸŽgŠà‰|d<×Û!Ïu4Ï•-ÀÏÅ}J›þd3ðŸ3ÎÕËð/1î×¥³øÏUÙÿ7¹¸OøP\ ü(첇'bœ1hŸ@t"cä9ÔÕ·À·À[=¿þ»ò÷ m|w,‚uÚ'ø-ð3ühûdoÄ=iùï‡, ‘ó’yÂÅû^x†þ!Ïq†ñ¬'„ül|¼ï›¬×áóÛA†<Ǻ ºúwdbßð™LŒ1u&öiz²ô °ï“Q‹_؇·¿ïqø¯r¦€o÷ 124[ÖË?‚”lÙ´0¢Æßêq‚zl,ÁËFð[‹Ÿ›V7“ºdoou t ÑCÄnzlºµøÖâ[àçÞD{Ç·,A½· –à‚% ÊT½VþyÈ? 1“xޤêsíûæ‡waŸ»À–Ìs­h~4UûhŸ_ÀÿÀ©Rû¾ùs˜Xàç.ðkä ©¿ÿÞ‚3À™Ê½´ÀÏQà§R)ì{çÿáaoouÀ‡:`7݇›n-zþ[ôX{loouÀ‡:`7݇›ËØŸç¿G`oouÀ‡:`7݇›n-zþ[ôX{loouÀ‡:`7݇›ËØŸç¿G`oouÀ‡:`7݇›n-zþ[ôX{loouÀ‡:`7݇›ËØŸç¿G`oouÀ‡:ðÿÔñ 2mIEND®B`‚fifengine-0.4.1/doc/logo/FIFE_small_a3.png000066400000000000000000000677171304641216200201660ustar00rootroot00000000000000‰PNG  IHDRþÖW4¾sRGB®ÎégAMA± üa pHYsÃÃÇo¨dtEXtSoftwarePaint.NET v3.5.100ôr¡o>IDATx^í}ØTÕµ¶ EDzï½wb‰ÆÞ[ìÆ.Š[AQ) ˆ" R¤JQÄ‚¢b‹¨‘hì-vMÔssorssoþ{÷ÿ¾{öž9s朙3íÌ™9ËçYàw¾Sö^ï^}­í”RÛ ÉÄ‹ôrð ÄdÓc¸é"Ýã%ݽö[€/Àˆ!ȦÇpÓEâ‹Äà ð…bȲé1Üt‘ø"ñø|áò€lz 7]$¾H|¾_x †< ›ÃM‰/_€/Àˆ!ȦÇpÓEâ‹Äà ð…bȲé1Üt‘ø"ñø|áò€lz 7]$¾H|¾_x †< ›ÃM‰/_€/Àˆ!ȦÇpÓEâ‹Äà ð…bȲé1Úô??¹×0Ðí Ë¼¤>þÿzÐ% –¢Ô¶V À¯qàÄý@S@Ÿ‚”¡[}€ÿ½ùùÿßπÎ5–C ö~ `íºôžìôü3ð×þ7®t¨¾µqðkøe;Я@Û|À^(ð¿÷ÜûAÐñ ºrTï! À¯bà|-@ƒ^ý_ÀUõ`÷ûû¿ãyËA‡v’C º~• k:ô4ˆ¶xº¯ÉGÕrÿ?ã=îíÚAèü*>À´èTÐFmî `ÌvM©ï|Öñ~w‚FÊÝ@€Qà8»€Ž=úÏ€½6~¾Îxïé rDëàGø´•A‡‚–hCç ´ ×—Sâû½Ã‡øžI rTþàWø´‰AûùÇ2‚½ßïxß9ÔQÊü L?tè!=JÀ·ïÂHÄVÐXP+9Â;ø!Ì=4 ôyÀEà;ßé±&[@£AMä(ï! À/3ðiÓÛöƒ ƒ=êÀw¾ßÿ`­ý´»¥?øe>˜µèÐ{5ß-¸ëø d –ˆ_ø%ZHÚ¨ÆV¥ÍšO]PO|)¯«„W¿ïÿXÛ• #@uD(\à|Ú¢ óAÏ‚ Í¢+ ò½Gµßù?aÍ‚öI¶`ž|,ÀÏsÁhsÛ“6(mÑ|A…ëkøÎuüûphh{ÑrküÀ§milLÚš¬P‹x‹y‡Z¾s-¾ÄþÜ,€ÿ À÷>mHÐáÆ¦¤mY Тö»µ |çZ„}› ê%‡@ú! ÀwŸ¶¢±i;Ò†Œ`Kõ>q¾s½ÞÂ~Žu’C@m{àÓ&4¶áüI[±TàŠò}â|ç~¼Š}¾Ô:®‡@lOÐØ‚´ £ Òr¼[Üoהقσ.5Ó!+àÓÖ36m¿rªZî)ÀÏÜÿ'6Î5¨õC æO›ÎØv´ñª˜å~O~v^ø/ðÊàA»Öâ!P“À§ífl8ÚråQ5ÞÿÖS·Ûn_ÐzÐw ) ¶X+Û^»¿©\ïü7¬Ë*Б kå¨àÓF]hl6Únåb„ª½ïwG©Ç®è¦Æ4ÝùOºrÑ¿nÝ«ém›= j¿/„=ÿ ž±t hÇj>ªø´ÅŒMFÛŒ6š0­Ç|ºrµôävêü;¹Áîùïk»×W›®î®~xlOYOž¢v4´¨ê²«ø´¹ŒíÅqO´Å„9}ÖàõÛû«™?k¦Nßqû@€wk4®£VœÞ^}¾zYãì|ö5øp&hHµhU|ÚV £Œ­E›KÑg ¾t”–Ö”Ú§m¿]ŠvØ^ž†kíïŸQg{5{ÿæê9eÝsóÞ'àÏ›A}¢|Dø´¡Œ-E›Š¶•0]–5ø|Õjåéh¿«_BÂÿr§¸ Ú!ÂõŽ{è{‚®ïÛ@==¡§˜ÁøñðíP—¨‘>m%ÐÞ »A?ØsvoB ßq@suvÝ5¨ÏÜÙÐ.;¨³,ÕÅßñsK¼öâf»¨å§¶W/Nî£fìÝL³ëŽú©ë¿û$ï‹ûó9—¶ÜE­9§£úríp9ƒ¿?_ j…C ÀÇb 56m%a¤kðÃã{ª§Ç÷Tû5Pg&ÁîÙ0èœzÚmGu®¦Ô„ž»«ÇáÙÿÃÃ#ÕŸpKÞ7T-9±ºBâZü>Éq{ïÄá8έ¿“š{XKõö=ƒdß‚ñ.#N/€Æ€šUê¨ðñÑ}A·€~/`vØQºRÊŽm]7 r L lñmÐu Ú>"!®Á[¦wÖ á¸:Z[k0p2TÇŸn˜  ÕQ—á€`ïƒECÔwŒÊ‹þ¸a”zéf˜û4U»oï;ÏÐÏrÉÃÀhW´¯§ÝY}½n„ìqÀ=þ Ú:T¯Ü‡@ÙO›tèu{ðÃŽ*8¥çÍCiéJ)›ôÀ r†Þ.l¼³º°ÉÎêú> ÔÆK»ª/V×*}±ôžÅ¿h«5 ÞŸÏÑÏÙ!yP#0Z>ÿèÖ꽃å~p­þZ :T–lÁ²/ÛtèEPÔOFŠ)©j¯» ³º¢Ã®@»V¹4·€³ §ŸtQóÕ¬}›©oꣾyp¤úf]ééÓ{¨‡/ê¢&ôÚ]]dž;†> 2k"ðК:¢±~·7?üDPèµú7ÐÐA ’e – ø´Q@gƒ6ƒ$‹.¿^½{ï`5ÿ¨ÖZšZ°S­¶j»èÝEÍvV7ßE]Ñ~Wuß mÕ[s©¯ }µv„zî†^0šéw ñ}ô!dj V# 6`«;ï¦Ö_ÜE}ó˜lŒtÝÚTT¶`QÀÇÃ9¾ùÐ#ÆF‰”ô,`aC}:Á^˜Ü[MÞ8¥Æ»ÀN i‰n€~q‹]Ô% ÆÓÓE}²t˜úr͈ŠÑoï¨×V@|¯Ä!:ÜÚ€=øM k£>X<$Ô5:Oäñ~ßàÚY a…øò>ÄñÍÇ€Ö€J=¾9L@iGÐþ ÒOKwHÄ”d¯£¥fØ7¿´U]‚»åú^êóû‡«/VE‡>\4T=x~gu]ïÝuŒÿ)§6ÀC€š¿•¦‹ܺgõòÔ¾bä©%:‰Oñ÷) ~A@ÀÇ 9¾ùÐRÐ_ó8•bä ëñþÂ!ZÊÚï|°_Ù¡žZ„ßÛ6k€ú vv”éÓeÃÔæq=Ô­{6UcqP]Ú²nòК€5ŒƒP&\8®Ûnê8%ÿ°~¤ðMá‡À»àÇëA]³Yol‰yøóOA™[®Kw^Ñ™õÒ-}ÔôQMžy'àé‰O>!!)))ÙéA¿¾Ïîêó:«÷æQ¿_¶GÕÑ«ÓûÃoÑF›ü&­ ¸µ€fÍbø->Z2T€Â®Ý6#j“ˆs_âí.ü·£m¸¤«ººËnÉP\RÂðTç)ý´sÌøÛÐõÔÕ=ÔÇ‹‡ªO– «zzŽÇÕguÔÑh<´)àp j3À„­pnýÕm{7E⑘E Ô‹ÝÒ?ð—ùÀØØL}]t|Bg¢Mš ï<¥¥ Uâ+¾£W딾ê#¾é˜:_Ñ]MÑ$ýÀ:Ð  _Ã}0¤É¤%V>zy7ÅÄ"áɼC¢#óþe²È¹™êDJæka?^ u)¬dHVDZ*NçÐ;¤<3Ù´Ïø»±á/o»«š{HKõüÄ>ü!Ǽ}×`µá¢®êæ!Ó§úï’þ, b¹ð5ˆ<3€=EPeê•yŸ¿€…üX3±˜t2MÕ4ÙÔ‚e© )omy#åj=løqÝê«å'·W¿¹µ¿zgî`¡kðìø^è1ÐEF‰¤ ¤ýí)CúüØ6 ‹fÀïW “ %¬®,øLÔ‰íBþUm/몮êXO·®bgJJO)o³ìÀ°7 j¤¾ ‹zsö@õÖœABy®Á+Sú©ÅÇ·E¢S½d éü£ô×Å@ ÕŸ‡0„ØNAŒüffÿØò­³û üqqþ'ˇ©ûNl«™‹M( z¶¢"è­jo=öÖ–gxŽN»ÛQû¾ùšžêÍ; •` ¶Í¨ÖžÓG:¤¿Ét8þègáþðpfÏ@îÛ5]wSO\Õ=biÐL÷¬óÏ™¹‡_dñØœœ¯AJ ¿¼:‡ 'Ù¥–ÒĪö,“%èYDCÐÓ–g8ná1mÔ¯'÷UoÌ(T¦5xáÀÈs ï„ŽS«úÛ°Ÿµû ~»‡ÜG^· NÄÏîUÇàOý²÷‚¿I­ŸN¡Ç¯ì¦“mœ-¦½@o½ö:LkßWŸÙI½6}€Ú6c PHkðü }Ô¼Ã[«ËÚìª_ö³^ãôsƒŸ{ËÿÇòåßÞ‹Á!ë ¾qðÕäDÙOqú/=¥–Üîžò=íE§¤'è™UFF›>²©zôÒnpØ ªàl½¥ÂÔµp r5øÝOµŸæ™Sò;÷™íÅž¼¦G-w žP,ð9¼¢fÔým·È:h zëÄ£‡yî!­Ôx_›Ö_(bk°þÂ.ê–¡uÌß:ý´Ç? øyÐdXù˺cQ-ñ9¾åb?±Ú„ã ì  ¹qI‰ïz–Ï.=±=ì÷~ê•)ý…"¾›¯î¥fÿ¼|/u´Ç?ø­À0â›wÕÌàÅÿˆj>Ç?q íñl€·Ž<«Þ33lòÀFjÝy]ÔÖ›ú Uá¼?À¢cÚ*&N¿å‘ëPÉÁ!ì}X¥¼ÿmÁe¹öñá;]U ÀqO·ÿ¼¹væä¼Ó{OqZJmº¢‡úõ}…jd ÖÀ{}ï9Õ~7¯0DËÊÂ/¨:3àÑ¢o|ßEüTç7_ÛC¾»óšKZÔUóhû½·zqb_¡]ƒG/鮦hªs1òá: çÜ¢š‡L.ð9Š:’RŸƒ&V™˜—ÏfòZzƒï?µ£záú>B1Zƒgà˜{P+íØË—g8Áh šF|pÈ1¥>{zE øoÝ=HÝyP rËgóxzOÚDm¸°›zn|¡¯Á–kû¨e'´WWwJÏáÂO,¾Z{n§¨i_*ààó”}Í&oÀ©dsœ×ðtŸs@Kõä=Õ³ãz ɤñÀºs» ¾¢qÞ‚„ì-ÀéQÀÞáÇ\M7sfî9|*ùQ4±æÜŽºX#_À_Ýq7µä¸vŠê¬A.xüÒîjö¾-<»rñÞdf=cïJw ~ºdÀ7¾ŠÍ©¿Æ•N›k¨þOÐH=xvµùª^B²yóÀSWöR j«®lW/oaóÐ…+)ýo-5ð·TJêß2¬q ÅgÚæíû4W^Ô]=•^HÖ <°úôNjR߆ÃĄ̃VðÜ“J ü™•ú˜»o•øc`Ã?tNWµilO!Yƒ²ðÀ¼CÛ$K~³i.ê^jàŸZ)à3‰"—zÏŸŸ ƨfêÑ1ÝÕã—ô’5( ¬=£³×¥~ $V°ü÷ßÑœsõ;÷Œß³RÀgUàÛk¨òÏÇéüT~!YƒBy`Ãù]Õ”!MtO† üÇlÑ N~1—´çÏóþþß*þ×fô ¼ðÎ º¢m=µâ¤Žjã…Ý…d òâ9?o©Î­—èÀ”±Ux%0bžyGÉo¤þË•ø(v¶Ígñ×ò´žÜþ3»¨GFw’5ÈÊKŽm¯Æ¢…Z¡üÆÌ¾J`Ä<óÌrÿ®J|óðY2ëÞŒñÝ1– “h²m’î—Û4šhÌÞ§…zÀõç ɤóÀêS;©z7Lõíóà7ËgäÅ)ÚèvlnÞ›½óJ?ÐÄܼT}#ñÏ®ðùL¯\|v²}áú¾jþám<Õ2]_o›d²6ªï®h·«ZpD[õÐÙ]…d ´&8cTs]ºÍî=ìÛGAág×3½÷áÑ]Õsúx vuªFþçîX.‰?°BåYuw <­/Mê«X{ÍDi˜Pãlµ”l”ÉvØl’iZg±Aæ$tm]qBµ/Ï5˜wHkueûzÉÆ¶o%¹³[/¥:[®-9¾z€gQ+ý¼4Íc»V ø¿ ú¼{Fâïàÿ³àŸù³f ÍziÖͳ”–›ÁSx=Nãq]ëkÓ€›g»ãêθh’Éœ}vie+-6iài¿úÔÎê_vŠÉÐŽŸˆ„Žíb8µIÝ´Ó´ëfÙ®nÕ ÿCÄL Ûü«^º ëùëú¨oè«ÖœÑÉø‹^ |à™óË|~ÎÝýãcl•û„%°_FK,J}n7å9ÔÔ³gÚeÑICÕ=Øl£L;ËŽ›Î.­ÜÈÙmwÔZ­9­³P ¯ÁJDxnÙLýªS=u9L>.¥žÓz8¬ƒ‚Á)õo„SxãEÝÔ³×ôV[®í”ö/Aа»—į`±ÎèrA%€ÿðE]<úÙk{AêüFêSã&=ƒÍÚ|eOu×-uï{-íÍ<;n67›Ï)9|ÉQWô,>ªZ}r'¡ZƒU'uRwíßJ]‡&-²Aà_Ùà‡ÆGç0KlµÔ‡Ïf×t®¯˜¦û4¤<ùˆüDmò#í)hî@_?/às˜j%ðg-7ðÇTâÞ›ÔÛs¡Á°Å—ÑN«ü.©ÏJ,ÚþÇtSÓ‡7M±¤´ç¦_ iO& 3Pê³{{åÏÜ«¹Zv\uÿ‰„ª| ÞVã¼®÷îj|ÏÝõÏ <ðé转M]L@ÚE«ü Žl«k<È7äjÔ"©MÒ—Dгñ*;úºÏì•Àžù? ]Ê üá•ø86Þð:aï?­£Úzs¿¤ÊÏÍá&ñ”¦ŠÆS{3*­ž¼¼§¶ËèÔãfsÓµ´Æ÷¬¯™ƒµþ“4T7YæØJ­8¾£Zù ¡j[ƒ%Ç´W³0J{ò †z?oèÛ@ì×¢Ÿ¾–ú˜Ég¥>ÏR\fø‘O¨)fH{øèK¢€¡ a÷&7?Rs¬6ðÌ·‚‚¾ çž±ñëâAÿ û¿z`„'ðï=¢µzå–þ)©ïpôi•§öÓ8½yŠoº¬§zâÒê>Ôç“ ’ÒÌ ¥=˜ƒLBf¹yh#5eÆê6ŒlZpX[µü¸ŽBU°ËŽí ìi#›(VuÞ4¤‘ºq`C5±hsFêC»³RŸ‘ u(ß&_?ü¤=µIJ{ú”(h¼zCLѤRÀ_Rvàð¿6ðù<¯„‰™{7W¯¢×»Sê»Uþ§©ò©¿il¢xg#ZoÝ}pk5êU@2³®È$d2 7rú¨&ŠÓWïÜ¿…Z|d;µô˜B]ƒù‡µÁˆ¬æzþ!?exc}€OÜ()õµÊƒþ&´Og:7¥<ù|‘öÐÝ=§´§ ñjù6ïÈÖ•þذ€¿¼À§Þ­^MêßPOµá° ‚ßÏÑÇÍ| *7—§ûã÷ÐU|ëÎê¢n³PLHûF i¦!ó‰f å6§àÎ> ¹šwhkuß‘íաȬÁ¢#Ú©¹·TÌšãl¼8¨oݳ©>¸oÖæ”ú7¢A ¸6Žîž¨âž4ÒžÚaʶO…ïœÒž¦¤—ÙÉ.Q•Àž¹WXÀ¿¼È t/80~ƒ¡•¯Nø1K-ÓÑ×G;h¬£/©òã”çiÏæð¯<¡0‹–ö`-íño2™‰Luç-Ô]‡´Ô=ÖÈ<‹o/TÁ5X„g³-úÜC[êöל„Ãy Ìù¸ 6µ5-õÊÏÎºÌØ|ä‚nôÜÿ'´´O-íCϾ£@ápJûG/éæ |¶w¯.þϬð÷©Àê vŸñù×1¸‘Rß­ògsôY•ŸÝzþ çwÓ9ü÷ÓNK‹iTñÁ©½Z~Z{µôävê¾ÛªEÇ·Q Žm£µ¯{p S£Ô§v¶šÓ°×Õ5Q‘é!íS½Üá;š‘4'Éc³~Ö<ø¬©Ð«ÃþÚ°ÿÊ­Þ 9˜Ä³mÆ€¤ÊŸtô1×#£ÏÏÑ·‘Rߨü”¬ÜzàôÎj9Šyæž`.«â“éÈ|dB2#G-¯B‹°ÕgvTKÀtó~ÞF¨kp丹ÔA­>»£º“xÀ.;‡,ÜÅж’RÿÈVÚ÷Âθ«q`kÐcÿœÒžûëtèå¾³Òžš%ªºMN†÷ÂÆƒyÞþa\Øúá}Þ 9VžÖAývæÀ4©ŸÛ×yü>Ž>¨|~RŸjÿZ€Í)ÕRHtªyiÒLHf$S’98¯“ZwAgµöìÎjÑáíÔÝû¶*` îÙ¯ ÔtTOŽî¬ÝIO­aïEš{+(õ¡e%¤>Ì+Hý…È_ybµ†WØ/îÛCFÚÓ„sÛöù†ï¬´§fé5y‡ŸaãÁ<¯qØÀ?0ìýþÑQ 9X…7IPm#øs9úXÄãÊ賎> ~§Ô§Ô ôX‹âJ’•Èû^r|û„´óQÚ“É”dN2)ûª¯¿.íªÖœsRë®}Z \ÖK<|aµá¨é¨ÑàAúÀùÔšs:ê9‰Ô®–©O 5²U¨-àáÌ}zP«ø]ŒŠÛž½ ßÑ¡GÛž¼µmÆ@Ï™{³î xÞù‚¾(çž±ñ›VàC3fÝÓ¶šÔÌ7gR¿ðCåäè#ø]}iŽ>¨ü´ )5(=(E(MÈ`Ìá_Ž4^ÚœZÅ3’)ÉœdR2+™vãe]ÕcWtS_Ù]­Âpι?k­æìÕJÈg î=¨ š\ ‹î*€ôrHiÔ¶ó}h ¥>@M©O•ŸRZÖrHø•'à0ÀaÌC™ ç!M*þÃ^½ÂwNiOðŸQgû ´äÄŠ4àx8tàð6ø™uå´¯X3Í$žßÝ1HK}·Ê_*G_Jêü`42óøµ´Ax'!í;k&ÕÒLKæ%?yu=Â{œ“KQüsǨVBŽ5¸ âguV›Ç#evÖéj$Ö\ {ü2€ZÓzJ}hQVê¯Ä!ºÜÔPðÖÒ‡2M2Ò)i_@ø>!g²Ž–öˆQŧ´þúÞ‰=8N>ÜpI—JHü*ü aŸé³ÎÞg¬Ég±Å[si©ÿ†–ú)•?/GÓyMxÏÓÑiBcÙ.Ž…+ÌágïÊ“;hàkif%Ó’yÉÄdfNWáÀOV>qywu/B·okš=¢%L§Žê™ëz©-‘1w’h~¶Sg‡Ú;ÚT¹u65­Šùøºx*)í*¾—C¯á;jÔ$©Q>†}e“wk®&÷®ð¯ð'† |:Ö,ðm#ÍóÑGÿí»«ßÝIðgJýB}šŒ>gx/éè£Ê©ÿ 4’—ÝA-9º½Z{f'ͬdZ-íÁÄdf25™›C_¼¹úõ”¾ê” ßµwk5kXËØÑâ#Ú«gÆ£—:Ö¼x¯8ŸÅÜyOQ;ÒR?¡òSâßÌÊ%Gô8dyØòÐåáËCØéÐ+GøNK{ø¨QÒg“lÍåhÈùö¼A•~«Jÿˆ°O•/ |¶FÂé{6irs(õ­Ê¯}øY3úŠtôÝoT~2"’ŒyšÁz8§Ò¤=˜šÌM&'³oÖW½z’B¦÷S`Rˬ=ZªCZÔ<ÍÝ·µÚteÅY Ͼ<ª5BJÌç(õ¡=m¤þã88yÚڮ˴硛°íý¥½Û¡WhøÎJ{j” A8«î ;ß¡îóЈ°ÿ]! /Ú¹glü6a Dà»;è>w]o‡Ôw9úXÄ“-£Ïáèc±3ºòqô­Ð*¿‘ú(Þaÿ"¤ñR}⪚™)íÉÜdr2;™þµ°‘æÉYk[§öƒÉÐ^Ý6¨yMÒí{´Ðý·Í†ôýfR¬qðmŽwh?<© qŸÔß0¦+R¬åaˆ `M z§Šï%í˾£ßˆÒžB…é¿ìÉç´ó)xÂÆž÷DÅ€oÀÿ}˜ýæ]Ó€Oµëœz;ª—vSïÌ ©•ßÇѧ‹x|zôÙ"k¸Ã{Œ;U~?GŸUùɨ‹i¶ðvjÁ!mµãŠÀ×ÒLNf'Ó“ù ‚7怩æTTŸG#‘»Þ޿yÍ5£ßÞ>@½}42ìßwüø÷k3q SêCûa“JŒOÁº¶;׎kH Šý(<\yȦ9ôüÂw0Õ ­¾s‡ïè7¢´§)Én>ºmÆI!Ć.abÀ<ë–JS˜ýÅšáøÖ¾·Í4éY÷žÁêm þŽ>¶åFWÛ£ÏÆö“¥»i޾TO2£ÏÇÑ—Pù!©À°dÜ·SÌ>ãßÅá””ö`ú×ÁüÁ@P¼;°záõÁâ!jÓå=ÔÌa-ÔԾͪ–˜¾ü*´-~Ï{ «wæaoÐIéMtÔr^§Ô‡Êσð…û(§\€ßᚱ臚“—´Ï+|Ç||¯ê;¶Ó2­²™Ý鬾cÍSsi*:¥=… ;8SМi[pÃÎgï†01`žu\¥?%ì¶^UkßsPƽGµQïÍ¢Þ¹àw9ú¶9òøóvô¡˜Ã:úlÃE¹}dX2.˜ÌÌÜu¦ñ.…ú,¼Ø”öd~‚€` (‚ä£%CÕ'ˇ© Õ1i‚Jï¦UC³­Ø2¡·bÑÊLj)f\¾¿hˆbZj5ÔnÞ¸Ñh;4w6bYÜÃ5âaá–ön‡^©Ãwº–鬓¾£Šo¤ý[öä«‹ÑšÀ§¦y"J49Y¸6ð¼N•þñaôeh”©{žÇ["³pâýù`®{~#õƒ8úl·ž-¦-·³G_FFU~$…Pê»3úllßíè³*¿-Þa**\Œ9¿ 5W«ø”öÁA,Ÿ4Ÿ­ÚCQÃy‡5ˆ›{64ñ€¢zÍ1Ñ_¬®ÿÔàÇìC-õ¡Í¼­FK}h9[à—áÉ5™·?*í QÚÓ?ÂC“ÍNܶ}.‡^*|—h°‘Í¡çW}ç ß1JDŸÒ~Û̺ /›j&'îÀÁǬÍ1ðS¡ /‰sÏØøCþhÝJIÆ2ö=Ï–Y,ªÞ#øÔç)‘ÑW€£ÏÆöué.3ú~ŸŒ>?GŸUùÉà´áç"}•>i÷€o¥=Aò{H{ ö¤Ç˜m›©‚މė›º7‰1¦þÉ’aêÛ‡Gª¯×P_®®>ÇÁõéÊ=Ô'8ȨÅ|`¤>¥<¥¶^äñS¢´§f”.í+¾{þ"šŽ4!_˜Ø[q;5Lkç3žÏmÈx¶âÀ7àÿK˜~bØ)9T»ØŒƒ–B¥¼’Ũü¥qôõÔ=Ù|‹x’yüé}^޾¤Ô£“ᙿÏ^ /L죥=AòéÊa4AD0ýñ‘Qе ߨ•LíÓLÝØ¥IÅéÑ*ð奄Û8JýaÃHT#ÕWŽÐÚŠSê¿iÿz2u™ß~74Ÿ{ èý¤}¥Ãw”öü>š#ñÊÝp:øè¤ “ÿñ¬™Qþ–0?œùñŒ£2žª§ä@ýº°IH|8Æ õ*¿ÃÑG/¶Œ>GÛ,ë}A},âqeôYG=ÓNG¥¾Vù $ðܹg+5{d¢•÷›°}µ´h-í¦ï*‚ëÇMœb´·úúÁQÈVë¢&un¬&v Ÿ¦!êÀ¥?nÚ[3ýOì©8Õø;PÔN’RuBê?›Þþmõ·ò›ùíÔx¸óµŠiOß/|ǘ½+Y'Œð¥=MGšk9蜶c|<¬Ãä<ëÔ¨f˜ÎŒ.ÆQýüÄL<Ú`n©Ÿæè#ø³9ú8/[énGÁïÊèKsô'Õ[J}ª»”úÌßg ëí õçuÕ’_K{€ˆ`"¨®Ä:lOý ´/ºáP7th ñ Y^wFööI¼ÞëO8˜¨•üµ\oÀFf”ƒßÆoä·&¤=?+í=z¾á;æã{Uß•)|g¥=µH–sƇ¯&|@Ü›0ùÏêàŸæ‡3ëÍéѧÝEà?ì£Å°%©òçrô¡ð"g[nÇ0ŽàŽ>—ÊïÈèËpôñRÿH}æïÏBïN„\þLU ô›þŸ7ï§þ¼ùçè0¾á#„Á;úØ–Û¯GŸ©Ûgg^›ÑWGŸ.×…Êo¥>Òwgm¡nÜB«À´3­Š¯AæýO›÷W?=}€úþñýÕ£õQ7@õߦaÉhÆ–(PŽg¨~Ú|@¿ü.à“hçÓÁ¿áv| ¥=¿ßhzÙ¤}(á;ì9+73ÂwÈУC؆ïè(¦´ÿ¾#Æëí|=š˜Ô8oÀd¦0yÏz¹З̫oœ{;à…þÖ¹ÜÀç`ÌUh{EÏòG‹þ;út[n$‚ëè£ KϵŸ£O«üZê'r÷™Â;}Fy£Þüóû‘ž|J^€`Ô |ú ÐÁꋵû!½µ‹ßà/‚nìÚ㡨Ÿâ}I|žeï’ú¬Š¤ Ïwž‰wç7ð[rIû(†ï´Šol{J{j‘ãºí¦5Kš–6¤ÇÆžañ½yÎ]‘¾ÿËa.ÀE͉ åQýâ´Ó{Ñîú÷°)õ?2R¿ Gç»©n=G¼üŒW³$£G3úJàè£zL‰9RÿÖ‰ô]þùŸï6BêßJû$ðŸ9DýôÌ¡ Ã°œ†mòÿh kN멾٠ë{ñž§ß)õ?^2\)ñ€"èy`e“öåß%¦á¤Mºu;s6Ïtfè9Ãwt3†¥˜Œ’£{ZåðTÓú!}a< /ߌ2Ч\Òžà´Àö0õÓ³‡«??sòÿ‡!ñ§Y àžý;¨—ü¿{„þ} IðC›HHþ„Ôÿvý>jýùÝ=üÓú£=&š'|g¾{¦CϾ3©¹niVøÎæã§'ë$òñ=†‡ÉG¬5`CMŽZ§iicùì´&ßãY£üsÂ\ö¼wŸI<Ÿ­@¶Ø2€_«üÙ}¶[;¬ätôeiËÍžnôÄgfô•ÆÑçTùé»Ítß½¶Sï/iTpè V‚Vƒ÷HõÓ–£Ôw¡>¯Ÿvüy©ÿÓ´D‰ð(\{´¾^ÿ^üéRÿǧ@xn€ÖF¦à âä”ötNz9ô<Ãw>ùø,ì¡ySªæ™ ‡^bÒ-Ó¶í´ÒóñSá;­âCÚÓgô¤>iÀ§¦ÉX~È 8þ ŒÕ‰ð† |ö´·É;”øAÕg'žÏWO—úNGcû°Ý|3ú’޾T[îçŒÊOµQ·åÎåèc[nG>ÛOdô%ºõ0Õ–îfdôù8ú¬ÊOÉJ©K/¤ïöhª&#‹oÍ©ÝÔWëösIûè`>FýôܱêÓU£ûo×$ø'vj¢ž¸l°úÓf\ó®±Àßâ>µ£ò¿yçH„ãÚ胇õ<ˆ¬Âwtªø% ߥµÓ2Í3¾ãÀKŸÙwÔÔšåœ;÷¤[¿ê;ëÐc²zVÚÓgÄäJ|ú’œIª¦|Öy~?¤¾VùaëSåOsô I•îð;{ôY•ÿצn_Ïß+ÀÑg‹x´£*«³G_FF½üÈ^óÊè³±}·£ÏVìQò2wŸé»ÌàcèíÕé#’*¾•öNÐÿåù_¨¿<‚!þdÀÏ"~Gªï;c§újÀó€á³nÑÒ>Q.ì'í£¾Ó=góLÓ`C;ôŒmï ßѶ§´§Ù¸è¸¶À M3,~7ÏUà/ k!XΪt]ÆV-ðÙÞê‹UÈGš¨ÛÑÇXlf鮣[OrênÿÔÔ]çü=ãèËlË]˜£Ïªüºt—}ZFÆw™Ø¾Ÿ£/!õ¡ò˜“º u·ccu}ûF(zé¨>\ 矖öÇ$%} ô'ð–xü)©ÿçg†]»œv-tZ0–lÒ¾&ÂwPñ™škÃwôQpP€pßÅHÖqªú×v¯6ð‡GøcÂþçÈ÷>“x¾DI(¥~%}‰n=}ðòÛ}^},`±yüÎŒ>?GŸ–úÈé ü×µEXîô^êÛTç*~øü '%HƒßŸ*ÿ±(ÝOÍÙ»ºiÀÔ"x ô<`xÐø:ô|’uª1|G‡U|Fˆ(@nBE¨>LJkãs wXüŽçü?PݨxX ÁL¶Ñ ™§Ÿ.ñ9Ü⫵¨ #ø£ï÷6¼—¯£™]ìÌ’uþžéÑç™Ñçãès¶åÎéèc+£ÏÛ§ºtôœVågî¾öà#&cצêéq($yàÏü/×®–×]MhÛHk <@´´7*¾—C/¯ðÛi¹jí£¾£´§ŠÏÍÆk:ï–|O ‹ßñœwKú’;÷Œ_/ø¯°ãê.õ2€ÏÍø5ì_¢ºÍªü©ð^™}6GcûÚÖ÷/ݵŽ>Û­‡)­ÎÒ]¿Œ>/GŸ®Ø3RŸ ¶á»™C‘àtÿ¡F§«úÏN®Îä<8(ío4ÒÞ:ôʾcü̾+6|ç”ötmU7CÕç•°xÏYYàð¿ÖbLÞ8áÕwØø¸ñ <­”úVåO8úö(ØÑgtjGÂC[®Íœ¿§Kw™Ñ‡“;£ÏÝ­'˜£¯mFénšÊïÈèËpôAB´VêÌü[§îe¤¾uî%Ôü‡$R|¯3ÒžG.i_|øÓˆÜÍ33¦á¸ÂwXcvÖaí=ùô·0ÚRêð•ö4‹ü} |W8ƒRÂâu<çò¨yX‹Á^gîpÞ }¨oÑ"!õ¡ò{9ú¨ò—ÛÑÇn=˜ÒÊù{ò‘чaz—ÆáìÑW„£OÇö­£à§ÊN0§?iëÓÞ§]<€ßÙCÚgwèÑßPºð]ª?~ÖÙw®vZOôÏÂéÊÖi<”“í´`¢±øŠÉ:¶yf>á;š‡´íé$~ãK=€rŽŸEø—‡|ÚóiÀ‡óårôãûuì߬C=¸Cê{:ú~¯}ió÷˜Ô[߯-7ñcÿ¶ÜÞHð§MÝÍTù‹uôi•ßdôy9ú&ÀÑGðoº§qôgŸvú§ï–ö5¾c;-$sù…ï¨!’gè$æØ,/à³MZH¼þxÎîQþ>!-†â¤g®þ%þØÖuÑß ½ß(õʯ}Œíã÷uô±A§éÑ—èÖc¦î²GŸÑŽ>‚ßäñ{ÍßÓm¹Í0ÏŒ¾8ú¶NEZn2™'‘ÔÃ/8´s†CÏ?|‡ ½VßÙ =æ`ð°æ¾q’’WóÌ´||S}ç ßÑ<$ÏPcd3M |›«OÃ> !ñú'¥}Yœ{ÆÆß‹Áªì‹Â†Nà3ÜBà³m3XPê»UþœŽ>€ßkê®Æaëöoè«ÕJßn=}œåëìѧÛrs‡iËÍÑGÚÒÝ GU~—£oëäöëtZx€ŸoøÅB^µöa…ïX9I Óª9#áÅ<òñÙ<ÓY}çßQÅ'èé$fÕ§øìô›g<yàðÆ¢°µ³,W¶Øs“z¡ýÓ(-õóqôÙ¶ÜÌä"øõü=LJÍ:ÏÃÑg»õrôqþžÉã÷ÌèøÙZËÝ£/G_cí­ß:•À7i¼:57Q”³èðÎå ßaˆ³Uv1á;ëÐÛlz´íÙ¥(w>~bÒ­†ãU}çßiiM‘æ" Â.mYIb¨Î3e¹7 µǵÕüµaŸM( |&T0£Š^WžÌœ©n›>–ÄÑGð£µuÆ0öè³E<°õ}3úŽ>Û–;­t7ˆ£m¹“=úR±ýdF½üŽÒ]gl_gôGßÖ)HçÕ9üéDàG-|ÇA&¬…`´„‡i²Š¥¬´OŸ†ƒñdVß9Ãw)i?BkŒû7Ðéà̵8î8 E˜ÿ jþ¸0€Ïgð$¶­·,ðWœÞAw¥¥Ô·*?ûÓûeôÙºý”£Ïgþ^GŸ.âÉêè3^þŽ>]·o:ófvëI´¦fÿº”ÔOïÖ“ÍÑ÷ÊTæñ³r/Ñ9ºá;‚Þ'|÷B‰ªïœá;J{ò ¥=ùæŠö»:€_GçŽ,=9Ôͪø†üëû5H>‚¹‡µR?«òϱm¹Ù™×4ìÈÈèCÙ¬ ïÙŒ¾W¦îaª÷X¯Ÿ"?W>~Âw<\=Ãwtè•(|—°íÒþCdðÑoDÇ1+@m³Í —t Kâ]JЗ͹glü¦a־͓íµm¡ÎÔ­ž]Rß3¶ïӣ϶åövô9Šxàè£ÔÉÚ–›I=P[ÝSw“±}ãèóm˧£Ïªü©Ò]Û‡£O_wÕqÒ¡è Ô©6ªï`’±± ÛiÑGÃýKk§åhžé¬¾s†ï¬´§èõY’Àgž¾m¯Í‘Þ!ñø#U|þ¯ÂX˜Å¿h“‘¶;®[ýÔ€þœŽ>vëIãHÍß+©£àwöèËÈèËâè³*NG¼ü¶GŸWF߫ӆ™†죗¢%GuÖ%·Þµö5¾Cþ›gz†ï¨âiϨÐs7ôJ¥ë: t8ÿ/ þÆ3&Uð7„±0]Ø9™ÄÃÙÆòÿû>1à!5ÝÅ:ú¸±¾}œ¿—1u×Qºëpôù¶åötô%t&çï!©'ëü½l}>Ž>«ò³pÆÏÑ—>Ût¥Ó’£;宾cøŽýñ]­²k-|§çôä:ŠÝ¡<:”9Þ, þÆ3Žª6àO caž½¾Wf,ž}iüñ‰Ä€‡B}üzꮣ*e¶Œ¾ÀŽ>ŒÜ~ ×ü½b}ìÖcv¼:m¨i˜i[f'þ\ à—¤úŽá;¼¯t[á;úƒzŽ[qz{8éÑO…ò.@H/ Þ6Ïh[mÀ?2ŒÅáŒy¯çÏóùâL7#õÿ¸¾@GÒ;¶}6¶ŸÌè+ÐÑgGnkGÛr£3¯oFÁ¯vøwëÑ#¸r8ú^6Ä4çdü-;¦SöZ{þø5Ïdõ¾•þ ÷컨„ï(í bTèîÃZfxôiJ†ÁÛxÆ¥}Y{ÆÆoÆâpÀ$[Û1Z<™yB?=¡§ÞÖí§fº¥Â{…8ú8+=-ß+¶_nGÁŸ-£àgáŒÍès;ú^#ðõŽtZvl§24Ï R}‡b&4/¡óS7Ïdõ‰Ù{Uß•;|—’ö˜LŒ™…SG4Ñæ£uì1Uwþ_¼gΔϚÑçáè{uú`3ûŽSxRDà—·yfaÕwYÃwÌÇ/Aõ3|ç”ö4¯…t·w¬GÞ‘­Âþ´jþ¦rŸ÷¿ª#r8kp£Ø~Û>;%õ]Ž>ñpô±‚+5u7OGÛr#ÅÔÙ–û1´„.ÞÑ×.Ñ£Ž>ŽÜÖSw½çïÑËo‡q¼6Þh=…'–àG y¦ÍÐ{ ¹ùNÃñ ßqŽ™}$|GÛž&!¥ý7ø»—co5:î†Á×xÆ Õ ü©a,ÐÍCeØù³öKŸi–ÕчB ¯}i“xŠuôüþ¥»¶n¿xGŸ¹œº›™Ñ§¯‡]¦ÓŠã;9Ze‡¾cbA†l°±ÉdèÉÇ÷®¾óž†“5|‡ =š~niÿÁâ!©ºœ™·éêîa¿Kµÿaÿ®CZfØù‘Ñç~¶vôÁËÏÓÜ×ÑÇn=¦GŸmËÍùi¬äbE×[i޾TO6GŸUù)Å~Ý­ÇH}›ÑÄÑg‹xè5Ïéè#ø=}¯MhorênŠØ ÇkŽß!=Ø9鶘ðuè­G“&4Ѷš_®ê»døÎ8ô8”•|òÚÌ~{lðúÊ­ýÂþ_Á¿ÛW+ð;‡|ææsl±Óο¬m]õg8öœÏÏËÑð{MÝM©ü%pôqþ^¶Œ>ÎßCRoFŸÃÑgÛr3_K}Û–Ûåèû Zˆs–½›Vþ¢Sþ³ïØ<3GøŽåÇì7HO>–8fŒ‡ýlQFiï7 '¬ê;gøŽB¹tÓAœÖn æ$§7}ˆ|!ðõóå}Ù½úö¥±@)÷"=zy·Œ9z´óYKí~¶·£Ï»[Æ‘cþž.ÝõqôÙIÉ7Œí³ºŽ#¤(±Ü¤æ™9Ãwl§…ËšK¡Í3³…ïhÛS+$ÏÎÚ¯Y2~ÏNOTó9ž½Üülîß§ÚZ¹Š!˜³vÙ!Cݧ à÷ìB}¯”æècl_÷èóqôaø&ÛB¹çïy;úÒ‹x²eô¥9ú`ggÍès8ú¶âPb*ª›|§´kö]YÂwì¡gæÚÛÙw~ÕwÎðSÚ“o&öo˜TóíXlvã)7?ãþÿ Ú±Úß+„…Òå’nuå/;ønRFlß§GŸ¿ÄÑG DIÄÙëžÝz0¶™«´©»fÏcG_ª-w"µ5Ù­'—£m¹‘Ô“>Ïá胗Ÿ}¿Fb7±ýµj Ò“O_}LbU {ò€qOÃa¿@¶ çáAg$‡ø;ô¢¾KHû„ÿƒüÁ6nN5ÿ,h•‹ŽO凔‘¯_)èÃtîí€ú{Ioó§ê>7lî¡-³žÎŽ>‚ÿÁm¹µÔO•îfdô¡ÜNÝõmËöQ~Ýz˜ÂêíèK5èÌéèÃ$/G߯'÷Õ•en"ho·Õw ßô0Øî+.á;j–Oâc;7›­G5ŸZåCŽŒÐ2òô=U|“º»µŒ‹¤7kÚÈ&êþÍCgW˲9ú8ÏoKwŽ>Û–› ÓÚrçrôüÎŒ>Ïù{f‡m˽êäÄÈmÆÝ—û8úìÈm¯Œ¾az|¶ =ã]Dà³È‡a@†äàNvø¥q/ê8ÃwhN'£»ú®šÃw”ò–Oßž7(ÙX“µ Ô&ÏÜyÅjÐró2î^­n¹kþ‘­õÆpƒlÑSys=7—£OƒßŒàb_6/•?[énpG_O] ÂdÏn=;úÚhÛØþ û¨ß¯À0Høn¿¨ê;³÷ß%’™¨õ057Ìæ™~á;'¯¼ǰm³Å¤ªùgÔÙA½q§w84ŸåùóÁµüsòüðœ€ußoÍ9õÆpƒôøl“»$æštô±ˆÇ¯tWƒ˜l3úJåèÛìÌèãü=$µ¸çï%}¾i¤¾o[î,¥»ÏÁÑÈ 0nÒÀO“ömÒ¤=;1‚À& ü±ù47rϾKeèy†ïzçì»J†ïœ‚?-ß+¶ÀÑÇAÁ}ó÷tC§ZÆ0]·ïíèÛr]oÅt7ø™½6I‡ÞB3Þú>„©âqè=l2ôØu(‘ß=g>~rö{Ná;'Ÿ,G»§ïˆÚ$yËiäâ«þf9AšsÏØøu°ÿ,p!r—÷ýÍÌþêô·×Rßéä{mF¢!G.Š´£ï<¯Œ>×$žl}Gß³ã{©÷ bÍEÔœùøNÛÞ-íJ¤´çïÐß@ „MD}`bº QÅÏž_Âê;†ïàwÉ·úŽ Z˜šëæ9·Ô¬Sï •±mB™ž³¸f€oÀÿÛ\à+æçŸ,¦NÛ~;-õ“1}8e2àèû|ebþÞ'¦ˆ‡c—ÈpÉ" aôuô±'¿ÁeÛr'‡q0£¯GŸUù“Ž>‚ßLÝuñhGBsÏ\ÛKÑq妸AÃwÖ¡—OøÎæãW¬ú%Øîê;gøÎÍ{“7Ò¾"ëÔû%„ʤ¡LϹ¤Ö€¿°`çú]žÜ>¥~ÒɇL¾µç¯æÉïÕ£Ïfô•ÄÑð¿Ϻ_F½ü›Æïè[|Xbþ½ñºa¤>CsO_ÓSýnîÀ "ðy0x…ïx¯„mßGÚ3êàÕN+ÊÕwÎð›¿.o·kJÚ×Ù^¾Ãö*¤é9£j øcr·ØŸ3¯ú4lÕ2+õçÕ:§šï|®—£ÏÎßKNÝ êèãü=GFŸísš+ÁO{ÖÑÄÑgÛr¯ âè#øMÃ&âSà2*?rNGß“WõP¯ßŽ.ÒÀ×zˆÛë ½¶*·CÀwVß¡äV;ô<«ï¢¾sò#Ú¶¯»ƒöQÚ“¯²¥€çÃcY®}¿Ü Õ¹glü]ñÁÿ¯D ä æYû6Óä”úãºí–ðù~ÖÑgÛrkÒy9KÍoþ;¼$Â{™}¶A''¼äÌèË9¯8Gߦ+{¨×fôË ?ˆC¯$á;Ž·Ö“n1޺̳ïÜÍ3Ýùø^üHG±[Ú“¯~=¥oÞ¼”'¿ß_sÀ7à7Ï…Èk¡ï;±­¾Sꟿ{¼îaß/}‡G[nãè³Ýz sô¥æïe8úÛ7yüž}œ¿ºÍèKwôuÔqv/Gß—wW[§cª¬‹|J{›Ÿ[Úgæã—4|‡Á%宾óãŧ®í¡MÅ3Œmoyê½…C â¥Û–›±ov Õ¥»A},âAFŸuôY•ŸêûÆKº©ç&Á¾vO€Ò^‡ïàŒSøŽ|ùÆœêŠöõ´´§Ðpòþþ–1WÉÿ+èCwî™EÛ ö%\´p¯vÁ°9M\›¥=²‰þÔ5]wSïÌÇ@‰™|öß¶ÜE:útÝ>“z0·t7€£réSw]}ðò;{ô=rQ7]aæ&ÚøÕw:fŸ¨µ÷ ß!C/ÿæ™aætè P¬t䨲ß݉d#$F½cÆ[3z’ÈЪM,šZ¾Òª¹³y¦_øŽÿÿa˜‰Lر9ùNßðÔ£–ÏÀ,5 úS>¼”ãÚu5 |þOJ°X_àžÃ°I›2¤¾#¼wA£ÕcWøwæñz·¢}lË &#g”îðÿúÆ”£ÏÆöŸ±}:ú¬Ê¯}(¬Y|x{µá®jóxTŹhÅ  ß¡cnfóÌh„﬊ó2úØUÇ+|çà£ÿÁß3zàW‚nýO xzB­m‹Ä†7€êú-6h{е 9ì³dR-Û¥êÏ0]wIªüf*¦bû°+MÝ~±Ž¾_ߘ#£*G“j˜\ãåè[AWõä5=2ˆßY}g3ôò ßÙþøÉÙwîi8!„ï˜l•˜t›˜†“-|Ç«,Ýf¯F[ˆãvè‡> ÏJðPÐãAx)Ë5‡Ö:ð¯-`h¬ŒëØ:½ßgì´kÁo}Tùyº33ëÚîõÕÛ÷`²LÕ?Íч)ªd.›Ñ—îèÛCé¶Ü¹}lËUÖù{×f¶åÖÃ8Xº›ÅÑ—ðò{;úÝE=~zÙ»ˆÀ§FOõí_’ê;†ïàÿ`ôã d<²«ûpT9s#è0e]וՑ £2‰ŠõA›g&Í7¨öë.ìŒzû“ùø ß±ÎÃéлu¯¦,Ã]…ßk”¸îPЇAøÉãšAžQŠk¶+ÅMò½>ø <æ7¸~dçàº.  öþôìrÚ©Nêa+Ÿ5ûLó},KSN'³¤«ü#5ø=§î:‹x8úØ5Ö³G}?Kw}}(yµ}ì[ŸÖ£Ïvëq8úÖ×Eg ¹i9Tý ùø«¾èóižéU}ÇÐ.U{g­½;C>!††|ú7ü}% íGÚ‘Zêsê.{ôðSõÍès8úm¹Þ3*rþ^.Gçï!¼çž¿ÇÌ9zÙu·T˱FÞÝ­gíÙµÛM”øºÁF VßÑG£§â4M4ÏL6Ø0}ô´Š)ßC¾Ï‚ßúåâOÃëpís9øó¦ ÷*Õ5•~Rw-Èzü;ЄP\7 ôz.À;þÍC#Ôm{7MªüºM—±÷).l¼³žŽúÈØ®¾V²;ú\ :³eôÁËŸ!õµÊŸÈèKwôù´åÎåè#ø]޾5gvÒ p½ú‰vZß±Á†Wõm°‘×ì»Ê†ï¾À5ªöc’ ¯“f×3-—Rãe]ùzüDI~¨i@âºãAŸûðë1AîQªk* üI®xÿÞ?ȇẶ ûAç0“Ïa$ºõ$œ}üh©L»ÿ΃ZèÞó^•·£ó÷à˜rñ¼i3ú tôqEÒчá›^}IG½üôê3:©µçe{™í´|ªï¾c;-3é61û.Hø®ŸnFBg0—sÓzƒ2z¬ƒ C P¨M}†Té\=î‹m˜»AÐS££fÇÁÎнúùæv¸x‚³!Ç‚vÊÅ¿¸fÐ}NÞêëwKùóJÿHóáÆŸrN Á5uAAœ2’ïéœq=çê]Ñ~×d>=~Ë4è´àŸÐkwõ挕v=Ï+£Ï:ú¾Z“¥-w.GU~ãèó¿çéèK4è$s9úVýà?;“(ñómž™3|çd¹«ï¼Âw?<:J=p~§Äl{ ú]μD½98Üÿ¸!XH7Ͻk P\×ĺ ¯?ùR^SIàóÃç€ù \w"èË‹Ÿ×@{nöþÍu%–ï[g‡)pRêØÖuÕ†K ºGncâŠW·bð+ݵ :s:úþl}ºA'ÚR眿çáè»ÿ´êþ32‰6~Ði8% ßÁÏQÊðÝ?cŸfz¸%5·$èÎ<ð›®îž¯äÁ{qm·€|ÍÓ‚\[Êk*ü Ez1E/h3™Ég+:=ý?s(9î8°…b–—ó]´Êo}¾m¹ótôÙØ~ÒÑÇn=Óçï¥eôù8úì$·£oÅ)ì§µÏ$ßÝ<Ó¶ÓªdøN«ø&5—ó 9áÁJg*§9gßmÖW]ƒ‰J^ §9Çùï—¿¼–-²g€åõ0¯‹,ð±`ÍAìÑÇœ‚Àœïïqâ.íAíìs„ùœà§êÏl/{ï”Ê~ü!¥gô•ÂÑ×?åè#ø‘ãÎæ¾ó÷ü†qØù{pô-?!»“ÛeÐr”åZ‡^µ…塀­>«ƒºÚYôf¦=¥»ÎÌèçÙJO Η7Џþ{üî¹ Âv®gEøX ¶á¾ ÄÈ07H?‹à{XKøëèðUû)ù/s=<¦KÒëŸÑ–;WFŸ£/mþ^®Œ¾ñ™}ÖÑgëöý}KODÎþ m3HßÑ*;ÊÍ3™4Å”i¦\tßPuë ÕúžêþÓz†ÎOf‡é½r2¬ŸG øX˜ÃAWðîg2—C7’ß~ØŽd2ú8xÒ×ÑÇØ~6GÛrÏC›.¯a6¶ŸËÑÇ"ž«ó÷R¥»G¼ï¬Þ³}ó’Ú©…ÇµÉ ÚøÍ3“ýñÑG÷b/:m²;ñÙ|;מI©«ï¬Šï®µaro­¥]ÚÒzãȳ’þº> ôá¾Â;¬µ à~ωð±»6Edc’ òþ¢!Šª½[í§Ãèþ ½ê«×gõ×£• uôið3©yéž}¥rôÄÌè»ïxtÝ=ºuøÌï·ã­é`2PF;-˜á;8½gß¾³ùø~á»/a߯À¤:^/…F?ŒÓ{oAÏî{xø#Æ[ŒJ•½w~¶Ã%À7ÙMLÍ-EicI7™ö Ûs;~6ÔGµ’’f,R<™üÃcèð’ËÑÇn=~Ã84ø¥»‰Œ¾TO)}‹Cý#ZetŽoõÃw˜ÍÇ™lÎ>ŒN°ïÒqÉïâ÷ñ;YªÌZûw3jíýz´QM5èizô‰8½ ÙÁ¦çÿc£‘ˆÞ¾ÏGx¯Î•”ú‘¾ÿþ•²ís1È3×õTcÚ£$±~”0d0J2á¬}›ëÄJ˜b}oÎvåñ{ñpô1Á†uòe¥v@ê/:¦­š{hË "ð­´w÷Ç-|ÇYªïØÆpÓ\{Z¡Ÿ3B(„]΃!RÀ7àï‹…É–Ç_± ývâ }¤Ÿ’ƆûÆ‚¯íQÝkûiÏ1ÁŸ³t—޾,m¹·1£™mYKwótô-8ºÎJt{©ðTüJ̾sdè±·µíùç’“Ú%T{‡NW:_mFÞ’“Új“«B Îõ\–÷–u nÐÃ"rÀ7àgrÏQÜxسeôÍ?¢µš‰*4V¢Yâ¿—ÿ¢}äfß=…èÊÕë%T{¬·Ûž§éuÓFêÓ•‘Uíÿ>>¿X –ú÷# |þ±h¬~*€‹¹7íÈIz«þFúÓ}qrïÒ]‡£ÏvëINÝ êèãü=8ÓÜó÷žb>fô±ˆÇH}Û–{Þa­u…¢›(ñSz¥ßÁg‘GóÌq`.„2éµ7é·IÕÅT”ôÌ@d™t1ûXÆßýÜûàRƒ¶÷‹4ðíbñ®\‰WÆÕö$mO[Ù—JöI·ý—cØ"CP~ÝzØU&Mê§©ü G§Êèμ…8úØ–Û8úî>¤•š>ªI-ƒsÏ3|‡ßõ ßa»ñÐááôb6 -¤úξÛ6k€º #ª½¤¼­¥gÕËSË>Ϊ˜åðÝ€R€´÷¨ àéò¿Ê âbîýâÍ}´I)d½þtü±Èdžý¦o¢ÞEß8¯ù{ºG_Ž>;r{ }äÓ¿ò/â™{p+5exã ZvB{_‡^Îð@ï¾Ãa•OøŽ-ЮìP/é±§-Ÿ&å¡Úß²GcõÙª=Še¹÷-ðR Þåu{V ð øÙxãÇbZÎßýýŠaj2$•SúkÛßzþ¡®þªÓnŠ¡AÝ­ÇtæM›ºktj•ßH}ß¶Üy:ú¬Ê×A-ÕÍCeÐ2¨úeiž©U|Ÿæ™¦?>[“̓ïA'ãhµ>›·Ržöüª3;¨l3í˹¿ïý®Û=ø*yMU߀¿¶}ùËrêÓÞ¤ÝI&µÒ?åùO©ÿ÷!WþSÄü3}™*¶Œ>Ý­‡Õ{°õ­ÔÎH}]º›tôõÔ ;˜Çç-ÕƒfÐ28÷ïgÜ£i°Áßa ý›Ý­²m²ŽVñ‘¬£l YÇÑ`ƒáH–ܲá““8RìÝ{+llL¯Lë§&õo ŸtÞÙ0éwYÛ]Õ+·ö+Ëžtg³¨,g3ŽJÞ>»ê€oÀÏf/—pÂlj^×Ðþd\ߦû&ÔúKôF³ÉÁŸœ¿‡Ôô¶ÜïYG»õdËèóqô°NGß?o¡&hn"ð½òñYÀ||"©||ØöÓp˜aÈœöÔ­²s8ôÖ£Øér€:™rë<O®ßÔ‘ÛgEx¿é mF)Žª¾?»ñ<afÐv(Uj¦ûjõßû0µ4ûßY]ÑnWµ ýí™ñgUþœŽ>‚?›£޶l¥»³÷k®®ï³{]‡SÕ÷—öhï ¿;ÿÅ4i¤VBÚó0›“# ð&ûŽš’>0±fkÎéèÛû0"{ÏÆ°§–ŒaÞ£joÀÏ»·E„<%íQv»aˆÌ ¥°€!¬Ô$ž€}ÈÏ9Ïåè»ýgÍu7áñ=w7Ä¿×Wtî•®ú.•ïž}Çðæ„^ ùõN oÏÚùËÛÖÕýò¢¼·x·Ÿ@û„ ØR=«ªï÷Áé]^1F¢}Êð›|Ø€É?4è ˜üúŒþº¡$»ÎÐþ¥ÈÑÇžü¶3¯éÖóœÆaçïA]gF߬}š«qèRã&ªúÌÐãD^¶îNkžÉê;†ïà?ð ß±W wóÌÔ4œ0wž9öÔztª­‰ÇSÂð\Ÿé(ÀùC/"zö×ïY* †}Ÿš¾‘þ¬åww.ó°–œ¡(v‚I?!@!ÁGÐß­¦¼Tþb}´Õg £ðWwË Jü@Í3Y}—-|G‡ž«ú޾™Ð4èçHÞØðð<DƒL¿‰¶:^û4¬¥|^Í߀06„Ów"xçû©™ÇOà'H:kÓZ?»¿RÒåè»!3£Ž¾Ûöl¦cån¢Ägn¿–öYz/ྌ"üÚ”Üz;ô¾C½ª-PQg¦×PË¡¿#!á Û›Sµß6;ÕÒ,Â{ȹ»–„•¸WM߀¿=6æÝ3Ž>”^ƒJOé®»ûš¡ç”20Г•~SúeÉè3#·8ú¶@M·á½[G6U ‘èQ·'ðK¾[޾c Ö[½•î<ô8Ì„ßÏÁ”î&¦Ý¿Ùx¯HõÎ+ôШ9àð7À=QæIj#lÛ5tìïNN-€‡mÿ1ü"[鮿ÇF9}°Õ§Hô§s½ú¹¤½»Á†_øîµ[ûã9M’,¬t'àñ­üfxœæSª=¾Ž-dQü½š¾?›v.‰:øÉôkÎí¨‡zpB«÷!°£îÿÊu“E<ø»oFŸÃÑgÛr;}ÓPâÊ0š›–Bâ§’u ß=õ«žSÖK;F“óù}YÅÁ”oÜYª=ÛdEðóN5 |‡ÇŸ“w"kóÛw{S\/êÏ1Þàèu\»üù‰½ÓtzMÝuÌßóÊè›2¬‰Ö$ÜDàÞ<=8õØÏžÒœ£§S`OÌž?ßGÕž3 «`_Ø{bÕß­yàé6"ÍlœÀ3ê1§¶r¢¯û ˆè[yz=r;-£^sg>«òÓGðÓ!gKwoÒXGÜ´Õy‰Ô\H{gøz^ÕwÎðÓu'j”Tã­d·`OL(Þ^Oèú>˜÷ûvŠ*p‹}¯X߀ÿçØÈ‹:ÓQõgH‹€9u»í’‡%¥ÖŒ6ÀŽ4,_õìÖãWºËŒ>ÄöoÜXKe7QⳎŸzœÔÃ’[^¯›gÚ =wóL8½´»º¦µ¾#,¾ïi;1~ëê77saD÷ãy¼W£bÁåß ð ø{cC¿ˆ(³¥IÂßÂþe¢ Ac‰ ²ÚÅŸo¾¦§.~q·åÎæè›<°‘v"º‰À÷ÊÇ÷ ßá€a7Ÿ3x¾¥ººó½9¢šƒ/ªaÝñŽ+A‘è‹W΃#VÀ7ào‰ÝV LH;øÖ=›¦ß}PÂ.†]ÕчöÖla}7h¤lnb8/«´wTßñ0˜€”_/ Ûwäý7ŽÍ{æ|%ˆ›Ë ¶(Ý;vÀ7à¯às¢i%™,ð³i[Õß |çß'õo¨Ëa™!gÃ{©n=(Ýh­£oR¿† í"Jü\Õwô<<º‹î5è÷.üÿ—£øèíyƒc…÷‚óΉ0Ëý.±¾ÿØì¹f¸ÀÀ }L;9ؘÿþØeÝ5ø½}¶n"j¼îCà{OÃIÔÚo½¹¿šs`Km»g{;h¡» WÉÚþ;ÞóÀr-j÷-ðá¾+±ñ¡Mä- ´“i/gíìùhŸ­{ôqþž‡£ob߆ž÷`®>3ü¼fß=3®—×µ~Ög31çñ+Ë6s¾ÉרþQeï{àé<àÅ€2ÌߥÝLû9Ûpfþýzr_=ŒCƒŸI=°õ)õ}b‡DõÃwÌÇ7Í3מÕIgàe{ÞUë©÷ .8ËuÏ7±gmÂYŸ!ÀWJ¯˜`$èOa¸˜gÑ~¦ ŒŒÓoÓUwÃaW;6¾×ï-?©CZøî¥I}Ôí –ÍÇûÌ9¸¥úã#‘L™íÀà€ÖúQdXï$À7À7àï†ˆÄ˜î ‡íhNÃÉ~ÚãìªûÚ4Û–›ýí¼¿âäIiÿ$âù¿ê¸[Ö{3øÔ¸å’Èåºï½XÛÃXTŸ#Àw߀¿ 㥠À‹Ê5´«i_g;®Eãç®ë­UþlÀg²Îý§uTçÖË®Ú_2Û)8Ëq_öÅU †ý^|ð øw“¬‰ °ƒ¼íkÚÙÙÀÏÒØuçvV7öoä£ê·W3P«ŸíüGls(h÷ŠÈ5ì‹wRØàŠòóøÀ7àg?¿éaÜ@ £M{;«êì?ÖÄ{]“ËǦOOèè]"´nÆ»ìeVâÝø>Àw„û.ãpðaÕ0<ínÚß¹$w>?×½¾úhÉЪY³_ŸâÏî•VÔŸ)ÀÏ|#ýqbÕ0>íoÚáù€ÛïÚ{iå™ó~{ò ö«YÔX©÷à¾ÿ@0Ò·Õ~Úá´Ç ?Uޝ¦o6ïºÖ­¨ªá¹ü€À7ào†z»Ú€@»œöy>À$}²<²3ç³F³°?ÛWø*ùŽü<€oÀÏ~~›« ü´Ïi§ç?“uÿ¢m5ªöœ«pq%ÁTMÏàç |þÀd‹« ü?<¶§¢½î~Ž®zñ¦>Õ¨Úÿ{qd5¯Òï*À/øÿõ`8&†TXh·»CwœâÃé½Õö-xßï@C+ ¤j{¾¿àé/òýüÜ€¦ýni,=¥]ÔgÎûHïá»:Vè¢ð¾ü"oÀ¿/ð/Õ&-©úÿéƒçÿ¬wÃ(€¨ßA€_àð÷#~^mà¯Ò÷]Ž÷®S€‹Ê; ðK|þ`ÈßT)˜ªÅ¾ŸðTó{ðK|~öóÛ à/¹Ã“}ñΪf°EéÝø%¾?ûùÝ)à/øÿеÜ?JÀ©öwà—øŽpßå`تèçáCê+¼[ßjZÔÞ_€_Fàé,—ƒ«Å†ŽÒ{¾uk5ÐÔÂûðË |þá`àüy~a½v«Eñø!߀¿3ùC ð߃uŠ}_¼rü€oÀß ý‚€ßüL¾ºœ /÷Nt•à‡|þÁÜ«üàÿ/¬É Ì0ËMe@¹? ïg?¿)þ$øÄZŒªÆ½¬Öwà‡pºú1˜ýðÓ¯pe­£Ö¿O€_#À7àg?¿eÿ?pïãkqø>~ ßáñ¿¹ àÿî92 ˆÃ7 ðkøFúŸ rÐd) o>Æ}ºÄqùF~߀ÿ@¶Ø~~/áM∸|§¿†oÀßÀýº@É¿¿·K\À§ïà×8ð ø[Àoæ þé¸^úâÕ(ðktcÝÒ ®z"øÙçtœ¤_¿U€àÉ¿#@=? øÿ?;4Ž@ˆÛ7 ðc|G¸oîîç÷-þßÀ¸ ®ß+À!ðô? @ç J†ûÞµ‹+âøÝü˜߀/~-HúâÅŒø1Ûð8J7ùæÌ±Û|¾ð@ y@6=†›.0SÆmMø|áò€lz 7=nÒM¾Wl|9èä È"„bȲé1ÜtQ}Ź'Àà ÄdÓc¸é"ñEâ ðøÂ1äÙônºH|‘ø|¾ð@ y@6=†›._$¾_€/<CMᦋĉ/Àà ÄdÓc¸é"ñEâ ðøÂ1äÙônºH|‘ø|¾ð@ y@6=†›._$¾_€/<CMᦋĉ/Àà ÄdÓc¸é"ñEâ ðøÂ1äÙônºH|‘ø|¾ð@ y@6=†›._$¾_€/<CMᦋĉ/Àà ÄdÓc¸é"ñEâ ðøÂ1äÙônºH|‘ø|¾ð@ y@6=†›._$¾_€/<CMᦋĉ/Àà ÄdÓc¸é"ñEâ ðøÂ1äÙônºH|‘ø|¾ð@ y@6=†›._$¾_€/<CMᦋĉ/Àà ÄdÓc¸é"ñEâ ðøÂ1äÙônºH|‘ø|¾ð@ y@6=†›._$¾_€/<CMᦋĉ/Àà ÄdÓc¸é"ñEâ ðøÂ1äÙônºH|‘ø|¾ð@ y@6=†›._$¾_€/<CMᦋĉ/Àà ÄdÓc¸é"ñEâ ðøÂ1äÙônºH|‘ø|¾ð@ y@6=†›._$¾_€/<CMᦋĉ/Àà Ä*ºéÛm·Ý<в¡#‚JR|ß<"×=qŸÖïU-ëÜ+×7óçøoz }÷iA¾¹”×TøÅæqkÆÝ|ï?~ó)¹î‰ûô x¯jYãýr}³þG5ôÝwùæR^#À/Ý¡#À/ÍZ ðC0=ø¥aVJS~iÖR€/À¯*@€/À/ÔœU¿Ší6¾_€Ä‹s/;XĹç£ö‚wĹW„I 6~i¤”Øø¥[G±ñ‹t«£"A/,Çu8µO]#Ô?èá{ÏøÍsÝ÷ið^ղέr}³ çWCß=<È7—òšŠ¿”"÷’4Táà< ÀA­† βVᬕ_€/<CMᦋT GªFyø|áò€lz 7=Ê’HÞ-mD€/Àˆ!TtÓM ºþŒ2íPj)”Çw×ÉõlÜk‡ˆ¯÷¶a®ïÈ÷ç¸çîUðÝ;åû]a]_iàWCÊn ÆùlX ëñÿšÏú¹¶JRve!ùÞR_#ÀÏj*ÀϽF¹ŠSø3'ø¹™Z€Ÿ{øÞk$ßKU©’ê<¾?×Áæ÷s¾?¦¿ø•ØøÅ­¡¨ú¹¥™HüÜk”K"Š/6~šä¯~<qðøiÀݨlì¦UÊYŸo¨ßúvÀï=<×½qŸÎïUÉõ}=×wäûs|ó¦*øîÐë샮cEUý /)×gÏÉúÉú¹y@€1L@* ƒø|áò€lz 7= ‰"ψ¶æ"Àà ÄdÓc¸é"£-ÃØ¾_x †< ›ÃMC¢È3¢­UTøHÀ˜ º7 ¬%FÂ÷Î ðÍ\—a¹¾×´ x/Þ¯A®ûUËÏñ-“óøî ÍÞ‹ë[?×ýªåçø–Kóøî\üUéŸöºWTâ‡ý±ò¼âÔCY¿ÚY?~Ây ÚPµî¥_€/<CMá¦W«”’÷.¦$Àà ÄdÓc¸é"9K'9«u-ø|áò€lz 7½Z¥”¼wé4¾_x †< ›ÃMÉY:ÉY­k)Àà ÄdÓc¸éÕ*¥ä½K§©ðøÂ1äÙônºHÎÒIÎj]K¾_x †< ›ÃM¯V)%ï]:ME€/Àˆ!ȦÇpÓEr–NrVëZ ðøÂ1äÙônzµJ)yïÒi*|¾ð@ y@6=†›.’³t’³Z×R€/Àˆ!ȦÇpÓ«UJÉ{—NSà ð…bȲé1Üt‘œ¥“œÕº–|¾ð@ y@6=†›^j)…v@wž4s·/õ3ä~¥ÕRøü¢y`Ÿ rN‡ý™µ´@-õz½é¥~!¹_´Ækú£@ÿiÀÿ þl$ûí}à‹Ä/ ìu@ðѼݟ’lºlvul¶ì“ì“_$½ú1æÈl>ÔÄ^ Sg‡±&²OU |l\]л@F }–” ÈPöpº> &7 ?!àZñÝÆ…ø^Q¾ì“‡ISQ‰æébäÿ0Òžä–l‡†ÁÌÀÿÌñ^ï¹Þù£0ÞÉß °Oïõë½Þªà{UJâWÃ>¹ù'´}ròCÔ€ÿTÚËm·Ý23W øÉçâ}ZEøû9ìþNüíªaŸÜü#Àã ð³xš±>n‰/ÀOÏàŒTˆÄ÷²2{ÕÀP"ñ·‰Ô¼à ð‹æM¤R6~5Тê{8÷DÕU?ðAäá„à‹ª_DŒSTýÀàó‰6ˆÄO÷=8}1"ñEâçw8‰s/}½DâçÇ?ÎË¡U)C‰sOœ{5µÀõæsHüüNl‘ø"ñóÁW¶køâÕ/šÄ«Ÿq eË·_$¾Hüb$X•šd|¾_€¿¤ìJÊnöƒ@l|±ñ‹9(Å«/^ý¢ízW1•Û¦•8¾Äñý¥˜¨ú¢ê#ÁÄÆÏDâ‹Ä‰0µµƒ)‡I&Î=‘øùØbã‹_ÈAäõ;%=ùó})¾?_žqùܽ¥H' &#À—ž¢y@x$'/&òøÿÂÿû«ƒþwvÜ=¨ ôw«Ôi$¹úÑÍÕÿ»ƒ§ÿÝÅÓoåËR^—PKù`SÎén¶én«íü÷[X°:¥~OûGÊróâ ‘ø9%~6¾>3 žv?#¯ .õ zH|¯ú_\·Ô³ÔÏ÷»ŸHü¢}ÇO×T½øú;ðÙø°x:êÀߊÅ䢶a/Ž_€_ Ïyh@ç»xz þ½s1Ï(öw£&ñÓZoûq…þ¾_€_(ïö—ŸìÀSÌ}Kù»|ñêÍbãç´ñø®8¬Û¹'_šm>ˆªQ3+¥Ô.æ^¹˜‡dq¢ ð&\äR! çE7œ'_$~~ö³k½|mG¾Î÷ˆ|æ^9h!÷ŒšÄÿ›w«ƒòQÅþN©«k5ßåP ­ÁƒØø9m|ç>…6]9* |V*qB®_‚Ã)Å‚¸ß0ðoɲVî5à§óU˜S³íÓ÷…ðd©§¢À7vë™`æÿòah¾Ã€5ÚôJ@ð ð+|îsR¼šßžbX æ ‰ e.Qê“.Èýð¹Þ£¿ã]º~6=È=Ky ž h±ë=ª ª™ë]ö.å÷fqG}ŸöǺ,r­Íœ0Ö&×3*.ñs½ ü<˜3ÌÕ©RÀ—= ¶GQZ'~á´(mœû]øÕ¾Jò“_€/L ׯï€àW7ð;ä½ÔßQ€? ç»çü*~¾›-×ËL=ffˆˆÄ‰/<Cøÿ©fí’õÒ IEND®B`‚fifengine-0.4.1/doc/logo/FIFE_small_b1.png000066400000000000000000000170551304641216200201530ustar00rootroot00000000000000‰PNG  IHDRþÖ`ÀÄŒsRGB®ÎégAMA± üaPLTE  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}}}~~~€€€‚‚‚ƒƒƒ„„„………†††‡‡‡ˆˆˆ‰‰‰ŠŠŠ‹‹‹ŒŒŒŽŽŽ‘‘‘’’’“““”””•••–––———˜˜˜™™™ššš›››œœœžžžŸŸŸ   ¡¡¡¢¢¢£££¤¤¤¥¥¥¦¦¦§§§¨¨¨©©©ªªª«««¬¬¬­­­®®®¯¯¯°°°±±±²²²³³³´´´µµµ¶¶¶···¸¸¸¹¹¹ººº»»»¼¼¼½½½¾¾¾¿¿¿ÀÀÀÁÁÁÂÂÂÃÃÃÄÄÄÅÅÅÆÆÆÇÇÇÈÈÈÉÉÉÊÊÊËËËÌÌÌÍÍÍÎÎÎÏÏÏÐÐÐÑÑÑÒÒÒÓÓÓÔÔÔÕÕÕÖÖÖ×××ØØØÙÙÙÚÚÚÛÛÛÜÜÜÝÝÝÞÞÞßßßàààáááâââãããäääåååæææçççèèèéééêêêëëëìììíííîîîïïïðððñññòòòóóóôôôõõõööö÷÷÷øøøùùùúúúûûûüüüýýýþþþÿÿÿâ°]} pHYsÃÃÇo¨dtEXtSoftwarePaint.NET v3.5.100ôr¡IDATx^í]y€OÕŸï cìc‹J(-–ɯlY*~I´Yæ—ˆ´¥BI¢¢T¿BR’¢ühAmB‹¤´ÈÏÏRDa"Y‡1fæýÞ»ï½ïúî¹çÞw¿ËpÞ?i¾çžs>Ÿ{ß}w9÷Ü´4zˆb€ ˆ„1pÁe–©þuf0… =v£1Åòç·âewÔJ!ÇàÊé#׿cÃ7ÿQ´è¦ª 0›&êÜû½…=¾ùï‚zWL ÷âêDÍÛ¿*vÀ‡Õ¾ý—Cou+WãIV^õÆO ƒØ£jßþû¾™K'ÙÉ8™¯Ðëý‚pìžðÍ?îšzqzœ\HšÚ¬kÞ<…ßüûö -IsU»áÒ—ÍØ‹€oþ´ù‰sµû‘ …éí_Ü剆oþºîá†ÉpX§ÍÏnçaÂ7~v²No««É8kHã¾Yvùàëµk F­…±cjŸi(Z|K5=>%JK½¡?±£á›‚Gö©”(ßýÚ9þޝ1Øeà›²ùs{”óëYüËW»ù³"$ø˜A¯¨Üþ×»dƺ…н?ˆØùîú"ü=í’ uÿâY²l÷·‰ê/ê÷à„W¦ÜŸ“Z§Ü°ôå¯í—Á`Ë*Á7Ëm^<+RRwÆÅSÿ–Çî¾YtØF’^ÆG<Ðjb®vðÍÒ«î?%>ðZ›>±Y»oø¦‚wˆ÷U·dÃÑë}`×ß0Š—¬¡FßÉÃò‡]|kHøaßÊõÉœ0øߨµÁ·†„ó{&lHX}ÀüÀbiOw«Bž;¢ƒIãÀ®(£¯~yš*]¿P»ÆÚAl#µÇþ¥…cÏËKÅ“r=æåëñ´xÁ¥aC·²7®Ò£ÖØ1¹Mœ†„™]gÐääþ‰§G×Rûyz^(Ãøã©ho¦íÖ„Ýøe°çÜýä'õYxäL Z?÷§.ìÆ§]¸«øåþO›™Õ#NÕÃ@³'׿TÞ A§?mùµúí“ü2ÐxÌ¿^„Êo¾¯ŠØŸÓ&xï ¨¸QüÅ ãÄyõøYÅ(§ÌÒk •îÔHyáÇ7d«0Pûî±z¹‰„é—¢ÑöáwþU^¸)ZcàçúÞAó[ô€ô´¤Ñ”< ä͹ =$Ìî÷QÄ6´_7–å(ŪÜ+Ø$‘ókï+—"Ü(Ÿ3ÿ°œ^XúðLõAHÆÕKtºbìœÒÜ:/sålMÎ0rGù Z:gšìò)LØÖ_ÀéJýsú­dßõÖ°,_ýþ?ôzµñ±³c´™¼C¯•#sZÊu·\éR=—éuÍX32rÎ1\3ÃÆÎÇjkÏÔ4›©µC2Ù\yi˜sôÒûSÿ,à-]µF)¯'{cëæáPð ç¶ÓéËìý­F/sœì Mñîñõâž)m9GÓJ“¹:?W]ü5â¼âXû±z\ý.¢’¶hPZü^‡øU|PsVÿ ì&Ø#\ïþÞg4­/ˆ)l7×ÿ |@„™‘>᯿=¡ñÈõÆïöéðùð»øÑVüÑeqZ^å·„òXH¼êS;}¢ªÃ80¹¸½ÆC¢Ãûê“òŸ£R]ËÜ8$;Ðp:O}VuaìÕ( •ªÿ³+“|]ñµ…±;£à?&ÿàÔ³p•W©@çä]7ÚDùÔMVÇ–a)jÙp²ìöSqôFË)rð¿ìŽX9Šk­G(Ͼg“”ÿëc\“øæ¿Ò4qÈ–2®Z,AÀì­èÒÛô±u€£$vöKè…±¡1žÂ‘÷͵)|Ô¨Úpä~\ìä¤~Á,ÞB¡RuÅ¡P©_!pÕcL7Û1¦D,8o†palK,ñé‚%îŸû¢÷IâP«R*k>$ˆ–™ï¡N°œz«”I~nÊ#=Ü›—dDR愱\?\d–”ý$ "¬½"aÏ…á™dD2æ+ÀPþôÒ• w˜½¥ŒG •|Åz:³ä¬›‘Pœc—µÿ¨g±—àBuR·›a$Ý<µÜ j3T©³Þfæ‘xŸ‚hº6©À0Æ«M.\Åäf€Hv{ë*¯žÇÎ’0.%N¦Ôæçî}fž½~Æñé¿ iÏ%‰Š¥Žlá{2+ú+ä)Žú™`©÷TœJT™ÓÞ³}f ÀŸð^§îáÿ”((òv*w³êx¸ã%Eh«ÒcÈ;«»DzÿÐ&û<]âÈã­ÍW†wMº‹‡ç¨uøp Nºƒð—qUÿ–ƒƒ±ñþj•nGª‚5Ú‚ÀÉÒüdÂ\¿ ®zó×ÌA(È¡Nsq*dâû$ÂoŽÉ–ÑÇrð8Â/0„€ç`ÊQøWÒàŸ8ÀÙÎr°ÿ ðä\œƒõy®e@®±ü«!øl-xž† ''x·Û&áKo ³ssƒ!éŽø½¡Â‰8®íß9ø“œÛXY0FKt–¸1¿Â_þS$Rz|ÃÜ{@`¯O†G2å ¾‡E¥5ÿ^ú®ÝÈvÏÄÞdæ¡OÄ;B¡<›Ó…¥µ tçz`ÇÞ¾?$ôo2À÷"aig| Só–,‹R/}"» ý»0ºAXZ›@姤²~2§¯²¬×‡HŸ¬m ÏOÔ‘ô›UT³ –íÿwˆk'b½¦¸¼‰6?ȶ{&Ͼj×Eí!ü@¦Õ31ˆ¬†ý^ÞmáÂ;Ät<À‹ðbPþDyŸ"åF£ÃÒ£]Ç,OÜg òÏ  <¼X ÒŒø=ÐK=“À'L?´`SáA þ¿åýˆüÃOž†—™e í×LÏ]f¾å›°l­é¨i-¯zF1Àäp‰ÐK8º¥@M¨ÌPÕ3‰lë¶*ÐvŸF9ö_C.J’ЕppâKx‰e· xʱ»ùŠãu¤áLpyÝaÙX \ZkhÜŸ3úU'ù?oìPöm|ªòpQÉÙÙ¡ÚœP©Û¸7×àªÝ–²G´Oð‹|t ˆ ì‹T!!V}µ H¾¬#"Ô'R— ¬—x‚‘€ê%Ú@zc.S °kU÷ózÉ'Vâºà?ËtƒFìÉ[à4ÀÇ© ˆåZ)þ˜­›? Ø'Y›ºðÙ|¦¿áâ÷¨ø-(/uá³óµmt¼·Nx´—*ý9 t½ûÇ[ð“È,ì õ<ÌçPÿ-yšàfÓ¹á|Ï[  [BWð•\V‚ÔÿWfïy®çEø Ê:|ø·cQ¡å4Á_Ì òÇíÀÜÃS !¥ ¾‰‡ŸVú5 —>æVÿ -8QMðaÖøá wã¼aRã¸ð±ó¼1Mðo¶,V濵íð¥õäªÙ*¡'ª >K=z~6Î&u¿Õž¹D|¶–Ñ™ë·ýa@>þ²›ö«Q5Ág×¼ ä·7¿±ÏR®80«?LNü¿™F~Xâp)ÏžáÂï-¥!¬þÌÒë\·Ã³‹êÃÕs¿¸°œ„øï2£ŸsÝ–Ë4u&W»AQ磾}<›Ñÿ9ù!> 䉥õÀgçË3¸‘þvãÀ?Ü!8 o (©þ¿,}üã²AYÜ©Ó>„`=ð[Y6Zr_YÙ‰êM\MÙšñëÏn Êá:-{AÑy\M±wøãC ü#lç>žÓ;e],à ññÊø$«=\^ üÍL#7ï–ü57í•îÜeZàÁàs3•É'ã’W· -ð_g6¸U&‹»Uª;w™øvÌ7S™üÆt+^7¢;w™øìh*7SÙ^LPOd-ÏÛ.²{}ø¬?nÈ«1•Ã×¼)ݹ˴Àg_cnú•€4îäQv!h(Zàg[F¸C5•Iú=¼¦ÄÆ—úðí‘øžÇ*“^ÄSÆfúðíyØ«â‚z"!UáÁל»L|{¾˜ãñr¥ºÚÈц‘AÕß^ƒáÅ$ÙyÌdŸ·9ð5ç.ÓŸ­Àq3•Ý$‹œÉ?À¯9w™ø,^“›©Œò~:qàs²Jëw h€¿ó K×9 ÔBQky«[{™*Pïrþá/µÓ§ñÞàüQÑ_¯ó{îÒ½Ëå~Ñ#ÁïÚqS½Fêvœ¿üó~Lõ½ :+oÅ'ü\Èí>çz¬ôß&ï+1:þ’&Ž&|üÁ_ä^õê6›£½V½ôªHE¿¹'Ž{iµÊ0’S ~àŽt+"gÛ}NØbÙ‘‘7 IÞ@t³n8ü#œû53ï1{˜ƒ7*¶¨Øb>àokç¨ËzÁtuƒ{Dµö¬pÇÿ§ìi(мø57©ûåNb”×uå®T‡ÿ¡Û5p²ù|ì&”lõ]ˆ{Lå Þƒ¾Â Šk:'¶ÞíT4‡•Q…d¸»†Ó;x|éÈζæ@¿\—ë«ô8g¶õu Uy6|-_Ïš¯"üßÝyw¹éáM}× §¬ø¸“¼VýÛ5ÉË'Ì ÄÑñnoÂYpp”«ÁÏ®m}ðlµû%<ÕN¿ÇÒ˜)=Væ»yn>s¯tY¿j8Ô«¿`ˆÛðû{d›˜ïžÖì`ñ‘e0°ïç‹ÞNöN—ux°¯á…àoroGªà½"wxœÓ/›Ç„üœ¼¼Ìy‘*<–Ï[üxG½qÙ$Èß›íÐwÎ:žWÛû9Í£ªÿ¥¹@(]Öf|¨´gK‘…8V<:ëý­ê`/ÚIQº¬#÷Éï"¨ø~qgï•DÇü_§ª¿¹' Òe-ˆ½âK¬Ø•«ý9î=ŠÍà$üÖ[‘72òºY¼OAÉûy¯Wøßÿˆ¾ÛRÂ’ üCÁË“ïÞ;fù·Ê¨K¸%šÃíôÂñŽPžJÀ_çÞ_e¦RŒß5„b\ˆ;bú‰jZ<üלñWZsn[+?x]>%Ýοe–ÕíîAÒ~ž›Z=p.¥ÏBM“²ËQM­h´Ên ö»ÿ_w6W-vÊÓ½´Ý[–·äew‰J"c\í¿ìžDj»n³X”˜P¦¦ƒY C$ì‹Fú¸{´ûq'ýósdà‰eoÇåÍ+'Ýäµÿ[Ç7ŸãNïºPŒHN¢«à®N· |%»ý/†?Åýz·çªenüÊòXè}š×OàŽpËDð÷ött¥Âµ@ãký«ñ¦ õ€Œ6Œ<-µ"€¿ÒÊ:þ3Ô÷Ç0Þö=Ôõ®»ìÅHVÈøáOt7è:†î‚½xZyü)j±™ð­]!·öHä6ƒàï¾Úq)ãQdB§"Õ=vö{ÌÆ¯&&¡·UøßÔsœªý²Ýå‰ÓQ¢pò„úᜆñýiH;|øO¹}HgÁ­ÊAnr›!*‹]eñ¯£}È(üà¤ôxdÃ7Ö¸­E¸àYÑW!qÛ勨.˜?8~¨ ¥Î°½8[콉¾G¾ˆÆ*LRoOø¡Ñã•‚•C¾ÌĦfñIA…Xü®›ò‚œ;dÂ׋…û1ZlJ“DÆ,~ãáö²üà̱~ØV%l² Ÿ&l(5C±½‘±æ,Âø¡uƒîØnÖØã‚àK¨'j Ъ±ƒ‚°ºhø¹îªQ?ItKØ¢1ÜGK+ì·Ø0f«NQð?u× OçM‰y ¾WYfÁÁäJ†Ï.¹Êö¿ðAwÄÞ µÂΘøÀ]õ‰H®xu|VÙ| eR8ü­î~AYÁ}èá ày¥%F9¬^ÒYo¡?Æ[ÜP€0ø ݉z#| ÃâûüQÔx#/ ÿÈPw¯°reÉ´~HþŒš"X¯bƒp+Kœ ×.ü-î–lyøõÆÿò¿í‹Ë‘WæXN¿ãÄEtà¿ëþxöZ|“Ú€VúÂ>º # Èf¯=w?Ô4n–HоÌÏβ&FêÂ÷ÖG0z½CÆ-øÏwþ¿âl|ÕoúÞ¿ÕAAö" —ƒ{в ÿmw¦Ú”sŨ§'}EUè@në(Í;BååõÖèÄ? òƒËs·¡GÒ†Q¨'ªP àõ—Q$„v¶éšnÙläN"Ów@w_<\]´\ë#Lž¿IâÚ®v>ÇF¨ðÅ{$œ<‚`«½[†ÀÕuãDQqã˜cEc¢ÆéU¹‰¼´,ÒL«ˆ“WìxðâóhÎñ#GYKôò©¥çU©M4Í0¹êÊ#Ã.l&vv * åß«ìQù£HÒNtY ŽâÇP€ %º £±z*é·6ñ{ÑK€âeu,Ãm·Ê ß£ž¯ %_Qw‰»aìêš–þ ~ÎhÒ´Ù pJ-wÊÔ¥1AîJ’•,w*?§Ê Û¥¨2Œ÷…›Ég¦úW’ ÐâÏ%iQOŽÓ,Q¤9o„`qÒ/€GÒn‡Qƒn–:Ô i=ÄJuçJvê:œ‘v:K,bЯ—Ϻ•œ<#M‘ˆì†ñ¥þ;1âÌN~ª|ä0©7RbQOްÊr#€“'RdQOééÒÕìU 0x~GÎ|ò¥GjÀ¿_s¦”D²ÒGfË“«múoÂI íwûk?ˆÇ'ÆT#Ü¡+IŸ¤à¢uH¦:8+–‚é)¹¨'‡¿¼Ô"n8q¸ûPÎu-ÒÜäÉ`¿pX%Ť‡u+"µh“²»½n/’§ï©%@ ýo¸Ks“IÊr‹rÀoÝ\TRVRW¸>7Ï„/ï–€E=9®«aÏ£˜tL,‹zrøË`ãVŠd.O“ó!™Òq¨÷ÿ Ä)°d‘·} b pGsy½%¥D'aœò:7ãRI$ågÁ~æž‘R&RZø$'µžw70}ø1¥AÎUâßóiŒ+‘‹zr5QjçPÈ®Ó<úŸžø÷‡¢]Žr ®óH¹´µÉQ: ^»˜%ÀU:ò‹•nŠ|>v3‘•þ­¹"ÿ4é|/þ¬'¿t9;‘({F$ß„{>Á¸WÂm§„ÁÁ,ÍßÚoöM p'®2³Ìnjˆͼ>0‚…C÷K÷A*ìu-q+lácözO_ßy*L Ä1@ Ó „&¼¯(ðOyËkDzCcÃßä­„J|‡Hª}éfD˜ïÓ»/Ûž¨ëÃÍ÷©çwðõá«\Ë}*Ë6TSÞ«tõ Ærò+ £ÿQCÞ • ˆb€ ˆb€ ˆb€ ˆb€ ˆb€ ˆb€ d¨–üD¶l‰—ÏÞbäu)ñ(”´1wfŸV.]â X0Éë [‰FˆÆ@Í»?Yb>ózfñoû¡ý,|¤„.Ðúy&5’ê`JŒäj Zz´h©í4ËéÅO€RˆšhçF ­ ¥‹.—Š$ºÐ9)(v-_ª¯)4Ÿûs˜¥Kƒ–z!0"_‡yÔdEÜÚ[«ìª¿+q¥Ðð÷ñ-µYÚ£“r.×Ôtۀϛÿ™ÖÉç ØhJñ¶l‘#UÏ|±%«:Ä–0í‚o¾õW á[ä,ÂÆ‘ò_lÉ‚/¶Dð… PíSã§w_Ôó‹;$«çwHâŸØu}¢…ýž)@]u}ÔõQ׎ùÅý1õüˆþ˜>|‚ù¾¸ÑwÑÎè»/d€†=Çú°§wNΓ%nµgANNÎÓkþº’°å;c~gáð¡õÝwœÎ«‚AÉ•±Þ}ûY[¶$¿Õz6ãûfùòåŸß^‘¯ÈúΊ¿Æ‰õm7^>«…?ôî„Ö’Šð­…ÿóá#øTû)÷îSã÷ÿêë]ß6ó›–››;d÷î÷1U噺 À±˜Žù~ÇRSßõ?ÂóÌ×?ûо3(ª~Å-¶%ÏÄáR””zx‡.øiMñÇ~Ú¹ ŠõÀOK+{AóæÍO9«fJœlJ46ÿ ÄÀ¤¥a 4_6þ 5´¥ú–¥ R5 á}ÏÃäh|Ì|Ÿ³ðøTK‚´Rí«µß¨oß¾ÖG™ÿáKPLŽ™Áö—¯¿h»äø®ÁªŠÈÔ`%eUt³Bm§6IYÿÈ1bà˜aàÿжK-cv®ÌIEND®B`‚fifengine-0.4.1/doc/logo/FIFE_small_b2.png000066400000000000000000001114721304641216200201520ustar00rootroot00000000000000‰PNG  IHDRþÖØ|£ésRGB®ÎégAMA± üa pHYsÃÃÇo¨dtEXtSoftwarePaint.NET v3.5.100ôr¡’©IDATx^í]˜TU²¦óL÷äDÎ9ÉA@P1GL(¢ HÎCÎ A$GDE0"æ,f1ç¬kÜ]Óæøv÷í{tÏ ÝÓ=™Ãw¿ýXìXýŸºUýUU£†ùc,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,`,P* øJõ,ó$cjb¨N0sp¤p’Ï—¦ä@z‡pÞUÁh_ «š|ó1’°€/XÌ)ŸV{¿|~ô;ªÿΈvõùcI¼°yˆ±@•´€/˜Ìì—V46½ÎBÇå„~´£ë1 "ù—¢¬’_Ô|(cf_ ;˜Ñ+R4:½î"ºê©kqz=q9¡ë¤þû‹| ž^g~8ÿ’@z»¾1°±@U´B”`F÷HÑÕÜú‹µkIzý%é l— úmÀãÅ%_ç¡î¼pþÐ@z+œ­ªøýÍg:Þ,àó§c]"…ÃÓëñ:¾—F:®eцˢèr@?˜Ñ™ÿ;=€.ÛÓ,µÞ¢îÜpÞy´f5jø7k›ï[,à ¢Â…ÃÒë/.5° p (7^õº\Ðïâù0ñ"üTˆƒA§‚†´z³B¹gù#dU‹˜pl[À DÛ„ .Ž6X à®pé€x“QÇÕôº¨¼œÐÏì¢þýÅý\ýÅÕ;Òa “Vwf(÷4¤Þ±m{óí*þ@ ½y8ÿ‚ôúóTÐbóÓ ¬¾cÍ®‹5[éq5_é„~Ö ±æ^lfq6Ô©Ã`Ý–¦×Ê9Ù®U62ïyLYmÎ?'½þgãºq€˜®Uâj±*f]«c-èB† Û)˜Õ•ÿ»öHö,õ"ü5ÅAÒ΃ã$ÈcVgR({ /TpLýæËT¼|þHýpÞééõŠmˆ·ÃÝŽuSñÕ±–êZkÉ®V¶Ë°C?»«ãâYêuôƒ!΃ë$ðg¿¤ÕÊêç æT¼ÑÌ;Tg øÃµC¹§ lð@<‹dÜ•S'¬3oMu@üúŒÖ®«ÍÚ v9 ÊéÆÿ.׳b­®·½ {;u‹ “ð°[AZ­k‚™=}Ìêüû˜Ï^Þð… ¤×™œâ9Ü…?¾Ü†WbúË m=.軆çÒ%„v*¬Ãà8 Ú1°åüVÀÒâHÍ«‚JDËÛŠæõª|ÁÜ`V?„Ä“ž;xÉØà.=ºM;ÄÛ­ËЯöë2èZÏ/'ôs»«ÿÄf.^G?®ûƒ¸'ðcÀïžg@|Ù‹Â…Wbjø#Õç3Ÿ´lÀM?˜Ù+RëÆ 2¾\ÞÕpÄË`†ë»+ð)D*”køÎì°>³ÃçÕqCfÇ NèçuÇ?Òå~|qZØÙÐŽku[a’<<(ÒÏKŽõ|€ÝP—\ˆ¶5B‰²Áª ?·ø`¬k¤èªô‹^¹y¾âíÞw‰u èÄ7ЫӯLqmÊì$.ô{¨ÿ$Ìž¥^Äv*Ôa'ÁëXgÀ~°!- bgB‰ i-P¢ £8¥æ‹¢Ã—keWééel#“WÍÍ»}<‡÷î îv¬3˜*ˆwÞ”)®Í™7gvq^Nèç÷p?†žH{)qfôó n2Rr+c¦3`‹…xN,oÚE⺳¹çø#ML‘8% U™ûBô6áü‹ÓëÎ'%™ÐxÞåæmQ ñänELÂýºë:Ä·dึf°5«+]NèôäÿN ËöÄÌ.[¬ƒa; ê$Ø?ŸâV ΀ȌqÔM á€ÑÒêÌåœî7¨2?ªù ,à øÓZ„sÏO¯3G((I2ÉÔ`<¦×=½= ‹•›çq¼ñÂÁ{À]a]«À7Có¶¬n—ô½FOçGBœ ñ.Öaà'î 2:bÙ‚¸¨3ÀS–h7– Ä=L=ÊÔiµ¦„²Nö‡jèUA øüá&¡ì³ÒjͤžRÉCîK:J'{ùy'èY4¯¸HÕHo!ž‡1î–oVèÔáÛ}{–~õØžÕc‡º|·*ì¥ÿ×,<ØñtõÊê0È›ƒv xh$oÖð¼ ¨(¨ÄÀz ¨s`a¤p|0s€/XXpÜ}$¨~(sH¤hü4ÐËÇÎÞ¸A¯Å62”q< !DH£#^zwwéÑR5ˆg÷Ü‘Ýs§íêµ3›]¾  úáÂÞüßér<¥§u`¬óà8 Ö1`ÇRÜ ôûËŒ­›€Š‚X¯¸ f+mI0ÓŠ É4‚Fô!Ô¥v3˜:R0&ëã äw€«ô/ìÖf ŠLL«5/­ö|;î]yzîì%=¯Ó”*¶aŒ;C¼½åãuÄÛá.±n]€øÆì^7f÷Ö¯›²{‹Ë ý¢Þê?±¿ÈgáÄ¥ yÔyã'AÄEôQEn`;*’7¹C  Ê9PÄ„~áþ©“¸Öü´šó¨›>½‡ÏoŠÄ|&|Â`ôÄHÞµiEsaw²¾pö Ud'±@/ÈJ= Wtîæ-#¢=jç€cÑ‹ðЄuè7e÷ѯ]Ù}—ú5û¸“Ýg—õ:â̰#Aï¥N‚ýxž[>PÒI0±@âˆ2°Ûý³{¸üEsÃ9—Òº˜"q9ŸŸ?7Þ+œ32R0;­pŽ ÷^‘=«ÈŠGT¦dM*襛÷FS$.Ã)Àm4éÎɛɟÍp?—L¬‚„ž¼6n:+˱<ÂÑY‡§·ž1*=äà]ˆ§€DÂ]€’*!kAœÝÿf÷ˆ¶ ç_”^oaZY¡ì“#µ{>Ì:xy$¬“ n <@’ÇÀyxfÌSg&à<: $‹ÁžîŸ“?,÷UÁDÿìHþ¬HÞôPÆùþpkS$Náø|Ñ@¸S(vi$gf$·XâÞíì½pïpöŒµ´rY^“rƒ^Å6<\æˆgQÍÇ[ˆç>Ø ë èöæ¨kàÞºnÉî¿+Ö®8½átÁ·Ê\˜Ó›LÎè²a—ö\þ"êeå}ƒ3í°£h¿Xg@ÝXBì}ô$Xq %»‰~d\,òa¾Ÿ£¿8’;3’=9=ÓD'1ÝßÌ/ ø"þ`»`ôÂpÖ´pö ÷%9Z¡J9ÜÙÛ#IYZÔ <½ ô7Ïâi‘ªr¯#^ºvÖÄù•{¿nÅ•ÝgS¬Õ”h£yq{vy—IãŠsìæÏ⯠^Ð:KŽ“ ~+Pg€ø"–¨@H–Ä5™ðZ˜-ŽçþUîË™úúçJôÏ"ôçÌgOgL¦ê42Ýô ý! e rV86)œ9-œ5݆û„Á½­PÅiö\biE8¬>%œ=coÀ|ëáJa­Ø†óŒ,ŠHŒxî’@tk.]·Ñ5ø¶¬îË£-¦F›,óè¸õlÃ¥¢Û‚Xë©Ùý6‹¡—â'ƒóÎÀ¿ØÎ¿Ø¡€ôB8’¥@ñ•y ˜Eÿ®ÜWV¾Á¡…©VúñûfL G¯ „ùüè$>N»é~Ó@è´Pú¸Ptr86%Ü;‚{+ȱs—`EAȹB $<àÀÿp÷ï*~ñ~HÅüx%¾% ?m` ÷zù|Çf'±Ïç«ë÷÷¯†Æ‡ÂRƽ'™ÃqïrΞjûÜٳʔJd=@OѼ jt7Ï"xáã-Ä ¬çžr;»ög÷^k==Öb…»KvRütÙpî¼'·¼ùËâ‡Õûª{2Ûpu ¿´.^½ «ù¢Xû9wàèíÇÀqÔ} ™`%Á2†¹ÿ8Ü Á ý]´O"ô§O1ô‡ÂメqÀ¥~_W_œc!öùjúý}‚+ƒ±t)Üã ó8'oýLjã÷ œ½²d)ÄôZ@Ï@ïpó‰¿?ïÔýy§Ü–ÙuA´å,­ý\ëʵõ+®m•Â&[;¢wGâªX›éÙ}ÖÐûžŠ3 +"¢¬@¤Šb™€íàx=Ø¢€’pÿÎÐ_K|í¤§ý¸Ã󸑎þà8Ž“€¨ß×ÙW£‰qóòû{— ÄsÜÇápÓ×qè|Ž=¯o@ì¥E“êK‹ÉARëbr„!ž³×@Ïéyáéã^Fð,žáž!ï@îI7‚‰µZìlgÑ[reW×Ëï.¾ç³Û¾û×¾ïÿíyíúìoWm~½ñÉ»-±j‹±7%âí¢­fgv]˜wê>|Œ¸g@¥Å‰€`d-Œ,þÇéþÁ ý‘ü$‡þP”£b(2ž Ñ1ðŸï÷u¨Q£ÊwãVå÷wÃmˆx7îÓ¥¿'ÜOù¥ø{Ç´ã^SÛL«V%2ZÆá‘½“ªça}ЋØF²4ˆ§ˆr oÈì~7ÄÚÎÈh½R¾»]ç,ÛY/æwÛ<¤ø‰•/üvï7ÿ“Ìuó×ÿœq÷§]‡ßcëÖÕ%øœ{á÷„V‹3:ãâ#ÙÏ€Ì速瀱@*p»ÿdжJû¡Ÿø~ø;Êî˜ïgèŸý K×ügû}mjÔ°í%¨ü¸7&Üžp“ò@¼Ä=…:‘ ôõpÄ£,ÎaT&ÃýL^·rò÷–¿ƒ{Å`:ƒ;#вöG±7¶,–Ñðˆæ9Q#@/|<ÁkÈþÌî‹c­g ðy4²X½, í¾lí‘Mïþq×—ÿ(ŵü¹ßœ:ó‰üî[µž]ÞšènÈZk7§‘}Bº °û€Ì¬l˜1BÎ;cD€Üî_?òÝq[³B!{&Þ³dôËjWކþÐ?™ÐOA¿‡ï×p5&à?Ãçk ñGåâ>Š›nIq¯ã©-á!~ò¸ç³‹½p¯3÷^¸—4ŽªRqÜÛ½-‘u^6 O¹ƒwgtšk½X4²84ýºÞ³ÓÆŽ—Þ5þÖ·}ü·Ÿþ½Œ×ú·þpÉÚ# NÞc ñEŸ®v dCV¬õœÌn‹q>Õ d€'ÄÄ·òú€v¤>‚-Upºü0´-÷eÁƒõOŒ~«ÚUŒª¥ðý<èúEÊ ôÛÂ/€ø‡ø|Mr‘8 ·Ü€p*ô"µEˆo§tôÒÊÝ(zØu V^› îuúÒ¢q<½ÖsêF÷ô:èO»#ûÄõ±ö3cˆm¬Þ\Ù˜kïbÉí¾mÀ”Çæ=òí–ÿZ¾×¦÷ÿ2ö–;\v·Ôâ«¶,—³í t>;ÏÆYõ:Œuä*þq¸.ƒƒˆç¾ È<˜Ÿ$Ðï¬vI¥T*qÑï úã#mTÀ?Øç«Ø"q7Ün‚1I!>Aj«(|{¦KÓEÈŠ¿W]…*¾÷ô÷ªFëî¹®ØÓÙSv¯ä+exc÷ôY=–ÆÚ°ØFÞXì‚~«…¥ÎI{Î[ñÒò—~ZÿÞŸ+ôšõð78]¹=¶ ^ÐðÏÃ!:+qbqnóN»ƒGAÚ@ÿØåþ5ú_Dÿ’øúë_‡ï·Ð¯é|¨ÐËÑï |¼SÞ’Pwµß?Ðç+Ï"q·Ü\‚Ñ%½7£qô Ùºñ'!ÄT¦Né¿g!¾'î1$‡wÓÆÇ½(ÓÆó÷Š»‘½ÃÙËš”Ó#¶9ùæŒÎsb­Ùݼja±_Øzè#v¾»úõ?\ÿÖŸŽÚµäùŸÎYþRÝA{<µh¶˜g ÍlœaíÀrÁ„ºãF€r÷ï‘ûje/w䃊D<ôëÕ.]å¦dî”·„ ß6 x#üþ~>_é;‰Qvm„[I00*eÄ'â3I¦¢2I‡,; •N!1îIž ÈU®2cgϹK•Î:#IV9ÓSF»™±62¶QÍŠ¼…ESþÀïö÷𤻿\ùÚ*ëZqä÷÷¿Óæ¢;m‚d·MÜá<çÞ#ïZÀ‹ZL£ÿÝÌ­è«I$éY2ú5§ùX„ú­”·Ä ?Á¸Âïïíó%ÝIì«‘…G0pu)¯_Èâ J‡X|7¥ãÆ=Bþ^à^gî¥Ø¸„ ‡§³V„C|ÈýY=–ÅÚg ªª ›-ÙR@l©=p÷ÏÍ~ì×Ë^þ]¹&ÜùE¯±ä‚™!>^‡¦–•ò€SÝnfΉ©(!Êa\äéþõà‡1?ŽÈ‡Iœè·²^;ß/t>6}?+u1ys9ýqÏ@ 0Ìïï^²bõײ‚žU¯X¨c¯^9C|+µe>k¶Ò›NâÅ9vÜÛµ zpÏ%õ,ÈQ‘½•Î’³‡ÌDlÓjÐ[A”?ˆâ@³s ]ÿæ¼Ã?-|þ—*xÍxøûSæ?‡“i¯ÈzIH7QŒÓžw*«Ð)þG¹‹ûw0?Œ÷¤Ä7¡ïèwU»ÜèW„JymUÞ¹Î.ßñŸ®N† &KÝ8"{õ9î%›?Ä×R[Iáë:dÙH®)á’“Á½*ÐÚ‚-²?åöœ7‘ȬÕrѺ¥ <-Í>§û¶.£¸jïÇsÿTõ¯YOýpÁ o4;ïïÌJ\”¶šŸÙiNΠ=®èŸÉàõéú'…~š~®‹œ™ÆÓ^èU­-"åÕë\åöpeÄÙÉ@¿FÀq™œPǪÚZ!¾ì+'JÇFá3ñ=ë8±×­˜Kqއ¿ç‚à^9·gv_kЯ…Xïr ÝŠúïê?óéñ÷|UüäÕîºrÏG]F>#¢ %Éô æ£-—ÅÚNÏî·‘¹;ùÃÜ¿ý‰oBôK•¿ý4Ú„MvP„JyA¿“éOžëô¾ èOúƒJ}ÕqÔ!¾;µÕ©L¡Ç”=µ  2¡bm ¸gANÎI{2:͉µ˜‹LBÐÓ+7:sß+ŽL~ðûiþ¶Z_×ÞõÕ‰3žÆv„(Œb4¨¨ËB 5ÔŒÌnËDñË3øIŒ~;çc‰œ•ÊÍ)oMÐÖè úË;ìñùš'}ÔhKý’Câמo â!¾NéP³ßk´ºì±J÷¼V•ÝoS¬Í´hó%¶î-ÛYRþìn[Û]~ð¢-ïN|ð×ÇÒ5îÐw§-çÙ:ñ¹ùhó9fçœDM’–ðA”½X诓ž߯Ðo(­½K‘ýñ‚þÄa]Ù–D“Bû|uRz]ëÁJ›)zPt¡ŽÆf*Ÿ‡øîÔV5zážd÷Žb­;Îaå*ø04ÆšA@Ï»íIÌW#ö¦ ÏÎ~˧c}w _lzgy°½4Ëûq5IfóUÑf‹á/²ûnL ýú‰R/¨èN)ðtý²Î•(ìI¬íIœïŽJ¾2\è{°8«/Ôa!¾Gjk•lµ¶Z«neç1¸§Úä¢M‹e·.uoéAŽ^«{ÊÞ“æ=õ¯®¹çÛãä¶çÓãËï³Sôd9ÈrX³•&ˣͧfv]*Doq}¿J©¡d?N„~-åuý‚é÷ {,]'/rÅ#Wâÿ{À^RÑP pYÊïaËn¥FMiñu¡Ž uxõÊâ;(> Pk/Ô•˜vÜgõÞÅàƒÆóQˆC‰WËê¼¹ÅлÎXõúUw|}|^Ã÷}9`Îó8ù²#Qõã*YŽ–¤6™‰1*9ýn’‚g{ä£óýJç#º{µWóú5¦Ÿsް‡ë:U3WêaŠ»©@ßJjÐwùM²C°àul­†š‡VT¦j«Ep)&äÈ+ÆçdvYšÞ{à–PÂàQ°î¹Ý·vùàù[Þ¿b߯Ì ¹îõæÜ™ÈòÜW~œÞz^´Å䬞ëY×.v°W»ýl¸ƒD¿HyÕL[Я5µp®“‡=Ž"og)•ºÁïk•ô¡¿O úîìÖVÀ’Z|Åê8BVWˆoQ™º.MÕkiRÈÎXÛ™é §XÚfîµl¡Ö€›zM}zèMŸ^zË—ærXàœMïwù`n·­¢:«òT©ËÒ,Å*‹Ò›LÌì¼XC?›ó£|?i<µBo¼—¢i:ש¦é·+ÛDØÃ»xStü>_~ Ð÷ùê§}gç¡=»å5> 6N¨ãbñ¥“’LÒ鱋1³º­‹6Ÿˆ­Îlð Ô6ÛŽ•Ô6>k_ÿ/_¸ûss%¶Ày;>é>ù©šýo[ b ‡­£Ÿ ¬?%ÖzFv¯hq#€~äÐSpI)Ï"Ôm„ª¼¦Ÿµó’¸M{˜ª™)Ûl‚~ÑÅ›j¾;ºd ƒýd¤§}ËåÛ;Íyvë(`顎b3Ý,>ﯩ­Eé (£ã’ô†ãÒȩ̈ÊHBÜgwÚÐêÒ{O^õÖ¹;?5WJè7ïE¡„ÚÄèdëÎŒ6Õõ ývy³öh ´ÞÒE\§ {Û£i{ô>FÞÉ•´ãø/LÁåó‡W$…~¡É;©ã–MÌ´e·L›É´ø«ÇO{¤¶Ý¶F[NO«3³Å…æGÏ’µ×¡i=·uýÈuõs•Úƒ®{³å%÷fwÜ ë.ß/öÜôúc3Ú/b"Iø° ßÒ·ÙNè#1ÆG {d‘Ë;ßU\)8~ŒÀIúÿiIA?—ψ|»FMhñE¨£ØL%+ PGè%3;­Io<.­æ6f™i”ÖM²C*U¨;xO·i‡‡lüpȦÌU.8yí{®y¤ ÇV"=m‘ Wøð¦JˆÔ>4ëŠQYõ@“NXL¿öØJ¼2ì±ò])ê,­ã÷ûÚ¦ } *ú6—¯MæòY–è4÷Ìn=Y5“BÍm¤ÕÉŸ!:ùëX!“:?+3[_߸ܽæ¿2hÝæª Üð~—)ÏÔ9i7Ðo‰Òhá®®pô#R/˜”ÞplF‡Õô‹:—àŽ˜¼GÖ dØ#Š\BÛãÎw¥¬ÍjáMÖñC‰œ2ôѪR2ôKvùBž)4 v"_Pïö:+o@‰6.-jaV–ÌC&Yf©Bn§õ-‡ê³ì­þkÞ7×Q°@÷¹¯4:{FËÕ±ˆ•ëR‘ƶ I‚;ÎFÅ %ôK®“‡=NâÈ•ïº?8C5¹$ÙˆÿÚÒõ­g”8jAŒ”Òç,ð¹|EhòÅ Y93P°X¨ƒ^Šôz£Ã9cE¶€×QÎi¬hQïím¯y¬÷Šwú\÷®¹Ž²z.~£ù¥÷åtXô+Ÿ-ÖLÔr‚’9ìüQÑÆ“¤`ÎUäò¤ùÕ D¥qüÐ §ìòe¦;"ú“tù6BÓÍBŠV´ÙÜHÑUá̉|¡P8[!“•ÚÆš,¯{òͦ<×céÛæª\ t_òVë‘öÚfç(eØC¨µÊPÖµ‘:¸ ¬€^ÈVäâù.W7¸‰N½Â•bÄðŸTJèügÆ…¾ƒË׉$\¾–Ý®No0!œ3BL#T#8AŒª‚€ ñ3[¬jpÎg½ÒeÑ›æªRh;épíÁ7Ó®E•ò*–†×eZ©GÇE FD›Îfa+ßõÌ;þøê6´°T073.ô¹b‡MS³Mµ¸|w Ëîò›-Ô¼:˜~µíu1* üEäv\ßøÒûÛÏy½Ã¼7ÌUe-ÐvÆËõÎ>Ù|%_-*‚~^—e‘:›/+F+‡2‡§Õ'6VèD'ß`­èÒ†xTO¢â.4È¥>„ž¾¦ÞÐw*vœ\¾$v¼£|îòÓê±Í[xU¶`uÒk/(è½£éÈ'ÚÌzÍ\ÕÅ­‹_mxñ!¤VŠö-§hF³|WŠ:EÒìE¹¿®ê‰ãøkÔ•ú5²ãA_ TKäò‰Ë_¯æšÞxæË1—ÏŽ‹I(œ£õÕ¼·é¸g[L?b®jjFW=žßs{Z͹RŽÆFMñÁâ\“~•¬Ø+\ºãËñ— ç„ú¸”¸—™îHô«ÁRÚ. gùÖÉÁ‹&,+Êo±\Dj¡`‡ fCMÞhü M¦¼b®jmW?™Õæz)Gc, '(I„]óêÃæª‚(¼ì1ôQyoCQõ)ËmÛˆÎôÆS,]´rü¬¸«©z”œ“7p9XN‘캖]Q‡/žê ®±Ð¯¢¯×›Óôvùk![ˆÔ½Æ^»ÝæŠCÙ-WŠÑ³\«£žMËÕ6äywÑ•O™« YàŠ'à•bm®'¦’7àRuVS¶Õš_Ô}s“3ocn[:þŒ©Ñóy#‹Ð´•( …0Ž9~{ ‹\Ç¢‰ø1¼ìÐÇ06¹7ÅAçÛ¢G‚+8M¡Ë·Dš–ËôÓMp¸üî3žïwÝ;M/¼+Öx™ÖÀ4jB“,oY=w\p?B sUºòÏÄ‹MÂy£KÁWzîœ6k µê»êÝæçßÁÚ¯,ÇŸÙþzk ïáR'Gk_´Kƒ´WPbÆéó ;.èûý' ¯Oâ±EÑùJlSR‚‹µà툡 LœmNI|’»u¾ö±׿ßwå»]ç½Z…q«K=—a£.LÈ(¸è¡ÂË5W¥X ÿüû°zªLÙÎË”9ZÜ’Ñle£ ïé¾äMHëú¯~¯á){X}W8þHö½^©zTÈd»oˆtY&»J¡i9õ˜ÇçkXÐ÷µÐGç{ˆvâ$¸|€¦˜|¶!£Í2G”ßöòƒƒnøfê}ݻݗ¾Ýfâ἞ۘË×nè]d³Ihö`÷m˜ ¨ðâ‡ÌuÔ,Ppáý¹oA7³ÕG9ˆÕZ´X®ÖÉ·t,~¥Û’·{­x§ßª÷®}¿v¯-’¨!ÇÉ£¹–‹Ïÿñ´éª8© µ‰#¬ÆÅ5bå} ç'èÛ¢û˜›ÞÆ)-öLpÅfžN"¹ÓY£Ø­ÒüÜÛO^ÿ!ÌcõZþN·%ou^ðfã+Êê´Q?3ÔûC3Ø,ª;rúíBnÁ\n ¡±|ƒÕŠÅäø,jÏë½³ÅØg:-x³ëâ·z.{§ÏÊwÑE–×îzbA¤ã]#z¸xó®¥ã—Ù‚;Ùõ&øí‹ÄóŒ(ܳ—ðÓþ,­!«„hÇ«‹Š œ¦Kž;’?A´®³æÃ'ÝtêÆÐdcÁd=–½}¢·:ΣÍÌWëœs7ïð·\>›ÉC0ˆªï.̈Ì?ûÞ‚ó™«‚,Æ]¹n–c7ÙrülþëÁÍÁ°‡ÚÎ~ ». ßÄ}Ý'®&—k¸D0ôŒ¨I« èËæÝÉ®¥å´üŽ˜‡Í¨â16¾•ô‘éÕFæ3©¦¨dñÞsGWŠkP \Ð#¬£1R4Fô1²Q%µºn<}Ëǧløð¤µÀd0Ì#¶ŸûÄ[MÆ?W0ø6ѳËÇnb&¦ŸÒ`q¶2hÀ^ø¤ü³ïÉ?ç^s•§κ#Èùºi9~‡ áŽwà.›kžsO³©/·.~­ýÜ×q¯&—¿ü¤mÖ¼?]£«ß¡ —âøóf¡ƒQ¶/ò;süžÉ®%â/1æ!èûý=Ê ú~ÿIÖB8]jF•,Ûq4R r†MÊW]ˆ¼ûVvSë-¯0ÍONË•gnûÍÔƒ×}Èó]˜FÄݳݜ×[Í|µÙ´#õF<‘{ân2ºpù| þúa°' #ÅOÞ‡µùgÞe®r±[L+G±s’ŒŒÑk´gŽ­ÙbŽ?ï”Û\ûl³©GZÎ|µíì×;Î{÷jôÐ aƒÿ:é†àËú-xE Û‘bæh³)Zߺêܵ%Ê¿#æáûç¸$NŽgóùš”#ôÛ;u;úY½’åˆv\\ÁÏÈ<5½Áµjƒ"É<ë/>këÇglù˜Â–і{(‹¯BÎÕ`ÂK…C¤€¹|Ú‡Ÿd¦+³Eç'ßN²°4óô;éÍU ðÅ£Ø:A wÙ¶9¾l‚¦ï„¯©uÅø9ð£@^Š÷çÎ ßD’†T „&ü¼|YÏ©ÏØ‹»Ø¿=OdÉj` ÙàžûTÌÃk[Dqú|Yå}Ÿ¯–³¡Ä«‡PŒ qŒ…Ší°Y‚ѦÅÒ\>b¤þâSW¿uÖöONÛü±;ßÅ÷ÓæÓŽ4žürýñ/Õõb›l¾‘¶eÁå÷ûØf¸À=|^ÂS±2-Ž5Wr`·Í»a=rðúX¹EûÖÙÄ}æøsÜ\8ôÈŠðC4šü2îÆ¸'ãΌČ\þ²·‰Ð\#\>‚ØÎ£¤â®¦êÉ츊eÉrdƒJv1£qQõìÚ…œÚdBŒ/Ï?¡Pd¼PYÆ´ÆEkêª57œJQ‰¢P4±V3ùtÑrÞ`ÉÀù/aNØ™[?fa3ßÅýwÕ¦S_i8ñåºã^¬5úù¢áOâwbûŸáò÷áG"ÜÃÏqWþY,è?÷>ÊÏè—cÛrÌ•Ø'ßNÉÒ¹Á0ô³;'9~ Ÿ9þ·à?Õ¼ú™Zc^ÀO€‚\þŒWáòyv«šð_§múAl›‹ïâ«„äÄžÙYÝÔ¤*>«§ä˜'nÛ»óƒç–'ðñZÁðå ú­©zmºÛ¤9ʃÛá2:°¬ßÙ°´÷”'Ͽ鳳·ê™ïv`ùnóéG`nèxk_û"ä\5G.¼øaZˆÉ]> uð³ñŸèŽ îÇÅOˆ¹âZà¤[òÏb1ÌuÞ}ä5à;pçŽ '÷Á‰]þ8 ^ëšça|ü'¿‚ûp«â×àò¡‰$š\¾ž½ãÓ¦§ßÂT=lÀ ’ÝZSøxZwÌã5¨Ö->¥Ç9ïD.[—#z>å ý@èTD½hM¶ Èј¢ oÔ*8µÿ—"èwÛ–yÂù\±f¢ËÕ÷Ýýùy7~*òÝõqóÝF“^®Ç?æ…š£ž­yÕ3д\pH„øÒåã',8ÿ~ÎBÔ}/y!¦’¹ì€Ì˜UÄ.ú *V0špüg±°ñÏéwâ02ü}ÍQÏ)—;pËÈn_Cvë$47|xÚæÎÚö ~ͺýv°ê¬œ,[w¼5¢Py<¨m¹Æ¼¹{Þ©¬Ká¾ßß²œ¡ïv¶´õè‹‘šJ²¦S캛TSçvTA*­ö,k°T£em†ÞqñÍ_\°ë³sv|zÆV™ï®±ò]˜ØÊw'¾\g,…=5G>[sÄÓ~Š.{”~3rùuîáÆ²rï¥@]§…DÀJ‰š¹úÜ„0†0}ù㤆¸äøB¿püÉñãVÅÔåü5¯z¦†ÁavžÝâÐ$—¿õcüŽø5ó:®SJfºÉ7gŨ$¬Å<ª¶åÐóÄ¡8•”‡ûЗ3ô}þzÔA+4Æj´ ¨ÂZÁ:ô•æÌ®ÛóòiOžÌ–D¤ÕBª¸>¹ñòƧìÁè÷¡{àø?ùî½¾û68cG¾‹d‹Âž«“˜ñŠ'è'ú`>ü=.ü„Òåãß‹†=Nz/¸®+ŸÂʺãö­Æ.föXá¥ÂñCBa9~Øðþÿ v«9.¡¹üzÈn'½œ˜ÐW_¿ã…»>‹AΩ”Ì ò—e{Ì#j[ØèH­[ššß1ä¤÷”+¡h—üÚ¬¤Oˆ/ân#Y³7¦Øu;ln8Ÿ—ωù˜ÃøqfjõÜrù¾_]²÷‹ w}Îò]NóS¾‹RÕwÝù®{àøáÀààá½÷Üå?Œá¿¹®ý?ÃnO!-¦ ó8»²{ìÀ]±,0ò0醩ÿÅÒñÃkÀtpÂå#Ô!—_.Ÿg·6Bóm¡‰ß¿à»>?{ã{R–#bžh‹)b(¹U¶dp%PœñÃý`䢤Ê13‡ËëÅf8׈(1 ÓèóÕ&jd>_‘BµX’!ÀXOl²"»Íšáû¿ºìÖ//ºù [¾{ƒ­¾Ëó]˜^Ëwö&Æ"{~ã¾àþ‹êðß¹ü«€ûÃ°Ž¦\­öðÇsOÜCéø¸ †ì¯3ê0Ý*("MBëŒÆn˜ÒñÃkP È$æ2†Ãå#Ô!—_"¡‰ì5,°goÿ¿àE{>?uù«RÄOZtxºXÛ9ðz,Ü×…@¬•ŠâL%Ü„¤‚褌œo* “Ñ}ûÊN­ˆ+¶’ ag´ù$ípiþ°›?ÃŽ' {X¾‹< Ù`žï®ò¨ïR¾ šŸç»W3FŽ÷î‡èÆ}el4—Ü“÷â¹h ¼BKÈî¾nJÇî•wâîúW?‰/ 2žr¤1,P„ï‡/Áÿ°Ç€x‘#ñ»%wÜ_Àh©špù¸uãÞÖ³B)cžÌÎËE1XJ!lá>ŸL¨7¾¸Û¾øHg;»ï¦>R<üBÝ-鎛Ñׂ†`Áè+¾ ôÅ¢s¾ ®×±63­®T›¯:ã;WøjØm¿bùîçžù.ÉÚX¾ zê»î|—?ÂrüDí3a~HîòyÀŠŸ àÌ4Š2-¦¼\眻Ä6lÂ9†®ì®[!,ûŽèt$ÌrÌæø¯zºà⇹•(Gâ E‰,».?5B“\þÍ_àÞc죚™bž¬[Ä"7Åi ÷=TœŠÝwvëfLõù “ArÊñYSÌ@Öûª¸ZS ô]>mÅÊè¸P4"òÓbÕéË_¹úί‡ßÎÂÏ|wôÌÉ廜­CÆvÈŠ»AQãw-ºêiêËMÚpÓ©G 0H!ZOz¡æ ½Ô=|L\™íÖÕ?﮶Ť2@Á•—DÈñOx !;wüE—?ÐS*!Œ€Ë¿„¹|Î $ 4ÙšDh~Ì Mìíºdï—ÈÜ:\~¯ÈYYãbZý¹\þ™B¸o›f.ZÝ¥þYj÷3'§º6+Ù3àóÅR÷‚{©­ê.ðæ*W®wâ¢TMœ(Õr®šŠÐ$—€\þÅÛßkTd¸ŸÑn–Tü'Êt•Ž-AMW#y¦—nmV²§ÀçÏrBß»3 ‰²×Mïh9.b>‚~Ë)bµ›V’Ùv ?áﯽï;[¾»ÛVßåù."“Tò]ÐüZ¾ ñúàÛHƒÎûîzÝX0ðæ¶ž.Íûè“D=`¤ §Ízζ; ?˜6S¬Ë¬W~»ëûÍ< FrWˆ½¡CE w*ܯpzÉDKßnzåùø‚¼­‡÷ôp•+—¸¡)E~ Mž9šë,…¦"4AÐ]uç׈ZÏ^ýš}š¶Ùy‰‚¾,l1³Ð±‰wgM7!ÉΑ,ˆKý¸HöDÙ”(Vž”†Þau\ÞNŽ#Övƒ¾¶Óö†Ñ¾˜üЯÇßÿ=Ïw2»MÖwwH=³¨ïÊ|—ËÚy'ß}„×wíù.ž[)졾»›(úì¶­î·÷˜w„\þ:*L¢ n8€”Xà[ÏÝü~Ë3ö’æ÷½Ê»2.î6òÐÐÝŸ!§æàq‘¡ŒŠ{wüð&.°‡J(ÜÚ¼Ê{–ÝzšL¨€²)4“ 4GønëÚƒß ž÷únÉ…óU“Y=Ö k[]Ž®šn< §'É“[Œž^jH'ûÄPÆEÖ ›ÔÞ>$Ð99G­€¶Ó;¬­6£ã< }Q¶ã½©þf⃿v滜ægõ]jãbù.ÂY«·ø5wZ}7a¾ %:Ëw©ZNæø‰lfû¾›]rpàêwÉåo!¢.ðBùâ½ÄÙx=så«u»­gkböJ»ÍÙ·\´ó#| DÕ Q7…e Œ‡r1á)?ì³ðÕº§ï#…,xdÆ(ðv6ѾÌÙÊHhRÿ!sùR¡‰ì–šˆT¯Ž;ô]ï‰ÉÙl<Ó]žsângƒo<’Ç-gˆÃo"'$‹àR?.˜Þ¿Lз&)z¿Gf·•¶Ñ‚íÖ·úÕÿvÊÿ¡°çàw óÝ÷©וïÍïÎw•¬Â|W8~Tšqÿí´ Ô~籟¾å#ÄJË †@¿.r¸‘w~3x擹M–ÒdŠ£u5è±á‚uoÂ&ð¬H%q?„XŽÿîø·rê ï5¿äÞ,>¥«Û6ÌåS3¹–Ý–¡‰h+4uB“»|ü|ò1;l,a´é<ÑÛîMò¸ÕËÚ4BÕ¬¨/gà ýÁú¥†t²Oô‡[¹w’ ”†M†Ù”5D$»¯}ÄZ»u§Ì=\üäÓû­W¾ËemÌ·ÅËw§SÕ¦tù.PÂõ´Ô@DSõÖÕ:ñÆç¿D.)RàÕ@¹Ž8Çö bY0Q£ïüªÇw¥çÏ"m_E^yMŸ>ïÜ [¦ Âñã#ÁÝ¢z èw÷xî ôɉT`Êp¢xvK.ßNhŠìV#4•\GWh²þCÙrN M$Ъå\)4q?T„&¹üû¿ÇÏ×üœ}r¦,ñôÑf3ôÝCMôYnqøMôès÷køÂÉ"¸ÔóòôK&õõñšÚÜ(öcÀÙççD›-E,Èçîƒê3îá9Oÿ8ó‰¦<¿-ßý’ÿÆrl E´*ß1<ŒõïRØCý»Îúg&Y[¢|—D…'l¥Ä õEæ´šžµïÌõïÂåjÜå|øD|BüÆ£nù¸ÍàØöQW4¯¸ßÈ{'úA R oMŽÿR|p œ´ð¥Z}wàӲ¹rùT7äC+ÊHh¶zË9)4ãš×Àå3³àç«Óÿ&9˜A¿Å4ïy>¥à7e‹z8{t©ñœÒ}‘¼©öyâ4I!%R_AŸ~æ¢Íçˆa´LÞÜá²»ç=ûÓ¬§~œþØo'?üw¾‹›;âZÑ¿ë™ïʱ%Tß%šŸIs!Zf4¿=ße4?êš®|—…=LGN‰ÚšÌÖ×wqèÒ›?C¤ØÁå㞎Ï8â7Æ= gõò ¯×m³‚¶}”ßÕá´ÇÝñùŒÇ˜ö(Yoæw !5ÿy›ÞkzÆ­bqPe8\>Ñ•$¡É³[»BÙ­ÞrΪñš6B“ä:Ìå3BŸ f;@– Š™„LŒÙzšc¢‰èYáЗƒÜ´…V ‹£ß eœ“‚KÿàPö°}‰öz–$õùý×êPaôçÚôc-fèÐo|Ú- žÿyÎ3?Í|ò‘ï²×wU¾»Yä»|L'ÏwQ¶DÅžòÝÉJÏìÈw©Oתïºó]öð߃bðãñ1ÍVæw\wÒ¬gFá†Ë?D¾ p(MœU|æy‡:«ø±ì¢Y4Á¥lWƒö×]½ý-xÙOÿˆpúã¿úÈo)”üp·ã~Û]FÜ—‰ƧXóŠ˜ÅËh´Rš¬AµœSÿaŠ„&>Î'>긻¿R²Aò´+¶C?1µÏÛµtý¦GU+Ö³ôhNé™ÁØ`ôÝ}‰ú&\“­èÖ LFêóéQ±VÓÄPNæõ zl[üâ/óŸý?9å»<ìaù.‚lÒ3;ê»|l‰+ßcKœù®ÖÆ¥ò]ÈÚ´ú®#ß…â~ˆýx¬$ÙhYý~Û.\ÿ–rù¸;šø´€)->üÜ'~Ýï²} EŠ¿Î;ÁÊ)*¾`þ“K_üeÑ ¿,xî繇šýE€¸· û'Çß÷ƒf=×á"ÇX\ôq ŸÊ(³ÛRš½Mªô‘Ë·šŸ)…¦"4a¸ØäÊÝ1¸(Ûruf—ñ ¯¨}mj¹˜HåªjaKô›¢ ë5N À¥p ÒÞ62Í©ÔO­ž% ßv†Z4Dý\6Î{ú‡…Ïÿ‚Ÿ¼Ä| ƒÊwq;–õÝ7h^Ïwil‰èߥž Þ¿ËÛ¸„žù¹a¯ï"Dvä»Tš!š‚MÁÆ|‹;\°ïšÛ?W.î3?¦ëÒ—·üÈïW¾ö‡™÷~޶߆”ÐI›0èê;–<÷ãu¯þaù+¿_òÒï`xÜO` 8xÓ‹7¾U¿ÏÎ+9—‰5\>4‚äbŽ6¡ –I'4Éå?úÔ ox]L$ÏꬫÐwWµôUU+qA×çK/=šSz¦/Pdƒ>†«8ºÑ“,å²z+²ìÍè8W@ŸnÙý)…_Hâù.~o4a¾+Ç–°ú®Êw!Ì,k¾‹°‡ç»<ìi±škQh°LÝE™–œðдG~Í]>`нì•߸«^ÿãõoýé†wþ¦SŽ-±å»²‹ë™“Íw‰ŸfÒsê4es‘j¶]5tåKÊ寀Ëý€/@¼þÝ?oüà/ßûÓÐ9dæLwê·\2iÏ;›?üëÆ÷ÿ‚§¬}ûO«ßø#îÊñÏ~â·Ç=Ñ€FÙ¯á.ŸdÞl-¹|™Ýê„&æÒ•¡‰"Ÿ¡™˜ÐÄmInS}'=¦C?Úr…Ü©A_Œ­MIË zµBY–Í©==œ;¢ôз«¸×Ïî½Áý‹ox Žs)ÝîF á•ï~e-A}—ç»r-?-aù.:QT¾ËÆ–0=3{ kK”ïî4¿žïRØÃjò|YZ½Å|˜jº-úo·ïcîòܵoýipÿþ_¶|ø×mŸümÇg_÷ÚÏ/»5dßî7ýò¥OîÀ>ýûÖÿôoxÿ/ëÞù3î¸opÇÑÊ‹Z_‡w¡yGõÄà¾o†»üÒš|JE–sÜ<¹”•ÏÐLDh‚ï’„&2~ܤ¡že‡þ¼øÐçZ>‚³d‚~ Ú75ì–ñÑ¡ÌÓJ€¾{‰}ƒðpèç¼9ÖJ¬Œ–>mþaüðˆ˜µ|WÒü™¬å»àÔlý»Ž1¤g~ u}L§¦gN˜ïbJ!dml¤0£ù©¾Ëi~=ßåa˜Ÿ?+-¯¸÷°ý žú wùÞû˦þ @Ö7~ñ]_þsÏWÿ\öè¯Úö¾î?ÊUû·¾ûüã®/ÿ±óó¿oÿôo[>úë¦,Ç?qÿÇÍûms_øP^^=äª'¾Z¯¼ MXLÍÐL‰Ð„ò ‰8rx+ø¬¦gïcýæªD5Ó }·Œ'EèûÃÍËæÔžHï\ÎÐ?éÖXËÅâÆÍ ªÜîøðyÎ|÷~©gæcKöˆú.ÏwÕZ ä»|-EÂ|WŽ-á£öö𓚞¹¤|a›!Ì'ÇçÑjËì:sÏ›óøÚ7ÿ¨\þÎÏþpâ·|ó?·}÷¯}ßÿ{Úî7×þ¹õ»íýæðŸnúâxØ6îøßû˒ÿí}é¾4ZÞ1‹’«ZpùrV—Ên“"4ùÜé„ M TK’Є’É™Dÿáí$×A‰CšHÌÈå?G4Wa¿úœÚo3Tâz¬_fèûü™©a·ŒöëTôçèÐowÉ]H6 nöÌwQБý»Žú®}L'«ïÒZ –ï:ÆtÚÇ–ðú.µqÑ8r»žYìϱç»ÔoÊóÝzl0&d`[VÃBΛZ¯Íòñ7½¥\þî_ýîoÿõ¿üö?wü@þBèÿö_7ý?¸'Üøù?¶ò·ïþé¼ÙfÖšÃÚA‹Éås¥ _/³ÛŠ!4X34…BӃЄŒ·œ[„&«o€ÐDv ^ÞjÁ³?²i²ªãvm¬}9{ýHZÑò_0­&ü}i\âY ‰ž“n¶ž¡C¿Á)7¯ïÏ—‘/–”ï²±%7±12ßUkÝk)æ»÷yå»,ìazfG}×ï2Ç? ½lhá§)i; ÞºìÉoáÑÉåû?:à~çÿ{÷Ïÿ{÷Oÿ{çÿ»ÿ7ÿÆyÀ©ÀÙ@P4þÆ7ë´\Bj>Û”\¾œÃŽª¹•ÝÚ M!×q(4Y3J9)4©_GShÆ#4‘Ý"݇˟zèkô3:Ï-ßX?œsÉQ>½]$ÿšò…>Tû:ôsºoÃMÙ‚fÊw)ìù.Ò3óúî¤^Lïò5ŒÈwùZŠDùîÐõ]G¾+‹óqò]±Ñã±è&2!-}âécîÚöþŸàÝáòáìúƒ¿û¿{ùï]?ý/wü„V<ùM‡›h1†¹cf<\> }™#]>4‚%šR®S M–ݪ¥@Iš`äÀË-{ùw×ìýÈý¬îËË—á f ¨臲ÏN úîj®Æë#Ìè0K‡>üëŠ×š¯Ä|—-áù.:•<×0zä»4œ÷ï:òÝ{ùdmQßù.Ôü2ßÕdmª¾ëÈwá°YØÇ? ë˜ÔæÕ,uýó·}û/`ˆ¿ç—ÿÞóóáþ÷ÿæ?;>üã‘Âläž@­Ù€GN´¢¯Þ(BÓk ZI M"4×'Eh"»å.*ÂÔK6¼á€~vŸ ^ÐË0<ñxý@¤U%@?í. _Õ\@?ó„…:ô1»aöƒ_!áÉÍó]8¸[}W从±%Ÿ8ò]} £Vßek)hâ$':滼 £SP±ô̵éõ]|—…=püØk9Ž3úúo@„ÇÐãºã·ÿÙøÚ93ðŸhaY[b9ÚÿóXvK„æÂ¤M¹VÌRhŠZËy™M–Ýò)#¬åœg·\¡©ÍE/þ‚¿×‹ž·CÿúÜ“Ð)r%(i%_Íõr*úþP}}¾«¬üZY½lä& ?ö–‘#‚$ùî«2ßÍ/ë»ÔÆÅò]>¦Ó®g޳–"™|WŽ-‰ŸïnÖë»2ßÍ/ó]´Pð|—Â8~!æ©Ù` Îÿ‹øgÅã_Ñ©à ã¬Uv —_.„¦X2à¨fÍÐär$ MÜcu…¦ƒÐD)µðýPÏi.ãé[/õÚEgÉ×RÖðÔœQ ¸§·ô…5èÇ-'«Üd“v8¼þeë_Žz‚~+ß}1A}—é´ò]¾†õ]Ï5Œö|W-‘c:=ê»^ù.Ñü¼ÿˆ—õ]™ïÎTù.-4Œôoùö_Èkùf4?ÛÈP‡¹|+»•DׄWBåg0¸Qw¼ü^ú±Ösiú †ØÖ0&3”Á®Ü”«YÂy9n-ñ©ŠŽS3–˨קƹA·e´^%'—`XÕæÓçÙ‡:(ªBî|—dm,ßE¨G¾›äF>mX_KAcKx¾+ÆtÚûwË”ïâ5̽ù«ÿÙûõÿ€ÒÁNsÉ#_²µÄÌåóìöèš´ò–-JHhòN„&ØpTÎ{çÏN»•CŸ8ˆÖ3½ /WO§®×f®$¯_£F(çüãÅSêÒâеZ` íé²¹÷µ‚ïC•Ng¾û×3;껎1”ï&³†‘­¥`ù®ZK!ÇtÚó]6¶„öõÆÏw¥¬ ËßÍ¢Ó–ïÕŸ‹Ú¾¿Àå/zè –ÝÂåk„¦Z,i#4•\‡)4 ¡ Ú€/bÕ¸B“ÚÓàq”BSš¨¾ƒ“3±þÝ¿äöØNK¡©É“UsÛΰֺ·®§Þ¥HkWiÐÆz‰å‡eëÍU[oc­géÐo}ápŠ`ÄQåñÌwQ=ý»ñò]ÐüZ}WÓéÌwåZŠ”ó]ÑÆÅF =³#ßEûžd¾[Ôp3îfü‚xaÁ_$ 4Å‚&M¡É•­ºB3BeìKب]Úr®÷Ê-穚Ènáòq‹¾î¥ŸÔYý޳µÍ»¥êÍÕVx¾`A¥Aßn¬íý,i ÜdŽŠwQÈ›¤_åÃaÝJÔ¾-ãÁµìBX¼ŽÿsÒuÅÍwÕØtjkùnéÖ0:×RØÆt²PU-¡¥ Ð3§–ïÖl¸!3ä:¸ð÷y÷ž¡ÉFz•¨ÐÕØ ÍÕ\„&f²-ç¢å<%B“w)pB“D{P.½ÿ—Ù}mK[!°;a!et`ŠÙ¸»8c7“žÈPkV¬ÍJú(ùüé)@Ú/*èºæðhÐÏh?S´‰†Æ­»¿ø;bD”ï"ì‘ù.r)hÔ¹‡þÝÇeÿ®¥gÖò]µ†3(=ó]k-×3»ò]5¶„úwÙ˜N °Õw7‰pÖ‘ïÖe{^Qßåa«ï5^€;¾‹¸>üë샟BSmˆK°X@m9·š´òVWhzš¼ÙMh"»Ülì­Iè£K‹ž¬ž«„€Ç}xÔçð„óG$ÓŠy`¤hrÙ§¯ ñ&¨ýNsíÐßrë?ƒ~¯|÷¸žï²±%"ßÅçFMÏì¹–Bl×)M¾+Ç–p…¯ïò6.MϬê»Eá㦮â{>£Vj„&¿sj-ç4PÍ>C³¼ MHeUËyúëe^· ÏFæçôß^²lÓüÈÑ=¶9ãØÈ"öN‡²†T ¢“~ÕpîE úLV¥¯ åÝ¢Ž•*în­=—ªZÝ—Iè‹Þê æE~žïò°ÇVßuä»|lÉg¾[ú5ŒŽµèßU²¶Rå»EMˆ†Õ5ãîÏ*–ÐäûùR  Íål¸4¶œkÕ<š<»}„ú•BSšpù¸§!œ;cÁ³¨Ì™7A•'©ŸL‹–ÚI!—Ncmú‚@z§¤AZ1 fôÐר•`Ò²}(\ Ý4‡+X¨Ç”&ÉL¸õ”ýÁ‹|÷S|x¾ËÇt²ù̉×RÐÜmµ–‚ïØaý»qÖRxê™õ]5¶DËw‰ægzf4P3Y\{Q³%Hð Ÿzç'R®“ŒB“/Ÿ,EË9[‰•·ã^d-ç2»µš|ë-çPh&Ohâ0Ã1Á=ÁIõ÷^ʵ^XZRß{{®?T«bô«ú#ÍÝ{Ò“™¯ïžBE™îÀ›3Úȉ”lvÑ»HåB²^+ßý N}×1¦S[ÈyUÖF ÖÇtBÏlÓI=Ö0&Èw±ç»jl ­JD§£¾[\Ô|)hôÝò ÕŸÉ> ÍJ"4¡ðƒAàòÙ@µXÿa²„&²[Eh"Cýqû§)×ö¢;íõ,Þ) ³ÉëYµæÖð’iÅ<ÐÈ,yshI[Ut’'£õ2ß¶„å»4¦Sæ»%­a´å»|-òÝä×0 O&ôÌÔÆÅh >¦Ó;ß-j³¡.i¸ð—kö~H¢ü’šIšÎ•·I+47„¤ˆ–±šL®ãEhRÿáÏJ¡©MŒœ€ËG\ºàÞŸ%‡µY›Ùm)¯²6l‹GöæúCuSiÅ<<Öš _ÚméjÔ8—3dt(¶ë77ßüÅß}G¾‹°óm`÷5èßuè™=×RìÆòÚ;b廫JÊwÝkÏóXè­¥på»¶6.Ò3úàõ ‡DçC² M6.\,Rý‡ö¥@e 4Ñêél9OŽÐäM˜ $ÀËÙäÊmÖf÷Z'ë¸. C<õŽš¶ÉG0 6œ_ê,§øª¾@nÉ™.›¤I”%¯éêrôhá~fçô)Ü_ûò€>.´5%ÎwÅØ–ïb˜s #å»ÔÆ…Sjã¢Ek,ß•k)øbMžïZk)×wKÓi×3×]XØn5qŒ×?Œ¸éý’ZΓ%4ÙÊ[ˆòÕR )×)‰Ð¤½IbË9mŽ„&¤NÓ¤]-çJ¡I„æ‚ÐDv‹ ‰aëŽØ„k­¯Ï°+Q ¯º×ùtN~Ãä,ôµË‘ÂkSDhE><­VqR™®caºšE¥¶²º¯´Æè19ÜCŸsèó|—‡=¶ú.ÏwcKD}7é5Œèß-ÍÆýjlIü|w^ß-j¿™"ªê¾ó}Ö¨·œÇShª اZÎåÊÛ ±!"Ù-ç 41˜Ú‹ÐüܥФ)ê|†¦ê?ô$4!ÆÆOBâô9OÉqá|Ðì2·L_³\[´Ô G—Æ^P‘$”snEb9Å×ç/YÎp…(M‡dÓÆ³ûn•ÐáþèßVЧ|÷G|Þx¾ËÇ–ØôÌI¬aä{•=ò]çZŠG’XKQB¾[Øáz íЯËw¼§úõšŒæ*gBÙmR M¬á.ßê?¤)#NB“ä:¡‰y "îüá?=F²Í i9G ôi‘#©¾1Ãëÿ±¡kî¾DmUº%aÆz¤ÏŠ|x0ëdïš®ZŠÈ%‡ø-É‘Ëéb³µT‹Sœ±V«ô˜ç‚eÏ+è[ùî÷qê»^ù._á¹µ†q{…¯atå»bLgaǵhfÕ¯K·½«ÍÐL‰Ð,iå-šlÿaéMØ/J†ÐD¹.÷dÜ™›Ÿu›mòT«V´c­Ð¢.gâÄxBL³Èµ=BèÇ©ã†V$–S|í@z{wMWíŘ>‚²#ÜWNm‹(§8£-U¸OGeÀ„‡uèS¾K4?«ïBÖ†6.–ïR—ÊwùZ ôïÆÍwkÖw“ZÃhÓ3»ë»2ß-ì¼ýÄtb×}ß]¼ù^ÃrÎдöÀÙ7D”ŽÐä+oK"4Ù¦0«å´Ba\š÷ká“yQœ cÁó°5—Ô¹BR¶¬î”ê[å¦ìûÀ }žï‚E¶ôÌ|l úwù˜ÎWôµ”ï–°†‘ê»e[ÃÇ_R}· ûVÔŒôkȪ7ä†m)P\…fM¾òVÍÐäÙí®Ïu…&M¾òÖIh²j¼å\)4uBSý@'MzXДäò‘ÞÌ×u;è«fÜxE\íØõ  #…“JÍ Ž/@cǹ‹f“,%Ö"qÌcÛ¤kíOÏö…ðE°Œºâ†W<¡¯ç»(%ò|—‡=õÝÇxÿ®£¾+ÖR êõZÃèïZki^Uâ5Œlº˜5¦s]aÏmÐSpê:ùº7¬¥@ñÍ“Ý ÍP_+t*4±òö…úã_BË9)4“&4Ñͬfh¦Dh"»å„¦ú:^|‡ÜÍVî5›!]¾­’å.koÆué­pîÐ ‡qéÞ œ?Ò#æñæyìµ-5ž„ö¼’ã5ã1¨çŸ1ë‰xÐO2ßåk1D ¤5Œ S Ïw+b cAÏmPÑ!Ð’×§ƒW¼ÆÚ2Õ–sÕÈ¢|4¯ñ–óò&4ñ1’PhRvËghr…&ï?ä MEhê¿N½72ñ§çWE[L‰Oç;*YbK®hÆuE;ÁX¿Ò!³ÂŸÊ:Ãóxò<ÎÚ–G²mZÌ¿hlï1âžxЧ°G滘ægå»ïÉùÌ%å»j ãéúƵ†± ÷¬ÝÔ¯K_‹³åœšƒ ×ËךçÂê;áò¹B“Ígm-çqMô*@º'6DÄShzš˜yš€Ð´DV?þ'4Aϳ²TË©qè|máŠuT•,ÁíP£O­ù膭p—î é'ÐØ+æñJ¥Ïhð øE²m6URC”ì6²'ô=ò]Ó©­¥`ùn k¯11ÏwÕFêß,ò]k #¦¸†± ÏNœ1lQ׉‹_å[²¡}H²åœ)4Ev‹6bGv«·œƒÐĨ]'¡ÉWÞ&Th‚Ð仯ù MO…¦"4Õ¯³óƒ?jÒËUTØi;ÃêÉB‘ÛFç;t;,Çã£\ô¶,Æí µÿh¯ÍJþ @ìÿ`óàãIìz›†Yg9Ù˜†hó)z9,·óFNœ% {¬|÷Ÿ(1ÚÆtÚò]5ŒÈó<Ö0jzf^ß-ÓFžÞ°¥ ïð»hãþÞwá±åÜš¡™¡ùŒpùc_Krîò美s+šIš´ò¶D…¦‹ÐT¿ËuO§¹|ª^gt˜Ç+¸ÞRÍøº·)œš<ú#}¡´šrëKvÕøåD¿HvUe—¬ÕTñH_ËyË—Ô°’àRzfžïª1ðX%¬a¼Ýc #ê»´}Úªï&^Ãø(t"ßUkOõ^ÃXÐï&,)ѯÞóh Múú%ÍÐô 4‘݂Ŕ5PÍ›ÐÜbßr~û¯(»M’ÐüD´œ+BSÏnùO3}ÿ‡Rm/üwf—ëD®UÁuìǵ§@_ô¦P´S9k³’?C‘¼Ñ2摎ßÑ­ËÃwFØ‹ÄNH(©ÇÚε}Ùà»N6¬ÄC?JèBÏì¨ï&\ÃHóªîàóªâ¬¥Ðò]µ†ÑVßÅöišÏühzfªïôßs¥_=æ¾"ÚwŽ"¡‰þClFuª¥Bh"¡R M÷o1bý¥Dà]&Y½¶:]¾G×+Á•º¾‘;˜10yVÂ#CYgk1mÛŠ&äd¼®fs9þŒŽrE&ŠÁÌñÏ»ï³Ä^_å»DóË|ca°†‘ö%½†õ]5Œ ßì0ï ´q‰±%¨ïŽÕê»ÃE}!8Ädbÿ.¶qyÕw}ÜOpaç.ü¥Ûì—©°Í=—ñYý‡Ž–ó¤ ÍoŠ-ç²å‘rŒ³·‹–sÔÔˆÐÔVÞ&˜¡ ¾XµœC¡é&4ÕOsÖì'¬«&+Ò/ˆïò™^­ä—Í-­9¯rÖf%†‚éÝå>]EðkÉ®«²+?ÂÌË[ YÝn[2åd‡1Ûß(úÉä»e\漄5Œ–°†1àÍ}V¾«_]Š_ÊêšÐ<»ÜšÉšÈn]„&íýõ$4ÕOÓkÄÝ䪸Ô£(Íðvùš:_Ó«ÅMpѶ>ØäqX ô‡Ðp¾ßØ#ÙU•]åø× IÓñïˆ6´9þ ?S"ôñ6¶ä?|l ¶68óÝ#z}×#ß-ÍÆ‘©­a,8i/zô«ÓÌ—4—_fBsîë˜ËÕÖÐ@5B“6D°=pú†¹å…p(4‰Ð|ÏK¡Ir«†¥ÿ.͇ìÖYšôÆ“ì:MåÇqù¬‚+fkb+f6bCàT0½МÚ[úÒøHm¹¢½²«Ïça2æxŽ?½Á,Ýñ¸öP2ЧúîÏ¢בïò5Œ`ëJXøGÔwã­a´ôÌ4¦Sì#J~ cÁ [0õI¿:L1Þ Íü3ïÊ'—â¨*Khê¿K^§uÊåS/yÓ ²QëJq»|ÓÔ:ЧIËiÂ9ÃRÃa¥<:’7–­zeŽÝÖN–Óíø¥–S9þn[Ó^©9·”2÷E™ úµ|÷_ú|fçFVßÅÄ`Ú>-×0"ß-a #Ó3«|£[™¬ÍsL'YîÍ?ón¶w¿šÏœ?øVÌ<Ó¯¶S^`‹6¡y[-çÏàM©†¥šHE¼M¾ò–ÏÐä Í_iK„\ã!Jh9—Ù­Rh:~‹ƒ¿ü÷Šë_²óKçG[MvpùB×éŽò-—/Ôù<Áœ‚±A•æÔÞ4”y.-¶OÙñ ´ùxzm¼e8ïþsbô[ù.[’ÄF„¼kIÏüñɶµ¬¾+Ç– ¾ ðɵl>3mŸ~´ÐZÃxoþYwc0 ZØÊ>Ü7ô«åÄçE‡mUrmˆ€lý‡³•·- v{•pùq[ιBs­Ür.šÞ„æcöš^ M"4¿-çnË/⛺}¶’HUËfBqÉãu¸¾¡/®98£ýj×ô$vâ»| *õ*omVò§Èj‚Ï*?—1»µœ6ªgm¬Íu¡‚Ž±Ñ¾`^¤æX* ë PFtÖì±eÁƒ_$F¿>¦ùn)Ö0"<€¦¡Í«ZÇôÌ+å¼*>¦ÓQßu¯aD×ìyöèkóO½Ù‚~5ÿ\©Í M/BDmÅš0ò°Õ/f¶c›ƒõ‰QLdÎ;¿†/¨#ÇÌŠÔ»4£íZVöR\¾$vx”¯•±(v ½Èq}É#°Ò‰fšœ¬ã_©s‘/˜áýq}ÁPîYÚF^[§ï…Kž½ûÇÿ$ªïª|7áFÚGÄõÌñÖ02=3:úx}—¯¥h?—h~çÆ«Ù6.rüyÔw‰æßW0䄨¨«ÉØgÅ i]¡)³ÛR´œãsÂåãf…4âHB“¯¼Õfh>ü|q›¬÷:šq Í=Ÿýå„ËîÔAl‰ìëÏĺă ?½~z£ ¶± ]~(ûŠJCsªoΟŒãO«?ÆŸ–hn¨?½N´õÔX«é Úz¾äª¢Co¿ñÃ?%®ï¢þ‚5Œ”ï&^ÃhÏwÑCÈó]k 㺅žÙs-E¢|×6¦3ÿ´ÐéWÃ1‡-…æ—B“ª=B¡Ž®Ðû"Æâ6žü Ξ’ëMBsÉ£_Õî³Ýs€BzÙ—¤5¼ÄŒÅGn£çz‰Õd”Ï]~þì`ì”TXie^Øñ§7˜Èèàóá>Öàb^ã;Š#’í¡.ÕÃUÔsÛ\m2¡ãx¬¥øÐc #ÍgN¼†q‹Ó Ç﹆ÑYßu­a”ùnþéw"1Õ¯ú×–¢üý ƒ¡yo2„f3m)Ph^go9ç Í=ΚèVÃø7Œ¤¦jJ¡)WÞºghê MÐ —¬|!³ƒ½+‡c¦7™˜Õ}³èÎé´&\Ô¿†Ï÷‡ö‡Cy'G±‰‹¶FDAìÀbG ’*•†rÏ7¦÷ÁÞ(Ëñ×Ò"þúóC9ëãOÊõùÃý3:¬¶¦Òò mÑf…°Ç%=oÑaÏàGæ»r-EùnÒkmù.º¢´|÷°W¾{ç»ùgÜ…GêWÝ‘ÏPvëž¡9Ô1C3¡ù†K¡éAhB®#·œ§LhBÈ•³»>ùsg9ÞrËűÖÓµ‰‚‚ȵšÈl™ÐÍåD /¦(<¸Ð' b@òjV-|'ø4þPsÚ“?KFü¢¸λÀÈJðÄ@F«h‹ÙÎú.ïáú{Ýk7+½ébÛxÐìu½Ý…ûw¼ÿGwðã^K=s k–°†Ñ™ïδë™Ýù®¶†óô«ÖUO‹ äòï†ËGrÌjXR¡9Üj9çý‡`–’QhbäwùhÃO¤Ð|å÷b)[yËå:nBsÁC¿ªÕw‡×dÌëÒ›gvYii„(ߪݦ5¼ÚÎO„™H£HÑ«|[4—»üH.rÜÊ^›•üÉóù³"¹3¥ã§â.zýáz‰¾y¸0­þÕ$fR£9…¢“ªHØ#ÐßûÆÌ®kқδfœhsÝ {oŸu¯‡Êͪïò|7áFä»%¬a´ç»XËÃó]m ãsXÓ/ßÓR”~Õ¼ò)çÊÛ2šÈn©†•:¡‰Fz˹NhÞýÓ.\þ<ÍKåÔ¤cFZ³IÙ½¶1Üc¶”hFa­·ŒÈçµ[<«õêpÑ>‚±¾@´K¤hçò™Ë/g^™<ðªÄ#ÃÙ°$§6œ7)–0¬÷§… ÏÀÈ m4'«ïŠÁ´Ö¸6§ n轟¼u]ÜÀogÍÆ1²J­¥@¾k­a|¿¤5ŒwCcKìkiÑú²å»ç¤ê¯v!u-R Mmåí5h9çÙ­ÖrÎå:ËÞÁˆ/"¹ÍI)4±‘`sùj ¹|¹!‚+4w|ðÇŽ—ÜÉpïÞD›.Å}˜:Qø`)9Ðpßr5ÍYèCº#rC¸÷dÃòõ_iÔl)}~2ë¾ \˜8÷ó›øü‰2„*õä?„/Î*D Î.Í…{ý²‰QCN_êfC{ìèGtÆœ§Tð“` #Í«âzæTÖ0"ÀÀرÈZÃÈæ3ƒæ·†ñ‚Ct+Ð.(8¡)³[«å‚Pç@µ2š•$¡¹îµ_Ú]t‡[uƒl´åÒŒs´Ñ:,Ô‘¸÷ñ•Léø-"_(4ç3Ot}“ÇRõy¤/ÌèŸVkŽ[Ñ)›wå½Kúí)/[AGs{2:ͶXjo}z¸Öçïßòöï¸û/a #Ó3ó5Œ(s–q #âòZ×<¯ò]ö°þÝ  ú”v¡bEãÂÏ9H.Ÿ͇Ñî(kXR®ãTh¾Ñ™VÞ²¥@¢åœšŸè MÞ—Á[| Z\…æGbË9ªMÞÿq‚/µY´Å¬¬k¸×S[¹' ñùb,àžËÔäl)È!!l]}pœâ'õGÚF &².]Ø#%:ö0=3Ÿ<¥÷ïZA¿=å³ ú³z®¶`ƒù­61×ÁÏ”ýú Ö0Ò|æÄkíùniÖ0¢÷â‡H˜}›~]üpùšX‘]:Bsç'2çi±áÇ¥²Äð÷œ~Ô?©æêèm(öÔV&Äbh8›2¢Æ òÙR‚È·j·áœË}ÁêCá'ƒ_°V(ërg}—z¸dó®öèA¿±žòÊ>F‹ð‘¾?§ß. (Ïh0ÕÃse:3§?yà×ÿŠ›ïÒ˜Î? ö]„°çÙŸy¾›ÂÆ¥oÓöi–ïª5Œñò]ZA×#ìz0mˆˆGhŽyÁ©ÐdÙ-m9— M’ë¸ M.×Q-ç^ Mš(qðš×½ðC«óxâ>Öjî«bP¸\¡Q:² ÅJmÅÄp9ƒMŠ™ù€M¦Æˆ|U»¡YŒêóU½™²ÉÝñ¨M$göú®SÏìôË&Fk*?˜æ4ñÝ£jÝ#¶®Ÿ¸'³Ë¢X«%ÖÐqlè‰-ν}ã¿ð|·„5ŒÏüD²6±†ñ;Ä <ßE77|*Ígvä»|l‰m cÜ|—jUú…(5,5Pm˜'¡ùŠ5CSšÈ4JGhâ„;ÍÑ{Þǽ‘vû¸˜™XËY¸£&…{[j+GŒ¸B|§fAŠòyí¡pÖ”†J¶ªöÌ¡–Š×w#LÊï{Ø2)»…®)i¶XK‘òZ.<1ú1Ð=†­D<éæü^Û'ÜòAâ5ŒÈwKXÃ(ô̶µq×0:òÝKÊm´ÍÞKžC'wù»áfB7'¡I"JPhòìÖS¡¹þ?4íq®(ÜsI}›ëqÍ9‘-·tÇ9úÀd½å<Bó¹HSh¢ü,VÞü M"4÷Vhßöv~/9.ÅA[´žÌÊê½Ñ†{âïµ’­ØûÉT:Þ¸w§¶V'ŠñÑÀmif…³®>6âá Ô ggaÏlöèMŒõ—ˆ®>•Ÿ×¹tÂGM­J€~Yí¢¾'†þì>[b­Š9úµ2MþÉë±mÔÎw0[FôïZk)(ß%šŸå»j £èß=À껎1´–Â{ cÐüb^«ï^þ8 YЯsîµúI”¯š|åíô#¬åœšo» Mt“©–ódÍë^ù¥ï„GœAWÚ€‹l;ö Àß÷ÃÎÃݲnå‰{»J‡ù{VµuážR[66YŒ±únI¦–7+”yqÕÚ š¤GOþa>v8{$%4¶ ŸÍ«R³â>Ú̶ÄègJÚÀÞý„nÆÏI¼'G¿] ÔoÂÃ[?ø3„+¥XÈ|ãÂmõ]ÇÆiG®Øê»W¾†õÝ%˜NÎê»qÖ0~6.ֿ뽆‘úwIÏ|D_ÃHb5t©k„ÊΖóò&41sß…‹‹nx-·Çv ¸|>KjqoÌî³Ù ÷L§à¨[ÅýP+ت¶‹¿OÊç#Fàþ »£ª#¶\?_ ˜q&ëeÑf7X ìˆ|Øž¤ÑOŒ'Ð/j½\ç×sY¤'?}·F[Í´‚îþ™::·û¶Ë7¼¾í“„k™žL9ørŒ²)ÍÆkž/ñfqêšW ã¡þC{FF X*4“&4oþÂ=C#†f<ÎVÞ>KrÏüØýšè¥(gσœëYs³'î…“ésJð÷:îuJGV¯ôÔ–É’‹kG¹¬j¿X0ÚOïä’³ ù*.úiõ´Û÷c `<Å6RIùÃQéèÁEÿ{°ìÚqO÷ßóšÖ¾þ{tèy¬aļªGå¼*Ï5Œ›>¢±%,ßUki^Uñk´–B®a,ñ ­šÓ®¼Óï€x“mˆ@”Ÿ<¡ù±«åükªa¤=pªÿšãîø¼Á©{í´½ ²d€ú8Á½÷ÚíBÄ÷ pφ,¸RÛ©þPêЊüth»„2Û–ò ÂGWh#ûíè·ñý|f­½àe ~Hí#˜Ÿ®Ëc­¹Ü?i¤ëŸ¼gæ¡_%³†ñʸù®ÇFd«öŒ}ø¦ÝXÚ•wÚGË9ß‘TËù®ÏÀ´’Ëg34= ͳW¼œÓ}« ÍI]!1ë8‰µœ  „àÞáï…Yžž×&‹{ÑyΉYFëT$økøC"ù¬1‡ l“U^Ò8XkD>.ÞÆ ýöà¹ï‰{²ûl‹µœ!’=ýí´)»ëÖ V½LŽÿÍ?^ÇÆtÂqÂ}ZcKœk?g4?å»j #TTߥ±%¶5ŒµFÎ=éýBŸJ"Bsþ¶–óTÍ|ßéÊû$èåä31j î~ÄäÚ^*s(©•Á=j&”Ô²8Ç&)>Ç{5Y„ÕÑ)V½ çŒðù㌟©P¨UÁ÷ #ùã=éÎЯî„~ú+½ƒåþÁüXî?Ön&•½ ùQì§|.W\úü$k“ù®ZÃHûwïcý»Þk)>ÀôÌŽ5ŒÈwöÔ¹æYŒÑ/?åFhÊ•·Ph^uóÇuíf¤»ôðÓ-!é'Ðëå*“csö®ôÀÆcJ52_v«Ôi^¸e M4”  ¢³¢?Ü@8÷j…~ðBØÏ÷;ø~»ÛfRŸxÁÈ}ù“ÙuE¬åÍý[h7M8ðä.èâ#=³cL'ËwÁ£ó|÷8þŸÒFÌ«ºÏ«òXÃXoô³sy'îAO:ËnŸ+¡å|Í{è?ô"4ÙÊ[})Ðc?œ:ÿ¹ì.ö\–ÀJ¼{´%öºmÑ@¿KuZYŠ4¯¤V´\ñÞ\1> ]ã*|G^ëÆ=¦Æf Û°:ÌQ«h¸;_ßg_¤)|’@¿ZOdóÙki~do»E}2÷ÂMŸmÑ–|Jò¿®Þãh#ªZ½Ÿ/”9$Uô“ÊMG­*Z1½ã=ݹ/ooçÜ¿ˆ‹X«•ÖKiÇ©ý%wÎyü7¢¾û4«ï>ò {~Çi~õ]>¦Óµ†±ñ8ÌUÆ[[â~¡‰j †Ä†ˆeï…&ß¡ZνÍK·½W«ßN–Ȫ4TUXdž°Œ©qTX/´ ‚¶×;­<9P=¸çú4U;êVÞñ}±?ÒªZá°’>l0ÚÓ ýãi)øN'íc•lEc»ü8£ÿ Ç”€ÌVD›Ï³ÊgZP³ÏŽ‘{>,)ßµ­¥ÀàK8~ÇÆ&ž'âU»rúï…ËǨ~§Bs‘½åœš„&R"4}?`ÆÓLCÆnY¦’~‰¶˜šÝ{‹¥BÙ鬣@ŽÌh5go¿uH2Gâ^ ÙTõZ/ÜG ¦øC‰æÐTʪêÛ"­Ó gqm³ÆùÈ]¼\é TnñЉ&Šõ÷tÿzüc€ìÞۢͩÙWí~’Ù~ýɳŸžø'•ïBYB¾ šßžï6›ø%ßü2G‹Dmˆð&4¯·/Úõ&Dè„æÕ·Ñâ¼ýñ–ofœcËë `µyzè“röº8Ç•Ôr‚’,ù{*ÙFò¯­ê;°ªà€«ˆLu1žNôÛ„nˆ>ã?|® sÿDþhÍ.䀹ö bmfÆZ,çÀzMvhuÞíSîÿ†Æt¢×¹–âK[Âò]µ†‘òÝë¬|·åä]h]H6ÄÊ[ÕrîEhbÁúcÔ M¥Ð<ï†7 {ns¸y Ä17¡ù¼Ì.ËE?¡ÃÓC˜`½M–ÇÙÛ“Z]Ÿc«× ©B8w¸ÏŸ^¡U >’/Ék¡ßªviOòü0÷/oùcc?µÀr€Ì®‹6›MH :TLDÄn…=¶ ÛòŽW¾«-Qù. {x}m\­§¼È (uåôÝu§§BOÄxçÁëD˹C¡‰V¯ f:Ý<¢p¶Ã°Ùä¬^[{col ×µ vFHEM¼be÷ŒÌñÐ¥©z-ùûPöyÇÁœ…ŠizÆ­¬’ª ÉSOPËhò+І»•¨XLï zÆÙ3ͽ—³ç dÏ ‡ëù˜Xîƒ'U$(ŽŸ×Æ‚‰ìó=ÐÏ)Ýdèï ~4±'‘•šbY¦¿ÿc•ˆ((ÖfF´Évx uš¾wô_jk)¾† €õïz¯aD}·ýŒ—ˆ~Ñ®œ^;шMåëÕøR [ËùîÏùR !Ë䟰I:c…xð-+Ó›ÎÎì¼\€œšh…7ÊÓ[Âc&Ôæì%sïr8ye¼»­'5çÒã.•8~0[žß4˜1ÈŽ~¶›QݘÈÙ¦ô´»'õ)%û €pË£ ¥¹.½q1ÝèE<-VçuÞpÁõ¯ó|u¥8õ]kLgÇâ—).×®œž;ÐrN"’ 4/½å‹.#ˆµbp>žσô¦“²zlÑܼŠ&JTnÐËB¯Î ñ; wöŠÁt9ŠÌácÁùvÛÂþpÓòüÕÍkq ÒOH+šÃÖ’b’/x)™§D¿C꬇éDö9 <°3 4¨¼ tßm:Q0vx+ƒž£{ðÛkQßíÏòÝγ^9ÏZ_ŸÓc›Õr—ÐüŒz6Ð`Ð.ºó¡Î8uŽHrÆ‹c­¦ÑA%m=Cž“ôZl£Ø+¦Wž^ç.µÇ™Ñz09(º‡2Ï<>Új«ü#áœËœ=.ý Ü¿œò÷(H¦Útˆ…¶F[NO«7—Rm:otqPâª×wÛ…[ßWk©wïßý°×ÂW…ÛæÎ»ñòœ.Ah‚õwš½¦=Ê”À:«˜R~I:ø´úS3Ú/cw$Õ舷ܼÅÞª>.è]ŽV¦µ19¢¹6í[uq\}?\Žý÷¯U¾ÜüeÀÅZ’Ù&‚<ϯ oøÒêNb7vÏá¤AsIV‹ëNš}ض–zæö]üš¸Q€–¥kin§ j š"4O]ÿA‹ó( ³ž~L\”ÞplV— Voùx‰xËÍ³ØÆ¥êѪT"i¶Âz§&G‹ìÁäƒ 2gV í¸l«­:',ëG›Ùõ&/ÞÞ.É'÷oUmwM­À†>ˆ(ˆßg€ÅD8”ÙyCZƒ±Ä8á}é­Ù»ËÃÐöÂí¦]nRÏüñ‰K^çgC]9×ó¥@J¡ÙÉëE]7²ãÄ^Š.öâ ÏëÌŽ6›**Á"¤Qp×ÊR\¹É/˽¢“ЊéƒžE8^Γ㺭¶ê ?iOZ7 ý¢ÃÝÿèÅ/ç°Wjy€3¡î3`»ˆ¬ ÚlZ¤ÖL.¶ã—: µNØpæÚ·.c:?î¿ìu‰fëÜëØR Zy ¨óØÇ2/ £;ä ¢{3R{b¬íÖpÈàÎ3WæàETãF<oz€ž¸QM’`yz)D㧎ת”³ÇÓV[u O‚ß´‚i^îŸqÿ"ý•ñª© &½q¹Ž¹Ï‹…¬[:7f´]šV{<ÔdÌúŒå•ÑpIïÉOðþÝ“V¼a¡™Á:§ÝZL,„Ë?qå;O»…áL»ø âª7:³ã:©€pÄ1؇ƒ žyRò°êSâ0¹Ž„ÄÐb!™È“À°Ø~JŸÇ`êbØmqÆÞ³·~4xå›ÊÓ¹m¯'içì—òÛ_/þ“þ\L!.šm:™»v‰u9UAÁ]è oã+µØFQõñ@o D:ËqʺдÕVÑóD ¾Ù#h¤!Ÿl%G» Û­î=íiõù_rÛ¬ns屺 Ô¿ÓX2õô¢±±V‹Ø“ï↻ÓÇ+†ž«Ù´Ø†S–2¼±tö\‚¦ƒž§³|lÁì`ìdÓV[Eq/>–/DK'Õ\·¤€]ah5½„äpÞ ôÄ€å±V‹#…£i¥æªó CvÙŦŽñ¿³màô/â/âßÕSòŠÓêŒÊh+o5"aµÚ¯¬ Þrð2ªÑïpó¢>¥bz;èy¸e¸™Ó­jÿêæÓIøc§°‰¶r°¡ÇP!DeŠ×G=D L0Ãë¯B¾¯y7j~qOh³&­öHÚ(ƒµ¸°>^\Å´cÆyi`çNNo8I¾”P×H¬³"”‚;•`â¹¶‡å¯–¼G¹yÐó 9 @/œ}$oº?Ü «:Y Ö]xVuD*H‹ˆTd¼ªI•pÜÇÀv¬{Bëëßp΄pöôpöŒä.ê¤,!K› Ÿ»fÓR/³HC´³XÑ‘VFŠF„c“ñ)‰®Œ±éõÇ !¾…ræÔ…JY fÜp×4mRäcG¼Êb9ei%²2¼á‹ÜòŠ1¾†/­Jÿ´æÃ•h¸®pÖ(±Â‘'—Î@ÌúD*k¦Ï±ß Ô1ÐÌJÆÌÃnu¥ÕŽ ¥Oò¼ÀMEÏsåÑ´€Ï_/Mƒ4\î3ÿˆÙR&Ëó  ¸ù¾ŽiÇßéPÙ¥Î2ŒqcÝáà¹gˆ§¯™ ck§Yôp4U­ÞËçË ††‡ÂB\úpÜ Ø ß ÷u[àçÁ:IJöI¯o=Q½‚®yVoÊVË»Ûà>IÊ„&àë‚§Õ¨¬V?…ù°•`h 8”Ô5a\ò ¨c`»PP$ã"×ap‰d%ûRÙ¯-éÔ½±.¼»pðz|rºH&ä`FšÙV[ HªŽo NÇÑÅEfŽcà< êž ’Ûy°4úœXÔî6ÿ-hG‡ ŸŸ.–{ð†…1n¬ã6¥Á>6}þ±~ŸQ¤UGVægöùýý‚±t‰3`?ú Aœ–!ˆÛ‚åK¼rì&s |Kˆ[(gNîìbw$¸³KŸüŸ¯qešÐ¼wõµ€ß×1¸VýÐÝ@? ,4‡% úÅñÊSç.õH‡ ?ÐéŽÄ€Î/þ Å5Âç+ª¾–7Ÿ¼ò-àó5û´£JC˜‚v´I á›õãÁ³íÒ#}9ÖµKºëÖ§ .õÕȪ|Û™OPÝ-àóÕ FÄE¿Í×j’óTX7 ;šíÈÖ½¸þ îw‰ó/ÿ95jDª»ÍÍç¯*€…+MýI#µ|_3àliU4ÇÐçˆüç–/RË÷ÕüþǵÍW©Zü'—/^ËéÕÆø}­«–©Ì§9ö,à÷÷,'¼ê„LYþ>Êç«ìÙÙ|£ªh¿¯M00¦j´æWE™Ït¬ZÀçk Œª\ôüÕ¨a=««ÂßËç+†Wúþ3jÔUaó˜vŒ[ ®÷è£ßïïoHÌcYÕáë…þ3&úý¾.ÕÁ,æ3ðûýŽ úGû|ÍŽ ‹š/Y,à÷PÁè¿Úç«] b>êqdŸ¯y‘žÀ0_œãÈ”æ«V; ø|u‚«Ë×ýüçרaÚj«Ž¿ ÷ ']^èøO5mµÇˆªñ7Nø/(;úýþÞ¦­¶£àxýèÁ€HЭß×þx5ùÞÕÞhðí[*ô£­¶Qµÿöæ çÀLgƒo ,h«5‹ŽsÔ+_“5øj'!¸ÄW#óXùÞæ{ Wõ•ØàkÚj RŽM $nð øEÚ±ùÛoÅ,€ßs܉¯ßo=€ûðcn‚†~´ÕšEÇþ¯n¾¡°¦'0ôôùê£ _ðùZb¦ùñõÍ·50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000¨ÎX´hѪ*ù§ÿþ‰íšø“wèÐ!ÞÓ «ä7¦Õ¤I“ßzÚ´iUó“Ÿyæ™Õïüñü¿*ùgöìÙ‰­™ø“_rÉ%ñžÞªU«*ùéC 0 Á·þä“Oªæ'ß°aƒ~¹ý4ún0è—ç3^¿Üky¼ñúå  åñk–ò5Œ×7^¿bñú¥<šó4ãõ+îú«èW †KùªúúÿgðTì1ÂWÉ?}ûöMüÍòvíÚÅ{zAAA•üÆô¡5j”à[O˜0¡j~ò!C†T,LÍ«                      ßøæ›o e¨”?íÛ·/‹íòóÏ??Þ‹7oÞ¼R¾/ÞŸ¹,_ùµ×^«¬O>hР²|òªøÜJÔðtêÔ©,©Ž­*øÌeùÊ•¨×?ëµú¥š•êiúe9ùåü\ýRa¸”O2Ð/gø–åå ôK‰âR=Í@¿,X-ççè— Ã¥|’~9÷,/g _J—êiúeÁj9?×›G“.4äf9Ã×¼œ±€±€±€±€±€±€±€±€±€±€±€±€±€±€±€±€±€±€±€±€±€±ÀñaRrªtó”ú“—8‚*''§Ò¿ç0#¨Êów)µê½ß3Ï<“`w¾sZZZ9~šÐçc̘1åøvx©>}úüç?ÿIðq0Ê÷+ú•e½Q£F•¯õŽÒ«uèÐAank ùŸýë_êßÏ>ûìrü4:ôÿú׿ò·ûÓŸþ¤Þî£>*Ç·ÃKíß¿_½¸ç;¾õÖ[åûŽGúUÄzåþ{•ïo÷Õ:uê¤`ñØc©Çé7ÖsÏ=·?ý!C†ðWFùS}ŒO>ù¤ß/¥¿ã€ø‹ƒnWïøÎ;ï”ï;èWë•ûïU¾¿…¾À¹~ªÀ*Ñqè'kRãõ“µ”×ãô»±ñúe±d ðàv`ž2^¿LL²ñúe1¥ñúe±ží¹Æë¯ŸLÆë—Ûa3^¿,¦4^¿,Ö3^ß›)àÇxýŒ•ü ´Šp&Í5i®)i•Ï 7%­ò±c…¾ŠIsMš›ü]Ú³ hJZÉžP“æ&k)SÒ*‹¥J|®ñúÆë¯ÿF¾V¢§Hò&ÖOÒP•ù0ãõ×7^ßxýróAÆë—›)+î…Œ×7^ßx}ãõËÍï_n¦¬¸2^ßx}ãõÿ½ž(Oð?z³ì9çœSŽgÏðúe1fåÊ×0À‚ÃãóÏ?WíüqY¾Q¥=W÷úž3 ðm³³³Ëñóè—Ř• }O„Ì™3§,ߨҞ›úï½÷^¯^½Ê÷Ãè—ÅžU úÿüç?wîÜÊò*í¹:ô1“ÃÔŸÞ½{WÄÇ2Ð/‹U+úóçÏWð@\¾ƒåÊb–Ò<7^š[š×Jî9úÉÙÉûQ• }%_+ËW¨*Ï5Ð7 O)žªß²|}}}[I«,Ç)ySš.­TílžT-÷ñÆë¯Ÿ¼«:fc}Œá¾VþiÙ²e¹/û Unš»nÝ:þ‹‹‹ÍÌÍd~bý÷RÖ>|x2Ï­Ò©S§Îßÿþww©¢|§Âë&8úÐ_µjU‚ ãÆë'¨§õ~øá‡* ë$?ܸqãþûßÿ:Àq,A?‹yî•0^?„xZï>¾?V§ìÞ½ûYíJ@“±NJY¸p¡zŸîÝ»óçbÓ úÇ[o½5¥LæÁ¡Pû#ž|òIõ./¿ürÅA{sÕ•¯%gÏž]¬wðàÁdÌnS-P¡óõ«â6ŸÉX€[À@ß á8µ€þqúÛ¯m o0pœZÀ@ÿ8ýáÍ×6Ð78¾,€‚Ú×ìÖS+róí·ß>¾¬`¾íqhâîÊîĉCS˜¯||YÀý¿üå/kÖ¬ÁÊøãË æÛ‡@ýåUþçÔSOŪêãÐæ+                                              ïøg&«pÙrÒIEND®B`‚fifengine-0.4.1/doc/logo/FIFE_small_b3.png000066400000000000000000001060651304641216200201550ustar00rootroot00000000000000‰PNG  IHDRþÖØ|£ésRGB®ÎégAMA± üa pHYsÃÃÇo¨dtEXtSoftwarePaint.NET v3.5.100ôr¡‹¤IDATx^í½w”UU¶.^¹Î©œsÎPä ’A‚¢b ) ‚€¢AAPsN˜³v›µƒìdç`¯Wo÷í¾W{üÞï;î¸ï½ß·Ö\kíµã9§êT‚Uc GYœ°÷ÜßškÎo¦„óc$`$`$`$`$`$`$`$`$`$`$`$`$`$`$`$`$`$`$`$`$`$`$`$`$`$`$`$`$`$`$`$pæJ =)1%ÑvûiI ©Ig®@̟減²’g—¥]VÊKµa¿*#éÒúÐôÒÔºÌädû®8Í…bnï4–|}Vò¬²ÔÕ ¡Ë›ÄÊK³¼:#IüSc{`ZI*þ’döÀi ‹ÓøÖÜšÌäé¥i—5†×5;— úÉî׬¬M.I­›-pÃä4º5hêÊŒ¤©¥i—6†Ö·„±6ØVƆ¶ò`Ýk?Õ™ÉüïÖ‹é½l5‡WÔ‡&§–„Œ7påtº•²pÒ¤’ÔUá ­Wè«-ã ¾6j+ß}œô¯ôJ¶´OÀ²Õ’±¬>4¶(µ0ÝìÓ 8ö^ŠBIã‹SW4„àÞØž±©=Óo9¡Ÿ•ìùJ|ˆ¾aÔ–¸¨>4ª0Õa5 Xš PvÇ¥.k3hÚQ~å L÷Ú<8S_ùvÍ]›•¬þÕóíúÆPû;ႺPgAj¶/P‚4;@$“š8¢0õ†¢ŽT ߬̓ÙÚ2Ä{]5$Ë }¿ÓGñeÛQêh',© uä§d8âDªæ2û¯2S‡¤œ_à\X·¡°¾ªÃ¶¶vd‹54{«\v­_—¢þI½Þö9ö]D;Aß ´®hÏX\“>(/%ÝDú/š•…’‡ä§œ[Ú(ÏgǺ:ƒ¬Dö¶¡Ùb ËÞÆ×Õö冾z½ž-ù!ú®°öƒÜ î3í¶Ì³«Ò[sSR 5:Ö_®1-)±-7eaŽx îJ¯+¬+”[øžsõðœíŽÕ™³]®;SY—“"þÉõ.|[|ç¨ý 6CG¶Ú d/9¶öÀ†¶Ì9•éÙÉÆê/ðê‡×‘’”М“2¯*t×ñ¤à R¸;±®ãµ3g‡cÈÙ9"×±ЯÏIÑ_°cD[Úç°!¿Emu8Øv‚í4æöÀºÖŒ™ið§Í1б×7—( Ñ`veúú6âI»Ûà®°®£ÜñkFæº×µ#siÚµ~CN þèùç–ߨ6ƒãL`Û@žÚQ`í5-áieiU™Æè¼õý·"ìŠêôòôµ-ä¹*5O:ÞB<™én¸kXW¨eÈE+kÖhUJÖEЛê|»\l·èCí:Û€ì"Ï=@wJ>ñ¥MáI¥iˆÄõýÃ0WÐ;(ÏHšR–¶º……œœ†â•v—p·°®P®AüºÑy×±­ëÇäëË }õ¯Ž7²Ò>Ù½<·Î=`ùÖ!btecQ¹"$îüõþ· fBIÚÊ&‹ ´Ôûºab_…´ÐoÊOåg¯q¼ÿ»KîµØfðÛÚQ ö¹Ü]Ñ !ÆJ+H?(Y™¤çÖ¤wä™ q/ƒ·K_—•’84?eIM:¥Oè•M¯kzÆØpÐ3@šçv¼°j$âm ž´»wH å:¾æý“¼—úîWª}B¿è[±ôm Œ"v¸ÏÍRž@À࣬Ø`AUz{n² w •=ù¦prâ ÜäEUé”O §¬2rd-ÐM©»šçv¼´j¸ŸJÖ……x©}@uì˜\(WÑÉE7Òšb­¢ ›­ß\&þ•¿oáK|ˆþÉÚ~ç Öi "}8l!Á )O€[A¾€çKC°ØkÃsËÓš³“M%qOÂ9ŠÏFص%;y~EÚåM¬¤ƒ•z@ÙkŽîÈ‚¬ô½RóDD’š'«F!ž´¬Üm(×ð}Ó”"¶¦ZëàÔ"ZÅ.èãú+ÙïüíÖ†ÑöƒÚ r'ÈmÀ¯“¶¹Ë¸ ÚÒ°œá »6€ô Jéqdÿ@ÈØ¨¥¼¬!4³4µ>3ɉ£Àiü^q7f%ÍAÉ«]ñ0¸²·,ÉÓó@,·é#€žœ×@Ä+K†`§àNÐÔQÎÁ]|p[‡<×YÅè·¤¹_IŸÀ>jj±µ+Ôf;®G´?i¯’—,\r‹•C,½a}ˆGÄ(-Âá@³ú_×¾¼1´¶1´².}j±©$ޏ=? áÇÚŒ¤³P UŸ¡3ÐseÏpOÊÞnáˆÈ”Ë¦× z5Ïà¢éxB¼/ܹªvý¬â›õ5½äf¾kË ýÂ4úWz%[Ú':ËÚBr3ð#"p¨= ¹¢Ù*¦6¹Lnõ±¦!´º>}YMúÄ”òÉ“ˆß6`Õ®á¤ÉE)ËkÒ!bZà çFŽrgÊž›õº#ë z/ÃF×ñ\Á c ¥×…ªV0µãûðŒ’#>«8“Ùú% ù\P-…iž¯Ä'¨ £ïú^Ïm@N‚vðC@úÊ!öÞÊ –ñ`Rÿ|Hû‡Œ©þ¡€ú/«K¿´.íªԱùÉ%馟DW÷$Wšž8® å¢ê4buâÞ˲÷´pˆ¯”6½¦éèmjžJÍ“{*oÙ0B+kX×±{ËÌRµnYÊÖ,ká•ÃÓ“æ%$\Ì×Ì„„±Ù)x½õííüs¬-¤6ƒÚ ú6еt‚H÷„à6Ànÿ0ÝßÎÎX·ñ³¦=£K±jÓVÖ¤-©H‘›\`*È¢ßEi‰£ò’ϯHø Dˆò2¦ì¹‘Ó(Œœ(•½NY"Ücy±> × /ÄKí.4±Ôè€&]‡øÑY¥Gg«UvtvÙ±Ùe‡§o«Ï\‘šD ×תPòŽæì#g•à•Öµ ƒ—ÛIìÇ6 »ˆŽkxš+ìØV8Lƒáÿã­þ5ß—«†~¦þkÓVÕ¤­¬N]^•º¨4ehvR®ñˆýö’ ÏIZ\– a­¨N…à >©ì¥qïeäw ËžÜY”•¬%K=艽ᎬàmìšÞRóä¶’UCN*!^*xÒîÜ9:5 3ˆ›c­Ûæ”aW¸©W¬ãs˱ð—ÝCóÖæ¦ºÕ|ð_Ö¦í‘|>D~¦}3ÐN +¡Ó€ö$bK 6gDN„¢€¼Ô?‘?nãÇiúkè_ÎÑqyÊEeɳ ’Z2ÏМQðÚm‰³ “ ˆ#6Ü·«4c ÷¥r({ÅÓË(¬¢çÉ .¬²æ55OVÔñâæœp@Öç•ßNk~ù­3Jw6g­ %-KJ+9J}yà ؒo¹,#ùÚöœc3Kñ™øp¾œ;AHtè{€(#~dICHB~N0 ái€ì "N©OßWòž6Ç×ý–&/-Iš–—ÔJ8#rFQ¡ÑN8+/é‚’$Ü|L¸×™aäHΞhoeÏÍzP–Œê朷æÅ M¯lKÍkVÐñ³K•%CÚà®°~ÇürZ7O*¾ª:cEZÒò”ÄX©I´V¦9×åy©«³RÜWoÁÛñ!+Ó“®®Ï<2µŽMEßH;2ê4 £È}h‡÷˜9£Nßêà@‘ áPÿvòÇÉüéÏY"=5»? –®û ý'-)Jœ˜“X“žpºÄHƒ­KO˜œ“ˆ›<¿8ÜCˆ 8œZ ÷.#GXöe/Ízâ:¸²÷½Róä³r»B˜ÝñR»K¬Ÿ8»ëŽùûGæ_Qœ. œž´ +„•|)VضvÔg¾²©ñß^÷ù3cž]]·¥2ìxÞÅÿ@Ÿ>sSYøÆ1…ü»Ø£m ŸÂ=à{@ÙBŠn@;X€¥þmÖ?NWÝ÷µŒ=è+c^úAûT{£8¯(qIaââ‚„±Y •i ¾„ >}uZ¸¬„Eù ¸1Ü^ô¸÷#s¨zP¤×{9Ò²×”=×ôBÙñÈJ»Ao^º­¤æˆÚÃë䂊ã³Ë®”syN*Ǻ€8l¶2“W³•펵&+åÈ„ÂïÞ8èï¯OøÇÖúÛ«ãß½®ug^@¯doÉdo§Ï¡A›a]~êž¡ypä–Ó¶´ˆh0[È:¸'àÞÜ­‡.P!a «0°²þ==î+b^p|‘ó#S`üô×¥­Šýç$œ“Ÿ°0/aTfByjÂ+!Ö­HK“Én·µ¤ ñ¼ÂÄ󋘾_*ìœ ¿6"îõXqö8—A㈠²ì5eOf½ éyüU÷bc£«yOÄ+¸ñX·L+ÙÞµ:#¸”@ˆ×d§¬ÅÊÁJÝTœþà’Š_ßÛù÷ׯ¬ŸÞ>ô®yeòÓðöÆlö!ì£ä~P;ÙÙ’utz).öÈÒm!y(oرJ±0ÊuªAÿkêŸòŸ‰ùᦿÍñ•oäø:OÅù× ËÀPºŸÐOë켄™ %© ý:B† Z–š023aD<]ý¹÷‰÷I2¿¶‹¸×LeÜ[FŽä.ɲ·+{EYÞ¡æÉa…š×çB€¾òƱ…›+ î:Сþ/ÏM]—'ÖµÍY/mhøì©1{e|”ëzzUíÕµô!ø4¶ì›Ç ð+M(¢­¨ö€f Ig xpH©k¨b~œ¼' ú:b^±¡¿0ŠRA_ý2//aXFBaJ¢8±‹S†g$Ì·#^â^˜:ðfàÓ8pïâïõ •- vŽ?îýŒÁá@Ù‹p¬´ptê†4½=s^¹â$ÃÆúÊ;æ–ÃØX_F6ŒÔëÖ×ç§®ÏOÛP¶¹  ?ØÛöå‹ãþí¥®¬}nì[;ZŒÈçáñ±øpµرÀn%ÃÇØ×™b~¹Úwp—@wˆ™dÛ– $B2/Ȧþyü‹È§ñÃã¾.Ó_¤<¸)w´ t6g<ás€éþ¢$P—nôÓ_æä& 'ä÷í(HIš‘07×:ž—‹“‹L|{IéïÆ=NFÊHs¤aêé ÔAå&X´½2r4G¸³ G°7*% zè¥$ݹ° ¦Å5ÍÙœPð9)Jµ3Pr¬_U”¶¹<|ÿâŠOîöåóãâ²~x¤ãÎ9e›JBøp|‹Ú Ú6`›{—´«-ç¶™eÞ‡·‚Àr‚%ª«ª³Yÿð}©Fã=ã‚~¨E€ÊùÜåÕÍÏm0+7¡=œÓ›²\¡Â ³ýïÐ÷°á˜¾wážòôä‰{[FšåÔ"Rkgîɸ§­fäx){No“²WDÝÀ¦ ÷Rów-¬<4¾èªê°Ðñ ñÐî€{€ûÆâô%é»Z³ž[[÷‡‡Gþë³cã¾~s߈'—×€bßUœnmƒü48¾´ à0ß ;e[]&8Vn›¹¬ }H'Øéû©¢>]ÌO´ºßÅxBýA ’î'£ŸèN"|"¢Ÿ6#'¡5”Ùs1®má„™9¾:Þ±5…kë¢2Áìâ†{øû1à^‘9#r„SËL_Üó(•rgY|JWö°pu#ÍeÛ1Pó'æWìžwEQ:Ô.¾0PèW./Ðïéòú™@êïÓršB q g$%´„ΊñJåsJ‡\[=t• ïü.p¼4žŒiåç8ø{“pO‰h¼zé{'“#=Z»eO –Y/RºAO ?6£ôÚÖld0S^ªy²àâ9ܯ,M¿ª*|ïÂòoéøìÔ˜^^ß½qð‰Y¥pµq¶=À½ëÈJY——îõ¶ÙÌ ²ü`1ÍPêÖ¿ý0~ˆù±›þÐ/¼^‰~G¬W _Ks°—7☜PŸžÐżivMO˜š­Ž×¯Æiâ{R:ÈCŽ÷‚ÄÔqO ¦Ý¸çʾÈâ.½”½ˆÂ‘6=þÐÄ¢­ÕÒ¶áΫ]Íd€Ú•e¡]-Y a~}O'Ôp®ŸŸþØEU;2qIÚ° ÊJAHøð”çöÌ?™ !Ý_Rÿ ÷¯QŸޝ3à¥q>2Ö«Ðõ§È~Jq#Ý/]^ƉGiö¸÷Ãâü„ Y µÑ‰a3MÊNÀÛ"î-¿¨è•§‰¯§¦YE'öŠÁç¨úq™poÓ÷÷Ä` ÚÞeäËž‡¨‡CŽ4ë…%Û¦“bè¡5A§)Ov.ôë^TÝ«2œQŒ¡Ò›áÃ\ÞØ~?@"¢Š¸jä¤iX8]½ÅâÛM|OJ'î)™ûµžú^2÷Ò©™Æ‚¶·ØÝ~|zÉ–Š.Ø:8)dm*ÆÞÞ+hV™Ø2 ÆcÀ"ÔÇøé úE´Kf:èèWI>ÁFw0Iáᨂbž }4ßM¦Ž4ñ­¬LæÚÂÄ·S:,d++kU—(ÊS™÷Äç¸í{+beÇ=åÖËŒKiÜsÇ¥ìB0èÒ –hÀY²éIÓ[ gj1©'.©ùÙíÃ~ÿàȱ~tkÇCçUî¨Ï`‡@iHxú À,"–ɹ ÉÅ0üÈýµØO‘ÊŒ•ííørÚÇMù;OýTÛîuú•Ù#ŒþHL4Èœ’],lb÷L|Åf:£¶–kËÎ;‹Â—ÝÑl¸G2fŒ¸§¼KÊJ@ò9Ä]Rˆ îö¹å{‡çAJB¡°p{ï° ȼašžÛ67ŽÌ{ucã¯ïñ»ûG¸õË;;Ÿ_[¿·#Gß:D¡– J¾¢$ý†‘"'”—x¨aüØr~tÊß~‹ñä™z–›UÝb§;™Ë+ëZ¤Ñ3×é¹€Šê´}4;ÉÀâ‰:Á¦ŽÛµåT£(¤C©üŠ[9ì{»#ÈrjƒĤv6gã¬G6%Rn˜…Ô==ØúÒÐU•á;f–ÀxøÍ½#Nƒ…ð­“‹ø>Ûœb0³Ü¸ô$l†kÛ²Î,UêßiüHôÃñUo ýšÝ/8~žç£7w^Nwº\^‹é‡ê$¦_q]€%½ÎnT?Ui1CßnêXl¦bñUôÊÓÄ×óõä{–”¦xL§ ÷ÒȹiË·Y™–ˆ¼_§²Wwdw6d>r^åLJ;~}Wçi¶¾w`ð} ˯®É`N0EÄ” Õ?2C);¦àÁ‰EdüóCU`ëÏiŸˆè§Êó‘9ž6Â'J£_Kpˆ™}Äa£úAõd¬ÛËÁê(SG±ø*z¥L|½ôDQø:îAá븗|Ž•p¯HL»¾Æ=ÛõCsAÏ£0 ÅÐj\Ù“eo·pJÓ÷ Í}~Mý'LJÿòdçi¼~rtØSËk¯kË&À¡þaý“ú‡¸P, pog•¤u ý¬ÂKËrSèW„§Ñïfú)Á!¦¯`0<1„zÙ—Á;*ßÏÔ…¶uiª•ˆ0ñe/XnêðÔ4Neêù9Vž‚ÅcF…ûÃÓŠ·7fA{]’Ä«œÒXɈ0rȲ—Ê*ðèäâ7¯nùùÃÏœõÉíÃ_»²éæ1œåêŸçA0ë?“%`ú¡2PG£`g oî·E»(ÏG¢_uvP.¯Ûè·3ý"¹Íföøg¶ù¡QÞ~‹RñÛX¥«ãJPS¦‹ÚZ&¾“Ò‘T¦–§ÀãVªš–:&¸í{(§c­Æ¨p•¸—-§qȲGè Àwo MÆ®®o¿své–ò©–d7~ @ˆô¼UDÆã £±|,ôÊ.ý"ÍAsy™Ño‹ò²Æ3ÔÈÄÍu’Ù}npg”>.펌h¡Ïruxù°‚LÙS™:ÊÄ®­‹Òyiޏ• ÷·Ì(¹¾ƒÙ6ªÍ [•q¯9×µfŸZ^ ƒþ§Ç†™ |ÿàG/¨ÚYŸIY@äû‚ù!Ó_¡Ÿd»® m÷°¼#²æ‡{œËt ,7>ð‚Ðïéò²ÙÇÜÁuÚÍždG+J½L/CRC ?5ÑyººwëÎÍd[‡©Ã»‰(ßÓÄW”Ž#SÔÚqhJñÕ°mÒmMîSY57+žâÆ=%Ÿ]ðê?¾e¨Yn üèÈPx;û‡åqô³Ülâ=~(Òýj­ 'ooÎ:8E¶{°ÇzEžG?µ6ú=]^§Ñ/¹Niö8ó:E1W`B¿{WÄ–Ü4èh6–-_æê°:dêȶ÷>&¾¤tô«´âíа®œã×Ô‰ã^‘9)àò>¯ ýu˜“¾µ{Ð} * ÖßýÊ Ú54W¡_T÷òâFEö;~7Óïâ•A.7 ’KG,²ùcþ‰˜¶i©|?ïV°Ü¬ŽÓÔÙ ¬ÔP¤à‹Ô4Aé0yBáÖúL‡m£ŸÂ:î÷É}þ²ºÜ4ĬîHÑ€S—Ô M5"úñ Ve$okÊÚÏÛ½(ô —×Ëè÷å:-³Ç–ÙæHêŒÒßE±xÌ?(· °yÜ„&uP#"ßÀŠhê8M|˵-º~dÞÆ2ÛÆ†{nß㌾uBÑ7·´|oÿ³â(W74U€”'OËÇ¡€6U†wÊ#ô+—WÕµ0£Ÿ×³;¸NÅö¨¼NÊl#W¦4Ûã»QȽùM£L*_÷nyŽšƒÕQ¦Žª²e¦¯>±Lü …;e¯‰¢a%œ°Åi÷Ì+ÿÚ¶ïîlVIàí­wL/êðz=û‡^^¶sp¶jé#Œ~ég\§fö8ØjÞæðwmÍK¢+b,êB;üâV¾'¡©¥g‘/ÊÌ¥wëgêˆjCnâï“¿¥.#À¶Ñe½³!ë‰ k¾½{ðwö˜ÕøÖuƒ:§êªÊŒhzè ÚÒ¹›+5†~×If3È%r{ìþ®¨eD§H쉤ø#§é»øÅž+ö–H×±5I–c lÞ­ÈQ“,-p«›:× ÏÝPšîæmÜRÆÉ{`xþË—7~ëúAfõ‰ž]Y·gPN4'À²”Ä+ÊC× c™)TÎëñª¼Nnö8Sšy%— :cRüèÚÐÅŸé^%¹ÊʷǰlùTqëçÝ:jPÈÔÙÚšµ: Û{¬óíÓJÞÚÚòá®v³ú\olj¾e|Ñeáäȇ@bšüÔ­mY¢‘ …x­¼Nk\Ëí‘IŽø.ከøGwÁÇ¥½‚žon›Çmå¨|ª4wù*G^¹›jÂQÚ6Ûª2\\ùÞÎö÷¯1«Ià«Ûàk¡YPä À¹ MuáÃyˆ×ÇßuÔ²P /u.‰^ñ7‡º¨ôYeº+)_dªÅªò)gA÷n·ÍYW’F2¢°Gµopî3+êÞÝÞfV?—ü®]ÍÙçǰˆXJâºÒô«‡ñÜÝßåuŒrH5kVî¥ø£²øÑ¬³‹?hqè€~Ì*_Ý¢¾iˆÖ¶ÁÙAÏÉÊâ×64¿³­Í¬$—Ö4U€, ˆ˜@©„~ËßåimzbO?ºÛwñÞ±îéºÃ·—/‰ËÊ×Òu,•¯§%È «ï™[þÍÍ-o]ÕjÖ•Ü€ÓK‘í÷ ¡øÉßu$uÒ€^_ů¨UÃå•ÕƒîœÝúÑÛ­Q’&5ÐTQ¬î™vbÇÃR*_vX€w‹;÷Ê–²ÐKk}³´Z\}ý”Ћâ·Q=¬c¬bqX(˜RÑ­tø§Ot'ivG塉;>w·å¼piÃ76¶˜5à$ð̲úu™ÁÏwu^ªHêTñ]™Í¬ø=‚»®fUm]öqiÇÀG–Ð×òòåì7Må‹:,âò#«|žž ª+¢-ˆt´#c‹^½¼éõ Íf  ¼´ºñÆáùÑðýpsÑéVü”ÚàEõ8¿•Ω+~L{èÖzçÓÇi®#ŒåÌØaá[™”ï¶òUÓL¤©­/M}zîï™]þÚº&³ú³ ¡nŸRÇÏë¦ê°•Í øUpWeõØû3{p¡yf·~à#“µCÕ·:§IyùÔHJoõ’s‹Ëw[ù\å£åÊš°úªÿ´½&óñók^YÛdV?”ÀC‹ª6—†‚Ÿ ãqoiÊdñ]™Øã£øEp×Êê‘å‹îð–ÊdÆ–8ü •¾åàÊüd+Œ%{…[;þ*_õÕa™Éãò·5g9dñäŵ{y0?à‰©Ð¥CÈ_xvy=NU³ú‰žº¨vO{.KlFA#/fwk4”ÈÝwv…ãïÛg«"FÊè$ª‡7íámKÔ4v‡âçÃUx‹ÚÓRË2RÐh6?ð”U;A*I vpY’¦ÌØ¡Q‡,|«;¤ò‘¡yM‡å§.©E¢W 7=rñÑ2 ‡Ù)˜Êvû”ÒV6¾¸Ê¬¾”ÀsËnW…—óòF&öÒ9Tý¾²®ñÛ»Ý9»Ìý]¹zF§ªßÕsÚô¬¡øUݺ7ËÉ ?(ä'´†½¬ÕpAæ'»\JÒ¤Œ½•©|dh^?*Ï! T}wï`ˆéÃ]ƒGo ¼€T>Õ²B[ÞU]4Ð1êþù•ϯh0«O$p÷,ÖÓŠõsÎgå¼hc(ŠPüxLœWG‰ì:h´Ãc õÇÇ*ʸTý®âøEpWdõ°ž%á-»³«:3ó\NÌðŒÃOYZ‚ óÖŽÍÁeÉj2/_ï®#2vx–-)Å( ‡#ªB?ºeÞ~ûz†þ·¶¶Þ<º“Ç©·vºe nšú¢3æ–Šðáy-©yvY½Y½&‡W휋–ÎhgËZYQ+(þLÖÇŠ{àø´’ww´}pm;’œ¡Ë Ñv·Ûù•¡$*d!Åo5nY=”ÎIyüZxKL`×kÕRÕ¦*>ó…à)SódÍÚцÀi®Îiz¨|ÞMêUÝ­#q P[„J‹oïaª‚{gûKk®oÍÆy*T>k†Ìú¢rsM0d)ûÇ&•œZZ÷ÌÅõfõ¨ž<¿öȸÂíõ™Ûj2 |<<œÀÔÆ‡ú8èÌýŠfdâñ}Èqÿ½¬~èª «±:70Ð*­df•ÎIy :Ë)]«WÍ`´ÚT&.ȃƱ Pþd óe[56(—s𼫔¬Ã¢–RkrlÔ>‚ ß?0„)~2{®cèoGÛ»W·=v~5ŽW¡òy3dô…ÅØ^—±³1­ÀQ{÷ìò§.¬3«'$Írrz47D SbÇÌ-•a<êaÈzö7eÁOC'²k‘P ý-Ü´™¯j­/IWŒ¶*–H,' !u'ñ«þ„“³»œ»ãÚ3“rÕH,ÉíkGOÚÑ.0+ßéàJNSuÏD‹Ü¿Mùiß¿‘•ÕBX0{ 8ˆB„(‘¼õææ–»f—ñhŒÓv+Wù§sMSÖ®ÖìëÛ³÷ É“ðЂªSç×™G Ü?¯ò¦‘ù/„Œ*u³!|<RüÐJ.ªD®Ñ;ÛZ‘[êPù¤Ë.¶3?WV‡©K3Sü¢cèYâÁrªNU¼hr9ýlžŽÌøAHf¢§µ#è|WWY;ª‡&2H哃+§m¶SûÈaþþM@?”ù»°™âßÙ¾½¥²½²®éè„"©üz®ò[²ÐBu÷àtÅ\ôÅ?>µäÑÅÕO,©5«›xxQ5Ú’brõ Ãs÷väBÈ5SüLñãôwœU çÍ-­oomu¨|è/h1è²o^Õâ 4¶6eâägýªdÏÞòsví‘]V¶k#ø-›§¦ ¥è~&Rez"t.¬Éâùj¾ÖŽÌO¦±(äà§É`RW©«]Ô>JËpSÇ÷”ÙÃý]¡ø¯nƒp!âo^ÙòÌòº›Fä+•¿{P6Æ(Ü0,é¦Qù‡Æ™P€#âÑÅ5cVW$Ýqç̲Ãã )€H1±âŠ¿5›)þ†LØý/^ÖðM-8¹ÊgpÏ”w e•§ùüeõè_3$GïÚÁÙU¹œœà÷µyxéÝÆí'39R5#X;>t>µÉWœ& Ï¿±Ñ¶×vä:$‚Þ€?<È¿Íß…ÙÃ?„ CÐ÷W4?²¤σ™:BåçAå“ó¸‚# 1R³¥@€>º¨Æ¬˜$pß¼ŠÛÎ*L(„0ŽÎ‡`÷ÏùJŠÿÆ‘ùO.­ENòê ‰Þâ*.™´ò¡I*Oó‘%U޽{d¾jÕ¦;»~¹œÁhó,)NŠŸ¹ÃwÐ’W$+·CÖŽŸƒK “÷ŽÊwt/©ùøP¿‡¿ ôkŠÿ-ýËkïWãX¨üÑLåžPxë¤ÂcSýbŒH¹{nÙƒgW=¼ Ú¬ˆ€ îœSvûÌ’ÛÎ*>:µè–I…&DÊ?Ìœ«y0ë_]Ç ßØØ Ü¿¹™¢Låsïöx·’Ðüè†!xŽxš'f”:4šUáäŠ_ äR :)²ë ø¥Íãäy´ØÖôünæî¸ŒéIÄíÄdíˆv‚^. Ïf²N.rHäÞ³ËÑ]ò|ýÝ«mŠÿµõÍÈšzne„ U•3ú–‰…G§ááÝ>£äÄì’;ç–Þ}vÙýgW<8¿êÁyfùH`~BŠwÏ/ƒ¸NÌ*èn›V 1âüdŠLþM£òîžSþâ¥8ÄŽSg/•Á óônIåã?h×qˆQª¹,ÂÙU³èTgfÁ…ͳ|DéÚÃs’<óv<"YvnÇ×Ú‘=“å¹·N,úñ‘¡ßÜñnö8ü]2{Èß…ÐqÚB÷ ™é\/¯nýPº¿K4?ìHOçï+@ÿêFÇ/¬l@Hj Ú 'ø½ ËñP\Rüè…U_RýäòšÇ/¬y`nÕ½3*ÏØó¸(.®†X>¿"Š>Sü'g—>|NrÔ R–TþkëXÍy·Á„¦RùhÞìúWV†Ñ4ÛÏæq&5h¥[Ž|Å ƒ'Þ–~6}‘„>Í„sКμýéÇíHksù ](†cÔÇOn y1³'Ðß±€@þ.Na<h&¤s"ë¹eõ§.¬{`Qå= l*ÿ±‹«ŸXV}jeÍÓ—Ö>·ºÀ÷ά¼û¬Š3jAÙ?yQí³kê „S+j Ç.ªÂyˆS‘™=‹ÊqN¢åÑSÕAŒ&D Á¾â­ò} M<;RùßÙ7È‘¬µ­1Ku寿qæóh9ÌzXwnQyMí(˜]œBó}gW£5©šîäÝÚô1òÍ–Ÿœ”ø£#?åŠ_š=>ñ]/W™=Ï/oxö’ú§/ªâüšÏ…>«d*ÿ¢ª'.©ÆÃ~zUí³«ëž¿¼îÅõõXž[}çÔò;§œþë®iå_PóÒúÜõókëžY]ûÔªÚ'WÔà$dŠfÏ’Š‡Î­zò‚Zäáð„aCrS§ç*N×è MÚP^ðܾ¹µÅÑLC0ÚÞióøÄ¶¼s˜‰â´×mÉ¿Òg;`t^2BÇÔ@\Õd9RÖX“)ÙqDú²²ÉRÖ&›ïb£öáõ¾}ûϘâæôw‘Ö&ã»>þn3ù»8Ÿ_Ù€“Ïïé ëN]P÷ØyÕÐj8Ùq¾?µ²æ™ËjŸ[[÷ºú—®hxeSãk[ðz''•ŸÆë‘ÅÕ¯ll|msã+›^ÚЀÛnMD3)~˜=TÁ¬jiÝÓÕAq@€#„‰šÍ»å„桉tž¡©MÔP^PaÏ]VïHâ© sWÚ<’ât'rÊ|*^¡Dª`ב¾ƒ¼9>›.Ó¿13ÉVŽèièkM¦Ôà[•ª©"Yb.ÐŒLä»A£½(5ÿÕŸÅÿO—gó»ã»ÊߏLþ.Njè- Ï -é?¾”«üKIå׿¸¡þå ¯nn|ýª¦o^ÝŒÁâ/®m¸gFÅÊN³ußìÊ—74¾¹£ùW7ãf_½²7ÎÿåuÎÀS°ø/¨yò¼Z¨ d¿ •¿B©|›wÐ< MÌêîá¹a¶ ª·ô³ý&¦ÓK„Í3™x{>ƒâŒÎÜ/êzÓ©@O73ªØd¸.ú”·C£ØèÏé%°výCµOàN-«ùùíÃvÛ0áïöñw¯ñˆï:ü]è-2{€~$Ü>~.VÍ©e\寯*ÿÊÆ×·4}c[`ñö5-ï^×úÞumÏ®¨?1©üø¸²Ó`œRþÂê†÷¯o{wW+nðÍíÍolkÂ)‡³')~Ç=vn TDÄU~=©|Ý»í¡ o ><·3KÐ[™ûøô–À(Ì}•ÏãEqzšûzFòªÔØÆfEŸíOwy ³vÈǵýh }Ö¤)ç4âc¸Î*S9}°vP•r_ÜÁÆÙFåï‚æßÚJþ.ÑüÂß…Ù#ý]¦ø¹ÙóÄy úé?~^ ù+pú¿±µé›Û›ßÚÙòήÖ÷®oý`oÛ·nhw^|ÛèÒ»Ž-}êâº÷¶ãv>ØÓ†[{çÚÜ&Î7¦ø73ÅÿÜeu-©}lq ”©|؇y·„&ónÝšH×Q„&T>Žn¨°ƒ¨7Ò QÎC`6ƒâô4÷‡f;Ì}ʕ괥]#5ü”§Z>®—Bͼý†~) lN™*XÁ±è\ô‹¤øcñw[)±‡â»n—?tÚ€~„ôO]T‹£ÿÛš•ÊOÛ‡ûÚ¿s`ÐG7 úþ̓1wñþ9•GG– ¸õðÂêö´ïæÁß½iз÷·ã¦°™q¦1ųg[Œ~$á<² š)‚s˜Ê‡Mè§òc"4É»U** )åx¬*vyy^*NûÃ38ôí§GÝ–+£ÁQ­«˜'ô ½C»cBa ¾)²KŒ¾=ÁÓÐ?:›A²ÐkpošûË;;qb8FÚGéï"M\Äw7Q|×åïÂìኺ z՟ͲzT+Ÿ©üÝmîmP¾{ã ïüƒ#C>¾µãÇ·u`8ìŸ[;Kĺ{ZÅ»;[|¬ãã[‡üàðÜn‡)þ½\ñïj}s{ ,:ºwàŠ€L£À»U*?&B“{·,CSšJåC…¡œÚ ^Ù<˜úJS׿¾3}ßÃÜ·ªu©5•žÌÓžÝ3ôA¿5;Éž£of9š/¸²5݆> Ûœ2Èá†~NCÔ@üê®Î_žìü¹2{üýݨŖÖ&â»Òße4¿ðw~îï*ÅÿÐüj¶ ûú¦&X€SùÿðàÞ2äGÇ:~r|èÏN ûéíC_\ÝÝdXq¿]·)}튦ON ûÙÃpÙ?:Ú[ÀÙõÑÁA¸)¦ø÷´½²¡{‰L€>~AR7,@˜v>Þ­$4‘®ãÊЄäUɹÊÐT„&:¨-¨üOn† ¤è* Ìýmõ™8í}s_f4Ðü•Ñ@3焹OJ´Bu l•¦Ç;…A·†ŠÒ}ƒYŽÔÞU‰Ê4ŽÊy×nèÏ.»mndÁ Ï­T4ãøõ]#~ÅD—ʸÜùÌÂß]#â»—¡Ÿ)þ 8@V¢<§–Ö„… TþQ¨ü¡?»cèÏOûåÝÃ}oçOoúø’š›;ŠúÛ:<´è™euŸœþ«{;q÷ðON²½Šó §Î.RüoïhÁÅß?» [Þ¡ò£$4Y1Šž¡Iõ‡.BÔYùx|ßÝ?¥‰T®Nçµí9€~s_kӠж‚=ÝÔžTúlð4v˜ÍÇ# =úŽXÁ,­6n bØî¸sfèsèïâm§ÈЧŽ#?>:ô×w3Åïáï"­²ˆ¶%zWþ.™=ÂßúTέ&î›YyïÌŠç/k€šüá­C`3@P¢¿¸kø¯îéüÍý¿{hÄùƒCCî9«âР¢~²šWõ“£Cqa¿{p.òW÷ Çã²™â?ÆÿwöBeò5°½±É•Ê×½Û¸šÀ=ìU<¾7¯nQ}JÈÜß;"ÿ(ƒ¾ÃÜw²û¶¢-‡§ëÊc[RÙÍ›Qø»çV¦éÐìãj©;ÈÙŒ>ƒ>¸fèŸ[¶od¾j¶Ã:/d§|¸§ý7÷Œ€Ùãëïðªß%³gsÌþîCóªIñÈhÀ6øÆ––ŸÊ¿sØ/ïþëû:ûàˆß?<òÓÇFýé‰Q>5ú½m°nj+ìÃuûø2Ì‚ÿ˩Ѹ¤O‰Ëûí#p©8£pRáâttè«W4aKß3½ÿÅ}a“c«“w«¬üž 4™½ åõüšzè2Õ› пiB ]aîŸUÌØ}–ÇÆØ}G³êìr÷µ ¼!!‹é²*õièÛÓ?SŠSô‰ÞÑF‚Zq\߬5V–EÐ'FŸ|ÜãsËM,ôa ¢}z¹ £ËëW6ýöÞLñ+4¿ŒïRZËg¦¶%\ñË´6_,5‹ïúø»Ð…÷ý%ð‘ÔðÈ¢êoß0ˆ©ü{…ÊÿôÑ‘ ö/Où×çÆ~öÔhÄ8¶ÝØRØËëðbÄ•þå™1Ÿ?7æ³§ÇüùÉÑ||Sü‘âïÄe¿¿«7u×Ô œQØÒ÷ÛT~MOšL城Ç÷ÈU¢7›ôtoÁý­ž®­^Ñ;¦kõâõÒ‘Û“ômªÁ¹ÉÔVÖ/…ÁQžB-w½cf‘{|^ù±™¥ÊÇe}¦rRžZQûÛûFâÊßú=ý]Ðü—7ø»àõˆè$÷þÙLñ+@Ì“ËOL,GŸøŸ •`ýñ±Qÿù³c¾xa쿽4îo¯Žÿôá‘€Ñþ¦‚^ZÍؽŸý·WÆá¾x~,.—ôg¦øG‘âÿø–06''—ß5µ‡™:ØØºÊïiB“T>Ò?ew*´%LDC1˜¸0tuOב»oõhˆšä©÷¨¥Ï¡_J’=£¥w<ã¸,˜CµpóÊï˜_.Z¬…“a¢¥øý‹*~÷ÀH®ømþ.Ñüˆ»ó™…¿ËÛ–èõ»’æÁß%³¸A>2ð_ÌÆùýC#„ÊfÌ¿>?öËÇýõ•qmü?¾1á?ßœø³Û†ß1¾l_}~®{¦WþöÞ‘øº¼1áß_ÿ×—Ç}ùâXœ?PÿÌìy|¬Tlž˜Ä®×]Ó*pˆ!5[ÚÓ»í9B*DßÍc  Ë”§‹…NèËÀVP §«bËAò„z^é'Àз:*g]…鈳éÈUö£wÈÇeÐ?»Q>.úx›ZüûGþîþ‘¿!³'ÈßmKD¿*UÆåßEZÏgVimÜß­Ççðwàè⦽wzåwö þìi¡ò»u<  ~õÖ¤ÿxsÒû× †ý³·6?îë–a%ß;0ô«·&ã‹ðuÿñÍ cΦø_`ŠÐÿš6lW8'&–q•Ï2±ÝÞ-'4k£"4Qh/9’ЄwK*çöu­ÙÐeÊÓÝXbПô>ótbºé T¬(ùÍ «ãÒb3 _aimºš!Òô‰ÙÔÚÊ:èÉlzÐ;€þ‰³+6–„¨‡8uDùóõ{(~ÝìñŒïú»ßôŒï‚æ×{l4?÷waKÅ_ IÀÓñ1¥ÇF•7¿¼«*öÆß_ÿߘ@¸ÿêíÉ_½=å«·§þÛK“ž_Ñ´§6wu^\Ö ¯_Ñöﯳç_!Ñÿ 8spò@ñ#ÙéÁyÕàõoÇïHåÃcQÞ­?¡)Òu24©»ŽUr®ªÉ’sÊÐÔ M¤òqn#žE= ÉÓÝV— ïÐ$A_xºV•:+VjŸõâtÛ²qòÄý™¥=Oïо˜^–ꆾ_š¾O®²Ha½sû|}HQ¢wÐÂQ­Oõ®øÉì ðw­¶%~þ.²´ø®åï^äßuû»döUÀËhQ‚$ÞyjŒTùî¿zgÚWïœõÕ;Ó?}d½3«¯«ÌëæztqýgOMÆò&ÐÏtÿÄÿäŠîN0\rp4á€Â1/ÅOåÇ—Ðdé:H[š‚Єw{²ó×\åÿüöahF«CÿÚ¶}äñË^ŽÌorèwæõ‚¹Ã¡?,?E4UöJ\óKÓ÷a6Ë ú»Úsú¢—rQ žOÅÌOe\îú]jÓÉý]{ÛV`áëï‚æG>3÷wÉìþ.ØÍßeŠlé±Ñ ý· /Á!ï‚k}ú ÷_¿3ãëwg~ýî¬>2¬dWynÖñ±å¿89Â>êýú\ñCåÃ¥96ŠmEG¸?•_B“ª^Óë)CSšdê@g}tã`jÇ©Hž½yŒØ€Ö÷ç7­L¯:]ÁojÔ~MFÏû¸¤õ+ÃI:ôý×X¯5ORßÎlÂÇô÷ÈWÌ&$…æ½?¹mØ¡øàï2ôkýªô68 ýü]–ÍωN·Ùãˆï:ü]Rü@Û­#€þâÃC‹aT|r{'™:¤ò¿ôßÐÿú½ÙÿñÖ¬onéØW_=úol)úðúίރ· èãuÅÿ֔д"\®׃«r¨üøšÔPMµMH×!Bîœ4œØomoq@ÿàøB@ô†›ßìµ­Ÿ÷Rt?³?=9‘ ïÏ²Ú ZÐ÷%õ ú‡&!Öd°UèkoûŸ%¿òwAó»ó™‰æ¿Á§Mgtþ.¥µ1w¡-¾kù»0{¸â‡iÅT6$óî(>4¸èñ%µ~b™::î¿~ðûõûó¾xq橥ͻ*"¨ÿë«ò^¼lÐß^Ÿƒ·°7²·KôKÅÿ»ÆÀ¬Ç÷âÛoéd)¥8ˆpUšwk'4çY1¬˜Mj¨æ×C“ºëPý¡TùáÉTþ}#ઽ°¶³'D÷}Œ]IOºõ¬ ý² jßÑw_ËßtDµ–×űÅfžî%õ!'ô©.Ñ+že#õµx‘ú€þÉGg”rè3RŸ†¦ ‚äOæŠ?Z—ÆRØú3«´6÷YÈ“¿«ÿÍCŠ"©apÑ«ë[ÿýÕ©ú°Rf Ü¿7ïë÷çýþÙ_¿¿à7L;9¹ÚOý?0¯þO§fâeüÅó¿Æ ýdó¼;ã‹ç'Ã>8¸߈GWùº©-¡‰bWÉ9ÚºPc)¿š”¡I Õ¨ä\ÏÐT„&L¨|«( Å£\ÇÆ®ðÁá$°X y@mµ\®%º3PTKkƦR—ç•÷½CûbvEZP(W¦+ûų°ÝU<‹ Å/æ¦äм ô§WB•Žú»âïʱ*­õ«B>³—¿ËÍw⻕ßÕý]föhŠÿ`{á­…øËwö ÿêYL[ •/pÿõ ¿þ`Ñ×ï/úèÆqÙ€[G”ÿôødö¯l-äèÇ»,ÅÿoÎ|wûÀß‚=F*ߥ¼Û8šh¨¦õÐ$BsnTÛd»Êš:¡I*: ñ,>x‚AŸ鹩 ² úþQ-[¥¢£1‰*ÒUÐ]Ðó) úa0² %¾Ð¿sa%äBñ,@‹ÕúË“£ÿüøè?*³Çßߥ6VfûX ÕŸ™ÕïR¯ß¥2.+Ÿ9:—ÌáïýC‹¡†‘ʆd¤3 ¦{rJå/ïžÀu¶Tù,Ðÿpñ??<ço-zíŠá{jòoh,|w稯Þ;üúÃÅúx±¦ø|ëh¸¼ød|>¾ß…o”*¿´· Mx·\åšPù`ç`¬“O3W(ªµ±4ç }¤ôêÍØüºîúôú¬Þ¢whÔf&{Bß/‹Á‘©Ïµ¾Ê…Öô7•†ô1%®€AÝ?;5æ/\ñ[þî}*¾ë*ãŠÙßåÕë±ú»“-¢¼ŠÍìA2Okáæ‚ Ó}|Iã¿<;Lûîÿùá¹ÿüpÉ?¿uÞç/œý××áö¿ìç|ýD?WüŸ>6õ¹µû ð™7µ"Xæ©òû€Ð<äEh»åÄ9Rùxj×µfIè§ú[k3ãýœÔžLÓwÿð©»}Êb P.7xýmµ™:ôÑÏYb@?€¿Ë˸d¿ª`m:eý.µé=/Ú–hñÝ—ÌP+~þîM0{¸âGjo]>PûúÆŽ¿¿9Cñ×îÿù­óµ%Ðâÿë«s_¸´[ ¸w©ü~LhÞ7Œx9˜©|d$f®ÀvåZŸAÿÚÖoè³\†¨´>òô®$—6†¢ðLãý’UMaÅð¨´M›ÖçE*”»æÔú^п¶5[‡>&v|þÌXDŽ„ÙãéïÞáU¿Kc)„¿ëj[âçïýžþ.hþÀø.hu":Éß…Yr …¥²Añ#ÝCCJ>ºqì×ïK•ÿ-¨|àþ‚~ûö_¶,èÿ绋޻vˆ¨Ëß×Ï9ÀM|²Û»EÃ]å÷B“20S~b8F?ôY.CfÊÞayèSÁ oGåê>«Mb#u)ÇýU½KïÐ&:»*=>Ð?»‚´þÞáy:ôÿÃÃ#?'ůü]Ðü2¾Ke\¬~—Ú–ðF…c)¬|f+­ù»hÓ)ûUifO2ºõ»ªŒ+zW™=0èAY^W‘ nç·N'SGBé?¿½”C;è?÷gwL96º»yØ9Bå3SÇònû?¡ •SfêwoŒé¢:ôo[è}Ö}Ö–ÁôÇõV ƒ~rŒ)N/ôŽ+t@Å"ÿª+þˆþ.Ðï7–Âß•mKüü]Ðüžñ]¤µÉ|æˆþ.Ô6”7 |}eã4+rŸ\ÚúÅ+ ÜÐÿË3sœßˆ‚}²§&ﺫ|2ul}ùòüÝ®ò™·Ð'„& ÃbC´‘·,]'jBœT><´‡Ï«Ô¡ôSǃ܌ÚÍÕÉ͵ͽKîhbmK5Ÿòvs /ÉMÍôï^\‰ ÒŒ×çä&ÌDôÇüò…q_@ñwÅß<†Ñ£_ÑüÜßõh[âçï‚æUJþ.ÑüÒßelòw‘Å)¡ÏùM¹¾|ùl‡ÊïeB“b·¾Cì ÕàVYš”®c'4Iåã Æ\5K¸G^º/ô§EËðèÐ?·¦/èÂÿâšú"‘!öh.A.…´ð †ÛüÛ‹ã¾äŠ?¢¿kµ-ñówÆRÄèï2³Ç3¾;ÂJì¡ø®ÛßåZŸØ}±¾|y>Ì!·wkařнËçÀÅ6!Â/]GšB 'Ç=ê›FæIè³hîÖê @ß/š«1qür-þâåyÊ»ŠÐœ`%åÇDhRC5Ÿ¡@‘'D8Òuô MEh’©JúógÆ`¬4AŸrx®i΀¾Vžm"C[/”¢ûýÍ9)V·M­­¾#s3šô5¦õUîlÊV™›âþí•ñ}iÌž—¡ŸqòwWyç3wÅßÍïòwA\ÊtJÚYôÅËsãCh¢¡š«‡&Œ7wÛd½‡¦kä-³ò}Òu()ß#CSšJåÿéñшg è祢 cwG.ƒþüékªý GS{úZQzo¥é»7@^ZR@£Y{¾~„¤e‚>¤èCI@U@jWU†€û¿½<^(~åï‚æ÷ÌgÍܧMç^k,ETþ®6–Âßõòw)­Í3Ÿ™ù»­V|——<¸k­/^žÓã„&&DhCˆÐDõf¼24¡)UþØŸŸÆ _’Nùú€þQý¸$-¯o͈÷lè¨ÉM¼þõú¶Œ ËQ—ªÜ¹°â®E•Ui!ÉRƒìþðèH¥ø£ôwi,Elc¯pŽat¥p´é¤ú]*ã²êw£ðwQ¶Âs3­õÅK³{Фù‡ˆèÙFÞò)çq!4aåÃ+ƒo†.Ÿx|%ôQ¥uó¤b;ôe*9c"¦R•óëúÎÇ¥=r^]Ñ TÕæ:†Újsyÿ)ÞuPµ^Š  xR1ÕæBU@jºç¡ëÐäïzµ-ñÃÈúUaôówùX ÕŸYÅw»àï"[Sfð#³­/^šÅcXýÐD1J`ɹÊÐT„&·òÇBI¡uûæ2}ªÍ=6“‘úLëSYzôŠ9(A6½Ëþ´²ÞMÓw SÊÒÐgƒGåú5ÜTЧÎúª, ÛÌ2ÈÈ‚~YÝÿþú´ýˆÆßEæ ­_U<Æ0ºÇRèmK„¿ ¶‡÷«ÒÓÚ<ý]£ô‘Ìl­/^š t€š(FÑ24¡I*¤Ü3—Ö"$µ*K?y6+Çs@ßÞe?†¶›Còz7Mß ýö¼‚>õáAß'ômm–}›‘ôï\PIÍH /Fí—…0÷P‚m7{¼ã»]ñwÇ0zÖïR·6›â§~UÔ¶DÔïÚó™5÷@s!Oå·Ö—/ÍPé:ð ´¤üB³² =4{Ðî¡òAKÜ¿¸‘<Žf$¶ñÑÖätg3Õl¹´Ú­ÿ…éIH"í~ * è‚Ú_‡,?™²Ùa¬Ú-±fc¯Žðw©m‰èWEim~þn7Æ0êimø»@¿«~—h~ŠÑò.k}ùÒôÈš 4Ñ]‡wéÏ„&ˆ8à±Pn¡Ç³6—‡mñ,Ñ‚Êc¬ÐÞ(&j!a>¥ïر#àeo¤€®kv"šë£ÖÆ7oÙ'  M¯¨}Èîäì´7CÏô{bf':þî£^õ»¬zÝ ãõÆ0Zóˆ\c£õw~¯ø.U¢xõ»|}ùâ4–”ßµ Mša ÔW„&SùÏ…WëtÏÔ¿º>Ó—Ô÷ÌX›¯¦KXËrºÄEõ}íãü—Ö‡£Ée€ÿ—ç $~½¨É#ùÍGæQ»%ê2)ýÝq*¾Kim¬~×§m‰§¿KÙüÈT KÁ Yô|f5†Ñ=–"ÀßeÙü¼q)~ü——™[ë˧öH†&¼•SÎ5BS޼ÝÞF]FЪZ޼¡äÜMh’©õô×—Ç_UÖ™Mtž²H}æãºjÒEÆrT¡Ü™}íãôÏ*Oü¦T m7L.´ºPÙ[ñP*â7Q°¢“<Ûë3Yg?¡øíþ.h~UÈâ ù¹¿ÃFÞ¸!Ö1Œ±ù»¢~¦<ïÚ`­/_œâPùñÍÐô&41ÿ0Þ„¦TùãÑøÖáãîžï`6Hü˜M¸Ž wí†õr)ºŸÑ?$?¥;ã$ yž. G®øY{áHþ®­mIïŒatù»’æÇØ]Þ¦ÓѶ9¼•š´±…_¾xaJÜKÎiä­ç”sww6ÈÑPÍ¿‡f¡I*'3¦ZôÉÇÅ¥"OfÓwˆ¢뵊^k·ìé–„áéF(äè8KCsõfËŒäYX ÙR—KCèmÏ[º²öÂAþîc¬_•Ö¦SKÁêwE×ô±»}ÆRðù»Ñadm:ù<"•Ï,â»^þîá@ͪ¬õÅ “ãRrN#o‘yÊGÞ6ø§ë´F3òÖ#C3¡ +T\2LãÓ}\dê™RÌÒ•£¡wÆ8zÍ2Rß>P(­/¹ÚnÀ€­Mƒ¢í3®›ûªÅ¾žº|ËÔbÙˆJ¤3`A_ú»Üì‰ÕßúýÇ0Ââ4†‘7‰¶%žùÌc)xfj[¢ù»¨âå]c­õÅ á È.#±šÔP-`Ê9š4ÿðÍH Õ #o Õ<34É»U*'3qÃзú®e&Ÿ]æÈÙÔªrYi"ìaXÅÑÐ;Ëñ¤ôðk/iäž®‹äA2y‚«ÐL!j?O2²šÎòt ø&è;ý] ÿy§¿ЦSø»c)¶{´éD)²x·-qa¤2.~UT½Î»GñÖúâ… Þ%ç>„&&ñÑŸ¾CbyûÀ‘·ŽšžšŠÐ„©*'ó˪õ<Îìmx¨ïH><ÔMïÌ©ì‹Rt¿4³‚yºQŒÓryº®˜.Ð6]º¹ÿìê:ý¸ù»r #<È ÛXŠîù»dö8ÆRèùÌ·túhÆo­/^[M5òV›rN„æóËÈÊÇvEÑ}/dhê„&Nc„ÞÁDß9·L7ô7¦{úžÙ;ãXg}0›~}×Fö]š¾{ +Hí’§ëmî#ª¥Ú°¡fåþÅåô¹Ùãéï2¶ÇêWÕ-7.cmimš¿ ¯—OF±ÖÏëNMy‹[ˆ=["Ö4ØéMBS©|¸dEÓ5¤é³’ÜÍaCÝ6ÝC%ÆÀL`Ð÷÷q«3{·ÝZ°ÅT‘‘ÁÓ ž­õemØÊÂÔr™±û…i(XÑ¡où» ùy>3•q‰ú]†þØýݨÇ0[Æ0úù»|,±–S`«õųcãÝC“áÞ#C„&ˆünôÐT%ç*CSšJåã¾v4dª\e˜¯Û2= }ý©–¡LG èã†á\öŸxÜ úµæ(ÚÍ}6aEW1ŒÉ}›¿‹Qj^ñ]ÖÜ1Hu'÷÷w{f £ÍßÝ «Qpv±ãë ÿòôظôÐì.¡‰váÚ”s}(P4„&›¨‡Ébßd‘G=k #Ámiúþ†¾€¾ÿ­•MýÉÇ¥¸¢ÙÓuézϘàÙË”ÂIMq,ÂB{:Ì]R禒ÎP'ú9ÑI4?ˆÿ˜üÝ®adþîš8ø»°ûq͘§Ö_ž£Ç°"õÐôðn{–ÐD»pÙCÓ¡©Íp+Z SV­>›|„Ö¾Î|Nkzå*Oµ‹†Ö§ÎS=H²P5¿OÚ­2sªdLw(o´ß™ã7YLŽ9ôšC⾓Ýç=yöÄÑkŸlŒt@ß×ßEÓž'Y›N«?sTc£s|´þn7Æ0÷茽ª/ÔòYCÆ;æÀydhö¡‰é¼¢äÜòny Kª|ÆÂ}|´Ã²vÐS?”tÓø"Ñ€Ä18Ñ1=.ÐЧV›£û¤ÝZ0ôáw{šûØÁ*MMu'óè6¢ZúH9$0ÿìÄ0'ô»äï²lþxaôšG$¦Oó1Œ˜Òì9†ñøØ2ŒÝÕÄP >ÿehbä­=C“š ú5¡©Næw®mUA\X;+Ó“ŽL+¶Š5kÇÖgÓ–°)r•ÝÁ¬º^n)S¿ÛmîCñúì>?UlQ2â<2µ˜fè*žmØÜÐÊßz #æ¢!˜ÏʸüÆ0Úã»]È83T¤é·edõÚØ¬h@O¯ %'z7&% ¯›ûÁ6ÏísÊV¤&ÁæÁ*Õ}ycƒ'ô£÷w{| ãùÑŽa„^ÿó“£a©õ›ûG8&DD äMh®íB“LÝ{àÜ }d"blÖŽbô)kmh¶ê½sYsÿóq ý«š­uïñÑÅlóÀ@6/ÚzäÂ*Oè«ø®åï¢m‰ìWåKÁçïRfÝìÁØ×.ŒaôAt>m:yãÔ1þññQúúõ½ö9pÞSÎiä­ÿ”sAhÒ0, Pr6TëêP 7¡ 6™'å³tŠa)•'rˤ"}P4k' ZSÎÏ¢Ñq ªûSW?æW‹u‘Ñ@ÅŠÑÙ<:ÏÃ…˜Í#ÝãÓ‹ý ÏÌVÈBùÌö¶%Üßõh[â™Ïß1Œ|þ®Þ¦SÄw'±\à@ôõË»†¼…•/%2Áé:”Ī5û¥ëxdhÒüCÞKê Ë„¦þt®kËÆYÈ ÎmœÞW–‡»ií@ëôÇöC—6À¨"xº¶œž)wßmóЈ!JeÃÐ¥)‰ÊÙÝÛ‘}aö¸êw)›?Ö1Œ°ø»0†ñé¨Ç0Â…ýí#ŽªÖ''†¹'DÀK†¯ŒœÐàtžÊÐäói(P4„¦•dõæD0›ÈCƒ‹Ç·<%Q54ŽRÖ‚‚¸®ü>K‚Ac[FcŸ´Æè¯ÍJÖ;RùÛ<sV˜³;ÛêÑpUMÆòäDåì¢+Iômþn@Û^¿‹¹–0{Ð4ÏK!ó™#Ž¥èúF–Ø#ÚtÞ5¥ίï³ÖÏŽC=;Nì ´òÄ+Ý%çQŒ¼í¡ M/Bóe'¡©žÎçÏŽ¡‰q8±ñø–%'^Ó–C­GôÚongLÞµ”¿ »èÓBýÞ› èé5°èë vç9XÎY´Åb[¶|ž-ÙË’¹³›D‘]”{FVü²m‰o|è÷ÈA°cy>ó»jþî•-Ž1Œ/Ä8†ñî©¿¸{ø/µõãclô9#4û³*@‰¢¿T>šÌÔáV>ŠâO]PGIùî‘·H[yÛšîPã/îއE*çö%I‰{†çú0h¡Ý¨õÈ!Ðù~‘,·£¬5ýÖÇ%ô_Öœáió`7ƒâDz"ÕÈÉV?v?¡ÁˆmiŠ¿|÷°¼Kp\*ů Vüý]gZ›¯¿k¥°ù»€Ü7Ö1Œ÷''‡éëã[;ÐÈíLí Ü+SMXÉ9Ã} ón]„&+F‰œ¡Ù„¦z(ßÞß®8MœÛ'$Ü8®PUâʱYvWE²­EýÖÇ%è/¨mÇõ~lÔ™GmYù<ŠàWI |²âc !5]ñÿæÁÁ6ù»§ÇàïÂìQ‰=QŽaÜbadówcÃ{-å~z»µ~pó¡ò§W §Õý³+˜[/ÙË»ueh‚ЄwkõÐ (9#o£™rPr®b·n•GðÊ•Bå§&âñá!žVB-wØ`t©ò%_ˆZ-oÇÃÚ!ÝG&÷Rt?+hlqª°yì©lzl˃àŸ&“¤ÅxJ ¤¦+þo\Ýú]ôwã8†ñ’Ècï™Qù££?:f­ïŒØ­Cåsﶺ»„&Z-tiÊy¬„¦z4^XEa,Rù0xt•O©šèN@5Y¢©òXWÞŽ¬H$—A¿5£9§?å*»7€ç€-+ŸI dó0‚ßîìÊÈ.±œÇf—BpºâÇ„•ˆÐï‚¿Ûµ1Œ‘ý]¯1Œ÷SvÃÌÊÞ2D_ß½q÷n+tï¶?šÈ†R=4õúCÊÐô| ¡™•/Uþ¥ÉVoMÁU“µ,e=AßÉ‚ƒ»¡µÆfEïéª[V>:”¸þ È®TüÈýÐÿsK£¾#¾Ëº“;æE=†ñ{4WOk ôwQhÕï^X—4¼{ ã}³+¿wó`,˜pXøEÜäÝöB“™:„&ðA%甡‰ôAÏDZwHŽRùx|ˆgq×Ái²äÕG_¤jú;¸°vÖ6‡ûS’¾Ï†€'Ž*²³«"»ª5•®øg—­ÊNÑâ¬U4Ëݶ¤+cy„ë{<±ÇIóo³æï:§qñB :h~=¾{ÿœJ¨ùïÞd­÷´ B“ÅnER¾ïƒ@-5;ôìÖ•†„•ïRù¬0%ÀÁ•Ö òaíœSÓ_ã¸ú.XTc’v:»<²Ë9e­ºgxëÀÔâI5“¸ì„âONOŒ"]=`ßE6¿§¿‹éÓžñ]éïþŒµ-áóˆnîmKnBùÌ”Ö0–MoÝÀʸüÆ0òø.\X¨y0!j½w]›¡yN¿ 4©¡R¬õúCOÉ£BåÞ…åà£ÁåӃÞ˜0§1ë&žªèè·£})4å @çohÉè˱YÑÛ<ã‹S±SÎ.2øG° ~š5äd9¥â‡t·fg¤²V¢R|ä-Qp÷汚DÔý>þ®Ö­5*ô(ãB<ß{,ÅžÁð?Ü5È£m ¼Ž‚@g›NŸ1Œ@ÿ{ÛôõήV_Bóg†f/š4ÿé¥ÁšúSøÝC#¿|4È ýFŽ›üpò%ƒsôÎ Qª|rp×·„Ûú¹KÛ¬aœ©‘º¾,§Kñ¯–Wši5MoÑ ÏüÝdŠp%o© ˆ~ѯ*âX ßíš¿‹<ÈàD§«mIÝ)—¿ûÐüª÷®oÕ×Û;[‚ M†e•œ¡‰t1Hšyëì¡-¡‰Ö]ÑšžÞ-¶.²”|d*_š:„þ2MeÖç¥n‘g³òQÎT~Pîúæ0zG¯|ûì•yi‰Ø©ۥ◭÷Qv "».ÅÕ¨¼öB'k‹ŽtůE¸"òÌeµž¼²žL¢¥µñ1ŒÏõ‹1Œ`-ß¾¦åík­õÍmÍZºŽ 4)vûT¤†jš¼w¬3)ÿp†i£,:´_G4U;¿º‹¼ÅÜùàúC¿ MˆÖ?Œ=†¥«üa|ä”þƒ¦i£ÊB;FçûYùŽ.kСZÂk›Âý¤ÛZ„M…»]Óœ›Ç6K]V-ÚÂ[có¯“?±2”ìg͉‰É”G¸dN[VÊÍã >{:Èø‰¿{¨Kþ®ÿF4©}sG³¾ÞØÚ+1,š؃šÇ¼24QwËU> ŠžÐDÞõí9('‘¯ÒHÙ/MJ¬ðgdB)‰³ê2v +ß[åS¾Sù-á%ý<Ž«oˆÅÕéÑ(þ…™Yܬ÷ûTœ~í¤¢›&A¾‚íá9mTÅ‚\‘­ÕaÕ–ÐÓbf÷w=ÆRøù»ÖXŠ¡Ð”–¿ ¶':—Ì?÷ÑEÕolkÂú_ømú¢ÈÐ yÛš3¯`\ŸŸvum†gŠ›G| žñKqÏï1Œ<ŸùûîøîÎv{>3ëN.ÒÚ.k¤ø.ÑüpXY|—¡¿æÅ õúzþòz[†&y·ª‡¦h±‡f@†æ°ˆSΣ!4ßÜÑ‚®ùP4—ç°–ù2M±:ë ÓœU‚–ñîädꢼmTþࢠü3d¼O¯L¿rp¦Cå¯i„k«îí»×c¯i ëŠ^u9WT©‰Ãsµ—-™Ytâç5\Çç”m•…,Êè'ô£>è©•5ÿp?Þþî3}6†ñùËëøªç«î¹5u.ï¶Î—ÐDý!›r®š×8†ÅŸÐD±ÄÝ ÊÐ B¦º[†{^"Å(¯SCqV«ädž©f¥-¬œ]hè‡’έ é*ÿüäã¾Ï©N#Å¿´.„Žœ ÏKO:¿%KÏicS·ìmªt³åý¨`DC/É"›?3v'Í]úaü åÃôóFÍß•ŽI oocXdimb,Ëg¶üÝå Pü¨2âkùÌjÛzúR6ŒZ£Ä“мÅIhâL‹†Ð¤t*9ÿÕ=ÈÌ¡†j ÷¨D‘&>~Az¹*밬ĩE*9YŰvÉ›W—‘¨QˆxI}VþÚÆÐÔ’¾žë2¹8ueC¨=7è°JKNœZÚ9J¤6¨œ6š¿³Gôê‘MÚ¬ FŽþ[Î*Öak2£Ÿ£ŸÍšfèOß^ŸñÑA[~d7p ã=Ûtúû»H ÷ˆïÂìác)p4=µªV­SË{–ÐÄ$IgÉ9k$è$4aª9p*)CÏ·T„îùh îÚŠî:›ÊBGg–¢ä*Ÿ2“Yššž”ïHN¶Òò¶Ï]Šçï +àfDAʪúÐàäãÒݤ%¦:'ƒ R7vÈæ„<™YMuš=ZZDL}Ú˜îç³™v4fT–.¯…~ ´yry ¨ +ÈÕsc¹âÇ•Öæ5–‚%&àÂlk™wºJ{d(Fh‚È'+_N9ç„&&D¼:Y wÍ+cÃQ8î%¥ÃYüPÒuƒrXÍy ÷ÊÄgÅ(¸¾ÕíY 9AJ=3%1{ Yú‘ˆòŒäKš2¬¢u­[‰·Ù£U0ZF?Ðϱ Gç1…PE°>9á#ÐÖè‡ñƒŽ7„þØü]T¯ó1Œ˜¨ƒð'ÜD+­-Ðߥ1Œop³ÇÏßÅlÛº¨Z5TCÊ'Yù~"º?ˆÇnG¢Û!Ø-š/îÑ$Lá©Né@÷šX$:'ksÏÉÄWijnS‡F S:« Bshö¹uá‚‘§ ØAÿž•š8§*K’U,VF§Íì!£ŸZ*®SŸƒÊQè?6³lci:>Œîä–¡½Þ¿sã þ¨Æ0²ÆÂïÃ&æ‰=>m:=ó™¯öÏg^Õ€‘'”ÏüÈÒ*Çêé’sÜȯïîÄ4yô¤ð d™:/usã–J6õÖû-UáÛ0k>;uY‹­ÕážJÎÕl,=)_¥ë¨1A*mac{æäÒ´ô~Õ8¿;@×ß‹S ]zÖ·2êJÍ_A1ŽjÙÀêÖ}Ìëd™e- ëäÈ~Òý'T^Óší@?ì~ sYèñ‹«š±Ê¸<ã» ùy! aP«mItc]þ®•Ö&ÆR\\ÿà’ÊϳÖCK*­t ¤MLˆX׬æÀáHÁÄЩhRd’ú÷Ðé:Ž9p¤òý&DüùÉQ'甂Átãѫݹ4Ȇ{­…›:÷*MÍÓÔÁ™Ü;bX«›ÂƒóN'û&!¡!+yY}HpÙoÙ–¨ FYº.\^Ö¸AëKN./uåWèÇD–ƒãE×;eù0ô—¤ãq“ÿé£#•¿Û•1ŒGã3†ñþs*ôõÀ9ÔC3ˆÐÄüC¡¹KŸr.Íu ¯œòà†jH[`Vþ“£õúÃíØ=([á^Ø÷íö¹ìh%}/q/¢WµµêÍɵeõ‡”ž)‹QxšÚˆšˆèÈÐT™jDh^ZŸžŸ6€âXþð¯ÉLZÝ(#\ZbHåw›=¼ŒK7ú-¦ßîòúé~¨ÿëå*¯—ЇŠG‹Fn.­BŒF¶éäùÌ4‹7*ôKÁý]¶%~þ.h~ÿ1Œpaïš_¦¯{Î.÷ôneMß‘·¾=4î‡ÁÔ±õÐTÞ­–¡ BóÓ‡GÞ>£b¹²4Þ‘Š[Ç\““ºox>ŒI ÷:•Éú‹ˆè™ø¢c¸VwË3ò©ä\ïî®ÓFÚ²ÚôâÓÉëÅÍ,oáDó0{´´6QÆå2úӯŹTË*•ãàÖýw-ª<<©eÑ"Ú•Ÿ†Qäøâ1ß4*9·ÔŸY›>ÍÄk #"\0QPÈâ¨ß…Årv)Ljµîš[¦ªõ¡ù¤ 4¿há A,l–Œ×Bh0o™VâÆ½NeÚ¢Wv_7ñi:Îê¸LVÜ_P“õ—óÙ«Ÿƒ¡Kk~³Y{4ƒHï̬ýú8>F%úï˜[~UU<Ó!U ŸŒŸºŒw¯kef£?³Hk‹} £¬ß¥øî;*¾‹2.m,À}ûÌ}˜]Úû„ægOynuÝUUaiܧ3ù9<^ËfÎgäCß»qïIé÷º‰¯ên©Ëˆž¦¦›: *ÓÒFMJìƒV¥;ÒÚ\§ªe±JxÇÀpTq.G”—›ý,è~¬=¹krRt%ý–ñƒ9è× )~—Ùã1†‘eƒaØ kTènÓ¹k÷Fß}eMRùo;«X_°7z¢‡&'4Gxš nM+FŽÍ¸g©iûGæÃb´ãžñ˜Á¸ÃQxk2ñ9‹ïmâ#•Ý–¦Öž^–zZr›Ö.Á®ž^–ÆÌQºîä:©zÒ$"ŠsE~ï¿saÅ] +ï^Tydr ´šåø*ã§,´¿3MRcÃàï~èï¢qÃÑ)EúºmZ±“Ð\߃„æ·o´«5‹){‡‘““²©4ttz©'îeª‚°ï>¹¶è¦êvm‹oc3eO5ÉêŒ.h‰:±ë}ñŽÑ…©:Û#¸Nnô;™~ryE“ZÖ°zóë~B?2ˆòdz„î¿c^R>¥éÏŒ˜³äûn«É@cCÝßí¹1ŒhÜpdBᑉÖ::¹È£ä\Nˆ€Ï€‰w9‘ D>JoQ/öÑ ±šY`¡‰rr˜G«"VÒÈÙÙ”ur>deÙ9,OAÄ­,>Ǻ²Q:2QGwmUàV7ñÉÔ¹¼)ܘËÐeŒõß7¶æ¦àΩ~WÍŸÓ~1{Töí:á-š=Ðïi÷‹<ð"ôCýï–ÝOÆc~¤ú‡¼ûì20<¼[[—üÝ^ýª¨;¹æï"£éúºeb‘ç„ß’s†{/Bó6«äœMtTW%ç¿8Ù‰-G–½òhy†³ïŒ.°”ýÙ"?GÅke¿XîíT¦œu®'ê÷ž&>N~ݪ³zû/|»yeUÉk[X«6â…ä@?ëÛ ýš×+ù~ÐBYnú…ñsË”’ …é–ú—Ô' €½CrzÛPFtZe\þþ.ʸìc)¢Ã‹ÿ¦Ñùú:<¾µ ï>¡ÉZ-p+C4~' Í÷¯oÛÙ˜EŽHOàÊB@æ±n#GËSˆ÷¢Ÿ¨LJÔÑ(÷4û–ŠW4„F‹‘n¢ÜïíÈ[ZÙh5*t»¼Ý)É~OÝOèGƬÈtày><ÇÓîUÆÏ‰ùåÛj3AePÂ2Ñ•ýsUEèÕMŸ»Ë¸<ü]žÖæçï¢[KñŽ},Åkëštæ¡¢Z‡Føgh¶,BË74~ûºŒÊ?0ä7 q´ ÿ„ ÃŽÌ =];]X½©LZ8œ¾¤t4Dý®i΂M¨9Ìô×îûb,;C?§>ÉþQìç‰Y%ˆõ ›7îc__ß´ohî ìuãÈ|÷„ˆˆš,v{sz$²9p7ë9gÏs0Yy!¿åÇú9Ph@#€X >ò¨s`¸wDmeôÊrmT¥'´ìvÿBÑ‘„fRÀèŒ~è%Ýo1žTÕå~žêã2~”úGÔ˜ ¬µÈ@'½Bþn cYý®h[=mkÓÉó™Áñï’£/ =aE Ľ[Rù'D¼¹½åêº è¹…ƒ›åFNÏù³3÷žÆ=åçÄŠ{/J¦Î´2PÜ݇Ìiô ÆÔ²t…~¨ ¤y°ÔN·î×,br~l@š@Ǧ!0ô§ÇF¡¼ƒò™cÃÈ¿ß}cSóµÍY×¶X E!Ž‘·„æžh Md°ížG) ̼¦ g'Œe/Œݸ§’+†ûÉb [ÁßÛí{îyS÷`óšÏ43Vü7å¤\ÁW1ËÇ[÷ëœúY²CDõoËõgêÆ¬aVí¥ŸÜ Þ‰z—ýƒë‹l~8ŽÝÃø+[v6fêkw{¶2u"š\š 4áÝòš 4_¿²éªŠ°znÞP ÛÆ’ÐÑ¥–…ÃË }•½Ó¸·HL6ýŠR2ýô½+[#*2N‹<äXÑëëËÃÉk[1‰ÑýNÎlj~ðr™þÔÍÊJyàäÃý,ö‚ñƒòSkÀ#¤ ˆÂ´S+jÿˆB–‡F‚4$ÅOý™fÏX „¥œ¸a‚ë ±U>å¼ëšTHy÷<Ö jL6=ÌܤílΩe·p¬py´Ô2M1÷~ƽÊSP<¦SßÛ³tV4†óWýÈKKZÑ@?Uu¹ò|dÀK¤y²âFÁ{ÊúF†~I}2ò‡sÿ:ÿƒ ãç²0C Û™¬ä—Ó Ì><®XgŠ_•qyæ3sô+WKñæU-hª¯kš²Ü#oc"4¿{`ðîA9¶AÓôÉA¿V?Î.F^&Ü Ð3G·ì9“C žÆ=M;T)ø¹þ^·ïí¸?¿.„vzÑ?wóJ&PrâùõÐOy>ÔÍhåø*ÓßÁüØÔ¿r]àÈÔâËóX§ G?XÛª0æ Xõ»T½îãï²i\{#û€{@ó¿µµycÈ&Pk{]&y·]#4_¼¼acq.ÌRó¼iš]Qœ#Ç=OLp¸³NËÞbr„‘ãžJlU>¦#ŸÅk•_«5œW•žbÌœ®íf¤òA|º_d¹1ôÛݬlfü°^nLý[åíšýã³p \U“c¬·3úh{°G.¨úí}±ø»× y ˆªê -‘Ö)»ÝîžáMh‚Yº}z‰²æIÍãRqÁ¸ìÍYÌfŽ ô6 '¢²§á?–qo•žPžÚ¯UM3Qfn´}×`o½kbišßoåxzÐ>‚÷t«Fþ(ûGsDüK; /÷ ËcHJa3]{`ÿðÜŸÊ7¸Û–Š2Y°ïî1ŒÈãG*¾pŒtÐüàúök3™)oG<:â/ÈÉ‘¬¥®é9‡£¼-{ƒi9v§V•žè¸§1·h¯0¬àŒÉÄì.º#½¿£¤§ˆv©<ðÇ`‘Eu‹fú ãGæ9 õÏ­Ê÷Tä%>0÷WmëàN0ך¼Çm šª¢•¶¾ b‘ öæÕÍÒßu™=^þ.P¢¯Í!aê824Ahîsfh"oÊþéµ°ìu Ãå±Î¯ièKÇÙiÓó–!:è-w–Çhq*ºi{XNã^Î{sãÊžp¿¾-³“#=Oóï±H .;yC»Èt ôS†3ÕvQš§eúÛŒ»úçöOT€’ ø!€æ3[ª2ÐBíh@¹Šs ”„~󿺓%ÏPýnðF˜û _à4«ueI:Lt1 Jב%ç?¼¹ã– …8ȪÁe⩽ýöÆ¬ÛæXj^9²JÓë î¬ÈM`–½ W ÓÓÈáN­•‡Ì{Âýê–ŒÒÓ£™B,Èì×¢ÏúšÖ Êt`è·‡{ÝÆ§úwØ?ÊP'€â@)HZAlÀøÎÔHSíÎÙHIdY‡†ÉèßUþ.¨Ð/ú‚ñYn²»KʧaXHS„1¦”®óÎŽÖ­Uî ñ|†<òý£ ”k^²– ô‡ÃAO±* ôe/Z¦iÆ=k5òžp¿¬1œØD¶7 rj–—5…ú½^@€ú×ÈVä.ê]x浄 œ`ÐöÀ¡ÉEhð¯†cÒ ,lø¾¯nlõ‰“KÁç!ÏLMŸF…÷¯mý¢¯õ©¬Ez·~š-­†…C ^ŸÖÆ&3¦™VB5„ºm#¨ziÓë wX86G*{brh¨­ÓÈ‘$&åc¢3øéÙ;­_í%ˆøœÚr|}ŒÎüpß×¢>…õ¯ì×à`å“ *ÿå{ûaKu†Ž~ë÷Ä„3KvœåQZm:íþ.*­0 O_ërR=U¾ê®óÑþÁ7È÷üFìíMYÇfYˆWÔ ©y¢Rl½Ë¬W‰Ç`‡á*ÕDD92‡p?»ÒÀ¾·¶RÿfV ÒÓ×øÑ­YåȸéþRÞ+wÔNå JD¾è€-„éF0<<ḣ.ó;û9Ì¥ø¡ÔÉg c8²R”ÊGðKÖÆpDolnF©çÁÈÙ7*ŸüWB¼ éIÍKÊR·éU š·…Ãioeïeä îdÜšñÖ[øìñï[ ÒS:¾Z¦§Ý÷ê_D¾¤û«‚_Î  ±@dÑ!@ž€cœT„&Mž çøüšzòwcaÇ;Þ‚Xùžš.®ôÛ`hxóÔb:—<OjžØ»MïzÝÂÑi‡²·ŒfÜ_Ñ–9(Ϙ=Žsï/hÏK‹ì4~´dOù£B¿þ@8Á´¦2è(O@ìë`æÐ‘é%[j|ŒŸ„„cSŠá›:ÆRÀÜwCß*9'Bsÿì:òüŒœ«›²îTJ¢t¼°æ)Á²m,G–Ì+:ËAÏzJw¹ 6Ë^Sö±"#g]kFMàh >BÄ™ôµU™ÉëÚD®3~¤úwRŸvûGþJHø6+(p¨£àº¡¹~ºy[uÆû×µ“â'ÔúŽúÃW64¡uŠ·‘JÞ;2ŸànY5\Ç+ÃF¨y>ÇJ±7¦WŽÊÆá wº³œ¾–½]ÙÃÈYÕ>£ËjûÏþBïªf ß®þ%õé´ýO0?”@,²‚è TPÛ9@17‡è480¡ÐÏøAÄS+j¡þ)¾‹J+7ô‘á£Í{çWø9Eé'‘O ^Z5\Ç“a£!žlÅÞˆ•]ÓÛ@?‚ÅIDNޤ/ueÜ_XB#½þóôÏô+á¾a½Ä‘Ô¿ˆ|ñR/ ý úßH7Àv°=@Þ°Øš9$¹Q p³¿ñsd|!Užñ€>÷nß»¦mO{N€‘÷C‡;ÙñDSz!^³m{£™74ã„Ì‹»Ôsr´pd Ü/¬FY­Á}?ÛnªÀ×¶dä‹Ù?²ÖQmÖ|ãdé‡B|ÙŽqHÇ`WGîòÔ$Oø¢ˆäíí-°ãÿº&3*ÿ…Õ ëó¼Ðù»GäsŸUhwwVÔñ╚§ÊeÓëš^€ÞËÂQ–=u1eµý òÚåðß4ÙÖŠ‘?ŽÐ¯ÇP>m—¤íËrou `'ìW°&×›ùAZåÃKªÜZÿäÌRĪ<7Ìú¢´ý -¬ {Æ‚»ñdÍK5¯Ê©ei·é wZ8¢‡áÞ”Õö_Ü«+ë,H%ô[êß•û@'€2T ˜²€ª{j¨£€\ZÖ@gÂä¢ãÇ;Æólqâ¤ÄmMYR¯3¬“Ϫ’m”OŒ…xra¥š'ÐãˆSì'èYÖ±ËÂè×›²Ú€zy‰˜9ŒæÜœÿQÉ?êP päèV¾È"‡Ø¾ Äi ïÚ × Éñ3~"¢U8y×ð\ÐÅÀAPj žb½¯lAY’#«Ì®éuÐw)z¤µ±Þ€§ÉxŸßn^jY8鲿0”–{è`ÚŠ"7Àæ «s@ÚBbhÛ€C½€Ô9-ú(Ë’a^¸PíJ»]£œWB¼eÍkj^•S GVÚô¤é!ŸË›Ã&#­÷ÑÙÓß8(7‰Õ@«kr‚~0¾{@™CÚ6Pα}30²ˆ–òÇÛÚ³–KãFÎö!Ù ßÂ=å"lIF·dÖ¹v·Áìx¥ã]ˆ'5ï úf6«^ëLFZO£°¯>_L𥠀Yް‚øP~0õ:§TP=@™ÊÒY%L.²r” ²îµcXÎêÜ”µEi;;Ùì0÷Ò?ljunÁS¦Pðv«†Lyݰ!Ä+ƒ7M!À¼è1¨yy}:ê?û깘ïí ¥'-«OgÏ[lÍ rÚpj8v?YD”‘$Žw䀵@¶TäÖ[ˆ€—@wcÜVEÌSž™≯T¶ £jOÛiµ½¦öH<<¿:ÚŽm÷!`ßÄYG}PŒŒRåÄ™ Oá+ÓáËbê\jtaÆp½îÄ: 3Ü…ójéx²æí '5Ï@ßZÛ:»ÓjÚ#4×Ûe  ÿéüŠ4}d¾)/<éÖ:óS@öÀáØÜ!þ€ð‰5jȱ¤—,öƒ²‘¸Ñ/²¯äÌ m6…uæ³r{Æwî¼jþ+kJÍãf±VÕ¦·˜i‘°qúÿ{SVòª:¾ä!àØÜ°muh±(îý Pë/ê?£c]º­‚•&Ý”×Õüeõé—Õ¥/«I«4=ÒN\Gw‡å¡¤Kj,µt[ÈvèÛ …q&Â.rl¯-ဲçÿ*]N(J»ªN¬+í®à.¼ŽxÜníR¬Ú´ ªR LFZt¨8S^•—šx~e*ÀˆØ÷€uXn1¨!Î ‚ȶXÄ€qˆú–>#[ü–ýõô œ‹”J]·d$Oö ñN¸kˆÇ}­ªI[Tžša2ÒÎDÇrŸáä„e©€È*l¶ÒضîÏXDú™àÞÂøVö9ö¥¿Fë–#.HI ë îä¹’‚W:žµ²:mFqŠI͉gØk‘®8½(eeuêJޱÔQàÚÊ(roA›Òù Ú¾K¾XèrÒèv K¬ –Æîñ¸ ~Eu*Ö¸|£íÏ0(wávQà;&/yECŒµlÛ@œú ÏfÑ¢ÍÐÍ¥>M)uu·vW ž!ž]xó~H‰3 ’.䨢åÞ êL¸dUçƒ@­ÄÿË߫Թ®Ô î ë  KÙš˜—d؃۸I`𛏴4‰àÅ–s'ˆcÁq8(Ŭ›LJmë¿8^éÒè6½N;P] .liIÒ%IóW·§n>HI`hfâÅ aÀ[œÚ öÍ tDØ6†ÔÙJyÛ´8½^0å6 'Ö îl'WœÔlÈÖž“@c(á¼¢Äó‹’Î/f‹v‚µÜûÁ¾7pVø.ý•òwl-…rèø^º€ó‹q=ç&V¤õÜM›O6à(KKXTx^!Ã-à϶´-áÜêÄðùEhqM[(g@OR_Ê. 0qIaâÙù‰&ñÞ`³—$€†óòÎ-H\‚Åñ‡EX´ )¶ßò”ªZélÇ/ôJþFýsØïò[è»ðÕçàfå&d˜Xm/=vó5\ÈxŸ‘“pN>[„B¹lûAm ko¨MbÿE¥õ;ƒ¸@9}>}#­ÉÙ &#Íà±$ØM̶aQÇ¥úݾ1ûÄû=?ÇñÇQ™ FÝ÷ÁS7_IøFdFF4PŽé5ƒÂæ  ô ´…{ý‹ójÓûÁ=›K0 Ô€öѬð˜Txô/^—`†“Èõ; §$œ×ƒênnBnr¿»ksAFLÈu›“Û#è?+'Ád¤õk  Ó$é½%üÊ Y fÐC¿~êæâHÈu—7Ýß™‘`2Ò ´ŒÖaq@KhÀܲ¹P#KM¡®£|Q•ÉH3h¸¨LKX;í¦¨Ð´‚¸OÝ\9I  %a~,蟛eHLƒžÓC™I,Å2ÂgjvBºñjO§nî‚$€¶ S"åºÍbìù18Ý$XöÏuë0$æéöÀÍýØ%0ؕ놌´F“‘fpr&H >=p'ÓüOyê™pÓæ¸ÊRèQåhÊj "Î8 Ó”ÕžqOÝܰ‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘€‘Àé'ŒŒŒáýõ'<+++øÂ“““ýÞ^\\Ü?ozèС·œ––Ö?/W•=ÀvǸqãþ_ý@¤9mÚ´à ÏËËó{ûÖ­[ûçMÿ×ýWÀ-×ÕÕõÏËÆUÍ;×@?nOÇ@ß&ýxî.£õã¶SãñAFëÇÜÁŸe ÄÆí3 ô ô˜ŒÁc žÜ FëÇMcÇヌÖïA¬;>Ú@?ˆÛgè÷ô‡ ö‡þúÓÖÖ ˆ1cÆ_xÓ¼råÊþyÓ¿üå/n¹²²²^6®jÒ¤I½‡ZóMFFFFFFFFFFFFFFFFFFFFFFg˜êëëï룟C‡uGØ---ÁPé2}úô>ºéûÖ¬YÓå».,,ì«Ë¾óÎ;»|Ùýô}˜ÈðùçŸwG(´TåÙgŸíò]÷a¾~p†E—ï¨/ßh ·ü›è>È@¿/á®·~tˆÛ« ô ôÿŸ1xb1xb•XÐëÖ›>Ö'|»óYúÑ!6n¯2Ðï\ãù^ý¸:º2Ð'|»óY¹¹¹è Ò'?S§NíΕ_vJJŠßç×ÖÖöÉ-ãKQÔå»F¤¢¯.{Ö¬Y]¾lóF####################øI  ¡ÓSÀObbbü¾-žŸ„¡ÁWž””ä÷}ùùùïEªLL_‹ª> GKè÷ ª£úý¨Ä勌Öwë3£õ#êx÷ ŒÖrÇÅáeÆàé@{î-úqÀt”a ßs8îÂ'èG‰Û8¼Ì@¿ í¹·èÇÓQ~„~ÏḠŸ<ð ?jÔ¨ÿ/ð'===J,öòË0Ë øÊQŠàwIW\qEÀ{?úè£^¾—(¿®¦¦&ø–ûð_g̘å]˜—                                                                                T $'':tìØ±iiiõÌu tA/¾ø"õ+þéOÚ…·›· T |òÉ'ýüã)))õ6Ìu Ä*!C†ìÛ·ïðáÃãÇõ½æõFFFFFFFFFq“@^^Þ¦M›~øÃ~®ý|öÙg<òÈäÉ“ãö5òƒ~õ«_é_¤~ÿÉO~²mÛ¶¢¢¢¸#><ã}÷Ý÷—¿üEÿêýèG[·ní‰oüôÓOÕÇñŽúôzôyÅQb¾þáã?˜¶dÉ’ø^F>|Ýo~ó›p8ßoœ={öÿý¿ÿ×ïK¦¸ û¯ÿú/õueeeq¼Þ—ædõ²ôâ(® ‚¾ž˜÷ÕW_Å÷R‚.f÷îÝñýÆ/¿ü2øwìØßoì+è÷„ôþüç?÷²ôâû,|?mÿþýêÆîºë. 够þóŸêïñ½úêëŽ9¢¾îŽ;îˆï7* þ÷ÿ·úÆãÇ«oÄ·÷Ð7â+zNë÷ŽôÔóÒ¥§?¯¸K/¾Ï"*èÃðU¯ûûßÿÞ ÐW_w饗öô±Ô7nذa C¿w¤§ ¯KO^úÑîU]ë÷ÎÃSZß@?Ú‡¤½Î@¿ Bó~‹~wDÙûÒ3ÐïÎó²½·÷žÑúÝyxúÝ‘žþ–žþ~xFëwçáèwGzFë`éèà‡g´~wž~w¤g´þ–žþ~xFëwçáèwGzFë`éèà‡g´~wž~w¤g´þ–žþ~xFëwçáèwGzFë`éèà‡g´~wž~w¤g´þ–žþ~xFëwçáÐûí·Q¯H?ÿûÿoS¥ÕeÄôNm®º¼­qSÐÿŸÿùW_}µçjܺ,öØÞ¨×æzVÿîw¿‹í#½ÚäëG’Pп÷¾ô"¶X¹rewî¨ÏÞ }èþ‘#GÆ÷âzÿყ;O0ú¯¼òJw>¼/ß«CýŸÕ~víÚ•ŸŸ÷‹3ÐïŽH{_zêÿÏÿù?:<}ôQ´èéνôñ{uèëzî²zÿá­ß§ééævçûË{ ôááĽÆiéæêý,ú |»súúÁø1Z¿;ûË„´°ô ôðÃ3¶~wÞýë®» Çé'11±;ò xoߺ¹êÑмç‚2§«­¯¤—‘‘ÑCðè½Ü=#Yñm’ªßOïCÿý¯ÿÜ+ظ¹€Ã$<·ô{ì±ÞÃh}SAAÁßþö7÷½NÐ×¼ç0Ð@×æÍ›OOèãžÛÚÚüq´Öïðt‚~RRÒÚµk1éÄO÷è@Ò[³fÍïÿ{]z§ƒÖW÷ ëMYr=jëçææª/Rߎ©âêqŸªBßïE¿Áµõõ{Œ¯×ÔO¤w:Øú=dGõÿíÑþúýÿöÍž¹0Ð?sŸý~çúg8ÎÜÛ7Ð?sŸý~çúg8άÛÇ`ð˜ôƒjÌž‹æžYb5wÛÿ% …<©ýK.¹¤ÿ_¼¹B#®KÀúÏ<óL×?ѼÓH`@H 55aHõsÏ=÷Œ?~@\¹¹H#########################################ž”ÀÿGË•'æÓuIEND®B`‚fifengine-0.4.1/doc/logo/FIFE_small_c1.png000066400000000000000000000344671304641216200201620ustar00rootroot00000000000000‰PNG  IHDR;º7^sRGB®ÎégAMA± üa pHYsÃÃÇo¨dtEXtSoftwarePaint.NET v3.5.100ôr¡8¦IDATx^í ÜnSÙÿãŽÃ1Ïr:DxËXhŠBBQQIG)š¤AÔiN†Ô?”7¤Þ%‰h % Š¥PB)d:dJ†÷wö£ûÜϾï=¯iŸÏçú¤s¯{ﵮ뻮õ»×^{­)=öØ À À À ¤ÊB±0004I7.U…J»øõ00å@ì æa``’f 鯡zË«^|…¯``Re±ƒš‡€€Hš¤—ªB¥]üú‚€€ò vPó000I3tãP½åU/¾ÂW00©2€ØAÍà À À $Í@ÒKU¡Ò.~}Á À À@y;¨y€€€¤Hºq¨Þòª_á+€€T@ì æa``’f 鯥ªPi¿¾``` <ˆÔ< À À À@Ò $Ý8ToyÕ‹¯ð À À@ª vPó000I3tãRU¨´‹__000PžÄj¾)S¦l*û˜ìü¼Î¥ÿ¨ìÙ²itÀò_á+€èžÂŽ t„},Ѳìý²kdevõ±sâ@™Ûôß'ȶ–M ±mÔ©ŸLwâýe±ÃÌÎã Hœ¬%;T6o@¼Lûß2bg°üMúÎ1²-H2ýM2ÄžØÃ øf±Ós±#!²ºì ÙÏGœ&bgð»×éú–mäzîOâ…€~1€Øé¡Ø‘àXQv€ì"Ù#%DN•ÇXƒgÔ_¥{&[—„Ó¯„C¼‰7 À€;=;ËÈ^#;Oö¯ §­™QÂç2Õå`Ùl€{’xa` }; ‹ ˆ™²=eß”=XSàt-v&®ÿ¨êw‰ì-²UH>é'bLŒa\1€ØILìH(,&ÛUöeÙ½-Wbgð>«Þ?í'[ÞUgà>$^€H“ÄNbG‚`QÙ dŸ—ÝÕ²Àñ!vïùÚsŽloÙ,Qš‰ˆ¸W€.@ìD*v4ð/"³½l>#û{‡Ç·Ø¼ÿýjç²=d3ºì\›Ä 0é0€Ø‰Lìhß\v´Ìö°)óæS›eªî³Ó潇¯uÚºlgÙt’R:I‰XK€¶@ìD v4˜o(ûÌöªéR@];$±3X×;ä—ÏÊž'c׿˜n;‘q=G€q v4h¯+³½hlOš"âêóPÅÎ`ûo–¿Ž—=Ëõ‘I€00ˆ€ÄŽçÙ²wÉ~À iÍNUQwƒüh˜nJ²#ÙÁ À@@ìx;ˆW‘ÙÞ2?‘Ù^3Ut—åc˜Ùå;ÐÔ6Ý€„×ß„Gì‰= ô“ÄŽ±£w9™í!c{ÉØž2.K“{Å,vÛ}…|þÙZ$¾~&>âNÜa _ v‰ ¬KÉ^%û¶ÌöŽi":|}7±3è?;õ Ùê$¿~%?âM¼a ? v:;@gÈlOÛÆöˆñ%RÚºoŠbgÂ7v êE2; uE’`’ ±&Ö0>ˆ–ÅŽÊé²ÊlÛ ¦-¡ÂuR;ƒþµƒRíÀÔ×È–!¦Ÿ‰11†´@ì´ v4 N•Ù/¶×‹íù‚0é¢};ƒ¾³T¿)³Ug’ÓNˆÄ—øÂ@š vjŠ |v\ƒíåb{ºØÞ.]ˆ‹Ð®ÙG±3;XÕXµƒV#)¦™‰+q…ô@ìT;ä6•ÙÞ-7ôDàļÏN—bñ.Åß^µX%9¦—‰)1…t@ì”;Ì6Ù-¶WK—hè×îûÌΨøØA¬v ëslÆ™N‚$–ÄÒ`±3BìhÐZKf{±Øž,¡‹WõCì³`´ÚA­›“$ÓH’Ä‘8Â@ü vÄŽ¨ÕeÉlïW"¦û vªqñGqd¸nH²Œ?YCbñ2Ð{±£hE™í­r‘ÌöZ‰I|¸ªëòËɲò:»þ}UÙ²[ðßH~~+ß¼O¶ 3Þ„Iìˆ ÄÉ@/ÅŽœedseçËlOW¢!¶ûüE¾±Gy+”éà*·˜ìÕ²P2 Åÿæ;ðuÍ2~¥LœÉ•¸7‡Þˆ ,3e¶WŠí™b{§„2ð…X;”ôå²iu;«¾k¯å19–3;øÕ|ýfÙ*u}Í÷ÂI¨Ä‚XÀ@˜ $-v4€,.ÛMf{£Ø)! ‹PêôOùç4ÙÓÚ쬺Þd–ÝŽÿÇògÂ~_ö:ÙrmÆ€k…™|‰ qw $'vl6Bf{Ÿœ"›Ï[(ðlCÄûžYÐõíœ0Èy»­Xt›ð´cíàØ¥Hˆî"¾Æ×0&Iˆ ¶›ñÖ2ÛëÄö< e¶$äz\š ¦ÎwÖ}·•)³ÙŒ}BÝìÙ¯Év7ÁH"N3Wâ Ý2µØQòßBvŒÌö6 a` ½ÉOöHï!t,ÕcŽì(™íFºïB¨Ÿ,û™4;=„R‡n4þÅ¿0Ðщ%ù e¶ä:ÈÒÁf»>([=ÄŽ£z-)³×ÿGLKÇÔÖ@${®ljˆq¥Ní$iüˆa 9Qˆ%óue‡É®b0,=ÚLįeûÊ¢yü¡º>_vŽÌÞT a6%†:üM¾ú¤ì™$ÅæIâCH`ÅŽ÷lÙÁ²Ëô* ú¶æë²­cî°ªÿ:Ùnnb¡Ôñù룲MbŽ?uOo°!¦ÄÔ'A‰%èUdo‘]Â/ûÊüò™Æ>Û'Pmß[í™%;Pv-¢§2WËgGÈÖo;.\ ` &¼‹%âåeûÉ~ ãíœê³v Ád3c¯j]Õ>{ãngÙw•EÍ:Í“*›SÕ÷”gPƒˆ/b'ûµ¾·þ×ÖfØB¡<ˆ¥v†×Ù²íb°NýÕî d¶ÍEÖë;?“ïÞ&[­Žÿù À@l 8;J¬¶©Ü²3d¶wH,Â"¤zÞ-¿+{Rl uQ_ùaYÙ;e×ÃS­þd¢ù‡²ýe¥Î?ë"Ž\“` k:;J Óeöèát Më ¼kä?[ËÄnºMN òËTÙ‹³;$qS]ì@ÜïÈö‘-Ýuâéêúªûª²½zd[VñeÖWªøçe¯o›_V¹~Ìe«úÆf¤cnoÕº?¹ ;]—íDì( O“}Nv¿¸kýâ¶AÒ^½>O¶“l‘®AHåúòÕF²“eÀ^möì \Ûáz—ظPwìYÜO­#ùÆfØ«ˆð+^~ÅëW©Khe«úÆÖÌ…Ö†.ësPvº.Û•Øy_Ï‚Ú&0ÿï>-[¯ëà§|}ùoÙ{dÅÚ öœØA쌂ةÝòr16v;ˆ‡}±ƒØY vÎu]]Ñáú{7Ê'‡È–mI±¾Šƒ½-ø*Ù¥°:IôÜcÌ;ˆ‡}±ƒØY v>à:×¢¥êý~,_¼T¶hŒHê¬Ø9N`  l*8Q! v’yÙ‘ËÙúŽ/ɶh¾G'VœgË>&K]ÄÛÆ–ìÚÝñVôû8ú=qJ#N]‹'*vnU»Ž”qjtÅ}¦ì ²ß&Ê÷Å$ø4Ö–+›Ÿó¯éki7}Òd k±3U‰ßžÿÇø‹÷vÕû#²5?Mø»ˆ«xYJöÙ5‘ro}u£.|Ã5éG0¾èTìX£ôwqdIÿJÕw?Ù¾‚Â}ãOâgÙN²ódFÔP]§Á`ü CbÿaÀ…Øùd‰ÞÖ[œ%{.p Úf@\ÙãÜOG2ËyiÛíçzô)€ß ¸;s;w©nGËÖòîŸ~2gËÈÞ.».à>q,¦Ï"1&Æ}cÀ…ØÙ(ÀÄþ{ÕéM²%ûpÚë?ɉ;[˶«,Ä}¨ö™‘Ì·3ô¿±Zç›’VôM¥7OumÛyUv’ìþúˆõÑÍ]´»«{¨þ;âǺùîÔ®|“­¡´A«Jݪ‰0¿âõ«Ô¥ë²•ÚZ5NòË¡ûÆ|PÕ6‡T¾s±“u°K=ùÝûxÙº!9žºøŸa )âsyÙ»e7zì+¶ÍÂŒüRµ.ˆñý*›Y¨"* ]±3â‡$bÇoÎw%vì—k•ÖfÙë&LÊû…²ÏþW?±s¸Úä¿Êµ®ŒÝ÷ˆÄNƒþSIØUí+ˆ¿ãŠ+±³«$ë¼²Ÿ« %åýBÙgÿ«Ÿìí±¯túÅE\;ˆý±Ñ)æUó‰+±³y›ŠïVu å;¾P?yǾò6_ín뾈ÄNƒþƒØAì4ü²çĶ ©p©óýß·•H¹N3ð_±ÿÔGNðÔO¬o='ö!v; úb±Sœ¤‹’¤´‰ëˆ•¦ß¹¯¨n|Þ<¾ø°ªØƒM™¯ó}{[qVìqDì vôÄb§y"€§6€°NòüÎ ±'qêßœÁ|¨>òOýäÚüSTGÄb§AÿAì vš4ðÀ6;›%I>oc|ØÜ‡ê#w{ê'_I!~ˆÄNƒþƒØAì´’Ä·jaS±³[ ‰œ64ç0ª¼Ìåáºèßì8‰¦¬×ýþ»CðMÓ:Ø£8Ù&Ûì¦>÷}ùŨ­âŸªÔG×Þ°âõ«Ô¥ë²•ÚZÅ/VV+GìóýJUÛRy'oce^JÎòuúó[Cr:uIC´Tc–è~” šäˆ(ꊕ¦ßÛ¾j{(ßOމ;q‘gb'<×xJæ18Ô9¤b¿ˆd¶±æ#ü¯Ÿ#vvöÔ?L(±®#TœŽä·4ò[,qt ·ê—=%ó$Ö#ÄõüwÓßtÙ;dós¸Ÿt­Ê¼ÑSÿ¸‘˜1ðÀ ¤Ì€k±s°§dþÓ”ƒHÛÂKRâü…²«Gð~G^ÌTö#žúÇ7a(<†ˆ 1öp-v¶÷”Ìošö Á—£})¾×—}§€ó_;_òÔ?8?ŽGXNÇrùØ5NW"·“›.¤¬ó}[+1ݵs¹_:´øZVv¬ì¡Œk„ع¸Äwëð_ôÁjX%Öĺ 8;Ù:†<%ô9} 0mî6±‰å©2;èö¶ \j„ع±Â5ŠL•ÏW‡“n9Á¿øü2àCìœé)¡o l~aKÍÿâx[Ù¼<<ì ]cQÙÃ5®UEÔ䕽5µ¸Ðú9 ÀÀ¤ë %óÃ<$tKò{»n+÷K³Ã‰¥9²3p¼gŽØY³Áõšžóà4MN‰+q…ÿ0àcfÇ×^"ï%ðtþ& HŒ,)û ì†Âä™9bçÙ ¯YWð|¨‰OBû®|h;µÛ[peíÓ¡µ¡ËúÈ/‹UðùðŠ*õQùK+^±*×¹¬üòúо)Ëp¨åö )^>ÄÎjž’ú !9žºÄ#¼Ä«m±¿·ì¦–Ø]#Gì¼¢¥kW=/M‰EùpÇŠ~<+¥öµE¾™QÑ?•΋ҵçW¼þŒ¢:§ò¹ürhEßTíË¡•?(¤Ø9;ÖxýÝì!èç†äxê‡Ø§[È~Ö"¯ö¶ÖÔ±sH‹÷¨’ôÖN‰EÄÎø~…Øñ—w;þ|¿@wøHt ú¹ûo|´•{ú¼®ÿŧÍ@ž&kû<·ëóê¤ûü}⮺þ õ{ˆÄNÀl2³ãq?+_bÇÖ=TùõÙFÙ»CíÔ+A$.—½GöŽýѱóíŽî7®ï\˜{ˆÄN¨L3³ã7Ïû;»{Hì–ô— µ#P/¿!{¼ú1r]Çlž>Bì\Ññ}óDÏÑ©q‡ØAì„Ê4bÇoŽ÷%væxHì–ì7 µ#P/Á¸]àˆÉÜ·Ÿtï»ÝPô¼*5î;ˆP™FìøËñÞÖìd¿¢ïôÜwµ#P/÷Aü­ ûŒÌåf~ûÇZ÷Ÿå¡/˜èÙ 5î;ˆP™Fì¸Ïñƒ,x™ÙÉÄŽ«_Òƒ¿dßjG ^î:‚’Î4Ù2‚{§±óbç>ÝsÒ[a±sˆØAì„Ê0bÇ]ŽÏ]*à þ( þþÚË}ý‚>á1÷Ùï<°7!ºŸ’#vvòPŸŸ¦È¤üø_²+Ø)úaT›2¡_Å?¹ç¸¹þ1|oõ˜Öÿ«­;TôM•8…Xöy!ÅÖçÌŽMÔ¾’ó©‹;¤$³®ÌÇOà ƒgåˆ;H´7«\£W;Ó×Üõ5|¯CdÀ§ØYÏC‚ÿqˆA NÝ%1¶t6‹øO¼ ‹ù¹Ó«S¦|ÈCÝ^wÝq‡oñ- „Å€O±3U ¾«½LFý½Ã°«xØzÙëd·z£ø»r„Ø9ÝC7íÊ÷\·}Œ8ç˜ð&vÌIúû‰ã$ÿ/ÝoјD]«'ÅØƒ¼Ì1[e!3BìüÈq]m–«70Ò‡ª÷!|†ÏRcÀ·Ø9Þq’·é ©‘öü;1éo¶ì+˜*#t¬ÌgFˆë×ùr˜a0ƒè¾ÅÎ\ÇIÞœgõ)À}h«b:Sv„ì~<•:VîÐáxdÛìpÐ*×iZöä>pAÌa&ð-v6vœämØ‹N°xÊþì£:‚ã•9bg u} >@,‰% 3à[ìØæn:NöïŒb0B÷‘˜yšÌõš¯:gð;[åˆg:æßêóŒÐãKýâï£Ä†Ä€W±“­³ø¥ãd_i“¬‚E]¬ËYEö?²GsÓTèØ÷gçˆ=·ÃŽÆ˜ K D0}b ±s’ãdÿ­>8•¶Š‘ÅdËîqÌK"Ç®a"cÒ›€Y›ÚºG™ë\• ´ƒÁ` ,!ˆ^¿.ëÊ…Ñ‘ÄÇ®²?8椌p¨RæÏy<©M®ßH<®Ãàš8pÇ@bg ǃØæ°&¾vÎÑ÷óQEÀT)û“bç,Çí{G“˜ðÝ8úq"N0°0!ˆJö¶Ù_•£iÙ%!Üd –Ëf<\sÑ”«qßÿßbçrÇìo ûá²Olˆ tÀw±“-R¾ÒqÂß ºª‰_mM‹ìM²ÛóХș¸öGGˆ—m}T~]¦IŒønxý†˜(f ±sšãÁmà(†Ã¥ÿíd¿qÌ ‘3qI{Û¨­K:nïu.cʽÂêcăxô™PÄÎÛ'ý×÷9è!µ]q_[öMÇñw)r&îõ¢a¿«Íë;n÷!Åžº0øÂ ¸b ±óÇIÿHWæ>ùYñ^Jö™ëM%}»çF9bç޹<2¸À ô‘PÄÎ,%}[Oàj :µÁ¡ÍŠñ"²¹²›ÆÛWãî³lŽØÙϱv êÀ` 0àš ÄŽ5Z×:Lüºv4÷[c;áR‡qAäXîÉ‹¿þýHǾXd`úÈ@Hbç+ÿûl_mV\í°Ë/:ž½ EèX=rw-Ö¿Ÿêù›|ÅŸû2¸Â øf $±ón‡‰ÿŸö8Å·óS¿¿|l{(½Ov¯Ã؆$r&êrÞˆ™ úåìÔy£} ¨0£Iìlï0ñÛ ´*£»Ž!ÿ¾Lvƒã˜†(t¬N';tèŸ÷Ã{w¼ã[| a3’ØYÁaâ·h àlNùuÙÇ2T‘3Q¯ÿÎYœl µm†ÑUÝwƒ÷öyǧøâ` ±“-R¾Ñaò)¶©â¶’Í`ÈqCWB¡é}^#vVuì§5á½=Þñ%¾„¸Mì¸Ü\Žõ\Vƒö¶²ùŽï¦Äå÷·É;.À½­8svú ~Ä0àžV»¶§Áò0‡æ±mÕ»ï×QÌp7—"¥­{­•#v^êÐgßë;£´ßýà‚ÏñyH „&v^äpøFHˆ¹.ˆ±ënì±Þô±ó‡¬çB3sÔ`  ¡‰Õ¿¬â(ÊŽîXˆ±bç¯yìÈgÇ9d}Oøe`€è3A‰ „þnq4ÜÚçÀ·ÙvÄÎX±ó³bçLGœ[§Z·Íxs-M€ØQì|Çá 0#¶€…X_ÄÎX±óÕbçWŽ8¿G÷aÍ–ã‡Øÿ¨ÂŠQì|ÈÑ À/Þ–ÄÎX±sÔ±ówGœÿ˜DXœñ>‚´Qììáh0±³€7±3Vì¼5gqò?Æ›3ŽÓð¡ú³ù-ýÈ­O„(vÖr8ì[ÀB¬/bg¬ØÙ-Gì<Ù!ãû„È uJC<ÄGõ·÷Ên–=,»T6;–ºSÏvúJpb'[¤|§£Áàp@jbg¬ØÙ4Gì¸<nCoÎ8>Œ×‡6›#{`hL9‚˜ÆÓ:± Uì\àHìœ\Çi|gáN‚Ø+vVÈ;¯uÄ·%øiðÚ¯¤N¼'Ç[ýà{}îQý÷³ñS¿úE¨bçŽv–máù-bg¤Ø¹oÄâä#ñý z¿:ñηúÛTÙÆ²]d“~€à·ôûI¨b畎ƒ«¼9䈑b'—/ùëóŽø>¾›óñ! ÄÏ@¨bg}GƒÁý@ÜbÄÎH±“;s(ýÀßo€ïæ|ãC|ñ3ªØ±)Ç{ +r3;#ÅNîš0ùëZGl?¶›±ÿð ¤Á@b'{#ëGÂfÀÜ fÄÎH±“û¶_Λ!m®>xé>‹÷™ílÆvúߣdÇåØ;õo«ûö‘ê°Ïˆú ×y®Ê-廾÷W]‘m#ûøˆú¬‚ïúªËçÔï•>ê¥zÌ*ë¨Ü–>ê8ꞪÏrY®ÏëKÇè³—È ©Îƒu Yì|Ê‘Øyq¨Á‰¥^ˆ‘bgîp å«•q}E,ütQOùøå²¿”ðµJ¶ ˆ]Ô£Ì5uﯔ¨ç„µooSË\»«2ºÿβëKÔÛükG­ÔU]Š®«{ÏÉ©ç©EßëâsÕcÕ>üÑrÊoÝE]Ê^ÓŒìs²KÔýv•™´‘jÙ{uY.d±³o Ƕñ‹øÀ.܇k#vFŠç刧;âú”>°—×Fùw3™ ²UòÃù¾üUQìL´é½ë»®êüPEÿ^ä±¾1‹‹÷}žÅâqcmun!d±c¯ VIVuËæž]ä«cÆx_ÄÎHN×É;»;â:È_W.ø–¬áco/+Ô;ºðå1iݪæÛG=Ö7v±c¾ÞÕ£ÿ.¯ïc|ÕwÔ}C;ÓKN›UítÃåsO¥-P!×±“›ømã²IkfôoÕHuß*dfº¬Ûo¥·GvÚPì²Nã®#vÕùCõõ9S27‡a[5èßÏ—ñèßÐÅŽí+7è»Wäø×ÛL‰ê2o¨>?Íás8Gw&_°bÇ:†þ~å``ø™¯N˜Ê};¹bç–¿Šm!_ñRå;ö'˜…¬®9!vÖ¬‡Êœ°Ø™Ÿ3#xuàbg“!ÿ‡ØÉÝÉ9oÍÎBGWÈo;.v& íœú"vª$>9pÒ¯ƒŠ¿V©es;ðÄ¥ÊàbÙKGˆ3øª×›e"vš½]Y”ãäß¼™ÄN‰Ý賑á|…Ø)á»".‹>}fÇÅ j¿‚§9ŠÏG'Pfvrgj¾>BìüÂØùrŸyEì v†f™æäô¹ÞÆBì v¦lé``0•½VŸ‡¦mGìäŠÜzòÕ͘>¸iLcþ>b±ƒØiõ§yEPyŒÕP­ÉKÈv08lsr÷]wÄN®Ø9(gÝÅâò•-\îú±Ûv¾™ðyÄN{݈ÙIcÕÛxŒÕ-›ãòNб¬âúûƒÁáÕ>“sì÷Fì䊗ÝsÄΓ°lÆÛy!°ŒØév@‘;ˆ…´3;5š‚~E´‹_ÅÞ6è aphZÄN®Ø™t.•üô\b熦ñŒýûˆÄ±Úc€ÇX-™2IuDâj[ðœX¦.”Éï@ˆ\±³rÎÌÎkˆ3ûÎ)b§½ŽÇXíú’ÇXíú³J®‹á1ÖÖˆïTqe±3Iì< Ÿ,’#vsÀòûúÎ'b§Û…ÇXõý‹Ø©ï»¦y-±³´ƒE¿mêÈ>±3IìüaÄ/b;L¯íYÉáëíÜg³u~åø™M[šGìÔ°;õ}×4¯/v²äumǃÄ=MÙçï#v& ˜ Fˆïv̱ ŸÕúÌ"b§ûÁ±SßLjú¾kš×b;_u0H,ÛÔ™}ý>bg’Ø9e„Øù}ÇßÜW‡¤2³ÓÒ,kvÚœ;íú³J¾‹EìÒñ a¿ˆ7ªâ8ÊþZÄÎ$±óþƒÄ}sÌÚ³oWØAì<>¶‰‡99ýŽ”K2"ßÍògcu%äèçwˆ…ÄÎm#'Õ1¿¹¯»§ÆZ™ö0³Ó퀂ةï_ÄN}ß•éûѯÙÉc½¨ãÁâÆ¦Îìë÷; ‰ËGˆ®·O8ª¯ü1³ãvAìÔ÷7b§¾ïšæ·˜c­Ñ¡Ø±íýlê̾~±ó¸Øù§|ñúbg/}vk‡ ¿²¯ü!vÜ ˆúþFìÔ÷]ÓüØÉfwº,¾!×jêÈ>±³@ì\'›tÒùBÏŒ§L±£O>!{¨ѳÐq=ç‘5;¬ÙaŸ–P®š7”¯Øg§ë+‡Ÿ×â q…®õÜ®ë܇ë#v¦|M>Xºl¬Uv]Ù·[dù^]kjÙû§^N¾È;Gëß°ŸùÿA_~Q=¾2T—ù9³UW 8®êÏÌNýÙ‰Dfvþ4Ô—¬_ ŸÑwœ+ËÞ'¶™µ0@Ü– ΋–uåÆwî‹Õö7ÖåCßÝAö»˜¾¤nRüÞ±StëŸ|ù±S_<”‰™ü;'§±ƒrÉ™ùn^uH™Ø¸,›Øyi §O$¹é»ÇÉ8«$äeAì©Ø¹FíÞ¤¬F•Ó5¦É”ÝÙ€íO5­GJ߯!vÕw¼Íò"v;C»wÌÉ/öÕGkˆ«ôÅ}Õwd® ­Bãê#®]s@8_ßÛ L[Udû–)O™gP3.E¿¶CýüKjïR¬>[e~*Û³ #*gÇI|Föp _Âꀀ¯(v.Qù]ËĨ«2ˆÄN"bç~±|’,È5°QÍìú»«Â`p­Ê–:óJåV—.³_yƒìôßKv•äR¹nÄŽuæIç^ %ªETÆžaÛLâGë¿7+o•ÛPvAÆíg˜ÊÔ-–2#Ä΋ÍOC¶nmBì v";¿ÊéKÖ·– ¡?%1³“‰ K w«Ì»d‹9_efÈþ[f‹<ófla '¢yôÕ±ckkžZ0›³’ÊØ,bGèßO–­RÄdÆùKTÖÞð*šÝ²uCÓË\³/eFˆ`ßVCì v";“ÞÆŠ!·Ä8³coUŒ&”•Ë8_×ÙCv}‰ÅöáyC™kö±LÄÎ)jãÌ¡³ÊüµK&Ä.)ÄW9›%úǘëþªÌÄâ !vZZ«'ßÎÍñïB³‹úü¸á2¾8U=æäÔ—Ê%yïæ ù±ãf9ýU#•Gé?,10 ‹*{Et–‹vÆt„ÅŽÍöíS0°NU;ʤêZ›?è;»”‰³Ê­&;U6øˆu‚ÍÏ•¹FŸÊÈOˆ’Y.;õg¢ä»UsÆ#˜Ù©ïÓ² Ç8³³Á,vzÙE +ªì 5¦AÑcƒT©õeƒ{¹DÅΕj×ØÙ€,qý †häé»úþ•a@å6—Ù¢çÁï×~õ½Ì=c,ƒØévà@ìÔ÷/b§¾ïšæ¢ÅŽý’¶_ܶXôÿÉ&0=앱×{ß&«²¸yÜZ ['ñ–¦ÎOåû ŠÏq¥Ï·—ÝÒPè n‹p¼®U¸ÀOel´ÍnÞ”Ý{ËT8j«ˆnÄN}ÿ"vêû®i~ˆNìXƒõgëÖ,Óx•³= ~ßÒ 4,€ì¨‰ÞïۓعGmÙ«à±Õ¢*ó™­+Z<\õóÛuÍ7Ë 7¼T™™²#‹DY™>’ZÄN· b§¾;õ}×4OE)vÊ4ZP=YvNÒðf œ·(S§TË$"v.W;Ö):¶=Á0õÝc»Tyéº]#ÄÎðqÁ¼®¯ú¦p\Ä'³¡Grüd¸Ÿt÷Q×W=æäôY(—\×%ßÍòߤã"|ŶÊ}“; J—‡-Žú¥n;¾£ŠãS*›€Øù´Ú0vÇO}n3„vÔHÕÙš&åÏÒýž”+.Ú"Ÿ½¬DœpQ—2÷ˆPì<¿„'q_Æ]”Aì4›M‘ÿÎ-ŠwqkûšÉˆÃÖòì'ëâdô²ÖÙºÿòm)ôëE,væ«î{ÌæØz¯ÊòÞ„*ËE“r¶>ÌîÏ[€%‰fºmá÷8¿#v*øs¸È·vøm%®}å1ÄNc±³Ž|x߸xûŠm•û&!v„çÈì1D¥Î×Qy{;ìYU‚{ÙHÅÎ¥ª÷ØmÍõùš2;N ®nV=ö•-;/.ê/?-+;lÌÄN3±³”|{ˆìoeû‡‹¸çݱÓLìd?6“íqkî¾b[å¾Ñ‹9ÿãe;›ÃrvT€%‚^ LŠcUç±»ëó]dw8d¦¬ ú±êT¸3x•$rYùj Ù&9¶B(íVÝž8T¿ sfRÖ*3v}™«¶©N¶ñåÆ9þµóãbÚUr|·XNýfû¨êa3ÅÃ<®:X}>+§Ì2>ê›ãË5òúSu+ªC bÇ6i²³:Ê.˧z­T„Ø?Hì˜x{裉 Ù1òdk†ž;/Ô¿ù/íÐ}(N Eì„î+êç¦?D/v²)¶%Õ±¾èeGl“2БˆÛŒoì¯9}¾–ìrd‡Úñk>e–i[;b§?Âc{~LBìd‚Çö?±·j\ÎÜ”½—=ç´õSS„7p±c ‹?&›6Î÷ú|wY[›N–å¢l9{7˜Ç.)2L›ÚT²|ÌÌNƒ5QðØ. ˜LÍ©Þ)óõæLÑàeG ,ô|6ÿ,vì±ÏN"ÇÖ|*P‘l<}U6#NhCû Fì„*±Kµl²b'{nü$u:[ØYV„¸.W8ûx‰ÂY3{$$;1`&þ¡º½0†¸SG´—»ŠÛ¹ö½á>/ðⓤÅN&xVP§»8àÁ­p]‰O@ÊÜ;±sê1v=”>_OvEÀ,Ø›{›–ñ9e8Bb@ÜÎ+èWw…T_êÒ¿þ“¼ØÉ-B>lÏõ,θû•zc(ÔêYìØ#ŸÃecßtÓç{ËlÖ$¤¸ÖÅÿ\3ÔS¯þ Ub^BìÌ­r=ÊÂ[Û ôBìd‚guH;c(ÔÁÎêeGxÙÙ³ XÅŽÍ„l;®îú|¦ìóÇýûªßÒMbÀw|20FìØñ9ïòY7îMßX ú‚:Þþ²Üó= wù -fžÄÎùºïØÝ©õùSdW×Q"Û„ØØ£+B‹7õaðf@ ?K¶ãm£ÿŸÄK0?ó½;Ù,ÏN?Ò°ÑŽ,ˆbt,vìܱCec_ÉÖ篕=©7tI4þ$J ‰! „Ï@/ÅN&x6Ñ`gAB~¬Ux2w̡ر)ñg<¶²Ó˜O<®ÿTýö!vÔ!ü$MŒˆ 4g ·b'ć0àž^‹Lð,­ÁgÒž˜vî×â!v’ŽÅÎCº¾RôØÊÖb…ºköÄìáõªã!Æ:¹O¾øŸÃ€;z/v2Á3MƒÐÿ(p†±]®:wòu‡bÇÄÁ–­L¬†¼­ÀD ©z®Brs—Üð5¾†˜`±3p2­£÷E xîQ÷ ©w$vÎÔu—-:›©Ì#ˆÙ·TÇ™!ÅŒº0À ô‰Ä΀ØÉfyló9[@òÂe«ÛgeK„kËbÇ|ÿÖ¢vY™Hât¼ê9vÃâ¶ò9ƒ À 4c±3$v2Á³­([Hºà±ÅÕëûî-Š›¥yZÁlβ*óbc’¾Ýwl¸³‰ÿð ¤Áb'Gìd‚g V¶f$tÁs¯ê¸ÏÙ’Øùª®3va}¾E$1¹_õÜÝgL¸w š8Gh‡Äα“ žU4hÙ^7¡ «ß)¾Ö…4;öÕEZeÞ!³7³BÅßUDZ‹ª‹ÚÊçí$7üˆa&@ìŒ;™à±³•li胬Õïw²§ºîà Ď퉳qÁc«åUæìHüoíYÛµÿ¹ `Æ3€Ø);™à™ªAÌšÆ xìÊ~.Á¯)vl—㥠„Ž·c»&Çà÷«žË»ô;÷b€ƒ€r vJˆÇ§Á¦L9Hš-0ˆÄÎDÇÐ`øzY,¯KÛ~ƒìM;ö€Ø¹Lÿ½NÐY]e.ŠLž¬úNkê'¾Ÿ^%¦Äâ`±Ó¢ØÉfyvÐÀh Xc™å1qv°¬öëÓúîþ²OÉÆî5£Ïw”Ùq ±øæQÕõ½$³8’q"N0£@ì´,v2Á³±I[ÈË nõMe>*3ñ‹OlmÓ+ëøƒïpa` ,;ˆLð¬¡ÁÒ´Æ2¸[=M =§ÍNªë­)»$2?Ü©únݦ¸VX‰x舎ÄN&xfiÐÄÒa±Ó±Ø™è,ÙlILkVLðÜ,{n•¯òsd&bz|guý¦l‰*m¥l:‰XKH›ÄŽ#±“Íò¼BªU“°½pŽ(óXKeìÔ»"kŸÅâ¸2í#¦ ‰/ñ…t@ì8;™àÙZ«-€IðX]([-/èß“a›LÈH‚K7Á[b 0°`ì÷ h€]Of ac‡pÍbÇñÌÎÀž•5ØþÏŸuÿ§†Ü9¨É`Ò`±ÓC±“ žé§y<—뾫‘DÒH"Ä‘8 „Îb§§bgàM­÷;<çê~K…Þ1¨É`Òa±Ós±“ÍòÌ•±…Â]?Ö:A÷X”’N!–Ä` ;ˆ èo;™-îBð<ªëC‡ Ž$n€HÄbçqlÁ°ìƖϺÞËHé%bJLaba±ƒØYˆ[8,»¬%Ás»®óìX:õ$qà À@š v;“@YRvNCÁó}]Gš‰ƒ¸W€˜@ì vr°…IJÏÔ<—è{+ÆÔ¨+‰`Òe±ƒØË€-,–Ùã² —ÏPÙ$t“±%¶0±1€ØAì2` Œe¶Ð¸Hð¥2‹ÄÖ ¨/‰`Òf p €´(_‰˜gÉn!xÖ¿¿±ìµ(S00.@ì0³Sš šud¶ðxp†ç^ýÿ]B˽H’00U(=ÐU¹(eÓ…ÐËl² ž¿É6#Þ鯛Ø[€@ì0³S™[€,û„lv €6Ìa` m*t‘6Ä—øÂ À ¤Æb‡™€€€¤Hºq©)SÚï-€€¨Îb50004I7õ[]ýâ3|00ˆÔ< À À À@Ò $ݸԔ)íá× À À Tg±ƒš‡€€Hš¤‡ú­®~ñ>ƒ€HÄj``` iþ/п"Ñ;9IEND®B`‚fifengine-0.4.1/doc/logo/FIFE_small_c2.png000066400000000000000000001101401304641216200201420ustar00rootroot00000000000000‰PNG  IHDR;º7^sRGB®ÎégAMA± üa pHYsÃÃÇo¨dtEXtSoftwarePaint.NET v3.5.100ôr¡ÏIDATx^í]˜TUÒÝõW‰Cš!#A¢ä ’E²*ˆA1ƒ‚"É9ç ’MÉ"IŠ9§Í®»înýçÜ÷^Ïë4ÓÓLÇ©ý¾úÀ¥Ãëûªï=]uêœ?ˆÈ4t 444444’5è(ØÓÐÐÐÐÐHêHê—¬U?—þúÒÐÐÐÐ=ì(š×ÐÐÐÐÐHêHꧨ7tÔ«k¥k¥9 9 9 9¬9 `GÑ¼æ€æ€æ€æ€æ€æ@Rç@R¸dE¨ú¹ô×—æ€æ€æ€æ€æ@è9 `GÑ¼æ€æ€æ€æ€æ€æ@Rç@R8E½¡£^]+]+ÍÍÍÍdÍ;Šæ544444’:’úÃ%+BÕÏ¥¿¾44444BÏ;Šæ544444’:’úÃ)ê õêZéZihhh$k(ØQ4¯9 9 9 9 9 9Ô9Ô.Yª~.ýõ¥9 9 9 9 9z(ØQ4¯9 9 9 9 9 9Ô9ÔNQoè¨7³µzöô/…}¯ îð}¼ýïïáÏQˆ*™½žþ{öÝ]K]KÍÍÍŒs@ÁŽ¢ù 9Ð’q;âYÄ¿bGï `Çùwþùb¢¬~ u#ÖÐÐЈe(ØQ°ã•'¹]›ÿp7 ì8ÿ^ã Ä#ˆâ±Lv}oÝl544rf(ØQ°ó€‹×"V#þà„ vÜÏû^û5Ľˆ"ºéäÌMGï»ÞwÍÍh瀂 v6.B\ƒXŒø1€“`ÇýÿÆ{>è‰ÈíÄ×÷ÓÍVs@s@s ç䀂v,!f!¾Î"ÀÉn°ã~½_q-[ݹuÊ9Þk½×ššÑÈ;9ì@ÔFLD|r'’`ÇýÚÅ5®E\‡¸$_}Ýl544’;ì$)ØP¨‚à8ÇÁÝ`";þž‚ò…¼ßϸö¥ˆÖl»éf”Ü›‘Þ_½¿šš‘Ê;IvÊ"8îͱï ™=7Z`Ç}ßâ3ÍA4Aü1R_}]Ýl544’/ì$8ØÁÁ_ñ0‚ãÝóÎ ¨dÇ¿Ç츯û3|Î)ˆzº)%ߦ¤÷Tï©æ€æ@v瀂;8ä #8¾Í1nŽsg€ÉÊkÄ츯õ|þ1ˆjÙýåÐ×Ó Ws@s@s 9r@ÁN‚€æùÓ~Á±í¬€“ì~l<÷g;…u†(¯TrlPzõ>jhdG(؉c°ƒC;7‚ãØËæxvvƒ–p_/^ÁŽûó¼‰õ€(™_} Ýp5447ìÄØÁá| ‚c׿æv¸€$’ÏK°ã|þÿb ÷"îG¤êf•¸›•Þ;½wššá怂8;8„©fÜ ±ñSœœhéìD¤ý޵}Ñ Q Ü/>O7\ÍÍÍÄÊ;1;8p9FÍqêoà$Øq†bÍ·!nAäÑ+±6.½_z¿44²’ v¢ vp°ÖELF|š`'ÙÀŽûóü ÷bâzÄ¥YùécuÃÕÐЈÿP°°ƒ´*‚ãÑ“Žd›&Z¯Hœ¬®É/¸GËmÿ§›Xüobzôihd– v"vpP–G EœL€“Ì•`€è{Ü»ùˆæUmŽÐw%³MJÿ]2ÍÍ Í;Ù¸ã@,‰è8œ„''‚÷gþ÷t¢Á…~éôùºqkhhD7ì\ ØÁá—ŠàXóÇœ³Ú6IÄÇ's+”ûq÷y<¢ºnXÑݰt½u½54ÂÉ;a€r)ˆ;/ b­fÊáœÝÉé`ǽžï †#.ç ¨ÏÑ[s@s@s ò9 `'D°ƒÃ,âfÇ•9¶œÝ"‘^OÁNàû yñ(¢´n^‘ß¼tu54BÍ;€ZT3îŒXàxr"’H^«;yJº‘ŸÇÚÒõñäÝç÷#B õ˨Ó[s@s@s 29 `Çìàpú?DÄ2Ç# òµ—îþä¡ó¨Ôlž<!¬H«9Mnðœ,峄\ƒ(æÇŸñ^«ëfœ37c½ïzß5"—9ìà©€xq:ŠXBð&7|^ÒjM—¼'J¾JŒIÖó[tZ&®;“kåœùï·q5Û«ºùEnóÓµÕµÕÈ99´`E)Ä@Ä‘(V y O\Æ’üU&K¾Ê®à{b þJ¸Ÿã~½IRµõb0ý Ùr쇄\§(çÒWx¿™ˆ†º)çœMYïµÞkÍìϤ;8Ò ö!rŠšqØ €ƒÀ£j›%é ¦*ÀŒ‰©’¯Z ˜†ÿšÔé¶^†l~O¦îÿZÚ x^ Ôœaþÿ€Ïák™°_€©X½YÒ}ÈnYùúa_”G¬¯ó<>ïD-ݳ#Ô5Õ5ÕHîHx°ƒÍ¿â.ÄnÇ|c}(Åýû`tü%)V¶¨ÉÅ4ñŠêÓ%¿+ Õž%mû?/“÷#›¿ÿ¯W,}ÿ¯Òcò!)Õt¡×sÌó}^× ˆRðo­z=#S6žûu‹£Ü:‹k¨¬troÐzõþjdO$$ØÁ&Ÿq+b;‚ã¼zP†°S6½'­îÚ")Õƒš’¿†OÔœ)¥Z,–î“É¢wÿ"¾þ=ÃXóùoòÈš3R½Ë:Éçšp¿fu¼¾DÙ@ˆ¨úµ+dÐì#²íÄz?C¸ŸvÞŸÀŸ!.ÓM1{6E]G]GÍäË„;ØÌ/E\xÁ±]=CX‡AsŽHŽ+­ ‹h¸@Jøg­Yž¨qÓzé»êYyþŸ²æóe9F¿ô¹\Ý÷Y)PwŽëumä‚ì*®±äUóäŽá¯Èê½_ê=áÛߪ6DôCÓÍ:ù6k½§zO5Âϸ;Ø´©fܱñ'8¡<…;†¿*¥ͳNpc›”ڳʼn‚õçJ‹‡ž“'_øL–Ÿÿ-[bú±Ÿ¥ËØýR¢ùbI©“þ^éÀ*(+Xk¦´ë³Mflù@AOè ‡kõÄ«ˆ{…uƒ ƒÔµÓµÓHŽˆ;°ƒÍ™jÆÍóß+À àp­ ÚݳÍOûÈ©Üø‚›:s>¨¼o±Dn³_¦¼ù£,þð׈ļ3•»”*7¬7ïiÞÛ„€œª’Oû À§vçÕòøüc²ý­Ÿød øü yñ,¢Âø˜ièhhä´ˆ›qÄtÄ p²pê\¿U»‚ã8žÊ ܤÔ+)õæJe»¾-³NýEæ¿÷÷¨Å ­I£ûvIúóÌu˜ëñ üx*?®–W™¦ 䮑¯Ëº_+èÉèázýŠxq"wNÛìôóê¯9ss ¦`n ÄxÄG p²p¸^<ðyð˜*N0€Caƒ›”zó¤@ƒùrÕ½»dÀædö;‹iŒ~ý[éøä^)Ú|‰¤8ÀÇ€ïª|Ò+>œ »öþ2{Ç9=Y=\³¿ Ö :"TµY+^1= „ä\­{õÇÆZ1qFNÖ׌|Çv |ÈHÁ›*ŽÝšò‚ˆúó  h?lŒxåk™þö_â*&½ù³tŸy\.ï´Î€1 ø8UŸÀÇUí©wãZybñ Ùñ¶¶¸ÂüNý„ç-A\ƒ¸(Z›¾pššÑʨ€l ¥ƒÇÂÜŒsü¯wä<ÐëwYëݪ2 ‡Ç9V{Ê€‡ ·L?&ãý(“Žý)¾ãèŸäþ5ïI½Þ;¤À•Öõ{€»Õå´¹\ãíe›/”>cöȆCßäø|¹€ïÙ7xîlDãhmBú>zàihD:"vø ñb?‚c±z…±<¸ï»Wx{ñq< Ç"€ÃJ@B+H^Û¥Ïʳ2þ0œËßL¼ôìçrÍà×$­ÙRô8ÀÇÕæòp{Ò[\…ëÌ’Ní’y»>Òœ #ç\ßÕOñ÷Iˆ2‘Þˆ²ûõÿð‡?¤!ºä (›•5ĺ”ÎâÚÔ õõñºe³øÚ‰~ŸÒ²°6š—1jG ìðæc“üQANx oÞ³›»pmâÔÆq89@ŽprR›-‘«}EúoÿTFü))â‰W¿•&¼)e¯]гÀ¿ÚöŸ÷æõpÝ®¼iŒXö¶ì<ù³ŸðOÛP7óxyÛk’ƒ¢wVÖëÒ=‹k³8Ô×ÇëöÎâk'ú}º& k£y™¤`ç;¡ƒÈ#q0ó€ö†rÈeÖH§qoÈc»¿–á{HÊxbÏ÷Òcái©Ñc›©\ùµ¸lÐcȨ̀‡Ói*,×|‘Ü7nŸl<ü­‚ž¬ƒž"¡næñò8;·Eìd+V°ü‡E–@x$÷HWv&+ØÉìð¾ü>)×­*GåØä rá´«<•œR½ûV¹mÞIòÊ·òø«ß嘸oÃGÒ¸ßn)Òdqˆ Çòè*Rg¦ÜÐo—,|þ¼‚žÐ@Ïg‘Ü€"õÚ vìD±º¤`GÁŽñ¯ÒC%È,|á¼9x‹Ô¦cøT? c¦«H<ö9E/–«zQî^û¡ zéÛýv|!mGRmW¹@ON§Ò3Ýrg‡ {#8·^þ¶ì:¥-® ¾§Û#H"ùº vì(ØÉÖêU¸­ÆSÙ©¬`Çìñ`³â¤4î¶VòU™bÝŒ[Vñx¾”l½RZ?±OÜú™ôþk ×<òÜWrã´RåæÍ@-Pè<\sã¾^uŠTùûÁ§öɦ7¿S`îÌGF”Dêµì(ØQ°£`ǽ¿DºE늗åøCd3Ò‡&ì—Ë›/|•'›C6ÔjN¥®¥óäcòª}w~©‘Éܾä¬Ô»ç9)Üh¡5¡Æ‘u_>ÍåqO¾*“%µætéòð³²øÅOr|¾º¾³"H"ùº vì(ØQ°5°cOdqô<ÇKw"7=ò,RT*MB5Çè" cŒ¼`CŒŽß½KnYð®Ü·õ 0֠׺¥Ù ×¥XËe¶%…åÃåM`¶¸<¬°™{S÷¨ÒDiÒmŒ[u -®œ›»ö÷¶d$AI¤^[ÁŽ‚; v¢ vfå4°Ãr<Êf7¯“|'HÞŠ­CÔ m+››S¬ÅRi<àUé±êœÜ½ù3lXƒÞ?•vcKùÎ4 uWyl³TŽö;m-¶YyàÉ{ù©Øl¾ô›¸_ž9ú}NìßF ŒDúuì(ØQ°£`'Ú`§WN;[p >шÐ\?ó¤Tï Wx*L»U˜}ÛZðL²î!îejõ)Òí‘]²ì¥Osèy1Ò $R¯¯`GÁŽ‚;Ñ;5“ì,ù3¹aê8Ëtðs SU†jï8å-¹}Íy(®ÁM ߓ&‹¼ÛZ.â²UáI•@ÏS‘#úºj 9 9͈(AÙæìüÀίÉx&®9--pðå½l¬ä);6ÐÁaɶˆg¬Ür&/âlÝ{_æ¾+·¬øH#†kÐmé‡ÒlÈ>)Ón¥KˆãéÖ¤–ð iªui9õŒF¯AãQǤb·g¤@õiž±tæ«|¦Ú‡ªŸ©ð0glÀ“«ÈPÉ›6TZu])ÓÖ¿“( çöHn<úÚz°ihD3¢vl’ò©x;3ž>#­»® ì"FrM±>ݳh§°8ÔëÁëöÎâkKœ=¾K¨Ÿ5«Ó¼Ì`'6ïÿÆbßuêgÉ“ç¹ø’¾æ@¹$wó‹:£öUJå‰RúúMRmÐa©>ô˜†®AX9PþŽç¡×3Çj‰ig]’—€9 ~ñ%ýäâ‹ûÊ“³ÅìÜÕM<Þ¯‡Šzc]€R°ó‡ ¾Zá‘ÜG¢VÙ±IÊïÇìð=Ë” ÓÏ®ê¸ÚW¦ª“Þ¾*T{¦\Ö}—T|DªÇócì(ØQ°£`ǽGE»²38F¸´»i¹Å‹ð"%cúÊTuÒ§¯H,Mm»V.{è ”}ø ]ƒlÉ·ì„È$¿v–!+ÛÓYNu'oÊÀX¾ïñx1¡^›‚; vìÄì´ŽØéÑw«Å‹?Ÿ”ì?}Ń)­Ëv)õà! ]ƒ°s ø¯HúóÒ§³|Äí7Y¹l¥1±;KCñü8; vì(؉%Ø)+°ÓÜ«vU'Mñ@ Å¥à *ÚýE)qß~ ]ƒs øÝ{¤PKxª•Ǻ±“°Õ•½ÄýµwÆë·˜K°ó`<ƒ˜P¯MÁŽ‚; vbvl’ò'±<ã—÷©êؤd·%„Çä3]%9/4ShðY¨ÅJ)v'ÄãúìÕÐ5È0Š\·Yò_1ݲ“ð¨+Ó,ÔôÑÞ1ÊʶöFÑ;ܲ*–`çªPEÝ:ÐjÍ’”:sÌ—vó³R´Çnœ¸Ý_ÂíÖKJ½¹’R{¶ä¯9Ó€axŽóUžlUwìvVZ“…RgÐi:á”É·zý^I7 uUwžZþV¬ÀΚP4}\ì6m]{]{ͬç@TGÏmÎNñXª ¦¥ ®Îp)Ùhž´ù.ª;g¤9\»iìY{ð!)Ör9~™O´~¡WÐaUÇ™æ`K©‹äåW.”Âm×KÑ[žþÂ×ÈkP¤Ó3R°ñbÓ¶2`à— Øä@±UÝàA ´ Œc+÷Ù-WŽy[?eòŒùVó®]fݲ‘H¯î,~þãXº‰f}Õ5Ó5Óˆÿˆ:رÏ×±<Í:-u¹šÃèM‘êS¤ýì³ÒzÆ»rõ”wÌ¯î«Æ”ú£Þ’Ê÷¾"…‚ƒQí+TuðË=¥¶UÕI© Ó`¾h¸P \µH 6]&E®Û$i·<«‘Äkzã6LY­”[÷-M‚Þ”ºÈ §ºc·³Rðg™›¶Jí'ŽIýÑo™¼j:á´É3V«tÛ$¹9Šnl$Ò¹;[ý+°ÓB7íøß´õé=ÒÈzÄ ì< °Ó¥Ï&‹ êšÀ"‡¢ãÜ÷¤í¬³rÍ4Tw&Ÿ–ÆO2¿ÂëŽ|Kj;&enÝ!p˜Yí+wUg:<ø 6Y*›-“B׬‘Ôë·JÚM;5’i  ¹Ä–UÁæËlq¯/±î=*{½^ÕTÿŠuX/U’ZÃK=ä‘©ê ¯XÕaž±šX¾ýJCŒwWwŠ–+ ó?|'StÍú&ªk¦k¦9ÿ9+°3.`çÞ'v{©%ó ÉSj¤´›vR:ÌyOÚ ºC²r³‰hgáWxƒÑo‡kVð†CåÆjîªN#Tupð±²Ãƒ°ÐÕ+¾Jáö èa%@#±× HÇR¨Õso 6_a@-Á­§ºs¥SÝ™+EÀã*wßëRuÈQ©1ì¸ÔqÂäÛ£Ì+VuXEd5±T“f2+½º3T®h43V`çœnØñ¿aë=Ò{¤9^Ä ìt‰Ø6û°WU'7uu`ÑrÔaé8ï}i‡È!+7A;«áØ“æW9_ñ8Ï #Rö¾=R¸õZü¢·ª:ämxª:8èt ]³Ú<¦pÛuUß$©·h$àP/§p» R¸ÍZ ìðÞBoɯºƒvV!€Ÿ·¿`ü´h K€\{ø ©‡v(ó¨ ª:$%·bUUÄkQM,RsÀÎHcêTwZܸb~½Ó$´Ô%­ëNŒ [ ùåßÊ©ê¬7­,ÐÁôNj§-RÀ§p{¢ñ·J¯Ã}êü þÜlî¹O­¯žêŽig-7àµxŸ=Rºï!€+>ú¦Tuª:h’än‘’íªHÉíPÕ!G¬ý´SFwÇ£ªlˆÊÃåþ/Ç ì´ÓM4¼MT×M×Ms þs –`çÕhƒ]§~–|G®êðÀ©qÛféºôœ\¿ðY™í?²2~­óW;½—ïXÊô{CJðƒH«}åTutXÕa5§ie݈®ü»9@Y1Ј‹50÷B‘©7€_týáh¹¹w𰺃ûeWwøßÔV*qÿcz€o…oš6'ÛµXÕqHÉ®Qó6¨’ÖiÁûrÍè7ý=³Pq>ïÍXTݰãÃÖ{¤÷Hs ¼ˆ%Ø™m°Ã÷+[{Šm ÁªÌ¡–\ñºÕÒmùGrãâÍAäGV¹Ô!+×Àt½›ê~Í—~è9ôŠß³OŠõ|Éæ`DEÀTu ÐAµÀ&+§uÝaMiuÛeÔB<@ÉшÉ Mµï¤¦ºCÀcÚY¸§hiQDÒø£Ý cXÝ2¨êø²½i‘’R»ï¨yëéïN¹aÕM½ŽÜC‹ŠÝàîª;37ŸØù<Ù6Ð0ì"rg ëÓ=‹v ‹Cͼnï,¾öäP_;ÑF^Rî:‘£w¼Ü³X‚Ûbvê·[dsuvØFÀSºÙB¹uåG¦ºsÃ"Tw‚‘•Ñ–p“•ùkþ2TwJ>xиaó,v×kÐÙy.ŸÃö*¦b€ƒÔ›w™Ç½íyë±8L D#jkÀ* [FòVÜ€sox8Apjª;v;‹÷ŽÖ Åï~Ý[SÕÐe;“À·2Ú›¦ªcš7ë?jNNXg€i‚êú÷=/yÉÙ¹ Žè.ƒÐµ{¿ŒØÙ/Rv]G‡Š‚ŒU;°Ù¸Ðü #/èðÚìèTŽØißsƒ‡˜Ìƒ†NáZÓ¥ûêåæI—%$+SùÖ!+“|ê&+“³Á_ùÅï݇Ãpëõª©òððL¯êè°ªƒŠ…yÀíþ¢i‡ëù²9l µZ â+t\4"·àWxòþí¸÷ÀæÞðž™ê[>|Œ:½th lMU@—U¶5ƒš·tš_M0MP]£û3~¡ùQiÜuê—X€Qº‰ÇÛóÃ8Tì(ع`0“Ù÷ Œ¼T°“ “÷%â77ØÍÐù#â¯Ñ<=}ÎCLö~Vœ ·¯þHn]õ±Ü´ Õüòάlkïx‘•ÁÝ(qÛYhqàP4¡ŒÞñ²y,-«:l_²é;jNRr°QsNüL³ezùuk,ÿ5SݱZYåêψÐá{vÎl“N´ãPQ°£`'âçay©`'ÑÁŽ=‘u Ú`ç‘IûÌÁb¨qИF]ç½#·¯9/·Øí,‡¬Ì釬L­²2ÉÊh[ø’•Éåà„Ž9PqHšÃ”•¢¦ªƒÔ]ÕáAÚË:€Ía °DÂ3[(F´Ž*½´äEñ^°ýÄ{cÀ(«o\{RSÝyÁÜÓbÄ}2÷È£6å½aU‡mK¶/9jNRrÀQsãå=jΉ?‚é[W~,¥š/r«•Õ Ã’XR‰f2»Þ0; vìd??HÛX6Ø™m°3vùÛæ`qZXŽ»yÇ G¤çºOä6´³“•ÏXÊÊÈÊ9æè±›¬Ln‡ÓÎ2‡)y!6à±R¶¯¼«:ñÕª°MRòîפH›5–—F–× lŠh–dÕ$rQVÞxoœêŽHÑRô¤äò°ªcW‚ Hâ½Á} gÔ¼3Hɬê°UÊ–i‘:3ËäNyª:öý1\VuB5·ý¯èjî5')¹«:h•v_yθ¡3÷Ü­¬ž= °ób8›v¼?'ŒCE+;ZÙÑÊŽVv"ƒ‚tjEìl>ò_ ‹Oã¾/JïMŸÉë?Á/ïóédeü"÷UVvÈÊTÈu“•IV HVfõ•/„œ`1âL’²C|uª:l“p¤™“>l•p¬™í’2·ÀÞ\4$Õ¼4à¬ôðAÓ^$Ÿ†`‘ ‘à‘U35gª;{¤(î AŽ¥äÇÑf$‡äåôªŽ‹”ì7jÿ« £æÉΨ9IÉ· ªÃVi—¹ïH¾Ê“%oʼn^­¬SÄìLˆwàÎõ)ØÑÊN8yéç„‘—ZÙI’ÊÎÅ;ÿŒ6àI«†ƒÆáëàÀÉWy’Ô¹c«ÜóÌçr×ÓŸ¢…ê~󗸇¬ ‰8Òȱé—²²CVv´w¨¬ìÑÞ±ÉÊääÂV y!hg™‰{¼™?Åz½æ™òa;Œ ‚'g¬™Ó>Tp®>¯ÝÉ_c¦ä¯>CÃ^ƒÔfK¥Êƒ{Œ­¹Tô§"H$X$h$5lg¡]È N‘NÐ@¢,+mFUTyL‹Ñ©êdÓ¨y·åçä6äsëÚ G%_•ɦ¢hª;¨0²Ò8~ÕÉX€n‘Þàcñúa*ZÙÑÊŽVv´²™ÊŽÍÛ9m°SõêV ‹ädv&Kåë×Ê}[¿»QݹsÃ'þdåyï©’•ièè&+S1×CVÆáê(+&+£ekº=G¼Z;A¬<°ªÃŠ[cf¬75\XEª pEsÒšöKÑK%_µ©9: Ö›-•ïzÞX3ÐÃŒ:7…‡¬†,4:Õ¶Sá^ÏÉ,# € ›# `¦äH.UF£æ$%r56jNâ;«:w¢rxÍн;SÒ[Y쌓EÏ °S!`$Òï °S ñ`¢m¤¯)ž^ëR1 kÃulêõã±U³øÚB}íD\y™•ŽÇÇV—{q$›ÙÐYm°Ó¬Æ~=|IæWv©«˃ۿ4ÕÞYÝ BV†ä?ùá‘•ÙÎr‘•íŠcM`¼´%z¼ åm¯%ŠÕY+ëNª9s¼™í´ê÷½$…ëÎ6€-'E~€¼ Ýž‘F£Oÿ)NÉ ²ºSÉTwÞ”Ò}^ƒ7Ù3é~e¦ªcÙw˜ªŽy´IÉFÍÙVÌ꨹MJ&áÄwæ+‡l™æ« °ƒŠ¢»•µåè÷Ñ;Êìû©ÿ¹zº¶º¶šÑËx;÷Gìtyh‡«ª°ƒƒ§PíYÒwçWrÿ¶/¤ÏæÏ’•) ç•­vÖ):ê²ò sÀœ²2Z'neåâ½-mG×Å´³l²²igQ©F”Æ–£Ò©¨ô”»÷u±$pà Á{9NÚ|ÿæqn1á¤T¹m«äh3m‘$2mWJãGL…­)&äúxhÑ@•SÝ!H¬þN±®ÛÍšÒÆÃø•9^e¨¬™ªÈâY5·«l^®æfÔ¤d—«¹{ÔÜTu@€gå°vÏ­È9Tä\¼b5§Eèðýöèf½ÍV×Z×Zs v9`çÊhƒ{G½æÕÂ"ØÉÅ4¹ó'òàŽ/åÞ-¨îdHV>+×Ð(\ ²2« Y&+Ói›¾ZtÙ†9¨ñÊ‚}Dñž‘ª ]ת+1õÃêA¯…‡ìÕãOH¹«ÁGB‹. £hƒ9rÕ ½ÒÕ5NDZeÄ{Р¯‘SÝa;  °ÆÐ£Ræöç¤0ÌY¹–ÆpÕq¡7vUÇÑ>2¤äl5GËÓwÔœÄwV Y9¬tý:«õèâíToµ(`gºn¾±Û|uíuí5¢—ñvrìüMÀ3tÞQo°ƒƒ'õérÇÒ³Òo×WòÀö/¼ÈÊ$–:dåNóQÝq“•8>Xqa …|¶OŒQh&derD|ÉÊÆe†“…ÛÀ ”u‹ˆåR¶û.©;ü˜wUg²UM Éd[ð‰h`ÊêSóá°®h8ÇRæM‚(Pe’Ô½ç9L6½g&ãh¨IpGÇêAÁ«;lñU¾ïUI…û|!XCXNô¨ê bÆÊ™©êR2«:Y5wü¯Ü®æ!ŒšS΀²¬’Vêê%6ØIçí´¸u},ÀNÝl£·ÙêZëZkÄ.bvl’ò©h‚i›ÎÚú:_‡¿² vnš~\yîkyhç—Y‡[~ÊÊYÕ‡¬LãGrF²2ɱå]deË(ÔVVvkï!+çtØ-WIÁæ+¤ tv _½BªÞ÷²!G7CEƒU¦©çbÆœèÚN} .K>«À )Teì1F&dä-3J®¸iƒtžó®1Ïdµ„£ÜumgZÚGT)fu‡-½:’â×n0kÅ5ãÚ¥Wuо¢ƒ9«:®Qs‹”ÙQsSÕA¥Cò ֙m*‰nÞNׇwÅìTÓÍ7v›¯®½®½æ@ôr ^ÀΪh‚U¯á;øu]mš;׎< _üF~ö+s(™v–MV¦ê­Ÿ²²CVÆaë­¬ £P3úl++Ó(”#Ï´+ð(+gNV.܆í,TwÐÎ*Øl™ñ‰¢uDñ¶«¥>vSÕA…ƒSb¬xÐÏ‹6E¤®K·ÅïKíÛ6I^žÜÅŸL˜(Ûb¡tšr¸Ñsl›êÃqsuwNu§éX´ïnÞ {E–—ŒTƒ<«:¨±RÆŠ™UÕAû*›FÍ : ´XabkÍíjnHÉö¨y/’ûlþÜâƒm8ÙHxÀŽ¥·sߘף vþŽïÜEºÙFo³ÕµÖµÖˆ]Ä Øy$š`gçÉŸ%?&a8 ãðux5ï¿[½ô­ôþké‹v–‡¬ŒÃÊWYÙ!+³…ä&+³:Y™Ú;.eeG{‡deÓβÈʦBvVÁ¦Ë,¿¬† %¥þ<)ße³\ýÔ[VU‡<MRˆv7ã°¥V«RœºiÎ)¹¼\iÃâ:Ò®˜$m‡ï3âŽ\s‚6‚7‚8‚9‚:VwÚÌ8#Õû¼(…Ã? kR°ñb³F¦õ‡5ceÌCJΆQsCš­2‚[¶Ï25‡Œ§ª>Øí‹Î¸ÀN:Iù‰Ç¢ vÞÐ7v¯®½®½æ@ts ^ÀN³h‚¾WÙFs­QmLÅðW6ÁN½^ÛdÈ+ßÉ£¨î°E²ò}.²2½Xe`KÅRVv‘•£P[Y™Ó@Y™Ú9Tð5vPïõ…RY™F¡lg9ÊÊÔÞ @V.hÜЗZ¦˜W.¨)è©Ñû9¹<"ãªÍª*"¬FQÄŽ­8V¨X]è4­ž“%WáÇã*ò—!MïÛ)w?mVCÒ¸æFàà Ωî4¼:CË èãZXU¶¯ìª*b¬Œ$%‡8jN­£ ®æh›±…É6"ùR¦ªdÔœ¤äPÕ!ìÆ)Ç$M BNw‘”'ÉôgÞ6Ø™§›mt7[]o]oÍØå@¼€ü ÿ&à©ßye:ØÁÁC°Ã)™¡¯}/ƒQÝðÂ7ÈÊÐÞ±Éʬ2¸ÉÊü…Ï1hCVÆtødeØØÊÊþde»Õí,T2è•RwޱŽHk¼PÞë©êð: X!¡¶ ùGl˱ZõÀÖÏ嚇Ÿ—”ROÊ¥Ç4rzLjݰRî^sÎÃÉ•"(#8£¸#«;mo¬î´xBÊ^»VRjÏ6`ϤšªÛWvUÇ!%5wù_ÑŒ53Wó0FÍyÝΨ9?ÓCÎÐížÜïv,’òê=_FìÜ­oì6^]{]{Íèæ@\€›¤üA4ÁNû»·x‘“ùk»d‹%2|Ï2äÕïdÐîo³…¬l´wl²2U|=þLÈÊ· ºc´w ¬Œ‰!K{‡£èþdeÓÎbu•”:yË“šªNüŽšw]ú¡™ät^°Qsæ «:Ì£›g7m8ßÊ[ªQÌû3ºéÆvÓÕõ×õ׈~Äع.Š›¾4ë¾Ñ"¾º¦|*BX‡2Û9l·x‘•A25F¡6Y™¿âÝde~ee´³Hd¥w¹¯ó¶Ôu“•©½~HhÊʶöŽ­¬ìEV6F¡¶²2T„-eåàdååcȯs$­ébS…`Ë…m‡¬L~KÈdeG{Ç&+ÓCÉ!+sŒ™£èU`J+‚²°$(õcjWwŒöN²2ܺM;ËøfÙÚ;f=²ò\ÏÔO ²ržÒ¨îhpäJ*¹ ‘¼©K»QÙ:ü£§ª³€e1€Î²t>ùMVþ/YûÅ¿eýW¿ËÈmïË=“÷ÊšÏþ%ë¾ü·¬Á¿Y€çŸ±º3ß©î Rt×Ì7¥X•ñ’«¬*²Lu‰U€/SÕ!·ˆUãDÞ¨yjç@®æÐÔ¡R2ªfäFq䟣ÿxtHÉFÍyÏŽš;¤dTu•j·«¹{ÔœUANž±m×ì‘Ý~`§hýÙÑ:|¯ºéÆvÓÕõ×õ׈~ÄرIÊßD ðô³ÇìP•wâ០DŽ-‹¬ü“YÙ…Úde ö‘«ÁC9œÌ¹>(Yù¤cfå ²deË(Ô­¬ì!+›v–EV6Õ«ºó8l#3*ÊieGJ¯)d*;,K>bUç7YPã§¿ùlúñÝd#þÜðõïð ­(Z päTw†n?'U›Ï–K 6U$‚+V•LU ‹“by11Qó=Æ}ÞTu2Ë¢ªcü¯PÕ!å½ÉÚ¨9Tª]®æÎ¨9IɬêP€ÕAV kßhŸ6VµöË£ v®Ö6ú­®¹®¹æ@ls ÁÎóÑ;χ)££ßbWvžxñ CÐåQ†de´³8bl”~•-£P‹¬ÌVHède…²º„¬Ìê…GYÙ­½&YÙ´³RxPÝ! ¹4ß@¹$w©tå¶õ}\`dhžþæwÙ ³å‡ÿšØüý àaµgÍVu‡• éG”«{¬³l(RáõCU@‡í+OUÇMJÎlÔþWYr5ÏxÔœ¤äì5§“ï¨9«œ8cU‡° Öùæ=6Eìüß­ºéÆvÓÕõ×õ׈~Ä#Ø-°3eÓ{.°ƒi£Ì;OúmøÀL‘¨ë&+³á•©ø›1YùC3±cÈÊhgQu·)œ²}Éʬ(°²@ÞHIðGJÜw•‡t²²ÕÎzAÒnq´w8ŠŽv}³L;‹¾YkÍDR¡+ HWVN7 õ#+훬\Â"+ˆ˜ê€É%yÈ%¹’r?iÞm…Ì:úƒiSÐØ<€³í§ÿÉöŸÅVxXÝaåg9*AÝG¼$R‡À~b€v`8jUuоbUa^¤d# ˜•Qsø_ÅÈÕœÓw–£¼e²lÔ܈5B€UrÀRÑ"õ­ìtéÿ|4ÁÎGºÉF“Õ5×5׈}Ä#Øé-°³âµÏ‚;ç½eȹœH ‰¬ Rª›¬| ¸Y¹#«;¡’•m£ÐâfÕjï˜êÎn)zGÑaÚ5 ²2Ľ••-íÀde´³XÝ@1^Y°Ž¸‚ùRÊmÃ^UŸüŠÊÎL5gëÿ3€ç‚»•õØê“RºÒ(ËnÕ!V‰¬ª€ŽSÕ¸ 8jî’Aî•£æ %5·IɬÀQ6€9ŠDRr°Qs´1ƒšS¬‘œ/j ˆ¿åRï=uÏØ½Ñ;›uÓý¦«÷@ïæ@ôs ÁN¹hoÿ$)œÄ2æ’ŽçÒ<¹aì3…Ä)"«•NVææEV†B. 6ùëþ.xPñ×þm˜Ðéæ(+»ÉÊS߇¬L¯¥ŒÉÊ<E…¬ì…²ºc´wXÝQ(½£ìÖ±(Ș¬Ìv–EV&@±ÚY3¿¤Ÿgòªd…²ëFpCÀà «:lm5í²ÔzoªB¨YU´¯À 2¤dSÕ¹€QsLŸjÀÕäíÔ.Û%­´‰Pc5¬hÝ.R2¸:‘$%—î{HÊN½#š´’«SÄñú£Þ²ý¯N™JÅ!)ÙqÞ{BWóLGÍi®ê5'׋œ/r¿íø4 غàx4ÁÎPÝd£¿ÉêšëškÄ>âìØ$埣xÊ6_èvZØmˆ¹›¦FL(deK{'¬|«/Yí,²2ÚY Ç'+SäÎ1 õWVF; #Õ©7RVF;ËŒ¢³µÔ˜d¸24²ržR.²2¦¥²2ÛP.¬î8^Y^ùÔ´¬XáaK‹@‡í­âeŸ43UT…LU‡¤dVuHJ.j“’#=jŽ*˜¿«yÆ£æ$%gר¹±à°U©9ÑG°|ß* ¼Է²3móûÑ;ítÓý¦«÷@ïæ@ôs ^ÁÎkÑ;õn\ktvÜ•:=·šÑiêÄPÕ¶³²2§kü”•3$+ Y™z-ÁÉÊGLÅ•N yÚY!‘•…¢º]𠍽c·OXÉ2F¡••ƒ‘•ÉÝqÀÎø—>1Dåu_Ù¿“«cÀ«:¨]’×j_™ªN"šC&ÀÏÕ<“Qsú_Ñ?†¦îQs§ªC°Ü}&€•¯M°“¦›lô7Y]s]sÍØç@¼‚©Ñ;íúlK´½—ÊuXc¦‰}h©{‘•©½ƒé‡¬ÌÎMVf;‹£Èš£àíh+U²2ÅîB&+wr‘•!°çMV¶ÚYÖA;ÇÒÞ±=™ŒQ(Gу•9=å&+;í¬±/ž—ÕC'a™Á)­UŸþKŠ—{U »ªÃö•gÔÜn_e˨ù:£1Dr6IÚ$k³ÊÅjWüÄÈm"lj\'¶É}2í« £æ'‚ŒšŸ5µ³# Hÿ+ÜO‡”LmVó¼FÍi¬ê5'8æDÁòu#÷Yr.ÎNš3„­Ô(åúºáÆ~ÃÕ{ ÷@s 69¯`§{”éþøKÞ`êÃ….å;Ô—¡¨žCVžв²CV†ûµÑÞ±ÉÊä|8dåVTVžœ‰²²‡¬¼"x.²2x(“•×N‹ÕÎ  ¬ì&+û…ú*+&+~þc3ŠÎ Ð ÿ¤`ñò#|HÉÞ£æl•yû_]è¨ùI½a›ñ#W‡~b¹š›Qsø_e‡«y(£æœäcU‡­Ðæý^´ÁNºh¹‹¢tø>;u“Í&«ë®ë®9ûˆW°S%Z`çᩇüÀI½³ÞúÅàÆ DV6F¡6Yù±—¿•hcP970Yù#c/@›Nöp§¥CVÆä›¬L¬£¬\Ú£¬œ deÓÎr8#¨î .Yyä³Kêï˜ÀßÙö+^SX^£æ %5÷ò¿‚eG¦®æQ5)™Ós¦ª€Jƒ×LGÍR²Ï¨9[Ÿ´É˜VhÍÛ·øú]×EìŒÒ 7ö®Þ½š±Éx;Øù[4Ïè•§|ÀÎ\ ƾú¥ÇãaîGVÆ/v²2´whôHÅ\KYÙ1 µÈʦe“•op”•C"+C{•ˆ°ÈÊŽö'—ŒöNFd婯‹Ê2 µ”•ÓÉÊÔÞq‘•mí'w~dü²hjÅ?ÌìÄí¨¹ñ¿òq5ÏlÔÕÏÕ<“Qs‚`Žš³ªC&¶@Ù ½¬ýjØØÄ`û{·Gì\¯›ll6Y]w]wÍØç@\‚{"ë`4Àμ]¹À„Aä%ظéÃGa‹ÆMVæ/u‡¬ì…%+Ã(Ô£¬Œv«ø“•·ŒBëŒ8!5†—ªCŽb,ÚEVƸtp²2µwv˜vNº²rv•m£ÐÊÊÃ`ÿÀj—Wà@/Vqtæ£æŽÿ•¯«¹-èÈé1N‘ ± Çv\ðQs«}ùQóó]Í35gË“:M$¸ÏÃT_A÷TyS¨¬Ý>ôåh‚ÒºáÆ~ÃÕ{ ÷@s 69Ï`gN4ÀÎÓpðÎ_ÝÖÚŸÅ;½ç0ÓFôƒ²ÈÊ¿f‰¬üÈ«Y¹çºÌÈʧӕ•£P[Y™ÞMÁÉÊ/ú++{ÈÊ4 u‘•]Ú;FV(o;gqw°US¼â˜ì5o[\/ NI¶æç0®æR2¸:7‚«ã¸šg4jŽV` Wóì5ç„«:Ψ9Ídg½cUu&²éF¼£yôÈ´7¢v¾× 66¬®{ü¬ûþð‡?"j"îB´@äÖû?÷'Ò÷"žÁÎ]Ñ;|Ôz–°Qíå´ &—n³ÏèÇp¤Ú´³ÀKqÈÊ3ñ‹Ý‹¬ KNáÐøñÑÝßÈ#Ï}-aʺFYÙ‹¬ £P›¬LÁºl#+íVw¶XVXÝ DV¦öGÑy𺔕ƒ‘•½ŒB-eåÁ[>®‰·&ðwV1ŠU›Á¨ù¸lt5Ççìâ’) ˜îj^¼w`WóJ¨”±bÆÊÅÉ“2®æš£ýÈÕœ£æäh5wHɬê@…›òÞ³9þï;cWŠØÙéD_?ç‰z¯nîDˆ+6$êgÑëÎú÷-žÁN­hªí–»ÀŽåÕ¢ßóF˜by­‰¬ 197YùÁí_z++ÃO©F˜C!+×v̨û’¬l´wÜdå»]ÊÊ·¿h¦ØÎ!H…’p‘N0 ¥oV0eå`deG{‡£èeÇGr:“S Э¬ü(Z|䣸ƒSGÅ*óö¿ŠÊ¨9”’³:j¥ä†cß–&O2Sq×`:®íÌŒGÍY¥Ëʨ9շ磪ÊàC«ßµÈáì`‚ŒÍ6Öüç>ŽØ™¨›cÖ7G]³äZ3€œù>`çc½ÇÉu3ºŸñ v.Øùg4OÓîýT”kܺÉ\R!˜zŽ“·CV&ñÔ(+‡AV¶´w0Š>ï}iˆ¬ŒÃ¸ÖðãrÅãǤ2ÚY„KVv…ú’•öŽÝVAUËhïT ¬<àé÷*05dœ˜„ÿ.^u¼—«yæ£æV%@€Z@´¸ÈØÕ<ƒQó^¯{â}öõi»Ã5çý¹Å®ê°*Çê\¦£æ6)Ù5§ú6s…Á3ŽÜxøÛh›uSÏ9›ºÞëÀ÷@§2b7âÄ1ÄMºV9ç{·`Ç&)‹ع¾ß³~ãç%Z.3&—ô¢5š/‚“•'@<ÎMVf;kà‹ßÛ:Êʲòy¹9D²rÍ'"EVÆtVPeå)’cá–Q(«;.í’•á\þð†÷…Ÿ™NÞ&ðw è«:Áååãj£æ¶ÿ­:šÀ²£Åätÿ« £æð;ós5ÏdÔœ\&’·)[ÀŠàuÃ÷ø§5˜- Ã÷¹\7õœ³©ë½Ö{­9àŸñvGìÜ=úõ€ãç¿þ·l³7M/²2¯ ÉÊû~0–FY™Ú;» ½c“•²CVîÆêF›ý•••퇬L+‰{öZF¡w¾"Åz¾dx+œJ²ÚYôÍb;ËQVNV¶´wee—öŽŸ²2ÛYE*}×½gFï½âŸ¥Xµ æ1¹3s5wøQöä—©êRrV]Ím¥dVu°&T. õi)yЩ† c]Çÿ Óo]ÍÃ5')ÙwÔÜTu@lgE°ÉýÏúWm¿k8+ÞYódìËŸËŽ_D¶²åKVÆaæ­¬ £PüÂ÷(+»Èʦe“•{£-B¥Û‚’•ÏH3L5r)+;dåŠfDV~Ù8};deK{Ç&+wÜ”E²²Ë(Ô—¬\l8¼ß5êÑîx­bÕ'Bsž`®æî56U¦V0¬Qs·ÿ«:ÞþWä9‘ïDÞùO᎚“”üÐÎ/Í„Á+[”t5ÏhÔœ"‹”+`Ug-ø^ÅZ,u‘“-~.Z`g†nôºÑkhäôˆw°“`ç÷Hže¯|æ;³L[‡äÝþkß5`‡á&+Óô’‡[ŽQhP²2*Á••£Ðä:•Û»ÈÊMÁ)!·¤^ ²2ÚYneeŽ[³UÔøf¡ºÃv–©îØí,3Š"Y™“BY¹²¯²2¦³PݹgÅ»æÀw…‹ÕØA(O™Ñàû„7jÎêSá¶0ûlÿ´H£P¢·ÿU6šÃ²ƒëM’øõŽ«yf£æ°ñs50jΪÅ()J¹ü£$'ß=zO´ÀNÏœ¼É„zâZÄFÄ_¿ˆsøÿF!ÊÅr­ðþ§ƒ\ŸûšÿÇ<‡¸qi,¯—ïÿ¥! Þrí¿Ú¤àÛc­kƒ÷Ö÷cµ~¸ŽC¸×Çc¶#º .‰Õµ:ï‹k(†„8äÚã*7}×+®ÁŽMR>i°³ý­Ÿ$¥ú4?’ò3ŽxÀN8de‚‡¬ÌÊ@†de´³H’m;ó]3 Ý|ŒBmeåºPVvÈÊÔ‹a;«t_¸¢TVàá(:ÛY!)+Ûde£½ƒÑhh ±òÿ Vw“•{/;#CÐÊa;Ç þwÑšS̸zžËÆ'uZPä`â”—§rf„ç­«ª¥äfPJ¾ÚÌÌÕ£æu\Í9žOFŽëWAU§úPVuàjnFÍAJ8jþ‘ $€ÛÕ<¬Qs’Éç"¦%§ø¦¿ùƒ9™k1dÞ±h+b½IÆêý±!_ŒØ‚pk«dôwÌׯðz?ȵòs@äáõÖÆûŸ…k~ -Ãë}É÷Zcx-ŸeaÝx¯_‰%XÄ{7@ü”…kŽinº¯‰vVEìðõË4™oƒˆ ÚJʇ¾ê;¦å"+¯ÆaæEV†Z.ugHT¥7ù,lídFVæëEVžsVZ£êpõ”w¤é„LÈÊ훬Œñk‡¬\ôV_²²­½ÓîÂÉʽ–ž‘A¨X‘¿ÂàßÅjMÍÄÕ<FÍaÀÊõeU‡äpJXþW–€`vŒšÓ ~ Ä(9Å7‚‚–€c:_‡`gÊÆ³Ñ;ÿ@n_« =ÖC6g½«ëƵfìðšˆáõîc}‡Æðzìð^ßõãÈ~¨?œÇÅ,7ìôØ©Ýy•ogŽ4ì½Ý ì%+£å!+S{ÇEVNee7YüteåOÍKM—®Kmee‡¬ ÷mŽF;derN¼ÈÊ0µtÈÊÔ•)Þg» í¬;ÀÝqÚY!‘•ÝF¡¨îí[YÙ´³¦XF¡$ÛF¡w,~Ç(»ƒ“gEkO7ãꦪ“é¨9ü¯XÕ¡ÿ«:­.ÀÕ.Vº(¾hª:˜^cUÇ!%5ïÌÕ<FÍ „9½G¦~«ßñãë°j¶üÕÏ£vÇjsŒ‡÷ÅæÜ;Àýþ¿®øÔç1ŽÕµ;¬š¸¯õ…ŸgL ¯÷ˆÏõP¿Æ}½ü»ï9;†×Ï`ç[Ÿµ .†ÅpíNùÜKVyÜ÷š-Bß{³ÜLT°Ó<`§uï-~¼Ë;®ñ;¬î˜v–MV6œ LÜ,vÈÊÐW™£P íù“•]Ú; +ß»åsɬŒvVË©!•ÙÎ2£èû¤¸GY9D²r«Õhp䛣ߖöGÑÓÛYùªù“•o_xÚh±5çÿ»hé (ñ`÷¿c8jζ ׳ ª:æ¼'XÕqFÍQ]£;=]êïÁÕ<³QsZŒpzM·O=œ¾ž¶xcþ+¦ËŽ·ŠØ™«Í1Þ7Ø©æ¾6FÏÿçx‘•ù•Ù΢ Ç“9¦Ln [=†¬ íNùôÁÁÊ–í­+“•­v–›¬|Â[Y9(Y™Ú;.²²£½”¬¼Ì¸SÉØ£¬¬<^n›ÊL(õµƒ§XѺ3|ü¯ÈÕ±×Óq5Çëw5·HÉ´»à$™ãÜÕ<ø¨9ý¯êƒ«sý¯°~\ÇV¨–Q±š£þô'ëºôC#ðØ}µ3jþ™% ¸ý £Äj•ã••QsZŒÐj„M†¼bÞkc Ë;l™F:Ÿí×ï #V× `'²H vÂ__;á¯]¸ûIÜsvøÁ°qéÃá¡I,°ã8 Û¦ +?ú»Ø!ÊPY&SNüÙ( ;ÊÊYùQ(+;deZô¤¬ì!+ŸM'+;Ú;6Y¹L-ƒ’•v<£.˜¬ÌÚ&+ç«d)+ß<÷”k¾Q´î,‹”ìTu¢8jÎöU–GÍ—ƒ«ãTu øHðiù_e0jŽ{J« ·«¹ï¨9«:ÔfbÛóÊ^[½ù:X˺WG ìÔ wcH†ç)؉ì¢`'üõU°þÚ…»7% ØÙi°3rÙÛ’¯škj¿Äù‹|Úßú7YÙ…ÚdeÚÐüq–CVÆ¡˜!YV,eehï¸ÈÊl³´·ÉÊ-YÝö«¬V‹BN ¹)<ä9T*Šdå›fŸ4×íEëì«CQ¶¿ãõÿ…ˆù¸j¸Sv¼••“•ï@…¡»KY¹ó‚÷ ™¶CVÉÖ£¬ŒvVa0 EuÇ£¬2Yy›áÅS¸=GÑ×aÊ!+/7ŠÆ²²K{Ç!+_?ã-μã)zå£ÍãFV42v5_kª:E:8‚!¸šÿ«,¸šcÔœ¤ä¬š'ÃàqFùʰBçø_Í„ã½ÛÕÜ=j¾ù»ÿÃüXñá߬É6pÀ<ÚEÔýÐ2t>ãõ—…»)$ËóìDö@Q°þú*Ø íÂÝŸì‰Âá …kbÔÚÕÊâ!uÓØ}AÁŽQVþñ¿fĘr޲²›¬ìhï¬ÌC38Yùsé…vV0²rëéŽöÎ)O;‹‚y´C W…ö4¿ ¬¬œYùZ—²2*-4â,Ø4c²r§©o™ëô¢WÎM_?›Iò&ÙÙ‚ü­Qs¶û|]Í35·IÉ$“Hnü¯ ÀŠyWtw'k¦í<®æÆÿ꟦錚3Õí©Ðé-,Ø‘û„ µQËߎØy(ÜM!Yž§`'²Š‚ð×WÁNøkîþ”`Ç&)iÀS©å"¿VV˾Ïfv¼ÉÊÿ66´  $ÅY‡e0²2'™Üde¶³8%ÄvKç,’•Ëø*+»ÉÊ·¹”•oÜ+†-vuçicÑ@­3ŠŽ6‰©îee¶blÞ 쎓O~‘ T¢œ¿§]5/FÍѾ‚>‰Õôú*Ö3sWs>_WópGÍI ìeTu ~Mï/Vą̈9øW®³PÕ¡EˆÛÕÜ=jîTux†ný0½ªCÍ"iò™æî< °Ó8ÜM!Yž§`'²Š‚ð×WÁNøkîþ”H`g{¤ÁNã›Öš6Œ!×Ú“D5»mÈìxÈÊŽQh²2'wxXf™¬Œi!Z8de¶c¼ÈÊ£/„¬ £PðcL;ËTwÜÊÊ.펊ítàöO0æ°[H» *Ô±5Çz5‡ÿUQs’’³kÔÜ!%;•{žØ1ٱߠ@cåɲáÐ7‘;ÿÁw%O¸›B² ì¬ü üØÖ ëµ!+” Y™F¡¯|'޲²›¬Ì „CV¦µA†de…’¤k”•ÙÎê£ÐÈÊ;ÑBJ'+[í¬ŒÉÊ-F•ka¤éiM—„?j~ó.‹”ܤ䗤Ü‹÷fû*ÌQs2v5‡ÿ4‚HÄp# è"%5')9è¨9î·›”ì<%š ­ç"&Hwº{4ÀNËp7„dzž‚È( vÂ__;á¯]¸{T¢" v–ìþ$ÝîÀ•­êÎÀugB;~de£½óOS  ²2«Y™>£1éÃÕÕÁPë¥=™H˜õSVv‘•öŽ‹¬ÌöMýÉʯ0APQôÖçL;‹Tþde3ŠîOVn:òˆáùFZ3€ì5GŠîÅïÞ#Åц#ÿ(#Ws‡”L.“ñ¿Âµ]Ȩù¸0GÍÝ@gã×ÿ¶Hîö¸9«:T—¾ ­ÒHæ0^ûˆánÉô<;‘=Pì„¿¾ vÂ_»p÷¨D;ã#yPl;þcº‘%¦f×î;§½2ØI'+ÿÇW³JV6F¡.ee…z)+£Õ<”PÈÊ ¬ìMVÞk@D±€dåí†( Y¹Ñ“ošVš;2R›c\“[Y§‹:ÝÔ©ÛCÐT¸µMJ¦€ IÉ{gE)­k6šC€1+®æ¬¨±²–£æn°³àäÏ~Uú† F«4’9Œ×þ(ÜÍ Ùž§`'²Š‚ð×WÁNøkî>•h`ç¦R¢œ»3K»ºÓñ±Ý!ƒteåt²²£½CεwÈ!ä©,’•oÆx·CVf ©mFÊÊhgù)+#+£…”ÖÕØÎòUV¶µwš¥++_õÄa3ßêÄ&øwDj ˆ^«9ÚWNU§«:–«9Ûqå` ÁÏCÅèÃŽ‰q5sÔœDðìp5DJvϸݟºª:“MU‡&ª“Ö½i°óL¸›A²=OÁNd;ᯯ‚ð×.Ü}*ÑÀNùHƒšm°c -íêÎUwlÎØ JVþðFŽGYÙ!+?¹×jg9deÆtàî³9Yùà Éʵ¡¬ì•9¢m)+Ûdep`È…1 Â´³^€ÚYð¢JíÂê´w8ŠDY™dåà Eû|#µÅr«ª» SÕ‰æ¨ù´3ü™ªÈÓÔ'ê†ÖGÍ{®Ë¾Qs*e5wWvú¯>í$WÇäÀÎÒ—>4ØîflÏS°ÙEÁNøë«`'üµ wŸJ(°c“”‰$àiÙ}½ÕÊòTw&Ëåm—eì˜v–‹¬Lÿ¤ÉÊ»¿±ŒB©¬L£Pj²ò-óó"+ƒŸr zÆO’+Ǽ-u#AV6Ú;–²rÝÇß&x/wð½S[B›`¨`Ó¥F§Çíj×£æ¶ÿ5&û“ÑD¢6GÍ5·ý¯‚IôœrÐ3åTuòU/ÛNüi°Ó>ÜÍ Ùž§`'²Š‚ð×WÁNøkî>•ˆ`çµH‚nåÇ{qw Á3‹à%3­ßg›c“£¬ì&+S{Ç&+O†²²›¬LóIY“B’•í’•ÑNj‡¬Ì6«;UÐöau§,Ú@¥Buçþ˜p‚ö«;½‚•op)+;F¡.²ríÁoHñ'Z1ƒg¤¶™`ˆ (½ªÀÕ¤€®ænR2®³4®—×Íëççàç¡X½Qo™÷#Ø")™`¯í̳f:¬ó‚L«¯Z~´²è¹î¹ ‚$|³RÖ7“Qsú_…;jî¾ÿ¾`I8UäTÉ:ÓHŽ4ØI w3H¶ç)؉ì¢`'üõU°þÚ…»O%"Ø™Áãì•–/É[nœ_uçÁÅ'² v¶üÀQtYÚ;ee´³¼••aêRVv“•ûlþL‚’•¡½ã­¬|R꡺SË¥¬ì•ÝF¡þde»ucÆdå4|ßHm…êLD )• CJæjæ¨y]G@püIîòŒ«y˜£æô¿òu5wÔÜ;³ÞüNÊ4]`tuœªNÞrã¥@ŧN!w7F0¿ w#HÆç)؉ì¢`'üõU°þÚ…»W%"ع=‡[c .ÎSfÌÍyÊŽõ©î@hº;×<¸S6|ñ[–@¯²²¯Q(«¬&dHVF;ËWY9¬ü©h8de¶³PQ¸€AaÇ¥jP²ò«ºãVVFVviï\1ð ymßHmµ:½ªSÑÂmPÕAeÈØBÀƒ‹| ò‚¬ªÎs°…x"‡°…È`Ôœ¤d§ªS›¤dTu25G«¯»SÕÙhUuÿ«@®æÙ1jî¾ËÞ–B5gX|¯J %“«ƒªNž²ã$Ïec¶Ú­ØæÈµ·"Ç»ÂÝ’ñy v"{ (Ø }ì„¿váîU‰vªfã!AÃĈTgó”}%1Õ¶³\Ü|U§JùÖKeúßf ðlA;‹J»$·Ry×(+‡HV€Qt‡¬ÌC›žNôvºÕ£¬ì"+£ÂA«„¦N@@`à•« >bÚAéde¶³‚•öNp²rÕþŒ€a-;øwFjLn]è¨9ÚW$Só:+ xÓø}Ñ÷‹ïE.9IÇŸ2¥–SÏH›(Žš“ƒL@ øš‡vÙ¤dh4±}eO`1—ò\6Vò”=ÓÉ3äÜEˆ{ßec>w#HÆç)؉ì¢`'üõU°þÚ…»W%"Øá!ñ·l8 ^ÇkÔò]¸<¥FåÅ¡ô‚©î õ`ÈÊœÌ26–Ð`ÁÚ3å,´µÜdåµPVvÈÊ$¿Î vȰ¬îL8ú‹±) ]m Œ²rˆdeŠèµuÈÊ“3!+ÛF¡ì+ŽoÓÎ2ÕÝÆ„3 fœÔ¿ñWV^/…P±©ôð@|£H›µ¦}ÅÇP…¹p{hêtÜdUuÀ¢x¡ñäbUS`´®6jNèà£æ–ÿ•D ºC–«ù9ãÄÞ}õyã-F1VĄ̈9øOmüÒ·fêm8¦ßFøÉ³Ò u*ÖŸ÷Ònÿ«ÕàZ­ÿêwý 6jNð[¾ÍRÿQsOU‡@gÌWyJjà›oDLEü+rúúp7‚d|^°#øÿ3Š?Åj-p]ø\ÛKîkÁ¿ pícbx½G|®çˆïµ¸ÞÙ1¼Þ—|¯'†×ò™Ïµìô¹×%¬]Ì&-q-§2ùÞúNÅÕ¯„;vàÐ çñÜ®%9¥?âpÀó»SÝq¢S—ê¸-Ø)ë>ûgHUžLÉÊF{Ç"+²2¹$Yy ••Ýde´fH¼åX5‰¸³æ¸µGYÙEV6í,›¬Lšì +_Þw¿i-ùFj;Ku¹0@OÄ]ͳ{Ôë?ë¿iVÝX}£«¹5jþyÜ«@$õû‚ufÙ@‡Îæ.R2²©êŒyà ‰ÃÈÉJˆg/ ¯I|.«Í;ß7L°ã©¾Eû3)؉ì¯}¬¯‚ oÃ;¿â9U£ýÊèýìÌ ãP`5h"Wf7¹ñø´gÿQöÊY~de¶³ àoV¹ÖËdêoB<Y™¨QVDVÆè3« ¬:"+[Ú;YÙ´³Vrýœ\ï(+»ÉÊhgqj)»ÉÊåÜgª.¾Q¤Ýz’YÕY/5)«9MR¹·`-¨6íåjîø_±ªKVuÿ« £æð3#·ŠîõWsŸQóõ¹Wsÿ•eöé´¯R*N{G¿&»Ný¼ ùT6³¼³|{<ölùýC(¯Ÿ“Ø9ˆçäŽÕ)Ø ï õ~)Ø }³vþ‰Çßê}‰ÖãìôÎÂaÀqßÕˆ’¡,*w#âcçõ7¢Eqõm¶öŽO;Ëxð¬;[î™<ÓñtCVïƒ(R_²ò ²2ÛY´1xìåïŒY%M+i^iÈÊÐÞa«†DÜ@dåkÀgqÈÊä¹x“•EbúMQ¡Ø´³àCYùi¹ìþ½ÆhÔ7ŠØcê…Û9¤dØBx‘’ŸM'%£mæå•…QóV15Ÿzð)×f¹ä¯9ÓÇÕÜVJFûªlÃÙ2}ó{î1ó_‘Scy3ËC<æb óYÑ”òjydö9á߃€ðÿoò‰eøïf±^;áÆ¡Ü;;á¯o°óC€ï¿W#q)‘¨`§vˆ`çM<®a(_<®âÕ`¯ûàø½R Šõ«ÝQVÎWÍjgðä¯5KšÝ¿SÖ~úk†UžÉÊ4 =£P[Y™\‡¬üª;¡“•O%+— ¸”QV‘¬ÜÉRV.}ï^ã¹E±'ðß–cº]Õqü¯`AA+Š4gÔüö¬¹šsÔœ`fGÍ?”›–3.SÕAÅ˸šCŒ1«ù…Œš³uÏ‚R¨ÞèྣOïöÕÕÝ7Ar\úÿÿí!æd*K=‰ô™éóL å5sÒc‚€jñº vÂ?ŒC¹§ vÂ_ß`g_(kOIT°Ã_¾¿ep|…»ñÇÌ)‚˜‡ø=³eÖÖ¤|“yYÙejåð”m³B&ïû*(àI7 ý]²òÒ ½ã"+“,ë!+È„¬¼áË(Ô(+£¢®CVf¤yÈdåýÞdeŒ„{ÈÊ´’€i'Í;I8.qÏ#PèE:lÌ–Qsr‹( ˜£æˆ´àxüÕïL[pÖ3ÓQsTÝÖ}õo3A·åÇÿš{¹ö“_ ˜M©=ۺ׸: ¬;<U'˃OíÍ ”8ÿNÞ™a9P¾âq5$ÔgôÚ·d–ë9íß세…’+X_%(‡Ïù̇ð›he;¡|I²ã1ØøØüÿ‰ÿÎèù2{<æÿý?grÜÿ¾ ‚q­îØdOgÑ=¿ÃC‡aÁzs¥÷Üchký/ èÙŠvV†ÊÊAÈÊs”¬ŒvV†deG{deiºÉÊT*ö(+ßí«¬Œé,3ŠN£PKY™êË|¼o˜É+ž,¹šãuX]Êò¨9Ù7€˜mª: j“¿DùL¬êÐjƒ–^®æh ’üMø$ÁéOFA’’)ôH¹T¡Æÿ -GÞÃI{¿ˆ]nZ6Ðñáé”o:_foû T ã<Ž-Öˆâ™å«ÍçéŠÇ’`è}*†ò9é1 vì¸ó]+;áçƒVvÂDµÙ±ábÃ_â³éoÁ—åµñ¸¶ˆw³r|û0¼ Uç¯zkÝ!,;€'¥îi|ÏY}þÉÊŽöXNÿø)+»ÉÊhg±:1h÷·b)+;F¡þdev9ŽÍ±l²²CV†öŽ·²2´wЂʊ²²áÚçWòôØgˆ^Шù‘ ®æÁGÍYÑŠÔ¨9ïAkÁúsm ƒ©+Vt ÐaûŠ„äÉü_@>ýÏ}qifù‹ÇäBhï–_ø3þ;Ó*ff¯lÿ®`'üÃ-”\ÐÊNøë‹µÓÊN”ñCB¶±ì_¹؇ %ø[†òåÄã*"v^À¡äu ÍÝyN*^½0ðxø;V…‡€§ ÚZö|éx¼ÈÊ_dLVv´wHV¦öN†deþô†¢G”£¬ì•)Æ>Y™Ú;¬îl3Dæâ} H詨ú˜ªÎõ[Ðö²•’¡ÙÃv5|¨åcž‹êý¹Xb+ŒÜ!ŽÄW†ð¡„Í'ÈŒ€ ü¯H´¶ü¯Þ5Ÿ)Ë®æh_‘ìmª:G~ÁˆºÿU°Qóåþ]¬¦ÔЩÊ€ŽMH¶x:Sv§É#½Ù•Ox7„˜Ë%ñXïYÚÊsrÚc섇’+ vÂ__;á¯](¹è1‰ vÈc¸qQfIALFdÄó ëÐÚ|ä{iw÷VëW¾aÙ<êÏ—^³Žú©ï’¬¼‰ÊÊà‡¤++ÿjÚ*l¯°Í2 ÕñYîÜFVî¹Î¥¬ŒÏuóß—ö¨î´ö(+»ÈÊŽQ¨­¬œ1YùE#hµ³¶´¼bZY¾ANOjg Ú¤d<¾è­´Iɰ…(ÞU!€¤÷í7“`ePUâTW¥GQÕ­í-89F} ‡”LA~~–ëP± wÔ||0WsŸQó1/}.¥Rƒ©R±å"™·ó£°r&pô S#³¼¶AC<¶w(ÍiQ°ÙEÁNøë«`'üµ wKX°ÊfiŸâÛ˜ :¸Î8,…kÁ)àI©7O®ê³CV}œÞÖò#+S{Ç&+Ï…²òL(ú:de’jG†JVv´wl²r;(+;de:…³bBëZQ„`þW!ŽšÓÞÂ×ÕÜŒšã3dÕÕœm?*Q³ªÃêØTu<®æPJž÷ùÅþ*ËÏC@6”¸}Ú›R Áü@'}òª}Ÿ­Báœ"ažÄù"¡äº>Æó vâÿ/äŠL[‡ÑZÛ$˜Æ:î³¶\g_e]UPFû& ÀÎ!Ÿ{]0Zß“pß'iÁ‰&ˆ@$æˆR žûX*Ã;ËQXvFÒ OéÖ+dÜ+Ÿ{ÚZÉÊç~5ñìwþ&4 eÛÅKYÙhïXde£½;Ž¢ßå(+%+Ÿ1ãÛ£P²²ÑÞ FVÆÈxÑ[-²²1ï$xñ Vt›q¯‡­ïáû`¼¬O‚Ã!¬¯‚Ü”;ogr¯‹—ïQ°ëH:°ƒC¡ bC„u=ð¶ûA:Þ¿#CÀSðÊùÒcú›ðZ²ÆšÝdeZ¸ÉÊlgM}ëÏ21Y#Õ‘•9©ä•ÙʬŒv7C!+³-EÀãf<®æŽÿ•¯«9|¸Hlfõˆ‚†WŽÿU8£æU$Às»šg:jnû_™ª@%«:Cwž—R­1m•Щï«Ï6Ðq¿ßät›xßPâéú°9D|™É&­`'L¢(Öµ§‚ðÚ1 vîQ°æ%»7E¹#ÿˆÐq¿ïà9G$µ.H­.ÑÁô H¯àñ4¸k»¬8÷7Ãåñ(+g@VfÆcš)Yù¼1Å4de´³‚‘•YIaE…|™ŠàͰ\YÕ¢1<>a€ Di$jgmR29>pY7¤ä0GÍé–]£æ‹0j¾X]Ÿ:(ŸŽì‚ØxÈ+\ ö:f⾃ újÄÇlÔ vB\Ë€¤Ï?üa*Öö·,€mc%`‹÷ÿ›ƒøW{­•ì5^›)ħqryÅE/~"W´‡­@PÀ3OJµZ!c^úÌ8j»Éʬ8,ŸÄ•aP™!Y™F¡»¾GYù®§ij‘•»±º*YÙ1 u”•LPHD.Öë——,€C  R t‚ºšãuÀ2¤dTu,Ws‡”|̘•Öý–Q{n:Á5o=ý]?WsŽšSD1ˮ樎¹]ͧ¼ù£Ôé¹Õâç ½ÈÉ9ï©«¬>6ïh¼€÷uhß=ß­dxlÎ!nAÌMãå3âÚžð¹¾Ü׆Ëàú¯õõ㚊#†Yßxjc=à{±Z;\Ç(Ÿk¹Çç^§XϘWvqM%´„ðý.M‹ÕZ†ú¾IÓÆÂæßñ¯x<[ÿ ûîr{,½Wˆ²¢ÀÊ­“Þ²£˜QVvÈʨ@¸ÉÊÂ(ÔMV ÷ÑÝß½‡v~iõh—p§£¬ì&+Ï{O²r‹É¬\ËMV&#²²™ÌBõÆ/ ´lª:Ùà±ÿƤDK¶­tptŒ` 3^>C®è°\¬Æ[>Ù×ó4þÌÔÐ6ÔM@^+B×-óu PˆYeGïWæ÷+™×(iÀo€–ˆ¬˜'Fí0ºà¸¤Õ‡§Eél¥åê¸ð°ÂP÷Ž­²ð?Ëú¯~—Õ˜ Z~þ7Ã+ ‰¬ì…ÚdåÞ‘•¡WÓF¡ÁÈÊäÑ'+¿lUol|#à¨9ÚWFÍAJ6jÞ2œQs|~_WsŽš“”LÎ'Ûfþ‹\7bŸUÍ!?‡@‡÷À:¶`à ?+©q t&àºT@ðZ/ɼ¡ÇÛgS°“³F<åcRð\--œK^úTjt\é<¬$°ub* l¥ ÒÀŠÃÐ˺/¡½ã"+;Ú;<¸y€ÃA>êÀO2ÜQVάü±áº¬L7Y¹©—²ò #êGq?CVF;Ë­¬LœbÐÊI¥Wø9¾aUuÀçq¦µ¨´ 7uCJâjÎQóúPun8ö¤©4±ât!£æô¿ 4j>zï·RýÖÍé@Lj:@Dz€Hk0G†-<¯ ‡£è÷ÆÓæ¡×¢Yf9 `Gs$³‰Ö¿'رOq Çâñ—ù¶?J—þÏ{[mÙik±òpã˜ý‰þ§¬ÀXôTwÐ(Ú0äP+&Y™íº}ß»åsév¹-´Sð'+Ÿ5ªÄT'v”•ÝdeŠü#+§uбÇÌÓÿÜ*EÑÞ²HÉ–$)‚MœôÊpÔ×Òrê;Ò†‚s QÄw5wü¯25¿Õ»R¬Å2»m€Ÿ SóºU²ôåÏâèÐN¢C´6}= ²+ìh.eW.]èë$%رO^{r%.°'—¼%EQI°´x\<VPå!à©yÛf™qô'3M²2ù&!“•·aiïØder]²r'*+Lx”•¡½Cb0+,tçx7YÙ£½c‘•Ó`a©%{‡!-³ªƒêñÏŠÀ¨9Ûs¡ŽšOÄôZÛÇ_ón[ùòs°þ7 |ABããš¾BÔ¾Ð/º>_X䀂Í»Xä] ÷LZ°cž‹pPÌÓCL–¿ú¹Ôê´:H[Ëâòk±Tú?ý¾¥¬ì&+S{Ç&+‚²2Û7C‚’•?5L·"+O?cZGY™žTY¹2••]deVh`XÍ1¦Ÿ>Ab²Çÿ*+£æ¶ÿyDmÀ'ê0ÇåÌÕÜ!%ƒ«CR²t¹š?þâRµëFW5Ç¿mUìʹ2béÛñ rx]ô}+/›…^‡\YÍ;š3YÍ™H=>©Á޳h80"þ gû[?É̓^ôok9äe›Ësí¯£²cYÌF;Ë£¬Œê§Ž¨ÌŸÊÁ£P•M;Ë&+w¤¬ì•ÑBòVV†öª;²2ÆÅÉ»¡'>‹\»Ñ/Œ–§ªãò¿ò5‡ÿUGÍï\xJÒš-I'!¨æÔ¹~µ¬ØŒÇœ°¯é%ü™©/¾¾®BÑÈ;šgÑȳPÞ#G€»ÊӇǯñz¸Z~RŠ7œ—a•çŠneü¾oýŒBƒ’•¡½ÃÑì>›?3£Ú=ÖB{g¥?Y™z6ÔµqÈÊlgÕq8Y¹ÜÍ ·ßàÆÙ< ®æ Çv5wÔ|$ŒR[ xÉän¦­@B6®å3ä–Á/ÊŽ·Šg ³yzq(_`}Œ&ñ’6ƒιµvfÅËõêuä¬ïNŽ;6ài„Cä‡x<+_ûBêÞ¸6@•Ǚؚ+iMË}+ÎdJV~퇬|_VÈÊŽQ¨­¬LÏ*‡¬L1@йn“n»Î/È×1¤ä £æ|­@®æáŽšÓŒ.ðOäôßö©\~ý:[ Ðg¤œ ÜœWÍ“Ñ+OÅ3Èùró Ý„sÖ&œ,÷;°óo<¦^²|^ý‰õ=ÍQ`Ç<—ã@ù ^+݇ :QczÖ–%FØzÐËpD·Œ-'ÿ“1º}ð'sð Æ(úGYÙ‹¬ü‰æ#Y™B}n²2AGS‡¬ 5ã`då"7JáÖkk]±FŠÂÂkÔà¨,ü¯.ø¦!<ÿ«ÌFÍamA‹‹nË?’ÛÐvë¹þW¨J‘”lQ­¢Ø Ýß ]ÍÉUºyÆq)Òh‘màé#hkçÔ»q¬|ý‹x:TE¾]7ÐÄÚ@õ~¥ß¯LÀ-%ÑõÒüŽUä8°cž"8XÄ+àáu]u•ˆ¹éÊˬNP—‡cê†Ï3G*¡’ñÄî/-£P’•öN:Y™€ÀKYí¬;7„FVf‹É!+›v–‹¬\¤ÃF)tÍj¿ 99Ш9ŸÐÕÜŒšƒ”pÔücCªæõRšÊо£æ½ô4zàùtcZVPAvZV:·}9ÞÛVt6o«M@ßW ìÈ€™JˆMb4-%²ã=ô54WÃÍ vlÀ“  e÷ãö×þê=_Jƒ®hkÑ[ \G}Ù zR-;ç¿-“ÿYž ‘¬liï ºƒê «;äÈpŠ“PFYÙMVF;‹­'7Y¹ø:…®^éôÏ ÛÕV4,eU‡š@¼>Ëÿ*ð¨ù½ëÏI¹kW[ÀÏrl»»šSm«qkNÇíýµsï<þ¬îXŸ§›¿æ€æ€æ@æ9cÁŽ xþˆƒfb<ž'–Ã^–”êÓÒ«<¶å„ô4ëû¼Œ;ø£©î°å§¬ì!+žNVF;ËWYÙMVv´wHVf ÊQV.Òn½l¾Ü/HNös5‡3+Cg¯‹±ö+Ǥ“’Ã5¿þ©ÃR˜Nå¬rùTr 0¼bš\ ¸zï—ñtŽ ÷ŠêF•ùF¥k¤k¤9 9p!9£Á޳p8pîCPŽ?nǧ־#%aZ y°JOùkWÉÀíŸÈX…Bs††˜Ô qÈÊl9då;Q5a›(Cee‡¬ R“F¡6Y¹HÛµR°éR¿ D`Wóà£æ´®è ‹ëQÕéºôœx¹š£}ÅÑù1BßïÙ¯¤ïŽ/¤^ïÞ¦6ùØ9\Ÿ;†¿*‰ñ|?qmÛy.äË«ÏÕÍ_s@s@s ´P°c âà¹AYþ¸=$×îûJÞ´VòU›ôÌ”B æÊ-ÓŽÊhhï„LV†›¸›¬LCVnDee²rj›5R°ñ¿à$V)¨-—…§Iɬ™ªÎðã†ÿCÅ iQA«Š¶h›];í+«9HÉ]Í¿’žKÏJ™ÖËÓÉYݲÛU8\“Rh[MXw&nïŸ+·fáïé&Ú&¥ë¤ë¤9 9p¡9 `Ç垌¨‚òüq{`î:õ³ôzòUÉÃÝzœjÓÞBµ£aŸ2ì•oÌ´§–²r_(“ì{w ²2ŒBYei7무r)+{ÈÊ-/EZ­–W-ò Nb•ÿ=µ*¹HÉuÀûi0úm#ZH§õLGÍ7€«ãTuPj7b¿!Ûèä8ÇnWq òU*º­—µû¿ŠÛûfç…-u"EËußÕЈrè‚û,8£2ˆÓñ xxm“Ö¿+¥1­•¯êz¼«=ÖØúe¨„<°áà ”•£Ðåf•IvÈʬº#+§^³J \¹À/JÞ³GÊeã¨yŸ§ÏKÍÛ·XÇUÅq*9üì)øì½G¾&q~Ïþë»áBèóõ®æ€æ€æ@Ös@ÁNt‰C)ñrœž²þÀ×Òøæu’¯Êd@ | ¯Ç®ö·ó؃F{g´w¨QC­KY9Y™F¡àÒ"+S'§HË–J±O”¾w¯q57£æ¨‘çC'u’’MU'“Qs*<;£æÝæž–’Í—Xü$ûó8Uó9ñ™Ë4š+Sž>ï ‡×÷¢¡nPYß tÍtÍ44²#ì)¥ápº±<Þ+wzMRx*ô ÐÚq·¹êöÜ"žýRÝm)+;dejظÉÊ]—¢º²0¹4mÑÎ"·†›Æ.²rêÕËÎo\vÿ>ã¥Å1u# Hÿ+XOpª‹V4e{Œm²Ž5')9Шy‹Áp*¯‰jŽÍÅ1ŸÅ?cåIÒô–õ²þà׉tÞC•ÏŽ/«¾†núšššá倂Lú†8¨žDPÆ?®Ö©Aàm8GòUšdÀ@ àSªù"éµüÝŒ••²²£½c“•ɵqÈʩ͗š‘oß(ûÀ¾tRr€Qók2q5¿}Å9©Òåi«-àð³ÔÝ3úu´­âû~Øù²ÒÍ)¼ÍI×M×Ms@s »r@ÁN$)X=ÿŠwÀ³áà7Òm­¼'šð>¨Œ€^O»a{­v–‹¬ÜËWY9²rjS´—Hv85åÜ/Uÿ+TuHJ¶ª:§Ñ(ÛbÁFÍ;M9!EÍ·ª7N•Š à­’õy.»jŽLßü^\ƒNWެÃß/Í®/ª¾Žnúšššá瀂À WKÄ/ñxXñ¸wÌë’B€pùðñ?Õ»mû7"bÚ‰Z6½7&+›v–MVf;‹Ü›T˜‘ZZ?ÞQ±ïþÀ£æ“35oÔo·!›Š”7“<×m>¢Å­ëåé7¾I 3^7¥ð7%];];ÍÍìÎ;!‚ðTØù$Þ¯² gKÞ OYaƒ†ôªÏD)Ži®[çžÊ€¬ü¡\ç•ÑÎbu†Ü›Ô&‹<`Î$ÿ¬ôð~CJuÔüÆgåòŽ«‚çºS*NÆíICaÊ>Ùý%Õ×Ó_s@s@sàÂr@ÁNÀŽ xŠá@;š€gãßJ‹[ÐÖ*7^ò–·ÃüäG5åê/CYÚ;.²2•Œ²rG²rj£…ö˜Mˆ¶ÛNU9àíjî’) R²´IÉmƼ)EêÍJaÎuñOûZˬÍÜò~¢¿ 'Úé†ta’®Ÿ®Ÿæ€æ@$r@ÁNÁŽ xòâ`Û™€‡×ø *#)—?%yÊŽðaøƒŸÊ×­–;VŸ“»`¼ÙsÝ'Fɸ[ ²òÔw$õªùém&›ÄŠQµƒŽšÓh”U¢}(uïÞ%ùP±1Õ„ñOsmãpc¥e÷õ²ñð·‰t¾À:׊ÄT_S7~ÍÍÍ Ï;a€ð\„nN¢žY¨”k0Sò\61Ö †0øgZrý”câ•o]ÉêÎ9¹Þ!+C{‡£ãiWÎKo¹*2ÕÌpÔ¼ÃôÓrY«eØò ܘkµ¸|¼ô}jo¢€^çID)ÝŒ.|3Ò5Ô5ÔЈT(Ø ì87Ýmâþ€Þ„JÉ5·®•<¥GKž2 'lðS~œ4ºÿ9¹Õî«ÝÊʶöÈÊiðßòª™ªÌx©1è—«9GÍInfU§éÐýR¨úT/`cÞ›×ÀkÁ5Uh8Kælû î×Ñu¯_ÄßóGêË©¯«¿æ€æ€æ@ö䀂 ;v•§ ½_ððû¡rR ÀM©QN8ÈAå[/•n‹ÎÊ­hgÝ´ìœi?9då´úsìJŒS‘±þ¬=ø £Åã5j>ë]¹¢ûVÉËÊ ØÀÅ÷æ5 Z£mµùÈw‰tc-ÿO7¢ìÙˆtu54"™ v²ìØ€ç*~ß' àa¥|ýé’»äÄHO8àƒ®6IÚ~C²2IVN±Ø+ÞQwÈ!ËÕÜ5¿zü )ÙtÐX¯þ^|ß”²c¤ÿ¤}‰r(094’_J}mÝô544²7ìdرO„$ àÙüæwÒæ¶u’»ø“V”`ü8 D€R÷Žm¦ºsã⥔•ÓêÎôHXª÷øWóúýaa²Sî×äßí÷»¼Á ™·ãÃD:¿áÞÞ¦›PönBºžºžšš‘Î;ÙvlÀSâþD<¼Î¨¬(ƒŠK±áÞဠüY¦é|¹næi´³>´Ú¨¹þÍù{ƒa‡VÅ7XÇyŒïë.í{¬—-G¿O$ óÖªY¤¿úúºékhhd(ØÉf°cž\8ŸN$À3–ËëO“\iÃ<‘»è⎂ÆJ‹!{¥h­iøÿŒ|¢Î#¯KQ´¸|Ÿ—+í Ïk(=R²?‘@¯õcDeÝ€²Ò5Õ5ÕЈF(؉رÏq@NH$ÀÃJKûîk%W‘¡é‘Š¿»"7€KTlr¥ùDTsÜõüÝ~½Jõ§ÊÂgÏ%Ð9Œ{˜/£¾‡núššš‘É;;NÂâ ¼A„9äMF[«ÄpÉUhˆä*ìŽÇñß¡†ý<¾¢cÏõ²õØ ³öýÚŠ?sëæ™ÍG×U×Us@s Z9 `'Â`Ç®òtÀ¡ù×D<¬ÀTª;Y.-8ñXØQ Ä2dÚD9¼Þéˆ?F단¾æ€æ€æ@är@ÁNÀŽ xêàðü*‘+1o_+—¦ +ªÔ›"‹Ÿÿ8Ñ€Îpú馹MG×V×Vs@s Ú9 `'J`Ç<¥qžN$ÀÃk2u¿H{\.Í70äè|Ç:Ùv<áÚVÇçíí/¡¾Ÿnüššš‘Í;Q;6àIÁúR¢žÅÏ}$•kO”Kòô·cþt‡õÿH"ÃfL´j¯÷[DÝp"»áèúêújhÄ"ìDìØ€çb¬Ë ð°RÓ¹ÇZ¹$×#£ZI²ô…„k[èœE”‹ÅPßS7~ÍÍÍÈ瀂€פÖp²´H¨JȰ¤@¡Arñ%ýAðÂZ¤ÆãL¯I7~ÍÍÍØç€‚;Îü=ˆßs8èٌϟ[7“Øo&zôhhÄk(ØI`°cWyÚã°ÿk #öEðü€÷hœè_½~Ýü544'ì(Øñä@È¥ˆõ<âµ/× "q6½Wz¯44’!ì(ØñË’§"xâ5‹$×F?ƒnþššš‰• vìÌ“{¿gèÙˆ×É¥›Cbmz¿ô~ih$K(ØQ°4PÚ#þr€gžÿÇdùÂèçÐÍ_s@s@s ñr@ÁŽ‚ s@¥6âË0«B÷ë¦x›‚Þ3½gššÉ– vìdš-¥'³xþŠÇ^›l_ý‹‚àÄ“ìXÏý?¸ÇM°a…ãñ!sÊæ* 2Bv²„ì€(4€=û F'QdÇz?áÞW®€Í)³7'y¿ò~‚Xa@ÈN“‚°‡agã@p’Av¬×ü Ï´Ö –/V9l®‚Á€` ó0 d'ÃÈeØØ+°ÿÄ™ä„ÓgÇJTbý÷oðœ³aíd“ʼMJÞ©¼SÁ€` Z Ùɲ'_ÖöìÿDp’Ù D˜>ÁóO5öÃ!¿/¬`@0 È ÙIS²g^v/l/ìŸI 8©Jv¬÷õÖe<¬žlX™±aÉ{”÷( D‚!;iDvà´‹Àn…mƒý5É'ÈŽõ_Çz‚Uäƒ"¿#¬`@0 H_ ÙIq²ç\v l-ì¿Sˆà¤Ù±vm>‰u«(›Wún^òîäÝ n1 d'Éœp~Ø¥°e°_S”à¤+Ù±wmæÔö>°2n?4rœl°‚Á€` ½0 d'…Èn'ØÓ°ïÓ€àdÙ±>§¸ï†qª{qÙÈÒk#“÷%ïK0 †!;I&;p¬-aÓa_¤ÁÉ4²c}Nwßã´wéÚœäψ81qb‚Á@´²“„´lìÃ4&8™Lv¬Ïög¼#NçxéÚœ„ÏK´›œü¾8JÁ€`@ÈN‚6o8ÊZ°Ñ°·3„àd Ù±>'§Ás*<§ÃK׿}vÄQ‰£ ¢Å€8nØpˆUaÃa¯ÂÕÍ8Ö݉ݜoˆxÞ¢Hê¬kÁ)ñœß>Ú¡ü¾lä‚Á€` ¾²c²çWv?ììßîðSe\„BÏc8=žSä›Ë†ß KÖWÖW0 ˆBvb@vàäJÁzÀÀþ7KN6¦±Ü¦÷ñþ'ÀêGò”ß‘\0  ÄBv"$;Fšævü¹ö·,$8Bvw E~8mžSçkÈæûÍKÖTÖT0 p‹!;a8­B°ëa`ÿ/Ë ŽÙ¹÷‚ òÁJ|Y Ù Et¬?§^ëe§ÑWvûá”ãd# ±Á€dΉ݌/ƒ­€ý.Ç?šñéúö#Ar†Ã>ý¶tDµ¢­e­#?œJÏéô}aee#‹ÍF&ë(ë( À²'”Öö ìGqÚÎéšVµSËnÎQ= æû;޲Ûm˪“7Q¿ ™î 'J’IÇrZ=§Ösz} Ù¬e³ ñÁ€ ÙÃi› ûJŽ3A!q9õT3õdÇrª{>‚ãDzåQ;ÖUß=×9“ˆJ¬Ÿ…Sì·Ân‘ />ž¬«¬«` ;1õdŽ%ö8ìc!8#0?ìî¬v«¯FÕ,æÁq"8Nÿ¯O±jÙM9꣕mcM2í|ÿ,rÊýÕ°‚²9gçæ,ï]Þ»` vÈJ²R6vNNðÓ×´S+o¯®ú—,¨#9ÝóçS÷Ù­þŸ“ÙŽãïò÷å¿@G†^y²™¤¸BWtqêýRØ%°ü²ùÅnó“µ”µ d²†ìÀQäÀ„½&'´†æµ™ÍÕŒnTÏ‚ù¨ÉÑÆ¿÷,DËïc½ çWÌ÷XÏ9ÌóõAz¨vqµ£ïwIŠË.¿Ã1ó`e“ΞMZÞµ¼kÁ@ôÈh²§P6ö",[ºGœÒùqoµdõhƒšÌx L‘üª·iEñ÷¢´õ¡!5E›Ø¢Œ:2¶±z{A+µèÚªêþÒ…ßØAmìYK «ZTGQ̨­ñ!6å ©å «å «Á‹¨WVV¯Íh®¾GŸœXØÇhF¸ ‘!Š“y ^k®i’*Þ É–7 dF‚æ]VI1"%ïÞý»ÇZ±kóQXX9Ù Ýo²V²V‚ÌÀ@Ê“lÎìf|!lìgqra99õÖü–ÐÕTÖäÁ›ŽB:ÉJn’Ü€t ¢!ê2¸baMDÖßWK_ÞVGrâa_mé¤>Ü)®²úš¼6ÍK€Œˆ’‡ü)0ƒøLhVZÝH§Ðaa‚]›÷úÃô31YÁ€` Ó1²6âv°Ù°oÄ™…åÌÔÏû»ªÆ5FÚ©´'‚c¤¦¼))#rc%7LÑ&·*£ö?Ø@}HÐ7Û:%ÌNOo®žØy("O¼’¦»òÈ'òãõÁ³ ÇñŒX}¾©ƒ÷ºs­þ†ÏÖvØm°¢™¾ÙÉó‰C d/RŠì`Ãm› ûTNx‡ëõå–ŽjsŸÚjDõb:ŠÃ4Á±Dn˜ž"©Z¹R[EÔü+*«—§4U_áÉ´÷—¶AD©¦z¸nq}oChù±G}̈&sˆþÌG‹‘,ÁNøØÁšý7lìZ˜tm–ˆWJù!)ÙKRbõî“hl¬õaãaŠÈI©w¶R ¯­¢@äÃÅÉSc¦¦tôäAœ*EÔÃuJ¨µw×TçžiHNÇ”²OÖ´W{‡7P·.‹{-ª†â~ˆ©õÑ"g£Â‹-V€1Â%˜ŠS¿aÝ–Ãþ“®ÍB|’î'båðä<ÙKš’bl ÕaÁÞg‘3R?£¯Í± ¹ZïÂT•ŽâÀá3ÕC N^ŠÊÁa @y2ªªv®§>^ÙN}¾¾CÊÛÉÉMÕüË++åýûSäl¦¹ ÒÃ#]Œx Î"ÃÖíØ|XgqÙë(äÝË»Ow $Œìð"l0ì%ËbÅE°_m먶öG³> äô'9‘1õ.fŠŠÄ€a8ˆÂ¼?TRÇ'4QŸ®é >]›~öÖÓ­Ôš»˜â*¡µ::âãæÊÓöxzù0ݵðš*:&¸‹ês÷%Öo:¬Fºm|\pA Ø¥YduÂyGX—’a®M{·çÇy ‡yîtO®×†kˆÿr³l}*ºÅN,KÙáMc“äPCq8¬Á»‹[«Å×WÕŽÛçEr|SUž4NNQõ´/«0†áÙ-Õ'«Ûg„_ÖVíTO‹©ùŒÖhµH¦¶ÇKz̆(¹ŸŒ´ØÑ Hq!2&XŒø³xE,7¡Dœ Îd$Œž%[ìñpÖëÒ:̵9çöü8oÕ0ÏîïÈõÚdgm–­Ï-n±ËãMv^ãÞÁür°«:>1W=Ѷ¬nÈNæ&Ç“®²‘3Š0±yiµýþºê½Åmtº*Sí(´9ìÍÈ•ÒC¢ÈµdŠk+ÆY|µUR\|&ËÇrJĹ„ìOÃÙ‰) ²üKEVl¬Y÷ ü›í@Tªª^Tq`@]]eôÇ159Þt•…ä̺¨¢:ŒÉç—µS.Ï{mz õì­Õ!º.®S\¦®ÇéaãBjzØo‘G’žþ¥â‚¸›‘3Á¦+"þU"ÈI¬¯!dGÈN£'Bv„ìèùUâT¬Á{(»^rCUMl8SGsl%享1úÏhMŽArFÕ*®–ÝTMšÚL_Ú6«íù­Õ¶¾uÔch:èéñè™H½%ëŒò€H’Pr)S\ÇËUŒ¨ N~NwÅšˆ$â|Bv„ìÙ‰iô*šTcVDvŠñu"¿ê¦^œÜD§ªzÂÄqNþ¶Es¬)+oohrÆ7)¥6õ¬­ÞÂÌ©÷‘®Ë[ƒ÷µQG5T3»UÈ#=F¿FSÏcò`ö*œ_ë€(g„MðêGz&&‚œÄúBv„ìÙ²“0ÝG?°yYÖ;‘owzRU#rŠ©ói'ëæ Åâmh”‘ë”{ä š3­syµ=hÎ=ÓF½»P,Ô¼„Òõ%×稑5< ­©-Ÿ("i}Hx@8{ʧIç"¤¸ØèP0ëýÌ^k"’ˆó Ù²#dGÈNÂÈŽQ‘ÅÒó¬u¬h Ç[U;Òû äÓN•D‡NVkH mŽ=šÃ3 ¯®ªN<ÖD[ÐZ,‚5x}f µ¡{-5¦QIoWfo”Ç«åÉKk1ÒÖï¨{¾ tå׉IM#qÙŒ_<{N"ÈI¬¯!dGÈŽ!;‰&;Og›³ ƒ|鉦:Uu/„[tž¢ãŸ¶2ËÉÍ~9£ë—Ô½e^{ª…z{^k±¬Á[s[£©b}5µ}9K”ÇÐòXÄ˽‹æ×D”‘·îùóéwGÐöê*Fæ² ÇxÞcMBu>!;Bv„ìÙI4Ùé•-Nâ»ç:«ëêοt”&Ña´À—èxJÊ™RÑ•V sLÂŽûë©7fµToÎi%§58:&Wwgæø –ò3¢Æª7³DÝÔñðÜg¾GþFèÎ#R—-xÆsJ9‰õu„ìÙ²#d'Ñd§y¦;‡V¶EuTŽNU™$ÇJt<úœü~ÕVCÐoÎ%•Ôó7RgArÄ·¯<ÑL­¼­ºz¨vqƒð DÝèÉ£u8ºâFs;6¸Ë+ÎÚbM †¹.ÜžçÍæ¹Óýý¸^£©`™,[Ÿ"n±ËãJt ÍN¿eá¡£{åÉfêÉåtšÊJr´SDTÀOˆlèsFÖ(¦–£tü¥IÍÔë3ZŠ%q ^›ÖBmíSWMDéºîÉc)O'áéi‹ðXß3>‡ÎÎßïꜩўÛb¹ùȹdÞ’`@0( $œì„çL¦:¶ÝCë©‘˜Ue'8Þԕѡץã=j«ÓS›«3Ð䈥ÖÒõ®õ4y6vd¤NWj!<|ç#¸‡S¡6ù¹8Á€` •1L²Ó5™ùÙ¹-Õì‹+êUá8¢ÞE ¨§Ú—W»¨¯Ž>’+&k‡l¤]UU±Cv8Xã±£ë—Pj¨~Ú—Ô×3©¼‰¹¹7t¨ û¯4¶±nž3Òc°.-Â\›WÜ^ ç­æ¹Sí=¹~V·kb=k³$Í×çòHž;Ñ¿“L²SdçßÉ <ìvÌ*šps.¸¼ª:8¼‘:òP®˜¬ADX{GMõ(†»ºi]`Åçñ‰¹ÉŒòôMôÆëëeÀl¬Çc½&6‡Û:ÌÙQçÜÞ1 A…yþT:Þõ³º]ÛÚ¯Mãµá{º&’çNôï$ì"å’AvxMëpÎ`¤gtÝjÕ­5Ôá‹ÉÄ ÛûÔSSÛ”S½Ñ‘Ù é~ç™VÉ$;­½1ÅúzBvdh„BÈ¢ÌAÖOÈN¨ ¤cS²ÈÎäVeB:™sŠ©í½ëªCˆæˆÉÄû‡4Ô)Q7dç«­“EvþÏh¡PŸåTÿ¹!;Bvâ6õ\ÈN¨ ›èÃÉ";ó¯¬ìÊÉô€¦‡iÏ€êÀÐFb²1ÁÀRTï¹Å3åš¬Ï ®{6Ôç8~.dGÈŽ!;IKea#½,Y›øúî5]‘ó[7;ß.„fgÿà†b²c`Ã]µÔÈêî;qbšz²>'¸îŠt 3¡îQÈŽ!;Bv’IvÊ%kß?²AXdÇ$=l·úÖšjïÀ†b²®1°½w=5 ]µÃ&w·)›L²3(‘H‡Ÿ Ù²#dGÈNÒÈŽ!Rþ"„‡“¨Ýh%œŽ¡Ãš€¦q[î««vßß@LÖ võ¯¯æt«¤»kGŠ·WUI&Ùé˜d&Ô= Ù²#dGÈN²ÉÎÎdŸmëè|žêP^=„áÁ{óô,”3³ ©™]*ª¨¬ÙÕ¯¾˜¬–_WM ¯ZT·9èQ0_ШÓ¤ìÅã„» =j%‹ìü ŸÍ¢¡ˆD:ü\ÈŽ!;Bv’Mv&$ƒìp’¹“c™ƒ¡Ž/=ÖL—›; H»£»-K†û/ ‡„ލVL-¹ºHO}1YµþÎÚz\Ç?#½ÑA™äØ©%ÿߌÎ0j$W±ã²&Œj˜,²ó~:7÷GWvi[7Ïé1X—’a®M{·×Ây ‡yîT{O®ŸÕíšØúìä¦ùú”ä¹ý;I%:FëÚd^Ó‰Ì<Þº¬zyR3urBSutt5çÂJÚQ™NˆÕYü¦Îü6~?Ú€²…Ô  …Õ„ÜÒjÍm5Õö^õIJp ¶t¯«f`<ÄÐÊEÔÀr…5¾H†û …Õ äØÝÓ ”Ú=°¾z‘Skª6u¯íHv^Þ,Ydg]¢7$¹žŒ âT ;U’EvmPÒϹ°‰à+“›©—&z{îÜ@Î,êYÈ7ªó@™Bj º+Æ(€¡UŠèf…Ó;VP›î®£¶õ¨'–%k°ðŠªŠÓˇ!m5ƒaI~I‚I†û•ðDwH’É\¡ˆZ{g-u| ÇŽÑΈ·å7Vs$;­l›,²ó`<69§83Á€` ÑH:Ù1¢;ß'ƒðLïRÁϹp,ĩǛëèÓYüÖ}b¬gÈåÆ{kë²a~S×QÒˆê”óDu†àÛ<õ,U«¸"‘ZpYUµùžºj˽b™º+o¬¡&5/£ßùƒ5Š©á9E5é\±°'º2ÌèÓYŒôé¬á >7¿µot'Öbe#ºCçJ'KgK§»æfDà€w úàêà›>#tÜÏi¤^×X{,W˜ÔD~¤‘zÂÛ¹«dµ=ƒH×®õÕ‹“1ša"¦ŒcØë‘1ŽƒÄÚ‘,’4î6¢;Ôð¬5f”‘hn¼£NȨN,JÍ™eT‡‘ø‡^…Avl©¬ó+Ú&ƒìÔçÆž¬sáÜÛ†õLÖ½&ãºX—ºa¬ ×ñi·÷‰cˆyînÏ ÇamF„¹>áà8m“Œ÷–RÕXÙYšh²Ã&Ùá·k~ËU³¸z÷™6ê¿èŽ¥³²úX3­Ýá€GÎ?òêB¬¼)kt‡˜3³V£<šé*{T‡‹c%pýäãMÔËSš*FöoñrŽšÓ¾rVÙ<<®×áˆÎO>› $ƒ$…ÖèÓC;§Ïs¹Ö$:Œ¬mÔé+DuLQrœJÍͨ±Å”)ÉZSY?ìé’h²óçdlBrÍÄ|³•u–uÎf ¤"Ùh²ÃÒo“ìÐáÐñÝR½ pnQkõÞ’6êÔ”fŠ=f¦·¨”6·CuSæßų½»¸µzçˆÈAîHòHö¼Ñ¦³@÷`¢øJ øäÚq ͨ#gVQr8¥æf§d·SÍYjnŠ’!$ÑađÇê”P}ŠðÑípŽZ"?Ƶºgóf(Ï.d@0¹H9²cèvÎ%r£? 'I²cêuúà[v¿Õ^T󼿕é,C¬ÌÔCD•Ù{šó“8Gi¯½³r±2S.ŒH<‹èÎò«j¨eW ñ*Žö j ^EÚ† F6áà¤ìw¶h­Þ_ÖF¶­úhU;õÂè\5¯SõT³ŠiiÓ@Ö¶ACC÷!ž‰=’øw’:’;’¼×Aött)½#6Öz½VX3®×pµ‹¨Ž½Ôœï+Ü©æìÇdN5·–šS”ÌH!õ`Ô… ([ÈKv˜F%ÙÁ9‘ŸãZ¹²Ùgîf/ïVÞm6c UÉΚDnôŸmè Œ©×á·l–£oÂH–´Uï-á *V¶¤³ V¦^# X„Ç1ºcvVfu–!Vfe…³¦X™©Îbt‘Ίb*gˆÐQTy£:ˆtœCÄã½¥mÔ¨èùpe[õÇ5íÔ§ëÚãÏözÌÁôÕ“M*¤12ó6Hܧëñ kÛiòFG2§£; wLÝ‘¸2ÒEñ¬ ׈kåÕ(ÙÕ±—š›ó¯Â)5çø“šê”¦}ª¹µÔÜL_1ªsfF Õ¿TA6eúÔì·Ã’øD~p­¿Àògóf(Ï.d@0¹HU²3<‘ý/»j'CëeèuHv–ÝTM_ ‡º„'Fbe3ÅyJ{1@’c8=Û±³r±²™ÎbjjÉe <—VÓÍ™†9=­¹OT‡W·SŸ¬m¯Hê¾ØÔA}µµ£úpy[-ÊÒ¸BJ&2:òõ¶ŽêËÍÕç;hÒö1ÈIœŽî€Ô1ºÃÈÎÞÁ @p<óÃHt¸FËôÕJS”Œ ,ꡬ¥æ$˜*5§&Ë qbl]‘Çʼ—'5SfTÇœjn-5·FuŽÏŨ¤M™>eÛ¦SYA–ÈÏ®õªlô™»ÑË»•w›íHU²Ó-Á½Z¹ˆ&;¦8™ß¶ç\R ¤ _tÇG¬Ìê,C¬Ì™GîÅÊžt–wP(Ö™be³÷ŽOge±2µ;K‘¢á€PŽDXˆÑ /®¦v#åòÎÂÖŠ}Z>ZeDu!QørKGõõöNêÛ»G¿5¯•&J7(ŸRÆT«œ¾ÛÙY}÷\gõÍŽN𤑬}¶¡½&o$qftç8„ÊpóYüqM¸6\#þÿ@¢d¿RsvJ0ÕœóÎ"jn-5§þ‹Qè½C¨ûQùÇ´©U¤Ìtd‚? ³}3”çB È\ ¤*Ù)‰þ߉ÜìkQF«6ÅÉ,ýܺŒúhê2kt'€X„‡snV^ïT™½w܈•‘Î ÔYٛβˆ•¹0ÓYì¯ÃyYŒ†0âslL®'ªƒHˆŽêlFTÑÇåçý]Õ/0¦Þf´¬¤&×+Ÿ\«_c4ꩯ·vR?èª~ÜÛE}¿»³&g$i$k:ºÃt¢;o@§´©¾ݪêg'é³Fuì¢äpJÍ÷8M5g©9¦Û›Qãx·LY†SjNýÓ¢L2Uú@D­"åÏðŒ‰Ä?®ÕW6úÌÝèåÝÊ»Ív ¤$Ù1DÊ'r³ŸwY%]úËo×ü–ÍoÛ×.¡>zéFwt:Ë+³÷¦¦XÙì½sÚ%ñ „©/¥èÔqpPèÑÑMÔ çjG©…:ˆ•ÍtKžƒuVÖbe‹X™‘ 3õÌ…ÂC12}cvKõ9""$ ߀00RòÄOûº¨_@(<ë|!PWLôn¨ÉÎÄ:ånKv:¿¼½¾ÞÓ¯H/þ"FRöÈ™7ºÒö!Þ §sLŸ•Į̈×€kaŠ’ƒEuÍ¿Šzª9KÍ…@¥æç€è ªÃôèò«i²Ã´©Iv]üõßIB­u¶o†òüB™‹T&;›¹Ù¯Á´q6¤Ãá·l6T¡°&:ft'l±2 O¼ÅÊ$<>Ñj:ÂÁHÇÓ $š«Sv|6’Ý@t\DuR¥ÔœÕ}$Î$Ðs.©¨«±Hv(R¦flDµ¢‰&:ÿÀg­lô™»ÑË»•w›íHe²óH"ɧa›d‡Ž‡ß¶–/¬ÎÎi©>^é‰îØÅÊfïÝYCY^LAª5uò14¶á9ë1#º¨÷N´beÎ2ÄÊft‡ƒ1ÙI™ã#æáïG ªýv‡ÕAäÄŒêXÉÎoGþ ~;r™:;»šÝ®ª_½l\lRòjßà&ˆÞ\ŠëñšøÓFxHÆHÊÝ9‹’í(!'yãx>›T¢ä/5gúŠÄ™éÑÉ­ËzÈŽ¥"‹éÓDb×z3Û7By~!‚ÌÆ@*“˹ás¼€ì Ù91±‰úãªöyé,8©÷-¥èa‹•Ix@8(¾=4“ÎÚoôÞ‰N¬\#O¬L££;HgÑ6â›Ý®²šÙ¦²Ö´œ9Eu4áñødç÷.W¿¾©·jR[csÊÄÌÖÜ\ÕUãWàZ—kr¥ Ctç³õôr޾ i#y#q#ÑYÀô•ÕI‡RskT‡úá:Å5ÙñVd!²³àÊʉ&;Y5xQœZf;5y¿ò~0Êd§\"ÉÎû(_ö–ã[6ÓXœ¥ôÉjTþ ºã“ÎÒ¥è©/VÖé,otÇ3+kfktR†ya~²BXÂB É :$$:šˆ¼p¥úýèUêÛç.S›ïm¨ÆU‹ŽðÌëTM½»¨‹>§>·¾®e’KtçǽÝPýÔØsÏ i$ks@Ú˜¾bŠ.O” ­Nš”š[£:Lc ®TX (²A|?]~^@­ë^3Ñdg°8q‚Á@&c eÉŽ!Rþ2Q„‡%ÎÖ²s“ìlêU[}ŠF|Œî|R¬œ7(4˜XÙLgyÅÊ%aë¬ì#VîQOm¹·®ŽnpX¥9(”•EሕÍèÎ,ÎËâøˆih.¸û†'C·ãÕ1ˆÎ %G¯†]»¥ì— ´»fØž)*ªÚªßpϹxN_Âã–:*ERFrfêØÓWQ—š÷©¯žCéÿîþ +°ö¡ÿ?zJÍ=‚r¦)0绣àÜl H!:Û °íç_YÇBXç_™¥æ%3ʨÎÌ^\±°X®°Av<åçœÊž(Ü×é”É›œ<›8qÁ€` ÕÉÎs‰Üôâ6E¢L)ì Fdg9Úö¶®" Œî e”¢ÛÅÊo£_ ÓCì–K§ç7(Ô…X™Ž–—{é€wX;+ƒð°‚(`ge‹X™)–a;‰•gÑ–šOkŽNÊM+j2ñâ„–ê—ÃHaÙ¢:^²s DåØu°ëѼ°~·rHÒ3¾FYL`oª~Ø‚ƒßÓ¿o%<$S–èÎË:éÑì³C2FRFrƨÉšT'A¥æ :l m©¹©Õ!ŽŽaöÚàŠE ²ãéµÃQ%ì@Üÿ®ULœ8Á€` “1êdgB7}5¦QIÝÉÖKvð­{6ªe>‡fäÓµÔtÖ‡$<¶ÎÊnÄÊfïWbež•Ix6Ü©è·b”„Žîø õöÞ "V&¹1£;$ÁnÊlJøÎ‚ŽFŠÉÕ±ßß ~?~£úùð jÿ°Vjbmg=ÏŠkë©O7"Btü&}üïÇð{šðøGw¾Þ~ :7PSs+¨§@¾HÂHÆò¢:U´VÇY”œ¸Rs³S2…çì”Ì6>ó¯@tÏ‚ðúFuòJÍͨ£„{ÐPpH%hÃXýgöÚaWèâþýLÞàäÙÄ Ä@ª“ë¸é«Ý*hÝõÔQ0Å0©eõ9ò™Ñ±2 O0±2ª³Ý ØYÙ"V>©Xº›5Àá–ÖA¡ÞÎÊ!ÄÊ$<$$$SUД×ÝRM/1ÒMyMXH\4¹Yý~âõõÎkÕºÛy£<³Úæ`tÃÅêOøÙï'pŒIvH’lÑŸ]©l®#9SA¶žlâR(ªM©¹9ÿj+æmÇ@QFÍ= >ÿ Õ1ÒW'ç_5÷I_Ù§šÛEÉŒê0J¸±G­<²ci,Ȇ Äýzqâ ‚LÇ@ª“ª ÜôÕò›«yÉSZ$;£jS_lD×^#º‰XùôÔ•QE]ˆ97+à Phw8¿i³1(”Ñû PëÜ,{geS¬Ì²m–o[ÅÊf:‹„㉆袌NÆüsÏÀ¦êÇýˆðé+;ÑùÓ‰[AjnÓöþòËÕ±qÕoÇÌÿÇ?AxHŠ¢;g¦w€à¸ª¾£JS]"ÑÉ‹ê }¥+°"+57ç_q5dôŒ%ÿæTsj§X!ÇJ9V̱T?Ôü+Ý@ÄöuŒ9; QÛTs«(™QAŠÝ%\vcŽÙaZ+‘˜ÇµFfú&'Ï'Ž\0 Hi²cˆ”HÔæÏIÓžîÉ¡£ð¡UЍ1a›„‡%Ð!Åʘ{äé¬@¬ŒÔ'c›•ƒ‹•}…êÎÊÄÊžt–ÑYùZ4„î…ýf;+³:Ë(E·Š•­é,FwÌNÊŒ²¼4¹¢<–¨"6$2šè¼x»awàOÓðÿ4 ºUG<„‡¡ÔG«/Å€ÎÚ(g/§£HO šÄ¨µC$:N¢dŸRsο‚É^j¾òÚšj•öé~ª¹)JæPV’Ì.æ_…3ÕÜ/ªƒô£ƒÔ€Í¾¸’Ùa§q¹¥Mv.G Ž@0 Èt ¤Ù9(²ÃIÓyd§°—윅øøËMˆîXÒYnÄÊÔn+ƒðp¦’wn–_*ˆbe:äXˆ•=½w,•IxÄÊ$$ $"“êblDírjBͲèiSC½· ©-Fi4Ñ1"8šìäÜi1þÛCvÌèη»¯U[{äê1<¯=bT‡š!kú*ªRs¿@SÍ·ƒ,îà°OT`åEu°ÖÊjFu˜RdT'SÍ­QOú ³ÊÕ¡Œ)RjvØÏÉ1뢊‰$;ÿÁg«t¦orò|âÈ‚t ;SEvÞ˜ÛÒ‘ì¼8©‰új3&n;¤³\‰•§ûwVö+c˜$u!;++{ª³\‰•QÅÙQN•½é,Dp<ÑŠ:­d¦³HLáaeûìPŸót:šÈИDçä]êO4MzHv<ÑߎެŽ<Ü竨à ’FH¦¨ Õ‰¦ÔÜ“¾ª£¶ ýǨ£c$:zþU‚KÍ9gÍŒêP6ªVq?²³âÖj‰$;ŸŠ'  dÒìÜš(²ÃIÚN‘}#êë)ÜöèN ±2§ZûuVv#Væ PDL±²Ù{ÇÛY™ÕY½ëkq­9(t“Ñ{gýí¬Îr+›é,ö£ ÖYY‹•ÑwÇ.VžŒt ‰ ;)³ëÀ°Öê—çá BvÎνÚ =n‚Ñ!F‰BEu¢)57ç_q=Ø“ˆëÃEÁDÉûŒôÕAô;¢vJO57EÉQN5·–š3hFu8*bXÕ¢~dgÇ€º‰$;Û²a““gg. ¤Ù©(²Ã¡“ÔMx4;yi¬M½j©o¶uR_aj¸&<>beÿÞ;Á:+»+7Öú‘Ø‹•m½w‚‰•™Î2ÄÊft‡„e\õ¼.ÊÓšWQ_í¸Þ–ÆòèvÖÞæ©Ðb4ˆ$é±ZÒdê¤u©9EÉ.KÍIŽ©ùbT‡ ÈÎÑñIvƈ'  dRžì"åßExFÕ,î'P^Šª™o¶wòDwŒt–+¯õí¬ìé½ÓFQ”ÊŽ¹oG(V>‚È# Œ4ðPO²w@±2«³l•M±2ź¬ÎŠV¬¬ ÒNÖèŽulÄÏ^n({ËÓZTQcItlQ(¹|ŒKÍ‹’“^jŽô•5ªC²|l|®—ìè>;(='Ñ>;¯e"ÉΕٰÉÉ3Š3 Ò…ìKÙy¢MY?²3ë zR¸'º ¬³2«³\ˆ•Ù—eÎ,wöê$Vö¤³èÈ™¦Ñé¬;êø•¢³÷Î vV¾ªºb)ºÙY9°XÍ-•‰•I`ÌÁ ¬Ù±Ve¥è$;Œ1DÍ=}å-5GêÌÓ@ÐVjŽqáL5OõRsŠ’I’©ýÚ3´¾ÙaSÁÏ6´O$Ù©(N@œ€`@0 H²3+QdgÁU•}š ²ôü±f¥ÕwÏuVßnﬣ;ñ+³;/«³BŠ•ûC»‘-«Š(ºu콬³r ÄÊ:e ý`ÅeFÕ+¯òlzË*FúÊ#JŽªÔz#ÇRs4SL—Rs¦¯XÑÇTèúûjù‘ûÑEù—ƒ]Ev¾É† NžQ¹`@0@ ¤ Ù¹'Qd‡§­ã"HvFT/¦¾ÛÙ †èŽ™Î‚Ãúbzïs³üÄÊLg=ƒtV ±2Ñ™•9L’½wØ—C&Ù­—„'j±2 ­³²XÕY ºå蛜9eöÞaÙw8bå÷W`ž–î–ÌrtÏŸìœ<½UÕ€Q˜—šCœÍ‹Œn±k /’êRstJ¿Ô½0ËŒUs qÊ ñšÑ@ð  í¥æfT‡©ÐÅ×å¨aU<es\ÄCµ‹'Šèð:{Ä ˆ ²éBv%ŠììEå•uèÐÊEÔðœ¢êãÕíÔ÷ŒîxÓY1+cZ6©YŠnFw|ÒY˜¼­X™ ÷V\FƒWzÒY‹…º+?ŽÎʾbå²èœ|©Ñ4M»IÍh]5µJÍÑ)9‘SÍí¥æfT‡©Ð]+€ìñ:¥]¹D’IÙ²ÉÉsŠC Ò…ìäÙùŸDž—¦4Uý©çƒ0õÜ$;Žþ°«‹Žî|©Xy®ogeF 8D’Ã$Ix8\ÒÞYÙXÙLg±—LH±2 O°ÎÊ <œ0¨³²“Xùƒål4hÎË2†~âß3[W Pj|þÕÓˆ4±ù!'¶³S2‰ ‰ EמNÉ5õ TD §ÔÜì”ìXjŽÈ›=ž Õi¥;e³Å£wŒâù7Ì+5§(™Z¦@™ ߤ”îÎÍ.ÝìÖÍ Àg®®’H²s£8q‚Á@¶` -ÈŽQ‘õJ"ÈÎ{KZû!FdçøÄ&êÇ=]‡4F.Vn­ç&…+3L¬Œê,ßÎÊÅÊírPè*#X¬œ£H2˜ÎšcŒ’ `Ø+›½w¼•Ù{Çè¬ì!;%a1 Õ¦jÌKÍŸ…Øš¢k>Ÿk-žé+7󝨝ˆ•mû‡4 9ÿ*àTs3}5dä•ÓîÙjà=Tཿ¸­²N5·–š3åI­£:lað`õ¢^²Ã¡³$;ëï«™H²S=[69yNqè‚Á@:‘‰ ;ßìè¤K€Y Ì6þÔT°ÊžaõÕO{»¨v#ºc¤³"+¿ Gùª³Îé¬ì+³:kT°A¡Ñ‹•]¢³2*¥‚uVþ`ùÅÆ4óë}þœÝ¶ªNyyKÍ9ÿ*Ì©æ¦(Ù?ªzþUÒ¦š;”š[£:ç—·Ñ©QF #z8 ,È¢‰ûl(²ó³lþ²ù Ù„t";½Avx : ’ GM²ÃoÝ?íëjDw<é,ŸÞ;†XÙJ½Æ‡ËÛ©ÌÞ;®ÄÊHg+³÷f6q"·cgeTgY;+›é,OgåÚjM„be3¥;+c”KÑ9âÁ:(ôƒåSѯ³üy­šÝ¾ªÏü+ŸRstkv*5×é« sôh‹Å¬Àº é+¤ÝØ+ÈŒêPtͨŽ}þ§ÁS”Ì 5ÿùWž¨N"§š[KÍ)J&9&fÎÌj¡É£†L•’ì0uúÊÔ¦‰";‡³i““g§\pÁ$ØG°Ÿ`[`…/™‰—t";-EvÆ6.¥@0»(k²ƒª™…×TU?ïïêî8Š•QVLÇ‘…²Ñ Òft'oPhsuÊ¥Xù`°ÎÊì½Cí¿97‹i¦{¼é,C¬¼<±2ššbeMvŽ^»Ö0þý5»CÕȧš)5×é+C«³Á ArÇ~C£AÒDZžšÌ©æÖRs¦®¾FŸ&¦@9pv8GEdÇl(øþ²6‰";ÓdCÏÌ ]Þ«û÷ bSöoê’½v§¬¡û5L§µJ'²Sdçï‰ <3ºUðk,øTÇrº ÏLgÙÄÊfïoge#ºãé¬ÜÖ·³r±2Kœ]‹•1ÓÉÞYÙG¬Œ˜œEBÀèŽ_gå beßœëF¬Œê¬–w¹¹ÚÏæ€ìPÐíTsS”¼Ò%3JÅ9`Z” ÔœD'¼©æñ-57£:Œ>7¨žã¨ˆoÑÞ øÆ5îH§MJî53O²ß+NAØ7¢óü½a²ïK®¼§ Ù1DÊo$Â,»9Ç·üU3£ë—P¿ê¦8?+/åB¬Lƒ¡ÉjVí¼cï½3½¥zí©êôÔ:ºóÊd”¢[ÓY†Xù§ÎÊnÄÊ <Œî˜be³÷ŽW¬Ìê,£ÝêF¬l¦³Î/ï ¢s•¯½pÈRÕˆ¦š{ÒW¨ÀÒé+T`…%×ñ¦¯|¦š³Ôœ¢ä%ƒ2"veüÅA{CO#ö6b{1øÊäæºßß £oÔX1—'Jní'JVjÎîÛŒê0"¸æîš~=v#‚˜lר'j|6TY×ôZW›ò°›a}`uåý¥×û ç}¥ÙY–‡°µÇЬvwV¿ìæ˜ÎŠV¬¬ÓYF)ºݱ÷Þy!be¤³ØqØœ›åß{'|±òùå]Ôï/\égó:ì4-JNz©9‰NœKÍÙ®€Qïd—n{Ùù¸ÜR‰";gƒc3wó—w+ï6›0ndg@"ÈΑ1+²>ZÕN;$ßèNÄÊ콃è‚)V6{ïx;+G(V6ÓYZ¬Œ5,á¦è×:(t¢*/€HØÞYÙÞ{Ç+Ÿ_ÞDçr؆ñï—«§;çhAs4SÍS¦Ô-"-5·FuXÍ7¥]Y¿J¬™˜¿–lã'²iƒ“g‡. éFv:$Â!¼>»…âPFŸŠ,ˆ”YEÃë{ÓYF)z¼ÄÊ:…q[àØY™ÕY) V>¿¼“úýÈe~6¿kŽz²ið‚$TYÁô¦k©9{êP˜Nº½ gª1ªC{5=R§„_%Öò[ª%ŠìÌ•Í_6Á€` Û0nd§(ÈÆ¿âMxþ¸¶½êW¢ DÊžŠ,v¹eÚáÈØF^‡ä#VfïKge_±rõÇXˆ•Ax¨-¡ÆÄ:(”]€9Jb_±²§:Ë…XÕY,õ¦f†Ñ–€sê¸)VžÓÞ¹³2ÉÎoGþàgóAbX®Î²uÎÚâÌ­Ùm+«9í«¨y?[ÓW™\jîI_uÖDçë­ÅÉÛ(²s_¶mrNÏ }FØ£°±vþ_¡d¯î¡o€û³Þ3Ÿ¡k²ïÕ~}ÜS{Øè÷;þ‘dß3î¡–ÃýuNÆ}á>ª¹x×|ïa•’q®‰û)»/Àý?Œÿß4î7­ÈŽ!R~7Þd‡WýJ𛑵ý<‡ä$VÖ½w De—\vËå,$¿A¡.ÄÊg‚‰•9(Ú€berYnÍj$–_³ {+ʱY–½ å٬ΊZ¬ÌA¡h48­9¢6ˆÜœ_ÖDçR_{þR±á1ÓqìÌÖ•Ô,Mt*ë*¯y¨ö"‘bºŒD‡é3-JÆX–ÄSKÄy^ÖNɬ(K§Rs3}Å&”L_±ŠååÖ™XlqÀ(⑱Evš¤ÂÆ“¬{ÀÆ{7ì– kÙ±õï¿â˜)°üI¼×s.îÓ¼çOqldÝ«y]ÜÃm°]Ü÷ŸpÌ XdÝ3®}©Ã}ŽMÆýà>:»X3ó]ÿ Çîƒ%µ :®_ ¶ö÷~Ç\œŒµõb3™äÚ :kâMvxþÕŠú‰”WÜê›j(V&áA9vÍeJ#¯÷*³V´9ð”¢sÄG pä€_ï¨ÅÊÂc–¢ê½¾X¹Š&-$/$1$3ç—wP¿=1ìÃø÷‹udhz‹JyQÌÜâ( ޤð%£ Ãü+ÇRs5§©æºÔ¼?úê ‹åøÖ‚lÆÈ ò$ˆ$ŠÇPÝÆùW±žjn¦¯¬ ­QVñ½:­™ß˜ˆ~% ¨×çxR¤q¶¿âüIsÞ‘|Þcù;Øl¯‚±¼8ÁqúÿSbyᜠ÷Ù1ïýúp®Ëcq¿Áì}kB­õ¬XÞC8çJc²c®)I{¾pž9–ÇâÚÛÃü,ýÇ'­´?#;#âì´Ã™Ô²ŒW¤lvRž}qE?gD±òÏÁ:+ƒð0º°³2 QŠÎÁ’ggµT¯cþÒ™i(E7…†)VÞËèœþsý<£$XŽÍf{ŒîØ…+›é¬PbåóËÛƒÜ\ägäéÕ©¢£:L‹1ªãÛ)9†¥æœåTjN¢ÃRsöQÒZ5íõ;¶N5·‹’9j„ÃÃ4ôÓëô-^@}‚Ôip}:–›]º í¢07g:•·’õœ’ÅI¼ß§"XßóI¼ßtìX dòÈÃü5‚÷=,iï;YŽôºp&À)¨y—U2t;õTjêv&4+íç‚‹•óÒY!;+ƒðë¬ì+Vnª£ŒR±öÞ %V&á ÖYÕYL¹é¬LíÝùp«Ô.ô³…WÓQVqq’ú\#ªã%‡7ÕÜL_1GÒÆÔStÁæ_œjnôÔ¡ø› YêÏéó,ýç¼²7ô°Oÿ©æï£Oû%12÷"tì’X”ì)57EɌ곭»r“@›“Iv~ÆÏ€ëE‘~î2á÷°1/sØœ[ãÿYíMÛ1ç’õìdç=Û½ò¾ÿi»ßeI¼_¦¥ì‘œŽ¶{~ÕvÌÇI¼ßT';clk÷¤Ãúæ&qýþa»¦Ö¬Ÿ¥[îwdÒî7YŽôºp%aÿŽ·cX}WuE'Äœ]ÄFœgDrc¿vØb啞¹YfgeO:«µzÛHgå P#ºcï½ÃiÜL¿8‰•…#V¾+pge³÷Ž[±òyûºð߬®"!2EÉÁ¢:æ_%mª9¢loÏ 0ÕœDLjê0bǨŽuªy ¨Î¯èÀͪ+g ß)€§~Dµb‰ :¼F¿H?w™ð{NdÇþ\8æd “3÷kw8©FvŠZïkû¼ÿJ0¬‰“fçÛÚ Jq²³Öv¿¹BvPóÍæ‰Mûãx“]Cêi²cŸ€þ%fÙ¯L¬üu4bežx‹•9J˜›åØY¢a’³³²Ù{‡ÚFkXaÅhS4ŒNhãßaœ¦îÕñ/57EÉÏ^[C7<¤–(Ôü«Æü«]dïyZ£S2«ÓHü<’¡ÕA§dö("AûéLvFÇÛ9¼³°•ê]4¿þæmMe|¢I@ǤÓY†XÙú Æp”+tX®XÙLgyÅÊjÌÍrì¬ Âspzï Aïuã"V†¸˜UÔà0ºsó¾¾CC¹5+¬ÌRsS”ìWjÎùWJÍY"Ÿî¥æ$:ÄñÊ?ٯɛ‘&¡^swD¤ mÝnFñ>NÈN|ŠÈ×WÈNäkçvßH×ÈÎåñ&;_¡ù[¯" ;–TE¥{‡×è˜òÒY˜ŠŽ¾*¾•m½wØhW3ºcê,V¶ …¸–óœXBí(VáqŒîô®—×{Ç+sr8‰õ1:ºsƒg”DH±2r°)IÝ7;,†³r8¥æžôUMå3Õœ¥æ%ã^Y>¿½‡U”ŒRs¦¯bVjÞJ½©µ:­õ3qh+£V¾¢äv~¢ä`¥æL_™z¦/6uðKa‘PïS1Äù³n7…L=NÈN|ŠÈ×WÈNäkçv¿JW²S>†N y¡^G§²¼Ý” ©uÝkýN*¿Í3C²³r±²Ù{Ç•Xy¬ge{:‹¥è»ŒRtßÞ;h4¥Xù-y©e"A¤ñï4 œVj>Äaª¹ÑS'VSÍ#)5'L¬¾ýL+¿*,ê-Œ!λÝ2õ8!;ñu(Bv"__!;‘¯Ûý*-ÉNà«:GóP⪷Ý1ª²8±:ØuŠ•™Î &V†ðÕÝa„‘oïC¬ü*DµºÝHgQtK‡îÜYÙ“ÎÚcöÞ±tV6{ïx;+G(V>;§¥ú|#úÌн0ÿ¾d‡é.sþûîPììÔ@ÐŒêØEÉ1-5Çz9–šÏŒ_©¹µJ:0¶1¸¿tAM û- zίéÀbŒï¤´Áw»%â8!;ñu(Bv"__!;‘¯Û½#Éή;?3¥}YíŒÝ1«²žh[6¤¾"±²&<Á:+ÇJ¬ŒtÖ6¤„uVG¬ü!~ºC0­¶®½Z‚Ѧ]©9"pl h/5' \jîÛ¦`÷ÐzºAVa!=J"ݳ`>õ5ˆpœ±ü81·›B¦'d'¾EÈNäë+d'òµs»_¥3Ùy,ÎB-¼¦ŠêY(?„ÊLey„Ê#k¸ë‰âJ¬ÌQèÓB'Êrf–5³¼™eÎ,wÖ½wÝñtVÎë½­XÙLgéÎÊ NÈN|ŠÈ×WÈNäkçvÏJg²s]¼Ä†µT|óö¦² áa×[êqB];–be6·{“‘ny}zKÝæôT‹X™é,bå}öRôpÄÊ$<¨šâ N ™ŽbZŠO?Õ\}ø,zЬ4Œ‡-Ãñy’=ó¯¨ã Õa¿ ¥)˜æü«Í†(™„Œ:#޾ QsšuȘÅŽÒyó¯š8ο"Yä8Žå`ŠÐ(™“ëÙSç3ƒè%wÑ=uÌRs+NXbnöÖ!&‘~¨VñX …5?_ïvCÈäã„ìÄסÙ‰|}…ìD¾vn÷¬t&;9.6ù¨ÉQ Õ}òyRY:ºÃž;ÕG«8!ôÐÆˆÄÊì½££;f: •AÖÎÊ ÿŠÚ¦¼‚X;KA’HV¾qIc 1PAßùWýÒW$ÁÖRs;FÌyk:ªƒ‰ô”v¡Ó¢n°â˜Qn7„L>NÈN|ŠÈ×WÈNäkçvÏJ[²cˆ”Œ#H\^ÞLuÏŸOë*¬Bå×f6wGvÐ1—ßò9‰éïÙ‹ó’tïbeÎbbù3Ë ýÄÊŠèN@±2:sÊ7§}sê7{ïì7zïD*V6ÓYKt›2=õÊÍÔ»KPªmµÅ­5©q#Jv,5çü«”š3En©¹™¾â{´O5·–šÛ±Éq#L‡šQi¦Jã‰aãÜ—¸Ý2ù8!;ñu(Bv"__!;‘¯Û=+ÝÉÎÁx:Š–¹M¦{˜Ñ£ ýðèF®T ±2E­_¡<›Új@ò…bÑY9&bež•݈•Ñ{'Pgå—'7Uï ¬š½†SçÃè§Sr5#}…¨RbìãÃ~>BûÏ¿ª£‰ÓWÔ1}Å îL_‘¨±ºl?KÍAà ™Óc!Õ1KÍÝbÃÅ“šêŒ¯`j±öùWn¦š[KÍ­Øüawg-r7…ÉŒêtÏwÚØ³–k,Eˆõÿà÷J»Ý2ù8!;ñu(Bv"__!;‘¯Û=+ÝÉÎÔ€+ôÉÎ}ŒîÊ‹îlé[ÛÕï›÷æŠèNÀÎʱ2lDbeLð¦ƒ7;+3ôÎó˜EBÀ)ày•jòàF¬l¦³V+¿8±‰zói‡ù†ñï06%Lv©¹N_Ù§š³Ôœé+#ªsÎh ‹©æNƒb‰ê™¬åæŒê[j–"Àû§n7ƒL?NÈN|ŠÈ×WÈNäkçvßJw²s[›XÎ…‚d~·Fw–ÜÖ9¬beÎÂ(…ow ¥£;¶ÎʨΠÖYÙ+ŸF¬Œ¨HP±2RHì¬l+Ÿ˜ÐD½1§…Ÿ­¸ºº-ªSCWv1ªÃ¡£ÎQOúÊI”œÕiä‰ê%s:<{ê¼bgQ2"Q :çØ¢:œjÎRsŠ’mSÍÃ)5·bóôôæ~Q’Ó3Ü¥D£Àùv·›A¦'d'¾EÈNäë+d'òµs»o¥;Ù©…pEXmXÒ/ºóT§r®~×zoÎbåκt™k:‹N–ÎöÃÅÊ/a”Ä‹¨Î:N±ò£žèN A¡·¨³2 ÃybeçA¡ÇÆåª×far¸Õ kbºŠ•[¬àJëRó AJÍ)J¶L5„ǃ7ô64£:$;nÅîQà|¬ÛÍ Ó²_‡"d'òõ²ùڹݷҚì"å?EáB’–]+h²cÕîqê½cˆ•™r‰…XÙLgyÅÊ%Š'V>9vV¾Õ37‹Ff¬bå£c«W§5St{ ÿ¦Æ‡D'+JÍñ~ƒápS¯ZZänjuˆ'F ÚºA”ø¾ÊíféÇ Ù‰¯C²ùú Ù‰|íÜî[™@vŽEé ‚:©å·Tó’­Ý°”BÓ@ÚŒ`÷¾XÙP(S.f)ºïæZŸÂôÝ9aDwØ{†=h„æ‹'&åúÚÄ\Åê-’¡˜–šã¾KÍAtR©ÔÜÄÄÞõõ,,ÕAdЊ%ü}§‘нÇ¿Ž\»×íF Ç Ù‰¯C²ùú Ù‰|íÜî]™@v»ÜøÝL\«`. RG›ƒÒÑÏÌ,´ûÇdtö– çüÄÊ$<ÛÅÊŸ„#VÆŒ*{ge{:+2±²§:‹bev9ö”¢ç‰•<ØPßX€H ‡­¼DÇÕ‰÷T󠥿è”L½“½ÔüÃemuo#VÁq½ÙóÈþ•§ [°¢Ž"ƒ5$ žwYe=D–¸YÍG¢lÃÒ<gÀO~XØOá`)ı“ÝnÙpœø:!;‘¯¯È×ÎíÞ• d‡Nâbà ¨ýin_88§â°ƒŽÑc":‡;r¢µë{ˆ·X³Ÿ‚vVfïKgåhÅÊû†7PG R¶›¦b©9»Rû4´–š#}H­Î:jÑx$¥æï,l­©[Âg²¹CTç;`ªoÀPiØ,Ø?]ã)°†çF·A6çDvðÿúØìcü[Yì\²Ö÷pÎv/gì÷‚ŸÿÃv̲$Þï Û½p‹Zïÿ~ÞvÌÇI¼ßKî7)Õ‹BvNÙ>KãÖwdÒÞw².ËëÂ)œŠÂ1|Žß½%ØýÀ)僆ýË$=¦XÙ:$tÓZ;:¹"=LgqŽÒO(]þÓ²}{ïx­og娋•u:+bå=Cë«Ã@Kc±C4Ô’ó´:蔌ˆu?Ôÿ8Í¿ÚaÌ¿ÚåbþÕQ4L<>¦‰:atJö…2x‡NÉoó¯8QÞÕü+§©ææü+ŒùÍ¡kϰú ÂcÑ1†}ZEÉ~Hžƒ ‡É°}Qàš8¬ËÏYºŸ+Ù±§¿¿˜¬ç²ßoûX_!;*ò5v Ú¡>Küy¯¤}ž’uáX^›ú38FƒÆÂŠ„ºS6óþ:¤r‘¼ê,o:«€vnÔf°,ýíîÒZ^±2 Ò#Þ¹Y,E7zïpÊö§±+£Éž½³²XÕYï ³r±òîÁõÕtö1èx8DÔÚ@0QSÍ™Ê wª¹™¾r=ÕÜFtHrõTs ŠÕ’Íô•1·oë_‡•|Û€§Ú¡pǟ㸫`ç#À÷/nΟMÇD@vþ¿Ó6Yk$d'rGìæ Ù‰n}# ;¯âw ¸y7ñ8&íÓX†Cè†3`¹ïZXŽ›Åq7Á>5Ïÿ œÚô.å5áñŠ•t–žŠÂ3¨BaµkH½åé~be ÖY™ÕY>s³œ…º+&VááTñ<±²§÷+¥8…|«³î¨£µ;$/ì½óÜÀzjß̬zÐ0þÆŸ9Í¿Šu©¹gþÆBó¯BO5Ï›‹Ró·1ltƒ :…T?´% ÑaÄm ÌôIòÙy-­Q¿¿SS`ÅCáÇ„Q0NO©çC7Û~&Ùy ÇøÆ{ý„ìDçŒC½!;Ñ­odçŸ8v,©‘æL!;-]’Ó8®C¨A šâØwçÀºº*˚΢“£³ã·{¦2X­õ5&c»7S¬l¦³¾K¤X™½w0@ÓiP¨î¬Ü1„s†qr|Ç8l¾Ç_¬¼ãþzÐ,aP§Í8͜рSÍYj"Åê/Vñz¼î^–š\jN²Æ ³pJÍMQò{ ˆ°zÞ…(9ÔTs’UjµW,¢8VÄ;èÂukOiË+’ä8øÿ¿»KLVÀ±‹aÒ‡J—NssÎl:&Ù¹ÿßníSa]„ìDçŒC½C!;Ñ­¯Ù9êðYâgËU`!ÔûŠöç™BvøÍ÷AÀwøÙ}°|¡ Ç”ƒ1-ö¯P…ßè‡W-šW…oó:ÂCç7°\!õ(¾ñs(fÀs¹+S,°³2{ï@p°³²E¬Ì˳©s¡Þ…º=(4”X„ÇÚYÙì½³^÷Þ©¥¶÷¯«žÂb3’œ¨§š›ó¯ìSÍYjÎùW¦š³?žSÍIb™¶X¾°‡è ¢×¯DïHV_qxìâP82~þ*þtådq\sØñç½3Ö³íçNd'•×@ÈNtÎ8Ô»²Ýú:µ¡Ö<™?ϲcDbÎ:lþÇÿãdô¡Ç€ …ýîÒ9i'ÆãYUð ¥(ÕÔïxOa5) @]—c!V&á ÚY)ž`•£+oíSGm ®Ú1 Ïøï5·Ôô%3 Æt˜n èÕi ÓgŒêìgT"NigÔ‰SÛIÊ‚‰’_Q2µ:(¿ÜjÎRsŠ’mSÍ£-5'yÓ¨¤¢ÃS—vÎðœbê-—Ú- Þ˜b] « ¯æoűØ;ªúnΑMÇىι… ÖWª±"übí:Ãìß{¬kŽŸr8&7Ô{‰×Ï…ìDø²£}!Øð—Û6ýøw7çÅq—ÃÞ‡äØe:Ã¥êt¾åÓ j§8¸ba5÷R¤µ¶utü¦ï$VþÑ -Vn«Xatnæf±³2œ<»³k0…ºfïN'áaD$±²™ÎÚ¢ÓYy•7÷ª£¶öƒA|«‡­…¦‡F}{ô°WÓ`‰žj®KÍ‘¾z±¡Õ±—šCî¦Ôü—ÝÔsƒë©aUŠj]–&:$[u:ˆæÌº¨bØÍ&mxúø÷£°Â¡ð‹cŠÀ(´·¶_ø/ü;d3Ô¹3íçBv„ìØÈÃ¥äAJÏ]úp!;.*Ö)6÷†Ã` þKÜœÇՇ펆äX—cªULwWö`™N‘Qj;Æ`ŠúÙ¹þi­HÅÊŒRPƒBg®£;öA¡Ó[ê2ìÓS[h/…¼,Óö¦³ ±2G/øuVv)VÞØ£¶ÚÜÛߘâJ«Ró-è«rɺ Züh”š¹¹ƒbk!•ŠxˆR”${u::…YPë–b…'œç3ØÍ.±œƒc)¼gtèE7¿“mÇÙ²#d'v²“<²CÃXþP›8Ž)› ¦ó‰Èi}Šª§¯¨¤«qì‚e“ð «ZD§|(N¶:FG±òŽÈ;+›ƒB™Ú ÙY9ˆX™é¥ båîµÔ†ž6ëA¢ã‰ê°z+TT‡%ïÖùWgAòÅá¥yó¯š%¿®ç_A«ƒì”ìfþ•›Ró×g·Ð$Õ$:Ôb±‘dž ¹€z¨vqunQëˆ0ã‚Å1ÍBáÚHmuÀ±}Ü›mÇÙ‰£sÂŽ¤±"__IcE¾vn÷±ŒÑì¸y`†öé`?ºp0Q9®è3èõ;Ö -:Í¡UЍ9—TT_"š`½Ž à(Ž$øÞ©÷Ž!VþS¹u):¦tsZ7§vëA¡¡ÄÊж¼2é,#ºc¦³¼be 5æf9vVv+¯¿ÄæÞšj]w‹áß03}¥KÍ‘ö¢Vg›¡ÕÙi4d‰»]«sÈÐê°RŒZcFAÞkÞü«ø—šÿ°»³Ú~]ˆÐ‹øŸÊ«jþ•ñ®Â›‘þ(˜_+ïërŒÿæ)d'¾EÈNäë+d'òµs»×e Ù“è{#'1éyY]eVh1ía¦´LÂC¡ëDÌûr%VÞÀFƒô'Îsrì½chwÌèÎëÞtVsÎ )V&áH˜baІ=ÑÛ P£}í]5Õê»jøÉ;%%ÛJÍ)Jv˜jžŒRóO×µW³AF‡”úDtŒÊ«¾Ðd1ºs`Tƒˆñ!) §>i͹Ün.©v\€ÒsŠ>­V-Uî;Cª±†ÙÖ÷¼M'#ã" ɲóší]ß*Ÿ%ÞGÆ“8…ê°†–!ÑŽIë>][Å‘ðPÃÃÏ𜢊u)R¦ô+ã÷©1ÅÊ_ùtVî þHÂcDwÎëèŽ;±ò© beOïVC±*Š=oì•­½wVßQC­¼½ºŸ­w%oGÏöîy®ˆÎýˆê @Bhƒ8}DÇš¾z©5Nk?>Ö“¾Ò¥æX32ÅÙ_Ô!1ÆBIJÔüÔSÍtµU0¢óhý’Šd6B‹ߣ þŠTÚLRý^°?é HµWÀ\š*Ï‘†dçëk_o!;éKv¾ ñ¾“önÓ¬©òÁŽõ}À…M„ý5‰ÉëÔž´‘î»C‡5£ JÓ‡¡_Ïì‹+ª/6uÐ%ê¾é,•Ixâ-V1qꬼò6L7¿µš-¿¥š§+N¥æ§§)5GUÓyï Ý–š³‰à–>µÕðjE5 ÑYtmUMbSW¸‡=0)3w¡ÄÆ\ öyˆ ZÈŽ‹µ  Ù)еý(L“4‡ˆû”j¬ߵޔ\pÁÍBv¢XÀXlþÕ`_¦ˆ3ò:ÅW¶Uã›”2µJËÓ‹‡„‡BØÓ3šC¼ì<(”ÕBftÇwP(ÈJªÙ˜ÑNõf)ºcï6„vÇŒî¼ôX399 #)Œ¨ê¬lŠ•ÙñØŒî<{KuµôƵô&Ãøw؆;Q¡£RsÞ£Žê "Å{?í8ÿª•¿(Ñ.®ËÇ+Ûé(çŒyEÉ–©æ‚,ÎìVQGÙ¬D‡UWfÓÀå ©Ã£¥ ɱÞ…ö>=9bñ9ÊÄs`s®cëúب…ìD±cMëÀVÂ8"ÀÍ`H!;iÙ1Ï]xÏïx×I{·ÙÙaÇä¦áa)ó²›s|DËfÎOb:Ü͈0p„ÄÏш•Ixì¥èFï’’†¨ÅÊHK-¿©šZ|]U?Û²c%‡3ÕÜ%;O5Gu™ÃTs;<×SÍYj¾­“:9¹©ÖV‘l’t2Úf6 4«®Æ¤ž¶m*ÞÓfXȶ™H^"}&lεaN£"RFŽûëj»ÇÎöçÅϯ´Ó4Ò5‰åïឪXß7mŽ1i÷QÞáëÆrÜž ÷QÆá^|š‹âç5Ž Ù0×í=DsœVùÙº0šsÆúw3Z³p ,œá‰ sfG'4VƒQ•åm<ˆN˃ѿÅ.“ð̸°¢ú‘snÖ÷œ›…Rôoà ¿‚£þ‘‰Ïc VÖ½w¼Ñ¦:ºÃro–}{{ï+/½!G=su?cV ‚öRsV€…[jΦ‰Ñ”šsýÖ£‚ŒkM¢C²ÉæÞÎÈFy9£T$©©Fœûy JÁ(¢±ÞTå|+kàŸO²#ï)þP©´ÆMv¸Ðp¹©˜Ò¢£úxu;5±yÂÆu&á¡fÄáå)Mµ³¥N$\±²™ÎòvVžíßYÙG¬Œtçf1²Â²o3L¬¼äº5ÿÊʾ†rìÐë*5ßg á¶ÔÜ%Çbªù{(ÓŸÞ¥‚‡èúFÙÌÎÈŒðß8UIKÑïO¥ÍDî%»œG$ï[ÈŽ`$ÜÄâw2žì„§ CBËÎÝF~Ú×EW1q$µ!yÝ–ótW®o¤­|„Èž¡žŒ¶Mh^Z}´ª]ªŽ“¸:€œCœO"1 dGð–H¼Y¯•dÇ <ÅÊ•”t`/Nn¢õ"f¥–WÇc4 $á™Ö¹¼:¿¢­2ÓYÔ›+›½wòÄÊ…†+ëtšû±–¢Û{ïzç,B'g'’c¦¬%[{/ÒV ‘)ü¾ÙóbÙHÓg#•wåü®‚ñ³Q²n‚ñDa@ÈŽÑyÎ¥Œm÷SÖ ~¾±ƒš N¿ujË[¦n‰ôŒ¨VLíÞ@wVÖ½w"+·P§¬é¬`bežéÊë™_vÛÖ³nЩæŒ9N57ç_…1ÕüªµkVÚ/’cöÍé’È”Ö+O6KÙ÷k`ï üÙ8Q€\GœM<1BÓÖÇf7áß…ây]9·àÚŽ!;–6óp2ù`l¿Ÿ²ñ—ƒ]ÕÆ^µ@x èùZޤi›…hôGî§k;蘄é$V6…žeg噞èÎk¶Þ;'kª…ç P[ge ŸêP^mTÒÏHvÕa_FuLQ2#CìÎ|ç¢ÈY”ì)5}zK}_¼?V‘±´Ïü+h‘v>PW÷ᦫL’ÃHX_¬5E$‹©ünqo¯Ã*ËF-µ`@0 ˆ-„ì8ÌÔùÆvü)ë9¾oq_Ò£»0#ÒC!ó¸ÜRêµéÍ›éýqU{M~Hx(V~?±2 enÖÔvåÔ£èHl5v(ÞÞ«®0ïâ¾ÔÜì”ìfª9…Öó/«¬õK,#g÷i¦«¨m"É!!äú°û4µO©ü>qo»aÅdƒ‹í'ë)ë) Bv „ã¹ƶü)ë$¿ÜÜQ=Ù±œêSÌãÔuzË¢é¡ó§xyç€zF:+O¬¬«³ØhpA€ÎÊaˆ•§ ê‰}lØðPÿÛ†îÉö¨»13ªcN5§è䌅€>ˆU`LŸq„E¨©æ/Nl¢Æ4,å!8ñ`”‘3ÚÅH×dhå¢êÔ´”O[_óaùeS–MY0  ÄBv‚LK†j c{þ”%<¿ê¦6÷©­ú¹û‘£dd`¼›Ñ¥ˆîàßïjÂc+ç õvV!V~¼UY”Àó³íèžÌnË2›SÍMQ2µ:'cz,øü«–ºDžbjFrX:¿¹wm­Íñ#ŠC’ÂÇ5è]´€šÒ®¬úbsʧ­ØØr„lnñÙÜd]e]‚Bv‚£R«:Ò¹T&<¼·×g·ÐÍózɯúÀÙkâcêzíñ]¯„zéñfÞRtÿÞ;N•C‹•'µ(£(Œ¶ÛŽÞuÕA‹V'PT‡U_Œê„šjþF\̺°¢‡ààyÅ1SU’“_?ÿÆžµI`Š¿³¿âþn‘ÍX6cÁ€`@0 Ù Av ÂS މíúSÚ~µµ£zªS9Õ³P~Õ NŸÎ?/ÚãÑö @4ds¯Úz¤‚½³²±2£0v±òDTA Cƒ>_+¢vô­—WjNQrSÍ_x´±z¨vqC‹ãÅ!ÁéU8?:KV¯AË”êï ÷ÇF–eƒ‹ÿ'k,k, ˆfÇÑ1?(pNa+RÝ‘2¢±µMv4é `jÇ$>ŒøLGo¦…>`:+˜X™ƒB¡¡ ØYbå MXòÍ~¾¶dÇiþ«ºH˜Xåõò$DuÌRsT1*°Î¢‹ó»Xµö®š;>c‚ùôèŒ/·tL¢ó0TW6`Ù€‚Á@â0 ‘0ågÅ6þ)íXÏ¢¹ Ç!ÜW Ÿ&¾ÄÇñQ½˜:6.×3J"„X™SÇY)ErbFw¨¹¡öf\ãRºC±Ývö«çi a©ùé§šë¾B¦ÇŒàðYzâ™zàÙz̯5Ó`ô¢V)Õ߃q›ðgaÙxe㠉ǀDv"'<ÁyýžŽv;šî1ºs/: øKÔç ÌŠz}f Ë PX™é$6öc)8ÓY>•AxNŒmª­WR—½kÁ°iø÷sýë«°KÍ1¶bÅÍÕuÚMGo`ŒN™‡Ï@cÄç«mi‘¶"{–O6¸Äop²æ²æ‚Á€Dv"$:–Oc8±ÏÓð¼5¿•—`’óO+ùa¤äШFºÝO¬<Ý¿³²™Îz¤n O˜ÍHvÂ)5gŠŒbg+¹áýYï™?ÛÚ¯Nº¤­Ø˜²¿l¶²Ù ‚äb@";ÑžJphgÒð|»³“šÑ­‚á±’ ¦‰–ßXMC*‹½mØãæ,J¾_7…:ˆ•ªUB§™ì¶ë~‡‚N¥æ»Õ× ídÌúï!hH-R:¬5î‘ )¯’ .¹œ¬¿¬¿`@0 ‘(‰Ž%ÂS ŽmWš8aµkp=ML‚‹ñ5ñ*Dɬ†b:‹ó©òÒY¾båQ5Š{4A6Ûõ@}ÅaŸÇuAT_95yZxUUý»ÁîgZçòФ4YãoqŸ-e“•MV0  ¤$²;“îé4qÆê…­Ð°hP‚AÁñÞ¡ BŠ•G¢ªË‰¨ìP_Wk™’í¥æÇÇqäCÉà‘&hvv ¬›.$‡÷É”ÕeƒK NÞƒ¼Á€`@";1":ÖÝpǤ¼ƒþ~Wg5ûâŠAÉ53‹®®ª§Ž+$;œj¾£_]ÝÕ9X4‡¡ßZÐ*å×Ñò®Ùx²”l®²¹ ‚Ô€DvâCxn‚Óã8€´pÔ{GÔ×åÝÁˆÇ˜%ÕIˆ™Î:c+¬áÙÙ3¨ßü«W&7WOÿ¡²® v½™VPßîìœëg¼g6œ,(\jmpò>ä}Ù‰ѱèx:Àùý”.„çÝ%­ÕƒH‹IJ8Q}çõòÄÊèxÌÎÊÈÎÞÁ t/sªù‘‡«Ñ¨Ü Fr¨%Ú5¤^:‘6˜'ªl¨‚Á€` u1 ‘øž:p„¦ áùawgõôå•C¦µæ_VYuðôÞ!Ù)îø;ûHv Qòæµu/ž`D‡¢s‹Z§ÑacÉ{eƒKÝ NÞ¼Á€`@";q$:–OY8ÄÓ…ðð>Œj¨çi#&ì­sll®z ÑQ5ÉÎþ! 5Ù™sa¥i«9—TTÔ¥Ñ:±¡äE²‘ÊF* RÙI á) Ǹ!¹ú`y=e<áa¤fK¯:ÉÎVüì¡ZÁÏA­5Cé´6¸W6’l,\êopòŽä ÙIѱUjMM'§þãÞ.ꙫ«%<÷Bh¨gO¨^>#kSï-m“nD‡ $+Ë*¨`@0 H Hd'ñ„§œ%Ǥ“þÑFzòx°(O¸?£6ˆ¡tZÜ+G“ .}68yWò®‚‰ì$˜èXtŠY)HxÞÁ=U‹Üò»²9 ‚Á€Dv²œèX7‹A°ÿKÒs÷QR6)Ù¤‚Á€` ÈŽ/@0®ƒýO’ Ïr\¿@,À-çMR0  $²#DÇì‚h´ýÂÆ‡cdc’I0  b‰ìáq"<5A<ÞO áù®uw¬Á-ç“ S0  $²#D' Ùù(;šÂó;®q¡lH²! ‚Á@¼0 ‘!<ÁO!‘5q$<ŸáÜân9¯lœ‚Á€`@0 ‘!:®È.ɤ8ž×pÎJ²ÉF$ ñÆ€+gï›ó§>ÐALzÂþ#ÒóÎSLÞ{ê¿wyGòŽ‚LÀ€‰î¸ÆÊ`Ž’ðÌÅïçÏ„<ƒ8Á€`@0píèä…¦Ç ÷{Qi û*Âóoüΰxߟœ_p* v Ù‘ÈNØi©;áù+޽Q6 Ù€‚Á€` ÛÑ%ã&åš©÷áy)Ûç‚ðü„cÚË;L½w(ïDÞ‰`@0-²#‘ˆ1@í laÂó!~V'[>Lòœâ8‚Á@jb bG'/45_h2Þ ÍC0jr”Å^ÄßË&ã~äš‚MÁ€`@0 °b@ÈŽDvb‚›Û`3ÈÎüYX6Ùl‚Á€` 0G— "÷üNgØxyÉòä‚< Ù‘ÈŽ`@0  Œ~8aµòÍF0  ‚!;Âæ‚Á€`@0 Èh dôà ›6/ ‚Á€aó‚Á€`@0  d42úá„Í › ‚Á€`@ÈŽ°yÁ€`@0  2ýpÂæ…Í ‚Á€`@0 dGؼ`@0  Œ~8aóÂæ‚Á€`@0 ²#l^0  ‚ŒÆ@F?œ°yaó‚Á€`@0  Ù6/ ‚Á@Fcàÿ §¢Í·ü¸mIEND®B`‚fifengine-0.4.1/doc/logo/FIFE_small_d1.png000066400000000000000000000340011304641216200201430ustar00rootroot00000000000000‰PNG  IHDR;5d  sRGB®ÎégAMA± üa pHYsÃÃÇo¨dtEXtSoftwarePaint.NET v3.5.100ôr¡7pIDATx^íw|Å×ÿB !¡÷Zh‚t¤7Q¤I•^¥‹4)¥KPD@zï5´Ð ¤©¤òœßsÏårsovî½3»³{?¼òÇ÷kfÏœyŸÙóÉîΜyï=ü@ÀÏϯOŸ>,]º´Ù|½zõvîÜèãã# O˜f$E$H$Kñññoþ÷_Ù²eÍW7jÔÈôcbbþúë¯öíÛ{yy1ÛFCp™ ɉI‘I“Ìÿl*–ù·QQQëÖ­kÑ¢EÚ´i]ö@@@À’’+¡bT,s³W¯^-[¶¬qãÆà   |¤J•Ф…†dÆžP9ªXæöÏž=[°`AíÚµS¤HÁÇ]Xp7$!$$$'$*ŠBå´b™/|øðá¬Y³*W®ìnœ1^ç T©ReöìÙ$!ìBåºb™-ܾ}ûûï¿·üæüHp%€€€! HT`8!TËlêÊ•+ß~ûm±bÅ Iƒp˜I Ƀ+B%B±Ì6Ïž=;|øðüùó;<6\  `$#FŒ8wXfãG0`@Ž9 ÀCP @éž’>¥~¾B¥Žb™zIHHسgO=|}}o£ äÞ³gϽ{÷Rº¤U&³Éï æÛu\\ÜÖ­[;uêäíím´€a<  àn(•SBß¶m%w¾jaÏššŠeö!::zãÆ­[·N—.»…ã}ðôôüüóÏ)‰¿~ýZ¡Ró­`2# _¹rå'Ÿ|’:uj}‡Þƒ€€± PšþôÓOW­Z¡²PI¢Xf7^¼x±hÑ"*Ÿ2eJc£= ¤\¿~}JÐÿý÷ŸVB%›b™ýyòäÉO?ýT½zõ÷ß_OA…¯  `$”‚kÔ¨1wî\JÊš •´ŠevìîݻӧO¯P¡‚‘æÆ ²¨X±âŒ3îÝ»'PɯXf¯_¿>qâÄ’%KÊfø ú%PªT©I“&ݸqCB¡Ò‘b™]½páÂèÑ£ *¤ß)ÏA@@.… 3fÌÅ‹e*=*–Ùç“'O<8wîÜrÞ€€€^äÉ“gèС§NÒ…PéZ±LÎ'&&8p wïÞ~~~z™$ð@´$-[¶>}ú×qÁ€ð!P @#Fœ;wNÛü(´wZ#7kÖ,ªÅ™…Z ¿xñb:DX¨ÿ'™?räHÿþý³gÏÎ ‚€œ9s8ðرcfCº¾víZ¿~ý2dÈÀÅÙFY³f¥¢´÷ïßWaDZuAKThùÉ—_~IïEå„ë@@ÀY²déÙ³çÞ½{)i•ûTè—ž þùçZ‹¯æAˆ´¾mÛ¶ôD¢Â5ì"66vË–-_|ñ…è¿™×h  ` ÞÞÞ;wÞ¶m[\\œ†ÉN…®#""è”Hú&§aôè°ß~ûÍ0u@ìEÞ…nذ¡U«VéÒ¥Ó6º0OOÏ6mÚÐ~£×¯_« ÚvAë³iÃoÆŒ% }ø¡•,?Ö‹ ½‡‡‡¯X±¢iÓ¦´Ç\øp@@7R§NM›^W­ZE*$,Í» ï+Íš5“³|Å¢cÇŽt„•æ”TpàÅ‹ .¬W¯­¥ÔÍÝGA4!@i¢Aƒ´töƪž4ï‚6óR%ËJ€š`gì”¶c¯Y³ÆðoeM³‚ž,çÌ™S­Z55¿#2Í@´$@I¡FóæÍû÷ß5Wu  ¼Ã‡×㢵\¹rMš4‰Êú©Jó^îÞ½;mÚ´>ø@Ë;}ƒÈ@€¾ðϘ1ÃØ‹ª­r.³K[wõþÒ‰ŠßwíÚõìÙ³š+ŠjÐ6ƒ &”(QB†>€¨G `òäÉ7nÜP-ÝhÞ­Y²d‰åáUêáÙSÍš5ׯ_¯÷c0šT#Ô¨Q ɶA´&P¤H‘1cÆ\ºtÉ¡¡÷ÆT\œ6çÒ]­ñ ì?oÞ¼TÈñùóçz–CþŸ8qbРAôšT Y˜ЄÕv( ñÑ£GiC®û,˜¦­=zô¸xñ¢bÇ>ÚÉîãã£É=eÙi‘R¥GÍÓ×OÓŽ]¹¥óôTÔà·C/á‡þ¤hGªý'OS„Ó ÅçRùÌâLÉJUÇ%Eúòá&ËÌhã-m¿¥OtRp׉ºuënÚ´ÉØEIÌ’vïÞ=-[÷ÙgÄv••¤å¾àËŠè õWô62>1y;™2eR4"[ƒç± ŠpŽ_Ðßûª¯Æ§8.YË6-øúCK¢iË-*®š&}é™9sæË—/ùB–Íi³ 7+™(@±ä¹kô¤X´ô@p|=¡ ¶T§Ž6Ûʼ¤òÁËË«OŸ>>†þF‘8 ŠÅ7§ ²¦'Å¢QÐÊ,½ç¤MµU«êäͬv™•¶Ü5lØpëÖ­TáW«` ê—Š³hÇõmÏP,(– Î׬ž«zõê|¯¡5ÚBK ô±NÌÑd]´hQª%¦aìøv;wnG!ˆhÅ‚bñØ‚¬éI±è‘¾ÆÓÑ‘´DDÞq›T‰À€ØGUZ$  Š%HcøšÕ“bÑ”Òï÷ Ú$K'SІYI2”Ü Ê¿T.}çÎ|o 5­mß¾]’@@± XjÎ|§ûÒ™bQ9v§‡ªÕ…TÏ›¶ÇæË—O’Üd<7¨ôÑüùó###µ ±ÓýN™2E’p@± XNOc5/Ô™b 6LM:.öE›aiK,mŒ•$+Û Ú‡;tèÐÛ·o»55/oݺµ$Aé9XOw–)F;ŽŸV¤W¸hQÅ€†ÅÄ&oG«ÛGD+Â9rFû…º ­8.‰ÐÞRÅù§yúØF›lÈU‰À¹+Tž yóæ{÷îÕ|°8P¸paI"C;+h# ¾þeÈA‘ÍÅA)–@£¥ªŠFdkÀr°)±ln+ú£³"à–D UÚîJ›^QäT1¨Ð téÒt¸"l¯ÕdPì÷Õ«W8=K…™€.@@Kr¾ö¡%!´Ñ•V3j‰}'!àëë;räHª„¤¨ê7Ø·o" `p7nT?¹Øë‘6´Ò¶ÖFáe™§‡‡ÇçŸ~èÐ!yfyBã2Cƒo Ð#2äððpÚÊJZ9 &Ô"P¾|ùeË–Ñac2L!ªË¥Ö¸Ñ€€Fš4i¢mº¡«¤M¬@·®ðóó;vìǵH%K–tu$¸@@r´˜D«DC›UiË*m\•Üc!@µoßþøñãšL§¨¨(­zbaŠ6 I ¨ü×1mMýùçŸi›*baH•*UZ¹rell¬šÒEÇu& `M`Ë–-ê$—ÐÐPÚ”*ñ˜¢ äÈ‘c„ Ož0ÐæS–x£ Ô¯__Ü#Ë´jQ*z=‡ŽˆM|#ÏÏÎÓç¹ð)X¸ˆâ ^Æ%&ßWÆŒcí¨ÖàqL8NŸUÍg–ŽúNœÊe\Ò¡ª²B³ Ž‘.äª;äïï/nŽÑ73ÙΛ–­î¾àË\b^¸¨r#ãK¶º‚Ïcù(Öñ —ÄMr',˜}zÙB± X,³Wh#+m³ „ª1É–Pà84—’®µ¹~ýº Ùuù2ŸUp|@± X‚&<»Y#+M¯ƒ²³p¨åÕ«Wù¦X“–@µjÕN:5zô;Gq“†‰«ï¾bÅ i@± X%I ®X³gÏAlÒ&b s \âK Ož<«V­2M!«ƒ?²eË&hj‘Ù!C†ðkYýü}ÜTžŸ¥¸Œ‹öV*ªVÝzÉ÷Eç«5lò±¢ÕT­Q“ œ²åË«æ3KG>¾¾\Æ%©ª¦#.­dÍšUÒaÃ-— ¤K—Ž×Pcóüùè£,­V¬XQÜÔª]»¶Ë#€½—Vd+¢£·àÈëo›6mîܹc5s (`éq‹-ÄM-ÚŽ*/x ˆ=ªGGG Ê,Ÿ}ö™ ·aV+ôWˆÍoŸ´xÎʲôŠNì4¯nݺ¥ÕðÑ/€€ÆNœ8!(³ôïß_㱡{~èÐá… ’2Ùœ-<°êjæÌ™‚æÕúõëù –@tE€Z”Y¦OŸ®+pÖ6*8K'œ½zõ*™y’ôpEÒAójÔ¨Q€€›èÑ£‡ Ì²nÝ:7ej aòÉ'×®]Sœ!k×®µ´¸g÷F0† à *(æ#ç;vÌGÐV.ŋ߾};cè§M³>ãàñãÇŒ×:ÚŒÖÍËE Þ€¨F€NŒ‹‹s4k°´øð¡j£@G øøøÐF=‡fE¿~ý, I•˜˜È2Im“ôƒÇÀ€;š8XÚSÎ’íÌ=CSS¦LÙ»wïgÏž±ÄײM³fÍ,/\¸°£ÛoÞ¼YSBè@@kâjl,XPëÁ¡VuêÔ9þ<£rX5+W®œe7dÊ9;ŠWÑ &¬ãQ½]ǯú>{ŸüÏŽ3T÷ËÕóæË§8®;ᯓïÆËËëIdLòvîEƦJ“ÆUwÕ½~ÃŽÝŠpdkÐiØ;ÕÔÆ£7z¥£˜)œkP«V-†Xô‡ÅÆ ±é*ßwkÃtéÒÅkÉ\+ó&?–º‚Á¡÷ÅÆR€õÂEý£Ÿ˜|Ï,gG&¼I•&­€4yüÂ%E8²5øjüw‰¨`š*™ bÚ©S'üGN ¿|§L™âbÉZªÕdåÀ7ß|#hFåÍ›×éÁоŠ• a(– ; ³ºW,J[öv†:Ãò’1cƈN°ïª­NU%iuŒ‹!¦ËCBB¬| ½Æ®›Mj>°97Xu®‚bA±DL{î6u¯X4Ï®\¹Â \°`:ɽ8D råÊ÷KÑ"x«ÞÙ—Å;4ëvìØáÐ0Un Å‚b94ŸµjlÅ2ŸÁâ¶mÛTÎè.y¹rå¢Ã¥ø.=ÿõ×_­:¥§.¾ÉdmêÔ©2ÇŠÅ1í¹Û4‚bQî\Èà¥K—dN1nårD/i#""¸zìØ±V$-O!áØÕŒ—9dP,(ÇÙ.ΔKÐräððp™SŒûøÖªU«ÐÐPA÷}³$IëuT¤H™CÅ‚b šù|ÍA±¨Ì_(fkdYæ,cxßÊ–-»oß>AÁ5™µ:_‘öf‰è.,,ŒV‹È/(KÄÌçnÓŠESíöíÛÜÑÁ2eÊÈœe ìM+_­µœ*… ²ÄHõ/DL¤H¬º7=|1ùŸY‹–J>ФîeÏ‘Cq\Û)õôôžÒÃC_|~øñ'E8²5¨Þ¸©¾ ÛövÆ " ÿ6]W4hÐË—/EÔÊ&-â *‚–xmHŸ5k–®‚gAD=z´ˆ×§O‘^ö5&MšÚ«`szܾ}[†Á© ÐqD|SÏo¿ý&õ€Õr®FgΜáËV+k6l°ÂvðàA¾ÎlܸQ­È Ý ãˆø¦žýû÷ëÇ©€½ ãäùFŠÝZPPš;wî°_ÎÒr̘1|èà €€ |ùå—, …½;¿Þñôô?~|TT;.]´4hå-2eJî;ɰ`ÇÀICnè8"¾I“–Ð÷nþéÊÐO?ýĦ$ÖZ¶li‡E”3ç® N¬X±¢%\ªþç„‘d.yôè‘öÁƒ º pîÜ9¾ ¨J•*º8w'ªXÙ²e³dÕ®];¾fË–-Ücƒ Æ$°xñb¾ ˆªÂ“”Ò¨ ©X¯_¿¦”–C>|8ß 3qâD%´ø=€ü/¾}ûòM@Æ sO´†T¬ëׯ[Esîܹ|'LóæÍÝsÂ`Ô àþYbΜ9;aˆ ©X»wï¶ ÷rSùóç7Dü1ñÒ§OOGqü«yÓ¦Mâ½–±C*Vғ샃ƒ9ΖçÏŸËKø -Ž9ˆj=H;R¡ŽR±h‡™4¾G¥ìÚµKhP`@Àhø–‰{öì™Ñ±ÇŠÕ­[7ËÑÓ1Áÿ¸!SÓ¦Mc£‹V TiÒdË‹×Ëî1Ièh"¾iˆÞ4º¹wFiHŪ_¿¾å K”(ÁwªÐZy7œ*2_»O‹NHŒK|s',ª@‰¾ÆaM:uêÔᛆŠ+&Ý Å;dHÅò÷÷·$רQ#¾SÅʾø(¡£(ðΉØ?®¶.Ül´c<>>>|ÓPƒ ܪ!‹Š%Z†²G§Jxx¸ÛÖôrÃDÐéÔ¤á¦i™ø¦J]wL>‚ØÊköÖ­[3 %ïP…yf<Åzúô©­I“&qœ'‡ v#tFv£O> ìÓß7kV7¶;uýúõ3Ñ„ ܦñëôéÓVq\¾|9Çyòã?ºá<ÁA\%0zôhŽ™héÒ¥®:¤Ãë§Xüñ‡UöíÛÇqžtéÒE‡q†Ë Zhܸ1ÇL´gÏ­¤AÿÆS¬Ù³g[qäûö¸téÒÄ ]‚èÕçæ¨X7nÜÐ;'ü7žb 2Ä’­’àx6 ÕØ¥oæNp–篌™†M™¾ïâÕÃ!7-Öí9X­áÇ¢ýœ·z½U¿æÿ{(äÆœÕò+!Ú“ýôÞ‡O±? ‡Õ»TiÐX´«V³ä0|†¨WÍå*V´œþû¶SÁŸ÷ê—*MZÑã5Ù¯V¯Áï»÷[ù³çÂÕ!Sƒ2fõSÇ{yðà/ÑJZð[㱩ҽñ«uëÖ–äræÌÉk†“'OªQü°hyT|¢= ô‹Ï^.)poЕû’íOÚqö’è:}áÒhû¨þÛ•§/ ŠäжSgKò–m•ÏÙy×¼ÛW‚0™-R¬øí§/’ }X|â䥫­Ž\ê’6ÆùV8uÃSe§X•*U²œ‹•+Wæ¨X ,Ðf¢óèµu×îvÅʂѵ'«&**–É‘%›·ó±mí»³L‰KrJ±ˆÆË¸Ä,¹òˆc~ÿésEæô'D³î½Åù …eZà§‚½ÕÁµRŒP°ÆS¬9rX2£G.ö  Ø²gÏž‚"Ðü‚µH bÅ9Á¨Xï?çÃ’ß7²pˆLx#ÎÙ‹€4lßIÐx½½½Y€S›«6 òA³Ÿ}ö# –f-[¶”e`jùa0ÅŠ‰‰±z±@ŸµXBÏØæÃ?T+2üûùõ÷?,‡Ù¼mz©`úwêê ó¯bfjKÅŠŒO0;@ÿ#*.ÞìÃ¥ÿòÿÿY\¶áOKuš63»qáf¨ùW†T¬W­7vùºwv5éØEóL™2Y?vóžÙ«ÃÁƒÖX/ôä’ffóæÍ˘kXš 4H³‘hÔ±ÁëæÍ›V ié KèYÚÄÅÅÑ®OÅ¡[+Åú¨a³Ñ£—®ª¯Xq –£ŠŒÓD±ÊT­avãìµ›ÆV¬)‹V˜ûó²–Ó^5Å:p5ÔìƒU5ã+œÊ®³¤–6AAAƒ®LL±öîÝk…Ÿ¶g±„ž¥Íùóçu[kg¡X&"VÏXP,Óä‡b©twïØ±ƒ%ݰ´Ù°ÁíêQL±–-[f5í¨KèYÚ$5®ÒçÔ  Š…g,N7“ f¦NÊ’nXÚè}í² ¦X'N´‚@eYBÏÒfÀ€N–ç( Š¥ýýئM–tÃÒæÉ+”´'e˃)Ö—_~i9ÊtéұıMo?xÈÍ佂bA± XÚß¹EŠaÌ8,Ítýi݉`L±6lh ²b :K›ÄÄÄ 28AXžK XP,(–ö÷#­f cI:,mHÿ´’ŠL±Š/n #f :K›k×®©!]A± XP,!·–£F÷ïßÏ’tXÚÔ­[×ÑÞuÝÞ`ŠåååeŽnݺ±¥Íš5kthrŠÅ‚bIqÏš5‹%é°´éÚµ«CRË #)ÖóçÖeuÆÏt–6_ýµZ1Õ ŠÅuw9d·S§N,I‡¥Í¸qãêZï¤XgÏžµ Ç’%KX‚ÎÒ¦^½zz5 ŠÅ’â..UªKÒai³páB)†¤–FR¬M›6YaÛµkKÐYÚøúúªQý@± XP,Qw—CvS¦LÅ’wÛÐ~d‡ºÖ{c#)Öœ9s¬ÂAË%#ÎÒàÎ;z4¾c™#ˆš&¨Ò¤åM}ìØ1–Ô£ØæÊ•+ZCõ¾¤XÆ ³â­q–TêIõÈðïÏXxÆÂ3ÿûÊ9‹óçÏgI=ŠmèYÍ9tz•‘‹ö’[FÁÏÏO1ÜŒ ¾ùæÆ×Òm( Š%ËLųb³,Y²È2*ñ~I±ªT©b ¬B… бflдiSñ¡Þ ŠÅ~›1vðÁ0fÅfåË—gìÔÍŒ¤X¹r岌H‹-cÍØ gΜˆ5 ŠÅ’åFN“&Mll,cJ¾)˨ÄûaŢëR¤Ha làÀ\æÃãÇÅÇA XP,(–wcçÎã’¡ú÷ïÏØ£šF±nß¾mŽ™3gr™Û¶m3@ iP,(K¢{yñâÅ\2T‡$•`WŒ¡XTtŸJZ¡9r$—ù0yòdÁAPÉ< ŠÅRéfcé¦oß¾.f(:«jÕª,}¦kÏž=Ù³g·:“;$$ÄÅYѲeKc„ŠÅ‚bIt/“Ø8›=zD© ¼DãQÅ]+VBBUÕ²ú|e…ÍÃÃ>hý÷ßNÏ ¨ á@± XP,á·{éÓ§§æhbЉ‰¡SŒõ~ô;%«–úU¬‡ÖªU‹qà´cvìÅÇÇ;:=H껿™•bº|íL?O#ßnµŽM|#n,Wî?2‡ ".Á²£ÈØ8ó¯.=øWœ¨yab«UÍ‹G‘1æ‰w<äª4AkŒ°Uß©ëè+ ?ÿü³P¡B6;øðà PJN‘Nkûöí´AØæèrçÎ]ºti›¿¢ÿ¾wï^‡D‹^9*2ÔK+ŲÇáETŒ¸A±LlÛvêlÉã¡‚˜·lÛβ#ž±’¹ûOúAIÍ®\¹’1]¼xÑ^5n:¸vëÖ­d‡^Ö®][Ò¡rrKwŠEÏI´¤ÂÞû[*{ñêÕ+ŠÝŠ+HºlB¢ïR´°qžLŸ>iíͰ(Vâ›7m¿ç+ ŠeïÖ;}÷QŠ”)ÅÍ=-2D1Ñ)J´Fƒ>o$@¦L™‚‚‚,÷uÑkÆo¿ý6ù/%2‚`öI_ŠuïÞ½êÕ«Û\Ú´i­Æ9vìXúïIÛÓ5jTDD„âl1ÒÂQEźþðI`ßÌsÇ™†P,(VÒ›.<6~Å–~¹lÿ‰éÌ<ÓË5ôH”L¢?Ïúé§Ì™3'iRÏž=Ÿ>}jórz•”#G½@pÈO)Ößÿmï=-=ÛŒ]hhhëÖ­m2¡JË—/OL¤ç »ÿŠ/îO™[)V×¾*V«nþ)Z¼„ ÎC± Xô,e9ñ*V­–&]:枌]ÐC’½Ü³sçÎ’%KÚtš>à+î>¦? 4qÌ®ù¤ Å¢§Þ¡C‡Ú{رcÇððð䟖öïß_¶lY›¨*Uªd¯ð?=„éñÚJ±*תëÚÜqæj(ëÀÕPg¦ŽQ¯¹uë–UòºqãF³fÍlŽ7þüëׯW|5dj@Œ÷Ýwt—‘ÐɯXôT¹re›Ì===-ZÄ>zÁûË/¿Ø\¯AZHÇX?xðÀÊÔáÇk(–)šX+hâ ÕZA(Ö;YÅR†N%“æZ ?iÒ$'ÎO:xð ½OúzÌn’+Låããc,=1_ºt‰Q®ÌÍ^¾|I;S¥J•Ô¦——•·xýúµ¹1½CÖcLíù Å‚bɰVŠõÎJ_ÔMÏCK–,±Y þ þâ‹/’þAÍžûž={öñÇ#—I«X´O.™´°‚=dV-¯^½j/‚´_xÆ ¦öÔ‹1¢l ŠŒÂ> V®‰Œy[-ŠÕ¤c¡s²uû!¡w­8C±ÞaÞ´iS–ÚqŽ&µäÛÏ›7Ïf-;¡³ÁiãÚ*m¨²Wˆ„VClܸ‘oh­QeªÙï4L½\Ho°K”¶üÉd«t™ˆáäÉ—ßÜo‘bïTÀ¢ÿkþUî|ùEône“ÞV/`Éárè=ó$úŒå™>½e¿Y³e4^ÚeoÙ‘w¦·»}³d±üUj[8¹{•7ÿÛ @½(R”{ú6H‹¤©»bªâÛ€j>-ªHh¨X´aŽn'›Ó‹6!°—Wç;Z…hà÷ú¾Õòþìµ›ê(–ZB?:$7o^:[„W^c´C•îtQö[Å¢_ÚÄms*Ñ7†Áƒ[–Ïgîb3*òU«Víî]ë³Nwôª%h¯*¼sHq•~ @±ô;czNÇ3:šÑ\oOðºté"'PÕ‹ª·mÛÖÞ›À#FPù ×Q;dzìÞ]¥³rF^Y€baJHG sçÎê&¡LJ‡RÁxÙp¨£XgΜ)\¸°Í±gÍšõŸþqHi¸4&mذ¡lá€?Ú€bi˽Û&P§N:u‚KâsÈHHHH@@€TQQA±èÌ{_‰>úè#WŠè;ß²ñýû÷©D¡T€3Z˜¶`Ñ‚u˜~ž„E`­ V@¿É m@wîÜq:å9}!UÆëÑ£‡<±ªXôgUɲ9X*2ûÍ7ߨ¼ÅÛ5Ú{+W.yBO´%ð:.Þæíü4:V[ÇÐ;¼C€NÏ:}ú´ÓÚãÊ…«W¯Î!ƒ ñ§X'Nœ°·½‰Èk²t“BFo %!/Côá°©X‰oÞt8|@@.ôaI“åÔ”:¯_¿^®\9ÍqR¬™3gÚ;ö¥^½z?vEï¾ö×_õððМ9Š@RÅz1êûéR9 g@àÿ 3&æÎëttåB: ½oß¾ÚF‚»b=þüÓO?µ9(B=qâÄ„„W 9w-À9räHmQ£w9 4oÛ¾]`wóOý¦Íäô^À[C‡¥¤æ\6tñªõë×ÛUô j ®×®]ñÇ>‹Í¿þú‹jë©1ÎÿëÃuÅ¢w}ö‹ÓÂ#Gް \D›cÇŽùùù© }€€Ú|}}:$"‡²Ø¤ÚzU«VUmÌ®(­¡ •´žÂ¦·´þ‚Þȱ YD:[KòĪ…œUk]»v­ˆLÊb“êÝ >\ò¬N+­P§uê6ç­k b© 6Ô;íP6øÅð@@ÀL€ƒ>ÀJ©,f·mÛ–%KÑqN±víÚE»€múF»†iï0ËE´¡Ç¾þýû‹†û  #^½ziRIȔͩæžèunŽ*Ñ;v¬½'ªÉ¤IÁF.ª‘߬6ÓÈxÁ'•4iÒ„ñ@Àb“b̘1âÞq9¤X¤ T»Ö&wªuKoYF$¨ ½¥¬X±¢JsÝ€€€´¨œÒÇ¥Z³;wîÌ–-›>ìŠEùèd›>ÐK:O„e ‚Ú\¾|9þü"øÀ&€è@ž>>ÜÉÀ €è˜@ÆŒéYGPÚe1KË &L˜`o5¹sd‹VÛÓyö6Óòñ_~ù…ÅsqmV¬X‘:ujçÆŽ«@@ÀÈhÝö’%KÄå_ËôH‘3gN^”“W,*looGs±bÅΟ?Ïâ°¸6´ŒØc £ÅeaËÿþûo£F¸Àµ§XT5jðàÁöºèÔ©SDÄÛÓZY|æÛ†^Tr!#  `p_|ñELL ß,ìµä+ϲӷ©X·oß¶W™×ÓÓSó§ÌW¯^Õ¯_Ÿ}Œh  îN víÚÿý÷ŸC2ý1îAKB\‰DRÅÚ°aƒ½ÓOJ•*E«ò¸Â!ƒ÷îÝ peȸ@Ü‘@‰%BCCJ¸ÜSí¾O>ùÄiú–ŠEOýúõ³gª{÷îQQQÜýwÈàÙ³g9~Ãs.] bE'Ožt(íŠh}šjý9à÷»M+T¨@çͳ늠–´¨¤zõêN‚€(¨\¹2íð”ÄÙÍÒ¦%çžN  íV3Ói%HÑ¢E1Û@@Ä(T¨ «(ïÓ {ïý’" z²þù'»(ŠkyôèQ{uâÅFÖA@À P9¾ƒŠËéì–ƒƒƒýýýC@†šï-3 jýúõTcWÑa4àF€–?¬^½š]Zĵ¤€TVÊÞÀè‘¡C‡R!Aq°[¦e⎯äZã 1˜2e {¾ÚrñâÅ´uÌ ²¯¯ï–-[„öËhœN[îÛ·¯ñæF z"УGª5Θ¸…6»téRÉ’%Íìh%•éÚ#£qz t¥Ö”žf|É Ðá áááŒé[h³ÈÈH:§ƒþFE5Bûb4NÇ+ÓzzÉ#÷@@ÀP¹£0&qÑÍnݺ%º FûôØ—/_>7š*€è‚@îܹ5?·—QHÔi¶gÏ{'›è" p@ŒL€ ÎîØ±C=¼—åË—§NÚÈÁÆØ@@@ï<<<-Z$¹œˆvoüøñz#üw!0fÌѪ §}ÚøÕ¥Kw 3Æ  Æ Ð¡C*ø©)l/_¾¬W¯ž1‡Q€€€{øè£^¼x¡¦fhØ×Ý»wK•*å^ÆhA@ÀHŠ+vûöm …D®Ïœ9“#G#cw$-[¶'N¨£šôB… ¼¼¼Ü1´3€Uü“ä¤î’6þü”)S/d€¸/ªY>{ölî‚¡¡ÁÄÄÄaƹoD1r06&$$h(3¼ºŽŽŽnݺµ±ƒ…Ñ€€»hÞ¼yTT/åÐÄγgϪU«æîÄøA@ÀTªTéÉ“'šˆë^¿~½H‘"î&Œ@@àÿ(P À•+W\ו->|8K–,!€€€{Èœ9óþýûU–Wºûý÷ßÓ¦Më^AÂhA@LÒ¤I³jÕ*WTDµk§M›FE"p  îK€d`òäɪ ÑYƽ{÷vßaä  –ºwï焜ˆ¾$""âã?F°@@@à-† †……‰V ‡ì?|ø°|ùò€€X(S¦Ìýû÷q/^¼˜7o^ @@lÈ•+×¹sçÄé£åÝ»wg̘AädÈáŸþa”Í–.]š*U* @@” xxxüúë¯"ÔHÑæ¸qã”ýC °$0jÔ(ª®¨1¼ÄÆÆvêÔ !g´k×îõë×¼4);/_¾¬S§Ž3.â0¨Y³æóçÏ…ŠVhhhÉ’%@@\%àïïóæMA¢uêÔ©ìÙ³»ê"®??¿cÇŽq­Í›7§OŸA@@€'téÒmܸ‘£hÍ;7eÊ”<]„-0H‘"EPPë¢EK‡ ª   –@ÿþýœÖ­èèèV­Z‰uÖA@@ÀD Y³f‘‘‘NˆÖÓ§O«T©Œ    Š+>~üØ!ѺvíZáÂ…Õs=€€€‰@þüùCBBEëСC¾¾¾@  ÚðññÙ·oŸ¢h­]»6mÚ´Ú¸ˆ^A@@ÀD uêÔ+V¬HF´¦NúþûHA`âĉIE+>>¾W¯^Rø'@@@ÀL 000..ά[áááMš4‘@ýúõ_½zE¢õàÁƒråÊÉè"|€€€mÛ¶åÉ“@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\%ð?èž®"qDIEND®B`‚fifengine-0.4.1/doc/logo/FIFE_small_d2.png000066400000000000000000001234571304641216200201620ustar00rootroot00000000000000‰PNG  IHDR;5d  sRGB®ÎégAMA± üa pHYsÃÃÇo¨dtEXtSoftwarePaint.NET v3.5.100ôr¡¦žIDATx^íœTõÕþwúìÎöeé½. ]:JT±#"H‘Þ{ïE¤JÄ‚- *6lØ¢ˆ½·¨‰‰É›ú&o’ÿÿ9¿v÷βËî² ?>÷“‘™;wΔgÎ9ßóœ”óÇDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀD f<~o ¦ã_½þÊoš š‰€‰€‰€‰€‰@Yˆ€×ªÈê®4-Ta´ã‚™—…+Ïæ\ãKmžâ •…Ë5×`"`"`"`"p®EÀã Ö dõ Uš®2¡ü1NÅÊê£þÒȹÊn’â œkÁ2Ï×DÀDÀDÀDà DÀ¬Ⱥ$\iRjÕù©ÕôcA¸ÒX§be÷M­¶€ò–¸W•YÁœ+}áF)ßxæ!MLLLÎîx•™…+OH­¾€ ­£ÆÂTv„«D)VN_þOtèwa' W™Ìéç ÕMIñœÝÑ3ÏÎDÀDÀDÀD Ä#àñçù3»†+Ý&…gQjE©5£Å©5‡«ŒwæX¹—㿳#ê.8LêªN d÷ñ†œàF‰?=ó&&&&å=_–?£s¨Ò(Mi§ÕÒ%iµG¸ÚÇæõ‹¾YZ­%ú©t= WȾجZÞh®ßDÀDÀDÀD d#àñ¥ûÓÛ‡* O­¹PM™ê,Ms=ê.K«»,\c’S±*\ÿNG¬;ê²'‘ÒµªY=¼Š%û„ÍÙMLLLÊW<ÞTz›PÅ¡iµ‘P)Ñe† :ê-O‹:Â5';+¿ôÍè¿8Φ?zt&`¡*cý™zü¹å+¤æjMLLLŠ5Þ/Ò"Tñ†´š \TÊMœ"õWØŽ+"âXi°2µÖÇõ…*À—‡¼±í$šò©GŒ°Zh’ôgtòø2‹5æd&&&&e9¿/­I(ÿê´šó…P)…àš!“'KœH–¤ð4\ǪHCv4Gj©NŪt¥úWú ¿½:ƒ.fRƬœÌ!`<÷‚tU¾ÅŸÞÎã”å›k30008x|¾ÔÁ Sk̵ •¦R‘úË…J)‰Râ$diu¤ÑêHãX) #­Þt§bU˜ÞXü«ó^8Lít%#S™œÌÀÍ0R¯E¡ŠC|‘Voø4‚bîj"`"`"`"P†"€¯ô:Á¼+RkÌŠ-TL!¸JÙ$J×§5ÐÛÑdmºýH«?éXU:nCÿ×~¦vRm&³:‘~iꥒBHWÍ…¡Š×ùÒš¥x‚e(êæRLLLL’Ž€ÇªÈéZ}º«P‰tÊU¥„~húd)Óºô¦QÇy·§³#­ÁL§bU½ŠÿÑwl²Î¦gRÉ„€¹¨Ͻ¢¤‹ kÎ VìK-Hñø“Ž’¹¡‰€‰€‰€‰À™‹€7P9Ý+\u² þx:b+ýééoA‰ÇÊ~”D)™QÂÃÿÒ ÇzÇi4Ëñ¼Ãծоû/RÆb¦4ÌU½xÌ*2éÒ †ÔèZ’Zcv0o€/\?%Å{æ^óÈ&&&&1"àñWdu WÇæ¨XΡ´Š‘²AÅë~ºPÉ\J¨”L¡”Diâ”ÑüëhqG†86d´ #R0Ç©XÕób‡¼½~’æšìEgcü’˜z‰â!O¼ìÒ%` 5õ¥ê39}½¡ÚÆÊ|nLLLÎ|<¾lF—Pe2§ˆ§UªúgeTv¡â¹”=Êh¾^艞–2ı1£åÆŒVÖi2שX5®Öo@·;‰.fRÆdNf¯%Ús/*:¤KU UÊ%u ‘ WȾ¾gþ3W`"`"`"p®E@˜STN¾|1´Jvª´¤Š5¨DéÒ{:Ū|N‰Râ$”iSF«M­ÇæÌ6t¤7çT¬š×ðÊhÍíŽ8LðHÆt ™\ õ‰—=벪…¶R¡¦[°1„“/ü|áê{®½aÌó500(í9EZëP…›R«ÏçZC#g¿Š£’*M¨Ö B¶£D.¥)•9YõG;îÌ<ßv¤Ÿ7ß©Xµ®u܆þoÖy,%Sf0]½´Ä‹g]¢`Èúp¼Z(»\NÝbf†1æ"®4ÆŸa¬4Jû lÏDÀDàˆ€'„¾Á¼ëR«Î›>˜zb­RIo©ÒkMÙ„JW)‘ ¹ŠÓ–̶ö£ÝÖLy¤7_èT¬Úש¥¿8î{þKϤ†ÙL¦_¼ Æ*‡¸ÁŸŽìuÉ”Ku¹,ŒÖ-a¼KºE[»Bù#ü‘Žpþ=ÞFæ)š˜˜”\`NnÈ®<‹­Od[©TÐÎVhy£*H«X§Ji•èQÅ*žK)•’É“®1JœÚoÍl—ãÈêpWF‹EŽ`¤Ö¹ÿ=úÆ™8ƒ&u–’©¤Íª%Êâ!O¼,ébȆB )—EghºÅQfœÁ’­EOD±­:/˜7Ô—ÖÖXi”ÜÛÙœÙDÀDଌ€×ªȺ"\i:V΋U¿H¬2 D™£’­_åÔ*ÉSˆ¤ŠÓzàu?*«FÇC©MŸ²:Ümï΢c›:2Z.v*VÝô°Ûkg ³)=Ó4Œ_ÏÀd QôÀTÓKJ—èu©y/½TèZ'têO¶H·ípå9Áœë}©-=c¥qV~¸Ì“20(žx¼ÚŒËBù“Õæ„+Ï•rå–ZÉù*–Z1¶Â¡UVPòJ«œBÅÓ)Yë*EB9ú¤‹S§mYtlGçíYòÈh½Ä©XõnPÿ*þ"îÈO¢ÔNɘ0• õb)/–êÒEÕB™r©R¡jq)ÝÒyÂɉV•¹Ð­p¥YÁ¬ÁÞPSc¥Q<ïns³#^u¤W0w|86Óª9ô¥‰ìªÚ|úù3µbx×*6,k€*¯R@-©²JšPi¹”]¥¤®@f,eÚ‘ÕE?vfuGæù˯HZý!ÙX7°Ý±óëœ$cÑfW/»t‰v§ yµPu¹ìù–Ößb<¡jn¹'[¨òdk.½g‡+L dô÷+³ããfž…‰€‰@Q"àñUò§v fU˜ΟE_޶ÔÊ’+‹°p–“Ó*GR¥2*›P±,‡WùTÅUÊÒ§yìʾÐyd¶]Ž@0ò¾#'ÈÓ ‰¾Yö»Ôy¤Ú1 TÆŒê"÷0~ÁJºTÊ¥ë4D‹KË·´.á´+ Œ8É–­üYxB¹“ü‘>Þ@]c¥Q”·»¹‰€‰@yŒ€Ç›ë wfåNå͈!W¼È@G×ÊVt²Èò*›Vi=*ÙÒŠ~²ÖG*¥R(7}êº;[?ºíÉ–GzóéÁ¼Œ¼'®!TqXjÝ!Ù]w©Øîˆ“èšÇ´ ˜C½dîÅZh–t¹§\Œ-Ô[\<ß’\† ‚“lYm-™iqÑÂë•;=˜=ÖŸv±×_ÃXi”Ç ¹fÄðx³|ÁvÈPöÔPö´råã§VÜ«Âb+bk•ìQ‰ÒŸ•Qé¹”T)%'JŸ”8uß“Ý}¯utÝ™Þ|FZædèr̈4™”Õe‹í.8ƒ&u–’ñeI˜¦^ìòTÙPI—J¹£!‡”muB­¿å„2â$[‚}CÈq Ê€ógKњʙ†×19ÊêîñUIüò›[˜˜˜”ýx<_ U õÚ`Æä`æ’+|ÙEgWUæâËQo\EU]S+½eÅ8@G^¥Ø?K«ôÒ_´PÉBW)K¢„>åôØ›ÓcŸ8.Ú—uÁæHãÉiuæC}w°óï ÓNÌì°*ç¢}tˆ“àlJù¤†)êÅs/žxIé’C–rÉRalݲp1ÝEB>q¬'[ûNƒÆC(’­P…Y¡ÅæzLÎòx<žê^ow¿o˜ß7šÿ€ËÕ8T„iV1yj-WîX «³1 Á¯K ìkaáRŒ¥U²(“*[éÏM¨r/ÞŸqþ‚´FÓú¤ÖkûJê^¼søoíúâïü·~ìÿÍÿM»ÿãV×Ü'LxÕš+mU£(ͬNk47½åÌœž» “8¤zi‰¤K UÊe• ÝtË¥¹eMG%[nm-‹G´ˆ´‰VªÊ´n£w«øFú¼}<ž†))Á³üSbžž‰€‰À™€ÇSÅë½Àï*¿}4¹ Æ+Èî˜~Îb`tãÊ™Z±A+.WZP2ëŽ~U,­rfT\'r/=˜sÑŽô–3"Ø”¨eZjñ#s¡m;äé}ºïÛÞóÝ¿â+^ü¡×ä#Ù­7ïZeK¡†¥$zžV°,rÞÔì 7âJœÒÅ †¶”Kv¹lºÅ¤Ä2å[\·˜Ï“•l1›Œ¢œÄ6b̨w‡)†ÕÓb¢•©eZB´Æâ&Z\ºnõy/A19%ÅfßÕæÑMLΪx<ù^o'¿ïF›PéÙä M Ê®@[2²«BÊ•;gá^ d&ë–\ñÔŠµ¬t¶‚×­¼Š‘åœ÷³—þH.=˜uáúHÓ©é+,ÇwÛnb±á_ôym7÷žþÌŠã?íþêŸÉ›NþéÚÕ¯Vï¶9*‰³95L¤_«#M¦gvXš{)‰¨”.ÙîÒEŒ+jºeÕ ™n±æ–-›né!«rí$#ª­ÅÂZKäz-§hÙ‘wK´mÓ»™wÈU´¸t GaÙã©e¬4Ϊo ódLJ9O®×ÛÎç»ÎE¨D…g4Zè® Ú‚äŠÕñ+›ËUŽæjá0·*Æ‘+—J #µ²P@š[Àº»V©6˨.!¡Â‘ÙnQ¤ñ &TÚbb}gè[l¨Õk×u·¿¾ñäÿlÿüE;îúäocö¾ÞàƒÚê%`Α‚¹­gç\¼—_§­Z¨R.Ý’È|ô˜¹=E%[6OBg²åÊb$-rİxwô´"“„h1 Ã-Óâ¢Åa^o7œ•F)ÒÍÙ”ãxR2½ž6>ïÕñ„J&XŒ¶`p`|¹BûJ÷b'Wl¯Wr²àãVÒÆÂY t¦V¶á*R¿JäUL«$OÁ §×îôV³"¡’;´äãªÕ$Dy´¸þ1÷|¸ùÿnùøoÅrÌ~â› Ç=™Ýv3&‹½ûªéºHãeéͦgwÛœÛû¾º%ó-½¿ÅGI´ìÉ_e’L…0 Œ'ZÂÆÉ.Z D¦%DK5´t­rü}(ŠÏOårü)2—n"`"PÂH÷zZø¼ • m¡^eÁØ‚eW°EP·dÇÎÇ„]È@-»’r¯èy×JÃÖyj_«zß—uáh@¤É ª†ÅZöH¶„sÚoé>é©ÙG¾Ûøþ_KâXþÊÏW,y©J÷rà7ʋ݂úÖDšÎÈì¸\êO¹oÕ Ù áb†OÖðVüd+V[+yÑR6Nxõ¥† :hQqD‹ÿÓ^oG¥KøoNo"`"Pn"êõ4õyû'+TŽöU(}˜f`ÂÔrdO WÂÏÂŽªì*²Ð€@ÖµŠQÔûU‚ªÈí}0³ý’ô&¬h颖Éi›«÷Ü5`ù+K_þùöwÿ\ÒÇš·þtÓÖw tÙܵF$ÒxnF›99ïcù–]·,žPonÅI¶8Ž!+„®,†C´tzPŸÓ"ïAi˜+DËAaÄohÅ0”¦Q ö¤+róµb.ÔD x#òz |Þ¾”)œVqÅRí«hÚBØêrÅ=ãdW4{ë.W.L ª  ›\QjÅ𠬋™*VÜCÀ&óíI•îðÄ'‘ Alzõ¡¡wŸ\ùæW¿ý§R>ÆßÿY‡Q¿Ên{§Ü€ÅìØå,Ý!J…ͧgwßU'dß²x¦0”'»'ä2è>o¯ÿä$ñݺuûåíÏ /¼Ä3Kùé§Ÿ>³ÚµkÇ?Õ‰'ž¤¬Ý eË–ñŸT‡ÊÚ5'¼ž$_ôdÞ%~'ïtK˜j8;Ûz%­˜bЂeײ+X˜Ã –L˜ÈžX®ôé`ie ®û¯Ë®UÖ…›"çM‹4ZâÀìö[Û |Øžf=ûÛòrŒ}è«®SŽå_°Ý^*tõ \i<5³ãJIrKxF(ÂD¢å6§EÛIh© ßNR“Å-»F¼†V±Õñ~özZ•ø''‰0Še+¡Z”…”'Å‚§¬qŠ.Z6óÀ¨aaGûJlh´ÓÊâVȫƔ+ÝÓVGØ¥…¨ 0£ýÒ´‚©‘‚• µ Í¡nÓŸóÐ×Óžþ©<“žøMŸ¥¯Õºìž¤ªÍLo5'ç¢=”€ºà²B¨[c`ZËži%-5¤¥( ŒsÑ’ëùîÇÓƒÝ]².6q|æÿÅ2ŠU)á5”/ÅJ)ĸ•åD ¿&l| ^Ô½-í+;mAû®·Ú˜°£hY°kr¥\—$d‘ÝcwzËYi gi¶¹üœ(j[‰ÁQçòý}–Ÿ÷Ø÷Ÿüá,8o>yÞõe:ž¶+OG)¯ÁBæU¸¥ð¢%¼ÞuÑb6Nl¥–¾¼µÁš‹äÚâyá*úÎb­¡UܵÁ2boË(VBµ( 7(gŠåõv-bŽ•°h ëí+m!ä Ý{åÈ®»Z8È@±1„É•câŠÉUV—M‘&Sè»X?¡[ƆïôfC|ç{cûþì;nÚûIûÛŽæuºK[‚Å<ŸÐ4¦Á²HÁäÌ+P!´ƒïq2-·9-µR­&Q¼{¬†– ì®jƒÑ&¹Iu°Ø;ù†3Ÿ^±+0Še«,RÂk(oŠåiRDÅÂ2áΞ°(½-Üi û‘ Eì„ZðÞ•‹\e¶]’ÖpR¤þ2—$ê„4¼©BçmÆ=5dϧ£wvÃïûªÇìãÕzí!Ýâ‡õdKß5ŒÄ¨þ´ô–³sº3saá&Z=È2-uBa˜ËV“pÑ’ -IahV¹‰kƒ ýã0î—ÅJø%ëI~yò"Ö{Ì%þéóx*E±T‚Åç…)3à‚Ù[(¯[Qt +–]Ð6–ÝÍõ¹«XruáŽôf3ÒêM#2Þb7V»²Õ/ÙÛcîK7ürøßœSGŸUo6tˆÀ}F¨ÇmA͉4ÁäÍÉŠ–RAry×yw…±ˆ( ÑЊWtšäF¢ý`–øg&¹09–ɱŠüÓ¡4ï˜äÏ”äÞõ¥q+_¡g‡-àb| Õž`‘½…Æ*¯[ǰp¡ÝŒ” é«C¢³«¬ŽÒ &¦Õ™g‹û»g¶ÚØhð}V½5ôàWçò1ðÎ÷[ÞòxN»-2ÙâËDl2ƒ n–-Jk0!ãüåÌ„Ð5Ó’£`*uÓëÄ»ÇjhEÁîŽÚ Ÿ)†2™ä¥6Èv””‰?F±Œb•¦ðù±Êb¾\¸4˸°-‘öÊ<Ð^ŒI[ˆU¹âcÂdn‹/Ќ֋ÓêO«µ0ÞÜ1«æ¶ÛÒrø¯l~ÿú{¾4ÀàŸv˜x¬Ò…´ŽK$[ª 'f5B½öÄôf3³»P–f´=¨¯‚äõF[“Œ4놭¡¥jƒ:7e’«g%JªoÝ””´2¡W)):uBõ¬|ý9|øp2Ñ{ï½÷>¯5jÄ?ÕO<‘ð$eíM›6ÿ¤Z·n]Ö®9áõ$ù¢'óÆ(¥Ûø¼= ¡Xz‚Å÷‰èõ@áήóÎnó¶p´¯˜ñ„€±›ñNÚËá@±éêîH“i©µ&ÑÜq­Åv¹r‚Uºíè8éÙAÛ>¹z÷çæˆŽÀà]Ÿu›÷Jí¾÷ZB:aU¡ 7=­ÑÄÌ­áb}¤œ,vêŸhhéZ®µA¶ŽÄn’«Y76ÍZJŸó0&&g*^OóB(O°˜A»s[# `I»[µL„ì-4ó@«¨µ¯¢i M®2ÛÞžV\jõiÄIÇ“+BØëôÛßmþ«w|jŽd"pÉê_\ûPVË ¼B(Ò#;:!¶ W›“ZglF«¥ïAf‡¡QªÒÈkƒúX±»ëµAe’+ý¹u¥Y¨ Áðyûœ©‘y\RŠ€ÇS%YÅ –r¸p.@‚aV”æ…Ùî«8õ@émÁN´ Ñr¹eÙUz󅩵Ƅ«ÌIå¶¹N¹bIïÜÆ×îµò×WÜõ‰9 >Þoyë“:l‰'ZÌÜ–,—jŒ%›]n¡¬Ï[†ÚE¢\0N+Íòz;žÑÏypÒ‹@8žb¹"‚Z‚%£(P¿ÊµÎ¯¦ÕŸÊ¿9>KÓi–‹ëƒ\’¶ˆÔY [¼f·]ôŽ9ÊBZÍ.æ‘LLÎlü¾cŠ–fra›ÁŠê`¹$Xš!SjÛ‚™7‘Ÿå£Ç+9È%ÛW™VÖì¨ùô×ZÍ{Ûe--ç¼YïúÇP¤¥Ú xwª JÞµAl½Â++ºPã‘[ÂU†G.³Æ³b“îÔÅZ7‹[`ð٬؞”ì3û rï¥î_N“‹ˆ 52ì28®6ƾß8øÞ¡ÉÐ4¶LK¬*æõ@ѾÊi¹¾Îu7ëf³ß4G@ƒOçw¾?SDC «UmP K‡Àà­¡ü¡6[÷hbþ´Ò¬á))ž2õÑ*k¾‚G-®øœ•Þí-[¶<ýø”5ïöòç˜ükàõœK±àIÊ#»Ò8Á8 V¨âÍ~b7¸Y†ôvÒê©UæVètW½áÏ4žþ†9ÊWŽ=^¹×¾HÍ…2C’iê–uE ãF†`H[wÇÁs5 F)K³‚1Ó,Ÿw@òoõÒ¹¥Q¬øq>qâD‘Í[KâŽF±JçsQlÓkwŲ£(A•飾ÑÎV…«b –ÍÛ‰¯& WœS©çÞºc^l0ù„9ÊoêOxµê÷Gj-¢/Õ`°Ú jz̈=˜3Ĺ=+qšÅNb)ß8* ºÍfy½]Ší“PL'2Še«$”µPç<›s¬””ˆ‹bÙö`±RžÎJpAÑ|b3X:"¨ §ÕžÌ,m™,ÙË“ÝmÀ?•'ٜݙuS¤ú`°F+½éÚtkß1S,™fÉ\H³”¡; Ž…o\÷¥Y^o×âšb;“Q,£X…R—’¸ñÙ®X)™–b9|.Ì…Í–IìÁÒýj!9ÖVlù;ïöPþ0Fmð¢âŒôZ ;Î}½Êw Û\åò^w¾Ë„Ú5Y›Ý}oþõG+yÆe"7>Ûû>xݲ➦:”f “ÜœóÖ´¸íXõnÛY’$Ëz™chI±so¤f Ãc×î£AÕENêü…ד`—y±©PaNdË(VIˆP¡Îy–+Þa~ß0!Z||ÊΣ“£K°l=¾¿JƒÚIr˜M;ë`QIßVáªÃU‚ÅS´®«NÂεùmÇrZ¬§»c@G&XÌâÝ÷¼Û3[o̽ìPÅ럪xƒ9Îd* x8«ÝV±³‘»ªu$µáº´8½Áò×>Üié»xY+µÙÀjƒ,IBb;‚‹œ×¹: :÷oÙì é +5˜åñT,Œ””ÒmÃápí²ô§R¥JÅõÌkÔ¨‘ð™%´¨R¥J“”æ àQrúñ …B¥yÍ  ¦§ÿ¤Êô`€-Ë} ‹;µ3¨Ýé°®IO’l[EîH­9Z%X\ðºÌ;ÑmÍ©.+NvXüNýëÁ46D‚%»_Ìßý¬'Îìxw^ÿÃù×>iŽÒ@…AewÝÑj#–‰HáAGŠ›²Sq/RoYµÞ÷¶žózÇ¥ïvYy/kvÃå²EiV¨â-ö-$Ö}5Wxj†%â/xaPÌ™’’À¨LäÌÅ™˜9^o'R,[I0j K!éUd ª†c±ˆÜƒ%,|[¥Õ›¤R4>ÅÕnòsXïÔuÕ{–Ÿl·ø–³^¯Úç@:²+‘œQ-w¤=­7ag v´gwßSáÊGóÿÊ¥«Ϲxf»­€,ð*ৃ%<Ò”=ÿ‚íÇ¿ØfÁ¯Û/y§óò“xAñ²¦¡#…É*Ù‹Âò3üòPjÇÒ¬dø ±›Øm0K}ÞÁE~·›;š˜”ïÀ›+VtIÐ} KíáЄޅâ%A±kC¤ñ<Ë£­iuë½ÖÐ}í© V¾‡ßæmý–¯ã^¬Ðu§ª%Ò†ÀVI®°½ÝÖ¬weuÚžsÉ@Õ>jŽбY]vdu¸›«í±h˜v6òúÞÚ¬ó7×z¤ùì·ZÏÖò—½‹—²ûšS]—¾-¡ÁYäÊŸ3-µÖh±ìwD•X`îîü…biù–˜GŽYôy{”z"GÀ“’CŠ¥(AìŒp5Y±t‘c~æ‚çIé-Öò˜°É¨2·éµ\²áËn¿ëêSWœÄ/tüNo1ç­¦3߬uÓÑìö[µëNúÆlWVÇ»³:oÏ견Zîe÷çõØ%ܾæôØ—}ÁNŠvÇmˆ¼-ÍB¶Õƪ7šúúy³Þl9ïíó²kÅI¼”­{¿ÓÌ—¥§;Cþr¦§ÕŸDùO³ìü…Øôo]¤c0ËF z=Í‹ün7w40(ïðøý· @‡©’s‹•½$(,(/ ZÌoD¡¦Ê›¤#õûî»lÓGßñAµï£WE…¨ â×z³ÙoÁ ¶Áä×*|8³í,ÁÚ¬»³:mï~|“¢­Œ0§×½y}ïÏë÷ 9Š-—?€!nÄ–"|á.ʱ:m§4«½•fUè} ÎØ— WMf¼Ñ|%XxáðòáEDÆŒ¼ùü±O N]ÎfEÏåm0•ŸÙø 1˜%—fÙ³œ…A>¬ˆA§JyÿÈ™ë70(z|¾+c;(AGIP3d” oD•½PÅÛÔV4Ø«_xWß-_ºñÞ· Œ¥ïâ×z˹oá—{Á´×ëO:Qkôñ —ÝG?ð)ÁÚ&¬ w!ÇÊé±7§ç=9½öç^z0·Ïýæ(†ô>„®E V·=$Z”fA´¶¡‹W!§ûÞª7«3áµSNàW–¡ð«€‹'»­>Õóö÷‘77¿émuUö2Z¬Îh…6ë‹6Œò¿PƒYn…Á¨Yl”8%%Pô÷º¹§‰€‰@y€×w¡s-ýrJÐ18Ì­oÛÀtðcé'щV„N„«Œ’%AØæÎÏouûw}ÒgóGoø¥$…`´^ð6~¹ã÷{é¯×øZͱ¯Tz _£2ÁÚ%¬‹öåô¼7çâ¤X—œýÅE‹¢‡â¾—@æšsDk/‰¥Y;‘fewÝ•õ0<„Wo½I'M{Å[”p ¸@‚µœ+#cî½é£FJ î48-³7l…AÁ_8 ƒbÐ%挻µÄÄ翾¼ÜÌõ›˜œV¼ÞÆrï"šXºY»sS0Uh”`¤¾½$(˜ QÄwV¸ÆHÎÄÓ&­ê Òë-°íÓË·|Œï¸h¿ßYmðDí ¯Ö¸í˜ìᓾFE‚¹b Ö%H«úÜŸwùy—?ˆ¿ã?š£¸ä òT&Z,Í‚híµÁ®»Ð*«<âŪ£_Ưü†h8å~O x R¼Œ"Ú‘+#cî{çGµ{í®KÜ'°òx†n¶íƒYñ›b}¾‹Oë½nîl"`"PÞ#àñäÇÛßh3kçƒÃ®” dÓ5Ø/µÎmôýU…½SrÖoÓûýïþßq.Æ\B0Ð,©7éµZã^­6æe8äVºåy̱f÷ØGI@¯{I®X‚EݬËÌ»â0þ5rñ‹ Ìñ#ÐóhU…`Ð-¯ßCy}ÈíÃRUJ³xmp/[qÈ1ÈU•Q/áw~=ÔŸ|[”m[Ìe –F´#ÁºlóGý¶~\¹ÃfËiŒùÇP'² K›éÄà*§cÞÕà« Ç&ž¢Ù=µå#^_ëòþq3×o"`"pšðBcÐÜ&JPsÔwÛ3k%iu¡{Uð’ šXäsᜦJk8‰¾ƒè¾"9»dÅ›Wnÿßq± ü–GË“c_©2êe|uVö|ÅŸÆW-R’+‘`A®B*@Ôû Çò?ÂFu-s¸Eâ”ÕãˆññLæIòûª4‹2WŒ*“¥áðð[¿ð»,\8ˆöµ§z®g Ö–ñ$»éæa!ÆSkŒbp¼kap5̲ù(±ðÕeŒ»eŸ¡›_x¼5Nó½^rwïÔ©¶ËÇÿsàÀ’»€’;ó{ï½—è™ý_ŒøðÄO$©²vƒ³Á{иˆvY9šXÊýÖau¡‡‰k·ÌÚuJÏÿf´Z)’3.uu–v{ôêÝŸÜñ)G0¨6( ôó£ ´Rxm_¦ä {ýÑ £ŠÖ!Q äê ìÂÀ¿"ƒt¡ÆEˆö9 Ý„D!&phÌ¿î‰úà_U¸J¥Y‡‘fU¸òaˆÝæ¦c•†±käK<ÁBy6ÑÞ{Ó‡hIâÇGï5ïÈ$‹8i8‰)–½0k”XíxLĸûÃ7—æ—QaË(–Q¬²&N®×s6(–××S/T$·uk½½µÎÊr¿•öµn^‚D33JP Tµß®:W•ñ½ÖrÈák÷~qÕ.¤YŸ^¾5‚ßøÁµÁ›Ž‘ á›ÉŠÜƒ'XH ®;Jι”(CN†¬"ëÂ]4 {NPkdQ•n~V(=éú£<ÍB•jƒH³<‚¿“\ñ¸áÆ·P=¿X‚eí.¢‰ö>w~„Ÿ·Úcþ+Ü*Pӛζƹ,«'m”Xúò’qç­,¾pË¥•å ö)¬Š”æíbÅ2ŠUJŸ8·²P,¹ÎÊ¥‰åØ8¬¬.4/A>8Ì-ñ…AÔÔjÓ„Ñ;º_u—ô¿÷†{¿¼fÏçƒv|Æ 6žewÁàÆ4;‚AµA–f!]À7/rT·2ËA$X×!ÁzJ$ øæö<å #^$÷ñöw“|ž;GÛ­y½!$óÈMYAUÄM¥Y¬›EruÍ“<1%™gwÁïN´c6.>ÑŽøÙ'“ŠÅ7=ÎÏh½œ~(à=ÀÍ Žº®Œ»[+ óÌ ž·²¼þv¥ôy(ÒÃÅ2Še«H¢ÜÉŒL ïM±´ ÷‰šXŠkÇw %Aé±”Zs‚è~±ZbÍîÛ‡øêº}_ Þý9C0>lí‚>?G0Ðù· ^¤4ë(TŠZ2,ÓBŽE_»"Á‚\=G¹ûò­6úåê#_Ì¿ì }ožGn÷=Õ†#̉)ª©yˆ7‚ÆÒSJ³®yη«£| ¥T‘` àÂ…h' A¢¬Ÿ¡ÆÛføãbU#_šUmAV{rØâ­,F êæ1÷èV–s*k¢ÇW§(oíÒºQ,£XF±JëÓ#Ô!ÚÆØ“XI7±¸iEjí±b„‹­ÂÊo³áæû¾¾ñÞ/©6¨#ëí.q –f¡6ˆ4ë1bµÑÓø(åXèÄPi Ö‹ø¾>€tý¸jx.¯Ûn2ã8KìwÕ¸áI<ž/J©ÔÿãÕÔ[ˆ[A …4 ¬ Ÿ¹)K°† Á¢¬´°D;~p ÁÂëØôêC˜ÌÓ ƒ3™e†ÝN×ÅüBßÛ® 9VÖTzg¦Oòx"¥÷y(ü#Å2Še«ðŸ›¢ÞúT4±œv‚jš*j˾Ëjb!Á’®€iõljåäò¾»En>øÕM¾ºþž/-ƒgÁXý¶Wpö – ƸW%‚ñ‚B0Gð8¾|ɶ߃¹}ÀÿìÀˆãÀ,³l – †ŠêÜôdvÛ;É4è,: ÁÕ.˜z:Jyçšã³Ä@•J³*^{„pàì,)ÁBó•R‘`‘ÌÇ Ú™… åÑÎ,ÑŽº.ª»xëöÞCóU¢•µ8µæ$¡XÊ™0ÉV–s*Ë6Gˆ`-V™þcË(–Q¬Òûˆú­cbq&±lM,k¯obá›+­`²pu{IV]·ý£a‡¾²ÿ+'‚q‡¾ˆätû• G0è+˜gi‘o€®ööï}îÇ·0áà³Y‚…´ˆ6Z2Ð?PÚÍg¾QkÐC™P,Ì•ÿ£ê¥÷4ú …gIæuTˆ4J©¨ˆÒlÀÐg1ÀK_#V…²R¢Â¥í–¼«<ÚÑŽkð®ÏQÝÅëX¹ó¾æQƒuÆ¥Ù^ºŽV–îãîleO=0B ]á ê€Òû0鑌bÅ2ŠU¤N‘îäõU§7‚d'¨låü¯¨²ï¹_­íµ’æLZ ß\‘f³8×.ö’4Zuåí¿þÀ7C~mG0¸C.!°X‹Hb"Ï9 ŒÄ’‰ÃýdÚtñ~¤\U†? RO<$ðÍ÷B¹Â¸¡ÕÌÕ.ÝG£¬åöÈï|W³ñ/ák5ŸòQˆ1ž#`tXT Í"ÓÑ/aÊ «ÅÄÌ5M°Q=,ΪXD;ëùiD{Ó™îíŠhÇPÝ5{¾À+8ôàW™ç­Áx•ª×ïXYÕÊâSY|Á£('âMÂË>GŒU[¾ð…:é}]zwª_¿þ‰þŒYÖ3E×x-^¼8Ñ3»#777~¬'Nœ˜ð$ÕªU+½¬8©V­Z ŸTY»Áرc‹ã©ŸñsxB…Å.˜_»µÂ‘ì­Å&F弞Ñz™pu¢MZ4¿Õ{áË·>ôí-÷ãŽ`¬³-"á|í4CŽg ”€!T¤é"a”Ǭ]+ z´Î¸WT‚…D>C¬ÌEVCX–Ñjò ;nEE«|ÙÍ×7~åS¨£d† Ãô2ÃÓ,TA«Þp$÷Ø-Þ+L­àÁˆ‹ûƒÐ0€.,¢ |²D;ÀJ°PÝÝý LO" YSŠ#“¸b‰VVôT<þå:cq/’:FmH× 2÷²;_xý ÎøGÄ\€‰€‰@Š@ ý¶58 »KÖÒakvØÅNPìæ»B:m&£wµª¸`u×IO~ø»~`ôFšÅŒ•ôuL‹HÏbƒ¶£ òÊãFy=ï…¯kîE÷ÔrÉÕç‘+ΉÝNä庂ÜDZ?·ùˆ'³Ï[KO­Ìé V4¼êþ®+ÞEÃ×Ñ…ôâA†yšu¯sësz›Yàsßû>¶QŒÕ‹L´¯íŠhGE—¬û¾¸ñ]¬F£•ž\±ê,Mo6Sî+Ñà jeEo‰ _äc*Ër¾ðx³ÊÐGÅ\Љ€‰À€?ír§bÅr»Àojîv;AÚ‰EK‡Åì°†]à› nI©µçKÅ¢Åç{ä¶Ç¾y˜Ò¬›&@0ø’b|£ÞE‹H’A0`;ÄýÈ/º‡¯Ï¨pɽ Ç<-\:” 1ƒeX÷ŽõN=Ö½š çÚ÷ ŠÔaÄZY=jöÜÙmÉ›˜¢Q‡Ü¢½é…ó4«ÉäW+÷PXÝ“q0³aDo[+¢42,‹hv\@×WžÄcIöÑàø ^ÁË–¾&K|¢••Ñz±¶’µ²”Á veé+‰¹Îñ˜@––¸È±ärÈPF²ÎŽ:Æÿˆ› 08‹"à µgŠ…&gÛm×%(¨¶8Æ6ÀUØ_œZgºjbáÛ­ñÀƒãõ›1|‡Ú G0hùÃØÇ¾õðw„`ÜçŽ` âª^è?IŒÖ"îëpÁ°!­{hç_ßñnõ®¬ã’w(ÁZs ÉJ¯;׆Ã!ê]ðà€çP÷9Ç+¶\®2·,™õ—¶õÄ•Û>…} ïaöú¡…Üò4«É¨gr»î¢¾¢]bÝ÷ÒfîsO[Äâí¸°<Ú݈vTk¹G»"Ú‘#ÁùзíG=^¦le£X,vB²V–š#V»²(ǨIw).è w+Ž7¸9‡‰€‰ÀÙOšM±Ä¢ØKFÚÅŠr»` ïé;4­áDÚýˆB"[UœÓz㔣?NøÕon{ô{|å%B0N¢ê…>Ž`€¼‹qáëŠ``ójƒ„`°$XÅXkÛ-¹·7ó K°>@ÊB ÖªwÁs¦Ä®ÙýyÇѿʬ³˜lÏБVen³A®ºû£«÷|ŽA]$7 8ÏÂ"ËÓ¬¶3_©rñ>1úÖy;%XÝö ­‹Ä¸É}Q‰vJCW“¨Ûˆv\ìÿêæC_£‰~äy×> ‹·²f銕Õ!–óE<\Pî ¾ \Ðl|6}ÎÌs10(ž³ÆÄ@Ûs€BfKÔ‘J ¢‡ï¯HãÉãIÅÂOìñ~;éÈãÿ…`ìW.lI1C0€E$B00ž% rÈe.Tdë 5ƒÕ‘fáW?Y¡åV¥çîNs_£ëNÚIˆ$žC˜1´& Õ*w~Ò|нâKß›¥xÔ¹ðÎÞ‰º%8€yHn ¨Xíê%Ò¬î+~]wàýdˆÅݰà1]wS‚…ÅŒ ¸ «D;Z†øq€Ÿ(6–‚‘á;P2íÑþ5%X‡¿ÅoŽ:—íMì)Vj½)”çá÷+.ô²(Ç’¸`ôÚ7ÀÝãK@NϻߜÅDÀD |E ~¥«bE¯ÅRh{ô’ü²¦"åX¤X€Ç˜bY"7bß'SŸúqâ?8Œ=XDò-"q¸` UÃ Ü Á  YZDâpÁø•å‚…`Ð%q÷ ˜Ý¡­Ò|}½‡.^{HžCH°öP)T½ÐcCÑòêMïÖí²‰Ú{¥rT,XÞwáKH_ Y»q?È”/`-4 K¤Y}6}Øì–'²™Y-!ƒ·ª”`í¢ ;ˆ I´Ó„õ”À)AÿÇóhßñ©"Úô щÄoŽŠï"úFÌW­ÀONR¬‰½šiX|À=gRJЧ|}ŽÌÕš˜”Fü©¡Xq©õ€=£ïÿÑÀcA !“"ͺXJˆhŸ5o×¼x7/¸£ßlg¦\P‚%‰ö>ÉíÌ ÓÙÀ2~¸í¤0vE´³ë{üÚqàs;­¾2ÒlûeÀPÞ8ŒV¬f· ‘S£ÇÂáI÷õ–ûÓz–»Ï‘¹`Òˆ€Ç›ÊÚ>‹~árÅ‚ A  íÌiI '3ŒÅÐvúþ꺋åXr~«Ùú‹¦›óÂïfûm4‚"˜XDr—\D"\0$‚Ár™ F ãI› †@00ž% ^¤9!Ô7Ðw.§Ý¬¬Ýsgÿõï ÁBïe´Ù(“øÕoÐuCyáø‡¾lsÅ®`êø@x\±uÛ®½eÇ{ÅÔ§(é„4B´PpC—×€úÛµ;>nºAF¾¡HȘs#Kd‰hß—Ñ~Kí«ßp‡h‡ ",Ð×ë·ž’}) ¦·^`S,¸'3’½Œ˜ ûBÍJã­oÃDÀD žÅ pqÁÀ@«å‚1ý èÁòûD˜ F\ã²CrN퇛äHVU¶Œ˜ª‚¤X_Åòø92×l"`"Pd^-K^Ԍʱ’ÞŶHÃâ;—U:¸ðåßÏ}ág|SsƒÆ³g¹`¸ §hI‚Á,_%‚Á—óõðXR¬‘$`@J™ÛÐJƒ­½$»`e·‰Go{ä;Pø,Áú i$×¼à¥ß/zåK_ûåºe/V¨6Ëï]Ø#-}Â%£/<þ»Å¯þgƒBg£2©J³®Xy¢JûÈkIDy×` ¸ØœÑÎ,y´sÿ*øeà§ê®IíPq(+bÒsÖóšb‘WSV×í–b.hwpOR±ªIÅ‚íEÞ´”oi¼ïÍc˜˜”Çø#ÝÜk‰ð_Wœ:·h¯~nÑD9–\=̪U||˜+VZ£)ºbUë±_ÖóÿßÔ„`uG0Ø’bB0P¡rG0¦Oùi!m%‚æ jƒ ×¸?ŒY«/¬zþúAk_§ëJ°æ<ÿ»ùdžÖ.yõË^ÿeå›\öêÏ—Ž~(52>IÑ øÇ´í»mÞSß­|óOË_ÿ#dâ‡8@!‡<ͺyÏGzbÜð^LPÿOĹ؉öÑDûGHpAüëD;ª”œhGéå\HxÇ1Oˆ •Óê Ó¼6sÆ"Ÿ5DŒ F: Ô…–G5Ų½`FMÁì¡åñCd®ÙDÀD ”"à HÅŠÚå¨[4Ù6cÁµ]S,ðÖ\±0šÃs¬&6ÅÊl½ié«À—5Ò‹Y1Œ/ðuIÆ&H°õ ËDPä{âÉ!×rÁ8Bi-)Žƒ`l‹F0(p·!2dëš_ºcÔþO(Áz‘,híÒ¿¬xã«ßúÓÚwþgýÉ?/zæ»v}·%­º-–OÚÿ>n¿îÿYýöŸHð^ÿgƒò4kÒãßuv8Rs!öná=ï"Á²€ ;ÑŽðºíÌB0®G{òD;€ îÑ®íH:‘â…kvÝL$IÑh–»bs!Å""ŸøLÝZvŽÄ³ô§_ZJï{ó0&&å1_N"SALV¹mÆR9V”b¥7›®&Ž9;0ë©ß,y퀅``lõ‹¹•¦+Ý §Žë{ÛƒwžúÓ¶Ïþq×'Ç-!Zw¼÷—uïþ‚ÇÓ¬ÛOÖj·žì gÂÅd&ßÏÂ˲C´sàâÕHñ’Aes;lµ)Vã)…T,n-hW,ÚëÈúXÌ ×ã¯Rzï{óH&&å1Á윊…ïPÞV늕Ùa¥P,¢ÝH±†Þ}½|ûÛ îË Ea&6 ¶¤8ÁÀC7ã)…`°Úàƒ0.âKŠÕ"’h ‚Ájƒ”fÑò 5eO«}þÚ1»Oñ Óæþºåã¿Ýýéß·þ]_þïžoþy÷GéwÛƒáðØö—m]÷òø/»¾úß_ü’¶õã¿mþð¯ÞiÖì'¿mÓ¬‡yëwÑ<ãƒ<Î|ŸKáˆöAp¡{´'O´oøé,z‡šG; Sã]í.¨¥‡á„§~`¤¥¬òáR›M‡m¼K+º*m†«ŽØkVŠÇ_?AæšMLJ/þôžÅ«XÙnË´¤b \ñ*Ò$+I Ÿs»6‚ã;é‚ñ€7ø ‚1ö•*£^ª<¤;jƒÇ°»á±!žÆ³Ä"¶¤ø‡ ÆvrÁˆF0ðÛŸ#¼6HiÖ,¬» fM ¦OjÛçÂg¾Ûøþ_X‚õ÷mŸÿc'äêëîûö_÷~ÿ~ø¿Ÿüÿ»ÿ7ÿwÏwÿâ¢I»ëSJ³–­yã—ÞãTd[á±Û êÖpÜêþ4‰vßtL,ÁŠáÑÎ- E´™ý(ãîÿ¡X­æ¯b…rG”Þ›Þ<’‰€‰@9€/|^ñV1½›^°BôcXŽÕsú3¨Œ¡—³ì„hä(ð´}I‚ñ,é‚¡Œú§`ÐxsÁàãYQK³f²ƒS‚‘Ii9SúŽtûB‚… š´÷Û2¹ú÷}?ýûÐoÿsè§ÿüñß-ÈØî¯ÿIiÖ§GB6ìöW+Ö]€“W!÷ĪŒ õ@–`)à¢4‰öÛx´s¢¥lDfVu«åKk[zozóH&&å6žpÅô5J.M ©TØÚêcÉ‚gØûŸn'Åj‘¶ü?vý„M± ÏO± =Aœâ –â[Þ<”‰€‰@¹@ ³·T,†p'\}‚ØÅó‚ìYáÕÍZuÏ êc5›¦+¬†6¼û?@½1œÄkƒ.Æ£rɯ0ÇŠm :‚Ñc-Ï"{á>ÁÀx–D0xm_Rl-"‰`Èñ,¾ƒ#TDš5i'Ú;ØŽ¤ ¢…L r…žÖ-«^ òA6†œŒêè`堃ŀ‹xD;Ûá’У½?¾ê±ü«ŸiRñ†§,àâÖã°°ªÉ=Ú§¾îðhG’Ú¬°ÖNù£}Ý£=ŠhÇôZh@6½ú~]±"3튵Cü`T‹ð¼(ŒKS¨Âèrûé1n"`"Pº𥶲+Ú»½N¸P…ô–³…«#/ X‹ŸÿàqW}~Ž`­ÆN&¬‰Âv`» ÆøÂ%ƒg1Œ‚i¯sËã¦cøÏ¿Öá‚AKбM K{)3àæ­XRÌKXv[Á„ FurÁp (ô‚c¹buºbÛ=ßS7‹1†­xž2° ,Ô)ÁBìLíˆ /y]¹G{ÒD;÷TDÓ?/ð#£F¯Ý6Åj<•ÜñÉbr d (Ý·¼y4ro Já¶(ïvt\(Çb¶âÒ»Š•Ñv MKºŠ5õðçªÅ<“@0ÞLˆ`|É ZR,Œ®H³Š‚`<ì†`°Ú s‰ÁXÄ]0¢ òq÷îØoÛÞoÁ@O ÿ zpèòçü$X¨rà VB¢}}=Ú݈vTJy‚ÕÀÅ|a!èB´ïü ¥WZ‚uð+0/ÜB{´+¢íFŒ<“ßÇÛÊnËïÅžu5jƒ±ñ¬‡òú>ÀƳf¡6È‘Á ñ,…`tè· ˜;¸A~àï7-{˜H°Jh¿õx•Q/c@ cjˆb8ÅéÑ^x¢ü>Þ¤káó?Òv1Ý'°Å,K±lYUж+™Žó¼Á:¥ü–7g"`"PŽ#ª0‚\h1›R$†[ù‚AµƒK›ÐqÁŒó·ˆEȱ:³eƒœmë±7§VèÊ•Än¾j ðÿňRò« £ïp»ˆ»`¬‹Hæ¾Õtf‚A¹|‰ÁxÈæ‚! Ô%‚¡-)V‹Hâ#í/¿“€ÝÕqãÒç´ËN´“… Ý£]Z{iy´ó5c{QÀDÅL\6,<òú? dóÑhÑå_çB´£:êF´“… -Áâ‚äÑþ©Ã£ˆöÇ\ˆvPðÿEwòá/¤b /öŒó2VpÛ踓íÇÚ–ìbLjs “r¬,Çšëñ¦–ã¹tRŽ@ ër1'dS,fÇÀ76q˻欄Å÷6qL`– :ë¢{Ò/Kž ßsêÓÈBðýï"‚~‰m‰@0¾‰xnÆËvŒ¸6eàÛ–Ö½ë.lI1‘ŒxF»ËdX×/y®(D».î¦0–¢T'ÙÕ¿÷çá;OiŠE9Sf§µ¤X C±ÐäëžQBÄV>  a¦š«i— _陼P¬Pþ¸R~·›‡30(ßÀü¦R,rg9–0 <Å™bÑH–]±Äz\ô„ºˆ‹òR¬ÙR±hŸÖùCïýö_˜«Å—» Áx]º`ð%Å ÁÀ{Ž`ÀJµÁxƼ·#WËE$¼6Áؤ»`HãYÁ¨`¹`@™Ú]¾ Ï¥Nq|ô·ë XE'ÚY »î¦$µç½§K´/±y´ƒh‡÷,Ø #¤–GûÃßÁÝÑòh׈v Ïa„UÜÁ«OÅâ Ôd]v÷íÊð‚T¯>ϱˆd‰R,¾OËU±ÓWȾª|xÌÕ›˜”r¼ÁêL±h¸UøÝqÀ<Å£ìÛQ@ãÛÜñ źG)V¤ñ4]±êöÙ”^|( q¦ækAºsãå¨E$– C0vX˜7Ž``qÜ€4n ‘Ø\0Ø’âk°¤˜»`$`Ðx[D–S6`C0¦qŒ¶ý¶Ã6)#?ð÷k=[8¢]†‘bÈwŒuß½‡IpüÜ>‡ÀŒÀ¼£ÈD{÷Ó Ú‘`á5B÷’™ÏÒ¾+äÊL±"M–ÓJ\¡X¸~¤ªŒ½TM/däLáÖ2Å‚q;r¬å|·‹°p$ÅšçO¿ ”ßíæáLLÊy<Ü¡XÜöBÙ·C±zád5•#YlgqNû­ûCLð‰`üÕrÁ-)fƘ˜ÆG½ÖË%ÅK1žÅŒÙor£Î„W±¤¤;¯ bVI8äZƳ"ø÷l\ B0ο|ŠføZçþ~õÂg‹h¿ì2¼~Áо÷h¿öI0öa+vƒá9 ÏÞXÂÖé&ˆvÐÿnDû'Nö¿ux´;ˆv ÏAƒ‘>¶ñíg‘U¾HãyñLJm˜F´q;ßFV“™³-šÞPƒrþá1—_V"šj¢eåµ(ñëå¶l/â,!£&!jeYCÄNÀ=½¹2j¤ÆÝþCKÀÁymÐÁxñgX¯bÃÅD¹ˆ„¹`ðñ¬Ïí`KŠ‚«!ƒ–³E$ÜC!4ž…4 µÁGù’âB#Ö’bk FƒÏï·‰VgOÀÿâïW-xÖ²ŒçÑ^ÌD;@ŠF´OˆA´ãéÐv•ÿŠF]£+Økºmç"úø0…Ó íGÂ{9–Ç›Qâonóg{ ðé§Ÿþ¿ÿ÷ÿ>þøã^½zíO×<¿””@ö¸+Û n|G»q.ˆ:ÁvÅR#YvÀ=£Í|i{!HU/ÿwsØî¹"K^ýG0°ñSA˜ ã@0vK ¾¤Xº`p£ùlª j‹H‚ñ,K³ ‰`´dƒGü«ÖÁ˜ejÓo'Æ•ÐïÇ[´àÙâðh?Ÿ¬+`=‚5•2Áz ¤H°n=ŽEÌIíw~[aJ°v’eÈþ¯†ú#hÚ<Ú¹… $Ú‘`¡Î‰ «U`²eÆj:U˜ vÁf±A¯(ÅŠ3Œå¶€8Ti²ùð™œ~Nœ8¹âŽ=zú'4g(ëðG:$ÉR€;r,à… f¶_å"žõðg÷3¯X`|–,‚5ƒ Á°í“¾[>†Õ ‡l. ÁÀxV, `Èñ,€ã4žÅ\0hû;:Ž3þ\!º™í–E»¶' ¼tc1´Ý.8'>]æIš˜{BÇT{ÝÜ#h­¬MÝÇ?ùð/ÿï!ì‘úé?5(Û"’ä VLÁxŽ\0¢Œ¼¾÷³ñ¬ý–Cnç¸.v£E¿ÝÈNæÿ^S8ð—ËgKìÑ^¢ýñd<ÚÑÃk5ÿm¸Úc…Y"ÁZŸ”G;~Ìb –òhWD;&øâÊ‘;NêØ+«Ë›®»Ðüœb€‚ mÇ/$/»ØßÆæ„&&çD9W%½%KÃÝዽ‘ÜØüšCP,X×kC0>±¹`pcŽD0³¡6xëCß;$]0‚ñÉeÁX'‘8 TÌ&Àp¯òlÏbKŠaKãY±‘8]00„…`Ðxóo­4§Å{€ŠàÀÕò¿ôu ÿÇ/maè 3 iºŽïÃäŒ%9s£J°ö‰‘ᤉvpüE#Ú\ÐÈð“?€É™IDûË–G»"Ú1°ëËÿEÇqðÊW¹bñ)Ì·r`Îdógb†ÂL» ´}~¨Ò´sâsež¤‰€‰@IDÀŸÞ%YøÂr´y5éΑÆS…!Û9R­Ç®X¨ r~çøZDõ‰\0Þ—‹H.G¤ r%‚Ž€#½‘f­‹`°ñ,FºË%ÅXD’ ‚Ž€‘ 6ÈŒ0‹¹4¶¤˜f‰˜ Fó+ö€lD×øûe3‰Ê*Ÿi£l¹Ä™Û…ð‹]‹‘a²AžÇF†ï#ÃÜB/ÁâíÞóÀs»‚Ÿ[&I´¸Ð=ÚcíïþYíH°ÐkDDZ×Ô§m¸pÜkù3!%Un¼‰•»Ð\Ûƒy7–ÄÛ¸4Ïéñx.¸à‚U«VÝaÿ3cÆŒš5k–ô•év<®þG››[Ò× Îß²eË¥K—:®gÁ‚7.…kX¼x±zèY³f•Ü#âä±b~ûí·_qÅ@ ä]?³ßïïӧϺuë×3~üøüüüÒ¹†3ü(ÞP}R,§®¾P^MèphΔ4ˆoaÖÊJ?ŠÅÝèÇÿã¢ÁXùæ9‚Ÿÿ‚ñX"cµ@0°ª…î‚a!/PšE¹v …` 6ˆ½ºH³ø’bkIL£Ù{‘©à€¿üåÒÇp‹ÏpWFîÇÈSRž`1«{¬šÌ½¤˜‰vli)ÑãGíôÆï üª8ÿ¦ÃL±0\Eà_¤`V¢&–æ(ÇŸ‰yàú3{žáwüé=<¾/¾üòK…¨9þòŸÿüçÈ‘#+V<½‰wo|UÅztþßÿùÏîÞ½;—Ü5àÌЪ“'Oƹ’7Þx£Q£F%z ?ýô“ºŒd•ÜcáäñcþóÏ?WâV™7ß|³þ”—ô¯ýkÿþýiii%‡2qf7Ý _Äñjb·( ßqG+«Ûžô³H±¸C9Ëɶœü#W,ª º"'ÿŒæ?\ÃÅ’b;‚Ájƒ_scð.¤YŸbû;!wH ¶¤8ÚÞn.³E$Œ}öE$ñŒó®Ø;éÈúqñôgȼø=ÚŸ¯4üE$XØ]É<ÚO4šözÓ™o@›áS…rh§e ¸Xû¾îÑŽLJŠh›<ÚÑàƒÞH°vÖé½Çò´m²6­`ªû"G¾fNj)I<¦Eô«ˆ°‹óÊÄû¾HQ¿~}|/Äÿò¿¾öÚkE:}RwJ¨Xüò¶nÝšÔéŠt£ôôô_~ù%a¾ÿþ{ŸÏW¤GHêNeG±x(l%uÝEºQ=7Ø»wo‘N_®îª4ɾpÌcUcÌ9bkíHÆù‹,@Žùç.yæ[¥XÑwÈEóc¹KOüôn®Áxø;7 >žõ~·Õ´¤E”fñE$..ñ Ç’b¾ˆD.)æä ™Ù C0š^±4£~ôšö ­ká»Zˆh_]úD;lA`Á‰~Œ×ßó,ðÑ„؃º¤‘á#? äÀ ŸøEí0{äDûî¯þ‰Ao ‡~ûoÚå¨&±0RÝdŠ‹e{ü&–r»ˆògòøóÊÕ‡Ãv±C† Iæ[· ƒ%ô4“T¬?ü°„.§½ð “ŒCÆ Kî2Êšb¡BXrOvùòåÉÄü‡~(¹k(+gÆDgLç —EYÖÚçTV×Ý™é+ÞZ¬ÕrãÄý(ÅbÆ“D0¦ýQ!Ï‹H’@0N9Á 8D¸#ä‹4 ãY‡Øxö=²=bÉÝÈ Þí‚`4¹b¨:cÇ£ß_4õ\PKí´¢¥å \܇ˆÂíÏ  "%X°OÀK°Þ„*C›……`’Dû“?`Ð ý6 ½oä‚Ùçh¢Ë”súéßÛ?þ‹, 2ì¯f³é¼pê´lwLbÅšVM,k›™’â)+ïûÂ_ÇСCõo‹.º¨²ü³mÛ6ýŸJ®(çP¬Zµj©kxî¹çJ§JÖ­[7ýÉŽ9R]ÃôéÓõ*((ÁI†3¢X¯¾úªz²ø‹þdñÒþ=•ì=V®\©?~ ¨Ë@!Zýb’ìËïíüéÝd+k‘¶Ú1N+‹¡Ž©,†ÀewÝAöNZ+ëÆõ'tÅŠF00Ä ìÄÊvP×HÐ"‚±Ÿ‘p‹ -cåILÑb–KxÅ"î‚¡ŒaÁ %Å|‰Ãã^› F4‚¤!MúßóøÉª£û”gd‚Å6aòçn[í¸Ð=Ú“%ÚáMU4¢ãnN¢[J¢ ~I l»ú¥•e;ýò€bµšG¯,Z}°!®}Q‚NËv±”Ä}Ɉ\äÌ»¹ü~LpåÅB/G=‡”šbé§¢3¢X×\sŠÃ¨Q£ÎnÅzá…ô÷ð™R¬ììlu<òȹ¥X¾p£˜­,‡‰{|ƒA¶™0Òh±^ì3ë]±Áø} Œwþ‡#T”Ö8!•.¿ºþî‚ñŠ`0w.ÁàµA†`€©£E$§ƒ`Pm¯Û°¹`4¾âôéG·ÉO‘h' A‡G»´”íîDûŠ“]W¿û‹7|Ü¿ßVvn!˜Ñþí”`ýö?(ÛÎ<ü)kb‰¥!øý‘Ñv…¶ÅQãÚ©‰µÉJÈì“Xö%#¢‰ȼÄ(ÖiF Ž4Å:ÍØÆº»N^Å*¡ â´_–X”åX;ËW º1î]w§5œ¥; {Ø¡X ÁÀïzZD¢\08‚ñ†+‚ÁdzÁ`KŠ“D0^ÃbŽd ^$³A,)fiÄùc5Ò¬‚þ÷â2Øñ ;¾¾pÒÓ1ˆvî ¢í=Kœhzð+TP!ð(WŠh¿ ÖÏÿÁK3â®·­&ÛʘÕeKÌ’ ÅµóÉ-æ#Œ_9\¹dÄ—Ú¢ï˲wS“cñ×ÄQ49OqJ³*xNçXx †*MqŸÊÂhgµíûˆÝíšXa0ÒpŠ^lÐwo´b‚ñ[› †XR, ^´-"áÆ}rÉN¾ˆÄ‰` 6¨!'Ä"5žesÁ@m‘HŒ¤ŒFýï½éÀWúÑeâÓ…&ÚÉBÐîÑÎ-ù¬8íÌB[W.ºý}ä—ÂB0Ú£OpA#Ãní Ú\(¢Ór‡ÿð_¼RW.zQ,eæœzÃeÉ–9¥¢ö3V%­Öb-¢lhbÁíÂ_©ìÉP!®È(–Q,“câSr7 æ^m‰ë¾81˜V0™Ú9|SI³õ¹m7G+–…`|/‘8\00ž%]0‚1ò!rÈ‚{40{„‚˜Ýã¤pÁàãY Á€{¬‚ñ$ÆuÙ’bÁÀx–D0äx–ÁhØ?Øqýè4ái±œ…3ý´HŒop‹µ÷`ºH ÖDÑÈp?l~N#Ã×`dø¨–À…h³‰vlÔt%Ú1-Ç_¦®c×K‚i fk%A,ޱË•k'ÅÂG(qíáʘñô–Ü{¸ÎlË(–Q¬Rø %~ÆEE. jÄ í€4*Ó2±[kï—-B0h[ä²xûk¿uM³’E0hIñÁ§G‹H8‚±'‚y[Ž`PmP,"u“î‚ñ+–f¡6(‘D»`ØŒý ‹6x×çêh?î)i!ˆKYÑ^pD;"–<ÑŽB½@UºÜ%Üë ˜IU£IÎŽ®” kIPçÚ«Ì d^V&Þë§qF±ŒbÅ:PñÝsl½Ó<‡]“( &C ²ø1žÑf 9U¼}ΣŸ¹*G0øx*øÕ/‘8ŒçõE$NƒÕÝ\0æ¿ RØ#%–'‹`Èñ,Z¶+ Ï‹Hê88pû§˜ÕÇöOÛŽ}ª8‰ö1/q„Ê6䂳ßr'Ú·|Œ6˜IÈ6Ä}59 ?ú=¦›±´íD´·{´Ç ÚÕ«K-é~ËŠ•‘Ɠٖô+%’œœUÈšX`.°ad9†©YK+ V™ëKm]|oØ3s&£XF±Œb™Ï^Ô£z•¦Ç+ *âvyÌÏBx Ú³²:ÜÁÍË1jÛ¯c)–…`|ûOa®Ž`,;!Ƴ€"« r Biƃ܌Kh< Ƴ˜ Æé ÛtŒzýB*ôãüÛžíÜBP÷hç‚=a!x€v6öåÀEb¢½ÁäH°pñ-ç¾…'B#øpퟣ>yãþ¯à à¾PD;,Ñ®^-ïþÂ,ÎPü¤Ÿ7=Æ–ôäƒÃî”  ÌšXóð{ȨVFÞëE¾ £XF±ŒbùãSÌw æÞ£0(F‰#ŒžbË0ÿŽN¯ ˜1n¤þRúy.EnÐ’c)G0€Vßà ؇oýäïX†‹k~ý?pgÀ’_B0^øj\„`ð%Å Á@ba!w%`ÜêXD’,‚ÁƳ6ÔpüãÑÄ@2!Õ×ìùœYºíÏÿ뻿ò eÃKYÞõ)-ÁâíŒh·êx-?õµ, ²«þŠŒ–󵋭±Æ°˜'ˆÅ\ˆ»ÈËF †+ÏNñø‹ù-[ê§3ŠeË(V©ìb<` ãb½0H»tá•§\qyÎÄ @eÍ® fé[‰ÓêÎf{¸ ‰\÷Û£X6ãY Áب!øÚEu‹\0ž‰á‚Ádz€`l² ¬:´\0¦¿£#Í#)ƒVlÐxÄØx-"©3à>øðbÕ/?ð÷–£Ÿróh§aj›G{òDû”(f6C‚5ïm<\”(Ñ®^ ûNqg&‚Ô›bFÛ5’¹`>q˜ –“‘#c.%ÁPÞ­eå~×aË(–Q¬Óøë]}áæáÊsl…ÁZL±8¡r&}0ËfåÎj°4+µîqæØÔ|Ðþ8ŠÅ]0àh‡_ýøí y „îxO.)V.Á Ú`ã”î‚Á ì—rC0žÊ¿öÉüÁ„`°ñ¬Fí‡à4¡ÍG-Ñž?¸ˆD;VYB !ÌgË£ý¾¯Q#E4€¥ EŠd{&çÿ=¼ðáˆÏ-a¢ÜŠ¢«îÑ®ˆvõêܰ櫾WªºK³:3Fßµ ³v1¶ÅŽ7½p>†Å™ 98Œ_BÌË‹õÝzfNfË(–Q¬3óÙ‹~T¿"v醫€¿ÐˆAfI.<(gb¾yT”VîniVjýñj– _gÕºl‰¯X:‚qŽ`ðڠ̓#G\0æ‚ÁdzÁÀ7{÷µ§°K¾_DÁ¨4ô¡PÃEϲ-"qG0j 8„é]ØÆ«£ÙȣȽøÎ°¬ŽX‚Eˆ?%Xa ÛÙˆÖåbÅ ÎKCæ_{¤"¾#Ã/ÐÈðè—17àœ%X³ßÄþíÈ‘`u[s »zI´åÑþ½Ã£½PD»zuzO=¢'XiuçÅ€Ú%sÁ:Xs‘“ÌÆV•yx_ùÓÚ••7úi\‡Q,£XF±NãTÌwõ†ógàç°æ1È–êò -͢ ¶ãQãŠ4+­Áx+3ƒ1]ÓµüößñE+Ic–D0ðíŽ`l‘.ÏZq’#à‚Ú VúZKŠ… ÆJ³È!7Ž !µ®¼úÙ/~àïMo=ZŒí¸HÊ£}ÿ—p¡ëáït2 A7¢ýäŸQbE¡{Ÿ)Á’í:Ñ®^šv76K"[šJ VGkj˜šylVT‚%™¬’ g.08<Šå Ô(æwë™8Q,£XF±ÎÄ'/Æcsofi–ë`–â/Tšµ^lÌŠJ³"§È˜0yºû”µ×1–tÑ’b†`ìÑŒ÷’E0È!iG06|ÐcÝûXxˆµ‡6 î  1žõ<[Rü´}I1wÁ¸Ÿ-"qº`Ôp?²7ýh<â(%Xícy´ßO V–`Ááâj\ ÁºéX¥›Ÿ«4œ,((Ê•E#Ú¡œ&Ñ®¿õzmç,A¨×à65 µÇg.æ†+»•¡7zQ/Å(–Q,£XEýô”Àý½I±´Á,¡ã€&þ‚/f‹‰ÅþJ³Ò›Í 8ä]–û&aaÐÁøX"|I1C00fd!|ªl7oZD…`@Z8‚AKŠg½YÀŒ j‰Áx‚Ò¬( ‰`ÐxV+€ vZnÃÑ>ýdˆvx™h‡É÷hwu!Én¶ŽÆT;ªÞ8½ƒ%,rvg»E¢¡v7æï¨PÞ¨x·žSÅ2Šeë |ðb=¤/Ü ?‡£ø ¶®Pó¿°aîÜfОfe´b´˜â ­š|ïû  7`KŠ‚ñ¿Á`Kб6×ZD >žu˜/)vsÁ¸ý} v§…`ô¾/‡»`t§•†hê@±0¥ o9*-YKXî‚<Á²,‹H´¸HŽhÿ}a‰võºìùüo ¼_ÉYˆ`ì+swT ³z—ŸÆ¥Å2Šeë4>@Å}W¿J8¶L³æÛü/,Ì}¥ÀÜ£Ó¬6lÍ#¹ø¬×6Cgxê—“Q¬hã ÁÀxø7Pp`á,ãQwè9G0XmP!oY.c­E$‚qD0¸Cîe‡r/±!Õ¯|›~4v” ÉÎØ2ƒhçÀÅ`OjÀ…Ý£Ýhï–¤Gû§G;ÖŒaš Ü Bgy´÷/$XÊ£=úåX}ü7"Á’ôD¤`2aýb+ªƒeM ǂډ¹€bùR;÷[õÌœÏ(–Q,£Xgæ³çþ¨?Á”fqþÐàB`ÊØ‘|š•ÚàVo¨B¸úLq/P Vd5];ê®·’-켋H.ïþ“°Êƒ#X¨‘Áøp„ÁÝPgÁ¨våC(0‚?TG½¡Gz´3¢ýÉd<Ú±”7!´=Ö¾Ÿ<Ñ>§¨D;QV>ÿ]õ.wŠ*‰§ûµCÕûe¶Þ@õ@w[¦˜P;÷¹ ÅÊŸå Ô.Kïò¢_‹Q,£XF±Šþù)‰{³oi–…¹/ SŒ4K@ƒ-7FÏôg4äWª|ï7ÿH¨[Á ñ,‰`léÎŒ7c¸`V.lI1C0úèÆòâA0ª^ùPó9oéG(ÖéíØŠâ$ÚW&E´ƒòŸÄ,ŒWcXL¢ýë¹ñÀÿÖ=ÚÕ«pø÷ÿºþµŒ&ð½eU–%àB//¥7”—Zw¸ŒN°,#A jǯŸP…YOjI¼WKÿœF±ŒbÅ*ýÏ]¼Gô§÷ÅâäÒ,k6+½É²@…Î)kûQ0ïj§<¾ V×î±mÍK?Ä­d X¹ ‡b l< &œ‚ï>…`T! 5žÁ¨råá¦3ßÔÚ7W,Ü1h ÁÞ÷aK$vE’…àÀG©xÍ“À1ûE;‡Ñ,lF®~Û+Èó@‚Šhfâ Úgû-\¬àeµäÕ? pJ#ÃD´ÿ5ŠhÿO4Ѿ÷‹¿u¸é÷ÅÁÕæèo_zýHÃiÊ'×ey£65¬'XÁÜ1eë-~WcË(–Q¬Óø•À]}áóCf’bÙ¦‰íi–>›Õxu¨JÏù#ÚãM V¸Ž*Š‚A¤;¨¬æ·Øò–ZÈäª^Á€Uë^rÁˆB0Nü²ðåßÏ}Á¾¤XC0`¸_ó+îÂ’â°«3¿„`¬8 be7,H„äX.Ï"³AµˆÄá‚ñ‘îÁ¨<ð0F?j9€ Œ cg#ÆÎÆ"íËÞ…¸bÒ«çúhd˜vví0Wtñhg‚ TîHäÑÎc¾ìØ·Õ°[Dz2 ¢,…«Œ÷ª8ß_o ·c¤`±4¹Ðf°¢,ø§°+qe ¼OÏÌ)еfÍš‰òÏ‹/¾ÈW§ó?áp¸„.«Ùc=ÐÑ£GÕ?}üñÇ%t8m·nÝôk¸æškÔc5Jÿ§‚‚‚’»ŒŸ~ú©tž/‚©¨Œ(Ö¬Y³Ô{ïÔ©Sêò“’ xY<³×_=”73Fš¥ A1›®q‹7T1ÎÓV¸4­ÖB7«§u]F<|Ï×ñ*„ü,‘p …`p‡\ È*ÜŒ_ÿÆþ*î‚Á ô„‚ýÍfÇG0Žb5°pÁPgÝ[ùʇ‘œÑ1…ýïäÕoxR³tx´Kà .`Ý‚ë8¬·½Rg«äуh‡Ðb° K–ñ,ð\ðŒ†Õ£=šhG%ðÆu¯fÀv=Ú` rUõf”c½¬øuªÔ/Òw¹Ù2é ~ýøR;—Å7z‘®É¡XúW³þ÷?üá~IÙþÅR/ݹ¬X±Þ{ï½÷^‘ÞÚå÷Nž`(o†3Í‚y<â4oÜÔZS|‘x¿ž<þŒÔÚ×c®6½Ùü´Z3mÆÒQ·fm«^üM¬ ¡†`ü˶ˆ„#¯‹E$:‚u#@ºß÷5Í1ž%‘ ‰`p‡\æ‚¡Œêº ÆMÇ@ôÁH vJš Æ,Í:PiàÃõÕjP¬#ÚlKÆ£,í°ŒåѾû³¿¶½ñkšŠl•àB¬pˆp_Z<— o0?\íæ¾·D‚…÷’7P¯ü~Wž¤bé9G±?w£XF±bÉÕþóŸÎÏžˆÉ~v‚Y#â¤Y©µæú³Ð²òÅ<ǬtQF˵´z¤;ðèvw¤Õ¯g)ÂÌw ÛôF¬ !!|<‹!w}òwŽ`¬- ‚Ú G0°\ª+HwŽ`,xôV&bqb.+ŒŠ?…~T¹þ³Ä,n!È–`¹íÌBpÔË5Æ"Á’‚vví°D‚ÕçÎpå@Hï Ö°Cl Ö#ß) A¬ ›ûâÏ(bR D;Â’h_òô7U/¼[[bí`L­=-£å}+\ëzüòˆó¾ñ¥5J­>Q÷½u$X¡Ü/ágÇŸ„Šõé§ŸÞzkɺÔÅ2ŠåªX¿þõ¯xv|Ð ÷,‘~ø¢¡4‹ÏfqhÒ¬Ü~_$Îéü™M#s… †Ï¢q¥ŽÛÒMJ«»Xrƒ«hq‰´ïxËÃ{¿ü»« ð6µö±%Å´ˆ„\0þ 3rrÈ… g‚AãYG~ÄW9¾ÐÉÃÁø¨×zá«#4žÅ ”é`6è‚`\%]0.‚”?ð$dúQéÚ'sz¢ƒu@Œ ÷ÃÈ0.ˆhçÀy21àÁ ,™ÄªI´ÓÐTCk­}4Ѿ5±G;ˆv”F“ôhGkðºÕ¯à'‚°«àí+ɦ֟Ù~3s¸`+Eà`B‚›Ò›¯æ_ÿJ ³s¸Ú¬ÔêÌEùÞò¬`öØÂ½ùÊö­Š5|øpttÔŸ:x½|TBOÅ(–Q,(Vß¾}õ÷^«V­JèýVNë µåN×Ò,r U¸É¨ç꽡ʩµGéîpÁ  ÅÌ!·ã¶ôVè„Í´™êÊm[5zìXþü÷ѢŌÿ(Å.ZD¢\08‚ñ¢+‚AµAŽ`^pG0æº!Ã%‚AµA} !"t¡ô²”„GûsvíÈðlí1‰ö/‡øjØ¡on……à#¸(,Ѿ󓿴¹ñrWrY¼5@k¥ €3¹Ò°ÒÎögœçÕ÷x#ìËñãFÍ`á~÷Ò•ƒw|Ò—‡Lú§{C£XF± XÙÙÙ§ûN:kîïõ× åLSiV¨ÂX_¸q¼o+_Z°Rÿô‚UrÙ#3«³6ó5äcĶgevØ”V"í{ŒZ™ÙjãMP!tZÞYÆ×.îÆ7ø¢'c·;‚Ár`@9€Q L‡b]•Q/³4‹9äéîD0* | èŠ{âqŠ•{ %XÅF´pÁ¬]Ÿ¡wãþ/A´£?§{´Ç$Ú?vx´“…à‚#_U¹ðn&Wëíí«•©õfd´^žÕi»0h×w6:<Ú›¬ ×Àlx¥x¿Z•ƒ9CX‚5“º¡9Óýá ΚÏžˆQ,þjVP½«õ~L”Ü»}åÊ•úcÅÒBíI eOÃ×M(w²/ -«ØÔpç¬Niõæ«uÃÖê,åÛf³°n‚ha}­|Üi25Ò`»—sáVûaÃàNO¶8‚ÚàÞo‚ñÙß±œpé¿`¼ Á€C®tÁPÆ Œyo'`žßÔbIœ#‚‚Üæ‚ÁŒi¯×›ôÈurÈ… F4‚1èÑü«'öO;0h\h¢}ö›-Y‚Õaé»péI´pá$Ú1æ$Úß³y´ïþêû/|Ard1PäIi&fwÞæ&W[m¡ÚW’Ѱ ™øØ–Z‚UsŒ’ƒy×xü¹…z•ßÅ2Še«¼|~áuÐ*Tq²ÝÓ]¸`XµÁF²6H V>Þa­|DCKNh9D+³íÊ´s\E«Z‹žÛ Æ'b wÁà€oÔ'ý&F¨ ‚¯egG0Ø’bÍC,)–Ƴ,ã'‚AŠuýSú‘Õc,Á*ѾÜîуhÇ0”:§ýO->ѾîõŸÏ|È)Wx-¯I+XšÞbV¢duÙI?]u”Ù~I´Aûj“­}…D?>„)M '2dZÿ-*Ç̈öʳü àφ-Ãñ?q\šJ /.ƒ¬àÞ½{•cÐý÷ßo\šJâ;ÝA^è.Mõê=CúÅ:o F0{˜ÍlP¸`HÛ@aЮ€<Óâ°»Naè¢E†È´²ºÜV0ÙU´²Îß|íêWüù?T”Æ®„ÆZD ZRÌŒ«v~†šÌú`Ùã>±ˆ„»`(ãYã_é‚Ak®Žèê„yW¦‚áUÁ&ÿ$—`=‡,F†G¿\sì+BI´¿7^xòb,¬‹ Ú™… †…àn.\ˆögx´O8øqÅ ¶9ׂp¹j43³ýº˜r%h‹Mîí+Uä¶îÌxI¶5€Å-ó&øB-RR<Åóž+“g¹ì²ËbÙ à+»t.¹,(VÓ¦MÿûßÿÆ …Q¬’x'Lž<9VÀû÷ï_X.ωι(v˜ b¦£5°:kq̆[ù¨MhÂØ„ßò:Èxw%Zð“Mo>3R°LMë£]­‡<´ã㿸 ÏbL`ýàïwÈe-)f†y-Œq¯Bi„C.H÷! Áøà@ýïߣ±Äí§G´oùð¯—ÎzÖe‹•È®&e_H 'ݳ+9,l“+Ü‘ï\ÙýI®X=ëÓh^X.ÁâXÁÌ›`MY.ßëÉ]ô£>êúÅqN)BµqãF£XˆC©ÑíÁ`Pw¼Õ×(–õÙõ…:…²§2Ò]sÁpî{”¢…åÂÖ]ÃÖí¡ƒqE+³=¾%g‹f˜5LjW¥ÛŽyO|õ¹`Hãsé‚qRwÁø½rÁ@m#h¹ lI±\Dò-"±#˜æãY‚1øWä«e Öã$c×± € Y‚…–c”`M}rØ|ö[k»èŽÜ£}­Ó£Ýh?ú#L=ð¤æ§%XÂBPz´/yñ§‚¹E…#IŠ Ør.6¡8äʲb²äŠB¶pi_qƒv½ˆ‘aáp!°@´û#W¥¤Ä6ñJNÊì­²²²-Z¯[Ç÷õ¹¦X0§Ç¯þï¿ÿ>¾nïöb|'W¯^?þö·¿9bnËdo°‰¹`@´Øê,›u_R¬5´,Ѳ( Ôyw5Y¬gZYlþv)ZÎfØ å/øÍÿq Ý!7‚ñðwØ)5ô pÁ« 2øƒXDÁxŽÒ,¸`À¥º…`4ÑN‚šG{qí#vÊïŒJ }‚е "¨v\O›P.Ø©gWN¹Þlú wdÙ•”+û>Û,ž`Q=NÿpHáXþÔK±²?¥eóTééé]»vÕmrðmR:—Z¿~}ýqu_¨æÍ›«j×®])\O ÀÁžJýYµjU©U;uêT:ÏÏQ=PË–-õÀê¯^šRˆy… ôÅßñ_JáqËÓCxýuCÙ(ͲjƒdÝ$ý™hqn­dZdiAK‡-lý<ï®Ùa袅´ ½ÅìHãå;dÍ0é£Ñâº6½ûG Éîæ.qŒ Œub‰Ž` ç¤!Øž% l!ÁЕ~ðë–` A–`|‰'Xో‹¬9”`áQ:-{«O`³ï½éÃË·Àá‚{´g©¡ÙÈðaZ‚à %XÏÿnþqi!Ȉöµoÿ©Ç”§£?îj±&Òxrö…;¥\±¹+†ZÄ“+D=¦$gÙ¾b äŠÕ‘ˆûÂËÓÛÚ\k D 4÷c•Àå›Sž-ðø*³`dÀkƒ³è«Š×eCËÚE¢Sõ+|ÕªÉâhä¾j»îÎì°.R0;zÀ )E¥ ·O{ðSŒÊZÆû1\0‚‡Ü(£·B0Vžkî‚`0‡\"݇=‡r” “Â@-¬cÀà ¸xRX‚%€ ›Gûì7Qu,2Ñ>ÏîÑ>ûèwõ¯Ø¯5®¬ )Òxiz«ùT Ù•%WbîJÝêÙ•îmÁÛWöé+I[8ÚWÊiŠ/Øôly³›çQôÅ*zìÌ=‹7 fÛ³¸­»ÞÐr¥0”y`ôV,ÑâÃÅ]X~€¯Ý®;àÓj‰–°ÙåÇæ~ ^Øñ9-‚" Ž`¼c!´¤˜!á‚ñ˜tÁ8øH<ðx¹ †B0V ƒ/)Ž…`ÀEö kò-åÑ^i¨Ó£½~´G»+ÑÎ,)Áºïk0GþÎhã0­rç;yï²`teNÑ?#³Ó¹Rc±äJgÙ]åJÐÜ ]µ¯È =”3Áë¯Y¼o6s¶r£Xåô…;K/Û d\mkhUÆ.’y4—xŒ7´ô±büNw-Yâ) bp§ÎL´.º| Òx™Í´B¦yM¯ºoõk¿Û–‚ÁƳ‚1xH÷O/ç. ÁXö.°ˆ8ùÞö¹_?`uQ\D;,ív¢}É+¿ï2îˆK%7®šLÎîÊd^Ï®¸g wµˆ'WÒŠI‡y=ÐI[ØÚWÁìÑ_ÞYúv7O«Ð0ŠUè™;”p¼þÈeVC‹( {C+Z´¸ã-_ˆeÙa'!ZŽáb;õNÂŽë#3£*„”låw¹{ì=ÂC8ä¾ó?ð.ZÊ\0PLƒ ¼øàȇ¬öç„`°%Å ò¼'8‚Ú] Á8¡»` úG{°´åAZ‚5äiؽó%X ‰hŸðjýÉ'°æN»8-Á‚…àò“àé{¬{#Ìd†Gû•Û“óhí—IU§Ï>=µRh_¤`qFë…šVaF&XÒâö´äJ «õWH¬9mQa&Xvì)á÷›9}yŠ€Q¬òôj;×êKí,Zøò0-ZŠÂ:ˆL+him-Z¦¥\ÞÅ|±¬îDa›Öâ8åj›.žqlÓûäW„=¼ÂãYÒ†Á€ :¸w `°%Åó߉NµA‰``w0öŒba·ˆv ­•€hgÀ…N´¸ ‘á-Ã5 ª)ˆv\ûÙŸÚÝú¸kj•Þdu¤éªRSìv,P8²sÏ@>°¥äêvbÙËó¶Ð‡…Ùú+¤×Ùmoq>Qåö!Ï?ÿ|Œñ?[·n-5º½ÜÌ\øŠ€7P3”7¿¸£ÐÁdEK›ÓŠ#Z6_ V!¼ƒ*„ÂSCçæ7æuÜzËö“:‚AKŠ‚1ÕÁ`KŠ]Œ%ïp£éÌ7À¦ƒt¯ ‡ÜÑ/W¼îHÎE÷èLidx˜ ÑŽûhGFȉöQ?«yÉa÷gO­Ò/Îh³(*µŠ] ä+¯ø˜°dçÙ•2ºµY1Ùá@&W¾piÌúœ¡7µyØBGà¾ûî‹5G\«V­BŸÎÜÁD ä"àñUæŽcÅ:§¨!­™–›÷ rrrV-ãB^!Ô–›P²Å{c»M<ºêÍ_€Õ-ã‹_ý&™ðí ˜|„r±{^!´¤˜!h)¹ ´¤X-"y Ý©Š×Éî¾W?r/°ÒÍÑ A¬3ÆRc¬/Á}“'ÚqI£¡%XÈ‘£½ßÒW³Ûnf2c+²éàiY6¹¥V18 ]®ô1áÅ@eY£àÀp…iÞ`£’{;™3—ÇÄR¬-[¶”ǧc®ù,zïÁì¡1DËr¤Éb.ZQô %Z¢)''·i-ªj-ø¶ÂúãÅ èç!ݪ×wߌ'¾á¯ ÆC0vòE$ƒ#¨ãE#• XÄÜ[v9ràc[Õ¹…àiíñ‘`M|üû–7vÓªué«"M§ÊJ *j©* ä+îÈ¥yqzWš\e·ä ^·^µ³üÝlž^á#­XÿøÇ?vìØ‰*§ðÑ4÷(xÁ¬A…È´ ZöábM´(IâãVQm-æœ+:[´[ IFVÇ i §ë ¢Ò­Üvw^¿á-ZD ¾¤8 Á¸þž/ïþ-¥~wÉE$ƒg1£Ê Gèqµ#¯ïýÂB0Ú£€‹höuví.`!ó#àâÈ7íú°ZQÃÌ“-Èh³Ø2^²ºV®©•£qemh´äJ ;-ä&5z•;ÒãË.÷’yŒòVa‹úsà 7ß òöž‹×ë ¤_S´¢A &Z´’¨÷urÖJ99IÑB¢ðƒòs¢-ÑÙ’EBV!l¼š¾Ó%@¯t«Ó¨ÇÿÝb¤YÇã"|<‹!´¤8Á˜þhõª7¡ŽA´_}ç{•.¸›’*…EXÉÐÜŒÖK4r]yÚjZ¥›Y­r¶ÆUT1Í]ñ­W6¹òGº'~ÉÍ-LLLÊo¼j¡ Š–Åb虯ªUÚŒ°ÕÙ² Us‹‡pR¤Ñ Vr”Fòœç=<ã©€áÆssÁøê„`ð%Å·¿ï@0 E5¡Xxtí€ÿ…îÑ¢L¼Ó£ýWö¯ùÈp×)Ç2‘Zi@ʄŗÖ`RfÇÍbÊJø¯Ë–•",DЖZÙs5¶=DapÖ¯¿Á§ÔŠL˜¸«…XÒ¨¡³|áVå÷Mh®ÜDÀDÀD Ùx|9¡¼Q1æ´b„ºÆØDËJ¶˜¥“FdXÍ-›n¥·\i0j_êœÜ#ªÉºêݶ¸çc`À!Wº`€€àÆÀ¸Fí¡Gé´#¯÷} ÚQLŠhßñ)‚F†ÉBðë›îù¬Ñ€ý¢S¥’*\3 H-ƒ°œæy•«Vi@  ¯êб+|C#¶ä*ª7X/ÙÛÜÎDÀDÀD ¼GÀãM æÜh­hÃ\¾O‹¨÷m-[²¥a„±tKr™í7¤Õ›Ä`zÖ-Ó¤+«ùú> ^šöŒtÁ`KŠi wÁPÆ&`ð%Å|IÝ¡G©E¤y½Æ#Ú™… ÊŒ°ÜÙ“pÁ<Ú¯Xûv~û;ÅúDªdr¡¢5iõg¡È–ZÙk€V^µ…@J¯K' 1Í&%W¬qE&L¡ ã½þJåýíg®ßDÀDÀD ðøÐ·w-Ô j.NNBC(QÍÖŸ£aG‘š[rÜXå[‚Ë ¤0­`R¤ÞR’C>¦IW‹k{äQdV)º lI±B0êÝ|”]†uT¸ôSN€€o6û-t¼ÈBpé»p{ê¶æTÏÛ™…àd!s l9ÁC ÙÿeÇÛŽd4]ËZnR¨Èu‚à½Ôú2;lIí`dýªXZåj©•ô³ ÝŒ΂gWVãŠÉUî7³/³¹¹‰€‰€‰ÀÙzw7Ѳo'±’-™Eu¡ôae€Ë tѺÅyBB3Ò[,H«;ÛÊä´¬«r§-7l;å†`°ñ¬­_¦!X )ª?ì(Yç“G…K÷»{´¯~À…îÑΉöÁÛ>ª{Ù^ÊùxF%…Šõ–G €°‹ µ%D, ±çUÑ„…ÓÌ"VjÅýmœÉU0ûÚOèlyß™ça"`"`"P¤ ‡®¤\Þ±OK§Þm-ɺ&[ÑEBfÜ.K<ß\ÆV±Ú9J» iu'Æ$C!™te4^sÑôcðF²/"‰B00žÅ\0ÞrT ”hº.ÿ’ý §¾Ž‹[:<ÚDûÅ‹OäµÞ TŠ AÔ]–ZwFFË%l±=OªäF+Áj5@M«¢ ‹(È"FjeÃI®™}SR¼EzyÍLLLή “Ο¯BÈWAÆK¶T‘²V'„k»µpÄÒ-5tÌJ…\ºÒNL«³X=“.ÑBkÜÿÞá¿y˜‘pƒ–+cÃØhuáª÷:-?Y0ü(|iGÅKîM†hG«õ°ÇÒ‘Q‘J1á5:6•Zo\f»M–Pñ¤J2ëV¿*¦V9Ê€ÚÎ{ù´iSíf´8 6tUiŽ?­ËÙõv3ÏÆDÀDÀDàô"€~>ºúIW5B7TWçìºEN‚'T¥Bžr1éJo¶ ­öt±%™«£L¼òÛltǯ%‚ñ• ‚±öŒÆÃ²f˜uT¼øA´/x‹µP<„¶a– { ¸Øàâ“Ë7¼Wó¢í•s»µç§5š,2*]¨X‘X«¤#ë‡ÉW,{³w­bVÃù3|áóNï…5÷6008#€®~(w¸&ZnBg²%1º%S.ùì¥B­Z˜Ñf}jíÛm÷âÅŽôú˱“~¸D0°hѶˆ„!MGe‡uTºx_|ö gÏ>o­°–àî”îPÆ®9%½ùba\Ë3*]¨¸‰-Ü%¶n«ZZ¥ÏZÙ—”™…@Ø£8‹üÉXs6¾ÑÌs200(–xBÁ¬km„U籆Π1„Ø©u¶¢‹„®ºeõ·ôR!O¹d—‹g]¬`˜V|jù49KÈ";¸Ô^R¿÷îëw}"–ïr"çÝzT¤J¼¬Woy¥^ûZÌ} Ë´Ú#ÁZ~ Jˆœhï{çGM¯}P™?Q|b·Ö˜Ì6DéÏ)TÊf‰o´bÆ€È)íNƒjÐØŽoØ—da«2,0ï6/¯X^Rs³8Þ@FŸ(Ѳã<²:[ªHhŸ¯ÒÝo…né(<ïr9¤‹fÓ›âá&3™JÉŒô2¯ÙÚ>+^¿áÞ/¯Ùã@0>h>ò¨ÊÉø_*÷ÚëJ´÷\ù몷XÅUŠfuqÌ&3 R)­ôG•*+©’&¶‚Tý*•W±–•£ ˜(µBäƒ97cMÌYü3OÍDÀDÀD 8#àOë,Ekí ¬2¬2Ù²³ïÉë–0Ë-.kŠKJ+òÄ+£ÕºÔ£ \¤ \ÀBiÚÞò(Ì)8‚AKŠ7tñ†Z@±xN&*½öP‚µäÌluåDû†ÚM|6³á ~*&QÜT‚­Ÿ¯6>ý¼Åb½R)ŽT8„Êaß.L1’×*ɯ 3 1 Lr•5(Å(Î×ÒœËDÀDÀD଀/Ô”ls+ζã,ÙŠ.&Ô-iÅ$œ )åŠ#]¢ÝN/\e–ÐK’L~ÀÔê~÷•w~ »`´uTèW£ «öÜ à¢ã²wÁe¸è¹îTÃøÝ¹D‘ ÓÕˆóÂ5Fe´Z/r)½GÅJ²úÇL+ì@ɬ+¶ÂžWéþë¢ê(5R¸°Sâ\q6–¤¤xÎú·–y‚&&&ÅtþC&ÅH¶„é»è6)JB4·´:!÷³Ð]Û™‹`”t±‚¡-ñ¢Ü+Òr2ž<Šp°l™œF+.š÷G0Зj ŲT¤¨ZÏÝÊ£½Ë‚×+¶Ù ÄIž„Ÿ6TyzZ½‰ £$Ð|!TrÙ!T¶¤JÓ*ÅÇÛÈu^× é½DΟéKmWü/¡9£‰€‰€‰À¹ôÿƒ9cÂù³ôd+ºHèª[®fµ]¤\RºxÁõºoS¯ôfkÃÕn€t„˜Uª<7µÊ¼×=0àîOà‚ÑfôQ&iÖQ­ç.N´·y$½öb!{lÈIg‡*‰4^DÓc2—Ô¯û¹ •=©rXcH¶Bô«¢´Š%vÊ'iÕìp…iÞ`£sçMež©‰€‰€‰@IE@0{¨­è"¡ ©¹O·ÈQ—™<Ù-­5|Ó£’.Y6T–Z{,9C;é š:ªµßØ{í;mǵ¤ˆiRõ‹vv^úNíK÷è7¦ûŠ“Ì W‘Ñl%Q.*Åx –Q ¡r˜ *°B:µŠµ¬ (µŠ«&ÉÕ¬`.Ìm«–Ô‹gÎk"`"`"pÎEÀd U˜©%[”âÈdËeXº¥xB[©ÐEºÄšG+ñ’ê¥ Øy·§5šÊʛʛ‰‹ÑŒZ‹ê]º;Ta\$ÿKþùs›®vÜ’îKwŸ”Zg‚ ÒõDŠF©*Åy »Ù ÝÆÉ6Ñ%@y¹×J×*äÌ‚k®0˜}«Ç—}νÌ600(áxü‘^ìÛŸe9V²K·äð–ÞâJ,]rI17[âùJ¿HNV…*ÝÊ™NG.?f$wÈÛãŽFFηL•DY¹S©˜B¥99ñg1z¬&º‚(k€¶–—«™¬ëS<á~ÕÌéMLLÎÕøÂmCyøÆgÉ/ÍQKI0|P$º:VSÀüûÝò½•û·hnI¯Š¥Y¯a°ÔšcBÙCÙSCÙÓ sàöSC•‡¥7^­×úl?‡Jqûv‘Q9-…V1 >1&ˆy " NDåU"µ¢$/Þ/%Åw®¾Ìó600(•x C9S¨4­[ªN(†·¤tÉù_a¿$½—tó@îB+Öe)õM/]ÀXêS°&­>&mG3§âÈ—Zkœp£à)”Ð'VñSF\UJóÆuKª\µJ«jZ…ŒÐŸÖµT^+ó &&&ç|@ sÆR-Žõ“ìù–èo¹´¸˜Ï“ô^²;j¾·‚0t0FmX†¿/æ ¦OJêÈ–Vožå“ËOE$Ï¢X"åÈ¥*¥Uÿ¤ÕºrÊ`^j´KïWéZ™Ïæ µ<çßA&&&&¥7;˜9\´‘¢uK” ùà›ÒÖºñ7§pšÞŠÄKV­Í#–†1vCáj£‘1´‰±ñ¡ü¡Vöf'Û†%Q|ì×Ö£â¥?i<(ü2¬Id«¨8@§VMG%Ó¨SН’y(O8~m(gšÔ-ªÚ¸ ®[¬ThO¹l.a°ëª^jíˆ= “ëY Ë;jÏ ¦ß>‚i#ÃÕn%GÚ¹%Lr-Ï\~f]¢T.ÅÖVi=*{F%,3øD³, P°ŒKD^EœH0s´ÇWѼwLLLLÎT|H_bœº%9xŽfØè nQ¨e]vÇ[ËPZ¶ëkGDÞ£dÆÒ›ÅÁœÁ±úL’Zk¶•´¹Š“žHÉU#N•ŠÊ¨,ï ’d9\%™uRnhAŒŒiÌžÌêñfœ©É<®‰€‰€‰€‰€ˆ€/|A0‹a{Ð-‚ÎÑßÒ[\ …T¡ÚÝ¥×m”_»µsDO”˜©ÚûK¨Ò­þ࿌ß?:˜{cZkÖ…KèBÈ0?["¥|Üm*Å{TÒ£êÊ;ƒûV0`i§í¡Uœcœê\•â š·‹‰€‰€‰€‰@™ˆ€7Ø<˜5YèI—œ”bH¡Îг.«`¨Ú]v³vé×ηsi‡Í£]÷kO­>-¹.\y´ÃÇ]S&I¢ ]®‰²r—V¹ÂÉP”þt¡r$U\«hVŒ´ ÑÀáO½$%Å[&^$s&&&&<^`ÆxbÍ)ßrO¹bH—-ñ²r/U<ÔŽðý Ò],ТíVòP¦ÿGñwíŽbψZ5¬ÜnîªAŪ¤ÃºÌ¨XR%:UVÏia÷¾`óö0000(‹ðxóé·3&sÝrO¹¤Á’0÷Sö€š¿m´M»,ÊÙŽX{CÄ-µIËí/Ö’‡8i¶ÜÓÓ"J¥,¡RþOQB% €ô¬ùˆXƯ¿qY|‘Ì5™˜˜˜ðx<´I´¸né)—£ZhÙrs[ÙîReCiнjD-a‰™h5©­WŽ¿Ð‚µ¬Äú‹Ò'»§»è½‰•êQém*«S¥’*ñÄ#c¼¾êæ-a"`"`"`"Pæ#à úÃWŠ©Þ˜Òeïuiζ®îì6Sv¶gÄý°o‰y3]œôrŸd(¤—.')”Jñ•›PQR5™?å@Ú07·Ì¿HæMLLLD¼¾`Ï`d"Ü“Â.]ZÁI—NjØ­Ù­Í QKF,Qí»Šóm;‰µ|DÛ<ÂìÞ5‰ÈŸlP‰º±VF¥ U02 OÖ¾6Å“fÞ&&&&å,^Û@ÚXQ$’.ihËáx¥^‚’·XymoˆØ*b×3Y]Të¯Üþb)“¥O,‹rJ”Ê¥”J©«yr%fBÅì6&ø‚—§¤øËÙ‹d.×DÀDÀDÀD€GÀë+¤ÞHSº´v—„5tÓ5L[,ÂF¼p—ðÐîb-(a¾¨õÙ$JæRR¥x:e É0ª@*Žñ¾Ìm=æu7000(Çðx«B·’tKH—J¼¤‰-¥^5” ¼¶U„ò09ªl)Ú•ã/ú-y#ʪò‰9_®—ΊŸ®R”Q9…ŠùBõúZ–ãWÈ\º‰€‰€‰€‰€Š€Ç“ã „ÆÑÆÁÕ º¥Õ Q^S.ìÑF&ˆy-ãƒ_InÉ7Ö”ILMYûJÔãÚ‹~ŽtJº²§åõÖ3¯µ‰€‰€‰€‰ÀÙ4Ÿÿ*aú§K—M½b˜7yX¡–c9n¬‹“Ò'Ù—’eýHb)â*…ƒóx*M/’y.&&&&<~Ÿï2à6 ޱô½ï¢^*ýÒŒã1Va9ä'úÿºîÐbЄ:DSJô¥¨5eÏ¥”JÑõãðù®óx2ÍKk"`"`"`"p¶FÀãõvaNµcüõŠ%`º†‰Z¢… jª£+ëßµZü<œ›`úä"QN•¢kfïóöOI ­/’y^&&&&"^O ¿o”ß7š®^$`J½Xú¥g`¢ûÅ`üàc;”ö¸þÅ~ck“뫉BÓ'QîÈ\J©”¸`ßhŸ·WJŠÏ¼œ&&&&çD<žº~ߥQê%LÖu Ój‰–Ò(¦ƒ“Úḻ8éú¡’" 岪^¯1·='Þ¢æIš˜˜X³à÷ –ÛQ˜VEäÙ˜&f²+f_稭vä7 CÝWþE'7}²_ÞH¯§‰y MLLLÎÅxR2}¾kˆVT–c«%ê’–üß]Ï™à?÷xjž‹/’yÎ&&&&2!P E­¢¨Ž³Ä—ôãñx*˜—ÌDÀDÀDÀDÀDÀ–!iñ(²êñŽ>ïà””tó"™˜˜˜˜ˆ€h(ƒ¢åóÂÜ6h^$[À5ø}#ËŽny½Ýáåk^$—€nðû†—ÑòzÚ˜WÈDÀDÀDÀDÀD ^À8ø}CΨhôx˜ÉDÀDÀDÀDÀD ™¤ƒw8C¢sÛªÉ\¢¹‰€‰€‰€‰€‰@ÔC)‹–Ïwƒ'%Ǽ&&&&&…€ìC©‰–Ï;0%%µ°—hno"`"`"`"`" "¢DËçíe(&è&&&&&§p%J½cJJŠç´.ÑÜÙDÀDÀDÀDÀD€G4„ß7¬’­QX}b‚l"`"`"`"`"Pœ2¢XEk„ÇS§8/ÑœËDÀDÀDÀDÀD@F |D1‰ÖP¬;150000(¹øAIœ¦haÅ ”Ü%š3›˜˜˜˜ðxÀJY´°Ü$%%dBi"`"`"`"`"PJðzšû}£ «[Xk’’â+¥K4c"`"`"`"`" R-O¿oDò¢……&&t&&&&&g& 'ü¾¡IˆÖH¬293—hÕDÀDÀDÀDÀD@dZ)™ )âŠÖp,11á20000( §ˆ!ZC°¾¤,\¢¹¨ ‡haeIJJº ‰€‰€‰€‰€‰@™‹Ø %Z>o_¬,)s—h.ÈDÀDÀDÀDÀD€G„ls½Þnø«‰‰‰€‰€‰€‰€‰@™Ž€ÙÊX¦_sq&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&çLþ?€)>æ%Ô\IEND®B`‚fifengine-0.4.1/doc/logo/FIFE_small_d3.png000066400000000000000000001166301304641216200201560ustar00rootroot00000000000000‰PNG  IHDR;5d  sRGB®ÎégAMA± üa pHYsÃÃÇo¨dtEXtSoftwarePaint.NET v3.5.100ôr¡IDATx^í½tTW–.¬XU*åPÊ e$"ƒM4`0Á68‘s0&cc&'lc0ØÆÆ9çØv»£Cçìéiw÷ÌtO·ç½õÖ[ïÍZoÖüÿwξ÷ÜsC $±µÎò’QÕ­[ûVï~{ûÛqqüÃàp8ŽG€#Ààp8ŽG€#Ààp8ŽG€#Ààp8ŽG€#Ààp8ŽG€#Ààp8ŽG€#Ààp8ŽG€#Ààp8ŽG€#Ààp8ŽG€#Ààp8ŽG€#Ààp8ŽG€#Ààp8ŽG€#Ààp80ÉñéIñú âÿ  ðø¥8ŽG€#>iIñÍYI3K|KªUi‰úSãñ7”û‡ä&åùºøcÄàp8#@£~™‰ÓK}ËjjUÛ+˜¯ÿõºr[NR–ÏÆÃ.ƹókr8ŽÀ%B|CfÒÔÿ²Ú”åÚZQ›‚U“nãX@,ü£þ0ú}V¹@v²ˆ—@Àø-r8ŽÀ…@rB\mzâä€jE]ÊJkWÖWÖˉXIñÆŸð±Œ'â´®.ó·d%¥Ú«_öñ«q8Ž@¯ˆ@b|\Ÿ´Ä‰Eþ¥uÁUõÚj®j®v­Ú ;ÇJŠ×ƒ§Ë<”³eþ¾™I¼ÿp8ŽG ö$ÄÇ•§&Ž/ò-­K±!ScðæÆT÷ZÓ7•VmF’þ*Á¤xü£çSð«-ÌHV\QœZê¯ÏLòá ø‡#Ààp8á"”( &Ž)ô-®M7Ò‘Fa’úå–~©ÚJ»¥ŸXu™NÄ¢WtG‡4…aË냓KüÈ1&±À?¯ŽG€# G 0%aToam ¡”Ž+&ØàYÛä±Ö5¥‰Õ,V]–±Œ¿z=Ñ3gú+*¤€-« ^QìGf’Ib9ŽÀ%¼@Âðüäù5‚NÙÉ“Ÿh­oN7VKúzûª·#$ŽÐõ£Òt T„LØÒú”qE¾²T®t]ÒŸX~óŽÀ%l_ÂoNuŠ¥r(Τ#Ó†–tcõOßÐ?}£{µfÔg'ëÑb9†'Ë<ši:Œ™¦2Štž]‹ë‚—úŠƒœ.¼ä>·ü†9K(éÉñs“¯ïc•L÷YüÆâO’6)p² §5cckÆ&} ÈØd®Í2°ˆ•T±=WM,‰| ÆœfC/‹ºÖGæûòÙêúó[åpz{ ØëŸ“<«Ò¨ˆK "¥PJ1'2&‰50cËÀLÏåF,÷ÃðtëP ÏäË) &QSœ˜I¿Ðê9CÅ¡¡ävêíŸd~Ž@¯z›úÂî¯"p³L©éŒJ§SÜ(œnmËt¬ÛÚ2od­Æ{V09Þø+æz.¥ã™‚1ÁÉ€ýr —F¼ô„á }ƒr“3Ùª×~¨ùq8½+èdB?ÓUeU FM¥þ¼Jq)¥Š(pÒ`)ë¶AY[±;×탳°úæølu¬äü£ûÁ8Ž#—@;éÕóD/‹xIè"±†‚.( gW@+aÑÛ»®-¿ŽG€#Ð+"€Í¹Z¸(ùWZ@e”©ôԟŨ¨Â ” Q6p˜4Ķî’m¬¡ÙwÈÕ7׉Xôïê‘¶#H³ðÌÄ0`žèE¥/"^ º(a¨²…¤Ñ@K(fSVL{{ÅEæ7ÁàpzrÐ¥T‘–8¡Ø‡¾%¥Pá Ü U$£ ÔŸTf9ŠBÒ ¢t|xcbÒ¶¡ÙÆ–½M®íÚêgG¬´äú+=R,õtó€f’if003—h —„X"^6è¢Z—r)ÜZÙ¼ªÔß™ÈV=ùÃÎçÎàôÌ€2”ts ʉé @ÒS«b*  ¥D)p²`ixÎöá9;ÜkDÎŽ9ýòl ˆ…t?GK3‰dŠ9ŒÐ‹Õ]TîÒ(´ž*T¸#¨åuÁ+K|°Ò€±/ÿp8Ž@×F@˜Sä'/¨6ìþ4^eèÔ…öO#U$a Qíõ‚NIFEå(J9!JG¦9wÚ×Α9;Gæê«)ϯ¿ÿ4_‚ýÎ#èxfÃ0z™Ü˺l”Ëž*T%. ·¤Íü’Ú” E¾ÊÔDÎvíç•Îà\‚ÀßayÉsªØmáK¦¼Ja•–ýS@E©?'PIl@EÉ=Q89iר\÷Ú}Y.VsȉXžÆ?êH¦!2ô23‡T÷r@)5 …¡¤\z‰KÇ-².D 1ýãNV§Œ)H. &° Ô%øµâ·Ìàtf0®C{¯¯ È‘TV\éõ*‹Wya•Q£2%ýˆNQjÎHÜ™(¥C”‚Â$¹ò°ö`]î\nÄr>F>W.q(φ)ÓÑ‹j`$â œ¡]öl¡A¹"ã–œ{"f`L—29¯T(¹(…‘«3?À|,ŽG ÷Gæ­ÙI×–û—׈ýT Bµ’èVQÉÊ–´'•žÂ Ur—·•I§!J¹ ÊN{/ÏÛ;ÚZûFçÉ¢Õ’ïäXæŸÄì'â :Ú¹0Ì^”<$âå„.;åRU®¸eéà‰l‰)'rPrMʲêÀMþa¹I!îGîýß3~‡ŽÀyD3æûe&N/ñ-­,« `uP+= H^†Ð«¬2•"U:£2J$èì(eA”Â'–Æ„ö íw¬±¡ýcCär Vº/ÿˆ¿Š¥= ËÀ9Ɇ™Fge¢—QsC—E¹L†nÉú–¦'4Œ µ$¡A¶yÄIU`v™¯-;)‡û‘Ïã#ÍOåpz[`Œ×ž8¥(yq•ßÀ*I­\µ’sUnC(몭JSUذÊQ£r%úT–PJA”BÂ$cË?0.ÿ kõ/è—ˆåx ž%–yÉL “f¢åÝÐec]Z¶ÐLÚT…ß2qË!&4*[&ÙR µ¸QÿÕ%¾þ™‰ÜÜÛ¾yü~8˜#àKˆ«IM¸"?iA…;#nêíÔ*ÅSa¡Ò€Ñ±JÓSˆ‚–ú#0€Jbƒ…Rò§ñù‡\ëð„|¹ ±Šãâªãâãâ€Xô'÷SŽ·Ï†aò<ÐK+}ë"è5j]2[hU¹ŒT¡·d —Ñz,û·TÓ1 D¦9ÈFe Bƒl‰«³¨Ò¿°Â7­0¹_z<‰ù3Îäpzxp§^LJš[î[XéÃVèWΪ•Y²r¥‰WI Æ«”¤BVª¤Ê ¨¬\ŸB)ƒiàD˜Dë.¬+œëÐØüqÉWÅÅÝ(×µqqCã÷]–g{¤yóP˜) SFôN¢—F¼œ¬KâºT•Kª3ßÒò„JOHý[”$4Í2Ì$¡Zµ ´ ´”ûæ—%OÎOªOKH&óG€#Àè}€­4?*'ñÆÒäùå¾€+‘qZB™Àê€YÄB­”º!XW"À0X¥H¥þLFeåèÌŸâC>™àt䊂#Õ*<:ÑXû/ ­«ÎMŠ'¬Ò×Mñq« »çЃˆeÁB2 Æ ³ÐKž›'t©„¡ƒrEÁ-e™A>On²eÊIŽaËJ¦%AË7¯4yNiòø¼Äê`è2ÿp8˜Súã‡e%\W”4·4y^Y2ö;ìz&µ2 W¨ZIM W$^W úÂì¶5W™"@ÕP¥´&V2tY ò*“K9(”‰.™&YëØ¤B±&2äw•û_–¤'ÝÞ” ÌíC0&1ÌÄEý"¶GÄË€®Ñ!«Öe§\*UH¸¥ò„ÔÂ¥\3¨y‹’„Šlé¶„TÙÒ5„HÛL«RÜpà¶W×tNIÒ EI£s*Râ¹ÔÕ㿱ü8—fB¾øA ×$ÝTœ„MÍ ®ì…«p™@Ói‰¬+œi@`Õ³ÿ×Ì’N]¯T)RE;¾Å¨@%1ƒPJ‡('¬ãb¿²½½_æ¢Ô$£ò\êaó| «ÓÉÇ‘ÇKa˜"avô"Úg@—ɺ¨Ö袖/] aËJ]†ÐÚ‹[–?¡“lyeµ²˜1Ò¹ÐÂU¾±(qVA∬øR<[i\šßz~×줸þiñÓC‰7&ÞXdÁŠvvåWA§~lM“uC ß = h¶«z•«„êOÕØíû„ª"Eé>…RD |º›Ö”¢Ãcó7V¥Î÷'ÎIˆŸ“(Ö\ZI—| =OÄïkJRöϥÊ—PæB/JñRÐeP.ɺ·H^·Œâ–Ùtl-Ó Þ)ÇPî²ËX×b ©ë Z×&^Wpu(aHz|¡/Žó…=ì ̧˸"‘×/?9'av~Âõ탫ș@E­L¸’ - ¨é¼Ê†Uv X”r•A¤luÏ”"±¦ïž·¦8enrü¼¤øyÉ Xó}Úò',0ךBÿÖº4õ¿óý¶GÒsç% „[‘ãÛ1 ûîÉ…x À¡`6îEÕ/ º$å’¬Ëè÷òÂ-Uߢ.£õØeµ®˜Å%+[žB¥!T]ÆÐB‚WOÓ"ÐÂ'aV^´œø©ñ¡¤8žwr)ìü9Ý:© qõ)q²â¯Í‹Ÿj\Ag{ö°…+¯L °”ÔÊh6=eÉÊèXmURX«hß·1*3ݧˆ¡Ô½S‹±îž\´£5ky¶Oà“‚¥@âB¬k- &bÝÙ’ùþÖº¿¾>üïoøìHÓ±1yKÒ’èOÖƒ‰ ÄG`†ÇÜÖqtB!^Ž^šÐ‹¸—ž6TÐå¤\*Uèâ[· ¼(n™IBÜГlAŽ!—å%á»'h‘êÝ´òf‡Zñ׿Æ_?93®%—“Ô­?Ï|rŽ@/Œ@ Z©qc2âffÇ]“#¶$‚«ëbcWž²@›ë’G&ЃZéò dÃ, ½X%³2¨H•̼©º¥ût”:qU1ÖÑ ·Ö§N0„O„=‹R‹•´8- ÅZž™|bbÁïnùÛ#ëwµ½±lMA€‰§ˆ'¦&á :’‰—HIÜP™zð²!%X]Xè²S.gªP¯o™º êß‚ÞF¶Ü•-š]bÓZe­A Ù`ä„Aµ¯“ …»™kh‰O ̸֤~)q™¬Œï…¿%Ž@wŠ€?>®ÊwYº±õ`÷Á½³€«<®•ÔÂ]» §b×áJµ+ 4ÑLá è¢V«ˆZéõ*3ha•ÐSH 2°ÊHý¹ XupTh}E*#ü—ð‰ ’¿¥XXÉË2’×—¦<9¿ü÷gýÛkÃ#¬?½0ôõõ5wôÍX–™Œ'Ч§‹Ci0fØj¨áå´p&zÙX—ÀZR*…¡­ÄešB)]¨§r{¢¦c7Ù²2„B›îz·ú‹u¦´º&dÄ5¤Ä¥3tu§ï8Ÿ G ÇG s~ýq#ÒâfÈF-Ü5K¸ŠÇ}4ê¨^ †A®È$àJiL )$“u;µ2±j´MhãU¦¤X%Ä~¦†BåýˆQÝ7­øÄÔâ]m9«óJ)ˆ"|Êky–X+²“wöÏz{sÝŸ_ö¯¯ }}w¿ccB+sŒãÐ1|†™$ '°<;ùަÌã éôœ¬KËŠT¡©Î°ø‰2¨ûXe8È–%#”ÚwQÖ±¬¥©Þ# 1tÐw0-ýƒ4.#®.d‘Fß*ø p.^Ð[Sê‹–7ÝT´×®êÁ6$àJª-"ÃÚ„Ã%É'Ð ®Âe …¨•£dejÅ*#(±ŠdÄ`¨î›Vr÷¤"¨Õ—e%\J²(‰QÙ€(T+s|«BþWär¨é//ëðúŃ»®t]IÊÊ\qXø $³¡WzÒæê´ÃcònQ­Ë(t…Ç-è2T —Ù²W¶ Ç“!ttk -FTÐ*Mž[’,UFzP¨0LÐÒ±Êñûèô¸j|&ù‡#ÀàÄlEÉqƒSã¦eÙ•ƒ]\a"¸"-»ê»B‚HkBvO¸ ±Àe c@‚+'µšu%X÷Ä*MLabUÉÉi%‡GçoªJ¥ìœL÷ÙP PY•'Ö¦ÊàsÊ~ujàŸŸÚ)ëŸÎ ~õæêíý2Våùq|¼^N˜^"(3‡¨~ÝR’²ghJœ”K 4”:ÚRxj=&¿]o²å‘!Ô4„fYËSõîN}Zäˆá Z¹ñ(|F-ü T~Tz\¥?Ž]ãcúÆòƒ8—` >.HŽkK»*ÐR[è­WHa“Ržº¿­ÛÉƨd…ŸÅmm–„Ý®ŒQ FÕÊ# ¨´¦Ä 2X"€“‹¶5g"'H•PJ?n)ôß3!ÿ[{úþóÓC.Àúñ=ýÏÌ*ÙPЕº_“·Ô¥ß5¶À·džPè2L=!á–Ù’2B]ûN®N@ É[›Ý»Wzôîd˜KNV“–—t02ߢ¿"/=4-®ÄÇV¼‹q.ÑÀœ¢9‡.™X¶ ]m‚%ÔBËž “†ÚBÀŒ-„Å­O•åèè»ò„+ËÓÖCgaÏšâu‚+C¶®äÒH‰êU¬B55¡%É6Re2*TP¢oî“zöú²ŸžhýÓC.ðúÍ™¶—WmoÊXStݬAÈŸQî2³…kKSö˃`Äfèõ-CLXhúe>OdN(*[n9†™!$K'ò!t0-7h9$ïºË»2h)½{dFäO#2ÕƒRã “ÙJãݵøm_r@Lß”¸‰íªXÔ––="\AÈnÌ¸ÒØ• ®”„Ý^¸"‘…å è¨ZIj¥°Ji+„ðª’=Cro)ˆö)IP(ûgÖ¨ F º¥0€à—WUÿætÛ—¾ˆë‹³ƒßßÚpä²<ä- º,ÖEJ ÊÊ*×Ê<ŸJ*]†UÜr“-SFHž„dìdhUY‹´^ å®ié eæÚ;‹=TÑ ZÐkjVÜ€`\~2[i\r;¿áK%ȨŒ—=¿^¢Y8¼ÚB· Ôg3ÚM˜4©¹Ìð„+’°“C © ´eUG0™ 5 –¤t™Lfa'¬‚öOb•”üåù@ªÀ`€àÙ±±¡·5üþÑA¿¬­O7ŸšY¼±"4¦Ú(—·–d$m©Eª0ßjá2-3dç–A¶ÈÞ‰d„о› e4lÙºµb-ÃÞƒ0Ì­8AË.4 Z ±´"|b¯Ìê.>k×®=ÔÓ~ŠŠŠ¢n&Lˆú¶&Ožù8mmmQÒÝ0{öì¨Áé­=ê¿@hoЫûÊiÅä©¶@§L˜hì=ÄÐæÌûvÁ•©³ð*\Y™@;µRi@#( &4^eÃ*AªŠ›úÏ\[òù]-¿{dP·]??9àÙE•ÛÓ-Êe 4t¾`F#×ÚÒàÞa¹²e¯l92„¢IÀ¦ÅhÓÒlœê‚(X´p¿B e¸åÒÁN(hyBW7éAþéOúÿõ´ŸÖÖÖ¨[Ï®]»¢¾-€Mäã,\¸0êAºÛΞ=58½õ¢G}ãèP^uŒ`Ùº¯lå+©¶(³'Ô4a£SXÂî¾\¡|eô]…gWfƒ°®P¸rh• ÐN­°Mï’³¦(¯ U(må ^E¤ª(°£)ãù¥}~vrr€=býúá¶·6Ö‘«§ IO¸…„'àYX@¡9G¤ O’.…D¶L› ªlr ½¬eZcL æ¹0! ô´>-´êƒ(XêïB:èRa¸ ZûLÒ³ mí&»½uóbÄŠ°;÷Ö‹~)êË4¦t±ÜÝWN+&Mma¶^9á õ½MØ WÆ8+iˆqõЯ#HJaqL¬BiÇðU’ÍU$X×s€„UwÊ{wsݯØC×wv÷}`jÑú²£ÄE|K6rQ²°ßMS€íÍ5b:Ž©²åÌšƒ"u-†Í#Ђ[®gg±§ ÃVÐÊ;ßÜ <úÉOoݼ±±.ÚW¬8¹#ˆe˜Ú­ÙÝC=ÄrÞ•%ìpµ0„ì¦[ '\‘Ω ´gÎߨ'»3ÜÐåmOæõ*ä!hZñw÷ôûå{ÁúáÑþçæ”c¬‰…[ÒAƒD‚lÉ$!°áLzbá#Yp»@Ë¡´w_‰òªëÔ,,ÊW.µ…Þz¥[Ü®¦]͸2††˜*vv5®¯…·5f ë…I¾Ø…±kU+©DÉŠ¨UÿМ××ÔüôÞ?;ÑË×7no¸wBD†k†N¶R“ˆƒÚ1Fr¾OŒ59pyˆÜßeY+&Ðr4s åh½³XHëRZÊ*W´T‡Vgå»ÏÔF,F,F¬Î¿}©Í ‰ ]¦;»MèÌšÝWžå+Ã6P¶^iŽìš “áÅn“Zx%Efÿeyëʃª›0x^ì¼ z&PT­L…ÅÚâÀ} ?ÚÖø“{Z/©õýýMÌ*E4p‹ÈµméB„nNBüñq«`@58Ç-¡Å ÂLË-á=h¸¼ËyZf“–TaH/ ]…¡ ZÆDÍrð|rƒðÂè&² |Q±±±:±šb_xé…@9B>Ðð¶ÐÊWº8P½·<¥¿­Õw%…ìžpµ£-{ežÿƸ8,ì¶&\™™@i¶$­r}[ªÓ›]úý}M?:Öÿ’]?¸«å¹Å•w6gB‘A•-!#”e-¤O1ø©Ô9‰ñO€Ùm}3È=Ä ZŽæbÍÆÉf‡¡¤ƒ-§Ø=lnÓ¨wQú0S´ûü0b1b1buþ÷DbÜ”àB¹³Ûô^ù@Õ,ì¡¶°w +ÏÀÈpuhlþ­ H&ÑÞJp5O²+*\Iýº‘ ÜÕšõÂҪϷüðH^·7ÔÁ8cužß’cH !•µZ7ÅÅÿ®¯LÝ;*Ï-rr²KÞmÞƒš‡“Ra¨‚–ÞV,;´üárƒÊ$WU˧~˜Ýçç¹çžhõ¬Ÿúúú¨\³fÍo£ýlܸ1òq¦OŸÞ³"ƒ³Ý³gOÔàôÖ‹õ_¸ Ý2–½€–éè&bØ[8òŽfaø²Û'4ZãíŽìªv…d”Rî‘· À$ƒXp…,\¡Ž¸‚JVÇ.½³±XÅË3ïèûàÔ¢uÅCCHe-h!È0¤ ··e‹ô i?èh.6@Ëîá$Tö‚ÖêÆˆ¹AkI"fâ®(–ZŽnÿ…ûâð+q8!ÈûÇ4OÄnÈd . wv5ûJéE>ÐÝ,l(Œ1¨‚ ­„-Oײ«÷WÛd­@м÷·Ø•ÐYÄ[:‹ô$LD<5­ø[;ú}v°…WÔ|oó¹›*n«Me- ´D]ÐíÅéI[3ö /GÁ´tÐòÔ» †½ åìÐ “< Üœù‡#Àèå@Óedše,Á…éÎîÔz祷…³|å€+š# ƒ»Ëó6×§ë @…U"hƒ«¤ÛëÓŸœSñ½½MŸìoæÕÞ¼²J¨áѰ%ºµ$Óò-„Z[Ü5§¸À”`Ä@³ªYvÑû÷*~‡81¿­—ž Ž`‘A{TÁj4ܘ 9»­YøŽ¶¬›KSbÙU;úe>»°òãí}y]°¼±¦öà°\ä ÃÝC¨GªpyÈ¿¥9Ã*hyç­žbLŸ eI0ÍBe4 mé$ÁJ÷ØÌsYvÁ»Gà‰Z/=Ë"Xº… "X†A»eÈD‚ ew+ú…Ãä7÷K_–ëskÒÜ;㢔ÄÃÃóÞ\SûÍ;úòº(xsÃÉI…hˆŠ[xÀ"ˆ6kRA³ÔÀb‡nÐá7hY7UŠY$ÂCWºÇL³’ºÝÅ%²kðÛä\¬ õÒX‘V¹“` ÁE5­‘†;»©Ä†lmuêÂÔÄXö¾›Cþ&½·©áÃÛyu‡<>»lKUZ,×n®/aUI`K«˜(M¹A£§Ø4ÉuH0¬‘¢YXvq±ö~]ŽÀ…Z/݈Õ‚e2ÉáÂ-ÁÛVÿŒ•Źɶ`ϽÄkkmú¹ë+¾±¥‘W7ŒÀKK«÷̆ÏHTè‚ßãÒ\ßúÆ4€õ{H0,[wCéÞš5¸ûÉ.àWìîóã÷wN¡¯°°0ê›***м‰åääD=È…|@iii§ìº½õ¢wJp:ó h½t –»‹$‚¢‚åI°\ŠvA°Èîv@æ’œäX€ ü‰ûå¼¼¬úýM ¼ºyÞº¥îî1ùp{ŠŠ[xÀ´Äuiª=Ë.Á0æ[4K(ÝÕ,K4虾® tæ×¡SŽÕÝ|:å}õʉŽ=ôP§§·^ôN Ng­—hÀÔ÷}ªˆ‡DPU°¤¢%tQÁRË%¸À½vä} m@÷Ž+@±êÝ õ¼zPÞY_zFÉÆò`TÜZ[Ÿ*rƒ–u“1§Ø®t÷ Y±ôf…’;óëÐ)Çê­›#V„Go½èòè䃠S!–î"ˆFNl1,‡¢æ‰ k~JØÂÕºâ”G¯.}g]=¯gæVnoÌŒ€[›Z„ãI¬4Ë£š‰fùºŸì¢·n^ŒXŒXŒ=;05Ä&°°™\D”¢3TJ…àB)Ú•!ÓâLËmݱ©¡r׈¼7VÕ¾µ¦ŽWÏÀƒWÆ8bÝ”‡ƒ%Á0\0b¡YÂ`Å¢Yy nC÷I™ûÈwí³±"ÄwáÂ…Ýjg»öËÐGG&!–5 žL’`¡3†Æ6º{°tO&"X4KÍ&ƒvtêDÎÁDü¡+‹ß\]Ç«ÇEàÉë+Ö—DÉ Îó'@}Њ™f9-0l†îö¹YCÓºâ q¾ÇdÄbĺè¨ÜYÅËóý2tÅóÑ€© NnÁ*\‰” m$“ 8 HŽÆÏÈ,"Xäp±º4%jØP¾s:’’’¢¾-<&2b%&&F=È…|@ÔŽ‘Ã÷Ö‹ãÛ¿ÐËOŽ#Í&é¡fVs¡æ`5IÔîA° ¹ ‚54{‡œÙˆ™ú.›LÊøÖö~°v}eEõmÕ­N¬¤xÜ¿ã.~qZÒÒŒäÙÉ«ò|k ‡‡å=sSŸççUñºÐ˜[ub\áú²\ î!–¤©iÅñt·$á×—´µW×ôÌÕ%ĺ­†1ïqI³Ô„bå4Ø`Ò,cn–£›XssÏO ý«1åBMøõ8n´aª6,»¨=’æÂµ›6írʰœ*24 ˆµsd.,½õ]ìÖê´ïììš…[ònï ›×³³ÊW‡ü’`%.JMĽ<€à…\SX[ØRzß„ÂgçôáuÁ"pzZÉöÆŒu%)¸iXï_™ëÃEYšš•$rƒ¾„%©Ib´¦t+þæí}q5¿½£ß=ãòˆµ}¨H;h–î4H4 IfCQ#ƒ¨fA›jLzÔôb6qž1›¸¸[Ê.ºÅ÷™O‚#Ðë#peN<,OŸ #%As¡lÚ Q»˜2, K –²1ZÀ!LÎU4 ·ç߸µñýõ'Æ,—wñ¸—_‘íÃ}ýÍþ[ŠëJS6”7õIÝÕ’yæªÒgnèëK#ðø5å‡än®JÝX\_š‚;†5~\5ƒfÉÜྶœ7V×~°¹áÃ[?Ú*fÁ€`ášÂR¿Ö°?Þ1"÷.D³hBñæ–¡;8:î{¬ñÄšYÄ’C³ vKÙE¯ß(ø rºEFdÄ Ÿ wJÐn$èÐ\ès°¼VήQ¹7—ØZ²À¥¾·§é;´0Ÿ·ç¸I‡O9îÖ__Us`pò¸£«0°¶$Y©M•AЬÛjÓnoHÇĬ³W—?u]%¯NÀ¹Y÷Œ)ÀâÛêÒðM}‚¸WÍÂ}ÃÍù~LÉÂ¥¹£!ã¹}ÞÛЀJ$n5>”ù@\G¬ïìlBAKG¬…iI¸kÕv {Ôçf‘7®KáL êú Ö´œÎ©Ít‹ïŸG€#ÐÞ4bEH ’æî¥æäF›æÂµ»ÖîËr×»Z² üîî&+7¸µ/nÕqÃþÞÆ†w××?;¯4D°p;ýÍ}Ro­IÛZ—vGcúö¦Œý³NŒ/|âÚ ì°¼:+N.ÞÛ–½£)c[ßô­õé·Ö¦4«ŒhVWáé »^Ü^|°EŒ.Ã¥D>9^\M\Ó5ù±0º$ˆeÐ,¡¿4KÍÍ’ÝÄZb0(³Tb°2lbð² F¬ö~Åùñ^"_¼wJÐåsVs¡‰ÚIs‚µû²¼[ûf8j¯ß\šå‘ÜÔ€›wì‰oßR÷ÈÌRܰ‹| F°¶õËØÑœ¹³5s÷À,ÌtèÊ’'®©àuž83­ôȨ¼=mY»Z³îlÉÜÞ/w¸?¸UЬT\‚•Á ‘|{m=n)pcÛ ,\‚ug?f\Ó~›Êfuqˆ…ORÄŠf2w/ý…ps-1؜ʈՋv~+öF %!.–” +¬æbˆ©¹, ÖžËó¶ t¶d==·âûûš¿'i²IJ‚ÛvܼcO|gm=œaáWtß…H ‚UŸ~G_"X™»d픽hÎÁá9ÇÇ䣸uvf9¯DàÑée'&‘‹`îœû„wG3hV°ˆü–ªÔ»Fæ½´¸êÍ›ëp› ‘ C°>ÞÖè¸5Y‡êã(X"1‹þÂÖ˜^1J(ëœ!…íý–ðã9n™ùºõ­M%© +¼æ)Á½—çí‘ëØÈNM+þdó÷÷6!ä`¨ÜàÛ·Ôc—„³;,ìŽ^Š{0ð°}ƒ³ Ë942÷®ËòŽŽ œXøÈUeN+ç{<>6täò¼Ã#sýû†dïiËÞ5@Ò¬&A³ö Ê~ê†JÜ7À¢7ž‹ Ë XoÞRë¸Ð›ÓX"1èÖ_؃–þÂlÌ2ÇÛu£GÅrÑ£¾ñ ü€–––nÁœJY ^Œ!/Á0fíÆðFLÃjIÎL®” ®¹@Jpߘб¡e9¶–,Èÿ>?ÜòéAƒfyH0 4%”Äî ÐzyIõóó«œR,ò£rÁÀî™bRÁÉ)…\UôÐŒ¢‡¯.>=S€ÖÓxi˜\zfFÉékŠOÍ(~pZÑýS ñÍ"šu⊂gæôy 6ÄK…}>np» çŠv.v6¡‰;O÷7£¦¨#f9â~w-Ír4f…U J+wW+±ò˜Þ­+'ÜžhûvÁfŸ={¶Û×Å}J,½;ø êçÐÚÚzqƒv¾¯ž–ï˜ßèôl z;3 Ê´û\ØR‚Æåß\d=g$ÿ஖ϵ 7hJ0šH‚AíY†¹AI³PG4ky vRì§/.¬~úÆÊû'Š| ÖDƒ`=8½èÔÌâÓ×–<:»ôì ¥^SzjRÉCWð*93½ô±Ê½®ô̵%@ô‡¦=pUáÉ+ O˜4 ¨ÿÄlaáãÝ——Ôèù@äf#+ÚQÁÂýÇîV›Ä&¸_Á] ËÒ_ÈVbcÜð‰Aá1XîÃ6ÜKÉÄ`bŸ”nŒeóbÄŠ°}3b]lëñˆÄ›]¤±4];tt³vÆáp)Á±¡ƒãò×÷±MÉ‚‹àç‡Z@³ÌÜ`D @ËF³j°«bo…ÉÞã³ÊQ!‚Þ‚ñȬ’Ç®/}ü¦²ssËŸœWñÈŒ²Æ•\²ëôÔÒs7!åÈc7”>24«¸.hrƒ“ î›TðèÕ¥ÏÍ­za~nÄœ‹`E\¢÷¸óÀýÇæJÛU^š•Œ„0 ™1&­ÄÒcÐsøHFºuãF¬'–ùXŒXŒX±~¿'ä%‡5« }~£¡k§”`«˜-"Æ ›Ãž)A Ömö–, ÖGÛpWà–’`PnÐá‚A¹AC‚ÜàòZì§ØU±·b‡Å>ûìM}À¥D>pºÈ‚C€Iœ½±ì‰9eOÎ/zaųK*Ÿ^P‰ûþ1Å—ÔzhbÉ“s*ž[RùÌ¢Š§æ—¿¿± X~f–¤Y3@³Š ¯xú†Êçæ£áˆÙ.‚¥+ÚIpáhF>õHÜyàþÞZ6;®ÂÀþ±¡˜ƒ-éëšÓì­ÄjÆ£Sã~}aR·Î Æ6ƒ˜9s¬ K^¥7p¬™‰Ž"–‡®½Ù(b¹§a¹U‚H Ÿ¿}`¶­Â÷úšší/rƒí•` 7¸„hV5öY8Ã>scŸ'¯«|ôš2A°f›k^ùS *žY\ñüÒÊWôyyU”lN(¾ïò¢^¿î[|îúò—VU½¸²ÏóËú<»¸È šÉÒÙ¥Hœž¹ºôÜ슧oèÈw,Ü(E; .-ú¢]ä4 Æ|¨y^’­}x]e*J˜*1¡•ØcÆ£Cãnºâ¢”59ÔÝ…í̱˜c]t4ŠåzbUæ—ù`›9°÷[‡® ˆåôÔ‡÷I];kïÈ<±0¨âéy?:Öÿ‡Gú¹A©to—C€–I³°óÂdô›]¦¸Æ Ëû¼´²ê•›«^[[ýúºš§n¬89ºøÄ¨¢Þº`ºøÚšê×ÖÖ¼²¦8ýŠ>Ï-•4kA…A³®+E6v…1.D°^” ·¨`½›¢Š`;†fmiHbQbÖ'­Ämbby Bȳ.¶RÖ¬nN±â±±bŒ‹þ˜Þ€X™R…‰Ã@¬XŠXR×Nóu³vj&• ëð„€–ÍÒ;1þÔôâo5h–’` =kgû$Øm±ç‚f=}}哳+Ï][íøÜœò§T€[€a‚µºêÕ[\½¹±öí͵on¨Å¶~ÏðÂ^¶ž\úÚÍ5ïl©{kcíëk^»¥8 ´4 ©QÐ,$g—ÃzêúJ UæIpQmS´CpáR´lz´+E;,$xß\[ë˜M¼­5 Wˆ…{(Vb›Ç 1ãQ ‰¥”U›Êˆk’¿sÇZÁñŒå6å¢C”ãzb¡¢=Ëå×nëÄŠE×.  XÄ:2±@Íu¤áÇF‡~rw«f™.Â!WÎ{¤A$– Fx R[Àš[X˜ìÁ¯i1lÓ‚`­Áœã 5ooª}÷Öº÷·Öc[Ûëj $<>´ ¬“£‹^ZVýí ïß^7H¨ „~UÒ,`6hÖ“7V§„Rù@t  (AÑN‚–G;YšŠv$up¸\ù™•påׇJïžÄ‰ÁX4î®Rl—¡q‡ø\ŒwQ`ÿ æb˜[÷þ‰eóâ:×±.:€õÄÂVpeA2ôÄÐha³@OŒ’]Xf‹:±0 ݘ8lÎo$/A²º "Ö]±–d$ͦ†­ fK?½·õÇ´~€Ü §ãkI, ¤¹ šuuÅÙåÍ(Cî‘8˜øÇ{·ÕpGý‡;¾¹³ñ[{úbÖ;ÊZÇôÐu÷°ÂçæõùxgãÇ»?ÚÑðÁ¶à± Y›$ÍZ+hÖs‹úœ½¦yüê pÐ0«ýŠöýBÑŽ¤...âé«K0æqN¢LLëàØüƒã%bw#1èéŠë(e9<‚ñ Ä*ˆ•ØÝ+nÑ¢E[£ýääätoØõ8»Q£FE{[[Gù}577G=ÈÔ©S{\pb¹èQßø~@~~~‹³Ç ÍIÄ--!–%»Û‰¥MvX]È” @¬+ ŽN,\]`´daSÃÖ¶©2õg'üäžV+7x°]¨.hÏòtÁ0%¨Á( ’]Ø‘Á$ŸYþØôòG¯*±xqYÕ› X›%Áº½\ä£;?ÞÝøí½}¿w ßw÷÷{n~ŸcC Ž´å÷¬…·¬Â[øÎ¾~ßÚÝüáöàñ{·Išµ±ö•ÕÕW x§›`¿¢Ú¤v|¼ÿÝãòçûTbpnreƒq×¢kÜ®¸^¥,Ç€GÝ`pZaRoøŽñ{àp:+µi NÙ…4g²z‡¥®Ý’]D+b ÄšT¸¾"ˆûnJ bkÃlÀŸß7à§÷pæÃH0DnÐÛCêí •„-,Löàq7ÖÕ¾·Õ"XßÞÓXõýƒMŸÞÕôùÑæïîë8< ¿G¬'”|㎆Ï5z¤ùû‡šðF€¾‚fÝÙ€„§ Y›ëž™[yfJ)Þ>‚ ,üPÁê,E;ò X¸ˆ˜­…Q#ó’âq‰q¡§'ằ:XÊj®²O¡>â‘9Ý](ØY_C>G€#Sr|ñž² Ç„‘ÈXŽ"ëÖ1% Û65lm‹‚‰?<Úò3€–¤Y?"¥{, ´g™.¯i.¨Ç8%WW<6nîeg¦”ž\ a¸(Éwö ‚õÉá¦ÏŽ4ÿàxËîíÿ“ûúsGã㊵„ºíBðíµu?¹¯õÇ÷öÿáÝ-ÀÚOîjúÞAI³ö4ë•Õg®8}p% 'Ö“³ÄàæNT´›«\a`r¡JY+C~ Öá ±Â–²´J|A]YÖHb{qc÷ögŠé Æâp:1°Å^ ¤í¢ˆ…Ò÷Ê:»®KvqÇo¿v½ˆulRᎢ%‹ŠXØÚ§&}¼£ïÏO Ü` ôimí«ºA)ÁÀîL ì×DЂÍà©+JNO)}muA°`5ƒ©üðž–Ÿèÿ³û[þà€_œøöú:$ 4åu«u¨ƒW~v²õ À©_tO °ˆ šôÍzgS˜â©‰%€g¼e¼q=h)Úç ÇóW´+‚…’äªaJ¢*e­-ˆU`/e¹|Ü#Ž$v‹/òýݾŠÕ‰_E>G€#K¦û"Ë.½Ã˜‰.{‡Žz'±ŽM.Ü7B´dQ [Ûâ´$è¡qÿ@™l·^ b‰tÈu»` tƒPºK håZ°„c샭õ‚` |å§'[þ@ë/O øõé¿}´íW§¾¸¨ú@Sh_ß¼î°@|Oÿß>Ööë3q’@Vœ0P–h›ßÚÕ÷é›*/Lñ6ñfe>° ODÂ+ÚkœŠöuNöŠv0cðc°d”²–¤%7«RÖæºtÈmŒR–gW–Ã`°5C‰/À±…¶ÄB. ñErwW¶ÇòõâÇp8‘yI6ÙEƒ0ÀE¯ ¬t6€cÉ" -\»ìÂìÄ’² XÖN.¼k\ M¦„XØàžYXùË*šekÏ’ Rü-}H±S‚a:äJ ’`PnÐ`´L † Y“KÁ?PBêïä˜bø”ï@˜ ø X ¸Ë¯ø›GÚ~w¶í‹'ýÓSƒvr8Êކ܋¸î»¬]ºxjð—çýþì  )0UЬ$ͺ·?@÷Õ5À*¼©‡&”œš(òŸn‚Õ ŠvXJv¥h§ Š‘ ËKÒb!ßKâ‹m-Y@,ÈDÝâ Çä´ôé}ÄÈ †›îxMIr§~Ìù`Ž@¯ˆ@Cz¢ŽX‘Ü.ÈwxŽš‰åèFjˆu|ráÝSŠ@°°Q Üé™Å¿zh I³\ŒýÞ.Q$ ³ArÁP ‘ÔhöwX¡ ÿ}}U ÈÊÏ Ö™à1¿|Ð?=9øOùê¹!~a(ªk÷Ž*Ú]—{סÖ|L÷øêyœÆÐ~fN 8ú»ÇÚ~óÈ@ « Y÷·~p[JtpñÀq¬v)ÚÉBðÝ õïoj€w¾—…`“r¸ E;šÀQŒ|s}íÒŒ¤Å©‰²”ž»‡å‚[G_ ÉFkî{¢:_\ptˆ…‚½bá7ÁèÜ„üñ±\s‡–í^ny ±Tï°D¬¢{¦¡v…ílA aQjâÒô$Ì ùõ©¶_>Ð $È š jσHhH±ç —ƒr#I0Z‚f•‚‹€‘ÀÍX°kB+1œyuZ,ð˜/ŸNóÇg‡üéù¡yiØ¿¾2ü__؃M¡]Õ9`í®ÍÁùêÙ¡ÿúêð¿¼<ìO/ ÅÉüáiЬÁ@S¢YŸl~üšrœ<ÞÞˆ"Xxƒ X1*Ú!]‘C°¢x´“Ã…òh×(C‚%?»¨riF2®ïBS|qpLˆ‹ÄKÜ#rIƽ8:!X»Óù¢!è˜GÜ”ÉBÁÎý¢óÑ8½"hÒ$Ä 7d$’PPë&· È.Ž_) Åy%»À-ùžY¿y¸ 4KÏ º$ÚbO †[ó­A$Â!7¢äYÅ'.+ºwdáÝà Ÿ¸¶üÇZ¾ œÌæÏ/ý——‡ýÛkÃÿö房¿=òÏ/ ‡ýîÎêœ;ûdwÝ:}eÙïüwFþû›#þúúð}ePØ)hÖS‚fýâÁ°¨À9ß;²9C¬$Á‚®D«`…U´“à"ªG;•a\R²HÌbN´n!¨ .p«Xæ/ËLFm’ÄÂÓdR!îT ñE;å‚ἚŠS¸ŠÕ+ö~NÀ¬r?!–‡?“6dD ‘n—ÙÝ.®b*ÄZWb‘ìbYFòæªÔßžiÍú• Y†ƒÚ³„ †° )ƒHà‚ë¦-È\¹Û³Ú+Á eÒ¬{FB8~|Xìõ~ûH› X/H‚õêð¿¾1âßßùÇ;£þñîe¿=3äÔIJíÙ¾Ž *øìЀ¼{9^¯ŒüÛ#€—@M$'ÿøœH "OR|bk)±IùÀSRpá©hxÇâÑþþÆòd‚?BíéÑî&X¸á¸g|> µIB,-°jXR|Y.x›.tx5¡% ^M¦ÀÝ+ÿp8wÆ$G–¶ß&ÇbiÒvC(HþLºÛdwƒcM-¾µ.]É.°Á­ÌóÿötÛoN Ðj· µ±ƒ0Þ–CБײ†Ç*Á(5$£‹ÁTÀW`Œ AØ5Ý;ªð·5±þå•a}m8¸Ž‚+ '£ÿñÞ˜O¸k@þ¶²¬NY»ksßYß÷oo7KЬ·ˆf v~~WËÓJ »²_)ýòx#1)Úa!èòhÇ´L÷,"XHÆ‚`9<Úu‚'n5pñopöò¬d_@.ˆ+ V­Kˆ/H.(滼š±f -Ý)$Ä’î‚×—ûø{Êàp¼#Д•ètl2ÆbÙ!»pKÛíþL„X÷N-ÞÑ?ˆX9¾ïšeå=]0.ˆÃÈ +$Tp×À|`ÀŽ·‚`ýÝ X—)¸úÇ{cÿñÞ¸{ÜÛkûÝY•s{IfÇWiæS×Wÿé…Ë¿~oœ<ì´ˆfýþ±A0ª€ƒÐ˜ª,oÁETE;FŠ +½èÀ´LCp! Ö‡‚`õEÑN,Üj ¯{[mšB,(kÖ–¥±À­ÝrAÛØMàîX(e™ˆ5¡€…‚¼Yq8a"P˜’àíÛ!i;„‚@¬½ÃrqNBAlp+s}ßÚÙ÷w Ó #Á0r£K0О%i¹`XŒ¹U¶A$Ê#ŒÜ…hà M»ÐþáÉ!”ÔkÜ×ïÿúý _¿ÅWÏ97»fkqæÖ¢v¯û./ýÕ©‘8ˆ<Ôx  ­w ´Dbðß^)Nf`>pÔA°tÁE*Ú1³ÑKѮ֯j[“ïÇ…šš Ö–Ú4Ü£HÄ2ä‚áÜ1§Lݸ·ÊAYÍéJà®·d Èf¡ ïVŽ@˜ UÓXáš±”´®í-¡ÆbQ3IÛX‡Çä+i;!Ö[ëkA ~{f[‚sUkÞ£Ã!7¼ÓA +CŠ…³ )övÁ€nðŠÑÉ$”î– x820ÿp«°kÂßZSÿo¯´D> >€!Äúúƒ‰_0é—§FÝ;ª4vÐÚß/ôÝ=ƒ¿þ`2žûõû ÐÒiÖ;—wOó=Ë€šÀNE°ºT‚‹‹«h‡à:Ï_?4ð‡Çú¯Êó-ÏNVw4c Äš\è¸#clÊÊAËù6È¥À=bK–È Â~¥<Ȳ Þ­8ð¸¡27R(/ÜíÃŽÑÃÍX4Ë@¬"B¬{§báfˆµ*×UôgÿîQ€VÛ¯¡ŒM‚AÓ³"I0ZRé®9äJŒYÊÃÕže—`ÈÜ `6ŒƒÍ¡ýýòcßÛÓ_ À•I°®ð|ãʯ?˜òí݃÷õ EÆ-è5^_Ýü×·é)±p;ÍúåƒCžX (‰—ùÀN èq{K¬j¾(ŠvÊâª}¼³/ ÖÆ±’Ð’µgH®'b9F;*ÄBM4jq°ûOáÍ„#À¸ˆ˜PäˆeŸ3âpmÛ>lrTÍX@¬û¦•ˆâ¼lƈ•ç{øêâ/ š…Ü !Áh™fƒÎ!Åž.¦sc•`\m "!‡\ìøÊÃ!Á³•;@ ౿oœ/º¢ìW Õ–„«®üúS¾þÆÔ¯¿qÕ_ßžòêÊæíåÙž¸õØÌš~~"&Œ§˜ eÒ¬¯ž»ìÙ9Õð…Â+”ôNæó Ç¥à½ÌÝDÑ.Ö)!œQ^•ç_‘íS-Y‡Fç{ –íèF¶‰X5án ¶–àXsûø/â_š#ÀèhÍIŠŠXÛÂ^¸Û‡ ±V…pFÀÍ8’H@,4ÿÓƒA³~/iVT Æ÷÷6¡›õÛwz )†|€Ì=Ú³æVAÛíá‚! ÎÉlP¹`¸%€ € @²·Î9ÏÜXóÕó£mKÀÏU_8íë§cýá¹IΨÑAëîá%?{pÌ×ΘfÐNÒ¬¿½5þÝõý4‡ö5æ‚ÒØ)—@Í£NÁ…—¢‚vö®V´ƒ`ázáª(¯ ÄBǵdŸTd Ö$&btAÀ‚R5Çb{1¹˜…‚=`ÇàSä\Ì”€Xá,šÚax!Û‡ ±Ö— ±Dbí ]×-I³<$hσH\Œ;ûA~ 6Ì„¨= öB-(ßL †å+\0\ rÈE÷@Ëí‚!$Ð j Ê NöÔçîªÉÙט÷Îú¦¿½¬ I°>4ë£ÿñÑÌÿøèêŸÞ?öøÐ’=õ¡w ûúCüË̯±,вhÖ§R¸§Nz¬óR´/-ï,S†Qç¢KE»zÚ:al¯¢®ÚékJbåø¨‰4×y`Ô/Á°ÃÍñ¶½€òB¶dMĦíÅà\–]\Ì­€_›#Ð"HŒ±pã á2n“±Tûð‰«b¡% ¥‰X> ÖÆÊà??5äŸÎ ¦Ü` Æ·À€¾vÎ!ÅîA$¢=«–$ئ; Á¹Aá‚!$-S‚aЬa0ЂíÅ‘¶ÂO ‘ù=E° ¸ú®ùo^ûõG×üõ™øEüïGWKвѬߎ@Oˆ@EZbç"ÖÝ“ ëÍõ5«ñÏO1$g- †lÏ2‘Ä,ÁxOI00¤X¸`¸$Ð ^_ùäl!Åí•`ЪÊ!šuGiÖíÒùâH[ÑïíF¬/žš|jrƒGâñxÖU’`…\XŠvXÚ=ÚÏ\)+?:-ŠG; .àÉÁP<œ…`ŒíJÑ*Œt.ª?º»ÅX»çt.b Ïc¦ž°Yð9r.zR“â;RÇ Ÿ¼z JªŽŽõôŠ?=7ôÏ uæ]ƒH„ rƒ%Áhͪ59+‡?rU™5¤ØtÁð’`䣫×-Á@~´éŽ’,¥hÿòé+u¬}ùøëí%"…è XW´Ï('‚…÷‚EŠöççVÙ V­"XH™"qÚav¥h‡àù@ˆ<Ñ>ì@¬£ò:±jÒYvqÑw>Ž@‰À¢Záy«7hŽa­­:ˆ;¦¼¸F ºM•VÊ‹S3‹ÿüü0Ь?Jš¥·gErÁð’``F&ex"ÖM mH±Pºw‚CäMƒÁ/žœ$Åæúèš½ !`é‚‹óW´Ë|`å37õŽj~CpÑeŠv"Xybú°ŽXP·P‹ò"v­`–e=d³àÓä\ô\U°«%b¹ÔíÂóBöc‘º Z2ÕÄ:2:ï//Љ…"7øÔ?œÎÃC‚!Å»›0ƒ†$Û³0ñ]´gµW‚Ð’4KR,$—Û‘X.a$ÈøÍˆ%íj] Ä ª‘àâüíh)ƒâñ‰k+á|*¼àÂéÑE;°:äÑ® .po;ŒgVØK6cu"b-­ 2^]ôM€O€#Ðc"04”ì‰XÄãm»ç…èÇÚgW·;\š€X[jÒ”çëÎæŒy  ‡ÉÜ`‡$»½]0Äô¬[Ú-Á@}Èî‚“c—©t— Z_<9‘úˆÍ5socHV°„¼°û*ÚŤh'‚…; Pä5Ry!=/VäúpkBˆ%œp½:ˆž·κm©¤â&«ƒxf9 {Ì^Á'ʸø¨NOŒ±rbaì¬pÂHÞí–çÅÉé%w4e*_A ÖºÒ”yi8hÖŸ‰fµS‚ñ hÖž&t¡—H )Ö\0"H0È!9´° X7I¥»>¤X¸` ±‘è.n Æç®ÍÂbQ×ðŒ}}ÅHKÑ^w>ŠvÁÅ…T´ÁB"÷èè<#•¯à-Å)biÞí‡'䣃x¿ð ™Þí¹ðn§~¬p.Mä+8*Ÿý™.þ&ÀgÀè1ÈHŽëÝ>$K8áËëÝîD¬b Ö®¶åÝ~s¾ÿ–¢À’ƒá‰fÅ"ÁíYá$­[aå€YmH±Ph.ÕÖ S‚ C¬ 8ä¶ rÈ5\0ОeJ0¾87<ÕÚß/ß[ÑÞìòhnMçÑ~ñíBp¸Â½î0vöÏÄm‡ôn‡nÒ¦ª47b¡9O Ö§n8ïvɱ '܆ ögê1{Ÿ(G [D`Y}>oByÑ’¾Ñšè˜…|ޱó±Ìi#Æ|,ìe@¬ƒ#Cj¢#!Öîi¡Áð­Ø%Ôžõi @kCƒ—Cn»%'G‡qÁh!³A§ ¸ÔçÆK kh u‚¢ýª‹¯h§| R¸_=7tcE‹æcÝÞ˜«|²‚í™aÚH®ŸÇbu‹M€O‚#Ðc"0³"à…X™ ± û‚÷îËr#Ot$Ä:6¾P!Öj‰XßÜÙˆa»ÿò²È  ä=%hÏ:1 ¼£©Œ…‚f='ç=Rn0r>F  )> F?A³L £=ë‹sã¤A»ZS4ç‡\´Ï£].¼í ô–áŠö¾˜.¦· #³úéæÏQÁº«ä#?¹§qþùÉÔ2LíJÑ®ÖomÃåÃmFÑ â;d Äšbx·‡›A¼s¤×DGšAÜbÍ ^^L`ÝEÙ'øD9Ý## |„XØM°§lù{¨–; uB,T,BõBÌ žXˆ <î¸Q'Ä:1U´dÁç{eŽ{(Í^_[ó×׆ƒfÅ(ÁÀfêí‚Q‚ÃrA$Rf I0hH1¦ýÚ†‡sÁ¨Ë! rƒ_œ+rin–øå`Kþ…P´ÃB°k<Ú•¢]¬¡Háþàx !ÆI±p#²ox!¢°”D!ó® È YAÌ †]2>'H#‹ÄC³!Þ±f·f }b}³@,$¢QÇšUɲ‹î±ôü³ÈÊÊJMMíùïƒßA ¨ËHB]ÕB¬M„X°DVpH6ªØ}À±LÄf¸@,ìS:b!S$ ÷%ØÝ€X˜OAˆun^ùßÞño-I³H‚AíYb \00=ëtÆ[ÐâŸÝ7à§÷¶þXZ7©A$ç+Á¸!Œ †—ƒr¡t'šå”`T šõÅcÄÀFµ>¸òPÿ|MÑîm!Õ£=FE;9\`ö ’¢˜Ã¹¿P´ßÖøÑÖ¾‡%Xý1Ø ÖE°„G;Z†•à—飷À¢IC¬»Æä; XcC‘kóÀ ´ú9kt!Ë.bø~òC"F ##ãg?ûÙÿ÷ÿ¿ÿ÷ÿ^}õUŽVï@¶/ˆ…;_±„® ±r±p-ìÛMÄB^ˆ8–Õ’5£äæÂ€PB ûva-xÿÔ¢sÄ__!sƒ‘$¿~h òTÈV š¥;äz"1%°xˆU‚Üà5$Á ÜàÃbHq‰R,i9äZƒH\ Ê Â~é‹sùˆñÄÖ:ÜZÐ1v´ˆáLàʳ‚CGd ÁŽx´S>ðHÜ€¼ÂÈÑÓ£Šv¤jÁBÑñõ[j¨ t·  ÎwOdZp¬ÉE‰‚c)ÄBÛ¤¤HãæF·+Ž5( Ÿ%wXr8–âXý²XvÑû·—®~‡‹-úÿ´Ÿššš®~E>þEŽJ +%b5§“í8!µdca² !Ä’wÇÀp¬ ©zñÁá9kh–žl¯CLÏ’Jw÷â÷; Á˜éí‚»ãKX.l­»`~±˜ÙƒG;ÙH GFf3'#[v¡Gûic–›` ?9¯ÜhÆ’ˆµ43Y5cˆu…@,´:€c9KJÛñùAcŸ'b­n æXvq‘¿û½àåóóóÿÇÿø„Y?ýéOãã¹4Ú ®j´·pme@G,äptÄÂý²…Xž¶ö–¬ÛêÓuûmµiÿxg¤F³<$4¤Co‘„«pÈ 'Á@{ÖNC‚AíY† r=‘¸$ç”CŠ=]00=KÎ{t)VŒ/Ÿ¸ìë÷¯k"ýrd`kíP´÷A"q‘‚u|H‘U—ÈŠv²|ZZ¢«ì‚x´ÛíPÇ®À†˜Z¨IÛ“Wç¼Ú‡=Æ9Æ2kUC0‰÷–h_Lþ{,HLL4hPSSÃU,áê ¹¼ÐgX jFM^¶®&bˆ/d1L/ºoš_ìèŸå ¢ˆõ÷·%hyJ0Ήy(¥x )öDA‚к Œ/Ÿõõûôu¤­@,9³ñ` àŠf6æ£$fóhSL ¢,áÑNù@éÉ4…¬‘†`Aè¹#FaVW{´ëŠväÑŠ¥ ȱ.m__ +míÃyîöaËfÃðâ†>,»è [¿ŽÀEˆ@cĶ–,p,XÑZ²„øb’,eIÄ"¹àž!¹¹àïk4Kæ…íY 9¤86 å… Æ‚f}Cš R{ôP%ÀmODB.R7Y‚Q¢»`XCŠ]Œ/Ÿùõûãõ.Õ.vÊž#EÊ ¹ŠvÀ•ãf6C°.„¢],o¯O×e[jÓ-i»(bâêëBA±lÒvG3–j_IJ‹‹ðMç—äô†ä ¾p7G¸‡“ ‚É·%,|~¬ˆeÐ,S‚!Ú³<]0Zá%ŸîoþþÞæïJ‡\Œ}2r¥ †‡CŠ—Ô`ÓaÝ£ €–DB._<1òïÓ×ÑÁQ=Úe>°BÈ= ú#¸py´CÑŽ™r$ÜÌ€g€4 €ì(â€f5äKáŒø|²¿•?´`k‚‹V]p¬‚e,¡hÁBµ"¬)²É.¶5‰YŽº´Ý]Ä&mw4cµd³ì¢7lü8!hä\Ý7-šÀ=¼\ÐîànÎuLZ‘ »d–>¸£ˆ%@ë­‘±J0Jwl²Pº;Û³Ú-Á eÑ,mI¬Œ¤ø¬!Åy_<1üïÕÖ˜cC Ñk )<*XÅC2Ša]®h\už¢]V°†ƒ`ýÓ‡ÉWÊ.p ²kšåh í²‹ºtéR´Iuipð™3gê/ÝÐÐÐE¯8vìØ1ß¿ccc½´û°C‡=zô¨ã||ðÁ)S¦$%]÷‚×W¥X÷˜å‚ž~¸;²85‘Äh>E ê‹+úb‘ãoͲK0Оõø` @K*ÝÑN•ög‡Zàà€ÑïÂ!7 &Êc®üK‹…u&Ké.ç#Áøò‰aÿxw´¾Ž-3+X¨`!¯xψ–ࢼ…|íGÛ­h'‚…rãçG›MÙ…ðgÂhéý#YŽšk{DÙEx¡ Ú‡“{²ÝEiiégŸ}¦‹ª¿ÿ¯ÿõ¿Ö¬YÓuûWeee„W§?ýéOÂ&Ûuç€#§§§¿þúëè… w2ÿùŸÿyäÈ‘.DìÚµKõ1cÆtÑ[^¹reÔ˜ç;ß)++뢠Ã677ÿîw¿‹p&ÿû߯½öÚ.=‡nqð±E~¹ ÇÌ‘(â *eáÆ\/e™U¢+ŒÃpÈ +Á¸G4“Ù Pº‹Ü`“‘ÜÞÕ,4ÏbÞ£Í!7¼Ã|¡Ç;7«Â9¤8¢ „Šf}ùÄм{¹¾ ¯p,hÑà…6/4{uE»Èz´ ÁB—7n)@‹•Ûn>Œ/ðvt¸¶£‹¤íúœ³ Ég^Ì©êZ ÒÕß(lLQ7/<`äÈ‘]t&± NàÿüŸÿ6ÖEç€Ã‚PƇ%K–tÝ9t+ÄB4>ÿüó®{³Àþ¯¾ú*jÌÿë¿þ Ä·ëN£[¹);)œ\0¢®—WÓ´’5E)ª”…>âccòbÅ*Á8c¹`PnÐpÁhIš¥·gyJ0ÞŽ*ÁhI¥;tz? ) RšžõÀ¸( ‰X—é Ù?oEûe=IѸÁBæö¥•Uzï0ëÞ)¢O<œ?S̲ X‹ýÝâCßÑ“ø¿ÿ÷ÿFÝ5ð€uëÖuô¢ô= ±PýV‡qPŸ †Xú a«º(ˆõé§Ÿêáìõˆ¥K<ÉúûíèÇ*úóˆ´VÏAïÒB,¼ó›j¤ø"ŒW9_ÐØç0b£ØêÊÚÑš½0%‘JYd‰ûÇç†è4ËÈ J 9äZƒH: Á@{–Tº;]0Оµ¦;>öýŽI0¨=ë^¸`Œ°¹`üî‘¶¿¾>û»\øeø‰Q…²eØ[pUÑNІ@!àʰt(ÚWU´£×-²¢ò`\ÌrT–í¸ùX_TCF`ØOX£‡mE,ß C׎‚ÄžmwÁˆE¥Î±±`DGžŽ>‚˹ %B|A£á.÷R£Ø5ŒX;âÙ•µwhîÂ@"%IãþóZˆeæƒH´!Åž. ³=k{?è¼=$k "Áô,)Á@ßn{%ègú×WDM.ü2 ‚@¥h—‚‹B3.0ÊÄe!X¦;\<%.ž•ž‚í²Ë9ë Á²y´ÿÂ6ËÛ£])ÚÁ•ZW’BºvÜvàæíÑŠXrȈc,ÖÀ Ÿ"J âsE²‹ùÕ=[vï ##s¬ŽÂnç=¯Nr”>b­”e3q·[â"}txLþ‚žüö޾ĒíY1¸`¸$ÔžõƒŒ­6 K‚±¢Üà16ŒöK0~ujàŸaÛa­¡†#Xº¢žñ]ëÑî©hÇÌFI°Ð<àöhWŠvE°þüâP-%˜´ xGslMŽË” fO» p#År±®,íÙ² F,µå0Ç¢PpV°óP¨=G*& Äò;"LÜå ,§‰ûØ8–(eÙƒÇ'Î÷%è‰Á7Ö×x ™ ê.˜žõŒF³t‡\ÏA$¦^6  †È "Õ&Ú³U“ƒÚ³ÀrŒ!ÅžƒH\ ´ÿò*¯/$©eØ­h' Á<Ú……àËKÄÌÆ×¤Ã즷ÒáB‚EK8\ôƒ¾*åp–CT i%ÆŒÁP¶Â0V.v›¢ׂʿ<5FhŠ#n;pó±sP¶QÄ’)AÌóDJPX¶p»‡ŒØ,ÛíƒåõlÙ##€Ì±Úƒ-]óX4uƒ²ÌR–aâîÕ•E‰AìYîyÄ4+ YAÜ›+Å๹enÄòvÁ/ÁÓ³„ÒÝcH±ç ’(ŒÊlÐÕžM‚ñ³“­xZ(°ð Ö}—[í"Øc<Ú…¢ýuª`ê˜ïîï§T‚¸íÀÍÇQyÑtí¹¸¡‰Ð‰¥ÆbU¤õlÙ###V×@Pû:WŠ/UŸBÑ~¸ƒŠv²Ôíêê윭4ó’âW†ü¶Æáñ’`ÃíK íù² F,F,F¬.Ÿ­@,Kãš5 ]5aƒÐ_ŒQú‹kÀã•EÛ[³ç$ÄKšý… Y4×1,h¹‘ˆéYÞ.‘`lóIéN4KÏ šó=r•Ù î‚ñéáæŸ?8@_@¬pí@ÑŽ)DÿФXC°d>Сh‡S‚e¶ ;/ÊÆÊTärIs171þ–Ò \¸ÔG½qØ­ÔS‚];ŠXUé=^vÁˆÅˆÅˆÕ!xéš'ͯ :ƒQƒp–Ã.F‰Á# Ècpϰܛâã@³ ýEZÒgGÅ\ÇËRìé‚aJ0hH1DÛnCÀI‚!Ŧ  )~wƒ˜…(†.VnÐS‚A¹ì–`|ÿ@ÓOO¶ê x¦{´wE;°È“ &XðdúóóRÑ AéÑ®íêºà_¬@n8pÛ±¹&Mµa‰”àØy ¯K5»U‚H);¬.V5Ó“{¶Û}çXyÁÊ V^t þ´ÿ¨SJîÄ  Yƒ´‘Ä"1h÷´7f!‰thLþqqsã…þBÊÜß»­.2b) †È ¾4 ö¬î!Å¿=3ˆÌͲrƒí—`¬®õ–` =ËÓÔ``hœ,¾·¯éÇ÷ö×׃W”EûXHKÜ-ÃK‰ Ì5pð§¥à¬]ÌÐ+Bµè°|[Z¾gY6:,!Œ„{=F…!Apñ;9Rä˰‚Ã…… ©hW—æ‹'é ··7eêÎL¤¹€S—"XеoÃx‘!YPè@sO ¨¹Ãêkqmo]0b1ÇbŽÕ~`é²g ÁS%uÅ v"ìG¢•xhvdýY¹›\tc|œN³ž]R±¼$Ã@ t‡\ìÂHvý:f ¬Œ°Ý Æ­‚f¹r_nÐå‚AÓ³ÌA$.‡Ü1ÅßÞÝïÇ[ô…%–¢}¢h>seÙ#v‡ è!£‡˜ËÐ(¢‹zÅW¼[†p¶º… Ö2ܬZ†10 -Ã2Ø*óΖaA°Î þ秆 ¿ªç•G»ûŠàMé ·;å€:‡Õ\(/A5ÂÑK%ÄšÖ+dŒXŒXŒX]†?í?peZ"4]ÎVb—Ç`¸Æ,MQ¸ÀŸ¨Ó¬‡¦GE,x.x¸`<ƹAI³hHñyI0Zž.W—ÃT …¨3SŒÜ I0¾µ³ïgGšõuFLŠvX:<ÚápÑAvÃB0ª¢òžíî+‚YŽF+)7¸‚ûG…l>4ÊKÐ+%8<ÔãÝ.8+¨ï(ìÒDÑ`—¦öãLç= ž@,=1ïmø™Rbл1KÓ_X2÷I…˲’±ß)šupxNtÄfƒ#á¿Qj-Zn0¼㤷 †RŒ†â;ûÍúHÒ,RA‚y@$îÜCŠu ÆG;¿¨I_@, ™Ì–<<¹ç X2XÖ£Šö5ðd•6Á÷IѾµnô¨ÆÁ™þ;;› ƒüþÞf ÃfH5‚¥ .NÙ,M‚å)¸ð–n>¿¬RU°pù°àɤ¬}¨`y93Y)ÁV3%Ød¸ß‚`­ªÖô Ùs,æX̱:p:ãHhó4ƒîÆ,åØ4,›†¸ý/ÍB1my¨f¡†¿¥:-Ä2\0Þ3ˆÄ.ÁíY¦¹BéîrÁpI0`ÓE‚ÐÒ\0, Æ•† Ƈw4ÀÊH_§&•v•G»§¢ù@Ù2 ~ –£G{E»º4§f“DÖ<_‚$XŽiXv³v±às1(S4Èš »— ke]0Ë×dŒXŒXŒX3w ´y:h ‰‘fá–\Š —§bÍ‚M(Ó"Ê鯶!Åí•`´·€… ØF¯XË!wk_E³ m€ÀA¶g Ô“l.$KÞßÚðí=}õõðdÁÅYòdšUNpa Á’3=oï šøÙ€å\ôG>ÐCÑÁ…æÑ£¢]]—Csæ%ÇC"h\»”Äö,·æ¢Q¬%5)½¯X+hn5œä¬`çÁÎy mž«ƒ±ë/Ü4kûå¡ÁÅ)õ® š%{³vµfÁ‹/&ÐÒ‘´žwJ0à<E‚q°=¶ž¹1K0´Ü Pº[Œ÷n­ÿæÎF} |·ñh'Á…‡¢3½ítEà‡ûÐô""XêÂ]×';yí£kØ4¤iXš¨]ó¹0 93 ‚UœÙ[ḏ˜c1Ç:xé‚§¢Í»L$ý…4ÆuΑլ½£CWV§ùåÙR ±ˆfa7\ïÿξ~ÑA«³$-÷ jÏ2]0¨=ËpÁˆM‚ñÎæº·7è U.”²€[¨`QËp÷U´Ë‘"ŽÇ©ÛÒÑ<‡Ët“I°€[å,>>npQàö9á*Xd}+æ7zi.VÖ¥Œì-² F,F,F¬.€ó8$Ú<‘ơĠÛÿÂSæN4kNSFNŠej¥!–¨f š%Šañøe‹–!DnÐS‚­6ZbÑi$i–­=ËsI †È ÞRïé‚Y‚ñÖ†Ú÷o¯ÿ@.ü‚ufj©\\Eû@Ǭ(ÚqþM6í(:*‚…_ê´R )~RŸÔ#qÃN‚¥Dí-é0ú¢‰Ã¤¹XQ—RŸÑÜ.(ÜALqଠgÏg:õ©‹jSÚE³V̪ÊòÐ.—ÇÅÍÒsƒ²¡;#ìqwÌB³jL.Ð ¾<Ü0„Òó¨ž‚ÆØ/΂ ¹`œ¯ãfA³ 2W¹† †—ã‘©eo¬«y÷Ö:}áÍ™eNv(ÚÑ€…–áUrfc5šÀ`…W½C †‡ÀN˜BʈJÛG[û:Z†……àæÏEËp'+ÚѬL 0½%O&SѬº!.®ìÊõ¹ÊMI¼±1=yªk8*ÁZ^›’ëOèÔOèÅ<˜ŽXصw™?÷Üsî¾ÕÏúõë»è,+++ýÐÌ™3õ?Mž<¹‹ÎKöb©Û?þøcõÙ;{ö¬~Ýñ1èºëÞ<­ÔO·Ìlušµip6òE á«êY‰ñ³ý ºCM!¹¥Èÿ­=}#™ ê¹Á0 €–— †lÏ /ÁøÐTºÛ$È .«1%bH1ÆR<« $úîƒlýµ[jÞÞT«Ö[›jÏÈž­Ž(Ú׺íw\ Eû¯OÜÖ7CMÑ7&ÅWû"aLuVòŠ– )´f‹>.‚µ¤:%Â'¤;~"ž“ŽXú6áøý†ú]òȥŠ-[û˜1cº$âqq+W®Ô_¨;¸4Eøì <¸‹âÐM‹fO$s@³dbPÎQƒ‰ÍnbxžNª¦DÐ×ZØ~yÞ‘+ ÖW5 †e6ˆ9Lgo(Cö/¼Cî•üË“`,óá¢äá+%¯®®~c}¾™VšBHáa–A3Å,"XóÁª(‚`ÁÙH˜BgÃCÔÕ>Ø"FŠ|$° ‡ ‡G»t¸p(Úm Á¤Á2-‡ Á0íïm­GMÑðh·ç—çøöí›?¾O*&S‡ûŒâ/ƒ üë[ÅMLø Vëê2_7ý wè´bA¬÷Þ{/Õ¿®ùaÄbÄŠW>ø`×|îºñQÑì‰j¹Í2Ýܯ¯MÍÓJVî·R’ž´²-[)ÝáÛtçÀl”I€[¢©Ü vL€2„¿ê‘ëïÿûÞ½{srrºîû͈ňå‰X_}õÕ–-[RRz‰g;¾AhöÄ^ãI³–4¦Õd&E8Vš/ášú41…DºcïSH`6(íqa„¡tƒbBqjöMìžëJR>ÞÕèÉ´: ÁÓ³ÐP|ÌáÛ„ö,OŒöJ0^\ÞçåÕUúzl:V¹N°t Á¤… ë £O ‡ O‚%.š‚?–‚0­d!èðh·+ÚyjÀö~®0³QŽC° ‹Á0³ƒ…… ®—5hXÚ´/iÉ,J‹tÑC)‰³ª‚˜^ :^nˆÚë‚+jS–Õ{‘ìÂX¯¼ò DúO hÇ7­CeÄbÄbÈØ™]Š1Nz†PDboÏ’ ˜é š¥)Ž$Áh" å r¥Ù ÓÃ%ÁxrnùSóm ˆ¥YFóh§™ºG;í°ìö·6Ô¬-\ÙÔþ„5Eˆ,Àz¡‹¤áxkNvx´‹±Ã²áu¢í³kRs"ÞÊ„ ÓK|—‡"À:H.Ø¡±±ºƒºËö•÷'ÄGÈBÙ< Ï·¦%½YÖmØ£2 ³ u×8ä u·­{§ïž ‚%UNÐÚÓ– ÷ Z‘$ç¼]0:"ÁhÝ\õ94èJ@.a9䚃Hž¸©ì‰9¶õ8o;EѾ[˜ÞŠ ÖÁf𢂠ͣ=FEûŸzÿ”›óýà²+ ®LµÅÂ@Âý2Átqë¸r–¯¬)ÃV>ŽAÃP´¯ïŸ1¦ØO¦\á~‚ÿzÁ`¦_ˆ‹‹«¿P]~¨ò´Äùu©hµŠA³ìfƒ*7¥™È z´ h»¢÷ûJ:(˜VŽÁ´6”¿±­A–%Á@nðE8ä  )6\0`Ýd¹`D’`Ðô,—CäÑ&…f©×Zš †ÖžUùø ego(Õò]êÑNù@EûÞŠößÛš@O¸‚\óÀ¨n\¹ÊWÊñvQ¾²òw ÉÆ,}ªµ ¯hLmÎIîªæ£.ÿ8·û±±±Úýµ¹(OÈô%\Up4‹)$mbØ£•ŽÑY9 YÈ Ê‚VÈQÐB ·öB…¦5µøÄUÅ÷]UŒ»þ…ACﮃäm§¯-þ×WE†0V @ËS‚qW˜A$í”`<:»ô‘Ù%ú¢ ÖES´?#¦ ÃážZ†_½¥Ýn¸B½p]Yðø¤BÀ"¯à ÜWÉÙUù ÅH*_¹ó¸â¸Y\mhIWŠöªRJ‚—„¸6œKS×Ù29¾ìÝPyñ—¿üE99|(PæéºÍêRö¼Ð]š.\ØuAî‘G†÷Áðüä• –=.n®Í’£³"ä= ZF‡–)4@kZÉÁQ!0jÒr€4„¿:=P€–kH±¢YšCnZk¥Ùà@4Û¢‡ÉÙžnIx †È š.\[rúÛŠ@°@Ô”… ç,LIÛç3òç¡hÿòÜ “ €ñ®|z2"‹íý³†%¸ÒÕst•¯pÃApe8ÞÉËôh×Ç6ꦷ‹}½n}ùå—žý›üã/Ìw»› Ö›o¾ÁyAý‰«³>iiiÿóþOϘ½:ëUzüqíñöüê5«)$¸¹Æ-6¦K¨Ü `¸rƒž-Ñ¡EmÅ&ha'LkZÉ=“‹Ö•-Ð’êA1Ö!|k½Rü房¾.†ÿ‹Ã!7œ uO+ü„Ù hÖ¡ô9a@¢hÏÚÙ ÆÃWŸša­‡f›]ñô “ pÊxQ¶ â0\Ë0úÀ ø€îêÎR´~¤y[ßtW†ÔBÖ®Ð6phtÈWîî«&gÏ…ŽÆæx«M6,› v|*àBŠöÅÕÁ¹I·zö—æuÿýßÿíÞ8.5ĪªªúßÿûG-F¬Nü¸/X°€+J<1|äÆJ?)Ýh™ÃݹAå EnÌq{Ž›tÏ‚yaÐ2¥ƒP(Ð:9½d{KäÓÊöaÃ]òß\à¿¥(ððÌ⿼Pm¤©"Ëk„¢}aŸ@i°÷˜µ»¿!£G~÷Ýw{Ç¥†XKssóSO=õ_ÿõ_p‹« ‡š1cÆ'Ÿ|â8s,[Sã¯)óãöÃd‰f9'ËÜ (h WÐÒ:´¼¤ƒÔ¤¥ƒÖáÑ¡•¹ÂªUJÞEs±Z…­Y?°íY¿‹ö, Æ`Xí…•` =KÒ,½=KH0îÐ]0"I0¼ªøä•…úzòúŽ*ÚïDËpÆN¢eøÓýÍŸlå<È D&¿, ÁSmxGPðCǯµ ýÝ#mwÏ–¯)ð#D ¤Ô& ¼_š‘¼s`6È«®tq š…-µ…Ö}e•¯”íºã-œ‘­!Xbnhp[ƒ–ṕþüÞernÇ)++Ómrª««;wo w´äädýu³³³Õ#‘8Òÿ”ššzN©  ÀaU¥ï§]ŠXyyyúKƒÁ.z¿YYYú ù|–¹³ãíwÑ 8 ‚«ŸOy9&;ñ¤„¸IÅ>݃<ÝÜ Ô nH-QðÀ9ÄÐÈ)éZV[qtÐ*ÓºwJÑ†Ê –pÄB?*4H|m(OÁŒ37(znèŸJ4Ëæ^‚„NÀ`BÐ,Ý!×Óc¹1ˆ¿û® ô›öŽ{´“… [Ñ Á~![†Ã)Ú¿·¿f߂•„+ຂ«Õ¡À]c ÚWºÚ"RùJ .¨|¥çW³Ëý½¾ŽÅCÔ\0ÄŠz&ü€K7(haö¹wnг Ð&@‹rƒ$4ÚŠÃ4iÓ2…Å'§•Ü?½äÎÖl¢ Â{ÐT½#ýV¼ÜŸ¢rƒ_´¤Ò]—`Ðô,S‚árÈm·C´gÝ7©´F_(bÁ~Ò Œ)yyq5&C¾º¼‚‹7¤ÃEÁ|QNCQÍn!Øÿ'ºÃ…ã]*Úñ6Ÿ[\¹®4Å,\ɦ+xJ¦ÍÕi÷N¥Á¨ìJJ{ Cma l¤ò•1¬ÊWºã­‘¬MA¿päÞ¬K÷Ës‰½sF¬Kì‚wã·Û’„»D‚íu˜žÕ’¾ÁÔ #¥ Zº{“´Æ ‰špÔ:‹Éx ¥gŒ) Ã\rrRÂÍè=rJ0Оåé‚aJ0~»íY¦ Æk YKk^Z\}⊂ccBúzúÆJ9+ŠG; .lC°¼<Úe>0’G;0øèè‘ ´®bíœ ‹®„ÈÅ ô€+SmáQ¾jÍPrv0låxKùÀñ…ɽ®W¸»÷©1buïës‰]UZâ²:« E¹A]ì®wh9TB:¨3- Z(þ[ ¥ú´ìe­S‹6U¥™Z QÖRBð Ö$ZnÕ¬3CŠ=‘ãc!ÁèY‚vu×eyúzúÆ>:ÁÒíp~žL`¹‹ÃBß‚™[ÑŽÒtŒP3BÓh#X†…`›òhÿxgß­õi‚Z92I7ŽŽ/pÃ.žp¥¬˜æ¸26¢_X+_éùÀ!¹½ÍŠéûNwòÛeÄêä€òáÎ3„E5)bwW‡1-]:èZr’–-]ònÚ8‘êe­ûg”ìjË^š)†e²EBÒNL,€í…ËCJ0δÁé\oÏ‚ï‘D³³¬ Œµ YÇÇä‘«/Œ#Ñí¯›S†õ!XnE; .b÷h‡æ–†ð " Õqefo­M?1±²%Í6aKÈNR °+®ì^·¦y ®¶0º¯ìå+\}(q–×¥4FtÅ=ÏO?½'F€«'^µ^~Î(°ßT•â»›-S…ᔪš–ié“´,вlœ$he­#c ¡Ò‚lɆ-?º‘>»« áõ`œjóDBíYR‚üˆ&Á¨Ci ª£—‡öÍÑdrf£]ÑŽ™’`aš )ÚÁá¬þÈU‚`…óhÿɉV`$U­”Ȃ܊=C´LàÔbÃ3P3eWc…ÃÁ•MhoW¾Z\“RžzIø\ôò/sg¿=F¬ÎŽ(¯3"€ÁG˜E¢ÄîF‡–K…á0pŠ ZpÄ€“Þªå(k˜Z eÐ*²E•­|ÿÚâ”–÷ñtÁˆ"ÁØ/ŠÉlÐÙžåDrר¼½ƒ²õõìÜ>¨oi‚‹Z]pñ¾Ì~(ó£Šv.Ú£hÿÆíõ[ªÓ( ¨Ì,HÂ~saàèw&P3a2‡4*v³Gè6ÍÁWv+&—·…îÆ¤—¯æUò. {g|Wzù1B¡Œ‚Ô#V/¿Þ=÷í¡Ø>±Äouh™* xaP‡–һ뮃±–­¿˜ŒÞ­ áô’Ým9@,ªl™Úw#Ixllè7gÚŒ!Åá$÷  ’`P{–á‚ÐòD¢I0ÏÝ= K_ÏÍë—wÝávº0Õ}wC=fcšI8Á…Ó£š¢vS°1¼¹ÐL*ýzFš¬o­K§°xÊᔯf ·®ìâ@MmaÉÙ¯«¤EœðÙs?Ò|æˆÀ°aÃÂ58p ä§pº0ÃCÉZJ…áNÔ¤¥ÙahêAËâ1$Ó’ åÒb(Ü:2®`u~@¸c˜2BCþòßV—ö}ý¬Ü`¬ ­=ËS‚±F "904çΖL}=?¯O'+Ú¬úÁÑ–}ƒ³eÉÊèµBP̼—8½wh®%²°g¡³@Qа¸Õ]- v%š œF·Ä®\ÁëVŠÝj‹«Êü¾ÞìhÑ…ß”ÞzèpˆõÕW_efföÖwÍï«G _VÒêó-ws±¡z—e-[†P'[ÓJî“BxYIBéê„Ô„sÏ,¬ø'˜ >!¬›<%ä+$Rìé‚ë¦-àIúâýƒs0ËC_ÏͯŠl!èR´{ .ÁºÀ/Ñ€uªííMu*‚VÉW”Ä›•™ÀBjåY¸‚ t0aê\¡{A5 Cm1¦Ð‡éhüÃÐ#àF,X/¾ñÆ---(Ž@7@EZ⊆ òÂpèÝ)=«\Ïô Í%Á–ŠwpºCËI¶0¼˜”˜ ¥ÈÖîA9@,lå"IHÅ-·ÌÅØx› F$­ ÐP ª=³á4¡¯çTu¢¢ õðŒbQ¯BPÃ*°I̽D&•<# (©y±SÇ•g&_Üp%\nI¨±+Ã9ìJjÙpÕ–›ÜM?||Z5 R“í?555õŒøÅ91D ª÷º( Nˆ‹ ´4S +C(½Þ!×6¬1츅 áªQj¢·„MÆæÊàGÛM‡Ü6’`Ý DârÁˆA‚±»5ë¶Ú4}½° ª³íŸhÚÕšI~KŠWVAÙL`xjedAOõyW®¤Å-™0 W jŽ WÚì+¤|!d¯Ëফ¾üŽG E ^ïÕ)‘™–»OË-5ÒR½«Ê–™!4É–&#,†/Ѧê4Ì2&Üë‚·“¡ËÈõ½±ì÷'YrÈEæ TY8¸K˜ Ã!7ª¬-U©jm®J}aQ5f£gË\tTÑþêÍ5;Âù×UƸÝÁ4Ÿ@9DØ V“\ÔJÙ±»e퇫%µ—Ê´ÆôEãSåp:'(t̨ÄZš÷ e?%C¨*[Z’ÐTïjËY”š$p  Ü’z¬dèÑ|OOŒïÇtT³àžŽ–^›C®K‚±£_æÆŠ ¾^\TýÆj›¢.œŠvX†ñhGEíääB¨¤¶'èÅY™@¼AÃ$ÐH*ýzj¦på ô/ÂÕÂSjd ]Í«NÉf¡Eç|3ø(Ž@·ŒŠóã‹ýAËh.&ïAáòn÷Ì5@k´pg@Ó«YÖrÊ$¡YÜ"Ü:2.“J ÜJBp²ÓƒywK½pÁðRì)Á ö,`’`lkÌX_𢝗W`‘ÃETE;@Јׂèî yßÚÕtëË`à–° ¸µgh.a•5àJ*,<ªV–Ÿ…ÌЦ+›,Ђ«ÁÚLa¸Ü’2ÐW³*AV±w˯ŸG€#ÐÉJÖAË%y7AË[õ.ËZ"Chßr Õh,äﲸ¥á6wøÎ÷%,ð', ˆÝß \R ÿðÌ’_z<‘<9@Ì{t)ötÁŒÛëÓáB«¯—–TGöhGor8ö–V­ùˆT¡Xe`•?'¿*?pd|Ad¬rV­,jeØ/¡p…8Ü\ZAÿb3aRBv;»šRêïÅ£„;ù³Î‡ãpzAê3“VÛû´p/o ÓjËÄÖ‰ Ô˜§eµjyeM²E湺"ÃlÛ²p‹ê[È. $ÌKN˜ïOP”‹ª\w6g~v¸9²c«<]0n«Iƒ¿†¾€Xá,1y æO˜Âå¶Dóòñ±!P±ÀªyÉñ[jÓÁ¦Pä…Ð,Y¡×Ê2^ŠJ­œ: kB#Í¡¾+8«1"—øXÄÞ ¾€ü8öE 45qyCPo.6@ËeŠ&Ch‘-Cûn& =qKå ÅÔ’)E‡Çæ/ÏöÍMŠ tuA>þÆÚZ›íYÂÃ%Á¸³ßÇÛú~óvcH14Ðòéëå¥Õº…`,íÞÞɆÊþ™@•€SŹí’ã‰U¢/X¹.=†O F­¼3.;LIlpeö]¡¯®ËÛ÷!çGs8½'9HÍÕi EÞƒ^NN´ì¾j¤£²¥% -¾e’^ê2ľ?¹pCŸÔ9 ñsã%t # K¯Dè sÿ¹• Œ®÷`l3‘lª B"¡¯W–U£‚….côÇâÑþäÜ T­@ût š›“\™ç»k\¡´×«Âa§U+-HÓC”¥š®p…û j^ÑZÎæ¶½ç«Çï„#ÀèHPÀ¿®OŠ`Zðli($£ì %ËZf†ÐcŒÐG‹ÙZÑqË´w2œ2Ì×mÙs“nг ËD/tV}wo“lÏjà‚¡$Ê‚BÇa.” ^Y^#1x´C:hx®Ìû‰Ô8ŠS‰Ý·¹6ýø$+¨´*h5ZCTk°¨ZéÞK¢jeë¸23Rg¡Qpµ¸.XÂþKùxós8Þ¤„¸©eP½‹b‰ZTÖrØæºÈ–ªlIBà C·ßRyBÖtð&å:4&YVòqqX@½?/-«‚Ã>О…ÉŠ(2‰A$pÈuI0Ö•¤ ›§¯WWÔ¨™Šö}ÍhÒöîÆºu% Ñ©›¨äù€óí’Cã¬d±Êh±²êU*hÇ*j ¶°ÊA­ì~µ²Ë‰]Í©NÉLæÒUoûÒñûáp:숗ú´hr1„®²–MCèÖ¾“.) #à–!Í ÊeBÀB µzúÑ1ƒfÙÛ³lŒµE‘QÔ+²G;àêÑY¥ ü‰:J©X‘ç?46_¬SÐÐÆ€U6A I­Hx[›pÐwfMY ¹¦"€Ù1¿®üLŽG€#Ð[#К›¼F-w†Pj•5†ªlÁ^HM* ‹[R—aëß2àt혤œ·èÑeõÍbHqx Æš|¿àIÚzme µ $‡`é3‘üöÎ~0vò|9€%2”ýSª  @ÒV8x•Öh¥,ØÉxÉÞìÌZ²À&qÓ@p…y1ŒV½õ»Æï‹#Àè„Tg$­j”ÓIÜBKChT¶ÈÒI-Sþ·dDZðÒu¦ ¥:ƒ K²®—‡–eûÈ|ŽGàÒˆ þ×V Û\'ÙҴ歷О$ôâ[fó–!Í0)WèTHÌØ;*/\†2ô'n(×r›à^áF¬7o®ýhkßÍ ÖËË«1+Ä;åH¼sP¶ŽRV™J0* ¨©" ¡­P9@;V‰4 l(,ôî`KdaŒ½_P›‚¹0—Æç‹ß%G€#ÀèÔ ìâ?òTn²åh4¶’„æ¼#O(ë[¦.ÃÐÁKi† ºˆuQÂÐI¼Ææ¯‡†ÐÔš;Àfß 86©!Ũc9ðÖ-µ\|¼½ï·ïìwÿä"ˆ×½3!ÿÞË\%‰)ÌÔŸTBUá$U†1 yFÀª‚˜N¦­­N­P¸º¾O Ím;õÌãp.¹ Ï÷Iв“-SF¨' ¸¥ò„š<•¸ˆr9¡ËHÚЋÄÛZ³Âeá"øöú:DâXkë|KÃõéÞ™À„¸MµiQ6”²•©  ÒI• «Ôr€:¯²Äë.Ÿ@ªZa®¦—ùyèý%÷Õâ7ÌàtEúe'A`‘-)#4z¶d’02n©¦cš]B”˺d;—êè2¸—¤_»Gä.ËñNèAÿȵ¥`¸ëíuuÏ/ªÂ.ïL`Jâ¶¶lAï€O´ä«Ëi ¥¨Øª\:mñLR%4ëd».;‚=°*LôëÀªÕ Á±EŒV]ñ±åcr8—j €(€8#Ihô{à–Õ¼eèàM)|è2‰—•6Ôl]Ÿ r£p€Ð®þYptüã¡a¹ð°— Ü=2WA”¬Ny •©, 2‡ƒ(Reê­zU¸’•™4ªVWm¹¬b¿T¿Tü¾9®‹D jR°Ï:“„RIèÆ-¥Ë¸ô„Tâ"H‰ªrÐ%‡FJÖeä UÚÐ`’míŸ ç$OŠñao±¡&Mâ“ ¢—"áŸ@)QÑ+'©  ²Ü+œX%KVj\ˆžV­¨ Öe°Š½ë>°|dŽGàÒŽ¤´nA–m;)Ü²ç ·d‰Ë¤\žÐeÖºhäq®ì–.C´¤$Þ> “r}:D).å¤SdW¡eÿ¤ÊÐšÚ kPHx¬ZÕ\\›RdYà¥ýuâwÏàtuPr™VêE Ð"¾·dÓ±²Ó¸% K–|ì¬ËF¼4ôRE/7†­­ ›! ‡[+B~ ’¤+h¤Ò”¨Nɤ ÿ  Â@Y¦" R•**©RÚ ;VY%«Æ ⶪ>8§OJ6ÏeìêO*Ÿ#Àà  ñqc } pKè2¤žtðJšaQ.‚.-a¨r†z©¢—`víÆ­ÍóbË"¸¾&Ueù,|²C”7JQêO¶UY@E¤Š„²XÌ –-V429@…UT²V­¬^SîOa»@þ"q8 ¶Ü$lÁ±à–(qQª(—´Ì°C—“x­¡¢—`:†I&JtÇàì¥a4„Ši!xkÿ "O2‹R*ãGþ—2èT 6K:VîÞXµ¢.eR±{®.ä§”_‹#Àà¨ÍH\^›¢ã–S—A³KH ¯S.“uQÂнôÌ¡¬{Yf˜fk*Âf—‡|w`¥Y‹"Ÿ…O2Ýgdü\(¥§þtF¥•V¨Œ$[×yÕʺ”µ)#C<犿;ŽGàâE 8%aQM;²·”ž¤ÆØ-]&뢄¡"^ ½Ì¢—•<¤ê—Q3Ë` Ì6õKwd1Dø–ê z€ ™¬¢”‘ñ£iUî¼_d R‚uJ-Vf½ 9@ªeµ)Íln{ñ>¥üÊŽGÀˆ@–/þÆÊR^رGSžpu£MšA-\:t뢄¡QëRÄËkèôËJÍ¡¹ld1L®[d.É1Z² ÜÔ”!…ú’ÏÕÀI±(%£ ø¤ը܌Š*Už¤JÕ«`8èâê”Ê46·åï G€#À耔àê2?vg ·ê%nII¡®*tB—™04 KG/ÀìæF2EðËêò”e!ß–gÒ™=×À'©žð€( ¥HOA©?bTºªÂ–$mE­ ¬ZV˜×ÇŸÏæ¶ÝãSÊgÁàpŒ@P0±È·¼F° p ]b×)—7t©œ¡B/Ž$€Y Lb˜Ê"*°1~ü8–‰FŽGÒAˆB,JB”K)”2éT8 R¤J$ëÄÛÇV-«Ì.÷gp銿"ŽG F >.nD^²Ø¬k´që”+tYÄËŽ^FæPÏRÑd&ü(rüBÈG)> œ¤ÌÏ`Q¢ .¥tF%€ÊEªØxïK«ÅºªØççánø1åSâp8*M™IKä–-pËF¹d•K±.{ÂP9?)ôE/À Á¡$a´i¬E*s÷r=RAÇ'=ãçàR ¥Hû§•“T™Xµ¤*06?™{®øKÁàpz@*Söñcã¸t‘LCå ••†lÂ5JGT@rÀIÕ"RËñWëÍCiE)ÑA¥ô~aQJ–©t ÒIÞï’*ÿâ>þA9ìØ>¥|ŠŽGÀˆ@ÈŸpS¹;8áQ.Ö°/%Öp˜I„s¼Z Æ¢þ¢?ËNJ•n4QImºâRdTA(EÚ?±dö`Œ÷¥€ Xµ°Ò_—β@þp8žô¤økK|ØÇ±lÐ¥±.M¦!”zi™C%”'8qS1›v-ýP"×§C”,MÙPJ*]*Â*zw‹°*ýsÊ}%)\¹êiS>_ŽG€#@€ôàÊÂdìæXnèr/…^†^C0‰a†vƒú½Ì®/•Qtàþ¿“LXRÏ¥Zø$‰”âRN:¥Õ¨@^µ°Â7»49‡ÍmùsÏàpzt @¸õ,…L8¦z ñKN¼|i±&dÄ¥²£L9ŽG B ph ÆÍ̶–B7’ÙðÆ?þW “N8¬þrøý²ô8næO)G€#ÀàÄê@Ü ´ˆÏ †d9' E8þ4(5ŽÉUL‰Äàp8âä¸iYí›ÈPË_û²,?ŽG€#Ð@øpå…-PºJΑŸÂàp8È ‚ˆ…Ïc®ÊŠ+Hæˆs8ŽGàü"¤çH‘Ÿ;93.3ñüN‘ŸÍàp8ФDthˈKa¡Î8ŽG s#YDç‚Öˆ´¸$¶ ìÜ‹ÄGãp8ŠÄ1ªÞ£bÛ€`£®8ŽG  #‰„Q)òê]x†|hŽG€#Àà€Pr‰ŽÖôì¸26·åG€#Àà\°@.ÑD{AkjV\›Û^°‹Ä/Äàp8ˆ& ˆ´&fÆa¦ ÿp8ŽGà"DÒ (b­Ñéq˜fÂ?ŽG€#À¸˜€Œ"2h M‹Ãþáp8ŽÀÅÄTxâf—0Z]ü+ÄgÀàp8*T@X¡ƒ:·ªÙÜ–?"ŽG€#Ð #aäZ˜TRÄæ¶Ýð"ñ)q8ŽEò ˆ,0£“Jø‡#Ààp8Ý:Y°¹m·¾B|rŽG€#Ààp8ŽG€#Ààp8ŽG€#Ààp8ŽG€#Ààp8ŽG€#Ààp8ŽG€#Ààp8ŽG€#Ààp8ŽG€#Ààp8ŽG€#Ààp8ŽG€#Ààp8ŽG€#Ààp8Ý3ÿ?Q $û4)IEND®B`‚fifengine-0.4.1/doc/logo/LICENSE000066400000000000000000000004371304641216200161630ustar00rootroot00000000000000=== FIFE engine logo === Author: Urban Breznik (http://www.urbanbreznik.com/) License : Creative Commons Attribution-Share Alike 3.0 Unported http://creativecommons.org/licenses/by-sa/3.0/ Affected files: docs/logo/*.ai docs/logo/*.jpg docs/logo/*.pdf docs/logo/*.png docs/logo/*.svg fifengine-0.4.1/doc/logo/fife_icon.svg000066400000000000000000000342771304641216200176310ustar00rootroot00000000000000 image/svg+xml fifengine-0.4.1/doc/logo/fife_logo.ai000066400000000000000000012716771304641216200174430ustar00rootroot00000000000000%PDF-1.5 %âãÏÓ 1 0 obj <>/OCGs[17 0 R 20 0 R 23 0 R 26 0 R 29 0 R 32 0 R 44 0 R 47 0 R 93 0 R 121 0 R 150 0 R 153 0 R 156 0 R 159 0 R 162 0 R 165 0 R 177 0 R 180 0 R 226 0 R 254 0 R]>>/Type/Catalog>> endobj 271 0 obj <>stream application/pdf FIFE 2d isometric engine Adobe Illustrator CS3 2008-07-18T16:49:02+02:00 2008-07-18T16:52:21+02:00 2008-07-18T16:52:21+02:00 160 256 JPEG /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAACgAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FUPeaha2a Brh+IavEUJJp8snCBlyYymI82L6z+Y2m2DCIECdxWOI1kmYDYlYY+TkDx6eOZePRGTjT1QCWRfmb NbsrajbvbQt1lmETR9T9p7d5fT27yUHvXLjoL5NMdaCebKbDzZpd3Gj8uCuAUkBDxkHoQy5hz00g 5UdRE89kRr/mby/5esBqGuahBptizrEtzcyLHGXYEqvJtqkKcx29KdN/ND8utTEh0/zHp90ImiST 0rhG4tPIIogaHq8jBV8TiqHT84fyskultU816Y1y7iJYRcx8i5PEKBXrXbFXP+cP5WR3TWr+a9MW 5RzE0JuY+QcHiVIr1rtirMMVdirsVdirsVdirsVdirsVdirsVdiqTeaoedgkgG8bip9mBH66ZkaY +qnH1A9L5P1+DW/L8KTw3Dsk6hp5WJdmlX4XZn3ZviB6knOwwGMo8uTz+X1ZCCWPR+ddeaSNDMQZ hyhCuH5LUry+GtByBG9PwOWDhJ5M56XhFkvZPyW06+N5eNdu5+ti1YR1ISrvLzbgPh5bCp6+Oart OQFV0tyNETIV5vaPOOgX2uafa2VrdyWardwy3csFzdWcpt1qJVjltJIX5kH4Qx416jOYd6hT5Nls tDGm6TqF7IxvYLt7jUdQvriXhHJGZI1nMvrcWSP+75cCSeQIJqqhfKf5fyaXNb6lqOq6ldatE0xk h/SmpT2BEhdU/wBGup5VNI2H2hs24ptirG7P8vPzMsfMI1W31uCWNJ3kS2utQ1yeEo5I4tbvdtAa K2w4UB6Yq9WxV2KuxV2KuxV2KuxV2KuxV2KuxV2KoXVLZrqwmgX7TL8PzBqP1ZPHLhkCwyRuJDxD zhocUumXGm38RjkE872l4a8H9eZ5RFJWvpyKX4gHZtqGvwjotJmogh0Gqwm7Dx/QPLCnzAsE6kC2 PpcQCzEl2k4qoqWJ59Bm2nIRiZNEskpgRfS35daBNBcNdSQ+ggK8YzQlUSPigZl258mZiASB45zO uzAinbaLDwp7590jXdVsNMg0eaSCWLVLOe7kjkMRFtFJylrRk5DxWu/gc1Ts0BLofms+aPNt5HLI thqGmwwaQPXIVblInDFU5fuzyb7VBiqn5M0/XpfLvkee9juEuLK3J1Nbsstwpe1aMCVZDzLciK13 xVKv8JefX8l3umfWZotTn18XUM31olksWu0kJDhwQqpyb069NqdsVenYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYqlWuaBaapA6ui+oylW5gFHUinFweoOXYcxgfJqy4hL3sP8r/ljpun6ndXaWrQSTP8A vpZGaR6UA4RFyeKUUdP4bZ2fXExAu3FxabflT0KGCKCJYolCRqKBRmsJJNlzgANgvwJdirsVdirs VdirsVdirsVdirsVca0NNz2B2xVT5XFD8CVoKDmaV7/s4q3Wav2VpXryNePj9nr7Yq0GuKbonKhq OZpXsPs4q7lcb/AnanxH/Zfs9u2Ktgz90WlT+0enb9nFWuVxT7CVp05n7Ven2envirdZq/YWlR+0 fs9z9nr7Yq1yuKD4ErQ1+M9e37OKuLXFNkStB+0evf8AZxVus1fsLSp/aP2ex+z19sVa5XFPsJWm 45nr4fZ6Yq3ynr9haVFPiPTv+z27Yq6s9R8C03r8R/2P7PfvirRa4psiVoNuZ69x9npirdZuX2F4 168jXj4049fbFWuVxT7CVoa/Eevb9nFVQVoK7HuBvirsVdirsVdirsVeb+aNT81Xn5gXOgLr3+H/ AC7YaRFrE89nbJLeToZpYp09ab1VjCekp+CIt8XXFUl/IX8zNb86an5gga/fVvLumLbnTdTu7SO0 vZWmeVSJVgb0WC+hsQincVA6Yq9ixV2KuxVi/n7zXfeXNNhubS1Fy0zsjVqeFFLcuIpWgB2rmt7R 1k8IHDXq6lzNHp45SQTyY7+Wn5o3vmrU5LB4VliiRne9VDEKqaFOHJ+lRmPotbmlkEJ0b+f6nJ1u ihjjxB6Vm6dU7FXYqw/8x/O175U05LuG0M8TBjLMo5mMLT4uFV5dRtXpmdotKM0qJpxNVqDjGwS/ 8qvzOk87peFbZkgs+IF2y+n6rMSCAnJ6caeO+T12iGGqPNGm1EpkgiiHoGa5zHYq7FXYq7FXYq7F XYqwj8zfKXljzFZol7qy6BrkEUg0zWI5kiuIklAWVSrMglhk+zJG3wn2NDiqK/LPyf5J8p+X10ny q8M8KFWvLtJElmmlK7PM6d+P2RsANlAGKstxV2KuxVKvMtrol1p31fV5o7eCRwsMskixESkHjwZi PipXbMbVaWOaHDJtw5pY5WEj/L/y55T0FJbbSr+G+v5ecs7pLG7lC+/wRmgUMadOuU6PQjD6ieKf f5N2q1csvkGY5nuI7FXYqkvmqy0G+shZ6tcRW3rcxbvJIqNXjRuIYjl8J+IeHXLcOaWOVhqzYY5B RQHkDQfKOhaWNM8v3MN0YVX6xJHKkrmtSpbgTSu5GT1OplmlckYcEcYoMpzHbnYq7FXYq7FXYq7F XYqxvzP5QGt3UUzNZmNRHHPDd2MF36kSM7tHzl3UFzGw8Cvvsqq+UfKv+H4bkNJayzXb+rcTWtlB Y+pJyb45BD9tuBRKn+WvfFU/xV2KuxVKfMWhtrEFrEJIIxb3AncXFtHdqy+m8bIqyfYJEn2xvSo6 E4qlXlbyTNo1/DfTz2U9wlkbKWS2063s5GrKJRSWL4hGvxUj6VPLrirK8VdirsVY/wCbPLFzraxt bXFrbzwwXEMb3VlDe0M/p7j1acV4xlWUbNXf7IxVb5a8opompajeI1pS+EKhbaxgtHCwRiNRLLF8 UvGnwcvsjYYqyLFXYq7FXYq7FWnUOvE1ofAkH7xQ4q+L/wA8Pzt/NTy9+a3mDR9G8wz2em2c8Ytr ZUhZUDQRuQC6MacmJ3OKsE/6GM/OulP8VXPSn93b9/8Anniqd6R+bP8Azklq9jJqNnrd3+i4jwl1 OdbS2s1cfsNdTpFCGP8ALzqcVU9d/OL/AJyP0Fojq+tX1rFPVra4aG3a3mH80M6RtFKvujEYqlH/ AEMZ+df/AFNVz0p/d2//AFTxVv8A6GN/Oytf8VXHUH+7t+3/ADzxVr/oY386/wDqarnv/uu37/8A PPFV8f8AzkP+eEzenF5nunY0ACxQE/hHgMgObKMDI0Batd/n9+fNnJxuvMV5A9a0eGBf1xZGGSMu RtlPFKH1CkN/0MZ+df8A1NVz3H93b9/+eeTa3f8AQxn51/8AU1XPb/ddv2/554q3/wBDG/nX/wBT Vcda/wB3b9/+eeKtx/8AOQ/53yEJH5ounY7ACKAn/k3lmPFOZqIJQSBzXz/85CfnnA5SfzNdxPtV WhgU7exiw5MM4fUCERkDyUv+hjfzr/6mq57/AO67fv8A888qZMx/J788PzW138zfLuj6t5iuLrTb 26WG6t2SFQ6FSackRWHTqDir7bxV2KuxV2Kvz2/5yR/8nb5p/wCM8P8A1DRYq80xVn/lqzn84+Wd I8q2jpLq2jahd3cGmu3CS6tb1Lb1I7YmgeSJrV3MdQxDfByNRirIv+ciPMHkt7/TvKfkyGC30XQp J5HiteJi9eeOCNgZFLeq6/V/ifk25pyJrirx7FXYq7FWXflfrOl6X5oik1OQw20qMgnXrHIQfTf6 G6+2a/tLDKeL07kOw7PzCEyD1Tz809ftbyzgtXvvr+peqzSSD7KQD7A37nrmN2ZgIkTXDH9Ll9p5 o8PAObzXNy6R2KuxVl/5aazpema3K1/O9oZoGjtL6P7UE5IKybb0+Hi1N6E9embjsnOIkwPVwdfi lKGzXn3Wk1GS39S8a/v92u7lzyIPRUDdwq0y7tjPGhjHMGyw0OIizVDoxHNC7F6B+QP/AJOTyn/z HL/xFsVfopirsVdirsVfnt/zkj/5O3zT/wAZ4f8AqGixV5pirMPJflnRdTsZrzUF1PlbyM5l0+ON 0SCAIZGYua8+UqBabb7kYqhvPHl/Q9Jk09tHe8eG6gDzi+RUdJqKxjHBQrBVdfiBNa4qxjFXYq7F WQ+StC07WNQuotQS8e2trY3Dmx9EyKBLGjOwmKgqqyE0G5NPc4qm/nLyj5f0jRpLiy/SaanbX4sr yG+W29JVMchBDQuzcy8LbUoAOtcVYPirsVdirK/I/lS08wfWEmivZphPbW9utl6FAZ/VZi/rMvRY TxC9e5GKqvnXyromkaRpV/pw1BX1Brj1FvxbhOEUpSMxNCzFiQp51Aodt+uKsPxV6B+QP/k5PKf/ ADHL/wARbFX6KYq7FXYq07FVqFLH+UUr+JAxV8k/nH/zjb+Z/mv8y9c8waRb2radfyxvbtLcojlU hSMkrQ03Q4qwz/oUT85f+WWx/wCktP6Yqvi/5xL/ADsir6UNpHUEHjeKNm6jYe2KtN/ziP8AnQ9O dvZNTYVvFP8ADFVv/Qon5y/8stj/ANJaf0xV3/Qof5y/8stj/wBJaf0xV3/Qof5y/wDLLY/9Jaf0 xV3/AEKJ+cv/ACy2P/SWn9MVbb/nEX852Ys1vZMzGrMbtCST3O2Ktf8AQon5y/8ALLY/9Jaf0xV3 /Qon5y/8stj/ANJaf0xV3/Qof5y/8stj/wBJaf0xVw/5xF/OdSGFtZAjcEXaVB+7FXf9Ch/nL/yy 2P8A0lp/TFXf9Ch/nL/yy2P/AElp/TFWV/lV/wA40fmn5Z/MPQdf1O1tRYadcia49K5R34hSPhXa p3xV9f4q7FXYq7FXYq07pGjSSMERAWd2NAANySTirD3/ADi/K9L02beZbHmriJ5xJW2WQ7+m10B9 XV9vsl64qyhdU0xkSRbuEpIgljcSIQyNuHBrup8cVVILq1n5ehMkvGnLgwalelaHviqrirsVQD+Y NDS6Fo99ALg0HpF1rU7j9WWDDOrph4sbq0TJfWUZAkuI0JXmAzqKr/NuemVs24Ly0uCRBPHKV+0E ZWpXxocVVcVWySxxIXkcIi9WYgAfScjKYiLJoJAJ2CX2vmby/d3L21tqEEs6GjRq4rWtP15jQ12G RoSF/jl3t0tNkAsxKKbUdPRmV7mJWU8WUuoIbwIr1zLaFWGeCdPUhkWVOnJCGFR7jFV+KuxV2Kux V2KuxVD6jY2+oafc2FwOVvdxPBMvikilGH3HFXy95y1Dz43lvyp+TegWM9jr9sn1TXrOOBFhvLS2 SNY7uK4I9P0JSGaRuQPKqtvsVXtSflytta6VYDSNJv7Wws7DTpJ7lZPrLW9sY45VrTiU9PmwQmha lRiqc+T/AC3caPPfTTWOn2TXqwGQacZgrSxeopqknwoqxlAvEeNegxVk2KuZQylTuCKEYq+dvNn5 Y+cLnztb2OnzXUOm3jyS3kcbkW/EMTUGooH5DkNtwe2dNg12MYrNWHRz0s+MiufXuereYfJb6hcq /wCi9Nvoja21nNLdNMtwYopJHljUpRQlXVgK/Ea8ui5zcjZJd3EUKRHk3yf+gtQ1C7FhYWLX6QCU ae9xwZ4lpQRSn0o0XcIEXpkUsrxVK/NGlSat5fv9Ojp6tzCyRljQcu2+YutwHLiMRz/UbbtPk4Ji ReM+S/InmKTz4Dc/WBpemSK5jnJCqaE0r+1tsPpzm9LgOSQjw0QRxfjzd7qdTAYrB3I2ehTeR5JN XhupNE0WSNb57ySdxM8xaS4nLyuGHGSQW5i4cqhHLcaKFzrnnE48i+XG8u+X4tL+rW9osTc1t7SW 4miUuqtJxa5LSbyl6e1O9cVZBirsVdirsVad0ReTsFUdSTQb7YqgLvzDoFnMYLvU7S3nX7UUs8aO K/5LMDiqj/i7yp/1erD/AKSYf+asVa/xZ5S5cv0zYcqU5fWYa0Pb7WKt/wCLvKn/AFerD/pJh/5q xV3+LvKn/V6sP+kmH/mrFXf4u8qf9Xqw/wCkmH/mrFXf4u8qf9Xqw/6SYf8AmrFXf4u8p9f01Yf9 JMP/ADVirv8AF3lT/q9WH/STD/zVirv8XeVP+r1Yf9JMP/NWKu/xd5U/6vVh/wBJMP8AzVirv8Xe VP8Aq9WH/STD/wA1Yq7/ABb5T/6vVhvv/vTD/wA1Yq7/ABd5U/6vVh/0kw/81Yq7/F3lT/q9WH/S TD/zViqrbeZPLt1KIrbVLOeUgkRxzxO1B1NFYnFUxxV2KuxV2KvhX/nLz/yctz/zA2n/ABE4q8Vx V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvYP+cT/APyduj/8YLz/AKhpMVfemKuxV2KuxV8K/wDO Xn/k5bn/AJgbT/iJxV5BpMFlPqtlBfSNDZSzxJdTJTkkTOA7LXaoWpxV7D5Z/LvSfMHnTXvKum+V IjpXlp7hNX1O51KdNQUW0jRmRZFX6vyYxtxQWZG/xHoQqg7L8t/yvU6mdSuvMfoWOoajEt7ZWPr2 xs7Bm4s0yxlfWeNGc/sKAeRWm5AYkljv5oeTfKXl610eXQJNXM16bldQttYtXtngeL0jHGrekkUj cJav6buBt2IqkLE2wHAybFK79MIq91ehw/l/oSaNaNdTXh1TUIkntGijQ2/BlY8SeVTQr8TbUodj nSx7KxEV9t7/AKnVT10xI0BQQnlbyp5PvdPEuszawk6308M0un2X1i2S0t4o2Z/U6mYvLTh0AoWI qK89mgIzMRyBdnE2AVLz55Y8paTp+m3WgXOpyyXLzpewanatbNCY2pGoYL6TsRXlwkbidvfKmTC8 VRujWKX+qW1k7+mtxII+e23I0rvlWaZhAyHRu0+MTmInq9E80flp5e0/TLn6m92t/psRkvTMqiMg GlRQmnTpv881Gm7QySkL4eGXJ2+bs/GIE9yF03yd+XjaU13qE/mFJobGGeX0bBTC9zJEs8yxyOQB DDFNGzO9CQwKhgV5bx0THPzB0HQ9C8yzWGh3F3daaqKYri/t5LSdmFVlDQyJGV4SKy9+njsFWef8 4n/+Tt0f/jBef9Q0mKvvTFXYq7FXYq+Ff+cvP/Jy3P8AzA2n/ETirxXFXpGk/nXrGl6LfrZ2UUPm jUUS3uvMSMyvLAvI8pYB+7e4BbaY/NgXAcKsKt/M3mO2tZLSDVLuO0lWVZbZZ5BEwnRkl5JXieay MG23qcbRSnqeva5qvD9Kajc3/plmj+tTSTcWcKrFeZahYRqD8h4YrSAxS7FU8g85eYIdLTTUuW+r wh1gruY1k+2qE9A2bKHamSOPh697iz0eOUuIhAWutaxaRGG1vp4IWLloo5XVCZAA5Kg0PIItfGg8 M1pLlLLzVdUvVRLy8nuVQsyLNI8gVnNWIDE0LHriqFxVdHI8UiyRsVdCCrDqCMBFiimMiDYZHrX5 geYtX08WV3PVGVVuHH2peGy8jmHh0GPHLiA/Y5mbXTnHh+fmlK69ri27Ww1C5Fu6GNofVfgUKJEV 41pQxwon+qoHQZmuEoXt/fX07XF9cy3Vw1S007tI5LMWNWYk7sxPzxV6x/zif/5O3R/+MF5/1DSY q+9MVdirsVdir4W/5y6+P85briR8Njag7gUISvf2OKvF/TbxXt+0vf6cVd6TVpVetPtL2+nFWuDU rUdK9R/XFW/SatKr1p9pf64q7028R3P2h2+nFXem3ivb9pe/04q70mrSq9SPtL2+nFWvTalajpX7 Q/rirfpNWlV60+0v9cVd6beI6E/aHb6cVd6TeK9v2l7/AE4q702rSq9x9pe304q16bUrUdAftDv9 OKt+k1aVXrT7S/PxxV6h/wA406zpWifnBo99qt1HaWhS4i9aQ7epNC0ca7V3Z2AGKv0BBqK+OKux V2KuxV8T/wDOX9gr/m0kiKFMmmWxkIABZg8q1PiaADFXiH6OfFXfo58Vd+jnxV36OfFXfo58Vd+j nxV36OfFUXqXl+SxuFgLh2MaO1OxdQSv0YqhP0c+Ku/Rz4q79HPirv0c+Ku/Rz4q79HPiqa+VdPY eaNHPhfWx/5LLir9MsVdirsVdir5h/5yP/L7zdr/AOYMd9pOjXd/aiwhiM9vC0ic1eQlagdRyGKv LP8AlTn5jf8AUsaj/wBI0n9MCu/5U5+Y3/Usaj/0jSf0xV3/ACpz8xv+pY1H/pGk/pirv+VOfmN/ 1LGo/wDSNJ/TFXf8qc/Mb/qWNR/6RpP6Yq7/AJU5+Y3/AFLGo/8ASNJ/TFVZPyo/NCNAieXdTVR0 At5KfqwqtuPyk/My4k9Sby3qTvQCptn6D6MCqf8Aypz8xv8AqWNR/wCkaT+mKu/5U5+Y3/Usaj/0 jSf0xV3/ACpz8xv+pY1H/pGk/pirv+VOfmN/1LGo/wDSNJ/TFXf8qc/Mb/qWNR/6RpP6Yq7/AJU5 +Y3/AFLGo/8ASNJ/TFUfoH5RfmDBr2mzS+W9QSKK6hd3a3cBVWRSSTTtir7iwq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FX/2Q== uuid:DA67F312D854DD118B9382D307AB9C37 uuid:3c061617-c783-4f02-9e0b-953e3698edb6 uuid:D967F312D854DD118B9382D307AB9C37 uuid:A4C7FA12B754DD118B9382D307AB9C37 3 1 False False 29.999999 45.000001 Centimeters MyriadPro-Light Myriad Pro Light Open Type OTF 1.006;PS 001.000;Core 1.0.23;hotunix 1.28 False MyriadPro-Light.otf MyriadPro-Bold Myriad Pro Bold Open Type Version 2.007;PS 002.000;Core 1.0.38;makeotf.lib1.7.9032 False MyriadPro-Bold.otf MyriadPro-Regular Myriad Pro Regular Open Type Version 2.007;PS 002.000;Core 1.0.38;makeotf.lib1.7.9032 False MyriadPro-Regular.otf Cyan Magenta Yellow Black Default Swatch Group 0 R=46 G=49 B=146 RGB PROCESS 46 49 146 R=4 G=3 B=105 1 RGB PROCESS 4 3 105 R=24 G=103 B=195 1 RGB PROCESS 24 103 195 R=144 G=211 B=255 1 RGB PROCESS 144 211 255 R=175 G=238 B=255 1 RGB PROCESS 175 238 255 R=154 G=195 B=233 1 RGB PROCESS 154 195 233 R=120 G=25 B=15 1 RGB PROCESS 120 25 15 R=4 G=3 B=105 2 RGB PROCESS 4 3 105 R=24 G=103 B=195 2 RGB PROCESS 24 103 195 R=19 G=76 B=171 1 RGB PROCESS 19 76 171 Document endstream endobj 2 0 obj <> endobj 17 0 obj <> endobj 20 0 obj <> endobj 23 0 obj <> endobj 26 0 obj <> endobj 29 0 obj <> endobj 32 0 obj <> endobj 44 0 obj <> endobj 47 0 obj <> endobj 93 0 obj <> endobj 121 0 obj <> endobj 150 0 obj <> endobj 153 0 obj <> endobj 156 0 obj <> endobj 159 0 obj <> endobj 162 0 obj <> endobj 165 0 obj <> endobj 177 0 obj <> endobj 180 0 obj <> endobj 226 0 obj <> endobj 254 0 obj <> endobj 255 0 obj [/View/Design] endobj 256 0 obj <>>> endobj 227 0 obj [/View/Design] endobj 228 0 obj <>>> endobj 181 0 obj [/View/Design] endobj 182 0 obj <>>> endobj 178 0 obj [/View/Design] endobj 179 0 obj <>>> endobj 166 0 obj [/View/Design] endobj 167 0 obj <>>> endobj 163 0 obj [/View/Design] endobj 164 0 obj <>>> endobj 160 0 obj [/View/Design] endobj 161 0 obj <>>> endobj 157 0 obj [/View/Design] endobj 158 0 obj <>>> endobj 154 0 obj [/View/Design] endobj 155 0 obj <>>> endobj 151 0 obj [/View/Design] endobj 152 0 obj <>>> endobj 122 0 obj [/View/Design] endobj 123 0 obj <>>> endobj 94 0 obj [/View/Design] endobj 95 0 obj <>>> endobj 48 0 obj [/View/Design] endobj 49 0 obj <>>> endobj 45 0 obj [/View/Design] endobj 46 0 obj <>>> endobj 33 0 obj [/View/Design] endobj 34 0 obj <>>> endobj 30 0 obj [/View/Design] endobj 31 0 obj <>>> endobj 27 0 obj [/View/Design] endobj 28 0 obj <>>> endobj 24 0 obj [/View/Design] endobj 25 0 obj <>>> endobj 21 0 obj [/View/Design] endobj 22 0 obj <>>> endobj 18 0 obj [/View/Design] endobj 19 0 obj <>>> endobj 149 0 obj [254 0 R 226 0 R 180 0 R 177 0 R 165 0 R 162 0 R 159 0 R 156 0 R 153 0 R 150 0 R] endobj 5 0 obj <>/ArtBox[0.0 0.0 850.394 1226.66]/MediaBox[0.0 0.0 850.394 1275.59]/Thumb 270 0 R/TrimBox[0.0 0.0 850.394 1275.59]/Resources<>/Shading<>/ColorSpace<>/Font<>/ProcSet[/PDF/Text]/Properties<>/ExtGState<>>>/Type/Page/LastModified(D:20080718165220+02'00')>> endobj 263 0 obj <>stream H‰ÜWK®$·Ü¿SÔº“n5’½ŒÖ¾ay# ã¹?àˆ$‹Ìêê¬ÑÎô¦3X$ƒdF~Þÿña{ÿñƒÛ¾ûþÃööÃøóÞ!¹Bþ …+¯PêЗ7·‰/iOM¶šÜZÜnùÏ¿Þþ¹ý†¯Þÿþ“Ûþýõíýo¿ºíûßß>žË×õK‡>~ËÒw8aþ ž`ñ –ž`¹cßÞ?»ÝÜ.•šÇßT¶}½ÿÆÂ_6Ùþœ¥î­ÊÖÄï©Ö¶Ý}ãȯo7·;ÇÏ>¿á›špLó^3 ^d/iuQ|zû…$çF©¦=Š<Ýé2ùvÝàv!±ø=îRÁÉsØJu{õx—µ—´¶‡,XYÒ.Nw{À<ÇF9ìÉóƒ>n‡ÏȳóN–ÝùVŸø6OÌý‚Û½®uþ–Û´ww@¡¥ÝW¹Þçè¯øýæ²çfWþ}s«ÇÚõ蔺¶Ût¹íë§í‡Ÿ7ÊÏm)xD\4\ÒûPno>AEÅéƒtîëZ#¯Õ¿Õñ´÷ZCÄ´X½:ížsÑk¾ çg¬M¼{‹Ð~ ¼Ó²§Ìïs„«a4 V^Ä68;|(\}7å¥#q/.(ÒZ#ï/ ðи…'úhx\çåɆNOõ¸€nZͦ˜´Æo1\sÛšË{Š òVb`“²g¥fáŽoˆ@QµlµTÄKýfÌ‚£Â I!âMsjæ›Oƃ<:ùŒGã nÆKùèù²²§\C©¦‰ñ¡/†/žËž€^$xü[U%“]ƒsQv² y}óéäß^ö˜“« n~ºr‘‘0P‰“œ?“KáÌcx ®°_/#O&. rŠÐ«úeBâ ÎÒ€¤rx—VáRï+ÐËžR>ÿ^ߨ"%G ©Pjò)´×ŒÁT ;Ãøáó—ªô"$#5Ù#È<¦=ÂM2n ‚Ç­AÄ`§3?Çݲ†oܳ ÁkÏט ì d*ÃG¬v‡—:¢Ù†Ÿ#râ È=Z¨P Â+Ä2>Ã)óªÐcJ@Ò© B`̨–Оû†MpAÆ"5ˆ}-¶XÌÑÉâ@ãûƒÃ>8DLåEôû3èVÂù" ƒct2@°(tÈÓ= s|Rð«…ó5È™R<7Ÿ$ô›ÅbO n—Êks|²ˆ¢àÄâDâ+Hé¯ w‰yŠpè2=ãoï»@zT!à‘lh#i¨ Áh@M}˜Dï:*!@‰qȘf@î ™k›6¿Ç¥´2‘ÏÁ©“WdмΜ€º¬AHg Ï/ÔÄ•«é³ÚÐs·QÜu=A‘1#£æ£Š@íèú‚EJÄKQ¤Åþ…Hgéj>Ù^Ž=ˆð9|óƒæðdºfP3ñuS¡]ôú™u¤µ~ÐQ»ñ=P†û®W•ÝBúåUgçxM2Çšú¦!™]õÑSž¼§8h[›»kR6U†&~¼†³Õ b*ê+×+þlHÌA«›8[úô«ý)¬b/ZN'› |Ø7EÝBB‚Å€Ë'†Íº¶k\þEÿ-̉£ÊˆBŠå"¨ª¾¢!¨p¸* žßSÐ{z¼0) —ð¢¶Ë´ù T˜h@¾ë¢ÅEJý"IU;ǦvˆyÚœá™\&òÙ xªL/ÀЧdbe®ÍÔ¦¦Ô<櫦ˆD?%EÓ§:%EÛål$…H»×¦¤h—’§¤¬Ý%u KRQßäšµ,ßÅ®âšõn¯áxº¿žC–<`—“¢pQ>[AˆÙÎÀVEÌŠ/N[âÍ%RÝ'ée/A¡N7QïÆ ~8·æ2t <'jŒªŽ¶€‚ÞfЋɈ…jæŽnÞuu©mÇž:ŽÙÓäê÷7H­›ØbWwú´f÷1>¸õÙ'î÷sôˆiÏ,™þtøGó[H:ðHB‘Ž-_gäñÁJÉ('œŠn¦ä‰Œ”œð`@zJ†Y$Ù” UÿÊɰƒÔ•”aK\)ø®IIÉ&å‰Ì<™^‘#`$ºsz|ž$чd…Ú±ÙÄ›’xmm…ô|õB€äWJ]!ÄØ#„ Ä„ƒ¨¹f­K­ì4Ï!„\0Š×ƒ˜ˆÛÆ”þ&ÚǬ(Ä„v´Qv>G>üHÜWwŒÅ{ÙÏÒ2“ƒÇó44¡F£+§ò`'ëÕ¥q›Æ®èΚJŠ3œ¤H—ÓÐ- 5óZÞì’Y¶‚FŽÚ8Q‹€DÌñ5ƒWˆf…Ç”A^ .Ïp¡À–O›q¹§È´d…îͯ+U­×Q»'áJNëx‰Ô±¼Ætr^“¯èIn„øâåàhC\b«æIXÊæ~99°?J<ƸUßX?A¯ár^þ|Bße¯" 8Ò™7>OzÑvÍÁ£ß¡9<ö;¦û\ O僥?j>‘³÷Æó´ù\£‹Ä@ž7Ÿkø  H>µµ×ͧ`g¨èù%ÌÁ¹?SüëžoÏíñ ÷—ŸD¸hJ¯ÚÎ5<@])§×æøä¤Wþ/I4êè¡þ&}ñ™½à­Øä5ž»Xã¤.¤l3€˜Vâ‚éóÊ[»g“¶*’­‹&kMàHQ“ߪ²ÍK';”iÓŠ3]ÁòͼFC˜úÇέr.^ÇhOUˆ™ fò«Ö5fÏSXiÊ< — «Îåv©šlA:¥Ít¢äW¶á¹›MP¼\1é‰w/ àˬ6TÛ ›šø®ye¦ñêUc>ËK(ñà†õ ¾WýâéçŸéÿb¹‡Žg½xÓ/¬~QWdõ‹`¿H;i5ÜûEÚAË¿£_$"£ƒd¿ÈMš_Ý í’¼é|B^ÈgƒŒöp1½C*œâ²<Áî ®S¦|Ô>PýAì™ ¢ÝB—í8úî!"£3 †hJSDÖî*:%#‹ð tɶz3Ú¬1–s)Cjô~=È(ê© Ñº 1ñ®r.FNDj¶sâIž´}k§]ym†Vw‹E{ÙKTâƒoÚ3Ši…Ín±]£EØøÑ.z=ÚrAiuµRËv¼gˆcú²{kgö~vÄj»vŽ–€Ž/~}úùçÞQ!´üJ"\øI(™©÷ø`æ^VQåw$ß…ôìK;øv¤_šâ½É¿\³^’ ˜vñ«/¤LŸÈˆ=9˜¼#ç.¦Wä‘òð@3–Dã׌%´S¶±H¶±v´±¶âˆ%‘¬`Q×´‚‰±G0ˆ &QUrͶ¡v‚6&…â¿kè—´84jH.NÉNé.q…@Ó ŠnJ¡<´EÎ757ü×ïÿý O ˆˆ„ÊN÷?^ßE)iÙØ†0°"Îû÷_ûçoùñßßÿøõ±Ç§PÐÜ8jWaÎB94½Ý¦4RlŽw$¯òÂ{)2yGGü¸Ÿa9VM\™>r’èœ+—s QòÏ‘³^í¶C`¨s Ö§ÆæAoŽ­Uä]"]JqŽ×Ù‹ÄÁòØÆöñuÿžsp‡š%# 'Ëó:CÏ!´þ¥Ç!ò%Ìz õÑ.·eêÐiÔå¿ëñ.9K Iø1X ¤2ØÏO7‹‡G]þF¼~á/r#5D6ƒ¥âØšUŠ^0¾¹‹u²“ww'{†w'Ûò…éîdÓieÏ„ÝÊÊ ÝìÝÊ6Ø" €÷b˜gԜؖíÄš¿]°áíB£ü¥pY>èüË\mDª\÷p<°Qó ãB«×58lü¸€ÒÏÔð×o'*RÚÝ‚N9NìQó´ÒþÀ…=l€Ù(z®ýÕtôtëšìtÍž`ºÉ nu²Æ SÕ†Ú¶ªQ6­NÔÐÀnu‹âRd!N=9Q#`–>œ¦1Ã0ÇÉwËR0¢ô_ Gã(LÕ$ qéÙIZr­&iˆã(&iˆYR¤a8ECˆ¨4EãñT4Ûr·ðdºd:í‘nZŠS´$©¦>ô í4?ÄÒ|{ÄCœ¢¡%;‹¾Y·&5õkW¼úÒMÓ/ Šã¶Á£hœ~Yúÿ¯Oèþçô åçú¦¼”·t‚‘¡<¥ã;PÉ1ÂtA×CŠ@à‹â ×Àqp åS¿ÈŠªQŒ  Gî†9©XšY>ÍÜ4,/_ñÊ~J{1Äý~¸“ɤ¸¸\¢!Äl¹Ô"Y"Z. Õå-EÄ’©i‘–LÏdÚ–“LÞÂÛ×5Û Zâ’ kZÆJ7¾$K ✳K&^U¯Ù%$TÿÍ@‚·æ@øÕkWª q~Í8~|Ò©¥î)¡—Òm-hàc¡c¢Û}¿,½¡Dåz™Õg§nдVØøXp~~07x~ó–ØûÃ/€ä7úÆÎ?þÍÏïÃ(UË5(§C®I@ü£Áâªð?n‰OÀ@e…4Ô»PycNõb ¦Õ{„°EÔlïÅ0'Ψ9a–åÄš¿]ØÃæSœ«˜:ÿò€yê}Ç52î¶Ö—kp.ìqçBŸï¯!ÞNhÔtÊqbš¬ÔàÂ>dáz—×þZ`£ÖÀojÎ&tÊߤo‹6CÔÐ^p…" ˆâBìžÒ…§˜à|´PÔ—:1ÕqZ;?5ýP¶áóªê’Oç廥 -Óúˆñb‘3GqªŠSè³8ô5úÜT'°šÎ MÆ…û(ëµàïhó(ÛRôpº$ú>â4æž .ÂRÊò2AaT=ñœQPìˆe=qx¾ y[fÁÉ΢¯Ä­‰g…Žð»âyôæÖ szÁyª)æ\ƒ „´Ïz‹ò§¤ôWÚ£rµGå'Û#$½”·„‚q¡L5ÇW¤’%"„ ÂÊé² ýY&Q£¼*¦r&®BKV\ØnŨ0gÜm¤œï†9¹ZšY>…·¨õlûùfØéÃo’~sY¢=âƒ8î¢Ä'..Ÿh1[>µH²ˆ–OÄ'Ÿhá¯PM•ذ„òx&”Y,¡ŽeƦ®Ù,r YÓOhÓ2VÆUUYM?ÜÉAœsv ÅËê5»„⣄ê¿HÒâÖˆÁzíJm!Ç­æõÆ>¥Zêï!þRÚñ­u ´-t /Måò±8D<ôvp÷ ®˜{1üÔ=š3c,Åó&“‚”MU~œLâ+ü+tR/:É?I'PtåN¬>ïq+ÏÔ ¢9¸ê³7°@×X¬@çÐ]…V)¢Uhî1b´LÜŠ+Э€~JwúXvA6Gß Æø&œ°-q>) #Ç'Ä%zB¥{Ba{⠸܄ m„[<„âð"”m9„b–•š\³[âÕ›O¨Ó’Ë}žÃó Îíùå©—%Ž=æõuÏ'x´ Ž£€S¿+>4skÇÅvڰ瓨íTœhCð÷É6ˆ7¬ecü"¹©`¼Ó[§°Çôó/™"Â4¦Þû„øäãràô gt{p,Ë…»O°áíAdïB=³\xk"ûÏôÅØ mŸp™¯à¶_ö{œߟÿÞ½T¼»»ÿ»A8Ãæ@Iдõkö¸¹€¶%åú>t0Ò`Ø@]@?+GA{™²Ç(]´ª†Òä6ä<€½-±Þ;¡È Jþ0”:y ƒÅ“LØ—ƒ„)Ÿß:’)3|Cb—ðy|ÅìÑç%ÔÛÛ1Nù5PÞ€Òþ|ŒéÀRk -  t 9FFˆou—ôt0HšÞå®ã5‰Â ³ƒRÆœ®Ü~Kêý1p·¦Uv+¢»ñêÓô,¨°Á^uyž’ùyl6D êŇƒ?‰S<¾K²ÅøllãÖV|T•3Ó‘ýäÓK‡xˆWõÝ)÷¾/<ý´ú¿~þˆúÿÉr‘nEYÙ%Kròß&Ì`$d¼ .¹q¥þbaí"®,'²âœæxFæ>õ ¦?-5‹›PöÈ%â†SlüTâÉr,ŸÇÒqÂÔÕ²]}·ìDáWAâÿ¨¯–Én¸¯Sä²G”¨ßÖÀ`à…½OÀãEµ7}`"¨_V¦ÑƒY èzdRbH"ƒä³&Å­ÜX_éÂ˦¼ö°ô¡¦Å“@”!Œ ¢¬5¹¢&¶B¥éÎ!/$ÚšE^3}ÆžvøRÎ6¯Žè¦\gž1øíÚvjðÔ¢Õå杖겉šVüštÉNʱwç“ïî ͰXˆxrJb¼p›µÿâú‰œçÔ€‘æ»Ó¨ k}EZî(½mùa>r/‹Q æK^Ãël€ü¬ÞÅIJ8¨Ç×S\ût3A«ÿït¢¸Òt²kï6ØÅ—-¦èª¯×°üRN±ïúKOà 0wí’w¦\cÞ%–rÎGæ 0PI®ͬºêÅæe†ÄgMJ‡MÔÅ7ïšr.žM )žM «gåÓªghB“C'Ê•ùЉ“',Í¡§™NÙ$íÜ…œ¤žÔf–ÚI}Cû¡Èž^Æ“héžN )žN ·ê(ŠÏê<æQ46¢ ð_VhÁp¶)¼“†"t2 d CxwY•0_YºÄ–F´JA¬÷‘ ´½+þù1µFo1ÂÞùÍɦôsˆ=~wfT´ þÜŠ{„—Ö¦FP@ï`‹` ‡»'ü òÊ€ä Dq &è—s”ððrïßôg_âìñ:‚‚ÙÝ~<þò‹È"ÌŽÒ1ñhöY³uYlKºÝEAÉÈËñ9²¢;å;GN Õ2w¬¾³ä:J_$þmÎú·ITCcs˜=,ðܽ[Ú6P¥ld¬…Ú¿ÍÈ¿žÅ•…¿ô‚κé ì’‹åÓÒ(‹mÕ½£Dð˜A¼¼äÎ;î¯<áVÍmõÅÙ<ÓÙ·ÂÂÎÿuð÷“_Ä*WQZTñáS…5‘mF”ËFs?'hW:"ûÌÚ;£Ý̼ÝÏO¨ ¦ †ü~k qá]–.±‘m²,d,Cƒ&y@Mï“x¥"|Ryã0åŠÞ ˜¾:\TÄÁæl`N‹s:ÖðèQQñÛMᣡÿHí#BMqUÍb·-¸#eOžøJŠ(®¨IÇF¥[G±öq«à¡×‘ ¿ÝðŠýï,ĉ$Z9d y.L4ªlqº” vè_~¿ýã×?ÓíÇŸ·þ~›'Þ€ž…žQy‚å]V3ªU0ˆ€[–GÍ,w]¸Å DCL»Ï0Á!ÝÑñ)ú‚’RÀN¯à:ÛÆd瀡›ÄWWªEƸªZMÓ¬éÒ ýÎHloîh‘·ˆÚxý>6t˜jîùEDþmE:nÄ fÓè°nÍ<4•³b~ƒ•Í B,´Šä® ­†ê?§Aq&6k5DÑñð1–\Þ£EjÄŠÀ†Ó–Gý¹o Ú¢ÀH‚Ú‚Ý^404"SH ˜¬Ÿ3ÃÑ÷Íí›J´Ó(Jñ]0Æ…|cZlÅ6hÆ\X‚: 8“³#òqõÈQD4Š[ç’?>Л~‹å‚tPÌŸŠ¥˜ –ý°~Þ îž)0! û ‚Š&’”õî"ÖïC›”þtÉ¡ØFE9`”ù›¨YÄ„cÚl Û`É(”1ä÷@ŽÁ‚(í!þ £_ië²9ÓÞ!`€²È˜¿ƒ˜ú¸t‰%‡T¥åI£LÈQÕäÄÂÇ{X¼ÕBM³"KžÉ 夺e®È6s,ͧÓÃñé°~Õ ²ÎU©¥g“Cr“c¿‰‹ˆ M …Ú„b²Ÿ¥müŽë~Xjh­,äb㊗^fù+LcµÌ¨{k*8q8QR9ïR‡S2¾'L»vhÈ;ã cE•!³9Xòx{¸©ù4¢=>kð7ŠÛ;_^ñøI®ö„»]NöÁÖËÁF‚‰ñLy?‚íê s«[ÌÔk£•ù~ÑT>gU“ÐjS0Ð&=l{‹¶õóô¶×™»?>¼&åÙ`Ö€å`ˆ\0ܯŸ¸±ü ÿqe »I¬Â¼d‘|X$ÿ‹$+$îó§ÙDþG6Éhh…í„g“æjô6Ø5:ϽNöÖhÊÖ¿ÍMYjt5š»v[³FS®VõF¦œÅ×h6 ÍrtÕè£Yù`ýªYäÁU9˳FŽ e]±„59úmÍÐ$)Ò åYÔÉ&9 *õÐ ‹.H'”s:%Ú˃N¶fÓÉÑŒ¼´=OÚRìâ+4AI=ÚŽ!‡(—ìÈ„w¥â 45‹ l‰k»÷–|Wõlb/Nã°#c¡Þ²gxaø£ ÜévûñøË%\ÂÜ[seòà†Ð‚º„CËÇ&bô¸»„ÀjroìkÕèFØD}.û»pX-´©Ýaq\º£€ii"á' Ÿ\¾¤1‚%¡¯ËÝ2vjîDª0jtÁIK5ˆwf[(˜¤Ê ¯yë+ŸÁˆ‚Èe‡áXœã¥Ùà†Îu˜/ñ´$+DѾ!ŠÁ!#bϼ›„[JH l«©Z´¡Â[á+ätör 13 ²æ§‰µY&µÀÇ¿»“ÇÊI¿")$Sí ¨é2 ÆÌ›äE¡:¶ÄÉd;—„¶¢Š¡¯V9VˆàšÚž †[Á©¢ôˆñË}†P»D1¤“"ìž6B½ dôöH[ÒŸ„SpçØ˜p*Ò•cžÀ’ ñ´‰×Pª1ÏaÔFiXˆ¡ RsZ¯ßÎ&!bº&‚ É tFüØ1Ã;d"lŒØÊÃ^ªu8D&špÉoaß9t؃@î€QðêWé¿ ê¼+€—D”2âî l䤄ÜBƒ´pßÔ3±F43f`-`‰÷àl›F½-È¢LÐ<Þ])èBC¬ñb –Êmž© qà¨)Ï4nà?«wÔ °Öüñ‘f-&ÔLq`œÅ³U Ì\tÀl‹ &GöðÌ\r“ÙøÿÍŃ …­WKÏ÷¢ʶ8Pùh1rî”å¡”Œ hâ°˜Q;XœÅƒªoýĘtÀ‹ ¦–q½‚i0lÞ;/a8‚v1í°MBãu-`¦AèéÛxzvÞIQr(½¨—cfjmˆ‰ ¢®÷DE0–STD¡4• s2ÅeB+[Æ]¥oͧӀKÏs:x_©@ˆ:f´>ò¬Jc¯¡¢"ZA ¢GS,¹@!ÒÔöMP„6÷èØLKBY7?è˜ÜX„É4Ä¡êœÝ ø÷U’$¹ïzE ˰ƒ|O]KºÌÿÍÆ=€XÈd¶4ÇÑ¥*É%ÄâNZ€?niÉš$ê²ÄíÏ:ú”iGc£t¡›Éæ}½-ØÃÒppuüŒ È} B@€AV`¦Ã-Ï-¥ÚæÓðœyy³æ“—ËÞŒ I õO£ÆNžr±(çdYþâä„…ygJ¼—»HÊ”¶~·—’iþñ7(ºëZ¦à‡ÛÈa6äÄ‹ZtLQ‰ð™Vím‰” „.}4úÎvMö†^ÿ]£ eSn—äëSÆQV…Ñͬ0”Ž„pŸ PWˆ!þ `äº6˜Þy4åIhF¡ýÓÑ›¤…¦É~zòá'a¹>ú‰„gª©Óå[gkó•²’@¶çÆzKº<‰ð], $Mmæ ˜^cÆì 7³œžƒÚÊ핃`å Ažƒˆ, Ÿß1ÎÍI¡BÐÁ2ª§ŠjœžL<ö¨=æ /pÖ˜‚|ž–rœ…f‘F\qÔËuïSø‚û§¡c'ˆ€ç`—Û=üi HPÝ5ªsìjS’ô?#”Eô© Ò#cÐS|8ø–RšaŒnm«8°vúv÷ÐêD¤ø*2ßwÚ&™76FýÕUîgú¾”#PÆ~ûPŽˆZZ» ùf{*—ßÿKA*—‚Tn©þmA ¿}Umg%°`l`M×Ù@€Èhæ5g±ÑŸçÙÀû:ÈT” Õ±^?:zÙ9,i5¬ñ»·OVD:˸C¬À˜©{!"ÐÇ ‘\»"²UPw!­‰ µ:D¤¦éuh@Žîú¶êÐXuÈ ¯CˆY, ÷P‡èL:/\€ÐQC½3E.À-¹Æ:Äw¨éŒ…ˆÐ9CµâÛ#¬Ë÷.ý²7cbU™íŸÆŒ O\ÔoÜbY>2ÓÜK’?¥ï6îÒƒ}ˆÿÌ/¼$B÷2ËJ¯ 1øªˆÉBÎØ/S´ÏÏNw s©Ú>{ðªrF_ᾃx0܃7ïg¸»€”Cn¸¡DÁãÕ§°à ÆW™«V`M”N¦u¦+‰âzƒÑ#߆+‹ÛØä÷ƒƒu³!ˆñУ¿¼À!<Í+W;ÉFÐO¼ª\Î@êóˆÂ#PÍN¤ÜÙªã( ¨k¼C 5÷<#v ­íhtyù cÁ,PÓì3Jñ•{`9rðÅE€£T™ ŸÑü+ùW&J]衈DA™äq¨iué¬<[è5Á‡àNèwwÂí…ÎØNØgóbTé(êÅq|¬ýæ"ô³û@;ï7QÝ ûnNÞ¯¢_¼(çŠø7/öóØaàkÝ°Ïæ{Q›¿ó‚¯ŽÔjuˆ¶AÃ,!,k…|Fsr¬æ`έœè˜í† öØÐ`bãX4 —€YPоeMlE ‘ÿÁœ¸ÿ†ü;Y/a÷`s^-E‘Ÿ€ÀÑ™Y޾¼«ºçÄÜ^ ;—e³9Â^'‡µnO*Šƒ eÈ¥‹}s"δf°}KN <#·¢MºB»Êõ¸Ýl† õrvñÓ‘‚ú&kÂ?Ú ”JvíbŽÒ¶›ý”ˆÐ ¤¯LqÚã˜f¯7Aܲîoœ5ÌÁ‘j\“tf\vÅz níÀ0·ÝæÁî,w„T.ç~üðBž%ДŸ`…¼x)vèào¶ Eýß?QÛK©kw½È>ÃM>f¤9£p_Üq^R¸€ÄYâ~ëGÃÓ+‡ÌГŒ˜X¤§Tes•™5`G,kž‘7Ž&‘{¿ ü¨k™á°6DØ£f±G‘T¡Ð=hˆXšy,»çžÌ µ¿¥PI‰ØÈO@4UâO=},“úÙ9ïH#¶æ#s ö:ŠåYBnÁî5äìš/¹$!·Æ!õÍr+Ø;·ñÜ ˆ)ÖÌ)äw9†9X²DàIFH.Ü)fH.\×1.ÉÅwI!¹øl-¬É‡M—äâÓ\êw°=¹2 ÿôwAâ5Î¥sá'¤Q!h;^“R’ \š%â¾g±¥½nû[6ià>boj+¸Í=¾ÿˆHÁÚ °©×lmÿa^„êåZázŽ«@EB³*åßQYJ:P½Ï·Ò¢=Û¿kÓ&“H»%¯¦6í’Na“»iÓœ¡eÓnÒ“WϦ]êa™vj¡e£û@óÌвÑm~> ZF8+qGª’–-,b· ‹Ð¢³Za¡=R³ÂB»9"¬ÀZXh§Ö¬°D»Ù A¬°D„ *kÎl L›,ÍS\ü:+r’Ú¬Hðä »¡°ð¾Îê ß!ϦàÝòKâ¹g¿lJ%âuÅCݶוD½ó+ÉÌüë×¾ÿ2ùPZFùû¨. ™[ ꢀ°1|PìxQ]@ì~µù[u|xTÁ C¶Ïê"x±Õ…zñY]|ºûl>lõp½‰wuœØêârÏê¼ø¤.Ü->¹aŸÍ‹­.~ãÅ&áÐÈ…êò=ª "©¶ ‚::]]О&.hõÄš]\Ð.ÙÅ…Ú..qq \-h‰€WÅÅ VDÅ…ØÍÅ…ØG‚L›º‹ ÚxÖ .ˆ 4›˜ ÝÏ~±g‹â‚/RKDzvqA{œ&.h3Š‹Â^Ð]\ÐÎÍÅ…Ú..qqás–¸ð5—¸ˆ».qáni\¨Ûnó`ÅÅzÿs ° ø%¯žÄ…F¬K‰‚¬n©ßÒ\\ÐNÓÅEÉxÆáâ‚v?\\¨íâB‘Ÿ€4¬´Ä`™´ÅÅ cT\Xnmqrk‹ Ë­-.,·¶¸¹µÅ…åÖ –[ÁÞ¹¥ˆçV@$H·¸° Þâ"„ù–[\X¢lq’k‹‹\[\øœ%.lÍ-.®[\˜_êw°=¹”Åë+|Dô8¢¸([\\ÐnÉÅ…Ú..|ÄÞÔVP{íáâ‚H¯..h×QÂËvqG¨ßk…ë9>ˆ‹EeQ ~/-wqá=[¢÷lGVÏVq±zöÒÞ±U[hËVm¡ yk ïØª$¼cb ÚÜ|@´Š¨¶¸!ÕëŠj ­+ª-¼®¨¶Ðº¢ÚBëŠj ¯+ª-´®¨NкíÙ¢¶ðºæ§j Í_Õžáª-´¨¶Ð¡ÚÂëÊÖ^VT[ø”¥-|É¥-â¦K[˜[Ûí`‡²ÂœZšÂ“ìbɪ HД!ÅôHf„ÎÙwšõ;T¯ÈÖž&çse ǾZ"Eĉ&ó5 X)R›ê•¡† šßöµ ‘F²Õʵx•$a¶ŒÔ{1/dBþ¢²Jùa;ðéVxØY'ž2!IÓÓ$dtc׆Ú0Cõy©wؾNVˆ¿¨`ÓoHoóŸï•ķĪ3¥‹' ,BçÓQq¡§ÑÛÍ®•îWu¿ËËmÀÞãñnÉŸîVÏ\C¨ýñn±ÿ£[Lƒ·ØËåì~i~‡ëÈûsþÓWK<…N’a·L̨¨¨hU„`OGÌÅ‚W%Á@—ZÙØÑ}òÊÆõs2;jŸ˜}fJzìÙ¯†u‰F ºoC’Ïÿ˜;Õ§ô½Â)A^(FÇX«ªËÈ·éß6½~*A9SyN|¢——ü°xnâº"|m¬‚›ó”©ùc<Þñà·§Vvp©#,õ¶Ù›?oç¢â:ØÚ¢‰ø"CG( ‹„ºÙç*-Ô­£ƒ#Bh¨/öŠg*_}ŽSlú@¶éX¡5˜äMh$¶Ão´Ì“SPìº^¿xÒl^èWsBíƒWô³y0*¶¬æÁq`B±Q¸ûl.ý‹I{½‡œ°æÅ$º^C½xÁN(œG½ØcÔ ÿ®nHC'§úä†07#å¿óƒÏ*°Ø_î‘ý‹‹5_ÎõÈã«ÏcÑ¿œ/Ž h·¾lsÚEˆCújKaÕ¥“pLðY˜³/3SŽÀþ/íU’ãZn÷u ]@eŽIrkÀ0¼èÞ`÷Bß›¾?àˆLù¤ÒG7Ð^I™CÌ!¢:›òdæy Ÿ¶Œ õÈOÈsVíõÙSãö¨Ò„Y&e”…DY+=()´cšÚ90Â$€IÕ<Ò¦° CGT1éYq ÞnkB4‰wþ¸x nZ—SWBOê¦ÅH|7m X)L²–¢£Nzg¦tY¦½H©u9ìîŒ÷Ï x±œÜzàP#^vÄ«—î0­¨X˜ÍSùså¶"nÁÖKä'Y¬ŠÚq¦Ê¨ôbo-•ý_ê¦Ð–¬ò6uÞX¶êª¢º*6ÓU*ÜÈ MW1fAêÔSìWÿd,²„ø9B­\S ͧÔZ3GÌ€eáHZ1“{<9HhwÒxØ”´«2mÔ Ó¶ðdVxDlFT‰ƒ¸¦ mÑrÚ_Z­,¢Íópž¢k<ÔWÏÎ$AS•üìIãäìNQ²’‹vî>»„Ap’KH9âI.؉1t’K(FòI.é¦ÜVr9Û’k9Nr9*—”qvN݇:aõz’AÏw®4Êœì’ wÕgòXráQT‰® x³è’‹¯*—tæ»'9˜V\,ÌÎ>É;b ɾ„`áòæÚº’U‰Œ(U»ÝòÓÝhð%š/D[_tÚ_ºùê1÷\ ,Óvøúðž2l„-€ a:[˜ýõq@œ µ­p=Å×µ® 4³Xó_[WŠÿ{­+åOÔ•öçëJ Ð_êÊnÙgÀjÙ) Ûp-ûx¬eÓî®eÓ–Ø]˦'7Y-›f¬²27skÙ81¤Ys-{{vƒÞP¿ñ¬"B^3z{öœ½©Íô™e…v—âÊ =mµÔÚ•”mÖÚ9$WWè ¼ˆYWR@ÿÙuÅÛÍ&LÇ®+ÞÃÕ%è3‡uÓš\–+… c×=ÈiÚ¼¿à›6/Ë^mÖ¾Jg<ž,g·ÊÖ¸nÈgwˆVT,ÄÇ>U*ì#£fFR:ÍBzŠäA”V ±¢¯œÆd¬ŽÑØ1 .¿Öˆí‘Ðs•3G…±¨Œùå¡„|ýÏN!9ÅT‡föÝÙ6j€“!nk.‘ÿ‘éÿõö·ý–o¿ÿvûǯ·z衊¶ƒ +ü¹q êQ¡12öˆ r³M9w …Ï$5tÞÖù²¨Ä&#ºš@ ¥ƒ¬\‘‚Ðz>ÙãaòŒ¬Ð £"‘$ÖZ«ê1ç'lüˆéÊ=r€8èòôÿŒÉœ9¨Q^Gþl"ðÒï³ñ°…»ÉÐ=Þí™gzèý‡”ß¾#N_YPIïƒdº7VÏówhÈÏ<(9{ l~™$7Þí –TÕ¬÷+å³µ¤%Hp‡†rZ'ªt\ƒÝN³ÅiªùâA9P~äO„¨jq4Ög\g[|ÞøŒ¾„=ÞF.£!Ô½ó×bš‰²…¿$€kѱ°“–¼¯ay’óœ­Þ „±¡Ýî#MûòàH—:ñCC*FÓzóþ!E‚Uë¸C s(pµzD6w7„YÒÓ8«¼ G5>„ÛS%ÑjPJÍïÀ£;§†ƒê7ˆ²vßôbnIBn·ß¿þûó‰K)hÃè!÷lÜÜP8x}mÒµ&æ5ûÜÀÊŘÞ#é„=¥°éLîT¼xÆÒ¨>Ç@â'õbÊ¿?Š »ÞƒB/w£Øß7Ží™8ÖŒcß0ðb•]|°  Í0×÷w±¿o]ŒD_n#:{À†ÑHãõ6ä‚£’‘;.sÌr, 8ºáÓ³€ m gÀ¨ú)ŽR”¥NV—Õ5euk Ž5€_оu·fñê a8 1[Pi·d„¬¨VÔ€S‰Šj‚‘´“˜¡igsNûö<އ‡jÚÕÒoZ)«6Rþ¡Ú¨¿ØK ¥ìÿR iÉV­T¨qÙª•ôkÄÓJR¯Z©W“H¦V*$+“¨––§JqY••û@Õ:3GÌ`eÑ(ÚÓÚZ¬ó0’h3õ `FaX¡ö&Âã¢#™oI“´…&˜©Ú•%eÚœ!óö<œQ== é«ggfRï)£Ÿ¼¢]ÛÉ+ÚA|^‘þÔ~ò v~ò ä­ñyÕH×ÇÎ+˜ZüW^9{æÕòì¼r R®˜ë‰aî9ÄG9PEO3¨?Æ–B4%G—W¸+­;¯àÏ<^on½¢‘çwd=IÓŒŠùØ;³J›N§Ð! hí rmZÙXøW¯Öç–'Ä™Q ?ÉThƒaÒ¬\ÑLà‚c°u®ïsÇ=}Ù¶Áׇ÷Thœ³²Œ}cï`¶maÖˆÚV¸âëZSFµò¦¦ÔSSê_RSÚÿ·¦TÔâKMÙú XšB˜2»U{{5íšêîÕ´SÏ®WÓ4^­Ws—žv#¦))»VM2†oÕÛ³ó†úgUÎR¨WO¤ã=ÙѲƒÎ|TÁáÆ éCTô½Ž›%HÅ–ždiç (¨µ˜.6_Æ&&©ä¡ÄFr¿ui¼èRâ¨Ü9¢žü8;S!WPbââÁÁ⸀lC-B"´áÿ†‰-JM -:w+)léŠ •Ê&T…®Ø¦ÁÕæÍáU@m :J+C=`Ê'Â3 8Ö/Ü9ã™ä.AÖÈÓÿ3†½AÂMä-bA  ³x{æ¡àÁ½²üøŽR˜¥·È$Б)ôrùë(²²!Øãã<•Äï \dGj•Éxë°yÇò AEc¾%žKãl÷¬_){UÃîïçQ^Òð²,ˆAü”ãTã8+:ôs⑆>uÅ­[ÄNOž„ŠN;‘²?‚Ó< ÚÛÐþÆUõàÁ×í:Ì–¢f¦d1“ãqHf°9ÎÔÅ< 談÷Õæ¬‚N~õ.ÚT2´ rpTµK¨J,sÆàÐJ\ƒŽh]m‰¶ˆÍ`÷W)3ͬ·#J¼%Ï êÁ“´ óx†Þ—‘È’Q¿ÑâtSHÚ¼yƒŠ:J;GïjW±s’Ó,Ûž$ñΧÇî¯&qsP(ZtkâY™*nS<üÿH¯–Ën¸ï¯è艞”´ 0²ˆ÷p¼hæÿTQR÷ÎØ“ÁÜâÑ£$‘E’·yh-Ç8´ ó`³Ðq…EA%VØqés×Õ@$k ’6 )ï†A^ðîb÷?Y¤¸ˆâ0ˆ µÐl\ÿPÆÝ?´Ù5ÔÞWûpš‡†LRj¾â*iš x8Uš5`9,âH" }zâÍÍm¸;q Ä 1²³bõYy8bqIq€DqÏîðC¥JbY>%c -wÓWË ¤Êb÷ÉІXd×j‘E®È‚¥VYÀÈ‹Y”µrE¯ÊÄŠ,_¡[d9¼"k[,²œE]”Kf1榣z'‡¢laÀ‚q¸Ðù -ÜV WhÁ2r³9Bvkò]óZ°Èp¼¶glÞ[hµ†0&xðB<âörÍ]pÕ…òIÐY„— ¬ ¸c.qéà‡n’š¸kÓ³‚aîñ0Z¹«vÚ ð p¶ÇÄ7ca#&˽Â}ŽÇ­+£Eò·u%›®äוáÞºRŸt%^ÂR/aé·°ä?Ó•—IéYWN¾ÞŸ-_®}œË×΢ù¸µjù¸²Âµ|=úL;_¦‚•¯±io'}s¼|IÕ¥ëOn>4_-GAFÕ¢åÉ"Õ4…8ÓàÖÄk ,’Ä4¸d§)À)¯)£ y&*À½5‡—¨l‹‰Š³hpmï,x¹«\¢ÂÒ-¹ÜÊ“ˆ•!^PpW­e/(|àr5¬ ·ž4\‚ÂG'(Û)gÃ&(pdü½}̾"cb*½±*éYÀÊ®ç÷¬ ξ"â²Sáy°C XI»¯˜ CÕˆ¼"¡æ-«€å^,`›õ!uÏC‚çq¾Dzxì›Æù~hԤ¹iÌ  I¢øýÛ8ß‹–õbïÛˆŽÆ`4 nè¯Ûh7>[réàÙæäš¹3æ£TâKã~²æFz K%”Ôµ ;09oòXÚóU¼ø*÷á[–G­yãØ™7uØÙ«Ì39˰CØŒë6Ù¡Nv5h«óìÀ* Þ`óQDÉ1¹ÏΡŒâ6ÕºCÆ·êÆ´%“º—q“XÇÄgoHZS&å¿p‚뮉A0ù÷„ºÇñOü‘ä¹/KåÜúÛÁ¬¿Æ8r,˜J|"Þy,\¡–Öö3 %F„TVL]”-Y¿—Ö±Š!ÎA~À©†`Ûòé,uÅœ}µ 'iÍ’Xž,˜q,ŠñnÄ.¤8´‰KZ\øÖjÁ>ÄäD\CUÒ\Q´>fHôœÕÒG@róAQ6\õòç µ ÒŠ-+O³dÝk¢e".¨=tW™ÙvñdéH j¡yE”7¢vÐ|„é6ÌË+fÐËg1}ÒšÜvúæ-BÇ'ay¤YŽY³S"ò)Ýz‰)Чى­ïf‡?ùFyö6(§o¤Ãt-ÿ3²(³±a×âq“²ñ;Û‰‚¶=T; TÓjtb$ƒ«ÃKÔÿdt˜ }Ñ»ºC …Ò†ê˰<•j[ÆRµ³ßŠO–M&n™~È\Y׬°5† ¬Yha±AÌŒBŒÜ“}è‚Ï‚qãOí\å«eG'¥Ÿ-Å,ŠW 2žˆãZcÆ-lw4¸—k¾JpY2cé!šáÌÂ7&Fu¯¸ÓPŒðý63–'A܈µçYÁpžªï,õ¼­PÑOF·ÇÄ7c±G˹Â}ŽÇ-)¥ÂÇÿ®(ñþ?šR/MÉQSТ)¦÷KÓ¨„ niÚY4M×Ü,Oç}ž®¬„ÊÎÓØchžZy¸IqyºTÜt‹.O›ådåÃôÕrT¤2Nâ³¥$Óâ—©+5ë8]¥{]–VMW€w¾YºKr²G1Y9øÈʶ˜¬8K^›æP,|kª>ÀY´'<ˆ—ÔËÌC¯KZ÷²Kw>[ð²Â‡×¦¢Ùã°ZŽqX6QaÃÁÒ¸Cµ ¢õ>Ê <ˆƆ¡"wª(}óøRfn!Îrc:JÔrÖq³:£¦?5Q™š"‚¤±ýá0'–ø_Ö«\×’¤ˆúï+ÚìFºMî‹;öÃBÁ4,ÝÆàñõœ%òV½×ÓçÞʪ\"#Nœ8–®Ó,°zë%#;Ÿ-SÓ2]'ƒÎ£ÔBÐ/fZÛ^öŸ€R·ó ,OÀÆ„ŠiˆÖuƒ™áÔÕÑÞŒÞón¯Æa¯lÿìqIÆ“Ýa5zê²îßézó߬û¿x“:ø$à9Õ ;Ø„ XùÝí%ý öký>‡y‘¯}®U“íO}w‚3R/­ ÜÆ±.Ov„¼ÀŸ‚QŸÈï.6Ø0ffk±DÔó½ÂÜ™¯9wãŠý=XÓ ”Ñ‘‚ûþ˜Þ‡dØ¥®rónù«ÎgNìª2}ÞVèY©ôÛê™h-ôº¯äeõ{kÁ½:j%ûÍÄ%¥¬ñîùšÃóvBÁ‚4¢b(Aß78IJt[óE@DíÙû2AÍÕAwý{ÆB"”‰ÂÖ ®HæÇó J*­øáõ%©ÞÜ?üëǯ/¿~ͤÈxýë P‘’S)Ñ‚+Ú2 «áV¯_^>–”֧׿keöÊßüÝÏŸíãŸÿôõÓ^«Oå|úáçOëã_þýõoÿз߼ޥ 8kwx´¡¡e¢?¥ ø4wšPÀ)-6Ÿ©(Ð}ùyƒÏ=¢öhŒ ÅGÑ “ƒ”})¨ª_ÑcoNï¢&JâzVØ"DbŠ¿R$€RרŸÒª•ÏD=æ¤Êß]´°[¯æ5½‚"ˆc¤ MZ|KïïZ ÃÏ„ÀÝ9å,ýÒQCî*•¨äœJbù¼6]X:çÎD–åS³:<rÖ^Å} ( ïŸWšEqë¥Ù*ú(fÈ´€£ÎÌiÚ¬Ì4¦ ˜³Býø`†äåáDÈ1;¶I`©<˜T™:˜Â- MÞH ÊLÏBú0l/0 ~Bç/‘+/TxÕÝv`†{Í1(æ@Šb¯]Nl¾L„©ën•ùÊŽjHš³öåc kL¿q>‚@g À ð*3W÷¥„?ÚyÁÛM1 zZ>;›¡à¦å1ôPQØhUå TÏ+…×ìU''Æx+xáz¼¬H¯R¼×Æп,è {åâ–p/Á{És}ÊRˆÇ—ÕhpC€½°oÆÛçH NÁ–öEO LÖ–m6ÅoxbiZçhPƒÁ¬È\lËŸƒ ‚2pîÙº;§Þô±bžÝšVd°“•wF†œCTÐŽF΃ÓTÒìwr±°¡¡FNë7ªk‹R«»"×W9.±«e;æ›.—·²ľ-Ób™þ4¢÷ÿi:*šŒâ=óéžhļJ ̬È#ØÜwÇY$øÆãÊ]XU ¶ÁþAgNÃ0>/(íHÚ•‡‰÷žhQ¶}JRP›ª¬#ÈW]‘ÈbƒdĽ #ir³ïD‘ôš3_œ“ºM(©ëY‰´‚´q,çsi%Ø GL3a[ÜjÊxb~(C<÷nz™Íc‹êǬá-Q%ìC¦Â• QF»Õä Æ¡è¼¢Ø6 ض9î²k¹j@–’ÂÇ€à#*›yIýÀÌ6¸ùeˆÇD¬‹ßL¬­ÊÒºÎÄÛŽ}ð´i³FÒ`<ƒWŸ™—¡¿Be¬s æðí­ÊH£‹4µíFVQ°Z $ÓMÕu'‘—<ß&ó¹y«™uó8MnÅ&K€$j Öâ@¡K‰HÁ¶«Fb`ùò¬3U‘p¡«Â¡“ãÂ&=vÖ¬6¹×º¸¢*Ol‘ÄŠ3’ã(é¥ÊÒSÛñô!'¿Ø5c/M+ÇÑ ™óª—…»yÛu\Õ:¹*ç)Ú²-ÊmD…÷9Q,H㩪>lì Ÿ ,åÚ•¢Q¥2è™EÆôÍ *”&-ÅâŠrV ‹ÍoiºH4Eäl*¡Y…w/(‰»{î85±{Ëgs©L;ÒM[K¨“~e‘ƒæ$±[aà¨1âÊs ûº2k–ˆÈݲy#¹¡0¶ ioì¤ 45"`4áÏΣDÐêbÐvä1m~.ÙäZ¹a.5ÈuHùÞB®J¢M}É98‚ÀžÎRÖã91XLÚVž³Ô*ŸÁ¤‚ZE‡Q•­@Y5…¦:¤]ß•½É—ÖÚìu]îZI)$IbÆÌqЬüqe¯^zóçRÂa˜=¦Ô”½Ú‰ÇQßT†ñª(–o¥wu4kH²jÑæ¹‰4ÎýDŽ•÷pamîZ¹+o~5íUëª\­‚¬ŒÚS±¾Ìv¢[™L3ÅËãVÓ¥ü ›x-ˆJµiÏ:¤£aÖ1Û8¶}Z@§qíu·,Gãò§Îb¦èÛôÌAíSKŽ”î=·Pµte‘A4 ;1¤^’ÝÛÊ©öE>Fv1º+ÝÔI+…ÐÛÔ:ÅÐÊ,ÎÌj¥ŒM*H"²†§©XÛÀV/4·ÈŸîpv¥Vqý›c8{¾úÇ[5dÙ¸òT\V{®4!a¥,H©ý\¤tâàH6ŒŸ­šÆ¸Xxuo§*S$§¦uêŠÏ#”‰BuhÏÕM¢"žg±D\fÕÛ²¿´ ,=ÊŠ±DüÕ¢VßF0‘¸KxoÕ(_zóÔ5êáQ»Õqk’oÉþU¹Y3_²•­“±¨oÓh¡|²† *º­qeãj 5yÌí¦¶[ŠC3úùr2åqºµÓ…¥Cõ-Ô¾«LYo²»:*sË—tÑt5±§5€±`£yë'.o›v)p¥8Û?*Š¥¦³SP¸ÍLMhš‚gb!®ÂâœE|}Uõ-ÇZ|7 ù¼jG’]‘lWºòp ö©C²&!?Âe9”oUŠRûD÷‘Ù£\¬¿w9’Cœ"ŒŠÄeVš)¨^Ù|ŽÐ ˜ÒLñ”“# 3ÐÈзžbjÝÒæ†m’¤î|Ø}Ä[h…º Ýl«º8ª‘W¹·‚sS^š‘ºdDRŒjYÇ/?}[Ik*ìÆ˜¯7¥D!Ö•{3¹Çí—Ø’–Sc¶Ý‚ö·YqùmVýeè2ªy㻬Zë½µ¬\"¦Â8v kF†%Þ˜!»äÀLÞœfZ¹f`$‚»y{«š½qš1qao×US»Kç"Uø‘•¢‰MZˆßR®«4ézÌ‚Á,>¶^ÄãÈÚh‰K¶üV7$rZÁë}kRZœÄÊKª)êSf˜ägΪʕÖÍujËé&¤ÊIH«ý<(1\U‘µ›Ù”p#öU’_¤Çká~=sY)q\Ró%Ä$¶t,ô¶¥?ÙOlí üÛe9Œ¶'«d†ù|²ø[ÔÄHïæãÈ#Eõàh+Îc´ämÕ¢}èK.vCY…¦䤥æp?‹aWQžÔoˆaº8¹˜tJsò7à£ß*þ%⦢y„õZA‚8H ‚²¾ðá^ŸgëO,à*]¢Ÿ¦ 5nKmØt3®q ‹¿p8zÑÑâq¢°[‹)èŠÌÔ5`­Þ§H…vs¶@¾7­ÒC#àÂŽv‰úg3«rÚ*Í-âÏ…Ò<â²¢o¶OQ_ETë^î%«Š¾em8”:*nqpŠí¶2©4ÉÍÿ°].9rä0Ý÷)z=@ D}Hés³ëÅÜ3Œ*« xc;]J¥>dÄ psÎ QÉ †ÝåvY)ZßvÞòÒuJ]óRgäcð(s ä™ÐúÑÀ1¡ù቎ýê|Ë CxÚ«[ÊcûÚvÊw»žØãû¦œ…÷ô“Â4cLÔƒ·N,Á:-gÝ÷MÑ×lR—‡âáMYëN§ðgÉô™pC0s@0‡Þjëêö5»ç7¡MhºÞþ¥“¿;?P’Žiyí9Ø%á›1ÒBkœÂÌŠ§J'|Ãtj圄[h'…“a{Ô§i$X®S¤¹¨@G?Í Bkˆ3Q“[ãJbµS7Ê ¦kN‚=ÞZT¼­è‚w¦"ÂSÊ[”SN>N±:N=ÄŒ31eDáÚ/Q»Û}Ÿ/¨‹5…¤é›,å÷XÐve´{@Š»xÒ(–î^ÛMgºH”ÔŒöÔ RŽ*¯D°Y9Ùa*6JpµúÞ9*wR`Ú·Bî†WA*açOÔú3o¢ÌM˜[…ÞÂÁ D¹ô¹¬Ôs§öJ87Ì<:ºHGõáùÆß±Æ[R#š“HP_þw ñ†¼‚ÞˆÁXåå­ÏêÜW@Ï?¬‰¬iÏjàwGSd*ÙDþ»û-±Ž_Ôž¯,·ÛšN%ëXDè =·¹TRà sÖ©£þœNÃ8‰%5É ÓX=ë. ú±®Žq\¹P£dH ³&M—) åÛî@é@"òRbœRå©nq‹´ÓW(#=‹ÃorE4@sü{*}qm5ªët¶Ä2×-ÉÒ|phÍ·D‚üÍtœ{îϽ]uÔúh‰ÞŸFÎr¥lFëÂx›øîCòùO;Ÿ£¶¤`æfüo}5²ünƒ®ÐÂå.‘ÎóÚw MË¥±—‡*]Ê%²RK¹:j¬t¾åù`Âþý[•ŒSüä“+B í]È¿ëŠovB«Ñ®£P/·õ+„ §û5©³N½ÃS‡ò-Â(†õÆK]½œLöó„í¦Éð?qô:þ;¢2âeÆÇDVíå°é í°kU¦¨ÂŽ‹YQ6ì±öN UÅ´uˆ ¦;x|>MZ_ï“Êÿ5•á &ÑèëˆO“Ü7ñºr1ZÔ@ÏÊ)TñÀ#q!_ŠGþù‚º¢Ö)–B±“f Do„®½8QÏê›”ËÁª‚vü¡3EÖ•Ã:Û#HÓ8´lÞMã@¤†-íìΓõ®‡,ˆ“º5cºn>nÉgþ… hÞÔÉC©›~ÓQ"';$¾Ÿ_z+-ÐoÀílpU¨l–eñÇÊå7ÄDmók·86/£žv9©u4êÞ£êù’µüqÑij©6Õ+ u>œi¼ÊAúƒÀD£ßŠÅ‘Gí€á³Ú7(uõ¥ t:ïÌÉÉdX Ëd„AÐ]LZ ººÖÒ8OŠØdn€Õ¯/Ýu^2¥„¶Ä‹w(cl3XxGÐ8tšéìœH7h© ÒnŒy{N²ŒsMk`¼ù:ó-p.H¼7RýøÎq¨çvÛc¢³±¤A4 Q o2ì‡'W'_:xÇ¿Dg‹^x wo¼‚ÀÕIõFøªô9ûä Á• 2;·žƒ¾‡ùÉ]ù. €!¼f2Ÿ¯x09GQ»áx€=9 PÖÔ’TKØÍ$Î[Lg jb?â<(Ë3pôÈ3rXŒÚäæM 3îìSâ}ýû××?_ÿ}<ÿœƒlš…’6±þõó…_~dÁ¨ÿ&ææÚ —ãC³WïÄâºUôø¨%ÑjpNv›l/&"ã$QøàVÖ¾g¶øNÓú\”ÒQ›å(PxJ„ Z,ùî×Yð–+¦ÁÈø5ÈW ¸{¶ØCî†éºQ÷‚¨ZêVeÃG*òÑIoí(¼ÒY›’lCÓ`9R\vZ3ô[{Ð2hwœœ×/ÚrÜÒ—c?íÉÄÊÎüØ™x`’Àì¿áïbëÇæ^†¡W§b‹¸»pU²ÎÓŒ…òœJ´ÙéÌ‹O›t7„üT@º–>íࡪUb|+Œt–/°CÏšRO JŸàÀƒ¥qÆé¬“‚»B!£¨÷PÎÀ;red†©x u}Àn'µ‡v‡ûÄçmØ*RqÖˆuºð’YÑAw݆ó‘…lƒÔêB;&,S[4×ãšý©@¦ªIŒƒI°ÒÛ¨´¶ÅÊl/ˆ:wºÔˆ»ZÐ&i‹]7ÔÂ/¾¼% Æ9 uÊÓ iM…ÑÅxZt~u±] hŠy˜@G1šÁ„J¹ Þ:¼¹ÖÖ \ᢚ¸@}O¬pk‡jßNuP£Ku¨uE÷ÆÙÕ\~oÌyd]ª¼øÖ¡ÊÞž9ìú Gž;ÛÕ|*É)g@étmÓvÃ|=ê»Óá ¦=¥ºEéNùCÝHJ3µzŽ{|ƒî«àÛêhd£™å¿oGƒ ?Šh‘YDh9ðÃKêžE¿nU®(Å[íp êlƽðšñ,fW)W^Ö¼5 ›Ì"R[Œ”.ôyθ)OÊGvf‘ð'aÐSGè[š±wª—æÔ8R=n뫳‚S(›¯ø)T^Rx^z—<`õC¥†µ;éÃŽ98]#\tÝ#j6K'¬ú(q†³Qjذì¼oæg¡yÍk“76V%L… Ò/ì cëaõϰv/ÖÖFNÞߺ'c±EW‡56ùé ëKL†Ð?}ÎÆÚN+ͺg˜O?ÂÚŒ ͇Êh  ¶‡-²Ê‘nîïß´õ¤ÏÆéký¡ È,øþ šñrnþò©a)x:ÖORãäŒ Pì?ùÈèN)£”¸_z1†4êB#„B _J ùÛ²Û˜µìê8‹^ ƒdŒsïX¯«ÛÔm”oÒ2;ÆA¼º}žá·„‘Ã)>泃8EÙŸO躶fTTÎTꦀ äÏcKÇ$˜^šgR+߸^¥ÄÞÏ{œÞÎÓ“VÏŽÙç¹d =&?ìÅáñâ…/Æ-ü<Þ;F¹pÃ[Pî]HS½)1'· ÞæjOÖØ®}c0RRÅ6¸!u(n{W+Ǧ»Ϊxf¥Õ_ÞÅÍjç0›/~›Jñª#ÔØOÅ”<·ZmÁߊ®~çjÑgXÝ‘]·¸ /ŸWS÷úù6´öU#Ѷðv\tîÚ´@xÕ¦^uÜÏX@.k¾ «M!Â¥¸Yü Ä뢄>/ý\Ï d¢©£Ñ_=´;¾n§àV—ÙˆMHgŠ ‚”‰4IDH9ùs‘n§ÕVÄ\ˆ*eÙaÆxZј|^EkXàü.À.Úx=4”m)T+T=ƒ„3Î~n'‡0ؽàØ">9b, váioWkòpÒÎ+q¬Gî  ¾e_ˆ‡ÅZ]Ú¥E KQÛR̃§AUC9fÙÅ…¬Yá„ú>Ár™TÍɳÄÑkgÉ,`ƒêÔ)œ£_Ý:'¿GՆ嫭³M9¨q‰­ãðºîñ­ßpl>Ékb78Ú·uŒÆ"aÈ]ÔX£»ð9ÿK 'Øúì<ÿV¢^$dÆ;Ò‘iš—ÝvšÝ¬V®¡¬ð?ÝU’$Ç ïzÅ|`nïq„ÃùÿW#3Áêi:¨1ÅB‘ ‹`ÎB¹ÙRÿÛÍŸêIš><\"¡½×õ Ÿ‚N‰T xO»Úc¿æ³T~®Ü°ê6!ØT'†Æ|_q·¦²ÉÀJR´6ŒrJa6VAii—f-škÎ<çJ”~ûó"lkS’¨©‡Öœ4!|6Hnðv4z!}ÁužÎfá°Aÿi(÷@»Ãu­Sñ.N*t@ I°ã%WAøå'ø ·Á:WýŽê„ƒZ»)É êú2ŽT¼³..\å6 óû€çÏÅØA!JvC‚G°ƒ¥ªÝ)M#‚{ajJí8ðh÷V°‰¦s¼èZ"¾Tw†Ù£«Îâ×M®c¬—JîÜ€Kó\}ÞÛ+aó2q§ìÖ] ¥ ³‰]4\T¿ZJ»’ëè¼9¿ ©ßˆ›¾›oÚ :F+ËD­Ë¶ÈWÆU´GÌ·‰DÓí’:œL¿ÊÉ1¥)°Nò˜Ã%¡Á`ÛÓÅ=?3‚°³‘²1Ó€ü3ÈyÛœ ®[©`6—ÁÈòmwf‘Q¡gîÚy3Žg3Ï•6<6 €™h/-œ‹M=ð(°Päá.£} "ub·Î1I‚Ð cCÖ¶Á½{ï~|uKß¼NV•ôöC+r€D/­j¡ÿAœ97 ,ø⦠dÔÕ² ³+÷ŠrbtìWW¿â’§ù›  ˆ›ªûcUÆ(þ²Æï€„ò­£‰!;E_ï ûᾦ^·ÉYâo:ƒO¥'Ž€ihòØêõy-m²gvÁò&6BTˆ…¸‘‘À7Èê$.@B!!ÚHXI_fÔYÜI®_{µ Cf¡"γŠ%©è)Ã>¥¹tnçÔi¦ôÓâqJïêûŸj äÓ±¼küÏ­Õí Þ=FWi ·°(3p¤šJŸD•‘˜¿ ˆ¦Â·#±:ö.†ÊÁ¬†A0R}]”?š>Çöž¢ÁÿâÀ<\—‡~ý€< èr JƒŽ©Åe ü&»¢³ï릺«¢u§óîý˜h>ÅÉñ—ÄÙ0BèÑ ^ VªPö–Á‰Wò pmj%̳QçžbL‚Åmud·¥T¤Õ³‰ ”k8\]¼Qg_(}°ÀâÇO#úñïêç`©Yý'q8È|"2bräåk' g×n¯’¢g)h5Ù¡šhÛÿ ÜÁÎäÙÆ»²)>lÄŽ©qh-Ê®]‘ëBÎoÔüÓ4 1¨÷ÛP€;â6¥"Ç‘•ÔÚÉiZ£Œå0Î!h6s+Ò›šßÝ*­V°è2EÍ𽘃èNÔw(ôõEŒ"✚ZêG($«”•ÄýŠÝâOXi:—I}UÔ&:)~“$‚£yÜ6IÑ®kȦðn®àÀ ν¿JZA¶lÂÇ&00]Бã¢2ZÁ¥6Jmû!.ÐoÞ®VñIc–¾¯˜$Hª$|@ɉÒ¡ãþ¦âÏêæ©é.ÈùpDþ¡ú¢ÉõÌýï+<Â+œBäF]Z(ëÆ¯ÉàzXI4¢´È(à J/ >›C¤T¿e—¨§êœqP_Á._¥0D°ãÅnˆ{Úâé¯gFU F§?ˆÛ}¬]õ’´ÏÍרŠŒâ×J¥Ìs€ðq¹Çѹð½hBX¨ßÆÁQĺuªhÖwRU-1€Ôç3›5í¢=§q˜Ño@™*‚Ô3j4UEL¹Í+M¬hVÁ»fø)LE¥çÛÓnû=Ò”õy)zúE×W0öé²}½=c¼½y£¨¼7–€µC‘áèóFj6(™çiH^ô"ù ¬¶«D¥R¼P¤hLšÅJk—¦ÚjΊ†\HE LÔß¿aÞÁ'OANžÞ夰ë¼leR€ýucèàùz6Ö~‘GuAá×[Øí2¡¬Œdi;1`V¿ÞúñjÙ±+·{ÅýÇ¢ÞÚN'›NxÌj²‚ÞÏïXUÔQÇ ·U—’Ž$’Å¢ú:[ؼ@¾¿–a{`¦,NÉ%G6|ͪƤ¬%ôþ Žº†~¬ ¯Ñ8bÀÚ|§Â,èbôå219êà|@ë‹b.S·è„pT!‰£ó[I>Ÿ ÍþØêj-}F2ØÜd™ù4í%ÍÒq‡c×|øvN{€wCgýþþ@]Œ IZzn(”¢¯¢“!ÜNßè(ºÒ8@UýGæqZ©ÎC\Ö^ATRä¾0OÖ(b 5OK=ÐÊe-ñ€TÌ1fŠ2å9ÑÈPM/¡P²þØ”oªI_AÏ‘"o2%?¯ïü-qó_y¾öåw+c¯”[ÎÙbþe¨e{÷fŸeS/g÷18· ¨ÁB+—-ŸVä¢ÅyÅÚeË%œ™FØ-r¦abÕÃ@ÔGÇD(R,÷ê.¥qÕw‰Ò¥£ÿàŠ65Ƭš º ­@Çaj§°¢e<\|ÃÁߣö°¢†ÛêÔXBò‰’]€Œi¬¶•9Üô3êó¹…°AÏ®¹ßðò9ºE×Y–/Î5fʉJ/~>hBûØ™7q¿ÁS²3`\è÷¼ =Âùh\J€‰m]6HÈŠ4Aÿ„^oŒ¬2‚y¾Ùãɧ,göPPºbUÖ™°-ÇQ<íRô¯S l!NàÖNçV(,t¦rVñ–Á‚Œ²»‡²<¢|­Ëf gºÁº€Êoå,táTÅ€øœ†'ü]ËçÇâïÄpà6¬6©0ðšJ‘Ê(2HHú…\r&³D—*õerBÂÜYî¹+*~”ò·˜»Èž*K­Õü’Ì U7—*°š'#¢v2åJ¬Pdôÿ|Rkñø¬c´©¶®ëÝÊšáΛʥyf¾@+7¯K eû_Þ+^wŒléÖ›K±Û{"…)Áö«¬0,ª!>®‹Ð§5 ‰Wü¤­éh Q=O|DÃG¤ÚkÖ3Ρ±¹è>ã:¤5ãÉüuLGe±HP„¾cÕ¹‹¤s´#Í«|Œ›Ú"¦.pYo.:LTç†å.ýØiñôh´&d®óã, ZªÎ˜ÁŽä Ž}ÖJ]ÈÕ¯”ïrqÙ[Ç]?oT}’A«õ‚®*}–×äciX_Ê3¶¦YŽ\O²+ËØ1ôN“€ †ârл)ÿž†8$) <” oCzgñ§ëoHë ®ÁÎÑ[»=<º¡é¬FÑïdœÄ.hõüž{Áü~Æ<Ñ–¡ b¡¹çgfeòszij<¿ßý¶ÖåjS49埣˜ª|8øÞ Ò×áuvV e¾w•F?¦¨Å%Îc2ÊUWºŸ§sþÓ{Î&ãî9øTkra%wÔ D¶#(ƒÉ•˜¤‹"„Âwu>I& ­ÙFv[ ¡BZs@͵.¾Pý ªƒ:‰BËåžI3äyeP èü]r,› Qïîä±–•¯•ug[~Y›³—óJ=Ú€q¤ú2)í):ù_IµR ûÃ9ÊÏ£^…ª©U_ jõÇQ5+¼ø ÉXG陿³+ºCϲ×gV­’<¨ËÒîÎã;þí”Ï ØIÕL2‹Ëu‡ ÁIÞ;ÒÒôb·­{ªu+"Øâa ¼ö•ªÒDrræ±Áðbj:` ”,ÈØá"JØÏÙ<–Üp†*7BP¹Æ…<µç¹«çF9›YïCîOÇ&ðs,]ÏqšÇIJtZ’+ûò¾y ,Oú–Ó‡¤÷’ôC«“õb>îòŽó.ŒŠyŒÐ<5V8õÇ„þ¡Ìk¨J‹s¬F¬P ¬€ôRGPÕ¹oÃâN¬úUMA+ãX¼Xó†š(þÕt¦lÜÒ-K}ZÀZæy2O ,§1¡9R´x¤_Â}”£.tÈ2ÊæÔ GG4®™Ït°¤HO+2šÌC)í×ÂkaÇêaEšÎ ÄNÏ{Žï¹» N²‚ÿ·5 Oà‘)ÄרS ÉŒ¾5¹&°pKö0€)&`fÏ…É~­±òqJ¡H¢-Aà F6ô{àîÝ“†JÌãwá!¿™£r ¸Ô0lœabE!A°ÃmJǶÂE@p{Æç 4ã¦ö.×þXŽtqzñŽ)²iÐGˆ¨ÃÂ$€©ÆàIH­²Ûå=|ØGP;ÒÃfÚ£Ã.'÷ßÞè^ýý ç dÁrúкq"aj°ES•Pvá[O®*¯fàÎŽh²Lõ/êR‹ò¶.«uÌ쉣3Ê›šž±§R­x*DŠ|Æcë7ëì@=EÿE¿”A6‰¬D 0j“xï¬S—GÒ„ï(in[å"ÑA Ž8ÏàAV¢«jLG€_×XÅw‰VScTh²æñ¡½,×¶˜To+³¸Î9®öa?þׯë_Ÿ¡µè#  ­Ý^¦p-S/å “9[t“œjh‡ö…Þ˜)& ýMV­&À©å±¥ uÏWI½H]$G :Ô‹…¡¥ÛÌÅ<Ȳ½¢Œ4Ôf¶Ù±Ôôª œÐÎÂï@Þ¨·Ãé¸høÏ¦~«c’QY=ÍP›ýj“<¥¡eêט_'È`C.÷Ð¥LáØg¹Ž…߃-6bË'ù¡ùW›ìV+峕7a¡7};Æ8ÔlÚZ´~Ì÷ó}×±äYžqŽ+¿ÇÏlé)3ÔR<ëÌü¢±À¹ëßX—[%«1¦4Ä…¨ÍôH8ÎŒÁÉNTÕ’|®y<A]©[;xLž B¥“=ø ülõííGz½ý8*æùûúñö·/_üþª¯ï›Ðþ³ÿýõõOÛmkÿ5½þõºÈîkÍ®dv msóúsØnÕÁÆn¿ÈýͽiÛ{ú>m­Ÿ6êÅ+}~­±c–{£>·Rè6Šzo?í4êÎý­QçΨqï4Ö^›ÏNŸ,Ú鶯ýŸ‹ö™]oru¡øÓ¢çòùþöúòíïo¯oßßÖë—?o„Ÿþñå—„¾9 endstream endobj 270 0 obj <>stream 8;Z\70m9Wn6$G[Jp>0E@V <9s7)pGo-?E5l?h5t$nfQM3P=8m]FX`W-!13,Q&3EPko8[DWgC)]D#ZR#J*Fk/lLC %ELK",o"dlpTp^.'AYrEDIem1Mi]KLl%X7.mad!88=?>GnqQ$lQ?LR/b+bL@4Rl.7 dE2$qe_6.?o+^V!N!#&E[4CI7kjloL,`Q+9$]lLU&gT[Q7t63]^pQBi$=E"UqD^u! S(=Urf#kr^ELFQ78=MQh*g5j"pn.)NPZ1 ?HVlim>r+g)`hF'^mFYNf,#lG5#!$5GDs,5_F(&3*0QBRQqp:Ho2#c%8(a/)Nt3VS \$*fb/<,S6BXq8Uf\KBMkM@`H(<>J7BJqV+%lO5Fd]K/IgG6#lk/2L-2d3I<]Jr<` )pd9ZDZ$tRHVh+2Cu#TF0"UcB::cQF>n'H^&Js_S0$D+S"*=iA,L[NYJ)_u_;+l>jO1;ajT(Khe.KH-4;Poa13_au\Tp3MZ%)r-2_TU^+=&gd Fc.TlhseXS"L_[S^T"_P)P,G\^.I"4'Y&c0Q.(;,V`nq0b>@XX_Gl,p>=>*KZ!`,f!H:(bu>O;T< !P!LKi`LL&DtjbtQH<#tADO(;mh/XVic")c>\O8Y$R+u(gEc@W_$5#K@ceD8Zk6^= 7\T8fnSOtDE8(tCPn8"*)a= endstream endobj 170 0 obj <> endobj 173 0 obj <> endobj 257 0 obj <> endobj 259 0 obj <> endobj 261 0 obj <> endobj 262 0 obj <> endobj 267 0 obj <>stream H‰|PmL[e¾—¶·c¶E¹» {·Þ»ˆbFÛ!¶º`VE>¤Ý2Zë¤[Ë,”µ»­ÔF‘ª ö2‹khUL>2Ép(kf†ÄÆ3ÿˆ‰ñ‰ ³,nɹì­Ñ[øïùqÞó¼ÏyžsrpLš‡á8^Tg­i¶Õ–™ÃœÇéjâ|º}^WŽavH…] =‹wIל‘Á@Œ>rûÁÎB,ÇSsÕ>¿(<õZ­(//׿²Ý|ŒU.ß 7k ‚îŽûÒé“>ÎïãœA·KÏVy½¬%' °wÀÍuæ>ê­z¶Il8dk FƒÖ¸¿B¿µë °N–sŸòˆnœÛÅ9§ËÝáäÚY_+û?“öÕY„ýnv?ër·bb<†ÕaõXÖˆY±—±mâ 03vgp>‚ÿ‘÷t^ÛH4-ü•ÆÅ\’–D¥BßFS¶€A´B!|(ƒu±è r ;$ÏÇ7k0!Âu*W¡RA~Èàà`Iá*”AèÐn0÷W©ÞÙåÞŸhPÿšš¿Æ,ÌN.eÔ¿YVLc^N k“sËß©3ž¯ãš)»å¼ž~¾òì{'({‚âG>ágè[óþf[KÛsŒ@¸ô:AÞ_ËøÖö× Gù·Õ•ë÷îÜÅgàq8{$Â;ÐLñÉÁO/ªAÙ¨™Lh7zéþÜ •«™ä…´&ô·ìíΞctùÒ÷½ÌÀ=êʹ‹+7é?2·2ª±N¡+ô è ¿#z ´ä:xŠ„.¤ÍvÉÉ»kÊÞÞöjŒqL{–èôôìsuÀ;c§U76¥p6„g@+φBÚì 1¿ÛÑ+2h$®B5Øeèñ$*í~£; =ÚO¨îˆr%DB…¢ âäÅLh òg˜“ò£çšÉÄøÔ}#ÕÒÀ ÏĦ/åPòÂji¥Íá iúr±ç*&øþØaµŠë{¶ ÉË93ˆä­áØ0ŸÐ|øâÒ2ýñH_’9é‰vÑŽÆŽŽyŸ /÷þ.C; ÞÉ;ªÕªp”žHREÂP¢nž˜œÿ|bJÁ\|;[‚ÐÞ/÷u¼ðµ!=:Z¬Š$7žF¶$ìM¦Ù@œê?@‡âY_r1~aH¾EO¾äµd68´M¨£†-z*ž¯k©}wô_E>H·ƒö!ОW(c LìÞ¤þ`=¢ºÐ endstream endobj 260 0 obj <> endobj 266 0 obj <>stream H‰|PiHqŸIw–Ê6rš¨šý‡‘^é"•’™b^™›QA‹ëîä‘¶6»)ŠÁj—“ëŠV³iEú¥„."E‘]*R2:ÈØÄœ/v@Åý/Ôl}ï}xï÷{Çï=I„Ï!H’\–iÚ±oÆú¼:¡Üb+ì ùÒc•!Tä–T–†+Ë#=³³³¹p/3—"‰9$Ùs;Ý^­Ž––9QB\\܆ODCRšÍ^Â#SÃÉW9ÐÎ#V»Pm,NÞƒÒ*+QahÌ y/Ô„’E1¦T 6q¢‰I‰’’bþ]†ÊÈ‚¾´\Uxr _e#û!ôŸM±™¦=uÕ> endobj 265 0 obj <>stream H‰|OmHSa¾wîCsNôz¶º{A!G¶Y‘‰´r#ËåÜŠRКî:Wº»î]0ü“°œmÒÌ 0¢V$9¢tQ4°…Õ JЉJýQ‚÷ÎwQwú¿óãpžóœç9çà˜X„á8¾Ñh­?ÑbØfêc6»™e¶7:Ýž,UÆ«p¾TÌo–“­È¿^•I¶`ØÃwÐWƒE_ÓÒbL„ã×÷ T ¢SvVUU½é µóнhpu2¬›amÚ®úž`ÉŽsÀBs4{>Û<¦µjYpy@=Íi›vÙ.‡vý0àä€ °´Ã)8²´xX›îµ±gÓõ¿m:£õhŸ›{€î„(ÂlÓÚó˜ ÃæðîJ_œÿÇ…\Ïñ‰ùÁ´93(…~ôŠDupD¥ ç$Ì‚LP–‘¶¯Õ° XÊ?#³Ê"…7§"ø£8œ‰çÀ/ Kæ öCOõ ’"¼¬yը߿´uYu9BVš`>lð«á¾”/AÑR6†VTˆ0Já‹ðŸã¼(–ÃJ#hvH6•À¸{q–(“mËHuÐâ¦mÔÓ’[w£÷*( ï×#q­5 ƒºÉ$qɲÍOGâÜ4¼;#RDúÓ²l¯Qc [¾8ÕeDªÆqüH²â‡æBìç(úØöF7A ˈÅTävâ…’H~;<‹pŠH ü‘“šæ·ÉaõûØë…;ÔïÞD‡NYÛÔ\IÉa~ž\˜0™ë[N9õ®›ÖÉKŸsg¦_~§ÞPºzu\…;Bñ+™s#R8Ì0¡'ÁÙ:ׂºP,”ñsùCÔè§{>stream H‰œ–yTSwÇoÉž•°Ãc [€°5, ‹ì ˆBHBK!aPªVÊX·Ñ=uº¸Žµ:X÷©KÔè£ãÐZ\;v^àõ´™N¿üÞçÜß½÷ý~÷Þw΀.MÑh«aUZƒ>31[”_€‘& (€DȵºÔ¬„l€K/Ájq'ðVO¯›V®¥éþ?±:½O“Žs€RU«À¹çÊzƒÎdŸÁ™WRab5±? Ζ&Vϳ÷œÏSº7åÁâT¥rc¥3ÕMQ]YmÔcµ:¹B… :Ä¿9ð—Ïá©*UéUZ<"Ÿ2V·[«Ô4ÕZL£ýOMüa?Ñü\ã⎽¼"ÀºÈÈ?.”KHá6|zÓ·J.HÇŸy÷æç~NÐϳÂ}¦¥V£ž‹“dfc £¾n~ÏôY &à+`œ;ÂA4ˆI dƒ|°(@¨zPZ@;è=`=؆Áv0vƒýà ƒàÏà<ø\·À$˜Á x ^AD‚²‚ WÈ ò‡ÄP$¥@™P>T ©!-d„Z PÔ C; ÝС£Ð èt ú š‚@ßA/a¦Ã<Øvƒ}a1'ÃÙðX ×ÀMp'¼‚Gá}ðaø|¾OÂáY 4„8"BDŒH4¤)EôH+Ò "£È~är¹‚L"(å¢*DÃQ)šƒ*дíE‡Ñ]èaô4zBgÐ×Á–àE#È‹jB=¡‹0HØIøˆp†p0MxJ$ùD1„(%æˉÍÄ^âVââqâ%â]â,‰D²"y‘"Hi$9É@ê"m!í#}FºLš&='ÓÈdr¹€¬%wÉ{ÈŸ’/“ï‘_QXWJ%¢¤4Rú(c”c”‹”iÊ+*›* FP³©åÔvêu?õ õ6õ Fs¢…Ò2hÚrÚí´ÏiS´tÝ“.¡ÒôuôéÇé_ÑŸ0 7F4£€a`¬cìfœb|ÍxnÆ5ó1“™)ÍÚÌFÌ›]6{̤0]™1Ì¥Ì&æ óó"ó‹ÂrcIXrV+k„u”uƒ5Ëæ²Eì4v»—½‡}Ž}ŸCâ¸qâ9JN'çÎ)Î].ÂuæJ¸ î î÷ wšGä x2^9¯‡÷{ÞoÆœchžkÞ`>bþ‰ù$á»ñeüJ~ÿ ÿ:ÿ¥…EŒ…ÊbÅ~‹ËÏ,m,£-U–Ý–,¯Y¾´Â¬â­*¬6X[ݱF­=­3¬ë­·YŸ±~dó ·QØtÛ´¹i ÛzÚfÚ6Û~`{ÁvÖÎÞ.ÑNg·Åî”Ý#{¾}´}¹ý€ý§ö¸‘‡‡ÏþŽ™c1X%6„Æfm¥ŽFÇŽޝœN9NNœî8SÅÎ¥ÎÎ'g\\R]Z\öºÜt¥¸Š]Ë\7»žu}æ&pËs[å6îv_`) š{·ÝîQî5î£îW=ˆb ­_zžAžež#ž½`¯`/×V¯KÞïPo­÷¨÷ !]#¬îNùð}R|:|Æ}ûºøønð=ëûÚ/ȯÒoÌï–ˆ#JuˆŽ‰¾ó÷ôWøø_ `$´ ø6Ð+P¸-ð¯AÜ Ô UA'ƒþ¬Þü Ä%¤8ä½bž8]Ü+þ<”Úúqè‹°à0CØÁ°† Ã+Â÷„ß_ X Z0¶àn„S„PE¨úU÷J#JûKï«#ÔÕÊ¢ÊËi$šaÍ·åÒòíåÏ*Ò*>¬ø±2¯ò@¹ª¸ê¨–£­Ðž®¶¯n¨¾¤óÒué&kÂj6ÕÌè“õ;k¡Ú%µG <ügê‚ÑݸÒ8UY7R÷¼>·þP»AÛp¡Ñ³qM㽦„¦ß5£ÍŠæ“-Ž-í-SËb–íh…ZKZO¶9·u¶M/O\¾«Ú^Ñþ—¿ŽþŽïWä­8Öi×¹¼óîÊÄ•{»Ìºô]7V…¯Ú¾]­Y=±&`Í–5¯»•Ý_ôøõ öüЫèýb­híÐÚו®›è îÛ¶ž¸^»þú†¨ »úÙýMýw7¦n<<€ t|¿©hÓ¹ÁÀÁ훩››'‡þ ¥ZþL˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿ ˜óü endstream endobj 232 0 obj <> endobj 235 0 obj <> endobj 239 0 obj <> endobj 242 0 obj <> endobj 246 0 obj <> endobj 250 0 obj <> endobj 230 0 obj [/ICCBased 175 0 R] endobj 251 0 obj <> endobj 252 0 obj <> endobj 253 0 obj <> endobj 247 0 obj <> endobj 248 0 obj <> endobj 249 0 obj <> endobj 243 0 obj <> endobj 244 0 obj <> endobj 245 0 obj <> endobj 240 0 obj <> endobj 241 0 obj <> endobj 236 0 obj <> endobj 237 0 obj <> endobj 238 0 obj <> endobj 233 0 obj <> endobj 234 0 obj <> endobj 176 0 obj <>/ExtGState<>>>/BBox[8.1748 1102.53 706.217 377.814]>>stream /CS0 cs 0.18 0.192 0.573 scn 1 i /GS0 gs q 1 0 0 1 8.1748 982.335 cm 0 0 m 349.021 120.191 l 698.042 0 l 627.619 -362.355 l 349.021 -604.521 l 70.422 -362.355 l h f Q endstream endobj 189 0 obj <>/ExtGState<>>>/BBox[8.17627 1102.53 706.216 780.829]>>stream /CS0 cs 0.18 0.192 0.573 scn 1 i /GS0 gs q 1 0 0 1 357.1963 1102.5259 cm 0 0 m -349.02 -120.19 l 0 -321.697 l 349.02 -120.19 l h f Q endstream endobj 196 0 obj <>/ExtGState<>>>/BBox[357.196 982.335 706.217 377.814]>>stream /CS0 cs 0.18 0.192 0.573 scn 1 i /GS0 gs q 1 0 0 1 706.2158 982.3354 cm 0 0 m -349.02 -201.506 l -349.02 -604.521 l -70.422 -362.356 l -70.422 -362.355 l 0.001 0 l h f Q endstream endobj 203 0 obj <>/ExtGState<>>>/BBox[8.1748 982.335 357.196 377.814]>>stream /CS0 cs 0.18 0.192 0.573 scn 1 i /GS0 gs q 1 0 0 1 8.1763 982.3354 cm 0 0 m -0.001 0 l 70.421 -362.355 l 70.421 -362.356 l 349.02 -604.521 l 349.02 -201.506 l h f Q endstream endobj 210 0 obj <>/ExtGState<>>>/BBox[8.1748 1102.53 357.196 619.98]>>stream /CS0 cs 0.18 0.192 0.573 scn 1 i /GS0 gs q 1 0 0 1 8.1763 982.3354 cm 0 0 m -0.001 0 l 70.421 -362.355 l 349.02 -201.506 l 349.02 120.19 l h f Q endstream endobj 217 0 obj <>/ExtGState<>>>/BBox[357.196 1102.53 706.217 619.98]>>stream /CS0 cs 0.18 0.192 0.573 scn 1 i /GS0 gs q 1 0 0 1 706.2158 982.3354 cm 0 0 m -349.02 120.19 l -349.02 -201.506 l -70.422 -362.355 l 0.001 0 l h f Q endstream endobj 224 0 obj <>/ExtGState<>>>/BBox[78.5972 780.829 635.794 377.814]>>stream /CS0 cs 0.18 0.192 0.573 scn 1 i /GS0 gs q 1 0 0 1 357.1963 780.8291 cm 0 0 m -278.599 -160.849 l -278.599 -160.85 l 0 -403.015 l 278.598 -160.85 l 278.598 -160.849 l h f Q endstream endobj 221 0 obj <> endobj 214 0 obj <> endobj 207 0 obj <> endobj 200 0 obj <> endobj 193 0 obj <> endobj 186 0 obj <> endobj 171 0 obj <> endobj 268 0 obj [/Indexed/DeviceRGB 255 269 0 R] endobj 269 0 obj <>stream 8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn 6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 139 0 obj <> endobj 140 0 obj <> endobj 141 0 obj <>stream %!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 13.0 %%AI8_CreatorVersion: 13.0.0 %%For: (Apfl Strudl) () %%Title: (FIFE 2d isometric engine.ai) %%CreationDate: 7/18/2008 4:52 PM %%BoundingBox: -306 -534 894 1386 %%HiResBoundingBox: -306 -533.8701 893.8496 1385.8896 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 9.0 %AI12_BuildNumber: 406 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_TemplateBox: 298.5 420.3896 298.5 420.3896 %AI3_TileBox: 10.1968 14.4746 586.1973 833.5942 %AI3_DocumentPreview: None %AI5_ArtSize: 850.3937 1275.5906 %AI5_RulerUnits: 4 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 10 %AI9_OpenToView: -879.3496 1175.2588 0.6667 1610 1103 18 1 0 73 97 0 0 1 0 1 0 1 %AI5_OpenViewLayers: 7766677777 %%PageOrigin:-165.4004 159.8789 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 142 0 obj <>stream %%BoundingBox: -306 -534 894 1386 %%HiResBoundingBox: -306 -533.8701 893.8496 1385.8896 %AI7_Thumbnail: 80 128 8 %%BeginData: 5734 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFD0EFF %AFAFA8AFA9FD4AFFA9AF847E5A8585AFA9FD44FF84A9847E535A5A855A5A %5A8584A9FFFFA87D52527DA87D7D527D7D7D527DFD32FFAF85542F5B365B %365B36362FA9A9FFFFA852527DFF7D7D5252A87D527DA8FD32FFA8852F30 %0730070E0730072F7EAFFFFF7D7DA8FFA87D52A8A8FF5252277DFD33FF84 %5A36300729072907303085A9FFFFFFA8FFFFFFA8A8FFFFFFA87DA87DFD32 %FFA9A95A610E0706290107305A7EAFFD43FFA985855B0D2929070E615AA9 %FFFFFFA87DFF7DFFA8A8FFA8FFA8A8FF7DFD33FFAF5A856030072907365A %7E84FFFFFF7D52FF52A87D52FF7DFF52A8A852FD33FFAF855A855A300736 %5A5A7EFD04FFA87DFF52FFA852FFA8FF7DA8FF7DFD34FFA8855A5A300E0D %5A7EA9A9FFFFFFA8FD05FF7DFD3CFFA9AF7E5A078585AFFD49FFA8A97E84 %84AFFD4BFFA9AF85FD4EFFA8FDFCFFFD86FFA8FD4DFF7D277D5252A8FD0F %FFCAC99FC9CAFD0FFFA8A984AFA9FD22FF527DFF7DF8A8FD0FFF9F749F74 %A0FD0FFF5A305A2FAFFD22FF7D7DA8F827A8FD0FFFA099446EA0FD0FFF5A %300130A9FD22FFA85252F87DFD10FFCF9E7598CFFD0FFFAF36307EFD24FF %A8277DFD12FFC998C9FD11FF855AFD75FF7DA87DA8FD10FFA8A87E7DA8FD %0FFF7DA87D7DA8FD22FFA8A87D7D7DFD10FFA87DA87DA8FD0FFFA87DA852 %FD24FF7DA87DA8A8FD0FFF7D7D7DA87DFD0FFFFD047DA8FD24FFA8FD13FF %A8FD13FFA8FD6DFFFD07A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8 %A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FF %A8A8A8FFA8A8A8FD10FFA8FD3EF8A8FD10FFA8FD3EF8A8FD10FFA8FD08F8 %27FD0452FD11F8264A26FD11F8280600FD09F8A8FD11FFFD08F87D52F852 %A827FD0FF84B99C1744BFD0FF829365B0728FD08F8A8FD10FFA8FD08F852 %F827FFA8FD10F84A9F4A754AFD0FF82F36013000FD08F8A8FD11FFFD08F8 %275227FF52FD10F82699997526FD0FF82836300D00FD08F87DFD10FFA8FD %09F827A852FD12F8204A26FD11F8060100FD09F8A8FD11FFFD3EF87DFD10 %FFA8FD08F8FD0527FD10F82752275227FD0FF827272752FD09F8A8FD10FF %A8FD08F82752527D52FD10F827FD0452FD0FF85252527D27FD08F8A8FD10 %FFA8FD08F82727522727FD10F82752272727FD0FF827522752FD09F8A8FD %11FFFD09F8272727FD11F827F827F827FD0FF827F827FD0AF8A8FD10FFA8 %FD3EF8A8FD11FF2752275227522752275227522752275227522752275227 %522752275227522752275227522752275227522752275227522752275227 %522752275227522752A8FD50FFA8FDFCFFFD0BFF5252527DA8FFFD04A8FD %0AFFA8A97EAFAFFFFD05A8FD07FFCFCFA0A0A0CFFD05A8FD1EFF7D52FFFF %F87DA8A87DA87DFD0AFF7F30362FFFA7A87D7D52FD09FF9F997499C8A87D %7D7D52A8FD1DFFA852FF27F87DFFFD05A8FD09FF84300130AFCA7DFD04A8 %FD08FFA0746F6EC9A8A87DA87DA8FD1EFF527D2727FFA8A87DA8A8FD0AFF %AF5A305AFFA8A87DA8A8FD09FFA79F6E9FCFFFFD05A8FD1EFFA82727A8FD %11FFA97EFD11FFA69FCAFDFCFFFD0FFFA8FFFFA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DFD12FF27FD3CF827FD %12FF27FD3DF8FD12FF27FD3CF827FD12FF52FD3DF8FD12FF27FD07F82727 %FD15F820FD1DF827FD12FF52FD05F8275252527D272EFD0452FD0AF80029 %2906F8FD042752FD09F8204A7520F8F85227522727FD04F827FD12FF27FD %05F8527DF827A87D52847D7DA827FD09F829305A30004BFD047D27FD08F8 %4A9F99992052527D52A827FD04F827FD12FF27FD05F82752F8A8FF27272E %282752FD0AF82936013000FD042752FD09F84B996E6E4AF8FD0527FD05F8 %FD12FF27FD06F87D27A8A827275927522E27FD09F828303007F82752FD04 %27FD08F8209F9975F82727522752FD05F827FD12FF27FD07F87D7D27FD11 %F80001FD11F8204AFD0DF8FD12FF27FD3CF827FD12FF52FD3DF8FD12FF27 %FD3CF827FD12FF52FD3CF827FD12FF27FD3CF827FD12FF27FD3DF852FD11 %FF27FD3DF827FD11FF52FD3DF852FD11FF52F8F827F827F827F827F827F8 %27F827F827F827F827F827F827F827F827F82727F8F827F827F827F827F8 %27F827F827F827F827F827F827F827F827F8F827FD11FF52F8F8F827F8F8 %F827F8F8F827F8F8F827F8F8F827F8F8F827F8F8F827F8272727F8F8F827 %F8F8F827F8F8F827F8F8F827F8F8F827F8F8F827F8F8F827F852FD11FF52 %27F8272727F8272727F8272727F8272727F8272727F8272727F8FD042752 %2727F8272727F8272727F8272727F8272727F8272727F8272727F8272727 %52FD11FF7DF827F8272627F8272627F8272627F8272627F8272627F82726 %27F827F827F8272627F8272627F8272627F8272627F8272627F8272627F8 %272627F827F852FD11FF52272727F8272727F8272727F8272727F8272727 %F8272727F8272727F8272727F8272727F8272727F8272727F8272727F827 %2727F8272727F8272727F82752FD11FFA87DA87D7D7DA87D7D7DA87D7D7D %A87D7D7DA87D7D7DA87D7D7DA87D7D7DA87D7D7DA87D7D7DA87D7D7DA87D %7D7DA87D7D7DA87D7D7DA87D7D7DA87D7D7DA8FDFCFFFDFCFFFDFCFFFDFC %FFFDFCFFFDFCFFFD5FFFFF %%EndData endstream endobj 143 0 obj <>stream %AI12_CompressedDataxœì½gW*I»0ü~žµæ?A:Ð EAÁ  $ 3÷žÏo¯  Qw8ç™sžM-÷†îêJWU½­Ö2j{Ô´3|–‰üùÇúº>±³Ñ¤Á—#¥~>MÐ¥äy*ÂB5TK-ÉO´æ¥=™öFþGîZèù¤:îô#µÙdÞî§"ɺQïÍú6ܲJ–áÚ‘Þt4°g“^+b_zC;Ûè¥ÜA@£FcÕ¥+ç8†‘#ù‚ÀEª'¨Š6šÛ½á‹6úO!’á1’ø|DVò0YDU{çö4´Ÿ•%†…Êð%¯ˆè !+Ë ~̵æ{8«NF-{:ÕGýÑdZˆèßÃÈIãî4"7v¿?ú;¢õ­7ÿ3Öh8ƒº'ß&½FÈ”{/ݪ‘ö]<·_æýÆdñ²6ê·ýÚvÛnÿŠ&Õ’ðdõú6fИE &µÄrOÚ¼×oŸÎM@–gD|“¾˜Âlaâè;¾.=•p©fÏf°¢0( íóÍ¿Tp—䌩‡q ù¢-×íÁ¸`Åðà9+Dò“åañ~:À¸qe–ɲŠ(GØ|6/åň ‹pAâ#2ÀSPò}ÀƒŸýWÏþ»9 mºêdVëý“’èDá¥ËIÃ"3Î=Xñrã›ðŠeh/•±=¬.ñ3²¤dyŒš,Œd9ÂdEQ„‹,ôÃ2|„•q°ŠäöŽÿh/¨EÔžÓ•$¡ÐÁ­  ¬Lz@w… + Ù<Ãí І¬PxLzmÜ‘É?xžYÙ÷§8t6°8³™=t PM?ñ!“=©¡A˜Ã¶> pM1UÊ ›ú£z×ûïAóñŸÜýù¯äÞ磙=…ûvDs/“Æ_6TΙóɈšñÕh6¦v®pì ÉÕv“\Jî§=è>×n¼¼ØúÜϵzÀ¥NßþOnlOfÝÑ|Ú¶sµVc2æ^€vpÛ}»3ËULÀL´.@{øû‘«Û%®êü ·šs¸:ËÙÃvcÚÍÙüß ÈÒÎñ´íAc<&7]è”<<²sí0Õé´‡`—»i÷ì ÌxÉMÇ,‡˜Ïµæ“‰=l}ƒb®9½ÙÃ&â¬(çœú¹Öhü¶9iwìAo 9ÂJ\Ö¿×jô‡£Y®ûmܵ‡¹ ¦lx°4ZhX°¬¤Ü¤<9Ÿæf¦sX´Þh’›u'¶íþj´æ3;7˜þò9|­ÝøãÖZv»×ï7 % Y÷ Р1mÍûxD²Œn¾Ïx}í6úÒ½8° —S1>@S*éQõAS%뫺³WÑrª™Óér&~W"µJ¤‹’¯NÉ­cκ¹SÜ!4S!TÈß2¦ŠûÜ`ÞŸõÆýo¹Ê´pâ™ÐyøÂ÷ð…ûÔ ¹YïŽ&€-60ü! Ú4× 7œù4|O7H× ·‘^ކk9Ëa“ÇmÒºí= MÙîs=R«Gjõ|]ôÜ:6,Çt8"ÕGΘF¾F´Šû\»÷W] ‹1'ÎIOóÀxæî3ßÈí^ŒoÎå?ÿ¨›„E GOõ)H ŸàŸ0£1‡­Ò ‘§Ñ»,Šïr‹ur‹Ïö\¿ý÷|ÍiŸèYõocû‡FDå~˜&½š[~ò¿jdHõXÒDcB—r |y4¤ç'Jpu†ÙÏéß“Ÿªý9Ü<˜ŒæãÒ°3úó$Ñf«Y”6`µSPIÉ5ò3B«åÞ_ÎEPGÇ©Oš¬}4GýÞtà6è¿â~ÿJSõ Ð$Ì´Ò|µ[3xš^ð¾Õæ½™ý•¦ªHøN†•!™ñd>íFê£Qß$­@o¹“­†<ó¯éÄ­ÖÜü÷6®7@³.5î‚}Ò~È}·£Ï~¥[P¼&¶×þ ÿwÐÿ_Bè†Z؈ƒ·Ü.–ŸøwôƒÕé Ûð&oåGƒ12 #µncŒ.£š–¯æWÆoذ¦|¸¯šÃ¿ìþhì€{äpäª1‰´ú!ðf|Ãms¦j¸Ý·Â×¼fÄ7ýœ1“ùó)¢ ýœó`‚¤ýpÖø©ýwÄù©ýݘµº`•@[«îæ"Z«á;þ‘7q1|E÷5´(´È´Hy0NпyÑ-þsŠóáñŸçð*,ÿ1¼…‹I X üo@ÑqÑxÿ)¸È´H¸ˆP(¨qòáp{‚g8‹39ƒƒá_ÓðŸÊ)øO†"q EÀ Ë1¬Åd (:«±*ü)¬ÌJPDV@ƒfù?ÿØÃki Pòxð<ƘŠnj¦j*¦lJ¦h °àœÉšŒaÁMÃÐ ÍP Å É @Àt¶¥n醮뚮êŠ.ë’.ꀅÓa0:£™š¡éš¦©š¢Éš¤ *^c5FµTSÕU¸¡ªª¬Jª¨ 0©Ê©Œb)¦b(º¢)Š"+’"`0r «0²%2t%«²"Ë`M X´À¬ÌH–dHº¤Iª¤H2X¢¢V6,;ËÁˆ–hІ¨‰ª–>«€ŸƒÂŠŒ` 01ATAdA@^àF`òÅ9 a’»–¿øóßÚ¢ùÁc.º¥á¢Z K¶DT Eð‡`Qã)61¨˜ÎÇ XE Á-pK¢ø…0Œ7óÎZ<T< TI4€‚‡äƒ !P½Lé™Ð+‹¨(ÒÂÔȆ)QžCsœÒ J_ ¦-S¡-BY&¦* +0gU(e!ÚBÔųP•eY†eÐ0ŠŠ E‚"Bh&ò爑ÐÂù ë+ßñqÖð(@JÐL  Á"t‚¡ ‹@9Ðt¤ÊзluY0h- 0¯¼"üù€@„&¡*P£ 4©e;Z*L†SÝ0 c¨5ªe#úÖUhÝT-X`N÷ç,À  ˆ¸‚Œš„ªð 8 ŒfÁ"¢¥ç€¡"″  ÉÀgà6šŽ>  êŸÀ²³œÀ™òˆOÁÔaJ p.ø—n iX& x€a ÆE°¦ª¢®MÝYK€7â§:`ÉZ0ƒÇX|‘1gF\x6g Y@°L./Þ)XèX>Xy€à'‡e ’:€B Ö`‚`´¨Á†ó€é`¼˜¯GÒ€ ¨(Ä}ð@'r¶‰2¦–QÎfŠ  ÜŽ’$ä“]\À˜@ñ€wq€`¿‰`ðfØS¸¨ë.Ä ¼ ´%ÒÎÊœ _ÉYKÄ \Ä&Žž,b1]¡"â"Ñ"Ó¢àC ‰Q Ó¨ŽáDЉ‹E %,§;çC/îQÀt WR$\dZZT\4Zt\ ZLZ,TYbèähw¼óÁÌ kÆc )ŽÆ@ô•XR¼–ùÈú“6Áê“e¤¼ÀF˜,ŒšAÞR%ϲ2v *œGNSX>À5T Æ!ñ ] `3 j¹IŸ~²mŠFÂ3‚,s¨¾ÈHr9q³ÐpuôEbˆ“™Qd†G­áÚyÒˆ$?Õ ‰fxjª£]~jÊ­TM¹Œ†÷©¦ æ~˜Ñ‹‚Ù?)Ž0 ßtß7Ý÷MG‚Z4p1© q¾™Œå*üÄä“CR>â"ñGÅ•Ct>òsÉtÕ‡âAd Æ$i*½ÇÁâ6L®Ë$ FXOØ%"‡Urùª; Ø#¦DÂÆè°E‡)Küó—%"†HØ¡ a„À‘´êuÕ ÊôËCB1<¸=M˜œ¸Äè0«s™]ÝÁ€å-3½ÛsEšFEhDœ TœÉŽ(EDhdDˆ‰X€!᥹¢‹ÃsbˆêhhNQÜ"»Er‹èÁ-y·€Â-:ÚœSêâ¶H1´=¿Æ§c9 ü ÿ¯ºEq‹ì¬ºZµNuN˜X+Ž­b†Z*üG¶ h®µš‚I­¿­Âck…¥\´VDj¯p®Åb¨*l³(~«„ X-*²[œ9r!û…Çö ±`LlÃh® #,&v Gí©/ ¶ŒRht<¿=£S‹Ù4µjxjÕXX“6°&­ú4i¿.måÁÞı£¬Q‹Øæ»[» Q$Òx,±E,™u¥pmI£2Ó¤r’¥RËC˜¢+*÷tªA™9‘ýÇÄaMŠÇÖº€™†ˆ-33`!0\Íõ8d?¸¨O•rë^N!‚Ùq xX^`@"ÖÎ~&c Eõš lÁ¸„ÐÜ\lwµ4…êiA-hj~=mAWÚ‹u5ÄÈ ]ÊÄ–5¶0­mYsst7Ÿö†)AvõsÌÊ|ìÌahb@C'ú9úCÌÀrµsø(2¨¥ËTOG:ºSÈw‡émÝ¡qÓY=| ¡…@µx‘Z˜ˆ«¨X—GÕ‘±Ë`nF,VÄ _Dÿn‰9&pô?á¥0èÿR ü×´è0cç£Ã DÌ3ïŽE¹¶ë!Ú3¡‚ÞÓ%<;”¨°yZ,ø‰è—±]«RU†()02¬…"Oõw)”/x\aÙ‚rì'à( ôiÓ<çÚM®r€éÖU 0õåQjô†ÕÛF,æœyJqÈ&B´æ© ¦-DY,U R b:²0ý¸*ÅפO¨ìQäÐÙåÏ×¥ŒÞ/yÂäN˜Ô “9XÞ€­”8aò&LÚ¸²Æ•ˆ²;¶°Ñ-/l„¾1bNÊc“mQ.†sy¤KcO<&•Œ*õ"%#CýÀõú:¾&{›xâ×Ū”çÓU]o“ãoò¼M¦ëÅ%ž&¿—‰uVú˜5jz>fÇ¿ìy˜ó3KMx<¸`¦ #ÓñÈ4<:•ÚºÄß,¹#ðhóÔ%ÞgTêƒvÆxöšáBüf ž‘L­yÇFýÓ®1B>ÔÀÁþ4j ¿Ò}~5Õç[ó¼k¢ã[£ž5ÏŸæøÇ‚¶3`+bW`XE$iGŠœþ…¿ cÝ$_–LÕ{žXËŽÁ ¸¤0ÈÜ•eБò¤Ç° Œ-nøiã³€«Jˆñþãm‘1åÑ„ðóŽ™ “A¹aydóÃô'"Ã[ÄùbL˜7á'úV|~•ŸGá%¿ O6aÙÓ¦l;„q‡ˆu#Æ­R…IÄÌ{ë^ŸctÙ"دˆ1~Ì´–-Y6ÐÒ‹ô ËF¾ši;lÐþ0},PBìÏeä: ðˆIxFÃ#…Îð8Ñ(M`Ú*Vr%<>³i4*$žeêú"…Ñ ±×? ë ÃQ &LBtŽq¢S†ˆ˜!b€˜ùr°z”ÑÆKœü(º¿¸C`°ÙoQÓÿöÝêØ«Wöã*Ø—+cYëRÿR>›ßÏæc¤ÆÑ7‡÷©”÷é4f1 çñ@¿UäEâP¾ ëf©äݼÑÍIQ(ô¢r^dΉαn|ŽG»&ݧóÇê$𙫸¢vJ ‡WóP·¡Å`,/XÌÅèâÒëFøh”àáEûhŒÆöHtOññtœtàjDè>yÀÑvY. $ŸUH¸?âÿ¼/"èqÿ0›0,èYƒ>nÔ2·÷sú eµhW-ÚT@t€ý~›Š]°§– ϳ¤$js(ž5…l ÐoYŸÆ‹‘‘ZÄÂpbuŽvîz±&.¸9|’›Ã§ÓÖ©ãZ2ÜBP¤Z8ÑÈan4ö‡Šùa–ì•=òoh‘DEj“Hp4†¨ÀJs?àÀbCbŒ¼[¨Î -z:«Dõ=/ÒèÆ©®ÉQ­R º££ý¹ú²30äiŽß²OÈ\ò )^ÔÑwD¼ ë@õþÄ$}$ƒp Ò;ë‹AzQH‡ÄzžHé°¹4@ËCtÎù¢‘$QÉ¡q¤Õ 8&©¸ø¯ÓìÇ6õ¬S_¼Üµ ½È¤?6éE'A{pÝ^ŒÒsu{Y2^œÒ‹Tz±JÏå -ºno/fés~ûÜßnä2,:èÅAÓõ"˜ž;Üuˆû¢„ºÏ-îÄ2ó¾Ý4NÚ¸æs{±Â°,ì$wÖÿgc´‹Î~˜ÛOÆh#´ØË÷]1Ú¥˜ç‚6‚së#ž‹ñNs)Ö¹éôÅ9Aqöª·;³àt÷û°'ÀU%ƒQPei§ ÷X#¢$FëFEiv¯ß‹áŒúc£þè¨?>ÊáôG7Jˆ“ÒH)Í[ö"¥N¬T¡ùÎ^¼”FL©ýìšúâ¦näÔ;¥;œ4T/zJã§Àu¥…j0Žê¤®Š¥R³-Ë9> YJ4$JŒ6¸†BÈÎá±íRý™f‚‘ÕïNeæÄ¬Âðâ¯ÈŠvš¢™Ñt Y%/0Šì ÐfE< µ ¥~ÿ³?kò|¨—6æQ/K3_9š8ÆS]] E¤›<$j©4+V£æ’N'25¦LÇ{ê9ÍÀå©E@òìH¸@¢›MȆ…:2TU =X E#X|=ñnO‹ý,÷¥„ÜñîÁX EïƒÇâFNM uÚ— žc@ª8Z5”9¬Áz å©Þbˆ­KûçN†°£p»Lò{ò'̳‹Pvü½Œÿ'zúÞ~~¬§‹“hv…èæ28Ù Š›ýNÄßû$a"¾‰j“Œ ÿ¸Á çY'Ç„uG,ÚÁ-sÖ_ÑÚϲQe-pyÁÅäiÛÔÛjR žs­tOß^¹7ʵ°‘†gÒm~/«çcý8òâYÅÙuȳº*êºjW”·ç0B×— º÷—"˜ØÞö,n_ ó‡Ò œ0<ïæxúó;±Å…ön‘dlqù=틾v’Xám÷Ðè¾(‹ÚXÈÂ’yПÝÌnÇËN’9¼­È£bQŸ Oý)Ä›âmü@–±ž s8[dÛÀ–dT£|jCÁ¥£È8ÇÓX°§pާ/‚–và%%p úçKfð,\Ÿ®ô]ðøÂçߨ¢Ï¹ú³FТ FÑOA‹&Î2ú)#hÑ„þi#hÏqMKf½r^N5I6ög­[Y‘·ºåeÙ ]‚&@X hL—¡ºlÚ\‹]†mt]ø6å›8¨O6±ë¾@¼~÷6Dy¡w/ðîÛòð°|¡w÷¹ÉÛÐämc© F IÑŸƒ“þßnî»ïÏ\¸fRß“›%ïÞ3|uý-ûž§Ê‘ó¥ô‡½YŒ›uOvyþÈ€ïW?·¸üa¿VèAKW]³ßÙùþKNÛÊþÎÏ>;ïì·[ÌSãC¡·pÈ…ÁCÏ=þÈsˆ…Á/ ‚á0”C÷D„Ã1 ’!°)Ä…Â3|wDD`ŠcÆ ¸†g¡õÃï RÜ7Pø fÜkŽsÍ„çVs\jÎy»~W9U×ïH“.4ÞÝýƒÝg®ëÌqœi—u˜.ôy×Yæ¸EÍ€‹Lu÷Éçu‘B¾=²¦»cHwwÆ:»b%ßÞ¡ý÷9è¿ÏAÿ}úïsПƒþûô_|üÁŸƒþûôßç ÿ>ý÷9èÿÏœƒ.„½¿ì‡šù_wúùÊW˜q‹áM|àŒäS¨R’„¹ ñ¹iËþ#ŒMšÐÊÓdeG¸9GëðîñYž€£óÄb‚Ì3èòç=q yO‹»ôi˜ ¹òØ©æZ ÷,þöÿ †{~‘¯Åå`ÏŠ§ƒÁ/ÔC¼)Ø[òï õ|1àôp=¿ÐéD&ˆEGhþ´ËŸˆIg¡.ÿ/(Þ¬>šPÎ×ߎ:ðÑü| ^ˆÛûS÷¯ä¾'aÑý»äüEêu8¨Ÿ:=×ï¢ó×uýÇ/~µíÿHׯ'i³¼#^Á9 &+p¬ *Þ³î‘9K²û§šù¢Š_%ª–Ž›ùÎ3þ?Í¢H;y4þÓܼ™ÚQº{ž·pv£ÿÄü<Ö¾“ÝsÝ„F//(Ä Õ‡Ù$øDn2¿S‹ÝŒ/[Hu÷ˆ ™:óäÝS‹U`iÎ\MÇ¡8ÙÍ«XȪȻ)^nÅê¬ ™·B¿¹Ùª/³Â»æýinxÀûóå1`!HB¾L×EüsFé²I xï¥?}ìâîøç“Ô5²=Ã:lß²ETKgfb‡ÙasòÍ 8éR®f`†Øà….—«C—8x Ðô—þ\ÿåÐåbðrEèd•¼¤.Ë‚Ÿ`•A)ð“ þÏ¢W ã”JǸ`ܬOŸåáœ\FSN—øÿO5ó ø¿°Šÿ ‹üÿË™_Tº°‡}Åö#÷˜©å4éå—1Xåv,r'Eq@ïAÔúþHáý¢’ídÅùóãœ+˵•˜ìµóö.RϦCþÐ+Þà Æqœž_Œï‘m™¾ìñÅ-ìœu¶êxa')Ô;þ×rwÚxKç¥'˯<ñ övŸwž,¿ìÄ92ØyÙ‰¾òe'˜‡°$õšY 3'ZAÙÑ+ÆÿîGÃ)aáhR¸¸ Ï#DˆsçÇžÿœA\ÅÄÅW¸ý޽ý޽ý޽}1Rö >¿co¿co¿co¿co¿co?{û8ù;qòwâäïÄÉÿ‡'ïþm÷SBÂÿ½´ŒŸ´Ü¥U–»´´»:¸3ø]ò•à+e*uß^©à¸‚â“Í~™ê?ÔAHWÝ'+M7ìŽ ®ûdçÊ·^ú¾" —w“+tTd'29@Ä‘ˆž_ÃÀoM¥rKżïÜ0"‰7Ã;;LÂm8ï3"‡m8‘!!/¹ï0Ó²ry¯1––Þ^cúþ3¿l]>_.üt9š¨öÎK`L }ã¥؃Žüî».} *Þ>t…ÚHÄ×@^ãò˜­ã¾DÞGÒ®xãYà–TFzç"9åã×ûúegˆô„WIPçD¥U2t…Å'.…¿ÌpAšÒ‚%©+/öú¤f@nú%çŠ3¶ð–B¿ Õ”0Cƒ’Ô/KAš? ;kË/SC"Uî+šþ;MÚzaÝŽøí¯àá/y.cÅyM º$ .ï ååèO6D¥–iøžÊ;ô4ˆ$Aò!ïÆX^?òø/]ò*Ù%‡xƒв…Äùl§EëÊ“T¦„Q´lÉ…V¤/Y†}uð0#eÉΤ–§ÏÌaC!¤ƒŽ"EE„ˆþ¤'Gt<ŽêG?d‰‘#Š¿„L߭͹‘6•¾][À¶<ñ>_BûoÙ¦Çác—^Õþñyhæ¤ÞŽž§ïG·ð;Ò—ýb᪽ΔOƒæËaó`àÜe*®/Ê žsÀTL`(H¹Gª=b'˜™ø_aë¹™Iñ,#ÏZòx¾' <éà})â½(Ó‹‚±>IäI'_ä‹/¸K<|:›ä“…ž„\8¡Íç’[|%¹âõ¥xòò+L¿cü<¸_ôä‡f¥ûeÞ«ÄÃ_&¾ô:q÷5´K¯´;¶×ÿ:qO±òíã½L|áè^œ)bD“C‚;#|ƒî+è{ÑV´¨Åhâð“³}Þ)ÄÉ)ã°•H‹÷Éãרç1[á1kq K6ÜcVã3RœÐ±?UzÃ[òEÜp[¤&‹^‘L]—u¥†Ÿ®v¾=[ÍÁ L„Ë¡%Ã|rQ PIn¶‹“éÂyž Àv“¼5«°c–õ"¿n„™yÇÛ’†vrÛ²¦äd:9v&_ô^øÝì< 8úõ&•&©Þä²u@Z4Üð’EéQ£t¨¯ Q}ÔúŸjiã„3Ò€ *ˆ·¸Õ{9/BF2w„ND·w}bnn•€C”¬÷â^€À šEðR]8„0tˆ.ë  ¤Á( %ž#«À€ä)@”TÈS$WA@^!BwNРX0èÌ…Ó ?“œwv¡wz¡é¥æPç€L¿£>øšKï j6¨^¸¯o_…r²Ë° ƒ® ߀Kiñ`;pÜŸ|ë¹À‚®.“îñÌÏ<áéñwyé˵%:#A4•¾fÛ9ÞÐp ç¾r›¡GÈs^À-¸•|IÎÁ³puú^tÎÄe\ÇçKÖ!§á’€£“²#ÓWx“Äœºók6½-˜É?ØÂ¿ÍÏünó_ä}ÿ%–»²ÊrW½Î®‹)¯ÎÖŽFåY×í©²ÁbТ;gÎkôÝà~U×QweWéõ_ªòºên@Ñ\]TrýÊ­ìž4åWk‰RËÐP ¬†£GçMʾ7uÿè!ÁÒ’KÎò;ú¼`™ES¯ýo”—BOsQšëõÑÑÁ«ÒÑ6µ—Û*çG¹';ëB7‡ý˜Ãnõ1w-ÉvA«%›!=*áäÕÀòŒ› *bUQÅùb$ýTG&(þþ rȾ[¥5ÿ› W ïäAœïFœãŽ3Áq)'¸ã 3]%×ð9£e7ŒK”\×<ÀxÁ`œÐ°!‚°ÇXà©·¢«Þâ2†5¿ ÜbÿÀÜSnLDï% {†«¶N.ŽCq@o &ŠûüÉÁC¹c¹ƒ¹©RKß㾜ƒÂ/)µ+½faênèùÂ?¡òúöIý"•½NûçÝE~•ÔÝÄõïw9î"Wùý(qÕ^¶ÅÓƒ};½:áN¥0—Ò—à˜þ¡±òýpè|h¬|/Ü\UØ…õå,¹J,O_ øTYÑ}¥€L‹«Òt‚Š­§ÜõÖt=¢ŒOÅ%JnPÑ¥Ê.Ð8Qwƒ*¯§öÅ×Q}‰ò먿ŽlRß+&dúzOv^áW‡ƒ*±§ÅØQ±r¢S’söüÈôy¤Q:[’œ Ò!¤ð ÒÏ4ã(¦ôøxÙ 5É޻ˉî퇲h¯à½Txßlˆ~úó­}¢¦ÂÿÑô™ÌLJÖÿà3 ¹§NfµÙ·¾ CÊGñ¯H´`u8¦"¹ÓÆÀŽlÁíZo0îÛî}&RÁï—wvÁƒ@öp<œ]%¼g[ürÝ@í8o®¿þ†~Á·W¸öw$9‰Ü=0‘öŸpïœÔ¼ý;WmÀd"ÛþÉv}Yû\oÌû³‡O'@ûfq!ãA]Ñ ÌÏ5?ƒDqÍ44fõ{fÀ®ž €ÑÏ![môíÙÌ&Ó¨6¿cÜÉ»sh`:›4f½Ñð!…—àú´tÁþQmá=ìnÐÔÙ«Ã8ˆ¿¼ëœu*Óí‡h]“ç»y1r° ?µ]6/Ò–55·êý >àÿ1ù¼ ù¢ÚÊ·2|Ò0÷C sŸ7ÌÿPä9Gás¦KÅ—3]Z“DÔp!?ÜA®uWƒêÊ÷vócâ…u–¦ªy¢ßðß§Í•A€´ eý‚TùAå‘eÈÍÚ·AsÔGMýÎuhlñêªè Qk>€…0³R²sΤ¤¡Ÿ½RE“oôÂõIùtÔ¶WÜÞŽ$ÿ3è¡B¦1›MzÍùÌž¦•ÕɤñßÚÌ/êÅW¯ÕíõÛ{Hkq‘\ –ʽþ™}Ûôv21œ>ýÕ˜L·A®A×`Ý¿ý¹[ݘ®¨ˆ^MëÑÑLƒ?ÿÇ/Ø;öWV©?j½Ùí/-“Suë_1Áfo؆³_™$àLÍžâÙ|a¢þê¿)~~QØåkKÑk4ûö—(ã+þ¿ŽßÏ }- ºÿ„Gólͧ³Ñà_ÀþþKQ´0m ç’¡@‡_ÇÔÿºýÛÆó¿‹”§¿ÿøý?€“Oû½Öÿ6Ž"`mErçv£ÿÁ¬»vï¥û%t«þ+Ø7+ò2ÿéìþîµgÝ/MŽÖüWÌ-#ÉÊçsûÏ׈õß2'çQÞNþÓy}ûÒ¼¾ýKæ|G>šOs4£lwf•ILÚ/Moù¡:ùdm4Ÿ´lm4¶ÿúˆ¹Å8ö¬ÑEë FùéÁÄÛÔ[ò%œóÕÆ—µÕ’7Æö$2í æ}üYX0T¥1™5GI;ÒõGg w'v»7DÎíé¨?§¥ÜŰׂ8ƒRK,q]; ƒÍÇ :šÙCèµ:±§ö,â3 Yohð ¾?ùËŽÔíÿÌ"f»7k4{ýÞì›7:Èå^Êá˼ñbGª£ñ|Lï &Òq2iLgö$ó—Ýš&‘f£ß¶ìåÕ <3šÏú½¡™ÁØBFVu:›ŒÞ\º^U»Õïa©‘fÿŸÈÄ~•ý쑱³P£¿ìÉ9ܦ!£g#"DÞ†£Ö +ò2¹«³¢nàÛ˜ÙP¢±'Á‹À8,!ɉ=íFÎñ:öþÁ˜äà úÏ©ÌgcÂ'q>LœMÃ鸤ÔúCïµqÿq%¢¬ª•haaó/×}™Ø.½¢+yueÎßð§u¿«á‰ëFútÀ^Õe•5(@jvÿ°1rÆìIɘâÛáÂÆ­[µ}D¨Úþude¡®W ƒw•Öq£Ý^ĹAcú¶ˆåÓñh‰g5ú½©ðŠ´Ç½,½˜§—`]&Þ(ÕRDÏF.®¹Ú‹ÃçôÉh¬Nì† cþË_ ·Žoì|SKÕÆÖšŸ^u{­nu2êôúö±íTe=ìԮ͛À­í9¢ßΤõu` @ïÓ³©W5,Tš 0M6lÄæ i·—F¼ÆÛMÚv;¦‘Üéhö}÷xå<%'÷:jfXˆÅ, ÀÅzc`èÀ^ì…¹,Ö›¾õÆM`âo©ûØÀ/§6aY°ìAÉG£fiØE|xýÝBÇ/JêC»¿ÌÛ•Èpä±òHoˆÅÁhÚs—h…ôõ‰].8ÿUQ‹+ëHîèTîœäŽ_n⺄Žr—D`j ¤ºöj ÛTR|(ÈSe$3Õ y «KO}¾lĬ־Cç@µ?X‰åÊ*Ükáî_1RïëKFê÷š‘Ǿ°hŸQirY[$Ÿ‚F[­þ$;€Ç½*d”:“vv4yÉv¿Ré¯eºXm Êv[û´â_ ×÷[‹A¿¢V d2~T©Ï¶°”]¦É…ŠÓnÄŒ_ý­†´ú!ˆ÷EFâ¯öŸq6h¤„-TB¦Ä£‡£qkôYéG+€k´çße.<ÿ 3™´'°*óa+õ%ö„«7†CWu W'p5&úˆÈ~>–¼ÈÖ²‘+» ÂÔ•vä>Y»ªTïS‘¿¸팉vµ 7.Tqo÷\C=ÑúQë >Ù˜¥ÅÚRÓY?Û&MbÕÂÕz>YSô}À¬¯<4n£õë¿>®qûëÍøy(Y1”ª€Iõ —ûè8‹+gó×¹lT…Ïžø¥ÌIYû¸>ñ~ΦGÎÔž}Z¯»X/TÝmÛÓÞËÐïæYU»I½€Ÿ×ôcö‡Ófo6h|Ä”P]Ri²¨¸¬R5€Oƒ²«7ñ¥±ª'!ÏI³1™~´ÈžÚæg_¨=ûX Vž5­ÏªøG8oBõÉÛtaä_¨íü •ý#ÿBõEηB]O:£á‡äŒ´EWÈŠŠÀô*Ïy´ L–ضΪ¾|‰C!=Œ0¨ «øƒŠÄQü™N¤éP}’èNÔø~¤¤c …x‘[ƒorF¯æhÖuUˆÐ•Ñô©Ž…*Qáï°OEÈ®”Ÿ~~!çÙ¬¼ªbÀxI‚&̦i~‹Ðü'Ÿp3h Eñy…T§žß/´äO w 0«ªÕ—‘íò±Wßï…o…ÖYlF’”@WG£f¤2Fè<Ô<'é§þ‚»R¿?Çlw4‰ü„Êú‰„Ac¬Ö‰è£a ÓR„t¯Ós11 ÉÐ" g’ Vr³1+7¾Ù®e^΃¬`Y“Ñ@ÌþMÞ´O9ðÊGÏýˆùÝ“Ó,õiÁ}âÓúD÷w; G­. Æ6FIÙqoØö3»°¹|-ÄÃqaºÓ÷Á¤ñÍ뵄4aµ9rÍð¶ó×cEâ}ëHÜû|ç¾9O|²Þ¸E;|4By`@‰òå§‘¿»ö02mü…0 1Œø‰ ©e‘Æ]VÛ£¦Î܈]6r1ÅM¿Áƾæ‘q‚ųõ@˨kÒÜK£7DÎf_G[èÌ}tÊGd6BM´ìH{¦‘~ãŠ$6Æã~¯E3·ºhx¥¡M¯ÒÛ@<‡Ñ:^÷½id>|C;:³_cÐtkÒû½Á_{îuüvú±ßÁa}Òœ íå¥v±þ•ý™Jç<¡!­®ìih+0 ¾6k ÛÉG^@—A±\ÙÍËžý÷jW‰}F^¤Á|@±«}Ü>G–0į­¬¬ €ÌĘTNh+Gã…Ñpí 3<ðÃõ#æ±@Ç~~ùÁS®½ÃP ܼî‹pu´ÏTjÆÀºJžõç Ÿçü§q€±jžöcâÿ+sA‘ŸÆÌ®wçƒæ°ÑëdV8ÝÅ$Q÷»ï9áSõmŸòæÇöЪðl¨"á(p_EÝ5ä>9‚öÂÀ?¦ü€H bGØSŸ$Î|ò>ÆðEeÇQ÷|"Í$rOoŒI2QÏþÈ,úznÎ÷©€>nêáÿŽ¥|¨yêW÷~PyYÔ˜‚ÚK¸U¼C–4µŸ2Ÿð¸çw)¸Ëý@ù4¢4lÒ, ¡ïbR(Ãf8£í}޲=”„g˜©ñj¼l1kÅíÇìfqgk<-N¹tSÜ.G'N­£™örxV.îäíšÞÛÝkÙìÆËR_åö t(ÖzAº=˜¯Zþ6³¥Få©ZªÍºé=1>·ŒüÚ•öÚ߸‚nŒsÔ mmMR:ÒåÙݽZ׳—«{õ×+<wÞ¬‡baš¤­õ¹•8V+Ú‰¥wŽd†=n¶-½=¸Áœ4Z_ܽògåÝ[í°ß]tã°+ÆÁÛº }í fÃ3ÂÕhy¼‹õZðmkv0Ž5%½?]X“íÒtÔÑ{ÓžˆYgæ®Ê¥â¥Co^Ûv!1š>O!$;IïÝ9½¾ÜOãáîzyó`öÔ¨µç##×ÛMZ¤ÎÆ¡¨ÖOF/ÅËz©a™òÙ5t³“fÌ{wEÆæÖ蔳bá?WÌÖÛ{ÂéJ¿AØtân£ ¼rwC=ï7ýõ·À 7òÒyw3«ßԆУ;žŠu)QÑËïu6 B6FGÝx ˆ„sËzJE»x"À€‡6–Ð\¸ë ªð<¾Ç7A¬ŒÌ­zkòì Hüz-½·+òø®ZÛ*õ^ï¬&EUêÆññaÆÚ1…¾‹gó²9$õë'Åu­Äd¼îãUÀ 9ÖÄ Ð Sw+Í-iû¶l©üÛÚ¶‚SJcóº‘GGŒdf¶:yãxÿ=ïïF{²ÕóaíB­ÍJ3]Î%ƒwûVQY;6ÇyÊ3ÏH¥»ú»Zѵ*Öl¨Ö5¬ ˜©H; ÎÕ§HÛ­‹sUº?:7Ž&›Ïa ¨ÂáCI=¾:C:4ÛÅúÛÁ´bO¨NX5å÷Y×´È~lZ|lW`•Ã1-Pk’tñ`³i-׫ÞJm¾ëDç¹ØÝÇÖÒJS ºñ[K¢¢ÉCüZ­XÆëÕ“Þ{sÛÁú ¨¾›,,ËÞ³$·GhtOm¢n­ÿà5…š¶ö¿Ëð7]ÇÁžñ’Ií“Îø½gPà*z7}£çz{» ¯àRL•7Àþ¬åYˈ§ùáP=Ä €^ù8ò2” îSõd•Í‘Ø#èîÑAõ° Ï<Ú¾¡*oö±Sj§­ç§=Å8¸‘:`µ›ÃäOÛ=‹¦îlŠi¦Óñó™Ñ¹H×¶ .Õ6 )bs‰…0±ÇÄÛ*ú’¬Ç‡Í¸eçÏܺ2ØÙZËÝÉR«|¤U‹0››Á)uÌoÖÕ³ÓÚ¥e¤ÚÎ çG Fz›7«Lù¸9ö,éEçwû†`£wôÞÁÓ“ƒ_YcöX{;Iƒâ_íxÄ[@^™GíÛz7\‡Shú ’)§hÁo=¿2 CzÿÕ]SêÔOÄãìYzÿ²ñîôP—ŠÛÇ7101»Ñ`ãµvÐ~ØìN¸âETÁpÀ@ØMÎ9!^ß@šŸÙ,áŽnì¶®ï€xŒõ¼^|_FøTïížL‹k½!î‹×ú©~¹ïª¢#o¤^ëÎ(µÎ«ZþŠ›-Aÿ1aœYÉ£ý²rxoͨ‚L™t;·×ÔŽñÈK…qV%©·é5EÔAÔZÇ!Ü»ÛI­­?!$ß1›¹ÛqP-'c“뉵šõOÔ`†é{óñuÖÂnËå%=˜™Mm3 ÝNÒüZ¯'¢”Ù/¹í–©S‹âF™°dççý ,9Œ[ºúºc±„¼ƒ–±U\7#¯ò¦šuURÎ_”ü³6€ijÌÊ*H.4-•Ê ·ê®ÚvZýrÿ­¸³7Fa"­?d!mØÚÛÆìHËßÄ.wïó_š+Õÿ­$³÷¸›·Ò)˜'æÈO€bq„äãr„>Ä­âµQ`åè©•º©ÎÔã¶íëu÷ø´m´ÊV âcKÓ¯¼½xܘ°äÑsWð‘¬û ì7}:z5:ÊQßhnöÖ•òódÇRûÃö¡. B,œê¹{ãøx'Gt8±L¶“´ êyÌêUA='îZêž&®£Ôè¯/±¢~5«ópŽkÖ8.Å£k’v¶æÕ«ÈÌžðæÝÜbÁν@)Pÿ ô¸/ûÚå7“)b€JuéÑ ×Bxt¶­di *ÝûÓ¸eTOjÖú8|æÊ~)òÚmÞ#JªÁ7OïÂ@UªÅuþ‹;™l*¼T+q€œÌ÷PËä—‰-þ¦æ“Ú…™œ6Oa׋™nÝb gnVwS+k\ªSmƒÝ8j#ÃúXu+›~Óê#’ÅØï…€ë·¿Ã/ÎhÔîÖd@𷹝ò¬l= ×°~‚CX‡‹'F¶ÒÝñ!5²6S["hGùu°4Š}³Ü¶•Ö%ã‰Gþ¹ú}ûœµ½óìüeLó‹òq»c%?¤1ÊžÝÇѾZkŽ;Ä äÄØ‹6ˆÉ¯>ªx8~wÉÓ“7¸›+~§!mŸUªjm~Á- ab”½)È1mCì‹Öóɺ²Z+¨v£K?i—ãá0w YåZfst˜ù¤^=qõ`6žK1mNød¶‹i>dÿôÀÝóå,´æ#À¥¹"Óy@n¾ƒ:^:u…4f¦¯“k+1ÛZ~®)¹ÏtÇUIØiÖìk¯¯Õ¢QjŸÍŒ£dÒBñÔ‰<©ýÆkLæ,QŠ:]¡ðjˆ^[Sn©†;‰·öm©g›O 3[ÖÏœæ3¦tw°³@Îl@miÕ §Í¹õüÈ ¦ñnlþÖP»¶æ“ˆâÉJ¬3ow +®“F'1Ž‹³ãÙ®õÔÏæ‚Ýô·^"ÓM©ð˜®¡ˆRz6|jȃ’o¨ù‘Â^çTù`:Cy è•×Åiê:f=¼öÎc̱žó ¶;cà$÷9±Ð¬$¾ú8zVëëðÐzš=d¬â†]WÏû£w?2‚ííøÓœÜ€ê­Tš—Ý5^1rá¾'î½ošy¬W.grÙ™ÃɨwŒ‘j" Ý쥘sÐxu©ÖíŒ×3ž7“@ŽklVµ~†­\ß^ÎÙLóœ…~à>Ì»(«cKH¬†ÐH¡(¾³J 8DÍB­¡Ê™lÌèä2Wˆ$ÕaóeêÅX?Ä— ªÞÐF/Õšðˆ }‚¶~6V¸[Yª{˧¼_Ë0óÁUÀ¥‰–ùù 8Ø™ªÌÎéØçuE뵫mì ‹ÀØìåZ`Fkª¼UBM&z eÕê;¢äa~k-µr|Ø@Aå)"£ë,f¶nì»íÆh,9󦩌zæãu÷‚ÈBÿHågñ¢r÷J°¯^¶î÷*cKz¶=2[bJÐNR©ž4,¥—}äg CžXëÖÚ­™¹‘_@¯ç3>p O|?nìïÞvà»4·¡ÍÝífám×xèÝÄ}èæQ0I lpÐnü™Þ-¶3F©¯_©#µ“ ¦ZQq¥Éjõvkä[‚€·\DÉfkë!!-˜Íº)x¡ÿ@×·2h/‡mbIgFÄñ —•âÕY:âì/€yÝR‡ûѪõœ|àQÜGÑãmüéq»T9< ×M˜m'äÃóB8ª¬1/H³HA÷ß\ÅBüáK™L‚ò”6OÒ P_z {™°.°w­]$ÆkÊ…y·¦¼\M`l‡ydK=’¼åÿÙûÓÝáÜfàóIÚ£·Í„dä¡­¾#Roñà!¾¤ÇSö¢Ñ¨9WªGÚSôfo7r•CeÛj¬OvµZç$^æ·O£ÑÉMäÏÁô-Δžurÿ\¹™w­ÄAyüÏ?ÐF4¦žhts¾%%ÈBÙ¬üã}P5®89+±ðem‚~‚õðÒ‡/ëg¨ ù@+ÚdT‰.ª /ÞSðecÿ4Ÿ[¥#ôsÿÔxy{ý¬ÊõÛVýl៪|ÆáK2†ßQåêk¾¥vÑOÄy6²êüØDµbçëo§<|Û:E›@oõú‰‡*€xÏLáK†ÅwA¥š¼£ŸègÆ|Þ{O¢/ øG4®ÛœàŸd6 ŒM^àÀ»ÿ»@"LÌÚ1æj–/ïoòZ.SUëïS`LÚ&kž|0›k…;lãÇsþ¯^O$Û0Òj<ÚåŒÂkwæù’=ÿçÀÀIQz/b=ss˙ь–ëöÒLàqô64˜ºèPn¾Ý’‹¾»kXx ­uú _DÃõ#˜êÆñ#\ë9•c¢ÊÜ){–0âhgµ}™¿?ͲÚÍí¹zÞÞOhf.žÇ#Jf_ÞÓÆÞÛ®™]oh÷â³öVhoßozš£¼f+ßP˾%h'Þgçeò¼TÅãJÕ<,Á–Yä±’ÒfÙ:ùµyëŸroGÇÑôÞl"ÑUhBÍK½¼À^q ɼíXVôrÇt^ܱ ã9VsX^¸5 8Þx¾¦µŒrv‡¥9¶çA k}a½`*Ê"”ØÙô]ƒΧ™\ç@e'”ªÙ¤‚>sÏÚÉÉÞ"`)DÿÁÈüO4žb3Ñx®5ˆÆÚ‡¯Ñ¨q•äèÑèþÑ .Xjó!M^¿G7 Ê&Fv]¨B©7ù€~›ÉÌ?âU¦ŸÕìEF·2É£‰h,ñPˆÆ·ŒÓè—nF×% âÄn9e£æ šÜïßESfmÝ<ÞÎFÓg1-ºuùxÍÜ›¯Ñl3“Šæ^z»QfP=‹²SÉŽòñÙZ”Ÿ_ˆQ!±s·âQ‰}šDåâ U¬üa´p}Œn·ZLÑÝÄ•ÝÛ;ªD÷/w_¢Å!›Žj…M#ªßÅŸ¢fb²µªïÅèáúø>ZªŒãÑãÌ\–ëOÑÓýt*ZMˆ¥èYSíEk¥“|ô‚¹¾ˆ^Î_cÑëÑ–½}ÚE¦KôþúBŠ>žõï£Ïua+Ú¼<¯EÛ×ãµh§½WŽvGYô-ÁF…›÷訒=ˆ¾·®Þ£³-î0-5æ±øX;‰%´x"–ì^_ÄÒú>ËLןcÌIc;Ƴ'è&&¼ŽbòéF2¶]ÞÇö6;±âäæ=¦wÏk1ëñ8+=”ú±òýa%ViŸäcçý³aìbvYÝ0ÐнÚÅžjѧXs]w¶K\¬w âã‡Ø¸*#[<6Û¸ã±Úd-žÈïwã©^ó*ž©‰‡q–¿‘ãB‚OÇåAcßyÞîċ篷qãô¨?¬1V¼|õ¶¯ÞŸåãõ×ÝLü&žÚˆ?(ãX¼QmLâöKmåŽ_¡›øð\ïÆ§ õe-VÙï¬mlé/kéǃî³}üº&D/kÊýÓûÚÞñ8º¦ìÆÚ!¯fÖNÒWÂÚùÖtwí*[8X»Ï]V×…øÝZç主öö &ñxv]nÏQnËzâú´¼žžo€¶xÚ®‹35½¾sšØ[טNmý {Ö]?9ÞM­×¤lqý&6»^쿽¯·_{âúëÓsu}Üi Ñv#ŸØxkŸ%²‰Á8‘—bÛ‰B•½K{*Òâåqâäúm˜¨'¶v·gÍDƒéå/¶p—WÙÄ<“ºÚHL¯2;w½‘¿|ÈnlŸmßohÇ£üF©RkoTï÷ö7®zÉñÆã¼{²ÑoÒƒréicöVÜGÜpco7šÌv”뤨ˆ…ä%’÷÷V²}4.'û#&gÚq,µ¡Ù­TNOWSR¹¼—ÚœfSïÆ4U;µS×GúUêy=NõöꨛÔ{_6×÷ôf6qߌ÷ÍýÃüÛæ!¿fož%FÍ›‘ý¸Ùì7î7ßzw›³ÑÓ]:•zyHsòè)½}k¦g¦“>Ý2úé«“ëIº›®§_Oälz;— ›­äS\Ûâ¬ÒéÖNft·eN­ÞV¥5oÝ?|ÌU 3>w{qô˜trïÕÇ&“Lª; cö…†ÅͪqæòŸbšg¼À ¡cv½”DÖ+Ëž¦rìn-ÕeK 愽IÛdõ;<¬^rëï=•ãv7ÒÜÞÈìsÇúã w½™=àÚvMâÞËñ >eÔ†¼˜O=óºð|ÁW%íˆPÖŠükùEÎÇ®*(ršÏÍôt~wGJänÒ±üõæÚ,o߬MóS~m*¤ß6g‚r%Å„]_.r•”Ðʼ0ÂûÖ¦$nnjû¢Ì>Š––«‰õóÚ“Øì'ûâ»r“6ï󢤤Ú8‘îàñøZºÜãÞ¤öd´)MÛHØœT®äÃñ|¬kyùvoûTî_•x¥È)œ}\U´ÄåX93»;ʳ½”/ïl6{7g…‚‹ûÚ?(ÜØÝq¡WßE/âÝ^;î¶óúµmÓíºñPÞn_mlÏÌÕ“Œ ;Eýµ·Sí¶J; ù>µóÞ¹}ÞÍìßè»{›íÔîi£ÛÚ}º\;Þ üÞÖÁñdo×h>ìo–öžnO ì{ãÄ~&£¿íïNö+ãru¿amû“qC)æ*¹¢*ñÅZr=ZlÞÆjôñáMåw=Õlß¼¨W/Wõu£ÑCõíUSÎæíxÌL´Gí ®'-dòëÙÓM^W¹òž^›ÍŽôNóàÒX»ž· ©r:5Ž*Ù¬ñpÕUñóIÍÌ%öz¦&o¦Ì‹û¨jö67ÖÆÕëÔÚÎuëÔ~»°š•Ùô ZHíùñ ”:EÝ<¬·NÞÓ©É!£ë‡FuòvxÝ5÷›ý—ÒVýx¯¤¦R¯¥‹»–^zU&G©9wz´gÇÓGµz÷á¨{iï'+wÓãÝÛÇËãs»¡óìÍÊIyrSÞ}B¯·_/×6ÔÍr÷òîõ$ÅF/Oözš~R¿èq'¯Úvô4-½tOUѼ;½â§§ƒ{£’=±¶+Æ#ÃUîbó­Ê»ù¶Qåºxµ´?¯>ÍggчÎüL¶F±³Š’\‡nÎ:i1užÌU™ó}þU:¿”sûçƒÓ‹£ZÎN\ÔrçÍÚc%5®Gc÷éº\ßß©W ÉJýeÖi^l¶.ãÚÝqáâ¶V<»˜Ô·ß.…Ç]öò¤»wrÙI˜¯W)­†ü$WêKçâêV^]M:{æµxøðz]I'·¯_ÞNZ7éç5éÆx¸hÞ<Üqòm´ÑëܺåýÛúVat;0Så;¶3ݼ;æ_ïÚͽûÔn+z¯¯÷nïï›ã½‡èCe¸=lŸšgµòèޗó 1þX‰Þv{ÒæÅSöâÂ|*%Yé©uÝM?§ò¥ù³>dßžïf­ÆZ©yߨ/^^5n‹ÕZc^ªž5·Ï«Õæeû²Úœl6Ï[òé ¥Ð´jSö®5:.5ÚâÖËkû¬ÅLڃ˻”?b»º{«Ù}}û¼Ã¾·:•«ëyç­Sä_xŽ/½Tj‰§—·é(ÚåφÛÝjnpÙí¿M&½ü}j»wvQ¸ë OËH1}«­Òkí>=x¿”vß”D¿ývi¨ÒÛôuÜèï˜grÿfÎÚƒØõ`oPÜ© œu4ÜH*Csƒ½¶rÌîhKÊÎFG‡üÕ¨ÛÜÛsL%>®ÖžžÇ£tôºy—Ÿ÷„÷«R#6‰òY{RÌ>\Nž6¥ƒij½£mc÷ô^º/Ïo óè­·¾³T–êú¶Ön‡¢â{ô»Ñ~9òÒDt¸‹sóÏ?ðF:ÿ¥pË:½'Ùúd²×@»ú—¯MíùäLU·FVÚ¼Òc×¹CusÛ¸µjç*+_ÕØMUÒnøµ˜š;µ¥y=w²h^µèÖɵÍ0'ÜNîO¼QÑ›ßnSÝŸ•éž|¸s•µF·ùKsrËÀänêÖ®ºÛZœœžÙ<‡Ëâ*@rЬÀ¨WÖ–k•§“Éö´½l•˜\¾F&â l*[³KîqFD;Áâ®+ÞRM˜é´,Ï1¦DÞì³¹©|—ß·_áçA¿1‚½ÞONîÏÂ{=…Bé1»Ð«3›ÉãÚiwÖ«Ø;>Xïu'šœLÙõIx¯Uö>ã (%lºÓ­“ÌŠ^…n²±qc†÷š¿¹f,fód¡WÔ î8fµÅ5éŒ^2eÒk#6;Ïþd~u—G½¦z…n¦r%¾zœž ãÝÉb¯Ï›çk´×7esAò$˜“S÷Êmì%ƒ½f'Ó—£8ê5C27xE9½‹ôZœ.ñÅû‘BzÝOš[ +U­ÊéõaV8òz…n`‘SéíÃÝ#Ôqn™/^°©œx…^­ùb¯“Þ~ŠöZ8Ëçzx¡­'vp¯Ð ¿Q.¦¿› Í»*ê•YâP§J"v=;+A¯Ü¯ž¨ÍáEzßY¸ëéÉD“7n.Ê÷G¡ÏѦtŸž­¸»±Ç6¦ÕxØ]‚…ƒ`ëÚš*,#åas(JÖ‹î."ÜíŽÙvw8‘*‡¾†‡³™ÌîÝJá—ÑbåÊ<[qw¶}\:ŠOîzšÍ1óPN§…yøãÇâÓiqo¾±âîq§Z.3¡wåÓ[9 ©xå¶–¹³æ4³|WL\4î̽ww’—úÎUß [´²¶yµ6éi+?ÜzÒÅú}øÝÕzÝMñ©…»Þ¢žw_§Of:üñÓë×?Íq+îÞG™7[¿{󀶉çÌŠÇ6ï\$_¾ûô~é0Ç»kn7¶%Y+;>µf±Šþx‡yèn¼–b¡wׯÎÚ—ÉèéþŠE›LvŸÎøâY2‰*d—¨{—ÓJ•3m€î.ñ£ÿŸ½;‘lË ýKùÇHH ‰—µfVfí¹Ö’µïûòª^½zõj¯Â0hŒ<4›acaµi{ã1 ·Ê¬=;¬{'oÉÆ\?>[ºy+ßžŸˆú·Ú›ïœèž;y.{Jî=¯Ý:Ý?piðyö_dz{ÔÙþ‘Ã×Béü½m…¶g÷Ã{¡8§öåXþè±#ÛlÌ»ê»Ï?Ïï‡BSûÖ®Ò§®»»ûæ`èú­™÷Cc•è“5“w)Þ ­{gå=k§²lpè~áfèæº“÷*úù?uóàåúŸºfáêHÝO_˜Ùz¬êS ]õüƒC§ùÁÔÎku>õÂÕŸºØ¿¥þ§..>¹÷¦*¾îöko}~yùSß?uWÿ•øS7ŸZŸáûNFŸzkƬŸVþà¡ïž9ZçS·¼Õ¹Gµ?uó… õ?uÍÂñÊðÌ>8>Éá֢Χ†;Îpkq³Þ§Þ¨úÔð1'y|ºî§æý”ºŸšuRÎÔ;ÃÃ…Û¨º_÷à†ªK;1: ùççÿU¼GŸßjüsÙ³–Â[{»•C®9¶»¿…Ÿ{òüÚ½õåvc¹BÿÑõC{«‚8üóá¡™‡O¢ ü×lÖ1<˜Ÿ›å“[ŠýÅc'Ãi>2\üeïxa¨g¹ Ç“6ŸŒëø†ÐVn¼4[,Ä“3¡¨Ó÷<¸uºº Ÿ?3ööí¹õÙ/kKŸPº[« %º47±iæ…짦 Ç(MíÙ3¿>ú%4“³¥[€ªA½Y9ç?R³)~çr¡ÇmY¿>ÿ%«÷!ů~¬ôæ†öÜœ:ÃèÔ/ž9~»a}!ß<ßÔ¼XO—¤v™Æî®Î)œÒÂØN~”Š[܉_zÞüÄ翜ŒoÝk|ý‡—Êß0ÿ6+¿dñ—ççÊ—±Ö5œÚ{öô‘f×pøÈÃü9Xþ%ó[¦å/Yñ wnj|¾Z¸†Y….\ÆÅSÚ;_õkÄâÙê:_LiXík¯ñ·6>>߸~•+W¡Bׯ_'n¬Ûx …³ßøÔÚ´cŸýåóuói­S_¼6MÏWU+taøAu+4yöQü ¥ïŸ>Ë7­_‘«óóWž.–Ž1Uû.ÞPì¬ÕÏùËÇžÕ-Q^’¬©Î~¹Õ®8}óÙ}öáÊðŒÛñšá9X÷ËM­Ûyx©…/—]›ÊïWñå.¯møåòs½¡KõJ2~ûƵ3Ë#·+óSù{ nÈ¿Wí:aøQeÖ¨ù• "V\²Š¯47ZQÝKñXQÝÇoÝPÙ‘.Uác.?îüܼ5=p±^âÎîJ•§œ»‡mvôRÝ£Õ=T9IWàÍɇÕxcÍR ߺfôUÜ„ÝX(ýT :±¶­ÓwnÅ%ªÿX«v/¹Îé{t8Ï‹ÅìÙhD´y/9|¹nÄÍáê¬ØvuÏOÚô‰þÊ„Øò0vTÝ÷žY?U÷+•¾M _)Kƒ«l ¢šöèpu\ESNL­áÅÂDåzɯN77;AÛÚÊKù ûrOweòªœ¾×ùSµ°qôÕ~Mò*ŸnDßëök#ÕW›eÀºé/;ÚX‹qÓ|”6;ÚxZèÙpV÷=ïp?¿r+r`í'…ÍTy³Ù´85Ÿ°çZu(V¥x»Yî§­ö@-%Â|L“\˜­òAc[iuóðÉÊ©½ÙãêÛÎìÏ:~ƒÊŽ6Ù…Ôl¸ƒ8µ¦ÓVàL¹uë¬8ÓjëVªi Ôyëv¦KOqóâ\«ûøm_^Óž+Ö¥•#a+/ÚÎñº÷Ùå'U—ŠQŽbÊ+fc¸MÞ³©jÎXã¹íÍè:¶zdmOøÃ%-·¸Åì¹úgÂÙÑš·¸¥›Âfî…G­N¨¨Õâ”Z·6®úƲâÊÍ µØØ4=ÐHûũ̞ËêxVE~”¨=nø ¿éêGPU}ùcêÇc8Z›ã„5’cy€øúàpüx®ýÞÝgÒ¡Më¼÷nÁêσXœÃÑêßbÖMŽuFn³£u!Œn¬¹½® ií\«#`ÍÒÚ¹ö{ÿµŽR¨çÇs“c<Û®ùäÇÆÉ±FcscÍ‘ÉöócÝä˜ÍB.N²ˆòãŠ95mLuªüþçËÉ±Ô Ô›šUžÚQ·= »Z÷–µp6ó™÷U‘Ygl#»—hÒ׬ä+ŸdGk)2[è‡Cmi:üа孆n ¯=i4æÝ`Æ^2ÅÑu¶g5nãFk¤© Uiª•q躷q7Ÿ6HSSãZ¸P=…¿í «šœ9¯ñÍS«S{³C=^×àÚ´õø';Ú³&u¹õÁ” -C×{ªPU¡o>Í'û¶x´:ýŽÙѱZ3}Ë׌±ºÅŠÊÔ`4yE¯MõˆQ9<²ÿ*LD¯ññº½“ë¶õ¿ýΩlÞRÿÈö‘kåµ|ácº³œ¯ñZ¾¾Ò¢¥—ó5^Ë?Åíh9ßPõ|}¥¥‹.ç+}j͵|ÑDåΖó5^Ë×W^ºØÙr¾ºŸš¯åë«»t±Íå|×òõÅK;YÎ×x-_U—cõËù¯å+¤µ.,çj¸–¯ð1]XÎW£µŠÖò¦Áµ·œ¯rtý•HªoØkßǾúëÀö5žÛV(S ÄÇ7+§²mjaQZ6þ9Ô¸Lµž68Úð*¿aõŠ•æ‹øZÿ†£Mã¦å_µ†¨^™úZYˆÙdجA™–›Rºíõ{­7;†ŸTOT^Í2®æ—ÒZ SL®Îwò€¯jù…‘5¹ýúZÓyš.»k~ÉÊqUŽ4¯¸^ÃZ n£š.»kc~Iݦ3œ›ˆÛºK ‡ÊjZk Åj­r‚W¸±]ªìV,ä·î•-ôÊßRûucÍùÆ“&²î`‹7Ç Uë^›?ʬßBßXh¼¢²¶…òƒñÚÄ#*uÚ*LJVލÜZ,¯P(5«_ÜSÿÅËãZ[véYã>F[k ¿]¡å©|·«:dµÖß„\㪿Fnϳ½‡ê”iE7»ÉÌûP¬ú3ïK—¯ù5ì+¬)\×, ·¼¦ðAÍIé}ÑŠüVG±›¯É©>Táþ¦îÑš¼¨¡å‚žx4Y¥ÓÎ׬|xÒéIk²b§Í“VÿIÊjNZí6´x´ÊñâmOVL¢*,ÁêÆýÅ—Oõ} ûºÇh¶ˆ²Ùâ!ÕzÇ8=Qø¥I[ýloý ¯œsÛü~pňpƒûÁzo²˜œ¹°fCûǨ(ĵѦ·¸åË]ç´ìyÚlÉ^«unï¨~°RÿF­þ²¿Zæg¤þ“ÊÆ§£<ÜÝtÁ^U¾«×Ÿ9P+ÜWÌR]ÛjsòÊÓ›£•=̃uWêö•VzUõ0ëUè+O´3ÀQ¼—ê[¹ä·ÆZ½† PýeY+&'­ºŸÊÔÊ*ÛåV Ù©z6ÐjÜÖœâTªi¡X»sªªŸeõ êÞ³åzÐl^U™â™+Öµ5zÓ LSm¦µF‹ýÞô-¿q¬µb5YžW·L}+ß2²wâÐӪћ©u;5¹íkríëµr‘ì*Fo²¥pMGoò¸iznšMðoº:h¹g“ ­í-\m0ñbßóªŽt_q¥W³i:­t¤îÊ É½g&_Èúw+ftîd¨êË•géÖAÜÊ—Û=Øj-­Ÿoni2DÓelùdˆx¬s•KüZ™—•ÏUo²Ä¯ã óò…˜ ÆéZšv­ó«7lZU¡[›>zíÆª²áÏêÏ÷*OkáÑÅêWæUÜ­•çu{e^Ãi×Ý[™×¬¦uie^a”£³ê-¬Ìk}2lG+ó¢>t¼8¯ÃïµbeÞŠ›ÂV'F¶·2¯ÁT«n®Ìë‹6tª¹œ®;+ó 5mÅâ¼n¯Ì«}mº¾2¯ñÝZçBÙ K{OùâìY¹j¡q5jyêeþþä–z­L½\1ñb•­À™NVÿG.Ï>ì¼Q8ÊÊyÈí?,ÎTu‹Ý¼85Æl êô…£,c´þ&zÊÓÖë3 ÇË«gÞ·4źÆÁl-]ã•@ÅE²-Äc¸-Ë*ŽuÎvï-ÇÙ¡ÎVGPó6­n<Î_¾Ðò×ú]õpÎ;}GžÖ»óªãü@Mß…Óü7?PÛñX3­eê<³£ÔIŽ}u_Vwbwv´Ê÷7{Ûô㾯žÌ¾áPÕWögM»Ù+o»ûj.’=×E²—ws‘l8ZÉ^~ÜE²k¶t:Ú”¯®u”.›hèŠQŽü@M^7ÐbqÆ[¼[kz V^t]5w°î2²( ^ÛÚü¥Šé­|…r+O&úê-•ŸkéPƒÉÙŠÃâ ^_íµ¸-¬º®*SãjQžvÝx2Bq¸èDa+½šµz¹O˜ï ºí­Kom›»¸pöÔ¾±g3KácæŸ\Ý}m÷é¹{³3c‡ÎÍ­½}èÔÜÞ¡S§w?¼>´5ü×âñð£gÎ_^¸5¹qÏš¹BrÊG‰£qè³+סm?º·ôŽ®ba*—Ý­={áx<ÚU±mÏôì¥ õ–Ýo´Ø/Û´p">UËîÆ7©ó©[×f;‘_©·…^³Å~¦êj¶yÝOÍv"¿Sµ"¬/Ú§p°Á²»ã[&£O­\—ïÎ]úÔê-ô²íCßí«·Øoó`ƒÅ~knŒÖýÔñ…ûŽW}j_¼OáúÍGç®×[vw­Ñ²»u[ëê≵ûìS¸þØÝ#7ê}êÉgøèá³UŸÚ/öŸŸ?³Pyi×åïT(ýWqQàóM»ÇZú¹©ÙñÊÄõ~tüú¦éý-rhúá³ùr2 ßúÂærµ<-aùP;ÛhªÓù½+:·áÔn¬|Ê4×lŸƒÖRx¡Ø]sîZý–ú{zÕyczÝ]õÍ6™¹ZëùY­ÑÁ·×«(Sqo½¸MëÒözµ._kÃv+ÞÚÖîâÌòññ Ç›¼/½rî`ƒ½ÝVÌÖn>l×ÎÎzu¿a_Ó½ðšm´ÒÒ7¬ÕU_õªØ‡­ì±Òê‰o6G»õ¸yØl{€ZSkíÊ·|SØÅ…}]³iea_­»„šÃv-ì«ørÅU}uúÐ,ì«5ŠØWÜi©Þ™^žê†*[ÕW=² û¼§› ûêwwwa_­é)åºk ûß{vma_­ç<µŸâv´°¯Öª¾úVV½°¯ÖL_åû:»±°¯þŠ•®.ìkí]/ì+ýp´ª¯æãÕÎöÕJN}Xßí…}µÊ=úîÖ¾Z«ú*gtuea_­k¸7]\ØWëPŇÅÝ\ØW«Ÿ¸rÅJÇ ûV{ÒÚ\Ø×ä¤uka_kË|:^Ø×ÆJ¯NöÕê“öU­úî¾ZmO9Iwma_­‡-yMëî¾øË«úÜâ®va_­k]÷ÁÊêö•¯RùÉLƒ|³Ú…}µNGQõNöÕZÕ×WwAÙªöÕúJQW½^5+V§÷ˆ…+sOª7)¾òôN“~Gã…j¥UjýÕ·Q«^}ÕB»QÑåèÎ.~MºÝÚůÖ~µº­ª¦{ÇUµ0Yw³¼f½ÖêÁܳücšìÙ[A 7ð«[¦šü«ålTY¦SF¶Ð+hµLå»Ð›§êv+aÜ·bAYå-SÙ÷Ufˆ›VŒ™Õ¾÷¬ÞÿoU‹çâÍÿê̳iµ¿Þêæ}ha¤ùPÇ›ÿõ6l²Ykkú̹hy>tg›ÿ•Ÿß4Úÿ¯ãÍÿÚ„\íæ5!Wìÿ×Þz©Ù•›ÿõU¿ð¼æþí?~šÚ{f(ÚÆ¾o•ïèzt¸{k<öNŸhiAnóÅMácÂ÷›èx\ãùågÍÖôÕŸ«ÓúìîÃÝØv Û³¯ÎL㪠0Í×;ÖŸÒòò¸ìÜt² ·rÅcܹnP¡ëï7?? æÊ%MáÏ*3_|·ÖÖs¬lÝÜhËW³ÁT«SÝ›juª«S­Nµ:ÕªÉLêã÷[šeÕÂBÌÁŽŸ¤äG©zëy­*ÐâÚÉõ&ŽåZ](V%^ì·Ú•öÑÑê¿$±•Íë«WûÖxýrø³Ýw¯7ÌŽ6ÛxíLý+'‘‡£M¶4=JfuÏæ;·7åg³…kÝl6èYd½¸Áê)Ûáφš>÷lm°0[‚Õ´_ßʘ³Ûê^Ôê[ôū𺶹ãÙ‡UK(VÙ <½×ÒvK-,Äܹ©Ó»„Ùò;˜;{ô¨•¦}Í—W½y•Å)Œrì¬\ÔÑæfDURk Åêg}²M+–Pl|Ü|aL‹ñ¸Š}ÿjÍL©Øúo•ñªk{}7ß÷¯µ®zÇûþõ•bÖÞú¯½0ª÷6æ6oqW»ïßÊ´Vµõ_ßkÅÚ¨ö6ë[ž•ÄÖn¬jß¿–_ßžÍ}éüöå;—¯fHÍsxc͵šësû¢·(¶¾Ú÷Æš›kÛºQ­9˜ÎyVû^~\^z_º#XíZüj<£+;P§«}ó£dÓ…Õ¾Yqê¿ÛîØ‰¸ÝÂZªs-¬¾¯µ*îÙTÅãHx<¿Êa°•ól²o_ÿM8í.¤ºö$¿«›Öꬥªw6Ï7¾»ï+¼w°Õüó«¼»¯žç[ßne!Õµ'ù-~Wî=³•§ïó«î=ë­¥Ú¸ûlýfº…cåðCV¬—صÖcœÉ{ŒU3;Út«ô–zŒªzŒOqW±îvæüÛu_È5 }•ï¼o°2­É}Sã'>+NZK Ù[x«V8ÔÖêžÍê×ÝV¿ê¹Îxf_‹».®~3ÌòœÛ|ïÀn­»½PkÑm_½åØúnå0[¸6Rë——»Ýž}òdïDÖ  žÞ»íÂÜÅ… §ç.Î?Ù·ÿÀÖÓ‡fgFßœ;œÍ=õh9­·ò¤Ç¢ª¶¦;óèÝKkØ+7N»TC¼í'¦ÇªbeÞÐÎ7Õ[¸åíð1›ÖïêXoI`Í…ˆËkänÕýÔñ…Ó3'*ïoª¶¦‹W«UêõF›ÿìˆ>µr\ø˜'O§‡ž–>¸zÜæóo/í¬³5Ýšºkäž<¿>­ì+îä];ó©[׿»Ö[™w©î§† 'ù~ýåã OŸ®û©–n¿}«Þ§Þ.j1{V. m2ß¿reu›¶yødå׆Š`à~¿±ñÀíí;6í½´îâšþƒÏû÷/œ[sáêÖéu§Î­ÍjÚú{N-m¼ýö£‘­§–_ÛvïÖÒ}÷®}ûðíS;v½|àñÙS¿uêíwß=³8väùÙk‹ƒ×®Í ¾saË;ÇîÚùÖ£¡‹ûž=Yj`ã“'Sëú×<¼ýplýøº·w^\zólvÒv ØóxÝý¥ñ[ëÌ=y²wúxÿ¦+‹Gú'g޽;´óÍÍûÆÆ÷î_8}na|qíãã‹Ç޾ýäÉݽ#Ož¿½gãÓÃGof_½¿¸òsÏãù¡ÝÛ^Ê.K¾ú.;ióg·]{òôΡµãcÇn×lœŠ×&_òºçé³¹‹ û—vïßýfyƒÌ‹gŸ¬:_ùÉ ³ñö»›O½}fÝã'ûl=Úîèá¡ò×­þ®Ï¯®Û´aýùãë¶ï|wfýñS‹‡6^?up÷æŽl*-W —êòüȶ¥ 1”-óyºfáàHÿ“»WƲ¥'Cª9ö¤²6‡ÑõõïÆÕ-ïcGigÊ_®œÊ}Âúßm§7<œÜ<næñÙ}cÏ6Í íØ|slf~òÀ¾ðgGí{ëÌé£ûl½~thÇ–Ý{v¬;yköÊ¡µòï:9sah¾Pµóý÷,žÈÏ Í ¯ÏVH. 8xpbþêô®Ù»7Æ&² ô`þÍ{wŒ¿72yíÀ­áñ±G²¼¿.›d1’ýóBw?¼7µ÷ÌšÑüaÏr;¿vc~«4>¶eó`þÛpÒö=ÌãfËôPþ'!°O>¿Ý7Røí•§·‡óÿšZ·k×õ…kƒ—¿uuß};—úŸ„’.µPÎáñ×K±)þ‹Ùõ7ÃÇ”þn8þ»3·J1ÿÅÝo•þb<ú‹‘uß^þ‹£ƒùwX\Zs#ÿ³Bö<:ýüâÕÑ7K??ÿÅ£éñìÏÆŠbËÑñlÑÔý‰[—¶„s³g8œÃþçãcÇ÷mÚÿáÒÓý‡Ï»¶<£+üñB~n6…½=“_ƬÑÝž7NyÅ ?rl,»´Ã!Á<^~{f"ÿ¡u½ÿ,üöÒÔØ‘S÷¦Â¿==4´gí®µÙß…O½?>va)Ûl«ôÁ×—?æúö¡=[/ŽÌÝØµaú΃gvÍo~§ü€¯ØZ<"NðËY~9´—v„">˜Í—Ÿ´nr9dò"Ú~bÇöÅ…}oŸž;xkwÿr"_íüÄÂüä‘íÙŸ,_‘ÉÁw¯­-Öï 76—¾úð1ÏvCàæ±¼n‡óº-Ôå›gÆò[Áð_çÇ'n.̯ÍÍK…®úØÍ«“{vœ|þëÆTþ_ÍÛƒåìuãñöòߊ{¾¥§}ÙæÉgúwÝœe™³ý¡ÿ6׿nnû®ì¿e¿ìÍþâPÿðãGDz¿¿Ý?u«øÈùý›¯}’…ñ¶bÛªq¸ðc @±FyPšmbS!Î7î>µ)?ùjã<ì³J6^ ûsó7 zûƵ¬7}` ¯ÕYÇ?{#ÕM…ÏÊ^597ri(„ûî¬g³|EŒä™=üñìhvGp¾0¢~Y~Óè–…±Ú{¶_®%Ù(ÏòPÏøØžÍ!.Œæ#PÓÅk¹g:ÿ"¡‰»u)/ôÄðÒPöžžÃ#…À¾ºív©ºíìÙë÷ößÊú,ïμ»æÁBu{Pì äMxÖ.Œ¿ä⾡ì")÷„ Wºòv#çøl©±«ªQ9"~¨pïùhvâÀ¶™á²ÜÛ5ñæÞ§‹á;ÜØŸW­pY.ïÏÓÕÊàÉÎ͵'ë''ö퟼4³cìèÚé“×ç¯ÉÇju³’×\þmÕËBGg_èl^èmØò0Þº7ÿ³5³ûׄvòY¡B?=[±,¾pŒÁøÃw竎14»noáö,ßu{r`Ç…©rï!ÿ³5köì]Ìs{þ1»nŠ{}!™†Ä½°¾|ŒñÛk¶ŒUãüùãû‹}¡Ýw¢¾f>"_ˆ›¬ÒÌ_Þ™5Sv^š­ÜÜp– ÝíüÏBU<;Zø³+O¯eÍïå§ËµÿÚ³ŠÊ°vcñ…“wNTì½cÍò+&ò7jdá¹&û» •oØXúJooÚwnÓå÷GìžÌ£»´1õ•PÎÍ‹U/–X^ë¿|mž÷—{sý›Ÿ^Ú°Ü‘Ë7ß±¶ØÍ{÷ÌѸS“ïà™Ÿ´™ÁÃ¥¾Ó+£kÞ9“w›²ÞVsdz´VÞ*»zÂÂy˜{zªt.—ÏÃÐÎç—Ž•NBÕkB†¢“péÉÔ;ŠËËçaöâ­«Ëçatdå “Ï„M뢓°wöñò´ëå9Ÿù5…Îeþ©Å>dá²Tž‡Z'¡p—”êÔ¶c÷Š'aòùDvÒ¢óР2Œ•ë÷ùþ‡có…“ðdæÂ¥òI¸¹îäåZ•¡ø`e :—ëwõ_¯U¡ê#;À`ã,W†ÇØÔi!†–G9VÅ×+6.Dø˜†åéô‹Œ.?ñèà‹ŒµZˆÂ쇚Çï¤je˜( |̪Ž1Ú—­0Ž1>0:V(çàÞ};³Þ™íà4³åÙñu·¯\¼ùÎÌ»Û×nÏG9Îß[›ÝžÝè¾vëtÿð-£ÑjéUdùqÇî/ÍfO&†'ì›ZÈo¦öÝu°âÖòôÄÐüÙóö>?¾6ž/0SzBq¬òÑw4Ü^dϾ×ò¸æâ»“wîì?tþfvû-.+¶-e|p]þm&ÆÖ>Ý5tfç“ÒÔÃBw{ã£3ú‡ß~çtvú¬ö¨Ôµç…o³gøÀÄÄðÄ¥ñÒ¾T¾†Ù4¸Á‹§úó1¦h(/êÆ=ª¿Wt¼yînv‡â } ßÜgxìîñƒ»²1˜ÑÒâ‹ìN²X÷.Í~jfûÔö­gvOÏî?³açƒ};ÇÏ®Ë+o[Þ½ykÃÜÅ…‹5} ¸}Pa ¦âËåÃå Z3ÈFâf.mºš¨\,wd«¨Á6–¾ð¦üލp×ùxÂåŠA’Ù‰M3·æÊ_núÖŽJ5ý\ùúŽOܸ3ªørÙ ›v ßæ`öÜsrîÝ3ÓSæ.Nm˜ÚUxqIq(~÷ù§Õ‡œ¼þp1|ë©åÏß9sòì‘|´«ê/v¸ð<›²¿ðfØãWç&Þ*DKþpÿÈÃÝ“×n­_žl2½krpÝý‰¬±»PÌ#3›Åw`¸\-'¯<›>T8ig/Ÿ´|DtËHñZæ°v~ÃäõùÙÛ^No¿ýìü|ö6£Á‰›Íïž¿—M–|·?Ô7yåé½ÂÜ„©u;çåg.ÿ6áä-Ÿ¹™Pügg²]˜šœß5s0Tû†öNîÙ9µþͧ³SûwMMæ v¨­c›ò31ží‰t) WîäÈ®¾ªE²çOgÏD÷d-ÔXyêa/weÓäµû{OdKtÆV|¹{ÏžgC2ÛÃI[3ç›Á³^ÊGØÆßš[7?98ÚŸ•rq{øç—vNnÛ 89~»t,üÿ#ïŒMm¸{ýÔØÝµÛæ²ÆæleÕ>QQÉóQŽÂ„ËÒèoiÊD>Å{c8îÕÅl¿œ|÷ŒR™^ (]Íx8p.4vï,NžÜ4Y^J²<:µüøþÉÀò9Ÿœ åݼjÃä™ÉÒ'\ÈÛƒìíOÃ7[’þmá‡çBP¯™¼¾óVe˜YÊ«ÀÚmû²’OVVÍã‡nîÞ=9?uøh*p¹x†ÏöÏL /½“ÏýÞQq†‡'²ö;ãÑ;òñ´–NòX~’«Îp>q®x†ß¹}¿8È¿eó`ic[¶mʧŒ,[õ#åB¦*>Ÿ[ùËúË£®µ«åO²*ðb«åÏÔ qó"«E½^äcµìÏò1›ûX-¦V•=)ë?29>¶ûBÍ©nQÏúâÖûw\_x¸íÜÔø­ª›°|àlÏî›û‡=î=ŸîÙ~`׹х‡7Ÿrùâxþîö|VK+gî.í¨ÿ40ÿJ›®,d“6²[•óýÃg¯Î‡âŸ;ß?0rcMéðÎì ðñðÅ7\í¼ûîžþ‘'.÷½9º#»}*¯¤Ý· ¡W¸o{>¥ ½Z97äÆºû—óüRÌ…-…„µ|§5R¬´¥@*FÚRXf†³»ÄÐuȺFÑ£áüIq¡ ä2;š?J-ýË(,ãúºgó@©¨Wªõ–ÿ"ν{ö ÇÓ®„¾ØÒžå¿[þâÊó«û–ÿbi¼üUñR¸µ>zqßPÜâ_?}qa¤|jÃ9<Ú—Å¥±bkµxlû¦Êç¡ðX x6•OBVœ{ÑëôfÎ_)Uèºçaïô½ËçaÓúÊ©-?h¯ÿŒ{÷³¦S@U†½ÓÇŸ•çÁšÎSajU†lsc[sHÂǬ8F6¬ÔÁ<”â¦Ë¨œÐÂ1 Å®ŒŒÆa‘/æ¨XQÚÑ),[y€êðlxŒ|ÿ²v¿HÅû Šk+:ù"g¦ÇêN±Ê‡šZ8ÆÕ}ã­NÓªu€ìcÂMé@'qž 5 6>@á©pÃcìx¶©³BÌ®/¬T®qŒ¯H6‹t¸…Bª@½rœ™ivEnì:Z>ÀÔ¥w'¶Ç¸ºm´4åquU+ïã´Z7ëÍÞ~4;Þôl6Ê#ëNäxºfñÀLÔtn]›="ýhèp tá‰òÏeOt¯Ç?·´fÓòÉÍañä2d¹¦5:7ÙÎŽjÚâÍ#QM[ÕZ|4ÝJãQQÓªq`ݾ±Ž¾È‘…ñòäÚUµÙèìD«…ˆ' Æå¸yu}g±óÑDtIã$Ýú1Þ\·m¤Ã$=ñæÈîÑŽbÿÍ­³ÕqÛj’ÎÈm™˜œ¹0q0ÿ—ÝáSC÷¶e›¨]¸º|£|äAy =;i¥»æp‹÷îhq­@a,èBqü³t{X¼yÜ2ºqù¿&  7cÑðêÁGùZü·ùôùKOòeËÿra¬t³?ZyéZé™CÕˆiéùÂáxÍNh¿ßŒmÄϪ–Dñh¶ü¥ê.0Þ:?R*•,«'Æ GÞÜ{0;s'ŠÇ}óÄ™ü¸SÑŒlÁ@q|hdsVsNÄÃüËóEòÛ¨ÓÏNμ;zgÓþão¾µ4wø`ÿ©÷ª³•/¤Y_ù™™ÉÁ »Êº«ŽWñT¸õCžXÚ½rVËö;ûO=_wwþâ­ãÙãÒ<”P‡ûò7˜•†þ.\*=äØ}û¹½ÛJÏ£ÎVLΘÍŠsc˵ÿ\8øÍ+ÙÙ¹‰å¡ÌsùÓÛ‡…švn*ÿMiõê–Æ«sÚ_š³<ÐÕÖêœö—æôÕXÞÝtuNûKsú¢U}-¯Îiº4çiö0#«ÅÙÓŠkónÅO*¯têö³çòÙrmæö»–n|÷íÐ\L¼QøßxøßÄ[ߨ¶ãÉ-[òÿcKö§K7û>00sãÍ{wž<|þàÖ¿ÿ?Þ¿qçöàKÙ´ºkcûŸ<›»ûæ³»ÜxòÝoLçvþÈÒ™ƒsoL¿ý»kßµüZþO¯M\|cç¡´ã×Â??:˜?>¹–}‡Ð ¿±?ûåüßèûÀÒL±Ìá+ä%iú% ¥/~‘øK,\˜o±ÜÙ^Ûüb˹¹t¦CY;)çÔ‹-çTV¾.œÎÉ[ÌÉå2vx6»^;Ç£bæ-”±³b¶PƉ¼Œã¥O>ÿÝÙï…ÿz'üÙßõïÈ—®Œ¿q«/üÝÉbÁî¾{{:þ'o<}–}‹ÁðÎ/ö}`lîöwÞ}óöÉÅ™7ÎíûÀ¥7ÆGwìØ±}Û–ÂÇ,ÿfdj|ëSÛ·®^ycbr<”eÇd^”·Ûø‡ùY+ýãòm5s¼xf7‡ÿ…ŸË»¼Ôs7žÝ˜~cëŽì§7÷}àüÁü5¼4¾ôå÷~ûw?~íuA€NÞ öÿûÿú¿Œþïá×^xáä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤CÞ &/@:ä}bò¤éK_~ï·÷óá×^x_ÉûÄäH“؇4‰}bò¤IìCšÄ>1yÒ$ö!Mb€˜¼iû&±@L^€4‰}H“Ø &/@šÄ>¤Iì“ MbÒ$öˆÉ &±iûÄäH“؇4‰}bò¤IìCšÄ>1yÒ$ö!Mb€˜¼iû&±@L^€4‰}H“Ø &/@šÄ>¤Iì“ MbÒ$öˆÉ &±iûÄäH“؇4‰}bò¤IìCšÄ>1yÒ$ö!Mb€˜¼iû&±@L^€4‰}H“Ø &/@šÄ>¤Iì“ MbÒ$öˆÉ &±iûÄäH“؇4‰}bò¤IìCšÄ>1yÒ$ö!Mb€˜¼iû&±@L^€4‰}H“Ø &/@šÄ>¤Iì“ MbÒ$öˆÉ &±iûÄäH“؇4‰}bò¤IìCšÄ>1yÒ$ö!Mb€˜¼iû&±@L^€4‰}H“Ø &/@šÄ>¤Iì“ MbÒ$öˆÉ &±iûÄäH“؇4‰}bò¤IìCšÄ>1yÒ$ö!Mb€˜¼iû&±@L^€4‰}H“Ø &/@šÄ>¤Iì“ MbÒ$öˆÉ &±iûÄäH“؇4‰}bò¤IìCšÄ>1yÒ$ö!Mb€˜¼iû&±@L^€4‰}H“Ø &/@šÄ>¤Iì“ MbÒ$öˆÉ &±iûÄäH“؇4‰}bò¤IìCšÄ>1yÒ$ö!Mb€˜¼iû&±@L^€4‰}H“Ø &/@šÄ>¤Iì“ MbÒ$öˆÉ &±iûÄäH“؇4‰}bò¤IìCšÄ>1yÒ$ö!Mb€˜¼iû&±@L^€4‰}H“Ø &/@šÄ>¤Iì“ MbÒ$öˆÉ &±iûÄäH“؇4‰}bò¤IìCšÄ>1yÒ$ö!Mb€˜¼iû&±@L^€4‰}H“Ø &/@šÄ>¤Iì“ MbÒ$öˆÉ &±iûÄäH“؇4‰}bò¤IìCšÄ>1yÒ$ö!Mb€˜¼iû&±@L^€4‰}H“Ø &/@šÄ>¤Iì“ MbÒ$öˆÉ &±iûÄäH“؇4‰}bò¤IìCšÄ>1yÒ$ö!Mb€˜¼iû&±@L^€4‰}H“Ø &/@šÄ>¤Iì“ MbÒ$öˆÉ &±iûÄäH“؇4‰}bò¤IìCšÄ>1yÒ$ö!Mb€˜¼iû&±@L^€4‰}H“Ø &/@šÄ>¤Iì“ MbÒ$öˆÉ &±iûÄäH“؇4‰}bò¤IìCšÄ>1yÒ$ö!Mb€˜¼iû&±@L^€4‰}H“Ø &/@šÄ>¤Iì“ MbÒ$öˆÉ &±iûÄäH“؇4‰}bò¤IìCšÄ>1yÒ$ö!Mb€˜¼iû&±@L^€4‰}H“Ø &/@šÄ>¤Iì“ MbÒ$öˆÉ &±iûÄäH“؇4‰}bò¤IìCšÄ>1yÒ$ö!Mb€˜¼iû&±@L^€4‰}H“Ø &/@šÄ>¤Iì“ MbÒ$öˆÉ &±iûÄäH“؇4‰}bò¤IìCšÄ>1yáEø³/þåo~ê{] hDìóJmihQ{]Š×ŠØ &/¼ßùƒÿ*œÕûßû±/üÉ—{]¨Mìó’ íghEC- -j¯ËòZûÄä…!tcn×GÉýöí?ô#þ•¯þÕ×{]"¨&öyi…63´œ¡ý U4´¥ŸÿÂÿ×ë½VÄ>1yáÅùÍOýáìÅŸ §wjéïì—~¯×Å bŸ—Sh-C›*gh?M¼Ä>1yáEûÙñŸ6Îüh8ÉK7êÓŸýã^ŠÄ>/›ÐB†v2TËÐfþÌG«×Åym‰}bòÂûàÏÿâ«ü{ÿæÛ¶üÀ·ŒßÓ~Ü»xˆ}^¡U mch!¿uêûCkÚÌ^—èu&öˆÉ ï›ÏþÁŸ^yôóálÇôøŸþÚ׿ñÍ^—ˆ¤‰}^¡% íahCm -dh'{]¢×ŸØ &/¼Ï>ùë¿¿óÔ?ç|ûñŸøÄ'?Óëâ.±OÏ…60´„…ö0´½.N*Ä>1yáý÷õo|ó#?÷kv(œù‹þ™ñpzBìÓC¡Ý ­_¨¡% í¡ùï'±@L^è•/}ù½ïþá]X/ó=úÅðÛ^—ˆ´ˆ}z"´u¡Å í^hý¾óÿ•¦ïý'öˆÉ ½õéÏþñé»?ë}z¼ÿÄ>ï¿ÐÊÞ·Ú=ï[î±@L^x„ó_ØokÏ™ÿêoý÷^‡$ˆ}ÞO¡e í[a?ÖùoÿK¯‹“4±@L^xI|õ¯¾þã?ý«…—ìÝþ®~îó_ìu‰x͉}Þ¡5 mZáÕÊ¡• m]¯K”:±@L^x©üÉŸýÅýïýX¸"ß¶å~ðÇÿÝWÞûZ¯KÄkKìó¢…,´c¡5 5-´l_ø“/÷ºDdÄ>1yá%ô;Ÿþ£¥›?®ËÈâýÂÇ?Õëâðzû¼P¡í -X¨c¯ýãЦõº8”‰}bòÂK«Ô›Z¸òô¦è:±Ï Ú«ÐjÑzi‰}bòÂËì+ï}íG>ü+f[ñ"ˆ}º.´Q¥ï?ü~ÙŒ÷—“Ø &/¼üJocøöí?äm t‹Ø§‹ oÄ m”7b½üÄ>1yáUñ›ŸúÃÒÛÚ?öK¿×ëâðÊûtKh‘J;æüÚú\¯‹Cb€˜¼ðj±›3Ý"öé\h…B[*Rh—BëÔëâб@L^xåüù_|õoþèÿó­Sßÿ-ãß÷ôƒÿÒ—ßëu‰x%‰}:ZžÐþ„V(´Eßó¡_ íR¯KD«Ä>1yáõÙ?øÓ+~>\»5»?ô‘Ÿû¯㛽.¯±Ïê„Ö&´9¡å õ'´B¡-êu‰hØ &/¼Òþíøìöã?®`øõ—ÿãëuqx•ˆ}V!´3¥6çŸüL¯‹Ãjˆ}bò«ÎX=«#öiKiNÂwLÿ°9 ¯4±@L^x=üÙÿ²´–çoý_²–‡¦Ä>- íIhUJk–CkÓëѱ@L^x|ú³|âÎ?ñ®?Z!öiEéÆÇný´w¿Ä>1yáõSÚ lÿùø›ŸúÃ^‡—”ا±Ðz„6Äž§¯±@L^x-}õ¯¾þwÿñøöí?.îíïúèç>ÿÅ^—ˆ—ŽØ§žÐb„v#TІüí|2´'½.Ý$öˆÉ ¯±/üÉ—ïïÇ ºùð¯|彯õºD¼DÄ>+…V"´…¡¤Ðz„6¤×%¢ûÄ>1yáµ÷;Ÿþ£Ù‹?®òÈâ}ô_ÿç^‡—…اJhB+jEh1~ûw?ßëâð¢ˆ}bòB"~áãŸ*ôô–nþT¸Cìuqè=±OIhBËP5 mE¯‹Ã‹%öˆÉ éøÊ{_ûàßû7ß¶å 3Á¼4>qbŸ¿Î·ª)Ì*-ChlU“±@L^HMéMß1ýÃ?þÓ¿êMÉû‰ ±Z€Ð„jpóù?÷Ö©tˆ}bòBš>ùë¿¿ç̇ o’ÿÄ'?ÓëâÐb?e!ê »Ò„v ´½.ï+±@L^HÙÏ|ô·Öïý‘PNßýY;M§Fì§)Dzˆ÷pé×ìþPhz]z@ì“÷¥/¿÷=úÅoúþoÿ¾ðá·½.ﱟšB°‡Hñ.ØS&öˆÉ Ÿýƒ?=wïÿ,<2øÈÏýÆ×¿ñÍ^—ˆNì§#DtˆëÝ…É!Þ{]"zIì“(ùÄ'?³ýøOXR”±ŸˆÒbáÝ ó×b€Jò±¯ã›?ñOþcᕃWýüïÿÿÙëñ¢ˆý×^ˆßÅ¥— {îOØ &/°ÒŸ}ñ/Ÿ~ðãß2þ}¶${‰ý×XˆÙÂf£!ŠC,Ûl”˜Ø &/PÏïþ×/,Ýü©P=6Îüè?ûØÿÛëâÐebÿu¢5Äl¸¸!~çÓÔëâðÒûÄäûØ/ý^aŸ²Ù‹?ù›ŸúÃ^‡®û¯Ÿ¡!NÃe?øwCäöº8¼¤Ä>1y¦¾òÞ×~äÿòíÛ(T•·ÿ×ñ…?ùr¯KDˆý×IˆÊ›á‚†8 Ñb¶×%âå%öˆÉ ´(t8ïýoÿ—çkCì¿ ×Ð.±@L^ -&¤½6Äþk Ä`ˆDÓ¹i‹Ø &/° ¿ðñOyaÅ«Nì¿ÒBÜyÝ«#öˆÉ ¬ŽÚ¿êÄþ+Êv0tHì“èÄç>ÿE^¿¢Äþ+'ÄWˆ²káÂ…¸ûýÿñ?{]"^Ib€˜¼@ç>ùë¿¿ç̇CEÚ~ü'>ñÉÏôº8´Dì¿ZBd…ø —,ÄZˆ¸^‡W˜Ø &/Ð-ù¹ßX³ûC¡:¾û³Ÿýƒ?íuqhBì¿*B4…˜ +ÄWˆ2OáéØ &/ÐE_úò{ßó¡_üÖ©ïÿ/üGøm¯KD]bÿåW ¨oÿ>E·ˆ}bò]÷éÏþqéqÆÏ|ô·z]jû/¹;¥î!¦z]^b€˜¼À ò‰O~fjéï[îôÒû/­Ò‚ÜAäÒub€˜¼À‹óÕ¿úzéuˆ7ŸÿóÏ}þ‹½.ebÿ%b$DJé…½!‚z]"^Cb€˜¼À‹ög_üËûßû±PÍl—öRû/•Ò†žá¢„x±¡'/ŽØ &/ðþøOÿÑÒÍŸ •mdñÇ~áãŸêuqû/‘!.Âå1"¥×Åá5'öˆÉ ¼Ÿ>ú¯ÿs¡ß;{ñ'ûw?ßëâ$Mì¿ B„X(Œ“„èèuqH‚Ø &/ð>ûÊ{_û‘ÿÊ·oÿ¡Â¼¸/üÉ—{]¢D‰ýÞ 5¿0:ÄBˆˆ½.©ûÄäzâsŸÿâíïúh¡3ü·?òIïÍxÿ‰ý^ µ=ÔùÂHˆïYâ}&öˆÉ ôÐo~ê÷Ÿÿ‡…÷êì—~¯×ÅI‹Øï‰PÏ û°„šê¯‹CŠÄ>1yžû™þÖÆ™ õðØ­Ÿ¶ïöûFì¿ÏBÝ5<œóPÛCïuqH—Ø &/ð2øó¿øêßú;¿ô­Sßÿ-ãß÷ôƒ÷²ý÷Øß„úju¨Û¡†‡znËzKì“xy|öþôÊ£Ÿ/lÆý‘Ÿû¯㛽.ÑëLì¿B59ÔçpªCÝ5¼×%±@y—Í/ÿÇÿ¶ýøO„j~ýÄ'?Óëâ¼¶Äþ‹jo©&‡ZÝëâ@‘Ø &/ð*ô‹V]u—ØB- uµ´6Ôá^—ª‰}bò/¹OöOßýYoeì:±ßu¥7å†ëM¹¼´Ä>1yWBi×¶=g>ükÿés½.Îë@ìwQ¨“¡fÚI“W‚Ø &/ðªøê_}ýÇúW¿}û…{û»>ú¹Ï±×%zµ‰ý®õ0ÔÆp&CÍ õ3ÔÒ^—šûÄä^-_ø“/ßÿÞ…Jûm[~à‡ÿÁ/彯õºD¯*±ß¡P÷B õ0œÆP'CÍìu‰ %b€˜¼À«èw>ýG WþQ¨º#‹?ö ÿT¯‹óJûµ.Ô½pC= µ±×Å6ˆ}bò¯®RŸü൬OÞ.±¿:¡¦…úf,‚W—Ø &/ðJûÊ{_ûÁÿwæì­‚ØoW1yׯ¯þÖ/½óÿ_þÛÿÒëâ¼ìÄ~‹B]*íuêX¯‹ûÄä^3öo‘Øo*ÔŸP‹ÂY 5*Ô«^ºCì“xý|éËï}χ~ñ[§¾ÿ[Æ¿ï;ð_…ßöºD/#±ß@¨3¡æ„újQ¨Kª¯±@L^àuõÙ?øÓ‹þY¨Þkvè#?÷_ÿÆ7{]¢—‹Ø¯)Ô“P[B ''ÔŸP‹z]"è2±@L^àõö‰O~fûñŸ•<üúÉ_ÿý^ç%"öW 5¤T[BÍéuqà…ûÄä^{_ÿÆ7?üO­ðrÈ+~ÞŸ± µ"ÔÂ+jCmñ4™×˜Ø &/ˆ?ûâ_>ýàÇ +Â>ø÷þÍŸÿÅW{]¢û¡&„úPXmjH¨'½.¼Xb€˜¼@R>ýÙ?^ºùSÞù×b?Wzm¨ÞFK"Ä>1y}ì—~¯°£ÜìÅŸüÍÿŸ½ûñ®ªºóÿÿ?H´fœâ´®Ö¡F#¨%©¥.™§°°|Š.Y‚µH‡Ïiiiaj~ä—RhR@4M•´ª Y¡B…H)I‘0BC#@€ï ¶==åG¸¹÷œ³Ïçc±XAáæsÏÞ¯½Ï=g¶Ë±#ám_ï»Þ}³[¥ÎÛåÁIxÛ\‚\@2uîžS²¥_î,ÿc§T´¶ýÅvEAKlÛ×{­w\?»Þ}:lW*±mpEä’¬íHÇ„é•ÎÔàTçÛ'm_ï¯s@ï»Þ}Û$°íz@.έƒ†.xsÃnÛå$im_ï¬Þß„ß$ œO^ÛôŒ\Œòª†/~mžYZdgÓ!Ûåø.9m_ï¦YDHï¯ÞeÛå–%§íRA.³õÀg¨QL|ö­xo=„¶¯wPï£~L½§l2Ihû€Ô‘ À%´¶?6©ÜlM¾håÖ¸®7ﶯwMïÞAýŒz7õžÚ®‹x·}@o‘ ÀÕÔíÏQ¢Ö1𛋪köÙ.Ç{1nûz¿ô®é§Ó;¨÷Ñv9@¸Ä¸íÒ@.=øey}ÿAÅj#ßZ³ýÊcÙöõéÒÏ¥wMïír€0ŠeÛ¤\zv¼£sjñ†¾9Eú¥/ôGÛy#fm?®o๘µ}@†È øèOÎOËÖl³]ŽâÔöõŽ8ãê²]jqjû€Ì‘ @êªköåæ/ŽÇƒiñhûÎcžz_bù˜'à¹x´}€WÈ WÜ WŽž¸6º WF½íëÈëøÇ~XÀsQoûo‘ @޵ŸœTXéí¢ÛöÝÛDê]ˆ÷6‘€ç¢Ûö~ €´íl:4lÌ µ [î›[^Õ`»œÞ‰hÛ×qÖÑVå:ò:þ¶Ë¢'¢màrÈPå¦=†.P;2ª´¾á írR¹¶¯c«#¬šu´uÌm—DUäÚ>ÀWä¹Sgæ”lé—;K­iüOßl;Òa»¢k‹PÛ×ñÔQUµ:Â:Î:Ú¶+",BmrðЦ-c§TDeÚ‰¶ïžhëØFb¢ „\$Ú> 0äà-ç¶Æœa/†ù¶Æð·}=ÃÈ݈ „\øÛ> Häà‡Õo|è,{Ò¸·Ív9W涯#æ,Ô£#i» VÂÜöÁ#Ÿ8Û"de„p[„p¶}³‘‡ŽXt7òB.œm` ¹øª¹å¨³múâ—ßï>{ÎvEŸ [ÛבÑñÑQRU:b:n¶+â)lm`¹ ¦nÿ=ßZ¢¶–›¿¸ºfŸír.UÛ×1Ñ‘Q=:J:V¶Ëâ,Tm`¹£ûì¹ek¶õT¬7rü«Ö?ÿ IÛ×qÐÑP%:2:>áùüˆ«´}@H @Žwtþhö;YÙ}sЦoÐmUb½íëg×ÐqÐÑÐ1±x(€D±Þö¡B.Ákj><ü©ÕjzŸûêœUÛ­Ô`·íë§ÖÏ®tt4¬Ô$¹p#[ÔîÌþzy#J‚hÎVÛ×OªŸ×ìÏHÏܸ‘ €E]§»­ÜjÕ;¥â@k{`ß:ø¶¯ŸN?£YjU?µ~öÀ¾5¹p#ëŽ;1az¥Z¢ÙtïT百im_?‘ÙŠQßQ?©~Þ¾)€+"÷nä;› ³BíqÀÐåU ~»ÀÚ¾~ýDú^úéô3úýíôŒÜ¸‘ @¨8³§!£J}=ÐöU¿~ŠÀf¸RAîÜÈ lNuž™S²Å¹»²íH‡ßÅ×¶¯š;`õ³s,€Tû7r'gõ•~¹³.¯õ|õŸÚ¾êTµª9ør¤‚ܸ‘ @˜Õ7tvg¨Ü´ÇÃWö£í«Bg Uîá+ð ¹p#€ð[U±ý–û檩>üäË^íÞîmÛWUªM/¨:U­'¯ Àä>À\"á“]Óænì›S”•]0©°êXûÉ _Ы¶¯JTªRmªPufø‚|EîÜÈ Bš[ŽŽž¸Vm¶ÿ âek¶uŸ=—öKeÞöõÝUƒ*Ñë¨*Õ–öK ¹p#€Èy·¶97±Z®~××é½H†mߓܸ‘ @eþÙ\ÚmßÃÏ(ܸ‘ @teòì^mßógܸ‘ @Ô¥·¶goÛ¾kœ¹p#€xèíÞ©·}ÿö@{nÙšmý«Õß÷íRçwýýwý_Ûð¹p#€„¨©ÛÏ·–¨½çæ/®®Ùç´}}­ÿ¢¯õy„ˆ=ràF.±×ÜrtôĵfqÑÅ/¿o>t·}ýýw³Ä¨þ¦þ¾í’ø…ܸ‘ @Œ}r¢Ël>˜•]0©°êXûIç]Þöõõwô7Í„ú·6Jà/ràF.qµúo¹o®ø°1+÷¶]ò¯Ööõ7õ÷õ¿ôoõ A ä>À\â§¾áàQ¥fŸÁÊM{®øwznûúWf_B½Ž^ÍÏbŠÜ¸‘ @œ´é;¥Bº_î¬9%[Nuž¹Úß¼fÛ׿Õ+èuô×ôšzeJ(ràF.ñàž¾ÿé›×œ¾¥Øöõ:zµT&˜"ܸ‘ @ TnÚ3`è‚^ÝÞÙ«¶ïÜ€ªïrµPD¹p#€HÛÙtÈYþ¥¼ª!õ˜FÛ×ë; Ôèûö¾Xö‘û7rˆ(³=„ÚozÛC¤×ö ,ôo/ÙÀ@$û7rˆœ®ÓÝ‹Vnu¶?ÐڞƋdÒöõ îU‰êIãEXAîÜÈ Zªköåæ/V³ÍQRS·?í×ɼí뻫½ˆêQUi¿€ ‘û7rˆŠ?|ô§áO­Vƒí?¨xÙšm¾šWm_•¨½”jS…¾¿‘û7r¿ãS‹7ôÍ)Ò/}¡?fþš¶}?ÊàràF.!÷Ëòz縦æÃ^½¬çm_µ9_ªf¯^€·È}€¹„–ó€ÞÀo.òü=ŸÚ¾êTµ™?ÞÀ'ä>À\Bè@kûc“Ê}]ÀÓ¿¶ï^þT?EzËŸð ¹p#€Pqoð7ñÙ·üÛàÏﶯÊUÚÛ#ð ¹p#€ð(¯jøâ׿©I³bgÓ!_¿W0m_?…~}#ý\úé|ý^RAîÜÈ êUªÆ8`è‚77ìà;ÙöõéçÒ·ÓϨŸ4€ïàjÈ}€¹ØÕv¤cÂôJ5Ã~¹³æ”l9Õy&˜ïpÛ×Ï¥ŸN?£¾©~^ýÔÁ|_— ÷nä`K×éngŠ4vJEkÛ_‚üîVÚ¾~Fý¤Îä×urôŒÜ¸‘ €•›öä {Ñâ-”Û¾ss¬Ž€ŽCðIFîÜÈ `M͇Í+·Ü7wUÅv[eXoûúÙuÌâ9:&¶Ê’ÆzÛ„ ¹æXûÉI…UYÙ}sЬoÁ†¶o6×ÐÑÐ1Ñ‘ños Ž0´}@x @ºÏž+yå³Eûè‰k›[ŽÚ®(Dm_GCÇDÅèøè(éXÙ®ˆ³ð´}@ €ßªköåæ/VCÓï5uûm—ó©°µ}ç(éˆÙ.ˆ­°µ}€]äàŸæ–££¾_¦&ÖPñ²5ÛBõÉWÛ¾ŽŽ’Ž• Óq ç¨@ü„°í,"?ïèœZ¼Á<÷ƒ™oë¶+ºThÛ¾Ž•Ž˜yÊRÇ0„‡ˆ´Ð¶}€äà9gåÌáO­íÊ™!oû:n:zÖWaâ'äm0rðÐÖíÌQbvÖ[ÿîïm—Ó“H´}C³K£ŽªŽ­ír€8ˆDÛ†\<`»œLŦíë½pöøÐ{d» ìbÓöž €kŠåÞè1kûz_ôîè'Ò;¥÷Ëv9@xŬí)šTXu¼£Óv@‘ @”J¬ì‚¾9ES‹7|r¢ËvEž‰_Û×»£÷Hï”Þ/r¸šøµ} :íû*^¶f[÷Ùs¶kÂ…\®Hy¡ÔPv¨Œž¸¶¹å¨íŠ<×¶¯wJï¹\M\Û>гêš}¹ù‹uòë÷Íïd» DÈàrJ '5” ¶ËñE¼Û>¹\M¼Û>Ðs¥÷¦»gÇõJ/rps>]R^Äûӥط}r¸¢Ø·} gÇÚO:O‚ülþ¦8= ¤‡\ %‚rÁyúLya»"%¤í“ûÀ%Òöž55~艕1[)H¹œw­N©tHÈꔉjûä>àHTÛzæì$5ø‘¥õ m—ØA. áÔÿ+¸{]Û>¹œOdÛzÐuº{Þ²š~¹³Ô.ÆN©8ÐÚn»" häK}¾z~ÿJeÁvEJfÛ'÷d¶} gmG:&L¯4C‚9%[Nuž±]r ¤~^½½™¨ÿW خȂ$·}rI–ä¶ÄJ±Ÿÿ]cëQ¥j †.¨xg—ßU!A. iÞܰ[ý¼N{õùêùm—c mŸÜG2Ñö‘4&÷SÿûåU fœ0lÌŠM‡ü+  rÉ¡^]}»ÿ«··]Že´}ƒÜGÒÐö‘îÜïÕ?üäDWá ¿¹qà sQì—G‘ HõäŸ}K§ºúvõðl:pž¶ïBî#QhûHOrÿ@kû˜É¯›-‰­Üš´uäâM½·úp³)¹zuÖqÐö/Aî#!hûˆ7Ïs¿¦nÞˆ³yuÍ>OŠB…\@Œ©ßøÍE:ÃÕ“«?·]N¸Ðö¯ˆÜGìÑöcþåþªŠíý땇?µ:!û#9ÈÄ’újõØ:·Õ{³ÿøÑö{@î#Æhûˆ¥rÿxGçÔâ }sв² ô…þèÇw‚G. fœîZ¿è®{@Ûﹸ¢í#fÎýæ–£ÎÄsÙšmÝgÏùúí€ ˆõÌÎÇ:ê±m—j´ýTûˆÚ>âÄVîW×ìËÍ_Ì)ˆrñà<ö¥þ™Ç¾RAÛO¹8¡í#¬ç~÷ÙsÎÂ5£'®ÝÿñŸƒ¯ð¹€¨;ÐÚ®~ØY’OpRDÛïr±AÛGÔ…*÷µŸœTX••]À†Vˆ.rÑål§~X½1ÛÆõ m? ä>b€¶è mî;ßßrßܲʶËz‡\@D•W5¨×ÕÙ«Xý°ír¢‡¶Ÿ6r‘FÛGD…?÷+7íÉ~`¡*2ª´¾á ír€T‘ ˆõ±êiuÞª×Ußk»œ¨¢ígˆÜGDÑö9ÊýSgæ”lé—;KÕ~÷Ço´é°]pmä"DýêøŸ¾©3V=­ú[õº¶+Š0Ú~æÈ}DmÑÜWÙ Svá ¿©­o±]Ðr‘ÀÀÛs´}¯¸s?BÃ$m‘ 9”fR‘Î}çcMýÊ·*Š?‚\@øUnÚ“3ìEnÌómß[º GÛGÈiÞ¤Ù“™FÅ ÷K^ùà†3ô³deLž±¾ët·íŠ€K‘ ³Æ½m,ÜáÚ¾t–†|¹€¶ÐÒ\é‡3ßÖ¼I§¨æPKV¿o»"o|r¢ëéiëú\ü¹nº{6ã„ ¹€pba¿Ñö}ÚåЃ¶pÒ,Éìñªy“fOñËýýÿyð#KÍçžw<øBãÞ6ÛŸ"6ÝgÏ-~ù}6þömßW:oó]2àFÛGØhfdž ѯ{G.wîW×ìûüàçÍ;rü«\3D õ“¹ù‹uNæ(©©Ûo»œ8£í@ç°ÎdgÕ:·m—\@ÛGxh6¤9‘™i–”~²ûì¹ÙK6÷Í)ÒO}ýí…3½Ç5CØE. $š[ŽšPè?¨xÙšmô~£íCg²ÎgÕ:ÚßZ­óÜvEH:Ú>Â@}£æAš élÔÌHó£¤åþñŽÎÇŸyíºÛ.Ì…oÎ+^·q·íŠ\ä¬S—8µxƒâ +»@_è¶+JÚ~ÌI®3\ç9'9ì¢íÃ:Í}42 jN”ä.±qo›¹-ÊÜÅ5CXA.À®UÛ?÷Õ9棓¦æÃ¶ËIÚ~ðt†ë<7‚ëÌ·]ж‹4ß1wÑ›éYSÅÐùŸïyNÇäºÛ’>A†älq­ÊöbBÚ¾-:ÛÍÊ <$ +hû°Â}{äMwÏæöÈKtîž>¯ÚÜ@{ÃÀ —×Ú® B. xZÛÇN©p–^doV+hûéœ×™oÑ3ùuµÛ!Ahûžf7fOvÍw4ë!÷¯æXûÉÿxòegwk›mW„D ¤SgÌÖl:ë&L¯d™e‹hûÖéüW+лÀ&›mAzï·ÿãl¯ðð“/“û©Ø¾ëà¾`ÚÐG_âš!üF. 0åU †.Ðù6lÌŠM‡l—“t´ýP[P‹Ð{¡Ö¡6b»ÄmÁÐ,FsgûuÍqlW1+^«ï—;KG¯OvÁþì­SglW„Ø"x‡Œ*5#ÞŠwvÙ.ÐöCEíÂ\-QKù]c«írg´}øM3—‰Ï¾¥YŒÎ4Íh–—×Û®(ªt$'ÏXŸõ×#YZVg»"Ĺ_µé0wÄ©›S²…«[áAÛµµs5X­FmÇvEˆ'Ú>|¥9‹éÇ4‹Ñ\†ÜÏœû“ÖCðI+<§¹‰f(fª¢9‹f.¶+Š-g¥Ö¬ìVj…WÈx«©ùð×J¾å¾¹ì¸f´ýðS R;ÒÛôÐ+Õ²l—ƒ˜ íÃCf×<󀻿ã“]ßûÉ›ÎNŽe•;lW„È#à•cí''V)úæýlþ&Ï9Ú~$¨©5©M©e©}±T;2GÛ‡W41û¨jnòÝ¿Aåè½#—šÏdsó7îm³]"Œ\@æºÏž[¶f[ÿAÅ:—FO\«>ÊvE¸6Ú~„¨M©e™KÁjkjq¶+B„Ñö‘9Í>41“ÍJÈ}[ÔoÎ+6oÄÈñ¯ïè´]"‰\@†Þ­m6¡ ß7¿ÿ‘ír*Ú~ä¨}9m­ºfŸírU´}dB3ŽoO(3ÍD8‘¬ë>{nö’Í}sŠôŽèw}Í5Cô¹€´9ŸYôTÌg‘CÛ">‹GæhûHóŽ0cžŽL HÃ''º¦ÍÝè<ÓÄý QDÛ.µ8çYÝ©Åxf½BÛG¸/1¸é!Ð[Κ‡ÃŸZÍš‡ÑEÛ:µ>µAÖòEoÑöÑ+¬[9¬óƒÞ"ºú†ƒy#JØ-hûñàìõ©¶ùÁ‡l—ƒ í#Eìk]ì‚^!Š­íc§TèTé—;kÑÊ­ì´ýØP{T«TÛÔªvªÖj»"„m©`ßóh;Ò‘?n•ùl÷ CæÕÖ·Ø®!E. g§:ÏÌ)ÙrãÅP˜0½R}‹íŠà Ú~̨mª…ê=Uk½d³Z®íŠR´}ôL³ÍÌ$B³ r?ê¶ï:ø¥¡ Ì:ôÑ—¸fˆË‘ èAyUÀ‹}È×G¿´³éírà%Ú~,©ªµêUËUûµ]ˆ¶«ÑLAó3qP¢y„íŠà™Ò²:sIVvÁäë¹f7rW¤Qå°1+UÆm?Æœ+9<¶œ+9¸m—Óì@só¸™f š;Ø®ÞÓ»<ñÙ·úüõ]^^^o»"„¹€K9v¹ëlæ¢÷¸‚W´ýxSËUûåNo\޶K¬x­Þ|r¤™Âþì-r?ÞÜŸßñà | Œóä\̪fbV¥ˆ=Ú~8+A©]³ Ú>š hFÀ“e ôÞoÿçóƒŸ7oýÃO¾|¬ý¤íŠ`¹C瀳jýÖí´]|GÛOµhg§˜õïþÞv9°Œ¶Ñøÿ?ž|ÙL4/x·¶ÙvE°ÀYEöúÛ YE6ÉȰ«u2Ñö“F­[m\oºÚ»Z½ír` m?áÌÎtÿ³3äxGçãϼæì2¹nãnÛÁr!ÉÔ ühö;YÙ}sЦoÐmW„àÐöHm\-]í]­þ3ߦÉ'm?É4Úÿç{žÓ  ñ¿ft0š[ŽšÛHô+7qãÞ6Û!PäB2uŸ=·lͶþƒŠõîú~™úÛ!h´ýÄR{W«×»¯@ý€zÛ!P´ýdÒ_ã|3à×ÈŸÜÇåÖmÜ}s^±9I¸\(äBÕÔí¿ç[KÌ% êš}¶Ë´ý„SÛ7ƒCý®>Áv9m?iÜ7j´Ï èA÷Ùs3½gn'î›S4{Éf®&¹(Í-GGO\kn/yåÚx’Ñö¡@ý€YRX=Ÿ$m?9ÔÆ5ž×¨Þ,¢q>¹Tk?9rü«ÎrC|v{äBB|r¢«ð…ßÜ8pFVvÁ¤Â*m†zõ æ9bõê+lWÑöBcxgCíÉ}ôVãÞ6³ò¼~Ý;réþÿl»"ø…\H‚Õo|hÖ6fë  íÃM=ƒúÖNÚ~ìiÜ>ø‘¥Î†ã¬ ‚L”Uî0·‘ôÉ.xzÚ:®Æ¹oõ ‡Œ*5ûŽUnÚc»„m—S/a®«ßPïa»ø‚¶c«kÄ®q»y0D#yÛ!ºNwÿpæÛYÏ«ÎX²ú}ÛÁcäB\µé;¥Bon¿ÜYsJ¶°Ç(.AÛÇ©¯P¡~C§‡úÖ¶¿Ø®£íÇUÉ+˜½Å5nŸR¤þD½ŠYJýŒír)Ú~û ×Gm?4öþ§»Xòöhm7·‘˜Ål·ïâδH""­ët÷¢•[Í:ÀM*W«´]"ƒ¶ÞR£~Ƭ[¨ž‡Õ*"жiokÔm†ß÷}»”ÜG°ÙeÔ‘ Ñ¥Ö—›¿Xo_Þˆ’šºý¶ËAÄÐö‘õ6êstò üæ"õB¶ËA¯Ñö#Jcl´Í[coZÂfÞ²š¾9E:?¯¿½pú¼êî³çlW„T‘ Qô‡þ4ü©Õzãú*þey½írI´}dB=úBꋚšÛ.½@Û«ÿk~µÆØzã4Þ~~éÛWv¼£óñg^»î¶ W-nÎ+^·‘…È¢\ˆ5´©Åú¥/ôGÛ!ªhûÈÝQDÑö£E#j«õ–iŒ­‘6 á÷‡þdn`Ó/}ÑÜrÔvE¸r!BÜäÕÖl—ƒh£íÃîÛ–­Ùf»\m?*4оëá¿ ªù ÑÂ¥Œ!"Áy`G‰À#ðmâqæ¡í‡7Ý!ºNwOŸ÷·[.¯µ]®Œ\9ôƒOhûð–{¹ãÑײìahÑöCNcf÷¢ä>¢Ž¥Â\-÷†_“ «X¼Þ¢íÃl‡~´ýÐbÑ~Ę{«”û¿³Œk†¡B.„SyUÿ6OoͰ1+v6²]bˆ¶ÿ¨×Rߥì–ûæª7³]þm?„46Ö™M½{e•;úåÎÒyÞ'»àéië¸fäBØÔ72ªToÊ€¡ *7í±]b‹¶¿©S?¦ÓL}šz6ÛåàS´ýPÑxX£bõ¦hœ¬Ñ²íŠê<3yÆú¬‹çüÿù·™¥eu¶+¹"mG:&L¯4‰0§d‹Ú‹íŠg´}@ý˜z3s5xüOßT/g»"ÐöCD#aÓ:46Ö™ÜGr(¾ñèró™ø­÷ÏÿwlW”häBtîv†Lc§T0dBhûŒú4õl\ì Ú~ÔíøXc`3Ö¨˜ÜG2ÕÖ·8 !Ü*‚-ä‚u•›öä {‘[ª0Ú>æÜ ¯›á-¢íÛ¥¯Æ½ÎÇ"Û®°ìÅ[o¸¸|bVvÁf¿ÃšºÁ#,jj>ì,¹°úm—ƒd¡íà õuêñÌbY{Ûl—“D´}[4Êýqñ¯ÍcSýj l»" ,ÜÒÞt÷l¤ ¹`…Y’]¡À’ì°…¶[œÍtÔ²™NðhûVh|kvçdYEàjš[ŽÞ;r©ùôüÎa/rÍ00äBÀºÏž+yågËfù¶+BBÑöa—z?õæRðâ—ßWßh»¢¤ íLcÚ;ÿ}‘âj¬Kî=«®Ù÷¹¯Îa#Î ‘ AÒž›¿Xüžo-©©Ûo»$ma žPý¡NEõê!m—“´ýÀh«Ñ¬Öj|ˤ¨ûì¹ÙK6÷Í)RÛ¹þöB}Í5C_‘ Áhn9:êûe:Ôý/[³³ÖÑöêÕ+ªo4—‚ùôÄo´ý˜Ñì?ÜQ¨C­1-£Y Ç;:ýkÍ•›óŠ×mÜm»¢Ø"ü¦“yjñÅY4I´]pm¡¢¾Q=¤úIõ–ê3é*ýCÛ÷›F­»šA¬F³œÌ@&÷¶™›ë¸ãÚ?䂯VUl7+é juSóaÛåCÛG©ŸToin®Sÿi»œx¢íûǽ†F°¬†xåW¿n4‹o\wÛ³?ó+2y‹\ðÉÖíÌQbvÚâð"„hû-–fWVõ¢Œí»Þñà ¦é }ô%®fˆ\ðJyUÀ¡ t0‡Y±³éír€k˜õó÷tºêwÛ…× UýªNWõ±êim—yä¾'4þÔ(Ô G5.ÕèÔvE@â”–ÕõË¥6Ø'»`Ra× ÓF.dNc•¯~‰± ¢…ù ¢Å¹æ6dT)×Ü2AîgHcN<5þÔaÔXT#RÛÉ¥ö8yÆzÚc†È…L´épîešS²…ëˆ惈õ±êi{òÕÛ®(’ÈýL¸?Ð(”ÜÂÀýyýmßXÈçõ½E.¤Ç¬u`BµEÌQΚ]ê.¯eíŽÞ"÷Ó£fö y^ ­Úú÷ó¼\3L¹†ÊM{œµÐë¸Hb>ˆHSßëìé£>Ùv9QBî÷–F•Îz†mjÌi»"WÅz¿i zÅÙ+Y‰À^Ɉ4惈õÃæjðÃO¾¬þÙv9Ñ@î§Žý΀(úäD×?¬pöeqk"Rt¼£sRaUVvAßœ¢is7êL³]惈õÆê“Õ3g]\_îXûIÛ…¹Ÿ¢×ßÞevÀÔ¨RcKrˆ–æ–£÷Ž\j>ÙÏÍ_ܸ·ÍvEáE.\S÷ÙsËÖlë?¨Xjôĵ:»lWx€ù âD=³úgÒê«Õc«ß¶]Qx‘ûפq£Ff©ñ$¹D×[›šnÎ+6Íù;×ïè´]Q‘ =ÛüþG&ôû»µÍ¶Ë<Ã|ñ£^Úé±Õ{Û.'¤Èýh¬¨£:j ©‘¤íŠdªûì¹ÙK6÷Í)R»Öïúšk†— ®†«Íˆ7惈%îè¸&rÿŠ1ñv¬ýäÈñ¯š«=ÿ’7§ºfŸíŠB„\¸Ü''º~6O£ Þ˜"ÆÔo;O|«?çÉ/7rÿrj|hŠ1’û@\5îmûòC?çnðK —`µ:$óAÄžúpõä¬} rßͽâ„F‰¬8$AYågµ¨§§­ãš!¹à¨o88ø‘¥ìf…„`>ˆ„pvŒUÏŽ±çÉý¿ÒPã@gEzmW 8]§»2gCVv»Éœ'.:ÐÚ>vJ…ŽC¿ÜY:عIÀ|É¡^]}»zxóêíÕçÛ®È&rÿ¼kÇj5&$÷dj;Ò‘?n•¹CàÖûç×ַخȎ„ç©Î3sJ¶˜A„é•:+lW„ù ’F=¼úyséO=¿úÛÙ‘ðÜ×xO£>3üÓ8ܰ}×A§[øÆ£Ë[Ûþb»¢ %9*ÞÙ5`èýøCF•îl:d» PÌ‘LêíÕçëäWÿ¯°]މÍ}ñ4Òs>ÐÐvEB¤´¬Î|B”•]0yÆúD]3Lf.h<0lÌ 3(¯j°]`óA$™z~s=PY´ë Ì}ë4º3 i¼§QŸíŠ„‘úЧ§­ëó×¾bõÚ®( IË…cí'ÍýB7œQøÂo5÷ܘ"áÔÿ+n¼ø™r!9[ $-÷5¢3×ü5ÆÓHÜг­íC}ÉÜKpǃ/$á^‚ääB×éîE+·šÕeYO`>œw­'¦tPF$a]‘ää¾FqË™AFwä>€ÔU×ìûüàçM2â{¯ÄûšaBrAï©Yo÷Õ9jJ e‡írüïÜ×hMc6Üô3öÍ)Jøžb2w¼£óñg^3{•~ö+Ï­Û¸ÛvEÞ‹q.èí›Z|a£I%‚¾ÐmW„óAàr&8”ÊŽ¸GŒs_ã4ÖôÓiä¦ñ[,ß>V4·½ç[KÌ]¹ù‹÷¶Ù®ÈK±Ì…î³ç–­ÙÖP±¹Ì«wÐvE@è0®F©1rü«æÆ¥‰2ÅvE^Šeîkl¦šªÝõðbr€ÖmÜ}s^qü.:Å/œÇ@ <2\ óA gJ3ňكç1Ë}÷­\§ÅòV.áÑ}ö\ÁÂß87¥ÿâ¿mWä8åÂþÿëbïtãÀ¥eu¶+êˆæBÛ‘Žïþø UÞ/wÖœ’-zlWD óA =JåŽÒG-HI¤<²]QïD4÷5¾Ò(K•kÄ¥q¹ l=±Òܽpëýókë[lW”ªÈåBÔƒ æƒ@&”>ãúf/KF.÷5¦ÒÈÊ ±†YAî3w—¥éa$º¬håBå¦=Ù,Œô:@H02ÅÇ"”ûѽØ áJËênˆÎ- QÉ…M‡âñ ?̯”W5DhY³Hä¾ûa©J^ùÀvEÐ;îGžoº;Ô<‡?b¶Ð7ÌEhÛ£ðç~ ëã’%‘šþ×vEWæ\è>{nÑÊ­1Û 惀ç”ûJ+s)XùÎíÑÜû)¹7ó"÷ÄCÈ·L m.è¸åæ/Vmy#JjêöÛ.ˆ惀O”YJ.µ/¥˜²Ìv9— gîkt¤1’,iÔÂãš½dsßœ"õr×ß^Xôâ»á¹fÂ\hn9:ü©Õªªÿ âek¶…çXqÂ|ð•òK)¦V¦DS®Ù.ço–ûJy‹4:RU)i¼Dã?óÚu·]¸öus^ñº»mWtA¨rA‡hjñÅAVv¾ÐmWÄóAÀoN¨éWxB-T¹¯±FDªG£#‘BrˆÀW{ÛÌmúõ•á¿°~Í0<¹°ªb»s)µ©ù°ír€˜c>C‰æÜô¢¤³]NXr_ã‚ÌpHã"ŽìÖ[·q÷g¿ò\.ˆ…!œG-r†½È#@0˜ARº üæ¢0<o=÷Ý·Kýó=Ï…äv)^×éîéóªÍ ó7ÜY´py­•2ìæÂÖö1“_w–bÓ1±R@Ì€)ãœE³•}J@+eØÍ}v4æ1Ë)hDîÀ±ö“æ6[ jÙÊg«&}÷ Ó+öì*{Ì+”wŸ}K­ÏÖ¦º¶rß½Üú<ù2¹nÛwt6ÜúèKA^3´’ åU †.Ð÷6fÅΦCA~kóAÀ"eŸPmPi¨L ò[ŸûÕhlãlǬ1O`ߢåå_ý®_î,õ–}² žž¶îT百iÀ¹ð»ÆÖ!£JMV¼³+˜o àrÌëÞܰÛ\U2*ƒù¦Aæ¾F2ÏhT£ï¨Ί×êø¦iê9'ÏXŸõמ³´¬ÎïïX.´é˜0½Òü\sJ¶3Ûp5Ì0P*ÍÕ`¥¤²ÒïïXîk c~.j4¶!÷ u­mqî¬ø×¯Ï÷õΊr¡ët÷¼e5&ÆN©°õ=7æƒ@x(÷•æ’©Ó×UVÈ}[4z±ò ÄIm}Ë­÷Úæ[åÓ5C¿s¡rÓžœa/ê[ ~di} aÁ|¥¤y¤B¹©ôô黸šû«hÄb†._2O#?¾ $Ê…•™/.™•]ð“9<¿fè_.45~艕zñ[x¸1ÂI‰©ÜTóT†*I=}Ÿr_ãRÌ/·ØÚE bé“]OO[gvn½éîÙe•;<|q?ráXûÉI…U …¾9E?›¿)øÅ´\óA ´Ì–LÊP%©òÔÛ­üÈ}L̾Š«|ï'o’ûà‡æ–£÷Ž\jîÁø·üŸ7îmóäe½Í…î³ç–­ÙfBaôĵªÙ“—à9æƒ@È)C•¤æR°²U ëÉËz›ûhLb'¥ûà·êš}7盎wäøW3¿fèa.¨¶ÜüÅz5ý¾ùý2Aþa>DBMÝ~'[•³™¿ W¹¯ˆÆ!f@¢‘IðÜ@buŸ=7{Éæ¾9Eêõ»¾Îäš¡'¹à\Ãì?¨ØÃk˜üÃ|ˆ sïÖ“{o2Ï}oÇ!€ôïèü¿ÿ¹Æ¹.·þÝß§÷:æÂ''º¦opžqPUé½€€1¢E ûƒ™o›gó•¼i?£—aîk¼áܧôí eä>ØÕ¸·ÍÜF’ö}û™ä‚³Úð§Vû±ÿ0¢Hi«ÌÍdíî´s߽ޯ^­cÈ\yUƒ³®×¸ýªW× ÓË…><7¢Äï=’ø‡ù ]ëßý½ÙÛWY¬DîÕ¿M#÷5®Ðè§uΞè:Ý=}^õõ·övßŸÞæÂÖö±S*ôOúåÎZ´r«çû!óA Ò”¿Jas5X¹¬tNñö6÷Ýû k¤Aî@˜µéÈ·ÊÜËqË}skë[®ùORÏ…Sgf/Ù|ãÅP˜0½RßË‹’ØÁ|ˆe±YmY鬌VR_󟤞ûE˜§BôK£ r¢bû®ƒ·}c¡éÀ‡>úRÏ× SÌ…òª†Cèo~}ôK;›yZ/ ˜±¡\~à±åjÑJjåuÏ9•Ü×ÈAã3øÒÐWxZ/ ¥euýrg©'ï“]0yÆú«]3¼f.ô*eDóA fœ+·Jí®Üöœû-hÌ ‘ƒy0Dc ßêøN½ú¤Âªž{õrÁ}ÊÌEï¥r €¨`>ÄO*Ovôûî+ÉŸ}‹Ü€xpßõqǃ/\r×Çs!í§ÔDóA ®œ•ߔ㗯üvÅÜר@#„Ÿ4DÑ–ºýŸü¼éê~òå#ÇN˜ÿ~y.¸W±Þºý–êà/æƒ@¼¹w†R²;ÿý’Ü×x@£3<Ð8á½ßþ¥zApV¾þöB³j´;2ßå@T0’@inÖU¾+åÏ»æƒiïTˆ´ONt=þÌkή²ÿ5¿Z_üê×?˜ùvVvAßœ¢©ÅŽwtÚ.€¿˜ ¡ÜW²+ß•òÊz%¾Ú¾Òß<¢ñ€Fä>$MsËÑ{G.5÷‡è×ÿù·™ú}Ô÷Ëôßm— ÌDQ¾ž¸ÖI|ó+oD ¹IöÜ/þÛ¬>j–§æò ̤QÊ› ¤Ì ¢Ø®`sð3_¾p0ë⬰oNÑì%›»Ïž³]ß1’CÉ®|WÊ;‰o>%ÔH€Ï i>9ÑUøÂoÌs“ «^{—A¿ÿê§Ë‹Ýû|uÍ>ÛeðóA !”éJvñÊz'÷50ëhT ±í2ApÖ6fÅ%ëŒéëÆ½mw^ÜiB¿î¹”k†@Œ1bϽV@ΰ•òçÿ>÷5x艕¬+IPßppȨR“•›ö8ÿýòýË*w˜5Çúd<=m× Xb>Ʋ[ n–P¦+ÙÿuyîkT`öÖ8A£õ|ÔÚö—±S*ÔÏ÷Ë5§dK×én÷ÿ½<DçG³ß1Ü0pÆÏWþ6Ø’øŽù WJm³×°rü‡3ßN1÷ç-«Ñ8AÿKc‚-à‹Sg44Ýû„é•mG:.ÿ;WÌC?Ü*sŸÉ­÷ϯ­oñ¿da>Ä’Zym‚[ žFîk´à\@Ö(Âÿ’~ysÃîC\óörÁxÿwœpyà±åW ‘Ã|ˆ¥³³—DÏ—p¯™û¿kl5˜h¡±„?õ|´³éа1+Ô“ñkóÊ«zþË×Ì£´¬Î¬M•]0yÆz®QÇ|ˆ%²rÙ<âñ™/ÏT^÷ü÷SÌ}ÌUe(4®ð®^€ŽµŸœøì[ê½o8#Åå£SÌ…óÿpz¿ÜYî‡ÓDóA ”Åæ©Ô—€ëUîk,qãÅG5ºÐË’¾è:ݽhåV³.èc“Ê´¶§øSÏC¯|ÿw–™;Rîxð…í»Xˆ ˆ$æƒ@¤)•Â&އŒ*õ5÷ÇL~ݬSª‘Æ%«Ó ºfßÀo.R_7¢¤¦n¯þmosÁùŽŸü·Ím¹fDóA ¢”¹J^ÁÊb%r¯þyz¹¯Ñ…Æú‡oôö;üÓÔ|xøS«Õ?÷TüËòú4^!½\0.¯í›S¤~ýí…ÓçUs͈æƒ@ä(g•¶Ê\5^åï¼e5i¼H&¹¿ªb»Æúç{h’Æ+¼r¼£sjñÅ~é ý1½×É$L?óÚu·]¸Jys^ñº,DDóA Z”°ÊY5[e®’×bî{2üdbÙšmκ?|ô§L^*Ã\0š[Žææ/6÷®è‹ Kæƒ@T(U= Y¯rß¹=Ic’L^ Ð+Î üJOnà÷$ ¯.]óA üü¸ ÇÃÜ×8ÄLTÓX¾Ð[ZÛGO\ëù_æ‚tŸ=—ù£ À|9e¨é{žûÎò楤¾Ì) uî €&Vy»˜§·¹`d¸ô€0BË×E¼}Ê}O²² Rßþ¢òª†[®{ؘ;›yþú~ä‚‘öÖHÀ|!e¥Ó×M~ýË}R4VÑ‹kܢыç¯ISßpЄ€¡ *7íñ黸— FY厼k–¾EŸì‚§§­ãš!ÌPQ>*%••j˜ýrg)=}úF~ç¾F,Ù,4—‚5’ñé»@¼µéÿÓ7M"Ì)ÙrªóŒßËï\Õ?yÆú¬‹÷™/Ï,-«óï{HóA <”ŒÊG5Ie¥3¹¯Ñ‹Æ0úFÏhTãß÷€˜qw¡c§TÐ… †~–ÿ¥¹æÖûç×Ö·øýô€ù JCe¢ Ç[³Üÿîßæâ6ÄCå¦=9Ã^ ø‹ÀrÁp_þ¸U\3la>Ø¥T™4àÜw~ÑÇ¿‡_ ê÷¶9`¯~ãà ¿uÀ¹`,Yýþ —KÍÊ.øáÌ·½ZC@꘶(õ”}æ1 ¥áÏWþ6Èïn%÷Ë*w8‹ãiÌä·€³¾D³•\8ÿ÷Îßt÷lÿœpEÌ+”wf·>[ˬYÌ}³y–Æ<žožQÔ}öÜâ—ßw¶pmn9j¥ [¹`ìÿøÏ÷Ž\jî–Éö"× À0¦Œ3O…è—²/±¹¯1¹¬QÆBVÊëªköåæ/VxÏ·–ÔÔí·X‰Ý\0|ÝxÀ1£\Sº™˜ûü½Ï+õ,†Ü×È'oD‰ÊÐXÈîÑ€à5·5¡ÐPñ²5Û¬_ C.œ¿øiéì%›û橘ëo/œ¹è=ëGˆ7æƒ@”eJ4åšš›2NIg=Ý“ûi,d.Ûú´‚t¼£sjñÅAVvÁf¿£?Ú®è‚ä‚¡còø3¯™+¨7ç¯Û¸ÛvE@l1ü¦S–™P{lR9¹934Ò¸H£#}’C~XU±ýs_£xøS«›šÛ.çoB• FãÞ6s3­~å(áš!à惀”\æ~HsKd¨žŽaîk\¤Ñ‘ªÒHIã%Ûå€Çœ›äs†½ªî×a.ë6î6‹í\wÛ³?ó× o1ü`ntQr™%S~õëFÛ]*´¹_]³Ï¬·£Q“Ý¥À+ZÛÇN©0‰°håÖpî²Ú\8q‡¦éóªÍc7 œ±py­íŠ€ø`>xN9ev×Ur)¿ÈýÞÒÓxÉ\ ÖJã(Û@šNuž1›ì¨C›0½òȱ¶+ºª0ç‚q¬ýäÃO¾üé²lƒŸï·ÿc»" ˜R69 e+³ÈýL(÷5vR‘fkf©lW½S^Õ0`èõcÃÆ¬ØÙtÈv9×þ\0¶ï:xǃ/˜¨úèK\32Ä|ð„òH©dâI9¥´²]Ñ5D%÷5‚Ò8J¥jL¥‘•ír %껆Œ*Vß•\0–—×÷Ë¥‚ûdL|ö-®ic>dH¤$R©))›JËêlW”’hå~Å;»Ì5v¯Â@’µépîm˜S²%Bó”håÂù‹ù;yÆú¬¨å/6ÌL(}œë“J%rß?:¶Y™£­±–F\¶+€¿Óuº{áòZÓMEñÙçÈå‚á¾?çKC„ÿþ l˜éQâ|éâ'V}~!º¹oÖèÓˆKã®p®Õ *7íqÖF®oˆä”$¢¹`ÔÖ·|aÈ<ÊùãVqÍHóA ·”2Ê:·Ü7Wd»¢tD:÷5ÖüÈR³‡—Æ`¶ËhM͇͢—J„Hïé\0œõ½³² B»¾76ÌÔ™ýÌ£ Qßÿ(¹¯q—F_f)WÇl— q޵ŸœTX¥Pè›S4mîÆONtÙ®(#1ÈÑ»ðÝ¿áìÿ[V¹ÃvE@Ø1R¤L1;â)eÆýèWä~è]øÙüM‰i<¦Q™Æf¶+ÝgÏ-[³­ÿ bu¤£'®mn9j»"Ä# ½#÷Ž\jîäÉÍ_ܸ·ÍvE@x1®I9¢41±¢|!÷ÃFïˆÆcúq46ÓMã4Ûˆ³wk›M(èw}m»ÏÄ) ý,7ç›øþö„²ã¶+ˆù Ðe‡ÄD‰2eý»¿·]‘gâ—û›ßÿ(–#4áï«OñË…ó?ɽdsßœ"ýhú]_Çì]2Ç|¸¢Ø'H\s?~wpƒONtM›»1Þw§Ç2Œã#Ç¿ê\ÝåϤù p9÷&Jr?Z”ûqZá€u Y½*ƹ`Äòé sÌ7÷èÿ–ÿó?ûÜטmøS«c°<‹êæ(IÈî6±Ïý:Ü÷~ò&× 惀¡DP.$g…ê„ä~ vˆ`ÅÖö±S*Ô{ô˵pymv²KH.œ¿¸{ÔOælˆÇîQ@æ˜çÿ~[e¹'z7õþjD§ŸW£;ñlW ÔNuž™S²åÆ‹¡0azeÛ‘Û$9¹`èÍ·ÊÜô…!ójë[lWØÁ| §þ_)`â@¹@îÇ•ÞYëô#kŒ§‘žÆ{¶+FåU †.P_1dTéΦC¶Ë TÒrÁؾëà¿~}¾ }ô%®"˜"±Ôç«ç7 ,P"Ø®(PÉÌ}î4ÆÓ®ñžF}¶Ë"ê†Y‘äþ!™¹`”–Õ™ÛH²² &ÏXÏ5C$ óA$úyõöæÁõÿJÛYäÜw®ÿkì—´ëÿ.wäØ çþÂ~“ع@’sáüűÁÓÓÖõùëØ`Åkõ¶+Â|Ióò¯~g®ªÏWÏOîÛ.Ľïõ9Ïi4h»"tî^´r«Ym’狞 †ûÞ¡;|!i÷!™˜"9Ô««oçƒÜ?ïZ?P£A “°Ž‡:@gýᚺý¶Ë±\pT×ìûüàçÍ€á?ž|9–ÛæƒHõäf+:ýR¯~ÞvEö‘ûýÅ8 @8û“~î«sØŸÔA.\âÂÚãwé˜\{áôyÕ\3D\1D¼©÷V®žüÂCw±ÇƒÜ¿„Æ„ê˜h”¨±¢írøâxGçf¿“•]Ð7§hjñýÑvE!B.\NgÈãϼfö&þç{ž[·q·íŠï1DŒ©ßþìWžÓ®ž\ý9¹ïFî_NgˆÆ‡%j¬¨#' 'ÝgÏ-[³­ÿ bu}#Ç¿ÚÜrÔvE¡C.\Ζ¯ ÿ…¹Ë(7qãÞ6Û^b>ˆXR_­ÛtÝêÃÉýË‘ûW£³EcE5zÔÒvE2US·ÿžo-1ƒy¸r¡gë6î¾9¯˜‹Ìˆ惈÷­ê·¹µãjÈýžiÄh.)h ÉB@t5·=q­Y6jñËïs…§äÂ5éü)zñ]óJßœ¢ÙK6sF!˜"NÔ3«6~«Ç¦—î¹M:4z4 Ñk<ɧÌ@´|r¢Ël+“•]0©°Š%"¯‰\H‘Î%s ‹Ô!˜"ÜKC«—&÷¯‰ÜO‘Î%$5ž4Uk„i»"×¶úo¹o®z¹acVð´WŠÈ…^ihú_g«Á,ÝÿñŸmW¤‰ù ¢î@k»úagëXõ϶+Šr¿W4žÔ¨RGL#L3m—àªêUjv©Ü´Çv9QB.¤¡¬r‡¹¤OvÁÓÓÖqÍQÄ|Ñ¥^W}¯z`ó`ˆúdÛE ¹Ÿ-ÍîÕmjÌi»§íHÇØ)j¡ýrgÍ)ÙrªóŒíŠ"†\HδÉ3Ög]Ü0pFÉ+Ø®è惈¨Ò²:õº:{Õ«&÷{‹ÜOÎ435ÚÔÑÓÈSãOÛø»†9þ§oÒ0ÓC.dBgÝCO¬4w+ÝzÿüÚúÛ©b>ˆÈQ«žÖt¹ê{Éýôû™ÐY§1'CaP¹iÏ€¡ øà>säBæÜC”acV0DA$0D„pñÍCä~æœÇ”4å1% x;›9ö–W5Ø.'òȯ”–ÕÝÈ-Lˆ惈÷ÍùêcÕÓÚ®(òÈ}¯hê,c¨Ñ©ír€D0 ÿšD`á_¯ r/qðOw±ÄBù ÂÅ»ü@î{ÈÙæL‡”mÎ_uî^´r«³1èÖvÛŹà¹K–@ß¾‹û™FÌfînuoîCî{ˆÜ÷œÎONÍj·¯jÔj»" nªköåæ/V+ËQRS·ßv9qC.ø„-’rÌNê-ÕgšÎS½¨úRÛÅ ¹ïQ5RÕ±Õ¨•óðÊ>úÓð§V«eõT¼lÍ6ÛåĹà«â_üwßœ"áëo/ü¯ùÕÝgÏÙ®øóA„zÈ‚…¿Qo©3S=§úOÛŹï+W5jÕÖVãXÛåv¼£sjñÅ~é ýÑvE±E.øMgïãϼvÝm®ußœW¼nãnÛ0D¨¨oT©sR½¥úLrß?ä¾ßÄ™ûey½si¥©ù°írbŽ\FãÞ6sÛ³~Ýõðâæ–£¶+BÒ1DH¨?¼ç[KL÷¨~R½¥íŠbŽÜ†F°ÎMnÙÚ.ˆ çÖëß\Ä­×Á ‚´nãîÏ~å9.€# ˜Â:÷íê¹}"ä~4šÕ˜–E0€ThmlR9K3\˜Îíéóªd.¯µ]Šù ìRïwß>^­^‘Ü ¹0÷"ùë²X.p9÷Ö-Ÿ}‹eF.X¡ó|Ä÷^a=XÄ|¶¸—_VOHîŒÜ·Bç¹F¹l¢ \®¼ªá‹_›§Ö1lÌŠM‡l—“Dä‚EÛwt6غÿ;˸fˆ 1DðÔË }ô%¶gµ‹Ü·Hc]xuü5úÕØv9€eõ ‡Œ*U‹0tÁ›xdÀrÁºÕo|Ø/w–Þ…>ÙOO[Ç5Cƒù ‚tªóŒú7õr:ëÔã©ß³]Qr‘ûÖiܫѯÞ„5¶]`AÛ‘Ž Ó+M"Ì)Ù¢Œ°]Q¢‘ a V0yÆú¬¿Ž”JËêlW„øc>ˆÀ¨O3W½ÔË©¯#÷í"÷Ã@­@c`Ó.4*ÖØØvE@@ºNw;'ÿØ)­m±]È…Q‹øÆ£ËÍT·Þ?¿nÇǶ+Bœ1D¶ï:¨ÞÌtkêßÈý0 ÷ÃC-Bãaç#VUBìUnÚ“3ìE>r!ljë[œáSþ¸U\3„O˜ÂWê»Ôƒ9¸Ô³Ù®Ÿ"÷ÃÆy„Jãd–m—ø¢©ù°yxö–û殪Øn»ür!œ.¬Ä~qÑݬì‚ÿšk†ðóAøDýÕOæl07À«cW°!÷ÃI#d“Í‹9Û.ð̱ö““ « }sŠX\7œÈ…ÐR{yzÚ:³SóMwÏ.«Üa»"Ä óAøA=•ÙgM} d…¹Zf 6™5rÖø™­XuÝgÏ•¼ò …Ñ×6·µ]®Œ\9µ{G.5÷\Ýùï‹÷¶Ù®1Á|ÞRïôå‡~n:+õZä~h‘û!§¶£‘³¹¬±´FÔ¶+ÒQ]³/7±Îdý^S·ßv9è ¹ jSÿ’7Ç ´FŽ•k†ÈóAxE=’ú%ÓA©§Re»"ô„ÜŸ±4m ÑÒÜrtÔ÷ËtööT¼lÍ6®i„¹jM³—lî›S¤÷ëî(Ô×´/d‚ù 2çî—ô;ýR$ûQ¡Ö¤±´FÔz¿4ºæ3w„ßñŽÎ©ÅÌ=Ï?˜ù¶þh»"¤„\ˆµ¬ïL\c®ÃßœW¼nãnÛ!ª˜"ComjR/dº#õKä~TûÑ¢–¥qµY‹C#mBËYiøS«Y)ZÈ…(jÜÛfn#á9¤ù Òæ~®Y}Ï5G ¹E]kŒÍZý§­Ûÿ˜7¢Ä왲þÝßÛ.½F.D×ëoïrÖñ3ùuÖñC¯0DÔÏ<ñà gÝcõB¶+B¯‘ûÑ¥‘¶ÙË[coÀm—œ?ÐÚ>vJ…I„E+·²?ZD‘ ‘¦v7}^õõ·²Ïz‹ù zËÙU}Žzr?¢ÈýHS»Ó¨Û\ Ö8\£qÛ!¡Nuž™¹è½/†Â„é•mG:lW„ô‘ 1 6˜?n•¹wë–ûænaQ_¤€ù RW[ßbž Ñ/õ6ä~¤‘û1 6¨¸ÞGÆ5&×ÈÜvEH–òª†Cè |à±å;›Ù.™"bcû®ƒÙ,4¶¡¾Ä5CôŒù R¡žDý‰éXÔ蟱]2EîdžÆáëÝÔÈ\ãsÛå tÖ}}ôKœu1C.ÄLiY]¿ÜYzOûdL*¬âš!®†ù z¦ÞcòŒõêItž¨WQßb»"xƒÜç“Òù¤þq*={ÉfF˜qB.ÄZ¨f‚ŒâÐ3æƒèW–bŒÜµPÏy’ >1O­šPà©ÕX"⊻¼Ð3惸"õw<øwžÇ¹WÎJ·³Ò#¼R¹i³ªí°]|A.ÄÛ–ºý¬+b>ˆK9v‚•©’€Ü7Øà4’·]"Œ]/“ƒ\HV‰Çå˜ÂÁÎ5‰Bî'Fïæj°ÆóÕÛ.s¼£sRaUVvAßœ¢©ÅØá:öÈ…„P[3ùuv‘†ƒù Œ_ýºÑìe¦þA½¹{ä~B¨-k$¯ñ|Öŧ€5·]" ûì¹ek¶õT¬^bôĵÍ-GmW„ ‰¢v}ïÈ¥æ~°ÜüÅ{ÛlWk˜B=€úÓ!¨g ÷‚ÜOµkêõŽk„¯q¾Fû¶+Bxm~ÿ# ú½ºfŸírr!ÖmÜ}s^±~gâ®&óÁ$S«ôÿ­5€zõ ¶+BpÈýÒØÞçkÌo»„ŽsÝ঻gsÝ È…dRKŸ½dó?Üqáq¡¾9Eúš¶Ÿ4̓ɴ}µz½ûêhû Dî'“¹ÐÜÎ}€p|r¢ëgó79÷k?i»"X@.$™ZýÈñ¯šÏþ%o÷$ óÁRÿÜWç˜&¯¶Oî'¹ŸdjõÎ:!šð¼pÂ9ë=ôÄJÖJ2r{Ûîü÷EA3Í tJhŽ ™‚íŠà£Sgæ”l1o÷„é•mG:lW„° p õùãV™ûÊn½~m}‹íŠà æƒñ¦–«ök²Z4¹¹K¨ÐìÀ|`¤ù‚f ¶+‚÷*ÞÙ5`è½ËCF•þ®±Õv9rWT·ãcg0ùG—·¶ýÅvEðóÁ¸ÒÐNmÖ¹¤£¶l»"„ ¹+ÒA3š5hî`»xfgÓ¡acV˜w¶¼ªÁv9#r=(-«3÷deLž±žk†qÂ|0~ÔBÕNÍ-ßj¹j¿¶+B‘ûèæ æS$Í 4°]2r¬ý¤ùä÷Æ3 _ø KCàjÈô̽…F˜«ßøÐvEðóÁ˜)«Üa®Þ¨µ²$z@î£gê=4w¸ñâ£ÇšM°1Muî^´r«Y'pÌä×y2=# õ$÷g™¹íŽ_ؾ‹…È"ù`l¨=ªUšæ©vJî£gä>R¡žDó³.±f¬F!Õ5ûÌʱy#JjêöÛ.@. uêa>?øy3ìñ½W¸fiÌc@mpäøWM“TÛT µ]"€ÜGê4›ÐœÂìRG~M͇‡?µZïWÿAÅì,‰Ô‘ è­…Ëkûæé´¹þöÂéóª¹fQÌ#MíN­OmPo¢Ú#»Ã uä>zK3 Í/tÚh®¡‡írpÇ;:§oÈÊ.P"è ýÑvEˆriP?óø3¯]wÛ…O%>û•çÖmÜm»"ôóÁèR‹»9ïÂØLmP-‘ÜG¯ûHƒ™nh®¡ÓPé>{nÙšm΄½¹å¨íŠ=äÒ¦>箇›{Õró7îm³]zù`55V[3N­ÜGÈ}¤M}Žs;¢æ š‰Ø®(éœz ÜЋ´‘ ÈUDóÁhq(¯LJòH¹ iÞa.L±\‰Eû?þóè‰k˜›#ä2§^è¿æÿíQ¦â_ü·íŠpmÌ#äù¥[œ‡vÕÖÈ}d‚ÜGæÔ 9ÛhV¢¹‰íŠÄÙ$+»`Ra‹û!sä¼ÂR‡ÑÂ|0Ü‹úª}‘ûȹ¯¨GÒ|D³¶;LYåŽ[&¼¥Y‰æ&:©4OÑlÅv9±UßppȨ ¡ýÀÂÊM{l—ƒX!à%Â?Ýuá6’>ÙOO[Ç5Ãb>Zj/j5j;zƒÔŽ_Á[ä>ü Šæ):µ4gÑÌÅv9±Òv¤ã»?~CǶ_î¬9%[Nuž±]â†\€OÔ_Mž±>ëâ˜öÆ3JËêlW„¿Ã|0œÔR>óå™zkÔvÔ‚È}xŽÜ‡OÔ_i¶¢9‹N0Í_4‹±]QäqH r¾Rßen#ѯ[ïŸ_[ßb»"|Šù`بu¨˜Æ¢VCîÃ'ä>|ŇY^á#W†\@Ü݇žXÉ@7 ˜†‡ZDþ¸U\6A0È}€‡Ý2Á#™¹€À”¼òÁ gp#\H0 ƒ®ÓÝÎmÕjj#¶+Bü‘û ‹aöK¶Â rAr/”qÓÝ,”aóAëtþ›Ý»Xv A"÷$6ËK[:Â"rÁS/7ø‘¥ÎBú Mÿk»¢$b>hQãÞ6÷¶,ä>‚Dî#xêå4Ç1—‚5ëÑÜÇvEáR]³/7±ŽOÞˆ’šºý¶ËAâ °…¶íb>h…Îsíæ´×ù¯V`»"$¹[4ÓÑ|G§Ÿæ>ô~FsËÑáO­Ö1é?¨xÙšmÌ”a¹‹ÔïÍ^²¹oN‘NÂëo/,zñ]zÂÀ0 ˜Î홋ÞÓy®Ã®s^g>g;¬ ÷a‘ú=Íz4÷ÑI¨yfC¶+²æxGçÔâ Šƒ¬ì}¡?Ú®ÉE.À:õ?óÚu·]øÄäæ¼âuwÛ®(˜IgµÎmpç:Û endstream endobj 144 0 obj <>stream É}XDîÃ:3ÒBBó çVIÍl—ç¦Ùœa/rÓ,B‚\@¨¬Û¸ûŸïyŽQÀ|Ðoî¾uVóÁ7B‚ÜG¨hN¤™Q–R9ÐÚ>fòë΢:]§»mW|Š\@ب‡œ>¯Úy·¶ÙY8Wç0¹°!÷Nê-5WÒɳ­ØË« ] Ÿkؘ;›Ù.¸ra¶}×Ag›¶¡¾¿k†1ôœÎO¥ÎÆš:{mW\¹0ÓŒIó&¢šCi&e»œŒü®±uȨRó³T¼³Ëv9ÀU‘ ¿¯Õ÷Ë¥µOvÁÓÓÖêè!“ÿù³·t~êê\Õk»"àªÈ}„ŸfOæ35ͧ4«²]N¯µé0Ÿu*æ”laÜ‚# êK'ÏXŸõ×ñviYíŠ"ù Wt6šë:?u–’û9r‘ ¾T3)Ó»jn¥–íŠRÒuº{Þ²SöØ)ÜׄH !îûñþõëó¹/Ì3§3Ð\Áæ~fD¹Q¿ªY•¹¬yVÈ׿ªÜ´Ç¬•:ø‘¥õ Qä"§¶¾å Cæ™Axþ¸UQ¹f6Ì3¡³Nçž9 u6Ꜵ]*r‘£¹•fXfÏ>͹l—sM͇zb¥*¼å¾¹ÉÙK±A. ¢œõü³² ~2gCȯ†óÁô˜ýPÌ­Ë:Ù‘Cî#¢4ÏÒlKg¯f^šÙ.çSÇÚON*¬R(ôÍ)úÙüM±Y‰B. ºÔë~ï'ošý¾oº{vYåÛE óÁ4è3;dé¬Ó¹Gî#ŠÈ}D—z]͹4óÒüK³0»útŸ=·lÍ6 £'®mn9j± ä¢N=ð½#—š;÷þ-ÿç{ÛlW Ì{EçUnþbsšé|#÷]ä>¢N=°æ_æR°fdš—_CuÍ> ú}óû_à!rñ søæ¼b3\9þU6¿&æƒ):ÞÑ©3ÊœZ:Çè-uä>âA³0gF¦ÙY`ß×™öTlk6 x‹\@l¨Ož½dsßœ"Òú]_ÓK÷€ùà5qF!–È}ùcSó²`îØüäD×Ôâ ÎݪÇ;:}ýv@`ÈÄŒúçoO(ãÓœkb>Ø3÷'Î:£È}Ĺ˜Qÿì¬è¢ùšOOv;«Ù juxV³âM½·ænšÁé<×lNsº4^äTç™ÙK6ßx1&L¯l;Òáy@x HõäùãV™;¿0d^m}‹íŠìc>èÐù ³Âœ:OÈ}Ĺ$PO®yœNuÍé4³Óü.õ[^Õ0`èýÛ¯~igÓ!ÿŠB‚\@rlßuðK{xýúèKé]3Œ æƒç/Þ ¤3Áœ:7t†Ø®ð¹äÐlNs:ðšß¥ø÷xl¹ùûšú]ä’¦´¬ÎÜF’•]0yÆú^]3Œ“„Ïõ¾ëÝ77ë|ÐYa»" ä>’Æ|Þ×óßqž8sÑ{‰ ™È$úù‰Ï¾Õç¯sååõ¶+² ÉóA½ã暀Î ä>…ÜGõÐÏ›ç Íêsi?oD¹€Ärß+xǃ/$í^ÁdÎõ.ë½æža$¹8Ö¿û{g=Ò­Ûÿh»Àr ÷ÞoÿçóƒŸ7„‡Ÿ|ùXûIÛ$ióA½³zÍ­w\ï»íŠ;È}༟û‘C.ç]{ \{aBöHÎ|Ðì9¢w–=G€óä>ïxGçf¾•]Ð7§hjñýÑvE€eä`(æ5g/òuwÛ®È_ ™ê}4O…èÕûKîä>«ûì¹ek¶õT¬&0êûeÍ-GmW„¹¸)òF”˜» só7îm³]‘_b?Ô{§wм•zOÉ}À ÷‘L5uûM(è÷êš}¶ËB„\.·nãî›óŠÍT"®*Åx>h>ê5oŸÞÇØÔ ô ¹d27ÿ”¼òA÷Ùs¶kÂ…\®Hy1sÑ{桳¾9E³—lŽY‚Är>¨÷Hï”Þ/ó(¨ÞÁ˜½k@æÈ}$Ӥªä,ô ¹ô@Ù1rü«Î¢”qºÃ$~óA½;ÎR±z×È}àŠÈ}€¹\SãÞ6³?‘~Ý;réþÿl»"Äi>¨wD•dŒŸú2GîÜÈ Ee•;ÌJ•}² žž¶î“]¶+ÊH<æƒzô^è1†è=²]vä>À\R×uºû‡7-2;Ù-Yý¾íŠÒƒù Ž¿Ù5RïÈäë“°k$9ràF.½Õv¤#Ü*swâ­÷ϯ­o±]Q:"=Ô1ב7oÞ ½#¶+"ƒÜ¸‘ @zÜS’ÿeä¦$ê8ëhG}2XDîÜÈ ¥euŸùòLç–ÅSglW”ªÈÍulu„Íͺ:æ:ò¶+"‰Ü¸‘ @†ÜKšüã]³¢²¤I´æƒ:ª:¶±Y̰ˆÜ¸‘ €'´¶Uêly°}×AÛ]CTæƒ:’:žæÀÞ÷íRgÛÑFîÜÈÀCÚ=üóA=Cs0uTulmWĹp#ÏÍ[VÓ7§H-ëúÛ §Ï«î>{ÎvEWæù Ž˜Ž›Žž*Ô‘|~éÛñAîÜÈÀÇ;:æµën»ðÙÖÍyÅë6î¶]Ñ¥B;Ô±ÒSm:z:†:’¶+b…ܸ‘ €þðÑŸró›;õEsËQÛýMçƒ:>îÃÕÔ|ØvE@ ‘û7rð[8?ð Õ|0ü§±AîÜÈ ]§»ÝÄ-\^k»¢Íu4Ü[êXÙ®ˆ3ràF. Õ‚™a˜Fh9V 6È}€¹̽¡ÞýßYfkC=»óAýÔúÙ#´]#ä>À\¬(«ÜÑ/÷ÿgïn¼¬ªîtßÿmy‰çp®·õÇIš›2„nZ#FI$Þpr¢C›nt„¡&6šæ bZcG:¯]¥!yQ¤¢–  ÒÔ€F,|)Ð ¡ŽTå)¤°x©‚î#3™=ÃKÕ®½×Zs®¹¾ŸÁ` R{ϽöZ뙿½×úÍi:ú.©®¹ÿÑ—ŽíÎx¾êA½R½^½j=»¶€¶CÆ ŽÜ¸ÈÀ—ã]'œ²¦êleô_ÿjêÂÛ²|v/õ ^£^©žW¯Z¯][ Ëgp†Üü)rð«ý@ç-w-6WN~ö+o}{o6Ï›q=¨×¥Wg^æWï\¬WÍó8¹p‘ @67¶ÚriÔ½K3(—2«õZôŠlÁ«Wšö3è¹p‘ @8þuÉ|jÈs9åÃÓצºòBõ ÆÿÃÚ3Äêu=ùÌ–ôž @‰È}€‹\‚â¶[¹üÚééµ[I»ÔÈ5~ s\¹p‘ @€ZZ~éö§Ì5–_ùäÎ]í‰?Ezõ Fû…ÿo®¼^…^KâO lä>ÀE.Áúd¹ö/¥µ\{õ F¨qš_uà ?Árà"€õœ:=}þƃ'ë8½ôšIú³þ&‘GN¶4ãü?>?I©Ñ&8NÉ"÷.rßáή»&¬2ß»]9¬ö¥W߯ü1¬5Ê ïÎÿù¼F[ùcH ¹p‘ @^ìÜÕ>tÔ¼¤îËK¤tïsÔØÒ¸Ï@²È}€‹\òå—ÿ¶Óôíü³Ï=öíïÿ¼ì¾ÖƒzÞ±þBc0}P5ªò@ÆÈ}€‹\r§ûDÏÄYë/½f’Y×oÎâÍeÀE.9uàÐÑo~g™¹VóÓ7þdÓ¶=ýúñòêA=ËÕ7Í4O:êÞ¥C¿~€wä>ÀE.¹¶}ǾÏí S ¸óé½m%þ`ëA=²ß<‘žQÏ[îøDî\ä…+¶ :MÇò%Õ5&­>Þu²Ï)½Ô£é1õÈú÷z=WCà¹p‘ @Tµ=8eMéU[‰õ [iêñK©4„ŒÜ¸È &îUŸûêœ^®êì³ÔÏVß2§Œ+Q„ŒÜ¸È >›[Ý®/í:Ïÿ7½Ôƒú÷ú)óãz=ZúCrà"€Xõ¾*ÄëÁDV²2rà"€ˆ9Ú}ïÿ´«Æ¯ZÝdÿ×ùõà/^ÙaWº¿ûëÊ^é@ÈÈ}€‹\¢×ÒzðK·?e®ÿ:jÞÎ]ígþ´ÔßèïÍ?пԿ÷=di!÷.r(ˆ5¯ÿêÊaµ¦èûÛXùϯ×ôûß_iþRÿ÷å ;‡ ]ä>ÀE.ÅÑsêôôù ž¬£¾êìÊæwýþ^ÿ×÷¤ŽÜ¸È hu>z¡ùNP¿ôgýïAȹp‘ @¡¸÷Ú_Ü3¹p‘ @A9Ú}ÿ£/Ù^£æ¶Á1㟷=Eõé) DܸȠìZ„UÕ5ÿ4c]÷‰Û_TÖߘ Ysˆ¹p‘ @Ü67¶~ö+›ëBGÝ»´ý@§ùûsÖÔßëÿš¦¯Ÿò7d)"÷.rˆU[ûÇ_½s±-ñ¶ïØçþßó×£ý›¿¸ùÅãˆ;ŸÖ#d;d©#÷.rˆÏñ®“NYc.8tÚÂÛÎÿ7¬ ý{ý”¹¸T£GKÈ2Bî\ä™å/¼cª¹Kªkîô¥‹Us½ÔƒgÎV”úÙKþXQ.ûåÛi@vÈ}€‹\¢±}ǾÏí {µçÞ¶Ž^þqïõ ¡GÐã˜Ô#ŸsÅ)€<"÷.rˆÀ¡Žc·ýý³¦pûô?Yß°»Ï)¥4ôhzLóà·Þ·œÅë\#÷.rȵî=g­¿ôšIŸ¬ñ…É¥¯Qz=h|²bÅ&ëGô\zF=o¹Cà¹p‘ @~½ôêûþÅ1«Éûû??ÜÙUúÏö·=¾žÅ¬h¯çÕ³÷È<#÷.rÈ£»Ú‡Žšg®á¼î[ó[Zö÷ʨ =×oý©yjA#éï#ðˆÜ¸È _Ü/é®V[ö—te׃†žWÏ^ÞW“<"÷.rȑڟþû€Á¸‰¯fÎk=§N—ýPÖƒ¢gŸüäëæÖEjúüe?€Ìû¹ä‚ÛäóöqÏUÞä³òzÐÐH4ž~µ6à¹p‘ @àö¶uÜxÇSvÀwÞoKäa“ª¦æÿm—>Ôh{_ú€Gä>ÀE.Á:r´ûþG_º¤ºFéå×N_Qÿn‚žl=hh„§VcÖÈ5þ@"È}€‹\´pŶˆLÑáYU]óà”5Ç»N&ûøiÔƒ¢qj´UgkØO ™¢W‘ì㨹p‘ @h67¶~ö+›k/¿q÷’öiÀE.ÞyiÃ’Y=x&åÆ8ú…ܸÈÀ#Ë4dY)-œ _È}€‹\¼ð¾Œ{öõ ¡Wª×k^¸¶€¶CÆ ŽÜ¸È c=§NO~òõK¯™¤CoÀàÉÓçoô2 _õ QûÓ×k×´j漦mâe@‘û¹dé¥Wß¿rX­º?ûÜcßþþÏwvù‰ßzPôÚµ´4 mm_# …Ü¸È -­¿xëOÍu’CGÍÛ¹«Ýïx¼×ƒ†¶ƒ¶†Ù,×}k¾¶’ßñÑ#÷.rH›ûEØŸñ_ù",zÐÐ6Ñ– ákS zä>ÀE.©š³xó§¾ð‡å&ÎZß}¢Ç÷ˆþ ¨zP´e´}Ìm•ÚbÚn¾GĉÜ¸È %n#Í[ï[Z#ÍÐêAC[é¶¿ÖcÛU zä>ÀE.‰ÛÛÖ1âΧíB{Ûwìó=¢ ³4´Å첌ڒY.ËDÜ¸È AÇ»NÞÿèK—T×è°8tÚ²_¾í{Dr=h,ámC RÛS[UÛÖ÷ˆ€û¹$eáŠm¦~©ª®ypÊšÀë—ðëÁ3gëkmɪ?Ö×Ú¾Gä¹p‘ @å¶ïØ÷7?n¯olkÿØ÷ˆú–‹zÐÐöüê‹ÍæýìWóú[ /È}€‹\*Ñ~ sÔ½Km©²¹±Õ÷ˆJ•£zÐжÕ6›ZÛ\[Þ÷ˆ€\"÷.r(O÷‰žš±Î\Êø©!Sr·>BîêAã“õ;†L1åjû‡³~ä>ÀE.eXQÿîå×N7ë§ßÿèKGŽvûQ¿å´mmmsmy_ï‚Þ ß#ò„ܸȠ_vîjÿ«Qÿj®ZüÒíOµ´ô=¢2å·4´åµýÍñ—ßøW½/¾Gä¹p‘ @‰u»}Üs¦¹rXmÞ—JÏ{=hè]ø¿‡Í0oŠÞ½G¾G„ŽÜ¸È O=§NOŸ¿qÀàÉ:Xô»þ¬¿ñ=¨JÅQž‰ôÝÒCî\äл5¯ÿêÊaµæ¨¿ý‡•‡;»|(ÑÔƒ†Þ—¿¿Ò~{ûò†fß#Eî\äp1îjCGÍ‹ìµÈêACï‘Þ©îîÒCî\äp¾#G»ï}ø—¶ƒåªÕM¾G”¼(ëAã¯ì°Ý_ïþǺiÿÑ^ħˆ ¹p‘ ˆÃ‘£Ý÷?úÒ%Õ5¦KäŠúw}(tÔƒ%Ò¾d:ÓjïÒ>FgZä¹p‘ ˆÀ¿.ù³Š\UuÍÃÓײŠ\)¨K§=JûUÕÙO´§=ùÌß#ÊGî\ärmscëg¿ò¸¹¢oÔ½KÛtúQnPö—ö.ícfgÓ^§}Ï÷ˆ€rû¹€œÒäü–»ÛÉùÖ·÷úQÎP–G{šýâ«w.æ#ä¹p‘ Èã]'œ²Æ\¼÷_ÿjêÂÛ|(—¨+¡½Nûž¹DY{£öIß#JEî\äòeEý»‡N£¹Gå¨+ä¶0Ò>I #ä¹p‘ È‹í;ö}þkO˜ëô¾òw‹ö¶uøQ¾Q&Bû¡öF³[jÿÔ^ê{D@È}€‹\@øÜÅÁ?}ãOX<Ôƒ Ò>©=Óì¢ÚWµÇúpQä>%%Bc"häBÖ}¢gâ¬õ—^3I{é€Á“ç,Þì{Dñ LœöOí¥ÚªÚcµß²î ÂDî#TCÅñÙÚ¦¾¢#î‰õôC°Èë¥Wß¿rX­öÏ?ûÜcßþþÏwvùQT¨Ó ½TûªöXm[í½Ú‡}8¹À©nRõ¤½T•”ï±$@/瞇êÌæ3lâ£Bˆ\@€~ýášg®¾ÓZZúQ„¨Ó£=ÖÝ›[öûðŸÈ}Kµ’*&Ó5N5T[ûǾG”˜Æ¦}ÃG/Ôë<òÉú øð'È…¯W2C=˜6¾àF˜È}„IU’j%휪›b½ánù ï\}ÓL½Æ‘cŸá£B„ƒ\@8f-jpo¿ê9uÚ÷ˆbF=˜íÃî °?yj“ïä>‚£ÊHõ‘vKÕJKë¶ûNºŽížôÄk— ™RU]3aÒê8î‘DÞ‘ í³G=˜ä"(ä>¡ӣj"UFOV•Tœ5…[ZŽÿ¼ŽÄ˯¾àÙ7ù~‘ ðko[‡¹¢žåÛ2F=˜1wMíó,  _È}„@ê UCÚU³Q@ö=×}k¾¹Óœ á¹_Ží¾ÿÑ—.©®ÑøßþzÚŠúw}¨X¨½Ð~®½][^{¾öÿâ|ŽpûðNµiº¥ßUùŽOª‹­|ëŠë?¹Ù|ô÷V³.†wä¼X¸bÛùË©Ú÷ªªkœ²æx×Iß#*êA_´·kŸ¯:ûIˆŽ ¾G„b!÷á‘êU=ÚU©â:Iãpg×ÃÓךëf©]Gÿ1dŒ\@Æ67¶~ö+›«æ¾öퟱ<«/Ôƒ~iÏ×þo:.|EAîà Õ8ªtTï¨êùÁÔW(yÎ×ܲÿÖû–¤¯‚B. 3šºw)à@P†ÀýxDG ä>²§êƬ³ z‡uz§cÓ¬»1ì¶[¶ÿÆ÷pPä2Ð}¢ç§¾b.ûÔ)ó—oõ="PDG„Ž sù´Ž/¾G„˜‘ûÈ’*Õ5fö5¯ÿÊ÷pòA)0wÉÓl瞇êè?†´‘ HÛŠúwÍ9A¡ ŠÛ^IÇ í•rÙP£ZÆœÓTÝðIW8tô‰õÚ€— ™2uîtZ@zȤgç®vs̓~}éö§öüö÷¾G„ÿD= #:RÌ!£cGGï!Bä>Ò¦ÊEõËeg/{PEÕð•x¯ù£‘cŸÑ–4böªÕM¾‡ƒ8‘ H p‡z0X:^tÔ˜ÃGÇ‘Ž&ß#BTÈ}¤J5‹*íc·ÜµXµŒïáDÂnÕ›Ç<ÍVEâÈ$«çÔé©s߸ôšIÚ¯ ž<}þFºI‡‰z0d:jtìèÒ{¤£IÇÇ’Bî#%ªST­ðMVJŽwœ±`ߺ" äôÒ«ï_9¬Ö|¯qׄUt“õ`øt}ûû?7”Ž,_¾G„ûHœj{§Ûôù¹Ó-=ö®ÌC§qW&’B. -­M1ý:j÷=…z0/t4é˜2—Ž2k¾G„|#÷‘ Ó Sµ 0³ÔØ´Ïvm­ßðïá ÷ÈTÈ|…ñgŸ{Ìôûå¿íô="”„z0_^zõ}Ó§WÇšŽ8¾|GÙÈ}$E•ˆ])ïÍwöúNá°ª#’B. so6ë¦]zͤ‰³ÖsÝBŽP掎/eææ\w:ú|¹Dî£rª>TƒhGR=¢ªÄ÷pŠëÈÑîGg¾:`ðäªêš “VóQ!ÊC. m¦£ŸÿÚÛwìó="”ƒz0×tÜéè3‡¡ŽGîÙAéÈ}”GU†j UÚT}p/sh^ßÜbn6×ï·~è{8Èr¥;Þurüc/_R]c[-\±Í÷ˆP>êÁ,^ÕhÚ8è¨Ô±IO?”‚ÜGT_ØZƒ5…ƒEÍŽò (‘ª?;ó|pÊfžyG=‰:«ø”%#÷Ñ/öZÄ˯εˆ¹p¨ã˜½¦÷Çoàš^ô‰\@Ÿ¶ïØ÷ÿŒ˜Í•i‘¡Œ‰{·ŽV®âF/È}”Hu„ª Û«DU†ï¡š[ö››Íéùƒ>‘ èEûÎQ÷.5“LO67¶úC=¡ÿ}ø,sÀêÈÕñë{D¹Rص ¾q÷Ö2È/»&Èw<ÕØÄG…¸0rd:Û›‹Ðèl%êÁXÙU`tü² ÎGî£wªT;°Öy4”ÊsËÏ=Õq•ÎG.à|+êßµ+_ßûð/¹òMŠIûÎ&Ö›7wÆ‚Mt€‹\€kç®vÓ@L¿¾tûSt¦Šõ`ôtüê(6‡³ŽkݾG„ û8ŸªÕæ+$U \m«÷š?>z¡ÞåA#f×­Ýá{8¹ãpg×ß<°ÂL¯V»æõ_ùÒE=X:½ëˆ6‡¶Žqé¾GÏÈ}œCuÁ ³]ãT)¼½³Í÷pºU«›Ì;>rì3ª}þ‘ è9uzúüOÖž ßõgºIõ`qpŒÃEîÃR- ŠÀ|[¤Á÷pã]''=ñÚego6`b=Íc Ž\(8÷»ƒÛÇ=Ç ¡8¨‹æpg—Žq{ §ýÂ"÷qæìuæn2Uª hPLöŽÑ˯>wÉî-,r¡°Ü{‹þjÔ¿roQÑP÷ƒÜ/8Íù5ó7]ãÆ>ø ºM¢aÛža·-0e×7ìö=x@.Б£ÝÿO/Ò{°à¨‹Ìí!¬³_  ¹_dší›Õè4ÿWà{8ÈÒºíWÝ0CûÆ­÷-gÅÉ¢!ŠÆ]›ìŸf¬ãڀ¢,8Ö-,r¿˜4Ã×<_oý××jæï{8ÑáήGj× ß#‚Ôƒ°tN0½ÇõKç î'й_šÉk>¯Y½¹û…Qºõ »ÍÍæ\Z\äBÜŽw|pÊsIØÀ¡Ó®Øæ{Dõ ΡóƒYZg 7töð="¤‚Ü/Û$D³zš„  =§NÏ[¶ÕÜl>füó{~û{ß#BZÈ…ˆ=óóF3»»¤ºæþG_bvõ Χ³Ä?üøåKþø ’Î!¾G„ä‘ûÑÓ¼]³w»ˆ×û¡‡:ŽM˜´ºªº†¥I"F.DiûŽ}ŸÿÚ\ý…^PâbÜ+Ìu&á óÈûÓ\Ý,2®Ù»æð¬)Œ¤ìÜÕ>rì3:u\}ÓLúÒLJ\ˆŒNþÿã;ËÌDîÓ7þ„KDp1ÔƒèÝë›[t1'U˜XFƒÜ•féš«ëÍÕ¼ý½æ|ªßðY¯døè…M|Tr!¦{ü¥×Lú¤{ü&Ó=½£D)ì 5:·è à 5 ÷㣙¹æçz[«o™£»ïá fÇ»NÎX°ÉÜŽôݾ@³ú8 qxéÕ÷ÿ¯ëþŬ.ýíïÿœnÒèõ J¤ó‰Î*:·h‡ÑyFgß#BEÈý˜h6®9¹¹áW³t ÚñÆýèEv¼h y·sW»i¬__¼õ§t“F‰¨Ñ/:·˜^…¦]¡Î<¾G„2‘ûqàkxÇÓÑ òËýÐþÊaµ|h~¡DtžÑÙ†KrÜ€æÞšsB°ju7®æ¹G=§NOŸ¿qÀàÉæ¦žÉO¾N7iôõ Ê£³ÍÔ¹o˜[•uÒ¹ˆóO¾û¹¦ù6mÛæ¹;ëvÛ¦·{Žƒå¡D%tæÑù‡VÆyDîçËÀ!p{Û:Xø2§È…ÙóÛßßxÇSvQ°¦æÿí{DÈ1êATnç®v»Ô©ÎN:GùúFîçŽæÕš]kŽ­7Nóm4„¬aÛs³ùÐQóø¨0/È…\8r´ûþG_º¤ºÆ|êÂ%"¨õ ’¢3’™©ê¥3_[ŽÜÏͨM×8ͱ5Óö= $‹V¾uÅõŸÜl~ë}Ëiu>r!| ž}Ó¬ÿUU]óà”54õE"¨‘ î=:;UýÌJç+µ|Eîç…fÑšKëÍÒ¼Z³k®¾C¾îìz¤vÝ€Á“õK ÿXÈÈ…mnlýìW7×b}ãî%t“F‚¨‘8£FݻԜ²tîÒÌ÷ˆpä~øìDºªº†‰4r­¹e¿ýXciÝvßÃÁ…‘ aÒ´Ê4cZ…”P"%îY:ñAVhÈýÀiÎl/´Ó\Ú÷p€¬oØ=xä“\ö,r!4Ç»NÚË®.2eáŠm¾G„8Q"U:wý—¿œÊ…î"÷ƒeqhæL#D¦ûDm‹4öÁ_ìmëð="ü'r!(+êßý?ÿš¶ Èõ Òæ6ÂÒ™FX ÷¤¹±fȶQ¿fξG¤âPDZ&Ö›¯ÔYÑ÷ˆ „Ü÷E³\ÍuÍW!šýÒ(p56í»ñާLÝú øN± Yr?ÿó/þ ŒÃ#êAxÇe^û^h~kÖ_ÓŒWó^ßõ´nûÕ7ÍÔ‘ò»—°þffÈ…ÌÌY¼ÙÞ83qÖz¾ ‡_Ôƒ΄:ÚÛ¨užô=¢ø‘ûÓœV3[msÍr5×õ= tGŽvÿøñ J„ªêš “VÓ,äBÜÆz·ýý³ìØõ ÂA›å,‘û™ÑŽ­Ù¬æ´šÙj~ËRk@éZZŽÿ¼Y”sÑÊ·è?–*r!U{Û:¾òw‹Xx ¢DhÜeXuæäûÐÜU3XÍcµ©5§åY <·~hn6×ï|T˜r!%GŽvßÿèK—TטvIË_xÇ÷ˆ€?A=ˆ0­¨×4ÜÐùSgQ¾RI¹Ÿ6ÍZí V³YßÃòÍ|ºrÅõµ|º’r! Wl3ó™ªê𧬡›4D=ˆ`霩3gÕ?OÓÕ÷ˆ¢Bî§Ç^ᦹ+W¸ :ÜÙe¯¾~¤v&‹\H–]aV¿¾zçâ¶ö}¸0êA®ý@§Î¢ætªóªÎ®¾G r? šjŽj;`Ð,HCsËþ[ï[Nw¦Ä‘ IqW˜ôÄk›[}è õ rAçRQÍ:ÇêLë{D¹Gî'ÎvÈ×L•ù@Úìê-Ãn[ðæ;{}'äBåXayD=ˆÑyUgWó›Î·¬×S r?Aš‹jFÊ Ú@Æ”s—laîr¡B¬0‹œ¢Dîè«3-sï ‘û‰p?£Ð¼”Ï(€ìÙkó.2eúüôë(¹P6V˜E®Q"§ìµy:sm^Èý iΩ™§æŸ\à „à½ænó´ŽÇA#f¯ZÝä{8¹D.”fêAä—κ:÷ÚÞ:'ûQžû•ÐlSsNm@Í?5 õ=`Í[îẔÙ_äB¿°Â,¢A=ˆ¼³½ýuN¦·éÈýòh†©y&ßAÁ:ÞurêÜ7øî¾ äBéXa1¡Dt6¶gf¥}'ÈýþrïQÒl“{”€Ù{{/¿v:÷ö–ˆ\(+Ì">Ôƒˆ†¹rCçg®Ü(¹_:ÓÃÐ\DC G¶lÿíý»æõ_ùNèÈ…Þ±Â,bE=ˆÈèülïìÖy›;»/†Ü/‘æv3Í-}@¿±6h‰È…^°!bÔƒˆ’ÎÕ:cÓù¹ä~ŸØ‹€hîì²ßìü`ê+|³sAä±Â,¢G=ˆˆÙ•au&×ùÜ÷pÂBî÷BsEÍí·ÌL8´´ý½Üùu1äÂ9XaA=ˆ¸™;¿t&çίsûäÞ…ªy#w¡ñq;C6lÛã{8!,V˜E¡P¢ÜÎ:ÃÓò ¹!šÒ¥(‚žS§<û&+ǃ\0XaEC=ˆâÐY]çvVŽ3È}—»Š¥f‰\EÁ¡Žc¶ÿؤ'^£ÿ¹À ³(&êAýÜOçü"îGîšjhû‡k~è{D2ÕܲäØgèu¦Ø¹À ³(2êAÎó:Ûü¾€"ç¾eû‡k6Hÿp Èlÿ±á£66íó=?Š™ ¬0 P¢°lß0¥@û†3÷-Í÷4ë£8K)0cÁ&Û¬­ýcß#ÊZsf3Ôƒ(<ÿíºBÊßÃÉNsßÐÏö×ܯhŸè½nМ" uÝ`¡rf‹z8ã\7¨t(Èuƒ…Ê}Có:ûáa¯P { Á ³_\÷¾ïád¤ ¹À ³À9¨C‰ \0}E”ÑDArßÒŒÎô*òÍAúeÕê¦Ï|y–¹Å¸ýÇ¢ÏV˜.ˆzp)”:(”Jˆ×ˆ>÷-ÍâLó@Íëè _L bÓlüc/ÇÝ‚8î\`…Yàb¨ó))lj(A|'q羡™›æo¦8‹‹(ÛÞ¶Ž»&¬Š¾ÿX¬¹À ³@ï¨ R^(5LjåH|W•Äšû†Û?\³8ú‡¨\ö=¦ÿدÏò ¦ørfRP½Pv(AÌ]ç‘}Á_î[š§i¶fú‡Çúõ._~¶ªÑÜ€_ÿ±ÈrfQ}RŽ˜ÐbêJYfkš³ù€8Ùþc‘5¨Œ&XaèêA Dʳjm *£É}#Öé€`ýúÃßÙ ­|Ë÷pA.°Â,PêA tJ»€G¹ã{Då‹ ÷-Û?\s3ÍÐ|@Øþc\ žë\`…Y lÔƒ@)e”5öãGeï•#×¹oÙöôà‹ÛÀjÌøçóÛÀ*¿¹À ³@%¨òØÛ”AJ"ßÃé·ü澡—íqûwyaúåz›<æ+Ì•£*¡ôQ™öeJ%ßÃé‡<æ¾á.MÿpA±åÉÕ7ÍÌ]y’¯\`…Y )Ôƒ@…ÜòDÙ”—ò$_¹oi~eû‡ç«Põ>Èãå‹yÉV˜’E=$By¤TÊÑå‹yÉ}˽@—þáç¶7÷£sÑÞ$¹À ³@â¨Ùö&J«ÀÛ›ä"÷ Í£4›Ê{¤Ó—»üA৯Àsf”P‰SNÙå”_¾‡saç¾á~À®9U.>`€säeyô`sfTQi?¼‚Í}K³&Írw\ÐòÞ±·?ïÜÕî{8f.°Â,6êA =J.{q‹Í÷pþD˜¹oh¦dôiå{8 Û¬ªº&ÀöÈ¡å+ÌÙ Ò¦S–…vó{h¹o˜¼4S¢8€Xµ´´Ë§Î[¶µçÔiß#úƒprf,Qp›c+ãBhŽNîši^d7‘æK¾G)jضçºoÍê˯rfìQ™1_~²xn¹oÙ¯P5; ç+THUÏ©Óöæ¸ÛÇ=çýs0ï¹À ³€Ôƒ@Æ”qöæ8eŸ¯axÏ}CóÍ‚ì-–á\7Ù8ÜÙõðôµUÕ5ÞûyÌV˜<¢¼PÞ)õ<6Ïô^Ú¬ši.` VÈŒ]\ïªf,­Ûîe ^rfï¨_ÜÅõ”†/®ç·ÔlGsžÀ—h€ŒéœlÖÙñÒ,ã\`…Y Ôƒ€_J@å`öúªmÿpÍy¼_­ ¡qû)²ì?–e.°Â,êA öÖ åc6·Nd_jVc*_ú‡@ï:úÀÄzÛ,› ³É…æ–ý¬0 …z‡’ѶVÛ¹«=ÕçʲÔLÆö× Góœ žòÎö4bvýÇÒÎV˜ÂD=Å.½¤ÄLué¥ÌêAÍaLçú‡@ìYtøè…©žEÓË…žS§<û&+Ìa¢¤¬TbšK+ç-ÛšÆ* Ôƒš·ØþáWÖ€¼3­WìU)µ^I)Xaõ ,å¦ÒSG¨’Tyšìƒ§Zj®bï|¡8$ÂÞ…=pè´9‹7'~vâ¹ÐÒzpô÷V°Â,8êA dJOe¨’TÇéíãžKð›”êAÍO4K±ýóìŒEÐØ´ÏviN¶ÿX‚¹À ³@ŽPáS’*O•ªÊV%l"ÁšF=hû‡k®BÿpHÏÒºí¦ÿØ7¿³,©U\“Ê;6V˜rzÈ ¥ª²UìU7ÌPÚVøhÉÖƒ›æ$¦xåcôéÈÑîGg¾j¾ƒK¤ÿXå¹°eûoXaÈêA _”°ö;¸JnÌOª´ýÃ5'ÑÌ„þá%Û¬ò{ô*ÉV˜ò‹zÈå¬ÒÖ4î.û½ÊëA÷ÞFú‡€G¯on1=<õ»þ\Þƒ”— Ç»NNû+ÌùE=ä”2×öðœôÄkýíáYa=˜ÈÜ”Ê?£+#Xaˆõ kÊ_¥pkü•]&xm Y•\Ã߯\PúÜ<æiV˜"@=DÀ~B;|ôÂ?¡-£L¼w åõø*1Xaˆ õ %²rÙÞÁ¡¼îýß÷·L£·9 =ý]¨Ï\0w¯³Â,êA &¶Ã›òzÎâͽtx+½Loíc@ª”Ê‚+¸ÞsfXQñ)¥‚+¥,½º«Ä+`û‹jž@QˆRÝÚ[aöœõç-ÛjZ±þ 7êA zvýA%»ò½÷õ5C`ýAˆOŸ+ÌžŸ ¦ÿXUuYŠèÈÑî Ç #Ôƒ@Ä”ÝfÑáªóú‡_°44O0ŸkæpΧǀÜÑÉ¿”f/– ;wµ›Bòê›f.áôÇ SÔƒ@¬”ÚÊnSÖ)ÍÏù¿½ÔƒgÎÞ]b IswÉCGÓ/ aýZa¶÷\¨ßðÁà‘Oš Mé?Ä„zˆ’Ú\ö©ìV‚_ðßôžû†í>§¹„fšW¤3^@òÖ7ì6\‰+Ìö™ n#¥ƒmD ר˜(mÿðÞÛ”RšEh.aªËRþ=À¯æ–ý·Þ·\çí«n˜±´n{‰?Ub.(hÆýèÅR‚@.Pqp?¶UR÷ù±méõ ¡…æúÍ14Ó¨x¼€äîìz¤v]UuÍ€Á“õ‡~-+߯\°¢ 1ûb¢ÈêA ÊbÛ?¼ÄÛ:ú[žùã4Cs Í4ž¾¶_Ó @ªÜfo÷\+D”‘ «V7ÙÕé?äõ k¶¸¹_+D”‘û†æšièg5ëÐÜì^ðÈ^ØoV˜-ïAÊËÛÈZ?{N#k¹@=ä”YÊöïï²Pe׃†æšuè®ûÖüRÚÒ°ç·¿?…ÙòT’ {Û:ì0è?ä õ ;nÿpåoïýÃ/¦ÂzðÌÙk“4÷°Ã(ãÚ$@ÙzYa¶<•çB"_SÈõ /ö‹¹û‡_Lå¹o˜¯)5)ïkJ@VÔ¿ÛË ³åI*ìmŒ·Þ·ü×þ.‘±Hõ JUÓ?ÜܸWá£%•û†f#ö6Æå/¼“ÈcÎWÊ ³åI0lÿ±2ÚœÈõ ¾4‚5ÙzÐÐÌĬ}\z›S@‰Út~÷‡/¤·ð_â¹`—A¼âúÚŸ­jLêa$‹zœ2Ô^x“àÂiÔƒgþtÄ{ªësD@Ÿú»ÂlyRÊ…õ »‡|}nå·9H õ ,{c¾’4ñóSÊ}CsÍXÒûŠ£~ÃÕ·ÌÉàÒ‹ôrÁmƒvׄUåµAêA @ÊJ%fª»S­ {“Ë ³“½ÉŠ ìfË“v.ê86þ±—Ë^& @J¨ ¸ û*7Ó[Ø7ƒzÐÐÆ6ÁÓÜ&í§€xiÝœM.Ø"÷3_ž•A‘  OÔƒ@8”ŒÊÇlJ§ÌêÁ3Zä&²HĪçÔéÊW˜-O–¹ðâº÷˜Mÿ1 Ôƒ@ÜK+•’_Ãðžû†¶†½Dêg«ý2“ê ³å !Lÿ±ƒ'WU×Ð Èõ Û?\Iç}é¥rßÒ\H3"_- K{Û:Æ>ø‹›k…“ -­mÿ±ϾÙsê´ï1£2 ,S¢ÙþáJ:ß# (÷ ͈l‹õ»&¬Ê²Å:d#³fËZ.4lÛcº­Ò Hõ 6Û?\¿‡óåWh¹ohv¤9’–åÌU«›ÌŠ{¬0[žs¡çÔiÛlô÷V„ði*êA =J.å—íÔ/æ¾¥™’¹Åò3_ž¥”ïá@EÞÞÙ–ñ ³å 6wvý`ê+æn ú‰£Ò`›g*¿”b†W°¹oiÖd>K÷Õ‚*äk…Ùòž ¶ÿ˜ßnl@|¨ÄÙŽÙ!ô¿˜ÀsßÐÜÉ.Ѩ9•fV¾G%é>Ñ3kQƒ¯fË“‹\Xóú¯ÌjMÃn[°eûo|ˆõ e“é®´RfùNor‘û†æQšMÙØÃéÅä}…Ùòä%ÜþcJú¢¡<25KhýÃ/&/¹oiNenÀÑ,Ks-ßÀ hnÙÿ»—äôšÆ|傽÷²!S¦Î}#ðkqQR)‰Lÿð]Ó˜¯Ü·ìµ¸#Ç>쵸 (¨fË“Ç\x¯ù£[îZlzõÐ (õ P Û?\yfÿð‹Écîf/Ó«G³¯ÐðP4fM„ V˜-O~sÁfñÍcžÎW! Ê£ÄQîä÷3Éü澡—æ]æÝϾÔZŠ#ÌfË“ë\8Þurúü¹»Võ Ð_î= JŸœÞ³ëÜ·4û²31ÍÊ|@ØO¥\a¶<䂽—àÐi¹¸—õ P:ÓÓÌöÏuO³rß0Wji>¦—3ú{+ò{¥€¼8r´;ðfËM.¼ùÎ^Ûë›þc@Ÿ¨ÙþáJeïáT*šÜ74Ó¬ÌtrÐ<-šé€Ðäb…ÙòD– ¿S@²¨>)G”&9í~1‘å¾å; î·N¯0[žørÁý&w¤Õ|T\õ Ð e‡í®LÉcÿð‹‰/÷-ÍÓì7¹[¶ÿÆ÷pä^îV˜-O¬¹ßž@²¨ rïJËuÿð‹‰5÷ s§§iÿž÷;=xT¨®•qç‚Û vãÖ}õ p>%Eô]+ãÎ}Ãí;uî9í À—ü®0[žès!š•"dQ.wU»¸¯*‰>÷-Íâ4—ËïJ‘²WÌóFAráPÇ1{'ÈßÓ @y¨C‰ \°w+/|(]É}Ë~Î󘧋ð9?€òıÂly • Í-û¿q÷úg¨³lWj¥CAºR*÷BÝ ¿¸ï¸€¹`W’ºñާ›öùàõ Nç¥@W­-`î¶OàÀ¡Ó"î _ܾĬ0[žbæ‚R`Ö¢%Ba?¨QXn] ,(Z]PÌÜ·ÜuÄ õ9€s°n©Uä\°× kJ0cÁ¦B]' P¢€tž×ÙÞ|XØë‹œû–½NX³Á‚\' À:ÜÙõƒ©¯D¹ÂlyÈ…·w¶ ½Ðôª[»Ã÷p€ŒP¢h^\÷¾é+¢s¾Îü¾‡ã ¹oh¨y í#¤ù¡ïH]ô+Ì–‡\0lÿ±‘cŸ¡ÿŠ€zÅ¡³ºÎíEë~1ä¾Ë®3¢ùaÜëŒhض'úfËC.XGŽvOzâ5Û,ú–ã(8êAÎäã{Ùôמ‹‚Îû¢™¡%nÜú¡ïáHXqV˜-¹p޽mcü…Ùaè?†ˆQ"nnÿpÕéf‘ûd®"3; W‘Ñ0_÷g…Ùò Ô°mí?Æʈõ "¦óö¯Ï5ýÃu>÷=œ°û½Ð\Q3FÓeâÇoà e × ¸ÂlyÈ…^h/27œÒ ñ¡D”lÿp½ Þ?übÈý>i/Òì‘.ô@~56í3í"YY¦äBïwvÙþcúýÇ êADÆž®MÿpN×Cî—HsH³Jõw<¥¹¥ïá(I[ûÇE^a¶<äB)ZZÚœ¹ q DLlÿp«¹ó«wä~é4“Ô|Ò,X©&w¡!c…Ù²‘ ¥³ýǸ! DìíÞô/¹ß_šUjni¾nÐlSsNß#p.V˜­¹Ð/=§NÛ†ucÆ?¿ç·¿÷=" LԃȻ½m¶¸ÎÌ\¹Q"r¿<šašÛ‘4ç¬[»Ã÷pü+ÌVŽ\(ƒí?Æ‚VÈ/êAä—].–þáe ÷+¡Ù¦ùBóOÍB}(4V˜M ¹P6ûqÄÕ7Í\Qÿ®ïáýC=ˆœÒ„ÜôgB^r¿BöãsGÙc…Ùd‘ ªßðAõ-sÌåÊôCŽP"wlÿpué^6r?šjj/W¦‡!V˜M¹P9·ÑwøíŒ ÔƒÈWÇýèEz$‚ÜOmg4xä“´3ÒÆ ³)!’¢éŠŠA¦+È êAä¸%ŽÜOœæ¥v¹ÍW}ˆ+̦Š\H—3!/¨>» 8ä'ˆÜOƒ¬VU×0Y’Å ³i#Ò°¢þ]Ú pÔƒÙÎ]í4ìJ ¹ŸÍTíÅlšÁ² P!V˜Í¹Ú¡#pÔƒ ú¤ÜO›f­š»Òì¨+Ìf‰\HÕžßþža¢Dht†œ·l«é®3§ÎŸ¾G'r?Ú™m3|vf _øJ%{äBø²¢DPøJ%3ä~fø²è/V˜õ‚\ÈFÏ©ÓÜ ‹ P":Þ>î9n¹Ê ¹Ÿ1ÍiíͰšëú(Z2zD.dÉô«ª®¡Y.¼£„w´dô‚Ü÷Bó[Íri– œf½#²Çbšõ üÒÙïªf°d[öÈ}_ÜÅ45ûe1M€fA.ø²¾a·YW‹›eàõ |±·TëÈ-ÕÙ#÷ýÒŒWó^¾ Xa6ä‚GÝ'zlÿ±±þbo[‡ï¡@¨‘=åîy¨Î¶\Ö9Ð÷ˆŠˆÜ½UJóan•BѰÂlhÈïu{`b½Þú!KÔƒÈÒñ®“¦¸ö:ñèî¹Í„m+EÍ}HMwÃD.Âö4b6ýÇêAdFç4Ùèr?(,µ†‚`…Ù‘ A©[»ÃÌš†^øöÎ6ßÃĄ‘Uæ¢8Ùt~ó=|‚ÜæÆš!›K©5gfÕD†fG.„ÆmµôÀÄzZ-!%ÔƒH•Î]æJxšf„†Ü–mµ¤™3­–V˜Ír!L¶ë‚¦R³5Ðu‰£DJt¾š³x³ùPKç1:e…†Ü™fËš3kæ¬÷H³hÍ¥}(“»ÂìÃÓײÂlÈÈ…56í»ñާè?†4P" ¶¸Î]ô¹>3‘Ö,Zsiý‰4r‡fó…\ŸŽ)Óìw/á˜BR¨‘,¾ùe¦¸ÎZ¾‡ƒ‹"÷óBÇ”æÒz³4¯æ˜B^¸+ÌržÉ r!ŽíþñãÌwîôC"¨‘Û?\ç(©è8r?_Ö7ì6ß¹Óˆc…Ùü"r¤¥õ í?Æ=¹¨õ *çÞ뤳÷:幟;šWkvmõsO.tÎ ³õ="ô¹;·~hzöÒ • D…^ßÜbÏE:/ùJEîçÔ¡Žc¦g¯YÈ›ž½+ÌF€\È#>“Gå¨Q6{­ýÃóˆÜÏ5Í·5ë6kzjî{8(4w…YöÆ\#òëpg—½gç‘Úuܳƒ~¡Dtžytæ«ö^fÚæ¹ºµ;Ì72šó ²gW˜½lÈV˜¹w¶ÿ=ýÐ/Ôƒè/Ûë˜þá¹FîÇA3pÍÃÍBŸš™k~î{D(V˜¹»æ×°Û¼ùÎ^ßÃAP¢tMûlÿpÖBÍ;r?&¶££æçš¥ÓÑ©rg›¬0r!¦ÿŸØ DÔƒ(…;Û¤xÈýøhf~ãOñ‰ Òà ³q#"ã^Ñ=}þF®èÆÅP¢wæj4Û?œ«Ñ¢AîÇÊ^Ñ­y;Wt#)î ³Î|•nQ"¢ô^óG7yšŽOèõ zaû‡ëLB·ŠÈûÓ\ýÇo°Ÿ4“÷="äÝ싃\ˆ˜ÑÝr×bft8õ .ˆnöÑ#÷£ÇŠ0¨œ»Â¬þì{8H¹·ã]'§Î}ƒ+¾p>êAœãÀ¡£öjs7¸Ú8¢ÿXô¨‹`ù ï˜~Â:®é' ƒÜÇùTLû†½›Lµƒï!1¬0‹>‘ 8Ÿí?6|ôBúÅŠz0n:ruüÒ?ç#÷q1¶Û¤jUt›Œ€»Â,m"p1ä.H)0cÁ&Û¬­ýcß#B¨cÕ~ Óö×QÌŒç ÷Ñ»-ÛcW£c?É/»âäU7ÌàŠ/ôŽ\@/lÿ13±äjó˜PÆÇô7ãÐ?C ÌÕæª)¸Ú<_XaýE. Oö³A#f¿¸î}ßÃA2¨#S¿áÛ?œË¼Ñ r%R¡jB5…* Õ”ásW˜½}ÜstŒG‰È”hÕê¦Ï|yýÇ¢A= Û?\G(ýÃÑ'rý¢šbô÷VhŸQ•¡ZƒÕj‚Å ³(¹€ÒÙÆõÚgÆ?ö2ësz0f™Û?œebP reP}¡*C{Ž*Ú’„Æ]avÞ²­Ôìè/rýµ·­ã® «è?–wÔƒ¹æö×ñHÿp”ŽÜGyTe,xöMsÚQõÁµˆ!`…Y$‚\@y¶í1ýdž|}.—%äõ`~ÙêéŽ2û¨„¹,AÕ—%xç®0»sW»ïá ÇÈTâg«ÍmËôËêÁ<úõ‡¿3ýÃuÜéèó=ä¹Ê)ñÍm˪GT•øNá°Â,’E. B¶ÿmó…z0_8ÐrIQ%bÖ:§­qfÎYa–…Àr‰p¿¶X´ò-ßÃAߨsÄý"^Çšïá ßÈ}$¨ûD]öTu Ëž¦Ç]avÜ^dS#AäÄmM9B=˜ öF]ú‡#)ä>§Úä‰õ|i•V˜EªÈ$Ëm{8füó´= õ`àhä‹”ûH‰½©M• 7µ%Å®0{õM3Ya)!–E õ`°Ü…>éŽÄ‘ûH•j–Ï|y–iz©ZÆ÷prŒ©2C. =|¨2êÁ01•BÚÈ}¤µ*Ä¥Vȹ€´qÑ{˜¨CÃ¥VȹlpÑ{yhÅ€ì‘ ÈM±D=Z1 Kä>²DS¬ÒѪ¾ È ‹æ…z0´jGöÈ}dEszÇ ³ð‹\@ÆìEqƒG>ÉEqQzÇRÎð‚܇”<ãËÍ-û}ED.À‹å/¼sõM3MÓŒ»Ú}§ˆ¨=RâÛVK:|ÅBîÃ#÷’HÕA¾‡ã™½˜vÈ×çr1-<"à‹í?VU]Cÿ±ìQzaú‡kŸ§8|!÷á-Sh¶ƒ  ð«¥õà˜ñÏ›Sâ¼e[{Nö=¢¢ ̘öíϾiû‡kÏ÷="¹¸K*¨2*Î’ îbã{™Ãr!hضçºoͧÿX–¨³d? ×~^ÌÃrá(Ú’ë¬0‹0‘ DϩӋV¾en©¾}Üs|{’6êÁlhOý½¶8߀Ã;r¡Qedn©V­¤ŠÉ÷pRá®0ûâº÷}øä‚r¸³ëáék«ªkè?–6êÁ´ÙfzÚŸµW³3#ä>ÂT¿áÕJñµ\f…Y„\@€š[ö›þcWÝ0ciÝvßÉõ`ª´ßšºôGhÈ}Kµ’]’U5TK²þ`ê+f…Ù¶ö}¸0rÁÒniVg+lÿ±TQ¦dËöߘþáÚ{9µ"@ä>§2PÕ“öRUR¾Ç’€CÇbúºQ"2·ÿ˜Ò¡8ýÇ2@=˜8íŸfCÿp„ŒÜG.¨†¢÷& rá;p訹öÞôãÚûDP&HûäÔ¹o˜þáÚWµÇúpQä>ÀE. /lÿ±A#fÇÚ,KÔƒIÑÞhz Ð?¹@î\äòÅν‡^Èܻԃ•Óxó˜§ùŒùBî\ärÇô³×æÅÑ,{Ôƒ•°ýõÒ?ùBî\ärÊöî8tڜśéÝÑ_Ôƒå1=ŽL;tz!È}€‹\@®56í³½ýë7|à{8yB=Xícv ú‡#§È}€‹\@ìÚßßüÎ2Öþ.õ`¿h¿ºõ¾åÚbÚÓ´¿ùP>rà"‡#G»ùê€Á“«ªk&LZÍ¢E}¢,ÑáÎ.íQÚ¯´wiÓžæ{D@EÈ}€‹\@LZZŽÿ¼vé+®¯]´ò­žS§}(\Ôƒ}Òþ£½Hû’6”ö+í]¾G$€Ü¸ÈÄçõÍ-CGÍÓŽ­ß7nýÐ÷pE=Ø;í9v/Òå{8@bÈ}€‹\@”øf§OÔƒ÷̈¹p‘ ˆØ¡Žcöί?¾;¿\ÔƒçÓ¢ý„»P7rà"½æ–ýßüÎ2:Cžƒzðt©EAû¹€‚°+ÇÝxÇS¬w†zСýA{«X¢ È}€‹\@qtŸè™³xóÀ¡Ó´ÏßóPÝÞ¶ß#ò‰zP´hOÐvÐ^¡}C{ˆï©#÷.rEÓ~ ó‰õ¦˜±`Óñ®“¾GäGÁëA½ïz÷͇Ú´Wørà"PLï54|ôBíüƒFÌ®[»Ã÷p<(r=¨w\ï»^¾öí ¾‡dŠÜ¸ÈÙªÕM¦.9ö™¢ÕŬõ.ë½6ŸèÝ÷=Àrà"PpÇ»NNzâµË†L1× g‰¢ÕƒzgÍuÂz¯õŽö:a€Ü¸ÈàŒÓWäòk§Ï]²¥}EŠSêÝÔ{ªw–>BÀrð§ÈÀjضgØm ̺ëvûNº Rê}4ëŒèÕûë{8€ä>ÀE.çXZ·ýªf踸õ¾å¯K}=¨÷Nï ^ã××ê=õ= ä>ÀE.ç;ÜÙõHíºƒ'WU×èúOß#J^Äõ yûôÞéŒõíÊFî\äp1-­o÷œù‚iÑÊ·zNö=¢$EYê=Ò;¥÷Ë|½«wÐ÷ˆ€àû¹ôn}Ãî¡£æÅwZ|õ ½ýSïWô·e#÷.rèSÏ©Óó–m5 *ÇŒ~Ïoï{D ˆ©Ô;¢÷Ŷ‡ì›\ Yä>ÀE.%:Ôql¤ÕUÕ5f»#G»}¨"qÔƒzÌò‘z_ôîgùH lä>ÀE.ý²sWûȱÏ訹ú¦™+êßõ=œòEPjûë]ЫÐ;ò^óG¾‡ä¹p‘ @ê7|`Vµ>zacÓ>ßÃ)G®ëAmsmy¿ú–9z/|Èrà"€òï:9cÁ¦C§éúî_h?Ðé{Dý“ÓzPÛY[[#×–×ö×»à{D@Îû¹TBåɸ½˜Çò$wõ`Þ p ä>ÀE.•Ëãå‹ùªµUµms}.rà"€¤¬ZÝ”£ö&y©µ%ãhà‚Ü¸È A9Zþ üz0²>€@û¹$no[GøË£‡\j‹i»iëi„Ú’{~û{ß#âAî\ä’†m{†Ý¶@Ç×ÐQóÖ7ìö=œs[j[i‹ilÚzÚ†¾‡ĆÜ¸È U‹V¾uÅõµ:Ên½oyKëAßÃùOÖƒÚ>ÚJ•¶˜¶[˜ß«yGî\ä¶Ã]Ô®0x²~éúOß#úDPõ ÝDUÕ5ál" Jä>ÀE.ÙhnÙo¿üZZ·Ý÷pªµ5ìW¨ÚJ¾‡DŽÜ¸È KëvùúÜnŽ ¡´·Xùd€·XQ"÷.rÈX÷‰ÛHéYÒ®5r_OqãOé¥ô,ú‹Ü¸È LKë¶_}ÓLžß¸{I«´§Wj´³\ã׫HüñT‚Ü¸È Xfi†ƒ'WU×L˜´:Ù¥Ò¨5BS£Õ˜üø†ìÑÐ'rà"€Àµ´3þy³tû¢•oõœ:ÈÃ&[jT›F¨ÇÔh5æD@âÈ}€‹\r¡aÛž¡£æéhÕïëvWþ€ ÖƒÛÆ­Vþ€ÒCî\äæ;¸+®¯Mä;¸DêAûÝ¥F•àw—ÒCî\ä/‡;»~0õsÞ#µëʾG¯ÂzPÏ«g·÷6jTå=€Œ‘û¹äQsËþ[ï[^IÏJêAÛûTcH£÷)€ôû¹äך×eÖøvÛ‚7ßÙÛ¯Ÿ-¯Ô³è¹Ò^@zÈ}€‹\r­ûDÏÜ%[LcÏ{ªÛÛÖQâö·Ô#ëñõ#‡NÓ3êyË2ŸÈ}€‹\"Ð~ ó‰õ:–/2eúüÇ»Nöù#¥×ƒz4=¦Yÿ^Ï¢çJbÈü ÷.rˆÆ{ÍÝr×bуFÌ^µº©÷\b=¨ÇÑ£é_Þ<æi=~rƒà¹p‘ @dl§Ú°— ®Ïz°_Õ%€¼ ÷.rˆO)WxöRºWŸNûF)WŸÈ rà"€XÙ0—_;ýü0¬ËîN /È}€‹\âæ®±æõ_Ù¿?¿tW¯Ø²ý7> uä>ÀE.Epþ òn=Xùêöò‚ܸȠ Ží~¤vÝ€Á“«ªk~0õ•~|½Ž}ý®?ëoô÷ú¿‡;»|@ºÈ}€‹\ ¥¥õà˜ñÏ›^1ö÷Ñß[¡¿÷=4Y ÷.r( 9‹7_zÍ$ûú]ö=Ù!÷.r(ûýà§¾0ù“ßÏ~?¨¿áûA  È}€‹\ âÈÑîIO¼fîœ0iõÄYŸÜ?¨ßõgsÿ þ¯þïaH¹p‘ @Øþ¢#Ç>sÁþ¢ß¸{ ýE" ÷.rˆ[cӾᣚõë7|`ÿþüõõÍúƒú÷ú)ƒ:rà"€Xµµ|ÏCu:À6cÁ¦î=îÿ=¿ý›Y‹ôïõ¿ô³z„l‡ uä>ÀE.ñ9ÞuR )ë˜Xß~ óüsÁzÐп×OÙBR–þd„Ü¸È 2/®{ЈÙ}^öÙK=h¼½³Í\hªGÓc¦3XY#÷.rˆÆ{ÍûŒŽèÏ|yÖªÕM½ÿã>ëACcªK=²?¹ÁðƒÜ¸È ‡:ŽìeË— ™Râ²%Öƒgþ¸PÅegW*Գ蹒2?È}€‹\r­ûDÏÜ%[.¿vºä»&¬ÚÛÖQâ–^zä±þB?¢çÒ3žÓ@^û¹ä×ú†ÝC¾>W‡ð°Û4lÛÓ¯Ÿío=hèYô\úA=¯ž½_? ä>ÀE.yÔܲÿÖû–ëà½âúÚŸ­j,ãÊ«¥uÛõ¼úqÁ¬n /È}€‹\òåpg×#µë ž¬_úƒþ³¼Ç©¤Lp2Fî\ä#‹V¾e¿˜ûõ‡¿«ä¡*¬–ÖƒökJ­’‡ rà"€\°7î 5/‘÷© G£*ï6F#÷.rÜÞ¶Ž1ãŸO¼±g‚õ ôœ:mÛœj´¥·91rà"€`¹ ÿM˜´:Ù…ÿ’­ P㬪®)}D#÷.rÓªÕMWß4S‡çȱϼ×üQâŸF=hh´³\ã׫HüñT‚Ü¸È 4Mû†^¨sЈÙõ>HéYÒ« ¼ú–9z ½½¢”ž@‘û¹„£ý@總¨CràÐi3l:Þu2½çJ»_¯B¯EO¤×¥W—Þs(¹p‘ @ÜÒ鞇ê2(2¨ ½–ïþð…lŠ\}"÷.rð®~ÃG>™ñ¥•™Õƒ†½V¯4½‹`ô‰Ü¸ÈÀ£»Úmë•å/¼“åSg\+êßµMrôÚ³|j¹p‘ €Þ—fðRžqÑÐkO| }"÷.rÈXÏ©Óó–mµK··´ô2 _õ ±ç·¿×k×´´5´M¼ ( rà"€,­oØ=tÔ<t×}k~ö=Gâ·4´†Ý¶@ÃÐ6Ñ–ñ8 8È}€‹\²ÑÒzðöqÏép»âúÚE+ßòþXõà™³ß–jkh›h0Ú>¾¾-ŠƒÜ¸È m‡;»©]7`ðäªêš‡§¯ÕúÑ'© ³‰´}´•ô‡@6%rà"€T-­Û~Õ 3t”Ýzßòæ–ý¾‡óŸ‚ª mm%J[LÛÍ÷p€8‘û¹¤ÄÞ7xä“bÖƒÆú†Ýf5Fm=¿·XQ"÷.rHÜÞ¶Ž{ª3Í3ç.ÙÒ}¢Ç÷ˆ. ØzP´Å´ÝL VmImOß#âAî\ä ã]'Íâz:¬˜XàÐQß#º¨ëAãPÇ1mC Ò,Ѩmë{D@ È}€‹\’²juÓ ³u@ûÌ{ÍùN¯ mImO UÛV[Ø÷p€Ü#÷.r¨œj–á£æ«fÉK=hÔ­Ýajmmçðkm dä>ÀE.•h?Ði¯iœ±`SŽ®iÌW=xæìµ¸Ú‡N3×âjËûKä>ÀE.åé>Ñ3gñfSžä±çIîêAÃöêÑ–×ö³W2rà"€2ÔoøÀ®‰ÐØ´Ï÷pÊ‘ÓzÐÐ6¿ñާÌZz/|Èrà"€~inÙÿÍï,ÓQsõM3s½fz®ëACÛ_ï‚^…Þ½/¾‡ä¹p‘ @‰u›0iuUuÍ€Á“ùꑣݾGT‘êAÑ»ðãÇ7èÑû¢wGï‘ï¡#÷.rèSϩӋV¾uÅõµ:XÆŒ¾¥õ ï% ŽzÐÐ;¢÷E/Gï‘Þ)½_¾G„‹Ü¸È w¯on:jžý®?ûNbbª[?Œò’Eî\äp1që_=x&Òord‘û¹œïÈÑîGg¾÷]iQÖƒÆáή˜îô’Eî\äpŽ‚t­Œ¸4ôÞÝzßò:ÁÉ"÷.r°›ö »mAAVµ‹¾4"X)H¹p‘ €ìmë¸ç¡: ‡N›³xs÷‰ß#J]AêAÑ»©÷Tï¬^¯Þe½×¾GøDî\ä îx×É 6]6dŠ„&Ö·èô=¢Œ§4ôÎêýÕKÖ{­w\ï»ï~û¹€"[µºiЈÙ:†^ø^óG¾‡“©¢Õƒ†Þe½×zázßõîûà¹p‘ (&Õ#Ç>S亠˜õ a?Ð>P´Ïrà"P4µ× NzâµÂ^7XäzðÌÙë„õîÛ넵Wørà"PÝ'zæ.ÙrùµÓé+r¦ðõ aûi¯Ð¾Q„>B¹p‘ (íäv݆m{|Ç?êAKûƒ]g„“!¢Gî\ä¢g×%¿ê†¬KnQžCû†ömí-Úg|H ¹p‘ ˆØáή‡§¯­ª®0xò#µëôŸ¾GêÁóiÑ~¢½EûŒövD‰Ü¸ÈD©çÔéE+ߺâúZíÞ·{®¥õ ï‡zðb´·hŸÑÆÑþ£½Hû’ïI"÷.rñiضçºoÍ׎=tÔ¼õ »}'PÔƒ½Óž£ýG›Hû7œ"&ä>ÀE. &-­ÇŒÞ´‹œ·l+ßìô‚z°OÚ´™†´Ú¯ø–q ÷.rq8r´Û,'WU]3aÒêCÇ|(tÔƒ%Ò¾¤=Jû•Y°R{šï!÷.rXþÂ;Wß4S{òȱÏìÜÕî{8ù@=Ø/Ú¯´wi‹iOÓþæ{8@ùÈ}€‹\@®56í>z¡Y9®~þ‡“'ÔƒeÐ>fV±Ô^§}Ï÷p€rû¹€œj?ÐyÏCuÚ{6cÁ¦ã]'}(g¨Ë£=Mû›ö:m=íÚ}èrà";î„|Ü^dB^êÁJh¯Ó¾ÇÇÈ#rà"/õ>4b6ìUŽz°röreí“\®Œ¼ ÷.ryñ^óG¶¡ÇªÕM¾‡“{ÔƒIÑÞhÛi/õ= ä>Àu¸³ëímúÝ÷@€‹2 ÿ5¡á‚¨d—;Ñ&e¹ŽÜyÑ}¢gî’-vAð½m¾GêÁÄiÿÔ^ª­ª=Vû­ö^ß#òj}Ãî¡£æiv=ì¶ ÛöøNl¨S¢}U{¬¶­ö^íþ‡ä̯?üÝ­÷-׌úŠëk­|Ë÷pâD=˜*í·Ú{µ…µ'kö= wv=R»nÀàÉú¥?p‡Kz¨ÓÆÎ ”îg«íW*Í-û}'rÔƒÙОl¿ìÖî{8@pì-WC¾>—[®²A=˜%íÕÚ·¹pímë¸kÂ*Z2fz0cn³\íó4Ë@‘¹K¶ìe–lËõ Úϵ·³˜&ŠlÕê¦Ï|y–fÅ#Ç>ó^óG¾‡SDÔƒiŸ×ž¯í¯£@Ç‚ïáilÚ7|ôBÍ„˜ýâº÷}§¸¨½Óþ¯£@¾‡¤¨ý@çë5û8tÚŒ›Žwô=¢B£ Ž :"ô^èèÐ1â{D@ºOôØIï=Õµµì{D  ˆŽö£º* õ><òI.Š õ`hì¥Ô:^tÔøP‘æ–ý¦iÆÕ7Í\Z·Ý÷pð'¨ä#EÇ‹iµ¤#È÷p€~;Ôql¤ÕUÕ5O¦©~˜¨ƒe–bѱ£#HÇK± /zN^ðì›fÑí1ãŸoi=è{D¸0êÁÀéØÑ¤÷HG“Ž)Y¾Gôf}Ãî¡£æi«ß¶íñ=ô†z0tÙcJÇ—ïáÐÒzpô÷VhÖzÅõµ‹V¾Åwá£Ì M:¦tdéýÒQÆwîÇáήGj×™{~0õý§ï¡$Ôƒù¢#KÇ—¹'WG¼³½o½o9½ó…z0t”éX£g/üÚ²ý7Ãn[`ÖJ[óú¯|ýF=˜_:âÌšž:u$ú do[Ç=Õ™¶‡s—lé>Ñã{D(õ`®é¸ÓÑgùêxÔQé{DÀÿÏÞýÇX]ßùâÿßÄ?¾ 1!鄤±»¹Ða`°ÁÚ[®7Ü–»«©á†˜RÙ-ß~±¤´½vÍ®iÅ@lmKh¨´«­»E²Ü6³Üµ,të:©±‚íB]¸]HaY!ÈÂÂŽÈ£÷ûÂco3ó>ç¼2Lß3œ÷ûùzÎù|€wzèÜCk~vCïƒ1‚.~ ÿÈÑÁÚ+âêéƒ ö`ìÄøsŒ]{3vhíЙ6nÞ5iö£1yÞ~÷÷vî9\{9\+}°cÄ~Œ]š±CcŸÖ^%¦ÍÍÿ®i³Ã胦ùŒMìVÏØpíÊW£=üíg¼­“èƒ'vhìS¯èà5®V1¡o¥«Ut*}°S5¯øûן¸RýÛv7¯fÿ‹_¬½F…>ØÙbç6ï;ºörhîv‡>˜AìâØËñû:vwíåТN-]¾y\÷²ñ=+î_µåÕSgj¯ˆÑ¥&{9vtìëØÝ±Çc§×^-døõ7ÖoØ>qÖªhó—<µïÀ±Ú+b,胩ľŽÝâ±Óc¿Ç®¯½"ê{æùßöÍ]Sbü¸u`oíå0vôÁ„b7÷{ìýÚË šæß|ইý}ABú`N×Ä®÷z€œ^=uæ+_ßÖ|?Ññ¯Õ^胙Ůo¾_8NïH¢y½ÁOÜó„ë f¦'@œ®' ÁŽ]/ßr×wÜŒ}†æýFã|ˆS¢öraXxߦ˜÷&ô­üÚú3g‡k¯ˆúôAšâLˆ“!·xHÄY'Fí0N[½îÙÆ˜·øþ#Gk¯ˆV¡ò.q>Ä)Ñxâ(Î8=j¯€«·éé_OšýhLw·Í{ì—/ª½Z‹>ÈÅY'F<6âôˆ3¤ör¸b;÷ž³àñÆD·qó®ÚË¡éƒ\Bœg“â$‰ó¤ör¸,ÇO¼ÖxÅ× ½.ÿæO]Fž‹Ñ¹´8=â ‰“¤ñjs7¦hegίyâ¹Æm¦|ñ¯]‚KÓ¹q’Äy•8[â„q5*€´u`oãŠñ7ß¹nà…ýµ—Cй|qªÄÙÒ¸[Mœ6µ—À[öì{åŽEOÆœ6qÖ*w”æòéƒ\©8a✉‡Mœ9qòÔ^@j'‡î_µe\÷²ñ=+âƒøiíÑNôA®BãØ‰3'NÇ@￱~Ãöæõû«½"Ú>ÈU‹3§ù²„8‹âDª½"€,šoäé›»Öy¸jú ×(Ο8…¼m`lìÿן¿ä©æ…þ<'ϵйvq 5/k§SœQµWК7×½léòÍnƵÓ)q"ʧ“ÛžŒ¸öÿã·>£ûœïÜs¸örèú #+N§8£âAçUœZµ—Ðövìzù¶yÅ|Õ}û7ú·í®½:Š>Èhˆ“*ΫxhÅÙ'Xíå´¥#G?ó§?Š™jBßÊÕëž==t®öŠè4ú £$Ϋ8µâìŠXœcqšÕ^@Û0J16ôAF•'µ®”—Z1fôAÆ€½\—b`ŒéƒŒÅ¸—j§ }±ä¦9ïâVÎT¤2ö┋³.xqîÅég`íÔ±u`oßܵ1Ý|çºö×^éèƒÔ'^œ{ñð‹30NÂÚËSû»cÑ“1 Mœµjý†íž!§ }ŠâÜ‹Ó/ÎÀxÆy§b팺“ƒC÷¯Ú2¾gŸîeñAü´öŠÈK¤ºÆ‘çaœŠŽD ³}Ó‹Í'Ã÷ì{¥örÈN¤EÄyØ|ÉDœ“µ—0šo–é™ó-o–¡E胴”8ã„ô–j “Hë‹S´ñÜZœ«qºÖ^ÀE9:ØxÓ„¾•«×={zè\íÁ¥èƒ´…8KãDsµñÚû8ik¯àΜþÚúƸ²ð¾M®@[Ði#q®ÆéÚxÂ-Î[׿ZDÿ¶Ýk¤ßr×wvìz¹öràr郴8cã¤mÜ»'ÎÞÚËRÛ³ï•OÜóDL&7Þúˆ{(ÓvôAÚTœ·qêÆ£7Nà8‡k/Hçø‰×–.ß<®{Ùøž_ùú6—C§郴¯8uãì8Îá8ÝÐ￱~ÃöÆí’ç/yjßcµWWI¤ÝÅ çp<ŒãLŽ“9ÎçÚ+:ÙÖ½}sׯì?>óüok/®‰>HgˆÓ¸y2Ç)]{9@j> =qÖ*ÏBÓôA:Fã•q>{å0²^=uæþU[šïR998T{E02ôA:LœÏÍwvǹíÝÀ5j^ÅîŽEOºŠF¤#ÅY'¶+?×â¿:xóëÜ劦ÒÁšw†“<ÎóÚËÚÆÁC'Þ·)¦ˆ }+×<ñÜ™³ÃµW£B¤³Åégxœäñ8S=ÎöÚ+ZÚé¡sû™zŒáañýGŽÖ^Œ"} â$ó<êq¶Ç ç|í­hãæ]“f?3ÃÇæwçžÃµ—£N$8Õãl|œóqÚ×^ÐBbN¸ýîï™ÈF$›æó~qæ{Þ(_GôКŸy©èƒ$ç|œöÞÉ5®3ð›vÒÒI«yݰH× €lþ÷ßÿŸæuÈŸ{ñ_j/êÐI.Îÿæ}…"j/uîS Mú „È‚H„Ø ‘‘µ—ŒŠ“ƒC_zèoÇu/ß³âþU[â§µW•éƒÐ‰¹éI!  “ ¿þÆú Û'ÎZ£ï¼{¸ïÀ±Ú+‚– B)Ò!2"6EäE¤FdGí×jà…ý}s×F¾Ç[öÖ^´}Þ+’¢™‘ µ—\¥}ŽÍ_òTãòqëþòžé…wÑá‚"/"5 Žñªh/¯ž:³ü›?m¼déòÍÇO¼V{EЊôA¸„ÈŽHÆ»Î#S"Yj¯xÍ+ÅÍYð¸+ÅÁ%èƒð¾"G"M\•Zߎ]/ß6ï±Æ¤ú·í®½huú \¦È”Æ]k#e"kj/x‡CGþcá}›"©'ô­\½îÙ3g‡k¯Ú€>—/’%ò%R&vM$NäNíÿ÷ôйf@/~ ÿÈÑÁÚ+‚¶¡Â•Š”‰¬i>ýT{E×·üÓ¤Ùz\}®Nóí ‘A‘Dµ—éìÜs¸ñÿßÿè×6nÞU{9ЖôA¸‘>‘AË—E*Õ^¤püÄkK¾ú7‘¿7ô>èàp-ôA¸FÛEÅVŠlr{#=gίyâ¹Æ ‚ï^ºñࡵWíM„y©»)*rÊ5Í`ÄmØÛûñ5‘¶7ß¹nà…ýµ—@„Ù {*Ò*2«ör CìÙ÷Ê‹žŒ„8kÕ_lÜQ{9Ð9ôAq‘S‘V±³"¹"¿j/ÚØÉÁ¡ûWmß³"þ‰â§µWE„Ñ ¼àÚ­ß°½ùë?ÿößj/:>£'’«ùâ–H´ÚË€¶Ñ| Fßܵނ£G„Ñ)YæÍïp9:1ÉS.ÑcC„1P^;2Îűà½Ê[8-]¾Ù-œ` èƒ0f"×"ÝÜ<Þkãæ]7ÞúH¤äœïÜs¸ör }ÆXd\$]ì»H½È¾ÚË€Êvìzù¶yE2Nšýhÿ¶Ýµ—¹èƒPEä]¤^ì¾HÀÈÁÚË€ ŽüìŸý8ÒpBßÊÕëž==t®öŠ }j‰Ô‹ì‹Œ=i™X{E0FÊ\xß&!µèƒPW$`ä §FÈ£Ûîž9ßò"hú ´‚æ['"½u€Nµgß+Í7Ñ?ù£_Õ^ B ‰dl^Zí¥ß©½1‹lë^æ"ÛÐRôAh)Í[/Ebºõ`øõ7Öýå/š7áÝwàXíoÓ¡EVFbÆÞŒô\ûƒç#Ik¯®ÆÖ½}s×F¢}ä¾=ðÂþÚËÞM„–¹é;4’4ò´örà ì;plÞ½?Œ›8kÕú Û=· ­I„VéIûô“Ÿý+¯± õºÕ–ñ=+Æu/ûòÃOÇOk¯¸(}Z_$iäi¤jdk$¬` e}Ó‹k£Ý±èÉ=û^©½à}èƒÐ."U#[cÃ~ðVGÚÖ^¼Ãs/þËÍw®kÜ;é'ÿð›ÚË.‹>í%¶qßÈ\oÌ ¼KÌ gcrðì1@»;~âµæ+@–ó§^”ôAà½bZˆ™!&‡Æ»KŽ?U{E\±3g‡×<ñÜnzØ;ċыi^}.f‰˜(\} lØÛ¼‚ôÀ ûk/hQú pi1EÄ,Ѹ;ÕOþá7µ—Àûسï•;=çöÿ`µ;Ì—¦—#&Š˜+⸈#&ÚËàNÝ¿j˸îeã{VÄñÓÚ+Z>\¦Æ˜3FL_~øic@ë~ýõ¶Oœµ*æºO~ö¯ö8V{E@{Ð+3FLqnÄÔ³GL µW]ó…ý}s×nØ[{9@;Ñ«óFLqz|ä¾í2µìÿן¿ä©Æ…¿ÖþàyÏÑWJ®NL1{4.cÓˆ×&Œ¥WOiÜh\÷²¥Ë7?ñZímI®EL 1‡Ä4Ò¸ÍqÌ'µWÐù~Øÿ7ÞúHŒps<þÒoŽÔ^ÐÆôAàÚÅ43I&1Ÿ<ù£_Õ^@ÇÚ±ëåÛæ=Ö¸Pÿ¶Ýµ—´=})1™4î}³JL,µ—ÐQŽüÌŸþ(ÎØ }+W¯{öôйÚ+:>Œ ˜ObJ‰Y%–…÷mŠé¥öŠÚ^y´~öÏ~ìhF>Œ¸˜Ubbñ$6Àµëß¶»ûöoxé0JôA`”4ßä2iö£Þäp¥vî9Ü|köÆÍ»j/èLú 0ªb†i^/f›ÚËh.Ý Œ}mÍ›dÅiã&Y—0üúkžx®yk׃‡NÔ^ÐáôA`lÄT³M81çÄ´sæìpí´–­{ûæ®sòæ;× ¼°¿ör€ôA`,Å„sN;1óÄäS{9-aßcw,z2ÎÆ‰³V­ß°½ör€DôA`ìÅ´3O>1ÿüóoÿ­örª998tÿª-ã{VÄ?ñAü´öŠ€\ôA  #À÷7½Ø|rlϾWj/ÈH*Šù§ù©¿Ø¸£örÆHóÅó½_ãÅó@Eú P]ÌB1¹„ÁÁC'|ñ¯]\ hú Ð b"j^býî¥]bè<åÍw–|õoÜ|hú Ð:b:Š)%·`:ÌÆÍ»&Í~4η9 ß¹çpíå¼EZMLJ1/ÅÑôûýZLPµ—pM~ùÒ¡Ûæ=gZôÁoù§ÚËx}hM155žK9jÇ®—k/àŠ9:¸øþ8Ç&ô­\½îÙÓCçj¯àÝôA eÅìTÌQqLÅL“Uí\–3g‡¿¶~ q|-¼oÓ¡#ÿQ{E¦-.樘¦šO°»Ðâú·íî™ó-/oÚ‚>´…˜©oÀ‰)+f­Ú˸€=û^ùÄ=OÄIuã­|Ó‹µ—ðþôA Ä|SVã}1wÕ^À[ŽŸxméòÍ㺗ïYáòÈ@ÑöÒ¸WL\1wÅôå^@]￱~ÃöÆíSç/yjßcµWpôA ÅÄsW_1ƒ­ûË_Ät˜˜Ów‚ŽÉí¹ÿ¥ör€¶wðЉ…÷mj\ÀjÍÏ9;\{E#F:OLk1³5.ÿS\ÌrµW´¥ÓCçþö37ô>‡Éâú¬½"€¦*&·˜ß∋Yî¡5?‹¹®öŠ€v²qó®I³3äö»¿·sÏáÚËú ÐÙbŠ‹Y.º˜ëbº«½  87€<ôA ƒæóü›ÿ]ÏóS¾®àáo?ãu@ÇÓ$¼¸ï;rÒTš× œÐ·Òu†òºÄ¿øÕÁÚË;ú Py±þm»k/¨Æ}KäôA ­˜ýbŒ30¦Á˜ k/S'‡¾ôÐߎë^6¾gÅý«¶¼zêLíT ™Ås`Lƒ1.]¾9æÃÚ+FÝðëo¬ß°}â¬U1Í_òÔ¾Çj¯ } ¦Á˜ ã0Œù0¦Ä˜k¯-/ìï›»6ö{ü¸u`oíåT¦4ÄdØœŸyþ·µ—Œ°æ3?¸éaÏü4èƒMW‘5.8ïUdÐ1^=ufù7Ú|eøñ¯Õ^@«ÐÞ%fŘW™øÊ×·¹Ê´µæ•£>qÏ®ð.ú ÀÅÜÓ£«ÐCûÚ±ëåÛæ=æÎ2— \BÌ»Tßr×wb¶¬½à²:ò ïÛ;wBßʯ­8sv¸öŠZ”>pi1IÆ<Seœ–1a0–bÊY7&Þ8{cú¸öŠ ²rS|æOdSŒ%}`ìÅÄs¯¿ þm»{æ|Ë_šÔ¢ÔÒ|«TÌÃÞ*E6/ýæHóMµ?ìÿÇÚËHJ¨+&áæ¥cB®½u.º Ð:ôA€êÜj$†_cížwSN€Ö¡´ˆ˜cBŽ39¦å˜™cr®½"I[ööÍ]ð›ï\7ðÂþÚËà<} ¥ÄœÓrœÌ19Çü\{90ö8öÉÏþU<ª'ÎZµ~ÃvÏu´} ÕÄ´3sLÎq>dztíÁU:98tÿª-ã{VŒë^öå‡ŸŽŸÖ^ï ´¦Æ StÌÒñAš¶óýM/~ðVǘqÇ¢'÷ì{¥ör¸} •ųtÔ1WÇt]{9pYš/{î™ó-3@+ÓZßÖ½{v»-îà¡ ïÛÔ¸,Òš'ž;sv¸öЏ} -Ä\ÓuãBý1oÇÔ]{Eð§‡Î5n›ÑÅô=~ªöŠxú @9~ⵘ´ãÜnÜÈ;&ðÚ+‚ó6nÞ5iö£ñÈœ³àñ{×^—Kh;1oÇÔ§wLà1‡×^©Å£ñ¶yy4´)} Mmzú׿‘‰iÜßÈ0öŽlþmõêuÏúÛj€v¤´¯˜ÀcŸÐ·²ñŽ­˜Ïk¯ˆΜþÆ÷~Þxày7+@[ÓÚ]óŠŽ1ŸÇ”Œªþm»›W»Ý±ëåÚËàšèƒ!&ó[îúNãŽo1±×^hϾWþûŸü c7Þúˆ»at} “Ä”³zì1·Çô^{9tˆã'^[º|ó¸îeã{Vüù#÷ê©3µWÀÈÐ:LÌê_ùú¶˜Ûcz>&ùÚ+¢ ¿þÆú Û'ÎZÓÂü%Oí;p¬öŠIú @Gй=¦÷8ác’y>¦úÚ+¢ýüýÏ÷õÍ]¢ø1>®½Fž>ÐÁžyþ·æy®‚ç’Ð:›×ûqE^=uæÏù;¯7HBÈàäàëð¾\ } ˜ðïXô¤ûð^;v½|óëܯ } ÷§tðЉ…÷mŠÇľ•ßøÞÏÏœ®½"ÆŽ>PÌükžx.æÿˆ€èÑj¯ˆ N[½îÙzŒ‡Áâú¬½"Æš>VÌÿÑ"¢D/ˆvP{EŒ›wMšýhüéß6ï±{×^uèƒÉEøØüïFD;ˆŽP{9ŒºøŸ³àqâü_}€75ÿ¶(š‚¿-êTGŸjþðòoþÔß Ðíà¡5?k¾›,ºCí1bïýÀM{Ç(%}€Rój“Ñ¢A¸Údˆ”o^Qvà…ýµ—@ Ñx¯ç^ü—æÝèdDûjÞqòƒ°Ú'x/}€‹‰qã­DLD§ˆfQ{9\“ƒC_~øéqÝËÆ÷¬¸Õ–øiíЊôA.!zD´‰èÑ,¢_¨­oøõ7ÖoØ>qÖªÈ÷O~ö¯ö8V{E´.}€÷bÞ½?Œ¼ˆ–]#Gíqa/ìÿÈ};þ¤úæ®Ý:°·örhuú —)úE´ŒHh.KÒj¢³Ï_òTãB@kð¼ÎÀåи|Ñ2Öýå/·-ˆöᵈ­àÕSg–ó§7ô>8®{ÙÒ囟x­öŠhú W*GôŽhÛšG©½¢¼žüѯ×ü™³àñ—~s¤örh3ú WgϾW¢ƒDˆD‰VR{9éìØõòmókܤÛîÚË -éƒ\‹h"{G7‰†R{9)9:¸ð¾Mñ=ŸÐ·rõºgO«½"Ú•>À5:sv8ZIt“”è)ÑVj¯¨cEõk~«?ûg?ö­à郌ˆè&‹è÷—V£§ÛîI³õW±Œ }€Ô|S[4oj);÷n¾Usãæ]µ—@çÐqÑY~ÿ£_k\ô2ºLí崱ƥ\ã;éR®Œ}€Ñм)^¤Œ›â]…3g‡×<ñ\óV¨½":>Àè‰s÷Ò4Ñk¢ÝDÇ©½¢ö°u`oßܵñ}»ùÎu/쯽:–>Àh‹F½&â&:N4ÚËiiÿüÛ»cÑ“ñ½š8kÕú Ûk/€§06þbãŽè8:Ñw¢õÔ^NË998tÿª-ã{VÄ?ñAü´öŠè|ú cF幘²,ïÙ÷Jíå…>À+_=¨ör*k¾˜¶÷ãk¼˜€1¦P…K¦¸ØÕéƒÔRÞR!šQž[*”7ãXòÕ¿q3jѨ+Û-×7nÞõûýZ|½s<¾sÏáÚË 5}€VÍ(úQDRt¥hLµ—3*vìzù¶yÅ×8iö£?ÞòOµ—ú -¤ÛîèJLÑ›¢=Õ^Έ9rtpñýñuMè[¹zݳ§‡ÎÕ^œ§ÐR¢+EcŠÞñ*šTí€/=ô·ñå,¼oÓ¡#ÿQ{-ð6}€50ÚS$T4©ÚkÇO¼ÖIÝ @ÇÐhYÑ¡\{F>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>@üà¾÷ž~ê Ÿºþº»þËõ×}ð–Û{ïŽÏüá§–~aá篿îã×_×Ýu×ÿ<ÿã'â‡É3gNÒ;£+>˜>mF÷ôø »§wêÌiç?èî™9uj|0¥ïüGç?øÝ/î1µwÚÌ®»>uþ÷éžÜÓÓÕýæÿîúòõ×Mš2¥orßÔÞ©]3¦÷NžÞÓÓ×µøúë¦öœÿ×§÷tõõõÆÿ;mFלë¯ë1sòÔ)ÓûÞþ•ç?ÙÝ7yÆÌž™]Óº{&OÑ×sþ“Í}Êô)“§Léy󓓦õMžÖ=µï¿òÿùøìÇwâîßòù/|tѧ¿°ès÷~êó_îºéüç>4iJ|5Ý3fNÿ½®ÿÑ>¿èÞ?éúЭ·ÞòéOqñ~î Ÿ:ÿ‹¯ë?ÿ¥9ÿÃõ×MyóÛ÷Å·¿SŠ/¾¹ÎÞéÓ&O™:cæ;¿ö©3&Ç·yæùM™<³¯{æô®é3ãûÑ7cÆ;¾Êæ¿}±OÆ×3­7¾ú)S¦¼ý;\ì?uÁßá½ÿzã·}Ϻ¿ù¹3göýîsSßZÿ›Ÿ›Ö3urÏôK¬ÿB_è¿¶§»{òôîéÓÎÿ‡‹š:å­ßuúŒ·WÚüäå|«š¿çå|«Þ÷›}Á4?Y~S.öM½àÃâBßÁw~núŒ‹~UWôP¹óúëfv}è÷ºîúä{¾“û¦õLé9¿©gt÷öõMm<˜ßÞó=ñõÌ8.Ìh|æüžoþwfÌœ6¹gjßôó_N|®¯'7ýü¦žÚwñïæÔ™“{{ã¹Ð/lþ†—Ú³Ý]¾ýÞ/t}è–Û§tw}ús‹—|î‹÷ÞÓµô3ŸZ²°kñçîYøÎýúžÿÞûþÙ÷ôôLž9µ·ïíÕNŸÞ5mÚÌÉÝSßüæ'¿åŒÞ‹}]#ô%¼û[û»ïvï´w¬àwŸ+—zÁ/ê‚_þþüFhù—xø½7ÿî\Ÿ2­kÆÔi±¦O¹Àšû¦Yqá_X&Í}%ïùï½÷±Ô÷ÎoûÔiS'Ç#cÆE“­ùÉÆïÙ;ýb_×} ïýæ..’´\Äãõ‚_Ø¿üS¹GÔùCjÆùèúVô¾Á÷\Ýôß=ÔæÜúöø3çS_^øùI“ÞúÄ­ ÿdѽo~ª‘ßSš>¥kjooœBçÿéîê=ÿ©9 ®¿îC»ýcÿ9–µäË¿×5çÞ‹} ¾ë¿Í¹óövÝÔõ毿»ñë?Òø¢îŽ!þÏw~Ý]·ünK¼sŽèîú¯ñÑÿŸûŸ]Óºþ[×ÿ˜ßÝuÏõñÿýá[_ÂÇý o*¿œß xñÅÇo8ûúë>üÑ…_Zôé…8ûÖ®»bêûçg¼ˆ–8*'ü[?™ÔSß”žó{¥/Rz~×”©Ý±–™Sß\Êg®à_|óû×ü—ßþ¨¯«§«û­ïqNç],üƒo®úü zS¤åù_=-&ÖÛ¯«=?ÀÛNýò¥Cñcí…£NîPúÉ?üæÿ™üÕø±öB€Q'÷(ÉÈCîP’ ‡Ü $ ¹@I.@r€’\€<ä>%¹yÈ}Jròû”ää!÷(ÉÈCîP’ ‡Ü $ ¹@I.@r€’\€<ä>%¹yÈ}Jròû”ää!÷(ÉÈCîP’ ‡Ü $ ¹@I.@r€’\€<ä>%¹yÈ}Jròû”ää!÷(ÉÈCîP’ ‡Ü $ ¹@I.@r€’\€<ä>%¹yÈ}Jròû”ää!÷(ÉÈCîP’ ‡Ü $ ¹@I.@r€’\€<ä>%¹yÈ}Jròû”ää!÷(ÉÈCîP’ ‡Ü $ ¹@I.@r€’\€<ä>%¹yÈ}Jròû”ää!÷(ÉÈCîP’ ‡Ü $ ¹@I.@r€’\€<ä>%¹yÈ}Jròû”ää!÷(ÉÈCîP’ ‡Ü $ ¹@I.@r€’\€<ä>%¹yÈ}Jròû”ää!÷(ÉÈCîP’ ‡Ü $ ¹@I.@r€’\€<ä>%¹yÈ}Jròû”ää!÷(ÉÈCîP’ ‡Ü $ ¹@I.@r€’\€<ä>%¹yÈ}Jròû”ää!÷(ÉÈCîP’ ‡Ü $ ¹@I.@r€’\€<ä>%¹yÈ}Jròû”ää!÷(ÉÈCîP’ ‡Ü $ ¹@I.@r€’\€<ä>%¹yÈ}Jròû”ää!÷(ÉÈCîP’ ‡Ü $ ¹@I.@r€’\€<ä>%¹yÈ}Jròû”ää!÷(ÉÈCîP’ ‡Ü $ ¹@I.@r€’\€<ä>%¹yÈ}Jròû”ää!÷(ÉÈCîP’ ‡Ü $ ¹@I.@r€’\€<ä>%¹yÈ}Jròû”ää!÷(ÉÈCîP’ ‡Ü $ ¹@I.@r€’\€<ä>%¹yÈ}Jròû”ää!÷(ÉÈCîP’ ‡Ü $ ¹@I.@r€’\€<ä>%¹yÈ}Jròû”ää!÷(ÉÈCîP’ ‡Ü $ ¹@I.@r€’\€<ä>%¹yÈ}Jròû”ää!÷(ÉÈCîP’ ‡Ü $ ¹@I.@r€’\€<ä>%¹yÈ}Jròû”ää!÷(ÉÈCîP’ ‡Ü $ ¹@I.@r€’\€<ä>%¹yÈ}Jròû”ää!÷(ÉÈCîP’ ‡Ü $ ¹@I.@r€’\€<ä>%¹yÈ}Jròû”ää!÷(ÉÈCîP’ ‡Ü $ ¹@I.@r€’\€<ä>%¹yÈ}Jròû”ää!÷(ÉÈCîP’ ‡Ü $ ¹@I.@r€’\€<ä>%¹yÈ}Jròû”ää!÷(ÉÈCîP’ ‡Ü $ ¹@I.@r€’\€<ä>%¹yÈ}Jròû”ää!÷(ÉÈCîP’ ‡Ü $ §“ƒC¿|éPüX{!À˜’û”äädïCNö>%¹9Ùû“½@I.@Nö>ädïP’ “½9Ùû”äädïCNö>%¹9Ùû“½@I.@Nö>ädïP’ “½9Ùû”äädïCNö>%¹9Ùû“½@I.@Nö>ädïP’ “½9Ùû”äädïCNö>%¹9Ùû“½@I.@Nö>ädïP’ “½9Ùû”äädïCNö>%¹9Ùû“½@I.@Nö>ädïP’ “½9Ùû”äädïCNö>%¹9Ùû“½@I.@Nö>ädïP’ “½9Ùû”äädïCNö>%¹9Ùû“½@I.@Nö>ädïP’ “½9Ùû”äädïCNö>%¹9Ùû“½@I.@Nö>ädïP’ “½9Ùû”äädïCNö>%¹9Ùû“½@I.@Nö>ädïP’ “½9Ùû”äädïCNö>%¹9Ùû“½@I.@Nö>ädïP’ “½9Ùû”äädïCNö>%¹9Ùû“½@I.@Nö>ädïP’ “½9Ùû”äädïCNö>%¹9Ùû“½@I.@Nö>ädïP’ “½9Ùû”äädïCNö>%¹9Ùû“½ÀÿÏÞÝxWQÞûßÿj¼‘óãw<ïÖÕöG¦ô¤Z¨J-Çeî6žÂÂò;è’U´Véᾑ––VNMÂCƒ (…† åIØT‰A AåÕTÂCJÉ‘”~BCÃCî\v:òvöž™kf®÷k±XAaç›Ùó½>×Ìž¹Æ\ÜDïn¢÷~äà&zp½ð#7Ñû€›è}€¹¸‰ÞÜDïüÈÀMô>à&zàG.n¢÷7Ñû?rp½¸‰Þø‘ €›è}ÀMô>À\ÜDïn¢÷~äà&zp½ð#7Ñû€›è}€¹¸‰ÞÜDïüÈÀMô>à&zàG.n¢÷7Ñû?rp½¸‰Þø‘ €›è}ÀMô>À\ÜDïn¢÷~äà&zp½ð#7Ñû€›è}€¹¸‰ÞÜDïüÈÀMô>à&zàG.n¢÷7Ñû?rp½¸‰Þø‘ €›è}ÀMô>À\ÜDïn¢÷~äà&zp½ð#7Ñû€›è}€¹¸‰ÞÜDïüÈÀMô>à&zàG.n¢÷7Ñû?rp½¸‰Þø‘ €›è}ÀMô>À\ÜDïn¢÷~äà&zp½ð#7Ñû€›è}€¹¸‰ÞÜDïüÈÀMô>à&zàG.n¢÷7Ñû?rp½¸‰Þø‘ €›è}ÀMô>À\ÜDïn¢÷~äà&zp½ð#7Ñû€›è}€¹¸‰ÞÜDïüÈÀMô>à&zàG.n¢÷7Ñû?rp½¸‰Þø‘ €›è}ÀMô>À\ÜDïn¢÷~äà&zp½ð#7Ñû€›è}€¹¸‰ÞÜDïüÈÀMô>à&zàG.n¢÷7Ñû?rp½¸‰Þø‘ €›è}ÀMô>À\ÜDïn¢÷~äà&zp½ð#7Ñû€›è}€¹¸‰ÞÜDïüÈÀMô>à&zàG.n¢÷7Ñû?rp½¸‰Þø‘ €›è}ÀMô>À\ÜDïn¢÷~äà&zp½ð#7Ñû€›è}€¹¸‰ÞÜDïüÈÀMô>à&zàG.n¢÷7Ñû?rp½¸‰Þø‘ €›è}ÀMô>À\ÜDïn¢÷~äà&zp½ð#7Ñû€›è}€¹¸‰ÞÜDïüÈÀMô>à&zàG.n¢÷7Ñû?rp½¸‰Þø‘ €›è}ÀMô>À\ñŽSMmWô†ÞG"h,Õˆj»ŠT¡÷~äB~0ýumÕñSkÚtÚ®¸2z1§ñS£¨öR¨¶kIzàG.„AÓ˜q“«µaΘU±¹ûL튀KÑûˆ-™95~jÕXÚÖþWÛ¥ ½ð#ÂÓØtpØèJmÞ‚¢çk6î±]ð ô>âI£¥ÆLíœ?¹ð> ô>À\ÛÊWÞ¿ùîÙÚÈEc—6·¶]ð1zq£Rã¤vK™Ë«·Û.'µè}€¹'»KŸ{³ÿàiyù%KkYq@ï#>4*jlÔÙ¯ L£¥ÆLÛ¥½ð#"ÓÒztÌ„5ÚÚ7Þ>³âÅw{η]œFï#4j<Ô¨¨½Q#¤ÆIÛ¥½ð#"Vß°ÿŽo-Ô6/,^PW¿Ïv9p½ë4j$4ã¡ÆFÛ市Þø‘ Ñë9w~ñêm‡”kËþþ*·à ziÜÓè§=P#¡ÆC®—ˆ½ð#l9ÞÙõ£™o˜ûe¦”¯×mW·Ðû°BcF<{ý~0ýu†¾èÑû?rÁ®æ–Ã#[Ézzˆ½èi”3ë-kÜc½e[è}€¹Úþæy[CGVlÝþGÛåÀ ô>¢¤‘Mã›y뺷~o»§Ñû?r!&ºÏôÌ_¶Õ,²7nrõ¶Û!åè}DC£™Æ4³´²F9u¶+r½ð#båȱ“ã§Öèé?xÚôùoŸî:k»"¤½°iÓ8¦ÑL{šF¶ö#¶+ÂGè}€¹C;š]ª÷eÐð¹UµM¶ËA:Ñû•Æ.`ÚÇî}h‰Æ4Ûåàïè}€¹[Þlêëc^`6…ÀÑû‰Æ+ZœÑŠ-zàG.ÄÙ鮳³*6sµÂ@ï#p£¼+Þg.ÜÄïñDïüÈ…øóVcP8ƒÕz2+biŒbE¬ø£÷~äBR46ôVk¯Ù¸Çv9HÀ\Hœ'»Ÿš½¡_AY^~ÉÄÒÚã]¶+B"ÑûÈ…F?…4M)_¯qÉvEȽð#ª¥õè˜ kôÞ R¾xõ¶žsçmW„„¡÷‘6s4òhÿÑ(¤±ÈvEèzàG.$Ú[[Z ‹èÔï›ÞùÐv9HzYÐ8ã9uõûl—ƒlÐû?r!é8WìÐûèïš„oŸÉ5 ‰FïüÈ…t8ÖqÊ»—çgÏnä^\½ i<Ѩâݳ¬ÑÆvEÈ ½ð#Ò¤¹åðý®`­?d‚ÞG&¼5¿ùe¬iœô>À\HïY`w=°¨±é írSô>z§ÑCcÏ.\|T¹ª\#ƒÆUãzàG.¸Æ[)âÆÛgÎ_¶••"œEï;N½¯@ã€vƒ±“~ͪSî ÷~ä‚›êöYaV’¯«ßg»X@ï»L]ožJ£q@£ír)zàG.¸lyõöOu–v€­äIÓ®¡÷ݤNW¿ë­8¤\#€ír`½ð#w¼³kJùú~eyù%úB´]"Bï»Æ4»:]ýN³»ŒÞø‘ –Ö££É|d°xõ¶žsçmW„ÐÑûîPG«¯ÕÝæbõ»íŠ`½ð#à©«ßWX¼€[ŠAï;»YXÝÍ͸@ï>‰\€_Ϲó V¼c–3aÍþ?ýÅvE ½Ÿzê_u±·˜0Ÿûà÷~ä.w¬ãÔÄÒÚ¼üI–bô~Š©gÍÃFÕÅêe6 ?zàG.àjvím/»T»ÇÍwÏ^Uóír0z?­Ô­êY½¹êß͇l—ƒØ¡÷~äzW³qyNÙ°Ñ•Mm—ƒÀÐûé£UŸêmÍ¿wž:×v9ˆ)zàG.àšNwU±y@á í*ßýñ+íG:mW„Ðûi¢®Toê UŸª[Õ³¶+B|Ñû?rÒ„óñŸ¾Ê„35èýtàt úŠÞø‘ è.HK z?ÔƒêD.çFŸÐû?rY¨ªmbÁФ£÷M}ÇrOȽð#´O:z?¡x rDïüÈäâ@[¼N(z?qÔ_ê2õšÞ8õÝþ?ýÅvEH$zàG. wõ û‡Ž¬ÐŽTX¼ ®~Ÿírz?YÔYê/½eê5uœír`ô>À\@P¯Þ6pH¹v§­li=j»\½Ÿê&õ”Þ,õ—ºŒOá‘#zàG. @Ç;»¦”¯ïWP¦_úB´]®ŠÞ?¯¡òòKh(…Þø‘ \sËaïãŒåÕÛm—ƒ+£÷cN½ã}ஞ²]ÒƒÞø‘ I]ý¾‚¢ç¹Ý)¶èýØònÈUqC.GïüÈ„§ûL·âØI¿>ÐÖa»"ü½CêuŠ·`¯:ÈvEH!zàG. lÇ:NŸZ£ÝŒÇ¥Å ½+Þ=õ¦¨_x 'ÂCïüÈDcGó¡¢±Kµ³ >·ª¶Év9 ÷cD¡¾ÐÛ¡Q§Ø.)GïüÈD©úfÞ;ltå{»Úl—ã4z?ÔêsžDÝa»8Þø‘ ˆØé®³³*6(œa®‹k?Òi»"GÑûviÏ7×Q«Ôê ÛÁô>À\€Ú:ÆM®6“á9‹ëY7#zô¾-Ú۵ϛS"êÖYBÄè}€¹‹›ÞõÀ"³®~ÍÆ=¶Ëq ½o…ösóíùÚÿm—Ñû?rÖ-¯Þ~óݳµ~ó;ËxîvdèýˆißÖ®m®½]û¼írà.zàG. NœìþÙ³û”åå—L,­e±ýÐû‘Ñþ¬½Zû¶öpíçÀ\@ ™OU)çS•ðÐûáñ>éÖ>Ì'݈zàG. ¶Žwvyw]M)_Ï]WÁ¢÷à½Tûªw'¬öaÛ—¢÷~äb®¹åðˆÇV²*càèýÀy+åje¥\Ľð#ÞSÛ†Ž¬x÷ý¶ËIz?@Ú'µgò$M$½ð#Ýgzæ/Û: p†öØq“«´uØ®(Ùèý@h?ÔÞ¨-©=Sû§öRÛ×@ïüÈ$Kû‘ÎñSk´ÓöÀ\@¢î:;}þÛ\³—z¿¯ü×*k¯ãZe$½ð#Þš7Þ>“5=2Dïgάe¤½‹µŒô>À\@jlÝþGoÍÿuoýÞv9qGïgHû’÷¬íc¶ËrEïüȤ ÏϽMÚ´i+iÒ~e» ô>À\@úïìšR¾¾_AY^~ɦ¿®?Ú®(Žèý^hŸÑž£ýG{‘ö%v!¤ ½ð#V-­GG•vïCʯÞÖsî¼íŠâ…Þ¿"í'Ú[´ÏhãhÿÑ^d»" `ô>À\@ºÕÕï+,^ \¿×7ì·]NŒÐû—Óâí-Úsl—„‚Þø‘ H½žsç+^|×,9fÂ>ñ1è}?íÚ7̵Ú[ø4)FïüÈ8âXÇ©‰¥µæŽ°ÒçÞÙÖ´®7’îÞ×»¦÷Nï ~F½›zOmWÄEº{ÐWäpEõ û‡Ž¬Pw þÆüºú}¶Ë ^Š{_ï—Þ5ýtzõ>Ú.ˆ—÷> äЋ_U5R®ñØÊ”=¯<•½¯÷Hï”~.½kzïl—ÄQ*{5rèÝñή)åëû”é—¾ÐmWŒ”õ~Zß& p)ë}@ŽÈ øðÏÞO‹Wo³]NÒÔûzG¼qõNÙ.ˆµ4õ> w乺ú}…Å ÒqcZ:zß»ÍSïK*oó—ŽÞ…\úÄ¿på˜ k’»peÒ{_[^Û?õËÀKzï‚E.Y8Öqjbim¢l—ÜÞ÷?&RïBº .¹½¹dmGó¡¢±KÕA7ß=»ª¶Év9}“ÐÞ×vÖÖVåÚòÚþ¶Ë’'¡½ ¹ä¨fãžAÃ窆®ll:h»œL%®÷µmµ…U³¶¶¶¹ír€¤J\ïBE.¹;ÝuvVÅæ…3ÔMÿôÕö#¶+º¶õ¾¶§¶ªªÕÖvÖÖ¶]` ê}@È (:l7¹:)‡-‰è}ÿ¶¶m"´˜KDï"C.Áò.k,(z>Η5Æ¿÷µõ´ w!.sñï}@”È +_yß[öd×ÞvÛå\Aœ{_[Ì[¨G[Òv9@ªÄ¹÷Ñ#€xEÈË/‰ácâÙûæAÚbÉ}sñì}€-䪖֣ÞcÓ¬x§çÜyÛ},n½¯-£í£­¤ª´Å´ÝlW¤SÜz`¹D ¾aÿßZ¨^+,^PW¿Ïv9‰Uïk›h˨m%m+Ûåi«ÞXG.Ñè9w~ñêm‡”«ãF=þ’õÏ¿bÒûÚÚªD[FÛ'>ŸŸi“ÞĹDéxg×f¾‘—_Ò¯ lJùzýÑV%Ö{_?»¶€¶ƒ¶†¶‰ÅM8Åzïb…\¢×ÜrxÄc+ÕzŸþê¬åÕÛ­Ô`·÷õSëgWÚÚVjÜDîüÈÀõy¾ÞБÑß4g«÷õ“êç5Ïgdä¢GîüÈÀ¢î3=ó—m5‹jŽ›\} ­#²o}ïë§ÓÏh–ZÕO­Ÿ=²o ÀCîüÈÀº#ÇNŽŸZ£N4Ý;Ýu6‚oeïë'2bÔwÔOªŸ7‚o àŠÈ}€¹ÄÄŽæCEc—ª Ÿ[UÛö·‹¬÷õ³è'Ò÷ÒO§Ÿ1ìo wä>À\bÅ;z6º2Ô£§z_õ마ì@&È}€¹ÄÍ鮳³*6{WW¶é 㻄ÚûªÙ»V?K4WÀȹð#€xòV_P8cÞ’-¯¾Rï«NU«š£_!@&È}€¹ÄYcÓAïé 5÷øÊaô¾*ôž ¡Ê|eA!÷~äË«·ß|÷lµêý®êéíÁö¾ªRmzAÕ©jyMa ÷~ä'Nv?5{C¿‚²¼ü’‰¥µÇ:Nåø‚Aõ¾*Q=ªJµ©Bՙ㠹ð#€ii=:fÂõìÀ!å‹Woë9w>ë—ʽ÷õÝUƒ*Ñë¨*Õ–õKˆ ¹ð#€ÄykKKañu®~××Ù½H޽H ¢GîüÈ ‰rÿl.ëÞð3JÑ#÷~ä\¹Ü»—Eï~#€è‘û?rHºìÖöìkÆ)€è‘û?rH‡¾>û/óÞGîüÈ 5ºÏôÌ[²e@á 5õ¸ÉÕÚ:zùË™ô¾^A¯£¿¦×Ô+ëõƒ.@ÔÈ}€¹¤Lû‘ÎñSkÔ×ýO›U±ùt×Ù+þµÞ{_ÿJÿV¯ ¿£WÓk†Y2€èû?rH¥͇†®Tw>·ª¶éò¿ÐKïëïë_éÿêô:á :ä>À\RÌ;²+»ô’#»+ö¾þŽþf/G‘’ŽÜø‘ @ºî:[úܛޕŸGŽ4ÿý’Þ×÷®2Õß¿ÚU¦’ŽÜø‘ € ¼•an¼}æüe[»Ïôx½¯¯õ_ôß3Y…@Ò‘û?rpG}Ã~ïÉ3~ñ¶¾ÐïÞS*ôm tä>À\\³¼zû§¿:Ko~éëÌŸb éÈ}€¹¸æxg×ÿWRû©[>:ÔïúZÿÅvQ"BîüÈÀ=çÎ/^½màruýÝß®ô~×Ñ×ÿµ] €Ð‘û?rpD}Ãþ;¾µPý^X¼ ®~Ÿ×ûúZÿE_ëÿr !zä>À\R¯¥õè˜ kÌ⢠V¼c>ô÷¾þ‹þ»YbTSßvÉÂBîüÈ ÅNœì6ÌË/™XZ{¬ã”÷¿.ï}ý_ýýMóBý[%¹ð#€´ZùÊû7ß=[ ^4v鮽í—üß«õ¾þ¦þ¾þ—þ­^!ªbD„Üø‘ @ú466ºÒràG. e¡þÍîñÙõ¾÷ ýÛK` È}€¹$N÷™žù˶z?ÐÖ‘Å‹äÒûúŽÞîU‰êÉâEXAîüÈ Yêê÷/PÛYQß°?ë×ɽ÷õÝUƒ^Dõ¨ª¬_@”È}€¹$Å>üóˆÇVªa)_¼z[ޝTï«Õ£—Rmª0ÇW6ràG.ñw¼³kJùú~eú¥/ôÇÜ_3ÀÞ£<!!÷~äs¿ªjô>€kn9ÔËÞûªÍûøR5õ²‚EîüÈ ¶¼ôc~à7è…ÔûªSÕæ~{#€û?rˆ¡mM¬ uÏðzß¿ü©~Šì–?ràG.±âÀß„§_ ïa÷¾*WýY?@HÈ}€¹ÄGUmÓç¾6G-Y4véŽæC¡~¯hz_?…~}#ý\úéBý^2AîüÈ ›]©f4|î«ëwGð£ì}ýDú¹ôíô3ê'à;¸ràG.vµé?µFm8 pƬŠÍ§»ÎFó}#î}ý\úéô3ê›êçÕOÍ÷p ràG.¶tŸéñ‘ÆM®nkÿk”ßÝJïëgÔOêü†±N€Þ‘û?r°¢fãž‚¢ç-^Bi±÷½‹cµ´¢/p¹ð#€ˆ5·6K¬Ü|÷ìåÕÛm•a½÷õ³k ˜Ås´Ml•¸Æzïb…\"s¬ãÔÄÒÚ¼ü’~eÖÁ‡Þ7×ÐÖÐ6Ñ– ïá È luõû ‹¨Ñô{}Ã~Ûå|,n½¯-ãm%m1Ûå©·ÞØE.áii=:úû«Ôb‡”/^½-VŸ|Ű÷µ}´•´­T˜¶[>EÒ'†½°ˆ\Âp¼³kJùzsgܦ¿®?Ú®èR±í}m+m1s—¥¶a 7h±í}€ä8oåÌ­ŒíÊ™1ï}m7m=ë«°éóÞDŒ\´uû‡Ž¬0OÖ[÷Öïm—Ó›Dô¾¶¡yJ£¶ª¶­ír€4HDï"C.8ÐÖ1nrµY$sþ²­ÝgzlWt Ié}mImO³4«¶°¶³íŠ€dKJï¢A.9:Ýuvúü·ûž¦V?µ¦ýH§íŠ2’¬Þ×VÕ¶UÁÚÎÚÚÚæ¶+’*Y½¹ä¢ª¶iÐð¹j¢{Z²£ùírú ‰½¯-¬í¬²µÍµåm—$R{rÈŽŽM¾>æ…ä›$·÷½cpmÿdƒqÜÞ„\úÊíâÌ…›zíb¢{_Û\[>q×èqèÞŽ\2gÖ6P8#k›¤ ÷½5|ôŽ$b  RÐû€‘ @†j6îñž}ðîûl—“«Ôô¾Þ ïzl—Ä]jzr¸¦T>=e½¯÷EïŽ~"½Sz¿l—ÄWÊzÈÐÄÒÚã]¶«âˆ\z¡ìP‚äå—ô+(›R¾þÄÉnÛ&}½¯wGï‘Þ)½_ä>p5éë} Úí)_¼z[Ϲó¶kâ…\®Hy¡ÔPv¨AÆLXÓÒzÔvEKkïëÒûEîW“ÖÞzWW¿¯°xv~ý¾ém—Ĺ\NI᥆Äv9¡Hwï“ûÀÕ¤»÷^˜3½7Þ>3­gzì €Ÿ÷é’ò"ÝŸ.¥¾÷É}àŠRßû@ïŽuœòîùÙ³Ót'r0”Êïî3å…íŠÂåHï“ûÀ%é} wÍ-‡¿ùe)[)ȹ\ð­N©tpduJ§zŸÜÐ;ïIRw=°¨±é ír;È8Nã¿RÀÁ§×9Øûä>pÁÉÞzÑ}¦gÎâú…3Ôã&Whë°]5rÎÒ˜¯‘_û¿R@Y D°]Q¤Üì}rp³÷Þµé?µÆL fUl>ÝuÖvE@tÈ8Hã¼F{sP ñ_)`»" \î}r.s¹÷ᬠÇù÷vµ ]©4|nõ;î ˆ r®yuýnóÚí5ækä·]Ž5ô>¹7ÑûpÉýÌÿ~Um“™']º£ùPx…1A.ÀÕ5¶›ù¿F{ÛåXFïä>\CïÃþÜïÓ?Ò-ðܯoØ?td…Y‡¼®~_ E±B. Å4nþÆ|íáÉ5žÛ.'^èý+"÷‘zô>R,¼Ü_^½}àr½òˆÇV:òœb¸ƒ\@*i¬Öˆ­}[£7Ï¿"z¿ä>RŒÞG*EûÇ;»¦”¯ïWP–—_¢/ôÇ0¾ =r)ã ×úÅpÝ z¿wä>ÒŠÞGÊDœû-­G½ÏÅ«·õœ;ê·"@. M42{ëhĶ]N¬Ñû™ ÷‘>ô>ÒÄVî×Õï+,^À )HréàÝö¥ñ™Û¾2AïgŽÜGšÐûHë¹ßsî¼·p͘ köÿé/Ñׂ\@ÒhëÐ8ì- É'8¢÷û„ÜGjÐûHºXåþ±ŽSKkóòKx ’‹\@ryÓ8¬Ñ˜ÇÆõ ½Ÿr)@ï#¹b›ûÞƒïo¾{öªšl—ô ¹€„ªªmÒ¨«½W#°ÆaÛå$½Ÿ5r‰Fï#¡âŸû5÷äß;O]ÙØtÐv9@¦È$ŽÆX´Úo5êjìµ]NRÑû9"÷‘Pô>'A¹ºë쬊Í g¨Úïþø•ö#¶+®\@‚h\}ü§¯jÕH«ñV£®íŠŒÞϹ$¢÷‘ Í}•­P0e—>÷æ–ÆVÛ½!L¼GïÅŸû š®ÀYô>AÇP:’Jtî{kêWñ#Ë“ø#Àäâ¯fãž‚¢ç¹0/Xô~°t9Gï#ætܤ£'s•‚ܯxñÝOÓÏ’—_2iÚºî3=¶+.E. ÎvímgáŽÐûaÐ^óåz±¥c¥N]ÇMÚEu µpå;¶+ Ɖ“ÝO<µöº‹?×·Ïd>ƒ¸!O,ì6z?$±]0è}ēޒÌ3^uܤ£§ôåþþ?ýå®™Ï=o»ï¹]{ÛmW|Œ\@Üôœ;¿`Å;<ø;lô~¨´ßÆçqÉ€½¸Ñ‘‘¹+D¿îµ(ݹ_W¿ï3w=c~ØQ¿Ä9CĹ€XÑ8YX¼@ûäБõ ûm—“fô~´kOÖvÖ^­}Ûv9ÀGè}ćކtLdŽt”äÈ8ÙsîüÌ…›ú”é§¾þÖÒéóßæœ!ì"-­GM( R¾xõ6ÆÆ°ÑûÑО¬ýY{µ¶öˆÇVj?·]\Gï#46ê8HGCÚud¤ã#×rÿxg×ÃO¾ü©[>:¾ihùÚ »mWw‘ °NCâ”òõŠƒ¼ü}¡?Ú®È ô~”ÌN®=\û9;9ì¢÷aŽ}td>Ô1‘ËCâ®½íæ²(seç a¹»–WoÿôWg™Nš[Û.Ç!ô~ô´‡k?7‚kÏ·]EïÃ"èÍ…ô¬©bèùŸîø¹¶É§nqýV °Å»µª èyGnˆzßíífån’…ô>¬ð_yãí3¹<òÝgz¦Î©3ÐÞ0xÚ¼%[lW‡ ˆÞ¶Žq“«½¥y6«ô¾EÚçµç›EtÇNúµ:ÂvEp½èéèÆ<“]Ç;:ê!÷¯æXÇ©{t…·ÀÎ[[ZlW' ˆÒ鮳æÑlÚëÆO­a™e‹è}ë´ÿ« ô.ðMD‰ÞG”ÞþÝ{W¸ÿÑä~&¶ïÛå ©è}äBG߿ʀèH„ɺžsçg.ÜÔ¯ Lïˆ~×ל3D_‘ Èš÷™ÅÀ!å|f‘8ô~ñYú„uK‡u~ÐWä2רtpèÈ ž‰–ô~:xÏúTo¾ûþÛå è}dˆç$ÏAŸ ÈĶŽq“«µ« (œ1ÙVžšô~j¨Õ•êM½¡êSu«íŠkô>2ÁsÏS ýHgñ#ËÍg»Ÿ6gKc«íŠSäzwºë쬊Íý/†Âø©5[lW„`Ðû)£ÞT‡ê=U·Î\¸Ik»"ĽÞé¨AÇæ BGä~Òmßyð Ãçš7tøƒ/pΗ#ЋªÚ¦AǯyaGó!Ûå Hô~*©OÕ­zgÕ¹ê_Ûå Žè}\Žt¼`4†è8ÂvELåªsI^~ɤië8g?rW¤YeÑØ¥Ì*SŒÞO1ïLν-áL.Aïãr::Ð1‚¹ÝLG :v°]‚§wyÂÓ¯]÷·wyIU£íŠä.qäØI荒éóßæ RZÑûé¦ÎUÿr¥7.GïãK_n4ŸéHá?~ö¹ŸnþOo»ï9>Ær>fU ³F1«R¤½ïo%(õ5+AÁ ÷áѱ€Ž¸³ÌAoÿî¿?s×3æ­¿ÿÑÇ:NÙ®6‘ 0´x«ÖoÝþGÛå tô¾;ÔÑÞ“bÖ½õ{ÛåÀ2z¢ùÿ¿=ºÂè¸à­--¶+‚Þ*²×ßZÊ*².#ÀS­ÝDï»FÝ­×›®~W×Û.ÖÐûŽ3O¦ÓüŸ'ÓAŽwv=üäËÞS&×nØm»"X@.¸LƒÀf¾‘—_Ò¯ lJùzýÑvEˆ½ï õ¸:]ý®®ÿÁô×iy7Ñû.ÓlÿŸîø¹vÍÿuÀ £¥õ¨¹ŒD¿ ‹ìÚÛn»"DŠ\pSϹó‹Wo8¤\ïþèï¯Ò8`»"DÞw–ú]]¯w_#€Æ¶+B¤è}7i†¯y¾™ðkæOîãrk7ì¾ih¹ÙI8]àrÁAõ ûïøÖBs ¨®~Ÿír`½ï8õ¾™êw ¶ËAtè}×ø/ÔlŸ Ñ‹žsç§ÏÛ\Nܯ læÂMœ3t¹à”–Ö£c&¬1—ˆW¼ø.=î2z4˜%…52ðy#è}w¨Ç5Ÿ×¬Þ,¢y>¹Lë85êñ—¼å†øì õÈGœ8Ù]úÜ›ýOËË/™XZË ÷ah4И`î#Ö(¡±ÂvE½ïÍá½ hnOvím7+Ïë×£íÿÓ_lW„° .XùÊûf]Á¢±KYW½? XgØô~êiÞ~׋¼޳6r±ªæsÉuù%O<µ–s†©D.¤[cÓÁa£+ÍsÇj6î±]b„ÞÇå4J˜³Á74zØ.¡ ÷SLsuÍØ5o77†h&o»"¤A÷™žN=ïâ~uÃài W¾c»"Œ\H«ö#ã&WëÍP8cVÅfž1ŠKÐû¸"14nh÷ÐÒÖþWÛ!`ô~ZU¼ø®y¶¸æí“¦­#÷,M,‹Yn>wþü=Ïnilµ]C.¤Ï鮳ÞtnüÔõ¯íŠGô>z¡qC£‡wBI£ŠíŠz?}43×üÜLÔ5c'÷ÿÎvßÿbgKr!ej6î4|.—{ášè}\“wÁ¹F•W׳F}JÐûi¢Ù¸¹ó—l¥ÊU ÿð¥éއќ3L:r!5v42¡ð¹¯Í©ªm²]âŽÞG†4žhT1 Riœ±]rE遼fàš‡›[º43×üÜvEp‹ÿfÕÿùåܬšhäB ˜åâõ>ö<åâ‘!z™óX£}fÂÓ¯±p}¢Ñû) ¹÷?~™%aß¶s‰YÌvûN®LK$r!ѺÏôÌ_¶Õ¬üÐÄ*u¥íŠô>úJ#ŒÆ³n¡FV«H(z?Ñ4ßÖ¬ÛL¿ïþv%¹8àa—IG.$—º¯°xÞ¾¡#+êöÛ. Cï#;m4æhçüù…l—ƒ>£÷JslÍ´Í”[soºq3gq}¿‚2íŸ×ßZ:uN]Ϲó¶+B¦È…$úÇñØJ½q‡”ÿªªÑv9H$z¹ÐÈ£ñG»Æ¢æ–öËAÐû‰£yõ>[§9¶Þ8Í·ŸY´ÙvEÀ•ïìzøÉ—?uËGg-nZ¾v ‘%¹,j´)åëú¥/ôGÛ!©è}äˆá(¡èýdÑŒZój½ešck¦M£!þþðáŸÍlú¥/ZZÚ®×@.$ˆÿ„¼zÍv9H6zð_®°xõ6ÛåàÚèý¤Ð,úË÷ÿ}RÍñHNe$¹Þ ;Jn@ è}ˆÛ™„Þ?.ºC:tŸé™:çï—:Ï[²ÅvE¸2r!æXÐ!¡÷,ÿrÇc&¬aÙÃØ¢÷cNsfÿ¢ä>’Ž¥â\ˆ-ÿ¿&–Ö²x/‚Eï# <5þèýØbÑ~¤˜ÿQ)÷üûbÎÆ ¹OUµMŸûÚ½5Ec—îh>d»¤½ðhÔÒØ¥ìæ»gk4³]>Þ!Í5Cæ¡ÞH½U5 (œ¡ýüºü’'žZË9Ø ⦱éà°Ñ•zS Ÿ[³qírZô>¦Lã˜v3iÙl—ƒÑû±¢ù°fÅšëMÑ"£1M#'»b‚Þƒ†þ¤9°™ kVLîÃM[[½F(~d9` ¹`]ÍÆ=EÏsI"Fï#bÞÅðñ¸Þ"zß.Íx5ïõ>Ñ|ØvE€eÏ/ÝzÃÅåóòK~4ó ÖÔ¹`QsËaoÉ…•¯¼o»¸…Þ‡ë4â™Å²vím·]Ž‹è}[4ËýqùoÍmSšýjl»" .ü7ÒÞxûLn¤¹`…Y’]¡À’ì°…Þ‡-ÞÃt4ò0èÑûVh~kžÎɲŠÀÕ´´½sÔ"óéù‹žçœadÈ…ˆõœ;_ñâ»Þ#›µçÛ®Ž¢÷a—F?æTð‚ïhl´]‘+èýˆiNûÅÿg¾™âj®K«ß÷é¯ÎâAœQ"¢¤=¼°x6øßZXß°ßv9p½8ÐH¨ñP»¢ÆF¶Ëq½Íc5›5ÓZÍoÙà õœ;?sá¦~eêëo-Õל3 ¹–Ö££¿¿J›zàòÅ«·±WÃ:z1¡ñP£¢ÆFs*˜OOÂFïGÀÌfÿ¯ÛJµ©5§e6 dáxg׃ÿïsF妡åk7ì¶]Qj‘ aÓÎ<¥|½âÀ,š¤?Ú®ø½XÑØ¨Rã¤FK™ •á¡÷æY«æ®f«Ù,;3‹]{ÛÍÅu\qr!TË«·›•ôF<¶²¹å°ír€¿£÷C'5Zš‹ë4~Ú.'èýðøWÃÐ –Õ0€ üæ·»Ì⟺å釟|™™‚E.„dëö?Yaž´ÅæE Ñûˆ-í–æ©¬E¹Õ:pô~4;;éך©š%’4wµ]6Ýgz¦Î©»þÖRóÄ–yK¶Ø®(=È…Àhë7¹Ú$Âüe[yª&â‰ÞGœiäÔøiÎkDÕ¸j»¢ô ÷§y©yš¶fªš¯’û@xŽ;YüÈró)ügîzf3ç ƒ@.èt×Ùéóßî1ÆO­Ñk»"àª~óÛ]ÚQ9‰8Ó(ª±T;ªyT«ÆXÛ¥¹ ÍEÍ]!ú¥9*¹Dcû΃·Ý÷œi½á¾À9Ñ A©ªm4|®6fÑØ¥;šÙ.¸†¿x[»«~·]p Q5®jwÕ«‘Öv9‰GîBóOÍBÍtTóRÍNmW8§rUÀÂêÁëòK&–ÖrÎ0käBî4Wùú˜˜« Y8D²xç܆®äœ[.ÈýiΩ™§æŸÚŒš‹jFj»"À]êÇIÓÖÑ9"rÑ~¤Ó»–iVÅfÎK A8DâhŒÕHë]“¯ØvE‰DîçÂÿy„f¡ä>þÏëoù×y|^ßWäBvÌZ&XëIÄñ Ê[³K#ð¼%[X»£¯Èýìh†™ï<îWbkKc«ÿ~^ÎfŽ\ÈBÍÆ=ÞZèMœ‚@"q<ˆDÓØë=ÓGc²ír’„Üï+Í*½õ 5ÛÔœÓvE®Šõ~³@.ô‰÷¬d%ÏJF¢q<ˆÐ8lÎßÿè ϶ËIr?s<ï H¢'»¿óÃjïy ,îqMäB†ŽwvM,­ÍË/éWPöÔì ÚÓlWä„ãA¤ƒFcÉ™ó.®/w¬ã”íŠâŽÜÏЯ_ßiž€©Y¥æ–ä>,-­GïµÈ|²_X¼`×ÞvÛŹpM=çÎ/^½màrm¨1Öhï²]Ž‘&™5>k—ÖX­[ã¶íŠâ‹Ü¿&Í5{4ÓHÍ'É} ¹^ÛØ|ÓÐrÓÎÿ>aõñÎ.ÛŹлMï|hBA¿¿µ¥Åv9@`8Dúh”öFl޶ˉ)r¿š+jÆh¦ŽšCj&i»"¹ê9w~æÂMý ÊÔ×ú]_sÎðäÂÕp¶éÆñ R‰+:®‰Ü¿"fŒ@ºë85êñ—ÌÙžÿ{謺ú}¶+Šrár'NvÿìÙÜ‚tãx)¦qÛ»ã[ã9w~ù‘û—ÓÌPóC3QÔŒ‘ÜÒj×Þö/}ó\ ~ rá¬VGp<ˆÔÓ®‘œ¡/AîûùWœÐ,‘'¬ªùÀ[-ꉧÖrÎ\ð46¼ëE<Í ŽàxŽðž«ž'Æ^ ÷ÿF3@ͽé5?´]€ètŸéùɬõyù%ϳ[[mWd‡ã¹pºë쬊Íf’0~jö Ûáx®Ñ¯qÞœúÓȯñßvEv8žûšïiÖg¦š’û¶ï<è ÿúà’¶ö¿Ú®(j.çBõ; Ÿ«ØèÊ͇l—DŠãA¸I£½Æ|íüÿ•¶Ë±ÀÙÜ×O3=ïƒÍmW F*W5˜OˆòòK&M[çÔ9C7sAó¢±KÍ| ª¶Év9€ÂeùÍù@ekçÌ}Íë4»37 i¾§YŸíŠÄ‘ÆŠ'žZ{Ý߯Е¯¼o»¢ˆ¸– Ç:N™ë…úžVúÜ›Nû~Âqÿ•ý/ÞD¦\pç®å¾ft朿æxšé‘ûzw ­cøƒ/˜k n»ï9®%p'ºÏôÌ_¶Õ¬.ËzǃÀßzbJe„ 늸“ûšÅi.g&ušÝ‘û2WW¿ï3w=c‘ß{1Ýç ɽ§f½ñ¡#+êöÛ.°ãAÀ£\P:˜ç )/l—.r_37ÍßÌDN3ºÔ¿§BòÑZÄ_,ÓHrý­¥SçÔ¥õœaês¡¹åðˆÇVêg8¤œçŽK(#>ýÕYê ¥†²Ãv9aIwîk¶¦9›fnúû”9þL1¹;ÞÙõð“/›g•þóW~¾vÃnÛ/Ź ·oJùGšT"è ýÑvE@Œp<\·RCÙ‘ÖàHqîkž¦Ùš~:ÍÜ4KåÛÀŠ–Ö£w|k¡¹ê °xÁ®½í¶+ R*s¡çÜùÅ«· RnNóê´];W£ÔõøKæÂ¥‰2ÅvEAJeîkn¦š™ª}ùþä>€0¬Ý°û¦¡åé;锾\ðnQ4pËp5½S‚˜CŒ”Ýxž²Ü÷_Ê¥yZ*/å=çΗÌ{Ó»(½ü—ÿe»¢¤)öÿé/c&¬ñ–‰KÙ] XפY°â³0µòE)c»¢¤)÷5Ó|Ì,õðŸÏÖ‘û¢q¬ã”¹Œ$‹V¥#Nœì6‘ÊË/™XZ›î%a@p<dH™¢dQ¾˜×*qlW”“tä¾)xÍÊÈ}Ñ{w›÷P›»X”܇ڤ VÕ|póݳõS]º£ùír€dàxè“]{Û•2ê%ŽrÇv9ÙKzîkÆ¥y—SŠgJsÉuù%O<µ6‰ç  M‡®Týù÷ΫٸÇv9@’p<dAYcžf«ôQÙ.'ÉÍ}Ͳ4×ÒŒKõÿã—g&ú¨@šœî:;iÚº¼‹£SÿÁÓ*W5Ø®¨oš íG:¿ûãWTù€Â³*6ë]°]0ÙQâ(w”>ê %‘òÈvE}“ÐÜ×üJ³,U®—æ]ä>€¸Q|ó;ËÌÕ Ÿ¿çÙ-­¶+ÊTâr!éA Äǃ@.”>ÿôÕ$ž–L\îkN¥™•™b]Jîˆ3ÿ¥ÃÃD YÉÊ…š{òï—è u€˜àxÈ]o[HPî'÷d;ÇU®j¸!9—4$%v4JÇü@Lp<¥ª¶)AËš%"÷ý7ãhNUñâ»¶+€¾ñßò|ãí±¾å9þ¹²…¾˜àxP‚{ÿÜOÁb}`\²$rSóÿ±]ÑÄ9zΟ¿lkÊ Äǃ@à”ûJ+s*XùÏÇ£Ç9÷5Sò?Ì‹Ü1djlsAÛ­°xj:²¢¾a¿ír€´áx‰2KÉ¥þRŠ)Ël—s©xæ¾fGš#™É’fM1Ün£™ 7õ+(Ó(wý­¥eÏ¿Ÿs†1Ì…–Ö£#[©ª)_¼z[|¶&¡R~)ÅÔeJ4åšírþ.n¹¯”×¼H³#U¥™’æKä>€´:ÞÙõð“/ê–Î}Ý4´|í†Ý¶+úH¬rA›hJùzÅA^~‰¾ÐmW¤ǃ@ؼPÓ¯ø„Z¬r_s!͈TfGš#Åd@¨vím7—Aê×WFüÒú9ÃøäÂòêíÞ©Ôæ–öËRŽãA J4ï¢%írâ’ûšÿhd¦Cšivd·ˆØÚ »ÿù+?à ±8ä‚w«EAÑóÜ2DƒãA JJ·Áߘ‡›â­ç¾ÿr©ºãç1¹\ ¢×}¦gêœ:sÁü _,›·d‹•2ìæÂ¶Ž±“~í-Ŧmb¥ ÀASÆy‹f+û”€Vʰ›ûšíhÎc–SÐ,ˆÜ€c§Ìe$¶Ô²• Þ£šôÝÇO­‰Û²«@êq<X¡¼›ðôkê>[Õµ•ûþåÖÿíÑä>ømßyÐ{àÎð_ˆòœ¡•\¨ªm4|®¾oÑØ¥;šEù­)û”€êA¥¡21Êo}îkV£¹÷8fÍy"ûÖ,+~óÞ€Â-¯Ë/y⩵§»ÎFðM#Î…÷vµ ]i°úÑ|S—ãx°îÕõ»ÍÙQ%£ò1šoeîk&£ùŒf5úŽšá,}¹1‚o ‰¦‘sÒ´uy9+W5„ý#Ë…ö#ã§Ö˜ŸkVÅæhŽv\ ǃ@( •‰æl°RRYöwŒ,÷5‡1?—f5šÛû¹¶ö¿zWVü¯¯?ê•äB÷™ž9‹ëM(Œ›\mëz~ñ¡ÜW>šS¦JÌPWY‰ ÷5oÑìÅÊ]0&[[?ÏÇÃiñ#ËC:gv.ÔlÜSPô¼¾Å],jlâ– .8âF)in©Pn*=Cú.¡æ¾æ*š±˜©Ëg‡ÍÑL&ŒïNùheæ‹‹pæå—üdÖúÀφ— Í-‡¿ùezñ›ïž‡'ððãxˆ'%¦rSí© U’þú!徿'š¥˜^4o±õ-H¥'»Ÿxj­yrë·Ï\UóA€/F.ë85±´V¡Ð¯ ìgÏnŒ~1m×Äñ [æ‘LÊP%©ò4ØG3„‘ûš™˜ç*j®ò½Ÿ¼Jî@ZZÞ9j‘¹ã_бko{ /l.ôœ;¿xõ6 c&¬Qͼ,€Àq<Äœ2TIjN+[•°¼l°¹¯Ùˆæ$fr¢Y ¹a««ßwÓÐr3ðŽzü¥ÜϘ ª­°x^M¿ozçÃÜ_@x8¡¾a¿—­ÊÙÜ_0¨Ü× Dó3!ÑÌ$úÜ€³zΟ¹pS¿‚2Àú]_çrÎ0\ðÎaRà9LááxH sí6korÏý`ç!€ìïìúßÿ±Ú;/·î­ßg÷:9æÂ‰“ÝSÊ×{÷8¨ªì^@Ä8’E ûƒé¯›{ó•¼Yߣ—cîk¾á]§ôíñ«È}°k×ÞvsIÖ×íç’ Þh#[ÆhÂÃñ DJ[en.kwgûþu 4÷j@îªj›¼u½ùÑoútÎ0»\x÷ýCGV„ýŒ$ááxH®uoýÞ<ÛWY¬DîÓ¿Í"÷5¯Ðì"¤uÎè>Ó3uNÝõ·–öõ¹?}Í…mã&WëŸ (œ1ÙÖÀŸ‡ ‰¦üU ›³ÁÊe¥s†ÿ°¯¹ï²fä>ÄYû‘ÎâG–›k9n¾{ö–ÆÖkþ“Ìsát×Ù™ 7õ¿ ã§Öè{Q2;8R@Y¬DV/+•ÑJêkþ“Ìs_³sWˆ~ivAî@Rlßyð–gðá¾Ðû9à s¡ª¶iÐð¹ú›_óÂŽæCÖ ÀŽÔP.ßûÐu´’ZyÝû_Î$÷5sÐüÁL$¾0|®æÖ ˆB媆…34’_—_2iÚº«3¼f.ô)e$ǃ@Êxgn•Ú½œ¹í=÷5[МA3scˆæ¡Õ Fõ‰¥µ½ê½ä‚ÿ*”éóßÎä*IÁñ >™ÜÙÑKîûÏ$Oxú5rÒÁÕÇm÷=wÉUWÌ…¬ïRiå­ü¦¿|å·+æ¾æš!dx§ ‰67ìÿÌ]Ϙ¡þþGW9vÒü÷ËsÁ¿ŠõÖí´T/€pq<¤›ÿÉPJvï¿_’ûšhV`¦š'¼ý»ÿ¶T/ ÞªÑ×ßZjVöçBîO¹.Pš›5B•ïJù ¾ãÁ¬ŸTH´'»~òe全ÿùl¾øÍowý`úëyù%ý ʦ”¯?ÞÙe»Láâxp„r_É®|WÊ+ë•øê}¥¿¹+DóÍ È}pMKëÑ;G-2ׇè×ÿø—éú}ô÷Wé¿Û. @8œ¢|3a—øæ×Бä>¸ìç¿ü/³ú¨YžšÓƒ€;8\£”72+ˆj`»"€5ÞyÂøÒGç ó.ö+(›¹pSϹó¶«:Žw(Ù•ïJy/ñͧ„š ðù ¸æÄÉîÒçÞ4÷L,­ýõë;•ú}Ôã/}¼¼ØÏÔÕï³]&€pq<8B™®d7¯¬÷r_s³n€fšØ.o±¢±K/YgL_ïÚÛþÅ‹OšÐ¯;G-âœ!b©ç_+  èy¥ü…Oæ¾fßüÎ2Ö466ºÒ$BÍÆ=Þ¿üùƒ«j>0kŽ]—_òÄSk9g¤ǃ@Š)»•àf‰eº’Ýû_—ç¾fæ¹Ãš'h¶`£^@ˆÚÚÿ:nrµÆù…3fUlî>Óãÿ¿—ç‚èïühææƒOûŲßE[2€Ðq<¤•RÛT4v©FòÏ}mNUmSïùš¹`T®j0kSçå—Lš¶Žs†@Òq<¤ƒY¹lnñø‡/MW^÷þ÷3Ì}ÍÌYeÍ(4¯®^@ˆŽuœšðôk½ûž–áòÑæÂ…OÞœ> p†ÿæt‰Ãñ ÊbsWHæKÀõ)÷5—èñVDÍ.4Ç¢d@(ºÏôÌ_¶Õ¬ úÐĪmþÃÌsÁÐ+ßóï‹Í)·Ý÷Üö,D$ǃ@¢)•Â&އ® 5÷ÇNúµY§T3KV§ÄA]ý¾Áߘ¯±zèÈŠú†ý}ú·}Íï;~殿?Ü–s†@âp<$”2WÉk"XY¬DîÓ?Ï.÷5»ÐCÿPó¾~G@xš[xl¥ÆçCÊUÕ˜Å+d— Ƽ%[ú”éŸ_kéÔ9uœ3„ãA q”³J[e®šWù;gq}/’Kî/¯Þ®ù†þ¹æšdñ € ïìšR¾^q _úBÌîurÉSÆÃO¾ü©[>:KyÓÐòµXˆ HŽdQÂ*gÕ¶Ê\%¯ÅÜdúÈÅâÕÛ¼tøðϹ¼T޹`´´-,^`®]Ñ9– I¡T 0dƒÊ}ïò$ÍIry)@Ÿxð+¹€?\0‚:u ñÆE8æ¾æ!æ@5‹å }u ­cÌ„5/ð`.HϹó¹ßÚ 1§ ã&ýÀsß[Þ\³”Ì—9dÎÿ ‰¥µÁ.æl.9.} ±ê"Þ!徿'yù%™?þ¡ªÚ¦›ïž­¡»hìÒ͇ý0rÁÈúÑH"Àñ CÊJ%f¨ù /÷5KÑ\E/®y‹f/¿>¸¦±é  …AÃçÖlÜÒw /ŒU5üÏ/Ïз¸.¿ä‰§ÖrΈ ŽXQ>*%••jÌ…3”ž!}£°s_3–ü{ç™SÁšÉ„ô] ÝÚt>þÓWM"̪Ø|ºëlxß+ì\Õ?iÚº¼‹÷_š^¹ª!¼ï Cñ¡dT>ª%••JÌä¾f/šÃèi>£YMxß RÆ?„Ž›\ÁA.úYî{øWæ˜Ïßóì–ÆÖ°¿#€^p<ÄÒP™hÂñÞ‡–¤,÷¿ûãW¢9¹ éP³qOAÑó_bY.þà+~d9ç [8ìR*£?Mqî{7¿h†ÞÍ/t»ö¶{·`¯|åý(¿uĹ`,\ùÎ —KÍË/ùáô׃ZC@æ8lQê)ûÌmJÃ_,û]”ßÝJùÀ[Osž(¿5Äœõ%š­äÂ…OÞ8ãí3ûqÀq<X¡¼3O복̚ÅÜ7ÏÒœ'ð‡g@õœ;¿`Å;Þ#\[ZZ)ÃV.ûÿô—;G-2WË=Ï9C 2SÆ™»BôKÙçlîkÎcNk¤¹•2Àººú}…Å 4Þñ­…õ û-Vb7ŒP¼ àŠ8"£\Sº™˜ûÌÏ(õ,‡Ü×ÌgèÈ •¡¹Ý­Ñki=jBaàòÅ«·Y?3‡\¸pñÓÒ™ 7õ+(S1×ßZ:}þÛÖ· nP–)Ñ”kj7eœ’ÎzºÅ'÷5 Ò\Èœ ¶õi)Déxg×”òõŠƒ¼ü’Í|C´]ÑGb’ †¶ÉÃO¾lΠÞ4´|í†Ý¶+R‹ãA lJ1e™ µ‡&V‘û—3S#Í‹4;Ò1ÙD†åÕÛ?ýÕYG<¶²¹å°írþ.V¹`ìÚÛn.¦Õ¯¡#+8g„ãA ¦Gs3ÍÐ4O³]€4{kK‹ ý®¯m—˜4å‚¡Ÿå¦¡å&¾¿=~ÕñÎ.ÛqÄñ Ð e‡ÄD‰2eÝ[¿·]Q`Ò—û›Þù0•34ñ‘î³OéË… ?ɹpS¿‚2ýhú]_§ì]rÇñ pE©O´æ~ú®à'Nv?5{Cº¯NOe.Ç;»F=þ’wv7•?#5ŽËù¯0Q‚ûÉ¢ÜOÓ ¬sdõªç‚‘Ê»?€Üq<øùï@ÿ—â_¤øôÔç¾æl#[™‚àXÔØtpèÈ Gžn“ú\0ü«Ã}ï'¯rÎàx0”ÊwV¨v$÷Sð„hVhë7¹Z£Ç€Âó–lqáIvŽäÂ…‹Oúɬõéxz;Ž Ÿ|‚­2‚ÜO½›z5£ÓÏ«Ùæx¶+k§»ÎΪØÜÿb(ŒŸZÓ~¤ÓvEq' ½³Å,7W}vØœ-­¶+ìàxŽÓø¯0q \ ÷ÓJï¬æuú‘5ÇÓLOó=Ûˆ£ªÚ¦AÃçj¬6ºrGó!ÛåDʵ\0¶ï<ø¿¾þ¬™ ðÎÂAÂYó5ò›P(lW)7s_³;Íñôƒk¾§YŸírĈƇ¢±K]ÜÌ£rUƒ¹Œ$/¿dÒ´uœ3„S8„ƒ4Îk´77hüW خȗsß;ÿ¯¹Ÿkçÿ\îȱ“Þõ¥Ï½é챀˹páâÜà‰§Ö^÷·¹ÁÒ—mWD„ãA¸fÅoÞ3ç5ækä'÷mb‡ÞwÍú¼ûƒ4´] ºÏôÌ_¶Õ¬6ÉýÅŽç‚á¿vè¶ûžsíÚ!¸‰ãA¸C£ºÆvî0Èý ¾õ5ԜЅu„x4zë×7ì·]Ž}ä‚§®~ßgîzÆLþíÑ©| 1àáx.ÐHnE§_á5ÎÛ®È>rߣy ÷|16àïù¤Ÿþê,žOê!.ñÑÚã_,Ó6¹þÖÒ©sê8gˆ´âxé¦Ñ[c¸Fòž1ôÅ2ž1ä!÷/¡9¡f†Ú&š%j®h»¡8ÞÙõ£™oäå—ô+(›R¾^´]QŒ —Óòð“/›gÿÓ?_»a·íŠ€àq<ˆÓ¸ýÏ_ù¹öpäÏÉ}?rÿrÚC4?Ô,QsEÍÙa€4é9w~ñêm‡”kèõøK-­GmW;äÂÕhoùʈ_š«Œ ‹ìÚÛn»" H"•4VkÄ6C·ÆprÿräþÕhoÑ\QGóFÍ5‡´]€\Õ7ì¿ã[ Ídž[®†\èÝÚ »oZÎIf¤ǃHÿ¥·¹´ãjÈýÞiÆhN)hÉB@rµ´3aY6jÁŠw8ÃÓ ráš´ÿ”=ÿ–¹ ¥_AÙÌ…›Ø£"M42k|6·~kÄf”î¹MÚ4{4 Ñk>ɧÌ@²œ8Ùm+“—_2±´–%"¯‰\Èö%s ‹Ô!8D:ø—†Ö(Mî_¹Ÿ!íKšIj>iT­¦íŠ\ÛÊWÞ¿ùîÙåŠÆ.ån¯ ‘ }ÒÔü¼‡XÝõÀ¢ýú‹íŠ€,q<ˆ¤;ÐÖ¡qØ{t¬ÆgÛ%¹ß'šOjV©-¦¦æ™¶ËpUM‡®4O©Ù¸Çv9IB.daUÍæ2’ëòKžxj-ç ‘D"¹4êjìÕln јl»¢$!÷³ ¹¥yzµf›šsÚ.À'´é7¹Z: pƬŠÍ§»ÎÚ®(aÈ…ìhO›4m]ÞÅÙÈ ƒ§U¼ø®íŠ€¾áx U¹ªA£®ö^À‡Éý¾"÷³£=MóLÍ6µõ4óÔüÓvE>јÿôU3;äB.´×}ó;ËÌÕJŸ¿çÙ-­¶+2Åñ Gc¬FZ3äjì%÷³CîçB{æœ| ÄAÍÆ=ƒ†ÏåƒûÜ‘ ¹óOQŠÆ.eŠ‚Dàx ÂÉ·‘û¹ónSÒ\”Û”€èíh>äÝØ[UÛd»œÄ#‚R¹ª¡?—0!98D"ø/Î׫‘ÖvE‰GîE³PoCÍNm—8Á,ük…ƒB.È¿ÄÁ?~™%k"þX¼+ ä~€¼Çœi“ò˜3 TÝgzæ/Ûê=ô@[‡íŠÒƒ\Ü%K oßÉṏ#Žgïïnó?܇ܹ8ퟚšÕn5_Õ¬ÕvE@ÚÔÕï+,^ .:²¢¾a¿írÒ†\ HFÌq<ˆxÒh©1Ó žE5–Ú®(mÈýhŽª™ª¶­f­ì·@PþðáŸG<¶R5pHùâÕÛl—“NäB¨Êù_ý Ê´…¯¿µô?Ÿ­ë9wÞvEÀÇ8DÜh„,™÷¦FKí™95~Ú®(ÈýPi¾ªY«¶°f°šÇÚ.H°ã]SÊ×+ôK_è¶+J-r!lÚ{~òåOÝòѹ–¯Ý°ÛvEÀG8D¬hlÔ©}R£¥ÆLr?<ä~ؘĹûUU£wj¥¹å°írRŽ\ˆÆ®½íæ²gýúòý ZZÚ®®ãx1¡ñðŽo-4ãÆI–¶+J9r?šÁz¹ifk» 1¼K¯c>—^Gƒ\ˆÒÚ »ÿù+?ç8â€ãAXç¿|Bc#—ODƒÜ’f³šÓ²‰mM¬bi¦è‘ Ó¾=uNwƒÌ¼%[lWGq<»4úÝðÅo¯Ö¨HîG†Ü˜‘|ÍuY,¸œÿÑ-ž~e#F.X¡ý|ä÷^d=XÄñ lñ/¿¬‘ܹo…ösÍryˆ6p¹ªÚ¦Ï}mŽº£hìÒ͇l—ã"rÁ¢í;zغçßsÎQâxÑÓ(7üÁx<«]ä¾EšëjÆ«í¯Ù¯æÀ¶Ë,kl:8lt¥:bÐ𹯮ç–kÈëV¾òþ€Âz®Ë/y⩵œ3D48D”NwÕø¦QN{F<{¶+r¹o潚ýê]ÐLXóaÛå´é?µÆ$¬ŠÍÊÛ9\ˆuÁ¤iëòþ6Sª\Õ`»"¤ǃøÿÙ»ﮪ;ßÿÿC‰Cë½Þѱ®©ãm”ÒR[Q¤JýÊŒôV–)ºd©­E;ÌBZ­-Œ†_iP¥P~HÑ J•Z~¨ Y0ˆA‘Rj®¤Hœ@¡Áð#ß—l»ç!|~œsö>û<‹Å¢’Ï9g¿öûó9ç½S£9ͼë¥YNs¹ï¹ï]Z›ëB«b­]HIÇ‘N{òßyÿ¢æ–O\ä‚GtE|çÖ¹æNªK®²~ãG®G„Q"6ïÒlf¦5Íoä¾È}èŠÐzØ~DBW%¯nåû½>Á‡ã¾!|³¦¡É.ŸÝ5÷ ‘êA$Js—f0û—f6×#ÂgÈ}ߨG¨´NÖjÙõp€DlkÜmž½øšGç-Úàz8ørÁOŸvb?Ùt·¢²êç5¿ç=CÄŽz Ñ|õ‹IËÌ ðšÇØUÇ7侟´BÖ:Ù´XÔÊÙõp€Øìk=4rì…BÏ^ãh®ë'rÁ[º^î½ØìÔ|þÕµu]A¡D4S™}Ö4wÑ ËOä¾·ÌlZ3kå¬õ3[± ë:Ÿùì[&†Žx¾±i¯ë¡kä‚çtí\=x–¹çê«ÿ4mËö×#B ¨/ÍN_»ñ×f²Ò¬Eî{‹Ü÷œ®­œÍ[ÁZKkEízD@)VÔÐgÐtÉú½~ý×ÃAwÈ…LÐ5õ÷}'™…ÖàáÏñž!ÊG=ˆ¸hFÒ¼d&(ÍTš¯\Ý!÷3Aëg»–æšB¶46íò“Z½\Y3gÁÛ¼§á?r!+t5UÏXÕ³×8¯¿¹|¬þÌõ…rP¢|ÑyI¿3/e¹Ÿºš´–ÖŠZÇK«k>s‡ÿö·µ?X³ÌÜóüÓ ¯êº B.d‹®¬ŒX`Þ‡¿°oÍâå[]YE=ˆ2½²r›f!3i^"÷³‚ÜÏ]YZW›^Zis¡Á[¶'ÒMwϧ'R¶ Y´e{‹¹„çtP2êA”,ú\³æ"žkÎr?‹´ºÖ›^ýðÓÚ ê{óL³gÊÒ7þàz8(¹]/¾ºÙöñ6êEúø¡(Ôƒ(æ™;~¶Èö=Ö,äzD(¹Ÿ]Zi›½¼µöÖ Üõp€;›[1I„iO¯e´Œ"2M×ݘÉ+ιl,û|¡XÔƒ(–ÝUsŽfr?£ÈýLÓu§U·y7Xëp­Æ]9u¸ýè„iož{2îSײ§ÍõˆP:r!ºÝ5ÏÜ»uñ5®¦©/ @=ˆÂ­ih2O…è—fr?ÓÈýèÔ \ÇQ«q­Éµ2w="äËÂ%›.ð˜ÎÀëo›ûÞ¶]å"‚±aó®Êë§šÛ€[Ÿä=Ctz…ÐL¢ùÄL,ša4ϸÊEîCëp­Æu4µ2×úÜõp :ë®ú$g]`È…ÀÌ®]^Ÿ‰:¦=*«FŽ]Â{†8êAtO³Ç¨ñK5“è<Ѭ¢¹Åõˆr?0ö“­Òù¤ɉ~*]=c+Ì áѪJUºG=ˆnðÎRÀÈýðè Õúœ'¹óÔª žZ ¹*îòB÷¨Ñ%Í—ßð8wžŒÜ•íô¨u;—º•ïÛ®¶o½»Óõpr!l«×ï  ºD=ˆSìÙwÎTy@î‡M+v»œVò®‡ƒ c×Ëü ò€.ñ8õ ,v®Ér?´z7ïk=¯U½ëá cö·µ»¤¢²ªg¯qÖ,c‡ëà‘ 9¡kyبÙEõ Œßý~‹ÙËLóƒf r?xä~NèZÖJ^ëùŠ“Ok…ïzDÈ€ÎcÇç,xû‚+k4K ñ|cÓ^×#BÈ…\Ñu}õàYæ~°>ƒ¦oÙÞâzDp†zš4˜ A3¹Ÿä~®èºÖª^G\+|­óµÚw="økÕºM(è÷õ¸ÒC.äÐâå[/ì[c?±€÷ ó‰z0ÏtÕßúoÏ›I@³æ×#BzÈýÒÚÞ®óµæw=xǾopþÕ¼oCäB>éJ¯ž±êo.ÿôq¡ž½ÆéÏ\ûyC=˜OæÚ×U¯£¯€k?‡Èý|2÷š›Ã¹ÖƒMYiï+Þ×zÈõˆà¹gºêÎ|Fð÷}'qo@®Pæ®ñ‹®šd.y]ûä~>‘ûy¦«Þö QÀóÂ9gûÝxÇÓôÊ3r[¶·|õŸ¦ñ QÞPæJôÙa]ï<;œgä>´ò×úŸ}ò¬aÓ®~·Ìb_äŒÚº¶Çà=£óžað¨sBײ®è•UæÁ]é®GÇÈ}vŸqÕª\)ÙÙÜzçý‹tÜÏë3qòœzö à rš~^óûŠ“ëFö õ`<ñÔZ³÷¨®k]Ýä>NûˆÐœ Š@uN Õª\ :Ü~tÒÌÕæpß;¦®eO›ëÁäN¡ùaÐ]óÌ}e—\;eMC“ë!ÔƒaÓ•«ë×\Ⱥ¢É}Xä>N¡ùAÕùÀHõ‚ª×#Bü½¶ùÒé(÷2û-Í®‡¿ èÒúÙÅäwnÛÜò‰ë!fÔƒ¡ÒÒN׬}KGײëÁ/ä>º¤A•‚Î U ª\±yoÛLJ=eŽìÂ%›\>"ÐÙµëÍ}•U£Æ/å=ÃP†GW¨®SsË·®\]¿®G‘ûè†êó)’*Õ®‡ƒ²ìk=d>ù=·÷ø±¿Nkœ ¹€îE›Qh…9ÿ¥w]ñ  LmÝFóî®VZB¡ä>º§ÙCµÃ¹'=V5ÁÆ4YÔq¤sÚÓkMŸÀa£^äÉPt\@!4“\ûƒ9æ´Ëox|Ãf‘eõ`0t=êª4—§®SrÝ#÷QÍ$ª#L_bUt£Êõ˜Î±}ožY¿~‡ëá ÈN3Ì—ú=b–7ÿøYÞ3Ì4êÁè<ü9sIêÚÔêzDÈr…S5¡šÂìRÇ ã¿m»oº{¾Ž×WÖ°³$ G. XSç®éÙkœN›s.;fò Þ3Ì(êÁLÓu§«O× ¢®Gv‡AáÈ}K•…ê 6ª5Tq¸º°¿­ýÁše•UJýAÿÓõˆ%äJ yæöû^øÂW>ýTâï¾õ«ÅË·ºŠF=˜]ºâ.ìûéÚL× ®DrE!÷QSn¨ÖPÅA¹á•ÎcÇç,xÛìM{]ÙC. dšs¾ñÝéæ^µ>ƒ¦oÙÞâzD(õ`mkÜ­kÍ\tºúÈ}”€ÜGÉ4çØÛUƒ¨q=¢¼³7ô*¸¡%#P&>ªÈ(êÁl‰~(¯+ŽåQ2reRÝaÞ˜¢]‰C;>úËÐÏÛ†?Ôæ(¹€òiú÷)ÿý(SÍoþÃõˆpvÔƒòȬÕö¡]]kä>ÊAî£|š…ìvªJT›¸QŽØ A**«FŽ]Bs?”\@\hu˜-Ôƒ™mê«ë‹ÜGùÈ}ÄE3’êU%lwžšÚº_ó¨.áÞzoÛÇ®‡ƒ@ ˆWt+´~·Ìb+4oQzN×Î5ߟͦŸˆ¹x©*Qm¢“JuŠª×à Væ]ý‡| •×O­[ù¾ëá (ä’ Dø_ßøô6’•U÷Œ^Ì{†¢ô–®]5ºvt€t±¾B¼È}$AŠêZªYT¹¸NPZö´ýèç/éµ=¯ÏÄI3Wn?êzD ¹€„h¾5~iÅÉ5í¹½ÇÏ®]ïzDøêA?éJùÛ¯MСѵ£+ˆÜGìÈ}$Dó•ªÕ,:ÁT¿¨Šq=¢Ìã%E:È$Js—¹D¿.¹vÊš†&×#Âg¨}£«C׈¹XtÕûH¹DñaV\øÈ©!‚èB÷Æ;žf¡ëêAèŠt×<Þ6A:È}¤€‡ÝÊÁ#™H¹€ÔÌ|ö­/öÏpž ôAÇ‘N{[µ®]#®G„ð‘ûH Í0‹EËV8A. MÑFç_A£ —¨Óùovï¢íÒDî#Ml–W ¶t„CäÒ§Y®ß-³l#ýMÛþËõˆòˆzС-Û[¢Û²ûH¹ôi–ScÞ VÕ£ÚÇõˆü²¢þƒ>ƒ¦ëõé{óÌúõ;\¹C.À6Úv‹zÐ ç:ÛÍi¯ó_Wë!wÈ}¸¢JGõŽN?Õ>Ì~FcÓޛ×ä‚+kæ,x›JN pHó^õŒU={ÓIxÎecÇ=ñ3aj¨S¦s{´7užëe×9¯3Ÿ³NûpHóžªÕ>: U©r="gö·µ?X³LqPQY¥?èºò‹\€sšo¿ï…/|åÓOL.ì[³xùV×#ÊêÁ4é¬Ö¹­\ç¹Îvr‘ûpΔBªƒT 峚·hƒ-Š·5îv=ä¹OlÙÞbnž×¯oÝô›<¿g˜êÁ endstream endobj 145 0 obj <>stream tèL6÷G™[¤tž»òŽÜ‡'TÙ[%U¹NJìM³½>ÁM³ð¹¯,^¾õóW|Œ’êÁ¤E?øÖYÍß𹯨&Re”‡V*;›[‡zÑ6Õé8ÒézDÀgÈøF3ä˜É+ÌcV_ü긩s׸Q˜¨¥óÖì¶©3Yç3¹ûðfH»Õ‚*&ÕM®G3»é†~À{ÇÔÑ@¾!à'Í–ÿ÷‡ÏІ19Ôƒ ycM£mœ«s˜Ü‡oÈ}øI³¥j%œmžpɦK<¦Ÿkà°§ÞÛö±ëá] à³ ›wÙmÚÜúdxï:D=;Ÿ:KíÆš:{]蹟©bRݤST5”*)×Ã)Ë;[šû™m~–E¯mv=àŒÈøï©Îë3Q'jʪ{F/>Ü~ÔõˆB@=#“ÿúÐ+:?õ’ê\ÕëzDÀ‘ûðŸª'ó™šê)UU®‡S´–=mæ³N%¤™«Y·Àsä2Asé¨ñK+þºÞž]»Þõˆ2z0.:Íû:?u–’ûð¹LÐ\ªJÊÌ®ª­Ta¹QA:ŽtNžSo†}çý‹¸¯ ™@. C¢÷ãýãuS¸¯ÔƒåÓhÞÁæ~fd¹ ѼªªÊ¼¬:ËóÞ\u+ß7½RûÝ2«aKd¹€ÌYÓÐôý'›Eø »æeå=CßP–CgÎ=sêlÔ9ézD@¡È}dŽj+UXfÏ>Õ\®‡Ó…m»o¼ãiðâkÍÏ^й€Œ²ýü+*«~1i™çïzˆz°4f?së²Î@öCAæûÈ(ÕYª¶töªòRýåz8ŸÙ×zhäØ% …ž½Æ=4ee0mQ‘+ä²K³îñ²Ùïûü+ªkë6ºQ–P–@ç˜Ù!KgÎ=rYDî#»4ëªæRå¥úKU˜Û }:Ÿ³àm CG<ߨ´×á`€r È:ÍÀWžeîÜûú _oÙÞâzDÙ@=XW}M7§™Î7rÙEî#ë4«þ2o«"S]–þVÔ`BA¿¯Z÷aúbD. :‡/ì[c–냇?Ç&àgE=X ýmí:£Ì©¥sŒÙYGî# ªÂlE¦ê,µïk«Ñ ®¬qUñ" ÍÉÕ3Võì5N§´~ן™¥»A=xVœQ¹`˜;6U—¥sÇæƒÖ,³w«îokOôÛ©!ÍÏß¿·–OsΊz°{ÑOœuF‘û¹Àh~¶]T¯%ôd·ífsÓÝóýéfÄ‚\@xÚ묨Ï$úDªÎ"žHE`È}I5š*µ$v|xëÝ}ožéón@™È,Ú òG?‰nQÔƒ§Ó¢ó„޵¹€ÙáUÁ©Ž+ó«íln½óþEújçõ™8íéµìl…P‘ »Å õà)¢;Zêœ!÷*raÓì­ÚMœÎsUsªéJø"‡ÛVÏXuîÉP¸wL]Ëž¶ØÇ øƒ\@h&t×è¬0§‡Îra#÷‘šÉUÇéTWM§ÊNõ]áÿvá’M—xLÿöº¡O¾·íãä x‚\@~lؼëÿœœáõkÀ­O–öža0¨Oœ¼Hg‚9%tnè q=" qä>òCÕœj:ðªï üû×ß6×ü}U…Ið¹€¼™]»ÞÜFRQY5jüÒ¢Þ3 IÎëAw}s#±Î®G¤„ÜGÞ˜Ïûºÿ;ÑÏ'L{3·kä¹€ÒWòó†@¦‘ ȭ轂—ßðxÞîÌg=¨£¬cÍ=ÃÈ3r°–¾ñÛtí†?¹à¹€œ{ó?ÿß—ú=b „ïþð™}­‡\(%y«udu|ÍÖ×qw="À r8‘ä~…@æ À‰È^ç\66'{ ä§4{ŽèȲçp‚ÜGîíokÿé„W+*«zö÷`Í2ýO×##C‰pû}/ؽÈ/ßêzDÉÊI=¨ãhž Ñ‘Õñ%÷r¹Õyìøœo_pe.!?©mlÚëzD€È JéÐ÷æ™æ®Â>ƒ¦oÙÞâzDI ¾Ô±Ó4‡RÇ”Ü rùT¿~‡ ý¾¢þ×ÃÐ%rE.gµe{‹ÙŸH¿® Š\ŠÕ²§mÐ]óÌ݉—\;eMC“ë•"Óõ ^s½òæèX舸ä> Š\J-In¸ý·™+I2ZêuÖ«õbpˆÜD‘ @9f×®ÿÛ¯M°·,n?êzD…Ê\=¨×V¯°¹YW¯¹^y×#2‰ÜD‘ @™¢-Mþç7&f¥¥I¶êA½ªzmƒiæ8Dî¢È ;›[û™m·<ذy—ëEVêA½’z=Í {Í÷gëuv=" ÛÈ}@¹Ä(C[¢û_êÕÓkh^L½ªzm]¹ˆ"€ØMžSß³×8]Yç\6vÌäÇŽ»Q|®õŠéuÓ«§ê•|dÖj×#ÂAî¢È ûÛÚo¿ï…/|åÓ϶.ì[³xùV×#:•·õ ^+½b›^=½†z%] ¹ˆ"€äüñÃ?÷4ÝÜñ¨?46íu=¢ÿæa=¨×'úrmkÜízD@€È}@¹$Íϼ¼ªýÿ8¹ˆ"€téŒ>7uî×#ò¨Ô«}ÜR¯•ë!#÷Qä¯fúPf¨+ rE.)‹n¨wíæ¸ÚPÏm=¨ŸZ?{†¶k‚Aî¢ÈÀ‰Úºçõ™¨«¯GeÕ=£8Ø‘ò\ÕƒúIõóê§Öw×+ ×!å9Gî¢ÈÀ•ÃíGG_Zq²2ú_Ÿ0»v}šßÝI=¨ŸQ?©¾¯~jýìzÒüîNû€Ï#·Zö´]Û\sçä%×NY÷ÎÎt¾oÊõ ~.ýtæÇüέsõS§ó}œ‚ÜD‘ €Ö44ÙriÐ]óR(—R«õ³è'²¯~Ò¤¿#€nû€(rðǯŸþÏ/öon§| úµDw^H¡Ôø^ó{sC¬~®'žZ›Ü÷P rE.^‰¶[9ÿŠêäÚ­$]jä¿Ã†9ºDî¢ÈÀCM{¯<ËÜcùÕOlÙÞû·H®Ôh¿úOÓÌàõSèg‰ý[(¹ˆ"o}º]ûÕImמD=¨jœfÀ]5Iãñ‹ˆ¹ˆ"Ÿu;^=cUÏ^ãtžsÙXýYÿ%–¯o=hÆù7—Õ×Ôhc'€x‘û€(rðßþ¶öÛF.4Ÿ»]Ø·fñò­åÍëAG£2ûõßž×hËÿšBî¢È +¶loé3hz\ÏåÅRFŸsÔØ’xÎ@¼È}@¹dËï~¿ÅôíüÂW¾ý¾JîÛYf=¨ï;lÔ‹ƒéƒªQ•öu¤ŒÜD‘ @æté3yÅ9—5ûúM»¦„/RN=¨ïhöIÔ4’D÷I/rE.µgßÁïþðs¯æ—ú=²zýŽ¢þyiõ ¾ËÅ× Š\³¦¡)Úõ¥eOÛé§›zP_ÿÊüs}}µä‡ %ä> Š\BÕý®]Öƒ±ìdÀgä> Š\và`Ç]üÎî¿pÉ&û^¾øêf»Óý?[TòN÷|Fî¢È xM{¯<ËÜÿÙgÐô-Û[N|¾ÔÑ7ASßõ$…ÜD‘ @N,}ãö­1Eß¿ü낟²BÐï?±ÀüGý¿¯¬Üæz˜’Eî¢È ?:¯ž±ªg¯qºê+NîLa~×Ñ×ÿëz€Gî¢È oöµê?d¶ùLP¿ôgý׃rE.¹}–Ðþâ™A ?È}@¹äă÷Œ^l{šÇ‡ŽxÞöÕÿKOQ xä> Š\òÀîEXQYõ‹IË:ŽtÚþ¢ú³þ‹y=à‘û€(rÛš†¦K®bî t×¼–=m濟²ÿ þ»þ_ó×ô÷õ¯Ü @‚È}@¹„ª¹å“ïÜ:×–x6ïŠþ¿§ïG/ú;ÿxÝgÅã€[ŸÔWHwÈGî¢È <‡ÛŽ¿ÔÜz^Ÿ‰³kןþwº¬ ý}ý+ss©¾Ž¾ZòCrE.™ÿÒ»¦šëQYuÏèÅgªæº©Oœ¬(õo{üµ¢|æwï$9dé!÷QäŒ ›w]~ÃãönÏÍ­ÝüåîëAC_A_Ç|A}åSî8Eä> Š\°¯õÐÍ?~Ön_ê÷ÈŠúÎúO © }5}MóÅoº{>›×™Fî¢È Ó:ŽtŽ™¼âœËÆ~º[ÄWǾ[Dáõ ñéŽ_§¢ï¥ï¨ï[ê¸Dî¢È »/ßúwßú•ÙMþöû^ØßÖ^ø¿-¶}}}³£½¾¯¾{ñC่"€,Ú²½¥Ï éæÎo~oFcÓÞb¿B õ ¡ïõ­›~c¾µÆ ‘û8Dî¢È [¢Ò]Ø·¦äéJ® }_}÷Ò>šà¹ˆ"€ ©ùÍôìõÙC|US_ï Š\œsÒ†%µzðDÂq…ÜD‘ €C·iH³4Ú8@QÈ}@¹8á|÷ôëAC?©~^óƒëÐëò€œ#÷Qä²ÎcÇÇ=ñÆ9—ե׳׸ꫜ ÃU=hÔüæ?ô³kzª¦¾®×ÄÉ0€"÷Qä¦ÅË·^Ø·Fݾòðí÷½°¿­ÝÕHÜÖƒ¢Ÿ]¯€^ C¯‰^W#r…ÜD‘ @:›ö~ë¦ß˜û$û š¾e{‹Ûñ8¯ ½z5ÌËòÍïÍЫäv<@ðÈ}@¹$-úAØß}ëWž|æI=hè5Ñ+ãÃǦ@ðÈ}@¹$jêÜ5_üêgÊ™¼¢ãH§ë}Æ«zPôÊèõ1UêÓëæzD@˜È}@¹$$ÚHó¦»çûÖHÓ·zÐЫtóŸuØv¹ˆ"€Øílnpë“v£½ ›w¹Qü¬ ½bv[F½’inËÜD‘ @Œ·½gôâ•Uº¬Îë3ñ™ß½ãzDgäs=hÌé]½†¤^O½ªzm]¹ˆ"€¸Ì®]oꗊʪQã—z^¿ø_ž8Y_땬øk}­WØõˆ€Ì#÷QäP¾ ›wýãuSìýÍ-Ÿ¸ÑÙe¢4ôz~çÖ¹æå½äÚ)~Þ d¹ˆ"€r´ìit×<[ª¬ihr=¢Be¨4ôÚê6/µ^s½ò®Gd¹ˆ"€ÒtéüŤeæVÆ/öŸ¹ý2WŸîßÑ{¼¹)W¯¿?ûwYAî¢È µuÏ¿¢ÚìŸ~ÏèÅv¸QÑ2ZŠ^m½æzå5~ ×#²„ÜD‘ @Q¶loùú _›»¯<«±i¯ë•(»õ ¡W^¯¿9_»ñ×:.®Gd¹ˆ"€ík=4xøs¦¹°oMÖ·JÏz=hè(ü}ßIæ èèè¹à;rE.gÕyìxõŒU={ÓÅ¢ßõgý׃*Wõà‰@rE.Ý[úÆ.ì[c>ú—]°¿­ÝõˆâL=hè¸ü`Äûéí++·¹à)rE.g}B­Ï é=¡X=hèéHðt'rE.§;p°ã®~g;X.\²Éõˆâd=h¼øêfÛýõŽŸ-Êb÷W 9ä> Š\Naw¸;ç²±c&¯u‡»€ëÁ'w‡Ô±ÓÌèî@rÈ}@¹Xkš.¾æQs·á »æµìis=¢…]:‚:Žæ€êÈêøºà¹ˆ"ÙÙÜ:àÖ'Máð•ïLݰy—ë%.õ ¡£©cj®Ž²Žµë.‘û€(r9w¸ýè¨ñK{TVéB8¯ÏÄÙµë](%ù© Y_ýÈ:Ö:â:î®G¸Aî¢ÈäY´F9vI®j„¼Õƒ'NÖþ:Ê9¬ý(rE. Ÿ6lÞuù çùÂÖƒFôÞ`y¸7ˆ"÷QäòfϾƒßýá3¦øR¿GV¯ßázDnä¶4tÜuômï ®G¤„ÜD‘ Èö ˆÊy=hädo ŠÜD‘ ȉßý~‹Ý£üöû^`rêACg‚Îz5t†è Š\@ð¶loé3hº¹3ðêÁ³›öº‘¨£tVèÜ0'‰Î3®G$…ÜD‘ Øþ¶öÛF.4‹ü ûÖ,^¾Õõˆ¢ì†Î9æºèªI:£\ˆ ¹ˆ"’èS`_øOuƒzð¬tþè,âÉS†ÜD‘ Ã÷Œ^Ü£²Êt‰¬­ÛèzD¾£,Î%Ó™Vg—Î1:Ó"ëÈ}@¹€üúéÿ4»ÈUTV=Pý»È‚z°p:£t^Uœ|·AgÚO­u=" tä> Š\@¦­ihºäÚ)掾AwÍkÙÓæzD™A=X,]:ÇÌɦ³Nçžë¥ ÷Qä2J‹óëo›kçëÞÙézDC=Xiö-ˆïÜ:—· 9ä> Š\@æn?:jüRsóÞÿøú„Ùµë](“¨Ë¡³Nçž¹EYg£ÎI×# Eî¢ÈdKmÝÆóúL¤¹Gù¨Ëma¤s’FÈ rE. +6lÞuù ›ûô®ýÁœÍ­®G”mÔƒ±Ðy¨³Ñœ–:?u–ºpä> Š\€ÿ¢›ƒ©ß#l êÁéœÔ™iNQ«:c]8#rH“¡aoÂkä|Öq¤sÌäç\6VgiÏ^ã¦Î]ãzDá ŒÎO¥zUuÆê¼eßø‰ÜG&¨† ã½µŸNxUWܽcêè?o‘ ðÖâå[/ì[£óó _yøöû^ØßÖîzDA¡L‚ÎR«:cõÚêìÕ9ìzDÀ©È}xNu“ª'¥ª¤\%úqyÒ|ÒÌÕ¼U‘ ðÐ?üsŸAÓÍÝwúCcÓ^×# õ`rtÆFOàm»]øoä>¼¥ZI“駪¹å×#ŠMæ]ý‡ÌÖÏÕkàu+ßw=àsÈx…WRC=˜4>à†ŸÈ}øIU’j%œª›B}ànþKï^|Í£ú{Š· árþ˜<§>úøUç±ã®G2êÁèŽ>ûȬծGûðŽ*#ÕG:-U+Í[´Áõp’uà`ÇØÇ_?·÷øŠÊª‘c—„ñŒ$²Ž\€hϘ>êÁÔÐ ^!÷áMª‰Tõì5NUR~önlÚ;tÄóºÏ¿¢zæ³oñ8Ü"àÖÎæVsG=Û·¥Œz0eÑ 4uγ&\!÷áU@ªƒT élTe”ÏFõëw|ó{3Ì“æ¼U‡È¸rà`Ç=£÷¨¬Òø?¿1±¶n£ëå õ :Ïu¶ë•×™¯ó??o†Ãä>œSícšnéwÕD®‡ã’êâ9 Þ¾àÊO6ò“Ú|ÖÅpŽ\€³k×ÿí×&èÜ«¨¬5~éáö£®G”;Ôƒ®èl×9_qò]º\ùBîÃ!Õ;ªztªRÄ}’Æþ¶öª_3÷Í>X³ŒþcH¹€”­ihºäÚ)殹nÿ-Û³ºB=è–Î|ÿæBСëÂõˆä>œP£JGõŽªžŸNx•’çtÛwßt÷üœôÕWȤF àAwÍcì êADßÑÕÁÛ#H¹ô©º1û,¨ÞaŸ…îéÚ4ûnô½yæÚ r=ä¹€téüÙ„WÍ r_ì=~Æüu®GêAèŠÐuanŸÖ•¢ëÅõˆ2riRE£ºÆìþô?¸N6(¦=½Ö4Û¹óþEôCÒÈ$­¶n£™Óh áêA¯DÛ+éz¡½’Cî#ªbT˘9MÕ ïtkϾƒ÷Ž©Ó xnïñ¦½I§$‡\@r¶lo1÷<è×Õƒgíøè/®G„ÿF=è!]#ºRÌ%£kGWë!@ä>’¦ÊEõ˹'o{PEÃðåxoÛLJ=¥WòÒ-\²Éõp&rI`nÿQzK׋®sùè:ÒÕäzD ¹D©fQå¢sìúÛæª–q=œ@ØWõº¡Oòª"väâÕyìø„iožsÙXW={«ž±ŠnÒ~¢ô™®];º‚tŒt5éšâ:B\È}$DuŠª>ÉJÈáö£“f®æSW$\@Œ/ßzaßó¹Æm#ÒMÚgÔƒþÓtû}/˜ JW–®/×#BÈ}ÄNµ‰}Ò­zÆ*žtKŽ}*ó¼>y*q!‹Æ¦½¦˜~õ4çžüG=˜ºštM™‹KW™®5×#B¶‘ûˆ‘é„©Ú„N˜ijØ´Ëvm­[ù¾ëá óÈ”É|„ñ…¯½ºÖtÅñá;JFî#.ªDìNyo½»Óõpr‡]rå˜:wÙ7íœËÆŽ™¼‚û2„z0st}é*3çêºÓÕçzDÈ$råSõ¡D'’êU%®‡“_vŒ~tyÏ^ã**«FŽ]Â[…( ¹€Ò¼ùŸÿ϶@üîŸÙ³ï ë¡8Ôƒµ¯õ®8Û¼WW¢ë!cÈ}”C‡êUªA¬YÆžÂ>hlÚ;tÄóº®/¸²f΂·é?†b‘ (ÖÎæÖ·>i–£—ßðø†Í»\¥ Ì4]wºúÌe¨ë‘gvP8r¥Q•¡ZC‡ÎU<Ëì›7Ö4š‡Íõûªuº²„\@á·ñð+=*«Lc«Ùµë]¥£ ÀÜ… ¦ƒ®J]›ôôC!È}”@õ…­5ØSØ[Ôì( ¹€©ú³+ÏQã—²òÌ:êÁ0èJÔõXÁ»4(¹¢Ø{Ï¿¢š{3a_ë!{OïCSVrO/Ί\ÀYmؼëÿ xŒ;ÓC=’è]ܺZ¹‹Ý ÷Q Õª&l¯U®G„"lkÜm6§çΊ\@7Zö´ ºkžYdj>YÓÐäzDˆ õ`xt…þCÿÉæ‚Õ•«ë×õˆà#r…°{ÜxÇÓìe]vO~·ÌjØÄ[…è¹€.™Îöæ&4:Û‰z0Tv]¿ìƒÓ‘û螪Õìu ¥€rÁ<òsçý‹¸Ë §#pºÚºvçë»øwž‰z0`ºfôó—týšG~tE»ƒ¦óVaV ™pà`Ç=£÷¨¬2ïºp‹ÊG=ˆ¸hF2+UÍQ𩸨Âsä~¶hEmºÆi­•¶ëᙳàí ®üôaó›îžO«Cÿ‘ þ›ùì[fÿ¯ŠÊªQã—ÒÔ± DŒ:Žtjvª8ùž•æ+ÍZ®G„3"÷³B«h­¥u°´®Öêš»ï-ûÛÚ¬YÖ³×8ýÒè?æ3rÁgkš.¹vйëÆ;ž¦›4bD=ˆØiŽt×<3eiîÒ æzDè¹ï?»®¨¬b!LÛÖ¸Û¾­1oÑ×ÃA×È?iYeˆ±¬BB¨‘èYšÇx#Ë7ä¾ç´f¶7Úi-íz8@ VÔÐkàÜöì-rÁ7‡ÛÚÛ®Îí=~víz×#B˜¨‘(Í]ûµ Üèî!rß[¶‡VÎ4â@`:ŽtÚ¶HÃF½¸³¹ÕõˆðßȯÔÖmü_ß -Ò@=ˆ¤Eaif£–'È}im¬²mÔ¯•³ë‰Ø×zèÞ1uæ#¶Mñ¹à‰ ›wEÛ¶ó¶ ’F=ˆth6»æû³íF9šë\(ïÈ}¯Ø¼uP´NfOaäÁ{Û>6OE]:à±…K6¹È÷ØÖNP"MšÙ4¿™‰N3‹^‡È}h%¬õ°yÒV+d×ÃRµèµÍæüï?dö;[š]'×ȇ:ÿ÷)+ιl¬AÏ^ãj~ó®G„¡Dú™µZsN<Í{šýèŸï¹ï­~µ6ŸhUìz8€‡ÛNš¹ú¼>Íçãôs…\peñò­öý´Ø¾òðí÷½@7i¤ŒzNh®ÓŒ§yO§Ÿæ@Í„®G”;ä¾[Zñšç§´ÖJ˜VKÀÎæÖ;ï_d.ŠÉsêy~6}äBú›ö~ã»ÓÍ}S}Mß²½ÅõˆGÔƒph[ãnÍ~fÔ|¨YÑõˆr„ÜwE«\­uÍG!ZýÒ(ˆjØ´«ß-³Lݺ•ï»N¾ iо1þwßúoŒÃ!êA8ÇmNûNh}kö_ÓŠWë^×Ã<5oц‹¯yTWÊw<Íþ›©!R3uîûà̘É+ø4nQš 5ÚǨ5OºQøÈý”iM«•­^s­rµÖu=Àwv<4e¥¡¢²jäØ%ôK¹‚hc½›ü,'6|@=Ðf9Mä~jtbk5«5­V¶Zß²ÕP¸Æ¦½CG‡z~ª­ÛhnhþÔ,ÊG*±#÷“¦U«]Áj5ëz8@¶™wW.¸²†wW’C.$avíz³ž©¨¬5~)ݤá!êAxKs¦fΊ¿¾Ÿ¦Õõˆ‚Bî'ÇÞᦵ+w¸1ÚßÖnï¾~°foÆ‹\ˆ—ÝaV¿¾sëÜæ–O\èõ <ײ§M³¨™N5¯jvu=¢@ûIÐêTkTÛƒf¹@¶5î¾éîùtgй—è³c}MC“ëÝ¡D&h.ÕŒjî¸Ð«™Öõˆ2Üí¯•*ò¤ÙÝ[úÞ<ó­wwºNÈ…ò±Ã,²ˆz¢yU³«yÃMó-ûõ”ƒÜ‘Ö¢Z‘²ƒ62¥À´§×²öŽ ¹P&v˜EFQ"s4Çj¦eí]&r?Ñ÷(´.å= }öÞ¼s{¯ž±Š~%#JƳÈ4êAd”½7O30÷æ•€Ü/“ÖœZyjýÉ=Ì€ÞÛöñuCŸÔõxé€Ç.Ùäz8™D.”€fêAd—f]ͽ¶w‡æd×#Êr¿ZmjÍ©PëO­B]Àgìµyýms¹6‹E.…f êAdíí¯9™Þþ…#÷K£¦Ö™|xëpûÑ ÓÞä³û …c‡Y„„zaÐllgfÍÒ®‡“ä~±¢Ï(iµÉ3J€Ïì³½ç_Qͳ½" Á³õ ‚aîÜÐüÌ… ÷ gzš›‚èadÈÚ ²½—¾ñ×Ãñ¹Ð=v˜E¨¨ÍÏöÉnÍÛ<Ù}&ä~´†´{œiméz8ŠÆÞ "ºÁY„€Q"Hš«5cÓù¹äþYqÁØßÖn?Ùùé„Wùd§KäB—ØaÁ£DÀìΰšÉ5Ÿ»Ž_Èýnh­¨£ý”™¥#†Æ¦½C~RË“_gB.œ‚f‘Ôƒ›yòK39O~‚ÜïRô)T­y O´3dýú®‡ãrÁb‡Yä õ ò ÚR3óÙ·Ø9îä‚Á³ÈêAä‡fuÍíìgûQÑ],µJä.2 öµ²ýÇÆ>þ:ýÇÈv˜E>Q"oìû~šóóü¾¹oh¨u í®õ¡ëHÕ¶ÆÝ‡=Eç¨ùÎv˜EžQ"‡4Ïk¶ÏùsyÎ}Ëö×jþá@žÙþcý‡ÌnØ´ËõpÜÈg.°Ã,@=ˆÜ²}Ô9ì–ÏÜ·´ÞÓªþá,¥À¤™«mÿ±æ–O\(m9Ìv˜NP"÷4ÿÛ}…” ®‡“ž澡5ží®µ_ÞÞÐ={ß ™"ruß`®rf‹z8¹oPé“ûs•û†ÖuöÍÿÜÞ'  ö‚K<öò²­®‡“’œä;̧  %‚rÁôQR9É}K+:ÓG(Ï(ÊÂ%›¾üíÉæã<ô >Øaèõ ¥tPFè¢P^(5Þw øÜ·´Š3͵®£8€¢˜Ħÿ؈‡_ »qعÀ³À™P§SRØÔP‚¸N"ÂÎ}C+7­ßLÿp6P²Í­·\|ÿ±PsfîQ]R^(5LjåHxw•„šûF´¸VqôP¾úõ;Lÿ±Þÿ<-ȘÂËv˜ A=tCÙ¡1OöSx¹oi¦ÕšéêÇ»\ùíÂóZxýÇËv˜ D=œ•rÄ<€RWêÀrß°ýõZÓšÍõp„Éö ¬Ae0¹À³@Q¨)SÌ®µa4¨ &÷P—g¼õÇÿl߀š³àm×ÉA¹À³@ ¨Â)YìvJåŽë•.€Ü·lÿp­Í´Bs=9bûpƒz¦sf’QÅRÊ(kìÛÊ ×#*E¦sß²íèÀ•h«¡#žÏn«ìæ;Ìå JcOP)‰\§hÙÍ}C+.Û?<àöï²ÂôËô7YÌv˜ÊG=”Cé£ 2íË”J®‡S„,æ¾Ýšþá¼bË“‹¯y4såI¶rf¸PeŠ–'ʦ¬”'ÙÊ}Kë+Û?<[8€ü¨[ù~o_ÌJ.°Ã,/êA Ê#¥R†n_ÌJî[ÑtéÀsÑö&Ãùr&Ú›d"Øaˆõ #ÛÞDiåy{“L価u”VSYoà ‡4}E·?ð|úò<ØaHõ ;å”Ýþ@ùåz8]ó<÷èìZSeâ v8EV¶G÷6ØaHõ ÿÃËÛÜ·´jÒÚ)sà@—æ¿ô®}üyËö×Ã邟¹À³@Ò¨ä(¹ìÍ-J4×Ãù?sßÐJÉ6èÓ Êõp ¶ÿXEe•‡í‘}Ëv˜ÒA=$M)¦,óíáwßrß0xi¥Dÿp¡jlÚk·Oþ̺ÎcÇ]è3þä;Ìi¢RmŽ­Œó¡9¶?¹ohE¤u‘}‰´^r="HPýúßüÞ ¯>üò!ØaHõ óá—'›çúû–ýU«#>B€Du;nŽ<ü9çïƒ9Ïv˜œ R¦Œ³Ç)û\ ÃyîZÿhd±ôç¾)HÇþ¶öª_«¨¬rÞÌa.°Ã,àõ à„òN©ç°y¦ózж`Õ*Hk![°@jìæz]5iÞ¢ NÆà$ØapŽzp%º¹žÒ0åÍõÜÖƒZíhÍãù2ÍÉfŸ'ýÇRÎv˜:¡|LçщôëA­jLåKÿpèÞž}ïSgû¥óVa:¹°­q7;Ì^¡ü¡d´­Õ¶loIô{¥Yj%cû‡k…£uN ß²Îö»tÀc)ôK:Øaðõ à»õ’3Ñ­—R«µ†1sè%°³hÿ!³E“Ë…ÎcÇg>û;Ì~¢<¤¬Tbš[+§?³.‰]R¨µn±ýÃî¬YgZ¯Ø»,j½’P.°Ã,à9êAÀ[ÊM¥§®P%©ò4Þ/žh=¨µŠ}ò…þá ûöy}&N»&ö§°cυƦ½C~R˳€ç¨Ÿ)=•¡JR]§ƒ‡?ã=6 ÕƒZŸh•bû‡§Ùò aÓ.Û¥9Þþc1æ;ÌB=øOIªÉ³@¨Øwhû™]à;´%Ôƒ±÷.$¡´_æ;Ì¡ DV.Û'8”×ÝÿýbëÁ$z›’Sì@gÍóô:;Ì¡Bb;¼)¯§Î]ÓM‡·ÂëÁäö>$J) ,(°‚ë>Øaõ žB*¸BêÁ«K€· ¼ÃóL¹`w¿e‡Y HÔƒ@¨º¿Ã³ûz°Ø»Ož{oÛÇý‡Ìî¦Ìé¹°¿­fàQë¦L7õ` Ýi™ÐÍÑ\`‡Y ?¨àu¹CD—õ`É»W²âpûѱ¿~úò6V­ûfü râ”äO©ËÜÝ-ö ñ󯨞öôÚŽ#&Ì®‚ì0 äõ ÑûLâ+ýMÿp­èyS¿~‡é?vÙÿ÷øõ·ÍÕz°Ã,3Ôƒ@Þ(å•õJ|]ûß¹u®Ö¦¸V®‡pàÇ¿xÙ„‚~M˜ÆšÈêA ŸÆ?ñ†‰~­´p=€ ›võ»e–ù|ðÛÿ2Ç„ÂÕ¯íokw=4)¡òF)¯¬7o+ýíçƒì/ ùqú³æùÁk¾?›ç\¡ò#úü I|óü VZðü äÙaÖLûÑfmŸ±õ˜þcßüÞ %‚G=ä„2]Énú‹*ëOé/ªõ€í/ªuýE H‹^Û|¦fOÙpú3ëL«1öÂF=Ïî?¨dW¾w¿ÿ Vì?á9ë³§ç‚é?VQYe¶":p°#ÅñH õ 0e·Ùt¸â´þá]Öƒ†Ö æÝc­Ny÷9šü ÙaöL¹°e{‹)$/¾æÑù/½›üx¤Šz•R[ÙmÊ:¥ù)ÿo7õà‰“O—˜BÒ<]²gßÁäÇ ˆYQ;ÌvŸ u+ßï5ð s£)ýÇ€PáQR›Û>•ÝJð.ÿN÷¹oØîsZKhE¡uE2ãÄoEý¦‚+p‡Ù³æB´ÒÁ6¢iÔƒ@H”ζx÷ma © ­"´–0Õe!àÖ¶ÆÝ7Ý=_óöEWMš·hCÿªÀ\PÐ ÿåË… €L Â}ÛVI}Ö·m ¯ ­(´®Ð?ÑC+²Ç ˆßþ¶ök–UTVõì5N(j[ù¢rÁÞˆré€ÇÎt# €L  ,¶ýà |¬£ØzðÄ_—Zch¥ñ@õkE-3‰Šî0;xøs%ìQB.,\²É>¨Nÿ1 £¨L³ýÕÈEíQBîZch¥¡«U‡Öf÷ €CöÆ~³Ãli_¤´\°¬õoOid ¨Œ2ÛBÙþáÅn Ur=hh½¡U‡¾Â7¿7£6€$ìøè/§ï0[šrrags«ýÇ€l¡2'Ú?\ùÛ}ÿð3)³ÆxÓÝóÿøáŸc€äPY¡T5ýÃ̓{e~µ¸rßÐjÄ>Æ8ÿ¥wcùš€Ó²ÃlibÌÛ¬„6§RF=ø/‰`·4´21{ÞæP –=m?úùKÉmü{.Øm/¸²æ· âú²âE=xNjo¼‰qã¿$êÁŸßñÎûuDÀY»ÃliÊ…õôþçiå?æ !Ôƒ€·ìƒùJÒØÌO(÷ ­U´bIîMlȺ•ïW^?5…[/’Ë…h´ÛF.,­ €„PRV*1mÜh=h؇\.ðX¼¹@”¼Ãli’Î…}­‡F<üJÉÛ$Hõ à•èÆ¾ÊÍä6öM¡4´†±Mð´¶IúÛ@œ´nN'l‘ûåoON¡ÈpVÔƒ€?”ŒÊÇtJ§ÔêÁŸ/rcÙ$ BÕyìxù;Ì–&Í\xyÙÖKô?ÏsßÐÚÉnѨ5•VV®Gé8Ò9yN½«fK“‰\XúÆÌnM}ož¹vß\õ #e“é®´Rf¹Nw2‘û†ÖQZMÙ7ØýéÅ]r¾Ãli²’ ÑþcJúe¢b¡<25‹oýÃÏ$+¹oiMeÀÑ*Kk-×À.lkÜ}ãOgôžÆl傽÷ÜÞã'L{Óó{qŸQeR)‰Lÿð ÝÓ˜­Ü·ì½¸‡=åí½¸rÈ«fK“Å\xoÛÇ×ß6×ôê¡ÿPêA ¶¸òÈÏþág’ÅÜ7Ì^¦WV_¾mà oÌž^í0[šìæ‚Íâë†>™­,|@=”F‰£ÜÉî{’ÙÍ}C+.­»Ì º3Ÿ}Ë«½<䇟;Ì–&Ó¹p¸ýhõŒU™»Wðõ P¬è3 JŸŒ>³éÜ·´ú²+1­Ê\@ŽØw¥<Üa¶4ä‚}–ÿ¼>3ñ,?àêA p¦§™ížéžfä¾aîÔÒzL?ΟÔf÷N-Yqà`‡ç;Ì–&˜\xëݶ×7ýÇ€³¢ dû‡+e”5®‡S®`rßÐzL«2ÓÉAë´`–g|“‰fKX.|¤€xQg¥Qšd´ø™–ûFG €'¢Ÿ:y¾ÃliÂË…è'¹#Ç.á­B KÔƒ@7”¶¸2%‹ýÃÏ$¼Ü·´N³Ÿä®Ýð'×Ãy™Ûa¶4¡æBxOzñ¢º}*-ÓýÃÏ$ÔÜ7Ì“ž¦ý{ÖŸôàP®ºV† ÑN°«Ö}èz8€G¨Ó))‚ïZvîÑN°¦½™ÑN°\Éî³¥ >‚Ù)ˆõ ÝÕ.ì»J‚Ï}K«8­å²»S$€ôåsÞÈI.ìk=dŸyhÊÊžJC=Jå‚}ê\yázDÉÊIî[ö}þë†>™‡÷ù”&ŒfK“«\ØÖ¸ûÆ;ž¦ÿp‚z8Év¥V:ä¤+u®rßÈÕs@ŠÅsÇ9Ì»“T¿[f5lÚåz8€ÔƒÈ9ÍÿJîZ›ÃÜ7lŸÀóúL ¸O €¢Dû°Ãliò™ JÉsꕹ} DnEëeAÞê‚|æ¾ÝG,Wï8û–ZyÎ{Ÿ°–“f®ÎÕ}Âõ rHó¼f{óf`nïÌsî[ö>a­srŸ0k[ûO'¼ä³¥!ÞÙÒÜÈlÓGhÑk›]H õ òæåe[M_Íùšù]ÇrßÐ Pë@ÛGHëC×#¸àw˜- ¹`Øþc‡=Eÿ1äõ òC³ºæö¼õ?r?Êî3¢õaØûŒ¨_¿#øfKC.XvŒ}üuÛ,ø–ãÈ9êAäfò¿bú‡k†ç¦ ä~W´2´«ÄUë>t=1Ëϳ¥!N±³¹uبÍ Cÿ1Œza‹ö׬Nß0‹Üï’¹‹Ìœ0ÜEÃ|Ü“ŸfKC.t©~ýÛŒ”$êALóvïžfú‡k>w=¿ûÝÐZQ+FÓeâ¡)+ù@È´î0[r¡:‹Ì§ôCx¨$Û?\³wÎû‡Ÿ ¹V:‹´z¤ =] ›v™v‘ì,Sr¡{ûÛÚmÿ1ýþcõ c§kÓ?œéúLÈýi iv©îwË,­-]@Aš[>Éó³¥! ÑØ´×¾áÌS¨õ Bbû‡k®æÉ¯î‘û…ÓJRëI³a¥V˜<… øŒfKF.Îöã€za°{Ó?¼@ä~±´ªÔÚÒ|Ü Õ¦Öœ®GàTì0[r¡(ÇŽÛ†uCG<¿ã£¿¸P"êAdÝÎæVÛ?\33wnˆÜ/V˜æq$­9½¶Ùõp|†fËG.”ÀöcC+dõ ²ËnKÿðûåÐjÓ|¡õ§V¡®‡ä;ÌÆ…\(™};ââk­­Ûèz8@q¨‘QZ›þá,ÈKCî—ɾažQâí }ì0/r¡Lu+߯¼~ª¹]™þcÈêAdŽí®Y—þá%#÷c¡õ§V¡övez©a‡ÙØ‘ å‹¶3úÑÏ_¢2z¢yuø/_¦¡G,ÈýÙvF½>A;# iì0›r!.Z®¨d¹‚¬ D&ð†[ìÈýØi]j·;ÑzÕõp€±Ãl¢È…xq;²‚zþ³‚sC~ŒÈý$ØÅjEe‹U ^ì0›4r! µuiwÏQÂg[¶·Ð°+!ä~r´Rµ7³iË(@™Øa6äBBh‡ÏQÂOlè“4r?iZµjíJ³  ì0›&r!Q;>ú '3üD=ßh†œþÌ:Ó?\3§æO×# ¹Ÿ̶>'3P>RI¹>솇¨á>RI ¹Ÿ>ìŠÅ³N éè6Ó„¨á–f¿‹®šÄ–mé#÷]‰n¦©Õ/›iì0ë rÁ•õ˜}µxXNPÂûHµæ@©N¹ï–V¼Z÷òQÀ³þ ê8Òiû õâÎæV×#BŽP"}šåm¹¬9ÐõˆòˆÜ÷}TJëa•BްìoÈçöµºwLŽýÇ&êA¤épûQÓ?\gf<ú‡;DîûC+aÛJQ+d×ÃGÓ]?‘ ž°ýÇ.ðýÇêA¤Fsšf6ú‡{‚Ü÷ [­!'ØaÖgä‚W½¶Ù¬šú™ýΖf×ÃAȨ‘Uæ¦8Ílšß\Ÿ"÷=¤µ±VÈæVj­™Ùua‡YÏ‘ ¾‰¶ZºwL­–êA$Js—¹ž¦¾!÷½e[-iåL«%„f3\ð“íº ¥Ôä9õt]@쨑ÍWSç®1oji£S–oÈ}Ÿiµ¬5³VÎ:FZEk-ízD@‰¢;Ì>Pý;ÌúŒ\ðYæ]ýn™Eÿ1$zI°ýÃ5wÑ?ÜOä¾ÿÌBZ«h­¥õÒÈv˜ÍrÁº¦Lÿ±ïxšk q¡D¼4;}÷‡Ï˜þášµ\gDîg…®)­¥u°´®æšBVDw˜ežÉ r!ìxhÊJó™;ýÇ êAÄÅö×¥™Šþáž#÷³eEýæ3wqÀsì0›]äB†46íµýÇx&e¢Dù¢Ï:ivâY§L ÷3Gëj­®M£~žÉ…‡NÙavϾƒ®G„â ™³j݇¦g/ýÇPêA”é5v.Ò¼äz8(¹ŸQûZ™ž½f#ozöÂì0r!‹xOå£DÉì½ ôÏ"r?Ó´ÞÖªÛìé©u¸ëá ×¢;Ìr6f¹]ûÛÚí3;Ö,ã™…z%Ð<3úÑåöYfÚf¹€E¯m6ŸÈh5Î'2HŸÝaöÜÞãÙa6äBÖÙþcôôCQ¨Q,Ûë˜þá™Fî‡A+p­ÃÍFŸZ™k}îzDÈv˜ ¹»çWß›g¾õîN×ÃAP¢p ›vÙþáì…šuä~HlGG­ÏµJ§£#]m²ÃlHÈ…`˜þc¼cƒQ¢ÑÕ&ýÃÃ@î‡G+ó~·Ìâ$‡fÃF.&zGwõŒUÜÑ3¡D÷ÌÝh¶8w£ƒÜ•½£[ëvîèF\¢;ÌŽ~t9Ý*‚D.é½m_7ôI:>¡Ôƒè†í®™„n!÷¦µúCSVÚŽOZÉ»2ŒnöùA.̮访m.+:œ‚z]¢›}ðÈýà±# ÊÝaVv=$‹\Ûáö£¦½É_8õ N±gßA{·¹æ î6¹Ÿ«Ö}Èz%àý„"òÀv„8ÿŠj:BÀ „eºQi~ UûùÁý~(Ê);Ìr¿q~ ù±vßlÇø¥oüÁõpàõ Íÿ¶¸f ×ÃAâÈý¼ÙßÖN?œýˆòŒ\Èv”†A=Íšèž7ä~>q½ãLØaäBíok°f™¹à§^Õÿt="8@=˜gºê¨~Í|^ Ù€I WÈý`‡YÄ‚\@iê×ï0ýÇzÿó4nKÈ"êÁì²oÔÓ?% ÷Qs[‚ªnKp.ºÃì–í-®‡ƒ #PŽß.l0-Ó,s¨³èþÙô×u§«ÏõpIä>ʧÄ7-«QUâz8¹Ã³ˆ¹€2Ùþc´5ÎêÁláBC\È}ÄE•ˆÙ뜶Ʃ9e‡Y6C,ÈÄ"ú±Åœo»ÎŽz0C¢ÄëZs=d¹ué´ÛžªNaÛÓäDw˜þË—y©#r1ⱦ ¡Ìû .ýÃr±Smrï˜:>´J;Ì"Qäâm{8tÄó´=ôõ çhä‹„ûHˆ}¨M• µÅÅî0{ñ5²Ã,B. l‹æ?êAoE7ú¤8bGî#QªY¾üíɦé¥j×ÃÉ0–RH ¹€äð¦–ϨýÄR I#÷‘4ÞÔ*·Z!eä’ÆMï~¢ô ·Z!ä>ÒÁM率ÒG. 4Åòõ ?hÅ€4‘ûHM± G«v¸B. 5lšãêAЪé#÷‘>6Íé;ÌÂ-r)³7Åõø7Å9D=è[9à rNPòœI´XÞÖ¸ÛõpG䜘ÿÒ»_ó¨iš±e{‹ëáäõ CJ|ÛjIׂëá _È}8½%Ruëá8fo¦íýÏÓ¸™‘ pÅö«¨¬¢ÿXú¨0ýÃuÎÓ?®ûpŽ–)4ÛWÈ¸ÕØ´wèˆçÍ”8ý™uÇŽ»Q^P¦LçöÌgß²ýÃuæ»rŠÜ‡¢[*¨2ÊÏ– ÑÍ8F<ü o†Ãä|P¿~Ç7¿7ƒþci¢L“}3\çy>ß ‡?È}ø#o[®³Ã,üD.ÀÇŽÏYð¶y¤zððçøô$iÔƒéЙ<ä'µ¶8Ÿ€Ã9r¾Qed©V­¤ŠÉõpÝaöåe[]ør^ÙßÖþ@õk•UôKõ`Òl3=Ï:«9™á r~ª[ù¾j¥ðZ.³Ã,üG.ÀCÛw›þc]5iÞ¢ ®‡&êÁDé¼5téßûð–j%»%«j¨0¶dýé„WͳÍ-Ÿ¸ Ð5rÞÒiivgËmÿ±DQ&dí†?™þá:{™Zá!ržS¨êIg©*)×c‰Á¾ÖC!}܉ ‘ ðY´ÿ˜Ò!?ýÇR@=;Ÿf CÿpøŒÜG&¨†¢÷&rþ۳÷ÞôãÞûXPÆHçä„iošþá:WuƺpFä> Š\@VØþc—x,Ôþci¢Œ‹ÎFÓþáÈrE. [ìÚ»ÿÙ¬½ËA=X>× }’÷(-ä> Š\@æ˜þcöÞ¼0ú¥z°¶¸ÎCú‡#[È}@¹€Œ²½;Îë3qêÜ5ôî(õ`iL#ÓGÈ"rE. Ó6í²½ýëV¾ïz8YB=Xcvú‡#£È}@¹€Ø½¿¿ûÃgØû»@ÔƒEÑyuÓÝóõŠéLÓùæz8@éÈ}@¹€08Ø1úÑå={«¨¬9v ›õ`ö·µëŒÒy¥³Kç˜Î4×#ÊBî¢È„¤±iïÐÏ딾àÊš9 ÞëÄÖï«Ö}èz8ž¢ìžÎ{éŒr= 6ä> Š\@ød笨Ï„O™6rE. `ûZÙ'¿š²’'¿¢¨O§3Dç O¡"lä> Š\@ð¶5îþ3ä)¨OA—Z么"vç¸~·Ìbç¸Ôƒ:tV°‹%r‚ÜD‘ ÈŽ#Sç®9¯ÏDówÞ¿hgs«ë¹D=(:t&èuÐY¡sCgˆë‰#÷Qäò¦eOÛ½cêL 0iæêÃíG]Ȝ׃:î:úæÍ:+\H ¹ˆ"Oïmû¸ÿÙ:ù/ðØ¢×6»Žy®uÄuÜõãëЙàz8@ªÈ}@¹€<[¸d“© {*ouA>ëAekó>€Ž¾ëáû€(r9w¸ýèØÇ_?·÷xsß`~¶È[=¨#kîÖ±ÖÏí}¹ˆ"€‘¾"ç_Q=íéµyè+’ŸzPGSÇTG–>BÀ rðyä`Õ¯ßÑ÷æ™fßõ¸N²rRê8š}Ftdu|]pÜD‘ À)æ-ÚpÑU“t]Üt÷ü€÷%¾Ô±ÓÔÏxÁ•5:¦®‡ø‚ÜD‘ Àéö·µ?X³¬g¯q•Uúƒþ§ëÅ/àzÐ>;ÁPP2rE.gÒØ´wððçÌLs¼Ýyì¸ëÅ)ÈzPÇHGJÇË|¼«#èzD€wÈ}@¹toEý}Mï´ðêAûø§ŽWð%#÷QäpVÇŽOfiP9tÄó;>ú‹ëÅ ¤zPGDÇŶ‡ ì“\ ^ä> Š\ ´¯õÐȱK**«Ìvv¸QY¨uÌö‘:.::ùÙ>(¹ˆ"€¢lÙÞ2pØSºj.¾æÑÚº®‡SºêA½þ: ú)tDÞÛö±ëáÙ@î¢È u+ß7»Úõ2»aÓ.×Ã)E¦ëA½æzå5þÊë§êX¸%ä> Š\Js¸ý褙«Ïë3QWÐ~þRËž6×#*NFëA½Îzµ5r½òzýu\ÈrE.åPy2ü—/g±<É\=˜õð¹ˆ"€òýÿìÝŒ•w7üÿMü'Ÿ3\\åÇÌ|Ï9×ëu{ÏWçœó9×ïçû>?®«?¾Ø\y0Öj¬Û¦þ€.4}€"}&Êæ­{šèô&Í’cM¶Æ | Aèûé 0šèòŸ[ìÐ ô}Šô˜p‡ŸlüË£7rŒ5ë-Ö^TkòÀþwꊠuèûé 0Iú_8pËâøª-X¿½êr.Ö°y0ÖU¬±¨-Ö^¬ÃÔå@«Ñ÷(Ò`RmÜ´sæœ5q”Ý~÷“§.ç‚̃±~b-EU±Æb½5æûªÐìô}Šô˜l§‡î[³mzuUü/~‰¦®¨®¡ò`¾Š¦UV4Î*‚–¤ïP¤/ÀÔØ7ðJþæ×w·¼˜ºœʃ±6ò·Pc-¥.Zœ¾@‘¾Si{ÿþ®­k„/Ç5BÌ¿bYÿüŠ%´$}€"}¦Øð™‘ü䙋?ÿÃC‡O&)#mŒgÏ=?k¬“$e@ éûé ĉ“¯/ûÊãèKuq½Ty0¿Dc<úÒûûùÐ’ô}ŠôHh÷¾#ó?Çà¬ynÞºg*:IŒçÏ47žu<÷©|h £ïP¤/@rOoû]–’n[øØ¯_:<5:Åy0žW<»,ùnyæ·Só À¥ô}Šôh§‡Î®ÝðìŒÚêìS”G Nö#NYŒçÏ(+ž]<Çx¦“ýˆÀèûé Ð8ýÓ’{·dÑé‘ý“z–•)ȃQ<‹,äÆóJuæ Hß H_€F³kÏËÙG+«ó¿Ñ·cï$=ÊdçÁ¨<ꇸõÎoÅ3š¤G®•¾@‘¾é»[^¼yîÃqx~øOLÆUÚ'/FµQsÜyÔÏbÂï¸ú>Eú4¬ìÒ Ó««¦UV,_¹ub/Í0y0*Œ:£Ú¨ùË_Ý1õÑÞ’¾@‘¾ nààñEËžÊ.ݾqÓΑ7Þœ»Ø<UEmQaÜgT5OÈÝNß H_€¦ÐÿÂÚ‚õq´ÆÏíýûoü'0F=ym¿xþ7~‡ÀäÑ÷(Ò YdïÁÍœ³fBÞƒ›<˜¿wUMà{—ÀäÑ÷(Ò ¹œúƒ?ɾ£wßšm×ý½̃ñ¸ñèùw£ªë»`Šéûé ÐŒö ¼rûÝOÞÈ9&ãܧÀäÑ÷(Ò yýÓÏþ=»Æß-wløÕo]Óm¯/Æ£ÄcMöµÉ£ïP¤/@S>3²î‰ç²{.¹wË¡Ã'¯ò†×šãžãþã&3j«ããq¯·d %}€"}ZÀÑcƒKïï‹cù¦®úæ/N}Ë›\}Œ{‹ûŒ{Ž¿G‰Çšˆ’4ô}Šôh»÷ùà]߉#zÖ¼G7oÝså?¾Ê<÷÷ùEߎûŸ¸b4ô}Šôh1y‚‹lx…÷–yðšÒ%Ð,ô}Šôh=Wó Ï+äÁâ§O\÷ó«ùô)Ð,ô}ŠôhUù`Þñž‡.≠yðºÏN4 }€"}Z[ñ ÿô³Ï—_š‹W¯xîÅ?¦(˜tú>Eú”Á¥W/æÁ¿º=Ð,ô}Šô(‰W_¾oͶéÕUÓ*+¾ðàOþ¿¯nc?~Æï±$–Ç=58”ºL`réûé P*/ZöTv®˜üçÂ{~ËS—L}€"}JèkßùåÿÖ¾2Žýø¿§.˜:ú>Eú”JþþàÿÞ¹ªþsôýÁXâýA( }€"}JâÕ׆W~ý§Ù÷—¯Üzÿ#õïÆÏø=ûþ`ü×ø›Ôe“Kß H_€2ÈÏ/:ñããž_ôßxÂùE¡ ô}Šôhm»ö¼|ÛÂDzëöíØ›/¿ôúƒñ_³ëÆßÇ­R L:}€"}ZÕá£Zrï–8ÀgÔV¯Ýðìð™‘â½4†ø›G6öÇßÇŠÛÆ=LmÉÀ¤Ó÷(Ò õœ:0‹uKïï;zlðÒ¿7fâïãVyŒ{›ü’)¢ïP¤/@‹yzÛïfÍ{ô-?öy…<˜ùõK‡³šÆ½Å}NN±ÀTÓ÷(Ò eìÞwdþâÇãˆ~÷ûÙ¼uÏ•ÿø-ó`&î'K—qÏqÿW,†¾@‘¾-àÄÉ×—}åÇq,ßÔõÀU^6â*óàŸÏ_¨â¦Ñ+Æ£ÄcMDÉ@ú>Eú4µá3#ëžxîïy(ä»–o>tøäUÞðêó`&îyñç7‰ÇŠG¼èì4@³Ð÷(Ò ymïßßõ¡uqßrdžþ\Óm¯5fâQâ±â†ñ¸ñè×t[ èûé ÐŒö ¼rûÝOÆÁ;sΚؼë:îáúò`æ»[^ŒÇ›G ÙÕíf¡ïP¤/@s958tßšmÓ««âñKüóúîçFòà–L1}€"}šÈÆM;ó7æþãÿu#wuƒy03pðxþ6eÔv#wL }€"}šBþŽڂõòŽ Ƀ™¨'ªº¾¯1SLß H_€wèðÉEËžšð{N` #o¼™Ÿæ4ª½úÓœSLß H_€†U¼ðßò•['ö›3QaÔ9­²âê/ƒL1}€"}Óæ­{nžûpžó?¾{ß‘ ¿ÿÉȃ™¨6jŽ;úãYLøý7Bß H_€F³kÏË·-|,ÌYóíÛ±w’eòò`&*¯|ðkññ\âMÒ£×Jß H_€ÆqôØà§¿ôt’3j«×nxöôÐÙÉ{¬É΃!êgÏ%(žW<»É{,à*éûé ЊÑiɽ[¦ :MAÌÄsùÔßýhjB.ð–ô}ŠôH®oÇÞêüoLñG+§,fòÁÆ3¼ÁoIß H_€„^úýÑüÔ+Oþè7SùÐSœ3?èû·ü$9ñܧò¡Œ¾@‘¾I$¿4C’<øçÂE4â¹OøE4€·¤ïP¤/ÀyãÍõß{>¿tûÀÁãIÊH•3þó¿ã¹G±bmÄ:IR”¾@‘¾Si{ÿþÚ‚õqн÷#ßìá@ÂJÒæÁL¬[îØeÄ:‰5“°(}€"}¦ÆÀÁãýô÷ãp›9gÍÆM;“¿#ÖyðÏ£ï–ÆÚˆuÅÄúIõn)”‡¾@‘¾“íÔàÐ}k¶M¯®šVYñŇž‰¦®¨®Aò`&[E±~b-Å/ ²Š %éûé 0©¾»åÅw¾ome·ßýä¾WR—sACåÁL¬ŸXKQU¬±Xo©ËÖ¤ïP¤/À$É¿Wÿ<Ä0f¶÷ïÏ®Æk/íW,¡%éûé 0á>¹äÞ-ÙÉ3×=ñÜð™‘Ô£aó`ˆ5ë-;k¬ÉXŸ©+‚Ö¡ïP¤/À:=t6»¸^VKïï;vâµÔ]V#çÁ̉“¯Ç:Œ"³K4ƺM]´}€"}&Êæ­{fÍ{4¨ù‹ß½ïHêrÞBãçÁL¬ÉXŸQj¬ÛXé˦§ïP¤/À‹ÌrÛÂÇš+³4KÌlyæ·YÖŽõÜøY™¾@‘¾7âè±Áü3k7<ÛDŸil®<øçÑÏâÆžQ[}7Ö|ꊠ)éûé p}†ÏŒ|í;¿ÌâI3žó¤éò`&?WO¬ùXÿy®hdú>Eú\‡¾{ók"ìÚórêr®G“æÁL¬ó[ïüVv-Ø©Ëf¢ïP¤/À5Ù7ðÊ_}ò{qÔÜ<÷ᦾfzSçÁL¬ÿØ ñ,b‹ÄvI]4}€"}®Ò‰“¯/_¹uZeÅô꪿ø_^}m8uE7¤ò`ˆ­ðå¯îˆ-Û%¶Nl£ÔA£Ó÷(Òà-¼ñæÆM;gÎYË¢eO <žº¢ Ðy0[$¶K<ØF±¥b{¥®—¾@‘¾Wö³_Ô¬Ã$~Æï©Ë™0­”3¿xþ-¹¥`béûé p9­ý®SëåÁ?·è;¹0±ô}Šô¸Ô«¯ ÿýÃÿÒÚßJkÉ<˜958ÔJßô„‰¥ïP¤/ÀEJrÖÊ΃™Øv·ßýd œ &–¾@‘¾¹]{^¾åŽ %¹ª]ËçÁL \)&–¾@‘¾áÐá“KîÝÇÂŒÚê¯}ç—ÃgFRW4éJ’ClÍØ¦±eãùÆVŽmº"HIß H_ äN]»áÙ›ºˆaéý}G ¦®hŠ”'fbËÆö§Û:¶xl÷ÔAú>Eúe¶yëžYóCà¶…íÞw$u9Sªly0[9¶u<ñØî±õS— èûé ”Sä‚ù‹/s.(gÌä¯Ä>P¶×@ß H_ lŽx-ÿÜàʯÿ´´Ÿ,süóèç„cëçŸ޽"uE0Eô}ŠôÊcøÌȺ'ž{Ç{r^‘?—>fòóÅ^ûFÎ#ú>Eú%;y~Ýþ¤.'=y0ûC~ƒ!-Oß H_ åå×%çûÖº.yN¼H챇Ä:‰½%ö™ÔåÀdÑ÷(Òha§‡¾øÐ3Ó*+¦WWÝ·f[ü3uE D¼Tì!±ŸÄÞûLì9vZ’¾@‘¾@KyãÍ›vΜ³&vï~úû§®¨áȃ—{Kì3±rbÿ‰½(ö¥ÔÁDÒ÷(Òh=ý/xïG¾;vmÁúíýûS—Ó äÁ+‹='öŸXE±/ùÂ)­Dß H_ • <¾hÙSÙé"×ïyïì\<ø–bÿ‰½(;!mìWÞe¦5èûé ´†W_Î.'7­²bùÊ­'N¾žº¢F'^¥Ø—bŠý*»`eìi©+‚¢ïP¤/ОüÑonžûpìÉó?þÒï¦.§9ȃ×$ö«Ø»bÅžû[êràúéûé 4µ]{^¾mácÙ•ãúvìM]N3‘¯CìcÙU,c¯‹}/u9p=ô}ŠôšÔÑcƒKîÝ{ïŒÚ굞==t6uEMF¼>±§Åþ{]¬½Øc?L]\}€"}¦SœúKO›_yðFÄ^ûž—#hFú>EúÍ¥oÇÞYóõ½'Þ¸üãʱOú¸2ÍBß H_ YìÞw$?¡Çæ­{R—ÓôäÁ‰{c~:£ØKS—oAß èÔàЯ_:?S—•ð?&0Nø?äÁ ”_î$V©ËÐàô} Y ŸY÷ÄsùÁ>™º¢Ö!N¸Ø?c/µ{lì·±÷¦®šÕöþýµëcv}Ëú_8ºœV#N’ØWcu{oìéË€&óø¯Ûï~2fÔ3ç¬Ù¸igêrZ“<8©b¿½7Öpìɱ?§.šÀ©Á¡ûÖl›^]ÿ‹_|Ãeòȃ“ÍÎ Wï6ïÊßRÙ7ðJêrZœ<85bOÎßìŽ=öüXÿqıº˜"»ö¼|ÛÂÇb&PN¯¾6üå¯îÈ¿Otâäë©+"y°Ìâ¨Ï¿/£ï ”D~¾Áâ ç,3ybp>a€2صçå[ïü–ë‘‘‘Éä×ñ!F‰Ôå0Á>¹äÞ-1ß›Q[ýÈÆþá3#©+"=y\Œ 12Äø»DŒ1b¤®€ pzèìÚ ÏfÓ¼¥÷÷=6˜º"…<ÈEb|ˆQ"{á(Æ=RWÀõÛòÌogÍ{4fw·-|ì×/N]Ed\1VĈûFŒ1†¤.€k¶{ß‘ù‹Ïft›·îI]Hä bÜÈ^MŠ‘$Æ“ÔåpUNœ|=ûÄ×M]¬üúOFžË‘¹²=b ‰‘$û´¹ Ó4²á3#ëžx.»ÌôâÏÿÐ!¸2y«#IŒ'±«ÄØ#Œ³Q4 íýû³3Æßrdžþ¤.‡& rõbT‰±%»ZMŒ6©Ëàœ}¯Ü~÷“1O›9g+JsõäA®UŒ01ÎÄncNŒ<©Ë(µSƒC÷­Ù6­²bzuUüÿL]ÍDä:dÃNŒ91òv’yãÍ›væ/Ô<žº"š<Èu‹1'ÿXBŒE1"¥® ,ò/òÔ¬÷E®›<È Šñ'F!_[˜þó¿-{*?ÑŸ×ä¹ò 7.F¡ü´Æ1:Å•º"€”_lZeÅò•[]Œ'2QbDŠq)F'—=˜p?èû·›ç>S÷ù‹ß½ïHêrhò +F§£b§Šñ*F­Ôå4½]{^¾mác1¿ª|ðk};ö¦.‡–"2b¤Šñ*v­»bK]@S:zlðS÷£˜Sͨ­^»áÙÓCgSWD«‘™$1^ŨcWì`1ŽÅh–º"€¦a*ÅÔ™T^Ô¸V>jÅ”‘™>ôp5œŠ)&2eœ àrœª$äA¦’‹æ\Ä¥œIHdêÅ(c]ìx1îÅèc`êŠÒØÞ¿¿¶`}Ì‹n¹cCÿ R—Céȃ¤#^Œ{±ûÅ#aêr¦ÔÀÁã·ßýdÌ…fÎY³qÓN¯“„3’º"8G¤ÑÄ™Ÿr9FÎ?SWpò‹mÅÄféý}.¶E£‘iL1ZƘ;§K²MjóÖ=³æ=ó™ù‹ß½ïHêr`ò ,FÎ?c±4FÔÔå\•_¿tø¶…es˜-Ïü6u9pYò /FÑìµµWctM]Àe=6˜}ÆiFmõÚ Ïž:›º"¸y¦ciŒ¨1®fŸ½‘6uEc Ÿydc6]Yrïç@ )ȃ4‘WctÍ^p‹ñÖ¹¹€Ñ·covŽô[ïüÖ®=/§.®–ûä0±^}mø¾5Ûòo©œJ]L yãsþÍî·}³¸AùYìn¿ûIg±£Åȃ´¤«cÄvægàFüê7‡n¹cƒ«\ÑÂäAZX~eØÉc¹äÞ-1‹˜Q[½î‰ç†ÏŒ¤®&…ÆùÔhóÖ=³æ=s†,úöî}GR—“N¤ÝÄY© ñíÚóòm Ë®$Õ·coêr ÑɃp•¢§dW­.½&u9À‡þiɽ[¢SϨ­^»áÙá3#©+‚& ÂÕ‹Îý%ºL5Ñq¢ï¤®øó顳yƒ^zßÑcƒ©+‚¦!µŠ.½&ù1zPꊠ¼žÞö»Yóõ¸>ò \Ÿüë у¢¥.Jg÷¾#ÙüßýþG6oÝ“ºhJò ܈è>у²Ó—EWJ]”‰“¯/ûÊ£ÿÞÔõ€€Ãáe—7Š~‡Rô&—7€É3|fdÝÏe¾kùæC‡O¦®š›<"úQt¥8š¢CEŸrN3˜pÛû÷w}h]tÛ[îØÐÿÂÔå@+aEoŠÇTt«èY©Ë€±oà•Ûï~2:ìÌ9kþaó®Ôå@ëaÂEŸŠnGVt®è_©Ë€&vjpè¾5Û¦WWÅÿâ—øgꊠ¥Èƒ04/¸q7íÌ_bý?üWêr Ƀ0y¢sån‰Ž–ºhùW0j Öû Ly&[t±èe¾üWãÐá“‹–=åm05äA˜Å“cGsrl¸TñNËWnu '˜ò L™èkÑÝ\<.µyëž›ç>]rþâÇwï;’º( y¦Xô¸ètqÜE׋ޗºHlמ—o[øXtÆYóíÛ±7u9P.ò $ý.º^}Ñ£¦.8zlðÓ_z:ºáŒÚ굞==t6uEP:ò ¤]/z_tÀ8£FOL]L‘b\rïMR‘!­è€Ñ½4 @yôíØ[ÿ ’F B#È¿:ýÑW'hUû^É¿Dÿä~“º@„1?µÚK¿?šº˜0ÙI¶§UV8É64yJ~é¥è˜.½@ yãÍ ÿø«ü"¼§®¸@„½2:f›Ñ=×ïù褩+€ë±½mÁúèhïýÈ7û_8ºàbò 4¬è›Ñ=ãNý4u9p _xÏ¢‹Íœ³fã¦^Û„Æ$B#‹î=4:i§ýô÷}Æ€Æwjpè¾5Û¦WWM«¬øâCÏÄ?SW\–</:iôÓèªÑ[£Ãj¬4¬ïny1;7Úíw?¹oà•ÔåoA„f]5zk°ï|ßÚè¶©Ë€1ž{ñ·Ü±!»vÒ?ÿëïS—\yšKtØì¾Ñs}1€FpèðÉ%÷nÉNƒ¶î‰ç†ÏŒ¤®¸Zò 4è³Ñm³wGÿ.œº"JêôÐÙ×ýü¦®¢%-½¿ï؉×RW\yšTôÜè¼qüföŽœº"ÊeóÖ=³æ=hþâÇwï;’ºàzȃÐÔ¢ÿFŽ£8:rôåÔåP Ñ}>°èÛº´yZ@þ ím ó -“çè±ÁüÓ)k7<ëÓ)ÐìäAh Ñ‘£/çßàˆ~º"ZJöíõµÕ¾½­D„V’Ÿá-úõ×¾óKgx`BôíØ›ŸÝzמ—S—LyZOtêü PÑÁS—@˯~{ó܇]ýZ<­*ºvôî8Àÿê“ß‹nžºšÌ©Á¡å+·N«¬˜^]õ÷ÿË«¯ §®˜xò ´°èÝÑÁ£G7ž~âäë©+  Œ¼ñæÆM;gÎY³ÄEËž8xzLy˜$ù—\fÍ{Ô—\®Õî}Gò¯foÞº'u9@k’Is˜ü$x1·I]@pêf`ÊȃÀdË/’£‹d\ÁÈo®{â¹üÒ®‡ŸL]ÐâäA`jĬ&æ61àÄ<'f;ÃgFRWÐX¶÷ï¯-Xãä-wlèá@êr€R©3œ˜çİsž˜ù¤. ! <~ûÝOÆØ8sΚ›v¦.(y˜z1Û‰9O >1ÿù?üWêr’958tßšmÓ««âñKü3uE@¹Èƒ@¦@ßÝòbþâØ¾WR—”‘<$óŸü#Rÿ°yWêr¦Hþáù®­óáy !yH.æB1#r   >¹øó?tr- Aȃ@#ˆQ~Šõ»–ovŠu õ/¾³ì+?vñ ȃ@ãˆÙQÌ‘bPr f ÅlÞºgÖ¼Gc|›¿øñÝûޤ.àyh41SŠùR Mï~ÿ#1ƒJ]À ùõK‡o[øXŒi‘ŸÞö»ÔåŒ!)fMÙké1ÚµçåÔå\³£Ç—ÞßãØŒÚ굞==t6uE“†s§˜AÅ<*†©˜SÅÌ*uEWeøÌÈ#û³ákɽ[ýSêŠÆ' .æQ1›Ê_`w.> ÁõíØ[ÿ oš‚<4…˜Se_À‰YV̵R—0Ž}¯|øOÄHuó܇¿»åÅÔå¼5yh"1¿ŠYVv‚¾˜w¥.àœ'__¾rë´ÊŠéÕUN 4yh.Ù¼bÆó®˜}¹€ÖÈonÜ´3»|ê¢eO <žº"€k Í(f\1ïŠá+æ`þñW1K]PFÛû÷׬±(~ö¿p u9×LšW̾ò™XÌÊR—”HþªÔÌ9k6nÚéU) IɃ@SË>©ó±ÊÞóŸÔ&Û«¯ ß·f[ö©õ/<ø“SƒC©+¸~ò Ðb>³²ìL1O3=&I~V«Ûï~ÒY­€ -#æf1Cs¦w`2üê7‡n¹cCvÕ›úÙ¿§.`bȃ@‹‰yZv%蘹=÷âS—4½C‡O.¹wKv«uO<7|f$uEFZOÌÖbΖþ=fq1—K]ДN}蛿¸©ëL–ÞßwôØ`êŠ&˜<´ª˜¹Åü-†¸˜Ë=¸îç1¯K]ÐL6oÝ3kÞ£1†|ð®ïìÞw$u9“BZ[Ìâb.]Ìëbv—º  7€ò2È_çÿÀ¢o{¸œâç úæ/|®hyò P¾\ïå$¥’Ÿ'pFmµó™ây‰õ›C©Ë˜:ò PBÅëˆõíØ›º ×-JNJ+æ~1Œ10fƒ1'L]0¥N }áÁŸL«¬˜^]ußšm¯¾6œº"€äA ÌbóÀ˜ ÆœpùÊ­1?L]0éFÞxsã¦3笉)ТeO <žº"€däA€˜ Æœ0ØÆ,1抩+&Kÿ j ÖÇñ?·÷ïO]@bò @&f†ù,ñÏÿ!u9ÀË_ùyÇ{òÊ@FÈeŸ"ËN8ïSdÐ2^}mxåך2üÄÉ×SWÐ(äA€‹Ä\1fŒÙY&¾üÕÎ2M-?sÔ‡?ñ„3G\DWÌcöè,ôмvíyù¶…¹² ÀȃWsÈì*Õ·Þù­˜[¦.¸*‡þiɽ[âÈQ[ýÈÆþá3#©+hPò À•ÅL2æ“1«ŒÑ2f˜‡ŸL]pY§‡Î®ÝðlvÀ.½¿ïè±ÁÔ44yàjĬ2æ–ÙÛ 1ÛŒ9gꊀ‹=½íw³æ=Çém ûõK‡S—ÐäA€«3ÌìëH1çÜòÌoS—œ³{ß‘ù‹ÏŽÍÍ[÷¤. iȃ×*f›Ù{1ÿŒYhêr ÔNœ|}ÙW~ÇãM]¬üúOàšÈƒ×!»œYÌ?³ï(¹œL½á3#ëžx.»`èâÏÿÐw{®ƒ<pÝbþ³ÐEcFóRç0„)³½ׇÖÅÑwËú_8º€fõ¿þù¥KãgêBšUÌEcFš]ã,権Ë·oà•Ûï~2ޏ™sÖ¸6(À úçý}Œ¨ñ3u!Í-æ¥1;5fª1_M]´ SƒC÷­Ù6½º*þ¿Ä?SWÐôäA€‰’OV§UV˜¬ÂÄÚ¸igþ’ËÀÁã©Ëhò ÀÄŠ™jþa¶˜Á޼ñfꊠ¹åÉ®-Xï#ÙK˜ 1k¹«“]À8tøä¢eOå§lòê À„“&IÌ]ó“áÇœöÀþwꊠiä—t™VY±|åV—t˜$ò À¤ŠylÌfcNëbÙp•6oÝsó܇c~2ñã»÷I]@+“¦@ÌicfãmÌrc®›ºhP»ö¼|ÛÂÇâH©|ðk};ö¦. õɃS&æ·1ËQ7f¼1ïM]4£Ç?ý¥§ãè˜Q[½vó§‡Î¦® äA€©³Ü˜ëÆŒ7ÆÞ˜ýÆ8uEXñ øÔßýÈA0•äA€©3Þ˜÷z+úvì­Îÿ†7ÍR‘RÉ¿*óa_•¢l^úýÑüKµ?èû·Ôå””<VÌ„óS)Æ 9u90éœt qȃɹÔ%1òÆ›ë¿÷¼‹r4y AÄÜ8fÈ1&Çl9æÌ1sN]L¤íýûk ÖÇ~Ëú_8ºêäA€†óä˜-ÇÈ3ç˜?§.&ÀÀÁãýô÷c¯ž9gÍÆM;½ÖÐ8äA€F³å˜3ÇÌ9Æç˜EÇ\:uEpN Ý·fÛôêªi•_|è™øgêŠChLÙD:fÑ1—Ž_L¤i:ßÝòâ;ß·6¦·ßýä¾WR—À8äA€F³è˜KÇ@óê˜]§.®Jþ±çêüo˜c42y ñmïߟ]³Û‰8hp‡Ÿ\rï–ì´HëžxnøÌHꊸy )ļ:f×Ù‰úc¾³îÔÁ§‡Îf—M‰]téý}ÇN¼–º"Þš<ÐDNœ|=fÚ1ngòŽxꊠnóÖ=³æ={æüÅïÞw$u9\-y éÄ|;fÝ1zÇ <æá©Ë¡Ôbo¼mácöF€&%4©-Ïü6{G&fãÞ‘aê=6˜¿[½vóޭhFò @óŠxÌÃgÔVgߨŠùyêŠ(…á3#_ûÎ/³Ï·Yšš<Ðìò3:Æüö¢ø¿§.€‰'´°_<ÿóy®ƒ×JBhm>ïÇ5yõµá¿ø_|Þ $äA€2858ä| ¼%ç#(y ÷±úÿEÛÿQÿÓ÷ÖÔŸq{áé¶Ïîíéí­µu÷vÍ®Õz:Æ<ÙZGÏìX¯½õ :»j³;Û;Ú/üeqagµcvµ»»gÌ“­V*³»+Ýõ…ç§ø‡—<öÄ>Ñùs/ì9ó?öÅ%Ÿ5ëÜ‚¹K>y÷=£‹²ÕÑž¯’Ú¹ÿ[iëªÿ˜¿øío{×è¶õþEÛü{.WÜ_Þù?æßñÁ÷·½§-ûë»â¯ßÛö®[?Ø^¹+þ<þÓÅÛàÖxúmwþmý×úÏÏOâ]iû¿ã·ÿ7žãß¶u¶ý¶ÿgQ¥íoÿö?‹›ºÛ £³§¾ýÏí‚Õžs»`guÌfíêîœÝÞ‘íÙÞÞUÿ/ó;½Ò†­´ýåïù\¶²Ú>þ7K—ýÍçïùDÛòO}lÙ’¶¥ó‰%c×Ü¥¸ô2¥{ÌuUj³{z«½m•ê쎞Úx {«oqp_ôt'虳֗^n8˜ÕÇ]¥£6¦â‹Öª—] 㮯ñ·ú=¹;Þþ¶Þ¶wýEÛÝ×oø¹^y‹÷»I}ZWÞ‹eŒô4ÄŽwiiKox»úãlÜ39{Ý%¯Véí>ß}FG¾ñ:RÔW«vu¶uvöήtô\Åî×ÓÛ9»ÚQë>×ãÆ>ÊÄ=»¬ù¶·yã1n¹½³»ºº»Ç<±+tùâMòÎ7Þ*»,›TŒ;Ó¸èy»ð [qrv½K7ËÒñ÷ñ7Õx`Ü-=%»Ö¸;ýõm‚)ßßn䨿ê]pÜ55‰#Aqg»ºYo{aÖÛÞ6«þK{Wuôÿ3õ –}ñÚæ¿we7yËIp6ýmÏæÃ·.˧Á=½•ú ·»§ÖYmý¥ÒU«ÕçÅ•Xµù@þ±‹‡õ+Ív{ººgwwwÔŸpG{ìb]Ù¬£ûâ¥ó‹KÛ;êM/kkùŒ»°xû¿>÷üâ~âè¬v¶Íêèè˜Ý[­>fOwoaÁüs Ú+ÑóÇ?w»ñ—o`Oì·í]µ‹ªèš]í­õf ã™eO·3nÞ=Ú0ª±ñã)wÅ“¨Ïd² Ï%s¹…5ó¯§rnêwþ‰]ºptë´Ï®Åf/V{a+Ÿë¹…ŵ2î=þõØÝ±>ôövÔzÚºk½³kcöžžJ}ØíÉ’T<\ô›Ú…¿¼üÂ8G«î®WßÓyÙ…ö³Î®Ù•îlªÙQVƒø˜?áŵ_na}špþÕ͹ŸÊÐÑS†¶zsDÑ™Mj½Ý]—Ÿ2´·Ek­Tâ/Îÿßü?ÀÎÙµîØ5ë­;゚/>÷ÞÞ†Îí±–*q VͬcìZе]‹£/{ž1xE¥—ùËó÷yaŽô¡%Û6ïü“ýÈß~ìsÿT[{¥>MªôôÔGõsÓ¤h¤1S¹ÒsŽÞWW £í½íçŸsG[GOw½øz=1-Œ%ÅYR­­ÖÞ[ËÖÅånÚÓ6«§«>KªôŒ™$]ӃνÆ-¬­13¤ Âê;FG}¸©õÔÇòj>„uwôŽîç'CvÆ_öôd cªÛ^OV1ÉŽ…ÕÞ+,¼ø.·ð­w‡öZw{oýXˆ¿ÖÞÙ1z Īë¾d§ˆégo­kt¦>»Z‰™Ü¬ŽúP[‹_:£Ô:»Ûªí1õteãh4¸Ñ}¢'zñì®ZäÜY•Ø ÕØãÜvVwO}ãUbïì‰>ÕCÍè6ºžÇ{õ[®×Ó]©…]ñç1C˜ð£#öÖö‹ö‹K–Õ‡ÍZl±›zœEõ´^ù˜'_XØÍÆ{Œ·Þ#ª1Ä÷Ô÷ˆöÎú,©VŸ|×::ê3“KƉöX­Ýq˜Íê–ÜÑQO{Ñ}ª1¸wvÄлSµ½cvµ'WwW,iï9—¦z*íõVc;tÄŸŽfˆKnÛSß§crßÙÖY‹ ÛÞÙ™ ×ó¨s¯úQ;zc¤¨Ô_'‰%ÑI'~(ö䋦‹ïþü5¦µÑICo¤Âî˜ tf¯+^X‡L­vn&;Aµ=æÏã/ûÑû¯VºF—DÕÙýwvÕG¯Z”òÜu÷´÷Ž.ëh?÷˜±ÙjÙ’ÞjýžªQuç…ÏVlìÞ]ž[ÛµJ„–ÂM»²S¸ûØ=ê)"v¢®îöb©ùŽ–?Â’ÑgýññvÒó/˜¾¿¸íkõ eï³FWh5vá¹›f¼û;UF¸Ö=»Ví¸°+Nº"¯wVÇîtùÂâãF¿ïŠ”}™…cn^bªµË,,n˜ú+¯£‘o̘Ãu·k}Éè+…¶V,鳩bAO=^ØTçŸm¾¥ ò uñ*¹¸ÆãutÖ™X#1‘ÍGaaì¶õYg-æêõž\¥§»½K¢ŠöÎlI{oÄÛúƒÅžz‰õ/n3úW]í=õ{ꬿòŸ-©vvõ\X2z»„»FïìÜÂùcÖß«ëÍ^Љ›W:G q6GïxÛ½¾°¸1ë ºj燤ѱ¦¾$¿³ócM,ìŒa·0ÖôÖÛžZa¬é­¿pG˜±¦·sôU³ CMo= žû«l¨).ɇš|aq¨).̶xýîkÝÅ¢E*½còXM¨½°w>Éö F_¡3ÔÄzíèê½hŽ…Ý•Þâm{ê 8’Å’Ø6Ýc‹¨e¯{J=¿›]x:…%ù|É.Zj.lús½giqañ@Îw§qž¿ùgÆ»Ïq†šÈú³Û»ë{D­wv¹=Ùìîü˜™VjѰêKªõý?Ô³`ýß=õfqî߯ß(¦"£Ý7ÿ›žsCÝ…{9¿äüƒ»]¾°³Vÿ°k~O±¤Z&¸ó >ž9ZRñò§rîŽ.~r?7¥í¹¨©yÒ…­pvBÅç~f¼û¼xšY‹éGGmìcÖßm쪿W|Ì|aa WGãxGõ2 Çܼ+{‘bü…ÅçÑ^}¯vɲXu…¨^xl½ÂQW_R­Tjÿ?so²kYŽlÎèbªÁõÚìÉiP@gT Ps×Ëѽ H€êï‹Ë:÷æñðÈç‘©œdÜå‡Ñ¶ÑhýglÎÊ) kÁúYlˆ~OºÜè6µÎ+–]Ü@R#áJñrj$ò®F,Wsj$9§F ¹íj$í’W#è¾°¹–o=·öt›O»0G É´FÈvB&‡o²` Ãé‘@®Ò S~¯u×#Ö–œ dþáôÈ Qá¾@'Ü7·ý÷æYRgá&“¼ôåU^Ž?lâ^vtv±ë‘c Í72ÎôÕýøVGÊû$†h6ÕÅiº?¸Ô ÷µùNt û —Á¥G>ûÜ.cd¸úÏÿñ?Ô70ÿ>@æ#ÍC¸åò[¸m±sô ¾`A¼¾AOŸ]MÒ· ¸AªÍ…¬áä› ÍïÁÔ¡;Âg•p÷cßuÂ5(Â|;ÅYèÜçiBØ áð“`ó§!} íÚû “_úmp|OøÔü,OØGÇ'Ð/Ü@G¡ÓlæÄ?¦ÜŠp±Ô×ý‡0é¦zëñ1¶3OI5åjñ[)‘LÖ™ŒMwÈ©í`™È I“b“«‰ìW Dâ0ùû*²«M„‘çó6 0¬Ñ6Fíþsž|³‡:œfý÷£U,8·¦{kÑœaè#"hÞ§#¸¬EeÃ#í}³9p†\GpY‹ž}ÊXók©!ïf7½aȺ=‚ÞZôìs?×?â5|oôå¨yÛ¿s¸´Z;B>z”Õ­öŽ’ tD[½AGÉGŸ±%܈¦ÝÁ’>o”œÜÊhKæhæ™xÅrÆïýéÒ¦ò1ʸ‘Ñ@G±ÕÁôd¼÷©cÁë>êŒnÓnàNÆ{Ÿ;ó·H:•£¢Až`×ñ~Æï½ÙñS¦ÝH¸°E¬Õú„-ú=ú“al>‹zŠy:i—'Ì“îÑßëG†_|ùW}E5ö $Hˆ=/m¶ì-`ɱ,HKÁ©â@Æ•ú¦±ãŒ£æMc_ SÎ?Rý6µŠú\Ê9š—Qâ¬1;k !EUqhì@šõ&;ÔQ¯ŒP€v`;dk€à5v€óê[–Æ$·ì4ö Q}Ncß@Z>õ_å¢Fj0M#Çà•ešl y©Ô¼Êîtq"Y¯²ÓvõÑ6•vµ÷êÛÎozͲϩԱÏb²QªÑÏÕXÍÖãUÙŸlêTöµûNewàÒΛÁ¥²?û<Øc !´vÛ/ÅS¤Ý2a˜vžïWºúpk='H;uý¾ÌqZ¬á¦nÖDÒÆ ˜Ÿ¶½š‹›šiu{e˵½òˆíÕƒ*÷#‰À½mæß $ó/Üb\æ_ S+›ù Å›ý÷cޮ歽@æ‡í,ÂßùÜ© Ægÿuà2õ¢yÉ$‡Ž Û”pØ{`µ;»ÏG@¸\ÊNâ±ÎTâÀ ÔRr'¨Ì5‰3‘Ålhg‚tóZg"}²NâxÄ$Ž^âxwý_ÕÙ€äžöo}b±¦è¸ «„¾®Ër8“°)Ý|MCŠÉ7wÊ+V›Äd"/ÍÖbb,ü`Q/nÖÎ/óïý×lÜtù÷ÙçIÜðÅ'oæßªáv"1Ô´ì½óC¦88gžb¢¶EJmZýâ ²HvÛÕ“Úv×xμfe?óËá® ü.WÔËYû±ÿØVþ´²9/ð³Ïâ“…Ò(eö¸ÐwÁf˜Ûâùy´ëzƒ¹¶S.Ðþˆ¹à~M¡¬>†5¢¡ûÜÈ-V6»¤FîøµUêçàý¤Ø)5ΜHÛX¤ÇHœe*šþs ·¹SC‡A¯.í1À„DÆuÑ a¸.´¦¥;ÎW¨±nª£aîsšm#,°ä}x>ŽæD8€RÓ&Á'V£þ|¹–´äw€ 6íâ{bôý™ôÐÀ²ÞPÙm˜Ý££ë‘ÝþÀv ×vÕaeÙ+ óÒKíIÈ\Çîr†³ n ;¯¯®'\צ¨£\Nd/VÒE8@YôÁƒN^Û;ípaë ]|t–jøèïõ'¹7{nT;îEö[6ß~«¹\4ØEÖÝ„ÿ‘]· v ñ˜mªZW¢%¸™k¡p×À³*ðÔ&X(èwœS*ÔÝ)9Ç¢ümÓ£ýwGì1ïwàÏd¹ÔnY.äqø×o¢råmÊ2*Ä‹ý‡ýÓúê„ñîy.öƒ1[aSU¡˜±R(y%‹)hõ!͹è•Àù•¨=¾~ÞÿÑ—Ê)#=®”‘Ò.™x£`‹àS\¦‚2›© â®ð¶åGëA¸E>ÇŸg=.9<Hû3¿Ÿ‡ âmþög§fýåáíF¹0¯/È; ³Sd[)0º#º.-áÆ`žGâÅyœŠÄ wIB¢Uþxèø‡ó'Ó`¯Bé(“Í8¥¤5I)I0FNÒ"$T”4˜T‘»…ï*#«½Á¸ülû1¿-šBù-RoQGNô<9? rþNMÂ'~¢b&¦ %ñ2ZपŸœn…'¼„JÙ3Á ¿œJ S?®}g§Hâ¬úÆ$g⼦ZãožEOý!;ýéšÎÉ,¡VIH™ŒE )pý]S­ð”¹˜ì9…)Ÿ}Î »sò:5žóß:Å*̦S1ÏR’ÆÛ q?·´€?1. ™?n£ýTSwH>äON7r 1žÊÌ7Üþ—N¿!U¿v¾™…9G ôçA`ŽàrÏW\”BKýF3}¬±#ã½?YÚjíȸ@G1ëó„9">z|Œäˆ¨àF/éõ„m$|ôx#áéãyÑ0G|Øy*ào@GÄ{< H’JÙSÁè¶:8‚‹ŒÏ>…ŒSPÒW<ÜH¦ÝÁ>wBâ ¥XdGÈ…yšáÒ•F.B>zBNÕ³ÝȨТ—k|oýé(6¡EB=µ¬Ó#èIøìóõ#Ç+´ÎPÉH¸ÌfHv3 jg™áŒîbyì–3€5Gg:’Kr¶3 bý[Æ3Xz»õlÎTVêTœzÌï@g#¨d˜éOBÿ$$gC’{ÚÝ é30+0²3£¹®=R2—î¬fGÒBp†´ QKÚ)miõÔLΘF³È»„¬-5;s-²Uç;2o}»A »ÅeZœE `µø¶ƒ‹¹þô«Í¨F\”»³ª9NÓõxDíjO.u†µµùβæ@gü^\v—qíÙçëéÁ¿å˜÷ðl00'Ìy®3ÐÜ&iKIo@ß F{uýÎÌòª58³=}±MÚ,|Õ#nÑÙDêœ{m­×6Ë#¶Y²ÜOCÉüöŽ× $Ç+©–ŒåxR.J^[ŽW€‘ëÄñ $$ù©Gg Õ*óŽW¨³’첯\>V4¯iÔw 7Kž6`hŽ@æ ÎEgb½©ÈU)ø,?8¤æ¸èl T’e“90ÓÔ⢳ÉÛU}–߆˜Ì1ÐËʶ#0zl¬1¸ÈÍÆ@¯W±­Ò§‰Ii÷¼‚²½ÄÝóŠM½ŠÏò£¯>ËHî{–qÑå³ü§ÙrïC-‡xò©ñ÷ò¶éG¿bAlÅðN5ˆ·?ÍyÕ~Ü Û”1¿ÚLÏÈú—8ÖêYÎožrıFɤ`¢Œ˜—È]ÔáŒô¯Ù*£(Öò«=±û0ïÀ¾[­DHˆ>Y¼ÍãÈüj VlvTu«òöt«qé[Ät$ü¼[möçýjä¶ÏâZúò«ýátáV£Ê@ׂÚþ¯ª³o¬tÇ^ì>C²ã4 <·ÏóÛ=gÆø ÜiQüi­üZ(‹7U£ d8Za_ ¸§p?ùÓ kÌéÌšKèS*,šyÅúÏ »Üi?j[ìÈS/m¹¶÷ÏOw¬†tce¿ÚJ…BsÞ肨02Àz2XvGK-ý¶) \Û÷+Z ëÇ®ÍèJ‰éY©—ÈÇažíº²ýÿ‡þƒÓ·Nt}*›_Ì0¥( Wj*2Yµ ¾ddSq‚ðjg —»y©!o¿¬(n»ÜÖåIÓýiœ’‰˜Ùh4u´(÷H¤$ĉöÿú@¤?ržËlùÙÍCžPžbï"Ï×Üçª>Oñ†Akþyêóµ;ɪïÀÒüµbOxm=Aiþyêóµ;É ?)¸@\&cÛ}ïgP›žú|äF ïRÞ©& '¶Þ(yïñµ;¯7B.ÐÑÌ:=aŽŒ#92è)¦½ž0OÄGwÇ€¸„7†TÐÂ\âGp#ã£Ï×î)÷tt £Ùêá.J>û|ížò’zªY·GÐÓòÑçëì)÷´4p#›:Œ §å³Ï—w–o”Th‘̵>‚ŽŽ·þ^»³ÜSqŽ`«Ó#è¨øìóõSÎòyãdƒß×ÂfIâ,Ò(ÃQå@ˆÆÞY0‘—³œr>¨³Üï,7ðåÁÚ¹ é˹1߀kÈJsr–?@8Ë 4g96»©³œyLz_9a)Æå+OTi#ó•hðL{_9ÀA.Dõwc]ô• ö¾òÔ?,ñº\÷U}å@¦4ËW¤ÍmÎòD!¿­,gy"§+4Au–âåŠKÎr×Vœå®q–oÓPoùšíb5]‘GháßOlú:xËñäJøÚÀI”ãÎQgPšžú|ýÀ[nÌä½åÛèVÇøôÍÕ1~ýÖ°·ü‘·|í–zË×n©·|Û-u—¯Ý²ÛnyÄvëA—û©(ŽÈT‘v«§¢9EÝå@8üCÝ剢;ÛØÜå9’DÝå@j¤#q—âÝå¾6°°~ôrŽÌ7 Û”qÚ}u—/¡£îò%tÔ]î…ŽzË—ÐQoù:ê-ߤŽzË—ÔQ÷’:1©c —:”]o¹ã ñ–ï $îòÅgê._¼(îòM註|ccu—»¦â.wÝ‹»|›…úË×dÕlA16~°éëà/·sÈûË·/Ú8êjóÏSŸ¡cÎàÔd“¿n ”Ï4ò,šÛï1ß~&’Ϻrè]æCíã·­«‹rˆüˆ„x—¹û™›¼tu_ãÍeîîú±ûä\‹…Üœü<õù:»Ì·1Õ;¾i ÛhóŽŸÁmÊâ?ƒ~ê2¿ƒä27Ð\æö}˜ËÜæ3·ïc-Y¿ ÑïãI™×ÙgîuKŠni>sÓ-ÍgîuKó™›ni>sSÍgîuKó\zÝrîS3wæÐmK<í¿úÌ 4Ÿ¹‰yó™;1o.sóæ271¯.s/åÍenRÞÜÞ&å7D¥ü”ß@Þtu™/Æ—ùÆ>ê3_\¦>óʼnê3÷RÞ|æ«ÏܵŸ¹ë_|æû4Äiî&kœf rˆqñƒK_§¹W-è>éÅeGp©–Ï>_Òingç9?Ì`ip%ºDï³q5‹…õo))Ä—¹ß[z|Iu¾Æ’p¦zY_H–A)ŽgAiþyêSÆJ•+éá œƒVÜ4°ð—¶u{¥ùç©Ï]‚}à›@!:£$é\ˆn#Ú@®õ"ä£GYÝjï(¹@G´ÕÃt”|ôyËSrŽhÖít”|ôy£$Jî ˜gÉ…-Z\\‰/¿%ï=*KJ-½% t4[AÏ’÷>•‘kéí„4ÐÑ̺=ƒž÷>wB&)Lç踠E1Tˆ(·¯}aFÄ{o"ú ×Óó$\Ø"Öj}ÂýýÉ0:G½…-:Y—Gl‘îÑß-_øö©ðNFJÅüºój2j•ëó‘NЩð^åZQ@ˆ¶ß¹!Õç£s¶þÕ磳o'¡ú|†H-:ª‘fàkçè½K±Æ…ÓÞ€…/žÒœêóÝAªÏg !Ä@ªÔÏkÖÛhCgHõùœ*ýŒêóÑŨ’Ûkp}>º ‹¦êó$窱„ÌV2ÅsÔ† R|O*À ¤åSÿtR œ>gîŸêóÉæO嬀Ւ’¬Æ€VXá$‚¡>Ÿ!²¥TŸÏÀƒTŸÏµ­\ŸÏõ_¹>ß6‹ÊõùÜ\•ÕÖzBËþ~bS§ž¸ÝŸw)8_¿¡¤\ó?¶V‚¾xNeÊ2¢kZ¹±#*Ä ¾"¥øø;íð×}“Ï;‚ž8¢þjÊŸ…â_À ŸC°4Øù¢'¬j-8Â2?µ÷»òûU«üso¼e„M·-|ƒJìWvĦ,HùFª:šžFùE4xUxï© ጮsáV±,×#X¿˜_”ůFß1ô—|ÿˆ0ÎÖùß™s… KYóÐ3{±_òŠ/Yï¿ÜGÿu„K(‰……Ï{‘™AÖ€H еßfQù1]ç4¯‹Á0.Y \“âü:â`ññèø«TØ„h™yßÚVöi{^sÛ|ÝFúå*è sêóv’Äçen~’1Ïãt^Lv*S,7y•~þ ¶æ~ù„Åi^È"‚]2|>ƒÆj´3òÂ7ÞP§éöÃ#ø˜û;ð_’î>CaÁ{¸£³DÙ|1¡®–Ú\À<€ô±åÕW[WÄ÷0ÞüRû|ýEu•5ˆcŽ2÷ØÁ¹Õ'—ö[ȇ§,kn:‡ýh#QRZØ*+çŸÍ—VþaÄ'Ô-ügf‡–JÕ_žm‘¦ „òè#ñ—8uØí Ê)^üåÀ0êž0ˆ›üÿ¢—Þ‚Þ¿: ¼dɯñ(gHI\Í{%_=s^çG¾(4ž³Àç!‰÷pÚ_ˆ3ime×ÎÙÜ)üÔ¸–þGítÃ̧ÿä„ñ2;¥ŽÇ„<ý¿¢¼rD™Ý>?£¡ ÉæÊ³MŽ ÎzÌóž‚“žú òÁ³äƒ÷C>xD­¨óñšKès¶$ަF•¸ä2õ§æRNµŽ[¬xäIÝTU`Ë’Ö=òÏŒêÒÁÜpžòe .—2ÑÿöóÓÅl¯J/ÒàáŒöT©ø•å•ñæ{¸ äÌ Ë×â]ñBŒ4%9ç·¿¥ùç©OÖwRB6.Ô¨©d¶¿<Èaòd½öpµùç©O+bÕGLáHͯ œÊÉ%¹¯±Ž 4ÿ<õùÚ£”Z‚¼H£ÆœŒaÝȶÀE!×ÜÑòѧ¬oõàhi '›õp=-}ÞÇò´\ #Ûë:Z>ú¼Ñ2#|ªÞørŽ–5q²ÝÐÑòѧ¬ï Õc£¥žlÖÃô´|ô©´‘²ÓÒ@G¶5Öô´¼÷y£eEVL;-èÈ6ÏÌÖGx:Z>ú”õõy¹Ê–z²YGÐÓòÑ§Ž¥ó´\ #Ûë:Z>ú\´<ÈÚyј‡Ä>ÞÌ\)bTx “PJIZ¹èb‹ vƒC¾4¤öD¶ÂÕ߀ XU62¾%EÐŽžuM@Á—¯Á3#p  Ö¬sþ‘4NóØ‚ˆë6k*„à5ûDOî4n¨é6ç&þ”vˆ×qcÂÏ(W¾àkêw˜¥Ã|g)L¦y€‰äCÒRÍ ë†àiÇÞÔÌ0È :è~^²¡Œ š Œ`'$Ƴ犗$vÑ"Ñ,H¦ü“Ȧ1Dv“÷\Áƒ¹aW¬-†ŠWsÝã?ø7nà ”³›«q™­Ç#´ìï'}-ß©í=%µÈdòØ®3AiýyèqEä+…ÒãpŒDz@šzS,;ËèÇG~u¼·æ×m  ôû2J°0ÜAúúl¯&@õˆÖ^%èäyì{•Ésu·W¶bÛ+Ø^=s?Û·šqCšW«”+B{¬K@PÚ…ž8Äy‡êBŒ‡c¼°¼‹âæbrå )@(%ï‰ßù¢[–¯ D ŽVÎp3µôs;2Zcx‚ójç¤ ,W½ 'm€$1›š´™`WuÒ&#('mæ¥hô«ìÒf‚­”á¤ÍD„´*m<¢ÒÆ0/m<È;Žî[(Ž+²¼ˆ·1&»ó­2x>Ì™kNmò&WNéßX8ãIÈãÕ–óõ]÷M4±mˆ›'›l{,¨ÝÖýýÄ¢^ܬÝë´4ÐÎÆOGP›žú ÞÈõ¦O‚…èò³æjÇŒ­Ç!ÆÂõ^÷Þ듆¹¯yqØtúä½Çí:öÇyÿˆ37 vB™ü5‡^ø¾P²þÖx—ÂŽÌ@OÖÍéÓ/kÿ¼ò[¯‰íÙ/׺¡˜X¦Ù6…÷5÷cÿå}ðׯóxÂy ÿÌÀû{°)¹Ã…¯˜íËk!EÀ&eîE›Xb7­åG&—uŠâÈËI½óüE 눳ÝVuCh[ —<ð3]èש §È³Ã»õZö0p\öà.®AÍâ.ÑËA^¢°_¾)ag^5{«™úÔzDA#þ,c)(P´ýðˆ=¦þü«¸ù·Iàà®Ñÿ°rŸ^b?üÝëÈœ¨ø-H²p ¹buÕº®Ô%þë©ùгœç_J—¯_ì¾EüoŒ  h°È¿Ôß•ÀÜQ%¡”Í};9øóèLpƼkŠ—qêSÁ^Mó'ªdù3£.·ìO¶CÔZÚæÏý©é#ó¯w¿•y²§Ù]¬BˆÐ£sg@_“¢=áí¢Îb«PøB› ÜOüöð>Ð;ðúsQ‹Ù øekxA–I‘E6ÏÖ UYá–G) Ò øäÙ¡ ûe¥M= R~Ö¡í2ñF~˃jÊKËð{Í¥¤;„yü̸`‹ŸiW2ÅŽÏb•çrn¾p"“O~ÀV +Ú/g(°l@ñ©¡ Iê¹ù}^ù=›œAïc9J.ÐQÍz=aŽ’ÏwJæù¡A•ö,i˜§£¦žAGÇG²4X§ iod\࢘upÄ=ÊH±q©¨ˆ.‚Y§È“ðÑß„ 9•†:z•4ÏÊÒÐñÑ'Yèb>oŸžŠt³Îà¢ã³OË&æè¸@G4ëõ„9J>{|ýЋ ›8l‰Aý*Ni(Þ˜ý:¨ k"ÄǸÁ7›usÄ1%sŸ§Fébè§nÔLÿ}î¿!äþAiãîÀ—á®9¨wìÌoÀÄÕ©yŸ'ìõSi@"t5Bà=r•©qöš‘žÁ.#=¹ñ3*T–(Ÿ„¦—¥Ü'U`ÓÒ¦îË Ë·>ÕÚ ‚8¿áo²ôáo” [W6­J#ñøA¼$rÅÀ6!¤ä¢oø¥PF-¦Pˆ(pªª2÷4H§’y‰™L²Ä5R ^!$üøb' ±Õj:7=Àu¼zoàÝ&‚ö¶æjlfëYˆ,ûû‰E½ÙÍv~œe&¿<ˆ÷`߸éjóÏSŸ¯ƒ_…¢%Ì‚5x`ŠãL;Ç)æ‡msÁˆR<ƒ¾5^.‹µ¾ýÆÀ¦ŒpÈ„ýûjn·zdI´v †TзÝ";û”‰k·lÁ¶[ q»õ ËM’Ï Ì¨óÓèóŠ£&« ¤*€Ô²Áhƒ‡3ª S¤‘“¼Fæý)jØï›aÓS­Bùì@®I×… !l^¥æ¾6:§zg\¯à&8ƒn‘*8Ü~wIe†eªóú7¦ÈJ/nøŸMÜ¡ò©&nò¼A3ðÒfîG&ˆ´Áߤ›ˆ´q/i³@'m(ûM}·Idã Ì€ÈîY¥Ûªq­ß‘q!¨PSÞå ¨ÚVè8ÛGd_m©]Í®2Ú„ºO#F.¿fk\f+ZÈâà'‡:yãv^ŽŸ/ºÏyqÓÔæŸ§>òÙí$ØÇ%é‰_˜'ˆXÜ¢Çÿ…Š 1ÓC0^ C°Æ‚wd ¬ŸA @Ï\]"#JC#¶ƒs-¥«yUo­ø¡†61ýÙš¼võXãwÑkeP/kíÇÛçf g!k®àç©Ï›œBÊ%7ö>ncè7þÆ<ΘoÜÆÔr{úU ‘"¦Fïέ£O\y¸cH0ÖöqP¿íS¶õÚDZ÷q<Ȳ“­ÀÄ“ M9}rIŸBy}¦O–Ø¿ÑéåÔÉ‚‡.|ªNOÌÔħ¾3jÛ´É‚£Þm¯M.Ð}e•ÃIã#¸ÖXȧXž … ¤]Åi“…¼Œ¤q.ñ0üSñŽ\*ÞKè\'ÌË÷Bq‡µª|/šÕ"òÝý½äû|w l8õ g´1&uuïì©8£%zm´Žäsâ[E›á9à`ÖÚ66Ý»î;?/°ÍT³SP—Ù‚²8øÉ¡N¼¯­wêäÝǼØé:uòÙçëO:rÿLs½¾‘ëÉ'S>ÁRŽqåß`ÐWcêÂSXc ü–Âykâªl>Wô£ œ¢Èá)ìþ=Nè‚Œñ´Ïþ¾¤ÊŠTnÝ¢æœõ~_¥ö=@HÓG9´må†9 &ówNà.Ñ’H©‚×üÏ&¡$õbù¨ñ[ïMB¤4ª¶¥\gv_~Tä|õ°ÿÕT÷÷e6sýô*g>ñc^OP×È+qÊ@ŸbE%ñ„5âèˆ!0M©e¤4aÈÅz‹¥Õ˜òd]z¦# ¡ÆSŽVÇå1õ¿ P°.D(#PPâ0†èÐ*7?~•èŒe‹ŠôÇ##Õ¶SV&ôíÁ ÔŠa’xòñ嚟0mûyèï¥%s; ”!$ˆyhaÈCæ­aNX±Çýí§7* â™# ™FÙKà µ°E”ÕvïÑŸX­ù"žaŽPÖü„9â=ú» ㈷°E¨5Ì [Ä{ôwÓçWxÎ[Ø"@Å#µc¼Áñý‰É°¯tw%žaŽPÖü„9â=úâ!Ajžx†-B­aN˜#Þ½¿x(—ÛþÙ.lª£>ièo°E¼G<ž8‰·ÏÖ0G(k~Âñýñ06#G¼…-B­aNØ"Þ£¿×lºÐ$;Ëiø0¿¹e|é£°Ê ! RFú»® í““mRTÐŽª2RD%×ñükéu\°pÀ)mØËcg‡¾¨ïˆØÍ#†8ÆÆµÉƒ3ïX‰ma84šªTÓ³£¹f¿$t™º#8Ɉ‚xQ‚àñÞ*ÿ]Ò&Z‰C¼Y „î«TÕ\ÚTl–¬,"#‘ô‘•Ñïˆy…$RÑÁá¢yºôÌ{$[G¤ùÒÄ@I•uý[JI°QE5ÒG®]çŠa«gyðm^ñ[s²E¬¿¿ºrc:§S¯ÍNÓðå0çFm£œ0mûyèï`-I‘CóŒI(»gjH(+Ìd˜3]ü”Êsm#0r:cn P¨KP¶Ã¦¢Ñ–:­?¶L ŲsÅÄ”ê´+¶JÝȾ<(q;´àʼnœ¼’‹˜³FZtF}4JRÁWs¡DÖÔLÀ¨–¡©·A!¿¤&&ܵóȃ™3—‰6à;,í{y¬r 2ìð¥ez‰¼>0’vŠˆ!/‰Aì¡ncbtp˜È˜Er™Ì˜@ ¡8™* ]ÒhØÆøvk2ÃM,¶‚,™á!Ú×Ù/=¦m;¡kØ?Ú ‹¹Š°V…0c2ø5PŠÌ ŒjU=n܉»¢$Ø[\BV×I¹ â²Éq§±‘­ÂÂösröW‰/‡¹oÓØå„iÛÏC¹Q ‡k!•d$yYÒ°y=@iç‚:T•c2 4¥hÖ¢03à%_úõG(•DÓÔn ±¸•aå«—Èî˜5”ßi‚2Ÿõ#[õr_›Um0'$í§îûYÍ‹¬‰ öyèï¦â ~.·šÉר›æö“* ÕvÆ|Û"iÄ'ÌMA¥=°>¢;bñjjgPËÆõˆ3-Ñq½­R¹ÞÂõJì„ê”ùéõ7CDƒŠ©þÖ#?´îõ·‰áJm Þ`nMH¬e<°Ü¡à*ß™0SÞ„1ôì‘–,nx~6/Q<ÿNýòê›>«j¢¯Âð`¢ØMÛ0²D±‡h;Ño N}Ë…éÚjL¯÷Å8XRÊŽµ:ž·­NÂ~' ÎÃvl<9÷ˆs›¬!>ñâÔ·Ž7ÿÊ~€=n`sTþÑE¸¿…%o<çÄðÚ쥾æ>Gc”æÔ·G¯ZCÿð54âÔÚ(·‘5½ršK¯·ì– …HÉ&B÷¨Ý8„ˆ¶ÛN4ü|öµ†Pm¡ív!Dæ„Ýt‚¤á糯›M¨±ïÛ›„ÿ{³þ iøùìëlR:8û‰#A‹ÖpQëÞ×n¢qÔ2h‘ÆÚ E­{_7#ТÖ2i–Ué -jÝû:Ûo´­–ž´¨uïk7ý8j´HcmТֽ¯›ÕÇQK¡EšeFzBŽZ·¾ÎG-ƒiÔðq‚µî}í¶G-ƒi¬íZÔº÷u3ó,j-[”‘fٞТֽ¯Ÿ±ðÐ32šÊ&Eb©}gnÊ€ëHí;é[§_3ï$ä-ã2biGþt†AÜͦ’Ž8ê¯ Ê¥^Å,6¨«zÚ2i[l>Ò®¨P7[l>ð@4 r‹ÁFÿvö…Ü]û#ÚÃ!zÕ>@nMj«¹A ‚Bj©1I –/ ÔRc¢@-5& ÔRãeÚjL¨ÕÅdNd²À!´›jªÑÝVKã5Ô(˨FYJÍ4N¨•Æ1¢i¬•Øh¬W6ÑøqÅBcS®±©¯¿-LlgµƒuF…½3θ/OyãIÃÏg_?0Ì z²ïv<.Y&d¾ «©DÿvFû‰X,¬‹õ7â,2x„/-ƒ ê«Î£;sŒû ÏSz¸­d·Å8q§?tŸ‡µ]l`óèóÙ×Ù ãFR‹‹k Û8µ· ßP¬-ÈÍZí/;Dæ…Ôú¢ü,ÆÇÏj{Q~Ö•)?»¿…Ÿïk?Ú]œVeÇ·‹ÕEµ*µº8­JŒ.¢V©ÉE´&6¸,¥JoÇK©RÄ}z]>@nji¹A)¬P;‹‰Rµ³xQ*v“¤bg1Aªv/HÕÒb‚Tm&&Hp‚Ô ¤¡ÝSC‹î®ÚYˆ™E9D­,ÊAjdqrTm,ŽïÔÄb­Ä¢½ªÅ«öš°‰Î|ý)lwc¬ƒqÅ)U¶áë33¶xBN©º÷õc»ÊO<à•Á˜I5céc¥AûAJFµ˜1.,¿{q$X`E»Ä˜õ‡Ò¥¨S’’ ?#±©ÿå>òë—UËÀöËí{ ¨ük V‚{…FƇš†BÁˆxéM߀GfÀ§Ibàõìþ ýªW•l3VóÚ ~[ް×áwo°¿û½lV-õ½~ûû“–_4Æø3SùáþpgwbÞ‰þüè;Ÿý¼ÌE¼JeŸ/]ôÈÈkóCÝiöùìéµÜPì ¡ÛÑ—ƒ2?pëº;AÒðóÙ×~/ƒ'O˜0 ÄS®´ˆbÀ¢€5ZtÚûy™{ˆZ.*d4±†OdQéÞÓÞ¿£’A‹$ÚÝ ZTº÷µS)'©¹¸É ]pãåXTº÷ó2×½W½èdQÅš>‘E§{O/s<•ºq“A‹(ÚÝ rtºõµÓ‰^¬.ÕÓÉ %KOrq‹N÷~^êtšúËF'ƒŒ*Öô‰,:Ý{z©Ë‰£8 ZDÑîNТӽ¯íÂxr95:çÓ5JSŸC ©’¯y£\8ª8 OœŒ.êÔ˜ÿF~$ªÔIŽ'¼ãý-S½Vò<Í ëßêzBâº@¯<8'u Žò@.ªà•—ë©ä†g¦ #çÓµ<ä{bÖ‚£˜ï‰ÜF±\£5v>‘$±íÎ'¶“D2¤¨ó 5òPh5ÒÙ3I£z¤òwk¼¹žpï§Læ—GÈJž§@FöC̆å©+õæØ*Œ²äwJô7Û÷àwbký­Ž§¼~ÂÄ„_Àu®EhÂïò6îà²]21á›öú›öýÉ_¯Ýót‘­?¶øáK,"ÓžŒ)ž6ü|öµËõ<Õ—ˆë)^iãÅÜ€p4åq„|Kxš½íöÄÕéAQñ>-¨_qý ާ܆í¼O8[ÝNÀûTu#tmºîo݈ÇòoÇÌä18.?Ø¥Õý$Xnä¶)\Ôî'rsâí$·Âý”ðá‹û 6¸Ÿä<)²») ÿ=l¨€8 ‚ûÍkAQúy‘Gš ¿,ö6{[X¦Œ½eGÅß©MÀ£3/2KÀEÎ.‘xò§õ´É8 ¦"¾ä\I™<Ö"pÁ %D{šõ.ÚqøŸbž#rd1¨LC+ Á˜ þ'ö"«H€û)m¼‰âa08[›Â6ërŠm³6,Þ_(Mç%XÍÉÙM‘÷_ X_ž°ÅáFŸ÷^²Ÿ™ós¾6(ãM9¸{2Î :JìéßìCJ#Öõd#ײºXÓ(âv"HJðX ø„ÿ¯MÃ~À³Ôö·…,¯Sô‡¤[Ÿÿ(¬õb› @Ÿ‡ÞnŠÞO-i¬â]¼KBÅÜÆáÉó–ŽÐÖ²à!vÄÜÔ甽C’ª¨©É?!v†ó)²sUÙ¹"R¢èÑ«‹Svv+;?Ö¿“§Sh‘ׯ aõªG~¥QÕ+8&ð £S¯: °G‰Ô+ø6Jé¦;ÁýáþdTJuxíJ¡õUÀ³pµâ×÷K¯ýác€–Ï•.jê›4…*$'M Ôç±Ä)ÜPùñ–8…ÿ¨µ°Äië\ÇÄÄ©Nœ´Ä©ƒh'Ñïˆ]ö#—¸‰Sò‘õucI(°¯¼G\¯ÙËS”{/mx„seü­U„·h Ôù‘t70"*3nÑi¯?•ÿn æ„©î¦S°lË×g|ñ„œ‚uïk»TüDtïæ”ÂKÊô¾)"b WcÀSŸ£¡bÉüW‘°d|ýÝ[l®¾ãPŸR1ŒñÓ1`ÁœŒf¯B—¦Nûá »Oú ö/zºJÖd£ªdÏ÷ •ºä¬þâWTÊÛ@×RïY…ûÊ6¾ø)è+±äñ;îíõ×<=U„ÃkÉg÷Vâé膇w-ëo=ä,¯f·G'/üñ`îèþWس@ÿprAú¼M¯v 2¢JÙ?çÝ)„©±(z9ìcÐ ¸l~—çâÈ:«×švä öÏû™ÞêL òösb??¥œÔ}zû™ß EjØó'Þ~ÞÆýo?W„7À?€·ÚþöóóÅÓÏT‹qÞ:qOùK~¾PÎóÑ#á ']/{œ°)H.ªUíùMAϘ‡AþO>ÓQy*5°ø¬'Ÿk·ÐÊ&·Ó“Ïó §U¤Êw-þ™GŸ÷qÿÄ£Ï×à9ò»Í??až/Â?qµ¨óügÖò_o~TÃB¤Úd"Õ‚ +Ãm®@¦àGx5~Ñ.PvTE‚L…âˆó;%ägÎýÖþ)·)SPW( Ê3Ê¡!¿q³xžäΜ0¡:ŒzPÔõÿ?ôä<Ž|n‡ÛñÔ¶NÊ IÜcÝBÇ$&üiŽ 21³»A ÇXØ0:LPîÎo„b~ÃþA% Äü¸S³5ç­¦^”!v &™vÛÅ#èÿ?Mê-äK¶€¢¦¨9:86FêUpkÎ#HêÕ:fuà¡Ä†'÷Ã.dô=ž”ןfºÙ od# gnS.öÿúK×-q£ÐŸv—Îëéd‰Ê—ÚÄ.«ûYRõ2³Î“¶Ÿ‡þøª‚çT¹æuäÒ/_ÃEV¬¿ÚúIËÏCo2Éö‹¨,5· Éš{jý j÷ùèi·) ªsÁ‹J *Ž™ =y [¤XmÉîýÉj¬¹#™a‹>Öú9’Ý{» ²HfÈ¢öw‚Œd{O7’eÒåë¸Ì0G2<³žZ9cŽd÷þd5x$=íL¦Ð¢Žµ=@Ž`·¾”^HŸ–tO¡—"‹8ÚÝ ZôÚzºÑ y¸âF/ÃmúÔ?®šÎ˜£×½?Y >½o3l‘ÇZ G±{o:ˆÌg‘ÌEíïÉöž^?ò¬Ò{è0ýL>.¾t;,ÈD/.¡<Õ{ÔÉà·³!kæMñÒR/SôL!æ|£ wƒ¹SÉ/€^Q­àï#¦ìå0¼63çâ:39HØ…Øè.Ç>^ ïãÊÉ@™¸c'~½Rg1¼ìH³›Çž Uƒ!€J¹‚ A÷üpy¾(•‹L˜Y›…F^›Šg«ýŒ–~ÑËCôt¹!ƒTiH` Ô/yí{aì5CïÆbOÅP÷?H(™tDúìwMÞ}/ËM/Ã÷±y^éñ7»`Šò|ërù]ü}ZÏTrö6:ØEŒÓ…ŸGgë¢ùý@Ëü~àCg!´F|\â@»Å}?ã0mûyèïuðÃÎ3›Þ}7–¡“8²áac.ý¨”»WÆÛ#ó÷zú@‘6\ nXÊi™méát±ãòî ¦3·¶íNÂkb¥ØöèJm{`Ûó Çýàjü:)Üe¹×¤/y(X(OH†¬‚o–|@ðeÁ7ÛZ†Áò”hx|ÎYÊE¤ç´/BÅ5ݾÊXµÃÓf°9(øò <“L/ŠôÁm/ôð;˜½Œ! 8i‚¿/êÊI\Ñð&¸I„ÁVr «8A@wäÄ ž4#8q‚{ÉE=©8Yˆ' zqâ0ÞmôžøC"vÀûÖŒe`Š,lÿg¾¢·Þ]t½´’ËÊ6’lô,‹w8òU]éSöÚ\ד!r¾ßøÑ\›£0ÖZÄŒe,éEŠîµž'_s­rÏ“¶Ÿ‡þN"}ã@nÐÁbÌay 6 ~æ:Ø]ÛùmôáQK›Õ _?B\§J7  ±¨•b‰ß„YÝÀm;üXÈX¥m¾k#ýrô„9õy˾*åh=HñŽ”X T"¥Módú·yÅõ˷༓T*c8óP8Áï «Q­ÿÊki8¸© ³ûå|Lþø3¶â-0!N%”¼õSgE>Õ¼õs‡&}äÿ vŸ ^ÿºê#*ÁÑxžƒ7‰c¾¬x¨ë«q  Ñ£ñÛCç_jŸ¯º ÃõïO‡!àÐä#‚©sõ x¿(©ò¾é¾¨\ßþÊùŸôozP£Ö/wóÍMŠ&©)B,„ÛûÒûâ* 9 Tñ2sPô{ð>Ð;ðÙáß‚W2¹åQ[¤ñC$‚æ×O0 ÌÏ4Ç+"Ð~<›~LÒ ­ QÄxkêéìˆýFýÛOZºä¾Ä4Ný+Rè9S¼9·1Å$™™Ø ¶mõ„ü‡õÎs`›†ùc–øóÑ£ `°fÿzå¢@¸•¹¯eÎbêså#AѦªò-#ümn^¹*u<·6ðˆ *mANXdÅ?2îß~~Ü©ƒÍsÙ #óaú¿ô£á“sñæX£×"êa~m ¬½|4Öב<%s¥ùç©OÖ'*Rœp-À‰›¥ŒÀá Ö‡ ¬‡#¨Í?O}ÊXWãW)ðnD{‡çnö`¸±Ž 4ÿ<õ¹ßi+´dzZA)„1‰iÊjŠ-ú¸ÆŽ’euÖ#¤bždÖþz:Þ{¼ ä©h˜£×è:"Þ{¼ÑœÒçøqŽˆå’òþgÐQñѧ, é€õd4ГÌz8‚žŽ>e¬yL$D+l”\ £Úë:R>ú¼Ñ²H­– tdkQJFŸAGËGŸ²>d”û·m '›õp=-}ÊX61OË:²­±Ž £å£Ï×—uÞn3Jy£ y‘Rb£wÐm HFj ä ¤2㑟(„Xéˆ*x¥©H)¼0i H¸¢)B Q]¬;ðåAÔöFì± ~?ÁN¹jÚœ^¿ƒ©K½y «€D¡B@,r2ÃÛ ¨N(+Œ4ô+Ê™@£‡÷P½r]-€å"+Â`«.b7 d Ú*‘* „»WÞUÛÀU‡ú‡a‘ CáYÀ²HuÂÂ-³—‡ZÈmOKìŸ`è¨ß i ‘ýŒRÄ¿K•oÚQ”ÙsMF'M¥ûɰïs˜<Ô[p3.[kY­øû=ukm; žã¡½¯ Ì>+Aiþyêóõô@Ì+Ô·’‹c-:L`M}ç7ýÀH½¥hŸ#è›»§7 ß• =7°–ê~ d\úÔíjЗqãÜ>e'h«lÁ¶W±ÍzÐå~$fÎÐâ7h¸^ôÂ$VH»ú B×2b ”ÁÏÃä›?¾sT­Báõø¢©t`ÏŠ!ßùüa™©àk+‡ë˜ä¥3èv½éz‚mxbRD°°¨¯Å&jàà.òü ‹¤Ðû.&k`6}“5éâÇÕ—¬™…£/Yã“5zYãAÞsôŸDú[P\\¹}çÌEß¹!ƒ!Œ^ô46Lß0Ù¤Í$mÓrŒ…'(O]Y[z¡úþ'è›kx“XxŸ'«Œ¶Öããá;z³6_Ÿ/ú¯ÙêjóÏSŸ'woü„L½8uéa ¬FEdVORéô¼‘"Xb.üxûYA½„æ»r( ŒÆ®+ªÄëdà;OT¦µ~d3—~î ü.Š­Žè%­ýØn«Ç=kÂ~žú¼+›Š/îcR‰¬÷1 ô»Œ´^„£Á­9òëÚ;Я£4Š~€ Uæ×§Gt¹ÍŸ†ºz·Oc‚äÈ·OÃVlŸ†GìÓxæF¸ä! ¯Kz•ÉoVÉN™œHº¸)“pÖŽètIÑk¸˜.‰Œ[ÚUÉ:¾á¢æI¼ÆØ¨Tå[Ðí•´ù "@~ÉvJ>ÎÑÉö*²z“í¨™½h¯WµD{•òw›h‡}¯Ëã9,Ú[ßš“ì0Á®˜—ëã½®ÈîÊc±fPõé2e\aÈ3c¼…Öæù¯ºÏï;´‘íͳ-¶ñ*î—´Ó2>÷ ~¸zß'¶©Âî4Mã,[‰GŒk\é%ºm¹W!è¾`å«äÔÇG¯úHá<‚æë…7¹¾‹ùta‹¼Xÿjˆo8bÒöóÐß²j…Àåð)ýìËcìÚgÅY›Ÿ0iûyèo´Èٰڔ̞Å.8­l]1iûyèïiË")£DÃÏ¥6”J±E”ÕÖïÞß²/qsG<á¬ù sÄ»÷wÆÏ0G(íòˆ9âÝû{±R©yã<ÃñàP*©œ1G¼{j¿ªìM÷Ä3ÌÊšŸ0G¼{jºB1’7âæ¥]1G¼{wEËQ V¨SEmGe1.ºxMªB¾ÒÒq4SȾ!È(C˜Ñw–ÂŒ®‘ÿÚ±†À!r‘ïôƒ÷‰j|R,w1 Pø)ë)ЬJ\…¬“¡U,=s€ü•ñr¥ÊYN…2?"¶’ð¾<ÉôXÔîqµ˜Îà¶°·ävyLU”À†Ô¨ŠˆŠª}ÇU—(I§q-%°útŠÇTY’.ŠZÝeIBEâ,I0IRW*Kñ²Ä0'KÆû¨jj_ã””*3¶Ia½âD¼…†¼„YÖ(ÛI$P@ǶÈÿ(¥¹†bI\]O® 7Ôýø™obk’Â]k 0¶½³åÍÞDû쑨­oVùçqÃÏg_G+Ó<&ñ|Ðf÷µc%Ì{€ë%bæé‹ zÈL±øPýƒõ£"ÙÖÍì)ÃD[XÝ :Æ”îk,¾ó yBö#²us[ײ-Ñp›èÔßn_“uàxÄ&+Øç©Ç§e)V*ËæFDÔþ¸ê>¢‚nOQ/;Ôx‚ö¦H#o@¿‚Ò82à†¥¶d8þæW”ñ YÆÆøsY!IQ@b|]§1¾ŒñÄxZ“J¥hã¥ñ-L4¾áwå¥ñ5MÕvRP-\>˜%Õ´…·v\Ö½Â7µ`ªLå>Åœv7›RUû´mÌ'5ÀèE7™ƒ:'<‰”&Q/»”†ŠÿÝ’Ò0â SR)Mvžº éÚØ%¼„tm¼ô%¤ñBÚ0'¤Æ›ŒÎk]\ 1ižUjçã',/ºO‹,dUžRdJHtœ:1ÊM³†Øå«69ÊüøàªQ¬“T޲U8ÀXõΊ7 í¶WùŒ)Ö§j¬ó„¼ÊwïígÌGËt„pX²f"4 F¾/ŠR%˜Šl¿£<ú»‡^ó•aU¦°¶®„ââ#+—þ‡·_ÇäcÀ]¤ÂS¥F”•ø¸ìÇEÒ"Œ=ïBsçW>5äù‘Èÿ­@×’˜=gµ‡"ÿªX}*£P¾ \”E—nõöøZˆøK¶¾8N?\TÅÔ*¯<Æxƒý9:—tEI¹ìevDdN|Éù1™ëúÿ¡Û_Hè RÆúŽ÷æo·Ê5‹É=íó{tèîOДä+%^$ÅCãÕyÿ€¤ÃþÿFÒr&é–È€›0Ó»J?öÁR½?á­ˆPÔ|Å#F÷<)¹Ê 1 ®4 ²(cÒÿðˆÝ&ýûç§/¨”l‡B@ÿÃSVk*"²˜JwºZ‰«›USdઇßýLMÅ_´ÐyÚ‡¢Šœ>Ø]õ¾å‚q‘Ù8~>iá6è#gáý‹Š%"¤š+ò®"w$µ‘¶I5éœ$æ‹×•†Èìy¿qUîÎØm7Ø?#U!Jä?…‡7Öq¶j‰(Ä0JÒ¬*ól+É ™^êÍÛC~”¬ð£qÿöóã"]ýãQÕC$ÉPRªgˆ;F¢1’~í·ùáÀ-kc=†øç¤)$‰ø”.@·*>ˆêÊ+M.@’Æ”¦Ê¼\d¤{“æÿÃ4…û·Ÿ·`åà¤Ú…Ðþii Ï ×sѳØ$‹8 $JI^óuññ÷B)¸Ê!VGКžúä«BìRú" ŽžûÚ°dk¹Ž ·þ<ô(µÌ¾ù4uÒ^ª,JÁÞ-+suzµùç©ÏÝ&€³éòFªn˜¸¸ÎF3=y¬ùFÈGŸ²¾ÕÃ"äÂÍV¯GpòÞãc GH=ͬÓ#è ùèóNÈ:OSè$ž#ô”Hxa‘KGp'ä½O3]óOøk!æifA#ä£G%ä‘`OH7ši§Gp#ä½Ï •BP>ÓÒÀfqðËíGÐòÙ§2V§ñ„\Ø¢™ëà.BÞ{ÔlV‹ t4[AGÈgŸ¯ù{ç͇ ET³#pIº ¤¢Á@®Ž·É`ý¡ˆÒÆD**g±s0Š›"¡2’ðR¥!Ô.Š PÁ—a©ÒÈ-sPÓpê;’‘æ•‚bnàTlFñbm ݸø#™”ùC˜7$r%ª½Š”“†[JÀ'ñd¾¨éâÍ+üM¹ ‰b¿ˆ ¡„ iÆ iøº´vêo\i”gÐ"ß·v,³'+æ\¼Užk¡?é-3üɳ+"›aŒ7PHqÅtm³ÔÙYg.°Ï¡°[ÄM՘̖ãZõ÷ƒ:£àÚyØ«žŒ­xÇ`G>û{=7Pè±.ã!:ø W3ؘÍ@?(*_@—<ƒ[óôüÛoÅìž|©w°B}_û3‘>rqû3WÀe–ýþt)“°öÇjûãÛŸ=î'àü>p{Iȑœ_7p Ïù |X'ÐQ)Öw4þ=z¬ä;7$;IªY²©¼+ˆE©™ÍJ8_ÈQeÈw.L¥t |m`áÔ9ž(°ô èvdœv ÄÆ’1@ Z–Œ™HÐÞLÆLx^2f@Äf'b&€2t»ˆò0’ÉÜýJeŒGLÆèeŒyÓ«¢gŒ‘9zãʮɱYš*T”™"ȼ˜•îrÆ;îš6NjrÝ7Ž]Ýg!ù¶n²ÊikA1.~p©—2kóû*Ðo ÿ¡Ž 6ÿ<õy5 ‰9,gsjaÎaÌæHèxùè'&Ò‚úEç¡“wý¬©´³®RÙ'µa”³zjCŽP‘ïÇÈuk¤"¯ÃzT>5´íÓ ª¨eŸ†-X¿ è‡ñ Êhqðô^}Ü@R”Ôœú$Á)ãõG€`¦?&-½bŠ!FUzþ˜"¼éa×è¾04Ïœo@·#ñ´õ³“혶HB>V.Ìëe;ÀžŠÓ•XÊN2ÏÑ]‡‰öD%§rZ¢}CT´/Љö äýž=õ½Xb"\>ÏsNÔ _ã/¬±8ÍdØeýw&kmmW R\ƒk;ðä×ðÝÎÜg1DX“56³9Ä8øÁ¢N´¯­7ÒAîK^vU¼÷÷úSnåtè‹¿Í.&²\á/~~àubvœ=g¿…™<™Ê²sxµŽpúHÍ9 FÇ;’Û/þ¥¾eÌÛ–+êîå_ïòL©qötž*rË•wߨ0`_OãFš©Ê%†"0bzóëXV¸2l¥…øåø¯ô/3±Û_GìÉm|õÄ~‚rÍEJ‘£¡ãv¥ÿ‚Ü>ûû'¹˜ÿ${S IÝ0¥E†ÔJÚ?{Øqb¯zý¦ÃÂ~ùìüä'{ü8Aﮑ;D²% xÚxïsþÅžædÿoÿà$gæÄ軳yý¢OE£°†ji žýBÜ©Tñà"âaÈ=þRû|ý½Î0—ÌÉÏMª’Êêßòë¿õ0:çA¿k:åwkˆEÆ…à'ÝÎÏQÿö'G ‹\¿Ü­”ð‚~2v6÷¤‚ž,`Ž˜² z§€¦wJi—×¢à_½Ê{ì>Ì;ðŸì~Æå"¡@/‰Å(å§â’¸²ÃÇTƒOQðÿóè\¯.—*öÆŸô??þÛÏ 7uÂ[yrHEY´8Gox¸À3Æ$É9(ŸØm÷ ƒ-Fž}èí8È_à†AÜÁq<=º‰ÞÂÅ»x’=Ïé²úB¨gpGzý'|É(LÌɹv¼ÀšsCÿÉqÿöóã’5—Œ(&œñÿ7ôÿ6» ÿ÷¿ýÏÿŽf÷ÿûû·ûþËþ¯èˆþœÛÿñ_þó¿ýOþ¯ÿþ_ÿÛÿgÀèתÛ\¯4øÑf-Î /n¤øä…=Ï_z|áþp†‡ßþßÿ“õTöx)_‚¢ÌDq•Ã몗&ÂÔðÆÍ…ì<îJü¿ÿÇÿàцƒ:þvƒè·ATøFÚ^y~Œ"¡Ÿ¡Ñµ;Üðžsþ]ÌBñ[|”x‘Åd^L¯ß®Šë+´s”’¦²­ ¡.¨_É&gÏÑF@IžšL™¹»Dî• Q´-A”+m3Lž<2^c‘¤;ÈËßsþÝl\#%Ì1ª¸®[Ô%­:ȃCÕa‚¨è6ý$è†ü;7¥¹ J济j¤™ÛÒ[öô«@+¦î”ó|Æ£‡Ô¶ð"’~2Ü„$€– Ø‚'4B\€“8Óšsæô ˜)Ž{BIÜd°R*WÈëw¦w7åy¨á(&€+h¦Õd6I Ç'”êi¢*Ð K7~«ƒ¦‘¥p-A34_¶œ£¼Z‚· öoÔ@B-5uÎpJ¯Mb'f\t…(‡KôÆ/¸Ð¢Dœ [Es–K¬Û´;%1”mÊ›ÝCdúúM·wvªÞ‘|€°¸Ò›3Ä=ßVÙpãŠÂ/æò”¡d⇕ÎZ,·cm€"ÿ‰(Š™lÙ™T YQñ*µ•ñªšÀ$}ýbnñ^)•È\¹&r "&™¯ª;[ÏÁ´±ÈWÁ=2l¹H½š(½ ¨_Q  ëœÏKdnâS wtòA §ª[YFôçÄÆt(0X²;z…‰ 0"ÿ”Mr&Ù]:0hŒ9yù¨1Fåw'T9hC>¡(ókL@ú`Xá)êXËEÙ.èdBæ&ß3é D÷ÄìX›!   ¥ÌT^ÔœE$";VMH¯™…=dÇS³¯b‡NÊùCEI«*²à÷!á~w ü5 ÿèl_"M.Ö¦êK6^ü!Ë—^ù´-l—»i…£ÄÍâ–%?os™X ‰n@ëû*]tªùÄ,H:½}ê&v/þЕŒWÒÃ¥m›¥-…M¹¦Û Æ‚TC”¤zðâ²*™.£ŠD‘B˜¡#Ò…Yï¯$ôø²ZdÊeŽ)ç/‹.ÏB² ¡È\/méšD?DÖ/íVnÊô¬WÕo|r—ÌWiY ss"ˆú E¦Ëa#É¢–foã*2¾‰T½Ñ›.ò…ëw5å#"¥má~ÈÌT9Ý— SݨàÿÖÒ–ê0ªm3k×h{eYíÎÄz)š'dÂx—„ ñ«œrVN:ç¢>r[˜õ0´~è¥ËQÆùg˜ùhzT‘t)!·µ”Úõ£bý¼r>˵™!]åb{Îaôôñ]¢(ùÊêç /@¿ï’xÞNCàa)ì‰Qå@U%"+›´¥ã¾» ´…R•¼ ý ]5ß§S5Ô¥p•w³ô”¾|ÔÍ!¨×%¢É^ÀÊZ µ2DÞsåsÊOö­lõSöå³R_ˆQE\W~óùJ Eo˜~yéØQdxÝ´r}Íè¿‚‰Â<Ã{Dkð¥2ç¬Hà«D… E‹@€@c»Ê.~”XÄæ¶W—ï(\_¤©Lí.ž‚<ÔËŸÄÍo(ƒÐ¥Âßå$\ŸV¸(„š[’‹ ÷*Zžˆu<˜˜DžVÓ­P„²ˆlç ºôN@¥FhÆWÖóì#W:yÊÅÖ þàÕ+“\U%‡Vae#H¤•|Yó’Eq&A¬l4Rþ哤"4()Ó¤0‰f‘¸¤»/A“ŽÕn–ÈW,Ë¥ìŠ*¼*[’ÔÞ òLÖJa4,\‰.ø[Uà‹Âv%5@;ÉæLé”JPíãí¬¸i8Mg<'¬bm|rß“;l̃73TõWºápYŠwÉJÎxÆÍlx³©¹i[Js&”ßmR(f±ãPDÊÇ®Ùv~¨–Û±ŸñŸ_[$Žç¦1 –§Êá-zUç2 Ü[+ ñ”¯°F ºÞºöMuÂæ)1âtGZ ÞÌK”o(‡Î,J… ¸åµßê¡/@]ÖO#™.Yè³*Âi•/Yƒ«‰ñÉ!BŠ jBöˬgü .Ùº.ùÎn ¡âV…X³7æh:½éR8®ÑL£’õMë%ã ô¹Ðm!‘­Q(¤Gñ —”Éà–|–˜}ïF2%ñwY¢ŒÊÆL¨y|ƒ\û¹h§Z_C¹tñ½mv'"#q€¬ÛîÄ'“Û/TFÉ¥RN3ÜâÂ\›©õï1бY„kæH77ê>a2N³ºÊjhç¸g‚è–A¹´·f¯Îu„R˜"ÌGQe0O_R@…Z™´ñ^x4á’e~UM·d˜ä™ähŒv¥àj™ÄY-5-Z<7ÜFõsŒMç§6ºÁ6:(Y,ƒz¿­ÌFºµ9ÊB Źͩ¨â‘¹À—?®ð‘ª‰hÐ-ˆùŒBØ&BWæŠ^ÚvZ%ŒÒ´¶!lQȸ‚#×”L“ eÈ`!2üŠI>VÇ7û ½¡| µ4Â)¬f3(ZRV†ˆªü3k“ØU¬H ÔA³^è>C2¤W™]àÃo°l–©­QÙÄ!ð-ïCpBÄeÕ\‡í£IÚ¡n’\š§˜9éW04wúU•26_b©$1'ÊŸêô˜@VˈØYÁ•¥Jß+jгj|¬wÂÏ&j³VZkàõ’VÀmÙ™`Ê0 ]1ç4ÊìÀ2X®æÉ[úÔ*USjʉ+&Æd&IœßYÿ†¥U×Zƒô&¾ÒƉû¬öp8ÐCÚ®÷S¦.æªLþÅ(äã‰û$_«øc]dN¬M^±p½’'Svaù#®ñCJ³©^&’¡©¯Èˆb8„@׫Y7:D5s CVÄ¢T&!Ä"ôlu1Aù]–/þᦫJfIo| lM)hAšÒ½3ß³3ËÓÇKg…ó B:ä°|&â¬èzM„Á‘­AoÞÝ‚ŠAz³E|9+Ý]½áYù3áo‡P ÷Õfsi7µ gå=<¬Ã,Ô ¸„&Ý)hI,M-™ý|B©>¶q'ÝÍ"“u¨K. V ÕÓØô{1ìFfSál´õÊu´ò·HîëœdµSÛÄþWr}tÈT¸›\З`WQÛ¤o™Ô•>8ü ªauKwXÔÄe›ù³²ªî•«­€OJ¾Àò¤*/” J2"Å»I« GsV{:.‚æJ,¿>õß-O‚ñŠ<²'!Ùd½f³Ï*ð¡üÁ—êÈj¹fû)޲zoÅeÔÈHŒ„åKnṂÚ"˜•AÎ;»‚ºùCk‹ãÙ´gáÛÌÇF0ãSã#” 1ƒx5cè+³càÒÞ<ŽË‚0B(ÒÌ¥­ªË$¤i"r\›dXîÌîÒR-»]ƒ7ÙxÊN‰# £Î×,ÑŸï”EÈRKѾX½$žC¯'"|²¨á(ØóƒΠ\£vv9KSªæEGŸØ §´ÏôÃyºÐ•Ë_ð"Ç¢©¸ r“w§ÜèùÚFù¤èýïU ·KÓkl7rbï ùÖ:Ýä¦gdsò=Ï8üØ›TjÕÀ—*þ ø:­ŸSÒSZ&f‡Bµ˜?=pà'ÑÔ®¤žê®ñELÎ è)n¼‹ä޶â¨@€¬2'5:“."QE"16¥eýðZŸÂãX÷âHÌKU9ò+J[‘ôø!Xà—ì§FfõDn›’Õ„Ma¯yæxÞ&RÖ°ÐßT<ߪ»'·«¬ny"œˆ0¹‡ï¤ÊìÓ‚>$¼xp´lÌáå`„’wTÃàØPhÑü»d>³!–h‹”ª5¥P1B¹Àz»ºüP¼ð#;ÖÆAU÷8Xõ1ue(C¬ãk𪟌\r'}pY‘ ‹½n¡ƒC;í¨gy;XrWNŽE«·ll^ÂR®kÑV„vû`»Íf¬O§tÌd~1«Rtõ¼ÑØ]rhI~8²„‚eqšÁo™ùJK2¥ò h“ 4ì·ÆÛõÞTy "3ÚPœKÑëúUsQ‰;˜{ˆÚ|ºPMDµKÄœyBŠ„*)3WÔ\U­á/*òuô¦ŠM)¢º&9bx ÐQÔÅD1Ü#Žxó«F[DýäI¯éi›²œêÚÖ|ØvªWÑ ÅmOÇúP÷*…xè!yéœã%v§¨žsªŽòÔ%DÉ€éY",E»ûkñPzY7ÅsjPûAãÃëwµÈ‘Mñ¾lß4w7*’&´ÝTNT7V¿EnQUÏ؃¢Î5wîvó[´å¤("B×dOú<"7mËoA¦n«®J*2À¤Rüì¦|w+ä/¦J¹$FC༻»³ endstream endobj 146 0 obj <>stream $’[¢Æqu5ðAÇaO~WãðZ®×ËqþŠ‚¤ÄåÃ’Ì»aâósÙWˆ"ª¸².±ÍÚ²×"¢ *Ö¶ÉgÏUxàá¹T1“€úÙµÚ2š¼Mš´Ðl"jPJy™Ù,rað^¹°î¢%2V„RKs.G$3rµßÁ'ÔnïXwo¡°>ò†‰òmsª‚‘’s¤ÙS\©úEu¡Î²Þ-‰´©\¬À†]+õRùÜ;±ÈqlºjÐÒVC7ûèke³-—‘:üª=,´¦±ƒŠºK¦¦Gi[-Hc}Cƒ½%üCöM â¶èÊ¥øOh¨zX$·¼\¥ Äj<¥”Þ‘²§¼’b'¡J I‚µéE ^tØ-Ì~)‰OþûųE°t5Î?†ýÝb›$Í {Z›†6I¬~­QœAE»êKëíl5›„š=º*èÅ}ê⥽»¦£~PôQÈ|4PnˆïÒêÎHÞ¾[9ô—Ó¬˜|œ¯qsíßè¡]FXÉÊPÐ׃ÚP]ˆ¬µ¢vÐ¥bÏ)2ŸT~„5“ÜL7[¸<™ƒ™ rWûëW_9íb©º÷¯•¨êù¥HBDµ°ÇÄ&Ö³›Ø±ôºàý˜‰ R²ŽÎ÷ðÌߺÜÃtyû¸ËÇjŰ4¤—u]Íû8óΦQ>Í ãì-^Že qîøF¢,¼bdR÷Èn™Êf3çâ5—Ø#y+î1Ȧœ[ËJl²´´L}•<ÊÈïàNÈ´Êue…m¦fEö–£¢PW3FæÛQÓŒ&óïÕÊñ[jO`óA5óVÈn¤~ŠDL HʬÅ4Êçß©Y ŠßºªÇË̵º˜ê á ø›hQTóÒôÐÈ×szG†rðªÜt.v’Ljf6S çÝŽ>ŒQe;2¸Ù,иRÈÃ¥¤ËÝ ÍYƒu°ú žŽBÙ2³Ù º¡É— ÖfThâ0 j@YãÊ£2.½-L(—#jãÞÔ)Çèßì¾Ñ"Š~|ѬóUƒÍ&]ÅöøûÎeÙ^‚„d‰JZ[+^ôïj¶áÅ&Õk.Í#M`·w¸Ô“CQ?µšB4t…TئV¿7 ¨pö_EŒ—¶LœbZ“^¢.M¡–ìwôì¾›Ùö2ßQçzÓ8ƒGò>öH€KR_0NUáQ¬2 t¦¬"V©´ú;нá8úÝ1©P uƳ•yé˜Bó¤i>óA’Òy±‘„v†"¨m¾ÃG=P)¾¸¢;ÄXÐÔºìŸ2_ÑI%þeŸXÕÈ=Lƒ†`B•4@r#ÀŒ£,¶°ƒ¾JÀ¡kô,È`$ˆ3¯«„ 0³ Ø”Åq¡hÒTX[B0ˆP]hœùõ»VmèIѰ%3±iP1]Ís¢[læpH|$°Ò—}œk2wì òÍe1+ЗR€HÆG-Jº®©µº³ßÑ´ó½™Ù ö÷ä&’,sqúÆwV#p.vcÔÕïJyqè±»KA“¨IÈnYt"u~s6ƒŠÀˆúN.f"STs–„»_æhðªãÅJ;+4¥‰!WJDu ú¸ŸšWö¤vE£Ù²æÜÕ"‘ÄæUÂFÀ“(–åÆù®¤Y¾(ÑÇ©ÇѾy?ýÌ«¥¯^ꛂÁóq£Ý\l’!Jsز ¥Xô§ß±œÊÅlÉy]Ë!Kôç´B²²Ž!9È tKæAmxµÛt*ÃÈ?ÄÔiżÔõ’o-ª‹Zíuò|-«À*ß%óºJܶ?¼Ûš«”1;sŠ¢E’c׃¸[.‰¦w®Z’bQ‘™øÀd+aÍê]\u'2ôð úµU5°‰•bE#‰$ÈÉ:k[Ó/U£.®A%ŒÅ…Y"{*$§^ÍììÈÅ5pŠùE¸ª¢b¢Zc£é@zNÇÂÖI½>d½ñ'výÓ°´'jîn*›ò¡pª¸Ýv-WÔ 9öÛŠ;¼Ø©Ãå,(^ ñQ%^ÀÙØ/ ‰ïtÙY ª_·§‹sx?ü¥…˜»iŒÛÖ..¸L]©—Œ«ûMÓ¸ìˆwW§Â]Ý>W½'‰ªI;(º{çz’Y¢Å.ˆøQ-š Jº½r˜œ5Mn,P"K‰÷ãý~Jï¥Õ’uVˆeC¾#In‘g¨W¬svJ*Ñw1š.Â{Þ8¦Dô6ÃqÊŠºÝ¨!TÈKô$‘ÍUïÿP¦¸¤ŠE…%Ž}ÿ›é0©‡§jö4 )r Q8iå„Vͺ¯ÜŒx²K~ÆÅ‰ý˜õZ¡?Aµ ͹oÚNŒ¼+vgé%\ECu\¹W5@ªš_*œÙ° ¦ƒÈ…‹+)Ë2•Ò¾øñïÕTöEOý´´®Š);|`gª*ÈŸ") ÚÆôØô«;š5­°ñ º4Á{‘7k]›*^&¨Q\GÀ/•"¦d©dd”}OÕ\ƒ™kC¸ŒD@.#Q¬ðtÝ|é*ÇbÓ®ÙPêJœa›Ê埗V¶JJ³ šš´”ËFÕÀQ@ÌÑ+vz´³Ÿræ²ê> õÿ‘òǽB²,!e„¹.ÍùxÏ9û8•Mä«iJûÖ¥BV ´å&¸(¤)¹Vkµ` äÔI¸DÔ4µ·Á¨(¥É¥ëQ¬ÄàäB\Ó»Ô LM¡c›|×Þk­}Öyg3ïûîóžõ<±&3‹ó±ÎÞû·{¯½>òOë_v=€–qk†=Òw/œõgËþ½óܸ}oümÓÃ.‚S#|MlCžÏæ}·òÔ¬œ;®õ4ïû˜v· ËÔÇ4]pOÓ£™v\cê-_œÛþŸãå8¶³4aœ‚{Ò;ÍgñŠ£2±L éªr»ÌvEéêkuL•7ÿíÍÆ87 ÅAÛ;q>÷.Å 6ûþSkmB;ñéÞº“;h¤á(«ã¢Ÿt#‡ÁÕ©=/]¼õ3Íâ¼OñìÏ«*OãCüt’ÊW–“UNrÚÉþڒ¾ôr•ƺ!<íVOƒüº‹QìÚ›æÇ)®ƒ»~²‹| ‡÷´]l—k_ÚŽOÝÉMÝÅRÚ³¹k’ÝŠÝ>ÂÌÊ¡’íÇ宋íáÓÿ²Ø;`¼ºŸä¦óÕù~ÕìÐõãM»'uØï7ù’9 §\N¬ÝÅôC¬Ú8j›Ó£Õòs#³›×>ž×§©kvšUdm DzÏó}§³¶ûÂx×§íúÚS‰ûæôv¡¡¶U¡Ÿ¨;Ñ/¦¹[Ã,h^Ls“gŸ¿Ú•aú¦øYž¸e1ÍÜgñZ¶+ï¤q-©çdûÞ¾—ÜNœ‰¬{a>º“©ºª¤.!i†ª¶ÎíˆËt¯™ž‘·‹µíänñŠ£›òw[áÓ3¦v9Ì~гÜQ¨[u'wœ-‹6ÚÊû†PÐulÊ÷+ñ²¾]vgœz¤Ryžá¢×Éb§¸9ë[ªÛo×4“nØB¬\“&È›ÄÁ/‹ÔÝ0Ýœ-ãóñÅ#ÎRšÛ‚›xÏ–'%šäemËÎÎz+ò²˜·f’;!´UÉýæÒóevÙ÷þEËYk3ŠO»‘ZÌ»…E»¢ô¬}uËÞÄ[¼´wºuOcõâTs“<ñÂ|™ûÚ÷w¢‹QÑSc’[tÚ•Þck{Ú±~q Aß(°Œ¹5PM¿+ùkcðŒr·ú~;-Fñ‘rþÖîa1Ê£&¹r»«sP¤1G‹ô0.?ˆ£ÔÛ5,â˜ÔCr‘ž—o–ñB~xo3ÛÚMswÐeªÜ"?IÙa1Ž]Kóñ¿“*;üóŒJÝa¸LƒÄâ@´Ej¦IïL×o«¯HÝãWijÓ*rÆq1ºüSé÷7ñ*¹™µÈùgÕi¶-Ú™­ZqbçˆE?®|œ'Pj'Ž;û.Âí[ÎW¹vâIf}Åú5i«¤™ú.‹I1¶dÛÙ»ÒtL´MUýoË=ŽS¦v©¶ñªåiÜ×9 èÇÄ\<äÞ¯‹Iœ‡*µPÌfË´©Æ¹Ùx<ÍÑÓ?4HÒãÀÔ¢ûntˤÖõ<ž4õ“éÚ–Ó¥Uz”Þ:ꛣº.mQ+9‹¿¿knŽ ­î€ÚÂ4ûÏ<ͼÒãFót"ïŠRÍ&6P§öët'²ŒOÚ’Ôl¼H]`Û¢yìJÛ.É×/îÕž5fi÷ta×F>Ë ¹k/~mÎÑéצŽN‹i€ð§)å§¶ð´‰iln«_t­4méd°ÓбöÖE[øbOœùñ ¸Hm±hœ. ºgñã›|ñ0Y= IÏØ»Òôü&] ·EíõkW”bqºö&u[Lã•_÷Sc“çb{ýõ‹i?ò§+mFéKºyŒâÇ-æ»Þûß;<®U0> \¤é&Þø÷öÛ%u¿éŸé-úÉÿFy”@[ÔÏÏ;ÊÚK­8X©o|n¯úÚ'CEu»ËÒ$ñ!^úe£ô4m/ÿy@}ÛÌØ5 û66\çßÚ%òøTo™ŽÎî2¨hT_LâEUß’Ÿ_Ø·¾§föR3ŸÒÌâR3>ÖÊŸ8Ÿ§C*޶笸î\ÿ¼ª=ßÍVÏ!çó“ü !öœï>kkz Ó†Sÿ Í¿Ò~ZÓ=ç Q7Ï'Ô®SwÚvÖósuqÞå6ôOðâdXíÉ.?«K·íǵ7ç}øŒÒ{ûhOÃNÛ$ÕÞ=Ui¯df«ýšZ­â޹rÎîàtߣ81ÅzÐv é×6©quØò[WW2Ý™'_u¹¿8Q´oÏÖž%.ã…t»ô¤³é.ªº/gØ&>Ž-.âм…c'íö…íƒø”¯Ic“å®3Û(NØtu:ˆç9íÄÉTÛ¡éŠ5u+V>™ÃKº3[s“Fž-¦«î “Ø—oí†gœ›ã»%!šØßLGùB>Mɹ=­Á•Þ;MG“›5Æy:ŽE“;ýóíH:ÅåÔ'AiKû,é×öרã<ÇD.ÊW2«Ò8ºm­h’.<‹¢Ñ¬ßTg~ái>îôß»ªà´,ú?Ò ãXév»Äñr“üˆo1ÏÓÐõS”/æñ Ÿ?¥/éÛlú)eÛ»ÈØy§»•èvåb§ïÍ¿ˆ´÷}yÂÔ1³»LSǾ|ó•n·ç©z}§“Pg))‹ò)uý½iœõ¢olm3GéPKýŽOi"È-ïûÇéVì¢×LVÓ¤Å+ê\:J{+vÖhƫۉî!G[NVqˆX—¯›qnÂçõMºè¯š¦ëîXó{cM›q ‹º×rG µc¡ïœæY¤\EQŽáÓ]§9üO$§¦ø¨ªåYªÆyò¦fœ§jϧŽnËåh˜ô›i™‡ˆ¥çôí&]2CÑ¬ß ýsìq¾\kKó]|êlÔ½w'mâõýziZ7¢Ýíís´~xò(NæÚ.HÓnÏÔí6u}hš|Ò^CÒ S[I?Þ±YÄn×)F±¿iÓΔF§ÞôsOâŽïŠV™&¹Mª}a¾EŸÅ.M»`^‘î›E1þ­ðѾ7ß?Ï☧¦YÝÉæõ âÜOý w†n–yTh{ߨž›e~¢ÐŸÇ›&^¯ä]™¶8Oçâ4ÛA[“Qê7–—Th⤰é½i*Úf±º‡Ì_2OK,®ZFšyì>žê¼ŒîÛæY;ÒÀðf^lù´{±-!í¢Ø± é'ÁHÒº¢4³Lß±£]+"uéšÌâE@»Þsü¹}/¹fgu·˜®•ši<¥Ÿ›¦èkúÙ\óÍq3Íôó›4“xOœÓÇt‘çyÞCéÖµé§+=ÝAÿÑqš:}°¥qúÍ$÷Šç¶–ö{ã\#}KEÓ^‹~ï¦ÁœÍ$6þÇþÝ%I3Í—}†oÒ]J~o|„Üìä^å£<ª¦éû6ö}ÞÚÞ^’¦Ë™4Â¥="û&ÂIw4/Gyòñ¾÷G“îvsðÆñFÍru¤^ªÍ²›aÛ¢¾Åa»Ä§÷Îó14M/œŒòÂ+ë'œ|bJý…ºÆ…ÚÓ¼p¸ð]wšÅê:k´W2é×`õ‡×<¶ ç='nf«Åù´°³j¸Jíû–žõ=¬qävùD¼‰C Ò¡œ;­4±GCìR1Oy”ç/ï–q‰ïí/kvúá3Mš=~'BjKâ•X?L¥=ò“¾§kšJµÝ‘ã´(@žÕ¨É“Y¯¦7q€gŠ <:>ìŒƒÅÆùp$â‚-óåj.Ÿtk¾‰ë‰ gˆþ¡ô8Î#kæ®4¨§y¬YÛÖ”/ÚÓ}ÕÚྃlûÌ$ÞÓ¾ q’ÏfÓ<ömíÉJšÌ76zNÒjw;ùÉB?µP>û¤éÿòUÝ4Vy’ïݦé9âb’[Ÿúã{×[ÓÌmíÃ¥Yš5 üÎTãiŸØN>²“¾v5!Ä4ÏÕÚ¶ÀÆ'nÓ|ÓÜ=öH3¬ª\¾wšzLVs—¤ùVcƒî4N³\Í65Šg¶…/Í>˜&–\Lòù¾Ÿá hÈîjÑäÆèÔM!7:MOYäo‘æùÊ7q± IwÉ‘.D›ü°$ 8îo•sÃ~zkZú {TÆ“­®iÒáÐ?ÏN7q¹GÃ$öÎë~~ÄÞ¶=Ç+ÃÕŽ)Ÿ+Nó¼…‹qî¼0Í‹o„H2®6Ô¸;æãa’›·c¿þÜÞ-ƒ=ZK)kQwr£ïbœGÏòâZ]<¤ehb×6”–«éVӔ΋qÄ5ëvpü¬8)@¿ÂAû°´èß8ÎŒç©ï,®wX”äŽ0koLÓ8,Æq`k÷q‰Àöu±r¿¢EÑÚûm.ò“ëQªî¼ÿ´Ü!lõ­«·¶K%LÒ™d’WZ„cÑO`×÷]Û«ó<OÄ„°žtV·+ù¶!=æÏÜco¾Å$_”îÄñZé…³µ!ÛmÑdg5ó[êÙ4ͳäMó@ó¶ãPUØOͲ؉K€äSWzXÝ÷’›ô§Ð<ÙFßÁ¦}Ê9Y OI#!»Ç¡ËÔB˜xX–MüåÒöl»“ÎýBriõÓî”™¦ìÙµ­âF,×ÃýGy(B»èlûD*v„j[ÓÌ«ÂŲ;ë¬,rŸ‚œú—ñÁãÕé©Sʲ›S¯+‰ûd·R×y =loíûi3¤F€®h”¾²ë69Y.ò„¨¹¨{뢿;)_'½Î Þ»ŠÚéüÞUi·2}÷q©¾]Û®dÙ%©ÂãØ©jõº&Âë>l™zEÄ Ê\”Þ›ŸÚ/œÏ»>­iFËÝ_ÛNoßš^ØvvžæúÅÎ-£xöû¯}v™šÖÒ ¡‹elpëFéÄ•$VÏ(Ê¢ö&*½5Žó¨ëQêÙ>+¥gìóØš&*ÍÏ'Ç}Ëb2NÙsKg7–º{Ö; ä¢ôkSf[½°‰Ó˜Å¢Ük%NmRw­´‘gÓezowÍÒm÷¸ªð$N^VìŸ\”Þš&Ï)_·,éfJŸ?îߺjríJ»¢xº.+’×7NE9â’Õ yÒ§ÕÇ­µi9È«Òöbq?¹9¹+‰‹ä¢üµ±CßÚ ãóó®hŸŸ§µr;t÷˜yÛÒönª+ŠSì6iú‰xR˜æÖ³¢#P:ñ´³6‹#k%}ô%yöÍSÏX?³êíÜíöx­Ü¤ÁŽ×­—¦^]Ñ,níqIÝäI›ÔA<Hq¾³®¢©ç@±’›»¢ØÔ¤+¿ôÞԘФu}º¾X±­{z›î&ñ¾9•\œO&ë/ËOƹ?å(ϨÑV­_6t”ÏÍ86ZÅò9|wRïšT2Š÷r¹ñ=NãbÛ•&þ¬Q1Ì=usYö÷×]GŒY⟧Ô}Îè&vÁç!ÉEi#å]¼pžÏr³|ü¥í»H³üôûfšÒF×ý®Ø¯mQÕUQw£uõÚ1±H ­<Ý…ÏzQÛ¤séi²ŸÙÝ·½Ÿm´=¶ç‰¾:·÷ý+Òx¶h”žÖ¦q Ý^í?-9†Ò’åëÒPY´š®vU:Š žR:­·irkÅ87uEãâIy.íŸhEÓñî¢r*‘ü‹GÝpžõš¤É ÖŠNý!‹ÔŸïè)¥qV;¿;€šÜ8¿XEy³¦¾MÅ Ó0ˆõ¢þ˜*Íòsð4cw3?¥hTÌFÛ_–y*–fwÑd~ê;»©4„kÚ;±Ãt¾.ˆyæó]EieÌ⚢xLX¾0´Ì—Eë%éòi½p'õðMC‘òÅXW´Ìg†|Õ«ÒÌv½0_•φ¦©§u¾TŒ?óØirÿëÔ”´L39ûñÕÕi,ͽ%ùaïª(Ï’’Jr~¹tí­9²Žî.í7ݪhž£rg¾žýº²ØY¬égiçö œL»ßŸY7>¢ßÉY7¶Ð¤™RWI<>^ÏõÅV_{Ùdœ¿5N¤´V”.1v•6©óvz>”¯Xº¢Ý«K›®ÆÓñx× SŸ¯òãÒj.J[>u¬Î×^10úk›UQù¢ôµóy³ëeiHFù­i¢ˆ®h¶Ší”ÎÓÍî8öˆû1¯p²ë,i?gvšà)Ÿ’Ò°óÕ±6›§ÉDgãUjJ³ÓÎâü‹e‘Ô'ýð—e^`’/Lº£y2Û]Ôžîò{ûÒ&ÞâOòCé¶(6e¶£Dò r5´|Ò÷ñ*^˜Ç^-WƒR_µŽIÞMmm⣔¶(É|4ϳö/—ÅVÉïÝéO$ót«ÜMW¼:í**Çìô¥Ó&7%Æ)§Ú¢Eš¾)ìY=Ë ®^Øÿ¸þãÒÚV]Qžš«Ü¨©Á*Ío²ª`lû\»çLß›VJYþÛ_L׊Þ(™”ÏÊwå«Ô.3î{áíJa³Ù¬(íÝIN³4}Õ®ƒùêþ!{zפ&¦Ü=`Þß@ÆîW“8j4]D¤™­¦qò¬îêcÑo…®!5–ÎrÛJ~]ê:‰Ù6ÍGýDiK7í M‹É‘]E1?­õ}{ÖJã ìIîÛžïó”#i i.Z®µÎsÓº´kEmUv½wÔÏ –;‹Œòã«N_£ØòßÚäë£ØHÙGj3ZíË¢¨ý9ë!Ý&¸eÚÊéxnFù–¡ø‚WïîÜê¢Î[ˆÉ©·“ÓÞBäÓ²{÷î!¶éb”²À$ÏYÚ mG£t'±õ§qÙ„I\x4MúÁæã> ŒWW¸ù¦¥¡åóܸßÔÎ<-9—3xê±;Ϋ¬RsQ”Û碴ÓÄ•«¦ïEyTͩ㠷Z©°Ú¶ËÜËzÔôh›Øï$혮$>~îJæy´ùÎ)Ç[{(÷OÒOq¨æ‹®Yœ©¨xöPÜZ”/LKü¬-û®Ý£ya—º7¬‚z’ŸÇ¶û1OaW»¶(Íæ‹¢|¤ì:¤Ö¯;Ü»ºwÝ“{×éÎZÑ]ÅœùrçÔ‹¢õ»×f§(u÷êîÕÝë w¯®XÞðŠå4Wƒ§¿jŒ}Í\±|¯+–ÕxÐØ™v”k»3éG‚.úkü¼Tßt¾èB^ú5ã¹÷êôÞ¾´ïŸG‘æ äº¢Ü ¦½Êïíå8un[ÎÒ1¶Wpm{ÍæÚ¥÷¦[ÓµöGq ZuWaý{ûÒ<YQ´Ü‰]ÝÒwíÖÜY}ïlTn„¸Í|Zìínt@;W;ù{õÂþ6lœW¢+‹VçÕ²4 rØ)6sê­¦lIs¹ªrœú¢I+FM¿#^‚¶'ùYµ—ºìµ½œboоh±,–¥ýjt‹¾C[Z›5M‹¿*Ê¡ïÛпpgšR¿ÀvTÃ2¿·É›;y¶¯UëÉNì©P^|íĽµë‚q'‡éÚ ËòJkWÑdµãŠÒTÁyýÇK%«Ëã²0žßÚ‰ÿr‡¸&^i¶Í‹¢üÖqn¢Y½°ÿ±ýЄâª|g´ªð(_ñ-òB0«m—Z?wŠkÙUÃM;5ßN¾|Ï îä*§Pëg—ÏEé¸X ²Ï!9oò¾˜Ov—¬~l_ÚöŸiÒH…U»dšg'÷oÒ¤e©Âiõ“&õÕ=š6Aß#'­¤µÓj¹xQ_´j¥+KgyÄW:º®LiUÎÕhýÀ¿.¤µzÒúM?Çû4ŽI]¥­æŸ*_˜/ûð»OáW¯MûjçzuÍg×í.M±S¥æ³Yžu­mžç<[e®vbÒY>—Ó2ôi2®µ´yn¥\5 Íól«–±yž>¡lA›çÊ×M'£¼uwÒÌËEQß‚¶VºHóOGký»¯¯åŸ;ïÏÓñ…³òj#~Ü,G\k›õ—>Å gk­t]7ïŪe¬éç‰Í)¨|á¸ïM›ÐÖŠúŸ»V·Ë,žÀÊ­7ë3Z¹™gýÍWñÂÔeµÓfy@æÚÞý•Õö§µÚóR¬Ìò)oí šå ÎÊ£oUÔ£«¢î`ÞõÞÔn|t­´o_.KR#ô,OʺvÒkK'ýÝoU8_=^¦zwr³ÁÎ|5»ï,åè[ÒgEyjoï÷íZÃü,¯>³öÂQßÚïf׊úœ´VŸô{|•gy¸þÚSˆ|D–¯kúžÐ)öÇw.ÊÇ÷Îd½ £—ÕÇÍóRÌk_ÛÎÄ3Yîzaw¡Qþе¢þ箕î¤Ií'Å#‘&Ve2Ê»qµ™ÛÚ,»^8î»a¦½ÖÎî—ëäçó<´tÑwgÈ&o¼YŽ–e39%ög×òØ[õ£”Ò)¸|rÊügv⛼G›Éš<ðpUÚ§¼&/`Òô^Òd/÷2¯ŽïM ûµ¥ñæ±É«ZtEiuš0,¥÷¦ð._7Ïí iØóZQ“ç·^+׿M¾Piúi8›48*—¤·æI ú×õs¦wŸ¶׆HCrQ÷Þv­Óþ>=¿0-fZ~\œjíkãÜfë/ËóŒô¿a­¨ÿ±k¥q«,óª{«m·ÌÓJ­mãekW¾pÚ7Þ¤]¶Ìs†­íÛeßÕ|ÔͯçŒï¬)¡(]µ-\M¿¡Æ‹ÉLV¥í¼Hé…ÓÜL—ÚZñ!N¼ k‡ò¤÷æ'ô©²É‹Eu·M³x`ïŒrsæjÑ&/]¾p1îoDæi©ï4_“¦WOïM+µßÛ¤œ´Ê™M^9aU”çÞ?MrÝ•}Û‰fãyñCó²D³~°K7áP·RÑ´¼Cì¦NˆSb榶«ã{óˆšI:ìÚE¦kú¢µ úôÖ4¶tíu˾Aª›‡c½(ß5¬—6i©÷´dO2åþåÝJûCâå CÉZWna†~²®|“Ô–NúÛ†üÂ4«Îêæ§8gÕk¡é/ïâ…ͬlÞUÒß$­•î¤üÛ¬š9óZiስ›¤µÊä.Wwqy§¦ý]g±wóIe'YëŠâ)¿;>—ó]EÝÛüÞ¾m¨;-Ý]—™n‹f“µ¸¶¨éÛÕrrh7þh¹ëu“´ÊA>å·Gî(ŸËú{Õ!ÞU&­å‘[ÿG©¹c<Ž3iÄsH“&Ç—³JÅYàÆí¼ùÞ.>¢OÒúMš5¯{ë¤e;JÝÚÂ~ŒTד­-š¬?m¿"-/±ŒwBéG«;¹îê<Î Ãö©«-š.vß³ûùíÖ^¸ºë& Y/j´å÷ŽÖe¯I¼'j‹šQY”ê\ìòøÂI\¢§¸k‹v–å}\zï´Y+m‹ÒšXåÇÍgkýÚÒ{ç}Nï_¸(º¬u?c­¨ÿ½k¥qôϷ¦ë›¯}€²v{–¿7.Ö²öÂU·½\4[ö·£óüÎnP{,ëòF[4Ïý,|«¢îö,¿7M˜7ŽO®—æ6½¶h'Ÿ:c»\[@ËEyÛ/ó£þ…i'u§¿YüãØþóUÞçýã»nnÁvÅž8ÇK{¥=YÄ#7Åù3R¨6“Õ¬¥)­î5âä£kaÞÏ’rj~[%ÀnäÞèÈû~êû¿ožÊ—ƒæGGþVø£n¬mFu³©‡/u³´‡FÛ”ŠÚ¿„WŒg‹Óüå}ïl;ÙüïGÆGþÏ#Ýb"áûÇGþn·ÂuË•£#?õýqʳY×>1J3„,¼X4ùZ5—†øáóÚV±p½?gÖþÔô9Ëö Bb1›Å~}åÇô…ý§ÌÚk½ø)á¹6áô® CІä|{õ)íøå¾0~ÊêÕÓÉ<>ð(_ݦï<òÎî-£¸ÖöxÒÄc?½¥»àî ã[Fí[Fa ŽÚ-ØÖ6ÖrÑ]‚L§q-„ðM¸Y„7ÿ¥ÿËG~(|Ý"N}¾O¨ù•}ÁîW6³øÀ3¿0ÿ{÷ë–óÉú'ö«W}×÷ß¾óݳ÷ÿµüÔÑŸü…k~öâ‹SÁ»®ùû×~ +j·Jü¿ö`lÿÿ$\…3zøßèȬ-ÔIìP’ Nbê$ö(É P'±uû”䨓؇:‰}JòÔIìCÄ>%yê$ö¡Nb€’¼uûP'±@I^€:‰}¨“Ø $/@Ä>ÔIìP’ Nbê$ö(É P'±uû”䨓؇:‰}JòÔIìCÄ>%yê$ö¡Nb€’¼uûP'±@I^€:‰}¨“Ø $/@Ä>ÔIìP’ Nbê$ö(É P'±uû”䨓؇:‰}JòÔIìCÄ>%yê$ö¡Nb€’¼uûP'±@I^€:‰}¨“Ø $/@Ä>ÔIìP’ Nbê$ö(É P'±uû”䨓؇:‰}JòÔIìCÄ>%yê$ö¡Nb€’¼uûP'±@I^€:‰}¨“Ø $/@Ä>ÔIìP’ Nbê$ö(É P'±uû”䨓؇:‰}JòÔIìCÄ>%yê$ö¡Nb€’¼uûP'±@I^€:‰}¨“Ø $/@Ä>ÔIìP’ Nbê$ö(É P'±uû”䨓؇:‰}JòÔIìCÄ>%yê$ö¡Nb€’¼uûP'±@I^€:‰}¨“Ø $/@Ä>ÔIìP’ Nbê$ö(É P'±uû”䨓؇:‰}JòÔIìCÄ>%yê$ö¡Nb€’¼uûP'±@I^€:‰}¨“Ø $/@Ä>ÔIìP’ Nbê$ö(É P'±uû”䨓؇:‰}JòÔIìCÄ>%yê$ö¡Nb€’¼uûP'±@I^€:‰}¨“Ø $/@Ä>ÔIìP’ Nbê$ö(É P'±uû”䨓؇:‰}JòÔIìCÄ>%yê$ö¡Nb€’¼uûP'±@I^€:‰}¨“Ø $/@Ä>ÔIìP’ Nbê$ö(É P'±uû”䨓؇:‰}JòÔIìCÄ>%yê$ö¡Nb€’¼uûP'±@I^€:‰}¨“Ø $/@Ä>ÔIìP’ Nbê$ö(É P'±uû”䨓؇:‰}JòÔIìCÄ>%yê$ö¡Nb€’¼uûP'±@I^€:‰}¨“Ø $/@Ä>ÔIìP’ Nbê$ö(É P'±uû”䨓؇:‰}JòÔIìCÄ>%yê$ö¡Nb€’¼uûP'±@I^€:‰}¨“Ø $/@Ä>ÔIìP’ Nbê$ö(É P'±uû”䨓؇:‰}JòÔIìCÄ>%yê$ö¡Nb€’¼uûP'±@I^€:‰}¨“Ø $/@Ä>ÔIìP’ Nbê$ö(É P'±uû”䨓؇:‰}JòÔIìCÄ>%yê$ö¡Nb€’¼uûP'±@I^€:‰}¨“Ø $/@Ä>ÔIìP’ Nbê$ö(É P'±uû”䨓؇:‰}JòÔIìCÄ>%yê$ö¡Nb€’¼uûP'±@I^€:‰}¨“Ø $/@Ä>ÔIìP’ Nbê$ö(É P'±uû”䨓؇:‰}JòÔIìCÄ>%yê$ö¡Nb€’¼uûP'±@I^€:‰}¨“Ø $/ì‡ç_øÎ#}}èZÀ™ˆ}…p. gÔ¡k±UÄ>%ya?üüG;lÕë>t߳Ϻ.pzbŸ Οá,ŽÒpFº.[EìP’öC¸Œ¹æÆ{ƽ°¹å¶;?ÿò+'‡®ì&öÙXáœΜáüÑp.}úÙÿ9t¶ŠØ $/ìŸGûú¥W|2lÞéÑ_¹ï¡¯ ]X#öÙLálΙáà çOï÷ƒØ $/ì·Ïþ柾í]ùèUŸzüÉo ]HÄ>›&œ!Ãy2–áœù™{¿4tu¶–Ø $/€o}ûå›ùwß:ûÈ£›n¸ù~s#° Ä>›#œù1œ!ß2ýp8[†sæÐ5Úfb€’¼p`žüÚ7¯¼þsakÿÀÛ?vç¿ù㓯½>t¨šØg„3a8†³b8Ã2œ'‡®Ñöû”ä…vì‹_ý‘ŸøÕ°Í›ËïxðØCW‡z‰}ÎáLχáÜ8tuj!ö(É ïäk¯ßu÷Ã]rkØòW|à7´‡3±Ï€Ây/œýÂ΄á|¨¿ÄAû”ä…¡¼xüÄ/|ìwâx™Þú@øçÐ5¢.bŸA„s]8ã…ó^8ûýüGÛ©ïà‰}Jò°òï¹ö³æÓãà‰}^8ËÅù–ÃyÏ|ËCû”ä…M¶\oëï½ó _ú¯CW‡*ˆ}R8³…ó[\õ?üÞº:Uû”ä… ñò+'oÿôâ${×ÜxïSO¿0tØrbŸƒÎfᜧVg¹p®ºFµû”ä…òÜóß¾îC÷…=òÖÙG>zûï¿tâÕ¡kÄÖûì·p ç±p6 GZ8³=ûÜñ¡kDKìP’6У?sôªO…ýrñeŸ¸çþdž®ÛI쳯¹+œÁÂ1öî÷ÿZ8§ ]VÄ>%yacõWS?vå¿r5Åžûì“p¾ g--ZKìP’6ÙK'^½íÎÏëmÅ~ûì¹pŽê{¼ìWÿ@÷Í$ö(É ›¯ŸáÂæ³1°WÄ>{(ΈÎQfÄÚ|b€’¼pX<òØ×ûÙÚï{è+CW‡COì³W©_1çÿô©¡«Ã÷ ö(É ‡‹ÕœÙ+bŸóÎBá\¤p^ g§¡«ÃYû”ä…Cç[ß~ùŸ~ü?¾eúá F7Ýpóý/?1t8”Ä>ç#œyÂù'œ…¹胷>ÎKC׈³%ö(É ‡Ô“_ûæ•×.컋.¹õ®»>ùÚëC׈CFìsnÂÙ&œs™'?á,ÎEC׈7GìP’µßûÃ'›Ëï{0üùôCW‡ÃDìsÂy¦?çÃûôÂ9!œb«Q8W ]ö—Ø $/Ô㥯ÞüË¿ûÖÙGbO0“ÆWNìóÝn©šØ«<œÂùÁR55û”ä…Úô3EüÀÛ?vû§¿`¦ˆj‰ýÊ…Øg€p‡ÁUÿèß™uªb€’¼P§c_üê;Þ{gœIþÁcO ] ök¢>®JÎál0tu8Pb€’¼P³ÏÜû¥ü«·…à=×~ÖJÓµûu ‘â=ìú‹.¹5œ†®û”ä…ʽxüÄo}à-Ó_0º)ü%üsèq@Ä~mb°‡Hñ.Øk&ö(É O~í›û§ÿm|dp×ÝŸ|íõ¡kľûõâ:Dwì â}è1$±@I^ ÷à±'šËï0¤¨b¿ý`áÝ ó]±À:yÒÉ×^¿ã×ÿ(N9xåõŸûêûC׈ý"ö·^ˆßÅýdžû‰}Jò§zþ…ïÜpóýŒn²$Ùû[,Äl\l4Dqˆe‹Rû”äÞÈ—ÿüÙ£W}*o{×Çã¾ÿoèê°ÇÄþ¶ Ñb6ìÜ¿>þÌÐÕaãˆ}JògvßC_‰ë”]zÅ'yìëCW‡=#ö·OˆÐ§a·ŽÞýK!r‡®JìP’øž^:ñêmw~þÂæ–p¨üƒÿë7Ÿ}îøÐ5bˆým¢2ÄfØ¡!NC´†˜ºFl.±@I^à,… Οþ'¿å‚skˆýí ¹†7KìP’xStHÛb „ ‘¨;7oŠØ $/pî¹ÿ1VvbÿP qgº'ÎØ $/pnLh؉ýCÊr0œ'±@I^à|<õô ¼>¤Äþ¡â+DYˆµ°ãBÜ}õ¿ý¡kÄ¡$ö(É œ¿c_üê;Þ{g8šËïxðØCW‡³"ö—Y!¾Â. ±"nèêpˆ‰}Jò{å®»¾è’[Ãáôžk?ûä×¾9tuøÄþa¢)ÄTØY!¾B”y Ïyû”äöЋÇO|ðÖÞ2ýpø_øKøçÐ5â ‰ýÍ×Ô£›{EìP’Øs?ùþqÆgîýÒÐÕáôÄþ† ±Ó?p15tuØb€’¼À>yðØÓ£¿b¸ÓÆû«"È€\öœØ $/°^~åd?âUÿèß=õô C׈±¿BŒ„Hé'ì 4tØBb€’¼À~{þ…ï\÷¡ûÂaf¹´"ö7J¿ gØ)!^,èÉþû”䯣?sôªO…ƒíâË>qÏý ]Äþ â"ìŽ#!R†®[NìP’8H÷þΟÅëÞK¯øäŸ|ùé¡«S5±¿ B„Xˆí$!:†®Uû”äØK'^½íÎÏ_ØÜûÅ=ûÜñ¡kT)±?¬päÇ~Ô!BD„¸ºFÔBìP’ÄSO¿pÍ÷Æ‹á_¼ë˜y3žØJ8ÚÃ1›DB˜g‰&ö(É è‘ǾþÎ÷ýË8¯þ}}eèêÔEì"çq–pä‡ãèêP#±@I^`pŸ¹÷Ko{×ÇÃqø7~êÓÖÝ>0bÿ€…c;áa›‡£=óCW‡z‰}Jò›à[ß~ùŸý‹‡Þ2ýð£›n¸ù~“í±`ÂñŽêpl‡#<ç–\aXb€’¼Àæxòkß¼òúÏÅŸïºûᓯ½>t¶™Ø?áGr8žÃ¦Çv8‡®ˆ}ÖÈ lš?ø£¿h.¿#–áÏ=1tu¶–ØßoáèíäpT]HÄ>%y Ÿª\tÉ­žªì±¿ú'Ýáö¤›M#ö(É l¬ŸèG]}ðÖŒºÚ[b?„£4«ýHØp ]#ØMìP’Øp?ù÷\ûY³2î9±¿çú™rÃk¦\6–Ø $/p(ô«¶½ã½wþñŸ>5tu¶ØßCᘠG¦•49Ä>%yÃâåWNÞþé/\ØÜŽØkn¼÷©§_ºF‡›Øßá8 GcØ’áÈ Çg8J‡®|b€’¼ÀáòìsǯûÐ}á }ëì#ûÕ?xéÄ«C×è°ûç){á Ça،ᘠGæÐ5‚³"ö(É F>þÌ]ù¯Â¡{ñeŸ¸çþdž®Î¡$öÏG8ê±6`8ÃÑ8tuàMû”ä¯þšüÝïÿ5×äo–Ø?7áH Ç›¶/±@I^àP{éÄ«½ý÷õÙ;bÿÍ*û*‡£N_e)±@I^` ôszüÀÛ?fN³$öÏ^œË(]æ2b ˆ}Jò[ã _ú¯ýœÿÿá÷þóÐÕÙtbÿ,…c©_ë$cCWΗØ $/°e¬ ~–Äþ÷ŽŸp…­ލp\ ]Øb€’¼Àöyñø‰ÞúÀ[¦¾`tÓÏô·Ã?‡®Ñ&ûgŽ™pä„ã'EáXr±MÄ>%ymõä×¾yÅ~#Þ]rë]w?|òµ×‡®Ñfû§Ž“p´„c&lœpü„£hèÁû”ä¶ÛƒÇžh.¿#äáÏc_üêÐÕÙ bÿTáé–pä ]Øb€’¼ÀÖ;ùÚëwþ›?Ž“C^yýç<ñ‰Ä~)áØˆSÔ†£ÅÓd¶˜Ø $/P‰ç_øÎ 7ßG„ÝüË¿û­o¿g /@ßuðâË>ñ[ü§¡«s@j‹ý°gÃþ­¼“0|·¾ØàÌäˆî¹ÿ±úÑ_ŒS‹<úø3CWgßÕûaoÆI„Âþ {yèêÀÀê‰}Ά¼½¸ôÀ[g Aqý?ÿ÷Û½ô@ ±ö`Øág†}j‘ˆjˆ}Ξ¼»<õô ï¿áž¸4ùíŸþ¶Î7²Ý±öZØwa†ßöfاC×6ÅvÇ>o–¼§uì‹_}Ç{ï Ñ1ûñÛ<öÄÐÕÙ{[ûa…½~]؃a?]Ø,[ûœyÎà_ßóÈE—Übä=×~vËÖ+ßÊØû(ì©ð»Â^ ûnèêÀ&ÚÊØàœÉ pf/?ñÁ[xËôÃáá/áŸC×holYìoën‚=·e±Ày’àlü—¿øïýƒ§»î~xèêìmŠý°GúǸaO ]ØhÛûœ?yÎރǞh.¿c;¦mGì÷Ã<Ã~ÙÊaž°ç¶#öØ+ò¼)åÄ•W^ÿ¹Ã;qåaý°åÃößúi`aÏöØ`oÉ pžá;7Ü|ÿ¡^ØîðÆ~¹LdØ Û½L$ì¹ÃûìyÎÙ£?sôªO…zÛ»>~Ïý ]7çÆ~ØÎak‡š‡-¶ÿÐÕÃçÆ>ûD^€ótßC_¹ø²O„8ºôŠO>òØ×‡®ÎÙ:t±¶mØÂ¡Îak‡m>tuà°:t±À¾’àü½tâÕÛîüü…Í-!š~úŸüֳϺFßÛ!Šý°=ÃV µ [8lç°µ‡®b‡(ö8òì•pÛrÍ÷–Û–Cûåvض‡âF6Ü¡ˆ}Œ¼{«ïÖ8=ú+›Ü­qóc?l½° ]G\Øp›û$yöÃgóOûiO¾üçÏ]ÓØäØ[¬Ÿ¨'lÉ¡«[e“c€ƒ'/À>é—E¸`tÓ.‹°™±ò[ìð.än3c€¡È °¯žüÚ7ûeÓïøõ?:ùÚëC×(Ù´Ø[&lŸ°•B­Â ÛmèÁvÚ´Ø`Xò€c_üêüį†Xk.¿ãÁcO ]ÖFÅ~Ø&aË„ú„­¶ÕÐÕm¶Q±Ààä8'_{ý®»¾è’[CÄýíŸþ·ƒ?ÿÚØÛ!lP“°eÂöٜ称­6$öØò¤Ÿø…ýΣ›Þ2ýðo} üs¨š ûá·‡-¶CØa› ¸) *ƒÇ>E^€ƒ÷ø“ßxϵŸ ¡÷ƒõ¶ÏÜû¥Aê0lì‡_~{¨@Øak R¨“¼@I^€¡„¸‹ëë½ã½wü ¹¡b?üÒð{ãúŒÎ%y6Ä£?sôªO…x¼ø²OÜsÿcûýuûá·„_¾+üºð÷ûë€3“÷(É °Qú»§K¯øä¾Þ=@ì‡ú‡_q`w¸ÀÙ÷(É °i^:ñêmw~¾ï]ùìsÇ÷ã[ö5öCû°á·LXàlÈû”äØLýì+6·üÒ¯ýážÏ¾²O±êjê|ð3ägCÞ $/À&{䱯÷«3Ü÷ÐWöð“÷#öC û4BÍ÷ð“½"ïP’`ó}æÞ/½í]¡ú7ÿþ¯ïÕêí{û¡V¡náC=Cm÷ä3ý ïP’àPøÖ·_þ§ÿo™~ø‚ÑM7Ü|ÿó/|ç%y‘'¿öÍ+¯ÿ\ˆÙ‹.¹õ®»>ùÚëçüQçûáÛCBMÂç„Z…ºóGFÞ $/À¡ó{ødsù!rßáïçö!çû{RààÉû”ä8ŒÎÿÙÜ9Çþ>£ž¼@I^€Ãë|ÆîCìïùFààÉû”ä8ìÎmnÏ7ûû1Ç)pðä}Jòl‡7»ößÙÇþþ­›ØŸ>'¼,|føäðù{]eà Éû”äØ2Ï>wüºÝâú­³Üvçç_:ñêi_væØï ï Ÿ^>-|æ~V88ò>%y¶Ò£?séŸ Ñ}ñeŸ¸çþÇN}Áb?¼>¼+ü×ð ásö¿²ÀÁ‘÷(É °Åú;»£W}j×Ýic?¼&¼ò w‘Àa'ïP’`»½tâÕ›ùwûžŸÏ=ÿíX¾+öCyßË4¼þz™‡¼@I^€ô3ÃüÀÛ?vû§¿ðò+'ûØ%¡ülf¡;y€’¼õ8öůö+GÜòÿ~øKø³_¥"üס+ì;y€’¼µù̽_úÁ¿z[üø¿ð÷³_Å8ìä}JòÔæÅã'~ö¦ûÿ×noßáï¡dèJDÞ $/@=N¾öú]w?|Ñ%·†¨×ßùdÿg( åá¿]A`ßÉû”ä¨Ä±/~õG~âWC¼7—ßñà±'úØ%áïá¿B[OÞ $/ÀÖ{òkß¼òúÏÅÉEïøõ?ŠÏËØ%¡û›ú¶w}<øÑ«>õå?v×}£Ø¯ ¯ÿ)¼7|ÂAU8 ò>%y¶Ï#}ýÒ+>׼œö5gŽýð®¸.aøœðiûYYà@Éû”äØ&Ï>wüšï A}asËmw~þ¥¯¾Ñ+¿gì‡÷†OŸ^>3|òþT8Pò>%y¶CyûöÓÿä·¾çíÛYÆ~øœðigsƒ  ò>%y¶À}}åâË>ñ¦ºw¾©Øï; †oy£¨À¡ ïP’àP{ôñgúé_î¹ÿ±³ã9Ä~øü~‚šð½o¾²Àðä}JòRqyˆ¿ç¶<ĹÅ~¿€Exï®,€CAÞ $/À¡óò+'oÿôúåãŸzú…søó‰ýðý÷¡&¡>çð!À ä}Jò.{¢¹ü޶ïxïǾøÕsþœóýðí¡áCB}B­Îùs€ƒ$ïP’à°ø/ñßßsígCÀ^tÉ­wÝýðy~Ú^Å~¨I¨Oø¨P·PÃóü4`¿Éû”äØ|/?ñÁ[xËôÃáá/áŸçÿ™{ûûQ=`ŸÈû”äØpÿúžGúp?ù½úØ=ýP·þñe¨ó^},°·ä}Jòl¬~€ÞìÇoßózûû¡ž¡¶ç?¼Ø'ò>%y6ÐSO¿ðþîÙ× <÷/öËéOï8·éO}"ïP’`£” ü]ÿÏÿýþ-ð·ß±jêÎË#ûDÞ $/Àæ¸çþÇ~èG1„äÑ«>õèãÏìëwLì‡_~Kø¢ð»Â¯Û×ïΆ¼@I^€MðÈc_¿ôŠO†`¼ø²OüÖÿé¾ñ c?ü¢ð»Â×…ß~é|#ðFä}Jò ëÙçŽ_÷¡ûB^ØÜrÛŸéÄ«ó½ûáw…_~cøÒð{ï>˜ïv‘÷(É 0”—_9Ùß"]sã½O?û?òÛ‰ýðÃ/ío~÷cžàÌä}Jò ⾇¾2=ú+v¡0öûαa „ípð€šÉû”ä8`?ù8ÅÊÛÞõñÏÜû¥¡ª1xì‡ß¶@œ<'l“¡ªµ<öØ(ò˜ç_øÎ 7ßÁ覷L?<ø ›ûqq°5Â6 [fÿ×z›ûlyÀÉ×^¿óßüq\¢ýÊë?÷ä×¾9t6(öÃÖÛ$T&lŸ°•¶ºF°Í6'öØòì·=Ñ\~G´ðç±/~uèê$›ûaËô[)l±¡«[kÓb€aÉ °žüÚ7¯øÀo„»è’[ïºûázòµ±¶OØJa[…Š…í¶ OQaûl`ì0 yöËÇO|ðÖâȸŸÿèo‡]£Ý66öö [,޲ Ûp7jû B^€=×Ïœùžk?»±3gnxì‡í¶Þà³°ÂöÙðØà€É °‡¾ð¥ÿúŽ÷ÞWÖû¿÷Ÿ‡®Î™ŠØÛ0®Ò¶jضCW¶Á¡ˆ}Œ¼{â©§_¸æÆ{ã$™·ú /¿rrè}‡%öÖ Û3NͶpØÎC×·Ãû yÎÓK'^ýèí¿ÿÖÙGB(]÷¡ûž}îøÐ5:+‡+öÃV Û6T8lç°µÃ6ºFpX®Ø`¿É p>î¹ÿ±‹/ûD¢w¿ÿ×}ü™¡«ó&ÆØ[8lçPí°ÍÖº:p(ÆØ`ÿÈ pn½É]ù¯ï½ÉáýþûA^€7«ì»ø±_ýƒCÚwñPÇ~Øæa˺>º° uì°çä8{qn“ ›[¶`n“-ˆý~Ÿ°GÅ>° ¶ öØCòœ¥ûúJ¿öÁÿéSCWç|mMì‡}ѯñöÑÐÕM·5±Àžà{Úʵѷ,öÃ~ {'ü¢°§Âþº:°¹¶,öá,Ýpóý/?1t-`É p!w„ rÁ覷L?üÁ[øÖ·_ºF{fûb?ì°Âž ûKÞ‡7²}±g#ö]rë]w?|òµ×‡® lyN+ä‹5BîråõŸ{òkߺF{l[c?ì©°¿ä}x#Ûûpf{¢¹üŽpð‡?ÿàþbèêÀ‘àT!SôY#d¡«³/¶;öå}x#Ûûp±¥÷Þþ±mmé…s#/@©ºòÅv?]ÚúØ—÷á´¶>öáÌžá;ýHö/Ú¦‘ pnäˆBFy¡}òÅÐ5Ú_•ľ¼»Tûpf?ù¿ñSŸÞ²™âàÜÈ ðÝbvÊ*™²ªØ—÷¡WUìÙõ+I½ó}ÿò‘Ǿ>tu`ò• çÿ*\½®ÂØ—÷á»UÆ>œÁ˯œüÅ»Ž]ØÜââšï}ê醮4yj…s~8ó‡ã?d BFºFªÎØ—÷¡Î؇3{ö¹ã×}è¾xIpÛŸéÄ«C×޼@…Ây>œíãMA8ÿ‡,0tPsìËûÔ¬æØ§Zgyžÿ“/?}éŸ rñeŸ¸÷wþl¿kB^ 6¿õÀ çùp؇s~8ó]Áˆ}yŸ:‰}jóþÙ¿þžû‹× G¯úÔ£?³ƒ !/PpVçöxýÎöCWg`b?’÷©Ø§eÞSoüÖ·_¾ù—÷­³Ä~Dÿ?{wã]Uuçü0h‡ß8…©®Žc FÚT%Š.™1Naa™Š –b­Ø2 imí@k C¢A5´ª”¬PA1SJF2”8‘BCÃC~²í鑇psï9gŸ‡÷k±\¨|sïÙû³¿çž³Oì·G‘ HÍäSC‡ºævÍðuÚ×o€\@œhfv>ÖÑŒm»œPcì§‚ÜGü0ö'¶r¿ºfOnþ"nHA< ˆç¶/ÍÏÜö• Æ~êÈ}Ä cñ`=÷»Ov6®¹gêË{ÿøçàk¢+´¹ï<øþê[Ÿª¨Úa» oÈDÔšõ šuuôjÖ_Ž_^ß°ßv9@ªÈDŽæXÍ´:n5ëjîµ]NT1ö3Dî#¢ûˆœåþñΓsʶÌ­j¿ÿ³×ÚtØ®¸4r¢yõ¡ÿ~]G¬fZÍ·šumWaŒýÌ‘ûˆ"Æ>"$¢¹¯² ¦ìÂg~S[ßb»" 7ä"…·çû^qç~„–+H,Æ>"A=”:©Hç¾ó±¦~åO^Å A. üª6œ3zæy‹±ï­]΄„cì#äÔ7©{2mT r¿ìÅ÷.Z¬Ÿ%+»`zñ†®ݶ+ÎE. Ìw·±q‡Oû~ÐQòíÆ>BK½ÒOf½©¾I‡¨z¨Å«Þµ]‘7Žíš2£²_ÏÏuå%¬g6ä‰ýýÆØ÷Ih·C Æ>ÂI]’yÆ«ú&uOñËý½üóð»—˜Ï=¯¿ã™ÆÝm¶+>G. lºO^ô»<øÛoŒ}_é¸ Ïã’7Æ>ÂF‘¹+D¿n·$Þ¹_]³çªáOšvÜC/qÎa@. T4Oææ/Ò1™7¶¬¦n¯ír⌱Ã:’õ:ë¨Ö±m»à,Æ>ÂCÝz"Ó©KJÈ<Ù}êtÉâ-rŠôS÷R8ká;œ3„]äB¢¹å  …AÃJ—®~Ÿ¹ÑoŒý`èHÖñ¬£Z¯ö˜Wé8·]’ޱ0Ðܨ>HÝŽFuFê’–û‡;:'>²ö²ëÎöƒóJ+7í²]’‹\€uš+ݨ8ÈÊ.Ðoô¯¶+JÆ~ÌA®#\Ç99ìbìÃ:õ>ê€Ìǂꉒ<%6în3—E™+£8g+ÈصrÝö¯|kŽù褩ù3Ûå$c?x:Âuœ›ÁuäÛ. ÅØ‡EêwÌUôæBzöT1Ô ÿãMOè5¹ìº¤7Ȱ‚\€-έU9£$ä–PaìÛ¢£ÝìœÀM²°‚±+Ü—G^yc —Gž£ëD÷Ì¹ÕæÚˇÏ_Vk»"$¹€àíkm¿ÿÑuÎÖ‹<›Õ ƾE:æuä›Mt'ME#ÂvEHÆ>‚§îÆ<“]ýŽºrÿbµû^p6Øy»¶ÙvEHrA:ÞyÒ<šMGÝÃ3«ØfÙ"ƾu:þ5 ô.ðM‰± ½ó»ÿq¯p×/û©Ø¾sÿõwþ†ºiêh–­©·]QT镜^¼!믯dyEíŠOä|Õv Ã\§ylNÙVÎn…c?l4:4FÌÙ`Û!žûð•z3©‹Q/CîgÎýIëµ£žæ“VxŽ\€OºNtÏ_VkBáþG×qõ{Ø0öÃÉÙmIcgîÒv]€çûð‰ú”¯õ\çÀ]o~¨­oùꈹæåÍŸ¼’s†ð¹?TmþØì¨?üî%õ œÈ #Æ~˜iÔh옧±h4Ù.±Â؇çÔ›¨C1­Šzu.¶+Š-g§Ö¬ìvj…WÈx«©ù³»z¶J¾úÖ§xâv˜1öÃO#HãHoÓ÷­ÐȲ]b‚±™§æ™Üxj^0ŽíúÁÏ_wžäXQµÃvEˆ³ˆÆ~ñY<2ÇØGzè;ÂŒ>™ †#G»f<µÉ¹§‰ë¢ˆ±]qνº•näžô ciàºÄHà:^¤‡\@_9{Žyp{Fc?ê4ú4ÙË}ÅØGŸ°oIä°ÏúŠ\@êêöç-ã™hñÀØçYŸ›ï}¸Ïv9ˆÆ>RÄs ¢‹ç€ OȤb_kûý®Ó¡20wöÂÛxþi 0öcCãQ£RcSo¨Æ©F«íŠjŒ}¤‚çžÇ@ÛŽüÉ+Íg»_1·¶¾ÅvE)r½;ÞyrNÙÖ+zBáá™Uš[lWo0öcFcS#Tï©FkÉâ-¹¶+BH1öÑ;u êL¡n‚ܺí;÷mÔÓæ 5áyÎâ|äz±f}õ=sÈ·ïyþ£¦Om—/1öcIãT£Uï¬F®Æ¯írFŒ}\Œ:õ ¦qТ>ÂvEðLyE¹Œ$+»`zñÎÂ\ÀiU9zÒrV•1ÆØ1çLÎí÷.ãLÎÁØÇùÔ¨G0·›©kPï`»"xOïòÔÇßè÷×wyÙšzÛ!,ÈœãÀ¡£ÎUg³¾Ã¤¸bìÇ›F®Æ/Wzã|Œ}œcùÚzóÉ‘:…ýò r?ÞÜŸ_Ç3| Œ3ä\Ì®fbv¥ˆ=Æ~8;Ai\³ Æ>êÔpgY½ó»ÿ¹jø“æ­¿ëµ³]l"`èpv­ß¶ým—ß1ö“C#ÚyR̆·o»XÆØ‡hýÿ¼`Úõo×6Û®8»ÈöRÈ.²IF.€§Z'c?i4º5Æõ¦k¼kÔÛ.Ö0öÎ<™NëžL9ÜÑ9ñ‘µÎS&+7í²], ’L“ÀOKÞÊÊ.SôXéFý«íŠÆ~iŒk¤k¼kÔÿxÖ› ùdbì'™VûÿxÓ:´þWÀ$£¹å ¹ŒD¿ró5în³]E.$S÷©ÓKW¿?hX©Þýñ?¬Ð<`»"±ŸXïõz÷5hÐl`»"бŸLZákoüZù“û8_å¦]ƒóJÍAÂé‚D!¨¦nïMßYlNU×ì±]ì`ì'œÆ¾YꟚl—ƒà0ö“Æ}A Vû\ˆ^tŸ:=ká;ærâ9E%‹·pÎ0 È…Din9xÏÔ—Í%âe/¾ÇO2Æ>4h0[ kfàó‚„`ì'‡Æ¸ÖóZÕ› C´Î'÷‘ŠCíÇÆ=ô’³ÝŸÄ¹GŽv>ó›+†geL+\ÏÆÂ`ìÃÐl 9ÁÜG¬YBs…íŠà/Æ~Bh ï4û Žž´œ}a0öᦙAóû 'c?ö´n~÷çãì ‚LTTí0—‘ôË.˜2£’s†±D.Ä[}ÃþãËÍsǪ6l»„cçÓ,aÎkÞÐìa»ø‚±cZ«kÅ®u»¹1D+yÛ!ºNtÿdÖ›Y=ÇÕåC‹¯z×vEð¹Wm:îtÞܹ³ç”må£8c¤¹B3†æ šCZÛþb»"xŒ±We/¾gž-®uûôâ ä>¼¥…eþ䕿sçkFΫ­o±].ɹà\³ÊëÙ£>&ûq¢Õ¸¹ó—l¤òŠº/}}–óa4ç £Ž\ˆš>5¡ðÏÿ:wÍúÛå ìûH‘æÍ*fC*Í3¶ËA¦ûñ ¸Öáæ–.­Ìµ>·]’Å}³êÿûælnV4r!Ìvñz¯ZÌvñHc©sX£cfêão°q}¤1öc@kïø&[>¾}­íæ2³™íö\™IäB¤uè^¸b›ÙøÞik4*mW„È`죯4Ãhž1ûjæa·ŠˆbìGšÖÛZu›å÷­ß-'÷<ì2êÈ…èÒèËÍ_¤·/olYMÝ^Ûå bûHfÍ9:x†þûBÍB¶ËAŸ1ö#Jkl­´Í’[koFÂfîÒš9E:>û)œ9·ºûÔiÛ!UäBýá“?yp•Þ¸AÃJµ¦Þv9ˆ$Æ>2¡™Gó!ÍEMÍŸÙ.}ÀØ­«1¯Zkl½qZo?¹d«íŠ€ ;ÜÑ9ñ‘µ—]wö¬Åà¼ÒÊMlD äB´h =VºQq _úþÕvEˆ*Æ>2ÄtQŒýhÑŠZëj½eZck¥Í@Cøýá“?™ ØôK¿in9h»"\¹!îòk¶ËA´1öá ÷å KW¿o»\c?*´Šþæ][TóA<¢…SB.D‚sÃŽ[à Æ><ÄíÌÂØ?.ºClq¦£9‡é±o…Ö·æéœl«\LsËÁ[Æ-1Ÿžß0zç C.¬ûÔé²ßsÙ¬#ßvEH(Æ>ìÒì§9М ^ô»šmW”Œý€iM{ÿ-4K\­uÉ} wÕ5{¾ò­9<ˆ3HäBt„çæ/Ò ~Ów×Ôíµ]±0ÐL¨ùP‡¢æFͶËIÆ~`´ŽÕjÖ,kµ¾åRÔ}êtÉâ-rŠ4vú)Ôï9gè+r!Í-Çÿ°B/õ a¥KW¿ÏQ ëû ͇š57šSÁ|zâ7Æ~Ìjöï®/ÔK­5-«Y ‡;:'ü×ËæŒÊà¼ÒÊM»lW[ä‚ßt0?VºQq`6MÒ¿Ú®8‹±PÑܨRó¤fKÍ™L•þaìûM«V­]Í"V«Yf »ÛÌÅu\qírÁW+×m7;éypUSóg¶Ëþ†±Ò<©ÙÒ\\§ùÓv9ñÄØ÷{7 ­`Ù ðÊ«¿n4›o\vÝãYËŽLÞ"|²mûÿæ-3OÚâåE1öZ:,ÍSY5‹r«µçû~ÐêtÒôW´R5[$iíj»" nºNtÏœ[ÝH¡ybËüeµ¶+ŠrÁsûZÛïtI„…+¶ñTM„ca¦™Só§9¬UóªíŠâƒ±ï9­KÍÓ´µRÕz•ÜüsàÐÑüÉ+ͧðW r+ç ½@.xèxçÉY ß¹¢'žY¥#ÖvEÀE½úëF¨œÄF˜iÕ\ªÕ<ªUs¬íŠâ€Ü÷Ö¢æ®ýÒ•Ü‚±}çþëïxÆ ½Qžçœa†È¯¬Yßpí¨§õbŽž´ü£¦Om—\ÂìgßÑáªÚ.¸ͨšWu¸jŽÕLk»œÈ#÷=¡õ§V¡f9ªu©V§¶+§¼¢n`îlÁ~ÙÓ ×sÎ0mäBæ´Vùö=ϳVA´Ð"Zœsn#Æ—sÎ-ä~†´æÔÊSëO½ŒZ‹jEj»" ¹4§o`îÏ믻m>Ÿ×÷¹³× ö:@Ñ"¢œ=»4Ï_VËÞ}Eî§G+ÌìÛçs¿Zµõ-îûy9g˜:r! U›?vöB¯oà"‰~‘¦¹×y¦ædÛåD ¹ßWZU:ûjµ©5§íŠ\ûý¦\èçYÉJž•ŒH£D h6gƒïzàÍ϶ˉr?u<ï ˆ¢#G»îûÉ:çy lîqIäBŠwtN+\Ÿ•]0 §hÆS›t¤Ù®Èý âA³±ædÍÌY=ûËj?f»¢°#÷SôÊ›;Í0µªÔÚ’Ü¢¥¹åà-ã–˜Oösó5în³]Qx‘ —Ô}êôÒÕïVªêž©/ëè²]àúAĉffÍÏ:¤5WkÆÖ¼m»¢ð"÷/IëF­Í2RëIrˆ®767 Î+5Ãù{SWîè´]Q‘ ½Ûòî'&ôÏ·k›m—x†~ñ£YÚ™±5{Û.'¤Èý^h­¨£Y:j ©•¤íŠdªûÔé’Å[äi\ëŸú=ç ÏA.\ g›oôƒˆ%®è¸$rÿ‚X1ñv¨ýظ‡^2g{þ)oNuÍÛ…¹p¾#G»~9o3w£ Þècš·;¾5Ÿsç—¹>­ µ>4 E­É} ®w·}ýÎg¹üäÂ9Ø­ A?ˆØÓ®™œ¡ÏAwœÐ*‘'€$¨¨Úáì5eF%ç ÉG}Ãþáw/áiVHúA$„óÄXÍð<1ö ¹ÿWZjèìH¯õ¡íЧëD÷ÏçlÌÊ.ài2gÈ…ûZÛït^‡¹³u<ðäJ$ý ’C³ºævÍð:æ5Ûkη]‘Mäþ׫µÔšÜ’©í@Gþ䕿 kFΫ­o±]‘ Ï…ã'ç”m5‹„‡gV騰]úA$fxÍóæÔŸf~Íÿ¶+²#ṯõžV}fù§u ¹`ûÎýδpÛ„e­m±]QÐ’œ ëÞÚyí¨§õã_þQÓ§¶ËE?ˆdÒl¯9_¿æ¥€ír,Hlîk§•žóA€V€¶+"åu梬ì‚éÅuÎ0™¹ õÀèIËÍz`ÍúÛåÐ"É4ó›óÊ‚¤L`îk]§Õ¹QHë=­úlW Œ4WL™QÙï¯sŪ×>´]Q@’– ‡Ú™ë…®Z\øÌoÕûnôƒH8ÍÿJ+zn"S.$çIË}­èÌ9­ñ´Ò#÷ôn_kû¨ Ï›k ®¿ã™$\Kœ\è:ѽpÅ6³»,û ôƒÀ×~bJeDöINîk§µœYÔiuGîH]uÍž«†?i&±?x1Þç ’ zOÍ~ãycËjêöÚ.°~p(”æyCÊ Ûåø+ ¹¯•›Öof!§]ìßS>9»ñ EšIú)œ9·:®ç cŸ MÍŸyp•~ÆAÃJy1à ΡŒøÊ·æh\(5”¶ËñK¼s_«5­Ù´rÓÏ8 §(áϹÃYkžUú囟¨Ü´ËvEÞ‹q.èí{¬ôìƒ&•úþÕvE@ˆÐç3Á¡ÔPvÄ58bœûZ§iµ¦ŸN+7­ßbùö°¢¹åàMßYl®:ÈÍ_Ô¸»ÍvE^Še.tŸ:½tõûƒ†•šÓ¼zmW„ý p1Jq½d.,Qš(SlWä¥Xæ¾ÖfZ¡™¥Ú7ïZDîðCå¦]ƒóJãwÒ)~¹àÜ¢hà–àbèÞ)AL‹³Ïc–ûîK¹´N‹å¥\£ûÔé‚ù¿q.J/}î·¶+ò@œraïÿ|ÏÔ—mâbvFðý pIÊ‘E/¼k6¦V¾(elWä8å¾VbZ™­~1¯šÜŒCíÇÌe$ñØ´*¹päh—yŒTVvÁ´ÂõñÞðý "eŠ’Eùb\«Ä±]QFâ‘ûî­àµ*#÷ïÃ]­ÎCm†ß½$ºµ‰A.TTí¸úÖ§ôSŒž´ü£¦Om—Dý Ð'»Û”25JåŽírÒõÜ׊Kë®D=*@˜)Ìe$ý² ¦Ì¨Œâ9ÃHçB}ÃþãËUöíó«6l» Jè4(kÌÓl•>Ê Ûå¤#º¹¯U–ÖZZq©þøfI¤»rqr¼óäôâ Y=³ÓC‹Ë+êlWÔ7Í…¶ßÿÙkª|`îì9e[õ.Ø®ˆúA =JåŽÒG#HI¤<²]QßD4÷µ¾Ò*K•kÅ¥u¹ lwÞ·Â\½pÍÈyµõ-¶+JUär!êA „ý ¥ÏCÿýzOKF.÷µ¦ÒÊÊ,±FOZNî3÷”¥ö0SV´r¡jóÇÙ·Ïô…:@HЙ‹âm Êýèžlpåu—Gç’†¨äÂGMŸÆãF~ $诬Yß¡mÍ"‘ûî›q´¦*{ñ=Û@߸oy¾òÆPßòþ\ˆÙFß@HЊÐcŸû1جŒs¶Dnhú?Û]@˜s¡ûÔé…+¶ÅìAÀ@HОSî+­Ì©`åW8æÜ×JÉý0/r@<„ü‘©¡Í½n¹ù‹T[ÞØ²šº½¶Ëâ†~ð‰2KÉ¥ñ¥S–Ù.ç\áÌ}­Ž´F2‹%­šBøº@†JoS¤Y®ÿ¢o‡çœas¡¹åà˜W©ªAÃJ—®~?<¯'ôƒ€¯”_J12%šrÍv9¶ÜWÊk]¤Õ‘ªÒJIë%r@\îèœøÈÚË®;{îkp^iå¦]¶+:+T¹ —è±ÒŠƒ¬ìýFÿj»" ¶è¿9¡¦_á µPå¾ÖBZ©­Ž´F ÉK¾jÜÝf.ƒÔ¯›Ç% •2ìæ¾V;Zó˜í´ "÷àPû1s‰­ µlå‚ó¨&}÷‡gV…mÛU öè+”wSC£ÏÖCumå¾{»õÿxàrܶïÜïæO^éÓ9C¿s¡jóÇ9£è[ ¿{I}· aA?„RÒÜR¡ÜTzúô]|Í}­U´b1K—¯Ž˜«•ŒßåìÎÌ=›pfeü|ÎFÏÏú— MÍŸÝyß }ñ«o}* OààF?„“S¹©á© U’zþõ}Ê}­O´J17¼hÝbë)ZKGŽvM™QižÜzå%U;<üâ~ä¡öcÓ ×+äýrÞæà7ÓpIôƒ@h™G2)C•¤ÊSoÍàGîkebž«¨µÊ~þ:¹~hn9x˸%æŒoä?Û¸»Í“/ëm.tŸ:½tõû&î™ú²jöäËðý rÊP%©9¬lUÂzòe½Í}­F´&1‹­RÈ}ð[uÍžÁy¥fâ÷ÐK™Ÿ3ô0T[nþ"}5ýsË»Ÿdþø‡~ˆ„šº½N¶*g3ÿ‚^å¾V Z‡˜‰V&Á?à«ûÔé’Å[äiÖ?õûLÎz’ Î9ÌAÃJ=<‡ À?ôƒ@T˜ko”°ž\{“yî{»¤çpGçþhµs^nÃÛ¿Oïëd˜ GŽv=VºÑ¹ÇAU¥÷uŒ~ˆ%ìg½iîÍWò¦}^†¹¯õ†sÒw® ÷À®ÆÝmæ2’´¯ÛÏ$œ=ÐÆ<¸Ê=Ðø‡~ˆ"¥­27“½»ÓÎ}÷>Z{xµ skÖ78ûzMþé«}:g˜^.¼÷á¾¼±e~?# €èèÚðöïͳ}•ÅJä>ýÝ4r_ë ­.|Úçà‰®Ý3çV÷RØ×çþô5öµ¶ßÿè:ý•¹³®Øæùóƒ~ˆ4å¯RØœ V.+Sü‹}Í}÷sµÒ ÷ ÌÚtäO^i®å¸úÖ§jë[.ùWRÏ…ã'Ko¹¢'žY¥ïåEÉì b@Y¬DÖXV:+£•Ô—ü+©ç¾Væ®ýÒê‚Ü€¨Ø¾sÿu·Í7ø¨ Ï÷~Î0Å\X³¾áÚQOëO~ûžç?júÔÓzX@?Ćrùö{—iD+©•×½ÿáTr_+­ÌBâk£žÖºÂÓzA(¯¨˜;[3y¿ì‚éÅ.vÎð’¹Ð§”ôƒ@Ì8gn•Ú½œ¹í=÷µZКA+scˆÖ¾Õ ðfõi…ë{ŸÕ{É÷U(³¾“ÊU(¢‚~ˆŸTîìè%÷Ýg’§>þ¹ñà¾êãú;ž9çª æBÚw©ˆ úA ®œß”ãçïüvÁÜ×Ú@+„ï4DÑÖº½W ÒLõw=ðÂCGÍ??Ü»XoÛþ¿–êà/úA ÞÜO†R²;ÿýœÜ×z@«³<Ð:áßý¥zApvî?¤ÐìíÎ…ÌŸr *è$Pš›=B•ïJù3®~0í'U"íÈÑ®‰¬už*û‹yÕúÍ«¿nüñ¬7³² ä=VºñpG§í2ø‹~Hå¾’]ù®”WÖ+ñ5ö•þæ®­´* ÷ iš[Þ2n‰¹>D¿þþ³ôÏñ?¬Ð·]€ Љ¢|¿gêËNâ›_ycËÈ}H²'žû­Ù}ÔlOÍéA 9è¤QÊ›H™Dµ°]Àç<á—¾~öcú}ãî¶zž4¡_·Œ[Â9C ÆèØsï3zRþÌs_+;ï[Á¾âõ ûGŒ/7‰Pµùc翟ÿüÁŠªfϱ~ÙSfTrΈ%úA Æ”ÝJp³E€2]Éîü¯ós_«óÜa­´Z°Q/ÀG­m¹ÿÑušçæÎžS¶µëD·ûÿžŸ ¢?óÓ’·Ì-—-~vÅï‚-€ïè¸Rj›g +Ç2ëÍsîÒ­ô¿´fÐÊ!Ø’¾8ÞyR  ™ÞžYÕv ãü?sÁ\0ôçó'¯4×™\3r^m}‹ÿ%ý ?Jjåµ n%x¹¯Õ‚sY«ÿKøåõ»®õô%/ÿè%Œw?Øç„Ëí÷.»`¸ˆúA N”Îγ$z?…{ÉÜÿ ±ÕÜ`¢U„ÖþÔ ðÑGMŸŽž´\3ù?ÿëÜ5ëzÿ×Ì£¼¢ÎìM•]0½xç ¨£âA‰¬\6·x|éë³”×½ÿùs_ësVY+ ­+¼«à£CíǦ>þ†fï+†§¸}tйpæ‹7§Ìí¾9@äÐ1 ,6w…¤¾\Ÿr_k‰+znEÔêBk /Jø¢ëD÷ÂÛ̾ ÷N[³¯µ=Å¿˜z.úÊ#¿·Ô\‘rýÏlßÉFd@$Ñ‘¦üU ›81¾Ü×ÜŸ4ý³O©VçìNƒêš=Cÿ}¡æê¼±e5u{ûôwûš Îw¼jøßnË9C rèˆRæ*yM+‹•È}úëéå¾VZcè/j½Ñ×ïðOSógc\¥ùyаÒ_­©Oã+¤— ÆüeµrŠô×û)œ9·šs†@„Б£œUÚ*s5x•¿s—Ö¤ñE2Éý•ë¶k½¡¿®µ‡V i|€Wwt>VºQq _úþ5½¯“I.˜2&>²ö²ëΞ¥œWZ¹‰È€h ¢E «œÕ°Uæ*y-æ¾'Ë@&–®~ß9A÷‡Oþ”É—Ê0Œæ–ƒ¹ù‹Ìµ+úM†%ý JUCÖ«Üw.OÒš$“/èç~%‚'ð{’ †W§.€~??.Âñ0÷µ1jÛúj_kû=S_ö|ƒ/sAºOÎüÖ BNêÇMúžç¾³½¹V)©os Hû@Ó ×{»™§·¹`d¸õ€Ð¡åë&Þ>å¾Ö'YÙ©?þ¢5뮾õ)MÝ£'-ÿ¨éSÏ¿¾¹`¤ýh$ BHY©Äôõ!¿þå¾V)Z«è‹kÝ¢Õ‹ç_’¦¾a¿ …kG=]µùcŸ¾‹¹`TTíøßœ­oÑ/»`ÊŒJÎ!A?„ŠòQ)©¬ÔÀ˜;[ééÓ7ò;÷µbɾ}¾9¬•ŒOßâ­í@ÇCÿýºI„9e[wžôï{ù ¢ú§oÈêɸ/}}VyEß @ŠèðP2*5$••JÌä¾V/ZÃèi=£Uß bÆ=…Þÿ躦ÐrÁÐÏrÇÄ_™k`®9¯¶¾Åïï ôƒ@( •‰&o¿wYÌrÿû?{-˜“ÛU›?ν àK,ËÃ|ù“Wrΰ…~°K ¨ þ4iÀ¹ïÜü¢Ž7¿@Ô5însnÁ^õÚ‡A~ë€sÁX¼êÝË{¶KÍÊ.øÉ¬7½ÚC@êè[”zÊ>s…ÒðÙ¿ ò»[ÉýŠªÎæxZóù­ ä¬oÑl%Î|ñÆù+o,ñïÆyD?X¡¼3O복͚ÅÜ7ÏÒšÇó‡g@uŸ:½è…wG¸6·´R†­\0öþñÏ·Œ[b®–ɽ€s†@`è€)ãÌ]!ú¥ìKlîkÍcNk¤µ•2Àºêš=¹ù‹4ÞôÅ5u{-Vb7 _¼ à‚èÀ(×”n&殺åI¥žÅbÂûZùä-SZ Ù}5 xÍ-M( VºtõûÖÏŒ…!Îô|ZZ²xË€œ"ÓHᬅïXe€x£ ,S¢)×4Ü”qJ:ëéžÜ×*Hk!s*ØÖ§¥¤Ã•nTdeü´ä-ý«íŠÎ I.zM&>²ÖœAœWZ¹i—튀آü¦S–™P»wÚrÿ|fi¤u‘VGúMH^"ðÃÊuÛ¿ò­9šÇ<¸ª©ù3ÛåüM¨rÁhÜÝf.¦Õ¯¼±eœ3ü@?øGÉe®‡4—D†êîøæ¾ÖEZ©*­”´^²]x̹H>gô‚PM¿FsÁ¨Ü´Ël¶sÙuO|d-ç oÑ~0º(¹Ì–)¯þºÑvEç mîW×ì1ûíhÕdwkðʾÖöû]gaáŠmá|Ê^hsáLÏšfέ6·]\>´xþ²ZÛñA?xN9ež®«äR~‘û}¥WLë%s6X+(­£lWi:ÞyÒ ÷îp?øùëœ3èC‰ \HÎÕ ÉýÁVAîljÞM½¿ZÑéçÕêNk<Ûµã'ç”m½¢'žYÕv ÃvEIN.zgó'¯4W}uÄÜÚúÛvÐ"á4ÿ+L(Èý¸Ò;«u~d­ñ´ÒÓzÏvEÂhÍú†kG=­¹bÄøòš>µ]N ’– ÆöûÿåÛóÌ2`Ô„ç9gˆ¢DbiÎ×Ìo"@Y D°]Q ’™ûZÝi§\ë=­úl— D4?Œž´<ÉóC2sÁ(¯¨3—‘deL/ÞÀ9C$ ý Hó¼f{sã€æ¥€íŠ,Hrî;çÿµöKÚùç;pè¨sý@á3¿Il/ä\8Ó³6˜2£²ß_×Ë×ÖÛ®ý ’æ…W?0ç5çkæ'÷mb‡Þw­úœûƒ´´] ºNt/\±Íì6ÉýÅ ÏÃ}íÐõw<“´k‡LôƒHÍêšÛ¹GÀ ÷ϸöÔjPkÂ$ì#À¡ ÐÙ¸¦n¯írì#Õ5{®þ¤Y0üÇ/Äò1Ä€ƒ~I ™Ü<ŠN¿4Ãkž·]‘}ä¾Cë@çùb¼ @8Ï'ýÊ·æð|R¹p޳{ßP¤×¤ÿ™s«9gˆ¸¢D¼iöÖ®™üì3†n(âCrÿZje¨×D«D­m—À‡;:ZòVVvÁ€œ¢ÇJ7ê_mW"äÂùt„L|d­y6ñ?ÞôDå¦]¶+¼G?ˆÓ¼ý囟Ю™\ó9¹ïFîŸOGˆÖ‡Z%j­¨# 'ݧN/]ýþ a¥šúÆ=ôRsËAÛ…¹p1:Znóœ¹Ê(7Qãî6Û^¢D,i®ÖŒm¦nÍáäþùÈý‹ÑÑ¢µ¢^­µzÔÒvE2US·÷¦ï,6‹yn¸r¡w•›v Î+å$3â‡~1ã¾´Có6—v\ ¹ß;­Í)­!Ùhˆ®æ–ƒ÷L}Ùlµè…w9ÃÓ rá’tü-xÛÜ„2 §¨dñŽ(Äý âD3³ægsë·flfé^û—¤ãG«G³½Ö“|Ê DË‘£]æ±2YÙÓ ×³Eä%‘ )Ò±d.#a“:Äý âÁ½5´firÿ’ÈýéXÒJRëIó j­0mWàÒV½öáÕ·>¥Ynô¤åÜí•"r¡OšþÏyˆÕð»—ìýãŸmW¤‰~Q·¯µ]ó°óèXÍ϶+Šr¿O´žÔªR¯˜V˜ZgÚ.ÀEÕ7ì1¾ÜjúÔ¹±wÍúÛåD¹à•òŠº+¸„ ÑA?ˆHp_œ¯9V3­íŠ"Ü÷ŠV¡Î6†ZÚ.H³ñ¯I6þõ ¹à!÷ÿðM¶8@¨Ñ"üؼË侇œÇœé%å1g€¯ºNt/\±Íy0è¾ÖvÛŹà¹s¶@ß¾“ë™Fôƒ³wµºîCî{ˆÜ÷œŽO­NÍn·Z¯jÕj»" nªköäæ/Ò(ËS·×v9qC.ø„G$#äèNš-5gšÉS³¨æRÛÅ ¹ï­QµRÕk«U+Ç-à•?|ò§1®ÒÈ4¬téê÷m—O䂯JŸû퀜"½Âý‡þb^u÷©Ó¶+>G?ˆ°Ñ Y0ÿ7š-udjæÔüi»¢x"÷}¥õªV­z…µ‚Õ:Öv9@„îè|¬t£â@¿ôý«íŠb‹\ð›ŽÞ‰¬½ìº³çºç•VnÚe»"à,úA„ŠæFÍ:&5[jÎ$÷ýCîûE,¹_­©wN­45f»œ˜#‚Ѹ»Í\ö¬_ß¼kQsËAÛ!éèšoúÎb3=jžÔli»¢˜#÷ƒ¡¬s‘›V¶¶Ë"ùôzè¿/äÒë` AªÜ´ëË7?Á p„ý ¬s_>¡¹‘Ë'‚AîI«Y­iÙHžÖö{§­ak¦à‘ Ó±=snµsƒÌüeµ¶+BBÑÂ.Í~—ßðùíÕšÉýÀûso’¯µ.›åçs?ºeêão° cÀÈ+tœýÁ‹l ‹èa‹{ûeÍ„ä~ÀÈ}+tœk•ËC´ó­YßðÏÿ:W£cô¤å5}j»œ$",Ú¾s¿ó€­‘ß[Ê9C‰~ÁÓ,7jÂó<žÕ.rß"­uµâÕë¯Õ¯ÖÀ¶Ë,«oØ?b|¹Fĵ£ž~}#· XC.X·êµæÎÖ»Ð/»`ÊŒJÎ"ôƒÒñΓšß4Ëé¨ÓŒ§yÏvEÉEî[§u¯V¿z´ÖzØv9€m:žYeaNÙVe„íŠ\‚éŲþºR*¯¨³]â~ÑœfÎzi–Ó\GîÛEî‡FÖÀf\hU¬µ±íŠ€€tèvþû]×ÚöÛ\ˆÛ&,3WR]3r^ÝŽ?Ú®qF?ˆlß¹_³™™Ö4¿‘ûa@F„ÖÃÎG$쪄ثÚüqÎè|86äBØÔÖ·8˧üÉ+9gŸÐÂWš»4ƒ9'¸4³Ù®Ÿ#÷ÃÆ¹…Jëd­–m—ø¢©ù3sóìÕ·>µrÝvÛåà È…p:»{Ϧ»YÙ?+ý5ç á9úAøDóÕÏçl4Àkã©:aCVÈZ'›-µr¶]à™CíǦ®W( È)bsÝp"BKãeÊŒJó¤æ+o,©¨Úa»"Ä ý ü ™ÊsGøîè|¬t£¹æùdzÞÔ¿Ú®)!¢E#ë{SW›óðƒóJ+7í²]¢Š~zcs“f!3i^"÷£‚Ü,­«Í^Zi3ÐZΞHc\ÅžHÑB.DQãî6s ÷é môƒH›û¾fÍEÜ×-ä~iu­56{õ#œ¶mÿß¼±eæ™)Þþ½írÐgäBt½òæNg¿IÓ_a?ô ý Ò y澟¬sö=Ö,d»"ô¹]Zi›gykí­¸ír€3ûZÛïtI„…+¶ñ|´ˆ""MãnæÜêþC yÎúŠ~}å<UsŽfr?¢ÈýHÓ¸ÓªÛœ Ö:\«qÛ!¡Žwžœµð+zBáá™Um:lW„ô‘ 1 1˜?y¥¹vëê[ŸÚʦ¾Hý RW[ßbî Ñ/Í6ä~¤‘û1 1¨¸ÞG­Æµ&×ÊÜvEH–5ë®õ´ŽÀÛï]öQÓ§¶ËA¦È…ØØ¾söíóÍ‚mÔ„ç9gˆÞÑ"šI4Ÿ˜‰E3ŒæÛ!Sä~lh®Õ¸ÞM­Ìµ>·]AGÝ·ïyž£.fÈ…˜)¯¨˜;[ïi¿ì‚i…ë9gˆ‹¡Dï4{L/Þ ™DljfÍ-¶+‚7Èý˜q>©Ñ*Ojà÷§Ò%‹·°ÂŒr!~4BÕ ²ŠCïèÑ Î,Ź?¡ZŸs'|bîZ5¡À]«±D.ÄWy¡wôƒ¸ Í×ßñ WžÇ¹WÎNZ·³Ó#¼RµùcgWÛ÷>Üg»ø‚\ˆ·­u{ÙD?ˆs8t”©’€Ü7­Ø'Ái%o»DO½Lr! Ø%磄ƒ'×$ ¹ŸZ½›³ÁZÏkUo»DÌáŽÎi…ë³² ä=Vº‘'\ǹ˓¦¿ÂS¤á „ñê¯ͳÌ4?h– ÷cÜOe­äµžÏê¹ X+|Û!ºO^ºúýAÃJ5KÜ3õåæ–ƒ¶+BÈ…DѸ¾eÜs=Xnþ¢ÆÝm¶+‚5ôƒÐ  yÀLšÈý„ ÷EãZ«z½ãZák¯Õ¾íŠ^[ÞýÄ„‚þY]³Çv9¹@•›v Î+5‹ÀïM]Í9Ãd¢L2ú ÿõ²™4hN°]‚Cî'ÖöÎ:_k~Ûå tœóWÞXÂyƒ"’I#½dñ–¿»þìíBrŠô{Æ~ÒÐ&“ûõz÷50öˆÜO&s ¹8œëá8r´ë—ó6;×j?f»"X@.$™Fý¸‡^2ŸüSÞ® HúÁÒÿÊ·æ˜!¯±Oî'¹ŸdõÎ>!ê¸_8áœ}‡î¼oû%¹€ÆÝm7üÛBî!JúÁDqß;¬ñνÃIFîC+­ÿyŽ@’Õ7ì~÷žKƒ\€QQµÃÙcpÊŒJÎÆý`Bh,kD÷Ë.07†h¤Û®–‘û0œçŒ«/Pw`»d_kûý®Óû>0wöÜ¥5<ƒ gȸhNøY鯳zÖ<ƒ,öè“`ÁòmæÙ£×Ýä>ÎûpÑœ Ž@} õêlWï<9§l«y»žYÕv ÃvE rçÐü?y¥¹®ìš‘ójë[lW_ÐÆ›F®Æ¯ÈÑä>ä>ΡùAÝùÀHý‚ºÛÁ{ëÞÚyí¨§õ._þAc«ír.ä.¨nÇÅäm–µ¶ýÅvEðý`\ii§1ëœÒÑX¶]Â…ÜÇ©GP§ cC]ƒzÛåÀ35}:zÒróήYß`»„¹€^”WÔ™ë ²² ¦oàœaœÐÆF¨Æ©¹ä[#Wã×vE#r½P¿`>ER¡>Âv9ÈÈ¡öcæ“ß+†>ó¶†ÀÅ è{3 ­0W½ö¡íŠà úÁ˜©¨ÚaÎÞh´²%zAî£wš=Ô;\Ñs뱺 LE]'º®Øfö œ4ýî EïȤB3ÉÈï-5W ]Ç3Ûw²YäÑƆƣF¥ž§ä>zGî#šIÔG˜}‰ÕY°U„T×ì1;Çæ-«©Ûk»D¹€Ôi†¹jø“fÙ9ö/rÎ0Òèc@cpÜC/™!©±©j»"D¹Ô©›POažRÇ ~MÍŸyp•Þ¯AÃJy²$RG. ¯æ/«S¤Ã¦ÿ™s«9gQôƒ‘¦q§Ñ§1¨7Qã‘§Ã uä>úJ…ú 6ê5ÔqØ.p¸£ó±ÒYÙJýFÿj»"D ¹€4hž™øÈÚË®;û©Ä—o~¢rÓ.Û¡Ïè£K#npÞÙµ™Æ F"¹>!÷‘Ón¨×PÇA»*ݧN/]ý¾Ó°7·´]¢‡\@Ú4ç|ó®EæZµÜüE»ÛlW„> Œ¢¦æÏ4ÖÌ Óè#÷‘riÓœã\ލDˆíŠ’Î¹ WÑÀ½H¹€ ñQEDÑF‹ûCy8>”GÚÈ}dH}‡91Åv%íýãŸï™ú²³á½92A. sš…~1ïo·2•>÷[ÛáÒè#äÉ%[›v5ÖÈ}d‚ÜGæ4 93PW¢ÞÄvE â<$+»`Záz6÷CæÈx…­£…~0Ü›új|‘ûȹ¯hFR?¢®„Ǧ¢jÇÕ·>¥!µ]b‚\€·ÜB~÷…Zôƒ!§±sëwËyè'E‡–zu.¶Ë‰•¶ßÿÙkzmæÎžS¶õxçIÛ!nÈøDóÕôâ Y=kÚ+†—WÔÙ®_@?N)_úú,½5;Aä>2¬ `‘æ½’Å[äé ì?¤°hÁÛÌ„¡ ˜ŽíY ßÑq®—]ǼŽ|ŽvXAîÃ"Í{êzÔûè T¤nÈvEÖîè|¬t£â +»@¿Ñ¿Ú®ÉE.À:ÍY{Ùug?1œWZ¹i—íŠ~0H:ªulë×q®£Ü‡Eä>¬3­ú uCÉl…V®Ûî4ÅMÍŸÙ.IG. $w·™‹çõëæ1Ï%ùœa0胡#Ù\e.‘Òqn»"$¹Pä\*©þÈv9q.šÍ½€‹fäB¥rÓ®¼é >F ý ßÜ|ë¨æƒo„¹PQO¤Î( [©ìkmŸ4ýgS®ݶ+>G. l4CΜ[mn³ºü†¢ùËjmWOôƒ¾Òqkž¶©#YÇ3¹ð ÷6š!G-¨cRßd»"9ÝÐøðÌ*6ÐCØ 'Í–ÿñÀ lÃèúAŸ¼]Ûìlœ«c˜ÜGØû'Í–ê•tpÆìQìkÖ7\;êiý\£'-ÿ¨éSÛå@. ̶ïÜï<¦mÔ„çãwÎÐ"úAÏéøÔQêSS?¥®Êv9}Öv Ã|Ö©D˜S¶•u BŽ\@$h.^¼!ë¯ëíòŠ:ÛEý Wt4šó:>u”’û9r‘ ¹T”™]Õ[©Ã²]QJºNtÏ]ZcʾÿÑu\ׄH !îëñþåÛó¸/ôƒ™ÓhÎ`s=3"„ÜG„h^UWeN«Ï ùÞ\U›?6{¥¿{I}KD¹€È©­oùꈹfž?yeTΆ ý`&tÔéØ3¡ŽF“¶+REî#rÔ[©Ã2ÏìSÏe»œ hjþìÎûV¨Â«o}*9ÏRDl ˆ(g?ÿ¬ì‚ŸÏÙòs†!D?˜ó<s鲎@ž‡‚È!÷Qê³ÔméèUç¥þËv9Ÿ;Ô~lZáz…€œ¢_ÎÛ›mQ‘(ä¢K³î~þºyÞ÷•7–TTí°]Q”ЦAǘyB–Ž:{ä>¢ˆÜGtiÖUÏ¥ÎKý—º0»ôé>uzéê÷M(Ü3õåæ–ƒ‹2A. ê4ß2n‰¹rïùÏ6în³]Q4Ðö‰Ž«ÜüEæ0ÓñFî#ºÈ}Df`õ_æT°:2õeÁ×P]³Ç„‚þ¹åÝO‚/ð¹€xÐ1<8¯Ô,×Ç=ô¿$úÁîèÔe-cÌ–ˆ:rñ .ÌéÈÔö}ntаR[Ý(à-r±¡9¹dñ–9E:¤õOýžYºôƒ—Ä…X"÷æŠMõeÁ\±yäh×c¥«Uwtúúí€À ˆÍÏß}¸‚Os.‰~°wîOœuD‘ûˆ r1£ùÙÙÑEýšOwv;»ÙŒypUxv³.ﶯµýþG×é« Ì½pÅ6žl…¸"o<-îbèÏá~¢¥ŽrqEî#Þ4{«wS§ã\Ýœzº4¾ÈñΓ%‹·\Ñ Ϭj;Ðáy@x HÍäù“Wš+¿:bnm}‹íŠì£tèxÐQa'ä>âÜGh&W§C]=:;õw©ÿÝ5ë®õ´þî·ïyþ£¦Oý+ rɱ}çþ¯õÌðú5jÂóé3Œ úÁ3=×éH0‡„Ž !¶+|Gî#9ÔÍ©§Ó¯þ.Å?û½ËÌŸWWèwy@H HšòŠ:sIVvÁôâ }:g' ïõ¾ëÝ7ëxÐQa»" ä>’Æ|Þ×ûŸqž8ká;‰] ™È$æù©¿ÑﯽÀ²5õ¶+² Éý ÞqsN@Ç€Žr‰Bî#z™çÍý†f÷¹´ï7"\@b¹¯¼þŽg’v­`2ûA½Ëz¯¹fIFîŽ oÿÞÙtÛöÿµ]`¹€„{çwÿsÕð'Mƒp×/j?f»¢€$­Ô;«÷×¼ÑzÇõ¾Û®°ƒÜÎøù¼B rÈàŒëYý‡&äYÉéÍ3GôÎòÌà ¹Ä;ÜÑùãYofe È)z¬t£þÕvE€eä`(&>²Öyyå¦]¶+òWBúA½æ®½³zÉ}€ÜGbuŸ:½tõûƒ†•jŒÿaEsËAÛ¡@.nJ‡¼±eæªÂÜüE»ÛlWä—Ø÷ƒzïôš·Rï)¹ä>’©¦n¯ ý³ºfír€!€óUnÚ58¯Ô´qýP)Æý ù¨×¼}zcÿQ/Ð'ä>’É\üSöâ{ݧNÛ®r¸ åŬ…Îä•,Þ³‰e?¨÷Hï”Þ/s+¨ÞÁ˜½k@æÈ}$Ó´ÂõÉÙ2èrè…²cÜC/9›RÆé “øõƒzwœ­bõ®‘ûÀ‘û7r¸¤ÆÝmæùDúu˸%{ÿøgÛy Ný Þ½/Σ$c|×'9ràF.)ª¨Úavªì—]0eFå‘£]¶+ÊH<úA½ z/ôŽ˜CôÙ®;ràF.©ë:Ñý“ž‡™'Ù-^õ®íŠÒƒ~P¯¿yj¤Þ‘éÅ’ðÔH sä>À\úªí@Gþ䕿êÄkFΫ­o±]Q:"Ýê5×+oÞ½zGlWD¹p#€ô¸[’;&þ*r-IDûA½Îzµ£ÞŒ‘û7rÈDyEÝ—¾>˹dñxçIÛ¥*rý ^[½Âæb]½æzåmWD¹p#€ ¹·4ùßœ•-M¢ÕêUÕk›Í|‹È}€¹xb_kûˆñåÎ#¶ïÜo»¢KˆJ?¨WR¯§yaoýn¹^gÛÑFîÜÈÀCz$zøûA½zz Í‹©WU¯­íŠ€8 ÷nä๹KkäidõR8snu÷©Ó¶+º€0÷ƒzÅôºéÕS…z%Ÿ\²ÕvE@|û7rðÃáŽÎ‰¬½ìº³Ÿm Î+­Ü´ËvEç m?¨×J¯˜jÓ«§×P¯¤íŠ€X!÷näàŸ?|ò§ÜüEæŠGý¦¹å íŠþ&„ý ^÷ËÕÔü™íŠ€"÷näà·p~àª~0ü§±AîÜÈ ]'ºÝ7ÄÍ_Vk»¢õƒz5Ü·[êµ²]gä>À\ª 3ÃÐFh;V 6È}€¹Ìý@½‘ß[jëzvûAýÔúÙ#ô¸F 6È}€¹XQQµc`îl¾~ÙSfT9Úp¶úAý¤úyõSë»ëÐëp@‘û7r°åxçÉéŲz:£¿ÿƬòŠº ¿»•~P?£~R}_ýÔúÙõ ùÝœ!÷_D.vµè¸ýÞeæÊÉkFÎ{÷ƒ}Á|߀ûAý\úéÌyÛ„eú©ƒù¾ÎAîÜÈ jë[œv)òÊÚ¥ÀúAý,ú‰œ†W?©ßß@/È}€¹„dz+~wùÐbs9åOKÞòõÉ ôƒªÿg¥¿6ÄêçZ°|›ß @ŠÈ}€¹„Š{»•+o,ño»¿ûAU®ú-n˜à‚È}€¹„PsËÁ[Æ-1×XÞ0zAãî6Ï¿…ý ª½áßšâõSègñü[H¹p#€Ð:û¸ö[üz\»ý *T¦à¯|kŽê÷ð‹ð¹p#€0ë>uºdñ–9E§ý‡ê÷ú/ž|eoûASçß]_¨¯©j=¬€·È}€¹„ßáŽÎ{§­1Ÿ» Î+­Ü´+ó¯éa?¨zT•)o½¬j3ÿš|BîÜÈ *w·åæ/òê¾ñ‘µiïÛ™a?¨ï;iú+ªÁ샪ªÒû:FîÜÈ rºNtÏœ[ÝH¡y®ßüeµi|‘LúA}GóœDÕ J|}N"o‘û7rˆ¨‡ŽÞõÀ æZÍ«†?¹µnoŸþzzý ¾ËÕ·>e¾iþ䕪¡O€uä>À\"mûÎý×ßñŒiÐFMx~_k{б¯ý ¾²¾¾ùFúŽú¾é– À&ràF.1P^Q70w¶Ær¿ì‚i…ëwž¼ä_I½ÔWÓ×ÔWÖŸ×wÑ÷ò¢dvû7rˆumÓ‹7¤Þµ¥Øº;M}ýT:MaFîÜÈ NÜWu^wÛü^®ê¼d?¨¿›}ûü4®Dfä>À\â§¶¾Å½ëKÛŽóÿL/ý þ¼þ–ùëú:újþ— ä>À\âª÷§B\°ôäIŒܸ‘ @Œ9Ú5ù§¯:O_³¾Áù_ç÷ƒ¯¼¹ÓyÒý}?Y—ö“p#€Økn9x˸%æúÏÜüE»ÛÎ|±ÔÑ7@RÞvÉüBîÜÈ !6¼ýûÁy¥¦éûÏ­þżjýFÿüÞÔÕæ?êÿ¾±¹Év™üEîÜÈ 9ºO.Y¼e@N‘F}VÏ“)Ì?õ_ôßõmÀwä>À\’æPû±ãËÍg‚ú¥ßë¿Ø. @@È}€¹$Šû^Bç÷ ÉAîÜÈ !Žíš2£ÒÙkÔÜ6xÏÔ—=EõÙSˆ=ràF.Ià<‹0+»àçs6vèvöÕïõ_Ì„À\¦¶¾åš‘ó̵—wÞ·¢í@‡ßŧ~ÐPͪÜüúYôùñ]¤Ü¸‘ @xÙFùÚÁ4¶ú„ܸ‘ @™eý á÷…¯ú„ܸ‘ €uV¶a ¬<ãóÆ8ú„ܸ‘ €EÓd?høôà }BîÜÈÀ ëq¾4ô“êç5?¸^½$¹p#€€uŸ:]´àíþC 5ôä•,Þb¥ [ý QúÜoõ³«½ó£×ÄJ@‘û7rRå¦]ƒóJ5è.»îñ‰¬=ÜÑi«»ý èg×+ ×Aeè5Ñ+c« QÈ}€¹£¹åàÍcž3×Iææ/jÜÝf·ëý ¡×A¯†yYnúÎb½Jvëbܸ‘ €ßÜ„}ùæ'BòAXHúAC¯‰^™0|l Ĺp#_Í_V{ù Ÿß(7snu׉nÛ}.Tý è•Ñëcn«Ô+¦×ÍvE@<‘û7rð‰{#Í1® ÛFšaë ½Jcð¢ÅmWØ#÷näà¹}­í£&<ïÀ\À\Îá<á®ÿ™s«ãú„»÷ƒgzž©÷Nï`DŸ ø‡Ü¸‘ €£¶¾åê[Ÿ2WæO^Ùv ÃvE>Šw?hèÔûhÞP½³zmWØGîÜÈ@öµ¶šð¼i®»mþöûmWä»$ôƒ†ÞM½§æÍÕ»¬÷ÚvE€Mä>À\@Âï<9½xC¿ì „¹³Ë+êlWäôƒ†ÞY½¿ú‘õ^ë×ûn»"ÀràF. ÉÜ=´Âõ‰ê’Öžééýõ.'°÷ÜÈ}€¹€dÚ¾sÿõw<“äkØîkƒu $áÚ`Àܸ‘ Hš‡ŽÞõÀ ¦¸jø“[ëöڮȎÄöƒ†Þw½ûÎÞA:*lW„ܸ‘ HžAà–ð~ÐHȳE7ràF. !^ýu£óŒò‰¬ååôƒ†Ž:*ôjèÑqb»"À_ä>À\@ì5înËÍ_d® ¼eÜ’æ–ƒ¶+ úA7:6ÌA¢£Enj튿û7r1v¸£óÞikÌ"p^iå¦]¶+ úÁóéÑqb˜ ÿõ²ŽÛÞ#÷näb©ûÔé’Å[ä™[Ãô{ýÛE… ýà™#ÇÜdªã‡#ñCîÜÈÄOuÍž«nù|ëÈq½t¨ý˜íŠÂˆ~°:ftä˜Cè+ßš£#ÊvE€gÈ}€¹€8qßvÃèÜÖ úÁKÒñ££ˆ;O3ä>À\@<9Ú5eFe¿ì³KdEÕÛ…ý`Št,™iutécgZD¹p#Ï®øyŠ\VvÁOKÞâ)r© LŽ(WY=gt¤-X¾ÍvE@úÈ}€¹€H«­o¹fäÀ\@´TTí˜;›Í=2G?˜!÷F:&ÙÂQAîÜÈDÅöû¯¿ãsÞÈï-Ý×Ún»¢h£ô„ŽCæ°Ôñ©£ÔvEÀ%û7ráç~8øUßäáàž ôŽI™æÕ±ª#ÖvEÀE‘û@”õ œ*D¨‘ ³®Ý3çV÷R¨£t@NÑüeµ¶+ŠúAÏéøÔQªWUG¬Ž[ž{‚p"÷ ê¡âqnídzÞÔˆ{xfû!´È„Vå¦]ƒóJu|^vÝãY{¸£ÓvE±B?è¥:VuÄêµÕÑ«cØvEÀ¹È}„œú&uO:JÕIÙ®Åúqît¹Ó|NÙVN"„È„Ð>ùSnþ"sõ~ÓÜrÐvE1D?è±î¸©ù3ÛCî#´Ô+©c2»Æ©‡jmû‹íŠ^ ý ßø€áDî#œÔ%©WÒÁ©¾)®7Ü­zíëo}J?ãèIË9Uˆð s—Ö¸o¿ê>uÚvEqF?Ãî`Ÿ\²ÕvE¹ÐQg¤þèÿ³w?ÞYUùžçÿ‡®Ô¢íE3Ü帺z˜Nušž\m°•ºÒÎe•Ô.½éáº.KªŠËÅf-®·¤5üìÐ j:‚ äVZ*Fi•& !¨D$e‘ˆ„  ?0Ÿr×Ýu’P¤:HÕŽFUFùlмÿø½?^ež4çR!"àÊ…‹}ó쯿S^­#ðŸþéâMŸ¸Q¾P:¡ã\G»^yù:þós1þ ÷áœjÓtK¿ª&r=—T¯Ù|`ÔØß?l^õä¦|ÖÅpŽ\€«7íÿ'ÿz‘޽²òê§¾}¹÷ªëåõ +:ÚuÌ—}s%DgÎ×#B¾ûpHõŽªª€TqŸ¤q¾§÷™%ÛÌ}³sk¶Ó )#²=-ÿüÏ^0wÍýù_ý’íY]¡tKG¾Žs"èŒÐyázDÈ rN¨ÆQ¥£zGUÏÓ‹Þ¡ä¹U[ûéÉÓ7椯¼B. 5ZOúÉÀž ôAôòˆÎ. ä>Ò§êÆì³ z‡}§sÓì»1½¿p=ä¹€ô]éÿ¿½cnûÇc®Ú¸Ïõˆ@=è:/ÌíÓ:St¾¸BFî#MªhTט}Øß~ÿ7®‡“ JÚõ{M³isè?†¤‘ HÚ¦ÆOÌœF ¯Pz%Ú^Iç í•réP£ZÆÌiªn¸Ò5\gÎ]œ9¯Q/àc.ªý€N H¹€äþ¼ËÜó þí£¯ÿò+×#ÂQzHçˆÎsÊèÜÑäzD¹¤©rQýrÇ7·=¨¢áNøRj;5qê:½’£'¬¨oju=„‰\@Ø€ÛÔƒÞÒù¢³Æœ>:t6¹‚Bî#QªYT¹è{èñµªe\'öU}pÊ«¼ªˆ¹€xõ_»¾¨öƒï~¾Ž« –¬ÚE7i?QúLgÎAzt6éœâÉJÈåÞ«Këvó©+’@. F¿~÷³?Wc>×x|v=ݤ}F=è?Aõ·oN(Y:¿\! ÷;Õ&öI·%«vñ¤[rìS™#+óT&âB. ígM1ýS9i%Ï=ùz0+t6éœ2'—Î2k®G„l#÷#Ó Sµ 0ÓÔÒzÒvmmÜyÄõpyäJd>ÂøGÿâyÓCì¿þ·Ã®G„‚Pf˯ßýÌôéÕ¹¦3ŽßQ4rqQ%bwÊûð㮇“;ìꈸ (Å‹k÷˜}Ó¾ûýùó–ï྅ ¡Ì_:ËÌù:ïtö¹2‰ÜGéT}¨ѤzDU‰ëáä×…‹}Ï.{wDÅ‚²òêÙó›¸Tˆâ (ÎÿÏÿk[ þ觯9wÑõˆ0<Ôƒu®û’Î8Û¼Wg¢ë!cÈ}”B‡êUªAæÖlgOa´wœ2k‹ÎëQckÖl>@ÿ1 ¹€á:ÑÙ=á/_5ËÑùç/üô¤ë¡Ôƒ™¦óNgŸ9 u>òÌ Gî£8ª2Tk¨âÐñ£êƒg™}óþžvó°¹~ݵï˜ëá KÈîrïÕYÏ¿õòjÓØjõ¦ý®G„âQ`m}‹iã ³Rç&=ýPrEP}ak öö5;ŠC. @ªþìÊó©…o³òÌ:êÁ0èLÔùXÆUŒÜǰØ{ï¼g ÷"f¹îKöžÞç^ØÉ=½¹€!üôäÿ:aw¦†z0$Ñ»¸u¶r7Aî£@ª#TMØ^%ª2\ÃÐÖ~ÚHÔƒ¡²»ÀèüeÜŠÜÇàT5¨v`¯ó`(” 摟is¸Ë ·"p«MŸØ¯òÌåÎó QLçìÏ~þ¦Î_óÈÎh×#‚GÈ} D•‚êó0òò5Í\M I×™ž™óÍ›»´n7] E. êðç]¦˜þù·¾Bgª€QOç¯Îbs:ë¼ÖÙízDð¹[©:P`>BRÕÀÝæ¡:Ôvj|Õj½Ë£'¬hØö©ëáÀäŒó=½1s“Y:þɸš·ßÿë!YÔƒ9¡é]g´9µuŽëLw="8Fîã&ª FÓ5N•ÂG‡;]‰«oj5ïøÄ©ëT!ºÜ#Ðíú’U»FT,Б _õ{ºIçõ`~pŽ#ŠÜ‡¥Z@ù´H5‚ëá =—{¯Îé½;¾yØ|æ¼FšÇæ¹sÑÏñB~PæÍùž^ãö¦ýÜ"÷qã›-êÌÓdªTÐ( Ÿì£wÞ³¤vý^žÍ-r!·¢Ïýo“þož-ÊêÁ|âaû9§5¿Vþ¦kÜÔ§~E·I4ï?>î‘:ÓQvGóQ×ÃäB]¸Ø÷×·•Þƒ9G=˜gÑš øh WÈý<ÓjßìF§õ¿ª×ÃG64¼ë¾¥:6&OßÈŽ“yC.äMto²¿[º{r‹z0çØc4·Èý|Ò _ë|½õ£ÆÖhåïz8ðÑùžÞ¹5ÛGT,P4è7ôËr!?ö´tü³ñËÍ}b“~²nÒ9G=ˆßìH¥ÙÀL š4K¸GîçYäk…¯u>‹| ©½ã¬yØ|ÔØš5›Ð,È…<8ÑÙ=á/_5K¾ÿåÁ~zÒõˆàõ ,Í ¦÷¸þÑ\ÁóDa#÷óC+y­çµª77ò¼0 ·£ù¨yØœ[‹ó€\ÛåÞ«O-|ÛÜ6²rñêMû]¾ ÄM4?˜Ý¨5chÞÐìázDH¹Ÿ¶IˆVõ4 Aú¯]_ùÚ>ó°ù”Y[Žù•ë!)äBÀÖý}‹YÝ}§¼úožý5«;DQâVš%þÃso}ç® iq="ÄÜžÖíZ½ÛM¸ß¥8×}iöü¦²òj¶& ¹¤ƒŸžü—þwaÔƒHôsÍ$Üar?`Z«›MƵzמ=…—ßwMœºNSÇÝ,£/}xÈ…Àhòÿ?~úšYÈýÏ÷ÿgnÁ@¨1¸÷÷´k1“‰f–Á ÷C¥UºÖêzsµn?ÔvÊõp ÆGÌ~%ã«V·´r©0äB0L÷øï~þï»Çÿ«tÇà¨Q»CæÍ0ìPr?ݤ1\Ôƒ(Žf›Eµ˜G•5 i.bþÉr?Ó´Þ¦Í#|CcÛ¬#2gGóQÛôïÑopÒ¡8Ôƒ(…fÍ?´2Î"r?£Øž;ÑÙÍÆ—E.dÈñ/¿ºÿ±Wì¦`­mÿŸë!èQºÃŸwÙ­N5;iŽr=" ÜÏ­«µºÖ[oœÖÛœhðYóþãæaóÊI+¹T˜äB&\¸Ø÷7Ïþú;åÕæª ·ˆ tÔƒˆ‹f$³RÕ¥™Š-¢bþÑoè?æ3rÁg{Z:þùŸ½`îÅzø‰õt“FŒ¨;ÍQ“~²ÁLYš»4ƒ¹nƒÜ÷Ÿ]H—•W³F¦µµŸ¶—564t=ܹà'-«L1–UHõ ½¥yŒ Y¾!÷=§5³½ÑNki×Ãb°£ùhÅÄ—¹íÙ[ä‚o.÷^µ·]Ý1fáêMû]a¢D¢4wý“½ˆÝ=Dî{Ë6âÐÊ™FLß•~ÛiêS¿:ÑÙízDø#rÁ+›?ùþ”¶ Hõ ’m„¥™FXž ÷=¤µ±VȶQ¿VήG$â\÷¥™óÍGl›ârÁ?=mÛÎe$zéÐlöÀ_¬¶åh®s=¢¼#÷½b7òÖ›¢u2{ #µ2OEž°¢¾©Õõp@.¸Ç¶Îp‚ziÒ̦ùÍLtšñXô:DîûC+a­‡Í“¶Z!»ª†mŸšã|ÕêwºN®‘ õ_»þ_ØñÝïÏ×[0¢bAÍùï®G„¡Dúþó+»5×éÀÓ¼§ÙþùNû>ÐêWk`óùˆVÅ®‡¸q¹÷êÒºÝ#+›ÏÇé?æ ¹àʯßýìOÆý¾Ø?úÏÿÕßþ=ݤ‘2êA8¡¹N3žæ=~š5ºQîûniÅkžŸÒX+aZ-':»§Íi0'Åò5Ír!}ígÿôG+Í}S•“Vþ¼ËõˆGÔƒp¨­ý´f?3 j>Ô¬èzD9BU®Öºæ£­~iDµ´ž¼ÿ±WLÝÆG\'_È…4E/ŒÿOÿæ?qaQÂ9n“p‚ÜwBë[³ÿšV¼Z÷ºà© ï~`™Î”‡ŸXÏþ›©!RóâÚ=öÁ™yËwði8Ü¢„4j>´Qkžt=¢ð‘û)ÓšV+[½æZåj­ëz8€ï.\ì{î…J„²òêÙó›è?–r!ÑÆzüõëØðõ üA›å4‘û©Ñ­Õ¬Ö´ZÙj}ËVk@áÚ;ÎN™µÅlʹfóú%Š\HÔ‰Îî?û?×°ñ£¤Õ&Ï(>³ÏöÞyÏží-¹Pv˜Ex¨ sç†ægîÜ(¹_8ÓÃÐÜDC CöüÂöþ}ûý߸ŽïÈ…Á±Ã,BE=ˆÀh~¶OvkÞæÉîûÒÒîq¦µ¥ëá6ö-¹0Ž"ŒzAÒ\­›Îσ ÷‡ÄQã|O¯ýdçéEïðÉÎm‘ ·Å³õ fw†ÕL®ùÜõpüBîBkE­í§Ì,0´wœ­zrO~ „\¸ ;Ì"'¨6óä—fržüº ¹[ѧPµnä)T <ÑÎÍû»ŽGÈ‹f‘+ԃȃhgHÍðt†¼AîߎV†t©ò ÿÚõº×?d縛 ;Ì"o¨‘šÕ5·³sœAîGEw±Ô*‘»È€<8×}Éö›ÿÒ{ô#ØaùD=ˆ¼±×ý4ççùº¹oh¨u í®õ¡ëHU[ûé‰S×Ñ9êF¾sf‘gÔƒÈ!Íóšísþ\@žsß²ýõ¤8g¶ÿØøªÕ-­']Ç|æ;ÌÔƒÈ-Û7L)þaùÌ}Kë=­úèÀR ,­Ûmûuv}ízDiËa.°Ã,pƒz¹§ùßî+¤\p=œôä0÷ ­ñlÿp­ýòvÀàì}ƒfŠÈÕ}ƒ¹Êv˜,êAàFä¾A¥CNîÌUîZ×Ù‹ÿ¹½O@!ì-£'¬Øºý3×ÃIINrf›P†A¹`úŠ()‚ˆœä¾¥é#”燃 K}Së÷~°Ü÷-­âLó@­ëè`XL bÓlÖóo…Ý‚8ì\`‡Y` ÔƒÀ­”65” ®‡“ˆ°sßÐÊMë7Ó?œÍÅíDg÷ã³ëƒï?j.°Ã,08êAà¶”J Ó€Z9Þ]%¡æ¾í®UýÔ®yÿqÓlÌkƒü€)¼\`‡Y ÔƒÀ ”JóÔy`0…—û–ÖiZ­™þá¡~¼ À•_Ö·˜ÐÂë?X.°Ã,P êA`HÊóZH]©Ë}Ãö×jMk6×Ã&Û,°•Áä;ÌÃB=H™bv­ £Ae0¹o„º<à­ßû½µfó×ÉA¹À³@¨Â)YìvJåŽë/€Ü·lÿp­Í´Bs=9bûpƒz¦sf¢QÃ¥”QÖØËÊ ×#*F¦sß²íèÀ•h«)³¶d·UvsfRPű'(ƒ”D®‡3lÙÍ}C+.Û?<àöï²ÂôËô7YÌv˜JG=”Bé£ 2íË”J®‡3 YÌ}#º=4ýÃxÅ–'w?°,såI¶rf¸P%Š–'ʦ¬”'ÙÊ}Kë+Û?<[8€ühÜy$‹·/f%Øaˆõ  å‘R)C·/f%÷­è ºôà¹h{“¿Øš‰ö&™Èv˜bG=Äȶ7QZyÞÞ$¹oh¥ÕTÖøÈ!M_Ñí<Ÿ¾<Ïv˜B=ÄN9e·?P~¹ÎíyžûFô»ÖT™¸À7ÉÊöèÞæ;̉¢’àxy›û–VMZ;eo~l>üy—ëá܆Ÿ¹À³@Ò¨ä(¹ìÍ-J4×Ãù?sßÐJÉ6èÓ Êõp ¶ÿXYyµ‡í‘}Ëv˜ÒA=$M)¦,óíáwßrß0xi¥Dÿp¡jï8k·O]ùÚ¾þk×]èüÉv˜ÒD=¤ Ú[çCslrßЊHë"ûi½äzD æýÇïýñ*¯>üò!ØaHõ óá—'›çúû–ýU«#>B€Dõ_»nŽ{tÆίƒ9Ïv˜œ R¦Œ³Ç)û\ ÃyîZÿhd±ôç¾)HÇùžÞg–l++¯vÞÌa.°Ã,àõ à„òN©ç°y¦ózж`Õ*Hk![°@jìæzwÝ·tCÃA'cp’ ì0 8G=¸Ý\Oi˜òæznëA­v´æñ|‹FH™æd³ÏŽ“þc)ç;Ìž ÜR*Ó¿4ꪴýõæq~·*ø&ÚLéfÿ±4sfP>°N(Óyt"ýzP«SùÒ?wæÜÅ™ómÿ±t.¦“ mí§Ùað õ à%£m­vøó®D¿Wšõ V2¶¸V8Zç¤ðM ëlÿ±ÑV¤Ð,é\`‡YÀOÔƒ€WìÖKJÌD·^J­ÔÆtΡ8Á΢ã«V':‹&— ý×®×½þ!;Ì~¢<¤¬Tbš[+W¾¶/‰]R¨µn±ýÃî¬YgZ¯Ø»,j½’P.°Ã,à9êAÀ[ÊM¥§ÎP%©ò4Þ/žh=¨µŠ}ò…þá ûöÈÊÅ/®ÝûSرçB{ÇÙª'7±Ã,à9êAÀgJOe¨’Tçé£3Þˆñ›„êA­O´J±ýÃÓìŒyÐÒzÒviŽ·ÿXŒ¹À³@†PþS’*O•ªÊV%l,ÁšD=hû‡k­BÿpHΆ†ƒ¦ÿØ~úZ\»¸Æ• vlì0 dõ JUe«NØ»î[ª´-ñ«Å[jlZ“˜þᥠ0¤ ûž]ö®ù .–þc¥çÂÞƒ_°Ã,9Ôƒ@¶(aígp¥<˜W=hû‡kM¢• ýà M¶ÿXéÏè•’ ì0 dõ 9ÊY¥­iÜ]ô3z¥×ƒÑg齿§ÝôðÔ¯ú}q_¤¸\¸Ü{uQíì0 dõ QÊ\ÛÃsþKï ·‡g‰õ`,k@\J¿FWD.°Ã,êA Ó”¿Já"öø+ºŒñÞ$@¼J¹‡X¹ ôypÊ«ì0 €z€½B;¾juWh‹¨cï]HBq=¾ Ìv˜C=„A‰¬\¶Op(¯ÿóí“èmHÎp÷2ÌÓëì0 †z‰íð¦¼~qížA:¼^&·÷1 QJeAÜà¹À³@¨¨ðRÁR^]¼Uàžå‚Ýý–f Q¡üÏÁëÁáÞ} ðÜ¡¶Sã«VÒæÖ\8ßÓ˳@𨀠Òfz°ˆî4€Ld‡ˆh.°Ã,Ôƒ@ðn»CÄmëÁ¢w¯dÅåÞ«ó_zïÖäm.ìÚwŒfü râ¦äoªKÜÝ-ö ñ;ïYR»~oß•~“ fWAv˜òƒzÈèý?&ñ•þ¦¸Öô€¼iÞÜôûþÿþÒC¯Õo¾Ã³@ÎPy£”WÖ+ñuîÿ»¿\«5€é®Uë¡øë¿ÛjBAÿ,ªeMä õ O _~ßD¿ÖZ ¸À–Ö“÷?öŠù|ðÿ~ …g–l;ßÓëzhRB=äR^Yo.+ýíçƒì/ ùqë³æùÁþb5ϹB=äGôùA“øæùA­´àùAȳì™ö£;ÌÚ>c;ššþc÷þxÁ£rB™®d7ýE•õ7õÕzÀöÕ:þ¢¤†mŸ´ÃìMû®|mŸi5Æþƒ@بàÙý•ìÊ÷Á÷Ô ý  |½µR)™ÂwL3÷ ­j´¶Iô&XÈ´¸v˜-Nʹm’3s^#ýÇW¨·”€ÊÁô[¯¤_¶IŽÖ<±7É€Œjï8ã³Åq’ ]_O›Ó`CK…@ú¨W”zÑ­”‰i~wWõ ¡ÕŽÝDã·Ç~çd à¶nw˜ ö&™Š‰/Ó Hõ à„ó­ÛÝÖƒ7|Z€+&±Ãlqœç‚^ ÛÌù«äõ 2eœí®ìs5 ç¹oèÕ°·Hý²¾Åí` 5‰î0[rÁôQ± ¬¼šþc@:¨ÔØþáJ:ç[/ùû–ÖBZ¹j¡i:ÑÙ=õ©_yØ\ËŸ\hï8kûÕ½þaÿµë®G„ŒzH²L‰fû‡+é\È£Ü7´"²-ÖŸ]Ÿf‹uHGj;ÌÇ·\hÞÜt[¥ÿ(êA i¶¸~õçÃ/ßrßÐêHk$ ,Í-˜ õM­fǽv˜-އ¹Ðíºí?Võä&®¦á¡’£äR~Ùþá^Ýñâaî[Z)™G,¿÷ƒåZA¹”ä£Ã)ï0[osá|OïÓ‹Þ1O[Ð ˆõ Û³éÜ·´ú²+1­Ê\@ŽØ«Rî0[œrÁ>Ë?²rq&žå|@=Îô4³ýÃ3ÝÓ,€Ü7ÌZZéÇ©zrSvïÔ.öy¾Ãlq‚É…?>a{}Ó õ P Û?\)£¬q=œR“û†ÖcZ•™NZ§³<à›Lì0[œÀr!àw ˆõ 0$åˆÒ$£ýÃXîA¾S<ýÔÉóf‹^.D?É=¿‰K…ÀmQƒPvØþáÊ”,öHx¹oif?ÉÝ{ð ×Ãy™Ûa¶8¡æBxOzñ¢n+úTZ¦û‡$ÔÜ7Ì“ž¦ý{ÖŸôàP®ºV† ÑN°»ös=À#ÔƒÀ­”Áw­ ;÷h'ØEµd´,W²»Ãlq‚Ï…`vŠâE=DEwµ û®’àsßÒ*Nk¹ìî }ùœ7r’ çº/Ù'Až{agHO‚Å¡ %‚rÁ>u®¼p=¢då$÷-{ÿÁ)¯æá:?€â„±Ãlqr• mí§~b=ýÇ€ÔƒÀ7lWj¥CNºRç*÷\=`¸xî8‡¹`w’ºÿ±WZZOºàõ rNó¿R ‡»Öæ0÷ Û'pdåâ€û–h_âv˜-N>sA)°|M³!·×êAäV´.Pä­.Ègî[Ñ}ÄruÀMØ·ÔÊs.Øû„µ$XZ·;W÷ ÔƒÈ!ÍóšíÍÅÀÜÞ7˜çÜ·ì}ÂZ æä>aÖùžÞ§½ä³Å!>:Ü9¾jµé#Ô°íS×ÃRB=ˆ¼Ùºý3ÓWDs¾f~×Ãq†Ü7´Ô:ÐöÒúÐõˆ$.øf‹C.¶ÿØÄ©ëè?†< D~hV×Üž·þá!÷£ì>#Z†½Ï€æýǃßa¶8ä‚uábßü—Þ³ýÇ‚o9Žœ£Dh&Ÿõü[¦¸fxn ºAîߎV†v•¸kß1×óüì0[rá&':»§>õ+sÀÐ £DØ¢ýÃ5«Ó7Ì"÷oËÜEfî"‚a>îÉϳÅ!n«yÿqÛŒ”$êALóö˜ÖšþášÏ]Ç/äþ ´VÔŠÑt™xî…|  dZw˜-¹0EæSú!<Ôƒ’í®Ù;çýÃBîIG‘Vt¡²«¥õ¤iÉÎ2… w¾§×öÓoè?†`P"0vº6ýÙ®BîHkH³Kõý½¢µ¥ëá(Hg××yÞa¶8äB!Ú;ÎÚ Î<…Š0P"$¶¸æjžü¹_8­$µž4Vj…ÉS¨€ÏØa¶häBálÿ1HA¨û¸7ýà Dî—V•Z[š´ÚÔšÓõˆÜŒfKA. Kÿµë¶aÝ”Y[Žù•ëE¢DÖèì¶ýÃ53sçFÈýâh…iGÒš³aÛ§®‡àØa¶täBlÿ16´BvQ"»ìv±ô/¹_ ­6ÍgZjêz8@®±Ãl\È…¢ÙËw?°lSã'®‡ õ 2J rÓ?œyqÈýÙËæ%.Géc‡Ùx‘ %jÜy¤ü¡ÍíÊôC†P"slÿpͺô/¹ ­?µ µ·+ÓÃH ;ÌÆŽ\(]´ÑÏ~þ&íŒ ÔƒÈÍ«3~±•†± ÷cdÛUL|™vF@ÒØa6!äB\´\Q1ÈrYA=ˆLà‚[ìÈýØi]j·;ÑzÕõp€±Ãl¢È…xq;²‚zþ³‚sC~ŒÈý$ØÅjYy5‹U ^ì0›4r! ›?¡Ý:ã ¹J ¹Ÿ2­iíðZëºà)Z2:D.¤Éô++¯¦Y.œ£„s´dt‚ÜwBë[­ri– ÜŠf#ÒÇfšðõ ÜÒìw×}KÙ²-}ä¾+ÑÍ4µúe3M€f=A.¸²£ù¨ÙW‹‡eàõ \±Tkä‘êô‘ûniÅ«u/…ì0ërÁ¡¾+ý¶ÿØÔ§~u¢³Ûõˆ#ÔƒHŸf¹islËeÍ®G”Gä¾ì£RZó¨ò†f}C.8w®ûÒÌyzè?†4Q"M—{¯šþá:ê4ãÑ?Ü!rßZ ÛVŠZ!»8šîú‰\ð„í?6z ú!ÔƒHæ4Ílô÷¹ï¶ZCN°Ã¬Ïȯ4lûÔ¬šÆW­þèp§ëá dÔƒHª?sSœf6Ío®‡ƒß#÷=¤µ±VÈæVj­™Ùua‡YÏ‘ ¾‰¶Zš9¯‘VKHõ ¥¹ËÜ OÓ ßûÞ²­–´r¦ÕÂÀ³™@.øÉv]ÐRjùšfº. vÔƒHˆæ«×î1µ4Ñ)Ë7ä¾Ï´ZÖšY+g½GZEk-ízD@‘¢;Ì>³d;ÌúŒ\ðYKëÉû{…þcHõ ’`û‡kŸÈ}ÿ™…´VÑZKë7,¤‘9ì0›-ä‚ÿtN™þc?±žs q¡D¼4;ý觯™þášµ\"÷³Bç”ÖÒz³´®æœBVDw˜ežÉ r!.\ì{î…æ3wú!Ôƒˆ‹í®9J3ýÃ=GîgËŽæ£æ3wqÀsì0›]äB†´wœµýÇx&%¢Dé¢Ï:ivâY§L ÷3Gëj­®M£~žÉ…‡nÚaö̹‹®G„á!2g×¾c¦g/ýÇP êA”èý=ív.Ò¼äz8(¹ŸQçº/™ž½f#ozöÂì0r!‹¸&ÒQ¢hö^ú‡g¹ŸiZokÕmöôÔ:ÜõpkÑf93\È®ó=½ö™¹5ÛyfÃB=ˆ"hžyvÙ»öYfÚf¹€†mŸšOd´ç¤Ïî0{ǘ…ì0r!ëlÿ1zúaX¨1\¶×1ýÃ3܃VàZ‡›>µ2×úÜõˆ ì0$r! vϯqÔ}øñ ×ÃAP¢p-­'mÿpöBÍ:r?$¶££ÖçZ¥ÓÑ‰Š®6Ùa6$äB0Lÿ1®Ø @Ôƒ(DtµIÿð0ûáÑÊüþÇ^አ’óa#½£{ɪ]ÜÑPbpæn4Û?œ»Ñ‚Aî‡ÊÞÑ­u;wt#.ÑfŸ]ö.Ý*‚D.éPÛ©§¼JÇ' ‚zƒ°ýÃ5“Э"0ä~À´Vî…¶ã“Vò®G„ £›}~ ³+º‡_ËŠ7¡ÄmÑÍ>xä~ðØ¥‹î0«ß»’E.„írïÕEµpÇnE=ˆ›œ9wÑÞm®yƒ»ÍCEîçÄ®}ÇXÏ£\OÈ!r!lGˆ;ïYBGÔƒ°L7*Ít£Êr??¸ßÃrÓ³ÜoœäB~ì=ø…íÿöû¿q=8F=Có¿í®YÂõp8r?oÎ÷ôÒC¢Qž‘ yÃŽÒ0¨¡@óýÃó†ÜÏ'Îw „fA.äÐùžÞ¹5ÛÍýO/zGÿêzDp€z0ÏtÖ?³d›ù¼@³“@®ûyÆ~∊î0ûâÚ=EŸ'Ò ÀóD9Dîçœy^XëžÎ3v˜E¹s;šÚþcÍû»ÒC=˜C:Çïýñ*s¾ëÜw=¸AîC´þ·ý„UÐO8Wì~dã«V³n øæó‚º×?4­é?–Ôƒ¹bû‡ëL×ùÎýyFîÃR-ðà”WÙo4?Øa·E.À8×}Éö›ÿÒ{ô õ`Nè\Ö}ǘ…ô‡Aîã&öÓ"U |Zªè³ >F¹€¨¶öÓæÂýÇ‚G=˜ßüØôÖyM?aä>n¥ê`Qíöi2Õ®G„ذÃ,†D.àV¶ÿØøªÕô õ`Øtæêü¥8nEîc ¶Û¤jUt› @t‡YÚD` änK)°´n·í?ÖÙõµë!fÔƒ¡ê:Ócû‡ë,fE‡›ûÜÞƒ_ØÝè8N²Ëî8y×}K¹ã ƒ#0ÛÌ,,¹Û<$Ôƒá1ýÃÍeú‡c ä> ¡ ÂÜm®š‚»Í³…f1\ä†do<=aÅÖퟹâA=˜ÆGlÿpnóÆ È}Hu„ª Õª,T_PVø/ºÃì£3Þ c< D. @õM­ßûÁrúƒz0¶¸ÎPú‡cHä>†E5EÕ“›t̨ÊP­Án5Þb‡Y\@álãz3³ž‹Æõ™F=³MŒíÎ61(¹"¨¾P•¡#GmI|Ýavåkû¨Ù1\ä†ëDg÷ã³ëé?–uÔƒ™í®ó‘þá(¹â¨Ê¨{ýC3í¨úà^D°Ã,bA. 8Íû›þcc~XËm YD=˜]öB=ýÃQr¥0·%¨úà¶ç¢;Ìþ¼ËõpaäJñËúóØ2ýÇ2‡z0‹~{ìw¦¸Î;}®‡ƒL"÷Q:%¾ylYõˆª×ÃÉv˜E¼È”Èö£­q¶Pf 'âBî#.ªDÌ^ç´5NÍM;̲bA. Ñ-Öl>àz8õ`†D?ˆ×¹æz8È6r1ê»Òo·=U¶§É‰î0;ã[y©#r1ⱦ ¡Ìû .ýÃr±Sm2s^#Z%‡f‘(rñж=œ2k m½E=è9ù"!ä>bjSåÂCmq±;ÌÞýÀ2v˜EBÈ$mÑüG=è­èFŸôGìÈ}$J5Ë÷~°Ü4½T-ãz8ÆR ©!.jùŒzÐO,¥4rIã¢V‰¸Õ )#4nz÷õ o¸Õ é ÷‘nz/­>r) )–‡¨ýA+¤‰ÜGšhŠU8ZµÃr©aÓ¯Pú€VíH¹ô±iÎàØan‘ H™½)®bâËÜçõ slå 'È}8AÉ3h±ÜÖ~ÚõpGäœØøæÇw?°Ì4Í8üy—ëáäõ CJ|ÛjIç‚ëá _È}8½%Ruëá8fo¦óÃZn¦…Cä\±ýÇÊÊ«é?–>êA'Lÿpóô‡+ä>œ£e Ívàrnµwœ2k‹™W¾¶¯ÿÚu×#Ê êÁ”騮{ýCÛ?\G¾ë!§È}ø º¥‚*£ül©ÝŒcÖóoq1> àƒæýÇïýñ*ú¥‰z0Möb¸Žó|^ ‡?È}ø#o[®³Ã,üD.Àý×®¯Ù|À2A5½7t ðß™sͽ÷¦ÿ÷ÞÇ‚z0F:&Õ~`ú‡ëXÕëzDÀ€È}@¹€¬°ýÇFOXjÿ±4QÆEG£é@ÿpd¹ˆ"-ví=¾j5kïRP–NGàƒS^å²…ÜD‘ ÈÓÌÞ›Fÿ±ôQ–Âö×qHÿpd ¹ˆ"Q¶wÇÈÊÅ/®ÝCïŽá¢,ŽéqdÚ¡ÓãYDî¢ÈdZKëIÛÛ¿qç×ÃÉêÁ"è³{ Ð?Eî¢ÈÀîýý£Ÿ¾ÆÞߢW“§oÔ+¦#MÇ›ëáÅ#÷QäÂpábß³ËÞQ± ¬¼zöü&6-õ`Î÷ôêˆÒq¥£KǘŽ4×#JBî¢È„¤½ãì”Y[tH[³fóþk×]È_ÔƒCÒñ££HÇ’^(W:º\ˆ¹ˆ"ž÷÷´WNZ©[¿îÚwÌõp Š\@ðÚÚOÿ觯Ñò&Ôƒ7¡K-r‚ÜD‘ È »sÜý½ÂÎq7¨#t<è¨`K么"}Wú_\»gdåbóÓæ4œèìv="—¨EÇ€Ž½:*tlèq=" qä> Š\@Þté™9¯Ñ”Këv_î½êzDnä¼Ôû®wß\Ðñ £Âõˆ€”û€(rùt¨íÔøªÕ:øGOXѰíS×Ãq Ïõ Þq½ïúñu èHp= Uä> Š\@žÕ7µšº`âÔuy« òYê]Ö{m®èÝw=ÀrE. ç.÷^ÿÒ{wŒYhîÌÏy«õΚû„õ^ëÏí}¹ˆ"€‘¾"wÞ³¤výÞ<ôÉO=¨wSï©ÞYú7È}À·‘ €Õ¼ÿø¸Gê̾;šºN²rRê}4ûŒèÕûëz8€{ä> Š\n²¡áà]÷-Õy1yúÆ€÷%¾Ô{§wP?㨱5zO]ð¹ˆ"€[ïé[³}DÅ‚²òjýFÿêzDñ ¸4oŸÞ;½ƒ¡¾}@ÑÈ}@¹ ¤½ãì£3Þ00­Ù| ÿÚu×#ŠSõ Þ#½Sz¿ÌÇ»z]ð¹ˆ"€Áíh>Z9iex …WÚÇ?õ~ÿø'P4rE.Cê¿v}åkûLƒÊ)³¶ÿò+×#ŠAHõ Þ½/¶=l`Ÿäñ"÷QäP sÝ—fÏo*+¯6Ø]¸ØçzD% £Ô»`¶Ôû¢w'?ÛGE#÷Qä0,‡?ïš8uΚ»X¶©ñ×Ã)^õ ^½ ú)ôŽj;åz8@6û€(r(BãÎ#fW»ñU«[ZOºN12]ê5×+¯ñ—?ô¢Þ ×ò„ÜD‘ @q.÷^]Z·{dåbA?ûù›]gz\hx2ZêuÖ«­‘ë•×ë¯wÁõˆ€Œ!÷QäP •'3~±5‹åIæêÁ¬à€'È}@¹”.‹·/f«Ô«ª×6Ó7èž ÷Qä—ú¦Ö µ7ÉJ=¨W2Œ>€'È}@¹Ä(CÛø_¶Áà rE.±;ÑÙíÿöè>׃zÅôºéÕÓõJÿò+×#ÂAî¢È !Íû{¤NçW夕;šºÎͼ­õZéÓØôêé5t= 4ä> Š\µfóQckt–Mž¾±½ã¬ëáü‘‡õ ^½J•^1½n~~® d¹ˆ"€¤ïé[³}DÅý£ßè_]è÷¼ªíKTV^íÏK‰ÜD‘ @:ÚÚOÛ¿64t=êA½ö#T½J®‡ŽÜD‘ @šv4óÃZŽó¡´XVL|ÙÃG, ‘û€(rHYß•~ÛM相¹ˆ"\´n÷ÈÊÅæ.Ê®3=IÇÔêAý,ú‰ô½ôÓégÔOšôw0rE.þèìúzÚœS:-_Óœh—•êA_?…)rõs¹êœ ŠÜD‘ €oZZOš[++&¾Ü¸óHBß%ézP#×øõ-îìýD }ÃEî¢ÈÀOÞýÀ2ž?±>‰]Ú“«5ZY_\ã×Oû×P rE.Þ2[3Œ¨XPV^={~S¼[3$Qj„§F«1?÷ÂÎô7Ñ0$rE.žkï8;eÖ³uûšÍú¯]åËÆ[jT›F¨¯©Ñj̱|Y±#÷Qä ÍûWNZ©³U¿îh>ZúŒ±ÔxìØví;VúrE.Ya>ƒ5¶&–Ïàb©íg—UŒŸ]H¹ˆ"€l9ßÓûô¢wÌ3zsk¶ýŒ^‰õ ¾¯¾»}¶Q£*îëH¹ˆ"€,jk?=yúÆRzx–RÚÞ§C½O$‡ÜD‘ @v½ýþoÌã©ûðãÃú»ÅÕƒú.ú^Iï 9ä> Š\2­ïJíú½¦±ç´9 ':» ü‹Ã­õ•õõõWFV.ÖwÔ÷-vÈ\"÷Q䀮3=3ç5ê\¾cÌÂ%«v]î½:ä_)¼ÔWÓ×ÔWÖŸ×wÑ÷ŠcÈÜ ÷QäŒCm§z|­ÎèÑVÔ7µþ‡ ¬õuôÕô'œòª¾~|ƒà¹ˆ"€ÀØ Nµá Üõà°ªKYAî¢È <…Üá9H=½ûtQí…Ü} +È}@¹„Êv€¹óž%·v€¹m=XtwYAî¢È lÑ"Þ~ÿ7ö¿ßZFw¯Ø{ð ƒ8rE.ypëòÑz°ôÝíd¹ˆ"€œ¸p±onÍö ÊÊ«Ÿ^ôÎ|a‡Î}ýªßë¿è¿ëÿžïéu=LÉ"÷Qä+íg§ÌÚbzÅØ_«žÜ¤ÿîzhÒ@î¢È ‡^\»ç»ßŸ¯s_¿ê÷®‡ =ä> Š\rÅ~>øÿÕ‚ßÿúÍçƒú/|>么"€œ¸p±oþKï™çgÏoš·ü÷ÏêWýÞ Š\ÂÖÒzr|Õj³ÿ`ãÎ#ö¿ßºÿ þ¯ÙP^ËÅ`$ŽÜD‘ @¨:»¾ž6§A'øÈÊÅKëv÷]éþß[ëAÑŸY¾¦Y^ÿKW_!Ý!H¹ˆ"€ð\Дu3ç5vé¹õÏܶ4ôçõ·l!©¯–ü¤„ÜD‘ @`¶nÿlô„CÞö9H=h|t¸ÓÜhª¯¦¯™Ì`¤ÜD‘ @0µš8uÎèïý`y}SëàxÈzÐÐ×1Õ¥¾²¾~|ƒà¹ˆ"€œë¾4ëù·t.ß1faÛFXÞø‡*îøf§B}}¯8† À rE.™Öw¥¿výÞ;ïY¢ùñÙõ':» ü‹…׃†¾òÔ§~¥¿¢ï¥ïxSwYAî¢È »v4óÃZÂã©kÞ|Xw¸õ ¡ï¢ï¥¿¨ï«ï>¬¿ Àä> Š\²¨­ýôäéuòŽ[óËú–"¾Bqõ ±¡á ¾¯þºÆ`v·ä> Š\²å|OïÜší#*èýFÿZÜ×)¥ŒqRFî¢È CÖl>`?˜ûí±ß•ò¥J¬ö޳öcJ­”/ ä> Š\2Á>¸W9ie,îÅRFUÜcŒRFî¢ÈÀs':»§ÌÚ{cÏëAé¿vݶ9Õh os eä> Š\¼Ýøoöü¦x7þ‹·44B³¬¼ºðm¤ŒÜD‘ €Ÿê›Zï~`™NωS×j;û×O¢44ZY_\ã×Oû×P rE.¾ii=9¾jµNÌÑV4î<’ÐwI®44òò‡^Ô·ÐÏ¢Ÿ(¡ï`¸È}@¹ø£ëLÏŒ_lÕ)9²rñҺݗ{¯&÷½’®Eã×O¡ŸEßH?—~ºä¾€‘û€(rðA´tš6§!…Ò)…zÐÐÏò³Ÿ¿™N‘ `Hä> Š\œkÜy¤bâË)ßZ™Z=hØ›`õ“&w,€!‘û€(rpèðç]¶õÊÆ7?Nó[§\›?±Mrô³§ù­ä> Š\œp¾5ƒ“zðFd ýì±o¢`Hä> Š\RÖíúÊ×öÙ­ÛÛ;Î:†«zÐ8þåWúÙ5½z5ôš8Cä> Š\Ò´£ùh夕:éîýñªæýÇŽÄm=hè÷H†¡×D¯ŒÃ‘ùAî¢È ígñ†N·QckÖl>àü1êÁß|ZªWC¯‰£×ÇÕ§¥@~û€(rHÚùžÞ¹5ÛGT,(+¯~fÉ6ý«ëýž'õ a^"½>z•ôO^" Hä> Š\µ¡áà]÷-ÕY6yúƶöÓ®‡óG^Õƒ†^½J•^1½n®‡„‰ÜD‘ @BìÃq_öðó°4v45»1êÕsûˆ%$rE.±;ÑÙ=mNƒižY»~oß•~×#º oëAÑ+¦×Í´`Õ+©×Óõˆ€pû€(rˆÑåÞ«fs=V3ç5ž9wÑõˆäs=hœë¾¤×Pƒ4[4êµu=" ä> Š\âRßÔ:z P§®;ÔvÊõp†à=hè•Ôë©¡êµÕ+ìz8@æ‘û€(r(j–ñU«³U³d¥4¶}jjm½Îþ×Ú€ÏÈ}@¹”¢ëL½§qiÝî ÝÓ˜­zðÆ7÷âêY¹ØÜ‹«WÞõˆ€L"÷QäPœ¾+ý/®ÝcÊ“,ö<É\=hØ^=zåõúûÙ«ð¹ˆ"€"4î Š\@ðì¾äwÝ·”}É-êÁ›èØÐ¢×DG‹Ž×Ã’Bî¢Èì|Oï3K¶••W¨X0·f»þÕõˆêz8ž¢œŽ?z‰t,ñÀ)BBî¢È„¤½ãì”Y[L»È•¯íã“APIÇŽ"ÓVÇŸ2# ä> Š\@.\ì3ÛÉ••WÏžßt®û’ëùŽz°@:–tDé¸2VêHs=" $ä> Š\@6¾ùñÝ,Ó‘ Š\@¦µ´ž_µÚì׸óˆëád õ`tŒ™],uÔéØs= ä> Š\@Fué™6§AGïÈÊÅKëv_î½êzDC=Xi:ÞtÔéÕÓ¨ãÐõˆ€á!÷Qä2'º Ÿñ‹­,È‹C=X u:ö¸,"÷Qä²¥qç‘ÑVpÃ^é¨KgoWÖ1ÉíÊÈ rE. +µ² =ê›Z]'ó¨㢣Ѷ3ÒQêz8ÀÈ}@ÔùžÞwêW×dþkCÃÿQÆÈnw¢—”íNà9rdEß•þÚõ{í†à':»](Ôƒ±Óñ©£T¯ªŽX·:z]ȪÍG+'­ÔêzÜ#uÍû»Nh¨¢cUG¬^[½:†]ȘßûÝäéµ¢5¶fÍæ®‡&êÁDé¸ÕÑ«WXG²Žg×Ã2à|OïÜší#*èý†'\’C=˜4f p¿¬o±©´µŸv=œÀQ¦CG²ý°[G¸ëáÞ±\ùa-\¥ƒz0M:ªuló0,u¢³ûñÙõ´dLõ`Ê¢ÍruÌÓ,yݲmÖóo±e[ʨÐq®£Í4gõM­ßûÁr­Š'N]w¨í”ëáäõ C:æuäëõ×Y sÁõp€”´´ž_µZ+áÑVlÝþ™ëáäõ s:þuè]СóÂõp€ué™9¯Q«ß‘•‹—Öí¾Ü{ÕõˆrzÐ: t.èŒÐ{¡³Cçˆë1ë»Òo½Óæ4tv}ízD ôˆÎöR ]•ŒÆG*&¾ÌMq¾¡ô½•Zç‹Î×ÃJÒÖ~Ú4͸ûeº¾…zÐO:St¾˜VK:ƒ\¶sÝ—fÏo*+¯Q±€¦ú~¢ô–ÙŠEçŽÎ GlÅ€¬è¿v½îõͦÛSfmiï8ëzD¸=êAÏéÜѤ÷Hg“Î)Y®G fGóÑÊI+µ‚Õ¯Íû»C=˜ :ì9¥óËõp€Ûhï8[õä&­ZG­Y³ùŸeøz0+t6éœÒ™¥÷KgŸ¹Àç{zçÖl7Ï:=½èý«ë¡ Ôƒ endstream endobj 147 0 obj <>stream Ù¢3Kç—y&Wg'œ³½'OßH/Äl¡Ì"e:×èÙ ·öübÜ#uf¯´·ßÿëá`ب³KgœÙÓSç ÎD×Ã@Žœèìž6§Á´=¬]¿·ïJ¿ë¡Ôƒ™¦óNgŸiä«óQg¥ë p—{¯.ªýàŽ1 µ9¯±ëLë¡xÔƒÐ9¨3Qï£ÎJ›:C]aªoj=a…Vž=¾öPÛ)×ÃA©¨ƒ¡óQg¥ÞM¡:O]AÑjóÁ)¯²Ú õ``ì­\±@é¢w£-Yµ‹»ÑBB=¡:O¹£%2Ý*FV.¦[E¨¨Ce;>éü¥ã†«qçÛÍþÃO¸A=6¹vGÑ®‡€ `·ëü ÌÅ:—õFë¼ÖÙíz8ðÔùžÞÙó›ÊÊ«GT,˜[³ýÂÅ>×#B²¨sBç²Îh×:»uŽëLw="x¤ÿÚõ5›Œ[£ê`ʬ-íg]i Ì×:»õŽëL×ù®³ÞõˆàÞ®}Ç*'­Ô*Q¿îh>êz8Hõ`é·ç»Î}×À3öó‚;ïYÂç9D=˜Oæ~õÜO.ö=÷ÂNû<ѹîK®G¨óLg½}^X³Ï ä„í7øðëé7˜gԃР y€~ÂyÐÒzòþÇ^a?2Ôƒ0ì~£š4K¸bv¢³{Úœ­÷FV.^¾¦¹ïJ¿ëÁ=êAXš43h~Ð!¡¹B3†ë —{¯.­Ûm–y3ç5véq="ø‚z7Ñü YÂ\8Ò¼¡ÙÃõˆP¼†mŸŽž°B«»ñU«?:Üéz8ð õ nKs…f š=4‡¸†íPÛ©‰S×™]}S«ëáÀGÔƒ„æ s5I3‰æ×Ã@AÎu_2w|Ý1fáü—Þ£<B=ˆÁiöТ™ÄÜmÎÆ4>ë»Ò_»~¯ÙfzêS¿¢#G=ˆBh&Ñ|¢CEs‹fºQxhGóQÓ1~Ü#uÍû»2€z…Ó¬¢¹ÅìV£ÙÆõpðmí§'OߨuÚ¨±5ì(ÂQb¸4ÃhžÑa£9G3ëáäÚùžÞ¹5ÛËÊ«GT,Ðoô¯®G„,¡DÌ´£9G3Ó€ý×®¯Ù|À^¨oï8ëzDÈêAMs޽-As‘f$×#È û O夕<ȃ¢Q¢Dš4 ñØ2@:ŽùÕ”Y[l£?®É£Ôƒ(f!ÛÖX³“æ(×#ݬ¬¼zöü&6Cé¨ÍHš—4;±í)@ì65~r÷Ë´tŸ8uÝ¡¶S®‡ƒ@P"^š4Gé Ò|¥YËõp2¯¥õäøªÕZ_•?ôbãÎ#®‡ƒ P" š©4_éÐÒÜ¥Ìõp2©ëLÏÏ~þ¦ÖT#+/­Û}¹÷ªë!4ÔƒHˆæ+ÍZš»t€iÓlæzD™ÁR é D¢¸¨0\Üj…ÔP"ÜôPZ1 eÔƒH M±B«v8A=ˆ4±iÀMØÊQ"}šå4×éÀÓ¼§ÙOs ë¸±£ùh夕Z{¤®yÿq×ÃAîPÂÍxš÷tøiÔLèz8©jï8;yúF­…F­Y³ùWÈáõ Ò¼§ÙOs B͇š] qç{zçÖlQ± ¬¼Z¿Ñ¿ºò‹zΙ)Qó¡fE¦D¶ íÅð¶öÓ®‡ƒ¼£„'4Ú[&4Oº@ÌìÃ2_æax‚z^Ñܨ’Gª@HNtvO}êW¶™^ß•~×#þ€z¾Ñ i[.kæÔüézDE²›mia3s^#›mÁ7Ôƒð“fKÍ™:8Ù’dT}Sëè +´ž™8uÝ¡¶S®‡Üõ |¦™Só§QÍ¥šQ]  î_µÚ¬a¶}êz8À€¨á?Í¢æÚšæUÍ®®‡0 ®3=æ§‘•‹—Öí¾Ü{Õõˆ€ÁP"4—jFÕ¼jî½×LëzDßÒw¥ùšf³\™6§ÈêAdˆæUͮ悛æ[zsO4îÙ­y›'»@‰l»ÉÓ7ÒÅ¡D4WkƦó3(ŇŸ÷H»\!`Ôƒ˜ÝV3¹æs×Ùq¢³{Úœ­"FV.®]¿·ïJ¿ë‰ DØ4{k×L®ã\³ºæv×#^»Ü{uɪ]wŒY¨ÅÃÌy]gz\Hõ ò@3¹æsêšÛ5Ãkžw="à£ú¦ÖÑVhÍðà”Wµr= qÔƒÈÍêšÛuÀkž×lïz8À#Z'<ôøZÖ ÈêAä½î§9Ÿë~ zÑ¢Ú¸¹B=ˆÒ<¯ÙžçÈ9ÓgàÎ{–Ðg¹E=ˆÜ²}Ôô  oÞ~ÿ7¶ùÞƒ_¸àõ rNó¿ÝWH¹àz8 qìS XÔƒ€( ”:”Ê×É8ßÓûô¢wÊÊ«GT,˜[³]ÿêzD€cÔƒ€¡DP.(”J €ô_»¾fóQck´ô­zrS{ÇY×#¼@=D)”:)”J e‡ë€R5ï?^9i¥ò]¿îh>êz8€G¨[))lj(A\©½ãì”Y[Lû¸º×?äJ/pêAà¶”J Ó€Z9Â]%dË…‹}ó_zÏ< 2{~Ó¹îK®Gøˆz„²C bž:W¦(Y\ ÍvŠ›8uâ€APCRŽ(MèJ €ÿZZOޝZmv’jÜyÄõpßQR¦˜]k•2Ê×ÃßÒÙõõ´9 Jê‘•‹—Öíî»ÒïzD@P…S²(_”2:k”8Ê×#7.÷^µ=s^c×™×#2ƒz.¥Œ²Æ^~T¹ùµuûg£'¬à 8Ôƒ@qìã Ê %‘ëá;‡ÚN™ü¿÷ƒåõM­®‡dõ P ¥2È´/S*¹¹p®ûÒ¬çßRþÞ1f! ÀRP%2Û)t*)›ØÞ€äô]é¯]¿×lüøìúÝ®Gdõ  å‘RIg“J9EO3b·£ùè˜Ö*mÇ=R×¼ÿ¸ëá! b¤lRBéœRZ)³\€@´µŸž<}£vÔØš_Ö·¸êA vÊ)¥•Î,%—òËõpȰó=½sk¶¨X ôý«ëA¡’@xPº5›ØK¬¿=ö;×ÃD=$GÉeonQ¢¹™aÁ¨œ´’G0€äPISŠ)Ëxø€Bœèìž2k -Ú€tP)ˆ6ÇVÆÑ€[E·pš=¿‰-œ€P©Q®)ÝØ<€[Õ7µÞýÀ2¥äÄ©ëµr= /¨”)ã”t:ï”zÊ>×ÃÀ±–Ö“ã«V+GOXѸóˆëáùB=8¡¼SêéìS*]ºÎôÌøÅV¥áÈÊÅKëv_î½êzD@îP®(õ”}J@ƒJCe¢ë’hN›Ó@®Pn)•ƒ\äGãÎ#_æ&ÀÔƒ€ì£ÊG„ª­ý´}ˆ~ã›»êAÀ#JFÛZíðç]®‡@lL“í²òjšl^¡¼b·^Rb²õ ý×®×½þ¡Ý„·½ã¬ëø#êAÀCÊJ%¦ÎM¥çÊ×ö)I]€bìh>Z9i¥íÞ¯jÞÜõpÜŒzð–rSé©3TIªNy•ô@=À^¡_µš+´€äté±w§,­ÛÍÝ)@ÖQaP"+—íÊk×#Å<½>²r1O¯!¡Bb;¼)¯_\»‡o€X4îÍdçwfæ<çû=/ÏÀzóÜà7¿½Ûë !}²‰[yûPeÿ1ÈL„œâ?n÷íÙžã·Ýó=çAfú dæ|a€œŽè[°t{¬ÿ“:W>óý_^*=P†>ÉEˆ$y –‚È‘JOÀº0piõú=•eÑc]§N÷—ž(IBäH±ÜÔþxä„H ¥'`ômá7Sï\«ý¬¹öž,=Pž>TE6ˆ„kB¤…m;zJÀ¨‰~öüMVxà=ôAà="'Tî=ŽäàÞc€zw¦ï|õ ËŸ}Ñ3@€‘ôAàý"-DfˆäPyuÉé3çJOÀU¼8´vóÞ}âI¯>Œ>|˜êîs‘%"QØ} Žìê>\ÝAº{ßÑÒã5J./RDd‰ÊéT?ÿÇWKÀGè=òú] ·Äº}ó§V;a¸<}¸‘("WÄr#’Féqøgû]µsBó²‰m+âøc鉀Z§W¨3"cDÒxäÉÄ €Ú1ôÖÛ·îŸ2sUäº/>ð£#¯½Qz" >èƒÀU‰ŒI#ÖH‘="”ž »êû;ç¬ÛÕ}¸ô8@=Ñky#RG¬ŸüÂwmSPÊÑÿÏ{?WÙøkÝ_rpµôAàÚDêˆìQÙÆ<Òˆç&Œ§7Ï VšÐ¼lÉògúΗž¨Kú p="D‰4R9æ8òIé‰ß»þù–ÛŸŠ7{þ¦W^=Uz ŽéƒÀõ‹4™$“È'[~òëÒã4¬=ÇgÍÝP9¨k÷¡ÒãuOFK$“ÊÙÇ‘U"±” ¡œ:Ýÿ•¿øI¬±“:W®^¿çÂÀ¥Ò@FQä“H)‘UbaY°t{¤—ÒÔ½‘KëßxÞÒ Œ"}u‘U"±¸àúuí>Ôü™g<õ#ú 0Fª/r™zç/r¸Z{OV_š½mGOéq€Æ¤c*2Lu¼È6¥Ç¨¶nÆ>Œµê!Y±Ú8$ à2†Þz{íæ½Õ£]è+=ÐàôA`|Dª‰l NäœH;ƒ‡JOP[vu.ÖÉ[ï^ß½ïhéq€ôA`¥Ç¨ G^{ã®…[bmœ2sÕÆ­ûK$¢ã/ÒNdžX|"ÿüëïþ£ô8ÅœíxtÕΉm+âßx'þXz" }(BøÁö—«wŽõy½ô8@Fú PPäŸêS¤þzÛÒ㌓ê“çÛ?»Ö“ç‚ôA ¸ÈB‘ˆl¡dpìDßü¯ý­Íµ€¡µ Qu‹õû–l³Å:ÐxF¾³ø[?uøP ôA vD:ŠŒ‹’#˜³mGÏÔ;×Äú6{þ¦ƒ½'KðGú Pk")E^Š¥éãw< ªô8×åŸ^91kî†XÓ¢>¿ó·¥Çx}¨M‘š*÷¥GŽ:Ðs¼ô8WíÔéþEuÅ:6©såêõ{. \*=À{éƒ@ÍŠì *rT,S‘©"Y•žàŠ ^zzcweùZ°tû‰S¿/=ÀÓ9*ÒTõv{ñ5®k÷¡¶Ùßñô .èƒ@]ˆLUyN¤¬ÈZ¥Çø½G^ÿÜ—7ÇJuËíOý`ûË¥Çøhú PG"_Eʪlй«ô8t¦ïü’å;&4/›Ø¶ÂöÈ@ÑúR9À+Wä®H_ðÊzëí[÷WŽO½wñsG^{£ôDWAêQ$®È]±|E[ÿ7¿ŠøcÏÔÆÚ›ç]µ³ò¬õ¯?ñ³³ý¥'¸vú Ð"E*«ìä9M<ÆHuW«»n±«ÐôA aD6‹„f§w`,üê×Çn½{}åÔ›ÿû÷ÿRz€Ñ¡ &rZå$èHn{_þ·ÒãuïØ‰¾K·W6°Z»yïàšҌ}h<‘Ö"³U¶Y®ôD@]º0péÉïþâ¦öÇc1YôXשÓý¥'eú Ш"¹E~‹%.²Ükÿ!r]鉀z²mGÏÔ;×Äò™û¾°÷déqÆ„>4¶Hq‘åb¡‹\é®ô8@°nyèƒ@Õûù?}ï_¹Ÿø0#ŸWðäwáy@ÃÓ$¼¸ ¯;rÒTªûNê\iŸ@ bä¾Ä¿úõ±ÒãŒ}Hhä9b]»•(ƹ¥@rú Vd¿H€±FŒLXz`\íøú?›Ð¼lbÛŠGWí|óÜ`é‰ ÐÌ"FŒ4™pÉò‘KOŒ¹¡·ÞÞ¸uÿ”™«"Ý»ø¹#¯½Qz"€bôA€Hƒ‘ c1Œ|)1²b鉀±Ò½ïhçœuq}·»º— 0} "’a5%þâ¥ß•eÕ{~>ö‰'ÝóP¡TUžEVÙp޳Ƞa¼ynpù³/VŸ~¦ï|é‰j…>ð‘#1Vv™øæ·wÛeêZuç¨Ï}y³£ÞCø@‘#=Ú…ê×žã³ænp² Àe胗²rJõm÷|/²eéq€+râÔï,Ý×ÜI+ŸÞØ=xq¨ôD5J¸¼H’‘'#UÆj 󨉾ÒêÂÀ¥Õë÷T®°‹ë:uº¿ôD5M¸‘*#[Vnˆ´™³ôDÀ{=¿ó·Sï\×ÓYs7üÓ+'JPôA€+ ³òr¤ÈœÛ_øMéq€?:Ø{röüM•ëæ¶=¥Ç¨ú ÀÕŠ´Yy "òg¤ÐÒã@jgúÎ/þÖOãúxSûãËŸ}цÀWE¸•ãÌ"V^£ä83ƒ‡ÖnÞ[90tþ×þÖk{®>pÍ"F U4iäR{¸ÙÕ}¸ý³kãÚwëÝë»÷-=@½ú??%ÖÒx[z€zY4i匳Ȩ¥Ç×{äõ»n‰kÜ”™«œ p~þ¯ÆŠoKPß"—F:5’jäÕÒã@:Û?ðèªÛVÄ¿ñNü±ôDuO-Õ°:¡y™° £kãÖýÕ»\޼öFéq„>0º"©VŸÌ vè­·KOõ­ú”ìÎ9ë<%`téƒc!RkdW›]Àõ8v¢ïÞÅÏU·lrï À¨ÓÆHd×êfø‘iþû–žêFõH— ÍË–,ßáH€1¢Œ©È±‘f#Ó:,®Ð¶=·ÜþTä“Ùó7ì=Yz€F¦ŒƒÈ´‘lc½”Y·ô8P£ôŸ5wC\Sš?óL×îC¥Çh|ú À¸‰|)7VÝH¼‘{K5äÔéþ¾ñ|\;&u®\½~Ï…K¥'HAO‘r#ëFâµ7ÒodàÒAa#¯_ù‹Ÿ¸RŒ'}`üEâÜë¡èÚ}¨möwPJõ¥R‘‡½TŠl^yõTõEµ?îúçÒã$¥”I¸º•b$äÒãÀ˜³é.@íЊsÔI ½õöº¾äPN€Ú¡ÔˆÈÆ‘cMŽ´™9’sé‰`4íê>Ü9g]ü†ßz÷úî}GKÀ0} ¦DNŽ´+s$çÈÏ¥ÇQpäµ7¾øÀâ·zÊÌU·îw_@íÐjM¤åÈÌ‘œc}ŽYºôDpÎö<ºjçĶš—=òä ñÇÒð.ú @mªéHÑ‘¥ãAšºóƒí/ßü©Õ3îZ¸¥÷Èë¥Çà胵,RtdéX¨#WGº.=\‘êÓžÛfGƨeú @íÛÕ}¸rf·8¨qÇNô-Xº½²-ÒÚÍ{/•ž€ËÑêBäêHוú#oGê.=¼Ë…K•cSâWtÑc]§Ïœ+=M¨#gúÎGÒŽu»rw$ðÒÁ°m;z¦Þ¹&~3gÏßt°÷déq¸Rú @݉¼©;VïHà‘ÃKCjñÛ8kî¿uJ¨SÛ_øMå™Hã‘aü:Ý_}´zõú=­¨Gú @ýŠ9|RçÊÊ+¶"Ÿ—žˆ/=óý_V~ñ¼š ®éƒõ®º£cäóHévtdLuí>TÝíö@ÏñÒãp]ôA€ÆÉü¶{¾W9ñ-{éqh@½G^ÿ÷ÿ0~Çn¹ý)§a4} ‘DJ¬ {äöHï¥Ç¡Aœé;¿dùŽ ÍË&¶­øË§þîÍsƒ¥'`tèƒ &²ú7¿½;r{¤÷Èð‘äKODzëí[÷O™¹*Ò½‹Ÿ;òÚ¥'`4éƒ )r{¤÷Xá#ÉGžT_z"êÏßÿòHçœuñ[oãýÒã0úôA€ö‹—~'Ïs ÜŸ„>ÐØ<ß«òæ¹Á¿|êï<ß } ƒ³ýöá#Ù } Høw-Üâ¼Þï@Ïñ[ï^ï¼€lôA€lœ'ÎHÇNô-Xº=~&u®|æû¿¼8Tz"Æ>Pdþµ›÷Fþ›€èÑJOD.­^¿ç¦öÇã×`Ñc]§N÷—ž€ñ¦¤ù?Z@Ü D#ˆ^í ôDŒŸm;z¦Þ¹&~ú³æn8Ø{²ô8”¡$]àÓ÷þUÜD;ˆŽPzÆ\üÄgÏßä'ÀÿÓøƒê£EÑñ¤WŒ0’>ÀHÕÝ&£;Dƒ°Ûdˆ[ùꎲÝûŽ–€¢ð~{_þ·êitn#êWõÄÉ›?µÚ‰“¼Ÿ>À‡‰qËíOÅÍDtŠh¥Çá*œíxäÉ&4/›Ø¶âÑU;ã¥' éƒ\FôˆhÑ)¢YD¿P+jßÐ[ooܺÊÌUqûþÅ~täµ7JO@íÒøHÑ)æ>øã¸½ˆ–]#G鉸`ÝûŽ~ò ߟTçœu»º—€Z§p…¢_Dˈ[h¶%©5ÑÙï]ü\e# u?|IgàJèƒ\¹hëÿæW•c ¢}x.b-xóÜàòg_¼©ýñ ÍË–,ßq¦ï|鉨ú W+GôŽh•cÍ£”ž(¯-?ùueÏŸÙó7½òê©ÒãPgôA®Mï‘×£ƒÄHô‘h%¥ÇIç@ÏñYs7TÎéÚ}¨ô8Ô%}€ëM¤rÖyt“h(¥ÇIáÔéþK·Ç÷|RçÊÕë÷\¸Tz"ê•>Àu¼8­$ºIÜ DO‰¶Rz¢†Õ¯ú­~àÏûVpôAFEt“EuyÐjìtí>4õÎ5Š`郌¢ê‹Ú¢¹xQÛh9Ø{²úRÍm;zJ@ãÐuÑY>~ÇÓ•M/£Ë”§ŽU¶r來\ ú c¡z(^ÜÊ8ï ^Z»yoõ¨Çc'úJO@Ò;Ñbî[²-nh¢×D»‰ŽSz¢ú°«ûpçœuñ}»õîõÝûŽ–€†¥0Ö¢ÑD¯‰››è8ÑtJSÓþõwÿq×Â-ñ½š2sÕÆ­ûK@ƒÓ½í@tœ¸Ñ‰¾­§ô85çlÿÀ£«vNl[ÿÆ;ñÇÒÐøôAÆÊóaF–åÞ#¯—€,ôAÆÙȧDF*=NaÕ'Ó¶v­'Ó0ÎôAаeŠÍv(N ”‘G*D3Ês¤ÂÈÃ8ë§ã }€²²¹¾mGÏÇïx:.ïìù›öž,=©éƒÔ‚hFÑâ&)ºR4¦Ò㌉=ÇgÍÝ—qêkžßùÛÒã€>@ éÚ}(ºRÜ0EoŠöTzœQsêtÿ¢ÇºârMê\¹zýž —JOÃôAjJt¥hLÑ›âæ):T4©Ò‚¯?ñ³¸8 –n?qê÷¥g€wèƒÔ ¨Ñžâ*šTéYFÁ™¾óôp' C fE‡²÷&Œ} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '} '}€{ã Í“?ošfÌhmiŸ>9Þé˜6½¹#Þinko1møæ¶­­ñNKçð{Ãïü×'·OomŸ6cò=ó†ÿ?ÍMmm“›ÿðÏ=ÜxÃÔ––ΦÎÖöÖÉÓ;Ú›:ÚÚ:'/ºñ†Ö¶á¿ÞÑ6yFÇô¦–i--“gßxCûôM­-ï|æÈ¶u´6u´6ÿá3«½¥£¥©¥%¾àì‘_iä§~À×þÏø&Ü÷g·=ôð ¿ôð¯>8ï¡G&bøc2µ%.Nóô:ùϾððC ¼òŸÜ~ûm_úÒ×}þ«Ïþä?ü߆?õ“Ão†/qˈ‹ÛÒ4cúŒ“;f´7uvNo}×…ílÞß×ÃLkïlšÖÒÚòÎgŽüà´¶Ö¦¶ŽŽéﺰmÍÍMÍÓ†?ø__gä'¾ïköýüõÿŠÜ6ò‡×<£¥©­=~ø#¿ImM3š+?Ñ/įµµ£©mF[Ë.}{KGÇð'wtv4Méðwtzüç?~ö‡\ÔÖ¦æÓÚf´_é%}ç‹Vÿÿ#¿hu’Qý¢³oçŠ9{Þ# š:5>póœy÷/¸ë¡y ÿ×ðõþ%ó¾¾`ò¼þ?,Xÿiòý-XòðWZ0yÉW¾ú¿‡?2ü—ª!®øŸûô7üv¦Úò endstream endobj 264 0 obj <> endobj xref 0 272 0000000003 65535 f 0000000016 00000 n 0000023208 00000 n 0000000004 00000 f 0000000006 00000 f 0000027163 00000 n 0000000007 00000 f 0000000008 00000 f 0000000009 00000 f 0000000010 00000 f 0000000011 00000 f 0000000012 00000 f 0000000013 00000 f 0000000014 00000 f 0000000015 00000 f 0000000016 00000 f 0000000035 00001 f 0000023259 00000 n 0000026948 00000 n 0000026979 00000 n 0000023339 00000 n 0000026832 00000 n 0000026863 00000 n 0000023407 00000 n 0000026716 00000 n 0000026747 00000 n 0000023475 00000 n 0000026600 00000 n 0000026631 00000 n 0000023543 00000 n 0000026484 00000 n 0000026515 00000 n 0000023611 00000 n 0000026368 00000 n 0000026399 00000 n 0000000036 00000 f 0000000037 00000 f 0000000038 00000 f 0000000039 00000 f 0000000040 00000 f 0000000041 00000 f 0000000042 00000 f 0000000043 00000 f 0000000050 00000 f 0000023679 00000 n 0000026252 00000 n 0000026283 00000 n 0000023752 00000 n 0000026136 00000 n 0000026167 00000 n 0000000051 00000 f 0000000052 00000 f 0000000053 00000 f 0000000054 00000 f 0000000055 00000 f 0000000056 00000 f 0000000057 00000 f 0000000058 00000 f 0000000059 00000 f 0000000060 00000 f 0000000061 00000 f 0000000062 00000 f 0000000063 00000 f 0000000064 00000 f 0000000065 00000 f 0000000066 00000 f 0000000067 00000 f 0000000068 00000 f 0000000069 00000 f 0000000070 00000 f 0000000071 00000 f 0000000072 00000 f 0000000073 00000 f 0000000074 00000 f 0000000075 00000 f 0000000076 00000 f 0000000077 00000 f 0000000078 00000 f 0000000079 00000 f 0000000080 00000 f 0000000081 00000 f 0000000082 00000 f 0000000083 00000 f 0000000084 00000 f 0000000085 00000 f 0000000086 00000 f 0000000087 00000 f 0000000088 00000 f 0000000089 00000 f 0000000090 00000 f 0000000091 00000 f 0000000092 00000 f 0000000096 00000 f 0000023823 00000 n 0000026020 00000 n 0000026051 00000 n 0000000097 00000 f 0000000098 00000 f 0000000099 00000 f 0000000100 00000 f 0000000101 00000 f 0000000102 00000 f 0000000103 00000 f 0000000104 00000 f 0000000105 00000 f 0000000106 00000 f 0000000107 00000 f 0000000108 00000 f 0000000109 00000 f 0000000110 00000 f 0000000111 00000 f 0000000112 00000 f 0000000113 00000 f 0000000114 00000 f 0000000115 00000 f 0000000116 00000 f 0000000117 00000 f 0000000118 00000 f 0000000119 00000 f 0000000120 00000 f 0000000124 00000 f 0000023899 00000 n 0000025902 00000 n 0000025934 00000 n 0000000125 00000 f 0000000126 00000 f 0000000127 00000 f 0000000128 00000 f 0000000129 00000 f 0000000130 00000 f 0000000131 00000 f 0000000132 00001 f 0000000133 00000 f 0000000134 00000 f 0000000135 00000 f 0000000136 00000 f 0000000137 00000 f 0000000138 00000 f 0000000148 00000 f 0000071191 00000 n 0000071267 00000 n 0000071537 00000 n 0000072597 00000 n 0000078540 00000 n 0000144130 00000 n 0000209720 00000 n 0000275310 00000 n 0000340900 00000 n 0000000168 00001 f 0000027064 00000 n 0000023977 00000 n 0000025784 00000 n 0000025816 00000 n 0000024060 00000 n 0000025666 00000 n 0000025698 00000 n 0000024131 00000 n 0000025548 00000 n 0000025580 00000 n 0000024202 00000 n 0000025430 00000 n 0000025462 00000 n 0000024273 00000 n 0000025312 00000 n 0000025344 00000 n 0000024344 00000 n 0000025194 00000 n 0000025226 00000 n 0000000169 00001 f 0000000172 00001 f 0000057699 00000 n 0000070562 00000 n 0000000183 00001 f 0000057823 00000 n 0000062085 00000 n 0000062122 00000 n 0000067555 00000 n 0000024415 00000 n 0000025076 00000 n 0000025108 00000 n 0000024491 00000 n 0000024958 00000 n 0000024990 00000 n 0000000184 00001 f 0000000185 00001 f 0000000187 00001 f 0000070498 00000 n 0000000188 00001 f 0000000190 00001 f 0000067939 00000 n 0000000191 00001 f 0000000192 00001 f 0000000194 00001 f 0000070434 00000 n 0000000195 00001 f 0000000197 00001 f 0000068290 00000 n 0000000198 00001 f 0000000199 00001 f 0000000201 00001 f 0000070370 00000 n 0000000202 00001 f 0000000204 00001 f 0000068678 00000 n 0000000205 00001 f 0000000206 00001 f 0000000208 00001 f 0000070306 00000 n 0000000209 00001 f 0000000211 00001 f 0000069060 00000 n 0000000212 00001 f 0000000213 00001 f 0000000215 00001 f 0000070242 00000 n 0000000216 00001 f 0000000218 00001 f 0000069421 00000 n 0000000219 00001 f 0000000220 00001 f 0000000222 00001 f 0000070178 00000 n 0000000223 00001 f 0000000225 00001 f 0000069787 00000 n 0000000229 00001 f 0000024565 00000 n 0000024840 00000 n 0000024872 00000 n 0000000231 00001 f 0000065673 00000 n 0000000000 00001 f 0000064773 00000 n 0000067352 00000 n 0000067449 00000 n 0000064919 00000 n 0000067002 00000 n 0000067123 00000 n 0000067243 00000 n 0000065073 00000 n 0000066783 00000 n 0000066880 00000 n 0000065219 00000 n 0000066426 00000 n 0000066542 00000 n 0000066659 00000 n 0000065373 00000 n 0000066069 00000 n 0000066185 00000 n 0000066309 00000 n 0000065519 00000 n 0000065710 00000 n 0000065831 00000 n 0000065952 00000 n 0000024644 00000 n 0000024722 00000 n 0000024754 00000 n 0000057937 00000 n 0000061059 00000 n 0000058120 00000 n 0000059917 00000 n 0000058352 00000 n 0000058639 00000 n 0000027915 00000 n 0000351555 00000 n 0000061324 00000 n 0000060179 00000 n 0000058899 00000 n 0000070626 00000 n 0000070676 00000 n 0000056356 00000 n 0000000443 00000 n trailer <]>> startxref 351711 %%EOF fifengine-0.4.1/doc/logo/fife_logo.jpg000066400000000000000000012710311304641216200176120ustar00rootroot00000000000000ÿØÿàJFIF––ÿáRExifMM*bj(1r2އi¤Ðã`'ã`'Adobe Photoshop CS3 Windows2008:07:18 17:57:34  ë  a&(.HHÿØÿàJFIFHHÿí Adobe_CMÿîAdobed€ÿÛ„            ÿÀ k"ÿÝÿÄ?   3!1AQa"q2‘¡±B#$RÁb34r‚ÑC%’Sðáñcs5¢²ƒ&D“TdE£t6ÒUâeò³„ÃÓuãóF'”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö7GWgw‡—§·Ç×ç÷5!1AQaq"2‘¡±B#ÁRÑð3$bár‚’CScs4ñ%¢²ƒ&5ÂÒD“T£dEU6teâò³„ÃÓuãóF”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö'7GWgw‡—§·ÇÿÚ ?õT’I%)$–7Ö.£‘Óñ­È¬:ÆUW¨)cƒò³o¬à}?¦ÔèDÊB#ª%.nµ—UYï .Ñ Lé£R®ê­ŸMáÑÈQñ^Y‘õÂÇØFXu-$ƒYu`‘ù—dOÚ¯þÅ´Wÿ–7×™`Ù ¢‹ žAýÊs?¤Uÿ_vSÏô~JßV·Þã{ïO«$²zuùØõä?sk¶–Z+ysMƒvÃc~žÕ—ÔnúÓ‘Ö²qºVEŒÅ®ÊêsØÌKI}tØ÷ÚÛï¯-Û=__g§ÿ©Ê&$ƒÑ³X·ªIrS©u³”ì>”]2_[i¬b–W‰mk2¯«è[{îwøÓ ôU^±ÕºçHÁÀ9½Lcää›_`µ¸U8)ÙAõ²= = ïý.3ÿ?ô‰©{T–WÕœ×çtŠò_œÎ¢÷¹Û®cXÐÓ?ÑÿWu”½Ô7êÖïÒ-T”¤’I%?ÿÐõT’I%)dýeƳ#¦Úʘl±ÕZƱ¢I%Žs^µ¬£elµ†»æ;S¡. vD…‚$úÉÓë¯*¼üRÛ°rÜ×8Fꬬ¸zŒ{“îoúZ-ÿGbÕì"ÿW¨eÚqÚâÀkÏ¡M5·ÛºÇ쮺ëý%¶ÿÂ.×ëÕ§[Eÿgx­÷ïp&§¼¬9u³ÜË¿îí¥ÿMö放®ýYmTû꾡¥ mcLmx¨ýååÙúÅŸðuþ…šz‡µÅ~ªáú4=‰ßèÝø»ØØ ­í-{]d#Ó­ŒÿªÜ—õ…Øôõ«~Îތז¶Òif[˜_éí§gªÖû}ûâ×®¶VÀÆÖ´@#]d8‚ôÄv›}ß½í 2Râ‘=Ûñh³ªîêÔtáP‹±—ênÔm}Uz~žßwó¿Îzˆuç[oF¨Òßò¾;ï.ú•Õ~Ö³k½]Þ·úF-#C²+É,ê˜úëpË oµƒúûmLWX-!¢X!š ƒu5->‘ÔR¢ë^ˆ«"üvê\(±øþ¨qmOÓÿÔ–+ÉšÖ´C@h’`i©;œ´äé)I$’JÿÑõMÚÄa6ý&Â’ÀÌëQýK?¬ljú]uÝ“cƒ6ÚËmiªŠ@ý }—d_“G¥úOÑ_餧wv¼c„·yÇ‘õ_ë>°aßÚØÏ³^ìw>« µ<µµÛêQm•cXêöÜß§CÊJbâ××4dD‚i‚¬½oÿì?ü¶³þÙoþ•Kÿì?ü¶³þÙoþ•IO’$½oÿì?ü¶³þÙoþ•Kÿì?ü¶³þÙoþ•IO›cœ³×êSŽ÷íÚç:ÛZéuƒôk=Ÿ£«ØÏOþ6ÏYSÌ4œ«]ŽÑ].quuµÅá­>æ×ê<5ïôþ†õê¿øÇaÿ嵟öËôª_øÇaÿ嵟öËôªJ|‘%ëøÇaÿ嵟öËôª_øÇaÿ嵟öËôªJ|£ÓûEfÖ‡V ÚâZÒÐ}ÍsÙïnïä+÷~Îû=­P-Ù5ØË­$8¿y>›ÃšïÑ3ÑenýÿVË,^‘ÿŒvþ[Yÿl·ÿJ¥ÿŒvþ[Yÿl·ÿJ¤§É^·ÿŒvþ[Yÿl·ÿJ¥ÿŒvþ[Yÿl·ÿJ¤§ÿÕôì캰p²3n5bÔû¬ íµ´Øýüçmjç³>¹äôü*ú·P釥\Dã“IÊ!ÍõjwØœYCýOwèqóò2àMel¶·W`ÜÇ‚×4ðAปÅþVgQéuu¦_Ò:pÄ FE•ÍG%»}ý™´zveÕïʧü 7~°’ž®Þ§éÜê~ËòÛ[\Æ×€íìqsEVïÓZïcpskÎÆ5±õ±ÅÍ µ»íqf¬?Gè§8•›}]ö»qo¨ý§G7nÍÛv~“èÿQNš[K65Ïpñ{œóÄ}+ œ’’*½K¨ãtÌ7æånÕË\DéôZ­ åãW•C¨³èº5¡på×âùoZì‰]ߣ•Ѿ¶ô®³m”â›*i{†ÒFÑü±íÝü„{:õUSëY‰–֊ů‘–‡81•¹»¿vïæÿ1ŸÎ*ÿW¾«ctZnc^^û‹ýÍöC\}­nß~æ±µ·éÿQj}†½Il z¯Ð‚÷iîÝþÿ=§æöøÏ·|+qñðúþdéÓ5¡­ @’IÓùE:{Ô~¹tΟ˜ìKYa²£?Ñîþ{û @uŠU7WMöU}n¹¯md†´FßS÷l·wè«þqgõªµõúso¥¸‡lÕû®öWô–¯ìúE,¥Ž²¶×_¤Í–9°]\ûNÝþ嶺á÷ýÉûŸ Ûåÿ‡ülžÏx/ŒüÌpº•y–ÙSiº—ÒÚÞñs6:7±£S¹íÿ þ\B¯•ØëžK»9îsGEŽ;[ôQU†ÿÖ?þ>8?ùUoý¼ßý&—þ>8?ùUoýºßý&¼‘Œ}mu´½ï!­kD’NkZ»¾§ýemeçÂö´=øÍ-vKIkm»§±ÎΦ¯oó–ãìIO¢ããƒÿ•VÿÛÍÿÒiããƒÿ•VÿÛ­ÿÒkÉÛð×6§¹®’ÒH;~–ßê¨>·Öv½¥†& Áø¤§ÖÿññÁÿÊ«íæÿé4¿ññÁÿÊ«íÖÿé5äiÚ×8†´À”€'AªŸ[ÿÇÇÿ*­ÿ·›ÿ¤ÒÿÇÇÿ*­ÿ·[ÿ¤×”äaeâ¸3&‹)s€!¶4´~‰÷&û&T‘èÙ €FÓ¡<7„LLMH|T;jú¿þ>8?ùUoý¼ßý&—þ>8?ùUoýºßý&¼$úçþ>8?ùUoý¼ßý&—þ>8?ùUoýºßý&¼®žŸ‘[­£Ë+`—9­$„(¹Áŵ¸†èOÑÜ€ Øh“E¾³ÿŽþU[ÿo7ÿI¥ÿŽþU[ÿn·ÿI¯&²›ªþv·3R=ÀGÒ¨"‡ÿ×ó Ë0s±³ªþwÖ\ÏëVácé5wý7;ê§DWëC_VmÙõ:-nƒ‘U–m»ÜW¹ÿg»ßCÖÎþkìÿÑ/·×û2ó”’S¡_Tux¢–ߔ͵:¦µ¶Å{^àë*k6þŽ‹w_ê×þħœìü·d½öØ÷ûœó´lfç5µýÚÆ*©$¥+2Œ¥FNEfêïÒÖ ÓívÇ~kÿqSI:0Þ&Ð@ ƒ±ÑÝêýWÚ1ñèuÙeÆÛr^aÛ4ÓPw«±ßJË?áâÐ+ëÙXË™•˜,u¤›&×0Vë·9ŽÞ÷ïÈo¿üÉI;6ieŸ´è‚!ð…Ý´¸–‚'h:˜óú)’IF¹êúÖ™Ó©«(Ù]˜®&ưÀ¹‡V7úßàÿ¨±«êÑu¯ß‘K-¸[²‡†´Aéí;­®§[é?üÍIE 1„¥!w6\™¥8Æ'hþ-ÌÞ¥n^=4ÛmÖš]c›ê¼<k½KK=»÷Xï}›ŸôÕ4’R±?ÿÐòïNÏ÷Ézvx¸wZŸfj_fjJrý;<Ü;%éÙà>å©öf¥öf¤§/ežÇ€›Ó³Àxpµ~ÌÔÿfjJrÅV¸èÙ:˜p»þŠoNÏ÷®Êƒ7mй¥„Ïg}%³5%9~žîÒôìðw‚Ôû3Rû3RS—éÙà>áÝ/NÏ÷©öf¥öf¤§/Ó³À}Él³Àxð§Ùš—Ùš’ŸÿÙÿíÎPhotoshop 3.08BIM$FIFE 2d isometric engine8BIM%°º£Ö­-Da<¦Á¤œR÷×8BIM/J‚HHÐ@dÀ°'ift+Ctr8BIMí––8BIM&?€8BIM x8BIM8BIMó 8BIM 8BIM' 8BIMõH/fflff/ff¡™š2Z5-8BIMøpÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè8BIM8BIM8BIM08BIM-8BIM@@8BIM8BIMe aëFIFE 2d isometric engineë anullboundsObjcRct1Top longLeftlongBtomlong aRghtlongëslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlong aRghtlongëurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?ð8BIM8BIM 8k DÊ€ÿØÿàJFIFHHÿí Adobe_CMÿîAdobed€ÿÛ„            ÿÀ k"ÿÝÿÄ?   3!1AQa"q2‘¡±B#$RÁb34r‚ÑC%’Sðáñcs5¢²ƒ&D“TdE£t6ÒUâeò³„ÃÓuãóF'”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö7GWgw‡—§·Ç×ç÷5!1AQaq"2‘¡±B#ÁRÑð3$bár‚’CScs4ñ%¢²ƒ&5ÂÒD“T£dEU6teâò³„ÃÓuãóF”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö'7GWgw‡—§·ÇÿÚ ?õT’I%)$–7Ö.£‘Óñ­È¬:ÆUW¨)cƒò³o¬à}?¦ÔèDÊB#ª%.nµ—UYï .Ñ Lé£R®ê­ŸMáÑÈQñ^Y‘õÂÇØFXu-$ƒYu`‘ù—dOÚ¯þÅ´Wÿ–7×™`Ù ¢‹ žAýÊs?¤Uÿ_vSÏô~JßV·Þã{ïO«$²zuùØõä?sk¶–Z+ysMƒvÃc~žÕ—ÔnúÓ‘Ö²qºVEŒÅ®ÊêsØÌKI}tØ÷ÚÛï¯-Û=__g§ÿ©Ê&$ƒÑ³X·ªIrS©u³”ì>”]2_[i¬b–W‰mk2¯«è[{îwøÓ ôU^±ÕºçHÁÀ9½Lcää›_`µ¸U8)ÙAõ²= = ïý.3ÿ?ô‰©{T–WÕœ×çtŠò_œÎ¢÷¹Û®cXÐÓ?ÑÿWu”½Ô7êÖïÒ-T”¤’I%?ÿÐõT’I%)dýeƳ#¦Úʘl±ÕZƱ¢I%Žs^µ¬£elµ†»æ;S¡. vD…‚$úÉÓë¯*¼üRÛ°rÜ×8Fꬬ¸zŒ{“îoúZ-ÿGbÕì"ÿW¨eÚqÚâÀkÏ¡M5·ÛºÇ쮺ëý%¶ÿÂ.×ëÕ§[Eÿgx­÷ïp&§¼¬9u³ÜË¿îí¥ÿMö放®ýYmTû꾡¥ mcLmx¨ýååÙúÅŸðuþ…šz‡µÅ~ªáú4=‰ßèÝø»ØØ ­í-{]d#Ó­ŒÿªÜ—õ…Øôõ«~Îތז¶Òif[˜_éí§gªÖû}ûâ×®¶VÀÆÖ´@#]d8‚ôÄv›}ß½í 2Râ‘=Ûñh³ªîêÔtáP‹±—ênÔm}Uz~žßwó¿Îzˆuç[oF¨Òßò¾;ï.ú•Õ~Ö³k½]Þ·úF-#C²+É,ê˜úëpË oµƒúûmLWX-!¢X!š ƒu5->‘ÔR¢ë^ˆ«"üvê\(±øþ¨qmOÓÿÔ–+ÉšÖ´C@h’`i©;œ´äé)I$’JÿÑõMÚÄa6ý&Â’ÀÌëQýK?¬ljú]uÝ“cƒ6ÚËmiªŠ@ý }—d_“G¥úOÑ_餧wv¼c„·yÇ‘õ_ë>°aßÚØÏ³^ìw>« µ<µµÛêQm•cXêöÜß§CÊJbâ××4dD‚i‚¬½oÿì?ü¶³þÙoþ•Kÿì?ü¶³þÙoþ•IO’$½oÿì?ü¶³þÙoþ•Kÿì?ü¶³þÙoþ•IO›cœ³×êSŽ÷íÚç:ÛZéuƒôk=Ÿ£«ØÏOþ6ÏYSÌ4œ«]ŽÑ].quuµÅá­>æ×ê<5ïôþ†õê¿øÇaÿ嵟öËôª_øÇaÿ嵟öËôªJ|‘%ëøÇaÿ嵟öËôª_øÇaÿ嵟öËôªJ|£ÓûEfÖ‡V ÚâZÒÐ}ÍsÙïnïä+÷~Îû=­P-Ù5ØË­$8¿y>›ÃšïÑ3ÑenýÿVË,^‘ÿŒvþ[Yÿl·ÿJ¥ÿŒvþ[Yÿl·ÿJ¤§É^·ÿŒvþ[Yÿl·ÿJ¥ÿŒvþ[Yÿl·ÿJ¤§ÿÕôì캰p²3n5bÔû¬ íµ´Øýüçmjç³>¹äôü*ú·P釥\Dã“IÊ!ÍõjwØœYCýOwèqóò2àMel¶·W`ÜÇ‚×4ðAปÅþVgQéuu¦_Ò:pÄ FE•ÍG%»}ý™´zveÕïʧü 7~°’ž®Þ§éÜê~ËòÛ[\Æ×€íìqsEVïÓZïcpskÎÆ5±õ±ÅÍ µ»íqf¬?Gè§8•›}]ö»qo¨ý§G7nÍÛv~“èÿQNš[K65Ïpñ{œóÄ}+ œ’’*½K¨ãtÌ7æånÕË\DéôZ­ åãW•C¨³èº5¡på×âùoZì‰]ߣ•Ѿ¶ô®³m”â›*i{†ÒFÑü±íÝü„{:õUSëY‰–֊ů‘–‡81•¹»¿vïæÿ1ŸÎ*ÿW¾«ctZnc^^û‹ýÍöC\}­nß~æ±µ·éÿQj}†½Il z¯Ð‚÷iîÝþÿ=§æöøÏ·|+qñðúþdéÓ5¡­ @’IÓùE:{Ô~¹tΟ˜ìKYa²£?Ñîþ{û @uŠU7WMöU}n¹¯md†´FßS÷l·wè«þqgõªµõúso¥¸‡lÕû®öWô–¯ìúE,¥Ž²¶×_¤Í–9°]\ûNÝþ嶺á÷ýÉûŸ Ûåÿ‡ülžÏx/ŒüÌpº•y–ÙSiº—ÒÚÞñs6:7±£S¹íÿ þ\B¯•ØëžK»9îsGEŽ;[ôQU†ÿÖ?þ>8?ùUoý¼ßý&—þ>8?ùUoýºßý&¼‘Œ}mu´½ï!­kD’NkZ»¾§ýemeçÂö´=øÍ-vKIkm»§±ÎΦ¯oó–ãìIO¢ããƒÿ•VÿÛÍÿÒiããƒÿ•VÿÛ­ÿÒkÉÛð×6§¹®’ÒH;~–ßê¨>·Öv½¥†& Áø¤§ÖÿññÁÿÊ«íæÿé4¿ññÁÿÊ«íÖÿé5äiÚ×8†´À”€'AªŸ[ÿÇÇÿ*­ÿ·›ÿ¤ÒÿÇÇÿ*­ÿ·[ÿ¤×”äaeâ¸3&‹)s€!¶4´~‰÷&û&T‘èÙ €FÓ¡<7„LLMH|T;jú¿þ>8?ùUoý¼ßý&—þ>8?ùUoýºßý&¼$úçþ>8?ùUoý¼ßý&—þ>8?ùUoýºßý&¼®žŸ‘[­£Ë+`—9­$„(¹Áŵ¸†èOÑÜ€ Øh“E¾³ÿŽþU[ÿo7ÿI¥ÿŽþU[ÿn·ÿI¯&²›ªþv·3R=ÀGÒ¨"‡ÿ×ó Ë0s±³ªþwÖ\ÏëVácé5wý7;ê§DWëC_VmÙõ:-nƒ‘U–m»ÜW¹ÿg»ßCÖÎþkìÿÑ/·×û2ó”’S¡_Tux¢–ߔ͵:¦µ¶Å{^àë*k6þŽ‹w_ê×þħœìü·d½öØ÷ûœó´lfç5µýÚÆ*©$¥+2Œ¥FNEfêïÒÖ ÓívÇ~kÿqSI:0Þ&Ð@ ƒ±ÑÝêýWÚ1ñèuÙeÆÛr^aÛ4ÓPw«±ßJË?áâÐ+ëÙXË™•˜,u¤›&×0Vë·9ŽÞ÷ïÈo¿üÉI;6ieŸ´è‚!ð…Ý´¸–‚'h:˜óú)’IF¹êúÖ™Ó©«(Ù]˜®&ưÀ¹‡V7úßàÿ¨±«êÑu¯ß‘K-¸[²‡†´Aéí;­®§[é?üÍIE 1„¥!w6\™¥8Æ'hþ-ÌÞ¥n^=4ÛmÖš]c›ê¼<k½KK=»÷Xï}›ŸôÕ4’R±?ÿÐòïNÏ÷Ézvx¸wZŸfj_fjJrý;<Ü;%éÙà>å©öf¥öf¤§/ežÇ€›Ó³Àxpµ~ÌÔÿfjJrÅV¸èÙ:˜p»þŠoNÏ÷®Êƒ7mй¥„Ïg}%³5%9~žîÒôìðw‚Ôû3Rû3RS—éÙà>áÝ/NÏ÷©öf¥öf¤§/Ó³À}Él³Àxð§Ùš—Ùš’ŸÿÙ8BIM!UAdobe PhotoshopAdobe Photoshop CS38BIMÿáñhttp://ns.adobe.com/xap/1.0/ FIFE 2d isometric engine Cyan Magenta Yellow Black ÿâ XICC_PROFILE HLinomntrRGB XYZ Î 1acspMSFTIEC sRGBöÖÓ-HP cprtP3desc„lwtptðbkptrXYZgXYZ,bXYZ@dmndTpdmddĈvuedL†viewÔ$lumiømeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ óQÌXYZ XYZ o¢8õXYZ b™·…ÚXYZ $ „¶ÏdescIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view¤þ_.ÏíÌ \žXYZ L VPWçmeassig CRT curv #(-27;@EJOTY^chmrw|†‹•šŸ¤©®²·¼ÁÆËÐÕÛàåëðöû %+28>ELRY`gnu|ƒ‹’š¡©±¹ÁÉÑÙáéòú &/8AKT]gqz„Ž˜¢¬¶ÁËÕàëõ !-8COZfr~Š–¢®ºÇÓàìù -;HUcq~Œš¨¶ÄÓáðþ +:IXgw†–¦µÅÕåö'7HYj{Œ¯ÀÑãõ+=Oat†™¬¿Òåø 2FZn‚–ª¾Òçû  % : O d y ¤ º Ï å û  ' = T j ˜ ® Å Ü ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@eНÕú Ek‘·Ý*QwžÅì;cвÚ*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý# #8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k))Ð**5*h*›*Ï++6+i++Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<' >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·OOIO“OÝP'PqP»QQPQ›QæR1R|RÇSS_SªSöTBTTÛU(UuUÂVV\V©V÷WDW’WàX/X}XËYYiY¸ZZVZ¦Zõ[E[•[å\5\†\Ö]']x]É^^l^½__a_³``W`ª`üaOa¢aõbIbœbðcCc—cëd@d”dée=e’eçf=f’fèg=g“géh?h–hìiCišiñjHjŸj÷kOk§kÿlWl¯mm`m¹nnknÄooxoÑp+p†pàq:q•qðrKr¦ss]s¸ttptÌu(u…uáv>v›vøwVw³xxnxÌy*y‰yçzFz¥{{c{Â|!||á}A}¡~~b~Â#„å€G€¨ kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ— —u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿÿîAdobed@ÿÛ„       ÿÀ aëÿÝÞÿÄ¢  s!1AQa"q2‘¡±B#ÁRÑá3bð$r‚ñ%C4S’¢²csÂ5D'“£³6TdtÃÒâ&ƒ „”EF¤´VÓU(òãóÄÔäôeu…•¥µÅÕåõfv†–¦¶ÆÖæö7GWgw‡—§·Ç×ç÷8HXhxˆ˜¨¸ÈØèø)9IYiy‰™©¹ÉÙéù*:JZjzŠšªºÊÚêúm!1AQa"q‘2¡±ðÁÑá#BRbrñ3$4C‚’S%¢c²ÂsÒ5âDƒT“ &6E'dtU7ò£³Ã()Óã󄔤´ÄÔäôeu…•¥µÅÕåõFVfv†–¦¶ÆÖæöGWgw‡—§·Ç×ç÷8HXhxˆ˜¨¸ÈØèø9IYiy‰™©¹ÉÙéù*:JZjzŠšªºÊÚêúÿÚ ?ûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÐûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÑûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÒûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÓûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÔûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÕûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÖûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wÿ×ûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÐûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÑûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÒûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÓûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š¤ÚŸ˜tíWQ¸HÛùkVÿ?†]‹O<¿HiÉžþ¢œå-É0ó›õ§ÒÚæ4ºŒ…1¹âjEv­ØöË¿/>*Ù§ó¾Ý9Ê[Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š¿ÿÔûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±T³QÖ¬t…ç©\G€cñ’ÏÐ2Üx%“éד4qýFžuªþkZCXôˆvìò| ÷nOá›]“#õuù{R#éó}WÏzΫTyÌ1؃àÚ?IÍ–-<}/ß»®Ë­É“­{˜%‰f5'rNf8¯³ó‹z÷˾{ÿŽõïúëÿÔè?ºޝ5®þðþ: t¿4êš=ˈÇû­$ÿ5èË2éa—ê 1jg‘zF—ù³Ò=fÛç$þ5cÿf³/dÿ0üÿ[°ÅÚŸÎ'£é~jÒµš-Êû­¾ûš•ú3[—I<_PvµPÉȲÇrŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÕûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*¾Ôí4Äõu ã…{s`+òOÑ–cÅ,›D[ äŒ7‘§žjŸšš}µSL‰î_³?‹ð±ÅÙS—Ôkíuù{N1úwûoª~`ë:QfñÙ€q?ð[·ã›,]K÷ºüºü“ë^æîÒ±’BYŽä“Rs4 pɵ˜PìUØ«í âžÁòïžÿã½{þºÿÄu:î‡ã«Ík¿¼?ŽŒG3Gb®ÅY>•ç_H¢ÚܳF?Ýr|kôW§ÑLÅˣǓ˜ùläâÕÏ#ózF•ù±Ò=fØ¡þxMGü Ü}ç5¹{$ üÝŽ.Ôê'£i~cÓu‘þã®RFþJñøCøf·.šx¾ ì1ê!“é)ÞPÜìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÖûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®ÅP·wÖö ë_JÇâì~98c34±œÄ7&ž}ª~hi–uM=^êAÜ| ÷þá› ]—9}[8{JúwyÆ©ù¬jHmb=¢?Ö5?u3e‹³qÞþ÷]—´2O–Þæ 4Ò\9šwgsÕ˜’OÒs8D ƒ„I;•,’Š»v*ìUØ«í âžÁòïžÿã½{þºÿÄu:î‡ã«Ík¿¼?ŽŒG3Gb®Å]Š»l G\ eºWž5&‰Á–1û|cï?úbeÐãÉÌW»g+·&>FýïGÒÿ5íe¤z¼ <ýÆ„~9­ËÙ2A¿{°ÅÚ€ýB½ÏFÓuË ]yi·Ë߈?ù©¡HÍn\Çõ vóG'Òm5Ê›]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_ÿ×ûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUت…ÅÔ6hg»‘"Œug`£ï9(ÀÈÐÝŒ¤#¹Ùj¿™zM…c´çu ÿ}Š-Ö?ÀÏÅÙ™'Ïg/h·yÆ«ù™«_U,øZFroø#üÍ–.ÌÇ{ºü½¥9rÙ\ÝMxæ{¹YVv,~ó›ÀDPÙÁ”ŒÐù&.Å]Š»v*ìUØ«±Wb¯´3Š{˾{ÿŽõïúëÿÔè?ºޝ5®þðþ:1ÌqŠ»v*ìUØ«±Wb«•Ùt$0ܱ´ƒLÏKóþ³¦Q=o¬F?fqËþfüs /gãÉҽߊrñk²C­ûÞ¥þjØ\Q5HžÝû²üiø|_Ín^Ê”~“c±ÅÚq?P¯µè–­ž¨ž®7ûȧá›,]—ý[ýŽ¿/iN_NÏ>¼¿¹Ô_׿™æ“ÅØ±ú+›cNæfl›BdØ;v*ìUØ«±Wb®Å]Š»v*ìUö†qO`ùwÏñÞ½ÿ]â:÷CñÕæµßÞÇF#™Ž#±Wb®Å]Š»v*ìUØ«±Wbª‘Jð0–(ã£)¡HÀ@;ƒ\™Æ—ù¬iÔI¤1ŽÓ Ÿø!C÷×02ön9òÛÜæâí 翽èú_掛wDÔQí\÷ûi÷ÿás[—²§§°» ]§ }[}¯A³Ô-µõ¬&I“Å7ßL×Ï jBœødÜFd»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ÿÿÑûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb«]Ö%2HB¨Ü’h-Ó Õ04m2ª³}bQû0_ðÛ/㙸»?&N•ïq2ëñíûžqªþj_ÜÖ=.$¶_æoÿ‡ð9²ÅÙQÔoìuÙ{NRúE}¯<¿Õo5Gõuä™»sb@ùƒèÍŽ¡¥(FØqäöîxšõ%{ñ¶k³{,1ư]%úÿ_ͧ&cñèåÿæß”?4­þ»äM^Úþ‹ÉáVã¶»‚õör$±žŒŒ}ã5ò‰¢)Όķ¢2,Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯ÿÒûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìU¢BŠ€êqV#ªyçFÒª²\ ¤±Æ~ñð¤æf-L+ß³‰—[[÷<ãTüÖºš±é0$+Ùä<ÛæÀ~9²ÅÙ1Q·_—µ$~‘O9Ôu»ý\òÔn$—¿?ù(Ø}6XðGÒ)×äÍ,ŸQ´¯-jv*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯)üÇüîòWåDFO:êÐ[ÜR«h‡Õ¹zô¤)V¡þbø‘™š]]OÐ/ϧÍ@?;ÿ3ÿçàÚΧêiß•jé°…¾¿ 5Á+¬HÖ2Œé´žÍF;å7ä6>sQËÜøÍ~m×¼õzÚÏœuJôÖ’\ÊÏÄZ(;*ø*€£°ÎžE@<šÌÕ<¥äÏ—Ë¢ù3MºÔïZŸ»¶‰Ÿˆ&œœE_bw8æÏ "æ@le”G›íÝþ}ÇçÝOF}WWÔ´Í;V 4:|ŒòWmijF £ª$å Ñäö“e@;ÿPþÇë@/“2?#<ëùM9·óÞqgn)r’ÚO3'$$øWî;›[R=üºü›áœO‘y¾wy£\Ç©éËky Šh£‘t*ÊAÜÉœÅa°MöŸå‡üçWž¼™ééþsHüǦ­)Ï¥v«í2‚Ç÷ˆÌ˜f‡Wìî,»ÃÒ~cåú™Œ¯ÑoÊÿùÊ¿ËßÍ/JÏOÔF«IAõFHXöF$Ç!=‚1juQœÆ¯±ói·"Çxßö†Ñ0_Gæ­“±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»EZ_\XIëØÊðÉüÈÅOáœÅlá3`Ó?Ò¿3õK*& ©wþaÁÿà†ßx9¯ËÙp—Ó³‹´§«w¤i_™F¡D¸vµö”|?ðB£ï¦krönHrßÜìqv„'Ïo{:‚x®PMlë$g£!¤f¢c±sD„· ¸ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯ÿÓûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»bú§œ´"©sr­ ÿuÅñµ| 6I•‹E“'!óÙÆË«†>gäóSóbW¬z=°AÙæ5?ð#a÷œÙbì>³òuÙ{PŸ¤|Þq©ù‹RÖ ý#s$Šb´OøAøfËš¾ëòj'“ê).^ÒìUØ«±Wb®Å]Š»v*ìUØ«±Wb®ÅZf 1 ’qWË_™¿ó˜—Ÿ—>¥”§[ÕR [i¥dP݃Í_MwØÐ³äÍÆ“°ój7®ÞW6Èó¿ó;þsSóϾ¥—å_.éoP#±cõ‚¿å\0>ñˆó§Òv;ËÔ|ù|¿]´K1/‘§3^J÷WnÒÍ#wv,ÌORIܜްi3zßåÏä'4[Êz\¯dM ìÿ¹¶]èxô Ná97¶bjuøôÿQß»™jžqoПËùÀŸ-h†=GóBùõ‹‘BlíKAjpÎ)+ ^àç=ªíùËlb¼Îçõ}îõ„ò}éå­Eòm’è¾S°¶Ó¬Sq ¬K×Ä…¤÷'sß9ü²–Sr$Ÿ7S2æŸþ“÷Êü4Zî{}B,¯ãIíåR’E*‡FSÔ2š‚Ø› ÄøÏóCþp«òÿÏ&MCÊèÞ\ÔÞ¦¶`5©cüÖ䀣Ú6Œ{fëKÛYpí/PóçóýväCW(óÝùáù™ÿ8™çßËRðÙ _KJŸ­éÜ¥|^* ƒ©âP9ÎKÚØ³ít{ëäæCU>g{r6#|Ù¹o ?,ç&ÿ0*½;MRkÝ*0°Ô+NäQïÛñlŽR¡ÿ–_ó¾Kóg§§ùæ|½¨5É!3Z1ö•@d¯ùhœõÎ_Wìî\[ÃÔ>Gäß ¾ÕÓ5[-nÖ=SF¹†îÊeåöò,‘¸ñWRA#š ÀÀÔ…6Ô~E]Š»v*ìUØ«±Wb®Å]Š»v*ìUت:ÇS»ÓÕÓæ’ïÁˆ¯Ìwúr¼˜£“i l†ICxšz•ù§¨ZÑ58Òé?˜|ø ~®ËÙP—Ó·Úçâí9GêßìzF•ù…£jtG”ÛJfqÄÁn¿y­ËÙÙ1ô¿s°Å¯Ç>µïf±È“(’& ‡pÊjÓ˜DW70ä¿]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š¿ÿÔûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb©­æ/D&=BáVQþë_‰÷éðŠ‘ôæF,òý#âÑ—S _Qy¶©ù³Ö=Ûå$çþ5SÿfËdÿ<ü¿[®ËÚŸÍ7›êžiÕ5Š‹ë—1Ÿ÷Zž)ÿ(Ó›t:Ofòdß!áÜÏꚥ˜OÏO̯ùÈ/>~m‡ÍZ¤‹§1$XZ~âØŠjôìd.GŽuNËÃ¥úýçsû>4²’ñè-gX¡RîÄ*ªŠ’NÀÜœØ5¾›ü»ÿœOó§ý;ÍJÑ4Ö¡õ¯‘þDã'ý~ {6kµ©ÃÔ|¿[‹“Wù¾òü¹ÿœVòÌwº…±Öõ4¡õ¯ÀhÁÿ"ðö\ÈìÙ¡Ôö¦\ÛHòýnõR—“ꯒXa#@UE`ÍY…´q*~“÷Áá­»ôŸ¾>Û¿Iûãá­»ôŸ¾>Û¿Iûãá­»ôŸ¾>ÛÄ¿1¿#<ùŸÎãÌjC¨¿üYÒŠø³(£ŸøÈ­™Úmn\IÛ¸î?æØg”9> üÄÿœ.ó€d¾ò-ÄzÍ©µ!ºQס<ž!=“7Ú~Ù„ö˜£óf=`<ö|}«è7ÚËéšÕ¬Ö—qš<3ÆÑºüÕ€9·Œ„Ńn\r_&Gäo̯5þY]~ò6«s§¹`ÏmX¤#ýùUý’œÇÔèñêdýÿ>mÑÈCï¿Ë/ùø'÷ZoæÖ—NŠu 4móxý,QÿÕ¶s:¿fzá?úÿ_ÍÈŽ~÷è‘¿3<­ù“kúGÈú­¶£u‰é,uÿ~DÔtÿd£9­F“&œÔÁŽþMÂ@ògYŽ—b®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìU3Óµ›í%¹é×CÜ…o„üÇCôŒ«&äú…¶ãÍ,I§¢i_š×R=Z>û·ðÍv^ɉúM}®~.Ôú…½#JóÞªÑFSû|¿?²~üÖeÐdÇÒýÎÇ»Nµïf9†å»v*ìUØ«±Wb®Å]Š»yޱùÙùwåëÙ´]ÍÚŽ¡lÜ&¶¹Õ-"–6þWG2Ÿb1T»þ†ò³þ§,ÿÜfËþªâ®ÿ¡„ü¬ÿ©ãË?÷²ÿª¸«¿èa?+?êxòÏýÆl¿ê®*ïúOÊÏúž<³ÿq›/ú«Š»þ†ò³þ§,ÿÜfËþªâ®ÿ¡„ü¬ÿ©ãË?÷²ÿª¸«¿èa?+?êxòÏýÆl¿ê®*ïúOÊÏúž<³ÿq›/ú«Š»þ†ò³þ§,ÿÜfËþªâ®ÿ¡„ü¬ÿ©ãË?÷²ÿª¸«¿èa?+?êxòÏýÆl¿ê®*ïúOÊÏúž<³ÿq›/ú«Š²,þkù#ΗgGòw™tmZüFÒ›{ BÞâPŠ@-Â'fâ 4¦ãgø«±V æŸÌÿ'yâ=?ξaÒ4{©£õc‹P¿·¶wJ‘ÉVWRV ŠªÅXÏý 'ågýOYÿ¸Í—ýUÅ]ÿC ùYÿSÇ–î3eÿUqW©éÚ®¯k­¤ÏÕÔI<Àë$rÇ"†GGRU•”‚¬ ŒUб4ùÛ˾F·P󮯧èö³IéG.¡u²;О*Ò²‚ÔÐo@N*Áÿèa?+?êxòÏýÆl¿ê®*ïúOÊÏúž<³ÿq›/ú«Š»þ†ò³þ§,ÿÜfËþªâ®ÿ¡„ü¬ÿ©ãË?÷²ÿª¸«¿èa?+?êxòÏýÆl¿ê®*ïúOÊÏúž<³ÿq›/ú«Š»þ†ò³þ§,ÿÜfËþªâ®ÿ¡„ü¬ÿ©ãË?÷²ÿª¸«¿èa?+?êxòÏýÆl¿ê®*ïúOÊÏúž<³ÿq›/ú«Š»þ†ò³þ§,ÿÜfËþªâ®ÿ¡„ü¬ÿ©ãË?÷²ÿª¸«¿èa?+?êxòÏýÆl¿ê®*õ›{ˆ¯"ŽîÒE– U^9ƒ++ †R6 Áª¶*ÆüÑç-É©«yÓU±Ñìd”@“ê1[FÒ2–VU,UX…­h¤ö8«ÿ¡„ü¬ÿ©ãË?÷²ÿª¸«¿èa?+?êxòÏýÆl¿ê®*ïúOÊÏúž<³ÿq›/ú«Š»þ†ò³þ§,ÿÜfËþªâ®ÿ¡„ü¬ÿ©ãË?÷²ÿª¸«¿èa?+?êxòÏýÆl¿ê®*ïúOÊÏúž<³ÿq›/ú«Š»þ†ò³þ§,ÿÜfËþªâ®ÿ¡„ü¬ÿ©ãË?÷²ÿª¸«¿èa?+?êxòÏýÆl¿ê®*ïúOÊÏúž<³ÿq›/ú«Š»þ†ò³þ§,ÿÜfËþªâ®ÿ¡„ü¬ÿ©ãË?÷²ÿª¸«ÔôíF×WµƒVÒgŠêÆê$ž àu’9c‘C#£©*ÊÊAV‚ F*ŒÅ]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š¿ÿÕûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯ÿ4lþ¯«‹6žb}Ö«ú€Î‹²§x븺Ó…NûÃÍóf늻v*ìUØ«±Wb®Å]Š»v*ìUØ«±W™~aþqù7ò®¬yãW·³”¯$¶åÎâAþD)W#·*qÈÌ­6‡.¤ú>}>h&Ÿžß™ßóðmBûÔÓ)tÁgªCQI~i’Š| ´•îƒ:}³ o”ßåóç÷4Ë7sàß6ùßÌ_˜7Ÿ¥üé©\êW[ñk‰ *Ô"}”ÊöΓš@îqå;Bè>ZÔ¼Çrºni5åÓtŽ.iâiÐ{²ÙÌ@Y4Ñ<‚;—ÖþCÿœBÕ5ž|¼M:Bm­È–r;‚ßݧÌzŸ,ÖæíA /ϧãäàä×ôîû[È¿–>RüºP|±§EÐ7RVsãûÆ©P{…â¾Ù¦ÏŸ&o¨ü:8SÎgÍ韤ýóÃj·~“÷ÇÃ[wé?||5·~“÷ÇÃ[wé?||5·~“÷ÇÃ[wé?||5·~“÷ÇÃ[wé?||5·~“÷ÇÃ[wé?||5¶-æ¯.h>x¶ýæË/¡ãê¯Ä•êQÅOºrÜR–#q4Î9 y>6óçüáõ¤Üï//ÌM¹w¿ü–UÁ•½ØfßjžSúœÌzïç>5óåϘ<7Õ|Ña-­MB9DÿêȵSò¾#6سG.ñ.~<Â|‹Óuíê=[C¹šÎöÊ9íähäC⬤÷ä§ŒLT…7"3}¡ùgÿ9ßç?)ôï>A˜tõ¢ú¬D7j:x £Ð:rcÕóŸÕû9‹.øý'æ?Šr#™ú!ùaÿ9?ù}ù­éÚhššÚj²P}BþNIì•%$>Ñ»g/«ìœÚmä,wÇìø· ‚ú 5¬Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Tç˶_Õ--ª¼ÉËýPj £S>äݧ‡Àó}oœ‹Õ;v*ìUØ«±Wb®Å]Š»_óŸŸúÐߘ_öÚ“þ ˜«ä UØ«±Wb®Å]Š»v*ìUØ«±Wb¯ÕïùóoþO»Ÿüuù?mŠ¿©ìUØ«ù¡ÿŸÚäÓòŸþ#þ£gÅ_Œ8«±Wöûÿ8ÿ’CòÓÿÏ/Ý:Uïø«ñ‡þiÿ’³Êøú‚Ÿ48«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š¿»ÏÊoùAü³ÿl];þ¡“z*üÿŸÕÿäÐ?ð3±ÿºuþ*þ`qWb®Å]Š»v*ìUØ«±Wb®Å]Š»o¿ó‰ßù$?-?ð ò÷ýÓ¡Å^ÿŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»ÿÖûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯ üÛ´åøý‡xû!Qÿ9¸ì‰îcñü|ÝOjÃ`~Íë¥v*ìUØ«±Wb®Å]Š»v*ìUØ«D€*v|Ãù¥ÿ9yùuù_êYK¨ _VBWêZaY™Xv’JˆÒ‡b sÈsk¤ìlÚê‡yÛö š~tþfÿÎsyûÏ>¥‡• ~[Ó  B^è©þk†ƒàcXϹΟIìþ,;ÏÔ|ù|¿]µË#ãùæ¸Ôg{ÝBY'¹•¹I,¬]ØžìÆ¤Ÿžo£A¢RgÞNü³óœ/—¬d’ÐÎÿ+ãWj ¼O¶C&hãæ\LÚ˜ãæ_\ù'þqgK°áyç‹¶½”nm­‰Ž“?Ûaòášü½ NÑÙÖeí~—ÕZ¥ù^Øi¾^´†ÎØSà…Ôø±±÷59­Ìܸ2Èe¹N¿I{äxÛ¿I{ãÀ¶ïÒ^øð-»ô—¾< ný%ïÛ¿I{ãÀ¶ïÒ^øð-»ô—¾< ný%ïÛ¿I{ãÀ¶ïÒ^øð-»ô—¾< ný%ïÛ¿I{ãÀ¶ïÒ^øð-¡îç‚þ³¾&·qxäPÈÃÀ©¨#nJŸ7yßþq·ÊÞdçuåâÚEëoH‡8 ÷Œ‘Oö  )ÌüZéÃêßïs1k¥{¾Bó¯äoš|Î{‹O®Y-OÖm+"âËNkîJÓß68µPÉåïvXuŸZ÷¼VXr÷:2}ùgÿ9aùùZc´³ÔN©¥!êZ•g@£²9"DÛ Vãâ§5Z¾ÆÃ¨ÜŠ=ãoØß¿D¿+¿ç;ü‰çOONó -êE­Áõ-ûN qÿžŠŠ?˜ç/«ö.áê\þ_©¸Jßjiú…®­o£¥ÏͤËÊ9¡uxÜx«) ‘Í¢bhì”fv*ìUØ«±Wb®Å]Š»v*ìUثп,¬þ³­,ÄTAÉô‘Äij]ÚsáÇ]ä~·?³aÅ’û‡ì}œÛлv*ìUØ«±Wb®Å]Š»_óŸŸúÐߘ_öÚ“þ ˜«ä UØ«±Wb®Å]Š»v*ìUØ«±Wb¯ÕïùóoþO»Ÿüuù?mŠ¿©ìUØ«ù¡ÿŸÚäÓòŸþ#þ£gÅ_Œ8«±Wöûÿ8ÿ’CòÓÿÏ/Ý:Uïø«ñ‡þiÿ’³Êøú‚Ÿ48«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š¿»ÏÊoùAü³ÿl];þ¡“z*üÿŸÕÿäÐ?ð3±ÿºuþ*þ`qWb®Å]Š»v*ìUØ«±Wb®Å]Š»o¿ó‰ßù$?-?ð ò÷ýÓ¡Å^ÿŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»ÿ×ûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¬#óÓëzÁj"’¡€?9ÙÓáÊ<öpµðâÆ|·|Í;Î;v*ìUØ«±Wb®Å]Š»Ju½{MòÕœšÏ˜¯-ì,!’âæUŠ5ìä’†3ÔEŸ$¾üÒÿŸƒù3ÊÆ]7òæÚ_1_­TO½½šžŸm‡¨ôÿ%·gï›ý'³¹2oð™ü~)4üâüÎÿœ›üÄüÝõ-¼Éª½¾—'ý+ì+ooO yH?ã#?¶túNÊæÞ"ÏyÜþσ^#ˆU'`lše'¸y?ò7Ìžfã<ð>ͨ}[ª©#ü˜þÑö¨øåSÎ#æë3öŒ1õ³äú¯Éß‘~VòÇE©x´<î@ôÁöˆ|4ÿ[žbdÏ)rÙÔfí äå·ã½î‘^¤°ÂF *ªŠ@é˜Ü •ª~’÷Áá­»ô—¾>Û¿I{ãá­»ô—¾>Û¿I{ãá­»ô—¾>Û¿I{ãá­»ô—¾>Û¿I{ãá­»ô—¾>Û¿I{ãá­»ô—¾>Û¿I{ãá­»ô—¾>Û¿I{ãá­»ô—¾>Û¿I{ãá­»ô—¾>Û¿I{ãá­»ô—¾>ÛË|ãù]åo:òŸQ´^6ææÚ‘ÈO‹lU¿Ù)9~<²‡''²xù|«çùÇ]kHåsåÉS¶nDdý ü®ÿŸZMé韜S[¾Êu 0޾/žJ;’ŽþÈ3šÕû6FøÀþ¶uoÐï#þdy_ó*ËôÇ‘5[]NÚƒ‘êé^‚HͳªŸlæóé§€ÔÁ E3l¥Å]Š»v*ìUØ«±Wb®Å^ÕùIgðÞ_°êR%?y?Ã4¯>Q÷—sÙPç/ƒÙ³JíÝŠ»v*ìUØ«±Wb®Å]Ф·[Ò.äk›« YesVw‚6b|I"§Qÿ èõl²ÿ¤xÿæœUßá=þ­–_ôüÓŠ»ü'¡ÿÕ²Ëþ‘ãÿšqW„ô?ú¶YÒ<óN*ïðž‡ÿVË/úGþiÅ]þÐÿêÙeÿHñÿÍ8«¿Âzý[,¿é?ù§wøOCÿ«e—ý#Çÿ4â®ÿ èõl²ÿ¤xÿæœUßá=þ­–_ôüÓŠ»ü'¡ÿÕ²Ëþ‘ãÿšqW„ô?ú¶YÒ<óN*‹²Ð´Ý:O¬iövðKB¼â‰¨{U@4ÅS\UتY}¢éÚ›‰u+K{‡QÄ4±#:ÐlUþÐÿêÙeÿHñÿÍ8«¿Âzý[,¿é?ù§O!…-Ñ`U"E ª   Ø1ULU}¦Újh"Ô­â¸E<‚ÊŠà•ßK?Âzý[,¿é?ù§wøOCÿ«e—ý#Çÿ4â®ÿ èõl²ÿ¤xÿæœUßá=þ­–_ôüÓŠ»ü'¡ÿÕ²Ëþ‘ãÿšqW„ô?ú¶YÒ<óN*ïðž‡ÿVË/úGþiÅ]þÐÿêÙeÿHñÿÍ8«¿Âzý[,¿é?ù§wøOCÿ«e—ý#Çÿ4â®ÿ èõl²ÿ¤xÿæœUßá=þ­–_ôüÓŠ»ü'¡ÿÕ²Ëþ‘ãÿšqTùcQ`*¨(†*»AÞéÖºš5"¸ˆ7 ²¢¸ VŒ­ ÅR¿ðž‡ÿVË/úGþiÅ]þÐÿêÙeÿHñÿÍ8«¿Âzý[,¿é?ù§wøOCÿ«e—ý#Çÿ4â®ÿ èõl²ÿ¤xÿæœUßá=þ­–_ôüÓŠ»ü'¡ÿÕ²Ëþ‘ãÿšqW„ô?ú¶YÒ<óN*ïðž‡ÿVË/úGþiÅ]þÐÿêÙeÿHñÿÍ8«¿Âzý[,¿é?ù§wøOCÿ«e—ý#Çÿ4â®ÿ èõl²ÿ¤xÿæœU<†·E‚T‰*ª€€(`ÅU1Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯ÿÐûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¨ VÓëöW_ïèÍ”Œ³ø$q 2ÇŽ$w‡ÇäSc‹É5Š»v*ìUØ«±Wb¯5üÅüâògå5·×ÿ0u›]80ä‘;ržAÿ¤š©¾diô™5  û¾|™F\Ÿ›?šŸóòyî}M/òoHôSuŽª?…c·CÄx‚îÞñŽ™Òi=›òŸ€ý{hÅ\ßž^vüÊó_æ}çé?j×Z¥À'‡®ÿ»Ž½Dq­1슣:M>–@§d—JÒnµY–ÏM‚K‰Û¢D¥›îãeÊ .Fƒè)þ@jÜ.|Ï:ØÂw1GI&#ÀþÊýíî2&uÉÑj{j1ÚýϦ<«ä.ù8+èö‰õ?Þ‰y/Ì1û5ÿ$(öÊeræé3ëg›ê?ŒóôŸ¾CÃqmߤýñðÖÝúOß mߤýñðÖÝúOß mߤýñðÖÝúOß mߤýñðÖÝúOß mߤýñðÖÝúOß mߤýñðÖÝúOß mߤýñðÖÝúOß mߤýñðÖÝúOß mߤýñðÖÝúOß mߤýñðÖÝúOß mߤýñðÖÝúOß mߤýñðÖÝúOß myƒFÒ<ÕÕ¼ÁiÊÒœQ×ýWeúÉDònŨ–#q4ù¿ÍŸó‘¿+Ÿ(]ûý^äþ p#ý–\'Þî4ýµ[dúŸ6yÊz¯–¥ú¾¹i%»V˜UýVSôÛ¿Óꡘ\M¤š>¹ªyZö=kËW·:~¡÷w²¼2/Ƀøåy1Ç ©G››û§ò¯þ~'ç/*ôßÌËH¼Å§‚¸N6÷ŠÍ{œìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»ÿÑûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_$ùŽÏê¥å¥(gâ?É&£ð9×i§Ç|žWQ‘æ’åí.Å]Š»v*ìUø±ÿ9Yÿ9§ù¥y·\ü«òƒÃ Xi—Ohnm‡;¹”tUª#ä FªËәο²û 2KÔH¿';Õ—çî£{®]KªëW3^^ÎÅåžâF’GcÔ³±,O¹9ÒB"†Áœ2¯-ù;Vó+„Ñ­^T­ Ÿf1ósAôV¹`ºí^»Ÿë5å×äú3Êÿ‘V–Ün<Ósë·Sª|‹Ÿˆý~y`ƒÌê½ 2Û¯3Ïåý¯~Ñìôýg¢ÛÅmqПv=I÷$œx]D²›‘%6ý$|pxmvïÒGÇ mߤŽ>Û¿I|5·~’>8økný$|qðÖÝúHøãá­»ô‘ñÇÃ[wé#ㆶïÒGÇ mߤŽ>Û¿I|5·~’>8økný$|qðÖÝúHøãá­»ô‘ñÇÃ[wé#ㆶïÒGÇ mߤŽ>Û¿I|5·~’>8økný$|qðÖÝúHøãá­»ô‘ñÇÃ[wé#ㆶïÒGÇ mߤŽ>Û¿I|5·~’>8økh{©á¾‰­ocI¡qFI2‘îØx†&Á§‰ù£ò_DÖ9\hŽÚ}Áߊüqþ©5A ðÇÜé{w&=§ê"ùÇÍ_–šï–yKwoë[ ýx*éOµWý›GÚ¸µG¸ìoÁåÓ!£b2ÜD¾¥ü¨ÿœØüÏü¦ô¬¡úsFo©j¼¦â¾ÍQ*SöG"ƒù3Q«ìl9÷ª=ãõrIÿ¡}úMSN´Ôî"ô%¸·Šg‹—. è­v­ ¥{ç8ð’y™äPìUØ«±Wb®Å_]èVPÓ­lÈ¡ŽVùñüsÏ>9“æ^¯8 ’k•6»v*ìUØ«±Wb®Å]Š»2?ó—¿óð¯ùÈÊïÎO9~_ùÍÿQÐ4­Míìí¿Eirúq„Rœ¶®í¹;³pÿ¢£ÿÎNÿÔóÿr]þÈñWÑQÿç'êyÿ¹.ÿdx«¿è¨ÿó“¿õ<ÿÜ—Gÿ²,uÜOëyþÒ…d¾ñû{›^ìUØ«±Wb®Å_Ï'üçv‰ú+ó¯_™#½ŽÆéGúÖ±£w=Yöð¥3¾ì9ñiãåcí.~z_)An¤yKκ·•HM>^V¤Õ ’¥ìŸqô×'ê5ÝŸUõ ûÇ?ÚúGËŸ™>` ?W»?î©SþKt?ö̘HIä5—“O¿1Þ?HèÍ?H³…Ö»ôñÇ…]ú@øã®ý |qáW~>8ð«¿HxUߤŽ<*ïÒÇwéã »ôñÇ…]ú@øã®ý |qáW~>8ð«¿HxUߤŽ<*ïÒÇwéã »ôñÇ…]ú@øã®ý |qáW~>8ð«¿HxUߤŽ<*ïÒÇwéã »ôñÇ…]ú@øã®ý |qáW~>8ð«¿HxUߤŽ<*‘k~s²Ð#õ5 ~2*±®îß!üMFU+M¢É¨5ñèùëÍÿ™Ú®¾ÎÍ‘¨)øÜ”Þƒƹ9ÛÖh;#T½GÏ÷OTô*Þ]ј5­;API¾¼·¶uýì6§Ï*Ë.“Ü o§õvƒ`3Ëkx«±Wb®Å]Цz-§×õ [*TK2)ùü2¬óà=À¶á‡€ó}{œ{Õ»v*ìUØ«±Wb®Å]Š»v*þ0¿ç??õ¡¿0¿íµ'üA1WÈ«±Wb®Å]Š»v*ìUØ« òŸüw4Ïù·ÿ“‹Š¿½ÌUØ«±Wb®Å_ÍüþÓÿ&Ÿ”ÿðõ>*üaÅ]Š¿·ßùÄïü’–Ÿøy{þéÐâ¯Å_Œ?óûOü•žSÿÀ˜Ôø«ù¡Å]Š»v*ìUØ«±Wb®Å]Š¿§ïùò§þI ÿ;ïû§Xb¯×ìUØ«±Wb¯Èùý_þI ÿ;û§_â¯æv*ìUØ«±Wb®Å]Š»v*þ¿çÈ_ò„yãþÛ6Ÿõ qWíö*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯ÿÓûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å^5ù·iU²¿‹ÆÇçB?QÍ×dOœ}ÅÔv¬9ƒÅ3v銻v*ìUØ«ñþ~S¢›_Ì'XQHï48TŸ†â`áY3´önwˆŽé~€åa;>müòö—ænï@óº\[Ïa!@Û2ÈŽ„20 ƒN]7ú+›ùšu=³šx 'DÐYwž? oü¾Ï{åvkë1Sé0º£gú(ÉÉÆVài{j96ɱïéû- äR®¦„Bñc³”­èúœotð°]“<aÈü@{ÿ#øeÑÈC¦Õvt2oØôûr A=Kg¯Š˜|Æ\%n.–XÍwÖýðÛW†ï­ûãká»ë~øÚønúß¾6¾¾·ï¯†ï­ûãká»ë~øÚønúß¾6¾¾·ï¯†ï­ûãká»ë~øÚønúß¾6¾¾·ï¯†ï­ûãká»ë~øÚønúß¾6¾¾·ï¯†ï­ûãká»ë~øÚønúß¾6¾¾·ï¯†ï­ûãká»ë~øÚønúß¾6¾¾·ï¯†ï­ûãká»ë~øÚøj3êQÛ!–wƒ¹ÀM2Ž#Açúמ&``ÒGÐÈÃâúo§ðÊ¥“¹Ûé»0 ç¿“Ê/çvšv/#–cR~då%ßc"ƒ7òå±çYÙ~§§š<ªjÃü„Ø·Ïe÷ÈN6§µa§Û™î¤³ÎËíÈ>Y°²Ò!åyqyÊK™~)\$mQ^еað¨a]År°lµöN·&§)2;˧7ŸÎ7蟧5¼aÇÕœì:Õmäìv¢oíá×0ûJ|f¢~ÝžËbþ—3ÍÜ7b®Å]Š»v*Ï?-í>µ®E!#Ê~î#ña˜¥>G΃ÙðâÈ<·})œËÑ;v*ìUØ«±Wb®Å]Š»v*üâüÖÿŸ\~Mþqù»WüÏólúúëÕɺº×ÐÇrøÀÄ »±Å^}ÿDmü„ÿ–Ÿ3ÜFû&Å]ÿDmü„ÿ–Ÿ3ÜFû&Å]ÿDmü„ÿ–Ÿ3ÜFû&Å]ÿDmü„ÿ–Ÿ3ÜFû&Å]ÿDmü„ÿ–Ÿ3ÜFû&Å]ÿDmü„ÿ–Ÿ3ÜFû&Å]ÿDmü„ÿ–Ÿ3ÜFû&Å]ÿDmü„ÿ–Ÿ3ÜFû&Å]ÿDmü„ÿ–Ÿ3ÜFû&ÅQvóç¯È:êBÞç̾¬$©ËP€ŽHC ÿ£ô¨Å_ªx«±Wb®Å]о/ÿœ–ÿœü¶ÿœ¬×l<ãùŸ.¯þeõFŸu)éz/Ä) nNw¨Ú›b¯œ迟òÓæoûˆÁÿdØ«¿è¿ŸòÓæoûˆÁÿdØ«ôËÈ^M°ü¹ò΋ù{åó+iz›i¥ÚØ4† HVù°⃑Tö«,Å_8ÿÎKÎ.y7þr³B°òwæ|š„vuï×á:|é ú¾›ÅñI^.v Þ›â¯‹ÿ迟òÓæoûˆÁÿdØ«¿è¿ŸòÓæoûˆÁÿdØ«¿è¿ŸòÓæoûˆÁÿdØ«¿è¿ŸòÓæoûˆÁÿdØ«¿è¿ŸòÓæoûˆÁÿdØ«¿è¿ŸòÓæoûˆÁÿdØ«¿è¿ŸòÓæoûˆÁÿdØ«¿è¿ŸòÓæoûˆÁÿdØ«¿è¿ŸòÓæoûˆÁÿdØ«¿è¿ŸòÓæoûˆÁÿdØ«í¿ùÆÏùÆ(ÿÎ+ùfïò÷òÉï¤Òï5)uI¡2M'¯,1BÔdHÀ^0¥:×}öUô*ìUØ«±WÏŸó’óQÿœ¨òͧåïækßG¥ÙêQj‘>d†O^(e…jÎ’¼fzŠu¦ûn«âOú#oä'ü´ù›þâ0Ù6*ïú#oä'ü´ù›þâ0Ù6*ïú#oä'ü´ù›þâ0Ù6*ïú#oä'ü´ù›þâ0Ù6*ïú#oä'ü´ù›þâ0Ù6*ïú#oä'ü´ù›þâ0Ù6*ïú#oä'ü´ù›þâ0Ù6*ïú#oä'ü´ù›þâ0Ù6*ïú#oä'ü´ù›þâ0Ù6*ïú#oä'ü´ù›þâ0Ù6*ûþq›þq?É?óŠf§åïÊù5-uk˜î®£:LÁãN‰Hã §±Å_Lâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ÿÿÔûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®ÅXæM§Öt9d¦ #}üOàٟٳáÊ<ì8=£,~íß6gLó®Å]Š»v*ìUù;ÿ?9ÑjÞNók½5YŸñ…ã§úýOÈuίىýq÷½»|/ÿ8óqõO<é¨Maq ²…Èÿ†:Œ¿K­íˆña?½ú©ZuÛ*Ç'‡!âžsò™æ>S]EéÝSiãÙöé^Ì>E3.Ü>¶x9»Ÿ8kžG¿òë‘}k`v•oò‡Qú½òÞwƒ´!›nG¹*µåŒ•aÐŒ!žMù²ûMVBÜoþPþ91'_“虋°w®JÚ<6þ´ïÒ„ÿœÑJ~sh— ¼’Êë–+i#Sô3ƒóÍonχO/:kÒÈìþ€3€hv*ìUØ«±Wb¯dü¤´«Þߞʑ¯ÒI?¨f—µç°¼»~ʇ3ð{fi˱Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«ÿÕûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®ÅR­rÓëúuÕ*d…Ô|øš~9n ðL0Õšq#Éò&v(ìUØ«±Wb®Å_žóò]þ_iºŠÉi­Ä„ø$ÖóWþW:fçYHïé à_”•7_£üݡܔjÊÇÁ^@­ø¦Aé..¸qcò/Õ=JÓ®ÙŽO CÔ­:홸äÖCÔ­:‚37šˆy&³å+yXÍh2x🣷і˜[›ƒ](í-ÇÚÃ_O–ͽ9ÖžýŽB©Ø ¢bÂ2(C -r•,žÊd᫯€ë‰ ŽPy¥&꛹úß¾6¾¾·ï¯†ï­ûãká»ë~øÚønúß¾6¾¾·ï¯†ï­ûãká»ë~øÚønúß¾6¾¾·ï¯†ï­ûãká»ë~øÚønúß¾6¾¾·ï¯†ï­ûãká»ë~øÚønúß¾6¾¾·ï¯†ï­ûãká»ë~øÚøi…­¼÷#˜cþcü%#ü¦‘Ûõ–éù=gbF±ßyýOkÿŸoèßYüÁÖ5—[MHdzÍq_åF¡ëì3Gí,ëòûwr;?i³Škv*ìUØ«±Wb¯£,m>¯¢‰ÈÞy]þðÿƹÍö¤ø²Wp­è{6ŽûÏìzkœ÷b®Å]Š»v*ìUØ«±Wb®Å_’ŸßóöŸ)~Hùï]ü§Õ<£ªß]èWmi%Ì70,rPy(aP7³þ‹{äú‘õŸúK¶þ˜«)ò/üþOɾzó&ä›O&jðO¬j6šts=Õ¹XÚæeˆ3*B–©¦*ý•Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUùíÿ9ÿ?ò÷üâ™4Ï$ùË×úÄúžœ5šÒx£T_YââCîMPŸ§|•ÿE½òGýHúÏý%ÛLUßô[ß$Ô¬ÿÒ]·ôÅ_°ß–^xƒó7ÉÞ^üɱím¼Ã¤ØjÑA! ñ%åºN¨ÄlJ‡¡#jŒUœb¯’¿ç/ÿç-tŸùÄ-éžvó‘u¬A©ê#NHm%HÙÑyyûD#éÅ_žßô[ß$Ô¬ÿÒ]·ôÅ]ÿE½òGýHúÏý%ÛLUúeÿ8µÿ9§ÎRyÍM¸Ò­&»¹´×2$’Z©µ vÅ_Fb®Å]Š»v*ìUØ«±Wb®Å]Š»|±ÿ9wÿ9O¥Î"ù:Çó'ÌzUÖ±m}«C¤¬’$n¯-¼ó‡%ö NµaŠ¿:?è·¾Hÿ©Yÿ¤»o銻þ‹{äú‘õŸúK¶þ˜«¿è·¾Hÿ©Yÿ¤»o銻þ‹{äú‘õŸúK¶þ˜«¿è·¾Hÿ©Yÿ¤»o銻þ‹{äú‘õŸúK¶þ˜«¿è·¾Hÿ©Yÿ¤»o銻þ‹{äú‘õŸúK¶þ˜«¿è·¾Hÿ©Yÿ¤»o銻þ‹{äú‘õŸúK¶þ˜«¿è·¾Hÿ©Yÿ¤»o銻þ‹{äú‘õŸúK¶þ˜«¿è·¾Hÿ©Yÿ¤»o銿a¿,¼ñæo“¼½ù“cÚÛy‡I°Õ¢‚BâKËtQˆØ•BFÕ«8Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š¿ÿÖûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]оCÖìþ¡¨]YAΣäÓðÎÃøàx)š#Í+ËZŠ»v*ìUòGüç‘úWò{[•E^Î[•+˜Ñ»ŽŠäÿm3oØSáÔGÎÇØR„ºEÃX]A|‚­ ‰ êAþè$[VMÅ?g/ YTKª°sM <,ƒÔ­:æf95Àu+N¹›ŽMd0FÖ•ÌÈI¬°ûËpà« |™ ØçLuíÄ'n™sø‘öè7CTËWž_·ÔÅ\p—³¯_¤wį׮X¼ÇsϵûG¬³';~Ò¦ãéðúr©D‡o§ÕC6ÃcÜÇ>·ï·3ÃwÖýñµðÝõ¿|m|7}oß_ ß[÷Æ×ÃwÖýñµðÝõ¿|m|7}oß_ ß[÷Æ×ÃwÖýñµðÝõ¿|m|7}oß_ ß[÷Æ×ÃwÖýñµðÝõ¿|m|7}oß_ ß[÷Æ×ÃM4» Íaý+ËÓí7E_™Â,´æÉ"ä^§ùR$¼>´ßð£ä;ý?v\!N›6¼äÚ;µ1ž:a-1)IŒJxŽ˜î“‹;Uì d€qòNÙE”ˆÄšqI¶o§ZôÌYÉ ëN¶é¶aÎM€3½:צaÎM€?8ÿç!î¾¹ç½P)ªCèB¿ì!JÿÃW3´ãп³!ñûßpÏ´tn+æý}×í6Ÿm|½gqø¦rþÓÏè¼ýÎÌ—ê†rˆv*ìUØ«±Wb¯­|·iõ*ÎÖ”+ råSøœäu3ã™>oU§‡òNò†çb®Å]Š»v*ìUØ«±Wb®Å_Æüççþ´7æý¶¤ÿˆ&*ùzÿüãßþM?#ÿàM£ÔlX«ûÅ]Š»v*ìUØ«±Wb®Å]Š»v*ìUüÐÿÏí?òiùOÿ‘ÿQ³â¯ÆUØ«û}ÿœNÿÉ!ùiÿ€g—¿î*÷üUøÃÿ?´ÿÉYå?ü ‡ýAOŠ¿šUØ«ú½ÿŸCë<ÙÛkTÿ‰®*ý?Å]Š»v*ìUØ«±Wb®Å]Š»v*üÿŸÕÿäÐ?ð3±ÿºuþ*þ`qWb®Å]Š»v*ìUØ«±Wb®Å]Š»o¿ó‰ßù$?-?ð ò÷ýÓ¡Å^ÿŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»ÿ×ûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]оküȳú®¹,€PN‰(û¸ŸÅNt½›>,CÊÃÎöŒ8r=Ølb®Å]Š»xÏüäN‘úoòÃͶy7è{É•hI-fUõQO|ÍìÙðgþûvWó£禆©—ì×”æý/åT¯#q§ZÊO»D¤×®õëš æ^7áüöü×üàó‡æ/’t+[ WÔžæÒgÔ­"gŒ¢€J<—qÐŒUó·ýþrKþ¥Ë/û‹ØÿÕ\Uè¿”óìùÈO(ùóÊþk×<¿g›¦kzmíÓ®©dåa‚å$…YI$*“@*{b¯êcv*ìUØ«±Wb®Å]Š»v*ìUØ«±Wâgüüçþp»ó[þr[Ïššÿ(´«{ý6ÃDS¼·¶öåfú̲P,®¤Ž. @¦*üÕÿ¢OÿÎIÔ¹eÿq{ú«Š»þ‰?ÿ9%ÿRå—ýÅìê®*þ  <§©y ò¿É>Fó4k±¢ùkGÓobWW qkgR¨e%XR* ¨Ûzæ*üÕÿŸœÿÎ8yïþr[Èz•?(¬b¿Ô¬5±{:Ks ¸X~­,u +('“@kŠ¿?è“ÿó’_õ.YÜ^Çþªâ®ÿ¢OÿÎIÔ¹eÿq{ú«Š¿~?çÞ’>nÿœ}üŸ¶üºüÑ´ŽË]R¾¹hbž9ÔG3‚‡œL˸+¶*û—v*ìUØ«±Wb®Å]Š»v*ìUØ«ó³þ~gÿ8÷çùÉ?Êý'Èß”–Q_ëžeµÔ¥Š[ˆ­À·ŽÎî&nR²©!åA@k½zŠ¿ è“ÿó’_õ.YÜ^Çþªâ®ÿ¢OÿÎIÔ¹eÿq{ú«Š»þ‰?ÿ9%ÿRå—ýÅìê®*ïú$ÿüä—ýK–_÷±ÿª¸«¿è“ÿó’_õ.YÜ^Çþªâ®ÿ¢OÿÎIÔ¹eÿq{ú«Š»þ‰?ÿ9%ÿRå—ýÅìê®*ïú$ÿüä—ýK–_÷±ÿª¸«¿è“ÿó’_õ.YÜ^Çþªâ®ÿ¢OÿÎIÔ¹eÿq{ú«Š»þ‰?ÿ9%ÿRå—ýÅìê®*ïú$ÿüä—ýK–_÷±ÿª¸«¿è“ÿó’_õ.YÜ^Çþªâ¯êòÊz—¿+ü“äo3F°ë/–´}6ö%up—¶qE*†RU€u" z±W®b®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_ÿÐûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]мSónÎg~;‡‰¾ŠúÎnû"|ãñtÝ«Gàñ¬Ý:‡b®Å]Š»I¼Å¥.»¤ßèB·–³[šô¤¨Sz×ÇÃ'Š|î «ù… ž, ЃÛ=\8ó/ׯȋҿ—ZÉ5+nðŸoFWŒ¹sŸÕzr—ÖÆ²W©ZuÛ%ŽN R´ë¶fc“Q R´ë¶fã“Y R´ë¶fã“Q 2î TeÌá&7u\s1ÉÝC×"\ÜrDék¾òûŒúÖìNv§ù'ªþ¯l ²i£—È÷½óÊ>qÒüÇHm¤ôîûÁ%ÿ±ìÃåô˜ó:ìÚYbç˽é:ž·lÚv­wÒ}¤‘j>~Äv#qÛ1e*aŽg¸š/›¼ùÿ8Ós¾§ù!•EXÙLßöŽC±ù5ùG%O{Ði;\²|Ç铵+{½æM7U†Kk¨ŠU(Ê}Áß2¯“¾€7­ûá¶^¾·ï¯†ï­ûãká»ë~øÚønúß¾6¾¾·ï¯†ï­ûãká»ë~øÚønúß¾6¾kr\…Z–&€øÚ8G~_ÿÎ<ëÞfTÔüÌJÓ›p®¿éd?`{¾ÿä‘”OP'S«í8bÚ;Ÿ±õž…ä]#ɶßRÐm–*ŽCñHÿë9ÜüºÀeC!—7›Ôj'˜ÜêI|Í­éþ^‹ë¬Ë?ez»ª£sú¼s"µcÃ,†¢nse¶!ø±ªÜ5õÄײý¹¤yæÆ§: +g°Ç°§îüá>“ú/òƒC€íïnZŸå]H«ÿ «ú³Ï;v|Z‰yPû”Væ¡.Å]Š»v*Í¿/lþ·®[’*±”ÿ±SOÄŒÁíðâ>{9ºqd[¾šÎaèÝŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š¿ÿÑûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]мóó:Ïë:)œ à•$úÁÿfDzçÃ’»Çíp;JXï¸þÇÎYÒ<ó±Wb®Å]Š»5ߘšGè/7ëúZµõ½AéNéü3Ôô“ãÇw€~ÇoÒOùÄ›ŸÒ?—‚ùcÔ.`ûÂKáÿ{ÿ Óv—§/¼ž×_Áíº•§\§q R´ë™¸äÖCÔ­:æf95À5+N¹›ŽMd0=BÛ‰'3"m‡&)u\%È„˜åÔ=rÌÇ&7u\‰sqÉN #%]MA„Üds!+zß’ÿ<ïü¼Écætkë!Aêƒûô3³ý4?åf.LÉ£7gG&ñØý³¼æ}#ÎÃPòíÔw1Šs hèOgSºŸ˜ùf·,Lyº¬˜%ˆÔ…#<åùSåßÌ›_©y¦Íd‘A\GðO‘Æôÿ$ÕOu9DsroÓj§€ÜOãóÿó[þqSÍ>CYuŸ-ÖôT™ Oôˆ”¿",ý¤¯BYPfvlg±Ø½>µ!›izOÙó|¢n¨hzæe» ¯­ûãká»ë~øÚønúß¾6¾¾·ï¯†ï­ûãká»ë~øÚøooü¬üˆówæÃ-Ölm´ŠÑõ  Rº„Ú²eöŠæ>mTqóçÜàjõ¸ôÜÍžáÏö?Eÿ.¿çü±ùb©w ¤5•›ë••¿â¤Ýc«ö.s_=T²{ž[YÚ3ÔmÈwÓÞϵ˻M"ÞMCTš;{hÅ^IX*™;a…žN¸@ÈÐ|}çŸÏø¥gÓ¼>ªo&Zœhw?6ÿÍž-?{²ÃÙ½gòýožç¼ºÕgkíJWžáþÓÈI'û=³2"œÒ “KhºdÃ92h²aÜ™¬Y áÎLŠÒ 2N$³=:צÙ9( ëO¶é˜““` ëOµé¶aÎM€3½>Û¦aÎM€"<ë7è¯*ëz—C›vãæ!j¤åýSÌ98#rÌ?gÒ—©D:OèOËo*iäQ†e#–%‘‡SÝðÏ1íñæ™þ‘ûܰõÜÂK±Wb®Å]н{ò’Ï•ÅåùýˆÖ1þÌÔÿÄFiû^{ü7mÙPÜËà÷,Ñ;§b®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯ÿÒûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Фžd³úþ—yhYá~#ü *?—é§Á0|ÚuãO’³®yWb®Å]Š»v*þ¿ç(ôŸÐÿ›>i´¥9Þ‹ÿåâ$›þ7ÏIìyñéà|«äiÆËÍõüàõßÖt=H­M½Ý¼ôðõ£eÿ™y…Û"¥ä~Ïít} 7õÆ¥i×l×㓬!€êVvÌÜrk!€jVvÌÜrj!€êVvÌÌrk!€êVvÌÜrj!„^[ñ$fO5‰¦3u\‰f91˨zä ™ŽLnê¹æã“º‡ \ÌrAéºÎ¥å›´Õ´ ™m.ãû2DÔ4ð=ˆ=Á¨=ÆW8 .OÈ*BÃìÏÊïùËKI=ó:!m.ʺ„ Lmï,b¥}Ùj?ÉQš­F„ó‡É×gì“ÏËõ>÷Ðolõ›hµ="x®¬æPÑÍ ‡G¸e¨9¦É`ÑuF&ŽÏüÝÿœJò‡æêË©Ãè0½[ëöˆ)#÷ô[,•îß ÿ—M²Ì:ùaÛ˜îvš.Ôɧۘî? ¿'ÿ8ÿç<ïù%3Iæ›#6Ž[ŒZ­d¶zšÍJÆÇùd Iû<†ù¹Óë!Ÿ‘ß»«Öi5¸õ#Òwî<Þ õ“™Vçp;ë'^}dãkÀÏÿ.ÿ-üÓù­© Èzl÷÷;"‰OíK!¢"û±è*vʳgŽ!r4Ñ¨Í ŠfŸª“¿ó‚š“Zçæ|©®k Fˆ²‰¼ 4Äì?â³×4¹ûPÏhl>ߨòÚÞÚ–M±úG_ÙøÝö<ÖpÙÄ ("Pªªª¨À˜±•ºnøïó_þr{ËžP2é>V)¬êëU>“£DÝ>9Ú#ùR¾—6º}§¹Ø9Ú~Ì–Må°û_ù·Ïú÷æ××¼ÍtÒ€k ðÃúˆ63V=ÉÍÆ,C'm Â*!)µ‹¦\§&EkL˜pç&CmH8““!µ‹&9É‘ZÅÓ$IÉ•X[TŒŒäÐ7g:u·LÄœ›gZu¯LÜ›gzu¯M³rliÖ½6Ì9É´ùÿr4¯Ëvàš†(G‰õfD4éØŸ£«(üts4‘¹‡ä‘´¬"‰K;@©$ôgJ^Šé›DÓWFÓ¬ôˆéÂÒÞ()û³É²OŽD÷›sSLŠ»v*ìUØ«èÊÛ?CHk’7žf`}”ý`ç;Ú³¼•ÜÿfB¡}åé9¬v.Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_ÿÓûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]ЏŠìqWǺ¥§Ô/.,NÞŒ¯ü Ž)ñÄðòy!Á";Š,kv*ìUØ«±Wâgüç^“ú;óV{ÊSëúuÍi׈hkÓþ*÷ÎûÙÙñi븑úK››6ÿœ½¦·¯èÕþþÆŠxú2ñ¯^Þ¯‡öË·¦'ÏïþÇO®èN¥i×lÒc“«!€jVvÌÌrj!€êVvÌÜrk!€êVvÌÜrj!€jVvÌÜrk!€ê6´®Ù™ 5–#u\°¶ÂLnê¹æã“º‡®@¹˜äÆî¡ë‘!ÌÇ&9u\sqÉÝC× \Ìreÿ—Ÿ›þjü¥¼¾Q¼)nÌk9ªöÒÓù’¢‡ü¥*Þ ˜ÙôÑÌ=M™tÐÔ øõ~¤~HÿÎaù?ó¡ÐüÊË yè¢+—W™º~êc@ =ø¶ôRýsÕötñn7k¤ÔöTñoÇÛò}ÀtË}J ,5cžÚd)$R¨tuaB¬¦ ‚:ƒšs:Ü:ø’7ÏÏÏOù÷…æåŸÌ“&‰«5\éÓ62·RŠ´ûs¢„A¾lô½¶a¶MÇ_Úô>Û”6ɸïëû_’þjü”ó×’¼Åå÷˜´ øuùØ­½ªBҵŠ+’Ê¿å!aï=V<‘ãWÝïîz=ÿœå¼ú¶åí&¿ïEÕÌôÿŒ(‹ÿ33gØ‚å#ä>ßìv¹|©ÿ8³¥~˜üÙò½¡ð»{ÿåÞ›þ4ÌîÙŸžgʾdu‡›÷Ï<ÙÌv*ìUØ«±TM•±¼¸ŠÍ>Ô²,cæÆ™ Ë„ÜÎâ w¾ÅE¡Q@ Ã8Òmë@¥Ø«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÕûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»xwæÝ§‹;ñûq¼dÿªj?âG7½‘=Œ~?“¥íXnÁä¸u.Å]Š»v*üâÿŸ‹i^®‹år›ÛÞ][×þ3ÆãÿxoSì´êsxäkNq³ãùÅGô_æ—–n+NwmoÿI<>ùÿÚë'jG‹½×ò6ë5â_¸Z•§\áñÉÔÀu+N»fn95À5+N»fn95Àu+N»ff95Àu+N»fn95À5+N»fn95Àu+N»fn95Ã.à¥F\ÎcwPõÈ—3˜ÝÔ9æc“º‡ \ÜrcwPõÈ3˜ÝÔ=r$9¸äÇ.¡ë.f91»¨zä ™ŽJžU»¹Òµí6ÿNšK{˜®àhå‰Ê:0qº²AùeYb H=ÎDªQ ÷?®¥¼ ¥sÍx?·ó«ÿ? ºš÷ó»WŽiâ†ÓOX•˜€Û# ô’vîIÎß±#X¼ýï_Ùa½ñÍ´Y¸TäÈm¢é“$äÈ­¢Érd6ÑdÇ92h²AÄœ™´=2aÜ™ ´]2AÄœ™ ´90áÎLšÊß‘ÈÓŒM³}:× ÌYÉ ëN¶é¶aä“` ëNµé˜s“` ïNµé¶aä“h ëNµé¶aä“` ëNµé˜y$Øó³þsÂþ¾`дjïŸ%Å?ã4¥kÿ$³ØCÑ#ç÷Úìôcfÿ8)¥þüÒKºô2òãþ „?ó3#íøtõÞ@ý?¡Û`¿j3rÝŠ»v*ìU˜y Óëšå¢‘ðÆÍ!ÿ`¤Æ™…¯Ÿ#òrô0âÈ>o¨3—zWb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_ÿÖûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»y·æ•§¯¤-ÈÁ2±>Ì þ²3eÙS¬•ÞwiÂá}ÅóÆtnØ«±Wb®Å_ÿÎyé¤?,EÝú«iqÿ²Cÿ33}ìäøs×x#î?¡«0ÙùAù[ªÍþ_ÖIZj¶3’zR9Ñ~ìî5PãÇ!ÞÜ벋è»R´ë¶y¶9:‚¥i×lÍÇ&¢¥i×lÍÇ&²¥i×lÍÇ&¢¥i×lÌÇ&²¥i×lÍÇ&²¥i×lÍÇ&¢¡mBvÌÈ›aÉŠ]C× r!&9u\s1ÉÝC×"\ÈIÝC× \Ürc—PõÈ3˜ÝÔ=r%ÍÇ&9u\s1ɤÃMRÈÿËÌ?ñ1•dä\®-‹ú¸»uÏ<àx ?óž¾üéÖdñ¶Óÿê<ì»VñûÞ»²¥û‘ñûß)ÛE›`äÎLŠÚ.™ áÎL†Ö.™0áÎL†Ö,q'&CkL8s“"¶‹¦H8““!¶‹&9É‘ZÃZ “‰93 >Û¦S90iö½3rliö½3rméÖÝ6Ì9ɰu§ÚôÌ9ɰu§ÛtÌIɰw§ÚôÛ0ç&À’ó›¼üʸ²¿Q±´·§‡$3S¯üY^Ý~“Õö$k ÷“ú¿C´ÒŠ‹Ô?çݺW­æ/2k”?èööÕ§O^Rô­?â¯ìÖ{Q:„cÞIùÚítáú¿œc’ìUØ«±Wb¯Xü¦´õ/n¯ˆÚ(‚}.ÕÿsQÚó¨Þ~ïív½— ‘>_ö=ã4.íØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±V7©ùË@ÑnãÒ5VÆÒþ^>¼÷1G+ò4^(ÌÔì(78«$Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wÿ×ûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»cþk´úö{oJ“ 0éñÄfF’|óhÕC‹O“ó­ygb®Å]Š»|íÿ9e¤þ™ü¦ó5°^M¼W#mÇÕçŽRzÊ~ŽàfÓ±gÁ¨ó¯˜!†AaøAk#FÊñ’H ƒBÏHuÓNv7K®évZÜ`p¼¶†àS¥%@ùññ?<òÂ8$cÜiÔÈ1JÓ®ec“Q R´ë™˜äÖCÔ­:æn95Àu+N¹›ŽMd0JÓ®fc“Q R´ë™¸äÖCÔ­:æn95Â/-èHÌžkLfê¹å㓺‡®@‡7˜ÝÔ=r%ÌÇ&7u@¹¸äÇ.¡È2cwPõÈ—3:dTÔ¬Ïü¼EÿTÆÅËÙý; ß|àøß…󛿾üßÕäñ·°ÿ¨dη²…b½ë;._¹½ó%´Y³ ó“"µ‹&9ÉÛEÓ$IÉÛE“äÈm¢ÉrdVÑdÇ92hºdƒ‡92{ z‘‚Fš9³:Û¦Ù‰93iÖ½3$›gzu¯M³rliÖ½3rléÖ½6Ì9ɰu§ZôÛ0ç&ÐÖmÓlÜ›~ÿÎPê¥4|ÍsZð½ú¾ÿòïÃÿgsÙqáÁuü÷vÚqQµÿçÝš_¥ y—\ãþô_ÛÛò ßЈ½>WñÎkÚ‰ÜãàOÌþÇg€lýÎ]¹Ø«±Wb®Å_@þUZz:d×l>)¦4?ä¨~5Î{µ§s¸;îË…@žòôüÕ»'b®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_Ì'üäoüûþrÍÿš~eóO—´ûmIÖõ‹Ûè53©ÛEÆå2F²Çq*J +âŠàq¢’¼N*þ‡¿ ¼‘­þZþ[ù[Èu¾–»£é–W—JÅ•åŠ0¤+0 Ê´â¬À3€$â¯]Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«ÿÐûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»ZêJ8ª‘B=Ž Ò‘oŽï­ÄÖmÖ)3_òM3²„¸€=ï%8ð’;¹6Å]Š»`šúOéß$ùF§#u¤_D£ü¦Â‘î Ìø2Æ]Òz%ÉüçÀÙênºaý%~@ê_âË)êòs£YÄÍâÐÄ#c÷©Ï1íøyæ?¤~Ón¯ ܲýJÓ®CšH`:•§\ÍÇ&¢¥i×31ɬ†©ZuÛ3qɨ†©ZuÛ3qɬ†©ZuÛ31ɨ†©ZuÛ3qɬ†¨ÚÒ¹› 5–!u\°¶ÂLnê¹æc“º‡®@¹¸äÆî¡ë‘.d$Æî¡ë.n91˨zä ™ŽIvŸ5 SÿÅÿ\ÆÎP–ÏèÐ^ûçÀñ6üZÿœÆý÷æ¶«'Œ_õ™Óv`¬Cã÷½OfK÷#ã÷¾w¶‹6!ºrdVÑdÉ92XºdÇ92h²AÜ™¬Y0âNL†Ú.™ áÎLŠÒ2N$³=:צÙ9( ëN¶é˜s“` ïN¶é¶bNM€3­:צaÎM€3½:צaÎM 3­:צه96δë^™‡96δûn™‡96þr?2õoÓžj×u j/5;ÛŠÿÆYÙ¼€ùg¤é¡ÁŽ1î}Žã ýiÿœÒÿGþW­å)õýRòãçÄ$>?ñ_·ñÎÚ9ñj+¸úK±Â6}ŸšÇb®Å]Š»}SäËO©h¶PÒ„Ä$?9/㜦¶|y óû¶z}8qå÷îÉóÉv*ìUØ«±Wb®Å]Š»v*ìUØ«±W†þ|ÎG~_ÿÎ6hcÍŸ›z¼z|3[Kd[«§P*°B¿Ò£“l‰Pdu¸«óÕÿçõ?‘êÅWAó“HXéÔ>â·àâ¨í'þ=ù©^Ccy¦y³O‚W ÷W6m@þÓˆ/%þDlÞØ«ôûÈ^òçæŽ…gçŸËíJßVÐoÓÔ·»¶nHÀze «#ÊÀ«A«0Å]Š»v*ìUØ«óSó³þ~ùQù ç}_ò“Íú?š.uX⸖ÆÒÉíØÉJ84—‘¹\T]ëÛ|UåŸôZ¿Éú°yÏþtïû/ÅYw‘ÿçð¾pաе$ó—ã‚ ÝZÆl¬Æƒ›ZÜ\:ŠõbœW«08«õÆúÛS¶‡RÓfŽâÒâ4š¡pñÉŽJèËPÊÀ‚4#qŠ¢±Wb®Å]Š»v*øçþrKþs·ò›þqnát?ÌBâóÌN‹(Ñô˜–âñc}ÃÈ㊠FàI"3 Ô0ß|ÿE«üÿ«œÿéNÿ²üUŸþ[ÏÜ¿!¿0µ˜|µ|ú×–Ã,qÝë–Gj]¶¤·¸¸ôÅz´PV¥€© ¿N ž;¨ÒæÙÖHdPèèC++ ‚Ø‚:UWv*ìUØ«±Wb¯ÊO9Ïàÿ&¼‘¯ê¾KÕ´?7I}£ß\éó¼Z{FÒ[JÑ9B×ÊÅK)âJ©§P:b¯Ñ?ÊÍ +ó«Éº7æ§•¡º·ÒuËQwmê"N¨I‘cy»;|U髱Wb®Å]ФþaÖàòÖ•}æ;åw¶Óíf»•c¹HP»€Ij+Üb¯ÉŸú-_ä‡ýX<çÿH:wý—â®ÿ¢ÕþHÕƒÎôƒ§Ù~*úþqóþ~Iù3ÿ9­Çä.]ßèž`¸n–Zì[µÓ,/³DÎ{!píû*qWß«±Wb®Å]Š»v*üÖüÞÿŸ­~E~Rk“ù?×Õ¼Éyjí̺´ÛÅ"2zÓÏ9¼E×üªâ¯*ÿ¢ÕþHÕƒÎôƒ§Ù~*úwþqËþ~ù?ÿ95©(ù6öóKó#†h4½j·žp –ôZ9%‰ÈQÈ¢ÉÏŽühоáÅ]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»ÿÑûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ù϶ŸS×.”}™ Ê?Ù¨'ñ®u ñb'š×C‡!ù°üÍqŠ»v*§4)qÁ0å©V Šˆ4¯ærúÉô›Û.sY-¦’ùÆÅOB|צaÎM€3­:צaÎM€3½>צaÎM€'ú­àÐ4{ýu¨ÊÒ{’OOÝF_»1â8ä#Þ@mˆ·ópäÔÉÏRwÞ¿ùÅ=/ô?å?•í§;G¸ßþ^&’oøß<×¶gǨ™ó¯ØC“èLÖ²v*ìUتµ¼-s*[Çö¤eAó&™K„[(Ž#O±¡‰` dE >@Pg#fÞ´ ©.Å]Š»v*ìUØ«±Wb®Å]Š»v*þb¿çõ·s?çG—l^F6ñù>ÒDŒ“Å^MBô;РžüG†*òŸùÁ?ùÀ ?þsB׼˩yž}´kèm8l–äH$‹Ÿ"ZXéN”¡Å^ÿ9­ÿ8Çkÿ8™ùƒånŸ¬I­Å&—m¨ýj[qnÀÍ$©Ã‚»ŠNµ¯~˜«ö«þ|q,Ÿ•i¶y¢ÌîQ ªZÊß‘ ­|iŠ¿f1Wb®Å]Š»v*þ8¿çä?úÒ^~ÿ˜ÛOúƒ}oÿ8£ÿ>«Ò¿ç$+4Λß9Ýi3k?^åeš“,U½šÔRC:ÈEËìŠV«Š¿3¿ç!¿*¢üüÇóå5­ëj1hWÍh·o‰¥  ò(‚õéÈâ¯ê‡þ}‡y=÷üã/‘'½•å‘cÕb ìX„‹U»§²¢…QÙ@aоöÅ]Š»v*ìUØ«ø¦ÿœÛ•æüüüÆy™‡™u‰&‹1Uö<Ø«ôWþqçþ}¤~x~\ysófëÏZtºíŠÝµ¢i‘ʱÄqgRÝ:ñ«ò/ó{ÈÉùaç¿4~ZÁrבy{[Ô´…¹d™…•ËÀ$( ,•*iZTâ¯ìþp6îkßùÇÏËÉï$idýrrIâ…‘EOePð˜«ë|UØ«±Wb®Å]Š¿†/ùÈOüš~xÿÀ›Yÿ¨ÙqWõ½ÿ8ÿ¬óù{ÿlhÿäã⯯ñWb®Å]Š»yÿæÏü þfÿ¶.£ÿPÏŠ¿„F†êßÊü±J†ŒŽš|̬¤t ŠƒŠ¿‰¿(hkæ}wKòÔ’WQ¾¶´2È šUN@TV•­+Š¿n?7¿çÎZ?凑<Ñù•Ÿ.ï%òö‰©jëlÚTq‰•³Î#..¨bœkCJÖ‡~7~LÞÜi¿˜UÔtù˜5Ý2H¤CFW[” ‚:qW÷gŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ÿÿÒûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ðÍ›ONöÖøt–&O¥¿ñ¶o»"w;ßýŽ“µ!RËîþדfÝÕ;v*ìUØ«ùÙüïÓ?Aþcy«M§Mfùx$“3§ü+ ôþΟè¹ÃÈ7~²ϸuqyùwªi,k%žµ+à’ÛÂGü2¶r~ӳ߸—W©¿AŽ'9ÇŠjVvÌŒr`CÔ­:홸äÔCÔ­:æn95Àu+N¹™ŽMD0JÓ®fã“Y R´ë™¸äÔCÔ­:æn95Àu+N¹™ŽMd0»¸)Q—²„˜ÝÔ=r%ÌÇ&7u\s1ÉÝC× C›ŽLrê¹æc’Uk /mÏü]üHd$6rĶ~Ø}wß9®·åÇüäÏïÿ0õ Bÿ”#ÏöÙ´ÿ¨cоÿŸÉäû¶ÿÀgNÿ“÷8«ôþ|—ÿ’³ÍŸøú‚ƒ~Ïb®Å]Š»v*ìUüqÏÈõ¤¼ýÿ1¶Ÿõ*þ‡¿ç×úÌ^Fÿ·×ýÖ/1Wóƒÿ9ùÿ­ ù…ÿm©?â Š¿£ïùõÇþ³‘¿íõÿu‹ÌU÷þ*ìUØ«±Wb®Å_Åüæ·þO¿Ìü µ?ù>Ø«úžÿœÿÖyü½ÿ¶4òqñWòƒÿ9cÿ“¿ó/ÿ?0ÿÝFlUý_Îÿë<þ^ÿÛ?ù8ø«ëüUØ«±Wb®Å]Š¿†/ùÈOüš~xÿÀ›Yÿ¨ÙqWõ½ÿ8ÿ¬óù{ÿlhÿäã⯯ñWb®Å]Š»yÿæÏü þfÿ¶.£ÿPÏŠ¿„ÿœ±ÿÉ!ù—ÿ€g˜î6*þ0)ÿå7ò×ý¶tïú‰LUýÞâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š¿ÿÓûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*óÍ[?[KŠìŠ…ÕpAüi›NÊLŽðë{N{‹çìè] ±Wb®Å]Š¿ç24¿Ñ?›úÿÆ;Ÿª\§¿;Xùƒö÷\ôNŸž>V>Òãå¾ËÿŸdk\—Íþ_‘º:ê5¯¬’WýNƒæzf§Ú˜}÷¹ÕêÇ'êæròQk“‰¤Áµ+N¹—ŽMd0JÓ®fã“Q R´ë™¸äÖCÔ­:æf95Àu+N¹›ŽMD0JÓ®fã“Y R´ë¶fã“Q Pµ¡'2á+käÅ.¡É"c—PõÈ—7˜ÝÔ=rÌ„˜ÝÔ=rÌÇ$¢iwÿ‹Sþ$2X–ÏÖß®ûæ‹åmùÓÿ9ûï=_Iã·üš\ÚéEAè´ýÐøýï/µ‹2ƒ9ÉÛC’$äÈmbé“äÈ­bé’äÈmaé“$äËtûn‡+œšÃ:Óíºm˜s“` ëOµé˜s“` ïO¶é¶aÎM€3­>Û¦aÎM€3­>Û¦Ù‡96€Îôûn™‡96δûn›fäØ:Óí©Bsrlò÷üçN¯ú+òsZO½šÆÙH¯ü´¤„}*„|³iØâÔÇÊÏØ\8¹?´»ÖuM*󻸊§ZÈáE>üïòO€Ü´újŽ5…€T@@èØ òrmÌ_Š»v*ìUê•~®£=áCór)øš®Ö@ó÷;>Ë…Ìžà÷ÜçÝë±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»0?óú¿üúþ–?÷Q¿Å_`Ï¿åóÇý¶m?ê⯇ÿçò_ù>í¿ðÓ¿äýÎ*ýÿŸ%ÿä¬ógþÇþ  Å_³Ø«±Wb®Å]Š»_óòýi/?Ìm§ý@ÁŠ¿¡ïùõÇþ³‘¿íõÿu‹ÌUüàÿÎ~ëC~aÛjOø‚b¯èûþ}qÿ¬Åäoû}Ýbó}ÿŠ»v*ìUØ«±WñEÿ9­ÿ“ïóÿmOþO¶*þ§¿çÿõž/íüœ|Uü ÿÎXÿäïüËÿÀÏÌ?÷Q›Wßó€úÏ?—¿öÆþN>*úÿv*ìUØ«±Wb¯á‹þrÿ&Ÿž?ð&Öê6\UýoÎÿë<þ^ÿÛ?ù8ø«ëüUØ«±Wb®Å^ù³ÿ(?™¿í‹¨ÿÔ3â¯áwŸ›?òƒù›þغýC>*þñW÷ùŠ»v*ìUØ«±W€ÎXÿäüËÿÀ3Ì?÷N›?”ÿò›ùkþÛ:wýD¦*þÏ¿ç,òH~eÿàæû§MŠ¿ŒÊùMüµÿm;þ¢Sw¸«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯ÿÔûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*Æ|ågõíöTˆŒƒçåü3+E> €ùýû8Ú¸qc#ËîÝò®uo0ìUØ«±Wb¯Æ/ùøF—õÌ{IÃ{£@Äø¼sL‡þ.w>ÍNð‘Ý#÷¬˜ϵõƒmù…«hìiÞ‰+âðÜCOøVlÓBðƒÝ/¼[¬?l³†uÍ]Ž*ǵZÔÓ/„˜Àµ+N»ff95À5+N»fn95Àu+N»fn95Àu+N»ff95À5+N»fn95Àu+N»fn95Àu+N»fn95Áï-ø“™#u‰¦3u\‰rñÉÝC× \Ürc—PäK™ $ÑÃK˜üXŸ¬er\e³ô¯ë¾ùªày‹|/ù×ûÿ8ÞIãòis?¨½†_º½[EÓ29ÉÛE“äÈm¢ÉrdVÐäÉ92[z‘Œ8Çvo§ZôÛ1g&@3½:Û¦aÎM€3­:Û¦aÎM€3­:צaÎM 3½:Û¦Ù‡96δë^™‡’M€3­:Û¦Ù‡96δë^™‡96ËáÓZf16ØüóÿŸ“ëTü¾Ò4t4k½j9ºCo-GOæu=GOs³¼¤÷Gï!ÊÒ “òòLý7ù•å=:•VÖl¤qâ‘L²0ê:ªŸíΫ´§Á†gú'îvÐè·<ÉÈv*ìUØ«±W½þSÙúV¤PÍ0Qî«Ðv´î@w½Þö\*$÷Ÿ¹ê¹©vnÅ]Š»v*ìUØ«±Wb®Å]Š»v*ìUüÀÿÏêÿòwèøXÿÝFÿ}ÿ>Bÿ”#ÏöÙ´ÿ¨cоÿŸÉäû¶ÿÀgNÿ“÷8«ôþ|—ÿ’³ÍŸøú‚ƒ~Ïb®Å]Š»v*ìUüqÏÈõ¤¼ýÿ1¶Ÿõ*þ‡¿ç×úÌ^Fÿ·×ýÖ/1Wóƒÿ9ùÿ­ ù…ÿm©?â Š¿£ïùõÇþ³‘¿íõÿu‹ÌU÷þ*ìUØ«±Wb®Å_Åüæ·þO¿Ìü µ?ù>Ø«úžÿœÿÖyü½ÿ¶4òqñWòƒÿ9cÿ“¿ó/ÿ?0ÿÝFlUý_Îÿë<þ^ÿÛ?ù8ø«ëüUØ«±Wb®Å]Š¿†/ùÈOüš~xÿÀ›Yÿ¨ÙqWõ½ÿ8ÿ¬óù{ÿlhÿäã⯯ñWb®Å]Š»yÿæÏü þfÿ¶.£ÿPÏŠ¿„ÿœ±ÿÉ!ù—ÿ€g˜î6*þ0)ÿå7ò×ý¶tïú‰LUýÞâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š¿ÿÕûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*§4KצaÎM€3­:צه96€Î´ë^›fäØ;Ó­zm˜s“` ëN¶é˜s“` ëNµé˜s“` ëN¶é˜““h æÆßˆæË` ®V—äüüóÌ<þQòÌ2)–$¿»š0À°aHÉ@<^•ëÛ¦uþËã¡9{‡ßûýy—ÈŸó…ZKkœñ-š^Ý=+°[iOÐì¹´íìœ:yyÐûC¶€~ógž³v*ìUØ«±WÔ~F³ú–‡f„Q §ý™,?3•×Ï‹)ù|ž›Ecçóe¹ˆå;v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wóÿ?«ÿÉß àcÿuüUöüù þP<ÛfÓþ¡Ž*øþ%ÿ“îÛÿ;þOÜâ¯Ðùò_þJÏ6àLê Uû=Š»v*ìUØ«±WñÅÿ?!ÿÖ’ó÷üÆÚÔ «úÿŸ\ë1yþß_÷X¼Å_Îüççþ´7æý¶¤ÿˆ&*þ¿ç×úÌ^Fÿ·×ýÖ/1Wßø«±Wb®Å]Š»_óšßù>ÿ1ÿð&Ôÿäûb¯ê{þpÿYçò÷þØÑÿÉÇÅ_ÊüåþNÿÌ¿ü üÃÿu±Wõ}ÿ8ÿ¬óù{ÿlhÿäã⯯ñWb®Å]Š»v*þ¿ç!?òiùãÿmgþ£eÅ_Ö÷üàþ³Ïåïý±£ÿ“о¿Å]Š»v*ìUçÿ›?òƒù›þغýC>*þñW÷yù³ÿ(?™¿í‹¨ÿÔ3â¯á˜«±Wb®Å]Š»xüåþIÌ¿ü<Ãÿté±WñƒùOÿ)¿–¿í³§ÔJb¯ìûþrÇÿ$‡æ_þžaÿºtØ«øÁü§ÿ”ßË_öÙÓ¿ê%1W÷{Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ÿÿÖûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUò×ìþ¥®^GÙäõGüô¿YΫC>,cåòÙæu°áÈ~6)™n+±TE­¤×²­µœm,­ÑPOÝ‘œÄ™F&FƒØ<»ù]ön¼ÄÞâÏüI‡ê_¿4ÚžÔéçú¶Ÿ³:Ïäùgþ~ÿ8ÝæÎïËý6×ò²ÒõO/^½è² #y h™$Xj8´•âÁX¯ _жËÙ^؆99‰© ¾ã{_—ã“‘­ÒñÀ]ͼ¶÷z5Ü–„RÚßZÊÑ˪ÑˈhÊÊhÊÊE4 ç°ÆBbÆàý¯58ÓôÛþq—þsÎ÷Ë"ßÉrË}¤1Á«ï%͸èãv•óï"÷õ6ãÍöŸ` ž¼;æô>îï»Üë3éox¿`ô}bÇÌPkZÌWš}Ê ¸Ä‘ȇ¡VZ‚3œ  …ÑÀ"“,‚›ûn@°Ë!&$0=JÓ®fã“Y R´ë™˜äÖCÔ­:æn95Àu+N¹›ŽMd0 JÓ®fc“Q R´ë™¸äÖCÔ­:æn95Á/­¸“™q6Äb÷PõĹXäÆî¡È3’†’¡ÿ(~¼\e³ê®ûå<‚ß;yû÷úôòx¬ñ–DS¼ÑË÷câ“ÛE“ 92XºdÉ92hºdƒ‡92‹ zpHÓÍœéÖ½3rliÖ½3rliÖ½6Ì9ɰw§ZôÛ0ç&ÀÖŸmÓ0ç&ÀÖkÓlÄœ›@gzu¯LÜ›gZu¯M³rl”¨®û×1Ù¿9ÿç%¿ç;tÏ"‹&þOɧæÊ9µ¤µµn„'Q4ƒþE©ê_âLé;3°%—×—aÝÔþ¡ö¹xtÜ[—㙼˩ù«P¸ó™.æ¾Ô®œÉ5Äî]݉>`:°Û;¼ÿœjóv…æ ÿ>|åaõ/Üé3Yé‰sðÏpóÉzËzhà3qçÈäµ9çžÚvÆ,|fä$ « v¾û¯wWÙºbåO×O1~ZYê<®tr-nü)û¶úÙú6öÎ+MÚr†ÓÜ}¿µÈÔvtg¼v?cĵm÷D—êÚ”M~Éê­îØæïxåé²á–#R V\ÔìU|q´®± «1s€šÝ [ì[[u´‚;Tû1" ù(¦q³—'½ëcHŒ‹'b®Å]Š»v*ìUØ«±Wb®Å]Š»v*þ`çõù;ôü,î£м;þp¿þsÿPÿœ9Ñu¯-i¾Xƒ^]fò+¶’kÖ¶1˜ãáÄŠJ×­j1W‹Î^ÎN]ÎYùæ?Í-CGD–=6ßNú¬WáH…ä~|ÙÔú”¥;uÅ_¸¿óå ›Ê_2ÞÜC"[ÜyšC Œ¤,,àV*Nı§}ºâ¯Ù¸ÿÖbò7ý¾¿î±yоÿÅ]Š»v*ìUØ«ø¢ÿœÖÿÉ÷ùÿ6§ÿ'ÛSßó€úÏ?—¿öÆþN>*þPç,òwþeÿàgæû¨ÍŠ¿«ïùÀ?ýgŸËßûcGÿ'}Š»v*ìUØ«±WðÅÿ9 ÿ“OÏøk?õ.*þ·¿çÿõž/íüœ|Uõþ*ìUØ«±Wb¯?üÙÿ”ÌßöÅÔêñWð‡Š¿»ÏÍŸùAüÍÿl]Gþ¡Ÿx«ûüÅ]Š»v*ìUØ«À?ç,òH~eÿàæû§MŠ¿Š+kåkMó,q‰›N¼·»“Ä9†@üI¡¥iJÓ~Â~iÿÏãuÌÿ%ùòÖ!ÚYÅæPÒåuY$0‹Ûw€ÈÛ¨b¡ùR¢´¥F*ü¯üÑï|Áù‰å=Eîo®uÝ68¢ŒU™Ê¶IØ ÎØ«ûªÅ]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»ÿ×ûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUà_šö~–£àMóBkødÎàGqûÝjB¦xyhØfÕÖ=Ë¿—Ú¯N¶–ÇzûÆÊz|ÏÜs[©í(ãÚ;Ÿ±Øéû>Y7–Ãí{Ž XèQú:lA+öœîÍó=†h³j%˜Ü‹¹Ã‚8…D,Ö¼Åa Gêê2…b>Æîß!üzaÁ§–cQ©sj#ˆ\‹Ã|Åù‹«ò¶°­­©ÚŠ~6íÛä>ó›Ý7gGòÜýŽ—QÚɰØ}¯†¿ç ?ç<³ùã êÀ 3ÍH”‹Q‰¼  [„õ°o¶»PñOMÙݯ=®qîý]θ‹~.~d~Vù—ò‡Wo,ùâÍ­çÜÃ2Õ §8ž€2ý̽Tíæ“Y Tx oïö‰Åë_ó“žkü‡¼ ¤Ho¼¿+òºÒ§sé=z´gs”ý¥;sW ÇíËǬí.’ý}áÃÍ„Mû¥ù=ùáå_Îý$kžKº 4a~µe-æÙi§cû.µFÞ† Ákt4’á˜÷…×NÞ¶êPæ+©ZuÛ21É R´ë¶fã“Q R´ë¶fc“Y R´ë¶fã“Q R´ë¶fã“Y R´ë¶fã“Q R´ë¶fc“Y R´ë¶fã“Y .î Te鄘ÕÔ=r%ÌÇ$‚Xhêʯ C™löO®ûä¸%¼›Ìÿ¾Õ%“Ä'üDd§s¤—îÇÅFÚ,YÉÚÅÓ$9É‘ÚCRIÄ™¶g§ZôÛ1ç%iÖ½3rliÖÝ3rléÖ½3rliÖÝ3rmiÖÝ6Ì<’léÖ½6Ì9ɰu§[tÛ0ç&À1y¯Dü¿ÒfóOœoaÓôËqWšf ©èª:³Šª 1Ø”ãÅ,òဲ[cäüjÿœ–ÿœÙÖ4¾±åËã6“åFªHõãux½¨Aø#?ïµ;¶MxŽ×²û :o^MåöÖ|݆?å𦑢ê>h¿ƒAòí¬·ºÓˆá‚.îÇÀ¤ôs¶o2åŽ1Å#@9Ñ‹õ£þqÏþpNòQƒÎ_›I£¯­$‡OÚK[Vê õÈ?äZžœÈWWiöñÍèŰïêPû\ˆÆŸ¦>_ó†£åâÙýKnðɺýÁù}5ÎGQ£†n|ûÜ̹aå˹îÞ^ó¶æ"FônÏXd;“þIè߯Û4: ðïÌw»½>²9¶ä{™5å¾£ZßF²ÄÝUÅGû~ù ˜œ™ÀLQÝã~bü¯xù]yy¹¯_AÎÿìXõù¼æçMÚ—¶O›¨Ôvmo“Èî-å´‘­î‘£•MXGÐso ªQ14Sï'Ú}{Z²ƒ°˜9ù'ÆVcë'ÁŽGËïÙ¿I,€yýÛ¾¬ÎQéÝŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wóÿ?«ÿÉß àcÿuüUGþ}·ÿ8;ùuÿ9_å¿2ù‡óB]V;­'Q‚ÖÜi×1Â¥$‡™ä)*kî1W龑ÿ>|ÿœÓ/!¾»M~þ(˜3[\êJ"Ùs QÉCþK©÷Å_¥žSòžä]ÏÊN±·Ó4]>!­¥¬b8¢AÙTxš’z’I$’N*ÈqWb®Å]Š»v*þ8¿çä?úÒ^~ÿ˜ÛOúƒCßóëýf/#Ûëþ똫ùÁÿœüÿÖ†üÂÿ¶ÔŸñÅ_Ñ÷üúãÿY‹ÈßöúÿºÅæ*ûÿv*ìUØ«±Wb¯â‹þs[ÿ'ßæ?þÚŸüŸlUýOÎÿë<þ^ÿÛ?ù8ø«ùAÿœ±ÿÉßù—ÿŸ˜î£6*þ¯¿çÿõž/íüœ|Uõþ*ìUØ«±Wb®Å_Ãüä'þM?<àM¬ÿÔl¸«úÞÿœÿÖyü½ÿ¶4òqñW×ø«±Wb®Å]мÿógþP3ÛQÿ¨gÅ_Â*þï?6åó7ý±uú†|Uü!â¯ïóv*ìUØ«±Wb¯ÿœ±ÿÉ!ù—ÿ€g˜î6*þ+<‹£[ùÌš7—µÂÖÿQ´µ”¡£pšeFâH44;mŠ¿§Oú#oä'ü´ù›þâ0Ù6*úgþqãþpCòƒþq–ùüËù{¤ËqæVuMRo­\ÆZ¬[,qT¥£Ev_…˜ŒUö.*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«ÿÐûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìU‚ùãÊóyš;Xí⑹3ôÃsï¸f~‡T0}C…­ÓàR'ËÞHÓ¼¿I‘}{¡þînù#¢þ¿|†£]<ÛrÌ´ú(áß™ïd÷—°iñ5Õô‹K՜з˜°™¡»“9ˆ ;o"¸¹–îF¸ºv’V5fbI?IÍÄb"(:©HÈÙPÉ1v*¼ÿùwåÿÌý"_+ùÖÊ;Ë7^[Ú´4ÈNMAœéö½6Ì9ɘ ïO¶é¶aÎM€3­>Û¦bNM 3­>צaÎM€3½>צه96δû^™‡96δûn™‡96óÎ_ùÈo+~DXzºÜŸ\×%NVº\ =i<Îâ8ëÕØo¿r)—h»7&°úvOOÚ\ŒXŒßŠ_œßž¾iüìÕ?LyÂëý"ßT±†«on§²'v?´íWnæ€Ûè´ô‘¨yêÎË!H/ÊÈï4þwj_£<© ˜ ½B`E¼ø·í9e¬zìµawhãÒFçÏ êîT!oÚÉ?ùÇß+~GX}[ËÐýgV•»ÔçPg”÷ þû޽véȳ|YÁkûK&°Ü¶ä?Yór„iîy¯K±VÁ ÔuÀ—¤ywó"÷KãmªVêØmRx£Øž¿#÷æ·Sٱɼv?c°Óö„¡´·kÛô}zÇ]‹×ÓeO´½~c¨ý^£Í‚XMH;¬Yã”\JžµåÛ ~?KRˆ3ðÈ»:üð;{aÁ©–q?©´ñÊ=A…ùgÈrù{W7æEšÐDâ6èቄ|«¸ü37U¯±ðÕpôÚ†wÌSÔ3V슻v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wóÿ?«ÿÉß àcÿuüUôçüù{ÎZ–<—çX<ɪØéòK¬Z4kws%€· •À‘_ Uû•¢y‡Jó, }åËë]BÙÆÒÚL“ p*Y €A§Z㊧«±Wb®Å]Š»v*þ8¿çä?úÒ^~ÿ˜ÛOúƒCßóëýf/#Ûëþ똫ùÁÿœüÿÖ†üÂÿ¶ÔŸñÅ_Ñ÷üúãÿY‹ÈßöúÿºÅæ*ûÿv*ìUØ«±Wb¯â‹þs[ÿ'ßæ?þÚŸüŸlUý5Î þdyKIüò›ªëúUµÜ:À¡9þÔíèàôcÞ]ýë?ƒÜåcÅÞýtò×–4¯'iÐywÊöpØé¶ËÆ(!^*¤ü¡ó—ä·å.³åoÍMëCÕ®<Ów{µÚ€íØÙF² ±hÜ|Ôâ¯Ó|UØ«±Wb®Å]Š».ÿóó‡_?˜ÿžÞró·‘¼—ªjzýÕ³ÚÝÀˆc•VÒ%I`ve#èÅ_·?óï_ y‡ò»þqÿÊEüÀÓ¦ÒµûÒ¿Y³¸I«ª]Jœ€$|HêÃ~„b¯ÂÏùÌÏùÃ?Îß?~vùÛÎ^MòN«¨hº†ªóZÝBˆc–2Š),6Û~éÿϽ|æÊïùÇÿ(yóN›J×ìJýfÎà$~®©u*r‘ñ#« úоÏÅ]Š»v*ìUØ«ùÔÿœöÿŸe~ckÞ|Ö9ÿ# ÿiºýÄÚîŸëEå­Ä‡”¡FEš65(ú‚¼ e_¿ô óßùou¯ùŸó^*ùcÌ:£å=VûÊÞc·{M[MºšÊòÚAG†xÇ$mNêÊA÷«û%ÿœÿÖyü½ÿ¶4òqñW×ø«±Wb®Å]Š»"ŸóƒŸ>aüÄóv¿¢ùW¹ÓïµýRæÚd8É·r::ü]H#Jó†^PÖ|ƒù%äŸ&ùÊÎ]?ZÓô¤†êÖ`‘H‘ZUôæ*ìUØ«±Wb¬/ó#O¸Õ¼¥¯éZlm5ÝΕ} 1¯W’HUG¹$ Uü{ÐÿÎCå½Ö¿äZÍx«û üÈÓî5o)kúV›Mws¥_C kÕä’UQîIßô óßùou¯ùŸó^*þÏqWb®Å]Š»v*Å|õäûÌ/-ë>A×ùþŒ×4ë½2ëÓ<_Ñ»…¡“‰¡¡âƆqWò¡ùÏÿ>³üóü´Öîl|Ÿ¢7›|½ë³Ô´É"ç$f¥}[vq,nøþŒ6Ë#lqT§òOþpoóçËߘžQ×õ¯!êöÚ}Ž¿¥ÜÜÌñ§âŠî7wo‹¢¨$â¯ë¿v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«ÿÒûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUتO­èvšý¹²Ô£ª°ûH|Aÿ:÷˰g–qj͆9EIóg™|¯wå©ý+‘Î?»˜…‡ð>#:]6ª9ÅŽ}CÎê4ÒÂwåÞÆ³)Æv*ìUØ«±Wb®Å_7þ{ÿÎ3ùkóºÜÞܧy–4㥠IJL»z‰á¸eý– í;;µ§£47wêîaÛ¦aÎM€3­>Û¦aÎM '×™4$i’ùÍWqÙiðŠISÙT ÙePIì2ˆã–YpÄYm„ æçÇüåv¯ù’&òÇ”½M/˪ê ..‡üZÊ~?ïµ4þrÛS¥ÐvLpz§¼¾ÁîýnÏŸ‡sÍò®ƒ êžmÔ`ò÷–me½Ôn[„PB¼™ð©'`7$ ÙåËQâ‘ ØÂ߬ßó_ó†:_ý6þf¬ZŸ˜‡"µ =­«u‡i$Ì~?dçÚ½,þŒ[G¿©ýĂ*æû»9Ö×b®Å]Š»v*ìU0Ó4»báltøÌ’·aÐ{ ¯.QˆqI³#Ô_GùSÉöÞZ‹™¤·®>9Héì¾õ÷ðÎkW¬9Ïpîz.a罘æ–ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_ÄüåþNÿÌ¿ü üÃÿu±Wõ}ÿ8ÿ¬óù{ÿlhÿäã⯯ñWb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ÿÿÓûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Tý…¾§Ù_ ’*Xð>'!Æn<ØNb‹çO7y*ãËŽn`¬¶ ~î•èúô?†tz=hÎ(ìžW£8w† ™î±Wb®Å]Š»v*ļíä] óI›Êþr²Ž÷O›rŽ>$`6tañ#ŠìÊAú Ë´ú‰éåÅE[ñßþrþq+^ü 3y—ËFM[Ê@–3¬ö«á:¨¡QþýQÇù‚TÝvgmÃUé–Òû»õ}î.LTù£ÊžoÕ¼™©Aæ?+^Kc©[·(æ…¨Gˆ#£)èUVFnrâŽXðÈX.,ñß7ëä_üåÞ‘ù–!ò·Ÿ}-/Ì­DŽZñ¶»nƒ‰?ÝÈ‘ýƒRrzîÇ–T7Ú?XuÙ´æ;‡Ô•§]³]ŽN R´ë¶fã“Q R´ë¶fã“Y R´ë¶fc“Q R´ë¶fã“Y R´ë™¸äÔCÔ­ø†>Ç2¢mؼoë[¾àf:"ú°+ø“úòȺíI©3K+z‘†Fœ»8Ó­zm˜³“ ÖkÓ0ç&ÀÖkÓ0ç&ÀÞkÓ0ç&ÐÖkÓlÜ›aš_ž_üŸµã~ß[Ö¤NPXDÙ¯FïÁ=ÎçöAÞ’Óh¥©;l;ܬ8Gå—æ_æÏ˜?4µ«y¦äº!?W¶Ž« {"~¶5fîNtºm,4â¢>=K¶Å„@lþMþDù£ó¿PúŸ–áô4¸X ½F`DޤçztEß¡n+ñ }icÑ‹—>ƒ©ýCÍʆ.'ìÿäçäG•ÿ%4ÿ©ybWQ•@ºÔ'Ï1ëJþÂW¢.ÿ&« ]Ú95†åË è?îd`"öŒÀdìUØ«±Wb®Å]Чº—®üÅp-lWáÉ!û(­õ_ÄwñÍþ‹´OLùýÿµÑë4>ª<¾ç—æÕÖ;v*ìUØ«±Wb«]E(à2°¡pAÅ_œÿóßó„–ÚáŸÎ?“QÇi¨šÉ>“PJz“;FßäÝŸÙáJ7QÙ~Ðz3n?Ô{ûýüýí3Å|Ÿ–šæ‰w6‘¬A%­í»˜æ†d(èèe4 çe ‰‹‰°\YAö§äWüåõÿ”Ö*~e´ºŽˆ´Ho>ÝͰèWycãQöK4úîÈ=Xö=Ýê.}'ñ~ŒZêz™¬b×<¿så…ÂóŠhX2°ùŽã¡pv49¡£Rغ©ÄÇbÅõ+N¹•ŽMD0JÓ®fc“Q R´ë™¸äÖCÔ­:æn95óÍ^Ö‘¹ÿ$þ¬Ì„˜»åÿ¬bôÜSòšú¶Q·‹7ëË¡ÉÑëö™LÓ­ºm•ÎN ëNµé˜s“` ëN¶é˜s“h ïNµé˜s“` æÂÜ(æÔ I=Ì9ɰÊÿœ?ó•úËåŸË'K‹áT—R h¢=)5ßå€vçÛ;KÙ¼~¬œ»¿[³Óè‰Þ_'çÖ§«Ýj·2êZœÒ\]LÅä–V,ìÇ©$îNnâEkW'Üó_ó…úŸžý7þi¬Úg—Ú’Cd> «¥ê Wx£>'ãaöB‚¯œçjvüpú1o.þƒõŸ³îra‡½úÓåÿ/ižTÓàòÿ–í"²Ó­—„P@¡QGÈu$îIÜÉ$ç—,²ž)'«’'9v*ìUØ«±Wb®ÅYw•|¡sæYy-c³CûÉHÿ…_ú»æ¯Y¼÷9z]!Ì|»ßHéZU¶n¶:z‰~ò{’{“œÖ\²Êx¤ô8± b¢˜åmŽÅ]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«óËóþ}ƒùùŸæm[óÍVš³ëÕä××m¢ñ¡–f,ÅT.§aЦ¿–óìÿÈʽjßÍúO—¤Ôu;I[fÕn庎)Õ\BÄDÌê]‰Ýh@8«ïŒUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»ÿÕûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]мkΗœùê¾_O‹íIn½ýÓþiû¼3u¢íôÏçúÝF³AüPù~§ŠA¡ë›§NÖ;v*ìUØ«±Wb¯ž?=ç¼³ùáhfÔê>a‰8Ûjp¨æ)Ñ%]½Dö&£öYw®Ï³»Vz3¶ñê?Wqc( ?¿5(<Ñù3ª~ƒó¥©$,m®ã«[Ü(ý¨ßÇ¥TÑÖ£’ŠŒï4züz¸ñ@ûÇPãK&”ßÞaü¤½úÆ…/­§JÀÜØLI†Qâ?‘éÑ×KðäµZHjüú6˜d¿R?/?6ü¹ù¹cõß.ÍéÞÆ ÜØÊ@š#òý¥¯G]¼hßç³i¥§5/›¤Ï§–#ºu©ZuÛ'ŽN) R´ë¶fc“Q R´ë¶fã“Y:Ö­i¦Ÿ²ß«3qÉ€¾ úÆ[o[À÷¯Ëøým.)?Êø‘ËAÙæûD~ôü>ç°éö½3rqgz}·M³rliöÝ3rl:ÕüÃ¥y7O}wÌ—)kgV~¬{*¨Ý˜ö˜Ü'! ß‹Èh>üÝÿœŠÕ|ÿêèz=?Ëæªb’ÎØìUØ«±Wb®Å]Š»z'“¼‹6ºË¨ž Gf’—ÛÄýÞÚÝf¼aôÇs÷; &ˆåÞ[½ô-­¬VQ%­¢âAEUg=).ú1ò,Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_ÿÖûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»y§œ¼…²RÒ€Žû«/E“çàÞýûøæÏE¯8½2å÷:íf„dõGŸÞùþx$µ‘­î¤¨J²°¡xŒè#!!aÑJ&&Š–I‹±Wb®Å]Š»v*Åüãä½óJŸÊþp²ŠûM¸RŽ„teaB¬;2ñËpg– q@ÑR-øÛÿ9ÿ8}®þR™üÓäß[Wò’ÕÝÀåsh½|ª>$ýÚ¢ƒöÂl[¸ìÎÜŽ§Ó=¥öwêj”#h^dÔ<·{µ ÜÉi}rŽXšŒñ¡b6;fîqwiž!!Eú7ùAÿ9A¦ùÝbòïžÚ; pÑ#¸ÙmîA×hÜø„Ÿ²A!sK¨Ðœ{Çqö‡Iªìó ã¸} ©ZuÛ)Ç'RCÔ­:홸äÖCÎuÛZA1§ì7êÌÌr`ïάf]½Ÿê_ʘým <^_ø™Élòݨ+)ø}ÏsÓ­zm˜³“„:Ó­ºm˜y$ØüÄüáÑ, 0LEÞ²ëX¬Ñ·èÒØ_øcØR¤W '/¹Øi4RÏ¿!ÞüøóÏæ.³ùƒ|u_1Üs+Q)ðÅŸÙEíîMXþÑ9²Çˆcš8…Eè_’ó~jüô¾ô´þ©£Dánµ9Ôú1øªŒ’Söør* s _ÚxôcÕ¹è:þÀäÆÚÿÉßÈÏ+þIiŸ¢ü§oÊòU[¿˜qpÃù›²ƒöQh£®íV<»´2jås;tã½´ {a%Ø«±Wb®Å]Š»v*õß&~^›®®¾…aÙ£€ì[ݼ·~ûuÓë{G‡Ó}ÿ©Ûhô^©ü¿[ÜUBˆP(Ø3DM» )v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿ×ûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ÂüÙäËo2FfJE|£à’›7ù-â=úÃ3tšÓ€×1Ýúœ=VŒfÈ÷þ·Î:Ž›q¤Îö7ñ˜æN ÷ ÷Ç:LyAqyü˜Î3E–5»v*ìUØ«±Wb® C¸8«ó›þr?þprËÍ^¿œÿ&ãŠÇY5’}*¢;kƒÔ˜NË ‡ùv‰¶þïrÝ/fvùÇè͸ïê=ýãí÷ ‡ä~¯¦ßùvö}]¶–ÏPµsÐN…$FC+PŒì¡L\M‚ƒÓŸ“ßó“wÞRyoÎæKýQ#›íOn;PŸ¶ƒùOģ욹‡ŸF%¼v.«YÙƒ'ª°¾ìµÔ´ÿ2ÙG­h7ÝÙL9G,MU>#ØŽ„ÁØŠæn&‹ÍåÆ`jB‹ ó­-§?ñ[þ£™˜äÔïÊO_6÷<´?%bõ¼µm'Œ“ÉÑ”žGµ…f?¹ô ”+ú’¨ –$Ð:’srpb;~fÿÎFŦ¬šåó,—¤—äUÄDÌË?€=A† ÞNÿEÙ$ú²|¿[ãK½B{ùžîîGšâV,îìY™‰Ü’w$æ_' Ž06ÐùÇ/ùÁýKÎ?Wó—æòK§hmI!ÓwK«•ê áŒøxò 1æ»O·†/F-ÏAîï?c>뮇¡iÞY°ƒBòý¬VZ}²á‚ˆ£°ññ;óÉäîç«æ¥Ú;v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÐûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUy‹ËVždƒê÷cŒ«_NP>%?ÄxŒÈÓje€Øø‡Q¦ŽaGæù¯]Ð.ü½plï×cº8û.móG”®¼³7ï?yhç÷s±ö>õöΗK«ŽqçÔ<î§K,'˽Šf[ŠìUØ«±Wb®Å]Š»c^nòv‹çÝ*ãÊþo²ŠÿK¹^2C2Ô{0=U‡Ue!”îË0æ–q@Ñ ŸŠŸó“ó„Úçå?Ö<ãùx&Õü¤µ’D§+«5ê}@ï#ïŶ¢œiÙ½·G¦{Kì?·É¾𮟬\éS¥þ›3ÁsªIa]ŽãÄl}³zwgšY›é=A´òý¸³°Zww?iω?àÎk>¢YÉè°`ŽA:ÊŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÓûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb«]E1È+" ƒØá”‹xWœÿ/šÇž«¡)kµ$#ržëâ¾ÝG˦÷EÚ~™óïïtšÍª»žM›wTìUØ«±Wb®Å]Š»v*µË+kúÝu½Êë^ÓA[KÙaVš |ŠìwZý’IZrØj'˜@<Ã!23\©‹±Wb®Å]Š»v*ìUØ«5ò—“.<É žJÅb§â’›·²xŸ~ƒðÌ^´`Ì÷~·7K£9òÿ©ôvŸ§[éP-•„b8S ¬žçÜç7“!Èn\Þƒ1ŒTQ¹nÅ]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÔûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š¼ÎŸ—ËwÏUÐP,û´ ƒø•ð>Ýþ}vú.ÑáôÏ—B굚/T9÷<5Ñ£c€«) ‚(AŽoA·JE-‡b®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«Ó<›ä5Ž:–¬ v=U:4ŸÑ}ûöñÍ^·´/LyýÎËG¡9=Rå÷½þ#¶`·P‘ ¢ªŠ=†sò‘‘²ïDDE\ v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»ÿÕûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»yçœ|‹¼­}aH¯Àù,žÍà|ßí±ÑëÎL·s«Ñ »Çc÷¾zºµšÊW´»CÈhÊ„è¡11aÐJ&&Š$ÅØ«±Wb®Å]Š»v*ìUØ«±Wb®Å[» UìÞKü¼¯ WÌ ¶Í»~Çük÷øf—[Ú?ÃâWëw=ñOåúÿSÚPliÃx«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÖûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ļÓå_2ÅV¤wˆ?w0ü›Ä~®Þùz]d°ñÜâê´ƒ0óï|ݪé7Z-ÃXêRUû˜v ÷:\Y£”qEçrâ8ÍI-ËZÝŠ»v*ìUØ«±Wb®Å]Š»T†¸u‚/#ªª*I= YH°{ï“<ƒ“ÃSÕÀ{ÝŠ'Uú·¿AÛÇ9ýohž˜rûÿc½ÑèF?T¹ýßµéù«vNÅ]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»ÿ×ûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìU#×¼¿iæ+ª_®ãt‘~ÒXï—éõÂn-9ðG0¢ù¯Ì>\»òåÇÕ¯Ecjúr²ãÛßÄgM§ÔÇ8±òyÝFžXM›̇Ø«±Wb®Å]Š»v*ìUa§Üj“¥•ŒfIœÐ(ýgÀç!“ Æ.\™Ã™ ú7Ê>K·òÚ ‰©-ûŠNË^¡}½úŸÃ9½f´ç46ŽoA¤ÑŒ;Ïã“7Ì5Ø«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_ÿÐûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUتRÓ-µ{v±ÔI ö=AìAìFY‹)Æx¢Ã&1TŸ8y¯É×>Z“Ô–ÉÏÁ(?ÉoøÀtšM`Î;wêyíVá=㽆æk†ìUØ«±Wb®Å]Ч&…w¯Ü ==*z³Ÿ²ƒÅù×¶QŸ‹k¡[­–žœPnIûL|X÷9ÍfÍ,¦äô8pǨ¦¹Sk±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ÿÿÒûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb­2†XTˆ8«Ä¼éùzbç«h Tݤ·G‰Ooò~ï¼Ñvúgð?¯õºmf‚½Pù~§ŽæåÔ;v*Ï<¡ä‰üÂÂîê±iêwÚzv_âz|ó_¬× ; ÏÝïs´š#›s°ûßEYYA§B–vQ¬p ¢ªóßÄç;9™›;— „VA“±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÓûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]м³Î—é©òÕ4U wÕâ '¸ìð?=ók¢íÓ>]ýß±Ök4~¨sîïx,‘¼.ÑL¥]I ¬(AˆÍø7¸tdVÅê^Lü¿mK†©­©K]™"èÒx࿉ùf«[Ú˜sïîý®ÏG ãõO—wì{Äq¤(±D¡Q@  P:3BMî]ذ_.Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯ÿÔûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»H/|¯¦ê‘ê·p+\Gß³S§!Þ«™ÕNáf‰é¡9qº˜íîÅ]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š¿ÿÕûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÖûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wÿ×ûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÐûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÑûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÒûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÓûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÔûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÕûùŠ»S–TyØ$h 31 nI' « ÿ•¡äÏú˜´úO·ÿšñWÊÐògýLZGý'ÛÿÍx«¿åhy3þ¦-#þ“íÿæ¼UèÞcÒ|Æ?—¯ío㌅vµ& Nà„ÐüñTçv*‘k^hѼ·éÿˆµ;[—§õ«ˆáçÆ•ãÌŠÒ¢´ñÅR/ùZLÿ©‹Hÿ¤ûù¯wü­&ÔŤÒ}¿ü׊¶?4<šM˜´‚Oü¿ÛÿÍx«9Å]Š»a2þeùBh'ó’’!*Ê×ÐØ‚ ìF*§ÿ+CÉŸõ1iôŸoÿ5â®ÿ•¡äÏú˜´úO·ÿšñTïEóf‰æF’?/jVWïAkqÅAèX#WµqTÿv*”ëö™åèVó_½¶±·f²]L‘!b È &žØ«ÿ•¡äÏú˜´úO·ÿšñWÊÐògýLZGý'ÛÿÍx«¿åhy3þ¦-#þ“íÿæ¼Uš[ÜEywv’,°JªñÈŒYXT2‘±nÅU±Wb¬BûóÊÚ]Äš~§®i–÷Q2E5ä(è|Y犡?åhy3þ¦-#þ“íÿæ¼Ußò´<™ÿS‘ÿIöÿó^*™é>vòî¿?Ô4-^Âöç‰JÚê)_ˆêx£A㊲|UتRÕ,´kwÔµ‹˜m-#§9§‘cjh*Ì@&ƒ~¸«ÿ•¡äÏú˜´úO·ÿšñWÊÐògýLZGý'ÛÿÍx«¿åhy3þ¦-#þ“íÿæ¼U–éú•¦¯o£¥OÕ¤ ˜æÖHØCÅ”wØâ¨ÜUØ«Õ|ñåÍ àéúÞ±§ÙÝ( a¸»Š'î W`h{b©oü­&ÔŤÒ}¿ü׊»þV‡“?êbÒ?é>ßþkÅQºŸü±«ÜG§iZÞ›uw)"8`¼†ISÅU‰; ì1V[Š»CÝÝÁa —·Ò¤6ñ)y$‘‚¢(%˜Ð;“аßùZLÿ©‹Hÿ¤ûù¯wü­&ÔŤÒ}¿ü׊»þV‡“?êbÒ?é>ßþkÅY6‘®iÞ`€ßh7–÷¶ÁŠm¥ISê9!"¢£lU4Å]бígÍÚ—$K0ê–Vȼ‘.®c…™kJ€ì ßò´<™ÿS‘ÿIöÿó^*ïùZLÿ©‹Hÿ¤ûù¯U·üÉòÔ©kk¯éRM#DK虘ÐÔ’vb¬×v*Ó0PYܓаoùZLÿ©‹Hÿ¤ûù¯wü­&ÔŤÒ}¿ü׊»þV‡“?êbÒ?é>ßþkÅSýÌÚ?™Gòî¡i~±$6³Ç0BÝ9p&•¡¥qTïv*’k^fÑü¶±¿˜µ K”‘ºž8C•ëÇ™¥EiФò´<™ÿS‘ÿIöÿó^*ïùZLÿ©‹Hÿ¤ûù¯wü­&ÔŤÒ}¿ü׊³„uu„" Á]Š»aW™>Qµ•ínµý*9£bŽ}²²šAz‚ÄUKþV‡“?êbÒ?é>ßþkÅ]ÿ+CÉŸõ1iôŸoÿ5â©Æç ÌRµ¯—õKù‘yºZÜÅ3*Ö•!*i\U‘b®ÅR½_\Ó¼¿¾×¯-ì­‹ÜÊ‘'#ÐrrMØ«ÿ•¡äÏú˜´úO·ÿšñWÊÐògýLZGý'ÛÿÍx«¿åhy3þ¦-#þ“íÿæ¼U™Z]Á w¶2¤Öò¨xäƒ#©XT{Š¢1Wb¬KPóÿ–4‹‰4íW[Ómnâ I ÷Ç"’*9+0#c]Æ*‚ÿ•¡äÏú˜´úO·ÿšñWÊÐògýLZGý'ÛÿÍxªe¥yãËšíÀÓôMcO¼º`XCow®@ܨÄÐwÅYF*ìU¨jVšE¼šŽ«ßþkÅY^™ªÙkVé¨è×0ÝÚI^[ȲFÔ44e$ºâ¨üUØ«Õüëåï/Î,uíZÂÊä¨qÍÔQ?Ðñv†‡|U+ÿ•¡äÏú˜´úO·ÿšñWÊÐògýLZGý'ÛÿÍxª*Çó ʺœñØiºæ™qu+Ž(¯awv=•U‰'Øb¬Ãv*£qqœR]ÝȱA³É#°UUQRÌNÀ¹'aò´<™ÿS‘ÿIöÿó^*ïùZLÿ©‹Hÿ¤ûù¯wü­&ÔŤÒ}¿ü׊²M^Ó<à ^h¶×ÖêÅKY’T %K!"´ ÓßM±Wb©µæÍËm~aÔ¬¬PLbêâ8KÔ¨v§zb©'ü­&ÔŤÒ}¿ü׊»þV‡“?êbÒ?é>ßþkÅU"üËò„î°Aæ %ärUo $“°ÜœU›b®Å]аfüÏòr’­æ ±þßþkÅZÿ•¡äÏú˜´úO·ÿšñWÊÐògýLZGý'ÛÿÍxª{¢ù£Fó'©þÔlïý>§Õn#›‡*Ó—iZWÃOqWb©>³æ-+Ë‘¥Ï˜o­l"‘¸#ÝL«5+@\€M;b¬wþV‡“?êbÒ?é>ßþkÅ]ÿ+CÉŸõ1iôŸoÿ5â®ÿ•¡äÏú˜´úO·ÿšñVm©:,ð0xÜVSPAÜGPqULUØ« ºüÆòŒÒYÞëÚ\71I#’öte4*Ê^ ƒ±Pÿ•¡äÏú˜´úO·ÿšñWÊÐògýLZGý'ÛÿÍxªm£ùËËþa™¬ô VÆúáT»Gks® F&• Wßd˜«±T·UÖtýÜêåÜV …2Üʱ ' ää žØ«ÿ•¡äÏú˜´úO·ÿšñWÊÐògýLZGý'ÛÿÍx«¿åhy3þ¦-#þ“íÿæ¼U—ØßÛj–ñêdÑÜZÊ9G,.x«) –*‹Å]бMKÏžYÑ®MÖ5­:Òî:s†{¸c‘j**¬ÀŠƒQ·LUÿ+CÉŸõ1iôŸoÿ5â®ÿ•¡äÏú˜´úO·ÿšñT~›çÏ,ë7 ¦èúÖww%xCÜ2HÔ4UbM©Û¦*ÊñWb¨Këûm.ÞMCSš;{X‡)%™Â"f óÅX‡ü­&ÔŤÒ}¿ü׊»þV‡“?êbÒ?é>ßþkÅ]ÿ+CÉŸõ1iôŸoÿ5⬧KÕì5ËuÔtK¨/-³[Ȳ¡ ЀÊHØõßLqWb¬oXó——ü½2Ùëú­Ã(uŽêæ(œ©$ ì *¯¶*”ÿÊÐògýLZGý'ÛÿÍx«¿åhy3þ¦-#þ“íÿæ¼Uiù‹åMBxìl5Ý.{™˜$qE{»³U I$ôfX«±U9eH§‚F€³3ä’zаŸùZLÿ©‹Hÿ¤ûù¯wü­&ÔŤÒ}¿ü׊»þV‡“?êbÒ?é>ßþkÅYæ-+Ìq½Ï—¯­oâ¸;ÚÌ“*µ+BP ;b©Æ*ìU"ּѣyoÓÿj6v·/OëWÃÏ+Ç™¥Ei㊤_ò´<™ÿS‘ÿIöÿó^*ïùZLÿ©‹Hÿ¤ûù¯m3üœÄ*ù‡H$ì¿·ÿšñVsŠ»v*Â$üÌò|.ÑKæ %]IVV¾€FÄ_b1UŸò´<™ÿS‘ÿIöÿó^*ïùZLÿ©‹Hÿ¤ûù¯Nô_5èždi˺•ûDZÜG1@Ý9pcJÐÒ¸ªŠ»JuLòô+wæ Ûk¸,—S$JZ• .@&ƒ¦*Æÿåhy3þ¦-#þ“íÿæ¼Ußò´<™ÿS‘ÿIöÿó^*ïùZLÿ©‹Hÿ¤ûù¯f¶÷]D—V®²C"‡GBYXTFĸ#UÅ]аûïÌ/*é“Éa©kše½ÔLVH¥½…vefcŠ¡åhy3þ¦-#þ“íÿæ¼Ußò´<™ÿS‘ÿIöÿó^*šiuò÷˜'6:­a{r¹ŠÚê)_ˆêx£AQ¾*ɱWb©~©«Xè–Í©k70ÚZ%Íq"Çò4f “A¿\UŠÿÊÐògýLZGý'ÛÿÍx«¿åhy3þ¦-#þ“íÿæ¼Ußò´<™ÿS‘ÿIöÿó^*ËtýJÓW·QÒ§ŠêÒPLs@ë$l¡âÊH;ŠlqTn*ìUŠêžzòÞ‡pÚvµ¬éÖwhhn.áŽ@TUY±T¿þV‡“?êbÒ?é>ßþkÅ]ÿ+CÉŸõ1iôŸoÿ5â¨Ý?ÏþXÕî#Ó´­oMº»”‘0^C$Œ@©âªÄ…v«-Å]Š¡¯/môè$¾Ô%Ž hT¼’ÊÁu,Æ€âqVÿ+CÉŸõ1iôŸoÿ5â®ÿ•¡äÏú˜´úO·ÿšñWÊÐògýLZGý'ÛÿÍx«&Ò5Í;ÌíòÞöØ1C-´©*rG$$TTmЦ˜«±V;¬ùÃAòì«kæ RÆÂg^h—W1B̵¥@vŠŠWIÿåhy3þ¦-#þ“íÿæ¼Ußò´<™ÿS‘ÿIöÿó^*ÿÿÖûùŠ»C^ÙÁ¨Û˧ßF³[OE,n*®Ž(ÊGpA¡Å^'ÿBÍù[ÿR½‡ü ÍX«¿èY¿+êW°ÿoù«wý 7åoýJöð-ÿ5b¯@ògåÏ–.âžÛÉ:e¾›Ë+Ì Zs*Z’I4©§Ìøâ¬×v*ÀüéùaåOÌF·;i6Ú“Z4êI@ôä Uƒг~VÿÔ¯aÿßóV*ïúoÊßú•ì?à[þjÅ[óŒß•À×ü/§ÿÀ7üÕŠ½ÉbQ`*((ªìUØ«Ä.?ç,n¥{™ü±§™$bìx0©cS°4ÅTèY¿+êW°ÿoù«wý 7åoýJöð-ÿ5b¬ËÉ¿”þPü½žkÿ%höºuÅÂ¥’!™¯I;W|Uèx«±V#ç!ùóÒ=+Κt¤R‰£Žu¨W¯!JhHÅ^qÿBÍù[ÿR½‡ü ÍX«¿èY¿+êW°ÿoù«wý 7åoýJöð-ÿ5b¯eÒ´«= ÊßFÑáK{X’!ŒQR4UÀЦ«±Wk_óÿ—~b¾¸×5¿.Ù\_ÝHÒÏ3«rwn¬hFç¾*•ÿг~VÿÔ¯aÿßóV*ïúoÊßú•ì?à[þjÅY'•?%|ä}Auÿ)èv–:Š#"ÏžA\Q€$ž£zŽ*ìUù£ÊºG4é<½æ«H¯´ÙŠ4L*¬Qƒ)ÚyWý 7åoýJöð-ÿ5b®ÿ¡fü­ÿ©^Ãþ¿æ¬Ußô,ß•¿õ+ØÀ·üÕŠ½cË^YÒüŸ¦ÁåÏ,ZÇe¦[sô`ˆQ›—j|Ù‰>çOqWb¯+óG䇑<é¨Éæ4è6wº”ÁIåSÍ‚(U©VŠù Uг~VÿÔ¯aÿßóV*ïúoÊßú•ì?à[þjÅSòò÷Êú„þåë+]BÕ¹Ã2)äJTT÷Å^»Š»K5­ÇÌV7¹]X]FÑO ‚ªèÝA«ÇèY¿+êW°ÿoù«wý 7åoýJöð-ÿ5b®ÿ¡fü­ÿ©^Ãþ¿æ¬Ué~PòFƒä &Ñ|›abò´í Ei,z’HUðeX«±WœùÇò‹É¿˜7qj¾tÑ­uÈbÇ,ÊKà PFÀ±?IÅX‡ý 7åoýJöð-ÿ5b®ÿ¡fü­ÿ©^Ãþ¿æ¬Ueÿ8ãùg§ÜEg回 XÛƒ,† Ð’6#¾*ö¼UتÄÝDö·(²C"”taUeaB=AqWˆг~VÿÔ¯aÿßóV*ïúoÊßú•ì?à[þjÅ]ÿBÍù[ÿR½‡ü ÍX«=ò_å§•ÿ.–å<‘¥Ûé¢ì¡ŸÐR žxr$’xòj|ÏŽ*Î1Wb¬Ο–žWüÅ[dó¾—o© Bæ]I1ú”çÄ‚åÅkò«ÿ¡fü­ÿ©^Ãþ¿æ¬Ußô,ß•¿õ+ØÀ·üÕŠ»þ…›ò·þ¥{øÿš±W·ÛÁ¬Ikl‹1¨DEUUÐÓVÅ]мR÷þqÇòÏP¸–þóË6<ò4²7™ÍI  nOlU ÿBÍù[ÿR½‡ü ÍX«¿èY¿+êW°ÿoù«eÞNü¡òoåõÜš·“4k]:òhŒ4*CË+RNĨ${ Uèø«±V+æÿ$h>²]ÎVj6)*αNµU‘APáa_qWšг~VÿÔ¯aÿßóV*ïúoÊßú•ì?à[þjÅ]ÿBÍù[ÿR½‡ü ÍX«ØtMÃË–ú…o®ŸkŠbTQÐЦ˜«±W‘kÿŸ—¾hÔ'×õÿ/Y]jMÎi'jSBh1TŸþ…›ò·þ¥{øÿš±Wг~VÿÔ¯aÿßóV*È<±ùä?&j1y‹ÊÚ –¥qñ)æ¡Ô«P’iU$|‰Å^«Š»I<Çå½/Íútþ]ó5¬WºmÈQ5¼Â¨üX:Ô{0x*ò_úoÊßú•ì?à[þjÅ]ÿBÍù[ÿR½‡ü ÍX«¿èY¿+êW°ÿoù«zŸ•¼¥£ù'OO/ùNÎ+ :6gXaPÎjÇÆ¤â¬‹v*ó6~KùÏWç]óv‡i¨XÌÒ©äU~È$Ò¸«ÿ¡fü­ÿ©^Ãþ¿æ¬Ußô,ß•¿õ+ØÀ·üÕŠ¦z?üãïå×—ï­õÍ˶V÷ö’,ÐLŠÜ‘ÔÕXTõqн‹v*€Õ4ËMnÎãFÕ¢[‹+¸ž âqUxäR¬¤xH8«ÆèY¿+êW°ÿoù«wý 7åoýJöð-ÿ5b®ÿ¡fü­ÿ©^Ãþ¿æ¬UèÞMò—¿/­eÒü—§Á§ZÍ/­$p?¼IÞ€ U—â®Å^yç/Ê(~aO ÿt{]FâÝ QI2’ʄ׈ «¾*ÃèY¿+êW°ÿoù«wý 7åoýJöð-ÿ5bª°Î6~X[H—ùbÁdƒ)àÆ„ާ{†*ìUk¢º”p ‘BàƒŠ¼4ÿÎ3~W_ð¾ŸÿßóV*×ý 7åoýJöð-ÿ5b®ÿ¡fü­ÿ©^Ãþ¿æ¬Uœù/òÃÊŸ—mpþIÒm´Ö»'h‚á+ÄI48«<Å]а¯9þ\ùgó(-¼í¦[êQÛ3<"u¯À¡Z ü‡†*óÿúoÊßú•ì?à[þjÅ]ÿBÍù[ÿR½‡ü ÍX«¿èY¿+êW°ÿoù«{e•œu¼Z}Œk ´¬QF‚Šˆ‚Š v UŠ»x¾¥ÿ8íùm«ÝϪê>Z°–îæWši YÜ–f4 T“\UÿBÍù[ÿR½‡ü ÍX«¿èY¿+êW°ÿoù«e^PüòWo[Zòv‰i§ß/ùvÚ;=:ÕxCBˆ€’M¹$Ÿ|U8Å]м›Ì‘>@óv£7˜|Éåû+½J䩚yòrªB7 HÿèY¿+êW°ÿoù«wý 7åoýJöð-ÿ5b©ç—?"|åF0ùoËöVš•±c ñ¡ä…”©"¤ïBF*õœUتO¯èwštùü¿æ+hï4ë¥á4Š£€AÄ=ñW‘г~VÿÔ¯aÿßóV*ïúoÊßú•ì?à[þjÅ]ÿBÍù[ÿR½‡ü ÍX«Óü§äÝȶBò…Œ:}€v—Ñ„Qy·V>$Ðb¬›v*óO7þNù+Ï׫­yÇD´Ô/’%„M2ž\’ Š€IÅX¯ý 7åoýJöð-ÿ5b®ÿ¡fü­ÿ©^Ãþ¿æ¬U¦ÿÎ;þ[h÷pjÚo–ìb»µ•&†@ŒJHŒXT‘P@8«ÙñWb¨[Û(5+y´ëøÖ[kˆÞ)cqUtqÅ” *ñOúoÊßú•ì?à[þjÅ]ÿBÍù[ÿR½‡ü ÍX«¿èY¿+êW°ÿoù«z“?.¼µùyö¾IÓ-ôØ®Y^a‘Í”PI'`vÅY¦*ìUyÓò»ÊŸ˜o/´«}Ií¬pI@ôäëAаúoÊßú•ì?à[þjÅ]ÿBÍù[ÿR½‡ü ÍX«cþq›ò¸ÿ…ôÿøÿš±Wºb®Å]м:_ùÆ¯Ë ¦—ËÜ–cÁ·'sûXªŸý 7åoýJöð-ÿ5b®ÿ¡fü­ÿ©^Ãþ¿æ¬Ušù3ò«Ê_—’Ïwä"ÛNšåU&x‚ʦ IÚ¸«Ð1Wb¬;Î_—þ\ü·‹Oó®£ož¬I:׋ЭE=*ó¿úoÊßú•ì?à[þjÅ]ÿBÍù[ÿR½‡ü ÍX«¿èY¿+êW°ÿoù«{F›§Zèöi:\I¬IÆ(±Ç…UQØ(Š£qWb¯Õÿç?.uëëoWòåŒ÷×r¼ÓÊÈy<ŽjÌhF䚟|U.ÿ¡fü­ÿ©^Ãþ¿æ¬Ußô,ß•¿õ+ØÀ·üÕŠ²)þLy#È·ÿ§|£¡ÚXj6ˆMžAZœ€$šV˜«Ó±Wb¬sÍ^QѼ茶æË(oô÷ev†eªòCU> ƒáм·þ…›ò·þ¥{øÿš±Wг~VÿÔ¯aÿßóV*ïúoÊßú•ì?à[þjÅ^µåÏ-é~PÓ òï–mb²ÓmƒmáDäÅڃ݉'Ä’qTïv*òŸ3þGy ÎzŒ¾bóFƒg{©NKq"oÁB/"­=€ªAÿBÍù[ÿR½‡ü ÍX«¿èY¿+êW°ÿoù«N4ÈOËß+êkú—¬­u Vç ȇ’5¨©"´8«×qWb©^·¢XyŽÂãB×mãºÓî£1M ¢ªêz‚1Wг~VÿÔ¯aÿßóV*ïúoÊßú•ì?à[þjÅ]ÿBÍù[ÿR½‡ü ÍX«Òü¡äÈM¢ù6 :ÅåiÚ(ŠÒ0 Xõ$ª+à*ʱWb¯8óå“0nãÕ¼ç£Zê7Ä I¦RXF°Z‚6‰Üøâ¬Gþ…›ò·þ¥{øÿš±Wг~VÿÔ¯aÿßóV*ÿÿ×ûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÐûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÑûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÒûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÓûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÔûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÕûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÖûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wÿ×ûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÐûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÑûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ù“Í:/“l$×üß©YéZd_Þ]_ÜGo wø¤ªŽÎ*üÙüáÿŸ·~Gþ[ú¶Nž÷Î:¢UBipúv¡¿Ê¹Ÿ‚•ÿ*%˜~4UùAùÅÿ?|üèüÂiþ@K&i’T/Ô£WœOPׂ ø4pÄñÅ^÷ùù•æï1Î~mùó^×µKÏ2§š“S¸½šKµ*šM8ÌÌ\R¦”m»b¯’¿&¿çêžÿ•޳ªÃæí)h ú¦¹[¤)9cã#È£¯¸«õƒòkþ#ùQçQ‡æÆŸ¨y;Pjš‡P±ðþòOc:¾*ý@ü¿üÒò澟ú{òÓ]ÓµÛ@Òé÷1Α^.’þKÃÃg¸«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_ÿÒûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®ÅRÝ_YÓü¿i.±¯]Ácaò–âæUŠ$,îBó8«ó¿óþ~§ùùTÒéú6©?›µXþCAŒM.Õº¤|LO)ËŠ¿(8ÿçò›>til?*tý?ÉÚsl“…õ:o,Ê!ë´—³ž¸«ò÷Ïß™þnüÓÔ_üÈ×5sP$‘6¡s$åAìœÉ¾  (LU‚â®Å_³ßóŽ¿üïÍßü Ÿþ!¤b¯ÆUت}å¿4ë^M¿_ò†¥y¥jqwuaq%¼Éßá’2¬:v8«ôòoþ~Õùßùf"Ó¼ß=Ÿœ´´Ø®­K ¿äÝCʼnÿ*U›õQWêÿäçüýûòcób±üÃKÿ%ê³}r3weÈô sn¥©âÒCUúeäï<ùsóNÌ~CÕ¬u­*_±u§ÜÇq>ãfÇQßeX«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUë>jÒ<¾ Õï"…€¯ÕsòAV?vj{G·t½ž?’1ò»—úQrû½6ƒ.£è‰>}>|žA­þ{ZÃÊ//Ú<͸Nx/Ì(©#æW<ÿ´¿à¡Ž4ØÌ¿¥?HÿJ,Ÿ‰‹Ðé½–‘ß,«Èn~Ú¿üÅÕ,¼£§y¹V»¹»xäR‡@e°7®d꽯Ôáì¼ZÐ"g<†2xxo&Ã{Hê׋±ñOU<Ј#}ïÓúËZçž›wHµËy-»§ïæh {3þ º|»j"`{Ç®?¢CäWUì¾HoŒ‰yêûC×4­N×ÕÒ.¢¸TˆØ>c¨úFwÚÕÓë…àœeî;xæ>!çóé2`58‘ïMó=Çv*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®ÅVI"B¦IX* Ë1 N/’ ®l'TüÄÑ´Ú¤r›™ìÂ*?àî'3±vvIô¯{‡—_ŽoÜÀfüÏ¿¿¹ŠÞÆ(íâyI?П·á™ã²áLíîpOiJd·Úy¯Ï‡—uv´·Ëmé£puéQ½¡ûë”é40ÍŽÎÅ»U­–Ðä™išeåPWµõ$sO¼o÷Œ«/eÎ?NÿalÅÚP—Õ³Ð,ïíµõìeI£ñF~¯ž3RçÂbbÁ´^A“±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ÿÿÓûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUتòòßN‚KíBXඉKÉ,¬GRÌh'|ùËÿ?4ü…ü2XþŸÿj±×ý˪·›ôÞã’Û ö#Õ,?—~OþrÏçÿ1¼ÎeÓÿ&4K+Y„»»¦¡{ìÚ­ºW¯ŠZ7НË?Ìßο>~s^þ—üÓó¥®Üä‚òáž8ÏüWDqú"¨Å^_Š»v*ú‡ò#þp×ósþr6HåüµòíÃéÔm^÷ýÁ@4$O%œOUˆHãùqWí·äüù£ÈþRô5¿Ï½Zo4jBŒÚu‰{M=[o…œq0Ù€ÐÆqWë6ƒùSä¿+ùq¿.<½åí.ÏÊÎŒ’ipÙ¶²7©.Zƒ‘`KubN*üáüýÿŸF~RþhzúÏå‹ÍäuêÁl××ӿʵv<£$j7<â¯ÄoÏÏù÷gç_䯩jÚk¾^Чô®‡ÎîASÊX‰¢}¦x°vÅ_ â®Å]вß&yûÌß—Z‚ùƒÈÆ¡¢jK@.të©m¤¥kBѲ’=ŽÇ~›~NÿÏàÿ9<€!Ó¿1`Óüç¦Æ–ºO©Þ•¸xº³Á#¥«Zªý_üžÿŸ³~F~eúV>j»¼ò~¨ô=^Vżæhü©D?.•UúAåÿ2im±‹^ò­ý®§¦N+Õ”ñÏ ’2Ê~ƒŠ§X«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±T›Wó™ §©¬]En)P‡#ò^§è®×ö¶Ÿ@/<ãyÜû‡3ðNŸG“PkIüwòy¹ùé§Úò‹A¶’éú $>š|ÀÝÒ8Óÿ‚v ^4 Ï|½1ùo#ñz /²ù'¾B#ä7?«ïxö·ù£æ-s’=Ѷ„ÿºí¿v)þ·Ú?KgŸv—¶úývÆ|ºŸ·êùÉèt½‡ƒðÙï–ÿg/±çîí#rY‰©$Ô“œœ¤dl»p+’Ü {N¹ÿ’×Gÿ˜çÿ‰\g£öŸüãúøiûó<Ö—þ42T}Ðx¶yÃÒªÃ<–Î&·vŽEÜ2ù“Ç–XÏIuÍŒ¢$(îô­ósÌ:=#ža{ý›É¿àÅ¿2~YÙvg·ÚíÒ—ˆ;§¹ÿL*_2}ΗUìþ Û£ú¹=‡CüïÑïé³–27÷‘ýê9Âý9è=™ÿ­.}³ƒŒ÷ýqùÅþÇâóÚ¯frãßûÛ·Úõ7W²Ö#úÆ•qÄ}ÌnžÆÏ;Í¿²a1̶—b®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±V™‚Î@rN Z°íSϺ6—TiýyGì@9þ?gñÌÜZ ™:W¿ñn]v<}oÜó}SóVözÇ¥B–éÙßãŸeqÍ–.ɈúýŽ¿/jHý"žw¨j÷º«zšŒòLz€Í°ùƒèÍŽ<1ÇôŠuù2Ë'Ôm-ËZѺoû×oÿSþ$2¼¿I÷xþ¡ïfŸ™¿ñÛøÅêÌ.Ìþïâ\ÎÒþóà}›^Þêk7ÚHñH:21S÷ŒŒ $(îÊ21ÜlÏt¿ÌÍZƉwÂê1þüj¬?ˆ9¯ËÙ˜çËg;hÎ<÷zF—ù™¤ßQ/9ÚÈœUkþ²ÿ3[—³2C–îÃhÂ\ög¶÷PÞ žÒD–3Ñ‘ƒ¼f bhìçFB[Õò,Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ÿÿÔûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«øíÿŸ‚ùóóûó—Î_—¾ó§©iV³qú:Æâáþ­¬§Ö· ¤`¬Nƒ˜^MJ’qW¸«±WbªöÖ³^Ì–vq¼ÓÊÁ#Ž5,ÌÇ` É=€Å_¤Ÿ_óêÿÎÎS«æ‹5ò_—ä*MδŒ·L‡©ŽÈRZ¸ú*ÝŸ~Ûþ@ϯ¿%¿$D®³§Ÿ8yŽ*1½ÖÕd…\wŠÌ~å@"«ê ]OI1Wè´0¥º,*¤H¡UT@*©Š»v*ìUñwç÷üàäÇüäG­¨ù§B]/Ì’ÇXѸÚ]–=ZJ)Šb|fÛÀŒUøùùÿ>üÒü¹õµ¯Ê+˜<ë£ gô#×QEšÀìc’ƒaéÈ]H‡LUùMæ-êÞRÔ'ò÷š¬n´ÝRÙŠOiy Á4l;Óÿ‚^—Úxœ‡¿èÚ8¿Ø{Ði}˜Ë“|„Gí?«íxö¹ùµæf©âη aÄÿÁš·ÜGË<û´ý¼×kvðÇt6ÿe¼¾D{ž‡KØ0nGþ–ÿg'›Ë4—f™äcRÌI$û“œ~L’Èx¤I'©Ü»˜ÄDPÙO ÉØ«ó/›4_&Ù¶¯æ»û}>ÍÝ—2*|¦¬|©>‘¦ÒdÔˇLp äø«Î¿ó›PÝÜŸ-þHè—:þ©!áóE"ÄOb§ï¤?KéÎËEìYˆñ5sP¿Œ¤²o޲bòyÃþrÏK²‹Ì÷ΗÚPSô y%™H‚:H+ê7ØÌzIöFork»3Q€h ˆ„MÄîöxˆþ”¹ŽöèÓ.30=Gb~_¨=ò÷þsk˺´£DüϱŸËz²ž;«Km˦ä(’2OfB«Ýûç9ÚÆeÆ8ôò#ò—ê?ðm–9nû+HÖ´ÿ0ZǪèWP^ÙJ+Öò,‘°öe$ãóa–pÌGB(´IžV®ÅQ·sØÈ.,¥xe6*Ãé9n DðK‹ŒOx$˜a/×MsÊ"ùßPÖ?;ÿ?‰]nñ|©å¹kX!nYÔ* žJŽ¡ÙcnÔ­3w‹I¦Ñòrï;þÁ÷º¼ý¤ÃìzŸåÏüã—å÷‘=;ÍFßôÞ¤”&kð ßäAöÿ_™Í•êu¹rì=#Ëõÿc¬É­”üŸSEçJ¤hª¨ l ª:[qüEOñ·ùxþQxÞ%ùù]äOÍRãÌzlqê2TýzÖÜWÅ™EÿÆ@Ù›¦Í—Oô»Žãñîm†ªPä_3Áùiù›ù+_þIy…ï´°ÅÎ1P=k „ÄÆYJ9ìl',:ͳFíæì0öözß‘¿ç:­­nWË¿Ú4ú ´\ÛÇ#D‹Àÿ½Aþ©—5:¯fÍqaz²Ï“µmJÌÒ²[J¯Ä‘Z8«x«Ã¸Îw6 á<37 dùR»v*°Õ.ô·õ´ùžïÁˆæ:§+ÉŠ96¶Èe”7‰§¹~_y§QóÏo©pt…úx±,v›t°Íhéa„®ëA©ž[èôüÕ»'b®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«ÿÖûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«ðþäaq¡yó*£Z__i¸ý¡sO?êú‘þ±Å_Îþ*Í?-üÂ<£æÝÍd€4ÍVÆö§ ô'I7¨?Ë኿¼ŒUØ«±Wb®Å]Š»v*ìUØ«±T—Ì^dÒ|£§\yÍWÖÚn•h†K‹»¹RbAÝÝÈP>g~ii¿óóo,~gþqykþqûòÄ뺦 Ð_ë·aâ·ÃË/Õ"ød”F¤’pPw *šâ¯Âùø÷™?Åó‘þ|¿Wæ_[Ø®õ õ;HmØ OŠ3_zÔQо"Å_¯óæ?#þŸüçÕ|ã©Ù™|\—û6,_4ŽrÇu‰L²¨ –bhI8jùKó?þs#òûòïÔ±Óª¥GÕô⯷ƒÎv<l;®u=™ì†«Y¼‡{åÏá:m°Àdù?Wüàüëüö&. òŸ—e&’FÍ Œ‡¥g#ÖsM«¢žùÕáìŽÏì­çûÙŽýÇú_¤œIo£4ãÉóŽÞXòë GÌÎúÖ¢O7iþy“RxK{óf­2­ooæÍéÇè\þ}>‘‘/¤¬ïíôøRÎÂ8à·ŒqHâPˆ£À( 9Ùã37-Ï›]"Mûä|áwé¿||áwé¿||áwé¿||áwé¿||áKµW±×-ÛNÖmỵµÈ®§èjï–bÄx H=ãeª|ÉæÏùÇM.k¯~\ßÏ¡j±7© ¢°èUÁF}Ájv\é4¾ÐL ñ‰ç°¿ˆä[ûÕ4_ùÈïÍïÉ2¶_™ºzù“BŒñúà4(ج"ŸŸï“›0ÈæöwCÚ{éåáË»§úSþôÓ†2å³ìŸË/ùÊËßÍNÏNÔFŸªÉAõFH[Á““Ø#–§UÇö—²ú­òÇǨøŠqç„ÅôfsÍnÅ^™ùEaõï3Z¹[u’cô)þŒìý€Òøý£Ò"Rù i“Ú ¾š^t>ßÔfçÑOœ;v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]бï5Ú}{G½·¤Â̺|Cñ‘¤Ÿ@|Ü}T8±‘äùC:×—v*Á¼÷ù™å_Ë+/Ó~Õ­4»b Cq %:ˆãyù(¬}²ìiç5K(ÄË“à?ÏÂÆ¥;ùò'B›Rº? ß_£ÿÖKt<ȧí;GNèFtzOfÉß)¯!úÿµŽYG¹;j:žÿ8.Uüêóí ëc/ÿV4¤1š~ÐVoæß:<LzaXâŸíæè5]µ´7óèöo'h>Xò*«y~Î5¹{™?y1ñøÛì×Áxlrc–Nn“6²y~¢ô/ñ¯ùyO壿KXo"Þžª‚Ë^¼X|J}ÔŒœ0rgQ(‰§Ï7ß•—>W½ÿþPëwZF¢€ñA3&Ýx‰R‡‰þW s—Î(áÈßMÛ\;L|CÖ<¥ÿ9Ëç¯ËycÒ?<4OÒ–@…ý!hÈî~ÜJ}‡¥îsC«ör߯#¸ýcíz6¦è#ñäûçò³þr3òûó‰V?%k0¾ EZÂã÷kãû§¡`;²s_ò³šÕv~]7Ö6ïæ>nL CÛó ƒ±W¾~SÚzZ}Åé2ÍÄ{„_êÇ9þÖÌá÷»ÞË…DžòõLÕ;7b®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«ÿ×ûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«ó§þ~§äQç_ùÇ_0ÝÆœît› ^ÿçXe?D3H~ŒUüŒâ®Å_Ý×å'™?Æ>FòÇ›ƒúƒUÑtëîu¯/¬[$•¨-Zòñ?3н v*ìUØ«±Wb®Å]Š»~cÿÎTÏÑ?-? …Ç•üŠñùÇΑòCmc0ú•¬ƒoô›¥ä¤©ë\Þ «˜ª9¿óÿó–™ó“Ú—é?Í]ä°ŽBöšM­a°¶¯ûîMX ½I ÊFÅÈÅ_OϤ¼»úkþr/GÔ©_Ñ^«{_væÖ½GûÿÀü»…_ÎFùˆù·ó_Ï>gfä/üË«Ü)ßd{É Zì€{b¯Å_Ñ÷üùÈÿPòO1¤ŽªjöºbHz•°€Êh<+u¹H§ìì«öûv*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯‘;,>«æ­µÕ¼rWÝj‡ðQžÿ/…®ãþ|"~"ã÷D>ƒìÖ^<?Í$~ŸÒò ó÷¡|¹ÿ9™§½÷å&ºð’ݬæ 4¨1«¸Û‹On•ΛØüœ:è_^!þĶà>§åW‘mµOË8,üû¨èPjº-ò¬‰x£›ÀCPКˆØ~ÒŠ•óÔµ²†´œ1™Œ‡N@þ¿ŸÁÍ;ìû'˘úoš­ÅÞ‘?#J´OðÈŸë/ñ9GgÏ©F,“ôßùYà-;ôßùXø Ný7þV>Ó¿Mÿ•€´ïÓåcà-;ôßùXø Ný7þV>Ó¿Mÿ•€´ïÓåcà-0¯7þki^P›QË9¼TgoŸeçè®fi{.zƒéØw”ð¾*ókÖ’~dÍ¢ÛèzCÈÅ)¦g© ƒ‘ $¿R:Tça¡Í RðÌåÌõªür²YƒÑû…ù`úgå畬æbÒ®bÎI©äð«Zž„Ó³ïJ$ÿ-/´ÏÎß%éÚÄn侇ThâŒ~‰y€ j¾•~‡c¶i;V|8&|«ç³Ùhõ‘ÏŒ˜Ý ·ëú~oèS<é]о¤ò5§Ôô;8éBèe>üÉaøœ®º|YOËäôÚ(pã?›,ÌG)Ø«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ÿÿÐûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUث˿;üŒ?3/<ÕùyÇ“ëz&¡aÕ¤“Ûº#ub÷«øU ©*„lAÅZÅ_ÚüàW˜Ïšçÿ/52Üý- ÿÌ 5­;ôô©ôb¯®qWb®Å]Š»v*ìUò¯üäüæ_å‡üâå“?æ&¨%×?RÛE±ã5ôÕû'Ó¨¡ÿ~JQ:Г¶*þq?ç*?ç埙ÿó‘¦çËZ4íåO$JY™§JÂkˆÎÔ»¹^JŠÕGŒŒ@lUùÑŠ»~ÇÿÏšíâѼíçßÌ«´å‡åIÏÅ@%¸Iˆ¨„‹cØž´qWã½ÕÌ·³IytÜæ•ÚGcݘԼN*¡Š¿°OùöO‘Ç‘ÿç< ’!K­Y.õiê)ËëWÑ7ËÐ|úûb¯¾1Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ùïóîÕ¾ª(ûI õÀeð§<›þ z[†,ÝÆQ?ÿr^»ÙLµ)ÃÈ–Çïš³ÆÞÑä_ŸºWé¯Ë5XÉŽ‘y*Š#"½Fm» /…«Å/éÄ|Í~–xÍH>ÿœqeÕ¿., p[MunÀïÖVz¡þìíý ýÞ¨žðÙ_¡ËŸ4§Ì¿”Ö0\WËè@òãÑ“ìÙú6öËtý©"8gêoíH6€´mJ?ôkÑY—¿ðË$cÌ'й­›T’ÙÌS‚Ž;6Ùdq nµ/Ó~ø|ð»ôß¾>ð»ôß¾>ð»ôß¾>ð»ôß¾>ð¢-µ ®Û…²³‘Ö¾~ã惷5;ÈõKÓõ;é±Ùž´§Óý7ÈÆP–¾+äÈ|¡ùW¥ØÎº¦¢‚öú¼ƒÌ*ª|UME}ÍO…3WÚsáŽÃɱùË7hü¹¤hðŠÉu¨óU[Ó‰–Ÿ|ƒ2½–ß,¤zGï#õ.>oÖ-*Át«+m./±m p¯^ˆ¡GZžÙå9rx’2=I?7›L2 úçòKOú§—áÕÄŽŠ­~*sßàm¤ð´<ÏœÀT~ð_>ö›7~æ€>{þö ôžv*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ù϶ŸS×.Ô†FYû5þ5ΣA>,CäóZèpä?6™®#óWþ~9§˜ôÿ&ù­­§ê71œÉ”ëÿø£¿Oì̽Sxgö¬·‰ìwÎþ\‚þYcY`VŒ*;޹Ôis>{+±±|©ªyMt‰™¬K"WìúõͨC“ ažÓù¥XÞp3Yþôª>×Ñ㉶9au-˜»ë’ªÀЃ±!Äç -­ý?ï(ïÓþøñ¯åúß5ü£¿OûãÆ¿”wéÿ|x×òŒ‹O·¾¿AsÄÇâ•ÿϦHYq3JÍs)„Z+jL"w>—zu8xm¦ZŸp7{×ü§m§€¶‘-NMMÛæzœÄÔdäáK,²›‘Nÿ$´±ªÿÎK,àThútÒáÊÐD|;ÎG»§?ÛS­1ó#ï¿Ðö}8pß{õÇ8g`¾8ÚWXU˜€¹ÀMn-ö5¬ k v±ý˜ÑP|”S8ÙKˆß{ÖÆ<"•ò,Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯ÿÑûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wðõÿ9AäSùiù»ç#„៯ê n:£¼Ìðv¬L‡xF*þ³?çÒ^bý5ÿ8é¤iµ¯èSU²§‡;ƒuNƒýÿâ~}‚¯Ó UØ«±Wb®ÅXŸž¼ñ¢~ZyQóï®ÖÇBÒmÞêòå•ÜGu9'¹•‚GJYÙ@T“œ¶©R)ô^ù1s¤Ù0þfÜ®—iÕm¹U»€Çp þUäßêœç3öØÉ/L8OÇ™¡ïq¥žöŽê7šýœƒôo•­…½’šsañ7½7ûÉ'åŒ4Òú²›(úÉ2Ò,‹[rr¦’õMǦ٪͑¨—~~ØoÏ?—¾R‰µ(‹¨þY®aJ‘¾À+oM…swØy<-6|Ñ?ddJbhýPÏ/pоðòFŸú/@Ó¬©F[tfå8æß‰9õ³ZOÊè±cþ€'ß/QûI|¯´óx¹ç/3ölNob®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯üÙ´ôïmo@ÚXŠ}(Õÿ³}Ù¸‘Ü~ÿìt© >_wö¼›6î©ñ'üçæúOò½o)_¨jÖ—ð ²Cÿ33}ìäøs×x#î?¡Œù1-6Ìk^Tѵp+õ6ÒSßw…I÷®tÉÃ2;‰xL*Dy—ÏþpЊ`3}¦Ën¾B¼.÷ë\¿Y³n,;uæ3&[9øŒr ’kmwå?>SKóˆý©Ÿ†;Ô!PžÕcµ=ŸaÙ9…”Ê;‡7 2i÷ÇêßÐó¿ÌÉo5~_DúÂÄu- _]µRÁÆT)óÝ?Ê®ÙL5Q–Ü‹»Ñêqê6ä{èïx?éïò²î7eùG~žÿ+5ü£Ñ/üæÌÛƒmå+'š MrÿWùä;W¿V=”åy5‡2âêN=8¹Ÿ‡WÐ7OòŸå?îu둬ù@>„`p‰¿ÕÜ/Íþ.…Tc‹$²n9:¹²j~ŸL{ûÿLn]bïÌ3z³UøbNƒæzŸóÛ3¢àËpòçÞô_-iFW]¶Éd—u³—}=äýìíáš-VfèE(ÿœG²ý#ùÍçÏ1®ëk Ö!Út tÛqÙ§ö‚U‚ï7ö~×´Ð Æ“ô×95’ù>ÓëºÕ”@”9ù'Çü3Y> r>_~ÎN’Yóû·}Wœ£Ó»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š¿ÿÒûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wòÿ?uò1òŸüäö¼©Æ/2i:v¦¤}’ÑÆlÛé­µHë¿#öªU~ab¯éSþ|“æ/­~Zù¿Ê|ªl|—¼|ݤqü÷6çü늿j1Wb®Å]Š»|ÿ9ùÿ¬óù…ÿli?äâb¯ã v*ìUØ«±Wì·åQEÿŸ|yûW[¯2y•!‰º†{j$ŠRûÇâ¯ÆœUô¯üáÇ‘ÿåc~wù ÊN¡á›^³¸OF‚Ñþ³0úc†*þÙñWb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìU(×ì?Ji—šm*g·–1óe ~9Úº_Íiòbþt$>$r4™|,‘Ÿqí~~çÊ/­;~kÎ3Ù ÍŸ˜P"‚ÛQ`ŠÀCq=ñÛ©9Œðoõÿœ(óTz¼Öúæ©ekå¸ÕmL5KG¹Ú"AVír`ƒ³½3c/j±p“#ü>~ÿÕ¿d{B5°7ÜˤüÏü¾ü’†O/þJÙ&¯­ñ1ͬ\žjOCG.?É„]-šÙv^§´Ïª\1éúº{ÍÉòï=‡sõ1ku½:¿™®¤º¸biËe@{"Š*`3oMKb‡ã™ê䈊 ¿G±é¶aæÈÀ—ªèö=6ÍViµõ]Ǧ٪Í6¢^æ 1®ÿÎByGJ¥RÊÙe ƒD“ÜWqì¿M;æïü.ËË.ó_3¦êúAžvâ£ô«#©ÞÛiÉö®&Ž!þÍ€þ9•¡ÓNhbÅ(Çý1§>_ }ÀŸ~„*„Q@ õ”@ˆ ù!6» Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]мÃóVÓÖÓ"»â†aSþKãLÚvLêdw‡[Úp¸Ü_?gBè_:ÎZi?¦)¼ËmJ´vðÜoBâ9Iè{)ú<3iسàÔ@ù×ÌÇ''‘þGÃú{ò³Ë·ÿh­¬oBgŠŸræûU> òx·“ÖCÖXGœô·ðøæ×K™Öd‹åŸ3i'aM·Íì%ıO€¼C]Ó~ÖÙ ¥Ìšþ_þ|y«òŠe†Å×PÑøôû²Z>'¯¦ßj3òª×ršíVŽ9|{µ:Hj9ì{ÇãwÐ0~TþNÎ^£Ëù_|žLüÄe.ÚeÀ Ãõ4ŒçƒâQñƒÎyß;v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š¿ÿÓûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wà7üÿÈäÇäÌ›tÙ[QÒnd§óçkôLqWóùŠ¿w¿çÇ~cô5ÏÌ/(³WëVZUò©=>­$ñ±½ýu¯Âz ‘°*¿¡ìUØ«±Wb®Å_ Î~ë<þaÛOù8˜«øÂÅ]Š»v*ìUû+ùÛÿ:Güàå—–Ö¢ç^ó Ý͹£ioî¥HØz"þÕÅ_X«õsþ|ëä_ñ?ç´žk–:Ãå½úñd#ìÍpRÑ@÷hæ—èSŠ¿ª UØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*øÍv¢õ›û(±ÜÊý^D¯áLù_·t¿•ÕåÇÝ9Wºöû)õm_ eß÷nÇóTæ?>/ 'üä/œ´7 –ÒLùRˆ.ïÙ›û:g}¯—‹Ùx§Ü@ùqGô92Þõµ§õÛ9¬9ò]kOë¶mðäm‰y&µ§õÛ6ør6‚òMkOë¶mðdnäºÖŸ×lÛaÈÛûÏSO'ü㟖ái–¼‰¬~$Y'¢Ÿ((=‡†sz9å)ûÝýùüw>GÑìzmi¹Ä½WG±é¶jsM¨—ªhö=6ÍViµõ]Ǧ٪͑¨—ªèö=6ÍNiµù³È1 sþrCWº]×LÓœ¯·`€ø~ԇǯ†ùÑkÏ…Ù0Η锿C9íè.p.3Ñ?*´ÿÒf²U!/3°RGü53®öKùŽÑÇÝ‘ÿ4ÿeNŸ·²øziyÐùŸÕoµsè÷Í]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»cs´úî‹{ *DFAóŒòþ•¢Ÿ@|þýœmd8±‘å÷nù[:·˜yÿæÎ•úsÉdÑéSs¤_ĵìÍ…?A¡Ìø2Æ]Òz$,>`ÿœ*?§)„_kê¥å·Ê«Þño¿ð΋¶O£ÞûÇèy­d}L»ÎzÛø|rí.gW’/“<ç Ó‘:M.gq|߯i”,Í„…¹Z\ÔñwMû[eG¥ÌÇÿ.­ ·Ÿ¼¯p»õÍ5ù\¡Ì\o½Çîw¾5ã—¸ýÏ©ÿçáò[ór ’kMÍGÑ,Çøæ³°¡Ã‹âC‰ÙY+Äþ‡Ëz&ŸÓlßÄ8ú¬Ï`Ñ4þ›eñ=ªÌ÷+iVV¦G4øC§'ˆ¾¢ò~‰övðÍ«3‘½ãTƒô•u­lü"ÏL¼¸¯‡¥?jøfŒÏ$cÞ@û\ì0²gÿ8¥‹/Ë‹›ò>+Ý^æZÿ’‘Å Pýç)ö–|Yëº#ô—¬À=/¶³Ÿn{·å-Ÿ K«ò7’UŒdÿ³CÚó¹÷¿ûßeB¢OŸÝý¯ZÍCµv*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»ÿÔûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wægüý·É?âßùÇOWDç/—uM7UZ À2›F#ä·$Ÿa\Uü›b¯×ùó§ucùß©ÚC²Z^ùbò ™Œq²ÜÛÊŒälµàÊ¥»µçQx«±Wb®Å]о@ÿœüÿÖyüÂÿ¶4Ÿòq1Wñ…Š»v*ìUr#HÂ8ÁfbT’{ UûIÿ?(Ò/¼ùùù{5´ñ­¦‹[âñº¬WIcf¼«ð»3LBj©ê~,â¯è‡þ|ƒä_«è>{üÌš:›Ëë" éõXšy”^"~KŠ¿vñWb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«ãßÎm?ê^d’p(.¡Šo¸p?ñùóþºO´ ¿ŸËýçû×Ðý›Ëǧù¤Óú^Qœ+¿| æ6]ÿœÒ§ñVÓ——jò¶šêGíÄ¿íçw§7cÈ6_é9x>ËÖl* lä0äiäºÖŸ×lÛaÈÝò]kOë¶mðdm‰y&µ§õÛ6ø26ļ“ZÓúí›|¢_KyÉ~Cyz׺ޡ§û9óœÑÏýsÉý_ÑÞŸÇsæíǦÙÐæ›”KÕt{›f«6F’^«£ØôÛ5Y¦ÔKÕt{›f«4Ú‰z®cÓlÔæ›Q/‘¿çOéßÍ?ÌO3©ä‘\<FãŒ×RÜ}˜Fu~ÒþëEƒx¿”EÿºmË´@}õœ#Ž÷¯Èm?Ô¿¾ÕÚ }äjÿÆ™ê_ð-ÒqgÉ›ù±ÿLoýãÊ{U–¡w’~Cö¾ŸÏkx‡b®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®ÅTæ‰gà“tu*~DPባh"Å>9¸…­¥{y>ÔlÈ~`Ó;(ˈ[ÉHpšBÍ \FðL9FêU‡ˆ"„d¦/…¿çÝdÇ£yËÉW²éº¤,Ý:Èv¯S îs¨öú¡1Ô~ßÒèu‘ÝõOœô·ðøæ—3«ÉÉ~sÐ>ßÃã&“3…’/”|Ù¢˜™˜ ³¢Ã“ˆ8Àð—„kºoÚÛ% î´¹˜_•lý6èSÓìj¶M÷N‡0õ¸ŸqwÑÍè>ã÷=ËþsÿJþbÅuÖš]²ýÒK˜=™†æÑÙÙ+Äþ‡ŽèšM³oâj²½@ÓK•P2îAçõ,¾ò~‰ö6ðÍV«3 q}Säýìíœî«3™Ž)÷üä)]ü¡óV¤ÔØ‹zŸùy•!ÿó_ —‰¨€ó¿·a§…È ÿçô¿Ñ_”¾]‡Ç4w7,|}k™{ŸÙ s¶çǨ—À|€zlBƒé<Õ3}=ä ?©èv Š@ÒŸöLiøS9~ПSå³ÒèaÃŒ|Ù–a9nÅ]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯ÿÕûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WŠÿÎGùÿ3¿*üçä XÌ·z®ƒ¨Û[ RÄÜ4 `¢É… wÅ_Ïä÷üû6+è‹ùÇÿ9½æ|‡ä¸x?èã* ùÉÝcvøÄLÀm,³¶ëÂ6ÅSÌùù†‹ùK¥ÊoùÀ-ZyKËvòUõ›»T–îé”ý±¾¥KC%É–VJ11Wé/üáWüüÓÊó‘+iùùžmü¹ùŒübŽ2Ålu;VÙÜž1ÿt;$I¤Ü*¯Ô¼UØ«±Wb¯?ç??õž0¿í'üœLUüab®Å]нò»ò§ÍŸaµòå–—q«kwgà†ÙŠIÑckñ;£¹Å_±Ú7åÿäÇüûO·ó‡æûÛy÷óúX–{ Ù«m¦³ ¬•e>˜¥Ä©ê·ü{ Hø«Ë|‰ÿ?ló>»©y{þr‹ËšWœ/u©[ÖÓa´Š9,â$Q!WªN‹Ô,çÔ-Cõ…¦*È|íÿ>þü´ÿœ–Ñî?5çß¾e·»d¥ß”u)ÊO?±ÌD°šŠ*Ür÷e¹â*¿Z?çÛ?“zÇään•å¯:XO¦yŠòÿQ¿Ô,H× =áŠ6¡ ‘оôÅ]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯œÿ?4ý´íUGûò?s/ümžCÿ='÷Y‡ô¢~Ã÷Ïaì¦o®ãúè|åž@öOÏŸùÉ©?ßœ–þj'ŠO46®ßäGv¼ûÙœ÷ú~ûÙ±ãh5û?8šÿräbÞ$>ü¹„L…O\á"i¡æÚÖŸ×lÙaÈÎ%äºÖŸ×lÛaÈÜ É5­?®Ù·Ã‘´’kZ]³o‡#lKÔ<ÇqêþWiWûîåM?ÙKýsU¦kg//ÔÕ¬¼»G±é¶msM¸—ªèö=6ÍVlD½WG±é¶j³M¨—ªèö=6ÍNiµôx==:ÚKéöŽ$gc좧ðÍl®f‡V®oˆç#’ÿHóGšç½ö©LÛš´Qú‡s×ûï×ïí=º"ÇŒ Iùšÿzߨè~gã¾±ü°ú¶‡5óŠæåˆ>*Š~<³Ýÿàg¥ðôrÈŽgåßÄð>ÓåâÌ#Ü>Ó¿ÝOhÏFy·b®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]оYóµŸÔµ»È‡F“ÔóÐýg:­ ø±ƒðùló:Èpä?ŽlW2ÜWÀÿó‡s‡ÿ:ÿ4|—R¢Yç¼D?Éãq4¯e¸Ó¿Q]ú~×ýæ—ü€û?c©×Æ·~Šy“KqÞ›ç?ƒ' uSùcÎzÛø|s¢ÒfpòEò_œô·ðøçK¥Ìád‹æ/0éF6e#6÷Äiòpšy¶Ÿgèkºlôû¶í÷H§1òÆÁw¸óz¸ýÌïóáÿJù¹.ºÿ¡B¿s>céaÃc¢ËX¾%èšM³>!ÁÕf{¿”ôbåXŒ§Q’ƒ¬›}Mäýìmáœö«3•¾©ò~‰ö6ÎwU™Ì„^;ÿ9ù©.ù=5€ CR²¶ëJñ-=:ïý׿ñÉû>8õÜ ý¥Ùi#rzß䯕úÈ>WÒ˜qx4kqþ_ …ÿ᫚½tøóLÿHýîü MU.B¨©&€f!Ù“ì; Qek ’ô†4Œ±g’\r'¼½l#ÂîEä;v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š¿ÿÖûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯Ã?ùú'üàÇž¿3o%üýü²Ô5/0­¤]ùnidí£@9I¦Ç¿ÂiÊHråÉÓŸ. «ùÐ ©*„lAÅ\ RMÜŠ¿kç ç뚯å÷Õ?,ç%æŸVòÊñ†×_£M}d½¹­qþqYÐWûáÅUWôaå4iuÒ­<×åë}KF¿ˆMkwk"˨z2²’ð5qŠ§Ø«±WÈóŸŸúÏ?˜_öÆ“þN&*þ0±Wb¯µççüõÿ9Qvum=F‰äKG#Pó ê‘ÝÒJúÒÔ?ÝŽ•ZªûOó;þs+òÓþp÷Ë·_óv°Üë2KXó¼ê³¼²¨¡03 Nà׋Ð[GþéŽN|ÕWã^·­ê>e¿¹ó˜®ç¿Ôï%iîn®¤if–G5gwrY˜ž¤šœU+Å_±?óí/ùÁ=y÷]Óç µÍCRò—”,¤ÙMe#ÛÞê´;¤DVÔÒ’HÀ‰îã¬ñªþœñWb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±W•~réÿ]òÔ³Vµš)‡ÒxÁ³†ÿ‚&“Æìó/æJ2ûxß;ïg3pjþp#ôþ‡ÏþTü´Õ|ÎãªiÝMÄ€]‹|ö_|òžÂö7SÚž³û¼Ï—wôGñ{ö›Ökûk—ÓõKù£ôžŸ“æoùÍ/ùÇýóSDÒ-¿,uO7ùvy®`¹’† Ì¡9Fd`ƒ”d{=~Òõµ{/°Çåðqd2Û$Æàóø¾QÚ¿ˆ–}ŸS)æD£Ô~:Þïšÿ(ç)¯lµùVóvçFó5¹ ÉTG§ õið©n¢EýÓõE+ íof#(~cDxàwá‘îê}ÇÔ<Ýìñu‹ìNÕgOV:2°¨#psÅ:4ÒU­iývͶ±/$Ö´þ»fÛFÐ^I­iýv;  ©ê7¯—ítªÿw(4ú[úãŠ5˜ËËõ1Ô³G±é¶K4Ù’õMǦ٪Í6¢^«£ØôÛ59¦ÔKÓ-¾ßê$Сy%‘‚¢*Š’ÌvxœÖNæxc¹<€j/‹?3?ç!<Åù½¨KùAÿ8ãj÷>º´Wš©^*"? •-´qÓc#|MÒ5¯Ýfö.ΈÕkVñ‡ŸOyò­ÑÆ#¼Ÿ}Î(~BùOò×Èq~[êZ“4Ku-õÅáP¼Òª'Á?*¢Ì«±©Ûý›í7£!8s £#È‹4?šyòôÊùkµ5zœ|H,u˨óïûÃÒ¼Õä-[ÊNN¡;Rh·U£?>ê}=«œgn{-ªìƒûØÜzN;ÇãüÓäkÊÜ­jâÖI£Üyþ߃ë_ËëѾ\Ómˆ¡0,¤{ËñŸø–{ϲz_Ëh1Cú"_éýïžµòøº‰Ÿ:ùmúŽt.¹Ø«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯ üÎÒ¦ŸU¶’Î6’Kˆx…@I,„×aìFo»/(7Ðýî“´±1]BÇÈÖšÎÞ¦ÕfeŽ/ª|Ÿ¡ý³Õfs1Åè>|üÜòŸä>‹þ"óµÈYOÕ,¢£\ܸíTl?iÚˆ»TÔ€ux´™5’á€÷žÏÈ˓áôÌ_ùÎ]NÛÌ2ywò¶Úq5­œ;<ÀTrˆºþòB¤¯Ö}4«zqŸ3o“6ɉŽ?VB7=Þþáý¿ywº]0ǹ~ÅYù[ËÞa´ŠÛÊr +¨"XÅ´”„Z ‡°ê»’3ϧ.œþðXï¿æô=Fð4{¿¡"Ó<³{e®YéÚœ,„Ì­Sº²¡ähz‡õÌœº¨Ë”OGšQÈ#!ÕôærïHìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿ×ûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_ÿóŸ_óì›Îyù¿ùmŸç“Ê{ý)xÅmª6Õt$„†ã©'ìLßo‹“#*þiuÿË×׿k5–¥i+ÁqmsE,R!£#£ÊÀìAª[оÅÿœMÿœÙó÷üâ^«êyZoÒ^T¹”>¡ Ý»}^jÐ4‘Ì3S¤Š(h¾¢HªTßóŸó•~@ÿœ¦ÐG™?-oÇ×aUúþ“rB^Ù¹í$u5B~̈Z6èe ¾‘Å_ Î~ë<þaÛOù8˜«øÆ†¸u‚g•Ø*ª‚KhrIÅ_®ŸŸó€~]üµòôó‘óž·¿áŸ'CÆKO.JΗ÷ÏNJ“"~õ9Gûöܹ…TòUã¿ó–ßóð={óÎÌ~SþTYÿƒ(ìÐ[[höaa’êÙ>³éQBSqnŸ»SöŒ¬ªáWçN*؈U'`*ýÚÿœÿŸ]Éæ¨þuÎLؘô£éÜé^[~+€hÉ5òŸ³ínhÏþí ŸŠ¿¡»{x¬âŽÒÒ5Š•R8ÑBªªŠP6 €ª¶*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*¥4Ü¡‚áHÛª¸˜9 ˜£pÈB,|™FF&ÆÏ”ÿ6u/2ÅxÚ~°Þž˜ä˜H£§#Ô°îN”9á~Þk;B9N,江£ƒhHyõ2ï—AT^ï°0éÌ8±ï.·Ì{¼¼ÃÅóÎ^•ä¿›?’ÞZüâÓÆŸæ›~7qõ[èh·ü­MÔ÷Fªž´åB6½•Û9»:\XÎÇœOÒoŸ6p™'Ç:gœ<÷ÿ8¡y•1#“\ò$éÚ_ERb^Á €ë šmû¶¥Nuù4šn߉Ƀї¬O_õ‡Ä72n9¾»Ó<Á£ùëMÌ^UºŽòÂa³¡ÜêÊwVÕ€#9<˜2igÁQ»Ã]±aZÖŸ×lÏÁ‘°’kZ]³m‡#lKÉÅÇ«¨>•þûÞŸwõͧ G‰#›Ò´{›f¿6E%êº=M³UšmD§~gó΃ùg¦sÍw÷D¿³0ý˜Ó¹ñ;(ý¢cé´Y5³àÆ/¼ôòÀ.O™ìôÏ>ÿÎ\] .ZO/þ\Å&ÁkYøŸÙž³ÿ”G¥`XÝò齟Žß¼Ì~Ïø‘åõs2F?2ûËòÿòãËÿ–:Zy{ÉÖ‰mn(d~²Ìãöå~¬ß=‡Emœ.¿´rë§Ç”ÙûiHË›9Ì$>‰ü¡¾ó§[;ŠO ()!¹©·ÙŒÏ¸5P<6Ï\öS¯Ôþî^¬cÇ¿ù°=|Á¸Üjøÿhqiñz†Ù:pýòý|ËèäEDq€¨  tg°F""†À®]XdO7ÊÚïéy"kÆCv¦êݩڞÛÃ:¼>ŽO1Ÿ‹‹×Í'Ëš_*~{ÿÎ,蟛|Óå×/œ¢!ã¿„I7_\.õÚUýâíöÂ…ÍÏföÄô¾™z£ÝÝîý\šòbygåÿüå˜./×ò‡þršÚX.ã-5²¼„‰Z+LWiPôõ’¬Ò¯.l6Y».ãiO¾?«¸ù|6£HG'ÒgÓmõ+uÔ4é#žÖdE,LT2°¨ Á|ÇÓe14]FH>Tóžöþèô¹œ,‘|¯æ},Ú3IM–§îÍô%ıš4Ä,Sëòúýz»$7r2Ÿ SÝ<£¢ò*HÌ=NZq -õG“ôO±·†sº¬Î\"~fÎKX~]J<•ùyn5ï9ÌÞ‚Ci"‚C° y$®Þ’o_´ÊGƒ³Ž^Cÿõ7k¦Ò™î¥ù[ÿ8«©y«Tšßó’·-«ëÓ•’=2F @n¢n? ãÚ¤KÐóŠâk»hB>˜T{úŸwë;»ì:qûÖ8ÒXaP‘  ª¢€°€g4M¹*ñWV„‘ #‰^µíJwÀ|Ò<ŸOy>XY+ù‘ƒË±ˆ0ýâŠSã>;üÇsØrúË÷ïƒÒiøyðïø²ìÃrÝŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š¿ÿÐûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š¿9?ç9?çßZÿœ©°—ÍþWh¿™vñ~ãP Æà‹E†ð(«l¤À#˜«ùUüÅü·ó/å/˜/|ƒù‹¦Ï¥kÚ|†9í§£Á•*èÃtt,Ž¿±â¬#fß—Ÿ˜þfü§×­<õùu©Üi:í“r†æÙ¸°ñV«£td`U†ÌÅ_Ó7üá?üüóË?Ÿ‚Óòëó€Ûù{ó¸Å •ác©?Aé3éLßï§4cýÛ1<WÚ_ó—^AÖÿ4¿'|ßùyä›qw®êúqµ´„È‘†‘äJUÜ…PI$ì1WãF›åoÉ_ùõÍ„zÿŸ^×ÏÿóÏ ÉkaV×KgZ†ô€ÿ:ýbAOF8‘œâ¯ÉŸÏ¿ùȯ=ÎIùŽO;~jjOw8ä¶¶©Tµ´ˆšúvñT„^•;»Ò®ÌÛâ¯ÅQúV•{®^Ûèº-¼·z…Ü©½¼ÒK,²0TDE³1 IÅ_ÒüàüûËò¤Y~rÎA[E{çQÂãNÑÛŒ–úaÙ–Iz‰.”ô¡1Âwß‹¢¯ÙÌUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb©f±£ÙëÖ¯¦j±,°H7¨=ˆ=ˆìFav‡gâ×ã8³(Ÿ³ÌwзéõÓÈNˆ|çÏË»¿'Ln#¬úcµ#š›©=éÐûô=¼ÏÞÔû#—±¥Ä=XÉÚ]ßÑ—qóå.Ãл+¶!­væ?HülóœäÊY¬è¶a²›E×m¢»±¸R’Ã2‡FS؃øxufÒÃ!8äBƒOÏï;þFù»òþoÌ/Èif½ÑOÇ{£½eeA½Ö³ íOß'bß÷EÛx;Z#°/áŸ-ýÿÂØŸ'&9ö“;üµüîò÷æý·£fEž¸‹Y¬%`[n­mÍ|h/í(Øœ.Ñì\½œlï’§¸þÊ)Þµ§õÛ+Ñ”Kå-.ãÕüÁÔ4¯÷ÜdÓýŠ\ê2F´Ñ—ã«kéǦÙÎfÈÖKüÈüùÓ?/[ü7娯«æ™HŽ;XuÛeqܱ=#_ˆ÷ãPN_göõŸ¼Ÿ¦ìõWÓÌíï@‡gù_ÿ8ϬyÚý?2¿ç"%{«Ç£Ûé Ê/UøB޾ŠP¿ %“)í?i1é£àhE³ÿ‰ÿŠ?…„òÖÑ}ãmm œIiiEJ#E ª PÀÐ á¥##gr\u| õÿËÏÊùüÌSVÖCC¥ƒUoeð_ïÑ|G {%ìLûLŒÙî8ºt9=ÝÑï—^Qïïköät¾Œ{Ëì¿ÏËæúÆÎÎ >²²b‚1ÅÃ=ßO§†ž0#°` &Id&R6OTN\ÁØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]б¯2y^Ó̰z7#„ê?w0Ÿâ r>ÜOÕ[ðnŒj3'K¬ž–\P5÷z%.oÎýSMüÃÿœ9¸ úždü±š^´5¶æ{õô§¯÷2ÙÏÃÖaÔaí1üÜŸëûíÔèDÞϧù³Ëßš:_øƒÉ×+<&‚Xš‹4,GÙ‘:©ûÔõRFù(FX žwQ€ã4_=~cè¾…ÜôûÈßr“›Ý.kp£ ÷‡ˆ~YÛRÜÏÔ X}Àfiþч ëÉõ–…ž‹jÚ¦­,vÖp/9%•‚ªÜ“šmFC#A«3#A€¿æ/œ?=uü¸ü·– 8Qoµy+T;T½?t‡zûç§ÂÄ3,q鉘ïÒ?Žpz-'fÖò}¿ùÿ8Ùå¿É;qyl?Hù’Tãq©Ì€>ýR©ôÓÆ„³~Ó@9^ÑílšÃGhô¯½ÝÃè¬Õ³V··–îU¶µF’W4UQRNFRYF&Fƒè?&ù- .¡©…’üîUåâÞÿw‰çµºó—Ó‡Þï´š‹Õ.sÑóZ슻v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»ÿÑûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»|‰ÿ9qÿ8mä¿ùË/~ŠóDbÃÌÖq·è­nS=»nB?ûöcWˆ‘Ý‘‘þ,Uü—Î@Î=yÏþq«ÍSþ^þfÙ{¥å%¥ÔukkÈ9Y zHÔèhè~Um±W‡â®Å_¢^GÿŸŸþwùòòãòŽËSŠî^) †¹x†mFÊÞ„4i#®zzo"»Æ*?»ôÕ~~jš­î¹y>³­ÜÍy¨]HÓ\\\HÒË,ŽjÎîij3RI$ž¸ªf_—ÿ—ÞcüÓ×켇ù}§OªëÚ„ž½­ºòf4©bz*(«;± Š 1Š¿ª_ùÁù÷Ÿ—¿ç,âó¯œ ׿mÄDK| µ½‚¸£CfR˜€î*ª +*ý%Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUت…Õ¬7±=¥Ú,°È¥]T{r¬Ø#ž&‚(ƒ¸!”&`x¢hޝ”1?+fòá}cC .—ö:¼??ð=GíxŸ ö»Ø‰vuçÓܱs#œ±þ¸ùóÅÞ{ÞÇíÁ©¬y6—Ù/ÛåòîxÞyãÑ»|qùëÿ8açÛ†óÏå´ãAó”më "&8n$‚ü7ŽJïꨩ?mXžC¯ì?j¥¤qÇ–û˜+æ?¢~Ý7Ç“ço)~{ê~]ÔåŸçõ«iZôF·²(Xä®Êdãð€Ý¥Bcn¿ 9‡UØÍÌhOðŽcÝ×üÓê æ¼X‰¨ÁkùɯË{4qØÃhÒ´®À _NȱڛõÌüØÌ´¡¹5]yÉŸDúÿó;Í_œZ£~[ÿÎ?[HTíuªc 4.ÿt~#ûÆé†§*!ÙØ{:>´û¡ÎÏuòä:šb@Žò}«ùÿ8Ååïɸ×Y»#Uó\ŠLڌ˴e¾ÒÀ¦¼bßm·© x/·=¥ËÚG„zaÒ#¯õ»ý܇ÚãdÊfúk9¶§b¯ ¿.)M×§®ùª2!Ù¢µn­àÒÃüž§¾ÛWöCØ?µÁ·8ã=|çåýg®ÛG¶;‚ñá;õ—w»ÏÏäúUT €€ €=–10›]…Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±T«XÑm5Ûse¨§$;«´§ÅOc–áÏ,&âÕ› rŠ“æÏ3yVïËSpœs¶cû¹€Ù½öû³¦ÒêãœmϨyÝN–XNü»Ø¾e8È{»H/á’Êú$šÞdhäŠE ެ(U”ÔFÄ ˜› üÞüáÿœJ×<…¨Iù¡ÿ8Ñ+Á:Uît@Õ ½XAÊ¡Ôÿ¾_þy·ÙAÔè;pd£á/×úþm9tñÊ*Oó·KüÀÐõM^‹ôOšmí.–[9ªÝ#n^Ÿ*Àãoˆ•Bs ÇŒã Ç{Ïçì©a˜#xØß»~¯'ü­óþ‰äÏ+>³¯ËYZêQ ºPË) ½aâÇaó ÌÌ„ƒ-wgÏ>zˆè,ôÞñùiù)çùÊ9àó?ž]òý=¼)-ÂøÄ¬7¨ÿw8ãþûVÜ ¿µ¡£¸ÃÕ?°{ÿS·Òö|4ãmÏ{õOÉ>Eп.´˜|¯äË(¬tèFÉÝ›»»³¹îÌI>9ÆgÔO<¸¦l¹ S-ÊU0Ó4»báltøÌ’·aÐ{ ¯.Xã&ÌxÎCQ}åO'[yj?PÒ[ÖyHéì¾õ÷ðÎkW¬–sÜ;¿[Ðétƒï=ìÇ0Ü·b®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š¿ÿÒûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ñÏïùÇÏ%ÿÎIùVËßÌû!qhõ{[˜è·6sñ!f·ƒÅÅzU‡ÂêÊHÅ_ÉoüåÏüá¯?ç<Áú/Íý˲8Òµ¸ˆ.T„oéNwˆŸŒéñb¯ñWb®Å^Õù ÿ8ÿçOùÉ4Áù{ù_`×W²Qî.’ÛZCZ®%„Aò,ÍDEg!J¯ë?þqþp¿Éó‰Ô|º‹¨ù®ò5¦¹4`M9¾œkVô¡SÒ5?H]€!WØx«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìU¢¬*Q€‹WÍÿ˜¿”¦>zç”ãªnÒÚ/Qïðñ_ø ñïký‚á½FˆmÎXÇßÓô½ÏeØý¿u1÷Kþ+õüß;ôØç’={±KÊ?6&|±ùÍ¥ÎÀÍ?V¼Š‹qnǺ=Ǻ£mQPÚvWlfìÙñâ>øŸ¦^ñúy†P™‡'ç>‰ÿ8æ‰|Õ.•æ-J$òœAOéz××h’IG —¬k±S%)ž…›Û¼#”"|Cü'”Oy—QîÜõ§(êy¿N|ùuåÿË&?,ù.É,ìÓv#y%zP¼®wv>' ØQ@͵ý¡—]?)³ö :R2ܳlÂB¤0½Ã¬)y…UQRIØ|žÎ:y'þqŸÊÐùòÆÄAÂ÷—’Q®¯f†Yä ,Ûž*(ˆU]±Wºâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]мKóòª=sž·ååXõ ÚHº,Þã°oÁ»Ðïžmí°Ñ×^£JÉÌÇŸê—Ù.´wznÇíケåÞ=Xþ±÷}–'‚KYÚå9P•dpC)A¡ÏËŠX¤c0Av ÷÷Q˜±¸*YNÅ]Š£´Ý6ëW¹OÓbi®$4TQ¹þ€w'a™:=MfA‹2‘äã—yä³fŽ™LЮ¿/ÿ-m¼¥¿¾ã>ªÃwê±×ª¥ê}†{ﲞÆãìˆø™*YO^òé—3ä>ínÚ–°ðÇhwwûÿSÔs·tnÅ]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*²HÒdh¥PÈÀ†R*=AA­Â½‹Á¼çù~úo=SDRö›³ÅÕ£÷+ø–o´]¡ÇéŸ>þÿÚé5šT9ww~Ç•æÙÕ»v*ìU—yWÊ>e—’Ö;4?¼”øUñ?«¾aêõ‘À;Ïs—¥ÒÇ˽ôŽ•¥[hÖëc§ H—ï'¹'¹9ÍeË,§ŠOC‹Æ*)ŽVØìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_ÿÔûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUت]«é:ý•Ɖ®ÛCy§]ÆÐÜ[\F²E,n(ÈèÀ«)E1WâŸÿçÌ:.·ù™m¬ù#\ýù_tÍq§O}lT¯î-$`ÊÉ%[‹ËñBë6Ø«öWò×òÏË?”]²ü¿ü¹Ó`Ò´+ÂCoÒ§öÛí<ŽwwbYÛv$â¬ïv*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±W™yÿòÞ×Íñ›Ë^0j¨>i´”è¯OÁºq¶q~Õ{¶#âB£”r—IyOôK˜ó;¾Éí™hÏ ·ww˜ýOµM.ëF¹};S‰¡¸ŒÑ•¿X==ˆØç€kt9tY,Ñ1æãqÜFÅôãž"p6 1[“Ï/yrûÌ÷k¦é1óîÌvT_=‡ëè7ÍŸdöFnÔÊ1azž‘ò=ßÈnâêõÒÇŽgõŸsì%ùÇÉ–þ°õo$½¸añ7°ð_o¾¹ô7³žÌaì\u æ~©žgÈwGËçov—jO[+;È~9–m#¬v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]м{Ο—¢nz¶€”“v’û^%=ÿÉïÛÀît]£^™üëu:Íú¡òýOe*J°¡svéšÂ‡¢y;ȳk¬·ú€1iàÔvi)Ù}¼OÝí­ÖkÆLw?s°ÒhŽ]å°ûßBÚÚÅeZÚ Ž$UQ@sÒ‘‘²ï£A_"ÉØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»ÿÕûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Vç/$XyÊÛѼÒèÜ(ø”øñus¾Ñ{5‡¶qðÏi¦c˜òóxùQÝÙvwiÏE+Žàóíó|ÑcùM®\êÍ¡ÜGéEîNñð'fSûDÓeëãMóÆtÞÁë2ꎞC„ ÌùÇ¡ó‰é}õ»Úeíü1Åâdò[óî÷ü­õW–ü±aå[EÓ´¨ø¯Ws»»x±ïú‡l÷.Æì\=•‹ÂÂ+¼ÿ|à ­ÖÏW>9Ÿpè=̃6Î#±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WœyËÈqkµ 0,wãr:,Ÿ?÷ûüFËE¯8½2Ü}οW¡}Qç÷±o'þ]<¬51!HÔüç«Ýü·—\­giW§Ïõ8ºNÏ¿Tþ_­íÊ¡D(l£&Ýлv*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š¿ÿÖûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wÿ×ûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÐûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÑûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÒûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÓûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±T£zše¬úŒáŒVñ<¬„ŠXÒ´ ñÅ_‘¿ôZ¿Éú°yÏþtïû/Å]ÿE«üÿ«œÿéNÿ²üUßôZ¿Éú°yÏþtïû/Å]ÿE«üÿ«œÿéNÿ²üUúUùù½£þTy Rüæóshº]ŠêCj‘µËFÜvEwD-ñ ‹ïоXÿœhÿŸŒ~[ÎTy¹ÿ,¿/t¿0Ùê‘ØÍ¨5KkH ôátF¡º™¹  áN»Žê»þr_þ~1ùmÿ8¯æäü²üÂÒüÃyªIc $Òí­%ƒÓ™Ýršêä f£…:n{*ùóþ‹Wù!ÿV9ÿÒÿeø«¿èµ’õ`óŸý éßö_Š»þ‹Wù!ÿV9ÿÒÿeø«î?ùÅÏùÊß)Î[h‡?.,µ[+6ûô|É«CR4ž’KUM:•âãrÀÖ»wÅ_+þhÏÚ?()|Ý­~YyEó\ú¦ƒ}>Ÿs%¥ƒ@Ò@åÆÏzŒT‘±dSâ*Á?èµ’õ`óŸý éßö_Š»þ‹Wù!ÿV9ÿÒÿeø«¿èµ’õ`óŸý éßö_Š¿M¿(?44¯Î¯&èßšžV†êßI×-EÝ´W¨‰:¡$REäPvìì=ñW¤b®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±W›þoþhi_’¾MÖ5<Ó ÕÆ“¡Ú›»˜¬‘v@@¤k#ƤïÝÔ{â¯ÌŸú-_ä‡ýX<çÿH:wý—â®ÿ¢ÕþHÕƒÎôƒ§Ù~*ïú-_ä‡ýX<çÿH:wý—⬿ò÷þ~íù=ù•æ­òçBÑ<Û¥¯êvZU¬—6v My2ÃHÉzì3‚ÅUˆ¢“¶*û3þr_þrOË?óŠþQOÌßÌ+MJóK’úýÿ+/OÖ¯¿Ä_^ú§èˆ-¥áõ/GÔõ}{ˆ)_]8ñåZ5xíU_ Ñjÿ$?êÁç?úAÓ¿ì¿wý¯òCþ¬sÿ¤;þËñWÑjÿ$?êÁç?úAÓ¿ì¿}Oÿ8±ÿ9áäùË­WUòçå¶®ØÜé±ÝÎÚµ½¬HÉ#ð 3’kÖ¡E;â¬oþr_þ~1ùmÿ8¯æäü²üÂÒüÃyªIc $Òí­%ƒÓ™Ýršêä f£…:n{*ú?Ê_Ÿœ¿+£ÿœˆÒí¯£òäš=ƶ-æŽ!yè[£»)E‘£õCAêñ­*Ã~vÿÑjÿ$?êÁç?úAÓ¿ì¿wý¯òCþ¬sÿ¤;þËñWÑjÿ$?êÁç?úAÓ¿ì¿Mü½ÿ?ü—ó.«cåË Î s¨]CiIe§„3„RÄ_'ziØâ¯»ÿç#ç!¼¹ÿ8ÃäÙ5<ýk¨]é1]AhÑi‘Å$üç$) 4°­7øëà*üùÿ¢ÕþHÕƒÎôƒ§Ù~*ïú-_ä‡ýX<çÿH:wý—â®ÿ¢ÕþHÕƒÎôƒ§Ù~*õÿÈOùúågüäOžôŸÉÏ%ifµÖµ­zj¶QÛ¯Õ­¤¹~mä®*‘0Z#|DAR~â®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_ÿÔûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±T%ý¼7v³Z^ÿ¼òÆé%M>6ý¶ïŠ¿*ÿèŸó†ßÍeÿ…<¿öQŠ»þ‰ñÿ8müÖ_øSËÿe«¿èŸó†ßÍeÿ…<¿öQг-7þ}gÿ8ìÛG©èú$÷vr‚cš jòHÜBU–bàŽ*û‹ó+È~Uó—’uËßÌ«å»1ix$¸0Ó¬Á”¯Añr«æOùÇ_ùÅ/ùÇ¿É5?›ÿ"Üù‘¬¦µoKZ{Öú¼ŒŒÿºi\Rª¿6ñßwüäWüâ—üãßçGš“Íÿžín<ȶPÚ¯«­=“}^6vOÝ,¨)VoŠ›øíмþ‰ñÿ8müÖ_øSËÿe«¿èŸó†ßÍeÿ…<¿öQЧZ'üûSþq3ÌÒ½§–ì—Pž5æñÚy†æfU­9“’HÅ_h~BÎ8yþq§H¼ò§åŒ¶mýß×gInf¸-7¦±Ô4¬Ä(¦*ù3ó+þp‡þqWÎþjÖ<ßçö´dÔ¯fºÔyù†Hë1i+BþÍ<1VÿDøÿœ6þk/ü)åÿ²ŒUßôOùÃoæ²ÿž_û(ÅYF‰ÿ>ÀÿœYó, }åÍ)õ dsKi®ÝÌÀ©d˜€@ Ó­ñÅ_ ?——º'åG–tÏ˯$ÀÖÚ‘¶´…äyY# ¹,Û“¹8«6Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯=ü×òw–0|£«ù/ó/ˆò¾£l`Ô9Îm×Ò$YC)MÀÞ£~qÑ>?ç ¿šËÿ yì£wýãþpÛù¬¿ð§—þÊ1WÑ>?ç ¿šËÿ yì£{’?çÚ?óžJ×4Ì)hwI©é¶º¥„ÿ¥o%A5´‹4/ÄÊU€e†ªÃ®Ø«èoùȯÊ_˯Î*§”?=ÌcËk{ Òú·Íd¿X]S÷ªèkFo†»ømаŸùÆùǿɯÈÓŸô.ÆúWê¤ýQïÿÞ[Я)$áýä´¥9{ñÙWŽ~rÎÿÎ1~eùËUóÇæ³Z5êF÷þ¦¿%«sX‘°‰”'À«·ãßy—ýãþpÛù¬¿ð§—þÊ1WÑ>?ç ¿šËÿ yì£dZüû'þqOÌë$žZÓN¢°$6šõÔÁ V¸NiZW}ëùGùOå¿Èï)éÿ•ß—6ÏiåÝ/×ú¬Ló2ýbwžJ¼…˜ÖIîv­Ã~tÑ>?ç ¿šËÿ yì£wýãþpÛù¬¿ð§—þÊ1WÑ>?ç ¿šËÿ yì£fWüú×þqƒ\µUÑ4Y¯,¥åéÏo­ÞKqb§‹¬ÄA¡Ø‚1Wé5¤VñXÚŽ0ÃÆ€šÑTPn}†*‰Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ùCþrþqïòkóßôý I„~ŠúçèÏ[T{÷£ÑõéÆHùÿwk^>Ü·UòýãþpÛù¬¿ð§—þÊ1WÑ>?ç ¿šËÿ yì£L4¯ù÷üâ&¹u•¢A åì¼½8-üÇ<²7,x¢ÎI š €'}]ùÿ8sù[ÿ8ͨjïå—=…æ§[]4×·£Fæ  ]€ß¸Å^uÿ9ÿ8¥ÿ8÷ùÑæ¤óç»[2-”6«êëOdßW“÷K* U›â¦þ;b¯ ü­ùkämòÑ?*ü¸cÿ•~šLúz‘vdO©J޲¤&œY¾>[u®Ø«à?ú'Çüá·óYáO/ý”b®ÿ¢|Î5—þòÿÙF*ïú'Çüá·óYáO/ý”b¯HòÏüûþqºÎâÃ;[Ñ.%h%†òÒâ=bòXÙ£`èà‰J°¨¸8«êŸùÈ/Êß ~pùFO%þxÇ•Þæ ßÕ¼k5õc$ÇûÕt#~Õß|ÿDøÿœ6þk/ü)åÿ²ŒUßôOùÃoæ²ÿž_û(ÅU!ÿŸyÎÜ:ÁÕW`ª«æi‰bM\T’qWП”óïÉ/Èï6iÿš?—:-Õ§˜´¿_ê³É¨ÝL«õˆ *’HÊkŒ7V£qо×Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š¿ÿÕûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±T·Y±mOO»Óc`­q°†=u+Sò®*þtÿèˆ~xÿ©ãEÿ¤KŸëŠ»þˆ‡çúž4_úD¹þ¸«¿èˆ~xÿ©ãEÿ¤KŸëŠ¿p?ç?'¯? +|¹ùA¬^C¨^hM —P+$r.$”VÜP8øb©—üäwåe×çwå§™)ô«¸¬nõÛ´ŽæefŽ2YO& ¹vÅ_ž_óƒ¿óí¿2ÿÎ(~bËù¡æ2éÚµ¬šMΜ-í`š7 4‘8j¾Ô™ûñWÎq϶üËÿ9_ù‹懗¼Ë§i6±é6Úq·º‚i´2J媛PúƒîÅ_ÑüñÿSÆ‹ÿH—?×wýÏõœUú«Š¿ÿ>çÑoüÝüÅóG憛æý&Î×_Õ®µ­å¶ž5žBáX©¡"»Óy/ýÏõÆÚѤP@c J…€;Б\Uò÷üçüã6§ÿ9_ùuå—µ;m&ê=ZÛQ7Q¼ˆVåB´Mê}A÷b¯%ÿŸ}ÿÎëŸó†ßâïñ6¹e¬ÿˆÿEú_S†Hý/¨ýg—.}yzâ”þSо^ÿœ£ÿŸRy³óûóKÌ›ú?›4½>Ï[ž£µžÚw’1¼qÌ»”'oUà?ôD?<Ôñ¢ÿÒ%ÏõÅ]ÿDCóÇýO/ý"\ÿ\Uúcÿ8ÿ8_­ÎéþgÓ|Ë­Yë-¯Oe4mi‘ˆÅ²Ê¤7>µõ)኿CqWóƒÿDCóÇýO/ý"\ÿ\UßôD?<Ôñ¢ÿÒ%ÏõÅ]ÿDCóÇýO/ý"\ÿ\Uû_ÿ8ù!}ÿ8ãùOåÿÉnúJ÷Fú÷©unŒ‘Éõ«éîGmÇ(S^à⯣ñWb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»~pÏÁ?çuÏùÌŸðøg\²Ñ¿ÃŸ¥=_®C$ž¯×¾­Çœ}Zÿ0Å_œôD?<Ôñ¢ÿÒ%ÏõÅ]ÿDCóÇýO/ý"\ÿ\Uô‡üâ?üúËÍ_óŽ?›_üçÖüÕ¦jVZ7×½K[{y’I>µc=°âͰâe kØUû]Š¿!¿ç8¿çÛ~eÿœ¯üÅ‹óCËÞeÓ´›Xô›m8ÛÝA4ŽZ%rÕM¨}A÷b¯µÿ/? µ%þBÃÿ8ãu¨A>¥–ï43|ˆÂ%ÄRF$â~. ¸$uÛ~1ÿÑüñÿSÆ‹ÿH—?×wýÏõœª.¡nm®Düš¾¬%ƒR›q_–*÷ìUØ«±Wó•ÿ9ù¿ÿ9±£þhy»Kü®´ó³ùFßY¼Jk/-=ʵYˆÅ(³~iÆ”nMQÜâ¯ÿ•áÿ?ÿ–/Ìü$ßþÈqWÊðÿŸ€ÿËæþoÿd8«¿åxÏÀå‹óÿ 7ÿ²UýÎ-j¾p×?)ü©«~o­âyÎ}9T]BÜÛ\‰ù5}XJ'¥6â¿,UïØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUà?󔺯œ4?Ê5êß” xþsƒNwÒ×O·77&~KOJÍ©]¸·Ë~cϽÿ2¿ç*<Ùù¡6—ÿ91m樼¢4k¹µ ¬-þ´²B#SmÇĽ–â»mŠ¿mñWb®Å_ ÿÏÂ<Ïù±å?ÊøuOùÆxµi|Üu›HÝtkqõVŽc!1¥ø9«qØÓ}ñW‹Ï´<ñÿ9ç?ñ¯ý t`‡êß¡ÿCþÒ[N¯?­ýgѬú”ã?µÇáéËu_!ÿÎ_~lÎdyóƒÍ:?䕯œ¤òD 1´ß.=Ý©CmNai qê©æÔ5©Š¿}´).%ÓlåÔy ¶·ˆÍÌqne*¨kZŒU5Å]Š»,?ò¼?çà?òÅùÿ„›ÿÙ*ïù^óðùbüÀÿÂMÿì‡wü¯ùøü±~`á&ÿöCŠ»þW‡üüþX¿0?ð“û!Å_ÔN…%ĺmœº!vÖñ¹Ž-Ì åQµ kQЦ¸«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_–óòÿ<Î@y3üÿB£˜&úÏéÓ ´–ÔiÃêŸVõ©ÞyMÃìòøºñÙW´ÿϽüÏù±æÏÊùµOùɈµh¼Ü5›¸Ñu›aqõUŽ¢ø9£qÜ×}±WÜØ«±Wb¯ÄùøGæWüåG”ÿ4!Òÿçí¼Õ/”Ni#¶¡5ý¿ÖšI„€Ê-¥øø„ªòØSmñWß–`üȽÿœpƒÌžmR_Í#å[éÝ'³1ßþ‘Xe1mé©õy„➞惉®*üÚÿœüÑÿœ¸ó?ç‘£ÿÎBÛyº/$Io~nÛVòûYZ‡[g0ò˜ÚÄúxŽb¦ƒ~˜«÷‡v*ìUñwü翘ÿ4<«ùOs«Î8ǪKç1¨Ù$k£Ø›ëŸA˜ú´„G-V”äxíâ1Wá—ü¯ùøü±~`á&ÿöCŠ»þW‡üüþX¿0?ð“û!Å]ÿ+Ãþ~ÿ,_˜øI¿ý⯪?ç 5?ç0<ÉùÏåóî×ÎùoÒ?¤[TòóYÚ:}ÃCêNmc ûñŒr~+½hU~ûb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_ÿ×ûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÐûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÑûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯ÇÄÿŸ¯N_ü['å– ?,¿Äÿá_ñÕà3}s‡«Çê^ˆ<ý/Þqõ¸SoS–Ø«öKõkïÑv7:ŸSêÐÉ7 Ó—-JÐÒ´ëLUùùiÿ?TÕ<ãqåMOÍ•÷Z7“|Ý­¦e­C®ExÛH±‘õsm …ÁsÉ~ñävÅ_°xªMæ=n,é7þc½W{}>Ö{¹:d… °Z*@Ú¤ ÷Å_–ß”¿óóKó^òmž¹ùgy£yGÏz¬Ú>‹® f“$ñJ"nVÂÙB3ß±Ï~±b¯<üÝÔí4O"ùŸYÕí ý¦‰¨Ü\Z,ÍngŠ;ggˆL•h˨+Í~%¯!¸Å^ ÿ8æ/ùÇò#Ê>`ò†þZÐ%Žþ+]*Kù5·X5 ˆZ·2ª<œÙ÷P—øTb¯¯qWå×ç‡üüKÌ•_™tü¤òŸåœžf´ò.Ÿmªêºœzìvœ,å´‚áå0=«íœ%Gf§* Ð*ýü£üŵüÝòVù¡¥[Ëii¯é¶ÚŒvó2D'Œ?+±+ZTuë¶*ôLUùùÙÿ?Ö¿,üãçO$ù+òÖëÌÚOåüV“yƒUý3 ’Û¥ÌjêË A+:î@£r$nª7Å_¡_–ÞwµüÌòŽù‘¥Ã%½Ÿ˜4«Zf§©w$êÄ‘ÉC€hH¯LUšâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Vù‹ç[?Ë_*k¿˜ÚÄrÍa iwº­ÄPdx¬àiP1‘T!j@¯R1Wæ÷äßüü§SüÇóg’¼©æÿËk¯.è_˜rš®5˜oÿWbŒÍ‚"Šqj½A?a¾*ýSÅ^?ùýù¯ÿ*7òóÌ?›Pý)úɯ>¥ëý_Ö£ÇÕá'½x7Ë|Uùÿ? Õ6|ûå_ÊŸ?~]]yM¼ï¥M«èÃW‹PŽâÞ8%Ÿ›¢Á FŒ¸S»r (ä~šâ¯üýüà²ü‚ü¿×7õ›I¯í4;e­`eW•žE‰3l »Šµ MìU|uÿ8÷ÿ9ýªþnyÿ@ü üÃü½ºò…çšôó&‡súZ-B;›åŽVU†È‘¿ò~J"ƒP«ô—|ÿ9íæ_.ùGòÍÚ÷æ„þeòüI§Çu¥G¨K§4âmBÞ%¥ÌJîœÖM”‡ãÁ‡8«ß?(µ;MoȾXÖt‹Cacw¢i×ö3\"’Ù"3=BŠBóo‰©ÈîqW¡â¯Ç_1ÏÕõŸ-Ýy›T¸ü«¸¸òW”üÃ/—µ-jß^ˆ²Ê³]¸ó>½æ}U43O†é-æp)ÎgY8Ô•Uø¤îT â©Wüâoüå­Ïüä÷œ|£æo)ÜyCÍ^H¼¶³Ôì%¾Žù\‚…™#Ь­‡(>¬Õ4Uöf*øþrãþrëWÿœjÖüä¿(ù5¼å­yæâúÒÎÙ5EÓÙfµ6ʈ Á2±ÜSrx÷岬“þq#þr©ç(tÏ0OåÛ,kÞXÕ_HÔ´ù®’íRdð™>T`Êß¡}qо*ÿœ©ÿœº¾ÿœz×¼£ùsäß'ÜyË;q’å,,£¿ŽÁ?ÑøTdŽPY‹ì8@jÃ`Udßóˆ¿ó”ÿÎTùoUó#hSùsTÐõi´}BÂk”º *þx#¿å ÿœQÿÍ®ÝB,Uý/b¯ ÿœ„ÿÉYçüuŸú‚—|¿ÿ>¸ÿÖbò7ý¾¿î±yоÿÅ_€??ù=¿ç+?óYÃÿtÝ;~¯ÿÎÿä„ü¸ÿÀgLÿ“ оŸÅ_€›ò“ÿÎbÛ@ÿ“#~ÀÎ'äü´ÿÀ3Ëß÷N‡{þ*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»xüåþIÌ¿ü<Ãÿté±WâåGüt?ç¿íýÿQçGØ«äùÏÏýgŸÌ/ûcIÿ'~`~KäöÿœSÿÍg7ýÓuUûýо ÿŸÿë6ùûþ`­?ê: UðäÏþ´—üã—þhÍþ o±Wîö*øþ~ÿ¬ÅçŸûrÿÝbÏ}Aÿ8÷ÿ’³Èÿø èßõ*õüUü°þ`ÿä•üýÿͳýDOŠ¿§ï)ÿÇLÿ˜+ù6¸« Å_Ê¿õš2?ósú„“WØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š¿(?ççñÜüÿÍcÿ'!Å[ÿœÿÉ÷ÿ91ÿ6›ÿ'õ?ò}ÿÎ3ÿàM©Éý3kþ}ÿÏÏüØßòrlUú¿Š¿(?ç2¿õ¨¿ç?æ7Týpâ®ÿŸQÿÇóGÿ6¥ÿ&ãÅ_«ø«òƒþroÿ['ò'þ`µoù5>*ý_Å_ÏÈõ›|ýÿ0VŸõ*øògÿZKþqËÿ4fÿP7Ø«÷{|ÿ?GÿÖbóÏý¹î±gо@ü”ÿÖ®ü±ÿÍ3¤ÿÔ+b¯ÛìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«ÿÓûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯æ«þpóþqÍ¿ó•>GÔ¬¥ó²hÿ—ZGæEΡ>ˆº\SÍ-ýµ´®ë’È¥ ›ÒKD¤z…±Wô«Š±ÿ6ÇSÿ˜+ù6Ø«ùü¾ÿÉ+ùÿ›foúˆƒSØ«Ïÿ6åó7ý±uú†|UüðþGÊÿ8£ÿ›\ÿº„X«ú^Å^Aÿ9 ÿ’³Ïø ë?õ.*ùþ}qÿ¬Åäoû}Ýbó}ÿŠ¿:ò{ÎV泇þéºv*ý_ÿœ)ÿÉ ùqÿ€Î™ÿ&}?Š¿µ¯Èo<ÿÎDÿÎBÎ@~\þ_yÂ*é©¢A­Å6›ï× ’ÕLhʼ\ ±å)n[±Wíßå‘âü±òo—-­.î/iLw¡U²·H²‚@,¤µqVuŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å^ÿ9cÿ’Có/ÿÏ0ÿÝ:lUùQÿ8!ÿ8‰æïÌ]ò‹þrÎ~wIü¯å4¾¹Ðôô¸’Kq%ĪñµÒ²³‡•}BÒ+°ñ­B¯ÝlUòüççþ³Ïæý±¤ÿ“‰Š¿0?%¿ò{Î)ÿæ³›þ麎*ýþÅ_ÏÈõ›|ýÿ0VŸõ*øògÿZKþqËÿ4fÿP7Ø«÷{|ÿ?GÿÖbóÏý¹î±gо ÿœ{ÿÉYäütoú‚‹zþ*þX0òJþ~ÿæÙ‡þ¢'Å_Ó÷”ÿ㇦Ì¿ü›\Ub¯æ«þqËþqÍ¿ó–Ú7Ÿ<©“Aü¿¶ü»¸¾ÒF—ij]D?¿K‚É"JN9ëñ'J¸«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š¿!çë¶zŽ¡'äõ‡–ÏçX"³¼h–Qo;˜ÄR˜ÛápŽCq;5(v8«éïùÄ?ùÅ wþqÛVóÇž¿0<Ö¾kóGžïm/oîc°KÕíÌíÈFŒW“µÃ’"¨ z⯷1WåüçÇþO¿ùÆü µ/ù?¦b­ϱÿã¹ùáÿ›ûþNMŠ¿WñWåüæWþµüãÇüÆêŸ®Ußóê?øáþhÿæÀÔ¿äÜx«õ~PÎMÿëdþDÿÌ­ÿ&§Å_«ø«âùùþ³oŸ¿æ Óþ£ Å_~LÿëIÎ9æŒÑ¿êû~ïb¯€?çèÿúÌ^yÿ·/ýÖ,ñW”ÎÿÎ"y·Hó'•?ç)?4¼ìža¹K±Ó4«t¸­>¯i4ÐÅ$‘µ$£2ò)ÍØògøhU~«b®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_ÿÔûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯–ÿ+¿ç ¿)?%üë{ù½ùi¡¶—æø§†fK»‡ƒ…ëÈ‘2ƒE/EvÅ_Rb¨kËH¯í屺¡š6À4ª°¡Ü{Uòf›ÿ81ù?¤è>\òEŽ‘pºG•5–×ô¨ÍýÉ1_3+f/ÉÅP|,Jûb¯¯1T%ý…¾©k6™¨Æ³Z\ÆðÍŠ«£‚¬¤xH8«ù÷üÏü›üŠüœÿœ›ü«ü¶ÿœtµ¸·ó–Ÿæ»Y|ɧóÔ.¼-½Õ±W¸å_MىܪÿxA«úÅRO2ùzÇÍÚF¡åMq ºn§i=•Ò+- ñ˜ä–„¬EA¨íб/Ê?Ê-þGyOOü®ü¹¶{O.é~¿Õ`’g™—ë¼òUä,ƲHÇsµh6«Ò1WÎ÷üâå·™<Ãç>êúlÒk>{ÒWE×esªÏf±EE@Ácz°µµò«åùüãvtÉ]$U–Ù …P©Ô»ƒ³oŠ¿]ñWŽy³òɾvóÏ—¿:<Ãg$¾kò´sG¥Ü-Ĩ‘,Á•ùF¬êý iн`š?–^_üäò¶£ùiçëwºÐ5XÒ;¸c•âfT‘dZ¿ 7]:pãC§4ÊY|G%¨Ú£Kÿè¯?óßòÛ£Ü.?ù«wýçþrþ[toû…Çÿ5b«—þ~óÿ9 QÎ÷F+]ÀÓ#Ÿ:œU?çì¿›4ÞkŠÿÆ{û$Å]ÿEeüØÿ\ÒE¿ý’b®ÿ¢²þl¿®?é"ßþÉ1T<ÿó÷Ïj êÕ¾ß×à†èÔtàV8x†®Ý;ª†ÿ¢¼ÿÎCËnÿp¸ÿæ¬UßôWŸùÈoùmÑ¿îüÕŠ¢ ÿŸ¸þyÜšíÕ£Ä7O¨ÛÃjÕÿ)š9j=¨>xª'þŠËù±þþ¸ÿ¤‹û$Å]ÿEeüØÿ\ÒE¿ý’b®ÿ¢²þl¿®?é"ßþÉ1TÏÞ?ç Á"Ý FÂMšªÕ>&‚¾ªßú+Ïüä7ü¶èß÷ þjÅ]ÿEyÿœ†ÿ–ÝþáqÿÍXª=?çí?œ¨“PšäÞw·†"ÉClåG·&ù⫿謿›ïëúH·ÿ²LUßôV_Í÷õÇý$[ÿÙ&*¥7üý³ó¢Ýyè—¥ÇJÞ¬1Ó¿À°Dkày}ªþŠóÿ9 ÿ-º7ýÂãÿš±WÑ^ç!¿å·Fÿ¸\óV*«üýÓóòfj—škZŸ¶-l¢‚_n2 ]úüm½ñTgý—ócýýqÿIÿöIŠ»þŠËù±þþ¸ÿ¤‹û$Å]ÿEeüØÿ\ÒE¿ý’b¨9çp·¥¤ÝéÉj>Ⱥ²ŠywÜòÁß§À((=ñU/ú+Ïüä7ü¶èß÷ þjÅ]ÿEyÿœ†ÿ–ÝþáqÿÍXª2ùûgçMÂóÖî#yÆÀÙ,Ññ÷F†RO¿/ ±U_ú+/æÇûúãþ’-ÿì“wý—ócýýqÿIÿöIŠ­ùûGæü@Éc; …Þ3;ÛË!Óš d,¾ 2×Äb¨ú+Ïüä7ü¶èß÷ þjÅ]ÿEyÿœ†ÿ–ÝþáqÿÍXªåÿŸ¼ÎB·º9JüAtØÔÓ½ M½ËGùû/æÏy®?é"ßþÉ1WÑY6?ß×ô‘oÿd˜«¿è¬¿›ïëúH·ÿ²LUqÿ?püò·¢è7Vˆ‡wúõ¼7LOn%c‡ˆö¡ùâ¨oú+Ïüä7ü¶èß÷ þjÅ]ÿEyÿœ†ÿ–ÝþáqÿÍXª&ßþ~áùåsU×®­]éõ!µ`{ò-܇€ úqTGý—ócýýqÿIÿöIŠ»þŠËù±þþ¸ÿ¤‹û$Å\çì¿›=¦¸ÿ¤‹û$ÅP ÿ?yÿœ„©ô¯tp•øCi±’jšŠŸzb«è¯?óßòÛ£Ü.?ù«wýçþrþ[toû…Çÿ5b¨ôÿŸ´~oÈ¢KÙÜÜ6ò$·Š>]ø!¶b«à95Áº0OûQ‹xËmÓâ;â¨/ú+Ïüä7ü¶èß÷ þjÅ]ÿEyÿœ†ÿ–ÝþáqÿÍXªôÿŸ»Î@;¼¼ÒŒ ³ˆtøã“‰ëÅÏ ­àxšxb¨ïú+/æÇûúãþ’-ÿì“wý—ócýýqÿIÿöIŠ»þŠËù±þþ¸ÿ¤‹û$ÅP³ÿÏÜ¿=­ÛÓÑ.ìRß©¶±\É˿Ʃ§€ãã¾*¡ÿEyÿœ†ÿ–ÝþáqÿÍX«¿è¯?óßòÛ£Ü.?ù«EAÿ?nüî¹ë×0;±õ¡µïÈ4Sr>ŠbªÿôV_Í÷õÇý$[ÿÙ&*ïú+/æÇûúãþ’-ÿì“qÿŸ³~m¨-ÓgœÖìµíQõQQâ*+Š¥ßôWŸùÈoùmÑ¿îüÕŠ»þŠóÿ9 ÿ-º7ýÂãÿš±WÑ^ç!¿å·Fÿ¸\óV*˜ùû7æÛÒÍ1sö¸Mn«^ôU4¦˜«¿è¬¿›ïëúH·ÿ²LUßôV_Í÷õÇý$[ÿÙ&*¡?üý»óºØ ÜÀŒ~ß×â†èS·±CÄøîkŠ¡è¯?óßòÛ£Ü.?ù«wýçþrþ[toû…Çÿ5bªðÏÜ¿=®ÓÖîì^ߨV±[IË·ÆÉ(§ˆãá¾*Šÿ¢²þl¿®?é"ßþÉ1WÑY6?ß×ô‘oÿd˜«¿è¬¿›ïëúH·ÿ²LUÿó÷oùÈb–wšPvA6Ÿ’q98â¼O_ Ugýçþrþ[toû…Çÿ5b®ÿ¢¼ÿÎCËnÿp¸ÿæ¬Uüý«ó’eê·®Û6¦"ÛaÆ3o!]ºüF§|USþŠËù±þþ¸ÿ¤‹û$Å]ÿEeüØÿ\ÒE¿ý’bªrÿÏÚ¿9`_WH¸ r>É»ô."¡ëXżdû|b‡Ç¦*‚ÿ¢¼ÿÎCËnÿp¸ÿæ¬UßôWŸùÈoùmÑ¿îüÕŠ¯þ~íùÿ#ïï4¶·;8‚Â(¤§ù.y…>üOËGÑY6?ß×ô‘oÿd˜«¿è¬¿›ïëúH·ÿ²LUßôV_Í÷õÇý$[ÿÙ&*„›þ~åùñzz-Ý‚[uòÒ+™kß÷б x;xœUGþŠóÿ9 ÿ-º7ýÂãÿš±WÑ^ç!¿å·Fÿ¸\óV*Šƒþ~ÝùÙr k×0<ƒdúŒpÚ­?ÊV†^Gޣ劫ÿÑY6?ß×ô‘oÿd˜«¿è¬¿›ïëúH·ÿ²LU¦ÿŸ³þn -o4¢Qº%·t¯nKõQQâ*+㊥ÿôWŸùÈoùmÑ¿îüÕŠ»þŠóÿ9 ÿ-º7ýÂãÿš±VÇüýçþr»ÞèÔÿ¶\óV*˜ùû/æÕ9§-܉íÀ¯°ú¦Ø«¿è¬¿›ïëúH·ÿ²LUßôV_Í÷õÇý$[ÿÙ&*ïú+/æÇûúãþ’-ÿì“ÿÑüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÒüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÓüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÔüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÕüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÖüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿ×üÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÐüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»zoå¯äÇžÿ8¯?E~WywS×g ÅͳÉg¯ïeÓŒ{»(é¾*ýIüšÿŸ1~dù±aÔÿ8õ«*Y½ ÙÛÓP¾©VôÙmÖ½9 ¤§R½Š¨?Ê?ùöw–¿8|ÿù¹ùI§y—QÒåò ö•i¦^Ë7+0»K“)¸‰}"Ma^8‚jlU㟜¿óêŸÏoÊÆš÷Ëúd>oÒ#« NsñíÊÒNñ, 6*üíÖô-KËW³h~c³¸Óõ+vá5µÜO Ñ·ƒÆà2Ÿb1T«v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*î» @µw¾4®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_ÿÑüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¬çÈ–^nüÒ¿徇¨ëº¥aÓ­d¸e»ð*ø³P¤â¯ÓÏÉŸùóŸæßž„Zæí‡“4ç¡1HÂþû‰Þ¢D>M:°î±Wêÿä×üú£ò'ò¬E}æ 68jñÑŒúäœà MÂÚF¾U”æÅ_¢z&…¦ùjÊË–vú~›n¼!¶´‰!†5ðHÐQì*šâ¯ÌùÂßýhoùÉ?ûlùþMßb¯ÓìUæ_™_“Düâ³ýù£åÝ3]€/7ÖÉ$‘Ž¿º”R3®ø«ò×óþ|Åùoæ³6¥ù;­jT¼z²Z\Ò#z…Pì— NM4”Øñ=Õ~Oþqϱ¿>ÿ(Œ×‘hÌúLU?[òó›²G½± sZniQüÇ| {cs¦\I§êPÉou –)P££ в°ÜU Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®ÅS]3CÔ5–ôô»i&5¡*¿ù·Aôœ§6¦~²“§ÒdÔ„Iû¾|ž¡£þMßÜÒM^d;¤ü«°Žióöô#´ûö¯îwúof2K|„!¹ý_{Ô4ŸË-#K£¤´£öæ<ÏÝö Ógíl¹z×»oÚô:nÃÁƒq=òßö}Œ'ÉZ-¾£­ù‚Îî–$¸aÅÔ?zã¡Í‡hg–ª—Ø/SìÞ›Ââ~cä[ËuÊÝoL¬–è·qñŠŸêšº¹¸ÁÛ8²l}'Ïõ¼ö§Ùìøwˆâ\þ_ªÞ}=¼¶®`¹FŽEꮥHúm#!!cwI8£æ£’bìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®ÅSÛ-j:J¡ý§øGã¹ú3y¡ösU¬Þ0 wËÒ>ÝÏÀ.·>gäÍôÿ˵}BRÇùcØ}çsøge¡öß<ÉòŽÃæw? ë2öÇóGÍ—Cå»[›ê°ª§zTôñ;çYƒ²0hà|(±ß¯/çþ×_-l²QbÞFÓcÔ4ÉD讟XaFas˜ö+M ú9G !Ø‹þ÷¹Ý©˜ãÈ(Öߤ£oüi=Z×”íñ/Ü̽w±:lûã¸-ãò? †¼]­(óÝ„ßù'Q³«D¢tÈwûð®qÚïc5Z}áSÑçò?¢Ý–.ÓÇ>{{Øœ°ÉçVGCÜs–ˆX Á¸Š?k°Œ„· yZ]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«ÿÒüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìU“ùGÉ>aóþ£—<‹¥_k:¬»¥®Ÿm%ÌÄx„Y¨;šPb¯ÒÏÉŸùôGçOæ1ŠÿÏßRò^”à1k÷7…Ou¶ŠË$L<1WêÿäÏüú?òOò×ÓÔ|ïçœõTâKjrz6Šã©KX ‚òÌó UúOåo'è>FÓãòÿ’´»-#K‹û»[ xíá]©²Fª£îÅY*ìUy§Íº‘ôÙ¼Ëç=JÏIÒmÅf»¾ž8!AþSÈUGߊ¿&ÿ??çñ_–ÞCõô_Ék8êëUoÊÓMFÜW›¯­-ôXÕ}™{â¯Ê¯ÈùùOœ¿'?1¼áù¹¨èZ^ªž|»µºÖ¬£2Ûq6¾ ê²“Ó •ÁõZíÒ˜«÷‡òþ~Kù)ùò ÒâÖ–üÇ5ôfºVسšmÅLTì 8‘¿ßb¸«ï€CÊjàŒU¼UØ«Æÿ5ç¿-;à6¿šÞWÓ5¦+Ág¸EÊ/„w ÆhÿØ:â¯ÊŸÎ/ùò·“u±6¥ù#æ[Ý è‚Écª¨½µ-ÙVUá4kîÞ¹ûöUùAùÅÿ>æüùü˜^êÞX—ZÒa›ýü\GV1  nYá@õØÑWÃòFð»E*•u%YXP‚6 ƒÐŒUf*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUe¦ÝjOéXBó7ù M>g·Ó•äÍbä@nçžcPûƒÒtÊmJú¨È–ÈiðþáAøæ£?mÂH'샿Ó{3–{ä"?iý_k×´?Ê­O£É ¹”~ÔçÿÙ~ñšMGlåÉֽ߯›Ðé»Èâ?Òßìåö=NÓHX”GP(f¢yorî£â-/Û*9R5t¿lˆšxOå~žÏæ4«)]¿FÄzÒt·µ²õGÜo±°Ê:ŒÄ‚‘­¹ú¥Éî/¥ûg<2=' _6—í– ˆ¦/«ùfÓSC¡s'ƒ¨4ùßFdáÕK¸’|úhf0½äçäý„Õ“J‘í_²Ÿ>ã¿ãôfïOÛ³ÖûêûUìÎ)Ÿ˜ýkÉõËÝcJ«…Äcö¡<üÇðÍÖÕÅ—­{ÿ_'žÔö|;Ä?£¿ÙÍ…¯âhì>ó›}aju›ã®óé3Ïám95Ç̳M7ÈfJ5ü§ýXÿ©þ™Øè}ƒóÏáø£únnÕ¯¤|Þ‡¥y^ÎÆ†Ú ?hŠ·ÞwÎËCØzm÷p÷åó;ü>}tòs,º ;Û6à:ùfLãÓ}°ÓIÌ©>›û™ ?a¿VC4n'ÜXÃ6áçß•ÚTÑéS-Ômýiié¦ûç'ìV“&ŸM(䉉ã&ˆ­¸bíûs89Eôþ’ô'Ó}³°§P3%óiÞÙnŽf?¨hݯ§uȾ Ì]N‹¤päˆóåáÕn <óSò³Õ¬Ù¡o´¿ŽÿŽr:ïaôùwÄLúhý»ý®ßjÈ}[°[ï+ßYT„¯ŠoøuÎ7]쎯M¸c¾;Ÿô¼þVí1k¡?/{e(x¸ Ž ç58£Ü\°mnE.Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š¿ÿÓüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»zå/Oæ§|¿ùh—±éÒkú®™ÜÈ]"{™HÌ ‚G&•«úMüšÿŸ<~Py ¡Ô¿3.õ9ê)BÑÎßR±äQ êû<î§`V•ª¯ÓŸ#þ]yWòÏOåÞ‹§èzp§î4ëX­Ñˆ„j97‹5IÜ“Sг}×ô>~VIõ_Ì=&IlÁâ·‘€Q¼)*U •¸·Žoôù´Úñx%G»¯ÈïúÁrEizþ“¯Q,¦ 9ÿuKð?ȱú Á—ñs×,d#.´Ïl„r5Ư4î»eñÈÀ†){§õÛ2a60oËÖº€+{ IàHÜ|Q™ø52Çôšq5LyÅLøïæòmWÈZÂFˆÿ+|KýG㛬­/âö<þ§Ù¸K|d#¸ý{½òÆ¡cRbõ~Ôá×ðÍž-~GÔ?_Ú]¦=Q<ÒY´Ùáß!â»ÿnrßeµZ]øx‡|wû>¯±ÉŽhÉE6=sž”LMÖ°+±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÔüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»O¼­æŸ)kZošôݯ4ËË{Øw§ï H»üÔb¯ï'BÖm|ǦÙù‡KnvWöñ]@Ǽs t?H#MqWb¯†¿?¿çâ_’¿óÞ¾—¬kk®yŠ©Òt>7S+ŠŽ2ÈC í,’ Ü!Å_ˆÿŸßó÷OÍŸÍ[Fü¯Ž$hoU hßXÔ]ʺu:Tz1ÆËZslUùg¬ëZ‡˜ïg×<Ãwq©\¹’{›©^i¥sÕžG%˜û“\U,Å]Š»v*ìUØ«±Wª~U~wù÷òCQý?ùOæýíˆ2 YHŠZtBÕŠP?–Da튿eÿ çô·–¦ þrCËâê-”ë: (íYm$`â͉@>˜â¯Ú_ÉÏùÈÏËoÏû/ÒŸ”žc±Õø¨ym£sÔ#oïm¤ 2 šU)= Å^ÙŠ»~aÿÏÜüõþÿœ|¾Ð£“„ÞdÕ´í-BŸˆª9¼~›Ò–Ônßö¨U'ø«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š¢¬Š-ÄFp?QyЊï•å¾\è·iˆâÅû­ïÁºúV訃²€᜔¦dlîúvÅÍ ù§èÊDeÔE¶FòHíüíu®Ü#Èzt××M²±F?HEÞžìVòéhãˆqfñÕÈk›Ù|³ÿ8Ûæ?6²_þeê_S¶'—Õ!"IÐ?vŸ?ŒøŒÓê}¢Å§ôàžó°ýgìeÄ#Éõב¿-¼£ùvü·§Ä.ÔSës~ösòvû5îˆöÎS[Ú9õŸÞH×pØ|¿]µH’õÓåf³ÀcÂïÓåcà/ ”ú¤w1µ½ÀY"pU‘À*AìAØŒ1Äbl/ æß>Î9y3Íüîô˜¿C_¶áíôI÷‡eýNÑh} Ôiö‘ã|ÿÓ~»lŒÈ|Áæ?ËÌËŽRÚ¨×4¤¯Å)X/ºí"íáÉŽtÚ~ÓÒë9ú%ç·ÛÈý…•FLÇóJÔOÕõlnz.é_gÿš‚ætô†ñÜysù0–9&÷v‹*ú‘È¡¨#Øå1•8ä0ÍBˮٕ µÁµ>»fd$ÖC‘ '2¶ KͰۋ .$ ß £* #¿^™±ìéKĺºNÝÇ„È{zóï÷<‡:7‚v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»FéÅ~°À ÔoòÍ÷³&#W067½ûi«7ÒËóÚ]z>Îf§$VIÓ3°´é¶X­Ë‘™XÙôÉ€ë²ädJöö@}aÀ?ËÔýÙ>NŸ&gå_,y‹ÎïèùGO‘â­â@5ù»Qö©>Ù^Lñ‡6œ‘†/¬üVyþqwJÓPüÇÔþQ¹µµfH¾M!£‘þ¨Ožjóëäv€¯2âO_[@Sì_,K¡ù.ÔižT²·°¶Ú«äGv=Xû±'ß5qK)¹\9f2æÉ?Æ¿åå_”Gˆïñ¯ùxþQ|E+6ÅwÚÝ–«£€ÊÀõˆÂ4µ¸_òÿŸÿç<ç÷º,gDÔ~v€z$ûÂh£ýOzæÏ¯&=ŽãÏŸÍÉÇ®”yîùΓ^qòO9–ÕôåÿwZÕØò“íºš2æÍ¶-dgåïrá—_è—µýµÁàçÒ“§ÛŸLʰ\Ÿ QóJ¯lú‘€†üY}ý§]²²Ž,Œ.þ×®VC²Å‘‘CC‘rÒ=kˆD‰ëMèp^ÝG#.u½Dr¾u¸r´ÜØöy£–ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»ÿÕüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*þÐ?ç|õÿ+þqûÈ:ûIêK™+V禳YžUÞ§Ñ­OZòï\Uõæ*ü’ÿŸÈjžaÐÿ&ôGʺ텴Þa†ÇQŽÒâHVâÞ{K†á0BÇÎ5øZ¢¤mŠ¿— UØ«±Wb®Å]Š»v*ìUØ«±Wb¯Wµòæ‘ü»§þ{ÚYê:6‡& ¶zf²ŽÖ­%Ϧï[fd`ªY#ª)K4Å_ÛGå\ö¾Jòݶ¿q-Þ§§¥ÝÄì^Yf[t;±,K3T±,I&µ=qV{Š¿ŸïùþžªþBü³·“`5 ^æ:øúp[µ>‰Æ*üÅ]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«ßô¹Mí¼õ/±ù‘¾rãÁ";‰}CI—ÅÇw€~Æw¦ÚôÌ’rÀe3_Zè »òB“ÅBŠ’zÐncÇÊj-øñ™r]£\ù«ÏNm<§ºÁ^-ràq_›µmÛÃXáÒïš[÷~Îndpó{”¿ç- «ªþcê2j&„Á2Çòiãaþ¨Jxæ—Uí«‡xGyçòå÷¶qW'Õ>_´Ò|«l4ï.ZCgoµV ÈŽìz±÷$œæ3ÊyÏÉ'ͬ‹OMûå>8]úoßx]úoßx]úoßx]úoßx]úoßx]úoßx^eçË¿*yýYõû$l?Þ¨)Õñ,>Õ;s =³c¢×æÒ}nã¸ýŸ d •µÿÈ/3yAžóòûPö›·Õ¥"9>\Xúo·z©ð\éðvæFÙ£Â{Æãõµ‘©sy\ÞošÊvÒüÛe-•âlÀ£ {”oˆ•k›1¤XÈ#ñÕ¦z~äMýºÈ¾¢n¬*±Êá*p¤£oÄ’32j!å¾{Ÿ¼ÃöÜ·ü§ñÍßdÂäO—ßý1í6Z„aÞoä?k̳zñ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wbª‘?¦ë'ò~ìÉÑçð2Ç'ódÈÚ$,S:y{ðÝÕL¯O·é–àæ›${Øt°¾°fv¯Ãß'tá G/'£ySɾaóŠ%Õ¸K 9÷HiÈ’Ä~€¾eÖjõ˜4¦ª]ߟHùGò³ÊÞ\ãsªª]Ë\PE_hÅAÿd[!(HºGlO.ÃÒ<¿[Ýáó|vѬüc‰UE P@Ø §òŽ´åµOñ·ùŽ?”Gˆïñ·ùŽ?”_ßãoòÿ(¾#¿Æßåþ8þQ|G¿Ëüqü¢øŽÿ—øãùEñþ6ÿ/ñÇò‹â<ïÍÞ_òÇCI¬Ú ºoøù†‘Ë_Ãfÿd,†G“•ƒ´'‡é?š<ËùEªèÜ®<¥v·ÖÃBJ$€{xŸ ©ðhÝéûc]²Š=ïŸT"à麔/ÐL©f­(GQ¾'{qDØæ”jÝp߆l*ò. \¨»¥*‘õ‹Ÿîím”þÔó½6Üy·DV;b¯èþqcþ}1äÊ/«ù¯ó­¡óŸš“‹­´‘ŸÑVÎ;,/½ÁÍ8àvýÊ‘\Uæ_óøhã×çü¢ü¡³ gZº€øUM­²QTÔW×`´^Æ„R…WíØ@U`*Þ*þN?çíþxÿÎCjZ:0h¼¹¥iºR‘Ò­¼o¤5ÉåNØ«ó+v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯rò ýkOŒÌlÈ~úÀç/Ú±áÈ|÷}°2ñฑúKÙôË~™£É'z^{³®Œ%û¹‘¾ðWøä´3ýåy9šm‹×tŸË5ù/KÓ¼ïùY~÷VWÖ–÷W|Ôë$jÍE¨W¡$mÆAöAmóW—´°êg,ZˆÑ‰ Hy÷´{œ®+æô¯,~jǬ¡ë5†¢‡‹Å%Bò4 û0Nkõ™áïÄ;Ö™÷é¿|Áð…ߦýñð…ߦýñð…ߦýñð…ߦýñð…ߦýñð…ߦýñð…ߦýñð…FãÌqZÆg¹$kÔ± ÉGNe°Zy·ùæ?3LÚå•£<çf»‘Eà7¾Åúÿ-sg‡A‹ãÎvîïý?/šìñÍßÊÛŸ$Ùiº§˜u50êÓÈ%bIEXÕv¾65a¹ ¦ÁG}Ïev˜ÔÊQ„xa+ãö_µ"VÔ-kÁFÀP}T%n®O>Ôíúæn2ÔCçŸ=MÊýmÇHã{U3ªì¨T/¼¼/´™x³÷¿ðVmyØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUثдßLJºŒ÷nÆÏãé±Ï¾"ýãcö‡Q¨ô’ƒ§CÓ6à:ŒÒN®¬¡’âÁ¯W•¸VAZU ·¨ìû >nk¥ã:´S ™OŽf ۯˠàå¸L¿Oÿ•øáâiü«¿Oÿ•øãÄ¿•wéÿò¿x—ò®ý?þWãþUß§ÿÊüqâ_Ê»ôÿù_ŽÏSJ«öëv*þç%|ð?25üë稛”ž¿¨Ïnk_Üzì!ïHÂŒUâ8«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»{åTüþµf{}5õ çûrÃ/x{eòØ”=Çô¸>Òá霶Bõá2óuŸ¯åëÐêŠÿð.ðÈé'YC“‡bû;òEÿKþ]h7gr-Þù+Çÿç!Û#ÃÕLyßÌú[¥±@ù·ÉÖ:»®¢q²Ê¢Ž>žãØåš]\¡°;w3 ÛF’ØýI¥Û¢1þ™›,×½&ÌPºµ®¡£Vò3è’®éôžÇØå¸g »¿wVq’Aúoß2<|.ý7.ý7.ý7-h± ¦¤ìÁà­3 }P1}nýM¼T¨³£·Ó÷fõºŽåªY †O+¦±(7ÌÍè€õú{dŽ ãsE¯eòÖ‡o§D¶Ö1,QÙAAó÷>ù¨Ôæ36M±%ó'üån|Íå] ý”W˜iePó¢ögl9gðùúÖ'bÁuHzæn2à—j‘uÌìe¨¾Kó=ÇÖu[¹; J’|?Ã; 81Dy_ÏwÌ»W/‰žgξ[~„‡2{±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±W ùQ½X8÷F#øÿõßbµ&“‡ù²#çêý.£^*OUÓcéˆtYŠ}©Ûs´V§Ùu?Ç&FÎ& Ô¾ÔûÒÚM–«JýfÖëÿ7ñÍf ¼&ž?Q†Dy¾kóO—cYšb€?ó¿Ó㛨 ׇ1†Ý7è˜o›êé'£sÑkП—ôß æ ò†õa‰kö§–È:œ,!cE™w¿Ùv>Ƈ)2§g§0Î=?.¬kôÿ¾úëUl´ØÞyÛ¢F žÝ¼Nœ²¨[­B_Þß]ÞiØr"»„^1©û¸«ßñWb®Å_ˆÚ°xÿŸŽØÛ¸ç•41̃–’ò/P:=â¹oߨ ¿nqW“~|ùà~Z~[y»ó™ŽMCÔobe4oV+whŸæ.r1W𹊻v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯Dü°ºô5µ·='‰Óéð9©í˜qb¾â?WéwÞÎeàÏ_Î~ŸÐúóKN™Åd/¡[¨YýoI½¶îöÓ(ù”4Ìlrá˜>cïoÇÍôÏüâ‹þü»H:ýRúæ¼,¾åûç7í@àÕ_|AûÇènɱz~µ§õÛ5Ør&%äºÖŸ×lÛaÈÚ S¥yÒç˯õmF¾Ó›áx¤¥xž´&µù–[›CûÄð˼,± rÙ”?å—¿5-äÔÿ*oã´ÕUy˦Ü#è²oÜr°ã˜£µòöyáÔÆãÒCñ¿ØXŒ§Òù¾Zóf­ùù´_6YÍev»…|.?™U]}Ô‘^“.=TxñG—éîø¹P˜°Æ?Mÿ•™>:{Wå—äÿšÿ4¼Òà6ºE~+ûV"_Luÿ«µ~Ó Òö§kàÐm#rþhçñîø´dÍ{ÞÇwþ üª®›åò5Ï0/Ã%É ¢7zUZx%[³6icùžÐõOÑî§ôŸŽÝÁ¦¥“žÁ„>¥{æ þµ¨½w¨EEùâw÷ÌáŠ8EGö³äÎô{›fi±%êº=M³UšmD¾*üú¤?5ì-z‹+Ðû|2J?9Øö£E#ß#úèOð±]R>¹“Œ¸…æZì‹m·/öcVsò¹±Á"{š|2=üŸÉ#Jí+îÌK™ÏB…>M)=VabìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìU›y._ÞËî‡Ñ±ýc=Ø-EK&>ð$>¼:ÎÒŽÀ½¯M^™éæ³Y<>¥œƒÀ÷rÂ6uð•L?Tÿ.-Lþ]ùzø ÿ¸èaÿ‘#ÒðËœäçÁ–CÍÒk!ë>÷“ùÏA§#Ç7Z\βq|á¯i¥Km¸Í„…¹ZlªæMÏ—+¦ù†ÝuM!Ç "”á|j†ä·Ê£12ã¾NÊ:HäõGÒY-ßä7—ÿ6m%׿#u8ãÔyͤ]1ZZ´{ì+Ê2~˪Œ×OU,&¦>.Ƕxq·ó‡ã½ñ×›´wÈZƒùÎ63éÚ„{˜§N59)èÊ{2’§±Ì¨fnÿ8åP6ÜzÓJËUgb¨Ü’z2|m¿•}äùÅï0j?ãÍ)‡–|¿‰]—,‡Å[héY>*ÿºÍs zñ|0ܺ]^¾<8Çòåû~4ûSüÂòß•âo-þQÙ(Œ|2j)-!Ç/‰½‹PÉLËÃŽGy:ŒšY嵿=2ÒþûGÒíçÓ¦¹…eki^~-$\àåvä> *Üâ¯é“v*ìUØ«±Wâ/üâ!ÿÿÎpþsyÙÿy•k}¦ü²Åwmj:ÑmhAûÀÅ_·X«óƒþ~·çðoüã®»až•Æ¿{§i1ç”ââEëE€ûW¾*þH±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìU>ò½çèý^Êìš*Îù,h˜ÚÌ~&9"æöv_ 4%æ>\‹î(tÏ;Èú z6š‚EôÛ£ §0f[CÛ?ç ÔÐuí ZÖö)ðõP¥~ŸK4žØŠË ÷‚>Fÿß7fæúOZÓúíœöˆ‰y&µ§õÛ6Ø26ļ—ZÓúí›|b^atn´›„Ôt¹¤·º‰¹G,LQÔŽá…ͤ8rAè[FüÞçåÿùÉ-;Ì6cÉ?ó:\Z¾’爿HÇ­nl«CQüñp?eÎjr{=,2ñtr1?ͽãºV=Î4ô¦>¬fs6Ô*¿&ÿ%míÿ35ùnõËP,ú-Œ©ê#£"¸øhÀ f!B ³îjhk{@œ0¨í9 ¼¼ëüß4Ç>\Ç„m\ÏãôÓæåbÓG™aÚ=M³'4Û z¦cÓlÕfÈÔKÕt{›f§4Ú‰z®cÓlÕfÈÔKóÛÏòSók_º«nžö1$qSð9ßhŠ¿™%œ¾”‡Urün,žù™wõ-ò@wtô‡üô!OàNo;'Xüþ[º~ÚËáéä{Å|ö|…ËæŽÅ]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]в?*Oèê1©ØH? þ±G±ú YüàcöXû@põñâÆ|ŸAi½³ÚÉffð§©o"x£Ã,²F¤=ïÕŸùÅ„×å>œ‚„ÙÜ^[Ÿ¦f—¢Lä{F\Ϙì¯Ðàëcê.óžöþÎÒfuY"ùGÍš)‰™€Û:,3â0<%àúî›ö¶ÉH;­.g–½Ö£å»Øõæk;è”sÀåO±?1ß¾bäÆ$(½ ‰Š;‡Ø—ó”þ[üÔŠÓòþr£A‹Wµº•-­u{h‚Í’S‹#JÉ _9Ïê»>xo&UÓñú[gËï0︽kó&ÉÏùÀ{¸ô&èw>aüÿ·7Ö·“+‹[ydxÐú¡B¥ :z®õ$PTæ”æí-äj#mºŸÇ~Ì#âöˆ¹ˆØ×Søï| çÍ6þqj¥|ízÒ bÐÚD vÐ×´qÔnLYÈûLs¥Óic„TGël8a§ñêŒÑ4þ›f|C¦Õe{ƒ¦—* eÃgŸÔd·ÑþOÑ>ÆÞ«Õfk„_Tù?Cû†sš¬Îd"ül¿½ý+¨jzÍkõ»¹e¯6-à?›:ÜQáˆó&Ô<˜^¥ßæax¿Ÿ'ánޝ'àõ¦p¾Ýj84ñ‡ó¥öDÓOIÙQ¹ÜWžPï]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_ÿÒüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUý®ÿÎùãþV/äW<ÒÒzÓ>…ii<Úk%ú¬¤û™"jû⯧ñWñƒÿ9÷åßð¿üä7æšW‡«­I}JSýîDº¯A×Õ¯ñ=J¯qWb®Å]Š»~ßÿÏ¿å7óÇý±­?ê$â¯è÷v*ìUØ«±Wâ7üú@7yÇó«ójoô¶¹oèÊw¯­qyq.õ לgf?¨â¯ÛœUø7ÿ?ÀóÇ£¤y òÚ úÍÖ¡«\GÜ}^8à…ÏÖ˜‘Å_Ï>*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]ж £b1WÞ¾W¾…µúôš(äÿ‚PsÍõXü9÷[Òåña÷€~aêÚStÍf@凱ÿÎMèy³Í¾]­±‹€¾")ʃOa/‡¿Mí„o)÷ùøëvn@¾ÔÖ´þ»g‡#TKÉ5­?®Ù·Ã‘º%äºÖŸ×lÛàÈÚ É5­?®Ù¶Ã‘¶%äšÖŸ×lÛàÈÝú³þrWòïòÎ?äÒâôéoœçaäÿ ÏýcþêN—iËßúKæýǦټÍ7,—ªèö=6ÍViµõ]Ǧ٩Í6¢^«£ØôÛ5Y¦ÔKÕt{›f«4Ú‰~UÃwú_Îk×*H–þb§ÚI¤`^€ùê Pþˆûnɰ £uÃÅ/˜ÿ:ï½;{hfœ±÷»þ,3©öÌ˸}ÿØò¾ÔeáÅ÷Ÿ¸~Ðù»:džv*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUa?Õ®a¸ì’+;æogj?/ž?› ~¿Ø×–Ó˜èrÐêsê¯üûþAªy\ÑXò{=\ËNáf‚5úV3Û­zçí£4O|~â[^²6míþsÐ>ßÃã•és:¬‘|—ç=íü>9Òés8Y"ù‹Ì:Q™Hͽñ e§ÉÂiâºî›ö¶Êd‹K™è6>—™tyiöuC÷L¹‰ž>“î.ÿoI÷ןóðÉ?K~giW=xùvÕ>뻣üsSؘøqŸë¸8}“’°Ÿë¸>XÑ4þ›fú!§U•ì&ŸÓlȈyíVgºùOF22±V£'ucÔ_Sy?Dû;xg=ªÌåc‹ÞµFƒå}g\`²Óo.I=½(Yÿ†hÌøæ#Þ@û\ì0²ü'´ømIþfcü?†w¡ÙäÞLgR~¹æáóåÇ;¸­ÇDBßKìÏ*öóQÅšÿ›ÓøëÖvT*$ù°\àÝ£±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«ÿÓüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUýKÏ›¼ð|ÇùuåIܼ»¯Þ[GwX.R;•cà ’Jú§~³b¯äãþ~ãåÑ¢ÎEjš^?¦4*ú¿Íª×þHSèÅ_™X«±Wb®Å]Š¿oÿçÈ_ò›ùãþØÖŸõqWô{Š»v*ìUƒþfùˆùCÉÞaó`%N—¤ßÞò„}^Ý䨧ú¸«ò×þ|µåÏÑß“Zï˜dP%Ô¼ÏpÓs½¥º®ô¯Ûi;‘á¹8«ö *¿óøO;Ÿ3~~7–‘ë—4=>Ä ; 'xĎĬè>@b¯ÊÜUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ûò—PúÞƒj «B^#þÅ?áHζ±pf>tÒ;7‰§•‘ýT÷í.^™Ïäô=/þqƒPýùÍub6[ý>hÇ¿ÁÇñŒæ·Úl|z›!÷‘ú[ç¼¥Úň`X ³Î0äqÁy6µ§õÛ6Ø26‚òMkOë¶mðänäºÕ‡]³o‡#lKÉ5­?®Ù¶Ã‘¸Пžn¼ä uëŸ?ôþÏö#SœÿHÿº“ƒiKÞñǦٻÍ6ò^«£ØôÛ59¦ÔKÕt{›f«4Ú‰z®cÓlÕfÈÔKѦ—e>§(ø-¡’fÈ¥êÍiýä„GRͬîücü¹‘¥²¾Ô%5y®H,{•P[g±kÅHG¸7æLõIzåXÃŒ_~rßzú¬@ÔC#ì]ð;^ÁÇXÌ»ÏÜð^ÔeâË÷¼þÀñü޼˱Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_Cyvïë°MÝ£R~tß=ÿ²µ>žïˆùÖÿkÈk1ðÈ7¥iÓtÍ t¹¢ý:ÿŸjj jsò䆫*XÜ¢øzo21úy¯Ü3‘ö¦B^d}ÍZ°/ÐO9h † lsE¥Ìë²Eò_œô·ðøçK¥Ìád‹äï8èE 03£Óe·B‹ç½wMû[fLƒ±Òæy½•¥­éòSìÞ[ŸºEÌ\ÑØ½,Þ“î{×üåä¿¥üõas׎}ן㘛†ßúOfä¬GÞ~àñýOé¶m¢]VW²ù{K22¨a&¢Îþ[¹úx\ƒðq…¤cØŸ¼×=£šEȱJ^¹ì0Åó§™®>³©Nâƒýˆ¡üsÃý©ÔxÚÉžâ#þ”QûmìtPáÆçܧb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÔüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUû¡ÿ>AóÁµóGž¿-¤j­þ›e«F¤ý“g3@äò¾²•ÿTb¯Ù/ùÈoù˯Ë_ùÆ{1/æ&§êkS-lôK'ÔnXý‚8†;¢WnUÛ~ÎcþIÿÎAÿÎa«ÎV]þ_þ‚ÑôÝ:>ÇD¼ºÌº|rÍ8¸{bb­+UG/^1HªdÅ_NäYIBìqU¸«±Wb®Å_·ÿóä/ùMüñÿlkOú‰8«ú=Å]Š»Sšd·FžvT‰³3€*I'`Å_Šó—ŸóžW3j?óˆó‡:[yÃ\ó ½Î•©j¶ãÔ¶KyÅp–Æ¡Xpb$ºvX#_‰Kך*‚ÿœüÒó×üûcËöŸ“ßó”>PoùWïu%Å·›ü¾^òeºnMÚІâ”ß:à]h>åÿŸ{yãMÑ¿4îì¯/ ŽßVÒæ´žEU{‘4.¨¤õcÁÔ-w>&ƒ9Îß­N<~ %ÌoÊÁåÜy´êpÊ07ÛýZÅoa*FàgŽ|%ÖH[æ¯9èoáñÍö—3‰’/’¼ç }¿‡:].g $_,yŸG1; m›èKˆ5c—y –>–¡m%>ÌñŸ¹†W’;;¼9½'ÜÎ;%ý/æ[kž¼l#OºYOñÌ}>>JÆ}ÿ $ÚŸÓl͈pµY^ýå±RFbêrÓo©üŸ¡ý³Õfs!Õ>OÑ>ÎÙÎê³9˜âð?ùøšì|¹ùQ?•žæ$¿Õ®í#ŽÜ¸I2‰‚V¥T¢ÔÒ€:‘—û=ˆÏ?lßß³²ÑÂäü@ÑOlm"ÈBÕH" P³»Çš9EÀ‚9lo“—áÈØ¦#©\… ÄÐ “‚rz; 0|ã<¦y^vêìXý&¹óƧ1Í9Lÿ'æmìa–RÉØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÕüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìU쑟œ>eü”ó2ù›ÈzÌž_»½·}2çRŠÝn$·´¹e£'§nð0$Ôî#a¹ïš®ÖÓK<ˆ³nó°u‘Ód&f‰ýUtó\éžE„ÚZWŒ—²ì@ö;…ÿcÉ»Šf h0èÇsg¤Gãw.Òϯ<aó?¾}ÏBòïäîmi(¾»žãT¸<Úé˜Ð?²½{–$ŸšÝWlÏ$…":y{ÿS½ìäõs¾_/ÓÍõäÏüäǘ(%ƒÉš‚]KË›Gmz¿°(Øqc» îñ¨û$€ò]±ìÞ.Ð.ž£>±èQóäz÷»‰@Opý%³Õô¿8i±yƒËwQ^é÷ Ê9¡nJ|G±4 ì@9çSÅ=4Ì2è\z¦­iývÌü9y&µ§õÛ6ør7D¼—ZÓúí›|9bR­R¯Aei×ÐN?ð  žðJG½æSíǦÙNi©/UÑìzmš¬Ù‰z®cÓlÕf›Q)oæWç7–ÿ&4ÿ®ù‚O_Q‘I¶°…‡­)ìOò%z»{ñ ßO³»/iN¡°ë#È~³å÷"03~fùïÍ^lüýÔ]óäíi¡DÅ­4øª¨ªzqSÜŽ²5Yº-€zF‡Iƒ²cÁ„\9!·Å»ˆcØ<+Ì–÷Þ_¼“Ì—7²[ÌÛÉk#òW§`Z õÿXgC¥íHfˆÇ¨ˆ#¡?ãäòzîˡ>žgˆóóütæ‘Ú~h†fÓ|ÝX_ ÜÐðo¿u¯n£ü¬·/cÿÅ·öþ6kÓöðƒP8$>Gõ}Þoš®gk©¤¹“íHìçæÆ¹ÖÂ< ç…É>9¦ÔrLŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ʼ¹­Å¤¤ßX©©Rª;ëü3³ö_·±ön<ƒ-îAˆN÷ä:8Í1ÌE2¸WWó_îåse§7P+ɇàOÓAóÍØÇ®íï«÷8N²a?‘pdqi7©}ß›ÕôËK¶[KhÊy ܼ|>êggÙ—AÂÇuænÏÜ>CªÕÏ,¸¥ò~›ÿÎ7Îsj^L6þGüì’[ýR;}\’âÐ º´Èîãö{vLB{Çäý:Õ?Gù£O‡Ì_¸ŠóN»ŒI ð8xÝOuaPs™Ã#Ž\2؇_’˜¼ç }¿‡Ç:.g $_%ùÏ@§2tš\Îâù×VÓÌ3+Óup~ã›-¿]© ¯±ÔõîzB«÷3テ›tóà…yþ¦må­(Êë¶ØÎ\!œ¸‹éß'èŸgo Ñê³6Â/ª|Ÿ¡ý³Õfs!›þyÿÎ_hŸ“Ëå?$,ZÇœ¨Q”VÖmÿ?÷Ò·æË°a¡ìiêÏöÚ}Þ^nË Üò~?yÓÌºÏæ©qæÏ?ßK©j·_nI[ ìª¨¯Âª¯ìŒìqi¡†<<¿üÜøä­¡³ç­KË:Í}åIÙA5hªÈû-ýóŠÔû7ŸA3›A2;àO?‰Øÿ¿ôž‡º9Çañ»äǯ|Ön-¦µ¾ »àW "›wOߘÚkDðdÅš'^*EmÔwïó.f- ‰°ó¬ó'pìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÖüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«ì¿ùÃïùÍO9Î#ëßYѵ/'ÞÊ­ªhsHD2–¸Šà(  0dVP¼UY¿‘Ÿ^Lÿœ‹òµ·æ/åuúÞió|ÂÅŬàÐOT‘kî¬(èÌŒ¬U{&*ùóþr'þqÈ_ó“Þ^o(þgéâWŒ1²Ô ¢^YÈÃíÃ- NHÁ£zJh(«ù]ÿœºÿœóçüâf¤×ÔgVòeļ,uÛXȉ«öc¸]ÌÓöX•o÷[µ |QŠ»~ßÿÏ¿å7óÇý±­?ê$â¯è÷|#ÿ9ÿ9ïäùÅKFÑ*ºïŸçŒMÚAÉ †K§ôPõ†I?aiWU_ ~SÎþhÎiù†ÛþrþsºöêÓBþóKòœ|­›ÐcÈ#F6šÃýê—¬ Ì«öçË^YÒ|›¥Úy[ÊvVúncÃkikÅ Q¯EDPÇ~¸ªyŠ¿:?ç9?çàžZÿœTÓäòŸ–½kó*êÛéÜ뒸÷źÆNoÐOËßÍï.~pØ}s@“ÑÔ#Pn,%#ÖŒ÷#ùÒ½}¹o‡8dåìéT÷$9Ô|¾ö£mkOë¶8r2‰y.µ§õÛ6ør7D¼oCŸëÚ•í§_BFZ²#øfÛ0áˆ=ìƒÙô{›f£4Ø’õ]Ǧ٪͑¤—…þjÎL[y]ŸÊ_–u}«\( ߈é#øïÊ…suÙ~Íœÿ¼Ïéw"PûOÚ˜ã½Ëå o/\_^Iæ<\6¡¬LÞ£z­Ì+{“öˆíû+Û 9ÕK8„| ]Âþ¿×ÙöWgËâ‘Üôý~oÛ«Qà€âëðî{Ëóró®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*« Í‹4t䦢¢¹v›Q-<ÆHóÅ‹&2¢õ¿/y†;ðü¯ÚOâ=³Ù» Ú}¥úf9ÇôǼ}Ý{Ï?¬Ò~ç¤XÞtÎO—*·¹IWÓ”§¨90\ ÀÃß?%ÿç |ÓùtN‡)¿òìÍÊëK¦Þ,‡sÓöÔo·5`)šífCV7Øô#Ÿí $MŽÅú‰åOÌß+þué'\òtõ™}fÎZ-Å»νÁìëUnÆ ÌKO=$¸gð= ­Ï„Ûɼç }¿‡Ç7\ο$_'yÇG6þ¤ týÙÑaÉÄhì^g¡¯éõFô<ñËbåjw³è'è•âi˜¬®,"úcD†ÏC´}_Xš;[+tç,Ò°TEÉ;g?žff†åÍÅ Ø>Nüãÿœ³¿óMäÿÊg’ÇJ5Ž}KtžaЈûćÇûÆÈ*f²-&;PJžNz±êsyÉÈÞl~ú÷®ù\¼XØ>¯ªGiOpÜPaku¸ô92ñC¼ù;=>3AâÚάڬ¾¡P±®Ê;ÓÜçŒöÿnÓÉuQG¿âG!ö½.›OàŠIóBä;v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»ÿ×üÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±W½ÿÎ;ÎHùÛþq‹Í1ùóòÆóÒ‘¸Ç{c7&´½„úSƨÜñ`C¡5FS\UýkÎ(ÿÎ^y+þrÓËâ&KõMrÑPjº,î Í›¶ÕÚž¤LAôåQF0G Š«ê¼U)×t7ÍuÏ—|Éiþ—{CskuË ±°£+£¬«ùßÿœÚÿŸO_ùGëšó‹ÐM¨hƒ”×~[«Kul:–³cVž1þúbf_Ø2Öˆ«ðòHÞh¥R®¤«+ FÄzŠ¿mçÉ—PÙyÇÏ—·²$6ðèvÒI$Œà–fc°nIØ UõüäGüüCÌ¿š~b?óŽó6RkÞfºf†çÌP x!PhíkÌz|¿ܤD¿î°ü–@«Úÿç?çܺä•âþmþt\¯œ?5n$7O{rZk{9œòf‡Õø¥š»›‰*ÿv±üE•~›â®Å_ŽßóŸóóM?òd^þOþC\C¨yôr‚ûRIm¥(UkðËr?—xâoï98h¯æZÖµ1ßÜëþ`ºžûS¼•繺¹‘¥ši\ÕÝÉff&¤“SŠ¥˜«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb«â•áuš+"ÊÊhA8QLdbls}#ù{ùž·Å4y‚]ì±ÍÑdìðoÀüúò§Ù¯.£»ö=ÇcöðÍXòí.‡¿öýï¢lµ›ç58=H,®ÓQé¾cK0XÎ¥åÛ‹K´óG‘®OÖ oQ}&཈û$÷ý–èz“™ó‰GÃÌ8¢{÷ü}íñÉо”ü¬ÿœ´ó<‹äÿÌàºg˜ˆÖáÀŽÛ·.ѹÿ€oÙ+P¹ÎvŸ³RÁûÝ?ªÜÈýcíjN:Ü=ÓZÓúíš\9%òoåœÿ^óg™í:ú’/Ý4ƒøgUÚ1áÃŒ÷÷ÒúZ}OMòµŒšç˜.#´²„UåÐ{Ü“Ø Ïlç9ç—“ѨîùÏ_žzçæ´²ùcÈ ú—á=Ë|2J½ù‘ÐÒ55?´i°êô=‰@LÞ©ô»õŸƒ*ܤº&‹cå˜};1Îv¼™¾ÓAì?¾_›4³ùw4ÎvëÍG®ø#¢XFµ­Áa ——²,pÆ*ÌÇa™¸p‡†"ÉhÍš8¢e#@u|“çÌ3»YYr‹Nìôi)ݽ¼ßíÚvwe0â–òû½ß­óþÖí©jÏ 6Ú}ÿ©æÙ¶tNÅ]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUت¤R¼.%…Šºš‚:Œ³iaœ r!ˆ¢õO-ù©nékvBÜvðo—¿·Ýžµìïµ1×V,»dû'îî>_.á¡Öè87/¹é–—Ý7ÎÈK“%µÔ=ò@¸SÄÈt1j~TÔ"ó'”.ä±Ô¡5W‰©Pz©=Ô‚­Üd2âŽQRs-ÃïË?ùÉ+ó5Ëžqé¾e E?f –ÿ Ÿ°çù ßöIû#G—DpŽãí¿W¡1QÜ/üÅÐý+K©)öbýÊs?K™Ôz‡½óGäõ¿é[Y'ëÆá—þOñÍŒ²T\žÔÇÃ/Ò_HêÞuп,4ñªyŽ_Þ°>…´t2ÊGòŽÃÅŽÃçAš¬‚YM:M$³Íñ¿ææÎ»ù¥8}^Ck£ÄÕ·±ˆƒÁ›ùšŸ´Ø…2ôúXâåϽßcã¹ïyÌ·‹úqÑTv•l£ŒÊAwZï%Ëlj„ëzô:tfYÛsöTucíš®Õíl]!÷²>_¤òÏK¤9 ‹jš´ú´¾µÁ¢²ƒ¢óïž5Úý³—´§Å=€å‘ýg¼þž“áÌÔ·»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ÿÿÐüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¬ûòËóCÌÿ“žc²üÂü·ÔfÒõë- ÄDn£#©ªº0Ù‘VF*þ­ç¿ç?¼¯ÿ9c§/–õ‹ùk+½(½#¹U´öE‰gJ ¼g÷‘o^IIWèN*ìUù—ÿ9§ÿ>Øò‡üä¼w>yò'Õü·ùC9¼T+i¨7^7ˆ€äíõ„A_eUU~;þ@ÿÏ»¿ç |׿]{òŸVŠ÷É^W2Ckæ-BrÂÚê(ÛÔHàôȀך„oD&GVà1Wôsÿ8íÿ8Çä/ùÆ//”,4ñÈÞêÑï/$Qöæ–‚£¯P±¥O5Uô*²Iie`¨ ³3ä’zŠ¿Ÿ_ùÏÏùúCÞýwòcþq†ÿ·Å§ækv£?NQX8;/UyúŸ÷M$e_‚$–%˜ÔÉ8«X«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»{—4^Ȧ‘æ'&–+ƒÕ|žãü®ÝöÜs½¥Øü~¼\úÕúž³±û‚±æ;t—w¿ËÏæú^ÓT #TPA뜤±ÓÚFVÈ-õ?|¢XÙ‚–ù‹DÓüÕ§~¼gQHæ_¶¿Ô{Àï–éóËÛ—sl2¦ÿ—ÿÚ÷åL‘y[ÏbMKË„ð‚á~)a^Ü ûJ;ÆÆ£öM64ëû¿÷˜}3ê:ë T÷ /’¿7´O%y‡Î>h”½Üw÷’I§Å*f <¬ ,>£IÙIÛ.ÖvVMN,XùpÄ{¶6f6-RóÌ›—«¯yîv‡MBMµ”uTU?ʽ«ÝÍ]¾T¥ø¡‹³ãÁ„Yë/ÇÝɪY6 Ú  Ó [;X AEE0¤ ÍËŒei}Î¥ï–GXG˜¼Õk¡Û=ö¡'ÆÀ´ÇÁGrÏlÍÒé%ž\1&¯Y 4xæh}þAòW›üçyæÉùLLvˆk ì=Ï‹~®ÙÚètÒ·=Oã£ç¥Ú“ÖË}¢9Ò|Øvgº·b®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±VÁ ÔlFkp¯Cò÷šÍVÓQo‹¢È{û7¿¾z_³žÖø•‡Rwä'ßå/?>½wÜéõzâ‡Éé¶ú‡¾z.–xS˜u|•¸ÒˆžHî×ã4qöXuØ@=«Ê¿ó‘–§Må?s¿°’ !¶¼Ñ„(b~Úüþ5ñaA˜’À"n-»*9=î¿8ÓÉún—Ö5»‹¹2ã÷q¡cÝA¢ôîOcl½[3ÕöO”NF¢÷Ë ¼Õo5«·ÖüÇp÷wòš³HkO@`(a–F"-¦"#†‚„Ú¾NÑ)=Æ£ï‘%Ȇ®ù–=9iöæ?eüO€Î·;fG}æyGôžá÷ôvZ]È|žG{{6¡)¸ºnN~à<xæ¿_“[äÊlŸÀtAÆ(!3 ±Ø«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯ÿÑüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®ÅS}_Ô¼«¨ÚùËWsØj¶R¬ö×VÒ4rÅ"«#©{ŒUý5ÿÎÏÌ4ÏÏ$³ü¥üòž 7ó†Òý¸Åm«7@X®[ýö(’·÷T$D~½b®Å]Š»I|Çæ=+Ê]ßš<ÓyŸ¤XBÓÝ]ÜȱÅh*ÌîÄ*þb¿ç>?çåZŸçó]þSþLÉ>™ùr¢ºº Çs«wæ>ÔvÆŸ [4‹¼Ô¯¤Š¿$±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±W¦y'ó /ÓõÒéõ îÑü¼G·Ýàu£Ùc?ª;KïzÉí¹i}Þ?l}Þ^_'Ò–ÜWq¥Í´Šñ8ª²š‚3’É€ÀÑØ½Þ<£ ≰z§QjžùIÆÛj—PÞÄÖ·j²D⌭¸8#a1m3Ë:n™r× H5_pŸÔøú÷Ìœš™ÌW.ÿ6Ùj …2×Õ=óch´¾mSß&1¢ØO™üékåø ×-ÊVÓˆ‰ð'3ôz j ]Os¯íÒ†Ž7.}Sû<ß/ëþa¼óɼÔ½B û(<þ=Nv:],tñáϽóÍnºz¹qLû‡@‘æK†ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±VU¢ù‰í)mvI‹¢·uþÌî}œö¬é« Üy u‘ïÚ=ܰ5:1=ãÍèpja€e5pFz„2 €A°yQ< ”z—¾Ym' «Þ¤Êc–Œ§¨8ÛˆÄØPµxlô êNçïÄlË 3æ¬ú—¾6Äa@Ë©{à¶ØábZÏ™¨0ÁñL~åùç'í´ðЫ'ÙŸpùùì4Ú.=Ï'Ë+ÎæY˜³¶äœòLùçžFs$“Ì—qˆŠ yR]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÒüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]НŽG…ÖX˜«© ¬¦„¸ Ž„b¯ßßùÀ/ùú1scù)ÿ99}¿Ám¥ùžá÷'eHoØþ$øzÝåÅ_¿1È“"ËF•”ÔwÔU~*ó¯Í_Í*~Jynóóó3R‡KÑ,–¯,§âw¡+H>)%z( ³vqWòÿ9µÿ9ïæ¯ùË-Qô-<Í£~\ÚMÊËHW§(O‹Â»<„n©S]“r‘Õ|Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*Ë<³æË¯.ÉÁI’ÑÇ?Šøט:Ýu¸÷þ·kÙ«=®qê?HóûÞû¦ùŠ Fº´4m÷ƒàGcœ®m4±¿Óꡨ „ÕuO|§Ãr-yÕ}ðxkÄ¢ú§¾KÃE°¿2ùÞ- QRK¶ WaîÞÞÝÿØh»8ç6vÿ©ÔvŸkÇF(o.ƒôŸÆï¿Ô.59ÚòùÌ’·RPðÙÔâÅC†"ƒÀçÔK<¸æl”XÒìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®ÅSM?T’ÌðbL^,ê;ÚIöqàŸ«wXùÇõr÷4eÀ'¿V_ ùuªžã=kO©†¢x̓ȇ_,UÍ/›/¶fý±µð”ÚõÎ HÆþ£¬²Ösñt-áòÎÚ/jÆç7.F]#ä?¥çÈ{ùeáÓu,`’MNäç™ÊFFÏ79¬ ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_ÿÓüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ý{ÿœÿŸ˜j_‘ÍgùIùå<ú—åõVMA¹Íu¤®Á@“Kj¿ï° Ä?ºªUûÓùåÿ9mùqù äX7<Ë«Ay¦êúš42$ÒêlÉÉÚ†…H ´„úh, _ÉÿüåGüå¿¿ç,|È|Ëçy¾«£Û3®—£@ìm¬ã$ÓÃÔ”·3ÏÐ@¨ª¾[Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìU5Òu{"_ZØü'í¡èÃúøÇÔi£œQù¹º|ô’âÄt?Ž÷±iZÌZ´^½³n>Òª}ÿ®sz4°š?7¿Ñk¡«>#¨M=FñÌzsg˜|Ô,+gbCÜô'¨OêÌæÏG ñ}Rå÷¼ÿjöÐÓú1ï/²?·ð^U,¯3™fbÎÆ¤“RNtˆˆ ñ3™™³¹+0±v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š£-/Ѫ»¡ê¹ºìnÜÉÙ³¸ïÎ=»¸ùüÚòcePN— êDj?V{göŽ=tt–æÝa³S¬?xõéþ¯õÿo5Ø{0FW-ÇOÚïµ~ÐË$`8Iæâ_ö°bk¹Í«Í;v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*¯opöÍêF~c±Í‡föž]øñŸxèGqŠc8 («ÍEî‡S¸ñÍ¿mûO“´GG :‹æ|ÏwpøŸ*ñáK³˜nv*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»ÿÕüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÖüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿ×üÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÐüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÑüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÒüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUigq(µ±ŠI¦j‘©f4Üì*qTßü'®Õ²÷þ‘äÿšqW„õÏú¶^ÿÒ<ŸóN*ïðž¹ÿVËßúG“þiÅP÷^^Õlbk«Û¨aZry!uQSAR@¤ÓBØé—š›4zm¼× ¢¬!œâxƒLUmîu¦8ƒQ‚[yJò *2 ¥hÀTU1ÊúÌȲŧ^20 ¬¶òAÜ@ÜUøO\ÿ«eïý#Éÿ4â®ÿ ëŸõl½ÿ¤y?æœUßá=sþ­—¿ô'üÓŠ¥ÎágúƒE ºçéú\O>dÓµ®Ô늦ÿá=sþ­—¿ô'üÓŠ»ü'®Õ²÷þ‘äÿšqW„õÏú¶^ÿÒ<ŸóN*µü«­F¦I4ÛÅU’mäÜü8ªCŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]о¼ÿœüŽòïüä_ç‘ùSçö»MúÞþYZÊUŠnVöÏ*Q™\ÉE~˜«÷‹þˆÛù ÿ->fÿ¸ŒöMŠ»þˆÛù ÿ->fÿ¸ŒöMŠ»þˆÛù ÿ->fÿ¸ŒöMоlÿœ¾ÿŸbþOþFþOù§ó[ÉsëÏ­höðKl·w±I i.bˆóUI\ôa¾*øgþ}·ÿ8ŸäŸùÊÿ2y—Ëßšj1Úé:tVçN!bòMÀò/•öªUÿ?ÿœ\òoüâŸô/'~XI¨Ia¨èÂþc¨N“?«õ‰bøJ$`/Pï]ñWé×ä_üúòSóòÛÉߘ^`¸ó êš÷—´RìA Æ'»´Ži8)·$/'ã̆êÃN»ºˆ>¡ ^pÂμ€·˜¼UØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_¥ÿóîßùÂ_*ÿÎbÿŒ?Ç:¶§¥ÿ‡?E}_ôq‡÷Ÿ]ú×>~¬oö}ãJu5®Ø«ô¿þˆ—ùYÿSg™¾û/ú¡Š»þˆ—ùYÿSg™¾û/ú¡Š»þˆ—ùYÿSg™¾û/ú¡Š¿=¿çáó^PÿœAò÷—¼ÉägVÔçÖ/ç´•5Xâæ úQ¡©>$â¬ãþpCþ}ÃäùÊÏËi3üã®ë:uüz½Öž!°6þ—c‰Ã~ö'nDÈk½6b¯‡?1ÿ!4&Î@Íÿ8éayw.‰™¬´Aw'§õŸFâhãgÙBsÍ>tÛ~ÚÑÿ+?êló7ßeÿT1WÑÿ+?êló7ßeÿT1WÑÿ+?êló7ßeÿT1V3çOùó7å–|½«yŽÓÍ>d’}>Âêî4sgÅš™Àj@ Ðâ¯ÈOùÁÿùÇ}þr‡óBßò§Í×ך~Ÿ5…åÙžÇÓõC@ ¨¢ºÐ×}±Wíý/ò³þ¦Ï3}ö_õCwý/ò³þ¦Ï3}ö_õCwý/ò³þ¦Ï3}ö_õC|Ïÿ9…ÿ>¸òüãŸå˜¿9|¯ævûSѾ¡èÛÞ_Eþ³}³rôáVÙe$Q‡ÄvÛ~â®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_ÿÓüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUõŸüáçÆÿ8Ùù·¤þmùæÚúïG°·¾ŠX´Øâ’à›‹g‰x¬²D„`M\mÒ§lUû—ÿE«üÿ«œÿéNÿ²üUßôZ¿Éú°yÏþtïû/Å]ÿE«üÿ«œÿéNÿ²üUòÿüægüýò³þr'òwÌŸ“žJÒ<Ík­k£ý µ [(í×ê×ð\¿6ŠòWH˜-¾" © ¾8ÿŸtÿÎ]ù;þqÌ~cóæMŽ­}m¬iðZ@ºL6òº¼ró%ÄóÀ§J5튱ùø_üå•ç,ÿ1tÏÌoË›=NËM²òý¶•$z¬PÅ1š+»©™•ašeáÆe–¡¾P•_ª•Ÿóø?ɯ$y/ËžKÕ´?7I}£èú~Ÿ;Áe§´m%µºDå _+,§‰*¦@銳Ïú-_ä‡ýX<çÿH:wý—â®ÿ¢ÕþHÕƒÎôƒ§Ù~*ïú-_ä‡ýX<çÿH:wý—â¯ÃMcóã@Ô?ç$“þrNkáå•óÅ·™M³G×~«ú\²pý^ @_W‡-¹Ó|Uû—ÿE«üÿ«œÿéNÿ²üUßôZ¿Éú°yÏþtïû/Å]ÿE«üÿ«œÿéNÿ²üU‹ùßþ!ù/æ_.jþ\±Ð¼à—:†ŸuiIe§„4LŠX‹â@ï@M;UüÔâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯lÿœ{ü‡×ÿç$üïeùIäk›Mbþ+‰b—R’XíÀ·‰¥nMr¸%TD;õ ß~‰Ñ?;ÿêÿäÏúNÔìƒwýSó¿þ¯þLÿ¤íGþÈ1T£ÿ>aüìÓ-gÔg×¼œb·‰å`·º‰$"–4­€ ñÅ_‘¸«êùÅùÄO8ÿÎ]jº¯—?-¯´›Ö;¹ÛVšâ$d‘ø†'$×­BŠwÅPó”óŠ^mÿœI×ôÿ%þcÞéW·Ú•é_IšycXýWŠŒg† ÉÁH¥7튾´ü½ÿŸDþpþeyWCüÆÐµ¿)E¦ëúe–«kÍåúÌÞB³F²*Y:‡ à0V` hÄoвÿú"§çý_ü™ÿIÚýb®ÿ¢*~wÿÕÿÉŸô¨ÿÙ*øþr_þq³ÌßóŠþnOË/Ì+½6óT’Æ@I¥Ë4°zs;¢ŽSE r3QÂ7=•y“|¯uç}Jò^’ñG}¬_[ið<å–5’æU‰ • ÁC0äB±§@zb¯Õ¯ú"§çý_ü™ÿIÚýb®ÿ¢*~wÿÕÿÉŸô¨ÿÙ*ïú"§çý_ü™ÿIÚýb¯ËßÍËÍGò—ÍÚ×嗘巟TÐo§Óîd´ghH£ÙÕ©#b餀 Uâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ûþqGþq¿óþrô÷ý õçÕ?D}Gô—û’{_Yõ½²G:zRuû5ÿ+}ÿDßÿœ¾ÿ«Ïþ’ÿ\UßôMÿùËïú¼ÿáÉ/õÅ^_ùÍÿ8{ÿ99ù äíKó_ó\š=Jú¿ÖZßÌK úÅÄvéÅ~9¾§¶*üô×<å¯ù#ƒÌš­ö¡LZ5»¹–`¤Š¡Ø€iኾ×ÿœhÿœBüýüòò‹ùÓò?Pú¯—VúkFôÃÙÿ¤FˆÎ}5 teø»ý«ç6þWy×Ë¿šR~Qù†~~}MbßMi¾´dÿM•Ñco¬öf_·^Ø«ôOþ‰¿ÿ9}ÿWŸü9%þ¸«¿è›ÿó—ßõyÿÃ’_늻þ‰¿ÿ9}ÿWŸü9%þ¸«ó»ó'XüÉü·ó±ùiç/0ê‡TÒ.§Óï£MNâXŒ‘1GPyÑ—¯mÆ*Šÿœqü¥óßç_œ¢ò7äµÇÕ¼Ë%¬ó¤Ÿ[k?ÝDz«B*Nø«ôþ‰¿ÿ9}ÿWŸü9%þ¸«¿è›ÿó—ßõyÿÃ’_능zçüûÛþr×ËÚu濨ë,-,m幘¯˜å$Gj îhØ«óUüÃóV¹k&•­ëšå”¼}H./f–6âÁ‡$f ЀEFÄаüUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«ÿÔüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUõŸüá/ÿ3?6ôŸ(~{MN¸·¾{™.o~£xíâ¬üÓ\-/‹§|Uû—ÿBIÿ85ÿW]ÿ ÿeX«¿èI?ç¿êë£á`ì«JõÏù¯ùÂ]:òæÃTÑÌvò¼@y¸±æ¨JÐ}g}ûb¯æW~‹ÿϺ'ÿ&ÿ8<Çæ=7þrZæÒÛL³Óà–ÀÝê¿£A™¥âá_Ô™ãÚ¦qV/ÿ? ü­ü©ü£üÅÓ<·ÿ8ßqkså©ü¿mwpöš—éwtŽ ¾¤œO¦‘|ØQ©ñn«õOò³þpãþpÃ]ò_—5¿6êzBk—š>Ÿq~¯æ³ ™mѦ ÖGš­”«<ÿ¡$ÿœÿ«®ÿ…ÿ²¬Ußô$Ÿóƒ_õuÑ¿ð°?öUŠ¿?ç>ÿ-?,?*3aò¿üãÄö×VmÖáž×Pý ŸYy%[œ›ñTøymÖ›â¯?$4M Ìߘ¾PòßžÝ#òÖ¡æ *ÓTy&ôlæ»'--WÓ2ÕzŽ#⨦*þ‹¿èI?ç¿êë£á`ì«wý 'üà×ý]toü,ý•b®ÿ¡$ÿœÿ«®ÿ…ÿ²¬Uüèþwèš–1|ßå¿":Iå­?Ì­¦–ñÍë£YÃw"@VZ·¨ ahõ<‡ÅS\Uåø«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«Û?çüýùùgç{/7þDÃ<þq·Šá-£¶²úô…$‰’ZAÁùQ TñøzöÅ_tù«þ~+ÿ9äX¢»ó´—:<±H¤Ô|µ²ÈÀTª™mÔô« ÿ¢°ÎIÔÇeÿp‹ú¥Š¡¯?çê¿ó‘·öòØÝyŠÍ¡š6ÀÒl…U…â/Š¿:qWÔÿ󋜜Ÿ“ú®«©Î4Û]Üêw–±Å~-4¯ÒDB¯É '§'˽zb¨?ùÊ?ÍŸÍßÍíOÖÿç$í®­µËk«Ù­Þ™ú9·ªíQ§!Í›â¡ð®Ø«êï"ÿÎdÎaù;Ê6äë PyOJÒm-ô釕ÖX…¼ °¸œÛéé*ŸP±ä>*ž¸«ÿ¢°ÎIÔÇeÿp‹ú¥Š»þŠÁÿ9%ÿS—ýÂ,ê–*ùóÇóçÎ_ó‘~b_?þk^G}­%¤VK,Vñ[¯£3(áªÔmé\U€y7UÕt-JÖü¤¬úåõµÅ‚¤~«˜¥V„,t<Ép(´<ºPâ¯Õ¯ú¿ùÎ_úµk?øGû%Å]ÿC·ÿ9ËÿV­gÿñÿd¸«¿èvÿç9êÕ¬ÿá?ì—|ù‹ùuùËçýwWüÊóÏ”<Äúž§q>¡¨\êýI y…ˆ"/Sµ«çœUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å__ÿÎ)ÎYþeÿÎ.þžÿ•3ce{úsê?^úå”×\>©ëz\}7N5õžµ­h)JUõUïüþþrN“êú…‡—`–¸K¥Ü#P÷£\LU ÿE’üûÿ–o,ÿÜ:û)Å^Qùáÿ?-üÜÿœòN©ùEç¸4$Ðõ«}a¬ì¥ŠaõkˆîS‹´ÎÇ×á5Z|Uùñоûÿœhÿœëüãÿœrò‹þ_þSiºuÞˆ÷Ó^´—Zt÷ëJˆ¬9Ç* QjW|áæßÎ_5y«óFOÏ-jÞó„šÅ¾¬Ð$ýjGEô‹âJ-W•OŽ*ý »ÿŸ¹ÎGØDn¯´ V€¼šEÒ¨®Ãs8ªQÿE’üûÿ–o,ÿÜ:û)Å]ÿE’üûÿ–o,ÿÜ:û)Å_›™^Ôÿ5<Õ¬~dyœBº¶¹{5ýзB‘ fbÍÁIb§`Iùâ¯Aÿœrüðóüãßœ¢üÆü¬¶·º×¢µžÙc¹·{ˆý9€xFÈÕlk¶*ýÿ¢²ÿÎKÕFÿ¸5ßýWÅ]ÿEeÿœ–ÿ«ÿpk¿ú¯Š¥Z÷üý3þr?Ìzeï—µ H·öÓZÊSG» Âd(ÜI˜ÐÐí¶*ü®ºòö«c]^ØÝC Ó“É ªŠš ’&˜ªOŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»ÿÕüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUïßóŒ¿Z‡üäÏæ‡å…¨A¦^_Ãu2Ý\£^ó§–t}CÌ“ù×G–=>Ò{¶m.a eÊ‚M*@¦*ü\Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_UÎ~}éó?šÚWæïšìîïôÛ {Øž /OÖcqnñ)£"ÐÔôÅ_UÿÏÂ?ç=|¡ÿ9}åï/yoÉ:6­¦O£ßÏw+ê".²EÀô¤sP|@Å_•X«±Wb¯ÐŸù÷¿üåÿ–ÿç|Ãæ1ùÛLÔu85‹-!M8CÉ9y’Þ« ¡â©güüþrÇË¿ó—^qÑ|ëä­7PÓ-tÍ iòG¨¹³ýbIy/¤î8ÑÀÜÖµÛ}íä¯ùûåß–'4ŸÉK¿.kòjš”­|½%Ê OA§†ÁmL‹Yƒp,**¼¸ö®Ø«ðOv*ìUœþXy¦ßÈÞqò÷uäš×GÕì5 cŠœÝ-®VU©‘ ARzœUýÿÑm?+?êSó7ÝeÿUñWÑm?+?êSó7ÝeÿUñWÑm?+?êSó7ÝeÿUñV3çOùüÏ噼½«yrÓÊÞdŽ}BÂêÒ7qgÅZh™jNM;Ðb¯çv*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wéÿüû{þsWÈÿó‡ßã?ùYz~µ}þ"ýõOÑ[KÃê_Zõ=_^â W×Nuˆ<ßù·«Ë­kÖ‰cıÅ[t‘äT¤H‹@ò9©øºÒ˜«Ú-ç=?>ì´ü‰kçK´Ðb±]5-EµŸj±zB:˜yP'ÃZ×Þ¸«äUòëë|¯Kv‚ÆYƒžE€øUºïLUæØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÐüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìU5Ðô-KÌ÷öþ_òÝÆ¡ª]È"·´´‰æžW=8Ðf=€â¯KüÂÿœ}üÌü§³‹ZüËò–µ¡éÓIèÇsc40™$'¨Ê‘µ©ÐlqWâ¬ËÈŸ—žfüÏÕWÊ¿—zM浬™y«ë7Dˆlì {‰ßˆ©â‘‚Ä &”vÅYWæ/䯟¿(¸üÐòέ  Î_VmJÎ[t”¥9ÙÔ+¨ä$TW¨Å^cо‰ÿœhüºÑ?2üÇ©hÞnÐ¼Õæ +mòñ-ü¡^C24ió ‡«£=$#pÌETªùÛU‚ .dKku/,ŒEIf4qW½ù§þqKó“É:]Ç™ü×ä?1Xihe¹º›M¸CŠ—‘¸Ñ¬ÔQÜ⯟ñVÀ,B¨©;1W¸y‡þq›óoÊzùãÌÞGó†k,··:eÌpÇtypSüÍA¸ßqм;v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»}Cÿ8[ùg ~q~uùCòßÏÖíwåýNòU»$xŒ‰´²…æ„0ăJÐŽ¸«ô;þròWò_Vü”üÈüÈü²ò,~Q×ÿ/|ÿqäø§·Ôîn…âZ\A Ìé-«5Dtf”RVŒUø¡Š¾àÿŸv~Wy[ó“óËDòæ^« ]ZêRMi#Ȋͤ’!å#lÀŽ*úwþrÃò›ò‡VüƒŸ?”þI_&kV>u¹òÛÇ¥qx“ÙŸÖ ŒjʆNœØUùоíÿŸr~LùGóÛó§Oò7æ‰Ô´a}xöž´‘,’B€§6‰•ø‚k@´ªµWºÿÎ[þWþSj¿óžYÿœ“ü¢òbù/U¼óuח糃Q¸½ŽH"[ÀYš`£—+Ueâ‹Ä;+Ø…_“¸«ôKþ}‹ù9äßÏ/Î ü—ù­¥G¬h© ÞÝ­´²K‰£–W¬LP‡ZoŠ¿;qWb¯éoó+þqSþqæëÎsÿœ|Ñÿ.aÓ/ô"Kæ›}~ÛU¼õRS#Ä‘¬ÅAFPü™Ý[ì4tÅ_Í&*šèVQê:•žŸq_J{ˆ¢~&‡‹¸SOzUý ~uÎ1Î?é‹ù¯ù?åËÈôÝcÈž@—ÌöZújײM%À¶–HÕ¡v+ð´c‘gpà‘Åzâ¯çcv*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wè_üûÿòòÿó’óÏ~büç²»Ôô'ùjme,m.ZØÌñÕ](Õâ„(äZ­Zb©Ÿüç_ägå—å×”¿*¿6¿#tËíOóö—}}=…åãÝzB´x¨ÎYƒRáƒüEOâõUùÊ¿Jç%+¿0¼“ù³ù¡ùé¢Ýk–¾DÓ´ÝFÚÞÒökG+"^¼Ê l –ôœ«Æ›u8ªEÿ?ü‡ü¿üœ»ò'˜¿&,¯4Í#Î[‡Y{»¦¹ôZN, ;Õ«ÅÀoˆŠŠ­1Wçž*ý'ÿœ(üü¬ó‡å׿oç箓®Úy& °²½{NK7¨\òB¤¿À U¸Ëá$‚cóðÏÈO"þEy«Êßò§­.¬4_2yj×Yk;«–¹0É,Ž´Wzµ ªÔoŠ´  _Ÿ˜«ôò3òCÊ~qÿœjüØüß×mç2ùnëMO•.¦Ž%Y$Œ78U„r}¶§54®Ø«óó}Aÿ8_ùeåÿÎOΟ)þZyúÝî´ Væâ;¸c•âfTµ–E£ÆC‰Øâ¯½?ç%ÿç#`ü›üÁüÑüšòþ§ kž@óÌÞP‘®5)n£»{Yá†Y8HÎl' €qp˹¥AUø×о¬ÿœ!üŸòÿç×çg•*|ü³¾©É|÷Io'¥#­­Œ÷JÀ%C4J¬E‰mÿÉ÷sÿ€Î£ÿ'í±Wå*ìUý_yÛÿZ[ó#ÿ4Éÿ¨¹1WòƒŠ²)ÿÇsLÿ˜Ûù8¸«úfüï´?2?ç#¯'ïù6ê²< w5º1WòóŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«õþ}ÿ?Ïü×÷ßònlU¯ùÏüŸóŒÿø ê_òcLÅ_”8«õ{þpÿ$'üäÇþ:oü˜ÔñVÿççñÃüÿÍcÿ&áÅ_”«õþp×ÿYwþrþ`´¿Õ6*ïùúçüw?+¿ó_é¿òrLUùAŠ¿Wÿç?õ¿=¿æ7Iÿ“°b¯Ê Uöÿüû{ÿZKÈ?ówÿP3⯿ÿ9¿õ›ç#óyë?õcŠ¿qWßÿóëýiß#Ûëþè÷˜«ìοýeÌïüÜÚ·ýE.*ü@Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š¿ÿÒüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUöÿüû{ÿZKÈ?ówÿP3⯷ÿç,`òå/äGæå`óÇ–µÿ4ù“óFïÌQiÚ6¡ÍÅ´3ÃEqüqÉ…„œ€PÔ^E¶Å_ˆ8«ôÿþ} ÿ­ eÿl]Sþ ¸«?ü÷ÿÖò‡þlÝGõêØ«ò~¯Ï›ò}Üÿà3¨ÿÉûlUß¿úÁÿ“_økõ©â¯ÊUú½ÿ>€ÿɧç/ü×ú·ýFØâ¯ÊUyOþ;šgüÆÛÿÉÅÅ_Ó÷æþN¯ÏßüÔÐÿÔ<ø«ùaÅ^ùMÿ)Ç–íµ§ÔJb¯é?þr^çÉß”ú¯ü䜼áço.A©ùÛÈÐé—þ¾Ÿ¥–â=.h#köé3J… ‚8žmÅwÅ_ˆ*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*û7þ}鬨hó‘CÕ5˨lìÒþti®$Xã -¤Ñ ,ÄYÙUw݈sо€ÿŸþp~zÇæÍgò“óOÌ1Ü~_j¥æ© ØYþ(Új^J¶^«Ú ‘Š¢­wgaË|UùeŠ¿E¿çÕW–öó‘¾]º¾–8a[=X‘‚¨­” nh1W¾~wjV’ÿÎ_ÙEq\ÍmNAu/ÀËuFãZÓߦ*ümÅ_¥óé½sNпç ôÙµ»¸,ãŸJÔ ‰®%XÃÈÑK ¤ÔÐ⯤¿ç0ÿ-5ßÊOùÃ)ù3ÎqÁ§æ5ÍÃ-½ÄWúwê’ÆD‘3)%XTV ìwÅ_ˆX«õOþ|õk§~{ÜÜjG_á­AyÊá¦{}ªÄ â¯ÊÌUØ«ú¨ó¦¿¦7üä—æ5ÒÞÛ_òpÆ®&N,ÿ[“á´'Û®*þUñTïËSÇm¬i÷7 (îàwf4V@I'À UûÃÿ?Oüéüèò´÷6þIó5²~JyžÊ (Cbút²\I4×]®Ö9O1)ãѨU~â®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ýŠÿŸB^jQjß™ö~PMæ‰|¤í¥ZÌÑÒk”vôÔ¬ŒªWÔ(‘ |Dо.ÿœÃüéüÞüËóZy'þr8ÛÛkP3XǦYÅlZ<¼^&ܺ1p‘Õƒ°¢¨¦*ù~¯Îÿä„ÿœ˜ÿÀgMÿ“ž*ßüüãþ8‘ÿù¯ìäÜ8«òƒ~ÄÿϽ¼•¬~hþB~{~Zy¾ó6«m¥EgeëEHÄOOŠWDQ±ø™‚ûâ©/üýËKºÐüÕùo¢j‘úW¶~F±·ž>JÜdŠiUÖªH4 Š‚GÅ_’«õþq“ÿXÛóÛþctŸù;*ü Å_oÿÏ·¿õ¤¼ƒÿ1·õ>*ûÿó›ÿY·þr7ÿ7ž³ÿQÖ8«ð‡}óÿ>¿¸Š×þroȲÜȱ¡m];ŸI»UZžìÄ(ÉoнKþ~9ùÑùí˜/¿!:b´Ò|¯5üÚî•ee 7vFæxm.&’ÝäbH¾*܇'Jð8«òÓv*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ÿÿÓüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUïÿó‹?œ6?_š¾YüÞ×-&¿Óô[§–âÞÙ•ehå…ábœè¥”? ©Ç’×U6ÿœ¨ó‡ågŸüé?? m|ÃicªµÅö¨žaú°ß\\I+˜¼’(‹‹-7*×犾jÅ_cÿÎ ÿÎCysþq‡óRßóSÏÖº…Þ“ŸyhÑi‘Å$üçP…šXV‚›üuðe™ó”Uó—üㆃÿ8ߥÙêqù—Kó…ߘ&¸š(E›[Lo¸¢:ÌÒÖR ÄgøÍ%_b¯²¿çÿç%ôùÅ?ÌôüÌóvw©ii×:mÄv&?¬F³4n$E‘‘ƒK¦Äž[Pªûsþs&o"ÜÎþUMù­’O™µÑñë¦~). &õ½h÷›Ô)ÄŸÝñ¯Å\Uø³Š¾Ûÿœÿœ“òÏüâÿ5ÿ:yúÓR¼±Õ|¯}¢@šdPÉ"Ïqqm*³‰¥…DaajŪVŠw!WĘªi¡Þ¦™¨Ùê3†1[ÜE+¡$#†4­hÛš'%™˜ß|…Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_ÿÕüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÖüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿ×üÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÐüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÑüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÒüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÓüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÔüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÕð©ÿ>Ëü÷Ð$[mw@‘%uæ¢ÍdÔi»Ú,¨¦£ì± Þ”#K?è?œŸõcÔ?î¨Õ UßôNŸÎOú±ê÷ Ô?ê†*©üû‹ó¢æE··Ð¯L²0Dõ4ûØ×‘4á ¢½YˆQÔ1VWÿDŸÿœ’ÿ©rËþâö?õWwýþrKþ¥Ë/û‹ØÿÕ\UÇþ}Aÿ9"7>\²ÿ¸µýUÅX‰ÿŸsþr©âÚýFÆšeù¡ŠµÿDéüäÿ«¡ÿp½Cþ¨b®ÿ¢tþrÕPÿ¸^¡ÿT1TßJÿŸb~}y‡Ÿè/³úTõ>ºNŸN]8ýpEÏ¡¯ ñÛ•*1Tãþ‰?ÿ9%ÿRå—ýÅìê®*ïú$ÿüä—ýK–_÷±ÿª¸ªYªϯ?ç 4Öç]òú¤.x©³™oß—]ã´õ]E?i€^Õ©ÅR?ú'Oç'ýXõû…êõCwý§ó“þ¬z‡ýÂõú¡Š»þ‰ÓùÉÿV=Cþáz‡ýPÅYT?óêoùÈÛ¨Òæ×˶¦:5+Hœ« ŽQÉ"ºuVPËÑ€;bª¿ôIÿùÉ/ú—,¿î/cÿUqWÑ'ÿç$¿ê\²ÿ¸½ýUÅXÍçüûkó·L™ì5-énb<\[Ú]\Ç_òf‚'Ǻ1øªþ‰ÓùÉÿV=Cþáz‡ýPÅ]ÿDéüäÿ«¡ÿp½Cþ¨b¨í;þ}¥ùå­Ì,4mv¹ °pOe_ß\¤qƒà Tö®*Èè“ÿó’_õ.YÜ^Çþªâ®ÿ¢OÿÎIÔ¹eÿq{ú«Š¡oçÕßó‘\©yv¶ˆUͽõ½Ô”éðÃ<®kÙTžý8«ÿ¢tþrÕPÿ¸^¡ÿT1WÑ:9?êǨÜ/Pÿª«¿è?œŸõcÔ?î¨Õ UéÿóëOùÈMj£ùz&µbB›«¨¬¤¨45†å£oЕ¡ê*1TwýþrKþ¥Ë/û‹ØÿÕ\UßôIÿùÉ/ú—,¿î/cÿUqT‹TÿŸf~{h‹Ms@•'eæ¢Í$¿N5¦òZ,¨ AøKrïJURßú'Oç'ýXõû…êõCwý§ó“þ¬z‡ýÂõú¡ŠªCÿ>áü麑m­t+Ó4„* ,/bBÇaÊI!TA^¬Ä(êH«+ÿ¢OÿÎIÔ¹eÿq{ú«Š»þ‰?ÿ9%ÿRå—ýÅìê®*µ¿çÔ?ó’ ·—,øSMVȽ„„ŸÅX™ÿŸt~rOÐz‡ýÃ/ÿê†*×ý§ó“þ¬z‡ýÂõú¡Š»þ‰ÓùÉÿV=Cþáz‡ýPÅS}+þ}‡ù÷æ |¾\EOSë¬túW§®¹ô5áËíR¢ª§ôIÿùÉ/ú—,¿î/cÿUqWÑ'ÿç$¿ê\²ÿ¸½ýUÅR½Sþ}ùýåôYõß/„ŽCÅ>§ Ô½~$´õYGùLíZâ©'ý§ó“þ¬z‡ýÂõú¡Š»þ‰ÓùÉÿV=Cþáz‡ýPÅ]ÿDéüäÿ«¡ÿp½Cþ¨b¬®ùõ/üäuÌiqoåËSŠ9êv‘·*9#ÈM:«Ã¡âªŸôIÿùÉ/ú—,¿î/cÿUqWÑ'ÿç$¿ê\²ÿ¸½ýUÅXÅ×üûsó³O™ìoô+±qAewqa׌°ÄѸÿ)”ö'CÿÑ:9?êǨÜ/Pÿª«¿è?œŸõcÔ?î¨Õ U§Ï´<õÉ…Ž‹ N÷$¥Ü3XÇA×÷·Iuð^U=†*È?è“ÿó’_õ.YÜ^Çþªâ®ÿ¢OÿÎIÔ¹eÿq{ú«Š¡/¿çÖ?óúD ¨j¾^…mc§3myÜ›š0Û´’¶çöTÐnh8«ÿ¢tþrÕPÿ¸^¡ÿT1WÑ:9?êǨÜ/Pÿª«¿è?œŸõcÔ?î¨Õ U‘iÿóë?ùÈ]f¤yv&µbB›«¸läÛcXnZ9W~•Q^£lUÿDŸÿœ’ÿ©rËþâö?õWwýþrKþ¥Ë/û‹ØÿÕ\U!ÔÿçÙÿžš¢Ï[Ð&K‚g·ÉÄô¬¶©,`ÿ“Ëî7ª]ÿDéüäÿ«¡ÿp½Cþ¨b®ÿ¢tþrÕPÿ¸^¡ÿT1UkùöÿçUì©ie Þ5Ĭ1-äXì9K,K õgeQÕˆ«)ÿ¢OÿÎIÔ¹eÿq{ú«Š»þ‰?ÿ9%ÿRå—ýÅìê®*²Oùõüä|JÒËåË@Š 7RÍÍZ*ÈXŸ` =…qV'ÿDéüäÿ«¡ÿp½Cþ¨b®ÿ¢tþrÕPÿ¸^¡ÿT1WÑ:9?êǨÜ/Pÿªªs¥ϰ?|ÂMËüÒ"ýuÿGšžœVóÒ.Áüýòú¤š÷—ø,¤„ú“þ$޼–ÌJPx =«CФßôNŸÎOú±ê÷ Ô?ê†*ïú'Oç'ýXõû…êõCwý§ó“þ¬z‡ýÂõú¡Š²ÈÿçÔó‘ó"Ë—-80 ¼µK44;Š«HbÆ*¿þ‰?ÿ9%ÿRå—ýÅìê®*ïú$ÿüä—ýK–_÷±ÿª¸«¸ÿŸoþuYJöwºàž&) ŠÆòt 6<¿f´4U'ÿ¢tþrÕPÿ¸^¡ÿT1WÑ:9?êǨÜ/Pÿª«cþ}ÑùÈM?Aê÷ ¿ÿª«,Oùõü䄊|¹gFŠê¶@ïâ  ‘ÅWÑ'ÿç$¿ê\²ÿ¸½ýUÅ]ÿDŸÿœ’ÿ©rËþâö?õWb³ÿϸ:mdkk­ ôM*â; ÙSØñ‘!(â½ISÔbª_ôNŸÎOú±ê÷ Ô?ê†*ïú'Oç'ýXõû…êõCL´Ïùöoç¶½)´Ð´ ^e^l/KãÓi.Ö$cR>ŻҀª{ÿDŸÿœ’ÿ©rËþâö?õWwýþrKþ¥Ë/û‹ØÿÕ\U¨ÿÏ­ç!4HMþ³åèÖØ¤ÚÝE{%OJCjdƒ¹ÅX÷ý§ó“þ¬z‡ýÂõú¡Š»þ‰ÓùÉÿV=Cþáz‡ýPÅ]ÿDéüäÿ«¡ÿp½Cþ¨b¬–Ëþ}_ÿ9ª@—úo—`kiEPÜ_[ÚÉJÓâ†vIPû2ƒß¡ª+þ‰?ÿ9%ÿRå—ýÅìê®*ïú$ÿüä—ýK–_÷±ÿª¸«ÔçÚž:,æÃXÐg[•‘k÷±Ðî)5´rDM:€Äކ‡lUÿDéüäÿ«¡ÿp½Cþ¨b®ÿ¢tþrÕPÿ¸^¡ÿT1TMŸüûkó·S™,4Ýé®e¼¾Quï/²jcú‘mB´ëÈÙ‰Bv§*W·LU)ÿ¢tþrÕPÿ¸^¡ÿT1WÑ:9?êǨÜ/Pÿª«cþ}ÏùÊÇŠèwõ; é—à}þ†*ËGüúƒþrD€Ö{ÿÚÚÇþªâ­ÿÑ'ÿç$¿ê\²ÿ¸½ýUÅ]ÿDŸÿœ’ÿ©rËþâö?õWbrÿϸÿ: v‚} øH„«pÓ¯¤Za*ÃÁ”zƒLUgý§ó“þ¬z‡ýÂõú¡Š»þ‰ÓùÉÿV=Cþáz‡ýPÅS=/þ}•ùïæ ßBÐ$yQy¿×ôõãZ|/v±+þÊ’ÝéLU<ÿ¢OÿÎIÔ¹eÿq{ú«Š»þ‰?ÿ9%ÿRå—ýÅìê®*—ê_óëùÈ-¯k^^D·ä¶—ßIÈôýÕ©–Jx·#¹Üb©ý§ó“þ¬z‡ýÂõú¡Š»þ‰ÓùÉÿV=Cþáz‡ýPÅ]ÿDéüäÿ«¡ÿp½Cþ¨b¬šÏþ}Yÿ9©B—Ú—mÍ´£”f{ûkiÿ*)$CþK¨>ت'þ‰?ÿ9%ÿRå—ýÅìê®*ïú$ÿüä—ýK–_÷±ÿª¸«¿ÿŸk~xhó¶Ÿ«h7 t”ä-m®/#ÜTRkx䉶ëÅÆ„Š ÿè?œŸõcÔ?î¨Õ UßôNŸÎOú±ê÷ Ô?ê†*вÿŸl~wê³-†— ÜµÔ†ˆ.-nm#ÛsÊkˆÒ$Ûù˜W§Sв_ú$ÿüä—ýK–_÷±ÿª¸«¿è“ÿó’_õ.YÜ^Çþªâª?óê¯ùÈ»žò÷˶ÂÞ ZC¡m;…xżŽ|±ì1V/ÿDéüäÿ«¡ÿp½Cþ¨b®ÿ¢tþrÕPÿ¸^¡ÿT1WÑ:9?êǨÜ/Pÿªª{¦Ï®¿ç uèÞ‡åå{unÞN–ÈniÙŠB(Gĉè A¢©—ýþrKþ¥Ë/û‹ØÿÕ\UßôIÿùÉ/ú—,¿î/cÿUqT—UÿŸd~|ù}’-{@tydú}@PuäÖ‹*¡ð A=…1T«þ‰ÓùÉÿV=Cþáz‡ýPÅ]ÿDéüäÿ«¡ÿp½Cþ¨b«—þ}ÍùÍ!Ç¡_—cAËM¾QSÒ¬as°ÅYoýþrKþ¥Ë/û‹ØÿÕ\UßôIÿùÉ/ú—,¿î/cÿUqWÑ'ÿç$¿ê\²ÿ¸½ýUÅX“ÿϹ¿9£cšÿ%$:mû Ðq±ÅVÿÑ:9?êǨÜ/Pÿª«¿è?œŸõcÔ?î¨Õ U5ÒÿçÙŸ>`w‹Aòû»Æ?×Cià°â×k¹ñ IÆ*Ñ'ÿç$¿ê\²ÿ¸½ýUÅ]ÿDŸÿœ’ÿ©rËþâö?õWKµ?ùõ×ü䃼×<¼©0@lçK÷äwŠÐÊàPˆ¨QК‘URú'Oç'ýXõû…êõCwý§ó“þ¬z‡ýÂõú¡Š»þ‰ÓùÉÿV=Cþáz‡ýPÅYE¯üú«þr.þ$¼²òí±·”rŒÍ¨ZÀåONQJë"u ;ŒU_þ‰?ÿ9%ÿRå—ýÅìê®*ïú$ÿüä—ýK–_÷±ÿª¸«¾ÿŸl~wéS5†© Ü­Ô{8¶µ¹»ŒWqÆh#xßoåcC·QŠ¡?è?œŸõcÔ?î¨Õ UßôNŸÎOú±ê÷ Ô?ê†*Œ°ÿŸk~xj󮟤è7-tõâ.m®,ãØTÖk˜ã‰véÉ…z ’*Èÿè“ÿó’_õ.YÜ^Çþªâ®ÿ¢OÿÎIÔ¹eÿq{ú«Š¡®ÿçÕŸó‘Zt/}¨yvÝm¢¤0_Û\ÉAü±Bï#ŸòQIöÅXÏý§ó“þ¬z‡ýÂõú¡Š»þ‰ÓùÉÿV=Cþáz‡ýPÅ]ÿDéüäÿ«¡ÿp½Cþ¨b©þ›ÿ>¸ÿœƒ×aúö‹åäknE+wqŒœ‡_Ý]¤¦û7'±Øâ©‡ýþrKþ¥Ë/û‹ØÿÕ\UßôIÿùÉ/ú—,¿î/cÿUqT“TÿŸe~{ù}Öß]Ð$I]y ³WÔiñ=¢ÊŠkû,Cw¥)Š¥ôNŸÎOú±ê÷ Ô?ê†*ïú'Oç'ýXõû…êõC_üûó¢wX ЯŒŽB¯=:ú5©ØUÚª£ ÜÙÕìãf⦒Gɉ-éII$×zÏäÏüþ³Ë:¿§¦~{ybçG¸{{Ù¼R¤ê%…ƒ¡èÊjÒ3‚6.h7ÉS]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*¡su œfâòDŠ%êò0U2vʳg†ñLˆÔ̲„ ÍDYòy~·ùÇåý*±Ù»ÞÌ;B¿ }ݨ>îYÅv—ü´:] NCý·úcCåÄï4ÞÎç˼ª#ÏŸÈ~šxþ·ù×®j<¢Ó;täÿ‚m¾åçÝ¥ÿf§l@c^©¦–ß(‡¢Ó{5‡ó¹ùÖÌ|ïæ½[EÐü¹©é·RGs=²´¬hÞ¡1FjÁªäõ·Ú^ÝÕh´zL¸¦D¥dyñP6äóuÝ™ ÅŸ6hN -ºVç•rKt?Ï{ˆ¸ÅæE”w–ÜñoøØŸ¥s³?à¡8Tu8Ä¿¥ úS±ùÅ»Uì´Nø¥^G·ö°è˜º¿Åm/9›ýÕ?îÞ¾–Çý‰9è=™ív‡´(C ù²ôËíØÿšKÎê»>ŸêŽñ¸ü{Ù¿]Æt®±Ø«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«ÿÐûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»a|üËòŸånœ|Ãù‘­éúš*úÌvêÄ~Ês#“x*ÕaŠ¿0¿9¿çñ”žEõtÿÊË+ÿ9ê+ÉD‘©°±¨Ûy§C)ß¡HM6jPâ¯ÊÎoùú¿ç¯æ¡–ÃËú”OÒª Ðã)9^Ü®ä/0aãˆåÅ_𿽩ùšö]oÌ—·:†£;r–æîgši‹;’Ì~gJqW¿ÿÎ'äïü´ÿÀÏËß÷Q‡}Aÿ?`ÿÖ’óüÁiõ*üàÅUí®¦²™/,äxg‰ƒÇ$lU•†à©‚;оîü™ÿŸ”þ|þLˆ¬­üÄÞbÒb >aV½^#`Å–å@³ËŠ¿X?&¿çô^Aó ‹MüìÐo¼µzh¯{`~¿eÓwe'@OET›ýlUúŸù[ùëù}ù×gúSò«Ìšn¹^N–³©š1·÷°µ%Œî6tSнcv*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUŒêžpÒ4Š­ÕÊ4ƒýׯÕð éôÓ2±hòdä>{8ÙupÇ̼ßTüØ‘ëlvyOüÛñ9²ÅÙ#øÏÉ×åíCü#æóOÌšž±Q¨\Èèb¼SþP~²Å¦†/¤:üš‰äúŠI—´;z§–¿åÕ¿×?ñÍN«ûø~;ݦŸû‰~;žW›gVìU0°Õo4·õtéä…«SÁˆæ:§+ÉŠ96¶Èe”>“ODÒÿ5o­èš¬IpÙ~ü>Àf·/eF_I¯µØbí9¨_Øô/Ïú6©Dõ¾¯!ý™Çøm×ñÍn^ÏÉ¥û¿ì1k±Ï­{Ù’º¸„;‚70ˆ§0]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±U9fŽÝ Ó²¤j*Yˆrr2Gâ‘§`˜ÄÈÐÝæÚßæß—´nQÅ9¼˜~Ͱä?àÍî'8îÒö÷C£°%âèn?Óm‘.ëKìþ|Û‘Â?¥ú¹¼{[üðÕïyG£E”g£êI÷Ÿ‡þéÏ>í/ø%ê³ØÁãÿ\¾ßOû‹Ðé}˜Å ò#ò¯íy.¥¬_k}cU¸–âNÆG-O•z}Áë;C6²\Y§)é~]߇O " ÷»0ÛÝŠ½Ëó3þQŸ+ÿÌ"ɘóÓ}³ÿŒíü,¸ƒËö/øÎoë÷Rxny“Ô;eZ'õ¿/qM.òE‰zDÇœð-P>Šfó³}¥ÖvvØrðŸTÒÊÀøS©ìÌ:Ÿ®"ûù˜{‰ùðG¼Åe_mühÇþ6ú3Ð{7þ =5Xÿ·üL¿â¾;©öW®)|%úÇê{‰ç­ ÌWN½ŒÊß€V¡?EsÐ{7Ú}hm‹ ¿æŸL¾R«ø[Ïj{/6Ÿë‰®ñ¸ùÒ˳~ëÝŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÑûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¬kÍžsÐ<‡§Iæ?;ê–Z>•÷—W÷Û¿7ª×Ú¸«óKó—þ~íù+ùt³XyÞùÓVJª­„fÞÌ0ì×3€Hðh¢˜UùAùÍÿ?qüìüÉé¾H{/&iNHMÖ¼({5Ôá¨GóC'~kù§Î÷žu <Áç]R÷WÕ%þòêþâK‰›zîò31ûñV9Š»U‚ .¤Kkdi&‘‚" ,ÌÌhrIè1WèÇäüúëó«ó¯ÐÕu½=|åéhÆó\VŽvO¬Çï‰î=A0Ü>*ýÅÿœoÿŸb~QÎ?]Xy¶ö+4ùÂÂH®aÔµ3Æ(."`ë%½ªM ²†C!šDaU“zOüä§üàOå7üåòù‡Î¶Xy©âH†µ¦Ké\‘ñA"°h¥P|h[ˆâ®¢˜«ðÏóûþ}ù³ù_ëk?•ïô4«´_«ê(¿åZ»ýh=$f¥x.*ü³Öt]CË—³è~a´¸°Ô­œÇ=µÔO Ñ8ꯀÊ}ˆ®*–b®ÅQú^«{¢]E«h·3Yß@ÜâžÞFŽDou!÷~„~MÏÒ>)V?QÖ"óf“Õ¼Á¸—CK¥d¸& É öNàªý_üšÿŸÊþVùÅaÓÿ7tÍCÊ:ƒP=Â)Ô,kãÎ%­OoA‚÷s×~¢þ^~ly3ókO÷åž½§k¶$ÒX\Ç1JŠÒERZ6ñW øÅ^ƒŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUتAªy£KÑê·÷(²÷ZžOÿµ#éÌŒZYåúCF]L1ó/7Õ?6@¬z5µ|$œÿÆ«ÿ5fËdÿ<ü¿[®ËÚŸÍ7œjžkÕuŠ­íËúgýÖ‡‚}ËJý5Í–-$1r¿.ªy9–;™.;±Wb¯8üÀüÜò‡å|ZóÆ­odÅy$‹Ï ÿ"«°¯p´ÈÌ­6‹&¤Ö0OÝóä‰Ho‰µßùÌ?9þfÝÉåùÇ,\M)!MýÜbF@v éƒéD+Ñ¥‘—ÅFt»Ũ—À~,ü“U¥kÿ8“ùÉæà|ÿæï??8ÇW³'œ¬\¾ÒúЕX?Õ†7C–)é±ú#ŽãÔÐû?‰!í0 Kíç!?8ÿ ¥]+óßAmgGVºœUˆØ'ˆ\Óp®©!?i‡a.ÉÓë7Á.Ýûÿxr1ë#7ן–_ó’Bü×ôí¼»©¤œ”£ïiÏ/åUcÆCÿÙóG«ì¬Ú]ä6ïÙñr£1'ºæ¹“±Wb©®›®_é ËM¸’.üAøOÍMAúFS—r}BÛqæ–?¤ÓÑ´¯Í{¨©¯Ì¿ÏÀßH5ðÍv^ɉú {݆.Ô#êîzF•çV¢Åp"þÄßûÎÇè9¬Ë¡É˜¿vîÇ·NF½û2ÀAƒ˜ŽSx«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUkºÆ¥Ü…P*I4`”„E”|ž{®~iy{C¬msõ™‡û®ØzŸðÛ(ÿ‚®r]§í¾‡C±ŸíúÙ[·Òö|ûÕùmösû?®~yê7U‹A·ŽÖ>ÒIûÉ>`l£äCgŸvŸü³åÛMÞ}Rý)=—Ù|pß!2ò×÷<‹V󥮿­«ÝKpÕ¨Ljù/Aô àuý«¨×ž,ó”½çaî‡À=ŸIN*Ýúù¤ù¯r]Š»xæGüä¿ÿ,ýKMKPÚœuÇO¤ò†œ‚³²Ÿc›ÞÎöoS­Þ1áó¥°øu?ÙFO•/?:¿:?>œØþQéC˺’ ûX¯Mî$P¿D(]˜õΦÙý•¾¦^$¿›ÿïy7 q‡=Ðcþq¿ó‹Èów¼í%þ½%%¼¶’iÊà· ñϰQY•6Ã/Ÿµ=pðuªhž|#—(ÑŽßÍ´ @ô¦Yå¯ùÌMÉ—Iå¯Ïÿ.Oer>®ZFSr0¹£ÈþT혟dqjcâh²?šOûáËÜG¼©Àñ/´|“ù“åÌko¯ù/T·¿@9:FÔ•ùq5?Ù(Î;[ÙÙ´g‡,L~ãî<À¸ò‰6q˜Hv*ìU™èŸ˜:þÅl¯$hGûªoÞ%<j‘þÄŒèû7ÚÍogí!#ù²õGíåþi·SÙ5TE÷Ùú^â~{Ã%"ó ™Œ÷–Üòð ¸ÿ‚9è=›ÿËmV:þ”7éNÿì‹Îê}–#|R¿)~±úƒØ4_8hÞa Òo"–Cþë'ŒŸð Fü3Ð;7Ú 'hÿs’$÷r—úSRû{SÙÙ´ß\Hóæ>cfK›— Ø«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯ÿÒûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wç‡üü×ósóòGò…<õù1© .øjöÖw÷å‘m.#”V3"¸FõDkÊ•£iŠ¿”_<~bù«ó3P:ÿæ&µ¨kš‰¯ïõ©nA5!LŒx¯‚­ØAаÌUØ«±V_äËÿ3~ej‘y_òûH¾Öµi¾Åµ…¼“ÉOæ!¢Žìhª7$ Uúõùÿ>gó¯›= sóûV‹ËsqfÓl ]ê ½Õ¤·„‘Ѓ=?i*ý³ü‡ÿœ6ü¤ÿœqŽ9?-<»nšº¯Õ¯ÒoßjëIS=Ö!åÅ_Pb®Å]Š»x—ç/üã—å¿üäè¯Í¯.ÙjÅP¤W.žÜ ×û«˜øÊ‚¦´WâOPqWâ×ççüùföÔÍ®Î8ùn£«0ÑõÂ@:ñŠî5àÞ ²F”╎*ühüÕü‘óçä~¤<½ù³åûý ñ«é}j""˜/S ËX¥QÝ£v«Š¼³v*ìU:òÿ™5)_E¯yVþëLÔà5ŠêÊy ™ŠÉVAÅ_Ò·üúOóÿóWóÛNój~në“kZ>ƒú:ßN–ê(½s,âf”4ê¡äⱡ¬…›ãû^ ¿c1Wb®Å_Èטçç¿ó“:­õ•¯ž8à ÔÑ¢þ†ÑÍ\€*m 4¾*“ÿÑQÿç'êyÿ¹.ÿdx«¿è¨ÿó“¿õ<ÿÜ—Gÿ²ÜcŠfTZµ¡&€RIñ8«ÿ¢£ÿÎNÿÔóÿr]þÈñWÑQÿç'êyÿ¹.ÿdx«¿è¨ÿó“¿õ<ÿÜ—Gÿ²Ôeí K–ϯ4mgNòå¢i:¼VQýˆmãXÐ|•@¨ž3rÜù¸‡)<ÓOñ·ùŽGòˆñ§ótWQ½µÏ!‘Jº8 ¬Äv áZä¾#å¯Ì?ùÇO!ùؽî‘è=E‰oRÈD“üÐ-?Ô)óͦŸ[—ÇÔ<ùüÿµÉÇ­”<Þy¦y³ó»ò „²¹_6yn/÷TÜî  ðÜOJ{‚Ú6³§¼¶ý‡ïv˜;J2Øý¯¤¿-?ç7¼‰ç2šw›Yüµªš+-ër¶-Þ—£ÞEŒ{æ‹Wìþl;ÇÔ<¹ü¿U»He}‰iy¡ w¶¤öò¨x䉃£)èU…AÄfŽQ14[Ø«±TóJ󧤺mĈ+ö>ÒŸö&£ðÊ2éá“ê øµÇô—Õð œÖN#‘4ß9)Uìõ庮»~qÏË?ç&|ïÿ8½ämÍß•2ÚèjбœÝÛ‰ÔÅõid RE$â¯Åïú+Ïüä7ü¶èß÷ þjÅ]ÿEyÿœ†ÿ–ÝþáqÿÍX«¿è¯?óßòÛ£Ü.?ù«wýçþrþ[toû…Çÿ5b¯ßŸùÀßί3ÎA~Mèÿš?˜²A.»{s¨E3[B!Œ¬OQ@øTWÇ~PÎcÿÏÉ¿:%?9<Õù]äk­.= H¹‚+UžÁ%+ÚÅ)ääÔüNqWíüâ—æ>³ù»ùGå/̯94O­kr\Ý41ˆã2`x Ø ˜«ùÅÿ¢¼ÿÎCËnÿp¸ÿæ¬UßôWŸùÈoùmÑ¿îüÕŠ»þŠóÿ9 ÿ-º7ýÂãÿš±WÑ^ç!¿å·Fÿ¸\óV*ûsþ}ùÿ?üÜÿœ‹üܶüµüʹӥÑeÓ¯®Ym¬R=HPøÁ&•;ŒUõüüËþr—Ïó‹~YòÆ¿ùO5¤7z®£qmrní–pcŽcˆ$P×¾*ütÿ¢¼ÿÎCËnÿp¸ÿæ¬UßôWŸùÈoùmÑ¿îüÕŠ»þŠóÿ9 ÿ-º7ýÂãÿš±WÑ^ç!¿å·Fÿ¸\óV*þƒÿç¿7¼Åùóù'åÍ̆MUý%õ–·ˆEú¾£qnœPT‚5¯‰©ïо¯Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®ÅRÝfKˆ¬.¥ÓÍ.’ "E~0¤®Ý÷Ì>Ñ”á‚gÔ##¾  mïnÓ™ÄK•‹÷^ï…õŸ4êÞanZÅܳ ×4AòAEv|ÇÚ=¹©íyç)y]Gý(¨ý¨é´8´ßÝÄ¿çÍ ÍS–ìUت QÔ­4‹i5-Zâ+[HT´“Nëh£©fbääñã–CÃI<€Ü¨ø÷ó þscÉþ]‘ôŸ"E/™5:ðScµ Òž©¿üóFSüã:îÏö3>aŘŒqóÞ_.Ÿ=ÍÑÀO=ž#x9ÿ=ê<Ñz<³åézÚÂHzƒ>³íÚWT=©›¨Ïì¯îlj1Ôïöý#üÑm FoUòüã×’<‘éÝ\[~•Ô‡Ö½òbûÄr Ãù³Y®íýF«`xGt_?»ÜÆS%ôBk ˆã¢ª€aœùÃmt»ôß¾>ð¤úä:g™m[Kó ¬¶Ö)ãWZøÐƒCàFùn<ŠƒÞ $ |©æ¿ùÆ ,\{ò¿R¸Ðµ8Éh”K!EnÜ$SêÇó«û ê4¾ÒN¸5]…üGÒ~ÆÑ“½ §þ~kþK0³üÑÓG˜4T¢‹Ô!d >º)Sò•Ÿæ,ƒ¢í-ôòà—óz¥;ÿ¥5䃊2äú·òÛþrkÈ™Æ;-'RZ¤„c¨R ‹*JHO‚;3–ífõZå󣏸õeˆÅïù¡kv*ìU°JÊhGCˆ4‡´~Vy³]ºÖ­t6¼’[7ædI:*¡m‹TŽ”9èÞÃöî·.®sÊìKÕ°ìNã•l^o·ta†Y8@ª­·'ËgÖîïìUØ«ðwþ~ÿ?üÜÿœtüܹüµüµ¹Ó¢ÑbÓ¬nUnlRi=I—øÉ• Uñýçþrþ[toû…Çÿ5b®ÿ¢¼ÿÎCËnÿp¸ÿæ¬UßôWŸùÈoùmÑ¿îüÕŠ»þŠóÿ9 ÿ-º7ýÂãÿš±Wõ%úbãü3ú~«õ¿Ñ¿Y­6õ=}<+Û3>BÿŸ°þy‡ÌÚ.¨ÞèæÒûQ´¶˜.š€˜å™Q¨ylhNø«÷þs‡ó{Ì_ß’~gü×ü¿xc×ô¯Ñ¿Vkˆ„±¬j6öïÉ ø$jxØ«ùðÿ¢¼ÿÎCËnÿp¸ÿæ¬UßôWŸùÈoùmÑ¿îüÕŠ»þŠóÿ9 ÿ-º7ýÂãÿš±WÑ^ç!¿å·Fÿ¸\óV*ýuÿŸcÿÎXùÿþrŸLó}ÿæÌÖsK£\éñZ}RÙmÀYÒbü€&»¢ÓÃ|ùÿ?ÿœ÷üØÿœküÔ‡òïòÂçN‹G}Îø­Õ’Îþ¬²Ì¬y6¢.Ø«àßú+Ïüä7ü¶èß÷ þjÅ]ÿEyÿœ†ÿ–ÝþáqÿÍX«¿è¯?óßòÛ£Ü.?ù«wýçþrþ[toû…Çÿ5b¯êKÈZÅǘ|³¢ëú‘Sw}¦ÙÜÌTP%…]¨; “¶*Ë1Wb®Å]Š»v*ìUØ«±Wb®Å]Š»ÿÓûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÈóŸ^Gÿ•ƒÿ8ûçí cõeƒH}N0>×-5ÖóáïZBEÚû=ñWñ…Š»}ùÿ8µùŸÿ9tÖŸ”ž_¹Ômb—ѸÔÙ@Ô D—Œ0R€-!qCQŠ¿lÿ ?çËþ\Ðýsþr/[}nèfÒ4†{{@vªÉrxÏ(ê?v ?åUûùuùWäÿÊ=-|³ùe¡ØhzjÒ°ØÀ‘s+Ѥ`9HÛý§,ǹÅYþ*ìUØ«±Wb®Å]Š»cÞiò–‡ç6o-yÏM³Õ´›I­/ Žx\”’S÷b¯É¿ÏÏùó¯å·Ÿ=}kòZúãÉÚ»U…£ò»Ó]·4àíëESµVFEf.Ø«ñþr þpsóƒþq°M©yÿByü½ úkL&êÆ…‚©wPL@tŒ’@Ôb¯‘±Wb¯ê—þ|ñäaåŸÈcæ‡B&ó&¹zŠV+~j£Ä‚Cófú~«â®Å]о»ÿŸžÿÎ3ØÏ-•מ8Í ´n¿¡µƒFSB*-4#¶*‡ÿ¢£ÿÎ1Ôóÿr]cþÈñWÑQÿç¿êyÿ¹.±ÿdx«0òüü+þqÿóGÌ:wåÿ‘|ßõíU˜[ÙÛ~ŠÕ"õ$ ¼åµD]ݘ|Uö~*òÎOÏ$ÿÎ?h ç¿ÍÝSôF†÷QÙ­ÇÕ®.k4ªÌ‹ÂÚ9_p¿"›ž˜«Î?%?ç3?'ç"uË%~Ny“ôƵkdú„Ð~¿¶ão‘ÄÏÎæÑåAÄ1oŠ PN?<ç+¿+?ç§Ó¬¿:uïÐÓjÉ4–KõÛ¯Qa*$5µ†P´.¿j•®Õßx?ýþq‹þ§Ÿû’ëöGŠ»þŠÿ8ÅÿSÏýÉuû#Å]ÿEGÿœbÿ©çþäºÇý‘⯯ÿ+4¼±ùÓå‹Ì¿ËKïÒ^[Ô½oª]ú3Aêz<~îtŽEã$n¿ Ò¢ªA*½|!«ÏÌ¿ç4;ëTó·¥{g4–óÇúWn2DÅ]j¶„EA#Àâ©ýþq‹þ§Ÿû’ëöGŠ»þŠÿ8ÅÿSÏýÉuû#ÅYG’çâŸó˜ºþ›äO&ùÃëšæ¯u•¿èV/Vi[Š/9mU¤õfUÎ*û_v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_;~hYý_Xm<(äû­WõeÎñ×qý®ƒ´¡Y/¼<ã6N¹©jVš5¤ú¶¯rÙò_™<õù¿ùîXyÛVý JMl-C@…OcŸRAí3ûŒéô½•‹M¼cg¼îgÁÒj»g=£ê>\¾©“ù7òïÊ>Oáp–âúñwõ®èô>*Ÿ`{½«YÛPÓ¡aþJšŸÀf>ª|ÉòoÓCŠ`y¾³ÎIê]Š»x¿çoæå—åΕiª~}^iVzD÷^«êÑ,±›Ž ÔPÊôn·§J⯚?èhÿçêûäÏúB‹þ¨â®ÿ¡£ÿœAÿ«ï“?é /ú£Š»þ†þqþ¯¾Lÿ¤(¿êŽ*÷ßËEü™üãÒÍ¿–]Ö´uíÕ­„±…,›Æ7”ý8«Ü4OÐ-—LЭ ²³BJÃmÅ,jHT ÎØ«äŸÌùÈùÆ¿(ù’ÿËŸš:·•íüÓjè·Ñ_ZÆ÷ å—›˜“À­7;S}1ä Ë~hòîæË™mgòÕÜ"K l”$ $€¯aо0ÿ¡£ÿœAÿ«ï“?é /ú£Š»þ†þqþ¯¾Lÿ¤(¿êŽ*ïú?ùÄú¾ù3þ¢ÿª8«/òç'üã掻iä_ËûÏ)jºý÷«õk;{L’zQ4¯Ä€øQŽýÅ_RhþBòÏ—®¥ hºmØR¢kk8bÔrE‡¾ø«Îÿ;ÿ2?+?.,lo?/4›; ™ž;&Õ¡YQ¥U« Cǯ¶*ùÃþ†þqþ¯¾Lÿ¤(¿êŽ*ïú?ùÄú¾ù3þ¢ÿª8«¿èhÿçêûäÏúB‹þ¨â¯ ÿ.-'7teó—å®åÝcEyd…n­´ûs’3G]ã õÅ^Ù¥i6:¬zV‰m ”\½8-ãX£^LXñE ’I Ü’qTÃv*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»w]Ž*üû×l?EêWzm)èO,cä¬@Ï”;SKù]FL_Í”£ò$>µ¥ËâãŒûÀ?0•f Ä<ëçï/~\éç_ó¾¡cË‚¼ÄÕÞ„ñDPYÚ€ž*  ;f^‹A—Y. 12>_¤ò̦12äøGΟó7ZåÃùwò/A›P»j¨¼¼ˆ¹,šÓ¸i@ý¤¦w/b!Ǭ˜ˆî‰ÿ|~à‘r#§ïxÔ¿•Þ{üÛ¹MgóËÌ3´@ò[[‡²¢gÝUëß71í-7gŽ &1ýcúϨüHnAô/“<‘å  Z±Ž)éCpÿÇÇãj‘_ öͳY›Wýá$wr&ËÐMÿ•˜~›ÿ+x]úoü¬|áwé¿ò±ð…ߦÿÊÇÀ^~›ÿ+xV>°²)ŽJ2° ƒ¸ ö8F^‚yëò+Éþtq¢ï›ZÌBÊ‹ì~[Ký/_>æ‰éÈå»í+{ˆ®âK«WYa•C£¡ ¬¬*#bÜœl¢bhóhVÀ¯qü‰Óý}ZïRaU··àƒHŸ‚œôÏøi8õ3ËüØWÆGõD¼¿µ9¸qFçî´>¨ÏqxWb®Å_(~oyãþqÇAóéÿžW^J‹Í"™×\ŽÅ®ý"?wS2—ãO³ÛÃyü­/ùÃùnü³ÿ‘:_üÑŠ»þV—üáü·~YÿÈ/þhÅ]ÿ+KþpÇþ[¿,ÿäN—ÿ4b¯¤t¯ÈÿÊ rÊÛZÑü›å[› Èc¸·ž-"Å’H¥PÈêÂ*e ƒÜb¯cm­­]nigd8`ÔnéÄ¢˜«á½'ó7þpú{ëh4KïËs¨¼Ñ­°‚3Ô2–8qJòåN4Þ½1WÕÿšZ¯“4_,_jœri‘y>/GëϬ,Md9L‹ª&?½)Æ£íñ¦ôÅ_ ÊÒÿœ1ÿ–ïË?ù¥ÿÍ«¿åiÎÿËwåŸü‰ÒÿæŒUßò´¿ç å»òÏþDéóF*ô¿Ë3þq¯ó~K»oÊÝ3Èšü¶+Ý.a§NbY \$fŠšW­*úʾAòÇ‘h¼‘¢éº2\•i×N³†ÔHR¡Kˆ•ySJô©Å^ ùÉçoùÇ/ëëaùõsäØ|Êmcu]z;&ºú¹fàAKð¨n=«Zb¯'ÿ•¥ÿ8cÿ-ß–ò'Kÿš1WÊÒÿœ1ÿ–ïË?ù¥ÿÍ«¿åiÎÿËwåŸü‰ÒÿæŒUôf‡ù+ù9æ]:ÏÌ~_ò‡•/4½BÞ+»K˜4‹Žh&@ñÈŒ"¡WRHê qW¶ÛÛÅgv–‘¬PDª‘ÆŠUTP*°lÅU±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»ÿÔûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±T«]Ñ­|ǦÞy{T^vWöòÚΣ¼s!GH'žgÐ.|©¬jWÔ[Í6î{9"H$1°#¶êvÅR·j±×éú·áŠ¿m1Wb®Å]Š»v*ìUØ«±Wb®Å^ ùïÿ9/ùuÿ8ݤŸ0~lk0س£5µŠ~òöèŽÐÀ¿o·#HÔý·Q¾*üÒÿœºÿœ¤‡óûþpÛ^üÏÒtétk1kVúMŒ3L²NðÛj(Åܧ­ ù æÕjÃâÅ_ÍN*ìUý¶Îy~\~IyÊ%xÍe4ê)=ÔbâaôI#oß®*úCv*ìUø#«ÏÿJ_\êò³ý?¬Í$Ü?ÕãÍ‹R¿¤i^´ÅRÿú!þeü6ÿïcŠ»þˆcÿ™Gÿ ¿ûØâ¯`üÿŸCÿÊüÃò÷æßü¬/ÒŸ oVóê_ ¾¯ëqR8ú¿^“‡^¼势g±WÊó™?óŒô6ÞBò³ôçøÓÔíõ®}Oë•ôDáéúÐuõ+ËžÔèk²¯›ÿç ¿çÛßô'ÞxÔ?2ÿÆâ/¯h³éTýõ.­Í¼þ¯©õ©ëOC¼«Ëá¡U˜ÎqÿÎÿÐæßywSÿÿ†ÿ@CyÑŸ^õ¾²Ñµkõ˜8qôúQ«^ÔÝWÂôCüÊ?ømÿÞÇwýÇÿ2þ÷±Å]ÿD1ÿÌ£ÿ†ßýìqWëÿüâçä_ý _内ù)úSô×è_®ÿ§ý[꾯֯&ºþçÔ—W‡÷^<¶­¯Å_„>lÿŸ'Š5ÍOÌßò³=Ò7·ž—øwŸZF~<¿H Ò´­|*Çÿè†?ù”ðÛÿ½Ž*ïú!þeü6ÿïcнCòSþ|óÿ*{Ͼ\üÓÿ•‰úGü?©Ûj?SýèzÞƒ‡áê}zN©N\ž~×b®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUثǿ6ìùCg¨ö]â'ýaQÿ9¹ì‰îcñu=« „¾Íã¥`¿š:7øÉžbòñúEý­<}kwOãâ>yvš|#.âÚÊ&¿žŸÊï!k·:DžyòeÂýrÚáí¥¶`dPNƼ©CN›ç¨FtiÖö¶«—…”lEßqÝêú_æò±²Ö£kKÔ<]X+ôî>GïÌÈÈo3¨ìÞàxƒ$ÿ·óäöp.[ÿ¿óãA.]þ#çÆ‚þ\»üFÿÏü¹wøÿŸ ùrïñÿ>4òåßâ7þ|h/åË¿ÄoüøÐ_Ë—ˆßùñ ¿—)6©çÅÓ”„-,ß²‹ãî{`$'gË)îìÍRó/œt‹Ï5ù¢Ae¦ØBóAnWâfè£QS±f5ðZÄÉ;wýŸŸšc?Q&‰ü~›õƒþpCýù5¤\ůî¯îˆ¥ûÒñvD`Ž»S~ÃÏ»v|Z‚;€eþ—¡Ë+/²óNÔô_Ë O¬k>¹A ½}ÍõšÞÔc®óû]‡fÂò_pý¢óœzb®Å_ ÎzÿÎ%jÿó—ÞPѼ“å½^×GŸLÕ†¢òÝÇ$ŠëèIpjàý«ò«þˆ‡çúž4_úD¹þ¸«¿èˆ~xÿ©ãEÿ¤KŸëŠ»þˆ‡çúž4_úD¹þ¸«õçþpwþq›SÿœPüº—ò¿Ì:¶­u&­s¨‹‹XÞ4 4q Z>õ™ûñWظ«ðÿþrþ}IæÏÏïÍ/1þoèþlÒôû=nxfŽÖ{iÞHÄvñÄC2ìjP¼qWê§üãåe×äå§–¿)õ[¸¯®ô+´’æeŽB% ¸÷Å_…¿ôD?<Ôñ¢ÿÒ%ÏõÅ]ÿDCóÇýO/ý"\ÿ\UßôD?<Ôñ¢ÿÒ%ÏõÅ_HÎ#ÿϬ¼Õÿ8ãù±åÿÎ}oÍZf¥e£}{Ôµ··™$“ëV3Û,Û&PƽÅ_µØ«àOùϯùÃÍcþs @òÿ–ü·¬Úhòè÷Ó]É%ÜRH$EÀ*„Üwß~^ÑüñÿSÆ‹ÿH—?×wýÏõ§Ãž]ò÷ž?*tË/3ùP®±åÍFÚ Ù­Âñú±‡5QVœ”°îÊ3·Ôj4úùœy=3‰1¡£_€~ʰ^áåoÍ+4Ħ0]Sâ‚]˜cчË3M©ìÙ`;î;Â8Y—é¿ò³À^~›ÿ+x]úoü¬|áwé¿ò±ð…ߦÿÊÇÀ^~›ÿ+x]úoü¬|áwé¿ò±ð…kkª€»° I'a€¼/%óOçÂIúÈ–©ê²|(B“Ÿ Ú÷ :òͦ›²Ay ~ߨ >vüÕü¿ó&›Ÿšüõt“kš¼þ’Û'UzZ‚@¢‚£ùŽo»3_ŠdãÂ*1}ÿ§çòe?|4«Ò¬­´¸wŽÚáSìŠu'ÃÇ<'.OFG©'æëI´~A_T~Déþ†“w©0£\\pÅcQOÅŽ{ü 4œiåþtëáúä^ÚœÜYcá÷ŸØ㞘óÅ]Š¿ÿç8?çÚ~yÿœ¡üиüÖò޽¢éú|Öv‚ ãsê†Hb}8hk¶ø«äú"_æŸýMžYûïê†*ïú"_æŸýMžYûïê†*ïú"_æŸýMžYûïê†*þ‰,<­qäo'y{ÉZ„‘Íu£é|²E^öÖé2ÔÄ•¨¨F*ɵ«Ôôë½6"î-å‰KtШ&·Å_Î×’ÿçÌß™ÞYó“æ;¿4ùnH4ûû[¹ ç&XeW!k mSŠ¿hç0¿$µ_ùÈÏÊ/1~My^îÖÇSÖ~¡èÜ^sôSê×Ð\·/MY·XˆSñ]·Å_‡ôD¿Í?ú›<³÷ÞÿÕ UßôD¿Í?ú›<³÷ÞÿÕ UßôD¿Í?ú›<³÷ÞÿÕ Uú9ÿ>òÿœógüáî£æKÎú¾—©¦»ocN3Õ ³ÊÌ_Õ6> ¥+Ðâ¯Ô,Uøåÿ9ßÿ>áó¿üågæL_™þN×tm:Â="×O0ß›Wœ2Jå¿u¯$Þ»±WÅßôD¿Í?ú›<³÷ÞÿÕ UßôD¿Í?ú›<³÷ÞÿÕ UßôD¿Í?ú›<³÷ÞÿÕ Uý ~Ky&ëòÏò÷Ê—´±\_yAÒô™æƒ—§$–v±À윀n,ÈJÔN b¯LÅ]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«ÿÕûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯ãCþ~äqäùÈ>èñ-"ºÔÿJ¡€þ’‰/Ÿ'•—æ*øË~çÿϼÅõo4ùÿÊuÚ÷LÓoiãõI¥Ž½?åãÄ|e_Ñn*ìUØ«±Wb®Å]Š»v*żçç/þ]h÷>oóæ§i¤h¶‹Ê{»Ù–(—Àrb*Äìª*ÌhiŠ¿ ?ç*?çñ¤›'Î+ZÐoù—R‡¥¬ƒî{â=Š¿ |áç={óV¸ógž5+­[Y»bóÝÞLÓJçݘ“AØ €Ø1Wë‡üäé>Jÿœü™ò2|ªjgUa¿Å‹yr{‹]#uð `«ñ§g•ÞM“óÎ~]ü¿·þó\Õì4Å=(n§H«ôrÅ_ÝäGm[[¨H£Pˆª(¨ xŠªâ®Å]Š¿‘¯0ÿÏÏç&,u[ë+_¢¥¬²(õ!¶IŒª~)Ò¸«úVÅ]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«üųúÞ‡; ÚIGÐhs;³§Ã”yìáv„8±Ÿ-ß4gNó2‡¤PƒÐŒUø›ÿ8ç¢;ü[åm3PTâzìÒÆzøzb»g¥O.Ñ—xyÞÞ˜Ÿzeç¿(ÛÝ1’xuèàQ‡Ó›<¼ô3KÙãO¥êìå{+eü.`ÔqoI.­i¨i õ‰Ð½¿ûõ*>~NBV½<á›aϹŽ~ž÷ÁÄåþUß§½ñâ_Ê»ô÷¾nü©–ÖCPÖ…ŒæîÜN¦/«K%’(y ßxüû7þsSó/þr“ÌÞgÐ?6'±šÓJÓmîm…¥¢ÀD7È‚j)Û~Åâ®Å]Š»;ó˜ÿóòoΟÉOÎO5~WyëKBÒ.`ŠÕg°Id ö±Jy95?œUûAÿ8¥ù¬þnþQùKó+ÎMëZÆœ—7M b8Ì…Ø(6ƒ¦*þvôùûoüä¡©ÙX\ÞèÆ)îa‰é¦Fp /Š¿ªŒUØ«±Wb¯ÌÏùù—üå/žÿçü³åòžkHnõ]FâÚäÝÛ,àÇ<ÇH¡¯|UøéÿEyÿœ†ÿ–ÝþáqÿÍX«¿è¯?óßòÛ£Ü.?ù«wýçþrþ[toû…Çÿ5b®ÿ¢¼ÿÎCËnÿp¸ÿæ¬UýÿÎ~oy‹óçòOËšÿ˜ šþ«úKë-oŠ3õ}FâÝ8 ¨k_Sß}_Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»|Ñù÷aÆçOÕûqÉ õaÿ9ã?ðSÒÖLY»Ä¢Í ÷Eí=”Ëqœ;ˆ?=¿@|ûžPõÏ›¿ç.t¯Òÿ”¾c„ ¼1Ap§ÃѸÉÿgEìž_]Œ÷’>q!³ ©ÏŸ’¯ú_òïA¼ëKf‡þDÈÑxåÿo®t=±û½TÇüÀ?¥É–Åù·òïN¿™µc÷„ò2F)Èø°èO¿_|ÉÒëåÂw ¶5k§ÞÅþ‰,œœl 5¯Ó×2e–<ÓÅ\ÐWóÝiŽ#¾FŒŸ²OCò=[ŒG&ñlK’ôßùYg€Ë…ߦÿÊÇÀ^~›ÿ+x]úoü¬|áwé¿ò±ð…=²·¾½ëJ… "¡Û`~^?«1òN05Õ®R /—g×[ê÷¶®ázŸá÷áp7c¹zÏ“ü¥a¡'§¦@±–§7¥]¾mÔüºxf«Wª–_¨±%äßÖ‡Yóÿåç””TK¨Ä\“5Ì(I§`öñÍŸcOÃÓgËÝöFGô¬NÄ¿YsÊœb¯·¿,ôÿÑÞZÓâ"$~±÷õIqøŸJû¤ü·gâñâÿNL‡ØCæ=µ›ÅÔL÷ùlÎó¨unÅ]Š¿ ÿç=ÿç⟚Ÿó›?–—p诣ŧY])¾³–YyΤµYfAM¶øqWè‡üàÇ瘿ç"ÿ'ôÍo?­¢kW×ñJ¶Q4Pñ·¹x’ŠÌä*+ñuÅ_^b®Å]Š¥Zíìšv›y¨[ÓÕ‚ÞYS¨äˆXWÚ£4EÿŸ¼þyùÌš7—µ -‹[ýFÒÖRš|Á¸M2£q&àÐÐí¶*ýÍÿœÖüä×ÿç¿&<Íù»äEµ}sHýõu¼¥„ýgP·¶~H¬„üµ>!F¡öÅ_˜¿óƒóòÍùȿΠ#ò§Ïð艢ß[ßË+YYËÜ­ížT£4Î䢿LUûÊ»v*ìUø‘ÿ?ÿŸ„~hÎ0þhCùoùoŒúKèÖ—äßÚI4¾¬ÒL­ñ,È8Ñÿå›Ë?÷ŸþÊqWÑd¿>ÿå›Ë?÷ŸþÊqWÑd¿>ÿå›Ë?÷ŸþÊqWÑd¿>ÿå›Ë?÷ŸþÊqWôéä]fãÌ~ZѼèWúu¥Ô¡œÐ«·I ©Û|U•b®Å]Š»v*ìUØ«±Wb®Å]Š»v*ÿÿÖûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯æ_þSäÐßšž\óä*sAî{´ö3¸cÿ"æˆ}«ñ¯~¬ÏœüÂ4_ÏÙ4Æj~—òæ£f¦å$‚ç蠟ê®*þ©1Wb®Å]Š»v*ìUd’$(ÒÊÁQAff4 É$ô~OÎSÿÏØ?/¿'>µå?É᜼Û(̱9ýlãoÞN¦³üž'¡•*þvÿ=ç$ÿ1?ç#õñæÖµ> cf6Öj};;Pß³ D]¶-C#9»ñW…â®Å_²ßóô¡þü¾ü†ü¨Aé¾åviÒÖÚÊ& ƒ•ßzî+LUøÓоüÿŸbùüuÿ9å!,~¥¦Žnõyö¯ªÛ¹‰¾‰Ú,Uý€b®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»Kõk?Ò76=å‰Ð|Ê2Ì3à=ů,8âGx|‹É»~P~\éCJüêüÅòÀ^+4×Wª½ r®(()>Þß~wc%éñËȳö:NØïfÞsÐ>ßÃã™ú\Ï1’/—<ɤ˜™”³wÄ០avj½ò¼¼YêÏ£C'‡~-½>šl«$mÙÇOÛò=ì?,ü­ù½Oùw|šW˜–m>…Ž¿©ü¨ù(×äÍ,_W'?§&›lƒŠ=ÿÓó|Åç¯+y“òÚ÷ôWœìf²•«é» Å(ãUXxÐÔwå˜óÇ&à»ý8†qp6ÁÿOÿ•–q7þU9ÐTóUôZ–íf¾¿˜Ñ!·Bî|M@;“°“LŒ²ˆ‹,2aŽ1Å-ƒë=7òËÈVqù‹ó«PŽÙ˜V=6«±²Ì»±ñì?ž™Wˆj7CŸ\r#ãøý?$«TóÐÕÓ<­jº~–Ÿ r?Øì¿EOùYŸŠ$su²Òˆú¦l¢ô=<¹TœÉ8Œ¢<Ÿ¢}³_ªÌãÂ)üå: ;ÉV6Cf¸ÔPŸuŽ) üJæ’\S>ç{Ù1©ß“õƒÊzOè LЀ§Ô¬­í©áéF©â|[=gÇóÝfšìUتK­ùoHó4IiæK ]BÛšGws*µ)ÈBEqT.‡äÝË$þ[Ò¬tùeP²5¥´P–Ô( ‘_U’b®Å]Š»aº—å×”õ›™5=cBÒîï% É4öPI#( 3!'`çdÚ~k¤ÛǦéPEmi ñŽQc‚ª€ù U†§åO’ca$~[Ñ•”‚ÓíÁw*ϱWb®Å]Фzç–43¤py“O´Ô"‰‹F·pG0RE Pà€i኱¿ùTÞGÿ©gEÿ¸u·üÑŠ»þU7‘ÿêYÑîmÿ4b®ÿ•Mäú–t_û‡[Í«¿åSyþ¥þáÖßóF*Ì4­&ÇCµJÑ-¡³²‹—§¼kkÉ‹( RI4’N*˜b®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å^?ùÛaõ¯/‹°>+[ˆÜŸj¡üHÏ>ÿ‚N—ÅÐñÿ2q?qûÈzfrðgáþp#å¿è/‘³ÀßAyÏç•úsȾeÒ«\h÷èŸë˜‰ê:5\ØvF_ SŽ]ÓÞ@щ¿çëÿ—QA×ê—·0ü«Æ_øß;_iý¢{À?£ô9Y9½3ZÓúíšü9%äºÅ‰RYv#pFm°ÎÛABéÞo‚Ð/Ͷ¢÷Nm‰ .¾ô=iãPírY4F^¬G„ýŸ±X£õoÈÁæ‹'ó'å ìz„w²w¤ŠzñVjoþLœOùG!‡·| xz¨ðŸçVß1òXçáÚo—õI¯tK©t½bmo!n2C2u>Z„gQŠ1Ë(AäFáÊî¦ýòÏ<,óÈžNóæE×Ô|§fóª%œü0Å^ï!Øm½7cû æ¿Y‹C,¦»‡Sî€Ã$Ä9¾ƒ¸òO•)Ô/šn—WóýV!T©QðžŸëI¹ªg;n~ÑþèpC¼ó?/‰q¸å“–ÁŠ]ë×~c—œ C~“ ç¿êö̸i£€m¹ïd "Ë4{›f.i —ªhö=6ÍViµð­RÃô÷üäO”tÊU,m„¬;sÜW¡ÿ'ðèwÍÎ<žee—ó|ÌcúÔš~œgš¸Š°B×%¼B¯#QîMO3’B#™ ‹HDYèý ²µ[+x¬¢ûƱ¯ÉE}i§Â0B8Ç(€ÀSäY'Ç##ÔßÍ—0v*ìUç¾cü¤ò7œoNµæï,hº® Ê¨no´ëk‰J¯ÙRò#5a]±VOåï-iQ±MÊš}¦™¦ÄY’ÖÊà…KžLDq…PI$š ÎøªwŠ»v*²HÒdh¥PÈÀ«+ ‚ÄzƒŠ¼¢ßòòÆÒT»´òW–âž&WŽDÒ,Õ•”Ô2‘ApF*ô-ËÚWš¬%Ð<Ñck©i“ñõ­o!Iᓃ^QÈ[‹(aQ³Fãb^^ü ò”o“\ò§•ôM3Rˆ2¥Õ–›mÊq`$€ hwb¯EÅ]Š»v*À<ÍùQä:]cÎ>ZѵkñÄ./ôû{‰B)$/9Q›ˆ$ÐV›œUÿнþVÔåŸûƒYÕ,Ußô/•Ÿõ#ùgþàÖ_õKwý ßågýHþYÿ¸5—ýRÅ]ÿB÷ùYÿR?–î eÿT±W¬ÛÛÅgv–‘¬PDª‘ÆŠUTP*°lÅU±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»ÿ×ûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯Åßùý‡‘¿K~ZyWó$ 6‹®½›7t‡P·fcòço>äb¯æ—}Ãÿ>Ýó!ò¿üä‘/KñK‹Ë›Ð7ÖìæAÜWâu#ü  )Š¿±¼UØ«±Wb®Å]о6ÿœ¡ÿœèü±ÿœV¬|ãzÚšÚ0ðh:yY.Ø0ª´¤Fv<¤!ˆÞ4’”Å_ÍÏüå'üü+óKþr}çÑ5 ¯ðÿ“•] L‘–9µZ—g¸=*ŒU–$5Å_ b®Å]в)èOæsLòÌ5j7¶öjGZÍ" ¦ÇÇÀâ¯ÕOùüÞ»ççF‹å«>+m¤yZÎ/M@$–æáÈtŸ§µÝLUùŠ¿pçȾEúÿœüëù“,u]/IµÒãr6å9•¸ö¨¢´Üÿ+u_ÑÞ*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯‘üÃgõ NîÒ” 3…ÿTšÃ:í<øà“Êç‡ÈóIòö—æÍ͘Òç)5 U.³§£åbŒ|z´öþ½†ž\Zšß~×SÚq¸½«ÎzÛø|rz\Ï7’/’üå Ð± .—5¸S>t×´Úrflƒ›¥ÌñýRÞk)VîÍÞâ`ñÉea¸ ÁˆÌyÆÞM–ö/ |‡ÿ9aÕ?À_óÚL~fòļQ® j×1ö Êh$*Ì J:òfÍ&«³Íñb4~Ç'ù;~<'„ýŸ±ëÿó‚•Ÿ˜Ð¯æïåßžÒÏòÊ0òj"R­%©@¬Ñ‰¥+éQ[] Æ ’$åšÉv¾\GÜ.]<þ~Gò¦\~‰ÆåÓÏáú˜g™?ç$?/ÿ(ì¥òüâ¦à¸×¯#fiˆý¥~òC]Á“ŒjkÆ"¤fnŸE“1âÎ~¢z™Ïsþhü~;ß,ͪêžl¾}oÌ—RÞßJjòÌÅÈvv€v½ÅŒ@PjÌcŒTvDÑ4þ›fTC Õe{‡•´ƒ#)##š|!ÔÄ_Qù?DûxfƒU™É„^eÿ99¦þ‘×<ƒäÈÅZûR!—ÇÔš“§Í»|»å:,• “î —{Ù‘Üüª9Á½±W×Ú=ŸèûkPÅ !ù…üsŽÍ>9Þ^³ 8"pL²¶Çb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«óÆŸúO@ÔléRmÝ”x²køš?itŸšÑe‡ô øú‡ÚÙ™|,ð—˜ûv/„3åçÕ.mÒî-fŽTdaì‡ eÂltWçüá¼O‰æ-\{c¨#8ðgB‡oœ^úz/µä˜òâÜoýó—›¾ˆÖ´þ»fƒF ¼—ZÓúí›|9Ay&µ§õÛ6ør7D°[=sWòmòë^X»–ÎñÏØSUaìÀlΞ z˜ðd?Æßf"B‹Ýí9ü‹ùÃm•¿?´ä³¿QéÛë6 ¯v©aV}È!â'vUf¤v>~ÎyüÌó(¾òÌ…_O†Á®ƒ/5£f2Ttô¸‚>.J»e‡·µ:¿Ý`…Oø‰þŸ/¹€ÖO'¦#~¬[ÍŸó’wz…°ò—åE’yw˱N3ªÜ:øŽ;E_òjõßžôÇOììc/R|Iùý?·ã·“n=-o=ËÉt»W™ÌÒ’îij3’Nä’{œÙå•lÉzŽcÓlÕf›Q/UÑìzmš¬Ój%êº=M³S›#Q/üµ·ßüäv¯yJ®™¦ÈWÛŒP@|;È~ÿ Þö”¼.Ê€þt‡ß)~„Ïh?D3Ïœfeù{§þ’ómJ:Ê~Q|gþ#²ZOÌëñCúB_é=ï]okåð´ó>UóÛô¾çϦß/v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«ÿÐûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯ˆÿçã^EÿÿÎ;yãOŽ>w}Šjñ*Sô|És#ùä’þI8«øßÅ^×ÿ8׿å?Í¿"y–¤%™´yÞÑ/#.6îµ;â¯îGv*ìUØ«±Wb¯ä‹þ~Áÿ­%æ?ù‚Ò?ê,UùÁŠ»v*ìUôŸüáÇ—‡š?<ÿ.ôv£>fÒç‘OFK{…™ÁÜuT#{üýÌGÌ?ó’~pUnPX 6Æ-ÎÂ+ ޤxÏÒžâµÅ_Ÿ¸«ú‡ÿŸ3yü?ù/©yÆu"0k÷2#v6ö‘G}Ò ·þ˜«õ×v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯óÇæ7›üµç_,y+Ë~J»×<¹­†§¯ÃyQi|>É’RÒë³'‚so‡{^*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_8~fYý[[y©´ñG'Ü8ƹÒvdø±×q?­ç»F9/¼~ÇŸfÅÀ~{~uF4?ùÈï ëbŠ—ð[ÙOWyæ„õ>¨§ñΧ³${‰?`?¡À×FÃë¯9èoáñÌ=.g›ÉÉ^sÐ>ßÃã.—3‡’/•<Õ£6΃øƒÀ^®é¿kldÞ—3Æ5Ý7ím˜òI¥Ìû¯ò&ªÿÎ,~béŸïÝNðÓçmd?†sšÌw«òyaªÉz˜{‡Þ_Ÿú&ŸÓl袭Vg°hšM²ø‡žÕe{¦—* e܃ÏçÉfŸHù?Cûxf«U™„"ú§ÉúÙÛ9ÍVg3^ ù­f5ùÈO ùiG%³‚ÞðŽY§&”=Jkú©\žðèòK¾ÇÜ?K¾ìØýïÑìãÚo ÙýR´³=$™|«¿á”ê'Á|‹vqÌ7×9È=S±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»Aê7Ock=ì0ÉrðÄò,ÓÔª’995(*@¯R1W—~IþeêßšþZ_6y›Êº·“¯Mİ3YU[Ž1Ò’€¿°ÕÚ ƒµ(J¯]Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®ÅVº £Š«ö8%!E ÖïÏ}VÈé··:s}«y¤ˆÿ°b¿Ã>M×i¿-šxðÊQÿJH}o_}à˜@f+sóãþqÎÜhÿ™Ÿ˜¾RQÅ>·4è½>îœ&ÔìÊ;|¶ÎûÚxš=>_ >&"þع9>_PëZ]³šÃ‘€/%Ö´þ»fßFØ—’kZ]³o‡#h/$Ö´þ»fßFà^K­iýv; ¾Àÿœ„‹Õü«ü¹‹ùl¬ÿê<æ;'ø^yÿt\(¬’øýï–´{›gAšna/UÑìzmšœÓj%êº=M³UšmD½WG±é¶j³M¨—ªèö=6ÍNiµù—þqm?M~fþayhR9Ú þÌ×22޾ÙÑûN|= ~WòˆÿŠg›h€ûï8Gí?‘¶XÖæ¾aU·¶jv~³Ñÿàe¥ñ5’ÈyBç"û8žkÚŒ¼8D{åöÀ}ažìðNÅ]Š»v*ìUØ«±Wb®Å]Š»v*ìU応ߙ­ù=åïÌе2ý¡Û}fòA$Š…’:ŠªæçöQI튳o,kG̺>Ÿæ7³ºÓÛP´‚ìÙßGé][™£éOO R¼]jx°"§O1Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š¿ÿÑûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¬gξX¶ó¿—µo&j_ï¯au§ÍµwsD߃UüjºmÆ‹{s£ê)éÝZM$!ý—аú8ª…¥Ô¶3Å{jÜf…ÖDjFSPhj ½íW‹Ìe–½iýÅõ´71ÿ«*‡cኦث±Wb®Å]Š¿’/ùûþ´—˜ÿæ Hÿ¨±Wç*ìUØ«±WègüúÇËÿ§ç$ü§3¯(´èµK×þ̈́Ȇ ŠRGSïЊUó÷üåï˜Å?ÿ˜zÐ$£ùŸUŽ2z˜á¹x£;O…ݺb¯1WöŸÿ85äsùyùùå©„§D‚þE¥ ɨ¼u#Ä4Ä|Uõn*ìUØ«±Wòíæ]WÏÿšIÿ9ù»ªþay²ÊûòëX¶M*ÎÇTš FŽëR¹¶ôÚ4 "Ư êZ¸«÷·þpÇÍúÇŸ$<æï8^K¨k7ºNó³¾Tóžöþèô¹œ,‘|—ç=íü>9Òis8Y"ùŸÌYBÊFmNá·O–<[]Ó~ÖÙLƒÑis>“ü­Ÿê¿ÞsÒÿß·×&Ÿ8-‡ðÍ6£ç‰òýlóåÿ‡¸}åò~‰§ôÛ6ñ ú¬¯`Ñ4þ›eñ=ªÊ÷)hÜÙXŒ§Q’ƒ¬—ÔÞOÐþÆÞÏj³9P‹ê'èclç5YœÈEñì(ºßüåâ¯Äš&š8ŸlcFðèÓ°ï÷f~Ypöxþ‘ÿ|SÐh#Aú œ³²gÿ––ZÖã” ä?wÿÍiχw?KŸÙÐâÉ}Ϥsšzb®Å]Š¿9çèÿ›>nüœü•ÿþYj·6­u­ÙX½Ý© 0†HævTz„”_‰hÔ¨®ç|¥ÿ8ëæÍ?Ë_ùÉŸ(~Ny¿ó[ó~æO(~œ¹‡Tbȯ=¬Ó**»ÉCÄ´u*Ì*Ä‚«÷v*þ`®¼ûù׿ËïÍ¿Ïë?Í3Ø"yŽ>ÛIŽêVŠhîõ·¼õÉP¡4ÛCófÔ¼ëùUäo9yšsu¬jÞXÑoïg*ªe¸¹²ŠY\…G'bh» b¯bÅ_”_óò?Ì/>èþpü™ü¢ü±óMÿ•-¼ó¯Üiº…æšxÌ\X[ÄüV"1s#pªæœºJ?ç|áù‡¦~vþj~B~cyËTó†—åxíŭƨܤõœK¯"앨T9S@zâ¯×LU„þeÞÜižPó¥§ÈÐÝ[é7ÒÅ*2:@쬤t ŠƒŠ¾ ÿŸV~ey«óSòb3þdkºæ¬¾`¾·Wó4Òˆ’ §&$ñ‰Üâ¯ÒŒUù¯ÿ?SüÊóWå_äÄgü·Ö/t=Y¼Ácnn¬&he1<3–NJAâJ‚G°Å_%þBùÓó_ò¯þr‡È?’¾küÄÖ|ßåï6ùaµ{ÈuV,¨fÓ®®‘Yäâc’Ý)"•fRÊE Å_»˜«±Wó9æÍOοÌoù_ŸšvŸ™þ`Ñ`ü´ÕàŠËJ°•£¶š­BâÕ#B$…w ÅÉ%jJ¯ÝùÃÿ=k™’þJó×nMé0ËwrUTË %K -Oš¾ø«é,UØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÅ_šºèÿ3^€(“™Ù¨'þ¹ó·:OËöŽNéT‡ùÀ_û+}+°³xšhùXùÕO;ÎIÜ>òƒ/ÎMù‡MZõ;W¦üíà¼i‡ð=Þ¬xÝ‘Ž_Í—Üe¸¹x>ÌÖl* lä0äiäºÖŸ×lÛ`ÈÛò]kOë¶mðdn‰y&µ§õÛ6ø26ļ“ZÓúí›|¢_Lþxq¸ü¹òºîc´µè´Aœ×bH^yÿt\\N_ޝŸ4{›fÿ4Ü‚^«£ØôÛ5Y¦ÔKÕt{›f«4ÚÉz®cÓlÔæÈÒKÓ,£ŽÊ¼¸Ú(Q¤sàª* Öd&F‡V²_#ÿÎÀ÷z?™¼Ñ0øïuD‰›}Ú(ýC×þ3x÷ίۉäÇŒtüͽmÔs÷ŽpÎ;êÈkKO¾ÔÈÞiÖ }£ZÿÆùíð-ÒðàÉ—ùÒÿJ/ýûÃûU–òFÂþgö=ç=Iå]Š»v*üxÿœÎüÉüÕ×ç%|…ÿ8½ùWçk¯%èúþ„/e»³¶IÜ\<·¼™Ô´lã…ª*¯¨¡K3nN*Ì¿çØ?_˜™ð~aùKóo_›ÌrùWZ†ÎÎöæ4IŠ¿¬Ž ^ªL!”1b¼ˆäE(«õW|Çÿ9›æýgÈ?’^vó—“o%Óõ­?Jy­n¡ IÔrRA¡Å_ŽžGüÛü÷üºÖÿç<ñæÌíCÌZOæÎ¯ºEÝœKµ¿×--匹wõK¥É*á"1²‚+]•Dø«±Wá‡çÏæ_ç7æOüäמÿ#|ù‡{äß/ùGËK¬Z¥•¤s =>ÖêDqÎ2ZI.÷…›‚…*û þ}ùÏæÿÏ/É…óWæ–¢Ú¶³i¬Þéëw""ÊðÆ‘Hž¡@0õåJjw*¿CqWÂßóñïÌ3~T~Dë¾vüºÔçÒ5Ûk­5!»¶ H‹-Ühàø”qWÐ?óúþ£æÏÊ_!y§Ìww«j^VÑ/o.d5y§žÆ)$‘©Ý™‰>ç{F*ü|ÿœþüÅü˳üëü®ü—ü§ó•÷”m<Ü¿T¹žÑP²Kt"´D¯2 ýžk_Ч_óîŸÍÏÌŸ1~`þmþJþmy¢5ÁäWê6w×p¤R³Cusm#€¤•Y*Þ™wàz7RU~´â¯<üÝóï“ü‹æ6茩¨éz&£}lΡ”Molò!*v 2ŠŽø«ù»Õ¿ç ÿç"<ù?åùËvüÔÔoÛ^óΜÚöPú õf˜–i9tF†1 q ³|#Pø«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»ÿÒûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_ÅŸüçO‘åßçïŸü¹ÇŒo­Ï¨F)@#Ô@¼@=‚Ìùb¯“ñWöñÿ8—æ/ñ_ä§åîºÏÎI¼±¤¬­Pk,v© ýµmºŽ‡|Uô&*ìUØ«±Wb¯ä‹þ~Áÿ­%æ?ù‚Ò?ê,UùÁŠ»v*ìUú÷ÿ>cÑ£—óÌ>m¾øm4*Ý1z溷“CþëY6ê{V‡~NùX“ÌZµÿ˜.6–úê{§­>Ô®\ôu=€ÅQ¾KòÅϼäù3Mÿ{5{û]>ÿ¼¹•b_ņ*þòtÝ:ßH´·ÒtäZZÄCôTBª`ª7v*ìUØ«ùò·ü ?ó˜ÿöÙÒî·}Š¿oÿçÿõž/íüœ|Uõþ*üaÿŸ¥äÓÿœvÿÀšïþ£tœUÎ6ërþtÿÛÛõXb¯×ìUù³þ8zŸüÁ\ɶÅ_Êÿ¬+«æÙOû£ÁŠ¿©ßÊoùAü³ÿl];þ¡“z*üaÿœæÿÖ²ü€ÿ˜Ûú\Uû=Š»8:ü§ó˜¿öÅÖ¿ê&LUúÿ>¸ÿÖbò7ý¾¿î±yоÿÅ_?óú¿ü’þv?÷N¿ÅZÿå†à™ÿ21Wëþ*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]аÌ»O¬è’J:Á$r~<ãlØvdørWx#ô¸=£,~çÍÙÒ¼ëàŸùø^™ëùLÕÐvzÔ@štI`”éüÁ}¿ è½™f#¾?¤0È,?D¼¡ª3ysJ×òö·5ñõbW¯ãš,ÑðæGq#íy¹ 4óŸ9è5äxæÃK™ÆÉÉ~sÐ>ßÃã.“3…’/“¼ß¡˜Ù˜ èôùlSˆ}&Þ®é¿kl¾AÚis3¿(Ïõ_Ë_0iïÛ™M>qÂ?†kòc¹‚ääËy£îýo Ñ4þ›flCf«+Ù¼»¥™E2Éèrψ¾™ò~‰ö6ðÍ6«3(EõG“ôO³·†sš¬Îf8¾ òΖ-£0éÓ9ýFK.dó{þqæoñ'üäæwš–Œ–ÒÝX«±Sxi¿B-ëÓîï¾í_F“=Çìý¯C¤D{Ÿ¡™Ì9Ogü¤³ÞóPaü‘)ûË Òv¼ùGâî;*åð{Ni]ñWb®Å_”?óù/ü–ßøißòbçxÿ–?õµ?+óYZÝ>ë~ßb®Å_̃ÿ¬Åÿ9/ÿž—ÿu‹|Uûÿÿ8ÿ’CòÓÿÏ/Ý:Uïø«òþ~;ÿ“¿þqÿ7ÿºŽ‘еÿ8}ÿ­}ùõÿ*üáÿŸ6ÿ䄹ÿÀ›Qÿ“Ø«õ{~PÿÏä¿òB[àM§É‹œUóýþ·ä¿þkûû¢ê8«÷{v*þ`|­ÿ(üæ?ý¶tŸû­ßb¯ÛÿùÀ?ýgŸËßûcGÿ'}Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ùƒóçOô¯ìu@6šˆŸxÚ¿©óÅ?।áÏ7ó¢cþßû÷·öW5ÂPî üÇìx.ykÕ¿=ÿ3$ÿ ÿÎMyKUé£ad“±yŵ7>~ÿï»4xý‘–?Í‘û8eúܘoûúæ2=s„‰§æÚÖŸ×lÙaÈÎ%äºÖŸ×lÛaÈÜ É5­?®Ù·Ã‘´’kZ]³o‡#lKÓ?1î>»å?,Ùuô „SåŒÕölxså=äýå«ÔXcÓlØf›i/UÑìzmš¬Ù‰z®cÓlÕfÈÔKÕt{›f§6F¢U?4¯Ç—|‰æ=X/‘zèËôü52=™SŽ=óÞÃrðïùÁ½;ê–_ÒŸ_Ôo.+N¼Ya¯ü’Íß¶Ù8µ„61ï¿K=Aõ>ÂÎE¥ö·å]‡Ô<±b¤Qå3{óbGü-3éa´¿—ìì}ò¹ó‰#ý>iÛ¹|ML¼¨|‡ëzu®¡Ø«±Wb¯ÆùȯþHåþ)ÿÕñWϤ¿ã·ùÕÿ4òró~Ïb¯?ç??õž0¿í'üœLUùæøäÎÿÛhÝWKÅ_Ñö*ìUøC}ÿ­ÁùÑÿšþãþèºv*úþ|Ûÿ’çÿmGþL[b¯ÕìUùÁÿ?`ÿÖmóüÆéõ*úƒþq;ÿ$‡å§þž^ÿºt8«ßñWãüç7þµ—äüÆÛÿÔzâ®ÿŸuÿëEÿÎHàMuÿuküUû=мƒþrÿ%gž?ðÖê \UüÐ~jë ~Xàgªþ»ÌUý_b®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÓûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_Î×üüÏþq/Ïßœ_óZ\¿“úÆ«&½ Z=ÔѨH –Úi f¸™©(ŒEBÍVû* R;þqŸþqßþp.Ö4ÿÎ[jðùçó%Qg¶òžž¶ñ9“Ô…ŠúŠß—^œL ã Už~MÏçc›Îhÿ›YµÑ¿/&1ç¾”$–ãMGõ—¤éN¾”q2°öqWîߢy÷G´ó’ïíõMþ15µÝ¬‚H¤CÜ0îÄuR F*ÈñWb®Å]Š¿’/ùûþ´—˜ÿæ Hÿ¨±Wç*ìUØ«îùÄùÁ9ÿÎPL|ÍtßáßË›2Ïæ ÕãH÷‘m•ЉY@<š¢(÷.õ¢²¯¶üÕÿ9õùiÿ8m¿äïüྦྷêÖ–wsÌZw“E³¬rFcyIÜ ‰¦â™ ¾*Š:üãüüj³y^EüªüêºäÆÍÂ}RþsSðéÅ9cÕ£ô.I«4rº¯)ÿœlÿœ üÏüÿœ™òF‡ù¥¢1Ñ,õ 58õ›NSéÒýB¸Œ¬À¬eD9$­;â¯êv*ìUØ«±WóKÿ8Õÿ8¥'üå_æçÇ–n|ã­ùgG´ó([Û-.Cõ}DO~È.¢,A CXùâ]ˆ¡Å_пå7妓ù7äíò»Ê­3éZœvp=Õ ÝÈrcV4jh  Uèx«ñ‡þ~•ÿ“OþqÛÿk¿úÒqVAÿ8Ùÿ­ËùÓÿlkoÕaŠ¿_±V?æÏøáêóqÿ&Û(Z7þ°®­ÿ›e?î*þ§)¿åòÏý±tïú†LUè«ñ‡þs›ÿZËòþcmÿê=qWìö*ìUüàéÿòœÎbÿÛZÿ¨™1WéÿüúãÿY‹ÈßöúÿºÅæ*ûÿ~@ÿÏêÿòHhøØÿÝ:ÿ{÷äüàM§äÏæ+~{ù›Ï>c󧚟&ŸÚÜÂVXä <¤rò7Eäjv;QWè*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š¥:õ§×ôÛ»1¹’üøš~9vž|Ì5g‡òx‡ä½E>¿ª0²±‘y6b=¥¹§Ó›üý¡ú“¢Á¡”÷–ÃÍ‚þxy#ÉšQ½üªºµ’k;¢ŽoQÊK±¤ˆß´Tö#Ó?ÊAËû3.|FbháéG§ã6YòãŒx /ÏñýÌ­Ο™_óƒ÷ñyÍë'™¿+¥—…½ÄuånôŒ±>“÷ô\úO¿“ÜâÃÚâãéÉÝßúÇŸ>÷ŸÔéD·ÒO+ùãËŸœ ~kò=ìwÖR 7ž7¥Lr!ø‘ÇpG¸¨ žw& égÃ1GñÉÓäŽyÏ@ûŽn4¹œ,‘|—ç=íü>9Òé38Y"ùo̺A‰˜SlÝÆ\A†)ð–;i1µÐ¯´ÎÒÈÆŸ0£ødL/w.Y/$OãªCÓþÎÙ8…Ôå}å ¥I‰©ËN¾§ò~‰ö> çuYœ¸Eô¶¶]±—\×®"³ÓíPÉ<ó¸HãQÔ³5Ïæ‘™áŽä¹¸áoŒ¿1ç%<ãÿ9©IùGÿ8¹Öúe8_kÏÊôÎŕȬè¿~ˆªA ²ÁÙ¸ô1ñu'~‘çý§ìãM¤½ËëùÅÉ_,Î:iÚF¤ªêZÙõ=Aª hyðXã'áE29¨<Úµb~^k·uy{BBQ<<7CßÎÏÀy=“,1ƒ‹«ê OÈ)w Õ|¡:ÞZý:ükì:VžóÍ6.Ðá<9Eþù4¿ç‡ü\UúÿмÿógþP3ÛQÿ¨gÅ_œ?óæßü—?øj?òbÛ~¯b¯Êùü—þHKoü ´ïù1sо±ÿÖàü—ÿÍoÿt]G~ïb®Å_̇üãÿü⯘ç+<ýùíå-Ï—žOРó(]ZÊÞÍ®¢ÔÖ[û÷ˆJ¢â=…ŠÔ>òµ>%_Ñ'äçå†ù-ä ò«ËóMq§èVQÙÅ5Á¤œ:»qÌI 1W¥â®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]м{ó£EŸVÒ-䰉渊å@DRÌUÔƒ@=øçŸÁ³g«ÒÀ㉔£1°j@ŽCÏ…è½›ÔŒ9H‘ c×Ëð^i¥~XZh.·ùt––ýVÙZ®ÞÄŠšÿ’•>ã8ͱX´PüÇjLB= ¨ù?ÜÂϘwYûrYåáécÄÐ~;ÏÉñßüåçäÏ—ç"¢Óî¼¥ÐuÍ 4ëå&Ž¥¹ð•ì9 ‡RdRyU‡Á’ÍíÎ R´øDpˆå)y×/Ÿ=Hv½§Ë¥³–\F\ÇAî?Ø<Ÿ)~\ÿÎFy“ò¯SOÊÏùÉKya¸Ž‹m¬Ì:VŠÒ0ÚT?ïÕø‡I—"0{CÙìZø~c@AaÜ|¿š¢vþiªwRÆ%¼_mÜý[U¶QÓ¤Ií¦@ñËFS¸*ÃbˆÎ27ŒðËb:³Ìµ­?®Ù´Ã‘¶%äšÖŸ×lÛaÈÚ É5­?®Ù·Á‘´>³sõÛ+ *×ÐUù pG†r=ÿ­Œ9”ÇG±é¶C4Ùõ]Ǧ٪͑¨—ªèö=6ÍNlD§lóï—ÿ+4¦óœnD ˆ£Z4³8b4رû€êÄ ò.‡.¾~!g©è<Éüy02Ø>*’?Ì?ùÌëßMKùsòÊ)w;“qÁºž¼•ÐÆGwd—Ù¸ÿªf#ý-ÿ¹ì¥îåvؼËõ·ò‹Aü¾ò·”4¯Ê?©6›g¤ÂðÚÝú…Ø´’4®òHwäò;9ÁcÄ"ÑEÚ~ÞìþÜ€ÃÚçÈe/‰Üt¸£ÖÃÉëpj°ä9±KˆÌOËaîî£ïM¼Ïù[ªhCëºu5 9¨VhH§%ûÅWÜf“¶ýˆÔ艋÷¸Ï)Gøïó0ß¡íÌzL½î? þŽo¯´Ë1§YÛééö`†8‡ÉáŸ@h´ãMЇðÄGý(óÜùÃÌ­®ùˆù“]óN —×—+j-c_L?©ÍÉfi™ªáBŽ5e_oâ¯?ç??õž0¿í'üœLUùæøäÎÿÛhÝWKÅ_Ñö*ìUøC}ÿ­ÁùÑÿšþãþèºv*úþ|Ûÿ’çÿmGþL[b¯ÕìUùÁÿ?`ÿÖmóüÆéõ*úƒþq;ÿ$‡å§þž^ÿºt8«ßñWãüç7þµ—äüÆÛÿÔzâ®ÿŸuÿëEÿÎHàMuÿuküUû=мƒþrÿ%gž?ðÖê \Uø%ÿ8§ÿ8-ç/ùËÉ*Iæ?Ìcùmm«^]CåôÓRI!’;‰b™ã¸æ§”•zr «Ëìšb¯é3v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯ÿÔûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å^Kùåä¿4~`ù#WòŸå—˜æò§™nà+gª@ˆæ7ñnJ̪ÿež:J€òCÈPªþ/¿=¿*|õù7ç-GÉßœÖ×y”HÓË=ôÂí].c™¿½I$=kZ†£†P«Ç±W×_óŠóšÿœLÖ>·äë¯ùjæ@ú†ƒw#}Vã .L3PPJ‚»(‘dAÃTßóŒ¿ó–ß—ÿó•ZéÏ˫ޭ¼jÚ†rUolØíñ ?dý™R¨Ý*ª}9Š»v*þH¿çìúÒ^cÿ˜-#þ bÅ_œª½­¬×³GeeÍq3¬qÇ–wv4UU’NÀ ÉÅ_°Ÿ‘ßó¾Qüòä_ó‘ßóŸ·‹¢èQÒM;Ê„Ÿ®^KNH—§™c×êÉñ½ÃÄ‹"b¯œÿç-¿ç>|Íÿ9þ]y*Ù|¥ùSb-ËŒ~´QvnŒtV¥XRǶÎê$*¾ÅY/“ü£®y÷Z²ò’ln5-rþe†ÒÖÙ É$Œv êXÐ(«1Š¿²/ùÂÿÊOÌoɿ˛?,~zy¢ãÌ~`n2,S2̺t\E-RàV~?´îì£dˆ^N«ë\UØ«±Wb®Å_XÿÎ~Ni?™‰ÿ9 ¢é—V^kMEõ_ÜÞIõcw!f’OE¹͘±U!? ¶*ûGv*ù÷óŸþq›É?ŸZו<ÝùƒÔš‡“/ûI6÷%Yd’ ‘@<Ç+xö>þ8ª+Ê?óŽ^MòOæG˜?ô(®—;g·KmE䜴-zTá(§÷I½||qW¼bªsB—ÐNªñ:•e``E ìA«ù¹ÿŸ“ÿÎ%þ@ÿÎ=ùSô—åTñiþ}¹Õ-[ô#êþ´±ØN³‘-$v˜Eͨû<±WôùP ù#ËJ„hÚx ÿÌ2b¬ÿ|ûù‘ÿ8ÍäŸÍ_^ü†òv›ùQù~“G i_Xú²ÜJe}bâK‡äæ„ür5<lUê«Æ¿= ü•ÿ9å“ùyù±`×úJÜ%ä>œÒC$7«¢K¡0WuÞªCTŒU ùÿ8ûåùƯ,¿åßå„w1hïy-ñ[©Ìïêʨ¬y6¢.ث۱Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUثǿ2t=Rä~’·•ç±AV€ºéÕ¨>Ðñ'qòé¹ìÌð¤Š=ýî§´pN^ lww-G2/Íq¡õôÙ[í•@Ɯ׹_¶›ÔÍzŽÎžŒß8ô?­Ñê4æ?9èoáñÌÝ&g[’/“<å Ð±:].kp§|ó©«Ü}Dì^†Ÿ3ý™œ\¬#Š<]ÌãË:Oªë¶Ù’á,åÄ_Oy?DûfU™ºzÇ™?1<·ùA¦ gͳ…‘”ý^Ò:4ó°ì‹^ž,h£¹­Ó 3ÔÊ£óè† &|ž ¤ùGóþsîoÎ//—?-b“Ô¶µˆžSÞ0ÀzŒFÞ»Ž S顸—,ͪÃÙc†¬Ow¿»Ü7ïwúm ô7ÈÞBÐ-ô˜¼±äË(ì¬"ߊ ³µ(^G?¹îÌIíМ¦£S=D¸¦l»)˜e z/4=Ròèj½­ªI(èôýÍôŠžÙ­í ðŒxd,÷wy» ÈñC½ô^s@ìUØ«±Wb¯üøü†òü䔿ü´ü϶–ãH–hîQ­åhfŠh«ÂHÜVŒ0øƒ)‚*•ÿÎ;ÿÎ;ykþq›Ëw>AòÎ¥u¦Üßɨ³j—"âU’Hb„ª°D´ZlKçv*ø’×þpòÊÏÉ>tü¢Šmcôžõ5MYÔ~°ž „¹_Eý*"óAPU¾Š÷Å_Wù ɶ—>YÑ/|¾em/AÓm4»C;Ái Ã6ÜPr žÃe˜«åOùÊÏùÆËùÈ-ÏTüòž]6ÓÊæ{Û}^å±6Há ìÒÉX•‰ A^¸«ócþ}¡åß,yKþrówË–zŸéŸ+YÚ[E§ê[Žóë‰Áõˆþ 7¯Ä»b¯Ý,U)×ôk1é—¾^Ô [ûi­e(hÜ&BÄhhvÛxïüã¯ü㯕ç|ªÿ–ÿ–ïzúKÞÍ~MüË4¾¬ÊŠß¢4AAOñW¼b¯ÿœŠÿœuò¯üä÷•Sòßó!ïSIKØoÁ°™a—Õ…]WâdqÆŽj)á¾*ÄâÿœBò,_™¾[ÿœ„Y5/ñG•´”ѬÜ'Õº[Ml ‘ú|™øNû‡Qʆ›Pªú“v*ø‹HÿŸ~Uùsó<ÿÎAùgô¾æÔŸV–ÖÞøýFK™ 3³ÂèÍFgfà*“D »b¯·qWb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š´Â €hOqÛ¡ñ§æg–µ½"ý¯µ¹¤½·”Ò+£Òx6B<Þéó¿¶}«Ñç959#/¦ïHåä6îë^غÜ9¡ÃŒ‘Î?§ÏßϽæYÅ»¶ ùƒùoåÿÍ -ü»çE¹·5h¤ °½>ÜOÕX}Ç£µ íºñâ4z÷ÜGQø ŒŒy>’ÓÏÿóˆWLñ—óåIJoÔ9Úú/þP¬Rw£/n'¥ö†?êy€ùÿÅöCÜäXËä_Sù[Ïž_üÐÓ?OyFäOÂX›á–?³"uÀý–ꤌæ5:ºðeÜzqk11æ‘kZ]³'FÀ^I­iývͶ±/"Òn~»¨ÜÙuô…>LFmrG† ÷¤lö Ǧ٪Í4õ]Ǧ٩͑¨– ùŸùû¤þYÐ:* SÍ‘ÚGVXݶ_SŽõ'¤kñòjföoaO]럦Iëîý|‘q$—ŸóúçæF¤Ÿ™Ÿó‘s=ÄÏG¶ÑÉ D­TLdQ×Ñ_ùèkÉ Ý¡í=?/¡ß?øžóý#ðèVYDv‹îûKH,!ŽÊÆ$†ÞXãŽ5 ˆª(TPÀ áå33gry—‘WÕ”YÖô¨N¡ªO$2ŠÇfÛÖ¿¶AûÀPžûu÷øö.³K4Œ`~œG¯ôˆ?GO]¹ðžÐëpå<0Ès—èóý㞘óÅ]Š»v*ø‹þr{þpGÉó”bÒ¿1õÍ[[Ð<Ó¤Z}Bíå"f·ò*0‘…ZY8²4vÈqâ«ëÏ(ùy<¥¡ižTŠâk´Ó,­¬–âá¹M(‚5Œ<„R®Üjǹ'd8«Ì9¿+tÿÎÏ$k•:ýÄöš~¹jÖ“OmÇÕE$§0Ë]»ƒŠ¾d½ÿœ ò…õ·å-„šÎ¬ò‚ëëzI Ý·Ö-î)sû¾œ­”~ï†ÌÝéE_tâ®Å_—ó™_ó‚ÿ—wÕ5ïùÈýWÌú¿•<Ës¦êjÐ]½K™® ÃÁ¸ò™‡ÄXÐ ë\UõF*’ù“Ëö^lÒ/ü«®!—NÔíg²¹Œ1RÐÏÔ¸ª±ŒUñ§üãüà–ç<Éyæ¿#y“Ì7ö767éZÌRZ@³OæDHã÷€ÅÇ•7 ÕÜ⯹qWb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ÿÿÕûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]оqÿœ™ÿœ\òGüåG–É¿˜¶Ün¡æún©êÆfç~Ò¹ÆÕGTTeUü“ÿÎOÿÎ*ùßþqOÌíåÌ WOœ»iš´ßT¾‰OTcödPG©<ã$}¤dvUóN*Ì<…ùæ?ÊývÓÏ—ºÎ‘®Ø¿;{»Wàê{ƒÙ‘†ÎŒ :’¬¥I«ú\ÿœ'ÿŸ¢ùoóÄZ~\~w5·—|øÜa‚ì°OÔŸ àÌiíÓÒcÁÛû¦äÂ%Uúኻ$_óöýi/1ÿÌ‘ÿP1b¯Ž?&$<éùÿæ8<ƒùW¥Í©ê’Ѥ*8ÃohežSðÇÿ3ÍC9U*¿`ËòSþ}k`·Æ×ó þr*Hy"÷“Ji¨ú*ûGý*aöDH@UùùÛùóçoùÈo1Ëç¯Í]RMBýù,1}›{hɨŠÞ!ðƃÀnÇârÍV*¼{z§ä×ä¿›¿?<Ñiùsùa§¾¡«ÝMO†("šy:GTrc쪙Tªþ±ç ç¼£ÿ8£}f߆­ç»ØBêZÔ‰BâZ `wŽÂ¿Ï!øœìªŠ¾ãÅ]Š»v*ìUØ«±Wb®Å]Š»v*ìUá¾{ÿœhü­üÏóüÃò¦™¬ëöÑÅWW°ú¤$LY«)bhTõÅ^âPEØŠ·Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»x÷œÿ/DÜõ_/¥$ݤ·^‡Ä§¿ù?wÜè»F½3ø×úÝN³A~¨|¿SÄYJ’¬(FÄݺf°¡òGç¿üâž“ù™+yËÉrα°™.âªE<‹º™‚n¯^’§Æ:°z7}›ÛRÓz'ê‡ww»õ}ÍY1 ¾oòßüä³åKþU_üä}«éúÄ4Hµ7QÂE;+JWáe4 ™*§öÀ!Ÿ7ß”†QâéÍŽïÇÜ]&«³ˆÞ?'¡ù·FŽæ?¬[•’)::U”Š‚Ø‚:ÈÒæ§A’ø{ÎðýSÍÖZpÛÕŸ7qü3{ŽwNV ¸‘ó?¡ô“ôO³¶cj²ºèEçÏ _'LžOò¿é¯6NÂá…L©°&îõÿu¯û")C¬ðÐíÀ‡§Ø;©÷~¾oG‡L ",J#ŒE*@èÎd›rWb¯Kòo¤ÖJêZ¨hìzªôi?¢û÷íãšÍn¼bôÇŸÜìtz“Õ._{è ŽÖ5··@‘ ª¢€à3ž”Œ—}ˆŠ ¸ìUØ«±Wb®Å]Š»v*ìUØ«±V9æÿ)i}Ñ/ü—æëU½ÑuKy-/-™VXe] B¬›qW›þOÿÎ9þZþA%Ü”\³ÐÚÿ‡Ö¤€;Ë(JñV–Vw*µ$/. ’@Å^׊»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±T%ý…¾§Øj¬Öò :8¨#1õZ\z¨y@”O0y6bË,R‰¢:¾HüÂü²¸ò£6¥¦òŸJ'íÚ*öoúý|ÚÏbçÙ$åÅrÅßÖRòî—ÀïWßöGmÇWèžÓû%îýO(Îߨ\ÛCyÚ]Æ’Á*”xÝC+) ƒ±u dbllUðWæoüã>·ä=E¿2ÿçæ{k¨êóé ß ¯V†øYOûåÿØñ\î»7ÚLz¸~_\,tŸüWqþøõ.D2ƒ´›ü²ÿœÒ2ü5æ(Æ‘æ¸ØÅ%œÕE–EÙ„|· Q¼mñܨNÒìè¿yTö::éæ6÷2”8Yîµ§õÛ0ðäLKäßË»Ÿ®ù¿Ì6U¯¡q0§ÊvÔëã¼¹´¾¦²H,!{Ûéx”¼’HÁQTnI'`Žs&f†äµð]góÌ?šZ¡ü¶ÿœ¶’iá¹Õ(QQ:V?Ý þvøÉÙ´å»ÅÙ8´0ñõ¦»£Þ{¼Ï—.ôðˆï'Õß’?óZ'å@]{Taªù­Á2ßJ X‹}¡·Ùð.~6ßpå{kÚ<šÿD}8úDuþ·êä>ÖŒ™LŸKg8Ô©O;¬+<ŽBª¨$’zRrXñœ„F ’vnI",ìP~\þT&•Ã\ó2 /vh ;¬^»öè¾ç§¶{!ì ÒV£V.|ãó=òû#æypý±ÛÇ5ãôzžÿw—ßî{®z{Ë»v*ìUØ«±Wb®Å]Š»v*ìUØ«Çÿ:ÿ!<‰ÿ9¡Ûù+óIý1¢ÚÞ¦¡ Z¹¶ãqrD¯ÎÚHœÑ%qı_ФTN?*(¼ŸùåØ?/ÿ*´¨t}ÝÞT·‰¤™$5gy%g’G;NÌÔkE*ôŒUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»ÿÖûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»y—æïä÷”¿=<³wùuù§G©h·ƒum¤ŠAöe†AñG"þË)¯Pj¤‚«ù?ÿœÒÿœóoüâN®uõu ^JWOÖR=КRµ]£”VŠ~Ä rJHоÅ]Š¿aÿç çéÚ÷äÿÕ?-??¤¹×¼”¼a¶Ôêe¿Ó“ µ7/ò“êÆ¿Ý³*¬X«úMògtÌ]ÓÎ~EÔmµ]þ1-µÝ¤‚HÝ{î:ve4e`U€`F*ü=ÿœ£ÿœóOüä×üä—™¼ñ®Ü/–?,,-4Ç¿×ï8ªºCc•-ƒ•V+BV"(¨y32úl«çÏÎOùÎ$ÿÎ;ùroùÇoù÷õ¢iÚzþïTóƒ¯;»É@âï¸ ìwXqÅA"Ú4A˜«ñîþþëU¹›SÕ&’æòâF–i¦ròHîjÌìÄ–bw$š“Š¡1WÒÿóŒóŠ~wÿœ¬ó2ùOòþßÒÓíÙSÕ§Vú­ŒLz»µ#}8—âr?eºªþ¶?çÿç|‘ÿ8±åtògåݯ+©‚>¥ªNº¾™GÛ‘‡E<#_@X³2¯£qWb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å^qç/!Å­†ÔtÀ#¿‘Ñeùø7¿ßâ6Z-yÅé–ãîuú½Ëê?½óåż¶’5µÊåCFV çC †Q14TrL^cù«ùAåŸÎM ùwÎÖ‚U^FÞæ:-Å»‘öâ’†‡¥AZƒ’°Ì­&¶zYq@ûÇCïR-ùyæï/yÿþq çêšÒ¿˜-¦—Œ7H `ävµôd¯ì’b“öX1n=–“]]ËÓ>ïÇ?½ÀÕöluÆÇñÍá¾xóææ>è^`Òo#:SÚDÒÈ燤D“rYû,6÷T›|$ÄnàbÐN'7³^{OEѵß8þ|êMùùk$ZzÑouY+"ªÒS÷jw •û/Q˜š½N=0ãÈ}ÿñòmÐö0Ä8²sîè?[ô¿òþqŸË?‘–‚æÐ G̲§Rt÷ê®þ”~À–oÛf §Ú«=aßhô¯¼»€)ô~kìUì¾Lü¼çÃUó|?j;vïîÿóOßáš]ohצ?Ôî4zâŸËõ½¨Àf‘Ü7Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±U’F²«E*†FYXTz‚23€˜£¸;z¤ ‡Ì_˜ß”ï¦úšï–½¦í-¸Ý£ñ)â¾#ªûŽž+í°‡Mz ¸s”:ÇÎ=ñïãæ9výÛã-cÍϤ»ýþ¿ŸÏ.z§b¯˜>çü¿ùËkVDi>lA‡P…v¯ÙYÔS˜ìí¦Ô%GÒö´Ù{4ðV>±=?«Ýîä~ÖÜyLišÞiüžÔ×ò×þrÚUá´Õ÷:@ÅÀýê–?x½$RkǰËÙ˜{F˜ÑçT}ßÂ|¹ŽG–ñy7¿0ô?(yÇÎ~dÖn•ìZêàÛz$HÓò¹r¢*5Fà×7$ Úë´51B#z{W¤sü[a§å/"yóþrÒå/µ2þ^üºŠJ­+Êã‰ý€iê¿nd“~ °*uz½~›°G÷™ûóG—Ô}Ír˜Çï~—~^þ[y{ò·JO-ù.Í-mV#}©%ç‘ÎìÇß§@Û<ß´;G.º~&Sgì@tq%#-Ë;Ì(Ý;N¹Õ®#ÓôèÚ[‰OEŸègjÍš8be3@>¸ü¾ü´¶òš.¡¨qŸUa»Ò«zª{ø·~Ô}÷Ù?c1öHrÔ²ž½!å>ùs=(sóþÖí©jÏ v‡ßïýOTÎáÑ;v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯ÿ×ûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*y§Êº?ô›Ï)y¾ÆßRѯâh.­.£E,mÔ2¶ÇÄw„n1Wòûÿ9éÿ>ÚÖ?çåºüÐü¥Ž}[òÕ˜¼Ñï%Ö“_Ù˜õ’ ý™º¯Ù›zI"¯ÊLUØ«ê¯ùÅÏùÌ/?ÿÎ(ë_¥|‰uõâEmGDºf6—@lM?ÝröeOˆlšU ¯RÿœÁÿŸ„y÷þr¶gò𯗼„Ž-Öfc9]ÃÞJ™˜Õ8¬IðÑ Pªøv*ûÃþp·þpCÍßó–º°ÔœK£þ_ÙËÂÿZxþÙ˜-m,½±!ž¤ª:¯ëòòÊ_‘žY´ü»ü°ÓbÓ4[@HD«<²7Ú–Y ZI»1' PU阫±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]аï5ù:Û̱z‚‘^ ø%§_fñ«·ÌÒkÞ;¿S‰ªÒ ø÷¾oÔôË"á¬uÌr¯cÐ{Œéqe^{&3ŒÔcZQÓ­5{Y´½VîlÛó~€yÈZå¶‘•<“c†™øcˆnÍÝÝÄî{³OŽhsç–iqLÙh&Ù~T…Ha{‡X Rò9 ª¢¤“Ø €,¤ Ø=óÉž@M+ާ¬¨{ΩUú·à;xç?­í“Ó_ìwº=‡ê—?¹ê«vNÅ]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å^ ù‹ùLº‡©®y]]nÒÛ –Nå“Á½ºŸ_,ö¿Ø1¨½FŒT¹Ê%çéyr>þ}_cöùÇXóºK»ßåçÓîó$‘´LÑJ¥]IVV Ž ŒñyÀÀÑØˆ=ØE…™°Ÿ?þ]yó;I“Ë>t²KË7ÝIÚHž”чˆê65RAÍÐv†] üLFØ|ˆêîþ^ÿÎy{Ë~aŸ[ó…ûkZD2†°²dôãëDlüNÜWе96Ìc~¿Û¬¹±bˆõKŸúNïyÜtïo– ‘³ï«{x­"K[TX¡‰B" ªª(`Øœ$¤dlóqÕ°*wåÿ/_yšítÍ&>r¶ìÇeEîÌ{ý‚§6]“Ù»O(Å„YêzDwÈôØ,¸º½d4°ã™¡öŸ ûÉ^D±òe¿–ö@=k†ö_öûëŸBû7ìÆÅÇQõLýS<Ïî—Îß:í.Ôž¶[íÈ~¾òÎ3¦uŽÅ]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÐûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUFâÞ+Ȥ´»e‚Ud’7PÊÊÂ…Xˆ#b*þx¿ç?ç×ryp^þtÿÎ2Ø´ºPçqªyn«ÛÙæ±Q»D?jVN±U>Õ~T•aB6 â­b®Å]Š¿W?çÿçÛZ¿üäL–ßš?›iq¤þ[#‚1Xîuj³ ØÇóMJ·Ø‹~RF«úò·•t$i6~Rò…¾›£XD°ZÚZÆ#Š(× U]‡‰îMIÜâ©þ*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Фaò姘íþ­z´u¯§*ý¤>ÞÞ#24ú™`6>M¢9…Åçsà–E#̆‡b®ÅQ–œéeb†IœÐ(ýgÀxœ†Lƒ¹rgš¢ü£ä«. ¹ž’ß°øŸ²W¨_ëÔþÍë5§9¡°üsz &ŒaÜîYÎ`¹®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»y7æ忚Uµ=,,¨z,´ìÞÁ¾ƒ·NÚÏbáÚ æÃQËöOÊ^}Òø¹oû#¶å¤ôOx}±÷yy|Ÿ%_XÜi“ÉcEqâèâ„óûóÁu:Yé¦qä2yþ>÷¿Å–9b%`õBe ŽÅ]вÿ'ù.ÿÎ7_V±-ÐZv âOaú†ùÐ{?ìænÙÉÁhªg”YîpÝ×viCE—>ƒ©ýžo²<³å{*Z ;JJ Œ’6ï#x±ýC íŸCv7baìœ^ï'ê‘ï‘üÑó­nºz¹ñLû‡AîdY·pÝŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_ÿÑûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WãüççüûËó[ëßœŸó¶ÑYyÐó¸Ô4t㾦۳ÉAÓ½i§và䳪þkõ]*÷C½¸Ñu«ym5 I^ ‹yÑ£–)cb®ŽŒVR ŠƒŠ @,B¨©;1Wî×üàüúîO0}Gó«þrfÄÇ¥NçJòÜëñ\FI¯”ý˜ksF÷hTø$Uý ÛÛÅgv–‘¬PDª‘ÆŠUTP*°lÅU±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±T»UÒ­u«v±ÔöK˜ÎC±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»`~xò —œà¬”†þ1H®ßýVñ_ÕÛ½yoi}•ÃÛPßÓ}3ýïÝÓ­í{3µg¢–ÛÄó¤wÇZîƒ{åË·Ó5hŒs/CÕXv*{ƒþ{çÏ}§Ùy»7)ŘQ";Áê?wÑ4º¸jcÇcî÷¤ù¯r^“ä/Ë›¿8Ê.§å–†57r?e+Ôøžƒç¶v>Ë{!—¶eÇ+Ž!Î]eåóÞy3³¥í^ØŽˆPÞ]w™ünúÿJÒm4KXôÝ.%†Þ1EQø’z’{“Ÿ@èt´8Æ, F#yï=åóÜú‰g‘œÍ’˜æ[K±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÒûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯ÍùÎù÷——ç),¥ó·“/æm¼TŠôŽ0_ª†° šÓd˜è(:UUâóóì ?Éù-6ÿç!mà¿ó¼L²éúHtž×Me ¬²2Õ&¹R>¥¢‹ª—~.Š¿e±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š¡î­a½‰í.ÐI Š2°¨#% ˜ e!E⺇ådæýSN >BIg?cŸµíøøæïjŽW?½ÓäìÃÅéå÷=sFÑm4qe§§³´ÇÅsþc5³Ë1¹;\8cˆTSl¥µØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ƼÑåK6Ú Q>!S«öãcÝOëi»o°°v¾/0þ¬‡ÕÞ?Hä\ݾz9qCâ:‡ywòFuÔ]¼Ç"¶ |3¼ã¯mÐx÷ì?›<ϲ?àk1œþhƒŽ'n¾OÓß× þsÓë=¦‰Æ··ŠÒ$µµEŽÔ*"Š@{,1ÃØñ³™™³¹*Ùcb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_ÿÓûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÔûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÕûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÖûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wÿ×ûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÐûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÑûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÒûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÓûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÔûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÕûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÖûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wÿ×ûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÐûùŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÑùë7üü¯ó÷U"O2ù¦æöD ¦œw,º?ÍÕ˜t­6ÅTè¢ßœŸõ|Ô?î)¨Õ|UßôQoÎOú¾j÷Ô?ê¾*ïú(Çç2üQë·áÇBu+öíPg¡ùb¨ÿú*?üäïýO?÷%Ñÿìwýþrwþ§Ÿû’èÿöGŠ»þŠÿ9;ÿSÏýÉtû#ÅPôQÎfø¤×oËž¤jWê+Þ€OAòÅ]ÿEüäÿ«æ¡ÿqMCþ«â®ÿ¢‹~rÕóPÿ¸¦¡ÿUñUhç基Q2ykÍ76R8¤=5ð ~.>hªÇ¥i¶*‰ÿ¢£ÿÎNÿÔóÿr]þÈñWÑQÿç'êyÿ¹.ÿdxªŒßóóOùÈP<Çæé¯-ä© µ¶žÁ»VÂ;y¥~b‡¯…!T7ý[ó“þ¯š‡ýÅ5ú¯Š»þŠ-ùÉÿWÍCþ⚇ýWÅ]ÿEüäÿ«æ¡ÿqMCþ«â¨Èÿççÿó’–Š-´ß:´6¨8ÇéºmÃ*Ž€Ëqo$®Ê‘ÙsНÿ¢£ÿÎNÿÔóÿr]þÈñWÑQÿç'êyÿ¹.ÿdxªOùùçë­cÌw—¼’Åu=¢±é´6Ï)·dGzTœUgý[ó“þ¯š‡ýÅ5ú¯Š»þŠ-ùÉÿWÍCþ⚇ýWÅWÇÿ?"üó°au¢y’òÚñ~IJÜMx«]`»yaj¾8ÚEFÑQÿç'êyÿ¹.ÿdx«¿è¨ÿó“¿õ<ÿÜ—Gÿ²ô¨ÅPôQoÎOú¾j÷Ô?ê¾*ïú(·ç'ý_5ûŠjõ_wý[ó“þ¯š‡ýÅ5ú¯Š¢aÿŸ›ÎEiŠm¼½æùlíIåéÍkk~ÜSêßEq.û|!¡A,JªßôTùÉßúžîK£ÿÙ*ïú*?üäïýO?÷%ÑÿìBÍÿ?*üûÕ[Öó/š.o'QÅú8ëC‡Õãc_Úd/Û— *¥ÿEüäÿ«æ¡ÿqMCþ«â®ÿ¢‹~rÕóPÿ¸¦¡ÿUñWùøÏçD¼·×¯ÖUݵç‡BU¦*½˜zLUÿEGÿœÿ©çþäº?ý‘â®ÿ¢£ÿÎNÿÔóÿr]þÈñWùú7üäáÙ¼óQßýÃhãñ•ÅPôQÎS»k·õïMNü»×Å]ÿEüäÿ«æ¡ÿqMCþ«â®ÿ¢‹~rÕóPÿ¸¦¡ÿUñUh?ç忟úQ-åŸ5\Y3í!œ&£È”€¸T§Š'¹ UÿEGÿœÿ©çþäº?ý‘â®ÿ¢£ÿÎNÿÔóÿr]þÈñUÿçæŸóÚ¨y“ͳ^@§’,[éì¥}KíÝ…ÙfeïJ€qT7ý[ó“þ¯š‡ýÅ5ú¯Š»þŠ-ùÉÿWÍCþ⚇ýWÅ]ÿEüäÿ«æ¡ÿqMCþ«â¨ÔÿŸ ÎK[(·±ó³ElƒŒq¶—¦NUG@ežÚI\ûR;»uf'|Uwýþrwþ§Ÿû’èÿöGŠ»þŠÿ9;ÿSÏýÉtû#ÅPrÏÈ?;ïÝjÞb¼ží÷’H®î-Uˆ†ÞHáO”h«à*³þŠ-ùÉÿWÍCþ⚇ýWÅ]ÿEüäÿ«æ¡ÿqMCþ«âª‘ÏÉ?=4öz™.íoìË4òÞ¨cû›Æš¨Ú­qê´`UÿEGÿœÿ©çþäº?ý‘â®ÿ¢£ÿÎNÿÔóÿr]þÈñU’ÏÏç$oTÚêþs{‹7ÚH£Óì-‡´Ö°C2ïT‘| TUAÿÑE¿9?êù¨ÜSPÿªø«¿è¢ßœŸõ|Ô?î)¨Õ|UßôQoÎOú¾j÷Ô?ê¾*Їþ~oÿ9¦¯Õ´8KiiZˆæ´´¾jž¤Í} óøsâ;½UUÿ¢£ÿÎNÿÔóÿr]þÈñWÑQÿç'êyÿ¹.ÿdxªoùùOçÖ¨Â1ùžæòáG’:x Ö†+«ÄMIøŠ= Tè¢ßœŸõ|Ô?î)¨Õ|UßôQoÎOú¾j÷Ô?ê¾*ØÿŸþuBDÖšýòN‡”nú…䪬7Ç$¬Žý—VSÑb¨ïú*?üäïýO?÷%Ñÿìwýþrwþ§Ÿû’èÿöGŠ»þŠÿ96v“Ï”õ¡ô…¨ðªÚ>`ƒàqTÿŸ‹~rw×uûŠjõ_wý[ó“þ¯š‡ýÅ5ú¯Š»þŠ-ùÉÿWÍCþ⚇ýWÅUàÿŸ—Î@é5ÿ ù®âËŸ÷¾ºG¨ò§J~[€”ßû¾¿k•Š¢?è¨ÿó“¿õ<ÿÜ—Gÿ²`ó-ÕÕßC,2½‚•£d`†£ù„`ŸÚ$ÑE¿9?êù¨ÜSPÿªø«¿è¢ßœŸõ|Ô?î)¨Õ|UrÿÏÇ¿;mX\é¾a½†éh¤’öêáU‡BbžG‰éü²#!èÊÃlUÿEGÿœÿ©çþäº?ý‘â®ÿ¢£ÿÎNÿÔóÿr]þÈñV›þ~‡ÿ9101]yØÉ .ƒIÒâ,§¨ªH•´Ž®½U”Ðâ¨ú(·ç'ý_5ûŠjõ_wý[ó“þ¯š‡ýÅ5ú¯Š»þŠ-ùÉÿWÍCþ⚇ýWÅQÏÌç!4ªÇå¯6Ïeï"Ï :‰fmA.;!PzOEUÿè¨ÿó“¿õ<ÿÜ—Gÿ²fóUÅë%}3¦Ä =mÕú  WöH©ÅT?è¢ßœŸõ|Ô?î)¨Õ|UßôQoÎOú¾j÷Ô?ê¾*ïú(¿ç(ÝuÛúö®§~GÝëâ¨ñÿ?Fÿœœ/žh;¸mþ&Ò¸«¿è¨ÿó“¿õ<ÿÜ—Gÿ²Ö¿iªÄ’ªŸý[ó“þ¯š‡ýÅ5ú¯Š»þŠ-ùÉÿWÍCþ⚇ýWÅWÇÿ?!üñ²au£ùŽòÞñ7ŽYn§»U=7†åå…öìñ°ïJŠ£?è¨ÿó“¿õ<ÿÜ—Gÿ²p·ò‘üÃùù½ææ»Õ4PÔ!ÓôH}8ÖÖÏ*¹¸Ý (ä1=²¬;ò[þ}M¥ÎB~Lycóɾi¸ÑüÏ«ZO-Å­ô qdòGs,@#GéÉ*€’}mëAC@«ãßÎ/ù÷/çÏäÏ­w©ybmoIЧëú7ñ•XÄ€\ r^wØÑWÃÓBöîÐN¬’£e`AR  î8ªž*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*« \0ŽgsÐ($þnÌx` =ÀYûÊB;™M“5 ª4ÀB‡ù·?pþ4ΧCìf«Q¼êÏsò¤‡/ic‡-Ý'––-RÈÄIbÔ­ôú0äöjõ°Òq%L¨s©]Þ‘úÔkoÉ\êU¾òEõ½ZÔ¬Ëà>ûŽßŽ[®ö#Q‡|DL¥—Èíö±ÅÚp—=˜¥Å¤ÖéÝFÑ·ƒ3“Ôi2iH˜Ÿ1N|2 î ¡ó›±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»M´Í PÖ[†™m$ÛЕ_„|Øì>“”fÔÃÖ@rtú<š¢$ýß>OIÒ¿(o§MZe’1;“°EsQŸ·a /ß°ü|þ›Ù‰Ë|„!¹ý_zMå¯"2}z8§h¤µ”"’¼^žÙ™¾Òü¿ "ì_Üâöc_ŒM½ÿ©«~\ëzU\Aõˆ‡íAñø›ðË0v®,½kßúù5j{ > ëˆG³›xÚ&1Ê¥\Eú3b î9‰‰¢³ Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š¿ÿÖüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]о™üÿœ9üäüøôn-ü¥¨\é³P®£r‚ÒȩߒÜNR7 ÞˆYºPŒUú¿ù;ÿ>L‘Ä:ç×›‚ Œšw—£©ñ¡»¸ZØn}Ÿ~°~OÎ~K~EúW?—þQÓÓRŠ…uÔ7·»²Íp]£'Â> 튾¤Å^Aÿ9 ÿ’³Ïø ë?õ.*ùÿþ}½ÿ¬Ûäù‚»ÿ¨éñWÛø«À7?ç¿)ÿ=QÿåiùOMÔîxýwÒô/ìÔ%&xs§¶*ü¤üáÿŸ'hwþ®£ùæË>cRš~»¸„“Ø\ÀÑGjÅ3xœUù?ùÅÿ8ùåù &¼óg”îîô˜AfÔtš_Û¶æOûÊ‘þ#|yŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUzFÒ°HÔ³€ œžŸùI™ÿKßíuYû^GéÙžÙhpÚ/¥mƾ ηM£Ç§8â"<…:¬º£3dÚhšo¶dÓŽs<âúÒžs³‚`cÿ &pš±þ½cþ¡ÿs7s‹'øŸéIm7Û;ºtÃ2]u£Ç:˜ç]f¸å9´ðÌ8fÄXû[±ê MƒLSü¿²¸«ÛÿÉÝ~ãü)œ®¿Ø½.£x\–ãý)ý;L­8óÝjI¿³«@t˱ûð'8Ýw±zœã©-Èþ‚]®Ó„ùìÅ&‚KvôçFG˜ås`žÃ0b{ˆ£ö¹ñ–ãu,©“±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìU0Óô«ÍUý6 &nü>g úr¬¹ãˆ\ˆ ø4ÓÎjŸsÓ´_ÉýJö’j²¥ªÙ_Þ?àx¼æ£QÛ°‡Ð/ì­ßé}™É=ò´þ¯µëºåN¦QÞs(ý¹þ/ø]—ðÍ&£¶råëCËõóz/`àÃÓˆ÷˳—Øô›}bQH@ P£5RË{—sŠåÒý²"iâ?“¶~¼úè§ÙºQø¾t¹*ÿ«úžcÙÁêËýoÖö‡Òý³@2==1­cÊÂðÔ­£›jeø‡É†ãè9•ƒ[o"Öÿ&-ž²hÓ¼ ü’kòb?á³u§íù ¦/ݱü|žUì¼%¾2G‘Ü~¿½å¿u­––ÜÍý¸>1÷}¡ôŒÝ`í¤Ë™eÖ¶Ùš¯žTþßOöÉ€âO2s톜yfC\]ZÚüú’tâ›ïóé‰ 3†9OËÞË­¿ç?25¸×óZÇÊZ‹ÙÛ T<‘£eaÉ $K"ÄóHÙzoœîQ¤:¡šDx€PÜÐE7ø=Ý„uB8Î-ìýLB;¨YÚÚíÞá«$‚”`hAð øÓ: \ â”yn‹“Or]ÁÉSPÌ”ÜiÞÙˆfHn´ÿl‰T2±]GIŠáJOºø0®bê4˜õ‡$D‡˜·? Ç‘yî£å+sV¶åð¸ÿ\äµÞÄéóoŒ˜ôÑùþ×o‡´%×vu¢Ü[ÇŠÿLãµÞÈj´ûÄ èóÿJwù[±Ç©Œ’¦R‡‹Îg&9c<2ã±r¶² ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìU^ÞÖk¶ô­£iÁA9 ä#M¸°Ë)¨O“5Ò¿/ïïˆk¦[t>?}ÃoÇ5¹ûZúwû¼Ó{9—&ó"#æ~ÏÖõ]ò×K´"KˆÍÌž2š¯ü ûëšmGkäŸ#^ïÖô:_gðbÜŽ#çú¹|íëzv‘±@Šˆ:*€úi²e26]Ü1ˆ ƒ+µÓ}³Y@OíôÏl¢YйK]2/¬ê¤1Úv}ê}²1¹šˆ¶B6Àç󬚕Êè¾GÓ§Õ/å×Ï{³¿½—èÞiÑõà#†_Fàÿº¦ø¾Ç¡úaæÓO1c¼9ÄC ŸLöÌq‘¬„’çMöË£‘‰ nïNë¶_Œyö»å-?T©¾¶Gç¥þPþ9°Óëg‹é$}ß'SÙøµ\Aóëóæò còÅ—Òæ)þD‚£þoøÞ`í£ücäóÚŸf"wÅ*ò?¯û^uåÍCN'ׄ²ÚOˆ~>œÛbÖãËÈüöyýOdæÁõFÇxÜ~=ée:çb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»ÿÐüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìU÷'üà‡üâ.›ÿ9ƒæíOÉÚߘ$ÐáÒlWQt‚Ùgšæ/TDêŒÎ«VtøŠÉö©ÇF“_óî/ÈÉqÖå¨õÝZ*Ò`+}) lDL¢Ý;‚«ßaE_qÁv±¥µ²,pÆ¡UU°tª®*ìU¢B‚ÌhäœUð_çÿüü‡òSòÖÒîuæ?1DY?FhE.]T4Ü„PìÊ\È?ßf˜«ñóóþ~×ùÁù­ëhÿ—f#èRrP4æ2ê ‡ùï¤v0$,?˜â¯ËýSU½×.æÕõ«™¯/®É5ÅÄ$²9êÎìK1>$×@b®ÅU!™íÝg™%F ¬¤‚¤‚ÜqWè¯äüýó«òKÐÒµE|ß娍¦Ë\f–eAM¢»ÖSAEõ ±¨é*ý¸ü‚ÿŸ¨~Kþrˆt¯4^7’üÁ Pmµ§Uµg=Dw¢‘P—Ñf옫ô’ÚêØRòÎDš TR²üÇó¦·£êV7º¬:JC§›Qd– § }X‘x…Þµ#n¸«ÿœGÿœógü榹©y#WÒôÄÐ¥µŠq¨™êæåde)éFûLÖ´ê1WØ_ôD¿Í?ú›<³÷ÞÿÕ UßôD¿Í?ú›<³÷ÞÿÕ UßôD¿Í?ú›<³÷ÞÿÕ UßôD¿Í?ú›<³÷ÞÿÕ Uù[ùÉù_ù-çmoò«^¸‚ïPЮÚÎyí¹zNʪs Ô߸H¤oÔ]7þ|³ù£©Ú[êQy«ËJ—$ªÞÔPÀA×| FÿÑÿ4ÿêlòÏß{ÿT1WÑÿ4ÿêlòÏß{ÿT1WÑÿ4ÿêlòÏß{ÿT1W‘þ{ÿÏ«?0 |‡¬þoy“ÌZ ų[Ú¯Yij$ '8Uv. ©W‚iù{.Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìU?µÒceYebÁ€4uÏGìŸc°ä„rå‘—¡éï¹Üü©Äž ‚q ´q|0¨¯ïÎÏIÙ¸t‚±DGÜ7ùó?7S'›#±´­*3`‡—#1±³é¶X­Ë‘—ÙYW¶L_“+&‚Õ"_RRGrh2`8RÈNÁ1°3j— ¦yzÖkëÉ 8Q˜“ì$ýØ%DYcàžr4úcÈÿóŠ>eóW Ï>^G¢Ø6椷ª§Š×ü¦,;¯lÕj;V1ÚþÀÖu0Çô‹ó}ÕùiùAùùWéÜù{MŽ}N:§ÞÒ{ŠŽêHãÿŒj™ Õj2ê6‘Û¸l?oÅÇžªSæ÷ñ·ùy¯ü£Oˆò/ÌËÿ#þj£7œ´¸&¼"‹yô®WÃ÷©BÔì’ûff›&]?Ðvîéòl†¤Ã‘|%ç¯ùÄMSA/}ùc© BÔU…ÙXæÁ¶Ï¹ôþY¿Óvµí1^c—ëûÜ‘«ŽO¬|_,ë6—þ\¹m+ͶØ]¯U’6ZQàEAͼ2ÆbÆíƒïiD°Gp¾¤ |FN­”fbh±»Ë*Wl‰f<¬FöÏ®VC°Å‘‡_ZuÛ+!ØâÈÆ'·Gø%Pß1˜z-H¬‘÷‹ùw9Ñ™’™´x›x‰C÷ŒäõÞÄàɾ)²Û¿ÚßAØÞyqÙÍvv*û þqþpÏÌÿó˜Wzæ›äSMÓBŠÖY΢f£‹–‘T'¤¸ôÍkN£}¹ÿDKüÓÿ©³Ë?}ïýPÅ]ÿDKüÓÿ©³Ë?}ïýPÅ]ÿDKüÓÿ©³Ë?}ïýPÅ]ÿDKüÓÿ©³Ë?}ïýPÅ_—Ÿžß”—äžõŸÊ/1Ý[ÞjZ,±Å4öœý2B’‚œÕZ€8¾*ýü¨ÿŸGþc~ny7BüÏÑ|Ëåûk {O·Ô †àÝú¨“ uWã / ô${â¯Î/;~]ÞùÏ¿å6¡<3j:>µu¢K<\½šÚå­ÙÖ 7ËQP :Šâ¯Õßú"_æŸýMžYûïê†*ïú"_æŸýMžYûïê†*ïú"_æŸýMžYûïê†*ïú"_æŸýMžYûïê†*ùûþrgþ}§çŸùÅï$Kù­æí{EÔ4øn­í &çÕ-9!Hõ"E ¦ûâ¯ÿœJÿœ@ó'üåö­«ùsÉ:ž¦O£ÚÅw3ê&n.²?ÒG5Ä U÷Oý/óOþ¦Ï,ý÷¿õCwý/óOþ¦Ï,ý÷¿õCwý/óOþ¦Ï,ý÷¿õCwý/óOþ¦Ï,ý÷¿õC~kÎGþBjÿó>{¾ü¢ó]å¥þ¥a´¯=—©è°¸…eP=EF¨ ¨ëм+v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»FiöŸ_¹ŽÏOQ¸ò"´Ê³dðâeΜ& …Õš·¨Yy:ÆÖ?)ßü­—îƹ¢ËÚsŸ-žÏMìþ[Êä|ù|¿]³ $JG* è? ×dÈNçwu`* å³6Óìºm˜s›x ÚÂæى9¶Ìl´þ›f,æÌUþ³¥è þä§U’•/Å!ÿb7úM¾až_¤|z6Ç(-÷Í>~˜Ø~]éR²W‹\:‚¿ÌÍHÓý‘9,ÑäYä=ßËw†#ÍïþNÿœH[ÙSWüÕÕ^ê]‰µµcO4¬:v*Š=Ÿ4:ÏjøGž5æWë?µÉöG“üµåß Û~ò~Ÿoa1‰~7§óÈjîÖ'9 ^£.¬ñe‘—¿—Àr™YæË_XYÇ%XAÜ{Äi/œ0ç|‰ç¿Rî A¤ê/SëØ€ŠX÷x¾Áßs@¬›:-´:.Äñé~ƒÏïM‘ÈCå1þH~`þ\r›Au×t”© ,áGŒDó(Ëêtýµ¦Öm?D¼ù|ù|é²ã.o:´óå„îlõ¸žÂåOSØŠÒ£ýñÍŒ´RÀñ2Äz'Ó[Er‚{fY#aUd ƒò#1Ĉ4Z Xµõ‡]³&k!…ߨõÛ2¡6²Eý§H™ 0!ˆ^è–WõúÔ*_ù‡ÂßxÌÜZ©ãúK¯ÔvvG×}üÌ00y^-.{o+ *w>"Ÿ«6ú=yÍ.>//Ú‹,¢óÈòoüäN‡a3úpy‚ÇPÒ$nÕhMÄ`ÿ­,£ÜŒUýmâ®ÅXÿš<Ù¢y'M›ÌžrÔm4­&ÙyMw}:A ¿ÈB¿~Oþ~ÿÏáÿ-<€gÑ?&,§ó–®•QtyZi¨Ýï}YiþDaöe¡®*üEüûÿœîüåÿœŠõ¬<ëæ ,ôª?Cé5´²âeÕI’aß÷ï&ý)о=Å]Š»v*ìUØ«±Wb¯¥?"ÿç/?6?çæ_ùUþc¹¶ÓCó“K¹?Y°“ƶòUT·vƒÿ•°Å_¶?óùß(ù“ÐÑç!4i<»|ÔVÕ4µ’êÀªÏÅqë²ý`ûâ¯Ø þdùWóOJÍ?—ÍŽ·¥I@.,.d Jñn$”qÝŒ§bÅY¶*ìUüÏÏë<õúgó?Ë—ðÉÎ B7N ý‰ïçn`û˜àˆüˆÅ_Œ˜«±Wb¯×-;þ=ùÙ¦ZÁ§A ù8ÅoD¥¬µHE +Kð+Aኣ?èµÿõ`ògý ê?ö_Š»þ‹WùßÿV&Ò£ÿeø«¿èµÿõ`ògý ê?ö_мƒóïþ~ù§ÿ9äM[òsκG–mt]cê¾¼Ú}­ìw õk˜îSƒKy* ¼J¨ß PÐ…_1ÿÎ4ÎIù›þq_ÍÏù›ù{i¦Þj’Xͧ˜õH¦–NgGcÆan@Æ(yӮDz¯lÿœ ÿŸ…þbÿÎYùVÏòçóLòý–›e©ÅªÇ&•mwÆh¡šVi®¦^fb@Pjâ¥AUÿÎ*ÿÎqùïþq×ZÓ¿-týú-v[inN¯Ì¥Mºº§§è\@"C^A»RÕ}gÿE«üïÿ«“?éQÿ²üUßôZ¿Îÿú°y3þuû/Å]ÿE«üïÿ«“?éQÿ²üUßôZ¿Îÿú°y3þuû/Å_˜ß›Ÿ™Ú¯ç?œuŸÍ?4Åm­®]½åÌVhé»)»ÈÁvÛ“±÷ÂM  ~–éßóùïÎÍ2Ö : ÉÆ+x’%-e¨’B(QZ_Z FÑjÿ;ÿêÁäÏúAÔì¿wý¯ó¿þ¬Lÿ¤GþËñWÑjÿ;ÿêÁäÏúAÔì¿yOçüý/ó_óóÉ¿å›ô,ZèúÔqGq5…¥ê\(Šd˜pio%AV@ Q¶­(hAE¿5ð%Ø«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]вÝ5ùÛ§ˆ¨û³Ù½•Ïâèáåqù¾Êuù…I<³‡›TçF\’¦i§ÚôÛ,Öå›*Š[{ åÂøçèäù82Œ§È2Ï/Xëj“êÞU±’jX‹ócEIú0”âæŒ0ï’_Æï£ü¥ùlY/¼û¨4î(~­jh£ØÈE~aT{6cÏ4'U—µ@Û¯7ÔþZ}ÉÐ}KËpYÄEÓ_‰©üÎjÌ}ØœÁɆY>­Ýlõ{’ÉÆ¿åþ9Ê0ñþ5ÿ/ñÇò‹â;ükþ_ãåÄwø×ü¿ÇÊ/ˆïñ¯ùŽ?”_'Öõ]3̶ÇN×íá¼¶?±2øŠô>ã|”4æÆÉŽcaò÷›ÿ ô‹¶{ï#Þ>Ÿ9ÜA3‹äí¨ùóÌìy¤9»=©ÒbÃæÏ3è:ÿ“ا™l™­ëAqû%øwðèš÷‘Cír±‹!…ç„»'b®Å_RÎ1ÿÎ^yçþq2ëXÔ?+cÓd—[ŽÞ+¯Ò6ï0 n]“‡ #¡«šÖ½±W×_ôY/Ï¿ùfòÏýçÿ²œUßôY/Ï¿ùfòÏýçÿ²œUßôY/Ï¿ùfòÏýçÿ²œUßôY/Ï¿ùfòÏýçÿ²œUùÝùÇù±­þyyËUüÖó¢Û¦µ¬I·+iŽÑı ÌÄ(:±ß}·ùkÿ?Süçü«ò®ùoåˆ<¾ÚN‡e …©¸±™å1B¡W› Ԡ܀>X«àï7yÿSó§œ5?Í-`B5[V¹ÖnHVqq;\8U$œØÐr&›W¾*ý'ÿ¢É~}ÿË7–î?ý”â®ÿ¢É~}ÿË7–î?ý”â®ÿ¢É~}ÿË7–î?ý”â®ÿ¢É~}ÿË7–î?ý”â¯ÿœÿŸŠ~jÎJyF_ËÌHtTÑ幂霱KÎJÑšg߇y?üã7ü凿ç5=OÌ?•ñéÒ]jÖÑÚÜ F™BFüÇ’GC_sоÅÿ¢É~}ÿË7–î?ý”â®ÿ¢É~}ÿË7–î?ý”â®ÿ¢É~}ÿË7–î?ý”â®ÿ¢É~}ÿË7–î?ý”â¯?><|Åÿ9ç+ÏÍo?­¢kWÑÛÅ*ÙDÑCÆÞ%‰(¬ÎA⢿\U㘫±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUت"Òsm-â›é#Î7ù_Ë…o|Êï¬_}£êÕ! þ 5oöLAþQœö·ÚÙ¶Çè\þ¨)™/¦,ï­ôèRËOŽ8-ãHâPˆ£À( ç'ŒÌÜ·>mt‰ý7ïðúoßiߦýñðúoßiߦýñð˜œü“åŸ?!_2ØÅ,ô¢Ü'Á2øQÖ„Ó°j¯¶gèõ™´‡÷r ws&@ù3ÍóŽ:ç–Ýõ/ÊýLÍy}RvçÚ§÷oþÈ&u:oh1æôê#^cqúÇÚψK›Æ®<ã¨hW¢<ù¦Íet:·µ÷âÝGº’<m㤎Qņ@Çãv¹`¾Hÿ­YêÑ™´éRUïÄî>c¨úr³ c5!N,àcÍŠj6vÌŒri!ƒÝÃéµs2&ÚËÎ|÷qÆ-Gí¹øO㛎ɅÈËËïþÇ™ö›-B0ï7òþ×™fõã]Š»~‰~NÏο8?#|›¥~Tù. ô]9"¶k»)d˜¬’´§›,ê ä碱W¦Ñd¿>ÿå›Ë?÷ŸþÊqWÑd¿>ÿå›Ë?÷ŸþÊqWÑd¿>ÿå›Ë?÷ŸþÊqT«^ÿŸ¼þyùL½òö¡oå±km5¬¥4ùƒp™ 7n Ûb¯ÎßË_?ê•~jÑÿ2<°!m[C½†þÔ\!xŒ°°eæ ©+Q¸|ñWÜßšßóôÎOÎ?(êÿ–mƒ@]Z¶6·FÚÆhåH?Ø·u8«å¯ùÇ_ùȯ5Î0ù©ÿ2?-ÒÉõg²šÀ‹øZh½)™¾t<ª‚†¾;b¯¹¿è²_ŸòÍåŸû‡Oÿe8«¿è²_ŸòÍåŸû‡Oÿe8«¿è²_ŸòÍåŸû‡Oÿe8«¿è²_ŸòÍåŸû‡Oÿe8«âOùÉ?ùÉ7ÎTyšÓó ó5,cÕ,ôØ´¸ÆŸ áÒ̵Wy nS=MzSm·Uô'äüü·ósþqûÉ:_å‘ ПCÒ>³õv¼²–YÖn$¹~N³ ?­O„Qh=ñW«ÿÑd¿>ÿå›Ë?÷ŸþÊqWÑd¿>ÿå›Ë?÷ŸþÊqWÑd¿>ÿå›Ë?÷ŸþÊqT%ÿüþóßQµ›O¸¶ò×¥Çt8«±WòÕÿ?m^×óÆÞÃP½º—JŸ@±½³µ’iy<Ð9Š2ÅS“BKq S¹©Üªü˜Å]Š»v*ìUØ«±Wb®Å]Š»Gišeæµw‘£[Íws"ý¼m$²ÈæŠˆŠ 3°TœUúKÿ8KùSùƒù?ÿ9?ä?Ëß7%÷—µmAN¥w`—9Ím'¹ܤnıÑ>à.œª˜«úÉÅ]Š¿ŸùøŸžŸÿç"<õ©+ò†ÃP]"5ôtIjà|äØÿ”N*ø§v*ìUý€ywÌ¿ó‡ë¤Ø-î¡ùN.¬ ’}Ÿ>—*šÖ½k½r\E‡‡àœÿ‰ÿçêáùIÿ#ôë_=Áßâùßú¸~RÈýúãÄWÃp|Õÿ9‰¯ÿÎ/]~KùÎßòÚ÷òÖO3¾–âÁ4™´f½2óZzê¥~Æø8ŠDèþ^ð2~ˆϱï.ì?7çŸóÖm-þ½ Þd{E³úÁ–ºGêS—Ú§*w €y¾àÿŸ¦kz‡åNäב§óóE£N¾Y—L{±iõ+ÀåÅ¡2z^¡•~|+¿I% ry§üúUü–Ó´Ÿ:¯üä%Ï“à¸{­7ôxóDšz9@“ú¾‡×$W>W{b $Äo×Oñ?üáÏý\?)?ä~ýpñ>{ƒ¿Äÿó‡?õpü¤ÿ‘úõLj¯‡àïñ?üáÏý\?)?ä~ýqâ+áǸ?šùÏ›¿'_~|ù¶çò†M&_)3i¿R} ÀÖšm°—Ñ6ÿº?½Ëíò¯Å\dm`(|þ÷ǹoëÿË~dÿœ?M&Á.ïÿ)ÄâÖ yôÁ‚ ò©­kÖ¸x‹ wëüOÿ8sÿWÊOù \@¾ü³“̡ޮžº\Ú+^ƒ ŸSÔ¯Ùáñxb$Q(Èw}ïå›"ØìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]в-¹+ÅàÀýÿíg¦{ žñÏqý0¯÷®¤ugút3¾Ôæ“1Kvú¼¾‘!ý6âGPi¶YN¸ÏÔ/½<ò^‹.™^qÖô£©hîí”±!$R+ÈJî(Q»Œ½ÚûC/âÇ.}ãñÝÉõ¦‰ç›;»d]¤p Dª€ðâ:}fPÇðÚ>LrõüùßÅ9ÿIüߎ8ü%ßâÉ?›ñÇ Â]þ,“ù¿| ¼%ßâÉ?›ñÇ Â]þ,“ù¿| ¼%ßâÉ?›ñÇ Â]þ,“ù¿| ¼%ßâÉ?›ñÇ Â]þ,“ù¿| ¼%¨yÞ8ZMBEA ¿/jwùbqÄ6âÃ<†¢7|¯çM5|Ô.uÿ+hÿSÓìÔ½ÅÊüw|5 NʵmêsuÑí{;$°T2ψžCöó?kµŒM1,äRjzš~ŽNfI3LgQƒ®@‡7 Ø´}(J3üsöÏ?‡¤áþt€ÿ}ú¶›rÅ3ÈÜ÷b®Å_¬ßóê¿3~OùoUó›ÿÎDÏå¸mæµÓFþ"KfRêóú¾Ö¡^\}«Š¿eÿåiÎÿËwåŸü‰ÒÿæŒUßò´¿ç å»òÏþDéóF*ïùZ_ó†?òÝùgÿ"t¿ù£;?óð_Ⱥççnµ©~JɤËå7µÓ…³h« Ù—[Xļ %yוÚ­wÅ_b¯êþq{óþqGNü£òU‡æ çåúy– Å5Ô"ÓиPLdBüëö¹o^¸«ùòüã½òýßçGšµ+µ›yV_8jrص¨Ahl[P‘¢1ø=/Jœh8ð¥6Å_Ô/ü­/ùÃùnü³ÿ‘:_üÑŠ»þV—üáü·~YÿÈ/þhÅ]ÿ+KþpÇþ[¿,ÿäN—ÿ4b¯?ç=|ýÿ8Ë­~Dù¯Lüœ»ò4¾p—ôgÔSGŠÁoOJÙ¥ôŒ*û ü¨~Ç*í\Uüàâ¯Ôÿùõ—™?)|·æŸ5Oÿ97—¡Ó¥Ó-ÖÄù…-š3(˜–ô¾°åÇ­7¦*ý®ÿ•¥ÿ8cÿ-ß–ò'Kÿš1WÊÒÿœ1ÿ–ïË?ù¥ÿÍ«¿åiÎÿËwåŸü‰ÒÿæŒUøÿ?-×?.<Áù¹ÿä,º,ÞZ’3h+Úý`K70D':åÞ”®*üøÅ]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»}å–úí¼çrcP~ccøç!¬Èó}7³²x¸c/!úž¡¦ÛtÍfI;„Ÿã’+f™cge` ÔTTwèrÝEÍÒóz'åíÞ—ùW¨®‘ù“åÿ«êLÅ¡ÔLÊW±Qñ-~ÜU=ˆï˜øÏ],±Ö<¿oÂNQß“ìû?3Á¨B·–3$Ð8ªº0e?HÎFzcDSOé¿|€´ïÓ~øø Ný7ïÓ~øø Ný7ïÓ~øø Ný7ïÓ~øø Ný7ò¯ÌßÌ_+éV/aæ¨bÔœŠ­Ÿ‘«ØšìŸëTå®lû;³óNWŒ˜ùòþÔˆ¾ó¨é×VšàÓdÑlõI_ê0úŽ\*•œ©OŒQˆ¿gaž ð˜0âã1£óøtøudjž©[uÍn9:¢}©ÛÒ¹›ŽMD<Îóó¾HHãù’Oê¦u• …÷—†ö/aá÷þ Í›Ï;v*þ•¿ç ¿0?ç´É/(鿚÷~CÍ‘ZÜ õÕ¢°kÀæêR¾©•K×Zr?f±WÔÿò´¿ç å»òÏþDéóF*ïùZ_ó†?òÝùgÿ"t¿ù£IüÃùŸÿ8q&•|–Wß–¦á­fp‡LåÌ¡ãÆ‰Zצ*þF±W¼Î/^ùNüÜòUÿæ Y§–¡×l_Qm@!µâQê„•Nû\¶§\Uûíÿ9{ù‡ÿ8±ª~MùËOü³¼ò ži—LuÓ×L‹OfnkODÆ¡ùR¿g|Uù1ÿ>Ò×?.<¿ù¹=ÿçÔº,>Z:ê+kËZý`Ëà§:ãÞ•¦*ýöÿ•¥ÿ8cÿ-ß–ò'Kÿš1WÊÒÿœ1ÿ–ïË?ù¥ÿÍ«¿åiÎÿËwåŸü‰ÒÿæŒUø£ÿ?Mó'å/™<ÓåYÿç&òôÚtZeÂß/%²Æ%3¾¯ÕÀ¸ô®ôÅ_–«ú>ÿœ ó÷üã.‹ùåM3óŽïÈÑyÂ/Ò^Mb+½µ+–‹Õ3)îŠq©ûiµ1W×ÿò´¿ç å»òÏþDéóF*ïùZ_ó†?òÝùgÿ"t¿ù£wü­/ùÃùnü³ÿ‘:_üÑŠ¿‘¯0¼2j·ÏeÄÛµÔÆ.ãÀ¹ãÆ›R1TŸv*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯ÿÓüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«ûÿœmó·ü¬ÊŸ%ù埜ڞ§O9­~mÐL+í aôb¯lÅ_Î?üþûˆ×Î^Eóo í"úÇŸÔîJ}YññWb®Å]Š»v*ìUØ«±Wb¯ÐùÅù÷æ‡üä·ÕüÇqòÇ’eâÿ¥õ(˜4ñžö–ÿ ÍQÑÉHi Å_ÑÿüãOüáGåüâÝ¢?ôÁuæ&…Æ»~ké `@!CZˆ "œù‘Ë~}þ\Ÿñ÷üüWͺ´_¼ƒËZ#ð?ÉéØZY¿CþýÇÓ㊿n±T·YÕ­´>ï\Ô›…”ÜÌßËJ]ÐÅ_Á¿›üÉsç-{Tó~¥þöj·×7Óo_Þ\JÒ6ý÷cбÜUØ«±Wìn›ÿ>ZüÔÔí-õ(|Óå…Žâ$•C=í@u ¥¿]ò[0¹y|ÿcñË"ÍØ«±Wb¯£ççµïùÊ¿8ÉùcäËë;PŽÂ}@ͨD\!tB¿ºGnDÈ)µ6;á7Ñîó•Ÿóîÿ;Î$ùJÏóÎúÖ©XÞê°é)œ×Q,°M8cêÅñ CZ‘·Z&/«ÿœIÿœówüæ ¦¹©yVÒ´Èô)m¢œjM8.nUÙJzQɰôÍkN£“}ÏüåŸü♿çµm#ËžyÔ´íJ}bÖ[¸_N3EøÞ¬qš“Ò€âT_WÉxìUØ«±Wìn™ÿ>ZüÕÔìíõ(üÑå…Kˆ£˜){Ú€êþï‡f|¾±ÿDLü×ÿ©«Êÿðw¿öO‡e¹wŸìwý3ó_þ¦¯+ÿÁÞÿÙ>;-˸|ÿc¿è‰Ÿšÿõ5y_þ÷þÉñÙn]ÃçûIùíÿ>­üÃü‚ò&³ù½æo0èšf‹RÍ›]œK2Bs…Wbàš°Ú¸Ð^"9þ>ÇæE›±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»NôÿIôÏí)ûÆv^ÄgàÔ˜:'æ?u¸º±é·­éÑtÏZƒ4™å„ÇЊe€:¬³§Ößó6cQò~£¦L¡ý ÷ª‘QÆHSåU9‡’|Ÿ·Eäߥ'ó_åÕ¾Ÿp׺0ú³Ô’‹²}·Ñ·¶l1zƒ¬‡hHzg¸ûXˆŠðd¼rÝÛ8 “O«Élæ€QÇPÛ“8°¥ú{ü¬x™~Uß§¿Êlj*ïÓßåcÄ¿•wéïò±â_Ê»ô÷ùXñ/åWÇ­´¬#Ьç`äã㦭Êt#¼ ƒ‹‹ß%»‹Å‰Þ‡ädÕîãY&a]£©ãôÿAøäd(Ya=y§ÞoBüá°‹Cü¼¼¶¶E‰%{xPqzªä)ÙNkøø¥NOcƒ,ÂG~gì|dÖÞ•´QøF¿«2ièxîDù°íJ.¹ì°ÉäÞf…¬³DÍG-"¨OIqéšÖF*ïùËùÃ?3ÿÎÝèzoõM7S}v+©`:qšˆ-š5`þª&çÔ¥zUñî*ìUØ«±Wê÷åGüú?óósɺæ~‹æ_/ÛXkÚ}¾¡7ïÕDª¿Yyw¡#ß~qyÛòî÷ÈÞxÕÿ)µ á›QÑõ«­Yâåè¼Ö×-nε¸ZŠ€iÔW~¢y“þ|Íùå&ÿÌw~iòÜiö³ÝȈo92Â…ÈZÀHTâ¯Ç¬UØ«±Wb¯­ç¿ç<Éÿ9}«jþ\òN§§i“èö±]Ìú‰›‹¬Àô‘ÍAñ}ÓÿDKüÓÿ©³Ë?}ïýPÅ]ÿDKüÓÿ©³Ë?}ïýPÅ]ÿDKüÓÿ©³Ë?}ïýPÅ]ÿDKüÓÿ©³Ë?}ïýPÅ_šßó‘ÿš¿üãOžï¿(¼×yi©XEm+Ïeêz,.!YTQQªj:⯠Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]нãòÒO¬iþ‘묿A£åûb<9/¼~ǽös/ î$~ŸÒ÷m2™Ïä/D?0ìùèb`?ºž6ûÁ_ã“ìùþò»ÁrôüßzÙ躞<¡¤K­[ÇuÖŸi1YhÏ ’A©*§pjð»ôßùXø ¯¥-Á"ZiÛç‚XÄy±;%׃XÕɱÒÏ¢§f–´§Óý7Ão-Øq[-òGå&‘¤Nº­ôb÷Q¯/ZaP­âªj÷5oq˜ºÞÕžAÂ6Á¼wþrTýcξ[ÑH­–âŸëÌÕÿ“Y¶öwm>I÷šû?j?„°}N¹—Œ¸<ïT‡®gc-D>Tó$ÿXÔû‡øgm¢‡8/¿wÌûW/‰žgξ[~„“2{±Wb¯ÔOÈŸùõWæçç‘4oÍß.y‹A³Óu¨¤–.Í׬‚9ž"„,µ% رWÁ?œß•º‡äŸõ¿Ê~â ½CCºkI§¶åé; S˜V¦ýÀÅ^cŠ»v*ôÊË»ßÍÏ9h_–,ðÛ_ëÚ…¾Ÿ×½$yÜ"³ñ ÜA;Ð튿D?9¿çÓ¿˜Ÿ’žIÖÿ5µÿ1èz~‡j×sAlnýWP@¢s…V»÷#|yÿ8¹ÿ8Ó®ÿÎVyÊOË'_Ùi×ñéóêkÿSÒá ¢ýÒ;r&AM©±ß{¯üåoüû¿ÎŸó‰>R²üÇó¦·£êV7º¬:JC§›Qd– § }X‘x…Þµ#n¸«óóv*ìUØ«ôßþqëþ}qçïùÈÏËý#ó—ÊþaЬtÍgë^½áºõ“ê×RÛ7/N]Ú"Eü$W}±W³ÿÑÿ4ÿêlòÏß{ÿT1WÑÿ4ÿêlòÏß{ÿT1WÑÿ4ÿêlòÏß{ÿT1T¥ÿ>YüÑÓ-.5)|Õå¦KxžV ojB)b`ë¶*ünÅ]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«ÿÔüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«úÊÿŸIùÜy·þqãKÒùËåÝORÒž¦§y~¶£äå@ö«ôË~Ïï|º.|•äo6•«Yk–!¨6vâB+JïõoÓ¡ì«ùÄÅ]Š»v*ìUØ«±Wb¯¡ÿ ?ç?2ç&u?Ðÿ•:4—VÑ8[­JzÃak_÷ìäq­7¼¥a^(ÔÅ_Ñüâ¿üúÇòßò$Ûù¯óGç?9GÆE–î 4ûYãжj‡e=$˜±¨ ‰Å_¨ TP €«x«ñþ}ê¿ç(?>¿3@/½õÖŸ†¤ˆ®5) b»T´r§Ã° |*¿n1WÉ?óþz—ó~K£M¦ÄGQ&¢Ëf¤{ƒ5}©^Ø«ø¹Å]Š»v*ýrÓ¿çóßše¬t“ŒVñ$JZËQ$„P¢´¿´«ò7v*ìUØ«è?ùÆùÉ?3Î+ù¹ÿ3/m4ÛÍRK´ó©ÒÁéÌèìxÃ,-ÈÅ:uØöUíŸó”óð¿Ì_ùË?*Ùþ\þciž_²Ólµ8µXäÒ­®â˜Í3BªÍ5ÔËÃŒÌH BüT¨*±¿ùÅ_ùÎ?=ÿÎ ÚëZw実¢_E®Ëm-ÉÕ๔©·WTôý ˆHkÈ7jSº¬oþrŸþrïÎ?ó—Z®•æ?Ì›&ÆçGµ’ÒÒa¸‰$~d¸žyÉ5éB¢±WË«±Wb®Å_®Zwüþ{ó³LµƒNƒAòqŠÞ$‰KYj$ŠV—àVƒÃFÑjÿ;ÿêÁäÏúAÔì¿wý¯ó¿þ¬Lÿ¤GþËñWÑjÿ;ÿêÁäÏúAÔì¿yWçwüý3ó[óïÉ¿åœ4+ÛhúÔqEq-…¥ê\(Šd˜pi/$@y ¨ÛW¾øA¤oÍl v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb©†•'¥y žœÀûöþ9·ì þ¯¿¤úoOéjÏ{¦š3݃Ëf/@ÓS¦ZNbúÿþq/ZO3èí¿ûÍ2­*žÞëß5} xH>÷_ÚƒŠ1>_©ë¾sÐ>ßÃã™\Ï=’/šµ»¶rÑÕYNÄfמí˜'Ð¥vú¾¨ÓJó¤Œì·( Pøšn>ŠL£!%ÎÅ‚XÏ#ðJ¼Ùù)­éöŸâ%¿é­!”¸6ôi•|x®Î=ÓòFb~`Ggo¥ÖÃ!á˜á?gìø¾x}q£c•VRAbìrÞ'oùU¿§ÿÊÃÄ¿”wéÿò±â_Ê=ßÈ¿“ždól\ÔÐéZ/XºYÖ•ª!¡"Ÿ´ÜV›‚ze2Ô€hnë5z¬x6žàÊîo|½åªé^OO®\†KÇ<>͵ØÑ{ï™8‰æé²âÉ›|†‡pü~ÖôÈ%»q,䳜Éi {ò†‰R¤ŒÂÔåq -"ÿœ£‹ê^OÓ´õÙ®uo˜Ž'þ,3_¥—Ϲßv@©“äøÇPˆ(â:LÚe†VÀu$ë•—m„¼;Ìrs¾uü+üsÆ}°ÔxºÉæ²þò^ŸF*"Î]Êv*ìUõŸüâ¯üæG?çnµ­GòÖÃG¾—]ŠÚ+‘«Ãq(QnÎÉéúÀA&C^E»RÕwüåWüæG?ç/®´]Gó*ÃG±—BŠæ+a¤CqapÈÏêzóÎI1N%{Ö½•|™Š»v*ìUú‡ù_ÿ?hüÞü¥òŽ‹ùeåÍÊ“éz Œ}´—vwí;GS#%ê)båQG€«óãÎ_˜züéªþkêÑ[Ç«ëÅηM)q+p¡Ø«±Wé_äŸüý;ó_òÉGå'”4+Üèú,REo-õ¥ëÜ0’W”óhï#By9ˆ»S¾ø«áÏÍÿÍ Wó«ÎZÏæ§šaµ·ÕµË£ws’:@®@dy »»|Uæø«±Wb¬óò¿óQü¥óv‹ù›åÈ­çÕ4è5 hîÕÚ’¢EFF*HÜ+©ð#}÷ù½ÿ?[üÚüéòn³ùWæÊÖúN¹jÖ—2ÙZ_$ꄃXÚKÙ»£lUò_üãGü䟙¿çüÜÿ™¿—¶šmæ©%ŒÚyTŠi`ôætv>ƒäáÄO²ÔAÔ©¥oÈ­†*üÅ]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«ÿÕüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«úÿŸyâ±yûòÚâCð¶«[GÛâÁpß„ý¡Š¿~1Wå§üþ ËÃZÿœ}—R Ñö™{¿n~¥®ÛÿÅþÿÇ)Ø«±Wb®Å]Š»f>Cü¾ó/憵oäÏËÍ*ïXÖî"µ³‰¤r*cM•¿± £v b¯ÞùÅùó­ž›õo8ÿÎRÝ-ÝÐ+"ysO˜ú+ßÕÊP¹ìRþ-piŠ¿q|¯å]É:U¯•|Ÿam¥èöQˆ­­,âXa‰GeD ÷>'s¾*Ÿâ®ÅP×—qX[Ë}txà m#+EQS°ö«ñ_þ|»g.« þd~dÝ-'Öµûh¤=Ihb’r Ú´7GïÅ_¶8«òþ;ç‘ ~Mé>K…éq¯ëðsOæ·³†I_î”Ê¿—üUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb­«!—b FJ216:)úGq4i*ôe >‘ŸCi²ŒÐŒÇPÌ[Èj !èšhé™aÓæ}wÿ8rày÷SÒßìÝéR•.’Dß«–j;ghæ>ââj‡1øï}ç=íü>9…¤Ìé2Eòw›ô33Ÿ/q¤ÛÀ5Ý7ím—È;].f7åÏ?ù‡òÎóô‡–.JF[”–ÒUà“ýdñÿ(Q¼agÀ2 .î8áœT¾}_CÚj“ßó”|t¯:‘äÏ>H8Ç|¥Vßµ]¸¤•4ødá'ìÇ!Í.Q›I¼}QîoÅÚ=ãëwwêømäòýSþ}ëùÅgæHü¯§ZÚÞi“rtÖVp–‹=e÷¨Û€#¿aYƒÛÂcdïÝ×õ;Hö¶#±îëúž±qåÉÿùÄïÜë—+ç_ÌX…} a¶”v+ñ$T=ߜߴª¹Yskw˜ýÿ¯îu¹rfÖòôGí?¯îx?7|Ëù«r_[”A§ò¬v6õX”våÝÛ݉ßì…é›>š8¹|ÜËÃN=<û×èšM³:!Ôê²½¯ËI•×m°ä—t²—}AäýìmášVfèEáßó˜ô†O+è˱ÿJdz4J¿©±ì£Äd}ߥÝè d|ŸjC®nK™…çúë•m…ó¥ôßX¸–~ÌìGÊ»gÏÝ£¨üÆyäï‘? Ûì{ QáˆH\Âlv*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]гßËKϪëÐ!4YÕâ?H¨ü@ÍgkããÂ|¨»¯gòøz€;Á§ï³´µéœ&GÑÃ.¿µúÞ“{mÝí¥Qó(i˜ØåÃ0|ÇÞßo©ÿçäý#ùtuú¥õÌxY|?Ë÷þËûR85Wß~ñú2ì^¥­iývÍn ‹òMkOë¶mðdm‰y&µ§õÛ6ør7D²o%~zëžA¢µh×XЙLokrjʇbÈ;Sn,i°®ck{ ¯ÕD¹Øïó¤Qa<{‹-Ô¿&ü‡ùçºßä–£“®…/.sð%{Ñ7dåGÎ>Ô\¯jj{4ˆj£Å“¯¯Æ‹W,;LXïy÷’¿çüáª]O?Ÿž//h¶L~±s<‘»2¦ìc ÜxÓöÙ•GQÊ„fËYí&qã‘äý¿¨oîlÉ®ˆúw/KŸó[È¿“öòyoòBÅ5 HN}bæ¬ø†ÙŸ~Ê.ëË4Dzu¢xõráHÆß—¹€Å<›Ïo'ˆÝë:§›o­æ+™.®[öœì£ÁTP(ö ÜC 4ÑáÆ(~>n@ˆŽÁ›èö=6ÌÙÉz®cÓlÕf›Y/UÑìzmš¬Ói%ùßæ‡Ÿæ—™oëQÉo_xÙ"ü8þ”phñŽú?;?¥œþ–j‹×,Æ\Y<7ó*ëêZ-ä€ÐºÇ¿2þæó²¡Ç–??–î›¶òøzyñ_=Ÿ$gpù«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_ÿÖüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«ôûþ}çƒå?ùÈ;- äá˜ôGL`zâû[jïÄ}ª_Õö*ø·þ~%åÿñ7üã—æÇ—§¦Å{MÿãÊê+šìGOJ¿¬¶*þ5qWb®Å]Š»v*þ°çÒ>YÒ4ÏùÇý'Ìzu…¬¶§{¨ývî8Qg¸ônåHIJÉÂ(¢†'ˆéŠ¿NñWb®Å]мOþrWÌáOÊO=ù7²òƱzògåÔoÉt­çRu`÷óú`~6 ÐïC_ÚÅ_ˆØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»eú?åïš|ãßùÇ@Ðõ;íJ§é FÚÎimmk¸õæE1Ç^ÜØb¬Cv*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯qòmǯa=T?ìMážßì¶£ÆÑÀ÷ô¤öSÌvŒ8f^³¦·LèàÌQÿÎ(^ýKó{B…Í"½ŠêÝýù[KÄu¶«þÝ3YÛQ¼=Ô~ÐâÈ^3ï~¦ùÏ@ûŽs:LΫ$_%ùÏ@ûŽtº\ÎH¾[ó.bffî2â 1O„¼G]Ó~ÖÙ  ÒæxÆ»¦ý­³Aé4¹Ÿ¥¿•^ó¯üâ?š¥MZùu ;É-lîÄž¬z–ËéÆõ䨘R @Î[S¦‰ÖGa]~×8‰ÕGaDY÷îüÉѬKïRÄÔ“Ôœê"ÝNW¯èšM²ø‡žÕe{…§*ËÆÏ=¨Éo¢üŸ¢}³[ªÊÓ¾©ò~‡övÎwU™Ì„_ÿÎh\óþ™¤¡øm4˜‹y%cÿ Ç6}†/=äýÁÛà8ËãIºæä¹8CÌüÇqõkYçU6üsYÚºËàžNè’=õ·Úîôpâož3ç÷¯v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wbª°A%Ô‰ml$Ò0DD™™nI=*Èüßä1þ_j-åÏ?i†‡«*,g©ÚËi8GÝXÇ2«Q»PöÅX¾*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*™è—¿£µ [úÐC4n~A… §QÄx.F“/…’3î ý¯¾t³Ó<ß#ë1z6š¯ÜCò9ƒ“fؽëþpŽO[A󆯝i{ „xz¨SþefƒÛAYa>ø‘ò7ú[³ó§5­?®ÙÎaÈÀ’ëZ]³o‡#h/$Ö´þ»fÛFØ—’kZ]³o‡#tKÌnZïH¹SÒ¦’ÚòйGF ²Ðƒòͤ*c†BÁè[6;Û_óš:¥üÑy[L[™…ŬÒÏvÉ"ú\YÖ´b*hOJšg+ì°ä• {†î¿³â—Èš=M³¢Í7<—ªèö=6ÍViµõ]Ǧ٩Í6¢^«£ØôÛ5Y¦ÔKÕ4{›f«4Ú‰~UèW_¥µß1ëÄ×ë7®àøó’G;ïâ;ç¨f‡;‡ÜmËÈڡ냋'ÌW¾•µ43LXû„_êÃ:žÀÇs2îö<§µxqÆ=çîµóŽuoìUØ«±Wb®Å]Š»v*ìUØ«±Wb®ÅYo“|ƒæÌkçп/t]K^Ô£…®×K³šîe…VÇ »”"€°Üb¬L‚¤« ±kv*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«ÿ×üÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«Þ?ç¼ò-¿7|‘ç~a!°×ô÷¸bh>®ó¬sŠö¬L½|UýÂb¯#üÿòçø¿òÃΞT Yµ/.jöj©å5¤ˆ(&µ;P^˜«ø_Å]Š»v*ìUØ«úÝÿŸOÿë6ùsþcuúŽ—~â®Å]Š»|9ÿ?$óòÏüãžïC÷–¶*+Bß[½†q_…ØŸ`M 1Tgüû£Ë¿áùÇ éÄeÓç½5'ë·s\ƒ¿´›{{b¯µñWñíÿ?2ó·øßþr3Î3Dü­t¹mt˜EkÇê–Ѥ£þGz‡éÅ_b®Å]Š»~Øù#þ}uùqq¤y ßó#ó&ëNóæŸõí'O¶ÓCG# hîe–¯¢’¯&vŸìÓÌM¿)?<ÿ+.?$|ÿæÊkë´¾—A¿–ÏëQ¡A2©ª?OÊA+Vâj95*C'”â¯ÐùÁ¯ùÿ+ÿÎRi¾zóæ˜îü»¦ù2ÞÂîY­ I†tºy]ÃoHÖÚ£ˆ$Ôûa7Ñÿ9{ÿ8Wå_È!ù[óÇòŸÎy§Êžg¹6°4öW}ãyT5ÝHVEe4?? T_WçN£tÛÔîíô؈W¸•"RÝv §mñWî©ÿŸH~[Cæ¿%î4.ÇæTÚ7é…²Pô¸ÃëΞŸª¥xú¼ö®;—᧘4i¼¹ª_yzñ‘ç°¹šÖF޼KBå Z€hHÚ bE$”`KôËþq£òCZó·üãoæ—æV™çmoDÒ´ssõ­ÅÊÙjÞÒ9‡Ö!^\¸·QCQ¶H0™!ù›‘fìUûCùuÿ>Úüª×<•ùyç/Ì/Ì-CEÖ0íìÆ›d¶)"Éyq¿¡iNB…ø|–Ì ßìý¯ÍoùÉÏÉ ?ç3|Áù1> º¡Ñe· x±½Xîm£¹Œ”%¸°I@aÈŽ@Б€ŠeoÀ—Úóƒ¿ó‰?ô8w¼ò=Ö³úNÓ4æÔ®§H=yD©Ž5,ª /RÌ~>Ëb¯gÿœŽÿœòå÷äý·üäÇä_žæó_—$ÔSOqqb`rvˆ´lx°)"ed£P”biˆ¾¯ÌŒ Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±W©þ_ÜÖmÏì8o¡‡ög©û¨âÃ<Í•ÿ¦ñÒè»ZƒäöÍ6N™ß™Í¹~Ijÿ¡2ü›©“DÍ”nGòI2#±۾bvœ8ðÌDýÎ4Ećô1"³¨ØçžésS®œ_'yÏ@ûŽtš\ÎH¾Kó–ƒBÄ é4¹­Âœ_9ëÚm93:AÌÒæxÆ»¦ý­³Aé4¹ŸVyCþq»ÍOûòýÍ?祷ôÍ&lw©‰òýiË—ü&'Ëõ¾@Ñ4þ›fê!·U•ì:&ŸÓl¾!çµY^ååMÔeb2çÂOÔ_Ry?Dûxg?ªÌäÂ/ª<Ÿ¢}¼3Õfs!äÏü寡õßÎz5ŽÊ+Ktöãm!ÔþÛ7‡ß\êû Vžû?iv‘Œ{ß+jRuÍ¡rp‡yêëÒ°tduOÆ¿Ã9lõŒç·‹ýëÑv\.~ç‹ç½#±Wb®Å_eÎÎ(Cÿ9kæÍWÊzž»þÓ´m&]Væåm~²ì©"FSš»ò,IÙh“P«Óÿç#¿ç üùaùM¦ÿÎGþNyûücå«í[ôU_M{:±ÈYÉø&V ‚µ·UùÍŠ»~íê_óè¯Ëí?Í–¿”RþkÜEç=CO—R³°}¥íãb­/!?!”‚ †ÛlUø—ço+\yÌZ¿’µ #šëGÔ.´ùdмí¥h™– $­E@4ê1V1оïÿœ?ÿœ<Ñ¿ç#t9~cyûÍ£Ê~Wòd0Myp¶MvåeYœ¨t⑬Dšf'`)º«ÿç0ç4?ùÇ//ù3óÈnÿygÎpÏ-¤ïbm,K«€]ÉWYFÄ#)벯ƒqVWä=>m[̺6•gs%œ÷Z¤1ÜÅöái&U-øžCq¸ëоÂÿŸˆþTkß“¿šÉå:ù¿Ró¶¥6gvuMP8GyQb¡’O…8T|_´vñUð–*úëþp§þqŽ×þrÏó_ÊÝCX“DŠ=.çQúÔVâቆH“‡t>¥k^Ý1WÒžóïß&ùòÌó¿”_˜Ÿâ­?Ë:”zf¡o&–ö¿¾k¨­dDs!<ãyŸƒ‹-hÕ*¿-qWb¯ØïËßùö'’µo,~^ëߘÿ™­£yƒó"ÊÞóGÓaÒevžÝ.+/ªdŽEäÌyT-@©Uù¯ÿ9 ù=qùù‹æÉûëÔÔdÐî„î8ÌbdxÖXß-Ä”uä¼›‹Ta¹Uã8«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯º¼“¨~Òì¯+¼F[ýn"¿ŽyÖ¿‡’Qî%õnÏÍâ⌻Àû·{—'LÔäÀ=³þpªð[ù¿ÍÞ[&‚hÅÀ_h§*Ð%ðï÷é=³…àÅ“¸×ÌÇ[sr÷Nµ§õÛ8œ9y&µ§õÛ6ø26‚ò]kOë¶m°äm‰y&µ§õÛ6ør7D¼“ZÓúí›|9A}_ÿ9mÖdò­7ãg8ÿ“YËû)“l¾ñú\MÖùÛG±é¶oóMÉ%êº=M³SšmD½SG±é¶j³MªEêº=M³U›#Q,æúOк=þ±Óê–“Ï_øÇoá˜&HǼó-|Ëò òåxéw7¬—,>…Uþ5Ï[ןXMÙ¹£uI:åxÃŒ_þrßzú¬@Õa‡—É3µìuŒË¼ýÏíF^,±pûÏì ÍëÌ»v*ìUú‰ÿ8ùÿ81ùuçOÊ=?þr+óßÏÓù_IÖ5I4«(m¬LÀJ’ÖÚ<“*2Âò«"rfôÖ­AÓ–*üìÿœ™üŸþqÃó3_ü—¼¿MMôY` x‘˜„±\ÛÇs%¸· T2ò` 1â¯Å_¡ÿóíÊM_ó—óCUò×–<߬ù*îÛËwW§QÐäôî$E»µˆÀÆ£÷ldGó"žØ«àMrÓêå‡6“и–>mÕ¸9>昪WŠ¿Pç?ç ?-¿4¿&5/ùÉ?Î:_yWGÒõi4ë—†Õg‰”ÄÆœ—’u]”ÓcÒ¸«Å¿ç6ÿçl?çuí ËËóyƒ@ó&˜5;‰mý •9RŽ ‚ ²°âw  ¥YWÄø«Ö"*æüïüÀò÷å5¥âiòk×ñÙýmÐÈ!V©gàäBƒEªÔÐQ¸Uúµç¿ùõçåžçÛË/Ì{­GΗº×µm>ëO lm乎7eãOY"~,†N´LUø™Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÐüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«`•!”ÐÁ«û«ü’ó¿ü¬¿Ëß*þaWÖôM;P“ÚK‹twÜ1 ü±W¦M \#A:«ÄêU•€! ƒ±b¯àŸÍšù_\Ôü³1&M:öâ͉ëX$d5Øxx Uâ®Å]Š»v*þ·çÓÿú;\ÿ˜Ý_þ£¥Å_£ø«±Wb®Å_”Ÿóøï1þ…ü„‡JV êþcӬʃÕR)îwµÿÉYÿ9ÿ€Í§ýAjØ«ó—úÄß’?óýC]b¯Æ UyOþ;šgüÆÛÿÉÅÅ_Õέÿ­×¦æ§û«Í’=G™÷þ€þX¿4ÿå4óý¶5úˆ|eÍqòæ‘fýºÿœ'ÿÖ0üòÿ[Rÿºl9(°Ÿ/ˆû߈¹nÅ_ÑÖ£ÿ(_üáÇý¶4ú‡‹%Ñçð?¡ùÿ?BÿÖœó×úÚ?ýÒ-1’×Äýï2,ß³ßóä¿üš~lÿÀdÿÔl«zÏÿ#ŸIÿÀ™ÿî¥>*ü`Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Vg䋟Fõá=+ô©þÓ¿°šŽ D¡üèý±?¨—[Úp¸_q{Î7Lõ^W4Ym¾ªÚE͆³÷–—1̽:¡ :ÔvðÇ,x…w¸¸£¹Oê"d‹S¶Dy$ŠÄQžMÂ]aŸ¼ç }¿‡Ç7Z\Î6H¾Jóžöþét™œ,‘|§æ½Äì@Û:3â!–«+Ù<¿¦zŒª[|!ÐgÉÄ_Jy?Dûf§U™‹ê'èclçuYœÈEõ'•t l3Ôå·2>?ú×é¿Ìß9ê€ÕN³{ü‘Îè¿ðª6ÏEìÈpa€þˆûœ£Qˆxv£?\Ì.V¼?Ï×\š aâÎPþ9æÞßj6Çß#öú^Ÿ²aV^užnv*ý~ÿŸ<Êoçïü.¿ê&UÞrÿäyùOÿ9¿äýö*üÅ]Š¿­ï=ÿëlùÿ5þ¥ÿQ3b¯æþrÿ&Ÿž?ð&Öê6\Uä«õûþpCÿY§þr/þØÑÔ%Ö*ïùÎÿýfŸùÇOûcKÿP–¸«òzå7ü§Yÿ¶ÖÿQ)Š¿G¿çò_ù>í¿ðÓ¿äýÎ*ü¡Å_«ßóæßüŸw?ø ê?ò~Û}}ÿ¬?ùÑÿ›ãþëZv*ü Å]Š¿¥ícû¯ùÂßù‚±ÿº5ž*ü€ÿŸÿëIyûþcm?ê Uñ*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«ëÉÝGëp½¼²F~“Ìij‹íÌ\9‰ïþÐú³™xôà4‘úKè}2~™ÎdB‘ÿ8»©~‹ü뺰SEÔ4é£ÿ»ŽcøÆs[í>?³Ä¿›!÷‘ú\‰ïê~£j&Bîy†9SŒY­iývÍ® ±/$Ö´þ»fßFØ—’ëZ]³m‡#lKÉ5­?®Ù·Á‘º%íŸ×?¥dÐ{úVÒ¿‡ôÍ'³ñðÆO2?KFŸkyžcÓlÙæ›i/UÑìzmš¬Ù‰z®cÓlÕf›Q/UÑìzmš¬Ój%'üö½埙ïIâ[Lž ÿÆuô½úóË;.³þ?-ÿB1ï ü£ò1ô¼½lç¬+Ÿø2àzž·|§á÷6f;¨ê“õÇq‹áÿ>ß}_¾›²Ééùæþ±žƒÙ˜ø0Äy_ÏwÌ{g/‰¨™î5òÙˆfs¬v*ìUØ«özoý`ÿ æÀOú‹¼Å^ÿ?’ÿÉ÷mÿ€Îÿ'îqWå*ý?ÿŸCëCYÛTÿˆ.*úþ/ýe/ùÉ_üÙšçýEi¸«ðv*þ‡µøáÿÎÿÌmü›³Å_œóôýiß<ÿÛ—þèöx«à Uúýÿ>TÿÉ߯ÿà}ÿu UùCæÏøîjóqÿ'cø«ö{òÓÿ‘Ïù…ÿ5·ýÔ´¼U ÿŸ²ÿå!ÿÀ2/ù—Š¿ 1WØó€úÐß—¿öÙþM¾*ý¾ò·ü§ßó˜ÿöÆÒî‰}Š¿˜UØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š¿ÿÑüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WõÍÿ>®óÐó—üã§—­§~W Åþ“3øªvš1òXeŒ}«œóð}M×òƒþq—H›ó7ó&@Ê-t£ËOµ*hZæé~ÓCÅ~Ì’ÄqWàŸüå×üá_çGå·?™úeœö^`ºŸRÔgÑç·Óî®æi £šŠõxú(•›ª¯1Wb®Å]Š»[¿óéÿýfß.Ìn¯ÿQÒâ¯ÑüUØ«±Wœþj~myKòOË·>üÏÕ`ÒtKQñM1%È%c‰¯$CÅ3 Ž*ü üÚó7æçüýŸWWüœÐaп*¼¹s-ÄŽ®Lb[¡"™¥A%dej,+ˆƒò•Ûá`«ï¯Ë_ùÏ‹ŸËV×òoþsk˯ùy怫 ¦¬ª_B¾T¢óŽ`\D:~Ô‘/íÉø1WÓ_󗿘öÞOü„óÇŸ´›¨ä†O.ÝGeu‡F’ú?«ÛÈŽ¦„• h{Wø«±Wb®Å]Š¿ªÏ5/åß–­?ç8ÿ7<ñeåOð—¥žÎÆîÙ¤ý'õ½.ÎBÊ®=/Gà'à“—0>W[ùÛÿœ³üÃÑ¿5ÿ8|åù‰äÉZ}UÕfšÎgFŒÉUø° ¡¸Ô¨wíŠ_;â¯Ùïùõ¯þJÏùÈŸüm?ê VÅ[ÿœ¸ÿÖ&ü‘ÿ˜Ø¿êë~0b¬ƒÊñÜÓ?æ6ßþN.*þ®uoýn½3ÿ5;ÿÝ^l‘èÂ<Ï¿ôòÅù§ÿ)§˜ÿí±¨ÔCã.k÷0<‹7í×üá?þ±‡ç—úÚ—ýÓaÉE„ù|GÞüEȳv*þ޵ùBÿç?í±£ÿÔ 7fù ö.Ðí|=Ÿ,²®áÎGÜ?ÍæÆ’YD;G×u4Ü/Õ­„P¯Ç!¡cØ×¿È xœÓvOlê»K7qðáßsÌ÷?tvï’ê4¸´‘ÜÜü¿Éûgÿ8Ãÿ9Ïc¨CeùqùÑééÚ„(–öº°¢ÛÊQ?hÛü±û³û\;ÓÚ½(““ã™_‡»Ÿ½çó`þ(ò~†ù“LKè~±XT¸5î3ŸÁ“„Ó8Ûå9èoáñ΋K™ÃÉÉ~sÐ>ßÃã.—3…’/™¼Á¥”fR3kÌ3Óåá4£i?¡å;í'ýù)4ÿdŸÓ)8ìÛ–r~ø/Ö‘hšM²Ø„j²½ëÊZ7"¬FQ¨ÉNº"Ëêo'èŸcáÎwU™Ë„_Tù?Cûxg;ªÌæB/ÿœŒÿœÔÑ¿)£›É–ž–±æÐ rH;[6èyy þE4SöØÀävoaËRxòm´þ¡æìpéø·;á›|Áæ :ú]vh–î§y®ÊÐ1‘س5;“Ðö´í­~«³¥â‡0=UÏõŠ}C¾žƒIƒ¤p“Réøþ”Ûù¦Ï[NV¯I)¼o³ëôfgeööÑ»;õ‰ÚCõûŶOC<Õóèò_6\}bý—´j«üŽy¯¶šVcüØþûýó¿ÐC†ö5œ›šìUØ«±WìGüùªî0<óms(†)<¡:<¤T"›¨Ab6­øª‡üäï?)¿/?缿ÿ8»ùaçÛ_<ëVžcmHÜÙYÉn¢79u/"§2 ¡gêÑWãö*ìUýoyïÿ[gÈßù¯õ/ú‰›0óŸù4üñÿ6³ÿQ²â¯ Å_¯ßó‚úÍ?ó‘öÆ‹þ¡.±WÎwÿë4ÿÎ:Û_ú„µÅ_8«Ð?)¿å8òÏý¶´ïú‰LUú=ÿ?’ÿÉ÷mÿ€Îÿ'îqWå*ý^ÿŸ6ÿäû¹ÿÀgQÿ“öØ«èïýaÿÎüØ÷ZÓ±Wá*ìUýJ\ÙùJòüã'æ—æÏ¬ü¥”ô2úÒÞîÝ¥‹>“h¯È}.)-ÆJòè1Wàwüæ¯æNù½ùÛçÌO!Ü5Þ¨ßFm.6ÕHmㄸW‚³!+ÈÆ„€vÅ_.b®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]н×ò[PôÞ÷Ocþû•GÞøg7í+á—¼~>ׯöW/×qýô=w\üÖÓ|±þ‰l ö¢O·„ôoméò·¶iôÝ=FçÓóúà;­wncÓzGª]ÃôŸí(¿"kŸ˜^\Öí¿8ൂ-VÉɆا#è´m+EÖ…”ü^¦õH+í>“63¥²byŸ;¾~ð:pûÝdgÍ›üÀá³·»ÝÓâoÜý{üÿœòççMªÚÂÃOó /ïôéœr4´-·¨¿@eý¥¥ ò>Úöw/fJϪ$?ßw°ôsrb1zγaZ3U‡#^K­iýv;Ñ/%Ö´þ»fßFÐ^I­iývͶ ¦¾u¹ý+%J6é”h#á‰y–¶µMǦØsM‘/UÑìzmš¬Ù‰z®cÓlÕfÈÔKÐÅÕ–g.³­Ï­²&šfˆ£¹'lÖ˜Ë4„ 'ÚÎïÍÏùÈoùÉK¿ÎX®?++íéåé>¹:•i„nxƒýÜ|”ÿxô¥rVô_gýœf‘¨Ô_ðÄt±_GÜ<ù·Â—Å0yóZü½uò÷ž,Oèå%mîíþ!Æ» ìþÀêw³qkG zºÄþ6ûCÊfí¬º\¤j!é$ð‘¾ß§ì>LÊo1YjV§TÓçI­‚–,†´ ©uØïšïÊϸ$(»xjá–q6<Ÿ\Î×SIs'Û‘ÙÏÍNz #Â*É39¦ÔrLŠ»v*ýüüò/”|ÿÿ8OäÍ3ó?ÎÞHÑí|Û=ðÔî­MÒ<°Ý݃€’*.Fœ~ÉÅ_ÏÎ?9ü¡ùåùÎÞjü­ÔWVÑ­4k-=®ãGXžhÞYÓ.e ©BA¥FåWç–*ý?ÿŸCëCYÛTÿˆ.*úþ/ýe/ùÉ_üÙšçýEi¸«ðv*þ‡µøáÿÎÿÌmü›³Å_œóôýiß<ÿÛ—þèöx«à Uúýÿ>TÿÉ߯ÿà}ÿu UùCæÏøîjóqÿ'cø«ö{òÓÿ‘Ïù…ÿ5·ýÔ´¼U ÿŸ²ÿå!ÿÀ2/ù—Š¿ 1WØó€úÐß—¿öÙþM¾*ý·üâóÿåüãž±ÿ9­ù‡ÏÖ·žmóþ™oj<·œ‚êÎæ 6h!‹š»‰}o¬+r+Æ>Ñ#p«ùˆÅ]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«ÿÒüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÛó‰w²óÔ_óß›žÕ<—ùM­ßµõúiâ8㺼tŽÍÃÜÂé‚î²Â¬ªdŒxŠ¿¬ÉŸÈÿ!~DèQùWò‡F´Ò´Æ îðrܵ6’iØ™%b:3³Pl´Z UêWöº­´Úf© w6w´SC2ŽDqFWV2‘±PŒUøÿ9¯ÿ>—.nÿ3¿ç`<¦¼ò¹`‹5ƒ±ÿ§v>Ñ7Ù‹~êuÖ‘u6•ªÁ-­í´ ðN‘ȆŒŽŒVR(A®*ƒÅ]Š»[¿óéÿýfß.Ìn¯ÿQÒâ¯ÑüUØ«áßùËïùÎÿ"Î'X¶™~ãZóÝÄ|¬´Yr —.zÕßýÖŒ2ªøòŸþpçóOþs‡ÌVßóóœ×—Z–+êé>U„½³Xò éT›X`Õ&ê`*«öïÊžSÑ|‹¤ÚyKɶúfc†ÚÒÒ5Ž(ÐvUZrz“RjN*”~aþZù[ógDŸÉ™:E¦µ¢ÜÞ[^DA¥¡ûHë_…Ы©ÝXUü´Înê>^üƒ¾Õÿç¿ç¼ùªêÞ@Ô$kž\¸uº±Ón fHmîX’XHµ‘QU¢¬ÒÌü„j¿4±Wb®Å]Š»~±ÎAÿÎTþEÿÎE~LyOʾd³ó5—æG’tÑÚRB¶ÿ£ÍÓEo4œ‹¼l-Õ–ŠŒ*Am½¿'p%Ø«ôCþpŸþrÉ¿ó¾HüÚòwžãÔÿÎÚ4Y³%A,v÷ÑX³¡Uåqà6ܶÛu]ùóÿ9GäßÌŸùÇËùÇÿ/G¨/™ü©p’ê <–ÅVÐúRfcYª/|Uùߊ¦M÷è»ëmO‡©õi£›…i˃¥hiZu¦*þ¦ç?ç&¿$ç+¿=-ÿ2<‹oæKOÌ{o(˦´7ñÛÇb–1܉œ~íäf”I5¯a†Ð?™/Í?ùM<ÇÿmCþ¢ ¹±ÇÈ{˜E›ô‹þqÇþr»É_•_óŽÿ™¾gQo2ù´Þ=­àG·µœp¯ªæEeø”ÖŠÛa˜È_ØüÝÀÉØ«õÚïþsƒòî.ÿÎ>h «õŸËCO¹×I¶‹%¼Q£ý\ú¿¼5SNA0ÞÌk{|]ÿ9§ùÇ þþsy›ósÈ«rš®tón·‘¬S«ØAnü‘YÀøãj|GjlIµˆ¯µòÖOÐù÷_üå_–?ç¼ýªy·óÎúçHÕt‡Ó‹éê’K ž´r«Ý2žMPhqWÍŸ¿ò«?ÄëÿBßúkü%õH¹~žô¾µõžMêuðð§=ë\P'Š]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±UÊÅ:05Üd¡3%ˆÜ{¶wå›;;æúåë‹€jË'Aôwý^ÙèÞÌvv›_ûü²92uþí¿‹Þvé@º½nIã1Øy=¢Âèè3Ñã³ÍeÆÊ¢hî”G0¯î>Yg7@ÀØ}—ÿ8óÿ9w¯þL|§æïSYò]B,dÖâÑ|`f4â?ßLxÿ#&õÑvŸbGSë†Òû¿õýíS€ÉËbý;ƒ_Ð?2ôxü×ä›ÈïôÙÁ£ÇÕZ•(êhÈ⻫~‚3™Œg§—Å]—7Ï~sÐ>ßÃã›ý&g$_'yÃC(ÌÀgG¦ËbœCé6ñ‹¯Ý°þsZŸË2K— ýL·ËšWªÊ)‚Rá6YqÓ^OÐþÎÞ¤Õfl„_JiGOòÕŒšî¿qžŸlœæžf Š=Éñ;Ô†ùÏæ‘Èxc¹.n8_'Äž_ó˜:§œcŸÉ”Í.™ c¸Ô7K›•èB÷Š3à?xÃí“6ºÅçÃŒ#´R#ÝV=Noù7‹Ÿ67}w×|.n,oóM…„u¿Sõ{ŠÔöä~^>ã8Oiû+KŠ'=øsècüRþ¯˜ªæ^‡C–gÓÌy¼ÞY^f2ÊK9êO|òüùåšFs6O2]Ôb"()åIv*ìUØ«ïÿù÷‡üäÇ“ÿçüï­kšß6‡¯h’é-5„k+ÂÏ,rrdfRT„"«É#á"´Uówüä¿å}·›¤‹þqÆ}RãÉŸV€ÆúÀçסõA¢§ÃZqÛxŽ*ìUûñæùøäþ­ÿ9+åÏ‹;­HùSJòîræÅÄÂæi¤u jVŒ*Ø«ñ'óoÌv^qóÏ™üÝ¢–m?UÖµëbëÅŒW/"^Ç‹ ŽØ«ÏqWéOüà¯üä·å‡åO”¿0ÿ&?£ÕbÐ<ókóJdtDŽhäBêÄJ 0WUWÑŸóó˜ü¯äŸäd_•Ïu/”VÎìiO{µÃZýZ×Ò2Ð+°ß~%b¬³ÈZÅ¿—¼Í¢ëú‘aic©YÜÌTTˆâ™]¨;š¶*ûþ~)ÿ9åùÉOÍH1?,%¹—GMÎĵÔõb–faÄ“µwÅ_b¯¼çÝó>QÿœküÔ›óó>[˜´wÑo,CZÀgVYaeAQ|Uë?ó–>@—þq—óò &¼ÿy›Í’ë|VoE­ŸR³¹ä­½8_áñ ïŠ¿-±Wb¯×?Í?ùÉÿÈoϯùÇ¿)þ[ùèyƒOüÄò—›¤Ahm&¾†Ò+e’InQIè£P„d«/Å@ÅWäf*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±T~{-œ„C<–é(Êñý®‚{ŠôéQ^™V\bcp n/½¿cŒìLobGsêïËï/èšL1êZ8[‰]Þ–£6ý@þ_p({ã;KU—)1žÞ_Žo¡vVƒ‰ãõ_ñuýžï›Ý4ûÞ›æ†pw`¡5O*-äé¯ùrca¬ÄÂD–&(Æà’»«Wö†þ5Ë1êxGÇNÔc|2VÅõ¿äïüåsJñùó¨}WQZ$:›©'aëSa_÷âü'ö¸îÇ’íe«÷ÚMÇXõÕý\û‘<]bú»U´IÐM€ÊÊj;‚êrø§[¼£ZÓúí›l9b^I­iýv;  ¼ÿL¹ý+!Þ¾™§ßþÖfÎ>Xìõ=Ǧ٭Í4õMǦ٪Í6¢Q~tüÊò÷åVŸúSÌóÒVR`µŽ†iˆì«Øx±¢Ðô}—_>cÞzÇw6"&\ŸŸ¾{óïš>®Vç]é¾W‰ù[ÙDOàÛý·§û±…ü Œït: =”*©žr?‡ø–ͱòæ—Goi£[‹65Šì:“âOR}ÎXe,†å»D¥l?Zhob{[ÄIaqFG”pv̼$ÀØØ´e€È8d,…òGžll<¯tÑùjæHe™JÍl¬J„`zš÷즧¾ÛggÙÙ'©åÈùþ:¼káÇ¢•a‘óˆåGÏôïÙåÙ¹y×b®Å]Š»~®~MÎNþBëóšoüâßüä…¯š"]+WŸTYô$·"RòJéG‘ê8‰™YJv7P~Qâ®Å_hÿÎ~ygþq«óbÛó?ó/G‹N½µacË/9Ô¢³ ¦ÛüX«ß“þs'ÈKùùÅù2cÔÿOùïÎZ–½¥7ÕÓз3Yº ŸÔª= z¨VáÜ×e_–«±WïwüãOüä÷äç5·äoå?Ÿm<ËiùƒäkË;-#ê‹°’ò±D’M!nf'ôЕ଄²Õ…ªøCþ~ÿ­;çŸûrÿÝÏ|оûÿŸsÿÎKùGþq_ó'TüÂüÍKé4»Ï/\éq>šO^[»Y–ªï Æ©¯Zm¾Ê¾×ocÔu+ÍBÞ¾”÷Êœ…r¾ô8ªUŠ¿D<ÿ9GäÝþqÍó‹WÑêÎZÖ³ ý«¤mIye1ç/0Á¸Û¾ÁüwßeR¯ùίùÉ(ÿÎF€¿å_¥ò†¼½—{õØR*μ+éñwä¿ ÜÓ劾Å^Ýÿ8Ýù§gù%ùŸåoÍmfÖkÛ QŠêâ r¢WŒU_‡*)` BË^AWÑóž?›“ž^iÿ•­ù ¾`O2kK®®¯1Û…Ž¢ƒêë1ˆÜù1íLUðN*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_ÿÓüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯×ùÀùù~§ùÖ”¿óO©þ^’!´¾<¥ºÒG@´¶Ãý÷öâÅP¢&Uý6èþ›æ­:×Ì~Z»‚ÿJ½‰g¶º¶‘dŠXÜUYIÜb©¾*üüÿœÉÿŸ|y#þr®Ö_1ÙôÌ(ã¤Ä7E;ØÖžªÐ{¥ "úl«ùmüóÿœóÏü㟘äò7æ¾—%…è«ÛÌ>;k¨§«o0ødCµz2…Õ ¼cv*þ·çÓÿú;\ÿ˜Ý_þ£¥Å_£SϬosrë1©ww!UUEI$ìN*üjÿœÿŸŠëߘ`?óŽ_óöOæO8^3A>½n‚H g6œé ûWR‘nƒuæ‘Uz×üâ/üû‡Eü¡¾OÎ/Ï{¿ñ—æ½Ì†îK«¶k‹k9Øò/«VšpÛ›‰7†4B9²¯Ô UFââ+8¤»»‘b‚%g’G`ªª¢¥˜€rN*þzç?çè²ë^ü•ÿœf½h´ïŽÛTó, G›ª¼6,>Ìg½À<ŸýÕE¤Ž«ð€’ij“¹'kv*ìUØ«±Wb®Å]Š»v*ìUØ«ôþpûþsSÈ_óŠCjþ]có…Ü]ý(öêÖó²²ÂÐúr(U(µ r4ê1Wç¶¿¬Mæ-N÷̪«q}s5ÔŠ€…+—`+SJ·ÂM  ”àK±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUت½½Ì–’ íØ«¯B3#K«ž–c&3Duütc8 Š/[òç™SP)K€7^ÇÜg°v´í!Ã/LÇ1ßçÕÌ}¯?¬Ñ{ŽOG³¾é¾uºl˜™EµèaÅ·±É‚àÏÑ?.ÿ3<ÅùO©ˆ]ï¾¾›P”Ü\µXô€ðã]£ÚYuù ;óg«ÒK¸d?kèš=d5Q㿼y¤Xßôß5Óƒš ?SÓl|ÇÕu©bEÙÐøƒü:†<’Ân-±'@üçó/ät‰£káõo(3QE~(A=c'ìžþ› û%I-”kûiŽ8zr}þþÿ6Òùs}Ë£ùŸEóþšž`ò¥Ò]Z>ÇŽÌÝ]NêÃÀüÅEqYtÙ4“àÈ(ýþc½®«›Ö´þ»fn‘/š¿(îJ˨÷ôåA÷òþ™Ñv¤|1s>O¨t{›g5šmd¼·ó;þr'Nò)o-y9SSóãŠéF§Ûqüƒ§íÐì»7Ùùê¿y—Ó´þ¡çòQ ܾ]‹F¿óóù¯óá¯u)/NFä«à¶Ý”|#ß·LrÇ |<€ü~4K%lëËðÀeƒA,Búÿ®ù•0%ó¿ææbØ—Ò4&uºÉ(Ýcì@ñoÀ|út½™Ù'¯'.ƒ¿ö<¯lvèÃxño.§»öýÏœä‘æv–V,ìIf&¤“Ô“P )<ÖaC±Wb®Å]Š»v*ìUØ«±Wb®Å_aÎ ~þ_ÿδ„ð|Uúñÿ8ßÿ8µäùÅ¿/+~YX¹™Tßê—^öõ×£M áñBÆ•‡¤ÿT¼¹ΓY áõG—Üô«]C¦ùÛ‚ég‰>·Ô}ò@¸“ÂK¹!š=KM™í¯¡`ñÍeeÜFྠ.lb8v;‡×Ÿ—?ó“QkK•5 ÛßP$:•Ç'a벟òÇÃüÁhIÖÏIᛇËõ:ý_eØãÅ¿“óÊ*þii–É5¼n¤‚ ÈA=33OM´cÅþ #çú™=l¼˜­ y8%´¿jõØx}‘ûGªågˆwäeŽ<›´¾Z½Õ.õ{¹5¿0Ü=Þ¡1äòHy|¾îàèeB""ƒ¸ Â}Gß )†ŠçP÷È’åC Ï¼Åæ”°(÷tì¾çúg+í´°ìáÁVNî‘ó—èýÎßG¡97<žKqq%Ô=ÑI9ä:Lõ392'™.þr†NÅ]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìU=òÿ˜¯|µt/ôÇ¡èè~ËæGlÆÕic¨ ¿hrôZÙé%Åï½õÏ“|óiæh=kSÂt§« ‰Oñ±þ9Äë»>ZcG—CÞú/gvœ5‘¸ìzŽ£öy½6×R÷Í\±»0S±yÌmor«$N(Ê ƒØƒ•p˜› „˜=¬zÿå–¢|Ûùarè?ÝömWWA¹R§í¯·Û^ªk¸ÌŸ…­‡¨éw~£öw¹È%´ŸaþYþx蟛0 Ã̧ղ‘¾Ýí ´;‘ö—zŠG’íÅÉ 7õC¤¿â»¾ãö$Ã…àÿóŽzÅ­œ>eÕu©ÒÞÎÖâ#$²°UQûΤþ=3yí##Ž0H;ƒdÒß>þ|ë?˜Éå/ÊÐözOظ¿j¤’)ÛcÖ4>Þ0þQUË4=‡HQ~úõ…wü”~Èÿ2s'Q¨–sÜ;š'—‰6¹Ô«ß)Ž6¢XÍî¦33£rIí™Çl%*|Éçÿͽ/¤yuȇu’áz·ˆOoò»öÛsÖvgcðzòsè?_êx®Øíþ;Ç„íÖ]þï/?“ó¢y7b®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÕüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]оªÿœRÿœ¼ó·üâg˜ÿÄJ—ëzÛ Õt[†o«^F»WoîæPO§*Š©Ùƒ¡de_Ö·üã§üä—’ç'ü­Ÿ?,ï=E^1ßXÍEº²œŠúS &‡¯£€J1¡¢¯|ÅT.­a½†K+ØÒky‘£’92:0£+)Ø‚6 ìF*ü ÿœÚÿŸMA©ýoóGþq^Ý-îþ)¯<­P±IÝšÁ‰3ßêíð‘2QbeXüáßüú÷Í_˜–z?šç,f¿Óü¡¥ú¥yJYdŽvÈes2ÔT‘É/;þÑŠ‚ª¿ ¿.ùsJò†™kå*Ù[éÚEŒK ­¥¬K1F½@ >CN±Wšþm~nùOò;Ë7Ÿ˜Ÿ™º”Zn‹f¿»ÈçìÅŠI쨠žûHUü ÎjÎxù·þr×Um.WGü½³›†Œ¯¼…vÝ•4’_åb x¥O)WÁ˜«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]г Í [öÛ¢ÈS_¿=ÙÏkj°êO™û¥ÿóïuz­ ú£òz4MóÑÄ­ÓÏ k¥ï’¶‰aUšâ;´ô¦Üv=ÇË 6Æ006†ŸS[ˆŒwRqŠ3Rú†±ÆkTÔˆì6Üå|.UÀÇqðï)¥¬‘Y'ºž¬zœ˜ÙƘ3;ºMKßQ…,›Q÷ÀKtp°-wÍ&*ÚØšËÑŸ²ü½ó…öÚ±¦¼:ssäeÒ>C¾_`÷»m.†÷—'³%Ü’ÄÔ“ÔœòéÌÌ™HÙ<Ë·–äRìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»GiڕΓp—ú|†)ÐÔ0ýGÄã+ËŠ9cÃ!a»y`œ ú‡É_˜y…¼ô†ýGÅf§tööê?ã»C²ÎœØÞ=ÿ­ôÊíˆë¥ÔwùÆÏQƒS÷ÍAÆîMbÕ=ò³•±?0y~ RAªéŽm5HØ:M+V‚HÜz0ßç™x5á–ñîü}ÍØóðìy0}Êš…ãIm¬K$6>¯©"¯¨â£+B~#âiÔænmT#¼EšùÇFùç“×lä¶Òà[+X¡^Š¿¬øŸsš™ÜÍ—S'šœÚ§¾#cúŽ·¤Osu Ž$fc@dcÀfhnZ²eÁ”ùϘ“ù…›OÓKE§ô=š_Ÿ€öûü]ÙÝ–0z¥¼¾ïÛæð}¯ÛrÕz!´~Ù~Ï/›ÌspóîÅ]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WÿÖüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»{äg翜ç|Õmùù_~ÖzŒ4I¢oŠ ¨ ðO@xÚ‚£fSFFWU`«úÌÿœ<ÿœÖòwü寂'Ñ™tß8ÙD­ªh’¸2ÆGÓ@zËnXÐ=SE‘T•ä«ììUØ«±Wb¯ç%¿ç'ü“ÿ8³åwó¯æ5Õg—šiÚdMÕôÊÁ’(«Pd‘¨ˆ©äUYWòOÿ9Eÿ9]çoùÊï35ùúGN·.ºf‘7Õl£jT ?iÚ€É#|N•¢ªù—v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®ÅSý/[’ÎNKEØ÷_ìÎËÙïje£¬Y·‡CÖ®>]:w8™ô¢{ŽlÖL0 ¦ ô9ê˜óG$D¢lD:Ù`F®¥ï–[Q©úKß £ÁXÚ—¾ H„“R÷Àe[–Á…ˆjºûÍ[{SEèXwùg›{EíaáÓ¹÷ùGËú]zm¹Ø`Ò¼˜¾yûœìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUت¤3Inë< RD «)¡w¢$(²„Ì ˆ{דÿ0Æ OÕ˜%ßE~‹'ôoný¼3˜×öW‡ê‡/»ö=ÇdöàÏèÉ´º’ý¿ÜõõO|ÓoGÄŠ]Sß"q­®:§¾ x”T÷É ki&©æ84ØZîò@‘¯ÞO€Î_‡M,§†!ÇÔê¡§Íξió…×™dàÄÇf§àˆ¾íâWãf‹A0ï=ÿ©à;Oµ§¬5Ê#ý'Ïîbžê]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_ÿ×üÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*Ë|‹ç¿0~Yë¶>zò¡>—¯iÒ‰­níÚŽŒ|0hß™°Eñ[r o©_Š[NF¼è <²Š²@Ü~™â®Å_ÎeÿÎqù?þq#E0ÞÕ¼õ{ }7DŽ@† OrFñ@;Ó”„Œl슿“Îoο8~y¢ëóóCQ}CV¹À”kb©S™(ZÎsEIʲæŽ(™ÌÐÉHÆoµqX¢Ú?Äç•{Aí<µ×‹ˆ}³÷÷/ŸpÍ҇sÍ+ÎE½Ø«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å\ 7qW¦yoήl5WöIIüúýþ9¤ÖöoñCâ?WêzÎÉíÞXót¿_ëù½)oÛ®i8²ÛúûãÀ›J5o1G¥Eëܶçì êÇÛúæFŸHs·_ $x§ðKŵjçZ›×»o„}„eG·¿‰Î›M¦ŽQøž÷€×kç«—¾ üw¥á;v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»ÿÐüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìU¦êWz5ܶ‘q-­õ¬‰4;G,R!䮎¤2² ‚ãHŸó€óóÛOÌ¡gù7ÿ9wŸ›~4írR±Á¨žÑÜl+Ž[d˜íðÉA"¯bÿœïÿŸŽèó°\~[þY=¾±ù—"u¨’ÛK¦qJ†˜lRJ/‘Wòåç/9kŸ˜ZÕï<í>§®j34÷Ww.^I¼O@ÙTQU@U@«Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»EZݽ«rMÔõŽm»#¶rölø¡¸<ãÐþ£ÜFÌ2cdÉ} Åëò¢Ž õÃ=_´|˜<~*˜?P=ÕßÝ\܈ƒLvòùîÍ:F:ëžeÛžÐdí)W(Qý2ï?wN÷3!sí®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Veåï45‡;òZÛ¢·RŸÔ{}Þ¬ÖhOTyýÿµè{+¶ŽFMãßÖ?³ð;™¦±æ;m2ñ°–Y±ªš‚r|3Y¦ÑK)£°Þ‡_ÚØôѱ¹<€ûÏ“É/o¦Ôe77MÉÏÜ€ö΋!ˆpÅá5:™ê%Ç3gñÉ –4;v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ÿÿÑüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Uk‹‰o%’îîF–yYžI‹33–bw$É8ªŽ*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯ÿÒüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÓüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÔüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÕüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÖüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿ×üÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÐüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÑüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÒüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÓüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÔüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÕüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÖüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿ×üÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÐüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÑüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÒüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÓüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÔüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÕüÿâ©Ï—´Ÿ3jhziŒ\Ü ê¸>,jͰØmâvâ¯Wÿ¡}óWóXÒZb®ÿ¡}óWóXÒZb®ÿ¡}óWóXÒZb¯,ó/—nü©¨K¡ê¦3sÞ”‚Eø”0£cФX«±W©ygòƒ_ófŸ»¥5 ¶˜¸_Vå¾*j½Fã¿Ï¦*Ÿоù«ù¬?é-1Wоù«ù¬?é-1TÌŸ“Úÿ•téµÝQ¬þ­^•Ê;|lQFçsм¯v*žyoË×^iÔ!д³¹Ÿ—VAü*XÕ°Å^©ÿBûæ¯æ°ÿ¤´Å]ÿBûæ¯æ°ÿ¤´Å]ÿBûæ¯æ°ÿ¤´Å^SæëË„ú§é››r¡ý'¿†a±Ø—C¾*’â®Å^­åßÉÏ0y£O‡\ÓÌ[Oȧ©rŠß 5^ÛŒU:ÿ¡}óWóXÒZb®ÿ¡}óWóXÒZb©™¿(uï)iòkš«ZhŠô®QÛã`¢Š7;žß³nÜÓpëZWf¸ªSŠ»zÎù1æ1éðkz{Y‹k…,ž¥Ê+P7ºtÅSúß55‡ý%¦*ïúß55‡ý%¦*ǼÓùI®ùBÁµ½XÚdeCé\#µXÐQFçèÅ^aŠ»d>WòÍ盵Ñ4“¹uf´‹ÑENçõb¯Oÿ¡}óWóXÒZb®ÿ¡}óWóXÒZb®ÿ¡}óWóXÒZb¯#Öôyô ùôkò†âÙÌoé°u¨ða±ÅR¼UØ«Öô?É_1y‚ kOk/«Ü'4çtŠÔ÷¶*šÿоù«ù¬?é-1Wоù«ù¬?é-1V5æ¿Êsɶ?¦5ƒjmýE÷7íV­>¿nØ«Í1Wb¬“ÊžU¾óðÑ´s¸(Ò~úEh½w=÷銽3þ…÷Í_ÍaÿIiŠ»þ…÷Í_ÍaÿIiŠ»þ…÷Í_ÍaÿIiм‡XÒæÑ/n4‹Ò†{i71°uªš0Øâ©n*ìUëÚ7ä—˜õÛ}bŬ¾¯sÊœî‘[‹n*;lU2ÿ¡}óWóXÒZb®ÿ¡}óWóXÒZb¬[Íß•šß’¬×VÖM©åFá¹HøFôÛyÆ*ìU”yKÊ7þu½m#F0‰Ö&”úÒ¬kÅH…ºš‘°ùöÅ^‘ÿBûæ¯æ°ÿ¤´Å]ÿBûæ¯æ°ÿ¤´Å]ÿBûæ¯æ°ÿ¤´Å^=ªé³h÷—Mç^ÚW‰ø0e䆆Œ6#@b®Å^Á¤þGù“Z²·ÕìÚÈAsK;¤ ÅÅEGcN£·CЦô/¾jþkúKLUßô/¾jþkúKLU‰ùÃòÃYòE¤z–´Ö¦e¯£:ÈÜŠ–û#zPÿ®*ó¼UØ«+ò‡“µ;]¾—¢˜DÑÄfoZUŒq.Äõ5#z/ý ïš¿šÃþ’Ówý ïš¿šÃþ’Ówý ïš¿šÃþ’ÓxÞ¡c.™u>›uÇÖ·•â~ y#4a±×Aâ®Å^ɦþEù—T´ƒS¶kFâ$•9] <\*;UÿBûæ¯æ°ÿ¤´Å]ÿBûæ¯æ°ÿ¤´ÅX—œ?,µŸ#ÛE¨kmjbšOID3¬Ê„ý‘½(:ÿQмóv*Ë|Ÿä­GÎ÷2éú)€K~«zò¬b•jõ;â¯Cÿ¡}óWóXÒZb®ÿ¡}óWóXÒZb®ÿ¡}óWóXÒZb¯»µ{岞ž¤.Ñ·UM ØqŠ¡ñWb¯g²ü‡ó5ý¼7Ð5§4k"Öí+FûñTOý ïš¿šÃþ’Ówý ïš¿šÃþ’ÓaþqüµÖ<7šÙ¶1Îæ4ôgY @®àoOìÅ^Š»eþNòF£ç‹‰ltC’ýFõåXÅ+M«×zý ïš¿šÃþ’Ówý ïš¿šÃþ’Ówý ïš¿šÃþ’Óx¤ðµ¼o%9FÅO¨4؈ÅT±Wb¯j¶ü„ó=Ü1ÝDÖ$Eu­ÚtaQŠ«оù«ù¬?é-1Wоù«ù¬?é-1Vç/Ë_ȱÁ>¶mÊ\3*z¬†ª5~ýqVŠ»f^Nò&§ç™g¶ÐÌ­Õ]ýy–=˜ÐR½~ŒUŸоù«ù¬?é-1Wоù«ù¬?é-1WùÇß4ËXÒZb¯–&…Ú§$b¦„Pi±UOv*öØ¿ |Ñ2,¨ÖXéqËlUý ïš¿šÃþ’Ówý ïš¿šÃþ’Óarü¼Õ¼Š-Û\6ä\ó èL²}ŠV n:ŒUƒb®ÅY·“|ªyé®C0lÉë̱ýºÒ•Üô5§NýF*οè_|ÕüÖô–˜«¿è_|ÕüÖô–˜«üãïš@¯+úKLUâ 8’§¨Ûc\U¬UØ«ÛÓþqÿÍ.¡Õ¬(@#ý-;ü±Vÿè_|ÕüÖô–˜«¿è_|ÕüÖô–˜«ó—5O"µºk†nC˜ý –O±J֛ޢ•ëÛ¡ÅXN*ìUœù7òóVóиm ÛmÀ?¯2ÇöëJ¹èqVoÿBûæ¯æ°ÿ¤´Å]ÿBûæ¯æ°ÿ¤´ÅV¿üãÿšcRå¬( Ÿ÷®>ß=±Wˆâ®ÅW"—`‹ÔM:ûœUíÃþq÷Í$W•‡ý%¦*ïúß55‡ý%¦*ïúß55‡ý%¦*Àüåä=OȲA¸`-p¬ÉèL²l¤Ztë¶*ÂñWb¬óÉ¿—Z·ž’yt3lܪ¿¯:ÆjÕ¥Üô늳Oúß55‡ý%¦*ïúß55‡ý%¦*¥qùæ‹hžæF°ã³š]ÇÐ ÷Å^)Š»U‚¸‘ ŽœÝ‚ŠI ©;™Å^×ÿBûæ¯æ°ÿ¤´Å]ÿBûæ¯æ°ÿ¤´Å]ÿBûæ¯æ°ÿ¤´ÅXœ|‹©yhmu³yкz,›CZtÅXn*ìUŸy;òßWóÌSÜè†Ø%»*?­2Æj¢€õÅY—ý ïš¿šÃþ’Ówý ïš¿šÃþ’ÓC^þCùšÂÞkéÚÇÓ†6‘©v•¢Šš}Ø«Æ1Wb¨‹KW¾ž+()êLëò!EXÐT€÷8«Ú?è_|ÕüÖô–˜«¿è_|ÕüÖô–˜«¿è_|ÕüÖô–˜«Ï¼áäKÈ÷Xëf$Ñú‹èJ² TéÓ¦*Ä1Wb¯@òw妱çˆ&½Ñ °Ž·­:ÆjEvz{â¬Ãþ…÷Í_ÍaÿIiŠ»þ…÷Í_ÍaÿIiŠ¡5ȯ2é–³ê7-cé[Æò¿¤'ŠMs¶Ø«Æ±Wb¨» )5+¨tën>­Ä‰s`«ÉÈQRv§rzb¯eÿ¡}óWóXÒZb®ÿ¡}óWóXÒZb®ÿ¡}óWóXÒZb¯:ó“u$]ǦkF4‘ WÑ•dI#r:ŒUŠb®Å^‰äÿË gÎö²jZ)¶Å)‰½iÖ6ä6Êw¥ßúU–оù«ù¬?é-1Wоù«ù¬?é-1T§ùæM&Î}Rí¬} hžWãt„ñASAÜÐmмwv*Ól%Õníô»R¢k™RæÁW“°QRv§sнþ…÷Í_ÍaÿIiŠ»þ…÷Í_ÍaÿIiŠ»þ…÷Í_ÍaÿIiмß;Q¿òUêéÉ„ÎÑ,£Ñ•d^,H+ÐÔϾ*ÅñWb¯Gòåf·ç[6Õ´cj ILGÖ¸Dn@~½7ÅYOý ïš¿šÃþ’Ówý ïš¿šÃþ’ÓKõÉ2h¶W½ãYzÑ4²qºBÜTTÐw>©è7Å^?Š»GéZlÚÅ従gÇ×¹•"Nly9 «€Å^ÃÿBûæ¯æ°ÿ¤´Å]ÿBûæ¯æ°ÿ¤´Å]ÿBûæ¯æ°ÿ¤´Å^iæ¿*_y6ûô6°b7OÜÈ$Z5i¸ï·LUb®Å_ÿÖüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿ×üÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÐüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÑüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÒüÿâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUÿÓøÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÿÔøÃw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÿÕø%Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÿÖø9Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw Uÿ×øKÃ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1T~•¼×¶Ðê­«ÍÊT€Bˆ'½0ª'Ì:3h:¥æ‹-yZÏ$5=HV ¤oФü0+¸b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*ÿÿÐø]Ç»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â¬«É:ó&»c£H+ ³7´IñHàAÅYWŸD:ö—¥yÚÙ8K8’Æèu%í¨#r{³FW‘ñUå|p+¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*ÿÿÑøoû†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b¯¦$ü«þ—˜^”ÖÒ\Ú^z„ŽQÍhÝCl îwS_™TÏó;É–ÖÖþ\Ò¥áicê^ÝË&â%H5EsvT¨Z×»8«å>Ü1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]ÃÿÒøƒÃ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*î«+ò‡•$ómëh¶íéÝÉ’[òVtø¨Ç°*üÔí\Uõoåµ”×%`ªÖbn¡d ÂXaέ¾Ì¦$‘[º6ÕÞ…[Öt-ùfÑôJ $† ®Tš+”i>Ð2°X×}Õ8×|[u'Ö¦’äª'¨ìÜQBªÔÖŠÀèpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÿÓø•Ç»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«êß( /'h~·›!Ôì¯ntû+¤Rï–0j£bÉWg¡PÖ•8Uèú'—aÌ:Ðk^áb‚âH7IêÑÏrVWZ“·Â¬G*QV9æý.ßÍ—W:o™µgea¼¸·µQÄ/oVRw¨¨^JrØâ¯5i’òîK¨-ÖÖ Ç ¥(½w;u=ÍO| –ñÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÿÔø§Ã]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]ÃV·ƒ×•!žl«Eêji·¾*ûÎþ[µóè³ÐŒM«i³ÛÜIopŸ «…‰ @Á•ß\aCÖ'“OÑ-á·º•`¶·N`Ë! XèµfbI£2õ=iоr“[½óž£s¦i: wî 4ìò­³”øRY… +5<¸«Ä<Ý©¬^Gur·s$œdBTE`«N*Ô”Ç8b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*ÿÿÕø»Ã]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]ÃeÞB³7^aÓ€PëÂLàš‘QÉù*“ïÓ{Å®½7š<Û=µä2@,f ДwHéÅ–AOŽ iÈš„ÀjáCÓæyTê« —ré¨míJPÊÌÊ$p¤‚¡D¯Äj•ëQмnêimôÛƒ«~‘yãF˜AszÓOðoÉÂÑ-ãR¿Þ½8¥;ªù»†»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b¯ÿÖøÍÃ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãzÿä•´Sù‰’áC/Õ&Øô߈?8¡>òM†¥äÿ0^G°º²µ¸0ÎÌ¿¼Š >‘ˆ­} ¤ÔlF늳G®·e ëÙ<°JÏu1¼‰œXòã ~¢ ¥xó” ¨cÓ ¼§ó+U‚Q“§ÜEé¡äÖ¶!VÖ!Ú¬  d=Kz¹À¯$áŠ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1Wÿ×øßÃ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãfÿ—ZÌ^_×í/辰-¬;,ŠV§Ø ùb¯£4;±]gH»vi¢ž y$¤31¸§íˆŽ¡áC ×nl¼Ÿu6¹{Åäå VÑ\0ž¦¥Gìs ‡.êp+ç‹Ë™¯ç’úñ‹Ï3—v=ÙIÅ(n«¸b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*ÿÿÐøñÇ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUí^F»ƒNòõÞ±¨´­½Ò–XÜ«±CUøä¨§JW¶*Á|Áæë1EõKÈ!Xb`mB-èP7V©å_‹|U‡ñÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ_ÿÑùÃ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ã]ÊTT‚(­~ŒU‘LQ5ÈŽ&ºŒG£ÓR ³;ÆœjU;x÷ßE\éñÅ3iñD¾“%ËÔˆ4o _ˆîÀ+C]÷ÅSK[+Yn^;uIGR­õi=5éñžCáoµQâF*…±Ò­®ì,þº¬ªþv1Ð;¬J¥EH;¬+½7ÅU®´Ë;Ø-"T–9¿FËp’UxÊÔqƬX/U_ˆÇTPµ!;I«Ï ÌAò¼P™>×Pj(Wâÿ[dVÒì­­®õ8>–Â9ãiáK¦„ýe¢j)P¼<ÇÛ_æ_+iI&©ªÝ,$&ÔA°TV3ÄhÌŒ °äWöEE:Uf¥ùua§Ïmc “]]4ëÇ,jÒrŒ·4ø¬7 áÞ£A¿”ü¾²jsF÷¯i§Éiñò‘¦fW ”ˆ q4ì|vU•y{ʶÚEý½«Raµ=½^4øZòÓT“T¿—«u;p^R1  ­ûlHùb­ÚjÚ…ÆêxJ§¦=9Yhœ‹qعiÒ¤œUEïn¥Y#’yY&`òä‡aа®äv'EÇ®ê‘ÄW×*!þî“8áQO‡}¶ÛlUeƱ¨ÝóúÕÝľ§üåvåÀ’µ©ß‰$ 튶5­H?¬/.ž¡›—ªõõ ñ/Zý¢6¯ZmŠ©¦«~Šˆ—S… hŒ«•ì 7z^‹¤_jžQÕ58ÚàÜ+³r<äŽ$£‚z‘ÅŽÞÄb¯1—Q¼Ÿ—­q3ó^ ÊF<–¼¨wÜWzxï×T“VÔ%ãêÝNÜA²6ÕO~ë·Ën˜ª™ÝV7f*€…ÔMM<7ßYÃw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WÿÓù)Ã"—pÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ã{¯”ïî“FÓl|¾=[©%•$F/é!Vgf“䌪¡»w^,`;Jr=:u튩ðÀ®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b®áŠ»†*b¯ÿÔù;Ç]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUV)d†¢då±âH¯Î˜ª›ij“¹'kŽ*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*î8«¸â®ãŠ»Ž*ÿÿÕùOÇ"ÉÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWÿÖùaÃ"ÉÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1WpÅ]Ãw UÜ1Wÿ×ùsÇ"ÉÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWqÅ]ÇwUÜqWÿÐùy‘dìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_ÿÑùy‘dìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_ÿÒùy‘dìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_ÿÓùy‘dìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_ÿÙfifengine-0.4.1/doc/logo/fife_logo.pdf000066400000000000000000015764631304641216200176240ustar00rootroot00000000000000%PDF-1.5 %âãÏÓ 1 0 obj <>/OCGs[334 0 R 337 0 R 340 0 R 343 0 R 346 0 R 349 0 R 359 0 R 362 0 R 408 0 R 435 0 R]>>/Type/Catalog>> endobj 452 0 obj <>stream application/pdf FIFE 2d isometric engine Adobe Illustrator CS3 2008-07-18T16:52:35+02:00 2008-07-18T16:52:35+02:00 2008-07-18T16:52:35+02:00 160 256 JPEG /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAACgAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FUPeaha2a Brh+IavEUJJp8snCBlyYymI82L6z+Y2m2DCIECdxWOI1kmYDYlYY+TkDx6eOZePRGTjT1QCWRfmb NbsrajbvbQt1lmETR9T9p7d5fT27yUHvXLjoL5NMdaCebKbDzZpd3Gj8uCuAUkBDxkHoQy5hz00g 5UdRE89kRr/mby/5esBqGuahBptizrEtzcyLHGXYEqvJtqkKcx29KdN/ND8utTEh0/zHp90ImiST 0rhG4tPIIogaHq8jBV8TiqHT84fyskultU816Y1y7iJYRcx8i5PEKBXrXbFXP+cP5WR3TWr+a9MW 5RzE0JuY+QcHiVIr1rtirMMVdirsVdirsVdirsVdirsVdirsVdiqTeaoedgkgG8bip9mBH66ZkaY +qnH1A9L5P1+DW/L8KTw3Dsk6hp5WJdmlX4XZn3ZviB6knOwwGMo8uTz+X1ZCCWPR+ddeaSNDMQZ hyhCuH5LUry+GtByBG9PwOWDhJ5M56XhFkvZPyW06+N5eNdu5+ti1YR1ISrvLzbgPh5bCp6+Oart OQFV0tyNETIV5vaPOOgX2uafa2VrdyWardwy3csFzdWcpt1qJVjltJIX5kH4Qx416jOYd6hT5Nls tDGm6TqF7IxvYLt7jUdQvriXhHJGZI1nMvrcWSP+75cCSeQIJqqhfKf5fyaXNb6lqOq6ldatE0xk h/SmpT2BEhdU/wBGup5VNI2H2hs24ptirG7P8vPzMsfMI1W31uCWNJ3kS2utQ1yeEo5I4tbvdtAa K2w4UB6Yq9WxV2KuxV2KuxV2KuxV2KuxV2KuxV2KoXVLZrqwmgX7TL8PzBqP1ZPHLhkCwyRuJDxD zhocUumXGm38RjkE872l4a8H9eZ5RFJWvpyKX4gHZtqGvwjotJmogh0Gqwm7Dx/QPLCnzAsE6kC2 PpcQCzEl2k4qoqWJ59Bm2nIRiZNEskpgRfS35daBNBcNdSQ+ggK8YzQlUSPigZl258mZiASB45zO uzAinbaLDwp7590jXdVsNMg0eaSCWLVLOe7kjkMRFtFJylrRk5DxWu/gc1Ts0BLofms+aPNt5HLI thqGmwwaQPXIVblInDFU5fuzyb7VBiqn5M0/XpfLvkee9juEuLK3J1Nbsstwpe1aMCVZDzLciK13 xVKv8JefX8l3umfWZotTn18XUM31olksWu0kJDhwQqpyb069NqdsVenYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYqlWuaBaapA6ui+oylW5gFHUinFweoOXYcxgfJqy4hL3sP8r/ljpun6ndXaWrQSTP8A vpZGaR6UA4RFyeKUUdP4bZ2fXExAu3FxabflT0KGCKCJYolCRqKBRmsJJNlzgANgvwJdirsVdirs VdirsVdirsVdirsVca0NNz2B2xVT5XFD8CVoKDmaV7/s4q3Wav2VpXryNePj9nr7Yq0GuKbonKhq OZpXsPs4q7lcb/AnanxH/Zfs9u2Ktgz90WlT+0enb9nFWuVxT7CVp05n7Ven2envirdZq/YWlR+0 fs9z9nr7Yq1yuKD4ErQ1+M9e37OKuLXFNkStB+0evf8AZxVus1fsLSp/aP2ex+z19sVa5XFPsJWm 45nr4fZ6Yq3ynr9haVFPiPTv+z27Yq6s9R8C03r8R/2P7PfvirRa4psiVoNuZ69x9npirdZuX2F4 168jXj4049fbFWuVxT7CVoa/Eevb9nFVQVoK7HuBvirsVdirsVdirsVeb+aNT81Xn5gXOgLr3+H/ AC7YaRFrE89nbJLeToZpYp09ab1VjCekp+CIt8XXFUl/IX8zNb86an5gga/fVvLumLbnTdTu7SO0 vZWmeVSJVgb0WC+hsQincVA6Yq9ixV2KuxVi/n7zXfeXNNhubS1Fy0zsjVqeFFLcuIpWgB2rmt7R 1k8IHDXq6lzNHp45SQTyY7+Wn5o3vmrU5LB4VliiRne9VDEKqaFOHJ+lRmPotbmlkEJ0b+f6nJ1u ihjjxB6Vm6dU7FXYqw/8x/O175U05LuG0M8TBjLMo5mMLT4uFV5dRtXpmdotKM0qJpxNVqDjGwS/ 8qvzOk87peFbZkgs+IF2y+n6rMSCAnJ6caeO+T12iGGqPNGm1EpkgiiHoGa5zHYq7FXYq7FXYq7F XYqwj8zfKXljzFZol7qy6BrkEUg0zWI5kiuIklAWVSrMglhk+zJG3wn2NDiqK/LPyf5J8p+X10ny q8M8KFWvLtJElmmlK7PM6d+P2RsANlAGKstxV2KuxVKvMtrol1p31fV5o7eCRwsMskixESkHjwZi PipXbMbVaWOaHDJtw5pY5WEj/L/y55T0FJbbSr+G+v5ecs7pLG7lC+/wRmgUMadOuU6PQjD6ieKf f5N2q1csvkGY5nuI7FXYqkvmqy0G+shZ6tcRW3rcxbvJIqNXjRuIYjl8J+IeHXLcOaWOVhqzYY5B RQHkDQfKOhaWNM8v3MN0YVX6xJHKkrmtSpbgTSu5GT1OplmlckYcEcYoMpzHbnYq7FXYq7FXYq7F XYqxvzP5QGt3UUzNZmNRHHPDd2MF36kSM7tHzl3UFzGw8Cvvsqq+UfKv+H4bkNJayzXb+rcTWtlB Y+pJyb45BD9tuBRKn+WvfFU/xV2KuxVKfMWhtrEFrEJIIxb3AncXFtHdqy+m8bIqyfYJEn2xvSo6 E4qlXlbyTNo1/DfTz2U9wlkbKWS2063s5GrKJRSWL4hGvxUj6VPLrirK8VdirsVY/wCbPLFzraxt bXFrbzwwXEMb3VlDe0M/p7j1acV4xlWUbNXf7IxVb5a8opompajeI1pS+EKhbaxgtHCwRiNRLLF8 UvGnwcvsjYYqyLFXYq7FXYq7FWnUOvE1ofAkH7xQ4q+L/wA8Pzt/NTy9+a3mDR9G8wz2em2c8Ytr ZUhZUDQRuQC6MacmJ3OKsE/6GM/OulP8VXPSn93b9/8Anniqd6R+bP8Azklq9jJqNnrd3+i4jwl1 OdbS2s1cfsNdTpFCGP8ALzqcVU9d/OL/AJyP0Fojq+tX1rFPVra4aG3a3mH80M6RtFKvujEYqlH/ AEMZ+df/AFNVz0p/d2//AFTxVv8A6GN/Oytf8VXHUH+7t+3/ADzxVr/oY386/wDqarnv/uu37/8A PPFV8f8AzkP+eEzenF5nunY0ACxQE/hHgMgObKMDI0Batd/n9+fNnJxuvMV5A9a0eGBf1xZGGSMu RtlPFKH1CkN/0MZ+df8A1NVz3H93b9/+eeTa3f8AQxn51/8AU1XPb/ddv2/554q3/wBDG/nX/wBT Vcda/wB3b9/+eeKtx/8AOQ/53yEJH5ounY7ACKAn/k3lmPFOZqIJQSBzXz/85CfnnA5SfzNdxPtV WhgU7exiw5MM4fUCERkDyUv+hjfzr/6mq57/AO67fv8A888qZMx/J788PzW138zfLuj6t5iuLrTb 26WG6t2SFQ6FSackRWHTqDir7bxV2KuxV2Kvz2/5yR/8nb5p/wCM8P8A1DRYq80xVn/lqzn84+Wd I8q2jpLq2jahd3cGmu3CS6tb1Lb1I7YmgeSJrV3MdQxDfByNRirIv+ciPMHkt7/TvKfkyGC30XQp J5HiteJi9eeOCNgZFLeq6/V/ifk25pyJrirx7FXYq7FWXflfrOl6X5oik1OQw20qMgnXrHIQfTf6 G6+2a/tLDKeL07kOw7PzCEyD1Tz809ftbyzgtXvvr+peqzSSD7KQD7A37nrmN2ZgIkTXDH9Ll9p5 o8PAObzXNy6R2KuxVl/5aazpema3K1/O9oZoGjtL6P7UE5IKybb0+Hi1N6E9embjsnOIkwPVwdfi lKGzXn3Wk1GS39S8a/v92u7lzyIPRUDdwq0y7tjPGhjHMGyw0OIizVDoxHNC7F6B+QP/AJOTyn/z HL/xFsVfopirsVdirsVfnt/zkj/5O3zT/wAZ4f8AqGixV5pirMPJflnRdTsZrzUF1PlbyM5l0+ON 0SCAIZGYua8+UqBabb7kYqhvPHl/Q9Jk09tHe8eG6gDzi+RUdJqKxjHBQrBVdfiBNa4qxjFXYq7F WQ+StC07WNQuotQS8e2trY3Dmx9EyKBLGjOwmKgqqyE0G5NPc4qm/nLyj5f0jRpLiy/SaanbX4sr yG+W29JVMchBDQuzcy8LbUoAOtcVYPirsVdirK/I/lS08wfWEmivZphPbW9utl6FAZ/VZi/rMvRY TxC9e5GKqvnXyromkaRpV/pw1BX1Brj1FvxbhOEUpSMxNCzFiQp51Aodt+uKsPxV6B+QP/k5PKf/ ADHL/wARbFX6KYq7FXYq07FVqFLH+UUr+JAxV8k/nH/zjb+Z/mv8y9c8waRb2radfyxvbtLcojlU hSMkrQ03Q4qwz/oUT85f+WWx/wCktP6Yqvi/5xL/ADsir6UNpHUEHjeKNm6jYe2KtN/ziP8AnQ9O dvZNTYVvFP8ADFVv/Qon5y/8stj/ANJaf0xV3/Qof5y/8stj/wBJaf0xV3/Qof5y/wDLLY/9Jaf0 xV3/AEKJ+cv/ACy2P/SWn9MVbb/nEX852Ys1vZMzGrMbtCST3O2Ktf8AQon5y/8ALLY/9Jaf0xV3 /Qon5y/8stj/ANJaf0xV3/Qof5y/8stj/wBJaf0xVw/5xF/OdSGFtZAjcEXaVB+7FXf9Ch/nL/yy 2P8A0lp/TFXf9Ch/nL/yy2P/AElp/TFWV/lV/wA40fmn5Z/MPQdf1O1tRYadcia49K5R34hSPhXa p3xV9f4q7FXYq7FXYq07pGjSSMERAWd2NAANySTirD3/ADi/K9L02beZbHmriJ5xJW2WQ7+m10B9 XV9vsl64qyhdU0xkSRbuEpIgljcSIQyNuHBrup8cVVILq1n5ehMkvGnLgwalelaHviqrirsVQD+Y NDS6Fo99ALg0HpF1rU7j9WWDDOrph4sbq0TJfWUZAkuI0JXmAzqKr/NuemVs24Ly0uCRBPHKV+0E ZWpXxocVVcVWySxxIXkcIi9WYgAfScjKYiLJoJAJ2CX2vmby/d3L21tqEEs6GjRq4rWtP15jQ12G RoSF/jl3t0tNkAsxKKbUdPRmV7mJWU8WUuoIbwIr1zLaFWGeCdPUhkWVOnJCGFR7jFV+KuxV2Kux V2KuxVD6jY2+oafc2FwOVvdxPBMvikilGH3HFXy95y1Dz43lvyp+TegWM9jr9sn1TXrOOBFhvLS2 SNY7uK4I9P0JSGaRuQPKqtvsVXtSflytta6VYDSNJv7Wws7DTpJ7lZPrLW9sY45VrTiU9PmwQmha lRiqc+T/AC3caPPfTTWOn2TXqwGQacZgrSxeopqknwoqxlAvEeNegxVk2KuZQylTuCKEYq+dvNn5 Y+cLnztb2OnzXUOm3jyS3kcbkW/EMTUGooH5DkNtwe2dNg12MYrNWHRz0s+MiufXuereYfJb6hcq /wCi9Nvoja21nNLdNMtwYopJHljUpRQlXVgK/Ea8ui5zcjZJd3EUKRHk3yf+gtQ1C7FhYWLX6QCU ae9xwZ4lpQRSn0o0XcIEXpkUsrxVK/NGlSat5fv9Ojp6tzCyRljQcu2+YutwHLiMRz/UbbtPk4Ji ReM+S/InmKTz4Dc/WBpemSK5jnJCqaE0r+1tsPpzm9LgOSQjw0QRxfjzd7qdTAYrB3I2ehTeR5JN XhupNE0WSNb57ySdxM8xaS4nLyuGHGSQW5i4cqhHLcaKFzrnnE48i+XG8u+X4tL+rW9osTc1t7SW 4miUuqtJxa5LSbyl6e1O9cVZBirsVdirsVad0ReTsFUdSTQb7YqgLvzDoFnMYLvU7S3nX7UUs8aO K/5LMDiqj/i7yp/1erD/AKSYf+asVa/xZ5S5cv0zYcqU5fWYa0Pb7WKt/wCLvKn/AFerD/pJh/5q xV3+LvKn/V6sP+kmH/mrFXf4u8qf9Xqw/wCkmH/mrFXf4u8qf9Xqw/6SYf8AmrFXf4u8p9f01Yf9 JMP/ADVirv8AF3lT/q9WH/STD/zVirv8XeVP+r1Yf9JMP/NWKu/xd5U/6vVh/wBJMP8AzVirv8Xe VP8Aq9WH/STD/wA1Yq7/ABb5T/6vVhvv/vTD/wA1Yq7/ABd5U/6vVh/0kw/81Yq7/F3lT/q9WH/S TD/zViqrbeZPLt1KIrbVLOeUgkRxzxO1B1NFYnFUxxV2KuxV2KvhX/nLz/yctz/zA2n/ABE4q8Vx V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvYP+cT/APyduj/8YLz/AKhpMVfemKuxV2KuxV8K/wDO Xn/k5bn/AJgbT/iJxV5BpMFlPqtlBfSNDZSzxJdTJTkkTOA7LXaoWpxV7D5Z/LvSfMHnTXvKum+V IjpXlp7hNX1O51KdNQUW0jRmRZFX6vyYxtxQWZG/xHoQqg7L8t/yvU6mdSuvMfoWOoajEt7ZWPr2 xs7Bm4s0yxlfWeNGc/sKAeRWm5AYkljv5oeTfKXl610eXQJNXM16bldQttYtXtngeL0jHGrekkUj cJav6buBt2IqkLE2wHAybFK79MIq91ehw/l/oSaNaNdTXh1TUIkntGijQ2/BlY8SeVTQr8TbUodj nSx7KxEV9t7/AKnVT10xI0BQQnlbyp5PvdPEuszawk6308M0un2X1i2S0t4o2Z/U6mYvLTh0AoWI qK89mgIzMRyBdnE2AVLz55Y8paTp+m3WgXOpyyXLzpewanatbNCY2pGoYL6TsRXlwkbidvfKmTC8 VRujWKX+qW1k7+mtxII+e23I0rvlWaZhAyHRu0+MTmInq9E80flp5e0/TLn6m92t/psRkvTMqiMg GlRQmnTpv881Gm7QySkL4eGXJ2+bs/GIE9yF03yd+XjaU13qE/mFJobGGeX0bBTC9zJEs8yxyOQB DDFNGzO9CQwKhgV5bx0THPzB0HQ9C8yzWGh3F3daaqKYri/t5LSdmFVlDQyJGV4SKy9+njsFWef8 4n/+Tt0f/jBef9Q0mKvvTFXYq7FXYq+Ff+cvP/Jy3P8AzA2n/ETirxXFXpGk/nXrGl6LfrZ2UUPm jUUS3uvMSMyvLAvI8pYB+7e4BbaY/NgXAcKsKt/M3mO2tZLSDVLuO0lWVZbZZ5BEwnRkl5JXieay MG23qcbRSnqeva5qvD9Kajc3/plmj+tTSTcWcKrFeZahYRqD8h4YrSAxS7FU8g85eYIdLTTUuW+r wh1gruY1k+2qE9A2bKHamSOPh697iz0eOUuIhAWutaxaRGG1vp4IWLloo5XVCZAA5Kg0PIItfGg8 M1pLlLLzVdUvVRLy8nuVQsyLNI8gVnNWIDE0LHriqFxVdHI8UiyRsVdCCrDqCMBFiimMiDYZHrX5 geYtX08WV3PVGVVuHH2peGy8jmHh0GPHLiA/Y5mbXTnHh+fmlK69ri27Ww1C5Fu6GNofVfgUKJEV 41pQxwon+qoHQZmuEoXt/fX07XF9cy3Vw1S007tI5LMWNWYk7sxPzxV6x/zif/5O3R/+MF5/1DSY q+9MVdirsVdir4W/5y6+P85briR8Njag7gUISvf2OKvF/TbxXt+0vf6cVd6TVpVetPtL2+nFWuDU rUdK9R/XFW/SatKr1p9pf64q7028R3P2h2+nFXem3ivb9pe/04q70mrSq9SPtL2+nFWvTalajpX7 Q/rirfpNWlV60+0v9cVd6beI6E/aHb6cVd6TeK9v2l7/AE4q702rSq9x9pe304q16bUrUdAftDv9 OKt+k1aVXrT7S/PxxV6h/wA406zpWifnBo99qt1HaWhS4i9aQ7epNC0ca7V3Z2AGKv0BBqK+OKux V2KuxV8T/wDOX9gr/m0kiKFMmmWxkIABZg8q1PiaADFXiH6OfFXfo58Vd+jnxV36OfFXfo58Vd+j nxV36OfFUXqXl+SxuFgLh2MaO1OxdQSv0YqhP0c+Ku/Rz4q79HPirv0c+Ku/Rz4q79HPiqa+VdPY eaNHPhfWx/5LLir9MsVdirsVdir5h/5yP/L7zdr/AOYMd9pOjXd/aiwhiM9vC0ic1eQlagdRyGKv LP8AlTn5jf8AUsaj/wBI0n9MCu/5U5+Y3/Usaj/0jSf0xV3/ACpz8xv+pY1H/pGk/pirv+VOfmN/ 1LGo/wDSNJ/TFXf8qc/Mb/qWNR/6RpP6Yq7/AJU5+Y3/AFLGo/8ASNJ/TFVZPyo/NCNAieXdTVR0 At5KfqwqtuPyk/My4k9Sby3qTvQCptn6D6MCqf8Aypz8xv8AqWNR/wCkaT+mKu/5U5+Y3/Usaj/0 jSf0xV3/ACpz8xv+pY1H/pGk/pirv+VOfmN/1LGo/wDSNJ/TFXf8qc/Mb/qWNR/6RpP6Yq7/AJU5 +Y3/AFLGo/8ASNJ/TFUfoH5RfmDBr2mzS+W9QSKK6hd3a3cBVWRSSTTtir7iwq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FX/2Q== uuid:DD67F312D854DD118B9382D307AB9C37 uuid:fa8227e6-2d2d-46a0-81c6-fc1dace5fe03 uuid:DC67F312D854DD118B9382D307AB9C37 uuid:DA67F312D854DD118B9382D307AB9C37 3 1 False False 29.999999 45.000001 Centimeters MyriadPro-Light Myriad Pro Light Open Type OTF 1.006;PS 001.000;Core 1.0.23;hotunix 1.28 False MyriadPro-Light.otf MyriadPro-Bold Myriad Pro Bold Open Type Version 2.007;PS 002.000;Core 1.0.38;makeotf.lib1.7.9032 False MyriadPro-Bold.otf MyriadPro-Regular Myriad Pro Regular Open Type Version 2.007;PS 002.000;Core 1.0.38;makeotf.lib1.7.9032 False MyriadPro-Regular.otf Cyan Magenta Yellow Black Default Swatch Group 0 R=46 G=49 B=146 RGB PROCESS 46 49 146 R=4 G=3 B=105 1 RGB PROCESS 4 3 105 R=24 G=103 B=195 1 RGB PROCESS 24 103 195 R=144 G=211 B=255 1 RGB PROCESS 144 211 255 R=175 G=238 B=255 1 RGB PROCESS 175 238 255 R=154 G=195 B=233 1 RGB PROCESS 154 195 233 R=120 G=25 B=15 1 RGB PROCESS 120 25 15 R=4 G=3 B=105 2 RGB PROCESS 4 3 105 R=24 G=103 B=195 2 RGB PROCESS 24 103 195 R=19 G=76 B=171 1 RGB PROCESS 19 76 171 Adobe PDF library 8.00 endstream endobj 2 0 obj <> endobj 334 0 obj <> endobj 337 0 obj <> endobj 340 0 obj <> endobj 343 0 obj <> endobj 346 0 obj <> endobj 349 0 obj <> endobj 359 0 obj <> endobj 362 0 obj <> endobj 408 0 obj <> endobj 435 0 obj <> endobj 436 0 obj [/View/Design] endobj 437 0 obj <>>> endobj 409 0 obj [/View/Design] endobj 410 0 obj <>>> endobj 363 0 obj [/View/Design] endobj 364 0 obj <>>> endobj 360 0 obj [/View/Design] endobj 361 0 obj <>>> endobj 350 0 obj [/View/Design] endobj 351 0 obj <>>> endobj 347 0 obj [/View/Design] endobj 348 0 obj <>>> endobj 344 0 obj [/View/Design] endobj 345 0 obj <>>> endobj 341 0 obj [/View/Design] endobj 342 0 obj <>>> endobj 338 0 obj [/View/Design] endobj 339 0 obj <>>> endobj 335 0 obj [/View/Design] endobj 336 0 obj <>>> endobj 333 0 obj [435 0 R 408 0 R 362 0 R 359 0 R 349 0 R 346 0 R 343 0 R 340 0 R 337 0 R 334 0 R] endobj 5 0 obj <>/ArtBox[0.0 0.0 850.394 1226.66]/MediaBox[0.0 0.0 850.394 1275.59]/Thumb 451 0 R/TrimBox[0.0 0.0 850.394 1275.59]/Resources<>/Shading<>/Font<>/ProcSet[/PDF/Text]/Properties<>/ExtGState<>>>/Type/Page/LastModified(D:20080718165234+02'00')>> endobj 444 0 obj <>stream H‰ÜWÍη¼ïSÌ ìˆÍ^-;9àC|ÿK)ä÷RÕä=;»F,ßß¶‹²HvõÏ»¼ßÞýüÞm?üø~»ýô3þ¼ë\!…ŠW(uèëÍmâKÚS“­&·‡·ûD¾ýëöÏíߘõî￸íãï·wûâ¶ÿsûpZ,_×/úð=;Hßá„ù'Xx‚Å'Xz‚åŽ}¸¹]ê†?Íão*aûö‘ó„ó¾n²9ü'8AÝ[•­‰ßS­m{ûrãÈ—ÛÝíÎqÚçæÔ„Ãù˜÷š ñ’pÜ {±H«{ŒàÓí7R›¥šö(òt§ËÇ÷ë÷ ‰Åïq¯ ÎÃVªÛ«Çk¬½¤µ=dÁÊ’vqºÛæ¹86ÊaOžú¸>#ÏÎ;9`Xvç[}ràû<1÷ n÷ºÖuø{nÓÞÝ…–v_åzŸO ?¼âïô›ËžO˜]ù÷Í­ kW¡S6pl·éçy ÑǶW2üM¥êæ€r K Pþ/e¯5û˜Šýé¶èñÒ!8W* ÖEjI<î¿nï~ùä¶ß?m?ýº©ä¶ü!..ém( ·7Ÿ Æ¢ÂôAÈ|]i䕺â·Ú ÛŠöNkˆø(V¯»ç\ôŠï G§¹ÃkÓÇîsïªO÷Yö‚™ñø–1G¸¾ácfÁÊkã€hGÇ€…«àî±¼t$îÅEZkDàù”wðD ë¼<ÙÐé©ÐM«Ùt“ÖØáSÀ%·­¹¼§˜° oÕ!ú5){VzÑá+<Á1‡ÔTËVKE¤Ô9ã+8)\"^4§fæ|2þãùÌÉg<Op7öXÊGÏ—•=åN5=HŒ}5|ñ\¾ðô!Áëàߪ ™ìÄ—‹²“]ðÈkΧ“w{ÙcN®‚¸ùéÈEFÁ@NrþL.y„2mà1¸Â~½Œr<™¸4È)B¯ê— -Šƒ6K’Èá]Z…Ke¼¯@5.{ ùü{ÍQ=JŽR¡ÔäSh¯ƒ©@u†ñÂç/;5;éEHFj²G8yL{„»dÜ{ƒˆÁOg~Ž Ý²†nܳ ÁkÏ×Ìì T*ÜÂG¬v‡w:"Ù†—#fâ˜È:J¨Ð B+Ä1/<†ŸÌ Ô Ç'é¦6È€£"PBxì;6Áõh‹T öµ4Úb1G'‹9XŒù‡9|pˆø”×xpÐùgP­„óEÇèd€PQ莧{0æø¤àV çk3 $wn>IèœÅbO N—Êks|²ˆ¢ú?±8‘øß PzFÀ+ÃÛ]bÀ…âºLÏÁxÁÛû.S¸pF B¤ÚHjC.NS&Ñ7ý!@qˆ˜f@æ ™k›6çãRZ™ÈgƒàÔÉ+2h^€ˆgF@EÖ £3ç 5qåjú¬6ÔÜm”"oú=A‘ñEFµGÕ€ÚÑõ‹”ˆ—¢H‹}†Hgéj>Ù^Ž=ˆð9|óƒæðdºfP3ñuS¡]òú™U$µ~ÐQ»ñ=P€ûM¯*»…ôË«Î~ã5ÅkꛆdvÕGOyò:œâ mmìMS²©1$ ,ñã5œ­mQQ[¹^×ðgCZZÛìÀÙÒiÐg¬ö§°2нøi9l¦ïaßYu é",ŸH6+jØ®quøKý·0#Ž#z)–‹ ªúІ >ápU<¿§  ÷ôxaJ@áEm—ió¨0Ñ€ü¦‹W)AtF’ªvŽMíó´ù…gj™Ègƒà©:p0½CCü$ë'Pæ ÐLmjJÍã{Õ‘觤húT§¤h»œ¤i÷Z”íRò””µ»¤dIÊ"ê›\³–廨U\³Þí5O÷×sÈ’ìrR.Êg+(1Û/°U³bÄK†Ó–xs †T÷‰EzÙKP¨ÒMÔ»3ƒέ¹ Ýω £ª£-  s ôb2b¡š…¹£›oººÔ¶ÆcOÇ×Óäêo7H­›ý±Å®îôiÍîc|pë_Ÿ¸¿£GL{fÁô§Ã‡<šß@Ò)€„¿@Jtlù:# +%£œp*º™’'2Rrƒié)f‘dS2Ôü+'ÃRWR†-q¥à7­HJJ6)OdæàÉôŠ#ÑÓàóŒ ‰>$+„Ў͆ Þ„Äkk+„ ã«ç$—¸BìTê !Æ!d &„DÕÈ5k]jeŸy!¬à‚Q¼ÄDØ6¦ô7Ñ.fE Þ ´£"°ó9ŠðáGâc,ÞË~––™<ž§¡5]9•ûX¯.Û4vEoÖTrP˜á$Eºœ˜†î™×òf—̲4rÔ¶‰X$â‹_3¸s…hVxÜAäÅàBññ  l9ð´—{Š,LHVèÝ|ñºRÕzµ{®ä´Ž—ÈAËkL?ÎëãëÁ:@Ò!~„x98Ú—Ø*„y’–²¹_NìO 1®AÕwÖGÐk¸œ€?ßÐwÙ«ˆN?éÌŸ'½h»æàÑïŠÐûÓ}® GÃSù`éšOäì½1Á×è"1çÍç>(’Omíuó)Ø*z~ spîÏÿºç›Ãs{L`áþ²ã“MéUÛ¹†'¨+åôšÂŸ‚ôÊÿ%‰F=ԿѤ¯1>³|£›¼&ÐskÜâÔÅ€”mæÓJ\0}^y«q÷lÒVE²uÑd­ )jò»#CU¶yéd‡2mZq¦+X¾Ù‚ÀhSŸìÜ*wáâuŒöT€ø‘©`&¿j]cö<5€•¦ À³p¹°ê\n—ªÉ¤SÚL'J~ež»ÙÅË“žx÷²¾ÌjCµÍ°©‰ïšWf¯~P5æ³¼„nX¿£à{Õ/ž~þ™~ñ/–{¨ñqàxÖ‹7ýâ1aõ‹"¸² «_´ûEÚI«áÞ/ÒZþý"$ûEnÒüêi—äM¿ÈàòB>d´‡‹éRá'.Ëüà¾à:eÊGícÕÄž© Ú= t ÑŽ£?ì"2:jˆ¦Ô8Edí®¢Y2²Ÿ@—l«7£Íc97‘2¤Fï׃Œ¢žÚ­ Šï*çbäD¤fûM<É“¶oí´+¯ÍÐên±h/{‰J|°ñM{F1M£°Ù-¶k´?ÚE¯GÛB.(­®¶‘@jÙŽ÷ q|¾ìÞÚY„½Ÿ]±Ún £% ã‹_ÿü|‚sï(ŽZþ?%.ü$”ÌÔ{L˜¹—ATùÉw!=ûҾ闦xoò/×l£—d¦]üê i'Ó'ò ÄžL^È‘sÓ+r„ŽHyø „K¢ñkÆÚ)ÛX$ÛX;ÚXÛFqÄ’ÈŠNV0‰¨ŽkZÁÄØ#˜ ă¨*¹f[‰P;)VÖ¬ÂB]ÂçIb[¶ .ýQbn6˜É6˜À®Å(>ìiϬ)c±ê~±X/{ÅÔìôODhüix‹oÒ t©ÛF/á%4§/G)ø.6†Bx»ë-Š&:–³UO3æß#U£ÝÜ‘ÀœñØN•„Ú&haÁ"šª™›#¤ mJ Unîž­cGp/ÿe½jråÌmàÞ§è ØÑ/%mäYdö½˜YéÔR÷”‡ÐKi‡¶4ð±Ð1Ñí¾_–Ƈ^P¢r½Ìê3áS7hZ+l|,8??˜<¿xKìýá@ò}c瀎ÿæç÷ ž7‡ ]Ii· ?Â!ñþ©‹äŸdh·òÎ"V”׸ÕdêÑôÛEùXfU&®š‚Z• sè®,Ó9q•en1b´ªKÜŠ«Ê­€uJweùXv6?ß ›7ðI0Þ߆8ŒH #È q‰žI ;.Ç$À♸ÜL‹JëÍ$Àì6I^L²,ŽIœE3²èKX²û»‰„Ê,¹¤çA<‘àÜžXžzUâhc^^÷D‚' âÈ 8uñ»òÕC;~­¨0·>D2ûHäø,ôlîØ „Ñ@‰teæÙ4vê©e5–7ææð5º-s>B3…çxéŒ\ÛËÄýêðü®²zH‡×c°³6(_mF5%U"L¾g{Z-í½Øï[eøâ\x #(RzAÿ3,ß ìÁQÒq³%eª£ÏzÊDIWõ±«ªß–Êž÷™-jªzq,ÛÒ”sãÕ¹ÕáÆAÞå Gœ¯ÿ=ç„ÌÛ±@Jfl†F‘ˆ[†¢þÌãiðØÞ|×îhäËãmY§¢ˆDf¶ö‰Ç_g“  ’ä(Pûð?ÝmÆ$Å0ŠnrUògþJgK xlDñìG€"xô@ªgO9ÇÑcŸõè«Ãw|0þ@=̶ß^FƒjŸ¹ï÷ßI"„nÍùÞjÒNÓ¯õû¶¥zËÞéÓ¥0šVÎu¢…ïlü'º™b²É¦Lc[íyZ„]Vóü’‡ª²Y£Fôs ˆ­'·Îû $¢óp'¨ƒ*úÇN‘ZÕ²ƒ…ó`>m 2÷DUÇ¿ÿüªTQ„¼œÓu%>Ò·¢Åû £pV-Ö œ±&Ñ.K«jÀÿ¸#Öû=i”ÐÐîBÝ9Ä‹qè—TíAÂQ±½Ü8£æ„Y–kþva› hKq®b>èüËfm¨÷=lÔ<ȸÙZ_®Á¹°Ç }†½¿†x;¡1w|Ð)lj=j>°Nÿ køx…ë]\ûkyA„VÑb¶|j‘d-Ÿˆ)N>ÑÂ_;¡šê°a åñL(³XBËŒM]³Yä²¢ŸÐ¦e¬Œ«ª±š~¸“ƒ8ç슗Õkv ÅG Õ3¤Å­9ƒõÚ•ÊBŽ[+*Ìë}JµÔ/ÞCü¥´ã[ëh[è2^šŠåc)pˆxèíàîA;\1÷bø©{4-gÆXx®ppTÎ?(…ö8 Pòø-&~~9NìÛɵÀ}ŠçM&)›ªü8™ÄWøWè¤^t’’N çÊ;X}ÞãVž©DspÕgo`&®±X&Ρ» ­B6D«ÐÜcÄh˜¸W [ý”î*ô±ì‚l޾Œ=ðM8%`[â8|RFŽOˆKô„K÷„往 p¹ Û8¶xÅáE(ÛrÅ,+5¹f·Äª7ŸP§%—û<‡çœÛóËS/K{ÌëëžOðhAG§.~W>|hæÖŽ‹í´aÏ'QÛ©8Ñ„àï-’moYËÆø&¹©`¼Ó[§°Çôó/™"Â4¦Þû„øäãràô gt{p,Ë…»O°áíAdïB=³\xk"»ÏôÉØ mŸp™¯à¶_ö{œߟÿÞ½T¼»»ÿ»A8Ãæ@Iдõsö¸¹€¶%åú>t0Ò`Ø@]@?+GA{™²Ç(]´ª†Òä6ä<€½-±Þ;¡È Jþ0”:y ƒÅ“LØ—ƒ„)Ÿ_:’)3|Cb—ðq|ÅìÑç%ÔÛÛ1Nù5PÞ€Òþ|ŒéÀRk -  t 9FFˆou—ôt0HšÞå®ã5‰Â ³ƒRÆœ®Ü~Kêý1p·¦Uv+¢»ñêÓô,¨°Á^uyž’ùyl6D êŇƒ?ˆS<¾K²ÅøllãÖV|T•3Ó‘ýäÓK‡xˆWõÝ)÷¾/<ý´ú¿~þˆúÿÉr‘nEYÙ%Kròß&Ì`$d¼ .¹q¥þbaí"®,'²âœæxFæ>õ ¦?-5‹›PöÈ%â†SlüTâÉr,ÇÒqÂÔÕ²]}·ìDáWAâ«%'³DÜØØéÂË&þõU²#YnïõùÙ#JÔv5à0|˜¹0=‡jÆÿ8‚Úør´á“Ñ@×#SKH"ƒÁµ†¥=-ž¢=adm­É¥=±í¢)Mwy{$Ñöì,òž¹gìi‡/ílýêˆnÚuæƒßN¡m§O-Z].ñ®J©.›èiÅÏI—ì¤{w{òݤ ñ1ONIŒn3ù/NÿKdÏ8»´4?œG­U€YÛÐ h¹¢ô¶íOÛ#÷r1 Ä\`™c‡Ïï¡Ä: ?«ßbØŸÄqP®§¸ê¨„ Õˆÿw:Q\é :ÙµwØÅ—’@StÕ×{X~i§Øwý¥'p˜«vɻӮ1ïK;çcs¨$W„gVÝõɱ¹C™!ñÑ“ÒauñÍ»¦‹gxŠgØêÙDù´êÙžÐäЉrf>tâìI'ËsèÄyæ¦I;wa'©'µ©ÂR;©Ïch?ÔÛÓËx-ÝÓ <ÅÓ ìVEñYÝŽyhÅ|Ì—ZЂm 嵐ŒYƒÄÞ]GV%ôW–.±ƒ¥­Rë}$ÇÞ‰ƒ ÿúˆèZ£1ÂÞ훓u5Ðsˆ=û&wfT´ þÚŽ{Ä.­M €ÞÁÁ8wOøäÕv’3Ä1˜ _ÎPÂÃËYع¢Z@pƒ³ã›ç¡ëÑdˆÔ=ÿ#õ˹¥u£ÿÅnÁà’ME0â7!Æ=`ç¥XØÉ“Ï·;Vz¼®Çû¼Üx=Žý&¯ï7¤×÷»N\¨¼ƒþ> ÇE査Héh÷x‘5#dÎçÞt_ãûuÞ¿éϾÄYãu÷çw?…ÂÜ(ýŽfŸ“1›Æ¢(évô$#+Çç gØ mÊWŽìªåí˜}gÈu¾Hô{H8óߦP Ò0{X( `¹{7®´eàJÙ¨ ™€Ú¿ÍÈÏÂÊ¢_zªnúb*äb¹´<ÊB›Geï(Æ’Ë{´HXØØ´åQwîÛÙOhEPS°‹ šE„"b i!ë猱ÑÍí›J´Ó(Jð]о…|£ò,6chÆ[˜‚ 8“³#òqõÈQD4ŠZç”ß? I¿ÅrAG:(æÏÅrLkü°~Þ îž)0!Œñâ‘”õî"ÖïC›”þpÉ¡Ø6ŒŠbÀ(ó7Q/8²ˆÇ³ìHF‰Œ!¿rl ìxCü+ (F¿ Ò,¦®ÙËÞa q²È˜¿ƒ˜ú¸h€Ä’CªÒòàQ¦ì¨jvbŒÀaØ‚ã}Z¼ÕBO³K ÏìeC;©n›3²õËóå<Åp|9¬ÏdCÖ9+µôèÑ3ÆìЇ]Åì˜ÇïEâÄ""Ã8B­31ÛÎÏÒ6~ÇuZjh­,äbÆ…k+½Íâ?f˜Çj™Q÷öTpâØDIåÜ¥ŽMy Øøž0íÚá!ŒU†Mq°ìñ,öpÓóe…,>sð7Š[;_»âñ“:\íw»œì±yÔ‚2{Sh©afçˆO$I(mµÂ¶öÁ¶¡ºþ ìK“Ù@n3XV “mél È®—A[qLMáâøÈIÆGÒ2ÏòªßÛ%ž•l_GV­3RÉŠ/\t`Ðvñ°ôßhfÖK˜ö°c6ô§M:<‰‰Mß(Rî$³YF–ýiD˜ Óóå<¡1›gA}öìªT—ñÑûI*Š©ÖNRÑNÕ'<©»¤‚C:I…ú:3yäìÊ\Z9Uü®™SΞ9µ<'§¶gÆ&׬rb—’*‰n¢jõÄ!°óv-—œÂmå˜}NUë Ý5U~ÖT+knS<½K`ëå`# ÁÄx¦¼ŸA¹:ÃÜêÂ#3uÁÚ2?.žÊÇbj¤6 mÖ§-oѶ~ž»í¹ÇæêŸÞ€ò,0kÀÚ`˜œ0¶_?pcúþç•EÐæ&± ó’Eòa‘üs,’¬¸ÏŸfùÙ$CÐ å„g“æjô°ktžkí=¬Ñ´M¿ÍM[jt5š«v6[³FÓ®VõF¦Å×h f9ºjôñ¬Š|°>{ypVÎòè‘3†¶®ØFš}614IŠtB{u²IB¥:¡cÑé„vN§D{{ÐÉöl:9ž‘—¶æI[š]|…&(©§BÛ1ä0í’™ð®T|¦gqM‘`²{/ÉwUÏ&öòᇠõ¶=›`†? Êa‘n~wé–ÐõÖ\™:¸P—nЯlo¬/a†Â-X#Ö’{£ªALC‹PB}­ñwa«Z8¦vhÃ↌´pÉŽò¥ ”‰<Ä>Ùä²= ‰* ª.wË×é¹g´uºÂ¨Ðç,Õ` Ú™k¡ */vÈêX_íŒ&¸€\V‹Ûxy6¸± »:t—xXÒƒ• ¶¡oˆa0H@ƒØ3ï&á–REåa5W‹ÖRøQø 9µÜDt ¨«ù¡_m–G-ð¹ñïîì13d’¯H ¤ÈB;íiº´§1ó&yQ¨-±/Ù›K‚¨¨b¨ÁªUΨ D0MmíàTQzDóå>Ã@¨]¢Ø$“"ÔN¡^2z{äX’Ÿ„ÓpçX˜p*’•MžÀ’ ñ´‰×PªñÎaTFi˜ˆ– RsZ¯ßnLBÄtM%RAéŒø7°cÆîx ˆ°Ñ`){¹Öá™à’ß¾³ èú¸FÁ«\¥ÿvCP=°»x°AC)#îÞÀFî@ %äÖ¤…ûö šˆÉÐ̘Áˆ8#ñìlÓPÐ{9”鑤sáÝ• ’ÀbB´‹%X(÷(¦*œÄv£¦<Ó¸ý¬>ÜQ-Àb˜óûGNè´˜P0Åq#6˜íZ`æ¤fØ`r¤‚?`æ” ˜LÙÿsl(^-=Þ‹:({Ä¢ÈG‹‘s/ ,¥dA‡ÅµƒÅX`PóMM<€I̱Á”À"®W0í†Ò=Pw ô‹^‡" yŒ×µ€™BO߯ÓSw'DÉ–ôâB^ŽŽ©µa&êD]`,5z¨ˆ2i.k f3dŽÙÈ„V¶)8ºJßž/ç –žgo2ð¾ruLÌ>òèJc­á¢#ZA £Gs,»@h Òôª&8B›kt,¦%¡¬Û>PLnLB_âpuvnpP”ÁÁEɘd.ð²Åí×ÕÕþÃ}•cÉn#A_§ÐªvçiCNË™û‘@.d±¾þ˜#§»2ˆ%äѧL;C¥ ÝL6ïëmÁ–ú€ƒ«ãg\@îëL r*3lÉxhéÔ6G˜†çÌË›½0Ÿ¼\öfTHj¨5v‚ð”‹C9w ÇBð$',Ì;Óà-¸ÜER¦´õ»½t (ö¿A)Ð]×2?ÜF~ ³!&Ð]Ô¢cŠF„Ï´joK¢T° té£Ñw¶k²7ô*øï )›r»$_ŸÒ0޲*ŒŽÐhf…¡p$„ûºB °W#×°ÁôvÈk¤)H: ¤0¨ŸŽÞ$-4MöÓC€”8 ËõáÐO„ ;SH~€,ß: X›w¨ô•²=7Ð[Öå9H„ïb9H ij3Á4ð3æ`¹™åô$ÐVn¯¼+ ò¼@Œ`YXøüŽqnN ò€–Q=UäPãôdâ±Gí1y³Æäó´”ã,4‹4⺈£^®{ŸÂÜ? ;A<»ÜîáOA‚ê®éÀPcW›’¤‡ü¡,ú Oml»€žâÃéÀ·ì”Ò ctk[ŵӷ»‡V'"ÅW‘ø¾Ó0ɼ±1꯮r?Ó÷¥€2öÛ‡r„DÔzÔÚ­Í7Û‹P¹üþ_ R¹¤r+Hõ Òýí«j;( ØcƒlºŽÈD6@3¯9‹ ŒŽø<ÈØ×A¦¢l€¨ŽõúÑÑËÎØÀ`I« `ß½}‚´ê $ÒYÆb6ˆÀLÝ >ÎPˆˆäÚ½‘­‚º ÑhýKd¨Õ!"5M¯Crt×·U‡.ÀªCyº@ÌbY¸‡:DgÒyᄎꅜ)rÞhÉ5Ö!¾CMg,D„Ϊßna]¾wé—½«Êlÿ4fìxâ ~£àÈò‘éœæ^’ü)}·p—ìCüg~á%¸—YVzUˆÁWELpÆ~™¢}~vЏ™KÕöÙƒW•3ú ÷ăá¼¹x?Ãݤšpà % ¯>…ÕO0¾Ê\µk¢t2­3]IÐŒù6ü[YÜÆ&¿¬›¥AŒ‡ýíàái^¹ÚI6‚vxâUårRŸGjv‚l¼ åÎVŸ€¬@Y@]»à²©¹çÉÀ°khmG£ÈË?1Ì5Í>£4 [±‡–ã!_ŒQ8Jå úÍ¿’er Ô…þŠH”I‡šV—Îʹ…^|î„~w' Ù^èŒí„}6/F•Ž¢^¬ñ'ÀÇÚ/.B?»¸ó~Õ°ïæ‰áý*úÅ‹‚p®ˆób1?l€ù¾öÑ ûl^°µù+/øêH­V‡h4̲vPÈg4—!WÁjæÜʉŽÙnÈ`ÿ€ &6ŽE³p ˜í[ÖÄVù̉ûoÈ¿“õv6'àEÑRù Yåè;À»ª{IÌ éÕ±sY6›#ìuxXëö¤¢8RÖˆ\ºØ9'2àLkûØ·äÄÀóÐ1r+Ú¤+´«\ÛÍfRQ/g?)¨o²&ü£Ý@©d×.æ(m»YÐO‰àAúÁ§=ŽiözÄ!ëþÆYéÆ5IgÆeW¡×àÖ sÛmìÞÉrGHårî÷À/äY}ñAù VÈ‹—b‡þfËPÔ?ððµ½”ºVáp·Ñ‹ì3ŒÑäcF‘3 ÷ÅçÅ!… Hœ%þèDZ~4<½rÈ =ÉØ‰‰EzJU6W™YvIJfàyãh¹÷ Âÿðˆº–û`C„=j{I ÝS€†ˆ¥™Ç²+pîÉ Rû[ •”ˆüAS%þÔÓ7À2i ŸóŽ„1bk>2·`¯£Xn™%äì^CnÁ®ù’[@ÒrkRß,·‚½sKÏ­€HbÍœBnqבc˜ˆ%Kžd„äÂý‘b†äÂuã’\|—’‹ÏÖš|ØtI.>ýÉ¥¡¡~Û“+“ðOD!^Qã\:~B5’¶ó÷9)%ÉÀ¥Y"î{[Úë¶¿e“žá#ö¦¶‚ÛÜãûˆ< ­›zÍöØö÷æE¡^®®ç¸ TÔ)4«Rþ•¥¤Õû|+-Ú³ý»6m2‰´[òjÚaÓ.é6¹›6ÍZ6í&=yõlÚ¥Ö‘i§Z6º4Ï -ÛíÐæç¢e„³Òw¤za!éa9ÐÂ"v«¡°-:«Ú#5+,´ë‘Ca! ¬……vjÍ K´›ÍÄ KD˜ ²æÌ–À´ÉÒ<Åůã°" '©ÍŠOº ïël¡®ðò,a Þ-°$ž{ö˦T"^W,0Ôí`{]IÔ;&™™ÿüÏ_&JË(~µE!o+A[p¶…Ú¢€#j Hݯ6©-‚Ú"8aÈöâY[/¶¶P/>k‹OaŸÍ‡­®7ñ®-‚[[\®âY[˜Ÿ´…û±ÅÃ'7ì³y±µÅ/¼ØÊ™ðQ[@ ¯GmA$ÕvAPE§k ÚÓ¤­ž‚´ P³K Ú%»´PÛ¥…".-`©%ñ𪢴¸!àŠ¨´»¹´ûˆÒBéÒ¢àbSwiAϤf“´ûÙ/ölQZðEj‰Ò‚HÏ.-hÓ¤ÍcFiQØ ºK Ú¹¹´PÛ¥…".-|Î’¾æ’q×%-Ü- uÛm죴XïñN6ý¾äÕ“´Ðˆu!QÕ-õRšK Úiº´(¹Ò‚À8\ZÐî‡K µ]Z(ò†5‚’x,“¶´¸!aŒJ Ë­--Bnmia¹µ¥…åÖ–!·¶´°ÜÚ2Ár+Ø;·ñÜ ˆé–Ä[Z„0ßÒÂaK K”--Brmi’kK Ÿ³¤…­¹¥EØuK óKCCý¶'—rx}…Ò¢€†G”¥"b‹K Ú-¹´PÛ¥…Ø›Ú j¯=\ZéÕ¥í:JØcÙ.-âõ{­p=Çiñ¯¨,JÀï¥å.-¼g+?ôžíÈêÙ*-VÏ^ÊÂ;¶* mÙª,´!oeá[u„wlC¬A››ˆVU7¤z]Qe¡uE•…×UZWTYh]QeáuE•…ÖU ZW¢=[T^W"ÂüTe¡ù«ÊÂ3\•…ÖUZ#TYx]ÙÊÂËŠ* Ÿ²”…/¹”EÜt) sËâb»ìPV˜STžb'ˆ VA‚ž †G*#pïÌ¡rE®¾ð09Ÿ+W8öÕ "Î3™­aÀJ€ØT® Dð[ü¶­]h4R­V®¥À«$ ²…d$Þ‹Y!CxîUUÊÛM·ÂûÅÌš6ñ” )šž&!Ÿc¸6T†jÏÛH½Ãöu²>Ø@üEýš~Cz›¿¿WßkΔžD"°OGÅ…žBo7»Vº_Õý./·{Ç»%{|º[=s A¢öÇ[¼GâºÅþ[·˜Ën±—ËÙýÒüÿÑ‘÷çüÝWK<…N’a—<̨¦¨fUD`OGÌÄ‚7%¹@‡Z¹ØÑyòÊÅõs‡1»ê˜=fJrìÙ¯†ãt‰Eˆ :oC’Ïÿ˜9•§ô½ÂA}^(DÇX«ªËÈ·éß6µ~/?9SsN{¢‹—ü°nâ¸"Lm¬Ö~‚•óŒ©ùC<Üïàõ¶§}V^p¡#,ô¶Õ›7·3Qglh Qˆ|‘—#=BØìs•Æ ÂÖÑ7È !¯äþ 4½âÊ×Dwã€ê_„ãA0V( &wòˆ'íðò䔸^×/^ $›úÕœP`û ÃÕýlŒŠ-«y°Æ_˜PAlÏîÁ>› Gÿb²^ï¡'l€y1É~®×P/^°ÿ ÓQ/öuÿ«ÒÆÉ¤>¹áÌ dG9Ưüೃ,Η{ä|Åâb À—s=òøêóX¤/ç ‚ccÚ­/›tœvº¾ÚÒdXu©#,æìËÌ!°{°9¡n>±GHó¤U˜«(Oú/íU’ãZr÷u ]@å™™Û|à ÷¾w/ô½°ï8‚ÌO*}¸öJ"_A&‡`ž»j¯Ïš·FåxæKˆeEYH”«RƒbB9¦Iû81 F˜´/錴9N†¡+ªØÀYá/·µ¡NrDŸ?.šOë‘cN“˜"õÒbÔ½ÛD X)LŠ–¢ÙQ'©3Qº,Ñ^¤Ôºæ;cûs^,'w¸Óˆ—ñê¥;L+*æ#Ó*£|®ÔVÄ-¸Áz‰ü4LÅ3LEí5 S‡§ô"ï *û¿œ–B[Ô—9Ý%ë4UtšŠÍ¦)×ÈmšbÌ‚Õ9EUp^ý“qȧÀÊjåšZhkd¾°RkÍ\1–…#iÅLLîñ¤ 1¢ÜIÞ!sÈ \•_£NØD Mf%FÄvDl×C[´‡œò—V+‹hÓ<œ¦èõU³3IÐN%?kÒ8¹¹sYÉE9wŸ] 8É%$ñ$äÄ:É%AòI.é6¯­är²%×Rœär T)ã2䜺uÂêõ$ƒÚw®47Ù%|ÕgòXráQtþ\ðfÑ%_U.éÌwOr0­¸X˜|’+vÄ@’í„`áñæÚº’U‰Œ(U»ÝÒÍÝ(0%Š/DY_tÊ_zyêY1ï\,Ñnøúðš2l…€ Y:W˜üõq@œ µpµâëZWšY¬ùÏ­+Åÿ½Ö•òêJûãu%„@è/ue·ì³`µì‡m¸–}4Ö²)wײ)Kì®eS“›¬–M1VÙ ™—Žy€µlXŒ‘¬¹–½5»Ao¨ßhV!¯½=k΃ÞTfú̲B¹Kqe…š¶Z ê åJÊ6ë å’«+Ô:bÖ•ÐÿDv]ñr³ S±ëŠ×0GõHúÌa½´&—åJáÂØu@ 9M›þ ¾iÓYöj³®ðUÂ8ëñd9»ãP¶ÆõB>»C´¢b!>ò©*˜¿>2jf$¥Ù,¤§HDiÕ+úÚÈilÆè£Àùµv·¤D\„ž§œ=‚(ŒE‡˜Üþ…ûÂí·X!9ÅT‡föÝɶÓ7c¨­¹DþG¦ÿòëí/ÿ=ßþóûí¯¿ÞþfèQ ‡Î²TXáÏ‹3XP ‘±Wh4Ûå´p£MRC§·Îß°E%6ÑÕãY:ÈÊÙ(ݨFðÉ~ “gd…†!00*I‚a¨µ:;æü„‘â"]¹Gº<ý?kòg޳(Ý‘?›ˆ¼ô;Àl=>£/¡E·‘Ëhußüã5‡˜f¢ìcá/ àZt&vÒ’·–&9͹êI Œ ív›4åkÈÿ&]êÄ ©mÖ›þÇ(¬ZÇRØÃQ«&ÂØÜÝfIOãœò‚9ÔørlO•D«A)5¿îœ<†I¨Wxeí¾5èż2’„ÜþýÛ8Ì'\RЄÑAîÙ˜;˜¡péúŠûµETš8˜ÕìrçãIx¤ö¦[°¹sÞÅ#–Æéàs ¤}R-¶üó£È0çêÚbß8¶fâX;Œý}ÃÀ{Uöð Ã6\P4´Â\ßûbß(º…¾x#:{Á†ÑHãÕrÁQɾÈ޹f9 †^øô, gÈY°0¦~Š£娓ÓeãtM9‚Zƒc-à—¢oÝ­Õ#¼G¼*8‹0œ†˜,(Ž”[2:VtRÔ€Óµ+)'19b¤œÌ° ÷­y jÚÓÒo4x¡©© õª¨g‰Ê“¯uR Œ±ï#T§(›óQ–d|-À­” ›¤„2wÄ9;1EµŽ„…ÓË2ÒÜ`öóAåQ鉋ÐÕawÖhü*yD[„.ÚŠQÛ"h43öq]5ÎäøÐ7ŠÃmhÒû<v^AÔâ¿òÊÉ3¯–fç•ShòÄ\O óÎ!>Ê*êè4ó€ÓÇØƒEÉÑå|¥Õ`çRâÙ€ÇëÍW4òü¬'ÉašQ±1ygVéàÒé:`©A®M+ÇûêÕúÜÒÀBØŒýIžBü’bå‰&ƒ­s}Ÿ7îíK¶ ¾>¼¦bÂ9 ËØ7ö &Ûa­8 í„«_ך2:ˆå75¥žšRÿ”šÒþ¿5¥¢x¤_jÊîÔgÁêÔä”٭ÚkØ«)×Tw¯¦œzv½šš ñj½š·ô´1EIÙµj²1|«ÞšÝ˜7Ôo4«‚p—B½jâYCÙ• e—jØ1VI¡{Ù%¥2•èJ 5-—UR(ªu³¤xÙJÊÖ¬’âLO=ñTB¸´M%mÒwP+â.›>Ø,(tTMñ*Z=b˜îŸçÅYVÏ|ó(ÒŽ‰‰ØÉ» àP„ nŠHDµŽ'פ'Ð(!™AÔbîrÉÆHC?‹²l È×ÈÌÿ L¾‡M(Ÿ }Êpª1œú9Ѥ¡O]áu+¸éI“PÑ)'ÒQvG0`ʦ ¹ ín¤2»Çm ÎàÓ'$‘Aòj’µIÛ…”w» /x÷ ±ûŸ¬RÜíCq˜íÆÚ=èG¶ ®{(ãîÚìjï«y8­CC&)5_q•4M<œ*Ͱq$e>=ñ‰Öæ¶ܸ…‰ â…ÙY±zެ¼1Ž8„¤8@¢¸gwø¡R¥ ±,ŸÎ’±†–;‡é«åRe©ûdhC,²ˆkµÈ"WdÁR«‹,`äE‹,ÊZ¹" ‰WebE‹¯Ð-²^‘µ-Y΢.Ê%³˜ sÓQ½“ÃQ¶0`Á8\h|…n«…+´`¹Ù¡N»5ù®ù -Xd8^Û36o‡-´ZC˜GÇãÖ•Ñ"ùÛº’MWòëÊð?o]©Oº/a©—°ô[XòÓ•—IéYWN¾ÞŸ-_®}œË×΢ù¸µjù¸²Âµ|=úL;_¦‚•¯±io'}s¼|IÕ¥ëOn>4_-GAFÕ¢åÉ"Õ4…8ÓàÖÄk ,’Ä4¸d§)À)¯)£ y&*À½5‡—¨l‹‰Š³hpmï,x¹«\¢ÂÒ-¹ÜÊ“ˆ•!^PpW­e/(|àr5¬ ·ž4\‚ÂG'(Û)gÃ&(pdüýöU‹ƒŒi© ðÆª£gù*»nœß³.7»Šˆ«N…äY¾-_%í®b€n Õ"¶að‰„Š·¬ò•{±|mÖU„Ô= žÇù~xËâ±glçû¡Q“Êæ¦1'\,$A†â÷oã|?,ZÖk½o#:g€Ñ€¶¡¼n£Ý<øhÉñÐ1∜‡ˆF@}"âxœï‡G‡¤!š/róȸ#\â?`c)™"5;•ý=ªÍ‚BKˆõ²`·:{‚Þ‹biC±”¬¸ôº*ØùRE„z0–¢80¦m<+ä\˱|šeÝìçáùjÇn ”¦³@ΡۢxNq–îPu…UVµÓRf-_KÒMѤiéÝ!L8МÆdUtD˜G‹ŒýqáçË‚÷È1+I³Ô0›’&–¾v…Žw8ÂÜU¯k ±Hóì>™4ò씢¾×Ľ«®{LËì(bôsàkµ¹5ñ¦ñÞ•JZ¯í›·ažì[E¬¡ìרO™¿Xæ/šéáú+Ó÷¼Ó}Êþ'3{–ùÅaËüŒËüøÏe~Í:–ùáÊšñ%”•úõ ­©H÷W`•ÙU€éê*tÄrÙÙC Qx[èRÄ̉õØ50Ô"P íl°HÍÚG…¸²üb?@YYø±Êÿ~,ŸÎ‚G®» ž\_-'šXm+×Ë-µMXs4ÀˆSôƾ‹0Öø½œÄ‘}„ÁRsµ.©X„9¼"l[,œE=•k2lOfã“÷uÐ Ò-xX,ZØ•æ# ו“0*SÄž²ú½³$_Vüž|úqÊj»Æfí°Åëuzñ~m+êötM^LÜï *ÓÛì*–ýé;Ñ µ*kQ«Àg½?¨GgÄÚq/°áÜàñæ-5Ía.TÓm‹‰oFb8œç×^ pò=Y©&+õIFÆ þYiO²’.Y‘?++¨'co·¬dŸ¯Ï€“°YPòö,aËJ؃‘kù0Žáó5ªþ+c³ªÍb)›A¶>«ä³OÙÛbzSý†åH«mIÏ–dc´Oèb¢²ú'*¬‹v"/³bgɵEE[ñ¢2Š>÷`=Þ‡—¨l‹‰Š³hxrM _6/é pЊݥm=ˆ û#I^Sp[zRX¤¹)¸ØèW\êêöÄËçäXmÏØ¬ ›¨üôöï7éÔðGé:»WAí½«¡8xÃÈŽ_4"ZZ_ú1pys­c³h©ˆëOìù÷aÏðþõ =®q H £øÃaNÄoø8i¡ÂL½±RBÀÿõç÷¿üý—úþŸ_ÞÿöóûOë{g¸C¤ôIÏ6'×Ì1¥_÷“57ÒKX*¡¤®¨Ý „Éi|“oÄÒž¯âÅW¹ÿß²{CÒš20)(ÿ…\wMŒ‚É¿'Ô=Ž|â$Ï}Yú(ÿã†Ô—¸Øfý5Æ‘cÁTâ¹ðÎcá µ´¶Ÿá‰JPÂ'ã–^=•‚…c„¨±¶-¡!éªÞdF_J_ò¼[ÈZ%[ Éù‰%·#&q–¤9 FìòôÛÆ02bÍ9…©MãL¾K¸Ž)©“̼L7‡î6¬ÁP!Î,í¾I÷ÒUû¸»„ª÷úéÀ·¾`™ÐÙ/á»d‘cSCHÁÏ{ ZÃ| 2*Y 7Àßo_ß ®¹Âc%@¬.ªÖTjŒµÏMké_ßJd=Žp¢’$Þ*®„Š«M§œXwóë[¦è"x…é)#Â!¨A JLùç[Ñ´Ú.ÃXœ¯‡Å¶lküæp>o…Úá ão‚•Æ}ŽÁþz Œ2œÿ¾Gá|?–,㾆x“€ÓtÉFBÇ‹óù°¨ð]ÔKßeq¾…Õh¾YÜ$ðæÌ: hEP’Lý¨ºÒr Б~…Â]BÒT_;ôx²4äbÜ'¡dˆ€ÊŠÉâ¡‹²ž %ë÷Òš"Ö0Ä9ÈÁ8ÕÐòk[>¥®ˆ3¢¯t¤#­YË“3ŽE1Þ¸À…‡6qI‹ ßZ-؇˜œˆk¨ŠCš+ŠVÇ ‰ž³Zzânž#(Ɇ«^þœ¡ÔY±eåi–¬»bM4LÄ•‡î*#×.ž,iA%4O¢ˆâFÔš/‚0݆yyÅ úbù,¦OZ“ÛNß¼¥CèøÄ"ì14‹1kuJD6Eš[/1åù´:±õÝêð'ß(ÏÎÅôt˜®åFve¶5ìYÃÿGSê¥)ùOj ”"åÒô`iõƒPÁ-M;‹¦iàš›åiàœ£ÏÓ••PÙy{ ÍS+O7).O—Š›nÑåi³œ¬|˜¾ZŽŠTÆI|¶”dºB¼ó2u¥f}§+°t¯+ÀÒªé ðÎ7KW`INVã(&+YÙ“gÉkÓŠ…/pMÕ8‹¶â$€ñ²‚ƒz™yèuIë^V`éÎÂg ^Vø°ñÚT4{VË1kÃ&*l7XwÈ¢v@A´ÞG™ÁØ0TäàN¥o_ÊÌ-äÃYnLG‰ZÎ:nVgÔô§*SSR4¶?æÄÑÐUÒ‚ª—š"¢ó4Lõj˜lgÈùJµ(èÒï¬W»Ž%Iõû+ÆœAº³ù~¸+á`7BÏeÖ“¯ç<"oU÷ì œîÊ[Y‘‘'NœðÇ,kûËé°@évþϰ1¡b²uÝ`fuõ_ô7cò¼û«uø+ßÿA\’qçdOX‘º¼{fÅwº~ùoÞý_¢I|ðœšPB¼|‹‡îñ’ñûµ~ßúȗë«Éñ§¾»@Á©—ŽÖnëø.ON„¼ÀŸ‚QŸÈï.6Øpffk±Dôó½ÂÝ™¯=wçPŠý=XÓ ”ÑQ‚ûþ˜Þ9‡bØ¥®r‹nù«ÁgMìª6}~!­*Ñ ²Rå·53Ñ[è%L_ÅËî÷Ö7 ‚{uôJΛ‰Ÿ”²Æ»çkÏÛ Òˆ^@ˆ¡}ßá$©ÐíÍù¼üu܈sø ð—Ý}d6öÚÎh BãßcƒSþ´gïË5WÝõï9 ‰P&J¦2\QÌç/h©ôâÇ×—¤~sÿûõo/?¼æ?Pb¼þõ˜HÉ…˜A‰C°Õp§×//KJëÓë?õeö—¿ûøÛ¯ŸíãŸþøó§ß¿þF¯Êyõã×Oëã_þýó?~Ò»_¿Þ… kwijaœe™?… Ø4w¸™Ð¾),6Ÿ©'0{ùyƒÍ½¢òhÌ ¥GÑ’ã“‹”})hª_1^oNïí¡& âz“U0Å¿R$RתŸÒªuÏD7æ¦Ê¿»èÃnµš×ô”@\£HèÒâ¯TaðþŽ{ˆú®• üL܃SÐÜèÀÒ_j(\¥ò—‚SI+Ÿ×fKçÞ™²üÅÔ®Ž€šek 5`Šá÷ÁçÕ†vQšÃ{)¶Š)Šõ1-ߨ2sšŽûò‰é‚î,P?1˜!yybÌ-äxª¦Æ5¦¦lÆ@B—7 ‚"‡3²>LÛ \Bœ0÷!JdÊÁ ^u·˜¡­9†Å (CYìµ+ˆÍ—‰4uÝ­²Z9O I{Ö¾bLY̓7îG(ß ¸VeÝê¾ðG9/D»Ip#ÔNËg'03ôÛ´8†*J½ª\”ê}¥ðš½êäÄoÕ/\O”•éUŠmm|ò—½ÁV^!Ýá m ÞK‘ëSžBꜜ8¿ìµ@ƒÇØ‚ÝþÌ/Ìç( nIÇ¢'%&Ëd›MùÞXš¾s6¨ÀàVT.Ìãòg¼ ¨  \;D¶îŽÇ©_úX±ÏaM+*XÈɪ;#CÁ!*èG#ç!èL*Iö;µX8ÎPÿ¢&‰õU€³E¨Õ3뫜8ÔrŒóëM—Ë[Õ?â@ß–e±LZ1úÿ2-MFLñžùÌ`O4b_%æVäœ îÖq ¾…ó¸rV5Àm`?èÌeÎç¥S»ê0ñÞòÊvLI RUuùª+*U,pŒh *’.¡æ°kðNŒI¯¹òÅ9©Ðd’ºžUH+èA†ãs>—V‚ÝpÄ4¶ESSÎóC¢,à¹p3Ê[tf}ˆh‰*á*¡dŠ2†­¦1Eçå¶iÁ¡Íy—_Ë]¢”´1oQ)×Ì3ØHêf¶ÁÍ7C<&b]|gbmUžÖu6Þ,öÁÓ¦ÝI‹ñ,l,V\}f^†ñz•°Î˜Ãô·ª".ÒÔvÙEÁj-Ì0U÷D~\Š|›¬çfS3ë Öqš4ÅK€$j Õâ@¡K ‰HÙU£0ðùòì3U™p£«Â¡‹ãÂ&#vÖ®6ikH]\YU$¶HbHC‹ÉqÇŒReë©íDú —“oš±—¶•hÐÌŒ}ÕŸE »yÛ}\Ý:¹+ç)Úr =ÊmD‡÷9Ñ,H㩪?l6옠-åÚU¢Ñ¥2è•EÆöÍ *”&N-¥âŠvV ‹ÍweºH4Eälª Yw/h‰Ö‰Î‡#w‚ÎžØ €½³¹Ô¦i‚¦ˆ­À%ÔI½²ÉAs’Ø­0pÔqå¹…}]™=aHKDænÕ¼QÜP[´7.v’E&ãFŒ#X ex!²ó( ºX´uÌB›ŸK6¹VÌ¥¹)¿Ã[¨UI´©79çG8ÒYŠIÀ÷xNLˇ¾•gâ,µÊgA0©¡VÑate+PvM¡©i@÷wUoò埽6û»®p­¤)$IbÅÌqЬúqg¯N^zóÏ­„Â0'L©)zµ“£¾i¨L!óUÑ,ßJïêlÖdÕ ¢Ísiœ'ú‰+ïáÆÚ<´rWÞ|kÚ«ÖU¹ZYµ§b3 |™íB·2™fŠ—Ç­§Kù6ñ³ z"*Õ¤=ë<’ŽŽYÇl à0ûô€Aã·;ÔݲË?ž:‹•¢wÓ;µO,¹R¹÷ÜBÕ2”EÑîÂzIo+§Ûù8ÙuÄèîtS'­BoSëC+³9c1«•2ŒTD e 1NS³¶ƒ­^hnQ?Ýéì*­âþ7Ç:pö~Í7ηzȲs婸¬öÜiBÂJ#XRû¹?HéÄÁQ?[5q±ðê6§.S$§¦uêŠ×#”‰BMhϯ›DE<Ïb‰>¸Íj¶å|i9X2zTc‰ø«E­Þ`" p—ðÞêQ¾ôæ©kÔã«óÖ$ß’ã«v³f¾d+G'cQï¦ÑBùT T>t[ã:ª6æÕ@kŠ˜ÇM™[ÊC3úœùr*åq¦µ3…¥Cõ-Ô¾»LYoª»:+s+– Ñt ±g4€³`4£y›'®h›v)p¥8Ç?*Š¥¡³SPxÌLMhš‚gb#®ÂâœE|}uõ#ÇZümòy•E’]‘lW¹òp ö©C²&!?"d9”oU‰RûÄô‘9£\¬¿w9’Cœ"ŒŠÂeUš)¨^9|ŽÐ ØÒLñ”“+ 3ÐÈлžbkÝÒæ†m’¤î|8|Ä[h…º Ýl«¦8ª‘W¹‚sS^š‘ºdDRŽjYNÇŸ_þþm'a®©°s¾Þ´¥ tXWíÍä·_bKZNƒÙöÚßfÅí·Yõ—¡Ë¨ç)Ïž²j­÷Ѳò!0æ±[X33lñÆ Ù%fòæ6ÓÊu 0'‘<øÍã)[³Z5%D¯gšÆ`µá/ê .Ò‹Ôü5Jõ²D˜Ñ>$0~#ÈS•ÐN, Y‰ìJƒ»8\È—N©¼Ï_ÜÄ¿›róxN_,›³×ò™AšTLdÁs¤™aqcuk¶Zç\øn¾Àt³5>&¤‹^šf—²m¨?Ž‘sSH-‘ ‡Mnü°uƒ9óÙ¦j¶á4¹báÂß®3ª.¦q—ÁE©ð%;E›´¿¥\WiÒõØ ‚]|l+¢ˆÇ‘eh‰K¶üÖ4$rZÉë}kSZÜÄÎKª)šSf¸äg•ÖÍu˘é&¤ÊM(«ý<(1]U™u˜9”Ðg‚*I7ÒãµÐ^Ïü¬”8.iøbG:6z{ŽÖŸ'ŽvñíòœGFÛƒU2Ã| >Yü[4ÄHïæãÈ#Eýàh+Îc¶™j1>ô¥{ ¬BÓŒrÓÒp8ŸÅÄpª‚(Oš7Ä0]œÜL:¥9ùðÑß*þ%⦲y„ïõ â ÊzÃß ÷ºø<[bWéýtehp[Ã. ›qkxü…ËÑ‹Ž…ÝZÌHÁTd¦®kÍ>E*´›ë`õÞô•Z–pôKÔ?û›]•ÛViGD.”æ ?+zgÿ”ÍUDµîåY²ªà]–Á¡ÒQs‹ƒS˜Ûª¤Ò$7©›a›¤5ŸÕu…û·†²Ü½O¹j®Œÿ°].9rä0Ý÷)z=@ D}Hés³ëÅÜ3Œ*« xc;]J¥>dÄ‹| Åaî‚<Z?8&4?¼Â#ѱ_]‚oYaÏ¡Q[`uKyl_ÛNùn×{|¿#BÔ³ðž~R˜f,P ƒ‰zðÖ‰%X§åŒ¢û¾é úšMêòP|8´)«qÝé4þ,Y#>.brÈæÐ[m]ݾf÷üà"´ M×Ûß¡tòwç*@Ò1-/£=»$|3FAhS˜YñT餑o˜N­œ³€ðc Íà¤p2lú4ä ÂuŠ4èè§Ù Ah q&jrk\I¬vêFÔtÂI°Ç[‹Š·]ðÎT@DxJy‹rÊÉÇ)V‡Â©‡˜qÆ#¦Œ(\û%Jc—b»ïóu`±¦4}“¥ü Ú®ŒvHqOÅÒÝk»éLéÝ!ñ•’šÑžzAAÊQå5€6+"';LÀF ®6B?Ð;GåN L›âVÈÝð*¨C%ìü)‚ZæM”ù  s«Ð[8„(—ž"W‚•zîÔ^ 熙Gg££@é¨><ßø;ÖxKjäBs)êËÿ.!ÞWÐ1K¢¼¼õY»ñ èù‡5‘5íY üîÈcŠìO%›Èw¿%Öñ‹Ú³ã•åv»SÓ©d‹´çÖ"—ªCj˜aÎ:uÔŸÓi8'±¤&YáÏa«gÝ%A?ÖÕ1Ž+j” tÖÄ é2e¢ƒ¡œbÛ(HDþBª@ŒSªü Õ-®c‘vú e¤ñ¯gqøM®ˆhŽ/C%¢/®¢Fu΂Xæº%Yš­ù–H¿™‚sÏý¹W£«ŽZ-ÑûÓÈYn£”ÍhýAoß}H>ÿiçsÔ–ÌÜŒÿí±¯¢F–ßmÐÀZ¸Ü%ràѹ``^û.¡i¹´ ö²àP¡KC¹DVj)WG•η<LØ¿«R@"±qŠŸ|rE´½ ùw]ñÍNh5ÚU`ê¥ñ6 °^b…°át¿&uÖ©wxêP¾EŰÞx©«—“ÉÞ`ž°¢Ý4þ'Ž^ÇGTF¼Ìø˜èª½³6¤v­ÊCر`1+ʆ=ÖÞi¡ª˜¶®qÁtϧéOËáë}R9ð¿¦2ÄÂ$}ñi’û&~CW.F‹èY9…*x$.äëAñÈ?_PWTÀ:ÅR(–`’ÂŒ‚èÐ5 'JÂ@ãY}“r9ø@UÐŽ?´s¦ÈºrXg{i‡–Í»‰`ˆÔ°å¡Ýy²ÞõqR÷£fL×ÍÇ-ùÌ¿ð Í›:y(5cÓoZ#Jäd‡Ä÷óKo¥…ú 8  ®ê•Ͳ,þX¹ü↘è±m~íÇæ¥qÔÓ.'µŽFÝ{T=_²–?.šx6Õ¦zÅ`¡Î‡3W9H`˜hô[±8Rã¨0|Vû¥®¾„.Pç99™ Ka™Œ0º‹IKABÁZçI›Ì °úõ¥»ÎK¦”Жx±³ñ®eŒí£b ïà‡®C3)â-µAÚ1oÏI–q®i-Œ7_g¾Î‰÷âFªß9õÜ®ƒ`{Lt6–€4ˆ4ªáM†ýðäêäKÇïxà÷€èlÑ /áòW¸:©Þ_•>gŸ4¸TfçÖsÐÀ÷0?¹+?À%0„×Læó&ç(Êb7°'GÊú£ƒZ’j ¢™Äy‹é¬AMìGBœeyŽyF‹Q›Ü¼I˜A`Æ}Jü¯¯ÿúúçë¿o‚çŸsM³PÒF Ö¿~¾ðË,õßÄÜ\[ár|höêX\w£Šµ$Z ÎÉn“íÅDdœ¤s üÃÊÚ÷ÌßiZŸ‹R:j³ O‰AË€%ßý: ÞrÅ4¿ù wÏûaÈÝ0]7Jâ^UKݪløHE>:é­…W:kS’mh,GŠËNBKbƃ~kZ펂ãúR[Ž[úrì§=™XÙ¹ƒ;L˜ý7ü]lýØÜË0ôêTlwî  AVÃyš±PžS‰¶1;yñi“ H×ÒÇà ÊxG®ŒÌ0´®Øí¤ö0Â.âÐc€ø¼ »ÑBE*αN^2+:è®ÛpÞ"²¢ÃCƒmºàA]h’„ej‹æz\³?ÈT5‰q0 Vz•Ö¶X™íQçN—qW Ú$m±ëÆ‚ZøÅ—·$Á8¤NYc$­©0ºO‹Î¯.¶±kBM1è(#F3˜P)WÁ[‡7×Ú”+\T¨ï‰nmâPíÛ)°jt©µ®èÞ8»š«Ñï9¬K•ß:TÙÛr ‡]@äÈsg»šO%9å (¡mZÃn˜¯G}w:|Á´G£T·(Ý)¨»Ii£VÏqoÐ}|; Bl4³ü÷íh°áG-²1‹-~xIݳè×­Êå x«$B͸^3žÅì*åÊËš·F!c“YDªc‹ñÒ…>Ï7åIù¨ÂÎàÑ,2~ã$ zê}K3öNÕá²ÂœúGªÇmcuVÐBc %`ó?…Ê+‚gè’E|·µÒH£º*Û!I ŽvÅp€• G[ÜäèümIl×Ãþ¤ùUh`ò è[ûÙ°ÎG ÏKï’¬~¨Ô°¶b'}Ø1§k„‹®{DÍfé„ÕA…#Îp6J ›–÷ñÍü,4¯yíq’â¦Âƪ„©°Aú…}àbl=¬þ6ÐîÅÚÚÈÉû[÷d¬1¶èê°Æ&?t‚Cb}‰Éú§£ÀÙ8@Ûi¥Y÷ óÉáGX›q¡Yø0ƒCy-ABÁö EV9ÒÍýý›¶þ4àÙ8c­?´™_ÀÿaA³"^ÎÍ?B>5 "OÇúIj|ƒœq£Šý'Ÿ yÝ)e”÷K/ÆF]h„PháKI![v»³–]bÑ‹a¬“qîËáuu›º­‚òMZfÇ#ˆW·/Â3ü–0r8ÅÇ|ö`§(ûó©]×ÖŒŠÊƒJÝPüù`lé˜ÓËAsàìBjå׫”ØûyÓÛyzÒêÙ1û<— ¤Ç䇽X <^¡âŸ…ŸÇ{Ç(n˜` ʽ«iª7%æä–Á[Ã|CíÉÛµ` FJ ¢Ø7¤ÅmïjåØt÷¡ÃYÕϬ´ú«Ã»¸™Cí\fóÅo³B)^uDCƒû©˜’çV«-ø[ÑÕï\-ú «;²ëWáåójê^!߆־j$ÚÞŽ‹Î]ƒ¯Út«ŽÛã ÈeÍ·`aµ)D¸7‹„x]”Ðç¥?‚ë¹€L4u4ú«‡vÇ×íÜê2± éL‘´B2‘&‰)'.²Ñí´ÚŠ˜«±Q¥,û!ÌO+“Ï«h œßØE¯‡†²-…j…ªgpÆÙÏíä»[ħ3GŒ%Á.<ííjMNšÂÙb%ŽõˆçÌšTHΤ=Oí‡ÙÇ]Ô·ì ñ°X«³K»´tÉ j[Šyð4¨j(Ç,»¸5+œPß#X.“ª9y–8`­ó,™lBƒ:…sôÃà«›Cçä÷¨Úð |c²u¶)5.±ub^×=¾õûÎÍ'yMìGû¶ŽÑX$ ¹‹úka>çiá[ŸÇáß*PÔ‹„ÌXcG:2Mó²ÛN³›ÕÊ5”$s6¥›%Åö¿ÕüRM2ôáÇ í73¼þ§»Zrí¸uàÜ«¸°!ŠÔo=2pö?}¬*ªOÛqào«ÙEÖGÐ)‘*°¯âiW{ìÏ|–ÊÏ•[VÝ&›êÄИï+îÖT6XIŠÖæƒQN)ÌÆ*(-MâÒ¬EsÍ™ç\‰Òo¿q^„mm ¢@5õК“&„ÏÉ ÞŽF/¤/¸ÂÓÙ,6è? å`w¸®u*ÞÅI… ! v|ä*¢üŸá2XçªßQýpPk7%YA]_Æ‘ŠwÖÂÅ…K¢Üd~ßðü9£;(äOÉnHðvРTµ;¥i`Dp/LíC©íÞ 6Ñt`€]KÄ—êÎp#{tÕyCüºÉuŒõQÉpiž«Ï{[b%ìb^&î”ݺ«3¡´a6±‹†‹ƒêW+Pi÷Ar7ç·±d õqSÀ·`óMDǨqe™€h£uÙùʸŠöñˆù6‘hº]R‡“éWC99¦4ÖiXs¸$Ô!ìq{šçje]›ëÊîÇíâJ]—·¸Ç•ÿ&E\qPüi(G®1$ôÛ§x¢çgæv6R6f9o›³Áu+Ìæñ2YÞ£íÎL820*ô Á];oÆñlæ¹Ò†€Ç&0í¥…s±©Ab6Š<¼ÃeTà¯A¤NìÖ9&iBšalÈÚ6¸wïÒï¯nÉáۀ׉’­Zd‹j´ÝUcÊ;ŸMâºöäjÅNLGènZxœ8Žßh3ü¾e–™qn]Ôq‚µ”»8g×Bªj¤QÞ¦þ–Ñh]ô1“Vÿ¶Ã„±b£J<Š)0 qKbÀ$‚(È`ÑÍC=wh J²A^ ”hÉQÂb}ªˆyæL3É åÌ3Ø$a-;$ödòI¢¾]4uÇ€T@ø˜ªiÞx)}ÎÒ¥}0vÖ˜pÓkN~v6(’GOmŠ ]‰ùgÙ¨\NbN¯êÈ¥¹ò;5ûŒº‘‰Ù¯V=@£>ûM®ã:è‰<GÎÉ´ˆ $_Í>Mˆšrƒ;"³›°p?$% TvuVªí[—Ì0jƒŽe´™ocy¦t0)ÁtÜüFþ1øYÔ~pÄk’‚Ò凥 î’û´ Eϵå?tz„ßAÁ$ȶ·¼q¹ã ÄÅ(aX¿_™†3Ã(£TAŠ@¾Õ¶¤® Ÿ— bq»,5¿/]rÓ-ÀuâµHŽ1´Aã[ÚEÈЬ Kè‹s„Buð¾Êèôm8]@Hj¬“o× B°…Qïâ¼AoÖÞ=¡º³{Õ –&!ã­Áû `Éä­5£&é-Z—“9 ¨ÒɉäŒp¤9ŽÜ!D× `ÊsO¬z` l÷R œb¡ÑÇe¥2Uð·ã{ÎMeDkä`jÐm ‚¸'Ö;ßT…BN¸}×Fÿúv]DnonnÌ9Ã! ¹®Ãbá9tÉÙ€!ÛÐe'Þh••pÄû¤©WoÿaòvÒ'äïÊMÂP<†“ýÅÿP¸†€ˆü—ž‘þþSÂìO.]°¯AnÊ£.l,´µ£—f<BC}­°šŸÅ­þ9&Êž¾0œÝúÙf­ä“GYÊFôèÄ£’f[¸½ú*^ú〗-`°õë MÙ¹ý&oH-ØUP¨=‰ìÙHÁ"$Nc|èɪ,Ý1cÃgM­³Çs8í7˜0N%-:ÏjºÎ^ˆ’ûQC8™7çÒ`ŽÎÆïÁÒgÄ̘ËüÝ0yh:ÐMtL’œó釲È!8&íasàiVü``Âìµ-DyÄFÉ´ªåßfl Æg FÝE-]Ósqéœì«Í¿6r…Ç-K;(‘7ÇÆe ÿ,mÕbç;ý˜ƒ·E»ð\ÍrP/¾ßçü Bžàe9êÕ\]íyÞLæ ú ?²Œ0q5æ ÀAa»ÅJ¸‹alœNY¾jŒ¢I°³L}ÉãâP~¥‡šàS )mÕ½„qyÁw›ÁŠ Fâ ‹$ãAmô>pˆ}ÙT¸æÆÞ0FP°NРØå¤‰ƒhFõÓ–e}±Brx0¹-H^Ø-äÙü=éêв–;èí‚6;1Ї%õ±ª¤·Z‘ä ziU ýà̹QøƒdÁ_ n JF]- :»‚q¯H 'F÷Á~uõû(.yš¿ Ê¡€¸©º?öWeŒâ/küH(ß:š²Sôõ^Ø÷5õºMÎÚØjé >•ž8¦¡Éc«×çµ´ÉžÙSLÈKl:…¨ q##oÕI\€„BB´‘°’¾Ì¨³¸;“\¿ öj†ÌBEœgKRÑS†}—>äÒ}¸S§™ÒO‹Ç)½«ïWK ŸŽå]ãn­nñî 0ºJk¸…E™#ÕT¢ø„$ªˆÄüM@4¾‰Õ±w1Tf5Ä‚‘êë¢üÑô9¶÷¥þwæ‘àº<ôóäA—ËHPtL-.Kà7ÙðíÔx_7Õ]í|©;wßè÷ÀDó)NŽ¿$Ά€BXðR°R…²° N¼’kûR+až:÷lcÒ,n«ó »-¥"­žMT \ÃáàêâE}¡ô=À‹?èÇ¿«œƒ¥fõÄá ó‰ÈˆÉ‘—¯€ž]¸½JŠœ¥ Õ\d‡j¢mÿ-4r8“goeS|؈SãÐZ”]»"×…œß¨ù§i@cP'î×P€;â6¥"Ç‘•ÔÚÉiZ£Œå0Î!h6s+Ò›šßÝ*­V°è2EÍðg1ѨïPèë1Zˆˆsjj©¡¬RVo4vô{(v‹ÃJÓ¹LêC¨¢6ÑIñ›´ éŒÍã¶IŠv]C6…wsVpîý@PÒ ²eƒ>6邎ô•Ñ Þ(µQjÛ/q~óvµŠO³ô}Å$AR%áJN”Î÷7V7OµHwÙ@Îÿƒ#ò7ÕM®gî>á^!€à"7êÒBY7~M×ÃÊH¢¥EFgPÂxñPðÙ"¥ú-»D=Uà|Œƒú vù*…!‚Ç(vCäØ+ÐOÿ<3ªZ0:•ø©@4Øî3`íª—¤}n¾Æ&Pd7¸V*ež„Ë=ŽÎ…oìEÂBý6Ž"Ö­SE³¾“ªj‰¤>ŸÙl¬ií9ÃŒ~ÊT¤žQ y¨*bÊm^ibE³Þ5ÃOa**í8_O»íw¤)ëóRôôE×W0öé²}½žŽ1^oÞ(*ï%`GíPd8ú¼‘š Jæy’½H¾«í*Q©/”0)“f±ÒÚ¥©¶š³¢!Rhõ¿ß0oƒà“§ 'Oo9)ìº/[Y`ÿÜ:x~žµ?@äQFPøù »]A ”•‘,m'Ìê×[[ñõ¤°ý úûkÏ~~Â.YÜÚÿ¯–Ën¸Ÿ¯¸?0±¨·¶ž ŒØKÃ+{a½÷ïG¬*ê¨=m ‹éQ]J:’H‹.9²ákV5&e-¡·uÔ5ôc}ÆÖ¦àfA£/—‰ÉQçZ×Xs™ºE'ô€£ HßJòùPhöÇVWh!è3Áæ¦ Ȩ̈i/Ñh–Ž;»æÃ·sÚ¼:óè÷·êbiHÒÒsC¡}åè ávúFG‘ЕÆªjì?2ÓJ tâ²örâ ’"÷…y²FS¨yZêx„V.k‰¤bŽ1S”)ωF†hz …’õǦ|£PMú zŽy“)ùy}ço‰›¿äùÚ—ß5®Œý½Rn9g‹ù—¡F”íÝ?˜|–M½`œÝÇ|àÜ. O}¬\¶|Z‘‹çk—-—pfBa?^´È™†‰UUPk¡H=²Ü¨g¸”ÆUß%BJ—Žþƒ+ÚÔ³j~,è&´‡©ÂŠ–ñpñ ÿÚÊBn¨Sc È'Jv2¤a°ÚVæDpÓKÌü¡ÏçÂ=»æ~ÃËçè]gY¾8[Ô˜)'*¼øAú  ícgÞÄýOÉÎH€q ßó2tôç£q)9&¶uÙ !(Ò “ k¥ö‡s”ŸG½ US«¾@Õê£ jVxñA’±ŽÒ3Íg5Vt‡že¯3άZ%yP—¥ÝÇwüÛ)Ÿ°“ª™d—ë;‚“¼v¤¥ èÅn[÷TëV."D°ÅÃxí3U¥‰ääÌc3ƒáÅÔtÀ(Y±ÃE”±Ÿ+²y,¹ á Un„ ¡r yjÏsWÏr,6³Þ‡ÝŸŽLàç6Xº*žã4'’”è´$Wþúé÷o’¾y ,Oú–Ó»¤÷’ôC«“õb>îòŽó.ŒŠyŒÐ<5V8õÇ„þ¡Ìk¨J‹s¬F¬P ¬€ôRGPÕ¹oÃâN¬úUMA+ãX¼Xó†š(þÕt¦lÜÒ-K}ZÀZæy2O ,§1¡9R´x¤_Â}”£.tÈ2ÊæÔ GG4®™Ït°¤HO+2šÌC)í×ÂkaÇêaEšÎ ÄNÏ{Žï¹» N²‚ÿ·5 Oà‘)ÄרS ÉŒ¾5¹&°pKö0€)&`fÏ…É~­±òqJ¡H¢-Aà F6ô{àîÝ“†JÌãwá!¿™£r ¸Ô0lœabE!A°ÃmJǶÂE@p{Æç 4ã¦ö.×þXŽtqzñŽ)²iÐGˆ¨ÃÂ$€©ÆàIH­²Ûå=|ØGP;ÒÃfÚ£Ã.'÷ßÞè^ýý ç dÁrúкq"aj°ES•Pvá[O®*¯fàÎŽh²Lõ/êR‹ò¶.«uÌ쉣3Ê›šž±§R­x*DŠ|Äcë7ëì@=EÿE¿”A6‰¬D 0j“xï¬S—GÒ„ï(in[å"ÑA Ž8ÏàAV¢«jLG€Ÿ×XÅw‰VScTh²æñ®½,×¶˜To+³¸Î9®ön?þׯë_Ÿ¡µè#  ­Ý^¦p-S/å “9[t“œjh‡ö…Þ˜)& ýMV­&À©å±¥ uÏWI½H]$G :Ô‹…¡¥ÛÌÅ<Ȳ½¢Œ4Ôf¶Ù±Ôôª œÐÎÂo@Þ¨·Ãé¸høÏ¦~«c’QY=ÍP›ýj“<¥¡eêט_'È`C.÷Ð¥LáØg¹Ž…߃-6bË'ù¡ùW›ìV+峕7a¡7};Æ8ÔlÚZ´~Ì÷ó}×±äYžqŽ+¿ÇÏlé)3ÔR<ëÌü¢±À¹ëßX—[%«1¦4Ä…¨ÍôH8ÎŒÁÉNTÕ’|®y<A]©[;xLž B¥“=ø ülêåùûã¿?<ð竾¾nûcÿûÏëgÛÍjÿ%½~{]÷¹f×/;|¶¹yÕ9·ê`;·ßá§ý¥½iÛ{ú>m­o6êÅë{~­±Ÿ`–{£>·>èï6Šzoßì4êΈý­QçΣqï4Ö^›ÏN,ÚI¶Ÿ¬ýŸ‹ö™]woJuyøÍ¢çòÿúúåõ黾¼¾ûúe½¾ÿçFøé¿Ÿþ'ÀJ ® endstream endobj 451 0 obj <>stream 8;Z\70m9Wn6$G[Jp>0E@V <9s7)pGo-?E5l?h5t$nfQM3P=8m]FX`W-!13,Q&3EPko8[DWgC)]D#ZR#J*Fk/lLC %ELK",o"dlpTp^.'AYrEDIem1Mi]KLl%X7.mad!88=?>GnqQ$lQ?LR/b+bL@4Rl.7 dE2$qe_6.?o+^V!N!#&E[4CI7kjloL,`Q+9$]lLU&gT[Q7t63]^pQBi$=E"UqD^u! S(=Urf#kr^ELFQ78=MQh*g5j"pn.)NPZ1 ?HVlim>r+g)`hF'^mFYNf,#lG5#!$5GDs,5_F(&3*0QBRQqp:Ho2#c%8(a/)Nt3VS \$*fb/<,S6BXq8Uf\KBMkM@`H(<>J7BJqV+%lO5Fd]K/IgG6#lk/2L-2d3I<]Jr<` )pd9ZDZ$tRHVh+2Cu#TF0"UcB::cQF>n'H^&Js_S0$D+S"*=iA,L[NYJ)_u_;+l>jO1;ajT(Khe.KH-4;Poa13_au\Tp3MZ%)r-2_TU^+=&gd Fc.TlhseXS"L_[S^T"_P)P,G\^.I"4'Y&c0Q.(;,V`nq0b>@XX_Gl,p>=>*KZ!`,f!H:(bu>O;T< !P!LKi`LL&DtjbtQH<#tADO(;mh/XVic")c>\O8Y$R+u(gEc@W_$5#K@ceD8Zk6^= 7\T8fnSOtDE8(tCPn8"*)a= endstream endobj 354 0 obj <> endobj 357 0 obj <> endobj 438 0 obj <> endobj 440 0 obj <> endobj 442 0 obj <> endobj 443 0 obj <> endobj 448 0 obj <>stream H‰|PmL[e¾—¶·c¶eÒ]†½[ï]D1ã¶CluÁ¬Š|,0:H»¹µÖI·–Y(»][©"¨ ö2‹kÌ8ª ˜|d’áPÖÌ ‰ fþã4fYÜ’sÙ[£·ðßóã¼çyŸó<çäà˜4Ãq¼ ¶ÚZû²­Äö{œ®F?§{‰óº² -P¸°]*ìTè94°SºöðŒ úó`äÑ;wäc98žœ­ä|¢ðÔëA¦¬´´”Íf³ñ+\Ü 7c ‚î¶S{ú$ç÷q~gÐíÒ3^/cÉÊŒÅpûÛ³ŸGôV=Ó(6œ2U£5î+ÓoîÅxŒ“ñ»OyD7¿ÛÅýN—»Íéoe¸fæ&í­±ûÜÌ>ÆånÆÄx«Áê°z¬³b¯`[Ä`fìNã6|ÿ#癜–áHJø+…‹¹(%‰H…ÞõÆL/h™D&øHkbÐ7$dAfPž!ŽoÔ`B"&„d¶BY¤‚ÜnÁaÀÁ’ü( С]`P?X {f–z~¢@ókrî:=?3±˜ÖüfY6jy¹ZX˜]úN“ö|åÓNÚ-çõÔ ågß?ICÉ“$?ü ?MÝžó³5µBuW”+!¯+”/ÊÁ N^HK¨†Yù?r.®ˆMÎS7“Mõ4úLlúRE/®—ÛÞ¶—P/tÿ C…ßÄ=¤Q1£í€`÷¦¡úJÖ ¢„úöPtˆk¿Žqy‰úx¸¯7AC‘œïêŽtPކ¶*?ý¡¾Òó» í x'ï¨Ô¨ÂPBxRØ/IûA‰:ybb|ìóñ)(sáLR@kŸœk{#Àµ =:R¨êJ¬?;„l Ø“HÅ3!Ô}ˆÆ2\b!vqP¾IOÀÞÄõD&8¸E¨‹¡úMz2–«mª~oä_E.H·û°çʨBãÛ…·ÈÿTeºÖ endstream endobj 441 0 obj <> endobj 447 0 obj <>stream H‰|PkHSq¿7Ý•-òv£vëîFï|¥C*%3ÃW9·’ Íífš5»›ŠQ0ÍÊ›s¢é]ZQ~1¡‘¢ÈFEIF2Ö)ï—ì çêPwõ½óáœßï<~çpH"zA’ä¢ÜlKnñž5Ûk…2›Ã$8×™ùÒª ›)r K* £•Å1 N¾ééé xç‚Þý© ±Ä ’ì¾™å¬TGKºQrbbâÚˆOACj¦ÃYÂ#K­ËÍv¡Ü#v§PélnÞ2+*92æBfÞÅ Õ‘ä®xK<2© GÜhkJjÊÚÔ´äø—¡2²!/-SÕÞÜ‚ÍÁ¶ ‡óúϦ„m–µ• ‡jbCpK¦!˜ÇÐÇ÷‹{Årî EZÆ4>*ÿÖƒÊQ ßC¦Vxßp ›n9¸«Â ÂÃj"œÉtúüÍÜóKú±“Á´Õ8jçæ„üÝý#Ç b‡(Iz]Ù•jeCÈ£î’Á#ÓoC d ºš»Z$.Ð5Ø7ÌŽ÷æ¥ð5úµ°!îNÎF‹uŸ‹)zðô˜&òÙ½%{ô:U&qÜSs5r4=Z0’ªÒÙìçžù†³þö³b»>?®¥GšO6xëXSqI^•á E÷6~ÔdP>«w¯Y¯óHSF?¶J ¤°»RòZqAkØ) ¶ö¶j¹+û³ë;ÇÌ|>Kž-·Ä̱ùÊ{æìmž endstream endobj 439 0 obj <> endobj 446 0 obj <>stream H‰|OmHSa¾wîCsNôz¶º{A!G¶Y‘‰´rÒÊåÜú@Akz¯s¥ÛºwBÂðOÂr¶I3ƒÂˆ>X‘äˆÒmTDÑÀ~V+()&*õG Þ;ßEÝéÿÎÃyÎsžçœƒcb†ãøF£Áj<Þ²ÍÔÇ:l´™umotØ»=YªŒWá|©˜ß,'[‘5¼*“lÁ°‡ï  ¯‹¾¦¥Å˜ǯ‡¸Ü‚ZPŠN ØYUUô´«ƒÖ>ÎÃôrÀèìt±nkó0´è{z€%;Î Ã1ìùló˜ÖªfaÀéõ §nÆI;œvíúaÀÁ`»CpdxXÍôÚØ3ÀÕõ¿mºëÑ>7öšé„(ÂlÓÚó˜ ÃæðîJ_œÿÇ…\Ïñ‰ùÁ´93(…~ôŠDupD¥ ç$Ì‚LP–‘¶¯Õ° XÊ?#³Ê"…7§"ø£8œ‰çÀ/ Kæ öCOõ ’"¼¬yը߿´uYu9BVš`>4úÕp_Ê— h )C+*D¥ðEøOq^Ëá ¥4;$›ŠJ` ܽ¸K”ɶe¤:hq36êÆiÉ­»Ñû …÷둸V‡ŒÈ n2Iœ²ìEó“Å‘87 ¯ÅÎÆˆ‘„þ´†,ÛÛ ±†-_ê‹2"Uc?q¤FYñCs!öó}l{£› †eÄb*r;ñBI$¿žE8E¤þÈIMóÛä°ú}ìõÂêwo¢C§¬mj®¤ˆä0?O.L˜Ìõ-'8õ®›ÖÉKŸsg¦_~§ÞPºzu\…;Bñ+™s#R8̸BO‚²u®=u¡X(ã æò‡¨1 ÐO÷yÔø)ÃÀØ_yÞä†h~tH^À_(áÈ k2: endstream endobj 413 0 obj <> endobj 416 0 obj <> endobj 420 0 obj <> endobj 423 0 obj <> endobj 427 0 obj <> endobj 431 0 obj <> endobj 412 0 obj /DeviceRGB endobj 432 0 obj <> endobj 433 0 obj <> endobj 434 0 obj <> endobj 428 0 obj <> endobj 429 0 obj <> endobj 430 0 obj <> endobj 424 0 obj <> endobj 425 0 obj <> endobj 426 0 obj <> endobj 421 0 obj <> endobj 422 0 obj <> endobj 417 0 obj <> endobj 418 0 obj <> endobj 419 0 obj <> endobj 414 0 obj <> endobj 415 0 obj <> endobj 358 0 obj <>>>/BBox[8.1748 1102.53 706.217 377.814]>>stream 0.18 0.192 0.573 rg 1 i /GS0 gs q 1 0 0 1 8.1748 982.335 cm 0 0 m 349.021 120.191 l 698.042 0 l 627.619 -362.355 l 349.021 -604.521 l 70.422 -362.355 l h f Q endstream endobj 371 0 obj <>>>/BBox[8.17627 1102.53 706.216 780.829]>>stream 0.18 0.192 0.573 rg 1 i /GS0 gs q 1 0 0 1 357.1963 1102.5259 cm 0 0 m -349.02 -120.19 l 0 -321.697 l 349.02 -120.19 l h f Q endstream endobj 378 0 obj <>>>/BBox[357.196 982.335 706.217 377.814]>>stream 0.18 0.192 0.573 rg 1 i /GS0 gs q 1 0 0 1 706.2158 982.3354 cm 0 0 m -349.02 -201.506 l -349.02 -604.521 l -70.422 -362.356 l -70.422 -362.355 l 0.001 0 l h f Q endstream endobj 385 0 obj <>>>/BBox[8.1748 982.335 357.196 377.814]>>stream 0.18 0.192 0.573 rg 1 i /GS0 gs q 1 0 0 1 8.1763 982.3354 cm 0 0 m -0.001 0 l 70.421 -362.355 l 70.421 -362.356 l 349.02 -604.521 l 349.02 -201.506 l h f Q endstream endobj 392 0 obj <>>>/BBox[8.1748 1102.53 357.196 619.98]>>stream 0.18 0.192 0.573 rg 1 i /GS0 gs q 1 0 0 1 8.1763 982.3354 cm 0 0 m -0.001 0 l 70.421 -362.355 l 349.02 -201.506 l 349.02 120.19 l h f Q endstream endobj 399 0 obj <>>>/BBox[357.196 1102.53 706.217 619.98]>>stream 0.18 0.192 0.573 rg 1 i /GS0 gs q 1 0 0 1 706.2158 982.3354 cm 0 0 m -349.02 120.19 l -349.02 -201.506 l -70.422 -362.355 l 0.001 0 l h f Q endstream endobj 406 0 obj <>>>/BBox[78.5972 780.829 635.794 377.814]>>stream 0.18 0.192 0.573 rg 1 i /GS0 gs q 1 0 0 1 357.1963 780.8291 cm 0 0 m -278.599 -160.849 l -278.599 -160.85 l 0 -403.015 l 278.598 -160.85 l 278.598 -160.849 l h f Q endstream endobj 403 0 obj <> endobj 396 0 obj <> endobj 389 0 obj <> endobj 382 0 obj <> endobj 375 0 obj <> endobj 368 0 obj <> endobj 355 0 obj <> endobj 449 0 obj [/Indexed/DeviceRGB 255 450 0 R] endobj 450 0 obj <>stream 8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn 6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 6 0 obj <> endobj 7 0 obj <> endobj 212 0 obj <>stream H‰ì×1€0A A$®Ò"3 ©`˜Û-¾þöæ€5ã¼¶ýxöë#¼J4éA€&=Фšô @“hÒƒMz I4éA€&=Фšô @“hÒƒMz Ið·K}Ï endstream endobj 213 0 obj <>stream H‰ì×1€0A A$®Ò"3RÜnñõ·7'°Ò¸Ÿã¼¾Ý}€_éA€&=Фšô @“hÒƒMz I4éA€&=Фšô @“hÒƒMz I4éA€ý^³µÏ endstream endobj 214 0 obj <>stream H‰ì×1€0Ä@ A$®º"3-CÍœûû9ÎëÛ¿°•hÒƒMz I4éA€&=Фšô @“hÒƒMz I4éA€&=Фšô @“VzüÏ endstream endobj 215 0 obj <>stream H‰ì×1 €@A A$®¾Ef<|$;S\}íÎÉ_óÚöãÙ¯ð*=Фšô @“hÒƒMz I4éA€&=Фšô @“hÒƒMz I4éA€&=Ф×Ý EË endstream endobj 216 0 obj <>stream H‰ì×1€0A A$®Ò"3)a˜Û-¾þöæøŸq^Û~<ûõ^¥šô @“hÒƒMz I4éA€&=Фšô @“hÒƒMz I4éA€&=Ф•[€îŠÏ endstream endobj 217 0 obj <>stream H‰ì×1€0A A$®h‘3 *`&·[|ýíÍ À®îgçõîßGø”hÒƒMz I4éA€&=Фšô @“hÒƒMz I4éA€&=Фšô @“ j 0VÑÏ endstream endobj 188 0 obj <>stream H‰ì×ÍKTq‡ñ¿!B‚6®Š`$PÈ 6. "pˆ´!\%¥¦¡H/Z0eRÖ¢‚Ù –e(QºÈ… e℉2åÛŒŽÙ¹”ùzõÜ{çù,f}ü̓gÎÒvÝ\r¡1Ü“W¿çà•òªèØø”õD.¸X÷\Nie$>öËz`u/Þ~V¥ú´ø›² 5«Ï‚Óáw¾Z4õ·»ô¶ú´$hzû¿©X½­êå_+<ˆ½Ó¨ëI•ê’²žÅ“‰Ù¾Që)€µ°àe©ùtËÃÞ}G®©Rm‡‘xÂz¢ààtú\þ £bխ굞X{¾ J—”õ@F`/ÀûÆ'gÊ«¢ 5ûðÕš[¯æ’ Ö÷ ‹Ôd]K—úÔ“ªUk=ð_ì}€{~ñiè{ѹÊõÀ‰Ï:¬Çñ=îA·¨F5©ÇTŸªÔz`ì}€{þ²òÛûØÙ{üöÞîÁíSÇKîëդʴØö>À‰½ß™K.4†»³_UºåUѱñ)ë‰|‰{p;TÚÓªCÕ¨&­'6нpb/À§Fâ‰ÒʈêÍÉ«¿ÙÖ“šO[Oä3܃[£ÒZöª:½ž T‡Ö›ÃÞ8±àk}£§Ãj8TÔí´ÇO¸·@©4½›ªS{Öã[ÁÞ8±í‘þÜÂ&•\\öh(öÃzàÜuuêüc½˜JSoÖã[ÇÞ8± Ó3©KM/÷†j³UWÔtL&f­'ò:îÁ ú9•TQêJu©1•f=°-ì}€{Až(¹ðTIïÏoh}ò1½øÛz"ïâ\—úQEjI¥®T—õD€ Øû'ö‚çuO,ïä…­Ï7ï¿XãQ܃kS9+©(ëq×°÷NìRzñwë“ûó”wÉ…§±á ë‰<‡{ðT‹šÑã¨U¤–¬'ÜÄÞ8±`“‰ÙŠšŽ¬CÕ{Cµ—¯wNϤ¬'òîÁ©u¢ZÔŒÊQ?ÖîcïœØ ¼¡Øâ²Gê<·°©=Òo=ŽWpþEm¨½‰jQ3Öã;…½pb/ CD;CEͪýè™»}£ÖãØã\¡T…^C…¨ëq€ÅÞ8±9Róé›m=9yõj¾´22OXOd‰{PÔ€JÐ;¨ µ¡B¬'v{àÄ^@¦Ÿ*¯Š.Ÿáî¹ä‚õD62üÔ÷®o_ èÔƒª°žØ%ì}ô+* endstream endobj 189 0 obj <>stream H‰ì×ÍK”aÆá¿!B„ \"ˆ .B˜E %ÚA"Aà&ŠrEò#Al¡%Y‚ƒP¡%H˜Z(¢`”‰Efø_Ý ÔCaê8zæ}çw-¤v÷{îy8œÍMàg/Gœº©¿ÖA€C582•ߨÿÉ3·ÛŸ¾³Žc ìÎ }¾þZ1 ÆÕ»>_¿ý¬ã‡Š½p±ÏÚ:†¶î‚`AS¼Ýñyªeu­Wïjß:`€½p±ç––WC5݉©¥z—n„gf­’x»Õ¬úÕ'«k5®Þ­6Øû{Ÿg/\i×[HJ/¯kî]ù¹fèÀÅÏ=¨6Õ©šÕ÷ªeum°ÄÞ¸Ø Ào=}™y z)ÁÚΞ1ë8+NîAõ¨6õ¥jVýZÇì±÷.öð—{íoOœ®Ô»È-lÿbç øþTwjPßx<£BZÇb{àb/ÿú1·|­âùÑ”[ ýCÿµN}>¾·êSwjЯõcï\ì`;ã¾+z r<£âîÃ7këÖ‰¢É—÷ :RSêKŸ–[Ø¢­1‡½p±€ÿëìK;[¯g’™×ÐÓ7a'jüwªu¤R_jÍ:£Øû{ØÑÚúFýý×Iéåz,ç/?šøôÝ:QøéT#êEŸ£Žêš{Õ—u" v±÷.ö°K3³‹Å¡Ž„@Ibji¨¦{~aÅ:ѾøãT êB¨µ£Ž¬±Ž½p±€=y?:,hÒ«IΪj XljœîAÍ_-è+ÔÈàÈ”uÀØû{ˆ@¸k8%X«·“ߨ?4i'ž¾5sM^ù9ÕêÂ:à%ì}€‹½Dfiyµ²áÕ±´2½ ‹WO³N´7½5gM[É5yÍ_-X'<†½p±€ýÐyRtý‰ÏÏ݃š­&¬9+¶NBMÞ:àIì}€‹½ì_ÿÐdv~£žR §:Ü5lgW¼ujªš­kΚ¶uÀÃØû{ˆ–¶Ž¡ä¬*=¨`AÓàÈ”uœxåÔ$5OEÕl[ÃÖqÏcï\ì ŠæVB5݉©¥ ’âPÇÌì¢u¢mÅþ=¨éi†š¤æ©©j¶Ö‰?`ï\~Û ¿Õ¶:B endstream endobj 190 0 obj <>stream H‰ì×ËK”QÇñ¿A$7­ AÊE) !¸‰Z¸"ZH^B1º &˜.R\h$„ %*]$4ƒì"áЈ5¡¡MyImÔ~5`‡’(æ}ßó:~?È˸9ç÷ÜÕuI©Ô1õ-¶±i;„˜ûspÛçÅÕó iYµúÓýk;Ѿڷ[”šYíŸI‰¹01oL†æŠË»ôÜ2ò:{ÇmÇñÑ>¨n¨' £þ¨K¶ãI޹01/ §²5ëÑå—´GÓøaTÔÅÈ*lRg,&öæ>ÀÄ\<¶¶kîIÏ­×Ó;yööL$j%†Ý}PU«vPÔ õÄJ `bîLÌÀŠ…èJ ê®^ß¾ì‹5ÃKËk°µªRÕ«ªu{EeŸúàq`cîLÌÀ¢ç“ OÞÔSÓ¿]qðp7öA%TN¥Uæ W‡”ßÁÃ8‚¹01Ÿ MÏ—zôNÓsëÛ»Çb›Žëì>¨Tʦ„:Si•Ù‘c8޹01€]!8Î)jÑkÕw08•øîƒÊ³íá“·‰À=Ì}€‰¹ì±Íö¼½Ù²@Ohz>‘ÓÙ•AItŽR)›&r0÷&æ°{|`¨ê=¿ endstream endobj 191 0 obj <>stream H‰ì×ÏKÓqÇñ¿!0LÀD.`yu³º1 »œãô¶tOíD÷Ž]rò÷ vÓžÚYõ:EgEˬAîLä1¾„~ܺӫ}ùæ“7CsGŸð=¨}´›*oT¼Ôþg×,kû¹d˜ƒœÞ†G¼àŽ}žêu ]û¹džè^K÷TŽÓ«Û]ÝX^Ý<\sÄ{PõZ¥¯Ú¡¹sR»%¿e)BîLä©"Kë•õ~]𼢖ξéØî¾ùõŸïAÕ¨Rõú¤µÚ!µ-H:r`"€Ì63).ëÑ5w¸:†'æ¿õU5šTýtð›ÍH:r`";è÷óKÚtÙK«Bá•øßïAÍh^U£J«›Dä>ÀD.6±µkhÍvx² šêšG<ÓÝרߚѼ¾nlF­n@r‘û¹ØJxq­¢fP·>Çé=Ëï¿Ö¼Õ­Hr`"zÚûéâU·î¾Fý¶º©CîLä`+áÅµŠšAÝúK×<¿G§W£f4oukRܘÈÀ&¶¶cîgﲞ¬‚¦Z÷Pcû˜î¾FýÖŒæõU5V· ¹È}€‰\ì ßÌ/iÓewÝ} ¯hÆ×5©¿õ[3·ïõé¯jTiu³’ˆÜ˜È ³}žû~½ü¹®¹ÃÕŸ?˜7߃è«j4©z­²¢YIGîLä©––VÖûuÁs }z>Äv÷ͯ‡ßƒ¢šöU¯OZ«RÛ2lí—MÖ=O endstream endobj 192 0 obj <>stream H‰ì×ßGÝqÇñ¿aŒ‰ˆnb4‘HÔEŒÌ.ê&fÆ2#2f3£µ”Ò´ÖF«‰mÇRZKeVtÑÚŽVZY“JkKÓÏSmíÅ÷æCV§s¾¿Nž9NÎ÷û~¿?/ï½=¸áÍ»ÉgÊõéõ _ €ãgsk§¶i 1³J·ûڮťÕýÏT=z«_õ¹ÿ'=¯·ô«*¨Žª9?2—û¹3=_Róëu¯óŠ›GBsÿ{ì€}Ðòql^ôŒª©¦3Ãp¹0‘ À±1:±PhÑ>}ö~°;tðÇîƒÕ±¶KUV}û†à r`"€c`ye£´üµîrBFeECÿÚzøÐW"ÜEÕTS•õ¼º¨—#ð¹0‘ @\ oï6¶%eUë"_* ÎίDøbäû E•×_éõRGõvd^"÷&rˆ_½ƒSçu…sŠš‡gŽôîQ÷A‹º¨—^T_u?Ò»ü€Ü˜È MLÿ(,iÓåMήy‰¢Btû åYûõÕëšA“DQ€WÈ}€‰\âËïÕ­[5=§ÒïéO_ôotubÙm€ËÈ}€‰\âÈ“ktg KÚ¾~ûK©÷AËô÷_šDu4•f‹¥wû¹Ä…Áᙜ¢&ÝÖÌ {§b/hË>hÑ<šJÕ4¡æŒ½ çû¹øÜìüÊÅÒ—º§IYÕ­Cáí][ÊÚ¸ÊšMª¦¦Õ̶”`;r`"ßZ[W4ô'dTê’–Ut/¯lØXÜÞ}Т 5çÉ´»šY“k~‹°¹0‘ €?»C)¹uºž–щÛë;±Z4­fVqͯSØ^@,È}€‰\üf$4—Wܬ‹™š_ßÕ7îPçöA‹&O;÷@-tÈ¡.ŽŠÜ˜ÈÀ?—V¯ÞîÔ•L̬ªmØÜÚq®—Óû h~BgQ#K§s®€‘û¹ø¹:]¾ÑîÂêäÂ>hÑY®ÜìpgÉp(r`"Ïuõ§<ÔMÌ+n ͹ÓÔµ}Тsétꨓê¼î4°¹0‘ €‡Æ& -ºƒ)¹umŸÜlíò>hyÞõY'U_Zgw³5 ¹ï áª:4 endstream endobj 193 0 obj <>stream H‰ì×ËKTqÆñ¿!D„ Z H‘Q-Ú¸0JŠ M mŠ ('Q”¨´Œ©ˆnD³ÁÊîC]$áRN^rj´ž8‹~‹®ã8ï9g¾ŸÅ`«žó¼üxy¿}ºrçÅœEûôk(.©ôÄöhwIEcYeS´ýÆØx¦ÀšÞÒÛ×oÿ_}©¾W_­oWê¡À€"ÇÞ¸Ø @e§¦;Ï=(_Ü¢§·±áRrhÄ$†Õ=è|ýQß®êAm¨“@bï\ì zUµztKÖK<4Lb{zÔ@u]L1Ô‰š1Lö>ÀÅ^ #94²në=·yK[O^|”š¶Íã‡{PÔƒÚP' £~Ô’m ôØû{˜mŸF'wµ^-ì/©hÜÙÒ£Z'úÁ'÷ Ç«Hý¨%ýᓊ€Pbï\ì`V?™¿¬M¯lí–óýÉ÷Öq~òÕ=èQ?jI©Ô˜z³Ž„{àb/³$ñp°º.¦÷©éðáóá=èéM ¨1eS{êÐ:6ì}€‹½äÝ«átýޏ^Vùâ–#gîg¾d­ý‚oïAQcêMí)¡šTŸÖ‰€ð`ï\ì >O~¶ß(«lÒ³Ú¶§ëCjÜ:Ñoùùô¤ÒêP!Õ§ZU·Ö‰€0`ï\ì _.w÷-\uHªfÓé§ýo­ãü…ÿïAšTŸŠªnÕ°u ðØû{˜9Ý,+7œÖÍ”{Ðïy¦nX=«më8@€±÷.ö0ï>ŒnÛÓ¥GTVÙÔ»ûyò«u¢¬{PÔ­ž[Õ¬Øê\Í['‰½p±€Üd¾dŸºç'õ;⯆ÓÖ‰þOàîAzVÛJ®æÕ¿¦`ö>ÀÅ^rÐuýy¤¦Co§º.ö¸ïuœ\ôô¨óåë+¿¦ YXÇ‚„½p±€ÿÒŸ|¿zó9½š+œ?±Ž“»@߃õ¯)è+4ÍÅ: ì}€‹½ü£Tzb{´»¤¢±4²÷kcãëD3‚{P4…½¯k"š‹¦£Y'ü޽p±€¿ÊNMŸ¼øhÞÒV=– —’C#Ö‰ò ÷ GÑ\ô9š‘&¥yY'ü‹½p±€?»y/YUÛ©g¢_ým'oÂtzn?xÊIùÅÞoßïÙ=º endstream endobj 194 0 obj <>stream H‰ì×ÍKTqÆñ¿!D!\ ˆQ-ÚÌ¢È7‚„„ ´)‚‚EQ„Ò2$ + †@„Þ‰’"4‰$’h ‘ e·QGíø‘ô>3çzï÷³pwî=Ïõáll`+»ÿìö]çõk=à9±±™ŠÚÛú@ ö4wõ%×Ö­'J§ÆËOõhúµ$´#mJûÒ£iwÚ õD€çÐû½l6¿°|¶õan¨>§¨îd¤6¾h=QúùòLù:—ÐÖ´;mP{Ô6­'<„Þ¸èà7¢Ã…e­ú.¿9›²'S||¦hwåÕ=zFmS;µð zࢀï^|Þ{¤S_D(ÜÞ÷ø½õ8™åû{0E{Ô6õ¤Ú¬ök=`Þ¸è@Æ'âU§¢ú¶—4^¼öby%i=QÆämS;Õfõ¼Ú²vm=`‰Þ¸èÜRbµ¥óy^qƒ>„šs}“ÓsÖeIpîÁmVûÕ#k×Ú¸ön=`ƒÞ¸èÙþ‘.èØìêÛÑ/ÖãdUÐîÁmY»ÖƒkïÚ¾õ8€zà¢Lº •ÝA¾ ‚y¦hãÚ»_P¬Ç²ŠÞ¸èÍôìB͹>Å>¯¸!Òöd)±j=‘ ߃¢½kûÊ€^‚ò TXOd ½pÑ Žå•ä¥ë/óK›”ùªSÑñ‰¸õD–~¦(J‚ÞƒR¡l(!ÖGï\ôB!…Û•ö½G:?Yc{ð;åA©ÐÛPBøgߣ÷.z¾7›*¯îQÎwìk¹¶Ç+¸ l(!z'J‹2c=)ô>ÀE/ÀǾÎ%N7ÝË)ªË ÕŸi~ ?­'òîÁÍ”åDiQf”_¢÷.z¾”\[ïê*ØÓ¬x=q+66c=‘çpþŒÒ¢Ìèå(?J‘²d=Nô>ÀE/À?í>|EÁ.9Øñhà£õ8Å=økJŽò£W¤,)QÖãiCï\ôü$66SQ{[‘Î/mê¸ù*¹¶n=‘wqþ–ò£)KzQÊ•Òe=ô>ÀE/Àæ–#mOòŠrŠêNFúgã‹Öy÷àR–”(åJéRÆ”4뉀ÿBï\ô| çî›Â²V%9\Ùýîäõ8[÷à_Q®”.½1%My³øwô>ÀE/üÚ7 ²9ø endstream endobj 18 0 obj <>stream H‰ìÕ¡Áh„"éê-eÐ̃Œ{Å0ÃíŠè¸;O€ÿp<_·û㳿>|î°t:t€¥ Сû,]€Ý`étè>K C÷XººÀÒèÐ}–.@‡î°t:t€¥ Сû,]€Ý`étè>K C÷XººÀÒèÐ}–.@‡î°t:t¸ò`‡›3 endstream endobj 195 0 obj <>stream H‰ì×ÏK`Çñ¿¡S‚à%ì"‚zh—ô2ˆ@ð ^„ˆ@L¥µ`,HÁC Y•È£”2d3d6l*Ø'ˆØE2Ýöݳ½_Ș·Ï>_žç{r‚‚‰Æ<¾À¥k]ÕÞáÐì²u—ô>}«sÓ§u—¨cjšÎM­S÷¬ãçñæÝguXŸÖA{ŽÚÜJ¶vN¨½åµ½þùƒÔ‘u"ǰžš¦¾©u:=5P=´Nüî}@&î8'óA~÷Á$òóa¼µNÝÓª‡j£:i8+î}@&î¸%4»\Õ8¨Òz|H4fÇa샧ª‡:FuRÍ´Žœ ÷> ÷\±´²ámU]¯\œŠZÇqû`¶¨ê¤SýTK­ãÿÀ½È´“L}ø×§uàTÛ‰ýŽî)=`Êjzº‡æv÷ÒÖ‰Šû`©“j¦ú©#UWÕXëDÀ©¸÷€+Ò‡Ç#c u}zfßnµOX'*ìƒY§~ª¥:U5V½U{­®š ¯ÖÞz¦×uC³?¼¸f§Ø°戺ªÆêlÕ^uØ:à˜/ß~4µëE]Yßÿüå{ë8ʼn}0§Ô[µW'¬&«ÏÖqì$S÷û§/W?ÒŸ¾è_ëDE‹}0×(3pv/‚‘Êú~-)Mmã+_¿[Ç)rìƒù¡&«Ï:ju[ ·ŽœðâZC³_oæš›#3áUë8%}0ŸÔju[®ž«íÖq€‚°OÜéê\Q×72¶><¶NT*ØóLÝVÃÕs»:¯æ['Ìì‡æÊjzô>stream H‰ìÕ1ÂA 1‚ȸ¢Ef’”o€¡¸Ýâëïîº(y¾Çë|ößG€ŸÓ}–.@‡î°t:t€¥ Сû,]€Ý`étè>K C÷XººÀÒèÐ}–.@‡î°t:t€¥ Сû,]€Ý`étè>K C÷XººÀÒèÐ}–.@‡î°j]¸*‹§ endstream endobj 196 0 obj <>stream H‰ì×ÏKÓqÇñ¿!D/;%ÂDЃAìÐA/‚† „àApþd D®B²H1Ò`—ad‚Ùˆ<¸ A&* eš›Nëu¡ó÷{ßïžÃ`·|xÂ÷]ØÚuoâ2ÃûÙo—«^(lõúzÃãsÖs€‰Æ–}7ŸèûÖSÑ3ŠXÏÁ_t êi¸3JQ/zµ£‚¬çGöcõgcÛhN‘?×ÛÞv÷õúFÊzþÅ=˜±Ô‹ªQ;*H©&ëEÀ¡¤wvûžNç—vëÖ¨i‰ÍÇ­a܃Ní¨ ½‘jRS*ËzpW“ŸK®ß׬~'ß}±žƒƒp:‚:ÚkJ}YÏö›Wßz¦¯Ö‚²@ÿðLzg×zþƒ{Ð)T“šRYz/U¦Ö¬¬%’ͱ\o{N‘ÿvçKýµ^„Cát•¥¾T™ZSq„sƒ¡ˆ§¢GgEeÝP4¶l=GÀ=èDªL­éáÔ곞€,5ùZ^Õ§ïR¯¯÷Å›OÖspd܃ΥâÔžO ªDë9È" ‹«µM!}‹æ—v¦R[iëE8îAGSwªO êÕ£ª´^—ÛLnw'òŠ;ô Zß^ZIX/Âñqº€T‰zGU©6U¨õ"¸ÓóÑÙKWïèËóÚǣ߭çस]C=ªJ½¦ U§Ösà*úÚ¼Róˆ¯M—átµ©Bõ¦ªUÍZÏ€ã-­$ê[ÂúÂÌ+îè~ðv3¹m½§†{Ð}T¨:U­zY•«~­À‘R[éàÀÔÅ’.}XÖ6…W­á”qº•jU³z\õ«ŠÕ²õ"8Ix|ÎëëÕ÷dyUßô‡ë98܃î¦rÕ¯žX-«hë9p€hl¹²nHßžŠžÁPÄzÎ÷`6PÅjY­®U·õd¨µD²±m4§ÈŸëmoŒ­o¤¬álqf µ¬¢ÕµêVã*Ýz2Hzg·x¦ , ë ¦a$6·^„óÀ=˜UÔµêÖ‹«tõ®ê­ƒß è>³§ endstream endobj 20 0 obj <>stream H‰ìÕ1ÂA A$®h#3 å;Ãí_wç ]ïãóx¾¾{÷~‚.@‡î°t:t€¥ Сû,]€Ý`étè>K C÷XººÀÒèÐ}–.@‡î°t:t€¥ Сû,]€Ý`étè>K C÷XººÀÒèÐ}–.@‡î°tþÇ%À*·3 endstream endobj 197 0 obj <>stream H‰ì×ÏKÓqÇñ¿!D^:Âd PºyPˆÀ‹ÔÁƒ HtrŠbô5aµƒŠvB„JÑ@B3È¢)Ö"C[8ÍÙ6{Áƒ”è´½÷uÏÇAôö?ß'ŸÏö6öôâÕÇŠšþgnéçxhÞzr§óÁsýßõÓzrGßøÎ÷®oßzÌDWê›Gu3tyºü#3ÉTÚzrŠ÷`aÒ—®ï]_½þû*€:`½9_Oܼ7Qìn/*kkñŽ­Æ6¬ÁïÁB¦¯^ß¾  ¨j‚õ"äÂP`öÔ¹;z\¼2Ž,[ÏÞƒPÔ5Ae°ž€ÿèõÜç³—êîç®î N|°žc¼‘¡¨ : êƒ*a=Gl)»z= ûÞɊλþPb+i½öxb‡š 2¨:j…Ša½Gàçæ¯Û¾—™k^Skðë·5ëEȼ±‹ú JèT¨ê†êa½Ù <}wúÂ}ÝîÎ_~ôæ}Ôzò ïAü•Z¡bèl¨jˆõØÛð—ê†ÌîñØœõä#ރ؃º¡z脨$ê‰õìËjl£©5¨[\Iy‡·g2¾ž°^„<Å{{S=Ô•DçDUQ[¬àŸ[ɾÁ)—§K—·†kO–¢1ëEÈk¼±*‰z¢£¢¶¨0êŒõ"ì6šwW÷êÎVUç M/XÏðÄþ©*j‹Œ:£ÚXÏÀáÈrmã°îi¥•ÝCYë9p Þƒ8(FѱQsTë9íÇÚæîgEemÅîvý¢?­ÁIx" ™ì¨9*Ù0‘L¥ý#3¥•ݺÏ×6GW¬Áyx"kjŽÊ£ó£ ©E*’õ"€Bš^¨ªóé&VQÓ?š·ž§â=ˆCRT!"I]²žpÌ-|ú^ß<ªÛ—ËÓÕ78•L¥­ÁÁxâðT!µHEÒYRÔ(ëEÇP|=áí™,)ï(*kkñŽ­Æ6¬Áñx⨨Hê’ê¤F©Tê•õ"àøû-À7½& endstream endobj 21 0 obj <>stream H‰ìÕ¡Áh„"éê-eÐ̃Œz ÌíŠè¸;O€kÇóu»?>ûí#ü]€Ý`étè>K C÷XººÀÒèÐ}–.@‡î°t:t€¥ Сû,]€Ý`étè>K C÷XººÀÒèÐ}–.@‡î°t:t€¥ Сû,]€Ý`éÿà-Àû'3 endstream endobj 22 0 obj <>stream H‰ìÕ± ÂÁX„!Ù*-c°L ô‘ˆôw…kwž\áxÏ×oÿ}€[ÐèÐ}–.@‡î°t:t€¥ Сû,]€Ý`étè>K C÷XººÀÒèÐ}–.@‡î°t:t€¥ Сû,]€Ý`étè>K C÷XººÀÒèÐ}–.@‡îßÓW€1¸‹§ endstream endobj 23 0 obj <>stream H‰ìÕ1ÂA A$®º"3…ñ ”¹2gûó¸Çñþ<ž¯ßÞ}¸œîPº;t€ÒØ¡û”.ÀÝ tvè>¥ °C÷(]€º@éìÐ}J`‡îPº;t€ÒØ¡û”.ÀÝ tvè>¥ °C÷(]€º@éìÐ}J`‡îPº;tø·¯žC3 endstream endobj 24 0 obj <>stream H‰ìÕ± ÂÁX„!Ù*-c°L ü>B ù®píîÏ“v<_·û㳿>|îPº;t€ÒØ¡û”.ÀÝ tvè>¥ °C÷(]€º@éìÐ}J`‡îPº;t€ÒØ¡û”.ÀÝ tvè>¥ °C÷(]€º@éìÐ}J`‡îPº;t€Ò…kÞ ‹§ endstream endobj 25 0 obj <>stream H‰ìÕ¡Áh„"éê-eÐ̃Œy ÌíŠè¸;OøÇóu»?>ûí#ü]€Ý`étè>K C÷XººÀÒèÐ}–.@‡î°t:t€¥ Сû,]€Ý`étè>K C÷XººÀÒèÐ}–.@‡î°t:t€¥ Сû,]€Ý`épå-ÀA_3 endstream endobj 26 0 obj <>stream H‰ìÕ1ÂA A$®h#3 å;Ãí_wç ü›÷ñy<_ß½û?A C÷XººÀÒèÐ}–.@‡î°t:t€¥ Сû,]€Ý`étè>K C÷XººÀÒèÐ}–.@‡î°t:t€¥ Сû,]€Ý`étè>K C÷Xº@Ñ%ÀÞ3 endstream endobj 27 0 obj <>stream H‰ìÕ1ÂA 1‚ȸ¢Ef’”ïfn·øú»»®¦÷ç{¼Îg}€¿  Сû,]€Ý`étè>K C÷XººÀÒèÐ}–.@‡î°t:t€¥ Сû,]€Ý`étè>K C÷XººÀÒèÐ}–.@‡î°t:t€¥ Сû,]€Ýo¸,‘‹§ endstream endobj 218 0 obj <>stream H‰ì×1€0A A$®h‘3 *`&·[|ýíÍ m÷3Žóz÷ï#|J4éA€&=Фšô @“hÒƒMz I4éA€&=Фšô @“hÒƒMz Iìg 0¿ Ï endstream endobj 219 0 obj <>stream H‰ì×1€0A A$®Ò"3é`˜Û-¾þöæXçµídz_àUz I4éA€&=Фšô @“hÒƒMz I4éA€&=Фšô @“hÒƒMzø“[€'PÏ endstream endobj 220 0 obj <>stream H‰ì×1€0A A$®Ò"3`æv‹¯¿½9Yeœ×¶Ï~}€WéA€&=Фšô @“hÒƒMz I4éA€&=Фšô @“hÒƒMz I4éA€&=ø?·ÊË endstream endobj 221 0 obj <>stream H‰ì×1€0Ä@ A$®º"3-CÍœëû9ÎëÛ¿°•hÒƒMz I4éA€&=Фšô @“hÒƒMz I4éA€&=Фšô @“vzùÞÏ endstream endobj 222 0 obj <>stream H‰ì×1€0A A$®Ò"3`æv‹¯¿½9ø‹q^Û~<ûõ^¥šô @“hÒƒMz I4éA€&=Фšô @“hÒƒMz I4éA€&=Ф`[€b%Ï endstream endobj 223 0 obj <>stream H‰ìWÉn\ÇÝà"P”‘~ªy°Wl(H´@†A Ð$%+PSMBÐ6•m>#?ãœ[õ†zÝÕ)‘ŠÞ#¹Õ>]u«îPwøõWƒÁ`0þ¿ð¯ÿçwÝ?ñù¿¾ƒÁ`0 ƒÁ`0¾*xd0 ƒÁ`0Œ‡ ž ƒÁ`0 ãa‚çAƒÁ`0 ƒÁx˜àyÁ`0 ƒÁ`0&xd0 ƒÁ`0Œ‡ ž ƒñpðèÑÎOŸ_ïïýiïÑá3÷Ìóã_.Ï.ö÷~Øß“â/øèRÒÊ/ÞéñE§“¥/Ò$­ñEEúF_†Å.hg“8:&9²3FÈüçèãþÞB©ØEí´ÞuÞ˜(Öû{ÚÐvoDò¡SV)±Úßs!uZù8­¬IãuçµÌ+ÇíÊ«N)¸ªOª—6Îû Fxùäðâò雓Ë7ïÎ/>Šo‰;X(¨#CòÅ“//Þœ¿ËåáÉÉÕúù»ËcZüXüž–~G¤±ªÔU] )Eá“ëb z¦lÔ¡ƒ]ÝÀºØY¥Õ´²&­Ññ>Ì”5Rv^zKäpN½pëì»Utµœ"guüñìb±è‰åÙë7ç™*æP£Ibÿ¯Ž>V?íïä…"=«ó]—{rôýêų§â[QV¿ÄêïÄÁá3%_b9~ÚôÁ!ÔGè+}^ÝcDKñg|ûtü ¬ø^üíïRœîã·çµ«#| m ÿ÷!hB‚ÖÌÜê¼í”.QQ¢ÝÅöÊQèuŽ•âɳóËb,qònýþÝÕù©øåçã÷gbýîôln¹í×;®Ö|sNÆ.$“„•¦Ó!¶Èd>ñ¸7Ô½#ÍV_ïJ ‹w'uœÝxƒŒf§šöj{ýŽ”{±¿—ÄÁcqô×ë_¬ëõ¯ãî^Õº>ëk´_Ïo"𶯶þâ»ù;kæ~¢n«òE™üP}rækU$Ü/g…µ©“:Ü üB²ÑÑ÷5n~ÊÝiWНR3 š—h^×êÔ9çýL±kª|}Ð=_Ëäs®4ÍNcC¯&yï'ô¶Ý²nÇFÛU-4=ýUB«ôŸç‚¯o_òêo‚MKÝc&¨ƒíf]¯ªº^%ôE9“ÿk´¾¸Áû·ë_–-Ÿl‚Kû«J?|ø~lƒƒM’:\¢5*‘.Fê‹%L;&òãÍ´~]·œï¼×¤°V1Wº¿É®jVi*z¥¬šd½ÿU¯äàu+Zë.™˜Ï >UĪ'”´(‹ãùý¾6[o^þDÆ;xq~~¼>;¯/ŽOßœ!zŒyL3‚—‰†‘h2ð.wƒçésù‚iºM¢Ók‘LÈ'•,i‹€q8õ;â·£õ°Ó¸„iQ…Κàvï‹ha# _ŠåÉç»¼í±Ž\ãºdñŽéØìœåò–qÐß;â£8?GOÈl˜ØUÍ:£ˆÅɽ€&Yï5L‡Wà ‘åqÜÃxÈ#ào¦H#`ù‹¨ ÖÑ»Ó8—ªOj¤ðìRŽZ˜Ï\•6RA¼)dBïQŠ8ÄÀFÓJ²FÐ^:ðX|(+‡í¹VË\Ú ºkñ}såüô»3›AR³Yú†¤œ4ËÄ­r:nÜÂu&ÅTHhVÔµØîsÁ0p>TvP‚:™Òðl³‹¼«Îdßú Šm“Ù;ª‹p{}ÛÉ‹µ®=Y[¥)ñÕ<)õ&ƒð1uÑZ=‹ž )í†2Iá8Ô›8­ÜMâ)æ[{º}°;É)άë¤/­¦6(ÕHâ³…mróî»Hjdÿf–?·[­Ñ2*®˜(libòÚín”@i•+†Çªh»èšTºÇê{UëžÒP°’ÄCÏ·G1Ós+ÁÚ¯¯è‰ä…›îX9Èœz¤Î>ˆ?Êþøáøòäg¡$µI2Êê}›„BŠNå:QÁ=—CUI :k¡ƒ§ËÓ=ÚB0u—ET)[ìÚÄ"8ê’d˜5I·:tyËC+kÍ:¤;IašÒM ”Ë͘¼N96†fh"-V†PH´ºŠ&+4Ù Mº†Ü…ÌŒ6’“¦Ý•!·$öÚMû+KNde´Ij“¬,¹%së¬Ê’93Ú ¶IÎ,¹%sÓ’¾³x[³¹ÊFÁOθdmÉ ‰å@CÓ¬×afÈŠ¬m6 h’“!·e†LS™¯ Ù“s›õb›äÜ›2熤²̵!'®¶ :v'9rKboHB႞r"'›UšdeÈ-™ýYÓµ&CŽdm³Ql“¬ ¹-s2d#ÁÒ ãP(¢¸3ÝÕzƒT„1Ö£è#-²dž€œ`z;Ÿ”øµ¹Ìê<H›o\a뻉ÉM‡¸H¹ªILÁÉ>yÚÎ`>ÙEôMI5‹î²ÉùX‘™É!J ,—™˜dϸ”Êuy …”e£—ª,Ãð`3c%†5ºšŒè6úZ‘@¢Òù¹!'ÆÄl’ŠqJšac!Q˜\’f¸ÿHfí³|#]fpë"ß:Ê^×@…ì…ù Ræ´êÏ„Ûba’!I·¶qR ‹ðvÙ[;J -ÕVWƘJ<ÂÃ8;¿‚ÈyU_u ´QŠÉZŸ´‚´Ä´OkßãGв'QÕ1ZÍã©MöÛß¶dγ‘ÌGßE£§PÊM€ëõÞyív³í—1qY;•‘oF¢‡óµ_‰Ñ!šÊ[`ÜÌU M£“«mGOUÄè¨M“lVCœ§-=Xl)‰°¥®3¢W§š ÆxÁàÊF%Œ·tÈ@W¤à޼ʩ@’ÐߨPc]˜˜¼IØea=¹š‘°aÄ#^•¤Í ¨IVîH-¿Y;“‡””s 1£°!×€´H»U®I”lC¬r éñf¹&áaS¥šDÃ`¿ª¤ššSÍHÖ©¦&‹ÇI<â« Edš¿rp(BªŠ®¬¤ªD°RÏS ìª]ÚˆhÖËTï 4Ô™ |ãç—@)cê«a6©S1co…hj&×÷µg]“õCéIÛß¶d6R‘¾Sž"⿬WÛŠ]Ç}7øöKÀ‚œã¾_’'`ñCè-LÎÈ–`F2Š‚Éßg­Þ}©Þ»O¤€,#FkvWW×eÕª”¯èܸ«»B™ª„EIJþpä¿#‡Eý÷‡ EÊôíßÄJuÃJCÚeõ\]Â<–€X ‚é×5à¶;Y\’õ§TCÇÇݪ¤‡¡>=Z4š°0JGx\Áç•Í£ÌL&Íwj¡÷z¾³ƒ"ÃVãµÁØ;àt“\¸Êwà¢Ò CèDÑqdOt«T’mA ^ ±0ÜÚbBZ[œãrˆT§2~–‘Xd¤5ô¥„Œ$µ›e$A¯¢‘Dàƒ‘D´‹³Œ¤ÐŽÞÍ2r€¢Ãð–kr1ÞERÌ*ûñ b»j$·>q;A£³Ð‘D”OBGB"»aÖ‘C´BGÁ?„ŽœFîä>{Úi?EY@r‘³¢€¸ÉXɾû+•¨O"Ý׌ÂĬ# š £< N(3}˜Ï×­›ÈU tWG¥µçH¤Wñ©J¹ä )@ÑУʖàБg›Ó2¦6µ½~úö›Ð–²Ã‚Öè_m?á/ŒÌŒ™‰ÂŽÉY]~@á$ü•Έ*^?~ûÍÅbGç·¹mÙÂcgÞ\´ºR§ÃBgLsƒB‚ˆ9H  Q±Wâ¡î>hµ#¶Ý`¹û¥ä„ât¦Ónsåó´çO>Õöª£šmjÔK:\Î~b«I/WØ%±ʇwPDhå ¿€·Œâí.—¤ìaG±!ep c*:»?íŸ"ýͦ}iˆq¿aoUÍ ó‡p¯”ïdñtw ¦SWC6Wï!¯_X}§ÕhÂÑ–ÎÆôX uØCŒˆ¡ªKØUÔ%Äõ­|M…ÚeSÁ@Þ÷±Ü1­MM£iöʘ|8÷H,¼þùÔ4G,A¤ÇUBÎj¦ë¤áû ¶¿´ëéç…ÅšpSf;ah;­ iЂ w²–`=þ¼²YïB·͸£dsô½§ å ³ÞMf—`?þ¼²9Ïõ‹QøhðÞ õ¡JÂdÐ:84N‹@ž,Ö×ó"’AV— ˆäÉæé.ÉNAkf—àÉ“ÍC$Q½Úç8•dÇD,4f"†Ôq<ÚkOƒøÈ>ÂØA±a` Ê0m¶» â"ÄôÆ Nkf—àÆ£Í9ŒîjЦQì ¦€?ôzÇFÖúøñ Ñ)„Á§W؈ßÉ^½¦û3¢×0§fr…ÉÐìMZãL‘Z¨ê•¦Ø'°(v"àa7{ÚÖ»I±ôÄC±‰V )NB,MŠsÐäà&Å>@!Î/6\¡*Â=pˆs÷Ù› Fv â›§b'»µªØË¤6me¤d RÔAWìäVM ;AƒŠˆ‹N(ö iŠ}€B±O`y~±ê¢VdpqÃ-ÅrqÖh7$õþÊ$´x ‡¬”ì%])ÇI²—¬¦äYd¾ôû°ñ!Ï^ Œ,Wšák/µþ4É~.S!ÙGö…dàPç¢Ì–àìg›3AN…ƒVƾ»f›çªk˜¼ó]Y•î€Ói8X2µe^pOÄ.uý»–, vªH¼r…ÇA™‘«þÜž+‰ô\¢r­ÐÒø=T‡Ku Ðk¨:".S ]_¨ÒÑÙ§r@Tâ*“ù™Åìð4…¨»¸#hì0Û>w‚Mf€™@¬4)ï’X“Ø -A‘½È=1,‚q4؉ÁÓ>"pÁÛÁßL´3}+ý×Ù[S9AÞhÜÝ1AÝ+/¦éìDþX=k4®)6 !Ç—9)4”y)Yt!›©D…0LPQP6‹@©I¨–BQ‚²G)µG •è©_÷ u8°Ñ¡£ŽV؆'{Ó‚¥6µ½~/´Eë°tíÿ>WÛOø x¬›•†‚¦TrNè:ü€!Xæ,ÿÛ^?‚L2 R'DH-eË“°ê ܘÃR¼òãÕj]¿ó;(wÁÁúî‡-æ¬×eÞŠB«íáÃÃÍûã÷ïøøéOïnŸÞ}xÿøñ?Ûˆ©íûßÚ¾ûáG­¶Û‡—_?üûýÓö¯·¿¾Ù^><½yµýžŸý‘á>kpš;àíâþ¨ý:,*{éO.Àg“ÝŽ!gÐÄt×ô?Gÿ32fʇ§Kî`_éMžWg´ |Ó+I!3 ßÒW‘>ùÒ N!Y˜üy.½`P­í8ß)EÍD¥‹(žd&;Œïî‚‘:e‚AÇ|lÕå|'‡PÚhþn‰ü¾>üsï>þyxËæÿîïïß?¾¼yÚ~ùøøôî ÒÒ+üö‚CÖFõ—Õ¦I=ä•rrÿûá(|Åÿ »MÆd1â‡þ«Ñuµð^Jèaâ¡tzÿ ƒØ|,ËŽXd&j òÑ*LAŠ$éhZ@¢A—-?lëÛñÞ¿¾ùmûs{ëß~{üt{»¹Wô6F}Im™Ü‚Ñ“0î?áu¬§®šÚ¦â/ª:Ήù½½~iç, † Ô w…»'/1qgKm7ÆIcÖsÉùü] í—|a0Jþ_×z@n"‡_…Ú0Ÿ‚Æú8Õ8;+·yf%c7á2@‡‘¨’ÝËB"C…€îRÞýðxÑ=𳃂9 JÍ'í°”5Ô±n0$!3°0 5V¡Ì.`Þ¬#Ö-g¹‚«Bb¥XÐë&ZÐ R¾rÆ`yËHÏùì½U\ð›ËE"æ=Eø1LÎ ZÏ›ÕÑÓµ¬‰/8†[,ˆ¶ÐKŽÚ”s_è.kö¬‡×É}ýròQCcašÊé:fiAÌÊ"Yƒ˜+Ðfn*¼Ê]]ôÙr²:¦ÈrKB1C  ž °xæ!ªR®ƒ Pƒ‡.BÖ¢°œ€Dó ŠâÇ¸Ä Z¶ðP„9|€Ø#œ“ju~èkrÔ˜8 aŽÂbŠ. Ùu¤{¤Ô3_po!™ÏôDŽ†Ú£Kvør‡!rAP¬(Ô÷£¯^PR(ô*7<0®ËŠ šV “©¨RjV]ÇnѦ”2üªõêêÀ똮Ûëú9c¼ÖÓÏ ‹»ºáöƒ bV0Ç— ´Wïv­! ,Ázüye³Þ…ÖGÝ'#@£¼ÙE¹ÉììÇŸW6Ç"Á¨{ð‡}ôððJÌ6 Eɘ5pħa<Ú«O§E("Öm®0Ä“ÅÓM"ˆ œâU­®°)„'‹‡fˆ;,kS-vLÄí Àï€"ˆG‹û… ‰õÔ"ˆ–àãÙf #ˆB½"ÃØÀ)dÍìœy²9’ƒÔqîŠ@LÆŒK—Íé8y²X éalÐY¯¶»Ž#úÈ?ì—€|Æ}¿$OÁ ’‡Ð[˜ì,ÁÉ(2&ŸUÕ·ê½ûdÆÁ–‘†5»«»n«Vx‰ÃKPñ`¯ÝÒ4BØA­nt ÊžmŽ.8•T§Ä`ˆ ˜ªµ>á;:Œ^U¾„pJÐP7ÀH¢nÇ1³Ò Ú®NB „!ÐPñp}!·AU9¨³³Œ`—qŒ)éš ý÷¹¼³hœ!ó±¨%Ä&‰@¼V¶,`b?lcð²÷lßXÃHV¡<_aŽoDKØ)Ûë1äcFóp2†Š`Ð3‚­/ ¤f“Õð]mÆî'Î"ñ Õ#ìgÒWzzU‘KI¼uTZóG"ìö¾ªÒRÔz{+“_"‚er òfô\Pk°^Ùœ‰HñÅø3N…4cÓ›ª®ƒòâˆÐz ՔǩÀ8WKPf¹3‚Ö"YÔ±±!œ,êêlÒ”, µæÏ[²º¿=YéÉ:…å8 !(u¤öò`‹TÇ¡½&zY’±Ø…ñŠ ˆÎ¦{9hr. 2¹|¦µ"S®,4k2:m |PICà» ôT¦ª`¹…— ÈI^%Ÿ@E<ÁåÒ­5ʨ41F§œ”é‡ (H€Ç3çtÁ'Á9‰6PººsŽD:çtPrŽkÚ3ÍÊ©4ò]Tfîv`xceÆ^ZÁ0„X+Øe/‘M`乊‘Tåm”G‘øÐbÞ€·½›AUD?§öJëîH¤Wñ©J%åŒä×!t• ìç^PK°^Ù\P õjBc‚÷W RÁ`y+³?ÑRíRhæd°Ó1hÄâ£BzÃNCÚuõ\] i–¨T,«ãv_CöòÎòªñ™p§š::¸We«~r\´›°0ÊG¼¹‚Ï+›µ©-ââÃ|§F!’Pœîì È2IÏì½¾NO†¯1Ú ôCSÑ«x> !!ÊÖ#$edoZ;;zcxÜzcBZoœs4({•È¢’¯m¢’«â,* ÔJ QŒ…ŒÖBTšEe0æÎº'Q9@ÑftÜ9ån"+f•~uñ ½Ÿ»„$†gÄéYT˜´¢’àëgÌð„8Ÿ'‚'Ì„ D%!:*!*'¤üÁO`É:ÙOJVÏñåC;±BS²Ö ýA‘™/ Þ* ¸Û˳WY/í;<+èù®Š‚ñÔ^hÝô">© ø‘{¡)(zÙšòlsÚÌÔ¦¶÷ø¬mh‡m­üÏS@m+á T€jD¥ œ<ƒ<•›Ù¦‰ªwÏ!‹/o‚ ÞÞœG&1ùnƒý" -æl%·„…})¿\ƒ§ÇßïÿUBCî?Pz¾ùǧO×§ÇíÇ/Ÿ>}ÝBzƒß^0´¬(¡KV›¦Aî5Ÿ,ßÿøûßÑWôŸÞ.ÒÉñCÿUñÎûm˜¡ﯜ+ظç< ÿ1§Œ EDˆ^$@ÓvŽTð`€ZPÍÇõ—Ífõ>ÿõé—í/Íß¿ÿòðuÿ°¹7ôâ5”žÚà³"ÆH0pÛi"“@ãJŒŠ¿þÂðÞUÞŽ}(:m¶÷×vÐBÑ&ðsí—›G/I¸A÷; Ã.Z¢·—o£¿êØÌEpÌý¯~^ëý.’ù‡~÷ý—¯o?î_?~þôðå?ÛŸSÛw? Òß|ÿƒVÛþùúÓçŸ?=nÿþððÓÓvýüøôfû–>û3ýEé¤Yw£çïbŽ®ôbÀ¸ÂDEäðÀ’ãZbü˜K5úÙ¡E ‘àmìxÍ-ðŪÁ´Ò™šµŸ´£p%ŒTÈÏcíhÐjÂNyAn¬B©]@œYƒÜ.„FELRÅbˆ„GT;Hdž1bÂ\?Ÿ½„èá@Æ¢ç¢BW@r‚Ï€W.à)óšk©&^qÍç ¸Á‘ÊÐXï_ý\KZO‰£°`Úüæµä£¦šKéˆ1-;üld}¬  ,Ò'ëm€²2w¼XF{m¤2BIƒ»:DÔ˜Ásâ ´ hÌ È]qPAôèŠ6Ä„í6FŽŒÇ2EæT*Qf,žž|<ÆCHkà9H\H`JÎ%ÝéäPðÙ«”^s-sË‹ç|F­9èŠm)•s¯{.íX1h¼ÖTlп}%Iqçé½% ¨V²"EAê;AH3kJ¡­6ÜŽÙ‡Û`wËe(û"™HehkR-ÞœoŠ”×(‚©<½±¤œ15å™QŒB[2±Ém©È˜ò Š)¯`K:ÛÏFHèÒl–?mÈ iY}tN¨ŽŒû×XäöPÚ€àA®õp¥«nßã\ÑŽá»4X‡•6dVñ©JÅ”_ÉÒR@ÑҫʶpI˳MõB3syýŸ—ÚáÕöEÜæòª-àŸ­¿×ož>yæ  ë/¼7‹­‡,ß9jæG²Nˆ=l«6Û‘Ÿ^E‘ecqp´u¸€˜rÙÖ~¶°/ØÙì{¹ˆ¼§EoYt· Ú‚3@bõ äÉb÷n­‘\PmYØBÉ“Íã^2’ Š M³{("y²yˆ¤…¨%©’\lÅÂpKK¸=\‘¹ðtµÙÙJBWú ]ŠmǘMªŸùäÛg™jLÁx¦±°ÁŽìÆŸ°º_í×›Äyßì[Oí_æñ ±–‹Á¹îe•TÁYfŠ[¤§´dÏ€÷ ¦Ì…·Ö"óµa—}H¨>q ä ‡•g¥¶ü¤º}Ý•©'"ûxKÙØ†Ý„Éß!…ªž6h,}ØÙÛ<@Y¤hEuÕ ‹ô¹¢+n°µ)±62y‹ÔJ®fh e>°G¢hO0Œ@¶$8UH¸S9‚c9Q9š®ÎI2stŠÈñòÃÜ‹™ûÅÝ™ŒÊxTð„ªfâQ%©”\IL¥‘ÈúÚ¢ô1ñgÈ)4S˜’©$.rm÷Mt™¼Wç¡j,¾ÇФØMÞ™ÅìĤ±(b㼘4L¦±1imrNL;gí˜4 bÑ“0‘!1i@² ELI椙PN [ÖÙ¾‰ATˆÏN÷8EG¢ÊØË@$ ±Éá0hXçÜ¡°­#'—ºã IÆ$}‘‰³Ì–3‚Ì>•¨3+óýæy”põò¬¥ Kvövc.‘sí•EÔ%£„k d£kÁá0𨅠Ø;çqñªxÎI;’ÔíÚºqâ*,¡$þKì×ɵžsœj|¶N>L¼6U97•óu~,mY…³ÎÜáÃΦŽ8Ïà‚Ú…mÖCm²™`üܱÎA•=‡G»$þoÍ(…œã΋Y´7g $Û€cœI\·ÓÃÑŒ.8…AG Ó;VB1JV£eQÈaèE‹bPrÑ&Èm—ZHìR!T ·´"ÇHQIÅÅV+a-Kþ[®Ù–Îs$BJ£›AˆNMnîrñàð1¸5·(9=¶ÁL6qMmÌ…’½ÚŒ™=™Ù’UÙtñ"ÿ–€Ödü,qI7öÌKÁ™O¢ôZê|,¤JÔòTQ ”D£š‹À%Lk¡1ªg)M'%zªA1§WŽ—œlö笘3RðdK=¦ÌÅ\^¿E›‰GÕÜæòª}À?[¯ß`h¤‚JðœÜ”»2wž#ì#·9µ7µíÉ5¿ìòßt÷0 Žîår–n%…þ̵¯õáióæÎ¿?ñéóo]?ÿõáý›Oÿ\~af.Ï_¾ÿ|ùñÅKk.×?|yÿöò÷Ÿo>þqyüðöŸ.?óg¿òOŸ†ÚÁãÕiy<Ší‚ÁS‹ž8JÈêÐäìr…&¤Ø=Ȭ|0W±zuÜe¾“K"-(d`Î\á=4áýîË[ðJlDÃøv³àý·Àw»À>*ˆgKÈo:í6Yÿ×QÅÿQïÚ/[Œg§*­ì͹£ †­fS¬ª,±Ü –TÕºÛç»–—¬$D™°íy7…¨ë@L˜envi¸1#ÎüŠ”ëèžòðU+ÌÞ€çÁq³jO¾u¯3|W/‚2.ƒ«³@õÜ2up:#7ªæ‹òÈ6ôØÎJ"|˜Â¡!ìLÛÇÂE¾ûn¼Ù“ÿ 0?Ã/ endstream endobj 224 0 obj <>stream H‰´WÛj]G}èúÅ`…œvWß;y²0 3óÌèÍœɶ@G2ŠLÈßϪî½{×¾œD”ÍRwÝkUõÙ«OF½yÿ¤^¿}OFŽß¾ß_«?¾î¿Ý¨ãÃõÍ…úùüìÕ§_ù×ù™QíÕWûó3r:ë”OE“¬:žŸíŠ!Àuð¤>HÌÉÉèCP>xc´'±¥’Øg¶òÍÛǧw·‡§Û‡ûýã_êÆ~ÐK|1VÁ’”½£úaBÎø(†J¤! €ó§Ó<+CàH‡èfžmbDÚùE¨&PÄtKË ÅàãùYQ¯/ÔÕO¯ÿmÇ(™K6®à#35vŽjÔlLºD8n­G´qÔ$>amÐ֦긅¿¶”ñdªž[—uŠø¶&ëLl'‡ë”½¦b}K@ŒrXœk¹À9ƒÂdÇ­‡9šRa(ÚÛ˜VD.°Ò@˜iL©˜Á‰¨C!Xt‡-®ž\+:¾gÖ¡1¢³sÏV`M l]ïcàÿÚÙ¢#§¨ô?‰6JðòXã—µåEœv^[ Lr 탥Y ÐÎøH©¹j —ʉ“£ÌÁøüï›?Õ¿Fûsÿtøªü[œP‹*Ì8ÅÚìíß8mIƒ>‹‚¢lG—¹Ðì`»Í\¹Q]Ç‹.$•)zˆÇ•W¡v—Š º°É僅ÚOÎùçhã?ë&BŒíüXÇ7Ǩ²m=—/B Õ–A¬LÊ%£—ÆŒµ¥RyL#á •¢ X¹uHÖÄßêLJr\):þcÙPŽ(?S‹?“ç€åB<»–ÅC`²¼Ú!9Π+w…PÈ;ï´Ï ›qÛ¡ó*]ÅPk'BÎfœ3Ìmi^ßÝE I0`æioÀ‹üWNœ)L‡» )8z–^®Šg݃Ӗ‡'QªŸi0LåŽ1Oóÿ£  ‹2ÚhVP+°r3ª5¶(“M猷i^z#8+Ò-EÿXPŽRN\Pä›#WøÓ§5FFDàv¼´®í Ü‘ò‘S`ÊÚ»ÄK \Ȱ¶Ò6*§S°óus (›Õåd#†)ïÁ.ÙçFG;4Tö(ú2 ˆàZ+Í<ç"¦|qqpÉåVPÏ4—­5±ð(Eýe¨ñ‚ú›ýõ§ï?¸î#Ѩ.^0îêÂrœ ¡µÀäèÅH§Àáúݖ̶ï8<<ñ…•Àû\wœ 䨴á9IØÇëw[2]–½.lxì,‡Æ/x'¦Ša†GÅHðMá]Yç¹—F„ïhs˜À4¥YVA|sÓmb¯Á†ñ²ÃØ_ƒËS+b°T$aGaĆÔ.b¥Ñ>|ºvŒ—v¦×bùÅÄǰôUl5bKÚ§+è‚õX -€¢˜#[ãp¯a–_f­`f ãݯŠÇ#«"!†Á Ÿ+¼³£õ-S¶>ÉÊà$_C û(K?!C6[ÎGðC}â¬ô»¬Êš$ÄóG;#¬à rÞ [{•u$RÝ>lUh+hRïDî KûØ@ÃÿÔy1mƒÃí» ‰s*2U«cÊ(¢êà°7Ù0/¹J½ù©Ärœ]7 E3P抙°k÷õ\À^L"WŽwr_æ¹èŒÉ"WÝãž+‰ô\­³ŠIGÏ/$<­œ© RF> (–Š4Ùγãî ØãÑŠ‡vѰ{À¢Mp/ Tq;ƒ‘–“8´T_Yü0ù†ož#)¹˜ÈFHŒ¼Ã-A<íÛ 9Á6Œ¸Ds¶芉‚m€XãH° E%›0g€)„"ØÈÚ‘m$2²MÇ$ÛH°eœÅ' ¢*`Ìróâacç5V½$Y‡@R¤4ç„aòó˜*Ow‘uc¥ø4lb3+PB„ $ŒM+‡ÒÂïÃV‰Jº™²_¦iÙAÙνž6ÁñúÝ–Ì-Æ ¨ìP86˜Èx/´ ¯ƒ`,kÊÄÏ™ŠX~11²¡ aCn3Â@Ha&©#ƒÂá^]ÁÓp’4üI߀Ô{ݬ~Lø3HZzxvÛQ§äÚ~X6Ü$AÔÏdòÞmÉ\ÐTÂÈ¡¸Ð‘žP¼ÐÙA™æˆ÷BÆèØg×1Ò)û ô#q‰&·ç“€‘˜BݤÀ™ywÀAÊI¶rw¹w‡Dzw¬"³ˆ\[]®“lë$öèíë$J4_'³Lïë$D¦ˆ}H aåìû$öí\8‚rŸì Üq†ýl‰œàr&¯ÁÊ1áøäå>ɈvÎÎðüèC¤2<“‡%¶1|6x¥Å> °³wcx Á9+^"#ÃwL2¼[ÊY|4rŸRhA­°•’“5ÆN’äh1˜Å>‰¸zZ™~×霳Ü'¹6|\ì“\Bõñ3ÙÚÇL÷G ½„W%* ~̽Ü';&ºyª°MPì“K‰³ç˜QF]]ŸŸEñ,9ߨÿà %{Œ~5å+H¦?VzÔ0Ô%79ÿ¨«=\)–‡¦S%Þ¶G•€µU¨‰“K@ˆ̯'cÛ…5èJP9"˜Yo'È\myäc~r©¼yüêÓ›·OïnO·÷ûÇ¿Ô/Œõæýý“zýö=ux8~{ø~­þøºÿv£Ž×7êg>ö+ÿ‚Â4ò–+ƒþ: …d¸‹C™[AAãA’‹Œ‰ÅÆæVp|àg’¯aYë9¾c9 Ï3¯HMK5` •–N ”~Ž ŒÈZàçZ‚e,=±”@áq¢WM.mgùÐ=(©Ÿ< ZÈ,xjæ„-' 6o‚£¢l±€¥Ö–6@&câà&¶2ýxù{k:þwù•»þõÇûûýñæZ}yÜ_ßÞ g1_à¯;tœs E½+Fœ"?¯¨Þl¿/¿œŸñ)þñj‡G²yúè­W Ô屆2.kË0£“R}v±dÿÇzµëJvÁ\€þá¤fÀ÷#]PraN6®m8˜Édè÷]Eò°›s8Ö5°°º§0Ý$‹Íêj銣Åå…¦j1“¤:(I÷Š"~óË‘rœ'þë?ÿ8~=Oû÷?~ûýóßGø ÷KãíM|Ù¬ßÙÉÝ ðÀ’w‚=Oœôö±wüQb<¾?Ï@´­£˜ŠÖ «ý>´g w•2üÍ·OY=•Â~eÕoÏÿ3.:4ݘUà·k'Íß>ÕÕþÑ‹èì¾rw¦[ˆ!z­ïTú¥Ð;ú‹ÇdkK—­¹§ê• ³BþàëBïÀ?­#[êÈUt(‚Ѿ^« © í„¿ÌRuƒº9íqÃïQ‘‰N ðùA¼lò¬¦lÐÔ]‚¦ÝàpoÑïbo‰Ë¡N§u·&‡vGŽj ®n6Ðo|i]–ÅWâbÀTÄçˆ2Ax¾}}¿ŽËÐõÔ@/Yâ/(–¬Õ­u›Rãò‹K™ìA´œLK«Ko‚K‘îúÓ‚ò6òŽE]I¬(çßä«>¼Q$FIaä2ÅSIÈ)¤Ìf˜Fø¦æ6#[Pôh\×§DQÅÑ ;‹Z±,ÌKp¦ $ µG4ø+8XͦPŽ^óKèÄnJó…@ øZX<*ÅäÒ#¿¸eøuØ;”$üÃ=ØÐ^UÚJè¿ÿÓ'C:÷j(é4´)›Xšu¥±µ£+ÓÀz]RykB—s½B¤‡Á«îž;a¨À„·ÏðÇ.g·@>€}Ô#^;ǹç¢øXì:Ãá]αV %Á4Ð÷Xk‚%áýšu‡Á]F™/H»GÙÀ**~°b0,‹äÒTüH¸fò’³¯)“ T¤Í {P˜¼æ|]K1) bmfÝaŠÉkƕɀ‡F+­KrbšGhz¢ÛƒŠÇKÆq4œ´9í…F…±™`‹)/ÇJ°Úè7/$NP›I7¦ð’ï…ÂLAöqåp‚НèÑ+‹õo@Mâ%g_3¢¡V‡éS³¨@ÅØÌ°…ÇkαÖܘâQ@EÚ̺Ó׌ÂäF\aMÙ"Ñ}3f°ÐuEPCwøŠð¬V4fÊGÅDÒëÑ¡?»¦¸ e.è±@q|=-oÐ}‰˜‚ûŸњЅø¡A\XוàžÞ‚°Ò¾–^ÐaÍô¶z‰8zµ†Ts"&Âq–„­ü¸íptnþ¬’W"¦´í…»ƒË‚îÑš‰dxßï¶ É9ørHíïZ}§»%Ç#¨ƒ•µiú)Ì0Bœ–; ‘TLn[ˆ‰ZpuaîÝÃ@6$ô#†à6m²)|vV1CUÕ¡—•„âÒmEegm°‹.›` ѽÉ^g™Íó2Žý¹+Ñ^ÑöøEß<'´²ôú=Á ~`nÖjÚ‚gøc—s#Ó†eÊTÆYH\¼x¿V܉ée3œSyêh¼˜ÕôÔS0i†Z^@L0Îdu[Åu%’ÛÂø™²}¹-/ÐbËmÍÏÛDÝÖ…—%ÇSžFÁˆ“ŒéJ®AKG$YÒ#ßbGQ1]oˆ9ÇbÄ܃¶šˆ Ù6Ä€WAhãÝÇüX@6t:Ó ÛþT‡ ´à!]A­`¬·Eä&X µRË Á˜\¹!‚A0ŠÜÌFtZmpg÷ìJ<Õ†ßÍ› µQߢ6*µQà¸ï–;ƒäYÜA£]—7Ú¦ÕYaí„|G³ ÉBòaÕ²š=O¨*˜××h—XŽ&•H‰6­Û@ÅÚ$íÜí¬²y"A¤‚¯ªôFÝüh?O ªç,Õ´ÏðÇ.çFo`:»°WC2SÓ€5ÏöoÐ,’9ÑB5K„gÄ i ýˆüŒ*@Ÿ)©&2Vt¼Žt¨T¥VH œ;&›?S]Îø9|íXTkíüñòÜ&¨Kh†Ÿàc—óE§ª=oJ­Y ÖÙuÍ ê‹†¨blÝc:8W¸ƒß€úµíüËÕ«ã†L¨êqT‚]ÀZ–§<Ï;‡ êq\hYi‹ë{º)å'°ùI"¶¢ì¦ŸŒnÝKÙɈ©CA;IIJñ61:øšòâ&#[…«yq“ªW]DxSã-(gŒÐ¡êâ,.¨fG$›¨Ü$‘˜šãy'h›þòÎ ¡7®SÞ£ÅF³ºI‚Þ¤tê{´ùlMßշ軀Jß8.¼åŽì9gQpS¦±«j‡`ñQ•X;¢v“äÚYWyçUµËÐL°vO;c3綬ÓÓÈf1wÁ JA©²y A¤‚¯ªä]®^ÙIÕc–rÚ‚ÊN^s.™9Ìñý?ÿ”Ôdvо9þ†((Z ½ÿ0yP‘ÆVÅ´ÿ¾ÿöóO·dà B<Æ?káùŸ;;¸y¶¢pÀÀWY»bµ3N,£ÆñƒÖRâ{µœvê,$‡²D¶ ¥€œhùx=çnC ä†6E˜½e÷àEŠÃŒ¶¤œíʺZ³ntݼ瀻ž|bŠ¡Ýf¸sOzà6îÊÚ¶á<. ›•5½@nÉÝKÉØ¡)˜Üº2±pέºÛïPÁpôëï˜(ù´f\»ÁùcÆ»uëÚ#îÀóŒ®`£QV©, ´cb׺¬åÉiMÙbè¡Úa\Cp‚Áÿ½Ç¼Ôqã}c`ÅUtp³õµçSÕ³a¢Á2 -ŲžËà*ÉvĽÃFìc“¯¯ è¸VÙÕvãã&ÑÔZ©á;ìŒ}lò QÂí׈w‚‡ÙÚÄScž³RZ—Ùa#ö±É·voO1®QH¡çõe¼ô“(Á„‰ò.ùúr.äML5Ãw˜"ï’ïeEž`B”,³Ã„¼K¾LjNnš2Hå &$ÈOƻD޼K¾¾\,w—a4ySDÍð¦È»ääÁÔVœq!obB”,³Ãy¯ùVòà^|Èë³Lˆ‚…öΖ7˜wÉ×—ƒ±îJ‘71EÔ ßaмK¾¾ÌÜ‘"O0!J–ÙaBÞ%ßâ .Ȩë´ÁÿŸ Á Åæ†ï6ôàD‚o‡¿ÛwŒ1Ó'Ñ}–†ø„±Ÿ9–¸ bÔ€1x5æwb3wCüÑrã3ì1C#hóˆmÓÜ+ÙINŒ€µ¨8…¥Í²ŒB÷òÎy:äLäo,œ.¿±(¾cóR pÍiÛÖ}CÚ¼ ¦“xYÈgLG\ó7C…'1©0*qò!ƒwmé€sm‹§»3‰QpƵý†H Ð$hÞäüî70% ÖYÅjUÅ$¿dæ$Æsêåqäè­Úã( yùæ9?/E§<µ\6ª8uO71$h†.”vÆ>6ùV%iÆÙ£®9Ì"Áš“+G4]LSkzÖd{LÅ:RüSW€5ðpÂ+£QÆM:Äkà]\«ØÉz»•yÊóZ40îåÂÄKÓBñ5_fX`§ž+Ö\482ÛË1 @ò†IñSÓøÙ¢|¡!–ùÖØTú’Çl )®‰û?ÏÖ*ºÚ؇Æ2ùî8Bàö˜-@ájJ¬©Ý‰p6ˆb(Ù¦E1€µÆ1%@ľD3xk£Ò ¦Ä*š¶Ð¦Û©èš1Ñ µ{E^…z\:ÙõÑKö”–O•‚Òk*‰U¢K*n©NÞœqJHx·B$5nˤuyIòª:gÍS(`Tç¥ü”nÌë=›ÄSaêmÎrÙagìc“o£1Þ] |†(ošnü—õjé±ó¶¡ûýwS :7’¨g» M€²õ®0®c4ÀŒ¤ö¢ÿ¾‡z‘Ò'çQ82£3")òP0¬ ”€/ÑVÀLÿÀS¹6ÞàfØþ¼¯Oq|„†ª›Cͺ­&51nå¢ÅÝ=¯ bªê`÷G>š·¨Zö[=“ÆT“œŸª÷#âR"âhÇ^ú6Š‡Š¯Û•21²LYE&¦òÓÝRLgLË¢÷ œ1å>lÄ.X.NX8l)©€JXªP NUý¼å¨z ôª¿Db Øž‰Nó·‰tþ–ñÓ[áo8'cVþÌs+g°YnÀø…¾eƒúan è›`òj²÷(_ÀÔ2ÿ9” FVeº£èžüÒŒ™g’^Œs4^Z1Δ¦o@lо0žŠ´b ¤!ÓiŪéd½É*úÀó›ÒUÁîå,…ÃW"¯J Q°1ªû¨İ-KM"G°¦0Î*î%ªÄÖIÀåA.Š£~Æ%Ô¹—äVsª K²…¾ML=ÇY('LÑ·‹¾e—17s{óOdì4Û~óY5ksûÿ«• s¼"ÆÿŠŸYGPˆÿ»ÙÛ›·•“ `NÜFÛ–9!,8©-”ØÆ¿ÏÔ_®ºÚ=§ÞTnVR[0'_mÛ%§ìê‚/W]=+ܧ¸–¶¶[NÈ£A5W†ºÔ_®ºÖFD±ÙqàŒ Ê1*4’8LA‰Ö®«Yš²­ Ih¦ì’híºV *Z’Ð u'H¢µëÚ¨4a…ÄKTµ5!¹tóOxå'H¢µëj–6Ÿ”²ŽÖ„$4SöI´v]=Z T7ÓÑ„f¨;A*Z›® „ÆÐT´&$¡A["gó’híºš%žn}‰’ÐLÙ$ÑÚu5 í Ih†º$ÑÚu-]Qw@ž-u„B"Sw¶‰Ø~€“çIÁlu|ÆÀ€û÷lB›õxùØ{ +¸ ;*Žc‰! ö#Ç@ÁäY‹¨´} b`þ¶=± BwÙ¡€-`@|¶¶ž½uxp|´UMØ¥îo™€’ ¦ YÇ ŸÀUAÑ튩2ÁCu0‹à‚À†0!V©ŒÛ Àbìã»Pƒ0¸œït ‘…"xŸ o5íQK–§wÉð;N`ˆ‹ò¾ÃáÃ<÷˜ë8Çœæ±%È3yP‹&ìBI+7)¸ž¶‹JdŵV'Óóyä«=.•¥xÀH%¶(íc§%÷mâϲ¸BCðåªë°‰á¥%ë¤L`Ž “P´ªr¤Ì“ÎäOtJO'Hêñ,ü¡ó„৉퓚œÉ…%÷äFk ÆÍFÔ¹'a¿û6gP]oà $½€]¿.ü@N,€è ^6€H Ȳ£fe8ðÎgs¨R0W°Ü¼¿—ÏÇùQû|í\zV"Ñ›£3ö©;y4Ó‚¿na@|ví•·N '—N,9ŠÒ ¸$½Y–^ÌäP¤xä'ù(½`ªLhö…ÔlB-x¹<86íò&EÛ{-¾SôòøPSPÕ ½³Ó…ÈÉâ`JñLAÓžZ‘q»(ŠHRˆ£j¦ër޳B–RSí`äs4ûWÉ˵q‚ºàËUס„pwÈåÍbÂel[¯ ¸ξDËçd0ô³n ýŒût]ÏOm|‚®›Ø—¡BÎÕJif'…ÛÔ€ÉQÓH??ª_Íù¤ùÙ5l7y4j×ͨv7>TÏcÊJLÿ:ôrÕµ/PÞd”¥ˆQcÊ"0 •¸˜î–b:AZ0Ü1aòêcH;”‹“‰?-%y%8S ºžÄञÇÍF=«s¯çýîkd@Á öQŪ&RYUF3òVXεŠ«Ê܀ˠU89Bÿì¬ Gã©Êæî-Æ·ª¨‡á|.GHÝ"ó„ e‡ÈJ"@aáµ"U xòK+ež[H:)αҷÞHq&Ävi¤ÀlŠT0žŠ4Ò¨F:¡ÙHR³Çj“R…³'³ Vö.çY!|!òRAˆâtEè •¢ë.³>+§Ð!U8G\KÛåB §k½L†çrìe·–ê¢#•ŠTÍ„Ë3›eq…©Úu-„¹™Û›wxj“½ÕÜ~hð?[ÿ½yûç?= »øJMa‹}{"4ÊÄì'¡¸bµñDÜ”H¾c,‚4¢œóãÃ.üÄ›˜G¹ºZ¦úËÕr»É_þõÍ·¿|úî§Ç§Ÿ>~xûËoÿ`ÌܾùþçÛ_¿ýÞšÛããëÏ?xwûÏ¿ßþüãíõã»ÿvû;öOþ‚ŽÄ%äû$–ßîÔŒ‹ÇZh±Ï4Õ–9Ë·L P–ºï®X~šµ <_ÕŸ¡¯tIFæIï%AÌ%:ö|øî Ø{Ët÷® ‡ öüû±÷×X¾.éqñ˜ÿËkU©¿ZÑëM’eÆè—âÙ±^ü9DU¬°u&U<Óß…Ê‚éZëëÀ’k ø \ äÖKÀŒÃ0îQ4Çﺺ¯÷ÖãÕ"ÂÚE5‡³±æÕš%CiEÅž@€œo…‚]<Ë(FÉ¿‚m6¾€}­Kþ¡ê œÕ°ÞÇj……Êòôµ^»`:JÓÑœC€ÃãÌ"xDvBÏ%—Rýffb8 ?œm·ƒ\`*½cð^0¬©¼¯gMBÄ|m>‘uUy0Üóƒ½Öó˜C+Ice‚ÉUã*ž…Éd @ˆ<-sòñégð}›Cè"±÷PLîͳ#ˆ¼g‘X@iÁŒ¹ˆ²HÌR†Òr·«‰¶‹ZðÙ Çz¥L·å\/ö¸ÖW2·ï$•¾~ìú¤iù¶ð€ÂRWh¾\u­½Á°9<¸È·™{¥ÎÐR9Sñ /GHKºÌÉ1u1û ÊÆÉWðÕøTf&p®³UeP¯˜RûK½ÛH„:D\®¿ÔÌí‰-ÚP³¡0ŸøÍÈäÑó_„B™LüðUŠÑa äþÀ~°.á6ØQjMàQû=B+г@ÿc½ÚZä<Žè»@ÿá{1X!3êku·ó¤E"~0½™Í¬°vv²ÆøßçT_«¿é‰6Á–‘ö;ÛתӧN™ºCÈ/"·€äµàòäfpÀŽÀC×þ¶!Mz ï# =à•z€o¢ô˜‚zà"§Ó„EèÐåœòºTHˆŒãËš¨%#øp,ƒ4ùFZwR!žŠ]óÄ.Ú‰›ÈžÑN&è0Öd‚5—Û‚/»ž«r¦Ÿz|7&^PMhBÍfÕûóÆË«´X eÒÃ~•… Ñ(ò‰ç ›ç r7Å·s\'\2Äß™@íñ(ÉÐÑ5¬^m‰ñw)S „â™À¶¾„e|lR>OùXå}@9e›¿»È©¸ºº‹”º6R>Š>{ °B‹ÕvÆ+ÁLy;mF‘ ʬ„ ‰£pTÁ.¡i¦ÇSÒa‰‰£cŸtÜAÑÐ`8ΪB’éŒo¼"’t„WÔJo»\£³ønt¾¸ÿžáA¢„¿êH±WøŒÌÖf¯ðM:i¯Ù@¾Û+|kËѼSÄYÅ'Ï`‰¢$ÝUƒÆ«À4Ra…È»À°¦Hñã.¦c hM]MñÉÆIMÊ 5àKCNX.ƒRN§,è!§.…²ßªrÚ!§r* œI^o­æ™wöf’S6ê*ŽÌWòn¼ ÄSErRO¾èC’ Dª°È %§ÒÚ!¨øöÉX¹1Â%ª'«liÇŸ;‚ 1mÙ«§|¼¸Î‹KH¬ýZSS¡6µ}ºÃShÍÅ®Ñ(ÿgåUÛ0E W4!7A°ÎY2 ÁÕ¸L%msãePÁ*ÓÇ]ÅpûÈEª¨SºŠµ=7ˆæ‹C }¶¨cà Ûú vó¯þsó…Sñý?oÏŸï¶_¾ÞÞÝ~|Þ(¾Áo`µ URL_Ò ÌÈ3Ëß7¿¼~Å£ø?.˜ d6Ní‡þ«r3ÖÀ’n·›sÎV¸É±Ñeg™ããlòÑU*ÍdÅý[T¶\‘O©ìr\Y­^ýÇçß·¿·KþôûíóéËæÞð1ñ„ùÍn¸¨B3‘+ÁÕ›æ Á+ä:;êü ³qöó© 4"À;|:·yäš1"º:“¶CÔ †N8øÍ‰C¤!-\øöfÕ—ŒçB=7ÿãát èÍIdﻟ߾ûúüþþô|ÿôxûõíÆÔööbüý»Zm§§ó¯O¿=Þmÿþrûëçíüt÷ùÍöWö7þ«$¥õ@8º>8P…Ø7…"EvHù¦<†ˆsB¸Ñ”ÆØÚš¶ßä öM®h!ñûÍ‘,ŽSDuaIÜ1GOlyȉU8îÁ ·àêy½z’Í@Ì(à /ÀIaÆ ”€ýhB0NyÜ5˜¸˜{ <‚j|UŠGrrPKàÚ0­·úEû2^4o›¸ØÃñyWžò ÏkpF¸wð)æ>åÏç÷ƺ‰G{,‹/Œ¬~¢Ç ƒ¨ˆeâ[%1›|“GVîøÀÇ>0²=¥"ˆØ…ôhqâÖFDP ×—Æ0@RÑè¡Ùc²9˜¨}ÑJH Yf‹3È/'Cxá¹£2P§‚ÉÙ90©¸Ë⠮Ƚdß,+/™ˆ¤ò˜ ®äËÄ—¸œ§Ýò~JÀYH…LÏa‹à2uÐ#ê,±:÷a±^iU,Ž'ŸŸl¢ò6ãF6³Pù°X­n’µ]å(ÃÍ%‚v¤¼¾Þ Êó.VíâúboåÎ$”áéØŘ+B¶_¯Þ¦O!ëØˆOŸ½€DÈö«í6!ëȈO[oõÍ+íB†7êø/YÖ12‚—²¨•KL„l¿^½ ÌY´3É4¢Óç. °ÝZ-^ ÎJ,âÕœ¶Ü ñšVÚÅ‹¹†òÈxuLÄ&Â(²kLÄk¿^½M„L§§€ul„§Ï^@"bûÕÚ&õ<#dñië­ ²y¥²…ÒY4±*¢LCÿäó„ézPè0ñpqNçoxEh :E…cœªD„%³t Y¨ÞÑMPä|xÔ¹¶b†0ã¨`é˜]È CQE§QË>&ç³_€ÜÁŒh›‘¤Ð¿XnÒ(/f¬v8e>Ê&Ç ÉW@†gYå ¿`Àñ|®‹–‡Öièxx8P,ÉW‡µw.`¤RPëÄ j±ˆ~ô㌅P·D¿áH¾œÉy¶‹]ëBÙô&¡ÌI>ð·c{Ï×G¿ë;p*áLdRÇ>–¤êì˜ÈYæ÷ÙWf*¨ÝîL˜vÀF§~äkž<,¬ÕÛ{‘h‡ÒnMáh'„ÆA´Ÿ‰³ÀÚ܇Åz³¨¨¼'j6,›”É•´ÉÕ@¹+»XBpÍ“A-­®€2Ö57P;Ì:<µž>¶e@t!LÙÁÍ4{¾–žvÓžôô\„c_¸ÂÑ[îâ°³‹Ðžó zÅ}+#޵ Eí ~Yîè|*¢à h§=Ø£‚ÉM#ÙT"Äm^ù4<>+š8À4ìïm-dh<Ù58åÓóö ““/Ô„¿U^J¨ ·h>Ä¡&rX†œ8ÎW^HÈ @Ò°ÙCN¸/Qy¥&'rÒ@)'+ÙæÕmyH™|„D~¢ ªÑÁ ^°)62@VP¶¦1k£¤,0BdÄDxÊHA, BpĦýYeg¬Ä—@§ì%¥¤´\·zr–˜x´=K¬Î}X¬·’O¥ Ј¦KEÆæ’Gj=äÞQb€7aÀ›d;ÀW– ñÁ©èÅ2È{åY C†•ŽÛX0IîUºW9PÔŽÜ—ÙÝëTMfÝnRÐ6vzN}A”~ØŠ=¬V܉P@’\¢yGBY Žæ(ÓJ±V²6OGËÚµå¿tö˜óãðwPÈXçP½ wþãbÆ@ÿÿÛE;ÿÐù]´àÉ‘ŸœßÀªóàwÝùáÛd»/œ0Å¿kÆ/‚FÙaü"SÇN¾8¥8Ù¾ I‡‡‰&h¿Ä¦ècn>÷¨¥t3⃲C§@]›u  vÈ4¾u´$d:rŽrÕ2 0”Ùdß{¨t„HWLjô€JvyåQ¯q¥J‘ïá–‚ ñÅØßvžáõ$Ð¥7ÚOü¼¤¥ˆµŠMÛƒ%¿qÄJ£qƒt~îù'å¹%Y:¾Nñ>g.!é÷ö«M‘ÚÔöéîõ+jÑ®Kjò­¶ñ Ì6s#ësn¡ PAÅYÅKaRK‡B*fÒ§Ûׯ¼÷GfÏfк°žïä½+ aŒÇ)ßÀ{غÃÉ D¬±¡±ÄŠÊÈ:]#–:¹\â|4ÅÎ#÷»—|÷óÛw_ŸßߟžïŸo¿þ±ýÀ˜ÚÞ~øíå¶bWn„áû@Þa]Ž!½Qé,r•&Mr¾íìvƽí!™a^?éXÒÒöLŒ3Íøðy©$U•ªþúôãñÝþLê¸~¾ÿðù§OoÇ>¾þðá¸~ûðîøö{þ¶“º¸hnÝõù.7tébuyââA§c¹®Ïϲ\•AS: ƒ‘®|yÚèüV7ãùÏ‘Ÿov‚5<ŠŸÒtÞHyÝ¥cv6ÿ9§¢‹œ|‘ð êE='ÓÈqU/èGz|ùb&ñ 86$³#ûöTKþbÐ?3 ܸ£Ÿ¿ÜÂÓáÁç”'É?Ϲ|÷÷OŸ^ïÞŽïÿýúö¯ŸÖïð¯OXm4DhRùz÷Hyaùõùûßþ†?âÿ° "ÿÔß:OéÇÒôùž}õÏùõ £¤"ÜØIä5Ÿº¥ÉIøÅ1•§ŠÚÐþËf³^×ýˇŸ?µ«þíçׯRïøÈUŒKM*Õ—×_º1]P_qE´»2?äÐ4^=<’"A»ïïm!‡#æ"ŒP_XúµÆxÍñ|ýÊMŸÿçM»·ž¯"Fß䩇•ÀÇÄÜ[#V\žÑ^{ËRB5£ê·s\¯X …ô¸nôþr:PÄ\È/þ‰du~p?%êKŠqOÄ"2õ }UóžEÁvãþUë(^?§D0­SC6ÿú}¡ÁÐwÐM ˆJ3ýæ‰!ûò"y´‚´¸Y™¬¡üáËU[á}Rmp, ‘¹è,¬EqsYdˆw‘Jkôoœ~ëòÛÎfÑžb ¸ãZE¹• ˆLóÖä®5,la[~ÛÙ¬{©p ,i¡“a¡´M-ž'æ½¶°.¿ílÎ3­g•LÚ ñž9iÜâµÆ†ÄbáÉ“Åz»n@8²1é²¾~ ¥W‹ËFÒ‹ ¶P8qµ¸øëF¦9Nt<ê@Ö>€Â‹'›õr¼07XéÆ¥Ëº…-”~<Ù¬{¡Mhöä€Âkc¯-®<Ù\|鸩åm(ÜðŒÑAáË“Íz?wèÖ·Ý¡t[·°…Ò—'›u¯~0éË…ÛÆ^[(|y²9|¹©±Ó­%R‡žyŸ™KP ò4ÆÄ¢{d¢œ-ß@€»ãZÊ ºËP)&.iè"tô&&ñˆÖH^è.è×¾H¨)¡ÄreMz9®/‡ì9Cy&k04ÖB<š lYzB²¸fþ,i{paM¬¸ø«à 2Iò8ε”_§RÌç%Ž“œnL Gr"–¥h]X †±.µbÞ¡f©“íkÞ„«Q>E„_¸„ÕÓ«òMÖ–+FžA¢÷:§•¤ÆS'=Xõµƒ’KÑLB]ZÍ#9t2ËC18iͲq—ò¯›ô,ÉLÇeØ ”ÁuîL%}¦TÚúü¶³9W"•7Æpæø€=‹r3Á¸…Ê6ç[‡rctú¤8[(—;›‹åʰ°S5O> ô΋/™@Q+Ü…\Zò…§Ï‰ª~á+Iz°N~Y[¢…ˆÆ1´òÒ¾tŽÎ ?¡ó&AAÛ1 8ëmÌÀ%øëZÖiž ­B½cÂS.£0¼yÌ ÃÝ ×ÒJÍlðe‚ÆBñ–[gè1t‰FaHÒ™¸ZXJ©a‚ée.5€Îy/J ”¾µ„¬us­Á¨ƒ/‰Z‚kyQk$鵦CYk$,1gû¦VŸœ|Šä–wh&‘b ž[ñHCÃe^…¹ÚÀµAišS0O%b-7=òÒ>òÃ$·ÃbÓšûå°-ÑÆ}é9¼æ¨,8#øµùÜ%”¯¹'Ô¶å·Í]ÁDQ1ðkÓ¯t)8&‡ÌgRd”68;\É$‹ÔFøŠÕ?äÞ?ÃânJ¼c]Ø¡æj,L¡ãs{p-­Çõ“W;ë¯Uضe¥íËç6,ˆì®ð¶³¹ŠM`òzÞÓ¡rt¦=;”Qv\ÇRx§åèÝ)<‚òØÈ&Ò'à=ñ4@R¨u»< ÜEë¸< @åÓè7îOC’þ4NŽYP³:‘ZRÂ"&AB`ÉÒÅ$ˆc¹8‰IÀ,>º–P’®%.Ì,%}ºð &…dER1b¥Ó¡ˆ¤{LÉž¡w™h«Em÷µVOµÐkYÚ¬©º²”vˆ4—vÈFVT½´ƒÄDe öÆd]¬ÄBx¤‘|oýœ4<Âh’*/èƒÌ?/žßµ84cç´å0*'¾Ì‘®ûËœ*Æùœ6¾¦{>fϬ~IzÖž²RVôr)!/¸åÕ ùx²7 _êPÇû7|&†°ŸDWÇ_ËGüCùçý+‹RtFw‰.q¸K†(¤PB ý´zÀêÚÛÆ^F!A‰¬9ЧRªÝ­3öq\Çò«ko{už‰F(a»KÆNp“É-«ko{KUÒ®T™æ”¬ÕHèÉQ §ŒµÂy«½z«¾\8¯3ᨾ|Ç„óV{Ë6Òy G5“[&œ·Ú[»¾ßÊÌëL8Ï)0ãöL8oµWoe=ª0fCé¼Î„£úòÎ[íÕmxWÇmT8¯3á¨frË„óV{«Àü¡Ñ%¤ó:Žâ …‚±gÂy«½z«Ü00Içu&Õ—ï˜pÞj¯nÓN$×™pT3¹eÂy«½©R&Q!³/UmR0JÆi19ƒƒr%ˆÑàäA¬0x‹~‹ª-&Ák)ËÀ\R±¬"øÀæhz(„ÁuW¹šÌ•½ÆB¥6W,Å“J;¤0+yS[š>C‹}Qª;ÌD'&ðTdñ•Ë µ³¸l9œ½Ž( uDå35¢²ðf=¯ØqèOä¡°Û:•täÁ ^åúš¯Î­9rQí]›¬/«3 v¤M«Ìá|1ïH J…•X$[Žàƒ>ЇÉµxÈ cU¬×3üwˆ2°ŸH¡y7p-Þi쥕ÈÈ…h .HËHZwg)äÄ kB; /zÝd¢”-Ö¬á}À=%èbŒ›çŒÚÊÛÆÚn2D{'§ìșܴSÑ’Sv5(6EƒæaïLæ…ð­[&CÀšK[»2íàÈt,þzXXóùb©‡wRZ‰¸´Kö¸ÐãròÄÚÊìÅZäÖ¶æZtŸ™¬ ªÐ¤Þ%T &*ZÑáÉå­ Ê™Å»y‚ȳ'¯51âq…XhñAòB*¾Ã 1èX“*„é ÍN¡Àò|‡$L!£”€H'QJ˜pžJ E)A»HÑZQK Ç,×)QK‘¿ZÔ«³©VK‘µ¤3QK+ñfã˜FFD"7¥ Ž®|Ož/HvÎú4UøÔhe¦´sαW…id弿-“Ø8dÍ®qzÚ®i)ËI‹wí&w‰Æ›mù³CeáílkWK,Ú$¡Û*wÐe?Áaîax¼(¬å @å7À—Kè,â#ÔqË¡èfÈ{åUUµ0Ìàu¡Ã‹½*¸––õÚ‘»™å^×ÿÒ^m­qMô] ÿ0/û#’û^ÝÉ“C0˜ä!ü6»Âèb“ÿêžî®ž™µ#ãX Õ÷õTõ©S³éœ·¤³Ž^S[@äH;ìŒÝn­¸4„pVÜÂ;z”³¤Â¸cEL½GÒ³Sž®9Êxh¸´Ä,u çïhÝßsɤ4$>®¥-?—šøõž-ñÐEÆ‚,øC´_ÇfÇG,~ÙÌÍŽ€NHéø æ©>|'l7|ÄÚõ`øà‚+¨4|îS‘Ï~ €©ùä+ÐHéfÄÅ`…J3b£Uš-zŒZ¨4•b*8RaéÀ~89!Ò@òÕ»HWDŠtÄH ¬™¡g¾'ãã*8¦Ž6ô|âëñ´¨åƒFƒQgÉ™ ,„ÔµmàûûýÝÕqúPƒ`˜ý¬Ö€ÐŽ"†:êíIÞõ•Sh-çw•íMÑ@û'É,7d™kîA\ÊÇVÉÑÀ rŽ¢²•†p­­qeµù§²Lq–)"bªÊ=“Á•Í—î‰BÀ½GZê¤E~!ôùØ™Kx*ïïê<‹<ŒðxIîK3/¢ã6Ñ ¤»Ã·mº{ö¦…©Ýá{ A…ùù"šh›bSò„ˆ!rG÷N` rÉ’C‹Å¡¿ÑÅÓØb“Ø×“æ­²Þ¤Kø“SŒ…U*àì)B‚.4,¡ ¥†' ÿ{qpïͳccÃʇ;åT øjØeø’ gH·~kîE à‹ÑÂeù%˜˜£ó-ûîþý¾>¢zÂëOÈ ”ûþ fS@)‘ ±Ä²4šì¯e˜7 .8J3¤Me~mlñõtÀl4pHxy¯ìÿ£1Ám˜&¶f£q’„Ý‘ÉÁÄ}ãc#—<"𻂠t‹!z_´ ΖûZD`T’³ëÉh a=š gÙÙ²óÏêð-ûîþý¾žoîÐÞT`•¾JȪ{êïbÅÿ÷©—-ÞïÏÏ ÷š«m‚ ¥|4Ð)UÊ"Žâv `lÓo·Ö,­‚“ÌtØä!X&oÕ1¼"S2S,° –Ù·+Î÷(Žaäœó¥*¹¯ ‹E7Á:ývkÍÞÿ0µ°Vx0Þ3qj9« ¤§Mˆ\­9߯¯Ð‰ì˜à¬¯º v"—+®6D6PrÖÝ%‘«5—DTSö$2#+(™@ƒ‚šžh‰\®Yö´ _)&I¤À$gmM°¹Z± ¹0–DVpà¬.º D.׉´ç¬ˆlàÀWì`í6(‰\¯9iÂ%‘u‘뜉6ÁNärźQ;U'²ƒ‚³¾è&(ˆ\¯Ù‰\èhNPò—:Z˜kè„A•+ê"@ÑÞ0¢"l€%xb؉%$râÓÌò¡È š¬Œù„"É€£ŠèP«Xä*’çÁ‘h«;øN‚¨rµRótôé¿“f Âô QÈ– ŒMÇ2s©  ¢ÂŒ8mêËC`¼ça™.FЀPF”!c$›ÊD}98®6< þÛæA%8"›t¨Ó óêHSUòæ»çÕ] ŒPŒåô*P“Ýñ|zÃÿ‹+ 3 å¬>…+Šù+qÐ9˜F³öTp¦Úq‹)æ"æfFæÅ‘ˆââ H b+ÚÚ’¬]G ùÖ‡­-ù¬§72òÄBY+ã Ñ¥±Ö¹´ æÉ·ëõF RyK˜çà”[åÂcEÊÉÖ@¹idóé8L·ëï2XÞE~ý 0°}ïñ“ó">¸ÖÁŒñh¹Eìñimñ‘H‹ÏŠeÄûàîÅÂ|z«l)„xâ$~X¬'ìQ5ÉãQD:ïÐË»qÃÂÊD[3Mb6Ž»·†ä‰Øòj3øn!˪¹<…ugI[Qge£k #,-]c€èºZÓ€ÊÖaYcK¬ DF‰èbÃýAÊ£ªÆH¤iL¥ÆH°ˆWF&2~ñ¾&¬H3¾¤'!*ŒX®HƒÌ€Yîå†,FLsÄÅT¼–HRÂ8=+÷p œÛÈÃÖLëHËâU–J•éÁ­Uí |È-¡6Á:ývkÍ ­A¡Ä-8%(a´/ŽN`%ͤd@t„CÕÈ8«ð& äÀAt®¼}UµkK „7Ìó†Ó𩝤”ˆ¶aEå¤å\}˜8û¼ÔↇÙÊÒ¢¢7ÏM,ÐóGyo·Ö\:L¼·ØRs"êQˆ;(‚l5.KÑŸ‡éxÕJÅ ¼†æ¤wfºèÄ#b$$ùôIš†§Á×C(¼B»p}¨cÅÊ‚4¸Íàôh0ÛGF¼%a±VëÁ?2È Öü£5ÃðŒP°£´Uôè;(^Ow,œ'@³zÐö 4·˜EÞpõq£d0Z/ü##œðŒ ŽŽþ‘A“š´óWœíÒ> UÚ;(¤}K¼Ø¼uK ÞøÑ>ææÅIíÍwôÂ2 £Ö ­h4 F¢$ç&$IHryäþZœ"Ív ¶¥Y»@Z¯RTH{}3/¹gØ&X är½¡÷R“šÞÏÏ‚èÁªÔ«é7–(LJp7X ¸Òy¢ >RWš£„.Ï1r6´†:b5.Qo³ <¾×¾”âqärs€»¿Ê±ùgwͤ½øõêóôËãþxsuÿ4ýþyÿt¸ž´y9](¼;Èy£"ÊpRÀ€õIç5Êï݇ó³<\妃+!Õãä6àw»»Ì%fïÎÏ~øóÕëǧ77‡§›‡ûýã?ÓOŒ©éÕ[êÅë·ZM‡‡»ŸîÓß×ûWÓÝÃñêåô#û™áÂo×À89Xdr¡D¿±G""9R+g „ްÀñë•×è#óŠ,÷eàj—Sàó¸Æ[0)‚.d´ÇJ™jp­þ Õ¡.ȦÿŽld[éA%Ùkpns¤Rp(²½òß!§ÍõžAk.?ɪŒ’ø}rª dÕÕP Ç&ˆ¼Ÿ}R¸iœ¹q¥X´‘§Aˆ)qÊzÂýI°odwŠ%‘qk nƒË³Ÿ7âðÇýýþîê8}¨±0„¬$RÇìãî)¬pŠ~X|ϾζÏöB9»9„à“¼{„ÑðÅaH¼Oÿ§½Ìyëº(üWTÐ ·!9­H›PÈ*m† ûßç›å>í¶#8•®ÎãpžÙ4¬/µ¶ÇQ‚‚L[ûˆÈªì /Ÿ<îLç_#^1âÙº#¤søÌÔlsß7|¶îÂSˆò,³gÒµ%f<Ä1“nÞ‚»*Júë¢Ôïµz‰…àêöZ¯þ£Öz®«ÛŸ]èÏ_¬,ÛËŽÝBÏ÷vr´>Î…>@ 4"âöT¦! P^Çžªy ü>ê¶è“ ÖQêhžn>ã„ú›òtY 埂x‰F­ýrtÛ|X.úlÙmˆq‚Á…|nmq°,fÃÆ‰ç—sñv{óuÖØò'z“â«WÜ;–¨9¡Žîÿ í«}DŒç WN Y›Ÿû%ˆ¦´ßés> Ú‹J¾O »½ŒÕš£5ë ´½æ«Êp?É«K=)#˜b¶ÑΞ8#¸m1µÆª2@ø«Q+V©Í:°ð_¨kû¹ð2fÖ-6#ЬA‹7é½úq½M­^°| øá=þ§Óâao~íûW®ªÝ}ùl ¸þ·Owwx÷Ñ.òil¿xw÷%??üôõ  èë›-¤tº€$ËÞ×>újÂG«@öÁ ¶®>nþ1&ÝüsªZáå]–ו(~ “UÔV¹fͲӄ,ZK¢öÌ„¦®‹k“½G—5êvñòîT­¦l¤@ CB Cë>®³ ï¹Í×þÄöƒ .«á¢tf„3{žÊ´õÕ¦s)3îb»*P‘ºRü»Ž‚O}KÔë™ArÄu}¸3ŒÖl­‘»ã,KiM_ayÑž×Y½¼xÁæÃ hïfã È³Š…3û„×2gØ6´í %ÕU4ꀒ-aÏÛÝ-j![ÚüTuýº#ôç%3d%^F/ƒÖiwÛs *ÍõBÕ‹ÛíÃ}Ôª&Êü7«‹Rê)Z1Òø©ÁºŽÄuÔ1ªÆEÓ!kÅŒê\ ”Ù%tR5É‚@Y6ÅÎ>JJc÷ˆ¦Ò·öŽ&i/Õ'B¬U]«œèB&âÕJ Wû†8.KȦfLÚv²*‹ ÖˆÜlÃoÛ»e„§0’¦Ú©j<÷òu¤Ô—j>öª)ì‹0Ñ-âe½[÷¸L¼XI_: *}Ö§¬`^]ñ<˜lC¦œÞkÍÝm¾¤}I¥Ù`–ÏC&Œ •Ð Fÿ U—zs Tžý·a³¶’\‘éa†"½d#ži\Çû²,áHìVþ³ñÉHC˜"¤¡—|§ûH*¢À#}ˆ·Eé„]‡¨ô•Zkt¡ž¹2÷ ‚&Ôf²yÈ’ ‰þõƒ½ïÌÑ¥˜L 2’R5ÍkÛ«)›¦!Òv(“sžkéŠ4 ÒÙÊŽ.ì4ÃJ3´LYͰ¯¹3z²6ƒŽm"+Èè¶§ì’ÌÓÃ׃Pû¸"7íé„åm–Ò6ŽÑâ1”¢’z5ßçIeŒ’ù‹¯l Š#’†\.{,/2g¢öfÿ@òI`ìj5!ËüLÎLhWïIˆç–l;dI·TËL·Y‰¦iUª\[Rv­¤`DÏLeò­ó|nD"ÕíI¥ÄF¾{Û®3‘ûBÅížZ(V¿tÏhè»DH¦æÎjÍÏËß…R’™ÄÁ(à@̢á%šv/[’ÊZâ粋m(šÐ*YÔ¦îv˜<K ÜldðQÓ¾²½¿°/4oubãÞÑ`ÆIB´G´W Œ£¿D ‹Ù¸,ò}Žƒ2èħ…ÞÏ endstream endobj 225 0 obj <>stream H‰lWM®œKªœ_éîÁã'u ’$Ç··ðV`©göþ›Ÿà«SÇX:ŽJ¾‚à0Ýÿâ½^|—þÒ—o²„èe¤ûÇÏ¿ÿ*Ô–4ªvO¼"8(êÖnœZ+~,Ûý¢µv z_rúœÜ•¦êýÝ„ôÐiˆeŸÿ´)/f ©¯™)lϹÉÚ«/XGu®Ý¤·Ñ½Ùë Ó: ™žüœ½HŒrÕÓ¶ö_Þ°œSb³}WAWN¶ùÅgݶ=/r€[Ë¿@"g EÜ^²0o~;Üó’ˆ=Q‰ƒtûŽp>¡&‘‹„ŒvŠó+ÿ´Ë þN`B|Y2© <át·ñ¤ùœÛÕe¹ÖWœc H½!bzHL¥Qå~ŸŠºÏß*íz\»¾ÆT}k”³¸*uý„GnüQRáÀ>eûŸ¿ÿâÿî Õê÷žm?~5ÊT%¨˜­ú²qûÉñòbí(+ê÷Jü¯Œ§Ð¯zÛîÕŽÆ3ëî -}ih=¦ÛW[†+]o›öE‹\î[+Ö‚Èùy!9Ó^{l¶.òaúqéS‚¤‚nAò ‰,Î8ØÅ”}uw1Å GPrqm4â c«a Û¤×?q—xs•QxÒÕ!ÚF%ÛÔÐÖÝo~HQgåö4z<#ÈI¼±î™``:¢õ{,QÓÓT‰VÖ^“Õy`!@ºŸ7çû4_³ø;ýaJ¬ià(x{§LÌQ’Ü×Ê4ß¶­€7Hتò§Ï%=fÒv¹´·Ã•ꃱ]ã M¦fx‚Nòæ/ã9v¹˜Q3d1±¾½ì<ù›Ÿ#$À}G—©ýø„؇’¿¹hT\»Íz´:Ÿ®6äö¦h§}½‡º|¿iùæòïå›C$úoÊ·gA²>’a ë Å›;¦Kâ#üÌš}hî^àð£] ñŠ9”þpk»óÿÿþû÷_Tƒƒc†û†&©·ùÕ¨sõk ‰ìŠ„ÔøQÁÑ É–ýM2J<~¶¶-9úˆ‰ÒßM±ø=Å9¾ÍÏÑZI_åß :ͯE c¾[‹³žp…ìd“tØ[ÈÐúÇð©=ÚêFî6¸½NˆÄF .xL:ó7˧l½gc¿Ï¦$6ic¨3¡Ò!&ìî/R"‡½Ñø½;úLgxbî¦<-6B¹,–¼L¸ÔnæLP1lõ¥#KW §é‚@yfgè\‡ÃkÈ«Ú4sæÌ„õ¨,ƒNè ˆ¤ø*ÈŽÊç’s¾”'ØI¾ ¥Úû}–â‡ÂñxkŸr°þjj<ª#\)ßïsNo?&ÛP}êƒ O’¥ ÆŸ¿^«ëÀãaÜGèÛHŠMéö­;Z¶Z’ÁÃ#ÿMÙ†ÃPkdl\rQôA-ý"!Hì»bˆk1ïÖèªøš]Ì,¨L6 Mü¾•'Ž~ºó­Qƒ#ÖŠCÇñãóäaÒ¨Ö²óC›à!‚Ð )—§5dÃ]G[mTšõ’tân¤´SU}çwæÚ"ôÙ·‚ºåŠ. s´*åú™PŒñºÇ ¤ …ÏK¡çØŸ@ÖÝH+MÞ’`=K"ï˜ÏŸI0ŒØqë5|îöù~o ‡¼ ¤½é½->ÊWjƒ|?·ôdšk@7:é–Ãp‰¤R?‚—Y(zÁÁkÒ¥ÜäŽèú¸õÓa»KÈЈL¦µe”#4_;‘ÒaØ^îµ5\)Hg8WAO‘žnðÝa”Ã[á_ ñæoÙ†·ÝºžB#á/¡LW§8Ü;«ót¥³©½N;®3þ5÷¹Æ´„xÐ9ïýÖºŒæiu!Ð\Ý#<â^£ó1®²IåŽÏ¹u)whµ’tUø>ÓJšajç¢,vî\5rŸ•êÒ‚­µ‡Ãi š¥åqö® cTyÞö¨¡œÂã03жtr]±Füwi§˜€ÄZà\ª³:Õ>Sâ︇ßmn†kï[i¬^þ¼ÂJ*~B:Êõ>ïø0í…_³ÓÔõfþ¤¯bV»×)KÎ['>RŒ¨šÂ¡nº¬½Ëµ„ìø#z¯HË?_ë΀œ¥uv ’²Ù“òê¹ÞÕr¾-ÈïSc  ª°/Ûj@Å“œ¶p®J¢¦˜¸bzÓBy·VõÞQ =û‹rDî •ÜD²§`)‡æbˆ1-ê´~h¡d•ÚYL£âê<è§*3AU©sj¶ ºT{ -gœ’LLWÞUhMÄ‚¤*?n…Æû •ð.Û(¡]ÂÔ ¸„(,A”Hȹ÷Gc½MèWoñqf¢„--È|0ÑÛ6ÞrÇ[ÅŽP…’ˆh¯r{Æ%=c”øLÉ@€ûRÛº è”Z„†ïTÏŸŸËê¨k¹%Ç›3äNĸ =î2k×FcçAf0¥Ò–>xÀ»¶ˆ ™áYÎ|ÿlÓZóšdRý¥'“2fqAeøeÁȃK| †`x"2Ín%> ëöÂ?±;_ä>¸‚æ Ójh½I'.ÛCw˜‚òZ Ä7 ÌR…gMYÇoǰđg¶k­?‰œÝ,©= `z¯âiokÃøÆJ‘[³#,lÝwvïÑeÃë4ª^è×öj(TÛ·û.&‹QaŽÁRÛyФ“eEG¶q6Ð’å5’{ Jë©©€<¶š¹÷<±øÏˆ' r˜xÕ]fâr7Ûex"Gæÿ¡!žXñµªïrc9ýƒj½Ä­“‚¥îNÊ&øÕhLwŒ˜MÞdGèÖ\ jµ òÝ‚©CYRàë{èÌÁâ!yÄnÐWÕ|½f!/e®ì1z72cBÄúnõ'ÿc»Ü‘¥Ùmœ»Ê{8±#½)Åö¼‚?¾¡÷oÕ=sn6Å‘Z/øèþ?òƒ±Æë¥Ñ³%_A"ÿÖñ÷líÔùf”£!|L­þöš}…9ÞigªxÃ+¦¿upFOÄ*ÔŒm"ì^¯q;ˆ±ƒ —ìlqðBè†øCbYå­ï„5î&dõû´>^tê9åB¶?·VÑì uãû»~­Û§åMíó±.î½õ»çºŽ^c»ÅçüÓœ{’•8ïk¾¸ˆ¹çžWíèb-z¨Œ®:®åÎ5v@+zOòèÑ¥ Nµ"+þ¿föKàh{dïx¢{³ÃÓ ":K‚ÜÑs$îÍTág.ž=VÎí¦Úޱ%­8 À9«Êš»ˆøÐÜÚmŸmþüM©S‚»fÕ̶¥Ð"+º‚ð{…)G¨FBå1½>ŽÌ³¯ÅkÏ™‰1Qñ¦€MS­7U_ôy1õdi Y;¿§î¡¼´ Øé¶›Ý‹_;å´oŒñ5ràb:º€¦4ôÆîb|tQAæš›¸"‘]_ex6¼™îš9k‚\¡ZÃ*ŽèŸÏý®6ž ÎÊ;yÔ9ó[Ä Ù–€<œˆ¹{¦€œÉ‰O)k¿WÅׯ¼Sj*'ÇAíG „»DËõnððçž\Vu²ÆLGY6*5Ê”†øij9S>§F«_¬ñ4utBhXz¤½ôÝLãÐ#rY©ÖªlªXPîùw«µ§Kkc×|’÷)¸áw‘šO=v?glÄäÎ)¯õJèNβ.Ê2ãë‚%g‘Óߊñ-ÏÀòˆ?˜E°´æ¡©Õ“(7Z»J%¥÷4,ð¢÷,f|Ϙñõ(®?ùTÁåaehÏÆKB¨Ž¼ÿ‹P²–¯§îj°tq’0ìä÷U²µå^çÐOñìfc "Xbòæš„ÑNeT ,2«vøZÉ âS™y™fu5HclÂÏ.[Û|ixƵõ{Ç5ѽ¢ÏÅ•“ ñØ×¡fɨÉñƒ&ÝV7t’¡Ÿ. ÕJ#q«§ÞbÔ«åô«£´Â¶ôˆï´ðE)U¼]‹­Ì©»ó·x½Ž“ÍyJgîÜL©Ú_ Ee;~59qŽ®­$3¯6­:(.°ÔmyS# ;Þ3ß{qÃ{oKxªÒ ;©Á®i$.kÌTÜÃì‰Û¦»¸zhØN3D›—iqU¸ôÁ¬Xc%Ö°¢ÛÑ/ƒ Ö¦î¹)ôçL¹kô£á$•¸²hñš[ú®‰5“©§’®ÙýcËrõœ+ìx¹úb\mýD•9°Û¸®] í¿Pý‹Î†S‹ñ‹%hXk]íEw'{B¿œ]|ßÈâVrߥ±³muì´âd4 Lrí5ÀèÄ&^äþZÇ]9p’l<ÃÅÜ[¢'t*B…õöÝswM5 ªÚе®©h V„Ö˜:Á²ÄB ´“sÙaÙd£"EEÜÜ{àëÙSÿ{§‡dÍ"Êδ­ht %R—BË$8ãDÙ'¼ûf£Ž³Š¨¶¾HSaν¦—_·žsKm’*”™ÅܼæM óP’BóÎ5•}é‹;NjÛ <õ®UÃjsf»zÛµã\õ8]Ÿ›zk&î%I›Ô=»ì‰¹½2´÷Òç†e‹cii.Ld\KÉ­„CyhÔ]‚[ê¼Ñé9ÓZ6ß„©„yÎú¡cÞd´c¬<³rå^S9õWe;%¦…ɳEŠº“!¾7¬ýOŒN ]H.·æ¿úCúEb’åLեʧeuµ‹YÁ¡ˆÍ1èi°;r^铘E Z0È|bV[áu òÐdÓãôiCÍzýhæaM>Ž.‰U{8Bæ©£R#4±¹;—yqµ‹)+§šÊHÙ«Vcܳ˽ÜN䨵½6>À ìk}¾ÆÊè9ˆ¾fhÙ9äµäÕy{é{æ9ˆßžÓM 'CÏÚ£#Y“]Ožv…®"º¬é¸çh+•œô¬»`¾º[+Z$ºË y3~ïƒ 8#¿?êÝñìÌŠ™Å×’ücµ²?l{êµû9ãiA§Î1ËbêE‹Ðø®§EQ»Õüáa‹ñ°=¹¦@ƒ˜Qø.ÍÖ§{ÇÅVÕ‚=Ú(×m(LóøZa÷Qp. R‡ÔäÌî15QøØ©#g¶ˆ”Zõùðƒ\´?c\µ±cà] wÑSF:RFð½­‰4xQ\ÛÒ6 î6BBD,j¥ÄTæÛ´¨„w´fq¡Šq·ÚW®©;ÇíÎÊÝF^Dho…FçÖ Þ빤²™sz/_C«®"×ck[×ÖZµÜoJtOÅ/·ÄºÐÃ#Ô+ˆd±{Ô `Öª»ò:ßqÓag·<—'\.{ïs¼X„ÆÒ\sb¨¼€y·¼ZŸ¯ë [!-!ÔuëºãÁ.J3͢׋hý¸”ÁËŽEO`.BÅæ=ìèS¿ëÑå§ßz¼ºU:š²›EÈà‘‚V’Suu°2x¾ìŸê?TM¨æùó™a‘>ꇞ ÞøÃeqñ" s3ŒÐf5y­!Ý"4(:O/Ú…IÝÆëžÜX˨ïÇ‹¶‘ª†T)Âwp&o8ÑSIå¨Lö/èXíši”µCNÄYgÙû²¯—¨ŒÌå¹nñH•Jz˘},bõJY»¤þDöîl&áÅ•Ô/k§ïWRÌ{çÑyý%érŽhÜE\ŸÁ”zŒ©»Ž^)ØÿãþcujLûy³ã#]ëõ(-šÅ¡Eí)rÕ¢ÛÆBNBh­zÝ€è[}Ì£{ÕžQ[wÕ6´jM}ÏhdzŒóa • ©¹#µ»öh°§ÍZëã±Â‘ åe§_ØXm¦dvf*¢‰Å˜B³ËËN}Í·fµ­­ #Y9… Ùù¡?áµfY©d!—ö!Í8N‘ÁÍ­Neä\#¹¹·™‹¨ä´±S\T®TãžfÎm-}ºÍkdû0˜wÑÖèÝÖä›h*r6¥z+àL¹Û>ÇNÈöÍ >¢­lòæÒËvâ9^¬m5<ŽåzØUnîl½¬í­þBÝFÙújZ"¹M‚fsÉ ËRTÇÙGã!Rký"r-þÕ:M~ê«\³OjÆ ŠÝ÷ì"ÆmL k[‘¨º M ’û¾&¯1u,ªRhðïõžÖÈ› ¶GÕoº¨E¹«ZÈsžÑKâ™s3Ù$Š·ô®(Y„oÿ?ãÕ®+Knsþ‡/°†Þ”bï/ذãlvCÿï"«ØÝ3gÖØlÀi‰â«ª¸{Llîc§¤HÄA—E:IØ i¼MÃÑGD9:Eõ£V1Â"KÑêâÅM åJ ‘â¦E'M Vˆì&@§yñ¹J¹NÖT+ Wå9du†Ç²Ë›.‰—ÕÔ¸VZeœ5Ÿk›ûÌΆDh[ D{«Â…B²ÂuWìÇÕûÕm:ªº$ãäh£~=…isÀó²ã™©{]‡×C%Ãç8™úNç>#Bš¼î_¯éð —0oÒy}Žùª 3Ô=Rú™¯;qÔASnÕIó’óì«6­&Þm‹ûrÓVÂ'Ý63i+yJÀTÛ 6ež‡*{u¢YN»é¤– •.ÙÑ“±¼; ä'Ž·ÚÕù31vû«ÚÖW­&?¡#å sÀôQZª’Òû†ÕÄ¡…Ó¯èÝå‹©:c%¥8DƒiÇy²Œ?PÉ ìöÛîõu·ØÝžÃl¢"s_n-¯³ÈdƒÎ2 ˆ;i&|Õ$ –jKAÜá _ûÈ’Õ U¨•àˆ£.®½©)¬G!¡‘K>9È?n)Ío.?γ^éc¦Îö‡Gt¬IG÷^9M§¹tTH¡;S„¢Óѳ®i÷i \–àöeÒh‚Tèo+ŽÖlÛÉ÷šM[‡G;¡y•wK¹d  3Y6©JìR+Õ×ÝS‹d¡âÖÍžò¾‰ùF"Okä¡RØCX ‹ãG lï‘8:æà‡ *î¥/Î,ë1_t›âm$øàô”nD‹ûÉ€·ÞZ‚T*KhAµž ²%íìÐí´¬­ƒç¦±Q;k1ûh)>¼Á¯AØ¿>u°[ÍRCKˆ½ç¼8…%¼[,©²Ãˆ `bW)Ïb#‚†Ãt ÜÀ½#‹»£k])ðº3pã=H<Ïfy§ÕM \-ô›œxÙb„s´Á?i}jÌÉÉÜ¥$øÙî96AÌÉM+iMb ÓŸÝöæöVBTAè*›·†l]ë•wU½u®&r”k01û7äÌéõÓt¶xSÐd:[‡±#»ÅàûYgoMÂ!˜kÐÒxÖôЧ´:|;òÍV®]sm“uŽÎ=AЦ]BιZ‹¦ãó¢³=VBs€è’ð'Êi>mϽ†ît˜û e½9ol1ºáT›“Õ¹iº—³FÉC¯Ô4hÎüîlãºñ_åÀRJA›žì¶2¡0ÕHÓ…0aA›®b×b·bÞð¡X¨æz†ëÌ $6“Ê(r5‘ 7mðšIÞ¨à¼+Çô‹™(]=U«¾.¦BMEÂpÛTVD(Í ñ8…ëè,8vU…7RŒ¹a<Ï<ÚºfÌ (Ê€Ìr£X×Äu"5ŒÖÔz–{æ*5r#B…‘ûNSŸ¸ÁEZDu†Lõì–'[éºnºìãeMv£eØÖË|yÒÉXDL’B¦©ôÅ‚%êo®xªNÄÍ}\×—<÷ØD‘¹î(&¿• €õ8쨒ўÕirk6Ô¾Jaé–ÃS(˜y‚i;÷§×nä¶ëvg½‡¢œ­ž(ã\Áî²gƒ¼ÐijÊi0‡©–|ïò t²qÍô×õ ttûÑãlfIì§ý’ºÕ]ñ!+„î"6G†X÷ø¶†~¼¦NúíváÃÔM.ˆN÷ä ¼Krâ·)þM•ÜR`[òOT+öO7¹ ÏÚœ¦'ǯÈÇÄ*eSEg¯id%IùöðxŠ+™y×µ+tLìNήÓ”«7Ý¿Z«oCbAÑîs$¼¢cŸ^o%È“Ê(¸ÿ~´Îgm\ŹαKPé¢*œaŽ-0ÿ´öµËáyô’aG±Ú–kç Ù¼q1Ö_jâ•´ScG 0)V(õóJX ¦AŠ5:žZ$&H(y¨íÛ˜×{᯾SŒ{–Â+ì?(ä{/Ün”½:ÛÕýà–- P¦Ph”TñA\R»qþ ypGC¯d)Ë —°¸·P{þ’b2íLhq=¥³‹k%¹vÈtpã¦Ã•¦åJAo>Æ:YØŽ™îÌ«¼Ø‚|÷P‰FÍ£.Ú¢”ø…þŽ­ ,黎Ÿ~Ñ­D¬áb7ÝŽ{[”VÚ8¤p!îdí‰;ðtwvxXsâqŸvÑG7µóÊ iu… ÿ?hú?˜Ž3ôyØ9iÌ2L-Ô·û=•Õ­¥é«ivUµ—ßí;D|¸B’ ^I‹á·¶”<»ï ×»:‡9ð·IÁ0z(-/¸KRÉ™¾Š†ÈÊ ¸„žüµžÂö‹fá*´µíæð¢ª´^}Ð*ß›¨‘u,™Îºt¬ÀÈ-Çêú°•ÀÖo€“Àôß¾s†ÑvMð“Ö¹– åÒYe„òôÆö'øWÙ^˜(å«‚#àiÛ\nnXèf#m.O8{¯T—ž€5ú€ Áëà×zûñáÍŒè—|c¦ _ÿ<_õ?«†^Lÿþöáüà÷®Ç7zO]°wMzO*Ÿ-ÙýôÿÇîŸdÀw±ð¦)~×62™ 4YÁÚòSÖÕ´|þýª×Ñㆽ¿Ã•IŠ@¢$J¬2U€ î¯Ë ¯þ µÚýì<@ââp‡9iEQ$gÆÕ¯C³ÀÞv³ yÌ]eÌš +̧²ÆËçîçfrz–90[ò%P/‰@mþDMÜѨ¤¾Z5¡ZkªHê†h‘ÄÞ‚€ôs¡ê>¥ÒÀ@ Véø"A'{Ð’B^íJD*Y]Xš¹Ê§Ì]|Šrð¡!½)¡`¦²b‡¹r…‹­]¼lëòÛÎt0æ›ÏUU 3ìšqðDW*Ú;ŽÕD-_è}ìÐèÎJ ‘ÀvUÔ¹wŒŽ… %dòTO(¶PÙ4D€C º×ÐZ1× PÚ@(Ì>W8²ë¾ïqßD5ËÃí€Y·§öBÝU±©ì(7›ÎÁ×tÚ ƒ8ÜÅO¹Y¸“«„\…¹:ÈËÜÎeW^Z~x5u´% Ã~; Ò§ŽlN¶Õ¨‹þÔ@SüÑX}dÊÍ«ŸÊùAýw›3L°A–E;µ‡â°¯í‘ÛæPŠ’ ƒ4($¹ÄãjÑ®\U·¬Ñ…ÜðäÍßVƒ$K%”˜vä%¦3lUBÃVħƨΌ$JtäаÏé¸Î*m×rhµ,åï%…Ðd.–ð8s9++Z»«³+¾E2ðÖ‚€YÇJ|ŠB¶CQÇ3ørדBÎÈØÚÇXO¡j< ‘³gÔ(ØùsªdUm­¡-\§ÛKWÚH‹~/ÍçCH¾Gßµx-*Ó{lÔx~Æå«}qñÁãâ,Eµr°ÐÇ¥íeLÖïºÛ“¨–8¡ÕÝîbc#Pr¶¶–ì•PšW‰[(Ä2sDA#Ú\°âÁ˜%ëu–š'KBíÞ›“¿6÷úìÄ;$C4dk –™¾Ê5³£Ô õàŒz‰vøªIÑ,¨4¯~Gk”·).@1Íš–þÌU-ïb¨¿Š¢9l¨ [Çë>}LëŽ=}z‹)½›~-hה糾[¹U }p¨?½'"nªICJDZ޶Ø[#ÕŠúœô´„\PH‡éz„|îÕàT-Õ™N$þv3“Ê7¦Ç4e¼à‰±bÞ·p•v ß5]‰tÔR9dC±³¹mÐZ²M\Ÿ[…@ˆ†QT„CrR¨(‡–ÒHnuFtT•ŒÀÛ¦¦A9hZ¬dÀ0q>ãâ犺Ѷ•(C(ÃëajP3.K3^Ê:êµ dÊ=QÕÇhÖá{]Ì9Û åF)Ö"ƒ7-|ÏE£óÇUéµ4ƒdµ•dÖìãÕ¶šÙ4Dâö¦6=s:•c'çMucg Ð…´uGÚ¤×\2Ej.90ëë¨T‡ULˆ±ë ËÄ:¿"\Þ_‹ù|žzmÕÛwÂ$¡¼W3ã_³Ò1hŒÅÏWU×S*öjBƒŸEœ¯2fÐRÊé:«—ø Žß8#øÙÏX-kw¯5 #…´1 49بÔÁ(&nrÎgƒFßï*ƒkî]!n@xQ\WZÎg¦ôPjK*kßâçN§w ÐÆ‡'´ôÿf^Rµ¥eŠ?¨þ§øÔ¹^ꎀúU )UÚpv´¹Wtè%‰7‘È’!E\Ĺ¯ ùu¨àÈÞ—}jFÝ]oÛœ {í QB¤v4÷^¨* X8o3~uDÖ `%!º­33Hy/ÓµAP&„½Ô}!ó||m­"ÏcUe¶ÜŠ…úD«e|ìÒªÄô÷+Ä©¼:öÊò Ò±2¼ õõiuz@f¢°5ÁVɿƼÎ ú öS™5§ŽêÊoƒùËj ‰ÓõRò3>1¨Š?DB¸-˜íZ¨ié>% 2Yè¹Syl$y4Á^×,žwì†ÌYÏ÷I[Ý[ÝFãž ί))ì²X>$u(ÆõH;ƒ²ªKŒk¡•Þ¨·ÏÝ £å,ä 5±xõ!6§¡Ö(c>ÊÜPiq ¼Y¡¾»Ìk¨¹)‡êB]H# °mVÆ ï·Á£¢ÂdÜ ÙM°òÓ×&ÖŸ>âêÛ/xöÐÊ«„}úrGµ~…âÓcD¶k°h@ŒV™±Ÿe° D”#µúôy!Ó ãs®ü°—uØ F?ÍUÑJ"âµO¥Ð… ôG#º/[*K³‘¦xǕ΀˜×î8ÌEûšÑ¬A­výîJj#%¼vn°…CÔîmq-=k6ò8D*&Ÿ{>ÄËc~–÷ʹo²U‘†pëë ¿îìë’,Ú®Èÿ}éƒTó"ê'„€³Î…•w,£=ȧ;hŠ&¾U3æ¾âUr2¤j‹PÖx,LU èw°ñzHE¿jËK¸¢tˆ)ß¶Ç·ú,ÙòP§N ÇvBËëF’_>ݶfgýúDwê.ˆ³+;ßÙϱÎIF“Ñf]#S¿ÿàdl°®£Ô“umu\½ÝAç0»æJ÷;2apݧ|ZVÒçà$:I_`w­9Gº×«5 {”nfb F隸ëXv5ÓxB6îrïF œ™zØÝ•Ò!ìå’ ½r‘ÜK5böà†ƒò™,¦°»ú‡pñ4HäÈJîí{Ä(4„Žô€læÞ¶5rïÈù8Ý®Ø }ÐŽ9¼îËíÏ éé×TŒEÑœIm2ð e­#@¯‚»çĹm=Æ¿µül7è[dr?øÊK.ˆNNVËZV7®ÓÒ¥¤˜¥/ÅüŽ*·c*dÐT’"Ç»ãBý µIŠˆÁµZFª¹³ÐGHaEG„ÓW®Ó~œvI°¸ô]ä‘iE¥Lz{@ÁO7È2óºWfEc¦À0¶ÆÌnwèÞ\·…œ1ë×^ å±Wѽn‹²ÅˆdöÌI»/ÇJ}dž÷èTƒò-È®soi#8A–QÏ…e8pd,í¹öQÏPA¢j* öR?@²VFÓÉѪ8Õ˜¨«0[khŠmu$–ìP²w—Î}…ͼ6 ˆ­-Ç!Ûµ’òZ »aI“c²1ŒžBï+#tòꈆÚy? aö©K‘„³×Öv¹ym´Ǖ܃%(‘ÓÉ›É$¾&(œ‰Ð$̦Ÿ²‡9åñ2¿!U\YiÒ] ]ê›_í²5W9ð©Ê“;ìTñõ~9Ç®à‹fÈ´lÆÞgANIå{àËC ëóSÃÜïHê¢êìcO2WÍE+r^ÖP,=Çí+ª¨H ÜKqW_‚ “˜ôÀÁgÓ¸¾1HLÃS H*>/i<¡^QòÅ~° NåAÂb t¾d}“ÚAæ´¹Ú¤Uy&oŒT+0@…,Ž*ƒžy¥p&ù{ß+Ń‘jURmïVTÞÎåR Cذ嚡IId¤«Ø¦Î…På2ÄÏlç )éZ\¥THÌOP€ª­›5,B- ˆ,E©‹_ N£KJsè)êÚ-EÖòp¤b o›'H¯›§ÙFµÁŸC(ä0@7f•>ƒ#iÜùk©höÏmÁZÐè蛆£²ëN(ǘÀÆèu´1Ì`Ã×à!À”4„ •5»ðàŒW˜B²Z¥¼©¨-*‡¬úNÈjô„z1/k÷Ž« %j)ù˜‘Î&ÊUéÍHPíhÂqÞ¬sY—5T´ƒähYWd é£Ðl­&UþšäV!|¸íèšr-O³d=iBÄ1ãg{¤£Àé™k\ü¤lÏVhõ­Ö7?„ÓÑžËù9|ô%ÞÚ_›mqìBc¼ÅÙu'”ã’•÷Ïè!ä4g˜é4¥,ŽT®HÖòQ¡lLà-,ôd;CV èkAµ«»ŽµwBZ JÁRÈO>Ëà?-_yœãN†™cŠ?Qky¡št¨¡ ¿ÞðÚ,³Óá¡Põs® ŠÚ¸”’µò¼G¿\e[|K^·ÅBð«[Šª]äd—PŽ }m‰1=„×ÓYÚêAc')CÈCZs‹WóU3Þ•o{€Ò2M•‚(0¬9_-PXÿB¿>úzÌPˆ%.P¬¥Ü^[jöLÒ#ÚFeyPyÉ3u¶iD¿’òæ¢i«š¡öL1UÍÚ¨¬êïLF±_AìÔÅL‡‚™4 œÔÓÕ«Áܘ£JAß_… Âä¦hÔs¢8ûÕ¾‰ƒf¼ ûFå'(ºÏ×l¢*©ßÌ¥ª¬šäú1Ä0@úª’ÍIêˆåcŒ L}†XcœÂH¿ýµØœ Ü‹ùP²¤‰H3ÞN’îDKm’c[!"U[«(„œÆº°áaDš gýàð ³ Ã'?Bº0¤Õ/8/PLr:pn28»…Õ¬kIÒ(\K<#í‹Þ²Ó@›Tޱ2Áeœ'' º ©‰V-ÀìXΓ$œïHÏïê¡êÒþX¥÷´Æ•Ø‚ðBï›3”)²VQ,÷ Ž1%™‡ú(Ö÷Í:"e—ìÈEÔ`oN½ŠK’·Ó*pa'Çt$VqÐwgŽÅÛ ÂÕ„Uì²NaÞ{][!ê¾UzÒÙ3kÊ+ÔêÉg›ëÒ}½Câõy¸è;E«\¢wjqœ JÍ©§*½áµÙ†$*;„p”UiÝuA“ —¥¹¬~Ì} >3C:5Ìh/*I7éCH?‰!Y‹:°,Žˆøc˜}‚ÔHÖ†`cƒ:ºÃø9|< [β¯k–Á±B¶y VƤ MÒk.ãDÔ¡:^Ö‡QÇvNqš´>-ÝÊ®’ –ÎDÝÑ3å÷úÄv0Cåš\hñjE{Ãímó ¢ò›ßµÅ/9 ”O•ë”ËlÖ9K¼&p‰×ZEºF¯Ê#!Ä, ŒlK/¬JzJ¢Ç¾k³]jà;Dó!¿,¸­B…]ú\ ˜ŠNl¥5hYÑ¡õ{H &ê… =¥ß&¹®þ=ñ LÃA±¬3¡~1:tŽb4æ-PHÕÖ3)±iž‰ÂkœyH9;T{^Øg1‚Rç8Yë„nžÊãí}³õts,çàÅט »ï„r`rqî0gºovauŒ©.4G³®L(Þë}ƒ ¬EZ|'ÔÇ3] Q °"·k­)´ÈJJÞ'ŽA ¾ ƾ%X%Iþ€ïásÐ}«ˆ~Bƒ4ÀŠé굑½“&CáÊ 1ŠŠiô´å©ÖàdŠàÉ•Ûf j\žy¥ä>ùl; þq‡;®__^äãÎÝãú÷kú»;^à\N=ØÖPìãôK$­‹Tƒj*Ó/èá¡|æ—ëG—þøíá?žÈ+ì—㇞Ô-?ºãõå}ŸõL*—XZc.¥ªVUø;ü¾ø†z‰¿tUùN#Ã'Q°}á¡ÇÏh_ÒzütÐÓ ½£6ÄG‹e‚o-Ÿ_ìœòWNïòƒ˜±&FoeÏãQ_‚ÇÌÈd>T®}YÒ·¼ÄчtA:-Ÿ²t #fßwÑRQ‹œ.¾óÝÝãn×=CKL¨êiÀêYI‚ÏÔõï«_Ëaþ¢§çÕãË‹/=‡—_¿}õêÓ›÷ï ðøÍß¾ïE…ÿ£b¤ÿ”@ÈèøÇ@àÕð‹Ïž?ûú¸ùù/ŸŽp÷¸zßyù壟¾½ùøöç÷¯>|:vìúÛ«ïŸ?=}ÅKZñW|uÜyôÜ»—¸ÿùîñrþŠ~XŒ¯¡³ÐO'§AìÓýt|+À{!—yöö§7Ç‹½xõ×t3|HøÁo./¾|úæïooÞ¼øæñqýÝåÅø@Žpø”û6ú—û8dÉ•uÄX Ï‚L@GùÓ°°ÇÒŸ¿aIJ”Þ%‘ü‹~ꧯ>¾zx`‡@ïtyqýüâÛ¶mÛ¶mÛ¶mÛ¶mÛ¶mÛ¶mÛ¶mÛ¶mÛ¶mÛ¶mÛ¶mÛ¶mÛ¶mÛ¶mÛ¶mÛ¶mÛ¶mÛ¶mÛ¶mÛ¶mÛ¶mÛ¶mÛ¶mÛ¶mÛ¶mÛ¶mÛ¶mÛ¶mÛ¶mÛÿ­ýscš endstream endobj 226 0 obj <>stream H‰ìÁ€ÿ«ë jw—ò endstream endobj 227 0 obj <>stream H‰ìÁ€ÿ«ë jw—ò endstream endobj 198 0 obj <>stream H‰ì×ÏKÓqÇñ¿!B/žŠ"èÁBØ¡ƒ^„.;åA¢K„\2Q„4 Æ:hf$Á"TÌBW¸ƒ‚Q:L²Åü±åÔ^a— £ÂíýÝ÷û|ƾ·×áÓÏçøàc±Åê¦þso‚ÃKÉ”õ¸DøþK*ýZK¨Nj”•z¥jYÏ(y ‰u[T÷+_ó@lzÙz\…÷ A¥R¯t´Ô.Ìz@IÚÜÊ\½ùLwªŠºp_dv?{`½nÃ{¢^©Zj—˜:¦šY/(\¥P¼QPj— ¦3¦š©i*›õ"§‹M/ûštƒò·EëÖsàf¼Qê˜j¦“¦²©oÖsj)™ ‡ukªnê‹-ZÏûñDѨi*›Î›*§ÖYÏpíôÞõÐd™¯«¼¶;48³³›³^Oà=ˆbRÙÔ7UN­SñÔ=ëEÆò‡GC#s•õ=º–_¹6¾öñ‹õ"xïAŸ*§Öéà©{ªŸh½ÀÆT|¥îòÝ‹[#ñù5ë9ðÞƒ°¢â©{:~j Jh= ¨VßniÕ]¨ª¡÷áãWùÃ#ëEð"Þƒ0¤î©~j ¡z¨*Z/(¸¯™ì­Þçkî”ùºôGŸÖ‹à]¼aî$‰ê¡ªH€»=šx]ÕЫxKûhrõ“õxïA8„z¨*ê4ªê¤õ€3Ÿ_klè¶S¸7_±žüÀ{Ž¢6ª:“ª¥ši=à |ØHo<Õ §²¾ghd.÷-o½ø‰÷ œF…T'UKL•Sý´^ðŸvvs¡Á™òÚn]l::cÛé=ëEÀ/x™TK5S‡SýTEÕRëEÿæÉdâÂ¥»ºÏ‚ÃKÉ”õà7xÂÉTNõSGT-UQ­çü•7ï6ümÑ“;ÌÄó·Ös€Sñ„ó©¢j©ªºªºZÏ8ÕæV¦£3¦{KE]¸/2»Ÿ=°^ü ïA”µTEUWu\ÕX•Öz À¾ 0Ù½* endstream endobj 199 0 obj <>stream H‰ì×ÏKÓqÇñ¿!D„.ž a"$ä¡„:(t‘.yð B¤ü9+˜† |/ÃIR¤°ypA#l´P1&ÓÜtj¯.]ÍÜ|ïûý>‡·×áãóûùî’ÝÏ=[,¯¼pùAK§“H¦¬'|2¯«_ë!ÀÉÔUÕU'V¥UoU]ëEDæV !ÝR®Þ~þaå»õà_ñ„먱*­Î­ª«öZϾ‹oܼÖͤ²~x‰ZÏN‡÷ \J½UuuzU`uØzðŸ©_½3%U=¥¾ûævv³Ö‹€Sã=÷RuÕ^XVÕdëEÀr‡GcS˵A]¤›Û§ãk[Ö‹€ÿÄ{n§«Ã:Æj²Ê¬>[/^öfñKÍ­§º{èwáÝWë9À™ð„7¨ÆˬJ[Ï_ÛjnŸÖ}ãâ•¡±©åÜá‘õ"à¬xÂ3Ôd•Y}Ö‘V«UlëEÀ#vv³]C³¥¾’ªžŽÞ™ítÆz¼á1ê³*­V«Øê¶êm½¸Û„­¬Ö¹±u2ß°žäïAx’Z­bël«Þj¸õàJï?&êšFu£4„"s«Ös€üã=S·Uop•\=·ž\#‘Lµt:ºE”× Ž„—²û9ëE@Að„·©Þj¸J®s®ª«íÖ‹@QÛËŸ-”U÷ëòÐÖYßL[/ ˆ÷ ü@%WÏuÔÕv^·^ŠÑË™•K×ëÎp­ùŧØë9@Áñ„¨êj»¼:¯Ú[ÏED÷„wƹ'ÀoxÂoTxu^Ç^ÍWù­çcë›é¶îˆîeÕý#ó{™ëEÀùá=RçU{5_‡_ý×WÀz0ÝÏ„—*jƒº´t:‰dÊzpÞx·Ô|•_ç__} ôE°^ÎÏ«·Ÿ !ÝêšF—¢ß¬ç6xÂçÔ}ô_ /‚¾ Ös@ÁÅâ­“úúWÖO8Që9€%Þƒ€è[ /‚þôuÐ7Âz(ˆítæÞÀë’ªžÒ@_×Ьþ4ò[€ƒJ¶ endstream endobj 200 0 obj <>stream H‰ì×ÏKÓqÇñ¿!$„]‚ † ÂÈp·×åÃsïT p†–‡¯NœkЧõÀØÚz¼>8’ëoÎÉo¼~û…¾Z/“ÜÙíê›ô‚úé[yíitnÅzà܃À¯T5BB½P5ÔëE ]á‰Ù²õ]Ÿ£áˆõÀA¸?©{ÕPA¬ç€#ŠÎ­TÕö«éyE­¡'o’;»Ö‹gáþJ½P5Ô=uD5±^ac3ÑÔ6–ëoÎÉo¬k^mY/œˆ{øµCQGT5Ee±^ö÷xðíéówõ+·´º{&ºl=p.îA`_êˆj¢—¢²¨/ÖsÀ?MM/”TvªÚþÒC/?XÏœŽ{8 5EeÑ{QeÔë9à7‹Kß®ÜT©O¶Ü ½Nl'­.À=œÊ¢¾¨2z5*Žºc½¤¾ÇìúêÍ¡¥/ëÖ‹×àK•QkôpÔÕG ²^ÀñõläýÙ‹÷Õå’ÊΩéë9€ËpG£â¨;z>jJd=€cçÝÌçÒênµøÌ…{ÃÓÖsWâÒ¡ú¨AzDꑪd=€ca5¶UÛð\ý=Yp«©mlc3a½p+îA MjJ¤é)©M*”õ"<+±lïÏ+jUv/× Ì/ƬîÆ=d„z¤*é5©Pê”je½¯ G .µ«¶Å¡ðĬõÀ ¸ R›T(½)ÕJͲž€GÌD—ËkzUX_ øh`Êzà܃@Æ©Sª•^–Ê¥~YÏÀÅÖÖãõÁ‘\³þô¾Z/<…{Èâ@úºú&} ~¬–×ô~üôÕzàA܃@ö¨\ê—ž˜Z¦¢YÏÀ5³Å!5´°¬c4±žx÷ mª˜Z¦‡¦®©nÖsp´ùÅXUm¿º™WÔÚÞ3žØNZ/¼,÷àO鸰 endstream endobj 201 0 obj <>stream H‰ì×ËK”q†á¿!B„ \‚bT ›Y0ÁEH!¸1"‚œÌADÍ ´ì  … T¤H R¦„C8Hš¨¨(GGíiUFá¡ôýÆï¾³{6?îïÝܰEt5VÛÜ›”é?rò¶·°ul"b½ÇYXŒúª»ÓK•Ë"_`.²d½8üÊîuëÅé×zpø©kª›^œJ§Þ©zÖ‹pж@09«R•ôä5 †&­çnÁ=05N¥Ó»SõÔ>ë9ëŽgç6¨Œ)9UCÖswáL¨wªž^Ÿ ¨ZÏÀÀÔÌ|Áͪ᱌²ŠúwË+kÖ‹×ᬨzjŸ ¨7¨ª‰Ö‹8 ¿F0¿¸V¸[* :¨g¨&ªŒê£õ"öWGçPš§FíËÎmèŽ[Ï\{pÕPMÔcTUIë9ì‹PxړפÞ%gU¶<ÿd=÷ à *£ú¨'©V~ž²žÀ3Y*òRKÓK}Õ] ‹QëE~àE}T%ÕJSÝT=­ðObëõ?$eúõÍé-l ÎZ/ð÷ à@j¥Š©·©zÖ=z¯’Z/`/Þô|É8_§¢ºp¿§oÄz€ßqŽ¥nªžz¡*©zj=€]Îæ^{ªŠ?]Þøìcl}Ãz€?àœLõTCUR½ÓËOÔVëElãÛüÊò×GÓî$¤–\÷¿Ô_ëEþŠ{p>•T=UUÕV–°ëaû@rV¥>//^i …§­çØ÷ /TUµUöÄÙ ÕÖz[ô|=s©^JóÔ¼z;l=ÀŽpñE…UgõlÕÜž¾ë9lŽMDò‹ÛÕ¦¤Lmsot5f½ÀNqqGUmÕ\=^õW¶^p©å•µ»µÝ‰é¥JÒÕ[3s‹Ö‹ì÷ §Ô\•WïWöUw©ÈÖ‹îÒ¦äT©Dž¼¦ÁФõ{Á=Ä5õWÖ+V‘Õeë9WP}ÎyPààv统ñ½Z endstream endobj 202 0 obj <>stream H‰ì×ÏKÓqÇñ¿!D/ž a(¤/;$$„à%é ^<)å e¤iÁR"µƒ »ŒAaöKQ"õàG4JDEEYøkÓ©½ è`$…›ïùÝóqøž_—ïçõzŸœ¤ Ñ@0¯¬ëʵû¥•}ó¡Uë8ÇZÛØ®mò«q² Ú:½ûÑCëDÎ¥ýñ;ýÑúZp.jdõ²ÚY´šZ}mà(±ƒxïÀtva»Š¦ºÁ·´±N ¸'Q;«£õS«¯»ŸM©»­œÀ?¾àr÷¨_Š+¼³Áeë8†{p5µúZ¿¶º[ np‰…Âë·î¾P§ä–x}sÖq$÷ àTjmu·~ðòš!µ¹uÀ%óc;ZßÈÈoÎtµ6zÆvvcÖ‰$÷ à`ên5¸z\m®NߊìY'\ñ£ãþᙜ¢­Äªº‘ðâ¦u"ÉÂ=8žz\m®?]Í®~WË['¤®÷¿Þ|¢ÖÐ÷íTØ:€äâÒ„:~œ!¼¸YU7¢¦È)ê螉['t܃@úP³«ßÕòúëÕøê}ëD€”°³»÷p<ÓÕš‘ß\ߨŠìY'pA¸t£–W׫ñÕûž1mëDKƒ¾¹ÜayÍP(¼nÀ…âÒ“_½¯ß_@KÀ:ÀÀlpùÆí§ê—»Ç?¾`€îA ©ýµôWxµ ¬ã.ÈÒJ¤ºÁ§÷?»°½ûÙTì n€ îA Íih hè)Ð6ÐB°NH¢ýèa§wâ׳_Ûä_ÛØ¶NÀ÷ ÑÐ*ÐkUЦ µ`x¾—ŸóʺôÚ—Vö͇V­ã°Ç=à7m-½ Z £ u@Âè…wßyÎ àîA§h'h-èeÐrÐ~°Ž8—­È^m“_¯zVA[Ë£7ûÑCëDR÷ €?i-h3h9è}ÐŠØØÚµNøo±ƒxïÀôÕëô˜W7ø–V"Ö‰¤îA£å ý 'B[B‹B»Â:à_½žüêr÷è /®ðN~ún@Šâp6­m =Ú¯>|±Žƒ¤ú)À_˶F endstream endobj 203 0 obj <>stream H‰ì×ÏKÓqÇñ¿!D!<ÄÐ@xRÁ‹4¼^*é’S”‰PV†(d6J1DQ DøƒJB)G“²ÐÒ¤5µtéСtúþþx>c»½NožŸ½=î7[, FŽº~âLSWߤõŽÖpç©Î…¾­‡p4…ºBçB¡Ò°žø‹Õµ­šðPJ 65«N?ô×z§ã=àýÎ 5†JãJã2œ#±³ÛÑ=ž‘V×]¨|›[²^Àxø/j •†î†ªCí¡±^~‹ç—¶é2ç·Gg­çpÞƒöA½¡êÐõ8}þ®:ÄzøTüã·òª]ãôÜÆÖ/;»Ö‹¸ ïAû£êP{¨@tCT#±¹%ëEà#ëÛ¡–Ñ´ìú”@muhpyeÓzWâ=à T êÕˆšDe¢>±^Þ÷hàUfA³®¨¢óÍÛë9\Œ÷ €ƒS¨ItLÔ'‘þ—ÖsÀ³&¦æ ËÚuo³Šn ŒL[Ïàz¼$‹ÊD}¢“¢VQ±XÏOYø²véj¿nìñœ†¦¶gß·~Z/à¼$‘úD•¢VÑa¹x¹Oõb½\ïÏÓZyí1§@ñtj‹n‹êE £’±^n5028wSµ°¬}bjÞz¯á=à¨[T/º0'ÏÞPÏXÏ—y=󹨢SW4³ ¹wpÊzoâ=àP©aT2º3ªµõpå•ÍêÐ`J 6-»>Ô2º¾±m½€gñpØT2êU® Gc½*±³{ûþóôÜFÌòªžŸV¬ð8ÞƒŽ†ªFm£ƒ£ÎQílÿHX/gŽÎæ·êNæ—¶EÇâÖsøïAGI…£ÎÑÙQó¨|¬ç€#Äæ–J‚ÝÆŒ¼pG÷¸õ>Â{ÀÑSí¨yt|Ô?ïÞµžfV×¶jÂC©Yuúè‡þZ/à/¼˜  «o2#/¬+ Ffb‹ÖsøïA†Ô?ª ]!Ñ½Þ ë9¼ì—d¸½m endstream endobj 204 0 obj <>stream H‰ì×ßGÝqÇñ¿aDbÄnb4‘H¬‹Ùv±n"‘u±‹&²‰]D¿¦¤Ú&e*›UÓÚHkÍѯMÙÖ(j©TJ[?Oj/–±IëÇÉû|Ïy>.>ׯ«·çgoϸû'âSjÏ]ʹVÓ峞 x•>ìÑ-Òk=@ðR ©ˆt‹TGj$ë9p†¦f–3î¾ÐÅ sÕ4öz¶¼Ö‹5þƒüŠH]¤:ÒEJÏiU/Y/[]óVu‡ÅëÐeç¿ZZ^·^üøÕ‘IGI½¤jR;Y/ßhí‰LªÔ}KÎhµžûøð7*%õ’NÓÅ+*(ë9p*?Ï$¦Öé¦é?ø²ó‹õø ÿAþIÕ¤vÒRG ŽL[Ï€c›[XÉÊk×;[ú öÃÆæ¶õ"øÿA~Kí¤‚RGéL©©TVÖ‹àH<[ÞŠz÷ïó•™Û63÷ÓzŒÿ ?§ŽRMéR©¬ô=TeY/€Ã´¿ý\­«•˜Z782m=À#¨©TVºWª,µ–õ8Àèøüõ[ºT åMmCÖsàÿøpõ•*KW+9£AÝe=ö--¯çv„D„FVu¯®y¬À‘ðà,ª,µ–ŠKÝ¥úRƒY/Ô¼;»õÍáq.UZvËøä¢õ"8þƒœHÅ¥îÒùRƒÕ>ëSY/ŒºÜc±7ééu÷OXÏ€cã?À¹T_JLUf=@Ÿ\LËnÑý¹p¹¬¾yÀ»³k½N‚ÿ GSƒ©ÄÔc:e©wž«Ð¬p«kžûe¡ÑE!Q÷JÞüXÙ´^'Ç@P©ÊÔf*4uyàŒ4µ E$”«nÞ~::>o=N‹ÿ €€¡6S¡é¦©ÖÔlÖs”¾OSñ)µº0ÑÉÕ¯ß}³ž¾Á@€Q§©ÖtÙTn½Cß­çp¼©™åÌÜ6]•ð8WMc¯gËk½|†ÿ €À£ZS³©ÜtßTqj9ëEicsÛõø}XL±ŽIV^ûÜŠõ"ð1þƒ•ÊMý¦§–+©éQ×Y/à$­#‘I•º!WÓŸ ÎZÏõK€îe¶L endstream endobj 205 0 obj <>stream H‰ì×OKTa†ñÏ"BW†0"¤B- B@rÑB¤ZH:šbX¢V˜)-Tˆi*$-IÊ,´Ò ¡DQQ¦ü;:j7.¤DE}f8×oqÖ÷æ<\ïÚ°;·^:R¢¯õØÃc'ÏßסKʬi÷ Zϸœƒ÷ 'PÑ©ëtîNäÜSéYÏ¡Æ'gò‹½ºq)å•wº—­Àþâ=À!Ôuª;5žŽžzOÕg½@ -…ë›{Ò*u"òŠ<£ õ"8¼8ŠO¥§»ŸZ¡öSZ/`ïé˯®¬:]†cgÞ~µž‡÷ Rï©útýT€ÞÎ!ë9Ì û'Î\|¨k˜^Ýâé·ž÷ ÇRû©uUƒjBë9Ô¯™ÅËמÅ$—ƺʮTuÌÎ…¬€ÞƒœL¨T ª Ý>õ¡õ"û.¼²ÚÔÚwøh•(§ Í?2e½ÌðÕ šPÇP}¨JT+Z/°_zÞýH=}[ÿ»¾/z¾YÏc¼`Êp£»ß|·ž`ùG¦r Úô'¤U6µö…WV­€=Þƒ°A}¨JT+ê0ªUÖ‹ìÙ¹»¶+ÖU“\ZèöMç­@¤à=›¨UŒêFÕãÕ›*IëEv¯ÅÓŸ˜^­Ú9u¡yØ?a=" ïAø'u£êQR%©ž´ž`ÇÞþÌÈnÔ_ìʪóvYÏ€HÄ{¶ †TIêN?wWmi=À¶ÆçyôçÆ§VÜhê -…­@„â=[SIª'U•º–*ÌÑ@Ðz€ÿZX\¾Þðzý‡Í/öŽOÎX/€ˆÆ{¶CU©¶ÔÁTgª6՜֋lö¸ãKRfþÓŒìÆŸÖs ð€íSaª3u6ÕœžçŸ¬çøk`x,+÷Áú¿Ùî´žQƒ÷ ì”jSÍ©ã©þT…ZÏm:8_PòDÿc\J¹»¶kv.d½¢ ïAØ5§ÊSý©š_ìU‘Z/'´®oîMH«Ôo˜{éÑh h½¢O4¼ÿ0׸ò endstream endobj 28 0 obj <>stream H‰ìÕ¡qÁh$EÒUl@ÅP@<ƒ‰#È'1„anW|ýÍ›»Ýóùu>|ï÷ÕO§û,]€Ý`étè>K C÷XººÀÒèÐ}–.@‡î°t:t€¥ Сû,]€Ý`é4]®¿§ïŸû}õ#À¿Ò}–.@“íC“í°tšlšl€¥ ÐdûÐdû,]€&Û‡&Û`é4Ù>4Ù>K Éö¡ÉöXºM¶M¶¼»?éžuª endstream endobj 206 0 obj <>stream H‰ì×ÏKÓqÇñ¿!„^¼Å`"èAOÁJ xñ”x¤CI—6¥±ðŠ0ô %¥Ñ/DHQ5PƒQDaâ°P'þHk›½‚ˆºÆ¶÷÷ûÝó w{öùðü\\€#mî$›n=¿tõ^qE¤whöü{ÊzP(¦âke×{uúªêcñ¹„õp«—KºKõi=ÜJ-ª"Õ]ö¨Q­ç·²þ¥®yX'®¤2úèÅë9ànoWu£êÓz¸›ºTuªU¥ª^µžxÐáÑY{tòr CúG_­€ëñ€lù«>ˆX²k`d¾¤2ªh©k^ߨ³žÁ{²K¥ª^ÕÕªvUÁ¦ÒëE€»ÅçUõ1©òÚ¾©øšõðÞƒ ªVµ«.Xu¬jÖzàJ›;ÉÆÖQ£âŠHïÐl*±^^Ã{rDíª‚UÇêšUÓ&¶¬®q|rîž)*ëôùCmáñýä©õ"ð&ÞƒSêXÕ¬šVe«¾UåZ/œîÙøbiu—ú$Ø4øiå³õð2ÞƒjZ•­î[U®Z×zàP ‹Û5 ý:)þkǦ—­ç€÷ñ€¼QߪruëªxÕ½ÖsÙýzÔr÷µNÇ•òûbï¾ý°^÷ ä“*W­«âÕÝ«úU[/Œý}(nÞyÅ¡€|â=ù§âU÷êúU«„ÕÃÖ‹cÓË`ÎBMCÿÂâ¶õ(8¼ÀŠêW ¬KX=¬*¶žäÕÒên°iP¿ÿÒê®§c­ç@â=¶TÂêa]Åjc²õ çö“§máqŸ?TTÖîž9>9·^…‹÷ ˜S«ŠÕÆ*du²jÙz©t¦ïñû⊈ڣ±u4±u`½ ïApµ± Yw²jYͬr¶^dÓT|­¼¶O¿ðªúX|.a=ð ïApu²jY7³ÊYýl=È‚õ½-Oô«.©ŒŒÌ§ÒëE€ßx€Ó¨–ÕÌ*gÝϪhµ´õ"à?µG'/:|þÐíÈ}µ^øïAÀÖO½Î endstream endobj 29 0 obj <>stream H‰ìÕ± ÂÁh„"éÊ)eÐŒ!¼,@Ú™àãOVwž\éx¾n÷Ççþúà«´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€eþË[€޾KÏ endstream endobj 207 0 obj <>stream H‰ì×ÏKÓqÇñ¿!D!<Â$ÐÈ]vHPˆÀK âA¼RþÀPF™¬DòÇ!ƒ]†P™E%J¤2pD£D4RN§öŠN•Úæ{ßïžÃ˜'߇ï=ßûûÀÁVV·n´=ÏÈkÌô4ë‹þ´ž8š¾ÀÔ™ í§ÎÝ*­…­ÇàÙ›OZÔú´pU´ZZ‹Z]­º¶8”Ñ÷_‹Êüz·o'©Œ{Rß‹ÑÏêj­k5¶JÛzàæ¢u½ÕÓçowõŽÇ¶ãÖþ†{A]­ºVcki«·UÝÖ¿ÙÜÚiº÷2+¿EO´º!¸Y·žðoÜƒà ‘è†J[{[Õ­öV[Oüôdhúìå»z™Þë>„¾Y8,îApõ¶ª[Û[®·iM¯ñÒµ‡¼Fp(îAp¨ÀÓ*pípÕ¸šÜz¤ïK«Õ A½À¬ü–vÿÛÍ­ë‰GÆ=Î¥W‡g´j“«ÌÕçÖ!-Ķã=c¿^E]`n!j=à˜¸ÀéTãjr-sõ¹*]­n=Ü,82ãñv꽕ù'§ç­ÇüîAp•ùÅ«´ÒÕê*vëqàB¡ðbIe¿ÞXn±¯/0e= ¸ÀMTéju-vu»êÝz¸D$ºQÛ4”‘טéi®÷ ¯­Ç¬'$÷ ¸ŒZýæu»ê] ¯’·žßÝë~<‘SئZ(¯ Ï.[OH$îAp%u»ê]^%¯žWÕ[Oçy5.¸r_¯HŸún= ñ¸ÀÅ^¿ûBÏã³Ëå5ƒz99…mÝ'â»{Ö’‚{ÜM%¯žWÕkÛ«ðÕùÖ!¥­­Çê}ٞ挼ÆÚ¦¡HtÃz"@q@:XYÝRÛ«ðÕùª}5¿õDHE}©ÜbŸÂ ¤²?^´t܃>Tø¥UZûj~•¿õ8H!“ÓóEe~½ ·382c=à„p@ºQí«ùµüÕÿº¬Ç±¹…hE]@ï!» µ£g,¶·žpr¸ ©ù»zÇÕÿú Ð- ‹ )ÿ懹…Ç endstream endobj 30 0 obj <>stream H‰ìÕ!ÃDA 5‘uUZ1“®‚üpøÈ{]pÏ÷|ïÿ}úàVÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e é‰ö ¹KÏ endstream endobj 31 0 obj <>stream H‰ìÕ± ÂÁÜEº+RÊ Cx ig‚?YÝuw{¾ÞÇãüÞ»à/ØhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e Iûð[‚O[ endstream endobj 32 0 obj <>stream H‰ìÕ¡ÁH„ Éê-ã\ý¨é§ÏLíyþ‡ãùºÝŸûíGø vš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4iŸ+Þ é!KÏ endstream endobj 33 0 obj <>stream H‰ìÕ1A A$®>EfÂ}PÅt_2µç ü«ãùºÝŸûëG€¯Ò>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}€«·õ‘O[ endstream endobj 34 0 obj <>stream H‰ìÕ± ÂÁh„"éŠÔeÐŒMx‰ >þduçÙö>>çë{ýp+íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`Ù…ÿv 0”ëKÏ endstream endobj 35 0 obj <>stream H‰ìÖ±+¶aÀá¿Án·Y,fVQ¿U6eaÉ$‹Áúõ•A ó[Ê@ÊH¡$J‘â †C²=ßýzÎu ï|º{~ç¼ooð½ýÃó‘ñåøm=ð_i€Ì]€š´5i€Ì]€š´5i€Ì]€š´5i€Ì]€š´5i€Ì]€š´5i€Ì]€š´5i€Ì]€š´5i€Ì]€š´5i€Ì]€š´5i€Ì]€š´5i€Ì]€š´5i€Ì]€š´5i€Ì]€š´5i€Ì]èÂÝýÓàä²õðíó+Ä.ÚzŠ^Ñ>™»Ð……•½xÕ?K»×·­gïiŸ!û3¶h|¥±Q[ÏÒ+Ú sºcæÿÆÃŽN®®m=¿¼¶ž¾Ò>C+vflÎØŸñ‰Æ.½º~h=Q¯h€Ì]èÎàärzv+žwbfc÷à´õ8ð‰öN±-cgÆÇû3¶hëqzHûdîB×vþM­Ç#ÏÌmŸ]Ü´>ô¡ýwH÷± endstream endobj 36 0 obj <>stream H‰ìÖËK•Q†ñ¿!D'Ž á ˆ‘Eà@È&‚ƒ… „!ä-1„(Q “" ÎDìjK’Ì$r…‡2ÉPQ³ÔŽÖm¢ÈRÏú.Ïo 8[|{¯gŸ¯_$ñɼ¢Öm;O¥çÖ·E­Ç ¬[_ë#ë¯õ Oà]H€ K•çî¥dV'eT”VvÍÌ~²ž`÷á!ª¢Ú¨B&GªTK5Óz¢ c÷.Þ…„‰N–tèk§f×6_鯬ZO„Pc÷á*¡z¨*ê6ªê¤õDÁÇî\¼ Öûôí®ýMúæYùݽ#Öã ¼Ø}˜SUÂ=T­Ç vàâ]H¼øÊjKû@Úî:}ùƒG¯ÆF§­'B±û0¤î©~º*¡z¨*ZO"ì>ÀÅ»`en~ñxíͤŒŠäHUyÝmýk=…݇ µNÅS÷T¿c57H_â±ûï‚­áØdÁáË:‚ôÜú¶è õ8v‰§Ê©uºxêžêg=NH±ûï‚èûGòÎë r4÷ ¾³¡Àî#‘T6õMWN­»~ÿ•õ8¡Æî\¼ ±´o¸Ô—š]«ã(.‹ŽÏZO„€c÷‘ª™š¦Ë¦¾©rjõDaÇî\¼ ž25³päd§N$%³º¦áÁçÅ/Ö!°Ø}l5LSÍtÓT¶‰©yë‰ð»pñ.xЋáyE­:—{Ï^ë²ÁÄîcK©]*˜îؾCÕ4ëqð»pñ.xÖÚ¯©=…ø5…MÇîc‹¨Wª–n— ¦ŽYƒ_±ûï‚—}^ür¦ùQJfµÎèÈÉΉ©yë‰ì>6¥Ré^©ZµM=*˜õDø vàâ]ð¾±ñÙⲨŽi{Öé†K}KËqë‰ì>6‘º¤:©QºTꕪe=þˆÝ¸xüâÙÐûœÍ:¬HÞùλ/­Çï±ûØ,*’º¤ë¤Fõ?³Áî\¼ þÒLϭב¾<›´>ÆîcãT!µHI]R¬ÇÁº°ûï‚ï|\X:Q'9R•”QQZÙ57¿h=|‰ÝÇF¨<ê*¤•×ÝV—¬'Âz±ûï‚OÅF§ K:tvi»ëZÚâ+«ÖÁgØ}üÕFÍQytT!µÈz"üvàâ]ðµûcYù:AýíyòÆzø »ÿ Î¬5§»wÄzœ`û&ÀÞGN endstream endobj 37 0 obj <>stream H‰ì×ÍK”QÅñ¿!B!Z „`Q-Ú T`AIB""ZD9J2a¯XjQÍf*´E EdF/Ò •’¡M¤æèhäR½ÌÌïñy¾Ÿ…89pï9wüö-?nÝ}µlÍ1ýÌÓß,-¼ K]vn¾­«¿´2ªsÜ} ;õfÌ:–º¿¢mÑÂèΔT4is´<Ö‰ðè>ÀÅ»àã驃‘ž¢²ú塆£§ú&&3Ö‰àutH{¢UѶha´3ZëDø/tàâ]ð“djtÛÞË:ÐU›;cÖqàitBK¢=ÑUÙ²§C c9@÷.Þÿ‰÷½ …ÏéX7ì¼ðøù{ë8ð(ºßÓzhCtI´'Zë8Ⱥpñ.øRf&{æÒýkëpkêbo‡ÓÖ‰à9t¿¢ÅÐnèzhCN¶%´'Ö‰Ktàâ]ð±¿ì?_øRw¢õÞ×éYëDðºŸi%´Z Ý ­‡6Ä:rî\¼ ¾÷,9²i×Eòêͧc7_XÇWÐ}ü@û •ЭÐb<¶Žƒ|¡ûïB@\ïy¾ðM/\Ý®ÿ­ãÀÝÇ"m‚–A÷A+¡­°Žƒü¢ûïBp|žœ½S\Þ¨ß$>žž²NKt¢Ðè&h´“ëDÈ;ºpñ.ÍÛátM]L‡^RÑÔÒñ 3“µNt?àÔ}-€v@× úÐ -ƒu"ݸx‚)ñhhÝöV}(|®7ñÚ: Ðý SëÕ}]í€ÖÀ: Šî\¼ AÖX¹þ„.@Uí•djÔ: Šî“š®¾ëèK+£Zë80@÷.Þ…€ûüeúpôöòPCQY½~ÑGëD(º4 eWÓÕwÊdtàâ]€¤ÞŒíØwU7¡´2ÚÖÕŸ›·N„¼£ûÁ¡F«×j·N¼ªöŠún–è>ÀÅ»€E½‰×k·ž×}X·½5ñhÈ:ò‹î„º¬Fë¬ÕnuÜ:ìÑ}€‹w®ìÜüùËK*št+vèz÷É:ò…îûžú«ë”Õè–Žj·u"xݸxð³ñôÔÁHOQY}qycäì‰ÉŒu"äÝ÷1uVÍUÕbuY¶N¡ûï~eðÕ‡pu»®ÇªÍ×âO­ã Çè¾_©­ê¬Wý}–±ŽÏ¡ûð‚ï c6Jì endstream endobj 228 0 obj <>stream H‰ìÁ€ÿ«ë jw—ò endstream endobj 229 0 obj <>stream H‰ìÁ€ÿ«ë jw—ò endstream endobj 230 0 obj <>stream H‰ìÁ€ÿ«ë jw—ò endstream endobj 231 0 obj <>stream H‰ìÕ¡ ƒ`„ѺH‡ìVµ,P…a€z‚©äyBþ&÷ž8}îÛwþÙºý>ó÷ÜÑG€Ûé>é=-çëÜÑG€Ûé>I ‡îtzè>I ‡îtzè>I ‡îtzè>I ‡îtzè>I ‡îtzè>I ‡îtzè>I ‡îtzè>I ‡î_s0ÚY›ù endstream endobj 232 0 obj <>stream H‰ìÕ¡Áh„"éê-eÐ̃ŒyÉ0ÃíŠè¸;O€ÿr<_·û㳿>|î°t:t€¥ Сû,]€Ý`étè>K C÷XººÀÒèÐ}–.@‡î°t:t€¥ Сû,]€Ý`étè>K C÷XººÀÒèÐ}–.@‡î°t:t¸ò`…W3 endstream endobj 233 0 obj <>stream H‰ìÕ1ÂA 1‚ȸ¢Ef’”o€¡¸Ýâëïîº(z¾Çë|ößG€ŸÓ}–.@‡î°t:t€¥ Сû,]€Ý`étè>K C÷XººÀÒèÐ}–.@‡î°t:t€¥ Сû,]€Ý`étè>K C÷XººÀÒèÐ}–.@‡î°*]¸,F‹§ endstream endobj 234 0 obj <>stream H‰ìÕ1ÂA A$®h#3 å;Ìí_wç ¼ÏãùúîÝGø ººÀÒèÐ}–.@‡î°t:t€¥ Сû,]€Ý`étè>K C÷XººÀÒèÐ}–.@‡î°t:t€¥ Сû,]€Ý`étè>K C÷XººÀÒø—(s3 endstream endobj 235 0 obj <>stream H‰ìÕ¡ÂÁh„"é*–2h& OÆ‘™ß¯ßÝy\s¼?çë·ÿ>À-èìÐ}J`‡îPº;t€ÒØ¡û”.ÀÝ tvè>¥ °C÷(]€º@éìÐ}J`‡îPº;t€ÒØ¡û”.ÀÝ tvè>¥ °C÷(]€º@éìÐ}J¸³¯øã3 endstream endobj 236 0 obj <>stream H‰ìÕ± ÂÁX„!Ù*-c°L ô‘ˆôw…kwž\éxÏ×oÿ}€[ÐèÐ}–.@‡î°t:t€¥ Сû,]€Ý`étè>K C÷XººÀÒèÐ}–.@‡î°t:t€¥ Сû,]€Ý`étè>K C÷XººÀÒèÐ}–.@‡îßËW€KÔ‹§ endstream endobj 237 0 obj <>stream H‰ìÕ1ÂA A$®º"3…ñ ”¹2gûó¸×ñþ<ž¯ßÞ}¸œîPº;t€ÒØ¡û”.ÀÝ tvè>¥ °C÷(]€º@éìÐ}J`‡îPº;t€ÒØ¡û”.ÀÝ tvè>¥ °C÷(]€º@éìÐ}J`‡îPº;tø—¯›ÿ3 endstream endobj 38 0 obj <>stream H‰ì×ËK”aÇñ¿!B7­ At‘‹fÑB7B!HB"ˆ"„4Q”"/¢ ¡’¤„ u‘.Ì"-”P0Ì“lÂû½_õ…·Ñó¾ï|?ˆèîàs¾œq{€W¼|ýéÄ™Ûún=<*Ü3’jÐ’ä5OYƒ¸¡ýàQ¡êTÏšž_§r­ÇGÑ>ÀÅ]À®–WÖk›úR²ª´*—n<›™·žq@ûA¢*Õ¦TªV5k=¼‹ö.îöH8/ßzÎÎÀ ý`P‰êQUê5õ/¡:µž^Gûwû28<•WÔ¬Iϯ ÷ŒXƒƒ£ýPƒ*Qï¨*Õ¦õ8ðÚ¸¸ 8€Ž®áSgïjsBÅ­C£ÓÖãà hß×ÔêÓ ªÄGá÷ÖãÀOhàâ.à`W+ê{“3+“Ò˯VtÍÅ–¬'ÂþоO©5§îTŸT‰ÖÁghàâ.à0&£± Wžh…R³«Ûú76·¬'Â^Ѿï¨/U¦ÖôpênâËwë‰àK´pqpx‘‰ÜÂ&-RÖùÝ‘1ëq°'´ï/*K}éÉÔšŠ³>FûwñÒòøMZNÖ© ¤}üó7ëq° Ú÷ Õ¤¦ôXêK•mlnYO£}€‹»€8ú1¿r³æÕÉŒ;úÒúÕz"üí{ßï ’ÒË ñBûwq7:þµ ¤]{•–Só°ó­õ8ø7Ú÷8µ£‚ôFªIMYƒà }€‹»€#ÒË5h»r ›"Öãào´ïYêEÕèuT:²ACûwGgum£±­?5»Z;V|íéd4f=þ }R#*Eï¢jÔŽ ²žDûwGm.¶TZÖš%gVVÔ÷.,®ZO„_hßSÔ…êP#zõ¢j¬'B`Ñ>ÀÅ]Àñ·jÙNŸ»ßÑ5l=hßCT„ºÐs¨•b=Žö.îŽSç‹;Ÿ{óŠšß}ŒZ“Ðhß TZÐC¨ Õa=í\ܳå•õÚ¦¾”¬*-^iYxfvÞz¢Eû¶´ùÚ=ZPêÂz"$ Ú¸¸ 01]¼Þ¹óaø^KdumÃz¢„CûV´íÚym¾þþª@-XO„ÄBûp´~ 0Þ/N^ endstream endobj 39 0 obj <>stream H‰ìÖÍKTaÇñ¿!D„6® a$HÈEµPh#mráB„\Hù–R †Š f3X$I6D.œ¢!L2T e4Ç÷~‹°§utôÜ{çûY Ìîðð=œ»½í/Ï^}:qæ–~­A&z7þíüÕ*0TÒž°'³°û&Ô¹j×Ë«|õo=2»pq`®7Í+nW‡—¯÷Äâ³Öãd vÿ˜©m®7WíjÞzd.vàâ.À ––WoÞÎ5eå7Ô4þXøi=Qð±ûÇF=«jµ­ÂÕ¹j·žÝ¸¸ ðŽøä|yõ€‚Ì=ÛÚÝ?¶±¹e=Q±ûÇ@ «dõ¬§VÛ*Üz"€Ýü…»¯yó¥ðÊ=e©ßç¯?[XìþQS½;%«jëq€ßØ}€‹»ÚØÜêî;u®Mq–WÄ'ç­' vÿè¨Xu«çUÃ*Y=[OüÁî\ÜxÖb"YÓ8˜•ßjªkZZ^µž(PØý£ JÕªŠU·ªW [Oü‹Ý¸¸ ð¸X|¶´²O•æ·÷†£Ö㻟vêS•êUU¬ºµø?vàâ.À"á’µZTÖõöý”õ8AÀî§‘šT™zOUªV­ÇvÃî\ÜøÅêÚFgÏèÉÂÛ*¶¢6<5½`=‘¿±ûi¡U£^ReªOUj=°vàâ.À_fæUõE›SÐÜzd%¹n=‘_±û‡¤öT :Ô3ªI•i=°/ì>ÀÅ]€}ˆ}¿PþPéž¾x÷ñà¸õ8¾ÄS{z@u¨­ÇRÀî\Üø×Î7ù¥kø&O»0*M½ééÔž ´H»pqàk+Éõ–Η9Íʸª>23—°žÈ7ØýT©.5¦GSoªNíYO»pqSÓ µa•œ{¶µ³gtumÃz"`÷÷OE©+Õ¥SiêÍz"ààØ}€‹»€À~-*ëRÏ¡’Ž'/>Zãuìþ>©%¥·R]jÌzà°Ø}€‹»€€é GóŠÛUuie_,>k=Žw±û{R?ªH¯¤¢Ô•õ8@z°ûwÁ³˜HÖµ e‡š²òn´<Õ_뉼ˆÝß…šQ9êG©%B°ûw©ø%ÀHJ² endstream endobj 40 0 obj <>stream H‰ì×ÍK”aÆá¿!D7AP"ˆ ‹ ÚH¸Ð AÐÂE!¸ Z6J2Q„‰0(¤a¤‚æ"15 ¤¶H()%E4´”)?rlÔnd0üxgÎÌûü.Blçyïsshg'sLÍ,UÞzqêB]nQ°­k4¶µm=Qzyýö‹>Ž~Z’^´'ÚíŒ>ŽöG[d=à1ºˆÇ]€¿ †' ÊZ´äú™¶'ÐýÿiCö¶E›c=t»ß‹mm‡ž¿Ï)lÔªWÕtOÍ,YO”è~ wê{ó9¯ô‰6¿¤²ul|ÎzŽw_¹+}}m‚öÁz uï>`îÜÝŒ=½;Sp_ûãvïüÂoë‰RÍÙî+k%®·+}í€6Áz" ¥œí>à@ܸláÇÊÍ»}{ÿ5ø³ñ×z¢Ôq°ûÊW)+k=\¹+}ë‰vwŸ+©lUÎ_yürà“õ8)âZ÷•¬òÕ“•µ·0ãZ÷‰q€]=ýãç.?RJ¯·œøn=NÒ¹Ó}¥©LõXå«”­ÇŒ¹Ó}Àap€=«kÑ@ÓPv~ƒJQS÷j9²n=Q¹Ð}%¨õLeªd•¯õD€=º8<î°Ïì|äZmz‘SØØÜ1ÝŒYO”þî¾RSvJPoTšÊÔz" ]ø»û€£â. LW„ÔŽü«ÍƒáIëq¼çãî+/¥¦×)Aåh=^|Ü}À1p€žöŒåÕ‘òêΉ©Eëq¼äËî+#%¥w)5eg=Ž|Ù}À±q€Ä~­lÜ dåÕë~Ñ_­'ò†ÏºïטÏù¬û€â.‡ñõÛÏòêN•%·(ØÖ5j=ŽüÔ}%¢\ôe¤¤¬ÇÒšŸº89îpxƒáÉ‚²U¦¸"™¶çDüÑ}¥ ,ôå¢t¬Ç2€?ºð w8’èf¬¹c8§°QÅ©ªéžXOtL™Þ}}y}=AY(åb=2½ûoq€cXެ×úÕìü†@ÓÐêZÔz¢#ËÜîëkë›ëËk~¥ ,¼ú—ÿ 0Bí>stream H‰ì×ÏKUQÅñ¿!B„ ‚bT 'oTBÁAˆ41"„4IA4 ±–D R<„ŠtB„á#IPÂÄD1Ì|æ¯Vò+MïÙç^¿Ÿàij÷‚åænnÑ÷ì娡ã7ôÓz€¸ ÀŽ•´«A™ ]= ëqv'¤ÝWÎJ[“+yåo=>!í> Ü`â½#YEêQaqÛPbÊzœ ]÷•­ÖÌJ[™[„UèºwØ»åäj}kÿ‘¼[jSÙõ'3³‹Öý[ˆº¯<•ª¦UÂÊYi[O„Xˆºp€»ì}¶”Vt‡å³%ÝW†JRyjTe«„­'B/Ý8Ã]ö×Pbª°¸MµÊ‰5Ç{G¬Çù#ÿ»¯ô”¡†TžJÕz "üï>À%î„ÎÇï2 T®XIûû±ëq¶ás÷•˜rÓxÊPIZDŠÏݸÇ]òui¥º©/=·&-»êJuÏüÂ7ë‰~ãg÷•’²RbÊMé)C뉀¨ñ³û+Ü Pã“s/?RË2òk[î¿^[ß°žèߺ¯d”RÒTJL¹YOD“oÝØâ. Nœ8{G]Ë;Óòbàƒõ8?yÕ}e¢d4RRVÖãQæU÷æ¸ €këw¾9z²N»Pö`|rÎvOº¯”†&Q2ÊG)ÙÎDž'Ýx‚»¸ôe1yµöiZvÕ᜛×êžëW«IÌ»¯Ý•€rPÊÄ0 à@1ï>À+ÜÀ½ÑñÏç.uªzÇN×ßë~k2ƒm÷µµv×ÊAi˜ÌLÜ}@*î`E½Ë‰5«€§Î· N¸ݤûÚTûêiíÎÀ=î> w0´ò}ívÇ«ŒüZÕ°´¢ûã§gO»ï¾¶ÓŽzTûjkíîìi[¸û€TÜÀÜìüRye\MLÏ­©nê[N®:xÔe÷µ‘öÒvzQ›j_ØwŠ»xbxt:VÒ®>f5võ$‚~ÎY÷µ‹6Ò[ÚN;ý€¿ãîRq¯l}=·úõä ûš_[8û°Ü}@*îà›åäj}kznºY^Ÿ™] â•@»¯™5¹þ¾¶Ð.Ú(ˆWìÂ77N8 endstream endobj 42 0 obj <>stream H‰ì×ÏKÓqÇñ¿!D!<Â$pºì/—@< ‚—ò†2Ȭ`$Ró¢Â.c‡+*ìzȃ q‘âä¯éÔ^ È“µßï¾û~}>ˆñõ»Ï÷ý}uxóbggçÞ}úqãÎ}ž@/•j#™îFµžµMÃc“ ™£¬µómÚ}åTZeÖpå×ÿÂÚùJDïLôPÉ–V6ýma-©/0›_µp²»¯„Ê©±Ê¬äN`z`¢€Ê‰.×·„´ª­Sk‰-KfZ»ûJ¥l¨œJkÉLv ÷&zp…ݽLoh®Ú7XÕÐß3O¥÷KhÕî+‰ò(•²)¡r–8€­è}€‰^\$±¾ÓÞ=£­k™˜^Ìžœ=ªôÝ×Û•AI4G©”­èQʆÞ˜èÀu>,$š¾ÒæêS×Å )q÷-É üè}€‰^Ü({r:1½X×<¢ýmïžI¬ï:¡èÝ×»ôF=«·+ƒ’:€ƒè}€‰^Ü+•ÞïˆW5ôWû{Cs»{™üŸ-b÷5_oÑ»ôF½Wo/<2‡Ñû½¸ÝZb«µsJ‹\ߊD—ó|ªÐÝ×dÍ×#z—ÞXlX£÷&zð†Øüª/0®uö·…—V6ÿ{>ÿÝ×4ÍÔaÍ×[¬ À1ô>ÀD/ž‘9ÊŽM.Ô6 k©;‚Ñd:Çá|v_4GÇ4S“5ßêÈÊÞ˜èÀc~oÿéê‹i¯k‡F߯<–{÷õ”žÕÑ4Í´32€ò¡÷&zð¤ïk¿î?z­í¾ýàÙl|åß9v_çõ”¾Õͱ?,€ò¡÷&zð°‹_vÇo.ý²»r÷uF'süŠàvô>ÀD/Þvpx<ðü}Mã6½«/¶Ú;¿i÷u_ßêŽN꼞r.2Ñû½\ÉtG0ªe¿y÷é‹·_3GÙ‹Ý×µîè¾þÔt:,Ñû½\_¾ýô·…µò¾Àøð˺Ч®u¡ûúÖé€lGïLôpÝD¢Ë·îjñÏÿéZwœ Lè}xÑ_YÏPR endstream endobj 43 0 obj <>stream H‰ì×ËKTaÇñ¿¡B7®º€bŒ ]´‘ÒE‚¡…´‘ÜÑF'I&„01D!#*D!³(F5¡B$¡˜ÒDXØEFFMËK¿•¼]Ì™ssü~áxÞ÷}Þgóðãìî°êɳ¹#§Zõëw#<²’Ù¸Ò?zºU³¯_=ëßMð¹0‘ Àá±µ½Ó?4Y‰iê+/öíýêÞkÕ︎ܘÈàHN¤Î^¸«y/«éI$ç÷f_Ïz£g­jßmp¹0‘ @è-¼ÿÖÐ<¬I/,ïèyðrk{g÷÷Ù׽תÞh§öûÝ2·û¹„ØêÚf´k¼ ´ýØ™¶–h|9½¾·ô÷ìkU{´SûuJgýh€»È}€‰\ÂjðÑ«âÊN xuãÀ›¹¥?V÷›}íÔ~-é¬*xÕ,û¹„ÏÔôbU}ŸF»¤úÎèØÌ?÷üöuJgµAuTÍÍfxŠÜ˜È L–¾d.]}¨¡>QvóVïóï?÷Ûyàìë¬*¨Ž¶©¦*»Ó2O‘û¹„ƒùùvùúã?ß²œ}ÕQµl>0¹0‘ @ŒŽÍœÀD.³ùc«ûþ‹Âò oCóð‡i Eì̾nÔ½:®Ô‰ú±P€/È}€‰\‚%‘œ/«éÑØVÔõ&'R–ëØŸ}Ý®TDý¨+Ëux‰Ü˜È (Þ¾ûZÛ4¨-ŠÄú‡&mVsjöÕ‰úQ)õ¦mVà6r`"€ü·’Ù¸{z¼ä†þô í×tpöÝh€KÈ}€‰\òܽ‘©¢HLsZÛ48»ðÙ©²ŽÏ¾zS‡ª©nÕ³Se8‹Ü˜È o%'Ru½šÐÒó݉伳Å]š}õ©nUY«g‹°Ü€`ù%ÀâçX endstream endobj 9 0 obj <>stream %%BoundingBox: -306 -534 894 1386 %%HiResBoundingBox: -306 -533.8701 893.8496 1385.8896 %AI7_Thumbnail: 80 128 8 %%BeginData: 5734 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFD0EFF %AFAFA8AFA9FD4AFFA9AF847E5A8585AFA9FD44FF84A9847E535A5A855A5A %5A8584A9FFFFA87D52527DA87D7D527D7D7D527DFD32FFAF85542F5B365B %365B36362FA9A9FFFFA852527DFF7D7D5252A87D527DA8FD32FFA8852F30 %0730070E0730072F7EAFFFFF7D7DA8FFA87D52A8A8FF5252277DFD33FF84 %5A36300729072907303085A9FFFFFFA8FFFFFFA8A8FFFFFFA87DA87DFD32 %FFA9A95A610E0706290107305A7EAFFD43FFA985855B0D2929070E615AA9 %FFFFFFA87DFF7DFFA8A8FFA8FFA8A8FF7DFD33FFAF5A856030072907365A %7E84FFFFFF7D52FF52A87D52FF7DFF52A8A852FD33FFAF855A855A300736 %5A5A7EFD04FFA87DFF52FFA852FFA8FF7DA8FF7DFD34FFA8855A5A300E0D %5A7EA9A9FFFFFFA8FD05FF7DFD3CFFA9AF7E5A078585AFFD49FFA8A97E84 %84AFFD4BFFA9AF85FD4EFFA8FDFCFFFD86FFA8FD4DFF7D277D5252A8FD0F %FFCAC99FC9CAFD0FFFA8A984AFA9FD22FF527DFF7DF8A8FD0FFF9F749F74 %A0FD0FFF5A305A2FAFFD22FF7D7DA8F827A8FD0FFFA099446EA0FD0FFF5A %300130A9FD22FFA85252F87DFD10FFCF9E7598CFFD0FFFAF36307EFD24FF %A8277DFD12FFC998C9FD11FF855AFD75FF7DA87DA8FD10FFA8A87E7DA8FD %0FFF7DA87D7DA8FD22FFA8A87D7D7DFD10FFA87DA87DA8FD0FFFA87DA852 %FD24FF7DA87DA8A8FD0FFF7D7D7DA87DFD0FFFFD047DA8FD24FFA8FD13FF %A8FD13FFA8FD6DFFFD07A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8 %A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FF %A8A8A8FFA8A8A8FD10FFA8FD3EF8A8FD10FFA8FD3EF8A8FD10FFA8FD08F8 %27FD0452FD11F8264A26FD11F8280600FD09F8A8FD11FFFD08F87D52F852 %A827FD0FF84B99C1744BFD0FF829365B0728FD08F8A8FD10FFA8FD08F852 %F827FFA8FD10F84A9F4A754AFD0FF82F36013000FD08F8A8FD11FFFD08F8 %275227FF52FD10F82699997526FD0FF82836300D00FD08F87DFD10FFA8FD %09F827A852FD12F8204A26FD11F8060100FD09F8A8FD11FFFD3EF87DFD10 %FFA8FD08F8FD0527FD10F82752275227FD0FF827272752FD09F8A8FD10FF %A8FD08F82752527D52FD10F827FD0452FD0FF85252527D27FD08F8A8FD10 %FFA8FD08F82727522727FD10F82752272727FD0FF827522752FD09F8A8FD %11FFFD09F8272727FD11F827F827F827FD0FF827F827FD0AF8A8FD10FFA8 %FD3EF8A8FD11FF2752275227522752275227522752275227522752275227 %522752275227522752275227522752275227522752275227522752275227 %522752275227522752A8FD50FFA8FDFCFFFD0BFF5252527DA8FFFD04A8FD %0AFFA8A97EAFAFFFFD05A8FD07FFCFCFA0A0A0CFFD05A8FD1EFF7D52FFFF %F87DA8A87DA87DFD0AFF7F30362FFFA7A87D7D52FD09FF9F997499C8A87D %7D7D52A8FD1DFFA852FF27F87DFFFD05A8FD09FF84300130AFCA7DFD04A8 %FD08FFA0746F6EC9A8A87DA87DA8FD1EFF527D2727FFA8A87DA8A8FD0AFF %AF5A305AFFA8A87DA8A8FD09FFA79F6E9FCFFFFD05A8FD1EFFA82727A8FD %11FFA97EFD11FFA69FCAFDFCFFFD0FFFA8FFFFA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DFD12FF27FD3CF827FD %12FF27FD3DF8FD12FF27FD3CF827FD12FF52FD3DF8FD12FF27FD07F82727 %FD15F820FD1DF827FD12FF52FD05F8275252527D272EFD0452FD0AF80029 %2906F8FD042752FD09F8204A7520F8F85227522727FD04F827FD12FF27FD %05F8527DF827A87D52847D7DA827FD09F829305A30004BFD047D27FD08F8 %4A9F99992052527D52A827FD04F827FD12FF27FD05F82752F8A8FF27272E %282752FD0AF82936013000FD042752FD09F84B996E6E4AF8FD0527FD05F8 %FD12FF27FD06F87D27A8A827275927522E27FD09F828303007F82752FD04 %27FD08F8209F9975F82727522752FD05F827FD12FF27FD07F87D7D27FD11 %F80001FD11F8204AFD0DF8FD12FF27FD3CF827FD12FF52FD3DF8FD12FF27 %FD3CF827FD12FF52FD3CF827FD12FF27FD3CF827FD12FF27FD3DF852FD11 %FF27FD3DF827FD11FF52FD3DF852FD11FF52F8F827F827F827F827F827F8 %27F827F827F827F827F827F827F827F827F82727F8F827F827F827F827F8 %27F827F827F827F827F827F827F827F827F8F827FD11FF52F8F8F827F8F8 %F827F8F8F827F8F8F827F8F8F827F8F8F827F8F8F827F8272727F8F8F827 %F8F8F827F8F8F827F8F8F827F8F8F827F8F8F827F8F8F827F852FD11FF52 %27F8272727F8272727F8272727F8272727F8272727F8272727F8FD042752 %2727F8272727F8272727F8272727F8272727F8272727F8272727F8272727 %52FD11FF7DF827F8272627F8272627F8272627F8272627F8272627F82726 %27F827F827F8272627F8272627F8272627F8272627F8272627F8272627F8 %272627F827F852FD11FF52272727F8272727F8272727F8272727F8272727 %F8272727F8272727F8272727F8272727F8272727F8272727F8272727F827 %2727F8272727F8272727F82752FD11FFA87DA87D7D7DA87D7D7DA87D7D7D %A87D7D7DA87D7D7DA87D7D7DA87D7D7DA87D7D7DA87D7D7DA87D7D7DA87D %7D7DA87D7D7DA87D7D7DA87D7D7DA87D7D7DA8FDFCFFFDFCFFFDFCFFFDFC %FFFDFCFFFDFCFFFD5FFFFF %%EndData endstream endobj 44 0 obj <>stream H‰ì×ÍK”QÆá¿!D„6B`"ˆP $pÑ¢6B‚‹† „ÐBð31 Q Ä•¢Â,’²(A¨tá@MÑ@&**Šåçè¨Ý‹°IúМ÷œóŽ¿k10›9ÏsÃÍÃlo{ëÉËGNTéÓãwìÃøäBQyº™šÓÐÖ5YÆý ﺯi5³&×ïk í÷'ü7î> wpÊÒr¤¦e %«NÅ,«z8¿°âÑC^w_“k~=¡]´‘öòè!ûÂÝÄâ.îèé ?}]•,(î Myú–™îk í¢‡´—¶óô-{ÁÝÄâ..Näv¨ŒéùÍúßxÑd÷µ‘öÒsÚQ›xÀŸp÷±¸ €]Ó³‹¥•½ªáÑì«×Ú_­®m˜y×p÷µ—¶ÓŽzTûjk3ïØ…»ˆÅ]l‰¬Gwþ"•T&§¿™|ÝJ÷µ£6Õ»ÚZ»+“¯Øæî~Å]¬è}ö>³ UíË+ìN˜Àb÷µ¯¶ÖëJ@9˜8̸û€XÜÀ°Px¦ ¸S½KËmêŒØÃz÷µ»Ð JC™Ø8l¬wàî`ÌüÂJyM_RFurfmMËÀÒrÄâ0.t_ (¥¡L”Œò±8 pH¸Ð}€;¸ €ÑÍ­ö;¯SsT· e÷Ãcs¶'r¨ûJC™h壔”•퉀DæN÷.à.^{:ø)ûì MŸƒo>Ûç׺¯dvRRb¶Ç–kÝØÅ]¼›+¼tW;v²ñæ½·ÑÍ-Ûýä`÷•RRVL¹)=Û ÈÁî,â.^øº¸v¥±?9³6)£úrýc}µ=ÑnÎv_Y)1å¦ô”¡ƒÑ¾æl÷Vp€¸ëŒ¤å6©Yç.Þ…gló{Žw_¹)=M¨$•§íq€Äáx÷†q€8ùrê|»:•YÐúèùÛãü/º¯ •¤æTªÊÖö8@"ðE÷Æp€¸Ÿ\(©¨M©9 m]C‘õ¨í‰þÁ/ÝW’ÊS©jZ%¬œmOø›_º0ƒ»ÐêÚF}Û‹”¬:U©´²wzvÑöD{â¯î+Ue«•³ÒVæ¶'üÊ_Ýx»DO_0=¿Y%:Stk44e{œ}ðc÷•°rÖØÊ\ÉÛð%?vàîlú.À3Jª endstream endobj 10 0 obj <>stream H‰ÌWioãÈý.@ÿù0€Àj^MvA€æ5Q0>0¶7˜ ƒÛ³©å1³Î¯ÏënŠâx¼‰l‚eY]WWÕ+’ï~w}s&ŠæAžy+ÛZ.Þ½‹[™÷M{ni¶µ®ª¡ë[Å:ùxj9SRbÍîGÉdÛ•M}®×Ìj¦ôOÄþ±²núv(ªSëäT-Ü–}%±”­³Ôr «ìšìÛrcÉú©¬å*/O§ `4É{ˆ‡ÄaĵmfùçÔµ®/”HÔ uQÖOQóó¹uæÙuF=ßbÜG ,P"*?ÊîU9oÅBÛ0.|( ºbŒkµ¤Ù ;Y÷×m³‘]7UÓvçVüœ×ÖEþ„•Üú$«ªùjEU¾ùq®“5uÙ‹ç¶Ì 8ûP>m{%ñûó£|ª¼}ÉŽšª˜»”²Å¯aR¬é}VV…Ùå½Åu™ÄÚq¬ŠËa÷ Q2ß4ß»×›¾ë°[l\]k~x¿Þu#ûEPºÚßGóT«éä3b*uï ’;-ßÊݾBYu=\ÎVÔò]{å!ù/n ˆ[ ;öÊá³å‡~`Q€zC=)÷ÝQáX?ù¥”_ϭ˦–cDÛß”ÿÀ¦…î…–ã†ÚãÎéýÇ¡’í]]ªœûšÇM6.šBVˆâh)«rMÎñw”¸ÍÛ'Ù£›jè5B˜}XCÆ?äÏRõ•c^®ö²¾m~Ð!Ÿ±¯<Ýšâs)c–½ ‚ü8¶g9LûCx8y×çèEYTö®ÂPYP‡ªÛ5JyÕ–ÀÝù™ЕoÛÀåÀãc½ß·eq,wèZÌüè}®Øìä‡sÜ ’Ó÷²>$ ­_ÌÇ^]ܨ Òºˆ›*W§Q–©ÑMUó4®oôL ûåâóráqòÓÐô²ƒÅJZ< OmþE¢ Œ¤CÛÔöLâ!ï$yDËÚp‹Ã’Ë}WÂ=)ò§'ÙŽX'›²E/=Vòg²—m¿m†.¯ r³ÉÛ¦&OÀ޶]ÉÇž\¥èLjl+ìéëVÁur©E7féa·'².ònKäNÿõ€¥$O!wy‹CºNr#IÑ`¨v]©jG>¥l±ãÎ"Ý>ß O6CÛÊz󌛀<´Í²~P³Â 9È“M³m¶Å£Ü•5²å„.AþËM^ÕMO¶Ïû­¬I«‘ Å‚ìò iE‘ÈO hé¿6Ý€¤•MKúm+åt—o†^’Ý€þõˆæÔ_[ÛÈ¢¬ª–€ÙIíòn3T:"ÆÔâOCÞBG]nóêÑø™åp—Ý0%ŒG1«¦0ùÓî…Ú)‰ÇHªÕIª•a%©§“ÞÚH­‹õLf=ɤý–\j‡0se®ŒÂÕLáÊÄt5é톪/÷Õ3¹ê*Õw‡ Ýå»™òݤõÉ,Þn›Ý"1ðk´ZGrã8?ì'ŸiçÆu>Éu:rI6‡tH£.uyT†)9é•Fª4RåÌE9ÉH¤£6#Þbjf Í(2éå—R1L2£:OÃ7ñ “γYîu2žìåâ65#’þùþ¶ÃÓböðîõ IëM£ÞέûÞïÅŸÉKòRÇŒçÛ¿.µ̵ƒ}óžuû¼—ÿUDãsÿµ7o¢¹ä{ÍÿUdêÕã»7‘obR,òBáÍÑÏ÷å½Úëñs¹×kìþº°ø¾m†ýº~l–‹ó6{÷[¼´aÔvx%5 ­›m¾Wl%™Í$ß"ñ55ë ÍMë/²jö³L<‡­¿äíþMЪò³Y/L¶õdºÎ1í^L+Í;š¥jnÎ'ãÙÙrZQ=Ÿœï[õ´¯ûsëäR~µ·ÖÍ×¼ßlñU[¿´‚íZQ¡_Ãÿ°\ø©¦dFñŒ¢‘Ä«ÄGb#…>>NÔ¯LDõy ÃáéÓó]}*r@¶>m/Ó”Â×B‚ÿkŠ<¡O®‰j @¤Œ›ÃÕ„ï Ïv37uñ»‘>…ËõÉ@¡K Õ*êp\ÛÉ@©“€b'rNî0'UA;ÞrñGËŒ‚|¼ 5;Í@ (N£T¤šÓ ]¤Ã² ’ DÀ†UŠò» '°iJ±1SA9e4 ÍàQ—ÚÔö³±ç"ÕIS.åãÿj1ýj‰¦8‹4‰ ÅÈX(‚ÅýcºÈ×WÞØM¶¢ôp$cW2½ÅÑ[áØ_ªÃ¼Ô?äõ@©Žõ€%ÓÕPõgqP3 êÙˆgƒWG¡ˆÌ4Ñl y̹3¤%#¾¸ÆV Ñe°e•jTWøœ #²¶º<¢ŽãØŽ­`' ÐÈ  AˆŽ„!²\¨A2’;#gFÿÁqÈ%ú€" !R "CŽ À‰„”@NüpàH°x¼Y teÚQ)Áðò9].P‚&! 4 `221PÒL`“HŒ+0îP @³2Êl…ïX$Àz*2¤Ã)r— ULŒ˜ L™„h„Ycb a¢ IT©w1Pø(&‹ÚÜá˜6Q¬Ží…V].vG•“ÉW@ÆœÂÖ±%ŽÉ%0¿âDi’¥(fʯ:P÷b€®ÄÖÑ¡B¹þ'óÕ²#·‘ïô}`],>Ф±>¾ìÅØ“‚°#huØ9x ø÷7"2«XÝÍFaa&FC·§‹Q¬ÌxlKz—8oòé‚.ØÂŽÃ èŒF Ñ/ƒ˜™, ήwd@ó4è²,ߣïF)Á"}Ø[œú³–¶Puzňž±Á½£5:¼A§wèø?‚‘fL  ;Z(`>ÌIþêã Ù™ð0Ûw4ZÛ5‰#Õ«¬Ô ÞMîë;ÿgóéìýÜíÔ—|âvÞvÚ}>i;g;å:ŸoŸÞ% "7¶]µWã%‰Õ\±¢ª÷¼F øDª¥4£‹ÎÉjSíV>Xéqé2áuqlj¢Óu®V½jð½&Õ쵨V¯ÍkgÙXƒ‡*ßœ?®I—ÈJN S·DuŒUr æ&/¼R½ËöòîÃü»ìQõPõm.Õ0bÜ cÂÀ¤û0Ö];â7^z}wÕU0Z×ù®íÃ+—™ÿK$MÕ CÍ¿U?´.‡5Àê¼éùqSCÕp5ýuk‹”H^µ ‘ÌëaS“»ükZ?kMë÷@ÓÖ´û‰è¯ký[%1°»¥¸[Š»…ÂWÕæB’î¶jOåºPS§4RÅpaHÊA«]®ÒÐã—Çô¹+`†HVë!i“Я´F§qM”i„ èz£KŽO¢ÊZÍÏVO zÔ$5&bL´˜H”øöM¦D¢Ña„¡3" Rm1½Ù^8é‘ò(z$¼l_a¢äâщê2Ù]Ó€òîIïŠö²¤Í.i&h&gËÙ¤ FRç°KÈLÄ¢Œâ5g骵§Êhrh©Æ\C®>WÌÕåjsÁ0aÅäæR% Íý§Ä`µÝ¸½Òñ-ÒQð•~O¹Æ\C.¹Âìª÷œƒ[ZIYe;M*Íײ œAN+p ›§•2«4J+^åmZ‰žWêœXÖ G¥Ì2–© ®RËÄÜ’ö„æb~i”_,ÁlÊ0sÎ0=´ØrLí9f£}¹É2T3Wæ™Å 3M辶ñT³ËI¯rÒSá¤K/½·È›J8³õ(G1†tÔž{•vᨯˆ©‘bG)ó­W:wK³kææ:\¥‡P̘5ptÝ[ÜAmlΖæ9ÈGÕÑV”AÒˆJƒÈc€BwVz[䲬˜rë»)ò^©L˜[¯ãÂëE¹3ú³A e*ʨiU‚ɃvåÜr·g—6ºO»viæÔJŸvãÕäÔ‚¼‰ ë:‰Ý;¶3×vïÜ’w+Ü›&aÈþ\TVÐY"´xåÐÍŸó‡d°gwŽ1‘×.}pŸNžÊîé™[O3¾¥·§ÏØ»øè “¬2ÉËóÏv+±™%V2 ñ"ÿ5¶c‚}øÛ¸ ÷W_Xñ_7+&2NׂDqfH\í¬½â}D´}u*ô‡—8r¨YØÖ«“ð›ôʵ“[3)@&#`†¢uÿÞŸòÂÁ ÷ *å'0¸€  Ù×Ì×97es ¹ÍÖ@Ó‡ÉóiÓ¬É,ÊFAÌÙúÄ1qÖk0j¶8YÁ­MÁ¤9Ú5?ÙR¼L}Nµg:SÌÙ õçåêô¥òœéΙêœiŽôYóZqÎôæLm²ÖdE2¶3t÷øÎŤ"Û­.žá¼Gz‡_™6º2š.Þ*c%Ã$eiNè×AêÑÁ-:™Q©’•k¡Çôú„ž•)³Ã4˜‡PW°Y̬+&eÆÄŒ˜œP)K­¬zHoOz8ëy“ž9z^´'G=½ó„ÙE-$ÁFÚð¨DÊ@¶Ù,t“gÝA(ûŒ´ÚÖƒl-Ô¬JØ÷Œ.X´Y{ánFíˆ{êµ/Û÷ÖZ)¢‹WŠBà«#>¥5Š‹º}qSK_i£*-WUWÎå7&V$È:DeÜ® c w‡ü¥›¡n˜:;»¹‹ªß÷}fT|·o;EÛ®+ÆÝa€Gjm…Z~qß2îâëà#[¡nЫc‰ãÕk¦–Ò÷{~K7Ü n"~5=nø«Æž*LTÄ'¶Þpè• ÍŒ7ýÒ}ØžÿþûÇÇ/ŸžþðOæOŸ¿<¥Ï~¾üôO^Ò^~ýóãÿú÷¥}ÿöÍ3ÿOj.ó£zÃä„m”}¶Óö qŸR7‰{rÃEÞÏQ÷sÄ=Ęiù•ÄøuÒN”=\S6悾h¹¦lùó¤hЈ0‘àRDÐ_&òbCÌäP"&+‘âaÂI”H{’Éí…¯Måyž:bH†XˆÆ°Gp¤bCAnDÃ)œ,Nˆ$C È·ÆÛs¢3âíEeh,‘n¢Ü’tE¸ü ­"§ŒÊ©¦ÁÔF1/½N-ظþ²+&k‰±bº¯Ýn–ƳqãyØÏÂúéíU–>¿î.û²ÃŒJ™£'LæK4‹ûÌ&;ÍÁ½æ¢Ô¸ËoÖî8£<ç˜3ßv“ó"“š›->£ÙW¹Ð ƒYc@Sö³ä7ßd¿FžôH~9õaè,÷5r¨Qõ>ïÝf½"ç¥ö$lgèîñ!,0‚¨ e™N åÎ{¤wXß¾aË©Ô3é}•5EíEÔ)‡®žA‘B‹ô=wŽ€ù*m2o"r(S2MŽž&¤¨œ>iÂð4>¯Ó3ùÔ>?yÔÓùüY¶±° J6 È!k…Žø¢0å‘NB;Ûbë*Ô¬]Ø«Œ…”Òh­öÂÝDíˆ{´/Û÷ÆÝ-Ú!ö¨Ë³#ÊìL#Ò§ /&FAß{˜é“¥CSi£*O©W.ìo7iö\ß¼âl Ž@ßc/ÜSƒ½ðþÆ··¸àíð] '©/å>$¿Ô¾wÖTÔè5xõz^ôgvz§­¿_Ytï :`ÙýTV¡™€¦ÏhZ !–”?Súl”<7ôÞ$ÛÒ¡cí LÊ‚ù¡Q¡I¡EÙdOF¥Ê–ÆD¶dÉ™£ójÅG¶8ÒE‘uÔÐ׉‚Y‚ù©›wSx-éPr[ˆm%¹]%µƒ<}ç´ÿ}¹T¥=Ù™æ`!ôÒWèÀMàM;0Ë@Ü4 Dl&!(§${€ó—EH¸¯sHø6‹ð½{ò§v¹b®>×kÌ5åšsTsîZs9ÍxB#=T¹Ž«ÎÕäbÖƒ|ëw—+æês1)yOv…|ÂE8v=±Öʾÿ"?KxæNüÀKÝlë‹ý€koé Î]Á¹/8w8§ÕϸƒsP8*.8Â47©îµæšêJs¯8ý7&É:e:Ä»ÐÁeè62–v ¥âK8ËŽßüUË®cnÿ ¡¿ÄÆ6æÏœH{œbíÛ]ùÜï\€OÄÅ|Û⦮uyCÈm± ÜØÊ­ÝhÃ+—!’jõnú¥û°==¦äëŸÌŸ>yJŸý|ùéŸOOÿóéñòÙ?ºÔõû·oN?ÆÛn.ó£Î–¦ûúª¿RMYYJèJÌE[/Ô*»?1pQC×kð2¸½+ÌŒ”Ùºdên-]½•¹a»¾Ö¯ÔRV†@Â7‰—ušeÉÌêÍvMªQ5¨0Êéû ¶¢mÍp áßng°Ë UênëoWÜ[÷äÌ—¸orî[d+ÿ xp`™ŠÄƒbB¼±a­!³ŒdEfÄŽÆÆ‘‹P­~ ›ið#%oÂ1Ê*´ÅÁF?Z;V­x•?£ø•?GÍEÁncEÙîv=­M?[»Å÷ërh’£W¡w/Kƒó0sÓŠÅÉãÆäƒØÜ*qúJNÏÂô`)ô öu’œ+A_¤Bcò?œ¤®³Lx•ó4X°=Ô=Û—L¬nsÕm¦ÂСûËLnòÔýàIª÷Ì1iŠþ6ŽWÍè)Æ¥‹Ã‡ôþåÄ;Ï6}Îj³'™œcr’±§Xz‰9»Dw䨛œº4O,ÿç<òWXqAJ±\’I S¿ã2wD&Kwf/¿ “(?Ìjr¹gÅŠ‡gíÝïîIw}›;Îà“¼ßáþ²ÿcÎ6R—ÂföÛ ؉éŒãœ×ÜwÉÿaêÉI‡ÿk4íœwc‰Ùç=hÞmÚ{Mûâ^/ÈçEŸst]OqX5çtxœrÎ8§ü˜qº:RQ?޹ÿ- N9›é4åÓÍó)sáa´lÈtØbnk âËŽÁa¶L÷„9•#&¿Ãü7à K%Å3­›ÿÇ|µìXnÑ}ýwio¢HŠ’wzÞ Ye10<ƒÉ,Ò þýœsФîC™LßÛ «ÐÝêû XU¬óÈüFfë˜6PÄMœüä†máÀúÊ sòÐ]¢HÀ"OI-*Ÿ¹ðXl„Veâ HE]@7 èŠZPéÎÀ¾ã•€‡QâQ9GSƒ‘^QMlU£ÔÒ ÕŽÒ:ÛAÃñˆ¯(VOèÏTf[:ô,ˆøZô°!è £ JÁ4ÇXëŸ3/y—¬KÆ%ßšm͵dZòÌY"·œeͰ䗳«¹•ÌJ^{VÊ©äƒÜö|J6%dŽú–nÕ4BÕ#˜“ª ¡Tóã1Gvw“ª˜1c#f­ÇÌu˜½€)l1‹ ærű›qPFL,öˆÙí0ÅÓÜb®@5/E[ <ÀÖ€øúîv±îaÔ>í¥×~’ödaä.âíj¦J?F í ´Xµ÷Eû·˜£bPhH‘URf²‹Ê0(K¯LuaEÓÂ<'‚Cö«*°¨ ³*1©£*bÑ+’B`bâÕ2Ål Øòv \›LuBJVqQ%%Y2€ÂUVԕɸ›¥’ióŒÏyûö€\ÿ Ç×dÛöÕç{8®ÐÆ0pÇUù!>ÅÛm÷24¾;ßÍ£KÙŽ|Náe±è&ûbê:%14­üfõ´ûÞþÝG} ÷‡>/ë)»´Ód'×fdÒË\–×Cm® «¯¸K­ô¦~|Çõg\QÕkŒC4AצèAtmžŸ5A×úadÇo]×e (â:¬ýš€\Œî1Gô Ͳépþ„¡çè÷p -‚Ķ02L`%^<`ÆÉl€ž l €¤t`hoº‰w=êémWo­-úŠ_wö¶·GÝ­ý-ÕÛx­ˆE2d)ÉD6²%Ú¢íÞ¼‚>Ð\š<úÁåìZÔ™Yݱþ°CìQ¯>±SºÅ~õŒ]kKçÐi›:¸ª‹ìã¬^NYŠZG{u•}íÔ[v7¨ÃÞÜ©¹GöV¢Úš-ÇËÄõ¨îõ$žƒ¨³ÀÓà/´ª(E MIE)MévU‰,{e=áqLbE€þ¨+ F}T|æWÕ-÷å¯ï_±êíY$MŠRôƒÈy1{énRò,2¦òŽ¢à•,šÛ·7Å*-Yo‡Z™„ºŒ¹2vm:Gv¢Z…³ ˆ¹f œaÕÎbÈ1žE±E÷ý·.@MäG Hÿ‹ˆ¿í‘þ ÂÝ#$ À´t#Ùfy‹hÉÒ}ˆúùÓJ𠊘+Þ=§|]¬XèÚŸÑ»åkr' dÝ oJ:Ì™‡ùBúIÜ0ÏUÙ1‡˜0œl-ÅLÀJNX£Ï.$e/R"Ö5|¶Æ~!¬hêb«±æXjÌ5¦c¡åýÿ¦]XCõ*9]sê£ŒŠ“rÅ©bÔ»ùÔaž¾íùvÇWr*Ì(^¼fFãÅsfÜyñPçŒÈéPë«k^4µs¥wžŸ2+kž3Õsë_ÛŽ¶ˆNó¥qκÅß6Ñó šÌ“»µŽoü¢¹Wd3)wéRÍâ¾4CpŽV3ÐW¶¸I˜”¦³ïÆó§Þ¹Ÿî¸«baÛ&á–7Üp8K7¶òK°­ƒRwñðBÜÍ´`©ñ—øq}ýôsö¼ù•é󗯯嵟N?üíõõ×~þtú’_:¥ôãóÓá˨·?MŸÔ[] RÄH™wš0fkvO­ÜSÀ(šƒå¡ +=”Ãðzù(t¹ 8:õœŒF,p8`^®ªÓÁp'ÇlEoÕÊ]EÚ$5Êa­òXN.+àÀ6崌Œ‘ 7¢c‘‰C4Š”ŒÖ&bnEÍTzFÏ#rÑpn3…ÃÀzˆ˜ˆ-'Iœ”=´ˆ¡MHèÀF”M!8)œ" 4~é¯çE¤Bç)D‚Iœ­~H#]&’Q:…‚Pà‹fI$:‰:Až¢Ljé…g€âhœ’p˜$CðŒ€Qëú xµž;õÜú=Ié-êv«N÷ÍÈ}ÞÐßV½M‚• ³ª«ì)>ªŽ²Ÿì&{IQÏ>ŽÃ\«T‹Rí?F[· W)ØÕŸòZæ´?§¿}ÿU½F¼õXþêÖ]ÝrHfø©s¹`+Wu멲£ºd÷ç§GùýšÝq Éïñ~†/ÇOÎlÎŽlëäÀ|ñ]ò[‹\VñWI®*ÈMÉEÉ?Ñ9a0ä™Ì/urIYdep© Š2ØuÁM7Ñáî £G=½íêr£ ÐWtøº³·½=ênío©žLM®l©Œ¤¹ &b„~$)èS̳н˜“¡Ì7#!Š~p9»ufVw¬?£¼c¯HêT§nE¹(öŒ]kKçpZ›:¸ª‹‹Y\ô’ÝkG{u•}íÔ[v7¨Ãìq«>;ë5:¬Dµ5[Ž×¤Õý¡ž€¤SÀsuxü…ºBé v¸É:dà«/앵ùB8C9B:AsI~ŒÆ¯¾Õß~ïõý+–“¤Iѧ7á,“œW3iÙ(y;T%Š‚GTríúL¸=©v] >¬M«N[eê2æÊصéÙ‰jv΂"æš1p†U;‹!ÇxS‰ww—$,9‡ê {Ñÿ"âo@ûA¤?ˆðE÷HÇÉAF [/²'ÝOr’‹hÉQ?ZI^AóoŻ甯‹ ]û3z·|MîdÁƒ¬¡%uLè0g æ é'qÃB˜Íá$?˜Ø²yvž9œÄØ<;CRÏs­6;k³³ö7±æ´‚f%æ‹ä=Ì8DÃ`ÖÏŒŸZ„hùÚ‚hÌ 4n¦ÌÐd&Ã'·xÿ¼…lKð1k ü$ʈ˜‰û0tìÜ ES’­ÛˆýnîØZfðY<ì@­8»ÕÛÍìa5ÉîjõYOc°ËöÕnü(fþ‚Ù?ÈÆOWÑ,¸ ì3(#¸(kÓÊôuIš:'e I_§¤²cÒÚ!)nŸt·sõE ð_×á&©±+²-éò‘ÔyO½%¥^£^K±Íã¸BZSZœÓcšFf6Ù¡ð¥Éþ;¸,Ns$ÿI.‹1]è¬Àg*ÊŸ• y*RZÓ”ä§=„ßX­Lk¯]¦bCÛwjü)5þæ­OmiÐü·ÿ$à £H ”£iùê( àÀ¡% ÆÒìò@àˆ?$•öD±àE$ƒ¢1ˆC&‰G€Ìb”¥[}m¾ˆ ©ôÉ4XO$®V«óu¾ðx!@øOb„Å1:gˤi#˜œ¡ª]ªú!U;¶Û#¯£2é9ßÇËG‹ŸP“d‹Ç‚ÊÙPA¬VMµ ·×d7;…lw3!Ëe,踊Xå"–d ó”0¹˜¹”ermpIËDMÅÀDÍè †¿&pQâxôíš–GÑ«ìœàãÓÓg, =jÑ ´DªBµY¤IÐ*(‹MÉ–š.ò_SK)&Ô‡MK±éãÝ/1ð‡¾îÅ8¾VD0H3ë¨Õ®ÚžÇ€²¯Šƒþd‰&­V«óÕkðÛèŸ8A`@HÁΦ Ä’.œª5!bA%-p4€PÔûêùã êÛ„ê>tžw›zMX°¢8ޱ–rvÞq Š•½v¢APo±³jGBÁ¬>:Ô? )ž›>ÅÙs÷”˜>è³'çÏóÓçô’EYr‘w™9HøÇëÄ)͛ҴI³&MÄÓç–vwß_i‡Ù¥¤Üå}.–öyßém¯Ðø‹Óõ¹ø8+“&#DsF½Nš^*¸C%7˜n•P ª…_Që3j~ÂV±ô@‡^hÐ0‹æuC§,蘀αUŽ¥N¨^ǧ§y¸è÷fýfдŒ¿<è×{ÍÓN“µÑ"£«¥m?ZeìlÕÎíŽû Ú#w9¦öÚmg7kíš«ÒÞ´,hÁª8ÅÂh‚"bL£â²È[g$³.np(\Ñ A¯NûMVM¤}iÓ •2½R Zº]UÝý-½f=À6ÂfVuj†©ƒ~édjÚžÿi'ÍÕtþÞëéQqíØõøþ+j)Tt¼ÓFêì¯à…z;á—Cìýe ï¹í¤cºtä:a8ð§qÂ? "}­ÐG>±{à¹f{y縛yþÃü×þû·/ùÏO_~þúíÿdùú¯Ÿ¿ÅÏþüòÇ¿}ýõ%¾}ùû¯?ýòÏ¿4úüéÿÐ/-_”ys„D«.¡•AUD*s…D)‡¨„O„'b“AÓáÀ„± \"&-D$ÁQ#¢òº»!ƒB§ÄÀ˜]0bVž}Epécó;Bž~wñáFÇÛ '§4Ü6¡ä ‘ù€ó85&,Î]CŽˆ8h¼X”;b$öÂÀŠcêðø,ºÅckÈÖ¼Þ«bKÀ±{Co~<¾ÏßþþHßËÞ¡\ÿ½oñjÏwçQC"$>veЍô¯'ïX?¿pLJ÷¶óïÏ wŒÅ84oÃý6,ï£òqP2|ù LpÿœQ}/. SŽí{èò½ø¦É%Ƹs̨C0Ç>!ÐéuÄ:;¢áŽx×Én5yÂ<‚Q°ÜûüIÈgÐǾ$ø òšð( ‚DAÂ á €PÐEì‚%ñ8|A´ï£Q£“„Û€©¢¦WQåñìqÆ©Â1Ãïöcƒ1T r;WqÒ¾¶q¼V>ûxIS÷C8¯­^GN¼ú>»ßu›Uí[£ª}Uo8§±àj´½Ó@÷äÞ)wO-ý2M5!ûrP˜-ôP»¨¥o>j¥“êÌIÅ‘³ùÀ©å¦HßtTSæ©é»E~7/XŒj}Zd˜ŠŠËbƒ3„\ÄøbŒ‹ÅØ”Dêqz”³¼âê‘Æ8[E*ÇI‹±2Ú Ñ¶Iø[§ÉN\iGŸÎ7èà"‰N—e£Ÿ¡W?"ÍÎÙgç±8÷nÙqŽÌMCpÓJãS»¯ÀûLéÝ’¢îOSúÖ´dH1£n–4>~PQµŠ¡E)ŽR$)v­GãñdÑЫÜ#*Å”E%q¥ÈÒî÷[Å­”t 3ønâÀé ¬8P_·£zQéôO•"fÌ1jÆÍÈñ[uÄoO€Ï >…V>ŽÎ«ÒÓàóàá3±ìò©ð¹ðÉðÙðéà9ã ñŧ„çtŸïÊëxçLÿë*LU§âæ°6½nr:þ@KÔòu×ÿwÝæô¿KÿûGý/‚I Kž„.((°ë ]¨žz;ÇÒ…&C›QjbfÔðzÞÖ !YȽJ£¨_AºF4…Ä­±ˆ£ßÞ'!»öã<;?¹+"q££Jg¶ÚL!¡Lîñà~¢ËëäóF9½Ù½ÞžÜ^+¯7ÊíÍP“•ŽŽˆžÝŸ|ßèÎo‘÷Û×ä„ ßHß‘CläûägùÄz@¯XÉ-¶îÇcÅ<£´f“k¬ä1“}g–­þM~ßæ¢-Â5µ®ã•¸V õw Q ’MóÓ×Ѓ-Ú—¢jüð¥¦m”‘š*"Á›!âæèw} 5¿yˆßwý(Ãð–2 T†6'ÃÖéêÆUèß2+-Š1òÕ‘¥ £¸ÊÈÊØÊèjWET"I²$)‹œEÒ"k‘¶È[äÊ æš;X0æêkóʼnwÄe#™ÅÕju¾Î z8ˆÜFq*}Ìœ-#9g¹¸fdØÖ(66ÉUÜD®3æâfì [ÙèhñdšÌ:LÐ ü€ØÕ‚˜Váö÷Σ¤”då.-Q\Z‰¥4Ýe攬($&&¹àðØ3A!@œ’´Dq11yY7¥¦I ¶'9ág, =jĄ́E¼1™á×MXXl&%’É…d”L: aú;kQLÞýÂ?øõpÇÝW|­ˆ`@”-$´:E7<e_žuuZÍ9¡´NïÑ»»0/’3ØÄüØ.¯ÙôI†’ߺ¨ÂÝ?Êa¡õ Ðó§{Œžê¿Ä—[oÜÈ…ß è?ÌK€5•yi^zóDr8‹MLj_  CX)^ÞñÂP ì¿Ï©SÕ9–-É4à¡fLNwWõ9ß‘³ÍäÈs«©±³Ìˆ“g§M£äʼni~Ì´¨'.äD9e§¬Ãé’³%'KÎOÎÓÀstàùIVÖAsˆŽ98g« ³_t Qgt°öšZSàHÌП ;3P‘:ìTƒý‚»te‡9âèÌ þ©±§¦×µ-öØA×*ìxñ'†ÝËbØÖìÖóÛša6G*©Ì’ó\Ìrkžë™®æ /2®l·ØvE·§t ¾Ñá¢ç{LSÁp8 UdÝœvé68M¤Ý°{ôÑ¿7ð7=Ý2ürË_oè§ŽÎZq”2:Š2f6qf#g'óóœ£Ì²‹3m8[§«*ÎZFÁ¹âü1 ×1r-²ÏÉš:®KW&k“ÕÕ\¡½¼ r=…‹ö½š8”ô£ýžCx¿åPêw$ÿÚt¬TB_¡èŸ>%<- ÏßMݦìjÊ®¦ìj²î9lÆñj¶µÛamIpËôJ;ÀÅ.ÆkÓÕtUgWõƒù¥¤ž;j¸(ø`Ê}àïË3ªuÐjUjÌ•Vz*]…6:ۓʪ¨Ï}ÒgÒU•ç*’0‘Q‹**=âÔÎRLQé°&c!UèŽFñU¡[ŽÎ¸G™‡Ô£Ô’z0¨ç:R)÷õ@•wN‚•±ÎI°B˜Bl'çä±IBÓ9¦Ê2SËh°!ÃÇÑÇÑÅÑÆ‘˜2,4O¤ttØ©ŒÝWÌ‘æôÚÇ1Å!ù àÌ÷!G+” ø1r%=gÜpf•¡ÈÌ_ùœþË쨸e öù¥æ‰â±}šUåºm¢Û6ºm¤5äÔ¤ü3ݶÓÌPÅ  jjQÁ¤–¥&E‹ZHà[I¨.dɾ+š¾çEïêRb&ÞêòVIÌ,0¿Ÿ¤˜›¢ê$™Ÿw®‘;0{_ða=¤Ç1õzy¬|†#_tòöÀ;}F“ÏåI±™`5eË;š¢ôm©7ËŠ/zÜ&_êo^LáQ÷Ëo0’? ?5ïæãõŸ®®ooŽwöÉxóþö>ûa÷ÝË›û]øs÷úþêî—_wÝó‹gg¾à~׬¼x…úeG~Ýe£C×Çko9€®‰'fÅ«à²a ÑQÇäæ•ê—ÁõÑØ§Þ¹ôÑÌ=³ë¼09aðBo³¢SóYUtÄ6æaš9ø"]ÑE_Í%¿È­’aP˜œ÷˜`D›™ajºdã ›Ñ)s¯ÌÜÃãèÓ-é—H5a} omñ¿}tÖÿ·4omä¨E5 ! ¡ t&ÉC<ËD"]!ÕôÝ–®+Ùh‚ôP\ÉGuLHÞ2ÒLÏ­ˆ¥ð[ˆ­8®x-Œ2:mrÙÞ\–6÷È=Ç”1ŽáïÜpO<ñœƒ:sÏszÆGá‘Û^ºrStÒè—{sÌÜ33×\øfwfî ¿šGÐÜCóºtÒÜKá¦Ð£à§¹£æžšGRsÕ°¾ÿi¤}D mQ¿ÇÚµG»¬ƒÄw­Ã¨ì—òæèåñµå£O|¹=·Ôæwr7,©éò‹Žþ¸6¯ÇÜþ ¼«?ç]½xWyW–ó,”'¤*ËN§é*9†y žXäþBZ'¹0¦ ¸Ìˆ£åÕä{~•3-y†Ã‚¶¬d¥!C;¶ÖŠÒˆ¡ ¥ áýü$‰AA¡d€>$´I­ƒ#¹º‚¦Ípª Žåá^-ìVômÆéáuè2ø^Ã}-¹'{®3…[v$à|´<7Ú PAœT˜ ì)J¥&¦ˆõCöÛhäÈŸÉZJ2129 ‚¢’E’ÒSTZ– ¢2CPîíEN(&™/iêÉRPJF)-%ÍONÜ!½‚‹`2Ú±‘œ(¹Sò¬äd)Òñà-òž¼09drMúhÌ9jãcfä%­Ü‰•G#±ÅûhåÕ93±¦`è(eƒ¢v(®G™'”{–£*´C;´h‹UÐ$šeÞpâJ´O ŸkàwØmì’ç¾NÜ¿w©â~4\wÏÕ‡)¬)€—+˜ƒzA=3ðš"z•½U¿DªFÜ¢Ø+E« ÇvÎÀ*C+xϰ@«"ÀÕÅ3â•4Z!k–RÈJ˜Õ.<kÃoŸfŃ%Fq¬ ixú—ˆ‡x˜ŽôÂLR)v ¦´„QJΔ‘ÁÒLÑÑ1ÙÐü)2ä)E¨öY²hË;&ÒšâÄTÊ\*É”ÙÔ„j0÷”«-’åhqÔ‡GAL$l$xûª7!s”2Ñy•³}´ž‚æÊ:taè±*g(Œ‘ÿNv­,„+ðTÅî­U¡ÛgŠØš¬]%9[sQÎF5H]±AH”´AJ¤%ÈZÃbÔì#[‚ v¾ ² Ôlà èA>(@´*(6jŽ*ŽŒÍÖH±Ðé •ÞTè-}6uxåú¼PgÓæ-eŽºŒê8'*üDïTNNnÁ –¬¢Ô±f-Ù¹V´cU¥®žµè¥Rá‰Þ*užµÖ¨°Ð’5¯X÷š¾ìˆ -‡v@Ï.ðôqéé†iA.o™OkDH´MQú¶Ô€/< T¾Ô‹˜n³ˆúÈ'HJÅÝkpÇ%úRlqÙ÷اϰÄ{‰Ú] < òNŸÑ,&ñ”ÇèLœ,„·vr/d¸hñVw¸· k½,Zi~<žÏÈgò¤ÇÈLÆ=4üÔ¼›×?~ºº¾½9ÞÙ'ãÍûÛcøì‡Ýw/oîwáÏÝëû«»_~ÝùçÏÎ|Á߯YyÁÖÇ·%}:â«lEû’a§(CÙåØÛ˜Â€\Œ6–¨p·Ð›À×7âîtÑ«§›Ã­ˆØkjih÷ZAZdLCÚ´ÄYCÙé Æžm·‚XÒŽ`Ú˜ÖIä×€£H×(ºO Š6HêC7t Ÿ ?;È&ÑÈY جÀS¡³%äÔ'Ð9vö;¡-€p°4c¹¤_ð'tS„æ~<+ß U„¡«:EiÇþ‰‰Ž´O1Ð23ÐÁSðn"èÍÝ‚ÑSqWPq> B NAy½ÿ? í¼xŸO>ÝsGÌõ&Ú ÐJÃ7ÄZ=z²²ê .UÌs„\öbŒ¨› 7ÆöEÁžD¤jvAÂÛ6âížïYëún[©,jžàVj*•zJ5µ–ž§rm[CÛpâpÞ`“áÄ=¶M[ÅÚƒa­€í bÞ­Ð6ÛrkϽÂ^&}3ä %8ú&È‹3èý–È Üô>yÑ]:ÎS„ßuOAw…¹ r qO׉Sœî)Þ~eÝÐéŸ +__7Tç³aåkëQXD04tØ±Š±deÌ*Î.ÕY‚m‚[Å[\Ö-!®Bît vqÆw—È›°WÁ7 ¯ÂoÀßÀD`öQ¸Ì@XQx‰ÃK$NX¬`Иp¼ÆF”•Pk-ç]YöJ”0ïØ>ôDWoÒñSÀTRnu@J¹¡W~Q{_Öq ß@åB>p[|úô§=€©øäÝËÇWŸnw·Ç÷ߟãkþÍų—¿?ú¯ß Ÿî^ßýñáSzñ·ãÇû#ÿÚý ŽÏw/^^ýv³û3¾~}ûÛïnâ÷Åî²½mö&”¡<—È£éZ¹iº‹7WòFŒ7È_ÅÕ¿ñÙýÎíþ¾{ûs±»¾ÀwÿÔÿùüýâÕ³ûËų݋ýÍ¿äâtîoñùÕ>Üýüàì·KüÔegI¨ñ#cšÌyøš”çWÀ’ ŒYA®ì««7wÿå¾ÚvÛF’è>/°ÿÐÀ ˜Ð"uO)Nf=pbÁÊ\€Ì`Ð$[×›èn*–¿~«š‘oV¼³šyIdòT±ªºêÔiÅâ4ö3â¾ør¤Ty<øíR—à—',]ñÅ?þ¾pÐï4=º)œrOß¾ÒÆï¥-`b»ë)x8ÖCŠu½¸;‘ïߟó·æ`”xžCÔVõ]̼ÌNü¿Ÿ5æ;Ÿ×\ÔÌvÇÖIŽ­vÇý“÷ÇxZS<5,ª•5Ò×e6‡ ‡ôd®ñ´ºPÜ>Ö¶7ÌŠô„Ôƒ~F‰•æÎ^B£ÀgÉÙãcM|YèÌìiwÓ¼»>â0Ð^ÂÚÝ0í СHØfêÇ # pd óެ …8˜$1 “ÅÔ¦zåÁSpÔŸ”5Æà¤Ã´;žäxØîxt’ã“4>Éñ¸Ýñä$Ç“\;%KÜ*1­¤F¥¦„vˆwJÚ CݞИРØ%íNO tÚ¤z§±TïPƒT.LG8óhŸN6üHÙ»¬%ÒRX=œ ¬„y˜Šdëe™äànŠ1 »q²,bw©àKÓMÖWšî¼Gè X(îé"ŸoêêÄ…òÜÏœ¶^Ì´4‹ùaõg þyjîxAë‹r¢x4{ñËå~ks]ý-}ÎÊOë¾}Íh …¸¦Š¢È¾J HÃ?=¥ûäÁ/o?q—Õ¼~C.·~€WT)áÙ‘bò €gBÐ?ÔÍ }%‡s6žï $(‹\Ý@©²×øÚ‡,y}ñ¯@þ¾£B¾%¼„/ë"vGý(ã Y @F'¸$YüóO_*¸ï°.Uò¹óÀÜNeJ¡ßE‚¶¸°Ù%Iè™%SŸt6ÍÃ_²)¾½(fsQº•£¶Ï:MF—“þ¿7ÂóIáõ®;- ö<ót"©øö èïÚ¢¯%݆>à sؽSÿˆ¹€Î-ž¿Ö(ËÕ×3èï?“Kßsþ:4nNÍ)ܶÈÕ=£~CÖæ­7F0ƒž}›£þ¤ßšÝWÏU›NÉ%ȳÈíÕx2mÏí±Û°žKNÃ~ߘŒ{ƒÖ¼öòÚŸI^À;sΛò±¹qËVêNxp¥í”Þ±ÑÙÈ Í“K ‡Íy¸ç¡'`ÍE[¦¨ Bë‚™~s0ÿt¹mYÐßshý¨—¶öìfJB2A¤·|ŠV*B¨P6§Â%÷¹Hcøò‘¹^´%÷Lr?BÓß šÏÒ f7¦I®“ÏÐ`QH>À‡ à« Á$S$w4¡¡~/vŒ|fмw=EmÏ÷ÔþHäñWni°Žèš‘£01=²ÊT*&^혣¸ 6õià°ãjlx¤|/`DAlÑWA¥ü!›ë:´ã{!”•ý#l •m3 ÓBñ!”^ÉŠèM’6y¸óa‘µàYuj°œ/UŒ€ˆ\8Õ4–a/¥|l’LnȽ®£÷¤;)׉I¿W0¹‹T!´Y¹NT‚2¤0JÎB÷\hܧô FÃaXÛ¶Ä„¢Îص`Ù¼­5©[yÇ­Øg9Ìíðz,Y‹ dÉüSãΘ¸¹–úuõ²É°·Ü¡>jG|Æ[~º.Œ~&ZCêºåžÛRùPîrò#΢¾'óí¤+↞‘<$ .âåì†Ì"ų^ËÔKÊsïg‚ÑļcÕÅÈ0… @N.s+Ò&WŸ¸zÞû4¥«ƒ¸ú· ȧðhG”q!pLÉ:Ǩ•þäƒÚÀs—Íß (E2Œ°POMÏ@4änß+NrGÿl^Îo›>¤óéoJ~`;âš1¹ô²Õ,¨Üf²´E×m¤Áïšß%Ô|_ æüjÑØ¸Õ®~Šwʼ°S ÜÿÔõ0m¸ ™6Òglu‹ke&b+½%¬Úë`’÷‹å3Ö2¢*q ¾Köß²°ÿò‹qÝKãŸ]³Ø¬CÑÚ¦ôâXê”'§ÁªfËñ…±ó$޲€®ÁÅÚØtíÒBõja8œeÞZ»¦ð5*ô}ÏÄ 'eb(ƒ¨ºLXTÂõöÁjï7•Tƒ` 1· ä“7Ö4 …ñÕsUsåµaÞzÓ˜¢´pi¨Ô*P†ëû¡$#;«f¿*=iøÀØ~÷b{ØÙMU’FÀÖ4· kPZ@¾‰äLÕñL–€rCaÍär% …oÀä‘äa¡QÔñU¥ªí†èÁC‡·!dS4žuq*Ù·‰pT% œËNô¤á42uU-'4̉¤âÛ¦!ßæyìâGciŸ™ ËäŠK~½Xþ|·øõ’ì¬æ ÀO(øÊËFܪþ¬{æewÙ‹/×lE#_µÔåÓ”^\kG_Ê7ÜØ¥–™êi©)Ú%¹ÃêbºX??èWèvwŸßÁdjŒ*§ HÊÛ‚.úX¥Åƒf¬Êht8¶99¢œXcch5ãm®×@Ó|µ¹ÒNÔe\¥Üu™ôÖÍI:¤>l›G+» óݤÒöÔ–6‘bc( —:©< bYáª)\„fª®NÓõ V(ÀÚê…È톋§´aj`ZüÕHˆÒ§am”›ÔŒ,ÀlÇÑŠe„ž­ÜÁv1‚ÃSž:ô‚a +ç±0ð(œKJ¤:|¼øypkà ëôHˑŠrŸ › ÙTäƒì‚ ËÓG´jÖaE°(*­6x?ª¹ ñ[*d)òèCäÀùÈ;ÀËÌW#C±õÕ4ÎZ m‘%dËiƒöbª¤«´N«R3âˆvôí¬ ºîÄP¨Ãb‚Rpkl “é»d›&*Ît¥žŒµd®X.÷¥ƒ¥dbÇœí¾‘H®6™„¨¬<¬¦V… dù§ô9µû3Ï“iLꀅËË() —Ø{r-@ù‹69Ñò†\ÌnL“,puYŠ#מ“;Ñ9ç¾ZdvCî"…üF–ú0s\ û|Ü$]ZUNLò~±lñ’`ÊnÆãiáS?p›Ü…ØÎ’,½§4ù+ÌÂ­Š¼&WŸ¸ºg.T3‘©7¾iÚå‚|ƒdmÙ0ãâúÃïk©w>stream H‰ì×ÏKTaÆñ¿!$‚6®Š`$H¨ 7R-"p¹h!-$µP +R Ë ¥EJ1 %T‚ô;´R"©”ŠdB-Ǧì‰Òi¬;sî¼ï÷³p•ræžûœgšŸÏ_ƒ#Û*.®X_»®ôtW÷õ8ËvóÎK ¯ŸÖƒ,›ž¶ž¹†×ó׬ÇòLþf ô°\ï?NUÕÄœUEÇÏÝþ:ûÍz¢‘×Ù×3ד×ó×GÐ.´뉀¼‘×ÙŽ^2—˜K¶´¬.nPj*EÇÆãÖý;²¯ç¯-èSh#Ú‹¶c=È> @ô¡Xßp¤¬Yy))o½ÿtÌzœÿåLöµ mDŸEÛÑŽ¬ÇÂΙìA/52úa×þËJJá–¦Žècëq‚áXöµmGŸH›Ò¾¬ÇÂ˱ì:PßýyjÖz Œè u‡d冺‚ÈÑÃÇ{¦gÖƽìk;Ú‘6¥}ÑûÀRÜË> ½ök7o»ò0ùý‡õ,@¸Ð À¢Ôj u‡RQÝ9úö“õDs5ûÚ”öEïKq5û@z½ý¯ŠwžÕ˯Ÿ·ï½¶zø“šb¡5Ô Öãd…ÛÙ§÷¥¸} ä÷mW®ÙبTTw޾ýd= ôð+µƒ:B¡P_¨5ÔÖe‹óÙ§÷E9Ÿ} ½Éø—õÝ+7ÔDŽ9Õ7=“°ž0F/)jõ‚ÚA¡¦P_XO”]ždŸÞ~ãIöôFF?ìØ×®,niêˆ>¶°D/¢.P#( ju„õ8¹àUöé}`WÙÒ‹õ GÊš•ˆÍ»Ï?zg=`ƒ^€çtÿÕJA½`=Nîx˜}z˜÷2û@‰¹äɶþÕÅ ÊEå¡èØxÜz" ×èxK7_—_ï¿Z@] F°ž(§üÌ>½ø™} ½÷§ªjb©¯'Zï~ýf=;ô<¤;¯kŸúOî¿ZÀz">gŸÞ‡Ï|Î>¼•áò||ëž ÈºÒÓÑϲ=ô|s­ç…î¼^{Ý|]~ëqÌ}z~"ûðMª÷3ÿ÷]ÝC©ï e{/ ŽLdo0 $èøCW]·=õý_×Þzcd?…Þ‡oÈ>üñkï/ë§gõgn­*:¦ß­ª‰MÆ¿diB èø@—¼ºöº^uÝv]xÝyë‰ì‘ýô>¼Böáƒ@zl<¾÷àUý‘5[ÚsÉÀç€^€Ût½uÃuÉõžëªë¶[Odÿ7ô>>stream H‰œWYWâX~Ÿsæ?ÄFY–DY³AeQ\Ñ\ ÌÒ=ίŸº‰¬Ú‘žO¸·ª¾Z¾ªºÎºÚdꉿÿ:zŽ>´‘ª¹s¢‹lSwÍ4žŽ‰ôµ¡)¦ŠzŽ¥"š–ø¹²Ó\ƒ¢®DéYÒápe!9ò}¥ˆtÃp¾Vk›†©L-sŽDó—aËó…ŽÎ5C]ªæI"ÝE²¾«}J´‘=%º²í KûWÆžn8ý¡žÉä°ë–ü¾FmÌå âFæÏ¥ÛYò·Ø—®³pïÐélÁÔMK0ç H– *1;í)x”lðfÇ•uÍy_–¾?…º²…gŠeWw(¥Eµ‰_Sd¶ü3@6ˆ†®»¶cÉŽicMEsª9B€ª©¸sd8)âÚöLÂßmcï¦K,tP‚äëð훛ȚAh[@ ÀVªB*á˜Ø„‚ÍÁÂ2¡Ëpçòb¡kŠ_ÛU¦Ø½†!"[›k3>š%vÁ;s¼†×lÂ5fä9õ-ÿ38·`Z±´ÅFù£û)vÑDƒøÞ7† ¨aßÒæmÙšÙKÙ¦ËW4Ý– 6ÿ ±} ^‡Ä¶ÐØ f”ç|Ï‘ U¶Ô=— Yht£¡_{H_A ·°çý÷Å>ä^›³œ`û?-À¤î"˜é1éÊN-û…"ƒüï¹# »dN«î1ð`³®AÃc§7çe€–_W͘íS,šC– {#ÁX…ý=uxÓqÌù>5†ÑÕ0Ææž“ëËñ½;ÝmÞV^¶ì?k_¦ت÷cA‚q†úSw>2dM·÷à+ÌP¯%úš®,7EþÛò¨§ý»Úiß4pu¤m,… 8."k}Ú»}s±—ç¸Ú;ŽwþÖJÜfÇWZ$1öù,–dúÇù³Êo †=;ÞËÈú‰6VZÍß{‚¼½ÄkÈ6´é»¢k B1qÐÿìÓØ¿/ÆåxŒ‡¼º`Xþ2­ÙÆ´g~óøØÄµ¼wOò'RðöɰÕeü¹|P“áçÞÿ|¼ì¾˜¶_/T ìC>½Ô‚µ·‡Ï'ålà"øêû? ó¯,¿H†¤Ù]B4¤Þcö¾§læö& Ðÿ¨š³â“ó{0|ÙÐ-æ ý?r¯§Nn¯:}½Y‹DÄüÿm (¸¿®_š‡A`½"Íõ„Fã$/"\ï6W½ ?ÄKƒr¤(ß&šÙðe’g­ú|Z˜Mé šœ²éë³*°×õJ;W-´#mÖrFªeÚ'GT."I[|' ò-S1¶”Xج}žI [lXK©¦ÃOÎ:-¶”C=A+W1•ŠL>aµÔ;dDé¨ÀÜ×ñõ‰ÏÝ'ÜÜlÙ\£çLã:äJbîpÀ¿ê‘Àˆc²9úÒÚ!s:fn:\_HÝüuS®ðÄ–fÒ[°Só¸˜8r¥h]Œ—/éø'ŽŸ ¯³úmaÌOaÊÜS[y ‹ ÕzcKÕÈÀ7NÛÂp24á+ü&6ÔÆŸ)v3Ï÷‹)á åñ‰¸Ââ±ÔÅÚƒ·m°+÷++¢'‚ݹò|òœÀÑ€!ÎwGênjݠêã³¢gm ãÙØÍvú+Tïç2iØdo;¡žRßzT×Ùô…±w~"I±³JBï?î«k;ae‡~ z7`cªmlÓ» ¡B1SüÿÕŒmZNîZçé9Ê—³Ç¨Ù 7^°­]»Ã¶ÏÅ­à­]·§‘¡í‡ëÎÑrë™ê¡8Žl=Ç5°²ÑT×ö&7°¦"uv«IPÉY§ÅRÃR‹/ýx&Ï °±Â¨È–»M¤¡µ·uìJþT_ühš°Br0ʇ}µü¾Zü¾W`Éq]-5ŠêŒe^nžÚÁUc’Z8æT1!¬ƒß·¥—«¸1oKQQpg~=­ÉÖE~ÝçVk2˜”·ö%H_OÒ’™PTk¾G¯ó²IS¸íÍÈ0…­Yûo-¤‡I)âo\üÒïΪš‘Ì\Ý™ûöörÁU&ÐðºMÕͪ¢ûb‚˜ÚÔ€QO3ãÐ(`ÀkÄŠ©dÄ}£¦—¼Ú9•îF4 ´xëÁín`z*­,Ê9iî'ã Íç{”Ì)nùhõÞnÓâÞí0Ó„«ãI“—;ÞÙ%›;ì-…O¼ÿÛ®5U3ñ!Ðôfß¿ŽWÅ$Ë=+¬˜ß–[ãu¶Ÿ¯›ôÁt,4ƃv]ˆ"žŒPOË~Ÿ.iº -Ü|~ é$Œá)“ì8¢@Tã*"DlcMÊ—Æš•:_=ðØ„Ä!çüz¯Î°ñåöflÉ.¶ n踗_ñ&¬_•®el¶öÇ2ŽàysŠ¿Wrˆ Y?.ÚÿXƦ— 2^"B‹îÆ&)ò±>áÍôFžG“‹:ŸWì ½âfðÉw¨¦4íMFk·v+¦2æ*ãoœR„M†,]ø@kîgµµ¢Ï,‰´Š»[i;Ž˜‚þÃq¿âƒIæšRç"ø½øœ ”ž´×åù´ÖN»éšü·­gÐX»‘#µ(W¿DúîÖIðzHÙ4 ö!B‘o¶cœIt«¤\˜.™Ä‡h6¥öoÒãàe–ž‚<ÅS¾YÀÆMó\»r ³Øyö“üâP¯`AÚ*QúÁ—¥ªÕðO½o*L¾ì›0íF¼,ñ2¸|ûê…1ì@˜56î;¥–lxiW »ÒVꬽ³R…AõHûŸŸr1?~úÂ6ZÁQbõ—õ®acR=ê|J7È–aG'¿ƒ÷^‰Ìq H/-Ì1;[¯ Ÿ–páݧý`F:Mz;úEמvß…§•"aØÐG.ztÍÏm¶!H£ôÉL¢Þc’:üœvcW©xsïyy _IÌçÓã㕾ŸÑ}§˜[ +ñ_an·ÅC„ï¸bõæƒfn6\²%˜N>=û@ñðU¶%1ÇG‚ØN¹Uºzb¢ý‹Ì’ù\-÷žÕe#y7Tj5ðÅY«ÁE»ÄùýO›†I¨)ºJÙ ]ŠgM k@€ne2Y~ce~iE©Ä!‘´ò¦T9ˆ¬É‹=âÞ å~³ÉSÂ4Ø?ÜÊrõmqÉñÖÇ6G"ô…Ïõy .ÅSš? SÎã7‰ª72`%Éa¹¡L¶¨Û…ûi2¢s£¢¶äë×á –lbŽvdЍ§ñ>)æM—ú†ÌÐ +H,E·–ttÂm!L.ôò š _h—rûw>I—m°§IïY…Ie]4=7»ã‰§8Ï%.Ú³v éaÔù§X5ýwcÅb7J±뉰7 ÉìÑ|,ñ²³Ç"6Ø ú´a#Ž[j¢»×8³å^xnòš.׿ü|Kû {˜]4ýº²4º±Ú’÷“dU5¯e$&xkû5/Ó¥ ?õ¬ìteò“ÙÍÎ ^Û»;Ò ,w–R¢– ùr9T5ÑlûE!,»ÄÛ²^Qíº`HA2-²Ž´b|ñkchE›†²3j¡ÆàËEkµÎÛJJù.žÈ„Îc~7-_öÜúM@E&PÙ¸ÉnÄãr« (%QŸÐ0KsH8cê–׺AyHŠ®â–¥¿‡5›È7ªmÑ~ˆBŸé.–L„ëG¢ÔÔ|2t2àd©¶-ÇÂ_IùîçnÐ-GžšÂ-!òXl6…º¸Žà:MG¨§„ïó:ùú¨`ïµ›v…#ܲôÔFØYš³­]»Ìî¿ëójõ[ÉböëKá¯}=ƒö»€ÚÈF^ÿÕÎóöü(¤Q.¦ËçŠ8 0oXŸÀämº°†&™*¨§Lä;½èqûHPGQ;l̆ÝÍœÛ䂞½3?—R*s¬ôÄÁ—9Ò k¤;KˆIŸU0éG¦™Gùa.‹®rž6#)ÛÚÐÁ†mO²ºP¤uÉm­ñµI@1…ÃQ/OcÞ`7ÝHê‹J6ë ¶}é&ö÷«Ì1n OÜâ¤j§_«‚z"ÕBI«Î+¶ç˜_…FœÞgÂt_ðÿÃ=ÉÑ _“¢•Ûz¦™­3ͤI²µ€{EýΚ©bEFÏäx±¦iÜL×?ÎÑq9,¸è…ƒU(æýçeÖ¤ ŒÄñ÷­Úï0x¡"ˆŠÞŽ޷㨣8€Uû´Ÿ}t<¬?—f!K7‰öô|„Y6#lâ´ Ô…Ñ–ÎþÅkðHËk¹ºe¦[:ûËd×þ÷iø0€Éä.dˆ¸÷[H´V[\ÊË1ÏTN¤Á‘lítw‹u^eá‹@n‰%xF•yŽ )pIßö¥¢8þŸƒ®×CñÍ/¹zYžƒÒ±éß“"|^·Õt‰Ëþz˜ž« c!ęԶâ¤÷ݹÔÂG —Á3ºSî.Ñ×®H£—Åïƒá¡Ì´&.é@œ¯ÛÄQib|l€‡ž¥MÐCV%´è•<ï3Ð×Gñ‡¸]<ú·<ÏeFÂÚ K½©¹-̤©}Foûî‡p»ß`X’@58PÏ›¾-m¾ó+\P~ *§q_°z>ºìR®x†k BÚÃ<¼A€ˆ ’EÅåÙµ…E:..Úb<½Nù y|žÐt/òÊz­¸F.\J ~NæÕ&æµ\7ǧtm›ÔL Ô‘]ˆ;æ†4ó#ðRŒ„òE>ìîºøt’Vêò'êu@ÍZ˜´bŒgEp×f­Dn`g„þ •N¹Çtº;Î[]–©¦‰Äa”Ù&„ñåô¥Baûå¥âÉ)&V±$¸}XÜ¥¶aõY¬Öñ<ÉŽ8ô$7ªö&Çà[jµ¿—&Ü忳`ì4ýáç*òQÒõ“¹ÕŽÆ‡07ç4û¹•¶X4飡¯µÞi í2.ðA´L}{ÜØ,Q›Ö×%ÒDM3?×KM_­W×oV%§âq%hËóa}4!ÔúJQS~½ÙÛë™Æþƒ€†ÇO©‚k…‰ `íÕÚZËÆg ,×]$Uƒ _1£ðW$Æ6SÑ›¡yûeÒÑ\ÛäÁû¡¸—ÝŸ™9èÇûÙ›5‚e>éo$•3N °AA°ìžEµA }o-ȇ윒œïÇH"Ó÷[è8R4cFĨ‚ {ЂͲQž‰2 ~ŸIšgw+)O×]ÏÎSüéîü¬Úä8Ð0b¢Zpõ™ ¦…Ôúä(FmQA.q¼b¢žÿCTs“ö¦kö†ºZH¨Úœ¬FþOqó¤/³àB§Z)_NYFfÕ°¤ b]Q H ®ß–2\fù*®€?°B;92Cª G+IÏû¨Š¡ëi£ (!…$b­‹ûÆ F2»‘‰¶÷‘+e¡ë÷£ÒǤÁ‚•™³iEÄwW& ¦c~Ó;ð·ø¦÷…gêHWGM{j11‰§”Iø…ú§FŸxj lG¥·å¢×žÊ"~Ý ¼º=µAb®H*0vr 4TŨñoÿí‹öÔX¿GJd°úB… ì’V´dãš•”Úªà@¥ÝÞF‹ãœ¨3²èt ÆN®«ˆçQeîÙºv´›ÓWjE_N8š6VDäB´¨æêÚ¾>Ž”jxwmxËT  Æ´·€š°’#5þSw™—œö¾QçúÄçí:P¥%}Dé¨-ÕàÆÑêsË1mØ×쩬Ëo  ŸnGÕÏ3Êðç†c;*)%Eri·§ÕÕÓöÔXLJcùÓV«K2ÒÞ=ÑmÝ©0ÙÜÁÅйæHE×›|ÝA+BèÆ©áÔàÛ 7%xor‰î¡Ò­Ê¾{¡Š£½ô¤u'+C1~§>¥NÃ%ÿ‰½»IÛR«A}ëHÍï§Î: À€n¥Ö†­\W•WëiKmMsiGjm$—ø;FÚ¸@vÑcO­¸Ï­ÍbÅØR»Js¤L§Hœä–Éî)šw æ݉:ãl©jn¼S¡ožÁÓ)gªÔQŒ×Û{j­¾Ùõ6hG…¾›á¦£ÜCóõœ¨9mþ²öÔz> 9£`QæU®¸Ãi*##j¬\¨s—Y|¾<9ý¬cнPÆ`êît`r>L8£¿RgÁOÏ•ºO_*¬Öâ5‚fýò35¬›’Rq+Ò^sE%ŒŒÜ´¨yã-/Ž´ä…šó‹¡—F8©Ž^¨c3UºSr ƒ¥åL ‚‰÷¼Ø¡ðDÅ·TéüJÕ·¹À•šj†ŸµÊÞëc-*ÀDsJåI®{hÄä’oª–ô¹zfSÔÈ[®Ö¹Å±ƒy£ì‹õ¯Hë:Ï ýNeT²~ž#,©Œ0ÓÁŠf©¹ÑpÛY$ت#^Þ#ÀïA)/ŽtBòPÐú<Àú}ú«mvÖ£ž¨å¸eµ Ù4*;HØOW|H¾®ŠM«™.+%·ñb½w6er\Á°øÙ~z™žÖòÙ3ê`-5R‰.nkej `þÊk$ôžµHÏÍ¡ø»•öuæC1ë`eýÝ«æ-«Ý¡Uø êÑ·¼Ãt94-Ð푽µÊý‡õ*íJ]‡¢¿¥ŒŠŠ x™Š 2(J¯ÂåÉU&ùÿ/IÓ6 I[À/](åÌgï}jŸù˜c¾uŠvÓ|®Õÿç7ýÏ/m•ʾýZÌ’Óñ ÿ[ã¹ Üu‡IÁÏŸãöo~;XÜ[àÈùvØÏäÊqMX´qÿ¦öhù?WŸ'ÑÏË÷ÛðCçí^–nŠ‚¢-—ùAG»èÈ2|á`c»ó™Òe«Sú‚ßnàÑòÏàk%=G+Üoׯ9Hkñð¹ô*x!‹_<ćη…yì|n…sX…Ózè!™Zm—íãíØ9Ë-@ž¤R¼y––”J÷ARî_Àí9x»“äÇØ~jõ,%› ‘úÓcóg…ül ¹½@שë“ï(’êùþÝCjßÏm¯ÁÔùQ H¿@ÜC)D—L4ßNâc(4#Y¹Ô 4¾ÌchêN)-€c¯ÙØ“Øk ö’zUk¥£ãÕ”êÈ1ÍßÚÙ@àÕxqñªK‡b¯º¾4H- QéžÔƒ‹£õ“åUÿGz=—žI¯ÙÛYáÎE—ðú‰@æ8NœýëݼNàÌÍù^³†!ö¨}¨ôzBÇd‘Ái!ð .NpZŒD^‡ŒWà†*²šzE:E芔ž¨ÂŠyF Ó½Œ0­M+@€ ÿènÆÍúÍý=à¿Ú Žý˜ ´ò’÷–ëÁ4ìà†5ÐøG¯"³Äà犜(ÍV7æ€Oe( /Qm¬âÚ»¯·º Ì× ~ÕKX"ÙXóNv•Uºäbµ#+£eİ[¡æf…¹üvÇbð_JMÆ•0|möµ†=XK "z¬¤ã¥Ï|K3mؘ(ªaâ`²lŸÀŠê/·# ô Ä4;g'hµq£œêÁ©·ì*‰ÂH«5$J¯÷ÚàÏHØä›uÜ;¬•õ ?¦ÔÁœ‚fI ºÁV¨×,üÕÚ»ðèÑ53ŒÿU¹ÓÍ+'C”Íf’ø1ìWœ6òz¨ï﮽z¨\Ï€œ$:™¬$© ÏâîõòÑC8ÐfõÛïíê%žýžyØï±çÕK}.úîóå —9Ðâù𥇡hÝGõÝKobÚYjïê[õ­x¥Ç½ñ¬ƒB†òÍ¢Põ©<'=ØùCóoüw䥚®>¯tۆƯ¡ÞŒ`±Æ_ÏêSëGŠB½¨| ÌF…S>°²rµI¯'‰ãÜõŒ “ÓBgÍ+ÉÁÞÐùQÉ=]“CµŽ˜»$ŠD=“Öxüää‹ ¼ø3o(sš5¸)!7›-£RªPãnï#5îê¸}¡…<Ñ*ÓÍÓbÿÚ¼çä¿"â†=<w'\¬•…Ö„¦’fp”™± 8 \ùÈš»}ÔE"Öì· UªŠùÀýJógc¤œ–Ò“Æt>0$¶£Qî€ ×iဤ&³Dńܱ储2‹LéïiƒŸ¦R’9ê,ÁiËôdδü¼·t%="iM‡µ© ˜Š¯&ù¦Ó›!OÜm›<=YûUŽä tU¯‘ä^/˜aÊ=&4ÓÓ€0,'"¡Ö£bš]ØóÂÙ_o2Ñ­·¡6ë¨ûE@µÑKëùïá©NÌ^û[{0¬òL¡ÞlkÍë,Ù4å@'Ç=û{ÍKðma†Ý}‹F£ÛöE3™Ú·L©o$éë¶W¦êW9;²A'ïOÁD­Ë_†:Ó ¦9ê›/ ê7.i=?ê™çu©éu ÀN=;ãwó§Ærp¯ù¸ Möt-Þþò>ãL¡!Ȧ°BZ€þ[µy2‘àÃÃ#/<ðŒ„§:w*‹œÞ0÷ãH‹q9«Ôd·;‡TsÒäknÃêåÊÏvâFU¾²g$õ-D°(àPcIŸ: }„EÆ´Àv\Ÿ—¿läjdŸÂsk^†P§mYøÊ—z`&È|‡èá}^MÒ¿”aA7æ¶êôÞL~LØCõ=0„Ôõr_v^½‹oèzîQ/zÓó?hÓiö,¦káíÅõP}šÖ8i0›ŽˆÀ šœ¹×X ¿|éfÈ=FÜ›Í×÷Z(w!Äî5 èÑu·*­ïwJNvO Õ|܆‘óY©±ÁÔü¼"f^œ™7Qà«¡ŽWÓ‡=Sj¬i–Õxâ=ôfKO^«NYsÈ+ É7°6ƒ¥wmPH@Tç½|ðèc  PÈ-„2[+Þý¨´Ìn²2šGEóTÚ}Èu‚[•·-2"šÙ„7U² |ó&âEÌžìdl§’Ar¿±7M–·wT´\G¢ Q—ë¸{aM˜’” îĤ͛,î 04ó™…A# $?Ì…:ÞŠ—€Gén’_LFoNë¡O+¯þ-oÝ·kèM‘ Y„~ÇBIä‹/Ò´–ò¹7ðÁÈŽ5õº ªz±Þ‡½¬Împ éfCô±éŽ3¬¡W‘²‚ÏMG§íjÈ7ž\ˆ¬V;ÓjVéâ¢aè*è·ßìÙ ÿÇÃrƒ”ªb>𦿙etÀZ£.³éûž“ÿú·ðÉAXÍ;ŸÕ„ëIhS7t‹sЭçÝà¤¹Ë ¸#{£,œäÝVÓ4ϺÖhHòƒn«iæT\·}Q ç Û~(Ðó‹nö¤¹ÚÝz浆nϼhtK\gl+hÒ~z)l¯þEG!Ä´ýÕ?8Á¸ŒF…¾ùXŸ˜Br¤0¶ö k4 ŒC¿@k<õ¿ ­=l¯þyVÌØŸÜÉgãÓ ?º“#l†ëÌöü($ÇL4ßV`Ñh~ÿîù9Y~ääßwÈÑFr»[´ÒK+öãÑ@`/“լ&ì »™T È]ÊÉZS¸ä–꤭ùÚL"˜:D¦ˆû†o͇¨Eû»w´àjdêkãMSâ£p°„JÿAúäXø‹‰ÜVäfs2\E(sÆphÊ`hJx{z2:;]hJ)É i× z7Þ%0à×}TS¸dXuâ‘)õ§îÇS±îô•ú‹Koœ‘Á b‹ÿUÖ~¦®O¾£j*ß_/—ç’| ]½ŸÛ‘á’ãŒQ º:i§T²Òƒeò^…ºŠ†fsbÈ A- <4¾R«Ã‰< u§ÎÐ^³±'äÕP–cÓk ö’zUk¥£–ÀëQ0ô­ ¯¨7¦cã…—.öªK‡b¯º¾4l¯åõ¤\­Ÿê4ëÿè"?“^³·!ÂëIç¢Kx}‹D‚Ž×ÄÙ¿Þ ãÕ<–”¡æf"E^ÂÚ…@W…·#sGí™MŠq¾à3’2ùAL 1A7ža-…‚­ewåÜ€r?Vì·0ÇþÏzµ¿¥­Ñ¿EÀÖJ¯Ð!H¤E|øÄöÊU‘Çÿw7ÝMöà—|ýZ:3{fæÌ9Dšš¹ï; ðñ:֬š`obkcU/Vû<`”¥'¶† á„.¿;JÇŽ?¼û„)ãÏÁ·¬¸&šúT}ËmøBâø|Ñ?‡;ya^º7ÊÀ£t§PhiYŇÁ§@CלÜ{˜v lKj%Úqr ‚D>sÚÏk.G…´)âY9Ý=k<ª%úðÛ,=®6ÛË ¢>^Ù•ü8R@Á÷&¶C×û“FŠñQFq‡-Òsô¯²wY¶†%}èH»oî _–3W²Qšk£x­9‚0\êØÐÇë_¥.„‚“Ö¸;énÍEß&0¶V––mßžI3ttâ•økœ®Åk ‡o¬îQBËi1ºÚÎÖÓ¦-müxs˜á3ô¸fCžÙÅ׬,faÐ<¢gâõ$_ú½8]] ÿ&«9ôñ@›”34o–½FfQB¬ÿ@MÏàȱ‰"Ô¹©Æ˜}]rù× ÒõZ{«É`ÒîWb!îpðð{ ÂÒ)]gŸ­ Q§‹Wï^ª[áàšVõ.§¦ˆÌöÈFPEÿTƒöÉ{ˆÖsv’’áÐÌñ{ø¾Ïê!L£ØF/«ÿk"\Ãvù¾Í|áP4ëFbhb<әﴉ«‰ÚÓb— y·Y´99n£ãœþ9ø«Ú2¬Ó6”¹:†ù¸´¸> ½&X{nŒqJœ,’ƒ?xe¸ W¯êü%§ü‚,5†+æž3tõ€ MÄpZüTOy©ÅÅíæÀR[⃫K„¸ýÓ)N—³[%£ÆÖš5#RRþèÞøˆHg޼w<=Óa­;y¤L 0KËIžV˜gHa²P‡Þ“©0yý¸|ßSFÂK!9H—‰8”áìþën¶: Ô$!EôñY@Õ*­º·aÛIO(Kß TÅéøé:4!ï©<X5ùÞ“YÖ‹þ9T"YMå˜gMUȯÐ5!êT/ëhÚÐÞTr‚0êFñ}Ç(§NæÛGMÚñœ;i†M/eðzjŠÓ~^ã1têä3–Ó#ÉFÑU¼uiù^ެvð Ö¤ao·aëÛ?®^½èùr0êdáãF˜QFq‡-N%Ý5úWÙ»,[óšyÇ@ã?K;踨°7¢ Ú‡ ~ÜV_Œ„Ãj<íú¬r°Á‹7)gBèøÊôE Þ‘¦…ô÷uHH#N«^ì‰3¨ é¹M é2† þDÔ¯ q#ùÎÁÛ<6¼<¶¸¡ÞÇ›eÎírê›}NiþÄ‹wšQRþ½™Ûá3¸Áƒ®×6¢N鋞´_QP˜F´ÄvÄÎn°Ás¦ Ý=&6ðò±”( P©qwÒUhÎ&{oõþ“R'uZ×6Áߥ߸¯iŽŸ×/«ÿÆ]@q7)·GëPÆÉj}¼W[{k6`¨åê4ÁËå(ŒVÜÁ¤5n9iÃKô€ùÖ@”›Ù(¢eŒr m½Š(ÊÓ"%b ýùönKV¶˜ìšÜP§QÑhZ³.ßC·ýìpS> ¦áZ1-¶ôc…r' Ô«Blä1ã¢yÅB“Ý›}·É2e‘9@?©tR¯AškÈ f¨b±[sÓìÝ_Î$¤Ò‰äõ$vß8øÑ_^DC¯•T'‰áÁ‰É‰ÖßÛ \c}_6 RÒöòœÝŠG@1Ћþ9ŒUòž¬@R‘¯TŽ¿ŒøzŽºu?Я‹`Œrrv»Žìc¶W ºÿ½8]]ÃÞxwWEég²Œ}¼aíchQoäûš‘߯·Á4hì͇_«í£ùpÞ 9§q÷Ñ|pÛKu€ùûè›3GËH ¨ME÷1¶ÅEbï#ó¬Á@Ûï#ŒÂ9Ž¡c 7Z3ON5±ÚìPž÷ô¢¹úÚŸøÂlñY¿o’d$¤2ût’È〴¸¡!»…‹jm‰áÃ'?\‹K鑸Ñäâ'°QBýƒ¢•Sßìó *hó£mXËe†q¢—cE ÒÄ´‰z# TØÉ»ŠŠnMÈà–Søû‘=õ©÷¨Ú¤œaŸ°(¥ÆÝI—à`¢û¹Ø‘Ó^~ ÌÕ†´ÞÇj:ÙÇjZÒ Ö>†–Ñ%›áP´¤4Àg>æšà]¿Ãn•ß‘²™,Ëõ›«žìŽânÁ6*ÒÐBP¾4çV”Ã'÷è@Ÿ »šÄcÒ(œ‹Ê²’øÍ8?fOµ¯ ó…åQçøåþå¸u×¾¹ü^X5ÎAsñûôéôª53šB÷¶•œv/[õìåÕéÇ(ûüÉꃟêÍöð¡ý\Òk‰–{œ:£¤Níÿ) ×8üJÂ\~ýYøZÀ+æi‘OêfO_þ.“7NŸ@º–,ë x÷ ”úµS«6ï8-(ý®Ü,¢ßZ€÷Óâè úC!d¶ú±2ñ1¯v*X¢¢I#—XgÜØ&¶]QÂò¯!×sEÄ-€ö(¹õgÀ²­ð ÛYµî²À霔Ù^‰¡„ÐgàJóaÖf0+,‘ƒšðYS+ ÔÔ\kJRd´á@ó £z¿,G<>ûÈ{N[šË.löÛ,¾ G.0h=6¢kO¸V¶7¡a.5îNº¡P˜¡åÑ\ôá0NXYZ8´ÃÂá=ô81\‹×ØÈ]9ø¹G A.Qg´«€ÎÒ¦-m†¶Ìa†Ó×q»øRMß¹ší×EPQxÍÊbæTò™ßao¦«ëBDEPvÖ›e¯ÓÙ¨b|¶MŽM.ÙºZ@$‰ßϾò%®“%yüÞà߃I»_‰/ «É -ˆIý[܈êaRm´ÉÏ÷fâãY ¸™‚²Võ.G‰ýëÆ¯É4¿,þÍ” ²‡'©P1hq•+(ÿ}_µ‡þÞð²úo[OLãE‹HÅç+ª#ª3N4Gl‹b‚&‹ñ@{’أό(Ƙ ÍÉq/àôÈY^Õ˜|Dé4¸¨é`Å8kÿ§£,߃HÜÒ1Æ)½S×RX܃´ãÊp?’=_ÕÃ{ÎDðxÏZ_×™{Þ®${¦D+5œ„&³¸Òç¼øI¸×XC‡a©-ÅQ¡KÅérv+»7¾ÐakÍŽ `8°Š RRE„ ž¹`=ÅÖ•£g:ª‘ê<½ ËÚÖ#¢IK·Ø&º =.ÿHt%‚96 ˆÊ½° /Ò•¯g ¼AIãàÇÄd´à,ì8cË Br¼žÉZ è8Tš‚äPƒª\¿¹ê©Œ…·ž¨¤jCmZ+”¦ñÚV-KT“€<ï©\–ò5¢kò¨“.K¦ TkÂ.T‘lPMUÖØ#›Ï2壖é­K_ˆ²¤DóaÖf{Ï.´¸–Ô{f4ä=Ù 6qÇiï[¯—ÿg½Z»סèobyÊsJ©×‚"ˆ3¨#.g|€ ÿÿ&ii’6iRàKt¹ê>ï}öIÔt•wq¢¤¡;p;­Z‚sè[g—àPÒŠvŠ"‡@pÎ3ëAÏÙËô<0ËT\n4èQ¸Øì ïmöè!y:­Q<_Ój2ØAè±l•«vʉ£ +1”¸•Ë =¼ìš+÷j$ ôdèQ‚ øa-x'Ö ^¹1ø,¸‡Ç…ç‘ ›× ±€•êôq.ÅL_c¨)8jTvࡱ°iEΠ3ëÔ äÜp€ðny(§ùhž §N-B“ y²)zBÊ8 _Ü <<²Ãb>ÎVÿ4n1çñQ5>%¤K÷.ˆVÒ#.3n6ÿÍ2(›µ!ŽÍeU\0ÙÄ Í¬^4bI³¦¯Ð oö‡ºé4Áì_Ï#É –¶ðT'BûµnÚrÈ9Ô T9Q·;;³Àê¥I°Ï(´b=³ë•€P²ÂÊI¸Í¤Æ(²ÊS@­ ”žk'›^³šÝJ¾NË6SîÊ=éæeæh²ŒÁß²ÂûFr¯%æÑ7Œxßm?^ì<ÆhœÆÇñÂ7[Iu˜sæMQª@õµ´Ýç 0Ç(≋€¶£àZƒ@ù½ÄUÀ(¨6Ôèå´“~õY«ÿ¹ì BZýò ÌdŽcsl˜´ZøVãíÇ<×j¡=h^Ñ÷ i¸ª\þíÞó¬Þ…XµrG„ÕGUU°U`f¹ªi+ÏpÙ—äÊè¹SßXµ^© ÇS¤Õʶº\ßulÕá4Ò°v\ës¬V壺¾e[­Œ'\«À Hò[‰n¡= ¸VÕÎìù‘gu†­ºÛ3A6ÔÅÕˆoÕ¼˜XÜ 'ÞËõ)Ë*¬ 0|(-˜Q×>úÍm÷šäwußw›Eø´rÛ‘‚¬¤{ÎwîâìTrôÂ#›oíõ+Ú§W?ª'KîÎb­?ú¾ZÐvv§½CŒ>¹÷{ê<üt•[דV1Óü×&T‰- àãüº`˱žú[”ä ú´AìæíK/Br´ü:˜¼Q¹/)‚'­Ò¯uÓ¦O\Qª*sNª’1Ùò¹µá§ Ià-S…óä,izÑ“ßtw!&çV©yst¾Ÿ¹±fŸ<·Nw‚wЂwú<À[ãìÖf—Æo³hþZYךe«.™…7HÁåg¨¸UB¹šJš©5R¦-:lÑãÞ™inpåDÝîàà¸d#îV+w>ýÍ}Ãr¦0»Ÿ…q¥U»7Aáñ»Ió—L.¤–.ssÍzº ÌÐíyI”ŠqA„熙˜§Zꆾֶ¾j š¡O¸PÀŒ­’í“Jÿ¡4÷Ipu£–&›‡ÒZ4Æèúcð›SqIa nMãâb8Å@Ô•ùþ`2êÚöÑ)ÍÐþËûöPN3Ûí>Þ-qÃÌ?ϵÀ‚fµø¹ù´öA$Í’n¥¡ÎW øÍ‚¹1%D ª@§>stream H‰ì×ßkÕuÇñ¿¡Z˜‹ò®NÁ¶R¯¤»Ø0/ò"v!XI]¸ãtóÂ9&G½ÐµR )ÇŠlŽ~›t,ÇØ3ÒdÆædº¶:›½êȨ¨5ç9ß÷çóù>dóbç}¾¼ßï×yß½ ¸ç‹o†zz§þµ.(¾žÌHåKmêðš†t¦/WÄ¿ÜqêbyuJ¹¾±s({£ˆ0G. HÚÕÚØêmmoípër\Äì/‚ÜGÀ˜})‚Ü¿55³#ufEÅ®²D“~Я¥x zä³°®õb]/‚Ù_¹P1ûLĹŸ_8<œ¸Ÿ›/éÛ mfígµ´vµ6¶u9Ncö—‚ÜGx˜}„Ä*÷{2#Uuízßš†t¦/Ùû¥@. ÚÆÚÉjfígmiër<Àì/¹0ûƒyîççæÛŽ[µ¦E5lÞv2wõfô5EA.Àw?þ4©=¬6ÖNÖfÖ~¶®ÈÌþ}!÷ f¾s*÷'&§·'»ËM++›“­½·ïÌ,¹iëj÷jkkk'[WäfÈ}€Ù‡¿œÍýËC×k·Õd­^·ïx×%ër€ûC.ÀSuhëª{µµ‡­Ëñ³¿lä>¼ÆìÃSîç~×Ù+‰ ûUáúM‡û®Y—,¹ïhÇjÓªoµuµ{­Ëñ³ÿ€È}xŠÙ‡w<Êý_f~Û›þöñª=ªöµ·?ûyʺ"àÿ‘ ðˆöêÖw>UÇjÓjßjëZWä1fÿÁ‘ûð³xšû*[¡P(;ÙÚû]ÿ¨uEÀbÈx/ÞEÇìË_sߣ¯+ˆ-f^Ð ¥KÊëÜ︶~ÓaÕ¯WÝ«>~Ĺ÷u½RQ{@ª½ªíj]N ˜ýâZÈýĆýêXër€ÿÄìÃqº›t=Ψr?ýÁ÷U6ë³”%šÞlþlö×¼uEÀ?‘ pÙàðXí–£jÑÕëöïºd]NP˜ýRP—ªWõ`Õ·—‡®[—ü fÎÒ­ôÖîÏu7©EuCìÜ¡kH7Qá8Ò•“=™Ÿ›o9øõŠŠ]úÔ>›ÜÝö•þǺ(ĹGdGÇ ¡P^:râ»±Ô˜ýh¨“ÕÏêj=íúÆNõ¹uEˆ;f.ÐnÔ¤kHݨËH÷QÜrÿÖÔÌ+o|üð3;õž¨IþòëŠ_äÌi%îHQ”%šôƒ~µ®(˜ý(š\®>§Éa‹Ù‡9Ý>º€Ô‡zé&ŠóJ«ªk/<Šš†tvtܺ"Ĺ[§.>ùü^5a}cçPö†u91ÂìGO®>×c/¯N©ó­ËALkö`ò§/u endstream endobj 12 0 obj <>stream H‰¬W×Vòܽ?cœ‡BH PA!H/¡Òl”OExÿïêM4…¹Öš«Í¥2‰Â2.´&¶2í䘊6.™ y³¡„Å.öÿÿXžTnÔï'—ËÄ»JèÏ–¡wTf—‘©|$œg_ƒÝ¬ œ­%æ#= ñ„ÀVáoÃ"ßÅe^n3èG™dù½ÂŸå2ü*¿¹Kñf3™"øŽn¬!ÚÀ†a˜âDÅ ™ñ†¡»êæÄ=§\Ô¨¹o%†#3fnü87Æ%³ ½ÞS™6A 3ëàc>7Ü©Ÿ@x`Zàsk9Ç,æ?O¤ 4ØqÆù‚†ÝqÔkº Zlõ¾Ó¢Á°4oYbçòrnË_ZmÖím¯ÍVÆû0B9(è–s…Ê”G›³q ƒ·ÑÌœÏÈÉšÓè€sSß®¬åæ0¤™ì1$ètjëîÓó>WG•æä–êÑA\ UZªøgy…¦›ºUà"V´eÎ4¬É;ÚÏò7vF¬ñµZá ¡¢ïœ!Fº”åg}âJš’Ë"­\æ‡Õ§ÀqŸ ¯óãyòÚû Un3 ¸Eü Uì|:îu£qoâu°à¼ú¤ææˆ[oÄvèi°ó ˜nÅþˆª·TèÁÉ'`ælªçûdôÍ-1þäBU«ç<ÄãtÇ4²®·ÁcÞ(àG OnöæjÕ{ɹZ/7ÎÄÕ­]m®4ëž·£AcSXgjÊ,“US˜:s:õt‡ÖI ¹“¶ª¡±ª‡;úÅ¡­Á)}£±Æw^pBê®q$¸I¶%TH\œ©íÑÛSq•ëA×e ²¾EZÀ!egæË¶ÖÊŽNø7/—¶[ÕØ7Î7òÀ+1htn¬ëÝ…£yg1Ò  om z„V5ŸÝÛÕ<(Ì•mßôA›ºUÍ{®‹€Š =.p|pt£áåù <Ê¢WWÝJšsBƒ½–ÝFò¦ï뢇àÔ‚v®x¡—&êÉ*ÝÔÑUÔ %ž ç>KÇCBfŽ6±Ð ÄÛÁuÅÌÓö÷ÜØ§•Er@nàö<®ˆ!A|î!Y;¿5©®†«þˆ¦ý„UçÁ³ÐꇛÏvŒ*·W?l@S¾@iElÙt:ßøS4º¨—± ã¥6Tq{\Ê@4ö·•–WJ {\mœ®´aî@ýõÝ1£Щ5è̓>„%ð ±tÚ¿¾X(ó×ÍzÎ=‰æ*B•aÓý¶ïBøìÔâöx–ƒPèDð'Ò9ë6ØŒÁÁ2£Üؼ÷Èf@ɰ:Ž) 2Œ¾Ê$+ø§n¦'Cñ¨¶œaF‘¬4ÇÞ——ö¹t~ïsáÛ’µ1:,/ šxbŒ˜§€B#øÑ¬è‚ÖÆþ` ô¼ê{wiçÒ6“™s€äåà,wŒ°½ÛáïãÒ¾¾Ö~ díÇʤ&h(­;½†h8G’¹{ýH5x=ûYv¾ë1êÒu‘ùÚèÔû‘rèÇþùýhkFýà’ý}?ŸZ;§š‡Ñœßŧ¾‡²Í4×~,>|¿]¦}ÔŒ¿•êp­;õ£ EQ6§ÎíG‡#.úƒ~„(Z?žXk§ÜûQG9TýŽÃ¢å£ç£)PЏÖêFH¡³'ñ˜7õx|b£ÁféÃ#ìVdبåßÏ´§­Wñ£qê€ö[ñIÓÑbøu]üÕÑžp"\Ÿi^§ÖÔ× ÏŸ}ÀŒÐ Q€b:dY‡Í¹@žÏWè´vˆ³–³XSi­–ôU3‹‘NIƒ¹Âç’5Ó 6eŸÎI7hxa<õc*DÛš™I…N$Ãc?~tœifu`¬5ë>7± âzq•™i.º¸u#†ÉŸ Ó‚5CÐ57©PÜKÉÀ‹ŠÖ&7Ç<¶§›²’öø«³'Hh¹½òŠæ2ÇÚ¼îZÀ\§ã Eײ€¤VÅuPŒ£ãŠ忤hTó›r®¥b EÚË’žÉÜ'*Î+Á<<° Â\&«ÇuÚxOXÑBîhB¨X?Nš²á,dˆFAãêâ)¡åQÙÌä˜Ð¿oœÚ£'ç2Ì&ƒ|GKښˮàsñûÒ1Ê寛[ËÂqW¨ÊƲ.Äxô@»‰ñ#N+kBµ`Ò"* †²!bxrÉ@š#àÙÆ}Þ+¸‡”nÌÀ,SÛgZœî@´ŽÎHÐ2B+Sn”1­‘CË’FŒxe¢Ôz`Mw.Xè‘Üc†hDcb×¾eIâå[,ü.Ý1‘@*4·‰ J^T™õ~JTæWɰðˆ?ø°êŽÄnKÆ7z¹HáÝVZ`ù݉ùb¹èŠÛñåòU|Ï.'ÍE}ÞM&›O•m¿ËmêoÝÅÝÇW¯Ì4öýq™ ÇyŠü%>[«6uý¶¡²;)Ð ’Ã1ßz¾f,¾¸&Ä}HZ’j„2[|%²¯ï‚$ ©6~.70>×ú¢®ÿųl‰2lé~PbËþu“-·š Iú"Ò~‘!d‚nÎ`袃ºÎl‹TúªùÓ‚IR|+-ö/Ç’ü^ó³Lkî8œÔÜŒçyIÊÈ»ÂCéV,¥oÓÿx"ã+ O¢ŒœXDnÛ±ñ…Èfˆùï.zøVÊ~_4±A³NáÚcÝO¢x8¶ñ«ë¯\ Ý-׈I·šŽ'ƒ `°¶BAªžŠ‘K1ø jƒ*3²¯T`ÒÇ3h}4:`Õ´$«Ë›Ûhø2—Ò @᳜œ± -€È.‰TpÍÇ‹ƒÜ¶ŸevᕌϘ\‘¯dÁ³F-ûÖ»oÞV.&M*™H ¥$ÞyÍ?×ü+ŸQE¥´Ã· Ø„€OþU {`¦ªT«\ñ%u“ÿ˜2LÐwñßr›d™á2Â+¯4ËL·¸÷qþY^DàÏÁ M¯—1¡ç‹Â[B›óà?xTb™DœD·€´ìõM"E¡' ±;[p›(·ÏòœFÿÅð››IiL>ÖÙ·—ì{öZÄ$ày]qUñ“f¿'ú‹°ùE>0fôw´ù]{Õ_DÍ/ÞÓoú Öô"‚WÚ‹&‰båÊ¢oŠž)Û³I™¾/¿DÿéßGÌ/6)>cÔ ‘h‚ÛvpÅU.Äà&C±=Ë´³áÛÕZ”oëƒÁiíâ& >çPáнBà ø¤ÅÀÔÒ`ÁlqpÛãÐ/Àt]íÀícŒit—1ðÛ{ŠÊøoüð-,DW,3#ÀŒnx¢™™\Q™‹‡H™ÞSïßD¯tSŒêÓPTyxg^ðÚ–×Z[L¿ó‘öZË ÉÚÕ]òª\ÊóûBõ5i‹„6äJE¾qçŒðäר¯Ö÷h×CŸ3»¤Ú³ªMðz jyÖcÐQü7d¹™X%Qnfœ"Õ™Ù ŸIVù5øoCÿžÚöšn¯ô¥×´œùD˜{dÄÈ›fn™>ô[à W7ð¿¼ðE £·›|noc¯ÝVþc½J’èoá I9:0Ü !\"(‡È!è¨(bàÿouwN†qÝq¿ ¡CuÕ«WU¯Bü.ò‰Ë8c÷ 1$^bh°yöŽ£¡œ¯yZçñÒO H”‡ ){L2Ù.û[cA u½˜a5Ýd «±ðð#Oï‚…VBzr’€r/aeãd¤™$“¾®‹x#À"¿ÃàN1¦–  ɯú<™nÉK8Æþ å %0q4+–ÍÛ¹,çI ,´¸Õ„8­ÝDW|’¶pŸY»] 5sÓ¬Ï_«+¬Y6µMø½qÜl-@Z8î ¢¤©%p’Ï<%D3\7À~ÝÕÅ#áÀˆ6Ý=?êJ3S»€´¼•‡ŠeB ‹*¡¤å®JÆÕŸÅƒ±™}ÆSѪˆ›ÔrR/’Ï¡¹1=Cµq®}JbÏ}2oÞ®øçó\Ü”:(€ì "&½møæù.\¯†ág—{JhëÞ,mp~³qd#QVèz†§r±¹‘ê©ò]8\®˜d¶“kJ[Þ¯ú`˜ÂànÄ<ò:œ–Žl ‡ýªik¡Ò3ëÓšøgvÝ`ÒwÜ:U¦0Q ËéžTn“7"ýnjÍpû½³öÏö2Dâ4Â"zº¥Ò𲉛bQ&87…‡ó3\ža|6 Àg·N"Vxí–_#ÂÈ›"ÕMe[™LÁÏ” ŠÉw_n!OÍ…RÖ„q„7Ä[æm=¿¨ ï6h5®ãj§æT ¿ ˆlÂj ×\5×£Ox/ÂfÂÆA·®\î<…ÃäÜa!áaò©b-ààW|8ÔÇ«{ðÈCæ“àð|ÔB¥¾ÛÚ]ÀÆ¡Â꟎¸$·Ú’¦%ˆÃ)è–DnU3ç¯6è `Ð|8|AÉã÷0´• Âgm4ñ@`—ÑË»Sd ªsα>,cÅÐü¡þjà¾6àPàKüOHPö“Êà„o8×|éGò§ˆÄ€Ú¿"}× \7±!ÿ„ZØ€â€kþɆÀÕù×EŽ{Úu.ðÿ“þÍFþâÄ´pÄ­k#ùÓ@ÄS)%ƒ U»`YÛÆ¢r´ñmj¥®qmÈ?¬Aù+š´ |£F䨸ñŠÌ ›zà=‰÷Þ‹¾«…¾È‹7|Õ#Š= mº“!ù¸¤ã ÿÓ$ñ÷˜iÒ¿&Ù5 ŸJ-Ïo¢œbë7š‡iúaÉ ãÚ÷ ™ö•Õ-Òè²tâ¿(gÞ|Uûè§u+ 0M Þ Øœ]]ÃêªYdç’WñIýhA!(Œe£O‹b¬¬urOy½Â‡âpq[õšh÷4«Í϶Xª§ÃBUëäçž"?awÿ]}Ѓ#1öP6hÂåv:ÂŒ‡k¤ßk= {ÀY;9jÇëa‰—»÷e¹mj†ýÝb'¸‹"ÄŤþãfg»³¸¬yŽQ¦¹®âÕ&4ëpëå›ÌÚ²0YN ÙøC#Öäu_dd™%ê'WÑ øå‚Z¹Þ×Òû~tmNÇË—Ú&Éb¦IÃ×^Ï!a¶º ‹´èÛPËÆ$ƒØ•ž…n]~¬‹‚ÒÔÔYÔj¯Ø ¬–×J¸6«¡qÊÓ‰>¿ó«i[Ò"o Ä"8JâBµQ‚}zªÊíá’… gF]rrs-R+2%Ñ(RÄ*&…ÏüÓ{|Ð(©-•Ûñ~¿\ã-t´Z•sæð`>°4š²ÐTA™ÈnÀ/‡p âÆW!ãáu—Ãß\8ƒ«ñ2Û<ŽË~ìZ æõg xŸø9ûkÉ• =÷[E¨¯4¾Ùa(f{›{£s‘¼¯Ö²jö× ”¯WLá]+È7QB^RéÍrÅèãÆ˜ 0ÞpIì‡Aó%tœkÛ!¡nÕ&ü}cÆMÆ4BJèÔ•`p3îÌ“¨a ³l€óWšCh¯ Á­~ó¦®ðµ•î—_+#—é·^~e¥/ÈëÅ,ÔÊð¹3ˆ¦Õ¹Ñ7ƒ¼Ê=SeÔ¢ Æ_Ä09´ŽM¢ùÖ„¨Õ¦w¡vyÛZŸy;:È5G‡:ô¹*îi­{]y¸ ù1Õöœ.irÛÚ'hµà¤Ig[¶„f«¨Ls¸î狈‹¾)¸Ùµ­Õs+ó)x´DÓ}¾MA»Ù9 Í³‰ò¯tÒÎ%)€ˆÁ ¹Ñ4!µ×qy½°…Ꜳüø€€+r ÓíN7!èL)M­×4A]Œ6AŽDà9ÈÕÀýý©È(ÖZ@…–¨ rA=XuµZTiØÀV‰'H@’Öµ[4s—É"kvÓÅw-ýÞ&ʸC‘^uéòëDpSÍÞ*je“þîuP™Â$  …ódÞp…8vp‚AnËzÔ@œÂ^šYøù¤€¸ "»çð7ù"©ÌóüJzŽdtÜln‚Ô¾¼¿¥:mi,IΉG”ñkë5vïMyý²fåÇøNp ’‡Ò²ÎüÙt8«C³{1wÉ#B¸Æ©3Ò¦}hSŸ¬ƒ9Bàoªª2h€ÜF¤ÀË÷cˆP ÃpÐ2ð²EÉ a4/¬‚¨u " {Ž‚HÉíe©„ µÓ;A;á›PMº/PËÕ~.€° àþ ÅØ»ÈÁ5ßY" ! þvº6Â/ë7Ò€e)â|•&¥3xH{ņßÿð5,:©RÂåéÜçhSªÞU UqK†¥Ô¼e©*Ð…Ø¡Á6I³QŒû|±þ¼¬Þm†¯I4k®Ül’t O­ßIüs‘Ì6 qXÄqø`bô¿£¼“hÈ#@¯má1Ÿ u‰Û-1­%éãÔZ“YW£Åâ·éŽüx¯=i…nè<ïø\Uù}îðþƒzlIh³éþ³²r$úžJîì;HF[¿ƒGbUÌnxá~‡£ñ½oÞ‹îYÒð‘ÇÒ³çúžLZ²ÒüÕM6e0 d©¯ñÕ·mתvnog€a @ë74^]×H¥çÒ2‹ÇZZøù'¼u.áÔ *vQx(äj4÷¶‡Ç‰*]½ªXcÀ¸Ž#øº;#Â0u“äV¸_¶Ð{ î6Ô¯i-„mV¨§fôA·Ã\¨ —|ÔG/s!%Æ{öŒu®,°©ÙátXö˜wÁ¦ÒšÜ–!ñ…9ø¾™Ðc®•d%8*'h*j¡»bfð’šøwë´þJ!*àSE`#«4|…&Dbv­k©¿{†Â¿-|®ªR89·Éýbº¹ÞÌgó¥ Òêâ䓜*©js9Yå7Óéíôë.»ï_§Ë-j“S7™R)ÌNÇ«ÉÔæ¥—01Ý“vy½éùߨý>‹¯dŸ"…—âi#>Ì>)í€,p‚¿çDù¬Çp0Ä8áê>cþdƒ'‰óì£7œ·ÚÎr¢Rõ)r¼Ã›ƒiÝhÄú(I'ëûó×û˜8ȯB-¿29 apÌf£ÅG)ïúê¸çV c-)¿ºÜå6÷ ŒÞÛ|<“`Øí.‡ï9¬»äîæ÷è P•6ç½ëåÀüV›ãÅ¡=¼Äå‚Sþ8îêqÂ|¡qâ²þÈyÆRé“ÓÔë"µ¦Âd˜¤™´=88†bnèx}$ýZL'H–Á´D´f"é™V4Ó²ÈS–£ŽFE7¥¥OªÝK†Z²“‘$Ü‘Ì/™´dñªxÓÔ®2áù¨!ˆZžËö^-‰ÇX2˜Å*š!ËKŒ »ï% AE±ù‚¾ ìÑ…¤‡­ø=öôB^´B 1lB})Td½Z®¬4½±€1`Ÿaë&!ÒŠôºY+aÅ7`·7R¦V‘hâD¦ÖÀi~¤Â2ÁÇ6Õ y³”è IÐ p§DnŽÉ¨ú©@)c(ñ™ö„§Ìóyþ:½Ÿ†d’û%¼†h#~™ ž¨‰†ü–>8æÏU6•7ˆï ó*¯S·©eË¢ªhcaÜžcÅ­ßÙ€½äQÅË41ÚÖG ‰ö/$2ô×Ð~G{Dý†ôDa†„Æ b%Ë^:TÒ–üÓ% zD ÙOª€Y °ñXê.±¦Õ° 9¯¸}£8 Å!Ô>Zös)2ʺIÒ }³Öß‚‰;Øà¼"ïxLÙþÎ 0íwÚœ¿±M2•!Ã!°tV’>®&¹®>•f$´³xÍKâ%ÏÛ;‚QϨ‡pIBF~À wWe£ßê šz'×B‚•Æ”–aiqa4 µd…yVzc”•³—±•BêÙIUvM9§mÆP7ñP/ʘŽbÐm=ƒÎ…Å5(}™¸n’lo\&(T`zá‘R]DàÝP8r½ "»ÍÆ·­Ã%?ÅŒK®lqO„½ðž¾ì‡ËxÌ5ƒ*nÇoMµ¤­Ü)PL½*ç2»ÙÄW´ìXÍo³‰‰U(IÞ‹>>Òñ[-öÎO9gÚ‘5Œ] È1i™Ñ¡æÛÕ$ci= ±IkÁêRžkÍáˆ ÔØ»ûbìu6òüzé±H’L„Œ}Ýñ€ðˆéÁ‘ˆxb¯ %9´QpJ‹æ>Z¨Ð¥ý î#}m†cÜÉ–{éäɃŒ@«¶"2O<,¬ØPIîÁº~Û{¸‡½Š§ÚõSÇ×Uäv4§c]™û>stream H‰ì×ÿKUwÇñ¿aÍQAÐ(XôCé&8’¾üàfcá,f¶B´ ZLR“œ-§…VR6²/“Úͱ-[sÉm[éÖÊÒÝ&¢ÃÂ0ÔòªÕžëlƒÁª«÷zßçœûzpè§7çóy÷}=|(2f¡ŽÞŒ¥UÏÌ-äIËÞÓÖÞc=‘+|væ—ç_þw2)¹ð­÷NÜ鲞HË—ß¶sýøk=ˆ$œæ‹¿;K!5kWcó ëq޲o…ÛÎçåsÿIõ8’p”}1AÇ¡éÐw¸~ÓÓKi@Ö¹Kxx´ ¼ñ¹‹y?Sæ•TÖ­'’¢½ ñ×ÙÝ—»±ÞÙ»]àh=Q"Rö qç¹ùÜŽ`å†OI„õD’@”}‰?Ú ‡‹Gß¡õhï?Îí¾»¯åæEñ¼°ð£sÁõD’´$žî ïüz꣥_à»g=QâRöÍqÿI§@"ÈÅÀ`Øz"IʾÄÓ7ßýJ¯q Î’¼ÃÚû‘h½ÚõÒ+;—–¹â@gwŸõDâsÚ 7Ç®Ìɬà¾e­<øóõ?¬ÇItʾKÁY2b=ŽøŸ²/ñA‹¡Ë8¥†vCDZžÈcžh™–¶·÷lJÑ»[Nß±žH|K{Aâ€_¼‹ßÜçüâ­ÿâªõ8òeßUÈéàDHÊmÝÖ㈟)û2Ñh.ë OÓb¸i4ššã-ÖyorCÉçIÿ¼É}u­'Ò^ Õs«?¿ à|ǶWçËf=‘üMÙwÒAFH çBjÈŽõDâOʾL(:‹ó£ÅÐe´÷£×ÙÝ—¹â¯”gNfEëÕ.ë‰Äo´d‚„‡G+k‚ÎRÈÝXÏ×Ìz"ùeßH yáhÈNùþfrd=‘ø²/„ž27³Â©-ôíýØ ¶tÌ^\î¼ÞìUµ=·ú­'ÿÐ^‰8{-5kWkáÕ-Wº¬Ç‘ÿ¡ì»©!;9"MÖ㈯(ûstŠSUè,4ë‰|«²&8e^ ï9)¥¨ ¼1<D²¬ÇŸPö%†è#´º —ŠžB[±žÈÿÃk6Ÿš”\È;Ÿž^Z¸l=‘xžö‚ÄÊí¾»ë‹X “S·nùø,ß+ë‰äI”}O G¤‰L‘,òEʬ'ÏSö%Vh"ô®Ýdõ¦“Úûñêè]SÍËçIËÞÓÖÞc=‘x˜ö‚DoôþƒýG/͘_Æ]Z¾îß(ë‰äé”}!S$‹óâ§Y#qÖ‰‡)û=ÚÄ)#´í}+yfF™s9kÜ鲞H2ø~ÙWäÑz"ñe_Æ CËpêFÎÚ#ÚûîÔÖÞ“–½Ç9¦9Õ¡Ž^ë‰Ä´d¬jë[g-ÚÁµyýO®‡nZ#ã¤ì{é#ƒ"y$•Öãˆg(û2&t š…S1è4ë‰ä)ê—§§—r^“’ Wo:90¶žHÜN{A"×r¥+ci&5kWàì5ëq$*ʾ?DòÈQ’Í~ê´G<@Ù—Ñ#Öl>E§àÂÐ/hÖI¤ÂãåI)EœÝ”y%•5Aë‰ÄÕ´$Ý}¹ë¹*ÓÒ¶í>tïŒõD-eß7È#©$›(9%­Ö‰«)û =‚«B§ Yhï{QÏ­þìUµ"ÏìÅåÁ–ë‰Ä¥´äÉî l¯:?õÑRÈ/ðm±žHbCÙ÷²IB9SÒZº·‰äZO$.¥ìË“ÑèN‰ M$èÞÿS€âî endstream endobj 13 0 obj <>stream H‰ìÁ€ÿ«ë jw—ò endstream endobj 14 0 obj <>stream H‰ìÁ€ÿ«ë jw—ò endstream endobj 15 0 obj <>stream H‰ìÁ€ÿ«ë jw—ò endstream endobj 16 0 obj <>stream H‰ìÁ€ÿ«ë jw—ò endstream endobj 17 0 obj <>stream H‰ìÕ¡€0DÁh„"é K( ày1¸y$/âfÄêu¿VÈë-ßy=mg†Ó}¢ý¸—uk;û0œîéä¡ûDºyè~¿D9ø1 endstream endobj 238 0 obj <>stream H‰ìÕ± ÂÁX„!Ù*-c°L ü:BÈw…kwžüƒãùºÝŸýõàët€ÒØ¡û”.ÀÝ tvè>¥ °C÷(]€º@éìÐ}J`‡îPº;t€ÒØ¡û”.ÀÝ tvè>¥ °C÷(]€º@éìÐ}J`‡îPº;t€ÒØ¡û”.\ó`'‹§ endstream endobj 239 0 obj <>stream H‰ìÕ1A A$®¾EfÊÌæv‹Ôéî<àÿÏ×íþøì·ðt:t€¥ Сû,]€Ý`étè>K C÷XººÀÒèÐ}–.@‡î°t:t€¥ Сû,]€Ý`étè>K C÷XººÀÒèÐ}–.@‡î°t:t€¥ ÀÕ[€?3 endstream endobj 240 0 obj <>stream H‰ìÕ1ÂA A$®h#3 å;Ãí_wç ü«÷ñy<_ß½û?A C÷XººÀÒèÐ}–.@‡î°t:t€¥ Сû,]€Ý`étè>K C÷XººÀÒèÐ}–.@‡î°t:t€¥ Сû,]€Ý`étè>K C÷Xº@É%Àš3 endstream endobj 241 0 obj <>stream H‰ìÕ¡ƒPDÑh$EÒUlˆÂ¤€ø È­€ÏdÏO?³s÷½Ûóõ™óyG?À-èôÐ}’.@Ý éôÐ}’.@Ý éôÐ}’.@Ý éôÐ}’.@Ý éôÐ}’.@Ý éôÐ}’.@Ý éôÐ}’.@Ý éôÐ}’.@§ßº½—ïyG?\J÷Hºl:Ù>I “íC'Ûÿo‡äþƒÚ endstream endobj 242 0 obj <>stream H‰ìÕ¡ÁH„ Éê-ã\ûŠšnqúÌÔž'À5Çóu»?>÷×_¥}hÒ>Ë.@“ö¡Iû,»MÚ‡&í°ì4iš´À² Ф}hÒ>Ë.@“ö¡Iû,»MÚ‡&í°ì4iš´À² Ф}hÒ>Ë.@“ö¡Iû,»MÚ‡&í°ì4iš´À² Ф}hÒ>Ë.@“ö¡Iû,»MÚ‡&í°ì4iš´À² Ф}hÒ>Ë.@“ö¡IûÀ¿z 0Ð/O[ endstream endobj 243 0 obj <>stream H‰ìÕ1A A$®>EfÂ5ð@Õt_2µçÉŽçëv|JûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvá?¼§¸KÏ endstream endobj 244 0 obj <>stream H‰ìÕ1QA A$®H‘™;ÂQð º*Øx“~s]pÖûó}<_¿ûïG€£´À² Ф}hÒ>Ë.@“ö¡Iû,»MÚ‡&í°ì4iš´À² Ф}hÒ>Ë.@“ö¡Iû,»MÚ‡&í°ì4iš´À² Ф}hÒ>Ë.@“ö¡Iû,»MÚ‡&í°ì4iš´À² Ф}hÒ>Ë.@“ö¡Iû,»MÚ‡&í°ì4iš´À² Ф}hÒ>Ë.@ÓÉöoÒKÏ endstream endobj 245 0 obj <>stream H‰ìÕ± ÂÁh„"éÊ)eÐŒ!¼,aig‚?YÝywq¼?çëwÿý·` IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íÃ5¾ ~ŸO[ endstream endobj 246 0 obj <>stream H‰ìÕ¡ÁH„ Éê-ã\û ¨é§ÏLíyþ—ãùºÝŸûíGø vš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4iŸ+Þ *KÏ endstream endobj 247 0 obj <>stream H‰ìÕ± ÂÁh„"éÊ)eÐŒArr€ÄβºóþÝñ|ÝîÏýõ#ÀWiš´À² Ф}hÒ>Ë.@“ö¡Iû,»MÚ‡&í°ì4iš´À² Ф}hÒ>Ë.@“ö¡Iû,»MÚ‡&í°ì4iš´À² Ф}hÒ>Ë.@“ö¡Iû,»MÚ‡&í°ì4iš´À² Ф}hÒ>Ë.@“ö¡Iû,»MÚ‡&í°ì4iš´À² Ф}hÒ>Àå-Àò+O[ endstream endobj 48 0 obj <>stream H‰ì—ýO•uÆÿ†§6‹V›n5a4ÄåB*Öà{q66mº™si¹©ek“xðDj†,†„‘bŽo–ïÓ’`)¾“¦8t†(jŸx–sjEzιŸçúìÙÙà§k»ï뺯ïµkž¡ñpÛ„”u÷MÈäK™]ÜÚÞe­H¸Ž¯¿=Îzðk-D¸‘òš¦ñƒò̬âCͧ­åˆP"ï{|Š[™,ÎÅ¿Ör„‘÷Å?ÁK÷‚óp CxGX+!£¨¬~LÂ*&“µ,PÛÛwÙZ‘pº â¶Ð*Óæ–¨UzyßÃàYœË|Ÿ}y#^¶–#Ü…¼/n…×o^ ì¯ÞÖŠDèaÊ‹3«‡ÿ=åå ÖŠ„[Ð]7q¶³gQF[1:>“¿—ô°V$‚¼ïmp.þÅÅLGwœí¶V$Ü‚¼/n¢dk¯¶‚—ÂëïTëî{›Öö®”ÙÅŒ›/65¯ñp›µ"aNÿ¥üOöG'Y‰yË+H kE"ŒÈû~ãe¯q7·V$ì‘÷Åux ð"pž¼t÷ýÃÞï›´Úýsó7wv]´V$,Ñ]ì@\Úz–aêŒÂý¿ZËaGÞ÷8_3n<^»çgk9Ây_ýÿùù›çï‚=ûZ¬ >ظoT|€1);cíÎþKÖŠ„ º ¢¹åÌ‹ JYƒqÓÖlªh´–#"„¼ï7p7gèø×[ËfÈû>‡ÎOó§ÿ³¼xX+–œïtë°‰™ìCtb°rÇQkEÂÝ?C¼ü**&kdÜÊ·s·ó§µ"9ä}‚Çq:~Çõoäl“åý‰¼ïghûMy— ÿó P‡–Sç¦Î(d1ø¦xäx‡µ"QtüÉÀ•«}öãÃOä2ýô×ÊÈkE"ÒÈû¾¿ãz¦O¤µ"Qä}Bçç;…Ÿæ¯»/n¥rÇÑG¦æ:K2géÖóÝ}ÖŠD„Ð]ð!uõ'§¼PÀÜ9 ;ëNXË6Èû>ï;å_2ÁZŽˆò¾ß ÕÓí‡Mü«äÓöéüÖŠ„{¸r5'ïˆIÙlËȸ•Á‚oøµ(vt|EË©s³ÎÄ£ƒ…[Èã~FÞ$9@° $ù`­HDyß?àqú<­ž‰Óðéùºûb(tv]œùꧬ ߨ¤Õ;ëNX+áEwÁ'\èéÏÎÛ=:>“µ$»§[+ÆÈûÂ4 HJ#)AVX+áEÞ÷ txš¼SééöºûâÿräxG\Úzg…žœ¹áäo¿[+áBwÁ”~ñÓ¸iktÚÜ’æ–3Ör„+÷Å ä+AVlªh´–#ˆ¼ïyèíI/mpj|lj­ÞZ‘¸‡)«:d—†Çd-\Qy¡§ßZ‘=º Þ¦¡©-9½ˆÇ¥­¯ÚuÌZŽpò¾¸R‚¬`1È ÒÃZŽ ò¾‡¡«ÓØé팘O“·V$¼@ÿ¥7s¶E îÕ¨ø@AéÖŠDˆÑ]ð*g»ç-¯`¸cV½Wø^¶V$Ü…¼/n YAb¬ÒÞñ‡µ"bä}¯R¸å]áÒÛ—ju÷Eh¡XNe Æ÷ØÓïïk8e­H„ ÝïÑÛwùz[”Q…­ 7"ï‹Ü =Ø’„n\¶Ô9kÙ¼î‚ǨÚul|Ê:fšœ^ÔÐÔf-G¸y_ü'dIž*_n?j-G„yßKÐÆÓæ–8圖NW·V$|AQYýýç°uQ1Y˵½}—­‰»BwÁ3j>í…GŸZ[^Ód-G¸y_ ò„Ta[HrÆZޏ[ä}o@§‡ÓÆ™&Íœ~n­Hø‹ =ý WTÜÀ&¯*«:h­HÜ9º  ³ëâ’ìæ8:>·‡Z+÷ò¾:¤ ÙB°3‹3«ÉkEâΑ÷=ÝûÁÉAæH§“ëî +ZÛ»’Ó‹XE¾ØÔ¼ÆÃmÖŠÄPøS€„ûö endstream endobj 49 0 obj <>stream H‰ìÖýk•uÆñ¿!u™J Eù0GËp¥&®X¤Œ$…™…1ƒLÒгÕ8ÎYÛ˜Ì ÊœN¢6 ŽBypØœe> Ýб¶ÐÜ82·vÖQ{Ï;m©›î|îûÜ׋ƒœùÓ‡óý~®ïuýúíöütæ‘gWñïuñ hO¬xKÍÈÉyâüìÊæÖˆõDâÚ}é/†œáÚ9$ùc=‘ „vßÓŽžh™8³ä3í­2½ûâ¡pØ©ùεÌÌÚÖ鲞HúGï‚w±}©%_ÚìÒpíyëqÄc´û20¤ ™ÃåIy½˜²GúM»ïQtlš¶S¹éÞÚ>q›‚òððäîgÒ„ÀÊ‚Pìê5ë‰ä~é]ð¢³ç.ÍZ´•ƒ5%¸©²Îzñ$í¾<’‡üá ‘Eõ­Ç‘~Ðî{½úÓu!:6GßÎßpÐz"‘¾]îè^°tçq«¸«£Ó‚UûNYO$÷Eï‚·°h˃{yøð…?­'¯ÒîËRy”vß[hÔôjŽŒŽMÓÖ¢‰û=w)5£„Kˇ/MmÖÉ=è]ðM•u£¦ô> ³me׬ÇoÓîËCA‘HÜ%Ò©|ûëqäÞ´û^A‹~þ[¥º¾ñ¢õD"ýPµïÔè´ÞÖ:dܪKw^îè¶žHþ—ÞOמO›]꼡pƒõ8’´ûò‘K¤7Ф"¯¬Ç‘»Ñî»Í™þL‹æ¤hÔôjë‰D"Ú[YJšà&OÎùrã!뉤oz\®¹52?»’399¯xK ›e=‘$í¾<\¤ERq¯æ.ÙAvYO$}Óî»™æÌÑ¢éÒz÷ÅëÚ#]™YÛ¸Ò|ÆLÍ…¬'’;é]p­+Ñ@á)¹Pv`Ûd=‘$í¾ ’мâj‘]$9f=‘ÜI»ïZôdÚ²S›éÏz÷%‘=Ñ2qf¡s½g¼]ÞܱžHnÑ»àN•»Ž?õrG“¾póoõX# H»/ƒ‡Ô"»¸`c§­%ͬǑÛh÷]ˆnLCvª2™æl=‘È ¨¨>öDêçÜó¡ãW/^Qu¥3j=‘ôÒ»à6uÇ[¦Ï)ãPžyå‹êý§­Ç‘„¥Ý—ÁF‚‘c\32d³Gþ¥Ýwú0­˜n̡ГiËÖ‰ ®¿ºÿþ0÷‡a7îüãÏ}VVQk=‘è]p‘ v¼·²ÚyÖ”d_¬'’D¦Ý—8 ÇH32Ë–õÉ÷¤œõD¢Ýwš°³tc²Þ}ñžƒWçmäòóyzƺÿ4[OäkzÜ Ú»Y™Þùè[U&‰í¾Ä ™F²qßH9²N¥×–vß jýNvÊ0­Xï¾øÓ¡º¦›‹ñîWZ+zÌUï?œ^Ä)LŸSVw¼Åzñ í¾ÄùFÊqëH\{Þzñ5í¾¸IHrÉFÒz_ÐîÇ =–6ëÔZú­n¸È}Š]½–·þÇáÉ9ìNÒ„ßùë¡™Þ…øhlj›ó~?õ¨)ÁòíGt«Åœv_\‚<$ÉF.$å™´´ž(Ái÷ãÀi³N ðSÓiÕfEàrG÷¼v°D|F§«ö²ž(aé]l\æåÁ½<ÃÆ¯^–·›?­'Jdÿ0½ endstream endobj 50 0 obj <>stream H‰ì×ÿK•wÆñ¿aΨ j›?mÚÄ!Bά 3(c‹UÄ8Z¬±‘ÌoKt¶YÖ苲,Ö—u‚œÛ¬ÜjÅ‘Q ›¹DvXNth(ŠZ³Ú»=ÐÆÊ4Ï9ÝÏóx½8HÛO7>Ÿë¾žÛ·eªêjì™|þZ"rÇàÐè%ßÇ'ÌN.ú°ô$ÿi=‘oéíÇÚ‰S¿-L/åù­z÷ˆ.³H$ZÛ{R³w9*#gO¨£Ïz"Ò^ˆ©š@sBf9'¼|ýÁ¶P¯õ8"ÿÒÛ"'IKnæ“Ï—‘ŸÖãø“Þ~ìÐTé«Nq¥ÁÒc­'ñ‰ãõ­óÓJxYq‰ùo¾÷õðHØz"_Ñ^ˆ‘Ææ?ÓWìæl“³vèxÅ…ôöŵ¸–$'÷“=áŠõ8~£· ´ÓÕ›ŽÑT9[Z+ÝÕz"¿ çm;=kQ!¯lNJqEuÐz"ÿÐ^ˆºÎî5›ÎF¨ÜßÈíµžHä>ôöÅÍHNò“å–’¨äªõDþ¡·uôRÚ)§JS¥¯jï‹ÄÎÕþ‘ìµ5<7~O-ùôÜ…+ÖùöB]½ñI噹ÿ,… yµÜXë‰D&t¼¾•‹Ê_ëAD&DŠ’¥\Trµpûd¬õD~ ½EtÑ„Ìr§šÒQµ÷EæK]Ͼ²ÝyzKWUuvXOämÚ Ñr´®å饟s˜Y«¿üµí/ëqD&±uç®+­™‰J®r]ÉX’ÖzÏÓÞ ú'-Ô©£ôRÚ©õD"3ÎÞCæ¥nå >žT°±°îúè 뉼J{!rt•WV©«ˆ·è{P¼…t%c¹´/¼¾—ÔµÇô÷#Dç¤yÒ?9Fº(Ôz"‘™‹÷¸©ø[½Çi/D¢çêІ¼ZpnJqÙîsÜIë‰D¦J߃â9d,IKÞruÉ^Øz"OÒÞm“ÎÉÒ?i¡Úû"nÐÙ=°tU“_âKÍ—º¬'òí…é Wîot–šÍî¡õD"G߃âQä-©Ëí%+ªƒ¤±õD£½?=4̤—+œÂIóÔÞq›`SGBf¹óH³×Öô\²žÈ3´¦¡¶árrÖÎ-}Å.ëqD¦C߃âid/ Ì&Édëq¼D{ÿaÑ*é–NɤmÒ9­'‘ UTç¤óZg-*ÌÛv:<6n=‘h/<”¶PïòõPh¶Gdúô=(>@“ÆÜäeëÏÖãxƒöþÔÑ$é“´JNŒ†IÏ´žHD&7<~ëý@\b>/w~ZÉѺë‰ÜN{aЇF7ÖÅ'ÌN.ÚR~Š›f=‘HDô=(þ@“É$3ùLJ÷\³žÈí´÷§èØw—h’œ­’n©½/â-¡Ž¾Œœ=>stream H‰ì—ÿkUuÇÿ†t¢ÂH2Ò¤¼ºs¥¡CL¼‘b Ù‚¤/.¼ó²µi¶i«µ›-Wʰ ¥tJè˜ÄÚP7uÈ„‰m²$›M÷]×KIé¾Ü{Ÿ{Îy¿8Œí·÷gç|ž×ûãc`p¸ ´>1%ç±g¶¯ßZuµ³Û:‘%?ž¼ÄÿŸÖA,á{˜–æÿ½Ÿ”/Ä:‘€®ë=+ߨÇ(à™³tw}ãëD6øÜ }ýCùŧœ’°)«†¯Â:‘1"çÓŸøìùiDˆÁ„gÎóÙ3ó™üÌëD6øÜûô=ZŸSÿèò¾¢©¥ãÁXxqmigן։bŸ½PõCËÓË>áøié%çZ¯YÇ"¦hþ„iÏÌçãgþcë8øÖût<šžSùè~4@ëDBˆ8¢¤²!1%‡ùm éë²N;üéú@0£Ìé7[ÇÂíƒÂÏ0ù™ÿ\\€¬ãÄzŸ^G»£ãqpú­Ï:‘"aVlÜV=ùïYQqèŒu¢á7/ÜèîÝ”Uѧ'‡³ OðÞ­ aƒöAás˜ÿXpðv°N#üæ}½Ž#Óñhzò¾âá\íì^¶ö+†Ïü…M-Ö‰¢Ž¼008¼·üôŒÔ\λ~kïÚ:‘–hbä¾÷1w;àLa(êøÇû´8ºœSêhwò¾bôÔÖµÍZ¼Ó «ßúæFw¯u¢(â/ðN“‚{8é¢ÕÅu íÖq„°Gû À Ø)ð…uœèâïÓÜèoN‘£Ñyþ !¢DAiý´gw0I¦ÌËÎú¸v`pØ:QTð¼Z/ÿ¶jCgœ¹0o_U“u!âíƒBü ñÔ ùÜ ¬;¬ãD o{Ÿ¶Fg£¹qÆ©I;èrÖ‰„îæfOÿºÍ'ÍÝÎTyâùª]°Ny<ì^ß{yG!ŒÀ/üiHˆ8Bû ÿÅÖÀ^‡‡½OO£­q:šýÍ“¯OaÂå+¿?÷ÊgŒž”•Eç/uY'Š$žôÂð»_~ûËÌ…ymÕ† Þ u"!âíƒBüXcMæ~.Á&8Å:Q$ñ¤÷éf44§ª-x¹HÞBDƒêcž\to¿˜4wûºÍoöô['Š ÞóB]Cû¢ÕÅ 5ÔÖµYÇ"NÑ>(ÄÃÁ ΊS0‹uœˆá1ïÓÇhet3EO£­Y'Bx™á;wC'¦ÌËfæLMÚ‘÷ùIëDÀK^hÿõ×ÞþŽãÌHÍÝ[~š÷eHˆøEû }ý3Ná²à,c(xÉû41úÇ¡›}¸»VÞBĆݽk2÷3|xf-ÞY[×fhBxà ·ndž˜žN„ÞÉ>Ì;²N$D¼£}PˆQ‚S0 ~Á2¸ãX'šÞð>í‹æ”1Z™¼/„ˆ=g.tÎ_Qè ¢Å¯~qµ³Û:Ñ8ñ€*kÎÎ^²‹S3Êε^³Ž#„;Ð>(Ę8© Ëpk0Þ±Ž3~Üî}½Ë)`4±¦–ëDB_ƒf¤æ2‘&B·Uߺ=`hÌ¸Ú Íié%ä,/¨9~Ñ:ŽnBû ã×$÷pw°²Ž3Üë}Z]‹ÆEþÇäÒÁ¬ !Ä=úú‡¶„$ÜŸNÓ“Ã%• ։ƆK½Ðu½çÍw‘<1%'¿øoÁ:‘.Cû ããàìà ÂDøÈ:ÑØp©÷éW´,’Ó¸è]ò¾"Þ@/½^Θ♳tw}ãëD£Åu^p»ˆ…ˆ´ 1°Oæßs‰ðVrÑzâ:ïÓ©hVNÅ f”ÉûBˆxæŸ#‹õÐ#Ë]^¨9~1°¼€Àié%ÍÖq„p1Ú…˜8˜q•p†²Ž3*\ä}zmÊ©Uô+Z–u"!„%• Ó’ÃÌ®„@hKøH_ÿu¢‡á/œk½Ì(#êì%»*kÎZÇÂõh"R8ÜŒ›¸Px [YÇyñêý¿ˆxó` endstream endobj 52 0 obj <>stream H‰ì×ÿOWUÇñ¿!ĉ[¥›­õ”XŒ”E®øAW¬ápnºéú276ekËé‚LDäuŠ$Ñ„p…HYŸá Å™@ÌÁ‚‘:èc(ò¥§]3+Ù,î½çòáõØg¬~9çíÝÎy½ÎÄÄ=nÝJÏ>™ùÐÓaÑÙÅ}7!"2­\¿1œº¥jÖ÷XxlNyõÓMꋯ/1$M2©þÀàF_ ¡07:Û—_Ï·5=‘H0ضç+Î>M" È&Šœ"­È,’ËôD“ò~îÓšèN I¢M)÷Edúêî įÜË…ÆoѲü‹m¿˜žè>¼œ £cã…‡ÎX¡°:íXçO¿šžH$xè=(b;rŸ´âd‘\ä)fz¢ûðrîÓ”èKVq¢A)÷E$8ÔùÛÄï´.·äõGúƒ¦'úÏæß-&±ˆÙâVû;M#lôq™Erq¾H1²Ìô8ÿäÍܧÑ‘¬²Dkòàw™¢œNωÊâ–›½Ð—UðåèØ¸é‰îð`.ttõ%¥”1Õ¼%¹ûŽžõη &zŠ8Šü"Å8e$¹fzœ¿x-÷Iyz툩hJô%很«kCk7U„DdpãÍË­:Ùjz¢Û<• |¢wrk‰ƒÐÈLþƒÿ5=‘HÐÒ{PÄiwCŸwBÍS¹O¢1툎ä‘O$"⨖K½1‰E\}ü'}ØÑÕgvïäBieÓ¼%·C!)¥¬­ãŠéqD‚œÞƒ"î ÑÈ5ŽGÒ™Ç+¹Oÿ¡Yuˆ^D;2;ˆˆËªN¶>ºx;w`HDÆÚM׆LMâ…\ð7vÆ­(fŒ¨åuþvƒ“ˆÌzЏ‰t‹~¹CGÞ‘z'1žûtšý‡1yn;ÈÔ$""f ŒnÍ«›½ÐÇ}öLÖî FÆ0› Ý=uéŸ0@xlNá¡3|#cˆÌ@zЏŒŒ#éÈ;ŽÙGÃlîÓvè< @ÿ¡)÷EDúƒI)e\ŒüÄï¬ó·»<€©\¸~cØ—_?7:›Ý7l­æ;¸<€È §÷ ˆä]ZÆgœ>$ ]ÀTîÓpè9VáyõÍÃÊ}‘{55_^´,ߺ$Öìïî ¸¶µ‘\ø¸æâS ï³ïòu¿oûÙÍ­EÄ¢÷ ˆAd È$ ÉD7·v?÷i5t«äÐvè<®m-"2½þôüÃ1Û¸-gEf¦n©º9tË…M]Î…ó-=KW•X Xùy³;›ŠÈ¿é=(bÜñÚVÒ“H2’îlêfîÓdè3´v¤á¬8ç¦""Ó7gzö‰Ð?oÎ’òF§wt-z¯lØZmý»vãÎkWD&£÷ ˆ†d"ÉÈy$%ÉJ§wt-÷é0Ö¿‹VC·Q<¸žÞßÖìç å÷äK»šš/;·— ¹0<2š·Ïo…ÂëoWv÷œÛKDÞƒ"ÞAî“I²’Ä$7Û˅ܧ·Ð^¬CŸQü? 纞xñÎušøFiïÕ'vq:ªOýµ¼€-âWî=wÑÁ‡­ˆü'zŠx )¹tU “Ü$=ÚÅÑܧ«ÐX¬êòøÒ<šŒ»ˆˆÌ(»4„Egs¯†FfnÞQ;<2jïúÎåB[Ç•W^;Äâ½ð^ie“íë‹ÈTè=(âM$&¹Éñ$CIRÛ×w(÷é'´º ‹Ó[h/ö®/"2“]¿1œº¥*$"ƒ;6<6§¼ú‚‹;‘ ýÁ¾BaNTÖ»»N1¿‹‹ˆ-ôñ,rÓ—_O†’¤ä)©jãâNä>Í„~²t•·6W8¡£«ïùä½\¶üžMÜÓr©×–eíͅѱñ}GÏZ¡°:í3Û²¬ˆØNïA#CIRÎ)©J¶’°¶,koîÓFè$V9¡¥(÷EDœVçoŸ—k]¼Éëô§¸ ¹Àl1‰E¬ÆßÓßþ8õEÄ9zŠL þÆÎ»ÙJÎN}A»rŸB± ÍÄ®¦HPú]€e!ô÷ endstream endobj 53 0 obj <>stream H‰ì×ÿK]uÇñ¿¡épk¡`þÔ¼Ël"$f„L¤…E[ŒÚ¬±dxýv“¹æ´L—’6r®d*—_ ­É–ÊTº‘‰†Š¡¨ÌëÜìÕˆ5w½_¼÷tï}>¸\®çÞsüürÎóýY^6ÒÒÝ{¶²Žˆ˜ÜGvfë]ŸuÄ㫵té:z÷fIöá©ôŒ:]ç±g ?¿ð³7ëàŸ´ëžÕ»Ù °UUmUauϪ¶j®7Wó¾û;‡<33»ðê;ô(Öëñ„¦¶AÏ®ãeææ' /+ákfN£VåÙuøûA °¨°Çó›U[5WåU=»Ž—Ý×¼¡©Ã?^9ZK÷À\ýCãq{?5ˉiöá)w¯àMjê{¢’Štú¾#çì\€YØHµUsu󪿪°Wð¸ûš14i#‡fM üw€/\l쌷éù¼):ûðû—ææ®ŸëY®ÞIH-׉1)% Wn¹¹^æc?®¦¶AõW·°Z¬"»u®Ý×\¡éB3†NÔ¼QÛpÓÍõ|α¸”uºuó®=«·ÄæWu¹x¢»]›>t¢^§l+(­îÖÿõtÉÌÄ~hê¯*¬Ý™nduYuvñDw»¯‰Bs…N ·X5iÐ}ø?ŸœÝ{¸Fm½¢’Šº®¯{Šë]¸½pÇVÖ±õ~Žf5èmÄ’˜ƒý ÔbY÷²ê¬F«Ôëžâz÷5Eh–0† MtEOßhô ÅÆ<ù@åÈØ´“»Ø…‹½O$ŸÑ/ŸO¯üeàÏ ]/°‚†º¼ç`•îh•Z½vþcWº¯ÉAóƒ1HìL>£¹bC× ð‡sµ×¶ÇèIf±¾—×t{áΚ?[· nU@ `?5Z¥Ö}­j«Ýû™óîkZÐÌ ÉA¿Ñ¡YÂgëøœžê™9ΟêNº0>9{4«AßnÍË/mØŽ@ b?•ÚVÖ¡jëîVÁÕñã¤ûš4-è[MÙßÑ}#cÓÉ*õx×ëÉÏöô®þvÍ.8—J«»#ãmúêЉz]Á¿Kàsì`¥j«ÝºÁÕqÕ\M_ýíšÝ×l  Á43Ð}>?\û}dz§ŒGýËo~9ù×¼qüÁ.4µ Ƥ”è`BjywÏ&­€o±‚ÛÕ#ê¸ns5]e_9þŸîkÐT`ŒšÚúͤõü¡¸ªkKlžžù›wådnu,.­î€}bß‘óú3*©¨¦¾ÇìÅð!öƒ@(PÍÕtÝìê»*¿¼j?¨@“€æý©Ù@‚Ù‹øÃܼãµw¿Þ­çd¼íÃ[õáRKÿñüæp‹5"&÷dáå™Ù³— À·Ø!BÝWÙÕwU^­Wñuï«þšôA󀦺¡Æ><•˜V¡¯m»óõ¾ÿX­Ž›½4þÀ~)ê{zFÝJñWBj9Ý€PöÑga«…=«ffÌ^?a?„U^­7¢¯úk0{EÓØ‡§Ò3êT„GŸÎ×{øý]aDL®­¬céî=³WÀçØ¡CeWßUù•âoÛýOý5 h0{u¿š›wäœý^QP2s¿iîSôžöÖWú ×ŽÄS­?þjö2øûA D¨é*»‘xµ~¥ûš4 hÐT ÙÀìeü¡¦¾'*©H!Hyý‹û„Ž´téO½ësÿÐøS)%F2Ó*ìÃSf¯€¯°‚ž:®šYI)Qå—ÿÝ}M/½Q­?5hB0{½ºÞ;úÜþsF®ÜZ9¾º †Ú†›‘ñ6 ³XßþàÛ¹y‡³ëþ-À~U¼ endstream endobj 54 0 obj <>stream H‰ì×ÿKÕWÇñ¿ae´Z#(h°hYbsABs¢ (Ù‚b¡ƒ dmcj~¡š•Ù@®ôÈÍË;ÛV£.µánQ¶Œ­X!­Ml~½êÖ^y@„J½÷žs¿õ|pó~>ïsúáóy½ÎãÇâQù_z£H?£½öõô ¶5LM.Öc>{iE÷ÚèW?\øMÔÏÑ¿xϵ¦dï×3r=þ–öhìàPǃÖo=©÷ü¬´ò]5ƒÃc¿}:D×|\ñ}ÒH޼œZzàÈO‘Ý2ç8‰J©­ìÖ®ÿ¨ì»Iæ~e­O=A_©3¨9DvË'ú†t4¯÷·{<ì~úšgæ‚¡ës6Õ·úÌ_±ç’ÿžû-ˆ΃@âQR+¯Mp+ÁCÈ}µ}«æ þ á~ËWN¹¹`å^½Õ3r=þ–öç]6N.?_m —̼ƒÏ q‡ó H”ÎÊhÖJm Ÿw儹õ×5]£¡.áf¿‡®ßºŸ½î°Þ䯿SYߨ2þÅæ‚á©k~åÍ2]™”\\Xzº`ÈÞ~DçA 1(‘•ËJg=Ñ3—”)¯Ç¿~’¹¯þ ó ®T£P¯°·_€C]}›Š¾ÕÛ{FjiIÕùžÞÀ„·L2DÓ ¶5LIœYiåuÞk6¶ :8 @Y¬DÖ³¬tVF[Ï}u 5 ]¯v¡ŽacË'ƒÃÕG.Ï^Z¡—vÞæú¶Ž®IÞ8ù\04yÅ{µºEŸÅYUWn´‡ºeÑÄyˆkÊ_¥°‰ãŒ\ÓÜ_WøµnQÇPÓPßuËWš|·Sß­Ö»:}u¯ùnP÷› £+Î[¾ÛÄКüã]}AÝ ê8qJ™«ä5¬,V"u{h¹¯v¡Ž¡Õ7‚]àέ;®ÚxLïç9Ëvª÷‡0!´\0ö¼4=e‡nŸ¶¨d{eS`p8„!¢‚ó w”³J[e®^åoe­/„!áäþÑ“WÔ7t»º‡H¶<êøtçÅ>úEÿ mN8¹`¶±vˉ) ‹4dnúΆ³7C› Â8ñE «œÕc«ÌUòF1÷­Ô@8j¿üeβ'¡°jã±ßÿø+œQaæ‚qçÞßi9_hŽ>ú%Ì-ˆÎƒ@¼PªZ Y[¹¯¢9j#ê$áŒÅ×|7}uI„&ßíðZÉ£áì͹éON©S­ÝrâQ÷@ø38Âyˆ}JRå©RUO«V9þL‹¹¯bªj&ê'ጣ­£ëýM_é­;{iEõ‘ËÁa+c-æ‚ ÿûßöʦi‹J4szÊŽÊZŸ•±¬ã<Ä8e¨’TÏ©RUÙ³¹¯N¢f¢™j)ê*VÆÆêé ”TŸ‘Zª—íæ’ÆÎ®>‹Ãíæ‚¡®É?®±úÌ[¾»ÉwÛâpVpb–rSéibTy¹¯~’”\¬®¢Æ¢Þbq8¼àê[^{ûs½º³×¾~ë¾õù.rÁ¸r£}qV•‰³Œ\O[G—õ%„Œó ƒ”•JLÊP%©õ%Üå¾ZŠºŠ†«·¨½XŸ/K» …+÷zϵ:ZÅ].uÞk¯¾U®%¦&lkèé 8Z@P81Eù¨”TVêÁœ•V®ôt´ëÜWcIÎܧ%ÔaÔd­‰íÁÃîüÏN™DØUs±`ÈÝZ®sA´ÿÂÒÓI#7sI™§®ÙÝZ&‰ó ;”ŒÊG=’ÊJ%fä¾Ú‹:ŒRŸQ«q·$˜±¯Ðõ[OFà\0ôÉZ{Hké3ÅžKþ{®W0΃@,P*M8fæL°Üÿà“o´–ZºÓC.$ï¹Ö”ìýzsfäzü-í‘Y4b¹`Œ ¾œ G#|@þ`Èýß endstream endobj 55 0 obj <>stream H‰ì×ÿKUwÇñ¿aeT0+ÆXÙDF.‹áóc‹FP£ ÚØ‚ Æjƒdj–Ø÷,C+)‹õ ‹\[- ÛĦ¬™%’Cq5n¢»a™Ú-÷¬Ï±/‘_Ïûœ{_.R?×=—s^¯OôÚ¸»ò•©Yüµ"£Bí]ËJy ù¼ùÞ¶êÚVo®{î§&®È_o.W[{΂½\11½ üÂMo.*"8 M¡ô%x[N™½åð©_½¼´Ç½àì9|eBR.×KÈþrý}/¯."ý:ŠØ¡õè>g6Ü}ð²—W7éý#å×X8\—µÃæñòÒ"">×î^•s†R˜˜”›³óâý½0éðM?_wzì³6ŒŸ‘GSx@$Æé<(b‚¾£õxúh@z0¦zŸÃÚaó°|Ø?ñ›Èã'…‡®¸RX¸òXsk‡I «^pZþøkÖübðIL/hh ™Ä‰A:ŠxŒŽ£é\åÑ}1Ûûl°XAl!“""æ*ªn%gò>|çƒ=U5-†Il{ÁánLNÝì*rþgßv†» ÈÄEé‡{²xõ òðy-%ÿôùÖ‰D¢–΃"££Ë\©}¼ê¸zÿ¿Ü4b±Žø‡On‘ˆÈh(-«{ýÝM¼?üôpcó]ë8Ïùªœ†¦PrF¡+ДyEÍ­Ö‰D¢Îƒ"£‡æ¢¿\‘Ñhôšu¢ç|Øûì"Ö©XJì%ë8""#¬ª¦Å•Bbz¯^¿Ž{Á9}þFüŒ<²™–µxõ‰{]=Ö‰D¢ŠÎƒ"£¶¢³h.ž/Zìä¹ëDÿæÛÞ¯¨ºÅR"«‰ídGDd´Ý /]Sæa×Á_zû"Ö‰þ‡o{ܱ̭ã¦çpBRjëD"ÑCçA‘GOÑVG’€ö‚S]ÛúÆœ­®”3–•†Ú»¬‰†Îƒ"ƒEËÐ5®t¦ÌÞBY'Š@÷>[+õ£bò³¾Ø`ÖqD$¦56ß»ük„Ò²:ë8Cè^pv”TOHÊå[Ä%dgn­èí‹X' EŽf¡_hž‡Þ±N4tQÐûì.Öß‚%ƳŽ#"1§3ܽ*ç ¥0>qýº-çï?èµN4,QÐ àWøä«Sc¦eñ]âgä)¿fHÄït :…fáy¡e–­=©Þ÷~…o¶]`‰±ÇXel3ëD""Ÿì;zuÒÌ|^¤ Wkní°N4¢£~‘Yó‹ù:|’3 šBÖ‰DüKçAù[€Ñù^ endstream endobj 56 0 obj <>stream H‰ì×ýk•uÆñ¿¡5Ñ`92‚ÊÙ’ÆtKò‡öÃ*e(˜˜ ‚F¢°'œÇ‡rË™:ÅœlÚX´1)·4k,ÄmQ>dc‡¢1ecc›nz6{ã—D\ºrçœÏ½û¾^ÛoŸûá|®ë{玌á|[gZvé/æò™—³7ÜÑe=Q|÷c—÷õ QÀY²æ(—3=#Tv¤92ûÚvvæ›+Ê/†¯Y+>Îç|[gZv© ÷y9{Ã]Ö‰x‚΃"÷#ȯdï";¬'Šßç>mÑÊÃ\#-Ž.g=ŽˆLH-g¯d.ÞÃ&IÍ*©ýþwëqbË÷¹àTÖþ:-½ˆ+M˜™ûÁ†oú†¬'1¦ó ˆC" ¤¿’‚¼°ž(¶’ûô7ZWJ££×Y#"Æå«=Ë×W³=¦¦mÞy ièVÄz¢˜ H.€§¹aëñÄ”<®wÊìBž¯õD"–tY@"ð[ È徟ð4y¾4:®—vGdzžHD<íæàí­{~Jº «7Õv^ﳞ(N‚“ O6ûýC\2Ÿçìhjé°žHĆ΃pìRÀŹ Ü÷+ž,½ŽK¦ãÑôè{Ö‰ˆ}Uwö……Ÿ±+¼»ï·‹YWA˧õÜ•ç_ÿÔÕ€…K÷_¾Úc=‘H¼é<(ÅÎgó» Hë‰â*˜¹O»£ãqáô=ZŸõ8"â!쇬÷y?3œ}•g¦¦mæòSò>*Ýh=Žˆ»Þ=°zS-;!iva~ñ‰Àž‚œ wîvƒ7Ö<ùO78XÕb=‘Hœè<(ASþõ/ìy^{v>›_¹o=ˆ ž;­îÇM Ò­'C·"Ÿùó´ô"VÁòõÕ—¯öXOd)à¹àð,\ºŸûÀç¥7Š[Ï]±žH$æt”à`«³ÛÝ’gÛ+÷•û¼4@îmNH3´žHD⇘šUÂÈ\¼§ñÌ%ëqì)îihlŸ1›+ o­(ïî¹a=‘H é<(AÀ&_´ò°[ìlxö¼õDö”û÷ÐiƒÜ š¡nˆH\ _s¡ðÌ«[U·ZãÊ…ì<Ð4ååîɤYù›v4 ÝŠXO$:Š¿±½ÙálrÞs¶:»Ýz"¯Pî?€NH3äžÐéŠÖãˆHLôö ~\ômbJÞäÔ‚OBÇù×z"Q.ŒÆ²l]UÂÌ\îÌSs¶ÔÔ_°žH$útco?=w o8›œ}®Ü¿Ÿr4Þú!-‘®HcÔ #â'‘ᑲ#ÍÓ3B¬¾œUáŽ.ë‰ ó ø ›™ýÌ+Í®fckK?‚rL¼?´G:$7Š>I«´žHDþ‡þ¡üâI³ SòÖæ×u÷ܰžÈë” ÿïRΪ îŸó·54¶[O$2.:Š?°ÙÉn9³¥•ûc Jîÿ-ÀŠ ñ? endstream endobj 57 0 obj <>stream H‰ì×ýk•uÆñ¿!¨ I …9]ƒ¹r0MüÁQFŽdô€R?˜ „)ÑŒíxpÍç“YóXM˜­&¡[Ò9B‡Bk¢cMš¬Í–µŽìñ¸•½õ.HÈhçésîs_/b¿Ä‡¯ßûú\ß;wb4)ñ5fd–ÏÌöûÍCÑXÿ"’x5G/Ì[ºó¡'Ê ÖU_éì·Ç¾>Ýɉñ§õ îêøiÑÊ'Æ/ÍH$JÛ>ø†kÌŸÖƒˆD©§/L;L2“ÏÖ¹ƒöþ¤Ð'i•œ “ži=ŽˆòÓ RU{?Ž´÷ãŽûI;åTiªôUZ«õD"馩¥+gÕ~¾²¼Âª–ÖnëqÒöB‚poçæïpÊÌ‹>XO$r½%5‘–d¦ž¤(Yj=QºÑÞO:*M•³¥µêÞŠÄË÷?ü²z} _Öœ%•?ÿÎzœô¤½P•žžµ•ž¶Ð÷îßÿ°žHä/zJª!!Ë÷6“–ÜL’“ü´ž(=iï'}•ÖÊ Ó`é±Ö㈸حÁ±·+O°øñþÓz¢´¥½hÜÞµ›ŽLYPÆ9?šWY²Ýz"‘»ô””B6’ÜIÒ’ÌÔÞOíýDS‰‰Ý§ums–Ü] «××t\ûÙzœ4§½W:ûsVíç¨ù-~~ÿµë¿ZO$^§÷ ¤òð©>t⑜$-­'JsÚûÉAƒ¥ÇrÔtZš­õ8"®ÑÒÚWXÅ·“ý쾦–.ëq=këÞOÎZO$¥÷ Ø"ýf<¹•KH’ŠÚûI£½ŸdÜmš-ý–c§ëÒx­'I9CÃ_ yf¶ŸÏdcÙWá뉼E{Á÷¼ðÜ<¿¹ù;šZº¬'ÏÑ{P¬x䞀$¡ö~’iï›àžÓr9y/½—ök=‘Hª¨k =öÌ.¾Ž‚uÕ—:nXãEÚ †Î_î]´2à”¢å/ìé [O$¢÷ $)·â•Ð#ýÈ@뉼H{ß]—ÆËùÓ~éÀÖãˆk õ.+ òEÌ_±ç؉vëq¼K{Á\ÍÑ ³r¶ñ¯05³¼¸´~h8b=‘x‚Þƒ’L£cãä)Ç­#ñÈ=뉼K{ß½—öË¿M˜>l=Žˆþ›ƒonip6Âöª3ìë‰>stream H‰ìÕ1A A$®>Ef>[PÅt_2µçÉåx¾n÷Ççþúà«´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€eþÓ[€­åKÏ endstream endobj 249 0 obj <>stream H‰ìÖËKUQÅñ¿!D„&Ž á"HQƒ"pTAÁA#Äh ä󢑒HTŒp .fEo¡R"Y$d¢¡¢XæãêU[QÔNÄ‘÷üŽç|?ÁÙbŸ½Ö¾ëëÀÖ¾ü¸kïEýµÀStàâ]H…™Ù…þÁ1ëÀVè>vm©Õ:E Ð}€‹w!Êj»uª¥ñ‰©9ë,Àæè>|Nû©Õ-Õ¢Zg ºpñ.¤‚~Æ””Çt°™yu ­=‰å¤u"`#ºßÒfj9µŸº¢ÚÒñ‰ïÖ‰…î\¼ ©Ó?8v¨ðªŽ7RÐòÞ:ðºÒZj3u9µŸZQë8D÷.Þ…Të¼÷6;¿Q‡\PÜ64ÀÅ»à±Þן÷oÑ™ç»ò¸÷“u„݇9m –ð÷j­ã„ݸx¼—\]»vûÍîõ:ùÂ3·†G¦­!Œè> i÷´~ºZBí¡VÑ:QˆÐ}€‹wÁÊ·¹¥óÑi9•é‘ê õô¯u"„ ݇ mO»§õ+«ífú¼G÷.Þ[CÓ'Nwêdç7vĬã Dè>¼§•ÓÖéâi÷´~ÖqBŠî\¼ ~ ó4éC<ÙÚ7ðÅ:BîÃKZ6í›®œ¶îþ³ÖqBî\¼ >‘XN6·÷eí‹ês””ÇFÇg­!àè>¼¡5Ó¦é²iß´rÚ:ëDaG÷.Þ_™š™/­ˆë‹däÖÔ6?_\Z±N„À¢ûH5-˜vLk¦›¦e›˜š³N„_è>ÀÅ»àC·é»ì9rén× uÝGJi»´`ºcGOÝЦYÇÁ?tàâ]ð­¿¿¦]ç×¶ÝGŠh¯´Zº]Z0í˜ulD÷.Þ?[\ZihíÉÈ­Ñ7*­ˆOLÍY'BpÐ}l;m”–J÷J«my¡³N„MÐ}€‹wÁÿFÇgKÊcúL™yuÍí}‰å¤u"ÁNîþOyÁc endstream endobj 250 0 obj <>stream H‰ì×ÍK”QÅñ¿!$!\ÂH`Q-ÚDà&’pBRj(#öf–Dš‹Šf#B/ZT¢Tf‘…’‘¡Lø::f¹–éèïyæù~ƒ³;pï9wœŸ‡ÇÄg—»2r«6l9SXŠY'Â’î?ý cÒ§u€'ð.øÅ«Þ/ÛÖë°Bùu-í}Öqà{tÉ¢EÒ.é:i£^¼´Žƒ ûï‚¿4Ez²wÕêÈ5÷G‡­ãÀÇè>VO+¤-ÒEÒ.i¬ã`Yè>ÀÅ»à;ãñSµÓC•i9åÅ­?Ʀ­Á—è>VCË£ýÑ i‹JôKÖ‰°\tàâ]ð©èç‘‚·uvYyá†[݉¹ŸÖ‰à3t+£µÑæhyt´BÚ"ëDø?tàâ]ðµÇÑÜ}Wt‚ú|òü£uø ÝÇ hg7§­cÀ:V‚î\¼ ~—˜ûÙp«;+/¬s,8q;úyÄ:üîã¿h[´0º3™Ûªµ9ZëDX!ºpñ.¤†ÑØdqEkZNyz¨òôùöñ‰¸u"xÝÇ2iO´*Ú-ŒvFkc«B÷.Þ…TÒÞì¦4{WmS¤Ç:<îc9´$Ú]•½Gµ0Öqtàâ]H=-í}¡ü:ëÎCW_õ~±Ž¢ûø;­‡6D—D{¢U±Žƒ¤¡ûïBJŠÏ$.^ïÌÈ­Òá–D‡bÖ‰à9tKÑbh7t=´!ç:´'Ö‰Ltàâ]Haß¾/kYøQWSÿljzÖ:<„îãOZ m…CwCë¡ ±N„ä£ûïBÊ{Ûÿu÷ák:åÍ{.Dî½³Ž¯ ûøöA+¡[¡Åxý~È:Ö Ý¸xâNkïÂ/½ü#7ô¢uØ£ûX¤MÐ2è>h%´Öq°¶è>ÀÅ»SÓ³—mÜzV'~¼¬e46i–è>D; 5ÐMÐ2hÆ'âÖ‰°æè>ÀÅ»4ƒC±Â’ˆ=s[õ寮øLÂ:lÐý€S÷µÚ]ƒ#'ïj¬aÐ}€‹w!˜:^~Ú~°^Gʯkë°Žt?ÈÔzu_@; 5°ŽƒuE÷.Þ… kŠôlÚQ£ p ¨¹?:lëŠî“š®¾ëè³òÂZë80@÷.Þ…€û16]~ªLË)×újë„îÍBÙÕtõ²{Ù/G_ endstream endobj 251 0 obj <>stream H‰ì×ËK”QÆñ¿!B7îb@t¡+Á… %ܸJÜÒ¦h“&‰á ‚èBKR£(ÄE¡.j@B TB…oX¨^Қў•*ó6Ãï}ß¾Dtåç|9ãñqr½y7íæ}OòßøïdqióVÕ3Ý„ôÜÆ®þ‰XüÈz’Žöÿ*Z]«nxIe¯z·^K´pñ.àÄpx!»¸]÷!¯´#<±žƒä¢ýÿ„ZVÑ:kÕ­Æ­çÀí\¼ pÅâGíO?¤å4èV”WDV¶­!Yh?ðÔ¯*Ö)«è¶ž1Õm½ž@ûïþ´ݯ©J Õ¦fÕ×µŒîîZ/BâÑ~€©Y•«~U±ZVÑÖ‹à!´pñ.à4Ÿæ7Š*ºu=2ò›ú§¬ç Áh?¨T«šÕáªßé¹uë9ðÚ¸xðoƒ#³™E­º$e“3«Ös0´<*TêXC…Í*×z<Šö.ÞœéÛÁÇïod?ÒU¹}÷ÕÆ—ëEHÚU©6u êTµªYëEð.Ú¸xpNúÀYuÿ58ƒöƒA%ªGU©ÓÔ¿„êÔz¼Žö.Þ\ÈäÌjAY§îL¨°ypdÖz.ö@ ªD£ªT›Ösà´pñ.àžÍdä7éæUtOÏ­[ÏÁeо¯©;Õ§T‰}ƒSÖsà'´pñ.àrv÷ëZFS³êSBµ5uC[Ñ}ëE¸Ú÷)µ¦âÔêSƒ*Ñz|†ö.Þ\ÅòZ´¼z@W(-§¡­g,?²^„ó¢}ßQ_ªL­éàÔ]deÛz|‰ö.Þ\]x<’WÚ¡‹”]Ü>^°žƒs¡}QYêKG¦ÖTœõøí\¼ H”®þ‰ôÜF]§’ÊÞÅ¥Më98íû…jRS:,õ¥Êbñ#ëEð7Ú¸x@_wî5¾½žùP_úA¿Z/©hßûN‚J Õ…ö.Þ$ÜÜâç’Ê^Ý«ôÜÆ'/?ZÏÁßѾǩ¤3RMjÊz‚ƒö.Þ$Épx!³¨U·+¯´#<±žƒßѾg©U£ÓQAêÈz‚†ö.Þ$Ïá÷X[ÏXZNƒîXÅËkQëEø…ö=H¨‹ªQ;*Èzˆöaé§.èJæ endstream endobj 252 0 obj <>stream H‰ìÖËK”q†á¿!D‚6® a$(È „ZD A䢅 ¸ZHy@1,É(,‹”*Ìf¨ÈÀ¢0 -¢!DRTÃãè¨=aØWDe:ó~‡ûZ¸~ù¼~³±Àm=û°gÿeýµ>¾53»XVQfYùu5ןÎ/$¬/Â7lßU´ ­CÑ?E{Ñj¬/‚o±}€ïÒc06^|î¾bË-jîŽYŸ¶ï"Z„v¡‡6¢¥XŸŸcû'Þ¤Søá»Íß½GÎÜyó~Ìúœ@cûn h úGhZ‡õ9¶pâ]@š--¯^i}ž]P¯ðʪ"SsÖÛ·¥òÕ¿þÚ‚¡]X_„ `û'Þ˜›-­ oþ¾ÚÖ—XIZ_8lߊjWó*_ß_+Ь/B°°}€ï ½ú|øôm*n‰ô [Ÿ,lß„:Wíúò*_ý[Ÿƒ bû'Þ˜ëä6©ÃãçÛcñIës‚‚í§™ÚVáúæª]Í[Ÿƒàbû'Þ¸ÁüBâÒµžÌPmF^uEMtfvÑú"ÿcûi£žUµÚVáê\µ[_„@cû'Þ¸G|dº¤¼KAî=ÐÐÖÙŸ\[·¾ÈÏØ~¨a•¬žõ©Õ¶ ·¾`û€Ÿð.Àmz_~*8qSYêÖçøÛO5Õ»U²ª¶>øŽíœxàBɵõ¶Îþ}gIyW|dÚú"bû©£bÕ­>¯VÉêÙú"à¶pâ]€k}™[®¨‰fäUg†j/6>ž_HX_ä+l?T©ZU±êVõªaë‹€_±}€ï\.Ÿ£šT™Öÿ„íœxàEƒ±ñ£%w•nnQswtÈúObû;¡êÔž> :TÖçÛÀöN¼ ð®­ßäÇÎÞã7ùv±ýÿ£ÒÔ›>ÚSÖçÛÆö 5¾ 0t…N6 endstream endobj 253 0 obj <>stream H‰ì×ÍK”aÆá¿!D„6BP"ˆ ÚH´Èࢅ!!´üL #T±…JQ B˜Eb5 dºH( M4TËÏÑQ»A'gÎø>¿k1àî¼Ï¹oîìœL¯ß?u¾\¿Öƒ‘X[߬iz—”^­•uÍÌ-YOtbÐý£Rº”1=šò¦Ô){Ö‘ û/î|`rz±°´SINάmjën„¬':è~ø”(åJéÒ‹)iÊ›õD@äè>À‹»ßèú‘•׬<§å6¾|ûÍzœxG÷ä,)Qz+¥K³ø_tàÅ]€Ï´w¥d×+ÕWo<›µ'~ÑýR~”"½’¥\Yºðâ.À~-­ß®ëIL«JH­¸UóJZOèþ!”%GùQŠ”%"?¡û/îüjlb>ÿæÅûÌ…º‡O?…¶¶­'Š/tÿ@ʉҢÌèq”¥Èz"à˜Ñ}€wþÖ͸ò@!×o``Üzœ8B÷ÿ¦„ì¥Eɱˆ ºðâ.À÷B[ÛÍ?&gÖ*ê׊ŸMÌ[Oè¾—R¡lèA”¥E™±žˆºðâ.À ‹«%•Ý ©‰iU• }Ë+A뉌Ñý]J‚ò T(Jˆrb=]tàÅ]€SFÆfs Z•ù”ìúöÎ!ëq,Ñ}Q”½ƒR¡lXÄÝxqà ®7_Ór•üœü–Áá)ëql8Þ}í]Û× ( ʃõ8@ì8Þ}À>ܸ)¸ºÛüátÆå¿°´szæ·õD±æl÷µkm\ß®í+J‚õD@L9Û}À¸ pÙÌÜRQY×Þ¿kë›ÖÅŽƒÝ×~µeíZ®½kûÖì>àÜ`px*'¿EE8wéþóž/ÖãĈkÝ×fµ_}²v­[˜q­û€Ãq€]ÝÃg/ÞSr Z?ü´'êÜé¾¶©êcµ_mÙzÀ˜;Ý„ƒ»ìY^ V6ô%¥W«Åå/W­'Š"º¯ júLíT›Õ~­'ì¹Ð}@ø¸ À>“Ó‹×K:Ô‹äÌÚ¦¶þàFÈz¢¨ðw÷µ5íNÔ7j›Ú©õD@¼ðw÷GÅ]ÏÊkV;Ò/7õF­Ç9~>î¾ö¥­éë´AíÑz ¾ø¸û€pŽ? ÐJª endstream endobj 254 0 obj <>stream H‰ì×ËKUQÅñ¿!D!‚bh ƒ&‚”@h"4'‚“Bšäƒä††(du ¢¡DÔ…5" Å””°Ð2 ­´|´‚=Ô{îùí}ü~ñŽ\{m–··÷©k·Ç² cŽ\(«ŠOÎ,ZÇ Òƒ‡S:—¾[ ’îH7¥séÖtwÖqErû€=ã]þíãÊZ]l =·Q_úA­#bÛê5‹ØöIâ]vâå«÷eUq%«0ÖÕ3j'QÚ¾nD÷¢ãèŽtSÖq§Eiû€äñ.;7˜˜Î?Ѯɕw$Ff­ã$%Û×-è.tÝ‹nÇ:àhlÞ`WÖ¿n\¹þ8³ YÃ9]ÓûúͲu¢=ò}ûj^ýëº ݈îÅ:àß·ï°–?×6ôk;yM ­Ã«ŸÖ­íš¿ÛWÛê\Í+¿nAwað‰¿Û¤ï°gÏ'ß–VvkAÙÅ-·ûÇ­ã쎧ÛWÏj[ÉÕ¼ú·ŽøÇÓíR„wHRßÐÄáã—µ£’ŠÎ±ñyë8;åÝöÕ­Vfµ­Î­ã¾ònû€”â]’÷eíÛ¥ŽGó/jMÕçï-¼[±Nôm_}ªU¥UÃêYm['<æÑö!à]‚¢[Μ½ãË¿-^l_ªIõ©¨êV ['¼çÅö¡á]‚56>_RÑ©Yå–¶õ MXÇù+÷·¯öÔ¡BªOµjˆ÷·ï ñ»Ï²‹[4®ÒÊîS ÖqþÀåí«1õ¦xêPMZÇ"ÅåíÂÇ»¤Èê§õ†Öጼ¦´œúÚ†þËŸ­ýÆÍí«%u¥ÆÔ›ÚS‡Ö‰€¨qsû+¼ @JÍÌ-®éÕÊ2 šÛo>ÙØÜ²Nô“kÛW3êG-)•SoÖ‰€hrmû[¼ @#³GO^ÕÖòO´&¦­ãüàÔöÕ‰šQµ¤®¬ãQæÔöæx€pllnuõŒfÆ´¸SÕ·fæ–ló8²}õ 6”Dͨµd›ˆ>stream H‰ì×½K›aÆá¿¡ H@(¸8Y„ HA\êà"¸ÄI\œê% µ‚"­.*d Dl¡Bº¨ƒ … "**JÀÏhÔÞ“è¯×A¾À]<”¹Ë~þöëõÛZÃîÈþaÚµÖîᆭӌjªy5µfw­5€gÜ}€‰»xîôüªw(ªM Ô|ú~s{ïBS7w_i.M§ŽšTóºÐÀ‹¸ûwð‰äQÛû¯ÚÇÚÖ©•XÂév®í¾fÑDê¥é4£ÓíäÆÝ˜¸ €¯<ÿzjéœuôד »¯üšÂµ_¸òÁݘ¸ €ßÜÜÞO†7õcÚÍÞ¡èñé…]Ý}eVrÕךE9Ñ€Ü}€‰»øÓþaº{ ¢õ¬jŸžgî²öÖwh÷•Si•YÅ•_SØ[@‘¸ûwð³­ÄASGXKl›‰®ïÚXÙ‰ÝWBåTYeVr+° w`â.þ·Ù®iiUÛ{“©[jÚ»ûJ¥l*¨œJkKMNàîLÜ $\^eCk•ÁÑŠºáþ‘ØyúºÈ‚ví¾’(R)›*g‘8Š»0q€’Ú;ëê[ÖÎV7NÌ-mf-—*~÷Õ]”Du”JÙ,—àî>ÀÄ]JÎxªáÝm®þêßÖŠ¹û¶dà>î>ÀÄ]JQöáqni³ºqBûÛÕ·œÚ;+´‚åÝW/uÔ·ê® JRhâîLÜ t§¯ûGbuÕÁÑÁÐÚåU&ÿo-ì¾ê«‹z©£úª{á‘xŒ»0q€R—L´÷,j‘kšC ‘í<¿*t÷UYõõ‰z©£Õ°<ÆÝ˜¸ @yˆ®ïÛf´ÎMá­ÄÁ?ßç¿ûª¦šz¬úêbGXžáîLÜ ldî²Óóñª†q-u÷@dÿ0ãq>»¯ ª£gª©ÊªowdnãîLÜ ÌŸ^ôEµ×ú±ÉðÆÍíý‹Ïrï¾¾Ò·ª 7ª¦šNFàî>ÀÄ]ÊÒNò¨¥sVÛ]Û:µKüý Çîë½¾Òÿª‚ê8€sþ0b N6 endstream endobj 256 0 obj <>stream H‰ì×ÏKTQÆñ¿¡h#B®¬@1*nfD‹7®"ܸ‰ ‡Á!DÍ[hµHAŠaAQ‚„ኢ"’LøsttzBަ93rïaî|?Èp=÷=ç¼›—‡›NôöÃÌ™Kô›€\y¯ýêYZ×[Û p¹0‘ @±y>üåâ6 þþŸžµb»).!÷&r(6¿W·î·DÏ^þû1¨_=kÅvS\BîLäPg¿1Ù×ùºE»t£îͽYö‘û¹¨•ÄFS0ªù-© ;ckëÉœ¶ç7ûºEwéFíÕíê!§í¬#÷&r(8ÉíT÷ÀXiuXÃ[ß88·ÈãÓ̾nÔ½Ú®Ô‰úÉãVûð’? 5³Z endstream endobj 257 0 obj <>stream H‰ì×ËK”aÆá¿!$7APƒ ‚.2h#áB7BB … Dà"ðPÉD& Ð#„0‰Ä\Ô@Ú"¡¤RBCKÑ<äØ¨Ý‹°O!0ç{êïB†™ÍûàæÁ ézþò㡵útÝ€鋿•´(¶…e±øÀØ®ßI?ûª®ôˆúQW»~€MÜ}@wØ+>}þ^ZÙ®ÀfDÛ:Ó|-¬ì«õ£§Ô›:Ló5¦q÷AÜÀó +5ÑÞÌHƒþôE?Ó3Äì›h€!Ü}@wðÜÝΡ삨rZZÙ>’˜ëÙг¯ÞÔ¡ÞT·ê9¬g„‹»â.ÞŠŒ–Å”ÐÜ3Í}ñÑp7”}õ©nõ²:Wÿá> }Ü}@wðЗɹsÕÊfV~cóý×ÉÕTè%Ìe_ݪgu®÷5…f ½€]ã €W—’õMý‡s¯*˜UµOgç– 2}u®þUB³h"Íe¨€ÿÂÝqtö ;uK‘,®¸÷nä«ÑZv²¯)4‹ i.Mg´€à €††'ŠÊ[Æã§o?é}o¡¢Íìk"Í¥ršQ“Z¨à_¸û€ îàÖÔ·… WºÃ#y×oÄ^ý\ùe§®åìk.M§UTójj;ulÃÝqW’«©Í‘Î_îšœúa³º“ìkFMªºšZ³k6«Øàî¶â.Nt¿ø)¾£ô•· OØoÀaö5¯¦Vum@{°ßpq÷AÜÀ²‘ÄtqÅ=åîèÉ›ºÞºjÃyö5»6 ´ íÄUÀAã<û¯pkfç–«ë{2rê2# õMý‹KI‡Íø}m@{Ð6´mFûqØ p@ø}€?¸ €©µõØÃ7YùŠÛ٪ljñ×y”}mC;Q3Ú¶¤]¹îØÏüÉ>ÀÜÀ´¾øh^I‹‚¦ÏøÀ˜ëvþð-ûÚÌæ–´1×íû–oÙ¸Å]ÌIŒÏ”_|¤ˆeDÛ:Skë®;úËÃìk?Ú’v¥Æ´7mÏuGÀ>äaöqæVj¢½™‘†ŒœºKמé§ë޶ó6ûÚ•6¦½i{Ú¡‡«ö4o³Øâ·‰:N8 endstream endobj 108 0 obj <>stream H‰ì×1€0A A$®Ò"3 ©`˜Û-¾þöæVŒóÚöãÙ¯ð*=Фšô @“hÒƒMz I4éA€&=Фšô @“hÒƒMz I4éA€&=ð·KÏ endstream endobj 109 0 obj <>stream H‰ì×1€0A A$®ÒFf"Rdæv‹/¿¿µöó½îçߟœO4éA€&=Фšô @“hÒƒMz I4éA€&=Фšô @“hÒƒMz I4éANó 0›ÎË endstream endobj 110 0 obj <>stream H‰ì×1€@Ä@ A$®h‘™TEfŠ­·ÍZÀ„ûyóúöï#ŒÒƒMz I4éA€&=Фšô @“hÒƒMz I4éA€&=Фšô @“hÒƒs¶-Ï endstream endobj 58 0 obj <>stream H‰ì×ïkÕeÆñ¿!›© ìA”ÓµBCeÒ¢=PIi)CK2¸ãtlÌšNeš#‡¥…çkЦ¥)¸þÓUŽƒ¿ÖƒÈ0/âõ•5¿ç^ý¬éâ_։϶î<ÍMã¯õ â³XsiÄù¦½ÚûáÁ‹ stc2=Ùz"‘Ôª;u%3owþ•å{/\ê°GîÑ^›† m÷ëS~am¼»Ïz"ñ“¾%¥È.,ˆ22d³žHîÑÞZ1ݘC¡'Ó–­ÇI‰–Ö®¼U_rÏÓs+j£1ëqdí…pª¬i˜™UÂѤe\v<1”´žH|£ïAIòê“òdŒ#ͬ'’´÷ɆLOæhèÌ4gëqD&MOïÍu‘z–ÂŒÌÍ‘í?ô$¬'’i/„ïåýOL›»‰š³ ô`ÝEë‰Ä+ú”T ©È+®ÙE‚iï‡ö~hñ^hËtfš3ý™m=‘È„$ïÜ­þê|°V¬ý¦µíºõDòpÚ !ÇÛY¸lgÄïÅ7«._[O$žÐ÷ L.Ò饷vaEjiö~ÈñvhΜ-š.M£¶žHd/Â!ÎÌ*©¬i°žHœ¡ïA+†œáÚ9$ö¾£´÷Æ»£uÓ½9Dz8mÜz"™¢n ÞÞRuzÖKaMQ]¼»Ïz"?íðó k9G~é¹g›®YO$Ð÷ <¾† mdK2¤ö¾Ó´÷=À¤sŽ´q:9ÍÜz"™Z¾­¿ôü¢Ï¹‹ß©ùµåoëqd¢´¼kîÈX\¶E+÷µwöZO$¡¦ïAy$ y CÎXO$¥½ï z8mœÓ¤™ÓÏ­Ç‘)[÷ÚŠ}ºužÑ^ðÌÞƒM³³·r¦Of¯‹Ôß¼m=‘„”¾et¤Çú’£$ ÷„T![¬'’É¡½ï:9Íœ3¥¥ÓÕ­ÇoÅ»ûÖÕqÓfe•”î>£†éíÿðBùT‹“Ñé{PFAnÜ’„<ÑÞ÷‰ö¾x¡ôsZ:'Kc§·[O$^I %«ö7K¡`C´½³×z"™dÚ ¾âµ.Z¹Ãå—±¸2ÖÜa=‘„‹¾å¡ÈŠùol¢ƒ ÑÞ÷ö¾¯x­tu—ÞN{§Ã[O$>¨;u%3o÷*giõù_Ú­Ç‘”Ð^ðÛÙ¦ké¹AµË/¬w÷YO$a¡ïAy@wÏ)ĹAzXO$)¡½ï7;½#¦ÃÓä­Ç‡µ´v-Y} صјõ8’BÚ SAeMÃ̬zú¼HѶ“‰¡¤õDbO߃r™@2\ ²‚İžHRH{* ½Óá9hú<­Þzq̾Áu‘ú´Œâ™›7–èHXO$©¶½ð¯‹ò÷ endstream endobj 111 0 obj <>stream H‰ì×1€0A A$®Ò"3`æv‹¯¿½9þcœ×¶Ï~}€WéA€&=Фšô @“hÒƒMz I4éA€&=Фšô @“hÒƒMz I4éA`…[€†eÏ endstream endobj 59 0 obj <>stream H‰ì—ÿk•uÅÿ†ælÂHûòCÔ¦KXC—RÑe*(˜ D‚Ö¾±u-Mg+u '¦3]±a5‘vQbÓ2±Ku±Ålk›îêÝìµ!6¶»Ýû~ž=çÅÃeûíÀç}Þç}îÜ1¡¯?¼*÷HBJÞ}Oæ%g”ù梵"aLñ'ß3 üZ Æ|Y×ÄN`Øl v…µ"[êNµðÜüZ ±/o KJ+LLÍ__p´§wÀZ‘ð‘Á¡òªÆ™ól‰å9‡Bm]ÖŠD(Øìg!°”û>A¹ï+ð5W=/Î…Ïϵo­H¸—“?þæ„¿õÁVk9"~(|HÍñK³2θ,§ª§wÀZ‘0@}ÐÏàúor–Û€`­HÄå¾á¶¹ó¹ù­å×jëZž3 É%åU‘Á!kE"®(ü N/ùôäýs xý¤´Bþ–÷ý†ú ?q¼ëy}6€¼ïC”ûþ§sçsíóú\þÜÿÖŠ„+èë¿¿í¡˜š¿¾àèõîÖŠ„Ê?ƒë³×`øÎÜRlµV$â‡ú Áã<³Å±<ÞWîû徟ÁõÜü\þÜÿ´º€µ"aɾês=û áå×+›CÖr„ÊÑÔÒñÔK;qAöîP[—µ"Ô}¾ÆÝŽÍñ;®·V$ÌPî .îÆ€.@#°–# 8{áÚÂW‡C!mqií‰_­åc” Âá`íù䌆!!%oí¦š¾þ°µ"[Ô}^ÆÑÓRóyn<ŽÓ­ c”ûÂ@`è´k9"N\iï~ãjÞ}FzñÖò`øVÄZ‘°G¹ F`'¼¨Küçn|`nÑöŠÓÖŠD Qô¥{Ïàe_ãn徸£Üÿ@# 0tš‚µ"CnÜÞ²ëç¹×m®íø£×Z‘p Êq쇬7÷1|/Úvúl›µ"Ô§68ÿ:FÆÑÊ}1‚r_ÜûvÀTÐè ´kEbò©þöâÏÌ+?÷ÚžŸšÚ­åw¡\÷¤áüÕ‘cò…íY+“ŒúàT…ÓÏ:æÅÅxÙZ‘pÊ}qOè4fƒÖ@w°–#&_š_¼j¯ó²_½`-G¸å‚…=f¤3!‰©ù¹E_߸m­HLêƒSŠOq+/‹sñ¯µ"áF”ûbè ´&„A°–#&Äõîë6×òšÎ-*Øñ]_ØZ‘p)Ê1:lµ›j¦ý{aîÿêgkEbrPœb¬=CySÜŠg•ûâÿPî‹Ña{ÐhÌ m‚Na­HŒ›ð­ÈÎÊ3É%<âªÜ#WÚ»­ W£\cM²hY9£Â7çÅç.^³V$&Šúà”?âJÇžøT¹/FG¹/Æ›„Á¨Ð)hô kEb¬Ô[Ó—òv™Kw.[Ë@¹ ÆæÑ…:gçÒ·>¿Þ}ÃZ‘ˆõÁ)Ì^sÀ±$Þġ֊„PC› S00ô m÷Óê\²z?ï5s~`_õ9k9Â3(ÄxÙ^q:)­±™>»`óÖú𭈵" ꃞßá><È#âG\i­Hxå¾/4 úcC× qXË÷ §w`càXbj>‰Àük­Hx 傈öÌÊ ‡Ròž‡æ}Psü’µ"1nÔ½ Ž›•9|›áAœ¨ÜãB¹/¢À©t ‡ê†«ˆ •W5Μ? KVïµuY+ÞC¹ ¢†óô+eÌ_zVYSK‡µ"1Ô½Hs¨¯9¦Ã}Ê}Ê}5ìóCû ƒÐD¬ù`ÃåÌ¥»œ3¬>Øj-Gx傘 5Ç/ÍÊ 0E )y+7îé°V$Æ„ú ·ÀYø —ñj8ßY+^E¹/&½ƒöÁÑDè#Ör|Êå«.Ï9Ä+$g”ì¬<²V$<ŒrAL¶Ð{Ûê§Ï.`–’Ò Ÿ²VäVþ`ßãô½ endstream endobj 112 0 obj <>stream H‰ì×1€0A A$®Ò"3)a˜Û-¾þöæàoÆymûñì×Gx•hÒƒMz I4éA€&=Фšô @“hÒƒMz I4éA€&=Фšô @“€µ[€îÏ endstream endobj 60 0 obj <>stream H‰ì×ÿkUuÇñ¿!·¡ É0Т¼j‹µR˜"1ÑGT¢‘ û¥@ËÝ]]6³ÍeÍUlfš™ÄÖ¤ò:-/²º©C6˜èfÎ+îÛuS{nÇ2¬~ðÞó>÷œ×ƒËÐßÞ÷Ü×çó>¯;w¼cóGGzr#­‘ÿW±óØÄÙeü^Y3Ãïl‹ŽÞºm=‘¤±~>O–øk=ˆ¤1n¡êúãSòÊÉÒò5ûº/]³ž(@úáªæìœHf¨tm¸©/>h=‘¤=íIn¤%«ö'>Óò+¢±Në‰ä¿¨¦Î§É9Vœ/í}ypÚû’,ÜHôZ Ý„†BO±žÈÿö6žš>o+G¸ ¸îtÇeëqÄ'´$¹N¶÷ÌZTå¼¾æ/Ýy±7n=‘ÜŸú Çqvæ½Të%Î'Ëz"ñ í}I.Z Ý„PÑSh+ÖãøVk[ÏüecK!´°²ñð9ëqÄW´$Ø6wKá³Ö‚ú ›H5Ùæ“sÒ®½/†´÷ÅœS…èA´¡`V¡]NN3¶ŠVîîèúÃz :íñˆ3ç¯äî |ž+ú¤ëÂUë‰|N}Ð$yîâ'Ø$œœ[O$A§½/A¢ ‘FšýÈz—ÄNt;KavÁöh¬Óz‘1Ú â) ‡Î>úì{drÂŒ+Öí¿~cØz"ßRL5ÒK†I2Ï™T“më‰DÆhЉhFd’–DW²'….öÆ‹K¾á›NÉ+¯®?ž¸9j=‘È]Ú â5Ü>ˆfÍ “ÌIO•U~Þb=‘?©¦¹”á “dò¬½/Þ¡½/^à I?¢%‘L½Éz¢$ëH„«š³Ç—ÂûâƒÖ‰ÜC{A¼‰ÛòÅ×¾ œ|¦åWDcÖùú`Šié"±Ntɰö¾xö¾x·%]‰pÒ›hOt(뉒ã릶'|È÷*(®;ÝqÙz‘ûÐ^/;ÙÞ3kQ•ój½àåÏ.öÆ­'òõÁ¤#Ÿ¤Ô‰+¹%½Ö‰Ü‡ö¾x‰ÞDDéP4)ëqÈogzç/«u¾ËïÛ­ÇùWÚ â}uû['çn&¨¡ÒÕ놆G¬'òõÁ$"“o¾ûùä‘’Uk=‘‰¿˜ð> endstream endobj 113 0 obj <>stream H‰ì×1€0A A$®Ò"3˜€n·øúÛ›þiœ×¶Ï~}€WéA€&=Фšô @“hÒƒMz I4éA€&=Фšô @“hÒƒMz I4éA€¦Õƒ·SÝÍu endstream endobj 61 0 obj <>stream H‰ì×ÿK]uÇñ¿¡%lAhÐä&‰$B²MØ%2hXÁì—\ßc 5t3Å5çÒm¨SÐ"kp)nJ %­¡Õ¦µ¦Ì$ ;™Üá׫Öz²SþPùýÞû¹Ÿs^.Ð{ßžóºŸ÷}Ý¿/6øâ«¡‡öólz‘ù?ïOöUÔ¬ë¿7=Ά'¦ ŠÌŸ˜^v¦öë¹ùEÓ‰¬F{A¬ÀYz¢´-!¥Ä9]ë[®›žÈze:¹˜<›Äz¤‘Lr1É')ÕÞ—8§½/Và,¥I9§+ÝŠ†ez¢u /,U^¾æŒ_虞HdmÚ bÎU_^‰åñØ¡s}ýc¦'²˜úàÖ‘Àd_•H’©½/VÐÞ‹p®ÒªH, ‹žEÛ2=Ñj·S³«™öÀóu½·ôE¬¡½ ÖéîÙ“Ué| Ï9Úœ˜2=‘•Ô·‚Ô‘='„¤‘LšžHd½´÷Å:t+¹¥mѹLó?‡ï<órî>x¶Ùßgz‘Ñ^KoìÞ‘VJzRJNž¹^X2=‘eÔ7‡¤U¶“:® $‡¦'Ùí}±=‹¶Ezi^ô/Óãüm24{üT+Ka{êé·ÏuLÏ„MO$²aÚ b/NÝ×O~ºm_1NÊ(o Ü4=‘MÔ7Œ‘4®©#{Úûb#í}±§.‹æEÿ¢…ÑÅ ³ôÇŸ—?ºá,…#Ç>¹kp‘­Ð^ÛqïÏ­#Æ<žÈ¹004=‘Ô7„\¥ç\tbFÞ´÷Å^Úûb;N`ú1¦‹ÑÈèe±Ÿ¡ýÚÏÎRà¹ëÛ_c?€Hi/ˆ;á]™Î×õÜ7>œ Íšž(Þ©®Ó½©yåD‹Œé´Ûiï‹;Жí,fï»ÜFy²ÂT‰,íq ÎäòK]ÛSOižùY§ô*ÔפD‰+iï‹kp&ÓÈèeDšŽFS‹êÛMτߪ¸Ê:HH)9~ªõÞÔ|TßN$f´Äe8Ÿ_(h!Õ¸ÒBfœð"²dz"‘HÒÞW¢£ÑÔÈ6­îÁWþî‡ÑÌõ¼rjvu ãv_Y$Nh/ˆ‹µn&e”“ðmûŠ_}ó“é™°é‰âˆúà‘rBZ¸2$‡ü˜žH$ò´÷ÅÅèk´6Nƒ£ÇmñÕFÇCù…~^-1½¬¦©'¼°‘!Eâö‚¸§wQe{BJ 9ß‘Vz¾±ÛôDñB}ð_È áš2£½/n¥½/îÆéMw£Á‘sÚn/27¿X~©k烥PPNLE|N‘ø¡½ ^ÀIžs´™¨óØ“UÙÝ;bz"óÔ—‘Ráăœhï‹»iï‹p’Óãˆ:ŽfG¿[ÿß^i½•ì«âoiøqð÷è )'´Ä;úúÇö>8áyøòFÇC¦'2I}d€$8‘ $ÄôD"Q§½/ÞA›£ÓxúÝ:ÿ©—ß§F{<‘8¡½ ^Sßr=1½ŒØ'¤”œ(m››_4=‘ïƒÜwî>à"Raz"‘ÑÞ¯¡Ù­ÙƒSE>;ÓJß©éôìwñ&íñ ÎùcÅŸ=üOh¼Òkz"¼Ü¹ãÜwþ}2@´÷ÅS´÷ŃV9çà K5M=Iå|.ò ý£ã¡X&´ij8ó}y äŸÇãO¿××?fz¢˜òfä.s¯›ÎÝ×ÞÒÞYÖöåO©ÙÕ|"2×öôýfz3´Äã:¿ùåÑï:áÙWÞŸ Íšž(F¼Ö¹³Ü_çFsǹï¦'1C{sþ`¤, ¥ endstream endobj 114 0 obj <>stream H‰ì×A€ ± !$­üÃ2bnk±¹žý~”üÓr| Éš| Éš| Éš| Éš| Éš| Éš| Éš| Éš|Û¦$Í endstream endobj 62 0 obj <>stream H‰ì×ËKTqÆñ¿¡TŒ „[¥IQBÒ…V¶pQHíÜ‘´Ikx1#»‘JXÒb"£œE—!è AI˜CIв»¨ÖCgÑ¡¬LgxÏ9óý0 ¶{ç}úñð~û†@yÚ¶»cÁŠŠe›·_|h=`éêÍ>½}[X:zæö¢Õ5z i9U‡šÂ“1뉮îÄuý^}[’pJS™*Yý^¥¬¬­',ÑûHr£cãûk¯¤fW¦çVl¸¦ZO£‡¡¸´káÊ ½ˆŒ¼úPO¯õD‰•$÷ rTšú¥JVùÒû½¤›šn»péú={;£ÃÖž@/nj‡üí§õ(ôY[xòIß õD‰ø{PÙ)A'JeJïzÉ)rï…S úGú­Ç<„^~êéÍÌopN‰âҮѱqë‰â/À÷ òRjN|ÊQiZOx½ä¤ÿöyõ§ÏÝMM[Ïx ½ÌH}Q{üzZN•Hznuý©k@ÞƒÊHI)/ý4e§–0ô>’Ó¾ªËïG>[Ox½ü…º£hÏy½}²66†#ýÖÅMðîA¥£Œœ°”½̈Þ¸Ñ À?=éÌÝzÌ946µ¼xõÁz¢8Ò=¨D”‹Ъ‚fåe=à]ô>À^f©óÒ£Œ¼z½—”ìÊ’òÐÇOÖÍK0îA¥ ,”ˆ~‹ÒQFÖ^GïÜè`ö&&cj¯¤þ¸>­®9ÕqÇz¢¹ À=¨ý+ý %RVÓ­t¬'|€Þ¸Ñ Àÿ|;V¸«]GŸå[ŽÜ~0`=Ñ\øúÔεy'e¡D¬'|ƒÞ¸Ñ ÀܸO’‚â³¾;I|zjÏÚ¶³ví_)XOø ½p£€ùhí¼·xM­QjveYM÷—ñ¯ÖÍ–ïîAíVÖž5¶v®Í[Oø½p£€yúøi¢¤<”òãNY²®®óÒ#ë‰fÅ_÷ ¶ªÝj`íYÛÖέ'üŠÞ¸Ñ @\¼|3²yg«^“>« š>~m=Ñ?øåÔ&µOg±›v´jÏÖþFïÜè ŽÂ‘þ¬ÎñR´çüû‘ÏÖý‘÷ïAmO;t–©­j·ÖA@ïÜè îšÚ"é¹ÕzYi9U‡šÂ±©ië‰fàå{PÓÞ´=M¨M6¶Ü²žzàF/‰0:6^\Úµpe…ÞWf~C¨§×z¢_yöÔ®´1ͦíi‡Ú¤õD@ Ðû7zHœgÏß­-<©'¦þˆ [Oô“ïAíǽ®§Ñ!뉀¢÷üê» oÛƒ endstream endobj 115 0 obj <>stream H‰ì×1€0A A$®Ò"3©a˜Û-¾þöæVÆymûñì×Gx•hÒƒMz I4éA€&=Фšô @“hÒƒMz I4éA€&=Фšô @“ø¯[€)Ï endstream endobj 63 0 obj <>stream H‰ì×ÍKTQÇñ¿!Ë \H¶2KI\”BQ­fE-la›(µHÐÉÌ ³°z¤Œ`„HšEoXAº‚D $CdzìWâÔ"ræÞ{îÌ|?\$‚9ç÷Û‰´ªê‰Â¨?ê’ze;͘ûsðÍØøT¨îº^œ¾â­ñÇo-† Â>¨¨NCÔõÇb G0÷&æà³—o>¬ÙzÆY‚ªw^þ8n%†Ý}PU«v§ ê†zb%ƒ˜ûs°¢«çõ²Šz} W7í?›L$}`kT¥ªWUëvu@}ð9ã˜ûs°åËô×úæ;‹~mFK׿ØõÜÏۭ샪Q•ê^U­ÚÕ?o0ÇÜü‰¹Ø5òibË¡¾•Õ§Ÿ½öç^Ÿ÷AÕ¥êœ27jîðæ>ÀÄ\‚ ïÅÐïu©¦öªë’oû jQE¿^Uêõþ¹01€à8wåiAy³žä¢ÕM‡#w“3³ÞÝåÃ>¨üGZzU‹.R]—Ÿxw€ÿÄܘ˜ @ L&’ûÆþÚ¡ +#]=¯=ºÈë}PÉ•_W¨U¤º<ºÀ¼0÷&æ@ï†F«Bz›úʶuôޏ~…wû Ò–m?ë„WªÅõ+¤Œ¹01€ÀŠ?~[\Õê,V¡ºëcãS.îÅ>¨„Êé^¾á¤ò»x8W0÷&æd³ß¾G.¨ JâDR6%Lç4>`îLÌ ³Üîí/¬ŒèÙæ•4î9Ô=™H¦vNšû îÝ[Ktˆò(Ujçðs`b.'93ÛÐÏ/ ëñ”7·GûR8$}P7ê^ý\”DyR8€Ì}€‰¹d¨Oc‰û®éýê+ÞØúèùûyý<µ}P·¬Øtʹ´¦öª2Ìëç¬cîLÙ>~0¬ûa endstream endobj 116 0 obj <>stream H‰ì×1€0A A$®Ò"3 )€™Û-¾þöæX7ÎkÛg¿>À«ô @“hÒƒMz I4éA€&=Фšô @“hÒƒMz I4éA€&=Фšô ðG·‘¹Ï endstream endobj 64 0 obj <>stream H‰ì×ÏKTQÆñ¿!5r!¸hѢȩÄEHQmÜ e³ WBBHaáØ0R”L`¢ ´(CÒ(Œ¬ÅlD š ƒ( bHj6jMONùkˆî\»óýpîœóžsÏæðð&“€§F'÷¿±mo£žrÇÄÔlš C­CZ¢ß4ëµ³ö7ÒõÝ¿=27=y9¦[¬_·ØÈÀÚ»‡ JBºË¹¾ÀÙ¦þÅÏË›.I¿ÔnÚS;«^_Ñ·þÅ‘¸ƒÜØÈÀÔµÕÒïÚÒìíNSû§ÓiØÊÈ}€\¼dbj¶Üß¡K­§¨"<\¯rÓ~Pk}ÇÂf+í©92€Œ"÷6rðžÈHlסk¦•«¬éŠOÏ­®Ù T½V™åÚG»9dBîläàUáÎH~qP|û¾¦‹×K+öìšý jT©zMi­vÈì‘8ŽÜØÈÀÃæ5ç{sŠuÍ K›ïõ¿IM­îï?ŽªFƒª?}îÖºqdÎ"÷6rð¼ñØLYU›nºž’Ê›oÇâÉßûAhܨRõn€SÈ}€\²ÄÀó÷;^1MßÉ3=—Zõ¢ßêº3¨ÙGÏÞ¹}LÎ"÷6rÈ+_¾6ßz±ãÀeÝú<_ õ«kÖíp¹°‘ @¶ù0ûéð‰v]|óè]#n @†û¹d•ñØLYU[ª4F4îöÑd¹°‘ @–˜_HÔ6ôå}o K›«ëzôrªî®Þõ¢qͪÆícp¹°‘ @6wFò‹ƒºìy¾À…«OK+¡Ö!ýÕ¯Þ5¢qýU*Ý>,‘û¹x[d$¶ûH‹®¹žÊš®øôœOõƒæ¯Æ5kÊT¯UÈ}€\¼j*þ±Âß™jñF£“öìý ¡š=G6åþíÙ#p¹°‘ €÷,~^®äùºÝ%¡öîáÕ5köƒ†êµJ³ÚAûh7ç CÈ}€\<æÎÃצ›ËõjúÖëæ6è“?:J­ÍýÕQÞî}åà‰d¹°‘ Àÿë›éÅö endstream endobj 117 0 obj <>stream H‰ì×ÍnÛFÀñ;ú{1`½äîÒ9ÙpœªPZÀEPA`¨¶’¨¨dÃQøÚ·êµÑ—IwI‰’*ÊIµ9ðÿs 0£%93"¹Üÿµ?ÿúû›ìðùµü¯X@7±€nb=ÝÄzº‰õ tëAè&ÖƒÐM¬ ›X@7±€nb=ÝÄzº‰õ tëAè&Öƒ€î88x:»9ÍGi2ü.MNûÅUˆ\ŽÞÍÇ÷iòCšH1ü? YYjU86lî¤ ÒºÌã†4¥ÖaCù¸7–ƒ §‹¼ÃQ<ŽÌŒ²ú>¤IO)Ÿy]hál‘Yc¼˜¦‰6qwk„÷Eø6wb&…+3­¬_ŒAé3WšRäÒdÚyƒÍîʪL)S{¹Ïr©ýÆÈ–Ó‡èëЉ«ãÓûùùäz>¹îÄIŒöT¨FºÒ‰ãŸæ÷“Ùqxvvz}ý~zy;ÅÁGâÛ8ôIüHUµïýªj­ø&ÏÂæ™Ò®Ü¬]»,´¹Œ©¬ô²´Â–¡Þ¹*›½wC=yªWJ­Ž°ëT­GØÞ½>ìV^Ó*æÊÒ/cz‘ËÎŒ}$ÿ¶B_¯5RfVÚ<ž¨NJ«ÅQ­[eÚ?§UÍ1?§UŸlvkMp½)»šÚzY´up3fÝΪ¾èRy‘&¥8<ß·/ßÌçF™xS;Yx¯ë‹yuÏ›P‹ÏWGâ=ߜǕyf´·±œó&$gãM­ýînê2+ŠðiØð±{VŠãþl.OûJŠëÛéÝíûÙx÷vt7ÓÛ›ñæýºu¾OþöƘ¬Ô…_ek­Èó2“ºn~¬éŠ]uí©„·vÙí"ßÈ`[Oµµ¨Öò[~¿=¥ÿÈå·=-L—Ïu• §óp?XÕ’³Ï׿Šöë3Íž*Ù:ßöµä7Û®s…+ÃíœÙš`}ÌÂîªkO%l7wº6“®'Ñ:½¶ÖÚ‚Ö_qWT|H¹8õêÅÔ[MÁ7ib——Úàlõú3=Œï{½Eàlüf2«Bõü­š9\ ]á)ÿIQÄÐà—49¼è_< iÝ=‰ÁlW ÇÃçƒýsq"ªñWõø'uQWa‡ðåfRœ.o‰Í÷)¾[¿†Ø‘‹çâå+)nÒðÝ墄‹Éoã“õr–/x¡øpÀgir|>þ}r=¾|v&†á­ïe|Ç SKxTÔOøÅz&¼õ)ïféWBir)u•ÊÛ/رê_³ójË #ä¢ÇááDžάã‹êI˜-ãè<¼±ö“¯ýþ ؇H^J endstream endobj 65 0 obj <>stream H‰ì×ÏKTaÆñ¿!®$7AŽšÁ,¢…‹‚ ]B›Ê¥n gh)4J1 ‚j®FB©i…R ¶i("™Ô±,{ê…xƒ2çÎ{ïä÷ÃeVsÏyÞ /‡³±ñ›§Ïß6¶íØÓ«çðÉë éÌÆß¿òPÓï&ÿQÕ1UYõ7ù3€’poú•n´~ýæðX̬œ8sÛ,nuáÉ™ù¾²•}ÐP5Õ4ÅŸ¾¥^nDàæ>ÀÆ\JÚÚçõs'+út‘«öFo<Úâ‹[ß UV}½¢^꨾N#ðs`c.¥+9‘Úuà‚®pY}oGרR6·õwóÝEõÕE½ô¢úª{þ‘øŒ¹°1€RôâÕû}G¯êòêÙløõ›ùVp°êuàøˆi­ J’o>bîlÌ ´,es]ceõ?Ö±Úƒýɉ”³:Ž÷AC}Õ]”Dy”ÊYcîlÌ „ôLïlŠêÎV6ôEï¯ýæ¸Tû ¨{ôò%Q¥ŠO9.À3Ì}€¹”„É™ùºð€n«ž¶³w3+,|4”DyL0%TÎ (*æ>ÀÆ\n! ·š…«±uh6•v¥¬[û ñìå;e3!•V™]) ÀuÌ}€¹Ö§åµÎždy(¢KZÓOŒÏ¹XÜÝ}ÐPBåTYeVråw±8W0÷6æL׫›cºž¡Hwìîjî‹»õ‹±Šr*mÅ϶ª9¦S¸[@˜ûsšGOÞì>tISÏ‘S7ßÈ£K‘öAC™•ÜAgщŠÑ€Ì}€¹‡—kTQ÷AÛÅ@^˜ûs‚ÕÜ—îØÝŠPD÷±ª9v-ñ¸Ø=Ø ¥º9¦^:Ψ“»#€M0÷6æà»Äø\MK\7±<éìI~Z^ó ©gû èD:WùÏmW'Õy=h à˜ûsðѳ—ï[‡tõ„ÛGÒÏZ{¹:Îh«SϦҞµð s`c.¾X̬´½c–£ºðÀä̼Ç¼ß Tç5×Ðwð8°Í1÷6æà±õ¯ß¢—T6ôéêílŠÆ‡§|‰á×>hôLëì  ï¼¯oâK `bîlÌÀKɉTíÁ~]º²úÞŽ®±¥lί$þ³ë è;(†¾‰¾Œ_IPßnðè¿ endstream endobj 66 0 obj <>stream H‰ì×ÛkÏqÇñ¿Á](irC¶a¬Ñâ‚)Vh´RRÅI‰2–9DSÑvá´åØœÂäv#§lbÙÅõK[cÌ~3æµ>ÒÇavúý¼¿ßoÏGß~ÉÕk¯wŸÞ½{z ×ï5Ž˜²C¿ÖAÀ^þ¦æ–ÙKŽè¹éËÎ/ohŒÙæÙ]vGIôkC=¨ WˬŇՒm òØû{H¶÷í+6žMIï=yÆÏÞSsó¹u¢^¹u¢f”G-©+5fˆ,ö>ÀÇ^’ª´².uú.½²Ñ™;·¨wu['ú!P÷ ¨õ£–”J©7ëD@4±÷>ö$µ÷_Mœ»_ïKß’Õ'[Û:¬ý"h÷ £––®9åJS{êÐ:5ì}€½$Üë·my…ºðУú7Ö‰þ"˜÷ £ÆÔ›+PMªOëD@t°÷>ö@Ÿ;¿¬ÛV32£HÏjlöî['êSïAçäÅ'êP!Õ§ZU·Ö‰€(`ï|ì QŽU=p÷˨Œ¢MÅW~¿ÿu¨&Õ§¢ª[5l=ö>ÀÇ^†ïQý›Éóê)éË+¬xû`¨¡¸õ¹ °ÒÕ;iÞAµm1ö>ÀÇ^†#ö®=ÕñŸ§JÝÃfëD¢{ÐQ·jØU­ÎÕ¼u" ”Øû{šxW÷Ö}7Feé¥f—VÖY'œÐ݃ŽzVÛJ®æÕ¿¦`ö>ÀÇ^† êÒÓq9%z;)é;Öm«ùø)nhÐBzŠÚVçj^ù5ÍÂ:&ì}€½ JCclf~™^¾9G›š[¬ QxïAGÍ«7ˆ‹Ê4ëD@8°÷>ö0@­mkO»$-woíýWÖ‰†%ì÷ £)LÈÝ熢éhFÖ‰€ cï|ì _Ý_¿•¾;fÚ.=ýêßúëPÃ{°'¢Ó’‡½ð±€»zûeZî^=}ËÖW¿oï´N”‘¹Íeù†j7&Íëò­Ö‰€€bï|ì /MÍ-s Žº#;¿¼¡1f(‘"v:š‘&åF¦Ùi‚Ö‰€Àaï|ìàO?ÅWm¹’Þ{VŒË)9så™u¢Ä‹ä=蜻V¯©é¯ÓWn>¯iZ'„½ð±€ß”VÖ¥fë]ŒÎܹý@m¼«Û:QRDøMM³Óõ7jšš©u" (ØûÁð]€Xûo endstream endobj 67 0 obj <>stream H‰ì×ÍK”aÆá¿¡R \D¶R+I\”¡Q‹iån¤-jæ¢Mš9”&(J$F’ä¢/¬@[HB" "Š¡ægÙ ÄEù5ž™y/"®îyÏ-gÎÒƶ×}›ö”ê§uÀ^G×À®#×õ¡'TÔ42:i(Š*k_êcê§u(Ò5G7PMVóµNØcï|ì@‡'ò îpHϯîî²NuA¸MS3uÃÕ”5këD€%ö>ÀÇ^@ÀÍÌ.”T´nÉ(Ó?ÂöìÊúæNëD$8÷ £Éj¾úÈšµ&®¹['l°÷>ö‚Ì¿ŠËŸêFÚ=(𝦬Yëƒkîš¾u"À{àc/ ˜º{†ö¿¥òëÉ 7 OX'Úh¼ÍZw£WÔëDÀ†bï|ìÍèøôÉÓ÷Ý9v¸êMçWëD6{:š»¦ïj*jR+¬„½ð±só‹—n´'g–«ó)YÕÖ‰,ütÔ5AïA­P7ÔëD@Ô±÷>öâI[ojNDmßœ^zêüã©é9ëDƸ5A}P+ô6ÔõÄ:]ì}€½€„×Û7’º­žëÉ-¨ë³N¸}j…ºáJ¢¶¨3Ö‰€haï|ì$°o“³…ÅÜ—ü¯¶¼øl(†pþI QO\aÂçª?Ö‰€õÇÞøØ HH‹?~Fî¼Úºï²êœY®ßõëP±…{ð¯\sÔ½õ‡æ ñ°÷>öOûÛ/i¹U*¶ž‚3Æ'¾['ŠE܃ÿ Î¨9®B;]S£¬놽ð±HúÆr êÜ×øý'jzûF¬Å.îÁÿRÔ"W'õJí²N¬ö>ÀÇ^@b˜šž;{±eKF™úœši~úÉ:Q¬ã\&uIÒ»R»Ô15Í:°&ì}€½€P{ï}JV…šœ”Qv!ò|n~Ñ:Qà\>5J½R»ôÆÔ´š»ï¬«ÇÞøØ ˆk]»ÞT‡õ„ŠšFF'­Å îÁ•R»Ô1W6µNݳN¬{àc/ NéËù±ÂÆß_Î?|´Ng¸WGMSß\ñòÃê¡u"`eØû{qgfv¡¤¢5)£LÕÝvàJ}s§u¢¸Ä=¸jº§¨ªê¤u"`¹Øû¢í—ÊšþÝ endstream endobj 258 0 obj <>stream H‰ì×ÍKTqÅñ¿!"‚6®Š`$HÈEµ(h#mráBÜ-¤M1¬@) Ìf0(’Þ)L"MÑ6d¨“éè˜$J¯£ÎÜg~÷~? ·y~s<¹²â‡Ï?ì:pI?}ú÷€苎—Uv¨Y§kûã‰ë8ë+òîënºžê’º§u 8мûŸ± @Ž®8Ó­NEª:Àì°Có KW»žî9Ô¢*Õ5ŦgÓÖ‰râV÷uUÝVug][7·N¸Ê­î ]vâþÐÄþã7U¢çî½µŽ³.v_Ö[7×å­ãNr±û€Âa€íÑß&Ǫïºû·‰»Ý×µus…×ýõ ÖqǸÛ}@!° ÀVMϦëšb*ΞC-m·ŸÍ/,Y'Ú§»¯›ëòº¿>‚ÞB/bp†ÓÝä»ä.³˜íê--oUkj£É©”u¢í @÷u½‚>…^Dï¢×±N8 Ýä»ä(6ü.RÕ©¾Tœé~õ&ig§Ó}½…^DŸE¯£7²Ž»Àtì°©xbætm¿šRVÙÑ·Ž“ë¾ÞE¯£O¤—Ò{YÇŠWÀºä¨áÊÐô‚u  ± €m‡¤äàåÝ‘æ í~Îe¬åMðº¯×Ñé¥ô^ì>°‘àuÈ…¾öûŽ´÷ Œe—[gŠ »¬K{¡ÕÐv¨ Õõƒ‰ÉoÖ‰ò,¨Ý×K齨}`#Aí>àíñÈÇòS·ôå×Ïg/?YÇŠ»üOK±¶Zë8ìî³ûÀF‚Ý}ÀCvùwÏÀØÞÃmª@uý`bò›u" (° Àß´Ú•B{¡ÕÐvX'*”ÀwŸÝÖøîÞ¾§~5\*9xyw¤ùâáŸsëD€1vX¥EÐ.h´Z í…u¢Â I÷Ù}à!é>à-ž˜9y¾W](«ì苎[Ç,± €h ´ê‚ÖAaÇ¡ê>»¬ U÷o±áw‘ªN5âèÙ;¯'¾XÇl° 9ýþ× ¨Zí‚uÿ„°ûì>°Êî2‹Ùë=#¥å­êEMc49•²Nø]@héw¾~óëû¯Ðh¬ù*œÝg÷pvð6=›®kŠ­þ—àZ÷‹ù…%ëD€ØXø#Àùpþ endstream endobj 259 0 obj <>stream H‰ì×ÍkTwÆñ¿¡Ѐpãªe „€.ÌB„¡¸¨›@7YEA¤P©‚™N ŠPc¨ é"Šâ Š:¦µ¢YÔ X›“Zƒ(D¬ ©4ŽäŌƗ‚ˆM'ñÞ9¿ßï~?QÐÉsÎóÌ}õÊÔÓéç{óW–6ìþè“]›wFÛÎcâç_îèíëWëA è'®Ÿ»Þ¾v@› }°ž¨ž$ß>«ÂœÿãÖpSs§äãÕß¾ðgÜSŽ 4g/þ¥œ×Ú+ó•üÖã˜áöé}$·¤)÷~åÿd÷@ùsB¦¥«p$¾ÁGÐ H¥º²½üù_io=Ž1n¿ŒÞGÒpûHŽ·{^ÿpb²”mï©Mçôo7ï,Œ§bšp½€$P’oÙu^«®lWÂ+ç­'²ÇíÏ¢÷‘(Ü>’ ’Þ0\lÙvJ/RרÖqèZéÙLäs. 6¥·2\I®=Wª+Û­'r·ÿz Áí#l‘÷~ï¡•ëòzµúÌK½w#p ½€€)·ÓŸvhÕäÊsëqÜÂí¿½àqûX|½øôïËVìÑ+¶áÈà½"|eÀ½€ )«•ØÚm¥·2Üzqûs ÷0nAªBï?ŸÞ¾çââúojR­úþÇwª^@`fãZ_Äõ¸ý¹Ñû·ÀT¹÷ïÝÿwöÁó‡ã¿Í¼xë·ª€^@H”ÌÊg­´²Z‰m=ŽÓ¸ýJÐû·Xõþ¥Þ» k¿×÷]¹.ß{c¨j߈½€0(•ÉZfå³RÚzpû•£÷na0ïý™/;]«klÓ Ÿo91ô÷ãêÏD‚^€ï •ÃZce²’Yùl=‘¸ýy¡÷ n¾sª÷ÇŠS[³Ý5©ÖÚt.ÛÞ31Y2XzþRê*{•ÀÊa¥±2Ùz"Ÿpû @ï#Ü>üålï÷ŽdZºtYËWí;V¸i=0?ô¼ÆíÃSî÷~áòíÔšýš°©¹³oà¡õ8@¥èxG«¤ÕÞ*u•½ÖãøŠÛÿ@ô><ÅíÃ;õþÓéç{óW–6ìÖ´ë¿:3úhÜz"àÿÑ ðˆruã×gµ±JZå­R×z"qûŽÞ‡¸}xÄÓÞר*…òØÙöž«}÷­'æB/À |ðŽ·•·{ߣ+H,n^Ð3”ž¤¼îý¾‡MÍš__k¿8ìã[@BÐ p_áòíúÌ-ªrUéj=N ¸ýhÍö~jÍ~m¬õ8Àâöá8=7éé©ü@ïçþº$Ó{©IµnËýXz6c=ð.z.»ug4ÓÒ¥]¾jß±ÂMëq‚ÂíÇA[ª]Õ¬ö¶pÄzà=¸}8KÏJ_~û“ž›´¢z†:xäºõDј˜,mÚqnÑ›÷UרÆç¸†^€›ÆŠS[³Ý*…Út.ÛÞ£,µž(4Ü~L´«¯åEÞ endstream endobj 260 0 obj <>stream H‰ì×ïOÕeÇñ¿!Å©[› —­*Êܘ ’|ÀÙ¦ÃÚtÓefæbS7W-& EG#‡‘©8•h«ÄŸ1Ì!4SÌ1OÉL:è8AÔÛ¾Öæ–åâœs}|^;cÀ£‹û¾>÷ÅUTv|â¬â¤”Â5EGú"¿‹¸É×§;ŸšVÀWëBDQÛx~ÒìšslJáÛº}gȺ¢»úËo™‹*ùùÌœWÖÑÙc]‘ÈCš â6Ñᑊš³ÎPXœWÏûi]‘?)ûqEßÒ½œ0¼mϺں"‘‡”}q6£ÔìrgQš“[éï¹ßÔ|eJæfçÍ]µ¿/2`]‘ˆæ‚¸ ïdZN=™±pGsëUërüLÙOz˜NæœéjzÛº‘”}q¶!v"g9bK È;)Ù~j|êFþêq3Š>Üv’ßX%¦¹ .îêu†Brz¨ªîœÞÆxSöƒN¦ŸéjN{ÁÊ}ô¹uEtʾ¸o#{ÛÝÈfÄ~´¹«péÚƒc¦p“3B‡Ž^²®H‚KsAÌñ$¾ú†q”RÈ7üh]Q (û‰ä49NŸ«ÉÅ–²/æØ}Ø€èC>ìDA~;:{Òr*œ£ÈX¸#ÜÕk]‘‘æ‚ØÚÛÐþì‹›hÂ+÷]ß°.'@”ýÄ£ÃésŽ=9=Dç[—#¥ì‹!ö¶gýab²®È½ôÌ s&c¦,]{ðVÿ uE,š b¥¹õª3R³Ë›š¯X—8ʾºžçðéR`]Ž޲/&ØqØtØwh¿I³KØ€¬+r—¡{ÑüÒ¦q3Š8Ÿ ³Š·V·XW$¢¹ ‰w­;²|}ƒ3¶í9Ãh]Q)û†èy:Ÿþç –­ûŒDXW$¢ìKâ±Ý°ãÐxì;l=šûÓxeE ÅgJææ-aëŠ$4$‘îÞ/*;>ñÏ¡°:¿‘wϺ¢àRöÍÑÿ¤€[ äâö!ëŠ$”}I¤“ßýÄ^ã,8óWÔhî?‰ö‹×gÎ+s-kÉ®kÝëŠÄç4$a¹05k ý–½l÷—µ.'è”}— $‚» dĺñ?e_ƒ-†]ÆYjØnØq¬+ò˜ÝÛžNûˆÓ›RøÎ†Ãwï[W$¾¥¹ À¼s_ÛéüÇÛðÕEëräeßUÈéàFHÊ÷ÝÖ刟)ûol.y‡Ùbè46šêmÖy'¹®øË¤¿Nrgm«uEâOš W=7ûWç7:ïØ¦ßò²YW$)ûnC:ÈIá^H Ù±®HüIÙ—¸bgqÞ1¶vÍýÑ»ÖÉZ²‹#å35kKûÅëÖ‰ßh.Hœ Ý‹n­nq†Âòõ ¼fÖÉ#”}w")ä…«!;¥UÍäȺ"ñe_â„=eZÖgmaÑÜ­–¶®çç–:Ç›óÆÞž›ýÖ‰h.H<4û15»œÖÊ\TÙváºu9ò”}7#5d‡ "G¤Éºñe_bŽÝ„ ÅYUØYØ\¬+ò­­Õ-fsÎI)…ù¥MC÷¢Ö‰h.Hl]ߘ¿¢†¦zî¥Oö6´[—#¥ì» "G\Ó˯ï!YÖåˆO(ûCì#l%ì&4{ ÛŠuEþwûÎÐ[ï1fzg>ivImãyëŠÄó4$Vú"kŠŽ0ƧnÜðé1Þ+ëŠäß(ûž@ŽH™"Yä‹”YW$ž§ìK¬°‰°ÐNì&o¾û¹æ~"…»zçäVrø|Òr*::{¬+Ó\Ñ‹TÕKNÑK‹óêy£¬+’ÿ¦ì{™"YÜÿz‘5g]‘x˜²/£ÇöÁâ,#l%šûVòäŒs¹«ößê´®H>stream H‰ì×ïO•uÇñ¿!Å¡›-7]ôŒábŠ[®É*å¦M733ÓMk–M x"q)L&C$)3Q+Å„rØ4˜æ/bž&4tP¢öλ\“2PιîsîÏk÷ðèÚ¾ßÏõ½®»wÅ›nßñ×ÇúÖ?19‹Ÿüά‹’¿\ïî{eyGÃ7!%ÿëo[¬+’HÂ…áæèÚȰôô׿9ˆIÈ^•s€.d]‘ ›²¹H¹#}dpmþ!òh]‘De_†-ÃY72–íÒ»ïNçZ:“Ò·:Ç4=£4ÐzÕº"‰ zd¸*ª›&¥pmæ,­l\¶.G‘²éHäÉ#©´.G"†²/ÃÂNÁfá¬ìlÖÉÿ¨ª9—ìç¼FÅg½þÞÞžÞ uEâvzdèÏ´§Ì-áÂøÒ kŽ\°.G‹²H"yä(Éæ‰SmÖåHPöeˆØ#Þxÿ v . û[†uE2TÁþÌMµ1 ÙœÝØÄÜÍe Ö‰«é]¡hëèZ¼¦š«2>iCÑŽãôëŠäq)ûQƒ<’J²É’SÒj]‘¸š²/CÁÁÁUa§`³Ð»‰:¯t§¿VÁ!ò==sSCc«uEâRzäánöÝú¨ä»q÷…å™5ôëŠdd(ûQ†l’PΔ´ú‹ëI®uEâRʾ<[»ƒ³D°MèÝtMgÛ'ÏúØ9ÐY ¶·utYW$®£wAb÷3ÏÜë!ÏÍßþcóoÖåÈHRö£9%­œ,É%¿Öåˆ)ûò_ØØœÅÂa]‘Œ˜mU'Ç'màdc²ßÎ=x³ï–uEâ"zä_1U¦-*×TÅ”ý(FfI.çûü«edÙºqe_c;`G`Sàn°5°;XW$#S^™µôß§\¶»Ñº"q ½ ò€+×z—gÖp+Æ%ææÕÑ=¬+’Pö£É%¿¤˜S&ÑWº­+·Pöåå{Ù¸l +>دw?ºµutÍZ°ãæ›:{KÓÙvëŠÄžÞ¹/Ø?P´ãx\²Ÿ+±xM5ú" !eß H1Yæ É5é&ãÖ‰=e_îc`#pVv½ûÞQ÷ýÏgltŽþ…%;¯uݰ®H,é]wÀ—VÈeH™[r¼éër$ä”}ï Ñäšã&ãþd]ŽSöÌÿ/.Ùé¬ìGÖ‰Íe cs¹c¦ädnª öXW$6ô.Hsàòœ¥•\ƒI©ÕMÖåH˜(û^CºÉ8‡NÞI½u9bFÙ÷8f~&æ®»uEbézwßÂÕ{FÅgqâ’ýûŸ·®H è]ð2šÀ»þ¯b²c}ë׿âOëŠ$|”}"ã$¼“úwò¾Tä½IÙ÷2¦ý'§}È`þg PG õjÊÜ._RúÖs-ÖIXé]ð¦Ûw>ù쇧žÍçôç½UE°®HÂMÙ÷,òNê9}:}€n`]‘„•²ïMLøÌùÎÀÏä¯w_Ûwøü„”|ç’,\½çzwŸuE&z<èØÉKÓ^*æÜyj]´.Gl(ûGöáŸôër$|”}¯aªg¶ÿçÏ´ÏÌo]‘¸×Àí;yEuc¦äp[b}ëýÅõüǺ( 9½ žh½:åçœx\²¿äÓʸ—)ûB Ð ¸ túƒuEʾwqæy¦zNœ Ÿ9_ï¾ Åµ®Ëvqmø&ÎØX{ì¢uEZz<¢§7˜³å›q‰¹1 Ù«rtëŠÄ˜²/º=ÎÀÐH— WXW$¡¥ì{3<“¼3Ò3ÛëÝ—á:×ÒéK+t®ÐôŒÒK¿þn]‘„ŠÞ/¨Ü{jRj¶¨¼9pÙºqe_þ‰Î@àJÐ+*ª›¬Ë‘Rö£sûŒ—K1~êì-LõÖI«ª9—ìç.NÈ~sݾžÞ uE2òô.D·Æ3í3çmãˆ}i…5G.X—#.¢ìË`t zƒ¾A÷°.GBBÙbÌêLìÌí13<“¼uEç5! endstream endobj 262 0 obj <>stream H‰ìÖÿK•wÆñ¿aeT[[PРhYâfABY4H†ƒ"&Û  *LÖË¡v2ªY3i¸eár3‚<³meý°$iî4Ê(YJ…ÓèËÄf_<êÖÞö Ûš+¿½Ÿç9׋CØo7<÷}}®Gä?"Ýlù6.>÷…×rÆ%>/=k=‘DÙ÷?üÂÇå_ëA$ÊnÞn_¹ñwBRþöâÓܲõDâ.º}éYAb¬Òrówë‰$Êtû~Uüåtu>.½=+pLï¾DÅ2mÕAŒß´…;Ï„¯[O$Q£wÁvtõÖ¹uÙ!î×z"q#ݾ<¹Az°!$ yBªXO$Q£Û÷š9ýÜ)ê4v½û2|þ¹l‹3ökÙüAï‚Ï„N^ž¾hß4%=®k¶GÜK·/ÏE†$ì ©rôø%ëq$:tû~BO]Qâ”sZ:]Ýz"‰ Á²Ú_ßÂÖÅÅçfŽ=ì貞H†Dï‚o\¨¿á< S”WÖY#n§Û—~"OH¶…„!g¬Ç‘¡Òíû œNçkÒÌéçÖIl¹w?²vSÅèÇøòìü²Ðyë‰dðô.ø@kۃ̼J¾ãøÄ@^á).Ôz"ñݾô©B¶0ìÌúœoÈë‰dðtû>@÷~eöV¾#mœN®w_¬4µ´¥¤YE~³ž»Øl=‘ †ÞO‹tv¨™8§çQXžYÎUZO$ž¡Û—"aÈÖ†Ì!yÈë‰d0tûžFߦu;õ{þ;A½ûâUÕ SæípÖrÙšC­m¬'’Ñ»à]\_RÚ>_òÒâêÚkÖãˆÇèöepH2‡åI|«ˆ²GL·ïQtlš¶S¹éÞº>q›‚½Õc6³ŸcfæeTuÿñ§õDÒ_z¼èÊÕ;KV—òá&Íݶ¿Ý¾WТg¿ý¤T×7Þ²žHd*N\šœÜÓZGÍÈÉØpøn{‡õDò¿ô.xBuíµä¥Å΋PUÝ`=Žøn_¢ˆ\"Ø(’м²GžE·ï~4gú3-š/E£¦W[O$2‘Îî삪13óØä± ›?ÛwÆz"é›Þ—kji[žYÎ7š8gkÑ.Ëz"ñ ݾDéDF‘TìÕ{ë¿&»¬'’¾éö]ŽÎLsæÑ¢éÒz÷ÅëZÛ,[sˆ•æ7eÞŽªêë‰äiz\ëÞýH^á©ñ‰>Pf^%×d=‘øŠn_†IE^±Zd FŽYO$OÓí»=™¶ìÔfú³Þ}ñ“s›g-.tÖ{á»{›ZÚ¬'’'ô.¸SyeÝÔ|šÔ%êoX#>¤Û—áCj‘],Ø«ó?%ͬǑÑí»ݘ†ìTe:3ÍÙz"‘aQ:?!)Ÿ=Ÿ»vSŽû뉤‡Þ· ×5§¤ù(Óí ¼l=Žø–n_† FޱfdÉf=ŽüM·ï*ôaZ1ݘBO¦-[O$2¼vteŽÅ=Þù—ÞØ,«µžHô.¸ÈÍÛíë²C΋°½ø4÷b=‘ø™n_F9Fš‘i,Ûš’rÖ‰nßEhÂÎuÐiÈz÷%vð¼ùþ>–Ÿß´…;ÏþÜd=QLÓ»à‘ÎîÞÊ´rãU&º}1dÉÆ¾‘rdJ¯-ݾÔžÿ•ì”aZ±Þ}‰MgÂ×{!mÕA‚½ æB'/'¤îæ+¤¤ÃuÍÖãH¬ÐíË#ßH9¶ŽÄ#÷¬Ç‰]º}[4^z¯S€iÂôaë‰DŒí.©—à"ââs?Üú]¤³Ûz"ßúK€φé endstream endobj 263 0 obj <>stream H‰ì×ïO•uÆñ¿!¤nmn:ãQ‰"£‰F[Ö¢–ŽÍ¥[.m®l6sYm²É‘d.„p¨0EK0±IT$š¦ƒÊ*¥ë,‰aCÃ!ÈÁƒöÎûAAÎÏ}ßçzíìÌO>ûîû½>×¹wïÁ~ìxìém|ñÿCíÁëYkpþI™E‡¿úÙzI,zûb‚¬#ñ¸{¤_[Gõ8‰HoßJh$üaaôä<Îfj~Éfë‰DÜâÖ`èí­'¦Þ³Ó ŽÔýb=QbÑ^0Ñ×?´)PÏR˜•šØ}šW`=‘$½}±Bâ‘{¤H’‡Ö%½}ô[Z.'Oã¥÷jï‹ü_°³wiÎ^ž ŸEY%m=Ö% í…8 Þ-ÿü'g)¬ÚXÃÍ·žH”Þ¾Ø"ýÈ@.!yXvèÙh=Q¢ÐÛ3:í¢—KŠK×ÕÞy¸ÆóÌ[²Óy29o}Ñ×?d=‘ÿi/Ä7<-»ŒæÕ=ç[®Z# Mo_Ü€$$¹Šd# i=NBÐÛz,mÖ©µô[Ýp‘ Þ-ØsvFÊvÞÎôþÌ¿XågÚ ñìì]ùÎŽzÎâÂýÕu«ÅœÞ¾¸yH*’\HÊ3ii=‘ÏéíÇÓf_à¨é´j³"“ps`xõ»5<">s3 OœüÍz"ßÒ^ˆ5.óG…ß³¦%ç}PðµžHä_zûâ*d# IN’–d¦¢2vôöcÖJwuJ,mV—Y$m=iÙe΃Zš³7ØÙk=‘i/ÄTUmkRf'¼|ýáöàuëqDþ£·/.DN’–ÜÌyKv’ŸÖãø“Þ~ìÐTé«Nq¥ÁÒc­'ñ‰ã m³Ó xYSæo{ý½/o †¬'òí…iný+cE9g›’U¢ãÒÛ×âZ’œÜORô|ËUëqüFo?h§k6£©r¶´Vº«õD"~ çîjœ¾ À+›™š_\Ùd=‘h/D]×µþµ[jPz°™Ûk=‘Èèí‹›‘œä')Ê-%QÉUë‰üCo?ê襴SN•¦J_ÕÞ‰}ƒÙëªxn|ž|ö“s-W­'òí…(º=|çãÒ3³î/… ¹uÜXë‰DÆt¼¡‹Ê·õ "c"EÉR.*¹Ø}šŒµžÈ´÷£ˆ.š”YäTS:ªö¾H|´^é^øÒnçé-[]Ñu­ßz"oÓ^ˆ–£õ—ŸZö)‡™µæÀ¯í[#2ŽŸáºòm=ˆÈ8HTr•ëJÆ’´Öãxžö~TÐ?i¡N¥—ÒN­'I8ûŽ´<‘¶ƒ7859oS þöð뉼J{!rt•çWU¨«ˆ·è÷ x éJÆriŸ[¹ÔµÇô÷#Dç¤yÒ?9Fº(Ôz"‘ÄÅ{ÜœÿÞc„´"Ñsc`Cn8+5gù9î¤õD"¥ßƒâ9d,IKÞruÉ^Øz"OÒÞm“ÎÉÒ?i¡Úû"nÐu­Ùê &Ÿù/·^é¶žÈc´&'4.=Øì,…µ[j¹‡Ö‰<ý"oI]n/ \\ÙD[Oä1Úû“CÃL~±Ø)œ4Oí}·iºÔ™”Yä<ÒìuU=7¬'ò í…I¨;õ{JV ç–±¢üÒånëqD&C¿ÅÓÈ^˜;L“ÉÖãx‰öþ£¢UÒ-’IÛ¤sZO$"c*®lš™šÏk¾ »«14¶žÈ´I{ðúòõ‡PUÛj=ŽÈäé÷ ø9Ls“_yóùl=Ž7hïOM’>I«äÄh˜ôLë‰Dd|·Co¼_;eþ6^îìô‚£õ—­'r;í… º90¼)P?-9oFÊö­E'¹iÖ‰DD¿ÅHc2™d&ŸIé¾þ!ë‰ÜN{‚Ž}{…&ÉYÑ*é–Úû"Þìì]š³—'Ì'-»¬­£Çz"÷Ò^Wxôîþê‹srP«6Öp»¬'‰ý?!™Ég®4YMb“ÛÖ¹—öþ¸è´G§FÒ'µ÷E¼ëëSís3 çüÚÆê›ÃÖ¹‘öÂýð§³øþ¡)h=ŽŒáÎÁüm endstream endobj 264 0 obj <>stream H‰ì×ÿOUuÇñ¿!¡››KKh%J4¢ °5Ûd — ×ÒM7k†nlÚæVÓâÛ ÐTÌ/1¿_r¬A´T 4†s(ó s°d$›t/ò¥§Åš¦YÞ{߇s^ÝÝ¡?½Ï=ç¼_¯ÏؘüWy[xìÙL¾­ šïÚâRJy°ù>~êgëq\êȉËüD|[âF7{ÞÎ8ÈïÃgFbÁ7µ-։ȣÍßv<*&‡÷šoþ欇råÂý´µßX’qˆgzBÁ®ƒ§õäˆÇè<(žÄ®fc³·y¼Ùálrë‰\G¹ÿÔE¼­;П–¾ŸœÏ“‰…5õ­Ö¹ˆrá^½}ƒÕ‘ÑYk²«y~¬' >ÅÃØÛlov8›œ}ÎV·žÈE”û÷¢Ò¢HcTî‹xÕÅË]Ï¿±ÕyÙ_IÛÑÖ~Ãz"WP.ÜeoEÓ¬y›øM¾»¯¥íºõ8"¡¢ó x;œMÎsÎVg·[ãÊý¿£ Ò rHK¤+ZO$"!w êÜ´ø|ÞúˆÙ™«ÖWöö ZOdL¹0îÌ…«I‹ï„BLòæªÚŸ¬Ç -Å'Øçlužv6<{Þz{Ê} Hä× Ò­'‘ðþ°ðhdt`rlnqYƒõD–” èè ¬XWÁï05.ç'Äz"‘ÓyPüƒ­ÎngÃó̳íÙùÖYRîƒçÈï@¤*÷Eü©ëמ”wö² ø<ýZQÙvë‰lø<n Ü.Üþ£SVo¨â©°žH$Lt¿aóçyìÙùl~ö¿õD6|žûô=ZŸSÿèÊ}ij¾:¾^_ZÖÙõ»õDáæç\¨ø®ù™ùŸqù¯¾µó|Ë5ëqDÂJçAñ'¶=;Ÿ‡ŸýO XcÀ·¹OÇ£é9•îG´žHD\dçÆ©qyì‡Èè¬÷s¿½5pÛz¢ðñg.Ð’—ïvúÀWÕ¬Ç1 ó ø›ŸýÏ+@Öã„•sŸ^G»£ãqáô=ZŸõD"âFìŠUë+ÿkW”}Öz¢0ñ[.túWo¨â’§Äæf—Ôqß­'±¡ó øûŸ xÈÒÁz¢0ñ[îÓèèu\2¦§Ü‘ëè Ì_úKƒÏÜ%MÍW­' 9ÿäÂàÐð–='§Åçs½+ÖUp¯­'±¤ó ÈØŸ¹O"ð.dIa=QÈù'÷iqt9§ÔÑî”û"òðjê[g&mtHê{_vú­' !Ÿä÷4&y3Wš˜º½¾ñŠõ8"ötG.¼$ya=Nhù!÷inô7§ÈÑè<OE$DŠË&?—Ã&™4'{ç5ƒCÃÖ…„çs¡¥íú¢•å\ãô„‚½MÖ㈸…΃"w!#žz¹÷‚Ô ;¬Ç oç>mÎFsã£brèrÖ‰ÈÄv³g`ÙÚó3Ù*O¼ôIå±KÖŸ‡sÛ÷AÁÑÈè,?ø§õD".¢ó È½œà 5ȯ‡‡sŸžF[ãêhnô7OÞ>1ÑÖ~ãÅ7·±^øÄ¥”^¼Üe=Q0y2†GFw<==¡€K[´²œ;h=‘ˆëè<(r?¤FZú~^r„4!S¬' &Oæ>ÝŒ†æTµ–*÷E$*]š‘xç|1;sÙÚÃ7{¬' ïåB}ã•ÄÔí\ÑPSßj=ŽˆKé<(ò`$ˆsÄ SHëq‚Æc¹O£•Ñ͸(zmÍz"ñ²á‘ѬâºIs²Ù9Q19ŸŸ°ž(¼” W~ùmIÆ!.gZ|þ–='¹_Ö‰¸—΃"ÿŠ)ÝwŠLáe!_H뉂ÀK¹O£q9t³Šj”û"Ýþ´ôý,>3“6ÖÔ·ZOôH¼‘ ½}ƒÙ%uSbs#£³ÖdWs¬'q;E™B²/¤ YCâXOôH¼‘û´/:˜SÆheÊ} ¿³—:ç.(qQÒâë‰þ'äªs³æmâ*’—ï>ßrÍz‘‰AçÁ‰ãKËù¶ endstream endobj 265 0 obj <>stream H‰ì—ýOUuÇÿ†—l.Ë6ý¡¯™²¡+ç`å.Ç–›¬VNÜÜ’­ÕÒ ðN|0 ÑiQ%7]*ÚƒL·œ‚Êl8â9é>€ öÒÓƒ• ÷|ι¼_;cðÓ÷}û~^ïÏœléJÏ*{àÉÜɳ6T„Ž[Ç>û¾oá-øid˜t„#© ¶ò <ÓÒŠš:­ !F5aÂô&R\ /{EõÅK}Ö‰†Œ¯½Pߨ9;³”ü¹…¡ƒ§­ãá'V¿÷-w‡ŸÖA„ð¸&1½˜»ƒ}puœáà_ïÓ²èZ4.ò?ôtÌ:‘BÜäJoNpoü­é”,­¨³N44|ê…®s=¯¿õ%ÉÇ'¯^Wr˜ÿ‚u"!|†öA!†ÆÁ;؇„‰ð‘u¢¡áSïÓ¯hY$§qÑ»ä}!„×@/¼RΘâyìÙMGêÏX',¾ó‚ßE,„GÐ>(Äý€}–¼³›K„°’ÖßyŸNE³r*VzV™¼/„ð2·,ÖC_Œ,y!tðt`n!gg–Ö7vZÇÂÇhâþÁDøˆ«„›0”uœAá#ïÓ£hSN­¢_Ѳ¬ !Ä (­¨—dvÅòr‚{¯ôö['º~ñ‰æ³éYeD(Ä‚›0žÂV8 sY'º+Þ÷>­‰îDHzmJÞBø—Žp$uÁVÏ´´¢ÆæŸ­Ý/{aàÚõÍåG)¼¼ì³öŸ~µN$Dì }Pˆïc+næÂ_XÌ:Ñð²÷iJô%§8Ñ ä}!DlPSÛ:)u½3Ü^ZòIwä²u¢àY/ðÝ’çm![Êü’Úºvë8BÄÚ…ˆ8 sq¿°.³Žóo¼é}ÚÉ)K´&~7!„¸O ÞÿîÁÄUL¹±SóW3píºu¢?ð ÚΜÏX¼“Tg®ÝöéÞùVBÄÚ…ˆ*ø ‹qË0^³Žó7^ó>–§ÑŽHES¢/ÉûBˆXåBOï¢å•c¦ä2ñMY[}à”u¢›xÊ |¢·×îGñ<~áOëDBÄ,Ú…ˆ6IÇ;Ró”÷éB4"òÐŽèHùDBUN¶t%ÏÛÂè㙑ñAÛ™ó¶y¼ã…ª&μ)…ŒÅ;›Û~±Ž#DŒ£}PwÀhxë†ã0u¯xŸþC r꽈vd›G!\¦úÀ©Gf¬aŽ™’»hyå…ž^«$^ðBm]{Êüb$¦×Ô¶&bô }P7ÁnIÏoæÒá;¬g˜ÄÜûtšý‡?³†Fd•D!lé»:°rcÍØ©ùÌÃqO­*üðˆI [/t„#Y9Ÿ`Âô‚ÍåGù&&1„…hÂep¦Ãw\=܇MbØzŸ¶Cç!ý‡$ï !DwärÆâ FžI©ëkj[]`å…‹—úò‹%$9}éÊßÁåBŒr´ a¾[–û·âAlèr+ïÓpè9Náyñµò¾BÜNCSç´´"gHÎY¸½#qíh/ìÚÓøÄœw97=«ìDóY7B8hÂ܇¹ƒØ'ºy´ûÞ§ÕÐmœ’CÛ¡ó¸v´Bø‹_Ÿ¼šiÈË^Q}¥·ß…C]ö±“áÙ™¥Ž«¾nrçP!ÄÑ>(„9»÷ŸÂ†ÜD̈Ý9ÔMïÓdè3´N¤á”UÖ»p¨Bø&gNpoüŸ“³´¢.Ú'ºæ…®s=KW†œ÷ZWrØmWq7´ á°!NÄŒÜG,‰+£}¢kÞ§Ã8ïE«¡ÛÈûB1xÂ]¿ÍY¸Êóøs›š:£w– ^è»:°q[­#…W߬êG¢w–bhÂ;à}üȕĕoFï,¼Oo¡½85†>soïÿ.À¹0êQ endstream endobj 266 0 obj <>stream H‰ì×ÿK]uÇñ¿!sè` 4H"š.‘DH6GY$d°a_p4cÕH°Æb#ËïKÓM榠t G™Ž‰¦ÖКó²åd*Y3ÑPQêæunö¤CšÓûå¯÷úzp¹è½÷¼Ïç—óy½>‹‹""²¼ö®Á§_(|l[:¯„äªÑñi+îrñ§~æónÅpÔ5߈ˆ/æ;_/ëê¶è."âªÜã­<˜¼{{!"òRr×›§x0ÉMÒÓ¢»Xšût‹Q]žÚU@“±â.""JQE{pd6ûj`xÆ‘/ó æÎ·.zÆ^}·’ᡱùUµvÓ狈'tYŸHLr“Ç“ %IMŸoQîÓOh)t†Ó[h/æÎÙÈff~ö}@X:{lH´­ºîš‰Ã­È…ɩ۩™õ„BPDÖ…ͬßÄá"b EÖ-r3óØd(IJž’ª&·"÷i&ôÆÒUÞ?òr_DÄ ƒ;ËØly=—p¼§Ô”±ææÂ½û§k®¡”r–5›2VDL§ó È:G†’¤<§¤*ÙJš2ÖÜܧÐIŒrBKQX­éÒï[còŒ7ñƒo&§n{8ÐÄ\`mQ '˜Æ{Û¯z>PD¬£ó ˆO¸ÔyóA¶’³ž4+÷i ô£ÐLÌ:`ŠˆÈªîÝ·•¶Ed±óÎß|âö4Sra`p")å,sžx>ïtÍOÖ#"kCçA_Aª’­$,Ï,iKæz2ÍóÜ7·‡ˆˆˆ{nMϽõQ [1¯­1y -}îÍñ0ff‡ó‰ƒÀðŒÔÌzVåÞYc:Šøö`ÎÒ–Ì%yÉ_÷æx˜ûô Z‡Q?Þ8P­Üñ®žþѨ„ƶ¼#±l`pÂÕ žäBU­=46ŸËwï?Ó;0æÆñE|iKæò𒿤°ÜÎ}:Mètˆw+œ«ï‰¶±?„¥'z~fÖáüµîåÂå«C1{NraD|q]ó ×+"Þ§ó ˆïjhé#y„ÉbÙ¥kÝÈ}z킎Á…ôêºk.®WDD,ç˜_H+hÚ´=“½:82»¨¢ÝÉ ]Í…¡‘©}‡j¹dKTnIe÷uwÉ"âM:Šø4ò—ætƃL.“ÎN^èjîÓ(è\žAÓP¬g£ãÓ ÉUlÚ¼BcóÛ»W½Äù\¸3w×VÚ¶ùßP8VǽÌX²ˆx‡Îƒ"~€,&‘y–Ig2š¤^õçsŸA—0JíB¹/"â+ìׇÃ^*26ð¸½åC#S+üØÉ\8WßýLÜQ~ùbRùo½›º^ñEü¹üòÛ<Ñ$5y½òÉ}šýÁ(ÛâŽÒ+L]¯ˆˆ¬…SÕ[¢rÙÉÏø$»áÎÜÝe¶j.¸”2"â+tñ3d4IÍsMj“ÝúÙʹO[ 3Ðø -‚.aÙzEDÄrìê©™õ+ïê+äÂèøô´:¾Ý™SÒú¨¥ˆø"EüIm+m#µyºIprüá߬ûôÚßÒRÒPø‡¡‘©¸½ål>}å˜ýúðÒo—ÍÇüBIeGH´¯öªeÂÚ.YD,§ó ˆ¿"µÉnprœ4'Ó—~»lîÓ hFU 3(÷EDüÏÏ7ŸÜù•±Õ¿öÞ×㓳ÆççBCK_D|1Æì9ÙaÿËKëké<(âß._"ÇyÌÉt’ýÁçÿË}ú­À¨ô„Ö_þðÒzEDd-U´Gf³çoÚž™VÐä˜_Xš ½c»÷ŸáßÐØüªZ»·+"ÒyPd# ÍÉtvò”_\r¤ÐèüK7 !x{±""²ffï|üm@X:ûH´íóÂ&þ8±ç`Î…ÀðŒ ˆ¬Ãy·¦ç¼½L±–΃"¹O²“ï¤>stream H‰ì×ÿKUwÇñ¿aY´¾€PÐ`cËæL ·#&[?$‚L¤ØQBÅ6 vóË\»Û¬¶™âR"§%LçÚÊbk—ÚpÍrѺ, ¶)6µ¼fµ—~àâ°Ô{î9÷x¯ÏÑ{Ïùøùåžçûóà0kù;{Ó2=öL¾y-I.ÔϬ·kô¾Û[ Eз^?ÝÞ€HPß³skƒÅ7¯ÔŒ2ºsÙ_œKØc¢°!§òÖÀ°Û;!œ¹F•WëMôUÍnïàgovn­Š°xu¡~Î?.LÜ[üù£÷;Žã<Ì*»ú®Ê‹¿$y¬þš4¸½;@D <¥ga‡§éø‰K*‚~fn;ª_ôZ‘¶¯ÙwÍímpçA`ŽPÓUv“xµ>Ø}Íš4h*Ðlàö6‘P]ßöÄ )é[_ñßÔ;ߟ½ª?õS¿_¾Úó\ú~“Œ´ÌCþÎ^·÷ À)œ˜§Ž«æ&ë‰éûUùÿï¾&W_¯ÒŸš 4!¸½_€ƒZÛ»Öe•›"4žþ=øþÄ.5ã×ë͸„=Ûw7 ÜØ/gqb˜Ú­‚«ãúš«é*{ð£ÉÝ×T Ù@ojNдàÆ~êîù÷wëõœ_šRôaÙO‘щŸNî‚èš÷Š¿›?Þ‘Ç“ VýÙ-pçA V©Új·¾àêø;…'fØ}o…Os‚>ÒÌ É!²[8âÎð]Íãý­¼Æž¿&_óÐ.º~ã›ÕúT¯§Ö|®µÓù-ˆ΃@ìQ©ÕknÜB÷5-èSMš4E8¿e€S¾>ÙñôKŸè©¾.«¼µ½ëQ—MÑã— 7‚qÙSùиˆ:œX¢:«Ñ&Öª¶†ºrÚî_¸Ü­ÉA×hŠÐ,áÌ~úíÊ_é[ëIþä‹Þº¦ö©/ž¶ FyMË’äB]9?aÏ®‚oï ßµo¿\Àyˆ *²º¬:ë½xu¡z=õõ3ì¾æu¥& Íöíà ¾þÛ¹ùßèé½(©ÀSzfp(0í-3ì‚hµí»âÆ‹³4¥¨¦ñ¢[à΃@ P‹Ud}—Ug5Úöîk–ÐD¡ë5]hưcËGFFT_S¬‡vÎŽºÝý3¼qæ]0´òú×*t‹^Ͼ\Úv©Ëê–¸‰ó ÕÔ_UØäx]V¹£Ýß²ë¸nÑŒ¡ICó†Õ-œÒì»–ôÊ=«S3Ê|-×Cº7Ô.ÿãŠç÷™ en;Ú×;¤Û¸Žó ¥Ô\•×$X-V‘CºÝZ÷5]hÆÐš7Býç\ñßÜ´õˆžÏËÖ–|Y×jak]0>­<·0q¯n_°Ê“çmŒŒZX€+8QGUmÕ\}yÕ_o…ÏÂ"át¿º¾Mó†n×ì¡ Ä »Ü~¿ä¤r —~ÑŸÖÖ § f›w›·2_‹,O-i8ÕamÆyˆ.*¬:«¯­š«òºØ}[Æ@8*¾úuÙÚ±(lÚzä?ÿ g©0»`ø;{S6~¦uôÒ/an @p¢…ªjcdíê¾&­£iD3I8KBâk¹žšQfŠÐì»þ‚¶tÁh8Õ±>stream H‰ìÁ€ÿ«ë jw—ò endstream endobj 119 0 obj <>stream H‰ìÁ€ÿ«ë jw—ò endstream endobj 68 0 obj <>stream H‰ì×ÿkÕuÇñ¿!7Y†!$Ì¢œ^Œe$©XÄöàb0’˜`›dfx÷•5­Ô”93“µU2bCWy+Ñ¡”md3[¶K®µÅ\®»î¦»ónö”O¤-+ƒ{ïùÜÏçõà"úÛÙÛ×Ù¹¯«W%|tìÜm÷náOëADnIKûéù¹5„6#'XZÖ6>³ž(]Õ¼q”gäOëAÒÙ#äg$“$Óz"‘[¢»/""7Ò]tÑ}fpiÞvâÊgÍ“{†"Ö¥7õÁ„ ‡¤Ñ‰%ù$¥Ö‰üÝ}¹‘ßhäRaI³ó•;{e}¨³Ïz"/PL 2I2ˆ’Uk=‘È?ÒÝI%.BWÏ õ"ÿFwAÜ,6/ß𻤂”f*_ßwÂz"ïPL8òIJyUKnI¯õD"7¡»/iE“²ž"6Uw°qÊÛ‡G¢Ö³ˆÜœî‚¸VÛ‘³ WÔ‘Ï9‹·o<8´žÈSÔ“”’UËÛ’^2l=‘Èlºûârô&Ú)¥IYÏ’ü8ë7·òãÌÏ­y¥áxl*n=‘Èlº âBßÿðKnÁ.’ɇ¿„û/ZOäAêƒÉCbo poø‚õD"×éî‹kÑ•hLô&"J‡þÍz¢„éê\]ÔÈÏÈßÑþÉ·Öãˆü…ÊXt²xãÁ9‹¯}‘^¸¢®íÈY뉳žH®Qtö‚í`GøOa_Øë‰Ä³t÷%5h1tçw톎c=QšØPÞÎÎ[VU½óèåÉ+Ö‰gé.Hò|sn8¿ƒ€ñy¨pÏùŸ~µžH®St!v„MqV†Ýaƒ¬'ÒÝ—d£¹Ð_h1$F3<µž(}Ýûsþºý¼ä=¼öþ¡ëqÄ›t$F#— Kš¯µÙ+ëC}ÖÉlꃮž°5Îú°Gl“õDâ)ºû’Ttš {ô©}tëq<âÏW}xí›zUI8Ý…ÿçw€Ø/U endstream endobj 120 0 obj <>stream H‰ìÁ€ÿ«ë jw—ò endstream endobj 69 0 obj <>stream H‰ì×ûKÕwÇñ¿a­°  û¡²‰L„¤ Ì&Ì`Ñ6¨Q¬Ú!¨ ]˜,/ó`Ëu5ìÆª1Ëf[ÎXËV–ضҭÌrÒÙ&¢a¢9šçèÑöŒ/D[V^޽Ï÷œ×ƒÃ!úéŸÏë¼?¯{÷äÉBƒCŸï:?e^Îss6Ç%æzöTñ?ÖCÉ0òwŸçŒø¶D†AjÈ âŒH™RŽ$\N_hâ^ñm=ˆD›k·_Y~€Û5;m[iE½õ8Ѧ/0°¥øâ´¤<þ™Yåí~ë‰$zh/H褉L9á"edÍz"q7í} #ú­„nÂ¥¢§ÐV¬'Š µõ­Î£+1}gùÙ›Öãˆëi/È8uû+7Ÿ4÷þc5>ÅsâtƒõD2"êƒîròÌ òÅ‘‘5Gî¬'·ÒÞ—p¡‰ÐG¸Nt“ßþh±'æ.«›µh+ÿ×ßûºÑ{Çzq1íík¦&åq…¦ÌËÉ*¬ ö‡¬'’‘RtòEÊÈGîHŸõDâJÚû2~´:‰>B+±'võô?Ýz&.1wrBöúœŠnÀz"q%í›ó¿üõÂÂ/¸<|–¬=ÒÑÕk=‘ŒŽú Kuùî’8'zd$ZO$.£½/ãAã wÐ>è üD±žHîy›;—¯;F®gÌ/ØôJhpÈz"qí­–6_ÚŠÎsô¥WwÔ]oµžHÆB}ÐÕÈésbHI¥õDâÚû26´ ºƒûCû ƒXO$ÿq®Æ›œQÄéð]õëßÖ㈛h/ÈÈõÖmþáù„lîÌôäü}%—­'’±SŒKkI"çH*É& µžH\@{_Æ€~ñ kTVß²G†ÚôÊŒùœÔòuǼÍÖ‰;h/ÈÑþ¼<7æÒËÓíÔ£I$“²9MJN­'’H§½/£B§ YpgâSø¯ý¨ðŠ endstream endobj 121 0 obj <>stream H‰ìÁ€ÿ«ë jw—ò endstream endobj 70 0 obj <>stream H‰ì×ûKÕwÇñ¿aed4+Æ.r‚´é¨Ø"&CiÅhs ª_V+ÖQ—³Û´ææº`æ²±t3»l;›)˜]D”²fQ)jimÏøŽØ¥‹—s|Ÿï÷¼Dýé ŸÏy½_Ÿ$:”–×Mš‘óÜkÆLÝðñÚ#Ý=}ÖÉèùù×FŽžŸÖƒˆÊ@S|Êv.@rza ºÅz‰ Ňk_|kw#-£¤¡ùºõ82ª´¢MÞžªØ„l=Æç_»©¢ï^Ðz"±±ñëÓ\~Z"6øî¯ßZIp È’Áz"%Úûщ†OÏçèã’riþÖãH$êìê]“[1>>‹ÕÀ/üi=‘Œí…èQUÓúÒì­7ŸÔ¥Åí7º¬'Kz ÈÒÀ‰ò”°žHÂN{?Ú8%Ÿ†OÏWÉ—gjn½9Ù~R".)w׳Áþë‰$ì´¢Áå«sív*ß+ïl«=ßf=‘ØÓ{P!^ó•d‰a=‘„‘ö~ô ÉÓçiõœxZF =ßz"qÊ@Sbj7'9½0PÝb=Ž„—ö‚·Ýí½¿:ûXŒÏÏ)OLܸ³´Úz"‰zʤ·‚Ä 7Hë‰$,´÷£ž&ÏYÓêéöÖãˆûû öý>iF·hኃ-Wn[O$ᢽàaE‡jœv7Öç_¾®LíNþIïAù?Râ“Ï"1¸¤b=‘„žö¾çÑÛiïœ2M~ÇÞ3´zë‰ÄÅnuÜY™y4ÆçŸ™²»§Ïz" =íOª=ß6}^>'Ëg΢ݗ¯vXO$GïAyƒÜp„$!O¬'’PÒÞ÷0º:ÞN{§ÃÓä­'¸ÐØž²¤ˆè˜2kKiyõ8bÚ Cø¿÷á>§ÈMž¹¹2Ðd=‘D(½åéNU5“!N˜**–ž¡½ïU´tº:‡Ko?×pÍzñ ò—âS¶sÇf/ØYSßf=Ž„Œö‚gôÝ ®ßZ9nZ&ûzVÞž*ë‰$¢é=(ƒA’Ä&dsUȆœ±žHFJ{ß{hæôsŽÕ77Æn=ŽxÙÝÞû› ›˜¸‘ûöѧ?¶ß貞HB@{ÁÊŽ_|þ/9Ê1S7,^u¨³«×z"‰tzÊ ‘'¤ ÙÂ…!gHë‰dD´÷½„6N'ç@éç´tººõD¸xË>;¢‹çÚ nw¡±=1µ€CäófÚ·Í­7­'wÐ{P†„lIN/t¢†Ì!y¬'’aÒÞ÷8=œ6Îiò$¤Ÿ[O$Q§¦¾mö‚Ü@ßܼò—¬Ç‘áÓ^p¯Î®ÞÅ«™ú°ž½œ[vü¢õDâ&zÊ03¤ 7‡ä!H!ë‰dÈ´÷=€îMçiãtrëq$ªýp´~ʬ-ÜÆ”%Eç®Y#á½àFÁþœo~ŸÅÙ›–™µýÿ±J\FïAÒæ‹§Iî)D)ÜE{ßÕèÛ´nN^Z^g=ŽÈCÝ=}™ù''$dÇøü+3Þê¸c=‘ ö‚ëTš&ÏÜÌ©ñ™¿l¿¾t2/¿¾áOë‰ÄÅô”‘»ÐØN9¡D:‘QÖɳi﻽švMÇæàèÛú¢I$ T·$§rWS *MÖãÈ h/¸BwOßòuec}~‹PZ^g=‘¸žÞƒ*$’ÓTÉ(’м²žHžF{ß]hÔôjŽŒŽMÓ¶GdPv8—”˽MË(in½i=Ž<ƒöBä+üþØ„lŽ)Æç_}ìnï}ë‰Ä ô”ê»$È(.yEjYO$O¤½ï´hº4‡E¯¦]û¬'‚ήÞ5¹ãã³øð ZO$O¤½ɪjZ_~{ÄçÝö¶ß貞H¼CïA 92*ui±Yd f=‘<†ö~ä{T¤c|~iqµ†æëi%dN\RnñáZëqäñ´"µ*eI‘j•„Þƒ&ä©åÄ9FšYOô·¿ìõ endstream endobj 122 0 obj <>stream H‰ìÁ€ÿ«ë jw—ò endstream endobj 71 0 obj <>stream H‰ì×ÿKUwÇñ¿ae„C+¨Ÿ¶,iX,AclPƒ¤kPÔ­„ „`[~™Íõe³æ–JLiYk—á¥Ø–ƪKÑJ«¥%áeñ ææ½z­=ÝEì›÷Þ÷¹ç¼ˆ?¿ùœÏ}½_ŸGdÒ·çï<óânþ["O×àk›½´’o´jóÑÎ`¿õ8"qÐèÊÊ?È­Î)8¸ò³õ8ò$í§ •ŸNË,Ụ/*¯m¼b=‘¸SÅ'ßsÇøo=ˆ¸ÙõìKïsÇH32d³žHÓÞw,z2m™¯Cs¦?[#O‘±è¡úK³–ìá†o(úª'4h=‘üI{ÁQý7ž[<ùK™žY²uWÓðHÄz"q-½%ÑH0rŒ4㦑lä›õD2I{ßèÆ4d¾ m™ÎLs¶žH$!î >(,ösÕÓ•—VUÑuí‡hkï]¸¼ŠoÁ_îšVƒõDârzJrfyoÔÆÂ”#ë¬'ò:í}G¡ÓŠéÆ|z2mÙz"‘„û±ó—ü Ÿsç_xõ£/OÝ´G´ìþ«·‹•¥¹¹{›]Ö‰'è=(ÉD²‘o± #ñTz iï;M˜>Ìç Ó­ÇI*ß7í±û¿lmíµŽõ8ž¦½`(:ñðÝÍ3”ò ff•U~vÞz"ñ½%ùöÖ\ ë¸xäéGZOäEÚûN@û¥ó!èôbëqDlŒ†Ç?<|!#»‚ßBa±¿ïîõD¥½`¥éÌ­99•þ´ù»×ï8y(l=‘x‹Þƒb‚¬#ñÈ=®HZOä9Úû¶h¼ô^>˜&L¶žHÄXOhpÓN_ìG±¿.‹ZOä9Ú ÉìXüz5ÇÎ_öÊêŽ;}Ö‰é=(†:ƒý¤_,ÉCRÑz"ÑÞ·BË¥ëÒx9Ú/Øz"i½Ù›»¦†_GVþAËmëq¼E{!™î…×ï89mþdzþåšÎܲžH¼KïA1GÎɩ䒊d# i=‘'hï› ßÒr9y/½×z‡jðµÍËÛÇ/eÅÆúÎ`¿õ8^¡½4¹83«ŒÓž± ´xsd,j=‘xšÞƒâ$!yH*rIHrÒz"÷ÓÞO2:-Í–3§åÒu­Çqºá‘È{ZØi™%ÛKOÝ|`=‘ûi/$As knî^Ι¿‚·¿ÐÅ'Ð{PœƒT\½åX,$IK2Óz"7ÓÞO.6m–NK³¥ßÒr­'IÁîuÛNV³–ì©;~5:ñÐz"7Ó^H¨žÐà+oÖÅJÎÂåUmí½Ö‰<¦÷ 8 INÆ“ä$?­'r'íý$ »Ò`é±5–fk=‘HJ:wù§ì•ÕüŽøßè²ǵ´dx$²uWÓôÌŽ7#»âè××­'ù ½Å™ý7ÈL.'ùIŠ’¥Ö¹ö~¢ÑZÿh°´YëqDR[tâaÝñ«³—Vò›Z·íD°{Àz"Ò^H„ÚÆ+±>“–YRT~z4>stream H‰ìÕ¡ƒPDÁÒE¦«XˆÂP@<ƒ‰ä5ð‡InWœ>÷Ž~϶ßËçÚ»Ãé>é5¯éyíÝG€át€¤ ÐC÷Hº=t€¤ ÐC÷Hº=t€¤ ÐC÷Hº=t€¤ ÐC÷Hº=t€¤ ÐC÷Hº=t€¤ ðÿNVõ»å endstream endobj 72 0 obj <>stream H‰ì×ßKTyÆñ¿aA!ºZ„A!/jI/¼ÈA‚ ‹. Aˆ  ÙüÍ,îJº-’EFK ,³S¬ôÃvÙ2Y¶iqØLRTŒiÇ39Ú¾a–!ªulæsæœçu10wÏùrÎçó|ß¼ñ¦©ð‘úËŸ}qþ@UÏÍдuœ¼ôó/r€üZÉ'/£ëM­¡‚Ò–B_ÛWßÞ]]KX'ÉXçw£|ûüZÉS—ÙËf3™ÉÖ‰ò‰öþ^Ð6éœ ý“jGDþ•þ6¿¢o3SÚ Inm MWtqhõÑÙëD"I÷AÉwL`æ0¯13™ÉÌ|¶N”´÷? “žÉÑÑ9ižÖqDä]ñÍŽ¾Ñ¢²v¾Ó†æàârÌ:QÞÐ^ؽ;c3å59.~üö—u‘=Ñ}PÜiœžÌLië8y@{?S´Jº%‡FϤmÒ9­‰Èš›ž<àƒ-®èêO¼NZ'ÊÚ »™]©oæ öô M$·¶­‰ì•îƒâÌd&3ó™WšYÍĶNähÚû»G“¤OÒ*91&=Ó:‘ˆìÊøäóÊÚ~¾\_uï­ûO­ã8öÂÎV×çü#…¾¶‚Ò–¦ÖЫXÜ:‘ȧ¡û ¸ ó™)ͬfb3·™ÞÖ‰J{—è4IΊVI·´Ž#"»˜,9ÔÍW|ìÔõpdÉ:Žsi/ì@o‘¸˜îƒâJÌj&6ï6Ó›nlj´÷ÿ—Þ"×x‹ŸóúÚ J[ÎtÜæ¯u"'Ò^ø ‡¿ÏUÖös2¾êÞàÝ'ÖqD>=ÝÅŘÛLoÞp&9óÜ:޳hïHc¤7Ò骎"î™]©;}ƒÑ·ÿ `h"¹µmÈY´Þ17=y6À™ì+ïìO¼NZ'É ÝÅݘÞÌp&9ï9SÙnÈ)´÷?ˆ~HK¤+r8ôFÚ£u"ùÄîŒÍ”×\äçwìÑ3ë8¢½¶ßìúþAQY;ÒÐ\\ŽY'É"ÝÅ ˜äÌs^uf;ž9oÈžöþûh†é–Hc´Ž#"Ù’ÜÚîÿáaqEß{}ãpdvÅ:‘#h/¤Ü M¨êá(ŽÔ_ž /XÇÉ:ÝÅ;˜êÌv^xæ<ÓÞ:Ž1íý·Ñé„ý–HW´N$"Y÷2ºÞÔ*(m)ôµµ^¸·º–°NdL{žpôøõñÝÅk˜ðÌy^{f>“ß:Žíý =6H'¤Ò­‰HN…#KÕ'®2Ku_ LZDZäå½°¸khòøEeí}£ñMëD"¹£û xsžiÏÌçågþ³¬ðòÞO£ûÑ9Ú Ð:Žˆ˜ Þ}â«îe®»ôxú…uÞÜ ‰×ɾÁñâŠ.žýäÙÀÜ|Ô:‘H®é>(žÅÌgòóþ³ØlëD9åͽŸFߣõq4@z u±Çøºÿ×}å©{ÁüâßÖ‰r̓{áÖý§lžº²¶|ò¹uºŠÇ1ÿÙ©{{Á:Nîxpï§Ðñhz<;­îG´N$"²¸kh¦GÄF|Ó:Qîxj/„#KÇN]çyKu_ LZDZ¤û Øl¾¶;Â:N.xjï§Ðëhwt<œ¾Gë³N$"õxúÅáºKÌŠU=?Žüa'G<²^Åâg:n”¶úÚÎùGøkHĘîƒ")löÛÁ¦pý‚ðÈÞO£ÑÑëxd:MÏ:Žˆä›¡éÏ¿ü†¹Q}âêTxÁ:NÖ¹~/$·¶†&öôó˜u§oDfW¬‰8‚îƒ"oc;°#ø(Øl v‡u¢lqýÞO£ÅÑåxXzíÎ:Žˆä“ÕµDë…{EeíÌÆó?½Œ®['Ê"wï…±GÏÊk.ò€üÞ›±Ž#â ºмM‘Þlë8YáBs£¿ñ˜t9½Î:‘ˆìÅ? Üü<[ endstream endobj 124 0 obj <>stream H‰ìÕ1QÅ@ A$®®Ef>Ì\ó4Ý"rÎízÏׯ|J|€å Ðáû,_€ß`ùtø>Ë Ã÷X¾¾Àòèð}–/@‡ï°|:|€å Ðáû,_€ß`ùtø>Ë Ã÷X¾¾Àòèð}–/@‡ï°|:|€å Ðáûü£¯‹§ endstream endobj 73 0 obj <>stream H‰ì×ÝKgÅñ¿¡ ˆ¼ –€bÑ -x#A¨RB@È…„‚àMŠ”B\ƒ²Á"ÆZÑÖ¤Á ­¨”fAZÝR²´J¢D æE6õ%®YM¾eÂÒ@šø2ú›Ï½òŒË3ç>V[Î:‘ˆø^tj¡¤:Â[¥à\çXtÎ:Žû‚× ›ÉPÇDf~sÆÙ¦†ÐÈZbË:‘ˆé>(òt BÐ&t ÍbÈ5Áëý4vk§c¹±ß¬ãˆH ÜŒå‡yÃTÕõÍÎ?´Žã¦€õÂ7Cä–¶ñDµ=û¤DÜ¥û È;Ñ#´ '…f¡_¬ã¸#`½ïà“b¡ñ\¬56›u ¦§ëÛáÑÌüf¾ø_­¹#0½‹/—Õtó,ùׇÇg¬ãˆxîƒ"ûD§Ð,œZ†®±ŽsTé}GP癈xÖ½û«êúx‘æ‡oôO[ÇqAzaeõŸ‹—‡xŠ3…-×"·“;)ëD"> û ÈþÑ,ô -é¡qèëD‡€ÞOc‰±Çx¶ Í:Žˆœ"cѹÂÊ.Þ?%Õ‘èÔ‚uœ#ñu/<Û~ž.èO¿^}´nHÄ7t9(Z†®áàÐ;´dè0|Ýûi¬/6Âc•YÇ‘Ó(¹“êìÌ.jå]t¾~`i%aèüÛ ·FÿÎ+o'|YMw,¾lGÄgt9‡ÞáøÐA4‘uœóoï;X\ì. ÆcY'‘Sm-±ÕᥔUp5Ô1±±™´Nt`~ì…;³*j{ˆýþG_ŽÄ­ãˆø’îƒ"GAûÐA"úˆV²Žs~ì}+‹­Åâ"?ë‹ fHDä•ôõ$·´Íw×õ/ÿú+?˜: ¨ëD"~¥û Èý÷zB7ùåzâ¯ÞOc_±²HÎâbwYÇyƒáñ™¼òvÞTe5ݱø²uœýòK/$wR½“ÙE­¤½Ð0¸´’°N$âoºЏ‚>¢•8M4=E[Y'z¿ô~›ŠeEfV[Ë:ŽˆÈÛ<Û~~-rûLa o­KŸßZ}´nèÝ|Ñ cѹ‚sä,©ŽD§¬ãˆîƒ".¢›h(ÎmEgYÇy_ô¾ƒÅš"-ËŠ}ÅʲN$"²/¼¾.^òËëËã½0;ÿ°ª®„9Åᛃ1ë8"Á¡û ˆëè)ÚŠ“EsÑ_ÖqÞÌã½ï`;± ØQDeS±¬¬‰ˆX,¾\VÓÍ{,¿âúðøŒuœÿåÙ^xº¾ÝÍÌoæ‹øÕ:‘H è>(r¼_^žíý4VÛ‰ì(Ö”u‘#éûáÏÜÒ6Þiµ=Ý]µŽóÞì…ýÓ9Åa‚UÕõÝ»ÿØ:ŽHé>(r|h.ú‹#F—ÑhÖq^ãÍÞw°”ØKÄc;± ¬ãˆˆ¸cc3ê˜È*¸šq¶©!4²–زNô¯õBtj¡¤:B¤ÂÊ®±èœu‘ÀÒ}Pä¸Ñbt^£Ý¬ã¼âµÞw°ŽØH,%ö«‰ídHDÄeó‹OÎ×ðÎ.jíúö·Ôîžu¢W¼Ó K+‰ô¿¨³w2¹“²N$dºŠœºŒF£×8ntMgÈC½ï`±‹Òÿ"ö’u"‘cZøðã¯yãVvEç¬ãüË ½°±™ uLd\%IChd-±eFä”Ð}PäÄÐk´'ަ£ïh=Ã0^èý4¶‹ˆ<¬#6’u‘“ÚÝ»Ñ?Sæí÷É¥ïçŸØæ1ï…Á‘xni*j{îÌ>°Š!rÚè>(rÂè8šŽsGëÑ}V1Ì{ßÁþa‘„EÄ.bÙæ9aO×·?ký)ãlSf~scx”_­’öB,¾\VÓÍ_Ï+oŸ9ù^ðR€Js*s endstream endobj 125 0 obj <>stream H‰ìÕ± ÂÁX„!Ù*-c°L t !ôw…kwžÀUÇóu»?>ûë#À×é>K C÷XººÀÒèÐ}–.@‡î°t:t€¥ Сû,]€Ý`étè>K C÷XººÀÒèÐ}–.@‡î°t:t€¥ Сû,]€Ý`étè>K C÷þË[€øã3 endstream endobj 74 0 obj <>stream H‰ì×ËKœWÆñ¿¡ ˆ BpeA,P¨›Y$4RÜ$„`ÜB#ÔKE0ÑXmˆÆ¶Z!Mjª(­J¤(¡ZÑ ¢Lð6££öK$›Ä™÷:£Ïg! Ì{ÎÙœó<¿“w´;H’‰NîîîµèüîNæÂû!XUçw8E䔿Aw‘€ä ×L$ÉGgöuk¤áÐsØšÎãÖ4*"’´"ÑîþɬÂÖØ”´¼rlk's!0:ïy7ù–VôÎÌ­8°£ˆ|ˆæA‘d@’‰±)‰”t`GççAZMջɗžCÛ¡ó8¶µˆHjÙØÚ­®ð`fä77Þ±>t`Sgra!¸î½þˆrJ:þÛÖ½D$šE’ÉH>r%ÉÊ^¯Ùº—“ó M†>C«aG=ÇMEDRÝ«…7±Ñ)·¬óÉÈœÝÛÙ [¡½ÚÆ‘´¼†Ø»³±i#IˆæA‘¤B>ÆF'“Ü$=mÚȱyC“‰ ¹t»·9gN_ÑÒŠ^[_Qûr!ztìûᯬÂVÖ¯¬.mZ¾…ˆ¦yP$ ‘•$&w“ôìyü'Ijù̃ôÚ »Ðdè3öm$"r¾í‡Û}cùͼ¨Õõµm;v±)~ÿ·àJ+öÅwãS‹Ö.."æiIZä&éÉ %IÉSk·u¤«ÐXXŸöB‡¡Éر‹ˆÈ…²¼ªªóó´f´Ü{89ˆZ»¾å¹\Ú¬øê'ÖÌ.j뚎[µ²ˆXHó H2#=ÉP’”{úå­ÉV«V¶i¤ŸÐRè*,No¡½X»¾ˆÈ73·R\îãõx»£ó®la.¼Ýßi{–îiJËk¸Ýú”ÿš_SDl¢yP$ù‘¤ä)©J¶’°–«ó Í„~²t‹…+‹ˆÈûü³9%¼·Wo<^®[²¦U¹pz¶k7­:›ˆØGó Hª UÉV.ì¥Ëí¤­ÉÕ¬9„éæÏ&""gÚÙÜíxžîiJËk¨mÙ í™\Ð|.LÎþW\îc·Ëª|»iI-$,9˵%sǧͬcÉ4}^q“æA‘óD&—Ign4IM^ü÷‰Îƒ4 zŸÐ1h¦Ï+""ö ŒÎ{¼]¼ÛÅå¾™¹•3f.D¢Ýý“™-ü¬ªÎ¿¼²ô¼"â̓"ç éLFs©Éë{'Èîý2þyA—àÇô Ú…¥ç‘dAœÜÇs!ÑéRDR…óàÿ *8 endstream endobj 126 0 obj <>stream H‰ìÕ1ÂA ‰H\Ñ"#fåȤøÝâÛ/ïºîõùž¯ãýß›€çé>¥ °C÷(]€º@éìÐ}J`‡îPº;t€ÒØ¡û”.ÀÝ tvè>¥ °C÷(]€º@éìÐ}J`‡îPº;t€ÒØ¡û”.ÀÝ tvè>¥ °C÷(]àI?øX‹§ endstream endobj 75 0 obj <>stream H‰ì×íK[wÆñ¿aL(‚ ÃW‹âÐ1s+¾èXe›Ã ] ¾±ìA˜Ö)Š`Õ92ØV†ÂJØ­¶[KQË0i˜"*V”Hª&uœilsÎْœ_ìýæœëº÷öXiÂ3Ÿ_âxéÕ¯³ŠÛ]CŽû⦠ú÷MH,ìƒ@bªo¿kD¿:€š€Ýãl0á™ãƒï•§Ï´½ùQ· —×ü»G`öA Ñ(å•õJ|ÝûJu½É/q¨Ø=À"s ¾Šj§žÿ)9 WzFƒ[¡[÷¦õ±àÃ.½¦å5u÷‡vví€éØÄ¡dW¾+åɯôWPPÐGu5»Ç˜h3°Ýì6û•5®¥e¿ñ½±êõöÈ㜳zÿÚ{ßŒÍØ;-³± B™®d×ý®”WÖ‡s߸ª> V o’³ëÕÔì`çàE­zÚ–vMN-î¿´?B;»×¤æ6꛲‹7¼³+6Í Àtìƒ@ÜSŽ+Íu§+Ù•ïJù½ç~˜º‚¾W[p{lš{z—÷FxÂÎ…UßFU;)³69»¾®íÎÓõ …ó°û Ç”ÝJpå¸Ò\™®d_:r4¨'¨-誚ƒúƒ…óbOÿÊ—žêÆZ·Ø>òØq¹ðçô’±H¦´ôýô»ùó°û ¯”ÚÊnc­Sš¸aµc‘ÔµˆåÕuóçÄXp+Ôqõ~jn£æÕι_„ÑsÁ5ô(«¸] K»&<óæÌ Àìƒ@üQR+¯uk+»•àGž‰œû5õS—P£P¯0g^@ìÝyllpù%Ž‘±™gžf.l¶›Ã)9 Æv¹´ìé¼ìÁ>Ä¥³±Á)¯•ÚÊîãNF³Ô"Ô%Œí2šó{MyŸœ;ß§çö+¯7_s>ŒòWQæ‚‚æÂ—7£ ÿ ìƒ@|P"+—•꣕ÔÊëÈç£ß jêú‰:†šÆ Ï ˆ½5à󦟓2kOe]Ö}Œþ·'Ê… Ï|ai—Îgµº†=ï¼ìÇ>Äe±Y÷²ÒYÍONºîýS3Ô1Ô4.5ž¨fLÚÙíîOËkÒ³ýý ?zgWNúž#Üžô‚ýª¸¼wrjñ¤ÿ#€ÿöAàÅü-ÀŸÑ_á endstream endobj 127 0 obj <>stream H‰ìÕ1A A$®¾EfÊx`æv‹Ôéî<ø¦ãùºÝŸýõþ‚.@‡î°t:t€¥ Сû,]€Ý`étè>K C÷XººÀÒèÐ}–.@‡î°t:t€¥ Сû,]€Ý`étè>K C÷XººÀÒèÐ}–.@‡î°tào›ÿ3 endstream endobj 76 0 obj <>stream H‰ì×ïKÝeÇñ¿!†0|" Aˆ¡4 !%d ’ŒFzå c93 Ó²ÒC²á|¨D; ¥FMJÙ”1nÓÎòÇ<ã;¤±<çû½ï¯úy!¢Îu_¸ïÏuíï[ugöAiu÷+¯Õç·F†¦ÿÿ¿ùî.Ÿâ÷aOœ_X}ûâ—|6»0ÔÕ7™ÜÝ;lqWt"VTæeÎ/ë‰Î¥V$µ\ØØLÛÆ2M|¶.8´ßJít±¥ù“o¹¿ü¶Ýˆˆ™KòrIa²˜D>ÔÇSÞÌLTxý­O™CR+"""iŠýö{Um?¯qVAKÇçß'w÷R.•N.,.ÇÚhïOì$SnCD Ó>(r䳤-™Ëå%IáФ¹‚©ƒÙã ù…Õ”K‰ˆÈaml&‚mc™¦ŒÜ†ºàÐZ|+Í‚éçBt"VT¦H~YÇHt.Í~DÄ íƒ"G KÎrmÉ\’7å:é羃 „9„i„™„É„ù$Í‚""òR_ þœSÜÊ3^ZÝýËÝWjº• ]}“Ù…!J•×ôÞ»ÿØ•ÞDÄ;ÚEŽ R•låÂ’³¤mšÕÜÊ}Ó3 ™OzoüäJMù·©é¥’ÊNÞÛ¼Òkƒ£3.Vv1ž¬o_ ŸÊkä‡?ø7ýš"âíƒ"þçE°º»:˜L˜O(ˬÂÄâbeYy´þÎû7xcOç7_ ß~ºýÌÝú®çÂìüÃòš^jf†®G¦Ü*+"îÒ>(âsd(IÊ=%UÉV·Êz±‚ù„)…Y…â. 0½¸[_DäúûÓzñƒ›=­åÂHt.p®ÊEáèDÌÝâ"’>íƒ"¾En’žÜP’”Ó 3 “Œ§ˆˆœƒ£3¹o~Ì‹ZRÙ95½äÝAÞåBb'ÙÞ3žUÐBýóu‘Åå¸ëGˆHÊ´ŠøYIbr7IO2”$uýO÷As Ó §œ9{•yÆ»ƒDDŽ¥;³J«»yEsŠ[#CÓ^çu.¬Å·jëoqDf )Ø6¶±™ðè 9íƒ"¾B>’’d%“Ü$==:ÈÀ>è`†a’á,¦f¯9xüë‚C¹ &W'3¹p°ä¾úÆG–\y)íƒ"þA2’fV'cûàþ‹K.ŽwK®ˆÈQ—ÜÝkïÏ*háÁ¬ªí_\Ž;Úd.ÜþõÌÙ«WRÙ95½dàDù/ÚEü€4$¹Œä#)iàD“¹ï`ªa¶áPæ¦ÄNÒØÑ""GÂHt.¿¬ƒw²¨"ˆ>Ýp.<Ý~v%|ût~3‡¾ûáàÊ£u3çŠÈ?h±‹$¹†d"ÉH>š9×ü>è`ÂaÎáhf&狈øÓüÂjyM/ocva¨«oÒJVrayå —B0±“4yºˆìk±‡Ô#ûH@î iH&š<ÝÖ>è`Úaæ¡æŸ{÷[éADÄž¬o_ ŸÊkä‡?ø×V'sajz©¤²“ÓóJ¯ ŽÎ˜o@ä$Ó>(byGêqûH@rÐ|v÷Á}?@""¶|6ðcvaˆ×¸¼¦wvþ¡Ýf¬çßFNq+=”Vw[ÿ6DNíƒ"†‘q$÷ŽÔ#ûlµa=÷|LAtÂDt=2e·c¢±¢Š0¯_à\ûHtÎv;ñC.ll&‚mc§ò3rê‚Ckñ-‹ÍˆœÚEŒ!×H72ޤ#ïH=‹Íø!÷0 1ÑÓ3’ívDD<´¸¯~ïk^¼¬‚–öžñÄNÒvGÏù'æV«jû¯(üÅÉÝ=Û‰gÚE ËH4rëFÆ‘t¶;òQî;˜ˆ˜‹œ¯è|]„yÉvG"".ÛØLÛÆ2M>stream H‰ì×ßKÕwÇñ¿a ˆÝƒ†pDÈ E ÔEÝD]taB^Èæ¯[,—H)T80“Z¹ 2g.’­Óè°™d¨º£yŽmOøŽÓ`ÎüqNïï÷{^‹Þ½>È÷óz}Þ¾‘ôè˜8päòGŸ|^~úæ“È+ë8›øî‡ß‰Ç¯uw’ë]½cû¶¬âüíèä¼u"ºøõC>1~­ƒˆøÍEñ‰Ñe4½fèö~ K‰½D¼?½Ä‚²Ž#"²'¿ü:}¨âwïÁo³Žó¿\Û ‹±ø…–»9… ¹¦ºÖAþ´N$â+zŠdmEgÑ\ô-æÂòrmï§°šØN„dG=šxiGDdÇfæbUõaî±}Å¿èüq%¾fh+.ï…HtöĹ[$,(kë [Çñ½EÒŽž¢­ø²h.úË:Îæ\Þû¶ ŠET6ËÊ:‘ˆÈ¶$V“—º†ëëlmhzæ/ëDïç‰^¸óàY ü 9KOvŽŒ¿°Ž#âzФÝDCñMÑVt–uœ­x¢÷ì(ÖiYV<YYÖ‰DD¶¾ÿÔy³ª¸öhâ¥uœíòJ/ÐíÝ#ù%AÒÒSÓ Ö‰D¼MïA‘´ œ7 EO¹ÿÍâ•ÞOaS±¬ÈÌÊbkYÇÙD$:{ìL77UAY[OhÜ:ÎÎx«fæbUõaç5·´?\‰¯Y'ñ*½Eöˆ¢‰è#>%º‰†²N´-Þêýö+‹äå§o²»¬ãˆˆüãõ›šÆœÂ†Ü@SãWß/-'¬í˜{áIäÕÑS7ˆ}àÈåþ ë8"ž¤÷ È^Ð>t}D+YÇÙ/ö¾ƒ•ÅÖbq±»X_l0ëD"’Õ’ë]½cù%A.ÕÊê¾èä¼u¢]òn/¤ºøpåuou±ˆè=(²;4½ÃçCÑDÖqvÌ»½ï`q±»8¬ó›Qö˜u"ÉF÷†Ÿ¿Ê]ÄïðÏZÇÙO÷ÂJ|-Ø1”WÔ̪êÃ3s1ëD"ž¡÷ ÈNÑ2t ½CûÐAÖ‰vÃÓ½ŸÂúJ-1V™uÉ"ÑÉùÊê>îŸý[»zÇ’ëÖ‰öʽ05½p¶6Ä)ö_lïI¬&­‰x€Þƒ"ÛG³Ð/´ _ CïX'Ú=ô¾ƒ ÆcqœŠó·YhÖ‰DÄç––u­ƒ¹¦œÂ† -wcqëDéá›^}þO‰¤—Þƒ"ïEÐ&|)4 ýb'=|Öû_þ§DÄ%FO•žìä† ”_¹óà™uœôó_/,-'êZsM9… 5‹±¸u"7Ò{Pd t BÐ&t Íb(mü×û)ì4Ö§c¹Œ¿°Ž#"ž75½p¶6Ä­’_lïI¬&­e„_{!:9_YÝÇÑölíêK®oX'q½E6E_Ðt=B›X'J3¿ö¾ƒµÆfc¹qFV[Î:‘ˆxÒJ|-Ø1”WÔÌeRUž™‹Y'Ê ÷½áçÅǯr@~‡~úÃ:Žˆ‹è=(ò_4Eª5hë8áïÞw°ÜØo“-×Òþ]gHD¼¤`âÀ‘ËÜ!GOÝxye'ã|ß Éõ®Þ±ü’ Ǭ¬î‹NÎ['q½Eþv #ø(è Zƒî°N”)¾ïýV[ŽÃ²ëXwÖqDIJóÞÈ’^x½ð¦¦q §°!7ÐôÙ—÷—–Ö‰DŒé=(â èÚŽ )è ëD™•%½ŸÂ¢c×qäÕ×YzÖqDÄ¥fæbUõa¢æ`ÇÐJ|Í:ч“U½‰Î;ÓÍy ÊÚzBãÖqD,é=(º€Fà[ èë8BVõ¾ƒ]Ǻcãqpö«Ï:‘ˆ˜ú[€Ë™<  endstream endobj 268 0 obj <>stream H‰ì×ýK•gÇñ¿aÓXŽF°1ûa´YâpµLF„þÐØB¶HhXT¬m,AÏŽJÚVZ†ss=Hn†k:[mI+œ²R+$‡â,œäN˜Oe¹÷¼~(Z–Ö¹ïë>ç|^¢Á8×·÷ýþ^ãã“ë ¥eî{âÅl>±I…õ —ð?‹ˆy;Nð„ò§íADä^t“zšŒÒSªÄ/?ük;_ËŸAüN&\ç«‹ŽË‰IðûŠŽ_ â—‹ˆD¸ªº–9‹·ðêNÍØuîâ• ¿]0š[{æ§™œ%§—u_ýydºŠx­¤˜&4”’ýçºÏ–®—³·°½ýûED"MSK‰ÂÜ%[k]pèçº`TÖž}æ•<ŽˆŠËY½©æúà¨C‰È´è>(â)ô‘JÒJÌY‰yÔÓ¡ƒœî>KÜÒmÁÃ&ãÐ)""á­·o ó³M JOÜtî,§»æßà?=Ѹ§_Î-«ltî,™"ÝE¼ƒ2ÒGIZI1àûl/ì0Ä>ÃVãÜY""aæîWèªÕ.¼B]è‚Á¿%eå·œÅç…7¾<ÕÔåô‰"òºŠx5¤‰&ŽKW”‡Y÷?øäg±Õ°Û8zÉ µÇ.ħóæLN/kjéqçP׺`ܾeïíq!|"r_ºŠØEé  "e¤îœër÷ÙgØj8‘ ‡=ÇCEDBN[{ojÆ.Þ–so©8ð‡›G»ÜcgÅ™™ ~ÎŽËù(÷çÑcnž."㺊ØCõh䤆;vŸvót+ݯ¬=ˆùl;ì8êòVºþ¥«7ÕDMÔpö‚|Jáò"N÷A+èÕã飀t0¢ºÏžÃ¶ÃÎÃæÃþãò""^3vëvÉÞ3& ï¬ý¾£ëª•1luÁèüëŸEi_1ŸøÔâ¶ö^+cˆD ÝE\Fã(Ií‹Øî³ó0û[»•1DD¬«o¸”¸¬„÷á«oílhì´8‰Ý.ü±I…&‘i™ûúC‡‰ºЏ†®Q7“¹ØE…TÏâ0^è>›ÏÂ奌Á.d÷×q_G×U…g_Ûüõw¿Ýºmw/tüù;y*þs†™1Ï—»ý„õ_F$¼é>(âZFÑè£tÖëæî³± 1 {Û‘ÝyDD\pm`äÓÍGÈAt\ÎÇù‡øOÛýÇ#]0øMV®ßÏ<|ž[¸¹æèyÛ‰„-ÝEœFÅh™‰ÚŠuUêþÿ™Õˆ½ˆíˆ¿xä'qžêæç_/à üö‡;þ¶=Ξê‚ÑÖÞ›¸¬ÄtáòÒŽ®«¶' CºŠ8‡rÑ/2ŠF×lOt‡»Ï^ÄvÄTlJìK¶Ç ²†ÆN…øÔbO½~ vÁ¨9z~ö‚|f{ò¥ì•ë÷_±=‘HXÑ}PÄ ÔŠfQ.ž/*öÃá6ÛÝ˳ݯo¸Ä¦ÄllMìN¶Ç ‚îËU«M¶ïþmôƘí‰îó]¿XÖõ3æù˜pf‚[ù)Û‰„ÝE‚ŽNQ+ž,ÊE¿Ôýéâc_bkbB6(ö(Û‰ˆ<¢á‘›¾¢ã1QX“UÛ×?h{¢Iy¹ F`èÍ÷÷2$ŸØ¤Â§ÿ´=‘H8Ð}P$ˆh…2©¢Yêþã ûìN ÉÅ6ÅNe{"‘驪k™»d+ï±ÔŒ]ç.^±=ÎCx¿ FskÏü”"“Ú%ï~Ó}9`{"‘Цû HPÐ#ªdòD§¨•í‰"TºÏÅŨìTlV¶Ç™Þ]Éée¡õî •.åUM³ó8*.gmöOÃ#7mO$ªtyL4ˆÑ#%ÚTVÙh{¢) ­îWje§b`ö+¶,Û㈈Lª·o`MV-齃Aéɺ§„VÆ'ú»Á0:Ôú+¡å_|,ôû endstream endobj 269 0 obj <>stream H‰ì×ïk•uÆñ¿!]¨0”¡tµ¤1p©ƒö =˜¡X>Ô¬‚âÈý`ckÓis:l“¦Å¬JÍL9º¦â’5ÆÛp™ûq¶£öÎ/I¿¨9wÎçÜ÷}½8Œ=ü|ïûœÏu}ïÝó¿Ê}ß<¶h'­ñ¤ÆÖ‹™9•üˆff•n­h›°žh²¾üöcó×zÉâÙÖ4œsO»¸$Ô70d=‘ˆÈ_ÄÇõMa·¦ÖokëîYOôp<— Ϲ`Ý!&糨`wäjõD"£û ÈÔ8äŽ ’H¹ŸÈ}zí‹SÐÄècÖãˆHà ÆF¶” fe—ï¨=y{8n=Ñ#ñA.€·ðÆ»ŸÍX¼“³ÌÍ­j ]¶žH$Ýé>(2Id ÉÂï…”ÙðÎqå~:à-¼·ë4MŒ>F+£›YO$"¸s÷àÑKó–V³H×n>íºi=Ñ4ðG.8¼‘ekp>9Eû¯Ý賞H$}é>(ò¿ÈÒÄÅ ù¢ÜO7¼úÇ¡›ÑÐèiÖ‰ˆŸ G](ð—ÿ­Ç™6~ʇ³ÌÏ«vñýjqë­¡1ë‰DÒ‘îƒ"ÿì A\”)íg~´žhÚø/÷Ï~÷³/šˆ¤h×͵›±gæ-­>xôRâÎ]뉦“ÿr¼£ªÏÎÊ.çhü埽5‘G§û È¿ò}‚ø5÷ihô4ŽFg£¹YO$">q{8¾£ö$q‘Uº¥ìÄ`lÄz¢éçË\pn ­yëcNÇg~^µ/Ï(2eºŠüIA^¸à A”ûÞBîÓÖèl47ú-Îz"ñ¶æ¶È‚µìÌ•[:£ýÖã$‹sÁ¹v£/§h¿ ÷ekD»nZO$’tù3ÒŒpañ|Ñ>²Ãz¢dñ}îÓÙVm:Âiqt9ëqDÄ“:®ôä­n`“dî ¾n=Nrù>œÖÐå¹¹UœtÆâonÿüöpÜz"cºŠ8$¹@:ð‹ )È ë‰’+ ¹O£ÅqR½ÎzñŒîÞØúmmlÌœÊú¦p|9qåé‚ÝìŠü×èüÕzœ” Z.8‘«=O½¸ËÕ€‚u‡º{cÖ‰¤šîƒXì|6¿‹²€D°ž(¥‚™û´;:§ïÑú¬Ç‘4Â~(|ýp÷C0sÁil½˜™SÉñ3²J·V´ŽMXO$’:ºJ±çÙöì|¾üìRÀz"AÎ}š}ãÓýh€Ö㈈±Ááâ’;aÎ’Š²=_ö.ä\¸w¿¼½ã‹™tƒÃŸvXO$’"ºJдÿž=Ï×žÏæWî[bƒ÷Në£ûñè´Aë‰DÄ@|<ñÁGææV± ÖokëîYOd)à¹àð(XwˆçÀçÙ—öD®öXO$’tºJp°ÕÙínɳí•ûÊ}¾4@žmNH3´žHDR‡˜]¸— ·ºáüÅ_¬Ç±§\xàÔùŸž\þ¾+ /olŒXO$’DºJ°ÉWm:â;ž=o=‘=åþô@Ú Oƒf¨"Ñ~ O¼PÓܱ'](þ¦¾)<û¹ržÉãÏ”•ÔŠ'¬'I ݃ë7ÈpùH endstream endobj 270 0 obj <>stream H‰ì×ßOÕuÇñ¿!Ä©[ËÔ¥­@‰ EièZº²‰Ó¹y« ‡nâVsYƒš‰†"®´HTæ ¦+A+;³â4Á‚™–à¨=õÛ…Î9ç{|¿ßózìÌÉÝ{Ÿ}¾¯÷ës÷n"è¿9ðÞõ£§†žz±`ìKE[>>a=‘W|}¼•3á_ëA¼âÓƒ§ž{yg’³¼²¥ý’õ8"=½}ï”|•œZ8&­hMøZOä!Ú â†äæW'¥p2Ïf®¯©k¶žHÄ}ë>ú–οփˆ¸Üž0s=7œ$'ϵ÷¤½ÿ(ný–HW¤1êˆÉÀí;»öœ8+Lô-ÊÛÛÞyÙz"ÏÑ^ ·ef·_Æü²³­]Ö‰¸IïA $²šÄv¢› ×Þ”öþ`¸-tE‡ÞH{¤CZO$"±Š4td.Øî”ùúH›õ8¥½0´šºæIYaŽ()¥ 7¿º§·Ïz"wè=(C>“Òd5›Ü&½­'ò(íý¡Ñé’&i=ŽˆD©½óòÒ•ûù–ÇÏ()ûìÇÛw¬'ò.í…aqж~3zjˆƒ“VT²ý;Ý( ½%HHfò™+MV“ØJé!hï‹ûC{¤CrPôIZ¥õD"2W¯õ‡JK/NN-\:t¥ûºõD^§½ð˜¸K‹òörVü&go¬´YO$½%Hc2Ù gRZ{XÚû‰»D“¤OÒ*é–4Lë‰Ddx•_œž2{)7oÙî³­]Öãøƒöˆ4µü9mn©S<²ïìøýë‰D¢¤÷ øÝù‹Ýä°È$3ùl=‘?hï}’VɉÑ0é™ÖãˆÈ ›.ÌYRÁך6okíÑsÖãø‰öBªjÏŒŸQ¹J-\±¶æêµ~ë‰DFLïAñ/R—ì%¹Ã¤1™l=‘ŸhïGnIÃäÜh›tNëqDä!]õ¾õöA¾Ð§3Öm(ÿþFß-ë‰|F{!:Ü´ÕŇ“ï·‘±éÅåŸÿd=‘ÈÈè=(>UQÕ@êr{I`rX{¤´÷£ÃM£gÒ69=š'ýÓz"yèÃÌ{÷K}˜ÑÑ^ˆ·îõ7÷p€üžeó‰ÆNë‰D—Þƒâ;d,IëD.Ù«½íýXpëèœ ý“JµžH$qÕ=÷«ò=ÎYRÑØtÁzÓ^ˆÝƒe޲ݪ(â zŠ«<˜%oI]ë‰|L{?v4Oú'ÇH¥‘Z#’p~nùƒÊÍ78eö¦‡š¬Çñ=í·TT5ŒK/æ0“S W¾ÑwËz"‘¡è=(¾@–’¨ä*וŒ%i­'ò=í}·ÐBé¢&½”vj=ŽHB¸Ò}}Uè³B¥Ç®^ë·ž(´\Ä\±¶fÔýÞòÌô’ªÚ3Ö‰ JïAñ>RtüŒ.*¹Jºjï»B{ßEÜI)½”#¥£ÒT­' ¬þ›Ûöüà,…¥+÷Ÿ¿Øm=Qph/¸Žû™½x'§ÊoÚÜÒS¿\°žHäè=(^vºù"ùé)‰ª½ï"í}×q?i§œ*M•¾JkµžH$hê#móËøÊ²–G:¬Ç í…8áÞNÎÞè”™Ey{¯t_·žHä!zŠ7‘–d¦ž¤(Yj=QÐhïÇ •¦ÊÙÒZuoEÜòëoç,¯äËš8+¼kßIëq‚I{!®Â;ŽI+â„GO ½¿¹~àöë‰Dþ£÷ x Y¸åiÉÍ$9ÉO뉂I{?®è«´VN˜KµGÄÇzzûÖ„°øñþ´ž(°´âÛ››_”RÀ9OÊ ×Ô5[O$rÞƒâ)d# É$-ÉLíýøÑÞ7•X‘Ø}r qâ¬{K!gyeKû%ëqN{áÉ8ÛÚ•1¿Œ£æ7ý²öÎËÖI¢Ó{P<‚<Ì\°Ý‰Gr’´´ž(à´÷Ÿ ,=–£¦ÓÒl­ÇñHCGÖÂr¾ô×¶ÕGÚ¬ÇIÚ ORM]ó„™ë9𤔂ÜüêžÞ>ë‰$qé=(æÈ@’<ä*’$¤õD !è{ÿ_sýñ. endstream endobj 271 0 obj <>stream H‰ì×ÿK•wÆñ¿a­–Á@ØÆ‚–e &Í.æ6˜Ò bÛjÑÛH0µD§Ë²†YRR«I²e_¨YkK攕֜(䜆‰r6µµ}÷.!¿­Ÿ"ý¢es ÉCRQ{?l´÷ÃŒ»M³¥ßòg§ëÒx­'qÁ¡`ÖÎósârx&2OônZOä/Ú &¸ç©ïæ/Ïϳ/V]Óf=‘øŽ¾Å ‰Gî9Hjö¾ î9-—¿<—ÞKûµžHÄ-*N6=÷J!¯#yõË-×­Çñ#íCÍ] _Û锢e+öuv¬'Ñ÷ „)—´r¿z¤h=‘iï¢ëÒxùûÓ~éÀÖãˆkhêZš^Ê‹˜—´ã›³W­Çñ/ís‡¾þùÉøíœÂã1[×m9>8´žH|A߃N·†o“o¤·ŽÄ#÷¬'ò/í}sô^Ú/§@¦[#b §w`}F•³òK.²#¬'ò5í7àlÊ95óŸ¦Tz¤Þz"‰|ú”°!ÓH6î)GÖiïÛÒÞw^Øy´bº±õD"a ^þ5›+»{þ´žH´\„ñêÊ2ŽƒŸç—}^éwë‰$’é{P ±¹‹4sb|ÓÞwí}÷àEЇ9º1 ™žl=‘Èôª:÷Klò.îüÒôÒ†¦.ëqä>í·©mè­O)kË{z¬'’ȤïA™Vd æD™F²YO$÷iï» ­˜n̡ГiËÖãˆL‹–öÉ«pÏç&”W6Z#Ð^p§¢²Ú¨¸ŽffÌÖóÎGBÖI¤Ñ÷ LòêÓü³dŒ#ͬ'’hï» ™žÌÑЙiÎÖãˆL™þÀÍY'Y ³c³³vž ZO$ÿ¥½àZ¼—u[ŽÏ˜ŸÉE/Î=RuÉz"‰(ú”é@R‘W\-²‹ÓÞw!í}×â½Ð–éÌ4gú3-Úz"‘I ݹ[røGg)¼½á«öŽ>ë‰äÿi/¸ogIÚ^ΈŸE¯_ií±žH"„¾ej‘N/¾¹Û +RK{ßµ´÷]Ž·CsæŒhÑtiµõD"Q]ÓŸ²‡›ÌïšúkÖãÈÃh/xoꙄ|§h¥½ÿeà¦õDâyú”©B"‘KN@‘Tä•õDò0Úûž@íÒzSâ-í}éáö>õRÞ¾£?…îܵžHA{Á+xM¹_|?;6›ózbaÿÖû’ÉÐ÷ LÞ¿s‰ßÊ%OÐÞ÷ ^]šFÍyÑ®éØÖ‰<ÂßäeÌŒÙúá¶Óü×z"íoáe­Øp”#ãç鄼ãß^µžH¼J߃2I'εBN‘KÚû^¡½ï-¼,z5횎MÓÖC×*¯lœ›X@¼¼õî¡–öÖãÈ8h/xѕ֞ø”=N [’¶·½£Ïz"ñ}Ê„‘9$Ad‰d=‘Œƒö¾Ñ®éØ}›Öm=ŽÈêKH-á~Æ&ï:õݯÖãȸi/x×±ÓÍÑ‹s9¾ó3Wo:68´žH¼D߃2äÌ;U’9\ò‡²žHÆM{ß»hÚômŽîM·Gä^gw`ÍæJg#¬ Ž„¬'’‰Ð^ð4Þ]Faõ¬YbT\NQY­õDâú”ñ"aÈ® ™Còhï{”ö¾§ñîhÝto‘N·žH|êÖðímÅæü½ÖgTõôXO$§½xƒ)kË9G~æ&\¬¿f=‘x€¾eìj:È'dHí}OÓÞ¼A8çH§“ÓÌ­'©8Ù4/i7pùª²Ë-×­Ç‘ÉÒ^ˆÍ]1Ë‹œÂ–´rgwÀz"q5}ÊX$ä‰,$ 9c=‘L–ö~Ä ‡ÓÆ9Mš9ýÜz ‡¿ ö“ endstream endobj 272 0 obj <>stream H‰ì×ÿKUwÇñ¿aåV ì ý0Z.'ˆ0×Íó‡Ec¤?È Æ !ÄÉÔD1úâ—-J“”˜ºáŶ6kIÒ,—¥KDYâ4L ›š^µÚ³&CÜÅѽ÷}<çõà"þø‚Ïy{ôÈØõ®Ûofê¥Ü5©‡Ï4Þ°Ž#áqîçnÞ”¿ÖA$<*j[c“ yÓåñy»ó'§f¬‰K~ñß ­ƒˆKÑ=² ÎÒIøNè*ôëDšûÃNÎfΛ²¥³«[ÇÏÛ™àK[•XPtä‚6L/Ñ\ð*”KP[œ„¦{PB oÐ=øBè$ôÍ}/ÑÜ÷*”ýœ-—ecgo·N$žœž-¯nq†Â¶=õýƒ£Ö‰$Ì4¼ŠjMÍ<Îãò‹»¤­cÀ:‘¸‹îAY½bݦR§uÐC4÷½Gsß«¨Vvu—½íÞ:‘xAàüÍ„´2¾«”ÍG¹ÖoG"BsÁÛ.¶ÞZ½á€³Ú¥o¯³N$n¡{Pæ¾;A—pÚ}ƒîaH"BsßÛØØÙÛybvx6yë8²„uõÞyÎD¨©o³Ž#¤¹à%U—V&ðÐO¿œŸs°)8=kHìé”9ô:ýO‚^AǰN$¤¹ïlïìð<4û<[½uYbîMíÎoŒ‰Ï[‘°ï³âïÇ'‚Ö‰$²4|‚ZÎÊ®[¶6—çŽK.ªû¶Ã:‘Ó=(ޝÏuÒøèt Í}ÏÓÜ÷ j™Mž}ž­žÝž ß:‘,³Vžºòì«Åt‰Œ]§{ûF¬I4h.ø u½~Ë1^œ_Rú—ÝC։ČîA¡Ðœ†@gÐÜ÷ Í}_¡®Ùêyq6|ö|¶}ëDâ^.ÿî þ65÷XÇ‘èÑ\ð¡†~{.¥ØY·î:uolÊ:‘Ð=ègT}æ'§&@7 'X'’èÑÜ÷!vû¹=Ÿß:ޏNoßHÆ®ÇC!.¹¨òÔ•Ù­ITi.ø•^täÂ3ëòyý ûø_µï7ºýÉ©}ªž×§¨ö}Hsߟ¨tö|¶}^ŸÍŸýß:‘¸ÂøDðóCç 1ñy»óïŽÞ·N$4üŒªßòñW|üžOÙßÔÜcH¢G÷ Qã/¼¶ß)yj_sߟ4÷ýŒªgçgógÿç à°N$–jêÛVo8@Cx÷Ãê®Þ;ÖqÄŒæ‚tv½òN¹³"®ßr¬·oÄ:‘DƒîA_¡®©n§Ì©wªÞ:‘˜ÑÜ6ö>n.ë8bàê×ß<ÒÊçoZÇcš ⨠´Ç%ñ1,[›»coÃøDÐ:‘D–îAŸ –©èåñy<75N¥['cšûâà ààcà.à:°Ž#QÒ?8ºmO=ï›Tx°²98=kHìi.Èz§ÅçbþÞW&”T]²N$¤{ÐÊN´PË<4uMukîË#Í}ùzwŸ7—‚u"‰ É©™ýG/:Ͻ3'04n . î ëD²XMÍ= ie¼]Êæ£Í­·¬ãÈà–¹ð—_"òô endstream endobj 273 0 obj <>stream H‰ì×ÿKUwÇñ¿a¥´ÆXÌÀ~¬[â°HÁb?DÂ(µ Œ1æê‡ úeAzµÜ-4ç²b¨Ø7"†R°²ÖêR03¨f‰((«5™â—´Ôö´³¶Û¼Þ{ÞçÜózpëooÎçýþ¼Ïëùsñ¾Öhwznå+o—ð~rt`p̺"‰ÝÞ¯/qŽüµ.DbÇ ®ßrÌIf“ µ®H|àûË]4 ­ ˆ¶õæÖÑ0ytÃx_gÏÂâ&Î+-;Òxú†u9âÚ 2[Uß^]QFÛ¤. öUëÄÓIëŠ$ʃ¾ÆÜ1}Ì ‡È<2•Ö‰ohïËl‘,È´ YƒÄa]޼ÄÐðø®È¹”P)ük]‘ø‰ö‚Ä€{¦hÇ©yKKhž7W}Ñ|þŽuE2kʃþÅÄ-Ιù6c™Dí}™í}‰7È$Å O™œš>râzZöÌR((nêé{d]‘øö‚ÄŒ;gÅûµôOV~mGW¿uE2 ʃ~ÔÙóYs†ŽéÓÞ—hïK̸sHôéƒ B±®(è¢m½9…uÎgXk´Ûºñ+홣æówçDè¢yKKŠvœ·®HþåAa²˜/¦ŒScâ˜;ëŠÄ¯´÷eŽÈ¤ºˆ$B±.' zï=Þ´í$§°heEMõɩiëŠÄÇ´d>ßßšº,L/-È(‹¼l]‘ü7åA©°.G’„ö‚Äןï/_Wí|¾æn8ô˯ƒÖÉË)z³³úƒÃÎ(1SL–uE’$´÷%¾H%dšŠœBZ±.'iµß¾¿fãÌR­­j¹p׺I*Ú ’l„7VTÐZóC¥[w7ŒNXW$ÿ¤<èYÌ SÃìp@Ì‘¾¯$¾´÷%H(äZ‹ÌBr±.'©ôÿ>üñ§ßñn_ÏÚûeÝ•'ãϬ+’d£½ Â}µ³ülÊ‹oÚ…™å‡·YW$£<èMLÊkïìáh˜&H{_âN{_„ûŠ´Bf¡ÁÈ/¤ëŠ|O¯TÜ¡½ ÅÝ•·¹žãyëÝýWÛû¬+’?)z ÓÁŒ8ÃÂÔhïK‚hïKBqw‘\è1R Y†Dc]‘_µ\¸Z[Å›\³ñpûíûÖåH2Ó^üõC÷½ô¡ëʃÞÁDäÔè “¼XW$ÉL{_\@~!ÅÐi$ru9>s«óAÞæzÞÞ’ÕûŽ·Ü´.G’Ÿö‚¸¦îèO¯f–Óo)¡ÒågŸŒ?³®(Д½`âé$³ÀDpL3b]‘$?í}q Y†DC¿‘nÈ8ÖåøÀÀàØöð–ÂÂÌòpõÅ‘Ñ ëŠ$´ÄMÜl[w7Ïñõ»he›Âº¢àR4Gÿ3œÁ\hï‹;´÷ÅMÜläÒ ‡¤CÞ±®È£&§¦k®9KaÓ¶“½÷[W$¢½ îã–ËÝpˆÆãY¾®úvçoÖ‘ò ¡Ž®~:ßfA{_ܤ½/îã–#ãÐxäRÙǺ"oivgå×ò~r ë¢m½ÖåHàh/ˆn¿ôÜJç“xý–cƒcÖ‹ò  úœnwÚžþg ¬+’ÀÑÞ+$òíGöÑíçèé{TPÜÄ;IËŽ9q}rjÚº" "í1ĽWñÍ 2ÊhÂÔeá²?è&tò Ëèí=5—ès^;=Oç«ÛÅ„ö¾âÞ#õ}hBriȺ"3CÃã»"çX)¡R~ð¯uE\Ú bŽ;°hÇ©yKKhÅÅ9‘æów¬+ åA7ÑÕô6/œ>§Ûµ÷Åö¾˜s¢9ˆ4Ì(ÔxúFZöÌR((nêìyh]Žö‚xDGWV~-Ýȳªà`Oß#ëŠâèúÒô¹ endstream endobj 274 0 obj <>stream H‰ì×ÿK]uÇñ¿!3æ`°Ø 1hi™$‹É¾@þÄÆ*hÐh«UR°£F2u2sÍ}q_Ðm2mdµ¤v3jiµG-­5m"»”È åŠ_æuÖzng *uSÏõ}Îñõàpñ§sß÷ðòó>¯k×¼gçÁoîz ‡OëA.ÜÖ“¶¦„GÍ•šy¨¹µÓz"™í¾ø¶•4òi=ˆÌv-á®Õ›NÆË +ª­Ç™!uç~w–BrFqMÝ%ëqD®Ó^O9õå¯÷>ú6™ŒKÌyîõ“}ýÃÖ–ú`¬‘^2L’yΤšl[O$rö¾x ˆfD&iIt%ëqb¨½#²~ËGüÒùK ”ŸŽŒZO$r“ö‚x 'dvQÍ=æ‘Ì„‡wì+«·ž(˜ÔcŠÜ&¤äó„I2yÖÞïÐޯᄤђH&‰Þd=‘Ë£yû¿š{c)de‡z#CÖ‰ü‹ö‚x§å“/¼K8¹î[ñNMÝ%뉂F}0F¾®“X'ºdX{_¼F{_¼‰Ó’®D8éM´':”õDîø°úÂ’ô½ü®ŒõÇiùÃz‘1h/ˆ—56]~èñýΫuúºcí뉂C}Ðuä“”:q%·¤×z"‘1hјèMD”E“²gZ~jîXõÌç·T}Þd=ŽÈ¸´ÄûŽŸl˜—º“ Þ”ûÊ[§® _µž(Ô]D&_Ýþ)ùä‘’Uk=‘ȸ´÷ÅûhOt(‚JŸ¢UY3iÝýYÙ!g#ì*ùNï-âqÚ â œ¥[ò?‹ÿç}ûHå9ë‰|O}Ð-¤‘Lò0É')ÕÞÓÞ_à,¥I9§+ÝŠ†e=Ñ‰ŽŒ­sÆÞ°µª½#b=‘Èíi/ˆp®¦¯;Fb¹îlOcÓeë‰|L}púHà’ô½N I¦ö¾ø‚ö¾øç*­ŠÄÒ°èY´-ë‰&ª½˜œQÌ´+ž*m¸ Wñ íñú†¶Å«Šœ—ðÌÝýÖù’úàt:²ç„4’Ië‰Dî”ö¾øÝІEni[t.ëqÆÐîzâùr&\´rwEU£õ8"“£½ >µ¯¬>!%ŸôÆ'ånÛu::2j=‘ϨN IË.ª!u<=H­'™í}ñ)zm‹ôÒ¼è_ÖãÜÔÚœWÍR˜“¼cûžÚÁ¨õD"“¦½ þÅ©ûÒ¶OâsÈðü¥•¡óÖù‰úà1’Æs#udO{_üH{_ü‹S—ÎEó¢ÑÂèb†ÃŒþù×Ñ÷t–³¯}në1Fd:´Äï8—¯-%Æ\dlní´žÈÔ'…\¥frbFÞ´÷Å¿´÷Åï8é_Ę.F#£—Íü 5u—œ¥Àç™ï›ùD\¤½ Á@†¦:¯ëk_~¯72d=‘שÞ¡¾þaåD‹Œé´¿ÓÞ—` …Ýjd´³ûÞ[mtÁ²B«6*â.í Îä‚Ãgæ$ï Ò|ò·Né ¨Þ–%¤½/Á™L#£—i:M-¦_70}³ð4ë >)ws^u_ÿpL¿NdÆh/HÀp>?UIª¹¦*ÛãQœÉ!?NH”ö¾†ö¾ ç3팎FS£¯ÑÚbñ-U‹Vîægõ¦-á®X|…ˆí ¤æÖÎÔÌCÎËüòµ¥á¶ë‰3÷ÆRÈÊuv÷»>§ˆwh/ÈlÀIž¹±‚¨s-^UTßÐf=‘=õÁ[È©pâAN´÷'ëo|<ðU endstream endobj 275 0 obj <>stream H‰ì×ÿkUuÇñ¿¡6QÃè’MÇ rÄüÁ@‚ŒýPi¹Û¼w—aßt6–m‘Y7ØrRš1´ZüŠ ¿Çmd“«îÞíúåÅÅD¯ÛîÞçœÏóÁe lð>Ÿ×çÜ—ï;w&ßÿ4øÈ‚zý´( ÔPz]]—®úìòX¢õàHf,ÿ¿Ý½ïøSUëo—½Ò~ìôŸ…zî8qyÁø7¼>UkÚ/^¶žÈRÓö^ƒ~ZbIw@7Á»ºº!ÖGïÃÚæ´ÓéÂk¿Ëó÷_|µÃû}m……z®Ù‘쟳¸I×¾¸´¡6Ö=’³žÈ†ãû rWúº:ÝÝ ë‰€iBïÃ5Ú츦†ÒëêºôjÌ.Å[zý¿ÜD/ÀAúž§þ»¢wŽÝG¬'2àò>¨Ä•»_w@7Þ‡Sè}8è>ßóÙÑ\Ë—‡K*z/^Û°÷â•áé zÎÒw~ÕšvÝ}Uo8qÙz¢iåæ>¨”•µºÒ§÷á zøO÷¿—-ߦ7¢rUÛá Öã6è8®÷ç?æ.Ýâ-/½ñÕÕá›ÖM×öA%«|½ •¸r·ž°Aïrúì_+ßÜ¥waÞóìÜ;`=`‰^䓎C³Êczf,l¬û°';š³ž¨àÜÙ•¦2U²z^¥¬¬­',Ñûpܵtæ½øþâÒ†™e›76ÿ ZO£¡fýžGŸ®×QR‘èÜôn㾫Ã7­§‚ˆ^îCݱú­oôŽè3wé–ž¾3ÖM™èíƒJGya)5z¸'zàG/tr0U¶|›·h,YýÙ¹KÿXO4¢´*åâ´¨z«ò²ž.zàG/yJv-©Hè})*mX»©óú¬õD“}P)( %¢gQ:ÊÈz" èè}€½ä/;š{?¾¿x|û˜UkÝõ‹õD}Pç¯ôJ¤6Ö­t¬'B€ÞøÑ ÀÃJ ¥W¼¾S/Ž>ó_øèБóÖMD¨÷A¹NÞ‹@Y(뉀Р÷~ô01þ•¤ºæ‹Ð­$!ÝuÎ:mïØuþJÁz" dè}€½LÆŽdÿcÏÄõ—6ÔÆºG2cÖå+tû ÎV'¬sÖØ:s¼õD@(Ñû?z˜¤ë7²k7uï)?Û”ì:j=Q^µêTu¶Xç¬ÓÖ™[O„½ÿpî 0©±£ñ endstream endobj 276 0 obj <>stream H‰ì×ËK”QÆñ¿!Í ZHn‚ÌK$-L ¡°ÀÝPDѦ.mQ +±ÁèbA†T ]¸š gÑEº‚I˜" ÝdÄKŽÚS/Ù)*+Þ÷=¯ã÷à ƒ‹9Ïyàðã·°©íÎýþU›kõ×v`yï:ТפO^ÙùîÞÛ‰–pºù®¢ê¯í KP“êÓ)vçþõl;°¼1÷&æà¢X×@vIÄY^BmcñiÛ‰~+øû ÚS‡N™jUÝÚN¤æ>ÀÄ\\×tµ+3¿^/+#7\ÓKÎÍÛNô AÞÕ˜zS{J¨&#WØN¤æ>ÀÄ\¼0>1s¤ª#-§Vï+«¨1ÚÙg;ÑÏ»ª+5¦ljOªIÛ‰€”Âܘ˜ €w^½~_X~IOL}ú`;ÑwÜÕY×ËÁ·¶)ˆ¹01¯E;û²ŠõÐÒrjTuŒOÌØNôE öAu¢fÔ"©+5f;²˜ûsðAb6YÓËÈ ë¹eæ×Ÿk}h;Q€öAµ¡NFý¨%ue;ʘûsðÍX|:TѦ§OvI$Ö5`1LöA5 œBÔŒú±X!˜ûsðYwïH^Ùyg *=xux4n%†Ý}P·ÖÝÔ†:±X˜ûs°¢ýfÏúÂÓz}é[ê*«£“S ŸØÚuSÝW·Öéj@=øXá˜ûs°åã̧c'o­þº­Ûvª¥ý©Ÿ§[ÙuGÝTçêÖº»ðót Ì}À˜ €]oÞMì9ܪg¨Ï¦Ò³Ožûs®Ïû î¥Û9×Ü}¨U·öç\?aîLÌ >Z\—ÊÞða]òmÔ]t£Å…W7õúDÀܘ˜ @p4_¼vëI=ÉÕ[êŽ7ÜNÌ&½;ˇ}PùO4ÞÑ]tîuáÚ#ïÎð—˜ûs”É©Deu4ýëµa{CûÍòzTrå׺‹n¤{yt€Âܘ˜ @ }(]ÑÛÔ§`ï…ýo\?»}Pi ö]tÂ뺋ëGøoÌ}€‰¹V¬k »8â,V¡Š¶±ø´‹?îÅ>¨„ÊéÞ¸ãŒò»øã\Áܘ˜ @%çæ.ßË̯×;ÍÈ ë»þãÊ/»»:9×ä…õ›JëbNîbîøæ³{(þè endstream endobj 277 0 obj <>stream H‰ì×ÏKTQÆñ¿!Kr¸r×h!ˆ 1[X´™VB™Q„m‚ “h“¡&’Æ(º°Ej&H’Ñ/p#¹É‰„QQ rÌšž¸ 'Ìg¼s›;ß—a¸÷œ÷¼›ÃÉ‘Èð›É=‡jõët#¶ôeyõ\U¯®ªž¬Â¦çâ¯Ùxÿ•ªé7þRêG]Yí•_íQ·ñ×`r`"€d˜œË÷¶ZcWQiÛTp!žj»2ªubµ¤ÞÔa<Õ$¹0‘ @rédøtmÓ<µç¯=^ …c«ç<¨s/T÷©Q?ê*¶:ŒÜ˜È é„×ÖkZFÒsëuy3òü£1‰gÔ‰:WÛÕƒ:Q?1àr`"€$5¿:ué¡î¯žƒGï¼û¼£í±Íƒ:%»¸Ù:Ô[Ñ¥v´€ãÈ}€‰\’ÚøÄÌá“÷¬­¤¼czv)Ê;UYõ­ƒt¢ÎµeN"÷&rpöGcòu—÷æÔUÕ~[ý¾í–èçAUSMUÖz¢³v£eÎ ÷&rpMmÕ CÑOmQ΃椩úÑLšþgä>ÀD.n2=»TRÞ¡K­ÇsÜ?>1³ÕÊmçAíÍ9á·J©¦*ÛÓ2€„"÷&rpŸÑwÁìâfk”óVtÍÍ/o^óyPëµËÚ®:ªf˄ܘÈÀ­ü£y ºàé¹õ5-#áµuóë_çA­ÑJ­×'íU…Ķ Àvä>ÀD..¶ WÜèOóÔêšgøzßo|Ú<ö=›Ð½Ôú‹×Ÿh¯-°¹0‘ €ëMŠJÛtÓõä{[“s‘?çA½Ñ{kVj½Ó-° ¹0‘ @Šzù)«°ÉúÎ\é¾uwDô[VÙm½Ô×§/>:Ý&{‘û¹¤Žõ?}^ï?r[·~_NÝÆ¯Þè½¾:Ý Û‘û¹¤šÅ¥¯ÇN·ëâ[þëÓMHr`"€”2\(*mÛ­GoôÞéÖ$¹0‘ @ŠX …/ßHóü3 |e•Ýús¶²GÿõGïõUkœn€½È}€É­¹ðK€h endstream endobj 128 0 obj <>stream H‰ìÕ± ÂÁX„!Ù*-c°L ô‘ˆôw…kwžp?Çûóx¾~ûï#Ü‚.@‡î°t:t€¥ Сû,]€Ý`étè>K C÷XººÀÒèÐ}–.@‡î°t:t€¥ Сû,]€Ý`étè>K C÷XººÀÒèÐ}–.@‡î°t:®êþW€zŒ‹§ endstream endobj 129 0 obj <>stream H‰ìÕ¡Áh„"éê-eÐ̃Œ{Å0ÃíŠè¸;OþÁñ|ÝîÏþúðuºÀÒèÐ}–.@‡î°t:t€¥ Сû,]€Ý`étè>K C÷XººÀÒèÐ}–.@‡î°t:t€¥ Сû,]€Ý`étè>K C÷XººÀÒèÐ}¸ö`?3 endstream endobj 78 0 obj <>stream H‰ì×ßKÕwÇñ¿a HÞxÕ‚ åEÒºP¡Y0‚ X YjSNÔJ]pÒ‹a'·&Ú~t@6³¶¬tC™ázj(-h/Ä]é÷„²ªK÷Æ[ÇÙqzŠ{0Õ™í\xæ<ÓÞ:Ž1íýWÑé„ý–HW´N$";%8H“´N$"Û×í¿“·ï ï½÷»Æ'ŸXÇI_Ú àå{9ŸòêÝ"É0zJFbV3±¹ÛLof¸uœt¤½ÿVÜ"Ú#§D“Ô-q¢‘Ñ™ÒʾbOY[`pÌ:NºÓ^ØØóÈÒ o¶§)+¿¿ðOëD"É¡÷ d˜õqÍë hïo’&ÉYí=|‘niGD6%4û÷Ñã~¾ÜÝ…Íg;ƒÑå˜u"Ð^ØŒÉGOË«{8¨ÜbogïíØêšu"‘Dé=(™„ÉÌ|æJ3«™ØÖqÒšöþæÑ$é“´JNŒ†9 ['‘ÿµ¸´rÚw+þÁÖÔfç"Ö‰C{aó‚…‡.p\%¾àð”u‘„è=(™iÌLæ23Ÿ™ÒÖq@{«h•tKžIÛ¤sZ'‘×]ë¸gÿ9¾ÓÒÊŽ»BÖqF{aKb«kí]C9E-Ú‘ÚËSþeHd›ô§›…™Ã\cf2“™ùlÈ´÷·‡†IÏäèèœþ÷­ãˆÈ¿î?.«ºÿ6¯ôZÇq$í…mx~Qר—•ß°«àTcëÍù…¨u"‘-Ó{Pœ‹©Ëìe3‡™ÆÌdëDN¢½ŸÚ&“¤ÒB­ãˆ¸ÿöäu¾Gòi/l‹€uÀéåí;óeàWë8"[£÷ 8…œ©«B¾mÚû ¢sÒ<éŸcM}€FjHÄu¢Ë±ö®¡œ¢>êcW§CaëDΦ½ ÀàXþóœaieÇÈèŒu‘ÍÒ{P‡ˤåÞ2u™½ÖqœJ{?)蟴PN’FJ/¥Z'q‹àDÁÁv¾¾’ _pxÊ:N&Ð^HÜâÒÊiß­Ý…Íœä5;±N$òvzŠƒ0W?üä7–I˼eêZ'r0íý$¢‹ÒH9OOYÕ:ŽH†Ÿ|R^Ý×[ìíö߱ޓ9´’…ºÂcPuEœBïAqf)•¹ÊueÆ2i­9žö~ÒÑKi§œ*M•¾jG$=,ðög{šøÃ_ø§u¢Œ¢½\#£3¥•iþóÁ±”ÿÿÿ0TÔ+ endstream endobj 130 0 obj <>stream H‰ìÕ1ÂA 1‚ȸ¢Ef’”o€¡¸Ýâëïãýù¯óÙ~N÷XººÀÒèÐ}–.@‡î°t:t€¥ Сû,]€Ý`étè>K C÷XººÀÒèÐ}–.@‡î°t:t€¥ Сû,]€Ý`étè>K C÷XººÐv 0š3 endstream endobj 79 0 obj <>stream H‰ì×ÿKUwÇñ¿apA‚@Ÿ6.\4¦?ŒÁ…5P‚¿Èd“´Åˆí^#¹â¶² wÊÈ’²˜l\„c]¡6Ê… WLÃB»â×[WÛ3î`kèá=ïsÏy=~ïooÎùœ×ûõyþ\äÕœúö—7Þú’¿Öƒˆì(14 wpP«ëºFÇf­ÇñˆŸ½Ï#å¯õ ž²´¼q(àöGšqÒH6òÍzyA{ß…èÆ4dÞ m™ÎLs¶žHd7 &'ËvrÂ+kãÉá”õ8òoÚ n³¾ñ¬-~coÙ)ÞË‘‰ùÇËÖ‰7é>(yEv‘`œ1ÒŒL#Ù¬'’¿hï»=™¶ÌÛ¡9ÓŸ­ÇÙSÓ ‡_äT—TĺûF²›[ÖÉ6´Üif.Ýx¬?W¥¾êNfžf­'¯Ñ}Pò„¼:ýýodŒ#ͬ'’—hï»m™ÎLsæÑ¢éÒÖ‰¼¦¥åã±kE¡–@0òiëU~ZO$;Ò^p³Ñ±Ù·?øŽ w$†Æ­ÇOÑ}Pò¤"¯8Zd f=ŽlC{ßýrEšM—æi)8çûoï;ÐFÔÔ4õNL=²Gþ‡ö‚ûñM•VµóšÞû°Gß”ìÝew‘NïtCE^‘ZÖãÈŽ´÷ ß]š—E¯Ö7%…"9œª¬snCáåL¡Ð^(+«™/¾* µ‚‘æèÀbzÍz")xºÊn!‘È%Ò‰Œ"©È+ë‰ä¿hï–Áä$½šWFǦi[#²£™¹tã±~ÎjqyëÙž›™§Yë‰äUi/©é…ú£—sZwßHvsËz")`…xüS€J!8‚ endstream endobj 131 0 obj <>stream H‰ìÕ1AÄ@ A$®h‘™{Ê`áw¦ˆ…œóïýù>ž¯_pw¾@ùìð}Ê`‡ïP¾;|€òØáû”/Àß |vø>å °Ã÷(_€¾@ùìð}Ê`‡ïP¾;|€òØáû”/Àß |vø>å °Ã÷(_€¾@ùìð}ʸ“K€ó1‹§ endstream endobj 80 0 obj <>stream H‰ì×ßKÕwÇñ¿a ˆÞxå‚4fP ¼0V0‚Ã@èÂ!Ã$›?JNÈ*q–EVcœ›ÃÙZ¿[¡ÔLFr£Cs’a¢œ8þ8G¶ç¤Éjjçœ÷ù~¿¯ÇÅAï^ðù|ßï×çÕ+É-©•ÕÞþᢊÀ{ïåoˆŽÏX'’ÿ÷ÓÏp^üZ‘ÍJ.¥ºû† wvppuM¡‰É˜u"‘YL,·žºYPÖέoOÏÎ['’­Ñ^pœ;÷Ÿ–×ôpjü^¿÷Ä:Ž8Õ±ons‹øµ"Nuk0º>‹˜KÖqd³´÷j6¶@ÓæìhÝto¸u"‘\ŽŒ–ì9Áͬ®=ÿhì¹uÙí'J­¬ööU8;Ã@t|Æ:‘8Þƒ²mÌ&÷‡)Ä,b"Y'’-ÐÞw4ú6­›¤Óí㈧qw8£ÛèÚ Îõ2žhlä•¶äûÚ®ÎÍ'­‰“è=(ÛÀœ9Òy™Ãäaþ0…¬É–iï»@èÊo4pΑ6N'·Ž#ž35¯os ÊÚï.&–­É;Ñ^pº±è‹}‡.qˆÅUB#ÖqÄ1ô”­bÂ0g¸6Ì&uÙ&í}w ÓÃw”ã4iæôsëDâ É¥ÔÉsƒk¯®)41³N$i ½àá}Õ]eåþàƒ_'¬ãˆè=(›÷pô³… ÜaÚXÇ‘w¢½ï&´q:9J?§¥ÓÕ­‰›½Þ6Ù Öq$m´\ƒ-ÐÝ7ÄFà@ÙìëD’Óô”Íx½m2aÔ6]@{ß}hæ~ò-ÇJW§±[Ç‹¾Ø{ð"w¬¸ªóBhÄ:ޤ™ö‚ËLMÇë›ÃœiAY{Çé;‹‰eëD’£ô”·czÞe’pO˜*ÌëD’ÚûnEK§«s¸ôvÚ»uq‰ÙØBck$¯´%ß×v¤óÚÜ|Ò:‘¤Ÿö‚+={¾Û–“-ÙsârdÔ:Žä"½å-˜Ln“„ybGÒI{ßÅèê_~}ƒÞN{§ÃÓä­‰ƒ¥VV{û‡‹*L Ã@t|Æ:‘dŠö‚‹­7º>=§F'è=(ÿ‰YQ]{ž»Áô`†XÇ‘ôÓÞw=z;íS¦ÉÓçiõÖ‰Äyn FËkz¸Eüò·uÉ,íw[L,í¾]PÖÎ)×7‡§¦ãÖ‰$Wè=(LÏÎ3%¸L æÓÃ:‘d„ö¾GܹÿT}^¶!:>ãoàæUzû‡S+«Ö‰$ã´¼`b2V×â  wvt÷ %—R։Ğރ²Ž™Àd`>p%˜L ëD’AÚûÞA“§ÏÓê9q>=ß:‘ä´¹ùä‘Îkù¾¶¼Ò–ÆÖÈllÁ:‘d‰ö‚w üU¹?Èqûª»~¸õ»u1¦÷ ¬aþ3¸ ̦„uÉ8í}¯yOÐíiøô|Ú>ß:‘ä¢ ¡‘âªN†ÃރǢ/¬ãHVi/xÍú÷¾ïÐ%}ï^¦÷ 0˜\f“Á:Žd‰ö¾7é{—7y8ú¬r»á«î ßxlG h/xÐËxâpàj¾¯-¯´åó£?ò¯u"1 ÷ —ñÕÑq… À`hxŠö¾—Ñöéü\ú?¯ë8blb2V×â>ì(?vòÜ`r)eHlh/xVt|æÀgßsúEÞþáÔʪu"É*½½‰/ﯞÓg0¬I¶iï{¿»oˆþÏ5à-À‹À:‘XL,Þ-(kçÔ7‡§¦ã։Ēö‚Ç]¿÷¤¼¦‡;Àï½_þ´Ž#Ù£÷ ñðñéµïoß:ŽØÐÞÐÿypxð.àu`H²çrd´dÏ N×3Æž[Ç{Ú ’ZY ~÷ pg7Áß0Ÿ±N$Ù ÷ §ð]óusâ|é|ï|õ։Čö¾¬ã-°Û–ûÀë€7‚uÉ8N¼ºö¼N\6Ð^5³±…ÆÖH^iK¾¯­õÔ͹ù¤u"É,½=‚o™/º ¬¯›oœ/Ý:‘¼Áß ­s5Ê endstream endobj 132 0 obj <>stream H‰ìÕ¡Áh„"éê-eÐ̃Œz ÌíŠè¸;O®Ï×íþøì·ðt:t€¥ Сû,]€Ý`étè>K C÷XººÀÒèÐ}–.@‡î°t:t€¥ Сû,]€Ý`étè>K C÷XººÀÒèÐ}–.@‡î°t:t€¥ ÿá-À²§3 endstream endobj 81 0 obj <>stream H‰ì×ßKÕwÇñ¿!B„`ˆppè@odKBB"Á›F„P'§(†˜9is[âLØB%ÖÙìDtØ<”’M4Ì’ÓÌôè)÷G¬+œsÞßï×׃ˆ¼êÅù¼ß¾Ïkm-3~ùõÞ®§ø;CÿŸ8^p š[ÚÎT”UõÜ=²Ž#i17¿XÛ╳òýÃK˫։ÄAtä¿b9ŒDNqÛ¥þÛÖq$šÎßà¡ùÛ:ˆ¤QßÕ;ìòú×<¶Û:Ž8‚î¾¼‹vðMç š³Ak ;X'’”I¬$;{G² šyÜcÇû§fâÖ‰Äqtä]¡¡±¼²s FIew$:mGÒB}ÐÛØ\ö—'f—Ùhë8â ºûòh ôƃî@ƒ GX'’íbÓ׿ÑU£“ÖqÄ¡t佸­›{}MŒ×aföoëD’bêƒ^5;·°þŽýe‹õNÞ¢»/6rû/ºCBМ¸Wlâñáê>Þñ“ÏZ/õß¶Ž#ަ» ÀËÚ†Ðë/–K˫։$eÔ½‡ eOÙV^–Íe­‰éîËFÐ rŠÛ:ÍÂ:Žl³…寛Þ}ðôž¼3'Z®ó£u"q:Ýù¨Htº¤²›9É-m¿výOë8’êƒcCyS¶•µŽ#Î¥»/D MÐ)hô Õ çK¾|uáò­}…-ìø—5?L<|jHÜAwA6(8Ýè,ÓRVÕs7öÈ:Žl—ú g°l%¯É†²§ÖqÄét÷eSè•_ýÈÌÐ2è4ëDò~áÑÉO¿ø–—ò•w †Ç­ãˆ›è.ÈÆ=_Lø;†³ò™™ºS?ÍÇ_X'’­Sôv°Þ?À;²•ì&jH\@w_¶€~AË`rhôë8ò†‰‡OÔ]áu² š»¾û-ùò•u"qÝÙ¬©™øÑúàú¯ÎÞ‘ÄJÒ:‘l…ú «±wl;È#²l¥u"q Ý}ÙZFàûß×íÐ>è Ö‰díùbÂß1œ•߸ûàézÿÀ|ü…u"q%ÝÙšðèdQE€áÉÿ¼s0ȰÑkh7tëDî0÷•wñ¹U£“ÖqdGÐ] XZ^m ÜÜëkbØjN^›[°N$êƒÂFÔ6„xv„Ma_¬‰—éîK&Ñhè5»ü#À75, endstream endobj 133 0 obj <>stream H‰ìÕ¡ÂÁh„"é*–2h& ßG™Û¯ßÝyÂuÇûóx¾~ûï#Ü‚.@‡î°t:t€¥ Сû,]€Ý`étè>K C÷XººÀÒèÐ}–.@‡î°t:t€¥ Сû,]€Ý`étè>K C÷XººÀÒèÐ}–.@‡î°t:îÚý¯ue‹§ endstream endobj 82 0 obj <>stream H‰ì×ñKœÇñ¿! A!‹ÇBöËFJ Œ@0BûApÎ)Š±ÔŒÃÕt³Z‚—T¢2òHÊÄŽR6e.Ñ¡nrË©wz[}À¨+fmzÞ÷yîy¿2ûÜãçñë§ÞWÒ5šù»»yëniUß3Ï×ç´\¸rÍ:<äÛïn¨xúj™oie­²v@}Ëö5µÆ6cÛÖ‰<­éƒ«úYè«uO‹o%ô.èÐÏBo‡ÞëDÈ|Ü}¤ßÅþ°6ŽŠ§½£ÕcÇqî¯ÅN· Î;«ú¾µNoá. Í‘…âònµ.Ïß™²Žã]ìAsê¿ÞýôFè½°Ž¯àîÓg7ûÃ9-z+K«ú¦g—­ãÀ‹¸ 0Ñ÷ÅO¹Emêž¿¢ççKÖq¼ˆ=hH_Í×ó×[ wÁ:¼…»C7oÝÕêQµ€´ƒ¬ã MÌ–ô4ò_éÍXÇwq`åÁz¼¡}4+¿ñб35 ƒ«Ñ ëDÞÂ4¡ž«í꼚¯þë-°NÏáîܶ¯¤K=ÔÒ&²Žc`~1úFM¿žÀ‘ãͽãñ­„u"xw¶foß;yêó_‰]—H<|dÈ+؃i¦n>ùQ=×cWçÕ|ëDð(î>œ@ H;hçW¢–‘ö‘u¢4y°ohÍÊoÔ?UÿÕjtÃ:À]€#„&æ^xíCUÑWÒ5š±Žã ìÁtR«Õm=põ\m·ŽOãîÃ9´†jUHí#­$m%ëD«0òÜKïéóú+z®Oß±Žü‰»‡H<|táʵœ‚òõ·>½}Ï:Q†c¦‡š\þögzÔê¶®ž['‚×q÷á4ZFÚGª¥¶’“uœŽ,—wë3=qþË¡_¬ãÿÀ]€£Ü_‹½ÛüÍ¡cgç=Ý2¤o­e,öàAS{Õa5Y}V«)3‚»g ŽLi+©œÚMZOÖqRfie­º.¨Ï•íkj Œmƶ­ÿÆ]€MÏ.—Võ©™Ï¾Øzi`Ò:Nfb(õ6·¨MOXMVŸ­ããîñ´•´˜´›TQm(-)ëD)ðι¯õq*k—~³Î<wŽ¥Zæù;Ôϲ@hbÎ:N¦añÉ_ÕX=[µ—_­p î>N3PëI-Õ’²Î’«ÑpdÁ:ð_¸ p²øV¢³wüÈñfµT×a~1j(s°SNýÜùFUoÕ^ëDÀcp÷á ÚPZRÖ)Oà.ÀùVV׫ë‚*jV~cCûèflÛ:Q&`¦:y®óªú©Gª®ª±Ö‰€]q÷ɸ p‹ëÓwü=ªëÑçû#Öq\=˜*j£:©‡©~ª¥Öq€ÿÁÝ$ã.À]þúÛ»¸¼›¿½÷ƒ=¸jàË'?ÒcT'ÕLë8Àáî’qà:›±íÖÀXV~£ª[]\ZY³NäJìÁýPëÔ==@õPmT'­OŠ»HÆ]€KÍ/F+kÔÞl_ÓûßJX'röàÞ¨i½ãjžž¨Z'žwŒ»W G Ëêpž¿#82eÇM؃{ Ž©iznjºgØ î> wàÒÀdnQ›šüê›—§g—­ã¸{ð©¨W¥U}zbjšúfØ;î>¤Ö ð@®© endstream endobj 134 0 obj <>stream H‰ìÕ¡qÁ”ˆƒTV¦NÀHDˆ»LÌ$ÁMÀÿ`ºÁá#Sû|p†Ï¯ûåãú¾g?ü;»À² Ðôóû÷}{¼ïÙ‡²û,»MÚ‡&í°ì4iš´À² Ф}hÒ>Ë.@“ö¡Iû,»MÚ‡&í°ì4iš´À² Ф}hÒ>Ë.@“ö¡Iû,»MÚ‡&í°ì4iš´À² Ф}hÒ>Ë.@“ö¡Iû,»MÚ‡&í°ì4iš´À² Ф}hÒ>Ë.@“ö¡Iûp¼—U¾ endstream endobj 83 0 obj <>stream H‰ì×ÍKTqÆñ¿!$‚hUC FµhãÂ@)7„„ ¸‚¤Ô0F¤K°$Ê$4˜½h¯b„æ"ƒ$R$#Cñ]GíA~(äŒçvï÷³twî}žËᬮþßž¿û¶çðUýZìÈôÌÂåÚ—é᪴ŒŠÒÊö‰ø¬õD^W}÷¾}ýZâu“Sój”z¥v©cjšõDÀް÷.öü$6<^PÒªJ‡²"-½‰å뉼‹{ð¯ÔµH]Ò‹R¯Ô.뉀$`ï\ìøÏëîXfn½Š­ß·¿[ãQ܃ÛSsÖ[¤FY$ {àb/À—Ë+-½¡¬ˆê]PÒ·žÈs¸·¢¶¨3z9êZ¤.YO${àb/ÀÇ&â³¥•íiéáª+7:§g¬'òîÁÍÔõDmQgÔõÇz" ùØû{¾7;}á±z~ðDmS´Ïz¯àÜ@ÝPCôNÔuÆz UØû{ÑÖù5œS§¶?{ïSÿëqìq®SÔ ½ 5D=±H-ö>ÀÅ^@p,,&n=èÞ—Y­Î–EGFãÖYâu@MÐ{P+Ô 5Äz" åØû{Aóë÷TqyÛÚ PÓð~n~Éz"¿•»ÒWôÔµÂz"`—°÷.ö‚éóÀÏ“çî«ü‡NÝŒ>ûb=Ž ßƒJ\¹ëñÕ5Áz`W±÷.ö‚ìi{ÿÚ]sþaÐî‚`ÞƒJYYëÁ•»Ò·0ÀÞ¸Ø ¸¹ù¥ÊÛ¯ö¹¦¡¸¼m">k=Ñ. Ú=¨d•¯YY+qån=`ƒ½p±–Eõ-ì?zýΣ ‹ ë‰R.8÷ ÒT¦JVÏ«”•µõD€%ö>ÀÅ^Öuõ eç7è‹çÔut Z“Z¹•£ÒÔ“*Yåk=`½p±€ š¢}ŽÕè»È+jˆY“*¾¿•Ô3†²"ÊÔzÀ+Øû{ØlrjþRäEz¸*-£Bè_뉒ÏÇ÷àZ|ÊN ú5>àŸ±÷.ö°•Øðø™‹Oô„²"-½‰å뉒ɗ÷ 2RRÊK–WÔ¬­'<‡½p±€íut fæÖë3ÉÎoèê²'iüw*e¤‡R^JÍzÀ£Øû{Ûù#ÀD':e endstream endobj 135 0 obj <>stream H‰ìÕ± ÂÁh„"éÊ)eÐŒ!¼Ü íLðñ'«;Oø_Çóu»?>÷×_¥}hÒ>Ë.@“ö¡Iû,»MÚ‡&í°ì4iš´À² Ф}hÒ>Ë.@“ö¡Iû,»MÚ‡&í°ì4iš´À² Ф}hÒ>Ë.@“ö¡Iû,»MÚ‡&í°ì4iš´À² Ф}hÒ>Ë.@“ö¡Iû,»MÚ‡&í°ì4iš´À² Ф}hÒ>Ë.@“ö¡Iû¬«»ð`§þKÏ endstream endobj 84 0 obj <>stream H‰ì×ÏKTQÆñ¿!B„6­ŠB°…."¢En„6®Š„hSD“$F6b -¡”"™*R¢$Ì"§C$–R‘Mø#§Fë)¡Q¨ãxß{Çï]Ýç<‡ÃËûý;$;7þÒƒ’òÆu[Žï©ëyóÉ:Qœ¨þu :…nd(5næ>ÀÅ\rë}Q>«·SUÓ6˜|k'ÞÕ¹šWþÐŽfÝ…u H˜ûsÈÍ—Ùo§ZïoØzR/hïáëï>LZ'Zž€îƒêYm+¹šWÿºëD@À0÷.æ°ZOöí âz¸}Pݪaõ¬ØZ Õ¼u" ˜ûsX¹ÁäÛªš6=¥ÐŽæXï ë8K¬}P­ª[VÏjÛ:`Ì}€‹¹äKw<¹©ò´T¸¶}(5ngAÙÕ¤úTTu{9öÄ:xÌ}€‹¹äÑÔt&ÒÒW\ÖPª?‰O¤g¬ý—ÿ÷Aµ§Õ¤úT«êÖ:P˜ûsȻѱôžº.½¬’òÆhGvnÞ:Ñ?øyTcêMí)¡šyóÉ:P8˜ûsX%‰‘mÕ­z_[w¿“xeço¾ÝÕ•S6µ§­ã…†¹p1€UuáÊÃMze»÷u¿þhçîƒêG-)•SoÙ¹yëD@bî\Ì`µ}žœ=Òt{}é ýèýkè'_탿+* Õû§"  1÷.æàÔðûÝû:õÜ6V4]¼öÈ:ŽöAµ¡NFý¨%ë8@cî\ÌÀKw¯ÊvFõè¶U·&F “øaTêA1JÃgÕŒa`í`î\ÌÀc™¯ÙhGIy£ž^í¡«£ci“¶û N­³+€zPêÄ$°1÷.æ`b"=Swü†^_qYC¤¥oj:ãq«}P'Õyuj}ýÀ±˜zð8°Æ1÷.æ`h(5®m×ܼýLw<éå§MöAQ'ÕwujÝËOXÀܸ˜ €¹žÛ϶¤ªš¶ÇÏÆ¼ù¨Çû Î¥Ó­ûµù^»ùÔ›.懻R*ê endstream endobj 136 0 obj <>stream H‰ìÕ¡ÁH„ Éê-ã\óŠšnqúÌÔž'ðŽçëv|Jû,»MÚ‡&í°ì4iš´À² Ф}hÒ>Ë.@“ö¡Iû,»MÚ‡&í°ì4iš´À² Ф}hÒ>Ë.@“ö¡Iû,»MÚ‡&í°ì4iš´À² Ф}hÒ>Ë.@“ö¡Iû,»MÚ‡&í°ì4iš´À² Ф}hÒ>Ë.@“ö¡Iû,»MÚ‡&í°ì\{ 0¸eO[ endstream endobj 85 0 obj <>stream H‰ì×ÍKTaÇñ¿!D„6® aDHÈ „Z$D mrÑB„ZHù:V¤%–J f3h™Z‚d&’ 5’²¡‰QŒ)5gtÔ~ ÈÆ8/÷Î[ßÏbsŸ{鋇gwøÿ¼xóéÈñ›úMö €”@.©`#°u«ëmnQ‹îcUÛ·¼jwÇ–û#ê¥_»é[ôEꥯÓ7êKíî r`"€Ôáõý®¬uí­N·»Ç‚›!ûz%`Ôüúн%Wßåñúíë Bä>ÀD.©æÃÌ÷S—éb:ÊÚÝC³6u±{Ôäš_-N^|¨/²© €h‘û¹¤¦^×T~i›®ç¹+=s K–×·oÔ´šYÅ5¿¾ÂòúâAîLä²ÖÖƒ ÷^g;³ êk~úÿXXÜŽ}PjNM«™oÜÒü` r`"€·°¸RQݯ{šWììî› mïXRÖÚ}PSi6M¨ššV3[R€åÈ}€‰\ÒÂØû¯Eçè¶ê÷ÕØçø Z¸jžýÙFß}‰¿ ûû¹¤‹ÐöNwßäÑ­º³Õý ‹+ñT³dÔ šDu4•fÓ„ñTä>ÀD.éå×jàZóó¬‚úlGãõÖ—këÁØêĹª¯ºkMRÓ0 ©b« ÁÈ}€‰\ÒÑÜÂÒ…«OuyóKÛz]S1TˆgTGõÕëšA“ÄP@²û¹¤¯ÁáyGY»®pIy×Ä´'ªwcÛÕE½ô¢úº‡f£z@* ÷&rHkÁÍPGÏx^±S¹²Öåñú#|1Ú}P•U_¯äµ¨£úÆ:2€d"÷&rȾåÕª:·îrNa“³st#°uè+‘¦šª¬óê¢^VŒ 9È}€‰\2ÆÇ¹g/?Ñ>væî³™ð‡#ÜUGÕtòtÅcÕ·nXÉAîLäaö78í†a6¸C÷Á¨¶Ké‚Ü˜È ól¶œ£9…MºÝUunßòêÁ3aöA×[zª Í#ªfÿÈ„Ü˜È Sy¼þÊZ—.x^±³£g<¸2ŸþsÔÔy=Ò»ªØ‘ØŽÜ˜È ³ML{JÊ»tÍeíƒÃóûÿÜõTgô§ÎO}Kư,óW€US=Á endstream endobj 137 0 obj <>stream H‰ìÕ± ÂÁh„"éŠÔeÐŒMx‰ >þduçù¿ÞÇçñ|}ï¯n¥}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´Ï%ÀØKÏ endstream endobj 86 0 obj <>stream H‰ì×ÏKTQÆñ¿!0L7BPÓ@¶Ð ÔÆ6‚R … EàÂÐÑŒ ­L¢”ŠPJa‰‰”Ô¢4Hª¡JBCËÐÔrL°'.ÈÏxïmæ~? —;çžóžwsx8KK«{ôäýŽýåz®ñà-äàm¡¡Œìö¼¢öpdB#Õ ýú«§Þ5¢qýÕÍt»Y6"÷&rðˆÙ¹hi°'ÕW™’YqáòÃK×zuöõÔ»F4®¯Ó3ón· À^ä>ÀD.ž™,(îЩOóW-?óÏÝѸۭp¹0‘ €ݸõlç€Î¾žzw»Î!÷&rð”ÈÈdAq‡Ný®ƒ•ÿžþ*=5¢q·[àr`"˜‹êúR}•)™%î²Ú^}=õ®ë«æ¸Ý&{‘û¹xA[h(#»F‡=·°%™ÐHuC¿þê©wœ8ݪ¿š£™n7 ÀFä>ÀD.Émpx4'¿IÇÜ—{³ëñ»åqó>hÑWÍÑ æk•Ͱ¹0‘ @²ÿyæbH|÷¡ê«O£ ‹æ×•÷AÑœÚæÍ×'­Ug[`;r`"€äó{þ.€ÖµîlY×ø·™•sV½Z4_«–/’ªfËBîLädî÷¼ÝwìºÎuN~ÓàðèZÓÖ¹Z^½SÍQ5Õ´§YN#÷&rH¯Ã_s [t¢÷­íì^ò†÷A‹êX·KUVýík€;È}€‰\’À©_Ååt–ÓüUº¾Ù¹è†K6yUSMUÖ|í¢½¶£eî ÷&rHhÑ…ÅúÖç{_ÑA>UÒùelj“ 7´¨ráù{Z¢½´£öµen"÷&rH\½ýÇëu„œlxñyKk·z´hí¥…ÚW»oi-€ÿ¹0‘ @" G&òŠÚuxÓ³‚·;c¨Û}ÐÒÒ¾Z®ÔI ¸…Ü˜È ±LÏÌ—{R}•úéEc«Ï}pÛà0r`"€Ò|÷ezVPg6¯¨ýçïñ”Šó>h‰ŒLªÕQWê-žRœAî#ü`¡L endstream endobj 87 0 obj <>stream H‰ì×ÏKTQÆñ¿!B„ \‚bd ‹f!”A($ÜXAN¢(B©b -© Ä¡B%j@ÂŒJBÅ4Lœ&ü9:jOÜEú÷Þs¿ŸÅefsÎó¾pxywv¸åé‹ñ}G®ék;€?‰ Må¶èµf4÷E&v`õ­ç:MßÝ¥€Ý`îLÌ h†Gfó϶êa>q£§Ô£[¼ÛJžqò¦®P-ªÈ£[ü/æ>ÀÄ\‚c~a©ôÊc=ÉÙÕu-/×Ö7½»Ëë}P”_U¨]¤ºTwwøGÌ}€‰¹¹:•Ttù°:ù°:T˹KÝþ,¹þй01ëzúG3Cz‰ùg[‡Gfý¹Ô·}СºTnT¥ª×ŸKüŒ¹01‹>ŒÏ‡ŠÛôÓóê;ºßúyµÏû ãAÏ;Uª{Uµj÷ójæ>ÀÄ\¬ˆÆVËý)•©YUá†å•¸Ï¬ìƒ¢JU¯ªVíê€úàs`cîLÌÀg‰­íæ{¯ÒrjôôŠÊ:'§­Ä°µ:¦>~Qí  >¨ꉕÀÄܘ˜ €Ÿú"ÙÍztGOÝŽ MYLbwt¨¹…-Š¡ž¨3“{s`b.þ˜œ^(ꃺ¡ž(Œú£.ÙÍ$=æ>ÀÄ\¼öuiýrí³ý™×S2*/Ö<Ñ_Û‰¾ È>èpZ¤þ¨KúI‰¹01OÝízsèx^Ùéóc“ŸmÇù!Pû CýQ—”JSßlÇ’s`b.‰ Må¶è}e†øÄ¸:ú"꘲©{ê¡í8@²aîLÌÀu3s±’Š.½¬´œš¦öÁøFÂv¢_ì>(ê˜ú¦î)¡:©~ÚN$æ>ÀÄ\\´¶¾nHͪҳºpµg!ºb;ÑoytDc«ê¡BªŸêªzk; ˜ûlßQf=º endstream endobj 278 0 obj <>stream H‰ì×ËK”QÇñ¿¡œh‚ "pcäd DEࢠZdÔJ"è²Ô]4:ØÂ¢’$¡²f!¥t#f#–QI„-$¢°¦rLË~uººLsyßw.|?¼ˆ3sÎsžwqøñLOø¥½+æ†g,Úç „vº6ñqªíÄM}Ô_ý¯oô½>jVºY.ºzû‰.»þº@Q €ò­Z}T×\φmç/“æûŸó ù¨ïõ«Y¦õÚU¸–¸ˆÜØÈ \Åo×6týñî>|nÿúÛÀF.e¦ûò™æ*¡]{¢ÿšæÒ̃Óß&Jí­ø1Qž¿tÏÅŽxˆÜØÈ lÜ}ø¼fÝ1Ýh=u gžÅÇÒ,N?ª :¦ *«¾Ó-ð¹°‘ @x=öaÓŽ fp«¬=Ügä¿[2™ USMS¼~{·Îr¢e…AîläPÒ&>Ní=Ò?kq‹.²ik{W,Ùσ†*«¾¶è,¨ssm@!‘û¹”®hßðü•t…gVïklêy“Le¾7ÛyPT_§è,mÔ¹:=û–¹°‘ @)zô$±lÃI]^=+6žz:ú*Û 9̃†ÎZYßaŽVê$Û ˆÜØÈ ´¼I¦›zfVǬ:íέNÎó ¡suº*¨õ£®r«Àcä>ÀF.%ä`ÇíÙKZugg-n µ_Ÿúô9çRy΃¢Ó[ßP'ª£®öŸº•s)ž!÷6r( ýwF*kë¶êÙ¼óâë±yÌ4Ô‰ú1©Cõ™gA®"÷6r(rÏâcµ[N›«fݱ¡á¸#eš_¨7Ó¤ºUÏŽ”à8r`#€¢õîýÄ®=ÑŠ@H—tÞòý‘+÷,î쪋©gýÖ³‰—I7Nqi4Ô³:7¯ wѹq €û¹/Ç(WçAÛÁ@VÈ}€\ŠÁxj²9Üë „týÁpgd Ýê/ +pö endstream endobj 279 0 obj <>stream H‰ì×ËKÔQÆñ¿!3*$Š6ENv“ ÉE´HȰ•Ð&¨\Ö. œ”L%±°¢ÈE]ÅA%Ý7ÑLBl!¢$‘Œ™wËž8!'覣¿w~ã÷ÃàÒßsžÃáåœLÜ©ºÇ Ö–êï,ü¯¿ºÜøléÆr}+==V~wxd|®¿à/î=m×{Ô_ë €¤À\Ì5Þy±¥B/qa$Z\û28ÀGÛE'Ò¹t:}Q'Õyø(€ßbî|ÌÀЛw²vŸÕÔ/wÿ¥®žx`Ÿrtt:ÑV§~ÕÖاLaî|ÌÀD_|¨ðHƒ[ŽVåV75w ø}ÐÑIu^wp5 ÌsÌ}€¹lâë·²s­;©§·x}YÅ…'&1¬öA§òâS]ÔC´ö¡:1‰ÌCÌ}€¹)ö mEN¥]Zfé£7ûF¬’Øîƒ¢³«õ êDÍX%ææ>ÀÇ\‚ñ¾óÓ¶‚‹znúeçŸÛÞk›Ç|tÔƒÚpµlÝ{A-ÙæRsàc.s­`äÀÑ›i™?VžåÛNÇ´Y'ú!IöAG¨åQKêJY'Rsàc.sª¶¾eɆ2½²EëNž8Ó4:6a觤ÚEͨµ¤TjL½Y'Rsàc.s¤©¹cUnµÞ—~‡®÷Ҭý"ÙöAG-í;|Õ¦öÔ¡u" Õ0÷>æ0ëºzâyEWÜR“µûì‹ÖnëD¿‘œû £ÆÔ›+PMªOëD@ê`î|Ì` Œ—ÄF¢zV˲O]»õÒ:Ñ%ó>è\¿ýJ*¤úT«êÖ: ˜ûs˜-—Ÿ¹ý%==V~7É÷—äßEªIõ©¨êV ['B¹ð1€Ä½hí^³³FOI¿¼¢+=½Ÿ­ý[(öAG}î*ªwõ®ÞQ£¶­!ÆÜø˜ @"z?ä¼:µª´<ï´Nô¿B´:êV »ªÕ¹š·N„sàc.33:6q¼ê~z$ª´dcym}‹u¢é Ý>è¨gµ­äj^ýë¬!ÃÜø˜ À 4Þy±¥Bo'-³´¸$öepÔ:Ñ´…tµ­ÎÕ¼òëtÖ‰€0aî|Ì`ZÞ¶÷nίӫÑo{á¥÷Ÿ¬ÍPx÷AGÍ«w›öÔé^¬áÀÜø˜ Àê‹ip ÈŠœÊ¦æëD û>èèVæT¹KÑí莬!qßÐäñš endstream endobj 280 0 obj <>stream H‰ì×ÏKTaÆñ¿!Ct¸l—™ â¬A-¦•‹ÂÂ-*,¢•`*Š™`‘‚‘ ƒ²_B¤!e…ÉM% ‰(ˆ(ŠZjj=ñB¼dÙÂÏåÞï‡a\™ç¹ÏH¤®×CÛv—ëÝz@ °€ÿZY]«iêIÉ®Ôâw}Ö_¬‡Ú¬ê›¯ôuôn=Èf…2 qØû{ØXçËOéùµzLô:v¶mvnÑz¢øÍ=è(—ãçÚ\LÊëé‹ÖÅÞøØ À¿ L5»#7Ö884a=Q<…ìt”‘’r‘);%h=8ì}€½¬7¿°Tr¹=)ó×Y‘–Wó ã½õDñÊ{Ðyôl@©éÛ)ÁS—+M뉀aï|ìà -½©9Uz.’³*Êê»—–W¬'Jˆ߃¢Ô”ÔwTšÊÔz" (Øû{ø­÷ÝÈ®ƒ×ôDè+i˜œ³ž(Â}:JP9º@•¬òµž°ÇÞøØ €ŒŽÏßv‡C框þ1ë‰. ÷ £4•© W)+kë‰Kì}€½€ˆû¶øýbUçö=Wô ìÈ­¾u¯Ïz¢-{ÐQ²ÊW_YY+qån=`ƒ½ð±eþPZÑ©!j÷ (_¥¬¬õÅ•»Ò·ž0ÀÞøØ ˆ¦þ±½‡¯«üzߟ±žh«Eðt”µwÑ«j‚õDÀ–bï|ìDÍäôÂÑÓwÜ9q îMßë‰lDöt”»Òw5ˆ•´ªÖ[„½ð±KË+eõÝÉYê|jNUCK¯õD–"~:ꀚ ßA­P7Ô뉀„cï|ìDD{×`Z^Úž”Y~òÂÃù…%뉌q:j‚ú Vè×PCÔ뉀Äbï|ì„ÞàÐDn¬Q=׫ ¨yxdÊz¢@àô©ê†+‰Ú¢ÎXO$ {àc/ ÄfçO”>pÿä§ç×>yþÁz¢á\O QO\aŠÏßW¬'â½ð±J+«k5M=)Ù•ªwrV…>ë/ÖC ÷à_¹æ¨3úqÔšƒðaï|ì„O÷ÛÏu*¶^EgîNÏ|µž(ˆ¸7 Î¨9®B;÷_U£¬'↽ð±&Ã#SEÍîßø}Gn MXO\܃ÿ¥þ¨E®Nê•Úe=ì}[?Y"ûf endstream endobj 281 0 obj <>stream H‰ì×ÿkÔÇñ¿!7Y_ !AòtXËHPó‡A0ú‚‚pEJlàí+kNšhØÆ²a^!#n¤–+"U®­†b£vÔlk²u›îæmö’OÔeVs»»÷çsŸçƒcèo¯}x}ö¾×à.Ÿ|ùã]ÐOë À²LÏÄËÊÃ9 ú¼zK]¨£Ï:‘ÛÕùBÏJ?­ƒ¸º¤FéY©]ꘚfXî> wYàÈ{_ß½¹ZMÎ ÷×Ï%¬y{pñÔ(õJíÒSÓÿÊ:°tÜ}@2î<­«gp}á!uXŸâÛFÇcÖ‰<ƒ=x§Ô.uÌ)›Z§îY'–‚»HÆ]€GéËùϵþùåü›ï†¬y {piÔ4õÍ)Þã϶ª‡Ö‰€;ÃÝ$ã.Às®Í^ß[}:7Tuï{¸¦9Ômȓ؃ˡ֩{z€ê¡Ú¨NZ'‹»HÆ]€·„:úVÔª´9`Yyxz&nȫ؃ˤî©ê¡£:©fZ'…»HÆ]€Wô^ÞTÔ¤ºêSøtËÐȤu"oc¦„z¨6:µT?ÕRëDÀÿàî’qà~W&¯îÚ}Òùʽv[CgdÀ:Q6`¦:©f:UWÕXëDÀ¿â‹ÐsqØ:ð_¸ p³ø\¢¢±såÆJµ4/¿ê­Ö.ëDÙƒ=˜rê§Zª§ªÆª·j¯u"à6¸ûðm(-)ë)°¯æŒÞ¸—+:FÇcÖY€Ûã.ÀµÂç.¯ÙZ¯~®Øp tÏ©©Ø¬u¢¬ÂLµT]UcõlÕ^uØ:p+î>\N»IëI-Õ’²Î’úu^x½]¿Îª‚Ú7Ï%¬·â.À…~úùׂâ£j¦>úGtpÂ:Qb¦›\àþè˜u"à/Ü}¸–¶’“v“*ª 52ú›u¢”é¹8¼£¤Y¿WþÎßý`øî\e*6[ºçÔŠ 7¿H¯ÙZ>wÙ:QÖb¦›Ú«ë!«Ïjµºm¸‰»wÒJÒVR9µ›´ž¬ã¤Å‰¾_·ý ~ÇÏïŽYÇþÀ]€{4¶Dòò«TÈ•++;ó Ö‰²{0Ôa5Y}Ö£V·Þ9oàîÃu´Œ´TKm¥¶ö^ë8é5=¯lúüžÍÕ¹àk•_™¼jà.À:#k·5¨ŠúìÚ}’?ÀÌõY­vê­ž«íÖ‰àkÜ}¸‡þ>stream H‰ì×ÿkUuÇñ¿!¨ ”ˆtvŒ’FhÐÅ~Q1R“¬À‘›scº©m)39%¿1Û†9q~af¹‘ùm‰·Zk‹ëÅuånîÞmjO9`T~¹Ûîö>çìõàâþôâœÏkŸóº_¼èØéëÏLYË¿ÖAÄÿ‘Xޒοç_ÙÔÐØbhD+þ¬žÁ¿ÖAF4Z@œRÐ:bHüO÷¾ ¿šÚ¦É³Ê8xs–íiÝ´Žãjt3[Á³š1·ê\ÓïÖqdDн à ÑÓ÷ÁúoÒ2 8lã2‹¶í9oH´]„FÐ ^¡)ôÅ:‘ø™î}N,v GŽsôäÏÖq¼[ r×¹ôìžÛâÕµ­íQëDâsºd¨í ^tþ¦Î(xoÍáή„u"y@{ÐUèí #¼úBk¬‰oéÞ—áÁŠaË8ÓX7lëDéèZžäŽÏ,Z_YßïµN$¾¥{A†Î•ëá@nŒßKó¶ÿöÇ_Ö‰äÚƒ.DGhŠSºCƒ¬‰éÞ—¡Æra¿°b8i,šp$fÈÃ~jþ3÷­/x’/äl>pä’uñ'Ý 2:¢wæ½û¥óY;iæÆº³7¬Éiº}¡5N}èm²N$¾¢{_†›…åÂ{ma5[Æ:ŽO<|ª¯Îß©§*)§{AR«ïî½õ•õc¦r®ÆÖ•l;ÅÿX‡’GÐt3ZCwhïˆ6Ñ)õHRE÷¾ v k…ÓÅra¿XÇñ›îx3ã3‹xÂËóƒáHÌ:‘ø‡îI¡Ãǯ>;£”ÅoáÊ·cqëDòXÚƒîGƒ­:èŠfÑ/ëDâº÷%åØ&,Îk¥dÛ)–‹u"ßjm.^]Ë£žU\¹ë\¢§Ï:‘øîI‰PË­s«œ׬¼­W®‡­ÉShzm¢SN¹h]³N$Þ¦{_Rˆ=Â*a›p¨Ø)¬ëD#Bã¥6ç£+[Gå·w±,¬ãÈO\ äVðg¾¹½ñR›uq)Ý òH‰ž¾üòº´ŒŽÇ¸Ì¢-Õ Ö‰$Å´ýжÒY^.ý¥ÅtÙ:‘¸‹î}y2VÛCÂŽ`MXÇ‘Áâà^˜UÌ;]¼º¶µ=jH\G÷‚üßÞàÅôìƨ©k—|x¨³+aHRO{ÐÇèì;}EyÅt™F['ѽ/ÃR`/p<Øå;β#¬IÊ„#±åùAçån¨:ÓïµN$.¢{!9 0¦úf endstream endobj 283 0 obj <>stream H‰ì—ýK•wÆÿ†5£‚ Q¬¬es²C[®&1QÈ‚ {i.6¨`lm²<:VK+›¹Â^È­«3£•½-1F³Qf9QHšÆYØ”£yNmŸx ¢±­Ìã}Îó\Dýé‚ûþ^×u߹㠚[ƒ¾¬Š'ž[Ë7/{[{G·µ"+жœbÊü´"bï—Wì€à ÖŠÄØ¡Ü÷2´}:? @ÿç °–#âˆ]Î?ýJ)»±hùž–ö?­åˆ1E¹à5Êv4LL-dèIÉùkJFnG­ tzÞ~Þ†:|€5ÀpkEbŒPî{>=ŸÑO[Bó·–#â‘ÞPø“’£R ˆ~áOkEbŒP.x‡†ÆŽgÒ70n¾¬·wo„¬ Kt ÀpÇð\ÂZ‘ˆ9Ê}¯á”|>=_%_ü/íÝÙ¹{q‰©sK¾ùö×èаµ"s” ^àZWOÆÒíNå{öÕ¯Î_ê´V$ìÑ=(î'ÌÌØèX^cX+1D¹ïhòôyZ=_´|=ßZ‘HêêÛ|YlNÚâÊúsW­åˆØ¢\p7áÁÕ…‡“’ó™òd_QUÍ9kE"^Ð=(À%Ø ßÀ=¬‰˜ Ü÷txš<³¦ÕÓí­åˆÄ#:4\±û—)sŠÙ¢7?üîêY+±B¹àbª÷7:íîÉäü÷?;¤v'îG÷ ø'¸ÄŸÿˆc°¸b­HŒ>Ê}×Co§½3ešüægiõÖŠDs³çÖJmRrþ¤ÔBù‰¾þˆµ"1ú(\ÉùKÏ¿VÎdù2–n¿ÖÕc­HĺſcàŽà$ø‰µ"1š(÷] ]ÆNo§½ÓáiòÖŠ„Khn fæTc3¬¯ \°–#Få‚ËÀü_g·Sä¦Ï_WWßf­HÄ)ºÅs²¡qÌWQ±t Ê}·BK§«3\zûÅ–ëÖr„ ¿’’¹‰K_RÕØÔi-GŒÊ×¹ÍÛP7~¶ŸN|¡ lGƒµ"×èN21µUÁ[p|ÆZ‘x\”ûîƒfN?g¬É ËhìÖr„›–Vž™ì+bßÞýø‡àµ"1 (ÜÁ¡c—ŸzéKF9nÖÚe«ö÷†ÂÖŠD¼£{P<$ø ®‚·°0ø nc­H<Ê}7A§“3Pú9-®n­Hx/÷ÓƒZ<× \Htš[ƒ¾¬ †È÷ò¢¯Û;º­‰Ä@÷ x$ð–´Å•ŽÕà98µ"1B”ûî€N§3MNBú¹µ"á9›:Ó—T±É ËǯXË#G¹¸ô†ÂËVí7ën=›–VrèØekE"‘Ð=(F>ƒÛ°98þƒ Y+ŒrßнiàÌ‘6N'·–#<;ڦ Ö³™9Õ[®[Ë#A¹ˆD‡†‹·žžRÀìÆÏöl:ɬE‰C÷ ¸Í›Oá<ì.„É å~BCߦu3AxMà‚µ!îÒ×ñ—Ÿ˜”Z˜”œ¿Ò_{³ç–µ"ñh(Žºú¶éó×15¾ìܽztbdÜþ-ÀÉ·ð• endstream endobj 284 0 obj <>stream H‰ì×ÿkUuÇñ¿!˜!I öC”WÇbJÌ~pàE‹üA±ÀTt³¼ó¦Ý–ִѾNÔi6bC©¼JéE©Í•ù¥!»äX®¦Ì®ls÷nw³§1ÍI»÷}î9¯—a¿Ä›óùœ×ûunÝy<×ã7—®ÙÿÄ ›ùÍ,ªˆD;¬'’±úöÄ%N¿ÖƒÈãá¥ÛP~8'œ’*¯<Þ?´žHä]Ýñåë/ÓæmÛU:52j=‘Œ•öB¹üÇßEËjœ6gaå¹ö¿¬'’,¶õ³ï¹HüµD²Ø…K=d‘J¤e=‘<šö~Ö¡WÓ®éØ}[/š¸Y´årá’jîj~IU$Úa=ŽŒ‰öBVèH®-kšrXl„†æ³ÖIÖÓ÷ ŒÉiªdIE^YO$ÿE{?»Ð¨éÕ›¦m=ŽÈ˜Ôh^æÞ.^½7ÖÙk=Ž<‚ö‚ûUïûéɼÇ”–†Ž &†­'/Ð÷ Œ£äPŠt"£¸Tä©e=‘<”ö~¶ EÓ¥9,z5í:52j=‘Èc¸Ñ—x7üÝäÜ-üøÿi=‘<”ö‚›:ÓùÜ‚¿E«ê{®õYO$Þ¡ïAwdTÉ[{œÈ"»H0ë‰ä´÷Ýïn‘Î U¤%«µÇ®.^½—Ì™^ÞÓØf=Ž<˜ö‚;Q«ŠWîV­’ôÑ÷ ¤ yEj9ñEŽ‘fÖÉ=´÷]ŽÎLsæŒhÑtiëqDÆA$Ú‘[¼“[]¸¤:ÚrÙz¹Ÿö‚Û &†KCGrAÎeJ^¨¶¡Åz"ñ&}JZ‘]O½øwŒ4#ÓH6ë‰äí}×¢'Ó–9š3ýÙz‘ñ”Jíª?=mÞ6nøÊÒ¯ººãÖÉ¿´\¥¡ùìÓso¿)ÁµeMýIë‰Ä³ô=(éF‚‘c¤7d#߬'’Û´÷]ˆnLCæ\hËtfš³õD"iq=~sݦf®ú”¼Pyåq]—Ð^p‰¶óWæ,¬ä,ø-«a5XO$§ïAÉ ÒlþkµN¸‘rdõD~§½ï*ôaZ1ݘC¡'Ó–­'I»_Ûÿ,^¹›;ÿü+Ÿ|yøœõ8¢½`ð_ºf¿S–fUD¢Ö‰/è{P2‰d#ßœ #ñTz iï»M˜>ÌqÐiÈÖãˆdTã7çûÿòëµ?_è¶Ç×´ ¥FFßÛ™4»œ#˜œ»%üù ë‰ÄGô=(™WQs’¬ãâ‘{¤h=‘iï»í—ÌAЇiÅÖãˆØL T}rjþVÞ…u›š{®õYOäSÚ VšŽ^œQæáO˜µyÅÆC7úÖ‰¿è{PLu$¹Çõ#IBë‰|G{ß—ÞËÐiÂôaë‰DŒuuÇß|§Ñy)¶×E“C)ë‰|G{!ób½s_­â±óË/©ºp©Çz"ñ#}Š¡öØUÒωAòT´žÈG´÷­Ðréº4^ž?í—l=‘ˆ‹œ9w¥hY oGnñÎæc¿Yã/Ú ™t£/±bã¡ ³nW g^ú°éèEë‰Ä¿ô=(æÈÀ…aî!©H6’Öù‚ö¾ ú--—'Oã¥÷Z#âR{Ûžÿ1oÊ¢Uõí±«Öãø…öBÆ|úũɹ[xÚ“f—oÚI¥¬'_Ó÷ ¸IH’ŠÜF’œ´žÈû´÷3ŒNK³å™ÓréºÖ㈸]ÿ@òýÇØ9à†òÃ×ã7­'ò>í… ˆD;fUðœù-y{Ÿ.¶¸¾Å=HÅ¥kö;!IZ’™Öy™ö~Æp±i³tZš-ý––k=‘HÖˆuö._°š6o[ÝÖÔȨõD^¦½V]ÝñoÔ9%gÎÂʶóW¬'¹C߃â6$$9é&ÉI~ZOäMÚû@w¥ÁÒcyÔtZš­õD"Yé‡Ï/©â=âo$Úa=Žgi/¤Iÿ@rmYÓÄ@Ç;5ëÞ¯±žHäúwjh>Kfr9ÉOR”,µžÈk´÷ÓÖz·ÁÒf­ÇÉn©‘Ѻ­Ó ¼SË׌uöZOäAÚ éPÛÐâô™œ@°4td01l=‘Èýô=(®Ef’œä'W”,%Qÿ×ÿî ôÓ endstream endobj 285 0 obj <>stream H‰ì×ßK›gÆñ¿a ˆP<ñ¨C‚ ³Ð® ¬FÁÆ<èC†àlþ ‚[©®ÅÕÊ”Ži!'ÁIítÈdN]© ³Ñ°9iŠŠE­‰F»/8¤tνó¾ïõ¡zvûð¼×}=/^È˾ûá÷7Þü„_ëA\(<¿RY3Èñæ•´÷ L%vv­'q‰µh¬¶i(« 1Û×\ß>¼¾·žÈU´Òë—_#ç®ÜæHù÷ö{½‘Å¿­'9XÛç£ÜR~­9Øâr”Ý‹Sr•tµžÈ%´÷O픎JS¥¯ÒZé®Ö‰¸P(¼tùÚ],¿¬£?0c=Ž{h/¤ Õ¥º!Èaž)jkºñàÇéyë‰D£÷ 8YJ¢’«\W2–¤µžÈñ´÷ÓŽ^J;åTiªôUëqD\.82ç+ïä‹+­èž|¸`=Žh/¤.¾•ø´g|¯®TÕ"«Ö‰¼žÞƒâ ä*éÊ%iÉ[R×z"ÓÞO#º(”ó¤ÒQ­Çñ ¶@Wß„ºwºh/¤ˆüg p†o½ûÅôìëqDŽJïAq2–¤U÷N‘ö~ZÐ?i¡œ$”^J;µžHÄs—£Õ A>ÜÂÿ­±ÍضõDN¥½pl¡ðÒ;ôqzùeýëqD’£÷ 8yKêr{I`rØzçÑÞO“æIÿäé¢4Rë‰D<íQèéùÊ;|g/\¿74k=Ž#i/óÕçµMCYÙ¾æ?Y߈[O$’4½ŹH]²—&‡Ic2Ùz"'ÑÞOm“ÎÉÒ?i¡ÖãˆÈ¿ö¿Í‹W{õm&K{!)‰Ýž©Üb?‡VY3ž_±žHä˜ô§#Éa®1™L2“ÏÖ9ƒöþñÐ0陓æi=Žˆ¼j3¶ÝÚ5šSØÂwZÝ\\ŽZOäÚ GwüqÑ¥›¿c?ýa=ŽHJôw ÷“™”¶Ç´÷“E«¤[rhôLÚ&Óz"ù_ ‘Õªºln±¿«o"¾•°žÈ´Ž"<¿RY3ÈAå•´÷ L%vv­'I•Þƒâd2ÉL>s¥ÉjÛz¢Œ¦½t4Iú$­’£aÒ3­'‘#™˜ù«´¢›/×WÞùÍ÷¿Y“é´·¾¯oÎö5g4Ö6 ­EcÖ‰¤‡Þƒâ2ä3)MV“Øä6ém=Q†ÒÞ?":$M’³¢UÒ-­Ç‘¤õfòË:øŠ/_» /Y“¹´¡[$.¦÷ ¸YMbs·Io2ÜzœL¤½ÿZºE"®±Õ·gûš³ ?jý–ÿZO”‰´4ùp¡´¢›“ñ•wGæ¬ÇI?½ÅÅÈmÒ›N’“çÖãdíýCÐiŒôFÚ#RÕQÄÂó+W>üšèË+iï˜JììZO”Y´^±Y­ª p&gŠÚºú&â[ ë‰DN„Þƒân¤7N’sÏIu²Ýz¢L¡½ ú!-‘®ÈáÐiÖ‰HšÝ\té&ß8¿ã?ÿi=NÑ^Ø·ÛößË)lá@ª‚‹ËQë‰DNÞƒâ$9yÎU'ÛIxrÞz"{ÚûÿE3Üo‰4FëqDä¤$vv»¿šÌ-öó½WÖ †çW¬'ÊÚ {î Íž½p£8_yçQè©õ8"'NïAñRlç“ó¤½õ8Æ´÷_F¤r ôCZ"]Ñz"9qÏVŸ×6 e4fûš›n±dž7÷B|+ÑÕ7‘[ìço¯ª ,DV­'9mzŠg‘ù$?÷Ÿ-À.`#XOtª¼¹÷÷Ñ÷h}œ h=Nêþ`{»-» endstream endobj 286 0 obj <>stream H‰ì×ßKÕwÇñ¿aHÞA#8"èEÞHt¡7"¼Ñ„!ÈJ›q¢ˆtÁÁ ÇJÂܘ˜ë€0;]t Ü¦Ì&êíhzôôã ßqÖüy<ïïç{^BòîõA¾Ÿ×ëóþ½ˆìOj#}%úèHiûgŸ_¨oîŸ{m(×~úõÎÎOë ¹óÃÏ¿‡ª;8uEmtôÉßÖqDl´û _?­ƒˆØàþ§ø hzÁ:Nîäaï{Øx,=ÎÎêcû±­‰ˆÌ-$ÏÈ\kë›Ö‰r'¯za|r¾¦¡—óŸ¸z§ÿ‰uKzŠ€. øh:Â:N.äUï{Øu¬;6gï±ú¬‰ˆOÅ3•á.îŠcU×ï=³Ž“#yÒ ËÉõ¯¾ùñÐñ‹¡¶–È¿Z'1¦÷ ˆ‡F h:‚¦|AäIïg°èØu™ÇÒ³Ž#"èL=y{£º®ûéøKë8.ð½~ûîÖÝÇEåŽþòûɯ¬‰ø‚Þƒ"£è> ú‚Ö ;¬”À÷~+Ž-ÇaÙu¬;ë8"â’•ÕTë‘Ã%—¸C/¶Ž“è…Ù¹×õÍýœâHiû•è£ÔFÚ:‘ˆôÙ9š…~¡eøjhzÇ:ÑÞ ÷3Xbì1ŽÃ6c¡YÇ‘<2›(=}“û§¢6›²Ž³/N÷ÂÚúf¦ Ï˜[HZ'q†Þƒ"»EËÐ5|8ôíCY'Ú §{?ƒõÅã ì1V™uÉG©tgÏhaÙeî¢3÷¦g—¬í‘»½pèÙ±ªë„¯ wÅ3ÖqD£÷ ÈÞÐ8ôŸDYÇÙ5w{ßÃâbwq6KŒ=fHDòÚâÒ›¦ÖA.¥Ã%—ZoŒ¬¬¦¬íš‹½ðtüeu]7±ž¼Ö7˜°Ž#â$½Eöƒö¡ƒøˆè#ZÉ:Î.¸ØûV[‹ÅE~ÖÌ:‘ˆÈ¿2Ï“âW{ž¸Õ \þ˜: ¨ëD"®Ò{PdŸ>~žÐM®ï}ۉŎ"*›ŠeeHDd×≙Êp÷X¨ºcàásë8ÿË·½°œ\o‰ „ÚøÇøÕ:‘H è=(rü_^¾íý VÛ‰ì(Ö”u1óA€£<] endstream endobj 287 0 obj <>stream H‰ì×ÑKÕgÇñ¿a „BxÕ‚ØE7^8JÁA†D#ð¦ˆ-˜'§(BSg”¡åšÒ8­i‹uHš&‘„â(bGÒñîH=²ÏÖÖs?‰þC b½ˆvdwÃ^¯l\lº›•_ÈwåRó=~µ5‰Å\x2ñâDe·=y58(b©Gö‘€¼AÒL4y»Ý}¶Cçaú-ÈÊ ""^Ã7ÙWÖ籤"5»É\x?k. AÙ¥}PÄ.ä’‰$#ùhæ^[û ‡žÃÕt[Û¨ˆˆgÅ7½#9EMÉ-i~!jìj“¹žô½Ý|OTv=™xaàFù7ÚE¼€4$“[)iàFóû ­¦æíæKÏ¡íÐyŒ]-"²¿,Ebç.ù`f4øÛî¯ol¸ÔL.L…_•U÷pQ^ikß§®Þ%"Bû ˆwŒä#O’¬|>½èê]&÷Aš }†VÃ4zŽKEDö»gS/“«ÓÑ“WoN¸}Û¹‰®Õù³òë“Kîj,îÒE"ò¿hñò1¹:‘˜ä&ééÒEÆöA: M&¹äÒmܾND$Ãì~EOTv¹úu/Û;ï~Í)jâüªó·ÂsËŽ_!")Ó>(âAd%‰ÉÛ$=;o<&I¿ÂÀ>Ho¡½p M†>ãÞE""™m}c«%ð0» /ê¹ËÁÅ¥7nq)†B3…åœ|ìÔµÐ謳‡‹Hú´Šx¹IzòBIRòÔÙÃ]Ýé*4Χ½Ðah2nÜ""r Ì/Dk. ði=\Øøõ·â› gÏw<ÂsË•Ÿ}Ï™¹ÅÍÝýc‰í§Niñ2Ò“ %Iy§gÎÞ$[:Ù¥}~BK¡«p8½…öâìù""Ü“‰%¾±¾²öàð¤ƒ';˜ ¯W6.5ß;ä»’•_±é.¿¦¦ˆ¸Dû ˆ÷‘¤ä)©J¶’°Ž«û Í„~±t‹ƒ'‹ˆÈû®Œç•¶ò½ýäÓSáWŽœéT.ìÎvº¶Ï©ÙDÄ=ÚEö R•låÁ9ÞBÚ¦yš³û ³ÑI8þl""òŸVcñ/Z:ä»’•__çŒD×Ò<0ý\ÿ£¤"À!¾²v§òEDܦ}Pd!aÉYž-™MçGöA=„6B'¡™ÐOÒ\xn¹êü-¾ç¹ÅÍÝýc‰í”J'æ¢5øï9EM½#ñÍDÊcˆˆaÚEör–´%sy¼ä/)œÂ!éº „sh#t’”‘tüü(\XÞÉטŸü;µCRË…õ­¯:d4ðÏ].Eb©Ý~pý%ÀÄê*’ endstream endobj 138 0 obj <>stream H‰ìÕ1 ÃA &f•60BÆvy igН¿YÝuQôþ|×ùÜ_?À_° Ф}hÒ>Ë.@“ö¡Iû,»MÚ‡&í°ì4iš´À² Ф}hÒ>Ë.@“ö¡Iû,»MÚ‡&í°ì4iš´À² Ф}hÒ>Ë.@“ö¡Iû,»MÚ‡&í°ì4iš´À² Ф}hÒ>Ë.@“ö¡Iû,»MÚ‡&í°ì4iš´À² Ф}hÒ>Ë.@“ö¡©Òþ-ÀpKÏ endstream endobj 139 0 obj <>stream H‰ìÕ¡ÁH„ Éê-ã\ù ŠšnqúÌÔž'WÏ×íþøÜ_?|•ö¡Iû,»MÚ‡&í°ì4iš´À² Ф}hÒ>Ë.@“ö¡Iû,»MÚ‡&í°ì4iš´À² Ф}hÒ>Ë.@“ö¡Iû,»MÚ‡&í°ì4iš´À² Ф}hÒ>Ë.@“ö¡Iû,»MÚ‡&í°ì4iš´À² Ф}hÒ>Ë.@“ö¡Iû,»MÚ‡&íÃÿ{ 0fÕO[ endstream endobj 88 0 obj <>stream H‰ì×ËKTaÆñ¿!Dp妕ˆàF¡\¸q‘‚A¤… ¸i¥”EʤÀ‰l¡Âl†Bì&ºp‚†`Åð~ïñR”·q~sÎù~ƒ;Ÿ÷}ÎËßÉIz½ýôíÚGúMóÿ‚g4Ï/{¢U^ór6±dçÏ>(ª~­ƒœB7©ûTTÝ­nØ:à{Ì}€‹¹\žv–Òª~í,~Ù=‘7_t· ¬{Öm[Ç|Œ¹p1€ËX^Ù¨oŽêå¶wõMììX':+탢»Õ çu(¶î\7oð%æ>ÀÅ\.foÿ°gpÒ[OjDæ×­ïöAîY·­äºyÝ¿Z°Nø sàb.ÿZPÞ«·SRÙ7_°Žs>Ý=ºó[÷^(¿ZPÖq?aî\Ìà\ÉuCz5×ow¿ŠÌXǹ8_ïƒÝ¿ZÐ)Ôˆz±Žøsàb.g´¶¾ÝØ˺ْ]ÐÖÔ=¶¹µgèR°ŠZxøx\¨µ£Ž¬™Ž¹p1€S Oåwê±T7Œ$çV­¥@0öAQ/:Ž:RSêË:¹˜ûsø¿÷“É¢;ÏõLô«¿­ã¤LöAÏÇÏßÙZÌ}€‹¹üKrnµºaD$¯¸s`xêðèØ:Q*ou¤¦Ô—ަîÔ u" ã0÷.æð·Í­½¦î±ì‚¶¬›-­±µõmëD©È}ÐóscW­©;5¨Õ¦u" ƒ0÷.æð‡W‘™ë·»õ.*ê†ÉÖq®J€÷Aº»{ÿµÎ¨6Õ©u S0÷.æðÛt|¡¤²O/¢ ¼7:þÕ:ÎÕ ü>èQjS'U³ê×:`¹p1™_\¯}Ñ[È-êèœÜÛ?´NtåB²ŠÚT§jVçUËêÚ:`‰¹p1r;»]}9…ízõÍÑå• ëDiž}Уf՝ެ®Õ¸z·NØ`î\Ì„Ùh,ž_öDO ´ª6±d'­Â¶zÔ²ºÖÁÕ»Ú·Ž`î\Ì„“ö‚òš—aÞ Â¹zÔ¸z×ñõ èK°Ž¤sàb. lVֶꛣúìs Û[Ÿ¾ÛÙ=°Nd#Ìû ¨wµ¯o@— ïA_…u" M˜ûséôK€1¼:$ endstream endobj 140 0 obj <>stream H‰ìÕ± ÂÁh„"éÊ)eÐŒ!¼,@Ú™àãOVwžpãùºÝŸûëG€¯Ò>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}–]€&íC“öXvš´MÚ`ÙhÒ>4i€e IûФ}Ö¿íÂ[€®+KÏ endstream endobj 89 0 obj <>stream H‰ì×ß+ÝqÇñ¿a¥¤VJ-W[JJ+.vs.Ôh¥Ü(r£ÜXÚÍüˆŽÔÂ,qÁ¦ÅJ[R›ÐÚNia[“Èh$–mD;ì`¯«õmËpœÓû|¿{>Zš»wŸžyßÇÇ–öÂm=ãÉY—®Ý+­XYÛ2ÇXÃWzý´Ä’P zU¡6TˆõD@̽|=¯æõÓz@\`/à?¡ÈÓ}­ª=§°#0±d=Ž=îÁßÔƒªÐk¨þÂóØû'ö<²ž(~qžJý¨"µ¤‡RWªËz" Øû'ö¼agw¿¶e,)£>!­¦²vhskÏz¢xÇ=xFjIE©+Õ¥ÆTšõDÀ…°÷Nìx@ﳩ¹Í*ÙWÒ=3¿n=Ž;pž‹ºR]z1•¦Þ¬Ç"ÇÞ8±àjSÓ«yEj8Ý×:8:k=Ž›pF@©4½›ªS{Öã‘`ïœØ p©õoÁÒªÕ{9³¡©ãÍÐOë‰\†{02*M½©:½ž T‡ÖçÃÞ8±à:Îòò»Ïù ÷àE¨:µ§T‡ªQMZOœ{àÄ^€» ŽÎ^½y_ÑæuNM¯Zãb܃§Õ¡žQMªLëq€3aïœØ p‹s_|%ÝÊ55·ùéдõ8®Ç=-ªQMê1Õ§*µ8{à´ ½ŸYÓOëA€mníUÖé&)£¾¶elgwßz"/àŒ"5©2Õ§žT­ªX뉀±÷€[ì„ÛzÆ“³õ™]\Ñ¿²¶e=‘wpFúT¥zU«nU¯õD€[2óÛõuSؘX²Çk¸cD­ªX½­êUÃÖã.óéó÷‚²^}Q§dû»ú&­Çñ&îÁ˜R·ªW/¬’Õ³õ8€ lCÕþáÄô:ýÓô«õDžÅ=}¿J\Ph endstream endobj 141 0 obj <>stream H‰ìÖÍK”QÅñ¿!D„6îB1laÛYÕFh¸ha-„|™ÃMJ1ԢĨC0”½Q‚P9.²h ‡)Óµµ¸E´jîïñ¹ßÏ"hwxæžós{€÷Ÿ½Ûµ÷¬þµÀ+ºpq€0Ñ} Ltàâ.a¢û@˜è>ÀÅ]ÂD÷0Ñ}€‹»„‰îa¢ûw¡Š¥µ©é9ëÀ¿Ð}ìÚR-ªuŠX¡ûw¡ºRãúª=¹…¥ë,ÀßÑ}DœöS+ªWªEµÎ+tàâ.TƒþŒéèÎêÃîn>w>ó¼¼Q±Nü‰î#²´™ZNí§ž¨¶t~á‹u¢X¡ûw¡z¦¦ç´_ÖçM$‡sÞXÇ~C÷MZKm¦§öS+j'†è>ÀÅ]¨¶±Û¯Ú†ô‘“Ǯέã¿Ð}DR;©g©ÍÍæ­ãÄݸ¸ |]-÷]x\×4PÓØ{ªïN±´f ûˆ­¢¶Q Y›è×Zj3­Åݸ¸ Þf—ž¼¥¯]ß’Î\QÙܲN„ Ñ}D–P{¨UÔkÔBj'­Åݸ¸ žM¼ü°ïÐ%}óæƒN¼·ŽƒpÑ}˜Ój î¡¶Ñ:N(è>ÀÅ]𯲹uåæ«=­ƒúòí'nf—­!Dt†´{Z?½@-¡öP«h( tàâ.Xù¼²~:}¯¦±·6Ñfðþka¡û0¡­Óâi÷´~]©q¦Ï?ºpqlÍÓOÐÐ64šÍ[ÇA@è>üÓÊiëôð´{Z?ë8¢ûw! ôýÉaýûd&ó­ã t>iÙ´ozrÚº»OÞZÇ Ý¸¸ QÞ¨Œ\›¬oIëçèèÎ~š/Y'BÌÑ}ø¡5Ó¦é±iß´rÚ:ëD¡£ûw!R–Š«=9ý"uM©‘§ßÖ¿['ÂõC€‰ŸÃ endstream endobj 90 0 obj <>stream H‰ì×ÁKÓqÇñ¿!$/BPCAtÑA/B‚… „à!ÐYʵ`¤bT Ì1 ™jM44”ÙÔÜšÚç RaæÊöüæïýBDo~ßçϳ½ý£•ØFƒ(ÛÓ¬ý¡·üƽþñÜbÿ±Óå5}áÈ¢uœ#®åöK}jý¶rÄi’5ÏúÔšmM¸uÀqBcÓ%íÌç:‡CSÖq\{04Õšm}p͹¦Ý:à³óÑ‹uýÚ“sŠZ;{F㉤u"·àL3Ͷ&\s®Ï®™×ä['̬®Å}í#Ç ®i=®m|²]·Nä.܃&4çšv}yM¾æ_-°N¤[ÿàäÉ37µ{«ºß†?YÇq#îACšyM¾¾¿Z .XÇÒd|r®¬²K›ð©³·½³Žã^܃æ4ÿj^AP/¬ãÿÑÂçØ¥«Ú~O¶Ü¼úºñÍ:‘«q:Z .¨z µC±N²x"¹»ôV×ç¾X'÷ ƒ¨ê…žCQSÔëDÀáxþÞãíЮ[VÙ5>9g;¸FíPGô(ê‹Zcø'áÈ¢·ª[ûm^i[opÂ:~Â=èLjŠú¢§QwÔ ë8@Ê–£ëu¾Á¬ü¦lO³¯}du-n¿ât,õE­QwÔ õHm²NHrs+pÿuNQ«n µ"3KÖ‰°7îA‡SwÔ ½‘Ú¤N©YÖ‰€ý ‡¦ Ïßѫߡ±ië8Ø÷`FPv;¥~YÇö™Yª¼ü@[kn±ÿîÃ7ÉÍ-ëDøîÁL¡6©Sj–ÞK-S׬;Vb þ¡lOsV~Ó•ëÏô¯u"÷`fQ³Ô/µL]Sã(Ìõ'òJÛtV”×ô…#‹ÖqîÁL¤–©kz8õNí³Ž—øXRÐ^êñv<}ñÁ:RÆ=˜¹Ô8õNϧª‰Öqà"³óÑêú vÑœ¢ÖΞÑx"iƒ{0£©wjŸ:¨GTÕJëD8ò¾ 0—B¶ endstream endobj 142 0 obj <>stream H‰ì×ËKUQÅñ¿!B'Ž A 2H¡‚‚$$‚“ H*3Ű—RX&f ,¸“‹ÐËÊ”¢ÐŠ,’è"*†áë^Ÿ­lcY¦W~翟ÁÊ‚½×Úǹ9ï¸ÿìÓ†-§ôk5:[ý41½T7­ 8Ü?8b?Ñ}€‹wÁƒÞu}Íɫ׹lξx·©Ó:‚‰îcMi»´`ºc»ÕiÓ¬ãàºpñ.xÖÂ×ÔÎÜ|M!îè>ÖˆöJ«¥Û¥ÓŽYÇÁbtàâ]ð²‰èÔ¹šÖÄôRQAq¸pÄ:‚ƒî#î´QZ*Ý+­VùÕ-˜u"üݸx¼¯§o8ÿXHÇ””QV}óElrÚ:‚€î#Ž´KZ'm”.•öJ«eK¢ûï‚_ttönÛ_£ÃJË© 7´Žߣûˆ-’vI×Iõêmuüݸxü¥!ô:%«RG¶ïèí®È€uøÝÇêi…´EºHÚ%­“u, ݸx|gt,v¢òáÆ´3 ©§‹Jš¾D­Á—è>VCË£ýÑ i‹ŽW<Ð.Y'ÂrÑ}€‹wÁ§"ÝC¹…wtvÉ™µíÓ3³Ö‰à3t+£µÑæhyt´BÚ"ëDø?tàâ]ðµ'Ï#{®èõÛòò‹uø ÝÇ hg6çQÛgë8X ºpñ.øÝôÌlmc{rf…Î1·ðN¤{È:üîã¿h[´0º3›¶–ks´<Ö‰°Btàâ]†oÃãE%M ©§7¦9y¡yt,f^G÷±LÚ­Š¶E £ÑÚX'ªÐ}€‹w!Hº"{ÜÒ¦dU6„^[ǧÑ},‡–D{¢«²ûðM-ŒuÄݸx‚'Üü1-§JǺýÀµŽÎ^ë8ð(º¿ÓzhCtI´'Zë8ˆºpñ.RlrúRÝó¤Œ2nþ±POß°u"xÝÇR´Ú ]mÈùÚ6í‰u"Äݸx¬p¤ 8<ÿQw®¦u":eB÷ñ;­„¶B‹¡»¡õІX'BüÑ}€‹w!ðÞu}ÝqðºNysöÅн÷Öqàt‹h´ºZŒ7ú¬ã`­Ð}€‹wa¸ÛÔ9ÿ¥—“W¯ÿ­ãÀÝÇm‚–A÷A+¡­°ŽƒµE÷.Þ…õc":Urùqbz©N¼ 8ümxÜ:,Ñ}ˆv@k › eÐ>ŒŽÅVñÇ~0¥CÆ endstream endobj 91 0 obj <>stream H‰ì×ÏKÓqÇñ¿!D‚.ž a#(È „:D A䡃 x:ŒòGŠa Z¡­Hé Â.cÑ@IˆÂ,\á‘¢bÓ¶¹©½`à!"ȶ½·ï÷ù8|Ï/ø|_oÞïý}ànÉTæÎðtU}Ï‘ã·[}ÁÕõ„u"^ïƒi½£¾ÖApxê š¨wT+ÕM5Ô:œi*©mÔæyîêÓ…èŠuü/îAÇPÕJ½¦ªžZÇ€£hÛ<Ûü„mÓa¸FÝTCõ¦j«:keou=Ñê jìªïé{4“Le¬!o¸G UOÕV½¬š«þZ'@YJïd‡ÇÞT{{µX¶tâ˛։g܃N¥¶ª³z\õW-V—­ œËž¦!í“§.¼û·Žƒ‚àt65WýÕ«Ëj´u”hlíâçÚ!kÆóÖqP@܃n «ËzhõZí¶Ž€õ#‘jï UÔuVzºoö¿ÜÚN['Baqº„º¬F«×j·:®¦['@ Éîîù'æŽì×uÐÜ6[Ú°N„bàtõZíÖ‹«éê»ZoöfÞ~õ^x¨-QßW³_¬ã x¸]H?軺ofbKÍm“Ú žèóOÌew÷¬¡¨¸ÝIMWßÕz½¾&€æ€u"ÕÖvúÖýp¥§»¢®³½+ô}ó§u"àt3µ^Ý×ÐÐ4ÐL°N€bÌ×4 è8},[³Ž3܃ÐÐÐo ™ É`ô>òíôåQí~ž¦¡`xÑ:Œq"GÓ@3A?ƒæƒ¦„uäY|y³¥# }¯ÚÛ{Ï?›ÞÉZ'‚=îAÐLÐdÐ|Ð/¡Y¡‰ayLeέy­¾àêzÂ:J÷ ~£ù )¡¿BCsCÓÃ:/ðâSmã ¶»3Wø¼l¥…{¤Y¡‰¡CÓC3Ä:þÙBt¥éÚ³ÜF7ŠXÇA)âÄ_hnhzèÑ$Ñ<±Ž…õK€‘¼½. endstream endobj 143 0 obj <>stream H‰ì×ËK”QÆñ¿!B!ÜÅ€"h +Á… %ÜAâF Š6i’(.¼ ˆ.´$5’bpQ¨‹P•PDaÄ^ÂKZ£õ@¢Ôqô7ï¼ßÏ"l÷À9ß÷èÏŸð‚7ïæ®Üx¤­‡âï‚ß,­nß¾7 COɪkí=ü±^´ïsj__}t Êî¾Ô—Áz. í\¼ þ ç·ëèÓ Z†BóÖs`€öýLÕ«}]}ô5°žƒKEû=øxýfƒ.@QyÏìÂgë9¸T´ïO*]½ëèS³ëõ°ž´pñ.øÜ׃õo¯¦?N Tëý×z. íûÍïØUºz'v?£}€‹w²°¸q«â¹nBjv}gßxäèØz.íû‡ŠVת['^TÞ£Þ­Áí\¼ øc(4ŸYئûSÜ [ÏÁÅ¢}ŸPË*Zg­ºÕ¸õØ£}€‹w®ÈÑqÛ³)Yuº¥•ýáå-ëE¸(´ŸðÔ¯*Ö)«èÖîQÕm½qö.Þüms{¿ªf0)PœQ[Ó<²»wh½±Gû Lͪ\õ«ŠÕ²Š¶^„8BûïþåÓÜzAY—®GZncopÒzbŒö•jU³:\õ;5»f=q‡ö.Þü_px&½ E—$¯¤cbzÅzb†ö U§:Ö@~“ʵžƒ8EûïNôíàGCûûk™OtUîܵþeÇzb€ö‰ªT›:PuªZÕ¬õ"Ä/Ú¸xpJú…³âák~áL´ŸT¢zT•:MýI¨N­!ÞÑ>ÀÅ»€3™˜^É+éÐ ä7‡g¬ç z´ŸÔ JÔ9ªJµi=Þ@ûï¢ðbp:-·Q7§ ¬kjvÍz¢Aûž¦îTŸNP%ö'­çÀKhàâ]@tv÷kšG’3j“ÕU5ƒ›ÛûÖ‹p6´ïQjMÅ©;Õ§U¢õ"x í\¼ 8¥ÕíÒÊ~]¡”¬ºÖîÑÈѱõ"œí{ŽúRejM§îÂË[Ö‹àI´pñ.àüBcáœâv]¤Ì¶¡Ð¼õœ í{‹ÊR_:2µ¦â¬çÀÃhàâ]@¬tö§f×ë:•÷,,nXÏÁ hß+T“šÒa©/U9:¶^o£ýèü`?êJë endstream endobj 92 0 obj <>stream H‰ì׿KÔqÇñ¿!B„·8A„r t \œr„h©!ÈKÃA³à¨!C° —0 :p°‚rÐÁà¢L*Ò‹ÔºRë 5ýðÞ÷ýÞó1÷Ý^Ç'ŸÏ·o’”+¥gó{œ«oêÏŽL¯­—£©J]¸ü€sÂoôU)êAC( 焪ЖèE’$Iú­ò—Íѱ™†–.oݧn¿|]Š^¤ªæ{P;AIè G…¶P:½H’$I¿š*,l¿Ä­µ3W˜-FÏQøÔÎQÚ¡3Ô&zŽ$I’~Zxþ¶£gœ{ÚþCƒ7î<‰ž£Äð=¨?Eaè džæPžè9’$I5íÃÇÏgïÕeúö<Ï>£)I|ê/üÈÍ¡ßÑ3þüÅûèEJ߃úk4‡òp~¨-¢HÑ‹$I’jEa¶ØÚ™ã&Ö|ôÊTa1zŽ’Ê÷ þý¡Bœ"ŠD—¢çH’$¥\ñÕjWï-n_ -£c3›[ÛÑ‹”`¾õï¨-¢Hœ%êD£¢I’$¥ÐÚz9;2]ßÔ_—é;™\)mD/RâùÔÿB‘èu¢Q”Š^E/’$IJ‰üÓÆÃC\ÝÛ»¯?[XŽž£”ð=¨ÿ‹:Ñ(½¢ZÑs$I’ïñÜRÛ±«Ü¯2G†ó÷ç£ç(U|j7P*zÅÑ¢],zŽ$IR"½y÷ñøé»Ü©ö5_¸˜{øéó×èEJ߃Ú%ôŠjÑ.£fÑ‹$I’ë”*Ã÷ ví¢`œ1jFÓ([ô"I’¤j—¿?Ÿ92Ì ªíØÕÇsKÑs”f¾UtŒšqÒ(}‹ž#I’T¥ž-,·w_çÖÔxxh"ÿ4zŽÒÏ÷ *†¦Q6Ε£uÑs$I’ªÈJiãdv².ÓWßÔŸ™^[/G/RMð=¨J¢lôÊÑ:ŠG÷¢I’$ÛÜÚ›ihàZÞÕ{«øj5z‘jˆïAU•£u<ºGýh`ô"I’¤S…Åæ£W¸µvæ ³Åè9ª9¾…âÑ=Ž ¤„Ñs$IJµï ¶Î½$ endstream endobj 144 0 obj <>stream H‰ìÖÏKÓqÇñ¿!$/ž a(d‡.ƒ:(DàEêàA$ì;tQŸÖAà ‹«M‘¡ÂP›þôEÿZ'Â_±}ïÛTAi ƒB¶°}€‹»€¬K$g«êúÔ«âòHotÌ:öÆö=NÛÑ‚ôŽ´&mÊ:üƒí\ÜäÈp|2îT»*ª»â/?YÇÁnlß³´­FoG ÒŽ¬ãÀoØ>ÀÅ]@î¤×27{žiWÇjÏÝŸžIY'¶ïAÚˆ–¢÷¢Õh;Zu"øÛ¸¸ ȵùÔJ}sL5ÛøRëGKËiëDø…í{Šv¡uh#z)Ú‹Vc¾Åö.îòãmâK¸ö®Êvðøõ{ƒãÖqÀö=D‹Ð.ô:´-Å:|Ží\ÜäSôÁ»­ß½ÇNßyý~Æ:N ±}/Ð ´½íBë°Žƒ@`ûwyö}õÇ•®§Ê.«xõͱ¯ß­Û·¥æ«ÿzÚ‚¡]X'BP°}€‹»Ó3©³ç£[?†¯vÇÓkëDÃö­¨í꼚¯ç¯h Ö‰,làâ.ÀЫñÏGOÝVCáÎØÈ„uœ`aû&Ôsµ]O^ÍWÿ­ã ˆØ>ÀÅ]€¹ÞèXIe‡zxâLO"9k'(Ø~ž©Ûj¸ž¹Ú®Î[ÇAp±}€‹»/XZN_¸6Rj+(milœO­X'ò?¶Ÿ7ê³Z­n«áê¹ÚnÆö.î¼#95WÓ0 BiïîͬoX'ò3¶Ÿê°š¬>ëQ«Ûj¸u"€íþÀ]€×<~þ±ìä-ÕRŸÃñIë8¾ÅösMíÝn²Zmøí\ÜxPf}£»´¸<¢rÖ4 $§æ¬ùÛÏ5V½ÕãU‡ÕdõÙ:°ƒí\ÜxÖÂâjcë`AiKa¨­)2´´œ¶Nä+l?ÔRuUUoÕ^uØ:°Û¸¸ ð¸Dr¶ª®O--©ìèŽYÇñ¶Ÿuê§Zª§ªÆª·Öq€½±}€‹»€ÿBld"îTW+ª»^¼™¶Žãl?‹ÔI5SÏS-UW­ãÿÂöìöS€VxN@ endstream endobj 308 0 obj <>stream H‰ì×ÏKÓqÇñ¿!D/B`"ˆ  ¼Œè !‚A‰@ðD6e¢b ƒfx¨ ¶‹¨<Ø:8ÈAJ‚¨LCVsêT°×)èšSßßÏcèíuùðÜûäÅ ¿útíf—¾­‡N´“Ýë ůßz^RÝšÝͬ€Ó½ÿRÙ8 _¹`4½²e=p.îAàTêˆj¢—¢²¨/ÖsÀ?%SëMm#ªvuàåäÌ’õÀé¸3RST½UF­±žþ²‘ùõàñ¸J]VîÌ­.À=œÊ¢¾¨2z5*Žºc½œìý ô£g“™íœõ"À5¸ÿ¥Ê¨5z8êŽê£Y/À¿&¦¾V5ªËMm#ÉÔºõÀe¸óQqÔ=5H%²ž€ï,¦7Á¨Z|ãö‹X>stream H‰ì×ÏKÓqÇñ¿!$/ž a"(d‡.ƒ:(DàEêàA$Ÿ 8M25[]ßèØ•âŠpd`,·¶n½~Ô~牡¾ÖCàGêžê§êª‡ª¢õ"€ÿn~a¥9<\h+(mÕýµ^ÿâ=s[ITUE’¼­/:^\Ö ¼º¾?‘œ±ž¿ã=‡PUEFR´žgñWŸ*kºuÛ »FâSÖs€M¼á(j£ ©3©Zª™Ösò`:©»øP7œ¢òŽÛ½Ï³«9ëEÀ/¼á4*¤:©Zêdªœê§õ"€}Z\ʆn=>|üª.6 -±¹Ì²õ"`Þƒp&ÕRÍÔáT?UQµÔzÀÞ<š8zê¦î3Áºžw‰/Ös€?à='S9ÕOQµTEµž°+o>¤Ož»¿u‡‰>zo=ØïA8Ÿ*ª–ê ª«ª«õ€}ý¶ÐÐÓ½åHYûµîgßW~X/þ†÷ \A-UQÕUW5V¥µ^°Mv5w=ߺ®\¸Ng¬ÿÆ{.¢®ª®:±*­z«êZ/Ø »tK9qöÞë‰ÏÖs€Ýâ=×QcUZ[UWíµž|-‘œ9}¾W7“’ªÎ¾è¸õ`oxÂ¥Ô[UW§WV‡­çß™Ë,7…† J[ m—oŒ..e­{Æ{î¥êª½*°:¬«ÉÖ‹€/äÖÖ#cEåºH×6&S³Ö‹€}â=·SÕac5YeVŸ­/‰O•¹«»‡¾O_|´žïAxƒjü»Ìª´õàAÉÔlmã îÅáÈÀXnmÝzpP¼áj²Ê¬>ëH«Õ*¶õ"à‹KÙæðpa ­ ´µ)44¿°b½ÈÞƒðõY•V«Ulu[õ¶^Ü­/:^RÕ©;su}"9c=È'Þƒð$µZÅÖÙV½Õpë9À•^¾®¬éÖ"ìŠNZÏÁN~ 0KMµþ endstream endobj 145 0 obj <>stream H‰ì×ËK”QÇñ¿!B„6® aD¨…B¸hQA‚ÀE #Bh!äC”B¬H)ºÀ@ I÷¡ÒEBY4‰Æ(†5•3:j?äPâÝyæ}ßïg1àî™s¾g\^F=|ñqÏþóú´XGr>ÕÙ3˜SÔ¬b«jÂ㓳Öy»¿#Ô¡jÔIªLõ©J­'ÖÁî\¼ ð–Øt¼º6¢h³ [.?ŸK,XOäUìþ6©=¨uŒjReZOl»pñ.À‹ÞŽ~=TyUéæ—µßí±Ç“ØýíPujO¨U£õ8À&°ûï¼kå7ùáã×øM¾YìþÖ¨4õ¦£S{*Ðz`ÓØ}€‹wž6—Xhê|–]بŒ«k#±é¸õDžÁîo–êRc:4õ¦êÔžõDÀV°ûï|`|r¶ª&¬’s‹[:{“ó)ë‰<€Ýß8¥®T—NL¥©7뉀­c÷.ÞøÆàð—ƒÇºÔs¨¼ãþÓÖãd:vƒÔ’ŠÒY©.5f=°]ì>ÀÅ»Ÿé ç•´©ê£'oŒF§¬ÇÉ\ìþºÔ*Ò)©(ue=°3Ø}€‹wþó=ž8×Ú¿7ÔUPw¶éþ´ž(±ûkP3*Gý¨"µDBðvàâ]€_EÇf*NÝRÞû´^¹ý&µ¸d=Qfa÷W¥NT‹šÑá¨Ud=°ÃØ}€‹wþöhàSÑ‘KŠ\Ÿ¯?[“AØýÿ©•ZTŽõ8À®`÷.Þø^jq©ëæ«Üâ¥^yúNtlÆz¢ŒÀî»T…ÚШÕ¢f¬'v »pñ. ¾Íþ>Sß—UP·7ÔPñÉÏ_I뉌±û©õ *Ô† Q'Ö»‹Ý¸x(£Ñ©ò×Õ|^I[oxØzK쾨• sPjÃz Ø}€‹wyü>TÞ¡òK+º‡F&¬Ç±ðÝ×½ëöu*A=X¤OÀwðÞSr>u¡ëeNQ³ú¯ª OÆ~XO”nÝ}ݵn\ß]·¯T‚õD@Zv÷«â]@ŦãÕµ‘• æ Ö¥Ow_÷«[Ö]ë‹ëÞuûÖ¸û€5ð.C#¥ÝZ„ü²ö{ýï¬ÇI“ í¾nV÷«¯¬»Ö[˜ ÚîÖæ÷wá.ÔJ° endstream endobj 309 0 obj <>stream H‰ì×ÏKÓqÇñ¿!B„ <ÂÄÈ@¡.;)àE1‚.F„fŠ"”š1¬ðW?aC¨H‘”¤L‰$Ò@ Å0sêÔ^*)ü5{oß=‡Án¯Ë‡ç÷½¾g[ ®T{ºR+ö¾Rxùéäô¼õ"þ“ß#˜_ì%‚€•Š›]z†úµÄ(PÔ3TUFõÑz{Ë×1ärש}™9ýƒãÖs€˜Æ=DÕPMÔcTUIë9ì `ÊפÞ%eÔ´=yo=÷ ATFõQOR­ü8¥¼¬¶óÛÂ’õ"?qE}T%ÕJSÝT=­°+¡Õ5Ͻ·‰i•úæÌ=ÿ(0:c½À/܃@R+UL½MÕ³¡õJj½€xÙó)õdƒŠväô­ž¾ë96â"–º©zê…ª¤ê©õ¶!0:“sî*vàhÕí‡ïB«kÖ‹ü÷ ÉTO5T%Õ;=Sx_mµ^À&¾Î/U½Øïº—\z±ò™þZ/ðO܃@äSIÕSUUmUa + bµx’2jôy™UÐæLYϰ îA Z¨ªj«ìÁcÕª­õþÐ;ð9=Û£N¹ÜuÏ_ [ϰ%܃@tQaÕY=[5·§oÄzëcsùÅ^µ)1­²¾¹wi9d½ÀVqQGUmÕ\=^õW¶^ˆQ‹Á•kõ]ñ)åJRQ‰ozvÁz€íᢔš«òêýªÂeµ*²õ"@lyÜ>xèÄu•È×ôÁÿÅz€à¢šú« ë«Èê²õ@LP}ŽçÞ¡>€p «ÈzË™9j´õ€cMNÏ•øTœø”òjO÷bpÅz€]áœAEV—Ug½h•Z½¶^p”¥åP}soBj…B“_웘³^ ¸'QÕh=jõúÆÝ×j·õ"€ø:†\î:õ%=ÛÓ?8n=@ØpΣR«×zÚj· n=Åü©¬‚65%)£¦Å;`=@˜qN¥j«Ýzà§Î¶ªæÖs6ø!À ¶M endstream endobj 94 0 obj <>stream H‰ì×ËKTqÆñ¿!D„6® aDÈ…BÌ¢En$\´0‚ Z äCœŠÁŠ”¢ Ä`d ‚¥DB4‰Æ(†5•sÓé@Š.^j|Ïx¾ŸÅ³{¿ßûüÞl;ÕqqdßsúZþ¿Èð´ÇÛ«^]1gä¹…•FX¯ˆâÊŽ`ÿX2•±Näû ö6MoÍpMrsMuÍvëDÀÑVéÎËOŠ*Úôxh DbKqëD@± 4É5ÏuÔ5Û5á5ç­'º;8UV×£7ᆫ/gÞ[ÇrŽ}î¡©®Ù®¯9¯io8ˆÞ ‡]ã·a„ÛhÂkÎëØkækò[ÇÆbKñ¦@Doƒ¢Š¶öàÈj"mØ=ìƒp!ÍyM{Í|~͵€u"` ™ÊûÇJª:õ$hô‡çV¬»}®¥™¯É¯ó¯P¨¬€Ýsÿñk·W/êúÐØä;ë8€ öA¸œæ¿Z@·@ ^°Žrn&ºxôÄ µiM÷@xÒ:`‰}uAwAí Ž°Žrâc{[yä’ú]߇£o¬ãÂ>üJM±Ñjë8`‡¢³Ë §î¨ÓKª:C7Ç3këÖ‰ga~K}¡ÖPw肨GÔ&Ö‰À6|þ’l¹ð¨ÐÓZPÞ|ºeðÃÊWëD€±¡îPƒ¨GÔ&ê5‹u"°¹ðdiM·^¹Þã×g¢‹Öqçb6¥Q›è¦¨YÔ/ÖqÀMLÍ×úúÔÚoodxÚ:àtìƒÀ©SÔ,º/juuð“…Ø§FXM]\Ùq>ô4™ÊX'òû °ujõ‹ZF·F£Þ±N²«‰ôFA7"±¥¸u" o°Û¥–Q×èâ¨wÔ>ê ëD¸×½¡Weu=êåZ_ßÄÔ¼u ϰ:ß7v8¸¶ endstream endobj 146 0 obj <>stream H‰ì×ÍKTaÅñ¿!B„6BP2 †.4h3„m‚„ÒFpD›$1Š01¤ %5…Í¢P5 aB4DRJ†¤Ø‹L¤Ö”½œE…Õ¼Ü;¿û<~?DØ&Î=?~ÿä'™ÊlßsnÓÎŽxËÀã©ë8¡»sï™>V[ ®©›êcu_]Ù:`lãlÞà—å•\¢g¬"Ö©Q´uÜ^Ê®Z' ÑFؾ.¨;ê3uS]V÷µNØÛÛäwøÃÜ|öp{R»¨¬íêÏ}^³N ¿·¯«évº ¾Q×ÔM­Qá÷ö…â]Ö•ž˜­?ЯuÄöõޤ§­ãÏãíë^ºš¾NÔ­ãÑâñöEà]þáJrr[]·6ÒÜ:45óÚ:N¼Ü¾n¤Ké»t5ÝÎ:E^nP4ÞàßÞøt¼ûî–êSú£ôOëDÁðlû¾ž œgÛ”ˆwÈÇóo›[‡4–muÝ—¯=´ŽŸ¶¯‹è.úÝH—²ŽDšOÛ”ŽwÈßHzº¦©O“©?Пž˜µŽS?¶¯+èúÝE×±Ž8Àí‚»$÷y­wp¼²¶KÃ9Ôv}n>k¨H®o_Í«}‚n¡‹è.Ö‰7¸¾}@°x€",eWÛ)m§"Ö™è[^ÉY'*˜»ÛWÛê\Í+¿® [X'\âîöaà]Šöxj!Þ2 U5œM¦2Öq ãèöÕ³ÚVr5¯þ­ãîqtû€ð.%}ºcïyí¨ñà¥ÉÌ+ë8ùrnûêV +³ÚVçÖqW9·}@¨x€Ò}üôåLÿý­5§µ¦£'n-¾ù`èÿÚ¾úT«J«†Õ³Ú¶N8Ì¡íÊ€wŠ~m9rì†+¿¶8±}u¨&Õ§¢ª[5lpžÛ” ï¬É̫ƃ—4«êø…áѧÖqþ*úÛW{êP!Õ§ZµŽx"ú۔›ªÎj\ñ–'Ï­ã¬#ÊÛWcêMñÔ¡š´Žx%ÊÛ”ï’å•\¢g¬"Ö¹y×ÉöDj)»jè7ÑܾZRWjL½©=uhðM4·°Â»„jæå»Cm×µ²ÊÚ®¾«Ö¾~³NôSÔ¶¯fÔZR*5¦Þ¬~ŠÚö¶x€2HOÌîÞQ[«iêIOõßþ`O6G endstream endobj 310 0 obj <>stream H‰ì×ËK”qÅñ¿!D!Z H¡Q-Ú¸0JŠÀM !nŒ@)/(#ÒÅ2¦$Ê"4˜–Úu0Bs‘A)’‘â0¢£3:ŽZX™ÖŒÏkï÷³tw6ïsÎoeàl3³Ñ²ê䬪tOMEc÷\$f@òÕÝ|±cßeýZ|ên5¸z\m®N…ç­¶ør¢¥m 3׫•XTÚ›¶N Uxÿ=õ¸Ú\_ºš]ý®–·Np®—o?ç4«5ôû¼/h@jñ\BN¿Ö›.*mWSdæz[ÚâË ëDRŽ÷ àjvõ»Z^_½_½oàs‘Ø¥+½éžš´¬ª²êÎPxÞ:€-Â{pµ¼º^¯Þ¯hìÖ°N°ÔêÜs¸QƒðØÙÃÁIë8¶ïAÀÔøê}}þÚZÖqÞ }9t궺À“ßÔÑûÑ:¼7Sûkèäú´ ¬ã¶ÈøD¸¸Ü¯û¿3§îÚݾØbÜ:¼—ÓÐÐÐ)Ð6ÐB°NH¡…èRƒïõêÙ/©ìø65k€%ÞƒD{@«@× #»V;AkÁ: ùü]ö½ªkäô÷Ã_­ã°Ç{ÀÚZº Z ;‡¬ã’F>ÿÌ=.<€5xXC;AkA—AËAûÁ:àŸ„Âó%•ºêÙµÕן-D—¬pÞƒ~¦µ Í å û 1ŠX'lZl1~ãþ›]ûëuÌ‹ËýãaëD‡÷ €ßÑrÐ~ЉЖТЮ°NبžÀˆ'¿I7<¯Ð赎À¡xXŸV„¶„…vÅ“WŸ¬ãþ`88yâÜCÝíÝZýƒÖq8ïA¡E¡]¡s¡¡¥að 3³Ñ‹Þ§iYUéžý¡­p:Þƒ6hufhchi\¨ïbf€sÄ—-m™¹^íº“çǦ­ØxØm - Ý ­m-ëDàvþѼBŸ.sNAsO`Ä:€í„÷ €¿ ½¡Õ¡ëqàø-íë8€³|`±½p endstream endobj 95 0 obj <>stream H‰ì×ÏKÓqÇñ¿!B/B`24ð2¢ƒ^ „Òeà%ˆ.¶†²0ÄL)ä ÛET‚R6G9Ê‘!S´’…ÛrfÙ«SÝ÷ãýÝwÏcèíuùðÜûäNO¤;z&Olê[xo=€š³–ÜñõM©Åç.ÞDÖs€ª4tÿ…‘¾­‡UIõQƒôˆÔ#UÉz5a?“÷>Wë<ÁÀØr6W°^T+îA HjJ¤é)©M*”õ"\«pt<>½RïVv¯ D¶¶3Ö‹€êÆ=”„z¤*é5©Pê”je½·YŒmx.«¶mÝáØê¦õÀ ¸R›T(½)ÕJͲž€K$S{]ý3*lCkèa$n=pîA äÔ)ÕJ/KåR¿¬çPžÞ-œi¾­þп֋WáÊxP¼OÞ4´†ôcµ«æã§¯ÖsâÊGåR¿ôÄÔ2ÍzU#¶ºÙÖVC[.O,Æ6¬ç®Å=”›*¦–é¡©kª›õmk;ÓëŸU7ë½ÃãÓ+…£cëE€›q –©hêšž›§ÒY/Àq²¹B`l¹ÎT.ÑýLÞzà~܃@Ũkª›^œJ§Þ©zÖ‹pŠH4ÑØ>¢Júú¦Ö’;Ös€ZÁ=T˜§ÒéÝ©zjŸõŒÅ鎞I•±©st~iÝzP[¸ꪧקªƒÖs0°ûåàÚÍ9ÕðlËÐðˇ?­5‡{°¢ê©}* Þ j¨&Z/ BþàÕëO‰ `…{°¥ªƒz†j¢Ê¨>Z/ ¼æ—Ö›}÷Ô¾ŽžÉx"m=¨i܃€¨†j¢£ú¨JZÏ ,’©=_ß”zר>2óì­õ܃€ƒ¨Œê£ž¤ZùîîõJf?“DO_¸Uç Æ–³¹‚õ"qŽ¢>ª’j¥Š©nªžÖ‹(Êñ¯ßáǯë½ÃúÍÙëŸM}þf½À?܃€©•*¦Þ¦ê9ñè•Jj½¨lþ0ÏŒ¶ endstream endobj 147 0 obj <>stream H‰ì×ÍKTaÇñ¿!D!\ …¶hãB) 7H„ ¸1…|!¨ C’(Ð`6"Tö%¶Ð\ä¢!P$#E™ðutÔ~+¹‹ˆ™;÷>Ïý~¢‹9çw8æàÀ½×¿Ÿ8{G?s¨á™·?ÂÕ}Êsþò£‰©9Ûq€£,P»°Ž»˜‘ÞÛž..hã®Þ|‘˜_±›' »¯wÐk(‰^Fï£W²›8ò²û€€à.&ýYÛ¾Õýª ´½0Ôy;òFÚJb}÷5»^@ï ×ЛX| àX±¾û€@á.æÅKWn<×ê¾Ð3›±’ÁîîkjÍ®z½†• ÀñÄÝ8q[´w¡ª^-`EmÿÄÔœùîVv_“j^µÖìüçÌã €E©ôÃgŸOëÖÖ·Ä“ÆZ›ß}M§ÕTójjÍn¬5€CÜ}€w°nyu£±mT›XTÖÕñàýÖö®¦&w_i.M§ŽšTóh àŸ¸û'î_㿪®?Õ>ž¹tï娬ßíŒí¾fÑDê¥é4£ßíüwàÄ]åðÛÓÅk}ýöd`÷•_Sû† Ü}€wš­íÝžþOEe]ÚÍÆ¶ÑßËk~tñu÷•YÉU_ShMäG.p÷NÜ ˜“õ-1­çÉðÝûO&S;ioëû´ûÊ©´Ê¬âʯ)¼­ GÜ}€w²/³?+jûµ¤¡ªÞÑwß<¬ìÇî+¡rª¬2+¹‡•x…»pâ.Á7›)©ŒjUk†â‰%Ojz»ûJ¥l*¨œJëIM~à @^XßHµFÇ C¥íÍc«ÉÍ zµûJ¢À‰»ä‘ÄüJ]Óˆv¶¸<20<ÞÛw]*÷ÝWwePÕQ*es] €1Ü}€wÈ;&áê>m®~êwwErÜ}O20»pâ.ù(½·?0<]\ÑþÖ5$æW²­àz÷ÕKõYuW%ɶ‹¸û'î¿V“›Íc¥í…¡ÎÖèøúF*óϺØ}ÕWõRGõU÷ì#°Œ»pâ.ù.žXªiÒ"—TFc3~*ÛÝWeÕ×GÔK݆2öW€û¥CŒ endstream endobj 311 0 obj <>stream H‰ì×ÏKÓqÇñ¿!B/B`2AH0¢ƒ^ AÒE Š.ºD1 3D!-¡‰b»ˆJÐ@Âì‡Ã”RRLÅJ[ø#gS{:tß÷¾ß=Œ±Ý^§7ÏÏÉ "Ë_ÖÔ ž:×SÜÒõäuìèØz‡i~øR7DßÖC8ŒªCí¡Ñ Q,­lY/€ ²»õwLf{š² ëýÁíȾõ"ŽÄ{@±^î÷tôC^Y›Îëë›û´i=€ƒñ?ÕˆšDÇD}20üÞz¸ÖLx­¼ºG÷¶Ðû`tbÞzÇã= QT&굊ŠÅz¸Êæ÷«7‡ucÏ5ßí~õûàõ"nÀ{@©OT)j–+7†T/Ö‹Àñþ?­×npZ$ïA §VQ±è¶¨^Ô0*ëEàT£óî뢖W÷̄׬çpÞƒ’DÝ¢zхɯhWÏXχ™]ØðúútEóÊÚÁ°õîÄ{@R©aT2º3ªµõp€íÈ~½?˜UИíiòwLîîE­p-Þƒ’M%£žQÕèÚ¨pÔ9Ö‹ MÅŽŽ;û§rŠ[t0kêW×#Ö‹¸ïA©¡ªQÛèà¨sT;ÑØõ"H/ã¡Å¢K]º“¥UÝ¡éeë92ïA©¤ÂQçèì¨yT>Ös -,­lUÖè6æ–´ö>{c=@á= õT;jõÏç/?¬ç€™_;·ZÇNÞÑG?ô×z€ÌÂ{€ ½Í-iU‰UÖ,,}³ž ñ`Hý£ ÒR= ÌXÏ€ M/—Vuëúy.vއ­çÈ\¼˜S ©ˆt‹TGj$ë9D«ëßõçºx9Å-ýSÑØõ"÷ €t "R©Žt‘.×ÔKÖ‹ Áv÷¢þŽÉlO“]]ËíȾõ"à= ¨ŽÔH:Jê%U“ÚÉz$F ίh×}óúúf6¬çÀ?¼¤•’zI§éìù{*(ë9—wsëåÕ=ºizŽŒ}´ž·¿ I„¶@ endstream endobj 96 0 obj <>stream H‰ì×ËK”q†á¿!D!\ H¡Am\)à&07F ”‡”‘¡ƒfHiRÌF„Ê,+QBs‘‹$Ò$#Eñ4££öl“J­±w¾oîk10»góãþÞÍM€‹=ïÿ”žÓ´ïð•£§o÷[ϰUí­>½PýZ°•º©zê…ª¤ê©õv!01›á‘*–œáméެoX/ð ܃@,S=ÕP•TïôÌù‡j«õ"¶1¿ºä}–è©NH­¼X÷D­ø-îA ö©¤ê©ªª¶ª°„³Úü#)Y>}^浦­çØ÷ પڪ{ðX½jk=€Ÿ Ž|ÉÌkV§<Ù O_´ž`G¸gQaÕY=[5·hÜz›“SÁÂ2¿ÚtàH]cë`x5b½ÀNqŽ£Îª¶j®¯ú« [/Ä©•ÐÚÕÆ¾¤´%©¸¢kfnÉz€ÝáJÍUyõ~U᪛/TdëE€øò¸{ôÐÉë*QöÙûïǾYÏð7¸GSUa½bY]¶žˆ ªÏ‰‚»ÔpîAÀÔbYoùxþ5ÚzÀµ¾Ï,Wt©8Ii5õÍoVBkÖ‹üîAÀTduYuÖ‹V©ÕkëEW ¯F[÷§×*4…eþÉ© õ"QÀ=¸‰ê¬FëQ«×7î ¨ÝÖ‹nÐÕûÁ“Ý ¾dæ5¿ýj=@Ôpî£R«×zÚj· n=à`céÜ¢v5%%Ë׿±ž ʸ·RµÕn=ðSç¨æÖs3¿*­êNH­LôT—ûz—ÂÖ‹D÷ àbj· ®Ž«æjú\pÙzÀ"ë-ÃÉ^}%”t&f­Ø+܃€ë©ãª¹^ºÊ®¾«òÖ‹±ëÕÛÏé9Mª†~_¬çØ[܃@œPÓé;à³%*Er†·¥c8²¾a½Àžãâ‡Ê®¾«òzõ*¾ºo½——¯õ&zªR+K«ºç‚ËÖ‹ü'܃@¼QåÕz_Ý/÷õèÀzàV?*_½r endstream endobj 312 0 obj <>stream H‰ì×ÏKÓqÇñ¿!B„.ž a"äA! uÈ‹ A䡃!!tòç0 IK†)E bh •J‚`*’P ²¡1ۦétj/(‚BLM{ïûÝóqøœ_§7ÏÏö67©¿3pìä ½ÖCà7OûÞf6é@·MÎZÏ€}‹,DË*ƒºci9õ7ý¯V×6¬ÀŸøHXj'”:JgJM¥²²^{[ßjúq¾J+s‘¯Ö‹`gü$8u”jJ—Je¥ï¡*Ëzì&øâÇÛ¬«UPÜ669k=vÀ#¨©TVºWª,µ–õØÁThþì¥]ªŒüÆÎÀ¸õø;þƒD}¥ÊÒÕò^| î²ž?}^úvµº'%«ê¸§¦úöË啘õ"ØþƒœE•¥ÖRq©»T_j0ëE’Z|s«½k4=×§ *)ïÍ,Z/€}à?À‰T\ê./5˜ÿшzÌz€dô|è}ι»ºEz‡^°žûÆ€s©¾~•˜ªÌz€$šY,)ïÖý9qª¡½k4¾¹e½‚ÿ GSƒ©ÄÔc:eÅW«Ð¬p¹å•Øõ†¾ãžš”¬ªkuϾD׬ÀÁñàê1U™ÚL…¦N#Ï‘ÎÀxF~£Úéüå‡S¡yë9ð¯øp µ™ M7Mµ¦f³žÀUF&ÂyE~]·¹·Úzþƒ\F¦ZÓeS¹ ´žÀñÂsK¥]•ô\_KÇpl=n½ ÿAî£ZS³©ÜtßTqj9ëEiumÃ×:˜š]«cRVŒ,D­À!ã?À­Tnê78µ\]Ë€ºÎz'yÒ3™YؤræÂý7SŸ¬çÀ‘à?ÀÝTqj9:uêÎzànHü$ºNçîtÉ=•žõ *²-« êV¤f×úZW×6¬ÀÑâ? I¨ëTwj<=õžªÏz€[·t §çút"J+á¹%ëEð?ðTÔx*=ݽ´œzµŸ Ðz{½ýÓo³.C^‘d"l=€•ï ®Ï½q endstream endobj 97 0 obj <>stream H‰ì×ËK”q†á¿!B„ \ ˆ‘‘.ÚÌ¢()„6‚Tˆ´±"„4Q¡´“¦Ò c,T"‡"L©,q@1 mÂÔQGí!ÂN&ßùœûZˆîžïwÿ–—'¨óv%eTîØ{ùÈ©úÞÀ˜õ[ªôÆsýûë§õ[J_|}÷õï¯P XÏèì>xâ¶¾.wµ¯µÇz¼X¦¯¿@G =Ë£*°žØ"C#ÁܯîBjéµ»/çæÃÖ‹Øà=Ä85€J@= S 6P!X/üG³¡… OûÊÙÏ/ôŽOY/`‰÷ Q¨ t âSJÔ ªëE€Èó6Øs誮}fvÍûÞÏÖsØã=ൠA7Aµð¸©Ûz btáÝ9µ\x«ð°Š:Aµ Ë rP?XÏlÊdp&¿Ð§«ŸRR\Õ6Z°^ Šðð+Õ‚šAå û ŠŸœ¶^X·¹ùðõ{¯ÓÊtÌs ¼C#AëE¢ïA¢rP?èD¨%Tê ëE€µjñ÷»ÜÕºáéYÇ€õQŠ÷ €¿SE¨%t(ÔO_ôYÏüCo`ìØ™ÝíÝ*ê¼]ÖsD5ÞƒÖBE¡®Ð¹Pc¨4¬ç~ãëTèbù³¸ä¢®+úEZ/íxX£•ÌPc¨4Η5“=‹Kw¾Ùµ¿\]w<ï~`pÂzgà=`]Ô* Ý U‡ÚCb½b¿c =ˣ˜zøf‹¿ßz'á=`Ôª]}Go©C¬ç@ŒøôåäÙGºÆ‰ie7ë_‡—¬pÞƒ6FÕ¡öP膨FƒÖ‹ †|›ž+®j‹O)‰K.:WÜ4œ±^À‘xØ ˆ:D5¢&Q™¨O¬Àö÷À÷.)£R çΩýØ7j=€ƒñ°yª5‰Ž‰ú¤¡ñ­õض:»‡3³kto]îj_kõŽÇ{@¤¨LÔ':)j‹õØVFǧN_hÔMH-­ð´Ï†¬Øxˆ õ‰*E­¢Ã’[àU½X/Çûù´æ]z%§õ»~¶T endstream endobj 313 0 obj <>stream H‰ì×ÏKÓqÇñ¿!$/ž a"(¤‡.£:(„à%êàA¤žŸµµøSuçù‘åúZ€ƒóöÃxV^ƒn?—».Ð=d=€™áÐdna‹nƒ”ìšf¿õ8h¼Ä-µŸ Pw jPMh=Àš[º|ýiBjE¢«²ÔÛ9¿±^xˆg*@u jPMXâiWZ/°ï¢+«¾Ö¾äL¯¨ ¸-46e½ÌðÕ šP—¡úP•¨V´^`¿{GÓÏÞÕy×·+8b=Œñ€u*ÃJ|ñæ«õ{,46UPܦ3ž”Qíkí‹®¬Z/{¼`ƒúP•¨VÔŨnT=Z/°æ"žÚžDWeBjE‰§}zfÑzÄ Þƒ°‰ZQŨnT=^½Õ­’´^`÷šýý)Ù5ª3š†C“Ös ¶ð€R7ªuCª$Õ“ÖsìØ»o9ù:Å.w] {ÈzÄ"Þƒ°5¤JR÷äÉs÷Ô–ÖslKxâçÅ+~ÜcéU7}ÁÈrÔzÄ(Þƒ°5•¤zRU©ÛR…9ž±^à¿~-ý¾ÑðjýÀ•&~ÌY/€˜Æ{¶CU©¶Ô…©ÎTmª9­Øìqççã§nëœæä7¾ [Ïà=Û§ÂTgêÚTsúŸ}²žà¯ÃßÝçﯟÍíÖsÀ1xÀN©6Õœº<ÕŸªPë9@\›žY,.¢óx4íš§¶g~!b½œ„÷ 삚Så©þÔZTP‘Z/âNd9Zßô:)£ZÇðü¥‡ãáëEà<¼`×ÔŸªPÝ¢*Ru©êÔz/º‚#i§ëuú²ò‚½£ÖsÀ©u ê.Õ×z8•ZTEª»Ôå®S£ZϹáÐdna‹N\r¦·Ùßo=œ­ãåݨúZgS—ªNu£ªTÕ«Ös€Chvn©ÔÛ™èªÔŸ~è_ëEàx¼`¯lÄjBj± ì-_k_r¦WÑ’[Ø›²ž‡ïÁøñG€ž7¼| endstream endobj 314 0 obj <>stream H‰ì×ËKTqÆñ¿!B!ÜÅ€"h «`.”@p#‰‚›.D“4(.R]hJi Å T¨‹Pƒ’PDaÄK˜¨Þsfì‰Z$t#œóž9óý,"wÏbÎï{| À ‹µýg.ÜÍ-n'’Ö‹€ô™ˆ–T†ôM–wŽDæ­ç€§¼x5§VÿZOQµª]õÀªcU³Ös€´´´«®Ôw”Sìè'’Ö‹Àk¸ EÔ®*Xu¬žY5mtyËz6vvmcÙMY¾Æ†ÀðflÏzx÷ ¤”:V5«¦UÙªoU¹Ö‹·{2ñ×ô¼Ÿýh=¼Œ{ ¦UÙê½Uåªu­ç.55½RVÕ¥/ÅwéAxtÆzx÷ 8F}«ÊÕ««âU÷ZÏ\dm}»îö3}ç ï·„^ïY/€ŒÀ=NRåªuU¼z{U¿j`ëE€±Ÿ?Š«7ŸòQ€“¸Ày*^u¯ž_5°JX=l½°É÷·ë[(«êšš^±ž‡{¬¨~ÕÀz„Õêbë9€£>Ì­ùkzôûÏ+m}~g=2÷ ØR «‡õ«UÈÖs€”ÛŒí5†³|ÙM¶±ÝCëE¹¸ÀœzXU¬6V!«“UËÖ‹€”ˆ'’}orŠ‚jêúÁèò–õ"Èt܃àjc²ÞdÕ²šYål½8M#‘ùÂòNýÂK*C‘‰¨õÀ7܃à*êdÕ²^f•³úÙzp 7.×=Ò¯:·¸¹{`2žHZ/üÀ=n£ZV3«œõ>«¢ÕÒÖ‹€ÿôyûàVó˳ù÷²|7‚Ïõ§õ"À ܃àNßCZ­–Öi¤‡CoÏ_lQfTÔöÏ.|²žøîAp3U´ZZµºZum=ø'‘‰hIeH¿Û|;nÆ=î7™WWë¹Vc«´­ç¿µ´»r}H¿Õœ¢`Gïøá—¸õ"ÀŸp@ZPW«®ÕØz´ÕÛªnëEÀ ûG¶±ì‚&ýD¯Ý ¯oîZ/ü÷ /ø*À¥™ÎK endstream endobj 315 0 obj <>stream H‰ì×=K›aÅñÏPDprq²!à¢P…ºd¨P¡.‚H‡€à⤴F+(¡¾QHµbµƒ Y‚Ð"ÚÁRPSP ¡ˆ¨¨R|IÔ¨=­_ÀZãežçÿBÆÏÍ}ŸsqáñÄ‘¿5rïþó8<¶N¸ìApuõg/gÔÛÕÞÕáÕä­!‹¥Ï·Æ J»Ôj'bk{Ö‰7‰=Ž¤Þ®ö®^M^}^­Þ:²ÏÇùXÉ£W:EúÕë8€›Çûüí'}×[Û«mœÐÉ)(í_HŸ['d{œMM^}^­^·½¾z¾u"Üi‡Ç-Áé\O{Nq[S`*ž8²NÈ ö ¸Á¯ý”º½¾z¾Ú¾:¿u"ÜE£á¥Âò ŠAUÃØjlÇ: ãØƒàjøŸ¾Óµ¯Î¯æowÈbt£¬:¤³áñõGfV¬ãn {ÜFm__—¿ú¿V€u[ßLÔ7‡uòK:{‡çOÒÖ‰·‡=.¤Î?ðö«ú¿žm-ëD0Lv‡æò¼:þÖÈöî¾u"Àmc€k©ÿkèÐ"Ð.Ð:°N„Û39-ªìÑׯ¨\^ݲްÁ—ÓxXûFoÖ6‚udœ¾¸¯n„/¸`þÒ.Ð:Ћ ¥ ½`±?ô·Fô•ó¼¾ÙdêÔ:À{pIëàÅÀ'-½ Z ÚÖ‰pé·/ÄÇ endstream endobj 316 0 obj <>stream H‰ì×ßGÝqÇñ¿aDbDLŒMd¤©Qc7ç"VFdDÉ&ºi2cý°”f*MŠÕÖ¶Šl[ª‹í­f™Ò:VKMm¥ôcvª½®ÆìWíTïï÷Ûó!éÜäås.Þž;;a n†j›û£˾™SØ1=»þÿxÀóã: úm=à*õ‚NƒÚA¡Ž°^„péÊÇûjô&gÔû&­ç„üªø£ÚABÁp¯±À|zn‹¾Çç*ïw [Ï8=øDlJ•΄šBea={°¼²q­üYD\qd|iQE·>Z/8=ø u„jBM¡²P_ÎÚÚnlŒIªÐ}¿”÷(0µ`½à\ô àŸÔ™Wë^¨2Ô*ëEø=ÿÀäÙ‹wõM%¤Õõø'¬çœŽì’úB•¡«¡âPwXÏÁOS Yùmúv¢Ëë¼ mm[/¸=Ø=UFýÃ×*ÝÕ‡ÄzvVׂ%Õ}QgÊ"⊠Jº—Ö­\ƒ않CÝ¡úPƒ¨DÔ#Ö‹Ž®–'obSªtÊ}ÙMïÆç¬ç\†üŸ±À¼DGD=¢*±žsä ̤f6èýã}5½£Ös®D¡Q蔨MT(ÖsŽ„¹Ï+9…zóã ·*ë_~Ýøf½àVô LÁͪDm¢ƒ¢NQ­X/ò,¥ß§Î»þ”§„‰ì µÉ•º)ª5‹ÊÅz‘×töŽžºpG/œšÙ042c=àô `©ST+º,*õ‹õx;öɗݤWM©jﱞðz°ïÔ,'ÏßÖ}QŨe¬ç¸ØâÒzAI—^2êLYIußêZÐzÀSèAÀAP¹¨_T1º2*uõ"— n†j›û£Ëõ€YùmÓ³KÖ‹DŽ*ærA»ºFu£Æ±^ä=þ‰„´:½[rF½`ÒzÀ³èAÀASѨktnÔ8*ë9Žöþ×ôܽULREcë õ€Çу€Ãq¯}H£££ÞQõXÏqœå•¢ŠîÈøRýè}´^†ï Ï+Ç endstream endobj 317 0 obj <>stream H‰ì×ßgÕqÇñ¿¡«DD—Q7uSt“tQ7ÝDtÑEÄHt³~Y$™˜.*º‘5iV5ºÈn5ýPdË*³Z­­b½ºŠ®Ïö>ö}<Çv÷úœ›·çÒPéþ£—k¶tç»z«ß—¹…S½Ãk·žÉ'äßêEíâúÀØÆí½¹ÈûÞšxó±zM¡Xa¯Þ~Nõäú¤€ÒAÕsŠ>}·ã@~޽}#£¯«çÐ,z€iŸÎ}WsƒRCi¢ê9ÞOÍêÈ/°aÛ…¾›Oþ®^@ãèAª¤€ÒA©¡\¢”Qú¨zÑ ùö}±çÊÃugóðãÝwgfç«ÐPz€Z©¡®ž¡£ôQ*)­T½hy oÚu)ïÝsøÆ³‰Õsh4=@;H¥r’ÒJ)¦ê9Ëbl|rçÁkyãæÝ—ï ?¯žz€62øàEZ)‡)Ý”zªžÓ2ÓŸæŽÌ»Öwž¿ØÿøÇ¯êEð— ­¤•RL馜§4TJªzQ œ8w/Ï9ròöÔô×ê-ð  %SO¹P)©ê--03;?6>Y½þ§h[i¨”Tõ Xµô @3éA€f҃ͤšI4“h&=ÐLz õþ0#SXi endstream endobj 288 0 obj <>stream H‰ì×ßK[wÆñ¿aL(BÁ¯¤Ca:êV¼°lÂæpAÊÁ£™fŠ"Xë™Vlí… a#ZºéVÅRjËЉ,¬"U¬Rü‘ÄDÝ‚óW“Ô“c“÷‹brNú¹9ßçùìîÖjùþ··ÞùV¯V 9+ »Ã«ç×Värv†ÂѤn¿÷`N÷ê5µÿ}lÒ_\Õ£_Ыާö#€“ÛÞéšÊ-iÓÉ\Û0ìŸ_MöRÈ…ßL~E§îª¬˜ž]Jöp°o4å¯RXO±Y¹œø)ïƒêjºW­CÝC $Ù_˜$Ültúr šÏ^»Úq}#’ø½Iå‚ÒçbíÍÒÀiÃ>de±YÏryM¯2:‘[RØÕ+Ô.Ô1Ô4Ô7Ô:R`¢Yÿ‹ËWuÈç•uÜö’Ý.¼)ØÌ“È—È>˜øv 8µ–WÖì¯s[‘«Ý= G½ì¨\˜õ¿øøË;ú*¯¬ã¶ç©ùóH+öA S)µ•ÝzÀ/_Tšïûöø}PmAAÍAרE¨K˜?/ÀDÓ³Kå5½:Õó+:G|3/8˜ /×ÂN_NAó™ÂkW;î¯oDÒ8/€4a2˜²[ ®Wš+ÓÁÍøWÇìƒê j úVÍAý!óÌ?á+ëöð{s!¶½Ó74•[Ò¦Oj†ýó«Í Àtìƒ@ÆSŽ+Íõ¤+Ù•ïJùÝ#öAu5}®¶ Î`Ѽ…ÂQgר­È¥ÓÞîð®6ŒÏã¹ðû£‹«zô^¯c“~k§`6öA K(Ó÷æû¾}P}@­@Ÿ¨!¨'¨-X;-ÀT ‹Áú&ŽýsZ»o=ŒlÅŒ\¸X{S¯¹%m}CS±í«Ç`:öA {(Ù•ïJùxâ+ýÕÔÔô§º‚ÕcÒdâñ³Òj·Îÿó—º>ü¢_oÞ.hntúÁM«G&ìƒ@¶QÊ+ë•øzö?ø¼_@oÔÔ ¬ `¯¾ùÙýû®›NdöA ;¹nŒѯ &`õ8 <™yþÞ'?* Î_êzÿ³>#¾n½ûr-lõhÒ„}È6Jye½_ϾÒ_@oJ«ÝjVH“…Å`}“GçÿÙâ–ëý“‘­Ø½sú³ìÓ^½æ–´õ MŶw¬€éØì¡dW¾+å㉯ôWPPПêjV 0Q(mwǾÝá]^Y3>7öA½þ2ñOqUÞ¿ûÑŸY;-³±YB™®d×ó®”WÖÇsßøV}@­@ŸØŠ\ê j ÖN 0ƒçîŸù:íËkz§g—ö~µ7bÛ;=ƒÎ]hÕ'µ ÃþùU‹æ`:öA ã)Ç•æzÒ•ìÊw¥üîÿs?NÝ@ AŸ«-Œøf,špòtÂWÖ sÂÌ…@p³ÑéË)h¶¹œ]£ë‘4Î MØ ¦ìV‚+Ç•æÊt%{ü«C÷Aƒz‚Ú‚¾UsPHã¼€“§ÃßîðêT7ÖºP8zèeGåÂ_sËÆ"™WÖqç§?ÌŸ@Z™¹þ'ÀÖ´[c endstream endobj 289 0 obj <>stream H‰ì×ñKÜuÇñ¿!†0„CA 4ÁBJ Œ@$c0ðkŒÁvE1Ì™q8Hë¨MÉ%”¨D;pkÇR–Ò‰ép¦ÝrNOo³|Ijmz÷ý~¾ß»sÏc(~¿ïÏ÷—ï÷õzïíÈœàÛEÕ]¯¼~Ñ×8p÷ÞÊ3ýî‡{ú“þî½[Û»þžÉü²V]sæBhu}Óýç–ØIöNT´ëc~ªexq9~ÀÅçBhb¦ÔwEÔ4ôG¢Kzý¡¹°µ½Û¸y¼¼ÍÚ.WV7Œ>/€Ì`Ž¥³µÁ)¯•ÚÊî]™Ê>hQ‹P—°¶ËT®dÖìüƒº¦ ¾Û¯¾ÙùÅðO)Þ•b.(hNŸI%häöAàhP"+—•Îz£•ÔÊ냯O}´¨Q¨Wèu 5 ÇÏ 0ïáÆö¹Ž±¼’KÇJ/ëýšú½iåB$ºTÓЯë‹Ot‡&fì>/€ÌcŽe±Yï²ÒYÊ-éîƒ{ÿÔ u 5Û¿M«f\•|òôêµ[…•ú¶¿wú«ù…µt'ØÈ…¡ÑhQu—îò5Ü™½Ÿî‰²û Ó”¿Ja½ÅJdårê7ÚÈ}‹:†š†îUëP÷PIwÀ¬ðt¬ª> /symßxxÎÞ{¹ðh3áï™Ì/kÕ½ÍþÑõøc{§ÈöA G)s•¼z•ÂÊb%rZ·ÛÞ-êjšðÆ»Ÿ©‡Øp(öûŸ'Ï^×׸ ¢½ïË“OžÚå$—ãûÑ;8•ØIÚ~ crŽrVi«ÌÕË«üU Ûâpµuýǘ_X³= ®G› Ïd~Yk^É¥fÿèzü±ÃÎs!<«ªhHymßxxÎáóðû [”°ÊY½¶Ê\%¯í9Îsߢ¢¢6¢N¢f¢~âp àP_‡~.ªîÒgÜ×8p÷ÞŠ‘™¦ráêµ[…•U×üõ·?Œ<÷°¹B©ªlÕ «œUÚ:œf*÷-j#ê$¨~¼qÛÈLÀÿE¢K5 ýúÞ–ú®„&f N6˜ 7¶ÏuŒ+½¬úA¿:Ÿ À%ìƒ@ös#XÍîƒ5õUWQc18°²ºñÁG7ô=^ÞÖ¸¹µ½kv¾ñ\˜P×ÔÌÂʎχ"¦Æ0‹}ÈrÊP%©ÞS¥ª²ÕÔX7öAQ?QKQWÑðS-Ãj/fçÀKèߟÖÓçG\ú´º” ãá¹²wz5¹ª>žŽ™À9öA k)7•žzC•¤ÊS³Ã]Ê}‹ºŠ‹æ«½¨Ã¨É¸q ¼ B3%o¢/jMC$ºäÞAîåBb'Ù;8UPÑ®ùï7-.ÇÀ6öA )+•˜z7•žÊP%©ñ#\Ý-ê-j/:¥øD·úŒ{À‘tgö¾¯q@_ѢꮡѨÛǹ ëñÇg/~£#òËZý=“6. -ìƒ@VQ>*%••z1•›JO—ò`´¨Ã¨Éè,µu·€#@ÿfÿh^É%/W'oraÉ}í­=XrŠ}ÈJFå£7«“gûàÞ—\5÷–\ÈuÉ'O{§ *ÚõÁ>stream H‰ì×ßKÕwÇñ¿a HÞƒ†p$Ð ‹ÁaëBo d]xQ²¼RK9aDºÆ!·¥™LÎbÒ¯­‚©‹d˶Ë$‡6C;ZçØÑöß8cÐÌã9ž÷÷ûõõ zÓy#ßÏëõyý:S‰•ä©ðí%-ï}püàÑþ™Ùçÿ—iøá§ßx_^sù¦)½£¥!TÔöüþÇ_&DDÜ`1o åšùÇüj•İÆ&žì­:Ï»‚í×ïç>€ÈvÖòÅ-ž>^­ƒˆl/ô­ÇÓGÒƒ¹`{|í¦ $"b¥»¼ 4Äi\QÛ3³ cÞ |…åmdÖ\0ÿ6D¶ÝErŒŽ£éxîh=ºÏ*†yï;ø6XA$a}Ó7fFD$g"w•U†9ýŠ?é¸yhçnè…¥åDÓÙùæ¼¢Æú¦Ág / ÈlºŠä ½F»Ñq4}Gë†qCï§°…XDäa±‘¬ãˆˆl¡é™…šÏ¿åÄÛµ§µ£k8±’´Nô†{z!:5_]wÙùŠÂG’«kÖ‰DüL÷A‘ Ëh4zÇŽ£é¬¹¨÷,"v‘ó¨ïc/Y'ɲ¥åDÓÙ;ŠOpÐÕÿþÙ ëDÿá¶^ˆÜyT²ÿ‘x½yhGÄ·tÙj´XªÑh7ë8o¸­÷¬#6ÁØK¬&¶“u"‘ìèœØ½ï ç[°æÂ½É?­ã¼… {!¹ºÖÙ;ZP"XÕáKÑ©yëD">¤û ÈÖ¡¹è/1ºŒF£×¬ýË…½ŸÂRb/ïýO³ ¬ãˆˆdäç_föVçLã>øÝЯÖqþ—k{a1?ròj^Qc~ ¹!4į։D|E÷A‘­@[ÑY4ýE‹¹°¼\Ûû)¬&¶!ÙQcO¬ãˆˆ¤möiìбα%-§Â·_Æ_Y'ZË{a2:WQÛCÂÂò¶îþqë8"þ¡û HÖÑS´OÍEYÇy;—÷¾ƒíÄ‚bG•MŲ²N$"²!‰•äéΈs|<Ú?3ûÜ:Ñ»y¢®Ü|¶“³¬2<<þØ:Žˆè>(’Et Å3E[ÑYÖqÖã‰Þw°£XS¤eYq=deY'YÏÀõûÎeoÕù±‰'Öq6Ê+½@ tt ïÚÓJZÚazfÁ:‘ˆ·é>(’ô‘sg¡¡è)÷ßY¼Òû)l*–™YYl-ë8""o1ûô³.NªÂò¶îþqë8éñV/Ì>:6@àÅ'NvÜzeHÄ«tÉDÑGtMd'mÞí}‹‹ÝÅG`ƒ…/Ž°Ç¬‰Èvt-ò°dÿ9Î"^#wYÇɈ§{áeüUë—?î(>ÁG8tl`öiÌ:‘ˆgè>(’.Z†®áÁ¡wh:È:Ñfxº÷SX_©%Æ*³Ž#"ÛHtj¾ºî2çOAi¨³w4¹ºf(S>è…é™…ƒGûù;KZ:º†+IëD" û ÈÆÑ,ô -ÃSCãÐ;Ö‰6Ͻï`ƒ±ÄØc|œªÃ—XhÖ‰DÄç–– ¡¡ü@s^Qã‘“WcqëDÙá›^¹;]V泂í×ï[Çq;ÝE6ˆN¡Yx^hºÆ:N¦|Óûö«ŒmÆBc§ùfž‰ˆÛt÷–·q~VÔöLFç¬ãd“ÏzÁÇ)‘ìÒ}PäèÚ„'…f¡_¬ãd‡ÏzßáË¿”ˆ¸ÄÈÝé²Ê0'L Ø~åæë8Ùç¿^XZN4„†òÍyEõMƒ‹±¸u"7Ò}Pdt BÐ&t Íb(kü×û)ì4ÖŸŽå6<þØ:Ž7ý-ÀëÆ*¹ endstream endobj 291 0 obj <>stream H‰ì×ÝKTyÇñ¿aA ¼éªE2ØXÍ‹‚d!ê¢ A]‚.¤|¨Áè2Ú]RºÐؘu·ms6«E{p‡· Ýi}mßp–!ªu­œùž™óyCAŸsøï÷ó{õJD’Æ£±CG‚Ÿ|z<¯ØßÜÖ_NX'J‰Ÿ~ùƒgä×:È&‹ŒMWVwòhù%MŽÄêšu"w9yñ6¿ÖADÜ…}ÁÖ`wð°GØ&Ö‰6Y¶î}mÎFsãiqt9ëD"’‘—Vü—ú¶62LªjCS³Ö‰R(»÷BOx¤¨¢…ä·ïî3ë8".¢û ÈÛØÉ­Á±Ž“Ù½÷47úI—;Ñ|›^gHD2Éõ®¡í»Î1C>ÿòÛÁáÖqR.ë÷Bbu-Ð1Wìç1+«;#cÓÖ‰D\A÷A‘×±Ø|ì ¶»Ã:QªdýÞO¢ÅÑåxXzíÎ:ŽˆdoÎ ì…™ØBM}WNA]®¯áØÙÞ¹ù¸u"cºŠ8Øì¶;‚MÁ¾°N”ZÙûI4:züYå74=ë8"âRS³Uµ!fÅ–ÂFÿ¥¾Å¥ëDé㩽0™Ü}°çÝVvº=øÀ:Žˆ%ÝEÀ.`#ð-°ØÖqÒÁS{ßA¯£ÝÑñxpú­Ï:‘ˆ¸H|9ÑÜÖŸWìgD:Ƭ¥›÷B¨÷©¯üO½cßåûCÏ­ãˆØÐ}P<ŽùÏà+`#°¬ã¤÷¾ƒŽGÓãÙ·¤ûÑ­‰ˆ½~þݹ”îmýõ·që86¼¹Øga6ÏÎv`GX'I7Ýų^¿° ¼v/ðæÞO¢ïÑúx4ÀPïSë8"bf82¹çð5¦Á¶²ÓíÁÖq,yy/LLÍVÕ†œJpªõÎâÒŠu"‘ôÑ}P<ˆ9Ï´gæsø™ÿlëD¼¼÷“è~4@ÞmNhGDÒêåìÒ×'~Ì)¨Ëõ5mêž›['2¦½ððqtçþ+¼„í»Îo>²Ž#’&ºŠ×Üè~œçØ3ó™üÖqÌhï;h€ô@Ú °¦¾‹~hHDR.±ºèÈ/ib VVwFƦ­¹‚ö‚ãz×ÓÊ\~aG$åtï`ª3Û9ðÌy¦½ucÚû¯£ Ò y!ôCZ"]Ñ:‘ˆ¤JøÞhQE ß;¿=áë8.¢½47¯?kKa#/¤ª64[°N$’BºŠ0É«ÏQg¶3á™óÖ‰ìiï¿f˜l‰}wŸYÇ‘M›®¬îäÏ+ö:«kÖ‰ÜE{á ãÑØ¯¾sLs[|9aH$%t”ìÆôf†3É9çLuf»u"·ÐÞ'ú!-Ñ90ôFÚ£u"Ùsóñúó·r} 9u5õ]3±ëDn¤½ðNá{£¥{[y3¾ò =áë8"›O÷AÉbÌíÂ/š9áLræ¹uwÑÞ_]‘ÆHo¤=;ÛK“´N$"®=ø`[Ùi&ÞîƒmÑIë8°NQ~IïgÏák:E’et”¬Ä¬fbs¶™ÞÌpë8n¤½ÿ¿8E´GÞMR§H$Ýz¾sÿ¾b_ù…PïSë8n§½°¾—³KG›ºs} 9uü…Z'ÙºJ–IŽkþh\¯C{ƒè4IÞÕŽ}—é–ÖqDdC¢:äËÝZtòL _NX'ÊÚ ›Þsø/*¿¤)Ð1X]³N$ò±t”lÂdf>s¤™ÕLlë8®¦½¿q4Iú$­’7FÃƬ‰ÈZ\Z9ÕzÇù`«jCS³Ö‰2†öÂÆõ„GŠ*Zx]¥{[Ã÷F­ãˆ|Ý%;0™Éfæ3SÚ:NÐÞ_´Jº%/žIÛ¤sZ'‘7Ýè~²}×9¾Óû¯<|µŽ“a´ÞKbu­¹­?¯ØÏK«¬îýó/ëD"H÷AÉtãÑs˜cÌLf23Ÿ­eíýCägòêèœÁ›¬ãˆÈ¿‡_”¸ê|›×»†Öý¿ÿ0‘5ª endstream endobj 292 0 obj <>stream H‰ì×ÝKÔiÆñ¿aa „@ZDAô ‚aé@Y:‚D„@‚¥ˆ 'Q¡Ì;Ð’­$)fvCeÙ"Ì–œ %&JÅ"›ðuò¥ý†°o´léÌïþ½\–¨ƒ…›gžßu_Ïû÷ò1?ÿúô‹¯Îó§õ ^²”YkŽ&Bá–‚ÒÖh÷ØÊjÖz"‘ÏÖöý/|ûüi=ˆÈg#uÉ^˜&Éd뉼D{?†©C‡/r€‘úþÉéëqDð?yþG¾Gò}Ò^Ø3ë€Ó+®êºl=ŽÈçÑ{P<ŠBNêªï™öþ>Ñ9ižôOޱé\œFj=‘Hàdßmõ Ü/,oç3¬?uëù|Æz"oÓ^اøèTøÈ%ΰº®o"5g=ŽÈ§Ò{P<‡Œ%i¹·¤.Ùk=ŽWiïçý“ÊIÒH饴Së‰D‚b$9SúM__em,9ž¶Ç´öo}c³3vï`Y'yâôíÅWËÖ‰ü?½ÅCÈÕÆ³w¸±$-yKêZOäaÚû9D¥‘rž%‘ËtTëqD|nzöeMà _\QEÇÕáGÖãø‡öB®PWx ª®ˆWè=(ž@–’¨ä*וŒ%i­'ò<íýœ£—ÒN9Uš*}Õzz»¼q¦ãî’ üÇ_ø§õD¾¢½[©¹êº>Ž4|äR|tÊz‘ÿ¤÷ ¸)Z¹ÌE%WIWëq|B{?þ,«¡p‹ÊªHn]¹ñ°¨¢ƒàªiœ}öÚzÒ^ȇëñÇÅU]l¤¾rzÁz‘Ð{PÜìÉÓEò“+J–’¨ÖãøŠö~þÐTé«/Ý•»µ½c=‘ˆ·%ÇÓ•µ1¾©²£½#Éëq|K{!OVV³ÑÒÖP¸¥9šXʬYO$òzŠ;‘–d&ÉI~’¢d©õD~£½Ÿo´Vº+‡L¥ÍZ#âIÏç3ÇNÞä;*,o︿µ½c=‘Ÿi/äUúÅ]fq'½ÅmHÈÞkHKn&ÉI~ZOäOÚûà2³ôu™Eö`e5í+(m …[š£‰¥ÌšõDþ§½à€äxº²6Æ9—íIÎX#òÞƒâ*d# É$-ÉLëqüL{ß1ôXÚ,–fK¿¥åZO$âvC‰TqU©ïŸœ^°'(´œ±µ½såÆÃ¢ŠN»¦apöÙkë‰$èô— ¿müÛHB’“¤¥õD>§½ï0:-Í–3§åÒu­Çq©‰Ô\u]_JøÈ¥øè”õ8Á¢½à¤·Ëg:î†Â-J.ðþi=‘—Þƒbn7ÉCRQ‘èí}ô[Z.'Oã¥÷Z#â"‹¯–ÏÞáë8XÖÖ»·¾±i=Qàh/8ozöeMà Ç^TÑquø‘õ8PzŠ-Òï˯;¹„ä!©h=N€hï[¡åÒui¼œ?í—l=‘ˆ±¿'NßÖGaE{ÁÊHr¦$r™Ã¯¬%ÇÓÖãHàè=(VH:µÛ„«ëú&RsÖãšö‚¡ì»­žû…åíüõ§n=ŸÏXO$¢÷ 8”;þÝ0Ü#ýÈ@뉂H{ß h¿t`~ú0­ØzG=yº©ïçþWu]?¶G´ì-eÖšÎÅù J[£Ýc+«Yë‰$ô'­ol’o¤·ŽÄ#÷¬' .í}÷  Ó‡ù9èÆ4dëqDòŽðoŽ&Bá•^WÑ^p‰ÉéֿšÇ)ëqÄÿôÇi$Ûné%ë¬Ç :í}W¡ÓŠéÆ4dz2mÙz"‘¼ØÚÞé½ö °¼ü9vòfúÅë‰ä/Ú ®2üÓï»­©º®ï·'óÖ㈟é=(àõGšqÓH6òÍzù@{ß…èÆ4d~Ú2™æl=‘H.$gÊŽörÃ+kcÉñ´õ8òoÚ n³¾±Ù»w°¬ß¥é\|ñÕò§ü_0iæ2P endstream endobj 293 0 obj <>stream H‰ì×ßKÕwÇñ¿a ˆÂðª! tä`1f,2ˆIÄoAÒü1åÈY5ã4'i1487G«\5Ei™ŒäF‡r’¡¢œ8þ8G¶çpH‰•?Îé}¾ßóz\ôî ŸÏ÷õ~}ž?Ù™Æïn½óÞWüZ"î45©¨ rÇöå76ûû—¢+ÖÉÿ~ùíoÎ…_ëAd³» KýœN~IÛ‡Öãˆ$@h|ö“/~âVgxÛ»‡ã«kÖÉ´RÓÄd¸¼:°^¥¾iˆ-Ç­'·Ñ{P’„¼:ß1HvqÁÈ1ÒÌz"y‰ö~*£-Ó™iΜ-š.m=‘È.=‹DOy¯ezê3rk¿lºÊ¿ÖÉ+i/¤²{£O»ÀyŠ[‚}¬ÇWÑ{P’¤"¯¸Zd f=ŽlA{?õ­iZ4]š?T¤Åqº#ï¾ßLÔ=yy,4m=޼öBêã›Ê)òqLÞ©oJEïAI,ÒéȉK\*òŠÔ²G^I{ß)ø¦èÒ½Zß”8ÅÀÝÇ…¥~î­§¸E9ãÚ Ž0¿;s¶/ÓSŸ‘[[U×;^´žHOïAI‰\"È(’м²žH^G{ßYn <¤Wsdtlš¶õ8"¯41.¯pW÷ljíŠ-Ç­'’íÒ^pÐølYeÏú‡ÖÞ=_]³žHLïAÙ;Rˆ,Ê.ðr—H'2Êz"y3í}Ç¡WÓ®Yý}›Öm=‘ÈK–¢+ußþš•×À­¨ ÎÌ-XO$;£½à8·ï<Ê/iãÔø½1ðÐzq*½en†6²ˆ\²G¶K{ß¡æÂ‹4mÎŽÖM÷¦[O$òŸ+½£Ÿãf¿xì©õ8²Ú N_]kïÎ.ðrve•=¡ñYë‰Äyô”]#sHî)D‘HÖÉhï;}›ÖÍ ÒÀéáÖãHZã6~ðéº. ½à\Ï"ѪºÞŒÜÚLOý)ïµù…˜õDâ$zÊ.3§}×É’‡ü!…¬'’ÓÞwÀÕ?iàœ#mœNn=ޤ©™HEM˜•×Ðìï_Š®XO${¢½àtc¡é£'/sˆ9E¾®Àˆõ8âzÊN‘0ä ׆Ì!y¬Ç‘]ÒÞw8=|_~#§I3§Ÿ[O$i!¶?ß1¸~ñÊ«“aë‰$´Ü!Ø÷ÀSÜÂQ–úÿcÂzq½eûî>![¸0ä ic=Žì‰ö¾›ÐÆéä(ýœ–NW·žHÜìŶÉ^°GF{Á5Ø­Cl”íÀްžHRšÞƒ²/¶MFmÓ´÷݇f~èØŽ•®Nc·G\h,4}äÄ%îXN‘¯+0b=Ž$˜ö‚ËLÍD*j‚œiV^CÓ÷·—¢+ÖIŠÒ{P^ôhö÷“$ÜR…l±žHC{ß­hétu—ÞN{·G\b.¼XU×›‘[›é©?í»>¿³žHO{Á•î=ý°ìGNöÀásWzG­Ç‘T¤÷ ¼¹AzpCHòÄzI$í}£«Ÿ9ÛGo§½ÓáiòÖ‰ƒÅW×Ú»‡³ ¼$FYeOh|Öz"IíÛht}Ö¡F'›è=(["+Š_ändˆõ8’xÚû®Go§½sÊ4yú<­Þz"qž›ƒ¡ü’6n¿üm=Ž$—ö‚»-EW¾n½••×À)WÔ§f"ÖIªÐ{P6™™[ %¸$¹AzXO$I¡½Ÿ&nßy¤>/»Ÿ-«ìáædxÛ»‡ã«kÖIÒi/¤ƒ‰Épyu€ƒÞ°©µs(¶·žHìé=(È’|àJ$†õD’DÚûéƒ&OŸ§Õsâ4|z¾õD’Òæb§}×3=õ¹µUu½sáEë‰ä-Ñ^HC#ÿ–ú9nOqËÏ7ÿ²GŒé=(ëÈ2Ë@>ÖãHÒiï§›g‘(Ýž†OϧíÓù­'’TÔÉ)òGN\ M[#o•öBºÙøÞž¼¬ï=9é=ø¯¡¤8o endstream endobj 294 0 obj <>stream H‰ì×ûKÕwÇñ¿a ˆÂ á  èX¿ÈRB ‚~(a1‚¼¤q´rÆÁ¶.³U‚g²&±“eJ$›RÒ…†šbóvŽmO8[W/çœ÷ùžïë<¿½8ŸÏûûþ¾^¼D M–V´~ðñ‰œÂÆKíýÖq$I~ýí!‡Î§uI*Í»¼MßÀXA™Ÿ»á)>è´Ž#´\èù\ø˜¯3ÓS“‘[õÕÉ_øjH Ô}w›ÙçÓ:ˆ`êÖßä Às€§®¢½ïf¼íóÎÏàýŸ`GŒ=ŸÝ¤û°Í[÷í¿G–£Ö‰Ä†ö‚k…F§Ë]áô³ó}ç®Þ‹®®Y'’¤Rt'&ygê9}ž<¬I²iï»ïüM{xÿçÐhÖ‰ÄÀRx¥Á'+¯–kpðx`bjÎ:‘XÒ^p¹®à°·¤™;Àg°wÄ:Ž$ú  1ã»öœÍ;³oGlhï xÿ§phôÚu"Iž¶Ž»OqúEå-†žZÇ{Ú ]]ó_¾»}g=7aïák¡ÑiëD’ ꃮÂ\3Ýœ8“μ3õ։Čö¾¼Dølï÷ÜÚÁ:Ž$'^¼ï‚N\^¡½ 13³‹•Õ¹U™žšêÓ·æ"Ö‰$±Ô]‚Yf¢³òj™nfœI·N$Æ´÷åôÚ·‚¦@_°Ž# 15³pðx€Sf°–Â+Ö‰$…h/È …&Y\‰œÂÆKíýÖq$ÔÝ õú}f9öšÇt[Ç‘” ½/¯£œlºMSànÐèÖ‰$n"ËѦ‹=ÛwÖs¸û´?ŸµN$)G{A^èôŸáb•·ô ŒYÇ‘„PLoL.óË3ËL´uI!Úûò64ú׃î@ƒ GX'’­bÒcoteþ`ïˆuIQÚ òFlÿmÞ:®Ûa|âëDgêƒéjbj.öFÇü2Åz£“WhïË»õôÿMwà’Ð#tOœk(4YZÑÊ9~øIÃ¥ö~ë8’Ò´äx±ÔÓL { åL™VfÖ:ޤ.í}Y'zm‚NA³ _¨V¤¾èêÚ¹«÷²ó}Ìø~ N['gÐ^ujëøèÓo¸-Åû.<zjG¶J}0m0L%§É„2§Öq$ÕiïˆÐ)Ê]áÎÐ2è4ëDòfÁÞ‘]{ÎrRÞ’æ®à°uqíY¿ù…Hõé[YyµÜ™Ã'~ž™]´N$›§>˜˜ÁÊêΑ©d6™PëDâÚû² ô Z7‡ÆAï°Ž#ÿÞ{ø§³}g}óDW׬‰Ãh/ÈF=Ÿý²²-öØiºØYŽZ'’ÍPt4æŽéc9Dæ‘©´N$Ž¡½/›CËð_¾{ìÐ>è Ö‰äÅüB¤úô­¬¼ÚŒÜªÊꎙÙEëDâHÚ ²9ÁÞ‘‚2?—'ïó¦®à°uÙ0õAçbâ¼%Í3È$ZLJÑÞ—­ qÐ;htš}Ä:‘{µ^¿ŸSØÈ8ï»ðçà ë8â`Ú ²çÛú²ó}\¡ÒŠÖ¡Ð¤uÙõA'zôø³ÆÁ1wLŸuq$í}Ù:6>„‹D¡•XÇq¾±¢ò~Oñ™@÷ uq<íÙ¢çsác¾ÎLO üÃWëD².êƒÎ¢A“xÑÞ—x¡‰ÐG¸NtŠuW˜˜šÛ¤ß|›·®Ág)¼bHÒö‚ÄÅ£ÇÏJ+Z¹KÙù¾sWïYÇ‘÷Stóm}LçÅ”1kÖqÄÙ´÷%Ž"ËQZ Ý„KEO¡­X'J[T¿—?õ¯oè§–8Ò^8ê {Kš¹Qeþ`ïˆuyõAG`Ž˜&NŠÉb¾¬ãH"ü+ÀtF5à endstream endobj 295 0 obj <>stream H‰ì×ÿKÔÇñ¿a„ ÂG ‚8t ¿È¦‚B?H8a4bu™¢bÎq¤›Ûò@7Ù&*1d³‹á±)¥d³äš_O¯Ú ¶Â¶_î>ïŸÏëADþÔû>Ÿ×Û÷½^¾tÖO?ßç½Küíðÿ+¶¶¾ÙÐ&W™­ÁÉݽ뉼&<>›[ÖÅ.­î‹Æ–­Ç¯Ñ]ÔJì'{¦² ÛÈUMãÐÒJÜz"9ZëçwxGüm=ˆÝ©m ñŽØ&vŠÍ²žHÎË)éä@X#¯Qt'}•’tÓÝ—t£¹Ð_h1$FC¯±žè˜Iì'{¦² Ûx€5CK+që‰Äãt$ÝÂã³¹e]Ĭ´º/[¶G^Qt¶ƒᥰ/lõ8âYºûâ ZLmSˆ°Ñkh7t뉎‡±È|AE/Ï­¸*™^´G|AwA°»wМÌ,h%lç?»½¶¾i=‘¨ºÑÐæu°#l ûb=‘x™î¾8‰FC¯!rtšŽõ8®öàá“ÊúAžUvQû[w­ÇÑ]Çð¥÷Ü…a}éu õA7Hì'Ù6‚wÁv°#Ö‰÷éî‹ón†¢t‚Gß¡õXã:Ï6÷.¶žÌ»ÂþÁÖ‰¿è.ˆÃ¢±åÒê>R—W~=<>k=Ž©š#ÿlo`/¬Ç¿Ðݪh‚œ“v2OòÉ?[`=‘øŽî¾˜£ûTô’CÚÈzK+ñÚ¦O «°­g`*±Ÿ´žH|MwAl-è ’\ýñ·¿ÃXrKz­'9‚î¾ t(š”õ"¾ » î·¾±ÝÐ&¨ù-î‰Ý½뉼@}0…ÈäÕž;ä“GJVI¬õD"o¥»/""ÿ¦» ÇÅÌÜjy]?qÍ-ë ĬÇ9öÔS…4’I&ù$¥ÖãˆüÝ}qÒß ¤_œ endstream endobj 296 0 obj <>stream H‰ì×ÍK”aÆá¿!D7­ a$0H!7. Bpˆ´7®’JÅH$- L“Ô)ÌfаOPuáI0„ˆŠŠ2a~ŒŽÚ ‚<•Ž£gÞy×bÖ÷ûœ{8œ½=©îõÇogÎßѯuàP‡Â¹%m*mqy×äÔ¼uk~ü^Ϩ_ë ¦^®x¦gT'ÕLë8À¡°÷.öÀÅ^@:‰L/WÔ ¨Ò9…÷»_ŽÅwv­¥.îÁÿRÔ"uI¥^©]Ö‰€$`ï\줟w#‘‚+OTlý~øüÝ:NŠâü75ç Ej”u iØû{i)¾³Ûýr,§ð¾ê]Q3™^¶N”r¸ÿFmQgô8êZ¤.Y'’‰½p±ÆV¢ëµ Cyw3· ÿ\‹Y'J!܃RCÔµEQsÔëD@ò±÷.öÒÞTd±¬ª_=?WÔÚœ°Ž“*¸£n¨!zµE±Žœö>ÀÅ^€O„†¿J©í—®?ÏZDZÇ=x@}P+ôjˆzb8Yì}€‹½ÿˆmÅÛ{F² šÕùʺàÌ\Ô:‘%îAQÔ½ƒZ¡n¨!Ö‰€ÇÞ¸Ø ð›…¥ÕêúÐþ ÐÒùicsÛ:‘ Ÿßƒš»¦¯èÔµÂ:pJØû{þ495_\Þ¥òç–´_}±ŽcÀÏ÷ &®¹ëóÕ5Á:pªØû{~68Þ¿ Jo<÷Û]àÏ{PSÖ¬õáš»¦o0ÀÞ¸Ø ð¹Í톇o³ò›ôG¨®­D×­¿Ýƒš¬æ«OÖ¬5qÍÝ:`ƒ½p±™™‹VÖõ_8{á^Gïhl+nèÄùçÔ45SMVß«)kÖÖ‰Kì}HŽ_ Ý=ë endstream endobj 297 0 obj <>stream H‰ì×ËK”qÆñ¿!D!ÜÅ€"h +Á… %ܸJÜîŠ6yA™paš ºÐ’´ ŠÁE¡5 ¡*¡„ÂH™XxÃKJ^z"¨f©ã ç}_¾Dt÷¼ÏáÇáË×.]½£ßÖA{ѱX~Y§^DVqÛPtÎ:Nr5Ý¥/Õoë É¥9jšúRMVóµŽØcï\ìà˜Oß]¹vWªovþ‹uœd ü=¨Ùi‚úÆŒ¼°fjð ö>ÀÅ^þ¶±¹{+ü25«!%T§?ô¯u¢Ä ð=øk|š&Ôñqcï\ìà_æV®W?ÒÉÈ wŒïZ'J¤@Þƒš‘&¥yéÓJ«ú4AëD€ç°÷.öðCѹœ’=“ü²ÎèXÌ:NÂïÔt4#}”楩YÇ<нp±€Sív<|›žÛ¬ÇRQó8öiÍ:QéÔD4}ŽfÔÞ;ªyY'¼‹½p±€3Z]ß©­L Õ¥e7ÖßÙÚÞ³Nt!Á¸5ÍBÑ\4ÍÈ:àuì}€‹½œËûËÅ•=z5™-ý‘Ië8ñ À=¨þ5}…&25»dðö>ÀÅ^âžÉ*nÓÛ),^´Ž_߃ê\Í+¨¨U³°Žø {àb/ñù¶ûýnç›Ë9MzA7n>[þºiè||zªgµ­äj^ýk Ö‰Ÿaï\ìà"tžTß~îÇóÄw÷ ºUÃêY±uªyëD€/±÷.öpqÓ‹…å]zJ¡¢ÖÈðŒuœ3ñ×=¨VÕ­«gµmð1ö>ÀÅ^åÉàtfA‹TqeÏÔì’uœSøåT“êSQÕmdÒ:à{ì}€‹½$ÐÖö^ý½‘´ìÆ”P]mýàêúŽu¢òþ=¨öÔ¡šTŸjUÝZ'‚€½p±€„ûøy½¢æ±^Vzns{ïèþÁ¡u¢xùTcêMí)¡šŒ}Z³N{àb/I‹å—uê}å”t Eç¬ãçÙ{P]©1eS{êÐ:4ì}€‹½$U÷ÀxF^X¯¬´ªo~aÅ:μÕZR*5¦Þö­ÄÞ¸Ø @²mlîÞ ¿LÍjÐþп։~òÔ=ø»¢”Pw*‰½p±p’ êV:2 endstream endobj 148 0 obj <>stream H‰ì×ÏKÓqÇñ¿¡è"Bú" #=tÙ! ]O!D]¼„"J”+ca?ŒbxR"¥3" C Ñ#Y˜mÓéz…0>͹íàçûÕÏžb|ú|ÞŸ·ŸË›ßl6¼x=»ïèUýúýÀ®@.nˆŽÎÔCç†æðÔôBÉúòg_ÝÔSÅ꯿²àr`"g¤W37ゥôj¨Û:"ó‹‰"Åå̾:¨ÊÔSÕ§Ÿ Àkä>ÀD.މŗÛ;£šëªºžþðx2µV°¬øìë–jÔM=m>€wÈ}€‰\œôé˦–!M÷‘Ó7žŽLo-(2ûª×-ªƒúØ,ïû¹8,÷elÎû²+8ûªQe‘¯H{¹0‘ €Û’©µî±ªºMz{g4¾´²¹Ÿ7ûÚשvT©zÝòïÉ,"÷&r¨ó‹‰¶Žˆ†½¦¾ïÖý·éÕLnöµÖŽöõ_Õ¨ÒïǰˆÜ˜È rLLÎ54‡5òµÁPïíWZèWk-´¯S¿À:r`"€Jó òáЩ~ þæ?­µã÷£x„ܘȠÒüZN]êÙìßÇ ~µÖŽßàr`"€Ê‘Y߸ûøýÁ“×4õç†r¿ÚѾNý~ ëÈ}€‰\*ÄÄä܉³w4ï3ƒ/'¾æf_kíh­SÕøýLv‘û¹8ïÛ÷Ÿç/>Ѥ×Ô÷ >|—YßÈþ?ûÚѾNµ£JÕûýd¶û¹8ì÷Jº{`¬ª®çÀñ®ËÝ#K‰?¹£­³¯SÕ¨Rõº¥»~<€]ä>ÀD.®zôìãáÆëð`ëðçÙXÞév³¯JÕëHwÕÁ«Çð¹0‘ €{¦¦šZ†4ÚµÁPtt¦`MñÙ×-ÝUú¨›ÍÇð¹0‘ €Kbñå¶Žˆ†º:ÐÛO¦Ö¶«,9ûº«ê£2õTg;Oà)r`"7˜Ÿo®>stream H‰ì×ÍK”QÆá¿!D7B`"ˆ  Ü ÑB7BB à&hØ(‰aˆI i¸¨!l‰º¨6-È¡”QÑB¦üÈ1aºWq çý8çü]Hø>n* ^¿ùxîRþt=ï¦ç–«[†”åæö±tfã4Ÿ•}ÕTeý¾º¨—¿a¸Äݘ¸ @I[ÊnÅ:ƕ⪦ÁD2sú=d_õÕE_©£ú?,÷¸ûw(Q»¹ÃîxRù-¯í‹Ïïä‹úÜ[öÕE½ÔQߪ»f(êsÎq÷&îPròÇ'# õý ïõ®ë›9Eüd_ÕWŸkM¢y<àw`â.¥e6µRwí±bÛØ6šZ\ó\ÇöÕ]3¨ˆæÑTžë°‰»0q€Rñéó×ÖÎI¶²aàÉów>«•}M¢yTJ³iBŸÕ„»0q€èû¶wtg`¦¬¦W?ú‹þé¿f€Ùc<!áîLÜ âž&Ò• Êikçdvu'¨²g_³iBÕÔ´š9¨²‚Åݘ¸ @d¥×ÛF•ÐÚ«#³©•`‹‡”}Í©iUY“kþ`‹ð»0q€ZßÌÝèN(›õý# ùã“À[„—}M«™5¹êk íx žq÷&î)ûùøð|ymŸ‚ÙÕój7wR£°³¯É5¿Zhm¤½Bj (Ü}€‰»DG"™¹xå¡"ë_Ên…ÚËNöµ…vQ#í¥íBíà4¸ûwˆ‚tf£¹}La¬nz9óÁBG›Ù×FÚKí´£6µÐÀ¿p÷&îàÖö—½[w§à u÷Œ¾ýqôÓN_ËÙ×^ÚN;ª©öÕÖvúø w`â.®äO~ÿéæí©Ííï6»;ɾvԦꫭµ»^Àfwî>àOÜÀ‰é¹åšØ#¥¯¹},Ù°?€Ãìk_m­îz½ƒý€³Œ»0q˲«;±Žq宪iðÙÔ{Wc8Ͼv× h½†ÞÄÕÀYã<û€Há.Öìæ»ãÉó—ï•ÕôƇç÷ò‡‰Böõz½†ÞD/£÷q8 pFD!ûþo¿ã©N4 endstream endobj 98 0 obj <>stream H‰ì×ÏKÓqÇñ¿!D/B`"ˆ  $ÕA/B£ AèEQÌ, ©x¨‘ ¶‹¨<˜Žr’!NÔ’•?§+{A^ ±Âæû»íù`Œíö:½y~$ƒ¦Ç¯Î]¨Ó·õÉcu}óÖý!ݖ̦VïÄîÞõ"HTÃcsy—ꢖUuO—­çH6¼ĉºEõ¢ “[Þ¡ž±ž f6´âr÷êŠæ”¶ùüAë9’ïAq¥†QÉèΨjÔ6Ös lDvj=þ´¼úŒ‚FOçøÖvÔz€¤Å{@¼©dÔ3ª]Ž:Çz8TìÛ÷®¾É¬¢fÌk5Ï—ÂëE’ïAgCU£¶ÑÁQç¨v¢û1ëEà,£ù«Ot'K*½©Eë9RïAgI…£ÎÑÙQó¨|¬ç€#,|ü\Q= Û˜]ÜÒóìµõ)„÷ €³§ÚQóèø¨Þød=Ì|ÙÜ»×2’žß ~è¯õ"©…÷ $ôÎd·¨Ä*ªB kÖs¤"Þƒ ©TAºB*¢§¾ië9pFS‹%•^]¿‚Ë]£yë9RïAæÔB*"Ý"Õ‘ÉzÄÑR8â¾óB/«¨¹«o2º³^ ¥ñà*"u‘êHéz­O½d½þ³­í¨§s<£ Q‡®¦îåFdÇzðà ª#5’Ž’zIÕ¤v²^ÿ‡ÏÌ-ïÐ}s¹{gC+ÖsàïAN£RR/é4¿Ø®‚²ž§òæm¸¬ª[7MïÁ¡‘wÖsà¼8“ªIí¤¥Žš.[Ï€¶º¾yûÁ°îXfaS«wbwïÀzüŽ÷ ÇR;© ÔQ:Sj*••õ"ø+ÑýX{Oàçùºyw0¼úÕz÷ ‡SG©¦t©TVzª²¬ÀI†Çæò]tµÊªº§ƒËÖsà$¼$5•ÊJ÷J•¥Ö²žÇ-¬]¹Ñ§K•SÚÖ?8c=þŒ÷ €¢¾Reéj¹Ü½ê.ë9pd#²Sëñ§åÕ§ç7x:Ç·¶£Ö‹œÂq9½l endstream endobj 150 0 obj <>stream H‰ì×ÏKÓqÇñ¿!$/ a"Ø¡CtðP—@:uð`A¢Ìj ¤ ) # ¼ˆEaôA*‘¨CZBQ±0¦¹Ù¦½aQ:§~çûóùð|Þ^{}öâ‹‹ðÉÝÇo¶ì<£Oë @Èò……®O«êâš[cË@2•¶NäÐöÕ†:Qõ£–Ô•u" dîlàîPn#£ok®hhú}öÞ:Îo®m_Í,µ¤Æ¬ãÁrmû[Ü |’©ôác75±êúDwÿx¾°`è·¯~Ô’ºR0õ¦ö¬rpûCÜ ¾g²­‰{•±öŠš¶çïèOëDÿrvûêJ©7µ§¬ðš³Û˜à.‘ëœØ¾§CË:ØÔ7™übgyŽo_½©=%T“êÓ:Ç·ØdÜ BcvêÒ¦b.ß~ðÚ:N1^l_ªIåT«êÖ:/¶Ø4Ü S§žÔšªêâ=c¹ù¼u¢Uø²}5©>ÕªÒªaõlð›/Ûlî°AsÙŸç;nÝuNSj>5ôùkÆ:QIüÚ¾ZU· ¬žÕ¶:·NøÊ¯íÊ»lÄ­á—;ö]Òˆö¹þbò“uœ5ðqûjX=+¶:WóÖq/ù¸}@ùp€õÑÿ&{¯ùû¿‰¿ÛWÛê\áÕ¿^Á:à·(î°VŸ¿fšO i8[w‹_}4—ýih=¼Þ¾:Wóê__Ao¡±NxÃëí"Ç]J—›ÏwöŒm«½ Õ=98õqÚ:Ñú°}õ¯WзЋè]ô:Ö‰°}@„¸ @‰†î¿Š¸¬½ì>Ôõôù”uœ fûz ½ˆ¾‹^Godp]0ÛD‚»¬j2ùå`SŸ–²}OGïà„uœh¶}½‹^GßH/¥÷²Ž¸+°í%:~vø{&kpw(B·C¤¢¦­2ÖÞš¸73›³N™ð¶¯×Ñé¥ô^Ü}`%ám(…~öÕõ‰îþñ|aÁ: àî°,Ý ] Ý ¤±e ™J['ŠX¨Û×K齸ûÀJBÝ>PÜÈèÛÚ†+úñëóÑ“wÖq‡p€ÿéR,] ]ë8eöö¹ûÀJÂÞ>PD¾°ÐÝ?^U×[’©´u"À Üàoºº…î…®†n‡u¢r ~ûÜ}`YÁo(îÛôãg‡+jÚ*cí§/ÞŸ™ÍY'ŒqÖæ—ÏÜ.… endstream endobj 99 0 obj <>stream H‰ì×ÏKÓqÇñ¿!D^<Âd EàÁƒ^‚ÑɃc ˆàAÈŸc Dš"¬@1Ò`QA,’‘:¤àH •…2ÍM7íç´mo·ïóqøž_—ï›ççêÊ9ú^/Þ{øB_ë!ðONN“]¯>»»‹Ê;[º¦ý¶^ÀÑRéËàDÄåñ+¨¼¾ÉèNÌzÜïAùHÅ¥îÒùRƒ¼[QY/àDóá­Êº!Ý"}ëÛÖsàÆxÈ_ª¯ëS•YÏà ј×7©ûSZNDRéKëEp¼ä55˜JL=¦Söôù{šõ"îä4Ù˜+vw•w¶öÎÇÖ‹àöx(ê1U™ÚL…¦N#ÏdÉXh­¬¦_íTß4¾=°žÿ‹÷ €‚¡6S¡é¦©ÖÔlÖs”•õÝê†]wíÀ̦õÈ Þƒ Œ:Mµ¦Ë¦r[^ûa=@ÞÛÝ;jl 骸<þÁÑåäyÊzd ïA…Gµ¦fS¹é¾©âÔr֋䥳ąx©¤¢GǤ¹cjÿ0n½2Œ÷ €B¥rS¿éÄ©åzÕuÖ‹ä“Ó_<~©òäÙÛ/?­ç@VðPØTqj9:uêÎz€<ÀÝà¼8ŠN]§s÷ÈûF¥g=Àµoî˜Ò­(©èñ/%.¬@vñàê:ÕOGO½§ê³^àIž§G—]¿NDc[hwïÈzäïAŽ¢ÆSééîݯìSû©­°7³°é®Ðe¨nYYßµž¹Ã{€©÷T}º~*À©ß¬ç0³=¨o×5(«é ­YÏ€\ã=À±Ô~*@Ý@Õ šÐz€œ:Ž'Z{g‹Ê;‹ÝÝí¹“Ó¤õ"0À{€“©ÕªA5aK×´úÐz€¬K¥/ƒ‘Òª€È뛌îĬ€Þƒ TêªU‰jEëE²%¼º]Y7¤ÿ]ßùð–õ0Æ{þR^WâÒçïÖsdXt'æõMêwyüÁ‰H*}i½ìñtž? ­Q¸ó endstream endobj 151 0 obj <>stream H‰ì×ßkÍqÇñ¿A­´RÊÍ®hµVKQ¸Z¸ ¤Ü,ФVK‰$6‹Èï¥Æ.LÊ,ëX!sÁ)~Ű%«iLÈíçaÌ«N-IÇÙœï÷ýý|>ÏGÒ”ó®ó}½^Ûä$|5<’Ý{¬svÅþ’òúº†ŽĄ́õEѺy÷Õ¬ûô·õ!ÑÒç¨OSŸ©>Y}¾ú”­/Œ’} ¿žÞ«6¶* eKœo{l}`‰]D[ EP´ÚësâTöÙ}`JPÙòKuvWTŸR"–¬;ó¨ëõ9€ vSÿk”-‚vÁúœø˜}v˜ 2û@ÙoG[Òsª(›v´õd¬/âÆ. Xê|5¿ž­€¶@‹`}Q¬ÂÌ>»„™} ¿Ÿ†¶íIå~$8Ü|olü»õE@|ØH=¯¶ÏýR þ× X_d äì³ûYÈÙG° ìù'/–­?«€Ì_~¼íÆó¨¯‚]@hÚo½TÏë±Wç«ù­Ï1CöÙ}„‰ì#4¹Ý/üÿ_éèÊýœP]sîYÏûè‚]@8ÔêêöÜÏÿj{ësŒ‘ýv¡!ûÇï»?­oÉ6œ¼SZÙ¨ïݶ'5˜èB Ø„@M^»ïºuu»^=o}‘=²?…ÝGPÈ>BP”ÝïÈÔl¿ª™»ð`Sëýì·‰¢ß $»¿©½Õájr=çjuu»õEIAöÿÀî#d~+úî§ô-^Û¬W«¨>u;ýº(G‰Â.ÀcêíÊ•MzÂÕäêsës’…ìÿ»ï‘}x,ºÝ?ßöxÞ¢Czå5[.ôô~,â+æØxI]­ÆÖ³­öV‡[Ÿ“Dd?v#ûðR »ÿuh|ס[³+ö—”×ë ý3ŠwâÇ.À3Su­?Ôud??v¾"ûðLÌ»ßûæóÔ/ž-—NüøéÛ1`à5³úY´ºZm}N¢‘ýB°ûðÙ‡O¬vÿvúuÕêÓzßÅk›Óúb{_ ìü 6V'ëaV?«¥­ÏqÙ/»Ÿ}øÁ|÷'~ülj½?wáAݰ¡örßÛ/ñß»×õdÔÃzŒÕÉjfõ³õEn ûÓÂîÃd®KÔîfFë:JÊëK+NÞÉÌ »w©uÕ½j`õ°ÚXl}‘KÈþ °ûðÙ‡»»ûÏzÞWלS²Ê–¹˜zj}0=ìu¥£K­«§W ¬¶>Ç=dÆØ}8ìÃQÉßýTgwùŠºpÙú³ºÞYŸŠ]€sÔ±jZ=·j]u¯õ9®"ûÿ‰Ý‡£È>œãÐî?Ü|oNÕ]»y絟†¬/þ]€CÔ«[w·ë‰UÓªoÕºÖ9ìoÙÿ%ÀÍk™ endstream endobj 100 0 obj <>stream H‰ì×ËK”a†ñ¿!D7®ŠDPHHµPÁÔÂ… H´tŰƒZ`ºPq¡ÒDØ@ŠJÔ€ fJ((戆6å!ÇFí£E¤¨hÏ|Ÿ×ùw÷æ}¹ÞÝ]ûˆlï4µŧV»XšWÔ1=»l½À X[{kûc“Êc3·Q§8)«®«oÂzD#Þƒp5¤JR÷ä¥ÏÔ–ÖsJpñû­;>Üó)•šá­ˆõ"ˆR¼à`*Iõ¤ªR·¥ s.²^`_?6Þox·w` Kº¿¬Z/€¨Æ{CU©¶Ô…©ÎTmª9­øÛËž.?Ò9ÍÌm|?´žÀ{O…©ÎÔµ©æô½þ`=Ào£“ YùÍ{g³Ó?f=ƒ÷ •jSÍ©ËSý© µžœi+¡¢ÒW:qÉÞÚþµõ°õ"pÞƒp jN•§úSWhaI—ŠÔzpæ„·"õ-ñ©U:†ù·ŸÏCÖ‹ÀyxÀ±©?U¡ºEU¤êRÕ©õ"à¬è L%_­×éKÏi ÎXϧzÑ=®»T_ë!àTjQ©îÒ¤¬:5ªõÀå&§—² ÚtâÒª[}#ÖsÀÙºß~Òª¯õp6u©êT7ªJU½j=p¡o«›w«{b“Êõ§ú×z8ïA8)b5ÆSF¬'«©}(!­ZÑ’]Ð6=»l=\‚÷ œ,•ªzUW«ÚUÙÞ±^8[`p&=§Ag*åúÓÞÀ”õpÞƒpT­jW]°êXÕ¬õÀ‘æ‚¡¼¢£øÔªú–ÈöŽõ"pÞƒpJÔ®*Xu¬®Y5íÌç¯Ö‹ÇX[{kûã’+b>stream H‰ì—ÿkUÆÿ†t’‚`)ý NÇ`®¦?ŒðB3EHPR“„IQ£mMצcßPæ—¡›ei£6µ/N³×̶H7ÃÅÆÚä*®ÉtînSûèY‘¡itï}Ï=çùpõ§ç¼çyÞ÷>wîˆÿÂÍÁናS6?1=ûµ·?]é·V$Ä£ùúû6ËŸÖB„x4ìÕµï~cÙ´ì[¶®µ¢ÇÙGvnéñ`c§µ"!þ Ýè‡wÄQö#Åßï~ý\¾EÙqŠ&×w¿ñ\÷¼¥;ÑÏ“±ª*_AøÝá~êŽ]H ”aTö*ÛÕZŽGPö#Ë_w?ñÅk-Gˆ‡¢ì —Co¢=95Êw¿â£Ç'çñ. ‰9™yGÂC#ÖŠ„ø'º ÂÍ´´…+ö`Ñ©s·î¯ûÅZާPö£.Å« ßžm½d-Gˆ ì ×BWzkÓ—ô&,J‡Ú¾ï´µ¢ÈpýFøõ÷jÇÞ{¯I³óõ{F¸ ÝáNzûÞÌ=ÌQ˜œ—[zœ]j­Èk(ûQ¯âX|‹{ñ0N¶V$Ä}(ûÂÐ’èJ˜“ÞD{òÞÝïøí÷´%;xAžYóK[ÚBÖŠ„EwA¸‘[··UŸvŽÂ+ë?eZ+ò&Ê~TÁ·¸— ãäò½§pµµ"!FQö…Û %Êœ¢ôÂâÞ¾ûõ §¤mq^vñÚ{û¬ ¡» Ü{2%cžL]TÑp¦ÃZŽ—QöcÆÉÌWãmk9BÜEÙî6D'rÊ-É'{räÖíüíß=™ôo=nfî¦òüµ(ákt„Khï¼ê…És v}ò“vc´QöcNÆÏ¸ši/\³Ÿ[+~GÙn€ÝH¢ áFšýÈowÿZÿàò ÇÌÈfO§Ô=o­HøÝa+ñ‚o8 ‰9ü…Z+òÊ~,qLŽÃñ¹L.lQö…9t>ä¡ùy%¶´…R2¶9£H]TÑÞyÕZ‘ð#º –ªš¦gž/Ä„ ×ìkm¿l-ÇG(û±‡ãsÆ>yNη–#|в/ ¡ïÐzœúC¢ Y+rµGÏ?õ܇ÌdÌŒìå^ë´V$ü…î‚°¢áL‡s’eõ ­åøeß ÜŽç>þ'Ör„ïPö… tš}ûMšO²Vä.ÂC#YEõãfæ2ŸñÉy%•AkEÂGè.ˆØÓÕÓ·rcsÊ÷žbZ+ò#ʾ!xçã>ÁŠÌÏH„µ"á#”}{h7tŒGß¡õèî?ŒÞ¾—WW3(ž)i[¾ ¶[+¾@wAÄ’›ƒÃ¹¥Ç'Ü; ë²êØ{ÖŠü‹²oþ'|A.®ß[+¾@Ù±äÄ¿Òkœ‚³`uµîþãÐÔÜ=k~©3´ôe»»zú¬ £» bÆÃ禥ã·ÀŠ=g[/YËñ;ʾK $‚oA:Ȉµá}”}h1t§ÔÐnè8ÖŠâŒ='¦lfzcsÞxÿÐÍÁakE³è.ˆÀ/ÞyKw:¿xk¾j¶–#î¢ì» rA:ø"$åç–k9ÂË(û"ÚÐ\Ög¢Åà4MåFkEñ “ÌÌ;’ðç$wî?c­HxÝUBWú×eÕ9{¬°â$›ÍZ‘EÙw¤ƒŒ¾ ©!;ÖŠ„7QöET¡³8{ŒC—ÑÝÿÿtõô¥/ÛÍHy¦¥75w[+^CwAD‰ðÐHIeÐ9 +7ְͬ‰ûPöÝ I!/|²S´«Y+^CÙQ‚ž2=½Ø©-ôÝýÈlì|v^‘3ÞŒUU¡+ýÖŠ„wÐ]Ñ îØ…¤@ÖJ[²£ñ\·µñ”}7CjȈ‘&k9ÂS(û"âÐMh(NU¡³Ð\¬y–’Êàøä<朘“UT±V$¼€î‚ˆ,­í—¬®ÆTSçn­ªi²–#вï~H9â3½ôê^’e-'îùC€· € endstream endobj 101 0 obj <>stream H‰ì×ÍKTq‡ñ¿!B„ Z Bå"‚Y´HŠ6‚Pˆ´±"„œDQ‚Ô&#ì…Þ`(ÁB]äP„ÔŠ(¦a’M˜::£ö[$ôb¦ž{½Ïg!Îî,~÷ðœÅEG‹uôæªß¶çBa¨¹'1b=à cã“¥çéëÈñW×EºfRië‰À?í×îÕ_ëAÀT¹j]¯v¯êW l=`ìçâÄÙ‡|°™¸`ó©xÕ½Z¿j`•°zØz"ÀF¬£×lÔ·PjîIŒXžÃ=VT¿j`-aõ°ªØz`S½ë ·èýï:pénìµõ8àQ܃`K%¬Ö*V«­Ç6ÜDrút¸5+¯2;¿*ÜÐùmjÖz"ð.îA0§V«UÈêdÕ²õDÀ†ÈÌ/4Ýz‘[P£ö8~êþЇ/Ö€×q€C¨UÈÚɪe5³ÊÙz"`=µÇü‡›ôÂE‘x÷õ8€%܃à(êdÕ²6³ÊYýl=°ß>ZzG¯zÇÞÚk÷^fæ¬'üÀ=N£ZV3«œµŸUÑji뉀5ú:™:Wûd»ïbV^噚6ý´ž°÷ 8ÓrH«¢ÕÒú‡†ëÜŒ¾Ú¹¯N™qääí¾ÁOÖã~{œL­–Ö¢VW«®­ÇV%Þ=(ŠèÝú‚48÷ 8_{|@]­u­ÆVi[üÖðh²¤<ª·š[PsåÆóÙ¹ŒõD€?áWPW«®ÕØZÚêmU·õDÀ 3©t¸¡3;¿JO´¬"6>1e=àï¸ÀE&’Ó*mímU·Ú[n=°äAkb÷ÁËz™Áâ–7}­Ç¬÷ ¸Žz[Õ­í­W‡[OÓk, 5óÀ¥¸À¥¢moUàÚáªq5¹õ8ðœ±ñÉ²Š˜^`v~U]¤k&•¶žðϸÀ½Tàêðµ6¹Ê\}n=W¥«Õ­'ÂVëèõõÞE‘žÄˆõ8€ÿÂ=[ƒÊ|ÿ±«Zéju»õ8Øß¶rÇ- endstream endobj 153 0 obj <>stream H‰ì×íO•uÇñ¿!¢‰›M·\Rб1œÌl‹µx@¥c¶a³Í¼å¦5S=‚2™æÝuLE­§–ƒJ`™7óTÄ´¡ÃÁåà{çµ| …Üžïuëócê£Ïüý>¿ïõ½wOþñÍ·-OLËç·u‰á¾H^Im|R—*!¥hSEu¢Øw«'¼tí¡¸éùüŸ'¦*kÎ['ÏÓ\±r³óöŠÂ£ … Éë×}v’÷Ê:‘ FÝ÷zD›èÍ¢_´Ì:‘xžº/c…M„}„ëÄn²xõAÍýh µvÌÊÞÆ>?©Y[.µ´['Ó\Ñ‹ôl¯j˜<3È]ÊY¾7Ê:‘<žºï!tŠfq^|zÑ5gH·Œ “œ¹¹æä/ÖqdTÔýØ@é#GI7ü©Í:Žx€º/Cıtí!v . û[†u"ªp_$¯¤6>©€³KH)ÚTQgH\MsA†¢íZçÂUÕ\•I©KwÖóÎX'’ÑR÷c}¤•t“¥§´Õ:‘¸šº/CÁÁÁUa§`³ÐÜ÷¢öÝYïìâùyö¥’ºÆVëDâRš 2¸;½w?)ûnâý¡›WÃÛbHƆºcè& åLik`ëškH\JÝ—Á±5°;8KÛ„æ¾×5]¼:-ãsç@3æ—·]ë´N$®£¹ ƒØôÂs÷ß—sÊnþË:ŽŒ%u?&ÑSÚÊÉÒ\úkGÜHÝ—ÿæÀ¾à,¼!ìÖ‰dÌ|YynRêFN6>©àý¢cwzïZ'Ñ\ÿÄWeæÛ;ôUÃÔýFgi.çûÊ[tÙ:ޏ‹º/b;`G`Sàn°5°;X'’±Ç)/Ï?òä¿§\±¿Ñ:‘¸…æ‚<äÆÍžÜ¼nÅÄ”¢ ¥§y=¬ɸP÷cÍ¥¿´˜S¦Ñí7º­‰[¨ûòÙ¸l ï­;¢¹ÛÚ®ufÌ/ç¸ùyáÕ/š.^µN$ö4äp_¤tg}bZ€+±pU5/†u"Gê¾ÐbºÌAÓkÚMÇ­‰=u_``#pVvÍ}ÿ8ýýoϼø©sô¯-Ú}³ó¶u"±¤¹ î@ræf.Cúܲú¦?­ãȸS÷ýƒFÓkŽ›Ž;õ«u1¦î øþ}Ñng`/8U²N$6UÔ%¤qžz¾0¯¤6ܱN$64¤9t}Î’=\ƒ©³‹wU7YÇ‘(Q÷ý†vÓq¾Ózë8bFÝ÷9¾ùùòçûŸkÀ.ÀF`H,uu÷.Xy nz>÷!1-pøÄeëDb@sÁÏx> |ŸT0!yýšàqþjH¢GÝ÷!:NÓé;­ÿ`ÃWª¼?©û~Æ×þÓ3>æðýÏ G@¡ÖŽô¹e\ ~R³¶\ji·N$Q¥¹àO‘þíU “g9ý7ß­ä°N$Ѧîû}§õœ>/ï¯u"‰*uߟøÂç;ßùàçË_s_uøÄå)éAç’,Xy «»×:‘D‰æ‚=÷ÇŒ7¶rڳW¬ãˆ ußçè¾óqÈoÞë8=ê~lú[€ªw [ endstream endobj 102 0 obj <>stream H‰ì×ËK”aÅñ¿!D!\ H¡Am\()à&‘07F ”—’‘¡‹bHy¡4˜•ÙU”Ðf‘‹†hH“ŒeÄÔµCm‚î53¿×™ïg1èîÀóò<çloÛòæ Ë{ví?—‘çéöúŒÓ¢áÞÓ׺ØõkjéêêºØÕÛÕÞ­ã A,W«S2ëS]µž¡O+aëD€è`@‚QW?{qX½]í]^MÞ:v°ÈæVgßDzŽ[m¡´ª?0½`MìAHHêíjïºáÕäÕçÕê­açy4È.h×W¤_ým}ìAH`Ož¿¥Ïã¦J«úõå¤ç¸;û&"›[Ö‰1Á€Ä¦&¯>¯V¯Û^ _=ß:íÓJ¸Ö3”êjLɬ¯n\ ®Z'Ä{’ÁÒrHÝ^ _=_m_ß:œ¨ÛëËÈó¨–÷øsÖq1ǀ䡆_TÑ«k__Íß:äÅäûÜâ}®üÖáWÖqq€d£¶¯Î¯Ë_ý_+À:ŒÍÌËj¼úvg_¸|c4¼±Nˆö $!uþ¶®1õ=ÚZÖ‰``-´ÑÒñ,-«IŸAeÝÀÇùeëD€xc@ÒRÿ× Ð+ E ] u`ñsgprßÑK:ýÃ%×^ú?XÇØ`@’Ó8Rz]oÖ6‚uÄœN<ÿÄMN°Í|¡] u AKA{Á:bb~q¥²n@§œ–ÕÔpåáZhÃ:À{ð•ÖÁù¶ÇZ z´´¬!jÂë‘¶®±=šu¸e5Þ™Ù u"€#°ßÒRÐ^ÐÓ í ¡aÿK¯¼+¿Ugš[Ü12>eà ìAÀ÷Æ|ï´ô@hGðFì\þÀ\QE¯Îqï¡–n¯Ï:Àq؃€ŸÑ‚ÈÈóè™Ð¦Ð²°Žƒ¿°´:Ý|7%³>ÕÕxÆ}_ÿZ'8{ð ÚZÚZÚÌ ç‹lnuöM¤ç¸õ¾?y+0½`à\ìAÀoiS”œº­÷B+C[C‹Ã:~ld|ê౫:©ì‚ö#o¬ãî³ÝÇ endstream endobj 154 0 obj <>stream H‰ìÖýk•uÇñ¿!°…5PP0ÊéXÌ£ù@?l„²’D&ˆÂ&ÆvœŽ5gÍ¡ÌI>0]N¤¶f¤G©<(i“ælÝP±M4]ÇöàŽNí­7¤ÙÔ=œãuß÷ù¼8„EÂ÷u}¾Ÿ{÷žäFW_NÞÞQSó_x=bzqíÁæ'þ¯÷úïÜ][þãØi¶e\òš¢Í?ñ_¬‡’˜ûáç³|qþi=ˆ<m¯/Z±‡/ž˜VT±ë¸n<žéö… H6d ¬'’çA·?¸qú<­ž/NççëÝ—Áè ÷f/ÛÍÚð›”Q µZO$±¥w!Nt÷De‡R Ç$äê¹të‰Ä˜n_¤™@2PI ²Âz"‰-Ý~œ ÃÓäJO·×»/CõûÙ+ÉYz3{Ë…?þ²žHbEïB<¨úæ·É³Öó¡³–loi»j=ޏ‚n_E2¬Y±sßIëq$†tû¾GoÏxw‹Sã§g–Ñê­'«®kLL+b—F',_UÛݱžH¢Oï‚¿54µÏ^XÉ'NÎÚXwèŒõ8â"º}ù?R‚¬`1È ÒÃz‰ ݾÑÕiìôv>1ž&o=‘øAäVÿÇk¿ó`¯^L)Ü\õ‹õDezüêÊŸ]|²;>uÝçG¸eë‰Ä]tû2 ²‚Ä 7X2¤ãÊßÖI”éöýªb×qº:—Þ¾²p¿Þ}‰.Šå¼w²`ü^»áhÃEë‰$jô.øÏ;ÛÿÖ¹V×q¿Ö‰éöå)È Òƒ !IÈRÅz"‰ݾÿÐÌéçNQ§±ëÝ—ØytÙ2s¶iÙüAï‚ÏÔ:óÚ[_ðMg/¬lhj·GÜK·/ÏD†$ì ©òífëq$:tû~BÏZ²Ý)ç´tººõD*«O¼ôÆZ¶nLRÁÊÂý7ûn[O$#¢wÁ7Nµ\v…)sJkꛬÇ·ÓíË ‘'¤ ÛBÂ3ÖãÈHéöýN§ó5iæôsë‰$¾t÷D–¯ªý`_ž±®º®Ñz">½ >ÐîÍ ÔóR e‡¹Pë‰Ätû2x¤ ÙB°3+ò¿#s¬'’áÓíûÝû•E|GÚ8\ï¾X¹Ôž½°’Uä7=³ìäévë‰d8ô.xZäVùŽc‰i÷…Ź5\¥õDâº}*†œamÈ’‡ü±žH†C·ïiômZ·S¿g½W©w_Ü j”Qâ¬eö²Ýá^ë‰dhô.x×—:oŸ/}AEèÄëqÄctû2<¤ ™Ãò¤¼]N Y#C¦Û÷(:6MÛ©Üto]Ÿ¸MéÖиä5ìçØiÕ¥Áþ;w­'’ÁÒ»àEçÎ_›¿´Š7afñ¶šëqÄ“tû2$ùà ‘E-mW­Ç‘!Ðí{½ú³ A:6޾]²åˆõD"»ÑÕ—“·wÔÔ|vubzqíÁfë‰dPô.x ‡öiñž~üµžH¼J·/#¤8ò(ݾ·Ð¨éÕ|2:6M[‡&îwîüµÔy›XZ~ü¡íâuë‰äô.xȶš† 3ï? ó—VqkÖ㈷éö%*È"‰]"¶~ý«õ8òlº}¯ EÏxça©ni»j=‘ÈÔlž˜~¿µŽššŸ“·÷FWŸõDòDzPn žk²žH|E·/±@R‘W¬ÙE‚‘cÖÉãtû®EO¦-;µ™þ¬w_üääéöé™eÎzÏ}륎°õDòÞwª©oš2§”O“µdû©–ËÖãˆéö%vH-²‹›>stream H‰ì×1€0A A$®Ò"3 )€™Û-¾þöæü¿q^Û~<ûõ^¥šô @“hÒƒMz I4éA€&=Фšô @“hÒƒMz I4éA€&=Фšô «nLJË endstream endobj 103 0 obj <>stream H‰ì×ÏKÓqÇñ¿!B/‚P2†Tè2BH/‚B‰@Ø%ˆlIb(a²*ä Û¡P5²A8Âá4DE3Yø#gK{‚A¥ÛÛï÷û| ¢·×>;¼y°ðòõô‰³­úm=pÜÄgý5a]ó—Ä'¬çà7sŸ¾4´ éÛ),k?z›ý±o½àô àï©2"ß©8t;TjëE8ØÚ΄ºÇ |m'ÏÝ †béëEÇ ÿJÅ¡îP}¨AT"êëEÞ5øìCqe§Ny ©ÿãôªõ€ÃЃ€ÿ“š[Sƒèˆ¨GT%Ös<'‘\ªªïÕû—îNYÏ8=8 •ˆzD§Dm¢B±žã «Ÿ7/_{ª7?í¿s7òæÛîwëE§¢‡”Ù˪JÔ&:(êÕŠõ"×Rúýzê+7žóÔ€C¢GBmrõæ°nŠjEÍ¢r±^ä6ãSg.ÜÓ WÕ÷&’KÖsn@Ž:Eµ¢Ë¢rQ¿XÏq‰ÉÔJ ©_¯Z\Ù%­ç܃95KIu—î‹*F-c=ÇÁ6Ò;ÁPL/Yàk ummg¬\…ä‚ÊEý¢ŠÑ•QѨk¬9Lf/Û30^XÖ®lhZ\N[/¸=ÈULc0ªC£®Qݨq¬9ÃH|Ö_Ö»UÔEâ Ös®ErME£®Ñ¹Qã¨t¬çk3óëµÍƒz«¢òއOÞ[ϸ=ȾhB£££ÞQõXÏ9v¾nî^ïxuªô¶~ô‡þµ^p?z7$ÏŸôEEåºÈµÍƒ©¹5ë9¯ y63¿®êÑõQ©ƒ¬ç‹O,TÔEô¾‹=#ñYë9o¡&Ô>þš°njHMd=ÇÀârº1Õ –µ÷ Œgö²Ö‹žC¬¨€ÔAª!]"•‘úÈzQžlmgBÝc¾6}ð–ÖéëE¢¶TCÁPLÇH}¤JR+Y/Ê­h,YRÝ¥ÏhêŸL­XÏäÜO?hÎ endstream endobj 155 0 obj <>stream H‰ì×ÿO•uÆñ¿¡ÔÒåæV3~h&Š,f VØ¢­œ›l¹ÉÖÔV36¬%›œPQò%’NÉ"+,Îp’â,ÌŠt,6‰°!ÃÑåjï|œýP¦q8ç~Îó\¯1WýÐî=~î뾸qC"©ñÛÞûßÁŸÖƒÈ-݃©™Õü¥,IÛl:k=Žx–v_"#ÇxfdÉf=ŽÜ¢Ýw•Ëã¡ÍÛëçÄçó—²0iWm°Ëz"‘Ⱥ:1•SptîÍ7ÿÐ;«kÛ­'ÝÛ’t.BqU3ûb=‘x™v_¢€#ÍÈ4Û¦·¿"å¬'í¾‹Ð„í Óu÷Å?8k²öóøùyì™÷Oÿ0`=‘¯é.¸AhrúveÚ˜[§Ê$Q Ý—¨!ÓH6Þ)GÖ©ôÚÒî»A{×ot`§ ÓŠu÷ÅŸZ;úo/BFvÁŠî‚¹`ÓÙ„ôrþR3«;º­Ç¿ÐîK”‘o¤¯ŽÄ#÷¬Çñ/í¾-/½×)À4aú°õD"ÆÊ´ÍO,`#æÆço+<šœ¶žÈwt 뻘¾áß?.¥äЗ?Z#þ¢Ýd‰ÇÛ#ýzz‡¬Çñ#í¾Zî›E4^¾?í—l=‘ˆ[\mÞ^?çæv,ZYX첞È_tL\½²5ÐÀQXX(;ÉXO$¾£Ý+$¹Gú‘$!yh=‘¿h÷MÐoi¹|y/½Ww_äŸúúGV¯ÛËšð³"½¼§wÈz"¿Ð]ˆ²ék׫>þÎ9 ë_;ÌË·žH|J»/¶H?2GHV~tšl´žÈ/´ûQF§]ñB…Sq麺û"ÿíDË/‹W;+³nÓ'—F¯XOä}º ÑÄ Oʨäƒ?ùâž–öóÖ㈯i÷Å HBò§H6’Öãø‚v?jè±´Y§ÖÒoõÂEîÑôµë…{¾y0ávgÞ²ÿ̱ÊËt¢£¯$óÕZ>õÃO}øé÷zÕbN»/.A’Šd#’òLZZOäqÚý(pÚìË|j:­Ú¬È ü16‘õúa–ˆŸG’‹êÿl=‘gé.Dù­¢¯9sãó·ã_­'ù‹v_\…l$!ÉIÒ’ÌTTFŽv?Òh­tW§ÄÒfõ˜EÂÑÓ;””Qé,Ôêu{ûúG¬'ò Ý…ˆª©ëŒK)á ¿ôÊ¡s}­Çù›v_\ˆœ$-y™‹W“ŸÖãx“v?rhªôU§¸Ò`é±Ö‰xđƞE+ Ù¬û—îxùÏ/‡¬'òÝ…iëü5ymß6!½\ŸW\H»/®Å³$9yŸ¤hKûyëq¼F» ´Ó 9_ÐTù¶´Vº«õD"^šœÎ{ïļe¶l~bAéþV뉼CwaÖ \ݘ[ç\„Šƒm¼^ë‰Dþ…v_ÜŒä$?IQ^)‰J®ZOäÚýYG/¥òUiªôUÝ}‘Ⱦ4ž‘]úñóèÓï6·Ÿ·žÈ tfÑÕ‰©§Ü< [ò‚¼Xë‰DîèHc•?­¹#R”,å¡’«²“d¬õD^ »?‹è¢q)%N5¥£êî‹DGç™ÁåÏ—9«—–µoà¨õD±Mwa¶|Öн$m73}ßÎýn=ŽÈ]ìúàÏ•?­¹ •\å¹’±$­õ81OwVÐ?i¡N¥—ÒN­'ñêÚö…I»ØÁ9ñù[ W'¦¬'ŠUº ᣫ<»~ŸºŠÄý>(±…t%cy´©™Õ¤®õ81Lw?LtNš'ý“ÏH¥‘ZO$â_ìcNÁQíc˜tÂ14<¶%/È\XP\ÕÌ›´žHä^é÷A‰9d,IKÞòtÉ^Øz¢˜¤»Ú&“Hÿ¤…êÁÀ…Ñ´¬},&?K×”vž´ž(Æè.ÌLhrºâ`›s6æÖñ­'ùôû Ä(ò–Ôåõ’À¥û[Icë‰bŒîþÌÐ0ãŸ+u 'ÍSw_ÄmZ;úãRJœ%ÍÈ®³ž(fè.Ì@°élBz9ß-ymUG÷`8ÿ«?°š7 endstream endobj 319 0 obj <>stream H‰ìס€0Áh„"é*–2h&àãa˜Û¯ßÞœÀŸóÚöãÙ¯ð*=Фšô @“hÒƒMz I4éA€&=Фšô @“hÒƒMz I4éA€&=°º·Ï endstream endobj 104 0 obj <>stream H‰ì×1+…aÇáÏ`÷ ”3Û)‹OpFe´Ê¦, JVYÌJé¤ea>‹·ýÐIIÊpÜ&eõêyr_×ðÌÿgºûÇõ:9¿è¬Ç[z©]ÞÜ/,îÇIššÛ>8nJÏùƒf8ÛÝ‹?NÏï^•žz€Šôή£•â0E7E=•žÓšÑÃËòZ/þ59³¹µ{ñöþQz|уT%Z)Š)º)ÎS4T”TéE-XÙèÇw–VïFÏ¥·À7=@…"£žâBEI•Þ҂ǧ×A3,½~ÒƒT+*Jªô ø·ô @Nz '=“ÈIä¤rÒƒ9éA€œô @Nz '=“ÈIä¤ù­OÕœ; endstream endobj 156 0 obj <>stream H‰ì×ÿOUuÇñ¿!Ãa›‹¾øC+1¢1 R[³-¶pÁh-Ýj©³tc³–[MßAjHêü+¤Dë®AôE¡²ØmM`˜ŒyWÌAÃPäâUzÖY¬i)÷¾Ï=çõØÝúÓûœ{ÎûõúLNŠØ(ÛõÍ-÷òm=ˆÈhïìËÌÝË3œšUÝØrÊzœxòå·=Ü7¾­‰gG³×ÕrÓø,Z±-ØÞk=‘ˆ\WUMpAZ)oëü%ÅÛ›Ãë‰â€ráé æl¨s¡6Ða=ŽÈÓyP<€=Ì6æI^µþ ûÙzœø ÜŸ=š$}’VÉ£aÒ3­'‘™¿~áÕÀ¼Å…¼¹IKË4uZOävÊ…Y:7:¾¹¸)!¥(1µdë¶c©Ü‰_Ÿ¶tß‘Yá¼ÎÏæ×Ÿ·žÈ” Ó;þïN(ðýu0d=ŽÈœÑyP¼‡-=µ±ÙÞÖ㸔rtE£Sé4Ië‰DäfE._)ßs<1µ„÷šoþ欇råÂõ„z‡Vçææ$gT¨oÓ“#£ó x»šÍÞæñf‡³É­'råþRcñ¶á‘±¼—>äçsgfesëië‰\D¹p­óÂoìh!RŠ67ñüXO$2÷tco³½Ùálrö9[Ýz"Qî_‹fH?tŠ"Q¹/âU'{|r—ó²/ËÛ겞Ȕ W© t,Z±{²jýÁîРõ8"Ñ¢ó x;œMÎsÎVg·[ãÊý£ Ò rHK¤+ZO$"Qw¨ñ§¤¥å¼õónÜÚpþBØz"cÊ…)í}ËŸþ+R³ªY#]:ŠO°ÏÙê<ílxö¼õ8ö”û =6ÈÝ Ò­'‘Ø OD^¯<šRÄXVZU´žÈ’rgúGÖn p¦—ñ<ð„XO$u:аÕÙílxžy¶=;ßz"KÊ}ð<й´A:¡r_ÄŸÎŽf¯«eð¹ç±Áö^ë‰lø<.Ž_ªÜûS64òTXO$#:Šß°áÙó<öì|6?ûßz">Ï}ú­Ï©ô@很ttõM­…Ç×Ôôüa=Q¬ù9_tÝ»òm.ÿÑgöÿÜý»õ8"1¥ó øÛžÏÃÏþ'¬Ç1àÛܧãÑôœÊG÷£ZO$".²ÿЉ…ée쇄”¢WJ?»8~Éz¢Øñg.вžÏéGš:­Ç1 ó ø›ŸýÏ+@ÖãÄ”sŸ^G»£ãqáô=ZŸõD"âFìŠ[nýgWÔ}ò£õD1â·\ÛTÐÈ%ß–VZ¼ó+~wë‰Dlè<(>Çþ'È^rt°ž(Fü–û4:z—LÇ£é)÷EdzgúGV®y—¥Áçþ'vvtõYOuþÉ…ðDä÷¿OZZÎõ®Ýà·¶žHĒ΃"“ç>‰À»@:$…õDQçŸÜ§ÅÑåœRG»Sî‹Èì5·ž¾{ù[ÎÉ}ñƒá‘1뉢È'¹ÀoššUÍ•fæîm=ñ›õ8"öt™B.¼$ya=Ntù!÷inô7§ÈÑè<ÿ›ŠH”TÕºCƒ9ê¸ÆäŒŠÚ@‡õ8"n¡ó ÈUȈ»©ä½ 5Èëq¢ÅÛ¹O[£³ÑܸÆÄÔºœõD"ßÎŽ?÷òGó²UnøÍ†c¿XO4÷<œ ü|¯UMH)"øƒZO$â":Š\Ë Rƒìðjpx8÷éi´5®ŽæFóäÏ'"&B½C=µ‡õÂ'={÷Éžë‰æ’'s!rùÊú¶äŒ .-gC¿ õD"®‹óàŸ ¬òùË endstream endobj 320 0 obj <>stream H‰ì×1€0A A$®h‘3 *`&·[|ýíÍ °¿ûÇy½û÷>¥šô @“hÒƒMz I4éA€&=Фšô @“hÒƒMz I4éA€&=Ф e 0yïÏ endstream endobj 105 0 obj <>stream H‰ì×1€0A A$®Ò"3ia˜Û-¾þöæþhœ×¶Ï~}€WéA€&=Фšô @“hÒƒMz I4éA€&=Фšô @“hÒƒMz I4éA€µ[€ÙÏ endstream endobj 157 0 obj <>stream H‰ì×ïK•wÆñ¿ae”0æVPËr‚¹,ö ’­Q=Hö`aƒ z²±z|g‡Â­Ö‰¦Å½Ð?0(­KL &$çï œá7²N$â:ÝE&ˆN¡YèZ†®¡q¬M‹?zŸõÅ‹Ž1V™z_DâïǦîåëJ£Qæ¦#ÝëDSäƒ^¨®½ºdõ¾EVαkÍ·¬ãˆxƒîƒ"“r½¥‡–á­¡qèë8SçõÞgq±»¢Œ%vå§.ëD"2«ÑIé…œHs“ó·ï©é¶N4ižî…Ë]k6W’?ymIíùÖqD¼D÷A‘) kR²ñîÐ>tuœ©ðnï³²ØZ,.ò?µ¢ fHDdܽ¡û»ƒgžN‰©ÁÊêëD“ãÑ^èùµïµ7>'ù“iûÞ©øŽ_Á:‘ˆÇè>(254½CûðÑDô‘u¢ÉñhﳯXY$gq±»Ôû"âêàåW«8¦ø<ûâÁ‹—;¬M”çzÁëE,âÝE¦ƒöÉ}ë ^"úˆVòÐõÄs½Ï¦bYE'VVÎ1õ¾ˆ¸ìïG×COYÞê…Úó7’×–xÍæÊË]ÖqD9ÓH7ñBÑS´•uœÇðDï³XPì(¢²©*>þÁ:‘ˆÈäô oßS3÷á9–”^èòýÅý^è î œ¡SƒÒ:ž­u"?Ð}P$†è&Šž¢­è,šË:Ñr¿÷YMl'B²£XSê}ñ®ÎîHæ¦#h|–¯+mlþÙ:Ñ#¸Ü #£ceUõÑRزãTûÍ;Ö‰DüC÷A‘˜£÷i+Þ,š‹þ¢Å¬=‚˽ÏRb/E‡ J½/"þ ·.Î,ŽnsOôF­ýƒ³½ÀsK[_N¶Œ á†vë8"~£û È ¡³h.Þ/ZŒ.³Žóonö>ëˆK¬&Ÿ›ˆÈ4¾ÿíü”N¹yˇ¾³Nô{¡­ãvö¶ã¤Z¸ªèèÉKî<+?Ñ}PdFÑ_´oF¯YÇù‹k½O˳‹XG¤b)±—Ôû"âWwû†¶î:=gi'Þ¢Œ¢šsMÖ‰Æ9Õ <¢7‹¾¢’óù ÿ´N$â[ºŠÌ´?K;¥æTï³…XDäa±‘yD""3êzKOÚúrŽ>>+³·uܶÍãN/|øÙ•…«ÆK!{Ûñæ¶_¬ãˆøœîƒ"ñA£Ñk¼ntMgÇ•Þgÿ°‚¢sˆ]Ä:²Í#"g5çšžY¹Ÿ3pÎÒ¼­»Nßí²JâB/„Ú36T#%ëP(Üj˜DdöÐ}P$žh·Ô—Êxéè;ZÏ0‰yï³yX>ìb<ýÂ~‘U[ÿì}74oY€ópÁó%\4‰aÛ Ý‘œÝŸ )½°¬ªžgbCdÒ}P$Îè8šŽ¾ãÕ£ûh@“¶½ÏÚaó€ýà RôF³·ç`ä³8³8ns«^è”Ö%¦ùß_ß[Ësˆs‘YN÷A‘éù]€Ÿ4ýÛ endstream endobj 321 0 obj <>stream H‰ì×1 €@A A$®¾Ef’÷ ;S\}íÎ Ë8¯m?žýú¯ÒƒMz I4éA€&=Фšô @“hÒƒMz I4éA€&=Фšô @“hÒƒüÅ-Àâ'Ï endstream endobj 106 0 obj <>stream H‰ì×1€0A A$®h‘3 *`&·[|ýíÍ °¯ûÇy½û÷>¥šô @“hÒƒMz I4éA€&=Фšô @“hÒƒMz I4éA€&=Ф i 0{Ï endstream endobj 322 0 obj <>stream H‰ì×1€0A A$®Ò"3 i€™Û-¾þöæVŒóÚöãÙ¯ð*=Фšô @“hÒƒMz I4éA€&=Фšô @“hÒƒMz I4éA€&=ð·JnÏ endstream endobj 107 0 obj <>stream H‰ì×1€0A A$®h‘3 *`&·[|ýíÍ @ÝýŒã¼ÞýûŸÒƒMz I4éA€&=Фšô @“hÒƒMz I4éA€&=Фšô @“hÒƒìf 0ãIÏ endstream endobj 323 0 obj <>stream H‰ì×A €0A A$®úEf "JÒdg÷¼ÿι޸Ÿã¼¾ýá€}éA€&=Фšô @“hÒƒMz I4éA€&=Фšô @“hÒƒMz I4éA€&=È.^· Ë endstream endobj 324 0 obj <>stream H‰ì×1€0Ä@ A$®º"3-CÍœÀNã~Žóúöï#l¥šô @“hÒƒMz I4éA€&=Фšô @“hÒƒMz I4éA€&=ФÖ{ Ï endstream endobj 325 0 obj <>stream H‰ì×1 €@A A$®¾Ef<|$;S\}íÎ ð?ã¼¶ýxöë#¼J4éA€&=Фšô @“hÒƒMz I4éA€&=Фšô @“hÒƒMz I+n…CÏ endstream endobj 326 0 obj <>stream H‰ì×1€0A A$®Ò"3©a˜Û-¾þöæà¯Æymûñì×Gx•hÒƒMz I4éA€&=Фšô @“hÒƒMz I4éA€&=Фšô @“€µ[€í{Ï endstream endobj 327 0 obj <>stream H‰ì×1€0A A$®h‘3 *`&·[|ýíÍ {»Ÿqœ×»àSz I4éA€&=Фšô @“hÒƒMz I4éA€&=Фšô @“hÒƒMz g 0UÂÏ endstream endobj 298 0 obj <>stream H‰ì×ÍKTQÇñ¿!D„6­Š`DPHm¤Z„àFjÑB¤ZHf¥½ V˜.RZh4“½ˆÚÛ@Tf‘½X4TH*Ê”šŽM?â@P:sï=wòûYÌjîóüÎÃÓLÂi£‘‰]û/­Û\·¡°©+8l;N²áì…ѯí I݆îDat?º%Ûq€ÿÜ­{oõÜôk;À˜ €—úÃïò¶·êÑín ?þ`1‰öAÝ€îA1¥-º‹I€µƒ¹01Å­r õô*\‹Æ¬Ä°»êÔ:»ètº+1€5ˆ¹01+¦cߪê®éõåä«oœ‹{ÀÖ>¨“ê¼:µºWÖ†tÖ8æ>ÀÄ\,z>ú¹´â¢Þà¦mg.÷ŽxÙÚÊ>¨3ê¤ê«Sëì^¶°Œ¹01ë®ö½ZÞ’JÊÚŸ¾ŒzÓÔã}PçÒéÖýÚ|ƒ7_xÓÀŸ˜ûsðƒù…ï'Úî¯ÏoÐ{¬¬ OθÝѳ}PgщÔK§ÓuR·;ø æ>ÀÄ\ü#:þu_Mpyu:ÕŽ/&ÜëåÁ>¨ü:Åò’«sEcîõ°BÌ}€‰¹øÍ“‘O%eíz˜Ò–ÐÀk—º¸½*¹ò«ÅÖ=t"—ºX-æ>ÀÄ\ü©+8¼±ø¤žç޽£‘ Çë»·*­2«¸òëŽ×æ>ÀÄ\|kv.^ß<˜8šµåHu}ït웃ÅÝØ•P9•V™ŸP~‹ps`b.>ù8U^Õ£wš[ÐØÑ=”XúáHYg÷A¥R6%TM¥UfGÊps`b.!üøCþÎsz­úí¿K¿ ƒû òüÎv÷áûô ps`b.™"±ô££{hCa“ÞlyUOäãT:ÕÙ•AITG©”M Ó©ÀÌ}€‰¹d–/3 ßÈÚr$;pôPSßì\<µ:iîƒê«îÊ $Õõ½J•ZcîLÌ F&ví¿¤Ç»±ødWp8… éìƒê¨¾ú\”$… laîLÌ s]¿ý&PÚ¢'\´»íѳ±U}›Ú>¨.ê¥Õ74ðzUßðæ>ÀÄ\2Z|1ÑÚù · Qy_Mp,[ᇫÝUYõõÉúüuTßT#°‰¹01€ÿÀøäLemHo9'ïXãù»ó ßÿùÉÊ÷AUSMUÖÿÕE½œˆlÓO2*ö endstream endobj 299 0 obj <>stream H‰ì×ÏKTQÆñ¿!0LZ aLÑ¢…F ´© 䢅!!´0t•B3b‰J a‰™ý !Сš‚Y˜¨¨–šŽ öÄÀpbl,ðÞ[÷~?‹Ãsß{æÝÞ­-À»?ÿ´çP¥V§üÈÀ5Æ£3§ÎuèFç4ööGÒ×¶«Rkú2£ÓTy²èŽÎß½f8ƒÜ˜ÈÀe’œfÃ4ÜŽóà_M—þä>ÀD.¶QwëY–?¤Û]ZÑ7;¿”Z“fT½¾Ò[PÓ2¬Ó¬o€MÈ}€‰\Üjrz±¤<¬ ~àX]K×H|}Ó|»í<¨Uª^¯ô­N°·e–#÷&rp·×o'ŸmÓ5÷š>ý˜ÜOõV5ÚTýÈØg'š`9r`"/èeçÕ벟¹p7›ÛúuÔŽöõS5ªtºY"÷&rðˆå•ø•k™¾êŒÜªË5®ÞÔÝתgíh_o¿.­9Ý&k‘û¹xJlb¡¨¬G·>ËJ®…ïißéÖØÜ˜ÈÀƒnv¼Ú{8¨»¯UÏN·À>ä>ÀD.ž›X(*ëÑ­ßw¤úçêiÕŽön €È}€‰\§ Q÷:¿°}42õ»²4ó`›wÓ:A5:MgZÓ,»‘û¹¸Æxt&PÜ©}ðDCo$}ñŽó`‚ÎIL—:Yçï^³œAîLäà_¿—U>Ð]Îò‡‚MCË+ñ?ùÃyPtšÎÔɪ׿è¿v£eÖø!À·åP endstream endobj 300 0 obj <>stream H‰ì×ÏKTaÆñ¿!B7® A1t¡‹$„”@@7‚Q´ÉI” ¡ÌŒA!-)•Ä…JÔ€„•„b˜†•fø#ÇFí»y!HgæÎ½3Í÷Cˆ÷=ç¼ðòpö÷ÿíÙËÙ#'®ëçH äÔB;áÖ®±Œü&=äóu} Kk‡ü°ñî }¢Ÿ‡ü{\ué‰>Q-UTÝh[à&r`"€ä5ìŸË=Óª'\Xîó#ú6Ò}Т*ª¥UWÕ#ú@" ÷&rHF3¯eÕÝz¼™Þû}“QœÝ>hyÐÿFuõ¹zP'QœÀ-ä>ÀD.ÉåçúöUïó£97ôO¿è¿ÑË>hcFîLäD:z&2 ¼z³eÕÝ?}å¨÷AK`~Eèu¥Þb9 €3È}€‰\’‚Ó²ëÕ³:Wÿ6Àä>ÀD.‰©oh*«¨Yϳ¤ªóýÌÛÏÇ>hQ·êY‡«MaûùbAîLäh&§‹+Úõ0Ÿº582§*ñÛ-ê<ûôm•Ð,š(NUDŠÜ˜È q,[¯¹öTOòX^ãMß«_Û¿ãW+Þû ¨M¡YTHsiºøÕpHä>ÀD.‰À\.\îw`ur`´h–‹WœYrˆÜ˜ÈÀuƒ#Ó9%wô‹+Ú'§)êØ>hÑ\šN5©æu¦(€¿‘û¹¸èÃìrIU§Þ`VQs÷À['K;¼Z¾Ó¤ª«©5»“¥XÈ}€‰\\±º¶UçJË®OÏmð´Œnl†nÀ•}P4©æÕÔš]7 {p¸ Å‘û¹8,¼»×öðuF~“ž^emo`~Å•6ÜÚ-ÁÏ?4»Ð=è6t'®´¤ r`"' ûçòJÛôèNž½çºØ‰»û E7PXîSºÝŒ‹©ƒÜ˜ÈÀù•s5ôÜ2 ¼=áÝ=wûI„}Ptº ݉šÑýè–Üíøï‘ûHfó³:. endstream endobj 301 0 obj <>stream H‰ì×ËKTqÆñ¿!$!\ÂH‘-ÚÌ¢ !‚6ˆ‹@pcJ©‘(C+°$ÊZT0,³;ET.2hˆ†Š¨Hq˜ðÒLŽÖ#êGwÇ#ï9‡ïg1èî9ÏË—÷ëW~»zçÅŠuõkˆ¬O“¹ý×Jcí%­û:õ¯u¢‡OÞÒÛׯu^EêG-é€TD{àb/˪/9²fS—^ÙŽú‹©ô˜uœuzÔZR*5¦Þ¬ãÑÄÞ¸Ø À2¹÷èuUMÞW,ÞÀ'À{ÐsýÞK5¦ljOZÇ¢†½p±ß½}Ÿ­mJêe­ÞÐqâüƒü—‚u¢ßì=(jL½©=%T“êÓ:ì}€‹½øèsn¶íø•ëéYíméÏL['ú£ ߃žLvF*¤úT«êÖ:ì}€‹½øåÊÀèÚ­Gõ â{Î=M}°ŽóÁ¿=jR}*ªºUÃÖq€Ðcï\ì`ét³lÙu&\7KXîAOrð™ºU`õ¬¶­ã!ÆÞ¸Ø ÀR|ŸÜÛÒ¯G´rý¡®ž»Ÿs³Ö‰þW¸îAQ·jxUåaÅVçjÞ:Jì}€‹½'ÿ¥pìì}ï<©mJ¾}ŸµN´8¡»=êYm+¹šWÿš‚u" dØû{(BÿðóX¼[o§ª¦çÉè;ë8Åé=èQç›wžV~MA³°Ž„ {àb/‹’Jm¯» WS^èKŽXÇ)^¨ïAú×ôšˆæbö>ÀÅ^þS&;ÓØ6PRÑZkoN MMç­-IîAÑÖD4MG3²N{àb/ÿT˜›ï½ô¸lc§Ëî†Ëé7Ö‰|{У‰h.úÍH“Ò¼¬ÁÅÞ¸Ø ÀßݼŸ®ÜvJÏD¿úÛ:Žo¢tzn?|ÉIþbï\ìàOÒo&v7\Ö)ÛØÙ{éqanÞ:‘Ÿ¢wŠf¤Ii^ú4ÍN´N{àb/¿ššÎ7'†Jcí%­m™ìŒu"ÿEòô|šÌijš&¨9jšÖ‰€aï\ìà'}É‘òê„ÞÅöº ©ô˜uœåá{УÙí¨¿¨oÔ45Së8@P°÷.öðÝ“ÑwU5=z±xwÿðsë8Ë+ò÷ GsÔ4õ¥š¬æk°ÇÞ€`ú&ÀYˆ=Å endstream endobj 302 0 obj <>stream H‰ì×ÁK”Q†ñ¿!B„ Z‚bT 7³*¡à"DÚBš(J`Z†L„•DC1)‘R„‘„" Šh˜(†™£ŽÚ q)*9ó}ßó[­ÀÅ^@p¬¬Æ¯ßy“[ܨæ+ª#“Ó ÖY ø{0A ¨ƒªP*Äz" åØû{¡È BmªýÈ©ŽþqëqìñüE=¨ † á?Cø{àb/À÷Fƾž<Û¥Î÷m¾yo=N¦à=øµ¡Bt&ªEÍX¤ {àb/ÀǾ-Æ.4>ÍʯÝ[påbÓsýÓz¢ Â{ðO*D¨5£r¾ÄÞ¸Ø ð¥øúÆ­ïönRÞ§+ïMÌYO”qxþjQ3:õ£ŠÔ’õDÀnbï\ìøOÿÀø¡7vÑñöýŸ­ÇÉP¼ÿM娑ZRQÖ㻆½p±à'csgÎ=TÒ¹Åí÷ÞÆ×7¬'Ê\¼ÿKý¨"µ¤ƒRWªËz"`°÷.öüáûÒJ]kova}V~íùºîù…Öe:Þƒ[¤–T”ºR]jL¥YOì{àb/Àº8pìªJ•w~±Çxn‹ºR]:1•¦Þ¬Ç’ÇÞ¸Ø ð´Á¡©’²°.µE{†­ÇñÞƒIPc*Mç¦êÔžõ8@2Øû{53»XQQ½9E Í}˱5ë‰<†÷`rTšzSu:=¨­'¶‡½p±à9îä•—žðyrxS{:@u¨Õ¤õDÀV±÷.ö¼%Ú3œWÚ¢hKʃCSÖãxïÁSêPǨ&U¦õ8À–°÷.öÒá§v¦9î endstream endobj 303 0 obj <>stream H‰ì×ÏKÓqÇñ¿!D/BP" AtáA/‚B°KÐ!°)Ša„™0 Ò0ȶC²$j d8ªQJ†8ÑJfþÈ­•¾i†ÛÞßíû|_ì"/>Ÿ×?ïÛ‰-y›œl+«é †¢øîÖyó±S_ë yOmT'u˜ê§Zjø‡‡OÞª®úZ8ÂÚúöËWq}­ƒ{ZMlùü!=`Š+:ü½›IëD…€}0ƒÔI5SýÔ‘ª«j¬u"`OüÝù"™J÷ M–Tvé™ÝÔ:²OX'*샧~ª¥:U5V½U{­ù*™õÔõëu]݈LÍ[Ç)4ìƒY¢®ª±:[µW¶Žä™wï?Õ· ëE]ZÕ}ëÞsë8…‰}0«Ô[µW'¬&«ÏÖq€<°¶¾}©{¼¨¼]ÿôƒþk¨`±feîvpº´ª[KJ}ËplnÅ:NcÌ 5Y}ÖQ«Ûj¸uÀq"SóÕ ½™+Îö…#³Öq\}0—Ôju[®ž«íÖqGXˆ'Îù‚z'—Tvõ M&SiëDnÁ>˜cê¶®žëØÕy5ß:`fc3éï(®èÐó¸µíÁjbË:‘»°šPÏÕv¼š¯þk ¬¹ EŸ¾¦W±·yp&¶dÇØ ©ój¾Î_S Y°ŽäÈtt±¶q@/ág®ßmǽØÍ©ÿšÝ‚&BsaÈ¢åë.éõ{ÌÓy5ðôëö7ëD®Æ>èšÍ‚&Bw¡éÐŒX'2,™Jÿzôž¿8_þb샢‰Ð\è:4#šÍ‹u" 3ƽ)÷ÞÐ[·¶q`:ºh?±:¦C3¢KѼhj¬ã‡›[ñ6ê}[VÓsgô…uü†}Й4)š]fGdøo«‰-Ÿ?tôÔ•¢òvïÄÆfÒ:þÄ>èXšMfG¤9Ò4Y'$ýýGàî³’Ê.íM­#s>['Âß±:œfG¤;Ò4i¦4YÖ‰€ý„#³žº~½`õLÍ[ÇÁ~Ø3gW€:Ò¬ endstream endobj 304 0 obj <>stream H‰ì×ÏKÓqÇñ¿! !¼x*C‚<½Ò% AÁƒ”¿Hf+˜i°‹X J ‚T2¢-p” †Êb2ÍM§ö:DWäööûý>‡/xÚ>>?|ÞÇdzøá{¨näÊõGúÎ.®sK®¦îÜ©WkYU82±œ?<²ž'è:¯óÒ×zœ@5©)•¥óRejÍz"à¯íL¶#<ãöø]úÞèOë‰p*ìƒÎ¢²Ô—*Sk*ŽÐ`n,/¯ÔZQß<žHnZƒ3`t"U¦ÖtpêNõYZŠÿ¨nÕ»4X;ôúíWëqpfìƒÎ¥âÔŽO ªDëqà!këé¦ö˜Þ¢¥•ÃÑ¥Ü~Þz"œû £©;Õ§uˆêQUZO—ÛËô Ï—Tôê ÚÒ9µ±•±žçÇ>èjP%êU¥ÚT¡ÖÀ^M¾vó‰^ž·î¾ø”øi=þû k¨GU©ÓT¡êÔz¸Š^›7ŸóÚtöA—Q›*TgªZÕ¬õ8p¼­LKç”^˜%½Ïö²Öá°º U§ªU'«rÕ¯õDp¤Ü~~8ºt5Ô¯‡eS{lm=m=.û [©V5«ÃU¿ªX-[O'™šû¬Ò{²ºaôýÇ5ëqPìƒî¦rÕ¯ŽX-«hëqà‰äf}ó¸Þå5ƒc±¸õ8( öA/PÅjY­®U·õ8¸¤¶3Ù¶îi_ ËìéÏììæ¬'Ba±z„ZVÑêZu«q•n=.‘üáQdb¹¬*¬í ±u2¹š²žÅÀ>è)êZuëÄUºzWõÖÀÞ»o¡º½õ]\±ÅÃ>èAjü_ïjßz˜I®¦['õ2,­ˆL,ç¬'BQ±z“JWïª^§¯@÷€õD(ªÝÜÃÇsþ`/ÐÕÖ=ý+ýÛz"`ô2U¯öuèÐm ;Áz"ÃX,^^3¨Eàö½h"¹i=̰B7€îýèNÐÍ`=.©? ™ ¶ endstream endobj 305 0 obj <>stream H‰ì×ÏKÓqÇñ¿!B/ a"(”‡vè B—A!ˆ ê ¤‰2)J-XzÐúA#B„JàÀƒYä wPX˜“láÏéÔ^°è`%:·Þû~}>cßÛëðáÉç³³Ü`<2{ú£c§ny¼¡¡Ië90Öúàƒ~­‡À˜j &è0¨ª„õdÙLèH¨*†õ"dÁÚúf{`$}Íkh Í/,Y/B¾à=ˆ]ÔUB§BÅP7TëEÈ\ðÕÇ“gïévW]×ýþSÜzò ïAü•Z¡bèl¨jˆõØDtÎëëMßèžD¬ç ñÄÔ ÕC'D%QO¬ç`_« !Ýâ ËZš;†—W’Ö‹§xboª‡¢’蜨*j‹õ"üSr#ÕÕ7Z\Ѧ˛ïÚ‹™xÂzòïAì‡J¢žè¨¨-*Œ:c½» †§<ÞNÝÙªj᱘õ8ïA쟪¢¶èÀ¨3ªõüþZS߯{ZI¥ÿqðõ8ïA” £ÎèØ¨9*õ€#íÇÒúMÿë‚Ò¦ãžÛú£OëEpÞƒÈ@:;jŽÊCvL¤¶¶{ž¾-©ôë>_Sß?ýù›õ"8ïAdLÍQyt~T!µHE²^pT„ÇbUµÝÄÊÏ? OYÏSñÄ!©?ªN‘Ф.YÏp¹Ø—ï¯<Óí«¸¢­«o4µµm½Æ{‡§ ©E*’Î’ê¤FY/p¡å•dsÇpaYKAiÓÕæÅĪõ"8ïAd‹Š¤.©Nj”J¥^Y/p'¡'ÎÜÑÕÝëëˆÎYÏKðDv©Nj”•z¥jYÏp¼ñÈlu]·îW¥ç&­çÀUx"T*õJGKíRÁ¬ç8ÒüÂÒå/u§**omŒ¬­oZ/‚ÛðDލWª–Ú¥¦Ž©fÖ‹ƒ«þÞƒÈ)µKÓSÍÔ4•Ízüá§’̽. endstream endobj 306 0 obj <>stream H‰ì×ÏKÓqÇñ¿!ˆ^<ƒ!ˆ "ÔA!„.RB AÐAÊ)Ša?Ô‚¥¡´Ë"T‚L#W¸ƒÃT2²…?r6¼d]„, Ûû»}ŸÃØ÷ö:|xòùì쀣„G¦½çîŸ8}«²¦g":o=¹¬õÁ+4ýZA.SÇT34•M}³žàPS±EmŸnMEÃï¬ç ÷ñDƨi*›Î›*§ÖYÏpåÄzC`ÈãmÊ/n tŽ®®%­Áx"“T6õM•SëTýôÍz\„÷ 2O•SëtðÔ=ÕO ´^`c82Srá¡îEåÕÁÈø¬õ¸ïAXQñÔ=?5P%´žQñ_«êu*,kï}ò&µµm½nÄ{†Ô=ÕO Ô!TUEëEÿÝ÷•í/ó|Ío“þèÓzÜ‹÷ Ì¥“¨ªŠ$ä¶ÐdaY»nàUuƒ±ø’õ¸ïA8„z¨*ê4ªê¤õ€cŸ-¯ê¶ãów Gf¬ç{xÂQÔFRgRµT3­çƒ¹…Díµçºá”¶u÷%7SÖ‹€_xÂiTHuRµÔÉT9ÕOëEÿhu-èÍ/nÑŦ¾1¼œX·^ìÃ{ΤZª™:œê§*ª–Z/8šgCÑSgïé>ã¯í›Š-ZÏ~ƒ÷ œLåT?uDÕRÕzÀ¡¼ý°PYÓ“¾Ã„^¼·žˆ÷ œOUKuPÕUÕÕzÀ>Y©o ëÞr²¤õvðõŸÖ‹€?á=ˆ¬ –ª¨êªŽ««ÒZ/Ø'¹™ºÓI_W®\Í-$¬Ç{YD]U]ubUZõVÕµ^°'<2íówé–ræâ£‰è¼õà°x"먱*­Î­ª«öZÏ®‹/¿Ü¯›IQEÇ@hÒzp4¼‘¥Ô[UW§WV‡­ç×YN¬7†<Þ¦<_óÍ»#«kIëEÀ‘ñDöRuÕ^XVÕdëE8Í®^U½& endstream endobj 307 0 obj <>stream H‰ì×ÁKÓqÆñ¿!D^<ÂDЃ‡"ðàA/ÁèäÁƒ1Bð 䦎i†`bè‚]ıRF&uÈÀQK0TÊ47ÝfÔ%ÝüÌßïý: v{ßßó|¿''(‚l.?6½â© ]¹~ßçÄIëDÀ ]:zf¶vRÖ‰€"â=7P“«ÏuÔÕíjxõ¼u"PŠžÏ~¼vóî 7|O>¬}·ŽïA¸‡Z]Ý®¯žWÛ[Ç%D÷„[wžrO€Ûð„Û¨áÕó:öê|5¿u`lk'ÕÑ3£»AEM_ÿðÂaúØ:pqxÂ…Ôój{u¾¿ú_+`Èe‡Çcžº®m]ÑÍ]ëDÀEã=×Rç«ùuþµÚ-‚u"pq^¼ùìmÒM ¡u4¶úÍ:`ƒ÷ \Ný¯ÐW EÐ.XÇE·ßniŸÔúW5NDW­ã–x¢-Ð"è[Ð:h#¬ã€¢ØK¥ïõ¿,«î-÷»Ãsúk0Æ{øM‹ ]Ð:h#´ N’ÍåǦW*ëúúÞ¾;O$­%÷ ð'­ƒ6B…öB«¡í°NÎkéÝ×Úæí»~ç—Ö­ã%„÷ ð7-ÅéjhA¬ã€3Š'’>D›î© >[ÎæòÖ‰€ÒÂ{ø'í…VCÛ¡D;¢5±NþÃþA&ððu¹7XVÝÛ˜ý±ûÓ: ï—zô¶ endstream endobj 158 0 obj <>stream H‰ì×ÿKUgÇñ¿aå(A,ÆVº‰L‚E)Ë “±áÖÐÁXŽmÉi4ÉÔL±ej_¤L)ÓFÝt[hå&ŽÍ´•º,’MDã&ÊÝü’׬öfgÛ/M½÷ÜsνW?/.Ésžç1xžÏçyøÐ”1ÏTVî¹ÇÖåFÆä—_˜˜ôšǴ﾿Éì|;M†>C«aFÎñ¯;˜TD$¬qrn/hŠø÷䬬í°{FÇrÁ=2ž™ã2þ®½G~pæ¶+"sÑ}P$†d"ÉÈ~$%ÉJ»gt,÷é0ÆßE«¡Û(÷ED|7ìþ3)½Š#”Ï3›÷wõ Ù7—¹à™-9Öf„ÂÖ ƒÃûæé>(:È}ò‘-IV’˜ä¦}s9ûôÚ‹Qcè3Ê}sÚ;ž~ñŸã4%£Æ=2nÇ,vç‚«åzlò¦ØôæÑÎn/¶"âÝEB )™¸¥’In’ž6ÍbkîÓUh,Fuy*±„&cÇ,""KJYuûʸÎÕˆ˜¼{Ï{gf­ß¾\èë¿óê{'|M¾š†.ËÇ‘@è>(šHLr“íI†’¤–oSîÓOh)t§·Ð^¬_Dd)›˜ônÛuvYt.gìªõEµ®«nG.Œy¦²ó …±»?ßßÂú-\D,¡û HÈ"7óË/¡$)yJªZ8¸¹O3¡Ÿ0,]åÃg”û""vèݘz”ÖÏó)‡zoº-ÖÚ\˜½ÿàXÝe#Ò²N±fK†Ëé>(âÈP’”}Jª’­$¬%ÃZ›û´:‰QNh)Ê}»5·ÝZ½¡Ø8xS?újÌ3à€æk‹O9Ìh|·þô[àŠˆ}t m¿ÿ—­älàZ•û4zˆQHh&V]0EDdA³÷U´®ˆÝÍ Ì7?ó/¦G³$úFÓ²N1Î/«»ÈzDÄºŠ„ R•l%aÙ³¤-™Èhç¾µ=DDDÌùc|úíë8Šù¬ÞPÜtñ†¹qÌ…‰IïgÅ牃ˆ˜¼ìüFVenq˜îƒ"á…„ýdÏ7¤-™Kò’¿æÆ 0÷é´£~¼•Y«Ü ®Þ›îø”ÃÆ±¼1õhÿÀ¨¿#’ 5 ]köñúë|Ù×ÇÄ",ºŠ„#Ò–Ìe󒿤°‰Lç>ƒ¦aTº ÄÄì""b‡úÆîUë‹8Ÿ—Eçf|zzbÒëû»æráç_7¼q„c“¸Z®û¹^ >ÝEÂWÓÅä/[˜,&‘ýz×DîÓ+ht ^¤oÔº®ú¹^±wf6§¤ùñgó9«WÆ”U·ûø¢¿¹08ìÙº£W¢â žø‘yÍ.YD‚I÷A‘°Fþ’ÂÜÎØÈä2éìã‹þæ>‚^Á+1y4 很H(sŒ§dÔphóY“°¯½s`ÁW|Ï…»Ó÷Š*Z#ÿ…ÌsY±d ÝE²˜Df/“Îd4I½à+¾ç>-‚.a” Ú…r_D$\tõ E¿TfàIéUƒÃžyö1ê»×&•òäæ´ªk}·-]¯ˆîƒ"‹¹üò;Õìh’š¼žÿa_rŸæ@0ŠÄº¤Rz…¥ë'TÖvDÅr’/ÉÛ^ÐtwúÞÿ>¶`.ø•2".tYdÈh’š}Mj“Ýs=6îÓè 4ž¡EÐ%l[¯ˆˆØŽS=;¿qþS}ž\pŒgæ¸ømd\Ážƒ—æºQŠH8Ò}Pdñ!©‹*ZImv7 NŽ?úÌ<¹OO -ð[šCVî9åþRö—&ÑêL endstream endobj 159 0 obj <>stream H‰ì×ÿOUuÇñ¿¡ÀaâÆÖ¸Õ*”ÇCÉ9'ëË&cc‹eÍiÍ,[›4¾]n†˜€+„HÈÉ$iIJ82CãšELšÄ ƒa€rñ½âlw·@¾Üî¹gÜû|ìîîrî9—Ï/ç<ߟ™£plÛ‹?ðx–^v9:<¿mhêÑq½{tN»J*[#âìúj÷ÁZý‚— ÀtùÇ/ë×»Õ àcª¶Ú­\WÍÕtÏoçí¾fMƨ ™î@à¹Òv3rsñ¨þÕOoNÇçváÂ7¿D'ë`|ri«ã7‹Ö À\ìÀöýýê¸ns5]ewÿO÷5h*0ÆÍ —¯þjÑzþp¬¢euLžžù«Öçd6:§]ž]èîÞ¹ç”þ\·åHU­ÃêÅ0ûA ¨æjºnvõ]•ŸñØjÐ$ y@j6Є`õbþ01é|éÏ|"KÏÿˆ8û»Gõáó†®7mõ¡QÙaѹï¾x{|Êêe0ûA H¨û*»ú®Ê«õ*¾î}Õ_3€>hÐT@÷ Øôö$¤œPŒWx¬M﩯Wë¸ÕKàì ¢¾ïÊ8ã.¾ñŠO.¥ûÌÞû¨)$*ÛˆÂö´ŠÛãSV¯€Ÿ°‚*¯ÖÑWý5X½"€ezûFveœQÖl´é=tvWkÿð[ןY½:¦c?•]}WåÝÅý§þš4X½:€_ML:sŠ.) *Âþœógë;U½§ì=­zE&46ß°z™ÌÅ~jºÊn$^­ww_3€&Íš 4X½L€?TÕ:Öm9¢$¥ŸìîÖ‘†¦ý©w}îêz2©ØHFBʉ޾«× À,ì€§Ž«æFÖ£“ŠUù™w_“À³/WêOÍš¬^/ÀD퉩eFê¾þÙ}ܳ †êºëqv ‰ÊÞwèÜĤӊõ0ûA €©Ý*¸:®Û\MWÙÝ_Íí¾¦Í:¨9AÓ‚ë˜hpèÝkõœ_»)ÿýÒ+Îi—ç·s» :çmûW¡³Y“w¼òª— Àtì@¥j«ÝºÁÕñ·lõKì~ay³æ}¥™A“ƒ— 0ÅÝ©{Ú÷×2ë†nÏ=gÞ.tþs¯Té[½Ýz´¥½Ïü%ðöƒ@àQ©Õk#Ü*¸Ý×´ o59h~Ðaþ’fùââOmû@OõÄÔ²öŽû¶@ ß]ëwÇe{Zżq°â°‰ê¬F±Vµµ1¼ß™‹vÿZ× &£)B³„9ë˜èÇîß“ÒOêIþÈÓ…5ç;>yÑ.ʪÛÂcm:34*û@Þ…»S÷|·^`?Y]VuG¯ÙhS¯>‰Ý×ü ý ÎÔD¡¹Âwë˜htìNFÖ—zz?“—StibÒ¹è%Kì‚è×ö:2[œµ›ò«ë®ûbɬÁ~j±Š¬{YuV£}Þ}Íš(t¾¦ ;X2ÀÎiWIekDœ]í´ý5ýƒcK¼pé]0è—·¾P®KôÚ°£ÈÑ9àí’X‰ý °¢©¿ª°‘ãÄÔ2S»Ÿ~à¬.ÑŒ¡ICó†·K˜¥±ùFÌ3%zVÇ'—6·Ý\ÖµËí‚û?Fn.02”²÷ôèØe]ÀrìJÍUy«Å*ò².÷®ûš.4cèBÍËýót÷ïÜsJÏ營:üIM»¿à] Ç*Z¢suùªõ9™…Îi—?ÀìGUmÕ\ݼêoay³?òº_Uëм¡Ë5{hñâÀz 0“j"2 endstream endobj 160 0 obj <>stream H‰ì×ÿKÕWÇñ¿a¦Xc#HV?Œ-8œ#×ƈüAX!…ýèX[¬@o~ÁÌ­2Ã-›d%®)n+-j»Ôе¦…S¦8nÓ)¦ÓvË=íülåý|>çÓ½¯Ñ_Î9^ø|žï35FF'¶•ž‰OÞɇ_øsvëœþ¶ã™—óù9ëcdçÕÅ,Îg‘„ôÒ†æöÙ­#"+ޞǖŸ¶""…ÂÒY[šKy-vß‘ñCDDÂqèø•K¦£°zSÍÏ¿üÎRavÁèêLͬd>üæ‘DĺŠ<-¨ªƒ‘uªûL ¬Ã4ÂLÎR""òD‚­ÝékªLZ‚á/èHŒ†æö„ôé[jÌâü켺‘щð×—è>(â””žRUžV KgÃ_ÓÁî3‡˜‹*“ óIø ŠˆÈ#ôö¯Ûr‚·îü´’ŠêK“wBŽ,ë`º{oGyK\R€5ã“w– :²¬ˆ8N÷AŸ£¡””甪ÒVßvŸ™„É„5™R˜UYVDDfº=6Ø{n^J!/ÛÜ@ÓÐ𸃋;ÛƒfåcY> —•µ;\\D¡û ˆoÑMêi2JOŸŠî3ŸÄ&0«0±0·8¸¸ˆH”;ÙtcÑòݼº36ùñÖoޝïFŒk?õ½²j¯ÉÙŠµ{û‡ßBDfM÷A¢•Ó¤“†RRÇ·p¯ûL)Ì*,ÎÜÂôâøú""Ñæê>…—Þú¤ñìM—vq¯ Fmãõç_+f‹9‰›·7Ü›ti#y"ºŠø }¤’´’ó¹ÔbêéÒFnwŸ‰%qå¶`†a’qi‘È6ðÇhÎG_š"ìªúîï‰ÜÛËí.€ó¿WøUìýÆ=ûjÑÁÚV÷ö‘Ǥû ˆPFúÈ#I+)ftŸé…†˜g˜jÜÛKD$ÂÌ|…nÜZïÁ+Ôƒ.ü/«²?c/>/¾ùñÅ«=nï(" û ˆPCšhâ¸rýáëþ»žb/¦fW/¹""‘¡ñìÍäŒ}¼9W¬=xõFŸ7›zÖcfø2ß9êAøDä¡t±‹ÒADÊH½Ù×ãî3Ï0Õ°#sŽ7›Šˆ74<žh" óR {ÏÝ›ôøVºþÓÍÛæÜ¯áü´JáñD¢œîƒ"VÐ;ªÇÓGé`TuŸ9‡i‡™‡É‡ùÇ㈈øMèî½ÊÏ/›(¬Ûr¢«gÐÊ1luÁèþõ¯¥YŸr>ÉûÚ:¬C$ é>(â1GéLòh_ÔvŸ™‡0ÿ01 Y9†ˆˆu-ÁÎÔÌJÞ‡¯¿} ØÚmñ$v»`ðm,\Vf™•slhxÜâaD¢„îƒ"ž¡kÔÍdnáÒ2ªgñ0~è>“Oúš*ŽÁ,d÷Ûñ^WÏ ‰Â‚%¥‡Ž_ ݽg÷<~èøJ\ˆOÞÉaâ’Eç­3"‘M÷AÐ2ŠF×xÜh¥³^7ÿtŸ)ˆYˆÃ01Ù=ˆˆFF'¶•ž!±‰”|ß¶O4Í']0øN²óê8Ÿ„ôÒ†ævÛ'‰XºЏŠÑ2µõ¹'Õýÿ3£sÓ¿øä+qÃÑúk/¼±‹7ðêM5·º~·}œ|Õ£­c 5³Ò4}MUWÏ í‰D ÝEÜC¹è— E£k¶Oô€»Ï\ÄtÄ©˜”˜—lGDÄaÁÖn…äŒ}¾zý>ì‚ÑÐÜ>?­„³Å,ÎÏΫ°}"‘ˆ¢û ˆ¨Í¢\<_Tì‹Óm¶Oô_¾í~K°“I‰³151;Ù>Žˆˆzû‡7n­7E¨¨¾4y'dûDáÛ.€olGyK\R€ÎM)Üsø¢íùß¿ å ê^ endstream endobj 161 0 obj <>stream H‰ì×ïK•wÆñ¿aÍ‘B,‚Un"!©„ù`>PX¸õ ¨öAˆ HRE§e­†YÒlÌ ÜÆ™±­Zµàl£J#¸!¢a¢œðçQ«½ç÷ÉÆlùãèç¾ïs½8ˆ¯ï¹9÷u}Ÿ=™²×_Z_Ä_ë "ÁQSNL-å—õÊë%…ÕW¢SÖ‰fðÃÏHÈ_ë 3àûì‹_V¦—“p×þ¦îÞˆu"‘yŸ,9öSÒt)ä†úG¬=——{ÁŒŒæî9GH>¯nþôú¯X' ÝEbˆn¢¡\UÑYêý… ÷ÙN„dG±¦ØTÖ‰DDææbsÛº¬£¼Ç²wž½ÛñÐ:Î x¿œÖöž7Þ>æª6kÇ™îÞˆu"Ó}P$&è#ZÉÕ=E[Y'z¿ô> ŠET6ËÊ:ŽˆÈ¬ðîÊÜVç¯w—_zÁ©¿Ø²"­ŒÀ/'}76>iHįtY :ˆ&¢ø)ÑMu·¬ÍŠ¿z¿éûv6ÙW¬,ë8""ÏÕ×?”_â}•”ZZY{ÓG÷õ³éþÝWz)Áoý+â5ºŠ,íCñ#â>H+©÷ß-ËÊ}Ûl-—u"‘‰NLÕÔ‡Ýkj×þ¦îÞˆu¢¹ñ]/8|ÏY;ΜÏú¬£­í=Ö‰D|F÷A‘ù¡qèW@4‘zið=³²HÎâbw±¾¬‰ˆü-tõ~JöqÞN[k[Ú|y%ñi/8á–®µ™Õ®”sv7ôõY'ñ ÝE抖¡k\é¬ÙREY'š_÷>[kó»§ÈÏúbƒYÇ‘¸ÖÑù(wÏ9× M­ÖqæÏ×½àÔÔ‡SK9EBrqaõ•èÄ”u"Ð}Pdöhú…–áWCãÐ;Ö‰æ/½Ïîb}q –{Ì:ŽˆÄÁÈèÞ’fJayÊáƒU—‡G¢Ö‰$½žÂûŸ|³lCgY™^ÞºcHÄët™%:…fá÷BËìþøkõ¾ð¹Êc±ÊØfÖ‰D$.L=yzúüíU+x‘n/¸ÐÙ5`(‚Ñ OdSÞ)ŽÃ'-çä½}Ö‰D¼K÷A‘¢GhW+ô‹zßkx"ì1ŽÃ6c¡±Ó¬‰H] wºRà/ÿ[lj™ õ‚ÃYVgT¸ú~/¿ññиu"/Ò}PäÐ4ˆ«:åҵ߭ÅLðzÿÆor¡‰ˆwtv l/¸À{fÕÆŠÓçoO=yj(–‚× à•~cyÊaŽÆ_þØSY8ÝEfø jï³ÐØiÍÆr³N$"1<=Xu™:HH.Þ[Ò<µN{ìçñÐxÞG_q:>«3*yF‘yÓ}Pä¿h ú ¢Þ÷zŸµÆfc¹±ßXqÖ‰DÄßšZ×l©â™»ç\Gç#ë8‹%À½àÜ{З–sÒ•û¦¼S]Ö‰D›í¾äŒ¬8¶œuñ¥–¶žŒ­µ¼IR²‡®Þ·Ž³¸ß NcèÎÊôrNºlCч¾‰Z'1¦û ˆC#Ð ´¿š‚¾°N´¸â¤÷Ùo¬8NÊ¢c×YÇßèîìÚßÄÛcEZYM}8:1ehÑÅI/€§y òÇ„äbΛ˜ZÊóµN$bI÷AÐ4¿ÚŽPï O“çˢ㼬;6žu"ñ´±ñÉÊÚ›IÓ¥_êë²N´Dâ§žlÎîŽÌgmfu¸¥Ë:‘ˆ Ý%Îñþ§\Ð êý âɲë82¥ÇÞ³N$"^t±¹m]ÖQÞ™Ûêîv<´Ž³¤â­œÖöž×Þ:âf@ÖŽ3ݽëD"KM÷A‰[¼óyó»   hëDK*>{ŸuÇÆãàì=VŸuñÞÙ;ÏÆóû!>{Á©k¼µ"­Œã'$ï+½46>iHdéøñ>ø—žÐùZ endstream endobj 162 0 obj <>stream H‰ì×ýk•uÆñ¿!¨ ­Òœ®ÁšfL Ø )e"8’ˆ*‘‚;;x|*;Úl®b¦mé°Ú˜TN{:(µfê|2ab›™¸Ž¸Í9µ7Þ$êÚÃyØ>ç¾Ïõâ øÛǯßûú\ß»wEâr³çÖjÿÁ´ŒâÇž[?){CyUƒõD¾ûù<ÿ|þ´ÄÀþº¦©ó¶ñÏÏ/¬8Õ|Ùz1vµ£ëíuµdÂÄ,¿/x„a=‘TÞ wïuƒåkkÆþ× *ª­'%>ú‘kÏŸÖƒˆŒ’=_ýAÎsíÉ|’_{ßzü¿Óúè~=6h=‘ˆˆôöíØ},='@,[sàR{Øz"K)¾Üy¯Ê9ð›‘<~ºÍz"‘§÷ ¤RlwBž´×Þ×ÞçÐ9Ú fh=‘ˆŒ03; 0{aY¨¡Õz{Ú ÷Õ‡Z&çnq ëoîéw[O$2‚ô”T@’/xk¯ì$<9o=‘=íýûè´ANƒf¨IÍþv–Â3/mþüÀqëq’…öÂ#>üìè„çK8“qÓ}ëÞ¯ôöYO$2"ôo#½Ép’œ{Nª“íÖ% íýGÐ i†œ -‘®h=ŽˆŒˆë7zÞ |›–Q<>³äÝMßóW뉒ˆöBÜ¥«ªÇL[ÏÉ<1scÍ¡³Ö‰$žÞƒâaäö“³6rÃIrò\{ÿAÚûýqC致Dº"QFÄKúnßùäËߟzqÑWPTyáâ5뉒ŽöÂ@¸-³|ÌáðËž_zæüë‰DIïAñ$²šÄv¢› ×ÞïO{ ܺ"‡Co¤=Ò!­'‘x…Zg¾¶Ó)óõ¡ëq’”öÂàj}zö&ŽhÌ´õKWU_¿Ñc=‘Hbè=(C>“Òd5›Ü&½­'JRÚûƒ£1Ò9":$MÒz‰Ñ…‹×–¬ØÇ·œž(Ýókßí;Ö%/í…!qJ¶ÿ0nºƒŸYØù“n”x€Þƒâ%$3ùÌ•&«Il¥ô ´÷‡Äý¡=Ò!9(ú$­Òz"‰BgWÄ<21ËŸ–Q¼ÒW×î¶ž(Ùi/ w© ¨’³â79wK}¨Åz"‘¸è=(Þ@“ÉN8“ÒÚûCÒÞ&îM’>I«¤[Ò0­'‘¡íýúÄ”9[I¹üŠ3ç¯XãÚ QijþkF^Ð)¹‹vµþùõD"1Ò{PÜîR{˜v™d&Ÿ­'ríý¨Ð'i•œ “ži=Žˆ ¨±©mîâr¾ÖÌüíµ‡ÏYã&Ú 1¨ª=™žàÜÆf/_[ÓÙ±žH$jzŠ{‘ºd/ Ì&Édë‰ÜD{?tK&çFÛ¤sZ#"¹rõƲ5øB'eoØ\öËÍž[Ö¹ŒöBl¸i«ýÓ Yþ²/~³žH$:zŠK•W5ºÜ^˜ÖÞ–ö~l¸iôLÚ&§Gó¤ZO$"}˜Eï}£36Ú ñàÖ½òÆnß³/p´ñ¢õD"Ã¥÷ ¸KÒ:‘KöjïÇF{?Ü::'Hÿ¤…ÒE­'I]µ‡ÏM·ïqîâòƦ6ëq\L{!~V”ü Uq½ÅEÈU€NÌ’·¤®õD.¦½?š'ý“c¤‹ÒH­ÇI9§š/S¹ù§ÌÙº¿®Éz×Ó^H”òª†‰Y~3-£xµÿàÍž[Ö‰ FïAq²”D%W¹®d,Ik=‘ëiï' -”.ÊaÒKi§Ö㈤„Žp÷J_³|Á#]뉼@{!¸“Ë×ÖŒ½×[!PU{Òz"‘é=(ÉMÏ pQÉUÒU{?!´÷ˆ;I#¥—r¤tTšªõD"žéíÛ±û˜³–¬Øw©=l=‘wh/$÷3wÑ.N•ߌ¼àñÓmÖ‰ü½%™8ÛN~:AJ¢jï'ö~Âq?i§œ*M•¾JkµžHÄkêC-ÙóKùÊf/, 5´Zã5Ú #„{;9w‹Sf Š*;ÂÝÖ‰>stream H‰ì×ÿOUuÇñ¿!Ó°­Í¥-·Z",˜iζ¬héÜœÙt«Í²Æ¦µ–Mß’.©Iˆ¡fÆ0Ç µ& +»³-„e*1â.˜ACƒA| µ§;IJ5Mñž÷9÷¼»cöSïóù¼Þ¯sé’;Žk¾åþ þºôÿ Œp]kêÒ"žmrZaM¸Åz‘ñÓÏ¿-YSÂÍšžÚSvÂzœØ¤½U¡ŽÅ%fó„§ÌÊzk[Íè…‹Ö‰ŒÙ¼ã+N&­CBfn¯%-9™$'ùi=QlÒÞ*ú*­•'Lƒ¥ÇZ#âc½}CBU¬~üƒÿ´ž(fi/D§wÕú“â3xÎ3RC•ÕÖ‰\¦ïAñ²‘„äL’–d¦ö~ôhïG›J¬ÈÄ}T^?=åòRX²¦¤)rÎzœ§½àŽ3ÍÉi…]i벞H‚N߃âäáCÏìt⑜$-­'ŠqÚûî ÁÒcyÔtZš­õ8"¾®kM]ZÄÝIz² &Üb=N h/¸©²ºñ·ßáOŠÏXµþ@oßõD\úsd IHrÉFÒz¢@ÐÞwm–N˧ßÒr­Çñ´³=Ï­+ç¾L››[ðñ·Ã#£Ö…ö‚Ë8Û›¶ÖL™•ÅcKÌÞ¾÷¸õDPú[¤ßÔ9ÙBòTÔÞwö¾Ë8Û4[ú-®K㵞HÄsú†³òkoOÊᚤgêî´ž(X´LpΗ¾¸Ÿ'ÏïîGÞ­ ·XO$£ïA±Bâ‘{N’„Úû.ÓÞ7Á9§åòäi¼ô^Ú¯õD"^Q~øÔ=nåv,^½ï‡¦_­Ç "íC §Ûg?žï”¢…+öœí豞HD߃â>RnÑÊÐ#ýÈ@뉂H{ß]—ÆËó§ýÒ­Ç1Vª}ÁòÝ܈û½÷yU£õ8Á¥½`®ä³ïïHÞÌ[¸5!síÆÊþaë‰$ô=(núcèOò”ãÔ‘xäžõDÁ¥½oŽÞKûå-ЄéÃÖãˆè<ß÷ò¦ƒÎFÈ+ú†a=Q i/x·àÕœ/&ÿÝ”v—ÖYO$±O߃â2d㼑rdö¾-í}/àÐ{A+¦$â’á‘ÑñÃÿüë¿[O$Ú Âxlå^^¿{n«;ù‹õDËô=(.h8ÝNš9±F¾iï{ö¾wp#èüº1 ™žl=‘Ht<úcââ÷9ó –ï®?Õn=ŽŒÑ^ðšãõmãõ)í…âÎó}ÖIlÒ÷ DÙE‚9QF¦‘lÖÉí}¯¡Óy)ôdÚ²õ8"QÑ9·xõ>ÎùÌù[Š+¬Ç‘+h/xÓö½Ç§&åðj&'d¾:2<2j=‘Ä}J”WoæU‘]0rŒ4³žH® ½ïM4dz2¯†ÎLs¶Gä¦éî\—u˜¥—˜•_Û?0l=‘ü›ö‚gq_Ön¬œŸÁ š67·ôàIë‰$¦è{P¢¤"¯8Zd ¦½ïAÚûžÅ}¡-Ó™iÎôgZ´õD"2zábÑþðlú§‘¶.ë‰ä¿i/xwgÞ²]¼#~sž(8ÓÜi=‘Ä}ÊÍE:=ðÔ'¬H-í}ÏÒÞ÷8îÍ™wD‹¦KÓ¨­'¹5á–ä´BN2Ãu­ÖãÈÕh/øwê®Ô<§h-{é“îžAë‰Ä÷ô=(7 ‰D.9ER‘WÖÉÕhïûýy¼KëN‰¿DÚº–¿RÊéžÚSvbôÂEë‰ä´ü‚Û”»óë¸ÄlÞ×m³³ø·î—L„¾eâþ™KüU.ù‚ö¾_p›èÒ4jÞ횎m=‘È5ôö mU±&'d¾öö—ü§õDò¿h/ø 7kEz¯ŒßŒÔPeu£õDâWú” :t´‰râˆ\ÒÞ÷ í}áfÑ«i×tlš¶.šxVqEÃÌù[ˆ—%kJš"ç¬Ç‘ë ½àGgš;“Ó 6oÙ®H[—õDâ?ú”Fæ>stream H‰ì—íKÝuÆÿ†6× „ðE,ÝL![F‰d䋆i0¦5XŒ‘$©3űÓîAR¢¹ð·V޶&ÊrÚô™Lš‰†“ ‡šu³Ïö‰27ϹÏù}¯?çå÷÷¾®ë^Xþ¥£û¯´-µ<]œ”U}ò‡?¬åˆesúÇ~ÆÇ¯µ±lšNõÄ¥V0¾U Å[w5MN­‰h¢ü³³<~­…ˆhŸÙö~Ïáñà?¸µ"±l”ûÑ M›¾ÍøèÞ4pk9B, Œç¼D¨©ïÎÎ[+‚r!ªaïŠöµ®ÙXÊc“˪êÚ­‰¨A÷ X.8 >óÁspå~”¢ÜjØ;Z7Ý›!ÒÃiãÖŠ„£LÏÌ}RsvÝÝPØ^Ô<:6a­H<8ÊÀf40G¾øô½ç;¯Z+Q€îAqÿ´w â-žÉà6Êý¨F¹ïØA8s¤ÓÉiæÖŠ„[|ÝriCÆ^`æ[u¿õým-G<,ÊßÐÝ3œ˜Yå¶Œ¼£C#ãÖŠDD£{PÜ8 ~â ƒÏX+‹rß7ÐÃiãL“fN?·–#œ€W÷RîQ½:Ÿ¡\ð‡u®O)g¦«Kv–¶LÏÌY+ŠîA±4¸Ç®²“8 ïWÁ[¬‰•A¹ï3èä4sfJK§«[˾etlb{Q3/m]rYÅÁsj˜~B¹à?ØP.Aµ8±4ºÅà¸/'ÁO”û~B¹ï?ØPú9-ÉÒØéíÖŠ„¯ÎÎ×Ôwx¡_·V$Vå‚_a[3òŽ2\¾Ä̪îžakE"²Ð=(þ¼bÓËŸzÖ‡(÷ý‡r߯°­tu†Ko§½Óá­ ?Ð|ærRV5ï*mKíO¿ YË!A¹àoÎw^OßëU»ì‚†Ñ± kE"RÐ=(îaìÆ.áÙ¾{X+!A¹ïohìôvFL‡§É[ËQLßÀµ×ÞþÒK„†@·µB” .PU×›\Æ ×l,-Úל·V$ìÑ=(Ápü'WàÖŠDQî»íÏ éó´zk9"ʸ91³³´%&±dmÒî+¿›œ Z+¡E¹àìòÖ]M«Šw\jEÓ©kEÂ݃Âã›Ó½xÀ%”û¾G¹ïì2Mž>O«§ÛÓð­‰(`þÖí#{¶—ÈÝq|`ðºµ"” NÁ^oÎ9ÄÄùR²?ïíµV$ÌÐ=(p|À3œA¹ïÊ}§`¯iõLœ†Oϧí[+‘˹ z¡ÀokÛk9"|(äÄ÷¿?žVé•À7w4Þœ˜±V$ Ð=è2l}Þ{Ç=À ðkE"|(÷„n¿ØóéüÖrDÄ10x=wÇPˆK­8ÒxqþÖmkE"¬(Ü„M¯8xîÑM¥LmÒnþk÷]C÷ ›x»ÏÖ3}@»ï Ê}7aÓéù´}¦Oó§ÿ[+ÁäTðãýg…˜Ä’¥-7Æÿ±V$ P.¸ [ŸóÎW<¾'Òö´¶]±V$‡îAaÇŸ|n·òì¾rßM”û.ÃÖÓùiþô®nkEÂ’†@w|ú^ áÕmõ}׬å3” ¢·ô™Wj¼Š¸9çÐÀàukE"èt öšíöÖœ}gë­ 3”û‚æOÿçp pXËt]~þõ;¡”UÝ|æ²µaŒrAxkþ5.µ‚ǰ*¡øÝNLN­‰Ð¢{ÐØe6zub ãfÇÙtkEÂå¾ðà àà1ppXËabhd<¿0ÀÜ×§”ï;Òœ·V$ìQ.ˆEð„*OÇÜí±ÉeUuíÖŠDÑ=èÕ_t°Ë š½f»•ûbA¹/þžÀEÀ]À“àFàR°V$BÈôÌÜžÚóÞ¸·5ŽMX+‘‚rAÜþ]ÐÀ«à{êÅýí]ƒÖŠDHÐ=èoØ\ö×[d6Z¹/Qî‹{À¸x\ Ü \ ÖŠÄÊø¶gCƦü‡ã7þ`üžöw endstream endobj 328 0 obj <>stream H‰ì×1€0À@ A$®X+3_t4wC>stream H‰ì×ýk•uÆñ¿!ØB)èR•…JÜ(–dàˆÈ4t¿h¸ãikiæ2iNd“é2ÙP*ç ­YÛ|2aâ˜ÒœíñÌ©½õ.¨°Óvž>÷}ŸëÅAê·û~¯ïç¾>ô¶ïÏ^{ê…íük=ˆ¸KCSÇ쥻¹ü^yë`WÏïÖIœ~ù#‡Ë¿ÖƒHœõÜî'³NxI1Y¶žHÜE{_žè—Ë]9kʸÏ¿üùñï.Y#qÓÜÚ›Wîœì7'[¬Ç7Ò^ʪ¦-(䆤 òC§†GîYO$q£>è?$”œ’VN–ä’_ë‰Ä´÷%ú­Bƒ GX#1éíz[ §™ž –Ô †­'—Ò^Èx=6n­žü×få‰_­'’øPô™ªš&Ê™’V2«½/ÿE{_"ãõ ;Ð ¸'´ :…õD2aáѱ½2qˆyùßÞì곞H\M{Aƃ—d雸*üæ-/¹x©Óz"‰•ú oGRéÄ“œjïKdÚû2¼$ô® ‚fA¿°žHÆ«¶¾m~îœ]ÖªÒú†vëqÄ´düxaf.Ùé|v®zïpoßõD=õA ƒ«7q"I6I¨õDâÚû2~´ :†~¡ÆýZ¯ßZ¹¾’󚾸øÐñ‹Öãˆgh/ÈDí9x~êü\›)sƒÛ>« ŽYO$ÑPô4rGúÈ ‡HI¥õDâÚû2Q4 ú׆®Aã°GžànÿȇÅ?¤ Øüÿk=‘x‰ö‚DwfÝ–c“ælçò<÷Ò'Õ§¯XO$¦>è]$nFÖ£o32Hµ÷eB´÷% NÝ kÐ8T7\eìþƒ_ÿ<}ñ£¥°r}åõ¿YO$Þ£½ QãÍYøÚ>î¿+ö]¾Öc=‘L€ú µ^¿E֜Б>í}‰‚ö¾D7‡ÆÁý¡}ÐAh"Ö¥ºú†ö¬U¥ÎgXm}›õ8âUÚ £êÓWfds‹&ÍÙ¾n˱»ý#Öɸ¨z É"_¤ŒS#qäÎz"ñ*í}‰½ƒöÁ-¢‰ÐG¬ÇIQíwÖn:Ê)d,*Ú[qaìþë‰Äô$v¼Bí®27È]š:GñWg­'’ÿ§>è!;÷Ÿ#Yœ)#kÚû í}‰¯„&Â]¢•ÐM¬'J!ƒá`I]zf(-P°9x²·oÈz"ñ<í‰^¤ÕŽpøÍ\²³¶¾Íz"‰D}ÐÈirbE¾´÷%vÚû/¼HôZ Ý„†BO±žÈÿªjšfeï"¹yåÍ­ÝÖãˆOh/H|]¼Ô9oy‰óùºäõý7»ú¬'’'St9²“ýF™%2E²¬'ŸÐÞ—ø¢•ÐM¸TôÚŠõ8¾ÕØÒ™³æÑR,ÛSsæªõ8â+Ú ’l„gqµ& 6n­ [O$ÿ¦>èZä…ÔˆéûJâK{_†BOájÑYh.ÖãøJÏíþw?8ÁßvÚ‚ÂOKÏ Ü³žHüF{A„÷*?t*íñ7mzf¨¬ªÁz"ùõAw")ϼø1GCvHö¾Äö¾$ïm…Σ¿Ðb¬'ò<ýI%9´$¡x»róʹcüf/Ý}¾ñ†õDò'õA·!dÄ ©ÑÞ—ÑÞ—„âí¢¹pÇh1tõD^Usæj`Ùþ’9kÊ[:­Ç?Ó^$øû‡î«oWèC× Ô݃D¬xç’B^¬'?ÓÞ—$ ¿Ðb¸i4zõ8ÓÜÚ›WÎ_oVö®ªš&ëqÄÿ´$iJÿôtfˆû–(ȹg=QJStƒðèY œé #Ö‰ÿiïKÒÐeh4Ü7Ú ÇzèíÚ<ÉRHÏ KêÃÖIJÐ^dâeÛ¸µzòã¯ßŒEEl ë‰R—ú 9î?)àH¹ÐÞ—äÐÞ—dâe£×Ðnè84úŽõD.5vÿÁÞŠ ÎRX»éh{Çë‰$…h/H$0²ú endstream endobj 329 0 obj <>stream H‰ì×1€0A A$®Ò"3)a˜Û-¾þöæVÆymûñì×Gx•hÒƒMz I4éA€&=Фšô @“hÒƒMz I4éA€&=Фšô @“øŸ[€(_Ï endstream endobj 166 0 obj <>stream H‰ì×ÿkÔÇñ¿¡5Ñ Xl`™Ó%•£%´4B™ J_0“¥á¾˜ë´©sjÎ/¨‰ÓlЖQz¦Ö1 Ý¢¶Ù9ÌÕ×sk³ÛÖs}L¦nîîÞŸÏÝëÁqèO÷އ׽ß÷‰†+¿ý™³¨ê‘gŠxÍž_ÑÔúGT>FîkÓÎs<Þ­ID-mÝ$ßù ð]àa=‘$o¾k#x¼[" „-·xÕq‚—’UVyèBxhØz"wñÚ3ówñ|²î \¼b=Ž$ݱÂö›ž³ÅùI\°âhO°ßz¢Ä¢>h‚œ“v'öäŸoõD’pt÷Å M‡¾Cüè>Ú~ŽŽÎ› –ᙤÎõí;v)<4l=‘$"Ý1ÄÞ+Û}~jF)!œ2«¤tÇYm˜QŒ1²ýaå9rÎc'ó$_iºûbˆ½Gë¡ûBzmÈz"3½¡u¾SœƒäôbþÁ­'’Ä¥» æØKלHšYDÓ²}µ§/[O”Ôc‰T“m89'íºûbHw_Ì9UˆDJÌ*t¸¦1uîèQX°üHkÇuëq$Ñé.ˆK´´ugæï"¼^XðIGçMë‰âœú`läì…{œ`“prn=‘$:Ý}q zmˆ4ÒŒèGÖãÄHàâç(däíðÚ­Ç¥» ®R{úòÏD&“f-]s¢74`=QÜRŒ6ÒK†I2Ï™T“më‰DFéЉhFd’–DW²'Š®v—­ýœ¿4%«¬òÐ…ÁÛaë‰DîÐ]·aC–û§Ì*!™Óž-Ý~ Þz¢ø¤>UävÚœöïQXYX×ì·žHätÄØ–¯¾ý)áä5=g‹?Ðn=Q¼QŒ’³õ$Ö‰.ÖÝ·ÑÝwb[Ò•'½‰öD‡²ž(2>;Ù4#wWÞ²ƒ?·þn=ŽÈtÄÍ›¯Íž_áü´Î]²ÿjWÐz¢ø¡>qä“”:q%·¤×z"‘1èјèMD”E“²gR~léš÷ú^ço©ùºÙz‘{Ò]÷;x¢áñÌMõÑôâw?¨ýkàoë‰âú`‘É÷6|I>y¤d•ÄZO$rOºûâ~´':A¥OѪ¬Ç™°î¡•…uÎEؼç{ýn—Ó]O`—®ÝøUò¿·÷V_´žÈóÔ#…4’I&ù$¥ºûârºûâ ìRš”³]éV4,ë‰Æeðv¸|_ÀûÍ÷k®v­'y0Ýñöjî’ý$–×Ó/oml¾f=‘‡©N œ‘»Í $ÉÔÝOÐÝa¯ÒªH, ‹žEÛ²žè~êÎü’‘·ƒisU54é'Šx†î‚xN}CçSóÊáùoî¾²žÈ“Ô'ƒÔ‘='„¤‘LZO$2^ºûâ9t+¹¥mѹ¬ÇCkÇõWÞ8Ä„O¾ôñášFëqD&FwAÐÂî62ÚYÌ>÷nMë³j£"‘¥» qƒ\¶ûüÔŒR"Í;ÿÖ–¾õÁR¢$.éîKÜ`'ÓÈèeDšŽFS‹êÇÝê\ç;Å9HN/^]r²74Չ݉3ìç×VV“j^iÙ>eû^ÔGFþ`zFðO endstream endobj 330 0 obj <>stream H‰ì×1 €@A A$®¾Ef<|$;S\}íÎ °nœ×¶Ï~}€WéA€&=Фšô @“hÒƒMz I4éA€&=Фšô @“hÒƒMz I4éAàOn—Ï endstream endobj 167 0 obj <>stream H‰ì×ÿKUwÇñ¿aeX Šý°².‚“j0ùƒƒD6X£Ú›cPm±`‚_®^¤d¥KlSȹ9 :•c6D·Z²¶lNrä\‹š¢–×nµ²šIÞëûì|ž„ëõ}îëý9oß÷îý·¯¾í_•YþÄÚB]/æ7ŽOÍñfàD½­®Ö«u!@|èù¼«¸5)µ(9T²¯üäÄd4¥¾©gÍæ:;[w6ô \MÄŸ¬0H½ý#é9‡½æ7æ¼n]‘ï”}Ø¡/G¯Ö…øŽºE=ã5ºH½d]OÌ}’v4mjêmmmÚÝâøÉg~ÊÌ­Ñ'‡²+[¾þ%ŽŸ øsÖØr>%#¢_²®ðõ÷¾˜˜ŒZWä#ìƒR‡¨OÔ-úfÔ9ê늀øcî#À´¯ikS‡kƒÓ·ÀOݱ·IŸ¶2½¬êhwt:—"¿a. Øôô.¨hOJ-RŸ/O ¬ë²®È/ØÿE½¡Ñw¢nQÏ0÷TÌ}›žÞÚÝ´Á©ÏµÍi§{Œ¹5u;R}zÅÌPÈ/h¹6÷:ÿ`.Àz’ç¼Z¯V×õÔ³]ç­+²Ç>xŸúA]ᵇú„¹`cîÃz’kS«k§Óf§ýnþ¿{¬õç§³>Ðï>÷ríO}&®HÀ'˜ pGÏ…+kgžðº²¶Õ ZWd‰}PÔê¯%Ôê늀„cîÃÚæ´Ó©áµßÍóýÏ¿Rç½_[a¢Ë|‚¹×|Ôxvez™Ú>)µhO¸íÖÔmëŠl8¾*w¥¯З ~PWXW,æ>\£Íî‘ûàȵñü‚iáÒªgÿ7€›˜ pžóo~¹ôŸ] îØ9ëŠ ¸¼*qå®ÛW¨˜ûp sšã9ŽUíNɈè\ìØÛ44<º˜…~À\€³ôÌÏÚV«þ×µaË¡ž W¬+ZTnîƒJYY{¡+}æ>ÄÜîkûæ×Pv¥NDfnMwÏïÖå6˜ p\Çw¿­Þ´ß[^xí“£7­+Z$®íƒJVùzA+qån]`ƒ¹HßÀÕ­;tÖl>PßÔc]`‰¹ÈÁº®åia…eë‹ *Ú£Ó1ëŠÎ}Pi*S%«ûUÊÊÚº"ÀsŽŸz§ôDRjQr¨d_ùIýh]`Œ¹x4¶ï>¾d]¡NDJF¤ùÔEëŠË‘}P9*MÝ©’U¾Ì}€¹gÅîÜýøóž|¦\Gॷ¯[Wøs˜MÓ!3·F‡BWzÎáÞþëŠ%ðû ²S‚^”Ê”¹x˜ûpSçÙËÞPÐk{ç%ëra.j>uqUf¹·Jlß}|l|ʺ¢ø ð>¨¼”šŸrTšÖ>Â܇›Ôö)‘šOÏÄîܵ®ðæðPš¥UËÖë€$‡J"Õ§6A¹*#%¥¼tkÊN ,5`á˜ûpÓ®âÖ£7­«üˆ¹ÌA³#ïÏtFt­Þ´¿½ó’uEq¼}Pé(#/,¥ÆÜй˜¹>stream H‰ì—Ïj1Æï {èèbH žhôg$µ'›´´`šâôà[ÎÖ54ë²Þ¶øÚ·êµÑ—I%·±ÚB !9d~ b˜ý¤Ñ§Yöò’a†¹/¾ÿøù¾¥ñ¡7Â0 Ã0 Ã0 ÃÜ+ü?È0 Ã0 Ã0 ó8áÿA†aæñ0¼hÏcëjöª®£×ö,e¦qÝ7]]½©+)NÒ!(´N¤€Œ“”©­ &R¥R€>G9¸[§¬ bó:´rûÌ6u5Dôà•U‘ÒÚ‹‹ºR:O'-9@ƒ(&ue]…ä÷Ê2©I)¹Uî¦#! ¦‚“²R)ýGý”}ŸáìhÔõÇËy¿\µ±Ûˆg9w0ÄdGº@‡âè´ï–íBŒÇ£ùüóÅtÕÇ,>O³ôy²c,ì"‚,xïÔ5³^9HçòŒõ`Pá^Y&V ‰Ü5³ZJ I&'¯ê”¿jßµÑéí?‘QÙ<´MÍ/Iù»£§©}Jè qëÞ"Q“'p>õ4Ÿ¨K¯ÿ¨ÿcU F{S§û¢»õË¢»ÜiÑÉx1'qÓtÃaJ ÞÆEó®‹Ëù¢.ÖñK#bÛæšOé•Xtͺ_uXX}Í™Í endstream endobj 168 0 obj <>stream H‰ì×ËKUQÆá¿!/]F‚!oT6,„‰3)¢pâD‡:¨‚÷Q2lbå@Ž$ÑA”X!‚H”" fɯG-{sƒ­DËÔ³×Þçü64Xïz‹o{{½¯>žºP¦¿ü? ²0€ÿ57¿”“ߦ‡£/1«apxÊv¢£¨iz©üúk;ÈQ¨s5ïüú-ô‹ØNøs`b.Gc®$ÙyO}·’øtTÏjÛ©]ýëW°ðæ>ÀÄ\Ž£¹cèÌ¥j=¢˜äò⪞µõMÛ‰Ëwû ºUÃêY±Õ¹š·ð%æ>ÀÄ\Žiy%XXÒ½³§œ¿RÓÑ=j;Ñ¡økT«êVÕ³ÚVç¶~Åܘ˜ À‰˜ž \»Õ¬×¤/5»qdlÆv¢ðË>¨&Õ§SìÕ›ÍêÙv"Àߘûs8Aý ™uÎò’[оXµè@ÞßÕž:tÊT«êÖv" 0÷&æpâê[âÒ*õ²bS*Jëû·¾ÿ°h^ÞÕ˜zS{J¨&ëž¼¶Ì}€‰¹„ÂâÒz^QgTR™ÞW|FmW߸íD{yvTWjLÙÔž:T“¶a…¹01€ÐùôùkzÎc=1}úÇäÔ7Û‰~óà>¨~̺>L~±CÌ}€‰¹„ZWßx|F­ZTRY^QçâÒºíD¿xjT'jFý(’ºRc¶a‹¹017¶JëûcS*ôÜâÒ*¶ÚNä¡}Pm¨…Q?jI]ÙN„3æ>ÀÄ\\³XÍ-h׋ӗY×?0a1ŒöA5 œBÔŒú±ˆÌ}€‰¹¸ldl&5»ÑY‚²n·LϬİ»êÖº»S‚ÚP'Vbˆ¹01+:ºGÏ¥×èõE'—–t-¯]`kÔMu_ÝZ§«õàr Â1÷&æ`ËÚúfqUOÌÎftörusÇ›§[ÙuGÝTçêÖº»pótÛÌ}ÀŸ˜ €]sóK7î¶êêKÌjx÷~Ús]Þu/Ýιæõ;­ºµ;ç؃¹01/žÚ]—ròÛ\X—\ÛuÝhwáÕMC}"€¿`îLÌÀ;šž¿=}±JO2&¹üÞƒÁ­ÐåÂ>¨ü÷k{u¤{=zö&tg8$æ>ÂÁOWbûS endstream endobj 169 0 obj <>stream H‰ì×ËK”QÇñ¿!År¸t——Ä…™‹ lå¢0аEA…I´ÉÐIScºº0H3, ÉèŠIˆ4JQD1tÊ1Ë~ñBœèâ8ó¾sëûáeÞ9ç9¿YžÕUvé6¶ak¥>ÃÀ‹^ßñs=ñéUº˜I¹µí÷^9tP͵':BŸÕWrå×ú/úGú_`]èû}ˆ@ã³ùÅͺ›z²ö\óØ~„só Òfí½j…׿бý£ïLô b ¼xŸ’_o VÅÇnÍͲ±¸ó *§xËö‹Êocq¶ ïLô ’­|ýV{ýé¦mtO2\ú®7¶T¶w´rnÌt©¦ÒÚ˜€½èû}ˆ|––uêªêIΫëyø&øš6΃ʣTV¼’S·•6øšBߘè @´óä5YcW~qóøÄl0Õl™•AI¬Hʦ„ÁTô}€‰¾D—îþѤÜZ]Û¸´ÊC§ï,z}Õ rÔ¹‡Ë»”AE”G©« Äèû}ˆ:¾å•ŠÆ„ —.obvµ»u0€"Á̃:Qçj»2(‰òP@XÐ÷&ú¥fæ¼ûŽÞÔýÕ“²£þùЇumlÔ)© Ö¡E¥mʰ®íÂŽ¾0Ñ€¨6<2•¹û²5 –´LNÏû¹q½ó *«¾uNÔ¹FNô}€‰¾Ä€íC›sjt—ãÓ«Ê\½Ÿ—¾¬¹ÅÿyPÕTS•µ^§è,;"ú>ÀD_bƒ¦¶òê>ÿ§6?çAsÒT}&M‘Œ¾0Ñ€X29=_XÒ¢K­'m§{xdêo+לµ7}—Û*¥šªìLd!Eߘè @ì|9‘ZÐ`rE¥mž™…ß×ücÔzí²¶«Žª9@ˆÐ÷&ú«Ü­ƒ‰ÙÕºà ®ŠÆßòŠùëçA­ÑJ­×OÚ« ¡ Àqô}€‰¾Ä°E¯¯ôlw\Z¥®yRnmgïëŸ?ý>v=ѽÔú#gîjo8"p}`¢/1o|b6¿¸Y7]ONQÓè˜gõ×yPoôÞZ •ZîÈœBߘè À¢ïñ»ä¼:kèÛ¢ãü¥}Ñç“ÖKýzÿÑÛpÇà,ú>D¶ï |çÿ endstream endobj 170 0 obj <>stream H‰ì×ÍKTQÇñ¿!_ÐE¸)rÔ)‰$ÊÀaD n‚Ê… Û…£¢™¥(º({C(\¥TЏ‰LÈ$D"Jʘej¾ô³SáÓqæÞfü~¸ wν÷9ÏæðãY^vÖ“Î-»‹õë𾜷°¸TQÛ—RªSãñúµ¢u=u»A!Gîlä°ÙLúflÐÁ7—îµâvSBîlä°© OÌ©÷ƒæÒŠÖÝn €È}€\6‰OŸçò‹Z£WÀmû*NÜ×Í邺×ÖõTï¸Ý&€Ð"÷6rØ ª›ºã÷–é°Çx¼¯<›_(¿ñBõ«{­h]õŽÞt»Y!DîläÙº_ ï<|MÇ\WÖ™[ã¦Íº4µ®§æ5½¯¯Ük@‘û¹Dª±ñGs›ü#^Oߨýô—yÐÐ;»Žü3rUÁÙ–„¹°‘ @äù2ûõBÙãW§{kjyý—¿¿óÇyÐÐûúJOUAuT-ô-p¹°‘ @„i~Ôk¦¹h7¿¨õoÓÜ*óàò÷‰RßFÿœ(o?|ÂŽ8ˆÜØÈ bôô&gÖèDëÊÈmó­òòêó ¡ ªc ª²ê»eN#÷6rˆ“¾™ãçî˜Á-!½ª½k🟬e4TM5Mñì³ÍÚ+-p¹°‘ @X››_¸tµ=6©D9~OiuS÷?\ûÀF.ÿ¹‘1_ú‰z3p%gÖôö¥l°æAãÍ»÷êÍ4©nÕsPÊ:r`#à¤o v™E endstream endobj 171 0 obj <>stream H‰ì×ËK”QÆñ¿!/dDnŠ-A,fà"!£VBAåR·™H¢Ñ…$¡²f‘t#܈¦TR ‰$‰Bó6f·GOĉìb¾ï{^Çï‡a–ïy·¿¯_±“3•5‰ôHtÕæãë ëã·ú=üø‰3÷õYý{øM%TN}V™•\ù=ü8OÜ~8¨Gª×A¡À\©5Þ½&?¦ç™‰VÇ:¦“³Þ~ß}P”Si3æwجü˜náí÷,s`c.aÓÕ3´±¸IS¿Ý/¼÷ãŸöAC™•Ü\AwÑü8À`îlÌ <‚\£|Ý`[‹ÂÜؘ @L'g«c‘¨ÞcV~¬5Þí÷‰샆î²&?¦³t;ÝQ7õûDÀÜؘ €sñ[ýë ëõÓ#ÑÊšÄÄäL‡¶Šn¤{¥Ïo»º©îÀ¡ÄÜؘ €COž¿É+mÑÔ¯hÿ…Wãä>hèvº£¹¬nÝ70ØÑ~`îlÌÀ‰÷£SûŽ^3ËQvQcç£~4tSÝ×\\ ¨‡€+s`c.ûôùKÝé{™¹µzz«·ÔÕŸ{à$†«}Ðh8ÿPwWõm¾«NœÄV æ>ÀÆ\‚”¸3°aGƒ]ZÎñU×ÇÆ“®’¸ÝEwWêA1Ô‰šq•XQ˜ûsÆË¡wÛËÏë¹éWPvöÙàˆÛ<Î÷AC=¨ S˶=çÔ’Û<@ÊcîlÌÀocãÉU×ÓræVžõÛO&î ¸N4'$û ¡NÔŒò¨%u¥Æ\'Rs`c.¾jnëÊÚZ§W–™[{ìTçÌÇO®}ª}PÔŒúQKJ¥ÆÔ›ëD@jbîlÌÀ'^d5ê}éW~¸ýýè”ëD? Û>h¨¥½G®šÒÔž:tH5Ì}€¹xîÕðhIÅE³Ôä•¶ô>}í:ѹjL½™Õ¤útHÌ}€¹xh:9[Y“HDõ¬Öœ¸rã±ëD¿æ}Ðh¿Ù§R}ªUuë: ˜ûsðJk¼Ûì/‘hu¬#äûKø÷AQ‡jR}*ªºUîËs`c.K×ûôõ¦MzJú•T\ùà:Ñß-‹}ÐPŸ»*ÚL½‹›Ô¶ëDÀ2ÆÜؘ ÀRŒ¼/;tùǪÒÕ3ä:Ñ¿ZFû ¡nÕ°©Z«y׉~ñM€ÕÐèÎ endstream endobj 172 0 obj <>stream H‰ì×ËK”qÆñ¿!Kr¸0j×ha‰ ±6-šV. ![TD jƒb%h`è ¥‹PiFWÜHB¤P’ˆÂ Š¡–c–=ñƒøQtñ2ž™y¿†A\=ó>çåpÄ×õ|pݶr}[$ö°<±ù…ó—mȮД‘©kî±N´4UõO•\ßÖA–FÏYO[ÉõäõüÕ‚u" ɰ÷>ö° ­÷_gæWëÝI •¿pof6fhÉ’ô=m=s=yåW êÂ:LØû{X’Áè®p½Þ} ‹‡†'¬-SòÞƒŽž¼ž¿+bçþzõbHì}€½ü§É©OÅÇnº$« ¦ûå{ëD+’ì÷ £6\r¥¨udHtì}€½üÓÂ×oÕמmÜqQ/‹¾õ·þcj¥Rã\LÑv€øaï|ìàï:Ÿ¼Ë*¨Ñk¢ÏÁm§ç¬­Ž”¹õrèd›«I}=xüÖ: Øû{ø“¡á‰ÂâFwbä…£Ö‰VSŠÝƒŽ:RS®2u§­ ‡½ð±€ßÍÌÆJϵ§…~œ™ùÕ·:ÞX'Z})y:wö«5ý:5xäì]µiH ì}€½ü¢®¹'#7¢÷"=§²¬¶;6¿`(.Røµ¦îÔ ~£ÚT§Ö‰€DÁÞøØ ÀO=¯†·î¹¢7BŸpiKt|Ú:Q¥ö=è¨Aõè U³ê×:`½ð±›**ir‡Cho]_ÿ¨u¢¸ Â=è¨MuêÊUËêÚ:`‰½ð±pŸç¾œ‰t®Ï®Ð‹°)¯êzk¯u¢5œ{ÐQ³êW?Y]«qõn°ÁÞøØ 2ÿF8UÙ¨!h÷ ¨_µ¬®õÃÕ»Ú·N`ï|ìS_ÿèö}W5üú•4ŒMY'Zk¼u­Æ]õšM‚u"`M±÷>ö‚f|röÀÑîزûò‹ÞÖ‰lötÔ»Úwc.mÑTX'Ö{àc/ 8bó eµÝé9•šùŒÜH]su"K¿Í€&AÏAS¡ÙЄX'⎽ð±í]™ùÕšö´PùáÓ·gfcÖ‰Œq:š̓¦BOC¢9±NÄ{àc/ å Fó šs} ‹‡†'¬%îAŸ¦B³á†DÓ¢™±NÄËr÷þwLcûe endstream endobj 173 0 obj <>stream H‰ì×ßKÕwÇñ¿a¥¸X° ™»êØYLvájó¢;!FÑ`ÝØ.¢6ÖMBçhŠ9£¤E?Š¡lãH[áilKª¶EË¢”!a`?DwÔ<îôãߨ¾…+Óïñýù~÷|ðE¤«÷ùòÌ÷y?zˆ¢S¿\mávý´Þpf|ÝæoU¸žâò†TG·õD©Ûû“^‹~Zâ¢N¼`ÖnúFýXO½ðc/ ’rÖïû¹(^£¼ K“ú]ÿb=”[¸'å•£fôrÔå zØû?ö¢'ÝÙS²´Qa멬j³žÈE܃/ fTŽ—Ð[ïïTQÖaïüØ ˆ’Þ¾{K+x_ãß©h¾r}Àz"wq¾”úQE^NêJuYO€½ðc/ FF³·¥æÆêùÍ÷êÛÚ/YOä:îÁ)RK*JïJu©1•f=0#ì}€{°÷Èù×—Ôªä‚XbkýÉìDÎz¢àœ:¥®T—Þ˜Jk>|Îz"`úØû?öBílWß‚»Ô°žÕŽÜÉXO܃¯Ju©1/6U§ö¬'¦ƒ½ðc/ ¤ôå|Õº–¾œÿúÛMë‰B†{pzTšzóÂ[¹¶EZO¼ö>À½€Ð¹?þ÷gµßÄJ÷wwl»`=Q(q΄ªS{zêP5ªI뉀©bïüØ —¶öKóËêíÜXbã¶ÔÈhÖz¢°âœ!µ§Õ¡^£šT™ÖSÂÞø±ÿè_üáåªgÅG‡nÞ²ž(ܸ¡U£—¥úT¥Ö/ÁÞø±à¾Á¡±ÊªVï+wɲÆtgõDQÀ= 5©2½DÕªŠµžøOì}`6i#t]î·žxö\–ÈU7¥ K“ª´(^³»å¬õDÑÁ=8õ©JõVU¬ºU½Ö“`ï#tCé’²ž"ŸïøAÿã>­n¸“±ž˜{ÎJut—7¨Ï9‹¶¯ßrl83n=Q¤pæƒ*U«*VïVõªa뉀ç±÷á8ÝMºžT©.)ëY óÉÇõqæ—ÕíÜ&;‘³žx{ºñçݲÕ_©L=ú¥·ïžõDÄ=˜?*ÖðµÞÛÖÿbïÃYº•t1énR¢º¡n üe=Q`º.÷/_sPŸ+^ÑÜ~úªõ8À3Ø pÊpf|ý–cs=ù"]\Þêè¶ž(²¸óMõªa½dõ¬ªÕ¶õDÀì}¸IW’n%Å©»Iדõ8yñõw¿¿ýÁ—úŒ¾Ö{Ûzà)öÜÑt¨³(^£ K“ÕMé܃‡ÖE÷à,PÃ*Y=ëU«íÆg¬'ØûpŽ.#ÝGÊR·ÒÑã­Çɯ‘ÑlrÏó–ÔÄ›“'‡Æ¬'Ø pBº³§dY£RÔSYÕÊŸÇYÀ=8kÔ³ªöòVçªÝz"ü¯±÷áýyÔM¤Ë¨(^£+I·’Õ$à$ºU endstream endobj 174 0 obj <>stream H‰ì×ýkUÇñ¿¡œLÃèQM/‹µPÒ( ÷Ã"E–XHµ AÉ»§ËÒ,]ŽåCiÖ|`Á–š:qÚÐ|™™x˵\̱µq7w¯»›½å€aÎíî~ï9çób ô¿œóýø=ŸÛ·“*ÜÔž_°ë‘§Wgä„*¿:ïHî¿/rÇ®°ü¶D|ª¹¥óŹ›XB~&Ï\ßxáºõD~Qúi=ÏœßÖƒø»Í†;«ÎγùÖ‰OéîK* уhCl#͈~d=‘†Óמ­‚'·±®áªõ8â_º b¥»'¶heÍ¨Ì øøs¥Uµç¬'òõAì9ÛΓgóÙR`=‘øŽî¾˜£ûЀœD'²ÇR¼`óÎ3ã§”ñ4æ¾Snj·žHüHwALlª:ýس%ì^ZfpYñ¾ÞhŸõD¾£>h…mgçÙ|ž?) Ö‰¿èî‹!ú­‡ ¤уhCÖ¥„®HôýÐwÜ…ô@ÑŠ²ƒüÑz"ñÝI²ãg›ž|i[ÇÏÌùŸ·¶E¬'ò)õA[l>ûïD ë‰Ä/t÷ҦCß¡õ¼[²_•ç¿.‡oÌZ¸ƒxNœ¾v{u£õ8â#º ’4|ç½¹]À)B}0²à„‚të‰Äût÷%ùh7t¾Cë±'¥‘Í@îžÕÔÙ•'·G|AwA’ v+þ^Éþ´Ì Ë6&«¸bÇIë‰D}0…rÁë #$…¼XO$^¦»/ÉD£¡×°rtœ}G~±Ç¸åÛNdä„xn –W7·tZO$§» #­ªöœóÚ¨Ì࢕5Ý=1ë‰äõÁ”B.Há¥Rc=‘x–î¾$-†.ãüŸF»¡ãXOä2m=‹WÕòÇf—”×÷Fû¬'ÏÒ]‘sñJk w ÆÏ s>»öÇ_ÖÉ?ÔS!)NdÈ ²žHuv¥óáš·ñâ•Vë‰äÔÝ‚4‘)'\¤Œ¬YO$/ D¡•ÐMX*z mÅz"_8{þºóÑÈÝP{øgëqÄõtd˜º"ÑùK÷<úÌÕŒœÐ7.ZO$ƒ¢>è.5‡.‘/^Y#qäÎz"q+Ý}Iš}„u¢›œú±ÙzßÙ^Ý8qúZžÿ¬…;.‡oX#.¦» ÃñÉÖãc²ŠY¡Ñ“ W}T»·žHK}ÐuÈ)#k¼8rGú¬'WÒÝ—á£}ÐAX$ú­Äzÿê\{(=P”–\R¸·+µžH\IwA†¦þ‡_'L[Ãòðóê[_¶uôXO$G}Ð¥::o’8'zd$ZO$.£»/ÃAã wÐ>è +ÊÒG¬'’Ûá¦öü‚]äzü”²Í;ÏÄû¬'—Ñ]‡ÕÜÒ9ãõ-Îçèä™ë/\·žH†B}ÐÕÈésbHI¥õDâºû24´ ºƒý¡}ÐA¬'’{9ÎÎÛÈÛá÷Ñ“¿Y#n¢» ƒ×í+Xýí¨Ì ;3.»tSÕië‰dèÔ=`ëî³$‘÷H*É& µžH\@w_†€~q·kÔ5\µGî/Þ?°yç™ñSÊxSù»ÂMíÖ‰;è.È Ñþî~y.+Þ§/O·Sô’HÓ2ƒ¼MJN­'’T§»/…NA³`g2rBt ‡õDò7—îå.¤Š>Xw¸»'f=‘Xû[€€$öÌ endstream endobj 175 0 obj <>stream H‰ì×ûkÕuÇñ¿![8A0”!õÔ Ã¥Ñ ÊJHHò–I fÒÐ]ØÚr:/‹yC§¸Ê–¹”²©•c¶…ºåk“9´3ÎæÎÙŽÚ3¾ ¢9-Ï9ï¯ßïëÁ*þð‚ïç}»qcdßÿÜöÈ”µü¾Çÿkjîš’¹wÂOæ¼ÝAëDE[~äƒòÛ:ˆÄUIm:EJµR³Ö‰Ä½4÷å>õDÖ¬?::¥ )·<ÿЕàUëDò´¶_zuÑŠ}â¬uU5MÖqÄÕ4d=½¡ì…UÎ’I?ihì°N$1£{Ð{¨ÐIeNÁR¹Ô¯u"q#Í}¹\Ì}žÊ+oïæ²°Ž#ÿSíÑs)Y›øŽ3_ßÚx¶Ë:ޏ”æ‚ü«ÈP4·¬.)ÇóHN-,ßÙ`HbL÷ WQ­Ô,—ú¥Š©eëDâ.šû22®n wׄuyPLæÂØ´"¾é‚•5ÝAëDâ:š r§êÚÓã¦ó0FM]»ðïû"Ö‰$ötz5»xÕê—OL-SÑÖ‰ÄE4÷ån¸¸xÜeÛë¹#¬IÌôô†–åÖ:·´òÄ`xØ:‘¸ˆæ‚ܪ¥­'-»‚'ÁÏŒœ­í—­I¼èô<ê—*vÊ™º¦º­‰+hî˸¸¸x\ ÜÖ‰$.δ^̘»¯<9sCÍwÍÖqÄ-4ÄÑ ¿±¬ÚY'¤—>þ‡u"‰/݃>A{§¢Ò¦Æ©tëDbLs_nÃ]ÀuÀ«àRø­¥Û:ŽÄÝ—‡Î:_€>`HMsßçØùÙüÙÿyóW|ÅE`HŒÕŸº>§’÷’µ©®þ¼u1 ¹àCý‘wV3jê? !¡ºö´u"1 {ÐϨzg¤Ð è Ö‰$q4÷ýŒmŸŸÀþÏ`G\¤ª¦é‰Jy³—ìmm¿dGJsÁoÊw6$§òÑ“y«KD†¢Ö‰Ä†îAŸ£ösËêè<zÁ:‘$ˆæ¾?±á³çóéÇO/aó·Ž#nÔ TrdtJ£?ðWëD’ š þÑÐØ1)£ŒÏÍOöªžÞu"±¤{P@ 8mþ@—°N$q§¹ï7ΒφϞ¯%_ãrÎÒ}t‰ñÓK¶þkôÚuëDwš ~ÐÙÌœ·ÃYùžzq}Ss—u"±§{Pn¢'LÎÜà´zÃ:‘đ澰ɳϳÕóÅg/ÙËžoHuõçÓ²+x9és*ëO]°Ž#ñ¥¹àmƒáá…‡“y|å±iEÛªOY'·Ð=(·¡?Ð%xt úÝÃ:‘Ä…æ¾O°Ã³Éó­ÙêÙí­ãÈÃ'zízÅž_ÆM+æ½ùþþüË:‘ċ悇íÚßèlwòÞýø ¶;¹•îA¹]â½5ßÒ1xtzˆu"‰=Í}Ïcog{ç+³ÉoÞ}’­Þ:‘<Ä®¯.Ï?”È“Z˜¿ñXÿ@Ä:‘Äžæ‚'55w=óòF¾,?™óvtv­‰ëè”»¡cÐ7œB'¡ŸX'’XÒÜ÷0vu6vöv¶wvx6yëDâ-m=YówÑ:&ÎZW]{Ú:ŽÄ˜æ‚ÇÐü_[´ÇYäžœùi]ýyëDâRºedÇÚé!N3¡«h±ô Í}¯bKgWçã²·Ÿi½hG<¨öè¹”¬M¼±Œ¹ÛÏvYÇ‘˜Ñ\ðŒÈP4·¬î±§óù ÉÏ”ïl°N$®¦{Pî$9µ§Bo¡ÃÐg¬ɃÒÜ÷6sös>kà¥r6vë8âeƒááÒÊcÓŠxo‹Wèé Y'’Ð\ð†ƒ?üþøóŸð)GM]ûÖûûBaëD‰ñ·Ó ñt endstream endobj 176 0 obj <>stream H‰ì×ÿkÕuÅñ¿¡9Y†d)èQ»:Ót0%"¸@Ñ„~ذHTšEî‹_®ßrÚr›„s嵋RmšéE!Óй9Æs6EÛ¸êîÝîfÏq£04·ëv_ŸÏýœQzqßï{^ç}ÿ¾ÄkÓg'žziZ"N× çÖ¦¤oàÂ<÷Ê–ú†ë‰ä‰üp²£äOëAd tß ½ûá·èä¬M[+Nõ…¬'Oàâ­úø;]¼¤¡½àvÍmÝYyå"Ÿ¹‹÷vtÞ²žHÜAïA²%{IE,jÈ’Çz"‰“ö~r ÓÃiãœ&OBú¹õDâ9çš®-X^Å ô½¾+pì²õ8?í÷ê …ó kSÒ‡ëÙ´l}C‹õDâ&zJÈÒ†›Cò?¤õD2jÚûI€îMçiãtrëqÄÓiš1;·1·`ÿÅÖëÖãH<´Ü(:8´ùóŸÓ2J8»‰3‹KvÿÄÿX%.£÷ Ä‡´Ù¸çÉÃý!…È"å»hï»}›ÖÍ ÒÀk¬Çvçn¤¸ìø¤ÌÒT_ÑûÅGn÷ܳžHFG{ÁuƒíÓs¶qj|–®:¤ÄGïAy$ù "‰\²žHFJ{ߥøÑÑ´éÛ´nº7 Üz"‘\íêy뽯‰—)s6ï©>²žHFJ{ÁE®üþgβÊX›µ°¬©õë‰ÄÅô”'×ÜÖMÅB‰t"£¬'’ÇÓÞwz5횎ÍÁÑ·õC' ž½’½¤‚»š•WÞl·GFD{Áîܬ^W?ÁWÄa±j¬'×Ó{PÆ ‰kªdIE^YO$ÿG{ß]hÔôjŽŒŽMÓ¶GdDö}õëÔy~îíâ•;:oY#¡½à|_þòtf)Ç”ê+Z[z´/<`=‘$½e Eú£¤Å¥"¯H-ë‰ä‘´÷Ý‚M—æ°èÕ´ëèàõD"£Ð äÿ1-£„áŸÖÉ#i/8Ùés/¼º“â³hEu÷ÍõD’<ô”1GFå½s Yd f=‘<„ö¾óýS¤S}E*Òâj­7¯\žŸ»¥¾¡Åz"ñ.½Å8-ÛÏ=$ÉFÒz"OÐÞ7A¿¥åòÍÓxé½Öãˆ8Ôºó3æoç—²hEukÇ ëq¼B{!av}q:-£„o{âÌâõ;#ýQë‰ÄÓôt¾¿õ"ùI endstream endobj 177 0 obj <>stream H‰ì×ïKÝeÆñ¿!2D>ÈG…uÈ`ÂŒ~‘°=˜#ëÉ|°Ê¤ÉòÇÉ­¦9ÖNe¥‡èࢡ5C&Ûœ­VÌÂÃ2™¡âÐŽÎsôèzƒCh,§žsöù~o¯rÀgnîïõ¹î»wÝ_LTëy♚Ǟþ03PûÉ™‹Ö¹ï»ÿà´ùµd»ŽLî=ØÆ™ç6µ‡†¬Çñº¹ùø‘ã½l„Œ¼êŠšîÛ3w¬'rŸöÂ#ÐÓ?òäž8gþŠßúB[¼ þÓ \H~­¹K*¾úö—«!IZ’™Ö¹L{ÿ‘ábÓfé´4[ú--×z"߈ŒN—”wVÙ»‚ƒ‰åë‰\¦½Vcã3Ï¿\-9Ͼrbè×[։ܣ÷ x IN®&ÉI~ZOä&íýG€îJƒ¥ÇrÔtZš­õD"¾Ôwéfþ¾V¾#~{úG¬Çq–öBšÌÍÇßùà›Çóª9Þùõg¿¾f=‘Èè=(ÞÔþ™Ìär’Ÿ¤(Yj=‘k´÷ÓÖºÖ`i³Öãˆø[by%Ø9˜³»‘oª¤¼+2:m=‘ƒ´ÒátÇ•Õ>“‘Wý^ݹ…Ø’õD"÷Ó{P<‹Ì$9ÉO®(YJ¢ZOäíýô¡©ÒW9^º+ –k=‘ˆ#f£±ŠšnöBf öpãù¹ù¸õDNÑ^H­Ÿ~îÀiŽ”¿—Þ83>ñõD"¦÷ xÜÄT”]Sr•tµžÈÚûé@;¥£ÒTé«´Vº«õD"ŽLî?t–Ë-lj Yãí…T¡º”U…9Ìùõ5'¾¿xuÔz"‘õè=(¾@–’¨ä*וŒ%i­'ò=íý”£—ÒN9Uš*}ÕzÇ…{oŠšùâ ŠO]¾6f=Ž ´’_L ö¯Ö•ÒÊÐØøŒõD"§÷ ø¹JºrcIZò–ÔµžÈÇ´÷Sˆ.J#å“Òd5‰Mn“ÞÖy”öþÑ!i’œ­’ni=ŽˆlZ{h(·°‰¯xÿ¡³Ã‘Iëq¼K{aºEâ0½ÅId5‰ÍÝ&½Épëq¼H{ÿ¡t‹Dœ1n<Ÿ¨ÍÈ«~ÿè·ük=‘i/<Ðåkcŧ8™@Qs¸÷†õ8"©§÷ 8ŒÜ&½¹á$9yn=Ž·h﯃®Hc¤7Ò骎"nˆŒNx·ƒèËÙÝìL,¯XOä-Ú ÷Ÿ)­ q&;òë[Úâ‹ ë‰DÒBïAqéM†“äÜsRl·žÈ+´÷ˆ~HK¤+r8ôFÚ£õD"’b=ý#ùûZùÆùí¿ò§õ8¢½°f!¶Ôp²/kgRVž˜ŠZO$’FzÊv@’“ç\u²„'ç­'²ç•½ÿ¯|  endstream endobj 8 0 obj <>stream %!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 13.0 %%AI8_CreatorVersion: 13.0.0 %%For: (Apfl Strudl) () %%Title: (FIFE 2d isometric engine.ai) %%CreationDate: 7/18/2008 4:52 PM %%BoundingBox: -306 -534 894 1386 %%HiResBoundingBox: -306 -533.8701 893.8496 1385.8896 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 9.0 %AI12_BuildNumber: 406 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_TemplateBox: 298.5 420.3896 298.5 420.3896 %AI3_TileBox: 10.1968 14.4746 586.1973 833.5942 %AI3_DocumentPreview: None %AI5_ArtSize: 850.3937 1275.5906 %AI5_RulerUnits: 4 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 10 %AI9_OpenToView: -879.3496 1175.2588 0.6667 1610 1103 18 1 0 73 97 0 0 1 0 1 0 1 %AI5_OpenViewLayers: 7766677777 %%PageOrigin:-165.4004 159.8789 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 178 0 obj <>stream H‰ì×ßKÕwÇñ¿a ˆÞC8"è…Æbp]Ô ÐE AA-1Œ0'l›F±„°³11ë€é…êlSfsÊ)=Úžð‡`£¥žsÞçûý¾„äÝë{<ßÏëõy÷.DÇg+Oõ|òi ?G¢ÓÖqD$[R{ûá{ÏŠ«Úyßš̼Z±N”~úå7>~Z16‰•¼ÉGñYÃ7SñEë8"Ywíë'|áùiD$ë8Õ9ÛùÂsÎsÚ[Ç1¦ÞkMÈÂ>d%²­‰HÖ­&6›C‘‚ò+…ÖP×èúFÒ:‘1õ;áó³ßj'ˆßè>(~à Ï9Ïמ3Ÿ“ß:Žõ¾ƒÈd ² Y†ìCëD"’Sñ™×ÁÆ>ÎÃÒÚÎ;ƒ“Öq,ù¹––×.\âñ‹*Ú®v?ÙÚÞµN$’;ºŠqÎsÚsæóåçü§¬ðsï§±ýX€|¬A6¡u13ôøe x‹Ó ®¾w"6odž?{!¹“êî+®jçÙÏ]œ[HX'É5ÝÅ·8ó9ùùþÓt`(§üÙûiì=VŸ hGDìÑ×ÃOU^sî Ko­åš{ᇟ¥xêš3á±É?­ãˆØÐ}P|ŽóŸpîô‚uœÜñaï;Øx,=žÕÇöcZ'‘<²´¼váòPúˆØÚÞµN”;¾ê…øÌëÓçïò¼¥µw'­ãˆXÒ}PtÀ»@;ÐÖqrÁW½ï`×±îØx<8{ÕgHDòÔDl¾®¾—³¢ìä͇Ã/¬ãäˆOzáÍÚöWW,(¿Rh½Ô1̯։DŒé>(â èÚŽ )<_>éý4»ŽGfã±ô¬ãˆˆ DbÇOÜàÜ6öMÅ­ãdç{!µ·ûþó’ê³þËïg^­X'É ºмv #x)è Zƒî°N”-žïý4V[އe×±î¬ãˆˆ›¬o$C]£Emœ!M-V›Ö‰²ÈÛ½Ÿ­<ÕÃòs$:mG$è>(òo4Eº5hë8YáíÞw°ÜØo<&[ŽEÇ®³N$"®4·8Û<ÀaR\ÕÞÝ?–ÜIY'Ê ¯öÂÌ«•†¦Ο/|ïYjoß:‘H~Ñ}Pä?Ñ´ÝÁ BÐ&Ö‰2Ì«½ï`­±Ùœ?+Ž-gHD\/:>[s&Ì©RñE÷HtÚ:Næy¯Ö7’¡®ÑÂ@kAù•æPd5±iH$é>(òt BÐ&t Íb(c¼×ûiì4ÖOÇrc¿YÇOùn`¢¤ºƒæôù»ñ™×Öq2Éc½pgp²´¶“' 6öyì/%’YºŠü/z„6áM¡Yèë8™á±Þwð—b¡ñ\¬56›uñ¦7kÛ—:† ­üã?üj(3<Ó ±ùºú^ž%¼5ôø¥u‘|§û ÈG¢ShÞZ†®±ŽsTžé}‡W癈ä­ßÿøëôù»¤%Õ·ï?·Ž“è……¥·ç.òÇ*¯]?M‰¸€îƒ"f¡_hÞ‡Þ±Ntxèý4–{ŒÇa›±Ð¬ãˆˆŒD§+OõpþÔœ GÇg­ã‰«{ak{7]Ð.--¯Y'q ÝEŠ–¡kxqèÚ‡²Nt®îý4ÖŒa±Ê¬ãˆˆ%wRÝýcÅUíœE MæÖ‰ɽ½ðpøEÙÉ›„¯«ïˆÍ[ÇqÝE‡Æ¡wx}è šÈ:ι·÷,.vÀc‰±Ç¬‰ˆ¯­&6›C¥¢Š¶P×èúFÒ:ѹ±¦â‹ÁÆ>b?qc ³Ž#âJºŠíCñÑG´’uœpcï;XYl-ùY_l0ëD""ÿH_OJk;]w=qW/pø7µ<"0u@)P Ö‰DÜJ÷A‘#zÿzB7¹åzâ®ÞOc_±²HÎâbwYÇù°¿{Ï5, endstream endobj 179 0 obj <>stream H‰ì×ïK•gÇñ¿a „ Âð‘#A 䃞ÈJ!BOÁ2Q” ¥3ÊVË5¤8[hŒuX4sD‡Pœ‡)¢¡N9áÏ£GÛ{8,èçºïë{ŸãçEH>¹¯/Âu}>ßgÏdO ºøÑ'_UÖvFg­ÇyW?ÿ:ÁÌü´ä-[ÉΫ÷òËZ™öó†þ™¹¸õD"™­å›_¸Mü´D$³‘G¤·‰„"§H+ë‰Þ"Sr?NE³bfZ]Ëz‘7ÙØÜnÝÍ+máÕª?sk~qÅz¢·Ëˆ\ŠL–|ÖÉœ5¡ÈÈ”õ8"Ù@û ˆ‡È&Š;EZ‘YÖã¼IFä~ =Š6Å´4+ú-Ëz"‘wÂóU×8)ÏWÀsa<¶päD/”·}×?j=ŽHöÐ>(â9rŠ´âf‘\ä—õ8¯ðÜO¡;Ñ èQŒJ§¢YYO$"òÞF£³•µÝ¼cÅUáá1ëq^+°¹ðteótÛí}ÅçùÇøÕz"‘¬¢}PÄÁ¯Àæ~­‰îÄô(Ú”õ8""¤÷æÃƒxÓªŽ_y<1o=Î+3zú”·1Ø‘½þõ·õ8"YHû ˆH.ò‹+F–‘hÖã¼$˜¹ŸBS¢/1݉e=Žˆˆ7V×M—îä–4çì?×Ð4¸_·žè%AË…ÈÈTEMˆ‘J«»†"“Öãˆd-íƒ"~#ÅÈ2.¹FºYóBÐr?…vDG¢)Ñ—hMt'ë‰DD<›^:vê/p~Yk×µûÉ]ë‰^N.ÌÌÅӢΫ÷[Ië‰D²™öAÈ2\㺑q$õDÊý½(ý'¢/YO$"â£ÈÈÔ×yñJ«»†"“Öãü+¹°º–hºt'·¤™Iš—ãë†ÃˆìÚEœ!×H7nIGÞ‘z†Ã!÷ÓèB4"æ¡Ñ‘¬Çq!¹³ÛÓ÷  ¼×ïhýõØô’í<æ¹Ð?-«1Ìs?…þC b½ˆvd;ˆˆcOW6¿lý)gÿ¹}ÅçO·ÝæW«I sa4:[YÛÍéE‡.†‡ÇÜ ²—i1AÞ‘zÜ>t?€ù>Hç¡ùÐhAt!à $"bn<¶päD/ÏòÇŸ¶?ð‡É &¹0¿¸Ræçæ•¶´‡înln»<]Dži±Cê‘}$ w4$]žn»Òvè< @ÿ¡™Ì "4¼ÉÅU¼5¡ÈÈ”ûÓ]æÂC°®qÀqŠHšöA[$ 9È5$IFòÑ͹Vû ‡žÃÑt«mTD$°[ÉΫ÷òËZS[ÒÌ\ÜÙÑ.s!<IêùöAz í…Sh2ôÿÉn›Ûí¡»¹%ͼ¨'φçWü8ŧ\ŠL–Vwñå‡/GF¦¼ý¸ˆ|8íƒ"En’žÜP’”<õöã¾îƒt ß§½Ðah2~œ""²§ÌÌÅëxZóJ[¾þö·ÄVÒÛï{ž ±é¥Ú/~ä›åm=}’;»^}YD<¤}P$ÈHO2”$åž­¿N¶zõeŸöAú -…®ÂÇé-´o¿/"²ÇFg+jB¼±ÅUáá1¿ü¾¹ðrû1µ endstream endobj 180 0 obj <>stream H‰ì×ßK[wÆñ¿aL¡P†W– HAÇìh·âE… [‡D:o, 3Z%hÕ2S©Ú -F´“Ö®-ʨzQ/*…°:ÑÒŠ!â¯D£î!ˆ]4ÉÉÉ1Éû…„ü8çë÷æ|Ÿç³·ÓÊjègÇŸù¶¶¼âÖõ1öµ,ÖñÛÓO>ÿU¯Vo@LJRå©RUÙª„MI°>zöFϾ^/å}üÚVÙ£eË«]S3 )\pРgº¨Â©ó¶ªnhÖÿ!%k¦*¢{»rý~ªöÀ<̃@¦Pª*[õÀ~öE—ÒÖàj©µ7u-¨`|o€c­­‡›£ù¶¶¼âÖF»/Ü0¸ ñ\˜˜þ·¼Ú¥El•=©Êfc2‹V9«ÇV™ûâå[#ë¤dTQQQ'Q3Q?1¸ ~þ¹åš†ç…e÷ðddg7饌äÂüb°¶É£ÛOŸëì˜oE’Þ€4c2ŽrVi«ÌÕëüU '±ˆñyP­CÝC D먨“$½Àˆ±qéå;:õª÷É-’\.l†¶oö>-(i×½õ-Þ¥Àzrÿ€U˜ ¥ÌUòêùU Û»Ÿ(‘ºÝà<˜’îH•Èή{x²°Ì¡“¹¦aÄ?·œè IäÂßÌ™‹·tWåµ{¯fß%úœ̃@FSþ*…õ+‘•Ëñߘô<¨Ž¡¦¡{Õ:Ô=Ô@]`’@p£ÑîË+nÍ·µ5;G×ÖÃñß›P.(}.ÔÜM"}œ4̃@P+‘õ,Ÿ¿Ú§ŒŽç–$æAõ µ u 5 õ µŽd÷ 0ѬÿCUÝù¢ ç g:λâÌ…÷K«õ-^]YPÒÞåz¾Ú6¼_Vb²ƒY¹¬tÖ­¤V^}}¢ó …z…nQÇPÓ0¼_€¹¼_Û*{tn—W»¦f޽þØ\oEz&N•vè²Ú&Ïüb0¥û` æA ›(•Ñz¨•×·ûǕݱ®ŒT‹P—ÐÅêj)Ý/ÀDJeAœÜѹèt S0Ù'ž .žy0þépb½_Z­oñê0/(iïr=ß mÿïe±raÖÿáÊõûú©¨Â9è™6¿ÒŠyÈVJme·ðªº!¥ù¡_žÕÔÔtZ„º„ùû˜èÕì»óWûtªŸ¹xëoæã >Î…•ÕP£Ý—WÜšokkvŽ®­‡Ó¸_iÂ<d1e·\9®4W¦‚ÑŸŽ˜ÕÔô«šƒúC÷ 0Wô„¯¼vïÐ 0";»îáÉÂ2‡¾©iñÏ-[´_¦c²žr\i®']É®|WÊïŘÕ Ôô½Ú‚:ƒEû˜h3´mï~RPÒ®Ó¾¾Å»Xßÿ>š ýýOéå;z¯×±q¿µ»`6æA G(Óæû¡yP}@­@ߨ!¨'¨-X»[€©æƒµMû§ÏuöL„·"û¹p¡æ®^ ËîáÉÈήÕÛ`:æA w(Ù•ïJùhâ+ýÕÔÔôQÝ@ ÁêmÒäÅË·åÕ.ÿg/uóc¿Þ|ZÜÚh÷‚Vo @š0¹F)¯¬WâëÙÿú‡~u½QP+°zk üôËû¡ ¿›½tB ·0¹©½gl?úÕÔ¬ÞÀS3 _~û»²àì¥î¯¾wï‡Â·+«!«· M˜\£”WÖ+ñõì+ýÕô¦¼Ú¥V`õÖi2¿¬mòèü?UÚq»<¼yôì>V|×§×Â2‡{x2²³kõ6‹ü'À1áWú endstream endobj 181 0 obj <>stream H‰ì×ÿKUwÇñ¿a„Â𧆠ÄÐþAʘA˜HøK[DP7QÁÌcÓ%› bÜ -Tƺ,­»Pœ²+NÃLwïW¯º'&n™Ý{îçãÕëëˆÞ{Îç|~9Ÿ×ë½µutÔ|õÓ{\åw²7""ÖE76ow>ÉÈ«ã­/ø´•ß?þ<Y‹Þøú—95ü[~±{r:œìmŠˆˆE+«ëõ¾‡Î±þŠfvÁùœDpr¡/0–s¦…¿O½ %w·"b›æA‘#‚L'ÙyßIy²~;÷oé´>IóTÓh ÉÝ­ˆˆØÐ}ÿ÷“§9í K[Ÿ¼ØùÕÎ\ˆnl¶Üyœž[Ë'ç.ÜŸ˜KÒ~EÄ:̓")'ÍyÓIvò”ßúoîo£Ðøœ¶ÐÕLÒ~EDļ\åí=–u-ÍSímX\Šìã~EdŸhIad7 NŽ“æd:ɾýծ󠃞@[à[šýa÷+""æqøŸ¿âçTwƺ•Õõ]/{[.<qÉÌ‚†Žž§ö÷+"ûJó Hª"µÉng¬#Íÿ÷íó h Î É5´ˆÙù%ûûÃ"kÑæöGé¹µæå»'§Ã{\¼w.øû‡³‹nrAaiëPpÊÎ~E$ 4Ф’š¼æÕ&»Ið]¯Ù;÷4ú—Ñ%hô ;ûóúcΗ_â †Þyý;saeu½Þ÷ðDN3]ÎÌ.ݯˆ$‡æA‘TB:;yMj“Ýo»2–yÐA‹ K8Óe,׋ˆHrŒ¿,®èàÜ~ÿÃúo»ñ®s ©¼|/– ‘CAó Hj ‘ÉeÒ™7š¤&¯÷¾>öyÐA£ Wp ƒ¦‘ð~EDÄ¼× «—ê˺v<û:ðoì÷Æ• CÁ©ÂÒV®?yºÑß?ìv¿"’|šERYL"ó.“Îdt,·Ä;ný[3è4/jïÇU3DDÄªèÆæíÎ'yuœíŸT~7>1ï .r¡«7˜YÐÀ]EemÏF^ÄûD94Šjä/)Ì[L"“˱ßè"÷t š÷Ò:è4xW³ƒ¡ü'sΙ–¾À˜»EÜåÂâRÄÛ4æ©æÞ*oï|xÙÝÓE$Y4ŠRd.ÉËûK “Å$r\·»žô Z+œ:{‹ânIP诿Ï]¸Ëiœž[ÛrçqtcÓõR‰äÂätx{Íí"kQ×Û‘}¦yPäÐ!gI[2———ü%…],’à<ZÝc{ãs®—‘x-.E¼MižêcYת¼½óáåL<ƒ¡ü‹äœié Œ%¸ÙšE–œåµ%sI^×ë$žû=„6B'¡™ÐO\PDDÞé{ÿo™ ãEemÏGgŒ¬i*nw>ÉÈ«c©âŠŽ?þ|edo"bæA‘ÂT%[yaÉYÒ6ÁÕL徃6B'aAúIGÏS#kŠˆÈ›†‚S…¥­œ·ÙE7ýýÃW6˜ ¯V/Õ=8ž}þàßÄ×K4Š|6‚Õì<è ™ÐOX–®Bc1¸²ˆˆÌÌ.|þeg쉜šzßÕÕu³ëÏ…‘ñ—Ŭ™‘W÷MשeEÄ,̓"J’òž’ªd«©em̃ ŸÐRè*,^~±›öbv}‘#hçÑZyùž¥£ÕR.ôÆ<7³r~‰/02»¸ˆ$Nó ÈEn’ž¼¡$)yjvqK¹ï «ÐXXŸöB‡¡ÉØxŠˆÈQàïÎúè'jaiëPpÊÞƒìåBd-ÚÜþ(=·–õ?«êšœ„ˆ¸¦yPä"+ILÞMÒ“ %I?Âê<è ·Ð^xÊÉÓô{IIÏF^•µqŠf4tõm?Îv.̇—/\ýG¤yª½M‹KK‘¸h>stream H‰ì×ßKÕwÇñ¿a ˆÝACA„¼ÐX dë¢n d]tád#èBÈ£%†æݦQ¬dB˜sm2tX¹ÍÃt¡¢¦œòçÑ£î_9£QMÓó}¿Ç׃8d}^ø~_¯Ïæ¦xØÂb,ÐØ—‘[ûÞûç+Îß™‹.%é ùƒ#øLÒÿŸÐÑÎ*là¬â²¶GÓÉ>ND$ðò¯ t§eWS”Õà¡îôE@pС£—)ˆ¤ž%"Ûqñ‹{<’|Z‘—W'úÑ«“k÷ÁÍW/¹,œä]rEDü.¾¾ÑÔÞŸ™_Ç ³´âÖÓ‰¨kG»Ù ·{>v…ãŠJZÃã.œ("o¢û ˆІt"#ýHKºp¢›½ï`Õ°m8”ÃÚ‰­Æ];ZDÄzC#yÇ›yOœ †F]>Ýå^X^Y»¼ ï"‡–WuMÍÌ»s®ˆü‡îƒ"¶h@zÇN¤éGwÎuÿ>è`á°s8šÍÃòqùtoŠŒÍž8swãÁ#õ­7šd0é…‰©§Ïv&J0¶wótÙÔ}PÄ­G÷Ñ€<ƒ´!èæéV÷Ak‡ÍCöÏŸ=3É "âÏçWÎÕ÷¤çÔð‡¿ð£UÃ^ •´pzNñÕ®»OÜ ²Ÿé>(b‚¾£õxúh@zÐý¶÷ÁM/M +×:‡©çm|âÌõáÈ´mó^àÛÈ*l CqY›ù·!²è>(â2:Ž¦ã¹£õè>«æ½ïàÛ`‘„EôMÇ mׄF Nyûå~ÔÔ±Žó’zaa1hìKÏ©IË®® tÏE— ÈìºЏ†^£Ýè8šŽ¾£õ Ãx¡÷ØB,"ò°ŽØHÖqDD’èéD´ì³ïxãeæ×5µ÷ÇVãÖ‰¶x§"c³¥·œ¯(xãA|}Ã:‘H*Ó}PÄtF¯ñ¸Ñq4u"õ¾ƒEÄ.r¾¢S•ì%ëD""{la1hìËÈ­åEWqþÎ\tÉ:Ñ+¼Ö ¡Ñ¼ãÍDâ³74bG$eé>(’l´X¢Ñh7ë8[¼ÖûÖ‰`ì%VÛÉ:‘ˆÈÞèè>v…÷[qYÛ£áIë8¯áÁ^ˆ¯o´Þ|xðH=ÁJ>ý626kH$é>(’<4ýÅ#F—Ñhôšu¢y°÷XJì%â:z™eGDdW~ým¢¨¤…w÷ÁÛ=­ã¼‘g{áùüÊç~HË®NÏ©9WßÃÖ‰DRŠîƒ"É@[ÑY4ýE‹y°¼<Ûû ¬&¶!ÙQƒáqë8"";653_^ÕÅ{ì@ÞÅKÁûË+kÖ‰ÞÆã½0™>qæ: ³ ®uYÇIºŠì9zжâÉ¢¹è/ë8¯çñÞw°XPì(¢²©XVÖ‰DD¶%¶¿Ür^_§ÏvNL½°Nôÿ|Ñ ßÿô{NñUrœ öýmG$è>(²‡è&Šgж¢³¬ã¼/zßÁŽbM‘–eÅõ•eHDämºî>qî,E%-ƒáqë8Ûå—^ šÚû3óëHK;<ˆZ'ñ7ÝEö}äÜYh(zÊûw¿ô~›ŠeEfV[Ë:ŽˆÈk G¦?þ¤7UVaõÎ!ë8;ã¯^˜š™/¯ê"pFní…¦{Ë+kÖ‰DüJ÷A‘]¢ƒh"úˆG‰n¢¡¬m‹¿z?}ÅÊ"yqY»Ë:ŽˆÈ–¹èRe ;-»:=§&ÐØ·°³N´c~ì…GÓžúšØ‡]éè[Çñ%ÝEvƒö¡ƒxˆè#ZÉ:Îø±÷¬,¶‹‹ÝÅúbƒY'‘}-¾¾Ñzóaf~/ÕÒŠ[‘±YëDïÈ¿½èâJ¿òW‹xîƒ"ï†Æ¡wx|è šÈ:ÎŽù·÷,.v¿,xã{Ì:‘ˆìG½¡‘¼ãͼ‹ø ŒZÇÙ_÷ÂòÊZÝ—?gäÖò+”WuMÍÌ['ñ ÝEvŠ–¡kxpèÚ‡²Nô.|Ýû ¬¯Äc•ñ/ÿ0–*¼ endstream endobj 183 0 obj <>stream H‰ì×ñKÔwÇñ¿a HþâO áDP˜ƒÅ@V?$Œ@Q?ôƒC…àRj)7\‘®p»)Á4v0nW›då&HåœÔ¶®ÑQ¢\¨y§§í _8bI »»÷×ï÷õøá~~¾÷ý¾_¯Ïóç""…ŸYlh~ëíS¥ÕÁÐÐdfsËz¢7õÓÏq~­Ù¹ÄlòXK˜Sì­ìê˜H¯g¬'Ùº>¿ÉWïõ "»ÉB¾2|5$¹c=ÑÎy ÷t0š}Œãþø[šõD"âq+«éÖàHq ³¨¼ýÄ™«O—SÖå†gráöt¢¦¾Ÿ³êz#£÷­Çq;ÝEþ'2…dá{!eÈëqÞ”grßA£•ÑÍhhô4ÏÔ3q›ÁðTYmûóÐñK±ø¼õ8¹ä±\ðð?%’[ºм9Bšð¥,ä‹õ8¹á±ÜwxòŸ—¸=¨©ïgÃêz¯Üx`=Nîy/VVÓ­Á‘â@gQy{sGôérÊz"7Ò}PäÈ„!MÈ’Åz¢œñ^îgÑÓhkœŽæ61õ·õ8"²ë%f“ÇZÂl•’ªî¾‰ôzÆz¢¼ðj.Ägš†9Ziu044™ÙܲžHÄ]tÙyAj| äib=QŽy5÷´5:Í3Òâèr։Ȯ´–Úè¾8¶§â4ˤ±-2·°l=Qy;®?¬³h=‘ˆ+è>(ò"Ҍ࣠/H ²Ãz¢|ñ|îgÑâèr–^G»³GDvî ŸäÂRòYsG´¨¼½8ÐyòìèÊjÚz"cºŠ8Hrt #H òÂz¢üòIîgÑèèuù½†¯hzÖ㈈KÍ-,7¶EØ{*Nw_[KmXOT8¾Ê…X|þÀÑÎ[VÛ3ž²GÄ’îƒ" H¾ÒŒ°§|•ûz펎ÇÁé{´>ë‰DÄEÒ뙾‰’ªnVı–pb6i=Q¡ù0"£÷u½œú¿øõÞ?ÖãˆØÐ}P|ŽýO ðä‚õ8…ãÃÜwÐñhzœ}oeÝh=‘ˆØ»rãs/¨©ï¿=°dž?sø,4N"pvÒŒ°žH¤Ðtßzñ^@øí^àÏÜÏ¢ïÑúx4ÀÈè}ëqDÄL,>èø%¶AYmÏ`xÊzK~Î…¹…寶ˆS >íÿe-µa=‘Háè>(>ÄžgÛ³óyùÙÿ¤€õDüœûYt? Ï6H'´GD êérêÄ™«EåíÅÎÖàÈÊjÚz"cÊ…ßþ˜}÷ð—<„}ûÏ…üÝz‘Ñ}Püæû‘?Ùó¼öì|6¿õ8f”û =6H'lîˆÒ­'‘¼Ëln…†&K«ƒ¬Á†¦áøÌ¢õD® \p\ŽÞszBÝ‘oîÆžX#’wºŠ°ÕÙí¼ðìy¶½õ8Æ”û/¢ Ò y ôCZ"]Ñz"É—ñ;+^à{ç÷ÚøCëq\D¹µ²šî8}OÅiHc[d)ùÌz"‘<Ò}Pü€MÞtê^uv;ž=o=‘=åþËh†Ù–8vë‘õ8"’cñ™Å†¦a¾ñ’ªîÐÐdfsËz"wQ.üGb6yä“o`"½ž±žH$/toc{³ÃÙä¼çluv»õDn¡Üßý–è¼0ôFÚ£õD"’+«éŽó׋EåíÍÑ¥ä3ë‰ÜH¹°­ñ;kêûy2ºÞkã­ÇÉ=ÝÅÃØÛôñ†³ÉÙçÖ㸋rÿèŠ4Fz#íñäÙQš¤õD"²sƒá©²Ú6Þ£±ø¼õ8î¥\xÞ¢Òê ÏçÐñKz‹ÄctObW³±y·ÙÞìpëqÜH¹ÿZ¼E´GžMRo‘¸Â¿ <¯ endstream endobj 184 0 obj <>stream H‰ì×ßKÕwÇñ¿a DÂèjãÀA@Çôb‡á…²!t# ’Œ$‚ürı҄3½¨&ë“äLØDe¬2ÔFž5%Ž˜†EuÜñgmÏáˆm¬M=Çóþþx=л7Ÿ>ß×ûõyõJöe2¾XVÝóÖ»‚¡ÎèÈ´õ8N÷ý8+þµÄ¡VR› á¡#Áæ¼@#¿ð§õD"ÙÑzù¾}þµD$;^Ç5?Šëÿ ½¿GtHš$gõþÇ_Ò-­Ç‘=YZþí“Ïúùrµ~ÞÛz‘¶žÈ´öbnþiemUPî½1‘ÞÞ±žH$SzŠ—Ìä3Wš¬&±­Çq4íý½£IÒ'i•œ sa)i=‘ˆ¼ÑÆæËöÈÝöÌùèò“”õD®¡½°wñ٢ŠnŽ«¤*OX#’½ÅHc2™ËL>“ÒÖ㸀öþ~Ñ*é–=“¶Iç´žHDþi`è×w>ø‚ï´¬ºççûKÖ㸌ö¾¤·wº®ŽåŸhãÐNÖÝL<|n=‘Èé=(n·°”$‡¹Æd2ÉL>[OäÚûCägrttÎþï~±GDþ45ó(Tse÷Û¼5·Ç•´àYr½¾i0/Ðx´°¥éÒèêÚ–õD"û¦÷ ¸©Kö’Àä0iL&[Oä&Úû™ mÒ99@ú'-Ôz_#üë.|Ë÷¨Bž!í…c°8½ã¥×£÷¬Çٽť(䤮 ùiïgˆÎIó¤rŒgÎGi¤Ö‰øÎÖ‹t×Õ±üm|†5Ÿ~³°”´žÈÝ´2™”_ä ˪{&ã‹Öãˆì•Þƒâ:d,I˽%uÉ^ëqÜJ{?+蟴PN’FJ/¥ZO$âñÙ»øúJª"±ñ„õ8^ ½¹Í—í‘;ÇŠZ9ÉSgo/?IYO$òÿô!WOŸàÆ’´ä-©k=‘‹iïg]”FÊyCtTëqD +Ú V†c³ÁP'‡_R‰'¬ÇßÑ{P¬xä× $ ­Çñí}[4^z/ÿt`š0}Øz"Ñ‘éÝ&\VÝ3_´Ç׬÷Âï ¶2I endstream endobj 185 0 obj <>stream H‰ì×ïK•wÆñ¿a ˆÂðQC8èÈ`2VP,Ä$b‚ AÒüA¢¸,Ãr‘›ÆÎ“ÃWÙÖ¥emÓ"‰K\†Šî„¿ÎÑ£íŽV£ÌG?÷}Ÿëõà Ï>ðýÞ×çú>{–À¢ ±ÆÖ¾»«ßyïËßÿ02¶žHÈɯæâñk=ˆ$R®°ÔÏÅ#÷H?2Ðz¢Dôã/8~­Ih·ïÍ?ÇAøòÝ÷­ÇÙV÷Œå¾ÀýOË©û>ð‡õ8¢½`o*L+¦ÓéÉ´eë‰D¶Dli¹©ýæÎÝÕäOAq磿þ¶žHþ£½à(þ®»+­ioþ¹ßîZ#^¦÷ l^¤7d#߬Ǒç´÷ˆnLCæ\hËtfš³õD"ñtµçaæ¾&nxöÁæž[¬Ç‘ÿÓ^pšùÈbmó™'9—¢²ÀØÄ´õDâMzÊ–"»H0îiF¦‘lÖÉ¿´÷‹žL[æthÎôgëqDâ 4<ùñgßq«S³jZ:úcKËÖÉkh/8ÓÈh¸°Ô¿R¥¾jé‰.Ĭ'¯Ñ{P¶yuú|/ÙÅ#ÇH3ë‰äÚûNF[¦3Óœ9#Z4]Úz"‘ z:9Vs9ÙW™”^þEuÿZO$o¤½àd·ï9t–òå5ºï[#ž¢÷ l’мâj‘]$˜õ8òÚûηR¤iÑtiþP‘×ióßy÷ýZ¢æÀÑ‹C¡qëqä-´œo*-§ŽcúèÓV}S/zJ|‘Nû´s©È+RËzy#í}·à›¢KsXôj}Sâ=·elæÞúò”3n¡½à 3³Ñ§º“}•Iéå%Á©ðœõDâzzJ¼HäéDF‘Tä•õD²í}w¹Úó^͑ѱiÚÖ㈼ÑÈh¸°ÔÏ]ݹ»º±µ/º³žHÖJ{ÁEBÓÅ+ZKGliÙz"q1½eóH!²(5«†»D:‘QÖÉÛi﻽švÍêçàèÛ´në‰D^1Y¬8s-%£Š+ZT˜˜šµžHÖG{Áu®ßü3s_§ÆïÕž‡Öãˆ[é=(›ôSoèE‘KÖãÈZiï»ÔTxަÍÙѺéÞ4pë‰Dž»Ü•[ÏÍÌ;|a`è‰õ8²Ú n[ZnéèOͪáì Š;CÓÖ‰ûè=(Fæ<ÜRˆ,"‘¬'’uÐÞw5ú6­›¤ÓíǑ„ÆmÜ›N·Ñ´Üëét¤¤"˜”^žì«(ø–“Ý•[)8h=Ž8‘Þƒ² rƒôà†$ä‰õ8OÚûFW?qª›ÞN{§ÃÓä­'‹--·tô§fÕÅ¡áIë‰d«h/xØ‹F÷á'çÕèLü#Ày%5Ó endstream endobj 186 0 obj <>stream H‰ì×ûKÕwÇñ¿a ˆÂ á ˆ¡ƒëŽ’ ƒ F CFLÈ£%†Ãå™qÈì²T³³µÖmë”&#a¹Ñašd˜(Çy;G¶'Í.Sóœ÷÷œïëñÃA{Áçóþ¼¿¯gÏœëÄ—7ßxû¿ÖAÄYî=)Ý–»±cOKwpÐ:Žl½Ÿ~ý“óå×:ˆ$Kxd²²º‹SÎ+njïì/¯X'’ôsãv¸°¬[Ä/[Ç‘äÒ^Èl ѥ㾛9 œrUm`|bÆ:‘8…ú ¬115Ç+Á­àÅàÝàõ°N$I¡½ï¿ÜùKßó² á‘ÉÊê.nN^qS{g|yÅ:‘$ö‚ŒŽEîá s‹}½±Å¸u"±§>(«xxx¸¼¼Ö‰$‰´÷݃/y¾çùªçÄùÂç;ß:‘8Úì\ì³æŸ³=õYùu5ÞàTdÞ:‘¤ˆö‚{ô<*)÷sÜžÒÖnüaGŒ©Jï?o—÷WÂ:Ž$ö¾ÛLÏDù¶ç Ÿï|¾öùæ·N$Nt®g`û®f‡>>?~jGRJ{ÁmVç}ßÁ šw7S^Þ®o/ƒuIí}wÒ¼ËËÜ|\RîçnxJ[×XÇÚ .4==Út%ÛSŸ•_÷éñù×:‘Pt3¦þHãe^Þ^=®¢½ïf|íóÍÏàûŸ`GŒŽEîá>l+<ñÅ×·c‹qëDbC{ÁµÂ#“‡.qúyÅMíýñåëD’RêƒîĤ3ïL=§Ï À;`HRM{ßåøæ÷uôòýÏ5  Ь‰…èÒIÿ­œ‚®AUm`|bÆ:‘XÒ^p¹«¡‡…emÜ~C}ÃÖq$uÔ]ˆß¹÷tbÞ™}ë8bC{_À÷?-€›@# Ð¬IêtwìiáôwWœ¹?ôÄ:ŽØÓ^øòŠÿâÝÜ¢FnBeuWxdÒ:‘¤‚ú «0×L7'Τ3ïL½u"1£½/«èïU~Å} Ð¬ãHÒqâ¥ûÏêÄe íI˜ŠÌ×xƒYùuÙžzï©ë³s1ëD’\êƒ.Á,3Ñ9 L73Τ['cÚû²½€vÀ­ )ЬãHRLLÍUÕ8eÖKa!ºdHD{Aþm(ü”uÀ•ؾ«ù\Ï€uI"õA7¸ðíoÌrâ3é¶Ž#Ž ½/Ï£÷ݤ)p7h tëD²eb‹q_GonQ#‡{àpÏèXÄ:‘8Žö‚˜a×0¡œ)ÓÊÌZÇçÒÞ—u¢GÐ&è4 ú…j…óÅ—WÚ;û󊛘ñ?ù&<2iHÒƒö‚¬Swpð­w?ç¶”î?{è‰uy]ꃃyd*9M&”9µŽ#N§½/B§¨8t‰;CË kÐ8¬É‹…ú†wî=ÍI–µ] =´Ž#éD{AÖov.æ=u=§ ;S}ìû©È¼u"Ù<õÁ À Öxƒœ#SÉl2¡Ö‰$ hïË&Ð/hܽÃ:ŽüGxd²²º‹ÓÉ-jl;'¾¼bHÒŒö‚lÔèX䣚îijãëè-Æ­Éf¨¦5æŽéc9Dæ‘©´N$iC{_6‡–á¿x7ñìÐ>è Ö‰äÙì\Ì{êzNACV~]78™·N$iI{A6'Ô7\Rîçò¼ï»zhG6L}0}1q…em3È$šåøG€èè1G endstream endobj 187 0 obj <>stream H‰ì×ÿKÔÇñ¿a „ ÂG ÂѰý"C˜1DúAÂ!Ü/ ¡.QNŒ0s ÚvÛô@Š›°‰Ê˜±ÙèhJ*¢a™\ø%Ϯڊb_ ïîý¹Ïçõ@D{ùù¼ß¾ïõò¥ä£Ÿ~¹÷ÁGçùnDòÒfr×+8z¡°¼=Ð3µ½“²Nä]áë·K*»YçêÆ¡»÷Ö­ãHÓ]ƒŒÄ‹+‚ŒPmSxnñ¡uyWæÅñÝ:ˆ¼‡ù¥ vÇÞ±}Öq$/éîËÁqñé }„VbÇsâ‰Õªº~žYõ•èä¬uÉ{º r@O¶öZƒã‡Ê.òÅüjHÞ‰ú`~Ñ¢I¦èîK¦ÐDè#ŒÝ„†bÇÖm>;Ê3/òut…¦Ÿî=³N$n » 1¿´QÛf–Š+‚÷¬ãÈÿSÌ#ƒ‘8›ÅûbËØ5ë8’ßt÷%ƒRûiZ Ý„¡¢§ÐV¬¹Õï¯G}æÜ =jÉ ÝÉ ‰Ø‚¯¦‰:~*›Y¶Ž#ÿE}0/°GloŠÍb¿¬ãˆèîKÆÑMšÛ¢Ìm…ÎBs±Nä6ÑÉÙÒ“—yÂUuýñĪuqÝɬÔ~º÷ÚÍÃÇ:™«ú–‘•µ¤u"ùgêƒÇî4ø#¼#¶‰b³¬‰KèîK–ÐSh+LÍ…þbÇ%îÌ=¨nâ©–TvGÆÖqÄt$6“»þÀ£UXÞè™ÚÞIY'’·©:ûÂÖ°;¼ öˆm²N$®¢»/YEg9râ3F‹¡ËXÇÉcú(%9£» ÙÃ!à0`%•Ýë8òõAgÒG)É6Ý}É6š ý…äÑhè5Ö‰òLj?Ý{íæác<Àú–‘•µ¤u"q9ÝɶèäléÉËŒYU]<±jG^St¶ƒᥰ/luq-Ý}É ZLƒ?°Ñkh7tëDùa"¶à«éã¹?ŠÍ,[ÇOÐ]xº÷¬+4]äë`ØÎœ»±þhË:‘¨:ÑÜåu°#l ûbHÜLw_r‰FC¯aäè84ë8Ž6¿´QÛæYW†oYÇÑ]œáCïé³£úÐëêƒNÚO³ lï‚í`G¬‰ûéîKî Fât¾C뱎ã8O¶öZƒã‡Ê.òÅüjH¼EwAr,žX­ªëgêʪ¯D'g­ãx—ú 9æŸ-à-°ì…uñ Ý}1¡Êóo#ñ⊠[YÛž[|hG¼HwAL„¯ß.©ìföª‡îÞ[·ŽãEꃆ¸øL>ÏŸ-`¬ãˆ·èî‹¡ù¥ ZH¢YÇ1›Y>~*ÄÓ(ÿ´w"¶`G¼KwA¬lï¤=S…åíG/øc›É]ëDÞ¢>h‚9gÚ™y&Ÿùg ¬‰çèî‹9º¯¦9¤ щ¬ãXYK6ø#<ÃÇ:{¯ÝLí§­‰§é.ˆ­Åûë[F^ýKìûæ×ôóÖ‰¼B}0ǘíз¿1ç>stream H‰ì×ÝKÓq†ñ¿!bA!È@Œ 4òdAE0ðDð Ä<1"„\+Q Q1Ä+{¤ƒŠ”HAÊ”p„Cha¢¢j:®›)zÓ|y~›×ç@ðìæ÷=xvÅãp²ù…¥ªÆN—Û¿ëÀ¥â²ÀØÄŒõ"Àv{úrPW@­‡¶›~ÿ«tTêÕõ"lŸÖ`(=¯F¯ŸëmêZÏØ `‡S Ë¿©[ :P#XÏÁ–Ó‹{ šyq@œ|£.Pè"¨Ô Ös°%&¦æŠËze—Ûï«í˜_X²^0F¾S\©¡RÐ]P5¨¬aÓDcõ·ºS³+ô¸…¥m?M[/8=ø‘JA½ Ó vPA¨#¬a£tå3=uzÓç»z†¬ç„üª»ïƒÚABÁH\áÈøÉ3-zÇ}Gªn·õYÏ8=øDZNµÎ„šBea=ëðyfá|Å“”ŒòÝ™—/T>Ó¿Ö‹NDþB¡šPS¨,Ôd…óÅ–Wn>stream H‰ì×ßgÕqÇñ¿¡«Œˆ]FÝdLÔMÑM²‹º‰Dt±‹#ÑEd­f‘dbŠ5º¨CdMšê¢Fk7šZié‡9ýZÛŠzuU¢»mŸ³s3ÛÝëû¹y{þü °úݾÿlͦù]zuåË×…®ó÷šZºse:»†g«s¥­2 ‹?ú®ßÒ“ÜßqíÕLµô"ê`ù¤btVrhÒ5©›4NéE«Ãѩֶ y·m{ûGǦKÏ néA–[Š&]“s“ÆI锞SÓž¿ü°§ýJÞªyk參JÏ ÎéAVÆ@e<“£“ÞIõ”žSs>~ž?Ö;²vóÉüäü[zõO°b$Ïÿ TÆ›·öæ"ïi¿2ùâ]é94 =À {þòCª'×'”*=§°Ñ±ém{ûó-»ûîŒN•ž@cу‘öim»”J•žSÀ«™êÎJ^`ý–ž¾Á‡ ‹?J/ áèAJI¥ƒRC¹D)£ôQéE+äË×…®ó÷šZºóá'nÎVçJ/ AéAÊJ uv ç¥RIi¥Ò‹–WexbÃŽ³ùÞ]/?ž|Sz MP RF飜¤´RŠ©ôœe1>ñzû¾‹ùÆ;ÏÝyRzèAjÈÐݧi¥¦tSê©ôœ%óöýçÃLJò]ëZOŸéðmþ{éEð› ¦¤•RL馜§4TJªô¢%päÔ­|Ρ£×gÞ~*½þЃԠd`ê)*%Uz˘­ÎO¼.½þ¥¨Yi¨”TéP·ô @cÒƒI4&=üí—·ÇU endstream endobj 210 0 obj <>stream H‰ì×1€0Ä@ 5‚Ⱥb­ ÌTÐ!wÃÏ¿fo*îõŒk~{ú¿ÒƒMz I4éA€&=Фšô @“hÒƒMz I4éA€&=Фšô @“hÒƒMÅ|$ÀË endstream endobj 211 0 obj <>stream H‰ì×1€0A A$®h‘3 *`&·[|ýíÍ ÀýŒã¼ÞýûŸÒƒMz I4éA€&=Фšô @“hÒƒMz I4éA€&=Фšô @“hÒƒ°—%Àã6Ï endstream endobj 445 0 obj <> endobj xref 0 453 0000000003 65535 f 0000000016 00000 n 0000023056 00000 n 0000000004 00001 f 0000000332 00000 f 0000025131 00000 n 0000066131 00000 n 0000066203 00000 n 0000429745 00000 n 0000154958 00000 n 0000161883 00000 n 0000180714 00000 n 0000197328 00000 n 0000207051 00000 n 0000207209 00000 n 0000207367 00000 n 0000207525 00000 n 0000207683 00000 n 0000083463 00000 n 0000084658 00000 n 0000085820 00000 n 0000086977 00000 n 0000087232 00000 n 0000087491 00000 n 0000087746 00000 n 0000088004 00000 n 0000088259 00000 n 0000088513 00000 n 0000140567 00000 n 0000141770 00000 n 0000142991 00000 n 0000143283 00000 n 0000143575 00000 n 0000143868 00000 n 0000144159 00000 n 0000144451 00000 n 0000144929 00000 n 0000145946 00000 n 0000149243 00000 n 0000150204 00000 n 0000151172 00000 n 0000152191 00000 n 0000153146 00000 n 0000154061 00000 n 0000160899 00000 n 0000179603 00000 n 0000196011 00000 n 0000205444 00000 n 0000210707 00000 n 0000212330 00000 n 0000213936 00000 n 0000215550 00000 n 0000217165 00000 n 0000218768 00000 n 0000220278 00000 n 0000221813 00000 n 0000223394 00000 n 0000225003 00000 n 0000236272 00000 n 0000238100 00000 n 0000239957 00000 n 0000241800 00000 n 0000243539 00000 n 0000244857 00000 n 0000246089 00000 n 0000248138 00000 n 0000249169 00000 n 0000250196 00000 n 0000266517 00000 n 0000268197 00000 n 0000270023 00000 n 0000271844 00000 n 0000273742 00000 n 0000275572 00000 n 0000277419 00000 n 0000279216 00000 n 0000280941 00000 n 0000282520 00000 n 0000299014 00000 n 0000300891 00000 n 0000302734 00000 n 0000304591 00000 n 0000306433 00000 n 0000308092 00000 n 0000309381 00000 n 0000310695 00000 n 0000311961 00000 n 0000312888 00000 n 0000328622 00000 n 0000329911 00000 n 0000331733 00000 n 0000333668 00000 n 0000335543 00000 n 0000338276 00000 n 0000341086 00000 n 0000343912 00000 n 0000346682 00000 n 0000348496 00000 n 0000370017 00000 n 0000371954 00000 n 0000373986 00000 n 0000376502 00000 n 0000379012 00000 n 0000381819 00000 n 0000384549 00000 n 0000386774 00000 n 0000388815 00000 n 0000389259 00000 n 0000235604 00000 n 0000235827 00000 n 0000236051 00000 n 0000237877 00000 n 0000239734 00000 n 0000241576 00000 n 0000243325 00000 n 0000244634 00000 n 0000245866 00000 n 0000247009 00000 n 0000266199 00000 n 0000266358 00000 n 0000268038 00000 n 0000269864 00000 n 0000271685 00000 n 0000273492 00000 n 0000275318 00000 n 0000277161 00000 n 0000278958 00000 n 0000280684 00000 n 0000298497 00000 n 0000298757 00000 n 0000300636 00000 n 0000302480 00000 n 0000304335 00000 n 0000306174 00000 n 0000307785 00000 n 0000309087 00000 n 0000310403 00000 n 0000311669 00000 n 0000328038 00000 n 0000328330 00000 n 0000329616 00000 n 0000330902 00000 n 0000332644 00000 n 0000334564 00000 n 0000336426 00000 n 0000339193 00000 n 0000341997 00000 n 0000344800 00000 n 0000368198 00000 n 0000369077 00000 n 0000370924 00000 n 0000372861 00000 n 0000374923 00000 n 0000377422 00000 n 0000379948 00000 n 0000382718 00000 n 0000384941 00000 n 0000386997 00000 n 0000400073 00000 n 0000401675 00000 n 0000403162 00000 n 0000404727 00000 n 0000406289 00000 n 0000407918 00000 n 0000409535 00000 n 0000411359 00000 n 0000413187 00000 n 0000415003 00000 n 0000416958 00000 n 0000417952 00000 n 0000418935 00000 n 0000419892 00000 n 0000420928 00000 n 0000421945 00000 n 0000423156 00000 n 0000424811 00000 n 0000426481 00000 n 0000428131 00000 n 0000430803 00000 n 0000432386 00000 n 0000433963 00000 n 0000435417 00000 n 0000436981 00000 n 0000438587 00000 n 0000440178 00000 n 0000441756 00000 n 0000443367 00000 n 0000444990 00000 n 0000076490 00000 n 0000077546 00000 n 0000078535 00000 n 0000079520 00000 n 0000080477 00000 n 0000081448 00000 n 0000082453 00000 n 0000083719 00000 n 0000084914 00000 n 0000086074 00000 n 0000133291 00000 n 0000134175 00000 n 0000135095 00000 n 0000135986 00000 n 0000136880 00000 n 0000137811 00000 n 0000138707 00000 n 0000139649 00000 n 0000140857 00000 n 0000142064 00000 n 0000446543 00000 n 0000447465 00000 n 0000448184 00000 n 0000448406 00000 n 0000075155 00000 n 0000075378 00000 n 0000075600 00000 n 0000075821 00000 n 0000076046 00000 n 0000076269 00000 n 0000088769 00000 n 0000088990 00000 n 0000089213 00000 n 0000089438 00000 n 0000089659 00000 n 0000089882 00000 n 0000100511 00000 n 0000119040 00000 n 0000132973 00000 n 0000133132 00000 n 0000146956 00000 n 0000147115 00000 n 0000147274 00000 n 0000147433 00000 n 0000147701 00000 n 0000147958 00000 n 0000148215 00000 n 0000148470 00000 n 0000148727 00000 n 0000148987 00000 n 0000207896 00000 n 0000208155 00000 n 0000208412 00000 n 0000208667 00000 n 0000208949 00000 n 0000209241 00000 n 0000209535 00000 n 0000209828 00000 n 0000210121 00000 n 0000210415 00000 n 0000226614 00000 n 0000226908 00000 n 0000227873 00000 n 0000228894 00000 n 0000229864 00000 n 0000230831 00000 n 0000231826 00000 n 0000232828 00000 n 0000233763 00000 n 0000234652 00000 n 0000251202 00000 n 0000252249 00000 n 0000253449 00000 n 0000255060 00000 n 0000256694 00000 n 0000258290 00000 n 0000259928 00000 n 0000261546 00000 n 0000263152 00000 n 0000264719 00000 n 0000284107 00000 n 0000285679 00000 n 0000287257 00000 n 0000288887 00000 n 0000290509 00000 n 0000292124 00000 n 0000293734 00000 n 0000295326 00000 n 0000296562 00000 n 0000297565 00000 n 0000313881 00000 n 0000314886 00000 n 0000315938 00000 n 0000316942 00000 n 0000318316 00000 n 0000319971 00000 n 0000321632 00000 n 0000323293 00000 n 0000324883 00000 n 0000326433 00000 n 0000353704 00000 n 0000355143 00000 n 0000356696 00000 n 0000358314 00000 n 0000359938 00000 n 0000361512 00000 n 0000363111 00000 n 0000364710 00000 n 0000366210 00000 n 0000367210 00000 n 0000390593 00000 n 0000391622 00000 n 0000392533 00000 n 0000393518 00000 n 0000394520 00000 n 0000395513 00000 n 0000396450 00000 n 0000397358 00000 n 0000398248 00000 n 0000399150 00000 n 0000337392 00000 n 0000340174 00000 n 0000342997 00000 n 0000345767 00000 n 0000347583 00000 n 0000349422 00000 n 0000350355 00000 n 0000351268 00000 n 0000352188 00000 n 0000353117 00000 n 0000381594 00000 n 0000384327 00000 n 0000386553 00000 n 0000388593 00000 n 0000389036 00000 n 0000389480 00000 n 0000389705 00000 n 0000389926 00000 n 0000390149 00000 n 0000390372 00000 n 0000411141 00000 n 0000412964 00000 n 0000414780 00000 n 0000416395 00000 n 0000000352 00001 f 0000025032 00000 n 0000023107 00000 n 0000024914 00000 n 0000024946 00000 n 0000023190 00000 n 0000024796 00000 n 0000024828 00000 n 0000023261 00000 n 0000024678 00000 n 0000024710 00000 n 0000023332 00000 n 0000024560 00000 n 0000024592 00000 n 0000023403 00000 n 0000024442 00000 n 0000024474 00000 n 0000023474 00000 n 0000024324 00000 n 0000024356 00000 n 0000000353 00001 f 0000000356 00001 f 0000055594 00000 n 0000065502 00000 n 0000000365 00001 f 0000055718 00000 n 0000062754 00000 n 0000023545 00000 n 0000024206 00000 n 0000024238 00000 n 0000023621 00000 n 0000024088 00000 n 0000024120 00000 n 0000000366 00001 f 0000000367 00001 f 0000000369 00001 f 0000065438 00000 n 0000000370 00001 f 0000000372 00001 f 0000063101 00000 n 0000000373 00001 f 0000000374 00001 f 0000000376 00001 f 0000065374 00000 n 0000000377 00001 f 0000000379 00001 f 0000063415 00000 n 0000000380 00001 f 0000000381 00001 f 0000000383 00001 f 0000065310 00000 n 0000000384 00001 f 0000000386 00001 f 0000063766 00000 n 0000000387 00001 f 0000000388 00001 f 0000000390 00001 f 0000065246 00000 n 0000000391 00001 f 0000000393 00001 f 0000064111 00000 n 0000000394 00001 f 0000000395 00001 f 0000000397 00001 f 0000065182 00000 n 0000000398 00001 f 0000000400 00001 f 0000064435 00000 n 0000000401 00001 f 0000000402 00001 f 0000000404 00001 f 0000065118 00000 n 0000000405 00001 f 0000000407 00001 f 0000064764 00000 n 0000000411 00001 f 0000023695 00000 n 0000023970 00000 n 0000024002 00000 n 0000000000 00001 f 0000060881 00000 n 0000059981 00000 n 0000062551 00000 n 0000062648 00000 n 0000060127 00000 n 0000062201 00000 n 0000062322 00000 n 0000062442 00000 n 0000060281 00000 n 0000061982 00000 n 0000062079 00000 n 0000060427 00000 n 0000061625 00000 n 0000061741 00000 n 0000061858 00000 n 0000060581 00000 n 0000061268 00000 n 0000061384 00000 n 0000061508 00000 n 0000060727 00000 n 0000060909 00000 n 0000061030 00000 n 0000061151 00000 n 0000023774 00000 n 0000023852 00000 n 0000023884 00000 n 0000055832 00000 n 0000058955 00000 n 0000056015 00000 n 0000057813 00000 n 0000056247 00000 n 0000056534 00000 n 0000025842 00000 n 0000448626 00000 n 0000059220 00000 n 0000058075 00000 n 0000056794 00000 n 0000065566 00000 n 0000065616 00000 n 0000054251 00000 n 0000000301 00000 n trailer <<2946632BC680084BA5C2F4844F68BCB3>]>> startxref 448815 %%EOF fifengine-0.4.1/doc/logo/fife_logo.png000066400000000000000000020727021304641216200176230ustar00rootroot00000000000000‰PNG  IHDR ÃÿͦÉsBIT|dˆ pHYs.#.#x¥?vtEXtSoftwarewww.inkscape.org›î< IDATxœìÝwŒ¾ßçïá°ˆT¡Žz—HQÅr´ÚU_õ:”öìj»nâ8pb FœØ†kØp¹÷†#ŽãÜ\çÆH\6VZië‘Dª÷]µ¥¤W,"©Bª÷£Æ&’sòÇ;$‡Ã™á Û;åy€W<ó¾§üÎ,g±8šÏþjN'ýµŠöqI~œä¶$»Ù¨ûð\?Kòa’Û“<ÝlÔ}0 À^™\õÀèÑ*ÚG&ùAÊæÚ$]½—&íãSŸØûœ'ɺVѾ#ÉíÍFý…}|^&1 Lp­¢}X’歷UnJ2õ¿äéIþa’Ø*Ú«Rn‹¹½Ù¨¿r€_€q@ P«h’dQÊæ;IfT4Ê9Iþ$ÉŸ´ŠöKÙƬ­hF91 L­¢=9É )˜[“QíD»9¯÷ø×­¢ýtÊ0æçÍFý½jÇ`4ÃÀ8Ö*Ú“’\™2€ùQ’£«hØ.é=þ]«h?ž2Œ¹«Ù¨RíXTM ãP«h_’2€ùI’+g_LJruïñ­¢ý@Ê0æ×ÍFý‹ ç "b'ZEû¼”ÌmIΨvšbr’E½ÇæVѾ7esw³QßPéd4bÃZEûœì `æV<ÎÁ4-É÷{¯ZEû·)ØûšúוNÀ%†€1¦U´OOòÓ”Ìù3–ä¿ê=>kí_¦ cn6êÛ* €ýN c@«hŸä')˜K’ÔªhÔ:2É×{|Ø*Úw¦ cžj6êJ'`¿ÃÀ(Õ*ÚG%ùaÊæê$“*hì9.Éßî=ÞjíŸ'¹½Ù¨?_íXì 1 Œ"­¢}x’[S07$™RíDãÆ©IþA’Ð*Ú¯¦Üs{³Q_^íXŒ”*Ö*ÚÓ“Ü’2€¹%É!ÕN4îÍIòO“üÓVÑ^–aÌkÕŽÀpˆa ­¢=%ÉM)˜ï%9¬Ú‰&¬Iþe’Ù*ÚÏ'ùY’Ÿ7õ·« €Áˆaà ií®$W§ `~˜¤^é@ôwAïño[EûÉ”cîl6êU;}‰aàjíZ’ËR0?Nr|µ1 µ$WôÞ*Ú¥ c~ÕlÔ?«t2Ä0p ´Šö7S0?MrZÅã°÷º’ÜØ{üß­¢½$eóÛf£¾¾ÒÉ&(1 ì'­¢=/es[’³*‡ýoj’ïöZE»•2ŒYÜlÔ7W:À"†€}Ð*Ú³Snù£$ +‡ƒgFÊÿÜšäóVÑþuÊ0æÁf£¾µÒÉÆ91 ŒP«hŸœä')7À\Tñ8Tof’ÿ¶÷ø¸U´ïJÆ<ÑlÔ{* `ÃÀ0´Šö1I~”rÌåI&U;£Ô1IþVïñn«hÿ<ÉíÍFý™jÇ?Ä00ˆVÑž™äû)7À\Ÿ§12'%ù{Iþ^«h¿‘r[ÌíÍF½¨v,€±Í¿¼€>ZE{F’fÊ 0ÝI¦U;ãĬ$ÿ8É?ní•ÙƬ®v,€±G À„×*ÚÓR†/·¥ a­v"ƹs“üY’?kí’ü,ÉÍFýÍjÇÄ0LH­¢=9ɵ)7À|?ÉÌj'b‚:¿÷ø7­¢ýû”cîl6êïW;Àè%†`ÂhíZ’+Rn€ùQ’c«v¨%¹¬÷ø÷­¢ýhÊ1¿l6êŸV9Àh#†`Ükí S0?MrrÅãÀžLJ¹µèÚ$ÿW«hߟrcÌošú—•N0 ˆa—ZE{aÊæ¶$³+öÖ”$·ôûÞ”cîi6ê›*  "bÆVÑ>+åö—?J2¯âq`›žä‡½Ç—­¢ý›”cîo6ê[* à Ã0¦µŠö©)˜Û’|«âqà`9<É_ë=>mí_¦Üóh³Qï©t2€L À˜Ó*ÚÇ'ùQÊ 0—%©U;Tê¨$³÷x¿U´ïL¹1æ÷ÍF½Séd€€1¡U´ëI~rÌ5IºªF¥’üϽǛ­¢}G’Ÿ5õª `ÿÃ0jµŠöaI¾›rÌI¦V;Œ)§%ùã$Ü*Ú«Sn‹¹½Ù¨¯¬v,€}#†`TiíC’ÜœrÌw’L¯v"ÎNòÏ“üóVÑ.²3Œy£Ú±FN @åZE{J’ëSn€ù^’#ªƵFïñ¯ZEû™”aÌÏ›ú»ÕŽ0kí_¥Üóp³QßVédÀ„"†`Ÿ´Šö‰I~’2€¹¤âq€ƒãÈ$£÷ø°U´ïJ¹1æÉf£Þ©t2`ÜÃ0b­¢}t’¦ `®J2©Ú‰€ —äì=ÞníŸ'ùY³Q¾Ú±€ñJ À°´ŠöInMÀ\ŸdJµ£Ð)Iþ~’¿ß*Ú¯¥Üs{³Q_VíXÀx"†`P­¢==ÉwR07'9¤Ú‰€1äÌ$ÿ$É?iíåÙƼZíXÀX'†`­¢=5ÉM)˜ï&9¬Ú‰€q`~’‘ä_´Šöó)Ø;šúÛÕŽŒEbÒ*Ú]I®IÀü I½Ú‰€qì‚Þãmí§R†1w6õ« +Ä0T«h×’\–ä’ü(ÉñÕNL0µ$—÷ÿG«h?œ2Œùe³Qÿ¬ÒÉ€QM 0Á´Šö·Rn€ùi’S+ Iº’ÜÐ{üe«hß—2ŒùM³Q__édÀ¨#†˜ZE{^Ê 0·%™Sñ8C™š¤Ù{lhí»S†1÷6õÍ•NŒ b€qªU´g§Œ_nK²°âqöÆŒ$?é=¾hí_§ ch6ê[+ ¨Œ`ií““ü4esaÅãìOG$ùë½Ç'­¢}WÊ0æñf£ÞSédÀA%†ãZEûØ$?JÀ\‘¤VíDÜÑIþ‡ÞãÝVѾ3ÉíÍFýéjÇ1 ÀÔ*Ú3“ü esm|ÎL\'%ù»Iþn«h¯M¹-æöf£þR¥SŒ_’#ZEûÐ$Í”Lw’iÕN0꜑ä%ùG­¢ýJv†1«* دÄ0£X«hOK²(eÓL2£Ú‰ÆŒ¹Iþ4ÉŸ¶Šö )Ø;šúºJ§ö™`”iíÉI®KÀ|?ÉÌj'óÎï=þ—VÑ~:eóóf£þ~µc{C 0 ´Šö¤$W¤ `~”ä˜j'—jI.í=þ÷VÑ~4eó‹f£þi•ƒÃ'†¨P«h_”2€ùI’“+`"™”äÚÞã?´Šö)Ø_7õ/+ ’à kíFÊæ§IfW<É”$7÷›ZEûž”aÌ=ÍF}c¥“»Ã­¢}VÊæ¶$ó*€Á’䇽ÇW­¢ý›”aÌ}ÍF}K¥“IÄ0L«hŸ–rûËmI¾Yñ8ŒÜaIþëÞ£Ý*Ú¿HÆ<ÚlÔ·U:L`b€ý¨U´Oòã”ÌeIjÕNÀ~ROò7{ZEûΔaÌïšz§ÒÉ`‚Ãì£VÑ®'ùaÊæê$]•Àv|’ÿ©÷x³U´ïHr{³Q_ZíX01ˆaöB«h–ä{)˜›’L©v"*rZ’?NòÇ­¢½&嶘ۛúŠjÇ€ñK 0L­¢}H’[R0·$™^íDŒ2g%ùgIþY«h)Ø;šúëÕŽã‹`­¢=%É )˜[“^íDŒÞã_µŠö³)ØŸ7õwª Æ>1 @?­¢=)ÉÕ)˜&9ªÒë.ê=þm«h?‘2Œ¹«Ù¨\íX06‰a’´Šv-É%)˜Ÿ$9¡Ú‰`l™qÊŸLÚðöŸõT=Œr“’\Õ{üŸ­¢ýPÊ0æWÍFýóJ'€1¤Öétªž 2­¢}~Êæ§IN¯xÍÎo6ê/ö=1ã”?íJò½$'ɹIþc’¿ÜðöŸ¾×ÿÁ­¢ýhÊØÝæ$‹S†1­f£¾¡ây`TÃN«hÏMÀܖ䜊DZbG 3ãÔ?«'ù›Iþvvȶ$¹3ÉŸoxëOžÙ~R ö>I+e³¤Ù¨o®xuÄ0À„Ð*Úgdgs^µÓÀ˜tþO¿óç_§Üóß$™1ŒÇ<“äÏ“ÜyÇÝçˆa`¤>OòË”aÌÃÍF}kÅóÀ¨ †Æ­VÑ>1ÉOR0—T<ŒIN'KŸ[›ÿðïxfýW›/Þ˧yïæï}có­?¾àŒ™GN߯óÁòQ’»R†1O4uî0a‰a€q¥U´Nò£”Ì•I&U;ŒM7|GX‘%÷ùà½Ï÷ËsN™Ò•Ë®<;‹šçeÖ™Çî—ç„ ê$w$¹½Ù¨?Wõ0p°‰a€1¯U´HrkÊæ†$“«Æ®÷Þù,Kî.òØC+³iÓ–ö:sç˜îæy¹ð’ÙéêÒ¬Á>x=嶘ۛúËUƒ“ZE{F’ï¤ `nN2­Ú‰`ìêt’â…7³¸U䥥ë²ÛG†µýùb»~yô1‡åÆ›äÚ›æçðÃÙ/ÒŠ$?KƼZõ0p ˆa€1£U´§&¹)eó½$‡V;Œm›6mÉã¿’%wy÷Ï*eêÔɹüª³ÓÝlä´Ó®t'þrcÌÍFý­ª‡€ýI Œj­¢Ý•äڔ̒YíD0ö}øþYrO‘Gz%6|]õ8»™¿ðätß²0\<+µÚþ\KR'ÉS)Ø»šúÏûL Œ:­¢]Kòí”Ì“WíD0>,+ÞÎ⻋,}n]Fü¹à¾F){ñ9ä±Çž›nY˜k®?7‡:mß^H’mIIÆü²Ù¨·+žöŠ5ZEû‚”ÌO’œZñ80.lÞ¼5O>¶:‹ï.òö[có÷Þ§2%W^uvº¿³0'ŸR¯z/¾Nr_Ê0æ·ÍFý«Šç€aÕjíù)˜Û’Ì©x7>þè«Ü¿xY~`E¾újóàwÜ×/ ŸYÖjÉÂóNÍ¢ï,Ì7¾yú¨ƨIîNÆÜÛlÔ7U< I t­¢}fv0 *Æ••ËßÍ’{—å¹gÞHOÏÞö7th2Ü eè×ß—&O8qfºo^«®›éÓ§ìýý}‘ä×)Ø›ú–Šç€Ýˆa€ƒ¢U´OIò“$”䂊ÇqeË–myê‰5Yrϲ¬}ããݮﶌÅu*åg˜}”9}ú”\uíÜtß¼ 'œ8ó ÏãÞ'I~‘2Œy¬Ù¨÷T<$ÃP«h›äÇ)7À\ž±ù[ø0j}úéú<°dy~`e¾øbc†ý#¶Ç»ÌÕ!>ŸöG—ÔjÉ7¾yzºo^…纇Í6À^x/ÉÏ“ÜÞlÔŸ®z&61 °_µŠö‘I¾Ÿr̵IºªÆŸ5«>È’{—å™ß¿žmÛú-j0FRu<2‚ðeO§N>¥ž›n^+¯>;Ó¦MÞ×ɀݭMrGÊ0æÅŠg`Ãû¬U´MòÝ”`º“L­v"¶níÉÓ¿{-Kîy9¯½öQ¿«ƒ”,à \ö×6™aÖG‘øÓwÙyqÆŒ©¹æº¹¹qÑ‚wÜáÃyq`äV%ùYÊ0fUÕÃ01ˆa€½Ò*ÚÓ’,J¹æ;IfT;ŒOŸ¶1Þ¿"Þ¿2Ÿ}¶a÷; © paDAËÈê—Ú¤Z:=#ù¬q÷ô®ƒ\èwºV«å[ž–î›fþ‚“†ÿºÀH½˜äö$w4õµÏÀ8&††­U´''¹>å˜ï'9¢Ú‰`üzýµ²äÞeùýS¯eë¶žAîUòË=^ØÇm/“&ÕòÍ+ÎÊM?þfN:ãè<üë—òЯ^ÈgŸ¬ß·'iü2à¥îÛIN=í¨,ºeA¾}ÅœL:yïæ†ãé”cîl6êïU= ã‹R«hOJrEÊ 0?LrLµÁøµm[Ož}æ,¹wYV¯ú Ï•Ú€7‡<¹[`j{x졇’«¾³0×ýà9æ„]›¸m[{òì#«òÀ]/äµCÿþûîMŽð³Êá>¾³û‡~H®»nnn¸i^Ž>æ°‘½.0=IK¹1æÍFý“Šç`Ãjí‹Sn€ùI’“*Ƶ/¿Ü”‡X™î[™O?íݪ²§èeX±Ky§=Å-ÃuÒG熟Ënœ—©‡ìy«Êë+ÞËw½ç]m[Ûn3|¢–Á'ûöžêêš” /:=Ý7/È9sOØ·=Ù’äÁ”c~ÓlÔ¿¨xÆ(1 °C«h7R0·%™Uñ80î­[ûI–,^ž§ž|5[¶lëwu8áË^Æ.#x@­VËy—ÎÊõ?8?ó¾uÚ_¨ôù'ëóðo_Êc¿}9_|¶aøág—;ï>ÄㆈdfÍ:&Ý‹æçÒoŸ™)SºFôÚÀˆmJroÊ1w7õÏÀ"†€ ®U´ÏÎÎæÜŠÇq¯§§“çŸ[—%‹—eåŠ÷zÏÖvùcw#ˆ^öz Ì®›>cj.¿y~®½õ¼{Ò̽|Î]mݲ-Ï>²:ýòŬ[ýa¿«{ù9å0?ß,ï6È}û2GÌœžë¯?77ÜxnŽ¬ÏØ»¹€‘ø*ÉoSnŒ¹¿Ù¨]ñ<Œrb˜€ZEû´$?MòGIίx˜֯ߜ‡Z•ûï[‘?úª<9`·RÛsÏ2ìàe8Ûevuü)õ\{ëyùöMó2mú”a¾ÎȽºìÝ<ô«³ôÉ×Ò³­gÏb£Ëàú~{ dºº&å’Kg¥{ÑüÌ9ë¸á½&°¯ÚI~™rcÌ#ÍF½ÿÚ,ÃÀDÑ*Ú'$ùqÊ 0—fؿ싷ßjgÉ’åyò‰W³yóÖ~W‡±ñeÏeÌ. [Ÿç­Õ’yœžën=/ó/8}ï—Ëì…O?ú*¶Šƒ2gžylݼ —\:+]]“F>°7>HrWÊ1¿k6êþ…IÄ00®µŠöQI~rÌÕIü7N'/,}+K/ÏË/¿Óçʶ¾ }q—?†4ÌšeÚô)¹ôússÍ÷9þ”ú°s lùzkžyxUùõKygí'Ãàp>ßììvcØÏÓ?Ž9²>#7Üpn®¿~nŽ˜9}¸Sûî­$w$¹½Ù¨ÿ¡êa¨–Æ™VÑ><É÷Rn€¹1É”j'‚‰cãÆ-yô‘U¹oÉŠ|ðÁ2~ÙSø²Ç…0Ã\ßRÛý‹cN8"W7¹ìÆs3ýЩÃ{žƒhuñNþõK)žY›Ÿ_vvùcöô¹çž™=Ä1S¦tåÒËf§{ÑüÌšuÌ0‡ö“5)ØŸ5õUÀÁ'†€q U´§'¹9å˜[’RíD0±¼÷Þç¹oÉò<öè«Ù´iËÀÊàUÌÐáËp¢—Ún7tÎy'çšï—žÚpcš }òÁy¬õr~wÿ+Ù¸~óî=ÌXf¨ÏCûmÎã:äœsŽK÷Í rá…§§«Ë.8È^Nr{Ê1¯W= ‡ƨVÑž’róËm)7Á^íD0±t:IñÒÛY²xyŠâíÝ[‰½‰_ö¨Ôvücð»ô c¦Lœ‹®9;W}gaN<ý¨¡Ÿ”úzÓ–<óÈê<Ö*òÁÛŸõ¹R~Ó‡þˆs‘ÌÞ2<¦~Ô¡¹ñÆssÝussØáÓ† 80žKò³$?o6êïT= ŽÆVÑž”äê”`~dlþf;Œa›6mÉã­É}÷­È{ï~¾ëÅWÂŒ<~Ùæ—þÁË@êÇ–+nYKo873aF§“¬zé­<Öz9+ÿðæ#˜=F2{È #Ž™:µ+ß¾|Nº»ççÔÓêC $O¤ÜsW³Qÿ¨âyØÏÄ00ʵŠv-É¥)7Àü8É ÕNÓ‡|™ûï[‘G] ¾.Oî×øe÷kÉ^v½TËìy'æªï,È‹geÒ¤=lšÃ>zïó“§tåü+ÎÌ•·,ÌÉg=ðãÇ©M¿Î³¯Î“÷.ËÇï1À=:ÞìŸ?&ÝqLïýŽ=ö°ÜxÓ¼\sÍ9™qèÔÁ¬ÍI–¤ÜÓj6êë+ž€½$†€Q¤U´ÏM¹æ¶$gW<LX›7oÍSO¾š%‹Wäí·ÛD-û¿ /|êù’#ê3òíîù¹äúss؇ ü\D§“¬\úfž¸wYVo÷¹0à½÷x}Dq̶ÆL›Ú•+®œ“›ºççä“èE€ƒcC’VÊ1KšúæŠç`Ä0P±VÑž•L£âq`Bûøã¯òÀý+óðC«²~Ã×ý®Ž4€fü2ÄÆ—Ýï^ž8ý¬ãrù-ó³ðâYéêš4ÀPÛ‡ï|–'ï]ž?<¾&_oÞš –ÝNu9_žÜ§8f1 žœî›ççß8uà…CÀÁòy’_¥ÜóP³QßZñ<ì*Ð*Ú'%ùIÊæâŠÇ ï••ïgÉ’åyþù7ÓÓÓ÷ó²a0{¿ /|Ù~³kò¤4.™•Ë»ççÔ3ð}°«¾Î³¯Êïî_‘öG_•'wüÇ»§@f¨í1Å1{Æüṩ{^®ºêìLŸ>e€'¢“Ü•rcÌ“ÍF½§ây€’VÑ>&ÉR0W$±Î*´e˶üî©×²dÉŠ¬[÷é®Üö²—̰â—Ú ç“ÃfÎÈ%×ÏÍÅ×ÍÍáGNß}.ö¨§§“•x3OÝ·"¯¯xw÷; È Ç ksÌÞ…1‡LŸ’«®œ“›ºç焎腀ƒë$?Or{³Q¶êaØI P«hÏLrkÊæú$“«øôÓ yð•yè¡UùòËM}® °fo˜aE.µÎízâäÙGçÛ7ÍOã’Y隬Û_Þ³§î_‘Ÿz-[¿ÞÖ{v°foâ˜¶Æ ôìaL­–œwÞ)é^4? ž<`›t¯'¹#ÉÏšúËU0щa`?kíIš)˜EI¦U;$kV˜%K–çÙg×eÛ#]æ« IDAT¶žÞ³#`†½ýe$ñK&eþ§ç²çå´³Žâݰ¯6|µ9Ï=²*Ï<ôJ>ÿt}yr Øe—›ëóÅþcúm‹9餙éîž—+®<+Ó¦é)a”X‘äö”cÖT= ÀD$†€ý U´§&éNÀ|7É¡ÕN$ÉÖ­=yú÷¯gÉ’yýõw^Ø-x9XÌÀQÌŒÃÉ…W‹¯››#Žš1à{áÀèÙÖÉò?¬ËÓ÷¯Èº5îzq¿Æ1ýØÎîñÌÛbf̘š«¯>+7Ý4/ÇwøÀo¨ÂÒ”aÌÍFýͪ‡˜(Ä0°—ZE»+Éu)˜ï'9²Ú‰€í>ÿ|c|à•<ôÐ+ùì³½g‡³¦ÖïË=0{¿l?yÂiõ\rùi\2+“§t ø^8xÞ]ûIžyð•¼üÌÙº¥'»Õ*CF00ŒéÅÔjµ|ó[§fQ÷üÌ›âï8¨:I~—2Œ¹³Ù¨Pñ<ãšF U´kI.OÀü8ɱÕNôõúëgÉâåyúé7²ukOïÙ~ÌH·Àì·¦–Z-™4©–s¾qj.¾þÜœqÎñ{|O|_}±)xtuž{tU¾ú|cŸ.e¸qÌaÌnÇö cvÛ3ø¶˜SO­§»{^¾}ùœL*¦‚Qd[’GS†1¿h6êíjÇÄ00 ­¢}A’?Jò“$§T<ÐǶm=yöÙµY²xEÖ¬ùpç…¡¶¾ì×fèøe»CfLÍùWÌÉE×ÎÍÌ£â1ZlÛÚ“ϯË3®Ì»k?Ùq¾Ó?xÙåË!¶Æ Æìý¶˜Ã›–k®9;7Þ4/Gû»£Í–$÷¥ c~ÓlÔ¿ªx€qA ƒhí)7ÀÜ–äÌŠÇúùòËMyø¡Uyà•ùôÓ ½gGºfèëƒ/à `’䨓fæÂkç¦qéìL™:yˆwÄhöÎëç™_ÉÊ¥ëÒ³­g—k»Å1#Ú3p(3ìm1}žwÒ¤Z.¼àôt/šŸsæÚ:£ÐÆ$÷¤ cîi6ê›*ž`ÌÃ@­¢=';˜ù `ݺO³dñòüîw¯gË–m½g÷Áìi Ìþ `jµI™Ó8)];7³Î=aäËÏ6æ­ÎÒÇ×d×»ÿû>‡1#Ù3D$sÆG§»{^.½lv¦Léâù2ɯS†14õ-Ï0¦ˆa˜ðZEûÔ$?IÀ\Pñ8Àzz:ùÃóë²xñò¼òÊ}® Á춦Ï×C.µ=|=ÀF™ÞûM›>%ËÎÌWŸ“ú±‡ ý¦Ó¶míÉòçÖæ¹‡_ÉoµÓ¯bI2Œ0fØ_—_t‹f†ˆbŽ8â\wÝ9¹þ†sS¯ÏúMUù4É/R†16õž=Ü`ÂÃ0!µŠöqI~œ2€ùvØõToýúÍyäáÕ¹ÿ¾ùø“õ}®Œ$‚æÖ—=0m€Ù~¿£Ž;<ߺúœ4.™•©‡LÙãûb|yëÕóÜ#«²ú¥·Óééì¾ù%à cöb[Ì!LßÛ]]“rñÅg¤{ÑüÌ™sì0ÞP‘÷“ü,ç_yV^2;Ó¦OÎ[ƒ¼¹úƒüá±5y}Ù;;£•·Åô;7Üm1û!Š™2¥+—\:+Ý‹dÖ¬£‡ù΀ ½”2ŒùOÍFýݪ‡¡zµZíI.©z¦;Î]U±]­Vû~’㫞#É»Nç·U½x­V›—äʪ^FèËN§ó_ª¢V«ýõøÌ‘±ã‘N§³ªê!ö71 ãR«h·“YõÀàÞ}÷óÜ¿dE|M6mÚ²Ÿ"˜ý»&IN;û„œåY9sÁI30<ŸòU^xâÕ,{úõlÞøõÎ ý"˜m‹ÙÏQL’œ}Îñé^4?^xzºº& ç­ÕùÍFý¯ª‚êÕjµ”ä_W= ÓKNçU±]­V{:ÉÅUÏ‘ä±N§suU/^«ÕþV’¿¬êõa„Öu:3ª¢V«½ŸÑÓÁpüN§óWU°¿M®z8@^LruÕC»êt’⥷³xñò¼\¼½ówñwD&CE0;þq"˜]¯Ož29ç^xzοâ¬}âÌröô `ø?êÐ\ù½óri÷ü¬xnm^xbMÚ|±óïooäÒ÷ïv§“¤¶=|Ùþwº³óþ}¯ÕÊǧ³sËQù÷u×k;þâw:åííqMïùÕ«>ÈêU䨣Í 7ž›ë®››ÃŸv ¾-À¾y¡êª"†`¼Z1 Œ›6mÉã­É}KVä½÷>ßya/ûÁ Äd€Í.»Þÿð£fä¼ËædÁ%³sÈŒ©I’NÏ0Þ Óä)“Ó¸lN—ÎÉÚUïçÅ'Ödí+亮T)ïÔ/ŒÙ%ŠÙ%„Ù‹(f{ÐU«õ1}ž³Oóé§ësÇíÏçw½Ë¯83Ý‹æç´ÓŽ:`ß`Ä6'Y^õUÃ0^-­z ùðƒ/³dÉò<öèêlܸeç…ƒÁ ½&©åäÙÇä¼+ÎÊœ'§6©o@ÎéçŸÓÏ9>í¾ÌKO¾šϯ͖M[ÝÓÙ¬ô¹>Ò(¦ÿf˜·w}Íí±ÌÖ­Ûòè#«óÈë3oÞ é^4?ߺàôLšÔ?,²—›úÖª‡¨Š€ñJ Zöò»Y¼xY^XúÖ.¿s¿k•Ò'J© ‚éšÒ•³¿qZλ|NŽ=ùÈ$e ‚á`›yÌa¹òÖoä’îùYñÜÚO½–Ï?þjgè’$Î.?þË~bv=_«%+W¾Ÿ+Þ˱Çžoš—k¯='3z ¿5Ààüo]`BÃ0^­J²!ÉŒª‰bóæ­yò‰W³dñò¼ýv;IùË÷»‡0ý6³ °fÄL¿èeð¦–CgNÏ‚KfgÁ%³3ýÐiI’NÏHÞ)S¦NÉyß>+Ëædí+ï§xjMÞZýavljIÒ»¦_Ø’Œ<Šé”OÕ{;;nggÓwKLïùZ­–>ú*ÿå??“»îüC®¸â¬tߊÙþóÒI§_,S†0ýžo{ÓgCÍæÍ[óàƒ+óà+³°qRº-Èùß<­_Œ 6Ú€ñliÄ0pÀ¬\ñ^–,^–çŸ{³OT2XÒ'\Ù%‚ÙñL¿ó;nïE3©«+g6NIã²3sÜ©Gí8¯a¬8òØ#rå­ççâ›ægåsk³ì÷¯åËöúÝB•ýÅtvݳóùvßÓé}Þ—_~7/ïæ„ÏÝósõ5ggúô©þÓÖ$EÕCTI ÀxöBÕÀx³e˶<õÄ«Y²xyÖ­û$}ÔÚH6ÀìÁì¼=`3àíòÆ`ÌôÃɼ‹fgÞE³2ãðC’$== Æ®)Ó¦¤qùYYxÙœ¬]ù^^þý«yïõw]ö*ŠÙy»\ü²=xé³%¦|ÂÞÍ0åëôß³ýõÞÿËü§¿ú}î¼ãù\yÕÙé^4?'œ8ó |`YÙlÔ7U=@•Ä0ŒgK«Æ‹O?]Ÿî[‘‡x%_~µ)e³sëËΛ»Ô)ƒlƒNÓïñýnÁsr= .=3s§dRפ$½¿ÜãE-9cÞ‰9cÞ‰ùäýϳì÷¯åÕßζ­[³WQLgûÏ]§·q)C˜Î.Ûc²#~Ζ˜¤–·æ¾%Ësÿ’å9ïüS³hÑ‚,<ï”]v½%ø&<1 ãÙò$_'™Zõ 0V­YýAß³,Ï>óF¶mëó‹ðCnƒé®ô9¿Ë6˜¾ëÿ˜‘E0“&ÕrÆü“3ÿÒ3süiGï¸l ã]ýø™¹âÖoæÂä•çÞÈÊgÞÈú/6dØQÌ.ÁË®·k½·wD1ýâ—ál‰I§–N:yñ…·òâÒ·rÒÉ3Ó½hA®¼úìL›æ£iØ‚o`Âóo·šú×­¢½,É7«žÆ’­[{òû§^Ë’{—åõ×?ÊŽ e°fÀ fàÛCoƒY3mÆÔ̽`VνhV=bz’¤£€ašvÈ”œwÅÙYøí³²vÅ»Yþû×òá[Ÿ¤ÓÙ¯¤7~éýyÙívïýz£˜ÎŽfï¶ÄloÞ}çóüÿýgÏæškææÆEósÜq‡¤ïŒ+b`ÂÃ0Þ½1 ËgŸmȃ÷¯Èƒ÷¯ÌçŸoì=[0TÙ¹f€m0m}Ißxfç¹Ýã—]·ÊÔv­`’ZrÔñ33ï’3sfã”tMîJ’Þ_ò‡‰­V«eÖü“3kþÉùøÝϲüéWóƲwÒ³­§ßæ–ìªìz;;™ÎöŸÃ}ß³ýu6¬ß’{î.rïÝ/ç[œ–î›dþ“âw Æ´N’« jbÆ»¥Iþûª‡€Ñìõ×>Êâ»_ÎÓ¿-[·vˆZØ3ÈõaoƒdÌ€¯“Zj]µœzÎ ™wñ™9áŒcv\éQÁÀ€Ž:qf®øþ·rÁ ²ê¹7²êù7²ñ«Í{Žb:Û;tKL:µtÒÉóÏ­ËóÏ­Ë©§ÕÓ½hA.¿ê¬Lêck«ÍFý˪‡¨š«Àx·´ê`4Ú¶­'Ïüþõ,¹wYÖ¬ú`ç/¯÷Uú/»oƒäö°¶Á ÄÔúÜž:}JÎúæé™{áìväŒ$¶ÀÀH2cZλjn^~vÖ.'+žy-Ÿ¼óY’Á¶·$Ûã—¾%¦Ïk¼õf;ÿÏ|þx}’þ¡ÊÐALmÀ-0„0û¸ æð£ÍÙÌάƩ™2µü˜ª£‚ƒnÒ¤Zf7NÍìÆ©ùðÍO²ú¹×óöê÷ÓÓÓÙÏ[bv=Wn‰$ˆÉ®çjµä‹/6æ—w-Ío~ùB.¹ìÌtß²0gsüAý^AÅÞl6êŸT=Àh †`"ðÿ Í„ðö›ŸfñÝEž||M6oÞºûÆ–alkÙµ Äô¹½Û`N<ó¸œ}Á¬œxæÎ_b×ÀÀèpÌ©Gç˜SÎúÏ7æÕ¥oäõ×eóƯ÷Ó–˜ÞǥZ:ÛŸ+½(¾é n:N¶õtòÔkòÔk2ç¬ãÒ}ËÂ\zùœtuMªâ[ÓÒª-Ä0L/dÇo×ÂøÒét²ô¹uY|w‘eÅÛÄ*ƒ„*»m|©õ95Ä6˜¡ž{ ×é½=yJWf5NËYßš•Ã>lÇìÀè4ãˆCÒ¸úÜÌÿöÙY»üí¬yî|þñù–˜þALzŸ£oSžëô fv avb¶ÿ÷Ыk>Ì_üû‡òŸÿêw¹¡{An螟#fN?øß088Ä0½Ä0Œ{ÍFýóVÑ~=É™UÏûˆ _çÑWfÉ=/çþ(O+„8ˆVÓ'z4²é÷:‡Îœ‘9ßšYS3eÚ”$IOϾ¼sà`ªuueVãôÌjœž×}”5Ï¿‘÷^û ž cKÌö &;ã—d—¦ï¹¡Kav>w-Ûc›ìxžÏ>Û˜;öl~uçó¹ìò9énž—Ùg{¿[pÀÙvÐK ÀD±4bÆwßù,Kî.òøÃ¯dÓæ­åÉálm$ˆ© ðØžoçóîxÒÝ#™>AÌqg“9ßœ•ç¿ã5l‚±íØÓŽÉ±§“¯>Û×–¾‘µÅ›Ù²yë[bj½­Êöè¥ÿ–˜Þ&}·Ä ÄìöÜ»1©Õ²ukOtudUÎ9÷Ät§‘‹.®®IU|Ë`³ —€‰â…$?®zØNòÒÒuYÜ*R¼øæÎ_þΦo3ôf˜Ýî7Èó Øô{î®É“sêü“3ç[³rÄ1‡—³GãÍŒ™Ó³ðšy9÷ÛggÝÿÏÞÇÈ™v~ÿ=oUõ}ûä}ÌŒæîáè´%Û²dËÒHnÙŽmy7Ánc`‘M`ƒdóW6@€ Á.6À.² Á"»°ãõZk[´F’e[¶d˲rØsp¨™!9äpx³ÙwWwU=ù㽞÷¨>È.¾Íîª÷xêy_BUÔàùÕïµ÷ôÎé‹Z¸» lKŒ r.a“K¼-°È?6ˆI£Ôñya›Ôãù7¯ëü¹kÚ7ܧ_øüsú¹Ï>«þþ®Âîð€nLMVß/z;aÀ^Á/i㑳²²¦?ÿ“súÆW§uíêlܼÒ"cœ`J^Xeý ŒÉ?'¿iÆ?¶»¿['^<®c“GÔÑU‘$Ùæ]:€G@©\Ö‰“Çtâä1ݸxS¨o¦]$¿&lr ¶%‚+Rv 1ŠÃ3‰}Ê Ûäb$Éݽ³ ßù·ßÓ—çûú©O>©—¦&uäØHAw ¸oü]ÀA°W°€Œ×fõõ¯Në[ß<§•åUåU6ÂDÅ.émÆÉ¿¬„I›Øçÿkøð>xñ¸ö?1…eš´À{Òè±QÕÂÝE]8sQW^{Oõµ5çFM.R¦Õ% ÄHnÐE© Ìæ1²VkkM}ë›oè[ß|CO?w@/M½ ì„<Ïä\°ãœ)z;‰±,P짦g®H:Tô<€V^}劾ö•³:ýÃKÎñÂdÂ.9Aã,ÏŒ›mˆñÊž>uH'>xLƒcƒxÅv«µZ]—_»¬‹g.iivѲÈA FÉmQxÅýoÖÁóèøÄ8éG÷¸Öc¹cŽŽ è³_x^Ÿþì³êíí|°‹Úëצ&«_.zØ™Œ1?!ég‹ž°I7¬µÿºèI„Œ1GÒÁ¢ç!é²µö·‹zscÌIIŸ+êý-šµÖþË¢'aŒù’úŠž°I_µÖ¾Zô$`»†ì§¦g¾"iªèy®Z­®ïüÙ›úÚ©³zïòÝThå~ƒ0ù˜–A˜œ@L:ÓÕߥ£“Gutò¨:º;ô²ìÖZݼpS_¹¨ÛïÞ7†{ƒ§y˜è_mÄHRgGY?óé§ô¹©tèȾºf MNLMV/= €‚0 `Ï85=ó%ýOEϤ[7çõÇtVú×µ¸XS¶½e3A˜TsK‹@ŒÙD ŒÛþâŽ;4QÕñ×þ'öËxÎù°EówæuéÌ%]=wUz= ±ØLæ~1yÇm>Ž5yòˆ^úâ zñ#ÇâÏC X÷¦&«Õ¢'°“†ì§¦g¾(鋞ö¶7^}O_ûÊYýð{ï¨ÙT&ÀÒþ LÞØÉ÷6žÑþ'êØÉcœÚ¦+ßÚÊš®¼vY—Ï^Òòܲ¤­†W¤õša,c& 곿ø‚>õ™gÔÝC# õ­©Éê§‹žÀNB°gœšž9$éJÑóÀÞ³¶Z×_þùy}í+¯èÝ ·[XŠ Â˜è¡£§SG&êðóGÕÙÛ¹MWù¬µºùÎ ]:sQ3Wïf)îó‚1’UwW‡>ùóOës_<©ý ¢ÿtj²úß= €„0 `O95=sKÒHÑóÀÞp÷΂þøÎêO^~MóóËj\)638>¤#/ÓÄÈ+yÛsñ°ó·æôî+uíüU5Må[¶ˆq¶Y›3Nî˜9˜à¹‘ÕÉ×K¿tR“<¼í÷ŸLMV»èIì$„a{Ê©é™oHú…¢çÝíüïëkøŠ¾ÿWo©Ñ°WŠ Â˜’§±Ç&tôäq í¯nÛµÀƒX]^Õ{¯]Ö•éwU[\Þz &qLrß}bZ¼ÿCU}î—NêgþuvUì¢==5Y}³èIì$„a{Ê©é™ÿUÒ?*zØ}êõ†¾ûçõµ?<£w~|3p)0“z¬tuèÐóGuèù£êêëÚ¶ë€íd›V7Þ¾¦Ëg/jöÚL°1?ã?m±oÛ1ñkk­zz;õéÏ>«Ï}ñ¤Æ&èš% LMV›EO`'! ØSNMÏ|IÒ¿+zØ=îÝ]Ô7¿zVüÕiÍÞ[R6à²Qpe»‚0Æ)‚ÉŽÓ7< Ã/ÓÄ“啼m¼Ð^s7guåìEÝ|ûššõ†¿1§ ¦-˜tóLâ1~O#éÃ?qB/ýò‹zîä‘m¸j òÝ©Éê'ŠžÀNC°§œšžy\Ò[EϾwÎ_×ËpZý?V½ÑŒƒ) Â+; cŒÑȉqš<¦êÁám½~xØV—jºúÚe]}í]­.Õî;Óò˜Ô6»n&®qÎ=|tXŸÿåõÓ?÷Œ::ËÛríØÓþÅÔdõ¿*z; aÀžrjzÆHº'i è¹àÑÓh4õ½oÿX_ûƒÓúñ¹kþÆ–á•‚0Ùs·+SîêÐþgëàóÇÔÕß½—;F³ÙÔÍ·Þ×Õ³—4sVm Ä$‚.[ ÄøÛûú»ôs/=¯Ï~ñ¤FÆøkîÛoNMVÿuÑ“ØiÃöœSÓ3.é“EÏ޹Ù%ýÉMëÿèݽ½°‰ðJ:³Á1ëŽükA˜žjŸ¾p\ã8¨R¥´ W;Ûìµ]¾¤Û®É6íæ1>¿¯@Lj»µò<£~â ½ô+ÔÓÏÚÞ€½àäÔdõlÑ“ØiÃöœSÓ3ÿLÒSô<°ó]zû¦^þýÓú«oÓÚZÃ߸éðŠóºÍA˜}ÇÆu`ò¸ª‡Fü¢àT[Xѵ×ßÕõ7.km¹&é1©6™ÍbâÿÖnïá>|L/ýʇô‰O?­ ¡El¬&©j²ºVôDvÂ0€=çÔôÌß‘ôoŠžv¦fÓêûù–¾öû?ÒÓ¤/fƒÐŠèfƒ0%•;Ëò<\]ƒ=Û~àQÔl4uë­«zú’ïÌå‡]¢ÌÊV1É×é˜Íå?övë3_xAŸý¥Uî{àëÆ®õ£©ÉꇋžÀND°v·Sl IDAT眚žyVÒkEÏ;ËÂüŠþô«gõõ?8­Û·æ%…–0€"?©’ÛÎòð‚0݃}Ú?yTcOR©RÞþ»ÄìûwtíÕwu÷âu?¤bSiË!–Ü@LËcZ?†M3¥’§Ÿü™'õÒô!}à™ÛrÝØUþÕÔdõ¿(z;aÀžsjz¦$i^RwÑsAñ®\º­—¿üC}ç›o¨¶ºæSÖ ®„á”ð¸ B,ÆäŒµ¹ ÌÐáQíþ¸ªGF·÷À.W›_Öµ×/éæ¹+ª×Vó›]t?˜t¨f“cEM3Éy<þä~}þW?¤ÿìÓ*•½mºz<âþþÔdõÿ*z;aÀžtjzæ{’>Vô

vPcÏW÷ðÀöÞ@[5V×tçÇWtëõKZ_Z?Ó"À"ë]Za6'/0ã<ŽŽè¥_ýˆ~nêEõöwmë=ÀCg% MMV犞ÀNE°gšžù’þyÑóÀÖÕVÖô_ŸÖËÿþûzïâí–!–lÆyÌ ¹„np&Úµ…@M°½ÒÓ©á§iø©£*wwl÷mþßG–ßš¬þFÑ“ØÉÃö¬SÓ3½’æ$yEÏë{ýô%½ü»£ïû¼šÖ* ©l)Ä’ ´´Ãy4-‚4é@)y<~@ÃÏWÏèP[î`giÔVu÷üeÝ9÷®Ö–•dÑÍ.ë„fÖ;.'¯e&õ>ªúü—>ªOÿâ‹êîíÜþíö¦&«ÿ[Ñ“ØÉÃö´SÓ3oHzºèy kmµ®ï|}Z_ýݿѥ·n8M,© KNˆeóm.é1Âã6×,#Uº;U}ú¨ö=yLåÀ^d›Vó—¯ëÎë´tãnë Kðh@ËzÍ.ùA˜8dcsƒ0­C5ÝÝúÔ/¾ —~ýc:pd¸ wÛä¦&«ß,z;aÀžvjzæ·$ýÇEϱ»·æôõßû¾¾ùû?ÒÜì’Z5±$Û`rÚ\¢}ÚäÉã6j–éÔð³'4xü€L‰r!€oåάî¼qQ³®ÊÖ›jÕì’d £f—ì¶ô£Í»e¨&Ó½ø“é ¿ñ“zá'‹¿±SŒNMVo= €Œ0 `O;5=ó%ý“¢çéÍéËzùw¾§ïýÙj4ƒÿ^Ñ*¤²N˜e£ËfÆð_æœW2ê?º_Õ§«g|_[î`w¨¯¬êÞùw5óæ%Õ—V6Ñì’hÙ¨e& ÄlªiqîÁ£#úü—~B?û…“êêéhÏÍÀV\™š¬)z;aÀžvjzæS’þ¬èyìUõµ†þê_Õý»ï鹫J7¸D~z%tÉ ³dƒ0ÙãM0V«1âcdJzòˆ†ž:¦Jow[î`w²M«ùKïkæ‹Z¾u÷Áš]R /¹¡š-ÕÝÛ¥Ÿÿ¥ê¥/}Lã |è§&«¿\ô$ðh1Æüç’þaÑóÀŽ÷÷¬µYô$vcÌïH:Yô<$}ßZûw‹zscÌoHúŸ‹z<2þGkíï=‰ÂóI£EÏ;Úkí狞ìfå¢'@ÁÎ=½èÞy}ã÷¾¯oüÞtofA~Ð¥Eˆ%jj N6Î@é0‹œÇÜ1Lò°Ä)Ùc:«zæ¸;(S*I’šü°`+ŒÔwü€úŽÐÊ­{š9wA ¯É6’5ò“)Á£1~8%|”‘16|…_üçF26qš¿¯ÕññññXË‹+úÊo}W§~û»úðO?©_üÛ×ó9ñ°îb§‹žIÃ’ž,zØñúŠžÀuL;ã?× ~ÿªvÆ}ÀÎ6Xôv˜'$= ö2Â0€=mj²zïÔôÌEIÇ‹žË^ðöëïé«ÿß_믾ùªêõ¦¿1jtqå‡Y²á—ì®8è²Ù1Lr—1ê;2®¡§O¨{b$zÛÜêÕÔ9<¤‰Ÿú êZÑìùw5ûæ%5Vj~³KbQ&°bŒ Ú_Â@‹ó¸n˜&»+w g,k¥üÅ›úÁŸŸÓ‘ÇÇõ…¿õ“úäNª£³òïÖžE`Ãà/:$ ÓfÿâÿýÙW~ä¿hH‰ƒ)áfÿí£¹ç³ÑÚp ¯£¢ÁÕàSÇTîë‘D  =¼®NU_ø€†ž{\ —®jöÜ­Üž_Z´ÄäaÒa—D˜f“c'¥f.¿}CÿòùýÛþ ý“ßú/5v úPïÓEk!À&†ÀÃüjÑ“ØíÖÖêÉ ™’—œ`Œ”Óø¢Ü0KæÜÄ&y˜ó¼c¨_ƒOWÿc‡eÊ%I ~}€6óŒúNR߉CZ¹yW³ç.jñÝ÷ý6²TˆÅ›vQ"ØâÓ:Lí76Ó>³^gavY]ÝõÖìQ7§&«W‹žÀ£€0 ~m6:1ä?iÙè¢ÜV˜ÄcRûóÂ2ù˜t€¦çЄž:¡î£’üuÀ¶y?WÀƒëÙ§ÑŸÞ§êŸÑüùKš{ë’š+«þÎ(£b‚Àæú /Ù LvWbŒ¼v'tÓÑYÑ@µ÷¡Ý‹=Œ¿“la¤3EO`/™Œ_˜ôÞV.9Ç· ÓeÃ4Š‘äuTÔ÷øõ?u\•~Q/-0€¤ÔÓ¥¡ŸÒàäZ¸ðžæß¼¨Õ»³‰†—Ü L:ì’hɶĬדn˜I|‡£ÃlaÀž75Y½qjzæ}IŠžËn6:1´~+Lðr£F9»Í1¹aÿ±<Ыþ§N¨÷ñ#ò*þi’ìd^I½UïãGµrý¶æÏ]Ðò•ë2jæ„]”ǤÃ,J?sÛaî¸" óðÐØ$Â0øN‹0L[ìòŸ˜õ,á>³n Æä´ÆdÇë:0¦¾§N¨ûàx4²%xÄtŽ «slXõ…%-œ¿¨Å·ßU£¶ª–-1™š­Ó“>Wò¿gã@Íèþêÿ轉f€M" €ïŒ¤_,z»Ù¨ó«òÆ °„-›bR'eR0ÙsºÐà O«<Ø/‰ÀîàõöhàƒÏªò)-¾sY³§_“]k$Ã,y…09A˜(ì’i‚I…cŒ¡æá¸75Y½Pô$„aðñKÜmÖÓ×¥ž¾.--Ö”°dÂ/-Zaò6åµÂHZyÿ–:Fö©·¯GÆó¶ùJ(Öê̬–.\–­7¢ð‹¤8̒דh‰qÎ 7ä4Ë„§ŒN =œ ÛÛÎ=€G a|„a‚áñA-_¼¼Êi…Q^Ð%¹1 ʬ×$S¯kîôZ|û] ¼øŒ:Žoï…P€ÆòŠ^9§åKW%keŒ‘ š^Öm‡If6Ó£D°†f˜‡‚0 À†@ÒÔdõò©é™;’†‹žËn6:1¤÷.ÞZ·ÆÞº&±!Œ‘d¢s¥Æü¢f¾óCuLŒªÿä3*ômÛµð°ØFSKç/hñÜÛ²†¿±UÓKb Â1QàEùí0ñ¦Öí0„a ‚Ù[@€ØI?_ô$v³ÑýábÚVAçàL &Ý Ózœô¹«7nëÎ7¿£îÇŽª÷™Çe*•m½.Ú¥öÞu-¾z^Å¥Üý¹í09¡–Üv·:fv˜‘qÂ0a€- @ì´ôÕÈÄÐú /Rª &ˆIž“ÜlÖ ÄÈJËo¿«Ú•kêyæ u;”Jß°sÔgçµ4}Nk·gü°K¢Õ¥U˜%„I´¿¤ª`œñÖk‡¨ö¨£“i›-I:_ô$%„aˆñ‹Üm6:1¨l›‹/7È¢ô~)·ÆÝ‘’ O6ÆÈ®®iñì9­\º¢žçžTedß\ÛË®®jéÜ;ª½{U²Íì9Acl”‰I¶»¤Ûaœ@Mz¼t&xð¿»Ñfg§&«9Øh…0 1Â0m6â.¨Mbò‚,9­09!šu[aœcÓašÆÜ¢æÿú´*cê~ú y=Ý÷}]<0kU»tE+?¾ »V—b1Æ$Ûa2¡ÅÇ´µ$r0ëj¢1ýqF&†Ú-ØÃø;(À† ö¶¤yIýEOd·™Ê ¿˜Ö­0-‹b’!cLâøäóõÃ4k7niíÖu?¢ŽÇŽÊ”J÷qeÜ¿ú­;Zyóm5 L‹0Kb_b£?X^;L"“¸ç8Ç+ÙTíB`‹Ã˜š¬ÚSÓ3¯Húé¢ç²[ öËx^üËõ®¼V7(Ó²&•˜Ém…iˆ Â4Öªvá]­¾]]OœPåÀø\%›Ó\\ÖÊù·U¿}7'˜¢ü0K^ÕËFí0áp9Ù™l;Lr£„aÂ0[D€¤Ó" Ó6¥rIÕá~ݽ=·éV˜Ä†¼ ËF˜ÌxùãÈÙÚª–_?¯Õ+ï«ëÉÇT¤$°ýl½®ÚÅ+Z½|Uj6£í¹a'ÔíÏ ³¸I— ÕÅ߯Ä8‰ÀKn;Lòœ‘‰¡vߎ½nUÒëEOàQC€¤3EO`·Ý?¨»·ç%ågVZ·Â¸Ç¦ƒ,éýñ8ÙV˜äqyašÆü‚xV•‰1u>vT¦³cK×@.+­]»¡Ú;ïÊ®­%C,™0KªÝ%Qò’ ³dÚ]ÔzœÔþóœv˜ P32N3L›½65Y]+zÂ0$.z»ÝðØ@2Ȳn+L:È’¬‹Éo•1¹›òƉ‚2™ÿäµ·Ô¸sW•#Õqh¿äy›¸B²³sª½}IùÅxãza–¼¦–D;Lxnú¸àI"“gSí0Á†‘ñm¿Hàïž÷0 Iç$­Hê*z"»ÕèĤͶÂ(?ȲQ+L^ˆ&÷8wœl(ÇÉ6šZ½tEõë·ÔqüˆÊ#û6¼FBÍ•šV/]VýÖ]Éæ„Y\Q>%8Æ µ8í0n‰Œ2¡·Æø>ÚaÊž††ûÚq[# pÃà˜š¬ÖOMÏLKúhÑsÙ­F&u­0Á«’'Ûln¾&:l­0™@L|N³VÓÊ›o«4دÎãGäõölî‚{’m6µöÞ5­¾]j4ü9e,™v˜VM-að%jI†d’ç™’‘m4s5›k‡ˆ¿/Ñ.gŠžÀ£ˆ0 YgD¦mFƨfø©#<:¡+ß>«µåšs~úIªA&o[NL<üv™ÆÜ‚–¦ßPe|T‡ÈTøÏ+€¤úí»ª]~Ovu-®p )‰`JN&ÛclTÙ¨fôùc:qPoýáw²š–Ašd;ÌÈøP;o¤†¤³EOàQÄj ²N=Ýltb0x¶õViu~Ic“iß“GôÞw_ÓWÞòõ>Ñ “d‰†Y/“;¥Æ1ªß¼­ÆÝ{ªœPyl$7PØ[š‹KZ½|UÍùgk~& »$ZYÒá˜tŒr¶%C-}ûGtøS/ªobXwß|7ÿœDv¦u;Ìèø@;o¤7§&«ËEOàQD€,Â0m42„aî£FòÃ0ÆH¥ŽŠŽ|ò¤Æ&×åo¿¢{ÞOšw~"“3¹àÍsÃ4îCðh ­^~_õ[wT9|@¥þo`×±ku­]½¦ú™Öa§Õ%ÑÆÊ Âc㘰Õ%¨‰ß¦ÒÛ£ƒŸÔðÓGäÿûtu~)û~[h‡‰¬hþΉírFÒÿ]ô$°ã].z;ÔôJÑ“ôã‚ßÿuñ9‚/z;Ìÿ+‰¿0c=׋žìv„aÈzUR]üÿæ¶èìVgW‡jµµ-·ÂHÒêü²ŒÛ]ºª}z|êš½|CW¾}Vµ™ùuÏ_·Æ}š× #'(=JÍ•šjo_Ri°_•ƒò:;7¾€GŸµZ»yGk×oJÍf°1N–¸aÓ&Úa”&¿Y& µxeOc/~@zR¥J9þ5Òêübü÷Ñ3B¦ÝÎ=ìÖÚoHúFÑóEÖÚÿ½è9ìÖÚïHúNÑó%ÖÚÿ¡è9°×±¨€”©ÉjíÔôÌ’&‹žËn521¨«ïÞö_l¡Æ#ÛljmqYå¾îèWì1<2®¾¿õÝzí]ÿÁjÔê¹ç'ÇwäµÁ´j’ÉbüÇÆÜ‚š ï¨<¼OåñQ™’·é{x´4fçµv톚µU%j^¢Ò?X’ £$Kä`Ök‡Éiw|ì€|ü9uö÷Êm0á£d´:·œ—sþFí0Q›Ú…f€ûD€|§E¦mFÆtõòxÃ&[aüçF«óKªô÷HÆÊÊÈÈÊJòJFc“iè‰ÃºþƒsºûÆ%O"ü²‰V˜cåc¥ú»jÌΩ<>¢ruhý›x¤4WjZ»vSÍÅÅÖÍ*™P‹6ÑôÒº&¨éÚ7¤^}†LpЉÿ©Í/Û0L[YÑ pßÃï´¤ÿ¬èIìVÑâÚ-¶Â„jóKêS°Ž8<:XTleTéîСŸzAûž9¦kß}M ×nç·Âd1y!œtCL6Dc ­½S™Y•ÇGåõt¯{O;›m4T¿uG»³ŠUòÂ,N«KXµ’FqÎݨ&§ÜÝ©±=©}O•ç™ðûÓi…‘m_[jÈ Ÿ¯ß32>О› Izgj²:Wô$U„aÈwºè ìf£Î/Ío±F’jsKþ¢ßpÕ®52Æ_Ìk/2îÞ7 ã_ø¸f/^Ó¼¡Õ…åÄ8J ~“ÚŸx•ÜèîLͽ¹²ªÕËWUêïWytX¦ÂŽ€GеjÌΩ~ûŽl½‡Ha– ì’ ›(jIaÜãZj‚ӌѾ§OhôäTê(Ëx&ØîŸîbbŒÔ\m¨^[.c«í0}ý]êêîhóÍÝÓh…x¬¾ ßYIMI^ÑÙ†Çî»Fƨ6·(câà‹56 Æcä/&8¶_}‡Ætû ºóê5×ê› ²´n…I·N˜&xh.,huqQ¥}C* I^6ØYšK˪ߺ#»ºê”´ä…Y²a’l;ŒÓþž˜¨IbÔ{`TãyZƒ}QØÅÀ„˜àµÂGÿ½V[†kòÛa’×32F+L›¼x„aÈ15Y]85=ó–¤'‹žËn424ÃÜG+Œä4à ’£=6 ¥XYký5Ë’¼²§‘ç×à‰Cºyæ¼æ.¼¹QeÝV˜Ü0ã¸ažÆÝ{jÎ/¨¼¯*¯¯7çîŠf×êªß¹«æâ²2a–(;’jX‰R1Êe6×>÷íìÓ臞RßÑ ÿ~]9˜ 6§­Î/e®kýv¿e- ôŒ¸-nhÂ0€0 ­a˜¶ Ã0[m… Ô‚¾qQ‹¿pØm1VŠbÂÆ,ò­ôtiÿÇ'5ôÄÝ<}^µ;÷Rï¯ü÷Ïm…É Ñä„i/Œ‘­7´v뎼¹y•‡«2ù7 ðp5›ªÏΩ1· 5›™0K6Lœ·Õv˜cŒL¹¤}Ï=®¡–Wò¢6ÿ|·Ã„á˜p nPÆH«sKjñ¦›j‡‰‚«hÂ0€0 ­‘ô·‹žÄn4<> ãks#›h… ýf˜ü)nŒñ£06úµûpõ¯±R÷È棚¿tMwξ¥úÊjë K&c2»ZbÌ:!šæêšV¯ÝT©¯W¥¡~™Ri»h§æÂ’³³jÖ›þT"Y7L’nzIaœc7 ÔxFýÇjßs©ÜÕ!ÏýZq1AÌ3 ”F­0©×µ¹¥Üyl¶fd| }7W¦&«·‹žÀ£Œ0 ­ñ‹ÝmR©”48Ô§Ù{‹J†`6n…‘1Z[®©Y¯Ë”KNþ$XÌë_¬lŒ G²VQÆÈ¨ÿè~õÓ̹Kš}ë]Ù¦Ýðý¹!žTCŒÒç¸Ã5—Ô\^Qi O^_Oîq€ö°««jÌÌË®­:m)9A˜ ¸’&Iµ»Ø(€bZk”Ôt ißäÔ5Ô‡[Âö—è;)Ùüâ~%^ÿ^_Œ/ò>ÚaFi†i§3EOàQG€ÖX¨ØF#ãAFZ·&/HbŒVç—ÔUPø üaŒ|‰`⢗øùýF™¨šaÚŠÀ5À" @ S“Õ»§¦g.I:VðTv¥‘ñA½sþz~«ŠœÇÄþøEmnIÝû-^$Gù§ÆÊÈXë¯Y‡ŠŽƒ4•Þ.}ôY-ß¾§™WßÑÚÜBj.ñÜLjš­çŸwá®l˜Æ6jÜ›S³£C¥þ>™r)ïöî—µj.-«±¸$5›¹¡??’x¡d;Lºh¥E;L‹pŒ)yxì°?,¯ä)üü‘#ÿ IDAT^‰0qø%<5 Ƥ_Mxtˆ©Í/å¿¿üµd>'Š1ÆÿžFÛ†x@„aX߆i‹Ñ çç!’`S^›Š³©6·”lyq`deƒ¶˜(câ}áB`…A…2þ]ÃCšø™iþò5Í¿¤æZ=óþ‰ÐËz­0î‹M…i|vuM»3òº»äõö¤Ü[[UcaÑÁؼ ‹Ó˜¢í0Á9Qà%·]EÉÎûôÕÀ“ÇUîîç9!˜à[*nwqå„^Ü–å„cü+UmniýëÈ\s¼³T*©:Ü·}7i„aaÖwZÒ¯=‰Ýhd,üÅùT$'X’|î?ñÃ0 Öø:-/6Žq~Ù?l€±Á¯öû2þq6 Ë œåYõݯîý#š{ë²/_w~Q?êá“ ¿¸Çå„hr‚?áaÍ•šš«k~(¦«3ïV6`ë 5—–e×Öœ­Nð%'Ì’Û…Zr†Ù ¦2دÁgN¨c¨_ž‰¿+âЋâ¯)Úæn7r1A Æ„­0ÎëµÅZ†`cgŠžÀnåÿò|º%Å9À †ä…IjsKÒáL8E Ã+q8F&¹(ÀDo`Œ³Oδ£Œ²‰Æó÷ÙàüÊðÊCª]»¥Úµ›Q“LtaÙ£m&q² Órœt¨FR£!y^f ØU¬Í†Y"­Â,é Œò!9Í2év˜RŸºŽP©§+§a–èÛÁ¤¶‡ãd[aÂñ³m1N &K©×Æ Êã¬Ì-Åá 'ä’ óä„‚Û@3LÛ°Ø&„aØÀÔdõÒ©é™»’ö=—ÝÆ]lÛ2 bÒOâ•Ã+sKÙ¬‰Ã)QŒ¬¿Z Öû ­ŒŒM…cœ…ÎaÈ&9žœ [k£ñŒŒäyê80¦òHUµ÷®«>3»~Å•jÑŠ“<''L“^ì »E:0è†YÒ'Ôâ–¾´„„ç¸c§ÆéêTçÁ •‡âÖ9ïî?átÖÿ°l+ŒR¯Ý1©¦ƒ2nCLø¶ÞÔÚr-¾ÐD¦'/“¼ÝÝêéí¼ÿ?¬‡€5À6! À朑ôsEOb·H†BaÌ“ä¶à—ïãH*”Ò¢Æ:m1&Xl¢•ÀqLr<ŸŸ/ Â1òP‡!I O52ò:*ê:vXõÑa­]½®æòrö:ZYRÇm¦1&y|b£çÅí c<ÂŒçɆŸ¹› ³D'+§%Å &#Á†D F2%O•±•G‡e¥¦h†Ø&„aØÂ0m6Ã$~ä?§ %ñùa˜ äbÝp‹r`â°Kl `ÂÅÂþxN!@*ø¾v§cm¤1áBm#•z»å=q\»÷´vã–l½_KêróîA”q÷;·#s“òÂ4ž‘ä‡bl£A(À£ÅódJ%ÿ¹]?ÌoJ‡YÂÏøûh‡‘T®©<1&S)Ç…a”8ä…U””q¶'ÚbœïƒLP&5vøžé`Œœ±Wæ“׿©v˜ø^ކi—%I狞ÀnA€Íá—¼Û`dÌYp›âp–'·!å¹ÅLÄa”¼˜hD'¸"Y†f‚-6ü…þ8ø§¨&¾¤Çó'6ÈXkUªª4دµ[wT¿3“¼¾u‚,îõ¶n…i5N*Lc<™’'[oÈÖë€Íóä•ËÎüaw§  Ç(ð²‰@×Û¥ÊƼî.g˜8ˆ†]üiÄ-ÑÇ®3Åth%|‰dRA·-ƤÞÃ×mŠY™[NÝeÃ@î'˜äw3¶ÓÙ©Éjcãð„aØÂ0m0<Ö/'õሷ%[c’Ï—g—‚…½ÁâæL8%84N‘ `¢ L¸XØÙ¼—3£(ø’Ïççì Æ³’äyªŒ¨44 úÍ;j.,æ\z:Èâ^{~ &·U&Ó°?šJY¦\–]]õ›b`'1F¦£â·ÁXINÛVË0K¦Ý%KÉv˜Vm)©qL¥¢òè°J}Q EN% º˜¼ÐŠ’A™0”˜”q[aÜF˜tPÆ?'8ºEP&Ü^›_Š/Þm¸qB1ÉPòÞ†i›3EO`7! Àæ¼%iAR_ÑÙM:;+ìÖüÜŠ¿!ÑŒ’æˆwJ’Vk²õ¦LÉ“ddœF#9¿„<¯m8¤Uf±ÎùaÆ8‹†ÃMr<66X¤lm*l,4v[k$ÉëèPåà„š‹Kªßº+»ºº…kW´-·&wSÎxždººd 5k«R³)(šé¨ÈëèðãˆVÙK"Ì’ÂÈ ¸äœãC e^0¤¼oH¥}C’çA} ¦C.QÖÐ ºD'<~n'¶;é±åk²c· ÊȨ6†a¢»ª8³Î®àù0a˜v!X °ð S“Õæ©é™³’>Qô\v›‘±~ÍϯÄLëcã0GðÊHËóKê©öË©¸G:!— 06 ¹„2&.ˆC1Að%/Øb•l€±qHF’ÂSݶ›Xq,y==ê8Ò­ÆÜœwïÉ667ÈbRîþDF(½Ñ$žº·1 Ó”Ë*Uʲ«kj®Ôâáð™JE^W‡äyþçP«Lø™—™dÛ]¢v˜d&8(?P#ÉëïSyxH¦R‰Ó'î™y¡~§(ÓÐbÜóÜ@‹3Ýl[Lrl™d€FÎ{†3L¶ÈHËsKÎuÆ—í:­µ‰mî}% Ó.„a¶a6ï´Ãl»‘±]|çV2ȆV2øe¸aenI½ûúƒµ¼AÈ%lyqÛd8F6n€ñ÷KQL*Ü’('P¼˜8 ÉȦ¦i¢ñ‚¶šä¿}¥•z{UŸ™Uc~!ÿšs®=N÷˜Ôþ­‡iLg‡J5—j²µZÎÀö3¥’LO·L¹äoX/Ì’ÈÃ8ÇdÚ]Ò›òƒ5Q±Lg‡Êûªòº:!˜0|P¡EÇ$þqÎK´¾(j1NÓL²%&;¶”qƒ/‰`Œózen9ÿÚ`¢»ŸÝfŒFÆúìyV%½^ô$°{c¾$é7‹ž‡¤kí¯= `+Œ1ÿLÒÓEÏCÒ´µö¿/êÍ1Ÿ—ô_õþ.kí犞°Ƙߖ´¯èy›ôO­µß,z°Ýðyü¢wŒŒ ælÍcZ…9Væ–‚uÑaðD™VkSáë 4¶Dá–`Á° öû™š0Ìâ¯.¶Šƒ4ÆY@ì6ÀÄãù»Ã kgý±•JžÊÃC*õû¡»RK^s^%qËâ{fç¤îëzaãÉëë–íêTsqIvm-ç`xF^O@±VR6ô²Q˜%’ s$+cR÷¯¤òà€J}½N’%8%Ó ã„XœðJîvçÌtkKôñìb‚ L"@“;¶‰‚5ÎXáÔ´2¿ÔâÞ(JdŒÑ¾QÂ0mðúÔduµèI`W;!é³EOBÒlÑîÃOJúXÑ“ÔUðûÑÎø%Ÿ–4^ô$€Mú¢'í@€Í# Ó#ã΢['å‘|´|n´2»”ø%ýlð%~…SÜV·»D»‚³Ý˜h¼DÆ$Û&Æ æ"aq´/Ïúͽ(S©¨<:,»²¢Æ½yÙF=uX‹ KâyNˆ&sX«qŒ¼JIÞЀš««jÎ/Ê6€íâõt«ÔÛ#%r+©ŒjIa‚A‚sî«Æ“¼Þ^•úe<÷ó1€ Ò%QC‹s„Û~c¤ƒ2Q0&½Ý 6¦-‰àŒóžé`ŒZŒ½º´ªf½Œ0óï]^+Lu¸W¥’w°X‡Øf„aؼ7$Õ$u=‘Ýddl èH?ÉKÂÄÛ–gå¶²Dá› §D…,AðÅ­1ád§ÆÊÈ ˆÃkÃ…Êñ{¹a™¼˜t£Lpº\´¼9ŒáÄ×e$©«Kå±N5ÕXXtæïÞŽl ÆäÝ¿t0¦åmMÞ_¯³S^g‡š‹ËÁÒÕ °y¦³S¥>™RIaLn˜Å Â$öû£(·%&êÈÔH^W§¼~™r)N¢¤êUŒ›Dñg‘iñ߯ ÊħGSX/´7È8á–àûäÞ3ŒI…eÂcÃù¬Ì-Æ÷)·§Å¶àadl`K¦Ø4Â0ÛŒ0 ›45Y­ŸšžyUÒ‡‹žËn-¼Í„8RÛÜÍN¨cyn9(zq‚'²©|riÑcËâ˜ø]Rí2éñl² ƒ/q£Œª8H“ÀÄÆ[­gäõõÊëîRcaQÍåš{’Ï3­0É¡£÷Ob²ç˜ô¹Æ“×ß+¯§G¹95—–[aÊe•dº:‚E'Ä…1‹R &îóTÆù¼o¨ >×J%•úúd:;¢$‰‰Ó$Λ¸7©ÐI2Ì⟑v ?o×Ê8c;¯ÓÁå½§IÍ/¼6·”ºwá=KÝÇè¾%·†iÂ0ÛŒ0 [sZ„a¶ÕÈXðÌùþ!˜¼f“åÙE'œlvÂ)QË‹›±É0KÜ(î÷'asÂ-VñZìxa³ó^²©i;m5J¶Õ$ÿ­xár$˜SÉSi _^w—š K²õz2“wß÷Ï$÷gîi8ÏÔ9îqeO¥}C*õ÷ª>3+[[ͼ?$xžJƒýòz{ãpFN›K^(#·&êhuNr^O—¼îne’#Ñ@qZŤŽÉ4º(<./Ð’ls‘”Él7©±åk’ï‘|Ïàœœ Œ1~@4²‰PŒ{ï7QÍ0mÒ4]ô$vÂ0l ¿ì½Í†öõªTöÔhØdZ£E&¹†Ùhyni–E­,ÙàKü: §Ä¿–<Úp¼`©°•fI.ÔŽÞ+˜—Ûçï¶ÁBfkãkŽ—"»í0Æ ÉØ¨]¡Y«©¹¼/úÞd+LâØV÷:}NâÞ©£C•‰15–Ô˜™•m4rN°×•ú{U”ñ×êˆu·5ÖZ]ª©£§Óo€Q¼ÐØæ_ld Ã)nÆi‹±r,'C2Ñx&^Їb² 0 ÏrÛf‚ñlºÅ q½é°‹¿Íëì©”ek«j®®F œ秃,î[d1™Vw>9ašR¯J}=ªß›SãÞ\¶Àžäuw©<<$ÓÑ.m]6¬‰êµÜPK ɸ ·:fí0¦T’×Ý%•JÉ¿ 1’ü¼ŒC0a%n[Qô˜hqÃ(‰†9ág»R¯Í/ÎØñ{æeÂ`Œó:ü–22Z™ÏË\ä¥_RßCÁ=¤¦-R´a¶fZR]üêm526 ›7ü0Lb‘r*“á$WœíF+sK~Æä7ÀD-/N8%\œ­0žbãIÑñÙñÂýRÔ#¡vÔ¼`’ï,Jv,á¬ÂÙ¸i¤l`Æ¿m¡«S¥JEÍZMª79˜üû–,2铜ð‹I–ÇóTÞ7¤Ò@¿ê·ïª¹°˜Àž`*e•GöÉëíñ7ØõÂ,© LÄH¶Ã¤ÏuŸ¦ƒ4ÁçlÉ“éè©T6§ÄÕ)‰Ù:I–ð¥yñ‰B,n %o»sf¢µÅý8u1Á7A"@“{Ý Œ;õh»ÎòìR|‚Ó^–{ßÿÍ0mA  X¸ÀLMVWNMÏœ“ô|ÑsÙM†Gû• c¸ÏÃ_ÔŸ»ÁŽ¥Ù% î¯JNpÅ žX'xUœ˜pvt|ºQÆ–ÿ+úÙàK0žu³$Á>ÅAš(Oc⹦0É£eÞñ>7ãyòºº¤zC͵5É67wßœû—ÉÃd1&µßynŒL¥¬Žãj.-kíæÙZMöϨ¼¯ªò¾¡8WÑ"…2ÜF„qC-n&²A;Œé¨øm4ë„[üÀHê;&ñ¹+' ’<Âmƒ ¿-ÒA™(“Þî|§-‰àL⣶uP&ÎQ<îò\ª&s¯³ÏÝÛíc›Ñ*Єaغ3" ³­FÆÖ? /„áX™[ŠÃ)aã@xhNŒ›·‰oÕ(£`•q|‰Ç‹d?Άċº’ï.WÃ1 C;aØÅÆë“múBÃUËñMˆg!©ìÉ+uÊÖë²õFæØVA–Ô†ÜãòCHÙ0×Û­Îã‡Õ¸7§ú­Ûñ<ìJ¥Á~•ÇFdÊeÿ³QA“U„QNøÂ ¾ä´”$r0ëjÂÏO¯,S)Ižç¼‘óÔM™¸;œz“:ÆäOüé8A™øôhªQC‹Ö ÊcG¡%·'ÞÃ7Yd“œOøž¶iU[Xɹo©ûžùCñ;»+êèÞàO[dE -ðu§%ýÝ¢'±›ŒŒù¿D¯EN…2Âm™Mþ¶¥¹¥LበÂ(ac‹e^¢}nðÅ:Aš0DãDNl8^°lØÊ ³$jKrb’ 0qh'˜g°Ú:õ5‰KtõÁUÄÿÊÞceÊ%™’§f½!5›­ƒ,-³-á¾x±uæ­òÂ4&~,Uå ö«~ëŽêwf² i^w—*ûÇåõtùG¶E˜%³ñ>ÚaZj<É+—%ãeÒ)ép‹®Ó ¥XòŽq‚'©0‹F~ØErB,-ƒ2ɱmOc”÷ž&5¿œ°ÌòìRú ºqqˆ(u¿û;2ºA0÷ãÂÔdu¶èIìF„aغÓEO`·‰àº!˜t(#~žXälŒ–g—‚õ¼q¸ÅdÂ)Î>…u.A%j€ ßÙßjœ·ŒŽÏi€qfÛ¢&޹D¡g<›³€9fý5ÎémŠ×‰»m2¦Tò‰Ûf‹!óƒ,ÉãR÷{V˜Ä9ÆÿÊþ1•‡«Z»z]ùx´™rY•ýc*Uý ágV®H4½´³ÄŸwés’§&CN ¦dü&˜ÜpKòû!Û ããgœö—(äâ ›hI¶¹„ß¹ÛMÞØáñÉ÷H¾gpNNPÆ[Æhen©Å\öÏ ýܘ8˜ŠmÅßÚ„0 [÷ŠâŸ¯Ç6Xwn&l‘µto1X\Pl Nq‚0r`âýq8ÅAš°F’s|ºQ&Ü/É8Áë4À¯×/^«†]âØŒsá‰V˜p—qÖ3;s’‘õ$Y/ÕO¤U%Šô$ö¯Œqƒ3©ñ¼Îu>vT¹y­]½®æJM1ƨ26¢òÄhÔV’ ³8¡–uÛaܤ‹±Ùv7«ø¸’BâÝp‹r0q¨$þÇ$Ï•RIµ¾˜8æ˜jr‰nO¦&³=z·äØZç=ÓSM6Ö$Ã3FÒòÜrâÏ,y¿• !e1F#£„aÚàLÑàÿgï]ƒìºÎ3½wõîÐÀi€ ˆ IðNB¼Š4)‰¢)“–-h¬±9ö¸2‰=.'åJʉ“ÊüÈåG&U©¤Æ5™r¥*Î̤%Çv$›–¥Ø”¬ M‰¤àWÐ÷Ó¾­üØëò}k­}º4pà}Êúì½ö·ÖÞgï Vù{ú%„B!äZ…2 !„B!„rìÞ54ñÜþ‘Cnk÷Z®ucs&½,Ñè<=ÞÌ(ÇÈTyhHj1"&,Á¯M”©Ú¢øâêÙ¤^’V|kgŒ·uÄV•“Š.qG‚æög”ÈRÜ&jê šâÕ1™LSýܹv :× bþ㳘;qva„O>ëÖ ç¦Í0½=ñ}ÓB„ RKI€Qb†ÿ1­½ßðWò·´Üâm‘\œï()·]V”’Š'ZE™ SŸnÏkÇ9 ¢Œ‰µã¹è9ýö £m$qî6ù(¿3 ±q ÈŠÃdB!„B!„B!„ËeB!„B!äâØÊ0+F__úûWaªéSCê¥ -gT?ÏLÎÀ..˜Ž*ÅË)¢Ñ×;%ÖÉ(>F–4¢;È)B¤ á2ˆrKL”ýÜay¾ùØÕ32R(J6!QÆI6êOß,®ðÝââ…Uˆñ6o,.V åÅk­/mzÍM²_n* 1ª/½Ã gÓ0zC8üæNŸ!ä“IGß*¬Ú~#:Ö ÂZëÄ”h¨cQqï/ŸBD9N˜.* j›Á"ì‚ùD™D#2Xl”[¼H£Ä—0ÞÍêùýˆ’ êeŽÙ3Rrñ—¢ª"b$ d IDATþH. £V#ö-.bqÑÂtuÀ˜N,GdÑß(£ÇÕ L€éîBßÍ7¡wS3ïÇüø$!Ÿ LW'VmÝŒî ñŠ©Þo6(ü‰ÔâÿRbFºQ5a·«³ØùÀ.BY"R¾K,‘Tn‰âŒÉS¥\“K'*‰%e‚#·‡Ñe¡EŠ2FÌ™Š1òs&ç •nª:ÓãMùåÄk-¾ˆ )Œ˜Æ0e˜æøî]C·{„B!„B!„B!×*”a!„B!„‹ƒ¿é{…ilı÷Τ—‚#ä ÿcs´‰þuýÕh‘ÄD9Å÷­$Yâ~QÅ 5@Hˆ‰ãÅ\Õä‰â‹âKš(“ÖC"À¤²‹1¹ä¢Ž²e9&¬ÊZعy c¦»Gtj׉,ù5WkÇÝᎠénCç@î¹ sgGÑ|ï8ÏϦ… !W c°ê†aômÛ tvI%Èx"9kYé0JŽñRF:Îý`â{ØÎÍÃÎ/8 $5í„Ü’¼Óâô8?G"ÎÈG âIuI’T˜dŠÐ‚¢ L'Þƒ±ŽQK–µÃ8èõÔÍYÉ0ñûÌ#b’[üwåþhl\²¢ìm÷!„B!„B!„B®e(ÃB!„B!W˜Ø„›Šñg0bÔøé±fÕ ìLÀFÖ&ÀÄý¾ºuŒit½jm%ñE'ÀÔÕ‹§VN‡ ;T˜12G¤ÒÀˆžhyŒ]°°ó30Ý]0=Ý€éPÓ¨Ÿ—• “|Wé1ªI¼ú¹wx=µ˜9þ¦?8 »°BÈ•£gh úoÝ†Ž¾U°6¾CLòڥè¤)ÀøaÊɨjìÂì쬓 S“ÎK²N½ÜâSâŒ|?©1B·ä€mí^˵Bcx°~§©ßåiŽ5Có°™)^¦ rŠH€‰û½ª’$À¸¹Ãx!¾X!Òø¹¬i²D›Ô+¥Õ¸yÉ&`¼­¶­ÃX-ºˆ…$@Î`çæaçæÑÑÛôôÈ‹§j©ft“ü-®·\J:ˆÝáèß~#Von`òðqÌ|t„ËKgß* ì܆ž ëÀI-¯ëÖÜ€‰[J„‘Ã9¦.favæ|%Á $OxI¬ùƒbês?šdŒJWeËB‹H}qk·'bWR1&ûì×ã5—šÚ©(3;=‹…¹ý=ùk¢¾+¹?Ž[»®ÝÝ + eB!„B!„B!„ËeB!„B!äâÙÊ0+ƆáAíoH©B"šœ¥˜Ñ›² BvSBCvtJ¬O%€K”rŠ Ü^N‘"MƒA”[b¢ Âþ “˜Ø|l`űó¦ÒŽXÜŸ6½&B~‘BJX…_J’qMÕ!IÆZ,Μ‡™ƒé[ÓÝ%O Ö[BˆÉzÓ}SwÜûÙ“ÞõŽÞ^¬½çVôo݈ñwßÇÜø$!+‹éêÄÀÍ[°ú¦Í@G•ìÞ/òÝc­zÜ=Ö§·$é.QŠÑ"L1Àâô ììœ6BÒ÷¾{Ad©0~:õ"‘‡ÉM¹~T¤cÞXYB‹^’J…ɶ‡™tm”æôs%K•²Œ’kDm¿}f¼™^ÞD€‰×/~_~¼©þ &+ eB!„B!„B!„ËeB!„B!äâÙ à—Ú½ˆk… #¥%ǘÂϱ 9$ÃA&ñi/ò4^„1ñ÷ä˘ Ò‘#`¼HceC´MæõüþjAa„ib¢ŒoÈŽ97Zr‰ç=—D€ “Å­:Æ'9èmvqvrèîFgÿj Ã%!&^J… ûUÓ·l ÇÈ~öžµƒ~ô>4O~Œ‰ǰp~„Kgõ–XsÛ6˜žî* FJ,@x-ø'X¦ÃD¹#•)D ÂÈýn“3ÏŸ‡ž¢UR'·h;E¹ÅÉÅñoŠ”[„Ì’ -BÞ½kèx»A!„B!„B!„r-C†B!„B¹xø¿WÆÆA$ÏŽÒ¶œ© ÃD¹%4s ¹¥(§„fcç`,DÃ±ßæDšÐ0.Ä ™+Ô«zñÅ ñ¥œ(ã¶ÙRw³–Wªt—d¤“0ªQá\âj»Ãüì:úV¡cu_ÒœnâÉË5IÆ7uË¡›;^ÓØ0nôôß8Œþ6`üðqL=»¸BÈ…Ó;4ˆ¡»oA÷š˜cÄÓ/“[Ä;+X/j¬–[ü{ÏF‡0Ô‘é0‹³sXœœ‚]XtÉ(RnñBIÜ’ .Zni-Î䵥̢„ñN ÛÅ‘¥Ô–ðÙ 1á]¦Å@®K›IŸ’(“J8ÓcÓâú¸gÄwWJˆ‘ÿ¶Tÿ“do»@!„B!„B!„r­C†B!„B¹x(ì ë7  £Ã`ÑzY#—+”D‘HÍÑfÔQœb¬–S¬O6ð ÈÖI)>•%4xûýNJ1"FÌmDC¸—lt½j\Hy©M€õ”´ç*§Ã„MÍ0r¬ÞW%ÑøO…$™j!ñx ,6§agfÐ10€Ž¾UY¯zœR}ˆZ5‰ëïô{L›Ï10]XwÇv n»#oAóÔYB–GW_/†îº«oVLL†B|»ˆ—VxÏ$ï³€ô+¤#$@/ÂØÅ,ŽOaqv¶…Ü"ÞùÒ‘cŒ~Od/#c‚Ü"Ì:5DÎ/gÖï$Þ?R” ï&¹=Œ–âŠ]BݘXã¯wI”A2g\KRW­Ù 9>¥ÏÓŠA)&þX}W”aVþ7"!„B!„B!„BÈe†2 !„B!„r‘ìÞ5tâ¹ý#ØÔîµ\ tt mÀÙ3“¤$‘~Õ§ù¹yÌÎÌ¡{U7‚L"X\2ïö’‹]ÃR<1"&ÖC/Òf‚Hcb>‹µ¾Y[Š/®®ð}ü>ib¿–lÔy “\ü‡b@ØÙ:IÉ0~ØE‹…±q,6§Ñ¹v¦§;Ô5ºÃ;\Ë4á vtëu"²±Æt÷¯Â¦Oß™GqöØ•Íß„…éìÀºÛ¶bíέ0XÔn‹˜'¾˜üà\qðrÒa¬ÅÂÄ$›.µ¤¥Ü‚Âû!•[Tm±è³‡´]L2Ƨ«Èä–êô’T˜dŠp Zˆ2im/³„:F-¹˜½žº9!jO7Å…_Š|\cxÍ2Ž#eB!„B!„B!„Ë eB!„B!äÒØ àçÛ½ˆk…ÆÆ(ÃT$ÙôœìnŽMa]ßK€rJh¯€­•r \@‚käFš(S–S¤HcE‚Kšcö"~›¿oDŽëˆ§#’liǧ¼ˆßèÉ0²Ú2’d¹¥I2b›lìì,æOŸY½ëÖÀtvèÚ2FÔ®m,Gl;ËcýõmÂÖŸ}ãGOâÜ[G±0;BHdà¦Øpï-èê[káÞ%P%dU?:ñE‰1Õ_21$Æa‰±âñ®K‡YlNca|XX”&IÜ’¾/¼ô‘ŒIå£SµM¹¶OJB rñH$–äJ‰0ò³cêæ4Éúje™‚(c€æXS|îû2òûäwå¾ãÆ0“aV˜½í^!„B!„B!„BȵeB!„B!äÒØÊ0+FcxïšSqCÁ…’i!~4Ç›Ú<”ø2&Ø(^'i™c9¥&ƆýQnñ"•âKE#ºÏk4#„Heb½ØÒ.%—x®Ñs)t­ËyE­ªpa¼†l²Ï6›˜›n¢kítq_1²y;Ö2b@LVc弪ÑÜ`Ý­[°fÛ&œ}ëÆ}›ü ¹NéÄÆûoê ë\0KLq‘â]µ-ìB|¿¹Ÿý»B¦¼È±©#ÒaììyÌŸææ’—AúüK¹¹Ü’Œ)Ê-hqœ?•¤¶JWeËBK½(#S^ýY¥Ä TWÎéÖã5—šÚ­D 96­¾+)Åd×ËÚäGƒ ”aV’q‡Û½B!„B!„B!„kÊ0„B!„BÈ¥±§Ý ¸–ˆ¿™¾`ÁdÍÎÙ4G§ãoôOä–ÐÓ-ä–¢œâšÓT–òz¬Ý6'Ò9ÆÄ}U³q|=7‡_¬_ʉ2®žõ3Õ\W[I.>Iðìâ\eµ°*½MõQë¹µ˜ÃÂÄ$ºÖ¡£uÜ'/¨Ñ+õ)!)AžJè÷‡×Œuu;{º°é;0´ó&œÞs“§Î‚ë®U=¾ïV¬½ùÆè?$¯Šèȹ·D*¶ñô[q`úλ<Öv~ #£X˜j¢˜Ü‚K ¹EËp5r‹‘‡%âŒ1HëIE 1á+”°]-I -r{üw¡úSÉ,¥9!DäµcݸŽRíðN´ÀÌÄ jQ1òºVÛº{:±v]_ýñäBÙ»{×íLr¥y@‹Áã|»@ÈEð6·{Ž·yþ¿ð{m^!Wÿ€þv/‚eòr»@!„B!—Ê0„B!„BÈ¥Afi ¯z/¦ægd?ON¹Fc ÷U°—b„œR5u‹FoëÄÝß¾£Ü7>[„ñy=ˆñQ²±ª^µF믗H€ñ‰2A¤±ûEkz¸"zpC¢Až$£å˜úd˜x|²Ï5ÖÛ¹Ìú}«Ð=¼¦·Gõ»ûFp™ª†&p“ŒOûÝkƺº½kú±í©1yâcœzõ]ÌN4AȵŽé0ØpÇv ßw LWgå;X÷¬Ù¤øâÞÕñy–Ï[|iùw‡A!Æ #£˜G¬¼·³çß?Ìõr‹¶Cü:Ó—ˆ¨­æörK±%È$2%¤"øC…ä⛾Ý~¿-¯Óf Òf‚Hc¢:b­oœ–⋘«£ÒjœÕãçMì®Úº•Êó‰^L) ì ²Ú&«¥ÂLh°÷Õb öâô4Î;®µƒèn Átuf_£N…IZ×Cçw²ÖÒø¬ß¾ª»æ¦a¬¹±³ï¼Óûcan„\‹¬¹i7<|'zWWÉ,.úÅËåÄ—øþ ¨=V2A’ï”…É)Ìž9;·R) äϳ~MfÈ ¹%\ÒÚÈŽkU;¾{!E¼“’å©9ejKødCŸZeòí‰(#ë¦ÒŸºl‰(cJµ]¡æ¸—ÿÔÛ;ßV4c 6l¤ ³Âìm÷!„B!„B!„B®(ÃB!„B!—Î^Oµ{׆âÕm ?¦ÍÐÀÔhÓ…´–S äÀ¥¼ˆrÖä˜%䔪vU¯_ü J€±áØ|® °¨ý.ÁFŠ<á³;‘°¬šîv!¯ÄUˆñ6n©dã¶•Æ'sÏŽaa|=ÃëÑ3´¦#6·gߟhlO›Á‘+×cýŠò±€éìÀð½7cý­[prÏœ;ôaM4!W«ÖöãÆGïÂà(Á_Ü3¡dùÈ'’„H°’ã¨tX<çOÅÂôŒ~†3¹-ä–ÂsŽÛëÅyl2FH%©è¢’[Sa¤(#Ób ? 9'•e”(ãe·)µøÏR ÑkIêª5ëõL‹$,ñµêŸ¤üÏÆ†ø·—¬L†!„B!„B!„B¹P†!„B!„B.=  ³"TÉ0²‘ÙF¥ÖqÛÔX>å%Ê&¹œE–¸?$ÀH9%k*wRJhwz‰h:âKu¼•ÌNÊA&ÙˆFt!¾X!ÒÄDÑŸ^”\Â™Š¦÷D€I:äU’Œ¿(ÙµŽÂN’T›¼K’± ‹˜9ù1fÏ¡ïÆat¬ÎÈ“–øØ´ž¬µ”"cjÇš0¦{u/¶ö> ß½ þø-L~4B®V:{º±ùÁÛиk{õžLÚ–°£zÇÉ/y¼Ã_AD–ƒùÌ|ts#ãÑ(©•[Lx~…Ñ¢~Ôïx§™Åäµ¾¨¯­Çxq.Kn‰-J–1bš’#ß5&© £êÀè%—Ò`Š25s¢¦vs¬/C*:µ¤§SÙÈ%2 àv/‚B!„B!„B!äz€2 !„B!„réð7€¯ý½èëëÆÌÌ\¾S6?§}ÐŽéñi—œÅ—RLÐO²T–DN‘MäA²‰ê‰’l`adã+ÀÄ}U³sõ·Uõ*¬iÒ˜xémÌNNƒ«c †ïÚ†¾½=ÕSé3‘ú·'ï/‘Šäß[œc-f>ÅÌé3À¢Ã¥Н‘l’gW™.ê7é˜Tn1ú8%Θrm%žHiÅ 1ÈÅÝK¢Œ\rÜž¤_I1¦nN£×—\ !ˤëѵ1N†ßeøÞâ½P Çr‡lØHfÙ·{×ÐB»A!„B!„B!„r=@†B!„B¹tö¶{×áAÿ` ¡ñ9þl­Es¼‰Õëúøâ%Ùî_„œb9%ô†;ÅÆ$¿ßÏë!$ÆÄù}C²n6·^n)$À„¹|=%í ìé0Kˆ+âz¹³Ò×ÓÊ&öB2ŒQÕ3É&6Öëñ¾={n|£oM¢oãVß8 c:’æòBÒ‹ÿÑ7€ûjl©Ç>k¬ß¹C7߀“¯Âɽ‡°8Ï~eòÉfÍ–¶?q/úÖ¯…­„†$ñÅÈçÏÄg×Jû!<ÿþýcY/2 Fˆs£S˜:þfç„€bÔóÖRn‘h"Œå™Vr Jlj1…Ú*]E”UB‹Ÿ¶…(£’[ˆ)B\ñÓëºrN·¯¹,C”‘²Œ\»¿ ͱ¦^Üw«¾Þø}–Ì&ì(üoBB!„B!„B!„+eB!„B!äÒyÀ€þv/äZ`ÃðŽ2Œhz.Ê ͱiô¯ë‡OJ0@Hl ãR< ¾rÕHlýX1¯ß–׋i3YºŒõõÜ뛞£øë!$À„ùC=ˆý1A&6¼—ÒYÏÂêíùuôé0É6uh"À½M 9¥ñÖbúÔYœ?3†þ­Ñ7<zßC Õ\nÂ>ÙPžŽ•åª^†1@Gw'¶>r'n¸{;ÞñMœ9p„|ÒXµf5¶?q/†n½ÖF ÆÈçÎú§]ˆ-Én“Œõï?Öm„zþmõÜ/ÌœÇı0;>U/·¸¿ZÊ-Jp©—[ôû½¦vòü+qÆ},„#…÷¾û¥x¢—¤„¹ÝÄåÁ¿{U­tNˆwT¡v¬kÔû,­]hŒ¦Æš¨Ex0J„?7†ê' Ó !„B!„B!„B®”a!„B!„Kd÷®¡Åçöìðx»×r-~C}ÖT äMÔq›>9:…;q÷r „œ¸”ÑülÝñKÉ)^Ž©ÒeªzV¬+Š7bŸ[¤ÔIŒL€ õª}ÖïWƒðÙˆjn÷Èt9“L‡1bh>>öR ñ¾Z 6é÷#Óaâ¾ÅùyLùÓڛѻ¦¿ðuÇFw£Ö­Óòþù¸Q…Û3؇۟}›wÝ‚£?؇ÉÓ£é¹âtvwá¦GîÀæw¢££C'} Ê*ð›ýBv°î]`ŒåüØ,¥ê! vaÇO£ùÑH¨©“[”¥dÂZ+·h;¤¦6ÒÚ¦PBÑËËS¢ŒNbòJ²b¼÷t]9§ ï0%Ê$µý;Užv©¶–sâ:šcÓú+²ê‡%0L†YY(ÃB!„B!„B!„\!(ÃB!„B!+Ã^P†YŠM¹²;“&ô¸©±¦FŒÐ0¬h.öMåAd‰I ¹øâ$7ÕTå” ÙÀЦs•2c9ÆógõÜ’MUÇZy>ÕÚe½¨ÌHÉ%œ©ó\ âŠ_¬Ó]êD—( Õ&ÉøÅËcõ]ÎOMãì‡Ñ7¼kwlFWoO&¯d}ñ…õÇæuÑ(ž4K±FŽ]»eîÿµ§ðÑ›ïãýÞÄls„´ƒMwoÇŽÏÜ‹îþU°Ö=~iâ pïŒ(…D!ÎÈqr,Þ¾n<¢ùÑ9Œûv~A.‘gÒÚQ†K„‰%y×È9ejK”SL¬-®‹Ú.æ’ËVŸœ7¬E¤¿¨usVuçÏÏaîüœúÕerÿÖ“¼ÒƒkW¡§‡ÿo‚bÀí^!„B!„B!„BÈõÿ¿\„B!„BÈÊÀß¾B,ë7ÔËNï¤ë{j´Y5 ‹Ð“ ñ%&À„Ì)¾x9ÅÈ?O"¥Ô$À¨¹‚<â•“´šP¯ÂúTDñ%¦×¸s“õD£{Ò1Žºt– ®Øô×4­/6ä á¹ñz>!ߤI2þäô˜þx3gÇ0xÓF¬Ùº¦³SwŠ‹*y3¹‰ÃD繑²LØU3Öt`ó}7cã7áØ‹ïàøžƒX\X!W‚5›×cçÓ`ð†¡J‚øJ`‰ï `8˜˜£äËÒaÎMbäЇ˜kÎ8y$yÐüXùÞ-(~þ²Ü"5j“(¨k§r1AnÑÇÊ2qþøÑïÿ†HE™ùÙ_­ ®ˆKêšð^úЍí?KF¯%©+æËÖ#jL7å¥×iBêÖ÷B¼o˜ ³¢¼±{×Ðl»A!„B!„B!„r½@†B!„BY(ìjscO´)î÷L6c3³_¢œb­>ò˜òâå”Ð;\í³¢ÝïO`d'¶¸ðsA$Àøý>FŠ/1½&žu.í ì·êO€¼^yl„[…¾ˆ¥cTùVe”dcëÇÇuÅ}Æ]»°ˆñ÷N¡yò,†vnAÿÆ!íè¯]7äûYã»dŒ/íêéÁ­OíÂÜ‚Cß} g!—‹Þ>ìüü.lºg{`d‰/á9÷‚Ü3'%˜ÒX'#êA¶›Ÿ™ÅÈ¡Ñ<3E“ì› (êáói6Ä%·@¾ÈØ–r DídMáÙ²ˆ|¯$â â8%´¤Ë÷Ç P "ŠJru`ô’sÏ_Ó¤VaNÔÔ–—}z,Ê0µ¨ôµ¥ ³¢ìm÷!„B!„B!„B®'(ÃB!„B!+Ûfô´{!W;áø!kœN?šlØäè”kZ–â‹OYñ©+Õ±AN‘)/V6Wû‚4#æòÛJ 0ae5’ML£A&¾Äz 0r­º^µ °BßoJé,ˆgaõöüÚJ­Æ#$«ÇZìEE¡Ø$ãÓ¹+1©Ú>~¿që>Ɔ;¶¢wpuX{X¡tC=b³zÒ°óËcû‡qÿ¯|gžÂ¿Ý‹©3c d¥èèìÀöÇîÄŽŸ¹=]ñ¹­I|±B‚‘Ž‘ȱR‚©I‡±ó‹}ï$ÆŽ®æ—„²Cäû5PÐBR1âùJ6ñ××NŒwœgL¹¶Oi¥:"O€( ¤¢Œ\rÜ.Òg’9Ôg#æ4z}É¥²Lº];h¦Æ¦c1¿çì»—×_ˆT +ÅhB!„B!„B!„+eB!„B!dؽkhî¹ý#ox°Ýk¹ÚÙЀéèPbG í».05Út Ë1&Z#§Äý¾yY&ʈ¾rw|ž(ãæHä%ÙˆSñÛB:ŒŸ_ö#®U×sk„äëU²Jè";éåL2ÆÈX™l|\ñãÓyÅ÷J6±i;n›À‡/½…5[XÛMèîíÎ늆øØŸ4Ã׌EÍXÙ_߸e3¿}>xõÿuÌÍÌ‚KaÓ][qûÀªu•üÖ*ñE¾£U?VŒÈ’dÖ`üäœ;ð!ægç”´ä–LBL¨\@Qr‹|èa¤(Ï”>5¤fMþpQ;(^e‹âIIZI¶yRŠ)B\ñÓ«Ë$?ûõøwÏ2D)Ë Ys¸n_s¬ ÿf{k*$’%ÿ<L†YY(ÃB!„B!„B!„\A(ÃB!„B!+ÇP†¹d:;;°v]FGš-FõWõsõavfsççÐÝÛš˜K2 DŒ âKLeña ¹øâÆÊz¡ÑØýí>[ß¼læ·âx/Òøñaþ¬ž[§k¨¶6‘mlžZã/ãpBå IDATU Ò¢M:fªsdu¼ùøH†j“dÂ5ÒÇÈ:ZÈqã­ÅØcâäYlعC;n€é) ˆMẠßÕäË‹tl‡ÁöOß-÷ÝŒƒß߇~zv1é&'d 7 á®/>Œõ;6Á: F&¾˜Òãe~~E:Œ)ŒO°ëÎŒNàôÛÇp~lJÚ¥BÉ%Ùd‰€’ˆôyjY[Sªmäa²®¬­þ!2KxößZÚ®–ű%§ø9DðÎÈ$œ(Ê”d™¢(“J7&sjTÿ[…õÎq™ ³b,Ø×îEB!„B!„B!„\OP†!„B!„BVþFð¢1<¨dÕ4ö^'Ð05:¡MÝ™L⛎a-l_bLÈŒ‘â‹“S¬‘ ,rƪñÜK3¥5ô\@œË«7U=¿–ªá9=6J2€ëy7ZÚI˜Šå¤³äÇDI&î[V’ ¶µdcÂyåÚòûµaôâü">~ûƎƦ{¶c`Óè7âèšTÈûú±º7_Ô5=ý½¸÷?íÜŽ·þúœ9r „,EÏê^Üñ…°õ¡Ûà_íÑÍÈñË Àˆ'PH0~¬„\c0þ<£…ùìhCC,ÐÄÂuJ­8cÂî’Ü¢íšÚHk›BmYD/W,/J*©#åY+Ì‘§ÂèºrN][J+²¶¯.O»T[^"¤¢Œ«=5ÖŒ_|ŠÜn ï“aVŒwwïjeñB!„B!„B!„†2 !„B!„²rP†Y!Ã8tðô£D3tÂÔè†nXSp2‰×OtŒKYId%§Xƒ #¬NÎfEß+ÎNÍàƒ—ÞÁÀÆuØ|ßÍèìSMãjÝ¡‘Ü„]±ùܨsÙ•nÔ¸äþ2knÂÏüæ38õÖxëÛ¯`êÜI1¸ù±;qÇÓŸBWoK‚ñ©Sâ©ôï‚`¾T?ÇT)'¾">#Ê;cý³eíÎ:3O`q~AÜÌâù- (Њ’P´€¢—ÄD1þ]©"]­jC—È3ií(¸%BJØ®—'NU—–Ÿ¥(#®‹1&›3½R–‘5âZDú‹ª!j«9u]¿Æ¦L†1&IñªAŒk 3f…àB!„B!„B!„\a(ÃB!„B!+Ç~ :Û½«F#ýMõIctÒ·nŸmFFŠ/N. ã!¥!Š+ 02Å!O”A–Ê’'ʈ¥Û8l`CÓ{åÔˆù­jŒ˜ Íói½j·i¬•Íöi:KX!Ä…‹å›4IƯ9_‰Ez»J’) 9rU&]«X¿;§ÉFpèôÖßr#6ݽ ]=]¢¡\öâÇæó¼¹ªÉ<›¬I×6ß³ 7ܹ‡_x ¾·ó³s 6ݾ÷~éÓ^ ÄgÑÆd(ÿTUÿçßUñTÉXŸ /H´J‡;q§^?ŠÙæù`O¨T!’,)·ƒ$—[ªq¦î¸ð±¦v*·$Ï^¶îp¬,åšx*â¹ ïx eŠi1a´–NÂòÃgwL&­h µkÑ—ÀÏ— =Ðëõü·Þœ˜FŽ«ôÏšÎάZ]8ž\”a!„B!„B!„B®0”a!„B!„b÷®¡éçö¼àžv¯åj'ü¦zÕÝ‚dÜähÓ·2Ã:¹ÄZ™Ú7¤&Q&6-çâKZϯËjÉÅ'À„>q7FÎÕ"ƪzn-€|b=)ø:‘(˨K©²aŒŒ•%Lø±>I¦f^£ªg’MhÞNÆÇvÿjŸµg}ˆÑcá†ûv qófÑ]ެy>k’G2Lü{÷['Èttu⎧vaÇÃ;ñæ·_Åû¯,6œ“ëƒÆìúò£ØtçVN‚‘2ÜýîžÉÎÞIõcávÅ÷c˜mâÃ×còã±ÄàÃËgi¹Å”“µ£äÞáKÈ-þÂŽ“Ï`*Îxò™•Ïpúj0bš’“ˆ(Pµª£„£kÇÓLD™š9õûG\ÇdÝþ˜éñi,.Ê®V/ ÷Æ·Õ†Æ@lÈ%C†B!„B!„B!ä C†B!„BYYö€2Ì%³a8M†‘ˆÎଉ€1˜rHØ ÔÈ$ 06ˆ/1Æ'Äø)¾T’¨“ªñغ„Ÿ‘æ ²‹OˆAœßúf÷w!&M”‰çe·u Dj…¸¾Õ¹Š“AhÁ¿´$™ph~ŒÜ¦“d ãż ³ó8þÓƒ8{è¶>¸ƒ‡\ºN_ÐÍ÷ÐêF7·çåßD¾jÍj<ü«ŸÃ­OÜ…}ßø1ξäú¡{UîzæÜú™{ÐÑÙkmLMJ“Üf@u>&S`ÜV?•þó3ó8ñúQœ;r*KfÊõ` ¹ñ彯 ’:¹EÙ Fl CâCU_»ðà™Âº µ•xb͍¡d≿~%QF.9né3ÉÙg¶]WË2ézò4%Ð ÖœŸÒ_…pcrW½ Óhùo-¹@^k÷!„B!„B!„B®7(ÃB!„B!+Ë¿ÑîE\í4ág:Ð꨸sr¤SLß,m-l_¢ãEšRŒLyQ½ÛRr©I€QsÄÿ•¤Ë¤õDZ_{L”qMôkM˜80n-§³$ÇøDdû’I2ˆ!®4®©ºÆÉx}QâùÁˆQ€ÁôÈ<ÿ†¶ cëC;Ñ;ЧæH›ÈU½ŸK0å±ê¨fõ Û†ñôòðþžƒØÿ—/czL4ª“kc n~ìÜ÷‹ g`¬â\ ÈkF~?Ç¿c–N‡Y´¿û!>|ã=,Ì.Da%ü]PÂúã=Arã/%·¨úñð¼¶ß‰úÚ¢~qÝIí ¥I‰DŒËÄyŒ»’Eñú³W«BÕÕk“b JsÊqâ2euÿ é¾j@slK"n½êç¸aÃð@ÍAä9²{×Ðh»A!„B!„B!„r½A†B!„BYYö¶{×Kÿ¶ú("”˜ª†¸!“@ˆ/^N±6 ÕøDNiQ/&ÊÄÖî8>M”ñû«“i5Bn±n¿•õä\ÐsAˆ4iúþA ‰ø8qmÃ*Ä5/‰.J\)$ɺ™¿ åÄÕÅúFfÂöx¬<ó¸Ò‘c§1vü n¸g¶Ü·¦»«Ðo/ò¥,ƒÐ´dªº±I{X“v<|¶~ê¼ý·{ñöw_ÃÂÜÈµÅÆ[7ãÁ_yë¶l¨îSÿÀ¢è¢ìâž$›ß‚éX¸g±T2Þ¨t˜±çpì§1=Þ 2H½€¢ïãd5ḋ’[Pª-ŸsQ[ãŽSµ³çt‰ÚBZ BŒ—EPÚ®–¤¦HšxjZ2 'O£J¼¤x b ýÎIÔÌYÕk"Øä[ƒ1h4˜ ³Bìi÷!„B!„B!„B®G(ÃB!„B!+Ë^—‚\ƒkV¡§§ ³s È›¶kۧƦ¨âw¹†s)¾¸´+4Œà¿B‘÷Çz1å!•%_ÒDÒj|= ÄÈù­«“6Ê›XÛªzÕnëš«­ˆ«ˆgSWTBKzÝ—Wòñâʉ¹„bcu}¼)¬UlKš½«ï²bqq'öÅ™ƒ'°íáÛ0¼s3Z¥Â„fü• Ý[¨k€®Þ.ìÚýv>~ö|ãEÛs8¯O®:ú×àÁ¯<ŽmÝ’`³ëÅoV8 &|2ñކ•ÉPr»ß-¶ f&šxïå=~Fˆ&éó'¶‡›Ý¨Ý5Fp!r‹IŽS‡u˜¶CüǤ6–_;•VäóHÄèíHZ„@£“Ö•—H×–ÒŠ¬í«ËKZ[7\¶tùù4G§b‘L€1Õ{;ȹ Ó`2ÌJA†B!„B!„B!¤ P†!„B!„BVÝ»†ÆŸÛ?rÀÎv¯åj§1<€'ƪO!P-¦Æ§Ñ¿¶€Klur‰µ6ô†  “Ħöj¿“\¼Übµc â‹"M—ožŽé.VÔ ãC#|l˜%ê`à2bŸ—~JÒß±¯·©öé’¸"ì•äR7>W¦ä„ý!)G 9É¾ÂøÙæyüÁë8õÖ1Üòø]ܸi£¿G鄆dʼnPŽ5…ºÀ@cOþö³8}à^þ“aäø«®ž.ÜûóáîgîGGW—óÓÄ]hÅ-Ÿy]îŽõR‚OI$78ŒMßl só8¶÷N¾uÌ=ωHR”[ÇH#­.}Ã'r‹|8”ìéi!·¨u©%%fH¡vÜ¢Ä)—ˆ£JÒ‰ú,Eq]¼l$çL/‡¼ü²FœS¤¿$ëEqÎkvsNŽMëï±Fz‰»Ü›ÖÝz”aV ¦B!„B!„B!„´Ê0„B!„BÈʳ”a.™ ÃQ† õW†hŸmb`Ýê– 0(È$2QÆzñňD뉅øb‚íâDš¬^µÏ×ó 0Âø¼žß5?¬vÜgŸ£çMõâ|â™kyĹ0cJé,ð+M’dÒ/&ÊDÅ$ fcüªdÃ{]’Œœ;6íÛd=ÀÄÇcØ÷ÍcÓí7âæGïDo¯¾ B•nHש™oà›ñ‘6ÀÇA›îØ‚Ýÿõ×pèGobÏ7~‚™‰´‰|R¹åÑÛñÐWŸ@ߺêyó;ÒŸÃ(”øtˆd'u犱òöu-N½û!Þ{åægæ´¡$qSš$FŒYRnI.·ÀÕ¨9.|¬©Ê-úAÊׯ’ªŠ.išKxfkE±=ŒN¤¿üðÙ?ç¹(#kËw‡^‹¾~¾âzJNá<§F§Â­“â…—Ú64‹ÛÉÃdB!„B!„B!„6@†B!„BYyöø•v/âj§ÑH~c}æ+˜V;19ÚÄ ~o>¿?6©ÇýƉ%Q<ñ"Œi¬•ÍÍ. Bˆ'q^/Iø¹` ‰2b­ðâ[sZ¯´vD‘&ø4&®5`ô@ß2-ö)9F^c/éí:ƈþkQ'4wçâJq¼l°/ 9r¼ãý[Á?:pgŽœÂ¶‡vbëý· ³3®E¥=ˆ™MöƒXîí—¾A«ëÜñä}¸ùÑÛñÚ_¼„·Ÿß‡Å…EO&ñè¯=‰;o„uÏœLsÉ_`¯%Lj‚á6ÏéRé0ã'Gpð…·0yv¢Vn ·«×¡S–¿êY;ÞìFŽQrË…ÔNηp\xxƒ,ÇùtÈgV ÉeyxY”‘"ŠÚîÇ‹Ë^7g<ÍD”©©×¢k§—=\uÉ &G›ˆo8ýcv9m¾aCúï,¹>ܽkèt»A!„B!„B!„r=B†B!„BYyøÂW€ ÝtõN'C'G¦ ÅŸ˜!ž„fvÔ'À„’5 0q¬eâÊóùÓzþ¤¢øëU‡ªD¹vè¹€XÛgÎø´ý'êÓVLø#WŒ–Š+Q’‰ãUv`#®e1IƦÇäëD8cy¸®µ0·€£?~§Þ<†Ÿ¹Ã;7#C$O„&v¤ õ¾ñ]wÜgcUÝê½}½xìß}w?µ ?þ¿~€ö½—¯´¾µ«ñȯ<Û?{O`ŒéâýVH|Ò°"X’±Âߊ·°k™‰izñœ>t2!¢n¡y§¥©0…1ur‹P€üE+v†’uµM‹ÚÉÃäŽËÖÖÖKO„ÿ¾ÊÓ_ªãDÚ“Ñ•óíñØtŽì3 ÛM²VuÉÒõ”S_âûÄ$uªãææ1;=‹"Æä’•ü*,Ðßß‹¾¾îòr!ð¿ù!„B!„B!„BÚeB!„B!dåÙÛî\ 4† ¿±>ôvÍÄhS #&*U!¾¸´+4 ÿ[ûµLÛ}³³u2JL”AH€ñû¤øb…H#›çcZ¯‡ ¨ùmr>69Ï'H6ð"M%ùøÅ»“KéÎ"þ‘\`>ºô¾%ÒYä>%®$ÒŠ^”¼ò‰dcóñÕw©k¥I2ÓãM¼þ­W0tSw|þ^ ¯UòŠjÁ èan1 4¬C7«‡µ‡Fx±öÆ!|ñ÷ ì{?þú÷1zr¤}ttub×Ï?ˆ¿ò(ºz»«{ËÉ,áö,9Xáw¹?‰O"Òa” æÄ……ù¼÷ÓCxÿÕ#X\Xˆ†F* dr Âwé1FÞ|ú@]{)¹E>ˆ‡çµýNÔ×õ3q¦P;•\dÙL:bIbÂ3˜ˆ'0Éxñ.kеåÚäóÒœrœ¸LY]/ÊdûÄ9»¿«T˜ä:–˜p[ÆûSaVþ7!„B!„B!„BH›  C!„B!„¬0»w }üÜþ‘ãnj÷Z®fAdMÓË¢:frd ¢7=6<;™Ä:¹ÄZ›©ÐüeW$ìw’‹OyÉä±>Î%Š4! ¾ÁÙë6ºq>Œ—BO"¢@¬£$íTõ|»}¬g³†iÝ­oLM:Kø¨÷¥ÍñK¥³dó½]‹+ Þùxvh5>W4ì?ƒŸ|ýû¸i×ÜöÄ]èYÝ+üÑl¤¹±A=oö_j¬lx7ØþÀÍØ¶k;^ÿ›×ðÓ?{³Íó W–ߊÇÿÑSX³i-¬…“ÆÄ”¤ÀH%<£B8ÃÑ:FÞ©§Þ=Ž?z 3“3ÊìÈ”xÕ (Ùý–Œ¹¹¥(ϤµÅ˜Z¹Åj'ë. ?zþLˆ1þ}™lG–„–ð³X«IæHE]Û¨eæ"Ž8&ŒM¤¿òT”1q¼Z³¸4ScMøû­žd¿øXNÉÅÀdB!„B!„B!„6A†B!„B¹<ìe˜K"4ê¦}Þ’¬ q7vóŸÂM÷í¨|–µT=O¤U'å¸ðô$¢ŒGˆtc,ÆNâíïíÇè‰s†P• n ò=1N>;ÚÐhQ[L’Ôo-åøúɺMiÝ&³œÚrér¸Oª¡&Ì¥¶#Ihs(AŤu场v.­&¹¤Åºê}‘¦Ó´>Ÿ©±iý5Úâ‡Õþ“aV Ê0„B!„B!„B!m‚2 !„B!„ryØàËí^ÄÕ̆¬Qר¿2’©JÔ(¤²øÆc)“ È.ã­_Œ3IJ"#SYä’ÒzAŽs¡6Q¦h‹â‹«g“zIZMèÑ7±v&À@6P×§³¤_B)IÐé0FÆÊÈ‹ª¥âJ6~Ùkµâ/±&-Â9u çfæñöóûðÁÞ#¸ç ŸÂð-›’†{™ô"N#ló‰¤ß/àQSwõÚ~<õ;Ïâ¾gÀþÍwñá›Ç@VžU«ðè¯~÷>s?LGl¸ Z&¾øïÎ߯áˆ[²4V Õ³}~jïüàM|ø†ûŽMvcä–|LYžñÃM~œ;6¿w£¢nØp¨·7Ä(·¨u©%%fH¡¶—YŠâ‰x¶Òç3•NÔç:QƘlÎôrÈËïkTÛs鯤ëõµ!çl±æ0g<÷©Ñ),… ·³¼ÿ*˜ ³"œÙ½kèƒv/‚B!„B!„B!äz…2 !„B!„ryào ¿Dº»;±fmÆÇ§³>™éYÌÏΣ³§3ô³™$$6ÄĺÀI1A&q"Š›ÖA&Éëùý1õ!$Ê@4;gó—¥·%íXÆ»2þjH¡Ç­#–ç!ÒoÜLñÏVi+¢Ú2“d\¸N’©OgÑÍòR\ÑkŠk•Ç”ÌÆrHéüLøÞüèɳãxéßþ›vÞˆ{~î~ lHšÆM<&6¶Ü¹ÌÐ…ïÌÅél¼e#¾úßýþøüèß|ã§ÇÒªä"0»~þAü̯}½ý}•cÑ"ñâ»F¼Œ¿³ ô@q_ÛxÇÇ÷ °¸°ˆ#/ÀÞÁüÜ‚?Ps™øW«îd⌳¤Ü" ’\n«!oÖdþ¤¶‘cR¹%‘sáPónj™:%Å¿·Ô‹2b{/Szzê¤ÒŠ®­Ä·äk”µõö<ý%“p ç)¿ÚÉѦ¾–ò=X †I¶7† ƒÈ²·Ý „B!„B!„B¹ž¡ C!„B!„\Ø ¹4ŸYb”)þTÍÂë6­Nl‰‰)1¡%¦»xÉ¥”RYj`ª­I¢ŒõrJ_L°]œHc„òa}Cti”øb“ùm<Ÿjr>ÅD٤Ótø'²‹¼Þ*û%WŠŠ‘=ÙF/Å•ä˜0H®U¯ÉÀ; :I& 9q_–$£N;ÎýÑÁøøÈIÜòéÛqç“w£{UêÙ×N‚¼.…Tÿ?ÑðФcŘÛ¿·>r^ýÆOðòŸ½ˆ¹™9‹cÛ§vàóÿä4¶ÃZ'»8 F¦¸h'Ã=3€ûÂeò¦·ëºÕýipêÝñÆóû052%DaNˆªurK(n¨ãäŽÕcÊЬ-“Ž’G©¶#®bâÿjŽ3ɘ,¹EœŸOÒå4Š2RDQÛå3+ÎUÏ™ÊleQ¦(ç¤u —=\èõB¬ort:\ÎÌ-\ SJ_#ÅgB!„B!„B!„6B†B!„B¹ ìÞ5tü¹ý#n÷Z®fÃ8räŒØâ›ƒ—wüÄHC›Ö È!þçû¦d—ãSYJ 0 0ÖÆä•jL€‘õ‚lce3¶s‰"KÜïZ¤mi|Œo~óû¹BœMlÆöâKH€)$ʤõJ‰.ëd’d›?ªFv‘u”䮩ŸÎkôv%®ØÖã òµj9¡0¯¸™â•Š[,¾øŽí;Š{¾° ;¼%4чÆv(w Ô2iw¾¬œ5ÔËÎz£Æt÷tá±_ý î{æ~üð_o}ÿrò)²nó>ÿ[_ÀÎÇn‡–L| wSHtrw|*M]@:ÌØÇcxýÛ{qúè©Üà%k_Zšâ@-ÎÆ\²Ü’ÞŸ¥Ú¦EíÄü‡&ëNk#yNÜ^ZqgŸ‰'ê8½µä¸=›Î‘}Fa-F×Õ§•®§&ÅÆo‡Qu æ“N†'æïÅ%,™e˜•€2 !„B!„B!„BH¡ C!„B!„\>öx¶Ý‹¸šQ¿¹>íÑ.n׃&F§B#{ÕgEŸ#õ /®ÈñÄ7&ûÄ– ÙE¬¢&&îMö­`âüi=}>¨M€©«§Ï'žy’“¦­9Vï«„"ÿ©$S-D/÷9ÉÆæãã\q_lJBŽå›ÝSÉ%ÔÌšÅÅEI2ç§ÎcÏ7_ÆÑ—âþ/=ŒÆŽá¤ßnBúßSJ|QG%Mù±Þ„òÆ nÄ—þ‹_ƒ_~ßý_¾ƒ“ïž©§§¯?ókŸÅÃ_y]&Œ¿¨Vˆ/þ¾ô‚˜xhKÜ6ª^ê6Öìôy¼ù½×q䕃°‹þøxƒÔÉ-ÁxÐæE2Ä$÷›cĘ–µS%•[Ô/É-âF.¯[Ô_RøIe– ‹ˆS§âLjç,>{õÉ-²†<}$µåÚ¤ƒÒœrœ¸LYÝp˜dŸ‰çìkÉó2L¼'k Cª:: †Ö÷·>†,Ê0„B!„B!„B!m„2 !„B!„rù  s‰l¸ˆß\/¬'F¦ª_Ž׸.RY¼Wâõ)“^v á+!±^& "ŠœWÈ)b.¹® â‘SÇ ñÅ ‘&ôÚ ‘&K”±I½RZ[—l2Ʋ¹º>EãÏδH’ÊÉ0JYÁ$™ºd%äè}þ¦çå9q÷¿þ ¶íÚŽO}ñAôõçÍôˆÍìê~¿oœ ñÊ-S À×Ùr÷Mø÷þçßÂÏïÃ÷ÿÕw1yvD` v=ó)<ù›O£hÖV2”L|ñÏ@ønn7«ãÆúÈÓaìâ"½to<¿³3s0ò&rG\3 (^˜€¸IÔ ê~Ko¢VµýZDí¢<“ÖÎnè‚ÜRX·ZVzM µ‘§¾YÉvqdIh ?‹µšdŽT”ѵZf.âÈçº,áäM¼ÜzÎä}bôú›“3X\XÔ7i-É  ­ïGGGz‘ dÀáv/‚B!„B!„B!äz†2 !„B!„æ*ny IDATrùØÛî\í4ZÉ0YCxÎÄH³j –2Ið/ªá˜Sb“»“b‚Lâ` ë¹:Y=„ù¬;ÞfõP˜ß×öõ zÖ’v*Éq.q^ðZHÖô-$Ĺ|Ê‹ZÊ ÑÊð-ÖK$ÉT‹íØq|ØÖJ°Y2I&_« äv%ÙÔžŸ ×2QrÄ5ª&=¶ï=|øæqÜõù{p÷S÷¢«§3 âšÇ$Ù/fÏ>ÔŒ ò®^°ëÙûqç“wãï¿þC¼ô§?ÆÂÜ<®wnºg+žùÝ/bó[‚#ŸSð"[òµWHÙ%Hi:Œø±óÑ¡“xõ/бÓcîž0u_¸´(’ Ä—ï%‰Âq&½I‚$²ÜÚÙš\ÖRޝ¯‚ºiKë†Yvm%ŠÈ)Ãÿ¢pâçRÛ‘$´ˆ9” âçH.—¯!k£fN_]^Òb]q‰€²(S{>B”™ó©0ÉWk‹2ZþÛJ–Ëk»w -©"B!„B!„B!„ËeB!„B!äò±§Ý ¸Úi ' »¦<.oö®™’îF?¢þ!Sü0÷Y'¹ä 0uõâþ4ÈÓfdLiŒH‹ 0^¤±¢ÿ<Ž"?Ÿjµ 0Bˆ41Q&ÖógégÔ—ÞÏ%`Âdq«Wla¼†Z‹+É1aPÝZŒ¡Ñg w…Y—‘$ãÎ/=¯…ùy¼ñ·¯áðËðà—ÆŽo 5¥Ý·*ý!O… I0¥±¡^5¢·¯OÿöÏá¡ÝãoÿðÛxçGoãzdpx ¾ð;ÏàÞ§wÁB?cVHa€¸Uýu´Bg÷±<¬z”ÜÝZ“3qv¯>÷ Ž¿y$O@4Gûmn­QÔ‰û€d®P¯èÅ—S›(ãêY¥ ä×¼ ƒ„t ‘Vcdµ°*½M5h׉+…$™êb뵆éK’‹Û^]rÁ&_+Äùåã§Çšxáë?À¿Ÿþ‡aÃÖ†j~¯úäóT%ÍÄ»,ž’LJæ}ÙlÇ Ý8„¯ý÷¿Ž£¯ÆwþÅ·púÈG¸èêé¿þY|æ×ŸDWoWtµÑ+,Fˆ/Ö9!|¯òcM‹t˜¹™9¼þ7ûñöÞÆâü‚²ZÊ-~î¢(‡GŨãTítŒßV’[Ä}WgP·îrm#Ç´[ü~“>…k’Š.2%Å­0lÏŠ¿úiÕ3dÂåVË”Ÿ}-?ZÌ)kK™¥•Т·ç)/uç£dœlÕ¶I—zVþRÜ72fE  C!„B!„B!„Òf(ÃB!„B!—‰Ý»†ìsûG^ðd»×rµ²víjt÷tbnnQl55?çLŒ6CS³NE÷?|›{HYñ­Heñ2Ii¬OŠ@Hl©¥]¢Lh²w+´1e&$Àˆd”êGƒòb9&ŒÒŽªçÖìÎK$Àøsõg¯…L‡©W–“΂šD—d›è­O%›˜¾¡ÇÇvî¸O‹ &ŽWq|"ÞøÑI|B%ésP’M2þô‘ÓøÖÿô—ØùèmxðËcõÚÕÈPoöÏå¹lí!èT‰pjî¸[¾ÿáÿ.^ýæ+øÞ=æØò$®6îýÙûðÌï~koX kÝ×!·4ñÅ?‹áÞp²˜¾Uü³!†!~Té08ôÒA¼úW¯bfbZØ …/(P2 e9r ²û'c±úœÊЬmêk £T[ŽÑW̼€k"å7_Kä¸\½|ãF.–E>3ZZӵ㜩ÌVeŠrNZ·pÙÃ5HÖ]]"“ÍYN†÷vnH–ºF.†½í^!„B!„B!„BÈõeB!„B!äò²”a.c€õëûñÑGËœoZ˜_ÄÔÄ úW…ä*¥œS•1µ 0~˜OlW#ŒH`hÆ÷ÛÄ\þ¼öÚB=Äñ"m&ˆ4KH;±Š 0*­ÆY7~~R:KXaœ¼öK°ARÛdµT˜ ×ÍW«KgÑkRMýuk­K†1Q­I%ˆkQž¢y¿’l¬µ8ø“xoïÜÿÅpïÏÞ‡ŽîÎ0Fݦن¸=K…nœ¯¦NôÝxô—çžý¾÷GßÅKþ,.,&º:Ù|ûfüâïíÆövT_kˆƒ‚øæ~މ/în*|•ùX? zÖJé0§žÆOþôEœùàl&r„£•­ýåAlS‡Ê/Ø’Þ(‰±Q¬×´¤ÜR”T 7ÖÕ^æ5)<y*Šÿ쟵4¡ÅèãÄR’åŠ%š°ÎtŽì3 k1ymù¼êõÔ¤ØH'¹\éóžÎ9d˜ê¾5¦ð:nÁ&Ã\*ÓÞn÷"!„B!„B!„B®w(ÃB!„B!——=í^ÀÕNcxÀÉ0¾ÁøBŽ6˜™BÿšU¾•]Ë$¡¾j(¶6Ê-i P—³œzû­;>O”qb‹;IŸ#ENãÎÌ(i§’| šÀ­iL8™p%CZNyÂç°Øp#2&î‹«ãm2>œ[*Ù¸m¥ñª _Š+zMñød»©I’ CÒJœƒIÏK¬5 OÎÙ}ÑsççðÊ7^»/¼ƒÇ¾ú3Ø~ÿöÐ1_j²WMó—V¹ñZÇä ”ë op5¾ôŸíÆ£¿ü(¾õ…ƒ?9ˆ«™þ¡~üÜï<ƒG¾üÐaª4˜L¼œ–|•á¹ðt `jd /ã%þéáh*D‘\n﯋’[’ÚÉ=¡jg/ɤvºætÝim³TmÔ¯»å5ÉkkĨ%gâ‰ûC 1áþ¯eŒª!–§/“Ñk+Š2rNµ=^¦¬.ôzäs #·'©5Éœåd˜5–Lƒ2Ì¥²÷®¡…v/‚B!„B!„B!äz‡2 !„B!„ry¡ s‰´ü öi_vaßÄÈ6ïh ˜#E‘ ¥x9RŠßæÄÙD§KëÅýŘ`¾¸¿j`Â’EŒi¬lè¶ÉüY½jA^|±Vžq‰2±ž?K?cr¦Âs)Ë r´Nw©I[1a¥r4êÅ•(3ıùZÅÁú® L’©]kYÈ?=†ÿï¿›î¹ í ¬ß²>–4zlÜîæe3|g$Ȉºþ˜M·lÂoþËßÄÛ?zõ…³œÅÕDgW'ÿÚãxúŸ<ÞþUUz‘x–½7æ1ês÷vØ ÓaŒ,eÂ|÷ssóØ÷7ûðÚ·_ÃüÜ‚úŽäw&*K"ˆrw½€"k›rm%¡o ][Þk&©­ê×Õ6åÚjÍ…u«e¥×¤PBúpYÉvqdIh ?'¢ŒœÃ˜üs¬mÔ2Ó¥«u†±I-?g(ÏGœK:gAè™ÈdqïÖ0Ê0— ÿÛŽB!„B!„B!äeB!„B!äòò.€&€Õí^ÈÕJ£1õy—)?× =î^þ¼Œ’¦¢ˆJÖÀŠTï•xÝD¦²Äz±±>Oe‰ 0€oˆóˈ†i¿ÍølÑè 1¿y|½ ëÎ=M€Ée\=«”äÚ^˜ ¢ÓYâ>=ƒ'ÃäâŠr I2azFëQK¤Þ½=½Ѽ)9þ¼R!§šÿø›ÇñgÿÍÿƒ{~ö|ú—Ūެ©^6ÃëÎø¸A5ÜË] ðRŒªk€»Ÿ¼w>~^ø¿_Àwÿ·ïafjŸtîüÌØýŸ~ íÕ |#ò™ö÷⋵ñ>Én ù¬Õ¤Ã¸{ýð+‡ñ“?ý &ÎM*#¤JDädå1­”eÔV_¼—'ZÔ?&7‹¨ßZÊñõ“1Eá'™™µ•("§LîåL”‘òЬ%æÐrIù«ðO˜ejæôÕå%ÍëÈK”Ö–Mñ|äñb‹ó ˜ž¼ˆg×ÝÒ}}=XÝßsáÇÉÞv/€B!„B!„B!„P†!„B!„B.+»w -<·d?€ÇÚ½–«• ù ö±<6c4ESsMÊ‹K–ðº‰OY‘ÍóiŠJ¨ç“% BbKÕôìæ²‰œb]_Ï}Íúa|^b|”lt=·dß ^H€‘b@ž(ƒ°?¦Ã,!®„Æ|\"¨”]T£¿VeRÉ&Ê z¼ Õâ>+ü¿½,Ìäku’Í©„ }J²)I9b¼1À¢µxýù×qðÇðè?|÷þì}0ɲ„Tšå‘ nQ¢Ù^'ÈÈÙ!ŽëêéÄçÿñ“xx÷ÃøÎ~/ÿÅ+°‹­S$ÚÁÆÃøòïïÆOÜ +’]¬©Mßuþ|yäsP—£o㘠uæØüðÿ|'œÖCÌ¿&„ÿ™Ò˜rË’µÅð\@ñµQ¬­åy³„‚-j»;³¥ðSZwMm1&J\FÌ !‰èË 9MLÄ8qßg¢LxÎÒT]ר%ëõHéF 4És›‰>&Y£:ŸxîaN£çœLSaô-_CÔ2m,&ÃB!„B!„B!„|  C!„B!„\~ö€2ÌESlÜÍšÃë™™ª¤#RQx§ÃÔ$ÀTC\½i²¹IÚ ¬Zª’\|k¾Ûï·åõâ\i3A¤11-Æ'ÀHñ%ÖƒH·©I«qVOX¡Hâ0&MgA<‹‚<¢è}:L²Mª÷Å~_Mh+¥ñ鼦f­~|*̈ñþ *ĵ(Ϋšú¥dcÄÐjÛÌä ~ðÇ?Àß{ŸûÏaë=[õl&ù_&:ÈfyÙè¯Ï'M‰ékøwþۯ≯=Žoþ#{â“@ß`žý/à‰_}áI×ßߟÞ@ó×Ù§¥RÈ3V~«"FÖ…fƧñâŸþoýð-ñLicYrK¤R´•ü_&™oÉÚòØ´vͺÓ5!•rä±ym#Ç´[Šë–ç«Æ¨e 9Åø†íòÞöï&#ÖàŸ ¹Õ2åg_Ë®e¤ÌÒJ–‘ÛëD™Òù¨ýÙók2‘Ê0µˆû[p!‚))2àv/‚B!„B!„B!„P†!„B!„B®ü â—À’¿Å¾•c€ñsÍØ¬,`¤L"ä½LxñE$ÊX/·¤2É…Ô‹ÓÖ¿”œâç‡v‚ q>Fìsç¯N\«®Wíói9ZäñIAñÛ ßC\…Ÿ 3¡)<•lêÒYÒú:qÅŠã“í¦&I&LUsn0áZ“d&Ôkõ7-“dÎ~pßøgÿ/n}øV|î7>‡u›Ö }a‰T„b:S+ºõcÂD5~ëÝ[ðÿñ„=ß~ ùÏ¿…ÑS£h¦Ãàñ¯>†/þî³è_וŒåà .§WÂvãå6¿%—\âV÷Sòu/.,bïwöá¥o¼„Ùé9ä  .¸«¯, $c‚t‘‡åÈ-¾¾,ŸÖF2w¡vá¸Z¹ñ¸ºÚrL¼&rH‹kjë1yÚJ\C&´dSÔˆ%&n‡üœ<[²vœ3>ó&\S±NäI3z-IÝdÝá$ëöÏe:gX‹&ǦEÅDv)lJÙ°¡¿õ²oîÞ5t¾Ý‹ „B!„B!„B!”a!„B!„+ÁÞv/àjæÂ~‹}Ú¸ Œ›ª‰ƒ¨Ru ;ÏÅe|¬ ´ø"Ò$ÂxŸLáëU´®÷‡!Ò»ú«¹¢œ$X'ò¸µT'UÕ³‰ãƇù³znÍ®ñÚZê…DQ/*3++ƒ”¿·( Õ&ÉøÅËc \³Ö$Z&Ì%™ H’p1BŽ.Qýpø§‡qôµ£xèÄc_} =}ÝÙyY* „Ðjl"ÂH_á¡_xŸzú^<ÿ¯þÏÿë¿ÃÜÌ®;¹¿üOÿ¶Ü~#,* F¦yQÉ:¡I}Rv)¤ÃˆKî¿ÿ³uî9Šü?ÄÈ©Q¨ ŽŽ÷´‘\ŽJÅ™T€ ÇÉCŲ6 óå™0yøß’rKQRµqµÃ51…Ú…k’Ö†¸G3!Æ¿wrñb|¼§³åŠÓ7aéÙgu‰õs"kÇ3Y†„ãk‰óQu‘¬9›Ó„çvbd Š1ñ•»a˜É0—ÿ›ŽB!„B!„B!äeB!„B!äòó€9Ýí^ÈÕHooz195{QÇ7'f°0·ˆÎ®øvùº˜Š`\³³5°B¤ a0®"¬-ÔóŸ Å—R¢LhO¤”š+¤ä1¿¬êUxÉ@Ÿ«?áÜB=²SâI{.)%î“3„ çÆ'Ä•:!þDT­LrQÓèµÆMq»Z«:¿ºÔ½¦J>JÏÏ`an/ó¼ùƒ7ñ¹_ÿ,î{ê^ #6ǧ«Ó‚ԠДï‡$cSÆïYÕ_øÝgñø¯<Šoþ…Wÿúòö|oز_ùÏwãþgvÁzA-Üð6Þ?2ÁÈÚøØäNR_E¼§(~ÑË}“ç><‡ïýïßÇ{ûÞ†ƒ¯Y+·¨AA˜ˆ+š„²’1I}#Ljã´÷"îÅbmͤ­‘¬9]wñjUû®IR;—Vâ’3ñÄý¡„ä©0H>Ëbyú2‰Ïµ¢ŒœSm×§®/Ízµ¨eÒ9ãº'Fšêë¨M‚)î3(˜’Lû#„B!„B!„Bù„@†B!„B¹ÌìÞ54ûÜþ‘7<Ðîµ\­lh `rêÜò§½Û&F¦0´q0È)2‰JL¼ÿšåÓ)ÒøT–PÏ…XT†O|‰rŠN`4qõ¬”[PL€‰õœØ"ÏÇ%ÂÄz®Ú7_[y®&ðç–K;û­úÓ /v.ø«¤(£éµàJ6Z@‰ã㺄,„ ¹=YO­¸â$›cŒ¾%ɦ6õữK½™iâÛÿò;xíÛ{ñôo=›îÚšý3!ˆI³¿<7Ϧ8VŠ3î‡õ7¬ÃoþóßÀçÿÑgð§ÿì8öæq¬$½}=xö·ŸÆÓÿÁSèêí¬NÜúûJˆ©.—Ñd¢‹<Ù˜îuÙM&JŸ:þäEìùök°‹r¼ ’C¼—Ãá~¤/e@ÑAIkËúzLV[}ùÉ1¥Úâ9”’G½˜“ÖÎ×ÔZøñã–sMôüAú0ò~ôµÅvqdIh ?'¢ŒœÃ˜üs¬mÔ%PK—µ›K.Æ-0½Üªnò¼ê9“k!怉Q!Ãdˆç¦Ê0— eB!„B!„B!„O”a!„B!„+Ã^P†¹h¼ÿþ9d àËd|d ë7­ 2IHy±64QWMöX"FŠ4:Q…ÄWÇדý卿²~,bÓ´ßVJ€_Rš.#eÄ)¾ÄzçV“Vã„„°B/(DŠ+®r*dMû­e-˸Z²±¿úkÒYjæ65kÊ⊟­µVtÉ“a²µú­f|5Wµýä¡SøúùuÜó¹»ñÔ¿ÿy¬i¬‰c3_!®»(ÍdrGEqœÛ¾ó¡›ñOÿü÷ð⟿Œ¿øƒ¿Æø™ \ Æ|úËá+¿ÿ‹X·i-¬­.§ rX¼‡3·*¸YîŠþÿì½{°mÙUÞ÷ÛÝjõCnŸƒM `Ç0 \Aˆx‡‡1c] aÀ±ùƒq9•Ž“Ø©„@Á8E Ä8E±*€˜—°, $ŒpwKBHK Ñ÷Ý÷Ñï3óÇšoŒ9çÚûœsûî{ê~?j÷9{®9Çk­½»ñQ?¸ýt˜&˜iŸÍBJÀc¯{ ¿úÏ~O^}2×+(ª5¿Þ 9ªHÄúsaϺe ÛFçPÄ+¶ë¯ÝÃRíÏD9¸…÷l!nÙ,øiþÍüw;ŠH% ehÝØÅ…'£[Q>uN(3ñY¬sI{».Q´ÍB™Y>ƒ‡º®^ºŽã°'1Ìq8ðÖ]!„B!„B!„B!$†B!„B!n ø/wÄIeü—ìm°6手7Z³ñ`ÌHLÂ`€(|ÉS^¸©zƒ8el¯eQ¦²TqLµ—}q ‹vê P>F×r­b4­ÆÙ˱äZÕkÙÞ"R¸5b—Í›vÞÇ´œï÷—;á«R„ñÙ ¾m%V «‘Õ´·äPL xǯ¼ïþÍw㳿ê³ð™_õxѽ÷Ôóõ¾Ò½múƒÐQ_ΡAÙ[·×æÿ¼ïÔ)|î×|&^þ—??ÿý¯Ç~øWñܳÏã°ü/ûüÕ¿ÿ•øs/û3Ë ˜„ö|Óä—2ݨ$ç&¾ÔgÔ|ÍÂ^kwr©}þ€¼ÿíïÇ¿øÁ7àñ÷ŸCšð½^Šå(®ª^™àðõîmƒ|¶˜§¶ÝQú¢)¶»ÏÀh*LÉgf»\±jÂçVk2±í¾ú©0K*$” ·¢­GAŒ®­æM>‚Ï™P¦…ìãaÑÐ eƶC9ªm„¸[­(κ\½'Ã,Ÿ™ú¬¯`fØÛ{`}“XãÝgÏœ>žI!„B!„B!„BÜ4$†B!„B!n ì:€“ÌÆ¿dûÒyÑ€+¯×¦ê2]‚Å$K³w‘Fä5kSYRƒ$jbF»æõëñfÏM”©o«ÓkÄUȓߧқžZ>‰Î×|Rȧ³—CÎ ×)±Mê§Ö”ê61¯á˜b¾™M04$SkDg8`”»Ä[ûkã{¹„X«8#ĺ"Èîw£OÈ?úº>ûÔsø•}#}Ýcøâoú"üÇŸ÷‰.¶²u8¦4êS#>öš™(„)‚î{ð>|Õ·}9>ï¯}~ü;~o}Ã;° ö§Â_ùï^‰ÏzÕË+ÏW® ¾R?ñÅJ ìa•×HP—¿‚×ÿã7àwßôî–´Û;)s+qËD¤²½¸ÅÜž±m>mÓžj}ÜѶ;ÛÛ6Þ³"nÖ„óu{\˜$N)Ÿƒ• -5/ÿœ—r»0ù}ý|´ -#¡ ‹YÖÄ2¼>ÊŒòq×»}Màöž¼ñt£Ñçâ¼ô¥÷á®»Núœ¨è¿å„B!„B!„B!n#$†B!„B!n op@]¨G`<f{®\¼Þ‰Iš8¤LB€&&I$)=÷Ô†ü(&)MÖH ‰„4eL×,NI$ÌáÞr'r™L€q¾à}-ã4­¦Ú+±€D>9W”£,Ú‰B…TßOîÚD ÒD2íÚV“d€|ÿ¢Èf6%Ûªî›ðɉ\œ›Y¬mÝÅ:Ø Þ°|·\<åø3TÈ ºrî üäÿúZ¼å“?é¿~þ½ÿð#0Äuë‡|b#~Ж²‡÷çß?âÏ~8¾å‡¾ ïüµßÅ«¿ý§ðÇïùÐ0„»_t7^ñ7¾¯üæWàÞû_DŸªä1ù¬¿R ŒÖÊ”¤î;á ðÌSÏâ×^ýxók~kŒ„NÌ(€+L+Nw.Ö·Æl#nAÑ PœmßÛñœ‹{`›Ä#Û¼§Õ„·¬ÔdRï~ÚJ‹¡´DqÊDXbMÞmÛn>óTY³]ÞÃëØåÛÉ5qÏ|ÖÒQÝÍ€kÝT˜ÃqÜ— ‰a„B!„B!„B!n'$†B!„B!ngÏœ¾ñ³o»ô{>qãfѱ¿ÿ€AŸö–·˧æšs _­VdÏÊDþg‰oNP0ÔŒÃ?®…ï %ÔVÈ&Í÷·¸8›DÚ‰²>SlŠÕ ]š¯›<õ&õû‹ çýoÿ~ðoþ>íË>ñþ|éM°Ò-8AK'ap‹^0Ð ajCú“>ïÏãÛñïâ ÿô×ð3ÿûëpýJkÒÿ´/9ƒ¿ú?|>ücöj –G·M~ñ‚_žå³×žÉòÙ\Þvs~PE0©Ù{ëëߎñCÿ ×.^#UW'ÖÁèû…öT1Cù…YÛê” lÆš gÛ¼m©¦¶ .nÎŽÏE*d;Ö$ÚÖĶ5Ô›E+^S>¡ íoÏb.¥o5Îjkâ3–˜ÓbÛ-“-D8ìæc$sŸÙÌåsõ(b³ú!Û8eMlBb!„B!„B!„BˆÛ‰a„B!„Bˆ[Ç#æH·÷Ê…ë®q¥ã 0‹pĚؒu.‹¼¿¾”)+ ýM¸²É^›ò‚n*K?Q­!¼›V“}äë)•fê–kBÒ´Á~Lœ~S„4©NïØ I~Ý7Åoƒ‡|ÚŠ ¢­Ï§³ô¾‹˜d8Iè…+ÕÜh’Ì`ô…›¦ÞTñ@©K}ÔüRJøíŸ{¿óËïÀ~ýçã³þÊgàî{îªÓ'¼_/bè5$2ˆ{K¥1¿6ìîºç.¼â뿟óª—ãµßó xÏ¿ùüµ¿ÿ*üGŸýñµ4ÉÝÝò¹ÉÕ¨Ÿ¹|åy IDATUÉhŸû•·ü»wý~îû~ ÿîwÿ˜ò¡W ­ (ìЪ¢E@2 §r{Báݽ¢s^÷BÕÚfûe{ˆ9Æmo¬ §yÈšÛ½h¥…Ü Oò?ª8ù?³¥îQ Ò" eX„â„13Ÿn}`—l㩵˜ e¢ÏPl߉a žÏÝ“Ág§KÅ‘yt×!„B!„B!„Bˆ†Ä0B!„B!Ä­ã_»ë N"§Oß»î:…ƒžÊ±r \»rñ: UÌML1`:Eþ0™Sg´Ð”‹ÅÞxL»>²×Âî…/Ñ€ÿb»ŠlÊ%P>ìkeLrör,€¯Šè7_ BgZ6öG¿t¢È¦ˆ-âþÖSÎUIÃé,£óAx4ѯ×4¶õþ—ómí©OãÿÏ_ÂoýÌoã•ßò¥øóŸý Ae0¡=Ðr€EÖÿž¯¿äáðußñÕc?¤ÈªŸ1ÄÐ}iSŽüÖîR+QŸ=qþ*^÷ƒoÀc¯Ûr´W)T1‚Oܪȡ-·7Mû‹5³Ýsf›÷t¶Á¶73Ú6΋[l Û“š¸˜5qamWï*úÈ?«XaNŽ„'õ÷ ”afý{®¸g<”ÅÅY÷ŽÅ9,”áÏh­æÒù µ Ÿ>Ÿ¸tÇa_“aŽÃ¿={æôå]!„B!„B!„B!Ã!„B!„·ŽGvÀIÅÌpúáûqáüÑŸ{öyܸúî{É‹á&¦ 4"7¡¨)¿ÈO–¿âO‚kMøùr»VíehLBÒ”#eBL™Ã—2½¦Ú«“%Ö”òÔ˜ÒhM`ª/Î'…|ò™µ 0q¢LË·‰2r4¥mí°b$]il1I¦ΰ/Èì笟Îâ§Ã$rlô£IkÆ‚œAnu‰cíëÚ fò͸ð‡ðÃûŸâ>óãðåÿÍ—áÃÿì¾ À ZÓ¿Ÿ S½³ ½†…–ƒsâl² õÙ,¶ç³£ØNqqYxîÙçðÆö&ü«ý5<óÔ³Uy°.@W>ðZï„Õ6ŸïY ÞöFq‹û5ØÎ¶üÄ=ǵ·aª »¬¯&8)¾âº±-Š? OF·"ïöB™‰Ïb=ÚövéÌÀv/”éó”8ԥ东u“a:ÚçbÆq§¬Ýáè¿á„B!„B!„B!n3$†B!„B!ní:€“ÌþÞƒ+b›¬7®\ºŽû_òâewäæá*ÉÖJ3t“$ƒ”^s¦b’"Xšÿ›ÆO”O€aa÷¼;‘ËdŒó¦¤,Ú4]&Ú£i5qzÔ£k'Ô¨Ûê¶b&’ሷ˜$Ô†v/²)ÓYûë l×:‘‹;6‹µ­×XצɔÆvÌ&ÉÄXùn'ú½7¿ÿè·¾ŸóÕŸ/þÆ/Âý½Ø§µ |º4ý—¦~´ßÝzyHàà‡³>[ÙyŽw¨AÊÏ(?U)úû·ðö_y'~þû^‡‹¼LêÐi¯4°‰Ä P¸XeKâþèלõNdƒ(°©â¦‰Èf Èñ Íc5 ¯‘±ê°â!Ôû2N`óÇïþ¾ÿ~/û‹ŸŒW}ë+±÷ï?L‘ür´4ýÔ w«ÚÔ¾Dµ6KE{•kÒžSD"‹à¯~3~ñþ%ž¼öT(8…‚?ïrÉP(›„3QSÏa`»#çÊug?Ú67çFÇç"²ÝÝà`ûfÖ$ï1Úë&Ÿ`ùé„'|ΚɶŽn}4EÅÞgŸ1TN‹mÓ]Û,Âøtvb¦Zoç”ýׯ\Ÿ‹Æ e{{Ç”ÞáüñÙ3§ÿd×A!„B!„B!„BÄ0B!„B!Ä­åÑ]pRÙ^ Óc¶L†)MÅeÆ OLJCõxÌr¨¢¬O€©>HL‚6De¹šÂD™T&žô`ª¦³—óÈö\>yo¯\÷ù,Ór(öj/úÏõ ù´ÌÛ´•º6Ì,¹æDè{’L=ÚŸá5?If°Ÿs°~:‹›“±Z³ÓÅ:ÚÏ~×b…!Ž$â=hû{ýÛñŽ_}'þÂ×}>¾ô¿ú"Ü{ÿ½XÅVX0Àÿ(Ÿåg®Jí3ã´3å§¡ŠfÞùk¿‡×þo?‹?yß9¯&ˆ9†”z„&ÃÛF°°'EŒ÷Ð9¯¡{>´ÍöËösŒ;ÚÞXNóx5éE+΄žä8Á ú©0ïc#¡ _œ0&øFë»d»‹'¿ÅÎÇå^|ö5i>[O\:úTØ;Æ¿C…¦Â!„B!„B!„BÜŽH #„B!„BÜZÔPyDŽÛÈ{ùÂ5´É)¨ƒCª˜$•I)mÌrÊÄšÊ2˜Ã“Wi/š°¤ OЦŠRóU„+,ç/µs^ÜrHÛ\ó¨ÞÛÔÄÛfAG{^ëtÒ‰NŠÛú¾|NÊ3ê…1l{øÜ²mNã©{B糕{dd¿]óµ`Ÿú\Î=qé:ŽÃq¥Bÿí&„B!„B!„Bq;rj×!„B!„wgÏœ~Àí:Ž“Èqy¯\¸îž×ú&mÄk€_‹Í×61hpvÞñ|˜@ça­¡{óùÍñ”>y/zÕ£¿낺ê‡7zñ’å†ró[†ÍúdgÔ|ß ‚_: ë üÒ~š!¾i6†yÍb 6VbiqÍbíã¼ü'WðÃçÇðÝÿùÿ÷½í]åÚﱃM(ÏOÒˆ÷c²ùäÕ§ðšïúY|ûÙˆßùÕ"„\ ÷hüÌñ[ ËýóÔÙ=£í•ço«¸Ç¶»{ê“ )®&ÞvØ3ú| Ÿï±íö6LU é”gdY³ê+~G¹uŠ¿~w•†EÛ5[÷½…‰í‹· 3Øž‰sú|\‰»ïWÀŸE¶}õâ ‡½=‰aަú !„B!„B!„B܆h2ŒB!„BqëyÀGí:ˆ“Æ}÷݃ûïnÜxæHç¯=ñ$žþyÜu×]a*‹-S^rãó2e…&À Õ©+eÎ OlY¢Û¼ŽÚ ߥ<-¦L€É—ÛµÎ(–-ÄgÞv/”ئxGù¸õs¨ çÎB™è)ä“B>Éç³LË¡Ø'öªŒ#äÓ2÷ª zÁÌš¤.Q ’kçÝ•¨Úú|’ ûn îQäb´ËO“¡¢ 'É öG¿AàAÖO†1ÎkÛI2ÀÓ7žÆOýßïÿø›ñ5ÿýWàÓ¾ôL¾_¨B—%~Ê‹(+_Ot»RçÂqá/áÇ¿ógð–Ÿ”âŽj€~iûòk£#ÖΩ¶Ù¾«¢Õ_›Åïél›?Wלù™m¯I<·uMVr[«ÉÄD½ÐƒRˆ·¸§¬Lh±`;ïær³è¤½ÏgÐ eØv/”Øæ ¸|Zî#¡Lÿ$æøøAÌ•‹Ç› ³·§É0GDÿÍ&„B!„B!„Bq›"1ŒB!„BqëQcåÙß?Z3oiæ¿|ñÌ>›Ä$@/NA§ HR›ÃSYJÓ3‹Iš=Ôý‰l[V’Œ„4Õ? OêõÞ^͇|a:Q&ç3¾d{)ØKY.S¦§¤p±0~#JÅü rWë…*âõb*P®Ž·¿6mÅüº®$úáã,÷~ëh?3Œ•ÖÓvZ]Fâ¡ Óy,܃°ÿÜ.àûÿæ?Á'~öÇã¯ÿƒWá£?ñ£òg¨L j·³Å`Í~bL¢i1 O?ù4~áÿ~~ñ߀gžz¶Õ NÄqWÁA[¸ÜF ·…lW»›m¯Š[@kî( Û.¦ ¬Ú6LkBÇç5!Ûˆþ_Àšä=F{Ýä,?ð„ÏY3ÙÖ}(–m°m¬øŒ¡6NxÕLúé/#Ûìs#çBµŠsÈ'†>'Ž!†1ö4æ¨<ºë„B!„B!„B!ĘS»@!„B!„¸Ó8{æô8¿ë8N"{{Û4óÎGQ\¹p=4$û¦c÷×ü¹Á¨ ʵ™¯ñ~{`4É€}q<°‰=öš±Ãy ç}sø<÷Ú€naû9¾†°Ç‰¬fI¯R˜o´çô¿æ:Ø×úýõE ñ±Þ›ÇYšø}:£XGyñ³öqÎbž—l묦=ïzÓ»ñ?ýåïÆü?Žk—–Fü"lIEäS„/)åWÛƒ”H³üþæŸþm|Û~~æ{_ç…01Ÿµx9¯i &µŠÏØšíÁ}u¶»˜ã}›=çì²íÛÔdtÿÖlwÏP¬ §y¼zóÇ–­tßt®ûn0ÿ>}÷FŸVëï|À¿ȧ‹e`—mÇxòûÎ'ÙæïÌZÁP“æ“leOßxÏ<ý¦¬L`€—¼ä>ÜsÏ]ë›Ä ˜…B!„B!„B!nS4F!„B!„Ø øâ]qÒØ?æ_¶¿|ázk\`x*JiL^&`Œ'À¥éš'¶´‰)mBK›î’°L`M€©þ'`–Õ0Q&m)×x O¿©=ì4ý&åó‰›ÊSðŸ(ŸòI-ŸZä¡3X¦Í€¿SèÖnSLê?Zak°m5Åk‡ÎR·…3.(®|‹ÉP&›„¬ŸÓM’qG¼o³>¯ê’ÛéëjGŸzÓM“Y8xþ¿ü£¿Žgžzßø=_[Ÿ¯TÆÃtq"§Mb²íßôýøoù‘¡Ÿ±ƒÅðª²g(@é÷leÛRWmóbÛ†¶yϱ?õR;çÅ-‡´ÝÕÄïñõFwnS½;A‡MÖé¤X Ë H¬}Ml¯ eBY:¡ ØÆÌg+÷È.È~»ækÁ¢J }öõ¸ré:6*^V8êT5@b!„B!„B!„BˆÛ‰a„B!„BˆÝð$†94{Çlè½|áznÂ΂‘ÔÄEìQÄH,NAíCnû³*)× UЄ4)¥Öàìi`Õ_B·{NœR|eq YH‹Ró)Bš¢ch ÙÙñUò©MåíZˆvÕ¥Š†Ìª¢ÁMóÄ µFíšNä2Úýš_÷ ¤ß_²ÃÚþè—D ­R´6N<4ˆµº„xlk®kê÷7_6ĨS_ª=ÅÃûÛ¹ò¾E@¿vb TaBwνµ‰mó¶YHÅ-6²ìt«¸Ç¶W?ü<º&löÄš øß(øiþ͇Ê5ž¢2›®bT›(,jšÞ^šäÓ2"ŽÁ´Øh:KŽtmêIY7wW꺡4º­L’Mg ~—ó~½Æ?UsƒI2ÄCÕaÌ«¾]ß¿½xh@· 쎖I:‰Î Å09²±H„•MU`¼gMÜ2´ øº’íp®ùžØŽâ–($ q¯ÚÄÔD,›k º_½mÛ\¶k²RoC?ýeI…„2Ám[ß ”µ}†*aŸcA ‡ìã™ùDµM1ÊÎåh>ÉV±4Zg¡ŒœP¦\»zùxbM†92=súè#y„B!„B!„B!Ä ŠÄ0B!„B!ÄnxtלDNŸ¾f¶©mÊå ×—äÔ&¶°˜¤JjHL4qЇ,6—)+ÑÞb¨ÈMXLÒì5 O™Ø‚"¨¾Jƒöh*K»^¤*aÌr´í'áK¢Ü‹¯D¹weR°¦ÕXj‘M'€)®«³é,t¦dgýt/ð0V†pñªµñtÓv±&úÁBžÎ⯕Ƽ|B6ˆ•Ö¢ dM<lØXñU¢õé0ùÇïö÷bbì,4h* ´õ¡H%(*Â3áT“s6Ú3·ØÀö &íxl;DûÌo[“±¸eÍöJMB-}Ü0ÚÓÊâÅ)åÙ]žÔ¼| #щ§a F>-ÄgÞv/”ØæxYœƒAž1fwË)÷â3Ú6^oµ¼rá:63ÿ,j2Ì‘‘pY!„B!„B!„â6Fb!„B!„b7¼ÀÚu '‰»î:…Ó§ïÇÅK7¶ãxæéçðäµgpß/B“˜£Ÿ:{ø/¶‹½VÃ(ÚYD>ð`XÐ/èqyÀçáþ¹&¡FûíM’ÉÍê^ ²a:Ký•…+>¦+ŸIô¶íw‚œi~Vï[˜ÏRª™·‡œ)Îa¬ÅC+±ÂŸ’²+ʃ±¶¿j…Ús?ÖÙDµ­Õ-M°QÈÄc!Gˆ}f-´&^i{:ÛæÏÕ5ÖÌöJMâ¹­kBû:Û+5YÕ¸ýž^èA)Ä[L’ú]8[·‘í²ßûð>Ëç­ʰí^(3°Í°à#Ä _ˆs||XàSl\¹¸fÎþžÄ0GDb!„B!„B!„BˆÛ˜S»@!„B!„¸9{ætðØ®ã8‰ìoóîWúú/_¸Öš”óZm’FhȨ©<·ISC5÷šwÝŸš¬öps·kŒ¶5{ÜX>ð…A3µ‹ÕÂõàð±LÎÛàü¨)¼Ùk>–xcx©CY(ðÞëŠNGب¿o¼ßܶp¦šâXÙ^‹ûÁ{ ]^.Îè×0ˈqZ01ª«K~%ÖWS ©‚–´LzY^¿°\Gjgœ&Þšß»Q<ñùY»±ÞÇ´íêm—ÏÀÈ6=¼SÛƒg4Ä´7Ù^}¦W“¹àÇÜ£½ü±˜“Oº”kšÝzõæmcÅg µ}_…W»kþ»nb»÷bä\߉ øØ'†>Ý­ÇoàPåÙÞþ‡;/ Ã!„B!„B!„BÜÆH #„B!„Bì5Y£5õ¶Æà+®Sstßüì³c“ul¤žœgqŠk wï¹1{í|i¸Þ N‰ÍÜ®‰»ßÃM÷1ÖÞ—?Œ›¸×ìõ½Pcâ›ñQ¿? ?\¾ öG¿¡É.é÷båÕ–m‹XûýSñPwf\Ÿy¬ýþfvt¿¤„„„ƒ*xaQŒa Œiƒvq;ß!7®Û vŸ£+b¸ÏlžgÛ1y†Ü–hü˺íaM¶´ÝÝ÷7¶[oÔ=Â%ÝwH;CS^x}¿øõÞvóiµþÎÂw¼O´Ë¶c<ù}çÓåCv©ÔÝ5 ¶Šàc8f}˜“c+©ˆ<àww„B!„B!„B!„˜s÷®B!„B!î`Ýu'‘c5õ&àÒ…¥©xiºNK«sRn~N,`)·$/Ó/Zc³¡,ز)¥‰=CB"{9ŒÄþƒ½,20ËWÓâÃŒ|-d_ÙG±—rõziOÕ^±ʵD‹Ô|-ö–͉b±—Úí5_¥¹ªåD½7®»Ûx¯¿f0|ìÔM‰Îóµå]Jýþæ«]³iŠ>¸Ýj½SX¯6ä3£©îniÅN÷ƒMòªoC¬å¡‰yÍöGR ©µ~Ÿ³Ðžg ¤4rôb‹NÀ3 p¶½m‡SWm3X lóžc ~ê¥÷mw5±íbݹMõîÆëíŸìD'ü¾~ö³%cØçªP&”¥Ê€mÌ|¶rì‚ì·k¡äCŸþÖV[yïAJ¸zù“aˆ{î>…‡ºïÈçï`ÞvöÌéçv„B!„B!„B!„˜#1ŒB!„B±;4æìí &ÃíÆæE\>Ä€%C"áËXÌaÕžeኇ¬ÙkaD1I³×¢M$²1_(¾òïXb%É…žÒÀÚ~¾l+Ú)öé+ª ÅèzÙt+UkõyÁÄ \œš1oìß6VV|8 rµ”úýQ„âAÄCyó5­×´4à׺&Î01 CJ IDAT÷ÈS\ºŸ#! © z±EÎ`U€Rìna›…$QÜb#ÛAÁN ëq¯Ø^üð3·jƒslö¬Ö;Ô$ÆT߆©*1œï²fÕW±Äõº›Îsiª]s>K¾#¡ â:‚Ýb‡l#ÄçD7%¸Þåãà³äâÄl¸zùâgmû±0?ü@ÿøŠmУ !„B!„B!„BÜæH #„B!„BìŽwx€þdû!Ø;ìd˜ ‰¹tþºx81 ‰9€:¥ˆIp˜ 0U±ìO©‰[â`6f{h±äóýD™±8[ŠvZ-Z) §NáuÙPKu EKÁ]Ú<†­G 2ŸÎâü7M’éc]9~݉lâôÎÁb^!V/w&ȉùbõñxA±ã¼d^3ðŒaSÕ †¼H¤ØdeESïY·¬Úæ-ãsÆÐv·D!Iˆ{ÕvWÙpf\“`Ðýêã¶Í5aÛ±&+õ6ô“¥La* y3ŠÑàÏ:a ú©*\vçƒK÷>ž™OÛü̹҄ò4hïÝ: eüãàÅ8®~ËÏ+ÛT˜5ýÙìÚÞþ@@*¶Ab!„B!„B!„BˆÛœS»@!„B!„¸S9{æôóÞ¾ë8Nûu2ÌöŸ¹T'Ä¿þÐhД¼¡ï85À75Ï~b°Ç7ƒ^ÑNh*ç¦ñ;7‡&„æîØ0ŽÁy„óÎâ{{å/,@;_‚«ðÞí÷÷›ÛÎTS³X'û«ð Æ ¶1V¿¿¥7ðrë]=×b¥5&‹·RZD1åuR^k¯º^&Ê”×0—x?CŒñ¾ÏîÑðÕŸÎÅ-6°=ˆ d»{6Øv÷øð5Y…¸ç¶÷yô¬êí?ûðßgK„Ý÷‚Y‰½•ƒ£vëd›ë0ü>bŸâ3o»¥–ÏØì»-h(ç3Æìn9å^|FÛÆëáñÌ?Ÿ¸xë¬ÿ»pÿ°RQxt×!„B!„B!„Bˆu4F!„B!„Ø-øô]q’Ø8&L‚‰\:=7<ÓLŒ<¢¥N1LE)`@`ª«„ºÈSY:{Ù$CLe)sVس×RK©M^)S^\>¹é•ª¸›Z¢‰ÓVÌÂt“š9­ùñ)ηÕ˃I2@?m¥ºOu·oEOnJç7ˆ b5Z~<%§ä'Édÿq¢‹Eøêĺb4Ç@5Xîé"„¡ñ@Óšö+©Nñ)OXP L…FâÚSÄ1ÇXÈŸ±M¶ÑíPoÛü¹ºæÂšÙv¾&¼Ç‚íQÐ&Ûݹ·ßÓ =(…˜ Hª f¶n#ÛMàçí²Ï|E|7¶½&”aÛµÑGˆ.¾w~üøTΠ&f†Ë6‰a˜þ³¸·'1Ìx+ !„B!„B!„BÜöH #„B!„Bì–GvÀIãÁïŽ÷Þ§Ÿ~î§ž¸t°S¥%¹‰7Jt²r%·m“˜diªnBˆ¬„AФh„4‰„4ÖB¢ý¶(н¬UXYSýg! È^ ù¤j,e±çÄ1)ä“B>‰ëcNøRÞ—ÚU{N´Ãµ-ä3áÊvb/ŽˆArþí|¸¶¤ZM$<±¶ßat>oÀÂN5‘Mø ýåùpkÅÒ$¿./6?¬é8v”'ŸŽôâœ<¦ì³v¶üpBŽ(Ê)bŽ^€b½í»W(D»lcfÛ©&¶ÍÛÞT“7×%Öcµ&Û.¬ÍõæÉY‹-šp‚å§žô)·ï¤¸^½yÛù,¾B¨,–qÂ’v×ÂúdŠMç3ÄȹŒ„2d›}ºøÉ¶{Ô)—'.­ˆaÖ†Âäkûû¬lÞyöÌé§w„B!„B!„B!„XçÔ®B!„B!îp$†9ûÓé0kÁyGJxââÚŒ p#rhh¦&龩»5cûæì`/6c›?jžŽMÐîZl¤6„×xò¯õöB®Ã÷Ôbu¾0³Ç×ýD…læ6•üƒsm¬5óÎ|¿ßn„ß;Úý®ÅjëûûX­ß?6,±†Žy›ïŸÖu–WÝ4ˆ55AKJüZ&¾¤Ô^íý²ç€öGáF¹ZiF÷Ö{S¾ñž;û!çX£¡íQÝ£ívyj{X“mlóó>yã3ÓÕ›l»zôõæGŽ­ôß'-&þÎè¾g¬ø|7ÛÍgÉ9Šnüû¼sËÀ.ÛŽñä÷O—Ù%ŸÝ5 ¶ŠèƒÞ_¹p},Ü’ÓÔÄý·™B!„B!„B!Ä @b!„B!„b·ü€gwÄIcoþÒ}75ƒ˜\ºxá:5A÷ÍÙ]Svmîî¤]ã¶k?ÌùÖt¾­8el›ÈçMÛ9Ô©/°­kmHwMÞ1V˜5zSÇ{‹ aÑÜJ ’èÅ ym´“¤Æ?ŽÕbLT¯ÕܪÁüŽgØÿ‚ЇòRJ é y1 ±Ë _:Ñ eºzŒjçkÓå9r l··³:FÛ¼epo:Û£ºGÛ£z†¸ƒíî­ÄÝ?Wë5ñõFwn­Þü]Áßwàï—²N'Ûº/‰ûŽÀ@ èloÊ„’×ï?óq¯ûlåÙ]Ö-\ µ Ÿ¼¿ùô·Ö¯’­ßå a2Ìš0f°¤É0GâÑ] „B!„B!„B!6#1ŒB!„B±CΞ9ý4€wî:Ž“Æq›{/Ÿ»Vk³5½÷ Õ}Csé?oMÌÛ‹IzqHðåìa {ízk€ŸˆdFMáˆÝ¡©›r];ï…0­¡{­vÜð¿.)mèhFMû±h¼¿Ø~›ÞÎø0ŒµÛ_ZÙ¹{+º3­3~+§7Š“bêbÕ³å7™9ñ ‹[qÌò:à5ZG7†óÅCq»¤øm¬ßÄ6? £š¬Üç“w3ˆ{Åv{D&qoeƒslö¬Ö{›šxÿñÑoåOQNW©»ýcYKSíÒwjþ§__ç``×Åâ±ø]6ç´¼ÍÙæšpü¶aœ{\ù£ÃlÍ¢ŒÙÛÓd˜# É0B!„B!„B!„'€»w€B!„B!ð€—í:ˆ“Ĭ¹7¥A;s×.¿–  fíÏé[`†„´4,§”šÓbi9’›™,Y9”í¡î –{{Ù$C²DöÊtþ›½òH5þI>¹³ºú'_  XòZ®K ƒr]ÏÓÀ×½vÎ^*žj´þ¾åæðÖ ,® uãÁ¥u>ùµéT£ó©­•wÝ"ê®Ïûóðöí×̯»X]~ä»4סvÙ—‹|u\]Ó`?ßËþRø€ÕRüu>Æ«*ø3앳I9^Ès`ÛæÎqCáÕHL´··âŽ1uqoc›Uí×>¯ 5aÛ!¦.nÚÓ„s½°Ï Zbøå €(ZaaŒ³ vzñ—§Øàxf>ló3çJÊÅ,Õ§Îg°íbõ ¢AžyúY±Ø+’ˆ, a{$¤I$¤©‘’&¡ iŠÈ¦ˆWêµêßR§¤O~_óM-ŸÞhÙx{\s—ò¾ÕCÑjmËØ \±ú”*9œPãbÓ`¹Û|ÍHxÂÏ1®ä'(…3Fâ²çD6ÉÛñþÒ0¯j3YÌÒ8/¶_Þ¤/ ¥ºšQÜQTL,@Ø Èà{N{•Áàœ ÷4‘‚SB¸{^ìb*ỳmÏ|bÛm"‰qÜ㚌Å-÷6¶ûzô‚Ÿ±m'<1^+Ïx/<)õ e8dt¶ƒLD8ÝzK¯Ëøx¢íN@Ö[>!f÷8µÜ«ÏhÛxâÔÅŒ§ÂŒg›/ÿ])6ðî³gNuB!„B!„B!„¸…H #„B!„BìžGwÀIcoÿå—5ÍËʵ‹ç¯6I…5ñF‚U€MÅ$$æ@ifnb’DöJ_yµ·a iüDÔ‰-(Ò£ ,hÓfª½"r)r+eÉRœÎ•Œ¦Íðô›6ˆÂ—f5·êÃôDSIÌât´,¢x¤ÜCºéE,äÖÜQ­5ÿk³é,Ñ7u±bÆÂÚ_*ˆµýѯMb…!îö/¾fâ¡¿$.(áâ]XoÔ¯b˜±EyuBŽüëvâ–m²?·¦ph‡ÖÅ- 5–ß³.ø±yܱ&¼‡Žom²Ý‹5!QKvÙ± e.”qÂŒ'¢´ýÑ.ûÌñ佘Ø^ʰm¾m½å¾) cäGÇ:Û~=Šn–÷W.ÞÀvŒ?ƒõß•â0è¿É„B!„B!„B!NÃ!„B!„»ç1Ní:“ÂÞÞQ|«B—Î]«bŽ&á¦hƒ“¬‹9üT¸ 0#1 HLDáKžòÒúÒ§â”ÚÊ>´×òI©ˆ|ÖÅ)%Wí”i4µ.$â !­­¾Åêí-×Ê´/ä)RN8aÂL £­31_›Lgé„áJÙ¤~óűæHãþèÛb^+jÀmÝVÄCÝþ˜ßñÅ›R--Ï„ùÐW¨b'ºUNlEUA€¦.ˆ9zŠõ¶cî^¡ìÛlcfÛ¶°mÛh¿lŠ›ëë±Z“mÖæzW‘ bê÷[{_!e·8%ÿÓ‰YF>—]]¨,–q⚉íÑ›±O£ÏÇçÞ‰s×á߇[êE4Íö• “%kŸ=úÌï=,1Ìxd×!„B!„B!„BˆíP“B!„B±cΞ9}À»wÇIboïÁ¾_|Øœ†×.ž»6h¤Ó êûQ#slÜöMÒ6ü9¾÷Ó7t£;¿Äïì…XËõÖ§.pO|hè.+œ7|£8Ây ç½=½Ú"îâa{­¡Ÿ»ÄAkñ¦Ç›H¾ÖöOE¾Q}$†7Àïí/•ìò ±ºpyÓ<ÖinniTWN4–‰êMfSÊ}ö H )mñ:Hõ\ªÊªßú¼ö¹˜‹9ä<º÷ƒ{å—£íµg+Úö1»ºÖsír÷áÚž?cø»ga­&“çqËzócÂVfßAí ‰WÂ:hÿ軫÷YrŽ¢ÿåûˆj?²¿ßºxòûÎ'åãì’Ïîš‘-èýo篜¿VïZÓ¸ôÿ²ë4o™ýýÇÄÃ!„B!„B!„Bœ$†B!„B!nÔ|yî¾û>ìÃîÃÖ£)O=ù,ž¼ñŒkJ.ÍÕ€ï1wØàln ï'˜»îÏ{{ì/4f»ëQøbõZmŽ]£fñM‚× >j:ßâüX´Ó7{»Ú†Xæ_œ£ë8o¾ü™V.p·Ö‰Ú ëÅ 3ABñÊÛ~mœ‡bãX1‰µî5¿¥¬DX"Æ:¾‹˜e¶ä>,r™¾Ü¾4É7Ö1Äsàú¸8ùm¼OþYj¶7Ô³³=ªS‰‹}ï×ø¾j²1îíkâmǘ×mówHý,çØk¨áñcŸüYok¶©.CÁ\xDâ£Ú•múÝ7óÙÊÝÅ\}†ïH„Z„ï°Þgw­YüŽ„ÿ®¼tñÖI“ßöö5æ<ºë„B!„B!„B!ÄvH #„B!„Bܨùòìí­üÅûUÌrñò…ë}Ã55k~b‹=3;ˆ{¿†p¡Ù¼wÁ]àé»kÜõù„ó±a»\wMÝ\öåéIôCÍ쨿“á™àÁFbÉ×õO¿öN÷·¸Œücp&0u'hoŒuç ßQ^î˜ß?͋֫  nLÁ´knÊóÙǾ.@ËÁÅOç:±Ò¨æíµz†ºOïQo»¯g¬û6¶18Çg í‰5‰Ÿ5ñþããê>Çúï·É䪅PëïåLÛí¾+Ê{Ø`».æÅï¡^œã¿ŸÌÙæš¸øƒí’Ïx=æO57àÊ…6¦cíßsùÚþÚ¿'ň÷=súÒ®ƒB!„B!„B!„Ûq÷®B!„B!M†94ûûà÷ÿÜàJ‚kìo —Î]ÃG~ÌéeKÊÍÊ––Ÿ)!Á`–øscñÒ蜒Á–¦i¤Úx\š²SZì$²Wž{ä ‹˜ ôâ—ýÕ6 –ß/Q‰¯¡nöœ ç•Ê^4_e­·WÎHKPl§b/¯¤V—Z;#_µþ¥VÑ(7«ÓC`%€»¾«åä×»›l©x ÅÔl&¿¿Ük¶³DUŽÆ‡Èû6‹±rü¹Pk5—ên×Û÷G¿A¼áb…±c2aõ×ä½Q~¿É‡ärÛ0¡©ÜªÔJC NÅ«/Æ“x¢#Ä ¶mîœsÁÊ:çÅJ,yèãö¶CÜÝ—ÎL€2¶m¼Ç‰[J\Þ÷jMØvˆi­ÞN Wó :Üq_ö‘ ¦üÙ†9;02ÛniF±âØ'&¶»Ò„[;çšíêÃù ¶]ì±~¾&œOñyùüõþ³Üý>go_b˜C¢ÿB!ĉÄÌðJà#<àƒþÀo§”~s‡á !„B!„B¼`H #„B!„BÜh2Ì!ÙÛ{ ½a5É^sñܵ&â("q5DÃPU0²"æ@jö,»NVÚ±›˜¤Ú#1 …/YXCÍÕ›Ä)c{-Ÿ”ŠÈ'ŠS²˜‹vÀÞ±v¨=þ®>ÇêíÑ]a_Ù^*÷”ìø{Y–ÙÓ1íooØýÒ}ˆ"›åX¿¿Ü _•”Ó›äUöÛ8Všhˆ×kÛˆ‡zÿËù°–O%KÎgy‚7‘H,†"܈9šrüKÞbÏÍ&權[@ëîí©B‰pkS~ØnIŒãF³»Ï j²QLdþ\÷À¶ž¯•ÏP/<)õ e8dt¶ƒLD8ÝzW ËÄx¼íN@Ö[>!f÷8µÜ«ÏhÛxbÔ%æ$\¹xÝ?[Lƒ)Üu×)œ>}ßÊ1@b!„Bœ(ÌìžÀ`ª„6³ à[SJ¿q‹BB!„B!„¸%œÚuB!„B!„Ξ9} ÀûvÇIbòïÓPÔ¯1 €Ú`Í ÚaŠÿÕÄéØ\=¿Ö5ŠÇæk ¾hÂù Ç«c“yœÎP¯ñùÒNÌÇ äóóí=Èžonoñpm-ÇíºÏi­´’h½î­õû]Kzð[ì˜ÛÖŸáýnïh?ùí…!Vn|@DZNsÆÚ×5Éçò^Ržî’ò¤—´Å+‹iÂdW3ó ?w,Öm÷¶¶Ã}Ùh»Æ„±m°mPsÜ=>f÷Õ€×kÂ{†¶1:·^ï^èA)Ätø;l©d·nVjÖÝþh—}æxê÷Òf¡Œÿì?*½OÊyC>ÆÈNü÷Š…õ(ºé}^½ü$žþ« ˜é¥„‡¾¿Ú[#1ŒB!NÿÀ7cE“ù ?kfû‡$„B!„BqëF!„B!„¸}Pæ!ØŠaÒê[æâ¹kµzÔ¬Ì Ú­É96ˆSÃ309o¡IÚŸ ç6œç†êؘÝ5žwÞüò ÚX¹¶IÐãÏpCzȕ㨱S¬£WûÕ5ïs‡ûàŒñÛ¼¿[ j»Nw˜Mö:ã;‘ËV±Zë¨g‹[ÄÊ7“XÛ™TÄ/ù÷ÆÌ^nO>í}¼]~\‡iÍ¢]¾Ñ6›‰5ÞÆö¨vã˜Ç÷¯ŸÆÛ«5Øvam®w/ôŸË~ò‰OÁm|œ²•þû%ú\vu¡òwF±k{£í‘€fì“bîòñ¹¯ù„‹¯ÙÝR›Ø6._¼íÿ‹nüïH±MéB!ĉÁÌ>À_?đӾý G!„B!„b'ܽë„B!„BQyÀWî:ˆ“ÂþÞË/ ]Ÿ¸‡7äßpñÜÕÚœ¼42—}©öÄ/+yÍʵågrÓXÊWÙ+ט¡í`{KXÉÈWZìÕ´ê~À`)åFîå}J fhþSÈgÅ^ªö(ŸòI!Ÿ,j°ZÏDö–ë.ŸP;öŵ¯ör¬þŸ%v¾Ù‰ \M®9ÜB¯xB½t/ýö°¿À=-t>Ñ~îÊg¾+ù5P &±Žâ\5×5Å3åYòëuÆ»¬}ô†íùa2̺¸^PöÄ;îÞX³ÝÙ/¶‹:!ØÆÈ¶¹Š‹œívy$$êmû|÷jM¶mÏëí d……'ËÖHË3×AûG“«zŸVëïE7A´‡‰P&Øæá^Ž£u˜‘«gè¯ÙÙˆ>ÜûÞ6 ¸|þ†¬ˆ<ùóYÿ)¶åƒgÏœþЮƒB!„8/?™O½éQ!„B!„Bì‰a„B!„BˆÛM†9ÿz¿©;Ÿ®]îZ³(ˆÁD\Ãå ×ë}iŸ=þT¥pͳ'1Ìaу !„â¤ñÑG8óQ7= !„B!„Bˆ"1ŒB!„Bqûðè®8I<ôЋqÏ=wáÙgŸGׄl˜“péüõEXRš‹\"LEÙVœ2s Ú§ 0œ˜$OF"› ‰v,;M€i×GöZYzáK´‡œ<ç±¼¯—@µc_+`B]ÐêR¯¡ˆ~º½ù¦ŽÄ ÅíäÖì´lVöG¿aêOÙ lÜt­M’äU7Íc5 ‰†hóµx¨÷¿zÌ]Ž~š¶É׿‹§¬8hU€¯~í‰BŽ(RÙ$nÙö‹ÁÍøœ³M{:qKŒ{+Ûœã³Ò™ÔÄÙ¶AMà÷´Í‰Sr-ËzñU(q½î¦ó\šj7Ÿi»¨¥¼g%Øå[ãÙ(”±jÇÙåšt>ûZ”|}†Ç²ÊxÛÓÉ0À@…Öæöö‚Q±†Ä0B!„8i¼ígÞyÓ£B!„B!„Ø!§v€B!„B!Ξ9ý!Üu'‰ù_¾“.ú W.ÜpÖ±;6Pw ∠̡a››©cÃ5ÙÁ`ÜÏIƒwlÖ®öúXºVšÏccxlüç¾ïÞ¼/_ì!pCxôoä¿ÅÜ5ôóZGÙë»Ø›x"žáV÷–g,°?ÚŸáý.wûiÍBœ.Ö.?~`&±®å6Œµ¯k¬Q‚Õé0üBZD.üBY¯*ˆ¹Äûãã_r`–;ߗɽå>½§£š’íÁ35åŒmïÝÛà{qËüÙ‰5©‡ïˆ¶Ï}WÅðËý÷Ó|òI,{ü®ŠaðwÄŠOLlw¥ ·¶~R|ì³úp>ýõuÉÌÇ]lt¶ákuéÂu/ÌŠôäËûûš sH$HB!ÄIãW<}È3ÿòˆC!„B!„bgH #„B!„BÜ^è/“‚}ÃL¦QІnÛÅs×|sv×4Å|=4G×FrnŠŽS ¼ÄÂyo›Á7ŸGh´æfíØDnñ½{ù¦u¬\[;ß ƒJ-æò5·kƒZÎùWßw$ˆ¬¾mû·˜ßßÌ”½±¾rÂ~'l0zÛ¯õqÒ½›ÅÚµàÏbõ¹mŽ•ßR¬X&¾,¯&p9ȯ¬©ï:1LÊcúû×åüúDZµ£þÞô¶QólGi?OáÙÕ“Ïñ}ílÇgu­þ1¦P“¹íAMFÏÁÀvüüÕµò¹¡ï ê+¿¯.Ã#ݯûïö¿W€ÑzW zdc<ãï:”ïœî;Ðú˜;Ÿ-÷ê3®¯Óy*}¼M>ŸVñe2̦¯eRÿfo_“a‰þûK!„'Š”Òïø¦Cy€ÿå G!„B!„b'H #„B!„BÜ^¨óŒ›} ^Ö‰/ž»ƒfj×=z¬ F†MÔ¥~ÐÌí´ l;¼B3wlú^±WÅ]£ù`¢ClDMâ\Œëãðµ‹uA]zÁ@]p7s.^ ýl'ìß8e$r Âøc¿´ß…fˆoša^³Xã¦mbõ~¹ÞQØ’RBùŸƒ´¼êÿ¤øj)wõˆ1¹Íîa_Ƕc-±Á¶{–¶1‹{ð£y¯û¾Aÿ=dÙ€ÿ\—(Ú÷ŒÿbŸ9ôb¿êÓx½¥ëí´Êô>ÞŠ¸Å IDAT)ç ù ÏómˆßYÁh}æ3<¸tþ:VÙ “Ù—æ0\<{æôûw„B!ÄaI)ý€Ïðž›l{€ÿÀ—¤”ž¹E¡ !„B!„BÜîÞuB!„B!„p<ºëNûûy2L81¢»–RÀÒÒœRmªN,`ùR2˜¥f6•†æeÅRšØËkÉÈžµpr£t»¶4“/ÏuÍ –¯%$XõµP›ÐK„Î5Œ—|ª=P,y-ÿíýbËïÙ?r^‹½¥.)…|RÈ'µ€‹íäìå{ÈS®+rÝS½C-ŸT—ªqÿ,ÔZ‚*†ú.¥~?UŽ|¥æ9y;þ¼ b¥µ0Íh¹—ÞV»;yÍ 9Ø$¯µX­þ£<>‡|&õáŸ@×Êd˜ª @SpÜSJ ÌE"6°ÍfÈvÍý&ØŽq»ØÛñ©m¶«ÉÀ¶+åæz÷Ó¤H¸1\w!¹ÒÔß)Íòt9¡ÌÈ粋o“/{µ›Ï´½è¦¬GqNç“ré|¶Ü7ùÅÇùnéH(Ó‹ Ï>ó®_} Ýçèzÿý/Â}÷ÝÓŸ3$DB!ĉ%¥ô~ÃÌ^à#óë!ðG)¥ó»ŒO!„B!„â…Db!„B!„âöB ™‡`ooð—ï‡Â§8©\xüj_”ÅÚžª¦‡  Ý:ÌÇÈÕ3ô׌lµìýú@„½.—+nÔ»9žt–Â5ÏÞÞýã b†„ÈB!„8ñä©/ïË/!„B!„Bˆ;‚S»@!„B!„³gN¿ÀÅ]ÇqRØß/b˜IGðj³~…ǯQ¿¹Ÿ&Ð5Q/K]CµëWwÍØq*Ah0þïû¹f‡úäk,ý‚œ¦k`÷¹ŽìùFuË !~v¾¯Û›ÅãóYüp79­Eê^ß}nÍ`<@/¾§>¡vÔÜËBLõyšì~G“<Œ}ÇXCn]¬k¹Õ¥I¬ö§¥ù>% Ðï³×AÛWζ˜é>¬ÕÁÅ=ˆ9æ6¼ÇeËàÙél¯ÕzR:;¾×|„ò_‹;Ö„mcÍvˆyC½ù³ÆŸA }†;áùäÏg÷ýˆ~BKôËÑ}oÀZjF¶:dÛùôvC9ò5ŸûPœ3Xo>CÜÅg´íòé}r>—Î_ckÓa2û#¡¨XCBd!„B!„B!„Bˆˆ&Ã!„B!„·ø¢]qØÛÀ/äI-ù \gø`bÌ…sWóoˤ’Ñy*J™¥ay ™å)*4&•³(Ói™À&À,×—8R>ïí¡6¤#O|iö@×—ý‰bµ\“T¦¤¤æ«ä šÃ%Œöj>ÅWÉÇM”¡XK>9ÖÎÞ(v´Ú×[`-Ö6 …næVÓYÂ,÷0NgñÓalÜNMðãé,a?Œ~ ¦³ðþDûË‚_ƒX»ýÛÄJkƒÉ0­.~ÝO†1yFj–’û òýƒW@ð…(äˆ"•Mâ–ëPo{p®]•ÚñÚP¸cë¶1ü8%ÅØöjMlPÀù·’› Ó‹SêwÐ 7l°^wsm(üj×êçÝÐâˆ"Lc v¹L1žB/¶ùã»á}öµh߇£õ˜?Õœî¡ÐÀpéÂ5ÿ¸Ì„1‘|yo_b˜C"1ŒB!„B!„B!Ä Db!„B!„âöãH ³{{L£-sþò{¹vññ¥áØ‹CP›•—½,æXL¤Úüœ`QLÂMÚX®UÛh‘j¯ UòÏ-|q¬e?Є/VóL®É)ø¯öPýU‘MµGùtþ£½RLòT{ËQWŽÞתÔg©s©Nù'²@ÈÝ}JÚê¯f"\éÅ Ö|s ÕÒ rHˆäÏôq¢fÌǽ­zÈb^-Ú>Ö`ƒž‹+º8iºK=´ƇÜ&àŠF"•n:ž8‚ƒcíl›;7·ðYRC8ÛmÏFq‹Ï±mã=NÜl¬ çkέջL#©âʯnpøå €5¡Œ·mΧ ó¶[šA(3ñY>Ÿ.æAÙAñµ’•Ï‘u>y¿›Ì…ð2²E¹wÓ¯¢íâÓB,\>w «Â—4ù=¿ÙBQ±ÆUïÙuB!„B!„B!„âðH #„B!„BÜ~è/”oÉ‹^tzèÅxâêÓáʦ©0ËÂõ«Oã©'ŸÅ‹ï»giFŠ9èD7E¥L”Éæ'â”´b/‘½¢+)òöµ4R'Šp—,¤I$m(â^LRìbÉRœjK/|INTÍ5áK*öPuÎ ù¤O  "¦È ä‰PÙ£»û5 7õ„€mÄ ý~ªù"ïCÑJÙÈ•"›n: ò½ô¶ºI2îˆ÷m6äÌb­o'u5,“ašRèP¤”{¥ûŸc›Š[ÚM²áž& p* g»Øç£Ñ6Ÿm{:QŽùsSq Ú¹™¸¥SV¬Ôdn{P“Nð3¶í„'FkM¶‘¯Yó•ß„2r[§é3ÁÇÔ§ùøB)¨d1ž~ŒÐÀ‚ëcî|¶Ü«Ï¸n¼Nç©ôñ6Å8ZöÍö¥ ×ÑÑ}îæDM†9o={æô¾Õ„B!„B!„B!Ä®‘F!„B!„¸ýæìí?¸ˆaú0§4©\xü>êÏœP¤IÜRµ›ø£‡  ÃóîÑ ¶‚ ÐúÌgx,Úm6àâ¹ejÙøs9€¿SÂþžÄ0‡@ÿÍ%„B!„B!„BqB9µë„B!„BÑñ×vÄIaoïüÛ¤Yxµ‡8áâãWë»Öðì²»&ïeÉýeÿØnpŽMã®á<6yÇ ¾ñÚÿìít>(/t±¶†ln÷¹Žìù© ¾Y¼o5×»F|Ž}£=ŸÏ²îºÔ[B‘º—÷—:ŒÎ„õà5ñ~‹1ѽÚ~GÂÙ„”P4zNVöGßa?—%™!`Åò…¤ƒ2pg”3ùÛTÇaÎð9;3ku÷sÕöà>Mm·ã«µßÖv¬I÷n·¯wü^)ŸµÅu\w!9ñ{¨U`2¡%~öÑ„2³ï­(”‰ßu½€Ÿ”Kç³å>òÙÕ ðñNn)Ç×Å=ðYö_:Wþ ü ŒDn£‰R…½ý†ëbˆÄ0B!„B!„B!„'‰a„B!„BˆÛŒ³gN'í:Ž“Âú_À5{.œ‹º£íĵy±ºo0ãù‘=›ØóMâkç]±ÉÛ‚áÏ~7ÿwçÑ7u»†öA¬ÕàcG8_¯ûÆ}:6–\¹[ý™‘("¿Œ·˜ß_Õ½Þ÷pÿÖ±ò±`ÇØtˆu´ß¹ÅJkýRJ8ȯä^#L»~R^á㹎ê2¨¹Ås£û2¬{´½¡>d·{F¦¶çÏÊ,no;ÄŸ­îþncuû¼…’ñwŠûÞ ŸÉj«úè¿;¼].‘· òé¾c` ÐÛ³bæ!~mʇâu‰ßoÍg¶Õ²÷ëÏðxðm­>[îpéüõ–èÖÓa–§NNŸ¾}¯`$†B!„B!„B!„8¡Ü½ë„B!„B1䟻ë N{û,Ý÷¥«˜~o¿&´¶ïå÷ríM†Ê~ƒ•Îbj²N)åú„b6Õ†ðKXªï9,ƒÕ€¬Æ0·—œ½| hûÓò³Ú«×³·´ø0#_œOÊ>:{ ËùTíQ>C¢ÜJ^r/¾«¹–º[½7–ãh&(d¹.îŸ tŸË½.@ÖJ´8eaiPOÎVɰ:tûÛ¯‰|ù˜Z¬|&ÑÛ¶ß(ÒeÛ(?«÷-ìæ'™œöqÎb­‡“ÕÕü»8æä1½¸¥È#œ$ìaeB8Ç ‹{¦â–~ÏX'B;¶í|®Ä\}RîÙ†«ùÇW}†¸ÏÞ¶EŸƒ|¸æ×®>‰çž}SÒä÷üæ¥/½wÝ¥¿µ%Ox×®ƒB!„B!„B!„GCb!„B!„âöD©|Kö÷g“aXÓ¿- þ$N†ÉMÍEXQ)5½ 0¾4ÁF§8GUÆÌí­ŠIèÚÒ¸Þ$µ¼ˆl²È%‘´¡4¼WÿÎ(–,Å!{Kìí(W/j¥m—å¼¾„Ú5{åzÈlj†–Ú±©x.ïܽDq8ñˆsÖVÇb°fàÊÑyò>­´B·óAd3å,÷ÒÛr"­Äü² '¬KÒçÇv @²eÊK9â'ó¬S«RGÃÀ+ 8î(äˆ"•Mâ¬Ø¦íM$bî\75§Hxm(ܱmï,øá¸&¶WkbƒšÎ¿•Ü\˜NXR1æBZ¯»[™\øõ}>Sv|¯#ÄâKPü ãÙ(”±jgs¼í^c]>úŒùSÍéVM‰“jpéM…)tz³¹mþïD1àígÏœ^Q !„B!„B!„BˆÛ‰a„B!„BˆÛ“GwÀIaû0¼H×.<þÄЮ›bPtôâ"lXÌᦢ”ÉÅ^ò“Nꀺ¿LJi"›åúT™S„4£ 0@ØCõW&À°½šO"_(ã\Ö§ß!M«h/ª±  _ê˜ÁD™ho4Ñ…ïùñÅ ÛLg!;æ×ÇÓYÆû 1V>3ñKâˆV)Z‰›© 'ÇÚ‚%æBOïŒxWRˆµzŒj„h5Žà`Ï$0hŠ•™mçį;—~Õ³+qαÒÂx·Æö &á\S^pMªU/<áp¨|®,ÕÄd‰MÖË~*ûÌgK3NKYçp (Í~½É¶†âòÉûÛ{ÿhº¸Ëç(Šmlb»ø´‹5Û0àÒùE ÙÛïîkÄ}0Ó2-Ml‹„ÇâŽÆÌNxÑ1ͤ”ž¹ñˆ£cË¿”î½….ŸO)={ ý‰›ÀMzNRJéé›8>fv€»{.¥ôÔ Ž`f÷¢û_Þ^0ôy<¡Ü¤çä锺qÅB!„BqG"1ŒB!„Bq{òNOxñ®¹ÝÙßãÆß‘¦8Æ[.<ÞO†¨¹:‹-ªÀcƒ˜ÃO€ñîL¹Vì¶pŠ(¦ÚF˜À’k2ž˜Âq“nZM)C‹ÕO`)±`:¦]où¬M€iþ£=Ÿ¦`fö|>-ó ¹b†j0Ù¤~óÕ®U‘ÍHC»JÈQäRmvýT´êu&È™ø¶°fþ˜ùÝS†=ûSqK{øl¸§ œz€ã¯Š>móÙ¶§åÄ=3q Ú¹™¸Å«BL¡&sÛƒšØLL÷{£µöÍÕ‰BJ½GB¹­·³ÑG÷ƒuóv½X&ÆÓOƒqX°c}ÌOŠ?äƒà³;O¥wñtùláÀpé\ùwO|ŠÓŸòÚM†9È; 3»À×øtŸà“qþw 3ûC,BþÇüó”Ò¿9®Mqh>À»n¡¿dfïÅrÏð)¥÷ÞBÿb Ììn_à³|*€—8ö(˜Ù‡ÐîýëRJo<®Mqdþ1€¯;¹ø¿°ˆ›Çûüé[åLŸÇ“™}!€W`ù.þTê&˜½ffoÅrïß àÇSJšz)„B!„¸#9µë„B!„BÑsöÌéç¼}×qœ>ì¥÷ãî»Ãÿ‰cãGl]ÿâùk˜ÿ1ÅqS·o,ÒÜ î›Ã[ó·?›»··Ç݃æpwò°ØˆšÆÃžØœ^ö-ä3ÈÕMEèÐÃ$n Ü5>ß®û†~ºBnõqÂ}¦vöšßhs[üþz(¿ÜÞÙþmcuÇxB\Áÿ /ïºìeß´6 ¥T_ù•&¯ñu´œj>÷Pèë¸æÎ­Õ6Ú ¶Ý½j®ûçf`{›ç¡ž…»«w¨ÉèNkÒÛî>×dvô¨¹ïU¼¾€ÁwDHß×ùØê÷àã,>y•©³[>·Ý5ÊyC>Ãó¡&¾~ÞçãëÚ|†ÇbP§ÅÆÅscfG?0°·§É0‡@bqG`fw™Ùßð^,Óßàå¸y¢ûðåþ€·˜Ùÿgf{“l‹Ûðq¾Àwx§™}Ÿ™ÝŒæ^q0³¯ð?à›|n‚&ó¾Àßð«fö föÉ7ɶâpèóxcf/3³_ð˾ À—àæa€å;ýs°|Çÿ€wäï~!„B!„¸ãF!„B!„¸}Q“æ˜?üÀD“ü”Á_Öþ¹\¹xcj{$™ Ebãõ|ïL¸šÊ¹‰þšÛ›»cüàó¾Ù||Þ qê‰Òô½ÍyóñÌrGw}^ßx­kt¯kõÒ‹ols8ƒtûs1ÙGÙ_×úíE ö>™x4øûÍâ–Q~£¼Ê2?¬ó8G±&,1~!õk|-^ïcçÑòŒuõoÏs¬—¿ÑöèžÅŒž›™íqÍ6ÛæØWjÒÙ^«Éø™~fjM⺠ɹhB/\cfŸËª Ó}¤ÈvýΞŸ`þû¡~7Ñg«æÒåÓrùìâÄ<º¥ßèßÑ'פÔüÒù †éD/ã×4fk$:wföŸx€ð‘·Â%–Iï2³ï5³{oO±{îÁÒŒû^3û»6SV‹3û$3{€×øø[äö/xÌÌ~ØÌ^r‹| !Æèóx`f/1³Æò×}Å-rûñ^cfo2³OºE>…B!„â¶@b!„B!„âöåÑ]pRpÍ¿“¿–ß-Òµ Ïÿë3÷ ÌåÚ¨i±šmÙ Q †÷|:4§s£xmüvÖÍÆH0âÏmÍ^h.¾|…&ø6ћܽÆ7Á÷“\y¬Ô®ØYlq§:Úù\»Ã´÷º¢÷‡ûÆûÍm gÜõ"²‰ûÁ{ ]^ü°u±†y¹’„ý¼›OÜë`:&…2ļÑçëéƒr{b­ú{ºV®A»¼ú ð}ŸÜßYÜþ™ qoª Ök¶9tÞî>ÿÀÿÏÞ»Çø–ew}ßÝÓóðt·íò­ŠÁQˆƒHTŠ€ 'R"ò)…œ@YAQBXB (rÃC‚ˆ QˆÀcn§õÖGHW³amkÃg³nSšÚu·ú,8ÙÝO)1Î{~W[c÷~|ò™ßÞgþ=.½ú…7½ˆSþ½–%"Ð;ˆaåÓçg'_9v’RÊ·HúË’~ÁÜPÒo”ôJ)|1==¼ é÷Hú#¥”;˜§RÊ/•ô7$ýÒ#¸FÒ¯“ôý¥”Ó#ø€ÏãYsþýZÎàõX¿TÒ_/¥ü’#ø8 ˆan.t†9;wž3ŸRÌ®HæâÞ»ösÁHì‹9²‚ìV0­ÄÞ!ë­8Åu{pŸóÂ÷y}+ÔÎÅ-þ• ‡‚ìÚöϵ°\yÁ¹+6{÷'ç_½PÝ'¸Ù‹ó‹ûXÜ^fÄì{Säb«âc¬f~k¾7w³nĪÝù›â!³fê£YüâÄ1YǘžÛ²—Ý÷”ŸŸ“íe²½—ã{#WþÒ˜3ÆãYmÄíl‡ó’·íscŽ÷Œ_gÅjö{AÏš Ϧș¶ŸÛ³Øž8óüFŸ1ñvâš­ïÑ(”‰>wbî>ÍÞ›¥’ûŒßS.õáÖ™òjâÛúÞš¾¿¤àSzõÞš:™%]Í&VaÌéésó5È࿱àVSJùu’¾GÒ±;³ü2I¥”ò GŽ/ÿ‘¤ï.¥|èØ<-”Rþu-â·¯?r(ÿ¼¤¿QJùÙGŽx;k®ÿ†–Ü“-ÿýõ¯9€Çb€›Ë§$½wì žÒ¿„_w+‰eÿÊþÕb˜P`=”ç“ej(wè±àÛ¯EÔÛöJ°g ¶7„4fo²…Ü[Eà¡h}}ûÂvkOa} ëâ±û™ ÈMî²byŸÛ2Ψ˜l–¹&Ì´&Œµ³œ*æ·çSŒ5[c}§±‘M\1«üؼÂùnûJÅ-—W¼ñŒßR|\~~¿;g8Û–·×N¹sæ3Jò3Ùöþó¸m\Ãv±s²³²ûšrÛï æ,È0Ϥâx ã}öHSö½6uQÉ|;>¶×߇”ñï²þ}• OÊFÌñØû÷R ¶Ûxê3îßäÜœaßK‹ÓîÇäûý÷Þ×_z'ÜK™ð%ÿáPÏ=wìº÷'Ä0pk)¥üBILÒMéÌñK$ýÑc_%éw;ˆ§RÊÏ’ôqI7Eûóµˆñàøü|IæØA¹%;w»<;£­³¶í”käd3‹.F þ»$»mr¡LúÝTV_!í[>Ç6s¡L*Ήv“´÷ÈÇ+_êÃíÇßšþûn¶í¾³¢íæÓ®·>ì=±ú{í omë8k˜'ù.ip/;€GÈ·júErt~E)åØ+àñó­ÅÿÇ9<þ=I7­ Ï/)¥|Ó±ƒIÒ¿PJù'ÄmgýÎûÅÇŽ#ð5’~õ±ƒxÔ †¸Ùð—Ëà4v†¹ª)L\\ÕFJŠ™M³+è…ÙÙ+éÅèI±¹Ó@Ä"ëX¸=Ž›x‘]ï‹æ÷í™Xl‘}X¯°> adm…½Ž\Ø‚÷¼ËC,NŸ ÛÍæGTšjCÁ=1H¼f‘Í:–Öžßî±7ÒÈ_ŒµÄ˜L¾úÍ‘î/ÛWŒ?ÌO-ϱËKÚ-&Î csN’|¸Tϱ»=öuYþ‚훫mïœM¦ÏJÆ‹·ë·ãÉE8Ùwÿ21O>­°Ÿùû$±-k7û~6”äÛǽŒ¿öÊ›^¼)ÿÞ eæ_nwNÃÈ¥¤O;€GÈ¿{ì>$é[Žê‚7þzþ†HæÕ/ÒÆkçd ¿{qô,NEÚQøâ; t{%¬ØÙÏX¤w~I ·7æô¢ý©8ݲÇX½@Èå%ìuo½ß»)XßÉ]1ÁíŠA‚@«á+VÚÛù™ðÂ¼Š›Ö¸›kO æ+äÄXýü«cµÛ ó«|7˜¬KÌ^ç˜õýAû³yKb)nÝÞÙE»Á¶;ázóœ­í˜½m71ߎ­œØ)[9™mÛ[{ˆ.ÌìVÚœvïHÓwXÖ¹%Þbާ߆ûÞP{NsAž¿íu²ÛïƒøýÒîáD(öÓ3˜ådëó…{%øÔ´Ÿp[$yšG¼úÊ›ò¿«ònfë/ÀI [|æüìä°_üO&?÷ØlðÇŽÂ7;€§€âØlpSãxùÆcðpS¿ónj\gì‚æNOŸÓR  ÈkM Ïí¼åý+w¯î ÓXŠ«ªŠŠj¯c—¤R‹T̵ZTÊ(\.UR)}µj5ö–ëµX«{«:üKEeÝŸ··ú’¤ZTK5ö– ëjçØª=þý¬…ÜÝ¿ñU%Ë:VÊ:ÛçËø_}y{ö(÷sçìÕæ©GkÞs«a¼¨Õ•‡ñbKÐ[Á{õciG‡5ýrcGè IDATvf ±v÷µÏöVm‘|Ø[ã1ªÅÏ—ú¬Ê]«ýÆÐ}Q]¼í5ĹH¤¸éÅÎ1j†Y€bm—ܶ¬mg@}ñ¡â–T<mÛØíÍœ˜ýoæ$±­ \·mÆÍÊLÐ2„¦óIð…2ÞvqaÎB³¦ÏMDqk€¹¸¤ø˜CjœH¥”Ég>>Çœ©/%Æq“›óû¦0s«Û™y_kû]À[ÜÃÜlþŽR•X>ò‘ê¹ç>¬·ß~wS³;úGYeÈ_zGï~å=}èÃWÿ_%^l¢.ðs#H(}öoô0J»"#þ0#e!V%L÷U£=#¤©FHÓ3a„4MLÒí­ºŠE°±ŠbÌ~j â”öS[|#/mþlOfþÙx{6?Å _Fì¦ð}ÝkÏ}ÆŒl_)\)ýŸu]P|tñˆYãÄ ^*E6J6#F­¨áˆõiÆKëz·ÔyÍ"&ò{p"›šø0×j57ÊuhvÛ³Ùíž´y,]ô0†ó9û”=Ûfž±ý@â–ÕÀ¾(§Ùw‹®Î‰ösbm;¡ˆuÙ_C¸Ñ|MB kËøðBü(š k[>›u›ÒÔ®I‘” e6÷c…2›yi{œ…2ѧ6lg·‡÷òjs`Æ/î51Ìa‚2æaååcpùƒ’¾xùß"éŸ{D±Àãã·_sþ&ég=Š@à±ó§%ýØ5æÿ«’¾ùÅð´ó’>{ù<·‡¿)é¯\cþÏ“ôï?¢XžXÃÜ`ÎÏNÞøø'_ûŒ¤o:v,7ÓÓçô?ñn¼\ñÞpqïMýc?çëôֺ 1G•éÊÒ„eˆ7†ØD*5ˆY&qˆÕ 1I5öÖKÃ^Ò¦EªZ½h'v€±×ºÍ˜}u{¶ûFÁw›í™´›n3Y÷›ÖÆ _†= ÓF·š5q=Â.ðȺ³hì"ø¥u‡ cn©¿6ÄÍÚVw–èÛTíg±¶ùQ0cæ· :L.R¿ÅÆjE6Eµ]6Ù$š¹šZ¥ËîºÉŒ³CÅ-Qˆ³#nÙ¶-¹œuADf[©m/n)féFÜÎvñ¶åmû¸cÌÆ_b»‰.¬pc‰×ˆXŠ÷6ÆË0m]m ešmã3¦Ã qÖ¹6+º™D"Ͷ¬Ï³KG·­·JîS&>{ .nç3ïò’ eÜ~Â-:åe½øê½×å0ßKî±³ÌûÓ;ˆa„Î03 ÖúÙC'—R¾Qˆažxj­»ÎüRÊ·1ÌmáOÕZÿÒ¡“K)Å÷Š?^ký¿Ìóx«øëü..¥ür!†˜xæØÀ•P´yË_Ä÷%&vûc÷Þ8Ø×Tø]’BiSt­äÚüÓFÏÝ \‘¹]§ë¬/sü±ý {¶H|«¨}c},ßÌÝ\¾Ÿ»QŒó=×Oм¦ƒ]÷bª×må}2ßùè¹HæGßfŸ1i¥$óeÂp±ZW{“Us¬%™o•+µÞß«­õûNüÆwÏ)Æ+o{˜$çj縼&ùœl{ÿyܹíbç”`Ûå$97»_c»ø0çç>n”ûH‡‘ÈŽû´¹ç®ÍŽÏqü~0Ûó>ÇŽÆøßcšÇóçœ Ÿ!ÝFÛ{ôéct9ùkV&‘BŽL¾/î½9w­rÔômã”Î0‡Bg€[b€›b˜pã¯æW[d ‰¯#†‘LA·|Áö(þN °cñ¶FõÜÁ¡—Û‚ëXhn‹²·„/£øÞùröæõLˆÓ÷=Ñ—°—¤˜\~?S‘¸‚ÿ)WÑžŒ=SïÎÂÖO¢‚¾³ÁqÂ1Øáko¾?X¿Ã¿ÖøHcæ·LNUÿ!V®´«Ýâòæ²VÕû|]®Ý‘ü¾ç=Ïù{ {¿ZÜ¢ý$ç䨠XÛ[¹JòlÛ96Ç÷•“pÿÑň¡˜x\Zúò a‰ùý,ÿÌ[ÛÃgxV§ï/+X ãÑn’v÷ì—`k|c„q…ý˜±Éçl{kÜùÜʹ½'ºOfý÷Ж®Ó·–ïÖ®Mßpç9Á•|öüìäÕcγÇ®„¿`~é_į25æîƒ«×ÃH­(ºªª¨¨öbkI*µHe±_T¥ZTÊ(^^.•¾Zµ{ËõZZYxMì ÿRQY«¡½½Õ—$Õ¢Zª±7Òý{#kµÇ÷³ÚkUàÍ¿ñµnuøRU-«—;ãßÚîöÖS[÷žånäÖØ«e¢gÃbí£Õ]«ë¾ãše¯æ$׫ÛìîPÌúS¾Îóý=Ü3æíW3?^+~ÜÅêög|wÅr‚­‰RÖ«â`Ì8ña[4Ö.n±¶›aÏöP1\)nIE*ƾîÇvIl'9‰¶×9^tDdFtÑ}Ùu&”® q¬>¦ÏJb)³í±­O"Âi¶Ì~ö…2ѧ±ö£Ôg°-kwΟ[2û>},#î·Þø²ÞýÊ{ÊÕ/¹ÀÓÎûº¯ÿ¨ž}–¿}uü7À-1 À͇Î0pçtù‹øí/ä/ÅGÛU&nüâÞ›×öéÅ&òU‘Q›Ä¢»,ZëÏFiWZ‘ö“ {fÆWöŒ¦!M‹ò¬Ik"›&^é×ì~j§4½E³Wƒ0¨ŽýÌöÖó²û©>?ízU»×Ò ô¶T(c}ºñ‘¦É®|<ãZ{n¶ööcâv9Yçúüyv?ŠñºwöÒÏ3úhý´Ñ½lz†ýI¡;ìÁSÜøSq7œó³“W%ýıã¸éÜ9}¾µÖ˜/š‚áj‹Çè}u†Y…×ý³/æÎº¨ÌE×óçPÄÞ<†Âwg¯„õ%¬/eú<±oþ ö’‚v;6Û³¹‰±úbw%±:_RºÞï}äjYQqF4æ´Âûר£ Æ/õóc%~ —§ùÑ÷V¬åêùS¬›{³Ã>ÖªåÙ©Uº\_µ¿jxmϹSK¶OjÈŸÛCØkšë;ß³?›q~Ûyܲ]rÛIÞ½í½œdç»á†Â¸Yio÷î¶o¯ØœRæÏ³ˆ$ÝÅ¿ëìs¼Óí÷iö}–±÷è3ëó#µñÍ߳햛ïøýÕÎæÕ/$‚̬ILxßž«;wž›×Cb€[až ^’ôsÄMæô4üU|ß"¦ Ê‘WIk‘‹»÷'†i…á½ÿG1Ý]l‡-}7lS×1%t€Q­ôÕ¾+Š\™0¶ N›/•Þ¦{¬u™K’éªr¸½±ŸÖ•¥ï§^±Óý¦u£éyq¹3…úÚ|÷foEK¬ýÚjoÑKÅ®'2«ÜÁ®3l¿•b¦ÎóKcJw¹å·%ÇÝI=¦eý<øJbó£ï"“ù1ÞmÖd¼w†)“Å=šÚï[‰ØÃÍçì P°]Ì:5!ÂŽíþ¶hŠi5°/ÊiöÜTðühÛ E¬ËþJºØq%OÖ[!]í®wB™ ŸÍºMél·È¦(Ú¶B”t?výf^Úg¡Lô© ÛîÖ3{±ßa{B…ýHZ™5y°²'mVÆœž"†9Ä0·Ä0O/Kú·ŽÄMæää£úÀŠÞ¿¬^cõ/;ï/î½™ëg @¯â‘.ðèâÕÕ†8¥´ÂæîqtáËjo-ÀîbãK]¢1Öm{ÕH-œ¯nO!–Õ^ˆµåj¾¬û²ö꺶Ÿê÷£:öSÍú¾Ÿö3Ù[C^‹Ëk b›&â(mk­äÝŠAì˜rÁL ¶–ñiO`ÓÏÍw_=Gf Xí”ì”d¾2„Ù>VWpoììrZg˜ñÉï2cS,c• ñBW4ñA˜³#n¹Ò¶™> Pšm¥¶½¸¥˜¥V ±e{ù¼/øÉâÞ°íî‹Y¸±ÄkD,Å{㶃’qµ%”i¶Ï²â¨}¹Nbl´™#–\„ÒÑm+Ä­’û”‰Ïž‚‹ÛùLÄC™ÏönÑ\(ã}\ÜkaÚó9¾kûÓd¿gÜûµ;\ÅçÏÏN>ì àáð̱€ƒà/™_Á3Ïœ|tý4ÿÕ|/V¨Ó¼÷¾úž^ÿâÛA,¼¶Eá¡`ÚØ»¢ñ´Ý}çödì%ášãQX_Âz[‹åÛ^Ý~Bqüxù¼hçÚTÀ‹Ñc±yyÉ Ó“âúD¤Ð3h톪þQðï×ûq?EáC7ÕþRHóæ—2mí¯„8§Xc>LœÒòÙ×å¯8¿Úö?Sb¾‚{£÷½Éç!ƾiÛ®¶ÍœÉ¶÷_¦œoÛv÷Ov~{9±ûus\˜îY#œ…¥Å>Òá¾3dÇ}Úºí2lÇg·Ùãc{Ówƒü¸}Fã3÷ã¿bŒsNÆ~B.Â÷ÂìsŽ]“Ͼºçqo?ãÌL¾¥¹;Yö++¾7LÝÑ ƒÿ–¸EÐàɀθsú¼^yå­QÁœ¶zi[úGiíhrqïM}]Ô\^¾þUÿZZ/Ž¢Ö1¥÷Ûè…àëXi×–Ÿ½cŠZñvÞ¦Yñå;ÊH­‘J[?º×Œýow«Y»¬”¼ÌUöz—»Ÿuþl¯]÷ûQ­ÆÞrÝí'äÎú²¹ïöJëÈbÿm±Û{¥ugéÿhDa§%k¬p!œ•ë¸R·ç¸ìnªÑtÙØP¶b-v£nþðµßõ¦ÖàËGîÈêõûú¨’è–J[¬òÀFu¥¸¥Ù·æ£miþ^xqËP7lÚ¶sì=5¦ìäĈ.ìœYÐ1b˜-“‹ aIãVèÑ…(šmŸ^\·äÔÄ©\ü6b vCÜ=!î%EeòÙSg?‡cð"šÙöÖ¸ó¹•s{OtŸs÷^OœôIïÌ3æ øo)€[ažÎÏN~FÒÝcÇqÓ9½3ŠÓF0W¼Ÿþ2ÿ}à ÌM‘÷(ˆöEç£@ÜhÇ"ñ¼ƒKŸáŠÖMöTŒn âçbxÉËø*ÚEÞ6–Ø‘Âwth¶¥àkMèU¹ó¹Ùèô [¸? Ð—Øæ*ù\Œ!¹I=÷.flž_F ýUì”h?øÞí$Sæù1A¾“ÌÞÞF~TŠªJÚéå:]aj³g=n©\HþžÜÌ¿ËWßðŽípn¼ír…í¼¥¶ûÑäç0å$¹âóÛŸ»ñd¤¢‹©ûÒ®Ù~éqFÓg—ââ¶¡'á4[f?ήBÌ“ÏÕ–Ê´¥>ƒmY»sþò3în™äè/î½)©=(M€6Þ»_jý}í—ï †9Ä0·:Ã<9¼$éW;ˆ›Ìò—ñG×’Qê=ºŒŒêãyÞŽÔ^¸>:À,?Ö±²ül]Q²0Òèbâ;°,ÚjÛ1¥¬ÛÉ:Àt{`z4k˜öF˜q=³g2nÖçeZÂjß{‹½_Jr×í_6WÕÙ[cÑk¿¶Ú[êÌC÷”Žïž2fØ~+e³ÛJ³vPw–èלC×j>¿eÇg¥u’ÙØW›_òX‹l7˜jÞEZŠ’æ1!vu@*ni¶ ‘˜bl;û&Î-!О¸%Æm—«lÛm^a;æ$ØžE+#äIx²þãÚÂyA‡ù~²>íàC"œiÜ<ãÓÑnÄÓs±%”‰>C>l¾¢ &äD“O¯‹qg/ý<¡½w$½ÿÞ¥¾xñÖ¸p>ô¡gõµ_û‘ü"X^>vðð@ ð䀿 î¼øÜòÆé`¬¦QW±†ÌüªW¿ð:ô¢èU<Ò…/«¤‡¶+Ni×MxV8b„4MbÅ$êⓊ2D6µ‹A†Ô¢mgbˈµ˜î¥¨ïÕ _j öjóWÆ9XaPûé¾ì~jØO]óÒòÓš(¬…ìÞéj »©åÒ‹=Z6£`fÙ«ÙÌzCç²/ti'iÇ»¯|XcíxAN2ßî¡D‘KˆÕŠTŒ°ÃJkªFgçøÝÁdÍ,L$»â–¶T€R¦9“m§ k2Û6ÏÍdT;ìÚžcJÅ-жɉ÷ßEFtaE$^èÒdÝöíµ{>ït?Ï"’$tk»Ø¹³È¥?Ó!Ý6µNœ3ù ¹0>¥l<¬·Gjî ß$”)³í–›o'Ä1gjo©×^ySõ2> ÙCež\ó<Þù†ç’¹xõüìä³Çˆaž^:v7ÓÓç&m³óþâašð%ŠC´ˆddÄ$]̱®\;yT#Þâu±ÇD{íúÇ*&ñöÔ ¿·Ä$½¼VU#¤‰¢¬ŒæØ‚o'rÙèã|….)-¯j¶£=#0ê{í‚#©/5±FÌÂ!ÝYæ5C$c#> “Ìz`#ÒÓ’ãd~?Àqm¹¸e[±ŽñëF7™©1Ìf˜€ ¥‹DlüMñÐ>E„ãÄùºn»˜ujB„ÛýmÑÓj`K”3–”°´ø±,n•]Û6.'±.û+éBÆ #7œ8$I×xƒ­Äg³nS:Û-²)ж­ek?IŠC^Úg¡Lôén1cÛ'yÒ¾PFa?‘¥+Yûn±Ï[{x2UÙø.:}1ÌÐà–àÉBÎ+8=}~}7£ |}o2Õ‰%Š.î¾ùPâ…àK±rïz2‰9ÖÔÊÆ(eý<Öj {íúâÜÊM†=™XÖ±Þ½FýzÖ­¦w”©CD±ÌûÙ±7:ʘý„î9V4´\÷û±â–& rù±¾ä}ÙÜÇî7þß•¬ÛJéÿhDa²ïÛµØS 1gé§'¢œ& êÑYoÕÔÇÛ{¼ ÙïÅêÔO&>Ö%Ä(°ñáN±LZÃxC™D*Òž¸¥û·­7b`Öv Ö Pœm;m[%Ä–íf#Y—ÅÖM¶ÝYÎ]a–­¡LñÞÆxĨÛ*Æö$è0>·„2#dmfKƒ6l‡ttÛ q\yŸ2ñ¹±Ÿs——’ù,a?áÍ…2Þ‡Åýî±ÉÖûÀþ»v@P pËxæØÀaœŸü¸¤×ŽÇMf)N ö§"ü8aùxqïõ‡˨ˎ lÁzR  À§õ™½ÒíÉØ…æsñ¶-lÏ®ÉýÔîÜ©(>»XòâøñÙ ÛÏ-–5Si!¿-œ·ëå>Û¢uS•^š€ÁÑ‹b ;ÉÆÃ…Ÿ_F ýUÜ”`?øžc5cÉü˜ âÜÛ[­á¥õÇwæ´V@%Ä<9Oc9ç×nÙ¶k£m{Ð#Ms£(Ç®m»3Ïrö›ÛŽs\˜þy•nì3/ól¸õá>œ¿3Œ­þ æB÷¬—r|ÜøæwA²ÿ]cœs2öra¿RŸsìš|öÌŸŸŸÉwà•{­+Y ?-¦ï“³U+…Ü2Ãí™Ä¸·´¸•ì1ä.øß·˜|¤¶ã¹d{sá†9î¦Ü²íçÌ¢‹ƒ{lZúò a‰ù®™¾O”Û¶ÏÚ®‡Ûí³J2®ÄnˆÛ}Åç:ñÙSg?Ï·²ßÎɮϘó$Oã4çd\Ü{=ù½Uí‡ð¾ºßawî †9:ÃÜ2Ãa=²N2e{_Âåi¾›E.&ÖiöƺªÌUâ˜eíeUCˆµïφd69Kö¨xvÎv’7cw:=Û1ÇѶœ\O9™Îo¾·íó°¬ÈE“`l×l¿ô8³çÛ=ƒ!Åv[ÓóÙ",6žD„c}†ç\Æß¶ÏÕ–Ê´¥>Ýñ„¿ð’}¯¹¸‡wú5"éÕö{lj77Þ'Ü¡3ÌU¼)é3Ç.ˆaž,è s§wž×ø‹úæBÝ3\Ü{ã!G´-æX®&Õîz(äîöLý|/ÀbÙBì²aÏ®‡â÷°~q±U̾Îâ%Ø+¹½¾7? í«[{IìWuê±gÖ_öm¬jw…íf¢L¡½™_ì”âç3m® Tc,ÎwBb>Îcsœæì¶b5swÅ.W¾šœf+Wæ&šö%¿/7%Æ+ûföµ÷™Eb{º‚í«ÎÚÚŽ9 ¶{øÁ¬;öb]ALü^Èž°Ù§ÞuñûÍútã‰]c;Ç~W5[Æö´{ñÖ)ÆV’M>MÌùnûãó÷°õ9Ý_†‹»o¨=u«Lš»Ãœ"†¹ŠOœŸ\;x¸<{ìàZÐæ ú_ȯ’J•TT«­…_Æn|ÎwÏìxx9ŸöÞ˜™ïìw4sß/UºsúܶqÜJÂÎ0kaô*èâ #&YB\&uáË*é‘oˆSöìUc¯¥ ‹m̵¥ð}ˆz¡z¾¬Bšjd­`Þ‹Iš=™XV)N·'Ë,|©FHÓö½Ø3y1 EScüW¿ŸRGÀÍ—µ†Ak±{5Ê©±›D¸Ríx¸·®®ÌóMæŒ/#\IE+vo1V3: -gém9AŽé8a÷—4Rº>M‘aór¥ÝóºRÌqì8n2§­3ÌÞ_ÖO ŠÛû‡Ý¦á:,ØBö’V«ø9n}ø,u €íTÐ×Ka~¾¾„õ£ˆ?šOëK¸¾¬ˆöF!yRü^BÀë²z·eŠGΧÏÍœGv™mÇ}ÅÜ›ýÏy 921¥â]#î˜ÿhÛ̱χ{&ãýn¼ñ(ˆ1Ï…±Ý¿wúóž«á§é†{ †¸…ð'ãž<^–ôÍÇâ¦â ƒMWÓð£]¬uérqïõGW/”®E2RªéŠRÖŽ­ë‰Tz˜ÞcÄ\_šÍ´kÍ®)$W‘JëÝâ;¦,×—ÀÆŒí0ÝÇÔ­f™WM¬½£ÌÚ­fÌ{•é“u¿iöÜ~jØO ûY»ïs¾.?Ýž÷ß>ÇýŒû0EËý¸ÉÕd†­æ­×§dÖÜyw-ª1¾ÝIÆún⻯©‰°ÆX—gh£Î.Õ¾ñj”¶¯€0>H$®S Ä9%³]Ûm­¶m»µ³íçØ¸¯üȾ1sFèQ±F8 7J‹}¤cìxœ½¬mû¹Ùj³7„2.¾ÒCžb¶ã}†Í­ý¸ñcô9±{·B™èS©Ï9öž3s†#ÂÜv,ïm IDAT.”1ùÞáâÞ»ÍågM®/ä鋈a®à+’>}ì àáƒàɃ¿p¾ÃÒ¦)Fš(Bæ}Mª“»ã‘u†Y(«ˆá:ba-ªF¼±'&‘fqʰ· ^&{ê…Üc~´§>¿ÛeU’dBšîß O4Ž!Úëû1¾4‰†š½u?©ð¥ Ž‚½ºžÁšû~eØŽ?Q-cãÚ$éº ÈŽ;ኊ/pïã`? WÒùV¨‘ rìü:ÇÙÎ>‹UZº»oeöudZGûŒ8ÂÇÅ-aŽ3" '½p¶}|»â5»¶#³mçô›ÍM±j‹-Û~Î,ô1Ì‚–(NÉ;šØN'Vè1„(³íá³ôg¨Ý™N¢¹ÓŒ%صÇisâ–rŸ=uÖîÆíÓE+9™|Ú}Æœ'y§9çà*.î.L'°ëïë<¤ê³Ó;ˆa®àSçg'ï;xø †xò@ ³Ã7ÜyÎÿ‹×ÁØFMrqïщaœ8$O¼˜C¦Ì:º˜Øð›Àà _öìUgO½¶ºÏ_»× qˆiê¡U£!Né"‰¶Ÿ:ºÌx{2þŒ0¨qÌä?íØ½Ž2Ré{my_íµÜ›knMHSZGû¯¶»­”þFclK¸2D2c~qÓ76MÄÓ£ö‹[Öoö)NõÛåÞV_´®³aBDaoùhuaŒ‘MqK)$ëÚu§~ˆ¶‡Ša\²Šc;©ۺ¶œ.ªˆ¶‡Øb3îuN1s]ç%¢ »® “c\ÓxÚEEáóê3†j·em›S»Z„c}ªø?+”ñ>W[6+%øp>ÝÑזּF!^ccÚbÜÇû-Lø“ðŒNN>ªW_{K£¼©'ŒŠ¢ÑU%Uµ½ûå÷ôÆ—ÞÑ _÷5$¾RÔ;ÀØ.&N—3 _bW”V¼í;ÀìÙÛ“¸Ž-£cÊèÐbD6«È%ëÓýot€iq\G™µmËÜ-§ÅÚì©o¨˜óZì­³kØO û©a?“hgu±»W£8Z=ú³\waþ‰íÁŽÑ(\¹nw–QÖ¸ læƒÈ¦Îó—³ô¶¦N2k¨5¸Êå/Û´õ PŒHaL)]¤1Òcò”Ú¶öÛtg`,Þ²]‚m·4(,Šýضñ4©EØ[n^x²þã'M¨aÆ>ÇmdB+|q˜àSÊÆ»ÆvÏêü*¡Ìð9çdø4¶BN”ú4ëÍ-’Ù–‰£}÷M¶í½sK72Û±iÅvJðç¾ÐÜ»o <4t§?}‘¸¦kWØ1±jŠ5)Ÿö|™õÍž’õsáº_ïD¡¨}ßžßÏ2Þ.¸‹éÈ8Ÿ1àøñàW}ùüc2çŸÚ~KˆÓÅoÈ4/—;¯8w4ª1ûŠ9Hó•å¶]ÚÉÔßClgy‹¶ÃœÍsös¶lA(¶Ó¿#îípG¡‡M¹ ×? Ÿ Ϧ6lX¼m¹˜ÍšÄö–8gÞO¸E£ùµ²¶Ççý»[/îeÝ©û~>÷s ^m¿o2q¦ý…UÍó;íb˜=Þ“ô©c†g܈avÅÁUªE*URYj‡ûû æÕÇ^½÷æcˆ²¨”ªª¢²ÆYÊ(|^Â,j3TkwÙFQ-ë5U•uŸëî¤Ú ¶—‘²îíp{)ëó£=uµ¬ûhûé¾Öý¬ÕçÝ¿ñ5®«ç£Ùëûé…ý6W#w‹½Õ‡‰µÅÞíÕ`¯Ö~=ïk@Ív*óÜպóŽS\Ù{lÉyuc’õГÚOÆ$§åZÁ~œp¬¶C’‰©å¢ÏXÖÔ´cÅüIys‹Z“É;â–„¹ cú•âgÛ®¶bÓö*84î°n²íÎ77&¡‡œpCÖÍ– ¦GA‡ü¸óaSãBND ¾ŠúÌ–;>fŸþL@SdraãìãÆn<Öÿœ‰sœÏ(¬ Gí}ÎB™ì™È¸¼¬zõ æ÷Mpê<»ÂTéÙgŸÑ×}ýGsötò#çg'_>vðh@ ðdòò±¸Éœ¾øÂò¦+)ü{§ƒID1w_ä1Ž‚ñ&xP/Î^DëÏf+þNÅ$FÌÑFœ¢ìÕa¯!M»¶Ä·Î¯«.Y=¶ø˜d¢ÈÚ ûéö4b‘Mâ”è?íØ½7_MûT]±½É™¼ ÇíC~îß(±êEÆš®35*EÊ*’±×ŒThR–ßN¸âc±Ú5Õ|ó gcZ˜Íñi^w= ¡8È»è$Ýyìœâm—bì:Ûm­¶mÛ˜6moÄ}¥àGö™ãESg%íthéûòn2щý…1Ê|–_ñ¶g¡LbÛÄ›íÇǘCNìÞ­P&útë»Ï9öÙ§Êløt¢—pK*„‘¤/^¼¥÷ß¿ÜQI^ã»Âœ|Ãs×ò÷‚pàƒàÉä“’Þ—ôcr9=}^¦g‰F t³B˜þ¾ê•»o<–8KѪeXÞô.&ëµÖ±ÅŠIjW6Å)]ø²Ú+f×W‰Il·š.1Y4"›ºÆ5w€Ù²gÒ-ßfÄn|™0¶ûMwaºß4!¾T“W×Q¦]ûI;ʨ¯½gbw:±‹M†ëý2 WRŠ97{Í Wš>ÉÆêc*juö¾“ÌäŒkæäÖÎ0÷[y_[k˜àÓ* ZÜý†4 {où9[â–¡†HÖ©Ù-]@á×ÛÅÇíû¶·Ö•0g]˜-„íØ..ýÙwãe·B!Dñ>¼Ïuf¡ŒáÌB™Ä¶Í€ÛÏØ{&”i>F,yÌñö颕$'WúŒ9—· hÚ“wÀEö»ÆcœF&yúâó‚]ÃÜbž9vp}ÎÏNÞ‘ô#ÇŽã¦rúâóIq5ïanZ üˆ˜:¸bø¹Û-:Ÿ ½=[Ø~ýõã³_‹õ]Ì›ëM‘ü^<é5S||õtKì–‘ÇÚr¯$ö-{Éé™W+˜÷ .Å.õó½ØcøžÑ·«ø7]²wçg±níKZŠò—W¯«þgçZ-ŒÍÍ^]PٞóŸ)ïÙ¾cެí,ïֶœÛ»‚3§˜¹î™ÓxÆwYgî³1®i<í¢²á3†:?C!]ñyÛ°m}ÆÛեϮéã«-›•|8ŸîèÍ÷¡Üw@÷´Ÿî3Ä’äå:,]ÈÚï&ó‹Èv…q?ýØ"ü„è¢p‹¡3 À“ËK’þÙcq¹Ó „—n ½Šyi"Évézw˜‹{¯?¶X{±w«‡.kÇÓ¥u€Å‰ÜV{GÓÅ6Á)f¯yWkoíüº²TÓ•e²gºÕ´Ž-Kq¹ñ%³Ÿ:ºÌØ0딃;ÀŒ\ _£ûMë`³Äšw€Ù²7r—w‡éÛ?îpKµÝaŠ©}O:ɘ›ÂœJŸ_$Õ:ϾƵÞI&ë>cfµó¨a¼Uaf²-jÜCTY´%LYæÌ¢¢õSPX‚BÎÀX¼e»ÛniPX8SbÛÆÓ·(Ü0&¼ðdýÇ N4 Ñ>Çml eì¾»Ä|n÷Ã$Î)‰]k;Ƴ~–‰OÅÛ¯ñÅœ ŸÆVȉõ1Af½¹E2Û2qô$>§ûë.ë\”Uw½VéôÅ®íó)¢Júıƒ€Gaž\ø‹ç¼ðÂGôá?ëÅ[Ýaê<öÅ‹·ôþ{—<ÎÁS”’Ûbö¹àÛÛ»¢ýJ{¾0}+ž©¾$Eã¡°<-ØvÆOÍëcazÈ’XGa¿ÝÛ\ˆ?®û.抭øï{tÂ9›Òû¾7{ÐÅMñóû¢õåænÍ?4Ö’Ìꌼã˯u݈ÝúÜÞã¼shëÒš{ê¾l+ØNϲÙ×´nÊ{°='é¸Y9=Öݺ¿ÞÑ$Æ_iÏÄ¢.“ÿLô£t¯š®ç9Ë®ÍEùã¬Ö ˜—=Øá°‹?b}r3Xm~›Œ—»G|åþV¬%ÆdòåER½4¯z—Y3ÅnÃÏrs·û”“ClÛá-ÛÉ3ž‰[\Ü1¦þ1^ù£ÐxFæû0 jü~Q(~Ïä¶G,Þ–\ÌfB¼k|Åä~{?þNϦ‚mYÛŠãóþÝ­gö3Î!e‚Ïž£îóþ¸¸k~ÏtíKÇ‚ ³M9=¥3Ìü7À-1 À“Ë'äe`8}q)žÿº¾í302¥P¤üÅß¡‹I/Ê…×{â”Q8ž£K£è»_Å®MŠØcáy:–‰J¶ìÙÂô¹ð|*ºŸb-áú\¨îŠÿcq»BòûÐNîšÅV¬Úovz ~;a3ÁÎuIÏç‡s³ó‹›Ö¸›+‹uc¾fAN•F‡—´;L¿lt…Y,$qÿn>&›–+Å-Y>RÛñ&Êl“…µIÜ!—“m3ljÇÒ{Oî–‘ucžqÿüy!™»çƒOÎôÌ®sm<[>Õm›˜“´Ût ŸÆV³”»ïwzÓ÷Œµížá$ßͶ÷·‘÷™|_Åc?‹»olt…ћĜcÒé‹Ïߟ㧺çÜrÃ<¡œŸ¼.é;Ž›ÊT$|Íî0[ #…‚ó©0ýzbŽâìÙ¢î«Å$i× Íñx{¶Ø=âø"ù\Üâ_¹ GÉí\ÛëžcÅ{¹‹±†“ó¯^øï¨Ù‹ó‹ûXÜ^¼`¤p¾w;ÉLUúñ¦‘Ÿk• ao‹ fëE1É+Í™‰aÚß–p¦!¿áÜY¤y³.¯²mæÄÜ9Ó‰ð(ž›½»«Ð…Dã^œ„'æ~²[pãÆ¶ÍCÞ\Æg ño{l­ŸñYùgk<{!fwäfïÍg´]ì¸Â~æØgŸF(“ä{Þ¿%§[ëôß3SWûÀÄ®0ãIºsŠf:ÃÜrž=vð@¼$éç;ˆ›ÈÓç—ÂâR´¯?kÒURY¯µ¹ëÇWî¾þØcî…Új¡–U‚PTÖ8K«îÛXöUÖ}ö­•¾ãµP¼®¥Þ֞ƘñU£½ž¶õZmöš3™ù#—e-â®j©-*Õï§ÖÚµe Üù¯-¾‘—¶Ÿf¯Ù—dæ7ÿÑžÍÏkŒÝÞ"m¯=÷Õæ¶@5Bâ‹ØÃá.ëBC§j«éÛµ0fî¯Õ|~;m{­¨˜},Ŭ_ ðUuYÛ=t}–õChàÔvs]a`E~Ζ¸e¨!’ujvKPøuÁ¶³û¶§u=n?gz˜-„íL‚°DXâ…2Ñö,Hë©êŸÛ¹ÏBk{Ê$¶mLÞ²®Krñ…ø7bŽ·O­$9¹Êç”sgwÜ+=&î¸&_~ç«zëõwÖO×ï óÜóÖG>òÁûöÿ€à–Cg€'Š=7851¿ÆZÿPdœu‡9Fg˜…PÐÝ®Üw\i×åæ—¼@ÜÌO»-(ƒÛk¦PÜù/>[  ê§® áZ™®y;³½°×ôs+Ú>\ìvoùú©XßžYR©¿ÝEr{μ³â¦øùá üÜl~ô»kIæ«,Mïs½×ÒV怽ïÆö“í¿­ ÷à|Áv–+k[aÎŽí]Á™SÌÜéy¢‹Ò×Ùgbc¼»ö¶µã3†:?ë!]ñYÛ°m}¦1Ú½”v?DAL™|*õéŽÞï%±í¾²ï—Ûá#æå~yõÞ!]aÚõ*?ÙÿŽƒ‰Ÿ8?;yõØAÀ£…Î0O6ˆa68=}ayc»Ã˜.ëE?fºÃ\¡3ŒÔŠ«—xÛÛV¬m;À,=:êèpÒ:›lt€‘Ú6GßE®LïʲÑFZ»¼{µÖëÊâ;À{­ÁMÛO]×´ýÖuG¦ŒÝOmÍRÊðe÷Þ}ÆîÕ6êw‚‰µu€±¹¯ëú–yõÏ=Ø–esš¶3̸6¢0ók˜ß÷¦ácìf­›O:ºô·£'Lì$3Ö‡ñ²ÑIfõt9š] WÆŸ‰pÜ…Á$n1—7Å-™âPÛ%ØvK}Ì^y”ضñ´3/~NnF1Ö9ÁI"DYÖ'B±`{ølâŽ(º™;ŸXŸ.þh×ÚŽñ¬Ÿ'Ÿn?þXÝqL>­f#úpŸí÷Áx3ÛcÜä ñyý'Á3~Çd]a”~'ØëˆavyùØÀ£1 À“ ŸÜyñyYE„G85D²×UØf‰c{uG­F¢¦uHÄ$FÌ!õbîê„/«½µx}±g|mˆIfáK‡hʬ¾!/r/=ÿMNÒ®‘ÏðUºòeýa„+V´ÓOÔˆvš¦íUf¯Ýÿdo ¨KŽvr×bV_m‹×˜Å¶»Í¸Ù¾IQ˜¯¶¹©Ý…+ZsäÖØ$oÄj;¿ã¹ñ²œëRÝ~ì ‘(!6Å-ó:iÌñâ–kÚV°Š[š}Mëìô2 sq…]Œuvå$: ÂÕ®ÆXŸ»B™–I(#kc˧ùîHìÊØ×|.lW¥>ýÑv[ y5ñm &ÑŽ9c›«élܹ_ŸWî¾±Ó¦öóØòó΋ˆav@( ðð̱€ûçüìäI?yì8n"wNŸŸŠø}í«3Lc*Üv…Ù¡ˆ[%)Üᦰ¿ÕöÏë‹[_ÂzoÏÇ£i½Rÿv}+„Ÿ õã~Jðo‹ÑÛ³ìÚTlŸðïç.ÆNμÌÃBz?¿Øëüiln [ÅÝ-Ρ5Ì/ek\Öñª×xÙ5û"o»”åÆÄ'?çjÛJÖ•`;™säl·sÚˆ© ]UâvÚ³ û=Ž÷Ùf½MM|.F&ÃøŽ8GÁnF4¯Qˆw}>ŠÉýö~ü“0=ûÁ¶ŠÝ{û—÷ß=ýpßѧL¾Ã]uß,¿cî¯+ŒjÕé‹/<¤Hn%ˆažè ðä󒤟sì nüàôµ_÷Q}é‹o÷ªçÑídé²×æËo¿«·Þø²ž{á#=vÉj/ášN)kܽ+K¯Á/’l“×F˾‹)£ãG/\—ñaíµÔ)ïc»²´.*ÝÞª;*E½c‹ÛO­&¾5pëýÜ÷kºçÌödæ0ÞžÍÏëû¸CæŽ2#÷£;Œí·Ræn+¥ÿ³® }V²Ž.NTᬇî0MØ5Ïo§m¯•µ÷â1"šjªñï·;LP£僛h®·{*ʶ„3vm´m”VáÄB%±-mÆbJÅE#âID²¤%t…1ÞŠ‰±È¯uÂ’(èP)Á‡Mñ&[>lOâ’âÇý^Œ­f)·B;LBkÛæDI¾›m?>ïeøœ…2ӱߟ_»mu…ÉÆÌ3xzJg˜Ã<Ðàɇ¢Ï N_4ÅÂ÷ÑæÕ{o<ò÷ …Ûý³-`Ï‹¿åæÇõ¦ƒK·7¦OÅîòÅà±(}©‘ßéŠÉ·º³¸‚ó䚦kAHÆZ|,òqøØí¾K°g¯›"~{f³Â`ŒM‚ÉM4~­3¿ÔÏ1ænÍ~·b ÿ±ã‹xMkd|L1Jœnþ÷×\Übæd{ÎË’sŸÃ)×ɽåžÉ=Ÿ“ðÄÞ߯ú|ßûÏñþU泄øŠ·=¶ÖîÏDtSÂxØócvGnöÞ|FÛÅŽ+ìgŽ}ÚKé;Ùôé÷ãoÉéÖºOl÷±´+Œ‹]a$Ñf›ÏŸŸü̱ƒ€Gb€'Ÿ—ÀM¥ÿå|ÛÑÂvê˜þ ¿/:~åîqÅ0Qè1 È“âóX\‹Çƒ´<ì;_AL‹Ü·‹Þó‚ù-q‰·g‹Ï· ð7ÖÇbö—üZ>Ççnä,žÅH\?AóšvÝKViŸÏŸE6ëØ–ÈeK$bì´ÜÆù%ÄTU&aËå¯I cãu>¬ÈÀÏéqg{t9¹pyn—vr2Ù¶&·mÏyo¶ýœYta¶¶3ݧ‰°Ä>© C™]ës]Ód.¶ÇøØnsÏ@ôâ–‹/Ä?­w§ó™çdÏç8cËÙ ù9p÷Àrq÷õûî #±'Xøo"€§„g<0t†ÙàÎi(®u­z®R5ÜURicUR‘ju¹ÿXôâó5¶¥D»ªÖ¢RªÖh¥Úо—‘²îµôBjõbîªÚçv{k:ÖÕÎ×R¿ØécÝvQ­‹½ªjb1¾zìk(Õìk͵µ]_"{íûZ®¾Â~ªßêØO]×wMFË«ÝÏdoy-¾¯µúü{m—kö${6}Q{1?ª›=t[Éü~¨Í—ï¾ZðvLÀj§d§$ó%ÕPŒ£q&Ò±:\o P¬ú¡½iS†ŠÁ_*nùlÛÚoë‚mcÿJQŽà !ÇwqsŠ™kEa‹ù(öš¶<îù8Þ½yÛÊ|6_!T+–qÂ’¾‹DÌ–ìgöb´{ÉD+ƶõéâ7¶í‘^%Â)ÆÆÖ~bnç¼è¡P«ôêÞìïÇ…õŸ+ºÂ|à™¢¯?yîásû࿉žè ð„s~vòÓ’î;Ž›Èé‹/ŒJâûèsñùãv†Ì…ò£P;tGh¥Þ¶ÛÉËÞÛâú¹È}.Ê/¹½âãñÅþ¡ÀÞÚ6ë{q{V¤îŠÙ7 Ü]!|(Î?pýÔ…Gy!þ\$ïsßÎ̽ìC¥ý(°·kF^l§±LÔ¡¶owø±ä 7Y¿Ì]^öºÃdsklù8ݾzÆå\…àó \m{:‹,{y6¶m<ÓÙûņk›žwÏ*{šä¾ ¶‡Os[ụÝÅs,‰]k;Æ£ðì4[n?Æ®ñ9?ƒÁV³}¸Ï³mmØã&=˜a{º¿€/½ú–Þ{÷½õÓõ»ÂœÜyNÏ<óðâ¹e †xJ 3 Àíà%I¿üØAÜ4N_|a¼Fw˜‹»_z|Áî0ŠÔëöèÊÒ:¦ôÞ }KëXi×–ŸvË®ÃIèÓ,ÈøòedR˜w€±ÝjZW–no­õ.EãšÙïÀ"ÓÐdµWW;m?I»ŸZÃ~ªÏO»Þö£rW/Éw«é›±'qHw–þO;ði‡3ÎÊu‡©ÛóG\ãZYsà×™òÎ0×¢wõ Š„î³«+†JÁÅ_†hÃ*œå>m+ضëÜ’â—yUHOøÜ&NŒè¢˜uvå$: Ân{œ :®Ê„´LBY[>Gº3»26Ƶ ãS©O´Nè³#”™öS¼í6_Ñþ”'+|zpZ×±ûé £Zuzšünƒb€§:ÃÜ^>v7‘;§Ï/oíŠ/îÞ”Î0 ®0½|›Btù"ïVïu¡D·g ÀGÑ{,ÒöBa¹‰e»L³§©x«;‹+ðO®iº–¬Ÿbõ…ùJbu¾¤t½ßûÈÕ8°¢¹;‹Æ˜WUÈMê¹w‰5cóü>næ;%Ú¾÷;ÉßåE¾ÜšÄo÷cT²Ÿ˜§ÓÔ¶’u1WÉ3>Ûn¹Íãf’çÏÏ‹üý“?3¹pÆÚßáFégkÇwÄ9 v›c[!¾éÙ0¹Ÿ¿Š‹ÙæÄƯ`»}çäãqÿ!çÆö8©ù{ÃÚ–Éw¸« ãwËõ»ÂHæwD^;?;Ðhî IDATù챃€Çanü%ô„ÓŸï;Sw;iŒ]|þõÇï­XÝv€Y~¬cë~–>&y­×–bxÓQfmÑÒVû®(r`d:Àô¬™0Ré`z4µúâüýbϜк¾íuØ[}Äý˜î7­Mž;ST?¬õX½½5-±ök«½¥–ݱۛЌëÉö†)¶­Ì4D|ÅüèלC×j>¿ùªÕ<'×n³®ªˆð\zC*nіŪ¢m«²omÞ»<"ÆØ)%¬ÛˆÛé¾è"nc‘E+®е­ì²µ=2çãÙò©`{—?Þ2Å,Ýg >œÏ`ÛÅó— ÷D;îv°1wŸ¹Àîarq÷õƒ™Ó‡õç鋈a6@ ðàv€&ák¿î£úàŸÑWß»˜.„qoWUƒǼú…7õþû—úÀnFsÝ^¬ÝÅ#«ð¥‹Ct€8¥]_l51‡Œ˜£ iš|ÆŠIÔÅ!ceˆljƒ ©E+¦ÏÄ$6–&Äö̱) _Ö}Y{uÝGÛOõûY´&w5짆ýLöÖ×ÂþZƒØf-T¹måùV¸bÇ4 f–½¶“yuóûB—v’v¼ûê9òk¬/ȱóËêÚ s´OÌLb› @±ê™ÏFÀ`.Œ}¶mÛuýã!¶Ël»$qÇd!ÊØVÄ4qˆnHV¸áBq!o :œ0fËg ño{lÍÇmouQ)ÑgŒÙ¦.ŠVd>Ÿ³heÎKº+”Ùðé÷ãoLJ-„‘1L¿xAÌvWUéôÅ~P·þ[à)âfTrÀq~vò%}éØqÜ4J‘îœ>Ÿw±èEÆù_åW•.//õÅWÞ|äq^­Âô¤½îI!¸/ëK_¯n/)^—‚¿PÜﮯWMáüTØŠÔc¡üTðnò¢k“ØÀ%…ñ½À>ìÕÆÑc7±š3s¥ûÖnT l¬)öã:‹bnª‰7ü!äÝW’7¦Ôº¾´¾ê/…¹’‰ßŠ |=/1&ŘBü&—%ÎÉr>ÙÖA¶§u=e~Î,ºð©uÛ1÷Ý2m–¤Ï„}Ž•Ùµ>×xÚݹa{ŒÛ{¶mÓù8p?Jc´·hx–ƒ E‰Ïéè&Ÿfï-Nc;>œWz×±(~Yìt…‘êò{ 2Ãø’B»ñU´×EÅÆ²Ñ=îb„Ñ%Ãñû¼ {67¹¸¡‹ Ì^Ûæî,cQ¨áÔ&¾Pµ?\øùeÚ_ÅM öƒï)V•«;ÁÐ)fŠ¥Ç>Î9W"ô›Íß|^¥²aÛäÊîËÚŽ7þ”cûŠ|ûçpX™ž ³_?~uç›—®î³í9…¹g%ÅÛö)JâQ»—ƒO³g×øœ®cKÆFôá>϶çñð¾/â9äÏÆÃáâóo(ëF&]Õfy‹&å-IÿØAÀããÙc Ä0 §/¾ Z¥Rª¤¢õÃø)óv² J*uù þ7²\¤÷RÂ]Uj‘JUUQQµ[]æ¬e]Xköª¤RÔVË^[}ÕÄ—V_ª#6©¨¬¾z4µº¢uÕ2ÎÆÙS÷7Û3ÇdÖ—58oOýp@í±÷K2û±¾ä}-EókΜ½5–õ\úµÕÞ¢¯Š]QdV™@úŒjêä‹ï"ÑMŒ’};;ýg]5ÆTýüªªËËü¾Ñ…Sn ÅE lŠxì’òm·{(ÌÙÎL¶5­Û³mÅTNbD!NÐ1¶êÍáF·mòâÆ/vœLi B™I¸6ù4ÏMŒ¹ûŒâ» ãÓÎ>ç¸û‘FAŒ¼ànk?ã–gìròý ÷úï~å=½þÚÛë'/À¬‰ø¥³Ž}ÍG?¨>÷¡GÜ“Í'ÎÏN.<>ÃÜ^>v7‘o8}þ=©>+#q4±†}È<.>SÅ0ëÏIøÅ!R&N±â–f«‰9dÄu-o­˜D]btDVdÓÅ CjÑD™˜ÄÇ2b-½P|¹^ûÞŒ8¥{]c²î£®ùi":öÓ}ÙýÔ°ŸºæÅІ4„AÞé…ëv?RËe+t7cSñ{Y÷j63NÕw02¶F"›/?^ÜÒyó‚õ¼<¥u‘ñ7Ä ^1"éº`ÁJ/¬m%ëìÚ Úwl—ݸ­m/º˜EMŠ…2iw•>Û¬·©1 5ñÇŒt$O\,Á®‹9Äldâ+.q[BN\üÁvÛO>÷orò4Njε­$ߊWïnw…YÞ×ü§–“çÞ•„fA0ÀSÆ3Ç?*éí+g=]|üoýß?öŸH¡ˆ÷¯ïû÷?ôWTŸü¡t>[ÚÕ¹hÝ_Ÿ ï§bþi½)vïöL!¹ûlŠêXï êå écÚ Ã×Û¼hçÚÞúø³ÛS¸¦`GÁNVtÕ…yë’µ^ËÖhûÛùÅN)~þ0ÓæÚ@5Æâ|\UÑe]º ÝÏë²V]NÝqŠq‘ûÏ(îï{)vN)šr|{ے󖽸͜«DóóeÜL÷}¸Ç²çÝØqâ`ÛÜ=ó=øÔ†í)5áví{vñ ÛîûÁœ›³íbùó9±ûq>K/šö2|ægö(xóõ/ëû¿ý´ÑÆ’ü®úü?úâ÷IúÍ’n¦Róx xÊ@ pK8?;¹”ôwŽÇ áG$ýçg'¿ò?ü?èºhdB˜‹‘G‘ò›_zG¿÷7}¾ûÿu½ÿþåc þP¼àÂgB©ÀÞÅÏëµaÇ™ÇÂ}uÝB®ø¢ô-1Ié{ós!Lfo÷[!À¶hÈ®…úV¸°ŸŸ<÷1/êcê(ðèCeµ_ü”’Ì·vÂübƒËæ;aÇ”8¿¬.ÏÈý¼T5º¥ûñûö¾7âÜÛ¿Ûcû8ö¶m;ÉWv‰m?Ù±õž6B ÙqwxËþÙõ)ËîéÔg¸WC*Ì-ãÉ…gý‹Ï¥yv]Ì6uñ93B™¸Ÿ-¡LŒÞÊløôûñ·ãtk=$>ówÿ‘¾ý×~‡^úKºÂìý~jCË›ËËËÏžŸü^Iß$é•t³~1:ÃIn~ëòryÍ×裾'§PHöí/•þÃÅ—ígÚ·bl+Ì™ön—ù…ésŠ™»%ꂎ°e·ñ¦{¿ÙŠ>—YS¨Ùý¯2æFÛ™€&÷ibžöã÷¾çS.>ß§{IlïŽwŸ>·%Ä>¢À_zG¿ï¿þ^}×þkzÿ½ÖÀeþݲ ×Ù@è ³®ùI;åüìä¥ó³“IÒ·JþÚSħÎÏN¾zì àñ‚àvñ4v†ù>I¿ðüìä¿8?;¹HgT}n·;LŸ»ÃÄbeéÍ׿¬ß÷ßüYýé?ôý¦¸ù¸ŒÂn_À>¸‡"q÷9/f÷…ð¾˜>ÿ™Ïñâ=;Y,[¢±×2í5³ç ú],Šb…íõ[Ýs¢bÎýˆyñ3Wã§‚™>×Î×Ûº˜}Æ ¥Å½Jˆ©)l·ør]b\|ãÞÍ•m“&–(pé9³Ãc·òs?‰g¢m?ÇæÈ=3ÆŠ»Çî?;ï½~'b¬˜®î³í9¿û^¶„2Á¶º$ϺÚý—Œ‡gÇe¯h¾VŒ-чû<ÛžÇã÷–ÿ^Œçn’æG?ñSúö_÷úÄþÃudî:&]Ý&ió¹ÌßùÙÉwIú§%}LÒ;ûÈÓ*xªA p»ø{’Þ=v‰(éß>?;ùeçg'ŸºbîR<ìêŒè3.qÌ_úîÖïü ß©W~æõûßÁCe[̱\5Eë½ÐÜŽ»¢s[HÖ˪Ïz޲aÏê‚8 ¬_\lÞ¯óm~(Ö—õìõý$Åñ[dd÷íe±[1@’{{fýeßFÕ@8gSþß÷dç;¥øùÃL›ë}oΗzw—Z¥Ë_N SëAqùK;{9q9Œ¶Cn\.£í$ß&OѶ½ÿ¬8ÄÞ!<çÓÞsV¸Ñm›¼¸q{Ïo×½bÚ6ž›mŸÞnHÇzÍï}Oœ£Ôç÷xVÍß–ðlj÷ÖùS^’|OÚ}R/«þüwü~÷õÝzõÞ›ë`¿ê–5ùý#3uZ³üLÅ0’t~vòÎùÙÉo×"Šù®ÚÈ“ÅÓ(xêA p‹8?;yWÒß=v˜7%ý·’~ÁùÙÉŸ=lIýÜV§—yj(Rž ‘Ç´ðéŸÑ·ÿ‡Bÿï_û̵7ñ°ÙsLEó¦¨?›£²·>³7ŠÕ¯)øJ…'³ðÅÊ»"ö¸¾„ë¡HþàõWÇÓŠë÷ó“_‹yQÓ0:É%ÚDzü‚=ÈI¸ÒæúùÅæ÷—9»™ª!hi/]ñªá¥*»a¾½Yl<&¬’ìӜ˴—»dN);¶“|÷µþ\¼èb¾d„Ó3Çûl¼þ92kÆlÿü*ˆD츻î¨C<ñYœ„2þ;Ç=öDœÏ9m?Š>íؼŸÖö8á9Övÿn°÷âCàK¯¾­ÿþ7}¯¾çù]^¶öHRüýáßo 3«×È,v.UõÓWÅq~vò“çg'ß*é_”ôÃ÷µ™' Ä0O!ˆan/;€GD•ô’¾éüìä÷œŸ|å+?—‰Y6»ÃLB˜†Yûö_Öüöÿ]â÷ŸÞûêûרÎÃÇŠ9|A»- ß*œ÷ëw öƒ=WØ.[œ¾- ±…ý±ß‹M6„aÎ&x!ŽÓ\|?îá€/²y1ëÖO…ý²ýmAYc‹Êc_%ãaŒY€KÈöünÒÌ/nZXcˆz—ëu…1UÏAô(Ù~Ç‹cÖõ|„¼"n™UýFçÒ#÷ؘ7 7Â1uAFvËÜ‹öþ5vœ8$ØÛŒB·Ü§6lO© ·Øô<Ÿþ{£¸õîUŒ-³÷©#Sö ‡ùþ»,ÉS<³éÌïOÿðçôíÿÁŸÐßûÛŸ•´'¨Œ‚Kð;¨Ïý™·êc_=4¦ó³“¿)éKú%ݽÎ~ž Þ“ôÉcŸg Ëçn¯Õh—1w¬¾jð_—ŸÝ^¿¾z«kËM­CHЩ&öÔýUµø‡½¶ŸZÍ5s~#ê·DÛGËKo`"“»5ŽnÏdâhV¬¯êÎeØsÅðÆÚšéåvŒc#ÕkŽÆµ(òh{ÑÖüè·øñv'ôS¼×£JCÐüMâ–~aüèªK¢Ì05_Vð“ÚJ‰uÝ$PJl;á‰WŒ»bžHV¸áBq!q/Vs˜DÐ1O©0b”Ï,sš0;7Í¢¿÷ñbÇÃzy»ù~lÆsŸ~?æhÃÑß——Uîý þÜwüêeûþY/އ5Ä({¦ú¥TLóéëÆw~vr)é~ü“¯}¤ÿNÒ·IúÐuíÜ`~ôüìäËÇàðãKñ[J)¿åØA<éÐàöñÒ±xˆü´¤_#é›ï_#½ýS¿ý/ªêWKõKé_æÏjü¯ø«þY-ógÿþ]ýÖ_ÿ§ôCõÿ»ßP˜QìÞ:›ø0¶S‰B1¹ë¸b®»¢u[PnׇÂü©øÞ ÜÏÙÎäÃì«æ'ùc~^ÜïíùBK(ìGIÁ½ýJ{~?ËxV¡Ÿ¥ö¹v~ËC¶&Œ¿êûÈç7³U%íôrÝ×°Uñ€¤i?&fŸžâ–ç ‡¶–äj+¦,oJî3oë~s¢•0ž>§=ì6?Úµ>×x³¿'”iÛži›çÓìùŠý(ÑÞæÁV°aŸ¿-Ÿá¶H|š¼&¶§{àš¼öÊ›úÝßögôgÿØ.B˜ÍßcX ˜¤Ì,¦‘TõRýU÷ëùÙÉëçg'¿YÒ?#éã÷kçr›þ›®anŸ”ô¾¤;àË’þI¿çüìä­‡aðíŸúØ÷~ôgì%}·¤_dšŸ¨lu‰‘yk:‰,ïó3ï¼ùýOû ú‘—R¿æ7þËúà‡Žñ¿,J²0R ¹õý(k»µÑ±Åw”YSP[AºéÊ’Ú[;¥LöÔ‹ÖÇühO}~5¶ËÚm¦šž)£Ø½¾ÆõÙ^ßñ¥ÍŽ2ë~l·œ5ön¯{¡[M?‚2lÞ-ÅüØîÎâ«èm!ÖIFòÝaŠïTa“³Zó½düüí Óòá,C˜Ð/\ìŠ[ºò¡ícǶ]“Ù.v™µkm7gKÐѯ;A‡ iˆCL,Nœ²þë„2™ÏeV3ˤB™`;Ðä>Í^&Ÿ~ï{>gÑŠy¯äšF.îħÛËAÌIr[]ƒOý­ŸÐÿü;ÿ¢Þxíe ‘冲NâC|>—µïHõ7¾ýSû#÷íàüìäÇ$ýÊòµMÒô †Ý#‚àÉá«Çà)ƒÿþ€[ançg'oK:^k’çÏHúùçg'¿õa aoÿÔÇ~\ªß¬ªß¿ÕéÅq¿ÅÍUú¾?ÿIý¶ÿô;õ3Ÿ{íaná |Qx(ˆ—-·Åø± ÊØõ± }Ïžœ=+È;A”¿|<«ic¯lسþBQX_ÂzŸ‹í½·¢}/d˜»züÿìy¼œE±þŸ>9Iû°¹€€¢ˆ ˆÊ:@á îŠàQQ¯Â‚àŠ *×増E@ddG@ea‘%ìÛ$d9ýûcæ}»ªºßYÎ6É9Ï÷~†™é·»ªºÞzGn¨'Ä5Ds‚Ða—‘î)X0ª—˜Ÿï_* Ö§çç/?`N†A‡/³ÆÉx•ÿ%„V© k„áðEÛ6{²ùŠòkm»„mäs¬pC„—¨§ÇaÆmK6]¹O]G(ð™Y—ÛNÙÖB—Xp’ÙFj\>ã™]á3º&Ÿ)”±>ÔwSHìÅæUæÀäÛåQvÏ¢E8÷çÃ)_?³_š ù?ñ‰.éÿ͈Nƒ)>æ^ï™3kx„0’J¹t%€M `ôÿ‡jø †%‡«z!„BÈ8ƒÿþE!„BóP C!„B!„ŒM–ÄæÐضR.íS)—)'sf³`άé_°€¬¹}“rº©ÙLƒ³þýŽúÂïqÃå÷ÿFÚĶ¡]6–§›Æµ$nˆoe¯¥˜$ùÑÔ F´Ø¤µ`¯@„`âU¬ÆŽØk&4P±t±>yzEn/øhÄf:þó<ä€ì‹ r®JºX¢dJ` ç;5-|i[|ZäÒê•ÏÏšü¡Ðg*>³›£–â–V¶¡×IeH¶hÉ{SÓ:ãºÖí÷¬F2¡†­H ¢íªºË…%mj¾Ð§¶kÒѼ¦÷žç$Æ“¢6›3i[í'öé”O]Fñó¨óí³^xv6fúTws£žÛþïDVÓä—b¿…ÇsfM¿«ûH;£R.-¬”K§XÀOÑ8UnI£ñï„ÅŸ‡½÷7õ:B!„qÆÙ½€B!„BFŠa!„B!„±É’$†yÀÞU)—®-§s›~àßÙçÜMí…0©¿ñèäoü}î|œ~âeøåÌ+0ÞÂáßH T“¸iON‘jJ—â uZ €¨aÝ4Í+‘€´‡Ðœ.×ái–‡õïÌõæXA<¾RMôÒ–Ó€ ã_ÙÓë³Ü«ü´±—¸{âD rÓÎÉ¥z¾Ir˜+ÕJÞ`ì¨Õ¸â=à¼~ù‚W4¯ùHÄ7.w,nÉòžZ'רû‰OÅÉrä SâÔ”¨& Ÿä÷2·"h<Ÿ-ÖËðeM‰çÎÖ¯ÙXŒ]™¦‚:m%ÎI‹KôÝÐ>ã\dûõ)oÜ‹ñ™×þµè÷L Úd¾»åö¿?ŒiŸû¸óÉÆ@þ¿ ƒ¥E0hõE.jiÛ.l›uR‘a…3±è"Ì‹„2|)Èh!”‰ÂN± En³@b|f²+±i‡ˆ/ølÚ Ò’Ba¹U‰¼4-X±+° «ÈGj/öžu©„Y´pçüüo¸ìÜ[õi0¢¨ã¡¢“ÄŠOƒñXsí•ñ•oî¼Ôêk”¶­Öê—WÊ¥§» vˆTÊ¥»|¨Z«Oð]댦ÿA°$  ¯,°¯÷¾Úë@!„BÆçø¤÷©¿B!„BÆ<†B!„B›ÜŽÎÛÔ{Á%6®”K_ë‘æ½nð› úÞ´ß§·Æ·¦ïŽe—[ 4-§›œÍ´Äà¿€£: ½äîaßS1Å'À„rÛÄ.›úMã~nO¯·MýÛ‹›îc{ÁŸlhšáeƒ½m¬7s2;á]¯×¹øÒF"ÖÜdÓ8•B­…ö%ïYJEà¬ssŸÃ+ìQÞh§¦èùù¢æKÍuJöÙÿÓêÕü¿(µ_}Ÿ“ûËr¢ö\Òv"‡Îg\Ú¶~fÄXmDõèú¡¨Ã¸®GûÜZAG<¥B”‘'ñ¼e¶„mõ\Ù˜#Ÿaï¹O;îä¸y í¦÷#3žö)c‘9/|| xþéWpü!çâR+„iû¿ aXMK­m¾ï°ã;pâw÷Áêk”€Ïx Z«£Z«Oê<âá¡R.]àþÀ«£í¿ (†!dñf€{ïÿØë@!„BÆgø„÷~Q¯!„B!„Ñ€bB!„B!d Ò˜ü§×q$¸À.•ri×J¹ôÀh;¯Öê«Wkõ3üÀ{äµÍÞµN9íãØp£7·hxN ÐÕ óç.À'_rúDŠ IDAT‰ÓO¼ óæ.žµ H R$I‹HRs‹„+Z4 ᡯ©ù0ëmü0Mî°öìz-ÄÉW5û§Ö;OÑÞ]/ί½fó|,¿ƒâ%olp¨…âF&ŠAúÈæÛÓOŒ“Ü–÷CE¶e,íÄ-2'byZáàLø© Û0sŒí´ÐClA¾`î)õ•ûMÔ‰šoÒ$¿Ëç*¿¿ñó§k)»ùb¯%j´`?ÉõªÔŒ-cb¼È§)‹p›sŸ"¯ ÛÉ碀[¯G~þ÷xèž§’—¬ }¡ Æ\Oý…¼˜2eùúGðÅ/“&©ƒÜ—p2€{ªµúî>LTÊ¥×+åÒLëø Oí’p !ã•«lâ½?¿×B!„ŒžFCˆüqïýÂ^C!„B!£Å0„B!„BÈØeqúÓ_p8€r¥\ºt´Wkõ¥ªµú4÷ø :¢K+-ƒ£NÜ{í»EÞx­lós⮸ӿx{èù!í­Tƒ½hæÏ®!Õ˜Þ‰8Å{NÛÓﲉ=>åB5·ÛFxõžz¥›þU¼‰Õ6ü+Ÿ¹ˆ@Š´F7ûÇÍü)qD¾¹Ëì4lI%Âú,¸p‡Å9W%==ßÜ79ß©inp'ˆ׀÷±í<žD̺ŠÍþl m«}¦òal»”m3[¹p©q’raë8dÀeÄs–ÛijÛ–Ï„|®­íX@ƒŸb/‘ϸ–‹|Æ¢ñ‰kö÷GúH‹_ìøÙ+x X¸pÎüѵøÁ´*æ¼úz$~‘šx¨èä°ôûÚ묂“¾¿Þ÷õ[…ô6ªÖêWVkõÚï`x©”KOWÊ¥ÏØÀ?FÛ§Ï!„4x¿‰üÃÞû÷:B!„qÀ?°¡÷þì^C!„B!£Mû)„B!„BYB¹ÀÇzÃ"g˜V)—F^õ‘ Z«À)Öîd~_ŸÃ>ûo‰ 7~3~ü½«ðòKsÔY#öx8ñ×è}v AŒSëºÊ›ŸŸ|ìEû¥³±ÿ—·Åwßdvp͘=|Þ´x¸füù5ïà\hønl­y­±9aO¤ÀØËûÎ}ð8¸fN´=4®5ý{ç…=äMóÖ°'Ò›Ç_°é Y¬b?¹@¡9ÖŒ5¿…b¯†Ÿ°×˜˜ÕA–ÝTî”=ŸyÊ£57ÒgYƒ>^ÏwNZË£Òc꼇„o—åCÄ™Ï %„œS(œqù塈[ÚÛF>GŠVbÑEB´"Ç‘8ù)¡‡µ+S¤mKÑŠ´Y—ÛNÙÖB—XpÒr?V@#ò¢r¢|º¼Î­O$}šò@b/6¯2&ß.²5Ï>ù2~|Ì%xägµø% «i‰µÙyc|òóÛ`âÄ mãjò!ÿªÖ꧘^)—^ìtápP)—n©Öêï°'Ö¬>šþ„)KOʶ Éȳ~ìLà G7¡Cˆ9rùEØ^s»JLâu³:Œð¥Ø^S0b„4^i"{Y¸®yÕkqŠ÷^ˆW Mr{¾¹‹üz&:ð¹=%ŽÉç ÑŽ²—å6ìÝÆžå.·grr›ßáŠè²ÏNË …40â˜ìš‚†¤ÈÆ7îÞ€×+»Á£©”ìæ$(Zà+#œV±dƒ‰[ô&rƒ…¶åÉAJ’ëð2Vt¢Å)ú”)è°>m:¤EÚ>…DÙ¶•Ï1ç>ÅÞ‘='"§­Ÿ&nå3¶í¬ÏÄ~TÎíd¾ÛïM×<€_úÌ}íõ¦^¥µ¦ëš,½ô$xȱåÖokPš~_°_µV?Àé•riÑ` †J¹äü¾Z«ÿÀ·`©Ñòoèõ¿ã2Ö8Ù{ÿH¯ƒ „BGüÕ{ÿ­^A!„B!K:}½€B!„B!#F¯EðÑJ¹´}/„0ÕZ}Õæßœ)„ÉXaÅ¥qä±»cŸý¶D_Ÿè¤î¤ºƒfjyºÀM×<ˆ£ø?<òÀ³C ¹ ¦9^4ó‡r{ „löoÝœž^oÝ[ÚÓMôEñ ·‘hö·‚Äœ¨)ß6ô§Ö·É±J±AØ[g¹×÷̨ò½ çæ>K)ƒ Îs;NMÑóóEÍ—s™˜Åc ñòæU8G‰q´š!·È½§÷ÕZ8cl›œ6öå̶šêBx65‚áRš|¶®ã<|QsÙó¡ë¨àä“|{ñ3’íÈYÛ‰ç+³òÙÕåh|ê\Èý éÓî_ä\ÜÃü9Ëâ”9ˆ„2‰|°`þ"üú{Wã'Ç^й¯ÍB˜ÄI/Ño¿§uðÛÿ¶uWÅÌì;X!Œd%?pGµVÿÐPuK¥\šS)—ް€?Œ¶ÿ&·÷È/!„B!„B!„BYL †B!„B£TÊ¥ç<>Š._0 À†•réüQô ¨Öꫵúáp †éÏ=œsØkßwcÚq{ ´Ò2I!K+!Lt:@b}Ö|ýì/㸃ÏÅ•Ü1¡'ö"›áuƒ¼n$›Ð[‰JBãz,„‰›ýE£¿mªO â†~§šáã“4ZÙ“¸i^j&´+F0¹“¾D¿)$„*þ„HAm>D3¨ *‡¼A‰bˆE6b,^ï›ek^Þ¼Z]O PTÒ󘜜#Öe÷ÍÆ×RÜ™DNE½Ë9±èB„cëf¼@(“Šeu&ì(A‹ñ¶Y 1¶í3 ógQ£">é3®YSR&'²Þ£ß“”í̧3±¸`;Ú‹½gÉznðÔ¬:ŽùÒ9¸æ¢;$D.òw>9”ͨÃ`š_v©”qì̽°Ú–/ŒglàÊj­~aµV²Â¦[*åÒ£•ri4„§ÿe÷<†B!„B!„B!dœC1 !„B!„2¶¿9Ý8Àú•réÄJ¹4o|*ªµúÎîð=+Œ„wlüfœüý}°éækªNçtc´n¨ö¶±:jžöù¥… áÌÓþŠ}1æ¼úú°ï#4ª§›Ðez+qJhrO˜Íë¹=gÖ‹æö¢w$æhQAê‹uB£Ü$5ëG±jÊ‹Ùk«õöôœ\xÑ"wN§E.cÙ@~‡M°¾T2Ì|!HqÂG˜ßúä—V¯l]xòÂþ¬`!±˜½ŠøÂrk;±çT>¶t/ë&<1mî§ E…ÆuMKÑw$ƶ«b†'ñ¬Š:V‚2µsäSÄoöS(” ¥ ]Òûi#‰ÆÅ­µå.øû•÷aúgcÖžÐpqÈe–Œ#¾½ >õùmÐß?!ÌÐÙÀ=ÕZ}fµV_n¤œQ)—®ð._ðÜ(¹¥†B!„B!„B!dœC1 !„B!„2¶éfÑ›lU)—>U)—ža_ÕZýíÕZýb—xûHû[~…)øÖQ»a¿Om… úòfçè4ü³Ä.j¢·¢™0~ëõaÚÏÂC÷>=ìûˆïU}º)_ âFwÙà¯+-Ä$É2Ç£íÉÆü´Gú“ ôÉýØæz%0 ù"/©kíD;è w6VsçÄKìÑÜ Ðü¯ç;ùµ9?³>„ïV§¿½ô©1F©ÐNÜ¢ö‘Ø¯Í =±ifޱ]„y©g"_(¡Œz$ÄZfûúYѱå5 è83Ÿržª;c7——Økñ³P´Ÿäzy¢üÙšwÆ'"Ÿ¦,yyµ>ó:ÐÌ}!Î8å*œ>ã Ì›;ß[¿û1Ùüõ×Nþþ¾x×{ÖŽâ&ø&€ªµúg«µz¼ù¤R. TÊ¥_X aê‚t÷L/þƒB!„B!„B!„,^P C!„B!„ŒmFJ ó$€O¡!„¹i„|R­ÕW¨ÖêßCã4˜]FÓ·sÀî{½ÓOØ+¯²ì ›¤;i¶~þ©WpÂaçáÒso7bš¡ïA5â'ÄQÃÁ5$ÓÓs;Œ ØAÖôßBt ¾‹½A6ß'ÄRP D20¾¤¸ ãõB´#ö“ŽÚž3ëóܺü¥…+Ùæå\©JÁD"3¦î©¼ÑÙ /Rèð¥Ä0¹Z,øŠý˜¸ZîWäÅî%² mÛµ±-kGÝ—f-Eã*$åB =dŠ…2i‰±¥R×\“­Èú ÏzÈSû{‰ööžòÅŸˆ9uK“ÏôaÇ!}êÜj»²6<ñ苘þ¥spÝ%÷ ü6g?¿i‘b±è1þϦ8ì>u3LŸ1«¬º,F™7ø€›«µúÖ£í¼R.½\)—¾`c4„ª#ÁhœzG!„B!„B!„Bsú{!„B!„BF”án‡Æßø~R¥\zu˜m·¥Z«÷ø€¬:Úþ%ëoðFœüý}ð³][oy$ À;À%Þáà½o4w{ߘ_ô.ì,Z0€³N¿÷Þñ8üÖ‡±ÌrK Ó|³¾áÏÇf}ߘçmç¾!ep®Ñ÷íòùxoÆÛC>pp¾™a/ äö²kðYÊòHá=|f;³—­ôµfžhŠwÍ}ùln'ò±Ø^ðïàò›{w>ÄâòÅž—CðŸÛ¹ñ”Ëó/!Ê-{=ž] øæz3&Wy}-»IN Ï$ Z¥’‹5ÂpøâäZµL*!²¯Ö¶ëض­Ä¢‹ô)$J¨!må>b‘˜¶+}jÛ±hÅœˆ"ö´+R”ÕQËšÌx:F“å·i«H(“á(¡Œ¼­âw@åUæÀäÛTàºKïÁÿþèZÌŸ·°1È%&›Z—ZG)¢ÑvïË-7¶6Û|ÍD£Ê»ÜP­ÕÿÀ7+åÒã£é¼R.=`×j­¾€ïØ`Íô©w„B!„B!„B!d €'ÃB!„B!c˜J¹4 ÀóÃdî﨔KGöH³-€[ü=Âd,»ìdñíñÉÏn ú ¦u£uh¼NŸ>NЧüëãÈ΃w=5,±Û¦|ÛÔ®šð…À 5'²ƒ6 õ0öÐÍzÇo›û;²'íÍô­Ö«ü´ÊÍm»Ü¡€Í·P2dwP¼¢ÛÜ‹TÅA¢”'Æäü숗Áà=‚œ(ÜC}3ÌÞÄ»·„¯y{µ¶e=E‘F¹J»à:Ô€9ÑÄÖs$P‰m‡³üÕ­ÊXŸ-bÎ}нg–\Ú§}TêÅ+øŒm;ë3µ£±ÌwÓç¼¹ púIWàŒSþ‚ù¯gB{Ú‹y· —6'~ev6|Ç›pò÷öY„0’ýÜ_­Õ®ÖêSFÛy¥\º @Àá^&³ÃB!„B!„B!„Ša!„B!„qÀP›Fk>X)—ö®”KG@ÝP­ÕתÖêç¸Àf£í¿vÝ}S;c*V]m¹Ö§ Øþjèq97%¬yñÙÙ˜qøøóY·Z“ ÉÔeÓy6bõ¶Á>oX—ïºI?·§¶a_7Ò;³>³gEêä‰dÃ}ÊžØw$ppf/±è ˆ ´0!·ã?Ê•µ'û¢c/û E.cÙŠüÛ`ƒ/›49?ó,ýJ2QL7¯($áG\Ì÷VT?d÷Ïî1ÎE"o¹A(ÛEuŸªØqgÆóÙ¢þE¨R¸‘×2B…'Ÿ$j]¦@·•Ù•µ™ˆY>#Á§Î…Ü’>íþEÎÅ=Ì÷˜Å)÷cGRù0ë?/`ú—ÎÁ߯¼E–HcÞ}‚çöÜ{suÜîXiåe°²4€cÜW­Õ÷mç•riA¥\ú€õд.¢IŠa!„B!„B!„BÅ0„B!„BÈ8`°M£Ïø€Í+åÒ5ÃOGTkõeªµúñîð±Ñöß-ë®·f~÷£xÏ{ßÚQótãrÁ)Ñ)2aÚ¢E‹pîÇ©ÿý'Ì~yîãŽNzPÍï¶A>}bŠjþ7‚$×;µÞ6ëk{:Dë­wf½N¤÷ã´Ä»D9k¿Þžžƒ¹Ó{ÓBšæJý’{47ȹԚ™ÄhL+G'‚Q/h›*^«KìKW®Ú{SÅ­žXçÌœXtaï½v«—œp’ªí¬þLº‹|Š;§kP|‡·viÏs/D|Ij?¦"Uì±m™“ÈvæS®—>dMä>ãç®ùó]8æàsðÔcu´ý n'„iñ›¾ü Sðíé»bßý߃¾>[§‹k8§Z«_W­Õß9ÚÎ+åÒó•ré ›£!p /õB˜K!„B!„B!„B?(†!„B!„BÆ>·w9!€X¯R.^)—†ú7¸wEµVwÕZ}÷˜`©Ñô?–Yf2¾úñÙ/lƒ‰ûZ aº>•@ž®á=î¼å1L;àlÜW{bH1Û†ûXà!šÑEƒzRàaì‹æ"aÖ‚¼IÞŠœh‚ߨ[~ ºQ^Ùƒ±'„áz|E,00"‡ÜžÞšëŒ/#p"—yÌ [áŠXŸ$S°FŽÉÍ)CÕÂÀ{» Ȱ1ÆÅ–ëx­¸%,59ˆöç;‚l#ªWµÎ¤N†Æu­KÑw$ƶ«·eãI‹pR5¬ëXÄù¶Ì~l}GëEêe}GûqmD8ѸÈæÍŸ9~ýýk°àõEHýû¤ ê»Õ*êßàÆÛ;6^'ïcؤ¼–0ÞàŸÕZý—ÕZ}µÑv^)—j•ri{ðH—Ë»ýwB!„B!„B!„2F¡†B!„Bûts2Ìe6©”K‡WÊ¥—F* "ªµúnð;«¶ÿábÇ]6Ʊ3öÄ߸|ËÓºÄävë/¼Š™_»žy‹˜3¬˜¤X bÕ¡æ§Å ²Q=ÕD/¯çöœYoå‹þ!„Å‚eψ œ±Û“¹±±Š¼äþ&wÒ\oOÏ‘â ä6"5D3Bì> IB¾7Œ^ªç7Šo(/@Å%|Ç~E¥¢BîE…—س´ 3ÇØÖ§ÌšE5Õ˜–¨Ë¦¨vÌöalGu [7Âg¢v„]#” ×Bmå¶ ö“g0•è:MÙûÑy û1e‘ȓȫõé€G|GxnºöB1¢Wß›ÈßgÀÌÑ¿»€G_ŸÃG÷}7¦³V\qi,¡ôø€«µúתµúÄÑ R.`C4„¯¯u¸l°§ÝB!„B!„B!„1Å0„B!„BÈØç!¯´™ó€Ý*åÒΕré¾QˆIQ­ÕßT­Õà&[¶ÿ‘à­ë¬‚§~[o³®n¤6§t*ˆIž0ã\ð››ðoü /¿8gP±¦„Pcº™Ý6²ë†|#A¢IÞ ä:Øf}‡±â‡Zß=Ù|Ÿ>±£p?*q^Ò×â9Úž¾ÖW®wP¼¢ÛÜ‹R-‰ù±È¦ùyèGÃä¹E´lçÝS_bßù–da‰yv?Q¾ î…‘DB“J]ÏâÞçó‹…2i‰©•ºæšN, ŠÅžªÆuü0¶3Ÿéñ8æÔ-•ñ¥kֶ̹̉3>¯úÓ8þóðì“/a¬Èú÷Õ~/Ó”JË`Ú1»aï}Þ•Ç»„³<€SÜU­Õwmç•ri^¥\:Àú΄–)¥ †B!„B!„B!„ †B!„BóTÊ%àö‚Ë/ø€+åÒÅ£Uƒj­>¹Z« 1Χuç/ÙL™2‡¾¾pÐ0±_ü1L²A[|H4j§O*ïwßö8¦x6î¾mÖ bu²I=ѰßNœ7ìQ…¤®i1H¢I^½'„¦ñߊl¬Ù¾sÁ øEÍû¹Ø@ø’Bš×ÛÓsò="¸fÜRm1f%{…¯Vóå#9Ôƒa¼±‡û0¾8µi[jFÜÒ©íH("òlk'ª[˜ûÞ¼·€Yoj.ö©m£Àgf݉=$íŠÁ<Óm÷cž±t^²=ÆBë¶ …2¹O“W™1>÷Õùøñ±—âw?¹ .l!„)ø}m{Wx/oúÌüîÞØp£7c ²>€?Wkõ˪µú†£í¼R.=Y)—>…† ö¦S‹þ}†B!„B!„B!„Œ3(†!„B!„BƶytÀ/¬W)—¾W)—Œv@ÕZ}*€{œ`ÙÑö?šìðá qÂÉ{âÍo^¡PÌ’÷_CŽ£yª†œS,ˆyùÅ9øÎ7/Âù¿¾ íþrý¶©_4¿'ÄP×MC?d3{Ð#´ƒ{®ÀžŽf½3ëU=¬x >IC b1ƒW]S‡H Q BZ4 r«îK–-d»/iWm"øÒkB¬2Áјwê„—®^òt}u»òyPµ'â“wÁ>7ÁgB<”ò™z>²íÌßÃ<‹éÿïÜzçº !„iý®æ‰ß× þkÿ-ñ­i»`ùå§`Œ³#€ZµVÿAµV_q´Wʥ세OxÒ\~ Àý£!„B!„B!„BY<¡†B!„BÜ&>_à]•ré‹•ré¹Ñ¤Z«o\­Õ¯ðG댶ÿ^±æZ+cÆ){ãýÛ®W(fnèÎ/·Äø?ýþœôõ Qþµ®bÔâ¨þ¨qß%Ým#{›9Ev"Q  Ç`Ö#ÑpoÅ-D­ì!·'¯‰ÚÇ“5øë=v‘_K6ÙÍ ŠD\ž_´[ l Ä-¼”8FUœŽÇÆ¡Ÿ ,dq…<æê‹l¡ÝknPçÄŠ.lÝ %ÜpYì!÷JD9¶!…2ÈꢎŒí0¶§}†Éšhù OÇhÊDù4¹Ï’>uŒ*ç&y¾ Ÿ±Æ»‡Ã•Ü_½Ï?3[‹ZÌÉ/Ý a²"iØZy•eqÔ±ì±çfºÌÆ6ýð`µV?¨Z«OMç•rÉWÊ¥ÿðv3¼Þ¼tG¥\ÍX!„B!„B!„BÈâ Å0„B!„BÈøà6اR.m[)—þ5ÚTkõ•«µúOü À£íq`òä~ü¿C¶ÇAo‹É“úa…0QÓ¶ÈØSdZcî¯=ižÚÍv§j–Ï›çEC>tÃ}hÞERL ìMƒ¾Ȇy+MõEÂ)ž€Z߉=%BÈc±"ˆXœ‰r±CûÜé܈ ÔÞDW~.üÐ † ±üN¿„B–6? âP˜HcíËx„à"V˜ËÇä©¶(²­çÄ¢‹C$܈\KD]Z¡LTß‘OýœØz“ßaǭݼæÌ^Äs¢lÁÖ¤‰_Ü7UANÇom+Ÿ6ß.¶íeÎìùøñq—àì_Ü€E bq‹ø<8!LÔlþ®51óÔ½ñö ÞˆqÊ*~à¶j­¾ýh;¯”K¯VÊ¥#làha/!„B!„B!„Bçô÷:B!„B!„Œ ÷Ø R.ÍmÇÕZ½À—  4ÚþG¶ÝþíxÛz«á‡ß½ ?^GChàçà½o4Š7¿ÇïÙôlçï¢÷Ù/ÏÅwü3vÝwsìýÙ-1aBû¿%k¬oœ½€\oà²1×x÷ppð wsœo~j¾7¿¾yÉå«áƒ=4zÐðå=|>àಜeÑx¯šæá­ÿÌr±½°/Ö»fp©ý Ûóyìù¥Dîr{—̕Wöš± k~­i¯Ñ»/O\qâ³wÒ“Wœ> ÃÌ»‚A¢—[Õƒ“14_Å£üÈ—ņµ !ÌȶkEH QˆZ'B±!‡… Äøˆ¾#‹Óvõ¶Âèxs[j?Z\‰P”OaËì§P(#mCÚó'ã†È·3>³ïÿ¾÷iœñ«ð³³›EÕL¼³ •F¯I‰ 'Lpøøþ[b—Ýʶ´Æ+eWWkõ |½R.=<šÎ›þö®ÖêËŒ¦_B!„B!„B!„²xÓa!„B!„q@¥\è‘æÃîð#P£XcNBHqB^´-šp⃀È1ÛÍßæ$™Äüa#Kš Iqjc&«1ÛÎí¦mGu™Í´õ”/IÔ5 :B”Q=C·µ‡”O5nkW×D|áš~>T}šýäLåY½™vºŒ IDATÈüir?i¡ŒËc/ÜKÓ†÷—ÿávœú­‹ŒÆÇB!ˆI a<´Fÿf®ºê²8ö„ݱk…B˜{¸·Z«ŸX­Õ—mç•réµÑöI!„B!„B!„B_(†!„B!„BȰS­Õ×­Öê¸À;zÏâʤIýøâ—>€ƒý –šÜД=¼‚À㻞ÆQ‹Ûo|¤ÃèÒ'Y¤ÅN7ÍÃ4ÝC6òëfúVbgÖ[áBq<ñz),Ðüa¯.Ú«=Á"nôG‹k­ÖÇ  âHºaÅJh îYx…ÙüH‘Xãä׿ü\àýÐ^òä™<8ÈMAgý'c-Ø“-k[Üc)‘"’H(#ÜIV¸|~;¡Œ‘¤CWq&D+òµ‡‹Ú§Ø‹õéÂÞ­Ïô¸]Ÿ¾¥©gT>#Öv–“,öW_™‡s1.øíMX´pQ³›ÿ(øýk”[rXÿVnñžµ0ó”½ñ¶uW)d2€o¸¿Z«ªZ«»v !„B!„B!„B ú{!„B!„BÆÕZ}yÓ`RÃYbØæýëâm뮊~ï/xôÑßè(÷Þ7šÅ½ot…¼‡yœo®ß_}e~pÔÅØqïM±ï¶Æ„þâ¿'%oÞÏN˜É›èœóh|ó¹À#k`oÆŸk›sœo^õÂ^v½á<Ìö biŽùÌòëÙ|ÀÁ5s”ùjä b¾ÙO {>·'öãÍ~¼Ù×û÷ž¸=yÞuî¤/™ûl?p^܉ìŸM¼ìQ÷2ÁùGo*òkþ¥iÇ«‹Ý“Ý ©.I qœF¬Éò$÷ç:¶­„"Ò¥…d %”‘âiKøÐb˜ñà3»±Ñ -ÆgfÝŠK¬?-tI e ÷#׿%Ûc,”±>Q`»P(“ûŒ…2Þõ~uê_ðÒ‹¯ÿìwD.YÍÉ9rL¬éŸÐ‡O|jKì¸óÆ óf¿ppµV?´R.ÝÔë€!CbçÜ ]Ì¿Æ{ÿˆECivqέÝÅüÍF(BÏlæœ;¨‹ùyï/±h!„B!d …bB!„B!„ ™j­Þà3fxCo£Y2yÓ›VÀñ3öÀ™¿¹W^yÄ4›Å‡Iã½Ãåçßîz OÛ«¾qù˜œ bŽ\|Ñ“™«LÑ”V4Å ŠS‚½¦`Ä;xa/Ó©äbq BHÄ#BøÒÒøLHä¾´˜$³§óBžl.D,Vø¾g┆Ey|f¯‘—†¦Fø÷M¹Œ¾ rï0(ëëo r¡€“»‘"#'ôö„–Œ ¾ñf\~:V‘Õˆ‹ædb µN}j eÛiÛbŽ<ù'ø–B¤›\`bB™Ì¶¨¸ØvYÇ#E7ÒF63Ä’á˜tä¶aâ–B%ôñÉ» âV>‹N¾1>ÙˆÑÃãÒsnÇ%gÿ>!„iq"ŒÊÈ9@¾Î AÌV[‡}u¼uU@Å{ü£Z«ÿÀ·*åÒ“½ˆ2(NèrþgP CÈ’Ë!½€Bvl¾:årÃB!„Bˆ¡ø¯ÿ$„B!„Bé€j­þ>7øP3$&Nœ€Ïð>vø˜2e¢ið†hO¿§ONˆß½¾ÿYuÐ9øçõµŒÉ6ïG'NˆÆy@6ÇÇ ïÊšù ! ħ[ÄB‚¸¡¿iZسþ¹ÞX¡íÉFÿø´ 8ڻ̋‹¯Åïé9HÌAòšP$„»'^*aùËÉ).5?[Ó¬³!½BÜùÍ—þÌ Û‘X°WçŒm@í#Ÿ%ºˆê3%ÜP÷?®Ù,­*Luß›¶²ÙV hÂö´O[÷bM$¶‰÷£ëׯç$ø4¹Ï@2‡q©!ò)N”ÉâlN˜ýòœvô%øóÿÝb„0] a¼øíË×CÙÛj«upÒ){R3t€Ox Z«Y­Õ—êu@„B!„B!„B!dìC1 !„B!„BEµVKµV? Àß¼«×ñŒ%Þ»Õ:˜ù½ðÖuVQAÌÜ׿ã´ã.Ù?¹ ,JÆ"Å$Jà‰CLýú®uVÄ1\‚´˜£ÆU,E¢°×Hh€”=§ìi‘AÑ ÍÃØVß!ì ƒÌ³ÙOÃR7„±øé_.÷Þ¨›„¸¥õËÌÏU R!â6qÉ9a,Uœ®p3sbA‡¾WFwc\KD Y¡Œ´£-¶FóÝ¥…2IqNÊnT²¦­ g1ã0>Ui˜ç5¶]4®Aéœ?P{3¾rî¯=Ñ(»Âß»æ?Z aÂÄè÷qb¾pÀ68ôð0eÊ$ac4N—¸·Z«ïÝë`Ç<Óë!£ÊÓ½€B‹ !„B!¤WP C!„B!„®¨ÖêSªµút÷ø¯^Ç3VYí Ëá¸öÀN;o4‚‚˜Æ¼«.¬á¸ÃÎÇ3O¾\Í`ÄòzB$`´q“¿ ¨ûÈž-˜õ0ë.ŠD ÍùJ¤`Å R ¡íY!38gbM‰*DžsM}}eÒ±k“däö•‘Ô¡œƒw.Ô_N;5LbºR~_&±ùþí¬¸%,5Š k;ËÈ!LÞ"ÑR$衘pEˆ¢6ÏŒúÒ+|ƶöl< NfKì'~VẺº‡Š/ØFÒ§± i7Οznijá½ÇÅgߊs f¿4§©Ÿ¢¦àwñÍoZ'̘Š>¼!Ȉ±6€óªµú5ÕZ}Ó^CÈ8ä¬^@UøÌBHïáo1!„B!„ôŠa!„B!„Ò1ÕZ}_4D0ÇXº·ÑŒ}úûûðéÏn…¯ñ!,³ôd¤1ö{7‚˜0ïÑŸÃÑ_:7^û`GçbÙd_$ôhµ>e/ÑŒ/u*¶”ð¤HLâÄÞP°Þ4ñ‹õ¹à £õ:+*P"‹D~¤P"•;›äc@Ѓ8ñ’C®ißé)ÎÎ÷ÈTƒ}é“a bŠ \2ž¨0ÅR1ÇØVµ)gÚ¼"¬Su‚¢úIÔ¬/ø€þžû(áDã!M‘]#” ×t}äukk3÷iëLÞS»°5ìŒO¯ŠQ_{¥þN›~1.;÷¶f­4ë-;]6!Ì6Û¬‹gNÅšk­2*làÖj­~zµV_¥×Á2Ž8ÀÜ^A5ÎPïu„2žñÞßàú^ÇA!„B!ãŠa!„B!„Ò–j­¾yµV¿ÀÙÖìu<ãwo±6f~gO¬·îjˆ1ÅàÝ bæÍ™Ÿx%~ýƒk±`þ"C±˜CŠ ì)*¶1߈:°§Å.RP, ‘'SXÁH$~ˆÄ$±ð$\ÁCJРNÖHˆ ò¹q63¥óÒf=Ôw{B-á2‘‹4‚0¦Ä%N¿Dó Çu´?&ùj® ›_d‘¥Ä-AD)N²y:Q±m{¹ÔB’r!ë+¿wƇ¬ÿ¨æsI:ô¨Ž`l¨J eT­Ël*ŸqíçÏRãf½,•üŠ/tiÛ÷þëqœüµ?âßw?•—Xô%knB˜É“ûqàAÀÁ‡l‡¥–š2ªLp €«µúWªµ:o!#Œ÷þn{˜ßëX!#÷þI;˜ÝëX!dœ3À½‚B!„BÆÃB!„B!¤j­¾ZµV?À-¶éu<ã™UV]ÓÛ »í¶ œK bZŸˆÐ© ð¸öâ{pì¡çá©Yú/N Eì)(±8Dˆ¬( @Ì‘ "¡€K6Úk!AX/Å!ZGa×;s½±¢Hœ‰¢ïq~r‘G*wÑ»œW âPó¢†'^ù U›vjŠ™ [º}Ù8¤?gB³7>Û“Ü—S9me[ El-˜z´yL :„Hbl#D×CÂgfÝAÛÖvÃýJÙ–õ]´Ÿ¤PÆú€^+Å9Òg.ˆ1¶õ¸ÎÓÀ¢Tw ~1ãr¼úrãð‚¤ÆŠ]<âÓcÂâäïßk”pÂŒ©ØnûõAzÊŠ¾ V­Õwêu0„Œu¼÷—ØÀÂ^ÇBy¼÷7ØÀœ^ÇB!ãïý‹> à^ÇB!„B!ã Ša!„B!„Q­Õ'Ukõ¯xÀçÁ?CX,˜0¡ûrKñ±ìr“Œ ¦ø}0‚˜Y=韇®º?÷oÅ$ üª¢ñÝ aôõ¨Yß4ͧN–ÐBÝô¯ßc;ñ RÔ‹v²}‡ùi!Œ¶§*˜ýÀìÇøO}GÂJˆ“}pù3fÉçÊùcƒ;F¿¤M+nˆUŒé)Y,fŽˆÙ™92GÁ·®%)ܵnk"ªk{?3Ûö¾8mW§YÇ×F‘P&mÛj‰2Û0q+Žð‰{LêcŸ áXÊgsÞK/¼†Ó¦_Œ¿\Xƒ¿Qm„0¿Qùi1­…€Ûm¿>N˜±ÖXcEņ \Z­Õ/®ÖêT(2‚xïÿ`;°!“q÷þz[¸£×±BÈxÅ{ÿ €÷¡q²6!„B!„Q€,„B!„BQTkõÝÜàË÷8’à›¿'Ÿ¼Þ¾Á†QæeS_Ÿ;¿øÎ_pÆw¯Æü׳¿X|0b)8ÐMø­Ä$Å'ʈFûÈžlØo½ÞŠ´`ÂØI¾ÇsàÄ~¬¯•ÔI%ÙZcÒž,èÓKÄJTÈw¤nH­à²ZÒË+›:2½)+nAž£ø@jŽÙ¶¼Ï(n¨{eÓ–Ý'¦ü.jSÞC+” ãa{Q]AÇÏ]ñ~Rµc[Î û1¹05ûŒcGä³±úîΩ߸Üÿ,2¥K7¿MÍæ=›<¹y;xÐ0yr?ÈbÉ.îªÖêß­Öê+ô:BÆ*ÞûlàT=‡2Âxïï°€ãÀ“¡!¤'xïŸ÷ÞÀžìu<„B!„2Ö¡†B!„B!€j­¾aµV¿@Àz½Ž‡´f¥•—ÁÑÓwÅÔ=7 ƒ-1¾Åé æ´x%²¹þòûpÌ—ÿ€'}± 1G³I^Í·']èõI±B=({²!_ø‚Ž5øÓ§zȦþ`ÏØ“þ„X ±^ç*%NH‹~2!å´âXA‡Ë ¢!È`7Ÿ:IpáŽA¿ b¾!âR¡™9V9’XçÌœXСójt7ÆE°DÜ/)ô°5"m e¢g"-Ò‚°­ì&nSJXUäSŠV”LV‰3ñ䤕ÏE¸èÌ›ð?§\‰9³_GçB˜y ! ôØšk–pâIS±Íû×Yì™à«¬ÖêTkuþ÷ BFïý\ïýV°+€™žëmT„‘Â{¿À{?À쌆0fVo£"„ñ‡÷þ"k£!R<À = ˆB!„BÆ(.ÿ‰„B!„B×TkõãLëu¤{jµ'ð“ÿ³_™ÛJõÞøGÖ\¯v,_Zî'-ÕOü~l»Ó†ðMƒÇ€ü€Ç@óT™ïáÄ5ï10Ni\×¼GGö²ï {©ùÖžëµ½Vþ3{!þä~:ðÕ¸^œ—qäv’yLçEÚ R|B Òv òóðX¸HˆtÂ+Ô¤Tcd§kY v´òDÚvΡÏ®/4ú„€£Ï9¸¾ÄxŸzôµoØÈæ´ò™ûhã3Œ;ôõÅqd¶#Ÿ]Ä|ƶ¤î|Ú½4ÆëÏ¿Š3x f=ô¼8å"–æ?†A³Ã‡6À§>ý^Lœ8ahµJzÁ}>T)—žèu „Œœs“¬4/{ïçWû¤sœs«èöÿyÑ{?¿ ËX¶Ks¼÷¯t¹†Œƒ¬‘Œ×½÷õጇB!„BÆÃB!„B!$§Z«à'ü˜%=â¥úüø´kqÏ=O5:Ä$®µÄÀ[}p}|úÐm1y©þ ÄH <¬8$%ð°k[\ëPdcÅ ñ÷ND;­D6­Å)Ú^±Èf8öÓ©=-†¿d'QLX``CþsDïE‹´à%±qKSà’…3Ù‰&zNwB„P¦y­½h WÚbºÊÈkE{l%”‘>Óã˜T<>ïºåQœû‹¿aÞœù±&!f¬fÊ”‰8à‹Ûà½[­3´%½â:S+å»!„ÅçÜLßìrÅ0„B!„B!dÄéëu„B!„BY|¨”K?Pðj¯c!ݱbiiyÔÎØkïw6DmšÈ3F¸ÖÁÉ ÍBþqõ8æËÀã¿×Ô4‘‚lª×:×üNŽºÈu™=gÖ·|Ïú]i&Z­±"е!Òú »ÞÄ,ÖgöX³Þ™õù>L<ííéýÀIq‰ºT>WÌNÄKù •ü;Bû¬êZÔž_¸pþöFüï®Æ¼×¤&ñ[“ÂøŽ…0o]g̘9•B˜%—ÿða a!„B!„B!„BH·P C!„B!„E¥\ºÀû<ÙëXHw8çðÑmŽoOÛ+®¸tkAŒjNGÆ«yAãñôã/á¸ÃÎǵ—ÜÓ¥˜C6ÕÇB…"1‰ƒtnO6ó§Å$Òä5%¤Hˆ¢¹zŽ´—ôi”ÂÄ*…#aïBp -´D¬4³}•…\“ †ò’#¨6:·È|ª½¨¯Nm!äÂÜ[K‰ÉŸª5éÃ~oþ3ª…„Ï̺µ­íêš·¶c¡LÑ3£R‹q ×JqŽô iGØÎÆ_|f6~zÌÅøû÷*áJËßšH“}Oý†…Ï;îô{\oxÃò K$3|¢R.Íïu „B!„B!„B!dɃbB!„B!„DTÊ¥x/€;{ éž6zfž<åòêéfr3Vܤ.×4Ƥ fÁë‹ð¿§ý§Ÿt%æÍ >ŒP$-"IŸî¢ÄÑ÷¦àÀ6í·ƒèï Òb’¼õ_س뵀AŠrуº¯O‰vÒ‚ ¹×âü"q Ñ!\hÆ^:If´0ÆI°¯â‰ã°ëävfŽº—I¡GÈ«®qÿdþu"…'Ö§ GÖYÇc;ÊÀÞc³¬Ã/Lܰ㪅]“úاy.E}ßqãÃøá‘á‰G^P•֢;$~cÌ5ó¾ôÒqø×>„Of+ô÷ó¸—@8 R.Y)—¢_B!„B!„B!„B:ÿ¥B!„B!I*åÒ,Û¸²×±îY~…)øæï„}ÿëÝè˺ä}qƒyºYªI=4«çÜrÝ¿qÜ—ÏÃc=—7ÈRt`ˆSLý>}Â6ôÇB)VèD0¢Å&­ìá„õ}­õ 0Ðy1{ív}ñ‰2ÚG#¶\™‘¿‚¨$»#³Ó„†ú;'|ˆx¬¸%+s›£Lʵ§òS'ùγœš0M=É:GÊg¢†BÍëû)Ç ë(±]6F“´ ÆE>‘ôǾ`Á"üñWÿÀY?ù+^Ÿ»@ü®Èß–¦8¦íéS­…0ë®»*Nš¹'¶Øb-%’Ùv­”Kgô:B!„B!„B!„²dC1 !„B!„B ©”K¯ØÀ¯z éç€=¦nŠ£ŽÞ+•–nŽ5šg"Ó¬^p’ƒn\÷xö©W0ã«ÄÕÝ•oÄMýi1‡‡ st³^ŠSs*‹^Ÿ‰§bD↴€ _Y^ b±t¬€6$rgí%ªD¼‚Cn:³×Ñ©/Ÿ#ƒÌÜ›ø¬r$±Î™9±Ðù”8DÝgäù‰î¿É­Ê5t}HÛ…B™¨&Òâ-ÛÊn–å3ì]‹VbŸ².’B™ÈgqN2ŸÏ?ý2~vìŸùšûÃï O¼x/ø=i~(Â8xìºÛ&˜~ìnXuÕeA–H°M¥\º¢×B!„B!„B!„%Ša!„B!„Ò’J¹´°R.}ÀQ½Ž… Ž·oðÌ:s(±‰lòï@LR|*Š´çŒ={B(ô%Å#uŒSëSÂ{zNñú°Ÿ†øBª Dâ%j¼…Ê%;ù¥&÷;>ó{%nP†Ql Ž5)Zi梱 ³l dugk-Œ'OQ±÷VŠH Ö«º3µ‘E(ã.ØOî3UÏæ–ÅÏŽxŒO[[úYÔ©ÏÖÜ~ÃCøÉÑÆÓ³êâþKqKó…;{r ÄIBalÙe'áëG|ûâ=˜0¤½„r€÷VÊ¥Z¯!„B!„B!„B!cþ—CB!„B!„tD¥\:À'Ìïu,¤{–]n2ŽøÆG°ßþ[`B_³;>%ˆižøRÜÌ‹c|PÄÞãö<Œã=<ølR bO\Éšó­€!%) ´µ'Å'À@â$ )`°õ.cqæÝÄaöÚ©hG JÂÞb‘D¸®…!âŠVdäq÷yH/U‘Faáä—lŠSûÔA†ü†{¥Í ¦ÍýÍrfòå]ض¥P&YCV„“ÙŽÆv…ídÄ>þTöff÷Æ©9©½ÛVèî{n^Õ’¹ÿ±«Z²¹ócA‹¾7y­Êz(ôîU2fs«RBéIŸ±mùüe¶ž}ò%ü옋qÛõÿNœÓÁ©R¿F$äsöØ£Œ£ŽÞ+­´ ÈËv«”K³{!„B!„B!„B[P C!„B!„®¨”KרÀ#½„ –u×[ '<ï~wó¤ŸjH/jpGËÓb¤ fÑ‚œ÷«à§'\Ž9¯ÎK6ÿÊ Eé\” ¦˜¤à‰9ˆ®ÙW|’G ħ¤Ä :Vg®b¯z¾ÒèõA,Rœ»ÌNÖL<ÂúHp2j„ñgÄ-!§bLÎ1÷BΈî›ÉMËq!α÷ÇÖòˆŒP¦Àv¨wmÐñJᎵ]$Ή÷ÝVíÃÔ‡|>¥O;·]ÿoüü¸‹ñÜ“/·? &)ˆ‘s‹~w<–_~)|ó›Á¾ÿõnL˜À?Â^Bñ¾])—¨”K { !„B!„B!„B{ð¿$B!„B!¤k*åÒ½Þ à–^ÇBÇ2ËLÆW¿ö!|êS[¢¿¿ééºÙÝ6¸Ç§?ø ˆ¼Ç·<Š¿r>þsï³]‰9´8DŠÚ‹I’B‘„=9C]O q´"-n‰„‰w$æ ÅµV§çHaC«ÜÙX5F6‘‹5„Z#;=H½PðJÌ1æ73!nÉýɸÄ:gæH‘QZ$r­û“u¢DR¶ªYãS†Ý„\§„2êþç¶EÌ ÛJœ#î+LÜ°ãªæ…]“úاÂù qþ/ÿ† ýw,x}‘´¿ý6´8‘ê¾3OžŠò¦k€,±¼`ÿJ¹tR¯!„B!„B!„B!cŠa!„B!„2(*åÒ3¶pQC!C`§7Â1Çî†ÕV[¹¸ЧÀ¨SbвÙ]žþ O‰©?÷¾?­Š+.¸@;ÁˆnúNóHˆAì;ì;ù Qã,¤±¢ƒ\È 0b#~ÈF !íÁ¬wf=L¡%÷éL|J\¢ë@Ž+Û¶¦Í~Ô¸yflNÒ‚˜XècŸ5xfV§{1j7>/È~¬ø¥X,çåûãœÃ^{m†#Ú+®¸4ÈË‹>R)—Îêu „B!„B!„B!dlC1 !„B!„BM¥\š`O§õ:2xÖYgœ4s*¶ÜríÆ@‹ST|ª>j€§Ä ,\„?y3~zü¥xí•×µxR˜P$&‰Å)©“0¬¦c°'ÀDâ‡Vb›Ä%|vb{f¯ÉïRPa…/FÒb}JHÑ´D)A¢ÇŠéü%l‹ò††B̉â 5bï­„h¢«> IDATA‹Íeú„–ÂS…×FìÓå5§ïá 0sžµŸ°wysŸ¢†òÔ%bvH\39¹õ¯âŒ/Å O¿¢NƒI ã’9)Œ c0ëW\q ¾}äŽøèÇ67uI–0þ`ëJ¹t]¯!„B!„B!„B!cŠa!„B!„2$*åÒ@¥\:ÀW ô:28¦L™ˆÃ¾òA|îs[aâÄ BÐ#ˆñmšáÛŸsïm㤯žï~Z5øw$*AZ´ Ú‹A"1D3De ÁDö¤˜AŸ#×ì·BH[f¯Rä F"× ‡"*¨Au º|‰c¤Ý\à!’߃ņ™ã`öä²»ò gïo|*ŒÎµÈ/´mŸ>ÓâmWn+º_û‘>õýÖöÕš|¼i«H(ùlØ™?wÎûùõ¸øw7aá‚…Hž“ÃI1\‹ß“M6Y3OžŠ6z3ÈÍM¶ª”K÷÷:B!„B!„B!„2> †B!„B!ÃB¥\ú>€˜ÛëXÈàùЇ7ÄqÇWð¦7­€Â“Ô)1hq*Dñ)1/¿ð~|ÌŸì·b1b1‡ÈþnÄ$ñ)/©±øt—˜k¯e 8+r‚ˆô 0ZD¡Åè`½„}´Ê¤¤D(ÙXдø._¡|bq‹ Å—Ç;9Ôˆ˜£E+ö~k1Jt/l­¥r$lHÛR(#ïYîÈpòº¶â—°+l§îY¡P"^¹ŸDN‚OaKääéÇ^Ä/N¸÷ÜòhûÓ`"ALømðfÌž4Õ×ç°Ï>›ã[ÿý,¿ü%š?ؾR.=Ûë@!„B!„B!„BÈøbB!„B!„ •réÛx®×±Á³ÖZ+áÄ»ã}ï{Z5³7ÞZÑú”˜E¸ä¬[ñÓã.Åì—æ%D ¦Yß ñ DEbB!bq ¢õHú—ës!D¡8Åœ±#EVäPp­häÎÆªqâÞÔ /Ù½nõ²ó=”Ý ‡Š“ÌaP…äûГÒ9HŽ‹•QN¥»\@’‰…¬¸*-” šDèÙ=Éâ)áD>彌íBØ×âúÊ|"é3ÎÇÍW߇_ϼõgg£ãÓ`Ïx¨Q;@nc¥•–Æ´£vÆÔ=7Ëã!K,?ðÑJ¹D!,!„B!„B!„BU(†!„B!„BȰR)—nð^÷÷:2x–Zj"þò¶øâ·Á¤I ÛðŧFˆÏ-N‰y ö¾óõ ðàO&FtR ±óZ Fìä#H i¤f#¬@®Â!PÐëGÌíµZ/D;b?騡í9³^ 6‚hF©%"Á Úja’ˆ{¨mf¾E’­ß,GR(D{„ÈQT/©q!αÂ-F >aòˆÛ!SÇ*f±ÆÞ?qÏaÇ#Ÿ"ö¾gµ™Ê8óæ,Ày§_‡+Îù'-\Ô¸½ÝœcŸëBÇf›­“fNż± HÈ€Ã*åÒá•ri ×ÁB!„B!„B!„ñÅ0„B!„Bv*åÒl àú^ÇB†ÆvÛ¯ãOØ«¯¾"äéö¤‡ÆÐàO‰™ýÒüìøKqé9·b`@:ƒ(q€ì·ß8âÁrË-²D3À^•réG½„B!„B!„B!„Œ_(†!„B!„BȈP)—^ðag÷:24Þò–N8qw|`Ûõ5»Ó)1Ùº+λ?;î¼RŸ““´shÁÄÉ­Å .¹>4¤ÖwcO B‹Vë¥pB‰.Z]KÏѹK'¤èD2”¤dÈB/ü*'Íœ Rsd®÷Kˆ¥äÞ r],”Ѷ#T&sIùt&>§m‡­9ã³ ¶û‰ëÒÜûìnÙgÂÀrŸÞᦫîÅ™§^—_xµy‹¥F>¿ž“ËÁc•U–ÅÑGï‚Ý*›D·ž,q<`»J¹ô§^B!„B!„B!„BÆ7ÃB!„B!dĨ”K¯ØÀÌ^ÇB†ÆäÉý8è ÷ãKÿï˜<¹¿¸ñ½ëSbâ¦ú‡îy §ñGÜÿ¯Ç#q‹s¤D!Hˆ !(¾8XAD>†VB‡Xˆ“]Gîßž@"E Á¿]hEnÆ¿LDö „Aö\Â^ö!§ cÌ&TÎÉï§ž =Dž"AKÁI,©q[WYŽ„ï¢>š{JÙŽ…2 Û2j?æ~¶ʈÚM eš×æÎyçýìZ\}þmX4± ö4#{×»×ÄI3÷Àzë¯ÖQ•ÅšûlU)—néu „B!„B!„B!„¸ü?rB!„B!„Œ ÕZý?ÐßëXÈÐxòÉ—ðÃ\ƒY³ê)fÈ• ù?òæ}9–üœ› Âí*eì´Ïæp}}ÈNðh6ïx?€pÍ{ „FýÆõ0ß{``@\ËíÉùÖžølü{"¦Èçö²ù­í¥÷£íµÚk¶6ØÎÇš±f"%ßü<ðÚ,ª¿4¤ºqýý˜°âòZ o´²ÅŠsúàúã}FxÒç\¼l¼/1¯p¼aCÚ.ò™û0>ûú´@%Ä¢¯å¶Šl·o|ÏJc?‰5ÆçÿyýúÌ®Ï b–ü­Åçü‘3 ‚ðE~nÎïïïÃ~ûmvÞhHuCþ `ÏJ¹Tïu „Bι©ÖîbÉnvèÒÍo½÷Ÿér !„B!„B!]A1 !„B!„BFj­¾€s,×ëXÈÐX°`~û›qõÕ÷7Gäѱ8&; ù[±ÆŠbÖZ5|âí°üÊËJœ"Å(ZlÒæZ$Ti|O‰R¢k‘H¥•È%%бöÒ"m¯XøìµÙÈõÙ)Þ{ ¼ú¾øòjÆõ÷£¿´B$zÉkC aò“NœN„A\"Ä)¢+ˆ‘ãiÛB™” ¦kŸúZ[¡L")ŠÆûçÈÜtåݸþϵ¼(‘K,‚‘ãâô)ŽIbV[m9zØöXgU†T3d±á÷>W)—æ÷:B!„ çÜeva7ÃB!„B!„‡bB!„B!„Œ*ÕZ}SX½×±¡ó¿ÿ¿<ãÌ›» 1ŸÓüÐÁçe–›Œ}|?6Üü-‹9:9&%&i'néVœ’íħ²´ÜOÁé7iáM±¯b{ñ^ÃI‹f¿†…/$„pñPcMbêÄ~ô¯´b.vÉ0Aô}R ÂX¡ð¥Åx{qI|­HÓ^(cÇ;;¦+Ÿ©ø‹1ÆçÜWçá’3oÄ#÷>õçÁmN€éö4Øò=k〷ÁÒKO*(²„qb¥\šÖë !„2|P C!„B!„BÆ }½€B!„B!ã‹J¹t€÷¨õ:2t¶Úzœ4c¬½ÖJŸ81‡ÏFüæÙ|Ÿöɦü×fÏÃo¾{þüû›100 DRGNɾËëâ‚æ©30ëYŸŸP{p‰ tf/¼ÏwÆ^Á~Ä»>D¥Õµx޶±&ö¥„MáFê—/x¥æ*¤FŒIuÌÓ3¢\å+U¹0 :gŸ³|æ™<#Ó‹¾º~ŠêTÔäÞ‹ö#òaë3¯Y‡Yÿ~¿=ù2<|ÂäϤ?›ç0Qå〸ÏaíĉðÙÏn…Ãÿ …0cƒ…¾@! !„Bɽ€B!„B!„Œ}x2 !„B!„BzBµV_À|¤×±¡³`Á"üþÌ›qÅ•÷†A)¦PÊ'†âñ JÈ+Ä[Ö]û}y;¬¸Ê²mOeѧˆÓQ¼š/OJÑ'§´?eFÚŽO”‰O€Q¾Ô‰.©}è`:õÕi^Ò§áè\5N†y Ÿ{qH5â&NDÿ*%¥qJÁaÆšsú\ã”V'ŸÈñä -ö„'N^1'±[Ÿa¼àZ·>“¶3»‰“oÄ©0©“o/¿ÿ¸ônx?ÐÈgê$ñ&EháÏ¥0 ÉÓ`Þø†åpØW>ˆµÖ^yH5B^ð±J¹tE¯!„BÈð3J'Ãl콿{„}B!„B!„qÅ0„B!„BéÕZ½Àé>ßëXÈðpóM࿸sæ,hŽ!‹ÇäÿÈO±PãI!Lø¼ÔÒ“ðÑ/nƒÞµ–‡h¡IZ’ŤE.i{±x¤•È&%NéÔ^+qL»ýh{­öš­-íÀ{,zåU,|îqº ùÇnâDô¯ºR.~ÉO…QG´d'Ÿds¬ÐÃE"XÓÁ¸Z¯}¸¾„Ï„PFÚn+”1b–V¢›bNK¼Ç9¯ÎÅ¥¿½=ø´¸‰`§ÁdÅŸ|~ßÖëàó_x–š2±Ë ‹)صR.ñô6B!dŒòÿÙ»Ï07ê{íã·´Íë>îÆ6Œ1uSlpÓ ¢×PCHNBBIN’sΓç]£FEýN ¤üMÒåÓØô  cu`f‰A˜õ°7†0 (ÑX|š¤§%ñ/¬»ˆ?X­Ÿ?ô†vîÚg[µZÚ‚2**SS[¥ oœ¤£&PpcŠ=x’KL¶pŠw%½A&×pŠ×~ÞÁ›ü^W0Èýzš¶×«qÃæ¢~BÕÕª68õÙÚƒ0!gSŒW˜Å< '/ÛýC+îIöæ–L-4*òžÎsYƒ2YfÙ½}^øýl}¾<ùy„XÒÛC0r5Àø?ž:m¬¾xãɪ©©,ê÷%å’¾1¦ ¯ƒÂ0—t£eYëÚy_ÀaPR¢±ø¡’fI:0èYÐ>êêvéû^Õ’%]á—ìC>a¿PÌ ÓÑŒ/LPEe8­•Å+ãN±‡AœáìagPÅÝ(“Þ㸗#ôârÉ÷^ö×áÕV“©Q&ù¸i[½ömØTÔïA" 3Äz‘-üJ}–ɯV¿¶•œÂ%éçü1Ùƒ2~áœÌí4ùÝ3ù8s8ç³…ëõâßUî½Ê5#Y¶Œ‹­ Æ|±?ÏRMM¥nüÒ$M™zpQ¿()–¤ÿ1ÿzÐyÚ9 ³AÒ7-Ëz¼örF”œh,>DÒLI'= ÚGss‹þòç43Kü{û¶‹=Ìb_w>Î'3tÔ]ñõi8´_ÖÆ¯0H¦Æ¯0Iæ˜üÃ)Å4Àd ·ä6{úÞñÚ·~cQ¿¡šjUš Á´µÃx·Âø‡KZÏùµ¨x¬û6´„A{ðĀɈñ›Å”±ŸË5(ãJþ´,K³gÍׇ¯-J…X|‚/YC0’÷­ë£ö7tÛmӵ߈þEý ¤ì•tCÄ4ø‡«t3톩“ô¶¤7$ýʲ¬íí2'Â0 $Ecñž’þ(é‚ gAûùø£µzèg¯«¾¾Á|içPLuM¥Î»î$™'Ik€Io|q‡Sœç²µ²xi2µÍäÞòâÕ ãÞ/S'—דÜ/óëiܺ]{×µCf¿am¡—d(¦-ÓúYÛC ¹´­ä”ñØÛoÝ7@ãw.ß{zîÜ×#Ðck…Ùµm·þöûw´aU3ôbû‘wÆçñôÓÆéºë'ªºº²¨Ï%e«¤ #¦ñfЃ€Î … I5>½EÒf‹d€@”¬h,–t¤[ƒží'ß­îU‹nH,ø…bü‚/Ê=sìäƒ5ãÚ‰ª¬¬H ¾8Ã!þa’láç~ÙÃ)^a”TK¦à‹whÇ;4ãß“šË»­Æë}Ùß®½k7ØÞsûg–í»ÇpMªFÚÂ0òn…±7¥¤Eçrh[ñktqk”‹’Ή˜Æ’ ŠA”¼h,~»¤K = ÚGK‹¥'ÿú¡žyúcµ}?åÓSl(fðˆþºìkÓ4h¿þ97¦¤Â!¹5Àø‡Il!—B6¹†S¼öËŽÉõõ$Χ߿qëv5ØÃ0H„a†{·Â´~ŽavßIØ?(“=´’¡ÑÅ”)xo¯Žç=sk¾±Z,Í~þc}üÆy`\ǹ…`Oj;7zô@Ývû©6¼_QŸ9Jλ’"ÓØô @±À²Å/’ôIµAÏ‚öóÉ'ëôàý¯©¾~Oj±B1UÕ•:çê :zòÁ¾a’lá–L 0ÎýÒÛ`Ò[Y2·Íxµ¼xíç}½{¿ìm5ÙöÛW·M kÖõY‡{Ô¨jÔ~Žf˜+ãNÉÒÐâÛ¢â.q†T2ÝÓ¯-&õüäsRÇÙ[hr¸§ãõ$ïŒïÒ‹ÍÖ¦5u‰7³ƒB0’tÆ™‡éšk'¨ªª¢¨Ï%ç)I×DLcOÖ+€2@”h,~¢¤¨¤!AÏ‚ö³}û=xÿ«úä“õ޼KG„bŽšxf\w’*«*ÓSÒƒ*™Sœ ,þ-éûy7Àäº_® 0^¯Çs¿Œ³'öÞ[·M{V†©ÞD[3Œ½Æ«Å< '/ÛýC+…eü[hTä=ç²el³¬˜¿F¯=ñ¾ö54:C0ޝu‹ÁÔÖV韾:E'N8°¨Ï%éIߎ˜FKЃí…0 (+ÑXü I³$ z´˲ôôSéÉ¿~¨–[ÞÅ‘Žqg8—ŠI=8¼¯.þ§i2r€#\âvñol±Oüƒ/™Ûfœûy_’2™‚/îý²iò}={ë¶i÷ªuE}Æá5ª=²­&‘ˆI|nöÖÿ@ŒG[LÆpIú9GhÅ'Ìb¿§ßºWhÅ3ÐÎgïäãÄó[š-Íž9OŸÎ^Ö¡!Ë’ÆŒ¤[oŸ®!Cúõ£ä´Hº=b=ÐÞÀ²ÅHzZÒÔ gAûZ¸`½¸ÿUÅã»]–BC1’½9&ÙSYU¡3®íÕæ#TU© £⣱µÂØ›RÒ‚"Žs9´­¸‚+ÞÏψÉ3(c?çh§ ûe¼Zlš›šõö3hîßç«¥©ÅñaY~¡÷q!I;vˆ¾÷ï3tðÁCŠúLQ’J:5b ‚èH4À²Åo’ô¤Ê gAûZ²x£î¿÷ÕmÝÕ¶æÅ$¼§kûËv*q\QÖôËŽ×øSµµ¢8[YÚSl­,^-*ö–ÿV–TL¶VûóÝûy^o›ÕÙã¼—g£ŒÇ9Ë’ölÞªË×õY†k{¨fÌè¶ Œ”oˆÄ?(c_·bÒÖ½]\A™‚÷Îùžé¯qûæz½òÇÙŠoØÞö~9¿·u§TP&$é¼óM]qåñª¨õy¢$½&颈il z £†]B4?KÒ’ú= Ú×Î{õÐO_Ó‡¬q¶d Å(ä,wI»¶í/Ç^‡;Jç\7IÕµUÞa’´PŒ;ä⊑+ˆ’)dc À¸ƒ*má”\B6þá–Ô~¹¿ž†M[µcÙš¢>ÇpÏZÕŒ9 ñ¶ÛZ¼1¾M,¹­;Z`ÂÙÂ)éÍ-öãÔó“ÏIûµÐäÂi]_6o•Þyæ556+­Æ‚ÉÔ ã:¶‡`dI}úôÐÍߘ¦cŽUÔ爒õ˜¤/ELc_Ѓ0 è2¢±øÑ’ž—4"èYÐþf=?_|ì=57[…‡bÜç=Úbúì­ ¾·p¯Zõ8dŒG Kò±w+LZs‹ÇºoCKØ'(ã Ýd ÄøÍb ÊØÏy·Ð¤‚2Kç®Ôœ™óÔÜØ¬¬-09{…`$©_ßZ}ýÖSu”IQVU/éÒˆiü#èA€ †]R4¯”ô¤›‚žãïûTøÝ»jljn]q‡b‡Úbú½tÞS´ß˜!y‡IìáÿV–TŒW+‹s¿ÔóÝûy^_@hÇ«mf׆:m_ôYQŸW¸WOõ7Æ»¡%CÛŠ3\’[Pƾ·ýî°‹g€Æ+(“éž{{ÍÒ´¯Y³Ÿ«•±Õ9`Úþò¼ÆJk‰±[ÒG×7n›®þý{õ™¡d­‘tnÄ4æ=Â0 K‹ÆâÿGÒ•Þ‚.ೕ[tßO^Ò† ; ¶vç'^\[L8ÒÉç£Ï8J–,W°Ä/äâŠq7À8Ûf¼÷óo€Iíç²qî—!ø’åõìZ¿EÛÚ! S{èGSJZ8Åq.‡¶Wp¥­&,ÇqÆ@:0¸^ IDATLžAû9G€'ì”Ù¶a›^ÿÓlÕ×íL½!y`R‡–ízçq8,]|Ùqºø’cÓƒ`è*>R"³.èA€ †]^4ÿ‚¤ßHªz´¿={õ«‡ßÐ;o/Wz;L–PŒ”W0æ€ÃöÓ9_œ¤š^=²6Àxµ²x5Àx…S25Àd»W¶¶˜Ô½¼®wï—¸fçº-Ú¶peQŸS¸WOõ<|l!ÿ Œ}݈I[÷jt »‚3öö ÊäsÏ%ï-×Ü>RsSKzF*®Ævl=uËí§é°Ã‡õ9¡¤½ éòˆiìÌz%ÐņÝB4Ÿ*éIFг c¼ü…zô×僧©¹u%ä ÅØ~$ ÆôêßS3¾8E#ê ›x_œ­,^á¯p‹WË‹WÆ;ìâßò’ùþîýRçv­Û¢ø‚E}>áÞ½Ôëð±éᔌM,¹­;Z`Â9b\ëö½SÏÏ¥…Æ'œ’šö5iö3sµú“5éoF¾-0îç¸ZaÌ£Gêë·NWß¾=ŠúŒPÒ–ôõˆi4g½èÀn#‹Sâÿ¬`г c¬Y½U÷þø%­û|[† L!m1Îç…B!M<÷hpö‘’J ÂØƒ'^ 0©kÓ[ì¡”dHÆ?dck’É£&ßÐήu›µõÓâÂ0½{©çc}Â%Â)¶™bƒ2ž-4írOgP&¾.®7ÿ<[;ã»Ro@ÁÛW ¦¢"¬Ë®<^ç_xŒ÷¯,ºKÒ¿ELã‚(%„a@·ŇHŠJ:1èYÐ1öîmÒ#¿xSo¾¾4±à ¾ß“ÚgÔ¸a:ëúɪíSë“x…Sòk€QûÙ_üö³]ï¤ÉÚI>wçç›U÷Éò¢>—ŠÞ½Ôû¨q¹µ­¸‚'öG¸%CCKØ'Ìb¿§=Ì’¸Ÿ+œã ÉxÏpH‹g/Ѽç«¥¹¥0éÇõÒ-·Ÿ¦q‡+êsAIÛ+éúˆiü9èA€RCt;ÑX¼VÒ%]ô,è8¯¿ºX¿ùÕ[Ú»·Iží0¹czö­Õ™×MÖ¨qÃr ¥Ø‚'ÞA{»Lî 0©ý¼C6Îýüƒ/^×ïX»Yuó‹ Ãôé¥>G³H¼[aüš[ü‚2ÞÁ½ÂÙ1™ïiÊØÏ%çhlhԻϼ¯µ ×)[&±ä¾¦í¯ ljã­¯Ýrªz÷®)ê3AI«“taÄ4Þ z UÜqÇAÏÐ©Æ ­mZ²±á Iý%M ztŒ¤ã'¨…Ÿ¬Sýö=­AïÐKæãÄš_0¦qo“¿¿R-Í-1v¨Bm†lQ÷šWÛLúµnVëše¿Æ³°\Ï·’ÏiÛ¤íœÕú|ÇÏß[¿K{6mÍ0sváê*õ6(kÛŠ=ä’kPÆj±cÜaÏWP&Ï{n][§W}]ukmï‘gÆñIäÜ“|Pëêë&ê†/MRuueQŸJÚrIÓ#¦1/èA€RE3 èÖ¢±ø­’î‘ztŒ}ûšôÛ_½­W_^”Xȳ&§`Œ$…BÚoÌuÃÕö­u´²$`ì­,mkž­1^­0îý¼[f²µ¼´´ØÎùÞß¹_ýšÚ[VÔçPÙ§—ús¸3œ’ š„3bü^ÚZ`Ârg Ää”±ŸK›W!-zg±b/Ï—•xÓ^·wŒíïqëAëñà!}tÛ·Nט±CŠúPòæH:?b›ƒ(e„a@·Å/”ôI=ƒžç­7–ꑇßPCCSjÑÞãxXx0¦Gï~íd:l?[Å+¨’8N…\2œ³…T²…\ìÏ÷ßÏ;dãÜ/unÇšMÚüÑÒ¢ÞÿÊ>½Ô÷ØÃ­0Žv˜°Gh¥5xb_·bÒÖ½]®àL†½ý‚2^÷Ü·gŸÞ{ú=­_ºÞñ:ÓÚ_‡>˜Œ×H'N<@_¹ùõêUSÔg€’÷¤¤k#¦±'èA€RG@R4?QRTµ ]ØúuÛuïÝ/jõª:e Áx­¹ƒ1ik‰…P(±~ìiGèÄsU(¤´pJ~ 0ÎpŠWØÅÙøâ·Ÿíú´½¡÷½êWmÔæ–õÞWöí­~ã÷o[ÉÔÐö¸.ÙÎ!ãZ·ïz~.-4‰=êVoÖœ'ßÕžúDf¡#0’¥ÊÊ ]sýI:kÆ‘E½÷( ?‘ôˆi´=PÃ´ŠÆâJš%éРgAÇillÖï~óŽþñ·O%©µÙ¥c‚1ì3®Ÿ¢žýzz´¼d ¾ø7Êd Ò¤‡]œáï†ÿ–™äõõ«6hÓ¼%é¯9«Ôw•}{«ÿqG´O2†V|Z<ƒ2®uG L8Ç@LŽ÷ ÉÒâ·ë“×>•ÕÒâóR3„]¼ÖÜšÖïk‡ ï§Ûþù xРßk”©fI·ELã§A”Â06ÑXÜô´¤iAÏ‚Ž5çåzøg¯kÏî}mkùclÖjzVkúÕ“´ÿ#ÓZYœAïVËdÉÒSDÈ&Õ6“~ýöUµñÃÅE½ß•}{Ë8þHï¶• -,Ž[H%v…V|Â,ö½SëÉ Kê8[ ÍÞÝ zÿé÷´qÅÆÔ‹j§ŒdÉþ5íI“Æè+_›¦ÚžÕE½ç(y»$]1hЃå†0 €K4¯–ôI_zt¬MëuïÝ/jŲÍÉ$L›v ÆH2O=LÎ/…C¶°Izð%—ÿ°‹ÿ~™`RûyÝ_ÚþÙmø`QQïuU¿Þ2N8*s+ŒOPÆÞÐâXÛZ`\!šì˜ô¶ïYBÚòÙ&½÷ô»jØÑÐújr ¿Ø²`$©ª2¬ë¿4Y§ŸuxQï5ÊÂI‘ˆiÌ z UÜqÇAÏPRÆ ­m^²±áiI•’¦=:N¯Þ5š6ýPíÞ½OË–´6~¸B1©¥|‚1¶…Ö?Û¬µ‹Öiä¸áªéYÝŽHœ´rËJe'ÒÎ)Ô¢°Ý°-TѺŸå&Ó½$[(#yÿã¸aÛí\·Åó½ÉUEMµzŽš\I†\ -^á”Lë^­0aŸë\¡›L{‡diÑ ôat®šö6z¼ßÅ`’ ûè¯ï}?¢c]ð{Œ²±@Ò©ÓXô @¹¢ ƒh,þ%I?W"ƒ.ìýwWê羪];÷¦s Æ8³‡cª{VkÚ'ésÿ¶V—dKâØ»ÆÙè’©Q&õüL 0þí2¶&™ÖÙ¶}¶AÞ/îßíWõë£̶æÿ@L¶¶˜ AW Æ7(㺧=(“<·wçÍ}ú]m^µ9‡ð‹mÁµîùý«kmÊ´Cô¥¯NUUE¼Ã(¯Jº8bÛ‚(g„a²ˆÆâgJú«¤>AÏ‚ŽµeóÝw÷‹Zºxcz&ï`ŒëÀuÙá“Õ„ ŽS(N ¾d §8ƒ/É Mzð¥íš–TÈ&=xãÜÏ;x#m[¹Nëß+2 Ó¿M<:z »Â)Ép‹k݈ñ[w?ßœq<Çëž{o^±Q<óžöînH½€Ã/ží/RZF’jª+ôůLÕ)§Zø‹rò{I7ELc_ЃåŽ0 @¢±¸)éyI#ƒž«¹¹Eúý=ÿìG©ü‚G¦=Â1GÐôk§ªÏ >®pŠWPEÎF—ŒÁ¹Úc¼C.~!÷½¶­\§uï¶C椣.¾ -®æG¸%œC &¹WØc½íúôvY–½þ‰–¼½(ðKb1§ŒíxäþtûwÎÒÈQFáo*ÊÉÓø~ÐC]a€EcñJbŽzt¼ysWég÷½¬;œ'r Ƥ–3‡cªjª4éò‰:ð˜Ñ¶ðJî 0þ2–ï~™Â1©ýRçâ+ÖkÝœO‹x7a˜Á“Žõ­ø4´xe\ëö Œ;Dãˆñ¸gÃŽ=úðéwU·f‹‰—bÂ/>k§ž~˜nøòÕÔTøn¢Œ4JúJÄ4~ô @WB ÑX¼¤¿H:;èYÐñ¶ÖíÔýw¿¨E Öû^ŠÇ´.›8V.ûÞ©õÌ-4›—­×¼çÞÓ¾=ûò ¿H9`$©GM¥nºùMžvH¡o#ÊËvI—FL㥠ºšŠ;î¸#èÊÆ¸¡µû–llø³¤á’Ž zt¬ÚžÕš:ýP5·´hñ‚u© D>Á˜ ëöpLÝÚ­ZýéZ ?x¨zôêÑv«T®¢u+ä8væ.B’%YöÀ•ü‘¼Þù|GøÃ µ:ïµ'¾Cõk6{¿¶UÔÖ¨×èáΆ¯@Œ+¸âXÛZ`\!šì˜ô¶˜eiáË1}ò÷yjnln{Ã2þÿƒò¿Ø×G8Hÿ÷® tÄQ# ~QVÖH:-bs‚èŠh†(P4ÿ7Iÿ!Ϫt5±y«õàO^R}ýžô“펑¤ªšJtÉDxܾ 0öÆ—¶v™Ôõ­û¤íg{œÖ(“¸Þ²,Õ-[§µïÌ/à]K©6újè”ñŽvw8%ìZI[÷j… û\ç Ý$Ï5ìØ­Ÿš­më¶æ×ú’iÝçÜg©ë¾4YUÕù¿q(Gó$1õAtU„aŠů’ôI5AÏ‚Ž·-¾KÜý}:­¤w *CÐ%ŸsŸ0F.>QáÊŠD`ÅTI·…\lÁ—¶pŒ-øâ ½¤B.îÐL[PÆu¯­K×jÍÛŇa†M;ÞÑúâÕ “Þ“!èâ Äøe\÷Ü´äs}<ó}564:‡l§ðK¢^ÇRmÏj}åÓuÒäƒ }ÛP~fIº"b;ƒèÊÃ)‹O‘ôŒ¤AÏ‚ŽgY–ž|ü}=ùøûJ}·rüpÈ€Ér¾ß°þšvíTõÒÏ£&=co€q†]rk€ñk”©[²VkÞ*2 3 ¯†Ÿr|z&ì ­Ø1~ëîçÛƒ3Žç¸öV‹¥E¯~¬ÏÞ_–À%Û9«í/IÒAÑmß9KC‡÷+äíByú¹¤oDL£9èA€®Ž0 @;ˆÆâã”h8(èYÐ9>­Õ?~Qñ­»=ò,>­1RöpŒëšŠª M¸h‚:aŒ-ãÝ“KË‹åz¾£L*xS·t­V¿+ô­’$Õ è§a§ïhh±7¹´µÀ„ä ·„sÄ$÷ û7ÍìÙ¶K==[Û7ăeû~4Çð‹ýòs"¦®¹q’*++ z¯Pv,Iÿ1ÿ z » ÐN¢±ø`IQI‚žcûö=zðÇ/*6oµm5äޱýH“C@æÀñiÂ%®ª°µÂ8Ã.^á–TËK¦àK²QÆÙ.“b z ;! ÐŽ¢±x­¤?Hº(èYÐ9,Kz批úËcsÔâù]›W8&±îŽ‘<2}÷Õäk¦ªÿpÃrI Ť7Ȥ®O»$ÎÛ»öÛ¼xV½þqïPBÍÀ~qÚ‰¶ ‹;¸Ê”ñY··¿¤Ö[ßó–-zé#­™·<} ¬ÁÇ×Ó\ë–tð¸aºý_ÎÖà!} {ƒPŽê$]1·ƒènô³h,–ôcI·= :Ï¢ëtÿÿþMu[v*sL†pŒïsR*ª*u\äx™xˆ#¸bo‹qaÒƒ/ÉÐKâœWhÆÞ<³yñ}öÚG¿7R" 3òŒ ®v—ôö—¶uWPÆ}.[ fw|‡bÏÌÑŽñìÃel}ñ>—\ …,{áx}áú“UQ.ðÝAZ&iFÄ4–=Іè ÑXüI÷Jâ_Èw;v4èg?~QÎýÌu&s8Fò,‚I÷8·¿9Z'^z²*ª+mAïgØÅ¿Æ/³eñj­|µ=Â0awð%bñ[÷j… »ƒ2©V˜ ViÁß?Pó¾&ç™Â-òi}I[JôéÝC7ÿó™Â¿/(K³%1-AtW„a:P4¿@Ò%õ ztË’f>ý¡þôè;jnjI,¦…YBžÝ‹þ™Ä5½öÑÉWO‘1b`[Å«Æ;ø’l”ñj…q6Êl^´Z+_™Wð{"I=õ×È3'¦‡]Âr5¿Øƒ.™1îu«©YK^š§Ï?^Ùz×L¡ÿó¾¡Ûá¡Gì§[¿{¶ê]Ø‚rõWI×FL£!èA€îŒ0 @‹Æâ'HŠJô,è÷8t˜#ìânq„c|‚/é2–6/\­/è1N†´Žë{ǃúkÔY')¶…X\¿uG€&ì Î$Ÿ³{ëvÍf¶vm©÷!Ãw >­/ÞO³ I\z‚.¿v¢**(}êf~,é;ÓàKu `„a:A4?@Ò,I‡< :Ñ®{õÐ=ÿÐû³—§Ci<Îy,dl‰‘F±¿N¸ìdUö¨v…b¤Ÿ{ðÅÙ(c{lI›¬Òr¯0Lz ê¯ýÏ>ÉÕü’ ¾ØÂ-á1ÉLk0fÃüÏ´ø¨¹±Ù€L¡Ï%+ía¿þ=õoŸ)süèÂÞ”«fI·FLãgA 0 @'‰Æâ†¤§%M zt®žýH=ò¦ššš•¹!&—€ŒÇbëa/£·&^5EF Nµ¼¸‚0éÁ—TŒeɤii=Þ´`•–¿ôAÁ¯_j Ã̘äh ‡]áu{P&¢Iœ³›´øhç«7Éhɰä|q/nŽÔ­ß=GÆ€^½~”­]’®Œ˜ÆÌ B EcñjI¿–tuг s­XºI÷þçóÚ¸a{b!¯L®!)\Ö‘g×!“w¶Ã´aœ 1Îg&uýÆ«´ìŹþ7ÍÊRíàþ}îdg L2ðöÄø¬'ÛbvmÙ®OŸ™­Ý[ëýné;‹ÿ5éçB¡.ùÂ]zõ…B…¾~”© ’΋˜FqI0íŽ0 @¢±ø]’þoÐs síÙ½O?¿÷šóæ€ÉõIéã/›¤ªÚGŒwð%qì ʤ‚4>ý¬5 S¸ÚÁ†8wRZûK[ÓKØÕã:gĬÿx…–½w³2¦-ú|EÚßè©[¾{ŽŽÓÒ¿¿_à«me°¡#SRí.ien‹ KVc“–üýmZè‘O(¨ Æyý«RsühÝòݳկÏü_,ÊÝ+’.Ž˜Æö à0 @€¢±ø’þ*©oг s­Z±Y?ùçµþó¸ï5‰Œû‹”t^Ä4Ö=€ü†(QÑXüJI¿•Tð(Àçk¶êž»žÓê•[2_XH¥‰í)¡PHŸbêS‘J–§Øƒ1–>ÿx…>7;ÿûØô:@‡\6Ý€IÜ;܌ٹn‹–Î|G{wìN=©¯.³|ßYYY¡k¾2M3._Àæè"ž—tEÄ4ÜÕCÊD8èà-bK:]ÒÖ gAç1j€þëÁktú 3™PI„CÜY¶sþ¸Y©?V‹¥¥¯|¬ÙüM{wìi ©¤þ(Jdgr¹OÆ,…$…’Zƒ0Éý×½»PŸ>þ²öÖïvÌæ)Ÿ×Ú¶WâÜÐaýt×}W„éÞ’tA ¼Ñ P⢱ø!’fIô,ÆÛ¯.ÒÃ?ù»öìËreÈñ#_Õ½zèèK&kÐ!#í0­a™u-קϾSئ­z ¨q—Oo Á„B!57ìÕŠæhÛÊõ…mjù¤™0eœ¾öí³Ô³EKÝ”%é_"¦ñ£ P<Â0e ‹–ôœ¤‰AÏ‚`lø<®{îzN+–n´­¦R/¡œ0¡Œ‡ IM>R‡œ1^–B²,KŸÏ[®OŸy»€©Sz ¨qWœ®p8„Ùùù&-~¶öíÜ“~q!Ç•m—¦žSUU¡nž®3Ï?¶±Ñ54Hº.bO=€özd1Í’¦Kz*èYŒa# ýðktöãYKJ=°dY~Ôö'Árþ±\Z,­xc¾Þýå Ú»}—B¡P"0ã¾.ß?²ËÒº9ŸhÑŸ_Ѿ»}¯µ½ÈÄÔm§ý_«ã9–4|„¡ÿ|ðZ‚0ÝÛI§„ºšaÊH4Kº[Ò7ƒžÁy÷Í%zèG³´kç^ÛªG5LÎm1ÞO¬ª­ÖQ—LVãî}šÿÔ[©³9îkÿê±×ð{Á­˜5[õ«“í6E|7éùÔÔâäÓ×W¾y–j{V~”»e’Ή˜Æ² оÔ¡h,þ I÷‰æßnkÓúíºçÎgµlÑúÔbÖJ– |N÷6@;6lÍg¼4U½j%ËRãî†ô“Y¿¢ÌrítuM¥n¼åtvîÑùŽˆ®åIDLcKЃh„aÊT4?_ÒŸ$õ z£¹©EýâUÍ|â}×™ÂB/%'§¯.S=Pßúþ…ÚÿÀÁ6ÊÂ’®‹˜†Gò @W@ ŒEcñã%Í”44èYœ¹ï,ÓOÿ{¦vÖûüÛßðK©¦b2|gésꔳÒM·Ÿm0Ð IDAT©šU3ÊÅÝ’¾1 ¾øº0Â0e.‹ i–¤ÃªÛT¯{~ð¬²Ö'ãR@𥣲2}%éý¤šš*}ù[giÚYG5Ê^³¤["¦ñPЃèx„aº€h,Þ_ÒÓ’N x¨¹¹Eÿêu=û§9Êùk¿¼/ù>!Ïïó¸|ÿƒë[?¸H#ö˜ß=ÐÕì’tEÄ4žzƒ0 @Å«%="éš gA°æ½»BüÇsªß¶[!ßìJGÕ¾´ÿï--K:=rŒn¼õLU×TvâL(Aë%1ƒ@ç! ÐÅDcñ;%ý{Ðs X[·ìнw>«­.èùþ!šöSÈW“µ=«õÕïÌФÓoÿPn>•4#b…ý’([„aº h,þEIKª z§¥ÅÒ_~ó†žüÝÛ²Z<¾L ¼Õã1›ÇÒc‡éŸï¼XÃF?JÝË’.‰˜Æö ÐùÃtQÑXütIOJêô,ÖüVê¾;ŸÕ¶­»‚¥`g_tœ®¿å UUU= ‚÷¨¤/GL£1èAƒ0 @Å”4KÒ¨ gA°¶mÝ¥û~ðŒæ°²ðMB6ÇñdÏÞ5ºù_#šxÊ¡ï.厈iü è!‹0 @Å÷“4SÒ±AÏ‚`Y-–žüÝ[úË#¯«¥Åõ½`¡A—öâñ=åÁ‡í§oÝu‰† ïÀ@(1’nŠ˜Æï‚@ðÃtÑX¼·¤¿H:'èY¼­Ö½ßJ[·ìz_ç]1A×Þ|º**ÃA‚àm—tqÄ4^ z¥0 @7Å+$ýTÒ?= ‚·cÛnÝç3š7gYW·gkLæï#{÷­Õ׿w¾N˜2®ï‰2¶JÒ¹Óø4èA”Â0ÝL4ÿ®¤ÿVû&P†,Kzæ±·õ§‡_Uss‹ã\¨ƒ;¼¾–wäH}뇗hÐÐ~{s”‹$1 A ´†膢±øå’~'©&èY¼Åó×è'ÿþWmÙXÈýC!é‚«'é _®ŠŠp 3 äÌ”teÄ4v=€ÒC ›ŠÆâ“$=+i`г x;ë÷è;ŸÑÜ·ÛV;ª&õdßþ=uË÷/Òø“ÆvнP†~&éÖˆi4=€ÒD ‹Æâc%½ iLг 4Dÿ4[¿ð%57ùäòÍÇdøúñðcGë›w]¢ƒûæ¹)º(KÒw"¦ñã PÚÃtsÑX|¤ç$ô,( Ë|®ï mZïýCá.¹aª®øò) ‡Ãr”I×FLã¯A ô†€¢±xIIº$èYPvïlÐOø¬æ¼² ]÷í? ·n»ó™'Ô®û¢¬m‘t~Ä4f=€ò@’¤h,’ô#Iÿô,(/<ñ®½÷ïjll*z¯£Ž?H·ßu©úìÝ“¡‹X*iFÄ4–=€òAÑXüë’î“Tô,( +¯×Ýÿö¸6¬ÙZÐóÃá°.ÿò©ºôÆi …Cí<ÊØÛ’.ˆ˜F]Ѓ(/„a&‹G$ýIR¯ gAiس{¯úá³zëÅùy=oÀà>úæ\®#ÆÐ1ƒ¡\ýEÒõÓhzå‡0 \ÒLIマèBöIúRÄ4 z(a”¬h,ÞKÒŸ%ô,@°MÒEÓx-èA á üDLc—¤ $ý,èY€2÷™¤“ Âè h†@YˆÆâß–ô¿’BAÏ”™¹’΋˜ÆÆ €ö@e#‹_*é÷’z= P&ž“tUÄ4v=´—pÐ¹Š˜Æ_%&iKгeàAI„ÐÕÐ €²Å–4KÒØ gJP‹¤oGLãž €Ž@e)‹”ôœ¤“ƒž(!{$]1§‚:J8è€BDL£NÒi’žz Dl–4 €®Ž0 ÊVÄ4$]!éGAÏl‰¤‰Ó˜ô ÐÑB–e=P´h,þ5IHªz “½)éˆil zè „aÐeDcñs%=.©wгäqI7DLcoЃ@g =Ð^"¦ñ¼¤iúÿìÝ[¬¥g]Çñßljµå`^LĤrŽ¢_.<° çCÛ§¥ tªR`{¼ ÀT%ä "&ìRö ´.:œ.z#à….cD(I)Òj_ìh›–ÚíEÇPK§ìé<{?ë¿×çs;½~ùßLfÒïz’¯õÞ{àÍIÎÂëÆË0ì;‹åüˆ$×$yBï-° îHòÓ8¼¿÷€Ä0ìK‹åü½I>œäY½·@CG’¼d‡OôÐËFï°¦qøÏ$/HòG§@+×'yšXw^†`ß[,ç×'ùíÞ;àüm’3¦q¸®÷€ÞÄ0¬…ÅrþÅ$'ù®Þ[à8}:ɹÓ8ÜÜ{À*Øè=öÂ4œäyI¾Ñ{ ‡Kr׋0B€£¼ ÀZY,çÇ'9œä‘½·Àwpá4oì=`ÕˆaX;‹åüI>–äÇ{o{q{’—OãpYï!«H ÀZZ,ç&¹2ÉY½·ÀÝÌIΞÆá³½‡¬ªÞ ‡iþ;ÉÁ$¿ß{ õ¯Iž"„¸o^†`í-–ók“¼5ÉÞ[X[_L2MãðõÞCV’,–ó‹’\šä{zoaí\ä¼iné= ‚Þ`Lãðá$ÏLòï½·°VÞ“ä! ÀÎyîf±œ›äãI~¨÷öµ;“¼v‡wõPîa±œ¿/ÉÕI~º÷ö¥[“šÆá£½‡T´Ñ{¬šiþ#ɳ’|¨÷ö’#É“<¨÷ʹ"ÉG_àmôLãp8ÉÓ’\ß{ ¥¼)É!! @;^†€ã°XÎOr8Ézoa¥Ý‘ä×§qØê=`¿ÃÀqZ,ç‡$ùp’g÷ÞÂJ:’äÅÓ8|²÷€ýh£÷¨f‡›“œ‘ä{oaå|5ÉS…0»ÇË0pËù·’üNffle’3§q¸®÷€ýL 'h±œ!ÉÅINî½…n>•äÜiŽô°ßmôÕMãð'IžŸä½·ÐÅŹëE! Àð2 4²XÎOr8É#{oaOl'¹p‡‹zX'bhh±œ–äcI~¢÷vÕíI.˜ÆáòÞCÖ[,çS“\™dê½…]1'98ÃçzXG½À~3Ã-I&yoï-4÷/Iž"„èÇË0°‹Ëù5IÞ_L³|!É4à ½‡¬31 ì²År>'É¥INé½…ûíª$‡Ž¾ú@G¾vÙ4IòÌ$7öÞÂýòî$/¬/ÃÀY,çÇ&9œä‡{oaGîLòšiÞÝ{ß"†€=´XÎMru’Ó{oá>Ý’äÐ4WõÀÿ·Ñ{¬“inJòì$ì½…cº!É3„0«I {l‡Û’¼4ÉïöÞ·ùR’'Mãð…ÞC¸w¶··{o€µµXοœä}IÐ{ ù\’ƒÓ8̽‡plbèl±œ_äCIÔ{Ë»<ÉÓ8ÜÞ{÷m£÷XwÓ8|<ÉS“\ß{Ëšº(ÉùB€¼ +b±œžäš$?Ö{Ëš¸#ɯMãpqï!ìœVÈb9?$ÉŸ%yNï-ûÜ‘$çNãð©ÞC8>½ß2ÃÍIÎHrIï-ûØuINÂÔäeXQ‹å|a’7ôÞ±ÏüM’3§qøjï!Ü?bXa‹å|~’$9¹÷–}à“I^<ÑÞC¸ÿ6zŽm‡K“5ÉI^Ø{ËŠ»)ÉÁi®í=€¶6zvn‡[’œä÷zoYa_Nò! Àþäe(j±œ_ämñ¥7w÷ù$/œÆá†ÞCØb(l±œÏNrY’SzoYMrh‡[{`÷øÆH(l‡&yF’{oéì]IÎÂì^†€}`±œ“äp’ÇõÞ²ÇîLòêiÞÓ{{C ûÄb9?4ÉUIžÚ{˹%ÉyÓ8\Ý{{g£÷ inJòœ$WöÞ²¾žäéB€õ#†€}d‡Û’œ—äM½·ì¢/%yÒ4_ì=€½w`{{»÷`,–óf’÷%9©÷–†>›äìiæÞCèC ûØb9??ɇ’<¸÷–.Kòòinï=€~Ä0°Ï-–ó“\“ä´Þ[NÀ§q¸°÷úÃÀX,çÌ]AÌØ{Ëqº#ɯLãpIï!¬1 ¬‰År~H’?MòÜÞ[vèæ$çNãðéÞCX½{c‡›“œ™ä½·ìÀuINÂpO^†€5´XίKò†$zo¹äÌi®ï=€Õ#†€5µX·’\’ääÞ[îæI^2ÑÞCXM½}LãpY’ç&™{o9êýI&! ÷ÅË0°æËùG’NòèN¶“üæ4oîôù"†²XÎߟd‘ä§öø£oKò²i®ÜãÏ (1 $Y,çS“\žäg÷è#oJrp‡k÷èóØ6zVÃ4·$9'É{öà㾜äÉBŽ——a€o³XίJòŽìÎêüe’Nãpã.ülö91 p¯Ëù`’Ë“œÒðÇ~$ÉùÓ8ÜÚðg°Fvã[€}`‡«’<=É ~ä;“¼XÀ‰ð2 pŸËùÑI>žäq÷óGÜ™äUÓ8¼·Ý*Ö•øŽËyHrU’§ço½%ÉK§qøóö«XG½«o‡9És“\q¿íëI~F@Kb`G¦q¸-É¡$íà?ÿû$OšÆá¯vwëæÀöövï @1‹åüÊ$ä¤{ùåÏ$9{‡oìé(Ö‚—a€ã6ÃÅIÎJrä¿ti’ç aØ-^†î·År~b’k’œ–ä Ó8¼¾ó$ö91 pBËù´$§OãðÁÞ[ØÿÄ0”±Ñ{씀2Ä0”!†  1 eˆa(C @bÊÃP†€2Ä0”!†  1 eˆa(C @bÊÃP†€2Ä0”!†  1 eˆa(C @bÊÃP†€2Ä0”!†  1 eˆa(C @bÊÃP†€2Ä0”!†  1 eˆa(C @bÊÃP†€2Ä0”!†  1 eˆa(C @bÊÃP†€2Ä0”!†  1 eˆa(C @bÊÃP†€2Ä0”!†  1 eˆa(C @bÊÃP†€2Ä0”!†  1 eˆa(C @bÊÃP†€2Ä0”!†  1 eˆa(C @bÊÃP†€2Ä0”!†  1 eˆa(C @bÊÃP†€2Ä0”!†  1 eˆa(C @bÊÃP†€2Ä0”!†¨ä3Ý IDAT  1 eˆa(C @bÊÃP†€2Ä0”!†  1 eˆa(C @bÊÃP†€2Ä0”!†  1 eˆa(C @bÊÃPÆI½üŸÍÍÍŸKò²$§tž²G’¼ekkëÚÞCŽÅ=Ûr϶ܳ-÷lË=Ûr϶ܳ-÷lË=Ûr϶ Þóí[[[Ÿé=äX Þó[[[Ñ{ȱlnnž›äqÏ&ܳ-÷lË=Û*vÏÿÊ]¾¯ò=ÏIòÊ$§öÞ²îÙ–{¶åžm¹g[îÙ–{¶åžm¹g[îÙ–{¶åžm¹g[îÙ–{¶åžm¹g[îÙ–{¶åžm¹ç‰¹9ÉE¶··{Éæææc’üsïÇé«I½µµõÍÞCîÉ=Ûr϶ܳ-÷lË=Ûr϶ܳ-÷lË=Ûr϶ŠÞókIéžÍÜäQ[[[·örO›››Hò•Þ;Ž“{¶åžm¹g[îÙ–{¶åžm¹g[îÙ–{¶µÊ÷<-Éu½w'÷lË=Ûr϶ܳ-÷lË=Ûr϶ܳ-÷lË=Ûr϶ܳ-÷lË=ÛrÏó•Þ Ž:%ɽG§ÿYÅÿ1é(÷lË=Ûr϶ܳ-÷lË=Ûr϶ܳ-÷lË=ÛªxÏoºgSß\Å8:êÁqϖܳ-÷lË=Ûr϶ܳ-÷lË=Ûr϶*Þs{…ïùÀ$«úwácYå{žšäöÞ#Ž“{¶åžm¹g[îÙ–{¶åžm¹g[îÙ–{¶åžm¹g[îÙ–{¶åž'æ¶“z/H’­­­¿ÛÜÜ|e’CINî½gþ-É;z8÷lË=Ûr϶ܳ-÷lË=Ûr϶ܳ-÷lË=Ûr϶ܳ-÷lË=Ûr϶ܳ­‚÷¼!ÉÛ{8–£÷|E’óãž'Ì=Ûr϶ܳ­‚÷¼1É;{8–­­­<úç»{6°µµõO›››$ù¥$ßÝ{ϸg[îÙ–{¶åžm¹g[îÙ–{¶åžm¹g[îÙ–{¶åžm¹g[îyb®Oò¶ÛÛÛ½‡ÀŽlô;%†  1 eˆa(C @bÊÃP†€2Ä0”!†  1 eˆa(C @bÊÃP†€2Ä0”!†  1 eˆa(C @bÊÃP†€2Ä0”!†  1 eˆa(C @bÊÃP†€2Ä0”!†  1 eˆa(C @bÊÃP†€2Ä0”!†  1 eˆa(C @bÊÃP†€2Ä0”!†  1 eˆa(C @bÊÃP†€2Ä0”!†  1 eˆa(C @bÊÃP†€2Ä0”!†  1 eˆa(C @bÊÃP†þ—½;ά¼óÿ}TÅR 0«Y…1Ð#ãM€eÚnlãt–žN:=n»O2™LÏt2s’é$Ç™$ãŽÓÓéLÒÓ9 xÇ#lcÀxaP€Ù 6T PP{é™?®ªJU%0KU]½ÒçsÎEÒûʺß[àsê^=ßçt e:†2 C€Ž¡ @ÇP† c(ÃÐ1”aèÊ0t e:†2 C€Ž¡ @ÇP† c(ÃÐ1”aèÊ0t e:†2 C€Ž¡ @ÇP† c(ÃÐ1”aèÊ0t e:†2 C€Ž¡ @ÇP† c(ÃÐ1”aèÊ0t e:†2 C€Ž¡ @ÇP† c(ÃÐ1”aèÊ0t e:†2 C€Ž¡ @ÇP† c(ÃÐ1”aèÊ0t e:†2 C€Ž¡ @ÇP† c(ÃÐ1”aèÊ0t e:†2 C€Ž¡ @ÇP† c(ÃÐ1”aèÊ0t e:†2 C`†*¥¼£”ò?•Rî(¥œ6Åûç—Rn+¥|¶”²´ŒoÖܶ°ë”RJry’+’ô%)[ÞšâÛ»’¼oâø¥”[’\•äëµÖU»?-À›Wj­mgàm(¥äi 0%™3Å·^k½w‡ÿÝ…Inžâ{7&ùN’«“\[k]½K¼ &Ãt RÊ>I>–¦ÓŸdþ.üñó’\:q¬-¥\Ÿ¦s}­uÝ.<À›¦ Ð!J) ’\œä3I>šdï=pÚ…I.Ÿ8V—R®MSŒùN­uã8?Àv”a¦±RÊÜ$L3æãIµg¿$sâXUJùZšbÌ-µÖñs³ˆ2 À4SJéJr^šÌåIl7Ñ”'ù‰cE)åËiŠ1?®µÖV“3Z±V`z(¥œ¦ó©$‡îâz­õÞÎwa’›wñyžJrM’«k­÷ì⟠  ЦRJošÌIŽÚ§ÚSe˜ÉI3-æêZëûñ<À,¢ °‡•RŽÏ¶̉{è´m”a&»/ÛŠ1?ßCçf ¹m˜ J)G$ùtšÌ{ZŽÓ†Ó&Ž]JùqšbÌ—k­ËÛte€Ý¤”rp’O¥)Àœ“¤´›hÚxïÄñïK)·¦)Æ|­Ö:Ún, ”ZkÛfŒRÊâ$ŸHS€¹0ÉœVmsz­õÞÉ/”R.Lrs;qv²)ÉwÓc¾Yk}¹å<À4e2 ÀÛTJÙ7ÉeI>“äÃIæµ›¨#ÍMrñı®”òí4Řëj­k[ML+Ê0oA)e¯$—¦™si’…í&šQöJ3]çI^)¥|+ÉUI¾SkÝÐj2 uÊ0oP)e^’¥)Àüz’ýÚM4+ì›äoLc¥”¯§™ss­us«É˜UGÆ&ùh’M½Ýߘâý?N24ÐÛ}×0Ë(üŽRJW’ Ó`~#ÉâVÍnÝIþîı²”ò•4ŘÛk­µÕdÐ!F‡úÎLò™$Oõô_9Åû_OrS’¯öô¯ÜÓù`º›—ä#iÖ \–fSÇÏ'Ù© “ä³Iþdpdì±4¿Ï¾z ·ûÁ=•`6Q†ØA)¥$yošYŸJ²´ÝDLáà$0q<]Jùr’«j­w· ¦ŸÑ¡¾SÒ<ç¸"É1/þ5¾ý}I>žä £C}7§Y¸óõžþá±Ý¦‰Á‘±9Ù~ãÌî7ù#ŽMòO“üÓÁ‘±²­óø®Ì 0›)ÃL(¥¼;ÍΨŸNrdËqxãŽHò“üãRÊ£™xˆXk]Ön,hÏèPß±ižq|&ÉÉoáGÌIòÁ‰ãK£C}7¦¹çþVOÿð+»,(Lƒ#c%Í&W$ùdšMw…S’üIš‰1w¤¹¿þò@o÷/wÑϘ•”a€Y­”rB¶íŒú®–ãðö—äŸ%ùg¥”‘4¯©µ>Ñn,ØýF‡úÞ‘¦sE’3wសd`âX;:Ôw]š{îo÷ô¯Û…ç€=npdì=iî¥?f3ÆÝ鬉ãߎŒ '¹*ÉWz»ŸßÍç˜q”a€Y§”òÎl+ÀœÖjv§Þ‰ã_•R~š‰Ýuj­Ï´ vÑ¡¾ƒ’\žæ9G_’²›O¹0ÍLòòèPß7ÓÜs·§xÓn>7ìƒ#c'¦™¦zEšM÷´’伉㋃#c7¥¹¿þÆ@o÷‹-äè8Ê0À¬PJ9$ɧÒ<ÈzoËqØó~mâø·¥”¦yˆøÕZë íÆ€7ot¨ï€$ŸHóœã¢$sZв(Éßž8FG‡ú¾šæžû=ýÃã-e€) ŽŒ•mgö¶g²9I>ßáµÍMò‘‰c})eëî:µÖ5­&€$£C} ’\’æ9ÇG“ìÝn¢7ì$˜äG‡ú~žæ~ûêžþáûZMÀ¬082v`’ËÓÜOŸ—ÎÝ8sï$Ÿž8^ûFš{ì›z»7µš `°8èx¥”…i„\‘fÈ^í&¢-HS¢úõ$¯–R¾•æ!âP­uC«É˜UF‡úæ&ù`šçO²¨ÝDoÛ;“üQ’?ê{8̈́֫{ú‡Öj*f”Á‘±EiHs_=ÓÖFîŸä·&ŽGƾšæ{x ·{¼Å\­™iáf‰RÊü4=®Hò±$û¶›hÚúa’/$¹Š÷nKò›ivjýµ=jšÛ'Ég&ŽK)ßHóñûµÖÍ­&`FêëJ³Síg’üF’ÛM´ÛœäŸ'ùç£C}÷¤Ùˆâšžþá§Ú@'Û;ÍÆ™ŸIrqšMgƒ“üÇ3ƒ#c_Nrõ@o÷OÛ°g•ZkÛÞRÊœ$ïOS€ùD’îvM[ëÓ”7¾Pk½÷üJ)g'ù\’O&™·³u²ç’|5ÍBáê/Ò¼M£C}g§yÎñ©$‡îáÓ¾§ø¦È´"ÉÁ{0GMò£4÷Û_éé^±Ï @‡›Ÿ¤?Û6Îܧ¥(ŸèíÞé¾zpdlOßWOöD’k’\5ÐÛ=Õ†™3Š2 0­•RJ’sÓ<Ⱥ<í=4êÏ&ùR’?¯µ>ÿV~@)å$¿—äw“´ ³Í4¿LóñêZëm‡ sŒõõ¦yÎqE’£ZŒ2]Ê0“'¹%M1æk=ýëZÊÀ42826'ÉEÙ¶qæí&J2=Ë0“-Ks}õ@o÷£m‡Ø”a€i©”rFšYŸNrxËq¦»'ùB’¯ÕZ7îŠXJYæÏÿsIÞ³+~æ öX&vשµ>Øv¦ŸÑ¡¾ã³­sbËq¶˜Že˜É6&ùNš…;×öô¯n9{ÐàÈØ–3?“fãÌé¶™ãt/ÃLvw’«’|y ·ûé¶Ãì*sÛ°E)å¤4²>世ãLw’|9É•µÖ;võ¯µ®Oò—Iþ²”Ò—¦óñøûãTŽMòÇIþ¸”ò@&vשµ>Þn,Ú4:ÔwDšgWÄFoż$—NkG‡ú®OsÏ}}OÿðºV“°Û ŽŒ™mg¾£å83Å{&Ž382v{šûë¯ ôv¯l7ÀÛc1#ЪRÊÑÙ¶3ê©-Çé+“üY’?«µ®Ø'¬µ'.¥žä$ù$={âÜè”$’äOJ)wfbwZë/ÛÀž0:Ô·4É'Ó<ç8'Ii7ÑŒ±0Í.À—'Y=:Ôwmš…;ßééÞ%SrhÏàÈØÉÙ¶nàØ–ãÌd[¦íœ›ä? ŽŒÝœæþúë½Ýc­&x J­µí À,SJ9,ɧÒL9«å8âÎ$W&¹¦Öº¡Í ¥”…I~3Í´¦_­&ÎÄî:µÖç[ÎÀ.4:Ô·8É'Ò,ع0ÉœV½qŸïéþ£_ê[‘äàò¼«’|-Í=÷-=ýÃã-çà ;&Û 0§´ç­øü@o÷N÷Õƒ#ct_½Å†$ßIs}í@o÷+-çxCL†öˆRÊ’4»w^‘伨õØ”fAÇ•µÖÛÛ³E­um’¿Hò¥”÷§)Å|,IW«Á¦¯’æ¿ùó’\YJ¹)ÍCÄoÔZ_l5oÉèPß~I.KóœãÃIæµ›hÖZœf‚íï$Y1:Ô÷•4SZÜÓ?l78€ifpdìi6μ"6ΜNæ'ùèıvpdìº4¿Óþö@o÷ºV“¼e`·)¥ìŸäãid} þîñF½äÏ“|©ÖúLÛa^O­õæ$7—RÞ™ä’üÝ$´™iš›“f‘Ô‡“üY)e(Í"ÁZë«­&àuõí•äÒ4Ï9.M²°ÝDì`i’ÏNOõ]“äêžþá{Ú0» ŽŒmÙ8ó3IúbãÌéna’ON/ŽŒ]›æwÚßèíÞØj2€”ZmŒì:¥”}’ ¤YÒŸdA»‰:Ê}I®Lò×µÖŽÜ]eâßÿßN³ðäÄ–ãt’5IÓì®sC­u}ËyH2:Ô7/ɇÒ,ع,É~í&Ú¥>ßÓ?üG;¾8:Ô·"ÉÁ-äÙ]Is¿}uOÿðÃm‡˜ GÆöOò‰lÛ8sN»‰v‹Ïôvït_=826Óî«·Mòµ4÷Ø·ôv·œ@xûJ) Ò_®HS„Ù§ÝDes’k“\Yk½µí0»R)åCIþ0É%±»Ï›ñR’o¤yˆxS­uSËyf•Ñ¡¾®$¦yÎñI·h÷™-e˜Éî˶bÌÏ[Î0£ ŽŒMÞ8óâ$óÛM´ÛͶ2ÌdË“|%ÉU½Ý?n; 0{Ím;ЙJ)sÓìàrE’'Ù¿ÝDg,É_$ùµÖ§Ú³;ÔZ¿›ä»¥”cÓLŠù­$‹Z ÕöOógõ[I^(¥|5ÍBÖZí®°Œõ•$ïMóœãSI–¶›ˆÝä´‰ã_õý8Íýö—{ú‡—·  3 ŽŒmÙ8ó3iŠ0{·›ˆ=ä$ŸKò¹Á‘±Ÿ'¹&ÉÕ½Ý÷¶š ˜uL†Þ°RJIr^š…!—'YÒn¢Žô`’/&ù«Zëš¶ÃìI¥”ýÒ<>›ä¸vÓt¤g’|9ÉÕµÖŸ¶`&ê;=ÍsŽO'9²å8{Úlœ 3•ñ$?HrU’¯õô¶œ`Z³qfc6O†y-gb"ë@o÷#m‡f>eàW*¥œ•f'—O%9¬å8h<ÉõI¾Pk½©í0m›(U]œä“|(Ii7QGz"k­÷· “ŒõfÁÎIÞÕrœ6)ÃìlS’惡çþfOÿðË-ç˜GÆlœ¹3e˜×wošûëkz»Þr`†R†¦TJ95Û†ÝrœNõR’ÿšä‹µÖ'Ú3•RNH3)æï$Ù§å8jY¶cm; Àt4:Ô÷Îl{ÎqZ»i¦ e˜×·.É·ÓÜs_×Ó?¼¶å<{ÜàȘ3_Ûç?}é>Ÿäw’¼/É_$ùö5×ÿá³q_½£¥¹¿þÊ@o÷ò¶Ã3‡2 °U)eq’æaÖI-Çéd$ùb’¿¬µ¾Òv˜NPJ9 Éo'ùƒ$Gµ§“Ý•æ!â—j­kÚЦѡ¾CÒ,Ö¹"É{[Ž3}þ³ßvCšÉ­ç$ù/IþÓo8÷®X´³£W’|+ÉUI¾ÓÓ?¼¡å<»ÍàȘ3…_>½*ÿõÏpï÷ýâø${OzëñßüÎ=èCý§ì·pïùmÅ›ÎÆ“ÜšæwÚ_èím9Ðá”a€­J)Ç&1Yâ­©InLò…$7VÉzKJ)]I’|.ÉE-ÇéT5ÉþµÖÕmØÓF‡úz’\žfÁÎùIºÚM4ýlÜ0ž;o~>×ÿÕÓÏ¿4ºaÉoo:íÜžMøÃö:êÄýZÉׯ’|=Í›{ú‡7·œàm;6ͽ´3_C­5wßñTn¼/Œüòu¿wáÂy¹à¢ó‘KOÍ!‡°‡vœI¾›æþú›½Ý~¿ ¼iÊ0ÀV¥”’äÅ$‹ÚÎÒA^Iòß’|±Öú³–³Ì(¥”SÒ”bþf’…-Çé$ÖZo;Àž2:Ô·(ɯ§Y´ó¡$sÛM4=½øÂ†üðºå¹í†yõåM¿òû8nß\pÙ!9ã‚%™3·ì„ie’¯¤Y¸s{Oÿ°_ºcpdìð$ŸNs?}FËq¦­5k6ä–ï=”¡ëïÏs+_ÞþÍ2Åýò¤õ˜¥$§~D.èMﻘòÛI’¬Kòí4Y¯èí^Ûr C(ÃÛ)¥ÜOrKk IDAT’ä‚¶st€Ç“üi’ÿ·Öúò¯úfÞºRÊâ$¿“ä÷“ÞrœNpM­õжCìN£C} “|4ÍŽµ'Ù«ÝDÓ×Ë^έ×.Ͻ·f|ó›ÿÐ~ÝóÒwÉÒô]º4‹ºç3Æ/’\“䪞þá»Û0•Á‘±ƒ’|2MæÜ$ê¯áÙg^ÌÐõ÷ç·ü,ëÖmÜéý×+¶Lµ$óÐÃHÿ%§ä‚÷¿+ öš· “Î8¯$¹6ÍÆ7ôvïü‡0AØN)åß'ù‡mç˜Æ¾—äÊ$××ZÇÛ3›”Ræ$ùxši1çµg:û_j­ÿ¦í»ÚèPßü$I³`çcIöm7ÑôµiãxîþÁ ¹õÚåùÅc¯l{£”7µÊ©&[WðÌ™[rúyæ‚ËÍ‘Çû£ÿM³hçêžþáem‡f·Á‘±î4¿gýL’÷'™Ón¢é«ÖdäÞ_ä†ëïÏȽ¿È¤/Ûã¹¹®S|Q“½÷žŸ÷à„|ø’SrÐAû½ÝÈ3ÝX’¯§™sË@o÷æ–óÓŒ2 °RÊßJòÿµcšY“䯒|±Öú`ÛaHJ)§§)Å|&É‚–ãL7®µ~·í»ÂèPßœ4 u®Hò‰$Ýí&šÞ^^µ!·}{enZ‘W^ܸÝâœm;Ö¾É:L´~gâ“#OØ/|ìœö¾žÌ™ká_áþ4‹v®éé~¢í0Àì082¶oš$®H³±„QŸ¯cݺùÁ-?Ëß~0Ï.qâÕ²Ã-tÙîÃÇœtHŽ;õÐÜv㲬~qí¶7^£ ³å“RJÎ8ãÈô_rrN>õ°]t%3ÚÊ$_I³ùÄí½Ý¾Ê0ÀöJ)''y íÓÄSIþc’¿¨µŽµ†•R–$ùÝ$¿—äЖãLÖZGÛðVõ•$ç¦Y°óÉ$µ›hú{úg¯äÖo=›ûn[•Í›ë¶âËäu;eë?¶~¹÷¾ssö‡Ê;ßµ_~ò½çòÐ]c©“Ë/Û5a¶‰Ùúùþ‹çåÜK–朜}÷Ÿ·{.nfùišE;_îé~¦í0ÀÌ282¶ É%iî§?šdïvMÏ­|97-Ë-7?’5k6dÇé2Õþ¥dÎÜ®œyÁqùÐoœžcN:$I²qæüä¦Gòݯݓ§{¾ùÞ)Öfn·^³ÉšÃïNÿŧ¤ïüc3þÜ]w3×ÓI®Irõ@o÷Ým‡Ú£ l§”2'Éê$ ÛÎÒ¢[“\™äÚZ«1» ”2/Éåi¦Å¼·å8mzºÖzdÛ!ÞŠÑ¡¾3Ò,Øùt’Ã[Ž3ímÞ\sßðh~xÝò<õè+]—²]çe»E;[×ó”üŽ…9÷âƒsúyfÞ‚®­ß2ºr}~4´2wÜü|֯ݔd뺜­¶üZ©ny£&sæuåôózrþGÉaGï³;.w¦OòÃ4Ř¯öô¿Ðr C ŽŒÍMò¡4÷Ó¿ždQ»‰:Ã÷?“¾ý`î¹ç©µ™Ò²ÕÔ7ÓI’ýö_˜ó?zJ.èÍ=¯}ÿûèýÏä¦oÜ—{o{<ãã;—_¶}=i;ŠZ³ï¾ rÑE'äÃý'¥çu~>Ûy4ÍýõÕ½ÝËÚìYÊ0ÀNJ)?Êì+¬Kò×I®¬µÞ×vÞºRÊYIþ0ÍîÁ³mÜ÷7k­o;À5:Ôwrš;W$9¶å8á•—6æG7®ÌíC+³zlc³.g»òKÙi"L™xï]ïéÎ998Çœüúk£6¬Ûœ»øB~|ãʼ°|]’í×ëlëÁl›Sks}â~éûèÒœúÞÅéêšj ]v°)ÉMI®JòÍžþá—ZÎLsƒ#c]IÎOs/}y’žvu†õë7eø‡eè†eyæ™±æÅ2ÅnÛ}Þüãðc–äýëÍ™—¹óæ¼ás®z~un½îÜ~ã²¼ºzív=˜$“vœØú¤Ötu•œyÖ‘é¿øäœpÂÒ7~‘Œ¤)Æ\3ÐÛýDÛa€ÝOØI)åKI~¯í{È3I¾”äÏk­váœAJ)KÓüwü»In9ΞòÔZÿEÛ!^ÏèPßÑÙV€9µå8ã—O¼šáëVäÞÛF³yÓøÖâK)ÙV~™üZšõ;{-œ“ÓÏ?0gð t/Yð¦ÎYkòØý/åÇß]™Çx9ãã[ÞØV„™4 ¦ù8ñ{§ý{ä}ýç½>({ï;÷í^þl±>É iî öô¯i90 ŽŒæ^úSIm9NÇxá…WòÝï<”ïßôH^]³¡yqÇ̤1«[î·»ºJzÏ9*çôÔsÒ!o+Æõ›rç­?Ë­ƒdÅÓ«&^­ÛÃl?†u»rÌ;\œôŸœ÷{t潉"ùišûë/ôv?Óv`÷P†vRJù{IþsÛ9v³Û“\™äkµÖMm‡a÷)¥ÌOòé4ÓbÎh9Îî6Pk½®í;ê;,ͽÙIÎj9NÇß\sÿOVå¶o¯È“¯NÙ©üÒ|½uÓÚ’”‰7\ºW~í¢%é}_Oæ/èzÛYFW¬ËO¿ÿ|î»}4ÖoW|Ù¶fg¢ 3©3w^Ééç˜ó.]š¥Gìý¶sÌ"¯&ùVš…;C=ýÃZδ`pdì´4÷ÒŸNrTËq:ÊíÈÐЃ¹óΧ›Í¶ŒMMvØLb»&²÷~ röOȹý'瀞}vy®Gï6Ãß~ Ëîz:u¼&ÛM]ݱ³íã¢E{åxW>ø¡ÓÝíþúMOòÃ4÷×_èí¶I*Ì Ê0ÀNJ)ïIrWÛ9vƒ I®Iò…ZëL¼>~…RÊûÒ”b>‘d&nK{X­õÙ¶C$ÉèPß’$—§Y´s^¶¬*áWZ³zS~ò½çrÛЊ¼¼jã¶õ:;”_Jiìlýº+9æ¤E9뢃rô‰‹vËŸøúµ›sßFsçÍÏçÅç×ï0¦ÙÕvr9¦nY×S“cNÙ/}—’“ÎêÞVàáx1É7’\•äû=ýÛ[ÎìFƒ#cÇgÛDÕ[ŽÓQ6nÜœÛo{§«äì³ß™þþ“rìqíöœ3̦$7¥)Æ|c ·û¥–óo“2 °“‰I¯$™×v–]dE’?KògµÖ•m‡¡}¥”w$ù½$?É-ÇÙUVÖZ—¶˜ÝF‡úöOòñ$ŸIrQfæF»Íò§Ödøú¹wx4›6ŽO_¶^¶û<™ø¼dþ^]9õìÅ9ã‚%Y|Ђ=’µÖäñ^Ê·¾Ÿ?¼zâµIå—ì0)fÒ{ÝKä}œ³.Z’…ûøOäMz.ÉWÓ,Üîéö‹>˜GƎȶÌé-Çé8«V­É÷¾ûP¾ÿýGòòêõ¯Q€Ù¹SºJN8ýð¼ïÃ'å¨ÛùUë†u›rÏðcùÑ÷Ê Ë_Ú~Üê¤ScŽ9úÀô÷Ÿ”÷žsTæÌyûSag™õInHs=8ÐÛ½¦å<À[  L©”rO’w·ãmº#É’|¥Öº¡í0L?¥”½’ü$ŸKrZËqÞ®¡ZëÅm‡fŸÑ¡¾}’ ¤Y°ÓŸdÏ´1fˆññšewŒå¶o¯ÈËVo-¸”I˜f*Ì…˜$,Y÷œw`N={qæïµûw­}-/¬X—»ðB–ݹ*×OZ—3iR̤©1[Š1óæwå=瘾K—æ Ã¶–¿ƒý2Íä«{ú‡ïl; ðæ ŽŒ-MòÉ4÷ÓçÄDÕ7íÑŸ=—¡—å§?y*›ÇÇ·Ü8¿vf¢$³pŸ9½ïØüÚNÈîÛÞLV“Ç|6?ùÞCyìþg¶n0±m—‰-ŸoÙ|b[9æ€ýæƒ|W>ø¡²h‘ûë·àÕ$ƒi&² ôv[_B˜R)å¿$ùí¶s¼“|-Éj­?n; £”rAšRÌeIÚ[AôÖý«Zë·˜F‡ú¤)¾\‘äcIön7QçYûê¦üô{ÏçöWæÅç×§tí\‚™r"L)9òø}óžóÌQ'.ÚºÙít°nÍæÜÿ“U¹÷¶òòª Óa²u¡Îve˜ñm%™$9öÔEé»ô¼ëô¦Õ5uÇÓìf{uOÿðm‡¦682¶8É'ÒÜO¿?‰qoÒ¦MãùñžÈ7.ËãOŒ6/n-Ál7Ju»L)%=K÷ÏYÞ÷•y ¦ï¤ÒU+_Î7ÿ,#·?– ë7M]Œ™¸áÞzo]kæÍíÊ{Ï9*ýý'稣zZ½†öb’o¤¹Ç¾i ·{sËy€×¡ L©”òûIþ´íoÂóIþŸ$ÿ©ÖúlÛaè\¥”#“ü~’¿—¤»å8oÆåµÖ¯µ˜¹F‡úæ&ù@š;O²»‰:ÓÊ_¬Ím7¬È]·¾MÇ·›þRº^» 3o~WN:〼ûܳø é=|§Ž×<¾ìåÜ3<šgžxubÎDf“äò$KZŽÓ‘jMºk,·}{Eyyb ÌD f»‰0eû÷J²¨{^zÏ90'ŸÙݑ喯˽·æ‘{Dzic}"ÌÎ¥˜ù{uåŒ —¤ï’¥9ð½Ú¾ŒNvg’«’üuOÿðжÃÀl482vO’w·£S=ñÄ ¹ñ†ó£?™M›ê¶ÂËT%˜-¯%™¿×¼œ|öÑy÷yÇ¥{ɾ­^ÃÛUk͓˖çî[ÍÓ?[1qo½ã´˜©K1‹»÷·>|b>ð²ï~Ó{siîz»?ßv`{Ê0À”&Š«3=Ç2oN3–öÊZëÛÃÌWJù`šRÌ¥™žÿŸx±ÖÚISl€2:Ô7’äÔ¶st¢uk6çŽï?ŸÛnX‘U+×OLÙVzéš4fò˜R’w½oN;gqŽ:a¿æý·öÕMyðαÜÿ“Uyå¥ÛÊ0“‹0“Ê0[?¦æ]ï> }—.Íñ§°uã_Þ´ßïéþRÛ!`6û«$³ídóæñüô'?ÏÐ Ëòè£+·]v.Ál+”‰‰0,Ù7§õ—Ï|gæï5ó†ð¬Zùrî~4ßùólÚ°©“í 0S•bæÏëÊûÎ=&ýý'çˆ#·}製Ý×·Øž2 ðšJ)Ë’œØvŽIV%ùÏI¾Tk}ºí0Ì>¥”c’üA’ßN²¨å8“Ý\k½¨íÀÌ4:Ô÷ß’ü¶st’çŸ]—áë—çÎ[^ÈÆõ›·Ÿ³C ¦L*ÁÌ_rüi¤÷ìÅéY:3§¡Œ×<±luF~4šåO¯ù•bêxÍøÄǃ[˜s/Yš3/\’ù{Mǽ*¦µszú‡Üv˜GÆþa’ßvŽN°zõºÜô½‡óÝï<”±±5¯S‚ÉN¯~ÜÁéí;.G¾kióþ ·~íÆ,»ãɰ$ç^rpzž™¥¡]ls’E=ýÃkÚ³ÑàÈØ…Inn;ÇtöÔÏG3tùmøñlÜ4>1AuÇLvzmî‚y9þô#rÊ9Çä€%ûµ}­¨ã5O=¼<÷ßþX–?ñB’ºS¦Žï\ˆ©µfÉûæ#ý'åý½÷™ßö¥Lg+z»—¶Ø™2 ðšJ)ÿ(É¿kéôãI“\Yký~Kàu•f›œþ$ŸKò‘´·ÇÐoÖZÿº¥s3ÜèPßyI~ÐvŽéjýÚ͹ãûÏgøúy~ùÚ”RÒÕµmL×ä‰0“'Át•,=|ïôž½8ïQ–I­9ñÌÅ9`iŽëÝ¿í˘ΖõôŸÜv˜­GÆöO2–Y1¯ä¯¹ëŽŸç†ëÈC¯ØaòˤÒËŘ}»÷ɉg“ãßsdæï5¯íK™6V­x)Ë~òxž¸ïÙ´qó”˜^¯Y0Nοà¸|äâ“sØ;ºÛ¾Œéè†ÞîKÚìLxM¥” ÓÞ5ÕZOjéÜð¦•RžMrHK§?±ÖúpKçf¸Ñ¡¾ý’¼‹v¶3ºb]~pÝŠüô{ÏeýºÍéš(¼Lžþ2¹³eÌܹ]9ö”E9å×zràRSM&ß\óÄC/çþŸ¬ÊsÏ®ÝV†¯ß21f<ß±$3^sð sþ¥‡äÌ‹–dÞü®¶/eºùï=ýëí0› ŽŒ=–䘶sL¯¾²>7ßôpnz0/¼ðʤÒK×Ó`¶?9jIN8û˜¼ãøƒ›÷™Òú5òè=Oå‘;žÈ«/­™²3eIf¼¦·÷°ô_zJÞýž#ãx«9ÐÛýOÛìLxM¥”ÒìPÓ†Wk­û¶tnxSJ)ó“¬K; Ã^M²¨Ö:Þ¹€Ybt¨ï‘$Ç·c:xäÞóƒo­È²;W%™(¼lW|™ôÚD)¦t%ûì7/'ŸÑN? ÷™ÛöeL{Ï=³6÷ß±*O.[͛ǧ˜ 3é󭙚½ö™›s>|pÎûèÒt/YÐöeLÿ¨§øÿn;Ìfƒ#c_IryÛ9ÚôË_Œeèú‘ ÿàѬ߰9#Uwšü²ãksæÍÍQ§žãÏ:*´¨íËè(u¼æ,Ï#?}"Ïÿb4)1ãã;|]sðÒEé¿ä”\pÑ Y¸pÖOßùÞØ™2 ðºJ)'9º¥Ó÷ÔZWµtnxÃJ)G'y¼¥Óß^k=·¥s³ÄèPßUI®h;G[6¬Ïß.·^»<+±6¥+éꚺøÒ5i Lé*9øÐ…9å×ç¨öK×[ª¾YkVoʲ»ÇòÐ=cYûÊæí¦ÁL.ÆlymËÇ$9õœÅ¹ð²CsÌ)³~±Ôû{ú‡oi;Ìfƒ#cÿk’ÕvŽ=­Öš{î|*7\7’ûGžÙ~úK×Ó_ºJJÙöþÞûïcÏ8*GŸvDæ/œßö¥t¼±/ågw>ž_,{&ã›6O9!fÛkã[?_¸×Ü\pÑ é¿ä”,=ô€¶/£-Gôv?Ùv`gÊ0Àë*¥´¹CÍéµÖ{[:7¼a¥” “ÜÜÒéÿ´ÖúٖΠ̣C}ÿ$ÉçÛα§­zn}~xÝòÜ~ÃʬyeSº&—_&&¾l÷±4ïϙە£NÜ/§œµ8K]ØöeÌ›7Õ<¾ìå›û´*ããuë”—Ée˜f½Îö¥˜…ûÎɉ§wçÄÓ»³÷¾sÛ¾ŒkÅ/×äÁ;Æòä#/g|ókO‡™\ŒI’}÷Ÿ—s/Yšó.]šý{fÍ®Â÷ôÛv˜íGÆJ²²í»Ûòg_ÌÐàH~ðý‡³vÝÆ‰òK×֢˖©/ÛMˆ)%sæÍÉa'–£ÞsTö?hÿ¶/cVß<žå.Ïw=™—5˜Z3±ÛĤBÌö¥˜ÔšC; ýíÍ{ÍkûRv·ïôv íÀÔ”a€×UJéOrCK§ÿl­õO[:7¼a¥”šäÿléô&(»ÝèPßâ$£mçØ6nÏ]·<Ÿ[®]žgžxuëëSavœ ³ä…9ùÌÅ9úÄE™3gölÚ¶W^Þ˜‡îËÃ÷¾˜uk6MY‚Ù±“$sæ–¼ûÜž\øë‡æ'ì×âì_íéþdÛ!€dpdì—Ik;Ç®Vk2r÷S¹aðÞÜ{×ÓÛ•\v.Ât5Ó^&Þßk¿…9â´wæˆSÌü½gͦÓ΋+^ÌÏïy2Ëy6uóæmSa¶dv.ÄÔññì³÷ü¼ÿC'¥à´,9xQÛ—±»üÛÞîÿ¹íÀÔ”a€×UJis‡šÿ«ÖúOZ:7¼a¥”?Oò;-œz}’ýj­[870ËŒõý<É‘mçØÕ^Ý^·<·{e^yyûÛ«fÝN™(Àl_ŠéšSrÔ ‹rò™Ý9ø{·”ž$Ù´qß±Ó”`¶|]ëx2^S’œqö;sÉe§çäÓoû2vµßèíþë¶CSS†~¥RJ[;Ô\Sk½¢…óÂNJ)§&ùX­õ_NñÞP’ìùT¹«Özf çf¡Ñ¡¾¯'ùxÛ9v•'—­Î-×>›{oÍøæW²c¦kNóù½çä„Ó»sÒédŸEóZHÎëyö©WóàcyêÑÕß¼­S7¿v!&IuÏOߥKÓwÉÒì×=£þ½ö÷ôߨv ûçIþ÷¶s¼]Ï­x)C×Þ“ïßø`Ö®Ý8q½CáeŠ"L™Ó•ƒŽ;4‡ŸvT|@Û—Áëß<ž•>›_Þ÷dV?÷Òv˜×*Äl™sÄ;{rñe§ç¼‹NÌüsÛ¾”]áÄÞî‡ÛLMø•J)míPó£ZëûZ8/lUJ90É¿Hò÷“üe­õïNñ=Ë’œ¸§³%ùϵֿßÂy€Yht¨ïŸ¥¹?êX›7ÕÜuëó¹õÚåyúÑW^óû¦*Â,>x¯œræâ{òþ3u‚ÈŒ²úÅyð®UùÙ}cY·vü b’dÎÜ’3.X’ .;$G·ïL¼ÛÜÓ?ü\Û!€dpdì²$ßl;Ç[õÀ=Oå†oÜ;òdj2Q|éš(¼Lš ³Cfþ>{å“Ì!§üÿìÝi”dç}ß÷ïÿ¹Õû¾Ï‚Ù0XÀ@‚$†$DŠÔPâP´©ˆ¶ìXŠô"öq";‰ùÄö‰äÄ›ŽP±OŽ_ø8ç$vÇr," I¦D q0Ì ö0;fëîé®Þ«ê>yq—ºÕ]=Ó³ÝÛ=óûœÓ¨íV=·nΙ[ýüžßZ;ÛŠ~r¦>šàÜÑ\>~. Ád‚/Q &ni¸?¤§»Ïù1öõ †F{‹~7jè=°w ,zGDDD¤9…aDDDäšÌì×ÿ¡€¡Ïxïï¸]Ù̬üUà×di¢_÷ÞÿF“mg€®üö.õW¼÷ÿ¼€qEDDDDä.4þ¾Ÿ~·èý¸Ó“Küöy~ç<åÉÊU·Ía‚v>ØË#O²e{gN{+·R¥òÞÑ)޽2ÁäåÅ5b»öôðÜÏná‰g‡pÁ† @Úðž¢wBDDDDD"ϙܜ*z?®ÇÒb•?ùƒc|÷?âôÉñ4ì’†_®„é`ËÞ íÞ‚ \ÑoEnÒâÌ<çß8É…7OR_Z=“^ÚcœÁ'ž½ŸŸþúS<ôè†;E}éÀÞ}Eˆˆ¬Na¹&3+j…šhóÞW [îbföSÀÿÂʶ—_ñÞÿËeÛãyíÛ2ŸôÞÿ¨ ±EDDDDä.3þ¾ÍÀ¹¢÷ãzœ|w†ïÿÎ9¿x™ZõÚ1‹V¶mïxøcýìyjž¾–öTòpæÃY޽<Á©÷ÊkÄôµò™¯læÓ?=Fwï†ú<äÊÉóP«Å˜8³¼9&”éíëà‹_ý?õgžb`¨»è·q5¿|`ïÀÿ^ôNˆˆˆÈꆑ51³¢V¨ù¬÷þÅÆ•»ˆ™õøUàjK¼>è½wÙs¿ |ë6îÞjŽyï+`\¹‹¿°ï;À—‹Þff¦*¼ôó¼øíóL/]×s·ß×Ícâžp[¤²òöëW8öÊÓ“×÷™¹ïÑ^žûÚûÔ ÎÙmÚÛöµ¡ý‹øÎBDDDDDVñü‘ÉüZÑû‘UYªrðŽñ÷c><~qYÛKÒ…aÌ5Þß>ÔÇÈ£÷Ò¿{ .ØMr,•ç¸üæ &Þ9Eua1ÀÄÁ˜&a˜$(8øÔsó3ßx†û÷l-úm4óĽ¯½"""²ºRÑ; """Æ!àKŒ»½€1å.aføeàï£kxJ³†¤¢>£‡ WDDDDDîn‡Xga˜3ïÏòýoãÕï_¦Z ×ü¼–VÇõóÈÓƒô ´®½$DîAÉñÈSƒìyrÓï—9öÊgOÌ®é¹ÇMsüØ4£m|ö+›ùô—Çèì^wvÓw"""""ëϺùwúÄ¥2¿÷ï_æ÷çUÊÓóÍ/ñ¹úõôÇ9zvlfè‘]tm æ¡V]û9¹ÜY¬£‘§bèñû™:~†ñ7>`q²Œ9Çğ%ð¡D—µZÈÁÿø/þþQîx+_ùÆ3|ê {Jë"Xµ¼YôNˆˆˆÈÕ©FDDDÖÄÌŠZ¡æ¿÷ÞÿƒÆ•;œ™}ø-àck|Ê%ïýŠÀŒ™ý&ðßÞÊ}[£ÿÊ{ÿÍÆ‘»Øø ûþ,ðï‹Þ0ôùÓ ¾ÿ­s¼lúºžÛ;ÐÊž'xà±~ZZÝmÚCÙ¨&//òæ¡IŽ¿1u]áªÖ6ÇÇ??Êç~v3›wtÞÆ=\³ËCû޽"""""Òèù#“÷ï¹ï;Í·ÿÍùÁ½I­æ£&˜¸ù7ÁÄÍ0Ù&˜ ½•þwÒÿðNZº×Åy¬c³g/1ùæÌž:Oa–5ĬhŽ C‡»ùÒŸý8?õõÓ;Phƒï«ö<]䈈ˆÈµ­»%ªDDDdÝ*j…5ÃÈ-ef;€ß~þ:ŸÚ¬Ô #"""""w—BÏEæÊU^zážÉK‹×õÜ­;ºØóäÛvw§÷ùP †I£þÁV>ý“c<µo˜wNñÖáIf¦+×|ÞÒbÈKß=ÏKß=σOôó¹ŸÝÌ£Ï b–ÃN7w¸°‘EDDDDäjŽÓ@oƒÿÃÿú_ñã?~;xYÖ“¶¿Ô¯·ö÷Ò¿ç^ºwoÃÅUµÀÈ5´ ±ilˆÊô,SoÀô»§—b²Í1àŒ‰Ë3ü›þ=~û_ü¿úwŽg¿ôXQoAÙ†‘µRF643ëþ&ð7€Žx‰õ†ñÀkŒ+"""""w¹¡ýOŒ¿°o(büú7qæƒÙ5o_jqì~¸—=OÒ7Ø @¨ù:²-­<5Èž'9u¼Ì[‡'9fnMÏ}çµ+¼óÚ¾þŸï⹯m¹Í{º*MÚY‡ìðÏ™| ølãÏÍ.¦Á—å?Q@¦Šéض‰Þ=»iß•NÖ€šB0r½:;è{òz{Ù㧘~ë*Så(üâãŒfà10™Q©Ô¨,U‹ÜsW‹ˆˆl ȈˆÈZ½O1+ÔlËy<¹™Ù/ÿ¸ç&^f=…aŽ{ï§ WDDDDD¢Æ‰Ï1pï`+¬! ÓÝÛÂC÷sÿ£ý´¶9@-0rã¶ïîfûîn&.-òök“|ðÎ4µêµ?O½q« š´#""""²~¦ 0ÌȦþ¦í/Q­etYêïeø¹g(õFͪÕ5œÿˆ\“tÜ¿‹Žûw1÷Ái&^:x,oq‹¯f oî/ru^-""²( #"""kâ½÷fVÄ 5j†‘ffO¿|ú¼ÜŠ0Œ™µ›oÁk_¯ÃŒ)"""""’8DAa˜Ñ¶knÓ7ÐÊO~mÝÑŸ@ÂÚíÞ+¹[ô¶ñÉÏobÓ¶.þþG× X ®áóz黑õ«°IöÛûÚ_ê­Q83jÓ3Lüéazž|„–ÁBÃr§ñž¹ã'™=öNt;ÁÔYÉ}`fŒlê+jOkÀ‘¢‘µSFDDD®Ç!òÃô™Y¯Z0äz˜Ù&à¿Hôî­Ð¬f+ànÑë_­B#"""""E*ìœdpäÚá‚©É%þ¿õ!>=ÈCà‚[uZ(w»™é ‡^ºÄéfÖ´ýÀ>¯·É4p¼¨ÁEDDDDäš ;¯ÙTÃ4þÐp»29ÅÄþ€¶[éÜs?®½Ð°¿Ü*Ç™;ö6Õ©CÌ 9ÌB¼3£Œ79ÇÐhaa˜·ìX(jpY;…aDDDäzõ¥ÜvàXAcËbfmÀ_þÐs‹_¾Y¦¨æ"…aDDDDD¤H…“¬¥ R 9üƒË¼÷ÆO~z„{vuÝæ=“;YµòÆ¡IÞz}’°võ6˜DP2z[oóž­êµ¡ý×¶£"""""R„·€ =ïG6÷§­ 1M®;céÌy*.Ó¶{'m;ïWÄ:²‘…só,¼}œÊ…ËàãŒ8°0 ¾`†aøL(«¨›RKPÔnëïñ"""„Â0"""r=†‘uË̾üc`÷mBa‘È{À Ð÷À#×.˜™®ð'/œclk'O>;Bß@aáÙ N¼;Íë?g~®z]ÏëjÅŠ+%Ò÷"""""ëØ½µçL>‘÷ØÃc}«4Ã$AV„bCß?Aå£ ´íÞIid(ïÝ– È×j,<ÍÒésP­aÎða¦…ߨLä ’`ŒÛ k…W‹ˆˆl ȈˆÈõx˜:r·¨Àlfö(ðMà ·q˜%àB“û‹ølžòÞ0®ˆˆˆˆˆCû†ã/ì{x6ï±FÖÖ ³Ü…³süÞ¿?Åý{úØó±AZÛ´’­\ÝÄ¥Eÿà—/,ÜÐóoð³z‹.rpY“C†ÙÔWºPoˆé`©'Ä!˜¤e(Çàƒï`Ë3ÓÖÙ†_ªàkaýó…Ç›1\\æø½å¢‘ë£0Œˆˆˆ\¯"¾”SF0³/ßöä<´Â0"""""" k­i[†™™®âxøÉ~î}¨—W^äW& Ã(Ä`.š¬cÎÒPÌÜL•Ã?¸Äè–î{¨ŽNýÉänuéÂ<ï½9ÅÜL‚3çÁÇsuœáãÏRO Ÿüü»ìÅL_©4}ÍÁ‘ÂÂ0G‡ö¬5¸ˆˆˆˆˆ¬ÙQ Jó÷†ÇzùðøÅ´ÆÌX,Ïáœáto侯}–ñwÏpñÐ;T–êA׊ñ¡§rá2µ©iJ#øΎ¼ßŽÉ{ª“W¨Ž_°V¾$Á(307›†Øô‰=t õ”΋3óévõv_dFÙ@ô—¹^Eœøo+`LYGÌì>àŸ_-h†iô°ä>ãp´o7.Ð93µϵ0Ú:ŸüÂ&z|€þáÎ|0“,<]šáÒp Œ_\`jr‰­Û»¹gg7A •lï³3>|ošÉñEš‚Ržô³”|nð×âxü“C<ú‰!ZZ\:alvºy¦Àf}o """"²Ø;°øü‘É7€Çó{d¬¿¡é…8 8Ã;ðÞðμÿº·qù؇\yï$ÞÓðœø$Ì¢fóq}XIÓïtáÜ<µÉ)|¥’¶¹ŸK{3ð¤!˜RwCßOߎ1J¥Á+猥™¹z¸*i"ÂSFDDD®Mÿê‘ëu ¨-9Žy™9ï}˜ã˜²˜Y/ð·¿´¸+§—ßafý@OÎûqÑ{.ç1EDDDDDVÚ°:þ¾£ÀÓy=Фq£ž@áéjåK_߯™gxõO.1=UI1fÄ 1Ѫ¶Þù33Œ_žgÛΆFÚó~[’£j5äÜ©Y.žŸ£Zõõσ·z Æ×Ã1»÷ôñä¾aºº[Òf¡ägfµ0LqÍ0š´#""""²q¦€0Ì𦾸Áƒ4VCj ‹¸Ö6œÃ J­%†¿î][?ú>óçÇÓà™ðCrÝ/.R½p×ÝIÐÝUo‘;†¯V©MÍà—!ôé—,Fb¨7”JôîÞÆÀÛ(µé%ÎA|= Ã,o‡ë-ê-Ö†,"""×Oa¹.Þû%3{x"ÇaKÀfàlŽcJÌÌ¿ü}`¬Ø½š7èFDDDDDîv‡(" Ó¤q£Võ,ÌWik/E“-’•Dͳug7›ïéä£WxóÐ$µšÇœe1Ñ¥sF­ê9õa™ñKólÝÖMg§þŒr'ñÆ//pþÜ,•J´æŠsÑjµxðÎGónâÌðHûô0Ûڣό£þÙ‰'ø¬†T3Œˆˆˆˆˆ\Û!¢¿‰æjx¬·1å`F¥w¤ßãÞ<­í-ôôuõNu^-""²è¯8"""r#‘o¢àÂ0w3Û|xªè}ÉPFDDDDDd¥BVÊ\­qcfºB{^1MžHæá¸Àxpï;îëáÍC“œú ‡â  m1°°PãÃ÷§éhcd´ƒRÉåùå6˜­páü óÕxáÚ¤¦Þ ã<àŒ¶Ž€=O ²ã¾îLø%3OÌ‘cš…a:ºJ´u¹¿G¢6çcE ,"""""7¤¿ý¥aêA3cqfŽ®Mƒõ ‚ïŒÀÞŒŽá~ZžÙËÌÙ Ìž<Õ0sÂÄŠ_XÄWj¸Öp:·Þ¨|µŠ¯Tðµ0mòÄí/fQ# ѹvÐÛE÷}Ûiïï&(¹†LC &þNf±<dZaÌ¢Ïh1NØ;0^Ôà"""rý†‘qøåœÇÜü ç1%Gf¶ øMàϽ/M( #"""""²R!ç(«5nÌLUÙL4)ÃùxJaÞ§-1í%žøÔ0;ìá­Ã“\™XŒƒ–†c²m1åòsóUÛèëmKÌ•£R ™Ÿgf¦BFM0Þû´ý%º4ÌCÐbÜ»»‡û÷ôQjuõù[ñDŸäÒ¬™™Z†)°æÍ¡ý‹\DDDDD®Ûë@äšíêç9IeifžÀA`B-.á¼áõ˒ѹu”–áAæNgéÒø²†C1ÞV*X ë ¨V‹š` |1‘\'ú½·´ÐvÏ£C”JIø…t’(Cˆ‰?[ËóÑëz¢pÍðX_QïVÙ`†‘QÄʯE$fÖüðßïN3ÞûÙ&÷ñ™,dÕe‘Uªäü·†U›a¦–âI> ,`sñd O´Ð¨Aß@Ï<7Æù³skŠ¥…Z¦& Æ$“4ÌH®G—¡3‚–;·Œ R9{žÚlÒð±2cI&.ñµ0Ï·,×Ë ï©·þ°¬ý'Þg´ŒѶi„RKÐг¢ &n„ 2Í0 å¹eá)-¬FÙ`ô¹E¬P£0ÌÈÌþQ̶¢÷å*šµÂ@þŸÉ+ÞûrSDDDDDdUCû.Œ¿°ï-à±<Çíê-ÑÚæXZlœ8Sžª.kòð™Ë¨ýÅã£ø¾±- ¶súÃYΞœÁC´:i2#m‹1Â0äJy¶Å€îÎV‚ ×…{å:,,U™«P­FŸ‘z ŒÅáp΃‡®žv=ØÇÀPk‚iz±t"™K£|¥If•ÀV4iGDDDDdã9DÎa3ch¤—KËõŒ…éy‚À}Üâ$m0†[v_ È´t´a»¶S›.S½8ޝV3‰Æ,:!ÃJ¾R¶•õ#nx± B˜|·>N2¥í0@ÐÓMËØÖÖŠ+¹•ákˆ ê×ñžÅÙ…ô;i+, £E&DDD6…aDDDäºyïgÍìàá‡UæbfOßö½/k°^Â0šÐ""""""ëÑarÃ@Ô¼qáô|Ã}å©¥(ô@Ò“LÒ ÅD“n|´ )QSH8¶ßÛÍØæN(3yy±‚IÛbêÁ˜Z虞_¤½¥D[©¿–¬5ïY¨T¨TCÀã pÑJ¶Q Ƨ¿Ó– `˽]lÚÒ‰ÍÂ/¡lå6‹ó5ª••«Œ¶æýÖš´#""""²ñþ|ÞƒöréR9ºŸ-–ãf>nñ.n†‰¯‡Þ¸¨¦q8BO7®£Ú•ijÓ3€¯`–ÿ8Ãu´ãÃ~nA¡˜uÀÚÛpííà=>ŒêuÍH*FVkk¥48€ëêÀœ‹›^H[vƒ&ÁçXY*Ï“„±ÒÕ+ÌŠl†ÑyµˆˆÈ£0ŒˆˆˆÜ¨Cä†YÏÍ!²Ff6ü}à—È·Yèf¬—0Œ¾x‘õèð—òt`¤IæJ%)$M0Ñýæ aÒÇ’‰ñ*¤fÐÚ°û>Ê›*œ;=ÃÂB­¡&šÔ½®3£êCÂZ…ørŠ{gò@ÕjTk5BâßuÒã=Îb  v°yk¥V«‡–…^p,kŠYÙSžZjº?ƒÅ4ÄDmÎ"""""²±ò7ÀáÑ^xã\&¨óÓsõЂτ‚zð%ðïB‚lXÆû((ý}¸®NjÓeÂùÅ8ëЊI®[K ®¿pq‰Z¹ µ• Èíem­=ÝXà¢LF¿3,ýÝ7Á}ÝÝQÃOòÉŠàKüù±úç(XŠq°43WÜøhq †ÇúŠ8ì8WÄÀ"""r㆑uø 9ާf˜ ÌÌZ¿üm °e\nЊ0Œ™À–œ÷CaY 9W]6(_YÊ´y$ÁÃÒ&˜(Ñð˜ù(ô­o Ý=-ÜÿP?“ã‹\º4O裆s– Ç$m1º0j›©:¨åx$Òâ ]ˆ¯Å¿#Oô;O”ïs:»JlÚÜI{G) 6¥í?Iø%ó“y,¹MC[ ÌLWšîÒ@“ÏgÞÚp¦ˆEDDDDä¦.bÐá±Þ4“, °8·5¨:Ã{Ã;7Ä¡ƒ ˆšaœ³zX&¨_£æ£Ö+•úzqÂÙ9|®l‡É„b\g;AWÕéjSåhE¹­¬¥Di koƒÐƒëÁ%>Lw£Fko£ÔÙ¥RÚîƒsõð‹5†a·<Ý—½±<ê-BÞã=E’Bþ_‘›£0ŒˆˆˆÜ¨¼¿2³.ïýlÎãÊM2³¯ÿ¸¯è}¹AÍša¶AÎû¡/ßDDDDDd=z âIŽš4oÌÎT }¶í%™´±¬ ‡bHW5Ëlïoô¶ÑÓÛÊÄÄår=h“%²ÁA‡‡Ð¨Í{¼B1·k×­DLýÎñà]Ô”m†ims ¶ÓÝÓ‡`XlÉ6¾,ŸŸ•4 ¥Á˜ø²<µJ¦˜f-¢!""""²Ø;0ñü‘É“ÀŽ<ÇMÖ/´ú‡Å™yÚz»â€‹Ãù0 1à}dðñuï’Ëè¾Ð¡sñ¹™Ç¼ƒ–Ao7áâ¾RYÑÓðã¥Á>‚Þj—'¨••÷¿-œ£44@ÐßK‡!Þ¡Õ[Z ‚)9\[VjÀÅmª†Yt}Íá[ùøÂÌ|=·ùbÆðH!aW‹ˆˆl@ ȈˆÈ*bbþ6àíÆ•`f{€o_,z_nR³0LÞME³À;9)"""""rMCû–Ç_Ø÷ð@žã6mÞð03U¥w %š”Çû$Üi‚Iš@ðQh"¹/³.ÎcA ††Ûééiejj‘Å¥Z€‰@M'p˜3\ Z:Õ9Xš ñažGåî´­=†• ¬yÂ0½$ 0pÑïÞ9£¯·žžV\`™Ö k…_VÛ6ûc”¯¬ Ã8gô µæ|TMÚÙÈ‘{¦'J! !,NÏÓÙß\îÍqØí( ³î™ÙðÀ_áÎø÷æzüP‰ˆˆˆˆÈºu˜¼Ã0«4oÌL-Ñ7ØRoûHB/$m1¤¡o†9WÚæ—f2ᘖVÇÐ`; ‹5fç*x|½&m‹!½¯­×hïq,LÕX˜ÖéÜ­à£c0 ¥ÓCOXói&jñõß…7:ÛKtwµ”\ÚÓ,ÐÒ<ü²r›•ÛÂL“f˜¾¡VœËµ()¡I;"""""×!àÏä9àðhoš?Hƒ(ÀBy.z‰B >0O‰:½«_†Ù€L|z-Pá=Þ¹èÒ;¬äñµ°Þ1»ì$Ì2÷Ý]î¦6>ÉÒÙóøj5ÏCtG º»hݾkoLJ|¡Ï¬ AŒ2³hqç° ªÃµøÄÚâ Œe›_‚•/ ?·ÃX67Ôçâq3­0ikQît^-""²Ý “EDD¤8‡È? #ë”™À_þ.0XðîÜ*Uà£&÷çýYÔo"""""²ž¾‘瀫…aÊS•hÒ†ù•0ŽL(&z‰&]ÔÛb¢ÕPÓÀŒÅ!g´µ´–«,Õjq&ŸÆ`LP2zÆZè€òÅ ‹³ ÅÜ3è*Ñ5àñ„ñ"Â8¢Ul],b`¹9 ȈˆÈÍ8 ü\Žã) ³N™Ù€o½/·Ø™UYòþ,jB‹ˆˆˆˆˆ¬g¹OÚi&ldæ¿$ák½ 3Ä—™êã—fâv‡'LÛb23pž¶¤ú"H IDAT¶€RP©Öð.L0Ù‰É}­ÆÈ½mÌ—kLž­P]T(f­:û¶´âJI Q›0ñªÃÞÀ9O«+Q .Zq¤?¤á¥f—¡—fá—å1åfa˜ÑBÂ0'†öœ,b`¹%rÿ[`GG+]ÝíÌÎ/Õƒ'fÌOÏe.q3Œ7|zY¿:Ÿ6ÈÔ2çBœ7j¡3Ì;¼÷˜‹/ã×±ZH8¿ˆ•ª¸ÎŽzCM¼/XtŽmΜ£û¾ítÝ3JùÝ“,^¾’÷!ÛP,ptïÜBÇö-x3j5;„5èúLèÈW*øù…¨Í'pц–\¦õ»é톰‹£~;h¼y@&Ý.¾onzžÆ/xŒá‘Bšaô÷x‘ Ja¹yOvQf1³ÝÀ?¾Vô¾Ü&§V¹_Í0""""""u¹O(µ8ºû[(OÖÃI8!m}YÖCÜð²<Ø’ άh„q@Šil“qæi j¡Ã[ˆ+eša’Ð…KZc { DÏ` Sç—˜8»DXÓJ¶«iëtŒìl§½' Vó„a€q`>sœ}ô; ªGBJ–†_‚-éï§ñ1âç4 ½¬ØÖÀ‡ž¹™ÊŠPÖ`1Í0úÞ@DDDDd;°wà£çLž6å9îÐhs§&â•"sSsú$Üi†Yv_à ,Ëx|ü|ï¡ïüŠ@LÚã=¾R¥zeŠ £×Ó•ž%A‡cœ3‚îNFžÞÃÒåI&ÞxŸÊÌ|ž‡lCèÚ:Bÿû°¶6ÂZH-ŒÎ]|Øñõ& _«N—ñÕjÔa,>qŽÎ— sÉýñï$vÉÞ¶úýõð Ûñemi‰j¥Zo§‰¿¯‰Z‹r§ój‘ Ja¹ Ãܥ̬ø[À_ ™å‘“õ†YÞÈq<‘ë2´ÿàøø ûN‘óyûàHÛ²0LÜ ³¬ g>ZÝ4 ´dƒ-DA¿ì¾lpÆà1¢É=fõ€3ðUGz\G<1$i$IÂVŸ2¼½-­\ø`‘+ç—òŒB0ÎW¿é$ª¨ÆW ¿hñ‚µa•Õ-i°%Ó“†—â×IÃ4 Ÿ…Æmg¦—‹Ã0õ4ÌÀhk‡N+ØŠˆˆˆˆl|‡€ŸÎsÀáÑNŸšˆnÄ'PsSsiÁF”[1|àÓf˜ÐGM aµu6†f¢û’ Lè-¾ÄI ï£Ð…÷ñùµ‹ÎójFmf–pnŽ ¿ë8â EÜê sÓÝ›‡˜~ÿ ão~HX©æyèÖ¥öFž¸ŸÖÁ>š§z|¦Q5i†ñÂjHmjšpf.ú}¤8ý"cåí¨·~1kÃq£Pc@fY‹Læ9³åyH»{³Í0 ȈˆÈÚ) #"""7Ì{ÑÌÎ[sr[NãÈ*ÌÌ€_þ9¯LTõ†9꽯\{3‘B"ç0ÌÀh'ßê…òT%mÁ–5¤–zLŠñf˜‹Â.QŸL4S¤Y8Æœ§ÞSÌøš±4í)µ{Úzƒúj©ñª¨õà…ÑÚîØñX£ÛÛ8ýÖ³WîîI;f0²£M÷uàkžË´ÁÔ›aœ7jUÏRÙãkѤ«zøeeèÅ~\e[Vl› Æ4f`¦\I·ÍP3ŒˆˆˆˆˆÜ˜Ãä†éIO„’ó›Ù©ùz“‡Ï´zx‡s!.0‚8 $0™ÐLè¢ÇÃL(¦æ ï]tþaÌa. ÄdÃ2¾V£ri7=ƒÄ:Û£óêô»Þ>8cè¡í îÞÌ¥×3þÞ™ÆêλD©£M»Ÿ¾][¨…†>[¼ƒwÑ‚ÎE …Ô¦ËTƯDA½ý%N]ívv±`yÐ%þ$h|I‚úsç§çëY˜ôsXX3Œ™Ù †‘›u˜Ã0ffÞß…ß`­föià·€§‹Þ—^~GÜŠÓŸã>è‹7Ù_ËsÀlè ic)_©d+q{HxÈ4Â82¡˜lè%¢‰H3æÓ Bæ Š©?V‡Ê|•Îþ€Ž¾ ¢ˆ&îdUíjá‘Ïö3~f‘SÇfYZó<„ëBÿX+;뢽ˆP«ùz&ž°“4íøªg~²ÆÒœFW ´XÃåÕÃ/«m»²]&ÙffªÚðxòmÕÀ¨Â0"""""rCrÿw}cG”ô¯VªT*m-qLvñqÐÅQ¨! Ë$—AIša’€L\Kâ3Í0iJ#>ÿó> ÇDa™paùÏPè¡kËVj‰1™…'’`FÐÑÆ¶O?ÊèÃÛ9ýƒ7(4‘÷¡,„9ÇØc»ØôÄýÔÂ0.UõiLZèbP™[`öÜ%ÂÅ%pd`2Í0M/£ÇW#9W%eo§—A68Ê€ÌÂôºi†™ÞÉ{P¹5†‘›uøJNcµ£À…œÆÀÌîþð EïKš5ÃäºÒ1šÐ""""""Cîç. ¡ƒx~Fµ²8_£µ=šÐµ½Ä0¾¾]pqõiõ&˜L8&Ó&³¼ &½tÑ” £ÞHãCcv¼ÆÂtHïX‰öž œpõ ;΢9@c»ÚÝÑÎé7g9ýöaíÎ_¤£'`÷“= nn% £6óQÈ…xÂT2yóÌMV™¨EÇÙÙª!•z eeåæ¶mܦ<µÔðyJÒ0ƒù‡aÎí?x>ïAEDDDDä–Ë? 3Ú“9Ñ!>ÿ1æ§çèë›<’°‹à}lˆ‚2qXÆ×/ÃlÂ×fjqƼÃ{¹øÒ[½-&ˆÁγ81ÍÒÄ4Ý[GèÙ2„Ëœ:W?GsÎèé瑯íc⃳œœ¯Ø;p÷­N"""r‡PFDDDnVÞ_ÊmGa˜\˜Yð7€¿ äþÓ:¡0ŒˆˆˆˆˆÈÚäÞj97äí±™© Cíx[Öú’[|fiÒ“¶Å°²¦IL2a# Ñdi0¨.yÆO.ÑÞ0xOA‹5NØq–†c‚VØýd÷<ÔÅ»?žââÉ…œh>J-Æ®'zØöpaè3-05Á8pÞ,”kLž]"¬‚É1«_6†TV ´ÐpÙ¼)¦Ù¶«·ÊÌLUã ´uttåþ§7}o """"r8°wàÄóG&'¼ÆlÖ 07=ÏÀæ(ìâ‰a#ô™Ö8 SËD—3|d|Ü*cøBsx·<C“¶˜8$“„cj!å“1aœÝ[éé‹C1õÀEr®íŒ>pc÷máÌ«ïrò‡oQ«Ôò:¤·]×p/÷}þ ú·ÕC0IáŽE‡Ïâ롯1}êÓg.ÄM0̓.k¹Ý4øÒtI>Mîk²ÝÜÔË›a††»¾ãɉΫEDD60…aDDDäf†y9ç1ï:föóÀo;ŠÞ—‚†©GrODDDDDä† í?xnü…}€±¼ÆXÖÀ‘„ÊÓ†7·g‚.dÂ+ÙÀJ“&MÌYŒˆš`’¶˜hre[b’±\”†1<ÞÃüT3S³ôojex{[ªHBÑÜ’ô¾ÎÞ€'jˆ‰sK¼qð åñJ^‡ô¶Ûöp=ÓKK»#Œ'í¯ …`¢óPY¹xb‘…r- ǸUÂ*I0¦ávôÃòÇ–Z·«o³üùXºÊ†k VФ‘;Éaàóy Ö†!=Á™›š«y?ÞC-ôi~Ȭ~ÝYÔ°:}a‚Ëïž¡ºTÂ/.9YNju¬ùm—­Ý©ßn ¶põ ‹­í¾Ù©ù¨h5ÉØ14Ús­Cq;ä¾À‹ˆˆˆÜ: ȈˆÈMñÞŸ6³ËÀpNCæÝÊqW1³¿|¦è}Y¦¼÷ÓMîÏó3ø–÷~>ÇñDDDDDDnÆ!àËy 66ÃXP°¸±£Í爷«7ÁÔ+>¬I[ ™l Q`cep&zñõû–•„g|͘<»ÄôÅ c»ÛÜœ ÅÄ+Ù:#$2º½±¿¸‰Ggxã¥+,͇yÚ[nhKÿÄ }£-Q¦Ϲ‰0É<(óVáü L_ŠƒEk «8‹Â/+¶­‡c²¥A·ìuš´Á¬l–±ès–N؉îO>“9SFDDDDäÎqˆÃ0ƒ]¸ÀEË=dÚ8f§æœF7äí/A6ìR¿Ä DM0qhÆû((ã¢×ñΨe_¼‹/Îa¼O«B£„DÒhl’ñÌ]žâÄŸ¼ÎÐÎ1ÆöìÀµ•ê¹øÜÏ% Nôwñ±Ÿû »>ùoü[R6 sÆÎgä/ ±dƒ-.j‚Á×DZ´ †zpÆ×_×/ËyðP]òœycŽñ3KlÛÓIÏ`K´àj&“„7œ3î{²—öpìÅIÞ{uú¼ñMëì)ñøÙþpaaÍÇ!˜èxF-0ñû áòéEΟKÃ2É‚´WkhɆU®hÉ´Æ4l³,ÓÐÔ´]f¦–€ú”XÙV”}w """"rçÈõß÷΃C]ŒÏ‘=»™½2×p ‹›`’F‡^Œ0 ÈÄᇆÐLˆ2ÎYÜc /q½IÞˆÛ`êaðίÄøšçòû1yò[÷îbìþ-QhÃ’°E¼àD|.8¼s”ÏÿêN½úG÷e¦ç®zlÖƒ±¶òø×>E×h?aè£62‡+nU1áü§_ÿ€ñÀqL¶åÅV¿m™Û+d\&IJ² &–·ÆAv;[žIBTÀ\y>§ÞÖ»¢­èö[ÞÈ{P¹u†‘[á ÃlHfÖü*ðw€¾‚wg½Ya­B#"""""Iîç0ý#mLœ_Ho¤Ùv–$Œâ㦗z0†z(ÆÅů” ¶ÔÛD’Wˆ^cEŒ«ïG³Fšd 0æ®Tyë¥)FîigÇc]´w™“Ìê«mŽy˜?ÑÇË߽̹ãë{ÒNP2ûÌìë&;…ˆÂ@ÑB¿?0百XáÄ‘fjih­ -Í/Yöûm¾MÓm‚1+Ûe0ci±ÆÒR˜îSòüÁü›a&†ö<‘÷ """""rÛä~^=<ÒÃøÄ\ÃyÑÌÔAWœóq¨%nüð†sçôõ# ÈdÃ2ÄA#ˆ_‡ô5kÑ+.æ-n‰Éb,ªM*Eã:”¤I¦¶Tãäßáò»gØõɇèß2˜i`µz@&¾~ï3²ãÉݼù«¼ý½#Ôªµ¼ù5õŒôòäןeËÞ„µ(Ñ[`|ܾVó\xó$§_?AX !–µ»¸«Üv+o7´Ã¸ô8¦á·,ü², ³â'¨?7ûœ…™üе>Œá‘î¼÷Ñ{*y*"""·ŽÂ0"""r+äù¥Ü¶Ǻ£™Yð ð@Ñû²N) #"""""r}ro¨mcâÂB}ÒPžZŠ&¾Äá‹l`¥¡ Ÿ ¬Ä«©fC4i[ ™PL¦&£10㓱š4Ò,ÎXh\:µÀ峋ìØÓŶGº²‹¯Æ+ØÖ'— njåË¿²•ÓoÍòÃß½ÄÔ奼ù5ÝûxÏüô}%ÂÐGm0¾,qñ2¶Þ`a®Æû¯–™8·½Ïe”ë ´Ø*Û®üYÛ¶Ö|[³ÓŒúg'ÙךaÔ #""""rgy˜ºòph¸Þ¹ØpßÌ•ù4Àà‡÷avñD—'ôÑãaɆe¢Ë ~Nô:Q@&p†!L0Ù@ iØ%M{¸8$ÓÐãñÎêÏÅ1;9ÃÑßý1#»Æ¸ßÃtöuFç IÆ¢sksF[G+O}ýÓ<ü¹Gyùß½ÈÉWßÏëp_UK{ øñ ̵ÐG‡€da‰8ŸŸNœºÈñ?}›…ò|j ‚ÆÆ—†×ä¶]óvà’cHc»Ëª—Iø…a™lfnz>óÎã“j|ôy̗ΫEDD68…aDDDäVÈs¾šan.„¹ša3sÀÖœÆ÷Àk9%"""""rÓ†öüpü…}“À@^cŽ´Äm.Ñœò•J= V¼Ï„X²Á–4°ÒvICލ ÆûLÐeY°ÅÅm2é™&˜tŒd?Èoê4aÍóÁëeΟçÁgzÛÙj[I’¶˜u³ã±nŽþñ$/÷2K a^‡|U#÷´ó™ŸcÓ½„5OF–ÌE ó>½V=ï¿Væô[³é<§z#7Ri²ÍÍm»ú63ÓÕèñÌû7†‘›s`ï@øü‘É×€gósh¸'¾V?Ùšï£Vïë!|ÜA©‡eÂÀÄÍ0.Ä>–ˆÛbê鎤ñÅš´Å¸¨¥¡-¦¾}ú\‹»ôÁyÆ?<ÏΧw³û™)µ¹yçDú6õñ¥¿v€Þ<ÍKÿÇ1qúr^‡½‘ÁCŸ{”O|cm½iL‚IïHÞîÜx™·¿ŒË§.c¶ºÄsËog/Ýšn§!– Iã‹Ù²ð‹- ÍÄá— yhfnz.ÎÀDßøø<|x¤çë–Óâ”"""œÂ0"""r+¼L½9Œ5jfmÞûÅÆ’»[³f˜Í@KNã¿ï½ŸÎi,‘[å0ðù¼m_Ö ³åJ^I›;\´½aqÛKý1V,^…4jri Ç8!4„^ƒ3†_£Y#M2–sF¸¬‘&Û~2?SåÐL0¼¥G?ÛOßpkqõV’¤-&pÆ“?9ÌCÏ ð§¿s70­¢›³ŽžŸþê(<;M` “ I€«€¢ ŒqöÝYÞþÑ4K µhu^—ïøX4â€Læ’$ tÕ@ —Ͷi¾íµhÌŒòT%}ÿÉs1É= £I;"""""wžÃä†éNÏiÒ<óå:û:¢ K|ñBgqÐ%Ódœwxd2AÜæ’ ÍÔV4¾[/ Äà­±-Æ2a3¼s a™°òþÞåÜÑ<ü{Ù¾wGÚºš,2‘´Ä8glÛ»ƒ_øÇ¿Ä±?8Ìÿ¯™/Ï_ã¨Ý:›ÚÊs¿òE†woJC0¸z&zÛQCÌÒ|…·þä N>‡´éÅâ„Oh¡!ã–cÖ„ÁV¾¤á—&÷­¸¿Éë΢ÀUü=LÑ £ój‘ Na¹iÞ{of¯ŸÍa8¶ÇsKînÍÂ0y6é‹7Ùˆ‘gf¤Ì¬èdzÓUºûZXÒ&–$ÔÒä±8hBXñÙÀÌŠ&˜zˆÅ–[\Š©¯pZo–il¤Y˜1ƒËgø£sž]vóèghï 'ë$ã½-üä_ÚÆÞÏ óý{–sÇgs9ö.0žøü0Ï|eŒ¶Ÿ„^ê-0ÎE&Ï-òúMpåâR<á(9^«P\c ¥aÛ$ “f¨eÜÕ-Éë4»yx¦ñ903]©‡`’OžAßPk.Ç>C߈ˆˆˆˆÜyrýw~óð1;5G÷@gÚä’„]¢€KÜ ã³A™øº7BµÉ¤¡™ –É„fBÃ×1–©AÉ6¾_ÜÚÂ2.:§Ÿ//rèw~ȉ—ßãc_y’ámÃi(#9ÇÎ4>ö3OóèO<ÆŸþë?æðó¯Ön_ kÏpŸû•/ðÐg¥æ=a\Ò“”æÄç¾ò>oüáQ–ªqLrÉ®‘Üoõ*œä±l5NÓÛ®ávC¨%¸Fø¥IX¦ip&Ó03;5·â3×ÝÓF[[®ÓYkÀ‘<‘[Oa¹U‘O¢@‚Â0r») #"""""rýç9ØÀHkcÈ!¾fºBÏ@KÓ&˜$¼âãÀJ³` q`Å!†ù•M0ÄM0>n“YÙSÎ8Œ°Ù~8É«, çøÐóÁëeN½=ËÞÏ ðàÇûêóX\6%ÝÙÉÏÿÚ¼ó£+üÉoŸ¥<±tÛŽû®½}<÷­ lj‹^RI/êšaÌ`a¦Â¡ïMpêÍÙx^ÎÕ(×VÁ5Û–L@&óz -3ÍC/ûP?ÄË·™¹RIßn¢o • dähx/ÏEDDDD$¹þpx¤›Æ³›ÈÌ•9¶8‹Ú\’F˜Bo+2nÙ}3|À²ÐLt_˜¹/tFÍ7k|‰Y¨7¾Dá•(,“¤Dâ繸Q&Ž1ï¢Å(\´?}™ïýo¿Ç®'wñäWž¢«¯3Í€4æAŒÎÞ¾ôW¿ÌÓžæ÷ÿÙwøà•÷oéñ.µ–øôŸßÇ'ÿügZJÔB Áãqq È’ÂUƒ‹œç•o½ÌÔÅéè½IËK¶í%s;>Ù5[ö¸ewÍn×/- ²Ä­?ñ± qð…ÆÇƒÆÛõí¬áùé¥3f®dÂ0ñw%Ãù·Â¼}`ï@~5@"""r[( #"""·Jž_ÊåH»S 8×ä~…aDDDDDD®.×s™¨&bÉ ÊS¶$Á’´¥¥1°Ò,Øgê Ѧ0i[ ™$ز¬ †ôùÑëG“pˆŸß,8ÙFšl`¦²òòïóÞ¡i>ñÓ#Üó@dÓ™ë†ñÐ'Ùýä?þöy~üݨ.ݺ•l7µóù_ØÁ®½½à=ž8“^Æ¿ ƒ0ô}q’c/NR«ùL¦Yð¤@¹ž†–µZêá—åÍ3õ`L½Ñ§¢i|NãÏÌteÙ¡7úGÛoÙq^£×‡ö¼}Ë‹ˆˆˆˆHQÞ¶kmx+ ÷ñyT&3se®Þæá‰.Ée|= ¸ø4ìzžÓšÉ¼N64ã!ô™KÒÔê]¼pD¶ñ%ɤM2qXÆY“¶ª&M2µ¼ò>§^ûÇ÷?ÁÞ/ìÅ•\|Þg ç¬ÎÁè½£üâ7ÿ3ÞýÓwxá·¾Íø™ñ›>Ö~á1¾ô_|™Þ‘>j¡' ã³ê¸Æ[‚ñ”'Êüðÿý1§Žž‚ ˆÂ. -.vã·-s{y»Œs+]²-/MZb[¹]cX&Ó"ß?se.þ¾ÄÒ6¢`V®ô÷x‘;€Â0"""r«ä¹ò«Â0r»óÞW›ÜŸçg/×Õ”EDDDDDn‘wY +ÁFWÎ 2 |¥’ E4V¼Ï„X–[¢‰5Ëî˶„d+> ±dƒ-.išIÆh ¶d›`’m’ÀL¶‘†x«¤ÕÆÌsåâ/ü˳ìØÓÅ'¿2Fïpë²w]ÿiiu<ûgîá±ÏòÇÿ÷)ÞþÑÍMÚië øô×îáÉ/ŽáDÉ¢(Üã!NþÔwåÃ#e~ôíKÌNU¢ EneHåz-«5´dÃ*Ù`ÊjÛ¬ºíjá—$“Ùg”¯,E¿Ÿ”g`$ûûÈ…&툈ˆˆˆÜì¨<dòðTãuvµÒÑÙÂÂb­áÔ²<9Gà,mr Ãy¿2ìâÎ…Qà! ÈÄ '>¨‡fBW|yh& ­1Ä’V£dÛbâsñ´-¦ˆIB/m1ñù?™ ÷T+5^ù—yçÅ·xöŸb÷S÷ÆA«·™d®ïùìÃ<üìƒüàß¾Ä÷þŲ0»pÝÇx˃[øês€íOì$ IC0ÞûìÛÄT*¼ú»‡xý{G k> ÂÄÁ‹Ã*7~Û­¼m™V˜ø±z£Ëò‹56¾\å§áyÖx¿sÆÌäìŠã4”3ŒÎ«EDDî ȈˆÈ­ò0tä0–Â0r»Zåþ¼>{§½÷—sKDDDDDä–Ú0aßkÀ³yŒ×Òêèê+±0[êA‡òTe•&–¸ „ưIò˜Ã(QС1ØÒŽqÉz¹†ùåÁÃǯѬ‘¦Ήç54ÁdCñê¶ËiN¾1Ë©·>à±ÏòäOŽÒÒîâ=Iþ3£w¨õA>öÅi¾÷~ÈÅ“+'›\ì}nûþ“mtv—ˆfù†àK½Æ3~n|ë<}8/.{;-¶Ê¶+6׳íÊçPo—qÑgffºÖpÌÆ–¢œhÒŽˆˆˆˆÈë9…a !œ=;ߊN,§'g£ðBl â ŠÂeaOè,nI2ñõÌ}AŒ‰^Ó¯ÍÔ|tòUo|!:·^Ñø<êm1I“L´CÚcsQàsËÂ2Fùr™ïþ¯ßeÛž{xî?ËÈöázAŠKšbâG©ÄOüÒs|âgŸæ;ÿô»üø[¯àC¿ú5¯’ IDATutóÓ¿ºŸOüìÇñ@-ŒÎ©ã¯pq3Ž8à­—Þæà¿ýsåù(´ñƒ–<á*·ÝnÛÕo[| ²­.+.­éífÁ—ôþ ñ¾êR•Å…•ëR+ #"""7@a¹%¼÷53;<“Ãp ÃÈíVtF_¼‰ˆˆˆˆÈFv˜œÂ0ƒ#mœ›k‚”¯,E¡†¤‰Å7i`‰WšÍVV6ÂX:±¦!0“ ¶$ášL`¥Y#M=TfâíÒ&˜tŒLp' cÄáœx›°æyí{ã¼ý£+<ó•Í<ô‰ÁúÆi¢$fpσ}ü¥ÿñcýã ¼øïN07]¹æqÝöpŸÿ‹»ÝÞI€i6Ñ' ÍÏVùñwÎóö®ÑJÁið$i]I/Ã%æ¨o{]–5Y®±­-Û–«lc³åjt,’ÃãÂ0j”¹såúïýá†0 €1=1GDÍ0õ`‹/ ^Ë2ñuo„ÎÇA#tį·Éd^;tÞ2/–†]_¢€‹™«‡eÒö¢“ó4,=¬áuƒ6§ß8Í¿þµÍã?ùŸý ûèìíHÏÿ–gIúFzø ÿÓ7xî/îã·ÿþïðþ«6=žA)à¹ÿtûÿò—híj# }Ô/Øá3»gæ9ÿÞG|ï_~Ÿ>¸ˆ9‹.-nm1«ßvIh({ûZ—nM·¯Úöb!˜ ½¯– œMB4Ùí ÊSóMŽšå†ñÀky("""·‡Â0"""r+"Ÿ0̶Æ»›Â0"""òÿ³wæq–\eÝÿ=§f¦3™IÒ7·'»$²Ø(d$È ¶b³åEäEÐWPQx4€ ú²¹ û‹;Ȧ€À€{  Y& IHÂdÏ,½÷lÝ}ëyÿ¨íœS§êÞ;Ó·z¦û÷ͧ¨[U§žsnÝâ󙪮oý!„=^Ó á®Ýu 3K¹Ä +¡$˜\€ÈX€TŒ%ÅXÂJžöâ 3¢ÉhÓåDšTªÉª”Æa‰;ù[bÉ4Ù8T‡æ;øúÇoÇ5—ìÇ“Ÿîý ­(, wŒ>õLüäãï…ï\x+~ð¥;wÊ‚ËiÛNÂS^ø`œó¸mp$÷ˆcàêoîÇe;ïÁâ‘8Oƒé[VqdwŽLœ©­·^¡Å–^ÂòK¸X˜uß^›ù0­m›ú;q#®k²CB!„BH£4z]ÝHsSréA£Lv‘4%™Çéö8cP’e"c §é0IÈh@štrKÄ$ׂšÊ+¢P“%¾d 0!YFJI2¢j×ÊE›Âx‰;\þ_W⇗\‡Ÿ{Ñv<îYçBÄ@Ä’@¤CøÈûáþýpÙ¯Àgþòó˜º{&?n£O}8žÿ†ç`ÛFÇYLîò¤"OÒõÂÔ¾ö¡‹qõ7˜È-ÆÀNiÉLœL|É&_dÉÚ‡E™ÞDHH|±^¢À:;¦n_{9,̺/4Én2„ÎÃróøhk®É !„2(ÃB!d%iꦓaÈ )É0"²Àé õO†B!„r"Óè5M–Èa…t`nz)—IœD˜,¥p’X4Obɤ•²8ã$Âu’`oƒ+¶h&Ì —.4gìDšR"Œ—S’s²DšTÜÙ{Û!|úonÄ99O|ÞYØ:øÆÇoÆÍWìlŠðøg=}æým”’ø’|–üó­×Íaâ3·afïK‚9¶Ô•Ú¶tØëº-aù¥^ž)K6‚…Ù%ç|óÏÆ¸º=6Ñ=Þ‡B!„r¢² @@ÔDg¡DŽ#‡—°xx †6À(r‘!ÿ¬HEA” 2–4§ÛãHS)&Y—KyMäÛU8“YÒ:yª ™%(Ëä‰/šîã 1ÉKœ±’d’}’}-Á—>øe\þÅËñK¿÷ œý¸‡NJzÍkË1Ö£ñ˜±Qü×ß W|åœÿºgâ‘?÷0Äš$Á }ÙEP“ߟè,/ã[ÿ~)¾õÉK±x¤‰êå•B‚1E\Möf “¶ H4Ùöð²q–}a%$¹äòK@x©”_ufÒdëÂZÙÖ¨ ÿÇB!kÊ0„BYIšŠk>YDÚª:ÙPdýq{`]“V£Ñç„B!„²Â\‡$¹¢;`xÛ¦’™°x¤ƒÅÅ6n4AÙÄVB² ò0”"¥Å’#ÂJ©/ƒ´C!„BÈÚçr4$ôC2ŒsÓ±í¾Ã–ì’™àE… “Ì5]q*NDÙgGš) 4¶4ÓÑL I%1ÐL„±R]|‰%‘e$c ŠD°±íM¯µ½$™L´¹nâzÜpéxÊ Ÿ€_xùÓpò)'p’(Mf4ÄZ¤Áˆhžs÷wã3óEÜ|Ån ŠÒ”)ÌšRj‹ýr6åËvbL¹¯’°Ò%é%OžñešT¢‰ìõ’®ÁÜÌÒ¹vz{Krmß¼®&„BÖ”a!„²b¨ê¢ˆ\ à§èîþà[0ÉàXM†7Þ!„B!k+Д 3’Ê0Þ3ó³K¹÷Ie¡D‹„g›XI,š%°„Åxi2N à+n"LÚ‡zuí¾29G%qGL¤qú2‰¸3?¹ˆ/ü¿pÖÙ÷à¼_θÿÖô9¦uàRûEô4#F×\r¾sá­8¼°TH%} -´í"´T´¯ jÚTµ…õJcOŘ¼m.Ê$ÓüÌbé\;½ÙT€÷!„BY\àÅMt42²%¸~~ú "#Щà"ˆ" V1šJ-iRˆ Œ10çi!™å²L6·k¦E&ȤýÀ‘Z$—]ê%“'°hò¡eRñÃO’E!ÚXµ Iûåå¾öáKðýÏ_†çüŸgâ‰ç?6¹–Dq ¥2L …Æéz$ל Ó øÜ»wâ;Ÿ½ *HD˜TT‘lL+¶lº/‹›.ã$ºH@~‘²c¢°0ö‰ûÌO,kUçàá³&„BÈ2 !„BVšËÑœ CÈ XPÕéÀzÊ0„B!„Ò;]Û oÛ\¿0³dI®°¢iŠ‹“Îb &K‚ 3–°¢©”R[¬4™DŒñÆ‘ÕϪ¨'ÌXI0Hk¸ã@!Þ@’v*Ä;nœÅGÿäø©óÎÄ“_ðœ|Š}¼²/äá {=wÞ8‹o|ü&ì½mÆ‘B¤~>¡E*Ú–›~Ú–÷Éh‚•SÌçg–ŠC”ƒ#ásp@tìj²CB!„BÈªÐØuõé§'©ê­Ÿ›:Š*izK$PMR?ÔHÈbͦ¢Œ-ÍØ² &«i¥ÉزÌr&½¨I®ÁK‹B-!¦H|I/êJ² ¬”õD›¤}!ÚdmŠTšùÉøÈëÿ —üÛ·ñÂ?{Î~̃_Z×üq'Æ×þõ|þ}_Æ¡…#@d &r/L)Æ–¥¿e)R\Bé.áÔ—DvÉå)K1!YÆn7?aÚt¢Áqûøhk“B!dpP†!„BÈJÓÔ4(ÃAJ…š;çøB!„BÈZ ±‡vNÞ„ Äu9$xH&”xÂJY6)D•<ÅJª’X±%ï#KiIû2‰ c'Ò”aŒ¦â')%Òdsc1ÔI¤±ÅÁU߸×wžtþƒðè§ßfƒ Š¹Éøø? ßß—<[S’Bº(Ž ƒ’Dƒ~ëõ+²Ô´¯-jÚøu ‰dåÓj6æ‡í±‰ÃMvH!„BY®DØY}ñ¶BD‘A«µS3î¥ÆìÔDF«¦óTŠˆÒ$…#¶˜HY‚L’*SÈ2q¤ˆRÙ%¶ö)öwe™8“YÒ}ÄI‹1éѱ啺ıÄK´K–K–‘p*Íî]·áÏÿìsñ¢7=ÃgœŠ8ŠX“²×}ûF|äO>»oÙ Il8©,&IeÉ—ÅZ6¡eØ.Þöþ—+eG^A.¹DY&ŠÒŒ¸õìýD€¹é¥s°=Ò¨ ×SB!k³Ú „BÈš£©”aÈ Xm†7ß!„B!k]–›èH8­]Næ˜Ï“a AÙÁ’7*ŠlÿBŠ( ÝjXÛƒòFžªÒ[ {ðk˜° räà2¾þÑáC|“w>©c™D—ùvüÓk/Å ßÛBŽN@©ý¾Þ¶ÔI”%_ 4*Ãð¾!„B!ë€ñÑÖ€››ê¯$#(03y \Œq„gŠÄK©H1EU׉¬í¹b'¡X)'bÄšGôpÒPò[*1®”âµ³ûô…UÅ¥]†k'~„8Vt:ÉÇÉôÅ~wß¼'­eÃ^Î.BMé¸ñÅeŽNŒ ýFùoú]%¼Î—iBI3Ùºƒó‡Ç~02²¥¡3¯« !„5eB!„¬4Wˆèç~ ôAÖ'«)Ą̃ê- ôC!„B!%M®¸¾©þ†G†9f§Ër„-_„Äg{YJ1¶lbÂòºÔôaw»+ÝT§§5²ç€ÂbGñ]}Y&ï:€½·Î#9hîtóåû±¼÷&´T(ý¤®ÔJ*ÎñöŽmðøã ×­{Y²qÛ,̤~—w® ”e¬‡v!„BY?4öïÿ‘v9™cfÿB‘ê\¢²ä”²ìâÜ 0þr•Tão7µË¾Ôo„Ä–úß+¸NÜuó3‡Ê'Ÿ6ž sE“B!d°P†!„BÈŠ¢ªÜÐ@WL†!ƒ¢$Ȉ8«¾yãB!„²–hì¡<™#s:ÌO/•’XœÉ‘bòƒ%¬”a,Y£R²€S£,”ôš&SÞVHG‘&c£¶çË+*´ƒ¤Òµ­%ÆÀ™—}h\Îqì2v0?»è{0Éù·­ÑdÞ; „B!dýÐØ¿ÿÛdŽÙ©P™àbK+u©0QTþ\'ÍØûJ&±X‰(åÄ—ÄHu±Úê•Ë(¹Dc× ‹6 šÈ/™Ó‰ctb…*zaLË©Œã|/k¬Y]cŠåìxÔÌ%—SÒ4ÉR]PÈOÁ¹µŸäñەχù©ƒÅ fÝÃid¬—LB!kÊ0„BMÜ”;SD66ÐY„’a׼òB!„BÈZ¢±‡ Z~2‡ó3K€j½l"Ht©3Ò‡>ºÉ&¨“R²°ÄGX1°Ä {»-çø5lù£ø.Aq'KXÉÐT‚Ñâ)”Á -¡©.™¥êw µ­Z¬ã–‰2ùo¢\AV½…™¥ÞοÁ¡à½B!„BÖÍ%Ã’9âX±0{¨6&2¹Å-*¥™Pšˆ-ÊDEBD‘ à–XŠövŠJ.kU‰6¾’l‹c¤É01–;qž£‚¢N6†Ò²ô¿,Þw2â­·ú’ê¾{NuÉ–sñÞoåÊ2Å~™,ƒtßb¿¹éöí‡E»]–±ÄÞñÑÖMuF!„ÁC†B!ƒ ‰›rÀ}臬?B2LSID| !„B!d-ÑØ5Îi#CùsÙ<Ž ó’lR)ÇØB‰/Ìø5ºH/¾á!A£{\Ìè–&#výÔ’ŒP¨ “-ŽWµÐÒ‹¤²B‹Õ5mü¾¡¥‹ð”§Ùâ‘wNÌÏ2Lvž‰§µ“anjMÌ7Õ!„B!dÕi.¦$#$W=³S¢‹Ÿür*LäJ%i& ÕDḬbŠ„“ ‰ÅGŠ$™²,ã‰&¹mÜZ¶Xb§ÂÄy:Œw¬2€åü{ÙÛýt˜rºŒ“è"ùEÇ? H3b­“ò﨤H²Ù²e›77öTþ=žBYcP†!„BÈ hêBS‚Y_P†!„B!„•áJxïú~2GÖéüÌbXœpXª“XÚ7—El¡Ã«ÑUX±·ÛÂL5êÄ[ºq^ k‰(iŒZT=ñįåÏ‹i¥…Gdé"½”å—ê6aQ)—ާû›Ï’aN>u#6llìÏmL…!„B!d1>ÚÚàŽ&újçÉ0nlÇÌäBnˆÊÒCH”‰"WŠ(‰QøsP”I?g2G‘šbK,™àbܹØâ‹ŸøbÉ2¶h“í#~?e 'ÖB€±çŠ¢½s{´‰0–¬ã.KËÅcà +nºK0FÜß§Ô.(¾„k%2Œ{Ž5˜ ðºšBYsP†!„BÈ hêe²ÒÄßPnâ\;à†ú!„B!„FH,nj¢¯ámCeíFSÆTHNÒK°ÒSšLa¥*MÆ‘J*¤ƒ"­¤[ 8R´³Å$&I„•ÓMR ¦®„ä뻇Çߥ^BK8…¦nìY[÷XTËo;?½$ÎP~ÈZÛK…ø B!„BÖ#\Œ´·úŽ`vò@)½% ÉuNŠL) %i¦®f¢G!ºd‹%ÄX©.]_ŒcÉ2Y]î 1ªÈ˜åN*ÄtâôÒKi1Ö²Øýfãª[öç¦Ïådî_T+…“ýNþúpxµÊrMd³“åd˜öH£2 ¯« !„5eB!„¬8ª:à–º¢ CVš{Tµüš×fε«T5n B!„Bi’F2N“alIAÌM-¹RJ•láH1‹ž°RJBñj”úªVàר“:j¤—äá–.5,q§8X±5%O=ÕË*eÁ¤ç„–@º JBQµ¤âÊ/ÝÓeBBKÝØÝ¶å6sÓ‹Pëé00Üü ^À‡v!„BY4r°õ”! EÉBv]­Àô¾Wjˆ,¹¡$¸ˆ#ÊÔK3¦œ¨iב\b)§ºI.Åç*‰%—e‚i1Ñ&_vÓbb:8•`Št…%íØcóÆžMÝÅ_”éU„1Îré·ð¦RòKhŸ|%¿8¿3¼Z®,3ãÈ0ɵõH{ké| ¼®&„BÖ”a!„2(šH‡¡ CVšÛ*Ö7q®1’™B!„²iä!ƒ¡“"lÞ²€ûÛ¹é¥a¥& &(Xô*¬Ô¤¸øBHtÓc"M­¸c|¹ÃýP-M…xR!´å—Þ%•Údã}·ô{Àû>Ç"´”ÛÚß±zì `~Æ~FòtX&b5ïB!„²þhì: Ý¶:’kž©ý ŽL‚‰REWi•ûÛë"»¦A!¤dRЏ‚K‘ãË2…Ä‚¼Mºo&©äµŠº®,ãÖµHƒéÄ1:qG½‹ÑrJK!Áøo†°ÇÚï² ,K¾™Àodÿ¦ø j¤_Ék…ꤿåòRç;²T1Ò\2ÌÌøh«‰—ºB!¤A(ÃB!dP4ñ° e²Ò¬¦ ÷ÐB!„BÖ"]뜶͓˜Z´„€°âÉ&¹ QJ+±Xº +pjÔH!ŽS!vô"çÔÔ¨L¤É“`üé…oGŸÌRÑÖ;öY² *·÷Û9çBõØý¶ç—ÑYVï¡4)ÃÜÞ›ØßTg„B!„ã†Æ®«GFÊ Y2L”J %©Å–*¢$¤,Í RªpD™HœD‘’t™ÆÁÂÌb"Z¥çV&^µ¶Q†!„B!„ œF^412â%t(ppá0,‡Ó`"WtqSF<á"*¦ËäÛ=¡Â«™ a‰%K\)„˜\~1–$“ &RQ«,Ú¸©4±d˜Ž‚Ê”–îË)/’¥ÅØã¶Óbé2Ƹ‰.R!"ĤRò‹„ÛF&üûزLVkvò@~-mOmÊ0„B9(ÃB!d ¨ê^w ¸›SEä´÷AÖ·Ö5‘@tª.uoF!„B!'$-wâ䨉]KzX6=,Û¿¶°“Ý$kìɲIÓtÊÇ;Kw)ÿFNJL•üR_ü„ r›$¦8¯€$q¦Õ:¹‰Ó  C!„¬I(ÃB!d0†œh„ÞVÜÄ9Æo„B!„µLc2Œå(äâÂüôb¥(RN`)'±˜„•°Xa -ÝJ’:GŸ&cÃ/µd¢GfuxSꘔú*Ë*®c÷ƒà˜{¨×Eh §ÐÔÉ3Ǥ¢ÏpÛä»ÍM/ªÎ[l£[OÛØÄé ðÞ!„B!ë™fd˜‘­Öõ!òËÆ©=ó¥4[€15‚‹½½ZšAY è¡¦#ƒdâˆXK&¯d *Æ8²‹+˸rL.ÍXuéĤÉ0q*ÄdS¬PØ‚Ž%Ԉݿ,+¸,©ãÉ/â L‘-ÅäëÝåRBWÇ—*ScRYffÿëlKîà´Z'Ãiâô>à†&:"„BH³P†!„BÈ ¡ CN4(ÃB!„BÈÊÓH¢ÅðÈ&'é³;³S‹õ)*²‰#FØÂGH¤¨Và+½'Òø¢G1Žj9ÇäòMµ,‚ô;Sa ù~…¬RLúJh±Iû¯<^2‹'´t—_j„–ªcšÏ«¿Ÿˆ`nj1}T'9N Åp»±T˜½í±‰;›êŒB!„rÜÑÈßGF¶xk’ëŸÉ} É5§'¨”ä–(üÙ•b\ŒS³j %“HšêRÈ+¶ÔbI,VÊŠŸ$#i K¶o.Ëd‰¥ºI*M¬@§£ÎwîE¦-Ô¸ÂÊÊ‹0ÆYî%ÑÅVª_,ù%²÷ËfPÈ5Ž,“ýÞÀÔ¾y/ÑWÑn7– sÕøh+nª3B!„4džÕ!„BÖ4”aȉÄAUÝXO†B!„BŽF®yZÛ†ò4µ¬˜\J&I>Qµå •qf¹ IDAT-æ¢Öº\öÐôá’D‰hºo¾M4‘= IÊJ¾ÍêË$"Š( éölž‹€ºuq¤¶H1MÛ}ØßÁúÎéq€žé"…ô+©tMf±Äxóné2ý -åd™ê±m“u³SKÞ¹…&eÞ7 „B!d}s €Y§ ²“ÓOß@U¡ªÉµ-€É=óÙA 6@¤‚8•Œ¦ÒƒJ.>äëŒ R¦û¨hhºN#ª&µ²}"ÿ3r C5‡jRKPªI.ÖL:W“\[ªBÕ@L:O÷5PÕT–Q@%ÿœmc’ûªPc¼Z‚8NdXi3¶c\É&O›ñÄž–M`Yò媤–\b ‰/}JûYûV 6v»¿éý (^Æ‘0ÒÞ:ÈSÚ†×Õ„BÈ…É0„B$M¼ù•2 Y)n¯X?ès¬`×€û „B!„U£=6q€=ƒîç”ÖÆä™—ô?¤ÿ[È0–Q#Y@l£JòpÓNB†“€”@$}v%œ“í ãoƒSCÒ‡‹êj$à¸5T¡ÿ’cÕ§Ðâ¿RÛ~E¯­%ÆÀ>.ÎoÐ]h©{uÛdš›\„ýˆ“ÞÖ˜ ÓHº!„B!äød|´¥®t?7F8íÔ“ŠéK&&÷Îç«2)ÅI„1^*Œ•’2ª¤‰êD¯Nd¥É˜T1¡Ä±¤”"ÕÅN‹gž¥ÄصÄN,)%VE'v§åNòÒ 7¥%¯çˆ1Ö²Øc6éþÞ²ýœ¹q–%•O"OX±ÒZ¢Àzq‹Ú™Š) ˆ6Q:®©½ V0mò¦‰öeB!„”a!„20Tõ6“î†2 Y)n«X?èsìzU=4à>!„B!dµøCÆNmmʬÈ<2@YtÊÝÄ™€èaB…/¥”·ÁGU Gº©Iú­Q<âLÕòË1 -V›^R\úZ¬ß–™8“É2¾hc+°Ü‰Ñ±§X¡Ù[-l‰&´,Öøü R[ÂqÖ×'ÂÀ’„Š$—òo“+ð$8óÈ[.êóH¿}T>'ÎÂòr€›¤Ónoiâ´ø’ B!dÍB†B!ƒfÐ7åî7àúdý°Z2 h!„B!„¬yè`xd“#+@K†©Vò¤‘n²EÙ¤6=ÅIi È –¼”4lÉ£²†-„–lœ@avXS7I¥¡¥Ü¶—„–Þ%_*B—ñ¸¢Œ=¹ÇÕ¯7?³U…ª:BÌðHcÉ0¼w@!„Bi人ÝÞ’^ô OðØ¿gÞi–[L"UX©1¹ QJuñ¥™pÂL^'BåþÙºj‰%_ ‰%_–¢]!“”“dŠ„Wˆ‰èt´4¨Lm)/ÛscÉ9Ö²wìb}'oÙOeé'ÑÅi¨SU+_'…49u€éý¬——Ö#Í$Ã,¸¦‰Ž!„Ò<”a!„2hýÇz&Õ¢J†´pÅZ!„B!ëF®}†G†’wŒÚÉ0û8m"$¶8i1¹Ã“MzVV&‘&X£Fð©«‘<…—'Ñr¢Š-‘Ô-=§¸E–îÒK±Ý_}_}·µ¿t>7½XzhG¡M%ÃÌøqB!„BŽk¹®Îåë…Sû’Ï)"nH"¨À•**’`üí•I3‘+ÄTI3¶”X¤Hu)Ë2eÁÅP¬ZY{XµbMä—厢§óŽB%?HÅ~¥eX–ð²5öLŒqâO­äcP!¿¶äâÈ/âG7•§B~‘Àº€è”}žÞ¿;m¨8ßI†¹f|´µÔDG„Biž «=B!„¬y}Sî¾"©jgÀýµOI†‘3œ4à~)ÃB!„BÖÉ0‰¨P<^1›‰ R´KˆQˆI„™BvQkŽäA(T’­“äsò°LÒ‹( ¹\¡E$M\¨h¹/£ÉÐÒ>Tì¾RÑ¢®ÓW:F¨[·è É8Ôú^‚t÷!”´§zI%¨R¤­¬`ŠKÏB m¥‡¶RѶ<®¹©%7@É ÖÚÖˆ sE{l¢üCB!„BÖ×8`ó ;É“a$»ˆVt–;˜:ˆáv!.DF F  *ˆ Š€XSñB3©"ûŒD–H?G*PD‘@ÓÏÉ\“Z*ˆ½}‚uŒ$×iF«*P5É…ºI/ú5FT¡j &+ F!j ªcR(“OHk%Û\“gµb ŽÝ˵ä~„±$WÈq$›ž–³œ]˜»í%a<ùE’R&ÅäëQÞÏ—]ÄÞ/] =QiŸbšÚ·`%¥/™P ÝL2 ÿO!„¬a˜ C!„A3è¸æ Îpd}p{`Ý “‡À•îƒB!„BVöØÄLºŸá‘M¹°¹ËKŠ…Y÷ ŽìÐsÂJM»RšŒWÃX5‚‚F}"MIB Õ )ß!ÿë–§€`Ò—ÐbÜ>Æê=°“L€äWR $}ˆ,¶c$e\afe…–ª6þo„@›ÙÉE UMß œ|ÊlÜÔÈŸÙøÐ!„B!$cà²üÈÈV¯2frïB©mP°Löö®¢‹-pT}¶…“¤›ä²„$ãÈ.¶ãÊ1&•f,‰&kïË2"ˆèt4bâ\ŒQ ¸ø5ö®±dšn˦‡åBαe#[v©ým²L¶-ù)/=ýÖù>‰4“ÈTéy•Þ°i7’ ð%„BÈš†2 !„BŠ&¯ödòÅçÜ2Àúd}ðïvÖ_ àëì—7Þ!„B!ë‰?ÔßÚ6d‰0ÉUÅìTY†)'‰RTªdŽa¥ç™R%u˜n5¼–` TÖP⎖&ûØ :™¥VhqäórNoB‹?®ê¶åifòˆ'Y)Zͤ¼w@!„B)øõA{dkê¿d×ÔÉçÉ=á÷ûE©TaË,¡Ï™ÑUÆÕ±åŒ(TÇ85É/vŠüâ§ÅXòJþ9,Ëı¢“NËÙçŽBa‰8â÷™.‹µlL²,ö²xÛ«—%—Oücã§¶xëÅ“z^Jò‹”×ÙRLî™/Wí‘-ƒ> àª&:"„BÈê@†B!M0ˆ›r×xºª>GUï@}²>XðJU}¡ª.ùUõU}€çøñúç-„B!„õÄÀ¯Z#Cyz‡Zé0³dÀ–EBI(®l”+Lu\´è©†Ÿ&ã%ÂT¤ÉtK¤ñåX5b-‹0™ ÓÐÒ½-m.¡¥Ô—±¾—#ÊX“W¯^~‘R[˜\r’†Tá‘¡žË)ÜÐDG„B!„‚¿dâÔSOÂÆé#…ù…50¹§œ dΈ/I ”êã&¤™^Lò:Ž,ƒRÍpâK‘ê’'¾äâ‹ä‘ޏ”e’íY2Œ3ʼn SÔô›,-Æx¤&›¼¨T/&´\Nwq“BX'¿¸²LäË3â-A$î²ý[8ë-A&÷Ì%/-ÉÑ4…hà\?>Ú:ÔDG„BY(ÃB!¤ Vò¦Ü€Wx”ª~uë’õÇ-ž¤ªèÖPU/ð0o¾Ó{t ü†5!„B!„G \†9iK„¡Í‘—âQ-ö”R#¬Øâ…/ÌøbK BíLUâ™™Jq§T£>‘FãÀC;ä!§z¡¥JRé§íÑI*eY¥»`Sˆ2öä¦ËÔÕSfö)IV É0WµÇ&:MtD!„B9!¸@é+M»½Å´&@@p1ŽÜ’‹¡$˜¨,U8“%Ê$i#¨ÜßžÄbJBJ0ñÅä‰/%Y&ÿœµI>e˜,qÕ–iRyÅ™‹•Lc/KZßK¶ÝXÛÓe?•¥8Þ}® Ô1%IÉ“iÄ—füvÉ¡XZì`~æ`v2å‚U»ÝH2 ÿO!„¬q(ÃB!¤ Vâa—€÷x¨ª~@Uù 9> àgTõ²^wPÕ#ªúvgø’ çc…É0„B!„õÄ º“á‘!K„I†™ýG*Û»b†+¬„D c %yÃO*©5Lö2ÙêÉÃ/¢‡S¿¾F"ð”ÛiU2Lú|“¶R)²¸BKmŠKIdé.½¸ÂOø{ø}õÝÖ¸ÇÊ>¶pp~K‹±sNA­‘Mƒ;‰ øÐ!„B!$g|´µàÚA÷3ÒÞšü%4È&÷VË0€/¨XÒD$Ž@QJ…ñŠ*Á%XÇ«é·Í$Wp±Sbl!¦]Šô+I&a,a%Ö²ÓéÄPŠ »¶¿,áe)$'ÆÚ–«,¬x¢‹Ö…ÚE6â'ËT‹L¡v"’ž;óÎù¤é熒aø÷xB!dC†B!MðCÇ=ûU$I0¿¯ªS+4&²>9 àwUõªZǶU½[U_àñ¾w c¹]U÷Ãþ„B!„rBÑ›ˆ\5è~†G69)P`z_u2 P!KxÒKP²ÈÅ™.Rе®$t«”s¬qÔI7v o]\• _PñŽ…/Ê¿ýѧ¸ô&´ ÐVzh+mÃãʘ™<’<¯[/°U`x[#É0|h‡B!„â3ðë„‘‘-Ž´ULíY¨ÝÇI ñ¤”Ê[p‰L@pAXâ¨Hƒñ哉0ÎÜ•]lQÅ•c¬D¯F&§Ä tâØ›@VKÜš=-g9›ÜöÉd§²D©ˆ’IEIbO&&Ùi-®Ø’¥»ø‚Œ+8E!A)$ÈXSÆäÞùüÅ ÉÍš6eB!„¬”a!„2pÒ—]G±ëÍž£ªOWÕÚ7܈ș"òaù¤ˆœzT%k<^U?XÕ@DΑÿ‘÷ŠH«®˜ª~Àü/wÅxxãB!„²øµPkdÈ‘4Fm2 €€á'± }«i½°‚ªµ).E WÖè§F( Æû^ƪa¤:G!´8¢ ¬y÷t™jIe„–Òñ¬ø}­6ùÒå˜…Ž«¸¿ŸSÆã¥öˆ»Þfrϲ)Kˆ§··¬ð™[â–ñÑÖ\÷f„B9‘¡ C!„¦è妜ø0€³Uõ/Uu±®±ˆ<ÀuÞÀ~mȃ|[D^u”c%k‡C~KU]UƒÙÝ"bDäM¾ àLkSÀÈU?_׉ªPÕ7x8€Ïö86¾Ý•B!„²|2̶¡"Å#.žß™¬½ÍÀ“&jd' ¥Jé"¬øÒMP̨Dªj”Ä”š4Õò;<¦Z¤é'™¥ZR©hkÉF…(ãKD½ -þ¸ªÛ–'›éýGŠD˜€&œÒx2Ìµí±‰î'-!„B!d½q€ú·=###[sF‹7$ ]ðGn‰Š´‘PŠI(åÄ[J5á¦ÃDcLIâÈ’T !ÆR2ÉDŒ%¾„d™"&Yâìº:¶¦Ž°j¤šÎ²-䨒MOËÉwHäxò ¼¹'¿ˆ»®q&$Íø²LöÛdË>“{æœD(0<¼Q4ðGWù÷xB!d@†B!MÑíFÃ¥§ª/UÕ{êŠÈ#Eä«.D"¾„ØàÝ"r‘ˆ´ú.Y\౪úÏU DäL$Ì›QýoãŸð5ù¬ˆToUý±ªžàçìê2>Þ|#„B!„¬G®pd$2L!.d 13û{‘aF¶mM<à$Ä õ¸2Š— bQd‰ÂOrqD™4“‹2Æ2Lš ã‰4&“^LvŸ‰.™d’J2"–,c\Y¦$ǤÉ0qŒNÇšâê\@«okÊ…ã­¯O„APT È/âÊ1Éqõeo.þúB:òE¥P*M• ³Ï|!V¥Óȶ­3gÅáu5!„²  C!„¦¸ÀR`ý^¤ªOTÕËê ˆÈé"ò~WxZý>I²Çãû-9ÑùæÚª"òt$çÒS{¬ù\׉ÈÛD¤ö~À£ü€ý&{UõÎû%„B!„5C{lb É=‚Ñ:ck!/¤ 13û{sp ,aaÅIGq¤—îi2!¤kšLV£Bì€=Öªiª&ÃhÏ"ËÑ%´Øâ‰»O½¤âŽ©z<Î1¨H—ñëÙ¿£Ïô¾#°ž×*Ðx* \ÑD'„B!„’>äßÙê$ydC/É0@!¿D©°b .!¹"$½”D™nÊŒ%ÚTíoœ> ‰¥˜["Œ-ËärL±-Of±„˜áëêä T¥ÃXâM.æxµ³öÆÚž&×ø©,vŠNéøÕ+Á©$¹FÜ$ž°4“ýæáóaòž9+&‰†iP†!„BÈÊ@†B! ªGØbÂaÿÀ9ªú‰º}Edƒˆ¼Àü€¨Ïîà["ò:‘ÞÛIV“þ—ª¾LU†ˆH$"o°À}Öðz7ŠÈKêÎ'Uí¨êßx(€÷X¶6óÆ!„B!d=3Ðk¢áv"*øC¯2LžS%]t“MÄ.ªkˆ+Ó8/Ž-¤— ”âI7Á¾¬¾ðQ› _èéEd€Ðs¨¯þÛú©2Åñ 1½ïH"Wå‚U’>Ô¼w@!„B©b × ›6mÀ©§n¶’<¨bÿ=½%ð/eÄ\Ê©0þ>ÅdJÂF°N$i&M,ÉKz)¥ÅdòJ@ˆñÓbâÊ—LHÑ6•hœe»ØcÈú6ζL ) +â +]„ßÈ«S)ÒTÕ²ú«úÓùÔž¹ÔIDU`¤†/™ „BÖ”a!„Ò$Ù͆OøIUý³*a!ÃJïx€Ó¡ï þ ÀiCrü² À¹ªúѪ"r€‹¼Çöoá3|Àw»¥©êŒª¾À(€/¥«yãB!„²žèC;&œÖÞ”<¯cI Óû{®a +e1D aÆc¼v~*I°R•&S‘HãJ1]ÒdJ5’)V”D˜ì ¶þ÷G>GÍw”Ђ@[_$ªIÊ)µ =Äò’bav©ªâäÈ­3.ÃÄ®t'„B!„–ÿ­qdd‹ó† UÅäžÞe‘@’‹—Búœ§É”„ëTÕ4aiÆ—Kòô+ñ¥XŒ#²äû¤ÂJ—E˜NG¡ðÚÚý•–³ìO¶c§²D^ÊN& •ÓZ‚‚ŒøÇ¼ù¥‹hb~æ/å"Lv>5 ÃÜ1>ÚÚ7èN!„²úP†!„BH“|ÀyªúU½µ®¡ˆ

à˱‚cx&€+Edû Ö$«Ï?øYU½¡ªˆ<‰Xµ’¿ýã|GD>*"÷©k¨ª?TÕ1ãHRi!„B!d½2ðÄ‹ÖC©S<»3½¯Çd˜”P ‚ò…8²I¥üa +e9CJÂJ©¯@" ìuâŽ]#ý¬‡v²dˆý]*¤[äÉEÉçué2ZœyÍØ­6ù<ÀìäÄ"&›N¼ s}{l¢ö2„B!„uÍÀe˜v*+Øé0“÷ÌöU#—("OJ1¾èâ‹V2Œ-ÊØu©2Ž|…… É¥–,ñ¥]²Ä;™¥H‹±–¥H†YŽctbͧå8²ëuOt ‹1öÜo_¤ÅÈ1 +…$™B.ò×çËâË6â¥örR”Ý °Ïœuiž3²mà2 ÓV !„ueB!„4†ª~QU¿Y×FDN‘¿p€g h(g¸XDÞ U¯þ$' s~UU_®ª‡C Dd£ˆü5€‘ $~À"òF9©®±ª~AU/À8!„B!äDájAvpú¶DVˆ­t˜™ýýÊ0¡¢”°Vjä[ éV£§4™@Ód4 ÛÉ0+!©x‚Œ“,ã± -u 4EÛ@ fö/‰0i´¶ \†a¢,!„B!¤’ñÑÖ4€²‘‘­N2 T1yÏÒË¢ž‰*`JGàâ'Ât«YH3Öt_2ù$“cLz½i§²ø²L²M5KYó)î(°Òe²¹)êT.ûí‹åàq“ûø‰»Þ_W}\‘÷9û 2&ï™RÆžÚ#§ËéÙ ”a!„ueB!„HÂKÜàlp—€·Ø)"g ¸/2.p®ª~²ªˆ<À%^‹DZ$[¼ÀEäü÷E!„B!',í±‰C~8È>Zir‡3µg±ï:EÚ˱+ey£,ÖT$ÂjbGHÎñd•|Œå¡d˜Ž#Ä¥—£“Tj'YÆ>v¡´œj¡Å?ÕmËSÓûäLvÙç×áC;„B!„n T¢ooÛš_eÉK‹Ë˜›î/ÄR$ ºD¶ ‘&Ô.Ùv_Žq„™®àÑ¥f‘ø’É-®ã¦Äø²L²o#x]­(ÚHV#ë§ïå$¥&‘OPñýP:^®°âÇnòŒ-È8"M@8ªa`rÏ\)†É0„BYI(ÃB!dÕ‘'ø>€p€+Eä© ÷KŽ÷x¢ªÞTÕ@Džä&ðãUÂü‡ˆ|CDFî›B!„BNúPBk¤²t˜¥ÅÌ-õ]«J6)ÉAé¢×4 kÂJHºñåGþ°¦€¸“$ÃøSòPJ¯ÒKY<é޶اB4 ô‰’ cOÒw=±ÚÖ1½ÏJ†±^Üô;\øÐ!„B!¤+½nØ´1ºÌOó€*nºö®¾k9é"žÌãÊ-¶ôDŒ ÁÅß§jÊöBL–S|Nå˜|î 1ÉçX厢Ór)¦>ñ¥ûrภœ¹-ÙÇ9ŠàwäRM)õÅ?޾üR!ËÔÉ0ªÀÍ×ÞŠ0Å9$FŽl=å¤ÝG}röW !„ueB!„¬"r–ˆ|À·:¾™p¾ªþ¾ª 5‘M"ònh5::—ó\."‘‘U!„B!„ ò¡ÙóËÿœ-h¬ˆˆcàßÜßw1G6©“RlAÃÛ†j[ô yzJÿ‰4%qÇâXÑéĈ;šOI2̱¤®Ô-%Y¥^RqåšjÁÖ÷ ¦Ê8ÂŒ=~©ua-,㇗MççOæÂˆ‘Ù¡Íѧû>‘úãÊ×'„B!„œø êºú:ÏøçÿwñïÙCòxï.ÂþÛe°ÞДd—B°@eZIÞ®$¸À­sÒLò‰drLžæb Y&»ÈÈ2±"`:ÍŘìKu$¼lê–íD˜r*KHN©VÂ<ù^+Ý8RM”üU,ÌÂ;_÷|çK×–„ªx9¾ÀÃü)€GªV²o|´uÇêB!ä8„{B!dU‘óÜà×Vy(À›‘H%«˜ª IDAT1g®òXH˜ïøUýlUy0¹êUªžÀ+üˆ)1„B!„â0ˆ7tÆþÀCÿóc·½ßÞ qòàÎEÿ¼×M8r¨ÓWáô–;<)¥Jæ°„•LÌpRUº¥ÉdH@ éµF– ÓIÚétq'û¾nòw€ÐâI*U‚M}Û´“ÉHåt™*n½qïüë±ûúùñÞoà]|!f÷\¼$¥DžœâK/‘x†½¿)Õ)Õ É7žt#Ƥ׌nâKj¤Œ-©X²Œ1ˆµ¸ž^¶®­U¬:öE¼)ÄHY|±Ûfí‚é8R‘ÖR#“_¤º]e-)ö•Š7LܸëN¼ñ7>‚+¿}3 @YªÒÛÆG[‡ÇG[op€èC¯ê ÓV !„ueB!„¬ ªz1€¿]íqx*€+Eä«=’£HÎ•íªº»ª‘ˆüO$7¶V3e(D àMªºkµB!„B!ÇW`etø&€G·Ç&^Þ›Øà6{£* q2]~É>¼ûuWã®Ý{.^.’rº +0]ä‘ô¡žÊiè! Ƙú¶Ô"’ ;&›;K¢±“Wªdƒ£Z¤¢mÐÒEÆ · Ë8!To~þn|à×ajïaı:"LÊmЛ¸À¹~À¾žO¦îð¡B!„BHWÆG[{ܽ¥:>à¡ã£­÷¶–ª{ º;K„±D@—OÜ„7¾ô#¸ñê»zî¨JJ)M¶(™€ä‚²ØáÉ6¡4•²0/ñÅXrJ"ÄH…Ä1ÐéÄ¥ ðÓ^Œ'ÁØò;ÙõíT–ÈÀVü´ÉÛù‰0ŽÄb¯ëò;DR})_W«;>ú}¼í•ŸÄä=s®H•5H¦ïfûŒ¶îm½Àü÷ўļ®&„BÖ”a!„²j¨êŸøMË«=3ì‘·ŠH´ÚƒYçLx–ª¾FU—B DdHD>àÓNkttÝ9àyªúÞÕ!„B!„O´Ç&æÜ´¥vx~{lâ¼öØÄUÙÊO¨Nø/»¡j"6h ì»ë0Þÿúkqé—öôÜQ&ƒdBI.–Øi#]„•BžÉ„ ¤©%]jˆ›&co+¥ŸÔ v ÕI…É&@k¥—áC;„B!„^9Ö뇯øéñÑÖ+ÇG[Sö†ƒwþ¹BõÑP½ÈIöˆ‹ÏS{æð¶W~;>þßþµS+¥%—]Êi.®Ü‚²¨á¥¥„ReìZ‘/b’—YHPˆÉoäo¡H¶Å:±–&M¾¬%ÄØbŒµ,®(“oOÛ„…O~‘òúÈ9n…LãK4ɾpŽ£œ"¿ßô7ô¯«ç¦â¯_û|êï¿…å原$‰½‡¡øƒw¼ùÍþ¹1>Úú.€Ÿð8vÉkiÄ„B9N¡ C!„UEUÿÀ/˜[í±x€7¸XDÎZíÁ¬S¾ à§Uõ U D䡾 àwUïìpžª~nµB!„B!Ç)ÇòÐÎ àaí±‰ÿ¨hóL } GúìE*Ä(tpá?íÆÇßuìôÔ©¤€„Å K &˜XrL¥´GX JÝi<éÆ@ìªÉ08ÆÔSŒ–<~úZÜô™zé¥_ÚÒñÑÖ¿8À;éít.Á—LB!ëÊ0„BYuTõ+¶¸}µÇ`;€+E䙫=u„"¹¹užªVž"òk~à§›X\àñªºRQ΄B!„²9š‡þÀǜӛxK{lâpUÃO¨êûþëI—½òí¼­µm(Ù9VÄ Äq‘³ëÒI¼ï‚kpç-ºvž‹¦‹”∡ÃôZ£,¶ä‚K?‰4Y$Öªd˜þ%•B<é&«Â|AÆŸ;õºK/…øãË/å)?™øÆEwáþüzÌL."N˜8=O2æQOjã­ì¥ïû¯'ÝVw~´Ç&nlMü2€_DroàhàC;„B!„^é÷ºzÉK#1>Úº¨®áŽ]ÓC;vMÿ1€_ü›Ûö/þê|œq¯SBi€*®þÞn¼ñ7?†ë¯º³v"¨]ÐUp‰¢€0SJ—ñÄŽjf"Š“ÒbÒô–|½+ËÄ–aT²”+m¦çe1¦Ho ŽÙ’Š$¨cË/²LIé"ÍØë2T~ø{xû«ÿ3ûJL6mÊÙø«÷þjôä§žó'.ß±kú¼ºsd|´µ0>Úz=€‡¸°§3»`À-}îC!„ñÞjE!„²jˆÈ}¼=óx”À;¼AU—V{0+ˆÜÇ1¼ÒìðbUýRUÙ à½~«±QõÇ7¢Ší0;u|ËN\ûƒ[‘½MBã8‹ä…ÆŠM ^ú¿·ã©Oxèø €×޶v÷p>þ<€wø©nm\<>Úzjí!„²F  C!„ã Ù àSHÞ y<ò]¿ªª·®ö@Ž•ãP†¹À¯©jå˜DäaHÎG65¨>ù8€—©êâj„B!„BŽw&wnoØßCÓ»¼ÀGÚcµԘܹýoð ùÛ¿þÙ»ðùíFÃ}ãlT¼Yõkáy¿ý`lÞUö£Š-½øÂL!´TÈ4ŽTS!Ì”¤—P_…8GVos+¦-ö£I `îîetŽÄG!©ô/´Ô·uÛ„Û†Û„…™düøº9|ò·`6Mƒ±ivüGÎ< /{ÃO⬇”lBò–Ù×´Ç&jߤœž“#þ/€ÿ  ú¤JøB{lb¼[MB!„BÉØ±kzÀé5M¾àU㣭Ëz¨õH$ÒÁÓêÚ}eç5øÈ¿|ËÒÄ”<9%}Â#Î}^ñÆ_Ài§Ÿ¬¡ª–”¢è,ÇX 2ÝÖyM"Í$5{mìÏÚé$ÂKœ 0ŽCãN.ÄlÚv:¢­åïw䎻Ñ9t$(ºT/'¢Œ‰Â’KIбå—^…«]H¦‰BÛz"À5?¸÷–˜:E黎0‰ £qŒ³ÎÆ«_û œuÿºS‡‘HWomÕÆõîØ5x9€¿Ð®iú®ñÑÖÖÕ"„BÈÚ‚2 !„BŽ;D$ð$73ŽG¦‘]x8ž9Žd˜À[ü…ªvª‰ÈKœÁ§PŽÞ àO•ÿÀ&„B!„ž™Ü¹ýV÷¯Ø|Àßx[{lb¡Kðopﺶ·Þ°€½ãLï=RH0yBŒÀD@ëŒ!üÊïÿî! {J‹—Ä[´S!̔ęš¾:ÂL­œ f°qsù-½ û–/&/õ=.„–¾ÛV·Q.¾è.|ý3w¢“¥ÁxLÜQ<úçFðÂWý†6wsWð5¯nM\Ó­áäÎí£H*«{Cí_´Ç&ÞÔ­!„B!„dìØ5ýU„å•;üñøhë=Ô8‰dð t—ø·îÞwÿÍWpÏÝs‰cL’“¦Äˆ18­½¯xã/à¾_°F§S¤²äé-VRËr*Èt–5eìÏ=È2ÒLXºIæq–üR!ÄØŸ7´NƒÙR–a–îÞƒøð"$*D—Lz 'Ä˶ìâË)Žì’aj¤™PÂŒß.ØŸµ¿ðÙ;>ö߈;$:7—aâiÚ·‡äO¦‰cØ æ¦áƒo݉®ºÐ8I‚IÓ`²T˜¡~óåOÆ“Ÿrv¿§RÆw‘¤}¿[û¦à]žámzÄøh뺣!„BN<(ÃB!ä¸FD~À¿Zí±Tð/PÕ®ço2ÌWüºªî­j "ð)klTý1àùªúåÕ!„B!„œˆLîÜþgHºÉ¸IÒFåK¬}ï à/üŽòE—츟ÿЭˆ;š§Âd2F–sÎÏ ãy¿ý œ¼µüÂѺ$˜ÊD˜NYX ‰-%a&˜S‘‡ÓWG,0›ÊÇdqV/k’н¤²2m«lÄ?¾nÿñw·`~fÉ‘‹ò©l»ÏIø ÎÁ}X~«oLx€¶Ç&–ëNîÜ>à¼ÀVkÓÚc·í!„B!뻦À¿¥‹ŸðG㣭[{ØïéHd‚Gë¾ñÕëñáù—;€ˆ‘TˆÉÒbç<ê,üÞŸü†Ûnk«› ã%µ,-ÇáíÝÖ¶gÒŒ[³¼Og9K…©b¢S¶@N*?ư¼ º¸äŠ0]ÄI—®ÂŠS#¾ÛÙõóä—l»¿o!Ý\wùmøÇ¿ú*æ§)0i*Œj"ÅÜï~ÃxõkžŽûÜwøXO'ðQŒ¶º>˰c×ô8€wx(€ƒNmuŽu„B9q  C!„ãÙà"íÕKs~KU?½Úé‡U”a:Hy»ªÆUDä·¤ïlnj`}r€gªê®Õ!„B!„œ¨LîÜþËv˜ð§þ¡=6QûÐÂäÎí'!yëíŽÚ\ȸãæøð_Þ€©½GòT˜,%&“*†G†ðüßy0îöVgß<&S’Xœ”–(㥾tj„/M&˜Ó©iÒ¹ )¤ì÷`yA¡þ$•jYÅj#ý -ýH/Å>Ög(.þüݸdÇ݈—Ý4û¸û”<ÿwŒM'EÇz:ÀuH„®¯tk8¹sû™ÞàŦÚc#+1B!„BÈúaÇ®ésÈ0¯m]ÒCûŸ@"÷Ñïcç§/Ï“`r&“bbÅÓþÇ9xÉËž„Wäš:cÀÛüíøhëH]û¦7x€§¶ÆVr„B9þ¡ C!„9ÀxÈj¥†øCU=¼Úé…U’aîðBUýVU9Àßxac£êŸ«ˆ0w®ö@!„B!äD&•.ðæöØÄtíŸà¯<`%ÇqäPŸ|ÿ͸êÛ“‰L‘¦ÂdrŒÁ†‚ŸÞ}ñägÞÛÉ¡)I,vJK§BTÉ¥Œêmj‰•ÂŒ•rN‚)ÄnˆÀs*C€Ä½§®ô“ÐÒµô.½¸‰5åùüì2.üÇc÷ óÁ4í6 ž÷òáqO;c%O§ŒÏxM{lâ¦n 'wn€ç´Ç&Þ0ˆB!„BÖ.;vM mU¾„0mw €?ðjœÐcçÈ‘e|èŸ&ðÍoÞä¤Ã@$]6HðÌ_9ç¿ôgE@âVøÌRÇKo©dºJ3i"ÌrŒ¥ ©¦j]‘¹“Î;1ä¤!Ȧ¥ãЙþ?{wW]ïüufÒ}¡Ót¡´ì« q »b(„Mv÷ TÜ÷ë½^ïÅŸzWäŠE„°DP‰€€¢Aö…–îiºoÉÌ÷÷Çd™ÌLÒ¤MòMÚ×óñsrΙsÞ3ÉLzÞçÓší¦ø’.XŸÿ>éËD—Â’LQ¦W“eÊ•iÊ”fV5¯å¿óæ<¹°m L „|ù¥½3ftøÐá¼å­z ÇKÀgk«27onÇºÆæ´Sa$IÚþX†‘$IÃF’$SÈ_HpXì,=ø'pfá¹ØA6'BæNàÝ!„eÝí$ÉÁäÇwï=h©ú®žüÏxuì ’$I’´½hª¯>¸8b ÏóÐïó»ÿK.:JÓbÒùòÅ^îÀiÚq:ǪôfK¾ÔRn"LùI0e§¾d»ÛV:‘fsåœÖ$GH•ù7¢M ©°¹I-}›Ð²¥…–Â}Rme™Íî“‚ŸZÅï~þ2kWµ”aÚß鳯pÁçöaúÎ:vùßÛÿª¬iX5'’$I’¤rÚÊ2ï%?ecú`œóÏ÷?ÇϯzM-Ù²…R û¼v~åLžšŸÀšÍ_Ú'¹´–_×’Í‘-[šé¡@³™RMK™2L.›k+¾dËb’‘#H*JG®fW¯\ÚŠ.¤Ré‚ïóÛËVÒEÅ—r…•ÎýÚŸ[vr© ó2pváárì\œ>ÀY¶F¾Bøfì ’$I’´=hª¯|ø°Ã`ŸÓ†7]ù"¿Y—I(ËiH§Žx83„ðTì Å¡ s+ðÞBsÞ\ì1€9¶ÖFà=!„ßÄ"I’$IÛƒ¦úêÙÀeÀ>±³S2õ¥³8ÓÓDšÂã®ÝØBk¶´ 3*]AE*Õµp’.(«$½-´ô¦ÈÒ·ÒKû{^¼mοVrÇ/_aýš,¹ÐY4*|wÜu,|fo¦ì4:ÂoR‰ßŸ¯¬i˜;ˆ$I’¤mG]cóhàóÀ€±‘ãtxð//pÕUaÆÖÎBL’@ª³³Ç~Ó¹è«ï`Ò”ñme•Â2LaA¥è±Ìrqi¦lA¦ìó»noiÍ‘m ä²9B.[ZˆÉ…|!¦HØÔš_ŸN‘äï¦A’j/Ãt~Ÿ..²T¤ÊL~i_î¦üÒÃD˜²e˜¢2M:â©Ç^憟<Àºµ»-Âì±û>ñÉ£™6m ÿþôàià“µU™»c‘$IñX†‘$IÃZ’$'’¿€`\ì,=X\BøEì …° ³ ø|áòÍœÿbàÛÀÈÈÐ_–§„ˆD’$I’¶uMõÕã€ãcg)´xþz~õÝçY2}Gù¢¸¤1aR§~`wvÍÄòÓYr¡¨ÐR¦0ÓQŠéf[.ZÊL‚É–ŸS|Î\Ö¬ÛDKk¶äõŽ9‚) §®”-§$”TÒ·"KOûvÿœü¶\€?×-àÑ{—v3…'¿|èqÓ8é½»R1¢ô޽­#_ˆùaì ’$I’¶ uÍià ࣱ³[´p%ß¿ü>æ¾¼¼L!&_Š7a4ïÿÌÑôæÝº`Z²ùRJKÛºlÛºÒ‚ÌæÖ³‡ç”)Ý„lrÙüc6KÈå­­PîÒËl6ÿúÒéÎi0íŘ¶ï“¶‚Ko +ÅÅ—’)1e¦Èt9~ÇsÚ·§€w^ûÞý¡ Cùi8mËÇçž÷FÒé!õ™`5pFmUæ÷±ƒH’¤x,ÃH’¤a/I’×·;ÆÎ²¿>BX; XæEà¬Âc=œ7\ œÜÏçîo/³CÏÆ"I’$IÛ‹¦úêw?FÄÎR¨eSŽß]5—Gï[Zv:L*ÉA?aGž´#„¤k‰¥ÜÔ—lai£|±¥¤ÄRfLç9zžS\Yµz#7•–aÆÉÈé­*©t<–+ÆtfJWzÜî÷Yݼ‰Û®y……s×–/å£F§9ý£{PuØä¿5›õ,p|eMÃK±ƒH’$IÚ¶Ô56øeç–ÄÓÒ’åÚ_>ÂÝ÷¦ðûtº£ôRnÊKº¨ SRv),É”+Ó”-ÃtÝoŲÕ\÷ƒûY0·©¨“#´-7’øp^ÿ†]ÿ—eó^N¨­Êü3vI’—eI’´MH’dWàN`ÿØY6ãà̱ƒ @æFàƒ!„•=œóPò“|víÇó„¿µ!„¥±ƒH’$IÒö¦©¾úàf`‡ØYŠ=þÀ2nºr.­³mŌҒƮûLàÔìÆ¸*ÊZJ +=M‚é:í¥›âL¶tJ×RMùÂÌŠÙ°±µä5N?ŠQ#Ó[V~éc¡¥pºL—mé$T—õùc&©„9ÿZÉï3õk³„P¾• e1 IDATt4s÷±œ÷é}¨œ>*ÂoÊfý8¥²¦¡9vI’$IÛ¦ºÆæ3€k€Ñ±³{ä¯s¹òÊÖ­oÉ`Ú&Å´—b’$a×½§òÁ/¼Ì”ñ¥”®—nÖõXšÉÑÒÈfó›+ÕhBÇWr9rë7ä§ÀKå /Ó`: 1ùï“^Lt)7¦ÇÉ/=L–)Þï©Ç^æw?ˆ ë7u`òÓ`:'Ãì½×T>þ‰£˜2eüàÿ‚l^#ù"ÌüØA$IR|–a$IÒ6#I’IÀMÀ1±³lÆàâ•1Côcf#ð©Â{8W|¸„!vwß2nÎ !¬D’$I’¶WMõÕ¿éÅ»ýèÒ¸öÒçYôʺ.%ŽÇ$aìÄ Nzïnì±ÿ„‚)-¥ÓYº+¶—cÊ[ÊN))γ GÓòõ¬__Z†ÉLÍèÑé¶BK÷E–ÒòKoöí,´lnŸŽ}“Îm!¸ÿö…<þÀ2Bè|ÅïÉ[gOç„ów%]1¤n‚Üî×À{+k6Å"I’$iÛVרüàV`Jì,Å–,YÍß¿^lê(Â$mÓaÚ> 2vÜ(ÎýØ|èn¥”öL~¹}ŠKûD—²e™¢çtW é2¦LA&› ù"L[!&·v¡µôsuRQA2¢¢³“J‘¤SÐV„é¶°R4%¦xÊKgA¦ø9íÛ{(ŤBÔ_÷(»ÿ¹ü4˜ö¯\èø> O|-gžõzÒéT„ߌÍú=pFmUfuì ’$ih° #I’¶)I’Œ®.ˆ¥~|(„å5ýT†y8+„ðÎSIþ®C³·ò\ƒá{ÀgBeæYK’$I’SS}õ àvàØYе¶ä¨ûÅ+<|Ïâ.%˜âÉ(‡7#kg@BIa¥ü´—®…•n‹-ÙÎÂLéÔ™öRMù‰0íçXºt=ëÖµ”¼¶ÊÌF©èßBK/ö)¿oç¶•Ë7rÇ/ç±xþºŽ×B××6zLg\¸¼)á·¢W.¾ZYÓà?ÎI’$IuÍ{w{ÅÎR¬µ5Çu¿~„»êŸî,Ä´M‡)ü¾ºfNyÏ¡$IÒÍÔ–re—®ÛóE—¶‰0½™0ÓM&—ÍrùBLvõj¦ÒÏÕɨ‘$#F¶`ºaR=Lqé¶üRÑý´˜Ž©1EÅ—â2ÍŠ%«ùí•°d~s— 0„@9È&ŒÅG/<‚ƒžá·¡W®>Z[•)m I’¤í–eI’´MJ’ä?€£æ/“ü}°OÜe˜_!¬éáÕÀuÀý‹Y›ðɱƒH’$I’:5ÕW®Nˆ¥œÆ‡š¸é'/±qC®kÙ#é,qÌÚc<'¿oW&LÑ¥¸ÑYh)Ó^Xév[7SbzšSü¸xÑZÖ¬i¡pvJ¦Mر#¤Ð²¥û>߸’?üv>Öçò“`BéëÞyïñœ÷©½˜4eT¬_‡ž´­¬i¸*vI’$IÛŸºÆæ)ä'ļ%v–rþö·WøÉ`íºMJHÚ&Ã~ÍÚ½’wú&O›˜Ÿ“Í‘m+¶´dËOr)-Í”YW°Ü²™íí!›ƒ\–Ö«7BÑ'ëÔ˜1¤F,)ÂJu)»¤‹Ê+é„tO%—‚ýÓE¥™rÇk/Ã<õÈKÔÿú6nhéZ‚)(Åì·ßt>ö±£˜f_j/x3I*M6›k+º„¢RL÷™Žåö‰0½~NgA&ds´,]NX¿¾äu¤'N 3Š$ÕY„IÚ .e§·”™þ’.*¾”L‰)™"ÓµL³béjnûß–-\Ñí4˜&Žæ¢‹Žäµî4ø?ìÞiN©­Êü9vI’4tY†‘$IÛ¼$Iîv‰¥^Î!<2Ð'Ú‚2Ì/€‹Bëz8æÑÀµÀŒ­K7(žf‡æÆ"I’$Iê¦úêÓÉ߀atì,å<ùh37þðE6¬oí2Q¥°3c×±œôÞݘ˜QRX)Wl))Ìô0 ¦d"L¶La¦íñ•—V³rEélgí2ž Fv[RÙl‘¥¸ÓQ˜)Ý·ô¸ùuÏþs÷Þ²€M³å—.Ó`r]÷›À¹ŸÜ‹&ütïü“|æÕØA$I’$©P]cóG+€tì,åüãñyüøÇ°zÍÆ®Sb ¾vÜy2ç~â(&OŸØ¥ØÒYpÉOriiÍ•ÝÞmA¦¨ Óõ8e˜l6вh)¹µëºÞ²#@Ef’±cHR©|&î(½”+¹”-Å–] §ÃôTši[ÿÔ#/ñÇ£uSk[ñ….Ó`öß‘‹>v“&‰õcÞœ—€ãk«2ÏÆ"I’†6Ë0’$i»$É àvàØYz¡øBá²U“Èe»›Óö˜í¡0S4M¦tL{©¦ô¸s_XÅŠå¥e˜]v›ÈÄFôºüÒ]¡¥ÛǤÌ>éüc¶5pÝBžzl9¹@—"Lû4}êN¼ý¬Y¤RCnHP»ßgTÖ4¬ŽD’$I’Ê©kl>¸;K9Ë—¯ãß¿gž]’/›¤J 1#Fठå ·ìYZvé2É¥½Óu{KOÛËLé²_k`ãÂÅäÖ¬-É^Q9™ÔØ1mSaÒù©0å&”+»N‚).Í”™,S81&ךã¾ß>Ê3½ÜuLÁr*ÓN;˜SO;8ÿ~MµµU™%±ƒH’¤¡Ï2Œ$IÚn$I2ŽüôNˆ¥—ê€÷„–ÄÁ{Y†iÎ !<ÓÃqfŸst?ÆH×ï !lŠD’$I’´ešê«÷"?vïØYÊÉewýzÔ-„¤ëd˜ÂI1‡>…#OÞ‰T’”–XŠ'ÂdK×u™ú’-³®°DS4%æ…çVÑÜ´¡$ûî{Ndâ¤Q=ZzSzILÆéÅ>ÍK7RÝ+,[¼B×)0¡íûqGpöÇ÷dŸƒvˆðSíµŸVÖ4´Æ"I’$I=©kl>„ü %gÄÎRN.øíçÖ[ P4%¦óû×UïÅìwJ*êœ “-3ñ¥\Y&ÛuâKûrK6G¶µm"L6mÍÑRTšYÿÊB²k֔䮘:…ôø±ÐV„)™úRQ¾ØÒYi_×^éúÜÎãu>wù¢•Ô_ó +–¬*[‚!À¤Fó±OÅþûÉw»ßçÖVeÖÇ"I’†Ë0’$i»’$IšüÈçÆÎÒKó€³Cö÷{Q†¹¸8„PzeLç1Þü ˜ÖÏñÊ…þ-vI’$IÒÖkª¯®nÞ;Kwžùû ®¿âÖ­ií(Á¤ Ê0I’0}ç1Ô¾{W&UŽêRl).Å”N{éa"L¶›ÂLÇ´xþé,_Vú‘Ï}v`‡Ì¨¢‰0½+´ô¼o¹I3ùǧÿÞÌýu iÙ”Ëç,(Á´?îñÚ œ{ñÞL˜4"ÂO²Wð•Êš†oÆ"I’$I½Uר¼ ù›M;Kwžh|•þà~V­ÞÐe2La)fÊN“8ý#GR9cR™²K×âKKkŽlûd˜nÊ0å'Ìt=ÎÚ¹¯Òº²m h’äK'ÀˆÓHO’N‘*.»–aº›S\š)ܯhLE:ÅÓ}†['Û’í,Á/À´—aªªfráEG2qâèX?ÆÞøð™ÚªL.vI’4|X†‘$IÛ¥$I> |›üŸÇ†ºVà«À·C?þÏ[e˜ÕÀC×÷ðÜ4ðŸÀ—>ïá‡C?D’$I’Ôšê«Gÿœ;KwV.ßĵ—>ÏÜg×$EÓaHR0jtšãΜž¯›ÔûI0¥˜n'ÂdËO‰ ¹À³ÿj¦iI×2LöyM†I“Gö©ÐÒÛÒKñs²­?ݶ€gÿ±¢³ò¯¥ý1IàØÓgò¶3f‘ Ý¿@lÞ[YÓp]ì ’$I’ÔWuÍ;7ÇÆÎÒ+Öóƒ+þÄSO.èRˆ),ÅTŒ¨à羉ªê½‹ 0å–n 2íëZZC[Q&¿¾ki¦ësV¿8Ÿ–æU%YGΜAzâ8H¥º”]ÒE%—ŠtBº¨ä²Ùý Ög[[yà¦ÇxáŸóº-Á¤S §Ÿq'|ÐPþL>U[•ù~ì ’$iø± #I’¶[I’œ\ éÛŸ¨.!,íƒuS†ù;pVaNÏ› \Þ9Á*àôÂ=±ƒH’$I’ú_S}uü?àó±³t'— Üý›ùÜ{ó«mê–b:'ÅTVÉ1§ìD*ê:õ¥hLGa¦p]¶¸S4&ÛuÝÓÿlféâõtÞã"ÿïEû˜!3yôf‹,½+½t–dŠ·5-Ù@ýoæÓ¼tC— 0e˜0©‚s?¹7{¾vb´Ÿ]/,N©¬ix vI’$IÚRuÍ#€+÷DŽÒ­7ÿöqnºé@(SŠH8àÍ{ðŽóÞLjDE[%_†ÉO„ mE—n 2ëºßÞÒš#ÛXùü+lj^YFî2“ôÄñ¤Ó©‚Kût˜â’Kûr׉0étQI¦¢ë„˜æ…+¸÷º‡XµlM¾Ó~ hûrd&åþûNäŸTŸ¬έ­ÊÜ;ˆ$Iž,ÃH’¤íZ’$on¦ÄÎÒK €sC÷oíÊ”a~|6„°±‡çÌ&ÇÝáò~Íf‡žˆD’$I’4°šê«?Bþ³m:v–î<÷Ï•üú{sX»ª%_IºNˆI’„©3FsÒ»weÒÔQ¥Å–l× /e§¾dCQQ¦è±­óäãËY²p}IÆýÊ0yjA&)(²¤ -IùÒKwå—ÂmOým9¾c!­›òw®-.Á„Øç IœóÉ=?qD„ŸT¯½Ì®¬ix6vI’$IêuÍ_¾;GOžzr!W\q+š×ç 0…¥òßOž>‘“>t$•3&uNé®ìR°½¥Ìº²e™l`ÅÓsÙØ´¢$ßÈÝv¦bÒ„®S^ -EÅ—rûU¤Û 1ešöbͳÏá‘»ɶf;Ë/бBàCvá£Áø Cú¾ ‹Úڪ̣±ƒH’¤áË2Œ$IÚî%I²p'°wì,½”%ÿÈÿ!ä¶ô e˜ÀûC7÷°op ðY:o;Ôý8!„° vI’$IÒàhª¯ž \Œ¥;«›[øÕeÏó¿Vµ•`’‚ëvòË#G¥yÛé3Ùÿõ™òa²¥ëºL‚)™SZŠi|´‰Å JË0¾~2•SGo¶ÐÒQzIŠöIì›tÝ·µ%ǽ·.`Î+:oVÛ1&_‚IR 5gÏâèÓfv\Ç4Dý¨­¬iè— ¾’$I’4TÔ56_\ Ù»¬Z¹žþàO4þ³skq!&=¢‚£O=¾ÙÖ@K{¡¥£Üº-Åt,eÚ&Ë´—f–?ù"–6—dµçnŒÌ´•aЦ»”–] §Ä´_ ¦Ã”fr›ZùË-ñÊSóóÃ]‹Š0!Ò©çœûfŸX5Ô?S?_[•™;ˆ$IÞ,ÃH’$I’T·o‰¥þœBX¼%On+ÃÜ œB˜ÛÃ~»¿Û’óDRœBX;ˆ$I’$ip5ÕW¿¸˜;KwB€{n˜Ï=7Ì'„®E˜ŽåðÆ Çž6+ÑKA)¦tL7ÛÚ 3eÊ1ÿøk‹æ¯+ÉvÐ+©œ>¦¤ôÒýä—î÷é,Ì$4-ZOýõóXÑ´©£øBûD˜!;TŽà]ŸÙ‡Ý_3!ÂO¥OnΫ¬i(mI’$IÒ6 ®±ùhàf`Rì,Ý nûÝ?¸á7‘ @ÛçéÂB IÂ>¯Û•cÏ=ŒôÈt×)/Ë-%™r¥™®ËË_`ý’â2L`ô>{0jòÄÒ‰0=•] Ë0ûµOŒi^°œnx˜µÍk;_|ÛuŸ¡myÊ”ñ\ü©cÙkïiƒö3ØB÷§ÖVeJ›D’$I}dF’$©M’$£k€3bgéƒÅä 1ìë“$BhéaŸ“«Ì'|W…Zc‘$I’$ÅÑT_½3ù)°¯¥'sžXů¾û<«Wlê(ÀPTŒ©Üq4']°“§êfLÛc[)¦Û‰0Ù®…™Ç\Ê‚yù2LBþ¦²‡:…);––azSziŸS¼­ñ¯Ëyð®E´¶æºLé¸v'^ó† ç\¼ã&TDúiôÚeÀg+k¶xZ¯$I’$ uÍû“ÿl½kì,=yö™E|ÿ²?²|ùºüÜü˜˜Îi1ÀS'PóÞ#¨œ™)˜ÓöX<-¦¨,Óe"LÁ~Kžu‹›JòŒÛoOFUîÐeªKa±¥´ Ó¾®­ S4湇žçñ{ Ù¶¡mS`òäó¬ßðÆÝøèEG1vÜÈAz׷صÀûj«2›b‘$IÛË0’$I’$I€oŸ‹¥rÀ%À„²ýqÀ$IF’>ÙÇ$øráÿÅ"I’$IН©¾z"pð¶ØYz²fe ×^ú<ÏþceÇ…:…bH`ÄÈÇžº¯}seÉ$˜âRLùI0]Ë1¹\ào,åÕ—×–äyÃ[§1uÆè^•^º+¿´ï³iS–ûny•9O®"ßyiŸ“ÏBþ'\° G²SÇÍ{‡¨ðÉÊš†+b‘$I’¤ÁRר¼#p;ðúØYz²zõ~|Å}<þ÷yùB í¬óËI©Š4o=ù^{Ä~e˜–ö2LG1¦  Ó㺋þök.+É2þ€½3uR¾ìRX†)œúÒö˜.*¾NÉnÜÄ£·>Æ‚gmŸ©ó ´}Ȧ¢"á¼ó£æ„!}/vÿU[•ù·Ø!$IÒ¶Å2Œ$IRI’|øŽ¥þ œBX°5I’dwàà ý’jplÞBøMì ’$I’¤¡£©¾zðSཱ³ô$øÃoçs×µó9:Ê0]‹1°ß!Ž;cg*F$EÓ^ÊL‚ÉÑVœ),Êtn{ôO‹™?·´ óÆ#¦1}§1eK/åË/å÷Yº`õ×ÏceóÆÎLÛ4Ú–3SGñîÏïîûNô÷¼ÖçTÖ4Ü;ˆ$I’$ ¶ºÆæqÀu@mì,= î¸íŸüæÚGÈfs]Ê0˰GÕ.yöa¤Gh+¸´^ŠÊ.-Ù@¶5GKÛölÛºöí }†µ¯.-É1±j_ÆLÍtN‚)˜“.*Ãt™S°_ó‚åüõ¦‡Y·r]ç‹ë˜“ÿ~ú޸ħßÎ{Nœ7x˵®­ÊüÀ·¯†Z{ó„$IF—d°ð"p|á¹ØA$I’$IC[S}õùäo1¤¯Y»ª•_]ú²¼£ SXŒ!ŠŠ„£O™ÉÁo™R:¦cZL¹‰0ͯ{ðžE¼òBiæ-oŸÁŽ3ÇäË-颲KRPz)š“¤`Ó†¸e>/=½ªóz¶òK{!&•†S>°;Gž4,þÔò40»²¦anì ’$I’4Ô56øŠ¥'k×lä'WÜË£Ìm»ÃDþsu~!ÿŸT:ÅNxñšüD˜lÛD˜Ö@6›lmÍu.w)Åäx¥á_¬ž·¸äÜ™7À¸é“;¦¿¤‹Š/]¦ÁL‰iÝÐÂã·=Â’uÓq“‰Àˆi.xß[y{̓ñ6n­ùÀìڪ̱ƒH’¤m—eI’¤ÍH’dgàN൱³ôуÀÙ!„y=í”$ÉÞä'à¼nPRõŸ‡“B¥³§%I’$I*£©¾úhàf`Rì,= î»ùUnûÅËd[CÛt˜¤­Ó~ÝN¾OâgÍbäÈtéD˜lù)1íÔ/äåçW—œûðwÌ`Æ.c»-½¤RmÅœö‚L[afѼõüþúWXµ¢…BÇ5;íì„SfŒæ}_Þ—÷CxÿœZYÓ°"vI’$IJê›ß ü;ËæÔßÞȯ~ñ ­­¹ŽRLq9fÖþ3©>û­¤GèRv)¿Ü¹nîŸYùò"Ú>¥· T¾ù@ÆïXÙQr)[ŠI'¤ ¶¯˜·”Çoý+Vo £ü“a3všÄ'?w»î>e0Þº­õà„ڪ̂ØA$IÒ¶Í2Œ$IR/$I²ð[àm±³ôÑrà=!„ºr“$9ø)0aPSm½›w…ÖÇ"I’$I^šê«_Cþ¦»E޲YsŸ]ÍÕß|–å‹7v¬ë¼v'ߊ™4e$']°Óg)(¾´O„éœS¼íþ;0÷¹Ò2Ì‘³wb§]Ç•üR¶ “$ü½a)ݽ˜l®­ .ÜisÈS8çâ½=6=oYùðþÊš†M±ƒH’$IÒPTר|(p05v–Íyqξ÷íß³dñªÎÕÐ¥3v‡±q^5•»L¥%Û>&ÐÒÚV†i[WX†yé¾²bîÂ’óM{ËAŒŸQÙYvi+Á”+äSðÒCÏðüOµÝX¢³üRøX}ä>|à£=zÄ@¾Uýå.àÌÚªLé8ZI’¤~fF’$©—’$\ ¼'r”-qð…B @’$c€ËFMµe.>BÈÅ"I’$Ižšê«§·oˆesÖ¯måÚKçðÏ›ÊnOH¥Ž:i&o8b ¹n&Á´O‹ m%™ûêðÒ3«JŽwLíLvÚm\÷Sa 7®Ïòûçñòs«KÊ/íFŒLñÎïÎ[gïØŸoË@úFeMÃ×b‡$I’¤¡®®±yOò7›Ø'v–ÍY¿n?¹â<ÜðB¾S¦“¤zÇÁìwäd³¡³Ó>¦5GK6G¶myÎgÅ‹¥ƒO¦~0všJº£øÒ^†iŸ“/Ãd7l≺¿Ò4wqç“;J0ùÿŒQÁ{?rǼ}ÿ{oúÙ•À…µU™lì ’$iû`F’$©’$ùðõØ9¶À£ÀYÀ(ààÀ¸qú,\BøAì ’$I’¤á¯©¾z,ppRì,½qÿm ¹åg/‘míþßuö>pŽ?{FŽN•L‚i/Åä²ùuüÝ|^xº´ ó¶Sf1k÷â2Lád˜üã‚—×r×õóX»ª¥Û<Ófá}_Þ—™»ë—÷`€µ®¬i¸:vI’$I.ê›+ßÕ±³ôÆÝw<Á5Wý™–Ööû.&½˜¶…ûìÄ›Îz+£G•”a 2Ïÿþo,áÕ’sÌ8òõLœ5µ üÒùØ>få+Kø×í°i톎â ä'­Òöí¬]2|ê Ç3k×Ê}OúI¾T[•ùVì ’$iûbF’$i $Ir>p02v–>Z TÃâ*”ë€sB·Å"I’$IÚv4ÕW§ÈONýXš÷­x IDATì,½1oÎ~~ɳ,[¸¡Û}&fFrâù»²Ó®c»L‚).ÇÜsÓ<æsž\YòÜwœÞ^†)³~]+÷Ü4Ÿy/¬éöÜ#G¥8ãÂ=9ô¸iýòzÁ<à„Êš†'b‘$I’¤áª®±9¾ |!v–ÞØ°¾…Ÿ]ñGî{¦L&¿¤^slûu Ùù‰0Óaž¾ý¯,{n^ɱw~û›Ùa—é%a²ë7ðÌí³bþÒŽî „.Ë£Fà;†#Ž}Í@¾üþ´8¹¶*Ó;ˆ$IÚ>Y†‘$IÚ I’ìÜ ì;Ë6êi`vanì ’$I’¤m[S}õiÀ¯€1±³ôÆ_î\ÄM?}‰–M¹n÷Ù}¿ ö.Œ“Îa²Sb~ã¼òe˜3vaç=Çu–`’„$•ðêÜ5ÜsÓ|Ö­iíö|3vËû¾¼/;î2¶_^ã x8±²¦aAì ’$I’´-¨klþð#`XŒ ýcý\ý£?±iSþ³n’Œ‡i+ÉLÝcG^Öá¤ÇŒ"›m› ÓšãÉ[bÙ³¥e˜]ke‡]§S‘NQQ‘P‘N±òåEùvFŽªˆýVôÖMÀ1µU™aq3I’´mKBwÿz!I’¤>I’$\|,v–aî!„¯Å!I’$IÚ~5ÕWO~Gþâaáá»—pã^`ÓÆ\·ûì²×xÞqæÎŒ[Á]׿ÂóO¬,Ùçø³va—½Æ3ÿ¥µÜû»WY¿®ûi03÷Çû¾¼/Ófv?fˆ À+k¾;ˆ$I’$mëê›gwÆÎÒ[÷ßý$?»ün6nh-š¨štÜTbònÓ©:ãž¾ëQÿknÉ1ö:åH’å¥úGhݸ)ÿI(X Ø}¯i|úk'±ãÌ̽šq)ð¹ÚªL÷|$ID–a$I’úY’$Ÿ¾ƒSøúªøpáêØA$I’$Ijª¯ü8;r”^[ôÊ:~~ɳ,|y]·ûŒ›PÁ;ÎØ™=ÚÌsO”d­9sgÏ_Ïã.ëñ\Õ'ìÈiÚ#‡ÍŸ?6TÖ4Ü;ˆ$I’$m/ê›'¿Þ;Ko½úJ—~ýV^y©}ðIA+¦mqäØQŒ7šµKKo21~æTÖ¼Z04¥L¦æäC¸àÂc1"ݯÙP¸¸¶*óÃØA$I’ Y†‘$II’œü 6·FlpzážØA$I’$Ij×T_—_Œ¥·6mÌqã^äá»w»O’À豬_[:õeìø Ö­é~Ìè±iιx/9bJ¿ä$MÀÉ•5 ‰D’$I’¶7uÍÀO÷ÅÎÒ[›6¶rõ÷ð‡ÛÿA¹2L÷+Ê\‹Y°j츑|ô 'pèûöOÐÁ±8§¶*S;ˆ$IR1Ë0’$I$I’CÛ€©±³ qó€BOÄ"I’$IR9MõÕ~TÄÎÒ[Ý·”ß\ñ×gûí˜;ï=ž÷}i_¦ÌÝoÇ/ÇWÖ4<;ˆ$I’$mÏ꛿ |#v޾høÃ“üôîbýºM$]z/%­˜"×d¶_ž¹×~3øô×OeÚŒIýs -jk«2Å"I’TŽeI’¤”$ÉžÀÀ>±³ Qÿ _„Y;ˆ$I’$I=iª¯®n&ÄÎÒ[K^]ÏÏ/y–W_\»ÕÇ:òäœúÝIWl!å!à¤Êš†e±ƒH’$I’ ®±ù<àçÀÈØYzkáüå\úµ›yé¹E5bz'N<óMœáÛHW¤ú?àÀy ˜][•y9vI’¤îX†‘$I`I’LnªcgbîÎ !¬‰D’$I’¤Þhª¯>¸˜;KoµlÊqó•/ÑpÇ¢-zþØñœ÷齨:¬²Ÿ“ ¸ßçWÖ4lˆD’$I’Ô©®±ùHà ;Koµ´dùÅåwóû[ú6 eüÄ1\ôå“xãáÃîÞ™÷§ÕVeVÄ"I’ÔË0’$Iƒ I’QÀ/€³#G*~ \BÈÆ"I’$IR_4ÕWÏ"_ˆ©Š¥/þþçe\wù6¬ëýGñÝö›À{¿´/“§Àdâ»Àç*küG0I’$I‚ê›÷#óÄÝ"G铇î}Š}ó6Ö­Ù¸Ù}÷}í,>ýÓ™²ãƒ¬_ýxmU¦%vI’¤Í± #I’4H’$I€K€/ÆÎQ¾BøVì ’$I’$m©¦úê‰ÀÀq±³ôŲ…øù7ŸeÞó=iM8æ´™Ô¾gWÒÉ ¥ëYà•5 ?ŠD’$I’Ô³ºÆæé@ðÆØYúbÉ‚fþçË7ðÂÓ ÊnO’„“ßõVÎý豤өAN·Õþ³¶*óï±CH’$õ–eI’¤A–$ɇ€±³ ²À»C×Ç"I’$IÒÖjª¯®~¼?v–¾È¶n¹ê%î¿uaÙíã&Vpþgöá€7e9ÙV[ œ]YÓp{ì ’$I’¤Þ©kl ü89v–¾hmÉòË+îæöë:o"1qÒ>þõwrÈ[ö‰nË´ª­Êü"vI’¤¾° #I’A’$5äï ;>v–AÒœBhˆD’$I’¤þÔT_ýà^ý2 4>Ôĵ—ÎaÝšÖŽu{0‘÷|q_&M1ÙYœXYÓð·ØA$I’$I}Sרœ.>;K_=ò§§ùÁ×ofͪõìÿºÝøô%g2yÚÄØ±új%ðÎÚªÌc‘$Iê+Ë0’$I‘$Ir0p°Sì,ì`vá¹ØA$I’$IMõÕçWêE²|ÉF®¾äY^~n5o?k'œ¿ ©Ô°êô< œPYÓðrì ’$I’¤-WרüIà»@*v–¾X¶hýñIN8ç0R©aàà„ڪ̿b‘$IÚ–a$I’"J’dp'p`ì,äaà¤ÂÒØA$I’$IHMõÕG·™ØYú"ÛXðÒZvÞ{X¯½8­²¦aeì ’$I’¤­Wר|*p-0&v–íÀßk«2 c‘$IÚR–a$I’"K’d"p#p\ì,ýì&àüÂúØA$I’$I MõÕû‘¿éÅî±³l®>PYÓÐ;ˆ$I’$©ÿÔ56¿¸ ˜;Ë6ìàìڪ̚ØA$I’¶†eI’¤! I’ à'Àûcgé'—Ÿ !äb‘$I’$i05ÕWOê€7Åβ ûzeMÃÄ!I’$IuÍ{¿Ùľ±³lƒ~ |¼¶*“D’$ikY†‘$IB’$ù ð_±sl…,ðÉÂb‘$I’$)–¦úê±ÀµÀ)±³lcZ€VÖ4ü_ì ’$I’¤Uר<¸8"v–mD¾P[•ùNì ’$IýÅ2Œ$IÒ“$ÉyÀÏ‘±³ôÑZàœB]ì ’$I’$ÅÖT_"?9õâØY¶+Ó*kîD’$I’48ê›GWçÄÎ2Ìm.¨­ÊÜ;ˆ$IR² #I’4%Ir$ù»Üdbgé¥E@má±ØA$I’$IJšê«/&_ŠIÅÎ2Œ½Ì®¬ix2vI’$IÒàªklN€ÿ¾;Ë0µ 8¹¶*ó`ì ’$IýÍ2Œ$IÒ•$É~ÀÀî±³lÆSÀìÂ˱ƒH’$I’45ÕWŸ\ Œeú;pbeMÃÂØA$I’$IñÔ56ø1P;Ë028¾¶*3'vI’¤`F’$iK’dP¼)v–nÜœBX;ˆ$I’$ICYS}õ›ÈÆŸ;Ë0r;pveMÃÚØA$I’$IñÕ56¿¸˜;Ë0ð ù‰0Ëb‘$I(©Ø$I’Ô½ÂàhàÖØYÊø%PcF’$I’¤Í«¬ix8x&v–aâGÀ)a$I’$Iíj«2¿ªWcgân޵#I’¶uN†‘$I’$I—Ÿˆ¥Í7B_‹B’$I’¤á¦©¾:Ü;Ë€ÏWÖ4üOì ’$I’¤¡©®±y&ppPì,CÐw€/ÔVe¼0T’$mó,ÃH’$ #I’\ \J¼ -À‡CWG:¿$I’$IÃ^S}õHàjàÜØY†˜ Àù•5 ¿D’$I’4´Õ56O ?å±³ YàãµU™Ç"I’4X,ÃH’$ 3I’œü3ȧ^¼3„ð‡A>¯$I’$IÛœ¦úêøð•ØY†ˆeÀI•5 Å"I’$Iê›+€ˆ%²µÀYµU™;b‘$IL–a$I’†¡$IÞÔÓé”ó€Ù!„ Òù$I’$IÚ.4ÕW¿ø P;KDϳ+kæÄ"I’$I~꛿ü7ÄÎÁBàÄÚªÌßc‘$Il–a$I’†©$IvîöàS=œBX0Àç‘$I’$i»ÔT_}p#01v–þœ\YÓÐ;ˆ$I’$iøªkl>¸;Ë úpBmUæ•ØA$I’bHÅ I’¤-Bx x ðç<ÍÀa$I’$I8•5 w‡ócgd7o³#I’$IÚZµU™ë€·Ëcg$ª-ÂH’¤í™eI’¤a,„ÐLþz¿€Ãÿ8)„°fŽ-I’$I’ TÖ44‡ÿŒe|8»²¦aCì ’$I’¤mCmUæò7”|1v–ö àøÚªÌÊØA$I’bJB±3H’$i+%I’ÿ|¹€/†¾ÝÇ’$I’$I}ÐT_=üÄ”šØYHøXeMÃOb‘$I’$m›ê›§·oŽeü{mUæ?c‡$I ,ÃH’$mC’$ùðc b ±¸ „pCÿ¥’$I’$I}ÑT_]üø`ì,ýl pVeMñƒH’$I’¶muÍc€kScgé'-Àj«2×Ä"I’4TX†‘$IÚÆ$Irð[`BŸÚœBøKÿ§’$I’$I}ÕT_ýEà ‰¥,N¨¬ix•$I’$IꫦúêÃß“cgÙÞYYÓ°*vI’$IÒö«®±ùdà×ÀØØYúàoÀ‰µU™E±ƒH’$ Eñé,I’¤^!¼ Ô÷°ÛMÀ1a$I’$Iº*k^Œ¥®&?Æ"Œ$I’$)ªÚªÌ­ÀQÀâÈQz«8Ò"Œ$IR÷œ #I’´K’¤øðÁ¢Mß>üBI’$I’†…¦úê©ÀmÀ¡±³ôÂ×*k¾;„$I’$I…ê›wî^9JO~\\[•ÉÆ"I’4”Y†‘$IÚN$Iò%à¿pqᇑ#I’$I’¤>jª¯ü 8-v–nl>PYÓðËØA$I’$I*§®±9ÜL~RÌP’>W[•¹4vI’¤áÀ2Œ$IÒv$I’³5!„Ûcg‘$I’$I[¦©¾:üð©ØYЬN­¬iøSì ’$I’$õ¤®±y$ð¿À»bgi³8¿¶*sSì ’$IÃ…eI’$I’$I’¤a¨©¾úcÀå@*v`.0»²¦áéØA$I’$Iê­ºÆæo_c)pRmUæáÈ9$I’†Ë0’$I’$I’$IÃTS}õIÀuÀ؈1N¬¬iX1ƒ$I’$I[¤®±ù}ÀOЧ˜][•y!¹%I’†5Ë0’$I’$I’$IÃXS}õ€ÛéNpNeMúç–$I’$©_Ô56¿ø-0qOÛœR[•iÄsJ’$m3R±H’$I’$I’$iËUÖ4< <=ȧþpªEI’$IÒpW[•¹¨æ Ò)¯ÞfF’$iË9F’$I’$I’$iÐT_= ¸8j€O•>[YÓpÙŸG’$I’¤AUר¼ppðžæ[À—j«2^¼)I’´,ÃH’$I’$I’$m#šê«GWçÐ)Ö窱i¸y€Ž/I’$IRTuÍã€ãûùÐYøÿìÝ{dgyðç[­Ð ëÅ1[†J kÙ©2`61Ž•ò"¼¶ˆ· ¸ ;[Ä.&‘œÇ8P‚ ILYvi‹„X8[\*vVÖ*$–ZVhe]ÐåÍ3kͶ˜™³RÏ9ýÍü~US5Ýç›ï<=gþØ··Ÿî¼vï®ï›ó¾[’2 À&shßîw$yËœ·ýf’ŸÙ¹gÿgç¼/,”Ë>!ÉLòæ´åíI^¸w׎Ëç´À–§ ° Ú·û•I~;ɉsØîš$ÏݹgÿWæ°tᲇ%É…IÚÃØæÏ“!Éo&9•%G’¼pçžýûÆKý¸ìÀá““|8Éy3‡¾“äçöîÚñ»ã§Øz”a¶˜Cûvÿr’‹’´w=ÉóvîÙÕ4© —8Ü’ü›$o\¾ëp’çïݵãSÓ¥ØZ”a¶ Cûv¿0É“œœä@–Š07N› úqÙïKòú${÷îÚqpê<[‰2 Àuhßîg'ù…$¯Þ¹gÿmSç€Þ\vàðö½»vÜ;u€­F€nl›: ¥ @7”aè†2 ÝP† Ê0tC€n(ÃÐ eº¡ @7”aè†2 ÝP† Ê0tC€n(ÃÐ eº¡ @7”aè†2 ÝP† Ê0tC€n(ÃÐ eº¡ @7”aè†2 ÝP† Ê0tC€n(ÃÐ eº¡ @7”aè†2 ÝP† Ê0tC€n(ÃÐ eº¡ @7”aè†2 ÝP† Ê0tC€n(ÃÐ eº¡ @7”aè†2 ÝP† Ê0tC€n(ÃÐ eº¡ @7”aè†2 ÝP† Ê0tC€n(ÃÐ eº¡ @7”aè†2 ÝP† Ê0tC€n(ÃÐíS¶ŽÖÚÓ“¼qêsôKUuËz‹Zk?’ä‡lXU¯°ß¹Iβ_¾]Uÿd½E­µ3“¼c„RU÷ÍsCsõÃg®z§ Œéì$—ObW%9kÎ{>/Éï \;äɺ ’¼õ¡ÇÅo'9Žû==ÉçSè,¢ IDATç¸ßFøF’ÇM C7$9}êëøëIÎyÏo$9iÀº—$¹d5ONò¥‡hc};Écæ¼çÿNò”9ï9o?‘䊩C›Zsõ'¹rÎ{}ÜæêÕõ0W?7ɾ©C‹iÛÔ`(eº¡ @7”aè†2 ÝP† Û§l)·'ù³©C¬ãº ØóHæû¸o™ó~áæ9ïwWÿ1sêº&É£§±Ž»7`Ï?KrÒ€u· Xswnò8Ž×W6`Ïy»cêÀ¦×Ã\}×ì9ôq›«W×Ã\}ûÔ€ÅÕªjê 0ȶ©ÀPÊ0tC€n(ÃÐ eº¡ @7”aèÆö©[GkíiI~qÀÒ{ªê6:ÏXZk?”ä5CÖVÕùöûé$?=`»kªêÝCλèZkߟäÍS瘣_¯ªë¦°ZkïNrꀥ¿UUWmtž±´ÖþC’,ýÏUõ'ëìõ}IÞ>ðÔ¿\U· \»ÐZkoKò¸©sÌÉ'«êcS‡ússõºóeOæù¸s®þÕª:4píB3W½kU5u`‹h­íIrù€¥wWÕÉg,­µs“üÞµUÕì÷¶$o°Ý§ªê9CλèZkg%ùüÔ9æèYUõÙ©C,‚ÖÚ­IN°ôùUõñÎ3–ÖÚ]IN°ô%UuÉ:{=5É—žúŒªºyàÚ…ÖZ;˜ä)S瘓÷TÕë§ôç8æêuçËžÌóqç\ý¤ªº~àÚ…f®z·mê0”2 ÝP† Ê0tC€n(ÃÐíS¶”k“¼}Àº{7:ÈÈfØãêŠë®Ÿã9§vsæû;œÚSX %9yÀºƒddḭ̈ÿ§ù€5·døÜ|ûÀu=øÍ$:Äœ|vê@·†ÎÕCæËžÌóqÏ\}ëÀu=0W]kU5udÛÔ`(eº¡ @7”aè†2 ÝP† Ê0tC€n(ÃÐ eº¡ @7”aè†2 ÝP† Ê0tC€n(ÃÐ eº¡ @7”aè†2 ÝP† Ê0tC€n(ÃÐ eº¡ Àqk­ÓZûhkíÒÖÚs§ÎL«µvfkíß·Ö.o­½¹µÖ¦Î½h­=¡µös5Àp­ª¦Î@GZkÛ’Üœä{—ﺩª?a$`b­µw'yÊ»~¼ªþxª<ГÖÚ»’¼qÅ]æj€uødŽKUÝŸä“Ôò×åÓ&À%¹cùû“˜0 ôæ“Iþbù{s5À>€‡¤µ¶#ɶª:4u`z­µ“<¾ªn˜: ô¦µ¶=ÉÌÕÃ(ÃÐmS€¡¶OØšZk'$yN’ï9to’+ªê–‘ó¼x%7%ùãšècõZkO²;.3=Éþ1sµÖNLrÞÊûªê’‘νè×éŒ$; pzÔZ{j’³¾Ë¡/VÕ‘³<+É®±äî$Ÿ¬ªÛFŠtŒÖÚII~2É£gÝ•¥\GFγ;É÷¯¸ësUuÝçu–µÖžœä‡“´™C«êÊ‘³ô:¯M’k¹úIž´Æ’©¯Ó#²tNŸ94i.`14¯ÇÆÖZ{U’·'9c•%÷$¹,É˪ꎑ2 ùGÑW“\PUÝè°8fß±`CµÖž™ä½Y½“$'&ùûIÞ5J¨áÎLòþåw©Ëû²vÁ"Iž˜äâÖÚSFI´øÎLòÖÚßñœïKrNÖ¾N?˜¥\cþý,¼ÖÚÉI.ÉÚE˜$ù¡$i­Í¾cë”NIòª$oë„­µ$yGVÁN’œšäÕI~i”P‹Ïu6­åOÎøÝ¬]„I’]I.]~£¿EqJ’W$ùÕ±NØZû™$¿–µçµ£s¤ymÉ”×iµ"L2Á¼,e`l/N²}Åí¯eé]~­ôÒ±B͸7ÇfúóÇNIrî!–_ ôü5rÝ´âØi3k·‚û³úu:9É Æ±|Vžk­ë4Úß@GÎJ²ò Žäعjå§“>1É–ìX_É™þï̱—˜ãÎÜþrÈõ¥™cS=·2¥®Ól®­x€ùyZ–fë£Öš« Éí+çµ/Ìs.š=—yíX=^§1ç}`l_ À†ú+?Ú·µVf9êPUýå“…­µ×'ù ó5›ë‚$N˜gjG\'€MéÓUµçèÖÚÅI^>]œ¿ôºªÚ—$­µÇåØ7?˜ÒÏWÕIÒZ{b’ë¦ ³z¸N‹” Ø|z˜«“cK:S2¯Ëuºá“aè†2 ÝP† Ê0tC€n(ÃÐ eº¡ @7”aè†2 ÝP† Ê0tC€n(ÃÐ eº¡ @7”aè†2 ÝØ>u`Ë{okíß­rì¾Q“À|ü•ÖÚ­+nŸ4sÜß5ÀÚ~rf®:u渹ŠýAkíÞåïÛÌ1ÓÀ<™«ÙŒÌÕÀƒ(ÃS;eùë»yϘA`NZ’ÓW9ö­$1 @¶gõ¹êª$WŒææ´5Žy ˜§µæê/$ùĈY`^Öš«ß=Z `¡l›:Àwq8É»’ü«©ƒÀ}&ÉyUuÓÔA:t’ßOò¢ªºgê00'7'ySU}hê À¦w’?Hò‚ªº{ê00'7'ùçUõþ©ƒÓðÉ0ÀÔÞš¥³¬tMUÝ1E˜ƒCIΞ¹ïöªºvŠ0út’×ÍÜ÷ͪúúa`N^•äOVÜ®$_ªªïL”ؼ¾Û\}KUÝ8E˜s5ð Ê0ÀÔ¾ZUWNæè^ÓËs›Ðµþ®€‘˜«ÙŒÌÕÀƒl›: ¥ @7”aè†2 ÝØ>u`Ëû­µ§½QULfÁ=²µvÑŠÛÏœ, k™½NWTÕ¾ÉÒôçÉ3sÕGªêÀdiß«[k{–¿?}Ò$¬eåu:RUÿrÒ4Àf6;W¬ªþt²4‹oå¼vÚ¤IX‹¹xe`lWÏÜ>gùë(e˜|'É5Iž¼|û´$¿2]V1ä:)ìîú$G’UUU’óZk?šä•IN™8ÒQ\ñý·gŽ}qæøì§Ûl˜ªúlkíÌ$?—äoÍ~z’+Ë ßɱ¿1­<ï3Çf¯Ó•gÉòuú$¯Hò£3‡½ËÀ:ªêC­µË³ôâ¿:søº "%K/¸XYÐùúŠïï̱3èM£$JRUw'ù±ÖÚÙI^œcÿ¯ç‘IÎ+ËŒÿ™¥w">êڑλÈ×éÙ­µ¿›¥w¯=qÅáÙçž–ªº´µöÉ$¯Éƒçê±æ³YkÍk³ÿç<æ¼vO’ç´Ö~"ÉKsì¼vJ’Ž•eÆTsõþ™Û=\'s5$iK¯G 7­µ ’\¸â®7UÕESå¦ÕZ{bŽ-]UUgM“úÒZ{\Ž-|˜«ض©ÀPÊ0tC€n(ÃÐ eº±}ê ÓZû¾$7¬¸ë„™%÷ŽX­µO$ù;GoÎö\¬af®že®X`Ê0ýhINZåØ-I>4b`1<"«?_ðoÇ 2WtjÛÔxØþ(ɹUõÿ¦,„’¼¡ª>:uèÐ×b®Xx­ª¦ÎÀ­µ’üµ™»o¯ª§ÈL¯µvf’SWÜUI®­ªû&ŠÝ0WôK€nl›: ¥ @7”aè†2 ÝP† Ê0tC€n(ÃÐ eº¡ @7”aè†2 ÝP† Ê0tC€n(ÃÐ eº¡ @7”aè†2 ÝP† Ê0tC€n(ÃÐ eº¡ @7”aè†2 ÝP† Ê0tC€n(ÃÐ eº¡ @7”aè†2 ÝP† Ê0tC€n(ÃÐ eº¡ @7”aè†2 ÝP† Ê0tC€n(ÃÐ eº¡ @7”aè†2 ÝP† Ê0tC€n(ÃÐ eº¡ @7”aè†2 ðÿÙ»÷ IË:_ðß7³ª»«úˆÜ¡i.Ò\tÁ‘›¹x‡Qª=:1¡äÄF¸NllhÄÆõ;ëžØ0fÏ„gâ$±ëlL—÷+†3ê8G3#ˆ\¦FT¡º«/uÉý£ªº²º²šj¦ðÍ>Ÿ?º2ß7+ë—Ù]ïóËçû<P aŠ! @1„a(†0 ņ Â0C€bÃP aŠ! @1„a(†0 ņ Â0C€bÃP aŠ! @1„a(†0 ņ Â0C€bÃP aŠ! @1„a(†0 ņ Â0C€bÃP aŠ! @1„a(†0 ņ Â0C€bÃP aŠ! @1„a(†0 ņ Â0C€bÃP aŠ! @1„a(†0 ņ Â0C€bÃP aŠ! @1„a(†0 ņ Â0C€bÃP aŠ! @1„a(†0 ņ Â0C€bÃP aŠ! @1„a(†0 ņ Â0C€bÃP aŠQÝ|óÍU’«’¼ºîb–¡“ä'ívûGur(­VëÄ$W$©ê®ežMò­v»½«îB–Òjµ’¼5ÉÆºkY†é$··Ûíê.äPZ­ÖYI.ª»ŽeúufÞ£ûë.d)­Vk(ÉÛ“ ×]Ë2L$ùA»Ýþ—º 9”V«ua’×Ô]Ç2=žä;ív»Sw!KiµZGfæÿÑÁºkY†½I¾Ûn·Yw!‡Òjµ®HrRÝu,C'ÉCívûŸê.äPZ­Ö±™¹-!¨=–äÛívûÙº YJ«Õj$¹6É+ë®e¦“ÜÕn·ï©»CiµZ§%ùý”q}ÿtf®öÔ]ÈRZ­Öª$oK²¡îZ–a2É?·Ûíur(­Vë¼$Ô]Ç2=™™÷èTÝ…,¥Õj­ËÌ{tMݵ,Ãþ$ÿ­Ýn?Qw!‡ÒjµÞ˜äôºëX¦GÛíö«»ˆCiµZGgæw}³îZ–a<3ã¥ßÔ]ÈRZ­–Þè kµZÇ'ysʸvz.Éßн6É+ê®e¦“ü¨Ýnß_w!‡ÒjµÎHrqÝu,ÓS™yösotMf®ÖÕ]Ë2L&ùïôF_›äܺëX¦'2Ó'éçÞè†Ì¼GWÕ]Ë2”Ò½4É©u×± $·Ûí¬»CiµZÇ$¹:e\ßïÊ̘¾Ÿ{£Ufþ>7Õ]Ë2t2Ó½»îB¥Õjœä²”q}ÿLf®ú¹7:˜™ßKGÔ]Ë2Le¦7úpÝ…J«Õ:'ÉïÕ]Ç2ý23ïÑ~î®ÍÌ{t¨îZ–¡”Þè’œYwËô/ívûê.âPZ­ÖQI®K2Pw-ËÐ÷½Ñ$iµZoNrBÝu,C)½Ñã’ü»”qíTBo´™™óz£+¤ÕjmIrIÝu,“ÞèÊÒ]yz£+ë÷F«›o¾ù«™™Ä]Šé$W´ÛíïÕ]H/­Vë-InMÝs¾Ðn·ÿ°î"–ÒjµîN9ÿ¹%3ƒ™ ÚíöCuÒK«Õú@’vʸèžóÉv»ýẋèe6óh’WÕ]Ëax2ÉÖv»ýTÝ…ôÒjµþc’Õ]ÇaúP»ÝþTÝEôÒjµNJro’õu×r~’äuív{_Ý…ôÒjµ>ä}u×q˜ÞÞn·¿^w½´Z­‹“|7Éêºk9 ßNò–~Ì´Z­ï%ySÝu†‰$µÛí;ë.¤—V«õ®$ÛSÆ„„9ÿw»Ý¾¹î"z™ k=’ääšK9¿Í̵ÓãuÒK«ÕúŸ“|²î:ÓÇÚíöÿVw½´Z­W$y8e,Æ0çÑ$çµÛí±º é¥Õjýç$Zw‡é}ívûÿ«»ˆ^f'xü0e,Æ0ç‡IÞØ¯=Z­ÖW’¼£î:C ½Ñ¯§ŒÅæè®,½Ñ•§7º²ú½7ú’ôåµò!ôsoôÕIîOŽçô{o´¤/{‡ÐϽÑßKòý”±Ü~ï~+3“KÑï½Ñë“|!z£+b6¬õÓ$[ê®å0ô{oôLò)ëú¾Ÿ{£Gd¦_„ã9ýÞý?“ôåxîú¹7zF’;’¬­»–ÃÐï½ÑÏ%éÛ¾XýÞ½"É7SÆ„ã9ýÞ½=å„^“þï¾/Éÿ“2ªÓϽÑUIv&9®îZƒÞèÊÓ]Y/¨7:äʧžM#3»®ôåEM’ËSV&oo4_ét:}×´\¿~ýê›nº©¤{“dø¶ÛnÛ^UÕÏë.¤—k¯½öuÇw\IÍ <÷Üs7WUµ¹î:z9þøã7^sÍ5%}Ø›$›¾ýío¹ªª¾¼¨¹ñÆß´qcIs“'Ÿ|ò­ªª/?\9ûì³»ä’KJ Â$Ék¾ð…/|í–[n¯»^Þ÷¾÷]½zuI¹ä‘Gù¿ªªêËÞð†7œ~Î9çõ:==}å§?ýé¯ÜrË-Óu×r°U«V5ß÷¾÷ý~Uõ«~ðî»ïþ«ªÚYw!½¼ùÍo>÷”SN)éÃÞìÙ³g[UUG×]G/G}ôºn¸áäºë8LG~ÿûßÿ|UUOÖ]H/ïxÇ;ÞpÌ1ÇÔ]Æayúé§ÿ§ªªú²q}Úi§sÅW”u1šœòo|ã«UUõåʼ###W®[WÂbHóüñÿ½ªª¾üðç‚ .8ùu¯{]IA˜$¹èoþæoEe@ IDAT¾vË-·ôÝÊ]UUUüÇüÖf³¨_õŸþô§ÿµªªŸÖ]H/—^zéÙ[¶l))“ÉÉÉw讨áÛo¿}´ªªÇê.¤—{£ccc-½ÑµéïÿþïõFWÐ/ùËÿÐǽÑW_rÉ%%}Ø›$¯ùâ¿øõ[n¹ewÝ…ôRbotçÎÿ¹_{£]tÑæ­[·–„Éôôô•ý×ýÕ[n¹¥ï&t6ÿèþèÍ¥õFï¹çžOWUõHÝ…ôRbotïÞ½ïéãÞèÚn¸¡¤ L’ùƒüà UUý¢îBz™íõ¾Ï{£¯¼âŠ+J Â$z£+®Ï{£'½îu¯+)“ôoô:½Ñ•ó¦7½é¬3Î8£¤ L_÷F×­[·zdd¤/gB ½Ñ’‚0ýÞ=òšk®))“è®8½Ñ÷šÌÌkÙ@’ÿ˜äÿH9+%ü$ÉhÝEÂ_&ù@’"f#MNNæÎ;ï\Õétúṟ±±Üÿý9ûì³ë.eÙ~õ«_塇zm’×Ö]K/·Ýv[Þþö·g` ŒÌÖ¾}ûòãÿøˆ$××]K/?þx{챜xâ‰u—²l³5¿±î:–rÛm·åª«®J£QƵ÷øøxî¼óÎcÓ§ïÑ|0[¶lÉÑG÷eß‘N§“‡~8Ï<óÌUuײ”Ûo¿=o|ãSÊjÏ>ûlî¹çžÓ’œVw-½Üyç9ùä“SJ#xjj*÷ÜsOcrr²/wVÜ¿î¾ûîœþùu—²lO=õTxà­I¶Ö]K/?úÑrÜqÇeÕª2ú–¹óÎ;‡Ó§¿—žzê©ìر#›7÷e¿ª§_üâÙ¹sçEu×±”Ûn»-×^{mJù°bïÞ½¹ë®»^‘>}îܹ3guV6mÚTw)Ëö³Ÿý,¿øÅ/.¯»Ž¥Ü~ûí¹ì²Ëй¾ßµkWî¾ûî’œPw-½Üwß}Ù¼ysŽ8¢Œ¾åôôt|ðÁŒ_[w-½t:ÜqÇyýë__w)ËöÛßþ6?ùÉOÎHrFݵôrÇwä„NÈÐÐPÝ¥,ËÔÔTî¾ûîA½Ñ•óë_ÿ:?üðI.¨»–^Jëîß¿?wÝu׆ôéµS‰½Ñ'žx"?ûÙÏôFWÈž={r×]wmJŸ¾GKìîܹ3O?ýt_~€ž”×˽÷Þ{j’S뮥—»îº+§œrJ1½ÑéééÜwß}‰‰‰·Õ]K/ÅõFŸ~úé<ðÀç$9§îZz)±7z×]w ¥O/•Ø}òÉ'óÈ#ôí ¹´Þè¾}ûôFWØc=¦7º‚vïÞÝ÷½ÑÓN;-GydÝ¥,‹ÞèÊë÷Þèüãœxâ‰z£+d×®]z£+Loteé®<½Ñ•õàƒæÜsÏýåºuëJYÐj:Éh»Ý>ìÅ”«N§“V«uT’ +_׊ë$y¬_·]žÓjµ2“L:ìNð7¾ñ?66ö;ÛæiïÞ½™˜˜ø]ý¸lhh¨ˆ_ÂÓÓÓÙ½»/ëZ Ùlfx¸Œ…d÷ìÙ“ÉÉɺËx^ÃÃÃE4Ù&''³gÏžºËx^ƒƒƒY³¦ŒÅÐvïÞéé¾Ûb‘µk×q¡811‘½{÷Ö]ÆóZµjUJX±Óéd÷îÝéÃE<¨ª*k×®-âCô}ûöeÿþ¾[¸g‘5kÖdp°ÿä.åÚ©Ñhdxx¸ˆ÷¨ëû•555•ññ¾Ü¨lbëãã㙚ê»Åc)åÚÉõýÊ+åú~ݺuEü^Ú¿öí;¬]¬k±zõê"&wu:ìÚµ«î2ž—ëû•çú~e鮼Rz£®ïWžëû•¥7º²ôFWžëû•UÊõ½ÞèÊ+¥7ZÊõ}I×N¥\ß—rí¤7ºòJé–òuí´²J¹v*éú^ote•rí¤7ºòôFWVI×÷…ôFÿÓÍ7ßü©ÌlžÒïv·Ûí_¿o¬ú½ørSUÕÿä¿Ô]PœÿÔétþ—º‹x±õLf ÃP aŠ! @1„a(†0 ņ Â0C€bÃP aŠ! @1„a(†0 ņ Â0C€bÃP aŠ! @1„a(†0 ņ Â0C€bÃP aŠ! @1„a(†0 ņ Â0C€bÃP aŠ! @1„a(†0 ņ Â0C€bÃP aŠ! @1„a(†0 ņ Â0C€bÃP aŠ! @1„a(†0 ņ Â0C€bÃP aŠ! @1„a(†0 ņ Â0C€bÃP aŠ! @1„a(†0 ņ Â0C€bÃP aŠ! @1„a(†0 ņ Â0C€bÃP aŠ! @1„a(†0 ņ Â0C€bÃP aŠ! @1„a(†0 ņ Â0C€bÃP aŠ! ðtÑEåºë®[tüø@N:é¤*XÂ0/çž{n>ñ‰OdçÎùçþç¼ãïXô˜}ìcyôÑGóÿøùÓ?ýÓlÚ´©†J^¸º à…Û²eKFFF222’³Î:kYßSUU.¾øâ\|ñÅùó?ÿóüÃ?üCFGGó…/|!O?ýô‹\1À¿0 @aN<ñÄÜtÓMÙ¶m[.¸à‚Ós5\y啹òÊ+ó—ù—ùÖ·¾•ÑÑÑ|ùË_ÎØØØ U °r„a ðªW½*ï~÷»322’‹/¾8UU­øÏÌu×]—ë®».{÷îÍ­·ÞšÑÑÑÜzë­Ù³gÏŠÿ<€B OuÔQùƒ?øƒŒŒŒäòË/O³Ùüýì5kÖäÆoÌ7Þ˜±±±|å+_Éèèhþîïþ.¿³:& ÐGÖ­[—믿>Û¶mË[Þò– Ö]RÖ¯_Ÿ÷¾÷½yï{ß›§Ÿ~:_üâ3::šï~÷»™žž®»<àeF fkÖ¬É[ßúÖŒŒŒä­o}k†††ê.iIGuTn¾ùæÜ|óÍyòÉ'ó¹Ï}.£££ù§ú§t:ºË€UI|vð» PƒÁÁÁ\uÕUÉ 7Üõë××]ÒaÛ´iS>ô¡åCúP{ì±|æ3ŸÉöíÛsçwÖ]°„Õ*SN&š—³ª13UgÂ&°°¤Æà«ÓXsvškÎÎþ§þk:½ Î7‡¶¦9ôºLï½?SûHg깚*x醸i4¹ì²Ë²mÛ¶Üxã9ꨣê.iÅœxâ‰ùÈG>’|ä#y衇2::šÑÑÑ<ðÀu—/{ƒä¤áfN]×ÌqC|éñ}ùíÄÂ4Ì1kùw¯Z•ÇÆ§²s×t~>>•) Ù@ªcÒzMšCg§jv}Îßs˜*Õǧ±úø ä-™Þÿ³Lí¹?Ó{Hgz÷ï°j€—>a€ÙÅ_œ‘‘‘¼ûÝïΦM›ê.çE·eË–|üãÏÇ?þñÜ}÷ÝÍg>ó™<úè£u—/UrÂÚf6¯kä„áfš®“ÕâÇWI›Éië›9m]3Óƒù—ÝSyd×TžØ3iÁ^Fª£ÒzM†ÎI5ðÊÃøÆ¤ªæÞÍÕ'§¹úä$×fzߣ™Üs_¦÷þ4é½K>Ë# ð"8ÿüó322’‘‘‘œtÒIu—S›óÎ;/çw^>ñ‰Oä‡?üaFGGóÙÏ~6ÿú¯ÿZwið’Ó¨’㇛ټ®™“Ö53Øxþï™WÍOÖ©’UdËÙrÄ@öNvòèî©<26•_ì™^¼è-¼TÍ#Ò:;Íá­i ;{pÁ#–ñ$UÒ8x@ÞIR¥1tZV­9-é¼-Sûvdjü¾Lí}0éL¬Ì x™†X!gžyæÌgœQw9}碋.ÊE]”O~ò“ùÞ÷¾—ÑÑÑ|þóŸÏo~ó›ºK€bUI^=ÜÈæõ9e]#«›Õã‹Ù}»³èt£Z|¼“dh°ÊÙGäì#2>ÙÉ#»¦²cl*¿Ú;½’/~çªÆÚ4‡_“æð9i¬:a&̲ð ¾,ãgV«èÖéº_u’ ¤9|fšCg&‰Lí}(Sã÷fjïÃIgê…½€—!a€ƒ“O>97ÝtSFFFrþùç×]NF.¿üò\~ùåùÔ§>•oûÛÙ¾}{¾üå/ç¹çž«»<(¦¡F6¯oæ´õ¨ÏÉ©zÞìyîØÌµՂ8LÕYø µ«ªœ{T#çnÌØÄtvŒÍc~³O0€2T¡4‡Îš À¬9%IcÑ0‹21³Ç»¿ô|D•Ts;ÃÌ©\'ét掯Jsí9iŸ“LïËÔžfƒ1;“kŠ0 Àa:öØcó®w½+Û¶mËÞð†ºË)ÚÀÀ@®¹æš\sÍ5Ù·o_¾ñodtt4_ÿú×3>>^wyÐWŽ^ÓÈéë›Ù¼~ ëVõÀô8º??)hîÜܼN:9ju#¯e#¾r0OíÆŒM˜¬@Mª4‡¶¤9¼5Ã[’jpöx÷vª½ÉK ´—Ž9x€,dW‹ƒ1óìÎLÕX—Ɔ 3¸áÂLOŽejü¾Ù`ÌãÏ_ÀË„0 ÀÖ¯_Ÿn¸!###¹êª«288XwI/ëÖ­Ë{Þóž¼ç=ïÉ3Ï<“/}éKÙ¾}{¾ûÝïfjjªîòàEµa°Êæ 9ýˆfŽ^ÝúÑæÞ{ïÍèèhFGG³sçκK€ 4’SÖ d󆜼¾™f5¿ûË¡Â/=ƒ/Uµ(¨²T¦ê}¦§™…kNšÛõ%ÍÛéTÕ|`¦Z’éÌýÜ…ótÒ™¸ÓIÕµ˜íL0æô#fþn&¦;Ù96™‡Ÿ›ÊÏwOņ1$I5øÊ Ÿ“µç¦ZuôìÁe`|]x»:8ز(è²Ô ûù ^b›×Îüî]agÉ3÷çC2Ý™ÙÛ3ìá˜N÷n1sÁ˜¡“²j͉ÉQ×ejÚ}o¦ÆïOgzü¼€þ% ¼ä½öµ¯ÍÈÈHnºé¦œxâ‰u—ËlëÖ­ÙºukþìÏþ,·ß~{¶oßžÏ~ö³yâ‰'ê. €—‘F•œ´vf˜SÖdpvQتZ€Y2üÒ|Y´Ìâ°Ë¡§­–¸Ý}¬QuÍËI×ówÍÍé®»3›xéÉ,\Ävá2s ÛÎíÓ½kLUu²ªªr摃9ãˆÁìšÎ#ÏMeÇØTžØ=¹€——j`cšÃçd`íÖ4Vmšô*spèåÀ yþ\µèÜAß“^ççvÐ% ¯’îaºš8ø9æ·Q=pÿ@HfA@fööõöE(cfŸ·9tjšC§&ÓoÍäž™¿7S{H¦÷úu@xI:묳²mÛ¶ŒŒŒäôÓO¯»jrá…æÂ /Ì'?ùÉ|ÿûßÏèèh>ÿùÏç׿þuÝ¥ðT%9~m3§oÈ©ë›Y307)gæì¹9U÷|œC‡_ ¾,X`öÀó7[ªÒƒU©=ö’éÌdf~nçÀ±ª«È®9:ét:³stæw™ ÇÆÌVÑ+“t24ÐÈk66òšƒÙ=1cSÙñÜdžÜ3}¨@Áªæú4‡ÏIsí9i®>!ÇÝá—E;À,\/Þùe©Z–`/ܹeQ¡‡zIÕ˜,w=xÁ÷tfw€9°¼D×öªéÚåeæ\u`%‰™'êtæv‹éúº 33ÎîÞ-&ÍÁ ¬Ý’áÓÓ™žÌÔž‡fƒ1%‰C¼ €þ% ¼dœrÊ)ÉÈÈHÎ=÷ܺˡTU•K/½4—^ziþâ/þ"ßùÎw2::š/}éKyöÙgë.€Â;ÜÈé²yÃ@†šU×Üœjá|C`–¿,ž£³øø£=®}žk»4ºž´3é®kvO§ëØüb³]!™ªZ23¿€íÁ˜ÙÇÍíÓé$ëV5rÞQœ»q »&:yø¹É<üÜTžÚ'Pºª1œæÐÙi®ÝšÆš“RU$SX`bépL`LW &³cðE»ÅÌýÝt:©«Ó\{^škÏMgj<Óã?Íäø½™Þ÷è|]}J(ÎÑG?üÃ?ÌÈÈHÞô¦7¥Ñh<ÿ7½Ì<ûì³ùÎw¾³èø­·Þš?ù“?ÉÀ€ËÀ$Y½zu®¿þú\ýõÙ½{w¾öµ¯ett4ßüæ7³oß¾ºË Ïµº‘Íë›9ýˆ183gá"µó–î]`ªÙ?ž7sPøeἜùƒÏËYx¿J×·õ´Ô¹îaæ47í¥êÌO€™ËÉÌfæïwd‡cf1];Á,ŒézÅîÍjæB1N²qurá+ó{G橽Óyxl2ŒMelÂdþöî4H®«¾ÿ÷ÜÛÝ3=û®m$dIÖbË«blLXMa6ÁP â@â`\ŽKyžÿ ’J%•ªTò"©h â$ Š18˜øÁaq$Ä€7ɲµX»¬Ñ:ûÚ3ÓÝ÷žÿ‹»»õô,š;#}?«oŸ{ιwz†ªœ™ó½?"""""ZtDzåF+S¹ÐRJÐ¥D&~±×ÛÓ`‚Ae”:¶Þ+²*“L³èÎwyêU_u¬ 0îªÛ¬¨!{=, L ñêc¤ˆtdd(FH;h£WC¯½zÍMÆŒÜ!¹0ógJ|ÁDDDDÉRò‹‰âO&}DDD‹M]]>úÑbçÎøÀ>À0GŒ#GŽà‰'žÀ¿þë¿bll,²O{{;{ì1|îsŸCssóßáÒ0<<ŒïÿûèêêÂÏ~ö3‹Å¤o‰ˆˆˆˆˆˆRŸØP«ãšºš+5{ï‚ bÜM9Î>¡>¬¶ìŒZñ%¼_'"ðÜ·ãïêëýå½Cè›0|ý6Š $B IDAT4¦ñÀÖ:8tâþ|$ÝÔ÷ÒwNÝë#ݧ۪罪1Îuœ¿W©ïÕù¤ôQûûúJ‰K“&Ž81f WäßÁˆˆˆˆˆˆ#th× •½zöZ@Ë(á><¢tF ÂØëêá[DG^üm¢äâ:f±mÝûÿA¾¶tË;]÷™øAÑ kï­úÞ·ÐVÜîšXúÞCª}•>j›»—ö‹ Œ—Þ§_qFî Œ‰0 â¿6"""ZLþVJù§IßÄåÆ0Ì"Ã0 ‘§ªª þð‡ñ©O} wß}7***’¾¥EIJ‰ÿøÇèììÄO~ò”ûÿße³Y<ðÀصk®¿þúË|—KWoo/žyætuuá—¿üeÙŸ/-]5)õµ:6ÔêhËêÊÃi½ KT%ÿÃlE`Ÿˆ À8çí–˜½9"¼wþ¹j‹÷¥×¢Ã0¿·­.²ÔR8¸>Vß:™ð^è`LxïN© Ìô¡g3)ó&NŒqrÌÄ”Á5=Ñå' eÖAÏnƒžÝ ¡eýg= µ” Á(Á_•ï5TE&b-ÔsÜqÔ{{šàú{ôÕÿ iä|méÖÛ‘]ÿûÁê“#Ôæ˜PŒrìÇ_½ciWOžp_gŠñ-ÂaúaL„1q²ØñEÑ"Á0 -<†aˆˆèj—Édð¡};wîÄ}÷݇êêê¤oiÑÃ7¾ñ <ñÄ8zôèœæzï{ß‹]»vá¾ûîƒæ”l¦sçÎáé§ŸFWW^y啤o‡ˆˆˆˆˆˆæQVXW£aCm +ª`”0K8#”}:Â·ÏÆ–ò„ZuÏŽRåEí?µo°=ü>P9&зóÕAôåüa˜M|ú:; #}/þ£ÀŸ•üï¥o?Žz T}A8ãlîñï»Q‚.ö·gšPŒ»_Ç:6MàlΪszÜ@ÁÍ#-½zå6hÙ­zµ?ðb‡Wf‚¾E´‚q2¡Î €Q*¿xˆ^t»ÿ(§âB1–‘WþdцɴÞì% ¹=Sú×Ó¾PLD@ÆŽ .¼}O¡ðæ[œcl—qíöºÛ Ù„Ûe¡ÆÄ“‡ Á¨/”ˆˆˆ’Ã0 -<†aˆˆèj¤ë:Þ÷¾÷açθÿþûÑÐÐô--j'NœÀ—¾ô%üË¿ü FFFæuîuëÖá±ÇÃg?ûY~¦qâÄ tuu¡«« Húvˆˆˆˆˆˆh2š@Gµ† µ:VUéМý8B({o„²OG Ĩ•`"B0þý8ÁŠ/Á÷þàŒ#*üâ5…û{­êAøížWцùýëëâöè¨/î©´FïÛ‰¨úb¿‰ Æø*è{p áÛßÅÇ…ÆúM {Ü ÆtçLù§2"""""¢YÑR+ Un…^¹"U§TqQƒ0NàÑmÁ*0ÁLÄq¨ Œ– `"Â/JÐÅz .ªCYÃÈË»Ãa˜¶;Ýð``\0ࢼ‰yÈDäB;ðŒ Y8_)Æ­ã\§D•©œ7 çaN‚1uÒ ~pDDD´ð†¡…Ç0 ]-„xç;߉O}êSøøÇ?޶¶¶¤oiÑû¯ÿú/ìÙ³Ï?ÿ¾´ººŸùÌg°k×.lÞ¼ù²^ëJpðàA7süøñ¤o‡ˆˆˆˆˆˆJH `mµ†õ5)¬®Ò kJà%PýE­Þ2«Œ¯2Ìôڌ㿈à^ß{ؽ:*üÃK¡0̦¦ ~{}ä8M<2tÁXÇáЋóÞÛ«#}ût ¥²gÇŠq«ÃØç¼=8ʼêx'8£´ç ‰·ÇMœ7pn„É?›•$ôVè[ìLS ÜâµL_ &ÐÐŒ¯?à Îø‚0Ê%b0Á~î?þ…vT&f¡=ò›]á0̲w"»1†±I÷å½r Yœ†P8¦T0Æ7Þ_ÅeÚPŒ¯Œ3ŸúŸ:ÿ?«Ùtç1óg`L‚™ Òô>DDD´`†¡…Ç0 ]én½õVìܹŸüä'ÑÞÞžôí,z¹\ßúÖ·ÐÙÙ‰ƒ.øõ…¸ë®»°{÷nÜ}÷ݾ'ÒR´W_}]]]øîw¿‹îîî¤o‡ˆˆˆˆˆˆèhÏjX_£cMµ†´æ¿¸Á–@àÅ Å ÐÞShÃ!Ø—£ö³þQöêø*Î@i…_ÜãˆÐKä^¯%xîïÓÃ4gðà V•XÿCiýGŠÜ·cÿ±g'6ÂøÇ»AgÌ4¡o_?®®*ã´OÀéq'ÇM\œ4£«ä]…„Ö­b3ôŠ­©Ö˜Ê/Á6”è%´ÑˆÁ(a—’ßz[Y¨»/êb:¸°ê²Ú×®öþÕCsz-¤9È"2ËÞ‰ªk?ëu .¤¡.µeTcD¨ÅéR:ãUbUÍÊâºìPŒ[ÆYoÃ/¾Ey MígÂÌŸ†9uFþ( §¢>T"""º<†¡…Ç0 ]‰¶mÛ†;wbçÎØ°aCÒ·³$œ9s_þò—ñÔSOapp0éÛlܸ?þ8þàþµµµIß΢'¥Ä‹/¾ˆ®®.|ï{ßCOOOÒ·DDDDDDtUVf5¬¯Ö°¶JGF^”PŠ×S &з¬LDÕ¸s8wèÜŸ#àDîÏq®øÂ§{”Åßý¦½ãÚ  Ãüá ±c¢C0^ƒ»ïFù'Žq6äø÷êȈý92æþPŒ ‰¹@9ŽÂD—˜(Jœ7q*g¢gŠK#""""¢«Ðj¡¥7C¯Ø‘Z¡„V4ká©9 Zá—] Æ ¶¸mê“$Ê Á¨í€º(`‚á7é"üo£Õ%9úÊß@ÏÞ=»Òœ‚1¾Z•DvÓñlp¿¦²à–ʱo!\t˘`Œ„·¦ˆ?þã?f¸©L†aàg?ûºººðýïCCCIßÑIh«XW­££ZC¥¥ÊK Ü¢¾"æ|°r üçÿ¡L¨ Œ“s ÿ¾øE(êö›à^œ`5W:°˜¦D×ÿöaÅ” 'úÒ `´6…ûoköÏ«YÔÆ¨‡ÕzÇêuŸŽôÍç Â(Áçœ3—^™Q(ƾfTÐ%Øe§Í´'7%0V4qz\âtÎÄ@W#""""¢+—UÐÒ› ¥·@K·û.q¡Äa¦ëDôB!w=Ø8Ç¥0Á ŒÚo¾¨c»«s ÍŠýGaŽ€¬u•ÒRƒÐ‘ª_ç´F-°ýÁ˜ˆc8&ˆ‰ ÆD„cJ†b‚c¥Òß”™®JŒµ˜vƒ6f‰Œ™‡Q83ÿÌâiň‡ˆˆˆæˆaZx ÃÑRÖÞÞŽO|âعs'vìØ‘ôí,“““øÎw¾ƒÎÎN¼þúëIßNÙ4MÃ=÷܃ݻwãø@Ò·³däóyüøÇ?FWWž{î9Œ'}KDDDDDDK^KF £JCG•@UJƒæ>]ÖyP­J‰Ä ê<á% £ö)'£îÕq6ßD`|AgP0#àþ«îÕ ¼Wû¦ ôœÉ¡ïìŠ3òsÌTêh]]…–ö,ô´ßNà¾ß{Ú“ãˈ}:2ôÞÿ@[5Ђ’¡˜È*0êqÔy>5&ØÏ”ÀHÁ ż=!1\äߨˆˆˆˆˆè * é¡e6CK­„ ´C0Ñ¡À­3m¿@è ß¹èê1€µ¾VÃ1ðú„0¡Åµÿ8°¨ö…f˜SC(öŸ„œ¬PžGå,DÅ0´Z ©¦k!´´sÒ×%ô&ê8މz VœQ¡ïÉ^˜&Ð7bAt°%¶ €4íP ¬;é3¦`Á,iœý; """š1†ahá1 CDDKMkk+>þñãSŸúî¼óÎÐSH)Þ¹sçðä“OâÿñÑÛÛ›ôíÌÉÖ­[±k×.|úÓŸFUUUÒ·³där9üð‡?DWWþã?þSSSIßÑ’ÑèÈ ¬­¨Mivðeš*0ˆÂøÏ{mN &¤qÂ+J8¦œŒZFØþý9"´/Ç~‰ÜŸ#‚ûu ¾. çíq ^œD¹Òt¦•X¶¦ÙÚT(c½x‰©œ“ÎÙ@8¦œ`L0S~(&^qæVÛ£ªÄÈ@u™AõÕ´ oçLœ™”[œ~‰ˆˆˆˆˆb¤¡éë!R› §ÖZ*:¼¢•ªô2]Xñ〈v¥Í]wO‚QÕj¿R˜À«/ôÀ@ÆÈÛ(õÅ&ZôÇ)D Ý4 Q1†TËzh™¥Ý¿¨–2¢=ˆ cÔà‹76ºê‹se!®c¤Ú&KµÃ/NØñýÌà8%ãT‘1'`Á,4ÏAùpˆˆˆh憡…Ç0 - øèG?Š;wâýï?t]Oú––”_ÿú×èììÄ3Ï<ƒbñÊ*÷ÛØØˆ‡z=öÖ®]›ôí,)###xöÙgÑÕÕ…ÿüÏÿ¼â~6ˆˆˆˆˆˆæC­¬É td5Ô§½@‹[ý¥TÐE}Åtÿy„Ú˜’!˜pß¾›ÈL\øÅ| †`œ™¤”¸0‰Koc|¸0§Ï¼®9ƒek«ÑÐZ ©îщ¨£nÈQ_ˆŒ2NJ_¿Y…b!'lã °`š K\Hfš@ŒµWÇkëÏK¼=)Ñ=)1Á‡ØÑ¢¤CÓ: ôMÐRë‘¶ÖŸš6» ŒŒñ·!6@»Äµ{sðψP›ú ¥-‚‘EúÂ+²Á?FÑŸßV`$ÕTC ôÚµþA¡·މ ÄxÁÆ ¸Ä…bÔqÊ‚;tqæ,UýEyoFõ‘%úDbœ÷ÆLãLã(¤¼÷¡Q<†ahá1 CDD‹Uuu5î½÷^ìܹwß}72™LÒ·´¤äóy|÷»ßEgg'^y啤oç²ÓuùÈG°k×.¼ûÝïNúv–œ¾¾>üÛ¿ý¾óïà—¿ü%L“»hˆˆˆˆˆèêU¥k*ÖdšÒ"^™qFXd€™f¼À búçs6ØøÆ8Lj¼„ÞÛsØcÜwŽí×)L™è=3ŽžîŠyåï?Â÷2-:2•ÚÖV£uUzZs÷ÃxøöîxO¨ îÇ f¼÷¾ ‹2G\(Æ ¦8Aœ¸ K¨JŒš‰½˜ö5ìRN ÆyíÉg&MœËS\ÒQ¢4ÑMÛM_ˆŠpˆÅÔ„Ñïcƒ0jÊÌ0î;ÐΫ2?”qÖ0ï¼R5Æ·˜VŽÍŠ}'€É*@T)s(ý#CdÌ_û DŽtóµ€Hy'%ÂǾpŒoÑì{õÎûƒ,¥B1þ1ýcƒ-ˆhSúÃ-³ ĘNÿa˜æ1Hó¤ì+ñÁ‘‚aZx ÃÑbRQQ»ï¾;wîĽ÷Þ‹ªªª¤oiɹté¾úÕ¯â«_ý*.^¼:ŸVrà 7`×®]øÝßý]TVV&};KÎùóçñÝï~]]]x饗’¾"""""¢Q©«*€5Z2Vx%*äRn&n¼µ‡&:Û¼@‹Û§T Ξ:ö?¤Ö_)F(q‚á§Ÿo¯€ÜH—ÞÇÀ¥IHSÚã¼Bí¬¨¨Òa%ŠùèĆïOHv€DÓZVfѶ¦ •Õ©˜=:J&¢­œ Œs½È Œ:Ξq6쨗ˆ ¢ƒ-qmf‰sq)CJ\ÊÝSò@’#""""¢! ÄJ±šv ²JðeA-ð~V}àoƒÚ¡¾Ñ!e(cÜcgܾñ¯Ö±9Öâ``4HÅ„e”6ûR•Ù4î¼{>pÿMè»8‚Ÿ>³o¾tJYËL8ì"s@å8Ò- ÒuPÃ/¾þQÁ˜`¸Å>.+ëV—)~1½ëÆö ´™Ñ}Ê ÄúH)!ÍA;sCá"""r0 C a""JZ*•Âûßÿ~ìܹýèGQ__Ÿô--I¯½ööìÙƒ§Ÿ~ù|>éÛYZZZððÃãÑGŪU«’¾%éÔ©SèêêBWWÞxã¤o‡ˆˆˆˆˆh^e°2¬®hU0³ Âhöæ—è>6D´Â/(1ÁñˆÁø3î¼Ö{ÎiW+¿({oœkJ ]šÀ¥39ŒÜÁB™Ä;ökY^‰wÞ³;ÞÛŠbÁÄo^èÁ¯~r #áßa¸Fr(î?@mS–­©B}k…P±ÿ‘Êé›^ÅD„[ìƒrC1îÜjH1ÁåzÓaÂcMSúç2KbÔ!%.æ³yàb0øç9"""""šgB,³0bûA—št™SFóÀšd™®j ¢û!Ø®Ìë ÁÏÁ ÔL€±ûI…£0Fóhö`„{ øßXZW4à}½ïº{+²Õ¾s—Îâ?¿¿/þä¦&"ö (û5ÝÐ `-2õ^¤—A¯i÷Ÿ/ñêîÿŒ ¸8ý” ‹:.vAT°%ªo Ÿ9M &¦Od Æ,ÝÇ}@Ê>+#Cb4üY]݆¡…Ç0 %Aw½ë]عs'>þñ£µµ5é[Z’ŠÅ"¾ÿýïcÏž=øÕ¯~•ôí,Z©T ûØÇ°{÷nÜ~ûíIßÎ’uøða7sôèѤo‡ˆˆˆˆˆhVRX‘Ve€¶4Ò¡–™a´ˆ¾%ƒ.¡K| &Øîlމ Í DÆ·'xñÞ»{mœ¹í¶bÞDïÙúÎN ?e(›}Ô1Î/E#lÜ^;>´ ›nlíå1 ‰/ àW?¾„îcc¾ª.N ÅÝŸ£¾J‰Š*m««Ñ´" =å„uᘈ`ŒbrÞ·GF«¡çZ¾ НMmwžœb Ì%ì¢Ìçbœ{A Æ Æ À¹ÎF ëØÝ‹ãë¨Á÷ˆ À¨gcEôœÉaðâ$L)•=AJ Æî?n|W3Þq×2´®¬,ë{töä8~óÓøÍІ“ñöÙ¸/R ½H@ךVV¢­½Uº/¬âôq^e`N¯š‹7&:ã‹«ü‚ÈöRU`¼~‘a—@¥_…_°&ª-º¯£`cÎæÞ‚ûñÅh€Ð6Ú˜†˜N Œ/Ø¢_bÎGa¢*ÄÄŒq˵Úá™@è%ŒqîÙ×®´C0îú:zQû:{~cü<Š Ìf)ßu}¯ötÎJ»¢2…ï½ï¾÷z¬XÓ4ãï—”_y¿øoâ­}Ýêoб‘ã@Eéæ ™Zw ·Ä…bÜy¢B1Þ˜i«Ä˜3 ÄX ìYbJU‡1#úG­¢%¤‘ôm,Io¼ñ:;;ñío““üÊ\,_¾<òyä,[¶,éÛY’þðÿ_ÿúד¾ """""¢H¬Ê/«2V%˜Tà᩾à‹p™[fú>Êq°êK(ÔâÄ”‚‰ªãßÏãÀH)0Ô;‰ÞîƆò‘ã|åsml­Ào½¿ 7½«•Uú¬¾ocüúó^¼ú‹^Œ (ûL¢-J[]sÚVW¡¶)ãç„N¼qjè¥ÌPL Ÿ¶)»JLT &z)1nVÓ{eJçóV0¦¿8«o]¡jáV€-Ót޳¨A–Rçü}Ê ÂDT•‰ ½Økêè~ð·«a–ÈÐ BáµJ HŽÂô>·˜Œ;Î~il©ÅwoÃ;îÚŒªšŠ¹\<;ˆ_þð^ýïcÈO©ODV~?ÌRëCªq9ôꕾón—P8¦T¥x&²½dØÅîg‡T¼ë˜þ€ÍŒ1füySB:a˜¨`N,Rž…)CÊSòsý-% ÃÐÂc†ˆˆÚç?ÿyüÍßüMÒ·±d†çž{øÅ/~‘ôí\q2™ >ùÉOb×®]¸õÖ[“¾%åÆoÄþýû“¾ """"""—Ð’²0+3@FÄôSÂ%n…-:ø¢‰`%. 3ó°ŒïâúÂ(}­¯): Ì8}xoLôŸ@ïÙ S¦tvÇÀ @¹§Žkk±ãý­ØtCƒ/3FQâÐ+ƒxùg=¸p:§Tˆ W·HTT¥ÐÚ^…æ•ÖÆ)Àw>*Ũo£Ï´_{L°mþqÕ]¢1ÑaûØô÷)eÂÎås`Á""""¢«T47SæÕp‰x™]&¾hÑâB/1UcÔnd?„Û‚_W0 ÎÅ }Ç §*!DMx.xëq_eë·¬ÀwoöдyZXLŒOᥟÁ¯~rƒ½£V£/ Ç( o)û¡ÕT ݼ îM«Á—@•˜P(Fª×´M~ †]B–ˆqåbÔÀKð¼=‡TÂ0Ö{Óz_Rž)AÊ·p±MDDW<†ahá1 CDD í®»îÂOúÓ¤ocÑÂ?ýÓ?áË_þ2NŸ>ôí\î¸ãìÞ½÷ß?R©TÒ·³¨MMM¡¶¶…B!é[!"""""BS hÏ+Ó@¥Vºï´A­ôùèvåœSeƩТMt ¶¡t Æ ·û"Ø&&39^Dow—&­ $ûrûúÂ1@*­ãºßjÄŽ÷¶¢uev~¿¡gOŽãÕŸ÷â­}C0Mçé¯Êžg“ ü]h^‘Ek{Òö†¯Ÿ;>>Y&pïúQá—ˆàJd¿ù ÄÄ…aÊýݸiU‹9—FŒyúFÑ"U M¬·0+á†Ê¥ §š‹TÑ” /%‚2áàKÄùrƒ0ZĘÐ<ð·#º]¨ïãB0BÀ¿€âày Ø¡e|á ½ø_Sén¸c=ÞùÁ­X±¶i¾å1M‰Ã{ÏàÅŸ©Ãá_`{¯2r¤9 Q9‰tóFˆT•5a(ãÆ„C1Áê1QÁe|TØe¶˜¨ /¦>2cz×›‘¤‡––iJ~_¥^{í5VÒ!""""¢DÕëVfU¨š&ã_Jaâ*ÀxA˜ˆsšòv&Z)¤)Y &*(ƒ¨ó…eœ¯ðÆ ÷M¡çì8F ¡ûV qÞCuiÜô®Üp{3²Õ û ‰Ñ¡öýoö¿ØÜ˜õ4U7à¡„Z¼}4^ø£®¹­íU¨mL{ûmœñð÷拨âb *+ãkC¸-.ìR²W ¦t`&x~FŸ»acÎæ­ ] 2b]¦@™ ë 7Èâ…a¼àŠRÑ¡_/DSv&.<Û†˜~Î::ÜׂP<c4–@¸Æ[C{ó8Ç@mC5n{ÿµ¸å=Q][9·oã]ìÄK/Æþ_ŸD±`¨‹å’ÁiæÔR+¡W¯‡\¡7\âÎlAtØ¥T˜Å€™i Æô¿ªã¼7íþîñl1Ž)˜ò¤<)ÏÁþ°‰ˆˆ® ÃÐÂc†ˆˆ’pæÌ¬^½:éÛX4¤”xþùçÑÙÙ‰^x!éÛ![ee%xàìÚµ Û·oOúv•§žz ?üpÒ·ADDDDDW™ZÝ ¿´§}æãÝ ŠLÑ„°÷ï”8_N&lÑÔp ʈè~ÞƒhÃ}ƒ5#ì¦!Ñ>‡Þ³ÈOÞxM/Âã!€öõ5¸å·[°áú:hš˜ó÷r.ŠE‰Ã¯ bïÿô¡çü„úYkS œ‡µ‚-¨¬N¡µ½ Ë+Ý€2G äU1¦¬ ìû@Ĺa•P ÆôŸ‹­㼟¦ÿlÿT7dxc&Œ!""""ZbRb-4±gs! IDAT±B¬0‹…µÊDÑ¡M‹²ÄVŒ‰ Ê”ÂC0å†e[ &€ðB0Ò˜D¡ï(ädB«sÃ/ÞX¸cÔŒ«Ö·à¶lÁ–›×@Óg>ºLrcSØû?ÇðêÏ`t(gE€`¨„UHÙ ½¶ ©Æ°¼ñ¾`LUbbC2Áj.sÄ”u>zQÃ0¡ëÏÉLyR‡”æ8Q↡…Ç0 %á?ø>ò‘$}‰Á׿þu|éK_ÂñãÇ“¾*á=ïyvíÚ…û>Ç_ _þèþ_ýêW“¾ """""º Ti^˜ú9,Ç|aûIµ¡Ê0J8Ä{Óg&A˜à9¨Á˜é11çÝ 5p«ÈÄ…`¦rEôžÍ¡ÿâ$¤)£çÔ”À½gGOkØ|Snº³m«²sþ^^gOŽcß/ûpüà¤aúöÁ¸¡–`Äô”†æ••hi¯B:£¹{W‚!—`Řø Lø< •=6ña—é1n»Yº¯©|}¡J1îÞû¹ê/ZÁ˜óy`Šú#""""Z¤4±Æ®Ó =?ÓF†Y4_è$¾bŒÝ·œ L\F³ƒ3îÂÙ©BëXsÖ·jŸaµÂíæD/ŠýÝf„ÈøÂ.Ñk­§4l¾e-v¼w3V¬mšŸÏþ22M‰#ûÎàÕŸÁÙ½¼µ±?Ø¢„b¬NæDeéæ©l À‚p¨J›éÍ” »¨ï͘>3 ÄDU€±á¾ùMÓ»¾;oÆì`Ì1HÙ;ó-†ahá1 CDDIøË¿üK|ñ‹_Lú6sìØ1<ñÄøÆ7¾ÑÑѤo‡f ££=özè!444$};‰¹í¶ÛðòË/'}DDDDDt…ªÔ€Ui+Ó˜šû|¾àŠˆ)/ 3» L©*2î+¢æ÷ÚÙO Ê8ý‚á˜Bï™Fó‘Á—ðýYÔÔ¥°ýöf\[²5óð X£CìÿU¼<ˆÉœ„ñ jÅ—úÖ ´®®Fu]*ЉÂÄV‰qŽƒãc,%‚/Ó„Y‚}Õ LÉÊ1¦¾ù ô€s+SàŸ‰ˆˆˆˆ'P¡ÝM¬P1ÿpÃ(jX%PÕe¦c”0LyA˜` EDW•Q‚*ÑA˜¸~@qðŒÑQ´zÁ5<ƒˆqªë²¸áÎ ¸ñP]W9ÿŸÿ¸Ô=ˆ×~qoí}FѰ×jð‘á)óÚRMíвmÖyß8'H‚iÃ.±á–é1¾63Ô'6ðâž‹¨cjü÷£ŒŸg#òLóU,ÍJDDKÃ0´ð†!"¢$Ü{ï½xî¹ç’¾%¥Ä /¼€={öàG?úøÿ-mÕÕÕøô§?]»vaË–-Iß΂2 µµµ˜˜˜HúVˆˆˆˆˆè S­7UÍ)û«óD ¬„.J0$XÅ%t‰ªò¢ÙÁš™a¢*ÎD^"‚3žWÆÖ~þ è=›ÃÔ„ø:Õ@Lx®k²¸áöl¸®š>Ÿß…S,˜xkßöÿºý—¦üÁ@DpÄ9—­I¡uuÛ*!”` üášÈ LÔùè~f‰sqÓ,5‡2®TÆŒž>™z À«ã@‘¿ú"""""JŒË k÷_®Éí€KTÕ%Ì2ÓŠ1Óeb‚0¾ MdÀEmƒ}ð÷QªÁÀœD±ÿ̉„V˜c¼¹ÚÚ›pÓ»7aÓ«¡ëÚåùüXntoüúÞ|ñ8ÆG&LSñÅi‡ È^huµH5¬WÂ/qcbæ‘v ;„b†Æ•Ę‘}â+À8דJé¯.ãf‚læÝŠÆ¿\†y‰ˆˆ.†ahá1 CDDIXµjΞ=›ôm,ˆññq|ó›ßDgg'Þzë­¤o‡.ƒ»îº »wïÆ=÷Üã>íçJvàÀ\ýõIß]ª4àƒõó;g0°¢Zæ%£„K¦ „çPC-¥4ñëkò“&zºs¸ƒiÀWýÅý:#*Âèi ×Õcû;š±¬=;¿~ÂΞÇþ_÷ãô[#þàK0✳÷µ¤ÒM+³h]U…TF+?肨pÌübL3ø jkk“¾­ËfïÞ½Iß]¡r&—@fžöêDìw P>)Ñõª‰øk”„ ]·D ÆÝ«cäÑÓÃpÿ”ÎÑt/ü¢…B0Öûªš¶íh¶¨ª±þts9‚IZÙQ…•UÌãÍ—ðÖÞALMšÖ^aí[&`ÚÇRX!£(qéíq\z;‡†Ö ´®®BU]Úë Ø?;RØá»Í´ûYœcëUóõï ÝÙ÷š&ìïzýÀ{¡ôW®¯¶»ãì¯C«Î|6„!""""J^RBˆ¦ù6 ñ…C•SÜÐ ï£ÿó[‚A˜ˆ±±A-~LT[qøÌ‘!­b™o|ü@eM%¶üÖ:\wÛzT×[—(Íùý¼™k¶·ãšíí¸Ô=€7_<Ž“ÎÁ,n¶ö‚[ «h²rJ"öDj©¦5Ð*೎–ÖÓ<¤„°s*°JÂ[ÕB`j¾5Í£î€Ðy!¬Õ·ÓÏ_ïzB™È]ÞÛkiw~û+˜÷ê0}ó:ÍV†YdX†ˆˆ’ò£ýúЇ’¾y÷óŸÿxî¹ç`šWö/»(Zmm-|ðA<þøãذaCÒ·3ïþäOþ{öìIú6ˆˆˆˆˆè õÎZ u« ”¸A-¢ÝÞd£Vzñ…W´ˆÊ1jH%¢êÌL‚0š½1ÈÝoƒÒýMCbàâz»s˜7¬°‹æ¯€õ^ ue%¶ßÖŒk®«‡®‹i?Ç+I!oâÈþ!¼ùR?†úò¾j1nå3â½ dëRh[]†¶ J5”®ðâUb‰¯cFŒ÷U†1c*Á¨ï͘ó‘íÖœÁê3óåäðFnþæ#""""¢Ùѵ÷CˆMó7¡/„¢ù+šæ?§†Uì¶PÅ-®Ê‹Q1Æ;7§ Œ}^šŽAæ JW˜qÿ³ÖäM+°íö ذ½zJŸ¿Ïw ÊNâÐË'ñÖ+§096QÑVÕ‰@E@´ºz¤êו¬*ã¯Ð2M…3<‡[ÅeV`"ªÇ(ó¹çƒ×'†ùŸòؼÍGDD´X†ˆˆˆ®ûöí»bÂ0øö·¿ÎÎN¼ùæ›Iß%lttxâ‰'pÏ=÷`×®]øà?˜ômÍ›}ûö%} DDDDDt*ÎO1U_ š¨ÕX¼ÿÜÛjásþÿìñQó–ÈLw.\(LšèéΡÿü ô‚4º~q‚> iÞœzJ`Ý–Z\[3–µgÝOèJ«3=%°õ–Fl½¥Ý'ÆðæKè>>fm^«cZŸ·izU_&F‹8}`©Œ†–UY´´WAOkö&÷ù±Ê±÷jU±ªÆÏù«ÀxÔÊ.1•`œ÷Òºõ¼tÎ[ûµ|„´æT«ÏÌçƒì†y›Šˆˆˆˆˆæ@ÊÞyÃx„Â"Â]LcÚ`Iüûiá³ Â8cÌüŠý§! õZCtšˆù5]ÃêkW`ë;®Á²µ-¬‚%æ^ f:él7¼{3®»sN8‹Ã¿9 C¾ÀŠ»*ÖH ®º*eÌa‰©¡ƒÐ²©–"ª4*¬av FYGUˆÑa*+liýœJe2w¼õK¢ø 0v á.á$¤P;¸'¬yæû!ñ²w~ç#""¢yÁ0 öîÝ›ô-ÌYww7¾ò•¯à©§žBÒ·C‹Œ”Ï?ÿ<žþylÙ²?þ8>ó™Ï ºº:é[›5)%^ýõ¤oƒˆˆˆˆˆ®`ó±‘>2°¢¾ÆbbÚc‚.Q•gæ-£¼Ž äÑs&‡á¾Išfýç«þâT¯±«ÄTU§°å¦l½µ ÕµÖŸg¤qu`â´wT£½£ÃýyxuG÷cjÊ€4­ð‹4­,N8Æ9.$.œÇ…“ãh\V‰Ö5UÈÖ¦àí– ‡]œsdd &º]Ù#à„ÎËÀyáfs!) Ôp´9bþ^;TœŸyˆˆˆˆˆhn$úæo2{}ê[lÃ;žó½W2jøÄW ²`Úª03 ÂØ×+Žž1<a¶Z›[Á&t­ÀØŠl×Ü´×îX‡êú*@Ѹº0q:®kGÇuíè9Ó#/ŸÄ™Ã aUQnUÓJÁ ¹Ù9!‘?Ó ‘Aªi-DºÁ7·?3M FÏ+ PÖ×þP à>xB8«rç":,#¥´qÆ;sÎË»‰áy˜‡ˆˆˆæ›˜÷,͉âO&}DDtõY¿~=Nœ8‘ômÌÊ‹/¾ˆ={öàÙgŸE±È¿ðSùðÐCá±ÇCGGGÒ·3cÇŽæMóø)"""""¢€ø@ÝÜæP«¢8!·jŠDQ$j_-:È5gÜùÒ™Ò¡gÏ”ÀÀ… ô¼ÃäXÑ«üâ«£´)¡˜æe•¸nG6l«‡ž F((J~ÊÄÑýC8ðêFòÖlMiU‹‘Ò=6¥ÝfJ˜¦Õ§¦>¶µU¨k­„€ÝGZãü¯ö\‘çÂí¦îgÆœ^Ó4#æ5ã#Úæú'<ÀݽMDDDDD”¨ Rúgç>/”¢ù*šVâœ8QCAMéë„Q4ÿ{_ÐE _¢‚0šHÅÁ£0Ç%„hðjâ7Öu­u¸vÇzt\·zZŸûgxÊLàøk§püõ·‘ÏM¹•bܪ1N@Æ”°ßÖyÓô~èõÐkÖøû*güï͘ó¦{ìž·¯'•vë¾Ìر¡{T¯wnޤ¼Ã|v¾DDD êo¥”šôM\n Ã,2 ÃQ’ÑÐÐ0}ÇE`jj ]]]èìì¼"ªÚP²t]Ç}÷݇]»vá=ïyOÒ·S¶§Ÿ~;wîLú6ˆˆˆˆˆè ÷á`¶7ÈjqB$n ES‚1j_-d)”Q߯1à LaÊ@_÷z»s(%4ÍÚ8ó:U`Õ`4] cS¶íhÄŠ5Uóû ¹ŠH tŸÃÁ—pöô8¤‚1•‰óÞÄX¯é mkªÐ¼* =%bB/ñ˜PˆÆŒÈLx ŒSƒ0n&¦ †eæbÈ~12Oß """""š3]ÿ]ÔÏmÍ¡D…Z4M  ÏÇ)á—`ÀF­9¯|ñÆÇaÌâ(Ч€©@dý×,q¡iX¾a6Þ²m­óó EgžÃ±×Nb¤g8‚‰Ÿç0Q%nÜ=>cSüg^3ú:j0G Ó” ˸mÊùRçæÀ”`š¿œŸoѹ*Â0©¤o€ˆˆˆ×_}Ñ.\¸€'Ÿ|_ûÚ×ÐÓÓ“ôíÐÂ0 <ûì³xöÙg±}ûvìÚµ <ð*++“¾µ’öíÛ—ô-ÑU`Øšgñ×'Tëÿ”ý51e¬q¡ce ”ù§ µ¨U^¦»MŒÐsfƒ'!¥vñ‚0áª0N¦²*…Í7ÖcëÍM¨©O°ötÐì­^_ƒÕëk0Ø7…C¯àØ›ÃÈçM÷s•€öωóZÌ›8{tçOŒ¡iE­«³¨¨NV8a4H˜n›õªAÀTû ᫼—ÒúYTÛepœ5Òçg^BJ!üc¥ÖÙ9ì×fe""""¢ÅEöba˜àbÙ^ÇúƒïÕ…µzNxsºA%X VŒ)„1ÆÏ¡8Üa4¢%>P¨<“ªLcíõk°þ¦T7TŠE.¬çÀêmíX½­½gúqⵓ¸tâÓ‘ؽ4@J 0%„f¯Áeä¸D~ô4P1†TS´tµâu~œHMxóì÷Bþß“ØkaçÇÓšKxc…u$„·Š‡ÖêÙ¾&¤p¯ï?'ýçæ²À–½³KDDD—Ã0DDDäÚ»wï¢ Ã¼üòËØ³g¾÷½ï¡P($};t{ã7ðÐCáóŸÿ<~øa<úè£hooOú¶"±*-„¡Ù†a»øÂ(vŸiÃ,ˆ[â¿À¾ u?Ž/ð¼¤ÄÐ¥)ôœÉa|ØûÝƒæ ¿¨•`¼ö¦Ö lÛÑ„ ÛêJk¬J!4ê›2¸ýƒËqóo·âèþ!zu#Ãkƒ‹)aGG`BÀÚgcZ ‰¾³9ôÍ¡¶)ƒÖÕU¨mÎØ?,Þ÷HÙjã¾ ;èbýPI7¼Hõ| (#¼ ÝV@@Ø}ݹí9VÆîëí²®3‡Í:CƬ‡Ñe e/„¸fö¸¸k鸱w÷"4Îÿ%Εž0Q<s¬È&­Å^˜GaUijšk°î¦õhßÚŽTÆú%DÑàºúrj\Õ„[W5!7œÃéý§qæ3(LæÝ +¦dÑ 4§Ê - LU¢p~HDª¾Zu»€Q‚*ð‡Z ¼XÏ0„êà`XÆYW;ç`¯Éƒç Œ“s-  †aˆˆˆ+1—_¢ÓüB<àɤˆ®N<ð¾õ­o%}®B¡€gžy{öìÁK/½”ôíÐU*•JáþûïÇîÝ»qÇw$};>­­­èëëKú6ˆˆˆˆˆè ·&Ü\=³1NÀDvˆD 8ÕTÜPŠæ„Sümîx§]þyKÍ9ƒóFA¢ÿÜúÎæP˜ò?mVÓ4=„ÞñÚµØvk#VvÌð¢9“xûØ(½:ˆóoÃ4iJ˜¦„4a¿J˜f8˜”ÉêhiÏ¢qEšnÍ%¥„i¿ZïÓ96¥ÿ½”¥Ï™Þù$¾ño$rm¢™¸té¾øÅ/â–[nÁ½÷Þ›È=ìÝ»7‘ëÑÕG1€Æ2ÿ¢`=ÖÛ_£S|¯ôÓæõòÞþyá›/â:0 ƒ&0p~…)³äýƒ0«¯©Áõ;ѾÞÛ¬UI†’WQ©aûmM¸nG#NÅWp±{& €ˆ ÄŒä1:G¦JGÓÊ,ê—UX?w€=VدÒþù´ÞKHë§WH¨™1)­ÑÑc%a7 û:R áÌ( û>f¶_gÈ(¿/-)û ÄÌÃ0ö€p×˾v'Äuì,¨•źÚ/ê½NiäP8 ™Ë² вnˆ& qÃ3ÖqÃêV¬Ü¾ÍkÛÜNÑ(½6§Å!]“ź;¶`Í­qéÈYœã&†ÆSƒÐLHkÁ a H V»0!¡Cæ›P¼T€ÔÞ„^[TÝzëgÉý9¶VÕìu³ý^H· €»Ž¶ÎÙÿ8‹oa¯ž¬ÑÒ>'íÅ´³ð–öõfóàxÙ7ó1DDD´`†!"""Ÿ½{÷&†Y³fM"×%š­$f†!""""¢…4\fÆÛ/#” þ½4ba—ÈÐL äâÎQê?©\Cç&1Ô3UV€Å Ád*4\»½ÛnmB}S`2\°„tlªCǦ:ô]œÀWqüÐ07Q*ùœ‹ÇÇÐsj Ë+Ѱ¢© p/ö†ámÙ³çF µX{”°Œ´Ã.¾=;V€Æ ¾8AëœÕG:×’ÂŽÏ”g¨XvW"""""Z@RöBˆŽòDU¼E¶ˆ9e„Ú®ösÂ5¾`Œw,§zP¼9Uˆz«Œ[íÅî§V§±C1Z:…–kÛ±üºT5Õ †f°®¡EDÓкe Z7¯Æ`w/.¾q Ãݽ€0ÝóÂ4­PŠ& L@j`šfŒAÆà1hÕèõzÖýñ”¾§@À=vÃ2¾sJ°Eç=iÂZ_»sXknwá>‹§MH0 CDD´˜1 CDDD>ûöíKìÚ ÃÐR“äÏl’ÿ[%""""¢«O9U&|•Z î£q6 8›s _¼sjøñ¥1±R`l0Ás“È Êþ5M ¾9ënmƦíõÈTèP28A‹_S[%~ûžØñîVÞ7ˆƒ¯ "7Zœöûjç&0pn5M4¬¨@e]ÚM²ç_éU…üÁ§Œð”YÆ Ò8çÔ‡Û–c˜á-""""¢EiÆëÕP‹½ŽjV€ñ\àÃY‹G„kœs0FO¡8’ƒ(Ö¢Ñ 88á¡Ùý4;ãd*êªÐ¶mZ6¯Aª" (¹®¾’Ô®lEíÊVL ¡çÀ)ôé†Y(ÚA(@šÞòs%Í*˜£&ÌáKÙèõË¡U´*•]”ðŠ›m)lQÊBk½,”vkЫÃHHÙ?Ÿ]. ÑO’Õ&†¡¥¤¦¦‰\»§§çÎKäÚDDDDDtu*wc½/´¬Þ8Î9Oð „^ ôQC4Á@Œ4$†{¦0ta…)sF__ûú\¿£ k6Ôz„™MA‹\e6…›îhÅ ·µàÄá¼ùÊzÎåÊ;6ÇØ@™*õË+QÛ’vƒ.^•;ccœ}7RÂmó‚/JÀ}òmðœ·_gæÕaÊ °Ñ“ra˜’Uaü—påDö ŸóŽ¥9cèŒ1U¢Þ ¹hÊð‹Ó^³¢­ÛÖ¡¾c¹ûà‹b‘ ë+Yº¦ «Þ± ËoÞ„þ#Ýè=x ù‘q;$e&¼§>ø‚2)ȉÆ'€ô›HÕUA«é€óK+D„ž á;çT‡Q¯¨㬵çPFÊA,½JDD´˜1 CDDD>D>ŸG&“Yðk3 CKI’?¯I†Öˆˆˆˆˆèê4b¸åŒ¬ ãn¨ VoQΩ¡—ðií°Lh¼°qÆ&MŒ\˜ÄHorU\R) ×5àúMhl­`=tF¥¥G×l­Ã5[ëpél^À©·F˪”Ïè=9Žþ3u­¨m«€–Qª9S¸/¯: "ª¼ÂÞÐ#!}°•Òî/Âã¦û7>x™ˆˆˆˆh±0 ;}×’Ua <5Âyõ2j·Ç…4æT?Œ‘ 5€¬4M©=!S IDATB@Këh¸fš·­G¶©`(3ÄOWMGÓ–4n^‹Ñ3—ÐwèÆÎõZ?zš°6¢ /£°«Ç Pb¯ ÙZM©ºuZE ØâU˜Q«¼X¯p¾½ê0…hf_¦wþ>'"""º,†!"""Ÿ|>àæ›o^ðk¯\¹º®Ã0øèJZü†!""""¢«‰!Q¨ÓãûX“õB/nhÅ©qNØçb+ÆøÂ2þ@ÌÄp#§01\˜Ñ×R]—ƶ›±ùÆTTZ_ÐLB4tåh[™Åûî[…ñ÷qhï Þz}“Óÿ^Ê,J ]˜ÄÐÅIT5¤Q»¬Õº?øbïÀq«¼H% ¦TyJF­2#„Rmf†Õa†øÐZ""""¢EMÊ>±ºt'µj B‹éøª0¾"æBÂ?cd r²Ðê 4 Ð4¯ˆQSÕY4Úá½ÒzÈfÁ`²ímXÝÞ†©Á :ácÝ@¡ &„Ð aBƒ¦[ÙE•0‡$òCç Uå ×/‡H7yOPª¿ˆpu'ô¢ônˆ&²:LY•afPɉˆˆˆÁ0 …ìÛ·/‘0Œ®ëXµjΜ9³à×&š©$Ã0ûöíKìÚDDDDDtõ*†ñW…QB0j¨Åêè;§<¸ÖW)&¬½OÁFû§0zi …©™m´YÞ^…­·4¢cS»‡Âä^­Ná–wµâÆÛ[pâð0¾6ˆžÉéJ 7X@n°€L•Žš¶ ² ksŽóàYáp‹€Ò_QF(ç Ý}9þMyÕa†øœ""""¢EM¢Ó…aìì±pÃÁª/ÎëôUaÈ<ŠC§aŒÂ¨´Z%P£m4»Ý Çhȶ5¡aëzÔt¬´*~(²,%EÐkkÑzÛõhºñZ }ÇO£0:+c‡YìßÿH'¬@š)˜£µ0GFŠóÐëk g×xÕ\”PL¨ú  T‡‰8ï«ce¦ ÄH0 CDD´Ø1 CDDD!{÷îÅg?ûÙD®½f͆ahѸþúëñ…/|ûØÇBçX†ˆˆˆˆˆ®6ÃE™p{(Ì¢„`PFU/ £œþsÒ†ÎM`¼¿Ó(£® ¬ß\‡-77¢¹­€U†[u(ŠÀ†­õذµÏæphï Î-ça±Èç œž€–šDus5Ë+¬ŒRn/$#e°:L0@£î×)¯:Ì0Ã0DDDDD‹š”½ÎÿãM}zÄ4—™V…1&.Áè¯D¨ò‹¯ÊŒ7·Hé¨^· õ[Ö£¢¥`˜`…U*‡žBÝ–kP»y=ro_Àðᓘ¼ØgýœjÂú9ªHdšêÓT 'kQœ(@_o­§Ý_9ëh»Ê‹µ¦F :ŒóЖ@u)ÂA™¤ì½<Ÿ ͆aˆˆˆ($ÉöI ˆÍÍÍø«¿ú+<üðÃ8tèPdŸ¤~V‡††pòäÉD®MDDDDDW·¸js® ãl°‰:gÏo&F{òeßkUM ×noĵÛP™µÊÙHV¡X¶² ËVVal¤€·öâèaä'§O™˜E‰ÑKS¨Yž±ÿ·áU€±öå8¡ûUy¨mtu;3ƒê0CŹýDDDDDtÉé«Mx•`J^Ôê/ÓV…€H×bT ½ˆˆPŒž­Díæu¨ÙÔ=k=\¢Xäšf¯¢}9ÚÚ—#?0ŒÑÃ'1~ª²aZ|°ÃXÖrÙ®Þ’*Ø `Q^u'(WFisƒ21‹k‰a…ùlˆˆˆhö†!""¢7Þx†a@×õ¿öêÕÓ”ƒ&ºŒR©}ôQ|á _@cc#ÄV*Jêguß¾}‰\—ˆˆˆˆˆhذ+T(mî~÷‰›Âm‡Ó7®*ŒÝ Ô¹”s^@HW”zd®§ey%¶Ü؈µk¡iÖ“O«¥9¨ªIáæw¶bûmÍ8yx‡_Äð@é`––Ð4kótþw!½ê0îXçb«ÃH¥:Œtöÿ)aElÂ?Û&ç<Ñ¢fm²Ï#²ü*€Ð"ÚiCTàJ_oLTU-] !Æ|Õ_BUa4ìÚ•È^{ d:…â *´MG«¯CõÖ (ŒŒaêRŸý»!;~‰´¡ «Â- ÃQH.—Ñ#G°uëÖ¿6+ÃPR>øÁâþá°eË_{\&©ŸU†aˆˆˆˆˆ()E Œ@òì 7ãÛs£lÐq÷çDT~QúGƒrN´”€Y,½G¨©K`†æ—¦ TצËê›Êh^;ã­}®duõ¶öqaa”¹‚â*8Ñâ"e„X>¡¬‘£+¼ rÁtc¼v¡Wz¡j0j(füØÛ˜8{ Õ×]‹ÊŽUÞ|Ds EŒ:†‰ã§Ãô~¡ä,t…½þuÃ0°,2\ÆWý%.ôbAܘø¶,£‚%a"""Š´wï^†a誰qãFüýßÿ=>üáGž Ã!ÐÞÞ~¹o-ÒÞ½{¹.`m´wÂ0QÁ§Ý ÇÌ¡* ü×Ie4ä‹¥wú÷^œÄ¾{ë7×áÆw´ [Å?ƒÐÜðÚ‹=8wz¼¬þzFóí±q«&ͨ:Œ€€tƒ0ˆœ+¼_g¸8_7]>}ˆÃøÂ+‘^Ô¾ê˜`?ÿ±6H ‹•JU@­ãügæ {ý &NŸEvÛ&¤š.÷ÇBW*)1Õ}“o€œœ²Úìà•4aZÕP½Ÿq‘J¹}CÕa„´+Ê(A™éB/6!däƒ&¬+±2 ÑRÀ¿Q¤½{÷â÷~ï÷üº ÃÐB©««Ã_üÅ_`×®]ÈdbJ#: ³|ùò’c.'†aˆˆˆˆˆ(IÃà= jñbDÄigWÆyMUhÈçÊ+{qò­œ91†m77aóöh:Ÿ`K3WÈ›8¸wGÞšQ¥¡T…û¶@LE/øb¿z{y V‡qÚ½ê0ê>+D£be""""¢¥AÊ^/Ô∪æWáE ®8çcC2Ê m†ž‰Å8ÇÆèÆ_z魨ظZeÅeúTèJTÆÔ‘0FF!MiÿÉÁ(Áw,œ`‹€H§Ýß;ÅW‡Q‚2NÐŽ8•gX†ˆˆèŠÁ0 EJjÃ=Ã0t¹iš†|ý×¶¶¶iûG…a’ú9Íår8räH"×&"""""€!¥ê„»·Æ~ÚsãTy˜¶TUßž¤2ÚŒîµX0±ÿ¥>œ8<Œ›ÞÑ‚UÕ3OW/)SGFðÆ+ý˜œ˜yº$ÑàVvb«Ãxí”PŒt÷íØ!@i·žz+ý Ã-Ñí…»Xö8XP‡B2B „Ç(•6œÀKÊ÷” çb±ÿ9ózúQFfõJ¤ÛWBè3[§ÓÕÅœœBþÔzúà–GuŸúàý :Á÷Øî' ÒYeA¬„^ü‹ç@èÅ vÅ„^DL›/3`rÁ?3"""š9†aˆˆˆ(Ò믿éþq~á444 ¶¶£££ z]º:ÜyçØ³gn¾ùæ²Ç,¦0ÌþýûÿöÞä±­ËE‰b7Aâ$q ôY]Õ]U™oÿxïe¾ÌÊên\Õhðû‰heæË—Ge%#ô ¿Ïû"Š¢u¹6!„B!„&ðëh$]S“’Z¼¾±à"^½ÃÊ©0ðÏ/@±œ_d£”¬˜ÚQoâÛÿpÛvöâÎ7nÆàðú$}’Á…sK8ôÝó˜žZ^5 ¦Ó»”¬ï²Æt¿Ç%Àøý%þ.¯¿™ XÖÀ6 „B!dC õ €Rå{aÜ8YRc排LFbi“dНOrÌÞGîÇÉï=‹åùZ:yÆÿÓ'N¡9u¥];PØ÷¹ÏáCúÐE†!N:ÕÖ¾^2Ìz%6B!„Bˆ£¡Zô‰Ô‚¸Fa%©%iO$˜<&?aËAî=½óC»ð¡¼øÃùÜý"€(`êL_ÿ›“¸ñ–AìݰIï IJTkáÙC³8ñJQ¨“:¯F)Ám÷Ž`óhßøëöß Še•$»xé0i±Åô5í¦Ÿ+èqíÆ£1²K[b tÛäµs­¶[!„B!„\³hh}"cf3%¸de—Ì Úk»hI€*–¶¥Âýc›pçGÁ©‰pæÉçY‘!-ר¿V —¡u~¥Û z{®Îc"Špf“§¡Íx¼ 7†õSŠ (÷aÇwbdïvœýÞ³)AKÛÁnP2“@h¬œôâÌ~ŠŒ“^ì <–^VJš±hŸÜD!„kÊ0„BéÈÄÄe²¡éííÅÇ?þq|üãGOÏÅÿ{úôi´Zí•$”a!„B!¯eæB ¿à×Ôx \{g©e-M6aF+ùòŠðö÷ã¶{ñØßŸÁù3KéýÊìˆ2':öÒάáæ[‡±óÆþøþÈk“0ÔxåÅy¼üÂ<šÍ(–§D‹©¯ÉØ0;oêÛtF¶–ñƒ'¦sÏY,©ä¶é0Z´ùo a’´#Âä¤Ã¸zØûñEØB7ˆ2³áUzH„B!„«‚ÆyÆâmñ־ؒ¤·ÄÛ—k•dD Å@¢T*Œˆ Y­¡wlÛïÝ‘ý»qê»?ÄìK'½™,<)Æìu­Žå—^A0<„ÂèH!" r}--¡uf Ñb:м÷E{Ò¥¶Ü½£wÜ„b±€@jͦµ$ÇHФ ò~4Z!éÅ—^P›72"L§}4˜ C!„l(ÃB!¤#øÀ>Ðõë®—h@®/~ê§~ ð€ñññK>DZcÇrÛ)ÃB!„B^Ë̆ÀN _x‘5 /kh\?[¸S(çË0Õù&D€í»zñÞŸÛƒçÍàûßœB}±×^(e—"PJÐji¼ðÜ:QÅ͆1²¹|eÙL©ã¥ççP_l%bŠru7:^×)áàÃc¸q߀iAu®ÙvN PVˆ4­ã'°˜IlMaN[Ú‹¶)2qmŽí×I”Éœ2 !„B! =•\<9%n3+ñ€º=ýe%I¦½MD Šƒ€Ì!¸Û~j h%(õU°ó¡»1|ë8óijX>?—‘bÚŽªhÔj(Œ #ðî\Ïè0DxaáB5–`|Å.`&)سc÷Ü‚R_AÁüF£Ac¡†ä}´¿#M;@Nä—ÎI/HÄi=÷¾Æ 5ÞÄ’s¹ÏÅdB!dÃ@†B!™œœ\—ëR†!—ý÷Þ‹G}<ðÀeŸëZ’a“!„B!×s!: /f-Nv¯‹•Z’z·.qMR‡Ó.ÐKAªPÁQoÆIJi¸k7íÄä·§ðì¡ÙøJyI3Vf¨×B<óÔ46–±{Ï *=œÁöµÀbµ‰W^\ÀÜÌ2¢&=HJÙ„/¦TQ¸óàf¼î ›Þ;$æÝËR(óJ´öëuV[àÕêĉ1ke\Q˜k·%„B!„\ÃhØ‚{_zqË„7ˆo0/Éä´ÒDÍP±°`d˜z,'ÐJзe»ô f_9 ?x ÑrÃ<)FHhÍÎ#ªÕ †† *œxâºEkDÕE„óUè0L‹/J ‘]·ïHyó¶Üµ½[†P²"Œ(,/Ôá&E‰Óa‚(~ϵ—ãÍ ‘ßO"aL_ i?Îý7ä'ÃÔ,®×“%„BÈEB†B!Y¯ Ê0äRÃïþîïâç~îç TþlÁ˵$Ã>|Íf{‘ !„B!„t›Ù–W“Jx‘T­+XHú&mñ1q{"ÐøçŽeÛV()4—£ÔýTçš6ÑCÇ“}–Ê o|ëöß9Œ'¿5…ÓÇkV‚13‘Æ VŒ™›ià™§¦1vC/¶ÝЋ à ¶×#­f„“'ª˜:»„(ÔV‚Ñæ=ÓV€Q€Ò”Æž[‡pÏý[ÐÓ_0éBʾ7ʼ¸yÉ0…²JjpÌ6 { 'ʘÿ^\‹@‹Î$ƬM”»ÑÐÀbÔv;„B!„k­/ˆ™±´[wE¸Á3’e:~5u`»$#™s  –Ý—È,"Xž¯9A ”T¬îÞ†žm[1ûÂ1,¼|2‘<™&"Âáìt©Õß 8ñÄõ„n4-."jšD tï=M„­ ·‚¡ý7b`|A  V‚bÌöòB q‹{_‹n=#¯xe›ô$L›ô’ôObb¼}™6MuóqB!ä2¡ C!„ŽLMMáĉعsgW¯K†\ ¥R ¿ök¿†ßú­ßÂààà=wž ÓÓÓƒ-[¶\Ñ묅õ’Ó!„B!$ËR,iA/Ð&·$59ILJxIv›¥Ý™j÷šxòZS´S,dWwcŠD™"†Á‘Þúî8ulOï‚I‘±ŒK‹q‰1©³5ÌÍ.cÛ ½á ¶× ZÓç—pöt ­V%”­£±©0æ½0É-[·Up×›¶`ÓÖŠ‘`’º®¤¦G rd˜b9H’‘\:L,¹x2 \]Ž©ÖKxIf±õExÉ0í¢Ì\ËõB!„B6´ž†¨Q¤¤ =Ó„]¶¥¿´ 1È ÞvVœ š@èÆÑ¦½1_C´h»èÀ¬GÅÃv£²sóÏÃòùoÀdOºÕB8¿U.AÊ%ï¾É†$Š--C7š™T•äû7cUzoÜŽ=7 X,@©LŒM„ ” j45C{>'©¤P€›m"–^tžôï~<&bø."¸siw©T0LœØD!„ eB!„¬ÈÄÄD×e˜ñññ®^l\Þóž÷à _øn¾ùæ«rþ<f½ÞOÊ0„B!„k‰Ù–FoAµÉ-pé0^[®ð' ø“†&RM61Ƶ* ˜OßËÂ\3>^lÑ„Øb'ÅlïÃèö}~Gž™CØŠÒ’Cœ#çO-bvfcc½¨TøO)™ÅÅ&Ϋay9ŒSWœ£aE½=Üz÷vÞÔ¿þìÉ¿g@jÔk­¶ëË&­ÖÖëFtª6Gääkv¬(¯^G¬D£me!&e Y¦ÂB!„²!ѸÁh»À‚Ì2#»¤Ó_pÅ?OJ¬I‹ RÐБ'²@°´PódØTÒ&½#°RL©·‚á;÷aiz‹G#¬/#/!Æ­ëV :Š …$PWÿ¡’+Žn…Эi@ Ù1«÷jû}7 Ï”z* ‰øÒ&ÄfY¯ÖS2•_¤X\2Œ/¶dÛRóB$ûbi&žœH%ĸÁuê|€ÖL†!„B6üB!„¬Èää$~üǼ«×ܹs'”Rˆ"þ+>Éç¶ÛnÿøE¼ã︪×É“aÖ+¹hrrr]®K!„B!y̶€vÝ—[Òõ:«/pµ’­é‰‹zü‰eA©Ò^4Sošb ¥ã4ŽD^°JC{oÂŽûñâáYœ<¶h¤'ÅÄKSŒÑl†8uºŠþþF†ËX°³¡h¶"LÏ,¡¶ØDi+;ÙÚ­“u%(*Á®½Øs`…¢ÊÈ/þ_"ÄTç¹A,…²ÊH,NxñÓ^IŒñD™¸(Ǿÿ¾#V€ÑÞ10÷3×âïh„B!„lL¦ r+ò–d3ÕÖ–“/½ˆ·O¼}")( )ñ1"‚åÚ2Dk^ŒVF"ÐJiˆ ( @Ýyõ³Óhœ: DQ2öW)D‘FÅÙhJ‚13 %RA4T_/*;·£4Ô‡BAA)$òK`+å-­ Ó¬ÖaÞA 5 )öùèT Œq<é%þ½)›ÏJ‘/´¥É`2 !„²¡  C!„Y4Šb±ˆmÛ¶áÔ©S]¿6¹¶Á§?ýiüò/ÿ2 …«ÿe¯& C:t¨ë×%„B!„NÌ´+·ø©ºŒðb–’®ã±±÷M¤„b9h»—(Ô¨W›èí/šDOŠñRblC¹à¶×oÂÎ=ýxñ‡s˜›mØ~® #‘bDõ¥S-ô÷—Ð×SJVrÍ¡µFu±‰êbQh l (Ô¹ØdQÀض n¾u•Þ‚—$¹K÷žB€ÅùfîõKóŽšzœ4—ÕDWKdE™ä\I]Ž“fÜ1€ýo’B!„²á0)%5®N¯1uLZ˜ñÚâ'¼}îÜÅ"tÝ;§moTë( öÆi0*ð’a´@+@‰ £Aet‚¡A4ÏM¡53—œÏOŠQéu­ºRйF‘@A‚Ú‰0Q”‘_7 ·nFaó Š_R)C’l~»,/,Ún"¯ˆTi #½˜1§D—ö6_~A2¡…[Ï9È´žo „B¹f¡ C!„Y0Âeâ‚¿ôK¿„Ï|æ3ؼysW®Y­V133ÓÖ¾2ÌsÏ=‡z½ÞõëB!„BH'f[º]nqÒJ¦- c[3…:ñê)Ò…>ñ1Š•v0é0}Åt"Œòj~´“b9f`¨„»nÁÔÙ%¼úÒ<š(–bb B!>g­ÞB£¡¯RD©d}Yn¶°¸ÔBزߥұô"ÚÚh› Ó?TÄM{1´©¥²òK"½Ä)E1¦:—/ÃËAòþÇ59NÎJÒ\Ö$Ê´µåijØ¥‡L!„B¹¢h}ÁüŸ¨dð/$ÓæÆÉyÆî“ŽÇdÚ bÅ’Á|c¡Žžá>h¥­ô"ˆ¬c·ôÚ‚RlE0<„ÖÔDKKI*LÛŸ‚)fÑrƒR̵‚RP=e3SH¤!Qd&j°ï‰Žß; ­‚¡A¶Œ@ŠÅD~‘´ ¨¬cÚ\ûòB=ù1)–W4¤4D~z Ò"K[¢‹ÛŸaܘ<“&cÏã§Éè©0„BÈFƒ2 !„BVäĉ˜ššÂÖ­[»zÝ]»váñÇïê5ɵÉÃ?Œ/}éK¸ãŽ;ºzÝãÇ綯‡ ³^R!„B!„tb1P±ÿÊ©©“WÒÕúr‹«sDž‘Ì1È1”Ê*÷~æšØ¶ÓéXZ0ë(\±ƒ¶ŒV0¼©„³'ë8szÑÔI(ÄÉ0¢JL Qo4ÑŠB”‚cb® "­±Ôj¡F´•_¬d¥íºcJ%…Æû°u[‘`”“ž< Ë}ÿqR âwÊ-:É0•Jn[cêjì{¿fÇÊ.¾(ãª{ü…t>f¶•ÔýB!„B6Mh=‘MH ˆ³É/“aòÚ<1&ÞíyR? ¤Ò> X®Ö¬°  tdÅ3Æ1I0nV”iA¤T¹„â cˆª5„³óÐQ˜’b|ñFD€JA¥Œ¨VG´´tµ2Y }½r9N‚ÑnRX Æ}wZ zzŒ AÊ%ˆ L’Ëå—¬,cd˜ä7-Èâ÷y )0î7žd" ;ºY!M¦]¢1IM„BÙHP†!„BȪLNNâïxGW¯¹Â¹¶Ø³g>ÿùÏã½ï}ïº\ÿرc¹íëñnNNNvýš„B!„²³-m…¤ÅÔÎørKº ®‰TàÖ‘wL¦ÎG (õtH†™ky:NËÈ&ÁˆÀN´kÒ5â6‚@aûÎ^lÚZÁ™“‹˜›m@¬£Ä‰NŽ"h4ÐBA+(­h"¬„*B¨#@4”À|avRem‹`D À–­½ÛÞ‹BÑKÿqï¯BJŒ‰å—ŒãÞ›…¹FÛíAˆ¸6yµ›áXIG‹ÎÔñˆw R‰Fz…c ³-¾€„B!„ld´ž‚Ȧ5¤¼ ½´}ãeê8¿%ç<)2•t´×\š¯!PhDÚ Kƒ(T[ ZÃ,•FËX2P½=JQµŠ¨¶Ë0¹RŒR† úzÎÍC/··ÈÕCõ÷"è Б™d"ù®_ÈR50©T D+›$viª ž\$i…¼~K uO‚±×VÍX`I'ºÀޱӉ.Ù˜$i¦ƒãÇÌÄû­™ C!„l4(ÃB!dU&&&(îÑßßO~ò“øõ_ÿu”Ëåu»kI†a2 !„B!äZdºl÷ëq¼zWÔ IDAT³)©6WÈ#éNþbÅcDU¨@…éâÿ…ÙfR§¡ììŸ^L"ÅØ´å®–Ì 1©!ã»û±yK çÎÖÑh„V‚qçv‚„)Üц–*hÖêt¤¤¡ D:I€Q€è$F  •` ¯ˆ­c=¨Tó~Ä"”'½¤–É_ª¯'Æä%Ã+Aüþú"Œ©2ïc\Ÿ›P¤mRŒ WžÉÖòøÇ¸.3­«ýÀ !„B!W­Ï8`6ü”dš–dÜäkM‹ñ…)TiA¤œH"XZ¨[éÅ&ÂFv1©0Éz¤5e’aAƤÉDZ™1ŒÖP}}På2ÂZh…mRŒm)•PÛŠ¨VGë t‹ƒ«‰ê© °yR, &²â  ‘•P`~7Q€Tz z*€Rvlm–qòKО“ú›“I†©Ï×ì9{KC7.ö„—ä’tse¤ωܒê—ZÏe˜ C!„l<(ÃB!dUÖ£Ÿ2ÌkÁÏþìÏⳟý,¶oß¾Þ·ÓQ†ïê}h­ñÔSOuõš„B!„²fš¦°ÀÔÒ´§¿¤êmüô¸º?EFÚjs²Ç¸R%ÀÒbº fa¶“J„Q‰„àfMÒ@L”N§pˆ §·€ñÝýX˜obvvÉÔJxÉ0ffS$Å%@*@«„ËL鸚*‚ ˆ4EN‚1‰)‰c ÄJe…‘‘ zûŠP 9òKû_<óŠ}żsŠe+®«±iDfÂZûžIÊ‹n?&Ýæ'Ä )F²m9·B!„BÙ@èhÊw_<¡ÅÛÈl{í±ã¯KZž‰—n¿ZPNÆà"¨ÏÕbF)$ËÀkS‚@+h!ðe­íR-Ð6%AÕÛ4[ˆZ­øwÄ 1éu5Ðò@?ZÓ³h]˜6@rÅR…Ñ-úûŒÿfûûŒ¶)-Vº* ¥"¤˜ýžIË.ÙõÀ—ard°\uÉA:yI‹*H„•ËIñ' H93hÝ‚Ö3Ýþ:!„r™P†!„BȪLNNvýš”a^[ÜÿýxôÑGñÆ7¾q½o%&O†E¥Réê}=zsss]½&!„B!„¬…™&à iÒ"ŒŸþÒ.ÉHêo׿äã&‹-U–Ó÷2?ÛHa\ÍC,4˜ˆAZz‰÷¹¢eF mM…`` ˆÞÞ¨-™ôe ?âÄe®¥ ‚JY5å¹a“Å:W’BYPHÁ&E0U+*ITq‰0A ”Ðß_‚Rí"‹¿l—_ÖÒ¹2L©$õ6È,®“«Ù•³b!&}Lr¿–'©Ôq«À\‹ï!„B!™8"wv ¯}!fµ¾â#HÐBIΠ>_³‚‹À¸,þR) L2LJš ÒM‰‹ke3•‚.P"Ða˜Ü«/¨ôzat ›‡Ñ8uá ÿ½ôr¥PÛŠâÖÍÐ0I«©÷EÜvòÞIAA‚üÁµŠ¿«”ì¢léö¬ ãú5ëFN±ß»v¿Ó‹éûÒÞÒaråqcksLÜ'O”‘¤]GçáÞ !„²A  C!„Uy饗0??ÁÁÁ®]“2Ìkƒ;và÷~ï÷ðá85[ѵ@ž ³ïåz$3B!„BÈZXhi„”ÝÎKI×å䤿¤Ú:‹5~mF±´ÝKu®™ÔkÄRŒ+z°õ éÅM )’°KØ‚S¡”+zzЍ՛hEaF–H‹1ÅA¥¯€åj„ÅéЈä’ ‚¾ÍûŒ…:–^D™d¥›!åJ½=E‚l²K"²øË¼>ù}“}KµÂVÔv¯ÅJ'·IGÛwÍï’”—$5&®¹IÕå$ 1iqÆÜÛ\ËxA„B!„ Œ^†Ö  y |GÅ,ç´ÅëY9&ç\âõ 4yÂêó5/É™„A1&P´Ë2:"-ˆ”4 •N 1&Fˆ"@G€ ¼Á¼u+Æ”J¨ìÙ Ô±ôÊI„‹µË{Ö¯QJ[7¡´s;t¡m¢Vã±®<fÀ…bg˜p‚’(#¸ßBR²‹¿-^ŠP,¿ Õ?P@u¡ž–TìŸ{¼ù .Bnñe7@ÇJ}“ýZŸëÖ×A!„+eB!„¬ŠÖ“““xË[ÞÒµknÞ¼½½½¨ÕøcÖõH¥RÁoüÆoàŸøúúúÖûvr¡ C!„B!+£L74¶Uƒ%a<±%Sœ#¶£´µù"LZ¬ñ7Ê92ÌR-DØŠ qꋲ3ƒæ&ÁPæ>cQÁ“ :‘j@ Ðß[B«bÙÎb+ ñ„¨þ,§½#zG,œk¡:Ýâ䢉(``ký› Ð0ŒVöû„•at"Æ‚år€BAÙ´‰¿Q0ß·Ê—^Ú¿ÿÎ}D€ê|Ë+¤I(U”­«I–T}ã¤Rc2µ9Rcâÿu €i&B!„r}‚!nøëÆÅY &3Ø–íðËï+…ºåÆAf_«"\n"(ÌœJ $Ãh$Éñz"Ë(X”ii1ƒ%°Æ ¢¬ØFˆ–— ŠE R†‘<Ʀ(¨Á~ Ý}sç±xô¢F{Z'i§8ؾ›w!èïCj„‘¶†XñELB®¶ß¿n4 ÃÐH/. F¹ïÄK‡Q*‘_DR2L:-¦C»=fi¡nïÅ~í=©RQ)oðÖý™#Rko žw\öZCGSW÷Ë „BÈU2 !„BÖÄÄÄDWeÀˆÏ=÷\W¯I®>ïÿûñ¹Ï}7ÞxãzßJG´Ö8qâD[;eB!„BI3ÓÔØÖ£¼R›üôI2FJzñ;ûmi±ÆŸ ¶ØÓ.Ã@€…ùF6•™E¬4à’``ä‚DбI0Ê]EÇ’BZœ3“-Œ€P”(´¢‘h¨L2L"b˜ÂŽMã% Ž1}¢ú\x¥ýuMÿæFv”  Š4¢Ðˆ-JP:®k%PPP Jyu9bä—6±ÅûŽT²/eâï/9Ov ±IDh÷›J=^2ŒÎì÷–¤6ÇÊXðÖc!&`¼‰j3`¦uÕ¿B!„BHÐÑ9@n±[ù‹/ƈøíÉy’.’sÇÇúç(–¡—2‹I‡Jd­ T'ȸD%±4)³?R‰(ieÇ?Z)3.Ò¾#ˆ–—Fª¯R.'÷+ž8a×{oEÿ¶-¨¾| ¯œ2)'¤ \ÂÐþݨlߊÈJ0f\md˜D>æ;Ðõº• T’#íÛ"+Ë/ß.9rL`e˜ùzrÓâÒi4¤4œü´Ö˜¶zQÆkwUö¿AB!„l8(ÃB!dMLNNvýšããã”a®#îºë.<úè£]—ª.…3gΠÑh´µwý^Öã¿=B!„BY+ÓM[à‰-’»/iKíH[›¤jÜF¹¢R÷§uÌ6°iKÉ /N`Ȉ-.íEÛ⊸ÀFÛ¢—ãêA¬0c‹*bqFk$@ÔÒЈ +SØÂX¨°BF¥Oaç­½XœmáÜËKhÔ£Kè×1•þ£{*¨ô+D…F`å–€h²ß‡nA¤Òb‹$ïÄJBK›¼ä÷ñĘT’•fªóÍT±™£TV‰ô"HR‰/åŦÆÀÖèxÅ:N€‰‹q<©&©Ùq+fu†É0„B!„\Ä…øþX#o=g,ÒIžikϤÍH±'œ<#ÀÒBÃÛ†ìqß.6¥%È®ñ%Œ(sŒ“f Ú%Ã(»ÔÊŒ³¬ƒ(D8;].A B‚ 5¶Sv즔 (0rëMÚ½Óϼ„ÅÓç/ãÉ__ˆRÞ·ƒûvA‹B¹”UÐc¾¯ÐŽ£Fáü’é³–¾n¹0׊ûk[•S,P ˆ¢lŽ©³ñ_Yg´¸˜Ôë÷7éEðj{ÒçÌ5#„ta!„B¹.Ðz5úÓci £Ì’^Ï‘gRso¿mW¥AˆTaâNŹ0¨ÏÕmº L"LJŒI×(­#sL,Ëh›*#Љ‚VíBŒKˆIÒb4Dk´fæÎ/ <º…‘Á̤NŽ1ë7lÁÐŽ-˜~áÎLA¸Ü¼_Ɇ¡gd;Þ†ž±MC§Á(ûH5ÑÚŒYÃÍó3hLÏ›qm R¢KV|ÉÛÎ_‹³5“£tÙ$—£Y&Š+<¤¤™$9Ä 2&Æ1“NbvŠ—ãË20Rh“S?7ƒ¥© ߸#7ŽÅ¿ ¸V'Ȉ Œãž½çœÄ‘¯>…úLõ }KëËæ½Û±ïm÷ gda¤M ìã´ò‹›ì£µÜÄ…#'Q=;c¤– 0_ºK}q³uÄ)0¶mßXd‘tL AОøý$#Ï(AuÁO…Aò»L¡„Î"Ìe¶û#vq¿çDÐáÔú|¡„B¹l(ÃB!dÍt»0||<. ×&J)üÂ/ü~çw~[·n]ïÛ¹bäÉ0Ý–³¦¦¦pâĉ®^“B!„B.… ¶ ßÕӴ׿HjFZGj–Ú¸-9I[gÈ”*‰|ãê2æšV¬Ñ)qB[aE€6±ÅÌ~jï¿C lŒKòW3K1®  ˆ2‰4Í%S/ÔÑ?RÀèž *}'q¸¢;‹mIaÿ}C¸ñö~<óíYœ-Ì·¿ îÓ:~'c§EL¡ 3mö¹˜=¹ÒKòðà%ƈç±PÃdB!„B®/tt6GΘº#úJvÝ6ÐòÇ8‚Úüx‚‹Mù°ëA`Æ;A,Èø²ŒYFÊc'Ì„6¶Ä .¢ìRù&-Ĉ‰9ñâN¢(Âô‘X8~c·ïÆÐöMñøÍ‰0Ê[ßvë8¶íßW/~ãh5Zñ0¯ú6â¶GÞ€-ûn@QAÃK€qi0 ˆB`úèiL¿tÚüFaãsâ´+·$ÛÙýíÛN8J%¿¨´ìÒÖæÿɱ®­>_Ï|J;R.ö¦[ý±ôUX×áó½ „BeB!„\‡F³ÙìZòG¹\Æèè(Ξíð£YWzè!<ú裸ûî»×ûV®8ׂ ÃTB!„BÈFa¦¡i@¹)/SkÓžò’µ^IFÚÚÜ®rOÚ€¨¥Q¯·ÐÓxi/ùb tF˜±ý’´¤…™X°±òŒöÏ‹øüÚ¦É$âMrÕ馰y¼‚í{+¶@ÇMÄšˆ1¢€Þ¡þØVLŸ^ÆSÿ0™³KùjÖ±ÝÜõð& l." ÍŒµÐ°•:V±É0aSãÔ‹5ÌžnÆÌJ -iù%¿dúÀ‰1yÒ‹K”q}ã„/yF€ê|3uM÷–z‚Xp1 à¯Æˆ‘®âIi]³·Ë3H˜8EÆî[hi4£«õÍB!„BÖÍz @oþ€¹c:Œ×å"×¥P€n¥wjh,-ÔÑ3ЧºÄË@ÌoA&Y7Ë@ t¤Éè@ÌzD¢R‰/FˆAbshK0b“d’´ ­ÍzÇ¿ûfG‡°óî½( ÷™±¤Ø`·®UpË[ïÀ÷íó_y¯>y$3P»v)VŠ8ðö»qã›oD†ÊŠBÖi‰'_PÌž¾€SO¿ŒF½ ”}~âKÞ¶¬º(ØtÄé.Jo§—N~A[2Œ“ijóuÄ–7*–Ò@"«¸Ù :¤º¬ØîŸ¤S;4¢ð\7¿RB!„\a(ÃB!dÍ4 <óÌ3]•víÚEæc÷îÝøÜç>‡|àë}+W…¥¥%LMµÇ w[†™œœìêõ!„B!äR 50×ÔØ¤—ò’W›#®xÇkÈ“dÄkñÛJ=AJfqëÕ¹&zû ñ ²)‰Å[ ¬h ³ÂŒ=g,ÅXÁ%–*ÒI0NЉeÿZ6‘&é L½²„™“ ì8Ћ±Ý/¹žta䘭ã¼ãØ—-੯Nci1¼ü/¬ ôqï;6cǾ^“™g™¤Áè¸h' g_©ãÌ‘:¢H[ f¡¥ƒô’MqÁ }:öõdÚd%¨Î5skÉJ• V.Ç—“'½¤ëv<®-{>`º±A*·!„B!Ež… n2k–Z²rLFšé$Ó@ …²7IN¼8WCßp¯—ê’¤» Vn±‚Œ'ËDFà’abiFAé(–f¢œÄ(±â‹xi1 ÚŽ!}!&±?ÎÎâÙ¯|£ûnÀø={Q¨ãt±.%¦w¨÷ýˇ°ïÁ[1ùÿ>†ó/_»u"‚=o:€×½û>”ú*C0Òfn 稸$Q¥±<³ˆW¾ gç€@F̳„ýüíKµ¦íXb r_D2ò‹d¤é(ÍÔæëñ˜\ÇNŒ†*ÙÁ¯? nß\µ}MÐáµûB!du(ÃB!䢘˜˜èº óÄOtíz¤3½½½øÄ'>ßüÍßD¥RYïÛ¹jä¥ÂL†!„B!„•¸Ðˆ°¹¢ÚëlâMiÛסk[‹´u”+^2ŒTg›ÛÑ &ñµ­Ø‚Œ°K/€—öâÉ1ñG2i©}±㤗Œ0㮥Ü-JœHÓjDxù©œ{¥Ž=÷ `xk)%_¸‰[]áÈ-oÂÞ»pèk3xæÛ³ˆÂkS„(–îü‘Üöæaˆ¢ÐˆæsÙÔûœD3§xùЖk‘™˜V]ªÐ"úúrÑ}ÛÉO†I§™šqñ.9é0ÈÔóFÐ>Qmª«ë (ÃB!„r]b óoº²'ͼ}7¦Ôm`Ç?Am®nÒ]<ñ%²2ŒK‰Ç­A"¾ZA«/ËØ4—H Ûæ&¾(3~ŠÓbœí!6aÔ *YF •ÂgŸ;飧±ûÞ›±ýöqˆ¨d²OŽQJ°õ¦1¼ó7Þ‡W¿ÿžü³ï 6S½²Ïû2»åÜ÷¡†á[ Fi?0Î'Š–šxù‰#8ûüÉøÇ'´Ø™<±%»½61¦“ø’ˆ.ÙfÏS›«yŸÚ½€usß:Jˆ/z]:¤Â´÷×L†!„B64”a!„rQLLLàçþç»v½n ¤ÁOÿôOã÷ÿ÷±cÇŽõ¾«eB!„B¹x.4ô rKš8Fü6»ô rR ^?+ˆg#8ÙfaΉ Y±E *V´da±Å +IÚ‹[œ\£Ÿ7•“I‚qçM]KÁ“r‹3-ú‡ŒÞXÁ¾{Ð3Pð’Q\R‰ù+Uü±­¸íMCøÎ_Ná•g®¡böß7„ƒïÚ‚J_€(‚vì3‡-vrbLm¡‰#OÌcæl#‘`l" TZDY›Ð²6‘eµ¾’鋜}q2Œ×/(*EŽmÍ—v‰Å¾:ΊI¯OfÕ6¸"žd?eB!„B®O¢ð,RÁ«×ÛÐko÷–ª<„s™“›d—äâÄ#¸XAFû¢Œ ²û#­ã¥`Eÿx#͘t#Ä@´9¼Ä³îË2€V6-&+ËØþÍåŽ|ëœ~æUÜòÐíØ²{«¹IN«ìøN‚½oÚ=o¸‡þê <ý7O"l¶.õk»"ôoÀýÿò!ì~Ã>D‘‘`’‰‹V"“?x/÷´Z‘‘`âÁn¾KEâ?”ì¶Jm§$–`ÑEÖ(ÄØ„™E'ÃØß]Ì8»aŸ†gdtXúòËŠ11íÇGL†!„B64”aQï³ IDAT!„rQt»@Ÿ2Ìúrß}÷áÑGÅ›Þô¦õ¾•®qüøñÜön¾‹sss8zôh×®G!„B!—ËùeíÕÍHRZÓ¡'Õ3S—“'Óˆw°(”TAâIkÍiĈ Ê -N:A"7XaE€¸V"%Ì8aùb 2i2âê2âk9©Æ~º¶û°RŽ;¿=ÇÙ—ë˜zu 7Ý՛c%‘¸ex¬ŒwÿÒ8Ž=»ˆúog0}fù¾±+Ƕ›zñ–lÃèî ¢P#Š´ùÜVüqi0Jk4šŽ|ÇŸ[4ÏX!_V±bLv •®áY]dYYz‘T_É•_²×ª:áÊ{S]RQbžÎâ‗ÜÉi];0q™Ž­ï™nDWæ $„B!„\S$)ùòJþ¨Ù¯Ðž×G ½Ð8AÙŒ‹ìùgk&Æ%Â(m¥–´ ãÚ‚À2qšLJšèˆ<)&Ò‚ÐtÈ.ðRb´—#^,еBü$Q±,S½°€‰?{ c7oÇ­ßMý©‰'l@ ”‚ž"~èÜñö;ðØú^üÎóñm] å"î}ïAÜõžû A€(2£H´¥ÁˆÓ¯žÅ¿úTg!A_âôÉl»ýâíWyÛÉRb‘Å&‰MÿQ°â âý{/¼þI?Iï–‹³uOb±¨Ð,;9-~ûÅöÉY×á   „BÈÆ…2 !„B.ŠC‡!Š"(¥ºr½ñññ®\‡¤Ù¶m>ûÙÏâ#ùˆýÑóµC§d˜n¾‹O=õT)™FåJ€ÆR˜Ú·0×LI/RI,ÚJ)íI0‰°’J„qbK,ŸD+K8±E;a±P¡­8c¤šŒ0ã_KiˆD¡Æ‘ïÏãij5Üöà0Æô&·ÚWˆ"ì¾­ãÿËÍxúë3xüËg±\ ×öe]!ú‡‹xà}ÛpàCpñ/âD"mDóÙLÿWŸ©â¹ïΡÙÐPNl¹TI%%ÊÀe¼}+-ùç]YžqßïÂlÓJ\:î_êµ2Œ[Ä$À¤êl$™ä¸ã_Ì»”Ý­ïYli,u÷ë&„B!„t Wœ/ª’»5¹e¥öŽ}¤HÙ®› ³5›êbD(h±Å¦ê@#²L¤‘H9²LrOš‰€È&¼ˆV&=Ó¥Åh/-F+›´êË1V–Q’È4pi1 ÐÀ™#§pîÅÓ¸ùà>xËm(TJ±ã$ ±ËÁ±a¼ûã?‰Ó?<ޝýÑǹ—»“rë[_‡?ò#èˆÓ`û±EC‰‘`´µ™*žþ»§pæ¥3Fr gõ$?\̶xÛ.Æû!bÅ”—œ”˜@Úû¥dï$É0É‹ à œÝ,9®“s‘h¦ÂB!Ê0„B¹(jµžþyÜzë­]¹“aºK¹\ÆÇ>ö1|ò“ŸÄÀÀÀzßκ'ÃlÚ´ }}}]»‡n'0B!„BÈåÒŒ€¹¦ÆH)©¦‰ k<%Þë„o™&1brg®P²2Œ¿a¶‘’MVâ¶¶$'*øI0H¤ +¬À—i|±E!¾F"Ó 9O,Ť“fâûPVÜ ^mቿ9£‡ÊxýnƦmåTŠÄÎïÜýð88‚Çþâ žþæèèêN®P(*ÜûÏGqß#£(–¼ê[§+i›3u|O}uó¦à%%Á\º¤²j_OŒAjéý­ ã$ï@zßBœ “P®6ëG·×ã¬P»“—ïòj×™k\hp B!„B®_4¢ð‚ ùwòµÈ-¶çê˼1¶4ÛÚfj‰È”ֱРœø¢Mú‡A,Èø²Œ_"O†‰¥{žHÛ¯K|mÆÐ©´+É´¥Å8iF2i1&IF´ Š"¼ð­gqlò(îzçÝØsï^ã‚8DY1ÆŠãwîÆÏýŸ¿ˆ§ÿvßü㯡6»¸Ö‡QlßÞþ?¾Ûo݉Ц¬jx 0V$Ò h-5qø€#ßy`D¥Ns¹˜íìñ™t»/It1KJ~é(¾d™œc%X®.#Š¿°ƒph È+gµûòÊ©vo×Jx}¢eB!d£C†B!ÍÄÄe˜ëŸüÉŸÄç?ÿyìÝ»w½oe]É“aºýR†!„B!„lDÎ/G)å'É®V·ãù29ÇH¼ðÅ™ro€Å¹¤KœÚ¡Ð–Ä¢%I-Òb‹“b”DÈO‚-D±ZM®Ø? H%ÒÄ×râMJÎAê>œ8sþÄþû8‰=wàõoÛŒÞÁ‚:|SÇ®Wú‹xøgvá®ÅWÿóq{va•'~iÜò†¼åƒ;1¸¥—“.2qŸS°8ÓÄ“w'^Xô$˜•„–¼¿öd–ö¾S\°BŸX0²÷åDøé2*}­ÆRˆ–Ÿ‚d)U‚d#§§ Y[Œi3ŒÏ…åö{ „B!„\?èÖY ”÷ï“n|ÜIviïš¿;sÃcazѤ·(#´ør‹V@¤DqúK"È$ â'È6ÍÅG+AhÓ`’Ä@+Ý&Ä@K:-F…¥ÅeH Ü Ú›ÍÞ¼³hVÛ–•·ÅHNŸêÒ¶”ÜíX~‘t[6Efq¾ž80öòZU*¯ú ;·;I2æw™øñ8òä,¾þ'¯böÜ•ù=etW/þðnŒ€©Ðqz†WI"´ lE˜üê4žùö td¥’«)´¤ü Î}²×‚¿\!­&c¨.´r?C©'¶œÚHš;$À¸ý^ÍŽK€ét2&ÃB!„r}£]ZE›ô’ÊÒË ú×–—›h.· Vpña¬àb“aœØx’‹DÊŒÏci&(­ T”’f"mLˆDˆqf„$‰/¢Ì$ZCDåÈ2ˆ“abYƦ¼ú¢Í…cçñ×_üKì»ïf|ßA lê·ãA/!ÆŠ½ƒ=x×ÇÞûÿÅAüÍ—þÏ?öü%>` (xð§ÄCù+%#ÁD:l#Z›uÎ=‹Çþô1\89cR\¬Ð’,¸§ºX¡eå¥ZÓöŠi/’–`‚¸Í{7” :I4f¹8»ˆÄ†IƸRìË}~+N8±æ>YÝ:sß"!„B®E(ÃB!䢙œœìÚµDãããxñÅ»vÍ× ›6mÂg>ó|ô£E«ðáøñãmmÝ”ajµžþÒH%„B!„õâüR{Z…WG“[“#ÙN¹Ò»ÕROÔMxûªó- M„r ,žÄâ‹JCAe¤—xi…mÓdò’``Ód€(“H›HŸEg„/ 0rMú>Q@³á»sÏ>>‡7ýÄvÝ:à}÷“ç°ï #Øs÷0žøÛ3øî—O¢±ti3ØöñàûÇqç[GÍý¸ªóÑÌ'w5$8òä¾÷•),U[¶€ÆÜÿ•ZR"Ë*ÒK»üÒ¹Oû1Þ½)Au®™ûœÊ6&[VWâdD™Ôf‰&Eü¼ ç)ÃB!„r]µrÒ*.UtÉ##ÐH¡í†n<`q®†‘±¡$Ʀ»èˆœ xÉ0™¶@)è ÊH3Ú 0A,ÍBíI,’.":I|ÑFÚЩ{œ’¶$Ñ*–L´=/”B#ÁËOÅ~ìõ¸ç]÷ P(Ä%(•È1"‚Ñ›FñóÿÇÏã…ǞǗÿðË8÷ÊÔE=î×½õvüØÿônŒÜ° a¤ƒäv´ý-@‰`a¦ŠoýÉcxñû/*0i0fg,¸?Q®Ýþx Q&+άQŒi_¼”— §-'ù%÷X?f®žû¬Ty(y5¯ˆÓÍCëüû „BÈÆ2 !„B.šnÊ0€(Ã\9 …>úÑâÓŸþ46mÚ´Þ·sM155…z½ý¯nÊ0O?ý4ÂðÊÄlB!„BH7ñ ôe•*Î{e…­4F@XqÅ:ÕÙ†7‘$°x²‰—ÄâX´«±V‚h_œña”‘^K1.Éù”Ÿãî+‘cüDš”0#0É2iÜrþBûÇÎý}xà'·cx¬©‹yëAAáþ߉;Ã7ÿôUþÖ¹Õ¥ ‹ ¯ÿÑðæ÷ޣܫRLû94ΫãÛ~çO,¥’TbYEIR—ÿ™6¸}+-íòËêBK~ ÍJòŒÿ}å÷­Î5óü,”*þ$#ùvËj΋“®Vc)Ô¨µ(ÃB!„r=£Ãó0vŠº¼­Q QÅ„©`QsàÂL ›·[ÁÅK†Ñ&ýÃ$Á8AFÇÒLd÷GndÒÇ;iÆœ'ÒžÄ/ÕVf‰_ÁÅ%¾ˆÖvBŒ´ús’dZ¾óßÇ¿výÌ?Ã7ßÿœ_¢”YWÜöÐÜöà-øÖù6¾òïÿõ…¥Ÿëö›·á½ÿî'°ïà͈< &Nƒq¿I5[øî_<'þja&#«$Œ½±x@«)&Ó7ù ¶Uj;%µù’K,¿ä/ä—ìßÂl­íyi´ …^è(oÌ»–™$¼Þž$ÓI˜ÑyÒ!„B6”a!„rÑÌÎÎâèѣسgOW®×MázgË–-øú׿ŽÛo¿}½oåšäرc¹íÝ|'&&ºv-B!„B¹’,‡ M¡RNµMžAíâõÉë&ñÿ˜¾¥žÀß/æši‰%/‰¥SŒ­ Œ°â„™”(‘V:&Áè¬0ƒäšJ{R.ÚirÅŽ?·ˆÿúû/âö7ãà#ÛPê- –a2}Ãe<òoöãî·ïÀWÿÓK8õâüJ_#öܽ ?òá½Ø´­‚8ò%E"ÆÔf›xü˧ñÂĬ­§¹Œ„OIDOžYEhÉ H«Ë/‰ô‚úø}æ›íXE+ÃhW›³BN\„#öËtôÍ+ع°L†B!„ëŸQx*ØqåN¹Òx¼4 ÑÖ^­QŦ±hD@im¥›£J+( 2=Æ—f"•ìO¤#ÈD‘x‹‘^ÚÓb¬$§Å$B 42i1^¢ <ÑFk›0cúÍ_À_þá—qè+;ñö_|¶ïƒK†QVFQJˆ@• xÛ¿~+ÞôÞûðå/ý-¾õÿ<Þ&oô õâ={'üà›„vööDiˆžûösøúÿýMÌO/š$˜”cÅém±ãÔœíT:Œ·mEqâL¼,%–Uìw*°R ¬Ø‚ôþ ½(ä 2‚” (A5G†òÚò^ä+3.ŽZg®Èy!„²¾P†!„BÈ%111Af²eËŠ0+@†B!„B.óˆÊé™ksSb$w5ÓGVÜ_ªÞ¾Dˆ©Î6!ÐiaE[ae¥$'¬¸;ðÅ–Xp±ç0×H‹-°)1€9G^Œ^Lét6ÕFˆ²‰4‘ÆÓ_?¾7ƒƒï¹·?°5y’ç—X"Û÷âÃÿë=øácçð?9ŠêLjÚ_lÚÞ‹‡æfÜt׈mѶ¾D·aSã©<‹'ÿþ,Âfd%˜µ$´¬,©¬˜Ì’I—•fÜrµt™vùe%Á&é¯Ou¶™yÛ€bÉ)¹â§Ô£òÖ×T¯³™æür´ÊI!„B!׺u(­Q†YAtY ª<à\ÛIçg½T#=VDÑA 2FvÑVtD± cE · ¬ cfò¤™Ð&¹ÁÅȺ-ÕÅ&¾(?-Æ%ÉH,ºˆÖТ æ›“È2é$™WÇø·ÿ¯än¼í_¿#½0®ˆ'‹XÙcpóþÕÿöA<ü¯ÄŸüöŸãùï¾(¼õÃà'>öz{Ea¤c§Ç¥Á¸±è™—Îâ+ÿþpìÙ“Fj ´§¶È•ÛN%ƨ¶í¬°²ZÒK'¾d¤™ô¹œ,“ c/­û[G»¿ßmcäË—b˜ C!„\P†!„BÈ%199‰÷¿ÿý]¹eÒ-Ž?žÛÞÍwprr²k×"„B!„+Í…¥{»s-¥…²BêDN`a¶™–0”/Å8Á!-½ia%I„Ɉ-:9ožØ‚¬°â e4RMZÎI%ÒdÄĉ0NΑ8‘Æ]ci1Ä×þó1úúÞò¡ÝØyË R•P~Q”Üþà6Ürß(ÿËcxâ¯_EPTxà}7áõïØ À$•¸8;Ixirßú³¨Î4LŽº¡%# \l2˪}3‚ŒK–If:Ë8‰üҹϬ+ÌI¬'e­T‚“ÞßÞ{mÇ›ÿ=ß`2 !„B!¯¢Ö«w»2Hè:€þTóüt A`“Hùb‹¶K›b׃ÐÚ$„è I“I/,&&+ÍDÖI_$–]Ò‰/HÉ1¢•üBÙ4NíÉ2bÅÿ¼öYÑ& ñý¿šÀ3_;Œ‡?ò<ðþƒ‚ç“X·Ä‰7¾n'þç?ý·˜ø»§±mÏVܰo;"­¹4û;‚öD˜ÅÙEüÝý#&¾ò4´²é.mi-ê2¶ÕêÛâ]O©t¢‹äÈ/yâK/Ì9Ç™cæg½÷Oì÷áJH.kE3†B¹.  C!„K¢›é”aH·ÈK†) ؾ}{W®ßl6qøðá®\‹B!„B®ç—W.XÈM‰Ií_yOv¹ ¾Ø‚ @€ùÙF¾P¢² ,žÌ’VÚ„™XXh{޶$3mœ8“#¶x‰5Úž#u-'îØ£µ“1¼ûȤÚ8qçÂÉ:þìóÏbï=›ðÐwcpK’#öºfY,ðÏ>¸w=¼År€ž¢­ÐÑÊN4Ο¬áò NYð$˜ËZòþVJfiïÓ¹ï 4Aq⌗<“¹¦dªsÍÌ;©Qªt­< pÉ0„B!„¼&ÐÍn§V,#+ÃÌM/¦d$B‹¶©.ZÃ$Â(On‰¥_–É“ftŽ4#h9éE+3vÓ:#±h;i„ZSâK,Ë´KbQ&>Ö¦ÒÔ«Ëøëÿý+xâÿ{?ñëïÂmî7 1v,œ•@Þøî»Ì÷¦„ˆ˜dl©µB|ã¿<†øãob¹Þ4ŒY.=FålËÅmK’â’—î’Ÿúbd—X~‘v)&O–Q"[!–³“Mº&ÂD‹ÐÑBW®E!„« eB!„\”aÈõHž ³sçN(¥ºrýÇ£ÑèÿL!„B!€©«Q¨/™¥GÉÉ0 ³ÍD:ñ’XÚ’`€L‹-TÉÈ&È+‰ôâ_×cÜyÒ‰4m‰09‰4m×Râ%Á µÏ}ó9’¶'¦ñò¡¼þŸïÀl'Šå‚pjÝ3ÞóÕþºÙXª¶ðØ_¼ŠÃÿd ±LMžÐ²IåÊ-kIqÉ^ ™åŠâŽcQƼ,ÕùVæA!kÕ÷÷jyòkDóM&ÃB!„òZ ψ€µäÃØô‘ËA«fÛ)æ§cI" ÊÉ.þº†edr¤™(0i2)i&uNO Ñ@äd{žlª 4¼”˜¬,““øâb|qÆK’ÑÐmçœ}å<þèWÿ#nðþÅ¿{¶Ý´55†ô%h ŠÌµu*8üÍçðçøW8b”—㥴XÁVºißV9û%³ÿâ·;Ê.)ə䗴,YyöØä|ézî;(…bç÷{mkF·º-›B!äjA†B!—ĹsçpòäIìØ±ãª_k||üª_ƒ _†ùÿÙ{óhKŽúÎó‘o+©´ƒ´ÁBB kÐØ,>Ø pLÓ0î±#› ^›Ö€ ¶9Cc›eÀƒ146j í–eK4Fì;I …§½ÚKK-oß—{3~óGDdFDFÞ{_Õ{¯T¯¾N*3###ãæwy+>ùÝNk;%3B!„BÙ –»‚å®`÷ð€³ps²ÎÈXóå ³Z, ¤˜œlâ“X² ,ÊKX2‰0°"¡0ã¯UI1öXøfØZΉÅèZ^ÎI>CÝN(çJ€²+øþ??ŒÛ¯9€ŸyíÓñìÿí {½êž{£Áü‘x"‰)[¾þ(¾ÿŽX[)«4ÛçZ‰U´•MZ6$²4ä—ÞN|NØ·øØÒ| 1õ=ò·37a/ï}¢üñðŽ(ÌôK^"„B!„ì ¤ éNB ?i[.§2¡ó³+Pp©!>½%Hr1N€1ZÕé/-ÒLx~%Íø²Hšq2Œ ’_\BLã$q’LFbñõê´'Ɉ@!H‹û\/A½\*ÍßÙƒ^ûC¼ô?¼¯zë+°û¤]Õ³¦V@áúZ§É ‚ý÷À?þÙUØsý=€. Š¶—fTi•Sí§"K*ÊšÓ_‚„—B%‰1u"L^šIÒaɦР‹³ËÙ1¨‡`¤nÎs±éîß”v!„rä¡ C!„Cf|||[d˜ãŽ;§v¦¦¦¶üZäØ&'Ãl§Œ5>>¾m×"„B!„­brÕ`÷ð&lVV0²«ù†ÜκÁêrc»ŠZ,ñB MbQÚÚµt‚@Š X`e“èX ¬(4Å–êZ®œØR‹7¶\" ’ÏÐwB9ǵ±4»Žùä1þÕÇðsÿáœyöɈ $/ÄH´ýàmÓøæe÷bfÿ²{Klo¥)«ÄrL(ÍTi+m¯Ð’O¡é%Ïøº*+¿¤×\˜ë g­ŒôK†ñ÷y&ìL®nAò!„B!äq‹é@q82L˜Ó'=F¯Â”KóË8þ¤ãjÙEj¹Á .E ÈØµTҌѵ cªó½4ÓhBi¦$¿Ø•*ñ%HuiJ,^– ÓbÄ%̤i1^‚iKE›²,ñ•K¿‰ï}á&üûK^…Ÿ}ÝOCkû¤nÄ&Ê[ç–ð…ü+¾ñ߯µOƒºè#§4e—HŠ‰Ä˜P¢‰ë¶J6-û‘°Ò"¾4Å–ü’«S$íh­°Ð"èáÝ}óà„/§È½¨B:”a!„Âþk!„Bv:Û™b±éäØd}}û÷7ôb2 !„B!„lŒ‰µí›°?Ú""øt˜¬HÌÉJ^ÜhˆþxÜF,mmde\u½JäÐù6ªkE}l¹VÐþc÷ÎãïÞs3¾üÉ;±8»Öz?gö/áü¿·ás¼Óû–Uš‚ÉÀ -™t¤òLI¥WŠKÛwŸ—_ò}ë‹sëÈM¾L†Ù&·ño‹B!„rä1á„ýÍ Š”æ¶mV`af…“|Jˆß?ª$­ µŽ“EŠZŒh,€Q·i¥µ{.sâH(zx9D× *V±Ò ´—Mü¹¡0â·ëcʵ›¶UÕ®=?¹€ÏþÁåøÐ>1‚²”F F0ñÈþàg߇¯}ö+ÜôLiÑì+wÂÏèöUã?‡¯¯{¯U’Úb›P(4Üw‚ä;bÑD˜"h'* ¾Û…™œ #У'o|(âß“a!„eB!„2”aÈNâ‘G±?F&lר3ÆàÖ[oÝ–kB!„BÈV²åéÁ³[›ˆ°0×±bE› ÑH'i—^ZSCú%œ„²G¿6ÚÄ–@é)î4ú‘H7€w~g?>ýŽïÙ𕵬,®ãÓïø>îŸ\hiq”Tú&³b ’uó¾õZzõ½™,×Y˜_‘ìGáðØ ÿÔÖgv΀“w¦(ÃB!„rL!}~«G¥–í ¢FŽÏ–ÏM/7S@B¹¥ÐÉå—¦,“IÉ 3HD”¦àRÉàRI,*h*‘ÄŸ“¶•m)Å‹6ŽLÀÔ2LiPÁâÌ2g–LiQßW-ÇÃÏ쯥گÊ*=S]ü~%¾ ùÞbY¦>ÏË2pçÚãó‘ ã­¬*þ§_ºKJÿ:þZ«r¶ƒ„B9*:Ò „BÈÑËøøø¶]‹2 ÙjöîÝ›-ß®±w÷Ýwcy9 M!„B!G‘a€:ôº­2ÌLÇŠ ZA¹•H%Gˆ'›Ø‰ʵo¥‰¥­ þ˜‚Rqm(׊½†=ɾ’J R÷G#¸FØÛ^ÕAж¿–í‡P”)‰®%tÖJ;CÄh‡é”]³ùBK —N2KkÝ@ŒñÉ2uÂL»ôßÃÞ}‡g×ãL CÃ:;á¦ß$œ~stÒã]f×7óUЄB!„Ç;¦{ )q„â.ýƒræ9,jNÛôÈ©)ëU IDATI0Xlôanz …V­ìû´‚'6 Z¤&•ôR¸ºZlʈÁù… åÚ²ÇMØNh©Û4¢!"P¢ ZC‰@DÛç`Ñî㈕W’cJÑåÛÐ " 'ˆØNÙçH®’ú:JCiT /Ю¾±¿}”FÜóŸTwÖÿL¤¸„âΦïëæ¾Rù}'öD‰.*#¿¨X„i•™Tp^pNÑãœù饯8¬Úõ¦J/ï;¢Ä%B!„õ0†B!‡ÌÞ½{155µ-×¢ C¶š#-ÃlgÒ!„B!„l% ÁZ¹‰“ö%» uoiMÞ„»0»Þ”¢$‘þI0=“Xú´Jëõ3¢62I{‰ Ò’Hã'8U7I’ÅÝÄ#"´uIqÙ°ÐÜèä%/ËÍw s`j“¥MÆj¿‡ÃÔšÙ¬¦!„B!G ²)§Ü ý×Ù¶jèx@ºòÙ©¥†ÔÐL‚± !Å"„. ŸJ’œ¶n{#Ll SWª”˜pÝ7ñ%L‹ E•¹N¦]e%$SºTã–R`¼d¤ês³ûiâË@û:³¯6¶¯\ZKô=Åé.õì«ø;o¤È´È2© 37UË0öçÐé?®rK¦¼ío%(§ C!„ì,(ÃB!ä°Ø® ü”aÈVóðÃgË)ÃB!„BÈÆiK‡‘>ÓùÛ¶ÑUÿ6Öy— “9B "#OèP–h3êä‘ÃMIÅ–XXqíô‘7tŸ6ì$œ1%#ÎÔ÷³¹„m¦ëA$•-ͺƒ$´4%•¶ïH%uѧ?±(ƒÆ½X˜ “aìýÕ}FçÆÆr/&VËC:B!„rt“NÜŘ6IæPÓ5DÂÄ[avr1]Ð*¸TÂC‘fŠTžÁ@ÒLئ—9¼ˆRK,ãßtÉ2©$¨$B ¼p£ƒöCY&iK(©$¿#•ˆÓHiÑÁ¾ ûàÛíµŸ®õ!í7d•“W|©,“‘fT\^äê)…¹é¥ú§‡Mî=4¹e£eB!dGA†B!‡e²SÈ%ÜtÒI8ñÄ·åú”a!„B!;‰6f++‚9vkaf=IHé“¢RɉXÒ/ Æ·ÑKØØ@šLkªÊ i2™6ªÏˆ; "ˆÿg XšI>OS©4îóa¤¸dE–þÒKôyƒï³×µ6Rw~¶“Œ²“aÐŽÎ Ç'×¶ïoŠB!„òøA:ûüV²Nê Æô­£ÖÇf&—ò‰0E3%¤(ò2Ë¡J3Ṫ’XjA¤N=©“R²‰/!Æ×Óbœ8â¶•O¥ %›c` ’þ©¸ŸÏ‘]râK*Ê *Âèh¿ñ½èø{iÜÿÜ9UY*¿äe/ˬ,® ìf^ö04” ÊüXM“ûÖÉ”›.eB!d'1Ô¿ !„BH;ãããÛrÊ0d«ÉÉ0Û9în¹å–m»!„B!„l5¡ #((¿¨`oƈJµw'ŒXš÷vlý¹éu'’XÁC´@ ¢2»F%‹h(I)(%v ÄuÉ•Uk+ˆ%AY$ØH]€¸zѵÜ5%Aß|?´¸Oˆª¢$èOÐ(Àµ}fíÚ­ct¢›™—U6 ©dUê´•MLqXhA¦® ®ŠêvÖ«Ëex«†Ç|*Qªc5·/¸E&)©ÇܶÉÕÃxí-!„B!ä¨%J† Ý3³}¾³Ï}pÏ‚Uyø>H¹.š™\¬¤S(hqòƒ_»²BÛ¤”B+Ha·EÛçqe·0N¸0Õù€•´iËl[pç º¢ëþj % ¥ÝZàžÿ5DJÛ5ÄI,¶Sî]»¦âÛR¾-eëiW_Üï¢ìó¼kWA£4bŸåUýµ‘d•P‚©Þ`Q?\ët?‘jZ÷uf_Uû©d4øÒ&δ”mí ó3ËÁ«QC#®(}0–öòp-iy~²éNB!;Ê0„B9,¶+ÍâŒ3ÎÀðð0:NÿÊ„GR†¹ÿþû1;;»-×"„B!„í ‘ “-9Á¥1'=ŽÌÜ#»tuܳ4ߘZiÈ&n2E(”ˆ;÷ĵ¡¤)Îäd/ňVìùVh‰„™PØÐÔ‰…•ºþ0ãÚÓZÁ@ªû‰;¾?®f?š³Aìì/¿4“ -¡£TÉ2Á±-ZzÉ=ͺqÅÙµj†2ËÈhÜ=4çäô¢íÌá¶k­ÓëL†!„B!äXD'Å"óBЍ©¤ß°œúô=­»0ۉǠ»]#cEs®Y4~¥:¶±1Ÿ0™&-B!„BŽ)¤³ÏoÅëT@R­Wyn{dWRhÌN.RJ º©P†,S ñv$¹$ÇE·å%¦Ä’b*Y$\¼£ZÚ å•®ƒc¥‘†cT–ï·¤¼(ÿ9ÃúI:L&]&JtQíBLzßuT¾n(=5Ž;Y¦Ð sSKÕ3u=;PC»ã¡ õ>R×€² 0”a!„eB!„6”aÈÑN.ؾ1·]C„B!„²L´Là—h‚+kTjÛmÎè+šÅÌO¯G²ÉÀ)*™£!”¤ÂL*ΤÂLÚœt“Š-iƒ´‰;-B Vˆ Ùt¡¥]ô–^Chñ÷¡ ŠKÜäÛk¶k—…™õz>M0ÖFFUvŒ‡#5»¹yjýÆ>@†B!„cSÉ0è/ºdžóç5…=|B"Xf¦3D-84—Z”)t‹tQIubItNÒfx\iZ|I%–$]E©Xi1AzK6S'ʤ¢MœØR–Æ 1né–¥1AÂvÙ×ì«Þû*l×îk—¬ÓV|ºKFQíßa«H£â:i½Ù©E¤×"ËñPLGjúrŠÃØ–.eB!d§1t¤;@!„£ŸíJµxêSŸº-×!Çm2Ìv9&ÃB!„Bv"¡ #”ˆ71še'&ø*®(8ˆT}€“a€èÍ¢`~¦öD;ñE ( Ê”Ôu5((I)(%n2Œ¸¾eÊ'«À&•@A¤L¢~hÀöCÄžÛ¸–¶TAªûõC×·A‰‚¸6ª~T×°7V)@¼ô‘™a¢ qzLKNo¡¥MRÙHÝÁ%•Üùõ9½ûn¿§Œ Ê3®½ù™:Æß¹¡wƒªD˜¤BÏT$ÉÍ/‹_Ì\5'˜X£ C!„BȱŒM³HŠ«èôa9X÷,OžÁÐ#'¡Ä$ Eý|-ÀÌÄ" ­ …²BV0$ÁjÉÂo ªsêmû ,ºnG +M®Û´;.A;]Qîs8éCÄ . %€hmŸÍµ]C‚ú¢ío¢ì9Õ¹QJÞ£l=ˆ¶÷S+(ÑN†ûîÖ… d/â„û•“î«`?]§ÇûíÛuCbR±ÌI1Nš)‚ýxo'”˜ZSc´ÂìäR0²ý}[¯·3i.‡]^/aºùÓ#„BÈQeB!„6Û5‘ŸÉ0d«8’É0>ú(<¸å×!„B!„íæàŠMñ“l€@p æä‡ò“s‚£ðN‡.€bXCŒÔ2sÓë‘Øâ%ñ2D ›@baF”X!Â5—g"ÙâæÅrLu}÷yšâLЩ˲×ê#ç„ÒKÚ/ç(<û*áð\ß·P©—(m¥UdA³½>BKS~@h‰®×ûZ®ë>çüÌ:â&NÙq72ZÄÃ5›½L˜æÏ'ÆTG˜¢ C!„BÈ1t÷7Ä•CÚ©^È 2¾‚.Yp¼¿2Áô„K† ˜BD{¹N”±Û¦P(²ÒŒd¤+^HpN(ÝTòM(ȸµm».ÑNb©¤UÉ.®£6ñEÉ1J´û À 1Vvñ²Œrç„íÖ¢ ”Fiì îXi$›Ò¢‚D™ÁD—^¢L¯}í÷Kti$¸¨fº,_² 3>&•eìzfb!­ìØPp ÿ(6òdW¦{r'B!äh@éB!äègÏž=XYYÙòëP†![ÅÃ?Ü(+ŠO~ò“·üÚL…!„B!„ìTfÖ JIæ'dæ/T‡ê(Œf¸F0ÿÁ®ãFFu• #"æ§ÖjÁA‡sP2òƒ“b #•Bz‰±’M?IÚh¹$’6¼€’´‹Ö62×òŸSŒ›Ø.æÐ$•$Q%eú¤ËÔíö—^ZÒÏÞ£Þ2N¾®]æ¦×ƒ!lÚð˜nŽådÞN(Æ4^J›œëÇuú·1³fÐ¥ C!„BÈ1” ³„ÃJËH62Ï(v{Õ¶cêÀŠ"#RdR@Rá¢H—"–/z¶l‡ç.½D¹^2±†}HÕ^ÑU4ÅÖóçk÷<«ë:Ú%º4Úò‚ P–S J#Õ¶1’‘UB F×}û¡TÐÿA÷uf¿îc[RKußsâËß«?·!Ò´´Sh…²4Xœ_E:íËFrc1ÝnçñžoC:ûA!„eB!„6eYâöÛoßòëP†![E.æÌ3ÏÄÐÐÖ)Žoù5!„B!äH`˜\q³ø3ónlqó@¾^óH8×ax¬p"A]gvj½);蜑VÚê…²GNàЃµÑ&¶ÄrI‹ÀÊ&mItŒ`’EúH*‡(´D¢ ‚uÿt™vIeãBKÚ¯¸nÏ……ÙNðÖZ7æ|2LFâªFkcxKt¬mÀ‹« L2†B!„7‘¿- cA&<ÞV@ЩwÝ2upòrK ªÄi!h•*Òd‘l›•dŒ`¡«}/~ä%–$5ÅK(^Ž‰Ö ªEˆiŠ6ö˜@£ D˜Òº¥À´¦´Tm«–}ö_Û}•쇟/Zëh_UŠKkQqJKó;òé.ü’È2=å—TœIΟZŠ­‹CÃÑ8”èºO*LVêÊÿ Ê0„BÈŽ„2 !„B6…íH·  C¶Šœ ³]ãÉ0„B!„ÌĪÈJ*"͉ Õ4…`ÂC.)£)Øã#£º>æ–¹i;§§l¢{ˆ½„•èx]ÖH„é%¬´´É=iJ/-‚¢6‚sýŒ¦té!…Äi5@^NÉ¥¸ ²b ¢5ú߃„–°N6µ'éW]Way¡ƒ²+Aò]FÆŠÆøm³¾ò/«M¯9Æÿ B!„BŽmLgŸÛjKÅšÐÉvZ–{XÑ&¬@03¹ôH ©E™J˜(t6 ¦)Í´´Š2E*É 8?D‹ÎH,^: 䥓sT”6‰,‘4£Pƒni¬ S JcPŠÔ“Súï§i1µèSÕÊ{' †ú +ñ÷Ê2öÞ'MFª)T¸ßlGk…¹é%û› zVÃcî™»ù@-A½ê7#¿-!zÐnþ}åRý B!d'A†B!›ÂvLè?á„pòÉ'oùuȱeB!„BÙ&VËz§%ÆK/cù—ÔF ù²‘±¢‘ܱ¶Rbu¹D3%$#Çô’:œ¨¶6z¥¸ÂJSÜ´$]%'}èµ!"nЏ·®ÚI%‡%´4ä”ÞÉ,í’JÛ÷TÆZ”I“vòBKëwÛ·.0?³žÂ#£º9·&¬ãE®–qíLö‘o›2 !„B!pÉ0@"TGûŠõÉ¡H¸4¨¢¨;ÜÒét17³ YÁ¥)¥)F¤Ç3¢KfòHiÆ_³@Z$–*M%”eêzáùi’L%ÍäD ’`ºe-ŘR)-ý÷õD`_«øsøã™´™(•EÅ÷½Ÿ ÕSíõZÛQh¶¥f&ƒqX<=´;»Ï’ŽgiŒçz[`ºÓ?B!„ì(ÃB!dSØ® ýL‡!›M·ÛÅc=Ö(ߎ±699‰‡~x˯C!„B!GŠƒ«&û’Z‰&7䎥eõ¤ˆÆ©.¥£)#sÓVdH“`┓D¨È¦´·QI‘”Ñ”/´ÚhVЧ å&”4Ódbé:n·Ñ_7ñÄÿÏïoThiOféqí†ü2ˆ¬¢¢ußÏž~ŸÉ÷:p{ ˜ŸéòP 3<ªƒñNÚÉaÉëLAœ…L®6ߌK!„B9ö0ýÍIÿ• P׫«Hôì]?WgÄ‚ -UŒ&W¶åSìq…† É-AYoi&#Ëø4“FLK;Á¶rÝÍÄ…|âK3I&’N!&x ¯~ PZA´vi0Áâöý5¢ó²û:³¯òûªÞ>WÐ?ÿ™´F}"‰%—TXiÈ.Eó~ÇâKF¤ÉIKÚÉ0î'ˆjüŠ@ž? gÆe»à ÓÆKu]éNÒiýû"„BÈÑ eB!„l wÜq:­ÿñ€2 Ùl{ì1”eÙ(ߎ±6>>¾å× „B!„#ÉÔªñ€:-hÌohÎcÔ—Iê×ÂȘ®'÷ø¤æ¦êTFÂH«€'ÁdQ"¹¢=M&N>É%Á¤m n#8ÖTL¤É‰%Ó\`ZúÔ+Å¥Md9´„–ú³¦²J{¿âï©w¿jQ&\Ò丽ùéõ`²Ž_ZÀjZÁ3ssˆ]¡$s·3»n°n(ÃB!„B)gYÃÀ©¨‹{ÖMŽ«áã*IÁ¿RË0@3&—Ú’Ku‰¥¤Â(Y£‘JR¨†È¡*A$M|É .U K ¸ÔÒ‰ŽDŸ$S§Ä¨J¼ñÉ0ÕbÆ N¥©„ýt_ ¸¯£}ßϸ¾r"L"¿¨Z‚©ïê㺾÷mÒL½]×óß[ãûiœãd˜‰EÔÖŠ‹«€®ÆŸdÇ%âuTÖò÷¼‘Âød%B!„ì8(ÃB!dSX[[Ã]wݵåס C6›½{÷fË·c¬mW¢!„B!„)JfÖÊx*Nc.ƒsšoµ­N“ªvcŽÃðhÑHî€ ‘aB!$Vr…e‰œ0“Ê9ÿ൭ w mbMоîÓ†9rm4?k<ù¤^Òkú%J[ٰȲÉBK$Ùôl6^7M•Q˜›^_0 ;‘hhD×r—ÄópP•I¦,®_ gI3a€ÉUÓüC „B!„³˜Îþ¼Pm÷ªµÄç„)3jäĤQ»L\Œú’&ä\*ù¥È%‹mBE*ºÄm!–/à 0ÍÄ•b´­}JL"³xáĵ+JÕi0ÁbD"ñÅ/ƒ‹/yÑePQ¦ñÝä„Vš‰=µ4^–AV®©ÖE-ÛLM,ÖòŠsb–“±üZ¼Me°”£„àoB:û2!„²  C!„Mc;&öS†!› eB!„BÙZ®¸ ýMi¨Ê€x3šàà $­T·Áðh¥bFh!é%+PT2I›L‘Ê"a;¶‘•sê~À÷µUik#N¼ÜÒ*à ̒$ª ZǶMhA¦® ®j©ÛìûÜT§!YYùª“âÇdsXsÐêÒ†$Ó¨oÛš  C!„B 0Õ„þ¶4Œp»iåKpŽøÄí¨áÝ)ÒÂÔ:H„‰¢]¦(tSÌÈ‹.yi#l¿Ð:ÓN i¨œÄâßRQK,¨êÄrL-ÍÄõÂó£v•BYšæb$‘`‚>¨ ]¥âëd÷õûµ¨“TP¦Úïo4Ó›zÈ6Áõ¦«1< «NsÌVi/áv~ÌGÏÚÁù©<ÃdB!dçB†B!›er4B†B!„B¶?¡?L€i¦Ã aH³Bcþƒ?¬ uy%ìÅñÂH›¬‘M`iÊ&±$’Ibé%b rmè^m$É%‘\’i£ñYÜuEòKF09¤öN”QÕ:'ýô–TOhiÖíÑ÷ 07½æR‡¤ºMã:¿ñ`Ž®hÂYnL×¹yl”a!„B!!ÒÙÁ¤€z#”ªu/yF"KáUAC†Д[ +¬N°]ÒE‘—'ÚfŠ e¤u)T‹Ä¦ªø´¥ÅDbItN*ËÔ" ´®aŒT)1¦”$µÅ¥ÓD×wû*Ø×Úî«p_ÇÓu|\Uò a%HkɉK*¾÷=SdzÉ/ª÷yÓ Õo6õï¦wñàr4³XZ–Ô¥ C!„ì\†Žt!„²sßòkP†!›MN†Ù½{7N9å”-½îüü<î»ï¾-½!„B!„<˜X5v~ƒ²û+¯Ø2ÄʨÊÔˆ¨¨LT§¹BMëè®—Õ‹k!Àìäz£?^XlCJyDA”´¢Ü„ å:l'ªHp¾m"Ñ1Q J‹=±­ºFp-í?¶ª>GÔ׆r8êkÔׂkCIPV‰¶=qŸÅ~w/©¿‘ùÁz—%•D‰’e²"Ï¡ -muTR™:³“ëA*Œ@D02¦[ĬXøŠõ.Ô’ ‚cQýøŒIÊ0„B!„ÓÙ=K‹­¢«‡e÷𜔹çT zðÎ<Œ¯U²‚¸çÙ©ƒóþX#+DAk±"„(ˆ“/ü¶øu¡ªmS(­ÜùNØ@ qÛEt> ZUÛFÛvD+”¢ ¢¡´ØµDk{[Dœ,ãï‹“IDÛû©ÝZ4DÛß¶ bEÑ”MI(¥º9Uû ÙF¥i1u_"‘G…ç¶'ÂÀ¥æÄé.™”UK0 Y©*÷ëvêö ïÇÉ>@*Ä,-¬b}µ¼Ãݬ¢h ]nëð:z¸N%¯P¨¤œ$yY !„Bv ”a!„²iÜrË-0Æ@ë­ Ÿ{êSŸºem“c“‡~¸Q¶ãì–[n‰ÞÐD!„B!;•jB °ˆRN æé(/ÉØÉ<–!hªšÇãËFÆ4–ç½´`ÏÉÉ0@"–hqmÛ >‘lâÄ/¬H%JòŠŽ…•†ôâ¯+¢’ky¹¦VR饇¸Sõ1”bqÇ˺wÊÒ^Ìë0 4A݆ÈrøÉ,í’J[ÝZŒ©EÕ\ ´¤ýj¯/ÝŽÁòB·zs­Œ+j±%œÍÑ‘FY…;1z‰mÒÆBÇ`¥äï„B!„éNÒdÑ`n<`‡ÇÑ^¬ô¡Ü³u(Öt]ÛRµ;u`1Û§B+'¥Øçj£Š0 2.Õ%-Ó¨—"dìZ*iÆT‚Lx~\V8)Fk#ÊÉBÚÞ­ëÏ®uCpQûBŠDˆ¨ú\×–=†ê÷€2óÜfŒdR]z¥¼èú¸rûÊ%Óè`ß×Áq·Ÿ¦²´%ºô-Ë´ãS~ÒD™ªLÕÒL¾žOŠ-*Fê±æÇsò ]ÿ›ºDÛÕZ‚ýLZŒYß×㯊B!G;[7S•B!ÇKKKøÑ~´¥×xò“ŸŒ¢(¶ôäØ"— ³ D?øÁ¶ü„B!„òx`Ýf]bKœ¤¦dHF*ÊDÒ¹öü ld´¨çé¸e~¦c'¡$d¥ J‰(‘M+ –JÐhGEë^ýBCAã>m¤=Ô›Z‡¸±ç_B[µp«qЍL$ïUyý· "eB!d'C†B!›ÊVOð/ŠguÖ–^ƒ[P†!„B!„­çàŠØ/'/¸U"„ÄÂA8i'¨ãÊFÆŠ:FìÛBMi°0ÓÉö)”Â9&9a%K"饙xI)-’G-ß´I!ímT×Ò}Úh‘n ì[jM™,Fâ6tý™6&²d>k?¡%÷]ôTâ>µ÷ ¹ï4·nH;¶lvjÝÍÑ'dÙÅ&à5ýE‚ÿ¤e¡øI`‰X3A†B!„’A:û›¼D"—”Ñ–ž<°H ÃõÛ‚v§.dû”KÉ *íÒŒÎH39A¦E¼¨ÎC-Û„L$ÄÔ²K(ŸÄrLâ¶ )Nò(KƒÒ»öÛF‚öÂ/á ²¯£}¿Äõ•a’4 FN’)ê}ŸÖÒ8/+Èäe§¨¬Ñ‡DL0y`1’`üÀÓûÝP¬Çb^ØBKYØ’2{ È!„²¡ C!„Me|||˯±¢96XXXÀììl£|;ÆØvü­B!„BÈã…‰y.ñ‰ææä`ÒÔŸ %ÃŒé@X@õÆÑÙ©õ|§T-B´ %Vòi2hœÛ[Xi´ÑKé%îT} û¼¹6I‡ñuáëfûþ¦È²BKîse®Õ».2u"±(`nr½ž«Œ©áQÕxs•þâ'‘Ec¸.‹æébX*ÖP†!„B!„äÈ'ò*â28–¹ô—fŠŒ=g¥,vCM†B!„B,¦œL Ñ Ê=‹¸çTÔϳÕ³{6´»ÕÃx½De" jä$@fjqA)½eÀÊ¢ŠÂöC´†ˆ ÊŒ+Tˆ)ÄK¨ÊŠBAÄÊ-¶@\™qLj•0\Y³M+iQ€(ˆh(m?Ÿý¬N,q‚‹}öSˆ(Ñv_k'^õEÛg{­Ð-*¹¥ñÏ£>uFå÷C9§ÚWî[)ÇÊ'hJH½Ò[É%’_Yi&•eÒTš© ÕxªŸ…W3W"ÂÄյĿq"+ΈÒÝ7ø!„BŽJ˜ C!„Meff<ðÀ–^ƒ2 Ù,Ž” ³ J„B!„òxbµ,tªLŒÆK=ã2AcîCxõ9UZ=¤¡‹ê`-ÃôH†òÒESÞHÄ ŸÒKʈSòmDÂHZO÷i#L‚Ѩ¤•AÚ0¦ùæZ1^¶ ÅÞ).–T´Š?w´¤É:Zâ~Öw϶03±^ÏËqËðh‘¾6Ÿd’KBòçTÿ©M0†B!„Ò†”0݃~'/Dò@ äRc$ÞJ ²‚:EÆž7}°· $òEÑL‹É%Á„BF‘$É4aЦx‘¶™G•þ¦Áx±Ä'¾¸™0©¥JaÑ$¥´ 71¥‘`11®ða\ý–4ñE%û­ 19Q%¾ÿµ°‚ø>©,“¬UZ¤ý"S2!Sæëk? u·³Ñxõã2¯®^šþÒ*Î@`Ö÷öwE!„£Ê0„BÙt¶:†2 Ù,r2ŒR OyÊS¶ôºÛ‘ D!„B!7l:ŒÝ®¤°šó ½ƒœTà¥8QA1~î„`v¢w2 P‹/¡ +±¤Ñ&›4ÅŒH¬ikCåÛˆ„”É*Q-ò’6L)Ù¥Ÿôr(’J݇~²J=?¨eT~µ7ˆôÒ&¿4—ÙÉ5ˆ‘(ihd´æ™I<¦ˆ[á›hý—Ì9^ ÿVV(ÃB!„BÚ‘Î~4E˜@ è+½$õCa¦zþY ÊmÝÉó}û–¦¤i!9ÁE¡p‘È-NÞh$˜äÚ Å¤ÍJb©ÖÊ2•S«ÒX!Z»L˜`”%‚4—d­|:L áT’Nr__Ç•sÒT–T:ê™ü¢Z¶ƒ{ÛHšQA[*•fâä™"™‘Ú픘›ZL„-” ’`€f*L0^ãˆÕ¦$“߀éR†!„Bv:”a!„²éluêe²Yäd˜3Î8###[z]&ÃB!„BŽE®”¨'*Ä"@˜ŽnVò’sZD™‘±"ìµf&z'Ãx”›¸‘—;¼œŒ|Ñ&¬dêiôIH¤IŨ~Òk£ì6“aÊRZ…–CK]Ùˆ¬Ò"#e¾ „÷©%]f#í…톈8¦zq­Sã:+¼T¢–ÓõË“#á%+„EsГk”a!„B!í˜ÎþúÙ¸z.©eþÒKRÿœœ£:Õ¹þ™gj@V¨h$ÁMiÆ ,õùµd¡£6›²LS¤I¥™HbñoY¶ëÄ•bri1P Ý̳ui$n_'×ÓÉ!ÒýJŒ©iü1/Ð4…•äóç$—œ8“HC¡ “ißMóziêêôÄ"ÄH=NÝ8TCE2%;“dâ1_=¯w(ÃB!;¡#ÝB!„ì<(ãÉÉIÜxãòÓO?}K¯ÛétpÇwlé5!„B!äñˆO†QÊŠJDÊÏ_Pa™@  ”@DA¥Çá_"êê‰@”²¢‚ Zf'û'î_^(®ÝZ^qÉ)Ús“,Âc¢ÄÎ[±=„ NÌh­` °SCü5ì1¿׆½†?\K+h \#¸–†ï”ÄÇLiÛ ‘²ž´‘%’T6"´Du{K*±ˆÓ.ãTuz¥ÊTÂLøYUêÂ`i¾ƒÎºI’†€á1—>1Õü'·´% E©GñËjQOÖ±+„B!„Ò†t÷£~À$Êu™àðeÊ&q(ûm·àa%xHÖv{êÀBu‰^(e“\D+ hq’‹x™"(Ó …(ˆ†[kHa ®L ÛO£UtNµ](hqí â·E ZEí”â…ˆ¶M ”h{/´vÏkNvDÚý!Vô­«gyÿb‰ê»À‰e/·ôÜ×Ñ~º„RL˜ÊR¸Ô–ê¾T2Q¼_׋S\²Vù%iúˆ6)SbéÅ .º­Çh%·Ñƒvi+–dÒ‡l”˳°¿,B!„0†B!›Îøøø–µ}÷Ýwã—ù—·¬}rlpÍ5×à /ÄÝwßÝ8vûí·ã’K.Áüü`o6Ú(wÝuÖÖ›ˆE!„B!; ?Á¿—(`ç:H4×!ü9á›>ƒù#^Tp“"Ä–»X[)êc.E¥§¸Q%±´ˆ>±ÄZ(Á:¼F/!QM9dÐ4™øXi¦ŒÿæÚf{H>O/Ieó„ô¨£¢:mu‘©[iºLÊìäz=ŽÜXFÆt<^ƒA‰0©ð½6œ£#šÀZ)˜ïø¿ B!„BibºBKk]ÕR7/ãä˜\‹ÆMˆ‘J¸bᥞ‹Ó_x‰D°h0†B!„Òé@:“v³UzA,½$©¾LšÙöœb$‘ìñ©ƒ'mD’F¦°QèZ¤h‘frbLZVâK}.2ÒŒ“XœŒR‹/Ú>j·öbJU/”e‚”­Q–¦¹‰E›ÆZû:³¯Z÷uz_´Mw(Ñ%ÂJ-ÏxD2`‰ìÉUy¹£]V±Ÿ§ì6“aLW¢Ï;PB‹OUIdž^}ܤrÈu[îKã^¸u†™Éõ ¦oÃcE2þ¤¹8-ÂKú"fß¾˜\B!„BH?Lw»ôÄ¢‹O傇èÆÃ·;ìD…¡ã‚6j1Á¦| †R¡Œ¢+é¥0Ð.ŠŒÀJ-E,uhSô•f|BŒO|ñr‹a²²ŒÝ®ê„B P¿`§®V/›ðõÃkåöÕ€û¶V>A‹(„ƽËI.­÷)·NN¸ …§6¦Ì7¤+Á”î#¼Äã9¯¶¿¡¢ËL†!„BŽ (ÃB!dKØŒ ÿßþö·ñS?õSøÍßüMLLLdëhÍÿ;Cúóo|^x!¾öµ¯µÖ)Š"[>>>ŽŸù™ŸÁë^÷:ìÝ»÷°ûB†B!„r,3±j_NÏaæ‡P”©Ê{‰vòÃðhQ•‡é03“ƒ%ÃxzË&’,I,-"F(¬4e •¥Uꈥ›PîèÕT¯d˜Þ).‡"©D©7Ñ’ö/‡ú-ͺýûð{kcvb-H„½?ZahDGK<ž}J‘$å¨&踢¨~…ký_àA!„B!ÒÙï6RI –Wªã‘ˆ€úÅÑ9q]=²»y.“û—a€PvACÆÈ%ÁÉñÖ”’"bmf¥'m¨Zˆ©"Xývp¬R!Æ'¹ˆÖ( 4‚®[ü~õƒ€NLý~Ÿ˜æ~NTA´®“Zü½†»õ~˜îRí«ôxù¥E–é%ÃLîŸ Ä?¦Vb+cµÓg,»ÓãßµÁdB!䨀³G !„²%Œò¹=ô^ûÚ×â%/y n¹å–lÓO?—^z)n»í6üÄOüÄ!_‹ìlʲÄ{Þó¼ìe/Ãþýû[ë½þõ¯ÇÃ?Œw¼ãÉÖ¹âŠ+pÞyçá=ïy–——©?ÆÜzë­‡t.!„B!„ì|2Œ„‰~ÝC ¨ßúY)1Uáˆá1Uµ¦Ãl$$‹†°‘=zK/ƒ´Ö6]£‡t“ˆ%‘¢áÞ\k÷É$ÃiP+u¥—Ìãëä™äÞÖí &ìäå—æÒÆÌÄZ#fdL×c1{âFe\îÇg-vIµÖ—èobrÕlh¬B!„BŽMªd˜(ÃlMÓeTççÒaÔÐñÕƒu(%l$°Ï]© ÒKpI¥‹¢!Í !elTš)ŠúaYy9Æ'¶èPˆñBJ(ΨZŽQªñ¢‰²A-ÓTm'×RªÞ÷×TÉ~%áèFºKšÊÒSbÉœ›Þ¯ø<$ 4mÒ Ü¹½ÇÀäþù`¬¹±§Öã±›¦ÂDÙM9`Ö å̆Æ*!„BŽN(ÃB!dK8”ô‹¥¥%üñÿ1Î;ï<\yå•Ù:###¸ä’KpÏ=÷àÍo~3Î?ÿ|Üpà øµ_ûµÃí2ÙaìÛ·]tÞûÞ÷˜üD’±±1üõ_ÿ5.¿ürœyæ™øÀ>€;O~õ«³õWVVðÞ÷¾Ï|æ3qùå—o¸O?úѰ´´´áó!„B!d§0Lô÷aêù~;HÒº~s®NÝ”Âð¨ví×é03”a€ŒlÈ&Y¹"’b€85¥ÙF,—äÒdR‰$”fr‰0A½z‚Ž[ü~Ú¯¥® .«4%•>BK$È„‹Ê~/„œ–u/f®E©002V$rV¯´¢º¼J€‰Æs ÙCèÁ캀B!„Búaºé9&Þ®ë /Dà "˱0#O†Ât˜DJI•P€I“Jêóuu¼êök3]T(µhÉ.a*K,Ç4Å–¬ c¤:¿j3|(¯®íôU•:㯗Ê:Ù¤H,}„—ôÜ"i§U,jkKÕçö{¾žÚ?ü~ãm‚}?†k±%› ƒdŒѸ ·M·ýE™„BÙYP†!„BÈ–ðÐCazzz º"‚Ë.» Ï|æ3ñ¾÷½«««Ùz¯zÕ«pÇwàCúN<ñĪ|×®]øÔ§>…Ë.» 'œp¦ôŸÝ\}õÕxÎsžƒo}ë[­uÎ;ï<Üpà øßø¨üÏx®ºê*|å+_Áù矟=÷‘GÁÅ_Œ½èE¸ùæ›îסHb„B!„²“XèV»&IÄ_ÞÙLبÓa¹‰DS#ºªk_b+˜>x(2L*iä„•I0YÑcPa¥GL*‡ô’n4qÇn›n,Á˜R ¥ $²´§®jBK*ö .´DÒŽNîKNž Ä!ôž«ƒéƒ6Æ„nʰNç"—$ãAŠQ2ž¸Ü58¹f^ŽB!„BZ‘UH9Ë©™4$‚8&"£ß`mß7`Ö&Ñ@pçâ–ëïßpw#É"“h’¦då]'Ã4’Qzµ©‘I˜QIâ‹Ot-¦¸‡ÒZP‰ÅQ ei2‹ÄmUmÔûþAUéÆCr$ß ’NP–Hò²Ÿ9+È$âKÑçÞi­PdÚ ï}ë5‚Ïÿ×ë°¶¼Þ[ʹûÑÛ“‘_€ø‡¡Xr‰Ra│ñ˜eB!äX2 !„B¶ŒA&þßxãxá _ˆ_ù•_Á£>š­ó¬g= W_}5þùŸÿçœsNk[_|1n¾ùf\xá…‡ÜgrtÓívñ®w½ ?ÿó?‰‰‰ÖzoxÃpÓM7á‚ .h­ó²—½ ·Ür >ö±áÔSOÍÖ¹öÚkñ¼ç=ozÓ›pàÀ¾ý£ C!„B!ÀÄšM‡©iÎ׉æåØú>)&Ÿ³²nð…Îã¾…nu-Ÿ óÀ] øÚ•Vm JšÄÉ¡tHUJK"a„²a%'½ j#/œDH›<’I“ Saêt˜L©&–T6Yhé#ãô®›ïW(¿„‚Luƒ+?q?æg:0b'ïxn8¸Šo<°„N)µÔ’£ÑøßVŸ‹^“«ùd[B!„BÉa:ûby HÍ,Æ?«øz‚îÜ]X¼ã}X}è!éø¸,ϯâÃÿésø‡e9ø3ŒRqZKº­5š©$9I#:§)¸èÑñF;I›uâ‹ [j!¦N‰ÉÉ2Ú¾dÂÄ‹M† E˜~kÔwi1®Î@i-•°‚äX-ÍÄ2QP®‚}•Ê6i*¯gËT‹ 37½„?Û•øü¥ßd*¿].?Œå~Ë÷|fu"»Ò¯­©0ÒÇ0†B9f  C!„-c||¼õؾ}ûð«¿ú«xÁ ^€ë¯¿>[ç”SNÁG?úQÜvÛmxùË_>Ð5Ï9ç|ï{ßÃoýÖoRŸÉÑË#<‚—¼ä%øó?ÿóú0 Çw>ó™ÏàoÿöoqüñÇ÷mshho}ë[qÏ=÷à·û·QE£Žˆà3Ÿù Î9ç|ðƒÄúúzk{½þ&!„B!äXabÅ‚A ]àËƒÔ w~šSÁõ¬à×Má»{—±\K0”]ƒ½l/>õÿìÁâ\gCý­¤^bG«°§É´ a¥­XÊÙ@"ï#cêT˜*F$–_¢$•¶Ïö½Ççk-ª¥.±n},>§¥N ]Á_¾ó\ÿ•N¤Š_Xàêûñ‘ïO㎃k}SaÂy:a½PèòãT ”a!„B!Ât 4ô=0k±rß_cùžÃ¬ì³§ug#Á ”b¾tÙ xßoý¦, ÜßHÐH•BëXnÉH3­¢L°íÛÑ™$˜H¾qÛ•|âD—8-Æ +Õ:bDÙß$šÏרdœèÒ{_µîgåÕç~$¢P.¦U¬i´ãfRY ­©0wÞ´ïþ¿þîºé!û£Ln ugÝÙÛ°xçû°öØUr­1nK… ǹý;°„B9  C!„-#—‚±¶¶†÷¿ÿý8÷ÜsñÙÏ~6+-E·¼å-¸çž{ð»¿û»ÚÐuGGGññW^y%N:é¤Cî?9zøÒ—¾„ /¼×^{mkóÏ?7ÝtÞøÆ7n¸ýSO=õW…[o½]tQ¶ÎÂÂÞùÎwâüóÏÇ¿øÅlÊ0„B!„L¬š@D@5Á ÑüœD&¸o¦ƒÝ8ƒ«î^ÀrÇŠKÉõÄØ‰(Æwß:‡ü§Ûpïíó÷·’2´J„L‰î#¶ôi£’Pi2ýiR96j©%M…1¥@JLh Òj Û>{r_T]wp‘¥wÝø=ê4$› 7{ý¿oÇc.A ì’ülåÇÖÌJ‰¿¿sŸ¾uûmQ” Œc¬-&¬?±–¹!„B!„äîHHÓ3ZÓaÂòr«]…¥þ9ºswDíw—o…YßßHõðÛ÷ÜþÞýƿŮ½o þ*åÓIt#Ý¥!ÈäD—‚K}}äŽX)ŠZB‰’Y´‚r¸>¹¥’U¼,£TC„ñI1Ê·éÄ–ïk(­ó"J )¡ S$âKõYs÷!'Û¨ŒH“¹o9ÆÁç>u->ðöÏavj)? \ºÍ¦Õ뾆¥=ïÃúô ÕyÛ˜bñK‚rûV”¤œÚÈŸ!„BŽb(ÃB!dËHe˜/|á xö³Ÿ?üÃ?Äââböœ—¾ô¥Ç'>ñ œvÚi‡uý_üÅ_Ä~ð<ïyÏ;¬vÈã—N§ƒK.¹¯~õ«15ÕþƒÖ›ßüfÜxãxÖ³žuX×;ÿüóñÕ¯~_øÂpöÙggëÜ{ï½xÍk^ƒ—¿üå¸óÎ;«òx333‡u}B!„BÙ L®™:ÙÁ|·Ó|qm3fz¥ÄåwÎãÓ·ÎâÀR7jÿ%×#UÒÇütŸzï|õŠG`’ä6O‚‰Å_'+˜ ˜&I‡ÕF]¯ìf&ëteƒ²JIÅ‹2áÞ·¥Ï (½4îENzQª±Né¬\ù‰ûñ»k«Æ‰0ÁgwHß+ûÀlŸŸÅ—î]Âr'”`š’W-ÄäÇ})ÀÌ:“a!„B!ƒ#åþô­ƒ¥Ã@ bЙ½Ë?ú3t&¿ HÙl¿;µƒŸBwá¦$ÙÕöÒü þâWá²}ÝN³+sÔGQÄòE#FgÄ\ J ý¤™ð\å%' T¨ZEI-þX(Ë”¥±é0ÁbŒôI|Ñ}a~f­\wêu}Ý£¢HÎ Ò]å™{Ö&¿¤MÈÌä"þìw¯ÄUÿí{0]“•§Ä¬c}ú*¬OnclHwkP3zd IDAT\Žåû?ŠrùÁd¼fRa‘«¶ž)Õ/H„BÙéP†!„BÈ–qÏ=÷`aawÜq.ºè"üÂ/üî¿ÿþlݧ?ýéøüç?¯ýë¸à‚ 6­?þã?Žï~÷»ø½ßû½Mk“<>xðÁñâ¿þð‡³ C°{÷n\vÙe¸ôÒK±k×®M»ök^óÜu×]xÿûßN8![ç«_ý*.¼ðBüÎïü¦§§³II„B!„r,2·.X7¨çêToûŒ“4ré0ë]Á×\Â_ý`{¦Ö³íw\à&¥ Ê·ç_,j…c_»òQ\ú¾b~¦Ó·Ï½d“fK3‰%,Vò‰,±<Ò*ªø:I$‹ïï[E™ËÉË™«ß1BYfzÍ`@7‹B!„Bb–!å†ÓaÊåû±òà_bí±+ ÝüK,=zìt Ÿñ ¨]óéÔ‚ƒ±Úâ¸ÿç7ã?¿õ1±¯kVJé‘ ce‘\R)ĵْÓoŠº:ñE)1n­5”“cB!F¬Sšx1âê¨Zž‰öÓuxÜ%´ô='§´ +©üR—7D£H–‰¥›¨Ü¥ï„Üöýñî_ýï¸û–Gi*LšÃЩÃ~¹PCÇ÷fåa¬<øq¬=v9¤3—z¬©³±ºµÓ¯NUWõ¯®È07}k_üôCX[)«ïÑ”µ(»OÁÓ.8 VK\u÷šë/N¶«ÀEOÝ…;¡€æ„#Õ¶1RsòÍ纸æ`ÿö !„B!$dø„ÿzäœJ¬@"VØ[.åÖ§¯F¹x[ßvÕÐnŒžõo1òÄE(éL£;= ¥NvÂH-x¡ã¸vá×þàexÞÏ<£gûe)è–Ý®_»í®A·´ëNiPvðxÖkž“-ëtJAéÚÌï–SHY¥”%¤4€±k)]™;¦´Æ Ïxjó³­¬aáÞ½P…tUèjZGûv­]y½?4¤1T( Å]ª*/‚ãCCVª÷‡ "¨Õ ˇšõ²×KڵߡÁç.½_¾üFH)€1µ(Umˆ:€á'œ ¨a»ßYÄÚc_ÆúÄwì›Kz¡G0|òÏbøÄ(\ÂŒ{ã‰Ou5Æ•Ûuwñ_Q®õã„BÈ1ÀDäŽt'¶Ê03(ÃB9VPJá oxÞÿþ÷ãÌ3ÏܶëîÝ»¯ýëqýõ×oÛ5Oí2Ìúú:.¹ä|ìcëYï-oy >ò‘`lll›zÜtÓMxÛÛކ뮻nÛ®I!„B!G+/|â0.8u8_¼S§øcû–K|ýáì[Ê¿h#äôã ü»sOÀ¹§V"ˆ`ï]ó˜|tÅ–ù7ÄVk (~öÕgá¢_z2t¡ZÛ¯¤†HhI×µ°Ò( —²YÖ\ÊPªÉ\++½íäÄNý±áÆg3]ÁÔƒC”TCh N¾n»ôÒf\ú€õUƒ«þëƒÿ±cŒ@œùã»qÆÓw/ µÂÊ­ûWñ?ï[ÄÜZ!ë쓆ð’'áäí¤/Æä„à»ë¸k®ÿ'„B!„¡]/D±ëENziÊ)Ð @Ý…kÑ™û. }$|¥1rÚ‹1rÖ+¡†Ž«ÛñmJ‰ÎÔÀœ]£Þ¶ë—ýû qño½CÃEö2"ÈË09Ù%s¼Óµ),WVº²øœœ Ó~¼Ó5VÖðRŒ å·ä¥Ž{Ú“ŸÍ¬®aùÁG+ñÅ‹.Õ~áE¢">îÊuVXñÛ©°â%/¬´K,Ís&¬Ê6™ö”¦.àãïýWÜsûc Æo¯C.`èäsÀ' ™åǰúèçQ.ÜÝwœ«¡“1rÊ+ w=»n£jÓ’Œ`}î³’é0„BŽfèHw€B!Ç?ýÓ?~ô£xþóŸ¿í×þ7ÿæßàšk®Á»ßýn|èCjMò ?î»ï>¼îu¯ÃÍ7ßÜZçÄOÄ¥—^Š_ú¥_ÚÆžYžûÜçâÚk¯Åßÿýßãï|'yä‘mï!„B!„-L¬Ù‰(ˆPD %‚…p;ì™îŸ–±kHáçžv<^ð”]ÒÊ=ï+ˆ(­ð´ N‰§âÁ;ç Æ^G `;YÀ·¾ø¼{¯û³qÒ©#Ùë(ÀI:J×}…Šùë*Øß”ØÏ©”_[YÃ@  ÜGwí((%mÃL”½9PJªcðÒ&êGp--®uÀžj÷LW¢”0%*á¤Z«ºOñ¢¢5T®®j©›ÜÇìÔÍ÷ ÉÚ~û÷ï]Æ?üå}8øèŠ•_Üœ#Rí k<ý9»O®ä'±F .8}Ïa/8}îâæêxÉÆn &×ø!„B!dã˜îAúÁÏ=[ŠØçÁrétæ¾ )çû¶Uì>£gý(ÆÎ°{òˆ”*0üÄ Ð]¸fe4F÷ì¤t]ÿkÿt+î¹sÞúžWâIOn&±*ZA4 ¢ ZA »m´ (ŒØ"h©_f¡]YQ(ˆ(ÕùuYݦ@\™ÑîåQ›qYQ(”âä±ç)­íç ÑâʵýM@)”eóYÎ ÒyjQ¨ÚwªJÇ"‘ruŠðÕ‚h¿PÍò¢÷íºHöµ†;78/m¿ðeAyàûƒëÀ§Þÿ,έ¹©ì2‹¡“O=˦¸øã¨Ÿ±õè8îéoAgî6¬ï» f}ªulJwkÿ=ú4 Ÿô è¡'Á<©Æ¦ÝïBÊɾcB!;}¤;@!„c‡³Î: ÷w‡ë®»îˆˆ0ž¡¡!|àÀ—¿üe<á O8bý ƒsÅWà'ò'{Š0Ï}îs1>>~DD˜‹/¾wß}7þäOþ»ví:¢}!„B!„Ç+Sk~®ª9vBD×¾w`ŸÞ³ØW„Q xÞ™cxÛsOÅ ž<;ïÆM¬p,üþigíÂO¼ð ;~È¥­¸cÆ/ÀCw/âãïºwÏö¼h$e„IVÔˆå’TÚ¨ÊtNöP­mÔJÒ¶6ª>¥”e²i (ÏUË%Jƒ -éçÍß§ÔÍŸÓRÀ _ŸÀ'ß³[±óp\’ŽÿîÅ'œ2‚g¿ð 8áÔ‘¼´"‚!­ð¿ÿØ.¼õ'OÆùOÈKS#ÀÍëøìÝK¸}ºNÒ Æ¿`z€´B!„BI‘ò@õð"ÁƒŒY k“ŸÆúôÿè+Âè‘'bì©o®ûuè‘ÓQ=°¸tËàá¨Ú:ñl rŒLW¢ƒ„)bðÐâór|ï›÷ä¯ë‹EQK…3¢¥hÖ–ªLGÂGÑÒfØŽÒÚ>Gj¤âøÄ mÇ=c‹©z Ãs2û*Þ¯>C²]d>c£,¬œß¨—‘l"ùÅÉ2ERσË>ñüïþg,ͯòKÊöcäIOƒ=-CÉ{l脟Àqg¿#§ÿ[(=Ús¬šµ±vðo°>û%H¹œ¾qÒÀÔUB!äXBñmè/”RÿÀ9Òý „B6›óÎ;7Þx#vïÞ}¤»ñè£ââ‹/Æ5×\s¤»²-œwÞyسgÏ‘îÆÀ¬®®â÷ÿ÷ñÉO~²g½·½ímøà?ˆ‘‘Þ“P¶›Ûo¿Ïþ󱺺z¤»B!„B!+´~õì]r“,”[ß·Pâ»û×°ÐéÿoO?i¯xúqxÒñCn.‰rsGì›Tu Dè@ìÝ3ÉGW  W7|S/zå¸èµOAQ¨ÆµÅØ7½Š;ÏÇ­«²É1 ÎLÙ㘘²YÖ¸VÙ,K¯ÙÖ±Óügòk[¾½¤–4T(r)'€ 3¹JΨëV‡K^òª ð+¿ýbŒŒE}øÿÙ;÷(+ªÝ»êœ~ÐÝ4ݼDEÄ ˆ¯ÑȨsÕh4&^˜8ɬÌ8×13c2Kgn¢Iœdicr1jâ[#Ѝ ˆ DTÀˆ Ò<š†~¿Î9U{ß?êµëuºQà4ðý–EUíÚ{Ÿ}ªª×rwׯ>¥Ë’°l‰‚¥`[[²”[®üãEËBå*Ôg¨,©^¶²mÀ–PR¶ eK@ºk[BI€@fd}켪|VS3`šÎ¹0]±&´ojåξ0 d2S c03†³í­MfÆYëå¦v<“I®gFŽg2f¤¿^¤?Ó4ÐÚ܉»ÿûE¬[µÍ•_Ü´)] JAÙ9ˆÊndj'ø¢Œ/Âø’T Ð@É@¢qûQ…ä›çÂêX ÷Enàrdª¾ ³â$@ @)عwaõ¼8ðB!dÿæV¥Ô ¥Äž†É0„BÙ+|ôÑGøÁ~€\npýaÿCÁ‚ ð“Ÿü†Áÿ5L¬Y³“'O.*ÂÔÕÕá™gžÁoûÛA'ÂlÞ¼W^y%EB!„BI@*`gÎö_6»£WbÆú>¼°©¯_fX¹ÿ}T5¾=©#+M 0úN…QP~‡0?®Gœ0 ÂðÒA‚¤O’x}Î6üù¿?BÛŽ|l A:JJK(-&!ÉDKWIL@1D¤ÿ„zŸ2‘Fh‰0Ò]œýO“ºâ×5R¾—6ÆPêŒH¨›p.‚6Åhô2¯îÖ ½øãâƒ74Fª@n‘ ™2£N®Ç˜#ªb)0±{HÛœ{÷Ðê þþØ|åð!¨ÊÆÅ)æ>‰g6ôá¥-9t¼77Í9¾µ–B!„òé‘V vïÈ·þq"Œ@¦æTv²Ã΀ó¡>©ÖSf¼Ô$¤{€ì¨ã *; ìÞpJˆ'J(…Wž?ÿ—§°uSkx$"x9…©%ž¤¥Â8©/‘ÔSOƒ‰¤ÌDû1õD˜hú‰€a~B B)1Î$VZ2Œ€ó Žè¢T$ÆHHˆ‰¯ƒToìî¹ñÏüq‡S]¢é:AºK8ñs“p¾¢©4Ë­ÃMWOú¶ù©?á4 %[`ÖU"LB"LÑ}8÷—0«Q>êRTú`TVü6V9X]óoýdá7fû§ø "„BȾ “aL†!„²¿óå/Ï>û,êëãoH)5óæÍÕW^‰¦¦¦Re±¯$Ã<öØc¸úê«ÑÕÕ•ZgòäÉxâ‰'0nܸ½8²±bÅ |õ«_Å–-[J=B!„B´|ydãkL¼½ÓÂGíVïûD™)pÚ˜rœzP²F Z„`49e å¹^ëÞmCo·~hÄ}ˆFCjL\òã1éäa¡ñ8/1MK`‰§¾uRR_ìhY$ÆŽ¤ÏD?KK“)–H£$ †H×0Ѿ­`u ,Ûž‡ÝÏ À u_›Á;-¬l§C!„Bùt™#¡d3”lë¿nù8” ¿FùÁ‘—~`<DòF4=FÚaµlƒ0Fj)3†Öò!eøûûœþ·ý1)Ø^Š‹MjÑÊüíH2Œ{¼`9/}°,…Bìx¤ŸÔÔ™ ®òÛ{ü´w­€LmMì«‚«µ Ât…Ót×à&ÀD÷ 39½%c¦§µd´ô—XŠLRLJ¹™òyOßÿÌ|ßÈuEWøQ~ÚËV”œÓO| IQþ¶—&S,1F†ÚY+Ph} ÊîÀÏÁP²Jîܵ B!dÿå€H†¡ 3È  C!ä@`âĉ˜3gŽ8âˆR%ƶmÛpå•Wbþüù¥Êa°Ë0===¸öÚkqÿý÷§ÖBàG?ú~õ«_!›ÍîÅÑ Œ¹sçâ›ßü&:;;K=B!„BÔÔ— tY yÙÝc볘zH%ªËD ´¸‚‹¡%…øÒD(AE„ê„ÚP ›Ww¢ysS× ¿-Õ)&ÿ¯Ñ8÷[‡Ẩ.Wè²I’°’$¶Ä„™±%º–RAÅÄ™„ϲ‹È9e ']²§˜ÐÒȲËuÓE–4éÅ—š’ê˜Î±|ŸÄ¬‡6`ÕÒÖØ9õÏR8øˆjŒ:¼Ê—šbÒKJ¹.ÄòŒ×¯³ßÒ'ñÊ–>¬ë°ú½·«2€N‹¯#„B!„ì9„Y‹ì°sa9."µxé'ÉÒ‹'±LDrÑä…ÂŽu&Ú„…gž7 ßýáT”•g8s*+I†q×…¨“$Ëô'ÐD¤™BÊqoÛ¶¤#|¤ 1JÁ¨ªŠkeY©âKÒ¾.»˜y%$»$É0E¤™Xy&^/éóv6uâþÿ™‡ 7k"Œ&¯H¥za”÷"S;A“Y¢L’ £Ë.zzPT²ñ·e…ö×`u-TÿólB!„ø2ŒQêB!äÀcõêÕ˜³fÍÂm·Ý6(E˜{ï½]tEB!„B-ùþE˜1CLüÝ„!8ï°J É8ÏB@)8+h2 ôç,"K * ²/„Àa“†âˆÏ×Á0D8=ÄM”Þx¹ þåGhÙž ‘l¹Ã{NÈ)ƒöŒ‘.èxÏ9iÇBǃ2è}xÒI¤_Dûˆöë~–m«Ä%©¯PŸÑïñ™ê¦×‘~ ]hMø|[7ôྛWù"ŒÒ$ é +Ù2G\Ñž£ÝOú½’vŸ¹»±ûJ_×– \|x%¾~x%êË‹ÿ)®ÛRa!„B!{‘E¦z*ÊGþ˜“‚ïÚú~Â=¢Ç!yDe'¤ÝNÿð„©ðê‹«ð³kžÂ– -ÜR˜Aj«–Þj˜†€iºk}qÛxû†V–Ög¨M‘>…a8é7F # ÃÜɨó „ð¢´I¿V_Ÿ¾@dº©·Þ÷5CcGè<øßÁ}ñ‡¡­õsZ’Ϋˆô¥-Ë­Ã-×=*Â8×r2Æ$‹0J½‡tépd­ù›à&„BÑ  C!„’ÐÜÜŒ³Î: 3fÌ(õPb†Ÿþô§˜?>>øàRç€àÀ)§œ‚•+W¦Ö9ãŒ3°bÅ \xá…{qdC)…ÿüÏÿÄ?ýÓ?Á²ø6B!„Bù¬TgÎ;´ßü\%F 1Ý"’Ä…¨œ€p[}pêGݨrsÚTÖd|Æ—bܤ–- ݸ÷ç«°òíVQ‘#"sD¤˜¨àQLXp®‚h¿Qé&Ò‡´U|‘*ARIZ¢‚NºÐ®[\zI”_Rê„ÚCàÍùÛñà¯× µ9KÒ‘njÏÐáe8úKÃQU›-*³Dï!…äãÐîA1yflµ‰Ë¨Ä—G—¡Ü{÷‡ˆB!„rÀc”‹òáW#Su ÌÐä9YP@Â1Äê:û2¼/ÃÇ35ã‘©¯´›#©ž#±yýNüìš§°pî*É(!¹%*tDäý¸Þ&,¸ .~ôÓ§iŠ 1DZUüɸ—ž£¤Œ-Êg„ûB-Gk„—¬š$¬ ,¬­Ü“fL3*ˈ¨<·-Âç+A®‘–Ä´{^Çýÿ3½Ý¹TFª­(=FY]ò½!ÓöN…‰üB']ÒrîAa E¶ö(v%Dft©~¬!„2È  C!„’ÑÛÛ‹Ë.» wÜqG©‡’ÈÔ©S±bÅ œþù¥Ê~Kww7¾ûÝïâûßÿ>zzzë!ð_ÿõ_xå•Wp衇îåöO.—ÃßýÝßá–[n)õP!„B!dŸ'#€/ŽÈâÛG Á‘CÍd1!ôÜDrª‡BJyD„‰–—U8ú”9vˆŸ £ 1Òz»-LÿÃ:Ì~x#¬‚ÔÒI’$HŠIDö2Ù¤>ü$•"}èRLº8#­ÛЧÂHK…SW¢Bާ~„–d‘¥xbLÿòKü3=ɦ·ÇÂô{ÖaÞS[`d¢¥pÈ„j|îóu03"$AõwO½‡ï±ðýiàøº ¾=¾ÇË€J !„B!dO#2!;ôJd«/‚Õ)R "Ct_…%–˜ä€¸ôiod‡¢lôQPb+ ìˆã¹Þî¿}þxË<äú ±D“˜Ü¢‹2©ÒLRÒŒk“´$%¥8òŠáέ=ÆpæÀ~"Œ{~¤t$_¢1™ÆŸÀrMRRKÒ¢ß5©MjÛ¨dú¾Žt³c[;îø¯™Xôâª@tŠˆ0Jöåí(u#ùI•ªŠïG%™˜¬…àþ™±(«½ ™ªó ÄRý˜B!d)õ!„r`#¥Äu×]‡††üö·¿…a .WwäÈ‘˜3g~ýë_ã'?ù S?v#ï½÷¾ùÍobõêÕ©uF…Gyçž{î^ÙÀiiiÁ%—\‚×^{­ÔC!„B!„}ž#ªMœ62‹¡e„¡ˆàyÀ‘\ ”îC"\®„ÛJ@BÁ@d_;îôì ¡0ö¨¡Z_Ž ¶;Œ;F€„ …·ÿڌ͟táÿó¨]å#pÆéJ[Ãy¬;>á• gÛ_Nû@ ÑŽ¹i/€‚PÊí#ôY†óm êßU G‰"ˆŒ& —_B’Š.ïè"KLØé_dA‘:iu¡klèÆs¬G{KÁ—”ûÜQ°-7pø±µR“-"¸¸ÏîáýØsbL’‰Š1Ê àô‘YLjbqs½2v !„B!ä³bdA¶êgÒæÎM¼¹³;óUΖsÌEJ(Ãðç“~]¡ÂûþtREö‡BhîwÚ dG»kd*À0œº€!¡¤ÅóV£aÍv\ó“ópðau`*i&`(WÜPžâWžÜán;keÊ-S¦€RÊéËëÇŒn»ý˜Îï"LÃi£ áüŽA (åœSîZÎäÑÿ¶Á¦/θâ‹Fl_ˆâKH~I_ŠÊ/"¡¯„~–-ú3þ´¹¾BDn‘Á¶Ý ³î e‡¤ËRþ¾,"¾ AvAôÍ¡²ä#³ìæ‘(t= %;>óÏ!„BöM×Ó¦„B9`¹óÎ;ñõ¯=5¤”!pýõ×cáÂ…;vl©‡³_pÏ=÷àK_úRQ欳Ί+­³nÝ:œvÚia!„B!d7pèg”Eµ›Ú¡'k(W€‰J@1!mIN󈥄(…Úå˜ô¥á24IQ~jÌÖ½¸÷«ðþ-‘´—hJKXð0Š$Áxi,ðSZRÄ’ô-Áqá¦ÜD‰HBË„–ˆûì¨ÈRtÌéÒK¬.€·æoÇc¿]‹ö…P Œ.ÂÔŽ(Çѧ ‰01Ñe ’‹þBÚÐó9Á=…"÷˜û¬†eÎ=(‹º2fÄB!„Bv?²° VßÒÐäEÅ&4ˆ‹@°ïOšKì™Xž–ðaVC¦n”½=HÑä (‰­[ð‹kŸÂÂVÁ4#‰0‘T˜@_7q1ãBHr"L¤ÓI“ñö½4á&½xk%eâK„ ­ @Ke ÒZà +¥¸øÂŽV/–ö"ôúÁù*&ÎXÓï}Oܵ0.Âxi7JB¡ÙÑGÁ(«-.¨F9žØ>|E¥¥OÊeVÏŠ0„BÈeB!„ fΜ‰©S§¢©©©ÔCIdÊ”)X±b.ºè¢ReŸ¥££—_~9®¾újôõõ%Ö1 ?ûÙÏ0oÞ<Œ3f/p`¼ñƘ$Ê/ú¤[?¦ì.仞€´Ö•êB!ƒÊ0„BT¼óÎ;˜ÍÍÍ¥ !„B!„ìWlì–˜µ9‡nK%ˆ éK²BÒZÆ™t!™P#O#chi*®|áJ1Ë^Ûûµ;·õ%Ë"îC'ý +"QIL`‰&¸øi,zºK¼i%$ÃØ*"´D$•¤ÏÛ¥º"¹®ž.=?þ9qúؼ®ýÏÇX·²ÃOÑ×JºÓIuqheäZìÞø4BL¼<ôl<¹«-¯0³1æœÜû?`„B!„ ;¿ …®g™ˆH–'ÞIud—4!&1áÈŽ<¢²ÝŽ@áÄ|úB†’ o/\‹ÿþ·§±eýNMN1¹ÃÔeÄE—ˆôḛ(ãô‰Ôö^™žê‚bÉ0J…Ä—¨[TrˆÀ}’Ú¦ô³üõOp÷ÏžGÓ¦6÷ÚI_‚ñ®¥²·Ã¬ŠÌÐñák¨]×~E˜~î“]i¼ûGY;PèzÊœ/Y%„BÈÞep>aH!„šõë×cÊ”)xå•WJ=”Tþýßÿ‹-ÂøñãK=”}‚ßÿþ÷˜2e Ö®]›ZçÜsÏÅŠ+pÖYgíÅ‘íwÜq.»ì2ôöö–z(„B!„²_Òœ“xvc-¹¨£I ØuFzÇ5ÉaW„¥€šúrsêpTÕ–ùŒò׎Ó´¹÷ÿê#¼÷FKH\ *E“OŠˆ!ž@JZ‰Ë1F1¹Äݶe<Æ–*"´$'³$Ë/©›^'*Ï„…gýæ¼íxòîOÐÑšwÎDF’R¡vd9&ž:•Õ™T&íú†d)Ù0³+÷ {Ïm하¹9΂*ÉÏ!„B!äÀC>A¾ó/PvW²ÔRTT@?¢B85&Qˆ)"O˜Õ‡Á¬¯w„·½/ŸbÆö-møõŸÁ«/|èÊ¥·)I0úñhšLTšÑ…˜4iFW|©Å›À&%ÃHH3údßÝ +öÍpyTrñë¥É4Å!`å-ÌøÓëxöÏ‹Ï\Iú’s­%‘=Fv¨,]n˜,2ñxê½¹wda=òAÉŽRÿxB!d@†B!ƒ’¶¶6œwÞyxôÑGK=”TN9å,_¾—^zi©‡2hikkÃ¥—^Šk¯½¹\.±Žišøå/‰¹sçbÔ¨Q{y„CJ‰k¯½×]w¤äÛ[ !„B!dOÒe)<»)‡-=v¿ÒB²ØßOZ#VÞ¿0‘)3päIusx¤Ò„ MÊÈõJÌzpf=¸…‚,"}ˆ°‚¤z!i&=M&&ÌDûˆH(I©0ád˜¨Ð‚к˜Ð®[\zñÊ¢ò‹~¼·ËÂŒûðú Û`dH~ñ¤(`ìQ58üØa0 $Üůk´1é*¼ørUBH(_Ûeá…Æ eípR5t E„7á$ýø.1š£¼zRAdª=hÛúÐÄ‹BÁÆ“÷¾Ž?ß6¹ÞBjRJÒ¶Ÿ&“fIúéSQ„'ĸÉ0‰"ŒRîÜÜI“n]ç÷ÙEßaá'\Ï+ï;C ×3E¸ÓhnlÃ}7ÏÁ»‹×Åαr¥ewATt!;â8@Á½A)ùšÆë¤&)…ô¢àX4µÈÛ·s Ðù ’Ÿ; „BÈI¦Ô „BI#ŸÏã;ßùðÓŸþ´ÔÃI¤¶¶Ó§OÇ]wÝ…ýèG©ÂÇÈ[o½…o}ë[X¿~}jC=ùË_pÆgì½í"===¸âŠ+0sæÌR…B!„BòRaö–þft&Öf(!\Ù@À‘œµc^((åîG»k) CÛ‡€¡wÖð·% ¿ 0f|5ª‡•cýÊ6X–ôË ¥ §§÷—´ q}7.ù‡ñ1¦PB(MüPÁÚpÚCie¾Ø¢  gÚW^ÂÆ&ü‡n´Ï2”ûM„rd˜Jtœ‰é2ÅS\ŠI/ÉòKÒâÔÝ´¶sŸØˆ®vË}` AûUye‡[‹ŠªLQ*]ŠŠ 2¡—ݦ´ígAPwyKoï´vß!„B!„ì"J¶#ßñ(²Õ߀Q6ΛÞþ|Ó©žÃ}€p눗€2œÙuðYî|RÁMw´ „rfÚÒ™¿fG»kT·Ì(Wt&‰J¬X¼›>ÙïþÛÙ8düp(PJ@™Ç¦[æmKåüÀPžàÛ«kZ?þvÐaÀc”+—([¾ð¢^z  ´TWšq=©E—a’^Ìh¹ˆ×)ÖÖ“c–¿ö1^~r)¬‚‘™4YÅnBføXˆLu²ü¤—¥%Äô'D¥Ô ŽËÔ¶vÏë°z톟B!„ìo0†B!ƒžo¼ßÿþ÷Q(J=”T®¹æ,Y²Gyd©‡2(øÍo~ƒ3Î8£¨sá…bÅŠƒZ„ijjÂÔ©S)ÂB!„BH X°-wvŠ¿84a ¿ÜV¹õôŸ(“&?H·®”Ávu]Giª‡•ÅÒa¤ ØRaGcýz V,Ú©I&II*^Š‹&£ M&,¥Dú(’Hc[ ¶^¤­ù%)¡E{ ØDÇ›žO–IlÜs¢–¼Ü„÷­CW[Á=§‘s,êFU`âÉõ¨¨2c×UªO' $‰Ú}•VÏ–ÀkMa!„B!ƒ•C¡óIعârBäÍÞ¼§øq]ªˆ'ÄøÒ„ž>ÂÉ3fõX˜#FBÚÛ‚>ô©°³©wþt^›³¢ˆLbša™ÄŒˆ%fJ’L4!Ætëzi2Þ¶!„0Á%%Æ9né0¹_ù%I|1‹·¶±ržûÓëxá±7aå­Ð¹ ®© …FdGO**„®Ç®Š0ÅÚ„Ž#vʆÕ5›" !„BR¡ C!„}‚x\p:::J=”T¾ð…/`éÒ¥¸âŠ+J=”’ÑÒÒ‚‹/¾?úÑRå¥l6‹Ûn» ³fÍÂðáÃ÷òΪU«0yòd¼óÎ;¥ !„B!„м½³€[ó°e‚t€ˆœ(¹èÏì¤ 1ñ6Z] ÿaýX&+pä‰usDµÓ‡ _ØPî:Ÿ³1÷ñMxîõ(ädX.)"¬à’T/"§ÄÒU|)FÄ$”\âK&ZReMÂñå]2RÆ‘yº;m<}_Þxy;lË—3Fø¢vôP6©0$“ §¸K1±)&Âô““ a¥‰UJ]‰9[òØ™“Ÿéž'„B!„=…Õó”ÝŽLÍù*x|PÎÄÙÝWÎ\5õx0S†t§Ï†VàÎx´>œb.é,Î^¸ÙÇÂîÞÙÝa Mh£°òõز~.¿æopÈ#)FP†„©”(S@…¶iÊI”&”˜†r%¯·2„3ç3¤!`ze¹#Š2Üù±sBDDÀ‰%¾aÉÅL‘]tYÆO©ÑË…#׬xm ^}n9ì‚ ›À‘WìmÈŒ‘©J‘Q(¨„Ê’’‚vU„‰öáîK»…ö'¡ìŸæ'„BÈ“a!„²OñþûïcòäÉX¾|y©‡R”üàxóÍ7qôÑG—z({¥n½õVL:µ¨sÉ%—`ùòåƒ^„yôÑGqÞyçQ„!„B!„AÆæ36äЙ—’biRiÏU¤·õ_~*U døýÅE /¤jX“¾TšúrH©`kI&^²ÉÎí}xäö5XþÚŽÄ$˜@INgÑÓdâ‰0á>E·½´’a,•Ü&´DD–Ô·ÑÒeܱ*,y± ÏÜ߀î΂Ÿ®¤Á8KýA8êäz”1“E¾fÑd»/ú¹gú_¢ 2;ûlÌØ˜£C!„Bôع÷\Ù ¯ŸtŽÉ!E„P )!E… •,H˜CF¦~4”µ5!ÕÄ©ÓÖÜ…{ÿû¼6çý@I’Mô”•XLX,qdmïm 'z5aQ!±D—ä´š¤$½N¨žˆ·-ä ˜uÿëøëôw`ç­P²‹Ÿöb[Pb+²M‚0‡i0±kä&ÜD¯·,~ýSE˜b÷Xh…­(´=L†B!‚2 !„Bö9qæ™gâ…^(õPŠrüñÇãwÞÁUW]Uê¡ì1š››qÁà†n€eY‰uÊÊÊð»ßýÏ<ó êêêöòw›o¾ßùÎwÏçK=B!„B! ´ä$¦oèCsŸ= !F)GRðd…@zH©ë¦âLX ‘2I 1M>? Q㈾Ԭ …—ŸÚŒçîo@¾ÏŽK/!¡%A2Ñ’TÒÄ“ôtá'ÃDe[ª‰,ýH/"R7Uìqwwðô}ëðÖ_·CZ®8$ŒËvkÆS‹±G×ÂÖ(z-"×QJMlJ•ZŠ‹0ºèn_6uÙxvSÝ–*áO!„B!„ YX|Û#Pv{q&Mn)&DèÒ„Œ´qÞ@áÊ-‘zRù†0+=èX(£ Pv¤#žÈ‚…—žxÞ1}ݹ@r‰H/ád]:1b¢‹™¶$H1þïôE)gbîŠ0!‰Å@d?šî’ ¿ˆ°“$ÍlßÔ‚¿Üþ">yw£v.ƒó)«bH²ÃA8ùEêí°<#¥/Æ HrÒD™~Å—¨„#ìÜÇÈ·?%»JýãA!„}Ê0„BÙ'éêêÂE]„{î¹§ÔC)JUU|ðA<øàƒ¨ªª*õpv+ .ĉ'žˆ¹sç¦ÖùÜç>‡Å‹ã‡?üá^Ù®S(ðýï7Þxc©‡B!„B!¤z,…g6ôa}§ð3)©a%š#cI"ˆõ¬µ>d¼ž']Œ7G\L™b\¹CÚ «W´ãÁÛÖ`Û¦žDa%,½ ôz)âL(±%Ò„p“k‹’*Ed).½ˆˆô’,¿$÷Ó°ºß¹[ÖõÄΓ·_Q•ÁÄ/ǰQåq)ž•—TÒõß&ÔO‘ûlU›…9[rÈ3†B!„²¡ìfä[‚,lK0ÿµÔ–bBLb²H‚øà‹.2½ž{Ì›÷AJdë'A )@Ùm‘vìññŠMøãM3±éã퉩.ŽÌb$.ˆ§³ô—ÐâHM†›#’Do_åü‚P}3ÚN ²xoáj̸óetìèJ`œs%ím0GŒ„Yu¨{=ãrKªàº6Ò?÷Ú/WÒ´óRT„Q VïR:¦ªPê B!„ìCP†!„BÈ>‹mÛ¸úê«qà 78¿(Ä\uÕUxûí·qüñÇ—z(Ÿ)%n¾ùfœsÎ9hllL­wÙe—aÙ²e8ùä“÷âèvŽŽ\pÁxàJ=B!„B!¤ Ù›úð~‹‘’• 1Ñ”—é)1 Cj²8úÔá:¼ ÒFHö°]¥µ9‡Ç~»ï¼Ú—XR¥—´$DDÄûpESa¼‰‰2Éý%Ë/ÉÒK¸®s®Í݆Ym@O§–`´$ác*1ñäz”UÚ3V rRÚ5“áë­ï/E„IjÞl.à•myÈÁý«)B!„BIEÉ.äÛ…Ì­M úb4Ùe`"ER=Oà'‘Ä9nVŽAfÄH»1,øb‡DçÎn<òë¹X<ç="’Àbj¢‰\ S$§Ê˜aQ&*ÍxŸ­/PÒ™üj©3zºKLªIë?Ô&»W'ß›Ç ¾ŠÅ³–CZ2Q‚,@‰m(} „Q$×x×$”NˆIºVA=¤ÆH™|¥L¿W"ý:çÃêz'ׄBÙ5(ÃB!dŸçÖ[oÅW\\.Wê¡eÒ¤IxóÍ7ñƒü ÔCùÔ455áÜsÏÅ7ÞÛ¶ëTTTàî»ïÆ“O>‰¡C‡îåî›6mÂé§ŸŽyóæ•z(„B!„Bv`á¶7哆12.@ørK¤½'¼8Ï|DDŒHJŒ—6cf |î„:rd H1Úb$ÌØ‚gþÜ€\¯­%¹$%‰²J°m¤¤Éøõ `[ñdÛVa™Åý,_dñö½þÆM¯ˆ×éj/àéû°ôÕæX Œ³íô}ø±ÃpèÄ@hçÖMƒ ®Nˆ).Çx×ÅkŸœþÓÏ}äîÛRáåÆ<–îäk !„B!û*|ûS°{—% büy› '‚x)$Ú¯—"áxI'JBå(}”Ñ% A[w"®¤„mÙxeÆr<ñÛ—ÑÛ•KH‚ÑSXaRÒat)Æ4à÷‘˜ £„0 DD~‰ö/öùI‚LóƘñÛ±ñÃ-q‘Å=Ên‡¨* [?I“`’„£pRW–tÍŠËNœ4`FoŸ»÷ÍRÿB!d…2 !„Bö ¦M›†sÎ9;wî,õPŠRYY‰{ï½?þ8jjjJ=œ]bþüùøüç?ùóç§Ö9ꨣðÆoàꫯދ#ût,_¾“'OÆ|Pê¡B!„Bù ,ÛYÀÜÍ9Xr"ÀÒ_”öŒ†Ö.­­/g¸‚†T‘ÏU5v&~±ÙrÕ>@>~¯ݶë{\EhÂI‚x¢I/Ñä•þÒdBI,JZÒåI¤&Ê$}>аª¹s-¶nè‰}i;箢*ƒ‰§ ǰQåîóLQy%œ ˆJArŒ.4éÇ!&é^(rÿ@A!Øï³$fnêÃÇV‰ï~B!„BÙ(:çÂêZPDˆÑ\< %TÇM ‰Hqq&¥^Tž‰‰6ÙúI0ª$¤Õ/dоae#îÿÅLlZÓ”*›˜fXT‰¥Âh‰,fHP1ü—Q$É0ÊV€+Í8ò üt½Ïø:m¢É0~;!ðþÂðü= ÐÕÖŠ´ë#íFd††9äà°£]Kï¥a9fWÒ|RD¨´:FÙÝÈ·=™û¨Ô7>!„Böa(ÃB!d¿aÑ¢E8í´ÓðÉ'Ÿ”z(ýrÅW`éÒ¥øÂ¾Pê¡ô‹mÛ¸ñÆqî¹ç¢©©)µÞ·¿ým,]ºŸÿüç÷âè>sæÌÁ™gž‰ÆÆÆR…B!„BÈn`m‡…g×÷¡×’ý 1zâKq!FKIê+)%FF ~eu“¾4ÃF–»mU,)¦½%¿Ü¹o-h†€'˜$$¼D¤#Ez %¼hBKR*Œ-•›æ’ ½D>7H~ñ>#)­þ1)^½ Ï?º=ÝV<Æ•bF2¿X‡² 3|­¤~ý<9)áÚ% . eI)AEîåKN@G^bƆ{dIïyB!„BÙSX=o Ðþ -_`PRb”Ч²ô'Køí"I$¡”˜H]¼ù 3¤‚Q9Ù‘‡@Ù[]yÆíW“RºÛ{ðä/aÉœwaáD3žÀ’–Ê—fà” eKgñ^¢a;㈠7ÑD˜°ü""ÒŒH”f ½y¼üЫxgî»P–íË?ÞçK'1ÇhBvÔq€Q—\!ÆO’‰ÈIii0ñÔ™¸DS45Æ«£³v"ßúdas©owB!„ìãP†!„BÈ~Ånjɓ'cÉ’%¥J¿yä‘X²d ®¹æšR%•ÆÆFœ}öÙ¸ùæ›!eòC•••øÓŸþ„G}ÕÕÕ{y„»ÎÿøG\|ñÅèêê*õP!„B!„ìF¶öÚ˜ÞЇ¶œÝ¿Ø ‚¤‘pêHB—\býêB…'\ ø,÷˜aㆱ‡Êa<ŖζUX8³Oß·}ÝvX6‰$´@—SŒ4)%žäM…ñ’YeMz‰‹2)©5ZÝöÖ<¦ß»+ïðÅýûÚ¶3î#N†Cª"V´ÔOˆ _‡èµÓå¥b²“vdT’Š÷á]¿¦^Ó7ô¡5O†B!„²cçV!ßö”Ý$†KýI-Q™"6Âeºä¢¥ÄøõõωK1YdG ˜;™wdþûl<ýôÓ¥J¿”——ã÷¿ÿ=¦OŸŽÚÚÚR'Äܹsqâ‰'âÕW_M­sÌ1Çàí·ßÆ?üÃ?ìÅ‘}:”R¸þúëñÏÿüϰm»ÔÃ!„B!„²hËK<ÕЇ­=ý 1žT¡oK¤èÉ/Áó@K‰ñ?/IâK1#­ÄÄSë‘­0bœíµ+;ðàm«±y]w, FK‚ñذ0£×·­¸ c[*A~Idâò‹žã”­ý OüþclÛÔ“"à( ©É`Ò—†cèÈrÿ¡¥Ð¹Ô¥%Mˆñ¥—c¼k—$6éý†dïy f]§…g7ö¡×R¥½É !„B!d/! ›iÁj‰'‚ô'BDäŠôzþ¤9EØPaC†$ H…LÝQ0j G®ˆ$¥xi1›WoÅc¿š…Ímu¥ÄäÃ0|é%$ÌD¤=ÍÅp‹ž c(.ºˆâe†V.üóî½=‘œ»™c`TŽ..Áô'¥&Ç T˜)~Ø}"ßö8”ì-õíM!„ýÊ0„BÙ/éëëÃe—]†Ûo¿½ÔC—^z)–/_ŽSN9¥ÔCeY¸á†pÁ ¹¹9µÞ÷¾÷=¼ýöÛ8öØc÷âè>}}}¸üòËñë_ÿºÔC!„B!„²‡é³žYß‹µí… 1±2ÿA‘bõ4™B†Ë=¦?)¦²:‹I“‡£ntE\Lq×­L»ë,y¹ @$f’`yF@À=;wîÄ×¾ö5,Z´¨ÔC!„B!„²—°ðÂæN/(œ4¢  €@¡5‚m¥\Ó‘z€RB(_(PJ¸]((áõ(¡ÜOn ømœ‡cÆ? 5u=ظªÒŽ )ŽñÚì­Øøq'.üö8TVe´ôg¼ÂpÆèôíŒQ ¥É3 Âp¾‹'«D‘¶J”^BNL~‰Ë3m;óxqÚF4oíóŸADHÊd Œ?®CG–îó5 îAh“{I|ya!("=!¡,QŽr%m½¨)‡w[ø !„B!äÀEÉ^äÛCvèÅ0+&9efÔ€ %†:sU¥¥•ºi·ž3oÕzp焟wÂ[{sA}®í÷ï·qûDÙQÇÂj[ÕWa”ùý8Ÿí|æ;/¾‡-oÃÙßý2*ª+!Ey¢‹3ÿ7 @™J (ÁÚ-“`p„ø KNƒ1ã¢)’…›æ†&¼ýÌ[èëîƒ?± Mš©Ú‘Z £rb µ€hbŠ{–C}ÇÂBSp#¬]»§vEB!„B9@YÔ”Ç+[sŽl¡’B”›>‚P*ˆ^Ï{yj,F†ëúo§Õúõžû2h$ÅíFR‰I“‡£¬ÒLLˆ‘¶BÃG]xð¶Õظ¶3%­EDR`RR] K…±m[ªPÒ Ü¾à§Ë ’Bï{õ»mx⮵hÚÒK»ñ–ª¡N"N͈òðùð®‹{®œó®%½Hí\ûõ‚ë!ÝóO|âI?É"ŒÞAs7÷Q„!„B!„P í3`u¿‘ @H­"i0ñz‘=åÄ/—Z ‰tûõRGô¤·›^âµËÔ ³6 i·j &úgIl]Û„é·Î–U¾ ’šc&‹-~2LtQ †Rgüv)⋾¬zå¼öèBôuöh 0^úŠ“#ÕVdG £bdP®´´¥˜9¿¡ôí:…Ò`ôòˆ0~ŸRvùÖia!„²Ç  C!„‚çŸS§NŶmÛJ=”qñÅcùòå˜2eÊÿ¬B¡€ë®»_|1ZZZRëýã?þ#Þ|óMLœ8qiw°dÉœvÚiøøãK=B!„B!%äý–žßÔ‹¼–i"H dM’Ð… ]¼ÐëF™"Åh"'Âx2NEUÇœ6î„” ¶DLŠél+`Ú>Áë/l \9%,¤@ bŒaFÒŠK*ÊRáöiÒ‹/ÅÀe,[aþ3›1wÚ&äzí˜ÈãÉ6¯ÂQ§ G¦Üð¿»/ùç,,Á„©_+ømÒ¤_vòúIodô:)…KáÙ ½X×i—öæ%„B!„A†Õ5…޹€´#ò‹L•#à ¾\1ôz^Ýäò@Š‘šÐ!µÏ¤£|8ÊF`kèó•&­äºz1÷Þùx{ÖR¥`˜ÀbêÛžÔb",͈4Fºr úY‡%œ|W=ü V¿ú!œ_ èçNºcÏC”íDÙÈc!D&øNJ;Úvš[d¸mèˆGÈK!aF»¦~»ùÖG óŸ”ú¶%„BÈ~ eB!„0,]º“'OƇ~Xê¡ ˆÃ; .Äõ×_ïÆDï~pÆgàŽ;îH­SSSƒ'žx÷Üs***öÈ8v7Ó§OÇÙgŸ;v”z(„B!„Bë;mÌhèEwAÆE—XjH8$&X$¤Ä/K ×O’b¼µRÎy¯^†cNêú² GKĉËBºè¢¥éhòŒŒ1~J«­£_ÃjK·éëûÐQP%»O !„B!d_@æ×"ßú”Ý•ž“$R$¥Ä(=õ%"Є¤˜°Ô¡§Ë„ËÐa³®J¶hǃEI…í Û1ëöç±åÃM®ô?&šà¢/Å“aÒÛyb€Â꿾7ÿò*rÝ}ÉýI …mÈŽ< ¢lDXþÑ©%çèr‘ÔE%˜¨t” )ùß+é:ËØu–¹uȵ> %;J}›B!ä€2 !„B8ÚÚÚpþùçãá‡.õPÌùçŸ+V`êÔ©Ÿ¹¯\.‡k¯½—^z)ÚÚÚRëýË¿ü /^Œ &|æÏÜضk®¹?þñ_¶B!„B!: Óú°±Ó ‰.Á¶»–aIB—gôºz¸‘$ÅH-E&$ÂhÒ‡&Æ”É`âäzŒ;$ôtY§»£€iw‚…³¶B)Mf I1B“Yœ²$FYðë!!F_[‰—žÚ„ŸÜ„|Ÿ­¯`œBO¨ÆQ'ÕÃ,¾°<›¤BçÀ?ž Áx×$xöFiÏîé1A}¯MDfRÁ8£BÌšv 37ö!gów „B!„2¤µ ùÖ¡ ÍQB†Ä•PrŒ&Møu#bŒ/VĤ˜Hýs”wÜkcŒl=²#‡2¶…SU4Ù#ß“Ã+üKg¾ („Å3,±x‹òe`R©ò‹ž“ëìÅ[þë¯ '¾¤#¡d(oCvÄ1€ÈD`$Â2.ºx²D(A'$ÁD’zB×+œúâË6Å€¤„Ýó.òmÓ•+õíI!„„L©@!„R …®ºê*444ছn*õpÄÁŒùóçãç?ÿ9~ùË_BJ¹Ë}´¶¶bÊ”)X¶lYjaÆáÏþ3¾ño|–áîUº»»qùå—ãùçŸ/õP!„B!„ rr¶ÂÌ}8ûàrL–uKá<àá&¢øe€óЇpÞØ*@ @8u„³)œúÊÝöê)wÛi ÷3œz•X‚}x})gc' EM]6|ØÛJ5ðƼ&lZÛ…‹¾;ÕµY7ÑEî[f¡9eB§!´>l©Rä—°³£©/<±­Íé¶dË ~|-jêÊ ¡éœMÀPÜq+ïÜ*PÐ÷#Ç” Úª /ånèíUB˜ãn/Ý™ÇÛ ¼ƒ!„B!„x(»¹Ö‡PV{)Œ²Ã! ´—2h5ù3ÂsQ¿®[Ç™oÊ™h»skmë·qê:/tðÚ)îtêÕq'†ÂDvø1°:×Av—¢ Ú‡;sr«_ýÍ Û1ùŠ/£²¶ ʤr%0”€a¸CJú›½’N²ŒáÔ3ôµé¬w~²Î~…¾œ÷µàÍœ½‰¯B;2Ãêa” ¤½nÒÚ¯£½±"4WZ{mÒ oΖ`ܱDÄo^®—Y]¯Âêy}@÷ !„BÈîBð­Ùƒ !ÄÕî.õ8!„‰«®º ÷Ýw²Ùlÿ• óçÏÇ·¿ým455íÖ~O=õTL›6 ‡~øníwO²mÛ6|õ«_ÅÒ¥KK=B!„B!û_Y†SGeñ"$~xÏÄ„Å÷am;©>ür§_ÿùšhnÅÐ~¤È÷Úhx¯=éÒFÅ_¹â0|nÒP'qE"HTq×V^âÞ_}k[Y•Áÿ<†!œT÷A}ýáÒV,œÝ˜,å¸ ^†qÇÕÂÌnIŠ“°ï>{b$­Ìª6 37ö!gËD¡Â“XtÁ%$uè²LTŠñeÈ!Æë'AŒQºãÔ…>²‡ŸP 3#R¿ÓÒW›ñÄ]kÑÑVÐ_ȤԤ ä™Ûú0ík±æý¶ÔvÙ Ÿ;©#Ç ž»‰H>q1H“YBçáã2Øö$ï|)í<…ê%‰L^ t$ž^߇Ýögºw!„B!„„±º_C¡c ì°ä¢t©C\´I¤&d„¥É *MþúHc|™D—c d‡O‚Ò ){ý6žØâ %ë¯Â«˜ƒÞ–N˜†€i ˜î $’$áÉ0þ´|¼Ëœ‹ÎÆÚ85FJHÕ ³®fÍøÐ÷ ‹=ý0Ú:‡¢bQ1 FOƒ έwNµ_–@YmÈ·>Yàßë !„R:(ÃB!„¸x)#Ë–-+õPŒaøÉO~‚ àCÙåöS¦LÁŠ+pÑEíÑí9~øaœþùûTš!„B!„ÁËænÓúБ—¾”¡§Ä(© ¾ÐȾؕbT$õ$Q RLŘH¢ŠTÀÐå8òÔz šþR‹m›zðèkðñÊv#,¸¤H3N½ÞnÅÓúí-ùÔ6CG”ã¨SêPY›õšñ„ =Æ[Tì|¢~Ž¢I0~ûH‚LXR*ž£°£ÏÆÓ }Ø™“Ÿå–!„B!„’‚{ù¶i€ì 'š¨þD –:¢RL$1FÉHZLš«îǬ‡ìð­ÚXÃbLÛ–xåÎYh|¿AK‡‘T˜`ñ$H‰õó—aÕ³¯£Ð› 0!‰&³e£ÆÃÈ KNÅñŸ~ÿ»Êä~ücúùVÚµI–Tì¼Ê|#òmAÙ;J}»B!ä‡2 !„BˆÆÖ­[qæ™gböìÙ¥Ê.qæ™gbÅŠøÊW¾2 úB\ýõX¸p!ÆŽ»‡G·{ùùÏŽ«®º …B¡ÔC!„B!„²Ñ’“xª¡M=2$WDE ½<&d$H1¾ ê#žã׉&ÆøŸH9R)dË qÒ0Œ8lHêwÊõÙxþ‘ øës[ ¥ûÖÚ"2 \ &Ÿ·ñÒS›ðêœFØ–J«Š1ªqØñC!LÈ:¡ô–þ„ö=ÁÈ—ô¾"çÜ¿6Z;çü$$õ¸ç~c—…g6äЕò!„B!„ìda=r­CÚm¡„/ FéBŠ/·hi'IRŒ.k$Ê"IbLT Ë1Þç s(²#>d›ºvDV‘V_ËžXˆž] ¸ÂK±d˜|{V>þ2¶.[–‚üEA©>Õ]ÈÖ(Ãý.aù%gTÊwÒeŸhNäx¢ã%áè×D…ÛhíìÜÇÈ·?%»K}›B!„P†!„B‰ÒÝݯ}ík¸ûî»K=”]bĈ˜={6n½õVd2™Ôz#GŽÄœ9spË-·­7Ø( øû¿ÿ{üìg?+õP!„B!„ì§ôX ÏlèÅúN;2ôT’¨Ü¢‹zÚKDhñS^´´’¤´˜@üÐE›h_*x®ÀAGTaÜñµ0³éòywÉNL»{-Ú[rF² #à.Í[û0ýÞuødUGje&Æ¡õ‡VFR[¢i.ý 0ÊßÚ‡e#¥']‚Ñ™ 5'R®‚þW¶0{syI†B!„BöÊÞBÛÃù­a¡CK"QÚ~¢£ 2*½ÄŰ“ Ä$lûi-2u“ jz!U_$í%h³ñ­ÕXr÷,ô4·%Ê0Pm«7`å#sѽ­Å/דf””P¢™újC‹/¡ïXŠ 0‘ó+ÎÞGšã·ÓÚ¸Ÿiõ¼ƒBÇÓ€â‹+ !„28Jñ—þƒ !ÄÕö­'o !„ý˜ÿøÿÀ­·Þ !н6uð±dÉ\~ù娏qc¨|êÔ©xüñÇqðÁ—hdŸŽööv|ãßÀ‚ J=B!„B!À™•Ḻ,„€»8¿ð¶=yÚv¨Ž»lÂù'ÖÖk¬EB™S®ÿŠB«ŠBNb˪Nô´§?RVnàÌ Ƽ›cÇ*«28ñ´áxsÁvÈ"ÂÈÐe3±¦) × þܤ ÿéÉÛöþ¥Ü”{Ð?îÕQz ÕÅëÃ?æn{â‹×.a‚6o6°t'Ô!„B!„’ ²ÈV FùgÞ¬Ovµ}ÿ˜?‰vçÐÑúÞ¶¶áÉwÂÚÙöçÔ¡¿ÿëuœcÊꀵ³°‡!tPß4 Gñ(·ÜIO ¡Â;¢¢™º£Ãúõü mP¬OžÃçPÝ ^h2í¯U0©&Ñn?JÛI0 $¬®°ûÞ!„BönUJÝPêAìi(à 2(ÃB!ƒË.» ?ü0***J=”]¢¥¥ßûÞ÷0sæL†ÿûÿ/nºé&˜¦Yê¡í7nÄ\€•+W–z(„B!„B0¾PŸÅ”ÑeÚ36¹%E„ñÄ—h;ÿ8‚¶A›¸ãÕCb¹¿H1 hÞЃ{>ëW! ÑGT¡nL…ö ÷°MP/IŠ ?³£žÝ Ë,ÐD§I²f|áÆÝ¶°`kwX»÷dB!„BÙE2Uÿ fÅIàRTŠ>Áö·…¿¾±rýDÄ—ØK1CûVëj¨Þ:øBÕ‹½P3Y†Q"s¨‚YuX上lFä};"¨éÅ_»u•Š´ëW‚ÑÚÉ ]³ ókŠ|_B!„ B(ýeB!dp2eÊ<÷Üs1bD©‡²ËÜyç8æ˜cpÎ9ç”z(»Ì²eËðÕ¯~[·n-õP!„B!„ |®ÆÄß\ŽŒ—[D‘´—t&,Ôøu¼ÔSe · ÷„cÞ~wk«»`$ve•&ÆL¬FEuÆ/‹þyIÿ{S4ý%^`t©Åk;^D‚ÂBŒ³ænÉ¡±w÷œB!„B!Ÿ³âTdªÎ‚7ù&QŠÑRbBí¼úEÖ"*ÄèÛ±‰x°¯ÏµížM°Û% Ê¢LnbŒÙ†ÌðC 25N©.º„6U?ÛZ"k&HÑÖýI0~[·Žì†Õù4¤Õø)¾7!„BJ e²÷¡ C!„ ^&L˜€^x&L(õPfÏžo}ë[èîî.õP!„B!„àTià+‡–£Ò¹EDžÙ1)&e´äÄEšà™œpYðlN‚0£}›­•—ض¦ =í…ÏôÝkF”aô„j¦×¿ ‰0ñ—Ô&È/þvT€Ab Œ×´åù70B!„Ble‘­º0²(.ÅŽ˜$ëo¤ðæÃÚD9M"r ™xGŽ;Ês3` ûßXAT¶!S?P†_¦FxbínhÛ1ùEߎ¬c)0F©H› JAÙ;Qèœ%Û>Åw&„BÈ €2 ÙûP†!„B7#FŒÀsÏ=‡)S¦”z(û5øÃðÃþ¶m—z(„B!„B ¶LàÂC*0¬Ü“Ut&YŠ ‰0¡gv1&T}^G/ó’&È$в©;7õîò÷†ÀÈñCP;º@øÙœ`__ܘü¢—G¯‹TIfŒS5¨»½×Æ [òèµù÷/B!„B¬™C©þ„1$žø’ÿÅéi1Nµt&YŽqÛûIû VÛj¨îÚètDf£r¬Þ b;!Ç%AxIÛÖo?A„ ¥Á8ut P…MÿŸ½{²«®ïÆÿÙ3“`J@‚/« KV˪V•ǵñQ­-¸¼×ÖÒ»@Û&.—˶ËvÁ²]ÈÒ®´®Öâ¥Ô´è<€@Ëõp3” 0I&™ëÙßßgÎ̹ÍÌIrföìÉëµÜsöþîïÙû³'üá7ù¾÷7F®ŒHC='0 Ã0÷„a`þ[²dI|ë[ߊßþíß.º”'¥þçû·[t)ÐbIog½ô¨xñÒž˜|ñl›•b¢éÜD[cH¦93ùYw͉µãö™¦n “{†öŽÆÓ¼£ç\´´7^¼jY,>º·a²MjÚi=n ¿Ädx¥µm<ÄRß¿é¸a•˜©B0µë¥[*qÓΑóO_ó^Ösl,ZöÈz_Øli ÅÔÎÕ¯Ó|®þ³®O»Ucš÷Û·eÆUyÿh¤ü¨éŸoñÞè{áK#ë]Öæl㪫զ)‚/õÇucãÖ·JÔú¥öýÚfšC0‘"òá‡bôÀµáÅ•PrÂ0Ì=a(‡,Ë⢋.Š?û³?+º”chh(>ò‘Äå—_^t)0¥Þ,âí/^¯:¦o|Õ—˜2Q›—Ó¼2LtŒ©ûQ?§m@¦©­ù°2šâ™Ç÷ÇàžÑiŸoÙŠÅqÂ+ެ§úíö/¬m\"¦¾Ï´á—¦`ªçš1“«ÀÔ_oºLJ÷÷Ŧ]£á_½J$[‹^ð¿£§ïe“Á–º·Jdõo˜˜bÕ—)Wƒé$Sß?:oK•QyvG¤‘åm*E¶loô{r4ܨÝ<Í™Úê^ÑøfŠö+ÀTûN± ÌxÛ丽é»)EehsŒ ý¨Í3%$ Ã܆€rùÃ?üÃøêW¿½½½E—Rj»wïŽ÷¾÷½qûí·] täô‹âÔöUƒ/1U(&¢¶ÊKCàe¦`L}ßhœƒ3U@¦á|›öš=OEÿχZæÛd=YÿŠ¥±ì„Å'RÛݺy6õs¢Í~]¯¦‰9ir®NCÛņ~©i®N5“§ˆÍ»Fãþþ±ö À<×}GŸ½‹ÇÃ#Í«½Œ¸³i1­Á˜ºï·¶'ö2/†b&¤Ûóhäû^=Õî½ÃÑ{ÜâèYò’é¹e嗉㧛ãõo¢h ¤ÉÁuëgý*0õm «ÈTbôÀ‘Ü7}Ý@™a˜¾¢ (³õë×ÇŽ;bÆ ñ‚¼ èrJéÑG5kÖÄc=Vt)бM»GcÏhŠ7¿hÑÄê/YŠHYŠ,U'ऑeiü³^I‘Æ?#²”EÊ"²”Æ?#R-S»VŒÏO¿Gm¾K–¥†¹2µù=)vZ3Çœ¸$Žú…¾Øõø¨Œä±hioœðª£cÑÒÞ‰¹0u—nhh~ÅZãüœÔøÝ†ý¦`¢}¦~Ï”!˜ñ§’ƒe IDATý±<âÿ>5ÛöWÚþPc1vàêHùžè=êÿ«Ž|'Éã˜i¼-˲h·|¦‰ãê¸9Òø|"Sk«]³Ö ܉PMCh¥uUÖ¾c~9ò£vFåÙ}#ÑwüË#ë}Aó`9¢e4Ý´ÚKÃî”ëÖÕ_êkló™¾×‚I)E¤‘;pUäcÛZj˜ï¬ 3ÏXÊéu¯{]\sÍ5qâ‰']J©ÜvÛmñÞ÷¾7ž}öÙ¢K€CrÒ zâÌ‹z¢qe˜¦Õ`Ú­3yÜ´bLÔ?«ŸgÓØ'ê&è4´Í\w>–â¹m¢gQO÷ò%‘õLý¥vÿ”Ô|©ÛIu_jw3s¦ú™šæê¤†ë¨äñvŽÆ3CùÌ @)ô,:5ú–ž‘¯´Ò¼JLÃj1õ+Á´ ²¿“ãñ†óuíÂ. ÓµóሞÅÓwJS´¬øR×8]ø¥ñm Ÿµ1ôTA˜‰±x>cû¯ˆ”ïšæá€’:"V††™g„a ¼N:餸Á~¿ò+¿Rt)¥ðÿññÑ~4†††Š.ËŠ£zâ7_²(^ÐW›¬Ód™œ“S?§M0fâÇ4ᘺë6h7g§åÜô)™Ô4Ù¦õ|óNûàKs߉Õ]jMÓ`jÇíV“©ïIqýΑØ7ê߸šžÞWFßÒÿ5.‰ê¸%S7Hž*S¿ß®-¢1 Ó°;CÛAk~©;hȺ4u§ ¿T´]¦ÍgJ“ßM•gbìÀ•‘ÒÀ¡?0Ÿ Ã0÷„a Ü–/_ßûÞ÷âïxGÑ¥Ìk_þò—cíÚµ­‘%µ¬/‹ÿyââ81ÈÒnµ˜h Æ´kkŽ©kšâ¥µYkÛa˜ µ¤6m­Çõšæ9:m0õA™¦Ìø kúìÌãÆ§FbØ‚0 VÖó¢è[ú¿#ëYÖhÉZVi¿L69¯»ðTû?šNO3ºžià=í?…§hý§òÔ<À®;Õº2Lj ÄL€iX&"ÛcC×D¤‘(1aæž0 ”ߢE‹âë_ÿz|üã/º”y§R©ÄyçÿðÿPt)Ðu‹{"Î|ñâxÉÒž¶«ÁÔb*cª}[Ú'›kWkÿÂÚ):Ôü"Ú6©®µÍ¼œhžÜÓ²Ìøv«ÀÔB0õá™Ç÷UâG»G£âŸ¶¼,û…è[ò¾Èzo]áeÊ`L»Ïê~V·ß0VΚÎíB0‡½:ÌT+±¦Ö¶†ôä—ZÂ/õûm0 ƒêZfô¾)"¼e¸#" ÓWt Íèèh|⟈­[·Æ_þå_]μ100gŸ}v\{íµE—³b$¸~çHœ±¢/^ý }‘eÕÉ*Y)‹”ED¤È""KÕ½ZŸÈªmµ•dRŠÈ²Ú„—êõ³lüÛir®NmÕ”Ú\vój²ƒœ¬“Z¯2q­©çè´¾Õ¶yõ—ñKÌ€i|amõº÷öWâ'ÏÔsP^)í‹Ñ¡ Ñ·ø]ÑÓwÒø 85|¦‰ãñ1t\§,ËYmÌZ;_ݯŽ×ëÝa“†¶†Ãy°6m×NõÇS†_ê¯5E¦ö9þ½±‘Û#½óðŸ`ž†˜%õWÛ¶m‹ú§ŠE‹]N¡vîÜïz×»âî»ï.º˜UyЏu×Xì‹xí±½ãst²È²4viÆDÔæêdãŸÕöÉù8Õ^í2Õóµy-YC[͔ᖴÎÑi ½4÷›:üRWK›¶ÆÖV*yĦçÆâ‘}•C~J* ÇØðFozGôôR7b&ƒ11„Éj𺶈ÖýÉ€L4 €›‚2uíõ3×ß²3yª)ÓÒ·þ¸e¿~lÞ&“šûEeøÆÈ+[:, „afÑ·¾õ­xâ‰'âŠ+®ˆc=¶èr ñÀÄš5kâ‰'ž(º˜3w??ûFS¼iE_ôŽO°É²ê-)ƒ1“ósRÓËkÇû×Vމºy8ÙäŠ/“¡™æ·ÈvWûLÝ='~Ôï7­þ2±ŸÚÌ×Iõóub$OqË®±øù`ÞíG 4ò¨ŒÜ)ß½‹VGmu—öÁ˜ˆˆ)« ®ëV‰Éóãñˆ†•bbâ£.(S3ÞuKS´kŸ"3cøeâ»i2h“"" ÅØÈ5‘òŸdÑóŸ0 À,»ùæ›ãMozS\{íµñŠW¼¢èræÔ7ÞøÀbÏž=E—sî±JìKñ¶-Š£zêB01¾ÚKmBNÝœ¬]8&jss²‰PÌD $›œšÓôÛ‰°Ì¡J oêÛwZ‚/õÕï·®h“&éÔ¿¸6ÅþJŠ›ž‹çFf!Õ@éäcwF¤½Ñ»èí©/R-à2þ9x©½I¢’‰¨ ÇDÔÝ/”˜Xeµ’ïSßÍí#MsØ.\Ó´"kë@ºq?Õ·ëÞ0‘"RÚ•‘«"¥ç¡n€ùO`<øàƒ±zõê¸æškâ×ý׋.gN\zé¥ñ©O}*FGG‹. ³s(kwŽÄ™/ê‹e}Y¤úÕa¢~~N6ˆiމÚÜœÔúÂÚ‰ÐÉd*¦!,SÓé|éÂ/©¥­õ8µœk ¿ÔŸ¯›¼óühŠŸ‹A&å•-‘Ò@ô-Z‘ŽW1iü3ÆÇ×Õqfs8&¢6ènXi¥.$ѸòêdXf¼o³æñöŒCÙÖ—EL´w‚©þ˜¿Ôµ5ažŠ±Ñk"ÒàL”VOÑ)žzê©xË[ÞW_}uѥ̺/~ñ‹ñ‰O|B"¢4ÅžÝÃ)Rž"OuŸ)"Ï#RJ‘çÕ­º_ë’§Éþi|¿z\;_ÛÆûä“}¶|òüT[>Åw[ϯâ’W·ês4ö©=Wí\ësÅÄ3U?«ý6˜ÇuO ÂÐVÊc#—GÊ÷Ô—-Ÿ)ÏÇÇšÕÏÉAjÞ¸_?H­;n/_/Õ¶Ô¸5¯›Ï×¾—×Õ51°®¯¥]©©¦¼î™òº¿hüä•ÇbläJA`ÁËRkĘeYvnD¬/º`öôööÆ%—\üÇ\t)]722¿÷{¿ßþö·‹.æ¾,âß/[šEŒ¯S· Ëd[u7¢a?kiŸhm³êKVߨéª05 /œm¿TLskýuÛ½¼¶aõ—úkÔ­"óè@w<_™ù%ºGGoß»"Ë^49n®$·ÛŸ€WÖ—›Ü3µªvó5ëWy™è’ZÏÕ¯fÓ¸ kÔÆãy~oä•Û¢uäa.J)­+ºˆÙÖWtGšJ¥çw^lݺ5¾üå/GÖí¿<+H¼ÿýï›o¾¹èR`^K7ï‹7Û'/뉔Ed)"ÕB0)UÛb|.KV µÔ&ÁdY㜙,«Í‰ÉÚª½-]Ñ8_'µÌßi«“¦loÄDÄ={*ñÀ¾¼;…p8•±+£·÷ÙʈHãƒâ4þ1>èŽlr`:©îW‡­õñÚùº LKx¥ƒ—O¤)&[SÓù鎧؟ÌÁ¤ˆH‘Wn‹<Ý7EQ 0 @Aþîïþ.¶mÛßùÎwbÉ’%E—sX¶oßkÖ¬‰|°èR`^Kqg%ÆR¼nyo5Ç’ÒÄ$›Z8fr?EÃü›ñ‰;ótšú49”÷p´»N­þæy<©i©˜)Ã/ã “suRä)bÓó•Ø6赬±¨T®‹žž7GOö+ÕÁl6þR‰ê :&Â1µPLC@¦Öoü|í8êÇÅÍá—CxùÄTá˜víÓ„bÃ/õûcQÉoŒ”¶vXÀ P ï}ï{ñä“OÆ÷¿ÿý8ᄊ.çüøÇ?Žw¿ûÝñÔSO] ”ƃy TRœ~loôõD¤”Õ­ôR ·L¬1‘hÉÆ“&µd¢zX7og¼_ݽ¦ ¶t"ÕïM³LãñTá—É/¤1’Güð¹J<3"À¡J‘ç?ŠÈöFOÏéuƒÐñÙ䊫ƒíHu+¿4†`êW_¸P6¹;õr0ík›î°¡±]è¥v¢þ¸e?•üÚH陃¨ `a†(ئM›âôÓOk¯½6V­ZUt9åꫯŽ~ðƒ±ÿþ¢K€ÒÙ1˜â@¥ÿã¸ÞXÒ;9Ù%›xYmV7'gW‰½cÓÈÓ½‘ò}ÑÛóŽh˜Ù°ŠÊø‰€Lí8êÒã£í‰tÖ46NÍÓšò½Í+ÏÔµ7·Íðv‹ý‘W~)öÎP ÀÂÔStD<þøãñÆ7¾16nÜXt)ûÚ×¾ï{ßûaà0ìIqÃî±Ø;š"¥j &Ï«ó]ò”"Ï«íym›8WÛR¤¼ºå ý&ÛS^=®n1ÍÖæ;m®9Ù^­%å1Ñ'¥Éó)MÞ/Õ=Ëî‘•üêˆ>´gX úfîÀ\Ž~ðƒ±mÛ¶X»vmÑå´Œ|ä#ñ½ï}¯èR`AÎ#ny>ÓŽÉâeK²È"‹ˆñy1YŠ,&çÈdÕS‘RÖp,K11¦Í|š,kmk6Ó<œÖó©¥­þ8EŠñÿÅ£ƒ)îÝ—Ú•]“boT*WDoÏY‘e']NWåé¿#Ïï(º €yA`žI)źuëbëÖ­ñ÷ÿ÷ÑÛÛ[tI±k×®xÏ{Þ›7o.ºX*)âö=)N‹8ùèˆÈ¢‰IÕÜKÖŠ©…djšÃ2“²†ó3kìØî{©©[ªýLMWHyDÜ7âÑA1æÊpTò«£·çí‘e¯.º˜.È#Ïyz¨èBæ a€yêÿñcÇŽñïÿþï±lÙ²Bkyä‘GbÍš5ñøãZ îÛŸb%ů-_!&‹ˆ‘EŠÚb0!™‰ƒl"Ónõ–è`U˜Z×éO¥6!˜h‚©®SIwîKñäH‡÷€®©D%¿!zzöEOöÚ¢‹9 £QÉÿ+Rz¢èB敞¢ `j×]w]œqÆñä“OVÃÆãôÓO„€9ôøPÄm{SŒä)Rž"¥yJ‘çyDžª[Êc¼m¼OÝ–j[Þá–êîÕ|­2sßLJ#Â@‹{«˜ôä”}òô“¨ä7EÄ!,Õ @Ç„a¸JЏkÄ£Cíϧˆ¸ÿ@u“ƒ€é G%¿:Rz´©=<¿9òüÎBª8Òô]sãÿ FÈ#N=:"o«¤ˆïØ9ZhiP"yTò£§g_ôd¯‹ˆ‘¨äÿ)ý¬èÂŽÂ0G­ÃƒyÄ^1›"ž+º*(Ÿ<¿#RÖ»"¥çŠ.àˆ" p„yj4â‡û"FSu¥àФôpÑ%‘„aŽ@{*EWphzŠ.:% @iÃPÂ0”†0 ¥! @iÃPÂ0”†0 ¥! @iÃPÂ0”†0 ¥! @iÃPÂ0”†0 ¥! @iÃPÂ0”†0 ¥! @iÃPÂ0”†0 ¥! @iÃPÂ0”†0 ¥! @iÃPÂ0”†0 ¥! @iÃPÂ0”†0 ¥! @iÃPÂ0”†0 ¥! @iÃPÂ0”†0 ¥! @iÃPÂ0”†0 ¥! @iÃPÂ0”†0 ¥! @iÃPÂ0”†0 ¥! @iÃPÂ0”†0 ¥! @iÃPÂ0”†0 ¥! @iÃPÂ0”†0 ¥! @iÃP}EyŽ>úèXµjUÑetÍÃ?ƒƒƒ3ö[¶lY¼úÕ¯îèš÷ßT*•iûœp ñÒ—¾´£ëÍwyžÇ}÷Ý7c¿Å‹Ç)§œ2ÍÇ<öíÛWtP*Â0Àœ;õÔScÓ¦ME—Ñ5¯}íkãž{î™±ßë_ÿú¸ùæ›;ºæqÇýýýÓöùЇ>_|qGכ‡cÉ’%3ö{ÉK^wß}÷T47Î:문þúë‹.(©/~ñ‹±téÒ¢ËèŠë®».n½õÖŽúvúÜ—]vÙŒ/^8á„ⳟýlG÷-ƒ¯ýëñÓŸþtÆ~ŸùÌgâE/zÑT4û6nÜ×\sMÑesLJè‚ .ˆåË—]FWô÷÷w†éô¹ï¹çžÃ0Ç|¬]»¶£û–Áõ×_ßQæSŸúTœ|òÉsPÑì[²d‰0 zŠ.:% @iÃPÂ0”†0 ¥ÑWtÀ¶hÑ¢èíí-ºŒ®Èó÷îÝ»ã/þâ/ºv½²øÚ×¾Vt ‡¥§è SÂ0”†0 ¥! @iÃP}E,l£££1<<\t]q0Ï122ÒQÿ‘‘‘Žï½P~£££÷[(ϼPžæƒ,¥Tt ÔɲìÜ2ó IDATˆX_t0›^ùÊWÆÚµk‹.cZÏ>ûl|þóŸïê5W­ZŸùÌg:ê{ÁÄààà´}Þþö·ÇïüÎït£´Ys×]wÅ?ÿó?wízÇ|üõ_ÿu×®7FGGãÓŸþtÑepdº(¥´®è"f›0Ì<# À‘`õêÕ±iÓ¦¢Ë˜ÖöíÛcåÊ•]½æ[ßúÖ¸ùæ›;ê{ÜqÇEÿ´}Î?ÿü¸øâ‹»QÚ¬Ù°aCœsÎ9]»ÞÊ•+cëÖ­]»ÞlŽ%K–]pؾ}{,_¾¼è2¦uÆgÄý÷ßßÕkvúÜ¿û»¿W\qÅ´}~ù—9îºë®n•6+öìÙ¯xÅ+ºzÍ;ï¼3V­ZÕÕkvÛoýÖoÅM7ÝTtPFGD¦¯è€ƒ·|ùòy†éíííú5;}îÅ‹ÏØ§··wÞÿgÃ1Ç3ïŸ{Ñ¢EE—Ìc=E† 4„a( aJC€Òè+º`a{×»Þ¿ú«¿ZtÓºå–[bóæÍ]½æ{Þóž8å”Sfì÷àƒÆUW]5c¿ßÿýßã?¾¥ÍšË.»,vìØÑµë½å-o‰ÓO?½k×› wÝuWÜtÓME—PJ=ôPœuÖYE—1­ÁÁÁ®_ó¾ûîëø¹fìså•WÆ–-[·¬Yµsçή^ïé§Ÿž÷ÿíT*•¢KŽ{öì)º„ÍÆ©Óç™±O¥R™÷¿ÇÙ¨oïÞ½óþ¹GGG‹.˜Ç²”RÑ5P'˲s#b}Ñu@·\zé¥ñ±}¬è2¦õ¹Ï}..¼ð®^ó»ßýnœ}öÙ3öÛ°aCœsÎ93öÛ²eKœ|òÉÝ(mÖ¼ímo‹[n¹¥k×»ð cíÚµ]»Þl¸ä’KâüóÏ/º ¨¹(¥´®è"f[OÑ@§„a( aJC€Ò† 4„a(¾¢ ¶Ë.»,î¹çž¢Ë˜ÖÆ»~Ío~ó›±yóæû=üðÃ]ïoþæoâ…/|áá–5«{ì±®^ïê«¯Ž§žzª«×춻ᄏèJkÉ’%±råÊŽú>üðÑRšÝ‚æÈÑG'tRG}yä‘Èó|Ú>Çw\üâ/þâŒ×ŠmÛ¶utßùnÑ¢EñªW½ªè2ºæ‰'žˆýû÷]”J¶Pþñh¡È²ì܈X_t0›V¯^›6mê¨ïÒ¥Kchhh–+šo}ë[ãæ›oî¨ïqÇýýýÓö9ÿüóãâ‹/žñZ÷Þ{oüÚ¯ýZG÷ïV®\[·n-ºŒ®9묳âúë¯/º  ¤Ö­[K–,™±ßå—_<ðÀT47ºùÜ+V¬ˆóÎ;¯£û~å+_™q¬^çw^¬X±¢è2ºbóæÍÆÖÐ袔Һ¢‹˜mV†€Z·n],_¾|Æ~[¶lYpa˜n=÷Š+â‹_übG÷½ôÒKTæä“O.ºŒ®¸ä’K„aàÔStÐ)aJC€Ò† 4„a(¾¢ ŽWt ‡¥§è SÂ0”†0 ¥! @iÃPÂ0”F–R*ºêdYvnD¬/ºè–åË—ÇÒ¥Kgì788{öì™ƒŠæF·Ÿ{ÅŠÑ××7c¿½{÷Æ:ªq¾[¶lY,[¶¬è2º¢R©Ä®]»Š.€…Һ¢‹˜m3Ϩ8 {öìYP!—Nuû¹wïÞݵk•ÅÀÀ@ ]0Ïô]tJ€Ò† 4„a( aJC€Ò† 4„a( aJC€Ò† 4„a( aJC€Ò† 4„a( aJC€CÖÛÛ§žzjœvÚi±xñâ¢ËŽÂ0² 6Ľ÷Þ›7oŽÛo¿½èr tŽ=öØ¸à‚ býúõñá¸èrJ¡¯è(¯_ú¥_šØùË_}}}166V`EP.ú§Ÿÿüç#"âÜsÏG}4î¸ãŽ‚«˜ß„a8dýèGãýï,]º4®ºê*A8H=ôÐÄþÐÐPlß¾½ÀjÊ!K)]u²,;7"Ö]07N<ñÄXµjUüä'?‰¢ËÊí¢”Òº¢‹˜mV†(ÐÎ;cçÎE—P=E²2 P˜c=6>ô¡Ň?üá8ñÄÎåy·ÜrKüË¿üKüèG?š³šî»ï¾8æ˜c¦<¿k×®¸ì²ËâÛßþvìÞ½{Îꊈ8í´ÓâŸøDüÆoüFôöö6œ{úé§ãßþíßâ;ßùΜÖõðÃÇQG5qü†7¼!víÚ5ë÷-ëŸS‘u Û1ǯyÍk"˲†öÇ|NÆiõ^ýêWÇŠ+¦‡U5:å”SZÆ•EÕµjÕªxá _8qHªòÎøo†aT@Ë‹ò&HGEf5kԽ꺻É^µb—ZÆÝ5Ñd“˜Š×¨¥IÝh¢hLûQã†ÚZͽ¹ÙÒ(#FÑøÐè‚D]A˜èû8—ÑÌÐO?òùTu§OSýµ„3¿Óßs(ýüç?/577·ûóGKKKéÁ,3¦l™î¿ÿþý¹hùòå¥ï~÷»eÿ¼Î9çœÒK/½Ôa®×_½ô­o}«¬™xà6Î=÷ܲ¼ïÝwß]Ñë´`Á‚ŠZ'Œו* ±«Õ£OŸ>ñúë¯Ç²eË¢±±1N9å”Ô‘ø¸à‚ ¢¾¾¾S¯ýéOº‹Óì¼qãÆÅW¿úÕ²½ßwÜñ‘«û¶çC‰K.¹¤ ‰òPîuºí¶Û¬P6UUU1kÖ¬8ýôÓcÏ=÷l÷5555qê©§ÆìÙ³;|M p@\yå•qÁ”í=§L™wÜqGŒ;¶Ã× 2$®¹æš8çœsÊ–«’¥\§ñãÇwøšÖéüóÏ/[. ²(Ãð±&L˜C† ‰ˆˆž={ƱÇ›8Ÿýû÷o³=cÆŒ8öØc[­ûúõëWîx­¶Ïtýõ×·Ù÷áÿ†]iû÷jiii“ë†nhóÚýöÛ¯l¹*E¥¬ÓöŸý‡×éùvÇuºÖ!‡Òæüí¦M›bõêÕ­–––Ö}ãÇÏ}îs)bƺuëZ3­Y³¦Í¾ú§*[Ž‹/¾8ºuëVq¹*E¥|;³Nå¼PYjR ò=þøãqÅWÄ”)Sâµ×^‹o¼1u$>…þô§?Åܹs[·7nܘ.Ìv¶Ï4|øðd9¶·eË–6¹ÆŒ“.L…Èa*%ðéQ]ÝözØ<òHœx≭Ûwß}w›;œ|øõåòùÏ>þã?þ#""úôéÓæåÌôá÷:ùä“[n8p`¼õÖ[IrU ëäD€U*•âšk®I TbȆ2 Ù¨IØ= 0 Î<óÌ8餓¢{÷îmö566Æý÷ß>ø`¬_¿¾,y¦OŸßüæ7;Ü_*•âÙgŸ{î¹'/^\–L¨ªªŠ)S¦Ä™gž#FŒøH®ùóçÇ}÷ÝWÖ\Ç||ík_kÝž7o^\uÕU»ü};³NøÃâÞ{ïE‹íò<Û«ªªŠ£>:¾ô¥/ÅÈ‘#?’kþüùq÷Ýw—=|Ú)ûܘ1câÙgŸž={vøšÓN;-þð‡?DCCC´´´ìòLƒ ŠN8a‡¯9ñÄãÛßþvœ}öÙqÏ=÷ìòL¸é¦›ââ‹/Þa®ï|ç;qæ™gÆ}÷ÝW–Lûᅴϫ\¥¥Î®Ó·¾õ­øò—¿wÞygYrEDüøÇ?ޝ|å+î?æ˜câòË/³Î:+î½÷Þ²å€O»êÔ€O¿»îºk‡E˜~øámî>R)f̘ýúõ+Ë{M›6m‡E˜íÝ|óÍÑ«W¯]œ(7ÞxcÙÖiòäÉ;,Âloƌѻwï]œvî ìr#FŒh³}É%—ĦM›""âÐC /¼°ußðáÃË­Õã?Þæ.+_ÿú×[s÷êÕ+ú÷ïï¾ûî.Ï1räÈ6Û>úhÌž=»Ý\ûî»oôíÛ7Ö¬Y³ËsUŠ­Ó>ûìS¶u6lX›í­SïÞ½cß}÷Õ«Wïò\°;P†ÊîöÛoõë×GDÄi§Ö¦ “Ê¢E‹â'?ùIëö¹çžû‘O ,¨È\©X' :uè,e²¡ @6”aȆ2 ÙP† Ê0dC€l(ÚÔ""N<ñÄèÓ§OëöÞ{ï0 üåjjjâÊ+¯lÝ®««K>E”a€Šp 'Ä 'œÐî¾?þñeN¹nݺÅw¿ûÝ÷/Z´¨Œi€ÝÁÔ©ScñâÅ­Ûƒ j³¿T*•;üÅfÍšMMM±õgííù3 »/e ¢­[·.Î>ûìÔ1 K=ðÀ1kÖ¬Ô1€O™½öÚ+>ó™Ï´»oùòå1wîÜò‚.0dÈ÷ùÙv_Ê0@Exî¹çâå—_nóÜóÏ?·Ýv[466&JŸÜ–-[böìÙmžknnŽ{î¹'yä‘D©€ÝÑ‚ â‚ .ˆÕ«W§Ž]bÆ 1sæÌøþ÷¿Ÿ: ˆ2 PfÍš7ÞxcêÐeZZZâôÓOOØ<÷ÜsqÕUWµyîí·ßŽyóæ%J¹ï|ç;±páÂÖíR©óæÍ‹wÞy'a* 5eøxûí·ãHºÔï~÷»˜;wnê@…©N:K€lÔ¤ì~¾ð…/DKKKDDLœ81qøË=:N?ýôÖí~ýú%LŸnÊ0@ÙÍš5«Ã}o½õV“@×8餓⤓Njw_SSS¬^½ºÌ‰òÔ£GèÓ§OëöêÕ«£T*%LTÙ¶ÿ¬zôè‘0 ;²ý:mܸ1ššš¦€Oe b,Y²$¾ÿýï§Ž]êòË/ÆÆÆÔ1*Ò† Úl_{íµqíµ×¶n4(V¬XQîXkÆ ±Ç{DDÄ{ìáçÍ µýŸë¯ÓÌ™3ãÜsÏM Ø] 2$.¼ðÂÖí9sæÄ’%K&ªl§žzjŒ3&""zõê•8 Ù~šššvxV`÷¡ ”ÝÓO?Ýæª®7nŒÙ³gÇÝwßÍÍÍ “Á'³bÅŠX¶lY›ç^{íµ¸é¦›âÉ'ŸL”  òÝvÛmqÉ%—Ä AƒRGÉ•W^?üáSÇàc\}õÕñãÿ8u `7ñöÛoGsssëCÇŽ·ÞzkëþóÎ;Of;K—.m³}饗¦ ÂíhV®\© D„2 ÀôéÓcýúõ©c@—ù×ý×øçþçÔ1²³jÕª8î¸ãâ›ßüfœqÆѽ{÷Ô‘*Ú~ô£xÿý÷ãòË/Ñ£G§ŽCf̘MMMqÙe—µ^µ`WyóÍ7ã²Ë.‹›o¾9ªªªRÇ©xßûÞ÷â”SN‰±cǦŽÂX' 3”a€d/^çœsN\tÑEQ[[ÛfßêÕ«“d6lX‡_ ºï¾ûâhÝÞ°aC¹bÅ–-[âöÛo;î¸#z÷îÝfßyç—ì®1 hóy•kÝ*yî¸ãޏóÎ;?²N7n,[`÷qË-·Ä£>—_~yŒ9²Í¾+V$É´hÑ¢xì±ÇZ·W­ZÕúëM›6µÙ÷ú믗-׺u뢮®.¾øÅ/ÆYgÕæÂµµµ1yòä²eÙÞÂ… £OŸ>­ÛåZ·Å‹g·NÛgvoÊ0@rMMMÑÔÔ”:FDì¸Ì±qãÆä…†R©ï½÷^›ç𛛥IWZÊqv•ŋǗ¿üåÔ1Z]uÕUqÕUWµ»oíÚµqÌ1Ç”7ÐvZZZbæÌ™1sæÌ6Ï80Þzë­$™®¸âŠ$ï{Ýu×Åu×]×î¾J]'€T§¥ @6”aȆ2 °ËmÙ²¥ÍöÒ¥KcÅŠ±bÅŠ¸ë®»¥ªLþ¬ …BëgµbÅŠ8üðÃ%c{Ö Ò©Iøô»å–[â{ßû^ëö€Z½ï¾û¦ˆT±~ùË_Æo¼ûï¿DDôìÙ3zöì™8öë_ÿ:–/_C† ‰ˆ®Smmmªhì&jjjâꫯnÝ®««K˜ ¼”a€]îºë®‹îÝ»ÇE]ýû÷O§¢½÷Þ{qê©§Æ~ðƒ8î¸ãRÇ¡ï¿ÿ~üÍßüM\sÍ5qâ‰'FUUUêHìfjjjâßøF‡û_|ñÅ2¦€<ÝÿýÑÐÐݺuk³¯T*¥ˆ@'U9`«,UUUFÄ­©sÀ®Ð£G˜0aB›âÀªU«âå—_.{–~ýúÅAÔº½råÊøÏÿüÏÖíqãÆÅ>ûìÓºýüóÏÇúõëËšñ3ŸùÌGîœ3kÖ¬6¹GŒK—.ÝåYú÷ï#GŽlÝ.׺å°N#GŽüHÉkáÂ…±víÚ²æ`÷²çž{Fsss»ûî¿ÿþ8ãŒ3Êœò3wîܘ>}z»ûþñÿ1nºé¦2'è×—J¥IbWsg lš››ã©§žJ#""Þ}÷Ýx÷Ýw;ÜÿÒK/•1Mû–,Yò‘çššš$‰xçwâwÞ)ûûæ°N¯¾új¼úê«©c°›Ù¼ysÌœ9³ÍsMMMñ³Ÿý,ž|òÉD© k×®[o½5n¾ùæÔQØe€Ì´´´Ä¹çž›:díë_ÿzôíÛ·u»T*ÅSO=ï½÷^ÂTt†2 °Ûyúé§SGàªN:K€lÔ¤@ÇÆŽ“&MjÝîÛ·oÂ4é)ÃT°Ï}îsqà 7´»oÍš5ÑØØXæDiU§À's饗ÆêÕ«SÇ(+w†¨`þóŸã±ÇkóÜ+¯¼3f̈çŸ>Q*€tªJ¥Rê l§ªªêˆ¸5u ;×—J¥IbW«N:K€l(à e²¡ @6”aȆ2 ÙP† Ê0dC€l(à e²¡ @6”aȆ2 ÙP† Ê0dC€l(à e²¡ @6”aȆ2 ÙP† Ê0dC€l(à e²¡ @6”aȆ2 ÙP† Ê0dC€l(à e²¡ @6”aȆ2 ÙP† Ê0dC€l(à e²¡ @6”aȆ2 ÙP† Ê0dC€l(à e²¡ @6”aȆ2 ÙP† Ê0dC€l(à e²¡ @6”aȆ2 ÙP† Ê0dC€l(à e²¡ @6”aȆ2 ÙP† Ê0dC€l(à e²¡ @6”aȆ2 ÙP† Ê0dC€l(à e²¡ @6”akðX IDATȆ2 ÙP† Ê0dC€l(à e²¡ @6”aȆ2 ÙP† Ê0dC€l(à e²¡ @6”aȆ2 ÙP† Ê0dC€l(à e²¡ @6”aȆ2 ÙP† Ê0dC€l(à e²¡ @6ªÎ?ÿü¿ˆ«#bÿÔa:¡ÏFÄiÅbqmê0í) #âEÄ_GDÕÎþþ-[¶ÔnÚ´©G—ëÀ† â©§žŠ¥K—–ë-wÚ˜1câÐC=öØ#u”U*•â7Þˆ9sæD©TJ§]½{÷ކ††0`@ê(ÒÜÜ¿ýíocåÊ•©£tè°Ã‹ƒ>8jjjRGùX[¶l‰W_}5ž|òÉÔQ:Ô¿ÿ¨¯¯¾}û¦ŽÒ)k×®ßüæ7±fÍšÔQÚÕ­[·8òÈ#cÔ¨QQ]]ùØÍ›7ÇÂ… ã…^H¥Cp@y䑱Ï>û¤ŽÒ)ñÐCņ RGi×{ìõõõ1lذ¨ªÚéC§²kii‰gžy&^yå•ÔQ:4jÔ¨8ì°Ã¢G²R~b¥R)V®\<òHlÞ¼9uœví½÷ÞÑÐЃN¥SÖ¯_O<ñD¼ñÆ©£thüøñqÈ!‡D÷îÝSGùX¥R)–-[¿ýíoSGéPß¾}£¡¡!öÛo¿ÔQ:eݺu1gΜXµjUê(íªªªŠ‰'ÆèÑ££[·n©ã|¬Í›7Ç’%Kâ™gžI¥CŒúúúèÝ»wê(²fÍšxøá‡cݺu©£´«{÷î1iÒ¤8ðÀ³9vzá…bÑ¢E©£thøðá1qâÄèÙ³gê(ò_ÿõ_ñðÃGKKKê(íêÑ£GÔ××ÇСCSGé”7ÆïÿûŠŸN˜0!öÜsÏÔQ>V.³Ñúúú8p`ê(’Ãl´®®.>øà,Žïs˜î·ß~Q__ýúõK¥S*}6Z]]'NŒƒ:(›ãûJŸ<8&Mš½zõJ¥S*}6Z[[“&MŠ#Fds|_é³Ñ<0?üðlŽïW®\¿ùÍo*v6º×^{E}}}pÀ©£tʆ âw¿û]EÏFÇŽ&LˆÚÚÚÔQ>V³Ñ>}úÄäÉ“£ÿþ©£tJSSS<úè£;ˆ8âˆ#b̘1Ù;UúltÀ€Q__}úôI¥S*}6ZSSÓú݇Ž6mÚÏ?ÿ|EÏF‡'NŒ½÷Þ;u”N©ôÙèž{îÙú݇ä0=ztÔÕÕ™v‘^½zE}}} 4(u”NÉa6zè¡‡ÆØ±cÍF»ˆÙhת®®ŽÏ~ö³O 6lDDTþð#š#âÆb±xýÎþÆšˆ¸)ò(Â|à³ñµˆøŸ©ƒtàìˆøâ'ýÍÕÕÕe|ÔÖÖÆôéÓ[–-[6§Tÿ ×ÖÖv;ê¨£Ž«ÎáÜÛxàñÎ;ï,X°`Á›©³´çˆ#Ž8xÈ!y|#!ZÿŒ¾ÿ‹_üb^ê,íéׯ_Ï#Ž8bZê;cܸqñæ›oÎ_¶lYENÙ0`@ËØúÔiÓ¦½ý«_ýê¹ÔYÚ3lذ~ãÇŸ˜:ÇΘ8qbéõ×_¼±±±9u–öL:uÊÞ¹LƒbëuòäÉËæÎ»8u–ö|ðÁŒ=z\êU[[S§NݼtéÒ9---w†²ºººjêÔ©ÇÕäÐÐÜfèСqØa‡-~æ™g–¥ÎÒžºººƒ†~`êU[[ÇsLó½÷Þ[‘g(÷Þ{ïÚ†††cSçØ£GŽ+V<÷òË/¿:K{&Mš4aðàÁyL,£õø~Õ¿ÿû¿ÏO¥=ƒî}衇6¤Î±3êêêâÏþó¼+V¼Ÿ:K{Ž:ê¨ú¾}ûæq¶7¶Y§L™òÆC=´0u–öŒ5jàÁ|hêU[[ [–-[öغuë6¦ÎÓž©S§Nß3‡3iÛ <8Ž<òÈ?Í›7ïÕÔYÚsÈ!‡Œ5jÔèÔ9:Ël´ëå0šK[+ò˜Nœ8Ñl´ 5446pàÀÿ–:GgUúltèС}'L˜pdê;câĉ¥åË—?¾jÕªJÕ«W¯<®•?3fÌþcÆŒŸ:Ggå06mÚ±ÝsøÒ6C† ©ôÙ訹X,6¦ÒžB¡0;">Ÿ:ÇÎ:th±T*UäEX …´ˆ˜Ùœü©®®n<ãŒ3þªX,nIåà …BuD<“RgÙcÇŽ½ú‰'ž˜™:G{ …™qOê;£{÷î/™v­úúúK^|ñÅÇRçhO¦³ÑGJ¥ÒߦÎÑžŒg£_(‹ù¥ãLg£÷•J¥KSçhO¦³Ñ ÷wwB±X\Ÿ:K{2Þ0gΜ¥ÎÑžLg£ËÍF»V]]ݿ̟?ÿÁÔ9Ú“élô© žöˆE‘ßlô¼%K–TämËÌF»–Ùh×3íZf£]Ël´ë™v-³Ñ®g6ÚµÌF»žÙh×Êq6ãô0j"â"⢈Èá*¥ˆø¿QÁCÁb±xo¡Pè‡GDWôX·¥Ñ‘b±¸®P(œçFÄ^‰ãtƦˆøE±X¬È"Ì6×EĆˆ•:H'-ŽˆÛS‡èH±X|cÛÉŠˆ|n%6³R‹0Û|5"^|Ššó#âg©Ct¤X,>_(þ6"þ:"*ÿ~Ö«#â§•Z„ÙæKñ•ˆÈឌ¥ˆx4"þ-uŽ‹Å_ …³#bJäqì´"*ûØiã¶ÿç ‘ÃU:7GăÅbñ¡ÔAvà–Ø:Tyü}-"~š:DGŠÅâ»…Báäˆ83ò8¡¶1"î-‹Y„ÙæŠˆX¹\ÅgADÜ•:DGŠÅâ+…Bᔈ8-ò ­ˆ»*õdï6F^_ôx""îO¢#ÅbññB¡ð±õÎÉ9œô}7"Š•x²7"¢X,nÙöyæ4}("H¤#Ûf£="âˆÈãØé͈øIêÙ6=%¶ÎFs¸Céæˆø·b±X‘'{·¹."ÖGÄA©ƒtÒ+QL¢#ÎF×GÄÏ*õdï6_ˆeq@ê ô\DTä—"ÚÌFOŠ­çD+Ýšˆ¸½R‹0Û|)".ŽˆýRé„RD<³SéȶÙèY±u6šÃñý;QÙÇNÌFψ^©ót–ˆøßÅb±"/´Í-±õ¸~\äq|¿,*{~¿*³ÙhKDü¼X,Vdf›+bëìaxâõRDÜ™:DG2œ6E³Ñ—"b`ê ôûˆ¸7uˆŽl7=.òøîCclýîC¥ÏF/Œˆî`d6ÚõÌF»–Ùh×3íZf£]Ïl´k}âÙhUÞá Ú•Ãf "”aȈ2 ÙP† Ê0dC€l(à e²¡ @6”aȆ2 ÙP† Ê0dC€l(à e²¡ @6”aȆ2 ÙP† Ê0dC€l(à e²¡ @6”aȆ2 ÙP† Ê0dC€l(à e²¡ @6”aȆ2 ÙP† Ê0dC€l(à e²¡ @6”aȆ2 ÙP† Ê0dC€l(à e²¡ @6”aȆ2 ÙP† Ê0dC€l(à e²¡ @6”aȆ2 ÙP† Ê0dC€ÿÇÞIZÞùÿ>}@ÓœEq4 q D¢„q)9F€T€J·Pk¼vxbvìÙñ1މ‰ux<ŠñzvÖ±k¯G³3k{û¯×ºR‚„ÎB „@J!b@ j’äjhúz÷7›ªnè†î~ë­ú|‚·«*³:ó›ÕÝüÞ|¾ïÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­¡ @k(ÃÐÊ0´†2 ­±¤é³•RÞ‘dU’·WU5¹ûÿ—$‡&¹*ÉÍUUmØÍ`Aêö‡$ùpê¹ý¿LMŒý×mÜÿíÔ3ûUSc?Ùý)`Ç zý“|0É'’|z|rú?muÿ²$ßÏh柜¾w÷§fS†WJ91õBšUIÞ:ºù¾Wøö’üÃÑñD)å3I®L2]UÕ¦]›–n¸w’÷§^ ôÞ${Œîúo¯ð[NLògIþ¬ÛÞ™z‘ÐÕScïꬰ#½Îò$S©ß§¾4Éž£»®}…ßrB’O&ùä ×ùAfŠ1íâ¨À6(Ã(¥“äãíó:æ $¿=:)¥\“䪪ªnß9)`áéö‡{&¹,õÌþ¾$Ë_çC6:þu·?¼5õ"¡k¦&Æß)A` z=’L¦žyߟdï×ùPo1èunËh柜~t§^“2 °Û”ROrEê‹gíä‡?"É&ùÃRʃI®N]Œéïäç€y§Û.Irqê™ýCIöÛ‰_’œ;:þ÷nøõÔ‹„>751öäN|x™A¯³8ÉE™™yØÉOqöèø·ƒ^ç›I®LòÙñÉéÁN~`e`—*¥”䣩O,ž—dÑnxÚc“ü³$ÿ¬”rOFÛSWUuÿnxnh…n¸(Éù©gö¤ÞuWÛ¼é¢$ÓíoL½Hè ScÏí†ç`ô:%I'õÌû±$]”äÂÑñ׃^ç¦ÔïU_;>9ýÌnx~XP”a€®”²’¦>±xqšýŽ“’üË$ÿ²”rgê“WWUõpƒ™ 1Ýþð¬Ô3ûIo0ÊÒ$—Žºýá—SÏí_žš[Û`.ZjÐë¼333²$É¥£cí ×¹.õÌû¥ñÉéÌó†2 °S”R–'™J}bñÒ${6›h›Nÿº”rkê+Ï~ºªªÇ›»V·?œH=³¯JrLÃq¶e¯Ô;Ë~4ɳÝþðÚÔ‹„nšš[ßh2æ´A¯ó¶Ì̼oi8ζ,KòáÑñÜ ×ùbê™÷†ñÉéu&€S†^·RÊI&“|"ufïfm·’äÜÑñïJ)_O}²ñsUU=Ùd0ØYºýá[3³èĆãìˆ}“üýÑñd·?ülê¹ýëSc›MÀœ0èuŽËÌÌ{rÃqvÄ>I~}t ½ÎçRϼ_ŸœÞØh2he`‡”R'¹(õIÅ%9 ÙDoØæ×sQ’¿)¥Ü˜úd㪪z¶Ñd°ƒºýá‘I>žzn?­á8;ÃI~kt<Öí¯I=·ß651V5š €ÝjÐë¼)33ï ÇÙÆ’üæèx|Ðë|:õÌûíñÉi3/¼eà5•RJ’óRŸTüh’ƒ›M´Ë,MrùèÀf IDATx¡”òåÔ'¿\UÕÚF“À+èö‡‡&ùXê[ÏI½#ê|´"Éuûë“\551vW³±ØU½Î!©ß£þD’weþμ‡&ùÝÑñóA¯su’«Æ'§¿×l,˜»”a€WTJygêÌÇ“ÑpœÝm¯Ô'U?šäÙRÊRcn¬ªj}£ÉXðºýáX’¤žÛ/L½óéBrT’?NòÇÝþð¾Ô3ûUSc÷6 €7jÐëäégÞwgáͼoNòGIþhÐëÜŸÑÌ;>9}O³±`nQ†¶PJ9%õIÅUIŽm8Î\±o’ÿntI>zfoêNINHòÉ$Ÿìö‡?ÈL1æ¡FS°Ý½ÎÞIÞŸzæL²G³‰æŒã“ü‹$ÿbÐëü03Ř›ÍS†RJ9>3˜“Ž3טä·FÇc¥”O§>áxkUUU£É˜wºýá²$—§žÙ/O½“)¯ìí£ã/ºýám©gök¦&Æm6[ô:{&¹,õÌû¾$Ë›M4ç2:þ|ÐëÜžÑÌ;>9ýH³± Ê0°@•RŽLrEê‹§7§­V$ù½Ññ³RÊÕI®ªªê®fcÐfÝþpi’KRÏìL½c);îìÑño»ýá7“\™ä³Scƒfc,\ƒ^gI’‹SϼJ²_³‰ZëÌÑñ¿ zo¥.Æ|f|rú‰fcÀî£  H)åÐ$K}bñÜ$¥ÙDóÊQIþ8É—R~’ÑöÔUUý¸ÙX´A·?\”ä‚Ô3ûG’Œ7›h^Y”äÂÑñ×Ýþð¦ÔsûµScÏ4˜ `Aô:‹’œŸ™™÷ fÍ+›Ï'\䯽ÎÍ©gÞÏON?Ýh2ØÅ”a`ž+¥Œ¥>¡¸*õ¢ÅZÞšäO“üi)¥Ÿ™bÌO›À\ÓíÏI=³,Éa ÇY–$¹tt¬íö‡×¥žÛ¿451öB£Éæ™A¯sVê™÷Š$‡7g!X’ä½£ãßzëSϼÝñÉéçM»€2 ÌC¥”}’| õ‰Å÷&YÚl¢mbtüÏ¥”ï¤>ÙxMUU¿l6Méö‡§¦žÙ?žäèfÓ,hË’|xt<×í¿˜zn¿ajbl]£ÉZjÐëL$ùDê™÷˜†ã,d{&ùàèX3èuºI®LÒŸœ6ó0/(ÃÀ9mæ U”a eJ)‹’\˜z!ÍG’Øh Þ¨%I&GÇ‹¥”ëSŸlìVUõ|£ÉØaÝþð°$K=·ŸÓpÞ¸C’ü“Ññónxu’«¦&ƾ×l,€ÝoÐë¬È–3oi6oÐÁI~gtübÐë\“äÊñÉé;šÛGZ ”RRŸL\•úäâŠf±‹ì™äƒ£cM)¥›äÊ$½ªªÖ5š €WÔíÇS_°bUê]@5›ˆ]äÍIþ(ÉuûÃû“\äÊ©‰±{š°ë z“|8õÌûk1óÎWoJòO“üÓA¯ó@ê 8^5>9}w³±à•)ÃÀVJyG꓊OrTÃqؽöNýg¿*ÉS¥”ϧ>áxsUUM@ºýᾩ/f°*É%I–6›ˆÝìø$’äOºýá3Z$451ö`³±Þ¸A¯³o’¤žyß3ïBó–$ÿ<É?ô:wg¦ó@³±`KÊ00Ç”RNÌL â­ Çan8 ÉoŒŽÕ¥”ϤÞ1fºªªªÑd H·?Ü+ÉåI>‘ä²$ËšMÄqÊèøónøÝÔ3û5Sc4 `û ze©gÞU£{5›ˆ9âmIþU’5èuîH]Œ¹z|rúÍÆe˜J)Çd¦3Ñp涃“ü£ã‘RÊÕI®ªªê»ÍƘŸºýáÒ$ïM=³ É>Í&š[–ñÉEI–?ÿÈŸ=×t–9â£ãßtûÃo¥^$ô™©‰±ÕÍÆx¹A¯³4õÎ/›gÞ}›M4·üz)%ÉÞÿ­ªÌ¼µ3FÇÿ:èu¦3šyÇ'§Õl,ªâbâÐŒRÊáI®H}bñ¬†ãÌE÷UUµrëK)ÿ>É?n Ï\÷@’ÍŘ6 Íºýáâ$¦žÙ?’d¬Ñ@sÐc¿|êwþà·þ˲$¿›ä$ÿù”Sßü·òçr±†—ÛäæÔ‹„>?51ötÃy€lÐë,Ê–3†«_üÃ?ýwlLò{IOòÿ|ø²ÿð§ÿéô»Ž6mLòÕÔ»¤~~|rú©†ó°€(ÃÀnTJ9(ÉGSŸXUUUë;K)+’üöè8t7gk‹¥^`sUUU×t€6èö‡%É9I>‘äc1snÓ/¦×íç+½»_ܸ±Ús«»«SO?²\:õö¼ý´£RJ#纓ôRÏíÝ©‰±5 ç€A¯S’œ™™wE³‰æ¦Õ¿\›o|ñ—™þòck7n¨–m}ÿÊÓÈï?,'Ÿy ™wÛÖefæýâøä´™€]Jv±RÊþI>”ºsQ’%Í&š³~‘äo’üǪª¯õÍ¥”=’|<É$9}gk³ï¥>ÙxuUU?o: À\ÓíOK=³<É‘ Ç™“ª*éßõp®ëþ ý»Îö¼­pødò}9ÿÝ+³lÙÒ]²Ö$馞Û{Sc/6œ˜g½Î;23óÕpœ9©ª’ûîz*_ÿÂ/sÏw‡Û5ó|ø²œ?uXÎ~Ï¡Y¶|ñ®ÙNÏgfæ½~|rÚÌ ÀN§ »@)ey’©Ô'/M²õ•R™qK’O%ù\UU^Ï”RÎM]Šùp”^I•äÛ©·§þLUU7œ 1ÝþðÄÔ3ûª$om8Μµvíú|ó«÷¥wÝóËGžz]±|ù¹ð¢•™¼ü”rè~;9á¼òt’ϧ^$tóÔÄØë:G0èuVffæ=¡á8sÖºµó›Wç›_øeûù ¯ë1öÜkqξä\ðþÃrð{íä„óÊÓI®Mý^õÍã“Óf^v eØIJ){&™L}Rq*ÉÞÍ&šÓÖ¥^Üñ©ªª¾·³´”ò¦$¿“ä%ßY;mLòµÔŸ«ªjØp€]®Û“™Å@ Ç™Ó~õø3é]ww¾~ó½yþùu)%IÊxÄ*IÉig•K/?%o›8bç¿V'ùLê¹ý[ScÞÈ^Õ ×9:33ïÛ›M3· [›o}é±ÜzÃãya͆¤”—O¼¯4WÛø²ªRJrâc¹àý‡gåiŒæh^Á™5óŽONoj8-¦ o@)eI’w'ùD’%Ù¿ÙDsÞcIþÏ$ÿaWîLRJY–äï%ùýXàôZÖ%¹1õÉÆ/TUõ\Ãyvšnxx’+R/:«á8sÞÝ?|$×釹ë·³Å[[,âÙÞ=ÛZ!Tò¦7eò²SÒ9ÿøì¹§ ^_Ã#I®IråÔÄØw›Ìƒ^ç°Ì̼g7gλ¿ÿt¾ñÅGó£ï<ùÒˆZ¶üå%¯VfÙr©]µù¿—¾<äM{åü©ÃòÎwœ=÷Z¼sÂÏ_›gÞ«Æ'§oo: í£ ;¨”R’œ—ú¤âG“Ül¢Vøn’¿Lò骪ÖíÎ'.¥\˜ºóþ$Î6¾º’|)u1溪ªÖ6œ`‡uûÃ’|$õ…+ÎK²¨ÙDsÛ‹/nÈô7ïOïú»ó‹Ÿ?UßøÒ¢Ÿò Ý—úÆãN>,ï¹â´¼bÿÜô¹»ò›ïËÆ ›ò²"L²åʠч½÷Þ#ï¾xeÞ3yr:hŸõ’æ³SÏìWMMŒý°é0Àî7èuÆS¿G½*Éù1ó¾ªõë6厯­Î·¾ôhýÙ 3%—²åè»ù«Ù½˜7·O:—¯ÈÁ‡-Ë·{çû· ²aý¦Ùcíè“™xó§U•,[¾8g]|HÎ{ߊŒ¯X¶‹^á¼ò`’«“\9>9mæ`»(ÃÀv*¥œ™ú¤âIŽh8N¬OòÙ$YUÕmM‡)¥äŸ$ùï“Ðh˜vx6ɵ©ÙÜTUÕú†ó¼¢n¸_ê[W%¹8‰íF^ÃO<—o¸'_ýʽY³fÝK‹}ÊÖ—¿Ýêë%KçŒ ÏÅ9-ǬßùÊêÜvããyv¸ù­Óª.ÅÌ*ÁŒnÝ^¥”äÄ3ÆrþÔa9~bÿ]ðjç¥{2ºÄøä´™€W¤ ¯¢”rJê+É~<ɱ Çi‹ÕIþc’¿©ªê—M‡ÙZ)eï$?õn1'6§-©‹MW%ùFUU›În¸<ÉûR/º,ÉžÍ&j‡ÿø±ô®ÿQîøîC[öS¶yyÜ™ûö[žó/{[.˜:%û-ÕçØ°acîøúý¹ùóßÏ÷º¾qö“Í^)4뾪ªrÔÑ㙜<9ïê¼%K—Úàu;}/õÌ~õÔÄØÏ›¼qƒ^g¯$S©gÞK“ØZd;•äʪªÖ6f{”R.Iò©Mm½Ô‡m{4ɧ“\UUÕ­M‡–n¸G’÷¦¾pÅû“ìÝl¢vX¿~cn¹åÜл'?{h°íâËìËâÎúü¨ãÎS9ãüã³xÉŽ/ÔyðÇåk_üA¾ÿíŸfÓÆÍ×V˜µR¨zy)&U•}÷]–‹.>!_rb<Ðóvª’Ü’ºó驉±_5œØƒ^góÌ»*õ̻ϫÿ’dÃúM¹ó›ƒL_÷X}hM’Ñ®§³Ê.›Ë0e«aV¹)%%£1·Ì̹/}=š‰-*YùŽýsæE‡äÈãwNßèÙ§Öç{ßXï}㉬yvÃe˜dT„©êOf—cJIN>s,ËW䨓öÛ)Yˆ-fÞñÉi3/À¥ À‚UJ94ÉÇRŸX<'vÙÃ$ÿW’¿®ªjÞlE\JÙ7u!æw“ßpœ¶¹/3Ř{›´[·?,IÞ•ºó±$Z;àþŸü*½Þrûí?ËÆM£÷^©üòÒÇdù¾ËrÖE+ó®÷ž”ýwÑn,ë×mÈÓä–ë”GÌ`f].·ªf}=«sì±erò¤œ}αYò:v©YÀÖ%¹!õÜþÅ©‰±çÎ Ú ×1ó¾?»ïÙL_÷X~xÛ0Õ¦ê¥_f—_ʨ3{g˜½ö^’S;åôóÊ~î±K²mÜPåGw óݯþ*ÿüùÙ#í¨S½ôuUU3;ÆTÉaG/Oç²yÇyãY²ÔÌ»Ö%¹1É•I¾8>9mæX@”aXPJ)¦¾Šìª$&YÜh öùQ’O%ù¯UU=ßt˜]¥ÔgJ/KòûI.‰¢ÔŽúAfŠ15œh‘nxzê‹V\‘äÍ Çi• 6å¶[Ì 7Ü“dær¸õÇm•_6ï³âÍæÜÉ“rê¹oÉÒ=vß©’ïy4·ÜpO~ü½‡_Z4»3{¡ÐÌet“ö_–‹.Z™‹/Y™ý÷ßk·å'^Hò¥ÔsûuSckÎ Æ ×9=õûÔ™w‡lÜPåßdúËæ>ÿRᥔ²ÅÎ/3»ÂÌ”c>|YθðàœüαÝZ2ùŃkrÇ×Vç¾þÓ©6V3å—ÌÚ%fVfó×Ë÷Y’³.9$çLšýwQigÛb柜6óÌsÊ0Ì{£Ý>>úÄâ{’,m6QëlJòå$YUÕÍM‡ÙÝJ)'&ù½$ÿ É®¹,îüv[ê“×TUõhÓa€¹§Ûžœzf_•丆ã´ÎÓO¿¯Üton¾ùÞ<õôÚW.ÀÌ*¿$%eQÉÊw¼9ç\rRŽ9qE3áG†«ŸËí_½7w|ã'Yûüº-vƒyy1ffåÐ’Å‹röÙGgòÒ“sì±5÷Úë™$צžÛoššÛÐp˜w½Ž™÷ xö©õ¹õ†ÇsÛM¿Êš§××ãí¢Ù¥—2³Lf>/‹’ãÞ¶N;ÿ yü>¿†»¦ŸÈ¾=ÈÚ5gÆÜYe˜-¿®?–E%o;k,ç]¶"G°o£¯¡¥¶˜yÇ'§Í¼ó2 óR)eY’ËSŸT¼<‰Ë„î¸g’üßIþªªh:LÓJ)$ùÍ$¿›äèfÓ´Ò¦$ßL}²ñ3UU Î4¨Û¾%õ•p?‘äm Çi¥|"7ôîÉ­·þ46nÚ|ÙÛ—½¬3Z)´lùÒ¼£s|Î|÷ 9à fmmý‹òƒ[Ìí7ß›'{z«Ýb¶QŒ™µ[ÌñÇœÉKOÊ™gÅ‹wß•~ç‘A’Ï&¹2É7§&Æ65œZkÐëlžyW%9¥á8­ôó¿{.Ó×=–þ­OfÓÆj‹ÒK)%eѬÝ_f½{îµ$§œu`N}×xö›c»ªlX¿)?¾ó©Üõ­'òÄ£kS¥ÚF&3;Èlš¹ýˆc—ç]—–Sß5žÅKJÓ/¥6ϼW%ùÆøä´™`žP†`Þ(¥,M½ó˪Ô;Á¸<Êëó“$•ä?WUõ\ÓaæšRÊ¢$ïOòI.l6MkmHrSê“×VUõLÃy^—RÊŠ,¬¿?­ªê;ÛûÍ£+WìÀão¬ªêÓ;ðøN2·ÞÅØuvôgsb’·ïšï~í¾9mæh9eZ¯”rz’ßNòá$6§­ª$7$ùT’^å¶K)e"Éï'ù{I¬°y}^Lr]’ÿ§ªªnÓavD)e2ÉõMçØþ¶ªª¸½ß<Ú¡ë…xü«ªÚîG¥”§’ì¿ßf;ú³ù“üÅ.Ì3×üaUUÿ®éÀ¶uûÃEIþqêÅ@çeT×`Ç<ûìÚ|õæûrÓM?ΓO¾°Ì–å—¼´H¨ä˜“ËéžcVÖÊŸþpõ³¹ó÷çîÛ̺µëF½—Y»ÂÌ.ÅÌ*É,]²(çž{l&'OÊQG7úZî¡Ô³øë©‰±_4œe‡”RJÒi:ÇntgUUoï7—RŽÈŽ-ÒüiUU?ØÎÇ>2Éi;ðØm7]UÕÛóþ^Àü2èu̼;ÁsϬÏm7þ*·Þøxž®ßª3*¾Ìú<³î?æ„}óösÊ‘ÇíÓÊŸþ3Ãuéßúdîþî“Y÷ÂÆ- 0³w‹Ù4ë¶MÉ¢Å%ç˜Îå+òæãæÖ®¯-óPF3ïøätÛfÞ7%9®é»ÑCUU=´½ß\JÙ'É;ðøÏUUuÇv>öIÎÝÇn»íþÙ$I)ee’»0Ï\s÷öž`×P† õJ)’äj:GK=—äo“üUUU÷5¦­J)ãIþQ’ßIò¦†ã´Õ—«ªz_Ó!v„2Ì«S†Ù©”a^2 ÌqÝþpu’ƒšÎÑF?ûÙ“é]ÿ£|û–²~æ™ËÞn«³ù¶$K—-ÍÉg“SÏ;>cÏs×­]ŸÝþP¾ÿ­Ÿä©ÕÏ%©¶Ü-æ¥b^~ûÊ•‡fòÒ“sÆGeÑ¢®Žš.™šûJÓ!vDùÿÙ»óè¸ÎûÌóß÷½U…})¬Ü%’¢(’"µ[’M[J”ØôÂØ9ÉL<™égNÒI:ÛtÏéLÒ§g¦§·xÒ9éØé“Œ“9q’NâLÒ‰í0¶é}£mÅ’HqEQ”ÄE܉}ªîoþ¸·6”Ѝ žOR…ÂŽo]d¼Åû¼sO_OzUôÓfö' ÝØ9÷aàS‹Øÿ'Ììç¸ïŸ\ľWº0³o,dC½.EDDjOßÁ½šóÞ¢‹¯ŽqèóWxþPù¼áøòLY#Œ+ ÀÔÕ{v<˜e÷c´wf’~·ÅÌtÈKÏrô{}ô_›šÕ 3·!¦<³q[ {ßßËžÇ; ÍyoÑwî;´Òæ¼ÿ ðŸ“Gý_föoº±sî~àÈ"öÔÌî_à¾×5 ­ >7ι?~j醳ìü¨™}&éAˆˆ¬f©¤ ""rNz+ЫÀþØÌ†’ÌJgf}Ào:çþQCѯïHvT+Ž~EDDDDj×à‡“ÄJ†ÆsÏžã _xS/^)`¼“Œ£­«™=︋ÜI¦> …hj€KÜûö­ìz| çN]áè¡3\8}%n…ÌÃ/Ã(-vêÔ5N½x…ÎÎfÞýîüàm§©©.¹'³2iÞ.""""2?Íy! ãO÷sèsW8{j¤pñÞÅÓÞY!˜²F˜öÎ »ëäžÚÉÔùâþjArì|8Ë·³\83ʱ§û9{z$ Â8ÃÌÅ÷ã©oá6„ gFùËÿ<Â?9ÏÛßÓËcï-ôSZi4çY¡†‘Z 7&îkÀÇ€0³Ú¸f1³ð×À_;ç" Å|¨%‰––~EDDDDj×ataЛ›âë_}‰/~é$}7Æ*0¥ sÛaplØÖËîwleÓö5Åv˜\„`æ³a[/¶õ2pm„ãß=ÃéÃçÈMç*B1.ÆX±5ÆÓ×?Ƨ>õ û·‡Ù»w+ûÞ{/6f“~:+Á¹ý{²ýIBDDDDd™ÒœwÆGr<ý¥«|ç WêŸÁǘBØ¥2S‚ÙxW3»í`Ó]-ÄS^Â|²Ïg)­ßÜÌúÍÍ õOsâûýœ:2ÀôdH8;ߺB£ƒ3|ñ¯.ð忹Èý{;x×Ö²~KSÒOg%8×¹ïæ¼""""+”Â0""²â™ÙçÜe`mÒcY¦&€?>nf'’ÌjafÏ?åœû5àç€_Ö$;ªem1Å"""""²²(üþ^}€ƒŸ?Á¡oŸaj:_Öü^|åç…L*â®6±ëñ­d{Zȇµ±*îB´t6óöý÷óÐíâ¥çÎròéW‹C1ч‹Ã1¥PŒ1=òÕ¯žæ«_y‰{ï]Ǿ÷îäÁ‡ï(‰dý‹ˆˆˆˆÜœþ^~—ÎŽsès—yî7Èå, ÁïÀù(ìâ|Ùçq&ñl¿¿{ɒ튛= Í «Dk{š·¿»—‡ŸèæôÑAŽ¿ŸÁ¾éRSŒ3,Œn KŸ‡aÈs߸Á³_»Î;Zy×Ö°ûñ¼×œ÷&ô;,"""²‚) #""µâ ÃÌvø}àÌL+™$ÄÌ®ÿÖ9÷›Àü*ðH²£ZvúÍì\Òƒ‘%£ðû,fÆ‘çÎsðóÇ9~ür1ôâÊš`Jm0•Ííìxt w?t'™ú4PÛ-0 ¤v>¶•náü©+¼ø¯påµëep­š[à<`pâ…Kœ8q‘ctW¤ IDATžîÞ³o'O>u*xE¿Ã"""""7§¿—g1ƒÿØÏ·\æÌñá¨õÅ;‚ Ôúâ½›u?úZkGš]wpÏýmdêÂp%`æ‘J;v>œeÇCY.¼2ʉï÷sᕱ¨&ZÿÊšbãõ!œ=5Âk'‡iëÌðŽ÷­áíï饱E— ΢ßa‘LÝŠˆH­8 ¼/éA,ß>|ÚÌj¸ ze1³à/€¿pÎ=FŠù1 èÀ–­¶#""""RÛÎÃ@kÒIÚÄø4ßøÚK|ñ '¸zu¼?7ô2_Lï]ÜóèV6n_Sl0Yí!˜ù¬ßÖËúm½ \æÔ÷_åì‰ ä¦ó€á¼U¶Ä„†#Ä€k×Gø¯ö4óWÏòÎ'ïfßûîeÝúö¤ŸÎr¡y»ˆˆˆˆÈÍiΛËñ½ƒW9ô¹«ô_ŸÄ{µÀÄm/…PŒóàã L¡fýæ&î}¤ƒMÛZ(”v†šòαaK3¶43xcŠžàôÑ!f¦£KÌ•(´Ä€a8†ú§ùÜŸãà_^àá'»xâGÖ±öÎÆäžÈò¢9¯ˆˆˆÈ ¦0ŒˆˆÔŠÕþÅð)àãf¦•K–93{xÚ9·øgÀ?º“U¢ôš©aû÷díÀ±çw%=–¤\¹4ÈÁÏŸà›_‰ÉÉ\1Sl)k„)c¼Ã§î¼ww?¼•öÞ躪\¢5^å4w¶ðð{ïc÷“;xåÈ9^~îU&†'*[b<`‡c,4&§s|ù‹/ðåƒ'ØsßFÞûÝÜ÷À¦âÅX«ÔjßMDDDDä¦:÷²¾ƒ{W÷œ÷Âßúì%¾ÿµëÌL‡ø¸íÅû²æ—yÚ`RiǶÝíìz$KGw]´3³¨éDÞP[G†·¿»—‡ÞÕÅé£Cœx¶Ÿ‘Ì8µÄ@Ôã B‡ùœñô—®ñ݃WÙ¶§'>¸ŽÝuhÎ+""""+–Â0""R+Vë—€?>afדŒ,Ž™]þµsîß? ü p²£JÄjýýYM³Ê. 2ƒcGÎsðsÇyþÈyŒ¸ñÅ;p~Þö—Âc - lyp3[ºÆ ¹¼–ĽA&ÅÝneÛ#[¸xú2/?ó*}¯÷—µÄ„ŸZçÁÌCh€qìèŽ9ÏÚµmì{ÿnžxêêëW]Áë•ý{²—“„ˆˆˆˆÈ2·*ç¼'ŸàŸ½Ä©ÃƒÑ´6À`J0•¡˜æ¶ ;ÊrÏ}íÔ5„ù„ŸÐ •Nìz¸ƒupþÌ'žéçÒÙñ¨%¦,Qs Î0çÀÁËLJ9}tˆÎ5õ¼kÿZO M«îRÂ+ûiÎ+"""²‚­º¿`ED¤6™Ù9ç\?БôXªäÿÍÌf’Œ¼5f6|ø¤sî]D¡˜A¢«ž†1³ƒÀê^'é ˜Ù$Kx~̬}©ö½Ò™ÙG&=‘YVM#äÔä ßüÚ)þÃ1.]št™„ñç¢f˜Žõlyh3ëî^‹÷ÑŸÓ¹œB0·Ëš»Ö°æ®5 ^â•ç^åâ‹—s`q0†Ðp„˜'ZB7ô8o\¾<Ä'ÿèÛüÕŸ?Í“OÝþ÷ï¡wm[ÒO§ZVÍﮈˆˆˆÈ[°jþnžÏóô—®ò­—¹~iˆ§¶Þ•0³Za ­ÙØÈ®‡;¸ãîæâœ7 Us»lÜÚÌÆ­Í \Ÿâ…gû9sbˆ™i+†`ÂÐá‰Öƒð†£ïÊ$Ÿþ£×øÜ=Ï£OuóÄ×Ñ»±!ɧRM«æwWDDD¤V9S·¤ˆˆÔçÜW€§’Çšþø˜™}?éÁÈÒrÎm~øj;ä5 ´šþ(©iŽ Ü OzKéÚ•a¾øGùÚWN21ž‹`ʃ0>¾”a<>XwÏ:6?°™ö5Ê|WÓÔØçŽãÜѳLŽNF3CÌJ̰0,}ÝàÁ‡7ñÞý÷±ûMI?¥ööïÉþë¤!""""²œõÜ[ósÞë'øæß_æé/_cj¢TãRÂø ¼ýÅÅ¥¨ŽtÚ³eW+÷>œ¥³·>Ág°úLNäyéè 'Ÿ`th†0 04,Œ‚Hå÷ œƒí´óä‡Ö±óá,®¶—üû­È9¯s®hMzU4jf£ ÝØ9—º±ÿ3ë[à¾=гˆ}¯t >7ι6`Õ$ê€x\IˆÂ0""R3œs¿üˤDZ®ŸþÀÌTÑ»ÊÄobýODm1»ÎR8dfïLz"""""²´€jðBO</üýó<÷ý³˜#jy©Âø²˜R(&ÓTϦÝw°iÏÔ5Õ%ý4Vµ0rååËœ{þU/C/ÅL!e¢¯XȆ YÞû#÷óΧvPW—Jú©,…Û¿'ûwIBDDDDd9ë;¸·&ç¼fpêð ßüì%N>;ÀìKÌ M0s[a ¹5ÍŽ³Üs–úÆ ™' @t9wz”žéãÊ…‰(cq&oq@fþ–žîõ <±-½»‡º†šü9þXç¾CšóŠˆˆˆ¬` ȈHÍpÎ}øTÒã¸þJ«€sî)àW÷Sh¯^ù>nf¿šô DDDDDdé86ð4ðhÒ㸦§r|ûk/òùÏáõóý•­/qø¥Ø3+ÓÒÛΦûï¤wÛ:|P+S»Ú1te€óÏŸåÚ™KX>,†^æÄ”Â2MM~ð=»xÏþûéî­©…Y7ïß“=›ô DDDDD–»¾ƒ{kfÎ;5‘çû_½Æ7ÿþ2W/LÌ»Í|Aï=ë¸÷‘6ooÁûÚ®Y‰n\ä…g8srˆüLX ÁXþ怺†€ÇÞÝÃ?²Žîu5Õð³¹sß¡³IBDDDDnÂ0""R3œsÛSIã-ÊŸ& Jz0²<9ç¶¿ ü4ЖðpÞª˜ÙŸ&=YzŽ üðóIã­è»>ÂÁÏá«3::] ¼Ì ÂÌn„ñ§ë®ulس™¶µÙ¤Ÿ†,ÀÔØ$—ŽŸãÒ‰sLOUb !˜Y C¼ƒGßÊ{?ô;÷lLúi¼Uû÷d;’„ˆˆˆˆÈJÐwpóÞ¸2É·þþ2Oé*cù›nçøÀƒ0©”cëÎVv=ÜA÷Úš*Ç©Yã9Nääá~ÆFr Ä@ô³ßùH–'?¸Ží´ãVvÞi sß!ÍyEDDDV8…aDD¤f8ç<04'=–[Ðüðûfv!éÁÈÊàœk>BŒ¹;ÙÑܲûÌìXÒƒ‘¥wàØÀϘô8nÅ‹Ç^çóŸ~Žg¾{†ÐïãðK†q~þ Lª!ÃÚ]w°öÞ;©k®©•SW0rýåK\<úc7oˆ‰d,þ:aÈ[ºyï‡àOí$I%ýTnÅ×öïÉ>•ô DDDDDV‚¾ƒ{Wìœ÷¥çùæg/sâûy³ËÈʃ0Íiv<ØÎ޲46¯È9Ϫæ×N sâÙ®^_P ¦`ÍÆÞõÁu<úT7™ú  £½í¾Ö¹ïæ¼""""+œÂ0""RSœsßö&=ŽE8|ø 3›¿cZäM8ç°øà=ÀJYƒgh1³\Ò‘¥wàØÀCÀ³Ic¡ffò|ç+/ðùOæµW®á☨ÆWaÊZaœw4v¶±fÏfºïZ‡O­È Bd×û¹|ü5^½‚…ae+ŒÍĄŶ˜–Öz~øý÷ñž=HGWKÒOc1~{ÿžì¿Lz"""""+AßÁ½+jÎ;=òÌ×®ñÍÏ^æò¹ñ}O4õut¯k`÷Û:ز£• X)ÿ,)oæÚ¥ N<ÓÏ+'‡ÉçlA€†¦ïëå]XCçšµÈowî;¤9¯ˆˆˆÈ §0ŒˆˆÔçÜLjËY>ff_Oz0R[œsÛ‰šb~Šåß’ôŒ™½-éAˆˆˆˆˆHu86PŒé¤ÇòFúoŒð¥ÏæËžgxxbNó‹‹C0øR Þƒ÷dï\Cï½›iY×™ôÓ%45:ÁõÎrýÅsä&§‹M0!˜ø±òæ˜ÀãïÜÎû~ìa¶ïÞôÓXˆŸÜ¿'û©¤!""""²ôÜ»"æ¼צøÖ?\æ»_¸ÊøèÂ׫óÞ±eG+»ßÖAï†Æ%¡$m|$ÇÉÃý¼px€‰E¼FœƒÝuðä×±í¾¶%ámó“ûiÎ+"""²Â) #""5Å9÷à“Iã&?þ‹™½–ô`¤¶9çÚ€ÿø%`KÂù™?4³ŸKz"""""R=Ž <Ü—ô8æóò ùÜß|Ÿï}óT´úé|·Á8ï ê2tîwiÑA«I˜ËÓÿòë\?ñ“ýÃqð¥²fþ LÈÖ»×ð¾„w<µ‹TzÙ¶íØ¿'{*éAˆˆˆˆˆ¬}÷.Û9ï™Ã|ã3—8þ½þ7~Ô7ìx Ë®³4µ.ëœÜfùœqæäÇŸé§ïê䢾wÝ<ñÁu<òƒÝ¤3~‰Fø–íèÜwHs^‘Na©)ι=ÀѤÇ1Ë)à÷€?5³±¤#«‹sÎ jLz*ááÌöófö‰¤q«âs›IzoAÞÌf–òιÅt¡›™M-bßu€[ü¨–…E=×ÅrÎ,ó•çÞÄŒ™å“„ˆˆˆ,Çþøé¤ÇQÏåùîWOò¹¿þGΜº\ ½Ü¬ý¥üñúl+»6“½k~ù†¤JF/ÞàÆ ¯2|îê¼a˜ò†,Ç„!íÙF~øCñž}˜öÎeUð:´îß“ “ˆˆˆˆˆÈJÑwpﲚóÎL‡<÷ë|ã³—¹øêâþ™º£»Ž]wr×®6R©•úÏ1r»\¾0Î Ïösöô0‹¹Ô°±%Å;ö­áû×í®[º.ÞÐÚ¹ïæ¼""""+œÂ0""RSœs)¢úéÅ\€½ øðqàK¦ÿÁ•eÀ9w/ðËÀ?ÀÛÌ왤q«œsûˆ~ÏWª?5³,ÕÎã ÌÄ"¾eÊÌüßnçÜ °":Ö籨çºXι_~s©ö_ÿÜÌ~7éAˆˆˆÈÒ8plà—ˆŒHÔPÿ_ú»gøâ§Ÿe o, ¹Ä/.»à=ÎÍ}¼yã:vm¡y}wÒOC–¡é‘1úO¾ÆàKç §§ç6ÅÌ ÃB2©Àóö§vòþŸxŒ»v®Oúi|gÿžìÞ¤ñV8ç2@GÒãx †Íl|©vÏÛÛñ-ãf6¼À}7°rçìKµˆ…^—"""µ­ïàÞe1çì›æÛÿp™ï~þ*£Ã _Í9ØtW »ê`í&5ŸÊ\£Ã3¼xd€—Ž25¹ðuͼwìy{O~p[ïm]Â.Øw:÷ZÑs^‰¤’€ˆˆÈídf9çÜqà‘„†0ü ð{förBc™—™~Î9÷ÀÏ¿lJh89àxBÇ‘äNò௞ºÄ?|ê{|çË'ÈåÂÊæç¢ðË<÷ƒLšÖmwоc3™Ö&€èûEfñ t=´“Ž=w3|æƒ'_ejh\ˆsó!„çÀ¼ƒœsär!ß:xŒo}þ(Ûv­çÿÃã<þÔ.‚Tb­C‰þ®Þ&o¾žô Þ‚,åB>µˆí?üü·ý à“‹Ñòñ£Àg–hßz]ŠˆˆÔ¶DÿŽ~íäßøì%žÿNa~ák5fêîÞÝÆŽ²´´EÅój­G™«©9ÅÃïìæþÇ:yåÅaN`àÆ›çÈÃÐxþPÏêcÃÖ&žüà:z²‹TÚWaÔóZñs^çÜ/°²Çû¨™}t©vîœÛ |{ßrÜÌÞ¹À}÷§oi`ËŸë­pÎý>ð“Kµÿ*ø13ûjÒƒ‘…SFDDjÑ’ Ãü¶™ýÛ„Ž-² fÖü–sîià› ãE3›LèØ"""""’œ£@Týj3ã7>ò frù¸å¥‚¹ÙGº­™Ö{¶Ð²m>½>£Œ,„ó4m»ƒ¦mw0~ñC'_aâõ«8æ8âûį7ˆäô‰×ùõ×üo¿ý“<ú;“zG’:°ˆˆˆˆÈ –àœ~ï7N03½ð9k[G†tp×ÎÖb(!Ô”WÀžm÷¶³íÞv.Ÿãä‘^u[@†êõWÆøóßy™ú¦€ûÞÞ¹ôƒ_-ÌyëXÙœõK¼ÿ€ÅŸ–Elë¹ïåf1ÏõV4²²ÏO:鈈Èâ( #""µ(ÉU<6&xl‘ÅJªj`µY¼ý{²cŽ œî©ö±stö¶qõÒÀ7ÁxGúZvn¥a}/8G‹ZUW¤\fM7Ýkº™aäÔkŒ¾|›ÎQ¿D¯?°øsç†ÑÕ›èuš·‹ˆˆˆˆ,Rç¾Cc}÷&4ç…ö® ×/½ùZt67qÏýYÖmj*>¦9¯ÜªÞõô®oddh†—ŽpæäÓSožªê讫ÂènJs^‘¡0ŒˆˆÔ¢$߸H2\ ²XI†·jaµ¹5‡Ià €®µí\½<8§ÆùÒýºžNÚ{€ ±ž\Þ]$·‡kj¢å]¸tŠá£/qÆ9ðàB‡9‹^“8ºÖ´'5Ô)àdRYá›óf»ëÞ4 Ó³¶GÞÕCsk 5ߕۧ¹%ÅýwáljgûßtûlObaÍyEDDDjˆÂ0""R‹Ž9’ùß9…ad%Q3Œˆˆˆˆˆ$á0ð“I¸{m{Y ¥@ ¥0Ìô®}îë4Æm›qOb¨Rƒ¦¯^gäùÉà¼ÃÂR3 PЂt&M[GÓîo ß¿';“ÔÁEDDDDV¸Äæ¼ \»<ÁßÿùYvLg<Ímé*Œj^Ç;÷ÒœWDDD¤F( #""5ÇÌ&s/»8¼Â0²’$õz5àù„Ž-"""""ÉK¬)²{MûÜV˜²PŒ‹o- ?y†Ésiص̚ž¤†,5 ?6ÎÄ /1sõz´òrEøœsV| šƒ®ÞÄZa@m®"""""oEbOwt/¬i#Ÿ7N<ÛÏ+/óÀc]ÜywËLjÙ`ßÏ}çW/Ž/ø{² |­.ÍyEDDDjˆÂ0""R«“L¦Ñ9×if} [d±’ Ü1³‘„Ž-"""""ÉK좃®5m@)ôRùÁœ¦˜prŠñ#'˜êÌR÷V‚–Äš:d²\ž©WÏ1}î"æ‹á+‹Ã0Qð%Á…` ¯Å®µ‰†aÔæ*""""rë›ó.¤¦ÜÄXŽï~õ /äÁ·wÓÙS¿D#“Z45™çij}œ99„Ùâ¾w±¯ÕÛLs^‘¢0ŒˆˆÔªÃÀO%tìM€Â0²$†ÑŒ"""""«Øþ=ÙÇ^6WûØ¥f*š`Þè>Αbì™çɬ[CæÎ¸´ÞZ—76såÓ¯] œš,¾”…®â&˜âëÑÊ_—F÷š¶$‡¯y»ˆˆˆˆÈ-êÜwh ïàÞDæ¼·Ú¶Ñwu’¯|æ›ïnåÞ‡;©onóȤ–˜¯žæ…ÃýLNäoi 7ÃhÎ+"""RCô/v""R«’|cªÖ•eÂ9÷ß#fvpÖãm@k2£ª™7¿<ô Þ‚þ%Þÿ‹;?á"÷ÿN`¥þkÌbŸëbý1pðM·Z¾.&=©ŠÃ$paPך¶YAÀ9zØÆØµÆ® ÆÅ0ódf®^#×?@fã:Ò½]q¨A¤$?2ÊÔk¯ŽA–µ Q|Í9ç0©† k¾‡óß8·ÃX˜qt­I¬&Kêà"""""5"‘9oÇMÚ6î}¤ƒ¾+“\¾0~ÓïuÞqþÕQ®\œàîÝmlÝÞŠ÷šóJ¥ëW&8q¸Ÿ¡þiÂТöÓ›´Â44¥xð]|çKWæ|íf¯Õ*МWDDD¤Æ( #""µêyÀˆ.k©¶¤Ú6DŠœs÷Þ¼gžM’|ÖDÆÌFˆþ[#ó03c Ï™_ª}¯tfv ¸–ô8DDDDÞÄàǪ}Ю޶y[aêšØüîG¸zâ,—¾w‚™‰éRƒÇì0dúü%r×ûIoXKÐÚ\í§!ËMÏ0}é ùþÁŠŒsDâŒ3\àéܹ… í"œœâü7£0Ly;L‚Í0§öïÉN&uðÛìMzoÁÄïÿoYÜù™ZĶ |fqÃYVÆ–pßz]Šˆˆ¬‰ÌyÛoÒ¶Q×ðÁŸÚÌ™†xú«Wž©øºóÑÜÅ{ÃÓǹxnŒ{vgéYÛP¡Ë27>–ãÔ±®^'Ì[ôš1p,_™†ñc÷#<¸·›ñÑܼûK°æTç¾Cµ2çýo¬ì«>»Äû?üÀ"¶]Ķý‹Ü÷r³˜çz+> üÉc))0'"²Â( #""5ÉÌFs/w'pø Sç\7ðïŸ|üðùy6M2 £æ$I$$_WŸ¦¥½‘‘‘©RØÇôè8Þ;ºwÞIÛæu\~î4}'_V7uçg‡b œžfúì|k3éÞn\&ÄS’¤…!¹¾r7ú!_ÁxaÜòBE3LÓ†Ö?~/M­gôÆ@’¡¢¦«7±0LM,``f9`0éq,Wf6Ã3›¦—bß+^—"""«F"Wgê<Í­é9a—Ñᜇ­;[ÙtW G¿wƒ£ÿØGn&*²÷¼pq¨r<DZgoÐÙ]Ï];ÛhjÖœw5ÊçŒs¯ sáµQr3†w<˜ÎbÊÚa6ÝÕÂcOõÐÞY‡ópýÒ̼ûÍödªø,*ÔÒœ÷uàõ¤Ç±\™Ù(ð%Ú÷ôRí»˜Ù)àTÒã‘ÕCa©e‡I& £f©:ç\øeàÿf_1sažoIêuzÞÌú:¶ˆˆˆˆˆ,‰]|ÐÕÛÎèèµbÆ9ÇôÈw„ÒõiÖ>ºƒö훸òì)Æ.^+kùˆÃ0¾t?gúìëí­¤²mÑRº²*äGÇÈ÷õNÇ+ÝÃRqYq†qΑjn ç¡{hÛÔK*ðxïðÞ13:Qúž²v˜®äšajæÂ ‘%öwu¶§nNflh&Îí;Òxpo7Ûv·ñý¯_ãìé‘(Ôåú‹Û¹xÞ;80Å‘§¯³vC›6·JkλZ\»2ÎÙ3ÃLM†XÜã,úðÌ\| míýÁ^6ni*6 9ç™? Ó‘\3Œæ¼""""5Fa©e‡'p\…a¤ªœsï~Ø>Ï—ûÍllžÇ“zê FaÿžìÕÇ.ëª}ì®5mœ}õåa…©‘¨&¢‹9ï¨okbÃ0r©ëGO33217S¼ùáÂñ ‚ö|ScµŸ–T‘MÏ"œœ†0Œš]ˆ-QËKÔãœÃ¥Ú¶ßAÇöM¤2A1}Àt†™ÝÓÕÓšÔÓÓ¼]DDDDä-êÜwèjßÁ½‰Ìy³Ýu\83ZñØÈÐLÜøbqû©ÑÒ–æ~d=W.Œóì·®3Ø?mã©Çøx¾ríÊýS¬ßÔLwOC±SjÏØè ç_adx†0´RPÊ(½F ¼7R™€Ýt°ý¾v‚”/®QxËethþ0L»Â0""""r›( #""µìHBÇUFªÂ9wQæ½o°Ùù›<žÔë4©ßKY~ŽÀ…Aݽ­®Êpqø`²Ð cD!…ÀáãûMk;©ëzƒ¯^døôyÂ|XÖBÙ}fä‡FǧZšpi½_SÂüØ8áÄd)Sh¡t¿ðÚhܰ–ö{©Ž ðxW Áx…®¦GÆ+eœ£µ­‰L]"¯žOâÀ"""""5(‘9o¶'3ç±Ñá™âTÅ Ó×8Ó»¡‘÷}x¯œâÄsýLO…¥¹Ky[Œƒ04.že o‚uë›inIWûéÉš™ ¹riœþ¾IÂТâ[ó.š®zpfQ&€­;ÚÙýHu A± ¦ð^‹‹oG†ç†aZÚÓ¤3‰4 iÎ+"""Rƒô/q""RË’ZÕc­s.mfó/s"ò9çÚÿøEàÍÞe^na­¶#"""""‡÷Wû ]½ms‚,–Ï“›š"ÈÔaÞaæ0O|,ð´n^OÃÚ†^¾ÀÄå¨YÆ•…bÊÛbóä‡Gpu|]x-™»ÒÙôtÔ“ÏSÞ*T ±”=–io¥åž;©oo&øbLD˜òv˜é‘‰â~¢pE¯ÑdœÙ¿';’ÔÁEDDDDjL"sÞŽy7ò9cb"G}CªÔã¬8ÁÁ–mlÜÒÌ©£ƒ¼vz 8¸è¶¬-fj*äܹZÛ2ôô4’N'lÛÄÌèïÆ¹™0½”5À˜‹›aº×Õ³ûáNÚ;2ÅLåG)3_3L6¹V˜3ûiÎ+"""Rc†‘šefýιsÀU>´Ög«|\©qÎ9ü,ðï®~›Â0"""""²\%2?(„aܬ«5¦G&hì®[aâö޲†˜ pX]š¶{î¤~}#¯¼N~xdÖ¾f…bryÂp—JãRAOWÞ" Cl&6ÜŒ IDATa>z ¾¨ÇˆB0Åv ¨«£þÎõ4övJy?+ü¯®\þØäÈ8Pj…Á9ºÖ´&õt5g¹}ùû:Û3Ð`d8GCS ‡#žÑ€¹ŠpL:ãÙõP›¶µpêùn\ˆžb(&š×€÷0>6Ã… ôµÕÑÖV‡×B+Îøø }}“ÌL磰K±ÆJÓÔø±¦æÛw·³vcc)(5+üRþ–Fç ÃÜä5ZšóŠˆˆˆÔ …aDD¤Ö¦úaˆ‚g8®Ô(çÜ“Àï÷-ò[ç„aœsQ`«Ú®™Ù¥Ž+"""""ËSBa˜ÖŠV˜H†iéíˆ[aâfs„ÞGXI77Òºë.&û™|ý ÌÌÌ^µòÃB,geÇ“# £ÛB&n‚qÄ!™žNê×õÎqð…8ðB~)}^~;52j,¾ ͹$›ataˆˆˆˆÈí³¬Â0£CÓô®k(k„qà g… 4ßqÎhnIóÐ;º¹qu‚—_br"Íq\Y0&ÇŒŒN31™£­µŽÆz]жÌäB†F¦˜œÌ†Ñ\Ô{+4ÃÄ?MÛ[¹ã®‚ÀÍ ½‚0̺uÀèðÜ0Ì|íEU¢9¯ˆˆˆH Ò DDDjÝàG8nR­Rcœswÿ øñ[ÜÅ|Í0ë€$–$ÖŒ"""""R´Oöüc}@g5ÛÝÛ:o“ËÔÈxR°¸µ#oŽÀ{ÌB‚²€ŒyÃG]GAK Ó×ú˜¹ÑÃæì·âÃ{Ž0ŸƒÐªù´e¡œÃ΃…¥ŸgôC¥2DåA{ éµ=¤ê3ŸÓüRø˜ýX้)Â0œœ‚îžÄšaŽ$u`‘ZÓ¹ïÐù¾ƒ{«>ç½YÐ`th¦¬±£¬ÆGsSEþËÚb ³§lg=Ïñúk£„fq¦l7„02:ÅÔtަ† ©ÀWïIË‚™ãS9Æ'fâLp²8ãÁà 3è]ÓÀæm­Ô5D ?8ÿü½ƒŠ[*[„ŒåÉçç¾÷‘`3Œæ¼""""5Ha©uI]|¯0Œ¼%ι&à7€ÿ¨ »š/ “Ô볦Â0ι½Àÿ»ˆoùŠ™ýÒRg¹qÎe€c‹ø–)3[pó‘sîûÀb®ÛcfÓ‹Ø~ÅrÎý,Ñ;V‹ÿhf–ô DDDä–~¨šlïh"HäC#N­€ƒ©‘q‚À›aB‹=ÂÀæd¢ÐLÜð‘ò¤z:ñí­ä¯ß ?:^„™sß;|ºry©)0…b– —ÉàÒéègba1ücJ!'sW—!ÝÕAÐÜ„÷¾tqó„_ÜÜpŒ£ñkÊûÅYÔ^”Œšš·‹ˆˆˆˆ,UŸó¶d3)G>W9ך‰‚ 80‹C1T4”Úb(f¼w¬ßÔDwo=¯Ÿ£ïúD±Æç;…ÖGÞŒÑÉi2iO}*O–…™|žÉ™¹¼á}4õuÞEAάx¿¹9Í›[hnËà}yã ¥·RŠ 1³nãPÌèðüÿ,—U3ŒˆˆˆˆÜF ȈH­Kê WV8çœþGà£ÀúÛ°Ë冩µÕvší‹ØþÔR d™ò,îüL-rÿwm‹Ø~5-AÖÉâÎýJבôDDDä-9L•/ rÎÑÙݵk#Å‹9pŽÉ‘‰Š B``ÞXܸ(#á]ñ~‡bï Âõö´M’ëÄfrÎÏ ÅdÒuÂÉ)‰I…bä2i|Scôs ÃèGºâEaPÁ©Žv‚Öâ+‚ðžRø%ˆ/óå·ód¦GƉ_€ñ2¼Ñë£+™f˜óû÷dû’8ðRqÎ= |}ßòÿ™Ù‡—h8ËŽsîÃÀ§ñ-Ÿ0³Ÿ_à¾?|rûþ¿Íì×±ýŠu ¯Ë•î§ÍìO’„ˆˆH‚˜óB{W}W&+œ‰Ã 5yà°BÓKÜS :xÎ á}HgîÜÚBÏš.^e|,`¨ÇÂy3&ÂiØjú'šåÇœ1Cž|¼èƒñ0à Í0Α©ó¬YÛHGw}±ˆ›…^*>\Ŷ8ÇèÐ̼ãI( s¾sß¡Z›óþ8°˜…ÿÒÌþp©Æ³Ü8çîbq [ž1³ŸYà¾;€¿[ľ¯¬²÷~Ø—ô8ªè×ÌìûIBDd5SFDDjš™]vÎ]ÖTùÐj†‘Esν øðØmÚå pyžÇÕ #"""""ËE"ó„®ÞV®]-aÀ194NࣀK`ŽÐ,5nË |) šsPWGª§‹p|‚pt,:àÜ«D Ëæ47â‡G¢PŒTK¥ÚZq™¨ ÆÂ0ºp‡8S|}D·¾©‘ ¥— Š§ÊÆ*Z`‚òÇ}é5ÄŸOŽL”7]l†#©0Œæì"""""·_"gg»o†)7X)ô`…PLY8ÆCÔ©êp}­¡1ÅÖmm NsýÚù|X M¸8Hãâ†MïÀ‚Ð.ç±\õÏŪæ”ºòe-0Ä 0q3Œ7À;::ëèî©'Hù7 ½Ì ¿ÌÝfäfa˜žLOBQ-Îy7O,bû§—j ËT3‹;?í‹Ø6³È}Ÿ[͵àw~V:-Ü("’0…aDDd58 ¼¯ÊÇTFÌ9·–¨ æŸÀmí ¿hfá<'ñú4³W8®ˆˆˆˆˆ,oÉ„azZKZ9œƒñáñ(À€YX0sQLñ~tÆÛ…]4â}ÉGàÌãêñ™4áÄ$6=MáÊWÞ/™ëÒŽTW'áÔ¹¾Áx{Y2ޓʶ´4E-0BXjfâûÑE<¤|c.•ÂAô3‹›~üœ@Œ›Ó3»¦pjd<>Ž_A¢-Û”ÄY©µ6W‘å ‘9oGÏÜæ‘Áé(´bQëee#Œo8\4§-ÌÄs—»8‹¾ÖÚ–¡©9ÃàÀ$CCñ¾ãPLa¡€b[Œß`¸Ð‘7B…b–”s4:\Â,ïðÞ0£ø(4ø83š›ÓtvÕ“Î…ÔyZ`*C/ó…_f‡gæk†I¥=-퉄a4ç©Q ȈÈjp…adrÎÕÿøWD+“Ünçoòx¯O½Á("""""ó9Œ-Õ³B.eÁ—`žàË|ÃÅׂÅ¡uö´ó8UV‹«äŠˆˆˆˆ$-‘9o¶{nØ`|,G>Ok *¦, ½o}ÔcXš( ÌÌj“ñÙlÍ͆†&™œÎG!˜¸fv[ŒÏ8RõŽüL ‡˜¦¼·]¦É“nŽ~~a>j€ñ>^ÌÃF†ò +839<^6Âè5ÑÕ½ke,ˆ. ¹Í:÷²¾ƒ{«>çÍÎÓ ƒÁèð mÙteLzÁÍÓã-ÎTf¬„ð8R)èÈÖ3526>MˆçM…ÀDÔÍ‹RMŽúæ€É¡<CyMyoƒtƒ§±3ˆÞ—0‡,.#õßB€§¹1Ecc‚)´úx¢0”wÅÛ(Ô4èevøeöÛcó4ÃÌûÚ¬ÍyEDDDj”Â0""²$õÆÆ&àxBÇ–eÊ9·ø]à«p¸å†ÑŒ"""""r3‡©ò…A]Ý­Ó0. '4¶7—Z`¼‹ qð%0ù <,cÝ–=–7‡™Çy‹nÍ0ïqQÛKBT6ÄPÞãðé€Ì†µÔõt0uþ"¹Á‘jž¢šáë2Ôm\‡Ï¶caˆ…ÑÅZÄr—¤-„aÂ0þƲeŒg5Âàý6¾Â.åÍ0Añ~)392^v¥P4ž®žÖ$NÓÕý{²—’8°ˆˆˆˆÈ*Põ9o¶{nàÀ9š¦½#SÙ㢄ÅÖÊÊV²àŒYYÂÊÚb™´'ÕRÏôtž©0·Â·ŽÂ1ñc4w§hìH1r5ÇäˆjbnE*ãhéIQ×ì óMi ð`ýl¢@Ll© ê3)‚ ðDe eÞÐKy0¦”¡x[ü¹ÎjŒÊÍoÇ<¯Í*¸Ú¹ïæ¼""""5Ja©yfvÖ97d«|h…a¤È9× ü;àŸA•;' ãœkÚ«tür ȈˆˆˆÈÍT}¾ÐÝÓ2§Å¹¨&ð3•ºÑýÐC8B³(È`eÍ…ûeš¨& Ä࢖‘øÊ¢è~>O85K¸úú9 1…PŒ÷Ž ±ÌÎmä‡}åùñÉjŸ®ÉžÆMk©[ßKˆ# ¼¹¸¨ô3·B&Ÿ'œž‰.ð ÊZ`â Lág⼯¹îoŽñA´Ma;©±éx°®xÑYWoK§Ksv‘¥Sõ¿·;æißpÎ12”‹Ãs›`¼wQ£K´5ÎÊ3q#Œuk–µÅ”…c¼Ãcd2žT>ÃL˜/…k ë ø²Æ锣ks†©Ñþ‹ÓÌL„U>[+“÷޶5iZºS˜A˜/_Jï£\‹¦¹Ôù(ãýÜ—ÙA–ò¦—Òíü¡—âÏ·, “ËãsÃ0 5ÃhÎ+"""RÆ‘ÕâÕiâ(—Dû†,3ιðÏ€CõYó5Ã$ñº^Jà¸"""""²2©ö;{Z*B'ÇÄðÄ<G€Yd0O),c.n…0þž(4ãÈGàÌÇ«±ú(Sh‰1æsä§GðøúºŠ+Qf‘êÊÒÐeâÂe†Ï\ ÌiÕÜ›i\×Më¶; “& òÑZæ!\袌 C±qÈ磥‰ƒÂI/¿Z+ú!‚1ÞS ¿å¡ædŠÛ•·ÄxÇÄÐdißfñÈ]ÜZTuUÿYEªþ÷ö|Í0ÄÍ0Q%šƒ8+4Á”7”‚-…&˜Rp¢,Dã£õ% ¡+fŠm"Fš€04Ì…¸TY3L¡Æ•æKMíÍ _áÆù)ò9›û€¶ž4›êð)·Áq.)j€1JÁƒ ôx\©¡ç&–…^f…g˜u[x|lxfî”—›¼6—žæ¼""""5LaY-Sý0ÌÆ*O–çÜ»ßv$4„å†9jfµ¸ŒÓyà‹Øþù¥È2•cqçgf‘ûÿc qÛÏ]~ªvaqç~¥;–ôDDDä-{˜ê«uÀ†† MMõŒO”š9p01<^a€ ãU£  sÂ2Þ¢p„•‡f ÂBÆ<†EÅ!™b[LÞÈŒNL´µáëÒQàÂE .V)-Z·¬§uSƒ/žeøÜÕÊ«JV¹ºl »ï"ÝÞB>Œ.ŠNµ‹yŠm0Fñ¼»¨æ'ºØ+>ï8?ëóR[OEø¥ìgÌÅgÎã“#Å ¬x5‘ÑÕ£f‘Sõ9o]C@csŠñÑèŸF SŽ‘¡R@8°â‰ZPË[bŠ·qLa>;§ Æ9ðQ›ŒB›õµBp&ç ó†o—*`Jm1ç¿êÈ®Ípíµ)ú/NiÊ[¦±-`í¶ꛣQZÔüb®Øã\Ô CáØŒÇÇçwv åfA–7jŒ)}Ï·ÊŒÏ?·²â|­EU 9¯ˆˆˆH SFDDV‹$ÞàP3Ì*åœÛüð„‡²\Â05ù£™~>éq,Wf–c Ï™ý‹¥Ú÷Jgf_¾˜ô8DDDDjÿžlîÀ±cÀÛªyÜΞÆÏ÷—=â/, 1XàŒ( Sh„) ¾„ea˜Ù¡™0,,wkQ-‰3ðnV[L’™É‘»z ßÜDª£ÑÅAe+åWÍ­¯£÷¡{èØ¶«‡_büú`5Oݲ“jÈгç.ZîX[‚±¸àÅâÀJá±Üè(áàP ü<Á—òÏ+¿^† üìp̬6˜Y0åM¯Û ”7Ã( s~aÛŸYª,Sϰ¸óóÂ"¶ýÞ"÷½šVj^ìër¥û^ÒIZç¾C¹¾ƒ{«>çÍöÔÃ0…Ãh1 Sj‚±B%ž›8+ ±Ä¡˜òÐ V˜±òýù(:ƒ•7Dû³Ð1=bÓFC[P Oø²Æ˜8Ôy6ìl¤ûÎ:^?9ÎðÅ®§V[Òõž ÷4’]›‰B0ùB8©PdóB#jn̘‹~^Ñ9½Y‹ËZ*ÛbÞhÛÙ!Êï—K¨¦V缯Ÿ]Äö‹™ÓÕ‚!w~^[Ķ“‹Ü÷µEl[ íI¢Š®&=‘ÕNaY-†‘%çœkþwàW€LÂÃ2³‘yOâu¹š.h‘[s˜*_ÔÕÝÌ…óýñE Q3ÌØPÔ zG`ŽÐ—µÀÄ™¨D$nˆñŽ ˆZ`Ì;³9¡™|Üã¼E·æmN &Jnø¨­ddºÚIuf£\‹¸P ÇxGCG+[ßý6†Ï_áò3§˜›¬æ)Lœ <Ý»î¤çÞ-XT†` á—BÉA81ÎÔÕ~™™(äaðå'xöç®øy¼Iøe¾àË<ßã½+6Ã_ˆT¸,0Ìàþ=ÙÅ\ð±b˜Ù%àÿIzË•™½BtñÔRìû%॥Ø÷J§×¥ˆˆÈªUõ9o¶»Ž‹¯Ž…<‚cd`¦XqÆÜ&˜8D‹6ÄA˜ŠFoQp&n“™· Æ;œÍÌDùI™ÌÑÐИ ÊBesªx:ÖÔšbÇ;Ú¸2͹c£LŽå«y ç½cíÝ ¬¿»1:wa‚ñà,úa¼#7aŒõå±|©mÇy¢†_öØZ*Ã/o¼méç_yëŒ EM¼…)o¡&[ýf˜ÁÎ}‡juÎ{8ô8–+3{ øÐí{p©ö] ÌìãÀÇ“‡ˆˆ¬ ȈÈjñ20 4Wñ˜ ìÎ9ü4𞄇S0_+ ¨FDDDDD–§ª‡è»{Zˮޜc|p¢,à7Â-AYÈÅ¡·âva1 ãñ>¬Í„-µ[ ĸ²Ê’8±á<Î…cœÇÂ̹83çj7m„Áû¹í.ŽŠÏKaJŸÏ ËAôºðÞ1>\j†q.wWw5×p)Ò"""""K¯êwg»£0LyÛG.21ž£¾!UÙã£&˜B˹Y­/…`‹Q€(o‚‰gÕ6+0S HXY[Lé{ó3Ð~šñfOç†:êš|)ˆQ ÇÄ‹xÇæ=Ml¸»—ŸáâéñjŸÒªhéH³ý±V²kêóÑœ×~qÆÇ‹i`ÆÐÕF®ÏÄçéæí-od™µmY0¦Ð,CYˆ¦òX¥cö;:4S\|$j†±âk²Ê4ç©q ȈÈjr˜ê†aRÀZàõ*SªÄ9· ø-à'’ËM,—0Ì f6]åcŠˆˆˆˆÈÊsÈQÅ÷¬;+Â0¯üš ­77Á€y‡‡]¡EÍ a`s2Þ;|üu+†f¢ý„æ£æó†+´Å`XyXƇc M2ž©®>wŠÖõÝtlY‹ R¥¬F|Š/jhmd×eø¡­¼üåà _¨Ö)]Ré†:¶¼ó^ÖÞ¿3ȇqL”/*íî^ë§ÿ•KägòÄ-/ÎÅm0>¾ 'þܹÒ×ýÜÏË]*Â/oòÌÞnN3 ”·ÃÌyMV‡. YzUŸóf Í0qP¡0õÊÑИª ³ÄM0Væ´ÄZ_Š¡˜yš`œ7ÍÄÁ™Š¯9‹q›ŒÅûp&GB^?9N[O†î;êp)_œçúxÝÏ}ë›SÜ÷lÞÝ̉o2p¥6þ2SïÙþhw6Å ?Ä!%q LtÁèn\˜"ÌÞx£ð oØâr³@ o°M)°äâ Œ«ø|d8W±?¨l+ª"ÍyEDDDjœÂ0""²š$ñFÇ&†©)ιFà×ↄ‡óFæ„aœsX_åqè FySû÷d§x¸¯ZÇìên. =”'»¶½Ô8¼y¼ñ#ˆ2E $•¡™ÒýRh& È„¡‹aJ¡—¹m1qH¦ØS ÄX>dèüUF.Ý gû:îèVÇu®Šñe™ŽÝ<þ3ïáÒÑW9ý•#LNVëÔÞVÎ;îxÛv¶>qA]š|häó…_8gñª¸ÑsŸãʉsL¢6˜òäŸuåŽwÅ`LÅDÞƒ1Þs“ð !—Šð‹›'8”>š(®¸L|‘QWÂ0"""""µ¨sß¡©¾ƒ{«:çí(4ÃÄÿ¿ð£Ã3ô¬¯›\*^¬0-*ZffœE­›ÞJûµY™â~¢ÐKt æg¢ð Åc˜9¯L3t}šÞÍ to¬«h†)6ŸÄÙµu<ñá5\85Ɖo 01š¯Ö©½­œwl½¿…·‘J;ÂÐóÑsõx‹›e£ç=1”çòé &GóqcΛ…_Þ$ÐRz™~¹yx¦F‡fâÐB´¢@ÔÒBé±òÛY•Ò6eÁ–b[ QP¦¼ ÆQ<V¹ÿùipæàâKãô]œúÿÙ{ó0MŽúÎóû‹ì®¾¥®~«u«‡Ñ`„„Á€iŽÆlÀ·=;ö¬ûY¯wgmïx|àõ3Þg†µýس;ÞÖ³¶1æ0‡Á`ކn]è@è@G·ººî>ªêÍßþ™‘‘oUµúÍ·Zõýð¼ä›™‘ñæ›ÆoÇ'¾Ø÷Üí¸pïXœBRÉ1vØüôëvâiÏ݉;¿4»¿<þ²vu‹Ÿ4—A IDATÍ,)"NXðB PMä+¬XeÅÃâ ê$˜@l “`àÒdÜ6fœìØ:D§çú¸ûæYì¹t žþ‚ض«¨ä #vlåŘ͛€½f®¹þ|í““xàŽù®nóYqAo3^r`W\³e(Ku >8 ÆßO÷ÛÀ£÷Ä£ß<‰²tŸÛÀ¥œºrAÈéÙ¤¸ä„–Áò 2e¥ÚÎÏ.ÙåF’çhÉ0·ö☗B!ä)eB!U]‘Û\ßa³çC‚iAD.ðo`˜6£íÍšY2LÀm·I!„B9éT¦7F°gÏLž8 ¸TX˜>‰ÂX±E6ÆÔrKQ¥¦²LNšÑŒ4#XöF‡ÀØ_k9ÆØ}'e¨º¥`#YF¢$™Ébê¡c¸bÿU¸òEÏ€nb›LdÜj¹Æ.¸èB¼ê¿#ŽÞý0¾öW‡0ýè‰.oùŠlÞ6†ýoº×¼z?Ô”¥z?¨š0es섩野á[_½§N[‰Å‰0ðÉ.áMð˯¸/Õ~Q$¢‹“]ÇÂWF–ñ×ø×ÉÙSÁÌ¡z’X¯{† XB!„Òy/Ü3†™‹õˆW\2Œ7öô‚C ¶RL Ìd’`¼èÐH„ñb‹&ÂLÕ†O‹‰…­ä×]œxô N<¶ˆ+®ÝŽ«ž¿›6òGµµRÌ®Þf¼æG/ÅãœÂ—>x “žéò–¯Èæ-ßõº®»q+Á„)0FpCQÅä#§qÿ‘yœ9Ù¯Ò`Z…–@Œê"’eÖ&´´—•–²õkafÙ~ïÁgè(dŽy !„B6”a!„l4£[†É0ç!"2àü:€Îg¢œúÉïúy¼GUO®\ŒB!„B·(Ñáb{w:ðËäÎM¬%…c A¡¨™P–Q#( …ÑXš1…½>M˜1 ”^fq‚ŒDi1Îü¨RbRYƯ[ 1e¿¿~ŽÞý0žõŠçàÒk.‡ˆK†q/ã&\~Ý>\ñ¼Æ=Ÿ½_ÿÀÍ8³pº«[žEDðìW>׿ýFŒíÚŠ²ú}Di0ªÀÉ©y|óówbêÑ@a\š‹@œØ"NlñÇý¾$çÛ÷¥JyA"¿ Ù&Ç%H‘ifNΞJïÅÄÄήo='B!„ÒyÇ/ÞŠÙ©Å(¡cnf±I4Hn©RZbaE5#̸ñ%\ŠK-» %qvIÛJÒd¢öÅ&ÒVyðŽy°EX>³ˆ{¾p¾í¨ÔŒ]B7Hxñ/‘c’Y=ILn¿™îË/E ËÄòK,Ë©<#ÀÂŒ_7Â~ EQŒïÙÞõíïúw2B!„B6,½‡æ'?qc§cÞ={ÇðàÝÖDgÄÌO-×Ò„“Mª!q%Ç *¡E\Z *aE]âji&Á nK3ÂŒO„iI¤ñõ#X<ÝÇmŸÂCw.àºWŽ£wÙ–j!ˆJñûBpÝM{põõ»ñå¿{·}våƼ—>s;¾ç—ââ}[(´T¨[(C]Z¬ï÷Ò)Å]7Oãá»7=›d–6I%Te#AÕ6”hRѦ®·>7?½äžˆšM›lRQÇpÌK!„²  C!d£Ñõä|Ê0ç "ò\ÿ ÀëFÝ—sÀC-Ç»~ù#!„B!d­F—2L&‰caö4 êÒ_€¢Ä¨Q¨;VçKƒDši 4^š) A_%H~±©&U⋨“e`—‡õ6H$Ë„i1êf¬`3ýè |ñ¿~ûö_…ç½v?¶ïÚyõ{Áö ¶ãÕ?û}xá^„Ïþ—Oá¡[èäÞïÚ{^ùS¯ÁÕ7>ýÒ®Š«áG $˜RK<ðõûp÷çïÄÒ™e (¢—j+>ÆÄûN‚‘ EÆ7Áy·ï'R5ä—µËÔc ±2Œ›ÜåAÆž‰¶OÝqÀ7ºlB!„Òí˜wü¢-±´`a~ Z†‰q‹O‚Q'ªD‰0‰°RK/N^©Òb`E/̤I0×õ£*÷CÅK#‚éc‹øü_žçîÀþWcÇ®MÕ9Ÿôé--Û7á{Þqžÿ==|î/ÅwÌvrïwŽoÆMo¿ ×¾t7\ü«ýL0ªî7{ŸÅý·Ìáî›g°´X: f5É,M¡%•^)³¡%-S½œƒP©¤ûš›µéC@]ÿ…½±êXGpÌK!„²A  C!d£q€et÷ÿ÷ˆÈU]è¨=²FDdÀ»üž:­†É0„B!„µrÀwÕXoï.À­ŽëQUœš?mlƒ1ê¤)¼ìb`ÔNN) +ÈøXš¨;ï¥™Ò 2*(éaNÚ_jÁÅ'ɈšjõØPˆq3–*ƒD!xð–oá‘o<ˆç½ú:\sãs`67™%X5×]²÷éá]¿ûc¸ïæ{ð™ÿüIL?65”{¾iËf¼ü¯ÀKèÍE%Á¨(ŒX FªIAÀ±o=ŽÃý:æŽÏ¦€aŠ‹IR]BÓ'Ù––*-ÆDç¼cŠDYå±"/ÈÌOŸjÜ—‰‰]C¹ß¸ãàþñ¥®%„B!dƒÓé˜w|ï–꽸ÿRæ–°k÷æ Æoí¢ ¥O‚qbK,K¨“ú:±N˜0P”UZL ̈ØEàÖPDíWm9)Æ@P&‰4^ÜyèÎy|ç›'ñ¼vã¹/ßbS=ÌKÙsÉ6üÀ/> ß¾mŸýÿÁÔ㧇rÏ7m6¸þ ã¥o¼›ÆÜ§ô4nWŒÿÜÀãœÄ‘ONböÄ’¦6…–v‘e-eSªÞ®&]¦¾¦½ŒßÎÍ,ן×mÆ/Ú‚Ž¹£wàǼ„B!€§Ê„OB!dU¨êi¹ Àó;lv€»:l¬)ü ¿  7âîœkÖƒ £`2 !„B!dít*ÕOLìŒ&õøÙ<óÓ'±s÷vha ZZ±Ea·FQªTÒ¤² jÆ'Â8)Æ§Íø„™e/±¨±+ì&‚Kšøâ…kŒ8áÚ1U’Œ½ÆTu-/.ã–Æý_¹/yëõØwݾj•Y/p„ﯽé9¸ö†gã+ý%|þ½ŸÅâ©Åsv¿¯{í~¼öç^Ø4˜¾ò‹ø#Àì‰9|íCÿ„‡ïüŽ`L¤·xyeµû&Ú÷¯¸¼}Ya•àdï œÌ+¶õ~U.gÐ"ÈØã Ó'“;#èeRІ ° „B!¤{:ý;|ÏÞ¦€ æf–pÁøÄXÓ%VâD'gh,Ì4Å_&“c´§Éä’`%Á¸m’Hƒ M¦¿Tâ–<ûŽÌâ%&ðôç»E/¼¹Q½·{ÏxÁn\uÝn|ý“Çð¥=‚ÅSýsv¿¯yé¼êW₉1·H…·`4*'ÌM-á«}ß¹÷d-Á„i+­"K,´ Lqiˆ,+K/õ5a{ƒÛJËÎO/V÷Û 1¹gqÈpÌK!„²A  C!d#r”a64"òÿ Àu£îËhÈ0"²ÝJ?ßVÕ™Û#„B!„<5èTªŸØ› v–ÆÜôI\VŒjðáÄS 'Ƶr„,SÔÉ0¥;_úz"iÆ^_zÑE%’XêÄ8Cħ¿„²  FYF\ÂŒÔåh3w|ŸþÏÿ€+®½ /ç ØsÙxµb®—?|bŒÙ´¯ü‰Wá»Þ|=>õÇŸÀ‘±ÎYrùs.Ç›~é ®|þ¾H‚ï¢ï²‹‹‹8ü±#øÆgïD¿T—³ñ%·/­bL¸/¹4˜"sLšÇ" &‘_jiÆNÞZ˜?e'‰nöZ1«[¸€!„B!ÝÓéßáã{· Mó3K±È+©l +ªÄ‰-p <$ÇBqÆ—ãÊEmy)¦êGØgßÊ­°cè@Ü™ŸZ§ÿÛc¸ì™Óxù[.ÆžK·Æ:xo ÁKÞx)žwã^|áýãöÏÓòâ¢};𚮸f—äÂÝ Æ}®þ¥ÅGþá8îøâ” „5þó%’Š3u‚L$ʘ¤lCdY}ŠK›ÐÒ.Ø„ßk³lY*N.,×·Ü}þÝÝË0óB!„l(ÃBÙˆð¶×e€ˆ<Àïxë¨û2drÉ0WvÜ®¶C!„BY3÷O}ä¶©\ÕE{½^N@ÌOt).a’‹M)TPÄ‚ŒO„i‘f w},͸d™RªT—j&L%±8IF›x”Ê2R•ƒO™1N’ ’dì$!+{|ç®Gðþßú+<ÿÕÏÃËÞþ2lÞ¹µZuÖx9ÆMº¹ð¢]xÇ»ßßõ |ø÷>Œn{pM÷wWo'Þð ðâ7_ÐïkfcàÝ…›G…{¾x7¾ü¯âäüi+©øŽøä'º¬~?½>°2ûµÄ¼$s,'Í$×øcErlaú¤Ÿ å&DÙQ½‰Oîa^;·B!„Ò1½‡¦&?qãèhÌ;¾wK%„ÌM/U ,Ñú\•S -R%ÁÔRŒØñ½Ú¥½äå˜\"M³¾ŒœãÛRuÛsÞw ïÿ߯s¾{/}ÃÅØ²c“ë‘ÿïúµý‚1¼þŸ= /zíeøôŸ} ß¹gvM÷wû®Í¸ñ‡öaÿ«.v"ýèÆ¸4?Yæè½á3ïýŽ=xÜÊ<…q“›ÜÖͰ'¶ˆYVÞ—UîÛdû™‘È/@šúb2’KC~iy-ÌœÊÞ³Ž“aúnë²AB!„BHEgcÞ­; lÝ^`ñLYK.æ§­, RZÐM; ÕJxaaE½0ˆ-¨„{JØ¢DH¦>-F3ÂL(çT⎭WKà_œÂ½_ŸÁKÞp žwcEhA¡!$ÀEOÛþ×ûqÏWã³ñmÌNžx_M!xñ÷]†Þº[¶´–^*´jê±oŸÄ?ðŽ?rÚ¦²šœü’C$•U‹,ƒh¼2BK\‹Œ“”ñÛù™e aèZ†á˜—B!dA†BÈFäÔ¿¾t“aF„ˆ€Ÿð».qwºd=È0Œž&„B!„œ-‡¼­«Æz;ñÈ#Óѱ٩…:F]"L”꤇ê½\BiÆž¥ˆ¤™ÒÔ×—NpÑ ÕÅ&š8‰ÅOJQq×ÄBŒMˆ‘$-ÆOrò‚Á©ùÓøôŸ~·}òV¼ög¾OÁÓªÉ0ÆI#¡ìñÒ·|^üúçã“ÿ×gðúXJ$"Øÿšçáí¿òýè]ÑC©Š~ßN’ %/ÂÌŸ˜ÃgÞû9ÜõÅ{S¸4ñp[7CÊ„³t’„ÿJ¯•\]¹ýŒ¸"ùEb9¦pßu^šARÝÎÏœD=1(~;䮃ûÇóV!„B!dØt:æÝ½w Ž=üù/ÀìL SI/mI,F«”\‹V’`‚D˜ M&'¶À%Á¸®ei*)Ɖ3­âÄŽ•ݹÅS}|áýàŽ/Ço¿ûžs¡o%ü Õûk^vžù¢½øêGÆW?ò0–ûûùŒöðê}ö\ºV‚qc; „±÷b~z 7ðÜ{x*`Ö(´4ä”ÁÉ,m’JkÙJ˜A ÊÄÉ3a›ñ÷߬oÞ=[7ýß;ö¤žã5rWïÀ!Žy !„B6”a!„l8TuNDîpuGMR†"òrïð’Q÷¥cæTu:sœÉ0„B!„ó…Nåú‰‰xäÑ éD¬ cQ+=¨ßÁ{£µìRI3‚RÑdLr¬ˆŲWœ¬ÑL|A%±Ä‰/’¤Åø2€ˆÖ²Œøº¤*çe™cÇ_ü«÷áÚ®Áëö5è]>y(þ½`ÛŽ-øÿéxÕ»^Ž¿þÝák¿pÙÕ—à]¿þ¸ö†g£,²T  |Aµzoi‡þêËøâû¿‚å¥>PSZš).’œOÓbl²Kµ/âV¼Í¤Ë˜à¼ˆ1‘ðSÉ/EæX.ù%smô*âkæ§OæŸÃ½Ê0\À‚B!„ÑÑéßãã{·à‰GNÕ€¹©¥H’HÅ/¬¨ÔbI$¶I,aê'¼8“+Q"Œ‰“`¼àQµ$ÒÔH“$ÒDâŽhÐÇúØÔãgð¡?¸O¿îBÜôŽ}¸pïVDRLðÚ4fpÃÛžŽý¯º Ÿ}ßý¸ëKG{.ÝŽïýñ«ñŒìF œ#Õ=_^*qø“áð§G¹ìú´¡¥=™¥M~šòËàt™PhiŠ-I[Æ}o‘(¾êzæg뇯¾%]'ÃpÌK!„²  C!d£r”až’ˆÈåþ-€AôÛ†áá–ã]>‡¨ê±Û#„B!„<µèT®ïMì°oü$3“6¦té.e!0ªÕ±*õ£$—Jšq‰0NšÑ aF ôõD‚ŒÑ¥J|iJ,Væ€[ù¶N|Q7Hƒd˜Z–AF´±ÒÌÝ_¼÷~ù›xÅ}7¾÷'n¦[­ìáä‘PþØ{e¿ð'ÿîùÊ}xôÞÇñÊwÝSˆ•`Ür¸•ÛSM|ãswâãò˜9>g%–¢¨ 5¶A"LµŸžgé8QÆû•c*ÆŸóåRaÅÎJ~YAxI¯-’zB‘f.#Ãlß>†mÛ:]%— XB!„2::ý{||¢–ü?œÎM/F’I-” Vr² "a%“#°ãÎ*¥%”4\}UZ ª4™\"«¥[ÆâNýyÂ4™\"—s¾uû øÆíxÁ÷^‚—½ù ŒmsÓæ|ÝvíÙ†ƒ?^ü}Wâèsxák.‡ úg}VÁ½ÿ4‰Cx Ó‹±82@RY½È²ú„–œ<Ó”_ÚûU—Ü÷ªŒûœó3KÛ²mÇ&lÙV¬ùÙ}pÌK!„²  C!d£rÀ;;jëJUÍþ&FÎ "²À¿ð«vŒ¸;£ä¡–ã]Ê0ü‘B!„rÖÜ?þøGn›z À¥]´71ÑLä8sz ‹§—°iË&¨ '§¨)Ý{/»JE c¼,Ó"Íêê eU+Ê”â_‘Xœ$“J,*N|Ie)1u’L*Ú@‚vD°¼\âsþùؼñç_‡—¼éEñäšDyÞ Wãy¯¸Ú~þÒI0¨\ª;Þó(>ø>†oßö0¤0‘œ¦´ÄûrVû~N½¿B)Æ +î»1p"‹ûÞªï/Þ/ ò‚ŒÄBLC°1‚¹©¦ ÓË<ƒC†ãvB!„BFDïÀ¡Ç'?qcgcÞÝ{Ç®¸x¦Äâ™>ƶQL3Å’KbQ'¬ˆSCÂ$¿ã¯ÖJz‰Å›”*ði1q?|[¹DšTÎQx§Ù/çˆ*Ê>ðõ¿ w}é Üð¶«p݇Խõ¦ pù³Çqù³Ç]­-˜Êˆ±ý>öà>÷¾oãÑûgaÜ" ‘8’ITi¤­¬Id‚ÐHKƒ›Aeçf–£gMìžètñ€c^B!„ eB!•.p1€Ç;lsC!"?à÷ù%b¬9cå—4IÆŠ/ͺ R 0¢ /Í J‰™œÃû~óýøÒ_ߌüÕ·à/¼*šüb ¬bì!çÁ8§ÆMX0?½€¿çøò‡Û‰8…Uò)-+‹/fåe@ùZ¸‘a¥‘ü’_i¦ð’Læxµ/ÈÊ0mÏàP·tÙ !„B!¤AgcÞñ½[‚½ZŠ™›YÆÄÅ…•ŒO`‘j<—JlX $=—+êÇ„¡Øb| ¢úÃdTRŒ=§i[¦)îTÂŒ ’^ A½^Ü i89»ŒOþß÷â–O?†WÿØ3qùÕºû#ÉýŠE"ˆzÿ [ÏÿæÛøÆ¡£µô²j¡%yb ªm Ðt$´¤¯ZRZ©¬`nz1yÒÒgpèpÌK!„²Á  C!d£Òõdý}  sΑx€WŽº/눆 #"àÊûÀÕv!„B!O–#èhbPœÊQOט:‰‹.ß -¼Ø$¹@©V¤¨aAÆþ½Ñ2’f w},ÍÔu–ÆŠ-šIu±É/¨Ób$e$N|©ei16¦N”É‹6a*̓·¿ÿ#ˆ—|1ÞþË±ç’ ݤû2ÆnÑ/ÝD%;ù¨\îãÓïý<>öÇŸÆ©“‹. &™)cœœöMn?Üšä|n?-_ïgY¥ Š4OU¯B0;µÐx;–aî?¸|¶Ë !„B! :óîžÈ‹óÓ‹Ø{É–H,1FQ"JjÙÄË(ê’^rb‹/cGÖ±ØR Æ×`¥”†Øâ… H‚ úáÄøZ4#çx)ÆÉ9­âG˜Çû~û\ûò‹ñ=?üL\°g«ûi 4Fà¢ðDz_âëŸx_þðCX:³ì$˜Õ$³ä…–|ÙÁé2pò ‰¦MRY‹Ð’/›ïW\˜›^Ê<ƒ&ÃÜß;pˆc^B!„ eB!U‘‡Ð]ZÆ>_í¨­§<"²Àïøç°Ó€HM.æbØ„¢®  C!„By²t6®˜˜Ø‘=>{bÁ¥¶ ª÷ 'µ„ïsÒŒVÒLé¯5a@Ô³¬‚Ê,qRŠM7ñ+õšY&(¯ÆN2J’dD*b`¯SË2¢ÙTô_þÐ×qä“·ãÍ?ÿ:øÙWÃlƒÂÏR¸ à¶Ï|ïû¿Å±‡NXù¦pi,¤´¿ïd©Å˜j_‚}c2ûr–û6™Æ +ˆå—"M}Iä—Dr)¢k¿Îœ\ÂÒ™åÆ³ÖëåŸÁ!Á1;!„B!£§³¿ËÇ÷æÿ‰pnzÑ ªÕð3JbñÒI"¬4Ä–JX©‡± ±E 3©Ø¢a½A?Œd†‰4DÓ"îˆÚD˜–Dß–1@ Á]_:Šû¾v/;¸/}óUØ´¥ýŸ ï?rÿøßîÅôÑSvHmrÉ,-B‹äÊNqY“¤’2Q²Œ—fVZõ½ùësgNõ±´XfžÁN“a8æ%„BÙ`P†!„²‘9Œner‘Wø € GÜ•õJN†éòù;®ªwØ!„B!ä©Ig“öìÙq‡›a`æÄ‚•S  …TI.e!(œìRª“& QÍH3‚Â]_T‚L ËøzBAÆmK5ÖQÍ$¾H%»Ä‰/ˆ$Qu´’]¼,#AJL(Ë´¥ÒΜ<ƒ¿ù½¿Ãçÿòfüë¿ùÑ»t7úª(UñG?ÿÿà«9bëS_Ò”iImñçÒý\Ù³ÞoÊ.Fmëä_UÂIK¦¾`ß×55}2û vœ ÉA„B!„ŒžÎþ.¿pϘ•榗êáe$”b‰ñ ,ÄŠ-•°’I`ñÒ„‘:ÑÔK,a[•°âÛHÄ“&Á´ˆ;®”—cr‰4^ÎÑP˜…`i±CómÜöÙÇð#¿y=.˜ØV-úàß|ønÇÝ7­Dœö´•XVy2É,g'©´•­Å˜Z”‘æ6©«væfš©0@çÉ0óB!„l0¸’:!„L—?„\Ùa[Ou®E˜AŒZ†9Òa[„B!„§(÷?àDm…Áøø¶Æñ™ Ùt"y½ŠP¢ˆËÆ©#ñûðºÂ%•ˆ{Õ"‡KŒMì{_&JW©f4ùë]¢Š;%°4ꪅuUõxâ¡ILŸC¿TôûŠ~©(KEY÷~ÐM’‘ÖT–ÁûîmJÕ IDATé6“#îÞäöÍ ý0&ù^‹Ì÷%ùcƒ`=¡,37}Ò%éÄP†!„B!dcÑ;p¨³1¯)Œ{¡ÌN-ŲE%BäDŠZ h&‹À¹‚:2Ò„1ƒë°cÀÁuˆ[¼ÀžoIFñÏ@DÜp·Yf'Oc~ú´»_ñëÑ{gMf‰î]ShiëëZ¥—¦¤²rÙè{ÊŠ--÷0d’ïÏ4ë›d˜pè»{‚É0„B!dxP†!„²‘érÒ>“aH”¾“9ÞåóÇ !„B!çŠÎÆí½ÞN¤–Âôñ…HpñÂD%<ƒ¥¾!ÌdSGBAÆTû^JÉK,¡àáe™Z€‘hH%I]Õ¬¤J´ñe¼ âeמ£tL¿,±Ü/ÑïÛ}µL&¼„’Më6-o2ç“ÙFÕ}ð³bñ%,ëË™ñ%+0å¾ÛÌ~‘Ô“+77•O†éMìÚ³‹XB!„²>èìoó\2ÇÜÔb‹8§ƒd“Lñ#'›¤ÂJCÀÈJ7íu4ä’ª-bÇ qÇo3Ÿ¡Bá~'p/Õêwƒ¨þ¤:m¥å³™ZzY›ÈÒr - ù¥ýž×e}/I™äÌg’aÀøÞN“a8æ%„BÙ`P†!„²‘érÒ>eÒ«j.šÉ0„B!„ó‘ÎÆí=+#Tó\`e˜*ÙÃÄi/Ea‚÷©à"±(““fBQ¦H%™P´1$“‘Xi¥J‹1É5¥Í4E› .Š6A›°2L¿¯(ÝË§Äø…k)¥)§´ï§åÛöM´ïgEÉ6Á+¬°â¿S$ ’­TåÒD˜"_ªc$©Ù©ÄëãÚvÆÇ·wõ¨?|pÿøñ®#„B!„ ¤³1ïn'#„£‘Ù©¥LÂJNzifAzH‹@±BŒ?‡UÔaV¨Ã&•´}$Ÿ5#ÝTò¿C^‚)íËí7åš’J’¨R%Ö4$4>SSdŽÐ’½gI[ƒËÖ¯Ùéæ?S#¸`Og2Ìý‡8æ%„BÙ`lu!„Q¡ªŠÈQwÐeÒµg2 !„B!ä|¤³ñE#™C™óÔÒDYŒZy¢T­%E-¸¸óê·…}¯F …BU FPúzŠðzÀh]§½(U5€Q»Uµ’ŠÚúD Ô(D TbŒ•zÄ–³°’ˆ¨@Õ@ŒÚ­*Ôˆ½Výµ®Q+¸÷þœ¨@E\*Œ[~Ñ\­ä”³]‹/Í­‰÷%-ïλ2ya%‘_$<•eІ<w-*é&Lš=q²~ÀããÛQ­[Æ1;!„B!ë‡îd˜‰-•Ûá™^T­ˆÓ‰(´ìØPÜÅ¢bLjþœ+£ˆ­3(Ô•³I£ QTmøm%r;~­ëEÕ;ÞµãO¨kÓõ®ŽºúXýylýõõa?Ùô¯ðÿ±wÆß:ßgTÛ³Of‰eTÛjXÝž.S 3kZdE¡eme%*;7µW \0¾Ù&ßvǼ„B!&ÃBÙètõƒÈE"²µ£¶ÈÆeÔ2Ì€û:j‹B!„òÔ§»d˜‰ce©˜›9'Â8‘¢Jqi¤ºxÑ"•(lÊ‹ ®ë ë ShüûJI_¤%ñ¥™$#.Õ%’MŒ©g±˜zÆM,Ó–J#U2L¿T,û÷} gëÔ}K÷MØf¸ŸžO·iy“9ß¾_}Éû8&Ÿî~?áõk3õø2Ó'ÏY/óì N "„B!dýС $sT'ŠùÙåXt(`„ÆÊi2h\˵HÑ”%cI"”M uH£ŽŒ”r–ÂÊà:šýÅŠuä>\N‰:RǾh]·+;8™e-eÏRR1õýB Ïä¿£ÁBK^~²âRÒ¯Ù©Å:Aǽ"køpÌK!„²¡ C!d£Óåê ] dãÒaDd€½µÏÕvq0 ŒB!äÉspÿ¸¸¥‹¶b!¡ž45¹'¿$I0&8ËÈÈMÑ¥ñjlŒ—Q2‚K^b T"‰%R¢º¼ø2@´ ôK› c…+Å”}…†õHP¯ûNÀ‰f0¥ÂŽ$}jÝ7+œ·[[}(¯ ÚÖß©ÿîüñ4åÇד9žH3ásfOœ¬1»R®¢×­ Ãq;!„B!ë„ÞCyÇ!Ázg§–êÔ‘¬˜§´ŠlÒ7š &¶2‰4ëh‘nÖ1H2 î êcp¬ºS%*)F5óó©+y‘åìSWÚ>×ʲJ=Ì®EÉo£úV'ìø²ªŠ…Ù¥Æ3Ö± Ã1/!„BÈ„2 !„eòT"— Óe"`$ùW"ò€yùªˆðû !„BžŒ3z;Ý¢¥qØåôó­ .&‘r²L*Ídë)šuÖõ –m$'±„"H(±HKZŒ Rbò‰/u½Ar‹¯#YJE ã^Ë¥B¶çûœìK’ ã·Ñg ö%Ø7é~º χ‰0Íž†Ä$ùc9Ù%”`âï:•eìvnzªe¼ 3€‰F*ÑÐ8vpÿø#]5FÈzD,׉ÈOŠÈM\È‚B!ë€NƼ»÷n ¤|Tïç¦[…•†Ñšâ’È&Ù4™¤ŽU¥ÉdêXKšÌ*Rm‰;ÕM _ÐL=9‘e°ôË/ ²4ëY‹¬âË4Ëæ…–ÆýKä™´¾PÚY˜]Bé¸×î‰-]<âp¬wàǼ„B!Ê0„B64ªúmS5×¥”@6&9¦Ë‰øŒž&7‰æ×\ ðÿl¤"„B9ÿédbÐÎ[°eKaw‚‰AS“óÙTSd’D¤ºÁ¶Mš1E›lQ×™—X$P|y ÊWâKN–i&ÏÄ©-µ¨bSa4Hˆ±¯:&·5™ý4å%šMÕÜD—t¿)ÂØërI-FâïfÐ}OËDß›ä¯IÍN¹T˜Ä†™˜è,† Xü€ÛüWŸð§#í !„BHG§oß¹ c[ì±pD2;µØ%Ö$¬4ÅŽ¦XÓ’“©£,rrⶪ>æ…JîÈ}†è³æÏUi0Ñ«té*ÉçNĘìýZ£È’&ä¬Zh‰Ê6Ë4˶—‘´Ì€T™¹™åêùòϘ¢™J4D8æ%€ˆü†ˆÜ%"‹ÈûD¤Óx&B!dP†!„Bº›ÀÏt2lF)ÜpWGm².QÕÓ¾ð©u‡B!ä©Bg“â„;}ãÄóH È%Ád¤™VQ¢ÈEó}x~`âKN É.õ5q]•”¥Å8ÑÆ‹0nOÙ%û¾°²œ²ö}íGL(ü„ÒL ÂØT§¸Ô÷>No©¿ Ô’K›L3@| ™Â½Ÿ™\h<_€K%ê.`Að²ö !„Bº¦³1ï…[¦ÂÌäÒi¢<ò"ÆjÓd€i)«VHƒÄª%'¬CK{Ê ƽ_Ih Ä„ý ÷ä>#åÎЂe$*ÓV™²bŪÀ´ò)D»÷v– Ã1/ÙðˆÈ•~Àµ.ð.ß?ÒNB!@†B¡ CžœTÕÉÌñ®ž»ÛTu¹£¶YÏðBo°WU¿8âþB!„œïÜ+ß^Ï'tÔ³7N<1ß”R¥Uˆ0ñ5±4ƒ¨Îìõa;Á{ „/¬ÔâK.ñÅd…˜êÚ ®J:ñuIXW ™ƒÒÉ/• ㄘ'+º4÷Ó­‰÷1¦:ïŽ&w‘VB)¦ÈÉ2’Ê3p××¥rûžg&ªÉ@õKƒçnèp•\B€÷ølRø?øåÑv‡B!¤»1ïî‰1¨Œ¨*ŠÙgVN‚‰„’æ¹:¥½É&¹Â N\Yc"MXG( d%’ªþ6É£S¢4˜ %Æ9(Ùú‘l³/#ÑýB˜ÓúùbYgõB‹¬IhY¹¬´”榖ì¯)¡påž»Žà˜—à1û à–õ…Bé Ê0„BHw?ŒP†!Ãäá–ã]=wü‘ªZªê­ªú‘AB!„¬ƒûÇ—ÜÞE[½Þ@5&ÎÅrK¤„„ïM&É¥h µ”aš‰0™W*Âø——XV—øK,µ4㥑´®¸\}}\o_á˜Ò¾œ£e› íJÜIÏÚ¦åMæ|°/ñ~.©%’˜a%MwÉ%ÁdÓaBÉ&úþ¼tLO. ´uÛfìØÑÙ*¹·“ ªÞ«ªoPÕ=ªúRUýÀ¨ûD!„MïÀ¡ÎƼ»'Æ­;`zr1+\䥎œP’K¡#'bÙ${m2´K%“Uב$ÁHÚ•äÕ Õù¥]9«„–P>2â„×ÿ–ûß&©äúsöeÛ?ßìÔRõ\y)fl[m;6uñxó·xé ¼ÀOx¦ªÞ;Ú^B!糿8 !„u eòTà¡–ã]=wŒž&„B!„ ‹Ã^2ìF&&Ò„ÅÉù3X<³ŒMc›PA©. ¤”H.þ½Û…@(Œ@ Õjì15-¥Za¢,£^Êðïí¶0a=€ªØW ”Æ@U!ê¶Æ¸IMj%Û`¢U1j·ªP#õµ°[¨±³VLZ¯«Ã¸kÕ%ÔšÞ²z¢Œ R[Ül™ú¸Ä©5­ûiù¶}ÓØ—D8(µÈ*Ëe®‰äÉ”s2ÓÔñùäF¡ËT˜éƒûÇ¿ÕUc„B!„5Ñɘw÷Ä–JÍ÷CÇÓ'ûX:ÓÇæ±"ZçŒQ”ˆj Ch°…SÆÇjÑC Fa (Uëc¢õÖÂŽ7Ãö!Z¥³ Çša? PÕâêˆÚ2â¤[Gܸë] ¯£2‡bVYZ¤—³I]( „¢L"Ϥ2PÜ—ÁÂN³ìàOg§Î@]ê\òÐî^g©0Ó½‡8æ%€ªžð¡Q÷ƒBé&ÃB!À7,tÐÎ6™è ²1µ ÃÕv!„B!â“ñF¯·³ž¤wL›³¢C‘$¶˜8 &Mt©EdeŠ´Î°S ª'—dR-k$JHi¦Å4S]¢Dÿ>H’‘l]qZLYºd˜àµÜW¨} Û¨ÚIÎåö&À˜ÌyIÎÇ©,öºïAü÷:½ÅdÊ…i/ñuíßS(ÈLŸT1±§3† XB!„²~édÌ;ž&ø÷3'–ª!*‘#IXiKQ©Ä‹BÅJuH¾ŽH:i$Á¬¾ŽZÎIëˆË™ªî3@”õÍB  lYê¾®FzÉË/ƒ%•¸ ]V ú”d¢mXßÊÒK3§.33¹˜Œy]Q7pÌK!„²a2 !„ ª–"r+€:hn€ã´C6m2Ì•´ÝY„ûzED €W8`s¦ÈÃÞ§ªvÚ±ù /^EÑ[¼_UçW,ÙbÿÕá•Þ ÷Ëù#°÷÷;v,ADöøäðWUõ/FЗ]þ·U=àƒªú•!wiÕˆÈ8€w¸6sºðUÕÅN;F!„QÒɤ†ÞÄNTÑ&ÕÅä±y\þ´=•ÜPŸÞ¢VvñI.E £bCVTlŒԥŔî|]O• „ 5PSV 3j…KsÑàX¿‘øh&Õ*qZŒ‰/'¾øº|BŒû VŽqÉ4b úe‰~?^%W¡È¥´Ø 2`ã…ñ²Ž8Y'(ï÷MºnMrÞ =«Ny‘ü±PŽñI?‘‰O©,“ßžxbõ$ªð™ëN "„B!dýÒÉßëi2Œ33¹ˆ½—mµc)(Ê*AÅ‹Z‹@Àœ›ø´w,L‚qb ;¶t×Fm…@õç|në“`Ô.Ä ¢ÐHHqýH’fr‰4H’`ªzŒaBs¨¦JdÉÊ/ƒ…–³K]Y½¬Ò”TVZ"¡©%]¦®·ýóÍN.E#^uÏ\GpÌK!„²¡ C!„X£;† d4d¹ÀÖÚ¾SUÏtÐκDDÞà÷\±BÑ'"ðS.žx¼V2X (" àWTµbŸ""oð‡®Z¡èÿ."à'Uõ‰¡w,Ï~19ö^Ë0vdúÒÆ¯ŠÈ7üŒª~~ˆ}ˆˆŒø#?`пü€Iy·ªþA'#„BȨ¹VÂêïÙaJ‡ŸÂ!˜<:À¦ˆ¨…—\ TK+·¸ce*ȨOr©Å+¸ØÕP”©ß—ª•TSV¢MX§=Vª±SK,Á /¿ˆ8ñŬN–1êÄ—P´QhP—M†‰‡ ØÙQN|©’kÂ}‘üy©÷Åû+ˆ/¹ý¬ü"™c‘äRk“fr‚Mk=A{‹§—pj¡^%×ÞgE¯×Y2̆þ-Ê-`ñ}~í‹,<àϼWUì°{nÁžkV(ÖðØñæ‡G½P€KÂþQØûûÜL‘Àçü¿þVUOwؽù0ì³P¡ª]üv–ëË=ž¶B±eŸ„½wUÕ¥¡wlî·ÆðÈ/`±®žMB!ä<¢“1ïî½["¿CU¡fNØâ«„#ÔbK,ÅÒ Ðøœ:aE¬6ÑD˜ñRŠQˆmÕµ +êê°mÄb‹•bœ¸mdÄWG¶îs¥Æí»ÎAÆu¹®Fi3M¹äܤ®¬-¡¥MVYÐ"IDŸ§™*ã_‹§û8}º?Êd˜ =æõˆÈËÜÀdNß àãë`LñÓ.^¡X àª~©ƒ.­¹vqÌ"sú^7ê9"²À$‡?«ª_A_.ƒ;®Ä€Œðß÷ˆÈoE~áÙ%Øÿ[º³Û^BeB!ÄÒÕ$û:j‡lÊ0©‘“:š²ªó9‘"?Z¸1jKû‰@’­##˜d?C$§ ªC-«dOh  l‘S‹#Q½&P²é2ôµJ˜YÐ"-eq–eësñ5q™Ù‹î¹Òê?Pí*fCyEäû`€XI„€ ¿à·†Ù§sȳü™ˆ¼iT‘›`b\I„€q¿‚Õ ¤f좢Ÿa?Þ û›Åj~°»Àß»Å= !„Œ&ÃB!–;œÁðWd2  àáÌñ®ž·#µ³ɉ07¸/Øÿ·ˆ#€×“> àšäØ`\ôŒ²¿¹¶_ àÁþo#žH3ÊÈÖ;¿àßû¯†M* YOß÷ÍÞ–{l…k!„òÔ借v#{z;0=sºZ!ª8~t.*ãe‹BÅ…¬¸¤–B\‚‹ob|’KYŒj-kø„50¦tuºT™´—STu"ª§,¥JuA•ä"IZŒBT‚´1v E&-Æ%Ê H‹Ñ:y¦,e?^%×..¤¶B œ¼oMf?½~@y öÉ&µ´¥µ4$i–i»6M˜©ëŠ¥¿šœÒdUôºI†¹õàþñQ­øº¸4sìӴЏj…kFÅ1ر‘g3€7&eFÙß´í)骨߿Â5Äò8€¯û[ÐL¾¢»î4H¿·I‡‚}Ÿˆ<èB!„´Óɘw÷Ä,Ì.G a2 à†Y 'x$‰0Æ%Á$I,$ Ib±Ãl1° ,Ð -¦nË.z Ù$/a¨[‚DšF"L&‘&j«‘ƒ¨vGÑÇù×"Œä¶«Nh©ä—Z ª®ÉH<ÕgnD+‰,ƒËÆ×„Ÿµ½ï³'ãT÷ï&æÖÞCyÌû¬ýßFßà7†Ð—añFQÛ°ö‹|€_B_6φ§pïˆÚ_«xµÀë1ºþBqP†!„B¨ê’ˆÜໆÜe2 Ž©ê™Ìñ.ž·À-´s>q\U÷;"rj”Y û "2ªØæÕ2™Üß“£ìÌyÆ|rï¦FÙ™U°˜y>GÕB!„ŒžN)'&vâ[ßšt{v‚Ïd"ÈØ$5‚Ò…Ú­QŸJâß;Q‰-…Q´(ÙEQ‰®©Þ‡õ81ÆÖ© i¦ïfyÁEP“J,jg'½X›ÇJ2jÓU*YF ĸ$1‰,#è—Šå~ý¦Ád(;‰Hª$›Bc’ýôüj÷Mc_d òKN|)V_$S×€zºN›æQùB‚^¯“d˜œæÚÆ/¨êÝ~GDþÀ¿aqDUßêwDd7¬p²^ùfØ_m+L"¾’|×— ¹ Äz⎤¿[¬çßÀ!„õN'·ïžÃwî_pcC;4™NdÀ PH‹lb]€Gfd·@ƒ@¡š3^lqÓËEê% Æ”‰°RK9A[•ãÅZð¨åœX܉ÚòrŽÆõZ‡¦NõŒîMNd‰Ú͉'gŸºm½(¾*Y¦Nçiˆ,­©>’ôÛ«ë»/;3µI0Þº°›d˜>æÍÍý|Q²ÿ_σ)†×5s;âE%»H@øðŒ²¿¹¶_ üÎ?pà ×˯øû`ÿüZRf=}ßA,Ž]ào“2œM!ëþ1!„Rs”aÈùÉC-ǯì í{Uu~åb„B!„ò¤¸VÆj2ÜDog5{CU œ8>ge’@ú¨d‡ÂNþ)Ü$ +¨¸ô£( › S‹-š‘fÂë“„­ëQ/ÝAšLPwiìŒ:ñE*Ù%N|û<¦–e¤N|ñåP‰3âd™X´)KE¿T·*°›ëâVvO>ÁÅŸoÝ7+ì§[ÛNšÊR8a%Ni1þ傌„åüR4Å—TœidN<1tEáÝ»·¢(: :Üèƒ!„B9èdÌ»{b¬Z$Á‹ >Õ#\‹ªB²I0¨E/› =‰¥k¢$–8MÆ7&ÒÔRm!”^rŽ«#'¶Ôâ­#—HS'ÞØÏ ¢n-î‹¿O¡2ìÔ••Ë&"N(Æ‚L,ÐøÏ^oŬ,½ÔÛ¸ÜÌäb$X©»v¡(‚›7<8æMPÕh!KYÏÿ–2Óßõ¾ ÂmªzÚïˆÈÜ Â$âÁðû‘ïegVÁ‰¤¿§&„2::ù—B!ä<¡‹J.‘Í´C6ãéêà IDATm2LòÕ‘Ú „B!„lpîŸpï°ÛéM¸¤Ž Á£¿TbúD30’# 4E‰ÂD"…O _•@‘-ê¤Ôé¯E£Nc$P\rŠ{%«ˆ¸Õdk‘$”MĽãS\’ºÜµýè÷ËîÕï[9ÆÎT’ ­ F\}¾¹ý[ô¯îÏ a%MwiMt do£ãâä“‘kl #˜<:[M òÏÕDoç°g'B!„²Îé8Ôɘw÷Äq‚GY1?³Ô(ÛL% …‰qÂÔûÙd”¤Ž†àaâ:"Y£º¾Y/ZëÈ´ÕRGՖ룖ŠÒuûŠþ²Ý4éûZ„–•SW’ÊY•]AhIÓeL|ïòÒK[Ó“gÜ3åbw7©0Ǽ„B!Ê0„BHM“ú €+:h‡l,F)ÃðFB!„BHW }Ü>1±ÓNÞ¨<ìûÉcÍEEBÅ4¤—JŠˆ¤™L’H(µ9Q¦–*²‚G!ÑùH>1^|1Õ6+Ëø2-BL5cÈ_+b“aúÍÜÄ™°,ÂzM8›ÆÔ} –¨$¾äöãD—ø}‘¹W¹„—¨\îÚ•^’©ËMš<:WÏ6sV%^ —Eßè¢!B!„BÈ“fècÞñ½[ªaI5DQÅÌäb£lS®¨… dd“z˜¤‘ ¨#'¬´×‘”3k¨Ã ªNþhÖQ:&}5Ä×õ¤$•F™µ”M¡Õ -ÍÄŸäþ5䙺,˜9¾¥Â@Ñ• Ã1/!„B¡ C!„Ü ßA;] dcÑaDd €‹;h›2 !„B!¤+†>þ˜˜ØÍ ò“8&6e ”]’d˜–$˜J”(2¢EѼÞd®i—f\:L$±˜D€Ie™¦ÓL‹©Ó`ªkAYýR/E»¼âgàØzêó‘“‘hj'sÒûˆz¿ˆV"9i âKV¤Iê*KÅÔñy„‚•ªb¢掃ûÇ›K<B!„BÖ#CóªÖ nÜ;=y&[~PŠJ›l áð.#p VÕ‘—JÐkšÒª!æjå8Æyƒ$Ô~_ë!lÐ/äú¶‘Ê% IeBK›$´bÙ|¿lýç,KÅ̉ÅhýU+^uÀ½‡8æ%„BÙàlu!„õ‚ªž‘»\7ä¦(ÃsM.æ ÒAÛ]$*B!„BÐÁÄ ÞÄNØ©I1¹dÀN )Œ@@ @UPÀ¨2ü{X9ý/T ( º÷v«Pw¬tGÕ×c A¡€ºrj-}õ2ŠBU b F!j ¢cœè£VzQÔF!*Põ׈*Ôˆ[1ØŠ(о–6 &B3"ŒÉì;'Ü÷ç¥e_¤!óH*»„ûRo¤õTÇã}ëÅõ’ì;©M~ e`êøúËýú~»ÙA½C}–\À‚B!„ó‡¡ÿýî“aÂU—ìÑ‚‹)¶l-Gh½5  ŽU2‡Ú1Ô]/v\êÏUeѺ^{.h˵cSw>j˵ë­%­úèëÕ´­ª –ŠrYãmõ»YI¥E°©ÒbrOKRMVÞÉ -œÒ*´dD–eó×´”0?½„þr*X)vOt"ÃpÌK!„B(ÃB! ‡1|æÊ!×O69¦ éêAU=ÑA;„B!„t ã_pÁVŒm.°¸\ÚÉ0¨jk2 ¤Ãh-XX±EœcŠ2‚¢J£iÆÀhY×ãĘºÎ îP¾1 ãÚA$µH%»¸JìD!5PõrŒ“e ¬cßÔ²Œ—Q\½eè÷ËÌ‘:Å¥±5On?JŒ1Ù¤–µ +¹DŸ4Q¦Hö +×TÛÂnX‘*aŠÞ^Ê0„B!„ˆ¡yw^¸›7ôûZQT1=9H†A’ %õ9uЏTÌPlñŠ1‚Òæ‰ªÁõ¨„·<…•N±Å‹$Š2[ª¶¼¸;¤åÔ⎓^âŽëG$ÁÁp®URÉ'´ P\RŒ—_¢²IªNU_#Ig-"K³¬$e1 LZLO.Fb•­vï;GOí@8æ%„B!0£î!„²Îè"å‚É0ä\3*†?0B!„B:ãàþñv;½Þކ¼0ytvà5E"T4$ /c¬‘}¡QvÅ:]ÂLZ—‹G±³gŒOfq[c%­ø™6&˜Õœ³i,Ôå'õûŠ~ð^OqñåÃ}Yå¾Yq_$¼©Äbe—"xŸ_Ú™¢E°iûeü¬ “GçªrTï'&:‘a˜æJ!„BÈyBïÀ¡NƼNŒAË:ÁC˜>~fðE©á… “—$ꤓPÉÉ9Ñ"IK å‹J8YeF"¡$?já¤YGY*ʾ¢¿lǺ¥{¹æ[Ä“s—ºR• c¢¾šú7D–ÖÏU÷+’VÙ÷ðþ{f&ƒD@K Œw“ Ã1/!„B¡ C!„$t1¹Ÿ2 9—œðDæ8eB!„BÈS‘¡C&z;ÜDTBÌ dÀN ñi$•R„’š2ENp)b±£QO¦ø1@šÊ(ÒbªYAYYÆ$BŒD‰-ýV‚)c!~©]‰Ë·ï›Ì¾$å¥qÞ~´8•¥5­¥…Ÿî’J,ˆî]6Y&'È´H3žÉcs€[¹^.è _†é¸uØB!„BÎ)Cóîžk¤xLoO†RQ##k ’)ÜXk%a¥U&YIº‰ÄdäŽXÉŠ'lR%Ý”NˆqRŒßj«È2@hIe•UI*+Ü×H~ >_$ÌÔÃóPd‰ïk{ßëk2bŒcúø™ ÆI1¥bü¢¡Ë0óB!„”a!„”[PÍP”aȹä;ªš{f»xθÚ!„B!¤k†>1¨7± .¦’Ž?>8E 4•˜8&#ͬ(ʘº“I‚‰¥—#µSI'Pâ—J€‰„˜@L©dSÉ1¥É0AB Â:Å¥ºH°oÒýpk2û¦q>…÷Iâ÷µ°‚DX‰¥™ú;ð²L*×$çÛ® DÀ&Ãø¤!u"Ì–±»vmÊóp÷Áý㧆Ý!„B!äœ2ô1ïøÄ–X^(SÇVH†A(V¬ ›rL”€’K7Y¥°‚HXY!Ád€ôR÷£]Î1®a*LøÑ5-+§®4$•³*›‘U²÷.óù >~H3éç ˜>¾-ƒµؽ>M—IÓRÄ7a¥–Oš‰/ab‹KqI2qZL]¾_jóÕ÷›$˜5ãë¬e–ðLË~*ѸýXXA‹À‚DXÉI,Á±–$žªŒ4eSiŒ4ž‰É£³îYBõ,Ùô¡¡Ã4WB!„BÎ?†þwüøÞ ¦JôPL_\ñÚH²h$°„rL*U´$±4ÒdqäI¤É„Ò u`Å:Ê6 f9Nˆñ7"’TBq$ý\n‹Æ}Ê -ˆ¶ƒ„–lŠË@§.‹eÒzÒtŸ”éã‹Á³dGÙ½wìÜ<¬ƒá˜—B!„  C!„äèb¦ÃsŨdþÀH!„B霃ûÇðø0ÛèMì¬VÉ­f8qlnU×9Y"'N$©% Á%H"i]Ú¤™Xº•X¼\’\ÄÉ&©“VlSO _¥V³€êTw$ûþ|˜c‚ýPÒ1â&%²K¸/qzKaB1ÉO®ÄÛê^£q_Ò4ï¿4]œ8ê%ª:¦×c2 !„B!¤IïÀ¡¡yÇ/sò‚F‰ÓÇϬ®‚T¸ˆ„– &‰lÒ2²u¤bKóÒ~䤛°ŽyIZªM‡ _},©RLCVIû&ËdeŸ).¥—‘e…²ñ5uÿ£sêd˜Z®ßËdB!„Ò”a!„&”aÈùDC†‘€íCn—?0B!„BFÅPÇ#{wÖŒ[!ª˜<º:FI"—É-•ãSebY&0ÒL‘©«!‰Ä 1^*i 1µì‚ =¦JtiÈ2R%Á¤/"ñ¦–iV±/Á¾‰–ÖŒiQÒtœêxX.º¦¾ßiÒŒ‘𾦲ÌàmÊéSK˜Ÿ9™ÅÄ[©[|9}N†Yî—P „'¶¬¼ošûU=v¿!¥÷DZîyrÏŠÌ5ÙúVñ*‚zrø4! ä*t#ÃÜpÿøêXB!„BÈzb¨cÞÝNTP·øƒOˆYu2 Bq#')(™$–:e€8c׉5­òM{šL£­Ìµ1ï²ÝÆâI*¿äe•¸ì*„–¶û“Ü“Jdiù>š²*é¥)¿4û–Í1=¹%ÂøW2Ìý½‡8æ%„B!€M£î!„²ÞPÕã"ò0€+‡ØÌ0ë&‹QÉ0\m‡B!„2*†:Ù"ø ZÂ%Á¤øöWZåœ%³„e³2P-Ñ4¤—J0jï{}MFŒÉ0ýÄ¢ªTQ–V¬€ñ‹†.ÃpÌK!„B*(ÃB!yc¸Â “aȹb2Ì”ª~{ÈmB!„BHCOªœ˜ØÙ¹ÓN±bÖ’ 8£ÐZvQ{ÌJ-N–)YFQI3¥—aª÷9iÆÀh™H3a^¾©ë)\Ôˆ“3þöî<¾Žºúÿøë3“®´…4ìPö} ˆ©ÊjDÂ"² úEÀ]õ§È* ‚î ìŠ,A DvPºei ´iºoÉóûcæÞ;3wîMÒ6¹Iû~>ó¸÷Î|fæÜ›‹ö“Ì{N>ƒyáÕGž+,“׸ÌqÅ Mq\9³ßŸ_Òa n½Ñ½ú.­us¼úüßóµëcá¼ÎXw蘵´WÇ(†&¢€Š— ›»¡XÔÕ$ ½P ¶Çx††RŠÁŠÇ‹+.”¬syáÒÁ–’àà¬|pA`¥s^+ֳ▞tféÍØÒ..ñPLfǘ(“ í¤B3ñ÷WFÇìe%]a _:ÃhÎ+""""^µ  úú( ÃȪ0ÛÌ–d¬ïëï—î¶#"""""UÓT_; èèËsÔ­7*y5‡³{†ð=/ b$»ˆ”,~i #¾ïC…ŧìþñu~ü˜Å®,ÎÅžG!ÏÃEXŠ!–x§–üs\`ärÉ¥+] ”ïâA/ŒéY†xØÅ•¾Ï¬Ï4ósÎ8Nb\Ég˜ ¿¸ÒõžWþ¹íï;ÃäC1£nÝ>ï £ ƒDDDDD©ºÆÖiôñœwlV»y¬XgÈ}d0²ºŒe‚#YŒ¬c”í¼’}Œb×–Ê]Rp`tA.¹ÄϽB!•¬Ïc¥Æ–“®«PŠ.ùs‹Oç½pl9sg-+é ãÔ®7´×ߥ^ÒœWDDDD †ɦ0Œ ï”Yß×ß/ý‚QDDDDDª­Oç%ë®;*b€9ïÍ+Üå´§ÂüH,xµd\Â@!t·’2A™Øó’ãxÏ÷ÂGxÀð"ÏK†O¢çx±°Œ ²DÛ‚tåÂ;åæ‚0“ËåoßëÅŽë’WÔÄŸùÚK¼NÃ/.c]Ö¸ fürû–Ù§’Ù3óa ß§1c†Û!þ 7{Hóv‘Á­OÿM_»~±s‡Yüèø`Y¯ç¼”.2Â1•^¾CI™cxåŽQØ(†=’•Ä›•DÇJmÊZHñn0Q˜&¿ÝËz]|t…÷…\þó$ ¯P؆‰HŒ/Žs‰ý •Â/eÂ2ñ¥Ò…AÓ&½Ï«OOKt…Á`ÑÂemÀm+ôÍì™w›êkg÷áñEDDDD¤ïõéœwú‹~“F`й< õïõú`éN0ÉðFF÷‘’Fùc„ÇI##âyÐ]è…nŽá¢ybþA¼jWñ¹#+ð“¿±÷íâçKv_!ó½vÓÅ¥Bè¥\¥»0N"ô’u¼ ¦¿±ˆI/ÎŬØ`É¢\ŸÏyë[5ç‘…aDDD2˜Ùtú&Lðw`'3ûQ[Öoû™Ùï²6šÙmÀ¶À@gœ_wÛ‘jë‹yIp6°Û«/½ûp1ÀP 3üåðËïßÃâ…Ëz|Ðü5épK¼“K²ó™KâI²ºÊ¤C3%ÝdRÇ$:)„U¼d%ˆ)tЉÂ2Q¼0(¶€#Ùå¥Âk{í¥®ŒŠÂC"ƒÙÛMõµ­ÍmN.6èí· ]$""""2ø­ê9ïõÀë[Ã9/îíø€Ât%€¶'Û™þæ">ÿÍm·Í¨ ²°|Ø„pí\<@bÑ\ÏG8Ï.n#šÃ‰má  p8³Ø¶|¨$ìâbá.Åó‡s\Ññ=AªŽ €\—S!…će^²B*ŰJO-e;ÛÄF… K¼“NbŸÒ%z) ¿”Ö›eÉ¢ýõ´=ÙN ;ÂX< z ®±µµ½¥As^és Ȉˆ”·*Â0³¿3³ÞÝBG$iðu3»®7;™Ù É9÷IàÀŽ+YÇKf¬ä1VwßèfûŒ~©BdðÛ¸¸›13û£¦ ž]™SÞ¿€s›êk_N¬5{ã~3;4qŽ™áÀ3f͘ËgÞÊñ_ùÇîÙ£‚.~1ì] ðc™øó|@Æ=Ï ÍX!4d'ÄÉeº,ºRÉsD‰Ân0†YR) Ëfäðr%½„—%:Àx¯]å×.ü\ÝZJ]æëBÈÅe„X2:îTê,S)4“öúkïñ«53{Ƽ’ŽB±çÓ1»9¿OS}mü¡¹­ã¯ÀùÀ9ÀÐ{³éÂ î½æ*Ýæ8–푲>îœëî¿ý·$""²âVÕœ÷àܺÆÖWRë_îͯ°ÀÂ{@Ž9ï/ã×?˜À¡ŸÇøÃ6êщ\FI[<¢(„‹fòá•Bp&XÉ ¶„ÁbljΙ¶ÉÀL¡Ž¬pN±sNE£f§Î¹¨ ¤ÿIŸ½ïнêÌ[)ü’ߴĻ˔é´S ¿dcRÞ™ºˆ›¯œBûûKÃïJ`…UÌt 0ç­kl €?´·4hÎÛœs'§VõìN."’¶Mê¿§žý¢ˆˆô;¯Úˆˆˆ `/¬Ä¾]À/mÍìzad%Möém&ÎÌê ÉØ±µèŒ+Ç€S«]„ÈjbpUµ‹‘êˆB/­Ä!Þ>ÓT_{`IX<ý'‹1;ŒÀ¾cte…r9n¾úQ®<ïÎ_Úí K…8übÐ"ºðýìç…‡ $‚^a»ï•_J:¥xa\¾K‹^Dä¢ÇxX%hqùÎ0‹‹‚-Ù^^WìÐR¬P|?.– ?¿ŒM|œK‡mRŸoa\ég–öÀíÏqÁWncöŒyXè_îÇl÷Åïþä¹ôþMõµó›êk¿ì 4¯Ð7ºhe~Ÿ%¡?U»‘ÕÀà¶j!""2XE!‚•óUרzPF†[̇ß!ü»v¡3L>èÐÕpßoóçË&³daW÷gtÅ@FfÈ#šc• €Dá \åcT ÄÃ"™Á”rÝWÛÃÇ0 “\r¹ ø^{hY±Î,ÝÍ ´Ä;Æ”}ïùúSgb?»´Ö¼Çu?|•ö÷—aלÀÂÏ(æ~`÷[ÌJæ¼u­óë[5çí?J-Û§¶¯Ìµ"k’ýHþ·tQƘ9ýZ‘ˆˆdRg‘òVô¢ÿ ;x¼ÖÝ@çÜ>À%Àf¦?´K–[€3Ìla¹ιý€Ÿ¿4³ÛË3³.àjçÜÍÀÀ—¿—õ( ³âþ \jfÿ®v!"ƒÜà/À%f¶¬ÚňˆˆHU=OøGÉÞX\ü¢©¾¶â¿%n¿ÿÜ!€›4aæòk®x¨fvû¢pƒ…w¬µ ¼sì ­¯sþoâ«ÿïÓl»Kåú¾ÃÌxà›#Htm‰uo‰¯ó¾9,ÚÇ¢®.­ ;ÍXx¬ü>~úyt?ÖYÆ,ê.Þ×òa¼èѼð.¾f˜å»ÅxÑÝ|ûä.Š1âÁ¯×A\Vð%Ö­%£»Kf—¬}Sa¤’3.ëXùÐMñ­¼Eó—ò›‹â…Ö©å:Áà{Žã¾°/MGí±À97²Ò÷£©¾v*pxs[Ç!„Ý]wªø…*5«©¾öÝ^î#I­À÷«]„È ·8ÇÌ&U»‘An¥æ¼u­ç¼×<°ß€7^¿ü†Ë&×t|°, 78„-]ŒWŸí`Æw_ásçlÃfÛUnT“¬@²K²K´ XòÝd\t[çb'˜â6s—ïö%u{‰u}Iu¤Ils.ì€Z¨1~þعÈ%ÃÑØÞZzdéf¬K¥Â˜ôqˆ?fvŒ)†‰ˆÍy—,ìâ¯×½Á„g;rùÀT8ßµè³ñ|Çá'oÎGo²Ð9Öf—û~Ô5¶NooiXá9o]c«æ¼+§øf°KÇ IDATµ‹YMü—X7,©…aDDDÊ0³7œssuz¸Ëàfv_ws—'þJéãιý3ÍlÑŠÖ,«•%À×Ììå8çð]Â`K ðQçÜY„l.Z1³và+ιë»*Ћºt·îLK­[dfSªP‹È`öpZÆú·ÌLw­è]X߀?ç5Õ×Îìnps[ÇÀÀÖÛï´—þòx®»úž}zf† Ï0 Ã"íïÏç³ïà³§íǧOØ+óNªy^ÔµÄÌE¡R—p]à9<Ïð}GËX¾;LqïÅ2ùãDσôq|‡gžà™#aœyáûó¢Çè8. Ëä1XtQPÎJß`þê¥üÕ4ñî2™¯½Äët`%+äR¬d^ʆ_Ê„e2ƒ4åöý`§¼:“kÿßý´¿?? ¿Ä:Â䟯»î(ÎþÖ!l·Ã†Ç]~\ÚT_»¸Üw¤©¾ö¡æ¶ŽÝ€3ŸµÝ}g#ºEÏÜ,H­[Ü`fOT¡‘Áhð¯Œõ¯×›YÙ‹ EDD¤ÇVhÎ[רÚ휷½¥ápÂ9ï6[í<†ï]»;7_9…¶'ç„a‡( bÎa̵Œßþô59nSƶQÅ9o"Xâ…g¥a¢`K>°’Ì$‚-^2°RzɟÊǵh{á\ùpQØ7QGáÉãtY1bÅ÷ç{æV¬5:û’³Ìî%^iØ„T`%«Lþ8Vº³C1ùP ±n/çòF>œCiQp'Î r˼D™÷˜èº’ì¾B|]oº¸tzIîS¬©|À¦òX§´­ÿ˜ÉC·O§«3(`ÌÂPŒ…Á˜]÷ËIßÜ–‘£߃ÀSÚ[¾[רzK¹ïb]ckpM{Kƒæ¼«Þ§2ÖÍ6³gû½‘ÁퟄÁÑ´—̬Ûੈˆô¯Úˆˆˆ p•º`À€mÍìòaŽ& 9üŒÒ LÞöÀSι/­H±²Z¸Ø«› ÌÇ) ÂäyÀ©ÀdçÜ·sC+ÐÌî"lC}aûôr^1³ÎJÇéGCûåL'¼ñľÝašÛ:Æ6·u\C8×:¨Ü¸Cߟ\të¯?:¼B$0 ·D–—ž|“óO»•ImÓËžÏ÷¾-…€†2üx8#úHvKI‡8Çñ“?ñ3Â"¾Kvlñ¢[Úz^jqçyÅ0‹säÌÈF.[‚èŠ"/uµNáu¼cŒWòº·¿X!5¶šI+–I…k%û…ŸSrý‚¹K¸â¼{¸ã7­aÆÂŸ¿Eaž/|q_¾uÞ§ÒA˜¸qÀ-Ím­Ím{Vún6Õ×¶7Õ×~Øì. qêæ*""""²úèÉœ÷$`¿î‚0í- µí- W/‘ ÂÄ}âÈùÆ•õŒ]Xz ¤Èäçrí÷_aÚÄt³Å¢b'”X˜£Éê–’“” ¸Ô1Š ññ©}{vŒBXÄ# äJ—øû[¡@K*“Ê ÏT´ä?³Ô{.SOoÆ.ZÐÅ_.ŸLË­ïÒÕ„Ý`,úÙGßσϜ±%_úñŽé LܦÀÍí- O´·4ìUé»YרÚ^רª9ï*df-‹‚0"½7½ÌO ˆˆ 0 ȈˆTVîî"­À‡Íì43û Òœsõι¶èÁ9‡¿qÎÝæœÝ«je0[üŸ™bf™m£sžsîGÀ#ÀÆ=8æà2àUç\S¥f¶ÌÌ.¶n¤Ðì;A¿`‘#êœñrƦ¥„7¢Ø¾©¾ö¦¦úÚ¬ù Ím~s[ÇW)ÀYô ›úÖÛ®Ï%WÃÞûlYÀXª;HǬ\üõ¿sÏMÏ„A‰çRáXð¢ÞHeJ—dX##èâ'1åB3ñ ‰‹1Å®.ù×ù«qŠaËA.(YŠÝ_¢ý˽v±®0ž—ìÄâ2Â/ñí‚=‰ð‹K®/ÊZ\òóžøÒtÎ?ýÚþ7 ‹ ¬Š2Ö[4?½èHmÚ­§_ãý€gšÛ:þÐÜÖ±A¥Mõµ¯4Õ×|x£Ì0Ý%WDDDDd5uΨ8ç­kl½¹®±µìœ·½¥Áooiø*0ø=˜ón¶í(¾ó«ÝÙmß±QG0-0¯½“?]<‰Çî™IÆ”7 ”¤(‰ÐK¥ÐG¹ÀJÖ1*tP‰N*#+¸ãAtÓ‡âû_ç»Ö”v[‰Ÿ§| %Ñ™%3ôS Æ:ÌT ò$C/¥á—Òºâc§M\À¯Ï•É/ÎK â?ûÚõ‡sîåõìdOþL À¾ÀÓí- loiذÒÀºÆÖWê[5ç‘^SFDD¤²ô/TÞŽ7³ñfVñ—-ιus×EÇøÄ œû8àyç܇V`_\^&ìóçrœs?¡ûÑiÛ÷:çtÎíTi ™Í4³“¶UÓ/EDDDDd IÏSþìØT_ûæúÚE•vlnë8ˆð®¸¿Æöæ¤#Gåëß>„SNo`H EQ8& †ÜùÇ'¹ì;÷0¯£ôžY¡¿L×–¬ç…n2%¡º”'|îb˜(±SìêRè>Zô>‹É„¯‰.ÅG¯û×.Þ­¥´»Kv×—d`%–ñ½2ï=ÉØ'Ý}Æ9¸÷æg¹ä›§cÖÂDø%‚Úû#[rÉŸe«mÖïÍW À_¦4·u|§¹­£bwצúÚrÝ]çQþ‚!œ2ç¼u­?¬kl­8çmoi8°ûi¯ç¼#Öòùâ÷wàè/o‰ç»B(&?÷ £«ËøçßÞåÏ—MfÑüÎ’cÄ+ÉÐG,â¹T0Rá®ä2iJB7©c…@L.gäºÂÎ0ŽT ¥LèťƔ†SzÐÅ%ó}'Ã>…@Kü=”ù<Šá—Ø9qü§y&7\2™yíË‹á C0u‡©ÿhß¹f76ßnTo¾Já à`r{KÃwÚ[*Îyë[5ç‘^QFDD¤²I„;–ÿØÞÌn¯´ƒs®Æ9wá]e¿Lïƒ qÛÿuεÇíwÀGÌlb¹ιƒY}àJžëà%çÜÕιÚJÍìÂ;ÔžDØf†‘'?Oy øDS}í1MõµÓ*íÐÜÖ±us[ÇÝÀÃÀÎ+sòCwæ§Ɇކè‘bÇãÕçÞæü/ÝÆ„ß-Ù?ÄðcŒTÀÅóÊ…fbÇðË«ÌR®»J>“ïãò¯Sò¡ ˆ-]°”ê2ÓÍë²a—Dx%Õ9'–ñýtx†hßâñüôñÝqHl<ϱpÞR.?ï^îüãÿrAâç] Æßã‹§íÇ׿}#GV¼¦§;£KW›Û:¯4°©¾vYS}mº»ë •º ‰ˆˆˆˆÈ ”˜óÖ5¶Sר:­Òí- [··4ÜüØeeN>þ°øú廲î†Ã ]a‚€D穯Ìç×çOàÍ JöÏîvÒÓN0A“XÈ£´#LO»ÉdwGIùðý挠+ZrQ¦Û@ËŠufénlÙ@KfÐ'ù~Ÿ•Wüœ/èä¦+&óÈߦÓÕ~Æû{¾Çg¾´_üþöŒXke.{(Ìy'´·4Qi`]c벺ÆÖ’9o¥.H""""²æRFDD¤3 ˆÚL›ÙOÌlI¥ñιFÂ.W묢2†×8çîtέªcJõ-N0³/•û^9ç|çÜÀƒÀ«è¼5„mЧ8ç¾êœ+û[K ÝLø‹Æ €¶UTƒˆˆˆˆˆÈªòpð¡¦úÚÇ* lnëÝÜÖq ð*PñÂ‹ÞØbËu¹è²£Ùw¿­“ÝBòá˜À˜×¾K¿uwÝø4AP¼v#Ò(¿Ä·W º”t—)÷¼$tC1lãÎebRÝbJ‚0ÑÒË .V—Ëxï~Æçã²×UúÜâaštX&kÜä¶éüø+·3á¹wÀ‚ØÏ5(üœ7Üp \t$7®T¦*màžæ¶Ž‡šÛ:*¸©¾vfS}íÉ„Ý]o\•EˆˆˆˆˆÈ€P˜óÖ5¶Vœó¶·4Œnoi¸˜pÎ{äª*`“­Öâ›WíÆãë ]aò]CòCæwtrãÏ'ñï»f„s§Hf°£JÂYÇ(ÉŸƒu“ÉÝX`äÒKÎbï«\ ¥A– c]j,ƤCê1Ù-&\¦M\Àõ?~©¯Ì/v€ÉQüP·ápιlƶáªú:l ÜÝÞÒðp{KCÅ9o]cë̺ÆÖ“ÑœWDDDD*¨©v"""™]ÒÝçÜvÀ•À§û°”ÏrÎgfO÷áy¤ï½kfSË pÎm Ü |¬j¨#l‹þeçܹföH¹f¶øQÕ±::Ý97+öºÅÌ^¬Z5«ŸSœs3c¯÷ªZ%Ò×6sÎ}/¾¢'ÿŸ,"""k–¦úÚW€W*inëpÀÿ«ô ޼#†ðµs`ç]6æÆždyg^À˜çá0rÜõç§™øò Îüþ!¬3v$1Ìwøæ0ÌwaÓ‘h}þy`†ï9‹u1ñžEÏ-:–…á–Äq¼Øq|Ã7GàÅöõ=< ¢ç˜óÀ³ðÑ,¼ÉÂã;Ï‹:߸’ÏÂ8¢ÀL><ãÊ¿Nw©)é\ãz*7ÆO'±Î/]pß-ÏòÛžÃrA*c… Ì~ûmÅ©_ψCúâ+p0ðbs[ÇõÀ›êkç”ØT_û ðL_²ºáÌb3[^µjV/¾næ³Æ¨Iý¬ÍÌæU­‘ÕT]ck·sÞö–†>ŸóáóùonǶ»~ÀÝ¿“\Îp„ ;Â;19Ç£÷Ìà­I 8úË[1zp®ä<‡3Üù|7Q çÌ8n+>¢9ht|gÑ>Îa®ØÏpQÅ1D¡‹!vŽðÑ A ë°üùuG‰Ö8Ï Ç”„iº ²T½¸ÄØX¥R((3üR9hcf<~ïû<~ß r9 A˜ðþÅ Ì uó•­6b¥ºÁTrðb{KÃõÀë[ËÎyë[5瑲†Y ι1„!³>»ú!f  Õ9÷=3»²Î'«ÞµÀ7ÍlY¹Q‡¡¿ëöC=»ÿtÎÝÕõz?œsu2=cÝ7R¯ç 올Ï÷ì~¯BúËt`·Øë- ÿx§0ŒˆˆˆôJs[ÇG«é§õíÀ¶Û­ÏU¿ø3gF×Ç1x¯½ð.çé6ÎøÞAìº×fQ>$Ö•ÄžgQÐ%Zç;|ó0/H…f’š0à?Nih¦pœxXÆ, Êx?Z—3‡™‡ó,|4 ߇E廤¤¸ðЦè¢#WñÑ‚(Q…Ï"ß­¥ø:ùÛÏe„_\z\vgœÄ¾Î±`înüÅ#L~yF|Ia† ñ9ùä}ØÿÀúã+Uœ|®¹­ãGÀõMõµ¹þ8ñj¤ôK é›Ìœ \ßµ¬ŽÒŸï^@G5 ‘>—þYïGòg½ Þ刈ˆ@{KÃG_îóísÈúl¾ý(þrùdfÍXŠá¢$äC1Ž7'.àúOà¨Ó·d›]ÆÅ@LºËI!¼â…™³T`&l‰Vâa—âcL1#˜‰+œ±X˜&+œw‚À°ôG@ ¥]df¼èýx±m½éâÒƒŽ1¥!›r›äØEó;¹ûÓxkâ‚Bø%„1£¦ÆãˆS7gŸC6èÓïRìã< ø\{KÀëë[5ç]Iι/§VÝkf3ªRÌêé4ç\Wìõ¸ªU"}mûÔOfv{Õª‘²¼j ""29ç<çÜiÀà›ôO&op…sî^çÜØ~<¯¬œyÀgÍì¬rAç\sîà~ú'wðªsîçÜè~>÷ efªv«+3{økµë~s°¸ÚEˆˆˆÈ꡹­cÓæ¶Ž›ÿÒÏÝÇm6–‹.9’ñã· ¯Ä‰B# TÌïXÌßoæ¯ü¹\Pè†â:£x‰.'…`H*ÐQÒÝ$ÖYÅÂ"ùuùíé@Izÿüs-…[Ýz±[Þz†AÉ‚ƒ(’¼MnF‡˜wuÉ¿.„WHÕœ Ë÷ˇeˆöM½÷Ø~“Ú¦sÉ7þV1³ñÆkó³ è¯ LÜXÂî®/6·uØß'äîÞ­v«±k«]€ôý¬EDDö–†MÚ[nž Ÿ‚0ym>’s^Ïž_·4L‘3‚,œ×ÉÍWNá‘¿M'¢ðIf@¤B°$+Ô‘Ø^z /J)¡›c¸hŽX|?É%+€Òm %ö¾I<Òm½ñÐ Æt7öÍ×ðû '–ÂÆzŽàìËvé¯ L\aÎÛÞÒpPŸ|›±îºÔ²]¿V´zÉú|¯!ùùîÔ¯I_Jÿ¼÷!ù³þI¿W$""=¢0ŒˆˆH/9çÆÏ¿Ö¯b)MÀ‹Î¹}«XƒôÌ3Àfvg¹ιqÀcÀw!Ñp»? ‹Î?Ù9wŠs®Zu 6Çvˆú Ú…¬¦¾|˜YíB¤o™ÙT`ù÷’^œ »Ã¸x˜Øëè8é®,%á—øöØû* ͸غØ>¾—þ,âû?_ÌøÇ­ÏrýÏ`ÁÜ%eƒ0ã?¶ ^|$ã6«­Ö× ¢î®Ímw7·ul]ÍB 3›œ¨n0³›Ÿv‘Õ˜™ý°ÓÚòj×"""²&koiÞÞÒðC`2á¿s«ò·¼¡Ã=Ž?{Ž;kkj†¸D¨Â‚0äŒÇÿñ7^:™ùs–—8< 2BÉPL¹àLV%¬)Ûi¥4ˆR¬‡DH$¿är~à%YÊwhéq—Øý$òAâá¡’Ï‚TÍÙ3ã?Í3¹ýÚ×Y8¯³lfϭǹ—ïÊF›¬ÆW*oàáö–†»Û[4çí™K7ª]ÄjìWÀÄj!ýæ«Õ.@DDVLMµ Lœs—ß®v1ã€Çœsç—™Yi¯f©¶«€ï˜Yg¹ι&àÂ»Þ NqÎdfú#wf6¸À9w9°}Æwú¹¤J¾ \{88{½°O+ꆙ-.uÎ]ì@év¾M/rL™ì‘Z7§…Þ¹&]Ë{©×OdŒy³Ï*ê3{8Þ9· °^5k‘Á§¹­ccÂãlQåR >þ‰íØfÛõ¹úªñλsÃ@Œçá¢[UL~y:?<ã¾ôÝÙeÏÍ0ÏXÔÍÄwF1Ô‘žZç{ó=ÌÌsaCÏa¾Xú('¶‰Î>Æícž‡™áÌÃ0œ9̼ðÊ ¬_C$º¿¸ÔëâÕ=žG*°’ìî’Ù&š)éS6øR¾ÓÌüŽÅÜò«Çxsâ{Qø%|Oñ ̰¡§œÚÀÇ>¶m?{*:hlnë8¹©¾ö¶j3ЙÙœsÛGûe iëç’*¹ˆß†ùµÔöeÀ/Sëþ×§uÃ̾㜻8•ìÓÏ%UrçB¦?’ü]àË©í‹(ýY?Ó§uÃÌΉºZŸJiW벿û‘U£½¥aÀÍy÷Ú=6Ûn7]1…÷ßYB­÷€ü´÷­É ùÍÿ{#NÝ‚mw]çòÝUžg8œ×á,öÎm]4ͯKt?ñ G` …Xñуðá1âç/œË C.ù{<„Ÿ\Ô €üôwȪëâRÂÉêX“ð)eâKò\ æuÑ|Ã[¼ûÆÂ(S ¿äŸûCŸ=u+>|À€ú“Ì@c{KÃÉu­šóV`f œs‡Þ¸ñsèZÐUÊÌ–:ç>œ|Zå’¤™Ù=ιã€ó€Ý«]ˆˆôœÓ5³"""=çœÛ¸سڵdh¾`f³ª]H_rÎ}™°é@78ÅÌî-7À97„ðn-_ï·ªzn6p¸™=YíBD*‰B2‰ kÌL]DDDDÖPÍm'^`< þ8½|y7üéI}tJ!$’ï–’Šxžã“GïÁQÿ·7tu]¹ ö=ï èÊ…YÛsñqÖÅ=ÏutæJÇY.€ >ærX`]Ùa˜ »Çøx~ô˜|íù5¾£¦ÆÃ÷5¾GMMøèGëk2ýظššèua]z{~Ÿüþ±m¾crÛ»Üq}+‹,-„`,ìÞ=7nmÎ9ç6Þd~ÿÎôÀ­À)MõµêÈ!šs.ý?¿4³s«RŒˆˆˆÈ ×ÞÒ0 ç¼Ëîùã4ž~dVá.ºÙ‹nRà<øè'7à€£6Æ9…2ˆ:”Ö+í\b©n&–³’'‰Ç\éqçÊQ6’옻”®® ä½®½Ö0ü¯ðÞï³ìcøþ=¯hénLå}ºûæ„Üó[,^˜K}FÅ÷¸þ¸œômÙ`ÓUøÖtëVà”ºÆVÍy{È9·9°cƦ§Í¬Z7ïKpÎí Œ‰­škfÿK9ðc«Þ6³ ýQ_%ÑüvÍØô3’×M2³ú§ª$çÜX`ïÔêIfÖï7Ctέ |4µúE3{/6f°sjÌãf¶¨¯ëëNÆw`¡™µV£©La‘^rέÜVíZ2Ì>gfU»¾2HÂ0OÇ›ÙÛå8ç¶$ü¥1L5³©Õ.D¤; ȈˆˆHZs[ÇÇ ïþ_[íZÒžh}?üá¿,]ÖÝñÕ+ÞæÕs8çØjÇ ùÒwbÌØµ²Ã0eÃ.ÅpKW—ÑÙËtö: Sº=—Kb‚¥KËt†qA?ˆñ!—t&Xñóãâᗬ핎—Zïœñð__ õWÁ, ÂDo8`;¾ðû0t耼©êEÀùMõµú x Ȉˆˆ¬Zí- vÎûBëlþþÛit.ÍBÅÐHÖØdëQ|æ´-S;¤4ĨäÊo³‚\vˆ%Š)»­ªÉÓÆìö%tv–†aÆ®=‚ššr!˜žYz~©<&:НÃàñÌä™Ï §»ÑûN‡‚öÚ=ŽìL«r)%ökØš /:œÍ7« ÃA€…W¢@`ñú„÷øé×þÆËϼ…ï¹Ââya—?ºxÆ÷óe/ùíñcä÷/“ÂÏsx¾Ãó¼ä±üüÅ5œ>z‹Õ_ÂpWèxC>ð½öÓu¦Þ£ç*¿¯ô¾‰u.v¬ŒãÌëXÄï.l)a‚x&ü ^ÃYg}œÓNoˆA˜.àô¦úÚ(#""""²fªkl} Ø—8çÝ£a]ιt6Ú|­B¨$ÝÝåÝ© ùýÏ^còKó ¡ü="œsÅÇXˆ¦d[4í,l¯x ʃÄ9’Ljw),9ƒÂ˜Œš¢…ÄczLrl~©Ç¬1Ùc‹Ë‚ŽNnûÕëa&ª7Þa'Œ!C=Ž?{kŽùÊV1Óœ^רúaDDDD¤§Ü¿jEDD3Ë™ÙYÀ·‰üxÈ9·aµ‹YƒÌ>mfß5³®¬ιaιk€;uúµºž¹8ÈÌÚ«]ˆˆˆˆˆˆÈÊhª¯} Øx¦Úµ¤m´ÑÚüô‚&:pû°+‰…§„¡Œ0³hÁ®ûY ûÓ˜%Áß÷ŠA’’€‹Ke²B3… Œ?\œá IDAT—š¡dçE¡/Å‘ÃYP “– ¼ 'êrƒç%^çïlëG!œð°ÅPŽçÕ–^Û/rIi2Þc~™üâ;\÷£ûxgê¬èó?ëBˆ'0¶Ø|,]tûî·uµ¿&Y‡5Õ×þ¾Ú…ˆˆˆˆˆHuÕ5¶Nd€Îy×Ýh8_½h'ö9dƒDˆ$¿X`,^˜ã¯×½ÁÃwL'ÈY"ÐBV$Š!;dâeFâÛ“Ç( ¦xÉc‘ë*Öë2r9K+Zò¡šòášžZ²Â3ÉpMö˜×_Ï_®œÌô7%BHAŽÂ{Ø`³‘œ}é.ì1~Ýê~I²-«klÕœWDDDDzEa‘•`fWÇK«]K†sU»5À€ÝÍìrœsÛÿÎê·ªzç2àx3ˆße‘^kª¯}øpO•K)1dˆÏOÝ—sÎþ#†ùaW˜T¸ÄãßÍ/såy÷2wÖÂD@%I\b!‘xPÆ'˜ñžOÙðˆŸqLbœçAÑÕ5±ÅŠWð¤:Âê8“`Iwtñ Ï‹u†ï)–‰‡j\Ô9'z´Àxð¶g¸íW²dÑÒBà(ÿçI‡¼?ùéal¸á˜j=²Lšêk¬v!"""""20Ô5¶Ø9oÍ#OÛ‚“¾±-C‡y±Î$Ã1ñÌ¿>àÏ—Ofîì啌N*%A“TG˜J]bÊ#«›Œ+Ô™ëJ†b€žuqIdHgâu–ÖX ¿tßU&—3½g÷üiKæ’á£XW›¼_»hgÖÛxx¿eMÆ×5¶jÎ+""""½¦0ŒˆˆÈJ2³;;ƒ 4:ç.pÎùÕ.f5?0³éå9玞>Ô_…õB83êh3к‰ˆˆˆˆˆ¬”¦úÚÅÀg€kª]K–ì³%_r$[nQ…3¢.%VìZòÖ”¸ô[§í©i…€J1à’ì S °d„eòa?˜I'Ým%ŠÁ1fÅzã ŽpŒ‹ºÃDû$:º¸ò˜tÀ§¤ó‹ËëÇöɯ›×¾/}§þ9±Ø}'6²0À3rx çž³?'ŸòQ† ¿:y øHS}m[µ ‘¥®±5?罺ڵdÙuŸ±œóó]Ùd«‘±î0a Æ‚°cÉŒi‹ùãÅyíù¹¥•T°…DЄŒà Ñœ´rè…Ä1²ƒ&ùúÒ˪èâR|ŸÉ€ ñ÷xÄÞ_ñ=Ì›³œ;~ý:Ï?>»z±\²+ÌС'~}Ž:} j† ÈËÛ€Ô5¶¾TíBDDDDdprºæQDDdÕpÎm <l[íZÊøð¹J¡ÁÀ9÷eàºj×¼œdfÿ,7À97¸ 8£ßªê…Àqfvµ é)çÜáÀØØªÏÇǘ™ë×¢DDDDdPhnë8¸‚x“¨®®€[n~š–_+\áâÒW¼8Ç~ŸÜ‘ÃNÚœ£+gtutu]¹ õ˜…uv•¼µqCjÀóp¾ Û¸Pã;jj<|ߣ¦ÆQã‡ëüÂóâz?¶½¦&¾¯«8.¾}Ê‹ïðÀÍO±lÉòB÷—0Sì³õVuœ}öþ¬·þè*üÔ{äAà˜¦úÚÕ.DdE9çÒˆü¥™[•bDDDDVcí- vΛË÷ÿåmZï/ì:^¼|X%züÐø:ö?jSü°*–xäƒ)éu±Ç WºÎ‚Ø>9 ¯K¶D!’âº7§ÎgÉ’.ˆÿÅÉ`Ë-Ç0d˜Ö…VÂNª®°®üc1ìÒÓ±åö™òò|¹ó]–-ÉXX³‰÷µñ–kqâ7¶¥nƒaUûÙwãAà˜ºÆVÍyeÐrεŸŒ­šdf;T«‘5‘Â0"""«s®¸h¨v-e̾`fT»5@Â0ÿN4³÷Ê pÎmÜÔ÷[U½38ÌÌ^¨v!"½áœ{ح¹fVÛ_õˆˆˆˆÈàÒÜÖqp30¢Úµdyö™·øÍoZY´xy1ã%1›n¹.ŸûÚ'Xg½Ñ‰ÀJg:“KZÏ+h*‡fÂ0Ìòïc%n,nHM‚ Ã0^™ÀJþÑÏ¾Ôø.œ)ŒË¯Ko÷ÁŒGïzžŸR Á˜vƒ1 0>õ©ù܉{ãûî:±¼ß_iª¯-M‰ Pι}€'»v•™}½?êYÓ´·4 è9ï«Ïtð·_¿Á’Å]8 ‡DÏÁúãFrÄÿmÎ:ë K…Wb!–©0Kv°¥$0 Ö” Îä×M8—%‹K§c[m»Æy+dÉSyŸâ¶ 0þsßL^~jN!Ä‚0@`Æ~òé/l†_3`ï÷{à̺ÆVÍyePqÎ Ä[ ÿ Ø3öZa‘~¦0ŒˆˆÈ*æœÜWíZÊ0àçÀÌlÐýr©Êa˜ðSàgf”äœ;‰°ÆQýUX/½jfïT»‘ÞêAæ3»¡ŸÊ‘A¨¹­ã#@3°^µkÉ2{ÖB®¾æQ¦N•êCáõ°C9êÔýØeï-Ê„]’a˜Î®°£KgV¦âºòÛ—¿3[ž†Y]¼¡C£Î0QW˜nB.Å.1Ѹxø%k{™ã-h_Ä}7´2ëݹ‰ L¼̨µ†rƗdz瞛õÿ·g øAS}íÅÕ.D¤·z†é>¢›³ˆˆˆˆôö–†½ ç¼ëW»–,sg/ãæ+§òöÔ…x®üpŽBט¡Ã|9nSvÚ³6bI?– ½$C1e3©n2ém“^í`ñ¢Ò?¥o·C-Æ{-+~©Wâ}ÄW\?é¹·¸é²f½ÓÕ•ÿÜ‚Âëm·Y—‹.>b a–'*#«©eÀ7„é[u­O3€ç¼ë¬;Œ3/؉5m„YHɇZòË–æ¸ïÏoñÀmïÐÕ„c±Çhñ(³-z…HpeÆÅ;Ó$›²Ã6©…Œ:H<¦ÏSzìü /âYcâc'½8[¯™Êï.‰}^?·œ±éÖ£8÷ç» ä Ìrà$ad5w~µ YÓ¨3ŒˆˆHrÎ\K²Mê@2‡°‹Â½Õ.¤§ªÔæAàóf6«ÜçÜÎÀÀNýVUïý 8ÃÌJoÝ+2H8çöƤV/ZÍ,W…’DDDDdjnë Ü Œ¯v-å¼ðü;\wÝc,\¸É€Ì‚Io,ÍÃl±)nèPœï+•‚-~l{MMôº»q¾Ã¯ñ˜?{ßô_æÌœG1CЉ–Ñ£†qæW?Æî»ëçŸ\¯¼ÚT_; ïÜ,"""""ƒS{KÀŸóÎk_Î-WMåÍפ1ÅPÌ¡>½ ;ï][ìØ’±Ä.¹Òu%Á™\OéÍpç †ëmDDDVG ȈˆôçÜîÀ?€«]KÏǙٛÕ.¤’~ üœ`fOT¨eTTËIýPÏŠZœjf7U»‘¨¹­ÃçU»–r‚À¸ãögi¾· #ê %¡˜úý¶æ“'||\.ê ¾3B1e4±ÐL˜ ·Ï›ð:¹%KKj¶ÕæxÇáy^±ÓK*ÄR) S2.’‰mŸúü4Zï~ž®å]@²L~Ùa‡ 8ëìý;v­~ýyõÒS@SS}mÙn´""""""+ª½¥Ávïû~µk)'Œ‡n—Ý9=šãf„bìôá±tô&Ô ñŠ!–©0KF×—ŒpL" “+ ̼ð¿Ù,˜·¼¤Ö=>²ÃGÖô8Ð’ýu¾)7Æ9&¾ÐÁc÷ͤsyP‚1 ;Âl±ýhNúƶ¬]7´ ?µ{hªklý Ú…ˆˆˆˆÈêIa‘~âœGˆÙµÚµT008qgµ )§ŸÂ0÷'›Y{…:ê ;þlßǵ¬Œ¹ÀQföhµ èšÛ:N~ ÔT»–rÚ^z—k¯}Œó—F˜ÒN1u¯Í‘_ú8µ¬]v‰=ï̹h]Ih&+,“ ÍÌyy2¹Å¥a˜áÛm…6¬x)íè’Þ}G˜D'? ×X.àÉ{žcêóoE˜èo± À‘GíÎgùžçúïÔ{w'6Õ×.©v!"""""²zkoi8ðo¬vÎ;ù¥yÜúË©,œ×LbA˜|ט±ëãðÿÛœº ‡'.¹b‡—J`ò™t'˜â˜ðùsO|À‚¹É0ŒÞo}†¬éUè¥ÛðKll®ËxìÞL|qn, ÃDûµ 'lŠçè9ïÝÀçê[5ç‘>ãU»‘5…™½4W»– Öþæœû•snXµ‹©‚Nà[ÀáÝaÎ ¼së@ÂLöUFDDDDD¤gšêk4 ª]K9õ»mÊ¥—ÅŽ;n€…WìÝ‚ fOïà† ïã•ÿNÅóà k¼èšÂâ;üØkßsøÑ:ßsx>Åç…Gû»ÂyS ©syà¹âþ~ÉñòëÓuF¯]qÝÜ÷æqï51å¹iáûòï?(¼ÿ1£‡sÞ÷9ö¸=zæ*ೠˆˆˆˆˆH¨klý=pxλÝnkó+êÙz—19Ë\Úß[ÊM¿˜BÛ“sò÷…(†eÒšD˜& ›ØîJ­³ÀÈåŒ\-ÑùÔ>™ÇsÅûW¸rç,ÛþþRn»öu&<ßž;GI #Ö©çïÀ¡'èA˜_G+#""""}MaDDDú™s®ø ðÅj×Ò€cÍljµ ‰ëÃÎ0Ó€ãÍì© çü8®ο*= ffïW»‘Á¦¹­c7Âή›T»–rÌŒ;ÿú<¿óŒðâ y5°ãÞ[qàñ{ãÕÔD^Â.0¹\@g¡ûK¾óK¼#Lj]Æö÷Ÿ™@×¢ÒkZFì¼=CFËîòRÒ%¦Øõ¥Ð¦L·˜×Ÿ{ƒ§ï{‘\W.ѳ¨C ì²ËÆ|õìO°Î:#ûé'±BàܦúÚkª]ˆˆˆˆˆˆ¬yÚ[êûÐs^xøŽwyøöw£9oiÀ;챇³)C†z±Ž0±n/¹t÷—ìN0ù.2ñqÿû×ûÌ›³¬¤¶°#תIt|Éîüâ2Ç$Ç×½úÜÿÇLº:Ã9®a' ¬0ÞzçÑœôÍmS;´ß&½_¯kl½ºÚ…ˆˆˆˆÈšAa‘*qÎ\Pí:º±ø’™ÝVíBòú( sðE3›[á¼î¶^Åç^ÕîN0³ÅÕ.DDDDDDd°jnëØ”0S_íZ*yõåüêê1wÞ’BÆÅÂ08Gíksè©ã©ÝpX˜%|)Y†e’¡™ä>ïýï:–N=×ÚmG†Ž†_²Â.±õ~Mêu*,SSãa]]<Ýü<ÓÚÞO ÂXôÜsŽ£ùG½G140-Nhª¯½·Ú…ˆˆˆˆˆÈ𫽥aÂ9ïnÕ®¥’×_™Ï_®˜Â‚Žå…L¡{ áÔ·v½aö…-Xãá‰`‹ÅÃ1¹ôºTp&g%aš'žÉÜöå%5?xCFŽ’h)ÿX~[ggÀ£÷Î`rÛÜât׊˜üÍ>vS>yÂ8ö”—ÅÀ‰u­wW»YsxÕ.@DDdMef?>”þmà Üêœû­snDµ‹é˳Íì3Ýa¾<ÉÀÂ\¥ ŒˆˆˆˆˆÈÊiª¯}hªv-•ì¼ëÆ\zùÑìºëÆ„WîX„WÍïÍå¶Kïç•ÖÉø~x¡Žç9¼øóŒuù±~|ñ‹Ï͂¹â‹çÂ;áú‰cS|ô3Ö»ä¹òÛç¾7—~ýO¦½ôVôþòç ß'A@í:#8ÿGŸæ3ŸýÐ@¼|BA©¶ºÆÖéÀxàÁj×RÉÖ»Œá[WÕ³Ýîk“‹º¸¹h‰:¸´°Œ›1™Zg‡¡“Œ.2ùàJ¤!¹ÍŶyÅu?Wa ÀsÐÝñòÁÂcö˜Y3—pÛµS™ôâÜ0°'{¾Ö˜¾ü“hüÜ€Â|ì¯ Œˆˆˆˆô7u†©2çÜ';“¬SåRºó2p¬™M¬f«°3ÌëÀqfö\…s­üøÌ*8__ €o™Ù/ª]ˆˆˆˆˆˆÈꤹ­£¸8µÚµTbfÜý÷øÛmÏn‘Kì`›mÁÇÛoˆvyéŠ:¾ä¬ðØÙ;ÂÄ·¥Æ½óØ ,Ÿ¿¨¤–uöÞ¡k £Æ÷’Ýa²º¿DYã^öu^zð%‚\P¸.Dá­rÙm÷q|åìý3fÀß¿ã5àЦúÚiÕ.DDDDDD$¯½¥¡ø5pzµk©Ä ¹s:÷ßô6ƒ%ÄB/8Ø®~Ça^ªÛKªLÔ-Æ‚|¨†ä¶½o:sf-+©åÀ¦M9z^¡3 e:¿·y®tìËOÍቖ™tuYÙŽ0Ûí¾Ÿÿæ¶Œ^gHä½58´®±õÍj"""""k…aDDDçÜŽÀýÀU.¥;‹€¯˜ÙŸ«UÀ* ÃÜœnfó+œgoàvþÏd p’™ý½Ú…ˆˆˆˆˆˆ¬®šÛ:~\@3°&N˜ÉÕWþ“ŽŽÅQ¥®$³öº£9èäñÔn46 ¶Å`L!ì­‹o‹mï̼õÈs™a˜ÚîÁ°QÃð‹ïðS!—ßÃO…aâã¬3ÇsÍÏ2}â»™,¼°èØ>ÌáGí1ÐïŒ ð(pTS}mÙŽ´""""""ÕÔÞÒpp!|Îûæk ¸áÒÉ̽¬¤LþFcÆåð/lΆãFFdŠ¡Ë Çä²3Üó.s>( Ã|Ô¦¬5zHvè¥ìc±;MçòÜ5×__€É?wÎñ©Çqðq›†9ï€#ë[;ª]ˆˆˆˆˆ¬™¼j """`f¯ûÏT»–n¬Üèœû“sndµ‹YK3Íì¸n‚0ßZøA˜YÀþ ˆˆˆˆˆˆô­¦úÚ “€åÕ®¥’vÚˆK¯<†Ývß Œèv¸Ìû`>w_ùŸ„ï;üèÂ/þÄô ï$jŽ®^ÂcìØ‘üø‚Ã9â3ƒ"sðIaDDDDDd «kl½8(M [î8šï^³;íU]rF.Z‚9cî¬eÜüË)<óج0(ãQ¢”hŠ!ç‘ØÎ_ ô8Å%¹Âc¸ýýéK¸åê©Lyy^¢þøóÑë ᬋwæãEæà`aDDDD¤šÔFDDd‰&·‡W»–x 8ÖÌ^éÏ“®Dg˜IÀqföR…cnšV¬º~5 8ÔÌÞ¨v!""""""kŠæ¶ŽwµÕ®¥3h¾ûn¿é)r‘¿‚ÆÅ»ÅàØ¼~ Ç~oè¨ûK¾Lêy¾#L—‘ËtvL}à)–Í]Xrî >ña†ŽQìúR“êëãû^áù´g§0á‘— r¹¨# þ~=î¹×æœyÎŒ5¼Ï?ÃUàgMõµ?¬v""""""=ÕÞÒ0¸[íZºó¯¿ÏàÞ?M#×e…Jlº‹sŽmvCã ã>¢&Ñ &ßý%«#L~LËo3ûý¥É^9Ÿ>~sF‰w†!Ñù%Ý Æ‹B8/>ÙξGÐ$›ŸFÝ`vÚ«–Ï{[FÒïŸç ¸øa]c«.<‘ªRFDDd€qÎyÀUÀת]K,Î6³ß÷× W0 saG˜Ò«tŠÇݸ ·åõ—Ç#ÍlNµ ùÿìÝy˜du}.ð÷ôllFË’Eа*$7–\5Òb %X" ŠÁëÅ%ÆHŒ&j£"*î F£q "ÍÒà†Zq¿êm£  ²6 3 ÌLÿî=+3=3Ý}úÌ|>Ïsžâ©9ËÛõ§ê¼¿/ÀÖfhdl¿$&Ù³î,÷å.»>ï÷%¹ùæ·Ã+—•]£³ÃwÈN<$Øíë-À¬ÿ½ñ\~þ÷³dlá:×|ð“È6÷Û.sæ¬]†™;§ÊœÅ—•ïÏ™3ñ¥Kó‹óœ®¸nòËÊ×9UžýüƒrÄ‘ûOëç5E–%yq¯Ó:«î ktxpßLÜóîUw–ûò»ËïÈYï¸,·Ü°ö@›5Ë1ô€yé=oìºÇv«Š/«J/ã%eù=K1¯üûïróuKÖ¹fï9{ä~÷Ÿwïå—5^ï^2ž¯ýÇïsåe W•_’Õ·½I20§Jïù»çÐgîÖ„i0Ë’¼¤Ýí²î $uÖVJ/¥¼2É«“Œ×ç>l›äãUU}¶ªªê³‹“œ\Jy0Õ„×'ùvšQ„ù|’§(ÂÔ£×i]–äÀ$?ª;Ë}yø~»äg—G?f÷d¼dÅÒ·«¶2^²ðæ…¹ðå²ïüwæ Tëns&♳âáž•ÛúΗå㨪 Tëî¿Ö6gâõö?Œæ»Ÿ¸$×_~mÊšç)eÕëŽÚ!ÿtÚÑM)ÂÜžäpE ©ÚÝþ噸çýaÝYîËîûî¿ûàþyäÁíµÞŸ¸¥,_^rëèÝùÜû¯È¿~cªL”d&Ê2+þ{`í÷²âu|y²|yYg[½Oµú«Î·v纫çßÞÿ?ùõ/oÏøò囲v¦µÓ‚¼ê]È“mDfa’#a˜M”a`–*¥œ‘ä™™˜¾2Û=;ÉO«ªšMO¦ü*ÉcK)|¥ªª3±²ÑiIæÎT°ÍðŽ$Ï.¥ÜuŸ{0mzÖIž˜ä«ug¹/Ûï° ¯{ãyÞÉgÎ@•²ªÄ²ºÌ2¾ly~rÞséÙßÌÒ%w¯*«¬Üæ¬(°¬.ÈTIOY~m||Å1¹Çkµv¡¦ªòÛ\–|æ›Yrë¢uK0ãçúó÷Ìiï;.û<|çº?ÆÉø}’Á^§õµºƒlŽv·S&îy¿Rw–û²íösóÂ7î—c_ºWæÎ[ÿcpË——\:ô‡|ñ£¿É‹–ݣIJ¢3°ö{eE™æž[îQzY³ü²ê5ÉO¾}S¾ü±+³ðÖ¥Ìþˆ˜¿;sÿìù'÷›¦OgJ]“d°Ýí_RwX“2 Ìb¥”¯dâ‹ÆëÎ2 Kòƒªª^Zw$g'ùóRÊ/7´CUUOHòó$ÝKµé–%yQ)åÔRÖ\+€ºô:­ÅIŽNòþº³LÆáG¼ó˜ì´ã)+Ê&+·•”kyu†ß;”[®¾iUqe /+Š2Õú&ÃŒg ÊÚå—jírÌò%wçg_üNþç›#)Ë–¯šPSÆWjæÎ©ò‚’×¾áðl¿ý‚º?ºÉøy’{Ö/ê0ÚÝþ™X¸ñŒº³LÆ!Op^sú#²ã®ÛlpŸ«.[˜O½ëò\så¢u¦ºdU)fâµ”‰I.÷ܪjõ>Õ@’•Ešï-¹syÎýôUùÞ%×g||ý?ëΙ[åèùO²Ýýš°^cþ_’ÛÝþHÝAàž”a`–+¥ü0ÉAI.¯;Ë$,Hò¡ªª¾XUÕýk¸þIžWJ9©”²x};TU5PUÕ?$ùF’]g4ݦY˜¤WJùxݼ1-V IDATAX[¯ÓïuZ§$yU’ñºóÜ—½¾sÞùrÀA{­Q`)kcJÝ‘o|x8—û¿Ö*ÄÜs›˜âR&^Wnã%ÕÀºSeVžç¶knÊϺ87ÿæë-ãd|<»ìrÿ¼õ]ǦÛ{dÝ×d]”äñ½Nëu˜Jín¼Ýí¿:É+Ó€{Þ‡î³C^æþyÔ!Úà>wܾ4_øÐ¯óý¯Ý°Æ”—jÝr̆¬Ø'ë9æ¿]”?óŠ\}Å<¼½Ë6yõ{:yâ3šð3u’äâ$owû×ÖÖG ”re’Ç%ùnÝY&éØ$?­ªê13xÍ‘$)¥|fC;TUµs’K’¼%Éœ™ ¶®MòøRÊpÝAذ^§õ¾$Ç$¹³î,÷e»íä5ÿ´œôҿȼ9ëîR–-ÏÈ…ÿ7ý³¿ž¥wÞµjÌš[ÊÓ\–¯žê2§Zs"ÌŠ­J®þþ¯òóÏ]š»n_¼VgÍÿ>èñËi8!{î³SÝÓd}4I¯×imøI'€†kwûHrT’õ.F8›,ØvN^ð†}sü+÷μùë,®”ä?/¾>_þèo²hÑòUS^ª5Ê1Ù@!fõ>«‹0I•_zc¾röUY´pÙ³í?ØÎëÏÜ?»?|‡ÍÿCgÆÇ“<­Ýí/¬;lˆ2 4D)å–$OIòïug™¤½’ügUU§ÌÀµ>šä€RʧçTUuh&F8:y¦ÂH’K)ÿ¯î Ü·^§un’¿HrcÍQ&å°Þ#óÖÓËλüѪ©0+Ë-+K*7\vM¾ù¾ó2öÛ&&¼ÌÉ“aÖ-Ñd|<e¢3'¨²ìÎ%ùÅ—¾ß~g$eùòÕ…›5¦ÑÌ;ÿóŠ'åUo8<Ûn;¿îf2J’¿ëuZ/éuZËë0ÝÚÝþy™¸ç½¡æ(“rðSwÉkÏèd§‡l»Á}®þõùÌé—çê_ß1QlHªê^'ìU‚©’;-ËyŸ¾*?úÖ)eýÇÌ7c_¶WNþûý²íöMX¯1%É©ínÿEínÃ혔a AJ)w%yN’wÔe’æ'9£ªªs«ªjMÃùoOr|)å%¥”%ëÛ¡ªª9UU½%avž† Óá’$ƒ¥”kêÀäõ:­%90Ék˜MöÜg§¼óƒ'æàCö]]h)kUÆsçm‹ÒÿøÅ¹â[#©VN{™³Æd˜{l+÷™SU¹ý÷7ägŸº8cW]wýVO„Ùu×äíï;!O>¼S÷Ç1Yw%9¡×i½³î 3©Ýíÿ8÷¼ÿ]w–ÉØmÏíóú<2=tÃÓGß±,ç|âÊ|ÿ’듲¢ì2lh4ÌŠA0©ª*×^uG¾ð‘ßäš«mðü;îºM^ûÞNé=x³þ–tW’ç´»ý¦<ÀVN¦L85É‹’4e%–#“ü¬ªª§ðœ?MòèRÊ6´CUU»&ùF’Hsþ¿ç“IŽ(¥7 Ð@½Nëª$%ùNÝY&cÛíæç”SÈ‹_õ”ÌŸ7°j*Ìê­¤,_žË¾öÓüèìK²tñ’‰É0ë™ 31fb…Ük¾÷‹üê‹—fé‹×sΉórèŸä:1»ïµcÝÃd&9´×imð»€-Y»Ûÿm’Ç%¹´Þ$“3›9yîß<,ÏyõÃ2Áú..%ùá7oÌ—?qe-\ºzòËzT+þáÇ—Þ˜ó?û»Ü¹hÃ?×?ú ÊëÏÜ?Ù{ûÍþ;fÈ-IžÒîöÿ½î 0YUÙÐŒF`Ö«ªê°$_Jr¿º³LÒ²$§&ywÙÄÿ ©ªêÅIþ,É߬˜”³¡ýºI>¤)OÔ”$o,¥¼½î l¾¡‘±IÎNrBÝY&ëê+oÊéo=/×^=ºê½êO-Øa›tžyH.þI^?¶Î9ö=þÐü¡?’…×ܸÖûßL|°`Á¼œüÊ'ç‰ÝGLùß0~“䩽N늺ƒÔmtxp~&ù;±î,“uýÕ‹sÖÛ/Ïu¿[¼Á}¶Ý~nžrÌCò£oݘë¿î~G>oüèÒsÝÕ>Ǽù9æ%{æà§î2%¹gÈ•Iowû˜t +)Ã@ÃUUõÈ$$Ù­î,áÂ$Ï/¥Ü¼±VUµ])eƒß.VU57ÉÛ’üm64¿zö¹;É J)Ÿ«;Sghd¬ÊÄ=ê©ug™¬»–,ÍÇß{q¾}É/W¿y»ëªH5g ãË–¯süÀ¼¹_ºtݯø)â¡{´óš|F²ûƒ¦0õ´û~’§÷:­þ`K6:<øÖ$o¬;Çd-½{<_úЕùþÅ7lx§*™;w Ë–Ž¯óOsç­ÿý•v~è¶9éÔý²ëÛMEÜ™òÃ$Oowû7Þçž0Ë(ÃÀ ªªÝ2Q0éÔe#\›ä„RÊw§ê„UU=4Éç31š»)Æ’<£”òºƒ0=†FÆ^˜äÃIæÖe².½h$Ÿ8ã’ܵdé=Ê0³îDYëåIG<2'Ÿò—™¿ 1C’üG’{Ö’ºƒÌF£Ãƒ'%ùhtÏû“oÝ”Ïà7¹ëÎuyØT=t§÷×{eþ6s¦ìœ3à+IžÓîöï¬;l eØBTUu¿$_JrXÝY6Âò$oJrZ)eÃKèLBUU½$ŸJòÀ)È5S®Jrx)岺ƒ0½†FÆËÄ}ûýêÎ2Y×üîæœþ¦srõU7es†¯n³í¼¼øµOÍãÿòϦ.ÜÌxO’×õ:-?¤Ü‹ÑáÁ§$ùr’?ª;ËdÝxí9ëí—çÚ+mÖyæ/ȳ^¾wxÊNS”lÆœ‘äµín³~§€:)ÃÀ¤ªª¹™Xiö…ugÙH_Krb)e£G/WU5/ÉiI^3婦גô6åo ™†FÆ™ä‚$»Õe²î¾kY>ùÞá|ãüŸoÒñ{ì³s^óÖc²ëC›´vE–'9¥×i}°î M1:<øˆLÜó>´î,“µôîñœó±«Ò¿àúM:þÁ»o—“NÝ7»üñvSœlZ'yu»ÛÝA`s)ÃÀ¨ªªS“¼-›³lëÌ»>ɳK)ßšìUUí‘ä I;M™¦Ë¹™ø[›ØÊ Œí–äÂ$º³lŒï^ü‹|ô_.È’;ïžô1yÔ£ó‚S˼ùs§1Ù”[”äø^§u~ÝAšftxp×Lbö¯;ËÆøÙwoÎçÎøu–,^>éc:lçû²½2oþÀ4&›r‹“<»Ýíµî 0”a` UUÕ IÎN² î,a<É[“¼¥”r¯ã˜«ª:*ÉYI0Á¦Ðû’¼æ¾þ>¶\C#c÷Kò¥$‡ÕecüáêѼçï¿”ß^±rÅÜ{®Á1ñ{öÛ/ÈËN}zwèÿšÑ|Sàú$OëuZÿ·î M5:<¸C’/&yjÝY6ÆÍ×/ÉYo¿<¿¿âŽ{ÝoÁ¶srü+öÎcž¸ã %›27$éµ»ýצŠ2 lÁªª:$SHZugÙH—fbrÊu÷ü‡ªªæ'yw’WÌt¨Í4žäÕ¥ã¦ÈÐÈØÜ$Nòº³lŒ¥w/ËÙïÎÅÿ±þggöÞo×¼æíÇf—‡É;Ò°{Þ‘ïæ³§ÿ:‹ïX¶ê½Á#vÉÑ/Ú3óæÔ˜l“|;ÉQín¬î 0Õ”a`+PUÕNIÎKr@ÝY6RIrZ’7%9&ÉÇ’üQ­‰6ÞIz¥”Õ€ÙihdìÙIÎN2¿î,ãúknÉ{^ÿùÜpí-yù›ÎOüÓº#mŠO'ya¯ÓZZw€-ÑèðàqIþ5É‚º³lŒ[n¼+g¿ãò\õâœpÊ>yÔ!ª;Ò¦øl’“ÚÝþÝu€é  [‰ªª¶ÍÄ—]GÕe\•æM¶I&ÆM^J¹ªî ÌnC#c‡$97I«î,cÙÒå¹ýÖEyàŽM[»"IòO½Nëë°¥<8ÉW“´ëβ1–/+YxëÒ<àAZ»b¥nwûo¬;L'eØŠTU5ä=I^Uw–­À·“UJ1n€IÛ/É…iæ‚M²4ÉÿéuZÿZw€­ÅèðàÃ’\”dﺳlá–%yI»ÛÿdÝA`º)ÃÀV¨ªªW&yo’º³l¡>›ä¤RŠqÓl”¡‘±’ %ylÝY¶P·%9¦×i}£î [›ÑáÁ%9/ÉAugÙBÝžäØv·IÝA`&x¶B¥”÷'9:É⺳lþ9ÉsaؽNëÆ$‘äÜš£l‰®Nr°" @=ÚÝþÍIž”ä?êβº&ÉãaØš(ÃÀVª”òÕL<\sCÍQ¶Ë’¼°”òÆbô›¡×iÝ™ä˜$ï«;Ëä§IìuZ¿¬;ÀÖ¬Ýí/Irl’÷Ôe òó$¶»ý‘ºƒÀLª<« [·ªªöHrQ’ýêMÒh·'9¶”b•¦ÔÐÈØ)INÅ­6ÇIŽëuZ‹êÀj£Ãƒ/ÏÄBsêÎÒ`ÃIžÕîöÖfš2 ªªZI¾’ä ugi k’QJ±ÊÓbhdìI>›d»º³4Ї“¼¢×i-¯;ë|Z’Ï'Ù¾î, ô±$/owûËêuP†’$UUÍOrV’çÔ¥A~žäi¥”këÀ–mhdì±I†’ìTw–†(Iþ¶×i½»î Ü»ÑáÁG'9?É.ugiˆ’äÔv·ZÝA NÊ0ÀZªªzk’7Ö£†“<«”bÜ43bhdlÏ$&Ù¯î,³Ü’$ÏíuZ_®;“3:<¸{&îyÿ´î,³Ü]IþªÝí¾î P7e`UU”ä£IæÖe–úX’——RŒ›`F Œµ’œ›äº³ÌR7'9²×i}¯î lœÑáÁû'9'É“êÎ2KÝ’äínÿ»u€Ù` îÀìSJ9+ÉáIn¯;Ë,S’¼¡”òbEêÐë´Æ’<%ÉçêÎ2 ]‘ä E€fjwû·%é&ùtÝYf¡+“¤«™ lPUUÈÄ(ê‡Ôe¸+É_•RŒ› vC#cU’·%9µî,³Äfb"ÌhÝAØ|£Ãƒÿ˜äÍuç˜%~˜¤×îöoª;Ì&Ê0À½ªªj×$$Ù¿î,5º%É‘¥”~ÝA`MC#c''ùH’¹ug©Ñ“<¿×i-©;SgtxðùI>žd^ÝYjtN’ÛÝþu€Ùf îÀìVJùC’Ç'¹¨î,5ùM’ƒa˜zÖ'“‘daÝYjò®$Ç+ÂlyÚÝþ¿&yj’ÛêÎR“÷&9VÖÏd`Rªªš“äCI^Tw–ôƒ$O/¥7 À¬642ÖÉÄdׇÔe†,Oò×½Në#u`zþ¯$&ù㺳Ìñ$¯jwû¨;ÌfÊ0ÀF©ªêõIÞ‘¤ª;Ë4;'ɉ¥«ìÐC#c»e¢óȺ³L³;’×ë´.¬;3ctxðÁIÎOò¨º³L³ÅINhwûçÕf;e`£UUu\’M² î,Óäô$¯+¥Œ×6ÆÐÈØý’|)Éaug™&×%9¢×iý¬î ̬ÑáÁí“|!Éug™&7$éµ»ýך` î@ó”R¾äÉIFëÎ2ÅÆ“¼¢”òZEš¨×i-Lò´$¯;Ë4ø¯$(ÂlÚÝþ¢$G&ùpÝY¦Á'9P&Ïd`“UUõð$&Ù»î,S`q’ãK)Cu€©042ö†$ÿœ¤ª;Ëøz’gö:­Ûê@ýF‡ÿ&É¿d˸ç½4ÉQínÿÖºƒ@“(Û¥ªª“œ—äÀº³l†ë“ôJ)?©;L¥¡‘±’œdAÝY6ç’¼¨×i-­;³Çèðà3“|&É6ugÙ ÿ–ääv·wÝA i”a€ÍVUÕ¶™ø’ñ˜º³l‚_%9¼”ò»ºƒÀt{|’s“<°î,›àͽNë-u‡`v|\’¯&yPÝY6ÁÛÚÝþ?ÔšJ˜UU $yW’×Ôe#|+ÉÑ¥ã¦Ø¢ Œí›äÂ${Õe’îNòÂ^§õ™ºƒ0»{Þ‡Õe’–%yq»Û?«î ÐdÊ0À”ªªêåIÞ—dNÝYîÃg’¼°”bÜ4[…¡‘±’œ—䀺³Ü‡[“Ýë´¾Uwšatx°‰ 1×å>Üžä™ínÿku€¦¨;°e)¥|0ÉQIÕå^¼¥”ò•ä©In›®K$ùÛRÊKa`òzÖX’¿LòÙi¼Ìÿ$9P€™ÔîöoKrx’OMãe~“ä E˜&õ¨ªêÏ’\ä§ð´K’<¯”ò¥)<'lu†FÆÞ–äï§ø´ý$Gö:­[¦ø¼0i£ÃƒoJòOS|Ú$yz»Û¿iŠÏ l€2 P›ªªœäü$š‚Ó&9²”òŸSp.Øê Œœä#IæNÁé>Ÿä¯zÖ]Sp.Ø,£ÃƒÏMò‰$ó§àtç$9±Ýíß9ç&i îÀÖ«”r]’C21!fsü:ÉAŠ00uzÖ'“‘äöÍ<ÕiIž­ÀlÑîö?“¤›äÖÍ<ÕéIŽU„€™g2 P»ªªæ$ù@’—nÂáßËÄD˜›§6$C#cL,dñúKñ¯1ÿ¦&‹Oµmû±Ú#RJùBD<9ŽÀG"bWÛ¶§jé§”rOD|)òüa»ïoÛöojYH)剈¸¿öŽ%x&"^ß¶ítí!ý”RŠˆ/DÄÆÚ[4omÛökµ‡ôSJ¹:"¾¯¯½e žhÛö­µG,¤”ò¡ˆøtD¬­½e@bþ÷ü³µ‡ôSJÙODÄ/Wž²ŸoÛöµG,¤”ògñ‡‘ãq2æß;¯=¤ŸRʯFÄ?Ež‡i·mû¹Ú#RJùRDüfä8°EDüODÜÙ¶í¹ÚCú)¥Ü9TDÌ‚«mÛ¬=¤ŸËà¯GÄ+OYŠÿŽˆ7µm;[{H?¥”G"â/#âêÚ[4óÿ=÷ÖÒO)esD|-"e ¾Ø¶ížÚ#RJùXD|,r#"ÎÄüϥõ‡ôSJqí˜Ûh·ÜF»ç6Ú-·Ñn¹vÏm´[n£Ýsí–Ûh÷ÜF»å6Ú-·Ñî¹vËm´{n£ÝrížÛh·.ßF¿ÛjoP†ÛèW"â-µw,Á°ßFßó·ÑkkoÐlD¼eÈo£_‹ˆ_«½e ¾Ú¶íÐþž*¥üND|.r|8XÄOy‰ˆ#ךˆˆÇJ)ŸÆO¹ü ™ÞÐDDÜ011ññ¦iþ¥ö~zè¡ÇÖ¯_ŸåaoDD333óñ¦iž«=¤Ÿ;wî¸ë®»2=숸cll챦iöÕÒÏž={_½zu–‡½#/^ütÓ4kéçî»ï~ý­·ÞšéaoDÄ[víÚõÈÁƒ‡ò“|ÞûÞ÷~xdd$ËÃÞˆˆ5gÏžýlÓ4^{H?÷Ýwß[·nÍô°7"âwGGGÿ}rrrèþ¬ZµjdÏž=jš&ËÃÞˆˆÑÉÉÉO6Móµ‡ôóŽw¼ãý7nÌô°7æææþ¸iš§jïègÇŽ×Ý{ï½×Þ±D·ÿQÓ4_¯=¤Ÿ‡~øñuëÖeyرlzzúO›¦9Q{H?wÝu×í;wî|cíKt÷w¿ûÝßkšf(ÿr×{ÞóžÇW®\™åaoDÄÊóçϦiš?©=¤ŸÝ»wß{ã7fzØñî›o¾ùß><”ŸÎûÈ#<¶lÙ²,{#"®9}úôgš¦ùëÚCúyûÛß¾gtt4Õm´×ë=¾zõêoNMM Ý'ömÚ´iíƒ>X"bYí-Kà6Ú-·Ñî¹vËm´{n£ÝrížÛh·ÜF;æ6Ú9·Ñn¹vÏm´[n£Ý{÷-·Üò•±±±¡ü}Ÿñ6úÒK/}¶išÏ×ÒOÒÛèGÜF;uÃÄÄÄ'š¦ùçÚCú¹|ÍÂDD4³³³ŸòÛèÐþ¥ýÜ166öá¦i†2|ݳgÏGV¯^%„‰ˆX~ñâÅÏ ùm4Sqÿ®]»~ûàÁƒ¯YøÚëõ¾ù3üòßùdÜpà ±fM†o²žwöìÙxöÙgÿ®öŽ…üà?ˆÛo¿½öŒõz½xê©§Þo®½¥Ÿ}ûöÅ<##yÞ:½ð Íäääµwô355?þñcÇŽµ§ lvv6öïßÿ¾Xâ}ûöÅý÷çú»]Ï?ÿüÕ1¤?—ÆÇÇãäÉ“1:šçùä¥K—bÿþýˆÖÞÒÏÓO?÷ÜsOíKò½ï}ï–Ò×èw¾ó¸é¦›âª«2|“õ¼ .ÄÓO?ýWµw,äСCqçwÖž±$ßþö·=†ô5ºÿþزeK¬\¹²ö”:u*><”Ÿx166·Þzkí›››‹¼+"ÞU{K?{÷î·½ím±lYžç“GŽY155õÚ;úùÉO~Ç­[ó´n£Ýsí–Ûh÷ÜF»å6Ú-·Ñî¹vËm´{n£ÝrížÛh·ÜF»ç6Ú­3gÎÄØØØ—kïXHÆÛè“O>ùΈxgí-ýd¼?~|Äm´;333qàÀDÄP~›fÆÛèøÃëcH.e¼NOOÇ>Y{ÇB2ÞF:´+†ô5šñ6zîܹ8tèÐß¾ÆÿšŸå›Z¿yÞ<Í;é,õ5½^/J);#âW"ÇWÛù¦W{ÈB.;ÌoDÄÏýOÜ{÷îý‹ÙÙÙMƒþósssqôèѸxq(C¿WmÞ¼9Íá3gÎĉCù ¯Z³fMlݺ5–/þ/0šñññ¸tiXû·yÛ¶m‹uër”“““qêÔP~»å«®ºêª¸þúëSü{zz:ÆÇÇcnn®ö”-[¶,¶mÛ–âb¯×‹'NÄË/¿\{Ê¢6lØ£££Ñ4ÃÿÖéÂ… qôèÑèõ†ö­SŒŒŒÄöíÛS‚{½^;v,Ο?_{Ê¢®»îºØ¸qcŠ×èÙ³gcbb¢öŒE­Zµ*¶mÛ–â/zÌÍÍÅøøxLOå·¿jË–-qõÕ9>\îôéÓqòäÉÚ3µvíÚØ²eKŠ÷÷3331>>33C÷]¯jš&¶mÛk׿øðè_|1^zé¥Ú3µ~ýúؼysŠ÷÷SSSqäÈ‘¡~¿|ùòؾ}{¬Z5ü€Øëõbbb"^yå•ÚSuíµ×ƦM›R¼w:wî\;v¬öŒE­X±"¶oß+V¬¨=åŠÜF»ç6Ú-·Ñî¹vËm´[n£Ýsí–Ûh÷ÜF»å6Ú=·Ñn¹vÏm´[n£ÝrížÛh·2ÝF¯¹æš¯Ñ—_~9^xá…Ú3å6Ú½­[·¦‰³O:“““µg,*ÓmôÒ¥K1>>³³³¯é¿§×ëýÔÿ,¥¬ˆˆÝ±¹»E¯©}mÛ.ùÛµša>þ±tMÓü("R}õ30ïg‰aþ¿þt .Æ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÃðìÝydÕ}æýçÜ›Y{U/Õû ½Ð, Í*@B¤–  !H3²G¯G#¿ MÌ8Þ°ãµb4ñ¾~cf"Ž %#‡¶Æa{H‘‘Œ±0–ÚŒ$vz¡n–Þ»ºöʼçý#ïrîÍ›YÕÝÕ]ÕßO•÷ž{ÎÍ“Y-‡>ÏýÀŒA3aÌ„a0c†ÀŒA3aÌ„a0c†ÀŒA3aÌ„a0c†ÀŒA3a¨Hì IDATÌ„a0c†ÀŒA3aÌ„a0c†ÀŒAœV-Z¤»ï¾[?úÑtÑE¥®mÞ¼YO<ñ„¾ð…/hÞ¼y-š!g0SW\•{É+,‘ñºNñ„˜}E£Þ‚©k/iqÛì€ÓM¡Õ˜7ožn»í6Ýu×]ºþúëåû¾$ÉóÒÿA±P(hóæÍÚ¼y³¾þõ¯ëñÇW¹\Öw¾ó ¶bꜧÏ}îsÐ#<¢r¹¬'žxB•JeZÞ€3×¶\~çFùçËø½9»€LmPcdâkVRA…®ó¤Îó$;¡êè몎¼¬êØvÉVóïÀIÐîÝëkm¯e]^Ýr7:7yiIž1r#/sÛ.k÷tYQÇí8Z Æ LŒNÂ0à¤*‹Ú¼y³J¥’n½õVõõõÔ÷ëëëÓç?ÿy}þóŸ×ôðë\.ë©§žRPª€,¯¸¸€éÚ(S˜¶fvÿ¸§ ²0µGåšäÄ:íj—ß}¡üî e«£ F_Ueø%coJb£`ú=é¬n_kû|­ìòå™ìjפ^2’ñL­[¼„MÖ²ýžú;<}haQ{G’`ÌP…õ.p2†ÓÎó<}ìcS©TÒg?ûYõ÷÷·dýýýú⿨/~ñ‹zï½÷ôÐC©\.ëé§ŸnÉ|8]˜B¿ü®*tn”i[µ¦^rF…¯+ÃÈ8•aòªÊXɺä÷\*¿çRÙêªÃ¯¨:ò¢‚±·óÓPãiU·¯õ½­êõUlP¦ÑÒ·qe˜ôxëÜÁ8™—Å]¾wùúð"齑ª¶ Tµs°ªÑ*Á`º†Óæê«¯V©TÒç>÷9-]º´ÕÓIYºt©î½÷^Ý{ï½Úµk—|ðA•Ëe½ð ­ž§„ñçÈïÚ(¿ëByíîºÝälö©{\nÌzùŒ12ÙÝAñ ðGÜld­d =*ô}H…¾ÉVT~QÕá—Œ¿{ Ÿ p&󌴢Ë×ú>_g÷ú*FU\"F2MÊ¿˜lç¼÷ðjëØÜ^q@Æ&Á#-ëöµ¬Ë×G­´{¸ªíG«zóhUãÁ`:†'äâ‹/V©TÒwÞ©³Î:«ÕÓ™’³Î:K¿÷{¿§ßû½ßÓ믿®r¹¬r¹¬×^{­ÕS`Z¿G~çò»/”×¾BƸU]2—F¿Í^÷šT†‰®ÙÌÆÿˆ¯·ÍZ™âys®Q¡ïÙÊU‡Â`ÌÄÞæóœqŒ¤eafM¯¯ßÈdÖµ–¹¹„˜tLô ‰d½[¿ô5î27^ Y­îñµºÇWe‰ôö`UÛ*Ú5TU%hþ94F³sÏ=W¥RI¥RI6lhõtNȆ ô•¯|E_ùÊWô /¨\.ëÁÔ®]»Z=5Ž‹ñ:åw/¿ëBùg«¶óÆÙÍ“ÝÙ“·Ó§Y0¦Ùn¢èZ^ŸÔ#tMºÍ97F2m ä¯SqîuªŽïUuèWª¿$[9Øx^€YoI§§u}­ëóÕ]¨=¡ñ2×ä^OõÍ4èë9ãâ/Ù¢¨©e¯M–¼aHÆZ©h¤µ}­éó5Q•v…Á˜·†ª¢` plÀ)9묳â̦M›Z=“ââ‹/ÖÅ_¬ÿñ?þ‡ž~úi•Ëe=ôÐCzï½÷Z=5šóÚåwž«B÷…ò;ÖJžóŸÿaꞘ›Š©?Éí¶›TÕ›>L 7å…b2¿}±üöOJó6+ߣÊ`­bŒ­äÎ0»,èð´¾Ï×ú¾¢z‹&gi›z©;w¹žóРÍ$i˜¤^lúý¬d•ž§µµ€L|,£ö‚tΜ‚ΙSÐXhç@UÛªÚ=T¹`r„a@CK—.ÕwÜ¡R©¤«®ºªÕÓ9¥®ºê*]uÕUúã?þc=õÔS*—Ëzøá‡uàÀVO €SßyN-Ó¹AòŠa{NàÅiK…YœMCÊ6l÷í2™k&ÉØL0&ÞdSA[ÛöËdŒ‘×¾Bmí+¤ù7({+ Ƽ, åÏ 0#Íkó´~NAëû|ÍkO¼…_-mMrà¾4nK]ÏTVuä-…­ûž6Ýž,y Œ5ñ8YòÖÑá{:o®§óæ5RµÚ>PÑöŠÞÍ8ã†)ýýýºýöÛU*•tíµ×ÊK=ÑõÌãyž®¿þz]ýõú“?ù=ñÄ*—Ëzä‘G40Àh§˜ñåw¬‘ß}‘üÎódüö°Ý侚ôŽ Õïü1éãÔµÔ'Gþ[AXÆÆ€lý½­’ARz‡$cÒ§‚L”‰‚1g«­ã,IÿFÕ᪠½¨`äUÙ`4~€ÓZoÑh}_Aëû ZØY[{æ†_ÜJ³e®Ó¹n©[W5&·9nô<“®Öb³ïã>"¬c’ ŒædL¼ü5ÎR·¶î*]4¿¨ ç5T±Úv¤¢mí%¸ÃõõõéÖ[oÕ]wݥ͛7«Pà_ò ÝxãºñÆ5::ªú§Ò< G}T###­ž`Ö2ò:ÎR¡û"ù]çËø]as£L&üR·#¨~§Pîƒo< ×6h—©1îûŃl¦É„!›ôÏ£DV²áýâŠ1V6zônœºñåwŸ#¿k½TU}£V1fäuÉŽçÏpZè*$˜%]ù˜dy› ¿¤–¼¦.œâ¼Ä'™^SfÜ߯I—ä½¢u³©{„­‡ëZ› ÇX›|f®‹{ŠF—,(êâþ¢Ú>PѶªŽŒØé Àª««K7ß|³J¥’nºé&µ···zJ3JGG‡n»í6ÝvÛmÔw¾ó•Ëe=þøãg£ àDyí+äwmT¡ûB™BoØ\€1©@ Â/‚/é“ÀÍôk†ñ$·jŒuž™ëŽ 7ô¤ªÖXÏÕFÇÑ® …Çq8&ª£ú`Œ_ßužü®ó¤`\•á×Uú•ª£Û%[iðá§R‡o´¦××9s ZÞíGÏVP*“©þÒ4üR·N¯[›=Ó¡®BLƒ¾ñrצ^RÉYÞ†÷¶Ö¦B2î3 LN8FQ8FI¨& ÆÌk÷tù‚6]¾@:0ZÕöª¶­èÈxªf pÆ À¤­­M7ÜpƒJ¥’n¹åuww·zJ³BOO~ã7~C¿ñ¿¡C‡éïÿþïõÀèÉ'ŸTµZmõô3ˆW\"¿ûBù]Ê+έíÂiV&7ã<)·Qˆe²pKÞŽ è’× =Ù½Ôà¾Iˆ%‚‰úÆ!Ó<ã¼Öc¢ 2ÖJ~» =ªÐ}¡l0¢ê𫪽¨êèNIÛê©ZÌøsåwm”ß½Q^ÛÒp3Ï$!wÛ?/SÿXÝèG¼é(Û®Ìaþãn%5¨ #c2׌óh\)>±îœã]AµKqÆiÃ-Ñv£]?að%Œ1q…˜œj1’¼B¼¾©Ð{…l娪Ã/Ö‚1ã{ò?`Ê<#­ìöµ¾Ï×Ù=µù&³Ìuצµó¦˜((“S»Ð|yk4Ùr·®=ç9á·rŒS5¦¾bŒê«ÅDßIxlŒ‘)öÉô}X…ÞËNTuø%UG^R0ñAþgÔ1’–wyZ×WК^_~m½› ¼¸K^§ Œ L9“»Ä5jºÜunÔ`E묩\öL\Á%;&Y׎’PŒ‰Ï“çAØp™kâv7Ðb¢€‹œÐKøm$ášÚØÚº8|„Ò¡_Òª_+{|]»Xzg¨¢mU½5TÕDÐèKfÂ0Ìp7nT©TR©TÒÚµk[=LÁºuëôå/Y_þò—õÒK/ÅÁ˜;v´zj€if¼NùçÕ0«%ãÅá•hÃO}&/ünjXù%cܱÙGä6Ø”pÉîŠ;7ø°Ég1îûHáÎ ›zÿZq—¨ÒKÔÕ¦2µCÙpŒÒUc…^geâkáøx£Q^(&zLoÛ|ŠU¡ï£²{U ƒ1¶r0ÿóÀnI§§u½¾ÖöÔU4á¶I&zÉ«÷û%Á™lø%w‰½GÞ5·Ù½aª{No#y&{#?Â}ïx©^¨'!™¨ºKR1Æ ¼˜Á˜x=œ©#/§­±¹¡#ÉxVgõ´º§ ‰Àê­Áª¶TõÎpUU Æ`# À ´nݺ8sÁ´z:87nÔþáêÿðõì³ÏêÐC=¤Ý»w·zj€ãeÚåwlßµQ~ûÉó%§Â‹‰B#S Á¸Õ]Ž%“ ¿Äé”d#RtÞø±¹Ù±¡°úKn¿ìµÔΠt0&žsp‘’ /ÉŽ¡Tµ—(ÔRŒq0qµ˜dgQ|×…blm‹Pí)»V¦m‘ŠÅëUì»NÁø{µŠ1£¯ÈVäv8C,h0}¾z‹ž³|bfÒ@LƒŒ[Ù%¾f.ióÂ.ží}ÿf×–T[vùkã0ÔÇKX“Žqƒ1¦¶6nŒ±áÚ6 ÏØð9¦i(&Z·yFëz ZÛëk¬*í¬hÇѪöŒ Æ`†! À ±råJÝyç*•Jºì²ËZ=œ—_~¹.¿ürýÑý‘~üã«\.ëïþîï´wïÞVO 0Sß¾^^Çò;ÖËxÅ$Ìî šZÆ Â¸ÕcœþÑqóL6(ã¶9÷TÎyΆ!·[~™pC“gâ @õï“ToqÒ/I[‰Ã1u¯n0&Üè“<.7üÜ6ÉØ0ðânJ…b’Kñ4£¤×¶L^q©Šs6«:öŽª#/+}E6Êý`¶™Ûf´¶Ç׺¾‚æ¶™p­é®óϧ‚‰Ö‚ +ÂÈ]GÙkÉú3µÄM-aÓšcáy9âõc-x"9¡˜ðÓÏb° Ã1nÕ˜Új4'#§L¸‰ªÅh²PLX‘FÉwøVú :§¯ ‘J 7í¬êý‘@Îj8m†à4¶xñbÝ~ûí*•JúÈG>Òp³ fcŒ>úÑê£ý¨¶nݪïÿû*—ËúÖ·¾¥Ã‡·zz€˜'¯}üŽ äwl¼ö$Ø’ ¾˜Üö$Ì’¹– Á¸×”¾WƒŒÉÛõ“Ûÿ›³™ºƒú{eÛ—¹lg§’§ÓÖ-IeÉ µ„›‰œj1ÖFUcÒ™¨Ÿu1nµ˜p~©PLT&çìP2Ṫ΄á¿}•¼¶•Rß§ŒíRuôe£¯ÉÚÑüïf¨Þb-³¶×W›ç,Y³ŒMB1q˜¥A¦aÕ˜x-ë\Wr]Ùs%ïç¶¥MvÉ›€1yG –¼^|Á&?£enxâ.m“¥n’‰ª»Dï…clhiŒ ûEkå¨âKt}*¡˜Ú:8¬0ÝÕÔ&×YðtþOçõùªXí¬jÇ` }cAþœÃpš™7ož>ó™Ï¨T*éú믗ïû­žZÈ÷}}ò“ŸÔ'?ùI}ýë_×w¿û]•Ëe}ç;ßÑÐO €SÏÈ+®–ßq¾¼Žse¼N'Üâ`â Bn[²kÇdúÕ…`rªÁÔ…`œ°LdÉd”¾Wüâbšœg%IyOÃúÕ]3N5ç¹²6Úüíö©['À'câkùÁc“±qµ%÷¬ ÅØ0¿•3FѦ£¼#O^ÇÙòÚÏ’únT0ºC•Ñ—Œo“ìxþ÷§¹.ßèìOk{|-êˆ0Qø%vÉ„[Ü>“‡`WÉV€itž§ƒ/õK^“9ÏhvÍéâyΪЦûGY/'­³ÔuB26êkSáŽÖÄ6/†Vâj1Š‚.ÉwPЉgŸ„i’ ©Ñ:Zaµ™°¿1ê.JçtÁi`"ÐÎÁ@oUupœz18½†à4ÐÓÓ£_ÿõ_W©TÒ§>õ)µµµµzJ8 µµµé–[nÑ-·Ü¢ááa=úè£*—Ëzì±Ç466ÖêéÀ¬æVÈk?¯ößS }8ãeC/ªÁÔ`â0K]%˜œê1™ ŒqÛêv)ÝÇiK…^R;~²çÎØèÌór¿#c<Ïs³$Jï ƒ1n[\õEõ™ºpLú5 ÆØpOR)&¼—œÐLN(&§Ô˜ÔôT‰1a&}¼Žõjk_'ªŽmSuì;%[Éý®àtÑáIguûZÓãiI§'/~‰ƒ-™À‹[&Zë&K^7Üâ_êC0îRX¦>@£Ôym`ãe®qŽ•›mh~©«šê´»Ë[)y䃉לѲ7é›,{­³l5Î7 ´$ïeÃ@L¦bŒœj1q¥ÔZ…™†¡˜h\¦‰¿©°bLRç&üââ>µ+}EO›æ]4××áñZŘ7‡ TÆ õÃÐ"ºé¦›T*•tóÍ7«³³³ÕS:íT*é #ÕjµE39ýtuuéŽ;îÐwÜ¡ýýßÿ½Êå²þå_þ¥î{ã/–ßV À˜Âœú*/yá–¼j0u¡–d‡Ð”C0yU`²ãÂ!Š‚8Îynø%µÁǤOsC156Ú8ä÷Èï¼PÁØNÄ󨻔 Á˜$0c¢ê.ѱœP‹‘‰Â*Q¨%'c¢*/FÉ"'äR{ún}(&?)7]Üþr·EGÖi yEùçÉk?W ÆT{CÁø« &vI ò¿P8ÅÚþñŸ¢Î<ï¾û®zè!•Ëeýìg?kõtà´e¼9ò äÏ•W\$ÉH^³Ð‹Óæ5ë#%Á70S߇Y¦‚q‚0É{ä¼&»‚ꞎÛü8þ‘*ªzCÁÑ )˜ÛäÛ’éWaþz™bwæZÎ.¡Ô¡t&Ž™$“ «Dï• Å¤ƒ1Ö ½¸—ú`K^[£Œ$„!ÉÚÀyßÚq *{]Aå5Ùê{M¾K81ž‘–µÕåie—§¢—µx©€Jã@Œò®+~q2nŸ©„`ÒÏ{p/¹çÉ=äÜ'º—òÚãI‹{:6RÕÞ·‡t`ψª•ü½tÆHsuhñª.õÌk“­X“þ©mx©%°SÅÔqƒ.ym1jØÏîy רÊa•×T^— öÃ÷ ùŒ¤ÅíFgu­êôÔæGÁ—IªÀ(?“:vÂ.ŠÛ2}ã5mãL´þœz &Ÿ^æšø3Ë}õ!çÔHûÇôÁ[Ã:²o옾ã®Þ‚­îÖü¥ò<“~îClI.õKÞlÕ'“ZòÚd¼t‰®ç„baRýâel~¨%Û7ˆþ†^R÷ÉÉTé½±@»F¬öŒZ5È  Â0“# 3ˆ€Öºä’KT*•tçwjõjþ︙W_}U[·nÕ_ÿõ_khhè„ï7þ|ýöoÿ¶î¾ûn­Zµjf8{½öÚk*—Ë*—Ëzýõ×[=8uL§Ä_Ee IDAT“,uÓa9Ç©ÐJ¶*Ø2I§_0i«‰@zw,ÐÛ#Ò{ãVU¶+L a˜É†™eÃÀ©wî¹çªT*©T*iÆ ­žÎiÍZ«Ç{L÷ÝwŸžx≓ò¾ïëÖ[oÕ–-[tíµ×ž”÷˜Mžþy•Ëe=øàƒzë­·Z=8 ÚäykäùçÈø«$ã×_ša\Â6/ü{ÏK‚(yÁ˜Üj09m™~u!˜lŸl˜A˜TŸF![ÕÄm Çdìüä+4uS`S/5ƒR縊 Ö˺†bêÂ1 1És³¡—¨O&ãô­«üÒ¨=7“ž‰úÍÆÕ‡b²˜¸bLu¯‚ê²Á6Y{ô¾wg’yiU‡ÑêNO]~}xÅË À4 „ÁéX3IàE údïç†`ÜЋÛW™óì²Ö ¿¤—·™öð`|¤ªÞÒþ=£ªN¹}¦$»ÜµµyÎ]Ò¡Å«ºÔ3·-¹­oÃã¼pLýR7„qƒ+JU‹9–PL²ôµÎ²7\‘ÛÖ O_ rûׇf&iϨÕÛcV{Ç¥`Š_;À™ˆ0ÌäÃÌ2„aàÔ8ûì³uçwªT*iÓ¦M­žÎio``@ßøÆ7ôµ¯}MÛ·o?eï{ñÅkË–-ºë®»ÔÑÑqÊÞw&²Öêé§ŸV¹\ÖC=¤÷ß¿ÕS€P1«åyçÈóWK¦Ø0ør®²ö]Y»]Ý)i´þ—`Vêö¤íµÌœÂäA–fA/\/æ÷É´)§­.üb’ehÎÉ ×L-“^î¦0a”%Y¯:ËßhÍT­¾?¢ÞÖèP¥. -‘]ÑýV®ëÑ57-ÖEî—ïí|e@?þÇ÷õʳ‡µ5hj»]¼|MÂ)²R±ÍÓ‚]Z¸¢KÅv/^˦–¼™PKrïúpKt-}Ü,“hÉô™JFŠ?w’i0®i &¨ÑŒT­ÞvKÝçmœÁÃLŽ0Ì,C¦×‚ ôÙÏ~V¥RI×^{­<Ïkõ”N{ÖZýó?ÿ³¶nݪú§Òéôï…BA·ß~»¶lÙ¢«¯¾ºÕÓ™&&&ôÄO¨\.ë‘Gii¨ ê³\Ƭ—gΖÔ6ç…]¼IÃ0 ƒ0^³ÐËd}Ôxœ[éeJ!˜LE×”\kòjŒ$k5qð UŽÈ˜Î÷¨ä»Ë|ÇÑ¡EËçê㿾I¾á|uvµÕý6‚Àê…Ÿìп|ëm{qO­1„‘R»†’M<ò:+*.8GÆïpº¹»¢óè¢d‰8ÇMC1uAšc©3Y¸åX1AN&'0×¾mY»[Ý&kwI¯û}˜Ù:=iy›´¢Mšë;Á/ ¦¤-S Âä†^šbâ¥h³@Lº=Zgº}”é¯ÔXgŒÓWÑu%×óÂ/ÑRv|´ª½ï ëÀžU*Ö¹W4 ¹—{ß7Úxå|}øÆÅZ¹®'÷÷qxÿ˜þõŸ÷êÙïïÓÈP-­á.y­“hq—›ÆHówhÑÊ.uõq™ 1Ù`Lxž^º:A˜èN(&\*×WqqÇ×µ7 ¸¸÷šZØ¥YŸZQÔl&}.I#A-³{\:RÍýuœÃLŽ0Ì,CN\__Ÿn»í6•J%mÞ¼Y…B¡ÕSš†††ôWõWúêW¿ª×^{­ÕÓ™ÔW\¡-[¶èŽ;îP[[ýÔÕc=¦x@ÿøÿ¨‘‘‘VO Àʘ¥2f<³VRgöbq*ÃÔ_R׌ñ2çSÂäݳQXƨI¿hOº-Úåc2ã£Ï™„`ò0n;1¤‰ÛdG:d¼žä»’;N™öšó.]©ë}“6^±:¹ç$vïܯïû—zæo¨2îì\qÿN"µk¨öØq™Â!篒׵0nOcêw )·êK80 ¢¤ï‘tQNÛ1V wö &ªq«Ã¸×Rª²ö-v»¬}KÐfªvS À,o“ú¿¦N…\<÷<Ri„É Í4 ÂDýåh”ôSv¬ê1&^›N1“ˆqB+É7€‘¤¡ÃúàaÙ7PÜû)¾ŸâFRw_A—|¡>ôñEêWœÒïhb<Ð ?9 §ÿy¯öíqÖ«ÙpŒ’µbíP]}E-ZÙ¥y‹;dŒ»tÍc’Kt=½äuB1îØ¼ Œûn8%Õ6ÙõUcrÂ,Óˆ‰ V¥ÝÒžqé(Áp†! 39Â0³ a8>]]]úô§?­R©¤o¼Qííí­žÒŒñæ›oêk_ûšþâ/þBGŽiõtŽÙ’%Kô¥/}I_úÒ—´xñâVOgÆÔ·¿ým•Ëe=þøãš˜˜hõ”ÌrÆ,T­ÌZIùOimdÉ ºœ@&‚™<ã¶©I?çšrú†Ÿ1Ǥv%mñ8IÕá÷U9°G¦Ú/yÅä{r¿³L›1Fmí}èú ºöæ µdå¼ãþ½ Œè§¿¢=ö²Ž’œ§Ú¦ƒ16óÈšýòûúT˜»¦öùâÍ>y˜&¡˜°O*“ ¬Èíß$DãƒÆÁ™ ¨Ý/°²6 Çäb²Õ_²mµã ¿® Y»+¬óޤà¸wN¢‘–µIË‹ÒÂbúYR´®u¯|CÕ£Ã2faªÝ‰_Œæ/êÕGn¼@W}â\uvO_%Õj5Яž~S?üÇõÖë{•Y¤$ ã´¹!–à°¼®@…d¼¶øz2&މB)u¡˜ì˜Lˆ&/Ø’ Ð4¯î’3nʘ ÿz|D»ˆÒ×›S`wÊÚí²vœ/@‹Œ´¤(­h“%¯A¿FAÏ›Zfò˱W1jÔ¯YøÅ ¥4¨£ô˜ÔqüjT´w÷°öïVuÂf–ÔÉýê*ËøFç]¡R©¤Ûn»MsçÎmõ”f”‘‘ýÍßü¶nݪ—^z©ÕÓ9i®¾újÝ{ï½úìg?«B¡0ùÄ>øà}ó›ßT¹\ÖOúSñ•QŸŒY†`æÃÀ(„â[f*×sC.^Ò¦¼1j„™¤Ÿ”髺ÀLtž\“luTûßm“1}ÊÙ5” Ô$ßúš –ê#7\ ó/[%Ï;¹·²{Ç~ýø»/ëWOïTu"| B* cã <µkµWŒÊŽ¨Ð¿J^ç‚—ôñä•_”Óµ7©þ’×4è3¥@L“ëAœÇ˜03e# ìY»MÖ¾b¿@ÇÅ“´8 À,)Jþ$K¯æ¡•ú@LóJ19×¼(lr A÷U úe*Ǩ®oƒŒÓ/úüŠÆI˜ÐÞw†txïXrݹ§œ÷N*ÃH]=múH¿.»v¡úæ§õwš5>èŧêÙìÓÆ”¬o£åªM-'ãsIÝsŠZ¸¢Ksv(z˜ÍŽ“¨‘pÉœ§úeÚ…YÒ×§z9–@L†É Ödû$çSa%ƒ1ïŽKãüõ4˜EÃLŽ0Ì,CêctÍ5×è®»îÒí·ß®… ¶zJ3ÎÛo¿­ûï¿_þ箃¶z:§ÌòåËõ;¿ó;úÿñ?jÁ‚­žÎŒóÎ;ïèÁT¹\Ö/~ñ‹VOÀi­GžY`û𺰊—®4­ö7ÙþS Âä\²Ao á5nk‚1FÕ¡T=´G¶:OÆ´¥0&|qï!Ú ºøÃkuõ§Î×’•óNìWxŒègßM?ÿþë<<"7 “<Ò6ÜÀ“ªòÈšýòûæ¨0wM*“ ¹8`êC-î}sÚ`òª³LG ƽž}0(“¾T¤9öo^Ý®ZŘ}'þ‹ÐQ­òËŠ6ii±Vfª<¯yå÷úqaÜàŠ—£ä½_ÃL*€â\—êŽÓ¡—ìy‚‰×²ÖêУڷ{XÃG+Éò8‚1©1Ñ\.ëÐe[¨ .Ÿ§B±Qí“ÄJo¾: gŸÚ§7_;*V.I…W2¡“híZl÷µ`y§ú—uÊÿÀL5Ý3ã¶çV„ÉT—™$s¼˜8ü4¾GÒ'}ý¿víöŒKïNH¶E€Ž0ÌäÃÌ2„a qÅW¨T*éÎ;ïÔòåË[=éG?ú‘î»ï>=òÈ#ªV«­žNËtttè®»îÒ–-[tñÅ·z:3Ò¶mÛT.—U.—õÊ+¯´z:N òÌÕªÀ,=þÛ¸“a7$Sbñ¦„ñrî× “s¤K…Xê0éÐŒT9¸]ÁÑAI ëC4éGì¦^çÌïÖß Ë®=G]=í'ð;œÕJ —žÙ¥ŸýË«ÚóæþZc*Тt0&Þ)$Ùà¼.«Bÿ¯˜ŠIvÅ›…rƒ.N{Ó@L^˜e²@Œh™,𒺤ïÔ‚0Éññb¯YGj¡˜`›¬÷}$Œ¤þB-³¬Mj;Žík©€‹—„‰ÎbòÂ,õ!š¼`‹ÝWSÂÄa–ú6å¿ lu™Zßä¸2hÿžaíß=¢ÊD.Éó0qõ™ð? ¬Ý8G—\»@«Öõœø/sÚ;¦ç~¼_/ÿüÆÇªN¦Q0¦öjŒÑ¼%Z¸¼Kݾ¤œPŒrQ£À‹œàLf\HrÆÔYb_b‚Ìy^`&È<ILÔ*Ƽ?!UÙ" f Â0“# 3ˆp¦»ð ãÌÚµk[=illL<ð€î»ï>½ð ­žÎiçÚk¯Õ–-[të­·Ê÷ýVOgFzñÅã`ÌÎ;[=§T»¢ãxùB H±ÃÓ‚e]ê_Ö)¿`rC0ÉÒ¹Iuå[šµM^¦y fÒÊ0Aƒ÷ Â`Î4™°Ò»ãÒž ißDí»8]†™a˜Y†0 €3ͦM›¨^r‚ž~úiÝwß}zøá‡511ÑêéÌ8]]]ú·ÿößjË–-ºà‚ Z=+-X°@‡jõT¦lýÆ‹ôÙÿãK­žÆ)óÒ/žÑ£ó)÷ïìêÒ½ÿßM¹ÿøØ˜þø÷ÿó”úú¾¯ÿüßÿH…bû”ï?“ iëü_Sîÿ©ÏÜ¡K?zÝÉ›ÐiæÊ£—öÓVO4à™óäy×H*LÿÍë+Ùª/^]¥YŘæa˜ã Â4­"“jS][r©Þ¡êÑ-”³ë§v¹c”Ü_R÷œ.mºf6}d­ºz:¦ÿû?E*U½öÜÛzî©×µo÷aÕžj[ˆ‰«»¤þ9$Ó%ûÏ•ŒŸ¹®Æá—Ü~Aí8¬Ì’ÌÁ ¸ä…f¦ˆ êÆ7¬ŽoX=fÚYY»]Õà_N½Ož+VèöÛooõ4N™Ý»wëïþîïŽiÌøÿAÝÝÝSîÿ—ù—˜ZÅ ;ï¼SK—.=¦ùÌdû·;å‡ -Y²D¥Ré$Ïèôq<6˜)|#]×+õúÓ{_/|ä\œ K]¥˜LÅ—I+Å8UVša²¡—¤²K“ª1r,ùIªV¬öïÑþÝÚ˜’¹¸çØ Äœµ¡W¸_+×öh:ŠÎ¶ÊÁ½cúå¿ÐëÏÖÄXHqC$a(Fž4q§®èT{Wí¿¹¤,‚0Š–ÒÙ0J^æÄ1q[“Š/s=ȶ[öèÚt³ÒÏ¥ƒ•é¿÷É´eË-[¶¬ÕÓ8eî»ï>½÷Þ{Sî¿yófmÞ¼yÊýðƒè»ßýî”ú^vÙeúÜç>7å{Ït¿øÅ/ôÍo~sÊýù³ Ó0ÌäÃÌ2„aœi:::tôèQ 'aSÍ,6>>®‡zH[·nÕ3Ï<ÓêéÌŸøÄ'´eËÝ|óÍò¼™ñä¡ÓÅîÝ»µråÊVOã˜Üýû_Ö×þûÿÛêiœ2OýêU]·iêÕ·Ö³AÛ^mÊý‡«VÝ…©ýïfîܹ3*8u¢Nêo›úߦýìÅ—õ¡gN¥´ÿóÿùïúúWþïVO4à™såyן¬›×Â-q %X9¶Š1F&yäìÔ‚2Í‚0^æ¼i¦>Т`B^—)ÈxsR×ëC0N»1Z²ª__»^ë/Z!ÏŸ]kÓ=;öé…oÓŽ—öÈV@ŠSí%7 KÅ£*ôŸ-Ó67iw«Ä“Ü#’q*Í1©ó Éõ©T€É„i¢ÀL™Û4«…až˜öûžL×]wž|òÉVOã”yê©§tÝu×Ó˜÷ß_‹/žrÿ³Ï>[»víšRß§Ÿ~ZW^yå1Íg&»ä’K¦üÀ¦«®ºJÿú¯ÿz’gtú8ž?›Ì$7Ì‘:¦·øiL©>š^šer¯w&'ô¢œ¶l?Õ·EŸqd°¢}ï ëе* qø§A&ú>Ú:Ót±vÿôߘŽT§/ Fò—µIÀ¤®2KZÉiÏ}B¦¾½ÁýÔèšœI‚0Göjï;Ã<<_ܯ‹®î×›¯ èŧjÏ›Cr–©²ÆÊZS „kUk¤ÁCã:zpLÅ_‹VtiþÒNy¾dÃ5¥Ö£ñ«œã¤Í“••Q½fTû a›—×Gµ5¬{÷3éwŒ˜L£;ÞXþ÷’ô}§û¡ß+ ΰ ÒÃf¼çž{Ž0Ì$ž}öYmݺU>ø ÆÇÇ[=YoçÎú/ÿå¿è¿þ×ÿªßüÍßÔ=÷Ü£ 6´zZ§µçŸ¾ÕSpX{HRUÒÔ+ÝM*ivÉô÷êC3&Ó¯>è’Ó¿.ãÅm «¿ÔÝÓ‹ß·2°KÕ#‡e´@Æ,’ü©…`:{;tÞ‡Öèü+ר»·C’T©Î® Ay:{;õ¡_Û¨K?~žÞxþm½ôÓí:ôÁÙxƒLíS{ö­3Ò—±‹U=dU=ø¢L—¯âüõ’)8ýÆ«Ýʆ¯ &Ä$á—ô}l½€‰wþ$÷7‹…›œÜR-°c²aSë;Í›ƒNZ¨ ˜áW¥ÅÅé¹W] $üýtÀ¤IPÆ Ää‡Yœe²Ž?ãÅëp5á¤ûW&íß3¬ý»‡51ÔÆùa€Çs*Þ¤ªÂÔ^W®íÑEWÍתu=ñ÷dÏ€5ïÙçôêìszuàƒQ½øóCzãW‡U™°µ`L†b#c¬‚ÀÄçcUíÞvTïî8ªùK;µ`E—Ú»|ʼnš†A˜è; C,¦: çšg& Äx² 2Á#£èA&Óß ¼d¯›l»Ú§wÉ{¤zRž)€Sˆ0 `Æ{þùç©,癢R©èá‡ÖÖ­[õÓŸþ´ÕÓ9# êOþäOtÿý÷ëSŸú”î½÷^Ýpà ñÓ 2 0[²ö@-à1] 5Ê{\®Ô$S?fòŠ1aÐ¥iÆ4Â4¨îbmE•o(–Œ™+ce‚5’q3îøþeótþÕkµfã ù…ÚSq'fY˜)1Fë/]­õ—®Ö»;÷é•Ý®w^_AÄ›}Lø]?J7jë—¶Ü%µª8L±7v‰Þ&j À4Ä„s1µKÑŸÑìøœ 0ž‰‹ÍäV© Ë„›ƒœ°Ìt¡2 ïHezî“TY™bu—L¥q5™hÉÚ¨ªËÔƒ0Â3ù÷“F‡ªÚûö¾?Z E“ ½¸•`íÞ½»ÕÓp²Ø}é '"³C¨q Ea¿FáÕUl‰wÕ…SÔ<“íß Ü ¾­Ê‘ƒ2ÁÉ,lr//5®½«]ë.]­s.;[]}’¤J… Atövé’O\  ?ºA;õŽ^f§ Ÿ^ke¼L•˜ |6®W‚Eªî·ªìQ^OQÅyëÓ5 Ä„›Îò+ÆH2É3pSãPKRQÆ©#Å›~Ra™è8|ÂrRY&}íDQhl8&¬T<5o]ØE&»œŒÛ” ž4 ¼x^~ûd•aŽ7T¥ý»‡´÷í!MŒaàÅd‚/᱊1ž´ì¬n]xÅ|­Zß«hyTWi’j֜ۧ5çöiß{#zù™CÚþÊiB²a°ErªÄÔ^ä«ñѪÞy}@{¶ ªY‡®êR[§/yµpI-ØR{—lµ—8“jwŸá\‹+ØúJ1ñ¹Q<*ùlQ—ô7Lc⊨µ•út<‚Ê03aÀŒ788¨mÛ¶iÆ ­žÊ)W­Võío[÷ÝwŸ~øÃ¶z:8ºï¾ûôÕ¯~U7Ýt“î½÷^mÞ¼¹ÕÓj‰çŸ¾ÕSpYMÓfz“­ãK™kéI³kõ}³×¼Æc³á•lÆVU9¸MÁp ižŒY”ªöb¼œ{‡×ç,š£s®X£Õ,—_¨=·ReGДùžÖ\²Zk.Y­÷vîÕ¶gvê½ÄUbâÍUž'cl`%/±óµØ.Ó1¢Âü52~·¤&ORà^ÂÎñõx#œàŠÿüÆRU^jÏÇû$»ƒ’°L¼[,kkÓ†ÙwÂ÷f³ÃUiáqî¾Ê†]¢p‰œóø9J-“@K^å˜Fí 1Þ1aj¯cÃí}kXöŒ(°’çIžV|1Q FÉ«©½Û<­ß8W\1Oó¶K’¬î*—³[ÿâ]{óR]qýB½úüa½ú‹C¬H&YïFëI„¡IAhïÛÃzÿ­!Í]Ø®E«»Õ3¯(ÉÈ Çd«½4 ÄdVÀ’œ€KNàEŠ–¼aÐÅ ÉX[ßnÓÕcÂÿiÈ]]ŸÈŸ™@Òa€0 `Vxî¹çΨ0Ì¡C‡ôçþçºÿþûõÖ[oµz:8AèÑGÕ£>ªóÏ?_÷Üs>ÿùÏ««««ÕS;ež{î¹VOÀIdí%Û.ŽS& RÛdš_K…erÂ,áX7€’³»(ÕÖ4(ãaìÄQMzSë‘L_|‰ÆyuUi¢sãyZº~©Ö]v¶®ê¯}’*B0'báªZ¸jŽÒŽçÞÔ[/¾£ÊØD-í ’j•Y¬'VÆ $Û-;Ú¥‰=¤Â6ùsËïZ2I &xQ}…OêÍV€QmÃX*,cMrnÿ‰ó26¾o|-~ÏðÚ î&›¶00K©_¦.ì’ ¢4 ¹D™ºq9÷ÈyM_â 2õc›aŒiß[Ã:²LR-ìâÅ¡§L&Ó;·Mç_:W6ÍU{gí¡A•̉øÿÙ{ó K®»Þó{Næ]jߺªz-u·Ö–¬­eÉòò°ðÇÈƒÃØ Œ 0ÆÆÈà <¼„  vËŽ €ÀÀ˜?~™ä‡ CóÀ^º$µZ-©ÕêE­^j¯ºUu×Ì3œ“™'óæ­ºÕ]U·êÖ÷Qμ'OžÌΛÖ¯ú|Î7—wpχp׃xå…œüÞ,&/õï&„­¹è÷M øseÌM”ÑÑíbx¬{òúûj ÄØbJ$¨$>+ó9ExQ*%é"L< îQ'ÀÄÊa(e©‚k]# ÞõœM!„B¶ ”a!„´ãããx÷»ßÝêÛØpNž<‰Ç{ û·‹åååVßYgžþy|àÀoýÖoá~áð+¿ò+8xð`«okÃÙ®2L­Rnõ-l*•Rqg¬í×ÇžW[ãø;‡j¥²¦þ^ug=ËââR«oB!«âA©Y1tíC“„‚ÉþuRÊ*ÇB© Ž%ljK*Éýè3bçzK¯Á›Ÿjƒ€Ü•rnB„1É2™|cwáÐ=ÑÙ§G¨Ö8%c½É÷v⎇îÀ-o¼ž»€³ÇÏbyn JêdøJ¯kkR^-Å(ßjÃð¦<Ôð,œž<ܾµlb¢˜q`ÆQ €0F"˜œdVÂM—e”yÅÍ„¦äÌ 3!¨îØõÊ0Û4¦R©àêÕ«­¾McfffÍçLLL¬©¿ç5¿dòôôôŽzþÕjµé¾|7 !„öcîš“%âr‹@$º'K\4b‹3Vœ]8O…i,Â(Oaúr “¯.£´ý;„ŒÉ/vLÔ¾g¬w¼~7ÜÜ )õŸSq͇uEôáÆ#}˜¸TÄÉïÏàì©j5_×®–cW‰ÊW(.Öpáù\:½ˆ¡}ÚßLNFBŒ‘N¤’`R„– AFÄEû¸-ÂÚKTë» JÚ¨-~®-˘òûšËÞ¹müÏi/¾øb«oaS)×öïÔSSSkzFk©gffðÌ3Ϭé~¶3.\XS¾›„BZP̘l+„çÜÐêû „Íæá‡ÆO<ÑêÛØ‚äÇ{ ÿú¯ÿÚêÛ!›ˆã8xûÛߎG}=ôP«ogøùæ›ñòË/·ú6ÖL6›Åàà`«ocÓXZZB¡Phº¿ã8nº¿çy˜œln’•£££M½Ý©T*kš<Òßß|>¿w´µ˜œœ\Ó¤,B!„´Gþ0„¸ÆDטP"£½ÄlÔnÉ%ˆI,ö±è¼Ô1CIE"ž“ül .P¨Í½ ©¨þæ®aŽ÷ õàཇ°ïÈ~8g]Ÿ9Y¥&ÎNàÜøYLŸÔ3h”|JE‚ ”‚òýð¸Þ_‚è¬À8 !;Ç”õYéY^á~0fò~tÜ'¸¾òëïeÕcÖ˜×D5ï¯×ó‘B!„Òvô8Àýk;'Lt¹(¢}¥©Ä¤iOi‰sµÇ®ÛäñJÑÇÔÅeÌ\*ÂK,Ú ¥€t"ŒÐûnFà¦;úpûë04ºsþÍb+±¼Xéã³xa|ËK|_Aù0[ßÚ·ËF!€¾á†t¢³/WJ™Ò3ú¬ËOóÙO|ú§¶+S*ÇÇô“×òíãimúœká™eàìÎZûB!Û¥ãðÈ P†i3(ÃBv*ƒƒƒ˜žžnõm¬+óóóøò—¿Œ/}éKxå•WZ};¤ÅÜu×]xôÑGñ3?ó3m5É}aaýýýà“B!„ÒÞHq¤|óµž\"¹E†‰,fQ$¨ŸÓŽÕÉ.éi-Ñ8éª-¡6{ª”ÐÕ¤l£÷‡â†{ahl׺>grí,Î,âüøY\>uQ§-¦I'uBŒü*‡Û¿2?—^2 |=y±qRd[ÈIeó“ã$Î[#J]€ç?¾O›B!„öAøoý€»†)jR³¦CšI2¶”"eBV‘–cË3²>ÙÅ>7-ù¥nl!°8[ÁÔ«E,L—”rB:úž“)0ݽÜ~t·Ý3€|'}Ø x5…3§ðÜ÷f0}¥“`|ßÈ% !& £ÇÅÐþNô g!R…[x©“[”J—aüt™ÆOŽa·%Ï ešô{_' Àì6N‡!„BÈ΀2ÌêP†i3(ÃBv2gÏžÅÁƒ[}×Í‹/¾ˆ/~ñ‹ø›¿ù,..¶úvÈchh¿ôK¿„~ðƒØ¿«oçºyòÉ'Û:õ†B!„¢bù¿]ˉ)é.¶ &©ýl¡%&©¬t,™4Osñ‹WàÍO@U ô¸ D˜øN.‹½wÀþ;¢³¿ký2Yjå*^;yŸ=‡ÒÂòêBŒÝîÎÂéé„ÓsHOk*e¦IY&õXúyö9דã«À÷¿»þ™B!„6ã¿ôCns}#é¤^\‰%»$c¶ôs"&¥O ¾¤‰2VÒŒò毖1}±ˆÒRcK ^„Ýß;^?ˆC·õ@JÎ×Ûª\¹¸Œ“ß›ÁÙ ð=¥VbÀÍH ìÍcpo2#Ê0¶ð’šô²BLt~ºø—iâ×[k:ŒðOs€Çi“„BÙâP†YÊ0meBÈNæë_ÿ:yä‘V߯5¡”Â?ÿó?ã±ÇÃ7¿ùM¦dUq]ïxÇ;ðè£âÍo¾ÆÕ•·Ÿÿüçñ‘|¤Õ·A!„BÙp2p_\ûi\b©0Ò’X’Ÿ‰*ÉÄ–”qìëA¡Vx~¡ xýÖ}Yç4¿³¿{ï>„ݷ퇓irvi9J)LŸ½Š×ž=‹¹‹Sé2‹¯ R¥“d—§ÿ0„ÈêsVKyip<.ãØ)0ñkÇaVJ•YžÿM(Å´bB!„BVã®Nàp®¹¾2)«X /+ 2¶ì²bbLj»}­¨OpN­ìcæR ³—‹ðj+× R HGoWâÆÛ{qÇë0¼§cž$Ù,ªxþø,^|zÅ¥ZSB  íÑ3œÃàÞä{œ…;Õ¥¡ÔKx©—eÒ`’"Œ¾ÎÚÒa<àß®ÿ9B!„l4”aV‡ÿòF!¤m8~üø¶“añ×ý×øâ¿ˆ—^z©Õ·C¶µZ _ûÚ×ðµ¯} GŇ?üa¼ë]ïB.×äoÚ·ããã­¾B!„BȦP…Âú›?ÅLÎ1ÿ˜­0‡i¡„Ê(Ö±p?3­_¢¯ùQ^µ¹³ð—3ª  AÇ–gâ"Lÿ #Ø{çA ŒÐ«ŽÖjþú=R²áô lKÓ\:qS/]„_õÌŠÉ$ |%øBúº]uÃ/(x ¯Aä pû÷Bf‡ Ì;,„~èwæ³PˆÞuJA¡'ô„ïpž‚€ÇDÐG)„ PæzײðŠšZû9„B!„ì@æjšø'º°„ETƒÚ%­n¶ŽY5D(°ai,‚ú8Ù'W VæZ×(ÎW1s©ˆÂtÅ*Rˆ0]Ý9:€#GÐÙ¥§ž)–»ÛŠ®î îÿ¡ÜûÆ]xùù<÷ÝiLO”õûµ‚£°0QÆÂD=.öæÑ5”ƒ0õ¬ŠS¥ DôYA™w[…e-¥ÛTp®2}ÍÂ$A™Ž®¬cÌ)*ëfKßyïš!„BÙ‚0¦Í`2 !d'ó¶·½ ?þx«o£)Μ9ƒ/}éKøò—¿Œ….9BÖ‡‘‘¼ÿýïÇ>ðìÙ³§Õ·Ó¯{ÝëpòäÉVß!„B!dpä@ˆ›š?aµT˜“_̾¦Oòœôd½ïW&áÍ]*õ"K~‰îë­“u1|ëFï<ˆŽþî{˜¤%ÔJLœº€«ÏCeq9žÄ$´øA LÖ¢ÛDf²·N÷àÃ¤ÅøVÚL”ðR?F4výy’c®7¦Œš÷å|œ„B!„´ }ð_{Wï—L…‘¦žµ“\ÒR\‚Ä;ý%-1&6¶uŽÝ¦*˜½TBy©ÖôŸQJ‘½y¼î!>Ò ÇáÕíÆ¥óK8ñ½œ©°jB›•èÛGßh•P±ä–xš‹ãûRcœc%ÀØç'5ÉeàLù!„BÈ&Âd˜Õ¡ ÓfP†!„ìdvïÞË—/·ú6Vä‰'žÀ±cÇðo|¾ÏåqÈÆÉdðÎw¾þð‡ñÀ´úvR,ÑÓÓÏãÒ;„B!„줸R>Ø\焜“Z‚ý¢ÌêM£c€W8‡ÚB¢Ö×PxRÖŸëëÆÈ±ë¶p²™}¤å(_aîÜe\=q‹WfR¥•HRñ#±ÅWPNNàô†™òŠuþJbKÚuW’h‚1›ù3ª×àùÿ°ÁO’B!„ö@ø‰½mD$¤³FCš“\d”ô"CAÆjK2ѸV›9ϯø˜¿ZÆü•ÒšD)éÅ÷`÷þÎë~VdëS˜«â¹ïÏà…ñYTÊÍÏièÞ•Cßî²N$®ø‘³šø’vNÐ?M¤I“dš){ÿg˜nÞ#„Bi”aV‡2L›A†²Ó¹téÒ–KÄX^^ÆW¾ò<öØcxþùç[};d‡ñ†7¼>ú(ÞùÎw"“ÙZ²žzê)¼ñolõmB!„B6 !öÑ?Ù\çX¢Kó©0uÉ/ Òbì1•*Ã[8¿ Õ•^ÒäJ2Ý{waøu‡Ñ76¢Ç&;Žå©yL>÷ æÎ\‚_ó,ùÄH+‰„˜Hf)Ctáôí…Ì ¬*¶$S`6:ÆWOÃ÷¿³ OB!„öà¡^ ßi|<&½XÒJ“ZRÓdâ‰11A&qNy±†ù+e,ÍTšŠïppÛ=¸ã¾tõn­c$›Cµâã¥s8ùýÌMWÖtn¾ÇEïhÀ’\|S÷ÚâËÚ`éåÚÓaþiXƒF!„Ò2(ìe˜6ƒ2 !d§óøããmo{[«opþüy|éK_Â_þå_bvv¶Õ·Cv8{öìÁ>ð¼ÿýïÇÈÈH«oð§ú§øà?ØêÛ „B!„ly¸ÎϯÞ-E^i” S'¸¤¥À4hüê ¼ù+ð‹]*cƷƈ]7j—ý7íÇà‡‘èÙøÇF¶µb³/žÇôógQ[*YòIJRŒ-«ø>DnN_/œÎ+ˆ-¶s­é0Öy«àùO@©Ó›ðä!„BiîéæÒ5• #ãi.Í$Æ„Œ•#…°t÷lØøÍâì – üWB!¤=)Xнr73ù'¶/`’W¬ý°na;â}ÌÄ¡à˜¿tÞü"T¹=ñ˜P¬©ßÏôt¢ÿÈ!ôß2'—Ôjþú?&²=Éd0ðº›ÐûaÎ]ÆÌÉWPš˜‚„!$|#mùP@øn©r/jW|ÔœSpzœžC€p¾ïJ™]ýÏ^ú}ÆöPP¦]¥DìxSËäªÉõ~B›J6›Åàà`«oãš)—˾¸Îðð0g…¥ËLNN6ý»ÎÁÁAd³Ùk½µ–355…Z­¶!cg2 mÈØ›A¥RÁÌÌL«oƒBْ̯ðŸJA]+b?"~ °úSÖFç5>&Âد),L–±8Y†Wm~qd!€±›zpÇÑAìë ÛK^bØw°ûvc~¶‚çÏàôsó¨VVA¼Š¹×J˜¿\Fç@Ý#Y¸y ¡pÞ}ÂÔ® BéVeŽ©”cᘫÜÓJW· ·Þz+:::Z}×Ì©S§P.—7lüÝ»wc÷îÝM÷¿zõ*._¾ÜTßÁÁAŒ]ë­µœ©©)\¼xqÃÆç»I!¤0¦Í`2 !d§óÈ#àë_ÿzK®],ñàƒâÙgŸmÉõ Y+?ò#?‚ù—iÙõï»ï¾m-ļÿ7>†/þáï·ú6®™'ÇOàGî»kÃÆ?|ÓÍxᥗšî¿ì)ôgš“[úúú093MúÚfÌT}ìÎ5?áh­ü?ǃ÷Þ³aão4ùÌâKŸø¿Z}„BÙ ùcâPãa*ŒâbÉ*É$™’ #섘àõÔSxÃÞpwÖzî½÷^<ýôÓ2öƒ>ˆï|ç;2öfðä“O⡇jõmB![’xkJxh °ÈkM…iæfÎ/£8[mÊ}ÈæÜrgŽÜ;€îÞÌú= ÒöT+>^:1‡SOÏ¢0W]Ó¹¹n}:àdE]ÊK˜ã7H€ixL™²×Œá7þ‹p²œ.]ïh-O?ý4î¾ûîV߯5säȼð 6þïüÎïàSŸúTÓý?ûÙÏâcûXS}ßûÞ÷â¯þ꯮õÖZΟýÙŸá—ù—7l|¾›„²þ0fu˜ C!¤­håÄúŽŽ¼´†‰ß„´š .´ìÚÕjÏ=÷\Ë®¿¸®‹Ì6.72îÆ–RÊ5=ŸµôB #·ïÃßè÷&—ÍnëwÓÙ¦‰?„Bi¥¦V–a8Ïö²¸°–ÎöÃ$˜d*L4ˆ• ¨j¨u&1F,=F@ftÚ¾ÛoDv° ¶¯@6w »Þ|/î=‚…Ï¡ðâ+¨-—´påÛ‰G°Þ_øø¥¢9¦bé/«¦Ã¨D:ŒRº_,»»Â 9¥¦ÁwB!„µ±àéÿŠNþz^„5«]Ò®’ #V?&ÇŠsµ¦E˜¾Á,ŽÜ3€oï…k*[I $‰ã ¹w·Ý3€‹gqj|—/,7unyуò„u 0&Jè6–³Òaô9ÊÔÌQœ~ý¹6H†!„B!”a!„´çÏŸÇÌÌ [rýàôéÓ-¹6!k¥•ñ½'OžD¥RiÙõ !„B!­Aarå–^Ò$K"€}Ž5†5¦Èäâc§H1ÂuÑw×-èºå œ|P«ùëþÈ#›EÏ· ûö›°|î"æŸ>…ZaIOΑðõd6¥gü@áÒŠ‘^”‘b,©E™ÏÁdŸ@”±Ž§ˆ2ÇJŸ´êßSB!„BHž ÐkÃ7–`ìõ±Å®}ëÅÊ\Ó1<ÀÍIT‹+ÏòÙÛ»ß0„=c]a›bÉK®“ý»±ÿ`7æ¦Ë8ùƒYœ95¿ê9™œþ*'ÈT(¾"Œ]ÆñZ„ =„àï•B¬†Ðut óµõøSB!„­eB!mÇøø8~øá–\{llŒ2 Ù6´R†ieŠ!„B!¤u(5Õø` ¥¬&¼Ä’`šK…d¦BTê„ûGùŠW¦àîEÆÍlÀ ;¿\Añê ¼b9|gä;ù"ãXïuZ:L°z. ÐH”‰ä-Ê(3TãIA€•þžB!„B2Ÿaìú5*sWI…I „˜`,;&<&ܬ@µ¸òýÍN•1uµ„áÝŽX¹3!kdnº‚«¯­ž#$ ].úL€Y5F ”b¬õ!¢t% žSô C!„BÚ Ê0„BÚŽãÇ·T†!d»@†B!„²ù,(è¨?”a‚¹ÿu‹•[fSa ‘íÄL4ù(™$#„¨LÎ`ú‰o£ãà~tÜ~3d.»aOƒì|ÅW.`ùÔËPAJjð>Š0«Ü2L6ý²’é0IùqQ¦îU/×0†B!„ue®0%d}id¿Ø /)©0uŒ]ÚŠ†Çܬ`åÈ‹jÅÇø·§púä<î{Ó0öê^§?OLˆÒ IDAT9ÙÉÌM—ñýŸlJ„'#CÁKA%Örh&Æ.…µT#DýX0RLì^WO"„B!ÛÊ0„BÚŽVN²§ C¶­|_ÇÇÇ[vmB!„BHkQjB$ê‘„Ô_7Þ&ì?Á6–ªKr±Îq»9cõÿk  tá5”/O"Ë!doØMȨMN£xê4üÂàû‘œ%¢D#ÁØïl¦Ãø.)K0ág5é%ÙfÍ Å›:!ƃR³›û!„Bi’íCq%ølK- d™´Ä˜pÁˆØ9"6–›“Mßçâ|OþKؽ¿Gß4Œ¾A.AÖN¹äáÙïNãÌ©ùFk-¤âædô›ÅVL‡QA2ª ````%Àè¿*¦Æ6 2Ai0·²/F!„B¶!”a!„´”aiŽV½¯¾ïã™gžiɵ !„B!­Ga õõˆgúXÛU$™:á%¨~!· áw&ÎOûÑç(ÏCéÅ3¨¼v¹›ÁØÀ'CÚ ©ˆòéWP›ž5 Œb¿“*¹ôs(ÀÈLwŠÀ“ƒæ¤[´ÌÄ!a-¡«WÙµQj€¿IO‰B!„öbÞ’aV•ZÂöà¿×a•õ‰1RaY~-2LÀ•‹Ëøÿýó™Ø1!8Ð’ûjez!„B!d  ¦âŸë—´M´!’ ¬¶†’Œ•J7Á9. jñ™EN.ƒ;öÇqîÉq̾üZB„ALŠñæP|öy¸£ÃÈì…pœõ>d{¢jS3¨¾v~¥À¬p+%àûzß’½òÃý{뽘>y“'^F˜#„[¤£e`É/ éEheUé‘<ƒè˜–f’ŽÄßOB!„BÈš˜¯=ÎÊ 0QÙš’ö’*ÐXýëJhÝ–É¥×§oü_Fá{Àw¿5âr­îxp?ժ‰LãÂ+Ü~ï vp±´XÃóOÏàÊÅeø¾ ß›ºš€tî¼·ÜÕÿþçgêŽgr2|wWK‡I[âýÍâV+  „‚P¦Ÿ¹Ï²”„J!„ÒvP†!„Ò–?~¼%2L«äBl8€Ï~ö³x÷»ß 8vìX]Ÿ‘‘är¹Í¾5ÀøøxK®»Þ|íËŽ3'žnõm\3ΟßÐñ/^8ÿ‰Ÿlº©Tjºïââ"~ì¿ýĶ]™laaaCÇÿÿù³Ø½gï†^c#ùϧ¾Óê[ „BÈ£°  ªI„5»GÄföÀš%”h ­&ÉDÇEFB•íô ¶\F¶'›âM˜»0WÿýJ³ Ö ¥„h 69 ~îîQ¸ýÑý‘‰¿´ŒêkWà-`bŽ€ð#yżGN>‡=¯?‚á;ÁÍH\yê¤%`™‰úÑâ£ý(:;;Ãö .ÔõmeŠQ»$ÃLNLàŸÿ§V߯–¥T*mØó©Õjøæ7ß±Û§ÐÏ!„Ò¾(5!öé)²I\lôDˆµH2É~ú|áf³‡ô·X„ÛÛ…ÞýøõS/œÇÕñ—à•«–8£'ûÊóQ½tµÙ9dF‡!;¸jîNCUk¨MNÃ[(¾J¼sÁg#f9GnÀèÑ›‘ëÈAºR ” KˆÞGsŽë‡x¢÷umÒ‹&ƒº¶©F)>”šnÍÃ\gJ¥Î;×êÛØÒ¼úê«6öåË—7lìíN¹\æ»I!„´9óBˆ—»Qê‹F˜ÿÞ_)E&jáa?Äe7+Q«Ä£/ªÈå<øð(n»§O=qÎ,êñ¤ù ¤! %0=QÄwgÊ8p°c‡{à8\bG¡€+—–ñÊéy”‹Ú"Rè²U*³¤ð}…]9<øð(öê ߣŅJêЙ¬ŒÞk“è‚0õaŒþ{ bå-,)FG‰Æk¢Ä˜¨äm'¦RI¶DS«Õ6Lúð<ž×F/Ó:Ãw“BH+  C!¤-iådûP†!›Î»Þõ.üáþaªä’&ô2Ũ]’a!„B!׎ÂöEò¬mCé%Z"WXmé’LJ‘ɧŒ#PYZF¶¿Žð]‰ÁÛn@÷ {0ñì,¼üªqDxn(ÈHTª¨¾v²»îÀ„Û|ÒÙ¦(…Úü¼¹À÷cï“‚ ßeÞÑ®½»°ëÞ[Ð9Ð×H0ŽÐÛÊbÑ$¿ï \ÌÞ …•k’^‚Ä=(E ‰wSj'tB!„r=ÌÕ–¸Ñ: «/Á)‰sf½@#D¬LÖín®^†)ÌkÆ”èÌáGê^=³„ï>y…¹ªat‰+1ÆX ¯]XÄÔdc‡z0<Ú±¾‹lI œ¹€ÂBž§Œ£"yJ™$!ä;$îzpGî€ãŠ(ÅH‹óÕÔñ3yG×ËJצ±rúZñõÒÓ^¢ô˜`íˆ@¬±Ö‘0±ÀüÆbB!„A†BH[rêÔ)”J%äó›¿*ëØØXÛ$_­ÏÑ£GqìØ1¼å-oI=îû>.^¼X×Þªd˜³gÏbnn®%×&„B!„l”šŒ&Y3„5»'˜àc{2QÇäVDc­ Ɉl7„(EÂŒé_],‘Êp ¤@&ŸÁèÑ[Ñ{x¦ž}¥ÉÙh&“•6&ÅK¨–' {ºàtuZÒNøÅ’N‚©iÄ_„^—9Øw{:0øºѳw8”`ì¯X†ï«è½2É/"ã"˜,W/½Ä“abKß&ÚVhbi30mS-y¦„B!„´,û@·»á%ìM§kIŒ€LN¢TˆßN†1’@¸öîÂÞ±ƒxá™9<÷ý™Hz0bLô#P«*œ;SÀôDûÇzÐÕÙ€'GZM¥âáÒÅ%LO•à{Z ‘º•B—›&F¸éö~Üý†!ä;H)¢÷Øl—êí'# øª^l]¦ZI1vÚ‹R‰’¸±(´”Àœ§6çAB!„M…2 !„¶¤V«áĉ¸ÿþû7ýÚ­’ ÈÎbdd¿÷{¿‡ŸÿùŸ‡”²a¿+W® Z­_u§Uï)E1B!„B@™I÷öŒ ¤¼bÍø©[ê„XâLrÉ\kbQ¶ekr†þ©–µ  ¤¤íçz»0úÆ»°xyó/œ…W,[÷kK5úþRª\ìì„Èr‚P» jÔò2Tµj‰)Ö{i&–"ã çð~ôÚ‡LFê÷IšwË’aÊ‹EK¬RPFˆ™¼+%é%%F'Ë@‹4B4—ΊäåS†!„B!d=˜¯=fFVjÂKRx‰„ eCXk3û"üÏý <Éäê“J sU-µ €æ¤#qÛ=8xKžûþ ο\Ð}E ňPˆ(=œyyý9ŒîîD&Óøß(ÉöÁ÷¦§J˜œ(¢Vóã 0*ØW€†÷tâî7 ¡0áha ¶@eÞÓBJ2Œ›s"‰Ë[ Œc$ÓåºESƒ–Ô!„BHûA†BHÛrüøqÊ0¤íÈf³xôÑGñ‰O|½½½«ö¿páBj;eB!„BH+Q˜„=[ÂH%ÀŠBL0Ë'žþK&HéŒôwr€¬"»F¹`’a”€’0[åè}_£ƒÈõ¡pþ –/\|e][ÄïC)øÅ"Dµ™Ëš¥TɶD)¨J~¥ ø~L| V µÓar{FÐsãdóY8#´㘟@Š©,.›@˜`L3V¦+˜ÍcI2+I/ˆf¥ 4€V[$Ä¡')L¶è!B!„Ò^ÌÖ€ýH/±õê…—à¸-¼Ä×zˆÎ©O…ÑÛL¾¾ö¬U}”‹>²yÕÔRAÉ”Èu¸8úæa¾­Ïý`³Ó%-Á˜Z&”cLéR(T°¼\ÃЮ<úûsQyM¶‹‹ULMQ){T” ¤ ÓUÂ}®^GîÀÞ±.K|±„­`kŽ-¦È0™œ ëÙàý‡Òu¯0 /Ó^¢z5e̱F¢L츾¦€À\©0„B!í eB!mK«&ÝS†!ÅOþäOâÿøqóÍ77}eB!„BÈÖDA©)H¹GáÿØËæZ³~í$¥—ðœ„$ƒzIF8Àχç !PZXŽ¥Áè­€TÄ  ¥$ºÇö 72„¥ó—P™šµä^3&Å”«ŽœúzÉÇWP^ ð}#»“Ï´ø) |½ïôö ãà>äz»àºúý eûGBŒN$²g¼éqd¶¶¬\%ºÄÚÍœK¦Æ$¤}-¥¬kýw’B!„rýÌÕò ,yÅ|°…—`³²ðb%¢Œnͦ$ÃÀâBCù°€R…c SCô fñ¦‡GqùÕeœ>9rÙ‹RBtRŒ „P˜-ai©Š<:;8m;Q©z˜-¡X¬Á÷Ìw«)UX_*ÓæfÞÔ‹C·ôÀqeB~©ÿ•HðÎæ+u×Íä´°¥×u0i.æ]Ò\”R‰ÒW½)§ QÖXú]Úæ¼Íz²„B!d³a%B!¤m¡ CÚ…#GŽà _ø~ôGtÍçn5f||¼%×%„B!„l=¦ì ,–lLëÉY?uBLÔl‹‘Lg„ãE³&L¿raY'ÃHßQpL2Œod-Êû€“Ë óð¸#»P¾xþr1”Òg‚@ÏÐ~ÈÖ&øþ”%Á˜‰_ÊGô~)‘Ë"»{¹]ýp“ò‹°Ó`êʋŸÐ" |· Jù)Ò‹h˜¦Æ ™O g %Ú”? ~Õ^B!„BÈÚ R(Rå»”µŽ7+¼Ô¥ÌXMZ2  :víé0µCpžN©Ôé‘l!°{'†wwàü™.ž[Ô刡#% …®k|¥0;WÄrÑEow®ËdÔ­Œï+,.W°´\ƒï)#Áèï^§ÀDÉ0R)ŒèÄ·ö"×áBR”ˆ~‡comA¦ZöP)ûu×Ï䜔µâi.+‰2Q[”.eŽÛ4mL†!„Bi_(ÃBi[Nœ8Z­×ÝÜÿ»£ CÖ‹üÎïü>øÁ^ó{œ&Ãär9ŒŒŒ\ïí­™K—.áêÕ«›~]B!„BÈEM¦Ê*‰escmBD}#7&žþ?'9ÛH®<›´Q\(†‚‚£$”ô!Gé•P•P&FšÈtu7„7·€ÚäTÍ«“bBÉGU«é¾dk!%dÖ  |_ÏðòýH~±S\ÀÙµ ™áAH×AŠò [ö+/,‡ï‹23|„[¶gE‰.F„±]ꤗà]S &&†D›šláƒ'„B!¤½(ú@YiòJ¸ðC$ÁÄEQWÆ®˜2ŽdòéÉ0…ùª>WÚAc•Ï¡£‚8xSvïëÄù3LO–BFˆHŒ cjž¹Å2òYÙL´°Ù2”«5ËUxž‚4ïC(™FH-Æôôepè¦>ôôgÌwëwÖwþÄ…˜Å…Zê=–F€IIsYM”‰·™s`—¹æÝ¶ÚæÒo‡B!„´”a!„´-årÏ?ÿ<îºë®M½îîÝ»‘ÍfQ©ÔÇþÒ Žãàýï?~÷wCCC×5Vš sàÀ–üºUiM„B!„­‰RS¨“U’"L¬-œæcϪk ņD4yHÂu¡*ÖlxU^¹'›R ¾Ê ޵¯"©Á1‚Œã ¯²»ÞÌjó…H~‘ )B ù”ïCKP¥˜–#dGÂÍèD_…sBY%|¿dOœÁAÈ\‘Z~I¦Â$åQß^*£w<˜Ù#káuTL` f!š„„ô¤Åú™[¬Qá;Ü×IM„B!„õb¶ªÐá˜Ú¨“W¢A›%¼ˆôsDÐOÄK‰ E&“•&Ñ2ž‚Ê0É$ ¬‚cZŠ «jäòn>ÒÝ{+¸x~Åb͈0¤Å ÂÈ1U߇ªTu]¸‚)1[>*ž‡šçG"‹:ýEPF@‘@6ã`ïþ.ìɇßm\~I¦ÀëXÐW 0Ÿž<šÍ'“a¢4—¨¼Mˆ2Ê$ÅõlØf%¢sìZØóEþê…B!¤m¡ C!¤­9~üø¦Ë0Bìß¿¯¼òʦ^—´?üÃ?Œ/|á ¸óÎ;×e¼4¦UéEí&Ãüø¾ðù/4Ýÿøó§ð£G×ç{ÝŒÝpŽ¿x¦éþKÕnèÉ7Õ·»»g®NÃqÒW8KRô|ìAµ\nú~¶3÷/ÿŠ·þÐ[[}›ÆG>ñ)üßô™Vß!„B®¥¦xÜh"‚IA–ð5Æ& ÕÍ ÏAà¸XûÑ8"“5bÂÙBåÅ"ºveÃÔŽ0 F ãè}ß0¾%ÈøR/§ê ôCvwÁ››‡_® 6#DHÀ–c2È\~© oqY'MGvuÀéìÔ +JAøzžtf$˜P¤ÊÀéï…ÌçGÏô …—Ä~<&M– d=9G 7Âñ#Ù%™Þ“_P'Âè1léÅLpˆ‹5ö8frj³d˜7½éMøú׿Þtÿû·Ã{Þóž ¼£­Ç³Ï>»¦äàû￯¾újS}üqÜwß}MýðÃãäÉ“M÷ßÎ=zßøÆ7Z}›Æ·¿ým¼ãïhõmB!-a¶ ìëÂ‚ÝØBÓaÄÚÒÎ Kd$Æ „Ù¼Dy9>ó_Ë0Fˆ%Â@*}®Rqa&¨UŒÏÒÝ›Á­w `fª„«W–á›þB ^ ¨ JøJBø¤Àw|Ô|?ú¢}!à8#£9 ïî€ãJ#:!’ÒKІÄ68V˜O_84“—æ'·Ô%ÀÀeÌ«¦Ø„mAÊQý9vÛœgܘ6â?ÿó?q÷Ýw7Ýÿ®»îÂK/½´w´µøøÇ?ŽüãM÷ÿ£?ú#|âŸhªïÏþìÏâ/þâ/šû+_ù Þ÷¾÷5Ý»³Öws»óÀàÙgŸmõmBÈŽ‡2 !„¶æøñãxï{ß»é×£ CÖÄáÇñ¹Ï}<òÈºŽ»•d˜ñññ–\w£èëëÇP®9F6ðn¶Ù\~MϧÃm~u0×u1Ò™mºÿ²ï >k²½Ù¿g÷šžýv§«»«Õ·@!„kƇR3Õë–Æ&E‡­‰ÉsⳄâmÖ¸"ÓiÆfoèq*…"zFúè‚DŒ€T&ÆH1Ž%È(©PÓæ „ë€,•á/-Aù*œ¤ŒØ³Gdg'dgü…Ex‹‹í7Cc‹";òý}Ž|ed$e}7@ø9nw¢³Bj©I !e˜ö⤊/¨d‚~ð}T–JˆÌ-sm× [„BAÙÒ‹´è¢'ÿ$å–(M&6+i" ”h;&›Íbtt´éþƒƒƒx7[“‘‘‘5=£f¤€¡¡¡5Édšî»ÝY뻹ÝÙ‰·!„€Ùš™ì+/DØfš"Á%[¾ω¥ÈØç “wêe˜¹J”öbJ‚( Æl¥‘   TB˜±ÒdvåÐÓ—ÅôT óóåhÍlƒ´8¤‰ð( (®±9@攣ú;*\O!H†èés1<Ò‰lN׸uÒ‹%Æ ¶µ~I1‹óµúÛ’@&ëh‘ ú÷)ÂJs±Ûì26eì?_<¦þ;u.=¤f[“ËåËåšî/åÎJir]wMÏg-5©ã86v;°Öws»³ÓþnBÈV…2 !„¶¦UI­’ Èö£»»¿ýÛ¿_ÿõ__÷_ ,//czzº®É0„B!„­‚R“b‰Ù?‘´%gY}C1Æ–gD°_¥B@f{à‰¥ðœR\XÖ‚‹2É01ÙE 2Žð•Š…ؾ¯¤^•T —…ã:ðK¨jµî>l)FH gh²·µéYøKËöÌw:"›;<™ÏJAù~øÝ(ë} &ÏÈœ ‘ËA¸®þ¾‚™^ìK„AlÉ/ˆÉ1ŽJó¥pÒ™ Þ¥ 3øo¥»4L†=û1*êOœˆ0XTis¿B!„BÚœÙjTâFJ‹]öŠô27lue±QÝ›j‚s²¹ú‰¹…Ùj”äK‚1¢‹%ÇD} Qí¢Çp\`x¤}}YÌΔPªxQêHLŽÑbŒ#dð+@uIQŠÙ@ܧS‹G¾©e£ëU%¡²9‰Á<::]#Á$S`‚á6­Oø}›ïR XI2Y'Ed1c(UצÅ,{­]Ðê¶úsìÚ7'Ó!„BH{B†BH[óÌ3ÏÀ÷ýM·ñ)ÃÕBàç~îçðû¿ÿûسgφ\#-hÍû9==Ýð~!„B!;åO"šµcH^,3&ýxRžIëk¶2ÛˆEö…K ËFj1Ò‚cÉ.Ž€£´ ã(%åèt-Íè}ß×b‹Rг.¤„Èe \~µÝŸ%ÅØ?2ŸEvÿxK˨^™€*×O!׆p¸#Cpú-Á _Ìä. &]rÀq ÇHKz†O”ÿqOˆ±a’må²õÝG+.‹LGBtAŠ“”_‚?¤uÎ ¢L°:.ÌaߟشïB!„¢§Pñ¼^ojÔ¸Àb«2 IA‰¯›ÃDaoºdòõ‰~K…*”H vŒ%)&’âL GDM&+1<Ò‰b±†ÂbE'~˜ºG˜¦Šd:²]åå˜õ$Ó!ï“ày >L©©Œ¤¤"1Æ]=Ytue!c©.°ä—ÒKìGÄú"¢ )q,™¼¬K{‰—¬ñ6Ý×H/A‹ o}jL4v<5f¶ “a!„BHeB!mÍââ"NŸ>[o½uS¯{àÀM½Ù^<øàƒxì±Çpÿý÷oèuÉ'­x?™ C!„BIC)k~"ÍeeáÅ$µoRˆ±ÎB”ÑRJ Ëpa’`‚DeD?dŒ,“fô¾ãxJ‹Béó´£ ]Ê÷ŒÓÍõ³IàôvÃíëAmjÕKPž·^|ç!2»áîp¤–`|W9É’N¤+é@è™A–cÄ¥XòK$¹Èd[Ú#P.í› ¥‘ëFh²Ø3€Š0ñ¾B(s<)½¨‰1ZJ#„B!„¬7³U`kK/†°ì­OŒ‰‹0"vLÔµ‰º±sõ2 ,ªèéË"™#¥€ô$˜`«¤¾’€²úDrL>ï"—u°\ª¢\ñŒc’F¤ù1RŒ”@×.ý–¦j¨,Qйœ¬@÷°‹L^À÷|O§P$Lz-Âd˜Žœ‹ÎŽ“"²¬"½ÔË/ûæë ”l>H†1òt*„•cµ…BŒ9?*‘Íù±Ô˜ºü_`2 !„BH[C†BHÛsüøñM—a˜ CÒØ·o>ûÙÏâ=ïyOø‹êd+%ÃŒoú5 !„B!®Ÿ IDAT[åO™I4õ‰®vÙJ2ˆ&þÔÏZIžIôu*€êŠDËóEKVd ©|#8‚Œ€r“f|)à8€¯|)µ` ¥ž˜¡ÌŸO*@IÀ÷ j5ˆŒk®:)F˜%ts»‡‘DùÕK(]™Z‡'¾³Èôõ ãÐ~ Ÿ‡ç©H&1t>oUó(À‘f¦=³'XÒ8_LjD$¿8F’öV„ï‘4S*­ï[QE@fúÃûŠË-–ëaõIeìYAúÔ˜JQ†!„B!d#˜©*ìí05HXÓ¢aúK}l—¸Ñ vÙkDz2 ,ÎWÑ;Õç2‚°aD]L$;µÂD™0u2¨iÐ‘Ë ëº¨ÔüRÂõ óùPаg+è:nÝ7D×¾QNŸGeva½~ÛâtäÐsÓ2»ày ¾¯W2ö}3™& 'n©J~¥ªS_¤„VŒQ:Lð„â‹ýcÉ.RÀ¢NŠq,Y¦TXÖ“xÂï\¢ 8.„¯Ë-áDÄ„–†}í˜FíþDòB!„BÖ™ªIm4Ÿí²a›ˆum"¥\Ž:'‡LK†B`q¾¥zH _ÅSb­I‚QP)I0‘8Há›ú˜”9×ç xP1!&¨›l1¦³ßA×@' UÌ^ªÂ÷(ŬFïpû2€Ôi0Ê”4 0ʈGA(²Â“ÑL|݇t¡%.¿¤ 2I‰Öv¹à…‹:Ødóz![VI ,¡ôSîZ¥¬h¬TKª‰Jâ`Gï꿃„B!¤¡ C!¤íiÅ$|Ê0$à§~ê§ð¹Ï}7Üpæ_;M†Bggç¦ß eB!„BH#”?]ˆMáiFˆAÔÜ0&Mž€p”K<Š‹%@©¸ì¢L"Œc 2Ѿ¯©“a"AF§ÉøJê aJŒ-Ä@I¨jµrNg¢»+. ¹Âš0ÔÛ‰áûoGyb³ÏŸE­X^ß/¢ Žƒ¾› ûà^øð=-Á(R镊U(ž¨RÞÒ2ŒÉ=l!¢‡/âŸCùEÄeG&ä'¥MDmÅ…"6 ­ï4q(aD$Z%gÿ¤ž—h‹µ ( J-­÷WA!„B0[Q [E$?ưÓ_,ßÅ*qãbMØ–¾™|zòja¾ ; FåN±&OcÆ¥¨¸0£Œü „2òE Ìèû•BBø ~UA䌊0æÚFŠ‘ŽÀÀ¾,úvg1u®Œ¹+•ëyìmKgŸ‹ÑóÈvJøfá(À—z¡Žð;Uæ;« 8¾„” ‘E óüõÌwlu¼rr bÛxŸÅ…jØn;1Ù¼ƒ íżf±˜HˆI¬!LjL¢Þ$-ИæXòÌlu³¾B!„Ò*(ÃBi{ÆÇÇ7ýšÝÝÝÀììì¦_›l î¹ç|á _À[ßúÖ–ÝCš Ó Q«P(àå—_ÞôëB!„B¶ÊŸp»þ`OZm?šù}¶·+áf€Jü R@y±„|o”‚\Œ”l«M 8JBIŽ-Ë(e¶zv‘ Rb¤Ù*©'™cBxð—á/á ôAtvhÑÂLJŠ]{‡Ñ³gæ_~³/œ‡ïyk}ämIï »1ðºÃÙ,!d«ñw÷wxÇ;Þ±©×|ûÛߎüÇÜÔk’Ö‘Édð¡}ŸúÔ§Ð×××êÛR (—˱ö_ýÕ_Åc=¶©÷rìØ1üÚ¯ýÚ¦^“B!„²9d{>¤'Ìé@„b‚lØ®'é¬ÜaÎO´ûÅ xÓ~°ül(Füл߄wŽÁóª5µšš§ô¶¦Pó’mWM›ò|(ß<Êó_o•ç‡ûÉcð²½èܳ nÆttšˆãDÉ"ö~qz¯}ç–&çZýmn™Î<ö=púï…ç+xž‚ï+k߇çéϾ¯PœœCirÊWŽ£¿wǤ¿Ä>;V{ôY:®#à8®+àZ[Çp]}ûÿ¾¯l|ý.ˆü Ü¡Û_ÏlRæ8”e¶QÿíJé÷¨ÉöÚò?À¯nõ×I!„BHÛò†A·÷º¦daZ‡½•F\Äi¤ƒ@¾±­NˆeÿÊ3s˜½ª'‚KG×Ã{;ðs¹¾¯tIà+(_Á÷ ·v›øÖ‹Î‰ŽYãxˆ}Ž_ÃHÖ¹2#нËE¾[êE%¤ÐÛpß,,`RX_{q_X†ïíœ9nÃcy¼« ™œÔß©yí­®}jÉÇâd Õ¢¦¹ÈØÖ¼3)ÛfúDÛ()f¥¾OþÓeŒÿÇT˜b£àd$î|ë0”R¦œUð•y?”ygbmºO|?lóUÝXºôÆ©øøÇ+;g±ì˜aÒ`”€AJŒã£<=‡êìºöíB÷î!39JX¥¢ýžÑAÜñŽ·`ú¥Wqá;Ï£²Ôüê—Û é:Ø{ÏØsôÀ‘ðövq¾V¼Ù¼ŒÒ^`•³ayª`‚¶Xé ]ã ¥êÊÜÔ’Ø´÷!„BH{C†BÈŽ “ñ)ô?·Þz+>ÿùÏãÇüÇ[}+u\¸p!µ½ïåøøø¦_“B!„²½Ðòë$' 5:žºŸ"Õ˜vát@a9ë¥ùe#¸¨zÙE 8PŽ€2Jh Ã’f|©û2:×WROÒ JJ=CEB ”¤ŠBIøž‡Â¹Ë(^ÆàûÐ9Ø£'¾„+‹Øþèí7`äÖý¸øÝSxõ{/Á÷üµ[˜á[öãð[ïB¶§3L}‘RO|±Ÿ€_¬`æ•K(Í,Dé/–Übd0Ó AúP4³'úì˜U˜¥YåÖI_P/ȈziƑŅ¢ž¤Ì23vD¦39(’Xló%œõ“®á~ŒÜv™®|èjÄ< ¸n7½õn¸ç&œþ×q\}áÕëùj¶=£ý¸õ½}Fà'$˜( ÆLÔò}̹„¹ “ú»•É´‘HƒÑé~(f˜Då)Ì]®`aªŠ‘ƒy ìΆµ˜Þ"”c¤Ú›ÇyW^=µˆSßžGyÙ»®ï§ÕHGàÆ{{pËë{!]ßSða¤³È†€”úû*-z¸úJ å%/¬WE !Éh‹à¹m+-qùeõt™@z±·öñÂ|566d;œ@µB˜†j톈(¦.4µNzPÖXÉĘi&ÃB!„ì(ÃBÙ\¹r—/_Æž={6íš”aÚ)%Þ÷¾÷áÓŸþ4víÚÕêÛY‘­"Ã<û쳨Õj›zMB!„BÈöCyW¯QjIÊ1MÊ4²jõÑíKsK‘ì$Â8c’aAFiÆìûRÁqü˜ #!¥©<_„‰/J©Ptfad™@ˆÑs;´0#”‚‚ÄÒÄ,ÎNÌb×á=¹í„£E F J1]Cݸï§3çþöÞ<Þ’ª>÷~Öª3öHC3uÓ-S ˆŒ‚‚q6cˆ^ã‹1W_CŒ¯æ^õõs ^%NxoÞ7šI…8¢ˆÄ #ät3O2u7ÐÝgž‡½wýîµVÕZU«öÞ§»ÏÞ§û<ß|65­ZµvÕ:ñ¬Óë[ÏŠLAâI¨Ž•(š,v¦P`–OÙ~4Þ¯" ÄþD£Ê\•Ù ¢®Ž,F.‘#ÈDY2LlŽÇ‘™|ÂL,*•]ÒHmDQNZŒN&im&‚HfH"kTgçðô]`à±í8êìã±êÕ‰¤£ì›r3)&Š6w"Ž:cøáÝxìÎ!ñ✲îÄ8ý çbùÁ«#ö+'¶ìíS‚êÌ,ž¹ç·èj'T!½Ö–1b Ò„˜²íü2©'©N¥÷3ÒɳNîq¶?MrʧžD†Qé¤/5 /±¤S‚æ·tgAJÅ©Q†!„B!¤ Î!Wf¬êú/é¨ÕŽuy±Å7j”7âíìÑБ/?@#sF´ÈD”,¥ÅVDÂŒ&)Æ•] Ú$ÍXEArÂŒB&Ř4ïúf9¸}CÏÍbÃñËpÄ ËaYbŒC8¸¿íp<÷Ä4~ýý~ŒìšÛÝGµ t/‹púÅ⸳V¢Çb¤IÓ`´(“~ mŸÁÓ÷N`v:NÓ` -ŽôÒ(Å¥Lh)+“ÝeDå‹2˜¯8ufÏ´kY”d™Ôo›2pÔù1²ÙgJÙ4' &epŽ©0„B!KÊ0„B– ­N¨ˆ¢ëÖ­ J dñ³|ùr|èCÂ5×\ƒžžžv7gÞ„ú];ÒŠ˜ C!„Bi©í02L˜Ü rƒû›YO÷utA*ÒdŽ„éÑi¬>tDq¤ Í›WÓD˜È\"#ÈDbañ | F‹˜Q@-ޱ}ËSضå)ÔâJGÉ$#´(óÚàt»îR'i2Þ¶“ü_´/¹DeÉ0Ž,EYBÌäè4üÙ=€Ò±/±¸3yre®»¸3‹5‡')+‰à¢!Ql’`l"Œ 6Lœ 2F~ð¤#BèLIÒa!Æ&Ãd‰/6%FCi³@´„?&Ecç£Ïbà‰çqô™ÇâÈ36AE:M†QNJŒÖ kŽ8¯üÀë°mË“¸ë_îÄèóí“"º–uãŒ×ÿ^ôŠS!f²“Ÿ“L¨Ñ*búýâ!LÏ@EÚ$¸3q´y;­YWyÑ¥(¾„¶ýD=r…—Y&Ê—3ç*LÏ8wÀÌ$Šr»æ-¼4¸Ñ¹2qmW'B!„BöCÎÄ|•þ'ŒJ­Î¾ôX¶Cy;Šuw/‹P™‹‘Èf¼;NíP:K‚#ªx‰09a%“^Œ¼’¦ÅØ1œ¤K¥%Áˆ_¯×m¥¿¢35Ü{û0Z7‰Î9¬í2i$vÌë #S.<Çu~ýý]xàø}cŸ ǯÀËÞxZ×…¸&ˆccxhL Lrï*³1»{ Û 2Ñ''«4âYK/Ù9îõê_Ë–«¤Û™XtuG°Á·6û%4”-îs`BXiFJÄœ=D†B!dÉ@†BÈ’á™gžÁàà :è –]³Id÷9묳ðùÏgŸ}v»›²GÌÌÌ ¿¿¿°¿Õýñ¡‡ÂììlK¯I!„BÙw‰«;3Àáã.‹3råüÕâzVêZ ?fQ˜™Jd†ˆEAk1R‹‚Ž®GQ"ÆD© ãÊ2É2Ö®ƒ4a¦fD˜bâ‹ÊÒbR!F9±(™@“”1©1F–©Ujxücû½OáE¿{2ÖŸpD– £ŠrÇQg‹£N?÷ÿð?ñ›oþ sS­Ã)¥pâ%§à¥o9Ý+zQ3“‚ļ Wç¾öØ®Üÿãû0´}0ùþQ&º$“·’+³xŒV^Ù,6§(Ñ@å$#3Å™´œò¥W’™›Nd&Óa'‘ut¥}0} n=Y¥TŒQ¹t™@AHuçž=@B!„BHÓÔ©ìNƤ¥rKŽz‰1Þ¾€aÓÕÈÄ…±‘JšDbÓYl‹Ö ±M‚1b‹/]˜ñš½RNlI/41|±%½–Î%ð®3,ƒIÑPˆs‰4ƒÏÎáçß܉#O\sz–Gf¨§9&iseN:ÿ Üùç±íщù<²=fõÁ]xÙ×á˜SWÂZ/iú‹IzµCQÔ€§î›À£¿Eµ"‰ã}áfé~Ï2¡%“_K/Eɦ¼ŒÊ•É—©¶ºº£Dl2}ÂòÚ¡«{óT8ÆÝ´Cߤ·ǃ³”a!„B– ”a!„,)6oÞŒ‹/¾¸e×£ ³opøá‡ã“Ÿü$Þö¶·!}ÛÒ>LYQ«ûc___K¯G!„BÙ·I’ac²f†iÍåœrºk5jØ @{E&F¦EI’K¤äbR]D$ÂD ±•[A&[O–‘V(K“‘H%ë1+H|A.-&±A”I’ÉÒbÄH3HÎ…M‹IΛ›Æ=7Ý…g^p0N½üt¬9|y£¬ã‚¨ä2QG„3^÷RϬ IDATR¼øwOÂ/¿òSÜÛ–LÖX 6œô\ø½k<Ô“`€äû¤Îf§gñÀOîÇS}O%;´MwqS]Œø¢rÛö¸*Ù67Cc(MÑqew[eû3ù^ù(·­•¿=5:LJ¥Ó5;{Š7JÁ‘YJ–®üR7éÅ?/ùy#„B!„´ŠÙvkÔÀ*oáRŃ¡÷?$K…îÞÞ) ˜«&Ã+á ˜“6 Æ +E±Å– $Â8×ð„»ž¦Åøõº‰0!qGâDÙöè$Nô\|õ+ð—½q,¨Õ’7Þ Ìmp'Õ Æã¿z÷ÿä~Tf«@¤Sy¥`ôìɶ—£3ùEù‰.‘‘ |A&—ü¢ŠÇuä—™ wÇ®•Y &¾8û÷¤Œ!f2 !„B!-e`6Æq@&¼C%8dUÙ2(ƸeJŽw÷Fű`r¼Šå«:`“X²–LzIå#¬ˆ•7òI0 ‰|!¹}®8£“Á‰Bò¢•K¤I¥#Îø"…‚Ò’~'ÀˆJP™ôýxOl׌õ›–¥òÒüš¬AÇž¾GŸ²÷ܺ¿þþó¨ÌÖÊoàî €Ÿ»ç¿q=–¯ê0²†Æhvø912‡{nÀ³¿J%˜úÉ,¡—"‹+Æh•Š2¾0SZŠòK¸ŒÊ•ÆM2Œû$ºzµ{ ÁEÙx—Ò˜†ï}0eÜt¦ÂB!„,-(ÃBYR´zr>e˜ÅËë_ÿz\wÝu8ꨣÚÝ”½eB!„BȾŠTwÑÑÉF3B‹K3e¼‚ À,ór3sc|xÊ$ KrqÄ—DpÉÒ_BÒL$¢ã4a&eA%Ö ‘ÙWkø’ÌLJ-‘DàHÌG–Q朼,@ ¤¦ðø]â™ÍOâÔËNʼn/?ÚLZ±ò†R™È±î¸uxÇÿz'ºý~Üö¿oÅÈŽ‘fol)]½]8ÿmàwÞrtG„Z-™ì"ÉÜ å|E lx;~ó­ß`t×T9"Œ†RYŠK²­šÜÖ ·­ä'¿ø²K¤ë‹/e‚LdÖ' 2LÒïT÷êâî½5'/ÉÄ5Hm`/UN!„Bi†² úéU•ƒ=&Ù᜖«'YØ4Ž|JÇÄh+Vwù{z.‰%‘*¬Ð¢Ò$+ňVTÚ®d’c±Å¦Å8ÂŒ×{€œc¯%Ùwí¯àÇÿü,6ž°g_q0VÔøû€‚‚BÔ¡ðÒ+ÖáÄóÆÏ¾¹þ²¯Œ»ÖoZ‰‹ÞúvÔ2 /Á¤$;ªs1úþ}Ý5b‚a-A9¥<™%$²ÔZ ?ùêÓxþ‰ñO ÌÊ»pÁï‰~ç $L6XS&&ÉÂ#wàž`fªš¦Á4+´4–_P_ziVh ‰66¹ÆdRi&®OMVQ‹MÒ‹²BŒBWoGÚA]ÆÞš WpQÙ]ôO(ˆ2~=õ~Ö!„BÈþeB!KŠÇãããX¹reK®Gfñ°víZ|üãÇ»Þõ.DQ |?"$ÃpÀ-ë÷@ò³611ѲëB!„Böâêg«\bñ({ ®W&¼®"œ€ñ‘ih¸Ò‹“£% Èhh‰ìL(J“e־ƼéÕ¤ÄX©C)tôváÒ«/Áï¼þ,Üòù¢ï‡Í¿ddã‹7à5ù{ØøâˆcI&ÄÀÌ[Éy?•™ þã[wãÞ¿±JGfBŽ2“±LŒX”™i“nëü¶»Ôm]8ž¦Á8’K>ÝÅK‡Q¾ì’f²„+Ë#SY?L'òL׿™él ½#Éø?g„B!„VP‰ÑŠ`Mwµ%on仇•·ðÖz–E…½ ÀøhYJ‹/¶xI,Ú$ÁÀObÉ + p’`9ÆI“ ‰-0I0v„J¤I¥#ΔŠ;HÒXã°åŽA %Òä“fĈ3¥âŽy„w¦Çk¸ýëÛqÿχpþÖá°£Wän–/Çœxî¡xá™ã×ß݆{~°ÕJy²Èq/=/¿òh¬:° f¤[jkLŽÌá®ï>‡ßnMÂK‰*^ÚJ©Èâ -uS\ "Kcé%;ǽ^ýk…ÊNŽVüÎhd©®Þ:2LɽóvÊ” 2Ó5ÁT2 !„BÈR‚2 !„%G___Ëd ‘xà–]d\z饸ìg?‹N8¡ÝMi)”a!„B!û*Rd@ÏžWÖÌ|¡În ê69&F¦°ò€e­Ò$—DŠOI…H)D© ãÊ2‰ø;2L^š‰ÅH6ñÅNF*H,ÚOˆÉ,7-&I’Q&•&Ÿ<Ôâ¿ùÎÝxðŽðò?zN¿ô”tb‹õP298öŒ£ð¡›ß»¾u7¾ý7·`l`<½—]¸øà•W_ŒÎžîd•aLLâõ$“˜¶?°·}évì|º?io¤›’W|)&;îI3y‰&û2¾Dc¶}aÅOwqRdMº¯Dšž tÄ=¨Sç=¹CL†!„B!¤= ÌÆØ4ò†µŽwõt`vª’¹ÆG*™Ä’ %ð„•lâ +$À+b¤W–€+¬išL(‘ÆÔ’Ž%}q'ûÞJêˆ;Pèß:…›>ó8^ø’qÎëÖcÅšîÀÍK.ÐÙÝóßtN¾p~úõ'ðØoú½{yè‘+pÑmÂ/\T‚) Ã’6Tçblþñôýdâjœ¦±6”TRIFE+[YšOq©'´„÷9–—MR‡œÛkÎër“aÌU)÷ݹ«Ý¬3Ôµ•’4HU Sa!„B–"”a!„,9Z=IŸ2LëÙ´i>ó™ÏàŠ+®hwSÚ¶mÛ ûZ-ÃlÞ¼¹¥×#„B!„ì?ÄÕÐÑ Šš[æ‹êZ™.Ö?>2…õVneåÉ-¢ØÓô—LÉšd_ä2‘Isq¥™Z!ñ@ª $µJRq&•e”‚XF¹² 2ÑF¬h£YFkLŽNá–Ïý}ßÿO¼ê=—â¨S6"M‰I}’d;Ò /ûý³ñÒWŸŽ[¾ø#Üö÷?Å)ˆ7øµ8hÈcAKvI×óQÀXÿ8~ôwÿŽ~ö¨I‚Ññ%/Æ„¶•™ˆãlÛãnZŒv¶cÓe”)ãÉ.î¶Êö§òK¯|”?OÁ_¦‚ 07SAe¶Zì‡Qn"Ðn÷h4˜)@ µþe!„B! ÁÀL’8¢ pË6çw÷hÌNù‡ÆGæ¹ÂI‚)&°ØsT!‰EŒ°¢Ìø#Irñå¥íÙ’J/¾8£’ñ.lZŒß{­P"M^Î %ÒxâL¬ðèÝCxbË^réa8ýëÐÑ©‘šî=S ܋׾ï$l}x·å1LŒÌáeo>'½ü°äûÙ°K!È)¢ðø=Cøå·¶ar¤â%¾ø’Ên -ž(gÙ8]ÆYË/eeÃí²eÆG+Ù½0÷5êPˆ:bIúJ~ÄêŽbCãb︳^6üœ-Oõ!„B!û'”a!„,9Z=IÆ -½ÞRfÕªUøÈG>‚÷¾÷½èììlwsÚ®]»033SØßê~H†B!„²»ÄÕÐÝfÐ]«c¢0ah|h2I‰œd1²ƒd2D"¸˜d+͘}V ‰µ¤RMœ 2ZÇž4‹€óÞ´/瞘0COW '´ÔOf ¥¸4!²8b ¼¥ó©#´¥b»üvgÇ&¬ ãà¥Âzìnü<„Œ&ÃB!„,=(ÃBYr<üðØ™™AOOOK®×êDŽ¥ˆÖïxÇ;ð‰O|‡rH»›ÓV¶nÝÜßÊ~øôÓOchh¨e×#„B!„ì_HuGÉ„güìªs9 #º¼ÊG‡'E"1"/ &Ir‰µBÁˆ2&-$/͘}îù™4##ÀØ}±V¨‰ö,+¸(%Yâ‹$bJ"ËØÈ7ñÅO’Q¢Mu&%F9²ŒBì1+ËÜûãðàᢷ½ —¼ãô,ëòÜWôXyÀr@€ØLF±á5J%ž”¶Üv¾ÿÅad`"Ie‰4Ò”o™ß¯¡”np¼l[·•ò¶•ÊÉ/9ñ%/È>‘›ü⟪o|dª¤.Û»»qÙÏ!„B!dÁ™© &*‚UݹÁí|ƺó(›‰ÙI³Ó5Tæâ$ň%J‹)e…’L6±2Š˜¤—ØbË([‹ä„™TŠQ“&S[¬T8I0N;lš­ErŽ•bŒœwƇfqËß>Ž-›vâÂ+ÆÁ/Xan‘#Ƙu¥ºztv ž…`j¼‚_Þü úåN¤é-{*´ä”úÉ,å’JIÙT˜#ÊøÉ3î5³zë ;ã#¾ £tu—É0å4Òdê`2 !„BÈ’ƒ2 !„%GµZÅ}÷݇³Î:«%×£ ³°œþùøüç?ÓN;­ÝMY,†©0„B!„=!®îÜ;5)Ϧ à'sŒ NeInL”¬GFŠIDeü‰$•fbs<ŽÜóý„+ʤҌ±8 œT™%M|AAbI_ŠBLb§Ø”˜¼,£Ñ&K¥©ÌÖð£¿ûwüÇ·ƒ×_s9μâ´d¢ ”uhi+æPsßœLŠÙöÐv|óÚïàÉû· &ÊfÉRZ`D•Ôºq·ë&ÀèÀ¶j¸™Ô–ìYÃ,Ù¶¿´¢ ²LP¦É}&Êd˜îUõ^l;•ävQ†!„B!¤½ôÏÆXÕ­Ãç%Å4.ÜÝ[’5w›äÄ+ä„•‚Ø’ +pêɉ-âÔ«œD˜ôn½Èa¬œã$Òat‰¸£$I„)I¤±×zö±Q|õ£›ñâ—†óßt4zWå;•y*K"QH®  VôÝö,~ýÝgPƒ©+óZÊ“YÊä (¿Ô—U\¡¥(¶ä®¥ÍsòD÷£ õåeèì)öõF²Ëî2 Æ+L†!„BYjP†!„²$éëë£ ³³qãF|úÓŸÆ›ßüæv7eQ±d˜¾¾¾–]‹B!„²ÿ!Õ@ªòQ %Q˜)´;é1j®°kth2‘S4|ÙE’}‰à"Fjqd ÑÐ:†Ž"sN$ÅzbÏK3q¬‰Å&¹¨\ZL™Ä¢“{à¥Å8‰2pD›TˆAZ.m2 gdç(þþš¯áίÿoùèëqÔI Ò9A‰f–RÂØÀ8nþô-¸ëÛ÷˜IHQý”íl+³mD(•×ÎqoÛ]ꦶS‰% ˆ+Jåä•“fŒü•I3V–ñåšp2Œ@w®Jž÷|IÏiò\¤B†B!„vÒ?ã˜U­¹V– cIÌã£xh74bO(qÄmX‰Å[Ra%Àb óò¥Ü—'8×J…{œØ¢óI0Ž0ãŠ;¦”•cB‰4VÎG˜îûéóxä×ý8÷ GâôK6@w¨ô>…ÿÀ ðÄæÜñõßbt×´_frˆÒ*K[©#©4/²Ì?¡ÅÝW”_ÊÛ••­ßöìùfŸZ-Æôdµp·BBÖBÑ?C†B!d)B†BÈ’¤•“õ)Ãì]–-[†~ðƒøÀ>€ÞÞÞv7gÑ’a¢(Âúõë[ÖÊ0„B!„=CWwBGG )³ÅΈi> Æ/¦j…"#ƒ“¹$˜T“bD‰âTId1¢‹Bœ 2æ|Gš‰Œ£uX𩉕6lâ Tˆ*‘Xlb‹a”†ÒHÎ1 1™,SL’Q¢{“‰6¿½çIü×ü ^öæ³ñÆ^5'G-Nžˆ Z©áÖ/Ýï~áG˜™®@EfVL£”•m[ÑÅ~’‰D™ðOŒÑ91¦9ª\|Iå—&öé@=^¹œh36adÒÌèjfÒNù¥É9?{-y‰B!„²[ ÌÆ-»VW!•#Ïe‚Š+”’X’!àË&Y"ŒM`ÉdO˜Q­v® $/Ψd¼‹p"½–Ö 1üD_±I©qÇ^K+hbñ¯?7]Åí_ý-îýÉs¸ð_ˆ£O=8x?Ÿ›Äí_} Oß7˜I0õ$•@¢J!me^"Ë-é²¾`Ó¨ìäXñE#Il 3ØÂŸ-B!„²x(ÉÝ$„Böo6oÞܲk­_¿Zór÷ŸúÔ§ð‘|„"L !fݺuˆ¢Öý¡‘2 !„B!dOoÂþ<Ó/ å¥î©** 4Ó“³¨ÍÕ’ô#¯e¥›4âžç}œº‚©$Füðä W"±³m´+‚h?qE;¯¡Õ¾|â×kRWÜt¯¼ö„‰wþë]øÚGoF,‚¸&ˆk1j± Ž;ÿõ×øÆµßÅÌÔܼåå\§ðì ,•ÏK4õ¥_ÊÉ +uåØ*W'aÆ>û±¡É@om܇]Qf^t+µ!@”!„B!­a`¦Î„ý½lÑÕ%Cޱ‘J@xp$2éÁ¦¤ Gð(DB’‚u¸í€×ÆriÃý~ªŠ#‹¾ >7…›>µCÏO&Câä ¸ñôá©{ç%©Ëæ¿oö‘.ó÷ºB eUe“2ã#ÅTèìnÝ<‰~Ê0„B!KÎÌ%„²$¹ÿþûQ©TZr­ÎÎN~øá-¹ÖR £ƒÁvõÉ0­L'Ú±cvìØÑ²ëB!„BöOâJn\áN*KÐh8i¨D’‰:ƒŒOŇ àR/=¤D”ȤëôD”TÑÉDm–©4’eŠ‚‹ÊוŠ6Ê?וT\YÆÞ©XP3ŸjMP« âX ±y›ð¼EØVÅmUr\9Çuh;[ª¼Ì¤>‡D^Az<Ò&È)Ÿ•SÞùé2×'¼d˜€ UÅÞ–^ ˜º ?W„B!„–3YLU÷Â/üͤK*›Ì‘•ã#•œØ’^B„0¬°R&khûN‚’:̱TúIö êPaaÃJêˆ;©|ãÜÚ8`ÒID-“^ê'³Ì§lýtx÷®~ºÌ|…–bÙp»ü²Égb´8÷BN†iÔsw÷x+S—!„BÈâ2 !„%Éìì,zè¡–]¯•2YÚ´[†a* !„B!do ÕÍÉ{¡Œêì –žr¤¥–œà9)#eÒŒ+š•f2‰ÅÊ-*“Y´Îä•‚àÒ ñ%MIñ“dT°®œhƒdÎUl$˜Zl—1b‘y§´¸òÎ^ÙVÎv>]Fëú)/”˜H•<+§ODùýÊ‘iL9ˆ`|dªØÑÉD»Ó›)#UÊ0„B!„,úóé0óqcæó~qe„¬ÄØðœ#X„’Fr"F©L¡rudÌ·Žœ€á óH¤ÉËP*w~‰ì¡sc3ÿcî_ýd–²6Î?Åe^’JNñ’e‚RRXh)k{ñ;ËŒRHÐÙ]”a‚j ŒÎíåh%B!„²O@†BÈ’¥•“ö)ÃV0;;‹]»vöS†!„B!„ìkÄÕ]öàže󤸮»WfÛÎñ‘ÁIOvð>‘+¸ÄŠi&N¹4“”÷%K‹±rŒ•eH,nW´qSVœrÁTÓ&ÒdWˆüTGÊQ*°Ô{q[·•s=s,Kt $¸”Š/ñ)wNYŒýLŽM#Žs €Šr ¸>îÇù4 ”ña2 !„B!‹ƒþ™ZÝã¡¡@SA’ÐÉ®]8g|hΗš”MàîË—³"FÙÄ +A©¢^ŠKz _z)H%¥ò‡/ä¿+œú³H‡q®ÙŒÐ²'É,»'©Ô{†p’eœûà.sõ!pÍ|ÛmÙ±‘ŠÈ+@g—NÊûm±7v”Ê•˜÷jÀ*!„BÙw  C!dÉB†ìolÛ¶ ø+!eB!„BÈ>‡Ô Õ~R2ñåÒ@]™ (è®ÕðÄóÒ×ÑI_|ˆê‹E©…¤‘ùJ3Q¤|‰EYéÑ=r 1YÆK‹±uåÒbœt•ü±h#b$˜Zœ~âX Òz 3dö(F7±­êo+óL´“êRXªàvúÜTñ•õ‹|²ÌØðT±PÝ~ozYBAŽÉ–L†!„B!dq0O†išF:A±tgOTxùÃèp€/ŠÀ•MÊRTÉ&…:Ê¥Œù +õë(¶ ë'Ò(@ÉÿÅÙR¤X6'5•â²ÒKQRi\6;''üÔiWzÏÜg˜»×eõÏÏUérSašƒ·³Ñû"ìõvÿgŠB!„ìët4.B!„ìŸlÞ¼¹e×¢ CZÁÖ­[ƒû[ÙÿZùsE!„BÙ¿‰+; :K&Yj~KI&™P€ÌXîÕ?<8(RI¤@´‚D€ˆB¬¢ˆEAk+µÀ¬kh‰8HZWr¾¤K·N#ÔÀTr IDATaˆ2D!Ö:™ˆ£4”ˆ(@4 ¦’dŠèdrŽ6KÑ (ˆØsMy+›ˆ*;¦-…º NyÑi2LþvÆ‚Æ)-V´ m§Â»Ýh©›Ú®›ö¢| &J÷e²LdžwA¢qË©¼lceädÛ‡ÕµÂÝ wõù¬—œ+ÕQH<]RB!„ÒJúÍÄ};<²Ñ«‹ Ó• ŒÔXˆk‚©‰ –­ì€ˆ‚RbÆg’‰:9_‰$Ãi•”ƒ]je^`¡”‚(qÊÑC  I½¢r×2¯pVæÅ J‰SÎ5üz½ki@‰m{öRiD'ÈÊä®¥ÍØV²ï—¾%#½i¦žìãˆ-®4’St&½ÌOdñ…–Fé2aY¥\´ÉÊ6–q’{éˆ1¹åøHÅÜ©ì¾uõ8}/ß;½ÛH‰ñ«ªÓÇ(ÃB!„,](ÃBY²lÙ²qCë…J£ CZA»e˜¡¡!<ýôÓ-¹!„B!dÿ'®ì€;m›$ÔÄ:æuî42&™ð320á o™ˆ2‰ü ‘†Hœˆ-VšÑ‚ØŠ4©4ãÊ2Èš´N#Èx²Œ *™ˆ‚€à¢D Ž“$£X(RŒcS‡Ö¹ºB¢-“H-b&DÕjâßkâÓdJ‹Ý¶â‹ýäE[>,Ê4'Â@…Ä'½%î’&¿¥™’´ŸB=‰,i…±ÁIï^Ùî^BbQ>õµQ¦ S&®0†B!„ÅÂXE0[ôt°é85dÇØÝeï€Àè'i=Ý=QÐ)žÃòUžô’¥•øÂJ&´¸B šÜ»®n]èw!æ—w.Õ?K†B!d©²ð³ !„EÊää${ì±–\kÆ -¹YÚ”É0­êL…!„B!„ìM¤ú¼]ó—…·³†÷K^(¨w-T û†ú'R!"Š29¢ ID¹$g”“&Üzt¯®p¢HöQ‰Ya&éh_öÐÎ+hÇ”R<‘$T´#­8çÚº”#¡˜c¢ÆýTk‚8–y§¶dŒ6ßÃΨ±mK4õ¥ímçŸWHrIŸE@x)•_Jd™H3:4™tQ7­³Pº§¬Sûxj5Øø‘*eB!„Býu“,æ§Ô;žOç°edž+¾àà&}xòDNæð„åHÅÄ”L–ÈÉ"¥¢F¾_ð€ÛŽIJ¡(ä“ZP¿› ã}â¦$•¢Ð’û8÷éM´Ë 3óZTIÙ¢ÐÒ\YU(;=YEe.ö=":mßsþ>ãöU¯ßÖéÄÒ LU€á9Ê0„B!KÊ0„B–4}}}-¹“aH+É0+V¬Àš5kZr}Ê0„$tvwãÐG¶»„B!ûQ^n ¥…Øãº gå³^F<‰ÅJ#Ú_¦BŒ#‹8çgrŒ#Ú¨¬.ÿ:Y½" µ8ö…˜8NniS"Œl»×Ïm»é0Vî±Çµ9®Ýíl©Ò{nD#eRx4r²äï9!,È( ßê‰3#ƒ“(¼]X¦ý®XgÝëÞM”ϯ3†ŒÞÞÞv7B!Ä“a’¡jã:x¿çç×ò³'JÝ;$ÆS&/_ÔEÂÂJX6Aá\[³ÂJ±¤QÈË9È—óGö€ˆÍGÒe¨™ü_š*[?]æ;@»Çš“TBÒKóeó÷ͽ~?&[º"–¸ÿ tõô<ïO8Å‚¡?ë ÍÆˆ› !û5p–/_Þ¸ !„²A†BÈ’¦U“÷:è 8É‚’aZ)bµJ.#d1ó“{¶`ljÛŸ~ ÏŒMá¨Ôî&B!„ì»HRÜM&Qo¤ýó¨Uk˜ ˆ. .®(„™‚à_˜h¢NXÉÓcÄJ/žÄâË„[—/ÄÀ 7Ú©?—J#ÁĨÅfY“dòI.•%¼­v[©Ü¶›£ ÛóV´VˆTNžÉË4¹º¬,““k¼óF'u6Ü'ݥ䓎旔&%Q†!¯{ÝëðØcajj <ò.¹ä’v7‰B!K˜þi#Z„g\ÜóB[OÔDÊß`tx®¾P¢})#(HÒdÊe“€XãÈ…có¨#MY):Ò6–ÔáH&Pö¦Ú}Nâ‰,õ“YÔ<Ê¢6»Ï)øL -¡´Ÿ‚M–f‘›åS&”FiÔ_WÝÁF†&ƒòDPpɉ0Í .ÍÔi?ÊJ,*KuÉD“L)&¾è@ZŒ#™xi1F´Qιi]ɺ@™4˜Lˆ‰kÉÔ”P:‹+Òìþ¶n¼­œëií'º¨€ü¢ê?Ÿ H£üýõÒÜÏÈÀ¤ófó*f‡ûf¾—íõéÀ~‰'!ñxI!B–üà±iÓ&ÀqLJk®¹¦Í-"„BÈRÆNàý:þ¿S:ÔM¥z³iÓa²„ÁØM†Éd¤G‰”RO¤p„•¢ÈÑ|šŒ/“ìNårG³‰4PæF¹H‘%"Ëž¥®„êi,«d.ÈD^zõ5'ì¸e¡&F*™´å¤uöDÅw”„zµùOú§P·¯“3@†¼á oÀÉ'Ÿ ¥:::ðš×¼Ç{l»›E!„´Ê0„B–4­J†Z+%¥É¶mÛ ûZÕï&&&ðøã·äZ„,V}ø! OL¦Û±7|ùÿoc‹!„Bö}¤ò¼³QV¨äxéì ¢P£:–Û¹aéŸH•f—HûòDöA}i&ôqE™(«'K|QAÁ%K‰É%¾˜ò®8£L’Š'ž¤u9¢#Î(­ €aœO,ˆcd3dö(F¶Õü¶•›ÖRLw §¾$²KúœT E&ôÜœrQàœêlÓ“³…®«´*ôÅt)¹íÐþ²YE¹uïçˆ%Ì­·ÞZw›B!¤•ŒÌŨØ9ü% 0H€ ¾‰‘ îꎌ@ ¶VŒ Í$Ý„l’%°”ˆf|ÕHXASi2 ¤Gài¾dÇtHFQPéMõ?~RNþܲPî:ͦ®ÌWVq%•¦„OñïMH*J;ÀØÈ\ÖOMŸS‘ &åË‘Lwi”#&Ãà–[nÁÈÈHº}ï½÷â‰'žhc‹!„ÖÑÑîB!ídxxO=õŽ:꨿e² `jjª°¿UýîÞ{ïEódiS­V±îàµxù%¯ÀºGâ;߸ƒýýín!„BÈ>M’ #€(@ •ÌüQª¸Î2°_$y‹+àTaÖu÷*Äã“ÉyNzÇ`ÿD"5H"¢H¤ ¢ é: Z!6ÇãHA‹ Òʬ#[ìº$‚†xuÂÔëÖ)™T‘Ö£¡%F,:ù>¢ ZC‰@DCiˆDZ’¥Áæhˆ([‡V[N›¥èdb’W¯¹ŽÖi2Œrž• Â=ÇÌŒÉĜжW¹ãóß.•]ïþþ.õ«ÑÅ~öùçðùÿùIüòG·´¡uÿû†›pÊ©§Õ-#lÞr/®ûÿ;žydq<×å«VãÏþê#xÕåW #p·>û,¾ð©kq×m?lCë2Î<ç\|îï¿âíûînÁÿ¼æ½-oËigž‰/~å_–›œÀ?~ùËøÖ?~ •ÙüäÏöpîůÀÿý¡¿ÂºuÅÿÿ5[­â–ü_¾îZŒöïjCë!„Ò¤ò<Ð{’Ù P@%³$”2…’]©HPX·e³:D”ÙŸH5;ã%=ÑÊ0i Ñ1$JÊ‹VˆÅI‚+Í8뒹뀈‚謉±$2E,Žt!ŽˆcŽ‹SOU”ù>Fb1Ò‰@DC Z DCD’T1÷À– h•œ“ž+¥¡´™X¥’rdU­&Pîs ™ÆiW3ÛªäxºßÓ¹²~BLÓ©.v;_²ûžG¾,“ge˜só’”sž‘™†&̽vnX< ¨CÌMsnbHx±ËºBLþǪ2F)…óÎ;W\qº»» ÇŸþyÜpà ¥/i¯{ÝëpÁ4,÷è£âÆoÄÐÐP ZÕ§žz*ÞøÆ7bÅŠ…cÃÃÃøÆ7¾‡~¸ -óùøÇ?ŽU«V¥Û;wîĵ×^Û–¶|èC¡‡Z·LǸóÎ;ñƒü•J¥E-«OGG.½ôR\tÑEˆ¢¨püÉ'ŸÄ 7Ü€þþþ6´ŽBÙ÷šQ3ÔR0ã0•Œµœ!p6¶ƒÜäßs”¨ä˜©Ï±uA)€®› #©° F­ #yˆ#BH"aHn_ºLƳʴÃîóe“¤½J$w ³Ô@RCRGáúJ%ãU(h˜4Ò|;4Öbêð®eÚsoêµö» Fq %å"K‰ô²7RWBéùÉOâ‘Giy[.¼ðB\uÕU Ë=ûì³øÚ×¾¶(þ^`yéK_Š7½éMX»vmáØôô4¾÷½ïá¶ÛnCµZmCë!„”A†BÈ’gçÎxî¹ç°nݺ½ÎG¥”óvNBö¡ ‡v:;;üÚ÷ßÿ’ìêï¿‚?»êÑ©òBÇ7^ø}<98†Ë.8¿}ðþÖ5Ðá¢óÏÅqëkXîÜãÁÕ¿ÿzÜqïC¸üì—´U’¸îËÿ„÷üñ¡§Îý=çø£ñæß=ŒâU/?O¶éþsì±8çø£½};ÏnK[Ž>¦Ø–2.{ɰó³ŸÁ»ÿì½øÖßÿí·¬œMÇŸ€Û~þK¹vMÝr¾ø…øè5ïÃõ_»ÿííWòW !„%@\1“ù݉?¹%3`’±·2Ç“É0¦ A2ÑÅ)këRŒ˜ R)flds³Utuw×BA;L$ ¢­ÜbijG QPš‘¢ì"I"‰8ç¸ÒM*ßxç$ËX’·­*ˆ6K*µ¨Tv1 M’VÌ$(+Ç(Ñ3ÑID'÷3•e”9Ç© µš™LäÜÛtbRšÖ¢÷`[·• o«$]ÆKtQùÅ=n?Q8Ñ% œ9çêQyiF¥ÒÌpÿ²Nl'ñÌ:>‹};n‰ð’Ÿ5”÷d¼²~qåùyü´í\~ùå¸þúëqÔQGÕ-÷×ý׸í¶ÛpÕUWa×®öˆ÷\pÞ÷¾÷5UösŸû¾þõ¯ãÝï~7ffÚ7f?õÔSñÏÿüÏ8ùä“ë–ûØÇ>†»ï¾o{ÛÛð裶¨uEÞõ®wyÊ£>Ú6檫®ÂqÇ×°Üûßÿ~ àãÿ8®¿þú´¬œ·¿ýí¸öÚkJ<×]w¾ùÍoâOþäO055Õ¢ÖB!û&±ƒ35º,Ê^6à KͨÖÈ&ÙPØ}7Dzšï TaèÜÑÁŽŸ°ÊT†ŒT!H1KW6±bK&nˆ#½¡DrÂŒ2u»²INXɤâÔ›Ê1¶ÓŽTjñ嘴’íËÚ‘ÏÚdˆÿ]’k'â…楗°üR_Rñ¯çœ:’JHñ–ùïÝ\Û‘[ÚÏøð’¦ Z᪳[g}ÓŽƒócÙT’q·V’q÷zåýêŸYºÿFtÄGàæ›oÆYgU·Ü;ßùNŒãÃþ0¾øÅ/¶¨u>+V¬hJŽ€?ýÓ?ŶmÛpÕUWáŽ;îXà–•³råJüË¿ü ®¸â ó7Æ0oûÛñÅ/~×_=þò/ÿ²mÿnyê©§îñ?ýÓ?µE†9î¸ãš~Þþð‡ñ‹_üW^y%¶mÛ¶À-+礓NÂM7Ý„¾ð…uË]}õÕÀÕW_›o¾¹E­#„Òݸ!„²ÿÓŠt˜îîî†ÿPHÈî’aZ•FÔªt¥ÅÈ›ÞþNüÅ;ÞV_„1(Ç´ ?¸ý§ Þ®½A‡.9õEø»›¾Ó¶6¼åïÄ5ÿ媺"ŒE8níj|ï'?]ðvíÚÓüÿþÖ®ßж6Üñó_4a,+#…þÑà÷þË»¸U„BY He‡÷ÉAÈÊ3$•[ìnäËŠQ§S¯=ÜeE ‰QxÝ-å?‘òêjºÎÈ­'IˆQæ“%ªØ¤#“˜u[Æ•G’Ù+ÚO]ÑÙ1eêJES—¨Å1jqŒj-ùÔâ±Èüaœ¶úÛªÉí,-F›{’Ý7?Ý%˜£ügT(_§Ï¸ûwe’Šé‚JiuçM¸’Œ”ÎÊ÷}g×ÜÒM†9öØcñ­o}«¡$麗]v¾óöçCWWþøÿŸýìgÛÖ†+VàöÛoo(ÂXÎ<óLüä'? ¦‰ú¬]»_øÂðš×¼¦mm¸è¢‹ðÿðMý}»³³W^y%þöoÛ÷ B!d_b×t«‘ý¦_ã¡pZXÌŽ‚4à•OÄÎîÈaD€G†a¢ž¤¡(ÜãÊ.åÒ!\^"1ë^ÂIɵ´¿ùöæê}‡|žt’ ÞüOP~©/´ì^êJó²JQRi,´¸bLYºLVoýï7:4—ö§¬o ºz"o¸š [ úKT ³ûFfcTbï¬%Å 7ÜÐP„±¬\¹×_=Î=÷ÜnÕÞaÆ ¸å–[‚é­â3Ÿù ^ýêW×a,ÝÝÝø‹¿ø ¼ãïhAËö?Î;ï¼¶Š%J)|ÿûßo(ÂXÖ®]‹o¼±eóq!„4†2 !„`óæÍ-¹Î† í›dLöoB2L«úÛR–a.¾ì•hüç/Ÿ49Ù±pæi§¶íÚ¯x嫿}Α¸-Y¬îPxɶåÚ«V­Âúµó{v‘^vÑÅ Ô"B!„,&$ž€Ä(LüO  (·ʆdŸêìñ›ów{{‚r‹ÎÉ-©@°LáŠQ‰0ãI¾Ì‘¯ÓJ"a‰E„˜T˜ÑŽ$£•“ÈR¬Ëml2Lþ#ö-Âé¹öºõ¶óK=ÏídéßWSb\9Æ Eùýáz²ý¡çQxN商&3™Åö7-uú-2y¦DxqŘ i…¶îíÔ•ù'´„®Õ¬Ðâ–)<ÿü³vž06Tñ+ÛM»ºu&jåú¤·Ïí¤eÃ`ÓÿóêŸ)¦÷,%Î8㌖œÓ.z{{ñ’—¼¤m×ßßïïbãÌ3ÏlÛµ9äy‹-Qá´ÓN[ B™/”a!„´n2?ß @‚¹¹9ìØQ|Ók«ú[«d²ÅˆÖÅ_§_ÿ–?Äᇞ~þó±'¼ãͼ=¦ULÕb¯­‡~8¦«5¯L;Ûº¿¿ûê×zí}àÉgÚв}“ëo¸Ù»w_ýfñ ;Qàž·‚гþ'·{í½òÊ+ç-žŸ'B!„,,RÙNÀ$a¤óTÒõ€DPpªs…Ž)’a‚ Y¢\–qSC¢’˜ü¾Ðù‘w¾®#±8òKZÆH$FpQÊ‘TœrnÚL&ž˜d+ÁÄæSÄ'q&$º„Ä—¼(Ó¬£½íFÂQ!ù%tNAšÉ=#ç§òKN–Iž›-Œ O£V­Á›±#eÓ1‚}9 u•õ©wNRÂR%4θøâ‹½qÆ—¾ô¥¦ÎkGy¤×Þ;î¸Ã;Þ憮}õÕW{íýà?ØÔy¸ë®» £É³Øž÷qÇçµ÷Ö[omx!„BŠôÏÄá¡­7p÷¹Ã)ìsOsS8ºzt*鋱F†üd Ž”ROÀp†ÁD˜œ°RHIÑ~…k•H7È×>РŽôZî÷”Øù»€ýÄÅöh˜—J8í |—¼@–Tö²ÐRRÆNeeÃíò’qÌwšõSattZ[ÆïÂY·Í:uø’+ŸÿùHú}ÿìÒ–aòÿ†ûµ¯} ½½½éçøãoxN;ùÀ>àµ÷Ío~s¡L;Û›¿öo~󯽽½½ Ï!§œrŠwï¾üå/·»I)¡çö‰O|Âk綾^ÚÔy„BÚCG»@!„,(Ã}™íÛ·;o„ÍhE«V«¸ï¾ûü:ûCÃÞœTÉÉ%‹ DªP_ZL  ym®Öïý]lLNÏx÷njz¦­iÌ\µæµwxx¸­!„BH»‰çžGÔ³)]’_h“Y*€(@¥êm ¶ IDAT(ˆHú’ézèA"St­FM† Òz’a€$UD´‚D*™ô¡bIä‡8RÐ’”±ëZ;Kç¸Ø¥SDeêôÏIE QiÉù@,*ùNZ’¼ZCIRŸR¢J4DI"µXñG›òæ|% "JK²hÜ.sk5A>*36÷Ò•U¼ÙB©\ã7MmëÀ¶J·=ÉE¥£ øR&Ι´®P=Qà\§Üpÿ„ó"agPG·/héÄ4³ÙÎlµ8‹È)›;'®ìÌ$ƒƒƒþ¸hjª­iÌÎ;13“ÝææŠ“£££Þýkckö-Ê^v³˜ÙµkFFFÒíÙÙÙ:¥ !„RÆ •aÒaª@”J†[îÐUÙ¡°ß:ûà“•‘í¾®îȈ0æ\F沓 ™€!Žü ‰ü`Æé¾t‰d, ’À1[ŸVP’Ûç^K'ßFIàúJZ `ËÚ¡À´%×ÒÉ)»_¹vh AÇÞW¼{“-ËÄO~q’T2™& «¸’MÓB‹*)‹Ý,›‰ì2\fd`Ij‹˜ôAgw2Q\±¥DÚò„.÷#Ý'¹òYK=&O­VóÆ‹ý÷ójµêµ·R©´±5¯½d~ÌÍÍy÷¯¶Èÿ?ß?ûßc!d©ÃWòB!¶nÝŠÁÁÁ¿e²lݺ5¸¿ýíá‡æ}!„B! ŽTŸwÄmqæüÛu ‹éëIóû²sÒ}ª™ô› 3a”‚Ÿäat¤‚©0Ú9^HÑIʋΟ_¯瓦¥a$K|É &ŽL’O’QFZñ’XÜ´#ÑØ4÷cE?íÅÙ¶¢ŒM¨q·íq7寶Ñ[jo[¥÷ÂÜKe侀ŒrÛžü‚‚äRH‘ ˆ/éýo Ú õ#o±ˆTDz\¿D¡¯ú}>ßÿ~\¨Ç¬Vž«ÿƒE!„Bi;U†æjáPHØ¥†°Þ>‘ô˜»â–ïì‰2éÆ|ªÁÄxqz½•4ùD»"…#Yh÷|ÿ\¸"H ŽT2Ñ(FÜzJXÜö”}»^R‡ÔqMP«Á|’íÐuB˦Zœï ]r÷:ÿ}‰,õËúçdío$ã(ŒÎe}×|ºz´ÿò½tØê‹-Þ0ØíÇâucgŸÿ²‡Ê0„B!”a!„”V¤ÃP†! A;e˜Í›7/ø5!„B!$®Ø·åçf!Û]”Š/Šiy±f:+ofq )(¥DM ©p¡=Á%YGÝóÓz¢b Š2ŸLvÑŽS\R©$•]œô圛Ê2É9¢jµØ|¬ 'É0¹Ô–bLn¦‘m£Vù™9Y"Œ Õ•l×Mu +Qºï^f÷= Õ¨d©À䟗õ‹d{p×x:)($€î^ë«%ý×M“)뿞<“­g?7„B!„ÅÌ®édR¿8@*äd—¼@#y™ÀNtukGXÈ^16~Û½+d”ʥŠ/›Ô•Bæ!¬ (”¨úuÔwÜ:œ}q ÄF€q?@kSWlÛà Fö»ºRQHd)ÈHÅveç4–^lw #sÙ{H̲³;ÊõO§_öÙŽê÷ÙÜßk²UÀø\Œ™ZîoC„B!dIB†B1´bR?e²´S†i…DF!„B!R…ÄS%¯u1ü}"Ùl 75¦¬aŽ)ÌyB î+mW™”åR]Rᢠ¶8b…s,~”“,¢\*[§•KЉ/ª$ñ%K‹QÞÒIpq“^´‚žc¥˜X 6özÞvIÊ‹Ê%ÒØk+§|>]Fk?•E• 1y¹¨ü¢ÂeëJN*/¿¨Tš±û$2•#Á$}°õf}4í†Mˆ0¡d#ÛÿÓe²A†B!„}ƒþé¸Îûüßý‹Cañ‹HnŸwõF‰,c¶íg¤T†©'”äÄ+e”H)ZׯCiøÂG=é%'¶øm4õ„„ŽœPÙÀgz²Š¹™Z¡_uöDÁ¤—Ð>·/»é/Á÷œ8/…èŸe* !„BIèhw!„Å“aȾJH†éííÅÚµküÚ”a!„B!­B*;€èh@ ’7²BP "b^Jj׳c©½ÇžÓÌ÷K:Ýèà\®?%+ݪ0Dõí—lŸ—|äte ;ï|H¥?3„B!dÉÃdB!ÄЊIý‡rzzzü:di’aZ!^‰¶lÙ²à×!„B!„ I¹pߊ[LÑp×C¯…·/KÉêR‘Î šú*³UŒL—¶+”iÈ‘ŸèR6¢°PQ–0Y)¦Aò‰'˜8Ò‰2‚I–㤱XáD»â‰B>IÆ&³doÈÍ>"0e${®R%ËüñFÛʈ09ùEù©,~òŽyNÎv!™'POú,É0’e,ƒ»Æ2)ísséÛ™KÓ_>æ§eÇòiGqeNú?ì½y˜]E÷ÿ­:÷vwö…l@a {X”°ŒqÈ óâ‹âOYTqtFqaW"‚aßAd“EPÙ$d#!!d_;½$Ýéõö½§ê÷ÇÙªÎrowHrÓÉ÷ó<ç9÷Ô©S§îéj¥:õ9_B!„BúÞÂþXb†‘’‘”ì” {*‘ÒŽÖÈå%dðB¿Lk–¦Bf¿’²…!C$X’I,R¦‹KmGÙÔ*È&†cJ¶4Ò7a–°RA2)#½DýÈ–s¤ñ´‚%ÁRŒÙÒú˜Öëšlée»-©{ô¢nz¿Û‡RŒOKsO(U…cJù:Ç’[¿°¤ÝXúK$Ä”¿¦‰2 !„Bñ¡ C!„øh­1wîÜ~Ÿ!)=‹µk×&ÊvÆ8ÛiJ„B!„ JõæªD«# é%35&ñªÜ„@£5 ò¢Uá5Í [Ëö-UJII‰'Á$aÒ l9£B›æ=…!Äø+{"ù%Ep¾bìk½sZøÉ0JE›« 4Œ•3æõ}=–)Ç"<ÎJj ŸSšøRáÙÇ™4Á&MLŠßÏ‘‘ ÓS(¡­µËV ½ïa¿îæ«rË \ñúáø¶Ï©@#„B!„ô »Ulšª ¹%=í0¦ ˆêeÉ3ù:ÇJð€®,Ã1"SÐ(/›XI,YRFa%.ݘòˆ9M—=ÒÛ°…ï¼R‘cnæ÷O‘UdÚwô÷á}Ë'ÓTZDFÝ "K™º™Ï"­ŽAKSÁKÐB¹¼Œ½ÇļÌT£`¼Ç.KæŠ]ÓYÒè(™ŸB!„ìÉP†!„B (ÃþÆæÍ›ÑÞÞž(§ C!„BÙÝХ̀î @¤K/ѹrÒK”ÔaË52?Ä>ç/Ø(— ` Ž!h”I…±¤2™“²eÉ7Ä’L|Ib !%”OŒ$C–Ñp• ã*ÿÙÆïc^´)‚6c"Ž/¼Ø{i _>q¤ŸÖ"b)-1ñ%Hw1–˜,“H‘ÉØ²®µž¹Aó¦¶p ÁOÂÉ%å­h•[º$ƒ¸$cŽãx}@—6õá·‹B!„Rm»LA@ôˆðÐ` –?Ÿ!ÏÔ„2L”æ±¥±P±o–‘H`‰ ¦’%¶$Òdb‚ˇH“±ÄDH´!SÚP.I¨®«‘%ÅSWÊ (~¿!cu­ï“SÊ<óÊ"KzŸÍºÙ‚Sòž&ž ¥ ©0Ñô×^‚²hìfÈ^ö O\ÓX`* !„B‰ÈU»„BÈ®ÄÎXÜO†lOÖ¬Y“ZN†B!„²û¡¡Š› k÷óE há­†Á^™ÐÐZ@0ÎÁ—6¼•FYn0€v"j[k4õV†Ñž ¡´'a8Ž€Ò†ä¢aíG@û×hGBk-½2-´£ý¶¤ÈÄgoïH£©¡­´””Þ÷×þÞ—Y µ'½x7¤†ÐZK©½½ÖÐRD×ÂÛk!P ÞŠk 4"‘&Xå#«›|á&euN…DrPea1Y%’e<)&ѤH5Ž0³å%Sˆ1iÚ$ ™r•†ÈÕÙ‚ ` /i’L<ý%M )(Ê0„B!„ô+‚doªª¡!ÂÏBˆØ”×<ï_o á×Ó€öçͯõçtþ|Q  ½µˆRQ#—Ïðb!´/QhO6€€wï ÁÂ+ƒôçæ¾\¡ý6„С<xóQøm„÷›«Âû¢f»:èOÐÿA„톟„ô_L`¶ëïµßFt(&夈'Û/u%¬kŠ1¦ÌcH@ ‘%SŠúeÿlz×wû8[{l¹JioŒÅ…ÿ ö¾‡(Ý((ê…ÓÞ(Õȼ¦©‹2 !„B‰`2 !„b°3÷O˜0a‡ßƒì9dÉ0;cœíŒ$%B!„B1ÑʼnôŒò †hͨ•¶•kÕÞ#h»¹>Êãø©.Vb‹‰„¤š›“”.¬Ô'£ÉDGZíFRŠ-—_0‰R\dJZŒ!£„R‹„Fò-¹%WC‹‹RS^d”ò"b÷ Î #MF&ã©,iÉ,™ÏÐ,Ki§b["’f«@ºIއ(&XÉã·üìqŽ× ’Lx.>¶5t± Ð¥^YB!„BÈ®Ac··ÀßL† d€¬ôŒP&°¦:9ÅðOÖ ÈyŒ ¦žôÑÚÜÛt˜ô$–dKzJ¹6„Dy¹$&$ÚE¤È¶HÝ+Þ†·©xj ƒø½Ë-qY¥W’JV]$êÆ¿Oü;ÄEëš2}®IcbD2L´åk¤ð’ø“Œ¦¿„Sgc‡ã8º†É0„B!Ä„2 !„b°xñbtuuíÐ{0†lOª• ³fÍ477ïÐ{B!„BHU¬G´"Cp)+½À_}ŽK û€æM½“a„ˆ§‘ø²„c;ŽŸpâ¤mNïïz¦•Dm !ÍÄ—HD‘–®t‘"\=cI)¾¼¢!à*…’±¹JAi]k¥º˜i/±cCÖ ÄkuŽÑÏ„Dd>cCr±äa>/S>*óœc×8Æ5YâŒHYÔ¼i«1Þ‚MAÖ ±®Äg{ìöI’Ñ€*nìÕx%„B!„ì:t»[{¢3„.€/ ¤I€! çM ÑZšz©0Zî ccaºQEáž‚ò¨=¦ÂB!„8”a!„;:ñbÀ€5jÔ½ÙsH“av†pÅdB!„BHuPPnCEy ‘°ÄŠ øª¡PL¹¼- h ­467´õº—vZIмQ&ƺÆ\`µY. &M”ñbŒÄ)¢$˜¸,“ciÆ»Vk„L°¹¾ “iRe/ŽExl +‘ìâŸË¥ìįI“fíg<Óøý™a H†1ǤD1”³z/¼ Ó‰1›¼F•z=V !„B!»Q2ŒŽOmí´åé2A2XÒ«' QS“L‡iiì½ TM¤-n¤Š-YGx>*K$ÂH‘hÚ°dXšLB‘¾,”’ “* $n»Wš/e¦‚Ð’.²”OŒ©,¿$ï™rŒs´4Œt¡hN¤EcXÇ}ùlªðb–#9æ›(ÃB!„”a!„;c‘?ÓaÈö‚2 !„B!dOCëýqéájósXW§]“hD®öÊ ¯^Ó¦­}êg d$aÌ$')ÍxR„iµ™”e’"M\ W)rŠ)ªC’"Uˆ ®ÕÂO†Qö¦}FˆX;Aûá±0ÎÇ÷öyÊ'ˆ +FZ‹“R.2žE\l©$¿ˆd™)6eŽSí%Ã$ƤP†ü£qá°êe¥™+ˆ´»Ð…>UB!„BÈ®Az‘š’–WeÂò ±Ã¨¯šÞR13fKcwß:š-Rä˜rò† ’S*¤ÉdµáK&Éä•Þ¶Q.ÁExsÜ”dÀ¾_¯e)BùŪK¬ Û«”–ÓK‘%K´‰®©œ.“Å–ÆB” £¢1›«É÷–„Ò–“*¼Th˜ C!„BâP†!„Bb,\¸Åbq‡Þƒ2 Ù”J%lܸ1Q¾£ÇצM›°aÆzB!„BÉBëÃ>:Z=Ø* HDdS6ˆ}ÖZCä…m˜"Bs}ï“aoÑH–ˆ‘–\’H„IH3È7Œ¶LQÑHH3ÉÄ#-Æbà‹)fª‹ÑjW)¸®½) ãc“Á[ÉS!dnÉç&" &zæ†,#Íç‡X;Q{ްíçi”‚L[·t¢Øã&ÅÇIŒU+…ȸâÂK4¶£Ä#X׫@#„B!„ô;:JECˆ‰‰-v¹1@0…ÐþÔ ™£}í ¦Î1êJ›ú– ˜"‡-R$RQÊ&Á¤·ŠÚÖùté%)–TN¤Ñ)©0ÊÕòKº¬b×í…ÐcâÒN\zA™g—%½$å—d¿ÌºåØÒØãI0*šÇæjü—[„ãTÛv1d®`¬Úc8Pf¢±¯cc¿©@†B!„ØP†!„Bb ¼÷Þ{;ô”aÈö`ݺuP*ù¿=¾æÎ»CÛ'„B!„r¨R½¿"I¡ÑçH0öÑkIÃÕ:Ö†pÚ+5üs ë[úÜWS¨HMsñ% '&ÆdŠ.Y²ŒÑŽc]'m‰„c +Œ"#9&Ly‰d ‘ú–\­ƒ…<ÁuÒ>"¼gÔ¾ˆ$œà¼OeÉJt©X–ÒN<µÇ”i,YF¤'Ò8þu¥aCKlùãKJKÈÊ”³H.¦ð’—qŒ2 !„B!ý›Æ‚J[`|Ö¡P`N ")&)ÑDõ †Ô¯dåjô•(á¤w²I$Z¤Ô EÊÂJj²‰u}†ð‘%îÄÚpRe!ty¡ÅP¶[2Küû'äŸèÙ%¤Yî¹Äå—1¦ Í»£ñè×±±‹PˆAlÌ"V/Ëö÷¯„Ö@Qi´öô}œB!„ÝÊ0„BH sæÌÙ¡í777ïÐöÉîOCC¾ño¤žkllÜ¡÷ÞÑ¿„B!„Rí6pË'dx',i¦l:Œ_^Ü2íïþ7”Ûi\ç{æ¾7ñü#ïô¹¿–èâ$Ó]GF¢K†4“•&c–9†ø]‹iF؉/¡ˆâ‹+¦ÀÊ2Ò’eBFÙ›RÚ®/DòX˜÷ Ú”Ö¹@Œ‘2.¢ÄDÑË2'vlÔsbׄeiÉ=F=QfeÐûó×áÆ>iŸàs÷ª'PXÿàÓŬpìÚc3,ùøy]¢ C!„BH¦©K!ÔB ìrM I1¶Tà•o-(<²°ÛÐÞKk@+ Ð¥ðÛ½‡–¦¾%Ä$¤4QÃ/ÂéŸL“?|£’À!D˜´6‚$•,±Æh_f´¡Uò宫!°­BKo’YúR7™âbJ1©Ï8’ÌþÇe&ãûeP**<6c–ÌmVðþà³¶ËÅ-ïlƆ¶R(ÁØïqˆþ“œÎê”i®¶¦ÍÍ…èn„B!„xP†!„BRØQ‹ýgÏžSO=>øàiŸì¼üò˘H–üÏnç:t¾ÿkt}pT¡ ºÔ’Hâ(õ”pÿ /aúžDG[w¯»+„)£ÈPz‰ä $E—Ã’Z[nqâ¢MYiÆ—9|!&Úû"L\– ÊDtNž[¤€¨^ »XÇÒ:6»¾ðEóûÃQ‚ïˆØwŽÒZì碌Ļ^Z2#Rž¡±¥M¥ñÔ½oâ¿¿ù0¶4´%“[´†*6¡°îi´/ºÅ-óâ¯Àµ…—x*LØlÉËH™Ñ¥M}úu"„B!„ìZ4T¦ Î`O‡£„Žä9×ÕxuU'~ñzfmèBGì~ÚŸ¯xo+þ÷ÊXüNßRQÓS\l!£¼€‘%’ˆ˜Ôa¶Ó·Dš¸PôÑ»¬k•J¦Â(WÛ*©¤Ôùpu³ë”ý®æ35ÅëçæÕM›ºñëï/ÄÌç7yÏ(f¦tX¹¥ˆßÌÚŒ?,iCG›H&Ц°c&Àã6)ƒAk4v«>MB!„²g@†BIa{/ö¯¯¯ÇE]„O<o¼ñÆvm›ì9(¥pÍ5×à“Ÿü$êëË¿éõÏþ3Ž>úh|÷»ßEKKßþh] Ê0„B!„j£J›`Ê-IqÀ¯˜l9FÛѽî÷èXòÿPj[¶¯‹[,F«à³ÂìW?À¾z?–-ÚØëþF2 l)## Æ‘f:ILðˆI3¦Ó;iÆ—99Å^i1AJLˆ “ab›Ö@¶ßËØùèX¤È'…K^‰=g—fbå©’LÚuÁ›ƒãlÝÒ‰ÿwåãxôÖ¿A•”!\b–*B»íÞ.4£kÅèüàF¨®u ù*5&KðòÏkÕ ­»’#„B!„ô»U|%À„©/æg#Q#vnqS7¼½ZÞŽ‚ëÕhÝ/H‡ÑZ££µˆ»¶ÏÞ·®ÛË Ž@:É’3RX’Š-ƒ$Û(—¼bJ/HkC–kÃD ¼ðÁßÂd³K*±SWÊ -¶ØSNhI•ˆ*È8 ù%µOv;ö5é?æ9¯5aúU °aU~»6¨ IDAT'” Æ=F‚±¥50kc7nx{ ^_Û…’"±ËN…ñÿ:ÓæT7ßMÊ0„B!$I®Ú „BvEæÏŸ¥¤üpÞhOO¦OŸŽë®»mmmÛ©wdOdãÆøÒ—¾„W^y¥××”J%LŸ><ðþë¿þ _|1ÇùPýhiiÁÊ•+?T»;ÿ}Ãt´´^zž*dϱ´êBOÓC¨u&rƒND.‘Øá]üî¦W±xîZ\rõ™<´®lŸCéB¢E ¶ß11EÇ”R§H3Þy­ýv}¶¤Oqåß7düû@ h 1ОôâI0"&Çx ›Â·{k‘ø ¨¤„±T_t©|ì%Ãxò bò b{‘!¬Ää—Þl¦€“e‚„àØ'¸÷MxàŒ?>µÞ‚ púé§ãsŸûV­ZµM}ÚÖß â¡üë¿ý[µ»AÈnÁœµõ¸é§?¨v7!„R%”Û `È0Äû³êiD÷º»Ñ½öβ" ˆÜ ˜xêú?C Ú#AyÂC >Ì{c®¾è~,}wCÅ~[‚F"Ä0[êHÛâu³ÚŒÚò¤˜x;ž]â¯È‘Ò_ãïQEˆ ½EøÉ0J{›«ÃÏž‹$’‰/"vœ™“&ª¤È/–c_J—fkv[q¹ÆI)7™€–æüì»ãwÍ„vƒñ`H+JºQ·5¦`Фƒ3pBÙñ¡Ý.6=®Uÿ ·ã}«MK|IßÐÚ“Äȇâ›ßü&eB¶J)\vÙeÕî!„Òoi*¨ô” má9ÏÉŸ]_Àoç¶`ÖÆò" ;®ÿvê^8ñã£1vÿV;¡ô 4:Û\<ð«ðÇ{×À-•o4!„˜ )YâFjZŠ!fTDd¹6DØô± íús]cS®N•^lI%’Uz#´Dß-þ\é3f?Ï5öÜüsIù%Ù/³®É;¯6ᦫ¡~m§—”£`lÞX2²G: _=uþñ€AÈÇ^ gyK·¿»YÓ…BI¥ü)G[I0Æ´›{ÜŠãš”ç…^ÀïÿûjwƒÝ‚[n¹³fͪv7!„øP†!„B2èë¢ÿÍ›7ã[ßúŽ=öX¼øâ‹©u†Žn¸ï¾û.¦M›7n^|ñE\sÍ5’ÿ×L<Ö­[‡©S§âg?ûY´¸+F]]n¹å<üðÃ:t(à¼óÎÃûï¿ÿøÇ¨«K+ñã?ŽÃ?W_}5:::úÔ/&Ãl;Ë66àëßú¾ëöjw…~M{ÑŃÏýÓNþ(”ëV»;„B©ºº´Ù^.ŠÒ[ 5´êFOÓ³èZ3nÇ’òí 5cÿƒú)ò£N4 îƒÜØq€hTŠô 56ojÃûQ<óà,dLá¼æE”4 )Ž)¸ÄÓP2¤Ç–b¢Œƒd:JiFH3ÉE$„˜HZñÊ4Dbaëj(\를xMЦ“k¢{ÉD*‹Œ‡Ø÷MKwI|Ž=3+iFm‰¸4c'Ò8ÆŸlÎ^ƒ«¿ö Ï]kË*Ê­p†;Șh gðAtø¿£nÿó rCÊCÕÓˆîõw£°ñ^èžFoȧŒmÿDX®]&Ãl+|ð.¹ä<üðÃÕî !ýž¹sçâÜsÏÅ믿^í®B!ý–ÆneˆÆþ#šûçVµqÇ¢6<¿º]„•}‡äpé #ðÅ£†bh­ ‡ Å!Ç@./¡T”ú¡ ´†R¯ÿ©·üô=lnÈH»ô‰ –ðV¬ÄKzÉ[¬6’â‡)ôµPPñû ”'¿Ä7mIhú”ÌbÖ-'¿ß%ZÌç˜ñ,"ù%EŒÐÓ­ðèoWàñ[V §Ë ÇC” ãIAû<‡œà›œ>yÀ |gÊH=º¶ìQ˜½©€[¶a^SJ¡B*Œö'hÂl+MMM¸îºëðÅ/~1sÝ!¤w¬Y³ßÿþ÷qÅWT»+„B rÕî!„²«Ò[Æu]ÜrË-øÉO~‚Í›7§Ö‘Rââ‹/Æu×]‡Q£F¥žÿéOŠÓN; _úÒ—°qãÆÕwÒ¿yöÙgñå/ÍÍÍ™u&Mš„GyÇsLâÜÀqíµ×âk_û¾÷½ïáÑGMÔéîîÆõ×_{î¹?ÿùÏqþùç{¸­“a*sÑ·¾ƒ…sß±ÊZ7oÆÒÅïU©G„ôO欭ǥ_ü¼]¨5̃BWWu:E!„] ]Úጄր€€ÿÐÁ Šbû\”Zÿ íV~@n葨Ýç³Æx«A‚×ròcBqób 8Ð9o‡D¸RC¹ Üö:Ï[K¯þ' > õ>R H- ¥ö¤í Ž€£%´Tp´€–€v´õPÒ¾FjD‚‹ÿ9hÇkÐÒhGzíh) üóJyrŠ·ØDFßKK@jí]/  µ„àº*ñÝ”ÒѪ_¥ˆ1ÒH™1¤‘&¬Ää—4É%MœqbÇÆµ©"MŠ ¿ŸJi<~×LüñÁYPn°"È[ d~Öbòc…yhÕ€üÈ“6=ŸGOÓ+€Î¼ÝÎ÷ÑÕµ ù!'ÁòqQ“ £: U{Åq¾§sñÅcÙ²eVYww7Þ~ûm(•Ó„l>ó™Ï ½ÝþßÖÖV¾L‡BÙ44áËB»ð9Ön…W7tcYkådÃÁ5Ÿ:` Žß{¤?'ôÐÐ6¦Gž: ËçmAGkþ´Px÷ÓÐX¿¢7ÿp>{ñD5edú)ÅŸŸ{ÒˆŽöþK„N9 Þ÷Ú(ó.ðöþÜTûGp¯èþ€?:”=ýÐÞµÚoü—RH™ª á=¯ÊB˶%³Tª›*´d¦ãØ©:©ò‘)ì¨_Ó‰‡o\ކõ]ž¤á RÁäj$8f8ÈGi.þ~X­Ä¹G Á‰[êðÜŠllÏ›]%¿¬éƼÆ"NÛ»û’V* `¼ûAk48_«Ä“O>‰üà‰òU«V¡»»» ="¤ÿróÍ7㦛n²Ê´ÖX¶l\¾¬‘Bv9(ÃB!ôæí^|ñE|ç;ßÁ¢E‹2ëL:Ó§OÇäÉ“+¶7uêTÌ›7\p^xá…>õ—ôŠÅ"~øÃâW¿úUÙ·²œþù˜1c\¶½ý÷ß<ò^{í5\~ùå˜7o^¢Î† pá…âæ›oƯýkL™2%³½ŽŽ¼ÿþû½ÿB{(‹.Ĭ×ÿ^ínÒïéè*ðw‰B!eQ¥Mµ‡yò‹ðÅ¡îYbëóPÅúŠíÈÚq¨Ýûl8C&y cüFa›´VÈ<nw=TËVg˜w?,¤ñ*/œµ?úúC¸ìÇgâðÉû&î'„—Ú¢¥„ÖÊ“R$àhdt j ,sLA&&ͨð¼N‘f’M Ý8Ž€«}QEkO|ñå¡¥·€HJÿÑx‹\•œ·* Knñ¤—è8¾™RŒ™Êâ„ 9AJ ¢çKkId„-µ¤Ê/q‘¦‚h³¹±¿½îÏX:½%¸ØIAEˆÚVäG¨àu…¨A͸O#7b z6>RÛÂìª]·¾ŽRû<ä†~΀ÉḴRaJ•Ç:fÏžú÷BHßùûßÿŽ–––jwƒBÙ-iíÑ(º@ãI Á? ”¬ú"æ6õÀ­òàà¤}à´ýb@N©2þK$à #Ðù:‰ÃO…uK·bÓªNon-ÜXitu”ððo–cÊ{m˜vþäò2qÏà}¾²J'ŒáÍ/E õ@SpCXѾ°"‰-ˆ +¡ô÷0î%½÷ebuNïÅaíû+7èX’Þ -½Y*Ô±º(S'ÞÌ}jbL$Ñ@³^jij÷¯A±à§Á(„Œ— YƒŽ'/¡LiÁôÔ+ÛoXO†¹õÝxiM:ŠÙ"Kc—‹ÇVtâ ¡9üÃØ É‹H°A”€ÔT`¢I%Z[[±dI…DdBH¯hjjâï!„ô#’³B!„ZZZ°råÊÔsË—/ÇÙgŸ3Î8#S„™8q"{ì1¼üò˽aÆŒƒ?ÿùϸþúëá8Î6õô?V¯^üãøå/™) 8wÞy'î¿ÿþŠ"ŒÉÇ?þq¼óÎ;¸í¶Û0f̘Ô:o½õN>ùd|ùË_Ɔ RëÌŸ?ŸoI%„B!„ì2h·>&ºÔŠâ–ÇPhº·¢#œ¨{6ð]8ƒ±Ä‚¸ä,‚ÖpŒCnì¾ÐØdß_)?¡C¡¥©?¿â ŸOÔÑZã¾ûîäI“pýõ×£P(Xç{“–D!„B!; å6D¯U=(v¼ŠBó-p»—¿PH䇂¯B~øÉÐÂBö±µÈ= È7º”’¢ ]…'ÿùÞShÝÜ™èFª”’"¸HS”qdŠäb‹eÛ*'ßHxÒ‹/«@⊿—"c •÷Ã-X%#yÆn+iÒŽe¼ïÒKwéU¢‹y­°ËãeÙÏáýã­¹ã ÜðÃgÐÞÚ•ÄlD~ìDȺіì‡ø±Ý†3ð` ØÿrÔŒþ9 ü¸/Ö£gË}(¶þÚÝÉ8.eB!„Bv' * 6v)<º² /®/ ³TÞ‚5ÀÁŒÏ:Ãkeа Ó¦-–$3lt-Ž:eË{r„/Á(CŠ©_݉[~úÌÜœèCªˆÑ a²ŒøŠ(e¤’ éDÆÛ½kÃ?§T$À›rƒTØ’JL 峬‚Ð’.¿”—g’’M–`“]·~unùÉ{x÷ÍæØÏX‡É0¹‰C?2ã”!Àø‚U˜âbˆ1j¤À'&ÔáëG ÅAÃreÇ®«wš‹xhEÞßZ Çè–‚®(B!„=Ê0„BHFk{z(þçþ'! Þ.¸à,]ºW_}5êêê>ôýÿáþóæÍÃYgõ¡Û"»===¸üòËñÙÏ~[¶lɬwÑEáí·ßÆGñ¡ï9lØ0üò—¿ÄÂ… 3ÇU{{;®¾új~øáxâ‰'Âò¸F!„B!UEwA¹­p{¡§åv¸¯{bJœ£nßo!?êÓžt­øI$Àd‰ 檡ÜÈà ‡Úmõ“B"A"HyoÎüècá;k­¾CöHK‚I—[”9»^¢-Çn+=ÅNˆñ ¥ 1Á %ÀXmZûÒŒ°ÛÈ<öRh<ù2*¿Ä$§‚mR"CÚÒÔŽŸ_õ<÷ðOü ¶*üYkU€¨Ý‚ÜØ£!DÎ’¡’c&. v,‘vêö»¹¡'EÏ9·°=-·¡Ôùw@÷@S†!„B!d·¢©[¡£¨ñâÆüau7ºË'cÔå>¹ß|íÈ!˜84g¥jiÓ“IÑq¾VbÒ‰{aïyeVbˆ—RètñØ-+ðÔ]«QŒ%wâ 2„Ñ+a%)t$Åš Á&¥ Kd)“H£b©0Ál£ÐûÎ0¥”Ôšr"Kây¦ô§7ugýµw\ç¥ûÄ€‚t˜¡{Õàð“÷ á5ÉJˆ±Ç40¼V✃áóÂȺòóÝÎ’ÆËõ=øÃÚºš n{!„BÈžeB!¤ sæÌÁÌ™3qâ‰'â«_ý*êëëSëM™23gÎÄ}÷݇}öÙg»öa¯½öÂ3Ï<ƒ_üâ©i¤²bÅ œrÊ)¸ñÆ3ë <÷ß?î¼óN 8p»ÞÿÐCÅÿøGüéOÂa‡–ZgåÊ•8çœsð‰O| ,  C!„BÙå(uü¥Žg¡U[Ùz"·jFŸ‡Ú±_†Ì›éèU"Læ9¥!ŒE~Ìxh½Ñ{=nxN…u[7·ãÿþ4¿û-(½Î4SÖp’òG–(ã×$ÄŽ i&M” >CBLÞ"# F oÁ„/ˆÄ6À¿FD×–=NÊ.RÀÚGâKPÏ/wìã Ý%<ñóeä—Øñ‚·VáÚo>‚åïÕZY’S$Â4#7¼ÎðCRÆ2åóµËÉÄ@ˆ:ÔŒ< u{²î ò¿º·û ô´Ý­Z?Äo!„B!dWcu‡ÂïWwcY[y@ à¸Q5øúƒqüèsLñ~ŠG%‰Á·ö=x9~œœÓBB!ÆõŽßyµ·_»º­¾eÉ&¶$‚i#KXIkQ° mØâŽRv*L°%%•Œ{–ZR“bDì»Àeʉ;¶ô’þí~uw+<6cž{p-Š=Úþ™jï»CkŒ?x:nœ\ïÓ…‚1Ô1…¬àšý‡8¸pÒ`LݧµŽ(;¶»ž^߃ٛ)ÃB!„l(ÃB!eøë_ÿŠSN9³gÏN=¿Ï>ûà¾ûîÃÌ™31eÊ”Ö!®ºê*¼öÚkØÿýwØ}ÈÎáÑGÅqLJwÞy'³Î1ǃٳgãüóÏß¡}9óÌ3ñî»ïbúôé>|xj—_~Ç<,X°CûB!„B!}¥’Q‹üÐ3P7ö_áÔZVx‰‹ ééFꋹÉÔŒ=È7C»E»ÝP pñÔ³ðó«žÄ–¦¯{IÉ%”V'-éÄeœ¤ä‘L˜-|ô¢Í@T–ã%¹ X$”‘ c]#ü4óØk¢D˜d*Kš¬’XR®'û:Äh’ÒŒVÝñ:nþ¯?£ck·õóóDå/äÙ€š1AÔî•>.TÖˬ<'r£P;êÔìõÿAäF~¸ßB!„BH¿£ 4Jº|ý;8ÿA8}_O,0¦ ¡â¾Œ 3td-Ž8yÏû)"¦ã}®_Û‰Ûþs1æý½9ì_"%KJ)“‚xqaÆŸÓe%Á„‰0½H¤‘~Z!5ÆL]ɺY')§ô"Å%µ°Î…ò‹Œ=»Ô$œ(gãêNÜqíb¼7{Køs3“~”«‘¯•8ô#{aÌþË TÈ7i’Œ7ƒ:ÇŽªÁWˆ£GæQ^‰:Ý ¿„B!d&WíB!»2Åb1µ¼®®W\q~øÃbРA;­?'tæÎ‹‹.ºO>ùäN»/Ù>twwãŠ+®ÀŒ3ÊÖ»ä’K0}útÔÕÕí”~år9\~ùå8ï¼óðãÿ·ß~;\×~ÃNü˜dó¿3nE[[´éŽ7ãÑ»ï¨bv/~sûèêè'Žß·Š½!;’IöÆóoÏ ë·´àËÿtz{D!„þ…€3àX䆜á  ¢ä À[Eâ/èáš ÅFp¤ø§„ßvx-(Ò;Ÿ1 ª»¥–ÈÜpO‘Zùox…Â’ùëñãKÆ7þý óÑý|qCCj_ÚÐ¥­=qC;€ÖZú‹›ü2¥$øŒ¨'ø,á8 Z{bLØNئ·WF;JJï;J ,\Ðþ;¶Tr1Š€†W;ùâ‹”¡¬„ „™Ô4‘àR)ÑźNd×KÛ¶4´áî_½„ÕËŒ#éG+(]€¬í@~è1¾¼¯$¾d'Æ$,óœS{(ä¨Pêx¥ö¿º°]Sö4Î;ï$öNb¶néÂÿ^ý þùÜãqÎW§À‘Z*hG@ùL(·‚ŒtŒÏ¡(cH3R§H3:”f"AÆlÓ+s¤ÝNɳdà¿fBkh-!¤ÿX¥Ï^kCv‘‰Õ]ýõÖñªU«(ÃB!;˜¼øÈ¨&¬AΟ²iáÍy£W6ø/)Ðãc /†4¾ðA„åžÞ`k o·÷ƒ1dD V,l[Ô !F˜ÿúflXÙ‰Ï]v ÆŽ`È,ž˜!¥×žÐQ™%Ìo>+´]f¥¨H ¥c2M(Õ „¶ïïI9Þ÷óÝ(ÓJ§½ÿ!L®I -}YÊÔ±ºq¡¥œ<ƒØ>bº»JxîµX:¿5`´‚%ÂÀ¾‡ ÁèñË /(#ĤíÀ8ŽMwÃñ8²Fà_&Ôby[ o6±µÈùnoX·n:(úwéÉ“'còäÉáñêÕ«)Ã|Ö­[g=Ï}÷Ý?ýéO«Ø#²£hooGkk+† –vÚi8í´ÓÂãW_}•2 !„ìÂÈjw€Bé/Lž</¿ü2{챪‰0&ßþö·ñÆoàÀ¬vWH|ðAœp eE˜ã?sæÌ©šcrÌ1Çॗ^Âã?Ž8 ÚÝÙ¥ùå5?Æ¢Õë«ÝÝ–Ÿýäj,]·¡ÚÝ ;B¡€o_~yµ»A!„~ŽÃô/Èù„3&3i#¾ò¢2«×«Äe ‘C͘£€|3´*xâHp/_¶P®Æ³¿Ÿƒë¯|›Û"Gr☟-Ñ#.d Yí82« )yÅ“¯ ]¤/©ä¦u˜ú"ü•7ᱟã-ÊÉJkA†°‚Œzð¿G\ž-B鯉·ãhWáñ;ßÀÝ¿|±¼£7 fìA5#*Š0Ѧ’çÑÛ™ô±1¹Ag¢fè…¹ñUümë<÷Üsxúé§«ÝÝ–E‹ᦛnªv7ÈN⦛nÂÂ… «Ý B!dE˜4ÔÁ¨Å±#òþË‚—:DÂBR6H¦tÄÒ;ÒR=âûX*Èà58ò¤Q2¢&Jq5” hד,×wãŽÿZ‚9¯6eK$A‰ŒKÁùHê0“P,Y¤R†’.øíÉèZ7ü>Ñæº*º_YùÖ¾œô"¬º†ÈRFzI—_ÒE› +;p÷ÏÞ·Dajj%=aDB„ÉœêfmÖØËJˆÉH’ñ¯;`ƒÏíW‹î•Cž++òõ¯Ýû»Ù!|ûÛßFGGGµ»Avííí¸œÿNM!ýþ§#!„ÒKN9å|ìc«v7,N8áÌ;Ÿÿüç«Ý’BWW¾þõ¯ãüóÏG{{{f½o}ë[˜9s¦õæ–]iÓ¦á˜cŽ©v7vyN9ö(Ìxða´÷0¶b{£µÆ”cŽÂmý=¥jw‡ì`îºíVœ{ÞùX²zmµ»B!„~ŠÌ ™?4& ‚dPæYç‘*À$޵Fnø¡p†å¡ÝÍ¡0ÕUÐJჅðãKùo¯./·Ÿ=DŸ#ÙEÆ>'6'Þ–´® äG A‘'ÂÀb ½­TbtTOˆ(&vœÚ/‘Òç¹'’xìD˜Ìïk´Õš7µáÆ?ƒ7^XìKJÊa”†v»€ÚVÔŒ=ÐNB„I۲嘘ØbŽ+ uœeA!Ç@Öž À©Æ¯Z¿â /ĵ×^‹Í›7W»+»%ßÿþ÷qå•Wbýz¾(dw§§§Ó¦MÃo~ótvvV»;„BÈÇà¼Àñ#s¨“"E(°Å—`ÎZQ„©°W)ÂŒ2Î;y‰CŽ}ì•™²…/Äô\ýéOãá‡Æ AƒªÝ•3fÌÀW\îîîjwe‡rË-·à’K.©v7*òÞ{ïáÜsÏÅ¢E‹2ë >wÝu>ûÙÏîÄžõކ†|æ3ŸÁÛo¿]í®ôjjjpð¤ÃåÖ¯CË.²èfÂþ1dèÐð¸X,âƒ%‹­:‡v8òù|x¼uëV¬[½jgu1“ÚÚZxÈ¡áñ{æY¾ôFäN rDüòÂÀAƒ0ñ@[jklØ„ÆM›v~_Äă¶ÊÖ­]‹­-[Âã½FÂØ½÷±ê,û`)zvÿÙoâD 2Ô*ëêîÆÊ–V©G„Bé/ÈšÉÈ<#’/ŒdÈ ­$’2‚Ä“`ʼn0óÚà¼qÎ>N»Þ?Z—Pj\!÷)Û—Os,þï—§@(•J®¶öÅ’B©¤Qr•}¾RYø9*+–¼7Û3Οݒ/º¸ Úu=¡§X„.¥,ÐÚO‘€ìãØp$r9œ#s$œœô>û{'ü/®‹öNpì×sœòçƒý‚·VâÉ;g¢»«'’[”!œ(í6Á92?Ì—QaââKBŠRYõUòZõ#’_Tt¬¢c·ð.J]/P;ù7¬ÿ2xð`œp ‰9å²e˰nݺ*õ澈ĮøñvâÏk¯½¥¢Ÿó1ǃ‘#G†Ç»Äßnòù<Ž;î8Hi/Xûìg?‹ïÿûVÙᇎ%K–ìÌî…œrÊ)¨©© «ùüN<ñD 80´9G„Ò‹,»7ž±“QG˜ÏÊÞ'Ú)³7ë:KxXñÞÖŒgë½Äb߃c¯}Äd–è³)>%„í·•U_ÙÇÊ—¥âõ”ŽR‡‚¶»J/l,¢¡Àùn_˜0aBb K±XÄòåË«Ô#›|>Ÿx1è¦M›°eKôï–ƒN̉׮]»K¤³Œ;#FŒH”/^lÿ;û­·ÞŠK/½tguËbÔ¨Q5j”U¶fÍšª¼Ì`øðá7nœU¶bÅ ôôô„ÇiÏ´Z+ˆsàZ;¼¿¬Y³¦J="„ìéh­«³ªAf7ƒ2 !„ìxN8áüñLLÞvæÏŸsÏ=K—…ûƒ sÏ=÷à›ßüfÙ?,L™2?ü0&Nœ¸ó:ÖKÞÿ}L›6 +W®¬vW©ÈÜ¥Ëqì!†ÇÕ”a!„BȮ̈üàϲÎV¤/¸aK(±WÓšÂK¶ “~¾œ!Pjùºg0„¬MÞÛ_sÀ¤±øú÷?‰á{ 2d_N±d[–)–ùùñ8á´ÑaBI ¬˜©%qy%bRÏ)/µ¥¬0£´%ŤÞËÚÝÔØ‰R))cŒ1NN¤K/©rJ/…K˜IžK¶ŸÞÎú•øãýkÐÞR E“ø³ª©ËaâQÃP7ÈÙfFkÿfW1q&ã:[†ÑhéÑx~c¶¹–‘ôâën«)ÃBÙ}¡ Sf B!}äwÞÁ”)SÊ&~T‹É“'ãwÞÁyçWí®ì‘tttà /ÄW¿úÕLF+®¸ûÛßvIæµ×^ÃÉ'ŸL†B!„ÒoQ¥èiû´Û"6 !5”*[Òƒ•ðám¹á‡ÀV í6‡B„ö (/-dÅ’M¸îÛaÁ[«àHÇ›®”ÒÉøÔs¢ÏŽ#ÂëÃÍ_\Ó—6Ç{¤Ÿ¤ø}×ö¦u(¢$$)­¶Ã{8±þH)ÒË‚7 §µã…Ïã™Á¿Æ«ß\ߊ[®}6aÌŸ‘ žPÛ†ü˜£‘%Âßµ¼“r¯Ÿ1ŽlÆ<.¡Ôñ,EB!„Bö`J xaCn)EâL™!kKÊ éûä5¦°/WF]Ç‘8ø˜Ø÷ !¡ ‰)ÞV,hüù¡µxâ¶•(t»‘`#á&)ÝØçSÎ²ŽŒ•¥´™rm¼ éË9)[VÛ÷ñsæ½ì{ÂÜ'ú•þÝ<sÞÚÈ·^lÀ#3V ­¥è=o7Œ¢mø˜:LúèÈ>‹0i{ Ìy˜ã2{`üØÔ¥ðôzŠ0„B!¤ïP†!„B¶5kÖàÔSOÅK/½Tí®$õ©OYqÄ„B!„ÒÑnŠm÷C—{%'$ÅôJ\(+ÄÂ…6êÉÚ‘È=Zm°Û’A´Bg{7nýÙ xìÎ7 ”J‘Z éÃülI1(+Í$Ú”")ß›'·øÉ:þwSÖ&€P|±Eo%L»‡Qž.¹D¢N¼ŽÕ–H¿FJ3WàÖÿ|›ÖnÅheÈHÚm€3brCÈSÊÉO•Ä—DMZ}À[ ¿¶ŶGáöìz/f!„B!„ì\4€×‹x£±˜-¼À âBIÁNÿð§Æð¯‰ 1*ºF©H޳ß@L:a/ÔÔÊHÄpá§»xÛâÙ[pç/AýšNC 1¤—˜ØK AŠ8¯Ž!´”—^Ì{Ø Â$™ø—^’òKRzIÊ/ñziòŒ]"­¿Þ¾«£„'n_‰¿ÿ©nQYòKðì`¿Ã†bÿ#†AÈ4Aª¼“™ƒhüSY{üÄ$Û_ÞV³zPp)ÂB!„¾C†BÙFZ[[qæ™gâÞ{ï­vWRùÚ×¾†Y³fáˆ#ލvWv{n»í6œxâ‰X²dIfSO=óæÍç?ý騳Þsýõ×ã¼óÎC¡P¨vW!„B!d» UzÚ€êYUY€)w¬RΧ1‘Ð’ÞF$½(@KäÇä·@»]^*‰VQZ‰ßÞ+\ˆ~ð467´%¤Kn‰}N•fÒ„“ŒT;UÆK\þf'ÃÄ6­c+zd˜*ã +Aª b}Alô‘äbJ3"å¤<·èâé{fâÉ»^GO¡h JÁÏJ)h½ù±“ óCË M½aRR¬c ò¸ ÊÜ­èÙúTiMõ~™!„B!» ¶”ð†JqIé¢Ë6íU Cd$Ĩ Ž}Ý€¡9vâH U—H' c¶4öàÞ_,Åì—Ó…LaÅN“AªLb'§”m#%ÕÅU®›Ü€ÊÒKªÈR¡®%ô˜òOÑX»¬÷ß°«ÞoóŸoj¥ÂÔp0é##1rÜ€ÔŸs85îõØ06•%R•K²%šy›‹øk}ô`!„BȶB†Bù‹E|å+_ÁþçV»+©y䑘5k¾ò•¯T»+»%mmmøâ¿ˆK.¹ÝÝÝ©u„øÿø¼òÊ+˜0aÂNîaeJ¥.¾øb\}õÕÞÆC!„B!» ºÇKÔè~7Ed@FU´Ÿ.m†‘*Cøi$FYnØAp†„v}ACYíj¥°fy#~ñ½?`ÁÌ• ÁÅq"™ÄÉeÂT'&ʤ&ÂÄÚq¤”á1„ðå$Ra<ɾ0#¢t?!&]X‰É/"Yî˜)7þÞIÈ3ð¯®kÞØŠ»®ó__¥Á‰0P ºÔQ׎ü製Õ8JÙbS†ÔRY„‰Ÿ¸L“&XY×û‹ÉŠQÜz´Û\å_$B!„BȮȊvO¯éFW))¤¤î‘&BTHQژʘL\v°Ë¤#qàÑÃ0þÐ!ÞtË4”Ÿ¼R**¼øè:<~ëJºÜTá#J‹É’^ÒÓdÌ$¤¦ÉĤ£ ô5¶UY‚}yéÅú~ ù%]ž1ëBk¼ùÂ&€”^»Á%èîèÁ½7ü'Ÿq8>sÁ‰‘ ¢½„íHh­üÏ€ÖÞ}µF¸W¡àHí‹#Ú.s¤ÑŽ ÚÑÐŽ€ÒZJ¨à= J¥øíêð^A/¹ÆM‰*1g ƒ—A2M„–Jé2Édï\G[ Ï?¼ëVtDÉ=*JíQÊû.û>#ÆðËPA\©$Âô^°ê;ÇÕxqcÖt¸rôB!„B†BÙnÜ{ï½X»v-žxâ 6¬ÚÝIpÁà£ý(Î=÷\¼ûî»ÕîN¿ææ›oÆ•W^‰B¡Yç´ÓNÃC=„}öÙg'ö¬÷¬_¿ÿüÏÿŒ T»+„ô‰_Üz'†Žï3nl{C!„Bún×ë€jAnÈ?C è`ῦ'X«@(æª÷]ˆvåßÊXÈa–y wò£†»uTw-„í¯ŠÆ ™™/,Æê¥ øÒ·¦bø˜!¡ £´Žd(Õ%øJ3† ãèPšQA;ŽN2öõ€ò;®Sd¡HéõY !!ÂdT–ZD¶è’)¿‚[tñüobñìUñW׋ -6!?öHï‡.±ú¡´¢1FAû‚Œ]GEíôF„ÉiŒöÜ®wPêx1”„ô>ò‘`üøñáñäÉ“«ØB!„=‡­E'VwcÚøZì3ÐABjQÚ{Y’³Œ„ø’%Ä„W{e ÂcüY¢ÿÙßko¾+ 0`H‡¸Ö,ÙŠ- Ý€ö„!©½—7´4õàÁéËð±OÉŸcK,†Ø‚@HÑiç)Æë‡Ö)ÂŒ€!ÅeFªK´’ ‘üZb‚ ,qFzM21Æ’~2ê¬ù  Ï?²íÅP~ÑÊ—a4 •Fí 8jjäÒ¥—DRKRVQ½:Ý3-aÈÜÑq{QáOë{ÐTH{Á!».£GÆYgUínB!$Ê0„BÈv䥗^©§žŠçž{ûí·_µ»“à°ÃÃÛo¿Ë/¿·Ýv[µ»ÓïhmmÅ×¾ö5<þøã™u¤”øÑ~„Ÿüä'pg'ö®÷ÌŸ?guÖ¯__í®Òg¾uÑ—Q›ËþÝêìá[“ !„BH6na´jC~èÿ…À@[xñeïXA(Ù'!&X–Åê$˼#?Gà =¢®î–z9Ú¿——V5áÆ«ŸÂÙ‚£§í8ÚOr1e¿L92e‚DG@j )•—Æâ_“ÚŽc$ËÒŒ¢ˆ˜Ø74aàK0¦°âH_ЈI2ѱU/Ü‚vd¼ã¦-xîž×±¥áÿgïÎÃäªë|Ωêî,=! ȪŒ "1€Ì #8£Î8Ãxïxg†‘Ñ«wf”Ç\pTPG@d—-av’ ‹Ⱦ§ÓÞ«êœßý£ªNýÎVÕtútwÞ¯ç©ÔY~çÔ·ªzžñGÏùî :¬Ä»°tË™`”o}WBE©•ºÛüô1IÇÔ Æø¾J]Ëë{vÕÀÈqÑEéüóϯ;¦··w˜ªØ»ôyFw­éÓ‡ç´èÐÉyÕæœ•yš±Ö#!—] Ä„ºÀ4ØææÍ}çMšÚ¬uotÊ÷ÊZL%㸒)úzôÎ ZóF—æÿå7!§j'˜jÅT0å.1µªjáÕº©TC/A·¡S9‡S9Kù5*û¼ä0Ì`»¸$ZœH@Fn-DSÝ ÚøFzú¾Mzáñ­åL~©aÊ¡˜sÆk¿C'U¾î:¡ $ì2€ Œ©t†Q½sÔ¦ÜÛû|-X߯®7~ÀèsÈ!‡èꫯ®;¦­­m˜ª6·ñ0¯¼òŠŽ?þx-Y²$ëR7NW]u•n¼ñFMš4)ërFçž{NÇ{lÝ Ì¾ûî«|Pÿñÿ1bƒ0÷ß¿>ð„Á˜d$}õk_Ϻ Œp~q í¿‘ïµ7ìБ¸ß¯Žð+ûë)_¹;wùX_nÓd5ís¨ŒÖK¾Wî.âÛçöUè-èæŸ.Òï~µX^É«u‚©GrN(0’s]årÕåêC u\±O=OyYŽd|?þ0•‹¬Ž0êòâ$o³Ã1®ë(ª±VÿË‹Wè·?¼_;6wŸµ&U¦´I¹iÓ”›x@ƒïg€Û¬ï9º‰]Âá—Ê÷/û˜¢Š;ï ƒ1íg?û™V¯^uc–g¤Ö÷kɶB8¬b°žšºÄƒ µÎiç±–}cMykãüJ‘û×aï›®æñyù•ÐI¹‹‚õ•/ïÔ5—-׺7»­IB°Ä›¸ 3J ¢4:G5ŒâHžoäyñG%K3 ..Ñó+ò\olµ¹Žºvuû/ÞÔó‹¶Ê/U?#…>;ÇqtÐ;§è€Ã'¹'ßúîÊÏÖwV Ñ„÷GÃ.ÂØÛ•tˆÚ˜µÝž~·¶ Ƭ5kÖèÒK/ͺ öJ„aØ6mÚ¤SN9E÷ÜsOÖ¥¤ºà‚ ´dÉ{ì±Y—2â]~ùå:餓ôÖ[o¥Ž9ýôÓµlÙ2vÚiÃXÙàüò—¿ÔÙgŸ­ÎÎάK†ÜæÎn}ãÒèê}?ëR0 o›Ší×Ê/lhЩ#%Q \Ô N¡ŒZÐ¥üˆ†[ª¡ ¿v¬5Í|—ÔÒ)Sê®:|?ŠyáÑåúùÜ£í›:‚0I5ô몒pÉ…ƒ.I¤ãÊ]rüØ£|']·ˆI ¿8)˜„ NZh&WY.ö—´ð׋õÈ­ÏÉ+TƒCvÆH^IÆÙ¤¦}”“Ÿ’Lu¿ž±CJÑÀLôûL ˤý]$S} ¯[…öä–güÀžÑ××§ÿùŸÿÑ¿üË¿d] À^á©­E=º±¿2uljðCëÉ¡™Úý’B&Ô±¤¾‚‘ÆOÌëÈã¦kÚìqò}É‹†b|£mýö¿Wêé7«œ>‰vO‰‡JÜh—•¤PJõø”s8®S‹Tk²f A–Xø%}Lü;lãhÕòNÝðß+´þ­ëó©={¾Ñ¸‰y~Ü M™ÕþN‚P’ýFC/µï¬^À©a¦îyŒþØ^Ò‚uý*øYþ_°gctÏ=÷èœsÎQGGGÖå°WrŒ!q=–8޳JÒÛ³®P–ËåôãÿXÿûÿï¬KIÕß߯‹.ºHW\qEÖ¥ È•W^©ÿõ¿þ×°¼V[[›>ÿùÏë®»îJ“Ëåôïÿþïúú׿.×™9ccŒþïÿý¿úÏÿüϬKvÛŸ]ð7aBhÛ¶-[õà=wfTF5§I͓ϕÛrXè*–j˜£¶¾ŠÆq¢ûcWÁXc”z\m›Â·— îfëÈ;Uܾ^nnVê±M-MúØ_¯wÍ;D%ϨTòUò|•J•å’om7*–|yž¯bÉ„÷…–Måñý½ÛÚÕ»zCìãÌM™¤ü¾ûÈq]årån4ù¼«|å9—s•Ï;åõœ«\¾üœ¶Ç©ë„ÆmßÒÎ IDAT¸Cýæ)íÜޕнE’ŒäuÊiÍ)7qÿʘÊv{\ìXS›tJ ?¥‰aüÚøÒv:n’ñÚ‡ïïØCN=õTÍ;7´­T*é¾ûîÓ¶mÛ2ª `ïõöÖœÎÜ¿EÍ9'¼pSneZê6mĶ)ºÍZV|›T[Þ¾¡Wk–ï”1ªÕåÚÏÒA‡OÒÇþò@M˜˜/k*M‚ÐJt[å&¾/¯òìWB$Á²"cjÛ^xr«z{J±ÏóØãg©¥%'Ç­oìŽ{vdž‰ï3Æè©6kéâmñ°‰:™¹ßíè$ɱ§¸¦2íµ‚*ªt²÷‡Ç¥‡ŸªÓàp·™¤cžÙZÔ Û‹ÃùgìS¦LѼyóbÛW¬X¡+VdP`oaŒq²®a¤# 3Ɔ€‘颋.Òe—]V¾He„ºí¶Ûtá…ª½}d_|1\a˜'Ÿ|RŸþô§µfÍšÔ1ûí·Ÿn¸árÊ){¼ž]Õß߯ÏþóºñƳ.F(GM­QnÂûêb·zeN`‹*·—•äÖ ¿X¡—zá©vwØâ¶Wä˜}Ëç—âçt¤£ç¢üÅñÊår*Úa˜Ðrd[Jh¦˜xLù¹gëu¿¹.öIæ¦NQóœÙr*—ZØ%9Ð’Ï;å€LB&gË9ÊYû_}ò =³àEù%«›Nõ·ŽÊ²ïoRÓŒ¹rr$Ù!•Ú˜òï#ámÉ%l wwxÆH•0Œ_X«bÇ­2¦wOÿ‘ØKÍçêœÇ©µi`˜êT3=Ó(c³æ´µpL<Ó×]Ò›/µ«¯§®Í­»ur^ó?óvðŽÖ ØÅ(y_¥“Jj`ÆêHc|£çߢžîxæ}'q¹„ðKýÐKùy`cº: ºÿæµÚ´¶7ÜÙÅ Á¸yWo?b²¦Ìj‘ ¹„Ã/Õ›=$b¬e•? ÉXÓÜaìn1•:=ßèá½¾3þ9`àÃ462o_Àóýï_ŸúÔ§Ô××—u)©>ñ‰OhÉ’%zÿûߟu)™2ÆèÒK/Õ©§žZ7ó±}LË–-ÑA˜¶¶6qÆa .£b×*u>¤Ê•& »yÈ·C~ð‚•„©Ÿ×¥—^ª{ï½W3gÎæ îÍ7ßÔ‰'ž¨Ç{,ëR`T(õ>«bÇí’_lˆ©†]*!‹h") ÎDÃvPÆ ŸT~Ú4ù¥M•L-ÈQ½beÛ†ºö;÷ê¥ÅoÄ‚.ÕÐI8àR ¹Dö»•;Ó&e× 8öC¦r‡á†_R‚/IÇn[צßýø­~y]ø}W>+ãû2^‡Ü E5Í8*9”ìc#Aës~ÿÕ×Q$ÌýÎC5V ¥î§TÜù;ÉxYÿÙØ tn{«Okº¼AbBaŠhÐÅO UÁ ;”a|k¬¯`þ[™^Ëq¥ƒŽš¬ƒŽš"ɉ…@|ÏÈ+=¹p“núÙ›êî,Zc“ £pWšês(È?‡©pì‡ï™P#×Ú¹jÁU^WV°&-œ£à¹ü^»g£\¿Z½Ý¥ äyáPЬý'èð÷MWSK.ÁSÙà;¨|¶¾õÙa¤¤ï:²-˜7'„]Œi„ÙYðuûê~­ïa¾ €áA€aôÔSOiÞ¼yzã7².%USS“~øÃê®»îÒôéÓ³.gØ<öØc:æ˜c´páÂÔ1x {ì1}õ«_-ß¡g„zæ™g4oÞ<-_¾<ëR`Tñú—«Ð~½Œ×Ý »GBðÁêãׂ3êc­]Õ„b”oUÓì#%g£dJ‘Î%•°EQ÷_÷”üê1y…R¤ûŠ.µn.¹\8´’‹Xr9GŽd½žõ0¦|~§ö:A7G‘×Wåõkãb¡§|Ü«O,׫~¯î¶®à3ªur©a6*7c_¹Þ)…>kù¬SB/uCM‘q¾o½ŽÚ_SûŒŠ;ªÔýHÖêö2ßèî5}zuGi€˜ø¶ä K-8c"!—h—˜ð¹ªç ‡b¦¿mœŽ:~ºÆMȇ;£x –W¿Þ¥k.{]«–wÖ¶„)õ‚,áÀJøukÇ1©–äŽ/Õ®4µ×’®«cGA·\µR/>¹=ñ5}¯äÝSµß¡“Âß0²Ã/Ñn0¡ï)ˆ©ó}VÆ×¾¿äñÕ Ìæ^O·­îÓŽ‚Ÿñ_;ö&„af+V¬Ð¼yó´xñâ¬K©ëœsÎѲeËtâ‰'f]Êåû¾.¹ävÚiZ¿~}ê¸üãZºt©æÍ›7ŒÕ ÞwÜ¡}èCÚ²eKÖ¥À¨ä׫°ãZ™Òöp Æ LÔ JØA?t îcjWY¯khB¡£üŒwÊß/ùñ׫/^{ö-]ÿŸ÷hÛ†µ€KÎ]rJìÆbwƒ íw”†q¤ÊùÒ;¾TC.¹ÔÎ0µ°L©¿ Gó¸^¸ïEù%/!,ä—;ù¸[Ô4ûrÜ–Ú÷|~-t”±¿‹x7Œ™ìïÌ~h ßH~¿ í7Ëë[šõŸ8€½”o¤ßoè×Ó[ ñK½@DjÐ%)8S/õ”L¶äØë† Û·o×é§Ÿ®›o¾9ëRê:à€´hÑ"]|ñÅ#ºʮڼy³>úÑê›ßü¦zªGA&ŠT+O?´Y7]±Rí…Zè%©KL(ôR¿‹Kr‡–rÈ#-ôâDB/ª3Æ+=rçz-üíõõxVØÇzmßhöÛ'ê°÷NS¾Å …`¢vj÷àH7kïÆúCßuÐq5„ùC[Q ×õ«HCd€0 éëëÓ\ Ë.»,ëRêÊçóúîw¿« hæÌ™Y—3d~ÿûßë˜cŽÑC=”:fîܹZ¼x±¾ò•¯ ceƒçû¾þáþAÿøÿ(ßç¿2ÀP0~¯ í7Èë}%9ðà‡Õ+SâA—h·?õ|ÁØÐ¶„PŒ5ÞÉWÓì#er›%¯duj©/ŠZtóÓzàW‹Tê/†‚.‰aR‚+Õ㜴Î0Æ]]r‰ÁÅ2µn3ågÇ‘–?þG=|õ#êéèŽ`ªÏ¾Ù¨üÌ9rÇÍ…„ÊŸ_RÆ~v`©^7˜„›¾Ã`_q‹ m×È/mÎúOË;JºkuŸúJ~BÀ¥:Å5±°Dx9ÚùÅ [ØRT;“„º˜j×Zž:»EGΛ©ñ­ùX—˜êòš]ºæ{Ëõæ«åŠk?â¡Ù`Üx¸%­3LRx¦~øE±±íÛ ºéÊ•zé™¶x¦ò:nÎÑ;ަ9‡¶JªNwÃÁ¢Úç /™än0éuú‰k‡ŸžØÜ¯Ç7d2ü[ÀÞ0 2Æèâ‹/Ö¿øÅÔÎ$#Å™gž©_|Q§œrJÖ¥ìÏóôÿþßÿÓgœ¡M›6¥ŽûÄ'>¡¥K—ê¸ãŽÆê¯§§Gçwž~üãg] Œ=ÆSqçïTê~²NWJ+´éüb]‰¡ŽH(¦:¾rlÓ´#å´e¼ÎJx$ü0¾¯KVë–ËîÕ¶uÛC;˜ë c…XªÁÇ‘jh¬0Iµ3Œ~qÂÇÛç«m/?{ûõÄõë½$¿äÅ0å÷QòÛÔ¼Ï;å8-Áû¯uÃ@&Ròãßgj ÉþL#a¨jÖ¹üþ7Õ¿ã×2þάÿ’ f]·§[ßêÓÎB$ã§'¢Ûüxp"Ú%¦¸°‚¡s„C1µi[¸ãIóøœŽ<~ºf0A¾'+£ ‹JOgI·þüM=zç?pqíPJB`%Å8’£Z÷™Èý4¿8±±¯-k×o²B[7ô¦{Z§6é¨y35iF‹2A ¦Ú¥ÚEÇîàê¼éSû^¾ÏX &%ekоtÿº>½ØVÊúÏ{9Â0ŒW^y¥>þñ«««+ëRêš3gŽ~øa}ãß뎾ÿ±aÃ}øÃÖ·¿ýíÔ*---ºâŠ+të­·jÊ”)Ã\áàlÞ¼Yüàuçwf] Œi¥®GTìX µÔº…$‡dŒ5®€ &ž±ÖqáPŒº©†QL-è‘?Gù™³%³Ù «„Ã$ÛvêÎËïÓ+ý1ÂÄ;¸„·å"¡×Q蜵Î0 ŸÖq&´½Òfûê­úý•hóЉAãûòýå&9ÊO;¬ÖùÆX!•à3ª‚‰“jǼŒÿ­e¯÷EÚo’LÖ¾ª­ß×ÍoöjS·F$]â_Â! »{I0¶â¨2BcüÚ¸`Ù lÔ‚ FÆqtà“uȱSå¸NbÄ÷Œž}x‹®ÿñÚ¹£À¸’B`Â1•n2~¤[Kõu‚Ž2)LJÃ/µG©hôÐíëôÀÍkÕ×ëç³k÷|£·ÒªÃÞ;C¹f'èîbüjˆ¨òýð÷P ¸ÔG~0.`Jìôcuë þñÎ3=%£ß­îÕÊΑ}³OìFßU¬ŒQ ,Ð)§œ¢7f]J]¹\Nßþö·uÿý÷köìÙY—3`÷ß¿Ž9æ-Z´(uÌ;Þñ=õÔSúû¿ÿûa¬l×üñÔ 'œ çž{.ëR`¯àõ-UaÇM’×_ ¢$v ®:‰³B±0†²¨Xj!ŽêC¡ñvG’j·§EMû%å·J~)Ô}¦ñ‹%=}ÇszèQ©¯î““ÕÁ%!(“«†aâÝgœXg'|.'Œq\éõÇ^Õ“¿yT};{j!ëY¾/ãlRÓÌýå´ÌŠtñcŸ£J Á˜àû YBŸ{jç˜z]ÊcK‹TÜy¤äqÀHÒS2º}u¯Vv”¬PK8DaZj_ÂI»‘D2Aw‘„PL­³‰øîwP>vê¬qz×I35qJS¨ƒ‹g=¯«[×\öšÞøCGÃN0Õm²Â-¾_ «Ø¡•phÆ‘*á™êsp^·öšm[útÓÏÞÐËϵYµZaß(ßìêðã¦ëm‡L”¯Zç—Xƪ„ºÂØÁ¡ph)±Œ/ÅBKÕeëµÂA¨òòŽ~_·½Õ«Í½Ìw02†`Yºt©Ž?þx½üòËY—ÒÐé§Ÿ®eË–éÃþpÖ¥ÔU*•ôµ¯}MûØÇ´uëÖÔq\p–,Y¢c=v«Û5‹-ÒI'¤U«Ve] ìUüÂJv\'ãuÖéã˘´Eƒ°…n±C1Ö±µn(öùÂÁãûÊO;Bn«'™‘.+µÉê—ÖèÎïß­ík¶Y7½äÜÈ£²Í‘‚n-öCÆ(çª~©v‰±žsvHF*öôé™ëÕk‹^–ïYç =ú¥æ65Í|§¤|$ yßÁçÒ cW¡î1µ@K¼sL4ì @ù’WR±ãN•zžÈúO¥äK ÖöéÅí…pø%% QÓÚh×—Z¸¥6]KÅßXS1«[Le½©ÅÕáÇÏоs'JRø5*!“ž®’nÿŸ·ôÐíëäyõ;ÁD3Æ:ýªÁ™hÀÆ u‚©n^y¡M7þd¥¶nì¯v¬Ð$MžÙ¢£Nœ©Öi͵.0ÕÏÄê c‡Žê…`|븴n0Aè%©sŒ‰†šjçÚÐíé¶U}ê(šŒþJ€8Â0Œ0k×®ÕÉ'Ÿ¬‡z(ëRÚwß}õÀè[ßú–r¹\ÖåĬ]»VüàõÝï~·|K‚ñãÇëç?ÿ¹n¼ñFMš4i˜+¼ë¯¿^gœq†vìØ‘u)°WòK›Uh»F¦¸9t±B0ñ0…îîb¯…b:¾„B1vø¥z¾ä`ˆ|_îø}•›ñ6mªuB‰„MºÛ:uß÷é‹^©„^tt‰vq é cwq*çsjá˜í«6ëñ_< momI8W¹Nßo—;9¯ü”CÓ0A8(úÕ Á$}Ñ€R¤#Œ‰|¿ÑïØø½*´ß(¯oäßà’Im*èñMý¡pJ5PIT·'t‰1VG븆¡˜ S=‡±¦zÕu#i¿Ã&é|Søò7;óü£[uÝåËÕÞÖêØRëã„»º8 ‚+ÑG,𒈑ã¨XðußMkôà­ëTè÷Bá—*Ç‘ö;t’}Ï4åšœÚgá+ôþkSÝ”LõsµŽµ³©}'Vh)ržÐ÷jm{½£¤;×ô©Ï#€‘…0 #PGG‡æÏŸ¯k®¹&ëRr]Wßüæ7õûßÿ^sæÌɺœÀ=÷Ü£cŽ9F‹/NsÄGè™gžÑßýÝß ce»î’K.Ñg>ó …¬K€½šñwªÇuòûÞŒt\Iê’Ð%¦ÚÄ m4 ÅD;˜XÁP $ß”Ÿ§EM³Þ)5m“ñ‹Ök×~ÉÓ’»Ÿ×£W?¬boA¹œbr‘1nåâ àB(»;Š‘ÕùÅ ÃXaI+½¤çoX¤BWoJ×_F›Ô<ë@¹-3ë`Løý†>ë}&†`ìàM-8ú®¢ß«b aJí*´]+¿¸&ë?MØm˶µpmŸŠž‰#ì@E-ØtIêB ÂÔ ÅSáZÆîŽtK±:ÆLžÙ¬#çÍPë´æÔ÷³y]¯®¹l¹^[ºÃê“ÒÙÅuÊSŤÎ0‰áYÏŽ¶mêÓ?Y¡×–µ§ÖÓ4.§C›®}š¼oßÀX¡•êÜ×…:Áø‘Œlñ­ïªzŒT :Ä$„cªõø¾ô¶‚Xß/r0‰Ã0B‹E}þóŸ×¿ýÛ¿e]Ê€œzê©Z¶l™Î<óÌLë(‹úçþgsÎ9jkkK÷¹Ï}NÏ?ÿ¼Ž>úèa¬n×”J%ýíßþ­¾ùÍof]  Êô«Ðq“¼ÞSº…X_ì‹Ψ…2…b¬c‚PLB·;t1)‡>òSWn²$¿£òˆ„O|_^]«û.¿[ÛWo‰wƒ 2îÀ:øµ.0Õ.1Åî^-¹á½õä«‘×¶º±øýrƵ—<Ê×À„>»HøÈ°ÄB0v¸ÅÔÎëSûNªç¬…cÊõú… *ì¸FÆÛžñ$ •;KºcU¯º‹~<$aw±–C—„ E£PŒÚˆv‹I ÆT¶å[\½ã½Ó´ï܉©ï§Ðïëî_¯Ö·¬“Wò¥j'7Þå%zŸ„ê#)üb÷Ò³Ûuó•+Ô¾­?µŽÉ3[tÄ Ó5arSð™Å0Õ.0Ágc¬m)`ì0’R²?ëHà%šñÃßeõó}tc¿žÚRú?0`ˆ†`„ûÖ·¾¥Ï}îs£¢ȬY³´`Á}÷»ßU>Ÿö×_µj•N>ùdýð‡?L3aÂ]}õÕºöÚk5qbú)vîÜ©ùóçëW¿úUÖ¥b|;ïU©k‘u…ŒÝ•¤ö¨v+Iì<Ò0c@ìã¬n1iÁ˜ê]_}_î¸}”ŸµŸälN³”Çô´wé‘+ï×òG^’ë*Ô&ç:rs’#¥‡aœZÆ>¦íÍzöW÷kÇš-VðÅ„Ž7¦M¹©ã”Ÿ|Hèý…:ÞØŸS´+N¤ƒŒÌ?ßX÷˜¤Î=ñÎ1~ÿë*´ÿFÆïÎú†Ü¦^_·¾Õ§ý^8üé0RíS ÇT-áŽ$B1öqÑn1IÁ˜Z·#ÉhßCZuȱӔoN¿îŧ¶ëúÿzC;¶öׂ,n¹#Œc]’8Jè$ãHÅ~O÷Ý´VÞ½A^)¹}ŠãHs¤ƒ™"7ç„Þb&ô9ÔºÄÔ ÁD>ßà>ÑÎ> Ý`BÝbŒQÁ3ºgMŸ^i/íþ°†`¸îºëtæ™gª½=½òHá8Ž.¾øb-Z´HpÀ°½îí·ß®c=VÏ>ûlê˜w½ë]zþùçõ×ý×ÃV×îX·nN>ùd=øàƒY—¨£Ô³XÅŽ;%¿îTbdÂE’ Å$t>©mƒ1ÁsåjV~ÖQÒ¸2~AÆK¥”<½|ß-¾ú!{úƒ®0Õ€‹ë(ÔQ¦úpŒQ.î(ãÈhÕ£/ê¥[S±»/öZAøÄÝ¢¦}æÊišV늓ð‰`Bá—Úr¸ƒŽŸþy&~ÖwŒ·ê6F^Ïó*tÜ&î `ìê(”1ºK•GB—˜P&THh#…Ø—`zku‚‰cjSjǶNoÒaÖiÍ©ïiëÆ>ýæG¯ëKÚÃá–J(&é#§|®ß^¹R+^éH=®y\Nïxï4Í<`¼u_«#LbÆ ùöû7韧Ý9ÇkLµkO¤LBhÆ÷¥Î¢¯ÛW÷iM··[;Àp À(ñÈ#褓NÒêÕ«³.e@N<ñD-[¶LçœsÎ}B¡ /ùËúÄ'>Q7,tá…êÙgŸÕ‘G¹Gë*Ë–-Óñǯ—^z)ëRàõ¿¢BûoeüÞô.1VÈ¢zñÉ€C1¡ˆ°±ÇEƒ1Ñ K-’Ÿt¨rSó’:"¡,oY¾Nüø.µ½µ)†q$É‹t†ñ|9’\§˜q;{ô‡ÖÚgþ˜ú¾ß/wB§šf%™\âû¶;¼ÄCAÑn9ÕÏ'ú¦tÚ —’»Î„B3ÆW±ó!»”|Ç_Kú<£ß­îÓòö’p w©X‚/Á´Ë ¾ø !Ž ;Jõ¸ZèÃTƒ7Á#˜.Ú]eʯ•ovuð1S5{îÄÔ./Å‚¯…¿]£nY'¯ä‡ƒ.)ŸC9,#©òüÒ³mºýÞÔÎ…ÔÏnò¬½ãýÓ5nR>~ ßÇ„>›¤.0ÑÏ¢Q¦öY߇uL<ÄT^ÞÖçé¶·ú´­Ïßí¿`8†`yõÕWu 'èùçŸÏº”™>}ºîºë.ýà?PSSÓŸåÊ•š7ožþû¿ÿ;uLkk«®¿þzýâ¿Ðøñㇼ†=aáÂ…úÀ>  6d] `üâvüZ~±=R©9¬°E9,S?cB!–ê8?ìHÆØ¡;@c½¶Û­YÂA˜èº Hâá_Fû4A¿{ªòÍé—ǽò|›®ÿï7Ô¶¥_ªv|IS Ëú}ÝwÓ=qßFy^òMWšsh«|çd¹nµæZø%Þ&é}ÙA•껓LZÆ+ÇYÇTÏWûޤµ]%ݱº_]%nü€Ñƒ0 £Ì¦M›tê©§êî»ïκ”û§ú'=ñÄ:è ƒ†ìœ7Ýt“Þóž÷hÉ’%©cŽ9æ½ð Mõ¢ª IDATú‹¿ø‹!{Ý=íç?ÿ¹Î9çuuue] `o»Š×Ê/nŒt ‰„,ñPL¨‹LpµJ¤[LR0&14îc|_Ž“SÓŒ£äLØ)ùý‘ðG%TãyZþÐR=û«ûUìî•ë(ê©<S~¬yd‰–ßñ¸J=}Vç˜pÐFM[Õ<ë¹M“kï!l±ëO À$……’ºè„>S;S[B0ÁgicŒ|¯K…öëå–gý'™yjKAlì—g…*ª—Ú”Õî~R'c"aj$˜¾Õ Æ„¦ÖµpIpN_?µIïxß4µNoN}Om[úuãOVèÕ%;Ô £-útËÏWê­å©ãšÇç4÷Øiš6g|-  ïT§Ý¦öØAŸhðÇ·—‚ :ðDŽ«³B6¾Ñ«íEݳ®_Ÿ FÇþGìXâ8Î*IoϺÀžçº®þë¿þK_úÒ—².eÀÚÛÛõ·û·ºýöÛwù—_~¹^{í5]uÕUuÇ}ñ‹_Ôå—_®–––]~­ádŒÑ×¾ö5]zé¥Y— N“šZÏ•ÛòŽòeƒ‡T¹Ýle{m]ŽÊÏr*O•«pªÇV–à˜úÏÁE<öÕèmòzûÔ½¹-~`õ§§_î$_¹Ö·×¶Iµ“cMh»©nkðlŒu.û98Oely`e_e»¬}¦š‘Li»Š7Ëxíñ÷{¡'ætæþ-jΕ'ŽNe®ZžÚVç´•íR0Åt'<Õ­ì¨ms"SÛȺjÝ[’§·Nx{ð´mM¶®êQ½Kå÷TmXÝ­Îöblß»O˜¡—žm“_'02yV‹æÖ*7çÔ¦¼Õ)«ìù­= 6ñileÅ„¦½&4m­W;ÖÔÆZÇVçÁµé® óÌÖ¢^ؿȞ1¦N\a˜1‡0 ì}þéŸþIßûÞ÷亣§áÛW\¡‹.ºHýýýƒ>vܸqêëëKÝ?eÊýâ¿ÐŸÿùŸïN‰Ãª¿¿_õW¥›nº)ëRCÊQ~âéʯB—H0&=£ZFJ|X0¦ú:vi)¡SRqûëRaFõ0E!pÉu(?}¶œ¦)‘!ö¸HøÅ“ø\ ²H‘«€‚çZÆ>ÖÁXÇZcŒ1ò‹kUÜy›dÒÿ[ìfŽsuÖþ-jmr­{8 <#)~\0ÆI˜â:V Æ~®ÍWS2•a=Emx­SÅ~H? Çu4ûà‰šú¶q•-áàK|ÙŠÇDæ¶v &¶­’h ß"‚ Æ•4µéní\Æy¾ôȦ‚^ßY’ÏC0Lc„aÆÂ0°w:ï¼óô›ßüFãÇϺ”[²d‰Î?ÿ|­X±bÈÎù¾÷½O7Ýt“>øà!;çžÖÖÖ¦sÏ=WO<ñDÖ¥öܸ㔟ø!Éq+üX—F¡˜à.¹éY…® žÂ¡˜d¼®7åïl–”—uÀ.¨ü1®MMÓŽœÊÍ<"¿M„~«ˆ†^bÛ"!–è³f m³º¿$†`*ëÕ»æúý¯ªØu¯$o7Þ?Œ]­yGgТ™ãr’ìû?Xa;#sßh(ÆÂ$c*ƒ£á˜Úrr@F’¼’Ѧ׻ÔÕV’Ï y|NsŽhUËÄ|°-<å5¡õX÷—ÊŠ ö×D»ÀTºÄؘH™´Œ‘ÔïÝ·¾_z†6€¡E¦1Â0c aØ{p ºë®»4kÖ¬¬K°;wê _øÂtDù‡ø]vÙejnn‚ʆÇÊ•+5þ|½þúëY—ØÃܦÃÔÔzŽäæ+]B1’µ¯º]áqRüتHP¦vžàŸ„eëü!ŽLi‡JÛ·JÞä]ãNA¹©’;þ@…:ÀÈ^^ìåhø¥¼’úlBÇ¥…`¬í !#¯ïi•zíúû€½D³ëè£sšu@k®Ü&t˜Ê>Ùûeu‚‰ÝçÁ‰Mo“Â1IÓÜhHfÇú^m[ݽWàLžÕ¢}™(7ç(z‘"Ý`¬ ñ©k8cZìó„ºÀTv¤…`d-Ûᙣëû´£À5ƒ#a˜ÆÃŒ1„a`ïvÈ!‡hÁ‚:ì°Ã².eP®ºê*}å+_Q__ß 6mš®¾új{î¹{ ²=çé§ŸÖÇ?þqmݺ5ëRÃÄÍÏQ~Òyrœ‰AÐ%Š‘‚Î0ªÝ17©[L­³‹u•OZ™ê¹‚•àŸp(&´.Éx*îx]ê6ø7ÜÔ¡üôýää[­óERÖë†_¶™ðÕ?µçJøÅD·%…`d$ã«Ôý ¼þeƒ¿°—ré”ÙÍ:rj>ºÔ Å„îïP ±¤u‹Q|Lmúê$Nm2 ûû:KÚøz—Jýƒë⸎ö9x‚&íÓRç¾áà‹½ ¿Ã0Õ ‹5¾: –¥ÄŒî³¥×ÓÂõõz\/0†iŒ0ÌC0}útÝyç:ù䓳.ePþð‡?èSŸú”–/_>àcN8áýö·¿ÕÛß>ºþ_ßm·Ý¦Ï~ö³êííͺÀ0sÜ©jjý¤œütÙ—Än/VǘÔn1 ÆÔYŽÞ7Œ©ðzVÉkw%3ެ¾Ü‰;•Ÿzxä<ÑLe5)ä’¶º8(%êS=ÖÇ(!c$¿ b÷ò‹o à=¢Þ;#¯÷Ïl[ŠI Â$cÊÿ$5C­ìI¼×CrSTG~ÉhËÊnu·ô›Çç4û°‰jŸ ¶EïóÝ–~©-,£HW˜p ¦vž¤Œ1F«º<ý~cA%.5Ã4FfŒ! ¤––]sÍ5ºà‚ ².ePº»»õÅ/~Q×]w]ÝqŽãèŸÿùŸõï|GMMMÃTÝÐøá¨ù—‘ïîîB€1ħ¦‰&·iÿêmpí[âwÆMëòâÔ Ä(rÁPj8f ëÁ¦òvSêPiÛf™Ò¤ô·æöË–Wnüþ•-µ;ÔÆ¤_Rö™H &í9Ö¦zŽ`$c$ãuªØ}›Œ·%õ½;trNšÝ¬œkw€±B0V˜¥6•Méì·ÆIÉá˜`9ù>NlgxµcS¿ÚÖô$Ï_+&ÍjÖ̃&”[áØìKl[m=~‘Âá•`|J¦¬ Mu­Î0Õóûx#½Ü^Ò“[‹Ñ{S`„# Óa˜1†0  Êq}ç;ßÑ¿þë¿f]Ê ]}õÕúÒ—¾¤žžžØ¾3fè׿þµæÏŸŸAe»Îó<}å+_ÑW\‘u)€!§¦‰“Ûtd(cw†qÒ1‰`ůüI ÇXçJ[OÛ&IÆS©ýu™î©ñCšw*7c9¹‰)Ǧüa¢ ¥„_ìåÄLõ\I]`Ù^[6ÞÖrÆïL®0(sÆ»úè~Íjqà†i_âÓÞZ&Ú!&|¿‡h×Ó`Hb@&´?qE*t{Ú²¢[¥þð Ýœ£éWë «[j4ìbm7‘{L´ûKpŽ˜¤.0Õóû#!_ÒÓ[‹z©½­£a˜ÆÃŒ1„aQ_øÂô“ŸüDù|>ëRåÕW_Õ§>õ)½òÊ+Á¶“O>Y7Þx£ößÿ:GŽ<ÝÝÝúô§?­»ï¾;ëR#LnÜ”k9>Òí%pqêbì+{œè­që„cªèU@I?«$c¼ž5òvÉo’däNîR~ÊaŠ 5üS–ˆ _dŸ/%S]·»ÀD¶ÙË^qµJ=wJ¦\'`—Lmvô±9-šÜ\ ¥Ä»Á„§»ÉÁ˜Êpkš›Ð5Æ:g°š‚IIÂØ›}Ïhûêõ´%IÍãsšyÈD5s:«Ôæ®Ñ}ñ¨¡ˆLdÚ›€±Î“Ö&ØW]¯,—|éáÍ­êòbU`t Óa˜1†0 É™gž©[n¹E­­­Y—2(===ú?ÿçÿèꫯÖ×¾ö5}ë[ßR.—˺¬AÙ´i“Î9ç=ÿüóY—¡Üæ?Q~üé’ÜpðžÚÇî¾nâ³c_å Â8¡§äL4(g¼N•v¬WnÒ¹-o«?6~Qh5z;]“teu!Q´3ŒBW™øD¡ÀLõw¿ð’J½ª|¯\ÀPŸstæœfÍçZÓ\Çžæ&t‹‘ƒ1ÕF”W¬)­˸Ä×ãÜFsÞ®­{=Mݼ7¾?ýÞádLlz[98ù>&aªîS~¶Â3±Î1F}žÑý‹ÚÒÇ|`4# Óa˜1†0 Í1Ç£{ï½WsæÌɺ”A{ë­·4wîܬË´W_}UóçÏ×êÕ«³.0¹ù¹Ê?Grš‚»å†¯ò‰_ñ“Œ‰+{¼ÂcBC¢ûm ¿·Ø›RjH ÀTVêbâá)~=6’ aì1^ßby…§ÓŠ ‘¼#¶o³š˜‹„Y*sßÈ6©N0&ø'Ž‘"ËVGkl[TÚΗ×E§¶ám¦¶™G»¿Ô–“0Õu»›Lh¿‘Ú‹F÷o,hg‘kF;Â0†cÃêÙÿýµ`Á}ôÑY—2æ=òÈ#:ï¼óÔÞÞžu)€QÂqg)?áÏä8­•ð‹Ý F ˜h0Fá[Û&_-$ûê'²žŒ©³©®ØÏÑÀKe5ú;Eü* ð²±/J ÀXÏ&tuPI¥Þä—þ8È7ØUޤy3›ôΩ¹òºÕ Æî3`Lh[mSޱ6+ñû=$„e!|ŸߞеüÔ8übï7Ñ M´{Le½:~S¯¯7ÔOC€10Lc„aÆÂ0€F&Ož¬[o½UùÈG².e̺îºëtá…ªP(d] `”qœIÊÿS9¹YÕ Ás(¸’Ð)ƾj(ÈÄ$…c‚ÓÔY²+¿·Ä/ò ï¶w˜ðÕD¡«€Êÿák[ÝL¨3Œ$¿O¥¾»ä{ëvá½v×»¦äuü̼U§µŽÞFƒ1 ‡gl« Šn¯m®¬Ç2‰3ÜFÓÞ”¹m´jù)<§Ow“Ã/ååx¦zƤ.1Õç7»<=¶µ(KÆ Â0†cÃ"ŸÏ몫®ÒßüÍßd]ʘó­o}Kÿöoÿ–u€ÑÌiV¾ål¹ùÊêv}‰c*ÿ¤t)\B¿ÀljlH ÆÄÇD4ü¹Á$I¾Ô6'…_ìcR0Õ1Õ „ü•ú~'ã·5*°4ÑÕ÷iR®2· u‚@0&©kL°+% c:€én|€i4áM˜îÖ¦ºiÝ`ªË‘ð‹µb`¢]`ìPÍ:<=ßVª_#FÂ0†cÃãßø†¾ýíog]ƘP,õ…/|A×\sMÖ¥ÆW¹æÓ”kzWy5!c?a—ÔLtÙÈ$ïïÚ…ß[êýþ`]¤äàKhH´ûKy¹^¦:Þ÷6«Ô§dzÿCnV‹«ÌÎk|Þ‘ÝÝ´6µMÆ$n«çXËñ×Këzº+S])iº›Þ5|ÿ“>õ5&iÚS ÆÔ1¾‘žÜ^ÒëÞ®½Œh„a# 3Ɔ Ö_þå_êW¿ú•š››³.eÔêèèÐ'?ùI=ôÐCY—cÜüqÊ5Ÿ(ûâ ÆÁ)ˆI\®J Á¤ßIwW„Â.ÁÆÈB,ø_®Ýפ<ÛãŒüÒ›ò %q‡\I&å1»ISšÃsÙè½kΚŽ m·×ã“Ú¡šçÚC0Ñà‹µ ¿T6Ô¦»&a[¼ƒLÁ7ztkIë{ý!{YÃ4FfŒ! اžzªî¸ãM›6-ëRFµk×jþüùzùå—³.0F¹¹#”kþ°¤\åª:Á˜”mñ€LõÈbʆH ¿X+Ñm‘+„bá{9òîcä—^”W|,^`Dhq¥ÓöiÒ¾ã\IÑ鬓<ÕMÇÔžœÄPŒõfŸs€Lâ|6²)‚ Y¢cMd\{W Ñt{F¿ßRR[ù.ÀXF¦1Â0c aÀ®:âˆ#´páBtÐAY—2j,]ºTgu–6nܘu)€1Îq÷S¾é,ÉW»‚§–ˆ©…]bûÒ—†!˜„ßXú³KâOi ™È]t#·¿Uúr4S~öåŸï-`±€¬äé¤y<±ˆ©¥WÂSÜ:á˜Êxë)!ã¤OwQ8übÂÛ*+ñõÚ–ø4×DŸ†»È©­hôð–’º=®ùëÃ4FfŒ! سgÏÖÝwß­ãŽ;.ëRF¼ èüóÏWWWWÖ¥öŽ3M¹¦sä8S**ÿDžC!'t‚äeû\)íAƒ|O°/º-:(zÒÂ/örQ^ñAùþÊAÖ ÈÒ{¦ätô”\x*ë8uîù ÇÿTד[Â$Ýb—˜ÄÅІúÁ—ʈ¤F¨•9n4³¡ÏhÑö’ŠþnÖ€Q0Lc„aÆÂ0€Ý5aÂÝpà :÷Üs³.eĺòÊ+õ¥/}Ižçe] `¯3A¹üYrÝÙåUǾ¸'²l]ᓱϑ¶>”’~“0Ñ+ˆLd³ mOÂô¨T¼WÆlâ¢ÃáÐVW'LË•ƒ,Ñ{?H Ã1JØìIl~š2ÿ­n®sYIÚY÷¾&mú„]ìíÑŽ0+º}=½Ã«WÆÂ0†cÆ‚뺺üòËõå/9ëRFcŒ.¾øb}ï{ß˺À^-¯\î 9î\IÖE?Ië)= “´?Á`B2õ~{°¯ø ·¯ª,Ô]®]Hdüòý{dÌÎ×qæŒstÊŒ¼šYS]'ej޳¤ßë!=(³»’:¡ÆŸÿ#’ï÷`‚½¡ið²O/wÒ`oC¦1Â0c aÀPúÊW¾¢üàr]7ëR2×××§Ï}îsºå–[².IŽ\÷$¹îŸTW«ÿDÂ1µíÉ™èØð1Cq‘Pøgˆèmp­…Äà‹½nºÅHÆß Ï_(©÷‹dnZ“£ÍÈiB¾27 þiޱ7œö¦Hšäòº„û>„:¾DÇÔ ¿”—|#=µÃÓª^®ï؆iŒ0ÌC0ÔþìÏþL×_½ÆŸu)™Ù¾}»Î=÷\-^¼8ëRqwËuç©vUõ»ˆ ´$„bB‹IÛ¢ú»KÂoI¡˜ºÛ’Ã/¡ ‰Ì yþÃ’¼Ö &ä¤NÏiZsuZëpšÖ%&º/´Úî$ï ]J ÁDwÛÁ—Êz4ü"Õ¦¼ýžôøO[ \Û°·" Óa˜1†0 `O8þøãu×]wiŸ}öɺ”a·bÅ ÍŸ?_o¼ñFÖ¥ÈqVÎý°¤|ÒNk9ø'²+¥[Lê Ö)¦áOÉ!˜X÷{=åw ß,•ï?Ýè£T“#<-§}[¬ Lhšëħ´±)nÂÛ®\^˜~ VLl[|š¿ØËݞѣmžv–v¡6Œ„a# 3Ɔì)sçÎÕÂ… uøá‡g]ʰyòÉ'uî¹çjÛ¶mY—@]Ž3[9÷c’ØÙÕ‰ü~í“2l`W …wHþÂă3þ½Â—ï?.ß¼:Àñ€ÑÊ‘tÜW¯b¢]P£sW'½!jl%uSª´)nâ¾`ê›|©¬®o/=¾ÃWŸ?ˆ¢0&†iŒ0ÌC°'MŸ>]wÜq‡N9唬KÙãn½õV}ö³ŸU___Ö¥0 Ž&ËÍ%GS‡àd{à÷•!ù=¢(Ï@Ƭ‚sF‹£&::ºÕµ½Ä;ž*áÞ)7yH¹'ÄÀÄÂ/õo ‘| ެ¬¯ï÷õT‡‘Çå|a˜ 3Ɔìi---ºúê«õéO:ëRö˜ïÿûúêW¿*þw`ôiQÎý˜çmY²tËóÈ:¸ÀÞèíã7É‘ëý_Êœp®%)$Þ>´Ò:¢ÆB1Á?ÕåZߘ½FË:Mrçì•Ã4FfŒ! Žãè’K.Ñ׿þõ¬KRžçéË_þ²~úÓŸf] »!§œ{šçY2dŒÙ.Ï_ ©+ëRšÕäèÄ)Žš…C0•V/¡«úÍ_ÒÃ1öŽäkëÒ.¹³/µm&ÞM¦²ÉHúC—¯7zë €½a˜ÆÃŒ1„aÃé /ÔÏ~ö3åóù¬KÙmÝÝÝ:ÿüóuï½÷f] CÂuOë›u»Í˜uòüû%².0LÊI'Ov41'Ù‰'øÇZ­8uÃ1»*èïb¢Ûj+áLyÍ3ÒsFë™î a˜ÆÃŒ1„aÃí£ý¨n¹åMš4)ëRvÙÆuöÙgkÉ’%Y—Àr£äºäf]Ê.ñÍkòýE’ü¬KŒ -®tâ$GÓòi!§A0&.íJúW×Õ ÀÄZÄ[ú}éÉN£¥z'ÀÞŒ0Lc„aÆÂ0€,¼ûÝïÖ½÷Þ«ýöÛ/ëRí•W^ÑüùóµfÍš¬K`pœ•sÏÔ”u)ƒâûÏÊ7/d]`„Ê9Òq¥·5KA×—¤LÃðË`®14Ö¿‰»âû"Á˜Î’ôT—ÔÍ}Pa˜ÆÃŒ1„aYÙo¿ýtï½÷êÝï~wÖ¥ ØÃ?¬óÎ;OY—Àå83•sçKš˜u)àËó–1od]`„s$=A:¸%²=vÙ`<,3dLrD&é²¼í%é™.©À%{h€0Lc„aÆÂ0€,Mš4I·Ür‹>úÑf]JC×^{­þîïþNÅb1ëR&­Ê¹óå83².¤Ž~yþ}2fCÖ…F‘CÆIï?ø¬K<4Sßî\j·® -é–h€ Ó˜›u`ìèììÔÙgŸ­_þò—Y—R׿ÿû¿ë¯ÿú¯ Âö2]òüßɘuY’ȨSžwAÀ ­ì“žë’¼A†UŒÜcW½Þ'=ORt†cè )¾þõ¯ë’K.‘3Ø[éìAÅbQ^x¡~ýë_g] r座ÊuŽÈº€1[äù $õf] `›–—Nh•ZFÈÏÔFÒ‹=Òªþ¬+ÀhCg˜ÆÃŒ1„a#ɧ?ýi]}õÕjiiɺuttè¼óÎÓÃ?œu)Œ®ó^¹îû³.CƬ’ç?(©”u)€1`¢+Ík•ZsÙÖQ2ÒsÝÒæb¶u`t" Óa˜1†0 `¤9å”StÇwhúôé™Õ°zõjuÖYzå•W2«€‘ÈqUÎ=M’›Éëûæ%ùþb•ï• ÀÐhv¤ã[¥ùl^¿Ï—žê’:¼l^£a˜ÆÃŒ1„a#Ñᇮ èàƒö×~á…töÙgkÓ¦MÃþÚŒŽ3G9÷LIÃÙÙÕÈ÷Ÿ’o^Æ×ìM\Iï™(íß<¼¯»Ó+azýá}]Œ-„aËæVo`¯²|ùrÍ›7OÏ<ó̰¾î=÷Ü£SO=• u³Ažw‡Œ:‡éKòüû Âö(_ÒóÝÒë}Ã÷š[ŠÒca€á@ ‹-[¶èCúî¸ãŽay½Ÿþô§úÓ?ýSuwwËë0šíçÝ&c¶ìáWê•çß%cÞÚï@Ù«½Ò²Éìá×YÝ_îSÚÓ/@a0Œz{{õÉO~R?úÑöØkctÑEéïÿþïåyÞ{Æž^yþ2fÕ9»Q»<ïv³yœ€4«ú¥§÷`På½ÒÒaܨqŒá‚%Žã¬’ôö¬ë ‘/ù˺üòËåºC—ÍíëëÓg?ûYÝzë­CvNö>Ž\÷$¹ÎÑCvFc6ÊóJê²s0XSrÒ¼ViÜýLíKZÚ-­- Íù€*cŒ“u #a˜1†0 `49÷Üsuà 7h„ »}®mÛ¶éãÿ¸žzê©!¨ ¸ÎŸÈuO”´{¿µ³Bžÿ°$:¸²7Þ-b&çvïúh]vÙeú¾ µk×f]°8š&£Y—ÀÊ9R³#õrßd„0Lc„aÆÂ0Œ^„as³.(Â05Ã`Ô €Qƒ0 F Â0àÿ³w/½QÝi‡_—/Ø ˆ- á_08$Q‰€¢ …(õ¦¥ÙÌÖÒ,æÌj6³Íìø-B"%³É*Šf“6‡0@¸$CÂe¸È‚m\³@¨™¤Œ«Õ‡œóv?Ï:¯þªãÔy«~§ 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 iˆaHC @bÒÆ€4Ä0¤!† 1 i´5²g`ãããoEÄ?EDïrÿí•+WŽ<~üxÕ‹Ÿª¹{÷îÅÄÄD,..–5Âs­Y³&êõztww—=ʲîß¿'OžŒ………²GijõêÕ±cÇŽX¹reÙ£,kvv6&''ãÑ£GeÒÔªU«bçαjUi—nË>|§NŠ”=JS===Q¯×㥗^*{”e=zô(¦¦¦bff¦ìQšZ±bEÔëõX»vmÙ£,knn.¦§§ãÎ;eÒTggg¼öÚkÑßß_ö(ËšŸŸ³gÏÆ­[·Ê¥©ŽŽŽØ¾}{ ”=ʲâܹsqýúõ²GiªV«Å¶mÛbÆ ÑÖÖVö8Ïõøñã¸xñbüøãeÒT[[[ŒŒŒÄæÍ›+–‹‹‹qéÒ¥¸råJÙ£,ihh(+–F#®^½/^,{”%mÞ¼9FFF¢V«ö30F\»v-Î;Wö(Kzå•Wbtt4ÚÛÛËå¹Fܼy3Μ9Sö(KZ·n]ŒEGGGÙ£>Þÿ-ݼúê«/v ,..ÆÄÄDÙc4uäÈ‘_nxªV«Å7ß|SöM>|8Ö¬YSö-[¹re|õÕWeÑÔûï¿Ÿâ ØS½½½ñå—_–=FSŒÍ›7—=FËúúúâóÏ?/{Œ¦Þ~ûíØºukÙc´lÆ qâĉJ.Mßzë­ØµkWÙc´lÓ¦MqüøñJ.MwíÚ»wï.{Œ–mÙ²%Ž?^ɥ騨Xìß¿¿ì1Z688Ÿ|òIÌÎΖ=Êo Å{ï½Wö-ŽÏ>û¬’áÆãСCeѲááᘙ™‰7n”=Êoô÷÷ÇáÇË£e###1;;[Éè­··7>ú裲ÇhÙÈÈH<|ø°’_¾éêꊣGV~YúÔÈÈH,,,Tò #µZ-Ž9Rù/Š<Ë®¨8ííí•Ý}øá‡)>D~Ê®¨8vEű+*ÎúõëãĉQÅÂíÞ½;vîÜYö-³+*Ž]Qqª¼+N·+:qâD%¿fWTœþþþøàƒÊ£evEÅyº+úþûïËå7º»»ãèÑ£eÑ2»¢bUyWôñÇÛ$Û®¨»»;¾þúë²ÇhêСC±nݺ²Çh™]QqúûûíŠ 200Ÿ~úi%wE{÷îz½^ö-Û¸qc?~<?~\ö(¿aWTœíÛ·Û¤€]Ñ?4J«þ8>>þƱcÇþûwþw[ñQDü:z7ÏÐ߯¾ˆ¨öãY~¥ª7Ø•:˯UuÞZ­–êæ?¢ºgéβª×xD¤x:˳¼.‹ÓÑÑQÉ&"ßYvuuUö,³]ãU>Ël¯ËÎÎÎÊže†§Y=«V«Uö‹èÙ^—mmm•}’f¶³Œ¨îû¢ŒgYÕ×eOOOÙ#üŪüº¬êßò¥Tõ>Ò®¨8µZ-ÅÓgŸUÕ¿—ùþÿSÕk<"ß}dU¯ñˆ|¯ËöööJ~¹!"ß}d•÷Ù®ñ*Ÿe¶k¼Ê»¢lgé=Qq슊UÕ÷Eβ8===Ñh4Rí8ª|g:LjêÞGÚÇ®¨XÙöëU½Æ#òÝGVõÈ÷¾¨£££²»¢lgéž¼8vEÅñº,T÷_|ñ¯mmmÉ“Sþ¥Ñhüï ›èÏšýÜzW[UÿÀógãããÿÿË^wîÜy­Ñh”v7qýúõ8yòd<|ø°¬žkpp0víÚe²¬[·nÅÉ“'ãþýûeÒÔ¦M›âÍ7ßLqózçΘ˜˜ˆ»wï–=JSëÖ­‹½{÷¦¸ázú“Å·oß.{”¦^~ù娷o_Š7÷ïßÉÉÉJ>!,âÉ“:ÞyçK•Ä©S§â§Ÿ~*{”¦V®\Hñ“ÅOf÷‡~({”¦ºººâàÁƒ)ž 477ÓÓÓqéÒ¥²Giª££#8kÖ¬©ü$óóóñÝwßÅùóçË¥©Z­ï¾ûnôõõUþ,âÂ… ñí·ß–=Ê’öíÛ—âgvãâÅ‹1==]Ù…Êž={bÓ¦M•þð&âÉY^¹r%¦¦¦*ùô ˆˆ7Þx#†††*–F#®^½SSS1??_ö8MÕëõ­ô‡7OÎòÚµk199YÉ'1EDlݺ5êõz¥?T|êçŸމ‰ »¢ØçöíÛ111QÉ' G7&†žœ†Ý.€§§Øí€ºÖÚÖ–$Y[]ݹV©Tv>—Ëåt´·gqq1½½½K’”JÎg«ÕjúÀÏ& ³Ÿè.?CwwWÞyçÝü×ýgfgg“$•ÊöÎýr¹”¶ö¶´¶µ¦±±1)’îîîûkk«úÀÏVÚí¨‹‹K)Š"çÏ_ع¶½ý×0L[[{sâÄH677ÓÛÛ›þþgv­=Õz€½Éd˜}ÅQkÀ¿nmm-333éïïOGGg>|˜••ÕT«Õ”J¥ô÷÷gii)mmm©Õj9x°?CCCI’J¥’ÅÅ¥üm¿¢T*¥©©)ëëë»´# ™ À6>>ž$9sæL’dss3cccI’îîîtuu¥¹¹9ijjÊ3Ï<š 355•J¥²ó;år9¿ùÍoÒÒÒòt7Ô=“aösa€ŸëÎÄD~õ«_åĉI­–ËŸ}–ë×®edd$EQ¤¿¿?---Y__Ïv¾w÷Î^EcccÞ~ûíÔjµ,.,èa?‰É0ühÛÛÛÙØØH’œÉ¿ÿû¿§R©äÎÄD’¤««+ innΡC‡’$ÓÓÓ¹uëV’¤¥¥%ïðAö÷çÊÕ«»³  ®™ ³Ÿ8V ølnn¦(Š´´´¤­­-o½ýv>ûìrާT*¥V«¥µµ5¥R)›››ùøã?§–ZÚ;Úóî»ï¥µµ%•J%Ìé_?™É0ühår9Y\\ÌÊÊJFGo¦§§'##'såÊ•$IQihxt&ÛW_}•µµµ´··çƒþ-³³3ùæ›o2??Ÿjµº›[ê”É0ûŠ£Õ€Ÿ¦¯¯/§NÊ'Ÿ|’ííí466¥\.§Z­f~~>wîÜÍúúFΟ?ŸÿøÿÈúúzN:•¦¦¦looç›o¾Ikk[Þ~û|ñŹuëVÞyçÌÍÍEïøWÃðw-,,¤¯¯/GÍØØØÎõ™™™´µµecc#£££9wî\Ο?Ÿ?þñ­+•Jy÷ÝwsùòåLOO'Iz{{3::úÔ÷ì Â0ûˆ³Õ€ŸªZ©dyi)ƒƒƒÿ›ËæÆFVWVrxh(7oÞÌÜÜ\ÒÜÔ”ÍÍÍu'ŽÏÌôtf¦§S*Šôõõ¥©©)ææë]”ËåT*•§¸3 ^ Ãì'Ò0À¿`k{;I‘ßös{b"ï½÷^Ì?H{{{Š¢ÈÐᡌ'IJ¥rΜ=›/¾ø"#'Ofll4Ï>¥¥¥¬o¬ïô.FFF’½¹+ûêKi· àÿß¶··ÓÒÒœ$ÙØØH¥RICCCªÕJsôèpÚÚÚ’$çÏ_HssK’䥗^LKKKzzz2:z3ÌôôT’¤³³3ï½÷~Î{!·nïÊÞ€úc2̾b4 ðÓ­¬¬¤±±)I‘Z-Y^^NWWW’"W¯^Íû￟µµµ´¶¶¦¹¹9ƒƒƒ¹{÷nNœÉòòr¦¦¦’9þBjµZÆÆÆsúôó9wî\J¥Rþò—¿¤R©F/ø1L† IÒÓÓóƒ×gggS*•ÒÔÔ”äQ¦¯¯/É£I1ããã­_]]Í¡C‡REÊårš››322’¡¡¡ÌÎÎæµ×^Û Â¬¯¯çæÍ›Ot_ÀÞb2Ì>â,5àyã7òåÕ«™˜˜xìúüƒ©V«éèèÈüƒ™ŸŸÏÑ£GÓÒÒ’¦ÆÆÜ»w/§OŸÞY¿º²’£GŽ$y¤Y^ZÊû|$éîîÎÜÜ\*•Jz{{síë¯S­Tô1€Íd’$ããã9{î\ÚÚÛ»^©TòàÁƒœ8~r$ÝÝݹqãF*ÕŠ𓘠@’d}}= iiiÉ{⦅gž9´sozz:“““yíµ×SE&&&ÒÙÙ™ÖÖÖlmm§(%ZVVV20ðè{ihhÈÄĬ­­&Iº»»S*=jQ>å{É0ûŠcÕ€§±±1o¿ýv>ùä“ܾ};IòÅ_ä·¿ým^ý\¾|9§OŸÎéÓ§sûöí¬­­¥¥¥%«««…hªÕj8Z-IŠ,..å7¿Îôôt–—Fÿø©„aö­$àŸùnjK­VKQyñÅsïîÝT*•¬®¬äøCÞ~ûí¼ýÖ[¹}ûvN:•#Gޤ½½=I²¶ºšÃ§Níü^CCCFoÞL­ZM‘ääÈHZ[[óÙgŸé]ÿ’ÒnÀÓÕÜÜœ‘‘‘Å÷ã(ß]«V«™››KSSSž}öÙû óóùǦµ­-ÇŽK’tuu¥\.ï¬ùÛÏ÷îÞÍÜÜ\300ó.dvf&“÷ï?©í{œÉ0û‰ãÕ€$›yîôétuwå³Ï>{ì^QyøðaÚÛÛ3==•¶¶¶<æLîܽ“•••$ÉâÒbþó?ÿß¼ôÒKzìûµ¿ù|íڵܽ{7¿yóÍLMMæ…Îgbâv._¾œZjzÀ¿Äd€}èÖ­ñŒŒœÌ™3g¾7!fii) ó©Vkùúë¯233“—_~eçþààPóÑGå£>ÊÆÆz’dss3MMMI’™™é,--å•W^ÉÜÜ\^xá|îÝ»›O>ù$•Jåk*Šâ§Õü-a€}èÖ­[I’3gÎæ·¿ý_9x°?IR©TÒÒÒ’ÑѱúÁûKfÑ:þÖÂÂBúûû3;;›¶¶¶œ>}:›››ijjJ¹\Ne{{§¿ðÕ—_æÈ‘#9}út¾úòË<˜›Ëàà`*ÛÛihxÔrZZ\LkkkªÕjZZZRE._¾œñ±±$ßïU477çÕW_Í3‡åÆ™¼_?ø§„aö±¢(R.•23=™¢ÈñãÇ“$Cƒƒ™˜˜xlíØèhNž<™Ñ›7344”…ùùÿ›I0[[[IM„™ÍåO?ÍêêêÎýžžžtvv¦­½=ímm940–––ܾ};W¾øâÉoØ„aöG©?à@oo&§&399™ÎÎŽôõÌñÇ3qç¯a˜Æ¦Æ¬ol¤V«åÌÙ³™žžÎ‘#Gv¦Â,//§åÛ©0ŸþyÆÇMƒihlÈððpNœIWW×>ÿÆëúÀ& °ÏU«Õ´··§R©äË/¿ÌÉ“Ïfhh(Ï?&_ýU’¤££#ÃÃGSÉððpnÞü&MM©Õj)Š"W®\É277—ññ±´µµåÔ©ç2<<œ†††T«ÕÌÍÍfii9ÝÝÝéììLccc–——³´´´Ëo¨'Â0ûŠ#Õ`¿jllÌ… òé§Ÿ¦V«=vojj*ÛÛ•lllfmm=/^Ì{ï½—3gΤ\.çêÕ«ÙÜÜJ­–”ËÚK/½ôr®^½šwÞy'£££™œœÌàà`®_¿žãÇOäüùóihhÈ;w2>>ž¤T*e`` Õj5½½½I’»wïFø)„aöm$Ø¿¶·¶244”驩ܹs'É㽃µµµlomíüÿÉÅ‹yÿƒròäÉ,/-}˜ÙÞ™ÓÛÛ›Áܽs'c££)’ܸq#Οϡ$ÉÖÖV²¹±‘j¥’r©”æææ;v,IR©TrûÖ-= à')ív<«««9yòû×WV2qûvŠâ¯±”‡æóÏ?O¹\ÎÐÐP8û÷î=¶æÙS§299™ååå´¶µå½÷ÞÛ Â$¦Ñܸq#KKKI…cÌÍe}}=IrõêÕ¬®®>©í{”É0û‰cÕ`_[]]ÍÀÀ@ºº»³´´˜Jµš$™œšÊÆæÆ£EÓO¸sg"9yòd›šrçÎŒåèÑáT«Õ466æÂ‹/fîÁ\ÒÔÔ´óÝ……ù\¹r%³s³;¿Ù××——_~%™™™ÉèèÍïõ/Š¢H­V{’¯¨s&ÃìßMaJ’¬­=úaaþ×wvvæÎ‰Ü¾}+Ì™3g²¾¾‘«W¯äáÇIMéííÍ¡C311‘ñññ,,,ì\;sæl^xá|Z[[³¼¼œK—.=ö¬¢(òüógÒÖÖöËmØ“„aö‰­­­$Éàà£àÊêêZ’GA”¿õÝÿKKKéííÍÌÌl&&n§¹¹9LQ”rïÞÝ$I¥RÉôôt<˜$©Õj©V«ÙÜÜL¥RÙùÍññ±E277—?ü}Ö××vîuvvæ½÷ÞKggGVVVžÐ¢a· àé)RüóEÀžÕØð¨5ÔÝÝ“¶Ö¶¬};)¦³³+óì¬+Rdxx8wïÞÍ­ñ[9räH666399™þþþÌ?xácÇ’$÷ïßOoo_ÊårjµZ–——søðálmnfòþdŠ¢È±ãÇóüéÓ¹s÷n®^¹’Z­¶Ó·812’sçÎe}}=W¯|¬ŸüSÂ0ûDCcãÎçãÇ端¾ÊÚÚZúz{ÃEš››óÎ»ïæ“‹sïÞ½œ9{6«««Y^^ÎÈÉ“;‘•ssÚù^WWWfgfòàÁƒ|˜jµúô6ì)Â0ûŠ#Õ`¿ú.IJººšJ¥’¥¥¥tttäÕW_Í¥K—òþûïgxøXnݺ•$)•JinnICCc._¾œ—_~9µZ- m/MOO§¡¡a'h³´´”ÅÅ¥<ÊÓ©Õ’µµõ¬­­'™û?*z¼oÑÔÔ”¶¶¶,,,<¡7ìÂ0ûˆ( ì_Û[[I’‰‰‰èéÉj’Û·nå…óçsôèÑŒŽŽæÌ™3¹ï^¶¶¶R*Š=z4CƒƒÙØÜÌèèhº»º²¾±‘Ç'If¦§sî…vž188˜ÆÆÆŒŽfrrò±)3OQ9vüxžþù\ûúë, ÃÿDi· àÉ+•ËI’Þ2~ëVÌÍett4w&&òì³Ïfvf&µZ-¯¿ñFÊårªÕjôô¤³«+ÌÐÐPÊ H’Ôjµ,//§½½}çËËËÍÔÔÔ Â´´´äÍ7ßÌ… ÒÔÔ”õõõ'³y`O1f?1ö­††Ga˜C¹üÙå,//¥(ùü/Ÿ§«»+/¾ôb>ýôR^{íõ¼þÆëùòË/³°¸˜½½ÙØØHGGGjµZJ¥Gg­ÍÏϧ©¹)IR­V³¶¶–J¥’ÖÖ–465fccãÖ300—^z9EQdjj*ÝÝÝ™šžÒÏþ)“aö¶¶¶$ICCC†‡‡³µµ•Z­–J¥’?¾˜††Æ<ûì³ùóŸÿ”zsúôé”Ë¥466¦©©)³³³immMQü0ËËË9Øw0½½½iniIËÿñ÷Ý4™$ÙÚÚÊØèh®¬d}}=÷îÞÍ_|¡ühÂ0{\___J¥RVVVÒÐÐÅÅÅlnläW¯¾š?ýéO™›}4ÕåúµkéééÉÙsçrñâÅ|üñÇyíµ×ÒÒÒ’õõõ´´´$IîON¦V«¥T*e`p0o¾ùf›š{æÖÖV¶¶¶²´´”­­­llldjr2“““©V«©ÕjiimÍÕ«WS«Õžú;êW¡¹° :4äþn×<]gÏËÉ“'S©T255•j¥’›7oæõ7ÞHQùýï~—$IcccÞ~ç´¶¶æøCZ[[óê¯R©´ó{ßhÞ|ë­8p «««¹5>žù……¬~;ñåïõ Š¢HoooæççS­VŸÊþ€_܉ɩ©ñÝz¸É0ûI±Û»¡§§;IrÿþýtuuåÆëÙÚÞÊÅ‹çÍ7ßÊ+¿úUþô§R«Õ²µ½•?þsÞyçݼúë_çßK—>ɯ~õjJ¥R6773;;“çž{.ÈÒÒR¦¦&“¢H¥RÉÆæFj©}¯/ÑÐÐgŸ=•ááá\¿~-sæ’";Sg~¬Ò?_@=+—Ë©Õj™™™ÎÜÜ\Š¢ÈÚÚZòÙg—sðàÁ<÷Üs;ëWVVòÉ'ÓÖÖ– .drr2ŸþY’dròÑúãÇO$IÚÚÚÒßߟjµšÍÍïM{ihhȉ'òoÿöÛœÏûìò®¼ ~ Ãì#EŠÝ.ØÕj5¥R)ûfjj*WVR*J©ÕjI’ׯ§­­-¿þõ¯óÉÅ‹éèèÈÊÊJ–—R­Vó ç³0¿Éû÷37;—‘“'“$9qbä>wa~>£cc™šœL­VK{[{Ž?ž–––\¿~=µjMøI„aö¸é©©ôôôdss3ëëë©U«ß[ó—Ï?OScc^ýõ¯síÚµ ¦»»;ó¤ïàÁ¼üÊ+ùð÷¿O’ôôô$yvyøðaró›oR­VS.—S.—ÿú¬o7É£É1ÃÇŽåСC¹uëV®_»öt^°§Ãì'U€}irj2Ï>ŽÎÎlMÜþÁžA-µ\úôRÞxãœ>}:›››Y^^NWWW’¤¹¹iç{ÝÝÝI’íííllldzz:ëë©T*ßÿáo¿344” ^LCCCÆÆFsõêU½ à_RÚíxrìÏúúzVWWÓÓÓý×V«Õ|üñŬ¬¬¤¥¥%H¹\N’¬®®%Iš››ÓÖÖ–Z­š††Gç®ÍÌLÿp&IQ”22r2.¼˜¤–K—>y„ø™ °‡9s&ss³¹ÿ~FFFÒÚÚšµµµÇÖtvv¦R©duu5ÛÛ[ùä“‹yçwwÂ.I²¼¼œ$Jò(ä²½½•jµšcÇŽåîÝ{ÙØXßYßÕՕÇäðáÃiiiÉââB.]º”ÕÕÕ$I{{{Š¢ÈÇŸô+öa˜}¤H±Û%OQcccººº²¼¼œ/¯^Íàà`Ž ˵k×[÷pùaž?s&³33)•ËY^ZÊÕ+WòâK/í¬™ð EŠ9rdçÚÂÂBfggS«V3<<œ¦¦¦455¥««+IM›Ë×_}•jµš†rCN>ûl†‡‡ó»ÿú/ý à'†Ø£ö÷§(…M¶¶¶òé¥K¹ð⋹~ýzjµÚcko\¿ž7ßz+÷ïÝË©S§rk|<ËËË;¡–¹¹¹´µµ¥§§gç;ýýýéïïìw666²º²’;™››Ëääd¶··“$‡röìÙ455åâÇï\ø)„aö¨g¾ ª´µµ%IóñŸÿœ–––¬­­=¶¶R©ä³Ë—óö;ïäáÇyñ¥—vÖ¬¬¬dmm-ÃÃítou5kkkY__O¥Ryìw3tøpŽ9’þþþ¬¬¬ä¿ÿøÇ<|øðInØÃ„aö“b· ž¦¾ƒ“$===)•K©V«ÙØÜxtóÛ¾Accc’¤©©)Ë—óõ×_åìÙsI’ÖÖÖ$ÉÌÌtR$­ß†j>|˜O?½”åååï?´HÚÛÛsèС<óÌ¡8p ¥R)•Jåÿcï>»ÛºÒ4aߘE*˜Ê²$[Ñårê®îžžžùá3³ÖÛÓÕå*gå,QsAx?P‚E‰ÓU%Šæu­e 8gŸ½ŸðöºÏ“±±±\¿~-ëëëö-€ÿ2a€ß ¢(Úa–R©”ÁÁÁÌÎξ1n}}=‡Α#G21ñ<+++™ššÊþAš$yþüy’dff:ß|³gÏž¥Õj¥R©¤¿¿?½½½éééM__oÒÛÛ·eGåÆë›!€¿’0 ÀoÐË ÌKûöíÛ6 “$OŸ>MµZÍ¥K—255•®®®ö¹f³™™™™$ÉäädJ¥R<”#GŽäСC)•J[æZ__ÏôôT††ö¥\.çæÍ›¹sçößøî€½Lf)Rìt À[ÒÝÕ½åý¡Cïåþ½û?9þÞÝ{)¥|ðá‡ÙØØhŸžžN³ÑLoo_>ýôÓtww§££#ÉfPf~~>³³³™Ÿ›ËÜÜ\666òûO>I©TÊ÷ß}—ÇÛ£þ¦„a~ƒº_é ³²²’áááT«Õ¬®®þä5wîÜI©\ÎéÓ§³ººšjµš©ÉÉ$É|þþþ4ŒåÉ“'™Ÿ›K£Ñh_?44”øÇLGGG¾úê«<Ÿ˜ø±žîî e||üïp·À^Rúå!ì6]]]í×óóóI’ÑÑÑ_¼îÖÍ›¹ï^ª/Â4“SSééíÍèèhZ­VÆÆÆrÿÞ½ÌLOo Â=z4ÿø‡?¤T*åË?ý©„éëëËG¿û]þíü¬¬¬ü-oØ£t†ÙKŠ.x[^ Ãtvvfcc#‡ɽû÷~ñÚ7o¤¯¿?YZZÌùó²±±‘›7o¤Õj¥·¯7ÍV3+++éèèÈùóçsôè±<{ö,×®]ÍÚÚZR$ÇŽÏåË—“$÷ïßËÂâ‚ý à¯& ð´±±Ñ~]­V3;;›¤··7ËËËís==½Y]]M«ÕÜr}­¶šz½ž$)•ŠÌÎΦV[Ëääd{ìÑ£GsîÜù$É×_ññg)Š"Ì™3g24´/Éfgš7nþ]ïØ;„aöZ€½c½¾Ö~=ùüy:::’$‡GçÎÛísµÕ•œ={6÷ïÝËÆÆFŠ¢H«ÕÊã±±T«ÕIf¦g2¿p?«++I’þþþ\¼x)ÃÃÃyöìi®]½šz½ž"ÉþýûsôèÑ &Ižs&'NœÈâÂB¾þê«LLL¤««+ïŸ>“ãÇŽ¥ÚÓ“$Y^^ÎÕ+W2==ý²ˆ·wóÀoš0 ÀoP½^o¿®Õj)—Ë™|þ<£‡§¯¿?K‹‹I’J¥’ååå<Ëþð‡Ü»w/ÿü/ÿ’‡æÁýûI’R©”“§Nåý÷ßÏôÔTþóL«ÕÊðÈH>ýì³8p EQ¤^¯çáÇö,333;rßÀoŸ0Ì^âk°gÔÖjíׇÊýû÷3>1žÑÇ3::šÛK‹)Š"½}}IZ)JEææærîܹT*•tww'EÒÙÙ™Ï?ÿ"ÝÝÝ™M©\Îÿð©T*Y__Ïììlnݺ•ÙÙ™ÌÍÍ¥Õj%IŠRÑ~ ð·$ ð´¾¾žV«•¢(288˜õ¬­­eiiq3 sûV:::’´rüø‰wþ|æçç7/.æé“'9{ölÖ××S®TòôéÓttt$IÆÇÇ3<2’ÎÎÎ çŸþùŸ300°eî¢(2´o_N:•¦\.gll,333oï€=©²Óð;]ð6-,þ†Îá#GòäÉã$Éí;·óßþÛ¿æÔû§299™Fc# óéííÍÔôTΟ?Ÿååå,,ÌçС÷òøCnܸ‘é马¬¬$I–——Ój5ÓÙÙ™µµµÜ¼yÃ~ðw' 𵺺šT*›[BgÏžÍììLVVVR«ÕòàÁƒœ‘ÃGŽäòåËY[[Ëÿý÷Ïäää6+Ù‡ÞŽÒNÀßÏúúz®]»Ö~?44”f³Ù~?öèQ666ÚïæçÓßߟ•••466200 .$I®^¹’õõõ$ÉáÇS­VßÒ]üHg˜½ÄÙ`Ošœ|ž™™é dpp0ÝÕîÔjµ$I+­Ôjµôõõ¥Ñhdeu%ÝÕîÜ¿?Ï'Ÿçø§”Ëå<~<–ɩɤHÎ;Ÿäßÿýÿ³ÿ¼u:Ãì×®]Ë7REŠbk‚emm-I²°°$©××3??—?þ8Õj5«««¹yófŠ¢ÈåË—sâĉܺu3­Vë­ß€Î0{ˆ³ÀÞµ²¼œGËËY\˜Ïg?È÷ß×>WíîN’,,̧Hrçöí¼ÿþûÉââB¾ùú›4|ü»sðСLLŒçùÄ„½`GÃì)¶¤`¯›ËòòJz{û²¼¼œR©”jOO’daa1I‘£GæÈÑ£yüøqnÞ¸‘$ùäÓÏ222’ÕÕÕ\ùáJì;;¥´ÓðvÕëõ,//'IzzzR›Á–™éé$IgWWþøÿ‘kW¯¦ÑhäòåËI’tuuåü… ©Tþøã”Ë•¬­­å/ùs»SL’LOOçêÕ+ùàƒ…a€·NfÑx]wwW’Í}„r©”$I¹\Ù ½\ù!kkkoì3ÌLOç/þÒþðÖ Ãì)¶£€­ª/:ô’ ¦(Š4›Íܾ};>|1jû=†ÆOžø{†ØÃ*I’F£‘ÁÁÁ$É·ß|“ééé, à' Ãì%̼¦TÚÜ@˜žžÊ™3g³¼¼œé™iû À;«´Ó°“Š´Z­,//ghh(OŸ>Ùé‚~–Î0{ˆ¸¯«­®¦Z­¦··7•Jž=}jOx§é °‡--/%Iö ejz*õz}‡+øy:Ãì)žãlµ´¸†Ú7œÙÙ¹ØOÞu:Ã]]]9yòdvº”]©££#===í÷•J%'OžÌÉ“'3::ú7[gqi)EQdhh(µZío6/Àß‹Î0{‰¹¼“úúú288”J¥œùùùÌÍÍm;n`` ûöíK­¶–™™é¬¯¯¿1¦»»;##ûSÉôôtVWW·kß¾}Ìòòr&''·œ»páB:;»òí·ßl{í矑¹¹Ùܾ}ûgï«»Ú3gÏæÖ­›YX\øÙ±kgΜMooo:;;ÒÑÑ‘V+Y_¯gqq)Ïž=ÍÂÂÛ­çÿUµZÍþðO)•J¹víjž>}šŽÎŽœ9{6I2??ŸgãÏþ&k­¬,§Õj¥Z­¦V[µŸ¼ó„aö{Wïž?<—ŽŽŽÌÌΤ^¯ç䉓©®çúµk[Æzÿýôöôf|b<}}}9yòÓ|ÿÝ·[:y çä©÷óäÉãTÊå|tù£Ü½{'ÓÓÓí1##ûsâäÉÌÌLgue5GŽÉáÇóýwßµÇôõö¥»ZýÉß•S¯×ñwçâ'^¿ HOOïkG{34´/GÍ­[7óxlì-WõëU«Õ”J¥öë×?¿"»Ï´Ùhduu5===©­®ÚOÞyÂ0°ƒ>|°%Ð2þìY>ÿâ‹T«ÕvW—‘ýû3Ð?ï¾û6I259™Z­–>ø0ß¿b©T*9ûÁ‡ùú«¿´;ÆÌÌÌä“O?Ëÿãÿ¦Ùl¦(Š\¸x1þòOí5'&Æsù£ße``àï–ò_õýwߦ(Š ŒäÈ‘£)Š"gΜÍÓ'OÒl6wº¼mÍÎÌäÚÕ«éèèÈÓ§Oþîë--.¦««kÛnCïa˜=ųÜÞ5µÚZ^ÿývzj:ÊÇ“$'NœÌÝ;w¶Œ›ŸÈ¹sçÓÕÕµµµ9r4ããY_ßh[]­eyy9½—ñgÏR­ö¤V«½±æÌôtöï?……Åתûu½_:;;S.—³ººšR©”}ûöeffæ•ë7û˜tvv¦¿¿?«««YYYÙvÆ—cjµZVVVÒjµÚçÊårº»»³ººšf³™îîîtW«™Ÿ›Û2îõÚ§§gÒl6óüùd††ö¥··7år9]]›sU«Õtww§Õjenn.ÝÕjF†‡399™z½ž$)•JéëëKêõzæççÛç’¤¿¿?•ÊöÛ.F# ?®“dnv6•J%û†‡S©T2;;›Ú‹ðS’ttt¼ø®jéèìÊÆFc›ïcó}_:^¬½¾¾ž¥¥¥E‘îîî4›Í”J¥´Z­¬¯¯§Ñh¼Q_¹\Nmm-µZ-]]Ý)ŠÍy_ iE‘$ÉÒÒRFJ¥R:»º’V+ÙØØxcÞþþþ”Ë嬯¯§V«mùÌ*ÙØ&|ÓÑÑ‘r¹œEÖjµm¾[`¯†€wL}}½¬(•JéééÉüüü–1­V+«++ÈäädFöïÏÍ7Þ˜kyi)Cƒƒö,«««éîîNWWWÖÖÖÚcö8ÇccÿåzO:•æûï¾Ëï?ù$•J%ÿûý¯öùRQä£>ʃÛÇfggså‡Úáˆ}ÃÃùàƒÒÛÛ›F£‘J¥’ÅÅÅ|÷í·íZGFFrù£òÍ×_çýÓ§388˜$Y[[˽»wóôéÓŸ­³ÚÓ“jµš$Y]]mwÞ9rôhNœ8‘V«•¿üùÏùìóÏSE–––R¯×ÓÛÛ›~÷»ôôô´çjµZ¹qýz{ÍsçÎeàE=¯[Z\ÌŸþô§Œ>œS§N%I®]»–sçÎ¥T*%IšÍf®üðC&''“$CCCùèw¿K’Œ=z”[·nm;w_¾øâ‹E‘F£‘¯¿þº]ßÀÀ@Î_¸+?üR¹œjww<˜åååܹ}»Ýæe`¦V«eph¨ {ôhs¾¾8p ÏŸ?Ͼáátttdjj*Íf3ÇŽËþýûó§ÿüÏ¿ïR)'OžÌÚÚZæÒh4ÒÛ×—sçÏgll,Ï^|fGN©\Îý{÷¶ÜÓÆÆF.]¾œÅÅÅܹ}ûg¿S`o†ÙK4†Ø2>>žIWw÷f‡Žm~ã]Z^JWwWRd³cJmõqKËË9xð@R$­´rûöí\¸x!<Èüü|Nœ8™¥¥¥ÌÌÎlmäòê¿?åÅùf«•J¥’ /fjj2ÏÓJ«}þä©S™ššÊþçS¯×säÈÑœ>}:.^È·ß~›$Y]]ÉØØ£LOOgmm-ƒƒƒùä“OsôØÑܽ{·½N’\¼t)ããÏrõêÕttTráÂÅœ;>sósÛvœ¹üÑåtwWÓ××—$Y\\ÌÕ«W~¬¿Ùܼ¢Èå.·;£¤H*•|úÙgéèèÈÆÆF&&&²ÿþtuuåü… YZ^ÊÂÂÂÏ~VkõúæçÿJ‡“ .¤Õj¥Õj¥(Š”J¥œ;>3³3›Ý[^¯Øæ»(’¢TäâÅ )Š"­V+W®ü……ùöØù…ù4LMOµ/{<–'Næó/¾È—_þ)i¥•ùùùtttäùó‰$yÑ™eóš£ÇŽåÞ½»©×ëY^YNgggûÜâââfšVs³¦¢Èù çóðáÃ,--µ×]\ZÌääó µ¯-JEŽ9’õõõ<~üc«•V¦¦¦²´´hoØ–0 ¼CªÕjªÕjff¦“l†\^íâòª¥¥Á„$•J¥êxÕòòR:;´ß?K©Tä£~—V«•ÅÅ…|ûí·[‚ÿ¯Z­VÊåò‹ÉÕ7Î×jµ\¿~­]߃÷3<<œ‘‘ýéïïÏââbjµÚ–Î.óó󙟟ËððÈa˜f#Éfãö‹Ž!««ÉØØ£œ;w>CCû¶ ÃìßàÏäeW”ÍyüܺººóàÁýÌÌÌfyy9'NœHGGG’äÏþ2+++)—Ëù×ýï)•J9~üx®\¹’¯¿þº¢éííÍïÿIÊårêõz®_¿öâsj¾RÃr¾þú«”Ëå|úégéêêJgggúúúÞèôSN:•¾¾þ$É7255µåüvßi³ÙÌýû÷20П“'OåΗW¶Žm4¯Î”ÇäÁƒûIÒîæóãu?^Ûßߟ¤Ø„yuÎééé-Ç®\ù!—.]Îúúz&&Æ_©ýÍ¿e€—„aöOx·•J¥|øÁ‡¹sûÖ¿é¶ZÛ6I’ŽŽJÖëë?ÛÈ¥³£#ö¹ãǧÚÓ“?þñ?REŽ?ž?þ8ׯ]û1tÓúéù~ÔzåüæOŸ<ÞöšgÏž¦Õln97=5™}ûö¥¿¯?K‹‹I6=ÊÐÐP:;»Ò×ןJ¥’Ò‹Î'yžÚ2×üÜ\’¤§§gÛõoܸžÎÎÎ exx$ï½7š‘‘ýùãüßllläÕ0dzgÏrïEø&I†÷ 'Ù r¼ÿþéöñf³™R©”ÞÞ¾Iš/Â#]]]¹térÊåòf·–~H}míºÆŸ=Ëz½žõ$333M²†Z˜Ÿß®Ì–c]9qâd’djj2Ïž>yóÞ_|^Û}&“ÏŸçð‘£[þÎJE‘¾Þ¾”JEF;XôèáÃ|úÙç)•ŠÜ¿wï5Z?6ʾ¡}YZ\üÕ{kµµ|÷Ý·ùýï?Icc½–yù÷boØNi§ ’¢(rþÂÅJ÷‹knß¾•¹¹ÙmkzµÍËï'IJůۺéîîN©´9vddú~Õu/--/o©=IŠR‘îî® ¦»Zm_]]Í·ß|#‡l m§ÚÓ“råÍ¿Ãîîîœ9{6ÇŸØò}–Ë¥,-.懾υ‹—288˜$iþŠ€ß>aöÏOxW}øá¹ÌÎÌdjj*¯þž»¶VOµ»;EQÚìŽòŠÞ¾¾¬>\KRdµVKooß– M’ôõõ¥¶ZKRäàÁC™˜˜Èë¿OMMåƒ?l_]]M©TJWWwjµÚ–±ÕžÞ$yÑ5äõž4¯÷òØ|½ÚغæÐ‹Ž+«««IŠ\¼t)õz=þòË4^tYéìêÊððÈ+ó¾9÷ϯŸ7Ž//-eß¾}I’<{ölë5­­s¯®®¦««+Íf37®_o×öÒfg™Íñ|x.¸ÑcIDAT›aŽ'çñØãŸ©ùõº·¯÷§î«Õjåé“'9rôhŠ¢È… óç/¿Ü²I;XóægÒÕÙ•ÅÅÅ-54ÍLOÏl¾+¶®¹´´œ¯¾ú*Ÿ|úifggÛ¡¢¤x1jóÿK‹‹9pðàkÖjkéééÍÒâÒ‹†5›ó—Jå$EæfçríÚµ\þèwùæë¯_žô†¶§3 ì°Ó§O§V«åéÓ§oœkµZ™››k8^zÙÕca~>Iò|b"zãúÞ¾¾ŒOL$ÙìnÒÓÓóÆ˜žžž-A›¹A‡#G¾1öè‘#iµZ¯„!~ÙèáÃotwÙ?2’V«•ÅÅÅttt¤Z­f~~~Kؤ¯¯ïW¯ñK*•J<˜ÃGŽ´½ÚÎÜÜ\’Í@Ͼáá,--err2sss©×ëíóGŽÉáÇ“l…ž?ž}ûöeß¾}ú›ÝÇK‹‹‹¹yófû{èííÍéÓ[»¶”¶éìóÒÈÈÈ‹`Ô¦¢´uËèÕ¿‡—hVWW3öèQ^toyyÝ«×NOOg```Ûï®Ñh¼&*½zíÔTnÞ¼™ß}üñOvCHt†Ù[<< àsâĉ”ʥܽw÷'Ç}46–?ü0ó_Õœ>s&ccci¥•ÉÄó‰|qòdÆÇŸeii)IrðàÁ¬­­eee¹=æâÅKyúôI»ãK©Tʉ“'óôé“öúSÓS™››ËñãÇÓj5óüùó”J¥ŒŽÎ{££Ëò‹9ßðʱr¹ôâßr.^º”ÇDz±±‘£G¥¯¿?>Hmm³Ž¥¥Åìß¿?}ýýY_¯çرãíI¹RNs½ùK hÞ|ýÂÿ·{#Œ377—ñ‰ñ_lÊòðჼ÷Þ{éîîÎèèhFGGÓh4R.—“$_~ù§¬­ÕsöƒÚ×ôôôä÷Ÿ|Ò~ßl6óþÏÿþÙuÞ8þKÍb^»}ûV>ÿü‹E‘cÇgrj*ss›™R¹´Yçk×íß ­´2==Õ>W*•R*í÷ýýýY\\LQ9xè`ÆÇÇ“$™šš~íºRû}m­–Û·oåÒå˹qãz;,”lv›yù÷š$]]é®vg~a¾=fròyÊåRÎ;Ÿï¾ûÖÞ°-a˜=Ä~À»edÿþ¼ÿþéÌÎÎäã?Þr®ÑhäÊ?$IæóxìQ>ûìóÌÍΦ··7sósy<ö¨ýÛo«ÙÌ•¾ÏÅK—²°°˜J¥’V«•kW¯´Ç,ÌÏçÎíÛùô“O³²ºšµZ-û†‡óôÉ“gÏ~“'OåäÉSíšîÞ½“±G¶ÍŸ¼ž×(¿èúqõÊ9õþé|òɧ›µ¶Zypÿ~<¸ßïî½\¼t)_|ñEZ­V¦§¦rçÎíœ=ûA:::²±¾¾e½_³~ûü‹ L³ÙÌÊòržÏ×ëO²íܯÞOµ§'E’•••ö½¾¬ëçl¼Ìl·ÎvÇ_s»c­V« y}ý׿‡_²ÿ\þè£,ÌÏ端þò«¯ö´SwîÞ{°S‹ë ;äç‚?5~iiñgÇ´Z­,//ýâ˜ÕÕÕ_µf£ÑÈââϯùS÷Ñjµ¶„26666»üʵZ­Ö–Ëëï_õúñV«•õõõŸ ýšú_×jµ²²¼¼íñŸªë׬³Ýñíæü©u~íú?ehh(IÒÑÙù_žàm†ÙSŠ.xÇ4_–:::b/Ø „aöûWÀk^v•©T*éìêL½^ßáŠ~^i§ `ç”Ëåöëþþþ¬à×ÑfÑxÝàà@ûõ±cÇ23=½ƒÕü2aö°¾¾»ÁìÛ7œÞ¾¾¬à—é ³§è ü¨§§'[Ž?v<ׯ_ß¡Š~™Î0{TÿÇ:”îîî¨à×Ñf/ÑxEÿÀÀÇŠ¢È±ãÇsûö­¨à— Ãì!²0À«úûú¶=>::šG¤^¯¿åŠ~Yi§ `gôõ÷·_×jµÌÎÎfff&Irìøñ* àg ÃìAÝÝÝ)—ËI’çÏŸ§Õje}½žÅŅܺy3££‡ÓÙÙ¹ÃU¼©²Óð6;]ðŽèëH’LMMåùÄD&ÆÇÛ]aºººÒl6³ox$ãã;Y&À„aöYà…¾¾¾4›Íܽ{'µZ-år9§ÏœÎèèá”Ëå´Z­ dbBx·ÃìA½½½™››K­VKggg>þø÷©V«™œœÌØØXz{{R­VwºL€7Ãì!Ã/uvvdyi9¥¢ÈÅ S­Vsçöí<}ú$I²º²œf³ixçÃìAµÚZVVVrìøñ æñã±v&IÆVðÓJ;]o_­¶š¤•£Ge½^Ïý{÷ÞÓÕÕõö ø:Ãì)ÅN¼#Öjkyÿôé”ËåBOoOººº30Пîîªýà# ³‡Ø«^Z«Õòäñã9z4ËËËí}„Å……œûâ|ºººòàþ}û À;§´Ó°3=z˜µµµttt$IJ¥R>’r¹œV«•gÏžîp…oÒ`j4¹~íZÎ;—F£‘þþT*•4,-.fdÿþLŒït™[Ãì)ÅN¼c–––òýwßgpp0Õj5F#333i49vüxÊåÍp À»Bf/‘…¶ÑJ+sós™›ŸÛrüÑ£‡›/ì1ïa˜=Ä>°Û•vºøµ„aØ5„aØ5*;]oS±ÓüU„aöY`—†ÙCda€Ý®´ÓÀ¯% À®! À®QÙéx‹Šb§+ø«Ãì!¢0ÀnWÚéà׆`׆`רìt¼MÅNðW†ÙC Y`—+ítðk ðkðkðkTvºÞ¦b§ ø«Ãì!…, °Ë•vºøµ„aØ5„aØ5„aØ5*;]oOQ;]À_Egv av av avÊNÀ[T;]À_Ef…v»ÒN¿–0 »†0 »†0 »Fe§ àí)Šb§Kø«è À®! À®! À®! À®QÙéx›Š.à¯" ³‡²0À.WÚéà׆`׆`׆`׆`׆`׆`׆`׆`׆`׆`׆`׆`׆`׆`׆`׆`׆`׆`׆`׆`׆`׆`׆`׆`׆`׆`׆`׆`׆`׆`׆`׆`׆`׆`׆`׆€ÿ¿}; ôÿu;ý!°!ð!ð!ð!ð!ð!ð!ð!ð!ð!ð!ð!ð!ð!ð!ð!ð!ð!ð!ð!ð!ð!ð!ð!ð!ð!ð!ð!ðù,¯ ‰ÈIEND®B`‚fifengine-0.4.1/doc/logo/fife_logo.svg000066400000000000000000005345041304641216200176370ustar00rootroot00000000000000 fifengine-0.4.1/doc/templatefiles/000077500000000000000000000000001304641216200170505ustar00rootroot00000000000000fifengine-0.4.1/doc/templatefiles/sample_unit_test.cpp000066400000000000000000000037121304641216200231360ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes #include "fife_unittest++.h" // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder using namespace FIFE; TEST(foo) { CHECK("Blank Test for foo. Please provide an implementation"); } int main() { return UnitTest::RunAllTests(); } fifengine-0.4.1/doc/templatefiles/samplecpp.cpp000066400000000000000000000035331304641216200215440ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder namespace FIFE { Foo::Foo() { } Foo::Foo(const Foo& from) { } }fifengine-0.4.1/doc/templatefiles/sampleheader.h000066400000000000000000000050351304641216200216560ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_POSSIBLESUBNAMESPACES_FOO_H #define FIFE_POSSIBLESUBNAMESPACES_FOO_H // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder namespace FIFE { // FORWARD REFERENCES /** A one line description of the class. * * A longer description. * * @see something */ class Foo { public: // LIFECYCLE /** Default constructor. */ Foo(); /** Copy constructor. * * @param from The value to copy to this object. */ Foo(const Foo& from); /** Destructor. */ ~Foo(); // OPERATORS /** Assignment operator. * * @param from The value to assign to this object. * * @return A reference to this object. */ Foo& operator=(Foo& from); // OPERATIONS // ACCESS // INQUIRY protected: private: }; // INLINE METHODS // // EXTERNAL REFERENCES // } //FIFE #endif fifengine-0.4.1/engine/000077500000000000000000000000001304641216200147125ustar00rootroot00000000000000fifengine-0.4.1/engine/core/000077500000000000000000000000001304641216200156425ustar00rootroot00000000000000fifengine-0.4.1/engine/core/audio/000077500000000000000000000000001304641216200167435ustar00rootroot00000000000000fifengine-0.4.1/engine/core/audio/fife_openal.h000066400000000000000000000051541304641216200213700ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_FIFE_OPENAL_H #define FIFE_FIFE_OPENAL_H // Standard C++ library includes // Platform specific includes // Linux #if defined( __unix__ ) #include #include #endif // Win32 #if defined( WIN32 ) #include #include #endif // Macintosh #if defined( __APPLE_CC__ ) #include #include #endif // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #ifdef LOG_ENABLED #define CHECK_OPENAL_LOG(logger, level, msg) if (AL_NO_ERROR != alGetError()) { logger.log(level, msg);} #define CHECK_OPENAL_LOG_DETAIL(logger, level, msg) {ALenum error; error = alGetError(); if (AL_NO_ERROR != error) { logger.log(level, LMsg() << msg << ", Error#: " << error);}} #else #define CHECK_OPENAL_LOG(logger, level, msg) #define CHECK_OPENAL_LOG_DETAIL(logger, level, msg) #endif #define CHECK_OPENAL_EXCEPTION(msg) if (AL_NO_ERROR != alGetError()) { throw Exception(msg); } #endif fifengine-0.4.1/engine/core/audio/soundclip.cpp000066400000000000000000000164321304641216200214550ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // Platform specific includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/exception.h" #include "util/log/logger.h" #include "loaders/native/audio/ogg_loader.h" #include "soundclip.h" namespace FIFE { static Logger _log(LM_AUDIO); SoundClip::SoundClip(IResourceLoader* loader) : IResource(createUniqueClipName(), loader), m_isstream(false), m_decoder(NULL), m_deletedecoder(false) { } SoundClip::SoundClip(const std::string& name, IResourceLoader* loader) : IResource(name, loader), m_isstream(false), m_decoder(NULL), m_deletedecoder(false) { } void SoundClip::load(){ if (m_loader){ m_loader->load(this); } else { //no loader specified so find one to use if(m_name.find(".ogg", m_name.size() - 4) != std::string::npos) { OggLoader loader; loader.load(this); } else { FL_WARN(_log, LMsg() << "No audio-decoder available for file \"" << m_name << "\"!"); throw InvalidFormat("Error: Ogg loader can't load files without ogg extension"); } } assert(m_decoder); //should be set by now m_isstream = m_decoder->needsStreaming(); if (!m_isstream) { // only for non-streaming buffers SoundBufferEntry* ptr = new SoundBufferEntry(); // iterate the bufs and fill them with data for (int32_t i = 0; i < BUFFER_NUM; i++) { if (m_decoder->decode(BUFFER_LEN)) { // EOF or error break; } // generate buffer and fill it with data alGenBuffers(1, &ptr->buffers[i]); alBufferData(ptr->buffers[i], m_decoder->getALFormat(), m_decoder->getBuffer(), m_decoder->getBufferSize(), m_decoder->getSampleRate()); CHECK_OPENAL_LOG(_log, LogManager::LEVEL_ERROR, "error copying data to buffers") ptr->usedbufs++; } m_decoder->releaseBuffer(); // push the buffer information to the vector m_buffervec.push_back(ptr); } m_state = IResource::RES_LOADED; } void SoundClip::free(){ if (m_state == IResource::RES_LOADED) { if (m_isstream) { // erase all elements from the list std::vector::iterator it; for (it = m_buffervec.begin(); it != m_buffervec.end(); ++it) { if ((*it)->buffers[0] != 0) { alDeleteBuffers(BUFFER_NUM, (*it)->buffers); } delete (*it); } m_buffervec.clear(); } else { // for non-streaming soundclips SoundBufferEntry* ptr = m_buffervec.at(0); for(uint32_t i = 0; i < ptr->usedbufs; i++) { alDeleteBuffers(1, &ptr->buffers[i]); } } } m_state = IResource::RES_NOT_LOADED; } uint32_t SoundClip::beginStreaming() { // create new sound buffer entry SoundBufferEntry* ptr = new SoundBufferEntry(); ptr->usedbufs=0; alGenBuffers(BUFFER_NUM, ptr->buffers); CHECK_OPENAL_LOG(_log, LogManager::LEVEL_ERROR, "error creating streaming-buffers") m_buffervec.push_back(ptr); return m_buffervec.size()-1; } bool SoundClip::setStreamPos(uint32_t streamid, SoundPositionType type, float value) { uint64_t pos = 0; // convert position to bytes switch (type) { case SD_BYTE_POS: pos = static_cast(value); break; case SD_TIME_POS: value *= m_decoder->getSampleRate(); case SD_SAMPLE_POS: pos = static_cast((m_decoder->getBitResolution() / 8) * (m_decoder->isStereo() ? 2 : 1) * value); break; } if (pos > m_decoder->getDecodedLength()) { // EOF! return true; } // set cursor position m_buffervec.at(streamid)->deccursor = pos; return false; } float SoundClip::getStreamPos(uint32_t streamid, SoundPositionType type) const{ uint64_t pos = m_buffervec.at(streamid)->deccursor; switch(type) { case SD_BYTE_POS: return pos; case SD_SAMPLE_POS: return pos / (m_decoder->getBitResolution() / 8 * (m_decoder->isStereo() ? 2 : 1)); case SD_TIME_POS: return pos / (m_decoder->getBitResolution() / 8 * (m_decoder->isStereo() ? 2 : 1) * m_decoder->getSampleRate()); } return 0.0f; } void SoundClip::acquireStream(uint32_t streamid) { SoundBufferEntry* ptr = m_buffervec.at(streamid); for (int32_t i = 0; i < BUFFER_NUM; i++) { getStream(streamid, ptr->buffers[i]); } } bool SoundClip::getStream(uint32_t streamid, ALuint buffer) { SoundBufferEntry* ptr = m_buffervec.at(streamid); if (ptr->deccursor >= m_decoder->getDecodedLength()) { // EOF! return true; } // set cursor of decoder m_decoder->setCursor(ptr->deccursor); // Error while decoding file? if (m_decoder->decode(BUFFER_LEN)) { throw Exception("error while reading from audio file"); } // fill the buffer with data alBufferData(buffer, m_decoder->getALFormat(), m_decoder->getBuffer(), m_decoder->getBufferSize(), m_decoder->getSampleRate()); m_decoder->releaseBuffer(); // update cursor ptr->deccursor += BUFFER_LEN; CHECK_OPENAL_LOG(_log, LogManager::LEVEL_ERROR, "error catching stream") return false; } void SoundClip::quitStreaming(uint32_t streamid) { // release the buffers SoundBufferEntry* ptr = m_buffervec.at(streamid); alDeleteBuffers(BUFFER_NUM, ptr->buffers); ptr->buffers[0] = 0; } SoundClip::~SoundClip() { free(); // delete decoder if (m_deletedecoder && m_decoder != NULL) { delete m_decoder; } } std::string SoundClip::createUniqueClipName() { // automated counting for name generation, in case the user doesn't provide a name static uint32_t uniqueNumber = 0; static std::string baseName = "soundclip"; std::ostringstream oss; oss << uniqueNumber << "_" << baseName; const std::string name = oss.str(); ++uniqueNumber; return name; } } fifengine-0.4.1/engine/core/audio/soundclip.h000066400000000000000000000111761304641216200211220ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_SOUNDCLIP_H_ #define FIFE_SOUNDCLIP_H_ // Standard C++ library includes #include // Platform specific includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/resource/resource.h" #include "sounddecoder.h" namespace FIFE { /** Different types of audio-file positions */ enum SoundPositionType { SD_SAMPLE_POS, SD_TIME_POS, SD_BYTE_POS }; struct SoundBufferEntry { ALuint buffers[BUFFER_NUM]; uint32_t usedbufs; uint64_t deccursor; }; /** Class to handle the buffers of an audio file */ class SoundClip : public IResource { public: SoundClip(IResourceLoader* loader = 0); SoundClip(const std::string& name, IResourceLoader* loader = 0); ~SoundClip(); /** Does this SoundClip require a streaming mechanism? * * @return Returns true if streaming is required, false if not. */ bool isStream() const { return m_isstream; } /** Returns the number of buffers used by the SoundClip * (only for non-streaming sound clips) * * @return Returns the number of buffers. */ uint32_t countBuffers() const { return m_buffervec.at(0)->usedbufs; } /** Returns the array of buffers for queuing * */ ALuint* getBuffers(uint32_t streamid = 0) const { return m_buffervec.at(streamid)->buffers; } /** Starts streaming the soundclip * @return Returns the streamid */ uint32_t beginStreaming(); /** Fills the streaming-buffers with initial data * * @param streamid The stream ID */ void acquireStream(uint32_t streamid); /** Sets the stream position * @return True if position is invalid (EOF has been reached) */ bool setStreamPos(uint32_t streamid, SoundPositionType type, float value); /** Gets the stream position */ float getStreamPos(uint32_t streamid, SoundPositionType type) const; /** Refill a processed buffer with new data * * @return True if file was EOF * @param streamid The stream ID * @param buffer The OpenAL buffer ID */ bool getStream(uint32_t streamid, ALuint buffer); /** Quits Streaming */ void quitStreaming(uint32_t streamid); /** Adopts a decoder to use so DONT delete it */ void adobtDecoder(SoundDecoder* decoder) { m_decoder = decoder; m_deletedecoder = true; } /** Sets the decoder to use so DONT delete it before this SoundClip is done with it */ void setDecoder(SoundDecoder* decoder) { m_decoder = decoder; m_deletedecoder = false; } /** Returns the attached decoder */ SoundDecoder* getDecoder() const { return m_decoder; } virtual size_t getSize() { return 0; } virtual void load(); virtual void free(); private: bool m_isstream; // is stream? SoundDecoder* m_decoder; // attached decoder bool m_deletedecoder; // when loadFromDecoder-method is used, decoder shouldn't be deleted std::vector m_buffervec; std::string createUniqueClipName(); }; typedef SharedPtr SoundClipPtr; } #endif fifengine-0.4.1/engine/core/audio/soundclip.i000066400000000000000000000035171304641216200211230ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "audio/soundclip.h" #include "util/base/sharedptr.h" %} %include "util/resource/resource.i" namespace FIFE { class SoundClip : public IResource { public: ~SoundClip(); bool isStream(); }; typedef SharedPtr SoundClipPtr; %template(SharedSoundClipPointer) SharedPtr; } fifengine-0.4.1/engine/core/audio/soundclipmanager.cpp000066400000000000000000000276031304641216200230120ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/log/logger.h" #include "util/resource/resourcemanager.h" #include "util/resource/resource.h" #include "soundclipmanager.h" namespace FIFE { static Logger _log(LM_RESMGR); SoundClipManager::~SoundClipManager() { } size_t SoundClipManager::getMemoryUsed() const { size_t totalSize = 0; SoundClipHandleMapConstIterator it = m_sclipHandleMap.begin(), itend = m_sclipHandleMap.end(); for ( ; it != itend; ++it) { totalSize += it->second->getSize(); } return totalSize; } size_t SoundClipManager::getTotalResourcesCreated() const { SoundClipHandleMapConstIterator it = m_sclipHandleMap.begin(), itend = m_sclipHandleMap.end(); size_t count = 0; for ( ; it != itend; ++it) { if ( it->second->getState() == IResource::RES_NOT_LOADED ) { count++; } } return count; } size_t SoundClipManager::getTotalResourcesLoaded() const { SoundClipHandleMapConstIterator it = m_sclipHandleMap.begin(), itend = m_sclipHandleMap.end(); size_t count = 0; for ( ; it != itend; ++it) { if ( it->second->getState() == IResource::RES_LOADED ) { count++; } } return count; } size_t SoundClipManager::getTotalResources() const { return m_sclipHandleMap.size(); } SoundClipPtr SoundClipManager::create(IResourceLoader* loader){ SoundClip* ptr = new SoundClip(loader); return add(ptr); } SoundClipPtr SoundClipManager::create(const std::string& name, IResourceLoader* loader){ if (exists(name)) { FL_WARN(_log, LMsg("SoundClipManager::create(std::string, IResourceLoader* loader) - ") << "Resource name " << name << " was previously created. Returning original SoundClip..."); return get(name); } SoundClip* ptr = new SoundClip(name, loader); return add(ptr); } SoundClipPtr SoundClipManager::load(const std::string& name, IResourceLoader* loader) { SoundClipNameMapIterator nit = m_sclipNameMap.find(name); if (nit != m_sclipNameMap.end()) { if ( nit->second->getState() == IResource::RES_NOT_LOADED ) { nit->second->load(); } return nit->second; } //was not found so create and load resource SoundClipPtr ptr = create(name, loader); ptr->load(); if (ptr->getState() == IResource::RES_NOT_LOADED){ FL_WARN(_log, LMsg("SoundClipManager::load(std::string) - ") << "Resource name " << name << " was not found and could not be loaded."); remove(name); } return ptr; } SoundClipPtr SoundClipManager::add(SoundClip* res) { assert(res); assert(!(exists(res->getHandle()) || exists(res->getName()))); SoundClipPtr resptr(res); std::pair returnValue; returnValue = m_sclipHandleMap.insert ( SoundClipHandleMapPair(res->getHandle(), resptr)); if (returnValue.second) { m_sclipNameMap.insert ( SoundClipNameMapPair(returnValue.first->second->getName(), returnValue.first->second) ); } else { FL_WARN(_log, LMsg("SoundClipManager::add(IResource*) - ") << "Resource " << res->getName() << " already exists.... ignoring."); } return returnValue.first->second; } bool SoundClipManager::exists(const std::string& name) { SoundClipNameMapIterator it = m_sclipNameMap.find(name); if (it != m_sclipNameMap.end()) { return true; } return false; } bool SoundClipManager::exists(ResourceHandle handle) { SoundClipHandleMapConstIterator it = m_sclipHandleMap.find(handle); if (it != m_sclipHandleMap.end()) { return true; } return false; } void SoundClipManager::reload(const std::string& name) { SoundClipNameMapIterator nit = m_sclipNameMap.find(name); if (nit != m_sclipNameMap.end()) { if ( nit->second->getState() == IResource::RES_LOADED) { nit->second->free(); } nit->second->load(); return; } FL_WARN(_log, LMsg("SoundClipManager::reload(std::string) - ") << "Resource name " << name << " not found."); } void SoundClipManager::reload(ResourceHandle handle) { SoundClipHandleMapIterator it = m_sclipHandleMap.find(handle); if ( it != m_sclipHandleMap.end()) { if ( it->second->getState() == IResource::RES_LOADED) { it->second->free(); } it->second->load(); return; } FL_WARN(_log, LMsg("SoundClipManager::reload(ResourceHandle) - ") << "Resource handle " << handle << " not found."); } void SoundClipManager::reloadAll() { SoundClipHandleMapIterator it = m_sclipHandleMap.begin(), itend = m_sclipHandleMap.end(); for ( ; it != itend; ++it) { if ( it->second->getState() == IResource::RES_LOADED) { it->second->free(); } it->second->load(); } } void SoundClipManager::loadUnreferenced() { SoundClipHandleMapIterator it = m_sclipHandleMap.begin(), itend = m_sclipHandleMap.end(); int32_t count = 0; for ( ; it != itend; ++it) { if (it->second.useCount() == 2 && it->second->getState() != IResource::RES_LOADED){ it->second->load(); count++; } } FL_DBG(_log, LMsg("SoundClipManager::loadUnreferenced() - ") << "Loaded " << count << " unreferenced resources."); } void SoundClipManager::free(const std::string& name) { SoundClipNameMapIterator nit = m_sclipNameMap.find(name); if (nit != m_sclipNameMap.end()) { if ( nit->second->getState() == IResource::RES_LOADED) { nit->second->free(); } return; } FL_WARN(_log, LMsg("SoundClipManager::free(std::string) - ") << "Resource name " << name << " not found."); } void SoundClipManager::free(ResourceHandle handle) { SoundClipHandleMapConstIterator it = m_sclipHandleMap.find(handle); if (it != m_sclipHandleMap.end()) { if ( it->second->getState() == IResource::RES_LOADED) { it->second->free(); } return; } FL_WARN(_log, LMsg("SoundClipManager::free(ResourceHandle) - ") << "Resource handle " << handle << " not found."); } void SoundClipManager::freeAll() { SoundClipHandleMapIterator it = m_sclipHandleMap.begin(), itend = m_sclipHandleMap.end(); int32_t count = 0; for ( ; it != itend; ++it) { if ( it->second->getState() == IResource::RES_LOADED) { it->second->free(); count++; } } FL_DBG(_log, LMsg("SoundClipManager::freeAll() - ") << "Freed all " << count << " resources."); } void SoundClipManager::freeUnreferenced() { SoundClipHandleMapIterator it = m_sclipHandleMap.begin(), itend = m_sclipHandleMap.end(); int32_t count = 0; for ( ; it != itend; ++it) { if (it->second.useCount() == 2 && it->second->getState() == IResource::RES_LOADED ){ it->second->free(); count++; } } FL_DBG(_log, LMsg("SoundClipManager::freeUnreferenced() - ") << "Freed " << count << " unreferenced resources."); } void SoundClipManager::remove(SoundClipPtr& resource) { SoundClipHandleMapIterator it = m_sclipHandleMap.find(resource->getHandle()); SoundClipNameMapIterator nit = m_sclipNameMap.find(resource->getName()); if (it != m_sclipHandleMap.end()) { m_sclipHandleMap.erase(it); if (nit != m_sclipNameMap.end()) { m_sclipNameMap.erase(nit); return; } assert(false); //should never get here } FL_WARN(_log, LMsg("SoundClipManager::remove(ResourcePtr&) - ") << "Resource " << resource->getName() << " was not found."); } void SoundClipManager::remove(const std::string& name) { std::size_t handle; SoundClipNameMapIterator nit = m_sclipNameMap.find(name); if (nit != m_sclipNameMap.end()) { handle = nit->second->getHandle(); m_sclipNameMap.erase(nit); } else { FL_WARN(_log, LMsg("SoundClipManager::remove(std::string) - ") << "Resource " << name << " was not found."); return; } SoundClipHandleMapIterator it = m_sclipHandleMap.find(handle); if ( it != m_sclipHandleMap.end()) { m_sclipHandleMap.erase(it); return; } assert(false); //should never get here } void SoundClipManager::remove(ResourceHandle handle) { std::string name; SoundClipHandleMapIterator it = m_sclipHandleMap.find(handle); if (it != m_sclipHandleMap.end()) { name = it->second->getName(); m_sclipHandleMap.erase(it); } else { FL_WARN(_log, LMsg("SoundClipManager::remove(ResourceHandle) - ") << "Resource handle " << handle << " was not found."); return; } SoundClipNameMapIterator nit = m_sclipNameMap.find(name); if ( nit != m_sclipNameMap.end() ) { m_sclipNameMap.erase(nit); return; } assert(false); //should never get here } void SoundClipManager::removeAll() { //should always be equal assert (m_sclipHandleMap.size() == m_sclipNameMap.size()); size_t count = m_sclipHandleMap.size(); m_sclipHandleMap.clear(); m_sclipNameMap.clear(); FL_DBG(_log, LMsg("SoundClipManager::removeAll() - ") << "Removed all " << count << " resources."); } void SoundClipManager::removeUnreferenced() { SoundClipHandleMapIterator it = m_sclipHandleMap.begin(), itend = m_sclipHandleMap.end(); int32_t count = 0; for ( ; it != itend; ++it) { if ( it->second.useCount() == 2) { remove(it->second->getHandle()); count++; } } FL_DBG(_log, LMsg("SoundClipManager::removeUnreferenced() - ") << "Removed " << count << " unreferenced resources."); } SoundClipPtr SoundClipManager::get(const std::string& name) { SoundClipNameMapIterator nit = m_sclipNameMap.find(name); if (nit != m_sclipNameMap.end()) { if (nit->second->getState() != IResource::RES_LOADED){ //resource is not loaded so load it nit->second->load(); } return nit->second; } //not found so attempt to create and load the resource SoundClipPtr ptr = load(name); return ptr; } SoundClipPtr SoundClipManager::get(ResourceHandle handle) { SoundClipHandleMapConstIterator it = m_sclipHandleMap.find(handle); if (it != m_sclipHandleMap.end()) { if (it->second->getState() != IResource::RES_LOADED){ //resource is not loaded so load it it->second->load(); } return it->second; } FL_WARN(_log, LMsg("SoundClipManager::get(ResourceHandle) - ") << "Resource handle " << handle << " is undefined."); return SoundClipPtr(); } ResourceHandle SoundClipManager::getResourceHandle(const std::string& name) { SoundClipNameMapIterator nit = m_sclipNameMap.find(name); if (nit != m_sclipNameMap.end()) { return nit->second->getHandle(); } FL_WARN(_log, LMsg("SoundClipManager::getResourceHandle(std::string) - ") << "Resource " << name << " is undefined."); return 0; } } //FIFE fifengine-0.4.1/engine/core/audio/soundclipmanager.h000066400000000000000000000270661304641216200224620ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_SOUNDCLIP_MANAGER_H #define FIFE_SOUNDCLIP_MANAGER_H // Standard C++ library includes #include #include #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/singleton.h" #include "util/resource/resource.h" #include "util/resource/resourcemanager.h" #include "soundclip.h" namespace FIFE { /** SoundClipManager * * An interface for managing images. * * @see IResource * @see IResourceLoader * @see IResourceManager * */ class SoundClipManager : public IResourceManager, public DynamicSingleton { public: /** Default constructor. */ SoundClipManager() : IResourceManager() { } /** Destructor. */ virtual ~SoundClipManager(); virtual size_t getMemoryUsed() const; virtual size_t getTotalResourcesCreated() const; virtual size_t getTotalResourcesLoaded() const; virtual size_t getTotalResources() const; /** Creates a blank SoundClip but does not load it immediately * * @param loader A pointer to the custom resource loader. The * default is NULL. If this parameter is present the resource * will use the loader to load instead of the default built in * functions. * @return A SoundClipPtr to the newly created SoundClip * * @see SoundClip * @see OggLoader * @see IResourceLoader * */ virtual SoundClipPtr create(IResourceLoader* loader = 0); /** Creates a blank SoundClip but does not load it immediately * * @param name The resource name. Typically a filename. * @param loader A pointer to the custom resource loader. The * default is NULL. If this parameter is present the resource * will use the loader to load instead of the default built in * functions. * @return A SoundClipPtr to the newly created SoundClip * * @see SoundClip * @see OggLoader * @see IResourceLoader * */ virtual SoundClipPtr create(const std::string& name, IResourceLoader* loader = 0); /** Creates a blank resource and loads it from disk * * This function will create the SoundClip if necessary and load * the clip from disk. If the SoundClip is not defined it * will call SoundClipManager::create() before loading. * * @param name The resource name. Typically a filename. * @param loader A pointer to the custom resource loader. The * default is NULL. If this parameter is present the resource * will use the loader to load instead of the default built in * functions. * @return A SoundClipPtr to the loaded SoundClip * * @see SoundClip * @see OggLoader * @see IResourceLoader * */ virtual SoundClipPtr load(const std::string& name, IResourceLoader* loader = 0); /** Add an Image to the manager * * This function will create a SoundClipPtr and add the SoundClip * to the manager. The manager assumes ownership of the SoundClip * so DO NOT delete it. * * @param res A pointer to the SoundClip * @return A SoundClipPtr to the added resource * * @see SoundClip * */ virtual SoundClipPtr add(SoundClip* res); /** Checks to see if a SoundClip exists * * This function will search the manager for SoundClips * that match the parameter * * @param name The name of the SoundClip * @return True if the SoundClip exists. False otherwise. * */ virtual bool exists(const std::string& name); /** Checks to see if a SoundClip exists * * This function will search the manager for SoundClips * that match the parameter * * @param handle The handle of the SoundClip * @return True if the SoundClip exists. False otherwise. * */ virtual bool exists(ResourceHandle handle); /** Reloads a SoundClip * * This function will reload a SoundClip if it is managed * by the manager. If not it creates an entry in the log * specifying that the SoundClip could not be found. It will * load the SoundClip if it is not already loaded. * * @param name The name of the resource * */ virtual void reload(const std::string& name); /** Reloads a resource * * This function will reload a SoundClip if it is managed * by the manager. If not it creates an entry in the log * specifying that the SoundClip could not be found. It will * load the SoundClip if it is not already loaded. * * @param handle The handle of the resource * */ virtual void reload(ResourceHandle handle); /** Reloads all SoundClips * * This function will reload all SoundClips managed by the * manager. It will load a SoundClip if it is not already loaded. * * @todo It might be beneficial to supply a parameter to * only reload resources that are already loaded * */ virtual void reloadAll(); /** Loads all unreferenced SoundClips * * All SoundClips that have no external references will be * loaded into memory. * */ virtual void loadUnreferenced(); /** Frees a SoundClip from memory * * The SoundClip is not deleted but it's data is freed. * This calls the SoundClip::free() function and it is * up to the resource to properly free it's memory. The * manager keeps a reference to the SoundClip in case * its required in the future. * * @param name The name of the SoundClip * * @see SoundClip * */ virtual void free(const std::string& name); /** Frees a SoundClip from memory * * The SoundClip is not deleted but it's data is freed. * This calls the SoundClip::free() function and it is * up to the resource to properly free it's memory. The * manager keeps a reference to the SoundClip in case * its required in the future. * * @param handle The handle of the SoundClip * * @see SoundClip * */ virtual void free(ResourceHandle handle); /** Frees all SoundClips * * This calls the SoundClip::free() function for every * Image the manager is managing. It does not remove * them from the manager. * * @see SoundClip * */ virtual void freeAll(); /** Frees all unreferenced SoundClip * * This calls the SoundClip::free() function for SoundClips * that have no external references to them. It does not * remove them from the manager. * * @see SoundClip * */ virtual void freeUnreferenced(); /** Removes a SoundClip from the manager * * This removes all references to the SoundClip from the * manager. It does not however guarantee that the resource's * destructor is called. If the client has any left over * references to the resource it will not be freed. * * @param resource A SoundClipPtr to the image to be removed * from the manager * * @note This is useful if you want to remove ownership of a resource * from the manager * * @see SoundClip * */ virtual void remove(SoundClipPtr& resource); /** Removes a SoundClip from the manager * * This removes all references to the SoundClip from the * manager. It does not however guarantee that the resource's * destructor is called. If the client has any left over * references to the resource it will not be freed. * * @param name The name of the SoundClip * * @see SoundClip * */ virtual void remove(const std::string& name); /** Removes a SoundClip from the manager * * This removes all references to the SoundClip from the * manager. It does not however guarantee that the resource's * destructor is called. If the client has any left over * references to the resource it will not be freed. * * @param handle The handle of the SoundClip * * @see SoundClip * */ virtual void remove(ResourceHandle handle); /** Removes all SoundClips from the manager * * This effectively removes all references to all SoundClips from * the manager. If there are left over shared pointers to * any resources they will not be deleted. * * @see SoundClip * */ virtual void removeAll(); /** Removes all unreferenced SoundClips * * This effectively removes all SoundClips that dont have an * external reference. The resources will be deleted. * * @see SoundClip * */ virtual void removeUnreferenced(); /** Gets a shared pointer to the SoundClip * * If the SoundClip is not defined it will attempt to create * and load the SoundClip based on the name (it assumes the name * is a filename) * * @param name The name of the SoundClip * @return A SoundClipPtr to the SoundClip * */ virtual SoundClipPtr get(const std::string& name); /** Gets a shared pointer to the SoundClip * * If the resource is not defined it returns an empty * (or invalid) SoundClipPtr and makes an entry in the log. * * @param handle The handle of the resource * @return A SoundClipPtr to the resource * * @todo This should throw an exception instead of an * empty SoundClipPtr * */ virtual SoundClipPtr get(ResourceHandle handle); /** Gets a SoundClip handle by name * * Returns the SoundClip handle associated with the name * * @param name The name of the SoundClip * @return 0 if the resource name is invalid * */ virtual ResourceHandle getResourceHandle(const std::string& name); private: typedef std::map< ResourceHandle, SoundClipPtr > SoundClipHandleMap; typedef std::map< ResourceHandle, SoundClipPtr >::iterator SoundClipHandleMapIterator; typedef std::map< ResourceHandle, SoundClipPtr >::const_iterator SoundClipHandleMapConstIterator; typedef std::pair< ResourceHandle, SoundClipPtr > SoundClipHandleMapPair; typedef std::map< std::string, SoundClipPtr > SoundClipNameMap; typedef std::map< std::string, SoundClipPtr >::iterator SoundClipNameMapIterator; typedef std::map< std::string, SoundClipPtr >::const_iterator SoundClipNameMapConstIterator; typedef std::pair< std::string, SoundClipPtr > SoundClipNameMapPair; SoundClipHandleMap m_sclipHandleMap; SoundClipNameMap m_sclipNameMap; }; } //FIFE #endif //FIFE_SOUNDCLIP_MANAGER_H fifengine-0.4.1/engine/core/audio/soundclipmanager.i000066400000000000000000000056071304641216200224600ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "audio/soundclip.h" #include "audio/soundclipmanager.h" %} namespace FIFE { class SoundClip; class SoundClipManager : public IResourceManager { public: virtual ~SoundClipManager(); virtual size_t getMemoryUsed() const; virtual size_t getTotalResourcesCreated() const; virtual size_t getTotalResourcesLoaded() const; virtual size_t getTotalResources() const; virtual SoundClipPtr create(const std::string& name, IResourceLoader* loader = 0); virtual SoundClipPtr load(const std::string& name, IResourceLoader* loader = 0); virtual SoundClipPtr add(SoundClip* res); virtual bool exists(const std::string& name); virtual bool exists(ResourceHandle handle); virtual void reload(const std::string& name); virtual void reload(ResourceHandle handle); virtual void reloadAll(); virtual void loadUnreferenced(); virtual void free(const std::string& name); virtual void free(ResourceHandle handle); virtual void freeAll(); virtual void freeUnreferenced(); virtual void remove(SoundClipPtr& resource); virtual void remove(const std::string& name); virtual void remove(ResourceHandle handle); virtual void removeAll(); virtual void removeUnreferenced(); virtual SoundClipPtr get(const std::string& name); virtual SoundClipPtr get(ResourceHandle handle); virtual ResourceHandle getResourceHandle(const std::string& name); }; } fifengine-0.4.1/engine/core/audio/soundconfig.h000066400000000000000000000042671304641216200214430ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_AUDIO_CONFIG_H #define FIFE_AUDIO_CONFIG_H // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder namespace FIFE { /* The max. length of a decoded audio data * for which streaming is not used. (bytes) * Has to be <= than BUFFERLEN * 3. */ const uint32_t MAX_KEEP_IN_MEM = 3145728; // The number of buffers used for streaming. const int16_t BUFFER_NUM = 3; // The length of one buffer. (bytes) const uint32_t BUFFER_LEN = 1048576; } #endif fifengine-0.4.1/engine/core/audio/sounddecoder.h000066400000000000000000000076521304641216200216040ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_SOUNDDECODER_H #define FIFE_SOUNDDECODER_H // Standard C++ library includes // Platform specific includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "soundconfig.h" #include "fife_openal.h" namespace FIFE { class SoundDecoder { public: virtual ~SoundDecoder() {} /** Returns the decoded length of the file in bytes */ virtual uint64_t getDecodedLength() const = 0; /** A stream or not? * * The decision if we decode the whole audio file in one buffer or use a * kind of streaming depends on the value of MAX_KEEP_IN_MEM from * soundconfig.h * * @return Return true for a streaming decoder, false if the sound is * decoded in one buffer */ bool needsStreaming() const { return getDecodedLength() > MAX_KEEP_IN_MEM; } /** Sets the current position in the file (in bytes) * * @return 0 (False), if the positioning was successful */ virtual bool setCursor(uint64_t pos) = 0; /** Request the decoding of the next part of the stream. * * @param length The length of the decoded part * @return 0 (False), if decoding was successful */ virtual bool decode(uint64_t length) = 0; /** Returns the next decoded buffer. * * The length of the buffer is returned by getBufferSize(). */ virtual void *getBuffer() const = 0; /** Returns the byte-size of the buffer returned by getBuffer(). */ virtual uint64_t getBufferSize() = 0; /** Releases the buffer returned by getBuffer() */ virtual void releaseBuffer() = 0; /** Tests if the audio data is stereo data or mono. * * @return Returns true if the audio data is stereo, false if mono. */ bool isStereo() const { return m_isstereo; } /** Returns the openAL-Format of the audio file */ ALenum getALFormat() const { if (m_isstereo) { return m_is8bit ? AL_FORMAT_STEREO8 : AL_FORMAT_STEREO16; } else { return m_is8bit ? AL_FORMAT_MONO8 : AL_FORMAT_MONO16; } } /** Returns the bit resolution */ int16_t getBitResolution() const { return m_is8bit ? 8 : 16; } /** Returns the sample rate */ uint64_t getSampleRate() const{ return m_samplerate; } protected: bool m_isstereo; bool m_is8bit; uint64_t m_samplerate; }; } #endif fifengine-0.4.1/engine/core/audio/soundemitter.cpp000066400000000000000000000164211304641216200221750ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // Platform specific includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/log/logger.h" #include "util/time/timemanager.h" #include "util/base/exception.h" #include "soundemitter.h" #include "soundmanager.h" #include "soundclipmanager.h" namespace FIFE { static Logger _log(LM_AUDIO); SoundEmitter::SoundEmitter(SoundManager* manager, uint32_t uid) : m_manager(manager), m_source(0), m_soundclip(), m_soundclipid(0), m_streamid(0), m_emitterid(uid), m_loop(false) { if (!m_manager->isActive()) { return; } TimeManager::instance()->registerEvent(this); setPeriod(-1); alGenSources(1, &m_source); CHECK_OPENAL_LOG(_log, LogManager::LEVEL_ERROR, "error creating source") } SoundEmitter::~SoundEmitter() { if (!m_manager->isActive()) { return; } setPeriod(-1); TimeManager::instance()->unregisterEvent(this); reset(); alDeleteSources(1, &m_source); } void SoundEmitter::reset(bool defaultall) { if (m_soundclip) { setPeriod(-1); alSourceStop(m_source); // Release all buffers alSourcei(m_source, AL_BUFFER, AL_NONE); alGetError(); if (m_soundclip->isStream()) { m_soundclip->quitStreaming(m_streamid); } // release the soundclip //SoundClipManager::instance()->free(m_soundclipid); m_soundclip.reset(); // default source properties if (defaultall) { setPosition(0.0f, 0.0f, 0.0f); setVelocity(0.0f, 0.0f, 0.0f); setGain(1.0f); setPositioning(false); alSourcei(m_source, AL_LOOPING, AL_FALSE); } } } void SoundEmitter::release() { m_manager->releaseEmitter(m_emitterid); } void SoundEmitter::setSoundClip(SoundClipPtr soundclip) { m_soundclipid = soundclip->getHandle(); m_soundclip = soundclip; attachSoundClip(); } void SoundEmitter::setCallback(const type_callback& cb) { m_callback = cb; } void SoundEmitter::attachSoundClip() { if (!m_soundclip->isStream()) { // non-streaming alSourceQueueBuffers(m_source, m_soundclip->countBuffers(), m_soundclip->getBuffers()); alSourcei(m_source, AL_LOOPING, m_loop ? AL_TRUE : AL_FALSE); } else { // streaming m_streamid = m_soundclip->beginStreaming(); m_soundclip->acquireStream(m_streamid); // queue initial buffers alSourceQueueBuffers(m_source, BUFFER_NUM, m_soundclip->getBuffers(m_streamid)); alSourcei(m_source, AL_LOOPING, AL_FALSE); } CHECK_OPENAL_LOG(_log, LogManager::LEVEL_ERROR, "error attaching sound clip") } void SoundEmitter::updateEvent(uint32_t time) { ALint procs; ALint bufs; ALuint buffer; alGetSourcei(m_source, AL_BUFFERS_PROCESSED, &procs); while (procs--) { alSourceUnqueueBuffers(m_source, 1, &buffer); if (m_soundclip->getStream(m_streamid, buffer)) { // EOF! if (m_loop) { // play again from the beginning m_soundclip->setStreamPos(m_streamid, SD_BYTE_POS, 0); m_soundclip->getStream(m_streamid, buffer); } else { // check if the playback has been finished alGetSourcei(m_source, AL_BUFFERS_QUEUED, &bufs); if (bufs == 0) { setPeriod(-1); alSourceStop(m_source); if(m_callback) { m_callback(); } } continue; } } alSourceQueueBuffers(m_source, 1, &buffer); } CHECK_OPENAL_LOG(_log, LogManager::LEVEL_ERROR, "error while streaming") } void SoundEmitter::setLooping(bool loop) { if (m_soundclip) { if (!m_soundclip->isStream()) { alSourcei(m_source, AL_LOOPING, loop ? AL_TRUE : AL_FALSE); } else { alSourcei(m_source, AL_LOOPING, AL_FALSE); } } m_loop = loop; } void SoundEmitter::play() { if (m_soundclip) { alSourcePlay(m_source); if (m_soundclip->isStream()) { setPeriod(5000); } } } void SoundEmitter::stop() { if (m_soundclip) { alSourceStop(m_source); if (m_soundclip->isStream()) { setPeriod(-1); setCursor(SD_BYTE_POS, 0); } else { alSourceRewind(m_source); } } } void SoundEmitter::setCursor(SoundPositionType type, float value) { if (!m_soundclip) { return; } ALint state = 0; if (!m_soundclip->isStream()) { switch(type) { case SD_BYTE_POS: alSourcef(m_source, AL_BYTE_OFFSET, value); break; case SD_SAMPLE_POS: alSourcef(m_source, AL_SAMPLE_OFFSET, value); break; case SD_TIME_POS: alSourcef(m_source, AL_SEC_OFFSET, value); break; } CHECK_OPENAL_LOG(_log, LogManager::LEVEL_ERROR, "error setting cursor position") } else { alGetSourcei(m_source, AL_SOURCE_STATE, &state); if (state == AL_PLAYING || AL_PAUSED) { setPeriod(-1); alSourceStop(m_source); } m_soundclip->setStreamPos(m_streamid, type, value); // detach all buffers alSourcei(m_source, AL_BUFFER, 0); // queue the buffers with new data m_soundclip->acquireStream(m_streamid); alSourceQueueBuffers(m_source, BUFFER_NUM, m_soundclip->getBuffers(m_streamid)); if (state == AL_PLAYING) { setPeriod(5000); alSourcePlay(m_source); } CHECK_OPENAL_LOG(_log, LogManager::LEVEL_ERROR, "error setting stream cursor position") } } float SoundEmitter::getCursor(SoundPositionType type) { if (!m_soundclip) { return 0.0f; } ALfloat pos = 0.0f; switch(type) { case SD_BYTE_POS: alGetSourcef(m_source, AL_BYTE_OFFSET, &pos); break; case SD_SAMPLE_POS: alGetSourcef(m_source, AL_SAMPLE_OFFSET, &pos); break; case SD_TIME_POS: alGetSourcef(m_source, AL_SEC_OFFSET, &pos); break; } if (m_soundclip->isStream()) { pos += m_soundclip->getStreamPos(m_streamid, type); } CHECK_OPENAL_LOG(_log, LogManager::LEVEL_ERROR, "error getting cursor") return pos; } } fifengine-0.4.1/engine/core/audio/soundemitter.h000066400000000000000000000154631304641216200216470ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_SOUNDEMITTER_H_ #define FIFE_SOUNDEMITTER_H_ // Standard C++ library includes // Platform specific includes // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/time/timeevent.h" #include "soundclip.h" namespace FIFE { class SoundManager; /** The class for playing audio files */ class SoundEmitter : private TimeEvent { public: typedef boost::function0 type_callback; SoundEmitter(SoundManager* manager, uint32_t uid); ~SoundEmitter(); /** Returns the emitter-id */ uint32_t getId() const{ return m_emitterid; } /** Sets Positioning-Type * Default is false * * @param relative If set to true, the emitters position will be interpreted relative to the listener object * */ void setPositioning(bool relative) { alSourcei(m_source, AL_SOURCE_RELATIVE, relative ? AL_TRUE : AL_FALSE); } /** Sets the AL_ROLEOFF_FACTOR. Rolloff factor judges the strength of attenuation over distance. * * @param rolloff Rolloff factor. You'll need to do a lot of testing to find a value which suits your needs. */ void setRolloff(float rolloff) { alSourcef (m_source, AL_ROLLOFF_FACTOR, rolloff); } /** Sets the sound clip to be used by this emitter. * @param soundclip SoundClipPtr of the sound to be used. */ void setSoundClip(SoundClipPtr soundclip); /** Get the current sound clip used by this emitter. * @return A SoundClipPtr of the sound clip. */ SoundClipPtr getSoundClip() { return m_soundclip; }; /** Sets the callback to use when the STREAM has finished being played. * NOTE: This only works with streaming audio. * * @param cb function callback */ void setCallback(const type_callback& cb); /** Reset the emitter, free all internal buffers * * @param defaultall If set to true, emitter position, velocity, gain and type will be set to the default values */ void reset(bool defaultall = false); /** Releases the emitter */ void release(); /** Sets the playing mode */ void setLooping(bool loop); /** Plays the associated audio file. */ void play(); /** Stops playing the audio file and rewinds to the beginning */ void stop(); /** Pauses playing the audio file */ void pause() { if (m_soundclip) { alSourcePause(m_source); } } /** Sets the gain of the emitter * * @param gain The gain value. 0=silence ... 1.0=normal loudness. */ void setGain(float gain) { alSourcef(m_source, AL_GAIN, gain); } /** Returns the gain of the emitter * * @return The gain value. 0=silence ... 1.0=normal loudness. */ float getGain() { float tmp; alGetSourcef(m_source, AL_GAIN, &tmp); return tmp; } /** Tests if the audio data is stereo data or mono. * * @return Returns true if the audio data is stereo, false if mono. */ bool isStereo() { if (m_soundclip) { return m_soundclip->getDecoder()->isStereo(); } return false; } /** Returns the bit resolution */ int16_t getBitResolution() { if (m_soundclip) { return m_soundclip->getDecoder()->getBitResolution(); } return 0; } /** Returns the sample rate */ uint64_t getSampleRate() { if (m_soundclip) { return m_soundclip->getDecoder()->getSampleRate(); } return 0; } /** Returns the length of the decoded length in bytes */ uint64_t getDecodedLength() { if (m_soundclip) { return m_soundclip->getDecoder()->getDecodedLength(); } return 0; } /** Returns the duration of the sound clip in milliseconds */ uint64_t getDuration() { if (m_soundclip) { double samplerate = static_cast(getSampleRate()) / 1000.0; //convert to milliseconds double bitres = static_cast(getBitResolution()); double size = static_cast(getDecodedLength()) * 8.0; //convert to bits double stereo = (isStereo() ? 2.0 : 1.0); double time = ( size / (samplerate * bitres) ) / stereo; return static_cast(time); } return 0; } /** Sets the cursor position in the audio file */ void setCursor(SoundPositionType type, float value); /** Returns the cursor position in the audio file */ float getCursor(SoundPositionType type); /** Sets the position of the SoundEmitter in the virtual audio space. */ void setPosition(float x, float y, float z) { alSource3f(m_source, AL_POSITION, x, y, z); } /** Sets the velocity of the SoundEmitter in the virtual audio space. */ void setVelocity(float x, float y, float z) { alSource3f(m_source, AL_VELOCITY, x, y, z); } private: /** Implementation of the pure virtual function from TimeEvent to update streaming */ virtual void updateEvent(uint32_t time); /** Internal function to attach a soundclip to the source */ void attachSoundClip(); SoundManager* m_manager; ALuint m_source; // The openAL-source SoundClipPtr m_soundclip; // the attached soundclip uint32_t m_soundclipid;// id of the attached soundclip uint32_t m_streamid; // the id of the stream uint32_t m_emitterid; // the emitter-id bool m_loop; // loop? type_callback m_callback; }; } #endif fifengine-0.4.1/engine/core/audio/soundemitter.i000066400000000000000000000047501304641216200216450ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module soundemitter %{ #include "audio/soundemitter.h" %} namespace FIFE { enum SoundPositionType { SD_SAMPLE_POS, SD_TIME_POS, SD_BYTE_POS }; class SoundDecoder; class SoundManager; class SoundEmitter { public: SoundEmitter(SoundManager* manager, uint32_t uid); ~SoundEmitter(); uint32_t getId() const; void setSoundClip(SoundClipPtr soundclip); SoundClipPtr getSoundClip(); void reset(bool defaultall = false); void release(); void play(); void pause(); void stop(); void setLooping(bool loop); void setRolloff(float rolloff); void setPositioning(bool relative); void setPosition(float x, float y, float z); void setVelocity(float x, float y, float z); void setGain(float gain); float getGain(); bool isStereo(); int16_t getBitResolution(); uint64_t getSampleRate(); uint64_t getDecodedLength(); uint64_t getDuration(); void setCursor(SoundPositionType type, float value); float getCursor(SoundPositionType type); }; } fifengine-0.4.1/engine/core/audio/soundmanager.cpp000066400000000000000000000076771304641216200221530ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // Platform specific includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "vfs/vfs.h" #include "util/log/logger.h" #include "util/base/exception.h" #include "soundmanager.h" #include "soundemitter.h" namespace FIFE { /** Logger to use for this source file. * @relates Logger */ static Logger _log(LM_AUDIO); SoundManager::SoundManager() : m_context(0), m_device(0), m_mutevol(0), m_volume(1.0) { } SoundManager::~SoundManager() { // free all soundemitters for (std::vector::iterator it = m_emittervec.begin(), it_end = m_emittervec.end(); it != it_end; ++it) { if ((*it) != NULL) { delete (*it); } } m_emittervec.clear(); if (m_device) { alcDestroyContext(m_context); alcCloseDevice(m_device); m_device = NULL; } if (alcGetError(NULL) != ALC_NO_ERROR) { FL_ERR(_log, LMsg() << "error closing openal device"); } } void SoundManager::init() { m_device = alcOpenDevice(NULL); if (!m_device || alcGetError(m_device) != ALC_NO_ERROR) { FL_ERR(_log, LMsg() << "Could not open audio device - deactivating audio module"); m_device = NULL; return; } m_context = alcCreateContext(m_device, NULL); if (!m_context || alcGetError(m_device) != ALC_NO_ERROR) { FL_ERR(_log, LMsg() << "Couldn't create audio context - deactivating audio module"); m_device = NULL; return; } alcMakeContextCurrent(m_context); if (alcGetError(m_device) != ALC_NO_ERROR) { FL_ERR(_log, LMsg() << "Couldn't change current audio context - deactivating audio module"); m_device = NULL; return; } // set listener position alListener3f(AL_POSITION, 0.0, 0.0, 0.0); ALfloat vec1[6] = { 0.0, 0.0, 0.0, 0.0, 0.0, 1.0}; alListenerfv(AL_ORIENTATION, vec1); // set volume alListenerf(AL_GAIN, m_volume); } SoundEmitter* SoundManager::getEmitter(uint32_t emitterid) const{ return m_emittervec.at(emitterid); } SoundEmitter* SoundManager::createEmitter() { SoundEmitter* ptr = new SoundEmitter(this, m_emittervec.size()); m_emittervec.push_back(ptr); return ptr; } void SoundManager::releaseEmitter(uint32_t emitterid) { SoundEmitter** ptr = &m_emittervec.at(emitterid); delete *ptr; *ptr = NULL; } } //FIFE fifengine-0.4.1/engine/core/audio/soundmanager.h000066400000000000000000000077021304641216200216050ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_SOUNDMANAGER_H #define FIFE_SOUNDMANAGER_H // Standard C++ library includes // Platform specific includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "fife_openal.h" namespace FIFE { class SoundEmitter; class SoundManager { public: SoundManager(); ~SoundManager(); /** Initializes the audio system */ void init(); /** Returns a pointer to an emitter-instance given by emitterid * * @param emitterid The id of the Emitter * */ SoundEmitter* getEmitter(uint32_t emitterid) const; /** Returns a pointer to an allocated emitter-instance */ SoundEmitter* createEmitter(); /** Release an emitter-instance given by emitter-id */ void releaseEmitter(uint32_t emitterid); /** Returns an openAL context */ ALCcontext* getContext() const { return m_context; } /** Sets the Master Volume * * @param vol The volume value. 0=silence ... 1.0=normal loudness. */ void setVolume(float vol) { if (m_device == NULL) { m_volume = vol; } alListenerf(AL_GAIN, vol); } /** Return the Master Volume */ float getVolume() const{ return m_volume; } /** Mute */ void mute() { alGetListenerf(AL_GAIN, &m_mutevol); alListenerf(AL_GAIN, 0); } /** Unmutes to volume before mute() was called. */ void unmute() { alListenerf(AL_GAIN, m_mutevol); } /** Sets the position of the listener (alter ego). */ void setListenerPosition(float x, float y, float z) { alListener3f(AL_POSITION, x, y, z); } /** Sets the orientation of the listener (alter ego). */ void setListenerOrientation(float x, float y, float z) { ALfloat vec[6] = { x, y, z, 0.0, 0.0, 1.0}; alListenerfv(AL_ORIENTATION, vec); } /** Sets the velocity of the listener (alter ego). */ void setListenerVelocity(float x, float y, float z); /** Returns true if audio module is active */ bool isActive() const{ return m_device != NULL; } private: std::vector m_emittervec; // emitter-vector ALCcontext* m_context; // OpenAL context ALCdevice* m_device; // OpenAL device float m_mutevol; // volume before mute() was called float m_volume; // volume to support setVolume-calls before initialization }; } #endif fifengine-0.4.1/engine/core/audio/soundmanager.i000066400000000000000000000041451304641216200216040ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module soundmanager %{ #include "audio/soundmanager.h" %} %include "util/resource/resource.i" namespace FIFE { class SoundClip; class SoundManager { public: SoundManager(); ~SoundManager(); void init(); SoundEmitter* createEmitter(); SoundEmitter* getEmitter(uint32_t emitterid); void releaseEmitter(uint32_t emitterid); ALCcontext* getContext(); void setVolume(float vol); float getVolume() const; void mute(); void unmute(); void setListenerPosition(float x, float y, float z); void setListenerOrientation(float x, float y, float z); }; } fifengine-0.4.1/engine/core/controller/000077500000000000000000000000001304641216200200255ustar00rootroot00000000000000fifengine-0.4.1/engine/core/controller/engine.cpp000066400000000000000000000320501304641216200217760ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include #include // 3rd party library includes #include #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/exception.h" #include "util/log/logger.h" #include "util/time/timemanager.h" #include "audio/soundmanager.h" #include "gui/guimanager.h" #include "vfs/vfs.h" #include "vfs/vfsdirectory.h" #include "vfs/directoryprovider.h" #ifdef HAVE_ZIP #include "vfs/zip/zipprovider.h" #endif #include "eventchannel/eventmanager.h" #include "video/imagemanager.h" #include "video/animationmanager.h" #include "audio/soundclipmanager.h" #include "video/renderbackend.h" #include "video/cursor.h" #include "video/devicecaps.h" #ifdef HAVE_OPENGL #include "video/opengl/fife_opengl.h" #include "video/opengl/renderbackendopengl.h" #endif #include "video/sdl/renderbackendsdl.h" #include "loaders/native/video/imageloader.h" #include "loaders/native/audio/ogg_loader.h" #include "model/model.h" #include "pathfinder/routepather/routepather.h" #include "model/metamodel/grids/hexgrid.h" #include "model/metamodel/grids/squaregrid.h" #include "view/renderers/quadtreerenderer.h" #include "view/renderers/gridrenderer.h" #include "view/renderers/instancerenderer.h" #include "view/renderers/coordinaterenderer.h" #include "view/renderers/floatingtextrenderer.h" #include "view/renderers/cellselectionrenderer.h" #include "view/renderers/blockinginforenderer.h" #include "view/renderers/genericrenderer.h" #include "view/renderers/targetrenderer.h" #include "view/renderers/lightrenderer.h" #include "view/renderers/offrenderer.h" #include "view/renderers/cellrenderer.h" #include "video/image.h" #include "engine.h" #include "version.h" #ifdef USE_COCOA #include #include int32_t main(int32_t argc, char **argv) { return 0; } #endif namespace FIFE { static Logger _log(LM_CONTROLLER); Engine::Engine(): m_renderbackend(0), m_guimanager(0), m_eventmanager(0), m_soundmanager(0), m_timemanager(0), m_imagemanager(0), m_animationmanager(0), m_soundclipmanager(0), m_vfs(0), m_model(0), m_logmanager(0), m_cursor(0), m_destroyed(false), m_settings(), m_devcaps(), m_offrenderer(0), m_targetrenderer(0), m_changelisteners() { #ifdef USE_COCOA // The next lines ensure that Cocoa is initialzed correctly. // This is needed for SDL to function properly on MAC OS X. void* cocoa_lib; cocoa_lib = dlopen( "/System/Library/Frameworks/Cocoa.framework/Cocoa", RTLD_LAZY ); void (*nsappload)(void); nsappload = (void(*)()) dlsym( cocoa_lib, "NSApplicationLoad"); nsappload(); // Create an autorelease pool, so autoreleased SDL objects don't leak. #ifdef OSX_109 Class NSAutoreleasePool = objc_getClass("NSAutoreleasePool"); m_autoreleasePool = class_createInstance(NSAutoreleasePool, 0); #else objc_object *NSAutoreleasePool = objc_getClass("NSAutoreleasePool"); m_autoreleasePool = objc_msgSend(NSAutoreleasePool, sel_registerName("new")); #endif #endif m_logmanager = LogManager::instance(); } EngineSettings& Engine::getSettings() { return m_settings; } const DeviceCaps& Engine::getDeviceCaps() const { return m_devcaps; } void Engine::changeScreenMode(const ScreenMode& mode){ m_cursor->invalidate(); m_imagemanager->invalidateAll(); m_renderbackend->setScreenMode(mode); if (m_guimanager) { m_guimanager->resizeTopContainer(0,0,mode.getWidth(), mode.getHeight()); } std::vector::iterator i = m_changelisteners.begin(); while (i != m_changelisteners.end()) { (*i)->onScreenModeChanged(mode); ++i; } } void Engine::init() { m_destroyed = false; FL_LOG(_log, LMsg("Fifengine v") << FIFE::getVersion()); FL_LOG(_log, "================== Engine initialize start ================="); m_timemanager = new TimeManager(); FL_LOG(_log, "Time manager created"); FL_LOG(_log, "Creating VFS"); m_vfs = new VFS(); FL_LOG(_log, "Adding root directory to VFS"); m_vfs->addSource( new VFSDirectory(m_vfs) ); m_vfs->addProvider( new DirectoryProvider() ); #ifdef HAVE_ZIP FL_LOG(_log, "Adding zip provider to VFS"); m_vfs->addProvider( new ZipProvider() ); #endif //m_vfs->addProvider(ProviderDAT2()); //m_vfs->addProvider(ProviderDAT1()); FL_LOG(_log, "Engine pre-init done"); // If failed to init SDL throw exception. if (SDL_Init(SDL_INIT_NOPARACHUTE | SDL_INIT_TIMER) < 0) { throw SDLException(SDL_GetError()); } TTF_Init(); FL_LOG(_log, "Creating event manager"); m_eventmanager = new EventManager(); m_eventmanager->setMouseSensitivity(m_settings.getMouseSensitivity()); m_eventmanager->setMouseAccelerationEnabled(m_settings.isMouseAccelerationEnabled()); FL_LOG(_log, "Creating resource managers"); m_imagemanager = new ImageManager(); m_animationmanager = new AnimationManager(); m_soundclipmanager = new SoundClipManager(); FL_LOG(_log, "Creating render backend"); std::string rbackend(m_settings.getRenderBackend()); if (rbackend == "SDL") { m_renderbackend = new RenderBackendSDL(m_settings.getColorKey()); FL_LOG(_log, "SDL Render backend created"); } else { #ifdef HAVE_OPENGL m_renderbackend = new RenderBackendOpenGL(m_settings.getColorKey()); FL_LOG(_log, "OpenGL Render backend created"); #else m_renderbackend = new RenderBackendSDL(m_settings.getColorKey()); // Remember the choice so we pick the right graphics class. rbackend = "SDL"; FL_WARN(_log, "Tried to select OpenGL, even though it is not compiled into the engine. Falling back to SDL Render backend"); #endif } FL_LOG(_log, "Initializing render backend"); m_renderbackend->setColorKeyEnabled(m_settings.isColorKeyEnabled()); // we always set this to false //m_renderbackend->setAlphaOptimizerEnabled(false); m_renderbackend->setImageCompressingEnabled(m_settings.isGLCompressImages()); m_renderbackend->setFramebufferEnabled(m_settings.isGLUseFramebuffer()); m_renderbackend->setNPOTEnabled(m_settings.isGLUseNPOT()); m_renderbackend->setTextureFiltering(m_settings.getGLTextureFiltering()); m_renderbackend->setMipmappingEnabled(m_settings.isGLUseMipmapping()); m_renderbackend->setMonochromeEnabled(m_settings.isGLUseMonochrome()); m_renderbackend->setDepthBufferEnabled(m_settings.isGLUseDepthBuffer()); m_renderbackend->setAlphaTestValue(m_settings.getGLAlphaTestValue()); m_renderbackend->setVSyncEnabled(m_settings.isVSync()); if (m_settings.isFrameLimitEnabled()) { m_renderbackend->setFrameLimitEnabled(true); m_renderbackend->setFrameLimit(m_settings.getFrameLimit()); } std::string driver = m_settings.getVideoDriver(); if (driver != ""){ std::vector drivers = m_devcaps.getAvailableVideoDrivers(); if (std::find (drivers.begin(), drivers.end(), driver) == drivers.end()) { FL_WARN(_log, "Selected video driver is not supported for your Operating System! Reverting to default driver."); driver = ""; } m_devcaps.setVideoDriverName(driver); } // init backend with selected video driver or default m_renderbackend->init(driver); // in case of SDL we use this to create the SDL_Renderer driver = m_settings.getSDLDriver(); if (driver != ""){ std::vector drivers = m_devcaps.getAvailableRenderDrivers(); if (std::find (drivers.begin(), drivers.end(), driver) == drivers.end()) { FL_WARN(_log, "Selected render driver is not supported for your Operating System! Reverting to default driver."); driver = ""; } m_devcaps.setRenderDriverName(driver); } FL_LOG(_log, "Querying device capabilities"); m_devcaps.fillDeviceCaps(); uint16_t bpp = m_settings.getBitsPerPixel(); m_screenMode = m_devcaps.getNearestScreenMode( m_settings.getScreenWidth(), m_settings.getScreenHeight(), bpp, rbackend, m_settings.isFullScreen(), m_settings.getRefreshRate(), m_settings.getDisplay()); FL_LOG(_log, "Creating main screen"); m_renderbackend->createMainScreen( m_screenMode, m_settings.getWindowTitle(), m_settings.getWindowIcon()); FL_LOG(_log, "Main screen created"); #ifdef HAVE_OPENGL if (m_settings.getLightingModel() != 0) { m_renderbackend->setLightingModel(m_settings.getLightingModel()); } #endif FL_LOG(_log, "Creating sound manager"); m_soundmanager = new SoundManager(); m_soundmanager->setVolume(static_cast(m_settings.getInitialVolume()) / 10); FL_LOG(_log, "Creating renderers"); m_offrenderer = new OffRenderer(m_renderbackend); m_targetrenderer = new TargetRenderer(m_renderbackend); m_renderers.push_back(new InstanceRenderer(m_renderbackend, 10)); m_renderers.push_back(new GridRenderer(m_renderbackend, 20)); m_renderers.push_back(new CellSelectionRenderer(m_renderbackend, 30)); m_renderers.push_back(new BlockingInfoRenderer(m_renderbackend, 40)); m_renderers.push_back(new FloatingTextRenderer(m_renderbackend, 50)); m_renderers.push_back(new QuadTreeRenderer(m_renderbackend, 60)); m_renderers.push_back(new CoordinateRenderer(m_renderbackend, 70)); m_renderers.push_back(new GenericRenderer(m_renderbackend, 80)); m_renderers.push_back(new LightRenderer(m_renderbackend, 90)); m_renderers.push_back(new CellRenderer(m_renderbackend, 100)); FL_LOG(_log, "Creating model"); m_model = new Model(m_renderbackend, m_renderers); FL_LOG(_log, "Adding pathers to model"); m_model->adoptPather(new RoutePather()); FL_LOG(_log, "Adding grid prototypes to model"); m_model->adoptCellGrid(new SquareGrid()); m_model->adoptCellGrid(new HexGrid()); m_cursor = new Cursor(m_renderbackend); FL_LOG(_log, "Engine initialized"); } Engine::~Engine() { if( !m_destroyed ) { destroy(); } } void Engine::destroy() { FL_LOG(_log, "Destructing engine"); delete m_cursor; delete m_model; delete m_soundmanager; delete m_guimanager; delete m_animationmanager; delete m_imagemanager; delete m_soundclipmanager; delete m_eventmanager; // properly remove all the renderers created during init delete m_offrenderer; delete m_targetrenderer; std::vector::iterator rendererIter = m_renderers.begin(); for ( ; rendererIter != m_renderers.end(); ++rendererIter) { delete *rendererIter; } m_renderers.clear(); delete m_renderbackend; delete m_vfs; delete m_timemanager; TTF_Quit(); SDL_Quit(); #ifdef USE_COCOA objc_msgSend(m_autoreleasePool, sel_registerName("release")); #endif FL_LOG(_log, "================== Engine destructed =================="); m_destroyed = true; //delete m_logmanager; } void Engine::initializePumping() { m_eventmanager->processEvents(); } void Engine::pump() { m_renderbackend->startFrame(); m_eventmanager->processEvents(); m_timemanager->update(); m_renderbackend->clearBackBuffer(); m_targetrenderer->render(); if (m_model->getActiveCameraCount() == 0) { m_offrenderer->render(); } else { m_model->update(); } if (m_guimanager) { m_guimanager->turn(); } m_cursor->draw(); m_renderbackend->endFrame(); } void Engine::finalizePumping() { // nothing here at the moment.. } void Engine::addChangeListener(IEngineChangeListener* listener) { m_changelisteners.push_back(listener); } void Engine::removeChangeListener(IEngineChangeListener* listener) { std::vector::iterator i = m_changelisteners.begin(); while (i != m_changelisteners.end()) { if ((*i) == listener) { m_changelisteners.erase(i); return; } ++i; } } }//FIFE /* vim: set noexpandtab: set shiftwidth=2: set tabstop=2: */ fifengine-0.4.1/engine/core/controller/engine.h000066400000000000000000000151531304641216200214500ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_ENGINE_H #define FIFE_ENGINE_H // Standard C++ library includes #include #include #include // Platform specific includes #ifdef USE_COCOA #include #endif // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "enginesettings.h" #include "video/devicecaps.h" namespace FIFE { class SoundManager; class RenderBackend; class IGUIManager; class VFS; class VFSSourceFactory; class EventManager; class TimeManager; class Model; class LogManager; class Cursor; class RendererBase; class Image; class ImageManager; class AnimationManager; class SoundClipManager; class OffRenderer; class TargetRenderer; class IEngineChangeListener { public: virtual ~IEngineChangeListener() {} /** Screen mode has been changed */ virtual void onScreenModeChanged(const ScreenMode& newmode) = 0; }; /** Engine acts as a controller to the whole system * Responsibilities of the engine are: * - Construct and initialize engine internals * - Clean-up when the program ends * - Act as an entry point to the engine subsystems */ class Engine { public: /** Constructor */ Engine(); /** Destructor */ virtual ~Engine(); /** Gets settings class for engine */ EngineSettings& getSettings(); /** Gets device capabilities */ const DeviceCaps& getDeviceCaps() const; /** Changes the screen mode. * This should be called instead of the renderer's setScreenMode() function. * It takes care of any objects that need to be re-created after switching * screen modes. * * @param mode A valid ScreenMode retrieved from FIFE::DeviceCaps::getNearestScreenMode() */ void changeScreenMode(const ScreenMode& mode); /** Initializes the engine */ void init(); /** Explicit destruction of engine */ void destroy(); /** Initializes the continuous processing of the engine * Call this only once in your program */ void initializePumping(); /** Finalizes the continuous processing of the engine * Call this only once in your program, after you have called * initializePumping + (pump() * N times) */ void finalizePumping(); /** Runs one cycle for the engine */ void pump(); /** Provides access point to the SoundManager */ SoundManager* getSoundManager() const { return m_soundmanager; } /** Provides access point to the EventManager */ EventManager* getEventManager() const { return m_eventmanager; } /** Provides access point to the TimeManager */ TimeManager* getTimeManager() const { return m_timemanager; } /** Sets the GUI Manager to use. Engine takes * ownership of the manager so DONT DELETE IT! */ void setGuiManager(IGUIManager* guimanager) { m_guimanager = guimanager; } /** Provides access point to the GUI Manager */ IGUIManager* getGuiManager() const { return m_guimanager; } /** Provides access point to the ImageManager */ ImageManager* getImageManager() const { return m_imagemanager; } /** Provides access point to the ImageManager */ AnimationManager* getAnimationManager() const { return m_animationmanager; } /** Provides access point to the SoundClipManager */ SoundClipManager* getSoundClipManager() const { return m_soundclipmanager; } /** Provides access point to the RenderBackend */ RenderBackend* getRenderBackend() const { return m_renderbackend; } /** Provides access point to the Model */ Model* getModel() const { return m_model; } /** Provides access point to the LogManager */ LogManager* getLogManager() const { return m_logmanager; } /** Provides access point to the VFS */ VFS* getVFS() const { return m_vfs; } /** Returns cursor used in the engine */ Cursor* getCursor() const { return m_cursor; } /** Provides access point to the OffRenderer */ OffRenderer* getOffRenderer() const { return m_offrenderer; } /** Provides access point to the TargetRenderer */ TargetRenderer* getTargetRenderer() const { return m_targetrenderer; } /** Adds new change listener * @param listener to add */ void addChangeListener(IEngineChangeListener* listener); /** Removes associated change listener * @param listener to remove */ void removeChangeListener(IEngineChangeListener* listener); private: RenderBackend* m_renderbackend; IGUIManager* m_guimanager; EventManager* m_eventmanager; SoundManager* m_soundmanager; TimeManager* m_timemanager; ImageManager* m_imagemanager; AnimationManager* m_animationmanager; SoundClipManager* m_soundclipmanager; VFS* m_vfs; Model* m_model; LogManager* m_logmanager; Cursor* m_cursor; bool m_destroyed; EngineSettings m_settings; DeviceCaps m_devcaps; ScreenMode m_screenMode; OffRenderer* m_offrenderer; TargetRenderer* m_targetrenderer; std::vector m_renderers; std::vector m_changelisteners; #ifdef USE_COCOA id m_autoreleasePool; #endif }; }//FIFE #endif fifengine-0.4.1/engine/core/controller/engine.i000066400000000000000000000137001304641216200214450ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "controller/engine.h" %} namespace FIFE { class SoundManager; class EventManager; class TimeManager; class IGUIManager; class GUIChanManager; class RenderBackend; class Model; class LogManager; class GuiFont; class VFS; class Cursor; class RendererBase; class DeviceCaps; class ScreenMode; class Image; class ImageManager; class AnimationManager; class SoundClipManager; class OffRenderer; class TargetRenderer; class EngineSettings { public: ~EngineSettings(); void setBitsPerPixel(uint8_t bitsperpixel); uint8_t getBitsPerPixel() const; std::vector getPossibleBitsPerPixel() const; void setFullScreen(bool fullscreen); bool isFullScreen() const; void setRefreshRate(uint16_t rate); uint16_t getRefreshRate() const; void setDisplay(uint8_t display); uint8_t getDisplay() const; void setVSync(bool vsync); bool isVSync() const; void setSDLDriver(const std::string& driver); const std::string& getSDLDriver() const; void setInitialVolume(float volume); float getInitialVolume() const; float getMaxVolume() const; void setRenderBackend(const std::string& renderbackend); const std::string& getRenderBackend() const; std::vector getPossibleRenderBackends(); void setSDLRemoveFakeAlpha(bool sdlremovefakealpha); bool isSDLRemoveFakeAlpha() const; void setGLCompressImages(bool oglcompressimages); bool isGLCompressImages() const; void setGLUseFramebuffer(bool ogluseframebuffer); bool isGLUseFramebuffer() const; void setGLUseNPOT(bool oglusenpot); bool isGLUseNPOT() const; void setGLTextureFiltering(FIFE::TextureFiltering filter); FIFE::TextureFiltering getGLTextureFiltering() const; void setGLUseMipmapping(bool mipmapping); bool isGLUseMipmapping() const; void setGLUseMonochrome(bool monochrome); bool isGLUseMonochrome() const; void setGLUseDepthBuffer(bool buffer); bool isGLUseDepthBuffer() const; void setGLAlphaTestValue(float alpha); float getGLAlphaTestValue() const; void setScreenWidth(uint16_t screenwidth); uint16_t getScreenWidth() const; void setScreenHeight(uint16_t screenheight); uint16_t getScreenHeight() const; void setDefaultFontPath(const std::string& defaultfontpath); const std::string& getDefaultFontPath() const; void setDefaultFontSize(uint16_t defaultfontsize); uint16_t getDefaultFontSize() const; void setDefaultFontGlyphs(const std::string& defaultfontglyphs); const std::string& getDefaultFontGlyphs() const; void setWindowTitle(const std::string& title); const std::string& getWindowTitle() const; void setWindowIcon(const std::string& icon); const std::string& getWindowIcon() const; void setColorKeyEnabled(bool colorkeyenable); bool isColorKeyEnabled() const; void setColorKey(uint8_t r, uint8_t g, uint8_t b); const SDL_Color& getColorKey() const; void setVideoDriver(const std::string& driver); const std::string& getVideoDriver() const; void setLightingModel(uint32_t lighting); uint32_t getLightingModel() const; void setFrameLimitEnabled(bool limited); bool isFrameLimitEnabled() const; void setFrameLimit(uint16_t framelimit); uint16_t getFrameLimit() const; void setMouseSensitivity(float sens); float getMouseSensitivity() const; void setMouseAccelerationEnabled(bool acceleration); bool isMouseAccelerationEnabled() const; private: EngineSettings(); }; %feature("director") IEngineChangeListener; class IEngineChangeListener { public: virtual ~IEngineChangeListener() {} virtual void onScreenModeChanged(const ScreenMode& newmode) = 0; }; class Engine { public: Engine(); virtual ~Engine(); void initializePumping(); void finalizePumping(); void pump(); EngineSettings& getSettings(); const DeviceCaps& getDeviceCaps() const; void changeScreenMode(const ScreenMode& mode); void init(); void destroy(); SoundManager* getSoundManager(); EventManager* getEventManager(); TimeManager* getTimeManager(); void setGuiManager(IGUIManager* guimanager); IGUIManager* getGuiManager(); ImageManager* getImageManager(); AnimationManager* getAnimationManager(); SoundClipManager* getSoundClipManager(); RenderBackend* getRenderBackend(); Model* getModel(); LogManager* getLogManager(); VFS* getVFS(); Cursor* getCursor(); OffRenderer* getOffRenderer(); TargetRenderer* getTargetRenderer(); void addChangeListener(IEngineChangeListener* listener); void removeChangeListener(IEngineChangeListener* listener); }; } fifengine-0.4.1/engine/core/controller/enginesettings.cpp000066400000000000000000000214651304641216200235670ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include #include // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/exception.h" #include "util/log/logger.h" #include "enginesettings.h" namespace FIFE { /** Logger to use for this source file. * @relates Logger */ static Logger _log(LM_CONTROLLER); const float MAXIMUM_VOLUME = 10.0; EngineSettings::EngineSettings(): m_bitsperpixel(0), m_fullscreen(false), m_refreshRate(60), m_displayIndex(0), m_vSync(false), m_renderDriver(""), m_initialvolume(MAXIMUM_VOLUME / 2), m_renderbackend("SDL"), m_sdlremovefakealpha(false), m_oglcompressimages(false), m_ogluseframebuffer(true), m_oglusenpot(true), m_oglMipmapping(false), m_oglMonochrome(false), m_oglTextureFilter(TEXTURE_FILTER_NONE), m_oglDepthBuffer(false), m_alphaTestValue(0.3), m_screenwidth(800), m_screenheight(600), m_windowtitle("FIFE"), m_windowicon(""), m_defaultfontpath("fonts/FreeSans.ttf"), m_defaultfontsize(8), m_defaultfontglyphs("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,!?-+/():;%&`'*#=[]\\\""), m_iscolorkeyenabled(false), m_lighting(0), m_isframelimit(false), m_framelimit(60), m_mousesensitivity(0.0), m_mouseacceleration(false) { m_colorkey.r = 255; m_colorkey.g = 0; m_colorkey.b = 255; #if defined( __unix__ ) m_videodriver = "x11"; #elif defined( WIN32 ) m_videodriver = "windib"; #elif defined( __APPLE_CC__ ) m_videodriver = "x11"; #else m_videodriver = ""; #endif } EngineSettings::~EngineSettings() { } void EngineSettings::setBitsPerPixel(uint8_t bitsperpixel) { std::vector pv = getPossibleBitsPerPixel(); std::vector::iterator i = std::find(pv.begin(), pv.end(), bitsperpixel); if (i != pv.end()) { m_bitsperpixel = bitsperpixel; return; } FL_WARN(_log, LMsg("EngineSettings::setBitsPerPixel() - ") << " Tried to set screen bpp to an unsupporded value of " << bitsperpixel << ". Setting bpp to use the default value of 0 (the current screen bpp)"); m_bitsperpixel = 0; //default value } std::vector EngineSettings::getPossibleBitsPerPixel() const { std::vector tmp; tmp.push_back(0); tmp.push_back(16); tmp.push_back(24); tmp.push_back(32); return tmp; } void EngineSettings::setInitialVolume(float volume) { if (volume > getMaxVolume() || volume < 0) { FL_WARN(_log, LMsg("EngineSettings::setInitialVolume() - ") << " Tried to set initial volume to an unsupporded value of " << volume << ". Setting volume to the default value of 5 (minumum is 0, maximum is 10)"); m_initialvolume = 5.0; return; } m_initialvolume = volume; } float EngineSettings::getMaxVolume() const { return MAXIMUM_VOLUME; } void EngineSettings::setRenderBackend(const std::string& renderbackend) { std::vector pv = getPossibleRenderBackends(); std::vector::iterator i = std::find(pv.begin(), pv.end(), renderbackend); if (i != pv.end()) { m_renderbackend = renderbackend; return; } FL_WARN(_log, LMsg("EngineSettings::setRenderBackend() - ") << renderbackend << " is not a valid render backend " << ". Setting the render backend to the default value of \"SDL\"."); m_renderbackend = "SDL"; } std::vector EngineSettings::getPossibleRenderBackends() { std::vector tmp; tmp.push_back("SDL"); tmp.push_back("OpenGL"); return tmp; } void EngineSettings::setSDLRemoveFakeAlpha(bool sdlremovefakealpha) { m_sdlremovefakealpha = sdlremovefakealpha; } void EngineSettings::setGLCompressImages(bool oglcompressimages) { m_oglcompressimages = oglcompressimages; } void EngineSettings::setGLUseFramebuffer(bool ogluseframebuffer) { m_ogluseframebuffer = ogluseframebuffer; } void EngineSettings::setGLUseNPOT(bool oglusenpot) { m_oglusenpot = oglusenpot; } void EngineSettings::setGLTextureFiltering(TextureFiltering filter) { m_oglTextureFilter = filter; } TextureFiltering EngineSettings::getGLTextureFiltering() const { return m_oglTextureFilter; } void EngineSettings::setGLUseMipmapping(bool mipmapping) { m_oglMipmapping = mipmapping; } bool EngineSettings::isGLUseMipmapping() const { return m_oglMipmapping; } void EngineSettings::setGLUseMonochrome(bool monochrome) { m_oglMonochrome = monochrome; } bool EngineSettings::isGLUseMonochrome() const { return m_oglMonochrome; } void EngineSettings::setGLUseDepthBuffer(bool buffer) { m_oglDepthBuffer = buffer; } bool EngineSettings::isGLUseDepthBuffer() const { return m_oglDepthBuffer; } void EngineSettings::setGLAlphaTestValue(float alpha) { m_alphaTestValue = alpha; } float EngineSettings::getGLAlphaTestValue() const { return m_alphaTestValue; } void EngineSettings::setScreenWidth(uint16_t screenwidth) { m_screenwidth = screenwidth; } void EngineSettings::setScreenHeight(uint16_t screenheight) { m_screenheight = screenheight; } void EngineSettings::setDefaultFontPath(const std::string& defaultfontpath) { m_defaultfontpath = defaultfontpath; } void EngineSettings::setDefaultFontSize(uint16_t defaultfontsize) { m_defaultfontsize = defaultfontsize; } void EngineSettings::setDefaultFontGlyphs(const std::string& defaultfontglyphs) { m_defaultfontglyphs = defaultfontglyphs; } void EngineSettings::setWindowTitle(const std::string& title) { m_windowtitle = title; } void EngineSettings::setWindowIcon(const std::string& icon) { m_windowicon = icon; } void EngineSettings::setColorKeyEnabled(bool colorkeyenable) { m_iscolorkeyenabled = colorkeyenable; } bool EngineSettings::isColorKeyEnabled() const { return m_iscolorkeyenabled; } void EngineSettings::setColorKey(uint8_t r, uint8_t g, uint8_t b) { m_colorkey.r = r; m_colorkey.g = g; m_colorkey.b = b; } const SDL_Color& EngineSettings::getColorKey() const { return m_colorkey; } void EngineSettings::setVideoDriver(const std::string& driver) { //TODO: validate the video driver m_videodriver = driver; } const std::string& EngineSettings::getVideoDriver() const { return m_videodriver; } void EngineSettings::setLightingModel(uint32_t lighting) { if (lighting <= 2) { m_lighting = lighting; return; } FL_WARN(_log, LMsg("EngineSettings::setLightingModel() - ") << lighting << " is not a valid lighting model." << ". Setting the lighting model to the default value of 0 (off)"); m_lighting = 0; } void EngineSettings::setFrameLimitEnabled(bool limited) { m_isframelimit = limited; } bool EngineSettings::isFrameLimitEnabled() const { return m_isframelimit; } void EngineSettings::setFrameLimit(uint16_t framelimit) { m_framelimit = framelimit; } uint16_t EngineSettings::getFrameLimit() const { return m_framelimit; } void EngineSettings::setMouseSensitivity(float sens) { m_mousesensitivity = sens; } float EngineSettings::getMouseSensitivity() const { return m_mousesensitivity; } void EngineSettings::setMouseAccelerationEnabled(bool acceleration) { m_mouseacceleration = acceleration; } bool EngineSettings::isMouseAccelerationEnabled() const { return m_mouseacceleration; } } fifengine-0.4.1/engine/core/controller/enginesettings.h000066400000000000000000000264271304641216200232370ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_ENGINESETTINGS_H #define FIFE_ENGINESETTINGS_H // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/exception.h" #include "video/renderbackend.h" namespace FIFE { class NotSupported; /** This class defines the engine settings on engine init * */ class EngineSettings { public: /** Constructor */ EngineSettings(); /** Destructor */ ~EngineSettings(); /** Sets bits per pixel * @see getPossibleBitsPerPixel */ void setBitsPerPixel(uint8_t bitsperpixel); /** Gets currently set bits per pixel value */ uint8_t getBitsPerPixel() const { return m_bitsperpixel; } /** Gets all possible bits per pixel values */ std::vector getPossibleBitsPerPixel() const; /** Sets fullscreen / windowed mode */ void setFullScreen(bool fullscreen) { m_fullscreen = fullscreen; } /** True, if set to fullscreen. False = windowed */ bool isFullScreen() const { return m_fullscreen; } /** Sets refresh rate */ void setRefreshRate(uint16_t rate) { m_refreshRate = rate; } /** Gets the refresh rate */ uint16_t getRefreshRate() const { return m_refreshRate; } /** Sets display index, starts with 0 */ void setDisplay(uint8_t display) { m_displayIndex = display; } /** Gets the display index, starts with 0 */ uint8_t getDisplay() const { return m_displayIndex; } /** Sets Vsync. Synchronized updates with vertical refresh rate. */ void setVSync(bool vsync) { m_vSync = vsync; } /** True, if vsync is enable, otherwise false. */ bool isVSync() const { return m_vSync; } /** Sets the used SDL render driver. Values depends on platform * and is useless for the OpenGL backend. * If none is set, SDL use the first one that supports the requested flags. * @see DeviceCaps::getAvailableRenderDrivers() */ void setSDLDriver(const std::string& driver) { m_renderDriver = driver; } /** Gets the used SDL render driver. * Default is a empty string, that indicates SDL chooses the driver. * @see setSDLDriver() */ const std::string& getSDLDriver() const { return m_renderDriver; } /** Sets initial engine sound volume * @see getInitialMaxVolume */ void setInitialVolume(float volume); /** Gets initial engine sound volume */ float getInitialVolume() const { return m_initialvolume; } /** Gets maximum volume that can be set */ float getMaxVolume() const; /** Sets name for renderbackend * @see getPossibleRenderBackends */ void setRenderBackend(const std::string& renderbackend); /** Gets currently set renderbackend name */ const std::string& getRenderBackend() const { return m_renderbackend; } /** Gets currently set renderbackend name */ std::string getRenderBackend() { return m_renderbackend; } /** Gets all possible renderbackend names */ std::vector getPossibleRenderBackends(); /** Sets if fake alpha is removed in SDL renderbackend */ void setSDLRemoveFakeAlpha(bool sdlremovefakealpha); /** Tells if fake alpha is removed in SDL renderbackend */ bool isSDLRemoveFakeAlpha() const { return m_sdlremovefakealpha; } /** Sets if images are compress by video driver in OpenGL renderbackend */ void setGLCompressImages(bool oglcompressimages); /** Tells if images are compress by video driver in OpenGL renderbackend */ bool isGLCompressImages() const { return m_oglcompressimages; } /** Sets if OpenGL renderbackend should use FramebufferObject (when available) */ void setGLUseFramebuffer(bool ogluseframebuffer); /** Tells if OpenGL renderbackend should use FramebufferObject */ bool isGLUseFramebuffer() const { return m_ogluseframebuffer; } /** Sets if OpenGL renderbackend should use NPOT Textures (when available) */ void setGLUseNPOT(bool oglusenpot); /** Tells if OpenGL renderbackend should use NPOT Textures */ bool isGLUseNPOT() const { return m_oglusenpot; } /** Sets texture filtering method for OpenGL renderbackend. */ void setGLTextureFiltering(TextureFiltering filter); /** Gets current texture filter which uses OpenGL. */ TextureFiltering getGLTextureFiltering() const; /** Sets if OpenGL renderbackend should use mipmapping. */ void setGLUseMipmapping(bool mipmapping); /** Tells if OpenGL renderbackend should use mipmapping. */ bool isGLUseMipmapping() const; /** Sets if OpenGL renderbackend should render only monochrome. */ void setGLUseMonochrome(bool monochrome); /** Tells if OpenGL renderbackend should render only monochrome. */ bool isGLUseMonochrome() const; /** Sets if OpenGL renderbackend should use depth buffer. */ void setGLUseDepthBuffer(bool buffer); /** Tells if OpenGL renderbackend should use depth buffer. */ bool isGLUseDepthBuffer() const; /** Sets alpha test value for OpenGL renderbackend. */ void setGLAlphaTestValue(float alpha); /** Gets current alpha test value which uses OpenGL. */ float getGLAlphaTestValue() const; /** Sets screen width (pixels) */ void setScreenWidth(uint16_t screenwidth); /** Gets screen width (pixels) */ uint16_t getScreenWidth() const { return m_screenwidth; } /** Sets screen height (pixels) */ void setScreenHeight(uint16_t screenheight); /** Gets screen height (pixels) */ uint16_t getScreenHeight() const { return m_screenheight; } /** Sets path for default font */ void setDefaultFontPath(const std::string& defaultfontpath); /** Gets current path for default font */ const std::string& getDefaultFontPath() const { return m_defaultfontpath; } /** Gets current path for default font */ std::string getDefaultFontPath() { return m_defaultfontpath; } /** Sets size for default font */ void setDefaultFontSize(uint16_t defaultfontsize); /** Gets size for default font */ uint16_t getDefaultFontSize() const { return m_defaultfontsize; } /** Sets glyphs for default font */ void setDefaultFontGlyphs(const std::string& defaultfontglyphs); /** Gets current glyphs for default font */ const std::string& getDefaultFontGlyphs() const { return m_defaultfontglyphs; } /** Gets current glyphs for default font */ std::string getDefaultFontGlyphs() { return m_defaultfontglyphs; } /** Sets the title of the window */ void setWindowTitle(const std::string& title); /** Gets the current window title */ const std::string& getWindowTitle() const { return m_windowtitle; } /** Gets the current window title */ std::string getWindowTitle() { return m_windowtitle; } /** Sets the icon that appears in the window title bar */ void setWindowIcon(const std::string& icon); /** Gets the icon in the window title bar */ const std::string& getWindowIcon() const { return m_windowicon; } /** Gets the icon in the window title bar */ std::string getWindowIcon() { return m_windowicon; } /** Sets whether to use the colorkey feature */ void setColorKeyEnabled(bool colorkeyenable); /** Gets whether the colorkey feature is in use */ bool isColorKeyEnabled() const; /** Sets the global colorkey to use for images */ void setColorKey(uint8_t r, uint8_t g, uint8_t b); /** Gets the global colorkey setting */ const SDL_Color& getColorKey() const; /** Sets the video driver. Values depends on platform. * If none is set, SDL chooses it. * @see DeviceCaps::getAvailableVideoDrivers() */ void setVideoDriver(const std::string& driver); /** Gets the video driver. * Default is a empty string. * @see setVideoDriver() */ const std::string& getVideoDriver() const; /** Sets the light model */ void setLightingModel(uint32_t lighting); /** Gets the currently set light model */ uint32_t getLightingModel() const { return m_lighting; } /** Sets whether to use the frame limiter */ void setFrameLimitEnabled(bool limited); /** Gets whether the frame limiter is in use */ bool isFrameLimitEnabled() const; /** Sets the frame limit */ void setFrameLimit(uint16_t framelimit); /** Gets the frame limit */ uint16_t getFrameLimit() const; /** Sets mouse sensitivity */ void setMouseSensitivity(float sens); /** Gets mouse sensitivity */ float getMouseSensitivity() const; /** Sets mouse acceleration * if mouse acceleration is enabled, * then the mouse sensitivity is used as speed max. */ void setMouseAccelerationEnabled(bool acceleration); /** Returns if mouse acceleration is enabled or not. * * @return True if mouse acceleration is enabled, false if not. */ bool isMouseAccelerationEnabled() const; private: uint8_t m_bitsperpixel; bool m_fullscreen; uint16_t m_refreshRate; uint8_t m_displayIndex; bool m_vSync; std::string m_renderDriver; float m_initialvolume; std::string m_renderbackend; bool m_sdlremovefakealpha; bool m_oglcompressimages; bool m_ogluseframebuffer; bool m_oglusenpot; bool m_oglMipmapping; bool m_oglMonochrome; TextureFiltering m_oglTextureFilter; bool m_oglDepthBuffer; float m_alphaTestValue; uint16_t m_screenwidth; uint16_t m_screenheight; std::string m_windowtitle; std::string m_windowicon; std::string m_defaultfontpath; uint16_t m_defaultfontsize; std::string m_defaultfontglyphs; bool m_iscolorkeyenabled; SDL_Color m_colorkey; std::string m_videodriver; uint32_t m_lighting; bool m_isframelimit; uint16_t m_framelimit; float m_mousesensitivity; bool m_mouseacceleration; }; }//FIFE #endif fifengine-0.4.1/engine/core/eventchannel/000077500000000000000000000000001304641216200203145ustar00rootroot00000000000000fifengine-0.4.1/engine/core/eventchannel/base/000077500000000000000000000000001304641216200212265ustar00rootroot00000000000000fifengine-0.4.1/engine/core/eventchannel/base/ec_event.h000066400000000000000000000076601304641216200232000ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ /*************************************************************************** * Note! FIFE event channel borrows heavily from ideas pf Guichan library * * version 0.6 * ***************************************************************************/ #ifndef FIFE_EVENTCHANNEL_EVENT_H #define FIFE_EVENTCHANNEL_EVENT_H // Standard C++ library includes // #include #include // 3rd party library includes // #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder // #include "eventchannel/source/ec_ieventsource.h" namespace FIFE { /** Base class for all events */ class Event { public: /** Constructor. */ Event(): m_isconsumed(false), m_eventsource(NULL), m_timestamp(SDL_GetTicks()) {} /** Destructor. */ virtual ~Event() {} /** Marks the event as consumed. */ virtual void consume() { m_isconsumed = true; } /** Checks if the event is consumed. * @return true if the event is consumed, false otherwise. */ virtual bool isConsumed() const { return m_isconsumed; } /** Gets the source of the event. */ virtual IEventSource* getSource() const { return m_eventsource; } /** Sets the source of the event. */ virtual void setSource(IEventSource* source) { m_eventsource = source; } /** Gets the timestamp of the event */ virtual int32_t getTimeStamp() const { return m_timestamp; } /** Sets the timestamp of the event */ virtual void setTimeStamp(int32_t timestamp ) { m_timestamp = timestamp; } /** Gets the name of the event */ virtual const std::string& getName() const { const static std::string eventName("Event"); return eventName; } /** Gets attribute string of the event */ virtual std::string getAttrStr() const { std::stringstream ss; ss << "consumed = " << m_isconsumed << ", "; ss << "src = " << m_eventsource << ", "; ss << "timestamp = " << m_timestamp; return ss.str(); } /** Gets the debugstring of the event */ virtual std::string getDebugString() const { std::stringstream ss; ss << getName() << std::endl; ss << getAttrStr() << std::endl; return ss.str(); } private: bool m_isconsumed; IEventSource* m_eventsource; int32_t m_timestamp; }; } //FIFE #endif fifengine-0.4.1/engine/core/eventchannel/base/ec_inputevent.h000066400000000000000000000104001304641216200242420ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_EVENTCHANNEL_INPUTEVENT_H #define FIFE_EVENTCHANNEL_INPUTEVENT_H // Standard C++ library includes // // 3rd party library includes // // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder // #include "ec_event.h" namespace FIFE { /** Base class for input events (like mouse and keyboard) */ class InputEvent: public Event { public: /** Constructor. */ InputEvent(): Event(), m_consumedbywidgets(false), m_isshiftpressed(false), m_iscontrolpressed(false), m_isaltpressed(false), m_ismetapressed(false) {} /** Destructor. */ ~InputEvent() {} /** Checks whether alt is pressed. */ virtual bool isAltPressed() const { return m_isaltpressed; } virtual void setAltPressed(bool pressed) { m_isaltpressed = pressed; } /** Checks whether control is pressed. */ virtual bool isControlPressed() const { return m_iscontrolpressed; } virtual void setControlPressed(bool pressed) { m_iscontrolpressed = pressed; } /** Checks whether meta is pressed. */ virtual bool isMetaPressed() const { return m_ismetapressed; } virtual void setMetaPressed(bool pressed) { m_ismetapressed = pressed; } /** Checks whether shift is pressed. */ virtual bool isShiftPressed() const { return m_isshiftpressed; } virtual void setShiftPressed(bool pressed) { m_isshiftpressed = pressed; } /** Marks events as consumed by widget library. */ virtual void consumedByWidgets() { m_consumedbywidgets = true; } virtual bool isConsumedByWidgets() const { return m_consumedbywidgets; } virtual void consume() { Event::consume(); } virtual bool isConsumed() const { return Event::isConsumed(); } virtual IEventSource* getSource() const { return Event::getSource(); } virtual void setSource(IEventSource* source) { Event::setSource(source); } virtual int32_t getTimeStamp() const { return Event::getTimeStamp(); } virtual void setTimeStamp(int32_t timestamp ) { Event::setTimeStamp(timestamp); } virtual const std::string& getName() const { const static std::string eventName("InputEvent"); return eventName; } virtual std::string getDebugString() const { return Event::getDebugString(); } virtual std::string getAttrStr() const { std::stringstream ss; ss << Event::getAttrStr() << std::endl; ss << "shift = " << m_isshiftpressed << ", "; ss << "ctrl = " << m_iscontrolpressed << ", "; ss << "alt = " << m_isaltpressed << ", "; ss << "meta = " << m_ismetapressed; return ss.str(); } private: bool m_consumedbywidgets; bool m_isshiftpressed; bool m_iscontrolpressed; bool m_isaltpressed; bool m_ismetapressed; }; } //FIFE #endif fifengine-0.4.1/engine/core/eventchannel/command/000077500000000000000000000000001304641216200217325ustar00rootroot00000000000000fifengine-0.4.1/engine/core/eventchannel/command/ec_command.h000066400000000000000000000065061304641216200241770ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_EVENTCHANNEL_COMMAND_H #define FIFE_EVENTCHANNEL_COMMAND_H // Standard C++ library includes // // 3rd party library includes // // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder // #include "eventchannel/base/ec_event.h" #include "ec_commandids.h" namespace FIFE { /** Class for commands * Commands are arbitrary events e.g. send from one subsystem to another */ class Command: public Event { public: /** Constructor. */ Command(): Event(), m_commandtype(CMD_UNKNOWN), m_code(0) {} /** Destructor. */ virtual ~Command() {} /** Gets the type of this command * @return type of this command */ CommandType getCommandType() const { return m_commandtype; } void setCommandType(CommandType type) { m_commandtype = type; } /** Gets the code of this command. Meaning of code depends on the command type * @return code of this command */ int32_t getCode() const { return m_code; } void setCode(int32_t code) { m_code = code; } virtual void consume() { Event::consume(); } virtual bool isConsumed() const { return Event::isConsumed(); } virtual IEventSource* getSource() const { return Event::getSource(); } virtual void setSource(IEventSource* source) { Event::setSource(source); } virtual int32_t getTimeStamp() const { return Event::getTimeStamp(); } virtual void setTimeStamp(int32_t timestamp ) { Event::setTimeStamp(timestamp); } virtual const std::string& getName() const { const static std::string eventName("Command"); return eventName; } virtual std::string getDebugString() const { return Event::getDebugString(); } private: CommandType m_commandtype; int32_t m_code; }; } //FIFE #endif fifengine-0.4.1/engine/core/eventchannel/command/ec_commandids.h000066400000000000000000000045141304641216200246740ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_EVENTCHANNEL_ICOMMANDIDS_H #define FIFE_EVENTCHANNEL_ICOMMANDIDS_H // Standard C++ library includes // // 3rd party library includes // #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder // namespace FIFE { /** Types for different commands */ enum CommandType { CMD_UNKNOWN = -1, CMD_QUIT_GAME = SDL_WINDOWEVENT_CLOSE, CMD_MOUSE_FOCUS_GAINED = SDL_WINDOWEVENT_ENTER, CMD_MOUSE_FOCUS_LOST = SDL_WINDOWEVENT_LEAVE, CMD_INPUT_FOCUS_GAINED = SDL_WINDOWEVENT_FOCUS_GAINED, CMD_INPUT_FOCUS_LOST = SDL_WINDOWEVENT_FOCUS_LOST, CMD_APP_RESTORED = SDL_WINDOWEVENT_SHOWN, CMD_APP_ICONIFIED = SDL_WINDOWEVENT_HIDDEN, }; } //FIFE #endif fifengine-0.4.1/engine/core/eventchannel/command/ec_icommandcontroller.h000066400000000000000000000060721304641216200264520ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_EVENTCHANNEL_ICOMMAND_CONTROLLER_H #define FIFE_EVENTCHANNEL_ICOMMAND_CONTROLLER_H // Standard C++ library includes // // 3rd party library includes // // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder // #include "ec_icommandlistener.h" namespace FIFE { class Command; /** Controller provides a way to receive events from the system * Using this interface, clients can subscribe themselves to receive events * Also command sending is possible */ class ICommandController { public: /** Adds a listener to the back of the listener deque * Listener will be notified via the corresponding events * @param listener listener to add */ virtual void addCommandListener(ICommandListener* listener) = 0; /** Adds a listener to the front of the listener deque * Listener will be notified via the corresponding events * @param listener listener to add */ virtual void addCommandListenerFront(ICommandListener* listener) = 0; /** Removes an added listener from the controller. * Listener will not be notified anymore via the corresponding events * @param listener listener to remove */ virtual void removeCommandListener(ICommandListener* listener) = 0; /** Use this method to send command to command listeners * @param command command to dispatch */ virtual void dispatchCommand(Command& command) = 0; virtual ~ICommandController() {} }; } //FIFE #endif fifengine-0.4.1/engine/core/eventchannel/command/ec_icommandlistener.h000066400000000000000000000045211304641216200261110ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_EVENTCHANNEL_ICOMMANDLISTENER_H #define FIFE_EVENTCHANNEL_ICOMMANDLISTENER_H // Standard C++ library includes // // 3rd party library includes // // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder // namespace FIFE { class Command; /** Listener of command events. * To be able to listen for commands you must make a class which inherits * from this class and implements the onCommand function. */ class ICommandListener { public: /** Called when a command is received from a command source * @param command command coming from command source */ virtual void onCommand(Command& command) = 0; virtual ~ICommandListener() {} }; } //FIFE #endif fifengine-0.4.1/engine/core/eventchannel/drop/000077500000000000000000000000001304641216200212605ustar00rootroot00000000000000fifengine-0.4.1/engine/core/eventchannel/drop/ec_dropevent.h000066400000000000000000000062141304641216200241110ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_EVENTCHANNEL_DROPEVENT_H #define FIFE_EVENTCHANNEL_DROPEVENT_H // Standard C++ library includes // // 3rd party library includes // // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder // #include "eventchannel/base/ec_inputevent.h" #include "eventchannel/source/ec_ieventsource.h" namespace FIFE { /** Class for drop events */ class DropEvent: public InputEvent { public: /** Constructor */ DropEvent(): InputEvent(), m_path("") {} /** Destructor. */ virtual ~DropEvent() {} const std::string& getPath() const { return m_path; } void setPath(const std::string& path) { m_path = path; } virtual void consume() { InputEvent::consume(); } virtual bool isConsumed() const { return InputEvent::isConsumed(); } virtual void consumedByWidgets() { InputEvent::consumedByWidgets(); } virtual bool isConsumedByWidgets() const { return InputEvent::isConsumedByWidgets(); } virtual IEventSource* getSource() const { return InputEvent::getSource(); } virtual void setSource(IEventSource* source) { InputEvent::setSource(source); } virtual int32_t getTimeStamp() const { return InputEvent::getTimeStamp(); } virtual void setTimeStamp(int32_t timestamp ) { InputEvent::setTimeStamp(timestamp); } virtual const std::string& getName() const { const static std::string eventName("DropEvent"); return eventName; } virtual std::string getDebugString() const { return InputEvent::getDebugString(); } private: std::string m_path; }; } //FIFE #endif fifengine-0.4.1/engine/core/eventchannel/drop/ec_idropcontroller.h000066400000000000000000000054741304641216200253330ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_EVENTCHANNEL_IDROP_CONTROLLER_H #define FIFE_EVENTCHANNEL_IDROP_CONTROLLER_H // Standard C++ library includes // // 3rd party library includes // // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder // namespace FIFE { class IDropListener; /** Controller provides a way to receive events from the system * Using this interface, clients can subscribe themselves to receive events */ class IDropController { public: /** Adds a listener to the back of the listener deque * Listener will be notified via the corresponding events * @param listener listener to add */ virtual void addDropListener(IDropListener* listener) = 0; /** Adds a listener to the front of the listener deque * Listener will be notified via the corresponding events * @param listener listener to add */ virtual void addDropListenerFront(IDropListener* listener) = 0; /** Removes an added listener from the controller. * Listener will not be notified anymore via the corresponding events * @param listener listener to remove */ virtual void removeDropListener(IDropListener* listener) = 0; virtual ~IDropController() {} }; } //FIFE #endif fifengine-0.4.1/engine/core/eventchannel/drop/ec_idroplistener.h000066400000000000000000000044371304641216200247730ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_EVENTCHANNEL_IDROPLISTENER_H #define FIFE_EVENTCHANNEL_IDROPLISTENER_H // Standard C++ library includes // // 3rd party library includes // // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder // namespace FIFE { class DropEvent; /** Listener of drop events. * To be able to listen for drop events you must make a class which inherits * from this class and implements its functions. */ class IDropListener { public: /** Called on a file drop event. * @param evt DropEvent that describes the event. */ virtual void fileDropped(DropEvent& evt) = 0; virtual ~IDropListener() {} }; } //FIFE #endif fifengine-0.4.1/engine/core/eventchannel/eventchannel.i000066400000000000000000000204011304641216200231350ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "eventchannel/base/ec_event.h" #include "eventchannel/base/ec_inputevent.h" #include "eventchannel/command/ec_command.h" #include "eventchannel/command/ec_commandids.h" #include "eventchannel/command/ec_icommandlistener.h" #include "eventchannel/drop/ec_dropevent.h" #include "eventchannel/drop/ec_idroplistener.h" #include "eventchannel/key/ec_key.h" #include "eventchannel/key/ec_keyevent.h" #include "eventchannel/key/ec_ikeylistener.h" #include "eventchannel/key/ec_ikeyfilter.h" #include "eventchannel/text/ec_text.h" #include "eventchannel/text/ec_textevent.h" #include "eventchannel/text/ec_itextlistener.h" #include "eventchannel/source/ec_eventsourcetypes.h" #include "eventchannel/source/ec_ieventsource.h" #include "eventchannel/mouse/ec_mouseevent.h" #include "eventchannel/mouse/ec_imousefilter.h" #include "eventchannel/mouse/ec_imouselistener.h" #include "eventchannel/sdl/ec_isdleventlistener.h" #include "eventchannel/eventmanager.h" %} %include "eventchannel/key/ec_key.h" %include "eventchannel/text/ec_text.h" %include "eventchannel/source/ec_eventsourcetypes.h" %include "eventchannel/command/ec_commandids.h" namespace FIFE { %feature("director") IEventSource; class IEventSource { public: virtual EventSourceType getEventSourceType() = 0; virtual ~IEventSource(); }; class Event { public: virtual void consume(); virtual bool isConsumed() const; virtual IEventSource* getSource(); virtual int32_t getTimeStamp() const; virtual std::string getDebugString() const; virtual const std::string& getName() const; virtual ~Event() {} private: Event(); }; class InputEvent: public Event { public: virtual bool isConsumedByWidgets() const; virtual bool isAltPressed() const; virtual bool isControlPressed() const; virtual bool isMetaPressed() const; virtual bool isShiftPressed() const; virtual ~InputEvent() {} private: InputEvent(); }; class Command: public Event { public: Command(); virtual ~Command(); CommandType getCommandType(); void setCommandType(CommandType type); int32_t getCode() const; void setCode(int32_t code); virtual void setSource(IEventSource* source); virtual void setTimeStamp(int32_t timestamp); }; %feature("director") ICommandListener; class ICommandListener { public: virtual void onCommand(Command& command) = 0; virtual ~ICommandListener() {} }; class KeyEvent: public InputEvent { public: enum KeyEventType { UNKNOWN = -1, PRESSED = 0, RELEASED }; virtual KeyEventType getType() const; virtual bool isNumericPad() const; virtual const Key& getKey() const; virtual ~KeyEvent(); private: KeyEvent(); }; %feature("director") IKeyListener; class IKeyListener { public: virtual void keyPressed(KeyEvent& evt) = 0; virtual void keyReleased(KeyEvent& evt) = 0; virtual ~IKeyListener(); }; class TextEvent: public InputEvent { public: enum TextEventType { UNKNOWN = 0, INPUT = 1, EDIT = 2 }; virtual TextEventType getType() const; virtual const Text& getText() const; virtual ~TextEvent(); private: TextEvent(); }; %feature("director") ITextListener; class ITextListener { public: virtual void textInput(TextEvent& evt) = 0; virtual void textEdit(TextEvent& evt) = 0; virtual ~ITextListener(); }; %feature("director") ISdlEventListener; class ISdlEventListener { public: virtual bool onSdlEvent(SDL_Event& evt) = 0; virtual ~ISdlEventListener(); }; class MouseEvent: public InputEvent { public: enum MouseEventType { UNKNOWN_EVENT = -1, MOVED = 0, PRESSED, RELEASED, WHEEL_MOVED_DOWN, WHEEL_MOVED_UP, WHEEL_MOVED_RIGHT, WHEEL_MOVED_LEFT, CLICKED, ENTERED, EXITED, DRAGGED }; enum MouseButtonType { EMPTY = 0, LEFT = 1, RIGHT = 2, MIDDLE = 4, X1 = 8, X2 = 16, UNKNOWN_BUTTON = 32 }; virtual int32_t getX() const; virtual int32_t getY() const; virtual MouseEventType getType() const; virtual MouseButtonType getButton() const; virtual ~MouseEvent(); private: MouseEvent(); }; %feature("director") IMouseListener; class IMouseListener { public: virtual void mouseEntered(MouseEvent& evt) = 0; virtual void mouseExited(MouseEvent& evt) = 0; virtual void mousePressed(MouseEvent& evt) = 0; virtual void mouseReleased(MouseEvent& evt) = 0; virtual void mouseClicked(MouseEvent& evt) = 0; virtual void mouseWheelMovedUp(MouseEvent& evt) = 0; virtual void mouseWheelMovedDown(MouseEvent& evt) = 0; virtual void mouseWheelMovedRight(MouseEvent& evt) = 0; virtual void mouseWheelMovedLeft(MouseEvent& evt) = 0; virtual void mouseMoved(MouseEvent& evt) = 0; virtual void mouseDragged(MouseEvent& evt) = 0; virtual ~IMouseListener(); }; %feature("director") IKeyFilter; class IKeyFilter { public: virtual bool isFiltered(const KeyEvent& evt) = 0; virtual ~IKeyFilter(); }; class DropEvent: public InputEvent { public: virtual const std::string& getPath() const; virtual ~DropEvent(); private: DropEvent(); }; %feature("director") IDropListener; class IDropListener { public: virtual void fileDropped(DropEvent& evt) = 0; virtual ~IDropListener(); }; %feature("director") IMouseFilter; class IMouseFilter { public: virtual bool isFiltered(const MouseEvent& evt) = 0; virtual ~IMouseFilter(); }; class EventManager { public: EventManager(); virtual ~EventManager(); void addCommandListener(ICommandListener* listener); void addCommandListenerFront(ICommandListener* listener); void removeCommandListener(ICommandListener* listener); void addKeyListener(IKeyListener* listener); void addKeyListenerFront(IKeyListener* listener); void removeKeyListener(IKeyListener* listener); void addTextListener(ITextListener* listener); void addTextListenerFront(ITextListener* listener); void removeTextListener(ITextListener* listener); void addMouseListener(IMouseListener* listener); void addMouseListenerFront(IMouseListener* listener); void removeMouseListener(IMouseListener* listener); void addDropListener(IDropListener* listener); void addDropListenerFront(IDropListener* listener); void removeDropListener(IDropListener* listener); void addSdlEventListener(ISdlEventListener* listener); void addSdlEventListenerFront(ISdlEventListener* listener); void removeSdlEventListener(ISdlEventListener* listener); EventSourceType getEventSourceType(); void dispatchCommand(Command& command); void setKeyFilter(IKeyFilter* keyFilter); void setMouseFilter(IMouseFilter* mouseFilter); void setMouseSensitivity(float sensitivity); float getMouseSensitivity() const; void setMouseAccelerationEnabled(bool acceleration); bool isMouseAccelerationEnabled() const; bool isClipboardText() const; std::string getClipboardText() const; void setClipboardText(const std::string& text); }; }; fifengine-0.4.1/engine/core/eventchannel/eventmanager.cpp000066400000000000000000000603741304641216200235060ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/exception.h" #include "util/log/logger.h" #include "util/math/fife_math.h" #include "eventchannel/key/ec_key.h" #include "eventchannel/key/ec_keyevent.h" #include "eventchannel/key/ec_ikeyfilter.h" #include "eventchannel/mouse/ec_imousefilter.h" #include "eventchannel/mouse/ec_mouseevent.h" #include "eventchannel/command/ec_command.h" #include "video/renderbackend.h" #include "eventmanager.h" namespace FIFE { static Logger _log(LM_EVTCHANNEL); EventManager::EventManager(): m_commandlisteners(), m_keylisteners(), m_textListeners(), m_mouselisteners(), m_sdleventlisteners(), m_keystatemap(), m_keyfilter(0), m_mousefilter(0), m_mousestate(0), m_mostrecentbtn(MouseEvent::EMPTY), m_mousesensitivity(0.0), m_acceleration(false), m_warp(false), m_enter(false), m_oldx(0), m_oldy(0), m_lastticks(0), m_oldvelocity(0.0) { } EventManager::~EventManager() { } template void removeListener(std::deque& vec, T& listener) { vec.push_back(listener); } template void addListener(std::deque& vec, T& listener) { vec.push_back(listener); } void EventManager::addCommandListener(ICommandListener* listener) { addListener(m_pending_commandlisteners, listener); } void EventManager::addCommandListenerFront(ICommandListener* listener) { addListener(m_pending_commandlisteners_front, listener); } void EventManager::removeCommandListener(ICommandListener* listener) { removeListener(m_pending_cldeletions, listener); } void EventManager::addKeyListener(IKeyListener* listener) { addListener(m_pending_keylisteners, listener); } void EventManager::addKeyListenerFront(IKeyListener* listener) { addListener(m_pending_keylisteners_front, listener); } void EventManager::removeKeyListener(IKeyListener* listener) { removeListener(m_pending_kldeletions, listener); } void EventManager::addTextListener(ITextListener* listener) { addListener(m_pendingTextListeners, listener); } void EventManager::addTextListenerFront(ITextListener* listener) { addListener(m_pendingTextListenersFront, listener); } void EventManager::removeTextListener(ITextListener* listener) { removeListener(m_pendingTlDeletions, listener); } void EventManager::addMouseListener(IMouseListener* listener) { addListener(m_pending_mouselisteners, listener); } void EventManager::addMouseListenerFront(IMouseListener* listener) { addListener(m_pending_mouselisteners_front, listener); } void EventManager::removeMouseListener(IMouseListener* listener) { removeListener(m_pending_mldeletions, listener); } void EventManager::addSdlEventListener(ISdlEventListener* listener) { addListener(m_pending_sdleventlisteners, listener); } void EventManager::addSdlEventListenerFront(ISdlEventListener* listener) { addListener(m_pending_sdleventlisteners_front, listener); } void EventManager::removeSdlEventListener(ISdlEventListener* listener) { removeListener(m_pending_sdldeletions, listener); } void EventManager::addDropListener(IDropListener* listener) { addListener(m_pendingDropListeners, listener); } void EventManager::addDropListenerFront(IDropListener* listener) { addListener(m_pendingDropListenersFront, listener); } void EventManager::removeDropListener(IDropListener* listener) { removeListener(m_pendingDlDeletions, listener); } void EventManager::dispatchCommand(Command& command) { if(!m_pending_commandlisteners.empty()) { std::deque::iterator i = m_pending_commandlisteners.begin(); while (i != m_pending_commandlisteners.end()) { m_commandlisteners.push_back(*i); ++i; } m_pending_commandlisteners.clear(); } if(!m_pending_commandlisteners_front.empty()) { std::deque::iterator i = m_pending_commandlisteners_front.begin(); while (i != m_pending_commandlisteners_front.end()) { m_commandlisteners.push_front(*i); ++i; } m_pending_commandlisteners_front.clear(); } if (!m_pending_cldeletions.empty()) { std::deque::iterator i = m_pending_cldeletions.begin(); while (i != m_pending_cldeletions.end()) { std::deque::iterator j = m_commandlisteners.begin(); while (j != m_commandlisteners.end()) { if(*j == *i) { m_commandlisteners.erase(j); break; } ++j; } ++i; } m_pending_cldeletions.clear(); } std::deque::iterator i = m_commandlisteners.begin(); while (i != m_commandlisteners.end()) { (*i)->onCommand(command); if (command.isConsumed()) { break; } ++i; } } void EventManager::dispatchKeyEvent(KeyEvent& evt) { if(!m_pending_keylisteners.empty()) { std::deque::iterator i = m_pending_keylisteners.begin(); while (i != m_pending_keylisteners.end()) { m_keylisteners.push_back(*i); ++i; } m_pending_keylisteners.clear(); } if(!m_pending_keylisteners_front.empty()) { std::deque::iterator i = m_pending_keylisteners_front.begin(); while (i != m_pending_keylisteners_front.end()) { m_keylisteners.push_front(*i); ++i; } m_pending_keylisteners_front.clear(); } if (!m_pending_kldeletions.empty()) { std::deque::iterator i = m_pending_kldeletions.begin(); while (i != m_pending_kldeletions.end()) { std::deque::iterator j = m_keylisteners.begin(); while (j != m_keylisteners.end()) { if(*j == *i) { m_keylisteners.erase(j); break; } ++j; } ++i; } m_pending_kldeletions.clear(); } std::deque::iterator i = m_keylisteners.begin(); while (i != m_keylisteners.end()) { switch (evt.getType()) { case KeyEvent::PRESSED: (*i)->keyPressed(evt); break; case KeyEvent::RELEASED: (*i)->keyReleased(evt); break; default: break; } ++i; } } void EventManager::dispatchTextEvent(TextEvent& evt) { if(!m_pendingTextListeners.empty()) { std::deque::iterator i = m_pendingTextListeners.begin(); while (i != m_pendingTextListeners.end()) { m_textListeners.push_back(*i); ++i; } m_pendingTextListeners.clear(); } if(!m_pendingTextListenersFront.empty()) { std::deque::iterator i = m_pendingTextListenersFront.begin(); while (i != m_pendingTextListenersFront.end()) { m_textListeners.push_front(*i); ++i; } m_pendingTextListenersFront.clear(); } if (!m_pendingTlDeletions.empty()) { std::deque::iterator i = m_pendingTlDeletions.begin(); while (i != m_pendingTlDeletions.end()) { std::deque::iterator j = m_textListeners.begin(); while (j != m_textListeners.end()) { if(*j == *i) { m_textListeners.erase(j); break; } ++j; } ++i; } m_pendingTlDeletions.clear(); } std::deque::iterator i = m_textListeners.begin(); while (i != m_textListeners.end()) { switch (evt.getType()) { case TextEvent::INPUT: (*i)->textInput(evt); break; case TextEvent::EDIT: (*i)->textEdit(evt); break; default: break; } ++i; } } void EventManager::dispatchMouseEvent(MouseEvent& evt) { if(!m_pending_mouselisteners.empty()) { std::deque::iterator i = m_pending_mouselisteners.begin(); while (i != m_pending_mouselisteners.end()) { m_mouselisteners.push_back(*i); ++i; } m_pending_mouselisteners.clear(); } if(!m_pending_mouselisteners_front.empty()) { std::deque::iterator i = m_pending_mouselisteners_front.begin(); while (i != m_pending_mouselisteners_front.end()) { m_mouselisteners.push_front(*i); ++i; } m_pending_mouselisteners_front.clear(); } if (!m_pending_mldeletions.empty()) { std::deque::iterator i = m_pending_mldeletions.begin(); while (i != m_pending_mldeletions.end()) { std::deque::iterator j = m_mouselisteners.begin(); while (j != m_mouselisteners.end()) { if(*j == *i) { m_mouselisteners.erase(j); break; } ++j; } ++i; } m_pending_mldeletions.clear(); } std::deque::iterator i = m_mouselisteners.begin(); while (i != m_mouselisteners.end()) { switch (evt.getType()) { case MouseEvent::MOVED: (*i)->mouseMoved(evt); break; case MouseEvent::PRESSED: (*i)->mousePressed(evt); break; case MouseEvent::RELEASED: (*i)->mouseReleased(evt); break; case MouseEvent::WHEEL_MOVED_DOWN: (*i)->mouseWheelMovedDown(evt); break; case MouseEvent::WHEEL_MOVED_UP: (*i)->mouseWheelMovedUp(evt); break; case MouseEvent::WHEEL_MOVED_RIGHT: (*i)->mouseWheelMovedRight(evt); break; case MouseEvent::WHEEL_MOVED_LEFT: (*i)->mouseWheelMovedLeft(evt); break; case MouseEvent::CLICKED: (*i)->mouseClicked(evt); break; case MouseEvent::ENTERED: (*i)->mouseEntered(evt); break; case MouseEvent::EXITED: (*i)->mouseExited(evt); break; case MouseEvent::DRAGGED: (*i)->mouseDragged(evt); break; default: break; } if (evt.isConsumed()) { break; } ++i; } } bool EventManager::dispatchSdlEvent(SDL_Event& evt) { bool ret = false; if (!m_pending_sdleventlisteners.empty()) { std::deque::iterator i = m_pending_sdleventlisteners.begin(); while(i != m_pending_sdleventlisteners.end()) { m_sdleventlisteners.push_back(*i); ++i; } m_pending_sdleventlisteners.clear(); } if (!m_pending_sdleventlisteners_front.empty()) { std::deque::iterator i = m_pending_sdleventlisteners_front.begin(); while(i != m_pending_sdleventlisteners_front.end()) { m_sdleventlisteners.push_front(*i); ++i; } m_pending_sdleventlisteners_front.clear(); } if (!m_pending_sdldeletions.empty()) { std::deque::iterator i = m_pending_sdldeletions.begin(); while (i != m_pending_sdldeletions.end()) { std::deque::iterator j = m_sdleventlisteners.begin(); while (j != m_sdleventlisteners.end()) { if(*j == *i) { m_sdleventlisteners.erase(j); break; } ++j; } ++i; } m_pending_sdldeletions.clear(); } std::deque::iterator i = m_sdleventlisteners.begin(); while (i != m_sdleventlisteners.end()) { ret = ret || (*i)->onSdlEvent(evt); ++i; } return ret; } void EventManager::dispatchDropEvent(DropEvent& evt) { if(!m_pendingDropListeners.empty()) { std::deque::iterator i = m_pendingDropListeners.begin(); while (i != m_pendingDropListeners.end()) { m_dropListeners.push_back(*i); ++i; } m_pendingDropListeners.clear(); } if(!m_pendingDropListenersFront.empty()) { std::deque::iterator i = m_pendingDropListenersFront.begin(); while (i != m_pendingDropListenersFront.end()) { m_dropListeners.push_front(*i); ++i; } m_pendingDropListenersFront.clear(); } if (!m_pendingDlDeletions.empty()) { std::deque::iterator i = m_pendingDlDeletions.begin(); while (i != m_pendingDlDeletions.end()) { std::deque::iterator j = m_dropListeners.begin(); while (j != m_dropListeners.end()) { if(*j == *i) { m_dropListeners.erase(j); break; } ++j; } ++i; } m_pendingDlDeletions.clear(); } std::deque::iterator i = m_dropListeners.begin(); while (i != m_dropListeners.end()) { (*i)->fileDropped(evt); ++i; } } bool EventManager::combineEvents(SDL_Event& event1, const SDL_Event& event2) { if(event1.type == event2.type) { switch (event1.type) { case SDL_MOUSEMOTION: if(event1.motion.state == event2.motion.state) { event1.motion.x = event2.motion.x; event1.motion.y = event2.motion.y; event1.motion.xrel += event2.motion.xrel; event1.motion.yrel += event2.motion.yrel; return true; } return false; } } return false; } void EventManager::processEvents() { // The double SDL_PollEvent calls don't throw away events, // but try to combine (mouse motion) events. SDL_Event event, next_event; bool has_next_event = (SDL_PollEvent(&event) != 0); while (has_next_event) { has_next_event = (SDL_PollEvent(&next_event) != 0); if (has_next_event && combineEvents(event, next_event)) { continue; } switch (event.type) { case SDL_QUIT: { Command cmd; cmd.setSource(this); cmd.setCommandType(CMD_QUIT_GAME); dispatchCommand(cmd); } break; case SDL_WINDOWEVENT: processWindowEvent(event); break; case SDL_KEYDOWN: case SDL_KEYUP: processKeyEvent(event); break; //case SDL_TEXTEDITING: // is buggy with SDL 2.0.1 case SDL_TEXTINPUT: processTextEvent(event); break; case SDL_MOUSEWHEEL: case SDL_MOUSEBUTTONUP: case SDL_MOUSEMOTION: case SDL_MOUSEBUTTONDOWN: processMouseEvent(event); break; case SDL_DROPFILE: { processDropEvent(event); break; } } if (has_next_event) { event = next_event; } } } void EventManager::processWindowEvent(SDL_Event event) { if (dispatchSdlEvent(event)) { return; } CommandType ct = CMD_UNKNOWN; switch (event.window.event) { case SDL_WINDOWEVENT_CLOSE: ct = CMD_QUIT_GAME; break; case SDL_WINDOWEVENT_ENTER: ct = CMD_MOUSE_FOCUS_GAINED; break; case SDL_WINDOWEVENT_LEAVE: ct = CMD_MOUSE_FOCUS_LOST; break; case SDL_WINDOWEVENT_FOCUS_GAINED: ct = CMD_INPUT_FOCUS_GAINED; break; case SDL_WINDOWEVENT_FOCUS_LOST: ct = CMD_INPUT_FOCUS_LOST; break; case SDL_WINDOWEVENT_SHOWN: ct = CMD_APP_RESTORED; break; case SDL_WINDOWEVENT_MINIMIZED: case SDL_WINDOWEVENT_HIDDEN: ct = CMD_APP_ICONIFIED; break; default: ct = CMD_UNKNOWN; } if (ct != CMD_UNKNOWN) { Command cmd; cmd.setCommandType(ct); dispatchCommand(cmd); } } void EventManager::processKeyEvent(SDL_Event event) { KeyEvent keyevt; keyevt.setSource(this); fillKeyEvent(event, keyevt); m_keystatemap[keyevt.getKey().getValue()] = (keyevt.getType() == KeyEvent::PRESSED); // if event is not filtered it gets dispatched, even it is a function key if (!m_keyfilter || !m_keyfilter->isFiltered(keyevt)) { if (dispatchSdlEvent(event)) return; } dispatchKeyEvent(keyevt); } void EventManager::processTextEvent(SDL_Event event) { if (dispatchSdlEvent(event)) { return; } TextEvent txtevt; txtevt.setSource(this); fillTextEvent(event, txtevt); dispatchTextEvent(txtevt); } void EventManager::processMouseEvent(SDL_Event event) { if (event.type == SDL_MOUSEMOTION && (!Mathf::Equal(m_mousesensitivity, 0.0) || m_acceleration)) { uint16_t tmp_x = event.motion.x; uint16_t tmp_y = event.motion.y; if (m_enter) { m_oldx = tmp_x; m_oldy = tmp_y; m_oldvelocity = 0.0; m_enter = false; } float modifier; if (m_acceleration) { uint32_t ticks = SDL_GetTicks(); float difference = static_cast((ticks - m_lastticks) + 1); m_lastticks = ticks; float dx = static_cast(tmp_x - m_oldx); float dy = static_cast(tmp_y - m_oldy); float distance = Mathf::Sqrt(dx * dx + dy * dy); float acceleration = static_cast((distance / difference) / difference); float velocity = (m_oldvelocity + acceleration * difference)/2; if (velocity > m_mousesensitivity+1) { velocity = m_mousesensitivity+1; } m_oldvelocity = velocity; modifier = velocity; } else { modifier = m_mousesensitivity; } int16_t tmp_xrel = static_cast(tmp_x - m_oldx); int16_t tmp_yrel = static_cast(tmp_y - m_oldy); if ((tmp_xrel != 0) || (tmp_yrel != 0)) { Rect screen = RenderBackend::instance()->getArea(); int16_t x_fact = static_cast(round(static_cast(tmp_xrel * modifier))); int16_t y_fact = static_cast(round(static_cast(tmp_yrel * modifier))); if ((tmp_x + x_fact) > screen.w) { tmp_x = screen.w; } else if ((tmp_x + x_fact) < screen.x) { tmp_x = screen.x; } else { tmp_x += x_fact; } if (tmp_y + y_fact > screen.h) { tmp_y = screen.h; } else if ((tmp_y + y_fact) < screen.y) { tmp_y = screen.y; } else { tmp_y += y_fact; } m_oldx = tmp_x; m_oldy = tmp_y; event.motion.x = tmp_x; event.motion.y = tmp_y; m_warp = true; //don't trigger an event handler when warping SDL_WarpMouseInWindow(RenderBackend::instance()->getWindow(), tmp_x, tmp_y); m_warp = false; } } MouseEvent mouseevt; mouseevt.setSource(this); fillMouseEvent(event, mouseevt); fillModifiers(mouseevt); if (event.type == SDL_MOUSEBUTTONDOWN) { m_mousestate |= static_cast(mouseevt.getButton()); m_mostrecentbtn = mouseevt.getButton(); } else if (event.type == SDL_MOUSEBUTTONUP) { m_mousestate &= ~static_cast(mouseevt.getButton()); } bool consumed = dispatchSdlEvent(event); if (consumed && m_mousefilter) { consumed = !m_mousefilter->isFiltered(mouseevt); } if (consumed) { return; } dispatchMouseEvent(mouseevt); } void EventManager::processDropEvent(SDL_Event event) { // only dispatched as DropEvent //if (dispatchSdlEvent(event)) { // return; //} char* tmp = event.drop.file; std::string path(tmp); SDL_free(tmp); DropEvent drop; drop.setPath(path); drop.setSource(this); dispatchDropEvent(drop); } void EventManager::fillMouseEvent(const SDL_Event& sdlevt, MouseEvent& mouseevt) { if (m_warp) { return; } mouseevt.setX(sdlevt.button.x); mouseevt.setY(sdlevt.button.y); mouseevt.setButton(MouseEvent::EMPTY); mouseevt.setType(MouseEvent::MOVED); if ((sdlevt.type == SDL_MOUSEBUTTONUP) || (sdlevt.type == SDL_MOUSEBUTTONDOWN)) { switch (sdlevt.button.button) { case SDL_BUTTON_LEFT: mouseevt.setButton(MouseEvent::LEFT); break; case SDL_BUTTON_RIGHT: mouseevt.setButton(MouseEvent::RIGHT); break; case SDL_BUTTON_MIDDLE: mouseevt.setButton(MouseEvent::MIDDLE); break; case SDL_BUTTON_X1: mouseevt.setButton(MouseEvent::X1); break; case SDL_BUTTON_X2: mouseevt.setButton(MouseEvent::X2); break; default: mouseevt.setButton(MouseEvent::UNKNOWN_BUTTON); break; } if (sdlevt.button.state == SDL_RELEASED) { mouseevt.setType(MouseEvent::RELEASED); } else { mouseevt.setType(MouseEvent::PRESSED); } } if (sdlevt.type == SDL_MOUSEWHEEL) { //if (sdlevt.wheel.y > 0 || (sdlevt.wheel.direction == SDL_MOUSEWHEEL_FLIPPED && sdlevt.wheel.y < 0)) { if (sdlevt.wheel.y > 0) { mouseevt.setType(MouseEvent::WHEEL_MOVED_UP); //} else if (sdlevt.wheel.y < 0 || (sdlevt.wheel.direction == SDL_MOUSEWHEEL_FLIPPED && sdlevt.wheel.y > 0)) { } else if (sdlevt.wheel.y < 0) { mouseevt.setType(MouseEvent::WHEEL_MOVED_DOWN); } //if (sdlevt.wheel.x > 0 || (sdlevt.wheel.direction == SDL_MOUSEWHEEL_FLIPPED && sdlevt.wheel.x < 0)) { if (sdlevt.wheel.x > 0) { mouseevt.setType(MouseEvent::WHEEL_MOVED_RIGHT); //} else if (sdlevt.wheel.x < 0 || (sdlevt.wheel.direction == SDL_MOUSEWHEEL_FLIPPED && sdlevt.wheel.x > 0)) { } else if (sdlevt.wheel.x < 0) { mouseevt.setType(MouseEvent::WHEEL_MOVED_LEFT); } } if ((mouseevt.getType() == MouseEvent::MOVED) && ((m_mousestate & m_mostrecentbtn) != 0)) { mouseevt.setType(MouseEvent::DRAGGED); mouseevt.setButton(m_mostrecentbtn); } } void EventManager::fillKeyEvent(const SDL_Event& sdlevt, KeyEvent& keyevt) { if (sdlevt.type == SDL_KEYDOWN) { keyevt.setType(KeyEvent::PRESSED); } else if (sdlevt.type == SDL_KEYUP) { keyevt.setType(KeyEvent::RELEASED); } else { FL_WARN(_log, LMsg("fillKeyEvent()") << " Invalid key event type of " << sdlevt.type << ". Ignoring event."); return; } SDL_Keysym keysym = sdlevt.key.keysym; keyevt.setShiftPressed((keysym.mod & KMOD_SHIFT) != 0); keyevt.setControlPressed((keysym.mod & KMOD_CTRL) != 0); keyevt.setAltPressed((keysym.mod & KMOD_ALT) != 0); keyevt.setMetaPressed((keysym.mod & KMOD_GUI) != 0); // currently gui/super keys keyevt.setNumericPad((keysym.mod & KMOD_NUM) != 0); keyevt.setKey(Key(static_cast(keysym.sym))); } void EventManager::fillTextEvent(const SDL_Event& sdlevt, TextEvent& txtevt) { if (sdlevt.type == SDL_TEXTINPUT) { txtevt.setType(TextEvent::INPUT); Text t(sdlevt.text.text); txtevt.setText(t); } else if (sdlevt.type == SDL_TEXTEDITING) { txtevt.setType(TextEvent::EDIT); Text t(sdlevt.edit.text, sdlevt.edit.start, sdlevt.edit.length); txtevt.setText(t); } else { FL_WARN(_log, LMsg("fillTextEvent()") << " Invalid text event type of " << sdlevt.type << ". Ignoring event."); } } void EventManager::fillModifiers(InputEvent& evt) { evt.setAltPressed(m_keystatemap[Key::ALT_GR] | m_keystatemap[Key::LEFT_ALT] | m_keystatemap[Key::RIGHT_ALT]); evt.setControlPressed(m_keystatemap[Key::LEFT_CONTROL] | m_keystatemap[Key::RIGHT_CONTROL]); evt.setShiftPressed(m_keystatemap[Key::LEFT_SHIFT] | m_keystatemap[Key::RIGHT_SHIFT]); } EventSourceType EventManager::getEventSourceType() { return ES_ENGINE; } void EventManager::setKeyFilter(IKeyFilter* keyFilter) { m_keyfilter = keyFilter; } void EventManager::setMouseFilter(IMouseFilter* mouseFilter) { m_mousefilter = mouseFilter; } void EventManager::setMouseSensitivity(float sensitivity) { if (sensitivity < -0.99) { sensitivity = -0.99; } else if (sensitivity > 10.0) { sensitivity = 10.0; } m_mousesensitivity = sensitivity; } float EventManager::getMouseSensitivity() const { return m_mousesensitivity; } void EventManager::setMouseAccelerationEnabled(bool acceleration) { m_acceleration = acceleration; } bool EventManager::isMouseAccelerationEnabled() const { return m_acceleration; } bool EventManager::isClipboardText() const { return SDL_HasClipboardText(); } std::string EventManager::getClipboardText() const { std::string text; if (SDL_HasClipboardText()) { text = std::string(SDL_GetClipboardText()); } return text; } void EventManager::setClipboardText(const std::string& text) { SDL_SetClipboardText(text.c_str()); } } fifengine-0.4.1/engine/core/eventchannel/eventmanager.h000066400000000000000000000205341304641216200231450ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_EVENTCHANNEL_EVENTMANAGER_H #define FIFE_EVENTCHANNEL_EVENTMANAGER_H // Standard C++ library includes // #include #include #include // 3rd party library includes // // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder // #include "util/base/fife_stdint.h" #include "eventchannel/command/ec_command.h" #include "eventchannel/command/ec_icommandcontroller.h" #include "eventchannel/command/ec_icommandlistener.h" #include "eventchannel/drop/ec_idropcontroller.h" #include "eventchannel/drop/ec_idroplistener.h" #include "eventchannel/drop/ec_dropevent.h" #include "eventchannel/key/ec_ikeycontroller.h" #include "eventchannel/key/ec_ikeylistener.h" #include "eventchannel/key/ec_keyevent.h" #include "eventchannel/key/ec_key.h" #include "eventchannel/text/ec_itextcontroller.h" #include "eventchannel/text/ec_itextlistener.h" #include "eventchannel/text/ec_textevent.h" #include "eventchannel/text/ec_text.h" #include "eventchannel/mouse/ec_imousecontroller.h" #include "eventchannel/mouse/ec_imouselistener.h" #include "eventchannel/mouse/ec_mouseevent.h" #include "eventchannel/sdl/ec_isdleventcontroller.h" #include "eventchannel/sdl/ec_isdleventlistener.h" namespace FIFE { class ICommandListener; class InputEvent; class MouseEvent; class KeyEvent; class IKeyFilter; class DropEvent; class IMouseFilter; /** Event Manager manages all events related to FIFE */ class EventManager: public ICommandController, public IKeyController, public ITextController, public IMouseController, public ISdlEventController, public IDropController, public IEventSource { public: /** Constructor. */ EventManager(); /** Destructor */ virtual ~EventManager(); void addCommandListener(ICommandListener* listener); void addCommandListenerFront(ICommandListener* listener); void removeCommandListener(ICommandListener* listener); void dispatchCommand(Command& command); void addKeyListener(IKeyListener* listener); void addKeyListenerFront(IKeyListener* listener); void removeKeyListener(IKeyListener* listener); void addTextListener(ITextListener* listener); void addTextListenerFront(ITextListener* listener); void removeTextListener(ITextListener* listener); void addMouseListener(IMouseListener* listener); void addMouseListenerFront(IMouseListener* listener); void removeMouseListener(IMouseListener* listener); void addSdlEventListener(ISdlEventListener* listener); void addSdlEventListenerFront(ISdlEventListener* listener); void removeSdlEventListener(ISdlEventListener* listener); void addDropListener(IDropListener* listener); void addDropListenerFront(IDropListener* listener); void removeDropListener(IDropListener* listener); EventSourceType getEventSourceType(); /** Process the SDL event queue. * This is to be called only by the engine itself once per frame. * It passes appropriate events to their listeners */ void processEvents(); void setKeyFilter(IKeyFilter* keyFilter); void setMouseFilter(IMouseFilter* mouseFilter); /** Sets mouse sensitivity * The sensitivity is limited to the range -0.99 - 10.0. */ void setMouseSensitivity(float sensitivity); /** Gets mouse sensitivity */ float getMouseSensitivity() const; /** Sets mouse acceleration * if mouse acceleration is enabled, * then the mouse sensitivity is used as speed max. */ void setMouseAccelerationEnabled(bool acceleration); /** Returns if mouse acceleration is enabled or not. * * @return True if mouse acceleration is enabled, false if not. */ bool isMouseAccelerationEnabled() const; /** Returns if clipboard have text or not. * * @return True if the clipboard contains text, false if not. */ bool isClipboardText() const; /** Returns the clipboard text as UTF-8 string. * * @return UTF-8 string or an empty string if the cliboard have no text. */ std::string getClipboardText() const; /** Sets clipboard text. * * @param text The text in UTF-8 format. */ void setClipboardText(const std::string& text); private: // Helpers for processEvents void processWindowEvent(SDL_Event event); void processKeyEvent(SDL_Event event); void processTextEvent(SDL_Event event); void processMouseEvent(SDL_Event event); void processDropEvent(SDL_Event event); bool combineEvents(SDL_Event& event1, const SDL_Event& event2); // Events dispatchers - only dispatchSdlevent may reject the event. bool dispatchSdlEvent(SDL_Event& evt); void dispatchKeyEvent(KeyEvent& evt); void dispatchTextEvent(TextEvent& evt); void dispatchMouseEvent(MouseEvent& evt); void dispatchDropEvent(DropEvent& evt); // Translate events void fillModifiers(InputEvent& evt); void fillKeyEvent(const SDL_Event& sdlevt, KeyEvent& keyevt); void fillTextEvent(const SDL_Event& sdlevt, TextEvent& txtevt); void fillMouseEvent(const SDL_Event& sdlevt, MouseEvent& mouseevt); std::deque m_commandlisteners; std::deque m_pending_commandlisteners; std::deque m_pending_commandlisteners_front; std::deque m_pending_cldeletions; std::deque m_keylisteners; std::deque m_pending_keylisteners; std::deque m_pending_keylisteners_front; std::deque m_pending_kldeletions; std::deque m_textListeners; std::deque m_pendingTextListeners; std::deque m_pendingTextListenersFront; std::deque m_pendingTlDeletions; std::deque m_mouselisteners; std::deque m_pending_mouselisteners; std::deque m_pending_mouselisteners_front; std::deque m_pending_mldeletions; std::deque m_sdleventlisteners; std::deque m_pending_sdleventlisteners; std::deque m_pending_sdleventlisteners_front; std::deque m_pending_sdldeletions; std::deque m_dropListeners; std::deque m_pendingDropListeners; std::deque m_pendingDropListenersFront; std::deque m_pendingDlDeletions; std::map m_keystatemap; IKeyFilter* m_keyfilter; IMouseFilter* m_mousefilter; int32_t m_mousestate; MouseEvent::MouseButtonType m_mostrecentbtn; // m_mousesensitivity is the mouse speed factor - 1, so a value of 0 won't // influence mouse speed, a value of 1 would double the speed and // -.5 would make it half the speed float m_mousesensitivity; bool m_acceleration; bool m_warp; bool m_enter; uint16_t m_oldx; uint16_t m_oldy; uint32_t m_lastticks; float m_oldvelocity; }; } //FIFE #endif fifengine-0.4.1/engine/core/eventchannel/key/000077500000000000000000000000001304641216200211045ustar00rootroot00000000000000fifengine-0.4.1/engine/core/eventchannel/key/ec_ikeycontroller.h000066400000000000000000000054611304641216200247770ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_EVENTCHANNEL_IKEY_CONTROLLER_H #define FIFE_EVENTCHANNEL_IKEY_CONTROLLER_H // Standard C++ library includes // // 3rd party library includes // // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder // namespace FIFE { class IKeyListener; /** Controller provides a way to receive events from the system * Using this interface, clients can subscribe themselves to receive events */ class IKeyController { public: /** Adds a listener to the back of the listener deque * Listener will be notified via the corresponding events * @param listener listener to add */ virtual void addKeyListener(IKeyListener* listener) = 0; /** Adds a listener to the front of the listener deque * Listener will be notified via the corresponding events * @param listener listener to add */ virtual void addKeyListenerFront(IKeyListener* listener) = 0; /** Removes an added listener from the controller. * Listener will not be notified anymore via the corresponding events * @param listener listener to remove */ virtual void removeKeyListener(IKeyListener* listener) = 0; virtual ~IKeyController() {} }; } //FIFE #endif fifengine-0.4.1/engine/core/eventchannel/key/ec_ikeyfilter.h000066400000000000000000000044221304641216200240750ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_EVENTCHANNEL_IKEYFILTER_H #define FIFE_EVENTCHANNEL_IKEYFILTER_H // Standard C++ library includes // // 3rd party library includes // // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder // #include "ec_keyevent.h" namespace FIFE { /** Controller provides a way to receive events from the system * Using this interface, clients can subscribe themselves to receive events */ class IKeyFilter { public: /** Check whether a keyevent should be filtered out. * @param event They key event. */ virtual bool isFiltered(const KeyEvent& event) = 0; virtual ~IKeyFilter() {} }; } //FIFE #endif fifengine-0.4.1/engine/core/eventchannel/key/ec_ikeylistener.h000066400000000000000000000047411304641216200244410ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_EVENTCHANNEL_IKEYLISTENER_H #define FIFE_EVENTCHANNEL_IKEYLISTENER_H // Standard C++ library includes // // 3rd party library includes // // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder // namespace FIFE { class KeyEvent; /** Listener of key events. * To be able to listen for key events you must make a class which inherits * from this class and implements its functions. */ class IKeyListener { public: /** Called if a key is pressed * If a key is held down the multiple key presses are generated. * @param evt KeyEvent that describes the event. */ virtual void keyPressed(KeyEvent& evt) = 0; /** Called if a key is released * @param evt KeyEvent that describes the event. */ virtual void keyReleased(KeyEvent& evt) = 0; virtual ~IKeyListener() {} }; } //FIFE #endif fifengine-0.4.1/engine/core/eventchannel/key/ec_key.h000066400000000000000000000225021304641216200225150ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_EVENTCHANNEL_KEY_H #define FIFE_EVENTCHANNEL_KEY_H // Standard C++ library includes // // 3rd party library includes // #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder // namespace FIFE { /** Represents a key. */ class Key { public: /** Codes for different keys */ enum KeyType { INVALID_KEY = SDLK_UNKNOWN, ENTER = SDLK_RETURN, ESCAPE = SDLK_ESCAPE, BACKSPACE = SDLK_BACKSPACE, TAB = SDLK_TAB, SPACE = SDLK_SPACE, EXCLAIM = SDLK_EXCLAIM, QUOTEDBL = SDLK_QUOTEDBL, HASH = SDLK_HASH, PERCENT = SDLK_PERCENT, DOLLAR = SDLK_DOLLAR, AMPERSAND = SDLK_AMPERSAND, QUOTE = SDLK_QUOTE, LEFTPAREN = SDLK_LEFTPAREN, RIGHTPAREN = SDLK_RIGHTPAREN, ASTERISK = SDLK_ASTERISK, PLUS = SDLK_PLUS, COMMA = SDLK_COMMA, MINUS = SDLK_MINUS, PERIOD = SDLK_PERIOD, SLASH = SDLK_SLASH, NUM_0 = SDLK_0, NUM_1 = SDLK_1, NUM_2 = SDLK_2, NUM_3 = SDLK_3, NUM_4 = SDLK_4, NUM_5 = SDLK_5, NUM_6 = SDLK_6, NUM_7 = SDLK_7, NUM_8 = SDLK_8, NUM_9 = SDLK_9, COLON = SDLK_COLON, SEMICOLON = SDLK_SEMICOLON, LESS = SDLK_LESS, EQUALS = SDLK_EQUALS, GREATER = SDLK_GREATER, QUESTION = SDLK_QUESTION, AT = SDLK_AT, LEFTBRACKET = SDLK_LEFTBRACKET, BACKSLASH = SDLK_BACKSLASH, RIGHTBRACKET = SDLK_RIGHTBRACKET, CARET = SDLK_CARET, UNDERSCORE = SDLK_UNDERSCORE, BACKQUOTE = SDLK_BACKQUOTE, A = SDLK_a, B = SDLK_b, C = SDLK_c, D = SDLK_d, E = SDLK_e, F = SDLK_f, G = SDLK_g, H = SDLK_h, I = SDLK_i, J = SDLK_j, K = SDLK_k, L = SDLK_l, M = SDLK_m, N = SDLK_n, O = SDLK_o, P = SDLK_p, Q = SDLK_q, R = SDLK_r, S = SDLK_s, T = SDLK_t, U = SDLK_u, V = SDLK_v, W = SDLK_w, X = SDLK_x, Y = SDLK_y, Z = SDLK_z, CAPS_LOCK = SDLK_CAPSLOCK, F1 = SDLK_F1, F2 = SDLK_F2, F3 = SDLK_F3, F4 = SDLK_F4, F5 = SDLK_F5, F6 = SDLK_F6, F7 = SDLK_F7, F8 = SDLK_F8, F9 = SDLK_F9, F10 = SDLK_F10, F11 = SDLK_F11, F12 = SDLK_F12, PRINT_SCREEN = SDLK_PRINTSCREEN, SCROLL_LOCK = SDLK_SCROLLLOCK, PAUSE = SDLK_PAUSE, INSERT = SDLK_INSERT, HOME = SDLK_HOME, PAGE_UP = SDLK_PAGEUP, DELETE = SDLK_DELETE, END = SDLK_END, PAGE_DOWN = SDLK_PAGEDOWN, RIGHT = SDLK_RIGHT, LEFT = SDLK_LEFT, DOWN = SDLK_DOWN, UP = SDLK_UP, NUM_LOCK = SDLK_NUMLOCKCLEAR, KP_DIVIDE = SDLK_KP_DIVIDE, KP_MULTIPLY = SDLK_KP_MULTIPLY, KP_MINUS = SDLK_KP_MINUS, KP_PLUS = SDLK_KP_PLUS, KP_ENTER = SDLK_KP_ENTER, KP_0 = SDLK_KP_0, KP_1 = SDLK_KP_1, KP_2 = SDLK_KP_2, KP_3 = SDLK_KP_3, KP_4 = SDLK_KP_4, KP_5 = SDLK_KP_5, KP_6 = SDLK_KP_6, KP_7 = SDLK_KP_7, KP_8 = SDLK_KP_8, KP_9 = SDLK_KP_9, KP_PERIOD = SDLK_KP_PERIOD, APPLICATION = SDLK_APPLICATION, POWER = SDLK_POWER, KP_EQUALS = SDLK_KP_EQUALS, F13 = SDLK_F13, F14 = SDLK_F14, F15 = SDLK_F15, F16 = SDLK_F16, F17 = SDLK_F17, F18 = SDLK_F18, F19 = SDLK_F19, F20 = SDLK_F20, F21 = SDLK_F21, F22 = SDLK_F22, F23 = SDLK_F23, F24 = SDLK_F24, EXECUTE = SDLK_EXECUTE, HELP = SDLK_HELP, MENU = SDLK_MENU, SELECT = SDLK_SELECT, STOP = SDLK_STOP, AGAIN = SDLK_AGAIN, UNDO = SDLK_UNDO, CUT = SDLK_CUT, COPY = SDLK_COPY, PASTE = SDLK_PASTE, FIND = SDLK_FIND, MUTE = SDLK_MUTE, VOLUME_UP = SDLK_VOLUMEUP, VOLUME_DOWN = SDLK_VOLUMEDOWN, KP_COMMA = SDLK_KP_COMMA, KP_EQUALSAS400 = SDLK_KP_EQUALSAS400, ERASE = SDLK_ALTERASE, SYS_REQ = SDLK_SYSREQ, CANCEL = SDLK_CANCEL, CLEAR = SDLK_CLEAR, PRIOR = SDLK_PRIOR, RETURN = SDLK_RETURN2, SEPARATOR = SDLK_SEPARATOR, FORTH = SDLK_OUT, OPER = SDLK_OPER, CLEAR_AGAIN = SDLK_CLEARAGAIN, CR_SEL = SDLK_CRSEL, EX_SEL = SDLK_EXSEL, KP_00 = SDLK_KP_00, KP_000 = SDLK_KP_000, THOUSANDS_SEPARATOR = SDLK_THOUSANDSSEPARATOR, DECIMAL_SEPARATOR = SDLK_DECIMALSEPARATOR, CURRENCY_UNIT = SDLK_CURRENCYUNIT, CURRENCY_SUBUNIT = SDLK_CURRENCYSUBUNIT, KP_LEFTPAREN = SDLK_KP_LEFTPAREN, KP_RIGHTPAREN = SDLK_KP_RIGHTPAREN, KP_LEFTBRACE = SDLK_KP_LEFTBRACE, KP_RIGHTBRACE = SDLK_KP_RIGHTBRACE, KP_TAB = SDLK_KP_TAB, KP_BACKSPACE = SDLK_KP_BACKSPACE, KP_A = SDLK_KP_A, KP_B = SDLK_KP_B, KP_C = SDLK_KP_C, KP_D = SDLK_KP_D, KP_E = SDLK_KP_E, KP_F = SDLK_KP_F, KP_XOR = SDLK_KP_XOR, KP_POWER = SDLK_KP_POWER, KP_PERCENT = SDLK_KP_PERCENT, KP_LESS = SDLK_KP_LESS, KP_GREATER = SDLK_KP_GREATER, KP_AMPERSAND = SDLK_KP_AMPERSAND, KP_DBLAMPERSAND = SDLK_KP_DBLAMPERSAND, KP_VERTICALBAR = SDLK_KP_VERTICALBAR, KP_DBLVERTICALBAR = SDLK_KP_DBLVERTICALBAR, KP_COLON = SDLK_KP_COLON, KP_HASH = SDLK_KP_HASH, KP_SPACE = SDLK_KP_SPACE, KP_AT = SDLK_KP_AT, KP_EXCLAM = SDLK_KP_EXCLAM, KP_MEMSTORE = SDLK_KP_MEMSTORE, KP_MEMRECALL = SDLK_KP_MEMRECALL, KP_MEMCLEAR = SDLK_KP_MEMCLEAR, KP_MEMADD = SDLK_KP_MEMADD, KP_MEMSUBSTRACT = SDLK_KP_MEMSUBTRACT, KP_MEMMULTIPLY = SDLK_KP_MEMMULTIPLY, KP_MEMDIVIDE = SDLK_KP_MEMDIVIDE, KP_PLUSMINUS = SDLK_KP_PLUSMINUS, KP_CLEAR = SDLK_KP_CLEAR, KP_CLEARENTRY = SDLK_KP_CLEARENTRY, KP_BINARY = SDLK_KP_BINARY, KP_OCTAL = SDLK_KP_OCTAL, KP_DECIMAL = SDLK_KP_DECIMAL, KP_HEXADECIMAL = SDLK_KP_HEXADECIMAL, LEFT_CONTROL = SDLK_LCTRL, LEFT_SHIFT = SDLK_LSHIFT, LEFT_ALT = SDLK_LALT, LEFT_SUPER = SDLK_LGUI, RIGHT_CONTROL = SDLK_RCTRL, RIGHT_SHIFT = SDLK_RSHIFT, RIGHT_ALT = SDLK_RALT, RIGHT_SUPER = SDLK_RGUI, ALT_GR = SDLK_MODE, AUDIO_NEXT = SDLK_AUDIONEXT, AUDIO_PREV = SDLK_AUDIOPREV, AUDIO_STOP = SDLK_AUDIOSTOP, AUDIO_PLAY = SDLK_AUDIOPLAY, AUDIO_MUTE = SDLK_AUDIOMUTE, MEDIASELECT = SDLK_MEDIASELECT, WWW = SDLK_WWW, MAIL = SDLK_MAIL, CALCULATOR = SDLK_CALCULATOR, COMPUTER = SDLK_COMPUTER, AC_SEARCH = SDLK_AC_SEARCH, AC_HOME = SDLK_AC_HOME, AC_BACK = SDLK_AC_BACK, AC_FORWARD = SDLK_AC_FORWARD, AC_STOP = SDLK_AC_STOP, AC_REFRESH = SDLK_AC_REFRESH, AC_BOOKMARKS = SDLK_AC_BOOKMARKS, BRIGHTNESS_DOWN = SDLK_BRIGHTNESSDOWN, BRIGHTNESS_UP = SDLK_BRIGHTNESSUP, DISPLAY_SWITCH = SDLK_DISPLAYSWITCH, ILLUM_TOGGLE = SDLK_KBDILLUMTOGGLE, ILLUM_DOWN = SDLK_KBDILLUMDOWN, ILLUM_UP = SDLK_KBDILLUMUP, EJECT = SDLK_EJECT, SLEEP = SDLK_SLEEP }; /** Constructor * @param key value of the key */ Key(KeyType key = INVALID_KEY): m_key(key) {} /** Destructor. */ virtual ~Key() {} /** Tells whether the Key can be represented as a string. */ bool isPrintable() const { std::string name = getAsString(); if (!name.empty()) { return true; } return false; } bool isFunctionKey() const { // ToDo return (m_key >= F1 && m_key <= F12) || (m_key >= F13 && m_key <= F24); } /** Gets the value of the key. */ KeyType getValue() const { return m_key; } /** Gets the string representation of the key, encoded as UTF-8. */ std::string getAsString() const { std::string name(SDL_GetKeyName(static_cast(m_key))); return name; } private: KeyType m_key; }; } //FIFE #endif fifengine-0.4.1/engine/core/eventchannel/key/ec_keyevent.h000066400000000000000000000102471304641216200235620ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_EVENTCHANNEL_KEYEVENT_H #define FIFE_EVENTCHANNEL_KEYEVENT_H // Standard C++ library includes // // 3rd party library includes // // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder // #include "eventchannel/base/ec_inputevent.h" #include "eventchannel/source/ec_ieventsource.h" #include "ec_key.h" namespace FIFE { /** Class for key events */ class KeyEvent: public InputEvent { public: enum KeyEventType { UNKNOWN = -1, PRESSED = 0, RELEASED }; /** Constructor */ KeyEvent(): InputEvent(), m_eventtype(UNKNOWN), m_isnumericpad(false), m_key(Key()) {} /** Destructor. */ virtual ~KeyEvent() {} KeyEventType getType() const { return m_eventtype; } void setType(KeyEventType type) { m_eventtype = type; } bool isNumericPad() const { return m_isnumericpad; } void setNumericPad(bool ispad) { m_isnumericpad = ispad; } const Key& getKey() const { return m_key; } void setKey(const Key& key) { m_key = key; } virtual bool isAltPressed() const { return InputEvent::isAltPressed(); } virtual void setAltPressed(bool pressed) { InputEvent::setAltPressed(pressed); } virtual bool isControlPressed() const { return InputEvent::isControlPressed(); } virtual void setControlPressed(bool pressed) { InputEvent::setControlPressed(pressed); } virtual bool isMetaPressed() const { return InputEvent::isMetaPressed(); } virtual void setMetaPressed(bool pressed) { InputEvent::setMetaPressed(pressed); } virtual bool isShiftPressed() const { return InputEvent::isShiftPressed(); } virtual void setShiftPressed(bool pressed) { InputEvent::setShiftPressed(pressed); } virtual void consume() { InputEvent::consume(); } virtual bool isConsumed() const { return InputEvent::isConsumed(); } virtual void consumedByWidgets() { InputEvent::consumedByWidgets(); } virtual bool isConsumedByWidgets() const { return InputEvent::isConsumedByWidgets(); } virtual IEventSource* getSource() const { return InputEvent::getSource(); } virtual void setSource(IEventSource* source) { InputEvent::setSource(source); } virtual int32_t getTimeStamp() const { return InputEvent::getTimeStamp(); } virtual void setTimeStamp(int32_t timestamp ) { InputEvent::setTimeStamp(timestamp); } virtual const std::string& getName() const { const static std::string eventName("KeyEvent"); return eventName; } virtual std::string getDebugString() const { return InputEvent::getDebugString(); } private: KeyEventType m_eventtype; bool m_isnumericpad; Key m_key; }; } //FIFE #endif fifengine-0.4.1/engine/core/eventchannel/mouse/000077500000000000000000000000001304641216200214445ustar00rootroot00000000000000fifengine-0.4.1/engine/core/eventchannel/mouse/ec_imousecontroller.h000066400000000000000000000055071304641216200257000ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_EVENTCHANNEL_IMOUSE_CONTROLLER_H #define FIFE_EVENTCHANNEL_IMOUSE_CONTROLLER_H // Standard C++ library includes // // 3rd party library includes // // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder // namespace FIFE { class IMouseListener; /** Controller provides a way to receive events from the system * Using this interface, clients can subscribe themselves to receive events */ class IMouseController { public: /** Adds a listener to the back of the listener deque * Listener will be notified via the corresponding events * @param listener listener to add */ virtual void addMouseListener(IMouseListener* listener) = 0; /** Adds a listener to the front of the listener deque * Listener will be notified via the corresponding events * @param listener listener to add */ virtual void addMouseListenerFront(IMouseListener* listener) = 0; /** Removes an added listener from the controller. * Listener will not be notified anymore via the corresponding events * @param listener listener to remove */ virtual void removeMouseListener(IMouseListener* listener) = 0; virtual ~IMouseController() {} }; } //FIFE #endif fifengine-0.4.1/engine/core/eventchannel/mouse/ec_imousefilter.h000066400000000000000000000045341304641216200250010ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_EVENTCHANNEL_IMOUSEFILTER_H #define FIFE_EVENTCHANNEL_IMOUSEFILTER_H // Standard C++ library includes // // 3rd party library includes // // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder // #include "ec_mouseevent.h" namespace FIFE { /** Controller provides a way to receive events from the system * Using this interface, clients can subscribe themselves to receive events */ class IMouseFilter { public: /** Check whether a mouseevent should be filtered out. Those are not consumed by dispatchSdlEvent (guimanagers). * @param event They mouse event. */ virtual bool isFiltered(const MouseEvent& event) = 0; virtual ~IMouseFilter() {} }; } //FIFE #endif fifengine-0.4.1/engine/core/eventchannel/mouse/ec_imouselistener.h000066400000000000000000000103061304641216200253330ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_EVENTCHANNEL_IMOUSELISTENER_H #define FIFE_EVENTCHANNEL_IMOUSELISTENER_H // Standard C++ library includes // // 3rd party library includes // // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder // namespace FIFE { class MouseEvent; /** Listener of mouse events. * To be able to listen for mouse events you must make a class which inherits * from this class and implements its functions. */ class IMouseListener { public: /** * Called when the mouse has entered into the event source area. * @param evt describes the event. */ virtual void mouseEntered(MouseEvent& evt) = 0; /** * Called when the mouse has exited the event source area. * @param evt describes the event. */ virtual void mouseExited(MouseEvent& evt) = 0; /** * Called when a mouse button has been pressed on the event source area. * NOTE: A mouse press is NOT equal to a mouse click. * @param evt describes the event. */ virtual void mousePressed(MouseEvent& evt) = 0; /** * Called when a mouse button has been released on the event source area. * @param evt describes the event. */ virtual void mouseReleased(MouseEvent& evt) = 0; /** * Called when a mouse button is pressed and released (clicked) on * the event source area. * @param evt describes the event. */ virtual void mouseClicked(MouseEvent& evt) = 0; /** * Called when the mouse wheel has moved up on the event source area. * @param evt describes the event. */ virtual void mouseWheelMovedUp(MouseEvent& evt) = 0; /** * Called when the mouse wheel has moved down on the event source area. * @param evt MouseEvent that describes the event. */ virtual void mouseWheelMovedDown(MouseEvent& evt) = 0; /** * Called when the mouse wheel has moved right on the event source area. * @param evt describes the event. */ virtual void mouseWheelMovedRight(MouseEvent& evt) = 0; /** * Called when the mouse wheel has moved left on the event source area. * @param evt MouseEvent that describes the event. */ virtual void mouseWheelMovedLeft(MouseEvent& evt) = 0; /** * Called when the mouse has moved in the event source area and no mouse button * has been pressed * @param evt describes the event. */ virtual void mouseMoved(MouseEvent& evt) = 0; /** * Called when the mouse has moved and the mouse has previously been * pressed on the event source. * @param evt describes the event. */ virtual void mouseDragged(MouseEvent& evt) = 0; virtual ~IMouseListener() {} }; } //FIFE #endif fifengine-0.4.1/engine/core/eventchannel/mouse/ec_mouseevent.h000066400000000000000000000157431304641216200244700ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_EVENTCHANNEL_MOUSEEVENT_H #define FIFE_EVENTCHANNEL_MOUSEEVENT_H // Standard C++ library includes // // 3rd party library includes // // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder // #include "eventchannel/base/ec_inputevent.h" namespace FIFE { /** Class for mouse events */ class MouseEvent: public InputEvent { public: /** * Mouse event types. */ enum MouseEventType { UNKNOWN_EVENT = -1, MOVED = 0, PRESSED, RELEASED, WHEEL_MOVED_DOWN, WHEEL_MOVED_UP, WHEEL_MOVED_RIGHT, WHEEL_MOVED_LEFT, CLICKED, ENTERED, EXITED, DRAGGED }; /** * Mouse button types. */ enum MouseButtonType { EMPTY = 0, LEFT = 1, RIGHT = 2, MIDDLE = 4, X1 = 8, X2 = 16, UNKNOWN_BUTTON = 32 }; /** Constructor. */ MouseEvent(): InputEvent(), m_eventtype(UNKNOWN_EVENT), m_buttontype(UNKNOWN_BUTTON), m_x(-1), m_y(-1) {} /** Destructor. */ virtual ~MouseEvent() {} /** * Gets the button of the mouse event. * @return the button of the mouse event. */ MouseButtonType getButton() const { return m_buttontype; } void setButton(MouseButtonType type) { m_buttontype = type; } /** * Gets the type of the event. * @return the type of the event. */ MouseEventType getType() const { return m_eventtype; } void setType(MouseEventType type) { m_eventtype = type; } /** * Gets the x coordinate of the mouse event. The coordinate is relative to * the source event source. * @return the x coordinate of the mouse event. */ int32_t getX() const { return m_x; } void setX(int32_t x) { m_x = x; } /** * Gets the y coordinate of the mouse event. The coordinate is relative to * the source event source. * @return the y coordinate of the mouse event. */ int32_t getY() const { return m_y; } void setY(int32_t y) { m_y = y; } virtual bool isAltPressed() const { return InputEvent::isAltPressed(); } virtual void setAltPressed(bool pressed) { InputEvent::setAltPressed(pressed); } virtual bool isControlPressed() const { return InputEvent::isControlPressed(); } virtual void setControlPressed(bool pressed) { InputEvent::setControlPressed(pressed); } virtual bool isMetaPressed() const { return InputEvent::isMetaPressed(); } virtual void setMetaPressed(bool pressed) { InputEvent::setMetaPressed(pressed); } virtual bool isShiftPressed() const { return InputEvent::isShiftPressed(); } virtual void setShiftPressed(bool pressed) { InputEvent::setShiftPressed(pressed); } virtual void consume() { InputEvent::consume(); } virtual bool isConsumed() const { return InputEvent::isConsumed(); } virtual void consumedByWidgets() { InputEvent::consumedByWidgets(); } virtual bool isConsumedByWidgets() const { return InputEvent::isConsumedByWidgets(); } virtual IEventSource* getSource() const { return InputEvent::getSource(); } virtual void setSource(IEventSource* source) { InputEvent::setSource(source); } virtual int32_t getTimeStamp() const { return InputEvent::getTimeStamp(); } virtual void setTimeStamp(int32_t timestamp ) { InputEvent::setTimeStamp(timestamp); } virtual const std::string& getName() const { const static std::string eventName("MouseEvent"); return eventName; } virtual std::string getDebugString() const { return InputEvent::getDebugString(); } virtual std::string getAttrStr() const { std::stringstream ss; ss << InputEvent::getAttrStr() << std::endl; ss << "event = " << mouseEventType2str(m_eventtype) << ", "; ss << "button = " << mouseButtonType2str(m_buttontype) << ", "; ss << "x = " << m_x << ", "; ss << "y = " << m_y; return ss.str(); } /** Returns string representation of given event type */ inline static std::string mouseEventType2str(MouseEventType t) { std::string s("unknown"); switch (t) { case MouseEvent::MOVED: s = "moved"; break; case MouseEvent::PRESSED: s = "pressed"; break; case MouseEvent::RELEASED: s = "released"; break; case MouseEvent::WHEEL_MOVED_DOWN: s = "wheel_moved_down"; break; case MouseEvent::WHEEL_MOVED_UP: s = "wheel_moved_up"; break; case MouseEvent::WHEEL_MOVED_RIGHT: s = "wheel_moved_right"; break; case MouseEvent::WHEEL_MOVED_LEFT: s = "wheel_moved_left"; break; case MouseEvent::CLICKED: s = "clicked"; break; case MouseEvent::ENTERED: s = "entered"; break; case MouseEvent::EXITED: s = "excited"; break; case MouseEvent::DRAGGED: s = "dragged"; break; default: break; } return s; } /** Returns string representation of given button type */ inline static std::string mouseButtonType2str(MouseButtonType t) { std::string s("unknown"); switch (t) { case MouseEvent::EMPTY: s = "empty"; break; case MouseEvent::LEFT: s = "left"; break; case MouseEvent::RIGHT: s = "right"; break; case MouseEvent::MIDDLE: s = "middle"; break; case MouseEvent::X1: s = "x1"; break; case MouseEvent::X2: s = "x2"; break; case MouseEvent::UNKNOWN_BUTTON: s = "unknown button"; break; default: break; } return s; } private: MouseEventType m_eventtype; MouseButtonType m_buttontype; int32_t m_x; int32_t m_y; }; } //FIFE #endif fifengine-0.4.1/engine/core/eventchannel/sdl/000077500000000000000000000000001304641216200210765ustar00rootroot00000000000000fifengine-0.4.1/engine/core/eventchannel/sdl/ec_isdleventcontroller.h000066400000000000000000000055501304641216200260240ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_EVENTCHANNEL_ISDLEVENT_CONTROLLER_H #define FIFE_EVENTCHANNEL_ISDLEVENT_CONTROLLER_H // Standard C++ library includes // // 3rd party library includes // // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder // namespace FIFE { class ISdlEventListener; /** Controller provides a way to receive events from the system * Using this interface, clients can subscribe themselves to receive events */ class ISdlEventController { public: /** Adds a listener to the back of the listener deque * Listener will be notified via the corresponding events * @param listener listener to add */ virtual void addSdlEventListener(ISdlEventListener* listener) = 0; /** Adds a listener to the front of the listener deque * Listener will be notified via the corresponding events * @param listener listener to add */ virtual void addSdlEventListenerFront(ISdlEventListener* listener) = 0; /** Removes an added listener from the controller. * Listener will not be notified anymore via the corresponding events * @param listener listener to remove */ virtual void removeSdlEventListener(ISdlEventListener* listener) = 0; virtual ~ISdlEventController() {} }; } //FIFE #endif fifengine-0.4.1/engine/core/eventchannel/sdl/ec_isdleventlistener.h000066400000000000000000000044531304641216200254670ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_EVENTCHANNEL_ISDLEVENTLISTENER_H #define FIFE_EVENTCHANNEL_ISDLEVENTLISTENER_H // Standard C++ library includes // // 3rd party library includes // // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder // union SDL_Event; namespace FIFE { /** Listener of SDL events. * To be able to listen for commands you must make a class which inherits * from this class and implements the onSdlEvent function. */ class ISdlEventListener { public: /** Called when an SDL event is received from SDL * @param evt SDL event */ virtual bool onSdlEvent(SDL_Event& evt) = 0; virtual ~ISdlEventListener() {} }; } //FIFE #endif fifengine-0.4.1/engine/core/eventchannel/source/000077500000000000000000000000001304641216200216145ustar00rootroot00000000000000fifengine-0.4.1/engine/core/eventchannel/source/ec_eventsourcetypes.h000066400000000000000000000040231304641216200260620ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_EVENTCHANNEL_EVENTSOURCETYPES_H #define FIFE_EVENTCHANNEL_EVENTSOURCETYPES_H // Standard C++ library includes // // 3rd party library includes // // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder // namespace FIFE { /** Types for different event sources */ enum EventSourceType { ES_ENGINE = 1, ES_GUICHAN_WIDGET = 2, }; } //FIFE #endif fifengine-0.4.1/engine/core/eventchannel/source/ec_ieventsource.h000066400000000000000000000043071304641216200251530ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_EVENTCHANNEL_IEVENTSOURCE_H #define FIFE_EVENTCHANNEL_IEVENTSOURCE_H // Standard C++ library includes // // 3rd party library includes // // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder // #include "ec_eventsourcetypes.h" namespace FIFE { /** Representation of event source (a thing sending events) */ class IEventSource { public: /** Gets the source type of this event * @return source type of this event */ virtual EventSourceType getEventSourceType() = 0; virtual ~IEventSource() {} }; } //FIFE #endif fifengine-0.4.1/engine/core/eventchannel/text/000077500000000000000000000000001304641216200213005ustar00rootroot00000000000000fifengine-0.4.1/engine/core/eventchannel/text/ec_itextcontroller.h000066400000000000000000000054741304641216200253730ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_EVENTCHANNEL_ITEXT_CONTROLLER_H #define FIFE_EVENTCHANNEL_ITEXT_CONTROLLER_H // Standard C++ library includes // // 3rd party library includes // // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder // namespace FIFE { class ITextListener; /** Controller provides a way to receive events from the system * Using this interface, clients can subscribe themselves to receive events */ class ITextController { public: /** Adds a listener to the back of the listener deque * Listener will be notified via the corresponding events * @param listener listener to add */ virtual void addTextListener(ITextListener* listener) = 0; /** Adds a listener to the front of the listener deque * Listener will be notified via the corresponding events * @param listener listener to add */ virtual void addTextListenerFront(ITextListener* listener) = 0; /** Removes an added listener from the controller. * Listener will not be notified anymore via the corresponding events * @param listener listener to remove */ virtual void removeTextListener(ITextListener* listener) = 0; virtual ~ITextController() {} }; } //FIFE #endif fifengine-0.4.1/engine/core/eventchannel/text/ec_itextlistener.h000066400000000000000000000046511304641216200250310ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_EVENTCHANNEL_ITEXTLISTENER_H #define FIFE_EVENTCHANNEL_ITEXTLISTENER_H // Standard C++ library includes // // 3rd party library includes // // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder // namespace FIFE { class TextEvent; /** Listener of text events. * To be able to listen for text events you must make a class which inherits * from this class and implements its functions. */ class ITextListener { public: /** Called on a text input event. * @param evt TextEvent that describes the event. */ virtual void textInput(TextEvent& evt) = 0; /** Called on a text edit event. * @param evt TextEvent that describes the event. */ virtual void textEdit(TextEvent& evt) = 0; virtual ~ITextListener() {} }; } //FIFE #endif fifengine-0.4.1/engine/core/eventchannel/text/ec_text.h000066400000000000000000000056301304641216200231100ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_EVENTCHANNEL_TEXT_H #define FIFE_EVENTCHANNEL_TEXT_H // Standard C++ library includes // // 3rd party library includes // // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder // namespace FIFE { /** Represents a text. */ class Text { public: /** Constructor * @param text pointer to the UTF-8 text * @param start point of the text edit event * @param length length of the text edit event */ Text(const char* text = 0, int32_t start = 0, int32_t length = 0): m_text(text ? text : ""), m_start(start), m_length(length) {} /** Destructor */ virtual ~Text() {} /** Tells whether the Text can be represented as a string. */ bool isPrintable() const { if (!m_text.empty()) { return true; } return false; } /** Gets the string, encoded as UTF-8. */ std::string getAsString() const { return m_text; } /** Gets the start point of the text edit event, cursor position. */ int32_t getStart() const { return m_start; } /** Gets the length of the text edit event, * the number of characters to edit from the start point. */ int32_t getLength() const { return m_length; } private: std::string m_text; int32_t m_start; int32_t m_length; }; } //FIFE #endif fifengine-0.4.1/engine/core/eventchannel/text/ec_textevent.h000066400000000000000000000066041304641216200241540ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_EVENTCHANNEL_TEXTEVENT_H #define FIFE_EVENTCHANNEL_TEXTEVENT_H // Standard C++ library includes // // 3rd party library includes // // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder // #include "eventchannel/base/ec_inputevent.h" #include "eventchannel/source/ec_ieventsource.h" #include "ec_text.h" namespace FIFE { /** Class for text events */ class TextEvent: public InputEvent { public: enum TextEventType { UNKNOWN = 0, INPUT = 1, EDIT = 2 }; /** Constructor */ TextEvent(): InputEvent(), m_eventType(UNKNOWN), m_text(Text()) {} /** Destructor. */ virtual ~TextEvent() {} TextEventType getType() const { return m_eventType; } void setType(TextEventType type) { m_eventType = type; } const Text& getText() const { return m_text; } void setText(const Text& text) { m_text = text; } virtual void consume() { InputEvent::consume(); } virtual bool isConsumed() const { return InputEvent::isConsumed(); } virtual void consumedByWidgets() { InputEvent::consumedByWidgets(); } virtual bool isConsumedByWidgets() const { return InputEvent::isConsumedByWidgets(); } virtual IEventSource* getSource() const { return InputEvent::getSource(); } virtual void setSource(IEventSource* source) { InputEvent::setSource(source); } virtual int32_t getTimeStamp() const { return InputEvent::getTimeStamp(); } virtual void setTimeStamp(int32_t timestamp ) { InputEvent::setTimeStamp(timestamp); } virtual const std::string& getName() const { const static std::string eventName("TextEvent"); return eventName; } virtual std::string getDebugString() const { return InputEvent::getDebugString(); } private: TextEventType m_eventType; Text m_text; }; } //FIFE #endif fifengine-0.4.1/engine/core/export.h000066400000000000000000000042101304641216200173310ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_EXPORT_H #define FIFE_EXPORT_H #if defined _WIN32 || defined __CYGWIN__ #ifdef FIFE_EXPORTING #ifdef __GNUC__ #define FIFE_PUBLIC __attribute__((dllexport)) #else #define FIFE_PUBLIC __declspec(dllexport) #endif #else #ifdef __GNUC__ #define FIFE_PUBLIC __attribute__((dllimport)) #else #define FIFE_PUBLIC __declspec(dllimport) #endif #endif #define FIFE_HIDDEN #else #if __GNUC__ >= 4 #define FIFE_PUBLIC __attribute__((visibility("default"))) #define FIFE_HIDDEN __attribute__((visibility("hidden"))) #else #define FIFE_PUBLIC #define FIFE_HIDDEN #endif #endif #endif //FIFE_EXPORT_H fifengine-0.4.1/engine/core/ext/000077500000000000000000000000001304641216200164425ustar00rootroot00000000000000fifengine-0.4.1/engine/core/ext/glee/000077500000000000000000000000001304641216200173565ustar00rootroot00000000000000fifengine-0.4.1/engine/core/ext/glee/GLee.cpp000066400000000000000000057026741304641216200207230ustar00rootroot00000000000000/*************************************************************************** * * GLee.c * GLee (OpenGL Easy Extension library) * Version : 5.5 * * Copyright (c)2011 Ben Woodhouse All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer as * the first lines of this file unmodified. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY BEN WOODHOUSE ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL BEN WOODHOUSE BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * Web: http://elf-stone.com/glee.php * * [This file was automatically generated by GLeeGen 7.0 * ***************************************************************************/ #ifdef _MSC_VER #pragma optimize( "g", off ) #endif #include #include #include #include "GLee.h" #if defined(__APPLE__) || defined(__APPLE_CC__) #include #endif typedef GLuint(*GLEE_LINK_FUNCTION)(void); GLboolean __GLeeInited=GL_FALSE; #ifndef _WIN32 #define __stdcall /* nothing */ #endif #ifdef _MSC_VER #define snprintf sprintf_s #define strdup _strdup #endif GLEE_FUNC __GLeeGetProcAddress(const char *extname) { #ifdef _WIN32 return (GLEE_FUNC)wglGetProcAddress(extname); #elif defined(__APPLE__) || defined(__APPLE_CC__) CFBundleRef bundle; CFURLRef bundleURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, CFSTR("/System/Library/Frameworks/OpenGL.framework"), kCFURLPOSIXPathStyle, true); CFStringRef functionName = CFStringCreateWithCString(kCFAllocatorDefault, extname, kCFStringEncodingASCII); GLEE_FUNC function; bundle = CFBundleCreate(kCFAllocatorDefault, bundleURL); if (bundle == NULL) { CFRelease(bundleURL); CFRelease(functionName); return NULL; } function = (GLEE_FUNC)CFBundleGetFunctionPointerForName(bundle, functionName); CFRelease(bundleURL); CFRelease(functionName); CFRelease(bundle); return function; #else return (GLEE_FUNC)glXGetProcAddressARB((const GLubyte *)extname); #endif } /* Extension querying variables */ GLboolean _GLEE_VERSION_1_2 = GL_FALSE; GLboolean _GLEE_ARB_imaging = GL_FALSE; GLboolean _GLEE_VERSION_1_3 = GL_FALSE; GLboolean _GLEE_VERSION_1_4 = GL_FALSE; GLboolean _GLEE_VERSION_1_5 = GL_FALSE; GLboolean _GLEE_VERSION_2_0 = GL_FALSE; GLboolean _GLEE_VERSION_2_1 = GL_FALSE; GLboolean _GLEE_VERSION_3_0 = GL_FALSE; GLboolean _GLEE_VERSION_3_1 = GL_FALSE; GLboolean _GLEE_VERSION_3_2 = GL_FALSE; GLboolean _GLEE_VERSION_3_3 = GL_FALSE; GLboolean _GLEE_VERSION_4_0 = GL_FALSE; GLboolean _GLEE_VERSION_4_1 = GL_FALSE; GLboolean _GLEE_VERSION_4_2 = GL_FALSE; GLboolean _GLEE_VERSION_4_3 = GL_FALSE; GLboolean _GLEE_ARB_multitexture = GL_FALSE; GLboolean _GLEE_ARB_transpose_matrix = GL_FALSE; GLboolean _GLEE_ARB_multisample = GL_FALSE; GLboolean _GLEE_ARB_texture_env_add = GL_FALSE; GLboolean _GLEE_ARB_texture_cube_map = GL_FALSE; GLboolean _GLEE_ARB_texture_compression = GL_FALSE; GLboolean _GLEE_ARB_texture_border_clamp = GL_FALSE; GLboolean _GLEE_ARB_point_parameters = GL_FALSE; GLboolean _GLEE_ARB_vertex_blend = GL_FALSE; GLboolean _GLEE_ARB_matrix_palette = GL_FALSE; GLboolean _GLEE_ARB_texture_env_combine = GL_FALSE; GLboolean _GLEE_ARB_texture_env_crossbar = GL_FALSE; GLboolean _GLEE_ARB_texture_env_dot3 = GL_FALSE; GLboolean _GLEE_ARB_texture_mirrored_repeat = GL_FALSE; GLboolean _GLEE_ARB_depth_texture = GL_FALSE; GLboolean _GLEE_ARB_shadow = GL_FALSE; GLboolean _GLEE_ARB_shadow_ambient = GL_FALSE; GLboolean _GLEE_ARB_window_pos = GL_FALSE; GLboolean _GLEE_ARB_vertex_program = GL_FALSE; GLboolean _GLEE_ARB_fragment_program = GL_FALSE; GLboolean _GLEE_ARB_vertex_buffer_object = GL_FALSE; GLboolean _GLEE_ARB_occlusion_query = GL_FALSE; GLboolean _GLEE_ARB_shader_objects = GL_FALSE; GLboolean _GLEE_ARB_vertex_shader = GL_FALSE; GLboolean _GLEE_ARB_fragment_shader = GL_FALSE; GLboolean _GLEE_ARB_shading_language_100 = GL_FALSE; GLboolean _GLEE_ARB_texture_non_power_of_two = GL_FALSE; GLboolean _GLEE_ARB_point_sprite = GL_FALSE; GLboolean _GLEE_ARB_fragment_program_shadow = GL_FALSE; GLboolean _GLEE_ARB_draw_buffers = GL_FALSE; GLboolean _GLEE_ARB_texture_rectangle = GL_FALSE; GLboolean _GLEE_ARB_color_buffer_float = GL_FALSE; GLboolean _GLEE_ARB_half_float_pixel = GL_FALSE; GLboolean _GLEE_ARB_texture_float = GL_FALSE; GLboolean _GLEE_ARB_pixel_buffer_object = GL_FALSE; GLboolean _GLEE_ARB_depth_buffer_float = GL_FALSE; GLboolean _GLEE_ARB_draw_instanced = GL_FALSE; GLboolean _GLEE_ARB_framebuffer_object = GL_FALSE; GLboolean _GLEE_ARB_framebuffer_sRGB = GL_FALSE; GLboolean _GLEE_ARB_geometry_shader4 = GL_FALSE; GLboolean _GLEE_ARB_half_float_vertex = GL_FALSE; GLboolean _GLEE_ARB_instanced_arrays = GL_FALSE; GLboolean _GLEE_ARB_map_buffer_range = GL_FALSE; GLboolean _GLEE_ARB_texture_buffer_object = GL_FALSE; GLboolean _GLEE_ARB_texture_compression_rgtc = GL_FALSE; GLboolean _GLEE_ARB_texture_rg = GL_FALSE; GLboolean _GLEE_ARB_vertex_array_object = GL_FALSE; GLboolean _GLEE_ARB_uniform_buffer_object = GL_FALSE; GLboolean _GLEE_ARB_compatibility = GL_FALSE; GLboolean _GLEE_ARB_copy_buffer = GL_FALSE; GLboolean _GLEE_ARB_shader_texture_lod = GL_FALSE; GLboolean _GLEE_ARB_depth_clamp = GL_FALSE; GLboolean _GLEE_ARB_draw_elements_base_vertex = GL_FALSE; GLboolean _GLEE_ARB_fragment_coord_conventions = GL_FALSE; GLboolean _GLEE_ARB_provoking_vertex = GL_FALSE; GLboolean _GLEE_ARB_seamless_cube_map = GL_FALSE; GLboolean _GLEE_ARB_sync = GL_FALSE; GLboolean _GLEE_ARB_texture_multisample = GL_FALSE; GLboolean _GLEE_ARB_vertex_array_bgra = GL_FALSE; GLboolean _GLEE_ARB_draw_buffers_blend = GL_FALSE; GLboolean _GLEE_ARB_sample_shading = GL_FALSE; GLboolean _GLEE_ARB_texture_cube_map_array = GL_FALSE; GLboolean _GLEE_ARB_texture_gather = GL_FALSE; GLboolean _GLEE_ARB_texture_query_lod = GL_FALSE; GLboolean _GLEE_ARB_shading_language_include = GL_FALSE; GLboolean _GLEE_ARB_texture_compression_bptc = GL_FALSE; GLboolean _GLEE_ARB_blend_func_extended = GL_FALSE; GLboolean _GLEE_ARB_explicit_attrib_location = GL_FALSE; GLboolean _GLEE_ARB_occlusion_query2 = GL_FALSE; GLboolean _GLEE_ARB_sampler_objects = GL_FALSE; GLboolean _GLEE_ARB_shader_bit_encoding = GL_FALSE; GLboolean _GLEE_ARB_texture_rgb10_a2ui = GL_FALSE; GLboolean _GLEE_ARB_texture_swizzle = GL_FALSE; GLboolean _GLEE_ARB_timer_query = GL_FALSE; GLboolean _GLEE_ARB_vertex_type_2_10_10_10_rev = GL_FALSE; GLboolean _GLEE_ARB_draw_indirect = GL_FALSE; GLboolean _GLEE_ARB_gpu_shader5 = GL_FALSE; GLboolean _GLEE_ARB_gpu_shader_fp64 = GL_FALSE; GLboolean _GLEE_ARB_shader_subroutine = GL_FALSE; GLboolean _GLEE_ARB_tessellation_shader = GL_FALSE; GLboolean _GLEE_ARB_texture_buffer_object_rgb32 = GL_FALSE; GLboolean _GLEE_ARB_transform_feedback2 = GL_FALSE; GLboolean _GLEE_ARB_transform_feedback3 = GL_FALSE; GLboolean _GLEE_ARB_ES2_compatibility = GL_FALSE; GLboolean _GLEE_ARB_get_program_binary = GL_FALSE; GLboolean _GLEE_ARB_separate_shader_objects = GL_FALSE; GLboolean _GLEE_ARB_shader_precision = GL_FALSE; GLboolean _GLEE_ARB_vertex_attrib_64bit = GL_FALSE; GLboolean _GLEE_ARB_viewport_array = GL_FALSE; GLboolean _GLEE_ARB_cl_event = GL_FALSE; GLboolean _GLEE_ARB_debug_output = GL_FALSE; GLboolean _GLEE_ARB_robustness = GL_FALSE; GLboolean _GLEE_ARB_shader_stencil_export = GL_FALSE; GLboolean _GLEE_ARB_base_instance = GL_FALSE; GLboolean _GLEE_ARB_shading_language_420pack = GL_FALSE; GLboolean _GLEE_ARB_transform_feedback_instanced = GL_FALSE; GLboolean _GLEE_ARB_compressed_texture_pixel_storage = GL_FALSE; GLboolean _GLEE_ARB_conservative_depth = GL_FALSE; GLboolean _GLEE_ARB_internalformat_query = GL_FALSE; GLboolean _GLEE_ARB_map_buffer_alignment = GL_FALSE; GLboolean _GLEE_ARB_shader_atomic_counters = GL_FALSE; GLboolean _GLEE_ARB_shader_image_load_store = GL_FALSE; GLboolean _GLEE_ARB_shading_language_packing = GL_FALSE; GLboolean _GLEE_ARB_texture_storage = GL_FALSE; GLboolean _GLEE_KHR_texture_compression_astc_ldr = GL_FALSE; GLboolean _GLEE_KHR_debug = GL_FALSE; GLboolean _GLEE_ARB_arrays_of_arrays = GL_FALSE; GLboolean _GLEE_ARB_clear_buffer_object = GL_FALSE; GLboolean _GLEE_ARB_compute_shader = GL_FALSE; GLboolean _GLEE_ARB_copy_image = GL_FALSE; GLboolean _GLEE_ARB_texture_view = GL_FALSE; GLboolean _GLEE_ARB_vertex_attrib_binding = GL_FALSE; GLboolean _GLEE_ARB_robustness_isolation = GL_FALSE; GLboolean _GLEE_ARB_ES3_compatibility = GL_FALSE; GLboolean _GLEE_ARB_explicit_uniform_location = GL_FALSE; GLboolean _GLEE_ARB_fragment_layer_viewport = GL_FALSE; GLboolean _GLEE_ARB_framebuffer_no_attachments = GL_FALSE; GLboolean _GLEE_ARB_internalformat_query2 = GL_FALSE; GLboolean _GLEE_ARB_invalidate_subdata = GL_FALSE; GLboolean _GLEE_ARB_multi_draw_indirect = GL_FALSE; GLboolean _GLEE_ARB_program_interface_query = GL_FALSE; GLboolean _GLEE_ARB_robust_buffer_access_behavior = GL_FALSE; GLboolean _GLEE_ARB_shader_image_size = GL_FALSE; GLboolean _GLEE_ARB_shader_storage_buffer_object = GL_FALSE; GLboolean _GLEE_ARB_stencil_texturing = GL_FALSE; GLboolean _GLEE_ARB_texture_buffer_range = GL_FALSE; GLboolean _GLEE_ARB_texture_query_levels = GL_FALSE; GLboolean _GLEE_ARB_texture_storage_multisample = GL_FALSE; GLboolean _GLEE_EXT_abgr = GL_FALSE; GLboolean _GLEE_EXT_blend_color = GL_FALSE; GLboolean _GLEE_EXT_polygon_offset = GL_FALSE; GLboolean _GLEE_EXT_texture = GL_FALSE; GLboolean _GLEE_EXT_texture3D = GL_FALSE; GLboolean _GLEE_SGIS_texture_filter4 = GL_FALSE; GLboolean _GLEE_EXT_subtexture = GL_FALSE; GLboolean _GLEE_EXT_copy_texture = GL_FALSE; GLboolean _GLEE_EXT_histogram = GL_FALSE; GLboolean _GLEE_EXT_convolution = GL_FALSE; GLboolean _GLEE_SGI_color_matrix = GL_FALSE; GLboolean _GLEE_SGI_color_table = GL_FALSE; GLboolean _GLEE_SGIS_pixel_texture = GL_FALSE; GLboolean _GLEE_SGIX_pixel_texture = GL_FALSE; GLboolean _GLEE_SGIS_texture4D = GL_FALSE; GLboolean _GLEE_SGI_texture_color_table = GL_FALSE; GLboolean _GLEE_EXT_cmyka = GL_FALSE; GLboolean _GLEE_EXT_texture_object = GL_FALSE; GLboolean _GLEE_SGIS_detail_texture = GL_FALSE; GLboolean _GLEE_SGIS_sharpen_texture = GL_FALSE; GLboolean _GLEE_EXT_packed_pixels = GL_FALSE; GLboolean _GLEE_SGIS_texture_lod = GL_FALSE; GLboolean _GLEE_SGIS_multisample = GL_FALSE; GLboolean _GLEE_EXT_rescale_normal = GL_FALSE; GLboolean _GLEE_EXT_vertex_array = GL_FALSE; GLboolean _GLEE_EXT_misc_attribute = GL_FALSE; GLboolean _GLEE_SGIS_generate_mipmap = GL_FALSE; GLboolean _GLEE_SGIX_clipmap = GL_FALSE; GLboolean _GLEE_SGIX_shadow = GL_FALSE; GLboolean _GLEE_SGIS_texture_edge_clamp = GL_FALSE; GLboolean _GLEE_SGIS_texture_border_clamp = GL_FALSE; GLboolean _GLEE_EXT_blend_minmax = GL_FALSE; GLboolean _GLEE_EXT_blend_subtract = GL_FALSE; GLboolean _GLEE_EXT_blend_logic_op = GL_FALSE; GLboolean _GLEE_SGIX_interlace = GL_FALSE; GLboolean _GLEE_SGIX_pixel_tiles = GL_FALSE; GLboolean _GLEE_SGIS_texture_select = GL_FALSE; GLboolean _GLEE_SGIX_sprite = GL_FALSE; GLboolean _GLEE_SGIX_texture_multi_buffer = GL_FALSE; GLboolean _GLEE_EXT_point_parameters = GL_FALSE; GLboolean _GLEE_SGIS_point_parameters = GL_FALSE; GLboolean _GLEE_SGIX_instruments = GL_FALSE; GLboolean _GLEE_SGIX_texture_scale_bias = GL_FALSE; GLboolean _GLEE_SGIX_framezoom = GL_FALSE; GLboolean _GLEE_SGIX_tag_sample_buffer = GL_FALSE; GLboolean _GLEE_FfdMaskSGIX = GL_FALSE; GLboolean _GLEE_SGIX_polynomial_ffd = GL_FALSE; GLboolean _GLEE_SGIX_reference_plane = GL_FALSE; GLboolean _GLEE_SGIX_flush_raster = GL_FALSE; GLboolean _GLEE_SGIX_depth_texture = GL_FALSE; GLboolean _GLEE_SGIS_fog_function = GL_FALSE; GLboolean _GLEE_SGIX_fog_offset = GL_FALSE; GLboolean _GLEE_HP_image_transform = GL_FALSE; GLboolean _GLEE_HP_convolution_border_modes = GL_FALSE; GLboolean _GLEE_INGR_palette_buffer = GL_FALSE; GLboolean _GLEE_SGIX_texture_add_env = GL_FALSE; GLboolean _GLEE_EXT_color_subtable = GL_FALSE; GLboolean _GLEE_PGI_vertex_hints = GL_FALSE; GLboolean _GLEE_PGI_misc_hints = GL_FALSE; GLboolean _GLEE_EXT_paletted_texture = GL_FALSE; GLboolean _GLEE_EXT_clip_volume_hint = GL_FALSE; GLboolean _GLEE_SGIX_list_priority = GL_FALSE; GLboolean _GLEE_SGIX_ir_instrument1 = GL_FALSE; GLboolean _GLEE_SGIX_calligraphic_fragment = GL_FALSE; GLboolean _GLEE_SGIX_texture_lod_bias = GL_FALSE; GLboolean _GLEE_SGIX_shadow_ambient = GL_FALSE; GLboolean _GLEE_EXT_index_texture = GL_FALSE; GLboolean _GLEE_EXT_index_material = GL_FALSE; GLboolean _GLEE_EXT_index_func = GL_FALSE; GLboolean _GLEE_EXT_index_array_formats = GL_FALSE; GLboolean _GLEE_EXT_compiled_vertex_array = GL_FALSE; GLboolean _GLEE_EXT_cull_vertex = GL_FALSE; GLboolean _GLEE_SGIX_ycrcb = GL_FALSE; GLboolean _GLEE_SGIX_fragment_lighting = GL_FALSE; GLboolean _GLEE_IBM_rasterpos_clip = GL_FALSE; GLboolean _GLEE_HP_texture_lighting = GL_FALSE; GLboolean _GLEE_EXT_draw_range_elements = GL_FALSE; GLboolean _GLEE_WIN_phong_shading = GL_FALSE; GLboolean _GLEE_WIN_specular_fog = GL_FALSE; GLboolean _GLEE_EXT_light_texture = GL_FALSE; GLboolean _GLEE_SGIX_blend_alpha_minmax = GL_FALSE; GLboolean _GLEE_SGIX_impact_pixel_texture = GL_FALSE; GLboolean _GLEE_EXT_bgra = GL_FALSE; GLboolean _GLEE_SGIX_async = GL_FALSE; GLboolean _GLEE_SGIX_async_pixel = GL_FALSE; GLboolean _GLEE_SGIX_async_histogram = GL_FALSE; GLboolean _GLEE_INTEL_texture_scissor = GL_FALSE; GLboolean _GLEE_INTEL_parallel_arrays = GL_FALSE; GLboolean _GLEE_HP_occlusion_test = GL_FALSE; GLboolean _GLEE_EXT_pixel_transform = GL_FALSE; GLboolean _GLEE_EXT_pixel_transform_color_table = GL_FALSE; GLboolean _GLEE_EXT_shared_texture_palette = GL_FALSE; GLboolean _GLEE_EXT_separate_specular_color = GL_FALSE; GLboolean _GLEE_EXT_secondary_color = GL_FALSE; GLboolean _GLEE_EXT_texture_perturb_normal = GL_FALSE; GLboolean _GLEE_EXT_multi_draw_arrays = GL_FALSE; GLboolean _GLEE_EXT_fog_coord = GL_FALSE; GLboolean _GLEE_REND_screen_coordinates = GL_FALSE; GLboolean _GLEE_EXT_coordinate_frame = GL_FALSE; GLboolean _GLEE_EXT_texture_env_combine = GL_FALSE; GLboolean _GLEE_APPLE_specular_vector = GL_FALSE; GLboolean _GLEE_APPLE_transform_hint = GL_FALSE; GLboolean _GLEE_SGIX_fog_scale = GL_FALSE; GLboolean _GLEE_SUNX_constant_data = GL_FALSE; GLboolean _GLEE_SUN_global_alpha = GL_FALSE; GLboolean _GLEE_SUN_triangle_list = GL_FALSE; GLboolean _GLEE_SUN_vertex = GL_FALSE; GLboolean _GLEE_EXT_blend_func_separate = GL_FALSE; GLboolean _GLEE_INGR_color_clamp = GL_FALSE; GLboolean _GLEE_INGR_interlace_read = GL_FALSE; GLboolean _GLEE_EXT_stencil_wrap = GL_FALSE; GLboolean _GLEE_EXT_422_pixels = GL_FALSE; GLboolean _GLEE_NV_texgen_reflection = GL_FALSE; GLboolean _GLEE_EXT_texture_cube_map = GL_FALSE; GLboolean _GLEE_SUN_convolution_border_modes = GL_FALSE; GLboolean _GLEE_EXT_texture_env_add = GL_FALSE; GLboolean _GLEE_EXT_texture_lod_bias = GL_FALSE; GLboolean _GLEE_EXT_texture_filter_anisotropic = GL_FALSE; GLboolean _GLEE_EXT_vertex_weighting = GL_FALSE; GLboolean _GLEE_NV_light_max_exponent = GL_FALSE; GLboolean _GLEE_NV_vertex_array_range = GL_FALSE; GLboolean _GLEE_NV_register_combiners = GL_FALSE; GLboolean _GLEE_NV_fog_distance = GL_FALSE; GLboolean _GLEE_NV_texgen_emboss = GL_FALSE; GLboolean _GLEE_NV_blend_square = GL_FALSE; GLboolean _GLEE_NV_texture_env_combine4 = GL_FALSE; GLboolean _GLEE_MESA_resize_buffers = GL_FALSE; GLboolean _GLEE_MESA_window_pos = GL_FALSE; GLboolean _GLEE_EXT_texture_compression_s3tc = GL_FALSE; GLboolean _GLEE_IBM_cull_vertex = GL_FALSE; GLboolean _GLEE_IBM_multimode_draw_arrays = GL_FALSE; GLboolean _GLEE_IBM_vertex_array_lists = GL_FALSE; GLboolean _GLEE_SGIX_subsample = GL_FALSE; GLboolean _GLEE_SGIX_ycrcb_subsample = GL_FALSE; GLboolean _GLEE_SGIX_ycrcba = GL_FALSE; GLboolean _GLEE_SGI_depth_pass_instrument = GL_FALSE; GLboolean _GLEE_3DFX_texture_compression_FXT1 = GL_FALSE; GLboolean _GLEE_3DFX_multisample = GL_FALSE; GLboolean _GLEE_3DFX_tbuffer = GL_FALSE; GLboolean _GLEE_EXT_multisample = GL_FALSE; GLboolean _GLEE_SGIX_vertex_preclip = GL_FALSE; GLboolean _GLEE_SGIX_convolution_accuracy = GL_FALSE; GLboolean _GLEE_SGIX_resample = GL_FALSE; GLboolean _GLEE_SGIS_point_line_texgen = GL_FALSE; GLboolean _GLEE_SGIS_texture_color_mask = GL_FALSE; GLboolean _GLEE_EXT_texture_env_dot3 = GL_FALSE; GLboolean _GLEE_ATI_texture_mirror_once = GL_FALSE; GLboolean _GLEE_NV_fence = GL_FALSE; GLboolean _GLEE_IBM_texture_mirrored_repeat = GL_FALSE; GLboolean _GLEE_NV_evaluators = GL_FALSE; GLboolean _GLEE_NV_packed_depth_stencil = GL_FALSE; GLboolean _GLEE_NV_register_combiners2 = GL_FALSE; GLboolean _GLEE_NV_texture_compression_vtc = GL_FALSE; GLboolean _GLEE_NV_texture_rectangle = GL_FALSE; GLboolean _GLEE_NV_texture_shader = GL_FALSE; GLboolean _GLEE_NV_texture_shader2 = GL_FALSE; GLboolean _GLEE_NV_vertex_array_range2 = GL_FALSE; GLboolean _GLEE_NV_vertex_program = GL_FALSE; GLboolean _GLEE_SGIX_texture_coordinate_clamp = GL_FALSE; GLboolean _GLEE_SGIX_scalebias_hint = GL_FALSE; GLboolean _GLEE_OML_interlace = GL_FALSE; GLboolean _GLEE_OML_subsample = GL_FALSE; GLboolean _GLEE_OML_resample = GL_FALSE; GLboolean _GLEE_NV_copy_depth_to_color = GL_FALSE; GLboolean _GLEE_ATI_envmap_bumpmap = GL_FALSE; GLboolean _GLEE_ATI_fragment_shader = GL_FALSE; GLboolean _GLEE_ATI_pn_triangles = GL_FALSE; GLboolean _GLEE_ATI_vertex_array_object = GL_FALSE; GLboolean _GLEE_EXT_vertex_shader = GL_FALSE; GLboolean _GLEE_ATI_vertex_streams = GL_FALSE; GLboolean _GLEE_ATI_element_array = GL_FALSE; GLboolean _GLEE_SUN_mesh_array = GL_FALSE; GLboolean _GLEE_SUN_slice_accum = GL_FALSE; GLboolean _GLEE_NV_multisample_filter_hint = GL_FALSE; GLboolean _GLEE_NV_depth_clamp = GL_FALSE; GLboolean _GLEE_NV_occlusion_query = GL_FALSE; GLboolean _GLEE_NV_point_sprite = GL_FALSE; GLboolean _GLEE_NV_texture_shader3 = GL_FALSE; GLboolean _GLEE_NV_vertex_program1_1 = GL_FALSE; GLboolean _GLEE_EXT_shadow_funcs = GL_FALSE; GLboolean _GLEE_EXT_stencil_two_side = GL_FALSE; GLboolean _GLEE_ATI_text_fragment_shader = GL_FALSE; GLboolean _GLEE_APPLE_client_storage = GL_FALSE; GLboolean _GLEE_APPLE_element_array = GL_FALSE; GLboolean _GLEE_APPLE_fence = GL_FALSE; GLboolean _GLEE_APPLE_vertex_array_object = GL_FALSE; GLboolean _GLEE_APPLE_vertex_array_range = GL_FALSE; GLboolean _GLEE_APPLE_ycbcr_422 = GL_FALSE; GLboolean _GLEE_S3_s3tc = GL_FALSE; GLboolean _GLEE_ATI_draw_buffers = GL_FALSE; GLboolean _GLEE_ATI_pixel_format_float = GL_FALSE; GLboolean _GLEE_ATI_texture_env_combine3 = GL_FALSE; GLboolean _GLEE_ATI_texture_float = GL_FALSE; GLboolean _GLEE_NV_float_buffer = GL_FALSE; GLboolean _GLEE_NV_fragment_program = GL_FALSE; GLboolean _GLEE_NV_half_float = GL_FALSE; GLboolean _GLEE_NV_pixel_data_range = GL_FALSE; GLboolean _GLEE_NV_primitive_restart = GL_FALSE; GLboolean _GLEE_NV_texture_expand_normal = GL_FALSE; GLboolean _GLEE_NV_vertex_program2 = GL_FALSE; GLboolean _GLEE_ATI_map_object_buffer = GL_FALSE; GLboolean _GLEE_ATI_separate_stencil = GL_FALSE; GLboolean _GLEE_ATI_vertex_attrib_array_object = GL_FALSE; GLboolean _GLEE_OES_byte_coordinates = GL_FALSE; GLboolean _GLEE_OES_fixed_point = GL_FALSE; GLboolean _GLEE_OES_single_precision = GL_FALSE; GLboolean _GLEE_OES_compressed_paletted_texture = GL_FALSE; GLboolean _GLEE_OES_read_format = GL_FALSE; GLboolean _GLEE_OES_query_matrix = GL_FALSE; GLboolean _GLEE_EXT_depth_bounds_test = GL_FALSE; GLboolean _GLEE_EXT_texture_mirror_clamp = GL_FALSE; GLboolean _GLEE_EXT_blend_equation_separate = GL_FALSE; GLboolean _GLEE_MESA_pack_invert = GL_FALSE; GLboolean _GLEE_MESA_ycbcr_texture = GL_FALSE; GLboolean _GLEE_EXT_pixel_buffer_object = GL_FALSE; GLboolean _GLEE_NV_fragment_program_option = GL_FALSE; GLboolean _GLEE_NV_fragment_program2 = GL_FALSE; GLboolean _GLEE_NV_vertex_program2_option = GL_FALSE; GLboolean _GLEE_NV_vertex_program3 = GL_FALSE; GLboolean _GLEE_EXT_framebuffer_object = GL_FALSE; GLboolean _GLEE_GREMEDY_string_marker = GL_FALSE; GLboolean _GLEE_EXT_packed_depth_stencil = GL_FALSE; GLboolean _GLEE_EXT_stencil_clear_tag = GL_FALSE; GLboolean _GLEE_EXT_texture_sRGB = GL_FALSE; GLboolean _GLEE_EXT_framebuffer_blit = GL_FALSE; GLboolean _GLEE_EXT_framebuffer_multisample = GL_FALSE; GLboolean _GLEE_MESAX_texture_stack = GL_FALSE; GLboolean _GLEE_EXT_timer_query = GL_FALSE; GLboolean _GLEE_EXT_gpu_program_parameters = GL_FALSE; GLboolean _GLEE_APPLE_flush_buffer_range = GL_FALSE; GLboolean _GLEE_EXT_gpu_shader4 = GL_FALSE; GLboolean _GLEE_EXT_draw_instanced = GL_FALSE; GLboolean _GLEE_EXT_packed_float = GL_FALSE; GLboolean _GLEE_EXT_texture_array = GL_FALSE; GLboolean _GLEE_EXT_texture_buffer_object = GL_FALSE; GLboolean _GLEE_EXT_texture_compression_latc = GL_FALSE; GLboolean _GLEE_EXT_texture_compression_rgtc = GL_FALSE; GLboolean _GLEE_EXT_texture_shared_exponent = GL_FALSE; GLboolean _GLEE_NV_depth_buffer_float = GL_FALSE; GLboolean _GLEE_NV_framebuffer_multisample_coverage = GL_FALSE; GLboolean _GLEE_EXT_framebuffer_sRGB = GL_FALSE; GLboolean _GLEE_NV_geometry_shader4 = GL_FALSE; GLboolean _GLEE_NV_parameter_buffer_object = GL_FALSE; GLboolean _GLEE_EXT_draw_buffers2 = GL_FALSE; GLboolean _GLEE_NV_transform_feedback = GL_FALSE; GLboolean _GLEE_EXT_bindable_uniform = GL_FALSE; GLboolean _GLEE_EXT_texture_integer = GL_FALSE; GLboolean _GLEE_GREMEDY_frame_terminator = GL_FALSE; GLboolean _GLEE_NV_conditional_render = GL_FALSE; GLboolean _GLEE_NV_present_video = GL_FALSE; GLboolean _GLEE_EXT_transform_feedback = GL_FALSE; GLboolean _GLEE_EXT_direct_state_access = GL_FALSE; GLboolean _GLEE_EXT_vertex_array_bgra = GL_FALSE; GLboolean _GLEE_EXT_texture_swizzle = GL_FALSE; GLboolean _GLEE_NV_explicit_multisample = GL_FALSE; GLboolean _GLEE_NV_transform_feedback2 = GL_FALSE; GLboolean _GLEE_ATI_meminfo = GL_FALSE; GLboolean _GLEE_AMD_performance_monitor = GL_FALSE; GLboolean _GLEE_AMD_texture_texture4 = GL_FALSE; GLboolean _GLEE_AMD_vertex_shader_tesselator = GL_FALSE; GLboolean _GLEE_EXT_provoking_vertex = GL_FALSE; GLboolean _GLEE_EXT_texture_snorm = GL_FALSE; GLboolean _GLEE_AMD_draw_buffers_blend = GL_FALSE; GLboolean _GLEE_APPLE_texture_range = GL_FALSE; GLboolean _GLEE_APPLE_float_pixels = GL_FALSE; GLboolean _GLEE_APPLE_vertex_program_evaluators = GL_FALSE; GLboolean _GLEE_APPLE_aux_depth_stencil = GL_FALSE; GLboolean _GLEE_APPLE_object_purgeable = GL_FALSE; GLboolean _GLEE_APPLE_row_bytes = GL_FALSE; GLboolean _GLEE_APPLE_rgb_422 = GL_FALSE; GLboolean _GLEE_NV_video_capture = GL_FALSE; GLboolean _GLEE_NV_copy_image = GL_FALSE; GLboolean _GLEE_EXT_separate_shader_objects = GL_FALSE; GLboolean _GLEE_NV_parameter_buffer_object2 = GL_FALSE; GLboolean _GLEE_NV_shader_buffer_load = GL_FALSE; GLboolean _GLEE_NV_vertex_buffer_unified_memory = GL_FALSE; GLboolean _GLEE_NV_texture_barrier = GL_FALSE; GLboolean _GLEE_AMD_shader_stencil_export = GL_FALSE; GLboolean _GLEE_AMD_seamless_cubemap_per_texture = GL_FALSE; GLboolean _GLEE_AMD_conservative_depth = GL_FALSE; GLboolean _GLEE_EXT_shader_image_load_store = GL_FALSE; GLboolean _GLEE_EXT_vertex_attrib_64bit = GL_FALSE; GLboolean _GLEE_NV_gpu_program5 = GL_FALSE; GLboolean _GLEE_NV_gpu_shader5 = GL_FALSE; GLboolean _GLEE_NV_shader_buffer_store = GL_FALSE; GLboolean _GLEE_NV_tessellation_program5 = GL_FALSE; GLboolean _GLEE_NV_vertex_attrib_integer_64bit = GL_FALSE; GLboolean _GLEE_NV_multisample_coverage = GL_FALSE; GLboolean _GLEE_AMD_name_gen_delete = GL_FALSE; GLboolean _GLEE_AMD_debug_output = GL_FALSE; GLboolean _GLEE_AMD_transform_feedback3_lines_triangles = GL_FALSE; GLboolean _GLEE_AMD_depth_clamp_separate = GL_FALSE; GLboolean _GLEE_EXT_texture_sRGB_decode = GL_FALSE; GLboolean _GLEE_NV_texture_multisample = GL_FALSE; GLboolean _GLEE_AMD_blend_minmax_factor = GL_FALSE; GLboolean _GLEE_AMD_sample_positions = GL_FALSE; GLboolean _GLEE_EXT_x11_sync_object = GL_FALSE; GLboolean _GLEE_AMD_multi_draw_indirect = GL_FALSE; GLboolean _GLEE_EXT_framebuffer_multisample_blit_scaled = GL_FALSE; GLboolean _GLEE_NV_path_rendering = GL_FALSE; GLboolean _GLEE_AMD_pinned_memory = GL_FALSE; GLboolean _GLEE_AMD_stencil_operation_extended = GL_FALSE; GLboolean _GLEE_AMD_vertex_shader_viewport_index = GL_FALSE; GLboolean _GLEE_AMD_vertex_shader_layer = GL_FALSE; GLboolean _GLEE_NV_bindless_texture = GL_FALSE; GLboolean _GLEE_NV_shader_atomic_float = GL_FALSE; GLboolean _GLEE_AMD_query_buffer_object = GL_FALSE; GLboolean _GLEE_NV_compute_program5 = GL_FALSE; GLboolean _GLEE_NV_shader_storage_buffer_object = GL_FALSE; GLboolean _GLEE_NV_shader_atomic_counters = GL_FALSE; GLboolean _GLEE_NV_deep_texture3D = GL_FALSE; GLboolean _GLEE_NVX_conditional_render = GL_FALSE; GLboolean _GLEE_AMD_sparse_texture = GL_FALSE; GLboolean _GLEE_AMD_shader_trinary_minmax = GL_FALSE; GLboolean _GLEE_INTEL_map_texture = GL_FALSE; GLboolean _GLEE_NV_draw_texture = GL_FALSE; GLboolean _GLEE_SGIX_texture_select = GL_FALSE; GLboolean _GLEE_INGR_blend_func_separate = GL_FALSE; GLboolean _GLEE_SGIX_depth_pass_instrument = GL_FALSE; GLboolean _GLEE_SGIX_igloo_interface = GL_FALSE; /* GL Extension names */ char __GLeeGLExtensionNames[463][43]={ "GL_VERSION_1_2", "GL_ARB_imaging", "GL_VERSION_1_3", "GL_VERSION_1_4", "GL_VERSION_1_5", "GL_VERSION_2_0", "GL_VERSION_2_1", "GL_VERSION_3_0", "GL_VERSION_3_1", "GL_VERSION_3_2", "GL_VERSION_3_3", "GL_VERSION_4_0", "GL_VERSION_4_1", "GL_VERSION_4_2", "GL_VERSION_4_3", "GL_ARB_multitexture", "GL_ARB_transpose_matrix", "GL_ARB_multisample", "GL_ARB_texture_env_add", "GL_ARB_texture_cube_map", "GL_ARB_texture_compression", "GL_ARB_texture_border_clamp", "GL_ARB_point_parameters", "GL_ARB_vertex_blend", "GL_ARB_matrix_palette", "GL_ARB_texture_env_combine", "GL_ARB_texture_env_crossbar", "GL_ARB_texture_env_dot3", "GL_ARB_texture_mirrored_repeat", "GL_ARB_depth_texture", "GL_ARB_shadow", "GL_ARB_shadow_ambient", "GL_ARB_window_pos", "GL_ARB_vertex_program", "GL_ARB_fragment_program", "GL_ARB_vertex_buffer_object", "GL_ARB_occlusion_query", "GL_ARB_shader_objects", "GL_ARB_vertex_shader", "GL_ARB_fragment_shader", "GL_ARB_shading_language_100", "GL_ARB_texture_non_power_of_two", "GL_ARB_point_sprite", "GL_ARB_fragment_program_shadow", "GL_ARB_draw_buffers", "GL_ARB_texture_rectangle", "GL_ARB_color_buffer_float", "GL_ARB_half_float_pixel", "GL_ARB_texture_float", "GL_ARB_pixel_buffer_object", "GL_ARB_depth_buffer_float", "GL_ARB_draw_instanced", "GL_ARB_framebuffer_object", "GL_ARB_framebuffer_sRGB", "GL_ARB_geometry_shader4", "GL_ARB_half_float_vertex", "GL_ARB_instanced_arrays", "GL_ARB_map_buffer_range", "GL_ARB_texture_buffer_object", "GL_ARB_texture_compression_rgtc", "GL_ARB_texture_rg", "GL_ARB_vertex_array_object", "GL_ARB_uniform_buffer_object", "GL_ARB_compatibility", "GL_ARB_copy_buffer", "GL_ARB_shader_texture_lod", "GL_ARB_depth_clamp", "GL_ARB_draw_elements_base_vertex", "GL_ARB_fragment_coord_conventions", "GL_ARB_provoking_vertex", "GL_ARB_seamless_cube_map", "GL_ARB_sync", "GL_ARB_texture_multisample", "GL_ARB_vertex_array_bgra", "GL_ARB_draw_buffers_blend", "GL_ARB_sample_shading", "GL_ARB_texture_cube_map_array", "GL_ARB_texture_gather", "GL_ARB_texture_query_lod", "GL_ARB_shading_language_include", "GL_ARB_texture_compression_bptc", "GL_ARB_blend_func_extended", "GL_ARB_explicit_attrib_location", "GL_ARB_occlusion_query2", "GL_ARB_sampler_objects", "GL_ARB_shader_bit_encoding", "GL_ARB_texture_rgb10_a2ui", "GL_ARB_texture_swizzle", "GL_ARB_timer_query", "GL_ARB_vertex_type_2_10_10_10_rev", "GL_ARB_draw_indirect", "GL_ARB_gpu_shader5", "GL_ARB_gpu_shader_fp64", "GL_ARB_shader_subroutine", "GL_ARB_tessellation_shader", "GL_ARB_texture_buffer_object_rgb32", "GL_ARB_transform_feedback2", "GL_ARB_transform_feedback3", "GL_ARB_ES2_compatibility", "GL_ARB_get_program_binary", "GL_ARB_separate_shader_objects", "GL_ARB_shader_precision", "GL_ARB_vertex_attrib_64bit", "GL_ARB_viewport_array", "GL_ARB_cl_event", "GL_ARB_debug_output", "GL_ARB_robustness", "GL_ARB_shader_stencil_export", "GL_ARB_base_instance", "GL_ARB_shading_language_420pack", "GL_ARB_transform_feedback_instanced", "GL_ARB_compressed_texture_pixel_storage", "GL_ARB_conservative_depth", "GL_ARB_internalformat_query", "GL_ARB_map_buffer_alignment", "GL_ARB_shader_atomic_counters", "GL_ARB_shader_image_load_store", "GL_ARB_shading_language_packing", "GL_ARB_texture_storage", "GL_KHR_texture_compression_astc_ldr", "GL_KHR_debug", "GL_ARB_arrays_of_arrays", "GL_ARB_clear_buffer_object", "GL_ARB_compute_shader", "GL_ARB_copy_image", "GL_ARB_texture_view", "GL_ARB_vertex_attrib_binding", "GL_ARB_robustness_isolation", "GL_ARB_ES3_compatibility", "GL_ARB_explicit_uniform_location", "GL_ARB_fragment_layer_viewport", "GL_ARB_framebuffer_no_attachments", "GL_ARB_internalformat_query2", "GL_ARB_invalidate_subdata", "GL_ARB_multi_draw_indirect", "GL_ARB_program_interface_query", "GL_ARB_robust_buffer_access_behavior", "GL_ARB_shader_image_size", "GL_ARB_shader_storage_buffer_object", "GL_ARB_stencil_texturing", "GL_ARB_texture_buffer_range", "GL_ARB_texture_query_levels", "GL_ARB_texture_storage_multisample", "GL_EXT_abgr", "GL_EXT_blend_color", "GL_EXT_polygon_offset", "GL_EXT_texture", "GL_EXT_texture3D", "GL_SGIS_texture_filter4", "GL_EXT_subtexture", "GL_EXT_copy_texture", "GL_EXT_histogram", "GL_EXT_convolution", "GL_SGI_color_matrix", "GL_SGI_color_table", "GL_SGIS_pixel_texture", "GL_SGIX_pixel_texture", "GL_SGIS_texture4D", "GL_SGI_texture_color_table", "GL_EXT_cmyka", "GL_EXT_texture_object", "GL_SGIS_detail_texture", "GL_SGIS_sharpen_texture", "GL_EXT_packed_pixels", "GL_SGIS_texture_lod", "GL_SGIS_multisample", "GL_EXT_rescale_normal", "GL_EXT_vertex_array", "GL_EXT_misc_attribute", "GL_SGIS_generate_mipmap", "GL_SGIX_clipmap", "GL_SGIX_shadow", "GL_SGIS_texture_edge_clamp", "GL_SGIS_texture_border_clamp", "GL_EXT_blend_minmax", "GL_EXT_blend_subtract", "GL_EXT_blend_logic_op", "GL_SGIX_interlace", "GL_SGIX_pixel_tiles", "GL_SGIS_texture_select", "GL_SGIX_sprite", "GL_SGIX_texture_multi_buffer", "GL_EXT_point_parameters", "GL_SGIS_point_parameters", "GL_SGIX_instruments", "GL_SGIX_texture_scale_bias", "GL_SGIX_framezoom", "GL_SGIX_tag_sample_buffer", "GL_FfdMaskSGIX", "GL_SGIX_polynomial_ffd", "GL_SGIX_reference_plane", "GL_SGIX_flush_raster", "GL_SGIX_depth_texture", "GL_SGIS_fog_function", "GL_SGIX_fog_offset", "GL_HP_image_transform", "GL_HP_convolution_border_modes", "GL_INGR_palette_buffer", "GL_SGIX_texture_add_env", "GL_EXT_color_subtable", "GL_PGI_vertex_hints", "GL_PGI_misc_hints", "GL_EXT_paletted_texture", "GL_EXT_clip_volume_hint", "GL_SGIX_list_priority", "GL_SGIX_ir_instrument1", "GL_SGIX_calligraphic_fragment", "GL_SGIX_texture_lod_bias", "GL_SGIX_shadow_ambient", "GL_EXT_index_texture", "GL_EXT_index_material", "GL_EXT_index_func", "GL_EXT_index_array_formats", "GL_EXT_compiled_vertex_array", "GL_EXT_cull_vertex", "GL_SGIX_ycrcb", "GL_SGIX_fragment_lighting", "GL_IBM_rasterpos_clip", "GL_HP_texture_lighting", "GL_EXT_draw_range_elements", "GL_WIN_phong_shading", "GL_WIN_specular_fog", "GL_EXT_light_texture", "GL_SGIX_blend_alpha_minmax", "GL_SGIX_impact_pixel_texture", "GL_EXT_bgra", "GL_SGIX_async", "GL_SGIX_async_pixel", "GL_SGIX_async_histogram", "GL_INTEL_texture_scissor", "GL_INTEL_parallel_arrays", "GL_HP_occlusion_test", "GL_EXT_pixel_transform", "GL_EXT_pixel_transform_color_table", "GL_EXT_shared_texture_palette", "GL_EXT_separate_specular_color", "GL_EXT_secondary_color", "GL_EXT_texture_perturb_normal", "GL_EXT_multi_draw_arrays", "GL_EXT_fog_coord", "GL_REND_screen_coordinates", "GL_EXT_coordinate_frame", "GL_EXT_texture_env_combine", "GL_APPLE_specular_vector", "GL_APPLE_transform_hint", "GL_SGIX_fog_scale", "GL_SUNX_constant_data", "GL_SUN_global_alpha", "GL_SUN_triangle_list", "GL_SUN_vertex", "GL_EXT_blend_func_separate", "GL_INGR_color_clamp", "GL_INGR_interlace_read", "GL_EXT_stencil_wrap", "GL_EXT_422_pixels", "GL_NV_texgen_reflection", "GL_EXT_texture_cube_map", "GL_SUN_convolution_border_modes", "GL_EXT_texture_env_add", "GL_EXT_texture_lod_bias", "GL_EXT_texture_filter_anisotropic", "GL_EXT_vertex_weighting", "GL_NV_light_max_exponent", "GL_NV_vertex_array_range", "GL_NV_register_combiners", "GL_NV_fog_distance", "GL_NV_texgen_emboss", "GL_NV_blend_square", "GL_NV_texture_env_combine4", "GL_MESA_resize_buffers", "GL_MESA_window_pos", "GL_EXT_texture_compression_s3tc", "GL_IBM_cull_vertex", "GL_IBM_multimode_draw_arrays", "GL_IBM_vertex_array_lists", "GL_SGIX_subsample", "GL_SGIX_ycrcb_subsample", "GL_SGIX_ycrcba", "GL_SGI_depth_pass_instrument", "GL_3DFX_texture_compression_FXT1", "GL_3DFX_multisample", "GL_3DFX_tbuffer", "GL_EXT_multisample", "GL_SGIX_vertex_preclip", "GL_SGIX_convolution_accuracy", "GL_SGIX_resample", "GL_SGIS_point_line_texgen", "GL_SGIS_texture_color_mask", "GL_EXT_texture_env_dot3", "GL_ATI_texture_mirror_once", "GL_NV_fence", "GL_IBM_texture_mirrored_repeat", "GL_NV_evaluators", "GL_NV_packed_depth_stencil", "GL_NV_register_combiners2", "GL_NV_texture_compression_vtc", "GL_NV_texture_rectangle", "GL_NV_texture_shader", "GL_NV_texture_shader2", "GL_NV_vertex_array_range2", "GL_NV_vertex_program", "GL_SGIX_texture_coordinate_clamp", "GL_SGIX_scalebias_hint", "GL_OML_interlace", "GL_OML_subsample", "GL_OML_resample", "GL_NV_copy_depth_to_color", "GL_ATI_envmap_bumpmap", "GL_ATI_fragment_shader", "GL_ATI_pn_triangles", "GL_ATI_vertex_array_object", "GL_EXT_vertex_shader", "GL_ATI_vertex_streams", "GL_ATI_element_array", "GL_SUN_mesh_array", "GL_SUN_slice_accum", "GL_NV_multisample_filter_hint", "GL_NV_depth_clamp", "GL_NV_occlusion_query", "GL_NV_point_sprite", "GL_NV_texture_shader3", "GL_NV_vertex_program1_1", "GL_EXT_shadow_funcs", "GL_EXT_stencil_two_side", "GL_ATI_text_fragment_shader", "GL_APPLE_client_storage", "GL_APPLE_element_array", "GL_APPLE_fence", "GL_APPLE_vertex_array_object", "GL_APPLE_vertex_array_range", "GL_APPLE_ycbcr_422", "GL_S3_s3tc", "GL_ATI_draw_buffers", "GL_ATI_pixel_format_float", "GL_ATI_texture_env_combine3", "GL_ATI_texture_float", "GL_NV_float_buffer", "GL_NV_fragment_program", "GL_NV_half_float", "GL_NV_pixel_data_range", "GL_NV_primitive_restart", "GL_NV_texture_expand_normal", "GL_NV_vertex_program2", "GL_ATI_map_object_buffer", "GL_ATI_separate_stencil", "GL_ATI_vertex_attrib_array_object", "GL_OES_byte_coordinates", "GL_OES_fixed_point", "GL_OES_single_precision", "GL_OES_compressed_paletted_texture", "GL_OES_read_format", "GL_OES_query_matrix", "GL_EXT_depth_bounds_test", "GL_EXT_texture_mirror_clamp", "GL_EXT_blend_equation_separate", "GL_MESA_pack_invert", "GL_MESA_ycbcr_texture", "GL_EXT_pixel_buffer_object", "GL_NV_fragment_program_option", "GL_NV_fragment_program2", "GL_NV_vertex_program2_option", "GL_NV_vertex_program3", "GL_EXT_framebuffer_object", "GL_GREMEDY_string_marker", "GL_EXT_packed_depth_stencil", "GL_EXT_stencil_clear_tag", "GL_EXT_texture_sRGB", "GL_EXT_framebuffer_blit", "GL_EXT_framebuffer_multisample", "GL_MESAX_texture_stack", "GL_EXT_timer_query", "GL_EXT_gpu_program_parameters", "GL_APPLE_flush_buffer_range", "GL_EXT_gpu_shader4", "GL_EXT_draw_instanced", "GL_EXT_packed_float", "GL_EXT_texture_array", "GL_EXT_texture_buffer_object", "GL_EXT_texture_compression_latc", "GL_EXT_texture_compression_rgtc", "GL_EXT_texture_shared_exponent", "GL_NV_depth_buffer_float", "GL_NV_framebuffer_multisample_coverage", "GL_EXT_framebuffer_sRGB", "GL_NV_geometry_shader4", "GL_NV_parameter_buffer_object", "GL_EXT_draw_buffers2", "GL_NV_transform_feedback", "GL_EXT_bindable_uniform", "GL_EXT_texture_integer", "GL_GREMEDY_frame_terminator", "GL_NV_conditional_render", "GL_NV_present_video", "GL_EXT_transform_feedback", "GL_EXT_direct_state_access", "GL_EXT_vertex_array_bgra", "GL_EXT_texture_swizzle", "GL_NV_explicit_multisample", "GL_NV_transform_feedback2", "GL_ATI_meminfo", "GL_AMD_performance_monitor", "GL_AMD_texture_texture4", "GL_AMD_vertex_shader_tesselator", "GL_EXT_provoking_vertex", "GL_EXT_texture_snorm", "GL_AMD_draw_buffers_blend", "GL_APPLE_texture_range", "GL_APPLE_float_pixels", "GL_APPLE_vertex_program_evaluators", "GL_APPLE_aux_depth_stencil", "GL_APPLE_object_purgeable", "GL_APPLE_row_bytes", "GL_APPLE_rgb_422", "GL_NV_video_capture", "GL_NV_copy_image", "GL_EXT_separate_shader_objects", "GL_NV_parameter_buffer_object2", "GL_NV_shader_buffer_load", "GL_NV_vertex_buffer_unified_memory", "GL_NV_texture_barrier", "GL_AMD_shader_stencil_export", "GL_AMD_seamless_cubemap_per_texture", "GL_AMD_conservative_depth", "GL_EXT_shader_image_load_store", "GL_EXT_vertex_attrib_64bit", "GL_NV_gpu_program5", "GL_NV_gpu_shader5", "GL_NV_shader_buffer_store", "GL_NV_tessellation_program5", "GL_NV_vertex_attrib_integer_64bit", "GL_NV_multisample_coverage", "GL_AMD_name_gen_delete", "GL_AMD_debug_output", "GL_AMD_transform_feedback3_lines_triangles", "GL_AMD_depth_clamp_separate", "GL_EXT_texture_sRGB_decode", "GL_NV_texture_multisample", "GL_AMD_blend_minmax_factor", "GL_AMD_sample_positions", "GL_EXT_x11_sync_object", "GL_AMD_multi_draw_indirect", "GL_EXT_framebuffer_multisample_blit_scaled", "GL_NV_path_rendering", "GL_AMD_pinned_memory", "GL_AMD_stencil_operation_extended", "GL_AMD_vertex_shader_viewport_index", "GL_AMD_vertex_shader_layer", "GL_NV_bindless_texture", "GL_NV_shader_atomic_float", "GL_AMD_query_buffer_object", "GL_NV_compute_program5", "GL_NV_shader_storage_buffer_object", "GL_NV_shader_atomic_counters", "GL_NV_deep_texture3D", "GL_NVX_conditional_render", "GL_AMD_sparse_texture", "GL_AMD_shader_trinary_minmax", "GL_INTEL_map_texture", "GL_NV_draw_texture", "GL_SGIX_texture_select", "GL_INGR_blend_func_separate", "GL_SGIX_depth_pass_instrument", "GL_SGIX_igloo_interface" }; int __GLeeGLNumExtensions=463; /* GL_VERSION_1_2 */ #ifdef __GLEE_GL_VERSION_1_2 #ifndef GLEE_C_DEFINED_glBlendColor #define GLEE_C_DEFINED_glBlendColor void __stdcall GLee_Lazy_glBlendColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) {if (GLeeInit()) glBlendColor(red, green, blue, alpha);} GLEEPFNGLBLENDCOLORPROC GLeeFuncPtr_glBlendColor=GLee_Lazy_glBlendColor; #endif #ifndef GLEE_C_DEFINED_glBlendEquation #define GLEE_C_DEFINED_glBlendEquation void __stdcall GLee_Lazy_glBlendEquation(GLenum mode) {if (GLeeInit()) glBlendEquation(mode);} GLEEPFNGLBLENDEQUATIONPROC GLeeFuncPtr_glBlendEquation=GLee_Lazy_glBlendEquation; #endif #ifndef GLEE_C_DEFINED_glDrawRangeElements #define GLEE_C_DEFINED_glDrawRangeElements void __stdcall GLee_Lazy_glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices) {if (GLeeInit()) glDrawRangeElements(mode, start, end, count, type, indices);} GLEEPFNGLDRAWRANGEELEMENTSPROC GLeeFuncPtr_glDrawRangeElements=GLee_Lazy_glDrawRangeElements; #endif #ifndef GLEE_C_DEFINED_glTexImage3D #define GLEE_C_DEFINED_glTexImage3D void __stdcall GLee_Lazy_glTexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glTexImage3D(target, level, internalformat, width, height, depth, border, format, type, pixels);} GLEEPFNGLTEXIMAGE3DPROC GLeeFuncPtr_glTexImage3D=GLee_Lazy_glTexImage3D; #endif #ifndef GLEE_C_DEFINED_glTexSubImage3D #define GLEE_C_DEFINED_glTexSubImage3D void __stdcall GLee_Lazy_glTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);} GLEEPFNGLTEXSUBIMAGE3DPROC GLeeFuncPtr_glTexSubImage3D=GLee_Lazy_glTexSubImage3D; #endif #ifndef GLEE_C_DEFINED_glCopyTexSubImage3D #define GLEE_C_DEFINED_glCopyTexSubImage3D void __stdcall GLee_Lazy_glCopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) {if (GLeeInit()) glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height);} GLEEPFNGLCOPYTEXSUBIMAGE3DPROC GLeeFuncPtr_glCopyTexSubImage3D=GLee_Lazy_glCopyTexSubImage3D; #endif #ifndef GLEE_C_DEFINED_glColorTable #define GLEE_C_DEFINED_glColorTable void __stdcall GLee_Lazy_glColorTable(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * table) {if (GLeeInit()) glColorTable(target, internalformat, width, format, type, table);} GLEEPFNGLCOLORTABLEPROC GLeeFuncPtr_glColorTable=GLee_Lazy_glColorTable; #endif #ifndef GLEE_C_DEFINED_glColorTableParameterfv #define GLEE_C_DEFINED_glColorTableParameterfv void __stdcall GLee_Lazy_glColorTableParameterfv(GLenum target, GLenum pname, const GLfloat * params) {if (GLeeInit()) glColorTableParameterfv(target, pname, params);} GLEEPFNGLCOLORTABLEPARAMETERFVPROC GLeeFuncPtr_glColorTableParameterfv=GLee_Lazy_glColorTableParameterfv; #endif #ifndef GLEE_C_DEFINED_glColorTableParameteriv #define GLEE_C_DEFINED_glColorTableParameteriv void __stdcall GLee_Lazy_glColorTableParameteriv(GLenum target, GLenum pname, const GLint * params) {if (GLeeInit()) glColorTableParameteriv(target, pname, params);} GLEEPFNGLCOLORTABLEPARAMETERIVPROC GLeeFuncPtr_glColorTableParameteriv=GLee_Lazy_glColorTableParameteriv; #endif #ifndef GLEE_C_DEFINED_glCopyColorTable #define GLEE_C_DEFINED_glCopyColorTable void __stdcall GLee_Lazy_glCopyColorTable(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width) {if (GLeeInit()) glCopyColorTable(target, internalformat, x, y, width);} GLEEPFNGLCOPYCOLORTABLEPROC GLeeFuncPtr_glCopyColorTable=GLee_Lazy_glCopyColorTable; #endif #ifndef GLEE_C_DEFINED_glGetColorTable #define GLEE_C_DEFINED_glGetColorTable void __stdcall GLee_Lazy_glGetColorTable(GLenum target, GLenum format, GLenum type, GLvoid * table) {if (GLeeInit()) glGetColorTable(target, format, type, table);} GLEEPFNGLGETCOLORTABLEPROC GLeeFuncPtr_glGetColorTable=GLee_Lazy_glGetColorTable; #endif #ifndef GLEE_C_DEFINED_glGetColorTableParameterfv #define GLEE_C_DEFINED_glGetColorTableParameterfv void __stdcall GLee_Lazy_glGetColorTableParameterfv(GLenum target, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetColorTableParameterfv(target, pname, params);} GLEEPFNGLGETCOLORTABLEPARAMETERFVPROC GLeeFuncPtr_glGetColorTableParameterfv=GLee_Lazy_glGetColorTableParameterfv; #endif #ifndef GLEE_C_DEFINED_glGetColorTableParameteriv #define GLEE_C_DEFINED_glGetColorTableParameteriv void __stdcall GLee_Lazy_glGetColorTableParameteriv(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetColorTableParameteriv(target, pname, params);} GLEEPFNGLGETCOLORTABLEPARAMETERIVPROC GLeeFuncPtr_glGetColorTableParameteriv=GLee_Lazy_glGetColorTableParameteriv; #endif #ifndef GLEE_C_DEFINED_glColorSubTable #define GLEE_C_DEFINED_glColorSubTable void __stdcall GLee_Lazy_glColorSubTable(GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid * data) {if (GLeeInit()) glColorSubTable(target, start, count, format, type, data);} GLEEPFNGLCOLORSUBTABLEPROC GLeeFuncPtr_glColorSubTable=GLee_Lazy_glColorSubTable; #endif #ifndef GLEE_C_DEFINED_glCopyColorSubTable #define GLEE_C_DEFINED_glCopyColorSubTable void __stdcall GLee_Lazy_glCopyColorSubTable(GLenum target, GLsizei start, GLint x, GLint y, GLsizei width) {if (GLeeInit()) glCopyColorSubTable(target, start, x, y, width);} GLEEPFNGLCOPYCOLORSUBTABLEPROC GLeeFuncPtr_glCopyColorSubTable=GLee_Lazy_glCopyColorSubTable; #endif #ifndef GLEE_C_DEFINED_glConvolutionFilter1D #define GLEE_C_DEFINED_glConvolutionFilter1D void __stdcall GLee_Lazy_glConvolutionFilter1D(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * image) {if (GLeeInit()) glConvolutionFilter1D(target, internalformat, width, format, type, image);} GLEEPFNGLCONVOLUTIONFILTER1DPROC GLeeFuncPtr_glConvolutionFilter1D=GLee_Lazy_glConvolutionFilter1D; #endif #ifndef GLEE_C_DEFINED_glConvolutionFilter2D #define GLEE_C_DEFINED_glConvolutionFilter2D void __stdcall GLee_Lazy_glConvolutionFilter2D(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * image) {if (GLeeInit()) glConvolutionFilter2D(target, internalformat, width, height, format, type, image);} GLEEPFNGLCONVOLUTIONFILTER2DPROC GLeeFuncPtr_glConvolutionFilter2D=GLee_Lazy_glConvolutionFilter2D; #endif #ifndef GLEE_C_DEFINED_glConvolutionParameterf #define GLEE_C_DEFINED_glConvolutionParameterf void __stdcall GLee_Lazy_glConvolutionParameterf(GLenum target, GLenum pname, GLfloat params) {if (GLeeInit()) glConvolutionParameterf(target, pname, params);} GLEEPFNGLCONVOLUTIONPARAMETERFPROC GLeeFuncPtr_glConvolutionParameterf=GLee_Lazy_glConvolutionParameterf; #endif #ifndef GLEE_C_DEFINED_glConvolutionParameterfv #define GLEE_C_DEFINED_glConvolutionParameterfv void __stdcall GLee_Lazy_glConvolutionParameterfv(GLenum target, GLenum pname, const GLfloat * params) {if (GLeeInit()) glConvolutionParameterfv(target, pname, params);} GLEEPFNGLCONVOLUTIONPARAMETERFVPROC GLeeFuncPtr_glConvolutionParameterfv=GLee_Lazy_glConvolutionParameterfv; #endif #ifndef GLEE_C_DEFINED_glConvolutionParameteri #define GLEE_C_DEFINED_glConvolutionParameteri void __stdcall GLee_Lazy_glConvolutionParameteri(GLenum target, GLenum pname, GLint params) {if (GLeeInit()) glConvolutionParameteri(target, pname, params);} GLEEPFNGLCONVOLUTIONPARAMETERIPROC GLeeFuncPtr_glConvolutionParameteri=GLee_Lazy_glConvolutionParameteri; #endif #ifndef GLEE_C_DEFINED_glConvolutionParameteriv #define GLEE_C_DEFINED_glConvolutionParameteriv void __stdcall GLee_Lazy_glConvolutionParameteriv(GLenum target, GLenum pname, const GLint * params) {if (GLeeInit()) glConvolutionParameteriv(target, pname, params);} GLEEPFNGLCONVOLUTIONPARAMETERIVPROC GLeeFuncPtr_glConvolutionParameteriv=GLee_Lazy_glConvolutionParameteriv; #endif #ifndef GLEE_C_DEFINED_glCopyConvolutionFilter1D #define GLEE_C_DEFINED_glCopyConvolutionFilter1D void __stdcall GLee_Lazy_glCopyConvolutionFilter1D(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width) {if (GLeeInit()) glCopyConvolutionFilter1D(target, internalformat, x, y, width);} GLEEPFNGLCOPYCONVOLUTIONFILTER1DPROC GLeeFuncPtr_glCopyConvolutionFilter1D=GLee_Lazy_glCopyConvolutionFilter1D; #endif #ifndef GLEE_C_DEFINED_glCopyConvolutionFilter2D #define GLEE_C_DEFINED_glCopyConvolutionFilter2D void __stdcall GLee_Lazy_glCopyConvolutionFilter2D(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height) {if (GLeeInit()) glCopyConvolutionFilter2D(target, internalformat, x, y, width, height);} GLEEPFNGLCOPYCONVOLUTIONFILTER2DPROC GLeeFuncPtr_glCopyConvolutionFilter2D=GLee_Lazy_glCopyConvolutionFilter2D; #endif #ifndef GLEE_C_DEFINED_glGetConvolutionFilter #define GLEE_C_DEFINED_glGetConvolutionFilter void __stdcall GLee_Lazy_glGetConvolutionFilter(GLenum target, GLenum format, GLenum type, GLvoid * image) {if (GLeeInit()) glGetConvolutionFilter(target, format, type, image);} GLEEPFNGLGETCONVOLUTIONFILTERPROC GLeeFuncPtr_glGetConvolutionFilter=GLee_Lazy_glGetConvolutionFilter; #endif #ifndef GLEE_C_DEFINED_glGetConvolutionParameterfv #define GLEE_C_DEFINED_glGetConvolutionParameterfv void __stdcall GLee_Lazy_glGetConvolutionParameterfv(GLenum target, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetConvolutionParameterfv(target, pname, params);} GLEEPFNGLGETCONVOLUTIONPARAMETERFVPROC GLeeFuncPtr_glGetConvolutionParameterfv=GLee_Lazy_glGetConvolutionParameterfv; #endif #ifndef GLEE_C_DEFINED_glGetConvolutionParameteriv #define GLEE_C_DEFINED_glGetConvolutionParameteriv void __stdcall GLee_Lazy_glGetConvolutionParameteriv(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetConvolutionParameteriv(target, pname, params);} GLEEPFNGLGETCONVOLUTIONPARAMETERIVPROC GLeeFuncPtr_glGetConvolutionParameteriv=GLee_Lazy_glGetConvolutionParameteriv; #endif #ifndef GLEE_C_DEFINED_glGetSeparableFilter #define GLEE_C_DEFINED_glGetSeparableFilter void __stdcall GLee_Lazy_glGetSeparableFilter(GLenum target, GLenum format, GLenum type, GLvoid * row, GLvoid * column, GLvoid * span) {if (GLeeInit()) glGetSeparableFilter(target, format, type, row, column, span);} GLEEPFNGLGETSEPARABLEFILTERPROC GLeeFuncPtr_glGetSeparableFilter=GLee_Lazy_glGetSeparableFilter; #endif #ifndef GLEE_C_DEFINED_glSeparableFilter2D #define GLEE_C_DEFINED_glSeparableFilter2D void __stdcall GLee_Lazy_glSeparableFilter2D(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * row, const GLvoid * column) {if (GLeeInit()) glSeparableFilter2D(target, internalformat, width, height, format, type, row, column);} GLEEPFNGLSEPARABLEFILTER2DPROC GLeeFuncPtr_glSeparableFilter2D=GLee_Lazy_glSeparableFilter2D; #endif #ifndef GLEE_C_DEFINED_glGetHistogram #define GLEE_C_DEFINED_glGetHistogram void __stdcall GLee_Lazy_glGetHistogram(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values) {if (GLeeInit()) glGetHistogram(target, reset, format, type, values);} GLEEPFNGLGETHISTOGRAMPROC GLeeFuncPtr_glGetHistogram=GLee_Lazy_glGetHistogram; #endif #ifndef GLEE_C_DEFINED_glGetHistogramParameterfv #define GLEE_C_DEFINED_glGetHistogramParameterfv void __stdcall GLee_Lazy_glGetHistogramParameterfv(GLenum target, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetHistogramParameterfv(target, pname, params);} GLEEPFNGLGETHISTOGRAMPARAMETERFVPROC GLeeFuncPtr_glGetHistogramParameterfv=GLee_Lazy_glGetHistogramParameterfv; #endif #ifndef GLEE_C_DEFINED_glGetHistogramParameteriv #define GLEE_C_DEFINED_glGetHistogramParameteriv void __stdcall GLee_Lazy_glGetHistogramParameteriv(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetHistogramParameteriv(target, pname, params);} GLEEPFNGLGETHISTOGRAMPARAMETERIVPROC GLeeFuncPtr_glGetHistogramParameteriv=GLee_Lazy_glGetHistogramParameteriv; #endif #ifndef GLEE_C_DEFINED_glGetMinmax #define GLEE_C_DEFINED_glGetMinmax void __stdcall GLee_Lazy_glGetMinmax(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values) {if (GLeeInit()) glGetMinmax(target, reset, format, type, values);} GLEEPFNGLGETMINMAXPROC GLeeFuncPtr_glGetMinmax=GLee_Lazy_glGetMinmax; #endif #ifndef GLEE_C_DEFINED_glGetMinmaxParameterfv #define GLEE_C_DEFINED_glGetMinmaxParameterfv void __stdcall GLee_Lazy_glGetMinmaxParameterfv(GLenum target, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetMinmaxParameterfv(target, pname, params);} GLEEPFNGLGETMINMAXPARAMETERFVPROC GLeeFuncPtr_glGetMinmaxParameterfv=GLee_Lazy_glGetMinmaxParameterfv; #endif #ifndef GLEE_C_DEFINED_glGetMinmaxParameteriv #define GLEE_C_DEFINED_glGetMinmaxParameteriv void __stdcall GLee_Lazy_glGetMinmaxParameteriv(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetMinmaxParameteriv(target, pname, params);} GLEEPFNGLGETMINMAXPARAMETERIVPROC GLeeFuncPtr_glGetMinmaxParameteriv=GLee_Lazy_glGetMinmaxParameteriv; #endif #ifndef GLEE_C_DEFINED_glHistogram #define GLEE_C_DEFINED_glHistogram void __stdcall GLee_Lazy_glHistogram(GLenum target, GLsizei width, GLenum internalformat, GLboolean sink) {if (GLeeInit()) glHistogram(target, width, internalformat, sink);} GLEEPFNGLHISTOGRAMPROC GLeeFuncPtr_glHistogram=GLee_Lazy_glHistogram; #endif #ifndef GLEE_C_DEFINED_glMinmax #define GLEE_C_DEFINED_glMinmax void __stdcall GLee_Lazy_glMinmax(GLenum target, GLenum internalformat, GLboolean sink) {if (GLeeInit()) glMinmax(target, internalformat, sink);} GLEEPFNGLMINMAXPROC GLeeFuncPtr_glMinmax=GLee_Lazy_glMinmax; #endif #ifndef GLEE_C_DEFINED_glResetHistogram #define GLEE_C_DEFINED_glResetHistogram void __stdcall GLee_Lazy_glResetHistogram(GLenum target) {if (GLeeInit()) glResetHistogram(target);} GLEEPFNGLRESETHISTOGRAMPROC GLeeFuncPtr_glResetHistogram=GLee_Lazy_glResetHistogram; #endif #ifndef GLEE_C_DEFINED_glResetMinmax #define GLEE_C_DEFINED_glResetMinmax void __stdcall GLee_Lazy_glResetMinmax(GLenum target) {if (GLeeInit()) glResetMinmax(target);} GLEEPFNGLRESETMINMAXPROC GLeeFuncPtr_glResetMinmax=GLee_Lazy_glResetMinmax; #endif #endif /* GL_ARB_imaging */ #ifdef __GLEE_GL_ARB_imaging #endif /* GL_VERSION_1_3 */ #ifdef __GLEE_GL_VERSION_1_3 #ifndef GLEE_C_DEFINED_glActiveTexture #define GLEE_C_DEFINED_glActiveTexture void __stdcall GLee_Lazy_glActiveTexture(GLenum texture) {if (GLeeInit()) glActiveTexture(texture);} GLEEPFNGLACTIVETEXTUREPROC GLeeFuncPtr_glActiveTexture=GLee_Lazy_glActiveTexture; #endif #ifndef GLEE_C_DEFINED_glSampleCoverage #define GLEE_C_DEFINED_glSampleCoverage void __stdcall GLee_Lazy_glSampleCoverage(GLfloat value, GLboolean invert) {if (GLeeInit()) glSampleCoverage(value, invert);} GLEEPFNGLSAMPLECOVERAGEPROC GLeeFuncPtr_glSampleCoverage=GLee_Lazy_glSampleCoverage; #endif #ifndef GLEE_C_DEFINED_glCompressedTexImage3D #define GLEE_C_DEFINED_glCompressedTexImage3D void __stdcall GLee_Lazy_glCompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * data) {if (GLeeInit()) glCompressedTexImage3D(target, level, internalformat, width, height, depth, border, imageSize, data);} GLEEPFNGLCOMPRESSEDTEXIMAGE3DPROC GLeeFuncPtr_glCompressedTexImage3D=GLee_Lazy_glCompressedTexImage3D; #endif #ifndef GLEE_C_DEFINED_glCompressedTexImage2D #define GLEE_C_DEFINED_glCompressedTexImage2D void __stdcall GLee_Lazy_glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data) {if (GLeeInit()) glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);} GLEEPFNGLCOMPRESSEDTEXIMAGE2DPROC GLeeFuncPtr_glCompressedTexImage2D=GLee_Lazy_glCompressedTexImage2D; #endif #ifndef GLEE_C_DEFINED_glCompressedTexImage1D #define GLEE_C_DEFINED_glCompressedTexImage1D void __stdcall GLee_Lazy_glCompressedTexImage1D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid * data) {if (GLeeInit()) glCompressedTexImage1D(target, level, internalformat, width, border, imageSize, data);} GLEEPFNGLCOMPRESSEDTEXIMAGE1DPROC GLeeFuncPtr_glCompressedTexImage1D=GLee_Lazy_glCompressedTexImage1D; #endif #ifndef GLEE_C_DEFINED_glCompressedTexSubImage3D #define GLEE_C_DEFINED_glCompressedTexSubImage3D void __stdcall GLee_Lazy_glCompressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * data) {if (GLeeInit()) glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);} GLEEPFNGLCOMPRESSEDTEXSUBIMAGE3DPROC GLeeFuncPtr_glCompressedTexSubImage3D=GLee_Lazy_glCompressedTexSubImage3D; #endif #ifndef GLEE_C_DEFINED_glCompressedTexSubImage2D #define GLEE_C_DEFINED_glCompressedTexSubImage2D void __stdcall GLee_Lazy_glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data) {if (GLeeInit()) glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data);} GLEEPFNGLCOMPRESSEDTEXSUBIMAGE2DPROC GLeeFuncPtr_glCompressedTexSubImage2D=GLee_Lazy_glCompressedTexSubImage2D; #endif #ifndef GLEE_C_DEFINED_glCompressedTexSubImage1D #define GLEE_C_DEFINED_glCompressedTexSubImage1D void __stdcall GLee_Lazy_glCompressedTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * data) {if (GLeeInit()) glCompressedTexSubImage1D(target, level, xoffset, width, format, imageSize, data);} GLEEPFNGLCOMPRESSEDTEXSUBIMAGE1DPROC GLeeFuncPtr_glCompressedTexSubImage1D=GLee_Lazy_glCompressedTexSubImage1D; #endif #ifndef GLEE_C_DEFINED_glGetCompressedTexImage #define GLEE_C_DEFINED_glGetCompressedTexImage void __stdcall GLee_Lazy_glGetCompressedTexImage(GLenum target, GLint level, GLvoid * img) {if (GLeeInit()) glGetCompressedTexImage(target, level, img);} GLEEPFNGLGETCOMPRESSEDTEXIMAGEPROC GLeeFuncPtr_glGetCompressedTexImage=GLee_Lazy_glGetCompressedTexImage; #endif #ifndef GLEE_C_DEFINED_glClientActiveTexture #define GLEE_C_DEFINED_glClientActiveTexture void __stdcall GLee_Lazy_glClientActiveTexture(GLenum texture) {if (GLeeInit()) glClientActiveTexture(texture);} GLEEPFNGLCLIENTACTIVETEXTUREPROC GLeeFuncPtr_glClientActiveTexture=GLee_Lazy_glClientActiveTexture; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1d #define GLEE_C_DEFINED_glMultiTexCoord1d void __stdcall GLee_Lazy_glMultiTexCoord1d(GLenum target, GLdouble s) {if (GLeeInit()) glMultiTexCoord1d(target, s);} GLEEPFNGLMULTITEXCOORD1DPROC GLeeFuncPtr_glMultiTexCoord1d=GLee_Lazy_glMultiTexCoord1d; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1dv #define GLEE_C_DEFINED_glMultiTexCoord1dv void __stdcall GLee_Lazy_glMultiTexCoord1dv(GLenum target, const GLdouble * v) {if (GLeeInit()) glMultiTexCoord1dv(target, v);} GLEEPFNGLMULTITEXCOORD1DVPROC GLeeFuncPtr_glMultiTexCoord1dv=GLee_Lazy_glMultiTexCoord1dv; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1f #define GLEE_C_DEFINED_glMultiTexCoord1f void __stdcall GLee_Lazy_glMultiTexCoord1f(GLenum target, GLfloat s) {if (GLeeInit()) glMultiTexCoord1f(target, s);} GLEEPFNGLMULTITEXCOORD1FPROC GLeeFuncPtr_glMultiTexCoord1f=GLee_Lazy_glMultiTexCoord1f; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1fv #define GLEE_C_DEFINED_glMultiTexCoord1fv void __stdcall GLee_Lazy_glMultiTexCoord1fv(GLenum target, const GLfloat * v) {if (GLeeInit()) glMultiTexCoord1fv(target, v);} GLEEPFNGLMULTITEXCOORD1FVPROC GLeeFuncPtr_glMultiTexCoord1fv=GLee_Lazy_glMultiTexCoord1fv; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1i #define GLEE_C_DEFINED_glMultiTexCoord1i void __stdcall GLee_Lazy_glMultiTexCoord1i(GLenum target, GLint s) {if (GLeeInit()) glMultiTexCoord1i(target, s);} GLEEPFNGLMULTITEXCOORD1IPROC GLeeFuncPtr_glMultiTexCoord1i=GLee_Lazy_glMultiTexCoord1i; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1iv #define GLEE_C_DEFINED_glMultiTexCoord1iv void __stdcall GLee_Lazy_glMultiTexCoord1iv(GLenum target, const GLint * v) {if (GLeeInit()) glMultiTexCoord1iv(target, v);} GLEEPFNGLMULTITEXCOORD1IVPROC GLeeFuncPtr_glMultiTexCoord1iv=GLee_Lazy_glMultiTexCoord1iv; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1s #define GLEE_C_DEFINED_glMultiTexCoord1s void __stdcall GLee_Lazy_glMultiTexCoord1s(GLenum target, GLshort s) {if (GLeeInit()) glMultiTexCoord1s(target, s);} GLEEPFNGLMULTITEXCOORD1SPROC GLeeFuncPtr_glMultiTexCoord1s=GLee_Lazy_glMultiTexCoord1s; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1sv #define GLEE_C_DEFINED_glMultiTexCoord1sv void __stdcall GLee_Lazy_glMultiTexCoord1sv(GLenum target, const GLshort * v) {if (GLeeInit()) glMultiTexCoord1sv(target, v);} GLEEPFNGLMULTITEXCOORD1SVPROC GLeeFuncPtr_glMultiTexCoord1sv=GLee_Lazy_glMultiTexCoord1sv; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2d #define GLEE_C_DEFINED_glMultiTexCoord2d void __stdcall GLee_Lazy_glMultiTexCoord2d(GLenum target, GLdouble s, GLdouble t) {if (GLeeInit()) glMultiTexCoord2d(target, s, t);} GLEEPFNGLMULTITEXCOORD2DPROC GLeeFuncPtr_glMultiTexCoord2d=GLee_Lazy_glMultiTexCoord2d; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2dv #define GLEE_C_DEFINED_glMultiTexCoord2dv void __stdcall GLee_Lazy_glMultiTexCoord2dv(GLenum target, const GLdouble * v) {if (GLeeInit()) glMultiTexCoord2dv(target, v);} GLEEPFNGLMULTITEXCOORD2DVPROC GLeeFuncPtr_glMultiTexCoord2dv=GLee_Lazy_glMultiTexCoord2dv; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2f #define GLEE_C_DEFINED_glMultiTexCoord2f void __stdcall GLee_Lazy_glMultiTexCoord2f(GLenum target, GLfloat s, GLfloat t) {if (GLeeInit()) glMultiTexCoord2f(target, s, t);} GLEEPFNGLMULTITEXCOORD2FPROC GLeeFuncPtr_glMultiTexCoord2f=GLee_Lazy_glMultiTexCoord2f; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2fv #define GLEE_C_DEFINED_glMultiTexCoord2fv void __stdcall GLee_Lazy_glMultiTexCoord2fv(GLenum target, const GLfloat * v) {if (GLeeInit()) glMultiTexCoord2fv(target, v);} GLEEPFNGLMULTITEXCOORD2FVPROC GLeeFuncPtr_glMultiTexCoord2fv=GLee_Lazy_glMultiTexCoord2fv; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2i #define GLEE_C_DEFINED_glMultiTexCoord2i void __stdcall GLee_Lazy_glMultiTexCoord2i(GLenum target, GLint s, GLint t) {if (GLeeInit()) glMultiTexCoord2i(target, s, t);} GLEEPFNGLMULTITEXCOORD2IPROC GLeeFuncPtr_glMultiTexCoord2i=GLee_Lazy_glMultiTexCoord2i; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2iv #define GLEE_C_DEFINED_glMultiTexCoord2iv void __stdcall GLee_Lazy_glMultiTexCoord2iv(GLenum target, const GLint * v) {if (GLeeInit()) glMultiTexCoord2iv(target, v);} GLEEPFNGLMULTITEXCOORD2IVPROC GLeeFuncPtr_glMultiTexCoord2iv=GLee_Lazy_glMultiTexCoord2iv; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2s #define GLEE_C_DEFINED_glMultiTexCoord2s void __stdcall GLee_Lazy_glMultiTexCoord2s(GLenum target, GLshort s, GLshort t) {if (GLeeInit()) glMultiTexCoord2s(target, s, t);} GLEEPFNGLMULTITEXCOORD2SPROC GLeeFuncPtr_glMultiTexCoord2s=GLee_Lazy_glMultiTexCoord2s; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2sv #define GLEE_C_DEFINED_glMultiTexCoord2sv void __stdcall GLee_Lazy_glMultiTexCoord2sv(GLenum target, const GLshort * v) {if (GLeeInit()) glMultiTexCoord2sv(target, v);} GLEEPFNGLMULTITEXCOORD2SVPROC GLeeFuncPtr_glMultiTexCoord2sv=GLee_Lazy_glMultiTexCoord2sv; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3d #define GLEE_C_DEFINED_glMultiTexCoord3d void __stdcall GLee_Lazy_glMultiTexCoord3d(GLenum target, GLdouble s, GLdouble t, GLdouble r) {if (GLeeInit()) glMultiTexCoord3d(target, s, t, r);} GLEEPFNGLMULTITEXCOORD3DPROC GLeeFuncPtr_glMultiTexCoord3d=GLee_Lazy_glMultiTexCoord3d; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3dv #define GLEE_C_DEFINED_glMultiTexCoord3dv void __stdcall GLee_Lazy_glMultiTexCoord3dv(GLenum target, const GLdouble * v) {if (GLeeInit()) glMultiTexCoord3dv(target, v);} GLEEPFNGLMULTITEXCOORD3DVPROC GLeeFuncPtr_glMultiTexCoord3dv=GLee_Lazy_glMultiTexCoord3dv; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3f #define GLEE_C_DEFINED_glMultiTexCoord3f void __stdcall GLee_Lazy_glMultiTexCoord3f(GLenum target, GLfloat s, GLfloat t, GLfloat r) {if (GLeeInit()) glMultiTexCoord3f(target, s, t, r);} GLEEPFNGLMULTITEXCOORD3FPROC GLeeFuncPtr_glMultiTexCoord3f=GLee_Lazy_glMultiTexCoord3f; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3fv #define GLEE_C_DEFINED_glMultiTexCoord3fv void __stdcall GLee_Lazy_glMultiTexCoord3fv(GLenum target, const GLfloat * v) {if (GLeeInit()) glMultiTexCoord3fv(target, v);} GLEEPFNGLMULTITEXCOORD3FVPROC GLeeFuncPtr_glMultiTexCoord3fv=GLee_Lazy_glMultiTexCoord3fv; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3i #define GLEE_C_DEFINED_glMultiTexCoord3i void __stdcall GLee_Lazy_glMultiTexCoord3i(GLenum target, GLint s, GLint t, GLint r) {if (GLeeInit()) glMultiTexCoord3i(target, s, t, r);} GLEEPFNGLMULTITEXCOORD3IPROC GLeeFuncPtr_glMultiTexCoord3i=GLee_Lazy_glMultiTexCoord3i; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3iv #define GLEE_C_DEFINED_glMultiTexCoord3iv void __stdcall GLee_Lazy_glMultiTexCoord3iv(GLenum target, const GLint * v) {if (GLeeInit()) glMultiTexCoord3iv(target, v);} GLEEPFNGLMULTITEXCOORD3IVPROC GLeeFuncPtr_glMultiTexCoord3iv=GLee_Lazy_glMultiTexCoord3iv; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3s #define GLEE_C_DEFINED_glMultiTexCoord3s void __stdcall GLee_Lazy_glMultiTexCoord3s(GLenum target, GLshort s, GLshort t, GLshort r) {if (GLeeInit()) glMultiTexCoord3s(target, s, t, r);} GLEEPFNGLMULTITEXCOORD3SPROC GLeeFuncPtr_glMultiTexCoord3s=GLee_Lazy_glMultiTexCoord3s; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3sv #define GLEE_C_DEFINED_glMultiTexCoord3sv void __stdcall GLee_Lazy_glMultiTexCoord3sv(GLenum target, const GLshort * v) {if (GLeeInit()) glMultiTexCoord3sv(target, v);} GLEEPFNGLMULTITEXCOORD3SVPROC GLeeFuncPtr_glMultiTexCoord3sv=GLee_Lazy_glMultiTexCoord3sv; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4d #define GLEE_C_DEFINED_glMultiTexCoord4d void __stdcall GLee_Lazy_glMultiTexCoord4d(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q) {if (GLeeInit()) glMultiTexCoord4d(target, s, t, r, q);} GLEEPFNGLMULTITEXCOORD4DPROC GLeeFuncPtr_glMultiTexCoord4d=GLee_Lazy_glMultiTexCoord4d; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4dv #define GLEE_C_DEFINED_glMultiTexCoord4dv void __stdcall GLee_Lazy_glMultiTexCoord4dv(GLenum target, const GLdouble * v) {if (GLeeInit()) glMultiTexCoord4dv(target, v);} GLEEPFNGLMULTITEXCOORD4DVPROC GLeeFuncPtr_glMultiTexCoord4dv=GLee_Lazy_glMultiTexCoord4dv; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4f #define GLEE_C_DEFINED_glMultiTexCoord4f void __stdcall GLee_Lazy_glMultiTexCoord4f(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) {if (GLeeInit()) glMultiTexCoord4f(target, s, t, r, q);} GLEEPFNGLMULTITEXCOORD4FPROC GLeeFuncPtr_glMultiTexCoord4f=GLee_Lazy_glMultiTexCoord4f; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4fv #define GLEE_C_DEFINED_glMultiTexCoord4fv void __stdcall GLee_Lazy_glMultiTexCoord4fv(GLenum target, const GLfloat * v) {if (GLeeInit()) glMultiTexCoord4fv(target, v);} GLEEPFNGLMULTITEXCOORD4FVPROC GLeeFuncPtr_glMultiTexCoord4fv=GLee_Lazy_glMultiTexCoord4fv; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4i #define GLEE_C_DEFINED_glMultiTexCoord4i void __stdcall GLee_Lazy_glMultiTexCoord4i(GLenum target, GLint s, GLint t, GLint r, GLint q) {if (GLeeInit()) glMultiTexCoord4i(target, s, t, r, q);} GLEEPFNGLMULTITEXCOORD4IPROC GLeeFuncPtr_glMultiTexCoord4i=GLee_Lazy_glMultiTexCoord4i; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4iv #define GLEE_C_DEFINED_glMultiTexCoord4iv void __stdcall GLee_Lazy_glMultiTexCoord4iv(GLenum target, const GLint * v) {if (GLeeInit()) glMultiTexCoord4iv(target, v);} GLEEPFNGLMULTITEXCOORD4IVPROC GLeeFuncPtr_glMultiTexCoord4iv=GLee_Lazy_glMultiTexCoord4iv; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4s #define GLEE_C_DEFINED_glMultiTexCoord4s void __stdcall GLee_Lazy_glMultiTexCoord4s(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q) {if (GLeeInit()) glMultiTexCoord4s(target, s, t, r, q);} GLEEPFNGLMULTITEXCOORD4SPROC GLeeFuncPtr_glMultiTexCoord4s=GLee_Lazy_glMultiTexCoord4s; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4sv #define GLEE_C_DEFINED_glMultiTexCoord4sv void __stdcall GLee_Lazy_glMultiTexCoord4sv(GLenum target, const GLshort * v) {if (GLeeInit()) glMultiTexCoord4sv(target, v);} GLEEPFNGLMULTITEXCOORD4SVPROC GLeeFuncPtr_glMultiTexCoord4sv=GLee_Lazy_glMultiTexCoord4sv; #endif #ifndef GLEE_C_DEFINED_glLoadTransposeMatrixf #define GLEE_C_DEFINED_glLoadTransposeMatrixf void __stdcall GLee_Lazy_glLoadTransposeMatrixf(const GLfloat * m) {if (GLeeInit()) glLoadTransposeMatrixf(m);} GLEEPFNGLLOADTRANSPOSEMATRIXFPROC GLeeFuncPtr_glLoadTransposeMatrixf=GLee_Lazy_glLoadTransposeMatrixf; #endif #ifndef GLEE_C_DEFINED_glLoadTransposeMatrixd #define GLEE_C_DEFINED_glLoadTransposeMatrixd void __stdcall GLee_Lazy_glLoadTransposeMatrixd(const GLdouble * m) {if (GLeeInit()) glLoadTransposeMatrixd(m);} GLEEPFNGLLOADTRANSPOSEMATRIXDPROC GLeeFuncPtr_glLoadTransposeMatrixd=GLee_Lazy_glLoadTransposeMatrixd; #endif #ifndef GLEE_C_DEFINED_glMultTransposeMatrixf #define GLEE_C_DEFINED_glMultTransposeMatrixf void __stdcall GLee_Lazy_glMultTransposeMatrixf(const GLfloat * m) {if (GLeeInit()) glMultTransposeMatrixf(m);} GLEEPFNGLMULTTRANSPOSEMATRIXFPROC GLeeFuncPtr_glMultTransposeMatrixf=GLee_Lazy_glMultTransposeMatrixf; #endif #ifndef GLEE_C_DEFINED_glMultTransposeMatrixd #define GLEE_C_DEFINED_glMultTransposeMatrixd void __stdcall GLee_Lazy_glMultTransposeMatrixd(const GLdouble * m) {if (GLeeInit()) glMultTransposeMatrixd(m);} GLEEPFNGLMULTTRANSPOSEMATRIXDPROC GLeeFuncPtr_glMultTransposeMatrixd=GLee_Lazy_glMultTransposeMatrixd; #endif #endif /* GL_VERSION_1_4 */ #ifdef __GLEE_GL_VERSION_1_4 #ifndef GLEE_C_DEFINED_glBlendFuncSeparate #define GLEE_C_DEFINED_glBlendFuncSeparate void __stdcall GLee_Lazy_glBlendFuncSeparate(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) {if (GLeeInit()) glBlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha);} GLEEPFNGLBLENDFUNCSEPARATEPROC GLeeFuncPtr_glBlendFuncSeparate=GLee_Lazy_glBlendFuncSeparate; #endif #ifndef GLEE_C_DEFINED_glMultiDrawArrays #define GLEE_C_DEFINED_glMultiDrawArrays void __stdcall GLee_Lazy_glMultiDrawArrays(GLenum mode, const GLint * first, const GLsizei * count, GLsizei drawcount) {if (GLeeInit()) glMultiDrawArrays(mode, first, count, drawcount);} GLEEPFNGLMULTIDRAWARRAYSPROC GLeeFuncPtr_glMultiDrawArrays=GLee_Lazy_glMultiDrawArrays; #endif #ifndef GLEE_C_DEFINED_glMultiDrawElements #define GLEE_C_DEFINED_glMultiDrawElements void __stdcall GLee_Lazy_glMultiDrawElements(GLenum mode, const GLsizei * count, GLenum type, const GLvoid* const * indices, GLsizei drawcount) {if (GLeeInit()) glMultiDrawElements(mode, count, type, indices, drawcount);} GLEEPFNGLMULTIDRAWELEMENTSPROC GLeeFuncPtr_glMultiDrawElements=GLee_Lazy_glMultiDrawElements; #endif #ifndef GLEE_C_DEFINED_glPointParameterf #define GLEE_C_DEFINED_glPointParameterf void __stdcall GLee_Lazy_glPointParameterf(GLenum pname, GLfloat param) {if (GLeeInit()) glPointParameterf(pname, param);} GLEEPFNGLPOINTPARAMETERFPROC GLeeFuncPtr_glPointParameterf=GLee_Lazy_glPointParameterf; #endif #ifndef GLEE_C_DEFINED_glPointParameterfv #define GLEE_C_DEFINED_glPointParameterfv void __stdcall GLee_Lazy_glPointParameterfv(GLenum pname, const GLfloat * params) {if (GLeeInit()) glPointParameterfv(pname, params);} GLEEPFNGLPOINTPARAMETERFVPROC GLeeFuncPtr_glPointParameterfv=GLee_Lazy_glPointParameterfv; #endif #ifndef GLEE_C_DEFINED_glPointParameteri #define GLEE_C_DEFINED_glPointParameteri void __stdcall GLee_Lazy_glPointParameteri(GLenum pname, GLint param) {if (GLeeInit()) glPointParameteri(pname, param);} GLEEPFNGLPOINTPARAMETERIPROC GLeeFuncPtr_glPointParameteri=GLee_Lazy_glPointParameteri; #endif #ifndef GLEE_C_DEFINED_glPointParameteriv #define GLEE_C_DEFINED_glPointParameteriv void __stdcall GLee_Lazy_glPointParameteriv(GLenum pname, const GLint * params) {if (GLeeInit()) glPointParameteriv(pname, params);} GLEEPFNGLPOINTPARAMETERIVPROC GLeeFuncPtr_glPointParameteriv=GLee_Lazy_glPointParameteriv; #endif #ifndef GLEE_C_DEFINED_glFogCoordf #define GLEE_C_DEFINED_glFogCoordf void __stdcall GLee_Lazy_glFogCoordf(GLfloat coord) {if (GLeeInit()) glFogCoordf(coord);} GLEEPFNGLFOGCOORDFPROC GLeeFuncPtr_glFogCoordf=GLee_Lazy_glFogCoordf; #endif #ifndef GLEE_C_DEFINED_glFogCoordfv #define GLEE_C_DEFINED_glFogCoordfv void __stdcall GLee_Lazy_glFogCoordfv(const GLfloat * coord) {if (GLeeInit()) glFogCoordfv(coord);} GLEEPFNGLFOGCOORDFVPROC GLeeFuncPtr_glFogCoordfv=GLee_Lazy_glFogCoordfv; #endif #ifndef GLEE_C_DEFINED_glFogCoordd #define GLEE_C_DEFINED_glFogCoordd void __stdcall GLee_Lazy_glFogCoordd(GLdouble coord) {if (GLeeInit()) glFogCoordd(coord);} GLEEPFNGLFOGCOORDDPROC GLeeFuncPtr_glFogCoordd=GLee_Lazy_glFogCoordd; #endif #ifndef GLEE_C_DEFINED_glFogCoorddv #define GLEE_C_DEFINED_glFogCoorddv void __stdcall GLee_Lazy_glFogCoorddv(const GLdouble * coord) {if (GLeeInit()) glFogCoorddv(coord);} GLEEPFNGLFOGCOORDDVPROC GLeeFuncPtr_glFogCoorddv=GLee_Lazy_glFogCoorddv; #endif #ifndef GLEE_C_DEFINED_glFogCoordPointer #define GLEE_C_DEFINED_glFogCoordPointer void __stdcall GLee_Lazy_glFogCoordPointer(GLenum type, GLsizei stride, const GLvoid * pointer) {if (GLeeInit()) glFogCoordPointer(type, stride, pointer);} GLEEPFNGLFOGCOORDPOINTERPROC GLeeFuncPtr_glFogCoordPointer=GLee_Lazy_glFogCoordPointer; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3b #define GLEE_C_DEFINED_glSecondaryColor3b void __stdcall GLee_Lazy_glSecondaryColor3b(GLbyte red, GLbyte green, GLbyte blue) {if (GLeeInit()) glSecondaryColor3b(red, green, blue);} GLEEPFNGLSECONDARYCOLOR3BPROC GLeeFuncPtr_glSecondaryColor3b=GLee_Lazy_glSecondaryColor3b; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3bv #define GLEE_C_DEFINED_glSecondaryColor3bv void __stdcall GLee_Lazy_glSecondaryColor3bv(const GLbyte * v) {if (GLeeInit()) glSecondaryColor3bv(v);} GLEEPFNGLSECONDARYCOLOR3BVPROC GLeeFuncPtr_glSecondaryColor3bv=GLee_Lazy_glSecondaryColor3bv; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3d #define GLEE_C_DEFINED_glSecondaryColor3d void __stdcall GLee_Lazy_glSecondaryColor3d(GLdouble red, GLdouble green, GLdouble blue) {if (GLeeInit()) glSecondaryColor3d(red, green, blue);} GLEEPFNGLSECONDARYCOLOR3DPROC GLeeFuncPtr_glSecondaryColor3d=GLee_Lazy_glSecondaryColor3d; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3dv #define GLEE_C_DEFINED_glSecondaryColor3dv void __stdcall GLee_Lazy_glSecondaryColor3dv(const GLdouble * v) {if (GLeeInit()) glSecondaryColor3dv(v);} GLEEPFNGLSECONDARYCOLOR3DVPROC GLeeFuncPtr_glSecondaryColor3dv=GLee_Lazy_glSecondaryColor3dv; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3f #define GLEE_C_DEFINED_glSecondaryColor3f void __stdcall GLee_Lazy_glSecondaryColor3f(GLfloat red, GLfloat green, GLfloat blue) {if (GLeeInit()) glSecondaryColor3f(red, green, blue);} GLEEPFNGLSECONDARYCOLOR3FPROC GLeeFuncPtr_glSecondaryColor3f=GLee_Lazy_glSecondaryColor3f; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3fv #define GLEE_C_DEFINED_glSecondaryColor3fv void __stdcall GLee_Lazy_glSecondaryColor3fv(const GLfloat * v) {if (GLeeInit()) glSecondaryColor3fv(v);} GLEEPFNGLSECONDARYCOLOR3FVPROC GLeeFuncPtr_glSecondaryColor3fv=GLee_Lazy_glSecondaryColor3fv; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3i #define GLEE_C_DEFINED_glSecondaryColor3i void __stdcall GLee_Lazy_glSecondaryColor3i(GLint red, GLint green, GLint blue) {if (GLeeInit()) glSecondaryColor3i(red, green, blue);} GLEEPFNGLSECONDARYCOLOR3IPROC GLeeFuncPtr_glSecondaryColor3i=GLee_Lazy_glSecondaryColor3i; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3iv #define GLEE_C_DEFINED_glSecondaryColor3iv void __stdcall GLee_Lazy_glSecondaryColor3iv(const GLint * v) {if (GLeeInit()) glSecondaryColor3iv(v);} GLEEPFNGLSECONDARYCOLOR3IVPROC GLeeFuncPtr_glSecondaryColor3iv=GLee_Lazy_glSecondaryColor3iv; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3s #define GLEE_C_DEFINED_glSecondaryColor3s void __stdcall GLee_Lazy_glSecondaryColor3s(GLshort red, GLshort green, GLshort blue) {if (GLeeInit()) glSecondaryColor3s(red, green, blue);} GLEEPFNGLSECONDARYCOLOR3SPROC GLeeFuncPtr_glSecondaryColor3s=GLee_Lazy_glSecondaryColor3s; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3sv #define GLEE_C_DEFINED_glSecondaryColor3sv void __stdcall GLee_Lazy_glSecondaryColor3sv(const GLshort * v) {if (GLeeInit()) glSecondaryColor3sv(v);} GLEEPFNGLSECONDARYCOLOR3SVPROC GLeeFuncPtr_glSecondaryColor3sv=GLee_Lazy_glSecondaryColor3sv; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3ub #define GLEE_C_DEFINED_glSecondaryColor3ub void __stdcall GLee_Lazy_glSecondaryColor3ub(GLubyte red, GLubyte green, GLubyte blue) {if (GLeeInit()) glSecondaryColor3ub(red, green, blue);} GLEEPFNGLSECONDARYCOLOR3UBPROC GLeeFuncPtr_glSecondaryColor3ub=GLee_Lazy_glSecondaryColor3ub; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3ubv #define GLEE_C_DEFINED_glSecondaryColor3ubv void __stdcall GLee_Lazy_glSecondaryColor3ubv(const GLubyte * v) {if (GLeeInit()) glSecondaryColor3ubv(v);} GLEEPFNGLSECONDARYCOLOR3UBVPROC GLeeFuncPtr_glSecondaryColor3ubv=GLee_Lazy_glSecondaryColor3ubv; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3ui #define GLEE_C_DEFINED_glSecondaryColor3ui void __stdcall GLee_Lazy_glSecondaryColor3ui(GLuint red, GLuint green, GLuint blue) {if (GLeeInit()) glSecondaryColor3ui(red, green, blue);} GLEEPFNGLSECONDARYCOLOR3UIPROC GLeeFuncPtr_glSecondaryColor3ui=GLee_Lazy_glSecondaryColor3ui; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3uiv #define GLEE_C_DEFINED_glSecondaryColor3uiv void __stdcall GLee_Lazy_glSecondaryColor3uiv(const GLuint * v) {if (GLeeInit()) glSecondaryColor3uiv(v);} GLEEPFNGLSECONDARYCOLOR3UIVPROC GLeeFuncPtr_glSecondaryColor3uiv=GLee_Lazy_glSecondaryColor3uiv; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3us #define GLEE_C_DEFINED_glSecondaryColor3us void __stdcall GLee_Lazy_glSecondaryColor3us(GLushort red, GLushort green, GLushort blue) {if (GLeeInit()) glSecondaryColor3us(red, green, blue);} GLEEPFNGLSECONDARYCOLOR3USPROC GLeeFuncPtr_glSecondaryColor3us=GLee_Lazy_glSecondaryColor3us; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3usv #define GLEE_C_DEFINED_glSecondaryColor3usv void __stdcall GLee_Lazy_glSecondaryColor3usv(const GLushort * v) {if (GLeeInit()) glSecondaryColor3usv(v);} GLEEPFNGLSECONDARYCOLOR3USVPROC GLeeFuncPtr_glSecondaryColor3usv=GLee_Lazy_glSecondaryColor3usv; #endif #ifndef GLEE_C_DEFINED_glSecondaryColorPointer #define GLEE_C_DEFINED_glSecondaryColorPointer void __stdcall GLee_Lazy_glSecondaryColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer) {if (GLeeInit()) glSecondaryColorPointer(size, type, stride, pointer);} GLEEPFNGLSECONDARYCOLORPOINTERPROC GLeeFuncPtr_glSecondaryColorPointer=GLee_Lazy_glSecondaryColorPointer; #endif #ifndef GLEE_C_DEFINED_glWindowPos2d #define GLEE_C_DEFINED_glWindowPos2d void __stdcall GLee_Lazy_glWindowPos2d(GLdouble x, GLdouble y) {if (GLeeInit()) glWindowPos2d(x, y);} GLEEPFNGLWINDOWPOS2DPROC GLeeFuncPtr_glWindowPos2d=GLee_Lazy_glWindowPos2d; #endif #ifndef GLEE_C_DEFINED_glWindowPos2dv #define GLEE_C_DEFINED_glWindowPos2dv void __stdcall GLee_Lazy_glWindowPos2dv(const GLdouble * v) {if (GLeeInit()) glWindowPos2dv(v);} GLEEPFNGLWINDOWPOS2DVPROC GLeeFuncPtr_glWindowPos2dv=GLee_Lazy_glWindowPos2dv; #endif #ifndef GLEE_C_DEFINED_glWindowPos2f #define GLEE_C_DEFINED_glWindowPos2f void __stdcall GLee_Lazy_glWindowPos2f(GLfloat x, GLfloat y) {if (GLeeInit()) glWindowPos2f(x, y);} GLEEPFNGLWINDOWPOS2FPROC GLeeFuncPtr_glWindowPos2f=GLee_Lazy_glWindowPos2f; #endif #ifndef GLEE_C_DEFINED_glWindowPos2fv #define GLEE_C_DEFINED_glWindowPos2fv void __stdcall GLee_Lazy_glWindowPos2fv(const GLfloat * v) {if (GLeeInit()) glWindowPos2fv(v);} GLEEPFNGLWINDOWPOS2FVPROC GLeeFuncPtr_glWindowPos2fv=GLee_Lazy_glWindowPos2fv; #endif #ifndef GLEE_C_DEFINED_glWindowPos2i #define GLEE_C_DEFINED_glWindowPos2i void __stdcall GLee_Lazy_glWindowPos2i(GLint x, GLint y) {if (GLeeInit()) glWindowPos2i(x, y);} GLEEPFNGLWINDOWPOS2IPROC GLeeFuncPtr_glWindowPos2i=GLee_Lazy_glWindowPos2i; #endif #ifndef GLEE_C_DEFINED_glWindowPos2iv #define GLEE_C_DEFINED_glWindowPos2iv void __stdcall GLee_Lazy_glWindowPos2iv(const GLint * v) {if (GLeeInit()) glWindowPos2iv(v);} GLEEPFNGLWINDOWPOS2IVPROC GLeeFuncPtr_glWindowPos2iv=GLee_Lazy_glWindowPos2iv; #endif #ifndef GLEE_C_DEFINED_glWindowPos2s #define GLEE_C_DEFINED_glWindowPos2s void __stdcall GLee_Lazy_glWindowPos2s(GLshort x, GLshort y) {if (GLeeInit()) glWindowPos2s(x, y);} GLEEPFNGLWINDOWPOS2SPROC GLeeFuncPtr_glWindowPos2s=GLee_Lazy_glWindowPos2s; #endif #ifndef GLEE_C_DEFINED_glWindowPos2sv #define GLEE_C_DEFINED_glWindowPos2sv void __stdcall GLee_Lazy_glWindowPos2sv(const GLshort * v) {if (GLeeInit()) glWindowPos2sv(v);} GLEEPFNGLWINDOWPOS2SVPROC GLeeFuncPtr_glWindowPos2sv=GLee_Lazy_glWindowPos2sv; #endif #ifndef GLEE_C_DEFINED_glWindowPos3d #define GLEE_C_DEFINED_glWindowPos3d void __stdcall GLee_Lazy_glWindowPos3d(GLdouble x, GLdouble y, GLdouble z) {if (GLeeInit()) glWindowPos3d(x, y, z);} GLEEPFNGLWINDOWPOS3DPROC GLeeFuncPtr_glWindowPos3d=GLee_Lazy_glWindowPos3d; #endif #ifndef GLEE_C_DEFINED_glWindowPos3dv #define GLEE_C_DEFINED_glWindowPos3dv void __stdcall GLee_Lazy_glWindowPos3dv(const GLdouble * v) {if (GLeeInit()) glWindowPos3dv(v);} GLEEPFNGLWINDOWPOS3DVPROC GLeeFuncPtr_glWindowPos3dv=GLee_Lazy_glWindowPos3dv; #endif #ifndef GLEE_C_DEFINED_glWindowPos3f #define GLEE_C_DEFINED_glWindowPos3f void __stdcall GLee_Lazy_glWindowPos3f(GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glWindowPos3f(x, y, z);} GLEEPFNGLWINDOWPOS3FPROC GLeeFuncPtr_glWindowPos3f=GLee_Lazy_glWindowPos3f; #endif #ifndef GLEE_C_DEFINED_glWindowPos3fv #define GLEE_C_DEFINED_glWindowPos3fv void __stdcall GLee_Lazy_glWindowPos3fv(const GLfloat * v) {if (GLeeInit()) glWindowPos3fv(v);} GLEEPFNGLWINDOWPOS3FVPROC GLeeFuncPtr_glWindowPos3fv=GLee_Lazy_glWindowPos3fv; #endif #ifndef GLEE_C_DEFINED_glWindowPos3i #define GLEE_C_DEFINED_glWindowPos3i void __stdcall GLee_Lazy_glWindowPos3i(GLint x, GLint y, GLint z) {if (GLeeInit()) glWindowPos3i(x, y, z);} GLEEPFNGLWINDOWPOS3IPROC GLeeFuncPtr_glWindowPos3i=GLee_Lazy_glWindowPos3i; #endif #ifndef GLEE_C_DEFINED_glWindowPos3iv #define GLEE_C_DEFINED_glWindowPos3iv void __stdcall GLee_Lazy_glWindowPos3iv(const GLint * v) {if (GLeeInit()) glWindowPos3iv(v);} GLEEPFNGLWINDOWPOS3IVPROC GLeeFuncPtr_glWindowPos3iv=GLee_Lazy_glWindowPos3iv; #endif #ifndef GLEE_C_DEFINED_glWindowPos3s #define GLEE_C_DEFINED_glWindowPos3s void __stdcall GLee_Lazy_glWindowPos3s(GLshort x, GLshort y, GLshort z) {if (GLeeInit()) glWindowPos3s(x, y, z);} GLEEPFNGLWINDOWPOS3SPROC GLeeFuncPtr_glWindowPos3s=GLee_Lazy_glWindowPos3s; #endif #ifndef GLEE_C_DEFINED_glWindowPos3sv #define GLEE_C_DEFINED_glWindowPos3sv void __stdcall GLee_Lazy_glWindowPos3sv(const GLshort * v) {if (GLeeInit()) glWindowPos3sv(v);} GLEEPFNGLWINDOWPOS3SVPROC GLeeFuncPtr_glWindowPos3sv=GLee_Lazy_glWindowPos3sv; #endif #endif /* GL_VERSION_1_5 */ #ifdef __GLEE_GL_VERSION_1_5 #ifndef GLEE_C_DEFINED_glGenQueries #define GLEE_C_DEFINED_glGenQueries void __stdcall GLee_Lazy_glGenQueries(GLsizei n, GLuint * ids) {if (GLeeInit()) glGenQueries(n, ids);} GLEEPFNGLGENQUERIESPROC GLeeFuncPtr_glGenQueries=GLee_Lazy_glGenQueries; #endif #ifndef GLEE_C_DEFINED_glDeleteQueries #define GLEE_C_DEFINED_glDeleteQueries void __stdcall GLee_Lazy_glDeleteQueries(GLsizei n, const GLuint * ids) {if (GLeeInit()) glDeleteQueries(n, ids);} GLEEPFNGLDELETEQUERIESPROC GLeeFuncPtr_glDeleteQueries=GLee_Lazy_glDeleteQueries; #endif #ifndef GLEE_C_DEFINED_glIsQuery #define GLEE_C_DEFINED_glIsQuery GLboolean __stdcall GLee_Lazy_glIsQuery(GLuint id) {if (GLeeInit()) return glIsQuery(id); return (GLboolean)0;} GLEEPFNGLISQUERYPROC GLeeFuncPtr_glIsQuery=GLee_Lazy_glIsQuery; #endif #ifndef GLEE_C_DEFINED_glBeginQuery #define GLEE_C_DEFINED_glBeginQuery void __stdcall GLee_Lazy_glBeginQuery(GLenum target, GLuint id) {if (GLeeInit()) glBeginQuery(target, id);} GLEEPFNGLBEGINQUERYPROC GLeeFuncPtr_glBeginQuery=GLee_Lazy_glBeginQuery; #endif #ifndef GLEE_C_DEFINED_glEndQuery #define GLEE_C_DEFINED_glEndQuery void __stdcall GLee_Lazy_glEndQuery(GLenum target) {if (GLeeInit()) glEndQuery(target);} GLEEPFNGLENDQUERYPROC GLeeFuncPtr_glEndQuery=GLee_Lazy_glEndQuery; #endif #ifndef GLEE_C_DEFINED_glGetQueryiv #define GLEE_C_DEFINED_glGetQueryiv void __stdcall GLee_Lazy_glGetQueryiv(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetQueryiv(target, pname, params);} GLEEPFNGLGETQUERYIVPROC GLeeFuncPtr_glGetQueryiv=GLee_Lazy_glGetQueryiv; #endif #ifndef GLEE_C_DEFINED_glGetQueryObjectiv #define GLEE_C_DEFINED_glGetQueryObjectiv void __stdcall GLee_Lazy_glGetQueryObjectiv(GLuint id, GLenum pname, GLint * params) {if (GLeeInit()) glGetQueryObjectiv(id, pname, params);} GLEEPFNGLGETQUERYOBJECTIVPROC GLeeFuncPtr_glGetQueryObjectiv=GLee_Lazy_glGetQueryObjectiv; #endif #ifndef GLEE_C_DEFINED_glGetQueryObjectuiv #define GLEE_C_DEFINED_glGetQueryObjectuiv void __stdcall GLee_Lazy_glGetQueryObjectuiv(GLuint id, GLenum pname, GLuint * params) {if (GLeeInit()) glGetQueryObjectuiv(id, pname, params);} GLEEPFNGLGETQUERYOBJECTUIVPROC GLeeFuncPtr_glGetQueryObjectuiv=GLee_Lazy_glGetQueryObjectuiv; #endif #ifndef GLEE_C_DEFINED_glBindBuffer #define GLEE_C_DEFINED_glBindBuffer void __stdcall GLee_Lazy_glBindBuffer(GLenum target, GLuint buffer) {if (GLeeInit()) glBindBuffer(target, buffer);} GLEEPFNGLBINDBUFFERPROC GLeeFuncPtr_glBindBuffer=GLee_Lazy_glBindBuffer; #endif #ifndef GLEE_C_DEFINED_glDeleteBuffers #define GLEE_C_DEFINED_glDeleteBuffers void __stdcall GLee_Lazy_glDeleteBuffers(GLsizei n, const GLuint * buffers) {if (GLeeInit()) glDeleteBuffers(n, buffers);} GLEEPFNGLDELETEBUFFERSPROC GLeeFuncPtr_glDeleteBuffers=GLee_Lazy_glDeleteBuffers; #endif #ifndef GLEE_C_DEFINED_glGenBuffers #define GLEE_C_DEFINED_glGenBuffers void __stdcall GLee_Lazy_glGenBuffers(GLsizei n, GLuint * buffers) {if (GLeeInit()) glGenBuffers(n, buffers);} GLEEPFNGLGENBUFFERSPROC GLeeFuncPtr_glGenBuffers=GLee_Lazy_glGenBuffers; #endif #ifndef GLEE_C_DEFINED_glIsBuffer #define GLEE_C_DEFINED_glIsBuffer GLboolean __stdcall GLee_Lazy_glIsBuffer(GLuint buffer) {if (GLeeInit()) return glIsBuffer(buffer); return (GLboolean)0;} GLEEPFNGLISBUFFERPROC GLeeFuncPtr_glIsBuffer=GLee_Lazy_glIsBuffer; #endif #ifndef GLEE_C_DEFINED_glBufferData #define GLEE_C_DEFINED_glBufferData void __stdcall GLee_Lazy_glBufferData(GLenum target, GLsizeiptr size, const GLvoid * data, GLenum usage) {if (GLeeInit()) glBufferData(target, size, data, usage);} GLEEPFNGLBUFFERDATAPROC GLeeFuncPtr_glBufferData=GLee_Lazy_glBufferData; #endif #ifndef GLEE_C_DEFINED_glBufferSubData #define GLEE_C_DEFINED_glBufferSubData void __stdcall GLee_Lazy_glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid * data) {if (GLeeInit()) glBufferSubData(target, offset, size, data);} GLEEPFNGLBUFFERSUBDATAPROC GLeeFuncPtr_glBufferSubData=GLee_Lazy_glBufferSubData; #endif #ifndef GLEE_C_DEFINED_glGetBufferSubData #define GLEE_C_DEFINED_glGetBufferSubData void __stdcall GLee_Lazy_glGetBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, GLvoid * data) {if (GLeeInit()) glGetBufferSubData(target, offset, size, data);} GLEEPFNGLGETBUFFERSUBDATAPROC GLeeFuncPtr_glGetBufferSubData=GLee_Lazy_glGetBufferSubData; #endif #ifndef GLEE_C_DEFINED_glMapBuffer #define GLEE_C_DEFINED_glMapBuffer GLvoid* __stdcall GLee_Lazy_glMapBuffer(GLenum target, GLenum access) {if (GLeeInit()) return glMapBuffer(target, access); return (GLvoid*)0;} GLEEPFNGLMAPBUFFERPROC GLeeFuncPtr_glMapBuffer=GLee_Lazy_glMapBuffer; #endif #ifndef GLEE_C_DEFINED_glUnmapBuffer #define GLEE_C_DEFINED_glUnmapBuffer GLboolean __stdcall GLee_Lazy_glUnmapBuffer(GLenum target) {if (GLeeInit()) return glUnmapBuffer(target); return (GLboolean)0;} GLEEPFNGLUNMAPBUFFERPROC GLeeFuncPtr_glUnmapBuffer=GLee_Lazy_glUnmapBuffer; #endif #ifndef GLEE_C_DEFINED_glGetBufferParameteriv #define GLEE_C_DEFINED_glGetBufferParameteriv void __stdcall GLee_Lazy_glGetBufferParameteriv(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetBufferParameteriv(target, pname, params);} GLEEPFNGLGETBUFFERPARAMETERIVPROC GLeeFuncPtr_glGetBufferParameteriv=GLee_Lazy_glGetBufferParameteriv; #endif #ifndef GLEE_C_DEFINED_glGetBufferPointerv #define GLEE_C_DEFINED_glGetBufferPointerv void __stdcall GLee_Lazy_glGetBufferPointerv(GLenum target, GLenum pname, GLvoid* * params) {if (GLeeInit()) glGetBufferPointerv(target, pname, params);} GLEEPFNGLGETBUFFERPOINTERVPROC GLeeFuncPtr_glGetBufferPointerv=GLee_Lazy_glGetBufferPointerv; #endif #endif /* GL_VERSION_2_0 */ #ifdef __GLEE_GL_VERSION_2_0 #ifndef GLEE_C_DEFINED_glBlendEquationSeparate #define GLEE_C_DEFINED_glBlendEquationSeparate void __stdcall GLee_Lazy_glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) {if (GLeeInit()) glBlendEquationSeparate(modeRGB, modeAlpha);} GLEEPFNGLBLENDEQUATIONSEPARATEPROC GLeeFuncPtr_glBlendEquationSeparate=GLee_Lazy_glBlendEquationSeparate; #endif #ifndef GLEE_C_DEFINED_glDrawBuffers #define GLEE_C_DEFINED_glDrawBuffers void __stdcall GLee_Lazy_glDrawBuffers(GLsizei n, const GLenum * bufs) {if (GLeeInit()) glDrawBuffers(n, bufs);} GLEEPFNGLDRAWBUFFERSPROC GLeeFuncPtr_glDrawBuffers=GLee_Lazy_glDrawBuffers; #endif #ifndef GLEE_C_DEFINED_glStencilOpSeparate #define GLEE_C_DEFINED_glStencilOpSeparate void __stdcall GLee_Lazy_glStencilOpSeparate(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) {if (GLeeInit()) glStencilOpSeparate(face, sfail, dpfail, dppass);} GLEEPFNGLSTENCILOPSEPARATEPROC GLeeFuncPtr_glStencilOpSeparate=GLee_Lazy_glStencilOpSeparate; #endif #ifndef GLEE_C_DEFINED_glStencilFuncSeparate #define GLEE_C_DEFINED_glStencilFuncSeparate void __stdcall GLee_Lazy_glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask) {if (GLeeInit()) glStencilFuncSeparate(face, func, ref, mask);} GLEEPFNGLSTENCILFUNCSEPARATEPROC GLeeFuncPtr_glStencilFuncSeparate=GLee_Lazy_glStencilFuncSeparate; #endif #ifndef GLEE_C_DEFINED_glStencilMaskSeparate #define GLEE_C_DEFINED_glStencilMaskSeparate void __stdcall GLee_Lazy_glStencilMaskSeparate(GLenum face, GLuint mask) {if (GLeeInit()) glStencilMaskSeparate(face, mask);} GLEEPFNGLSTENCILMASKSEPARATEPROC GLeeFuncPtr_glStencilMaskSeparate=GLee_Lazy_glStencilMaskSeparate; #endif #ifndef GLEE_C_DEFINED_glAttachShader #define GLEE_C_DEFINED_glAttachShader void __stdcall GLee_Lazy_glAttachShader(GLuint program, GLuint shader) {if (GLeeInit()) glAttachShader(program, shader);} GLEEPFNGLATTACHSHADERPROC GLeeFuncPtr_glAttachShader=GLee_Lazy_glAttachShader; #endif #ifndef GLEE_C_DEFINED_glBindAttribLocation #define GLEE_C_DEFINED_glBindAttribLocation void __stdcall GLee_Lazy_glBindAttribLocation(GLuint program, GLuint index, const GLchar * name) {if (GLeeInit()) glBindAttribLocation(program, index, name);} GLEEPFNGLBINDATTRIBLOCATIONPROC GLeeFuncPtr_glBindAttribLocation=GLee_Lazy_glBindAttribLocation; #endif #ifndef GLEE_C_DEFINED_glCompileShader #define GLEE_C_DEFINED_glCompileShader void __stdcall GLee_Lazy_glCompileShader(GLuint shader) {if (GLeeInit()) glCompileShader(shader);} GLEEPFNGLCOMPILESHADERPROC GLeeFuncPtr_glCompileShader=GLee_Lazy_glCompileShader; #endif #ifndef GLEE_C_DEFINED_glCreateProgram #define GLEE_C_DEFINED_glCreateProgram GLuint __stdcall GLee_Lazy_glCreateProgram(void) {if (GLeeInit()) return glCreateProgram(); return (GLuint)0;} GLEEPFNGLCREATEPROGRAMPROC GLeeFuncPtr_glCreateProgram=GLee_Lazy_glCreateProgram; #endif #ifndef GLEE_C_DEFINED_glCreateShader #define GLEE_C_DEFINED_glCreateShader GLuint __stdcall GLee_Lazy_glCreateShader(GLenum type) {if (GLeeInit()) return glCreateShader(type); return (GLuint)0;} GLEEPFNGLCREATESHADERPROC GLeeFuncPtr_glCreateShader=GLee_Lazy_glCreateShader; #endif #ifndef GLEE_C_DEFINED_glDeleteProgram #define GLEE_C_DEFINED_glDeleteProgram void __stdcall GLee_Lazy_glDeleteProgram(GLuint program) {if (GLeeInit()) glDeleteProgram(program);} GLEEPFNGLDELETEPROGRAMPROC GLeeFuncPtr_glDeleteProgram=GLee_Lazy_glDeleteProgram; #endif #ifndef GLEE_C_DEFINED_glDeleteShader #define GLEE_C_DEFINED_glDeleteShader void __stdcall GLee_Lazy_glDeleteShader(GLuint shader) {if (GLeeInit()) glDeleteShader(shader);} GLEEPFNGLDELETESHADERPROC GLeeFuncPtr_glDeleteShader=GLee_Lazy_glDeleteShader; #endif #ifndef GLEE_C_DEFINED_glDetachShader #define GLEE_C_DEFINED_glDetachShader void __stdcall GLee_Lazy_glDetachShader(GLuint program, GLuint shader) {if (GLeeInit()) glDetachShader(program, shader);} GLEEPFNGLDETACHSHADERPROC GLeeFuncPtr_glDetachShader=GLee_Lazy_glDetachShader; #endif #ifndef GLEE_C_DEFINED_glDisableVertexAttribArray #define GLEE_C_DEFINED_glDisableVertexAttribArray void __stdcall GLee_Lazy_glDisableVertexAttribArray(GLuint index) {if (GLeeInit()) glDisableVertexAttribArray(index);} GLEEPFNGLDISABLEVERTEXATTRIBARRAYPROC GLeeFuncPtr_glDisableVertexAttribArray=GLee_Lazy_glDisableVertexAttribArray; #endif #ifndef GLEE_C_DEFINED_glEnableVertexAttribArray #define GLEE_C_DEFINED_glEnableVertexAttribArray void __stdcall GLee_Lazy_glEnableVertexAttribArray(GLuint index) {if (GLeeInit()) glEnableVertexAttribArray(index);} GLEEPFNGLENABLEVERTEXATTRIBARRAYPROC GLeeFuncPtr_glEnableVertexAttribArray=GLee_Lazy_glEnableVertexAttribArray; #endif #ifndef GLEE_C_DEFINED_glGetActiveAttrib #define GLEE_C_DEFINED_glGetActiveAttrib void __stdcall GLee_Lazy_glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name) {if (GLeeInit()) glGetActiveAttrib(program, index, bufSize, length, size, type, name);} GLEEPFNGLGETACTIVEATTRIBPROC GLeeFuncPtr_glGetActiveAttrib=GLee_Lazy_glGetActiveAttrib; #endif #ifndef GLEE_C_DEFINED_glGetActiveUniform #define GLEE_C_DEFINED_glGetActiveUniform void __stdcall GLee_Lazy_glGetActiveUniform(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name) {if (GLeeInit()) glGetActiveUniform(program, index, bufSize, length, size, type, name);} GLEEPFNGLGETACTIVEUNIFORMPROC GLeeFuncPtr_glGetActiveUniform=GLee_Lazy_glGetActiveUniform; #endif #ifndef GLEE_C_DEFINED_glGetAttachedShaders #define GLEE_C_DEFINED_glGetAttachedShaders void __stdcall GLee_Lazy_glGetAttachedShaders(GLuint program, GLsizei maxCount, GLsizei * count, GLuint * obj) {if (GLeeInit()) glGetAttachedShaders(program, maxCount, count, obj);} GLEEPFNGLGETATTACHEDSHADERSPROC GLeeFuncPtr_glGetAttachedShaders=GLee_Lazy_glGetAttachedShaders; #endif #ifndef GLEE_C_DEFINED_glGetAttribLocation #define GLEE_C_DEFINED_glGetAttribLocation GLint __stdcall GLee_Lazy_glGetAttribLocation(GLuint program, const GLchar * name) {if (GLeeInit()) return glGetAttribLocation(program, name); return (GLint)0;} GLEEPFNGLGETATTRIBLOCATIONPROC GLeeFuncPtr_glGetAttribLocation=GLee_Lazy_glGetAttribLocation; #endif #ifndef GLEE_C_DEFINED_glGetProgramiv #define GLEE_C_DEFINED_glGetProgramiv void __stdcall GLee_Lazy_glGetProgramiv(GLuint program, GLenum pname, GLint * params) {if (GLeeInit()) glGetProgramiv(program, pname, params);} GLEEPFNGLGETPROGRAMIVPROC GLeeFuncPtr_glGetProgramiv=GLee_Lazy_glGetProgramiv; #endif #ifndef GLEE_C_DEFINED_glGetProgramInfoLog #define GLEE_C_DEFINED_glGetProgramInfoLog void __stdcall GLee_Lazy_glGetProgramInfoLog(GLuint program, GLsizei bufSize, GLsizei * length, GLchar * infoLog) {if (GLeeInit()) glGetProgramInfoLog(program, bufSize, length, infoLog);} GLEEPFNGLGETPROGRAMINFOLOGPROC GLeeFuncPtr_glGetProgramInfoLog=GLee_Lazy_glGetProgramInfoLog; #endif #ifndef GLEE_C_DEFINED_glGetShaderiv #define GLEE_C_DEFINED_glGetShaderiv void __stdcall GLee_Lazy_glGetShaderiv(GLuint shader, GLenum pname, GLint * params) {if (GLeeInit()) glGetShaderiv(shader, pname, params);} GLEEPFNGLGETSHADERIVPROC GLeeFuncPtr_glGetShaderiv=GLee_Lazy_glGetShaderiv; #endif #ifndef GLEE_C_DEFINED_glGetShaderInfoLog #define GLEE_C_DEFINED_glGetShaderInfoLog void __stdcall GLee_Lazy_glGetShaderInfoLog(GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * infoLog) {if (GLeeInit()) glGetShaderInfoLog(shader, bufSize, length, infoLog);} GLEEPFNGLGETSHADERINFOLOGPROC GLeeFuncPtr_glGetShaderInfoLog=GLee_Lazy_glGetShaderInfoLog; #endif #ifndef GLEE_C_DEFINED_glGetShaderSource #define GLEE_C_DEFINED_glGetShaderSource void __stdcall GLee_Lazy_glGetShaderSource(GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * source) {if (GLeeInit()) glGetShaderSource(shader, bufSize, length, source);} GLEEPFNGLGETSHADERSOURCEPROC GLeeFuncPtr_glGetShaderSource=GLee_Lazy_glGetShaderSource; #endif #ifndef GLEE_C_DEFINED_glGetUniformLocation #define GLEE_C_DEFINED_glGetUniformLocation GLint __stdcall GLee_Lazy_glGetUniformLocation(GLuint program, const GLchar * name) {if (GLeeInit()) return glGetUniformLocation(program, name); return (GLint)0;} GLEEPFNGLGETUNIFORMLOCATIONPROC GLeeFuncPtr_glGetUniformLocation=GLee_Lazy_glGetUniformLocation; #endif #ifndef GLEE_C_DEFINED_glGetUniformfv #define GLEE_C_DEFINED_glGetUniformfv void __stdcall GLee_Lazy_glGetUniformfv(GLuint program, GLint location, GLfloat * params) {if (GLeeInit()) glGetUniformfv(program, location, params);} GLEEPFNGLGETUNIFORMFVPROC GLeeFuncPtr_glGetUniformfv=GLee_Lazy_glGetUniformfv; #endif #ifndef GLEE_C_DEFINED_glGetUniformiv #define GLEE_C_DEFINED_glGetUniformiv void __stdcall GLee_Lazy_glGetUniformiv(GLuint program, GLint location, GLint * params) {if (GLeeInit()) glGetUniformiv(program, location, params);} GLEEPFNGLGETUNIFORMIVPROC GLeeFuncPtr_glGetUniformiv=GLee_Lazy_glGetUniformiv; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribdv #define GLEE_C_DEFINED_glGetVertexAttribdv void __stdcall GLee_Lazy_glGetVertexAttribdv(GLuint index, GLenum pname, GLdouble * params) {if (GLeeInit()) glGetVertexAttribdv(index, pname, params);} GLEEPFNGLGETVERTEXATTRIBDVPROC GLeeFuncPtr_glGetVertexAttribdv=GLee_Lazy_glGetVertexAttribdv; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribfv #define GLEE_C_DEFINED_glGetVertexAttribfv void __stdcall GLee_Lazy_glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetVertexAttribfv(index, pname, params);} GLEEPFNGLGETVERTEXATTRIBFVPROC GLeeFuncPtr_glGetVertexAttribfv=GLee_Lazy_glGetVertexAttribfv; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribiv #define GLEE_C_DEFINED_glGetVertexAttribiv void __stdcall GLee_Lazy_glGetVertexAttribiv(GLuint index, GLenum pname, GLint * params) {if (GLeeInit()) glGetVertexAttribiv(index, pname, params);} GLEEPFNGLGETVERTEXATTRIBIVPROC GLeeFuncPtr_glGetVertexAttribiv=GLee_Lazy_glGetVertexAttribiv; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribPointerv #define GLEE_C_DEFINED_glGetVertexAttribPointerv void __stdcall GLee_Lazy_glGetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid* * pointer) {if (GLeeInit()) glGetVertexAttribPointerv(index, pname, pointer);} GLEEPFNGLGETVERTEXATTRIBPOINTERVPROC GLeeFuncPtr_glGetVertexAttribPointerv=GLee_Lazy_glGetVertexAttribPointerv; #endif #ifndef GLEE_C_DEFINED_glIsProgram #define GLEE_C_DEFINED_glIsProgram GLboolean __stdcall GLee_Lazy_glIsProgram(GLuint program) {if (GLeeInit()) return glIsProgram(program); return (GLboolean)0;} GLEEPFNGLISPROGRAMPROC GLeeFuncPtr_glIsProgram=GLee_Lazy_glIsProgram; #endif #ifndef GLEE_C_DEFINED_glIsShader #define GLEE_C_DEFINED_glIsShader GLboolean __stdcall GLee_Lazy_glIsShader(GLuint shader) {if (GLeeInit()) return glIsShader(shader); return (GLboolean)0;} GLEEPFNGLISSHADERPROC GLeeFuncPtr_glIsShader=GLee_Lazy_glIsShader; #endif #ifndef GLEE_C_DEFINED_glLinkProgram #define GLEE_C_DEFINED_glLinkProgram void __stdcall GLee_Lazy_glLinkProgram(GLuint program) {if (GLeeInit()) glLinkProgram(program);} GLEEPFNGLLINKPROGRAMPROC GLeeFuncPtr_glLinkProgram=GLee_Lazy_glLinkProgram; #endif #ifndef GLEE_C_DEFINED_glShaderSource #define GLEE_C_DEFINED_glShaderSource void __stdcall GLee_Lazy_glShaderSource(GLuint shader, GLsizei count, const GLchar* const * string, const GLint * length) {if (GLeeInit()) glShaderSource(shader, count, string, length);} GLEEPFNGLSHADERSOURCEPROC GLeeFuncPtr_glShaderSource=GLee_Lazy_glShaderSource; #endif #ifndef GLEE_C_DEFINED_glUseProgram #define GLEE_C_DEFINED_glUseProgram void __stdcall GLee_Lazy_glUseProgram(GLuint program) {if (GLeeInit()) glUseProgram(program);} GLEEPFNGLUSEPROGRAMPROC GLeeFuncPtr_glUseProgram=GLee_Lazy_glUseProgram; #endif #ifndef GLEE_C_DEFINED_glUniform1f #define GLEE_C_DEFINED_glUniform1f void __stdcall GLee_Lazy_glUniform1f(GLint location, GLfloat v0) {if (GLeeInit()) glUniform1f(location, v0);} GLEEPFNGLUNIFORM1FPROC GLeeFuncPtr_glUniform1f=GLee_Lazy_glUniform1f; #endif #ifndef GLEE_C_DEFINED_glUniform2f #define GLEE_C_DEFINED_glUniform2f void __stdcall GLee_Lazy_glUniform2f(GLint location, GLfloat v0, GLfloat v1) {if (GLeeInit()) glUniform2f(location, v0, v1);} GLEEPFNGLUNIFORM2FPROC GLeeFuncPtr_glUniform2f=GLee_Lazy_glUniform2f; #endif #ifndef GLEE_C_DEFINED_glUniform3f #define GLEE_C_DEFINED_glUniform3f void __stdcall GLee_Lazy_glUniform3f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2) {if (GLeeInit()) glUniform3f(location, v0, v1, v2);} GLEEPFNGLUNIFORM3FPROC GLeeFuncPtr_glUniform3f=GLee_Lazy_glUniform3f; #endif #ifndef GLEE_C_DEFINED_glUniform4f #define GLEE_C_DEFINED_glUniform4f void __stdcall GLee_Lazy_glUniform4f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) {if (GLeeInit()) glUniform4f(location, v0, v1, v2, v3);} GLEEPFNGLUNIFORM4FPROC GLeeFuncPtr_glUniform4f=GLee_Lazy_glUniform4f; #endif #ifndef GLEE_C_DEFINED_glUniform1i #define GLEE_C_DEFINED_glUniform1i void __stdcall GLee_Lazy_glUniform1i(GLint location, GLint v0) {if (GLeeInit()) glUniform1i(location, v0);} GLEEPFNGLUNIFORM1IPROC GLeeFuncPtr_glUniform1i=GLee_Lazy_glUniform1i; #endif #ifndef GLEE_C_DEFINED_glUniform2i #define GLEE_C_DEFINED_glUniform2i void __stdcall GLee_Lazy_glUniform2i(GLint location, GLint v0, GLint v1) {if (GLeeInit()) glUniform2i(location, v0, v1);} GLEEPFNGLUNIFORM2IPROC GLeeFuncPtr_glUniform2i=GLee_Lazy_glUniform2i; #endif #ifndef GLEE_C_DEFINED_glUniform3i #define GLEE_C_DEFINED_glUniform3i void __stdcall GLee_Lazy_glUniform3i(GLint location, GLint v0, GLint v1, GLint v2) {if (GLeeInit()) glUniform3i(location, v0, v1, v2);} GLEEPFNGLUNIFORM3IPROC GLeeFuncPtr_glUniform3i=GLee_Lazy_glUniform3i; #endif #ifndef GLEE_C_DEFINED_glUniform4i #define GLEE_C_DEFINED_glUniform4i void __stdcall GLee_Lazy_glUniform4i(GLint location, GLint v0, GLint v1, GLint v2, GLint v3) {if (GLeeInit()) glUniform4i(location, v0, v1, v2, v3);} GLEEPFNGLUNIFORM4IPROC GLeeFuncPtr_glUniform4i=GLee_Lazy_glUniform4i; #endif #ifndef GLEE_C_DEFINED_glUniform1fv #define GLEE_C_DEFINED_glUniform1fv void __stdcall GLee_Lazy_glUniform1fv(GLint location, GLsizei count, const GLfloat * value) {if (GLeeInit()) glUniform1fv(location, count, value);} GLEEPFNGLUNIFORM1FVPROC GLeeFuncPtr_glUniform1fv=GLee_Lazy_glUniform1fv; #endif #ifndef GLEE_C_DEFINED_glUniform2fv #define GLEE_C_DEFINED_glUniform2fv void __stdcall GLee_Lazy_glUniform2fv(GLint location, GLsizei count, const GLfloat * value) {if (GLeeInit()) glUniform2fv(location, count, value);} GLEEPFNGLUNIFORM2FVPROC GLeeFuncPtr_glUniform2fv=GLee_Lazy_glUniform2fv; #endif #ifndef GLEE_C_DEFINED_glUniform3fv #define GLEE_C_DEFINED_glUniform3fv void __stdcall GLee_Lazy_glUniform3fv(GLint location, GLsizei count, const GLfloat * value) {if (GLeeInit()) glUniform3fv(location, count, value);} GLEEPFNGLUNIFORM3FVPROC GLeeFuncPtr_glUniform3fv=GLee_Lazy_glUniform3fv; #endif #ifndef GLEE_C_DEFINED_glUniform4fv #define GLEE_C_DEFINED_glUniform4fv void __stdcall GLee_Lazy_glUniform4fv(GLint location, GLsizei count, const GLfloat * value) {if (GLeeInit()) glUniform4fv(location, count, value);} GLEEPFNGLUNIFORM4FVPROC GLeeFuncPtr_glUniform4fv=GLee_Lazy_glUniform4fv; #endif #ifndef GLEE_C_DEFINED_glUniform1iv #define GLEE_C_DEFINED_glUniform1iv void __stdcall GLee_Lazy_glUniform1iv(GLint location, GLsizei count, const GLint * value) {if (GLeeInit()) glUniform1iv(location, count, value);} GLEEPFNGLUNIFORM1IVPROC GLeeFuncPtr_glUniform1iv=GLee_Lazy_glUniform1iv; #endif #ifndef GLEE_C_DEFINED_glUniform2iv #define GLEE_C_DEFINED_glUniform2iv void __stdcall GLee_Lazy_glUniform2iv(GLint location, GLsizei count, const GLint * value) {if (GLeeInit()) glUniform2iv(location, count, value);} GLEEPFNGLUNIFORM2IVPROC GLeeFuncPtr_glUniform2iv=GLee_Lazy_glUniform2iv; #endif #ifndef GLEE_C_DEFINED_glUniform3iv #define GLEE_C_DEFINED_glUniform3iv void __stdcall GLee_Lazy_glUniform3iv(GLint location, GLsizei count, const GLint * value) {if (GLeeInit()) glUniform3iv(location, count, value);} GLEEPFNGLUNIFORM3IVPROC GLeeFuncPtr_glUniform3iv=GLee_Lazy_glUniform3iv; #endif #ifndef GLEE_C_DEFINED_glUniform4iv #define GLEE_C_DEFINED_glUniform4iv void __stdcall GLee_Lazy_glUniform4iv(GLint location, GLsizei count, const GLint * value) {if (GLeeInit()) glUniform4iv(location, count, value);} GLEEPFNGLUNIFORM4IVPROC GLeeFuncPtr_glUniform4iv=GLee_Lazy_glUniform4iv; #endif #ifndef GLEE_C_DEFINED_glUniformMatrix2fv #define GLEE_C_DEFINED_glUniformMatrix2fv void __stdcall GLee_Lazy_glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glUniformMatrix2fv(location, count, transpose, value);} GLEEPFNGLUNIFORMMATRIX2FVPROC GLeeFuncPtr_glUniformMatrix2fv=GLee_Lazy_glUniformMatrix2fv; #endif #ifndef GLEE_C_DEFINED_glUniformMatrix3fv #define GLEE_C_DEFINED_glUniformMatrix3fv void __stdcall GLee_Lazy_glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glUniformMatrix3fv(location, count, transpose, value);} GLEEPFNGLUNIFORMMATRIX3FVPROC GLeeFuncPtr_glUniformMatrix3fv=GLee_Lazy_glUniformMatrix3fv; #endif #ifndef GLEE_C_DEFINED_glUniformMatrix4fv #define GLEE_C_DEFINED_glUniformMatrix4fv void __stdcall GLee_Lazy_glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glUniformMatrix4fv(location, count, transpose, value);} GLEEPFNGLUNIFORMMATRIX4FVPROC GLeeFuncPtr_glUniformMatrix4fv=GLee_Lazy_glUniformMatrix4fv; #endif #ifndef GLEE_C_DEFINED_glValidateProgram #define GLEE_C_DEFINED_glValidateProgram void __stdcall GLee_Lazy_glValidateProgram(GLuint program) {if (GLeeInit()) glValidateProgram(program);} GLEEPFNGLVALIDATEPROGRAMPROC GLeeFuncPtr_glValidateProgram=GLee_Lazy_glValidateProgram; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1d #define GLEE_C_DEFINED_glVertexAttrib1d void __stdcall GLee_Lazy_glVertexAttrib1d(GLuint index, GLdouble x) {if (GLeeInit()) glVertexAttrib1d(index, x);} GLEEPFNGLVERTEXATTRIB1DPROC GLeeFuncPtr_glVertexAttrib1d=GLee_Lazy_glVertexAttrib1d; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1dv #define GLEE_C_DEFINED_glVertexAttrib1dv void __stdcall GLee_Lazy_glVertexAttrib1dv(GLuint index, const GLdouble * v) {if (GLeeInit()) glVertexAttrib1dv(index, v);} GLEEPFNGLVERTEXATTRIB1DVPROC GLeeFuncPtr_glVertexAttrib1dv=GLee_Lazy_glVertexAttrib1dv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1f #define GLEE_C_DEFINED_glVertexAttrib1f void __stdcall GLee_Lazy_glVertexAttrib1f(GLuint index, GLfloat x) {if (GLeeInit()) glVertexAttrib1f(index, x);} GLEEPFNGLVERTEXATTRIB1FPROC GLeeFuncPtr_glVertexAttrib1f=GLee_Lazy_glVertexAttrib1f; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1fv #define GLEE_C_DEFINED_glVertexAttrib1fv void __stdcall GLee_Lazy_glVertexAttrib1fv(GLuint index, const GLfloat * v) {if (GLeeInit()) glVertexAttrib1fv(index, v);} GLEEPFNGLVERTEXATTRIB1FVPROC GLeeFuncPtr_glVertexAttrib1fv=GLee_Lazy_glVertexAttrib1fv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1s #define GLEE_C_DEFINED_glVertexAttrib1s void __stdcall GLee_Lazy_glVertexAttrib1s(GLuint index, GLshort x) {if (GLeeInit()) glVertexAttrib1s(index, x);} GLEEPFNGLVERTEXATTRIB1SPROC GLeeFuncPtr_glVertexAttrib1s=GLee_Lazy_glVertexAttrib1s; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1sv #define GLEE_C_DEFINED_glVertexAttrib1sv void __stdcall GLee_Lazy_glVertexAttrib1sv(GLuint index, const GLshort * v) {if (GLeeInit()) glVertexAttrib1sv(index, v);} GLEEPFNGLVERTEXATTRIB1SVPROC GLeeFuncPtr_glVertexAttrib1sv=GLee_Lazy_glVertexAttrib1sv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2d #define GLEE_C_DEFINED_glVertexAttrib2d void __stdcall GLee_Lazy_glVertexAttrib2d(GLuint index, GLdouble x, GLdouble y) {if (GLeeInit()) glVertexAttrib2d(index, x, y);} GLEEPFNGLVERTEXATTRIB2DPROC GLeeFuncPtr_glVertexAttrib2d=GLee_Lazy_glVertexAttrib2d; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2dv #define GLEE_C_DEFINED_glVertexAttrib2dv void __stdcall GLee_Lazy_glVertexAttrib2dv(GLuint index, const GLdouble * v) {if (GLeeInit()) glVertexAttrib2dv(index, v);} GLEEPFNGLVERTEXATTRIB2DVPROC GLeeFuncPtr_glVertexAttrib2dv=GLee_Lazy_glVertexAttrib2dv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2f #define GLEE_C_DEFINED_glVertexAttrib2f void __stdcall GLee_Lazy_glVertexAttrib2f(GLuint index, GLfloat x, GLfloat y) {if (GLeeInit()) glVertexAttrib2f(index, x, y);} GLEEPFNGLVERTEXATTRIB2FPROC GLeeFuncPtr_glVertexAttrib2f=GLee_Lazy_glVertexAttrib2f; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2fv #define GLEE_C_DEFINED_glVertexAttrib2fv void __stdcall GLee_Lazy_glVertexAttrib2fv(GLuint index, const GLfloat * v) {if (GLeeInit()) glVertexAttrib2fv(index, v);} GLEEPFNGLVERTEXATTRIB2FVPROC GLeeFuncPtr_glVertexAttrib2fv=GLee_Lazy_glVertexAttrib2fv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2s #define GLEE_C_DEFINED_glVertexAttrib2s void __stdcall GLee_Lazy_glVertexAttrib2s(GLuint index, GLshort x, GLshort y) {if (GLeeInit()) glVertexAttrib2s(index, x, y);} GLEEPFNGLVERTEXATTRIB2SPROC GLeeFuncPtr_glVertexAttrib2s=GLee_Lazy_glVertexAttrib2s; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2sv #define GLEE_C_DEFINED_glVertexAttrib2sv void __stdcall GLee_Lazy_glVertexAttrib2sv(GLuint index, const GLshort * v) {if (GLeeInit()) glVertexAttrib2sv(index, v);} GLEEPFNGLVERTEXATTRIB2SVPROC GLeeFuncPtr_glVertexAttrib2sv=GLee_Lazy_glVertexAttrib2sv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3d #define GLEE_C_DEFINED_glVertexAttrib3d void __stdcall GLee_Lazy_glVertexAttrib3d(GLuint index, GLdouble x, GLdouble y, GLdouble z) {if (GLeeInit()) glVertexAttrib3d(index, x, y, z);} GLEEPFNGLVERTEXATTRIB3DPROC GLeeFuncPtr_glVertexAttrib3d=GLee_Lazy_glVertexAttrib3d; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3dv #define GLEE_C_DEFINED_glVertexAttrib3dv void __stdcall GLee_Lazy_glVertexAttrib3dv(GLuint index, const GLdouble * v) {if (GLeeInit()) glVertexAttrib3dv(index, v);} GLEEPFNGLVERTEXATTRIB3DVPROC GLeeFuncPtr_glVertexAttrib3dv=GLee_Lazy_glVertexAttrib3dv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3f #define GLEE_C_DEFINED_glVertexAttrib3f void __stdcall GLee_Lazy_glVertexAttrib3f(GLuint index, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glVertexAttrib3f(index, x, y, z);} GLEEPFNGLVERTEXATTRIB3FPROC GLeeFuncPtr_glVertexAttrib3f=GLee_Lazy_glVertexAttrib3f; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3fv #define GLEE_C_DEFINED_glVertexAttrib3fv void __stdcall GLee_Lazy_glVertexAttrib3fv(GLuint index, const GLfloat * v) {if (GLeeInit()) glVertexAttrib3fv(index, v);} GLEEPFNGLVERTEXATTRIB3FVPROC GLeeFuncPtr_glVertexAttrib3fv=GLee_Lazy_glVertexAttrib3fv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3s #define GLEE_C_DEFINED_glVertexAttrib3s void __stdcall GLee_Lazy_glVertexAttrib3s(GLuint index, GLshort x, GLshort y, GLshort z) {if (GLeeInit()) glVertexAttrib3s(index, x, y, z);} GLEEPFNGLVERTEXATTRIB3SPROC GLeeFuncPtr_glVertexAttrib3s=GLee_Lazy_glVertexAttrib3s; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3sv #define GLEE_C_DEFINED_glVertexAttrib3sv void __stdcall GLee_Lazy_glVertexAttrib3sv(GLuint index, const GLshort * v) {if (GLeeInit()) glVertexAttrib3sv(index, v);} GLEEPFNGLVERTEXATTRIB3SVPROC GLeeFuncPtr_glVertexAttrib3sv=GLee_Lazy_glVertexAttrib3sv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4Nbv #define GLEE_C_DEFINED_glVertexAttrib4Nbv void __stdcall GLee_Lazy_glVertexAttrib4Nbv(GLuint index, const GLbyte * v) {if (GLeeInit()) glVertexAttrib4Nbv(index, v);} GLEEPFNGLVERTEXATTRIB4NBVPROC GLeeFuncPtr_glVertexAttrib4Nbv=GLee_Lazy_glVertexAttrib4Nbv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4Niv #define GLEE_C_DEFINED_glVertexAttrib4Niv void __stdcall GLee_Lazy_glVertexAttrib4Niv(GLuint index, const GLint * v) {if (GLeeInit()) glVertexAttrib4Niv(index, v);} GLEEPFNGLVERTEXATTRIB4NIVPROC GLeeFuncPtr_glVertexAttrib4Niv=GLee_Lazy_glVertexAttrib4Niv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4Nsv #define GLEE_C_DEFINED_glVertexAttrib4Nsv void __stdcall GLee_Lazy_glVertexAttrib4Nsv(GLuint index, const GLshort * v) {if (GLeeInit()) glVertexAttrib4Nsv(index, v);} GLEEPFNGLVERTEXATTRIB4NSVPROC GLeeFuncPtr_glVertexAttrib4Nsv=GLee_Lazy_glVertexAttrib4Nsv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4Nub #define GLEE_C_DEFINED_glVertexAttrib4Nub void __stdcall GLee_Lazy_glVertexAttrib4Nub(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w) {if (GLeeInit()) glVertexAttrib4Nub(index, x, y, z, w);} GLEEPFNGLVERTEXATTRIB4NUBPROC GLeeFuncPtr_glVertexAttrib4Nub=GLee_Lazy_glVertexAttrib4Nub; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4Nubv #define GLEE_C_DEFINED_glVertexAttrib4Nubv void __stdcall GLee_Lazy_glVertexAttrib4Nubv(GLuint index, const GLubyte * v) {if (GLeeInit()) glVertexAttrib4Nubv(index, v);} GLEEPFNGLVERTEXATTRIB4NUBVPROC GLeeFuncPtr_glVertexAttrib4Nubv=GLee_Lazy_glVertexAttrib4Nubv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4Nuiv #define GLEE_C_DEFINED_glVertexAttrib4Nuiv void __stdcall GLee_Lazy_glVertexAttrib4Nuiv(GLuint index, const GLuint * v) {if (GLeeInit()) glVertexAttrib4Nuiv(index, v);} GLEEPFNGLVERTEXATTRIB4NUIVPROC GLeeFuncPtr_glVertexAttrib4Nuiv=GLee_Lazy_glVertexAttrib4Nuiv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4Nusv #define GLEE_C_DEFINED_glVertexAttrib4Nusv void __stdcall GLee_Lazy_glVertexAttrib4Nusv(GLuint index, const GLushort * v) {if (GLeeInit()) glVertexAttrib4Nusv(index, v);} GLEEPFNGLVERTEXATTRIB4NUSVPROC GLeeFuncPtr_glVertexAttrib4Nusv=GLee_Lazy_glVertexAttrib4Nusv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4bv #define GLEE_C_DEFINED_glVertexAttrib4bv void __stdcall GLee_Lazy_glVertexAttrib4bv(GLuint index, const GLbyte * v) {if (GLeeInit()) glVertexAttrib4bv(index, v);} GLEEPFNGLVERTEXATTRIB4BVPROC GLeeFuncPtr_glVertexAttrib4bv=GLee_Lazy_glVertexAttrib4bv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4d #define GLEE_C_DEFINED_glVertexAttrib4d void __stdcall GLee_Lazy_glVertexAttrib4d(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) {if (GLeeInit()) glVertexAttrib4d(index, x, y, z, w);} GLEEPFNGLVERTEXATTRIB4DPROC GLeeFuncPtr_glVertexAttrib4d=GLee_Lazy_glVertexAttrib4d; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4dv #define GLEE_C_DEFINED_glVertexAttrib4dv void __stdcall GLee_Lazy_glVertexAttrib4dv(GLuint index, const GLdouble * v) {if (GLeeInit()) glVertexAttrib4dv(index, v);} GLEEPFNGLVERTEXATTRIB4DVPROC GLeeFuncPtr_glVertexAttrib4dv=GLee_Lazy_glVertexAttrib4dv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4f #define GLEE_C_DEFINED_glVertexAttrib4f void __stdcall GLee_Lazy_glVertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {if (GLeeInit()) glVertexAttrib4f(index, x, y, z, w);} GLEEPFNGLVERTEXATTRIB4FPROC GLeeFuncPtr_glVertexAttrib4f=GLee_Lazy_glVertexAttrib4f; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4fv #define GLEE_C_DEFINED_glVertexAttrib4fv void __stdcall GLee_Lazy_glVertexAttrib4fv(GLuint index, const GLfloat * v) {if (GLeeInit()) glVertexAttrib4fv(index, v);} GLEEPFNGLVERTEXATTRIB4FVPROC GLeeFuncPtr_glVertexAttrib4fv=GLee_Lazy_glVertexAttrib4fv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4iv #define GLEE_C_DEFINED_glVertexAttrib4iv void __stdcall GLee_Lazy_glVertexAttrib4iv(GLuint index, const GLint * v) {if (GLeeInit()) glVertexAttrib4iv(index, v);} GLEEPFNGLVERTEXATTRIB4IVPROC GLeeFuncPtr_glVertexAttrib4iv=GLee_Lazy_glVertexAttrib4iv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4s #define GLEE_C_DEFINED_glVertexAttrib4s void __stdcall GLee_Lazy_glVertexAttrib4s(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w) {if (GLeeInit()) glVertexAttrib4s(index, x, y, z, w);} GLEEPFNGLVERTEXATTRIB4SPROC GLeeFuncPtr_glVertexAttrib4s=GLee_Lazy_glVertexAttrib4s; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4sv #define GLEE_C_DEFINED_glVertexAttrib4sv void __stdcall GLee_Lazy_glVertexAttrib4sv(GLuint index, const GLshort * v) {if (GLeeInit()) glVertexAttrib4sv(index, v);} GLEEPFNGLVERTEXATTRIB4SVPROC GLeeFuncPtr_glVertexAttrib4sv=GLee_Lazy_glVertexAttrib4sv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4ubv #define GLEE_C_DEFINED_glVertexAttrib4ubv void __stdcall GLee_Lazy_glVertexAttrib4ubv(GLuint index, const GLubyte * v) {if (GLeeInit()) glVertexAttrib4ubv(index, v);} GLEEPFNGLVERTEXATTRIB4UBVPROC GLeeFuncPtr_glVertexAttrib4ubv=GLee_Lazy_glVertexAttrib4ubv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4uiv #define GLEE_C_DEFINED_glVertexAttrib4uiv void __stdcall GLee_Lazy_glVertexAttrib4uiv(GLuint index, const GLuint * v) {if (GLeeInit()) glVertexAttrib4uiv(index, v);} GLEEPFNGLVERTEXATTRIB4UIVPROC GLeeFuncPtr_glVertexAttrib4uiv=GLee_Lazy_glVertexAttrib4uiv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4usv #define GLEE_C_DEFINED_glVertexAttrib4usv void __stdcall GLee_Lazy_glVertexAttrib4usv(GLuint index, const GLushort * v) {if (GLeeInit()) glVertexAttrib4usv(index, v);} GLEEPFNGLVERTEXATTRIB4USVPROC GLeeFuncPtr_glVertexAttrib4usv=GLee_Lazy_glVertexAttrib4usv; #endif #ifndef GLEE_C_DEFINED_glVertexAttribPointer #define GLEE_C_DEFINED_glVertexAttribPointer void __stdcall GLee_Lazy_glVertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid * pointer) {if (GLeeInit()) glVertexAttribPointer(index, size, type, normalized, stride, pointer);} GLEEPFNGLVERTEXATTRIBPOINTERPROC GLeeFuncPtr_glVertexAttribPointer=GLee_Lazy_glVertexAttribPointer; #endif #endif /* GL_VERSION_2_1 */ #ifdef __GLEE_GL_VERSION_2_1 #ifndef GLEE_C_DEFINED_glUniformMatrix2x3fv #define GLEE_C_DEFINED_glUniformMatrix2x3fv void __stdcall GLee_Lazy_glUniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glUniformMatrix2x3fv(location, count, transpose, value);} GLEEPFNGLUNIFORMMATRIX2X3FVPROC GLeeFuncPtr_glUniformMatrix2x3fv=GLee_Lazy_glUniformMatrix2x3fv; #endif #ifndef GLEE_C_DEFINED_glUniformMatrix3x2fv #define GLEE_C_DEFINED_glUniformMatrix3x2fv void __stdcall GLee_Lazy_glUniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glUniformMatrix3x2fv(location, count, transpose, value);} GLEEPFNGLUNIFORMMATRIX3X2FVPROC GLeeFuncPtr_glUniformMatrix3x2fv=GLee_Lazy_glUniformMatrix3x2fv; #endif #ifndef GLEE_C_DEFINED_glUniformMatrix2x4fv #define GLEE_C_DEFINED_glUniformMatrix2x4fv void __stdcall GLee_Lazy_glUniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glUniformMatrix2x4fv(location, count, transpose, value);} GLEEPFNGLUNIFORMMATRIX2X4FVPROC GLeeFuncPtr_glUniformMatrix2x4fv=GLee_Lazy_glUniformMatrix2x4fv; #endif #ifndef GLEE_C_DEFINED_glUniformMatrix4x2fv #define GLEE_C_DEFINED_glUniformMatrix4x2fv void __stdcall GLee_Lazy_glUniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glUniformMatrix4x2fv(location, count, transpose, value);} GLEEPFNGLUNIFORMMATRIX4X2FVPROC GLeeFuncPtr_glUniformMatrix4x2fv=GLee_Lazy_glUniformMatrix4x2fv; #endif #ifndef GLEE_C_DEFINED_glUniformMatrix3x4fv #define GLEE_C_DEFINED_glUniformMatrix3x4fv void __stdcall GLee_Lazy_glUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glUniformMatrix3x4fv(location, count, transpose, value);} GLEEPFNGLUNIFORMMATRIX3X4FVPROC GLeeFuncPtr_glUniformMatrix3x4fv=GLee_Lazy_glUniformMatrix3x4fv; #endif #ifndef GLEE_C_DEFINED_glUniformMatrix4x3fv #define GLEE_C_DEFINED_glUniformMatrix4x3fv void __stdcall GLee_Lazy_glUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glUniformMatrix4x3fv(location, count, transpose, value);} GLEEPFNGLUNIFORMMATRIX4X3FVPROC GLeeFuncPtr_glUniformMatrix4x3fv=GLee_Lazy_glUniformMatrix4x3fv; #endif #endif /* GL_VERSION_3_0 */ #ifdef __GLEE_GL_VERSION_3_0 #ifndef GLEE_C_DEFINED_glColorMaski #define GLEE_C_DEFINED_glColorMaski void __stdcall GLee_Lazy_glColorMaski(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a) {if (GLeeInit()) glColorMaski(index, r, g, b, a);} GLEEPFNGLCOLORMASKIPROC GLeeFuncPtr_glColorMaski=GLee_Lazy_glColorMaski; #endif #ifndef GLEE_C_DEFINED_glGetBooleani_v #define GLEE_C_DEFINED_glGetBooleani_v void __stdcall GLee_Lazy_glGetBooleani_v(GLenum target, GLuint index, GLboolean * data) {if (GLeeInit()) glGetBooleani_v(target, index, data);} GLEEPFNGLGETBOOLEANI_VPROC GLeeFuncPtr_glGetBooleani_v=GLee_Lazy_glGetBooleani_v; #endif #ifndef GLEE_C_DEFINED_glGetIntegeri_v #define GLEE_C_DEFINED_glGetIntegeri_v void __stdcall GLee_Lazy_glGetIntegeri_v(GLenum target, GLuint index, GLint * data) {if (GLeeInit()) glGetIntegeri_v(target, index, data);} GLEEPFNGLGETINTEGERI_VPROC GLeeFuncPtr_glGetIntegeri_v=GLee_Lazy_glGetIntegeri_v; #endif #ifndef GLEE_C_DEFINED_glEnablei #define GLEE_C_DEFINED_glEnablei void __stdcall GLee_Lazy_glEnablei(GLenum target, GLuint index) {if (GLeeInit()) glEnablei(target, index);} GLEEPFNGLENABLEIPROC GLeeFuncPtr_glEnablei=GLee_Lazy_glEnablei; #endif #ifndef GLEE_C_DEFINED_glDisablei #define GLEE_C_DEFINED_glDisablei void __stdcall GLee_Lazy_glDisablei(GLenum target, GLuint index) {if (GLeeInit()) glDisablei(target, index);} GLEEPFNGLDISABLEIPROC GLeeFuncPtr_glDisablei=GLee_Lazy_glDisablei; #endif #ifndef GLEE_C_DEFINED_glIsEnabledi #define GLEE_C_DEFINED_glIsEnabledi GLboolean __stdcall GLee_Lazy_glIsEnabledi(GLenum target, GLuint index) {if (GLeeInit()) return glIsEnabledi(target, index); return (GLboolean)0;} GLEEPFNGLISENABLEDIPROC GLeeFuncPtr_glIsEnabledi=GLee_Lazy_glIsEnabledi; #endif #ifndef GLEE_C_DEFINED_glBeginTransformFeedback #define GLEE_C_DEFINED_glBeginTransformFeedback void __stdcall GLee_Lazy_glBeginTransformFeedback(GLenum primitiveMode) {if (GLeeInit()) glBeginTransformFeedback(primitiveMode);} GLEEPFNGLBEGINTRANSFORMFEEDBACKPROC GLeeFuncPtr_glBeginTransformFeedback=GLee_Lazy_glBeginTransformFeedback; #endif #ifndef GLEE_C_DEFINED_glEndTransformFeedback #define GLEE_C_DEFINED_glEndTransformFeedback void __stdcall GLee_Lazy_glEndTransformFeedback(void) {if (GLeeInit()) glEndTransformFeedback();} GLEEPFNGLENDTRANSFORMFEEDBACKPROC GLeeFuncPtr_glEndTransformFeedback=GLee_Lazy_glEndTransformFeedback; #endif #ifndef GLEE_C_DEFINED_glBindBufferRange #define GLEE_C_DEFINED_glBindBufferRange void __stdcall GLee_Lazy_glBindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) {if (GLeeInit()) glBindBufferRange(target, index, buffer, offset, size);} GLEEPFNGLBINDBUFFERRANGEPROC GLeeFuncPtr_glBindBufferRange=GLee_Lazy_glBindBufferRange; #endif #ifndef GLEE_C_DEFINED_glBindBufferBase #define GLEE_C_DEFINED_glBindBufferBase void __stdcall GLee_Lazy_glBindBufferBase(GLenum target, GLuint index, GLuint buffer) {if (GLeeInit()) glBindBufferBase(target, index, buffer);} GLEEPFNGLBINDBUFFERBASEPROC GLeeFuncPtr_glBindBufferBase=GLee_Lazy_glBindBufferBase; #endif #ifndef GLEE_C_DEFINED_glTransformFeedbackVaryings #define GLEE_C_DEFINED_glTransformFeedbackVaryings void __stdcall GLee_Lazy_glTransformFeedbackVaryings(GLuint program, GLsizei count, const GLchar* const * varyings, GLenum bufferMode) {if (GLeeInit()) glTransformFeedbackVaryings(program, count, varyings, bufferMode);} GLEEPFNGLTRANSFORMFEEDBACKVARYINGSPROC GLeeFuncPtr_glTransformFeedbackVaryings=GLee_Lazy_glTransformFeedbackVaryings; #endif #ifndef GLEE_C_DEFINED_glGetTransformFeedbackVarying #define GLEE_C_DEFINED_glGetTransformFeedbackVarying void __stdcall GLee_Lazy_glGetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name) {if (GLeeInit()) glGetTransformFeedbackVarying(program, index, bufSize, length, size, type, name);} GLEEPFNGLGETTRANSFORMFEEDBACKVARYINGPROC GLeeFuncPtr_glGetTransformFeedbackVarying=GLee_Lazy_glGetTransformFeedbackVarying; #endif #ifndef GLEE_C_DEFINED_glClampColor #define GLEE_C_DEFINED_glClampColor void __stdcall GLee_Lazy_glClampColor(GLenum target, GLenum clamp) {if (GLeeInit()) glClampColor(target, clamp);} GLEEPFNGLCLAMPCOLORPROC GLeeFuncPtr_glClampColor=GLee_Lazy_glClampColor; #endif #ifndef GLEE_C_DEFINED_glBeginConditionalRender #define GLEE_C_DEFINED_glBeginConditionalRender void __stdcall GLee_Lazy_glBeginConditionalRender(GLuint id, GLenum mode) {if (GLeeInit()) glBeginConditionalRender(id, mode);} GLEEPFNGLBEGINCONDITIONALRENDERPROC GLeeFuncPtr_glBeginConditionalRender=GLee_Lazy_glBeginConditionalRender; #endif #ifndef GLEE_C_DEFINED_glEndConditionalRender #define GLEE_C_DEFINED_glEndConditionalRender void __stdcall GLee_Lazy_glEndConditionalRender(void) {if (GLeeInit()) glEndConditionalRender();} GLEEPFNGLENDCONDITIONALRENDERPROC GLeeFuncPtr_glEndConditionalRender=GLee_Lazy_glEndConditionalRender; #endif #ifndef GLEE_C_DEFINED_glVertexAttribIPointer #define GLEE_C_DEFINED_glVertexAttribIPointer void __stdcall GLee_Lazy_glVertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer) {if (GLeeInit()) glVertexAttribIPointer(index, size, type, stride, pointer);} GLEEPFNGLVERTEXATTRIBIPOINTERPROC GLeeFuncPtr_glVertexAttribIPointer=GLee_Lazy_glVertexAttribIPointer; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribIiv #define GLEE_C_DEFINED_glGetVertexAttribIiv void __stdcall GLee_Lazy_glGetVertexAttribIiv(GLuint index, GLenum pname, GLint * params) {if (GLeeInit()) glGetVertexAttribIiv(index, pname, params);} GLEEPFNGLGETVERTEXATTRIBIIVPROC GLeeFuncPtr_glGetVertexAttribIiv=GLee_Lazy_glGetVertexAttribIiv; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribIuiv #define GLEE_C_DEFINED_glGetVertexAttribIuiv void __stdcall GLee_Lazy_glGetVertexAttribIuiv(GLuint index, GLenum pname, GLuint * params) {if (GLeeInit()) glGetVertexAttribIuiv(index, pname, params);} GLEEPFNGLGETVERTEXATTRIBIUIVPROC GLeeFuncPtr_glGetVertexAttribIuiv=GLee_Lazy_glGetVertexAttribIuiv; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI1i #define GLEE_C_DEFINED_glVertexAttribI1i void __stdcall GLee_Lazy_glVertexAttribI1i(GLuint index, GLint x) {if (GLeeInit()) glVertexAttribI1i(index, x);} GLEEPFNGLVERTEXATTRIBI1IPROC GLeeFuncPtr_glVertexAttribI1i=GLee_Lazy_glVertexAttribI1i; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI2i #define GLEE_C_DEFINED_glVertexAttribI2i void __stdcall GLee_Lazy_glVertexAttribI2i(GLuint index, GLint x, GLint y) {if (GLeeInit()) glVertexAttribI2i(index, x, y);} GLEEPFNGLVERTEXATTRIBI2IPROC GLeeFuncPtr_glVertexAttribI2i=GLee_Lazy_glVertexAttribI2i; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI3i #define GLEE_C_DEFINED_glVertexAttribI3i void __stdcall GLee_Lazy_glVertexAttribI3i(GLuint index, GLint x, GLint y, GLint z) {if (GLeeInit()) glVertexAttribI3i(index, x, y, z);} GLEEPFNGLVERTEXATTRIBI3IPROC GLeeFuncPtr_glVertexAttribI3i=GLee_Lazy_glVertexAttribI3i; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI4i #define GLEE_C_DEFINED_glVertexAttribI4i void __stdcall GLee_Lazy_glVertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w) {if (GLeeInit()) glVertexAttribI4i(index, x, y, z, w);} GLEEPFNGLVERTEXATTRIBI4IPROC GLeeFuncPtr_glVertexAttribI4i=GLee_Lazy_glVertexAttribI4i; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI1ui #define GLEE_C_DEFINED_glVertexAttribI1ui void __stdcall GLee_Lazy_glVertexAttribI1ui(GLuint index, GLuint x) {if (GLeeInit()) glVertexAttribI1ui(index, x);} GLEEPFNGLVERTEXATTRIBI1UIPROC GLeeFuncPtr_glVertexAttribI1ui=GLee_Lazy_glVertexAttribI1ui; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI2ui #define GLEE_C_DEFINED_glVertexAttribI2ui void __stdcall GLee_Lazy_glVertexAttribI2ui(GLuint index, GLuint x, GLuint y) {if (GLeeInit()) glVertexAttribI2ui(index, x, y);} GLEEPFNGLVERTEXATTRIBI2UIPROC GLeeFuncPtr_glVertexAttribI2ui=GLee_Lazy_glVertexAttribI2ui; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI3ui #define GLEE_C_DEFINED_glVertexAttribI3ui void __stdcall GLee_Lazy_glVertexAttribI3ui(GLuint index, GLuint x, GLuint y, GLuint z) {if (GLeeInit()) glVertexAttribI3ui(index, x, y, z);} GLEEPFNGLVERTEXATTRIBI3UIPROC GLeeFuncPtr_glVertexAttribI3ui=GLee_Lazy_glVertexAttribI3ui; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI4ui #define GLEE_C_DEFINED_glVertexAttribI4ui void __stdcall GLee_Lazy_glVertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) {if (GLeeInit()) glVertexAttribI4ui(index, x, y, z, w);} GLEEPFNGLVERTEXATTRIBI4UIPROC GLeeFuncPtr_glVertexAttribI4ui=GLee_Lazy_glVertexAttribI4ui; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI1iv #define GLEE_C_DEFINED_glVertexAttribI1iv void __stdcall GLee_Lazy_glVertexAttribI1iv(GLuint index, const GLint * v) {if (GLeeInit()) glVertexAttribI1iv(index, v);} GLEEPFNGLVERTEXATTRIBI1IVPROC GLeeFuncPtr_glVertexAttribI1iv=GLee_Lazy_glVertexAttribI1iv; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI2iv #define GLEE_C_DEFINED_glVertexAttribI2iv void __stdcall GLee_Lazy_glVertexAttribI2iv(GLuint index, const GLint * v) {if (GLeeInit()) glVertexAttribI2iv(index, v);} GLEEPFNGLVERTEXATTRIBI2IVPROC GLeeFuncPtr_glVertexAttribI2iv=GLee_Lazy_glVertexAttribI2iv; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI3iv #define GLEE_C_DEFINED_glVertexAttribI3iv void __stdcall GLee_Lazy_glVertexAttribI3iv(GLuint index, const GLint * v) {if (GLeeInit()) glVertexAttribI3iv(index, v);} GLEEPFNGLVERTEXATTRIBI3IVPROC GLeeFuncPtr_glVertexAttribI3iv=GLee_Lazy_glVertexAttribI3iv; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI4iv #define GLEE_C_DEFINED_glVertexAttribI4iv void __stdcall GLee_Lazy_glVertexAttribI4iv(GLuint index, const GLint * v) {if (GLeeInit()) glVertexAttribI4iv(index, v);} GLEEPFNGLVERTEXATTRIBI4IVPROC GLeeFuncPtr_glVertexAttribI4iv=GLee_Lazy_glVertexAttribI4iv; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI1uiv #define GLEE_C_DEFINED_glVertexAttribI1uiv void __stdcall GLee_Lazy_glVertexAttribI1uiv(GLuint index, const GLuint * v) {if (GLeeInit()) glVertexAttribI1uiv(index, v);} GLEEPFNGLVERTEXATTRIBI1UIVPROC GLeeFuncPtr_glVertexAttribI1uiv=GLee_Lazy_glVertexAttribI1uiv; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI2uiv #define GLEE_C_DEFINED_glVertexAttribI2uiv void __stdcall GLee_Lazy_glVertexAttribI2uiv(GLuint index, const GLuint * v) {if (GLeeInit()) glVertexAttribI2uiv(index, v);} GLEEPFNGLVERTEXATTRIBI2UIVPROC GLeeFuncPtr_glVertexAttribI2uiv=GLee_Lazy_glVertexAttribI2uiv; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI3uiv #define GLEE_C_DEFINED_glVertexAttribI3uiv void __stdcall GLee_Lazy_glVertexAttribI3uiv(GLuint index, const GLuint * v) {if (GLeeInit()) glVertexAttribI3uiv(index, v);} GLEEPFNGLVERTEXATTRIBI3UIVPROC GLeeFuncPtr_glVertexAttribI3uiv=GLee_Lazy_glVertexAttribI3uiv; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI4uiv #define GLEE_C_DEFINED_glVertexAttribI4uiv void __stdcall GLee_Lazy_glVertexAttribI4uiv(GLuint index, const GLuint * v) {if (GLeeInit()) glVertexAttribI4uiv(index, v);} GLEEPFNGLVERTEXATTRIBI4UIVPROC GLeeFuncPtr_glVertexAttribI4uiv=GLee_Lazy_glVertexAttribI4uiv; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI4bv #define GLEE_C_DEFINED_glVertexAttribI4bv void __stdcall GLee_Lazy_glVertexAttribI4bv(GLuint index, const GLbyte * v) {if (GLeeInit()) glVertexAttribI4bv(index, v);} GLEEPFNGLVERTEXATTRIBI4BVPROC GLeeFuncPtr_glVertexAttribI4bv=GLee_Lazy_glVertexAttribI4bv; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI4sv #define GLEE_C_DEFINED_glVertexAttribI4sv void __stdcall GLee_Lazy_glVertexAttribI4sv(GLuint index, const GLshort * v) {if (GLeeInit()) glVertexAttribI4sv(index, v);} GLEEPFNGLVERTEXATTRIBI4SVPROC GLeeFuncPtr_glVertexAttribI4sv=GLee_Lazy_glVertexAttribI4sv; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI4ubv #define GLEE_C_DEFINED_glVertexAttribI4ubv void __stdcall GLee_Lazy_glVertexAttribI4ubv(GLuint index, const GLubyte * v) {if (GLeeInit()) glVertexAttribI4ubv(index, v);} GLEEPFNGLVERTEXATTRIBI4UBVPROC GLeeFuncPtr_glVertexAttribI4ubv=GLee_Lazy_glVertexAttribI4ubv; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI4usv #define GLEE_C_DEFINED_glVertexAttribI4usv void __stdcall GLee_Lazy_glVertexAttribI4usv(GLuint index, const GLushort * v) {if (GLeeInit()) glVertexAttribI4usv(index, v);} GLEEPFNGLVERTEXATTRIBI4USVPROC GLeeFuncPtr_glVertexAttribI4usv=GLee_Lazy_glVertexAttribI4usv; #endif #ifndef GLEE_C_DEFINED_glGetUniformuiv #define GLEE_C_DEFINED_glGetUniformuiv void __stdcall GLee_Lazy_glGetUniformuiv(GLuint program, GLint location, GLuint * params) {if (GLeeInit()) glGetUniformuiv(program, location, params);} GLEEPFNGLGETUNIFORMUIVPROC GLeeFuncPtr_glGetUniformuiv=GLee_Lazy_glGetUniformuiv; #endif #ifndef GLEE_C_DEFINED_glBindFragDataLocation #define GLEE_C_DEFINED_glBindFragDataLocation void __stdcall GLee_Lazy_glBindFragDataLocation(GLuint program, GLuint color, const GLchar * name) {if (GLeeInit()) glBindFragDataLocation(program, color, name);} GLEEPFNGLBINDFRAGDATALOCATIONPROC GLeeFuncPtr_glBindFragDataLocation=GLee_Lazy_glBindFragDataLocation; #endif #ifndef GLEE_C_DEFINED_glGetFragDataLocation #define GLEE_C_DEFINED_glGetFragDataLocation GLint __stdcall GLee_Lazy_glGetFragDataLocation(GLuint program, const GLchar * name) {if (GLeeInit()) return glGetFragDataLocation(program, name); return (GLint)0;} GLEEPFNGLGETFRAGDATALOCATIONPROC GLeeFuncPtr_glGetFragDataLocation=GLee_Lazy_glGetFragDataLocation; #endif #ifndef GLEE_C_DEFINED_glUniform1ui #define GLEE_C_DEFINED_glUniform1ui void __stdcall GLee_Lazy_glUniform1ui(GLint location, GLuint v0) {if (GLeeInit()) glUniform1ui(location, v0);} GLEEPFNGLUNIFORM1UIPROC GLeeFuncPtr_glUniform1ui=GLee_Lazy_glUniform1ui; #endif #ifndef GLEE_C_DEFINED_glUniform2ui #define GLEE_C_DEFINED_glUniform2ui void __stdcall GLee_Lazy_glUniform2ui(GLint location, GLuint v0, GLuint v1) {if (GLeeInit()) glUniform2ui(location, v0, v1);} GLEEPFNGLUNIFORM2UIPROC GLeeFuncPtr_glUniform2ui=GLee_Lazy_glUniform2ui; #endif #ifndef GLEE_C_DEFINED_glUniform3ui #define GLEE_C_DEFINED_glUniform3ui void __stdcall GLee_Lazy_glUniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2) {if (GLeeInit()) glUniform3ui(location, v0, v1, v2);} GLEEPFNGLUNIFORM3UIPROC GLeeFuncPtr_glUniform3ui=GLee_Lazy_glUniform3ui; #endif #ifndef GLEE_C_DEFINED_glUniform4ui #define GLEE_C_DEFINED_glUniform4ui void __stdcall GLee_Lazy_glUniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) {if (GLeeInit()) glUniform4ui(location, v0, v1, v2, v3);} GLEEPFNGLUNIFORM4UIPROC GLeeFuncPtr_glUniform4ui=GLee_Lazy_glUniform4ui; #endif #ifndef GLEE_C_DEFINED_glUniform1uiv #define GLEE_C_DEFINED_glUniform1uiv void __stdcall GLee_Lazy_glUniform1uiv(GLint location, GLsizei count, const GLuint * value) {if (GLeeInit()) glUniform1uiv(location, count, value);} GLEEPFNGLUNIFORM1UIVPROC GLeeFuncPtr_glUniform1uiv=GLee_Lazy_glUniform1uiv; #endif #ifndef GLEE_C_DEFINED_glUniform2uiv #define GLEE_C_DEFINED_glUniform2uiv void __stdcall GLee_Lazy_glUniform2uiv(GLint location, GLsizei count, const GLuint * value) {if (GLeeInit()) glUniform2uiv(location, count, value);} GLEEPFNGLUNIFORM2UIVPROC GLeeFuncPtr_glUniform2uiv=GLee_Lazy_glUniform2uiv; #endif #ifndef GLEE_C_DEFINED_glUniform3uiv #define GLEE_C_DEFINED_glUniform3uiv void __stdcall GLee_Lazy_glUniform3uiv(GLint location, GLsizei count, const GLuint * value) {if (GLeeInit()) glUniform3uiv(location, count, value);} GLEEPFNGLUNIFORM3UIVPROC GLeeFuncPtr_glUniform3uiv=GLee_Lazy_glUniform3uiv; #endif #ifndef GLEE_C_DEFINED_glUniform4uiv #define GLEE_C_DEFINED_glUniform4uiv void __stdcall GLee_Lazy_glUniform4uiv(GLint location, GLsizei count, const GLuint * value) {if (GLeeInit()) glUniform4uiv(location, count, value);} GLEEPFNGLUNIFORM4UIVPROC GLeeFuncPtr_glUniform4uiv=GLee_Lazy_glUniform4uiv; #endif #ifndef GLEE_C_DEFINED_glTexParameterIiv #define GLEE_C_DEFINED_glTexParameterIiv void __stdcall GLee_Lazy_glTexParameterIiv(GLenum target, GLenum pname, const GLint * params) {if (GLeeInit()) glTexParameterIiv(target, pname, params);} GLEEPFNGLTEXPARAMETERIIVPROC GLeeFuncPtr_glTexParameterIiv=GLee_Lazy_glTexParameterIiv; #endif #ifndef GLEE_C_DEFINED_glTexParameterIuiv #define GLEE_C_DEFINED_glTexParameterIuiv void __stdcall GLee_Lazy_glTexParameterIuiv(GLenum target, GLenum pname, const GLuint * params) {if (GLeeInit()) glTexParameterIuiv(target, pname, params);} GLEEPFNGLTEXPARAMETERIUIVPROC GLeeFuncPtr_glTexParameterIuiv=GLee_Lazy_glTexParameterIuiv; #endif #ifndef GLEE_C_DEFINED_glGetTexParameterIiv #define GLEE_C_DEFINED_glGetTexParameterIiv void __stdcall GLee_Lazy_glGetTexParameterIiv(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetTexParameterIiv(target, pname, params);} GLEEPFNGLGETTEXPARAMETERIIVPROC GLeeFuncPtr_glGetTexParameterIiv=GLee_Lazy_glGetTexParameterIiv; #endif #ifndef GLEE_C_DEFINED_glGetTexParameterIuiv #define GLEE_C_DEFINED_glGetTexParameterIuiv void __stdcall GLee_Lazy_glGetTexParameterIuiv(GLenum target, GLenum pname, GLuint * params) {if (GLeeInit()) glGetTexParameterIuiv(target, pname, params);} GLEEPFNGLGETTEXPARAMETERIUIVPROC GLeeFuncPtr_glGetTexParameterIuiv=GLee_Lazy_glGetTexParameterIuiv; #endif #ifndef GLEE_C_DEFINED_glClearBufferiv #define GLEE_C_DEFINED_glClearBufferiv void __stdcall GLee_Lazy_glClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint * value) {if (GLeeInit()) glClearBufferiv(buffer, drawbuffer, value);} GLEEPFNGLCLEARBUFFERIVPROC GLeeFuncPtr_glClearBufferiv=GLee_Lazy_glClearBufferiv; #endif #ifndef GLEE_C_DEFINED_glClearBufferuiv #define GLEE_C_DEFINED_glClearBufferuiv void __stdcall GLee_Lazy_glClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint * value) {if (GLeeInit()) glClearBufferuiv(buffer, drawbuffer, value);} GLEEPFNGLCLEARBUFFERUIVPROC GLeeFuncPtr_glClearBufferuiv=GLee_Lazy_glClearBufferuiv; #endif #ifndef GLEE_C_DEFINED_glClearBufferfv #define GLEE_C_DEFINED_glClearBufferfv void __stdcall GLee_Lazy_glClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat * value) {if (GLeeInit()) glClearBufferfv(buffer, drawbuffer, value);} GLEEPFNGLCLEARBUFFERFVPROC GLeeFuncPtr_glClearBufferfv=GLee_Lazy_glClearBufferfv; #endif #ifndef GLEE_C_DEFINED_glClearBufferfi #define GLEE_C_DEFINED_glClearBufferfi void __stdcall GLee_Lazy_glClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) {if (GLeeInit()) glClearBufferfi(buffer, drawbuffer, depth, stencil);} GLEEPFNGLCLEARBUFFERFIPROC GLeeFuncPtr_glClearBufferfi=GLee_Lazy_glClearBufferfi; #endif #ifndef GLEE_C_DEFINED_glGetStringi #define GLEE_C_DEFINED_glGetStringi const GLubyte * __stdcall GLee_Lazy_glGetStringi(GLenum name, GLuint index) {if (GLeeInit()) return glGetStringi(name, index); return (const GLubyte *)0;} GLEEPFNGLGETSTRINGIPROC GLeeFuncPtr_glGetStringi=GLee_Lazy_glGetStringi; #endif #endif /* GL_VERSION_3_1 */ #ifdef __GLEE_GL_VERSION_3_1 #ifndef GLEE_C_DEFINED_glDrawArraysInstanced #define GLEE_C_DEFINED_glDrawArraysInstanced void __stdcall GLee_Lazy_glDrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instancecount) {if (GLeeInit()) glDrawArraysInstanced(mode, first, count, instancecount);} GLEEPFNGLDRAWARRAYSINSTANCEDPROC GLeeFuncPtr_glDrawArraysInstanced=GLee_Lazy_glDrawArraysInstanced; #endif #ifndef GLEE_C_DEFINED_glDrawElementsInstanced #define GLEE_C_DEFINED_glDrawElementsInstanced void __stdcall GLee_Lazy_glDrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLsizei instancecount) {if (GLeeInit()) glDrawElementsInstanced(mode, count, type, indices, instancecount);} GLEEPFNGLDRAWELEMENTSINSTANCEDPROC GLeeFuncPtr_glDrawElementsInstanced=GLee_Lazy_glDrawElementsInstanced; #endif #ifndef GLEE_C_DEFINED_glTexBuffer #define GLEE_C_DEFINED_glTexBuffer void __stdcall GLee_Lazy_glTexBuffer(GLenum target, GLenum internalformat, GLuint buffer) {if (GLeeInit()) glTexBuffer(target, internalformat, buffer);} GLEEPFNGLTEXBUFFERPROC GLeeFuncPtr_glTexBuffer=GLee_Lazy_glTexBuffer; #endif #ifndef GLEE_C_DEFINED_glPrimitiveRestartIndex #define GLEE_C_DEFINED_glPrimitiveRestartIndex void __stdcall GLee_Lazy_glPrimitiveRestartIndex(GLuint index) {if (GLeeInit()) glPrimitiveRestartIndex(index);} GLEEPFNGLPRIMITIVERESTARTINDEXPROC GLeeFuncPtr_glPrimitiveRestartIndex=GLee_Lazy_glPrimitiveRestartIndex; #endif #endif /* GL_VERSION_3_2 */ #ifdef __GLEE_GL_VERSION_3_2 #ifndef GLEE_C_DEFINED_glGetInteger64i_v #define GLEE_C_DEFINED_glGetInteger64i_v void __stdcall GLee_Lazy_glGetInteger64i_v(GLenum target, GLuint index, GLint64 * data) {if (GLeeInit()) glGetInteger64i_v(target, index, data);} GLEEPFNGLGETINTEGER64I_VPROC GLeeFuncPtr_glGetInteger64i_v=GLee_Lazy_glGetInteger64i_v; #endif #ifndef GLEE_C_DEFINED_glGetBufferParameteri64v #define GLEE_C_DEFINED_glGetBufferParameteri64v void __stdcall GLee_Lazy_glGetBufferParameteri64v(GLenum target, GLenum pname, GLint64 * params) {if (GLeeInit()) glGetBufferParameteri64v(target, pname, params);} GLEEPFNGLGETBUFFERPARAMETERI64VPROC GLeeFuncPtr_glGetBufferParameteri64v=GLee_Lazy_glGetBufferParameteri64v; #endif #ifndef GLEE_C_DEFINED_glFramebufferTexture #define GLEE_C_DEFINED_glFramebufferTexture void __stdcall GLee_Lazy_glFramebufferTexture(GLenum target, GLenum attachment, GLuint texture, GLint level) {if (GLeeInit()) glFramebufferTexture(target, attachment, texture, level);} GLEEPFNGLFRAMEBUFFERTEXTUREPROC GLeeFuncPtr_glFramebufferTexture=GLee_Lazy_glFramebufferTexture; #endif #endif /* GL_VERSION_3_3 */ #ifdef __GLEE_GL_VERSION_3_3 #ifndef GLEE_C_DEFINED_glVertexAttribDivisor #define GLEE_C_DEFINED_glVertexAttribDivisor void __stdcall GLee_Lazy_glVertexAttribDivisor(GLuint index, GLuint divisor) {if (GLeeInit()) glVertexAttribDivisor(index, divisor);} GLEEPFNGLVERTEXATTRIBDIVISORPROC GLeeFuncPtr_glVertexAttribDivisor=GLee_Lazy_glVertexAttribDivisor; #endif #endif /* GL_VERSION_4_0 */ #ifdef __GLEE_GL_VERSION_4_0 #ifndef GLEE_C_DEFINED_glMinSampleShading #define GLEE_C_DEFINED_glMinSampleShading void __stdcall GLee_Lazy_glMinSampleShading(GLfloat value) {if (GLeeInit()) glMinSampleShading(value);} GLEEPFNGLMINSAMPLESHADINGPROC GLeeFuncPtr_glMinSampleShading=GLee_Lazy_glMinSampleShading; #endif #ifndef GLEE_C_DEFINED_glBlendEquationi #define GLEE_C_DEFINED_glBlendEquationi void __stdcall GLee_Lazy_glBlendEquationi(GLuint buf, GLenum mode) {if (GLeeInit()) glBlendEquationi(buf, mode);} GLEEPFNGLBLENDEQUATIONIPROC GLeeFuncPtr_glBlendEquationi=GLee_Lazy_glBlendEquationi; #endif #ifndef GLEE_C_DEFINED_glBlendEquationSeparatei #define GLEE_C_DEFINED_glBlendEquationSeparatei void __stdcall GLee_Lazy_glBlendEquationSeparatei(GLuint buf, GLenum modeRGB, GLenum modeAlpha) {if (GLeeInit()) glBlendEquationSeparatei(buf, modeRGB, modeAlpha);} GLEEPFNGLBLENDEQUATIONSEPARATEIPROC GLeeFuncPtr_glBlendEquationSeparatei=GLee_Lazy_glBlendEquationSeparatei; #endif #ifndef GLEE_C_DEFINED_glBlendFunci #define GLEE_C_DEFINED_glBlendFunci void __stdcall GLee_Lazy_glBlendFunci(GLuint buf, GLenum src, GLenum dst) {if (GLeeInit()) glBlendFunci(buf, src, dst);} GLEEPFNGLBLENDFUNCIPROC GLeeFuncPtr_glBlendFunci=GLee_Lazy_glBlendFunci; #endif #ifndef GLEE_C_DEFINED_glBlendFuncSeparatei #define GLEE_C_DEFINED_glBlendFuncSeparatei void __stdcall GLee_Lazy_glBlendFuncSeparatei(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) {if (GLeeInit()) glBlendFuncSeparatei(buf, srcRGB, dstRGB, srcAlpha, dstAlpha);} GLEEPFNGLBLENDFUNCSEPARATEIPROC GLeeFuncPtr_glBlendFuncSeparatei=GLee_Lazy_glBlendFuncSeparatei; #endif #endif /* GL_VERSION_4_1 */ #ifdef __GLEE_GL_VERSION_4_1 #endif /* GL_VERSION_4_2 */ #ifdef __GLEE_GL_VERSION_4_2 #endif /* GL_VERSION_4_3 */ #ifdef __GLEE_GL_VERSION_4_3 #endif /* GL_ARB_multitexture */ #ifdef __GLEE_GL_ARB_multitexture #ifndef GLEE_C_DEFINED_glActiveTextureARB #define GLEE_C_DEFINED_glActiveTextureARB void __stdcall GLee_Lazy_glActiveTextureARB(GLenum texture) {if (GLeeInit()) glActiveTextureARB(texture);} GLEEPFNGLACTIVETEXTUREARBPROC GLeeFuncPtr_glActiveTextureARB=GLee_Lazy_glActiveTextureARB; #endif #ifndef GLEE_C_DEFINED_glClientActiveTextureARB #define GLEE_C_DEFINED_glClientActiveTextureARB void __stdcall GLee_Lazy_glClientActiveTextureARB(GLenum texture) {if (GLeeInit()) glClientActiveTextureARB(texture);} GLEEPFNGLCLIENTACTIVETEXTUREARBPROC GLeeFuncPtr_glClientActiveTextureARB=GLee_Lazy_glClientActiveTextureARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1dARB #define GLEE_C_DEFINED_glMultiTexCoord1dARB void __stdcall GLee_Lazy_glMultiTexCoord1dARB(GLenum target, GLdouble s) {if (GLeeInit()) glMultiTexCoord1dARB(target, s);} GLEEPFNGLMULTITEXCOORD1DARBPROC GLeeFuncPtr_glMultiTexCoord1dARB=GLee_Lazy_glMultiTexCoord1dARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1dvARB #define GLEE_C_DEFINED_glMultiTexCoord1dvARB void __stdcall GLee_Lazy_glMultiTexCoord1dvARB(GLenum target, const GLdouble * v) {if (GLeeInit()) glMultiTexCoord1dvARB(target, v);} GLEEPFNGLMULTITEXCOORD1DVARBPROC GLeeFuncPtr_glMultiTexCoord1dvARB=GLee_Lazy_glMultiTexCoord1dvARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1fARB #define GLEE_C_DEFINED_glMultiTexCoord1fARB void __stdcall GLee_Lazy_glMultiTexCoord1fARB(GLenum target, GLfloat s) {if (GLeeInit()) glMultiTexCoord1fARB(target, s);} GLEEPFNGLMULTITEXCOORD1FARBPROC GLeeFuncPtr_glMultiTexCoord1fARB=GLee_Lazy_glMultiTexCoord1fARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1fvARB #define GLEE_C_DEFINED_glMultiTexCoord1fvARB void __stdcall GLee_Lazy_glMultiTexCoord1fvARB(GLenum target, const GLfloat * v) {if (GLeeInit()) glMultiTexCoord1fvARB(target, v);} GLEEPFNGLMULTITEXCOORD1FVARBPROC GLeeFuncPtr_glMultiTexCoord1fvARB=GLee_Lazy_glMultiTexCoord1fvARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1iARB #define GLEE_C_DEFINED_glMultiTexCoord1iARB void __stdcall GLee_Lazy_glMultiTexCoord1iARB(GLenum target, GLint s) {if (GLeeInit()) glMultiTexCoord1iARB(target, s);} GLEEPFNGLMULTITEXCOORD1IARBPROC GLeeFuncPtr_glMultiTexCoord1iARB=GLee_Lazy_glMultiTexCoord1iARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1ivARB #define GLEE_C_DEFINED_glMultiTexCoord1ivARB void __stdcall GLee_Lazy_glMultiTexCoord1ivARB(GLenum target, const GLint * v) {if (GLeeInit()) glMultiTexCoord1ivARB(target, v);} GLEEPFNGLMULTITEXCOORD1IVARBPROC GLeeFuncPtr_glMultiTexCoord1ivARB=GLee_Lazy_glMultiTexCoord1ivARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1sARB #define GLEE_C_DEFINED_glMultiTexCoord1sARB void __stdcall GLee_Lazy_glMultiTexCoord1sARB(GLenum target, GLshort s) {if (GLeeInit()) glMultiTexCoord1sARB(target, s);} GLEEPFNGLMULTITEXCOORD1SARBPROC GLeeFuncPtr_glMultiTexCoord1sARB=GLee_Lazy_glMultiTexCoord1sARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1svARB #define GLEE_C_DEFINED_glMultiTexCoord1svARB void __stdcall GLee_Lazy_glMultiTexCoord1svARB(GLenum target, const GLshort * v) {if (GLeeInit()) glMultiTexCoord1svARB(target, v);} GLEEPFNGLMULTITEXCOORD1SVARBPROC GLeeFuncPtr_glMultiTexCoord1svARB=GLee_Lazy_glMultiTexCoord1svARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2dARB #define GLEE_C_DEFINED_glMultiTexCoord2dARB void __stdcall GLee_Lazy_glMultiTexCoord2dARB(GLenum target, GLdouble s, GLdouble t) {if (GLeeInit()) glMultiTexCoord2dARB(target, s, t);} GLEEPFNGLMULTITEXCOORD2DARBPROC GLeeFuncPtr_glMultiTexCoord2dARB=GLee_Lazy_glMultiTexCoord2dARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2dvARB #define GLEE_C_DEFINED_glMultiTexCoord2dvARB void __stdcall GLee_Lazy_glMultiTexCoord2dvARB(GLenum target, const GLdouble * v) {if (GLeeInit()) glMultiTexCoord2dvARB(target, v);} GLEEPFNGLMULTITEXCOORD2DVARBPROC GLeeFuncPtr_glMultiTexCoord2dvARB=GLee_Lazy_glMultiTexCoord2dvARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2fARB #define GLEE_C_DEFINED_glMultiTexCoord2fARB void __stdcall GLee_Lazy_glMultiTexCoord2fARB(GLenum target, GLfloat s, GLfloat t) {if (GLeeInit()) glMultiTexCoord2fARB(target, s, t);} GLEEPFNGLMULTITEXCOORD2FARBPROC GLeeFuncPtr_glMultiTexCoord2fARB=GLee_Lazy_glMultiTexCoord2fARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2fvARB #define GLEE_C_DEFINED_glMultiTexCoord2fvARB void __stdcall GLee_Lazy_glMultiTexCoord2fvARB(GLenum target, const GLfloat * v) {if (GLeeInit()) glMultiTexCoord2fvARB(target, v);} GLEEPFNGLMULTITEXCOORD2FVARBPROC GLeeFuncPtr_glMultiTexCoord2fvARB=GLee_Lazy_glMultiTexCoord2fvARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2iARB #define GLEE_C_DEFINED_glMultiTexCoord2iARB void __stdcall GLee_Lazy_glMultiTexCoord2iARB(GLenum target, GLint s, GLint t) {if (GLeeInit()) glMultiTexCoord2iARB(target, s, t);} GLEEPFNGLMULTITEXCOORD2IARBPROC GLeeFuncPtr_glMultiTexCoord2iARB=GLee_Lazy_glMultiTexCoord2iARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2ivARB #define GLEE_C_DEFINED_glMultiTexCoord2ivARB void __stdcall GLee_Lazy_glMultiTexCoord2ivARB(GLenum target, const GLint * v) {if (GLeeInit()) glMultiTexCoord2ivARB(target, v);} GLEEPFNGLMULTITEXCOORD2IVARBPROC GLeeFuncPtr_glMultiTexCoord2ivARB=GLee_Lazy_glMultiTexCoord2ivARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2sARB #define GLEE_C_DEFINED_glMultiTexCoord2sARB void __stdcall GLee_Lazy_glMultiTexCoord2sARB(GLenum target, GLshort s, GLshort t) {if (GLeeInit()) glMultiTexCoord2sARB(target, s, t);} GLEEPFNGLMULTITEXCOORD2SARBPROC GLeeFuncPtr_glMultiTexCoord2sARB=GLee_Lazy_glMultiTexCoord2sARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2svARB #define GLEE_C_DEFINED_glMultiTexCoord2svARB void __stdcall GLee_Lazy_glMultiTexCoord2svARB(GLenum target, const GLshort * v) {if (GLeeInit()) glMultiTexCoord2svARB(target, v);} GLEEPFNGLMULTITEXCOORD2SVARBPROC GLeeFuncPtr_glMultiTexCoord2svARB=GLee_Lazy_glMultiTexCoord2svARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3dARB #define GLEE_C_DEFINED_glMultiTexCoord3dARB void __stdcall GLee_Lazy_glMultiTexCoord3dARB(GLenum target, GLdouble s, GLdouble t, GLdouble r) {if (GLeeInit()) glMultiTexCoord3dARB(target, s, t, r);} GLEEPFNGLMULTITEXCOORD3DARBPROC GLeeFuncPtr_glMultiTexCoord3dARB=GLee_Lazy_glMultiTexCoord3dARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3dvARB #define GLEE_C_DEFINED_glMultiTexCoord3dvARB void __stdcall GLee_Lazy_glMultiTexCoord3dvARB(GLenum target, const GLdouble * v) {if (GLeeInit()) glMultiTexCoord3dvARB(target, v);} GLEEPFNGLMULTITEXCOORD3DVARBPROC GLeeFuncPtr_glMultiTexCoord3dvARB=GLee_Lazy_glMultiTexCoord3dvARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3fARB #define GLEE_C_DEFINED_glMultiTexCoord3fARB void __stdcall GLee_Lazy_glMultiTexCoord3fARB(GLenum target, GLfloat s, GLfloat t, GLfloat r) {if (GLeeInit()) glMultiTexCoord3fARB(target, s, t, r);} GLEEPFNGLMULTITEXCOORD3FARBPROC GLeeFuncPtr_glMultiTexCoord3fARB=GLee_Lazy_glMultiTexCoord3fARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3fvARB #define GLEE_C_DEFINED_glMultiTexCoord3fvARB void __stdcall GLee_Lazy_glMultiTexCoord3fvARB(GLenum target, const GLfloat * v) {if (GLeeInit()) glMultiTexCoord3fvARB(target, v);} GLEEPFNGLMULTITEXCOORD3FVARBPROC GLeeFuncPtr_glMultiTexCoord3fvARB=GLee_Lazy_glMultiTexCoord3fvARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3iARB #define GLEE_C_DEFINED_glMultiTexCoord3iARB void __stdcall GLee_Lazy_glMultiTexCoord3iARB(GLenum target, GLint s, GLint t, GLint r) {if (GLeeInit()) glMultiTexCoord3iARB(target, s, t, r);} GLEEPFNGLMULTITEXCOORD3IARBPROC GLeeFuncPtr_glMultiTexCoord3iARB=GLee_Lazy_glMultiTexCoord3iARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3ivARB #define GLEE_C_DEFINED_glMultiTexCoord3ivARB void __stdcall GLee_Lazy_glMultiTexCoord3ivARB(GLenum target, const GLint * v) {if (GLeeInit()) glMultiTexCoord3ivARB(target, v);} GLEEPFNGLMULTITEXCOORD3IVARBPROC GLeeFuncPtr_glMultiTexCoord3ivARB=GLee_Lazy_glMultiTexCoord3ivARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3sARB #define GLEE_C_DEFINED_glMultiTexCoord3sARB void __stdcall GLee_Lazy_glMultiTexCoord3sARB(GLenum target, GLshort s, GLshort t, GLshort r) {if (GLeeInit()) glMultiTexCoord3sARB(target, s, t, r);} GLEEPFNGLMULTITEXCOORD3SARBPROC GLeeFuncPtr_glMultiTexCoord3sARB=GLee_Lazy_glMultiTexCoord3sARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3svARB #define GLEE_C_DEFINED_glMultiTexCoord3svARB void __stdcall GLee_Lazy_glMultiTexCoord3svARB(GLenum target, const GLshort * v) {if (GLeeInit()) glMultiTexCoord3svARB(target, v);} GLEEPFNGLMULTITEXCOORD3SVARBPROC GLeeFuncPtr_glMultiTexCoord3svARB=GLee_Lazy_glMultiTexCoord3svARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4dARB #define GLEE_C_DEFINED_glMultiTexCoord4dARB void __stdcall GLee_Lazy_glMultiTexCoord4dARB(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q) {if (GLeeInit()) glMultiTexCoord4dARB(target, s, t, r, q);} GLEEPFNGLMULTITEXCOORD4DARBPROC GLeeFuncPtr_glMultiTexCoord4dARB=GLee_Lazy_glMultiTexCoord4dARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4dvARB #define GLEE_C_DEFINED_glMultiTexCoord4dvARB void __stdcall GLee_Lazy_glMultiTexCoord4dvARB(GLenum target, const GLdouble * v) {if (GLeeInit()) glMultiTexCoord4dvARB(target, v);} GLEEPFNGLMULTITEXCOORD4DVARBPROC GLeeFuncPtr_glMultiTexCoord4dvARB=GLee_Lazy_glMultiTexCoord4dvARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4fARB #define GLEE_C_DEFINED_glMultiTexCoord4fARB void __stdcall GLee_Lazy_glMultiTexCoord4fARB(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) {if (GLeeInit()) glMultiTexCoord4fARB(target, s, t, r, q);} GLEEPFNGLMULTITEXCOORD4FARBPROC GLeeFuncPtr_glMultiTexCoord4fARB=GLee_Lazy_glMultiTexCoord4fARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4fvARB #define GLEE_C_DEFINED_glMultiTexCoord4fvARB void __stdcall GLee_Lazy_glMultiTexCoord4fvARB(GLenum target, const GLfloat * v) {if (GLeeInit()) glMultiTexCoord4fvARB(target, v);} GLEEPFNGLMULTITEXCOORD4FVARBPROC GLeeFuncPtr_glMultiTexCoord4fvARB=GLee_Lazy_glMultiTexCoord4fvARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4iARB #define GLEE_C_DEFINED_glMultiTexCoord4iARB void __stdcall GLee_Lazy_glMultiTexCoord4iARB(GLenum target, GLint s, GLint t, GLint r, GLint q) {if (GLeeInit()) glMultiTexCoord4iARB(target, s, t, r, q);} GLEEPFNGLMULTITEXCOORD4IARBPROC GLeeFuncPtr_glMultiTexCoord4iARB=GLee_Lazy_glMultiTexCoord4iARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4ivARB #define GLEE_C_DEFINED_glMultiTexCoord4ivARB void __stdcall GLee_Lazy_glMultiTexCoord4ivARB(GLenum target, const GLint * v) {if (GLeeInit()) glMultiTexCoord4ivARB(target, v);} GLEEPFNGLMULTITEXCOORD4IVARBPROC GLeeFuncPtr_glMultiTexCoord4ivARB=GLee_Lazy_glMultiTexCoord4ivARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4sARB #define GLEE_C_DEFINED_glMultiTexCoord4sARB void __stdcall GLee_Lazy_glMultiTexCoord4sARB(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q) {if (GLeeInit()) glMultiTexCoord4sARB(target, s, t, r, q);} GLEEPFNGLMULTITEXCOORD4SARBPROC GLeeFuncPtr_glMultiTexCoord4sARB=GLee_Lazy_glMultiTexCoord4sARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4svARB #define GLEE_C_DEFINED_glMultiTexCoord4svARB void __stdcall GLee_Lazy_glMultiTexCoord4svARB(GLenum target, const GLshort * v) {if (GLeeInit()) glMultiTexCoord4svARB(target, v);} GLEEPFNGLMULTITEXCOORD4SVARBPROC GLeeFuncPtr_glMultiTexCoord4svARB=GLee_Lazy_glMultiTexCoord4svARB; #endif #endif /* GL_ARB_transpose_matrix */ #ifdef __GLEE_GL_ARB_transpose_matrix #ifndef GLEE_C_DEFINED_glLoadTransposeMatrixfARB #define GLEE_C_DEFINED_glLoadTransposeMatrixfARB void __stdcall GLee_Lazy_glLoadTransposeMatrixfARB(const GLfloat * m) {if (GLeeInit()) glLoadTransposeMatrixfARB(m);} GLEEPFNGLLOADTRANSPOSEMATRIXFARBPROC GLeeFuncPtr_glLoadTransposeMatrixfARB=GLee_Lazy_glLoadTransposeMatrixfARB; #endif #ifndef GLEE_C_DEFINED_glLoadTransposeMatrixdARB #define GLEE_C_DEFINED_glLoadTransposeMatrixdARB void __stdcall GLee_Lazy_glLoadTransposeMatrixdARB(const GLdouble * m) {if (GLeeInit()) glLoadTransposeMatrixdARB(m);} GLEEPFNGLLOADTRANSPOSEMATRIXDARBPROC GLeeFuncPtr_glLoadTransposeMatrixdARB=GLee_Lazy_glLoadTransposeMatrixdARB; #endif #ifndef GLEE_C_DEFINED_glMultTransposeMatrixfARB #define GLEE_C_DEFINED_glMultTransposeMatrixfARB void __stdcall GLee_Lazy_glMultTransposeMatrixfARB(const GLfloat * m) {if (GLeeInit()) glMultTransposeMatrixfARB(m);} GLEEPFNGLMULTTRANSPOSEMATRIXFARBPROC GLeeFuncPtr_glMultTransposeMatrixfARB=GLee_Lazy_glMultTransposeMatrixfARB; #endif #ifndef GLEE_C_DEFINED_glMultTransposeMatrixdARB #define GLEE_C_DEFINED_glMultTransposeMatrixdARB void __stdcall GLee_Lazy_glMultTransposeMatrixdARB(const GLdouble * m) {if (GLeeInit()) glMultTransposeMatrixdARB(m);} GLEEPFNGLMULTTRANSPOSEMATRIXDARBPROC GLeeFuncPtr_glMultTransposeMatrixdARB=GLee_Lazy_glMultTransposeMatrixdARB; #endif #endif /* GL_ARB_multisample */ #ifdef __GLEE_GL_ARB_multisample #ifndef GLEE_C_DEFINED_glSampleCoverageARB #define GLEE_C_DEFINED_glSampleCoverageARB void __stdcall GLee_Lazy_glSampleCoverageARB(GLfloat value, GLboolean invert) {if (GLeeInit()) glSampleCoverageARB(value, invert);} GLEEPFNGLSAMPLECOVERAGEARBPROC GLeeFuncPtr_glSampleCoverageARB=GLee_Lazy_glSampleCoverageARB; #endif #endif /* GL_ARB_texture_env_add */ #ifdef __GLEE_GL_ARB_texture_env_add #endif /* GL_ARB_texture_cube_map */ #ifdef __GLEE_GL_ARB_texture_cube_map #endif /* GL_ARB_texture_compression */ #ifdef __GLEE_GL_ARB_texture_compression #ifndef GLEE_C_DEFINED_glCompressedTexImage3DARB #define GLEE_C_DEFINED_glCompressedTexImage3DARB void __stdcall GLee_Lazy_glCompressedTexImage3DARB(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * data) {if (GLeeInit()) glCompressedTexImage3DARB(target, level, internalformat, width, height, depth, border, imageSize, data);} GLEEPFNGLCOMPRESSEDTEXIMAGE3DARBPROC GLeeFuncPtr_glCompressedTexImage3DARB=GLee_Lazy_glCompressedTexImage3DARB; #endif #ifndef GLEE_C_DEFINED_glCompressedTexImage2DARB #define GLEE_C_DEFINED_glCompressedTexImage2DARB void __stdcall GLee_Lazy_glCompressedTexImage2DARB(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data) {if (GLeeInit()) glCompressedTexImage2DARB(target, level, internalformat, width, height, border, imageSize, data);} GLEEPFNGLCOMPRESSEDTEXIMAGE2DARBPROC GLeeFuncPtr_glCompressedTexImage2DARB=GLee_Lazy_glCompressedTexImage2DARB; #endif #ifndef GLEE_C_DEFINED_glCompressedTexImage1DARB #define GLEE_C_DEFINED_glCompressedTexImage1DARB void __stdcall GLee_Lazy_glCompressedTexImage1DARB(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid * data) {if (GLeeInit()) glCompressedTexImage1DARB(target, level, internalformat, width, border, imageSize, data);} GLEEPFNGLCOMPRESSEDTEXIMAGE1DARBPROC GLeeFuncPtr_glCompressedTexImage1DARB=GLee_Lazy_glCompressedTexImage1DARB; #endif #ifndef GLEE_C_DEFINED_glCompressedTexSubImage3DARB #define GLEE_C_DEFINED_glCompressedTexSubImage3DARB void __stdcall GLee_Lazy_glCompressedTexSubImage3DARB(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * data) {if (GLeeInit()) glCompressedTexSubImage3DARB(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);} GLEEPFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC GLeeFuncPtr_glCompressedTexSubImage3DARB=GLee_Lazy_glCompressedTexSubImage3DARB; #endif #ifndef GLEE_C_DEFINED_glCompressedTexSubImage2DARB #define GLEE_C_DEFINED_glCompressedTexSubImage2DARB void __stdcall GLee_Lazy_glCompressedTexSubImage2DARB(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data) {if (GLeeInit()) glCompressedTexSubImage2DARB(target, level, xoffset, yoffset, width, height, format, imageSize, data);} GLEEPFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC GLeeFuncPtr_glCompressedTexSubImage2DARB=GLee_Lazy_glCompressedTexSubImage2DARB; #endif #ifndef GLEE_C_DEFINED_glCompressedTexSubImage1DARB #define GLEE_C_DEFINED_glCompressedTexSubImage1DARB void __stdcall GLee_Lazy_glCompressedTexSubImage1DARB(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * data) {if (GLeeInit()) glCompressedTexSubImage1DARB(target, level, xoffset, width, format, imageSize, data);} GLEEPFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC GLeeFuncPtr_glCompressedTexSubImage1DARB=GLee_Lazy_glCompressedTexSubImage1DARB; #endif #ifndef GLEE_C_DEFINED_glGetCompressedTexImageARB #define GLEE_C_DEFINED_glGetCompressedTexImageARB void __stdcall GLee_Lazy_glGetCompressedTexImageARB(GLenum target, GLint level, GLvoid * img) {if (GLeeInit()) glGetCompressedTexImageARB(target, level, img);} GLEEPFNGLGETCOMPRESSEDTEXIMAGEARBPROC GLeeFuncPtr_glGetCompressedTexImageARB=GLee_Lazy_glGetCompressedTexImageARB; #endif #endif /* GL_ARB_texture_border_clamp */ #ifdef __GLEE_GL_ARB_texture_border_clamp #endif /* GL_ARB_point_parameters */ #ifdef __GLEE_GL_ARB_point_parameters #ifndef GLEE_C_DEFINED_glPointParameterfARB #define GLEE_C_DEFINED_glPointParameterfARB void __stdcall GLee_Lazy_glPointParameterfARB(GLenum pname, GLfloat param) {if (GLeeInit()) glPointParameterfARB(pname, param);} GLEEPFNGLPOINTPARAMETERFARBPROC GLeeFuncPtr_glPointParameterfARB=GLee_Lazy_glPointParameterfARB; #endif #ifndef GLEE_C_DEFINED_glPointParameterfvARB #define GLEE_C_DEFINED_glPointParameterfvARB void __stdcall GLee_Lazy_glPointParameterfvARB(GLenum pname, const GLfloat * params) {if (GLeeInit()) glPointParameterfvARB(pname, params);} GLEEPFNGLPOINTPARAMETERFVARBPROC GLeeFuncPtr_glPointParameterfvARB=GLee_Lazy_glPointParameterfvARB; #endif #endif /* GL_ARB_vertex_blend */ #ifdef __GLEE_GL_ARB_vertex_blend #ifndef GLEE_C_DEFINED_glWeightbvARB #define GLEE_C_DEFINED_glWeightbvARB void __stdcall GLee_Lazy_glWeightbvARB(GLint size, const GLbyte * weights) {if (GLeeInit()) glWeightbvARB(size, weights);} GLEEPFNGLWEIGHTBVARBPROC GLeeFuncPtr_glWeightbvARB=GLee_Lazy_glWeightbvARB; #endif #ifndef GLEE_C_DEFINED_glWeightsvARB #define GLEE_C_DEFINED_glWeightsvARB void __stdcall GLee_Lazy_glWeightsvARB(GLint size, const GLshort * weights) {if (GLeeInit()) glWeightsvARB(size, weights);} GLEEPFNGLWEIGHTSVARBPROC GLeeFuncPtr_glWeightsvARB=GLee_Lazy_glWeightsvARB; #endif #ifndef GLEE_C_DEFINED_glWeightivARB #define GLEE_C_DEFINED_glWeightivARB void __stdcall GLee_Lazy_glWeightivARB(GLint size, const GLint * weights) {if (GLeeInit()) glWeightivARB(size, weights);} GLEEPFNGLWEIGHTIVARBPROC GLeeFuncPtr_glWeightivARB=GLee_Lazy_glWeightivARB; #endif #ifndef GLEE_C_DEFINED_glWeightfvARB #define GLEE_C_DEFINED_glWeightfvARB void __stdcall GLee_Lazy_glWeightfvARB(GLint size, const GLfloat * weights) {if (GLeeInit()) glWeightfvARB(size, weights);} GLEEPFNGLWEIGHTFVARBPROC GLeeFuncPtr_glWeightfvARB=GLee_Lazy_glWeightfvARB; #endif #ifndef GLEE_C_DEFINED_glWeightdvARB #define GLEE_C_DEFINED_glWeightdvARB void __stdcall GLee_Lazy_glWeightdvARB(GLint size, const GLdouble * weights) {if (GLeeInit()) glWeightdvARB(size, weights);} GLEEPFNGLWEIGHTDVARBPROC GLeeFuncPtr_glWeightdvARB=GLee_Lazy_glWeightdvARB; #endif #ifndef GLEE_C_DEFINED_glWeightubvARB #define GLEE_C_DEFINED_glWeightubvARB void __stdcall GLee_Lazy_glWeightubvARB(GLint size, const GLubyte * weights) {if (GLeeInit()) glWeightubvARB(size, weights);} GLEEPFNGLWEIGHTUBVARBPROC GLeeFuncPtr_glWeightubvARB=GLee_Lazy_glWeightubvARB; #endif #ifndef GLEE_C_DEFINED_glWeightusvARB #define GLEE_C_DEFINED_glWeightusvARB void __stdcall GLee_Lazy_glWeightusvARB(GLint size, const GLushort * weights) {if (GLeeInit()) glWeightusvARB(size, weights);} GLEEPFNGLWEIGHTUSVARBPROC GLeeFuncPtr_glWeightusvARB=GLee_Lazy_glWeightusvARB; #endif #ifndef GLEE_C_DEFINED_glWeightuivARB #define GLEE_C_DEFINED_glWeightuivARB void __stdcall GLee_Lazy_glWeightuivARB(GLint size, const GLuint * weights) {if (GLeeInit()) glWeightuivARB(size, weights);} GLEEPFNGLWEIGHTUIVARBPROC GLeeFuncPtr_glWeightuivARB=GLee_Lazy_glWeightuivARB; #endif #ifndef GLEE_C_DEFINED_glWeightPointerARB #define GLEE_C_DEFINED_glWeightPointerARB void __stdcall GLee_Lazy_glWeightPointerARB(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer) {if (GLeeInit()) glWeightPointerARB(size, type, stride, pointer);} GLEEPFNGLWEIGHTPOINTERARBPROC GLeeFuncPtr_glWeightPointerARB=GLee_Lazy_glWeightPointerARB; #endif #ifndef GLEE_C_DEFINED_glVertexBlendARB #define GLEE_C_DEFINED_glVertexBlendARB void __stdcall GLee_Lazy_glVertexBlendARB(GLint count) {if (GLeeInit()) glVertexBlendARB(count);} GLEEPFNGLVERTEXBLENDARBPROC GLeeFuncPtr_glVertexBlendARB=GLee_Lazy_glVertexBlendARB; #endif #endif /* GL_ARB_matrix_palette */ #ifdef __GLEE_GL_ARB_matrix_palette #ifndef GLEE_C_DEFINED_glCurrentPaletteMatrixARB #define GLEE_C_DEFINED_glCurrentPaletteMatrixARB void __stdcall GLee_Lazy_glCurrentPaletteMatrixARB(GLint index) {if (GLeeInit()) glCurrentPaletteMatrixARB(index);} GLEEPFNGLCURRENTPALETTEMATRIXARBPROC GLeeFuncPtr_glCurrentPaletteMatrixARB=GLee_Lazy_glCurrentPaletteMatrixARB; #endif #ifndef GLEE_C_DEFINED_glMatrixIndexubvARB #define GLEE_C_DEFINED_glMatrixIndexubvARB void __stdcall GLee_Lazy_glMatrixIndexubvARB(GLint size, const GLubyte * indices) {if (GLeeInit()) glMatrixIndexubvARB(size, indices);} GLEEPFNGLMATRIXINDEXUBVARBPROC GLeeFuncPtr_glMatrixIndexubvARB=GLee_Lazy_glMatrixIndexubvARB; #endif #ifndef GLEE_C_DEFINED_glMatrixIndexusvARB #define GLEE_C_DEFINED_glMatrixIndexusvARB void __stdcall GLee_Lazy_glMatrixIndexusvARB(GLint size, const GLushort * indices) {if (GLeeInit()) glMatrixIndexusvARB(size, indices);} GLEEPFNGLMATRIXINDEXUSVARBPROC GLeeFuncPtr_glMatrixIndexusvARB=GLee_Lazy_glMatrixIndexusvARB; #endif #ifndef GLEE_C_DEFINED_glMatrixIndexuivARB #define GLEE_C_DEFINED_glMatrixIndexuivARB void __stdcall GLee_Lazy_glMatrixIndexuivARB(GLint size, const GLuint * indices) {if (GLeeInit()) glMatrixIndexuivARB(size, indices);} GLEEPFNGLMATRIXINDEXUIVARBPROC GLeeFuncPtr_glMatrixIndexuivARB=GLee_Lazy_glMatrixIndexuivARB; #endif #ifndef GLEE_C_DEFINED_glMatrixIndexPointerARB #define GLEE_C_DEFINED_glMatrixIndexPointerARB void __stdcall GLee_Lazy_glMatrixIndexPointerARB(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer) {if (GLeeInit()) glMatrixIndexPointerARB(size, type, stride, pointer);} GLEEPFNGLMATRIXINDEXPOINTERARBPROC GLeeFuncPtr_glMatrixIndexPointerARB=GLee_Lazy_glMatrixIndexPointerARB; #endif #endif /* GL_ARB_texture_env_combine */ #ifdef __GLEE_GL_ARB_texture_env_combine #endif /* GL_ARB_texture_env_crossbar */ #ifdef __GLEE_GL_ARB_texture_env_crossbar #endif /* GL_ARB_texture_env_dot3 */ #ifdef __GLEE_GL_ARB_texture_env_dot3 #endif /* GL_ARB_texture_mirrored_repeat */ #ifdef __GLEE_GL_ARB_texture_mirrored_repeat #endif /* GL_ARB_depth_texture */ #ifdef __GLEE_GL_ARB_depth_texture #endif /* GL_ARB_shadow */ #ifdef __GLEE_GL_ARB_shadow #endif /* GL_ARB_shadow_ambient */ #ifdef __GLEE_GL_ARB_shadow_ambient #endif /* GL_ARB_window_pos */ #ifdef __GLEE_GL_ARB_window_pos #ifndef GLEE_C_DEFINED_glWindowPos2dARB #define GLEE_C_DEFINED_glWindowPos2dARB void __stdcall GLee_Lazy_glWindowPos2dARB(GLdouble x, GLdouble y) {if (GLeeInit()) glWindowPos2dARB(x, y);} GLEEPFNGLWINDOWPOS2DARBPROC GLeeFuncPtr_glWindowPos2dARB=GLee_Lazy_glWindowPos2dARB; #endif #ifndef GLEE_C_DEFINED_glWindowPos2dvARB #define GLEE_C_DEFINED_glWindowPos2dvARB void __stdcall GLee_Lazy_glWindowPos2dvARB(const GLdouble * v) {if (GLeeInit()) glWindowPos2dvARB(v);} GLEEPFNGLWINDOWPOS2DVARBPROC GLeeFuncPtr_glWindowPos2dvARB=GLee_Lazy_glWindowPos2dvARB; #endif #ifndef GLEE_C_DEFINED_glWindowPos2fARB #define GLEE_C_DEFINED_glWindowPos2fARB void __stdcall GLee_Lazy_glWindowPos2fARB(GLfloat x, GLfloat y) {if (GLeeInit()) glWindowPos2fARB(x, y);} GLEEPFNGLWINDOWPOS2FARBPROC GLeeFuncPtr_glWindowPos2fARB=GLee_Lazy_glWindowPos2fARB; #endif #ifndef GLEE_C_DEFINED_glWindowPos2fvARB #define GLEE_C_DEFINED_glWindowPos2fvARB void __stdcall GLee_Lazy_glWindowPos2fvARB(const GLfloat * v) {if (GLeeInit()) glWindowPos2fvARB(v);} GLEEPFNGLWINDOWPOS2FVARBPROC GLeeFuncPtr_glWindowPos2fvARB=GLee_Lazy_glWindowPos2fvARB; #endif #ifndef GLEE_C_DEFINED_glWindowPos2iARB #define GLEE_C_DEFINED_glWindowPos2iARB void __stdcall GLee_Lazy_glWindowPos2iARB(GLint x, GLint y) {if (GLeeInit()) glWindowPos2iARB(x, y);} GLEEPFNGLWINDOWPOS2IARBPROC GLeeFuncPtr_glWindowPos2iARB=GLee_Lazy_glWindowPos2iARB; #endif #ifndef GLEE_C_DEFINED_glWindowPos2ivARB #define GLEE_C_DEFINED_glWindowPos2ivARB void __stdcall GLee_Lazy_glWindowPos2ivARB(const GLint * v) {if (GLeeInit()) glWindowPos2ivARB(v);} GLEEPFNGLWINDOWPOS2IVARBPROC GLeeFuncPtr_glWindowPos2ivARB=GLee_Lazy_glWindowPos2ivARB; #endif #ifndef GLEE_C_DEFINED_glWindowPos2sARB #define GLEE_C_DEFINED_glWindowPos2sARB void __stdcall GLee_Lazy_glWindowPos2sARB(GLshort x, GLshort y) {if (GLeeInit()) glWindowPos2sARB(x, y);} GLEEPFNGLWINDOWPOS2SARBPROC GLeeFuncPtr_glWindowPos2sARB=GLee_Lazy_glWindowPos2sARB; #endif #ifndef GLEE_C_DEFINED_glWindowPos2svARB #define GLEE_C_DEFINED_glWindowPos2svARB void __stdcall GLee_Lazy_glWindowPos2svARB(const GLshort * v) {if (GLeeInit()) glWindowPos2svARB(v);} GLEEPFNGLWINDOWPOS2SVARBPROC GLeeFuncPtr_glWindowPos2svARB=GLee_Lazy_glWindowPos2svARB; #endif #ifndef GLEE_C_DEFINED_glWindowPos3dARB #define GLEE_C_DEFINED_glWindowPos3dARB void __stdcall GLee_Lazy_glWindowPos3dARB(GLdouble x, GLdouble y, GLdouble z) {if (GLeeInit()) glWindowPos3dARB(x, y, z);} GLEEPFNGLWINDOWPOS3DARBPROC GLeeFuncPtr_glWindowPos3dARB=GLee_Lazy_glWindowPos3dARB; #endif #ifndef GLEE_C_DEFINED_glWindowPos3dvARB #define GLEE_C_DEFINED_glWindowPos3dvARB void __stdcall GLee_Lazy_glWindowPos3dvARB(const GLdouble * v) {if (GLeeInit()) glWindowPos3dvARB(v);} GLEEPFNGLWINDOWPOS3DVARBPROC GLeeFuncPtr_glWindowPos3dvARB=GLee_Lazy_glWindowPos3dvARB; #endif #ifndef GLEE_C_DEFINED_glWindowPos3fARB #define GLEE_C_DEFINED_glWindowPos3fARB void __stdcall GLee_Lazy_glWindowPos3fARB(GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glWindowPos3fARB(x, y, z);} GLEEPFNGLWINDOWPOS3FARBPROC GLeeFuncPtr_glWindowPos3fARB=GLee_Lazy_glWindowPos3fARB; #endif #ifndef GLEE_C_DEFINED_glWindowPos3fvARB #define GLEE_C_DEFINED_glWindowPos3fvARB void __stdcall GLee_Lazy_glWindowPos3fvARB(const GLfloat * v) {if (GLeeInit()) glWindowPos3fvARB(v);} GLEEPFNGLWINDOWPOS3FVARBPROC GLeeFuncPtr_glWindowPos3fvARB=GLee_Lazy_glWindowPos3fvARB; #endif #ifndef GLEE_C_DEFINED_glWindowPos3iARB #define GLEE_C_DEFINED_glWindowPos3iARB void __stdcall GLee_Lazy_glWindowPos3iARB(GLint x, GLint y, GLint z) {if (GLeeInit()) glWindowPos3iARB(x, y, z);} GLEEPFNGLWINDOWPOS3IARBPROC GLeeFuncPtr_glWindowPos3iARB=GLee_Lazy_glWindowPos3iARB; #endif #ifndef GLEE_C_DEFINED_glWindowPos3ivARB #define GLEE_C_DEFINED_glWindowPos3ivARB void __stdcall GLee_Lazy_glWindowPos3ivARB(const GLint * v) {if (GLeeInit()) glWindowPos3ivARB(v);} GLEEPFNGLWINDOWPOS3IVARBPROC GLeeFuncPtr_glWindowPos3ivARB=GLee_Lazy_glWindowPos3ivARB; #endif #ifndef GLEE_C_DEFINED_glWindowPos3sARB #define GLEE_C_DEFINED_glWindowPos3sARB void __stdcall GLee_Lazy_glWindowPos3sARB(GLshort x, GLshort y, GLshort z) {if (GLeeInit()) glWindowPos3sARB(x, y, z);} GLEEPFNGLWINDOWPOS3SARBPROC GLeeFuncPtr_glWindowPos3sARB=GLee_Lazy_glWindowPos3sARB; #endif #ifndef GLEE_C_DEFINED_glWindowPos3svARB #define GLEE_C_DEFINED_glWindowPos3svARB void __stdcall GLee_Lazy_glWindowPos3svARB(const GLshort * v) {if (GLeeInit()) glWindowPos3svARB(v);} GLEEPFNGLWINDOWPOS3SVARBPROC GLeeFuncPtr_glWindowPos3svARB=GLee_Lazy_glWindowPos3svARB; #endif #endif /* GL_ARB_vertex_program */ #ifdef __GLEE_GL_ARB_vertex_program #ifndef GLEE_C_DEFINED_glVertexAttrib1dARB #define GLEE_C_DEFINED_glVertexAttrib1dARB void __stdcall GLee_Lazy_glVertexAttrib1dARB(GLuint index, GLdouble x) {if (GLeeInit()) glVertexAttrib1dARB(index, x);} GLEEPFNGLVERTEXATTRIB1DARBPROC GLeeFuncPtr_glVertexAttrib1dARB=GLee_Lazy_glVertexAttrib1dARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1dvARB #define GLEE_C_DEFINED_glVertexAttrib1dvARB void __stdcall GLee_Lazy_glVertexAttrib1dvARB(GLuint index, const GLdouble * v) {if (GLeeInit()) glVertexAttrib1dvARB(index, v);} GLEEPFNGLVERTEXATTRIB1DVARBPROC GLeeFuncPtr_glVertexAttrib1dvARB=GLee_Lazy_glVertexAttrib1dvARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1fARB #define GLEE_C_DEFINED_glVertexAttrib1fARB void __stdcall GLee_Lazy_glVertexAttrib1fARB(GLuint index, GLfloat x) {if (GLeeInit()) glVertexAttrib1fARB(index, x);} GLEEPFNGLVERTEXATTRIB1FARBPROC GLeeFuncPtr_glVertexAttrib1fARB=GLee_Lazy_glVertexAttrib1fARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1fvARB #define GLEE_C_DEFINED_glVertexAttrib1fvARB void __stdcall GLee_Lazy_glVertexAttrib1fvARB(GLuint index, const GLfloat * v) {if (GLeeInit()) glVertexAttrib1fvARB(index, v);} GLEEPFNGLVERTEXATTRIB1FVARBPROC GLeeFuncPtr_glVertexAttrib1fvARB=GLee_Lazy_glVertexAttrib1fvARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1sARB #define GLEE_C_DEFINED_glVertexAttrib1sARB void __stdcall GLee_Lazy_glVertexAttrib1sARB(GLuint index, GLshort x) {if (GLeeInit()) glVertexAttrib1sARB(index, x);} GLEEPFNGLVERTEXATTRIB1SARBPROC GLeeFuncPtr_glVertexAttrib1sARB=GLee_Lazy_glVertexAttrib1sARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1svARB #define GLEE_C_DEFINED_glVertexAttrib1svARB void __stdcall GLee_Lazy_glVertexAttrib1svARB(GLuint index, const GLshort * v) {if (GLeeInit()) glVertexAttrib1svARB(index, v);} GLEEPFNGLVERTEXATTRIB1SVARBPROC GLeeFuncPtr_glVertexAttrib1svARB=GLee_Lazy_glVertexAttrib1svARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2dARB #define GLEE_C_DEFINED_glVertexAttrib2dARB void __stdcall GLee_Lazy_glVertexAttrib2dARB(GLuint index, GLdouble x, GLdouble y) {if (GLeeInit()) glVertexAttrib2dARB(index, x, y);} GLEEPFNGLVERTEXATTRIB2DARBPROC GLeeFuncPtr_glVertexAttrib2dARB=GLee_Lazy_glVertexAttrib2dARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2dvARB #define GLEE_C_DEFINED_glVertexAttrib2dvARB void __stdcall GLee_Lazy_glVertexAttrib2dvARB(GLuint index, const GLdouble * v) {if (GLeeInit()) glVertexAttrib2dvARB(index, v);} GLEEPFNGLVERTEXATTRIB2DVARBPROC GLeeFuncPtr_glVertexAttrib2dvARB=GLee_Lazy_glVertexAttrib2dvARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2fARB #define GLEE_C_DEFINED_glVertexAttrib2fARB void __stdcall GLee_Lazy_glVertexAttrib2fARB(GLuint index, GLfloat x, GLfloat y) {if (GLeeInit()) glVertexAttrib2fARB(index, x, y);} GLEEPFNGLVERTEXATTRIB2FARBPROC GLeeFuncPtr_glVertexAttrib2fARB=GLee_Lazy_glVertexAttrib2fARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2fvARB #define GLEE_C_DEFINED_glVertexAttrib2fvARB void __stdcall GLee_Lazy_glVertexAttrib2fvARB(GLuint index, const GLfloat * v) {if (GLeeInit()) glVertexAttrib2fvARB(index, v);} GLEEPFNGLVERTEXATTRIB2FVARBPROC GLeeFuncPtr_glVertexAttrib2fvARB=GLee_Lazy_glVertexAttrib2fvARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2sARB #define GLEE_C_DEFINED_glVertexAttrib2sARB void __stdcall GLee_Lazy_glVertexAttrib2sARB(GLuint index, GLshort x, GLshort y) {if (GLeeInit()) glVertexAttrib2sARB(index, x, y);} GLEEPFNGLVERTEXATTRIB2SARBPROC GLeeFuncPtr_glVertexAttrib2sARB=GLee_Lazy_glVertexAttrib2sARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2svARB #define GLEE_C_DEFINED_glVertexAttrib2svARB void __stdcall GLee_Lazy_glVertexAttrib2svARB(GLuint index, const GLshort * v) {if (GLeeInit()) glVertexAttrib2svARB(index, v);} GLEEPFNGLVERTEXATTRIB2SVARBPROC GLeeFuncPtr_glVertexAttrib2svARB=GLee_Lazy_glVertexAttrib2svARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3dARB #define GLEE_C_DEFINED_glVertexAttrib3dARB void __stdcall GLee_Lazy_glVertexAttrib3dARB(GLuint index, GLdouble x, GLdouble y, GLdouble z) {if (GLeeInit()) glVertexAttrib3dARB(index, x, y, z);} GLEEPFNGLVERTEXATTRIB3DARBPROC GLeeFuncPtr_glVertexAttrib3dARB=GLee_Lazy_glVertexAttrib3dARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3dvARB #define GLEE_C_DEFINED_glVertexAttrib3dvARB void __stdcall GLee_Lazy_glVertexAttrib3dvARB(GLuint index, const GLdouble * v) {if (GLeeInit()) glVertexAttrib3dvARB(index, v);} GLEEPFNGLVERTEXATTRIB3DVARBPROC GLeeFuncPtr_glVertexAttrib3dvARB=GLee_Lazy_glVertexAttrib3dvARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3fARB #define GLEE_C_DEFINED_glVertexAttrib3fARB void __stdcall GLee_Lazy_glVertexAttrib3fARB(GLuint index, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glVertexAttrib3fARB(index, x, y, z);} GLEEPFNGLVERTEXATTRIB3FARBPROC GLeeFuncPtr_glVertexAttrib3fARB=GLee_Lazy_glVertexAttrib3fARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3fvARB #define GLEE_C_DEFINED_glVertexAttrib3fvARB void __stdcall GLee_Lazy_glVertexAttrib3fvARB(GLuint index, const GLfloat * v) {if (GLeeInit()) glVertexAttrib3fvARB(index, v);} GLEEPFNGLVERTEXATTRIB3FVARBPROC GLeeFuncPtr_glVertexAttrib3fvARB=GLee_Lazy_glVertexAttrib3fvARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3sARB #define GLEE_C_DEFINED_glVertexAttrib3sARB void __stdcall GLee_Lazy_glVertexAttrib3sARB(GLuint index, GLshort x, GLshort y, GLshort z) {if (GLeeInit()) glVertexAttrib3sARB(index, x, y, z);} GLEEPFNGLVERTEXATTRIB3SARBPROC GLeeFuncPtr_glVertexAttrib3sARB=GLee_Lazy_glVertexAttrib3sARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3svARB #define GLEE_C_DEFINED_glVertexAttrib3svARB void __stdcall GLee_Lazy_glVertexAttrib3svARB(GLuint index, const GLshort * v) {if (GLeeInit()) glVertexAttrib3svARB(index, v);} GLEEPFNGLVERTEXATTRIB3SVARBPROC GLeeFuncPtr_glVertexAttrib3svARB=GLee_Lazy_glVertexAttrib3svARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4NbvARB #define GLEE_C_DEFINED_glVertexAttrib4NbvARB void __stdcall GLee_Lazy_glVertexAttrib4NbvARB(GLuint index, const GLbyte * v) {if (GLeeInit()) glVertexAttrib4NbvARB(index, v);} GLEEPFNGLVERTEXATTRIB4NBVARBPROC GLeeFuncPtr_glVertexAttrib4NbvARB=GLee_Lazy_glVertexAttrib4NbvARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4NivARB #define GLEE_C_DEFINED_glVertexAttrib4NivARB void __stdcall GLee_Lazy_glVertexAttrib4NivARB(GLuint index, const GLint * v) {if (GLeeInit()) glVertexAttrib4NivARB(index, v);} GLEEPFNGLVERTEXATTRIB4NIVARBPROC GLeeFuncPtr_glVertexAttrib4NivARB=GLee_Lazy_glVertexAttrib4NivARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4NsvARB #define GLEE_C_DEFINED_glVertexAttrib4NsvARB void __stdcall GLee_Lazy_glVertexAttrib4NsvARB(GLuint index, const GLshort * v) {if (GLeeInit()) glVertexAttrib4NsvARB(index, v);} GLEEPFNGLVERTEXATTRIB4NSVARBPROC GLeeFuncPtr_glVertexAttrib4NsvARB=GLee_Lazy_glVertexAttrib4NsvARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4NubARB #define GLEE_C_DEFINED_glVertexAttrib4NubARB void __stdcall GLee_Lazy_glVertexAttrib4NubARB(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w) {if (GLeeInit()) glVertexAttrib4NubARB(index, x, y, z, w);} GLEEPFNGLVERTEXATTRIB4NUBARBPROC GLeeFuncPtr_glVertexAttrib4NubARB=GLee_Lazy_glVertexAttrib4NubARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4NubvARB #define GLEE_C_DEFINED_glVertexAttrib4NubvARB void __stdcall GLee_Lazy_glVertexAttrib4NubvARB(GLuint index, const GLubyte * v) {if (GLeeInit()) glVertexAttrib4NubvARB(index, v);} GLEEPFNGLVERTEXATTRIB4NUBVARBPROC GLeeFuncPtr_glVertexAttrib4NubvARB=GLee_Lazy_glVertexAttrib4NubvARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4NuivARB #define GLEE_C_DEFINED_glVertexAttrib4NuivARB void __stdcall GLee_Lazy_glVertexAttrib4NuivARB(GLuint index, const GLuint * v) {if (GLeeInit()) glVertexAttrib4NuivARB(index, v);} GLEEPFNGLVERTEXATTRIB4NUIVARBPROC GLeeFuncPtr_glVertexAttrib4NuivARB=GLee_Lazy_glVertexAttrib4NuivARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4NusvARB #define GLEE_C_DEFINED_glVertexAttrib4NusvARB void __stdcall GLee_Lazy_glVertexAttrib4NusvARB(GLuint index, const GLushort * v) {if (GLeeInit()) glVertexAttrib4NusvARB(index, v);} GLEEPFNGLVERTEXATTRIB4NUSVARBPROC GLeeFuncPtr_glVertexAttrib4NusvARB=GLee_Lazy_glVertexAttrib4NusvARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4bvARB #define GLEE_C_DEFINED_glVertexAttrib4bvARB void __stdcall GLee_Lazy_glVertexAttrib4bvARB(GLuint index, const GLbyte * v) {if (GLeeInit()) glVertexAttrib4bvARB(index, v);} GLEEPFNGLVERTEXATTRIB4BVARBPROC GLeeFuncPtr_glVertexAttrib4bvARB=GLee_Lazy_glVertexAttrib4bvARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4dARB #define GLEE_C_DEFINED_glVertexAttrib4dARB void __stdcall GLee_Lazy_glVertexAttrib4dARB(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) {if (GLeeInit()) glVertexAttrib4dARB(index, x, y, z, w);} GLEEPFNGLVERTEXATTRIB4DARBPROC GLeeFuncPtr_glVertexAttrib4dARB=GLee_Lazy_glVertexAttrib4dARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4dvARB #define GLEE_C_DEFINED_glVertexAttrib4dvARB void __stdcall GLee_Lazy_glVertexAttrib4dvARB(GLuint index, const GLdouble * v) {if (GLeeInit()) glVertexAttrib4dvARB(index, v);} GLEEPFNGLVERTEXATTRIB4DVARBPROC GLeeFuncPtr_glVertexAttrib4dvARB=GLee_Lazy_glVertexAttrib4dvARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4fARB #define GLEE_C_DEFINED_glVertexAttrib4fARB void __stdcall GLee_Lazy_glVertexAttrib4fARB(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {if (GLeeInit()) glVertexAttrib4fARB(index, x, y, z, w);} GLEEPFNGLVERTEXATTRIB4FARBPROC GLeeFuncPtr_glVertexAttrib4fARB=GLee_Lazy_glVertexAttrib4fARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4fvARB #define GLEE_C_DEFINED_glVertexAttrib4fvARB void __stdcall GLee_Lazy_glVertexAttrib4fvARB(GLuint index, const GLfloat * v) {if (GLeeInit()) glVertexAttrib4fvARB(index, v);} GLEEPFNGLVERTEXATTRIB4FVARBPROC GLeeFuncPtr_glVertexAttrib4fvARB=GLee_Lazy_glVertexAttrib4fvARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4ivARB #define GLEE_C_DEFINED_glVertexAttrib4ivARB void __stdcall GLee_Lazy_glVertexAttrib4ivARB(GLuint index, const GLint * v) {if (GLeeInit()) glVertexAttrib4ivARB(index, v);} GLEEPFNGLVERTEXATTRIB4IVARBPROC GLeeFuncPtr_glVertexAttrib4ivARB=GLee_Lazy_glVertexAttrib4ivARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4sARB #define GLEE_C_DEFINED_glVertexAttrib4sARB void __stdcall GLee_Lazy_glVertexAttrib4sARB(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w) {if (GLeeInit()) glVertexAttrib4sARB(index, x, y, z, w);} GLEEPFNGLVERTEXATTRIB4SARBPROC GLeeFuncPtr_glVertexAttrib4sARB=GLee_Lazy_glVertexAttrib4sARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4svARB #define GLEE_C_DEFINED_glVertexAttrib4svARB void __stdcall GLee_Lazy_glVertexAttrib4svARB(GLuint index, const GLshort * v) {if (GLeeInit()) glVertexAttrib4svARB(index, v);} GLEEPFNGLVERTEXATTRIB4SVARBPROC GLeeFuncPtr_glVertexAttrib4svARB=GLee_Lazy_glVertexAttrib4svARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4ubvARB #define GLEE_C_DEFINED_glVertexAttrib4ubvARB void __stdcall GLee_Lazy_glVertexAttrib4ubvARB(GLuint index, const GLubyte * v) {if (GLeeInit()) glVertexAttrib4ubvARB(index, v);} GLEEPFNGLVERTEXATTRIB4UBVARBPROC GLeeFuncPtr_glVertexAttrib4ubvARB=GLee_Lazy_glVertexAttrib4ubvARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4uivARB #define GLEE_C_DEFINED_glVertexAttrib4uivARB void __stdcall GLee_Lazy_glVertexAttrib4uivARB(GLuint index, const GLuint * v) {if (GLeeInit()) glVertexAttrib4uivARB(index, v);} GLEEPFNGLVERTEXATTRIB4UIVARBPROC GLeeFuncPtr_glVertexAttrib4uivARB=GLee_Lazy_glVertexAttrib4uivARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4usvARB #define GLEE_C_DEFINED_glVertexAttrib4usvARB void __stdcall GLee_Lazy_glVertexAttrib4usvARB(GLuint index, const GLushort * v) {if (GLeeInit()) glVertexAttrib4usvARB(index, v);} GLEEPFNGLVERTEXATTRIB4USVARBPROC GLeeFuncPtr_glVertexAttrib4usvARB=GLee_Lazy_glVertexAttrib4usvARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttribPointerARB #define GLEE_C_DEFINED_glVertexAttribPointerARB void __stdcall GLee_Lazy_glVertexAttribPointerARB(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid * pointer) {if (GLeeInit()) glVertexAttribPointerARB(index, size, type, normalized, stride, pointer);} GLEEPFNGLVERTEXATTRIBPOINTERARBPROC GLeeFuncPtr_glVertexAttribPointerARB=GLee_Lazy_glVertexAttribPointerARB; #endif #ifndef GLEE_C_DEFINED_glEnableVertexAttribArrayARB #define GLEE_C_DEFINED_glEnableVertexAttribArrayARB void __stdcall GLee_Lazy_glEnableVertexAttribArrayARB(GLuint index) {if (GLeeInit()) glEnableVertexAttribArrayARB(index);} GLEEPFNGLENABLEVERTEXATTRIBARRAYARBPROC GLeeFuncPtr_glEnableVertexAttribArrayARB=GLee_Lazy_glEnableVertexAttribArrayARB; #endif #ifndef GLEE_C_DEFINED_glDisableVertexAttribArrayARB #define GLEE_C_DEFINED_glDisableVertexAttribArrayARB void __stdcall GLee_Lazy_glDisableVertexAttribArrayARB(GLuint index) {if (GLeeInit()) glDisableVertexAttribArrayARB(index);} GLEEPFNGLDISABLEVERTEXATTRIBARRAYARBPROC GLeeFuncPtr_glDisableVertexAttribArrayARB=GLee_Lazy_glDisableVertexAttribArrayARB; #endif #ifndef GLEE_C_DEFINED_glProgramStringARB #define GLEE_C_DEFINED_glProgramStringARB void __stdcall GLee_Lazy_glProgramStringARB(GLenum target, GLenum format, GLsizei len, const GLvoid * string) {if (GLeeInit()) glProgramStringARB(target, format, len, string);} GLEEPFNGLPROGRAMSTRINGARBPROC GLeeFuncPtr_glProgramStringARB=GLee_Lazy_glProgramStringARB; #endif #ifndef GLEE_C_DEFINED_glBindProgramARB #define GLEE_C_DEFINED_glBindProgramARB void __stdcall GLee_Lazy_glBindProgramARB(GLenum target, GLuint program) {if (GLeeInit()) glBindProgramARB(target, program);} GLEEPFNGLBINDPROGRAMARBPROC GLeeFuncPtr_glBindProgramARB=GLee_Lazy_glBindProgramARB; #endif #ifndef GLEE_C_DEFINED_glDeleteProgramsARB #define GLEE_C_DEFINED_glDeleteProgramsARB void __stdcall GLee_Lazy_glDeleteProgramsARB(GLsizei n, const GLuint * programs) {if (GLeeInit()) glDeleteProgramsARB(n, programs);} GLEEPFNGLDELETEPROGRAMSARBPROC GLeeFuncPtr_glDeleteProgramsARB=GLee_Lazy_glDeleteProgramsARB; #endif #ifndef GLEE_C_DEFINED_glGenProgramsARB #define GLEE_C_DEFINED_glGenProgramsARB void __stdcall GLee_Lazy_glGenProgramsARB(GLsizei n, GLuint * programs) {if (GLeeInit()) glGenProgramsARB(n, programs);} GLEEPFNGLGENPROGRAMSARBPROC GLeeFuncPtr_glGenProgramsARB=GLee_Lazy_glGenProgramsARB; #endif #ifndef GLEE_C_DEFINED_glProgramEnvParameter4dARB #define GLEE_C_DEFINED_glProgramEnvParameter4dARB void __stdcall GLee_Lazy_glProgramEnvParameter4dARB(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) {if (GLeeInit()) glProgramEnvParameter4dARB(target, index, x, y, z, w);} GLEEPFNGLPROGRAMENVPARAMETER4DARBPROC GLeeFuncPtr_glProgramEnvParameter4dARB=GLee_Lazy_glProgramEnvParameter4dARB; #endif #ifndef GLEE_C_DEFINED_glProgramEnvParameter4dvARB #define GLEE_C_DEFINED_glProgramEnvParameter4dvARB void __stdcall GLee_Lazy_glProgramEnvParameter4dvARB(GLenum target, GLuint index, const GLdouble * params) {if (GLeeInit()) glProgramEnvParameter4dvARB(target, index, params);} GLEEPFNGLPROGRAMENVPARAMETER4DVARBPROC GLeeFuncPtr_glProgramEnvParameter4dvARB=GLee_Lazy_glProgramEnvParameter4dvARB; #endif #ifndef GLEE_C_DEFINED_glProgramEnvParameter4fARB #define GLEE_C_DEFINED_glProgramEnvParameter4fARB void __stdcall GLee_Lazy_glProgramEnvParameter4fARB(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {if (GLeeInit()) glProgramEnvParameter4fARB(target, index, x, y, z, w);} GLEEPFNGLPROGRAMENVPARAMETER4FARBPROC GLeeFuncPtr_glProgramEnvParameter4fARB=GLee_Lazy_glProgramEnvParameter4fARB; #endif #ifndef GLEE_C_DEFINED_glProgramEnvParameter4fvARB #define GLEE_C_DEFINED_glProgramEnvParameter4fvARB void __stdcall GLee_Lazy_glProgramEnvParameter4fvARB(GLenum target, GLuint index, const GLfloat * params) {if (GLeeInit()) glProgramEnvParameter4fvARB(target, index, params);} GLEEPFNGLPROGRAMENVPARAMETER4FVARBPROC GLeeFuncPtr_glProgramEnvParameter4fvARB=GLee_Lazy_glProgramEnvParameter4fvARB; #endif #ifndef GLEE_C_DEFINED_glProgramLocalParameter4dARB #define GLEE_C_DEFINED_glProgramLocalParameter4dARB void __stdcall GLee_Lazy_glProgramLocalParameter4dARB(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) {if (GLeeInit()) glProgramLocalParameter4dARB(target, index, x, y, z, w);} GLEEPFNGLPROGRAMLOCALPARAMETER4DARBPROC GLeeFuncPtr_glProgramLocalParameter4dARB=GLee_Lazy_glProgramLocalParameter4dARB; #endif #ifndef GLEE_C_DEFINED_glProgramLocalParameter4dvARB #define GLEE_C_DEFINED_glProgramLocalParameter4dvARB void __stdcall GLee_Lazy_glProgramLocalParameter4dvARB(GLenum target, GLuint index, const GLdouble * params) {if (GLeeInit()) glProgramLocalParameter4dvARB(target, index, params);} GLEEPFNGLPROGRAMLOCALPARAMETER4DVARBPROC GLeeFuncPtr_glProgramLocalParameter4dvARB=GLee_Lazy_glProgramLocalParameter4dvARB; #endif #ifndef GLEE_C_DEFINED_glProgramLocalParameter4fARB #define GLEE_C_DEFINED_glProgramLocalParameter4fARB void __stdcall GLee_Lazy_glProgramLocalParameter4fARB(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {if (GLeeInit()) glProgramLocalParameter4fARB(target, index, x, y, z, w);} GLEEPFNGLPROGRAMLOCALPARAMETER4FARBPROC GLeeFuncPtr_glProgramLocalParameter4fARB=GLee_Lazy_glProgramLocalParameter4fARB; #endif #ifndef GLEE_C_DEFINED_glProgramLocalParameter4fvARB #define GLEE_C_DEFINED_glProgramLocalParameter4fvARB void __stdcall GLee_Lazy_glProgramLocalParameter4fvARB(GLenum target, GLuint index, const GLfloat * params) {if (GLeeInit()) glProgramLocalParameter4fvARB(target, index, params);} GLEEPFNGLPROGRAMLOCALPARAMETER4FVARBPROC GLeeFuncPtr_glProgramLocalParameter4fvARB=GLee_Lazy_glProgramLocalParameter4fvARB; #endif #ifndef GLEE_C_DEFINED_glGetProgramEnvParameterdvARB #define GLEE_C_DEFINED_glGetProgramEnvParameterdvARB void __stdcall GLee_Lazy_glGetProgramEnvParameterdvARB(GLenum target, GLuint index, GLdouble * params) {if (GLeeInit()) glGetProgramEnvParameterdvARB(target, index, params);} GLEEPFNGLGETPROGRAMENVPARAMETERDVARBPROC GLeeFuncPtr_glGetProgramEnvParameterdvARB=GLee_Lazy_glGetProgramEnvParameterdvARB; #endif #ifndef GLEE_C_DEFINED_glGetProgramEnvParameterfvARB #define GLEE_C_DEFINED_glGetProgramEnvParameterfvARB void __stdcall GLee_Lazy_glGetProgramEnvParameterfvARB(GLenum target, GLuint index, GLfloat * params) {if (GLeeInit()) glGetProgramEnvParameterfvARB(target, index, params);} GLEEPFNGLGETPROGRAMENVPARAMETERFVARBPROC GLeeFuncPtr_glGetProgramEnvParameterfvARB=GLee_Lazy_glGetProgramEnvParameterfvARB; #endif #ifndef GLEE_C_DEFINED_glGetProgramLocalParameterdvARB #define GLEE_C_DEFINED_glGetProgramLocalParameterdvARB void __stdcall GLee_Lazy_glGetProgramLocalParameterdvARB(GLenum target, GLuint index, GLdouble * params) {if (GLeeInit()) glGetProgramLocalParameterdvARB(target, index, params);} GLEEPFNGLGETPROGRAMLOCALPARAMETERDVARBPROC GLeeFuncPtr_glGetProgramLocalParameterdvARB=GLee_Lazy_glGetProgramLocalParameterdvARB; #endif #ifndef GLEE_C_DEFINED_glGetProgramLocalParameterfvARB #define GLEE_C_DEFINED_glGetProgramLocalParameterfvARB void __stdcall GLee_Lazy_glGetProgramLocalParameterfvARB(GLenum target, GLuint index, GLfloat * params) {if (GLeeInit()) glGetProgramLocalParameterfvARB(target, index, params);} GLEEPFNGLGETPROGRAMLOCALPARAMETERFVARBPROC GLeeFuncPtr_glGetProgramLocalParameterfvARB=GLee_Lazy_glGetProgramLocalParameterfvARB; #endif #ifndef GLEE_C_DEFINED_glGetProgramivARB #define GLEE_C_DEFINED_glGetProgramivARB void __stdcall GLee_Lazy_glGetProgramivARB(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetProgramivARB(target, pname, params);} GLEEPFNGLGETPROGRAMIVARBPROC GLeeFuncPtr_glGetProgramivARB=GLee_Lazy_glGetProgramivARB; #endif #ifndef GLEE_C_DEFINED_glGetProgramStringARB #define GLEE_C_DEFINED_glGetProgramStringARB void __stdcall GLee_Lazy_glGetProgramStringARB(GLenum target, GLenum pname, GLvoid * string) {if (GLeeInit()) glGetProgramStringARB(target, pname, string);} GLEEPFNGLGETPROGRAMSTRINGARBPROC GLeeFuncPtr_glGetProgramStringARB=GLee_Lazy_glGetProgramStringARB; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribdvARB #define GLEE_C_DEFINED_glGetVertexAttribdvARB void __stdcall GLee_Lazy_glGetVertexAttribdvARB(GLuint index, GLenum pname, GLdouble * params) {if (GLeeInit()) glGetVertexAttribdvARB(index, pname, params);} GLEEPFNGLGETVERTEXATTRIBDVARBPROC GLeeFuncPtr_glGetVertexAttribdvARB=GLee_Lazy_glGetVertexAttribdvARB; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribfvARB #define GLEE_C_DEFINED_glGetVertexAttribfvARB void __stdcall GLee_Lazy_glGetVertexAttribfvARB(GLuint index, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetVertexAttribfvARB(index, pname, params);} GLEEPFNGLGETVERTEXATTRIBFVARBPROC GLeeFuncPtr_glGetVertexAttribfvARB=GLee_Lazy_glGetVertexAttribfvARB; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribivARB #define GLEE_C_DEFINED_glGetVertexAttribivARB void __stdcall GLee_Lazy_glGetVertexAttribivARB(GLuint index, GLenum pname, GLint * params) {if (GLeeInit()) glGetVertexAttribivARB(index, pname, params);} GLEEPFNGLGETVERTEXATTRIBIVARBPROC GLeeFuncPtr_glGetVertexAttribivARB=GLee_Lazy_glGetVertexAttribivARB; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribPointervARB #define GLEE_C_DEFINED_glGetVertexAttribPointervARB void __stdcall GLee_Lazy_glGetVertexAttribPointervARB(GLuint index, GLenum pname, GLvoid* * pointer) {if (GLeeInit()) glGetVertexAttribPointervARB(index, pname, pointer);} GLEEPFNGLGETVERTEXATTRIBPOINTERVARBPROC GLeeFuncPtr_glGetVertexAttribPointervARB=GLee_Lazy_glGetVertexAttribPointervARB; #endif #ifndef GLEE_C_DEFINED_glIsProgramARB #define GLEE_C_DEFINED_glIsProgramARB GLboolean __stdcall GLee_Lazy_glIsProgramARB(GLuint program) {if (GLeeInit()) return glIsProgramARB(program); return (GLboolean)0;} GLEEPFNGLISPROGRAMARBPROC GLeeFuncPtr_glIsProgramARB=GLee_Lazy_glIsProgramARB; #endif #endif /* GL_ARB_fragment_program */ #ifdef __GLEE_GL_ARB_fragment_program #endif /* GL_ARB_vertex_buffer_object */ #ifdef __GLEE_GL_ARB_vertex_buffer_object #ifndef GLEE_C_DEFINED_glBindBufferARB #define GLEE_C_DEFINED_glBindBufferARB void __stdcall GLee_Lazy_glBindBufferARB(GLenum target, GLuint buffer) {if (GLeeInit()) glBindBufferARB(target, buffer);} GLEEPFNGLBINDBUFFERARBPROC GLeeFuncPtr_glBindBufferARB=GLee_Lazy_glBindBufferARB; #endif #ifndef GLEE_C_DEFINED_glDeleteBuffersARB #define GLEE_C_DEFINED_glDeleteBuffersARB void __stdcall GLee_Lazy_glDeleteBuffersARB(GLsizei n, const GLuint * buffers) {if (GLeeInit()) glDeleteBuffersARB(n, buffers);} GLEEPFNGLDELETEBUFFERSARBPROC GLeeFuncPtr_glDeleteBuffersARB=GLee_Lazy_glDeleteBuffersARB; #endif #ifndef GLEE_C_DEFINED_glGenBuffersARB #define GLEE_C_DEFINED_glGenBuffersARB void __stdcall GLee_Lazy_glGenBuffersARB(GLsizei n, GLuint * buffers) {if (GLeeInit()) glGenBuffersARB(n, buffers);} GLEEPFNGLGENBUFFERSARBPROC GLeeFuncPtr_glGenBuffersARB=GLee_Lazy_glGenBuffersARB; #endif #ifndef GLEE_C_DEFINED_glIsBufferARB #define GLEE_C_DEFINED_glIsBufferARB GLboolean __stdcall GLee_Lazy_glIsBufferARB(GLuint buffer) {if (GLeeInit()) return glIsBufferARB(buffer); return (GLboolean)0;} GLEEPFNGLISBUFFERARBPROC GLeeFuncPtr_glIsBufferARB=GLee_Lazy_glIsBufferARB; #endif #ifndef GLEE_C_DEFINED_glBufferDataARB #define GLEE_C_DEFINED_glBufferDataARB void __stdcall GLee_Lazy_glBufferDataARB(GLenum target, GLsizeiptrARB size, const GLvoid * data, GLenum usage) {if (GLeeInit()) glBufferDataARB(target, size, data, usage);} GLEEPFNGLBUFFERDATAARBPROC GLeeFuncPtr_glBufferDataARB=GLee_Lazy_glBufferDataARB; #endif #ifndef GLEE_C_DEFINED_glBufferSubDataARB #define GLEE_C_DEFINED_glBufferSubDataARB void __stdcall GLee_Lazy_glBufferSubDataARB(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid * data) {if (GLeeInit()) glBufferSubDataARB(target, offset, size, data);} GLEEPFNGLBUFFERSUBDATAARBPROC GLeeFuncPtr_glBufferSubDataARB=GLee_Lazy_glBufferSubDataARB; #endif #ifndef GLEE_C_DEFINED_glGetBufferSubDataARB #define GLEE_C_DEFINED_glGetBufferSubDataARB void __stdcall GLee_Lazy_glGetBufferSubDataARB(GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid * data) {if (GLeeInit()) glGetBufferSubDataARB(target, offset, size, data);} GLEEPFNGLGETBUFFERSUBDATAARBPROC GLeeFuncPtr_glGetBufferSubDataARB=GLee_Lazy_glGetBufferSubDataARB; #endif #ifndef GLEE_C_DEFINED_glMapBufferARB #define GLEE_C_DEFINED_glMapBufferARB GLvoid* __stdcall GLee_Lazy_glMapBufferARB(GLenum target, GLenum access) {if (GLeeInit()) return glMapBufferARB(target, access); return (GLvoid*)0;} GLEEPFNGLMAPBUFFERARBPROC GLeeFuncPtr_glMapBufferARB=GLee_Lazy_glMapBufferARB; #endif #ifndef GLEE_C_DEFINED_glUnmapBufferARB #define GLEE_C_DEFINED_glUnmapBufferARB GLboolean __stdcall GLee_Lazy_glUnmapBufferARB(GLenum target) {if (GLeeInit()) return glUnmapBufferARB(target); return (GLboolean)0;} GLEEPFNGLUNMAPBUFFERARBPROC GLeeFuncPtr_glUnmapBufferARB=GLee_Lazy_glUnmapBufferARB; #endif #ifndef GLEE_C_DEFINED_glGetBufferParameterivARB #define GLEE_C_DEFINED_glGetBufferParameterivARB void __stdcall GLee_Lazy_glGetBufferParameterivARB(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetBufferParameterivARB(target, pname, params);} GLEEPFNGLGETBUFFERPARAMETERIVARBPROC GLeeFuncPtr_glGetBufferParameterivARB=GLee_Lazy_glGetBufferParameterivARB; #endif #ifndef GLEE_C_DEFINED_glGetBufferPointervARB #define GLEE_C_DEFINED_glGetBufferPointervARB void __stdcall GLee_Lazy_glGetBufferPointervARB(GLenum target, GLenum pname, GLvoid* * params) {if (GLeeInit()) glGetBufferPointervARB(target, pname, params);} GLEEPFNGLGETBUFFERPOINTERVARBPROC GLeeFuncPtr_glGetBufferPointervARB=GLee_Lazy_glGetBufferPointervARB; #endif #endif /* GL_ARB_occlusion_query */ #ifdef __GLEE_GL_ARB_occlusion_query #ifndef GLEE_C_DEFINED_glGenQueriesARB #define GLEE_C_DEFINED_glGenQueriesARB void __stdcall GLee_Lazy_glGenQueriesARB(GLsizei n, GLuint * ids) {if (GLeeInit()) glGenQueriesARB(n, ids);} GLEEPFNGLGENQUERIESARBPROC GLeeFuncPtr_glGenQueriesARB=GLee_Lazy_glGenQueriesARB; #endif #ifndef GLEE_C_DEFINED_glDeleteQueriesARB #define GLEE_C_DEFINED_glDeleteQueriesARB void __stdcall GLee_Lazy_glDeleteQueriesARB(GLsizei n, const GLuint * ids) {if (GLeeInit()) glDeleteQueriesARB(n, ids);} GLEEPFNGLDELETEQUERIESARBPROC GLeeFuncPtr_glDeleteQueriesARB=GLee_Lazy_glDeleteQueriesARB; #endif #ifndef GLEE_C_DEFINED_glIsQueryARB #define GLEE_C_DEFINED_glIsQueryARB GLboolean __stdcall GLee_Lazy_glIsQueryARB(GLuint id) {if (GLeeInit()) return glIsQueryARB(id); return (GLboolean)0;} GLEEPFNGLISQUERYARBPROC GLeeFuncPtr_glIsQueryARB=GLee_Lazy_glIsQueryARB; #endif #ifndef GLEE_C_DEFINED_glBeginQueryARB #define GLEE_C_DEFINED_glBeginQueryARB void __stdcall GLee_Lazy_glBeginQueryARB(GLenum target, GLuint id) {if (GLeeInit()) glBeginQueryARB(target, id);} GLEEPFNGLBEGINQUERYARBPROC GLeeFuncPtr_glBeginQueryARB=GLee_Lazy_glBeginQueryARB; #endif #ifndef GLEE_C_DEFINED_glEndQueryARB #define GLEE_C_DEFINED_glEndQueryARB void __stdcall GLee_Lazy_glEndQueryARB(GLenum target) {if (GLeeInit()) glEndQueryARB(target);} GLEEPFNGLENDQUERYARBPROC GLeeFuncPtr_glEndQueryARB=GLee_Lazy_glEndQueryARB; #endif #ifndef GLEE_C_DEFINED_glGetQueryivARB #define GLEE_C_DEFINED_glGetQueryivARB void __stdcall GLee_Lazy_glGetQueryivARB(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetQueryivARB(target, pname, params);} GLEEPFNGLGETQUERYIVARBPROC GLeeFuncPtr_glGetQueryivARB=GLee_Lazy_glGetQueryivARB; #endif #ifndef GLEE_C_DEFINED_glGetQueryObjectivARB #define GLEE_C_DEFINED_glGetQueryObjectivARB void __stdcall GLee_Lazy_glGetQueryObjectivARB(GLuint id, GLenum pname, GLint * params) {if (GLeeInit()) glGetQueryObjectivARB(id, pname, params);} GLEEPFNGLGETQUERYOBJECTIVARBPROC GLeeFuncPtr_glGetQueryObjectivARB=GLee_Lazy_glGetQueryObjectivARB; #endif #ifndef GLEE_C_DEFINED_glGetQueryObjectuivARB #define GLEE_C_DEFINED_glGetQueryObjectuivARB void __stdcall GLee_Lazy_glGetQueryObjectuivARB(GLuint id, GLenum pname, GLuint * params) {if (GLeeInit()) glGetQueryObjectuivARB(id, pname, params);} GLEEPFNGLGETQUERYOBJECTUIVARBPROC GLeeFuncPtr_glGetQueryObjectuivARB=GLee_Lazy_glGetQueryObjectuivARB; #endif #endif /* GL_ARB_shader_objects */ #ifdef __GLEE_GL_ARB_shader_objects #ifndef GLEE_C_DEFINED_glDeleteObjectARB #define GLEE_C_DEFINED_glDeleteObjectARB void __stdcall GLee_Lazy_glDeleteObjectARB(GLhandleARB obj) {if (GLeeInit()) glDeleteObjectARB(obj);} GLEEPFNGLDELETEOBJECTARBPROC GLeeFuncPtr_glDeleteObjectARB=GLee_Lazy_glDeleteObjectARB; #endif #ifndef GLEE_C_DEFINED_glGetHandleARB #define GLEE_C_DEFINED_glGetHandleARB GLhandleARB __stdcall GLee_Lazy_glGetHandleARB(GLenum pname) {if (GLeeInit()) return glGetHandleARB(pname); return (GLhandleARB)0;} GLEEPFNGLGETHANDLEARBPROC GLeeFuncPtr_glGetHandleARB=GLee_Lazy_glGetHandleARB; #endif #ifndef GLEE_C_DEFINED_glDetachObjectARB #define GLEE_C_DEFINED_glDetachObjectARB void __stdcall GLee_Lazy_glDetachObjectARB(GLhandleARB containerObj, GLhandleARB attachedObj) {if (GLeeInit()) glDetachObjectARB(containerObj, attachedObj);} GLEEPFNGLDETACHOBJECTARBPROC GLeeFuncPtr_glDetachObjectARB=GLee_Lazy_glDetachObjectARB; #endif #ifndef GLEE_C_DEFINED_glCreateShaderObjectARB #define GLEE_C_DEFINED_glCreateShaderObjectARB GLhandleARB __stdcall GLee_Lazy_glCreateShaderObjectARB(GLenum shaderType) {if (GLeeInit()) return glCreateShaderObjectARB(shaderType); return (GLhandleARB)0;} GLEEPFNGLCREATESHADEROBJECTARBPROC GLeeFuncPtr_glCreateShaderObjectARB=GLee_Lazy_glCreateShaderObjectARB; #endif #ifndef GLEE_C_DEFINED_glShaderSourceARB #define GLEE_C_DEFINED_glShaderSourceARB void __stdcall GLee_Lazy_glShaderSourceARB(GLhandleARB shaderObj, GLsizei count, const GLcharARB* * string, const GLint * length) {if (GLeeInit()) glShaderSourceARB(shaderObj, count, string, length);} GLEEPFNGLSHADERSOURCEARBPROC GLeeFuncPtr_glShaderSourceARB=GLee_Lazy_glShaderSourceARB; #endif #ifndef GLEE_C_DEFINED_glCompileShaderARB #define GLEE_C_DEFINED_glCompileShaderARB void __stdcall GLee_Lazy_glCompileShaderARB(GLhandleARB shaderObj) {if (GLeeInit()) glCompileShaderARB(shaderObj);} GLEEPFNGLCOMPILESHADERARBPROC GLeeFuncPtr_glCompileShaderARB=GLee_Lazy_glCompileShaderARB; #endif #ifndef GLEE_C_DEFINED_glCreateProgramObjectARB #define GLEE_C_DEFINED_glCreateProgramObjectARB GLhandleARB __stdcall GLee_Lazy_glCreateProgramObjectARB(void) {if (GLeeInit()) return glCreateProgramObjectARB(); return (GLhandleARB)0;} GLEEPFNGLCREATEPROGRAMOBJECTARBPROC GLeeFuncPtr_glCreateProgramObjectARB=GLee_Lazy_glCreateProgramObjectARB; #endif #ifndef GLEE_C_DEFINED_glAttachObjectARB #define GLEE_C_DEFINED_glAttachObjectARB void __stdcall GLee_Lazy_glAttachObjectARB(GLhandleARB containerObj, GLhandleARB obj) {if (GLeeInit()) glAttachObjectARB(containerObj, obj);} GLEEPFNGLATTACHOBJECTARBPROC GLeeFuncPtr_glAttachObjectARB=GLee_Lazy_glAttachObjectARB; #endif #ifndef GLEE_C_DEFINED_glLinkProgramARB #define GLEE_C_DEFINED_glLinkProgramARB void __stdcall GLee_Lazy_glLinkProgramARB(GLhandleARB programObj) {if (GLeeInit()) glLinkProgramARB(programObj);} GLEEPFNGLLINKPROGRAMARBPROC GLeeFuncPtr_glLinkProgramARB=GLee_Lazy_glLinkProgramARB; #endif #ifndef GLEE_C_DEFINED_glUseProgramObjectARB #define GLEE_C_DEFINED_glUseProgramObjectARB void __stdcall GLee_Lazy_glUseProgramObjectARB(GLhandleARB programObj) {if (GLeeInit()) glUseProgramObjectARB(programObj);} GLEEPFNGLUSEPROGRAMOBJECTARBPROC GLeeFuncPtr_glUseProgramObjectARB=GLee_Lazy_glUseProgramObjectARB; #endif #ifndef GLEE_C_DEFINED_glValidateProgramARB #define GLEE_C_DEFINED_glValidateProgramARB void __stdcall GLee_Lazy_glValidateProgramARB(GLhandleARB programObj) {if (GLeeInit()) glValidateProgramARB(programObj);} GLEEPFNGLVALIDATEPROGRAMARBPROC GLeeFuncPtr_glValidateProgramARB=GLee_Lazy_glValidateProgramARB; #endif #ifndef GLEE_C_DEFINED_glUniform1fARB #define GLEE_C_DEFINED_glUniform1fARB void __stdcall GLee_Lazy_glUniform1fARB(GLint location, GLfloat v0) {if (GLeeInit()) glUniform1fARB(location, v0);} GLEEPFNGLUNIFORM1FARBPROC GLeeFuncPtr_glUniform1fARB=GLee_Lazy_glUniform1fARB; #endif #ifndef GLEE_C_DEFINED_glUniform2fARB #define GLEE_C_DEFINED_glUniform2fARB void __stdcall GLee_Lazy_glUniform2fARB(GLint location, GLfloat v0, GLfloat v1) {if (GLeeInit()) glUniform2fARB(location, v0, v1);} GLEEPFNGLUNIFORM2FARBPROC GLeeFuncPtr_glUniform2fARB=GLee_Lazy_glUniform2fARB; #endif #ifndef GLEE_C_DEFINED_glUniform3fARB #define GLEE_C_DEFINED_glUniform3fARB void __stdcall GLee_Lazy_glUniform3fARB(GLint location, GLfloat v0, GLfloat v1, GLfloat v2) {if (GLeeInit()) glUniform3fARB(location, v0, v1, v2);} GLEEPFNGLUNIFORM3FARBPROC GLeeFuncPtr_glUniform3fARB=GLee_Lazy_glUniform3fARB; #endif #ifndef GLEE_C_DEFINED_glUniform4fARB #define GLEE_C_DEFINED_glUniform4fARB void __stdcall GLee_Lazy_glUniform4fARB(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) {if (GLeeInit()) glUniform4fARB(location, v0, v1, v2, v3);} GLEEPFNGLUNIFORM4FARBPROC GLeeFuncPtr_glUniform4fARB=GLee_Lazy_glUniform4fARB; #endif #ifndef GLEE_C_DEFINED_glUniform1iARB #define GLEE_C_DEFINED_glUniform1iARB void __stdcall GLee_Lazy_glUniform1iARB(GLint location, GLint v0) {if (GLeeInit()) glUniform1iARB(location, v0);} GLEEPFNGLUNIFORM1IARBPROC GLeeFuncPtr_glUniform1iARB=GLee_Lazy_glUniform1iARB; #endif #ifndef GLEE_C_DEFINED_glUniform2iARB #define GLEE_C_DEFINED_glUniform2iARB void __stdcall GLee_Lazy_glUniform2iARB(GLint location, GLint v0, GLint v1) {if (GLeeInit()) glUniform2iARB(location, v0, v1);} GLEEPFNGLUNIFORM2IARBPROC GLeeFuncPtr_glUniform2iARB=GLee_Lazy_glUniform2iARB; #endif #ifndef GLEE_C_DEFINED_glUniform3iARB #define GLEE_C_DEFINED_glUniform3iARB void __stdcall GLee_Lazy_glUniform3iARB(GLint location, GLint v0, GLint v1, GLint v2) {if (GLeeInit()) glUniform3iARB(location, v0, v1, v2);} GLEEPFNGLUNIFORM3IARBPROC GLeeFuncPtr_glUniform3iARB=GLee_Lazy_glUniform3iARB; #endif #ifndef GLEE_C_DEFINED_glUniform4iARB #define GLEE_C_DEFINED_glUniform4iARB void __stdcall GLee_Lazy_glUniform4iARB(GLint location, GLint v0, GLint v1, GLint v2, GLint v3) {if (GLeeInit()) glUniform4iARB(location, v0, v1, v2, v3);} GLEEPFNGLUNIFORM4IARBPROC GLeeFuncPtr_glUniform4iARB=GLee_Lazy_glUniform4iARB; #endif #ifndef GLEE_C_DEFINED_glUniform1fvARB #define GLEE_C_DEFINED_glUniform1fvARB void __stdcall GLee_Lazy_glUniform1fvARB(GLint location, GLsizei count, const GLfloat * value) {if (GLeeInit()) glUniform1fvARB(location, count, value);} GLEEPFNGLUNIFORM1FVARBPROC GLeeFuncPtr_glUniform1fvARB=GLee_Lazy_glUniform1fvARB; #endif #ifndef GLEE_C_DEFINED_glUniform2fvARB #define GLEE_C_DEFINED_glUniform2fvARB void __stdcall GLee_Lazy_glUniform2fvARB(GLint location, GLsizei count, const GLfloat * value) {if (GLeeInit()) glUniform2fvARB(location, count, value);} GLEEPFNGLUNIFORM2FVARBPROC GLeeFuncPtr_glUniform2fvARB=GLee_Lazy_glUniform2fvARB; #endif #ifndef GLEE_C_DEFINED_glUniform3fvARB #define GLEE_C_DEFINED_glUniform3fvARB void __stdcall GLee_Lazy_glUniform3fvARB(GLint location, GLsizei count, const GLfloat * value) {if (GLeeInit()) glUniform3fvARB(location, count, value);} GLEEPFNGLUNIFORM3FVARBPROC GLeeFuncPtr_glUniform3fvARB=GLee_Lazy_glUniform3fvARB; #endif #ifndef GLEE_C_DEFINED_glUniform4fvARB #define GLEE_C_DEFINED_glUniform4fvARB void __stdcall GLee_Lazy_glUniform4fvARB(GLint location, GLsizei count, const GLfloat * value) {if (GLeeInit()) glUniform4fvARB(location, count, value);} GLEEPFNGLUNIFORM4FVARBPROC GLeeFuncPtr_glUniform4fvARB=GLee_Lazy_glUniform4fvARB; #endif #ifndef GLEE_C_DEFINED_glUniform1ivARB #define GLEE_C_DEFINED_glUniform1ivARB void __stdcall GLee_Lazy_glUniform1ivARB(GLint location, GLsizei count, const GLint * value) {if (GLeeInit()) glUniform1ivARB(location, count, value);} GLEEPFNGLUNIFORM1IVARBPROC GLeeFuncPtr_glUniform1ivARB=GLee_Lazy_glUniform1ivARB; #endif #ifndef GLEE_C_DEFINED_glUniform2ivARB #define GLEE_C_DEFINED_glUniform2ivARB void __stdcall GLee_Lazy_glUniform2ivARB(GLint location, GLsizei count, const GLint * value) {if (GLeeInit()) glUniform2ivARB(location, count, value);} GLEEPFNGLUNIFORM2IVARBPROC GLeeFuncPtr_glUniform2ivARB=GLee_Lazy_glUniform2ivARB; #endif #ifndef GLEE_C_DEFINED_glUniform3ivARB #define GLEE_C_DEFINED_glUniform3ivARB void __stdcall GLee_Lazy_glUniform3ivARB(GLint location, GLsizei count, const GLint * value) {if (GLeeInit()) glUniform3ivARB(location, count, value);} GLEEPFNGLUNIFORM3IVARBPROC GLeeFuncPtr_glUniform3ivARB=GLee_Lazy_glUniform3ivARB; #endif #ifndef GLEE_C_DEFINED_glUniform4ivARB #define GLEE_C_DEFINED_glUniform4ivARB void __stdcall GLee_Lazy_glUniform4ivARB(GLint location, GLsizei count, const GLint * value) {if (GLeeInit()) glUniform4ivARB(location, count, value);} GLEEPFNGLUNIFORM4IVARBPROC GLeeFuncPtr_glUniform4ivARB=GLee_Lazy_glUniform4ivARB; #endif #ifndef GLEE_C_DEFINED_glUniformMatrix2fvARB #define GLEE_C_DEFINED_glUniformMatrix2fvARB void __stdcall GLee_Lazy_glUniformMatrix2fvARB(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glUniformMatrix2fvARB(location, count, transpose, value);} GLEEPFNGLUNIFORMMATRIX2FVARBPROC GLeeFuncPtr_glUniformMatrix2fvARB=GLee_Lazy_glUniformMatrix2fvARB; #endif #ifndef GLEE_C_DEFINED_glUniformMatrix3fvARB #define GLEE_C_DEFINED_glUniformMatrix3fvARB void __stdcall GLee_Lazy_glUniformMatrix3fvARB(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glUniformMatrix3fvARB(location, count, transpose, value);} GLEEPFNGLUNIFORMMATRIX3FVARBPROC GLeeFuncPtr_glUniformMatrix3fvARB=GLee_Lazy_glUniformMatrix3fvARB; #endif #ifndef GLEE_C_DEFINED_glUniformMatrix4fvARB #define GLEE_C_DEFINED_glUniformMatrix4fvARB void __stdcall GLee_Lazy_glUniformMatrix4fvARB(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glUniformMatrix4fvARB(location, count, transpose, value);} GLEEPFNGLUNIFORMMATRIX4FVARBPROC GLeeFuncPtr_glUniformMatrix4fvARB=GLee_Lazy_glUniformMatrix4fvARB; #endif #ifndef GLEE_C_DEFINED_glGetObjectParameterfvARB #define GLEE_C_DEFINED_glGetObjectParameterfvARB void __stdcall GLee_Lazy_glGetObjectParameterfvARB(GLhandleARB obj, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetObjectParameterfvARB(obj, pname, params);} GLEEPFNGLGETOBJECTPARAMETERFVARBPROC GLeeFuncPtr_glGetObjectParameterfvARB=GLee_Lazy_glGetObjectParameterfvARB; #endif #ifndef GLEE_C_DEFINED_glGetObjectParameterivARB #define GLEE_C_DEFINED_glGetObjectParameterivARB void __stdcall GLee_Lazy_glGetObjectParameterivARB(GLhandleARB obj, GLenum pname, GLint * params) {if (GLeeInit()) glGetObjectParameterivARB(obj, pname, params);} GLEEPFNGLGETOBJECTPARAMETERIVARBPROC GLeeFuncPtr_glGetObjectParameterivARB=GLee_Lazy_glGetObjectParameterivARB; #endif #ifndef GLEE_C_DEFINED_glGetInfoLogARB #define GLEE_C_DEFINED_glGetInfoLogARB void __stdcall GLee_Lazy_glGetInfoLogARB(GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog) {if (GLeeInit()) glGetInfoLogARB(obj, maxLength, length, infoLog);} GLEEPFNGLGETINFOLOGARBPROC GLeeFuncPtr_glGetInfoLogARB=GLee_Lazy_glGetInfoLogARB; #endif #ifndef GLEE_C_DEFINED_glGetAttachedObjectsARB #define GLEE_C_DEFINED_glGetAttachedObjectsARB void __stdcall GLee_Lazy_glGetAttachedObjectsARB(GLhandleARB containerObj, GLsizei maxCount, GLsizei * count, GLhandleARB * obj) {if (GLeeInit()) glGetAttachedObjectsARB(containerObj, maxCount, count, obj);} GLEEPFNGLGETATTACHEDOBJECTSARBPROC GLeeFuncPtr_glGetAttachedObjectsARB=GLee_Lazy_glGetAttachedObjectsARB; #endif #ifndef GLEE_C_DEFINED_glGetUniformLocationARB #define GLEE_C_DEFINED_glGetUniformLocationARB GLint __stdcall GLee_Lazy_glGetUniformLocationARB(GLhandleARB programObj, const GLcharARB * name) {if (GLeeInit()) return glGetUniformLocationARB(programObj, name); return (GLint)0;} GLEEPFNGLGETUNIFORMLOCATIONARBPROC GLeeFuncPtr_glGetUniformLocationARB=GLee_Lazy_glGetUniformLocationARB; #endif #ifndef GLEE_C_DEFINED_glGetActiveUniformARB #define GLEE_C_DEFINED_glGetActiveUniformARB void __stdcall GLee_Lazy_glGetActiveUniformARB(GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei * length, GLint * size, GLenum * type, GLcharARB * name) {if (GLeeInit()) glGetActiveUniformARB(programObj, index, maxLength, length, size, type, name);} GLEEPFNGLGETACTIVEUNIFORMARBPROC GLeeFuncPtr_glGetActiveUniformARB=GLee_Lazy_glGetActiveUniformARB; #endif #ifndef GLEE_C_DEFINED_glGetUniformfvARB #define GLEE_C_DEFINED_glGetUniformfvARB void __stdcall GLee_Lazy_glGetUniformfvARB(GLhandleARB programObj, GLint location, GLfloat * params) {if (GLeeInit()) glGetUniformfvARB(programObj, location, params);} GLEEPFNGLGETUNIFORMFVARBPROC GLeeFuncPtr_glGetUniformfvARB=GLee_Lazy_glGetUniformfvARB; #endif #ifndef GLEE_C_DEFINED_glGetUniformivARB #define GLEE_C_DEFINED_glGetUniformivARB void __stdcall GLee_Lazy_glGetUniformivARB(GLhandleARB programObj, GLint location, GLint * params) {if (GLeeInit()) glGetUniformivARB(programObj, location, params);} GLEEPFNGLGETUNIFORMIVARBPROC GLeeFuncPtr_glGetUniformivARB=GLee_Lazy_glGetUniformivARB; #endif #ifndef GLEE_C_DEFINED_glGetShaderSourceARB #define GLEE_C_DEFINED_glGetShaderSourceARB void __stdcall GLee_Lazy_glGetShaderSourceARB(GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * source) {if (GLeeInit()) glGetShaderSourceARB(obj, maxLength, length, source);} GLEEPFNGLGETSHADERSOURCEARBPROC GLeeFuncPtr_glGetShaderSourceARB=GLee_Lazy_glGetShaderSourceARB; #endif #endif /* GL_ARB_vertex_shader */ #ifdef __GLEE_GL_ARB_vertex_shader #ifndef GLEE_C_DEFINED_glBindAttribLocationARB #define GLEE_C_DEFINED_glBindAttribLocationARB void __stdcall GLee_Lazy_glBindAttribLocationARB(GLhandleARB programObj, GLuint index, const GLcharARB * name) {if (GLeeInit()) glBindAttribLocationARB(programObj, index, name);} GLEEPFNGLBINDATTRIBLOCATIONARBPROC GLeeFuncPtr_glBindAttribLocationARB=GLee_Lazy_glBindAttribLocationARB; #endif #ifndef GLEE_C_DEFINED_glGetActiveAttribARB #define GLEE_C_DEFINED_glGetActiveAttribARB void __stdcall GLee_Lazy_glGetActiveAttribARB(GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei * length, GLint * size, GLenum * type, GLcharARB * name) {if (GLeeInit()) glGetActiveAttribARB(programObj, index, maxLength, length, size, type, name);} GLEEPFNGLGETACTIVEATTRIBARBPROC GLeeFuncPtr_glGetActiveAttribARB=GLee_Lazy_glGetActiveAttribARB; #endif #ifndef GLEE_C_DEFINED_glGetAttribLocationARB #define GLEE_C_DEFINED_glGetAttribLocationARB GLint __stdcall GLee_Lazy_glGetAttribLocationARB(GLhandleARB programObj, const GLcharARB * name) {if (GLeeInit()) return glGetAttribLocationARB(programObj, name); return (GLint)0;} GLEEPFNGLGETATTRIBLOCATIONARBPROC GLeeFuncPtr_glGetAttribLocationARB=GLee_Lazy_glGetAttribLocationARB; #endif #endif /* GL_ARB_fragment_shader */ #ifdef __GLEE_GL_ARB_fragment_shader #endif /* GL_ARB_shading_language_100 */ #ifdef __GLEE_GL_ARB_shading_language_100 #endif /* GL_ARB_texture_non_power_of_two */ #ifdef __GLEE_GL_ARB_texture_non_power_of_two #endif /* GL_ARB_point_sprite */ #ifdef __GLEE_GL_ARB_point_sprite #endif /* GL_ARB_fragment_program_shadow */ #ifdef __GLEE_GL_ARB_fragment_program_shadow #endif /* GL_ARB_draw_buffers */ #ifdef __GLEE_GL_ARB_draw_buffers #ifndef GLEE_C_DEFINED_glDrawBuffersARB #define GLEE_C_DEFINED_glDrawBuffersARB void __stdcall GLee_Lazy_glDrawBuffersARB(GLsizei n, const GLenum * bufs) {if (GLeeInit()) glDrawBuffersARB(n, bufs);} GLEEPFNGLDRAWBUFFERSARBPROC GLeeFuncPtr_glDrawBuffersARB=GLee_Lazy_glDrawBuffersARB; #endif #endif /* GL_ARB_texture_rectangle */ #ifdef __GLEE_GL_ARB_texture_rectangle #endif /* GL_ARB_color_buffer_float */ #ifdef __GLEE_GL_ARB_color_buffer_float #ifndef GLEE_C_DEFINED_glClampColorARB #define GLEE_C_DEFINED_glClampColorARB void __stdcall GLee_Lazy_glClampColorARB(GLenum target, GLenum clamp) {if (GLeeInit()) glClampColorARB(target, clamp);} GLEEPFNGLCLAMPCOLORARBPROC GLeeFuncPtr_glClampColorARB=GLee_Lazy_glClampColorARB; #endif #endif /* GL_ARB_half_float_pixel */ #ifdef __GLEE_GL_ARB_half_float_pixel #endif /* GL_ARB_texture_float */ #ifdef __GLEE_GL_ARB_texture_float #endif /* GL_ARB_pixel_buffer_object */ #ifdef __GLEE_GL_ARB_pixel_buffer_object #endif /* GL_ARB_depth_buffer_float */ #ifdef __GLEE_GL_ARB_depth_buffer_float #endif /* GL_ARB_draw_instanced */ #ifdef __GLEE_GL_ARB_draw_instanced #ifndef GLEE_C_DEFINED_glDrawArraysInstancedARB #define GLEE_C_DEFINED_glDrawArraysInstancedARB void __stdcall GLee_Lazy_glDrawArraysInstancedARB(GLenum mode, GLint first, GLsizei count, GLsizei primcount) {if (GLeeInit()) glDrawArraysInstancedARB(mode, first, count, primcount);} GLEEPFNGLDRAWARRAYSINSTANCEDARBPROC GLeeFuncPtr_glDrawArraysInstancedARB=GLee_Lazy_glDrawArraysInstancedARB; #endif #ifndef GLEE_C_DEFINED_glDrawElementsInstancedARB #define GLEE_C_DEFINED_glDrawElementsInstancedARB void __stdcall GLee_Lazy_glDrawElementsInstancedARB(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLsizei primcount) {if (GLeeInit()) glDrawElementsInstancedARB(mode, count, type, indices, primcount);} GLEEPFNGLDRAWELEMENTSINSTANCEDARBPROC GLeeFuncPtr_glDrawElementsInstancedARB=GLee_Lazy_glDrawElementsInstancedARB; #endif #endif /* GL_ARB_framebuffer_object */ #ifdef __GLEE_GL_ARB_framebuffer_object #ifndef GLEE_C_DEFINED_glIsRenderbuffer #define GLEE_C_DEFINED_glIsRenderbuffer GLboolean __stdcall GLee_Lazy_glIsRenderbuffer(GLuint renderbuffer) {if (GLeeInit()) return glIsRenderbuffer(renderbuffer); return (GLboolean)0;} GLEEPFNGLISRENDERBUFFERPROC GLeeFuncPtr_glIsRenderbuffer=GLee_Lazy_glIsRenderbuffer; #endif #ifndef GLEE_C_DEFINED_glBindRenderbuffer #define GLEE_C_DEFINED_glBindRenderbuffer void __stdcall GLee_Lazy_glBindRenderbuffer(GLenum target, GLuint renderbuffer) {if (GLeeInit()) glBindRenderbuffer(target, renderbuffer);} GLEEPFNGLBINDRENDERBUFFERPROC GLeeFuncPtr_glBindRenderbuffer=GLee_Lazy_glBindRenderbuffer; #endif #ifndef GLEE_C_DEFINED_glDeleteRenderbuffers #define GLEE_C_DEFINED_glDeleteRenderbuffers void __stdcall GLee_Lazy_glDeleteRenderbuffers(GLsizei n, const GLuint * renderbuffers) {if (GLeeInit()) glDeleteRenderbuffers(n, renderbuffers);} GLEEPFNGLDELETERENDERBUFFERSPROC GLeeFuncPtr_glDeleteRenderbuffers=GLee_Lazy_glDeleteRenderbuffers; #endif #ifndef GLEE_C_DEFINED_glGenRenderbuffers #define GLEE_C_DEFINED_glGenRenderbuffers void __stdcall GLee_Lazy_glGenRenderbuffers(GLsizei n, GLuint * renderbuffers) {if (GLeeInit()) glGenRenderbuffers(n, renderbuffers);} GLEEPFNGLGENRENDERBUFFERSPROC GLeeFuncPtr_glGenRenderbuffers=GLee_Lazy_glGenRenderbuffers; #endif #ifndef GLEE_C_DEFINED_glRenderbufferStorage #define GLEE_C_DEFINED_glRenderbufferStorage void __stdcall GLee_Lazy_glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height) {if (GLeeInit()) glRenderbufferStorage(target, internalformat, width, height);} GLEEPFNGLRENDERBUFFERSTORAGEPROC GLeeFuncPtr_glRenderbufferStorage=GLee_Lazy_glRenderbufferStorage; #endif #ifndef GLEE_C_DEFINED_glGetRenderbufferParameteriv #define GLEE_C_DEFINED_glGetRenderbufferParameteriv void __stdcall GLee_Lazy_glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetRenderbufferParameteriv(target, pname, params);} GLEEPFNGLGETRENDERBUFFERPARAMETERIVPROC GLeeFuncPtr_glGetRenderbufferParameteriv=GLee_Lazy_glGetRenderbufferParameteriv; #endif #ifndef GLEE_C_DEFINED_glIsFramebuffer #define GLEE_C_DEFINED_glIsFramebuffer GLboolean __stdcall GLee_Lazy_glIsFramebuffer(GLuint framebuffer) {if (GLeeInit()) return glIsFramebuffer(framebuffer); return (GLboolean)0;} GLEEPFNGLISFRAMEBUFFERPROC GLeeFuncPtr_glIsFramebuffer=GLee_Lazy_glIsFramebuffer; #endif #ifndef GLEE_C_DEFINED_glBindFramebuffer #define GLEE_C_DEFINED_glBindFramebuffer void __stdcall GLee_Lazy_glBindFramebuffer(GLenum target, GLuint framebuffer) {if (GLeeInit()) glBindFramebuffer(target, framebuffer);} GLEEPFNGLBINDFRAMEBUFFERPROC GLeeFuncPtr_glBindFramebuffer=GLee_Lazy_glBindFramebuffer; #endif #ifndef GLEE_C_DEFINED_glDeleteFramebuffers #define GLEE_C_DEFINED_glDeleteFramebuffers void __stdcall GLee_Lazy_glDeleteFramebuffers(GLsizei n, const GLuint * framebuffers) {if (GLeeInit()) glDeleteFramebuffers(n, framebuffers);} GLEEPFNGLDELETEFRAMEBUFFERSPROC GLeeFuncPtr_glDeleteFramebuffers=GLee_Lazy_glDeleteFramebuffers; #endif #ifndef GLEE_C_DEFINED_glGenFramebuffers #define GLEE_C_DEFINED_glGenFramebuffers void __stdcall GLee_Lazy_glGenFramebuffers(GLsizei n, GLuint * framebuffers) {if (GLeeInit()) glGenFramebuffers(n, framebuffers);} GLEEPFNGLGENFRAMEBUFFERSPROC GLeeFuncPtr_glGenFramebuffers=GLee_Lazy_glGenFramebuffers; #endif #ifndef GLEE_C_DEFINED_glCheckFramebufferStatus #define GLEE_C_DEFINED_glCheckFramebufferStatus GLenum __stdcall GLee_Lazy_glCheckFramebufferStatus(GLenum target) {if (GLeeInit()) return glCheckFramebufferStatus(target); return (GLenum)0;} GLEEPFNGLCHECKFRAMEBUFFERSTATUSPROC GLeeFuncPtr_glCheckFramebufferStatus=GLee_Lazy_glCheckFramebufferStatus; #endif #ifndef GLEE_C_DEFINED_glFramebufferTexture1D #define GLEE_C_DEFINED_glFramebufferTexture1D void __stdcall GLee_Lazy_glFramebufferTexture1D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) {if (GLeeInit()) glFramebufferTexture1D(target, attachment, textarget, texture, level);} GLEEPFNGLFRAMEBUFFERTEXTURE1DPROC GLeeFuncPtr_glFramebufferTexture1D=GLee_Lazy_glFramebufferTexture1D; #endif #ifndef GLEE_C_DEFINED_glFramebufferTexture2D #define GLEE_C_DEFINED_glFramebufferTexture2D void __stdcall GLee_Lazy_glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) {if (GLeeInit()) glFramebufferTexture2D(target, attachment, textarget, texture, level);} GLEEPFNGLFRAMEBUFFERTEXTURE2DPROC GLeeFuncPtr_glFramebufferTexture2D=GLee_Lazy_glFramebufferTexture2D; #endif #ifndef GLEE_C_DEFINED_glFramebufferTexture3D #define GLEE_C_DEFINED_glFramebufferTexture3D void __stdcall GLee_Lazy_glFramebufferTexture3D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) {if (GLeeInit()) glFramebufferTexture3D(target, attachment, textarget, texture, level, zoffset);} GLEEPFNGLFRAMEBUFFERTEXTURE3DPROC GLeeFuncPtr_glFramebufferTexture3D=GLee_Lazy_glFramebufferTexture3D; #endif #ifndef GLEE_C_DEFINED_glFramebufferRenderbuffer #define GLEE_C_DEFINED_glFramebufferRenderbuffer void __stdcall GLee_Lazy_glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) {if (GLeeInit()) glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);} GLEEPFNGLFRAMEBUFFERRENDERBUFFERPROC GLeeFuncPtr_glFramebufferRenderbuffer=GLee_Lazy_glFramebufferRenderbuffer; #endif #ifndef GLEE_C_DEFINED_glGetFramebufferAttachmentParameteriv #define GLEE_C_DEFINED_glGetFramebufferAttachmentParameteriv void __stdcall GLee_Lazy_glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint * params) {if (GLeeInit()) glGetFramebufferAttachmentParameteriv(target, attachment, pname, params);} GLEEPFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC GLeeFuncPtr_glGetFramebufferAttachmentParameteriv=GLee_Lazy_glGetFramebufferAttachmentParameteriv; #endif #ifndef GLEE_C_DEFINED_glGenerateMipmap #define GLEE_C_DEFINED_glGenerateMipmap void __stdcall GLee_Lazy_glGenerateMipmap(GLenum target) {if (GLeeInit()) glGenerateMipmap(target);} GLEEPFNGLGENERATEMIPMAPPROC GLeeFuncPtr_glGenerateMipmap=GLee_Lazy_glGenerateMipmap; #endif #ifndef GLEE_C_DEFINED_glBlitFramebuffer #define GLEE_C_DEFINED_glBlitFramebuffer void __stdcall GLee_Lazy_glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) {if (GLeeInit()) glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);} GLEEPFNGLBLITFRAMEBUFFERPROC GLeeFuncPtr_glBlitFramebuffer=GLee_Lazy_glBlitFramebuffer; #endif #ifndef GLEE_C_DEFINED_glRenderbufferStorageMultisample #define GLEE_C_DEFINED_glRenderbufferStorageMultisample void __stdcall GLee_Lazy_glRenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) {if (GLeeInit()) glRenderbufferStorageMultisample(target, samples, internalformat, width, height);} GLEEPFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC GLeeFuncPtr_glRenderbufferStorageMultisample=GLee_Lazy_glRenderbufferStorageMultisample; #endif #ifndef GLEE_C_DEFINED_glFramebufferTextureLayer #define GLEE_C_DEFINED_glFramebufferTextureLayer void __stdcall GLee_Lazy_glFramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) {if (GLeeInit()) glFramebufferTextureLayer(target, attachment, texture, level, layer);} GLEEPFNGLFRAMEBUFFERTEXTURELAYERPROC GLeeFuncPtr_glFramebufferTextureLayer=GLee_Lazy_glFramebufferTextureLayer; #endif #endif /* GL_ARB_framebuffer_sRGB */ #ifdef __GLEE_GL_ARB_framebuffer_sRGB #endif /* GL_ARB_geometry_shader4 */ #ifdef __GLEE_GL_ARB_geometry_shader4 #ifndef GLEE_C_DEFINED_glProgramParameteriARB #define GLEE_C_DEFINED_glProgramParameteriARB void __stdcall GLee_Lazy_glProgramParameteriARB(GLuint program, GLenum pname, GLint value) {if (GLeeInit()) glProgramParameteriARB(program, pname, value);} GLEEPFNGLPROGRAMPARAMETERIARBPROC GLeeFuncPtr_glProgramParameteriARB=GLee_Lazy_glProgramParameteriARB; #endif #ifndef GLEE_C_DEFINED_glFramebufferTextureARB #define GLEE_C_DEFINED_glFramebufferTextureARB void __stdcall GLee_Lazy_glFramebufferTextureARB(GLenum target, GLenum attachment, GLuint texture, GLint level) {if (GLeeInit()) glFramebufferTextureARB(target, attachment, texture, level);} GLEEPFNGLFRAMEBUFFERTEXTUREARBPROC GLeeFuncPtr_glFramebufferTextureARB=GLee_Lazy_glFramebufferTextureARB; #endif #ifndef GLEE_C_DEFINED_glFramebufferTextureLayerARB #define GLEE_C_DEFINED_glFramebufferTextureLayerARB void __stdcall GLee_Lazy_glFramebufferTextureLayerARB(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) {if (GLeeInit()) glFramebufferTextureLayerARB(target, attachment, texture, level, layer);} GLEEPFNGLFRAMEBUFFERTEXTURELAYERARBPROC GLeeFuncPtr_glFramebufferTextureLayerARB=GLee_Lazy_glFramebufferTextureLayerARB; #endif #ifndef GLEE_C_DEFINED_glFramebufferTextureFaceARB #define GLEE_C_DEFINED_glFramebufferTextureFaceARB void __stdcall GLee_Lazy_glFramebufferTextureFaceARB(GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face) {if (GLeeInit()) glFramebufferTextureFaceARB(target, attachment, texture, level, face);} GLEEPFNGLFRAMEBUFFERTEXTUREFACEARBPROC GLeeFuncPtr_glFramebufferTextureFaceARB=GLee_Lazy_glFramebufferTextureFaceARB; #endif #endif /* GL_ARB_half_float_vertex */ #ifdef __GLEE_GL_ARB_half_float_vertex #endif /* GL_ARB_instanced_arrays */ #ifdef __GLEE_GL_ARB_instanced_arrays #ifndef GLEE_C_DEFINED_glVertexAttribDivisorARB #define GLEE_C_DEFINED_glVertexAttribDivisorARB void __stdcall GLee_Lazy_glVertexAttribDivisorARB(GLuint index, GLuint divisor) {if (GLeeInit()) glVertexAttribDivisorARB(index, divisor);} GLEEPFNGLVERTEXATTRIBDIVISORARBPROC GLeeFuncPtr_glVertexAttribDivisorARB=GLee_Lazy_glVertexAttribDivisorARB; #endif #endif /* GL_ARB_map_buffer_range */ #ifdef __GLEE_GL_ARB_map_buffer_range #ifndef GLEE_C_DEFINED_glMapBufferRange #define GLEE_C_DEFINED_glMapBufferRange GLvoid* __stdcall GLee_Lazy_glMapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access) {if (GLeeInit()) return glMapBufferRange(target, offset, length, access); return (GLvoid*)0;} GLEEPFNGLMAPBUFFERRANGEPROC GLeeFuncPtr_glMapBufferRange=GLee_Lazy_glMapBufferRange; #endif #ifndef GLEE_C_DEFINED_glFlushMappedBufferRange #define GLEE_C_DEFINED_glFlushMappedBufferRange void __stdcall GLee_Lazy_glFlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length) {if (GLeeInit()) glFlushMappedBufferRange(target, offset, length);} GLEEPFNGLFLUSHMAPPEDBUFFERRANGEPROC GLeeFuncPtr_glFlushMappedBufferRange=GLee_Lazy_glFlushMappedBufferRange; #endif #endif /* GL_ARB_texture_buffer_object */ #ifdef __GLEE_GL_ARB_texture_buffer_object #ifndef GLEE_C_DEFINED_glTexBufferARB #define GLEE_C_DEFINED_glTexBufferARB void __stdcall GLee_Lazy_glTexBufferARB(GLenum target, GLenum internalformat, GLuint buffer) {if (GLeeInit()) glTexBufferARB(target, internalformat, buffer);} GLEEPFNGLTEXBUFFERARBPROC GLeeFuncPtr_glTexBufferARB=GLee_Lazy_glTexBufferARB; #endif #endif /* GL_ARB_texture_compression_rgtc */ #ifdef __GLEE_GL_ARB_texture_compression_rgtc #endif /* GL_ARB_texture_rg */ #ifdef __GLEE_GL_ARB_texture_rg #endif /* GL_ARB_vertex_array_object */ #ifdef __GLEE_GL_ARB_vertex_array_object #ifndef GLEE_C_DEFINED_glBindVertexArray #define GLEE_C_DEFINED_glBindVertexArray void __stdcall GLee_Lazy_glBindVertexArray(GLuint array) {if (GLeeInit()) glBindVertexArray(array);} GLEEPFNGLBINDVERTEXARRAYPROC GLeeFuncPtr_glBindVertexArray=GLee_Lazy_glBindVertexArray; #endif #ifndef GLEE_C_DEFINED_glDeleteVertexArrays #define GLEE_C_DEFINED_glDeleteVertexArrays void __stdcall GLee_Lazy_glDeleteVertexArrays(GLsizei n, const GLuint * arrays) {if (GLeeInit()) glDeleteVertexArrays(n, arrays);} GLEEPFNGLDELETEVERTEXARRAYSPROC GLeeFuncPtr_glDeleteVertexArrays=GLee_Lazy_glDeleteVertexArrays; #endif #ifndef GLEE_C_DEFINED_glGenVertexArrays #define GLEE_C_DEFINED_glGenVertexArrays void __stdcall GLee_Lazy_glGenVertexArrays(GLsizei n, GLuint * arrays) {if (GLeeInit()) glGenVertexArrays(n, arrays);} GLEEPFNGLGENVERTEXARRAYSPROC GLeeFuncPtr_glGenVertexArrays=GLee_Lazy_glGenVertexArrays; #endif #ifndef GLEE_C_DEFINED_glIsVertexArray #define GLEE_C_DEFINED_glIsVertexArray GLboolean __stdcall GLee_Lazy_glIsVertexArray(GLuint array) {if (GLeeInit()) return glIsVertexArray(array); return (GLboolean)0;} GLEEPFNGLISVERTEXARRAYPROC GLeeFuncPtr_glIsVertexArray=GLee_Lazy_glIsVertexArray; #endif #endif /* GL_ARB_uniform_buffer_object */ #ifdef __GLEE_GL_ARB_uniform_buffer_object #ifndef GLEE_C_DEFINED_glGetUniformIndices #define GLEE_C_DEFINED_glGetUniformIndices void __stdcall GLee_Lazy_glGetUniformIndices(GLuint program, GLsizei uniformCount, const GLchar* const * uniformNames, GLuint * uniformIndices) {if (GLeeInit()) glGetUniformIndices(program, uniformCount, uniformNames, uniformIndices);} GLEEPFNGLGETUNIFORMINDICESPROC GLeeFuncPtr_glGetUniformIndices=GLee_Lazy_glGetUniformIndices; #endif #ifndef GLEE_C_DEFINED_glGetActiveUniformsiv #define GLEE_C_DEFINED_glGetActiveUniformsiv void __stdcall GLee_Lazy_glGetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint * uniformIndices, GLenum pname, GLint * params) {if (GLeeInit()) glGetActiveUniformsiv(program, uniformCount, uniformIndices, pname, params);} GLEEPFNGLGETACTIVEUNIFORMSIVPROC GLeeFuncPtr_glGetActiveUniformsiv=GLee_Lazy_glGetActiveUniformsiv; #endif #ifndef GLEE_C_DEFINED_glGetActiveUniformName #define GLEE_C_DEFINED_glGetActiveUniformName void __stdcall GLee_Lazy_glGetActiveUniformName(GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei * length, GLchar * uniformName) {if (GLeeInit()) glGetActiveUniformName(program, uniformIndex, bufSize, length, uniformName);} GLEEPFNGLGETACTIVEUNIFORMNAMEPROC GLeeFuncPtr_glGetActiveUniformName=GLee_Lazy_glGetActiveUniformName; #endif #ifndef GLEE_C_DEFINED_glGetUniformBlockIndex #define GLEE_C_DEFINED_glGetUniformBlockIndex GLuint __stdcall GLee_Lazy_glGetUniformBlockIndex(GLuint program, const GLchar * uniformBlockName) {if (GLeeInit()) return glGetUniformBlockIndex(program, uniformBlockName); return (GLuint)0;} GLEEPFNGLGETUNIFORMBLOCKINDEXPROC GLeeFuncPtr_glGetUniformBlockIndex=GLee_Lazy_glGetUniformBlockIndex; #endif #ifndef GLEE_C_DEFINED_glGetActiveUniformBlockiv #define GLEE_C_DEFINED_glGetActiveUniformBlockiv void __stdcall GLee_Lazy_glGetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint * params) {if (GLeeInit()) glGetActiveUniformBlockiv(program, uniformBlockIndex, pname, params);} GLEEPFNGLGETACTIVEUNIFORMBLOCKIVPROC GLeeFuncPtr_glGetActiveUniformBlockiv=GLee_Lazy_glGetActiveUniformBlockiv; #endif #ifndef GLEE_C_DEFINED_glGetActiveUniformBlockName #define GLEE_C_DEFINED_glGetActiveUniformBlockName void __stdcall GLee_Lazy_glGetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei * length, GLchar * uniformBlockName) {if (GLeeInit()) glGetActiveUniformBlockName(program, uniformBlockIndex, bufSize, length, uniformBlockName);} GLEEPFNGLGETACTIVEUNIFORMBLOCKNAMEPROC GLeeFuncPtr_glGetActiveUniformBlockName=GLee_Lazy_glGetActiveUniformBlockName; #endif #ifndef GLEE_C_DEFINED_glUniformBlockBinding #define GLEE_C_DEFINED_glUniformBlockBinding void __stdcall GLee_Lazy_glUniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding) {if (GLeeInit()) glUniformBlockBinding(program, uniformBlockIndex, uniformBlockBinding);} GLEEPFNGLUNIFORMBLOCKBINDINGPROC GLeeFuncPtr_glUniformBlockBinding=GLee_Lazy_glUniformBlockBinding; #endif #endif /* GL_ARB_compatibility */ #ifdef __GLEE_GL_ARB_compatibility #endif /* GL_ARB_copy_buffer */ #ifdef __GLEE_GL_ARB_copy_buffer #ifndef GLEE_C_DEFINED_glCopyBufferSubData #define GLEE_C_DEFINED_glCopyBufferSubData void __stdcall GLee_Lazy_glCopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) {if (GLeeInit()) glCopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size);} GLEEPFNGLCOPYBUFFERSUBDATAPROC GLeeFuncPtr_glCopyBufferSubData=GLee_Lazy_glCopyBufferSubData; #endif #endif /* GL_ARB_shader_texture_lod */ #ifdef __GLEE_GL_ARB_shader_texture_lod #endif /* GL_ARB_depth_clamp */ #ifdef __GLEE_GL_ARB_depth_clamp #endif /* GL_ARB_draw_elements_base_vertex */ #ifdef __GLEE_GL_ARB_draw_elements_base_vertex #ifndef GLEE_C_DEFINED_glDrawElementsBaseVertex #define GLEE_C_DEFINED_glDrawElementsBaseVertex void __stdcall GLee_Lazy_glDrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLint basevertex) {if (GLeeInit()) glDrawElementsBaseVertex(mode, count, type, indices, basevertex);} GLEEPFNGLDRAWELEMENTSBASEVERTEXPROC GLeeFuncPtr_glDrawElementsBaseVertex=GLee_Lazy_glDrawElementsBaseVertex; #endif #ifndef GLEE_C_DEFINED_glDrawRangeElementsBaseVertex #define GLEE_C_DEFINED_glDrawRangeElementsBaseVertex void __stdcall GLee_Lazy_glDrawRangeElementsBaseVertex(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices, GLint basevertex) {if (GLeeInit()) glDrawRangeElementsBaseVertex(mode, start, end, count, type, indices, basevertex);} GLEEPFNGLDRAWRANGEELEMENTSBASEVERTEXPROC GLeeFuncPtr_glDrawRangeElementsBaseVertex=GLee_Lazy_glDrawRangeElementsBaseVertex; #endif #ifndef GLEE_C_DEFINED_glDrawElementsInstancedBaseVertex #define GLEE_C_DEFINED_glDrawElementsInstancedBaseVertex void __stdcall GLee_Lazy_glDrawElementsInstancedBaseVertex(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLsizei instancecount, GLint basevertex) {if (GLeeInit()) glDrawElementsInstancedBaseVertex(mode, count, type, indices, instancecount, basevertex);} GLEEPFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC GLeeFuncPtr_glDrawElementsInstancedBaseVertex=GLee_Lazy_glDrawElementsInstancedBaseVertex; #endif #ifndef GLEE_C_DEFINED_glMultiDrawElementsBaseVertex #define GLEE_C_DEFINED_glMultiDrawElementsBaseVertex void __stdcall GLee_Lazy_glMultiDrawElementsBaseVertex(GLenum mode, const GLsizei * count, GLenum type, const GLvoid* const * indices, GLsizei drawcount, const GLint * basevertex) {if (GLeeInit()) glMultiDrawElementsBaseVertex(mode, count, type, indices, drawcount, basevertex);} GLEEPFNGLMULTIDRAWELEMENTSBASEVERTEXPROC GLeeFuncPtr_glMultiDrawElementsBaseVertex=GLee_Lazy_glMultiDrawElementsBaseVertex; #endif #endif /* GL_ARB_fragment_coord_conventions */ #ifdef __GLEE_GL_ARB_fragment_coord_conventions #endif /* GL_ARB_provoking_vertex */ #ifdef __GLEE_GL_ARB_provoking_vertex #ifndef GLEE_C_DEFINED_glProvokingVertex #define GLEE_C_DEFINED_glProvokingVertex void __stdcall GLee_Lazy_glProvokingVertex(GLenum mode) {if (GLeeInit()) glProvokingVertex(mode);} GLEEPFNGLPROVOKINGVERTEXPROC GLeeFuncPtr_glProvokingVertex=GLee_Lazy_glProvokingVertex; #endif #endif /* GL_ARB_seamless_cube_map */ #ifdef __GLEE_GL_ARB_seamless_cube_map #endif /* GL_ARB_sync */ #ifdef __GLEE_GL_ARB_sync #ifndef GLEE_C_DEFINED_glFenceSync #define GLEE_C_DEFINED_glFenceSync GLsync __stdcall GLee_Lazy_glFenceSync(GLenum condition, GLbitfield flags) {if (GLeeInit()) return glFenceSync(condition, flags); return (GLsync)0;} GLEEPFNGLFENCESYNCPROC GLeeFuncPtr_glFenceSync=GLee_Lazy_glFenceSync; #endif #ifndef GLEE_C_DEFINED_glIsSync #define GLEE_C_DEFINED_glIsSync GLboolean __stdcall GLee_Lazy_glIsSync(GLsync sync) {if (GLeeInit()) return glIsSync(sync); return (GLboolean)0;} GLEEPFNGLISSYNCPROC GLeeFuncPtr_glIsSync=GLee_Lazy_glIsSync; #endif #ifndef GLEE_C_DEFINED_glDeleteSync #define GLEE_C_DEFINED_glDeleteSync void __stdcall GLee_Lazy_glDeleteSync(GLsync sync) {if (GLeeInit()) glDeleteSync(sync);} GLEEPFNGLDELETESYNCPROC GLeeFuncPtr_glDeleteSync=GLee_Lazy_glDeleteSync; #endif #ifndef GLEE_C_DEFINED_glClientWaitSync #define GLEE_C_DEFINED_glClientWaitSync GLenum __stdcall GLee_Lazy_glClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout) {if (GLeeInit()) return glClientWaitSync(sync, flags, timeout); return (GLenum)0;} GLEEPFNGLCLIENTWAITSYNCPROC GLeeFuncPtr_glClientWaitSync=GLee_Lazy_glClientWaitSync; #endif #ifndef GLEE_C_DEFINED_glWaitSync #define GLEE_C_DEFINED_glWaitSync void __stdcall GLee_Lazy_glWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout) {if (GLeeInit()) glWaitSync(sync, flags, timeout);} GLEEPFNGLWAITSYNCPROC GLeeFuncPtr_glWaitSync=GLee_Lazy_glWaitSync; #endif #ifndef GLEE_C_DEFINED_glGetInteger64v #define GLEE_C_DEFINED_glGetInteger64v void __stdcall GLee_Lazy_glGetInteger64v(GLenum pname, GLint64 * params) {if (GLeeInit()) glGetInteger64v(pname, params);} GLEEPFNGLGETINTEGER64VPROC GLeeFuncPtr_glGetInteger64v=GLee_Lazy_glGetInteger64v; #endif #ifndef GLEE_C_DEFINED_glGetSynciv #define GLEE_C_DEFINED_glGetSynciv void __stdcall GLee_Lazy_glGetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * values) {if (GLeeInit()) glGetSynciv(sync, pname, bufSize, length, values);} GLEEPFNGLGETSYNCIVPROC GLeeFuncPtr_glGetSynciv=GLee_Lazy_glGetSynciv; #endif #endif /* GL_ARB_texture_multisample */ #ifdef __GLEE_GL_ARB_texture_multisample #ifndef GLEE_C_DEFINED_glTexImage2DMultisample #define GLEE_C_DEFINED_glTexImage2DMultisample void __stdcall GLee_Lazy_glTexImage2DMultisample(GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations) {if (GLeeInit()) glTexImage2DMultisample(target, samples, internalformat, width, height, fixedsamplelocations);} GLEEPFNGLTEXIMAGE2DMULTISAMPLEPROC GLeeFuncPtr_glTexImage2DMultisample=GLee_Lazy_glTexImage2DMultisample; #endif #ifndef GLEE_C_DEFINED_glTexImage3DMultisample #define GLEE_C_DEFINED_glTexImage3DMultisample void __stdcall GLee_Lazy_glTexImage3DMultisample(GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations) {if (GLeeInit()) glTexImage3DMultisample(target, samples, internalformat, width, height, depth, fixedsamplelocations);} GLEEPFNGLTEXIMAGE3DMULTISAMPLEPROC GLeeFuncPtr_glTexImage3DMultisample=GLee_Lazy_glTexImage3DMultisample; #endif #ifndef GLEE_C_DEFINED_glGetMultisamplefv #define GLEE_C_DEFINED_glGetMultisamplefv void __stdcall GLee_Lazy_glGetMultisamplefv(GLenum pname, GLuint index, GLfloat * val) {if (GLeeInit()) glGetMultisamplefv(pname, index, val);} GLEEPFNGLGETMULTISAMPLEFVPROC GLeeFuncPtr_glGetMultisamplefv=GLee_Lazy_glGetMultisamplefv; #endif #ifndef GLEE_C_DEFINED_glSampleMaski #define GLEE_C_DEFINED_glSampleMaski void __stdcall GLee_Lazy_glSampleMaski(GLuint index, GLbitfield mask) {if (GLeeInit()) glSampleMaski(index, mask);} GLEEPFNGLSAMPLEMASKIPROC GLeeFuncPtr_glSampleMaski=GLee_Lazy_glSampleMaski; #endif #endif /* GL_ARB_vertex_array_bgra */ #ifdef __GLEE_GL_ARB_vertex_array_bgra #endif /* GL_ARB_draw_buffers_blend */ #ifdef __GLEE_GL_ARB_draw_buffers_blend #ifndef GLEE_C_DEFINED_glBlendEquationiARB #define GLEE_C_DEFINED_glBlendEquationiARB void __stdcall GLee_Lazy_glBlendEquationiARB(GLuint buf, GLenum mode) {if (GLeeInit()) glBlendEquationiARB(buf, mode);} GLEEPFNGLBLENDEQUATIONIARBPROC GLeeFuncPtr_glBlendEquationiARB=GLee_Lazy_glBlendEquationiARB; #endif #ifndef GLEE_C_DEFINED_glBlendEquationSeparateiARB #define GLEE_C_DEFINED_glBlendEquationSeparateiARB void __stdcall GLee_Lazy_glBlendEquationSeparateiARB(GLuint buf, GLenum modeRGB, GLenum modeAlpha) {if (GLeeInit()) glBlendEquationSeparateiARB(buf, modeRGB, modeAlpha);} GLEEPFNGLBLENDEQUATIONSEPARATEIARBPROC GLeeFuncPtr_glBlendEquationSeparateiARB=GLee_Lazy_glBlendEquationSeparateiARB; #endif #ifndef GLEE_C_DEFINED_glBlendFunciARB #define GLEE_C_DEFINED_glBlendFunciARB void __stdcall GLee_Lazy_glBlendFunciARB(GLuint buf, GLenum src, GLenum dst) {if (GLeeInit()) glBlendFunciARB(buf, src, dst);} GLEEPFNGLBLENDFUNCIARBPROC GLeeFuncPtr_glBlendFunciARB=GLee_Lazy_glBlendFunciARB; #endif #ifndef GLEE_C_DEFINED_glBlendFuncSeparateiARB #define GLEE_C_DEFINED_glBlendFuncSeparateiARB void __stdcall GLee_Lazy_glBlendFuncSeparateiARB(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) {if (GLeeInit()) glBlendFuncSeparateiARB(buf, srcRGB, dstRGB, srcAlpha, dstAlpha);} GLEEPFNGLBLENDFUNCSEPARATEIARBPROC GLeeFuncPtr_glBlendFuncSeparateiARB=GLee_Lazy_glBlendFuncSeparateiARB; #endif #endif /* GL_ARB_sample_shading */ #ifdef __GLEE_GL_ARB_sample_shading #ifndef GLEE_C_DEFINED_glMinSampleShadingARB #define GLEE_C_DEFINED_glMinSampleShadingARB void __stdcall GLee_Lazy_glMinSampleShadingARB(GLfloat value) {if (GLeeInit()) glMinSampleShadingARB(value);} GLEEPFNGLMINSAMPLESHADINGARBPROC GLeeFuncPtr_glMinSampleShadingARB=GLee_Lazy_glMinSampleShadingARB; #endif #endif /* GL_ARB_texture_cube_map_array */ #ifdef __GLEE_GL_ARB_texture_cube_map_array #endif /* GL_ARB_texture_gather */ #ifdef __GLEE_GL_ARB_texture_gather #endif /* GL_ARB_texture_query_lod */ #ifdef __GLEE_GL_ARB_texture_query_lod #endif /* GL_ARB_shading_language_include */ #ifdef __GLEE_GL_ARB_shading_language_include #ifndef GLEE_C_DEFINED_glNamedStringARB #define GLEE_C_DEFINED_glNamedStringARB void __stdcall GLee_Lazy_glNamedStringARB(GLenum type, GLint namelen, const GLchar * name, GLint stringlen, const GLchar * string) {if (GLeeInit()) glNamedStringARB(type, namelen, name, stringlen, string);} GLEEPFNGLNAMEDSTRINGARBPROC GLeeFuncPtr_glNamedStringARB=GLee_Lazy_glNamedStringARB; #endif #ifndef GLEE_C_DEFINED_glDeleteNamedStringARB #define GLEE_C_DEFINED_glDeleteNamedStringARB void __stdcall GLee_Lazy_glDeleteNamedStringARB(GLint namelen, const GLchar * name) {if (GLeeInit()) glDeleteNamedStringARB(namelen, name);} GLEEPFNGLDELETENAMEDSTRINGARBPROC GLeeFuncPtr_glDeleteNamedStringARB=GLee_Lazy_glDeleteNamedStringARB; #endif #ifndef GLEE_C_DEFINED_glCompileShaderIncludeARB #define GLEE_C_DEFINED_glCompileShaderIncludeARB void __stdcall GLee_Lazy_glCompileShaderIncludeARB(GLuint shader, GLsizei count, const GLchar* * path, const GLint * length) {if (GLeeInit()) glCompileShaderIncludeARB(shader, count, path, length);} GLEEPFNGLCOMPILESHADERINCLUDEARBPROC GLeeFuncPtr_glCompileShaderIncludeARB=GLee_Lazy_glCompileShaderIncludeARB; #endif #ifndef GLEE_C_DEFINED_glIsNamedStringARB #define GLEE_C_DEFINED_glIsNamedStringARB GLboolean __stdcall GLee_Lazy_glIsNamedStringARB(GLint namelen, const GLchar * name) {if (GLeeInit()) return glIsNamedStringARB(namelen, name); return (GLboolean)0;} GLEEPFNGLISNAMEDSTRINGARBPROC GLeeFuncPtr_glIsNamedStringARB=GLee_Lazy_glIsNamedStringARB; #endif #ifndef GLEE_C_DEFINED_glGetNamedStringARB #define GLEE_C_DEFINED_glGetNamedStringARB void __stdcall GLee_Lazy_glGetNamedStringARB(GLint namelen, const GLchar * name, GLsizei bufSize, GLint * stringlen, GLchar * string) {if (GLeeInit()) glGetNamedStringARB(namelen, name, bufSize, stringlen, string);} GLEEPFNGLGETNAMEDSTRINGARBPROC GLeeFuncPtr_glGetNamedStringARB=GLee_Lazy_glGetNamedStringARB; #endif #ifndef GLEE_C_DEFINED_glGetNamedStringivARB #define GLEE_C_DEFINED_glGetNamedStringivARB void __stdcall GLee_Lazy_glGetNamedStringivARB(GLint namelen, const GLchar * name, GLenum pname, GLint * params) {if (GLeeInit()) glGetNamedStringivARB(namelen, name, pname, params);} GLEEPFNGLGETNAMEDSTRINGIVARBPROC GLeeFuncPtr_glGetNamedStringivARB=GLee_Lazy_glGetNamedStringivARB; #endif #endif /* GL_ARB_texture_compression_bptc */ #ifdef __GLEE_GL_ARB_texture_compression_bptc #endif /* GL_ARB_blend_func_extended */ #ifdef __GLEE_GL_ARB_blend_func_extended #ifndef GLEE_C_DEFINED_glBindFragDataLocationIndexed #define GLEE_C_DEFINED_glBindFragDataLocationIndexed void __stdcall GLee_Lazy_glBindFragDataLocationIndexed(GLuint program, GLuint colorNumber, GLuint index, const GLchar * name) {if (GLeeInit()) glBindFragDataLocationIndexed(program, colorNumber, index, name);} GLEEPFNGLBINDFRAGDATALOCATIONINDEXEDPROC GLeeFuncPtr_glBindFragDataLocationIndexed=GLee_Lazy_glBindFragDataLocationIndexed; #endif #ifndef GLEE_C_DEFINED_glGetFragDataIndex #define GLEE_C_DEFINED_glGetFragDataIndex GLint __stdcall GLee_Lazy_glGetFragDataIndex(GLuint program, const GLchar * name) {if (GLeeInit()) return glGetFragDataIndex(program, name); return (GLint)0;} GLEEPFNGLGETFRAGDATAINDEXPROC GLeeFuncPtr_glGetFragDataIndex=GLee_Lazy_glGetFragDataIndex; #endif #endif /* GL_ARB_explicit_attrib_location */ #ifdef __GLEE_GL_ARB_explicit_attrib_location #endif /* GL_ARB_occlusion_query2 */ #ifdef __GLEE_GL_ARB_occlusion_query2 #endif /* GL_ARB_sampler_objects */ #ifdef __GLEE_GL_ARB_sampler_objects #ifndef GLEE_C_DEFINED_glGenSamplers #define GLEE_C_DEFINED_glGenSamplers void __stdcall GLee_Lazy_glGenSamplers(GLsizei count, GLuint * samplers) {if (GLeeInit()) glGenSamplers(count, samplers);} GLEEPFNGLGENSAMPLERSPROC GLeeFuncPtr_glGenSamplers=GLee_Lazy_glGenSamplers; #endif #ifndef GLEE_C_DEFINED_glDeleteSamplers #define GLEE_C_DEFINED_glDeleteSamplers void __stdcall GLee_Lazy_glDeleteSamplers(GLsizei count, const GLuint * samplers) {if (GLeeInit()) glDeleteSamplers(count, samplers);} GLEEPFNGLDELETESAMPLERSPROC GLeeFuncPtr_glDeleteSamplers=GLee_Lazy_glDeleteSamplers; #endif #ifndef GLEE_C_DEFINED_glIsSampler #define GLEE_C_DEFINED_glIsSampler GLboolean __stdcall GLee_Lazy_glIsSampler(GLuint sampler) {if (GLeeInit()) return glIsSampler(sampler); return (GLboolean)0;} GLEEPFNGLISSAMPLERPROC GLeeFuncPtr_glIsSampler=GLee_Lazy_glIsSampler; #endif #ifndef GLEE_C_DEFINED_glBindSampler #define GLEE_C_DEFINED_glBindSampler void __stdcall GLee_Lazy_glBindSampler(GLuint unit, GLuint sampler) {if (GLeeInit()) glBindSampler(unit, sampler);} GLEEPFNGLBINDSAMPLERPROC GLeeFuncPtr_glBindSampler=GLee_Lazy_glBindSampler; #endif #ifndef GLEE_C_DEFINED_glSamplerParameteri #define GLEE_C_DEFINED_glSamplerParameteri void __stdcall GLee_Lazy_glSamplerParameteri(GLuint sampler, GLenum pname, GLint param) {if (GLeeInit()) glSamplerParameteri(sampler, pname, param);} GLEEPFNGLSAMPLERPARAMETERIPROC GLeeFuncPtr_glSamplerParameteri=GLee_Lazy_glSamplerParameteri; #endif #ifndef GLEE_C_DEFINED_glSamplerParameteriv #define GLEE_C_DEFINED_glSamplerParameteriv void __stdcall GLee_Lazy_glSamplerParameteriv(GLuint sampler, GLenum pname, const GLint * param) {if (GLeeInit()) glSamplerParameteriv(sampler, pname, param);} GLEEPFNGLSAMPLERPARAMETERIVPROC GLeeFuncPtr_glSamplerParameteriv=GLee_Lazy_glSamplerParameteriv; #endif #ifndef GLEE_C_DEFINED_glSamplerParameterf #define GLEE_C_DEFINED_glSamplerParameterf void __stdcall GLee_Lazy_glSamplerParameterf(GLuint sampler, GLenum pname, GLfloat param) {if (GLeeInit()) glSamplerParameterf(sampler, pname, param);} GLEEPFNGLSAMPLERPARAMETERFPROC GLeeFuncPtr_glSamplerParameterf=GLee_Lazy_glSamplerParameterf; #endif #ifndef GLEE_C_DEFINED_glSamplerParameterfv #define GLEE_C_DEFINED_glSamplerParameterfv void __stdcall GLee_Lazy_glSamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat * param) {if (GLeeInit()) glSamplerParameterfv(sampler, pname, param);} GLEEPFNGLSAMPLERPARAMETERFVPROC GLeeFuncPtr_glSamplerParameterfv=GLee_Lazy_glSamplerParameterfv; #endif #ifndef GLEE_C_DEFINED_glSamplerParameterIiv #define GLEE_C_DEFINED_glSamplerParameterIiv void __stdcall GLee_Lazy_glSamplerParameterIiv(GLuint sampler, GLenum pname, const GLint * param) {if (GLeeInit()) glSamplerParameterIiv(sampler, pname, param);} GLEEPFNGLSAMPLERPARAMETERIIVPROC GLeeFuncPtr_glSamplerParameterIiv=GLee_Lazy_glSamplerParameterIiv; #endif #ifndef GLEE_C_DEFINED_glSamplerParameterIuiv #define GLEE_C_DEFINED_glSamplerParameterIuiv void __stdcall GLee_Lazy_glSamplerParameterIuiv(GLuint sampler, GLenum pname, const GLuint * param) {if (GLeeInit()) glSamplerParameterIuiv(sampler, pname, param);} GLEEPFNGLSAMPLERPARAMETERIUIVPROC GLeeFuncPtr_glSamplerParameterIuiv=GLee_Lazy_glSamplerParameterIuiv; #endif #ifndef GLEE_C_DEFINED_glGetSamplerParameteriv #define GLEE_C_DEFINED_glGetSamplerParameteriv void __stdcall GLee_Lazy_glGetSamplerParameteriv(GLuint sampler, GLenum pname, GLint * params) {if (GLeeInit()) glGetSamplerParameteriv(sampler, pname, params);} GLEEPFNGLGETSAMPLERPARAMETERIVPROC GLeeFuncPtr_glGetSamplerParameteriv=GLee_Lazy_glGetSamplerParameteriv; #endif #ifndef GLEE_C_DEFINED_glGetSamplerParameterIiv #define GLEE_C_DEFINED_glGetSamplerParameterIiv void __stdcall GLee_Lazy_glGetSamplerParameterIiv(GLuint sampler, GLenum pname, GLint * params) {if (GLeeInit()) glGetSamplerParameterIiv(sampler, pname, params);} GLEEPFNGLGETSAMPLERPARAMETERIIVPROC GLeeFuncPtr_glGetSamplerParameterIiv=GLee_Lazy_glGetSamplerParameterIiv; #endif #ifndef GLEE_C_DEFINED_glGetSamplerParameterfv #define GLEE_C_DEFINED_glGetSamplerParameterfv void __stdcall GLee_Lazy_glGetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetSamplerParameterfv(sampler, pname, params);} GLEEPFNGLGETSAMPLERPARAMETERFVPROC GLeeFuncPtr_glGetSamplerParameterfv=GLee_Lazy_glGetSamplerParameterfv; #endif #ifndef GLEE_C_DEFINED_glGetSamplerParameterIuiv #define GLEE_C_DEFINED_glGetSamplerParameterIuiv void __stdcall GLee_Lazy_glGetSamplerParameterIuiv(GLuint sampler, GLenum pname, GLuint * params) {if (GLeeInit()) glGetSamplerParameterIuiv(sampler, pname, params);} GLEEPFNGLGETSAMPLERPARAMETERIUIVPROC GLeeFuncPtr_glGetSamplerParameterIuiv=GLee_Lazy_glGetSamplerParameterIuiv; #endif #endif /* GL_ARB_shader_bit_encoding */ #ifdef __GLEE_GL_ARB_shader_bit_encoding #endif /* GL_ARB_texture_rgb10_a2ui */ #ifdef __GLEE_GL_ARB_texture_rgb10_a2ui #endif /* GL_ARB_texture_swizzle */ #ifdef __GLEE_GL_ARB_texture_swizzle #endif /* GL_ARB_timer_query */ #ifdef __GLEE_GL_ARB_timer_query #ifndef GLEE_C_DEFINED_glQueryCounter #define GLEE_C_DEFINED_glQueryCounter void __stdcall GLee_Lazy_glQueryCounter(GLuint id, GLenum target) {if (GLeeInit()) glQueryCounter(id, target);} GLEEPFNGLQUERYCOUNTERPROC GLeeFuncPtr_glQueryCounter=GLee_Lazy_glQueryCounter; #endif #ifndef GLEE_C_DEFINED_glGetQueryObjecti64v #define GLEE_C_DEFINED_glGetQueryObjecti64v void __stdcall GLee_Lazy_glGetQueryObjecti64v(GLuint id, GLenum pname, GLint64 * params) {if (GLeeInit()) glGetQueryObjecti64v(id, pname, params);} GLEEPFNGLGETQUERYOBJECTI64VPROC GLeeFuncPtr_glGetQueryObjecti64v=GLee_Lazy_glGetQueryObjecti64v; #endif #ifndef GLEE_C_DEFINED_glGetQueryObjectui64v #define GLEE_C_DEFINED_glGetQueryObjectui64v void __stdcall GLee_Lazy_glGetQueryObjectui64v(GLuint id, GLenum pname, GLuint64 * params) {if (GLeeInit()) glGetQueryObjectui64v(id, pname, params);} GLEEPFNGLGETQUERYOBJECTUI64VPROC GLeeFuncPtr_glGetQueryObjectui64v=GLee_Lazy_glGetQueryObjectui64v; #endif #endif /* GL_ARB_vertex_type_2_10_10_10_rev */ #ifdef __GLEE_GL_ARB_vertex_type_2_10_10_10_rev #ifndef GLEE_C_DEFINED_glVertexP2ui #define GLEE_C_DEFINED_glVertexP2ui void __stdcall GLee_Lazy_glVertexP2ui(GLenum type, GLuint value) {if (GLeeInit()) glVertexP2ui(type, value);} GLEEPFNGLVERTEXP2UIPROC GLeeFuncPtr_glVertexP2ui=GLee_Lazy_glVertexP2ui; #endif #ifndef GLEE_C_DEFINED_glVertexP2uiv #define GLEE_C_DEFINED_glVertexP2uiv void __stdcall GLee_Lazy_glVertexP2uiv(GLenum type, const GLuint * value) {if (GLeeInit()) glVertexP2uiv(type, value);} GLEEPFNGLVERTEXP2UIVPROC GLeeFuncPtr_glVertexP2uiv=GLee_Lazy_glVertexP2uiv; #endif #ifndef GLEE_C_DEFINED_glVertexP3ui #define GLEE_C_DEFINED_glVertexP3ui void __stdcall GLee_Lazy_glVertexP3ui(GLenum type, GLuint value) {if (GLeeInit()) glVertexP3ui(type, value);} GLEEPFNGLVERTEXP3UIPROC GLeeFuncPtr_glVertexP3ui=GLee_Lazy_glVertexP3ui; #endif #ifndef GLEE_C_DEFINED_glVertexP3uiv #define GLEE_C_DEFINED_glVertexP3uiv void __stdcall GLee_Lazy_glVertexP3uiv(GLenum type, const GLuint * value) {if (GLeeInit()) glVertexP3uiv(type, value);} GLEEPFNGLVERTEXP3UIVPROC GLeeFuncPtr_glVertexP3uiv=GLee_Lazy_glVertexP3uiv; #endif #ifndef GLEE_C_DEFINED_glVertexP4ui #define GLEE_C_DEFINED_glVertexP4ui void __stdcall GLee_Lazy_glVertexP4ui(GLenum type, GLuint value) {if (GLeeInit()) glVertexP4ui(type, value);} GLEEPFNGLVERTEXP4UIPROC GLeeFuncPtr_glVertexP4ui=GLee_Lazy_glVertexP4ui; #endif #ifndef GLEE_C_DEFINED_glVertexP4uiv #define GLEE_C_DEFINED_glVertexP4uiv void __stdcall GLee_Lazy_glVertexP4uiv(GLenum type, const GLuint * value) {if (GLeeInit()) glVertexP4uiv(type, value);} GLEEPFNGLVERTEXP4UIVPROC GLeeFuncPtr_glVertexP4uiv=GLee_Lazy_glVertexP4uiv; #endif #ifndef GLEE_C_DEFINED_glTexCoordP1ui #define GLEE_C_DEFINED_glTexCoordP1ui void __stdcall GLee_Lazy_glTexCoordP1ui(GLenum type, GLuint coords) {if (GLeeInit()) glTexCoordP1ui(type, coords);} GLEEPFNGLTEXCOORDP1UIPROC GLeeFuncPtr_glTexCoordP1ui=GLee_Lazy_glTexCoordP1ui; #endif #ifndef GLEE_C_DEFINED_glTexCoordP1uiv #define GLEE_C_DEFINED_glTexCoordP1uiv void __stdcall GLee_Lazy_glTexCoordP1uiv(GLenum type, const GLuint * coords) {if (GLeeInit()) glTexCoordP1uiv(type, coords);} GLEEPFNGLTEXCOORDP1UIVPROC GLeeFuncPtr_glTexCoordP1uiv=GLee_Lazy_glTexCoordP1uiv; #endif #ifndef GLEE_C_DEFINED_glTexCoordP2ui #define GLEE_C_DEFINED_glTexCoordP2ui void __stdcall GLee_Lazy_glTexCoordP2ui(GLenum type, GLuint coords) {if (GLeeInit()) glTexCoordP2ui(type, coords);} GLEEPFNGLTEXCOORDP2UIPROC GLeeFuncPtr_glTexCoordP2ui=GLee_Lazy_glTexCoordP2ui; #endif #ifndef GLEE_C_DEFINED_glTexCoordP2uiv #define GLEE_C_DEFINED_glTexCoordP2uiv void __stdcall GLee_Lazy_glTexCoordP2uiv(GLenum type, const GLuint * coords) {if (GLeeInit()) glTexCoordP2uiv(type, coords);} GLEEPFNGLTEXCOORDP2UIVPROC GLeeFuncPtr_glTexCoordP2uiv=GLee_Lazy_glTexCoordP2uiv; #endif #ifndef GLEE_C_DEFINED_glTexCoordP3ui #define GLEE_C_DEFINED_glTexCoordP3ui void __stdcall GLee_Lazy_glTexCoordP3ui(GLenum type, GLuint coords) {if (GLeeInit()) glTexCoordP3ui(type, coords);} GLEEPFNGLTEXCOORDP3UIPROC GLeeFuncPtr_glTexCoordP3ui=GLee_Lazy_glTexCoordP3ui; #endif #ifndef GLEE_C_DEFINED_glTexCoordP3uiv #define GLEE_C_DEFINED_glTexCoordP3uiv void __stdcall GLee_Lazy_glTexCoordP3uiv(GLenum type, const GLuint * coords) {if (GLeeInit()) glTexCoordP3uiv(type, coords);} GLEEPFNGLTEXCOORDP3UIVPROC GLeeFuncPtr_glTexCoordP3uiv=GLee_Lazy_glTexCoordP3uiv; #endif #ifndef GLEE_C_DEFINED_glTexCoordP4ui #define GLEE_C_DEFINED_glTexCoordP4ui void __stdcall GLee_Lazy_glTexCoordP4ui(GLenum type, GLuint coords) {if (GLeeInit()) glTexCoordP4ui(type, coords);} GLEEPFNGLTEXCOORDP4UIPROC GLeeFuncPtr_glTexCoordP4ui=GLee_Lazy_glTexCoordP4ui; #endif #ifndef GLEE_C_DEFINED_glTexCoordP4uiv #define GLEE_C_DEFINED_glTexCoordP4uiv void __stdcall GLee_Lazy_glTexCoordP4uiv(GLenum type, const GLuint * coords) {if (GLeeInit()) glTexCoordP4uiv(type, coords);} GLEEPFNGLTEXCOORDP4UIVPROC GLeeFuncPtr_glTexCoordP4uiv=GLee_Lazy_glTexCoordP4uiv; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoordP1ui #define GLEE_C_DEFINED_glMultiTexCoordP1ui void __stdcall GLee_Lazy_glMultiTexCoordP1ui(GLenum texture, GLenum type, GLuint coords) {if (GLeeInit()) glMultiTexCoordP1ui(texture, type, coords);} GLEEPFNGLMULTITEXCOORDP1UIPROC GLeeFuncPtr_glMultiTexCoordP1ui=GLee_Lazy_glMultiTexCoordP1ui; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoordP1uiv #define GLEE_C_DEFINED_glMultiTexCoordP1uiv void __stdcall GLee_Lazy_glMultiTexCoordP1uiv(GLenum texture, GLenum type, const GLuint * coords) {if (GLeeInit()) glMultiTexCoordP1uiv(texture, type, coords);} GLEEPFNGLMULTITEXCOORDP1UIVPROC GLeeFuncPtr_glMultiTexCoordP1uiv=GLee_Lazy_glMultiTexCoordP1uiv; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoordP2ui #define GLEE_C_DEFINED_glMultiTexCoordP2ui void __stdcall GLee_Lazy_glMultiTexCoordP2ui(GLenum texture, GLenum type, GLuint coords) {if (GLeeInit()) glMultiTexCoordP2ui(texture, type, coords);} GLEEPFNGLMULTITEXCOORDP2UIPROC GLeeFuncPtr_glMultiTexCoordP2ui=GLee_Lazy_glMultiTexCoordP2ui; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoordP2uiv #define GLEE_C_DEFINED_glMultiTexCoordP2uiv void __stdcall GLee_Lazy_glMultiTexCoordP2uiv(GLenum texture, GLenum type, const GLuint * coords) {if (GLeeInit()) glMultiTexCoordP2uiv(texture, type, coords);} GLEEPFNGLMULTITEXCOORDP2UIVPROC GLeeFuncPtr_glMultiTexCoordP2uiv=GLee_Lazy_glMultiTexCoordP2uiv; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoordP3ui #define GLEE_C_DEFINED_glMultiTexCoordP3ui void __stdcall GLee_Lazy_glMultiTexCoordP3ui(GLenum texture, GLenum type, GLuint coords) {if (GLeeInit()) glMultiTexCoordP3ui(texture, type, coords);} GLEEPFNGLMULTITEXCOORDP3UIPROC GLeeFuncPtr_glMultiTexCoordP3ui=GLee_Lazy_glMultiTexCoordP3ui; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoordP3uiv #define GLEE_C_DEFINED_glMultiTexCoordP3uiv void __stdcall GLee_Lazy_glMultiTexCoordP3uiv(GLenum texture, GLenum type, const GLuint * coords) {if (GLeeInit()) glMultiTexCoordP3uiv(texture, type, coords);} GLEEPFNGLMULTITEXCOORDP3UIVPROC GLeeFuncPtr_glMultiTexCoordP3uiv=GLee_Lazy_glMultiTexCoordP3uiv; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoordP4ui #define GLEE_C_DEFINED_glMultiTexCoordP4ui void __stdcall GLee_Lazy_glMultiTexCoordP4ui(GLenum texture, GLenum type, GLuint coords) {if (GLeeInit()) glMultiTexCoordP4ui(texture, type, coords);} GLEEPFNGLMULTITEXCOORDP4UIPROC GLeeFuncPtr_glMultiTexCoordP4ui=GLee_Lazy_glMultiTexCoordP4ui; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoordP4uiv #define GLEE_C_DEFINED_glMultiTexCoordP4uiv void __stdcall GLee_Lazy_glMultiTexCoordP4uiv(GLenum texture, GLenum type, const GLuint * coords) {if (GLeeInit()) glMultiTexCoordP4uiv(texture, type, coords);} GLEEPFNGLMULTITEXCOORDP4UIVPROC GLeeFuncPtr_glMultiTexCoordP4uiv=GLee_Lazy_glMultiTexCoordP4uiv; #endif #ifndef GLEE_C_DEFINED_glNormalP3ui #define GLEE_C_DEFINED_glNormalP3ui void __stdcall GLee_Lazy_glNormalP3ui(GLenum type, GLuint coords) {if (GLeeInit()) glNormalP3ui(type, coords);} GLEEPFNGLNORMALP3UIPROC GLeeFuncPtr_glNormalP3ui=GLee_Lazy_glNormalP3ui; #endif #ifndef GLEE_C_DEFINED_glNormalP3uiv #define GLEE_C_DEFINED_glNormalP3uiv void __stdcall GLee_Lazy_glNormalP3uiv(GLenum type, const GLuint * coords) {if (GLeeInit()) glNormalP3uiv(type, coords);} GLEEPFNGLNORMALP3UIVPROC GLeeFuncPtr_glNormalP3uiv=GLee_Lazy_glNormalP3uiv; #endif #ifndef GLEE_C_DEFINED_glColorP3ui #define GLEE_C_DEFINED_glColorP3ui void __stdcall GLee_Lazy_glColorP3ui(GLenum type, GLuint color) {if (GLeeInit()) glColorP3ui(type, color);} GLEEPFNGLCOLORP3UIPROC GLeeFuncPtr_glColorP3ui=GLee_Lazy_glColorP3ui; #endif #ifndef GLEE_C_DEFINED_glColorP3uiv #define GLEE_C_DEFINED_glColorP3uiv void __stdcall GLee_Lazy_glColorP3uiv(GLenum type, const GLuint * color) {if (GLeeInit()) glColorP3uiv(type, color);} GLEEPFNGLCOLORP3UIVPROC GLeeFuncPtr_glColorP3uiv=GLee_Lazy_glColorP3uiv; #endif #ifndef GLEE_C_DEFINED_glColorP4ui #define GLEE_C_DEFINED_glColorP4ui void __stdcall GLee_Lazy_glColorP4ui(GLenum type, GLuint color) {if (GLeeInit()) glColorP4ui(type, color);} GLEEPFNGLCOLORP4UIPROC GLeeFuncPtr_glColorP4ui=GLee_Lazy_glColorP4ui; #endif #ifndef GLEE_C_DEFINED_glColorP4uiv #define GLEE_C_DEFINED_glColorP4uiv void __stdcall GLee_Lazy_glColorP4uiv(GLenum type, const GLuint * color) {if (GLeeInit()) glColorP4uiv(type, color);} GLEEPFNGLCOLORP4UIVPROC GLeeFuncPtr_glColorP4uiv=GLee_Lazy_glColorP4uiv; #endif #ifndef GLEE_C_DEFINED_glSecondaryColorP3ui #define GLEE_C_DEFINED_glSecondaryColorP3ui void __stdcall GLee_Lazy_glSecondaryColorP3ui(GLenum type, GLuint color) {if (GLeeInit()) glSecondaryColorP3ui(type, color);} GLEEPFNGLSECONDARYCOLORP3UIPROC GLeeFuncPtr_glSecondaryColorP3ui=GLee_Lazy_glSecondaryColorP3ui; #endif #ifndef GLEE_C_DEFINED_glSecondaryColorP3uiv #define GLEE_C_DEFINED_glSecondaryColorP3uiv void __stdcall GLee_Lazy_glSecondaryColorP3uiv(GLenum type, const GLuint * color) {if (GLeeInit()) glSecondaryColorP3uiv(type, color);} GLEEPFNGLSECONDARYCOLORP3UIVPROC GLeeFuncPtr_glSecondaryColorP3uiv=GLee_Lazy_glSecondaryColorP3uiv; #endif #ifndef GLEE_C_DEFINED_glVertexAttribP1ui #define GLEE_C_DEFINED_glVertexAttribP1ui void __stdcall GLee_Lazy_glVertexAttribP1ui(GLuint index, GLenum type, GLboolean normalized, GLuint value) {if (GLeeInit()) glVertexAttribP1ui(index, type, normalized, value);} GLEEPFNGLVERTEXATTRIBP1UIPROC GLeeFuncPtr_glVertexAttribP1ui=GLee_Lazy_glVertexAttribP1ui; #endif #ifndef GLEE_C_DEFINED_glVertexAttribP1uiv #define GLEE_C_DEFINED_glVertexAttribP1uiv void __stdcall GLee_Lazy_glVertexAttribP1uiv(GLuint index, GLenum type, GLboolean normalized, const GLuint * value) {if (GLeeInit()) glVertexAttribP1uiv(index, type, normalized, value);} GLEEPFNGLVERTEXATTRIBP1UIVPROC GLeeFuncPtr_glVertexAttribP1uiv=GLee_Lazy_glVertexAttribP1uiv; #endif #ifndef GLEE_C_DEFINED_glVertexAttribP2ui #define GLEE_C_DEFINED_glVertexAttribP2ui void __stdcall GLee_Lazy_glVertexAttribP2ui(GLuint index, GLenum type, GLboolean normalized, GLuint value) {if (GLeeInit()) glVertexAttribP2ui(index, type, normalized, value);} GLEEPFNGLVERTEXATTRIBP2UIPROC GLeeFuncPtr_glVertexAttribP2ui=GLee_Lazy_glVertexAttribP2ui; #endif #ifndef GLEE_C_DEFINED_glVertexAttribP2uiv #define GLEE_C_DEFINED_glVertexAttribP2uiv void __stdcall GLee_Lazy_glVertexAttribP2uiv(GLuint index, GLenum type, GLboolean normalized, const GLuint * value) {if (GLeeInit()) glVertexAttribP2uiv(index, type, normalized, value);} GLEEPFNGLVERTEXATTRIBP2UIVPROC GLeeFuncPtr_glVertexAttribP2uiv=GLee_Lazy_glVertexAttribP2uiv; #endif #ifndef GLEE_C_DEFINED_glVertexAttribP3ui #define GLEE_C_DEFINED_glVertexAttribP3ui void __stdcall GLee_Lazy_glVertexAttribP3ui(GLuint index, GLenum type, GLboolean normalized, GLuint value) {if (GLeeInit()) glVertexAttribP3ui(index, type, normalized, value);} GLEEPFNGLVERTEXATTRIBP3UIPROC GLeeFuncPtr_glVertexAttribP3ui=GLee_Lazy_glVertexAttribP3ui; #endif #ifndef GLEE_C_DEFINED_glVertexAttribP3uiv #define GLEE_C_DEFINED_glVertexAttribP3uiv void __stdcall GLee_Lazy_glVertexAttribP3uiv(GLuint index, GLenum type, GLboolean normalized, const GLuint * value) {if (GLeeInit()) glVertexAttribP3uiv(index, type, normalized, value);} GLEEPFNGLVERTEXATTRIBP3UIVPROC GLeeFuncPtr_glVertexAttribP3uiv=GLee_Lazy_glVertexAttribP3uiv; #endif #ifndef GLEE_C_DEFINED_glVertexAttribP4ui #define GLEE_C_DEFINED_glVertexAttribP4ui void __stdcall GLee_Lazy_glVertexAttribP4ui(GLuint index, GLenum type, GLboolean normalized, GLuint value) {if (GLeeInit()) glVertexAttribP4ui(index, type, normalized, value);} GLEEPFNGLVERTEXATTRIBP4UIPROC GLeeFuncPtr_glVertexAttribP4ui=GLee_Lazy_glVertexAttribP4ui; #endif #ifndef GLEE_C_DEFINED_glVertexAttribP4uiv #define GLEE_C_DEFINED_glVertexAttribP4uiv void __stdcall GLee_Lazy_glVertexAttribP4uiv(GLuint index, GLenum type, GLboolean normalized, const GLuint * value) {if (GLeeInit()) glVertexAttribP4uiv(index, type, normalized, value);} GLEEPFNGLVERTEXATTRIBP4UIVPROC GLeeFuncPtr_glVertexAttribP4uiv=GLee_Lazy_glVertexAttribP4uiv; #endif #endif /* GL_ARB_draw_indirect */ #ifdef __GLEE_GL_ARB_draw_indirect #ifndef GLEE_C_DEFINED_glDrawArraysIndirect #define GLEE_C_DEFINED_glDrawArraysIndirect void __stdcall GLee_Lazy_glDrawArraysIndirect(GLenum mode, const GLvoid * indirect) {if (GLeeInit()) glDrawArraysIndirect(mode, indirect);} GLEEPFNGLDRAWARRAYSINDIRECTPROC GLeeFuncPtr_glDrawArraysIndirect=GLee_Lazy_glDrawArraysIndirect; #endif #ifndef GLEE_C_DEFINED_glDrawElementsIndirect #define GLEE_C_DEFINED_glDrawElementsIndirect void __stdcall GLee_Lazy_glDrawElementsIndirect(GLenum mode, GLenum type, const GLvoid * indirect) {if (GLeeInit()) glDrawElementsIndirect(mode, type, indirect);} GLEEPFNGLDRAWELEMENTSINDIRECTPROC GLeeFuncPtr_glDrawElementsIndirect=GLee_Lazy_glDrawElementsIndirect; #endif #endif /* GL_ARB_gpu_shader5 */ #ifdef __GLEE_GL_ARB_gpu_shader5 #endif /* GL_ARB_gpu_shader_fp64 */ #ifdef __GLEE_GL_ARB_gpu_shader_fp64 #ifndef GLEE_C_DEFINED_glUniform1d #define GLEE_C_DEFINED_glUniform1d void __stdcall GLee_Lazy_glUniform1d(GLint location, GLdouble x) {if (GLeeInit()) glUniform1d(location, x);} GLEEPFNGLUNIFORM1DPROC GLeeFuncPtr_glUniform1d=GLee_Lazy_glUniform1d; #endif #ifndef GLEE_C_DEFINED_glUniform2d #define GLEE_C_DEFINED_glUniform2d void __stdcall GLee_Lazy_glUniform2d(GLint location, GLdouble x, GLdouble y) {if (GLeeInit()) glUniform2d(location, x, y);} GLEEPFNGLUNIFORM2DPROC GLeeFuncPtr_glUniform2d=GLee_Lazy_glUniform2d; #endif #ifndef GLEE_C_DEFINED_glUniform3d #define GLEE_C_DEFINED_glUniform3d void __stdcall GLee_Lazy_glUniform3d(GLint location, GLdouble x, GLdouble y, GLdouble z) {if (GLeeInit()) glUniform3d(location, x, y, z);} GLEEPFNGLUNIFORM3DPROC GLeeFuncPtr_glUniform3d=GLee_Lazy_glUniform3d; #endif #ifndef GLEE_C_DEFINED_glUniform4d #define GLEE_C_DEFINED_glUniform4d void __stdcall GLee_Lazy_glUniform4d(GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w) {if (GLeeInit()) glUniform4d(location, x, y, z, w);} GLEEPFNGLUNIFORM4DPROC GLeeFuncPtr_glUniform4d=GLee_Lazy_glUniform4d; #endif #ifndef GLEE_C_DEFINED_glUniform1dv #define GLEE_C_DEFINED_glUniform1dv void __stdcall GLee_Lazy_glUniform1dv(GLint location, GLsizei count, const GLdouble * value) {if (GLeeInit()) glUniform1dv(location, count, value);} GLEEPFNGLUNIFORM1DVPROC GLeeFuncPtr_glUniform1dv=GLee_Lazy_glUniform1dv; #endif #ifndef GLEE_C_DEFINED_glUniform2dv #define GLEE_C_DEFINED_glUniform2dv void __stdcall GLee_Lazy_glUniform2dv(GLint location, GLsizei count, const GLdouble * value) {if (GLeeInit()) glUniform2dv(location, count, value);} GLEEPFNGLUNIFORM2DVPROC GLeeFuncPtr_glUniform2dv=GLee_Lazy_glUniform2dv; #endif #ifndef GLEE_C_DEFINED_glUniform3dv #define GLEE_C_DEFINED_glUniform3dv void __stdcall GLee_Lazy_glUniform3dv(GLint location, GLsizei count, const GLdouble * value) {if (GLeeInit()) glUniform3dv(location, count, value);} GLEEPFNGLUNIFORM3DVPROC GLeeFuncPtr_glUniform3dv=GLee_Lazy_glUniform3dv; #endif #ifndef GLEE_C_DEFINED_glUniform4dv #define GLEE_C_DEFINED_glUniform4dv void __stdcall GLee_Lazy_glUniform4dv(GLint location, GLsizei count, const GLdouble * value) {if (GLeeInit()) glUniform4dv(location, count, value);} GLEEPFNGLUNIFORM4DVPROC GLeeFuncPtr_glUniform4dv=GLee_Lazy_glUniform4dv; #endif #ifndef GLEE_C_DEFINED_glUniformMatrix2dv #define GLEE_C_DEFINED_glUniformMatrix2dv void __stdcall GLee_Lazy_glUniformMatrix2dv(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value) {if (GLeeInit()) glUniformMatrix2dv(location, count, transpose, value);} GLEEPFNGLUNIFORMMATRIX2DVPROC GLeeFuncPtr_glUniformMatrix2dv=GLee_Lazy_glUniformMatrix2dv; #endif #ifndef GLEE_C_DEFINED_glUniformMatrix3dv #define GLEE_C_DEFINED_glUniformMatrix3dv void __stdcall GLee_Lazy_glUniformMatrix3dv(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value) {if (GLeeInit()) glUniformMatrix3dv(location, count, transpose, value);} GLEEPFNGLUNIFORMMATRIX3DVPROC GLeeFuncPtr_glUniformMatrix3dv=GLee_Lazy_glUniformMatrix3dv; #endif #ifndef GLEE_C_DEFINED_glUniformMatrix4dv #define GLEE_C_DEFINED_glUniformMatrix4dv void __stdcall GLee_Lazy_glUniformMatrix4dv(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value) {if (GLeeInit()) glUniformMatrix4dv(location, count, transpose, value);} GLEEPFNGLUNIFORMMATRIX4DVPROC GLeeFuncPtr_glUniformMatrix4dv=GLee_Lazy_glUniformMatrix4dv; #endif #ifndef GLEE_C_DEFINED_glUniformMatrix2x3dv #define GLEE_C_DEFINED_glUniformMatrix2x3dv void __stdcall GLee_Lazy_glUniformMatrix2x3dv(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value) {if (GLeeInit()) glUniformMatrix2x3dv(location, count, transpose, value);} GLEEPFNGLUNIFORMMATRIX2X3DVPROC GLeeFuncPtr_glUniformMatrix2x3dv=GLee_Lazy_glUniformMatrix2x3dv; #endif #ifndef GLEE_C_DEFINED_glUniformMatrix2x4dv #define GLEE_C_DEFINED_glUniformMatrix2x4dv void __stdcall GLee_Lazy_glUniformMatrix2x4dv(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value) {if (GLeeInit()) glUniformMatrix2x4dv(location, count, transpose, value);} GLEEPFNGLUNIFORMMATRIX2X4DVPROC GLeeFuncPtr_glUniformMatrix2x4dv=GLee_Lazy_glUniformMatrix2x4dv; #endif #ifndef GLEE_C_DEFINED_glUniformMatrix3x2dv #define GLEE_C_DEFINED_glUniformMatrix3x2dv void __stdcall GLee_Lazy_glUniformMatrix3x2dv(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value) {if (GLeeInit()) glUniformMatrix3x2dv(location, count, transpose, value);} GLEEPFNGLUNIFORMMATRIX3X2DVPROC GLeeFuncPtr_glUniformMatrix3x2dv=GLee_Lazy_glUniformMatrix3x2dv; #endif #ifndef GLEE_C_DEFINED_glUniformMatrix3x4dv #define GLEE_C_DEFINED_glUniformMatrix3x4dv void __stdcall GLee_Lazy_glUniformMatrix3x4dv(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value) {if (GLeeInit()) glUniformMatrix3x4dv(location, count, transpose, value);} GLEEPFNGLUNIFORMMATRIX3X4DVPROC GLeeFuncPtr_glUniformMatrix3x4dv=GLee_Lazy_glUniformMatrix3x4dv; #endif #ifndef GLEE_C_DEFINED_glUniformMatrix4x2dv #define GLEE_C_DEFINED_glUniformMatrix4x2dv void __stdcall GLee_Lazy_glUniformMatrix4x2dv(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value) {if (GLeeInit()) glUniformMatrix4x2dv(location, count, transpose, value);} GLEEPFNGLUNIFORMMATRIX4X2DVPROC GLeeFuncPtr_glUniformMatrix4x2dv=GLee_Lazy_glUniformMatrix4x2dv; #endif #ifndef GLEE_C_DEFINED_glUniformMatrix4x3dv #define GLEE_C_DEFINED_glUniformMatrix4x3dv void __stdcall GLee_Lazy_glUniformMatrix4x3dv(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value) {if (GLeeInit()) glUniformMatrix4x3dv(location, count, transpose, value);} GLEEPFNGLUNIFORMMATRIX4X3DVPROC GLeeFuncPtr_glUniformMatrix4x3dv=GLee_Lazy_glUniformMatrix4x3dv; #endif #ifndef GLEE_C_DEFINED_glGetUniformdv #define GLEE_C_DEFINED_glGetUniformdv void __stdcall GLee_Lazy_glGetUniformdv(GLuint program, GLint location, GLdouble * params) {if (GLeeInit()) glGetUniformdv(program, location, params);} GLEEPFNGLGETUNIFORMDVPROC GLeeFuncPtr_glGetUniformdv=GLee_Lazy_glGetUniformdv; #endif #endif /* GL_ARB_shader_subroutine */ #ifdef __GLEE_GL_ARB_shader_subroutine #ifndef GLEE_C_DEFINED_glGetSubroutineUniformLocation #define GLEE_C_DEFINED_glGetSubroutineUniformLocation GLint __stdcall GLee_Lazy_glGetSubroutineUniformLocation(GLuint program, GLenum shadertype, const GLchar * name) {if (GLeeInit()) return glGetSubroutineUniformLocation(program, shadertype, name); return (GLint)0;} GLEEPFNGLGETSUBROUTINEUNIFORMLOCATIONPROC GLeeFuncPtr_glGetSubroutineUniformLocation=GLee_Lazy_glGetSubroutineUniformLocation; #endif #ifndef GLEE_C_DEFINED_glGetSubroutineIndex #define GLEE_C_DEFINED_glGetSubroutineIndex GLuint __stdcall GLee_Lazy_glGetSubroutineIndex(GLuint program, GLenum shadertype, const GLchar * name) {if (GLeeInit()) return glGetSubroutineIndex(program, shadertype, name); return (GLuint)0;} GLEEPFNGLGETSUBROUTINEINDEXPROC GLeeFuncPtr_glGetSubroutineIndex=GLee_Lazy_glGetSubroutineIndex; #endif #ifndef GLEE_C_DEFINED_glGetActiveSubroutineUniformiv #define GLEE_C_DEFINED_glGetActiveSubroutineUniformiv void __stdcall GLee_Lazy_glGetActiveSubroutineUniformiv(GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint * values) {if (GLeeInit()) glGetActiveSubroutineUniformiv(program, shadertype, index, pname, values);} GLEEPFNGLGETACTIVESUBROUTINEUNIFORMIVPROC GLeeFuncPtr_glGetActiveSubroutineUniformiv=GLee_Lazy_glGetActiveSubroutineUniformiv; #endif #ifndef GLEE_C_DEFINED_glGetActiveSubroutineUniformName #define GLEE_C_DEFINED_glGetActiveSubroutineUniformName void __stdcall GLee_Lazy_glGetActiveSubroutineUniformName(GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei * length, GLchar * name) {if (GLeeInit()) glGetActiveSubroutineUniformName(program, shadertype, index, bufsize, length, name);} GLEEPFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC GLeeFuncPtr_glGetActiveSubroutineUniformName=GLee_Lazy_glGetActiveSubroutineUniformName; #endif #ifndef GLEE_C_DEFINED_glGetActiveSubroutineName #define GLEE_C_DEFINED_glGetActiveSubroutineName void __stdcall GLee_Lazy_glGetActiveSubroutineName(GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei * length, GLchar * name) {if (GLeeInit()) glGetActiveSubroutineName(program, shadertype, index, bufsize, length, name);} GLEEPFNGLGETACTIVESUBROUTINENAMEPROC GLeeFuncPtr_glGetActiveSubroutineName=GLee_Lazy_glGetActiveSubroutineName; #endif #ifndef GLEE_C_DEFINED_glUniformSubroutinesuiv #define GLEE_C_DEFINED_glUniformSubroutinesuiv void __stdcall GLee_Lazy_glUniformSubroutinesuiv(GLenum shadertype, GLsizei count, const GLuint * indices) {if (GLeeInit()) glUniformSubroutinesuiv(shadertype, count, indices);} GLEEPFNGLUNIFORMSUBROUTINESUIVPROC GLeeFuncPtr_glUniformSubroutinesuiv=GLee_Lazy_glUniformSubroutinesuiv; #endif #ifndef GLEE_C_DEFINED_glGetUniformSubroutineuiv #define GLEE_C_DEFINED_glGetUniformSubroutineuiv void __stdcall GLee_Lazy_glGetUniformSubroutineuiv(GLenum shadertype, GLint location, GLuint * params) {if (GLeeInit()) glGetUniformSubroutineuiv(shadertype, location, params);} GLEEPFNGLGETUNIFORMSUBROUTINEUIVPROC GLeeFuncPtr_glGetUniformSubroutineuiv=GLee_Lazy_glGetUniformSubroutineuiv; #endif #ifndef GLEE_C_DEFINED_glGetProgramStageiv #define GLEE_C_DEFINED_glGetProgramStageiv void __stdcall GLee_Lazy_glGetProgramStageiv(GLuint program, GLenum shadertype, GLenum pname, GLint * values) {if (GLeeInit()) glGetProgramStageiv(program, shadertype, pname, values);} GLEEPFNGLGETPROGRAMSTAGEIVPROC GLeeFuncPtr_glGetProgramStageiv=GLee_Lazy_glGetProgramStageiv; #endif #endif /* GL_ARB_tessellation_shader */ #ifdef __GLEE_GL_ARB_tessellation_shader #ifndef GLEE_C_DEFINED_glPatchParameteri #define GLEE_C_DEFINED_glPatchParameteri void __stdcall GLee_Lazy_glPatchParameteri(GLenum pname, GLint value) {if (GLeeInit()) glPatchParameteri(pname, value);} GLEEPFNGLPATCHPARAMETERIPROC GLeeFuncPtr_glPatchParameteri=GLee_Lazy_glPatchParameteri; #endif #ifndef GLEE_C_DEFINED_glPatchParameterfv #define GLEE_C_DEFINED_glPatchParameterfv void __stdcall GLee_Lazy_glPatchParameterfv(GLenum pname, const GLfloat * values) {if (GLeeInit()) glPatchParameterfv(pname, values);} GLEEPFNGLPATCHPARAMETERFVPROC GLeeFuncPtr_glPatchParameterfv=GLee_Lazy_glPatchParameterfv; #endif #endif /* GL_ARB_texture_buffer_object_rgb32 */ #ifdef __GLEE_GL_ARB_texture_buffer_object_rgb32 #endif /* GL_ARB_transform_feedback2 */ #ifdef __GLEE_GL_ARB_transform_feedback2 #ifndef GLEE_C_DEFINED_glBindTransformFeedback #define GLEE_C_DEFINED_glBindTransformFeedback void __stdcall GLee_Lazy_glBindTransformFeedback(GLenum target, GLuint id) {if (GLeeInit()) glBindTransformFeedback(target, id);} GLEEPFNGLBINDTRANSFORMFEEDBACKPROC GLeeFuncPtr_glBindTransformFeedback=GLee_Lazy_glBindTransformFeedback; #endif #ifndef GLEE_C_DEFINED_glDeleteTransformFeedbacks #define GLEE_C_DEFINED_glDeleteTransformFeedbacks void __stdcall GLee_Lazy_glDeleteTransformFeedbacks(GLsizei n, const GLuint * ids) {if (GLeeInit()) glDeleteTransformFeedbacks(n, ids);} GLEEPFNGLDELETETRANSFORMFEEDBACKSPROC GLeeFuncPtr_glDeleteTransformFeedbacks=GLee_Lazy_glDeleteTransformFeedbacks; #endif #ifndef GLEE_C_DEFINED_glGenTransformFeedbacks #define GLEE_C_DEFINED_glGenTransformFeedbacks void __stdcall GLee_Lazy_glGenTransformFeedbacks(GLsizei n, GLuint * ids) {if (GLeeInit()) glGenTransformFeedbacks(n, ids);} GLEEPFNGLGENTRANSFORMFEEDBACKSPROC GLeeFuncPtr_glGenTransformFeedbacks=GLee_Lazy_glGenTransformFeedbacks; #endif #ifndef GLEE_C_DEFINED_glIsTransformFeedback #define GLEE_C_DEFINED_glIsTransformFeedback GLboolean __stdcall GLee_Lazy_glIsTransformFeedback(GLuint id) {if (GLeeInit()) return glIsTransformFeedback(id); return (GLboolean)0;} GLEEPFNGLISTRANSFORMFEEDBACKPROC GLeeFuncPtr_glIsTransformFeedback=GLee_Lazy_glIsTransformFeedback; #endif #ifndef GLEE_C_DEFINED_glPauseTransformFeedback #define GLEE_C_DEFINED_glPauseTransformFeedback void __stdcall GLee_Lazy_glPauseTransformFeedback(void) {if (GLeeInit()) glPauseTransformFeedback();} GLEEPFNGLPAUSETRANSFORMFEEDBACKPROC GLeeFuncPtr_glPauseTransformFeedback=GLee_Lazy_glPauseTransformFeedback; #endif #ifndef GLEE_C_DEFINED_glResumeTransformFeedback #define GLEE_C_DEFINED_glResumeTransformFeedback void __stdcall GLee_Lazy_glResumeTransformFeedback(void) {if (GLeeInit()) glResumeTransformFeedback();} GLEEPFNGLRESUMETRANSFORMFEEDBACKPROC GLeeFuncPtr_glResumeTransformFeedback=GLee_Lazy_glResumeTransformFeedback; #endif #ifndef GLEE_C_DEFINED_glDrawTransformFeedback #define GLEE_C_DEFINED_glDrawTransformFeedback void __stdcall GLee_Lazy_glDrawTransformFeedback(GLenum mode, GLuint id) {if (GLeeInit()) glDrawTransformFeedback(mode, id);} GLEEPFNGLDRAWTRANSFORMFEEDBACKPROC GLeeFuncPtr_glDrawTransformFeedback=GLee_Lazy_glDrawTransformFeedback; #endif #endif /* GL_ARB_transform_feedback3 */ #ifdef __GLEE_GL_ARB_transform_feedback3 #ifndef GLEE_C_DEFINED_glDrawTransformFeedbackStream #define GLEE_C_DEFINED_glDrawTransformFeedbackStream void __stdcall GLee_Lazy_glDrawTransformFeedbackStream(GLenum mode, GLuint id, GLuint stream) {if (GLeeInit()) glDrawTransformFeedbackStream(mode, id, stream);} GLEEPFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC GLeeFuncPtr_glDrawTransformFeedbackStream=GLee_Lazy_glDrawTransformFeedbackStream; #endif #ifndef GLEE_C_DEFINED_glBeginQueryIndexed #define GLEE_C_DEFINED_glBeginQueryIndexed void __stdcall GLee_Lazy_glBeginQueryIndexed(GLenum target, GLuint index, GLuint id) {if (GLeeInit()) glBeginQueryIndexed(target, index, id);} GLEEPFNGLBEGINQUERYINDEXEDPROC GLeeFuncPtr_glBeginQueryIndexed=GLee_Lazy_glBeginQueryIndexed; #endif #ifndef GLEE_C_DEFINED_glEndQueryIndexed #define GLEE_C_DEFINED_glEndQueryIndexed void __stdcall GLee_Lazy_glEndQueryIndexed(GLenum target, GLuint index) {if (GLeeInit()) glEndQueryIndexed(target, index);} GLEEPFNGLENDQUERYINDEXEDPROC GLeeFuncPtr_glEndQueryIndexed=GLee_Lazy_glEndQueryIndexed; #endif #ifndef GLEE_C_DEFINED_glGetQueryIndexediv #define GLEE_C_DEFINED_glGetQueryIndexediv void __stdcall GLee_Lazy_glGetQueryIndexediv(GLenum target, GLuint index, GLenum pname, GLint * params) {if (GLeeInit()) glGetQueryIndexediv(target, index, pname, params);} GLEEPFNGLGETQUERYINDEXEDIVPROC GLeeFuncPtr_glGetQueryIndexediv=GLee_Lazy_glGetQueryIndexediv; #endif #endif /* GL_ARB_ES2_compatibility */ #ifdef __GLEE_GL_ARB_ES2_compatibility #ifndef GLEE_C_DEFINED_glReleaseShaderCompiler #define GLEE_C_DEFINED_glReleaseShaderCompiler void __stdcall GLee_Lazy_glReleaseShaderCompiler(void) {if (GLeeInit()) glReleaseShaderCompiler();} GLEEPFNGLRELEASESHADERCOMPILERPROC GLeeFuncPtr_glReleaseShaderCompiler=GLee_Lazy_glReleaseShaderCompiler; #endif #ifndef GLEE_C_DEFINED_glShaderBinary #define GLEE_C_DEFINED_glShaderBinary void __stdcall GLee_Lazy_glShaderBinary(GLsizei count, const GLuint * shaders, GLenum binaryformat, const GLvoid * binary, GLsizei length) {if (GLeeInit()) glShaderBinary(count, shaders, binaryformat, binary, length);} GLEEPFNGLSHADERBINARYPROC GLeeFuncPtr_glShaderBinary=GLee_Lazy_glShaderBinary; #endif #ifndef GLEE_C_DEFINED_glGetShaderPrecisionFormat #define GLEE_C_DEFINED_glGetShaderPrecisionFormat void __stdcall GLee_Lazy_glGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint * range, GLint * precision) {if (GLeeInit()) glGetShaderPrecisionFormat(shadertype, precisiontype, range, precision);} GLEEPFNGLGETSHADERPRECISIONFORMATPROC GLeeFuncPtr_glGetShaderPrecisionFormat=GLee_Lazy_glGetShaderPrecisionFormat; #endif #ifndef GLEE_C_DEFINED_glDepthRangef #define GLEE_C_DEFINED_glDepthRangef void __stdcall GLee_Lazy_glDepthRangef(GLfloat n, GLfloat f) {if (GLeeInit()) glDepthRangef(n, f);} GLEEPFNGLDEPTHRANGEFPROC GLeeFuncPtr_glDepthRangef=GLee_Lazy_glDepthRangef; #endif #ifndef GLEE_C_DEFINED_glClearDepthf #define GLEE_C_DEFINED_glClearDepthf void __stdcall GLee_Lazy_glClearDepthf(GLfloat d) {if (GLeeInit()) glClearDepthf(d);} GLEEPFNGLCLEARDEPTHFPROC GLeeFuncPtr_glClearDepthf=GLee_Lazy_glClearDepthf; #endif #endif /* GL_ARB_get_program_binary */ #ifdef __GLEE_GL_ARB_get_program_binary #ifndef GLEE_C_DEFINED_glGetProgramBinary #define GLEE_C_DEFINED_glGetProgramBinary void __stdcall GLee_Lazy_glGetProgramBinary(GLuint program, GLsizei bufSize, GLsizei * length, GLenum * binaryFormat, GLvoid * binary) {if (GLeeInit()) glGetProgramBinary(program, bufSize, length, binaryFormat, binary);} GLEEPFNGLGETPROGRAMBINARYPROC GLeeFuncPtr_glGetProgramBinary=GLee_Lazy_glGetProgramBinary; #endif #ifndef GLEE_C_DEFINED_glProgramBinary #define GLEE_C_DEFINED_glProgramBinary void __stdcall GLee_Lazy_glProgramBinary(GLuint program, GLenum binaryFormat, const GLvoid * binary, GLsizei length) {if (GLeeInit()) glProgramBinary(program, binaryFormat, binary, length);} GLEEPFNGLPROGRAMBINARYPROC GLeeFuncPtr_glProgramBinary=GLee_Lazy_glProgramBinary; #endif #ifndef GLEE_C_DEFINED_glProgramParameteri #define GLEE_C_DEFINED_glProgramParameteri void __stdcall GLee_Lazy_glProgramParameteri(GLuint program, GLenum pname, GLint value) {if (GLeeInit()) glProgramParameteri(program, pname, value);} GLEEPFNGLPROGRAMPARAMETERIPROC GLeeFuncPtr_glProgramParameteri=GLee_Lazy_glProgramParameteri; #endif #endif /* GL_ARB_separate_shader_objects */ #ifdef __GLEE_GL_ARB_separate_shader_objects #ifndef GLEE_C_DEFINED_glUseProgramStages #define GLEE_C_DEFINED_glUseProgramStages void __stdcall GLee_Lazy_glUseProgramStages(GLuint pipeline, GLbitfield stages, GLuint program) {if (GLeeInit()) glUseProgramStages(pipeline, stages, program);} GLEEPFNGLUSEPROGRAMSTAGESPROC GLeeFuncPtr_glUseProgramStages=GLee_Lazy_glUseProgramStages; #endif #ifndef GLEE_C_DEFINED_glActiveShaderProgram #define GLEE_C_DEFINED_glActiveShaderProgram void __stdcall GLee_Lazy_glActiveShaderProgram(GLuint pipeline, GLuint program) {if (GLeeInit()) glActiveShaderProgram(pipeline, program);} GLEEPFNGLACTIVESHADERPROGRAMPROC GLeeFuncPtr_glActiveShaderProgram=GLee_Lazy_glActiveShaderProgram; #endif #ifndef GLEE_C_DEFINED_glCreateShaderProgramv #define GLEE_C_DEFINED_glCreateShaderProgramv GLuint __stdcall GLee_Lazy_glCreateShaderProgramv(GLenum type, GLsizei count, const GLchar* const * strings) {if (GLeeInit()) return glCreateShaderProgramv(type, count, strings); return (GLuint)0;} GLEEPFNGLCREATESHADERPROGRAMVPROC GLeeFuncPtr_glCreateShaderProgramv=GLee_Lazy_glCreateShaderProgramv; #endif #ifndef GLEE_C_DEFINED_glBindProgramPipeline #define GLEE_C_DEFINED_glBindProgramPipeline void __stdcall GLee_Lazy_glBindProgramPipeline(GLuint pipeline) {if (GLeeInit()) glBindProgramPipeline(pipeline);} GLEEPFNGLBINDPROGRAMPIPELINEPROC GLeeFuncPtr_glBindProgramPipeline=GLee_Lazy_glBindProgramPipeline; #endif #ifndef GLEE_C_DEFINED_glDeleteProgramPipelines #define GLEE_C_DEFINED_glDeleteProgramPipelines void __stdcall GLee_Lazy_glDeleteProgramPipelines(GLsizei n, const GLuint * pipelines) {if (GLeeInit()) glDeleteProgramPipelines(n, pipelines);} GLEEPFNGLDELETEPROGRAMPIPELINESPROC GLeeFuncPtr_glDeleteProgramPipelines=GLee_Lazy_glDeleteProgramPipelines; #endif #ifndef GLEE_C_DEFINED_glGenProgramPipelines #define GLEE_C_DEFINED_glGenProgramPipelines void __stdcall GLee_Lazy_glGenProgramPipelines(GLsizei n, GLuint * pipelines) {if (GLeeInit()) glGenProgramPipelines(n, pipelines);} GLEEPFNGLGENPROGRAMPIPELINESPROC GLeeFuncPtr_glGenProgramPipelines=GLee_Lazy_glGenProgramPipelines; #endif #ifndef GLEE_C_DEFINED_glIsProgramPipeline #define GLEE_C_DEFINED_glIsProgramPipeline GLboolean __stdcall GLee_Lazy_glIsProgramPipeline(GLuint pipeline) {if (GLeeInit()) return glIsProgramPipeline(pipeline); return (GLboolean)0;} GLEEPFNGLISPROGRAMPIPELINEPROC GLeeFuncPtr_glIsProgramPipeline=GLee_Lazy_glIsProgramPipeline; #endif #ifndef GLEE_C_DEFINED_glGetProgramPipelineiv #define GLEE_C_DEFINED_glGetProgramPipelineiv void __stdcall GLee_Lazy_glGetProgramPipelineiv(GLuint pipeline, GLenum pname, GLint * params) {if (GLeeInit()) glGetProgramPipelineiv(pipeline, pname, params);} GLEEPFNGLGETPROGRAMPIPELINEIVPROC GLeeFuncPtr_glGetProgramPipelineiv=GLee_Lazy_glGetProgramPipelineiv; #endif #ifndef GLEE_C_DEFINED_glProgramUniform1i #define GLEE_C_DEFINED_glProgramUniform1i void __stdcall GLee_Lazy_glProgramUniform1i(GLuint program, GLint location, GLint v0) {if (GLeeInit()) glProgramUniform1i(program, location, v0);} GLEEPFNGLPROGRAMUNIFORM1IPROC GLeeFuncPtr_glProgramUniform1i=GLee_Lazy_glProgramUniform1i; #endif #ifndef GLEE_C_DEFINED_glProgramUniform1iv #define GLEE_C_DEFINED_glProgramUniform1iv void __stdcall GLee_Lazy_glProgramUniform1iv(GLuint program, GLint location, GLsizei count, const GLint * value) {if (GLeeInit()) glProgramUniform1iv(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM1IVPROC GLeeFuncPtr_glProgramUniform1iv=GLee_Lazy_glProgramUniform1iv; #endif #ifndef GLEE_C_DEFINED_glProgramUniform1f #define GLEE_C_DEFINED_glProgramUniform1f void __stdcall GLee_Lazy_glProgramUniform1f(GLuint program, GLint location, GLfloat v0) {if (GLeeInit()) glProgramUniform1f(program, location, v0);} GLEEPFNGLPROGRAMUNIFORM1FPROC GLeeFuncPtr_glProgramUniform1f=GLee_Lazy_glProgramUniform1f; #endif #ifndef GLEE_C_DEFINED_glProgramUniform1fv #define GLEE_C_DEFINED_glProgramUniform1fv void __stdcall GLee_Lazy_glProgramUniform1fv(GLuint program, GLint location, GLsizei count, const GLfloat * value) {if (GLeeInit()) glProgramUniform1fv(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM1FVPROC GLeeFuncPtr_glProgramUniform1fv=GLee_Lazy_glProgramUniform1fv; #endif #ifndef GLEE_C_DEFINED_glProgramUniform1d #define GLEE_C_DEFINED_glProgramUniform1d void __stdcall GLee_Lazy_glProgramUniform1d(GLuint program, GLint location, GLdouble v0) {if (GLeeInit()) glProgramUniform1d(program, location, v0);} GLEEPFNGLPROGRAMUNIFORM1DPROC GLeeFuncPtr_glProgramUniform1d=GLee_Lazy_glProgramUniform1d; #endif #ifndef GLEE_C_DEFINED_glProgramUniform1dv #define GLEE_C_DEFINED_glProgramUniform1dv void __stdcall GLee_Lazy_glProgramUniform1dv(GLuint program, GLint location, GLsizei count, const GLdouble * value) {if (GLeeInit()) glProgramUniform1dv(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM1DVPROC GLeeFuncPtr_glProgramUniform1dv=GLee_Lazy_glProgramUniform1dv; #endif #ifndef GLEE_C_DEFINED_glProgramUniform1ui #define GLEE_C_DEFINED_glProgramUniform1ui void __stdcall GLee_Lazy_glProgramUniform1ui(GLuint program, GLint location, GLuint v0) {if (GLeeInit()) glProgramUniform1ui(program, location, v0);} GLEEPFNGLPROGRAMUNIFORM1UIPROC GLeeFuncPtr_glProgramUniform1ui=GLee_Lazy_glProgramUniform1ui; #endif #ifndef GLEE_C_DEFINED_glProgramUniform1uiv #define GLEE_C_DEFINED_glProgramUniform1uiv void __stdcall GLee_Lazy_glProgramUniform1uiv(GLuint program, GLint location, GLsizei count, const GLuint * value) {if (GLeeInit()) glProgramUniform1uiv(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM1UIVPROC GLeeFuncPtr_glProgramUniform1uiv=GLee_Lazy_glProgramUniform1uiv; #endif #ifndef GLEE_C_DEFINED_glProgramUniform2i #define GLEE_C_DEFINED_glProgramUniform2i void __stdcall GLee_Lazy_glProgramUniform2i(GLuint program, GLint location, GLint v0, GLint v1) {if (GLeeInit()) glProgramUniform2i(program, location, v0, v1);} GLEEPFNGLPROGRAMUNIFORM2IPROC GLeeFuncPtr_glProgramUniform2i=GLee_Lazy_glProgramUniform2i; #endif #ifndef GLEE_C_DEFINED_glProgramUniform2iv #define GLEE_C_DEFINED_glProgramUniform2iv void __stdcall GLee_Lazy_glProgramUniform2iv(GLuint program, GLint location, GLsizei count, const GLint * value) {if (GLeeInit()) glProgramUniform2iv(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM2IVPROC GLeeFuncPtr_glProgramUniform2iv=GLee_Lazy_glProgramUniform2iv; #endif #ifndef GLEE_C_DEFINED_glProgramUniform2f #define GLEE_C_DEFINED_glProgramUniform2f void __stdcall GLee_Lazy_glProgramUniform2f(GLuint program, GLint location, GLfloat v0, GLfloat v1) {if (GLeeInit()) glProgramUniform2f(program, location, v0, v1);} GLEEPFNGLPROGRAMUNIFORM2FPROC GLeeFuncPtr_glProgramUniform2f=GLee_Lazy_glProgramUniform2f; #endif #ifndef GLEE_C_DEFINED_glProgramUniform2fv #define GLEE_C_DEFINED_glProgramUniform2fv void __stdcall GLee_Lazy_glProgramUniform2fv(GLuint program, GLint location, GLsizei count, const GLfloat * value) {if (GLeeInit()) glProgramUniform2fv(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM2FVPROC GLeeFuncPtr_glProgramUniform2fv=GLee_Lazy_glProgramUniform2fv; #endif #ifndef GLEE_C_DEFINED_glProgramUniform2d #define GLEE_C_DEFINED_glProgramUniform2d void __stdcall GLee_Lazy_glProgramUniform2d(GLuint program, GLint location, GLdouble v0, GLdouble v1) {if (GLeeInit()) glProgramUniform2d(program, location, v0, v1);} GLEEPFNGLPROGRAMUNIFORM2DPROC GLeeFuncPtr_glProgramUniform2d=GLee_Lazy_glProgramUniform2d; #endif #ifndef GLEE_C_DEFINED_glProgramUniform2dv #define GLEE_C_DEFINED_glProgramUniform2dv void __stdcall GLee_Lazy_glProgramUniform2dv(GLuint program, GLint location, GLsizei count, const GLdouble * value) {if (GLeeInit()) glProgramUniform2dv(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM2DVPROC GLeeFuncPtr_glProgramUniform2dv=GLee_Lazy_glProgramUniform2dv; #endif #ifndef GLEE_C_DEFINED_glProgramUniform2ui #define GLEE_C_DEFINED_glProgramUniform2ui void __stdcall GLee_Lazy_glProgramUniform2ui(GLuint program, GLint location, GLuint v0, GLuint v1) {if (GLeeInit()) glProgramUniform2ui(program, location, v0, v1);} GLEEPFNGLPROGRAMUNIFORM2UIPROC GLeeFuncPtr_glProgramUniform2ui=GLee_Lazy_glProgramUniform2ui; #endif #ifndef GLEE_C_DEFINED_glProgramUniform2uiv #define GLEE_C_DEFINED_glProgramUniform2uiv void __stdcall GLee_Lazy_glProgramUniform2uiv(GLuint program, GLint location, GLsizei count, const GLuint * value) {if (GLeeInit()) glProgramUniform2uiv(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM2UIVPROC GLeeFuncPtr_glProgramUniform2uiv=GLee_Lazy_glProgramUniform2uiv; #endif #ifndef GLEE_C_DEFINED_glProgramUniform3i #define GLEE_C_DEFINED_glProgramUniform3i void __stdcall GLee_Lazy_glProgramUniform3i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2) {if (GLeeInit()) glProgramUniform3i(program, location, v0, v1, v2);} GLEEPFNGLPROGRAMUNIFORM3IPROC GLeeFuncPtr_glProgramUniform3i=GLee_Lazy_glProgramUniform3i; #endif #ifndef GLEE_C_DEFINED_glProgramUniform3iv #define GLEE_C_DEFINED_glProgramUniform3iv void __stdcall GLee_Lazy_glProgramUniform3iv(GLuint program, GLint location, GLsizei count, const GLint * value) {if (GLeeInit()) glProgramUniform3iv(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM3IVPROC GLeeFuncPtr_glProgramUniform3iv=GLee_Lazy_glProgramUniform3iv; #endif #ifndef GLEE_C_DEFINED_glProgramUniform3f #define GLEE_C_DEFINED_glProgramUniform3f void __stdcall GLee_Lazy_glProgramUniform3f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) {if (GLeeInit()) glProgramUniform3f(program, location, v0, v1, v2);} GLEEPFNGLPROGRAMUNIFORM3FPROC GLeeFuncPtr_glProgramUniform3f=GLee_Lazy_glProgramUniform3f; #endif #ifndef GLEE_C_DEFINED_glProgramUniform3fv #define GLEE_C_DEFINED_glProgramUniform3fv void __stdcall GLee_Lazy_glProgramUniform3fv(GLuint program, GLint location, GLsizei count, const GLfloat * value) {if (GLeeInit()) glProgramUniform3fv(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM3FVPROC GLeeFuncPtr_glProgramUniform3fv=GLee_Lazy_glProgramUniform3fv; #endif #ifndef GLEE_C_DEFINED_glProgramUniform3d #define GLEE_C_DEFINED_glProgramUniform3d void __stdcall GLee_Lazy_glProgramUniform3d(GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2) {if (GLeeInit()) glProgramUniform3d(program, location, v0, v1, v2);} GLEEPFNGLPROGRAMUNIFORM3DPROC GLeeFuncPtr_glProgramUniform3d=GLee_Lazy_glProgramUniform3d; #endif #ifndef GLEE_C_DEFINED_glProgramUniform3dv #define GLEE_C_DEFINED_glProgramUniform3dv void __stdcall GLee_Lazy_glProgramUniform3dv(GLuint program, GLint location, GLsizei count, const GLdouble * value) {if (GLeeInit()) glProgramUniform3dv(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM3DVPROC GLeeFuncPtr_glProgramUniform3dv=GLee_Lazy_glProgramUniform3dv; #endif #ifndef GLEE_C_DEFINED_glProgramUniform3ui #define GLEE_C_DEFINED_glProgramUniform3ui void __stdcall GLee_Lazy_glProgramUniform3ui(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2) {if (GLeeInit()) glProgramUniform3ui(program, location, v0, v1, v2);} GLEEPFNGLPROGRAMUNIFORM3UIPROC GLeeFuncPtr_glProgramUniform3ui=GLee_Lazy_glProgramUniform3ui; #endif #ifndef GLEE_C_DEFINED_glProgramUniform3uiv #define GLEE_C_DEFINED_glProgramUniform3uiv void __stdcall GLee_Lazy_glProgramUniform3uiv(GLuint program, GLint location, GLsizei count, const GLuint * value) {if (GLeeInit()) glProgramUniform3uiv(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM3UIVPROC GLeeFuncPtr_glProgramUniform3uiv=GLee_Lazy_glProgramUniform3uiv; #endif #ifndef GLEE_C_DEFINED_glProgramUniform4i #define GLEE_C_DEFINED_glProgramUniform4i void __stdcall GLee_Lazy_glProgramUniform4i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3) {if (GLeeInit()) glProgramUniform4i(program, location, v0, v1, v2, v3);} GLEEPFNGLPROGRAMUNIFORM4IPROC GLeeFuncPtr_glProgramUniform4i=GLee_Lazy_glProgramUniform4i; #endif #ifndef GLEE_C_DEFINED_glProgramUniform4iv #define GLEE_C_DEFINED_glProgramUniform4iv void __stdcall GLee_Lazy_glProgramUniform4iv(GLuint program, GLint location, GLsizei count, const GLint * value) {if (GLeeInit()) glProgramUniform4iv(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM4IVPROC GLeeFuncPtr_glProgramUniform4iv=GLee_Lazy_glProgramUniform4iv; #endif #ifndef GLEE_C_DEFINED_glProgramUniform4f #define GLEE_C_DEFINED_glProgramUniform4f void __stdcall GLee_Lazy_glProgramUniform4f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) {if (GLeeInit()) glProgramUniform4f(program, location, v0, v1, v2, v3);} GLEEPFNGLPROGRAMUNIFORM4FPROC GLeeFuncPtr_glProgramUniform4f=GLee_Lazy_glProgramUniform4f; #endif #ifndef GLEE_C_DEFINED_glProgramUniform4fv #define GLEE_C_DEFINED_glProgramUniform4fv void __stdcall GLee_Lazy_glProgramUniform4fv(GLuint program, GLint location, GLsizei count, const GLfloat * value) {if (GLeeInit()) glProgramUniform4fv(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM4FVPROC GLeeFuncPtr_glProgramUniform4fv=GLee_Lazy_glProgramUniform4fv; #endif #ifndef GLEE_C_DEFINED_glProgramUniform4d #define GLEE_C_DEFINED_glProgramUniform4d void __stdcall GLee_Lazy_glProgramUniform4d(GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3) {if (GLeeInit()) glProgramUniform4d(program, location, v0, v1, v2, v3);} GLEEPFNGLPROGRAMUNIFORM4DPROC GLeeFuncPtr_glProgramUniform4d=GLee_Lazy_glProgramUniform4d; #endif #ifndef GLEE_C_DEFINED_glProgramUniform4dv #define GLEE_C_DEFINED_glProgramUniform4dv void __stdcall GLee_Lazy_glProgramUniform4dv(GLuint program, GLint location, GLsizei count, const GLdouble * value) {if (GLeeInit()) glProgramUniform4dv(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM4DVPROC GLeeFuncPtr_glProgramUniform4dv=GLee_Lazy_glProgramUniform4dv; #endif #ifndef GLEE_C_DEFINED_glProgramUniform4ui #define GLEE_C_DEFINED_glProgramUniform4ui void __stdcall GLee_Lazy_glProgramUniform4ui(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) {if (GLeeInit()) glProgramUniform4ui(program, location, v0, v1, v2, v3);} GLEEPFNGLPROGRAMUNIFORM4UIPROC GLeeFuncPtr_glProgramUniform4ui=GLee_Lazy_glProgramUniform4ui; #endif #ifndef GLEE_C_DEFINED_glProgramUniform4uiv #define GLEE_C_DEFINED_glProgramUniform4uiv void __stdcall GLee_Lazy_glProgramUniform4uiv(GLuint program, GLint location, GLsizei count, const GLuint * value) {if (GLeeInit()) glProgramUniform4uiv(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM4UIVPROC GLeeFuncPtr_glProgramUniform4uiv=GLee_Lazy_glProgramUniform4uiv; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix2fv #define GLEE_C_DEFINED_glProgramUniformMatrix2fv void __stdcall GLee_Lazy_glProgramUniformMatrix2fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glProgramUniformMatrix2fv(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX2FVPROC GLeeFuncPtr_glProgramUniformMatrix2fv=GLee_Lazy_glProgramUniformMatrix2fv; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix3fv #define GLEE_C_DEFINED_glProgramUniformMatrix3fv void __stdcall GLee_Lazy_glProgramUniformMatrix3fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glProgramUniformMatrix3fv(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX3FVPROC GLeeFuncPtr_glProgramUniformMatrix3fv=GLee_Lazy_glProgramUniformMatrix3fv; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix4fv #define GLEE_C_DEFINED_glProgramUniformMatrix4fv void __stdcall GLee_Lazy_glProgramUniformMatrix4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glProgramUniformMatrix4fv(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX4FVPROC GLeeFuncPtr_glProgramUniformMatrix4fv=GLee_Lazy_glProgramUniformMatrix4fv; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix2dv #define GLEE_C_DEFINED_glProgramUniformMatrix2dv void __stdcall GLee_Lazy_glProgramUniformMatrix2dv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value) {if (GLeeInit()) glProgramUniformMatrix2dv(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX2DVPROC GLeeFuncPtr_glProgramUniformMatrix2dv=GLee_Lazy_glProgramUniformMatrix2dv; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix3dv #define GLEE_C_DEFINED_glProgramUniformMatrix3dv void __stdcall GLee_Lazy_glProgramUniformMatrix3dv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value) {if (GLeeInit()) glProgramUniformMatrix3dv(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX3DVPROC GLeeFuncPtr_glProgramUniformMatrix3dv=GLee_Lazy_glProgramUniformMatrix3dv; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix4dv #define GLEE_C_DEFINED_glProgramUniformMatrix4dv void __stdcall GLee_Lazy_glProgramUniformMatrix4dv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value) {if (GLeeInit()) glProgramUniformMatrix4dv(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX4DVPROC GLeeFuncPtr_glProgramUniformMatrix4dv=GLee_Lazy_glProgramUniformMatrix4dv; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix2x3fv #define GLEE_C_DEFINED_glProgramUniformMatrix2x3fv void __stdcall GLee_Lazy_glProgramUniformMatrix2x3fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glProgramUniformMatrix2x3fv(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX2X3FVPROC GLeeFuncPtr_glProgramUniformMatrix2x3fv=GLee_Lazy_glProgramUniformMatrix2x3fv; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix3x2fv #define GLEE_C_DEFINED_glProgramUniformMatrix3x2fv void __stdcall GLee_Lazy_glProgramUniformMatrix3x2fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glProgramUniformMatrix3x2fv(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX3X2FVPROC GLeeFuncPtr_glProgramUniformMatrix3x2fv=GLee_Lazy_glProgramUniformMatrix3x2fv; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix2x4fv #define GLEE_C_DEFINED_glProgramUniformMatrix2x4fv void __stdcall GLee_Lazy_glProgramUniformMatrix2x4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glProgramUniformMatrix2x4fv(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX2X4FVPROC GLeeFuncPtr_glProgramUniformMatrix2x4fv=GLee_Lazy_glProgramUniformMatrix2x4fv; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix4x2fv #define GLEE_C_DEFINED_glProgramUniformMatrix4x2fv void __stdcall GLee_Lazy_glProgramUniformMatrix4x2fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glProgramUniformMatrix4x2fv(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX4X2FVPROC GLeeFuncPtr_glProgramUniformMatrix4x2fv=GLee_Lazy_glProgramUniformMatrix4x2fv; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix3x4fv #define GLEE_C_DEFINED_glProgramUniformMatrix3x4fv void __stdcall GLee_Lazy_glProgramUniformMatrix3x4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glProgramUniformMatrix3x4fv(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX3X4FVPROC GLeeFuncPtr_glProgramUniformMatrix3x4fv=GLee_Lazy_glProgramUniformMatrix3x4fv; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix4x3fv #define GLEE_C_DEFINED_glProgramUniformMatrix4x3fv void __stdcall GLee_Lazy_glProgramUniformMatrix4x3fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glProgramUniformMatrix4x3fv(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX4X3FVPROC GLeeFuncPtr_glProgramUniformMatrix4x3fv=GLee_Lazy_glProgramUniformMatrix4x3fv; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix2x3dv #define GLEE_C_DEFINED_glProgramUniformMatrix2x3dv void __stdcall GLee_Lazy_glProgramUniformMatrix2x3dv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value) {if (GLeeInit()) glProgramUniformMatrix2x3dv(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX2X3DVPROC GLeeFuncPtr_glProgramUniformMatrix2x3dv=GLee_Lazy_glProgramUniformMatrix2x3dv; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix3x2dv #define GLEE_C_DEFINED_glProgramUniformMatrix3x2dv void __stdcall GLee_Lazy_glProgramUniformMatrix3x2dv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value) {if (GLeeInit()) glProgramUniformMatrix3x2dv(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX3X2DVPROC GLeeFuncPtr_glProgramUniformMatrix3x2dv=GLee_Lazy_glProgramUniformMatrix3x2dv; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix2x4dv #define GLEE_C_DEFINED_glProgramUniformMatrix2x4dv void __stdcall GLee_Lazy_glProgramUniformMatrix2x4dv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value) {if (GLeeInit()) glProgramUniformMatrix2x4dv(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX2X4DVPROC GLeeFuncPtr_glProgramUniformMatrix2x4dv=GLee_Lazy_glProgramUniformMatrix2x4dv; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix4x2dv #define GLEE_C_DEFINED_glProgramUniformMatrix4x2dv void __stdcall GLee_Lazy_glProgramUniformMatrix4x2dv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value) {if (GLeeInit()) glProgramUniformMatrix4x2dv(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX4X2DVPROC GLeeFuncPtr_glProgramUniformMatrix4x2dv=GLee_Lazy_glProgramUniformMatrix4x2dv; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix3x4dv #define GLEE_C_DEFINED_glProgramUniformMatrix3x4dv void __stdcall GLee_Lazy_glProgramUniformMatrix3x4dv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value) {if (GLeeInit()) glProgramUniformMatrix3x4dv(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX3X4DVPROC GLeeFuncPtr_glProgramUniformMatrix3x4dv=GLee_Lazy_glProgramUniformMatrix3x4dv; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix4x3dv #define GLEE_C_DEFINED_glProgramUniformMatrix4x3dv void __stdcall GLee_Lazy_glProgramUniformMatrix4x3dv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value) {if (GLeeInit()) glProgramUniformMatrix4x3dv(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX4X3DVPROC GLeeFuncPtr_glProgramUniformMatrix4x3dv=GLee_Lazy_glProgramUniformMatrix4x3dv; #endif #ifndef GLEE_C_DEFINED_glValidateProgramPipeline #define GLEE_C_DEFINED_glValidateProgramPipeline void __stdcall GLee_Lazy_glValidateProgramPipeline(GLuint pipeline) {if (GLeeInit()) glValidateProgramPipeline(pipeline);} GLEEPFNGLVALIDATEPROGRAMPIPELINEPROC GLeeFuncPtr_glValidateProgramPipeline=GLee_Lazy_glValidateProgramPipeline; #endif #ifndef GLEE_C_DEFINED_glGetProgramPipelineInfoLog #define GLEE_C_DEFINED_glGetProgramPipelineInfoLog void __stdcall GLee_Lazy_glGetProgramPipelineInfoLog(GLuint pipeline, GLsizei bufSize, GLsizei * length, GLchar * infoLog) {if (GLeeInit()) glGetProgramPipelineInfoLog(pipeline, bufSize, length, infoLog);} GLEEPFNGLGETPROGRAMPIPELINEINFOLOGPROC GLeeFuncPtr_glGetProgramPipelineInfoLog=GLee_Lazy_glGetProgramPipelineInfoLog; #endif #endif /* GL_ARB_shader_precision */ #ifdef __GLEE_GL_ARB_shader_precision #endif /* GL_ARB_vertex_attrib_64bit */ #ifdef __GLEE_GL_ARB_vertex_attrib_64bit #ifndef GLEE_C_DEFINED_glVertexAttribL1d #define GLEE_C_DEFINED_glVertexAttribL1d void __stdcall GLee_Lazy_glVertexAttribL1d(GLuint index, GLdouble x) {if (GLeeInit()) glVertexAttribL1d(index, x);} GLEEPFNGLVERTEXATTRIBL1DPROC GLeeFuncPtr_glVertexAttribL1d=GLee_Lazy_glVertexAttribL1d; #endif #ifndef GLEE_C_DEFINED_glVertexAttribL2d #define GLEE_C_DEFINED_glVertexAttribL2d void __stdcall GLee_Lazy_glVertexAttribL2d(GLuint index, GLdouble x, GLdouble y) {if (GLeeInit()) glVertexAttribL2d(index, x, y);} GLEEPFNGLVERTEXATTRIBL2DPROC GLeeFuncPtr_glVertexAttribL2d=GLee_Lazy_glVertexAttribL2d; #endif #ifndef GLEE_C_DEFINED_glVertexAttribL3d #define GLEE_C_DEFINED_glVertexAttribL3d void __stdcall GLee_Lazy_glVertexAttribL3d(GLuint index, GLdouble x, GLdouble y, GLdouble z) {if (GLeeInit()) glVertexAttribL3d(index, x, y, z);} GLEEPFNGLVERTEXATTRIBL3DPROC GLeeFuncPtr_glVertexAttribL3d=GLee_Lazy_glVertexAttribL3d; #endif #ifndef GLEE_C_DEFINED_glVertexAttribL4d #define GLEE_C_DEFINED_glVertexAttribL4d void __stdcall GLee_Lazy_glVertexAttribL4d(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) {if (GLeeInit()) glVertexAttribL4d(index, x, y, z, w);} GLEEPFNGLVERTEXATTRIBL4DPROC GLeeFuncPtr_glVertexAttribL4d=GLee_Lazy_glVertexAttribL4d; #endif #ifndef GLEE_C_DEFINED_glVertexAttribL1dv #define GLEE_C_DEFINED_glVertexAttribL1dv void __stdcall GLee_Lazy_glVertexAttribL1dv(GLuint index, const GLdouble * v) {if (GLeeInit()) glVertexAttribL1dv(index, v);} GLEEPFNGLVERTEXATTRIBL1DVPROC GLeeFuncPtr_glVertexAttribL1dv=GLee_Lazy_glVertexAttribL1dv; #endif #ifndef GLEE_C_DEFINED_glVertexAttribL2dv #define GLEE_C_DEFINED_glVertexAttribL2dv void __stdcall GLee_Lazy_glVertexAttribL2dv(GLuint index, const GLdouble * v) {if (GLeeInit()) glVertexAttribL2dv(index, v);} GLEEPFNGLVERTEXATTRIBL2DVPROC GLeeFuncPtr_glVertexAttribL2dv=GLee_Lazy_glVertexAttribL2dv; #endif #ifndef GLEE_C_DEFINED_glVertexAttribL3dv #define GLEE_C_DEFINED_glVertexAttribL3dv void __stdcall GLee_Lazy_glVertexAttribL3dv(GLuint index, const GLdouble * v) {if (GLeeInit()) glVertexAttribL3dv(index, v);} GLEEPFNGLVERTEXATTRIBL3DVPROC GLeeFuncPtr_glVertexAttribL3dv=GLee_Lazy_glVertexAttribL3dv; #endif #ifndef GLEE_C_DEFINED_glVertexAttribL4dv #define GLEE_C_DEFINED_glVertexAttribL4dv void __stdcall GLee_Lazy_glVertexAttribL4dv(GLuint index, const GLdouble * v) {if (GLeeInit()) glVertexAttribL4dv(index, v);} GLEEPFNGLVERTEXATTRIBL4DVPROC GLeeFuncPtr_glVertexAttribL4dv=GLee_Lazy_glVertexAttribL4dv; #endif #ifndef GLEE_C_DEFINED_glVertexAttribLPointer #define GLEE_C_DEFINED_glVertexAttribLPointer void __stdcall GLee_Lazy_glVertexAttribLPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer) {if (GLeeInit()) glVertexAttribLPointer(index, size, type, stride, pointer);} GLEEPFNGLVERTEXATTRIBLPOINTERPROC GLeeFuncPtr_glVertexAttribLPointer=GLee_Lazy_glVertexAttribLPointer; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribLdv #define GLEE_C_DEFINED_glGetVertexAttribLdv void __stdcall GLee_Lazy_glGetVertexAttribLdv(GLuint index, GLenum pname, GLdouble * params) {if (GLeeInit()) glGetVertexAttribLdv(index, pname, params);} GLEEPFNGLGETVERTEXATTRIBLDVPROC GLeeFuncPtr_glGetVertexAttribLdv=GLee_Lazy_glGetVertexAttribLdv; #endif #endif /* GL_ARB_viewport_array */ #ifdef __GLEE_GL_ARB_viewport_array #ifndef GLEE_C_DEFINED_glViewportArrayv #define GLEE_C_DEFINED_glViewportArrayv void __stdcall GLee_Lazy_glViewportArrayv(GLuint first, GLsizei count, const GLfloat * v) {if (GLeeInit()) glViewportArrayv(first, count, v);} GLEEPFNGLVIEWPORTARRAYVPROC GLeeFuncPtr_glViewportArrayv=GLee_Lazy_glViewportArrayv; #endif #ifndef GLEE_C_DEFINED_glViewportIndexedf #define GLEE_C_DEFINED_glViewportIndexedf void __stdcall GLee_Lazy_glViewportIndexedf(GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h) {if (GLeeInit()) glViewportIndexedf(index, x, y, w, h);} GLEEPFNGLVIEWPORTINDEXEDFPROC GLeeFuncPtr_glViewportIndexedf=GLee_Lazy_glViewportIndexedf; #endif #ifndef GLEE_C_DEFINED_glViewportIndexedfv #define GLEE_C_DEFINED_glViewportIndexedfv void __stdcall GLee_Lazy_glViewportIndexedfv(GLuint index, const GLfloat * v) {if (GLeeInit()) glViewportIndexedfv(index, v);} GLEEPFNGLVIEWPORTINDEXEDFVPROC GLeeFuncPtr_glViewportIndexedfv=GLee_Lazy_glViewportIndexedfv; #endif #ifndef GLEE_C_DEFINED_glScissorArrayv #define GLEE_C_DEFINED_glScissorArrayv void __stdcall GLee_Lazy_glScissorArrayv(GLuint first, GLsizei count, const GLint * v) {if (GLeeInit()) glScissorArrayv(first, count, v);} GLEEPFNGLSCISSORARRAYVPROC GLeeFuncPtr_glScissorArrayv=GLee_Lazy_glScissorArrayv; #endif #ifndef GLEE_C_DEFINED_glScissorIndexed #define GLEE_C_DEFINED_glScissorIndexed void __stdcall GLee_Lazy_glScissorIndexed(GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height) {if (GLeeInit()) glScissorIndexed(index, left, bottom, width, height);} GLEEPFNGLSCISSORINDEXEDPROC GLeeFuncPtr_glScissorIndexed=GLee_Lazy_glScissorIndexed; #endif #ifndef GLEE_C_DEFINED_glScissorIndexedv #define GLEE_C_DEFINED_glScissorIndexedv void __stdcall GLee_Lazy_glScissorIndexedv(GLuint index, const GLint * v) {if (GLeeInit()) glScissorIndexedv(index, v);} GLEEPFNGLSCISSORINDEXEDVPROC GLeeFuncPtr_glScissorIndexedv=GLee_Lazy_glScissorIndexedv; #endif #ifndef GLEE_C_DEFINED_glDepthRangeArrayv #define GLEE_C_DEFINED_glDepthRangeArrayv void __stdcall GLee_Lazy_glDepthRangeArrayv(GLuint first, GLsizei count, const GLdouble * v) {if (GLeeInit()) glDepthRangeArrayv(first, count, v);} GLEEPFNGLDEPTHRANGEARRAYVPROC GLeeFuncPtr_glDepthRangeArrayv=GLee_Lazy_glDepthRangeArrayv; #endif #ifndef GLEE_C_DEFINED_glDepthRangeIndexed #define GLEE_C_DEFINED_glDepthRangeIndexed void __stdcall GLee_Lazy_glDepthRangeIndexed(GLuint index, GLdouble n, GLdouble f) {if (GLeeInit()) glDepthRangeIndexed(index, n, f);} GLEEPFNGLDEPTHRANGEINDEXEDPROC GLeeFuncPtr_glDepthRangeIndexed=GLee_Lazy_glDepthRangeIndexed; #endif #ifndef GLEE_C_DEFINED_glGetFloati_v #define GLEE_C_DEFINED_glGetFloati_v void __stdcall GLee_Lazy_glGetFloati_v(GLenum target, GLuint index, GLfloat * data) {if (GLeeInit()) glGetFloati_v(target, index, data);} GLEEPFNGLGETFLOATI_VPROC GLeeFuncPtr_glGetFloati_v=GLee_Lazy_glGetFloati_v; #endif #ifndef GLEE_C_DEFINED_glGetDoublei_v #define GLEE_C_DEFINED_glGetDoublei_v void __stdcall GLee_Lazy_glGetDoublei_v(GLenum target, GLuint index, GLdouble * data) {if (GLeeInit()) glGetDoublei_v(target, index, data);} GLEEPFNGLGETDOUBLEI_VPROC GLeeFuncPtr_glGetDoublei_v=GLee_Lazy_glGetDoublei_v; #endif #endif /* GL_ARB_cl_event */ #ifdef __GLEE_GL_ARB_cl_event #ifndef GLEE_C_DEFINED_glCreateSyncFromCLeventARB #define GLEE_C_DEFINED_glCreateSyncFromCLeventARB GLsync __stdcall GLee_Lazy_glCreateSyncFromCLeventARB(struct _cl_context * context, struct _cl_event * event, GLbitfield flags) {if (GLeeInit()) return glCreateSyncFromCLeventARB(context, event, flags); return (GLsync)0;} GLEEPFNGLCREATESYNCFROMCLEVENTARBPROC GLeeFuncPtr_glCreateSyncFromCLeventARB=GLee_Lazy_glCreateSyncFromCLeventARB; #endif #endif /* GL_ARB_debug_output */ #ifdef __GLEE_GL_ARB_debug_output #ifndef GLEE_C_DEFINED_glDebugMessageControlARB #define GLEE_C_DEFINED_glDebugMessageControlARB void __stdcall GLee_Lazy_glDebugMessageControlARB(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled) {if (GLeeInit()) glDebugMessageControlARB(source, type, severity, count, ids, enabled);} GLEEPFNGLDEBUGMESSAGECONTROLARBPROC GLeeFuncPtr_glDebugMessageControlARB=GLee_Lazy_glDebugMessageControlARB; #endif #ifndef GLEE_C_DEFINED_glDebugMessageInsertARB #define GLEE_C_DEFINED_glDebugMessageInsertARB void __stdcall GLee_Lazy_glDebugMessageInsertARB(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * buf) {if (GLeeInit()) glDebugMessageInsertARB(source, type, id, severity, length, buf);} GLEEPFNGLDEBUGMESSAGEINSERTARBPROC GLeeFuncPtr_glDebugMessageInsertARB=GLee_Lazy_glDebugMessageInsertARB; #endif #ifndef GLEE_C_DEFINED_glDebugMessageCallbackARB #define GLEE_C_DEFINED_glDebugMessageCallbackARB void __stdcall GLee_Lazy_glDebugMessageCallbackARB(GLDEBUGPROCARB callback, const GLvoid * userParam) {if (GLeeInit()) glDebugMessageCallbackARB(callback, userParam);} GLEEPFNGLDEBUGMESSAGECALLBACKARBPROC GLeeFuncPtr_glDebugMessageCallbackARB=GLee_Lazy_glDebugMessageCallbackARB; #endif #ifndef GLEE_C_DEFINED_glGetDebugMessageLogARB #define GLEE_C_DEFINED_glGetDebugMessageLogARB GLuint __stdcall GLee_Lazy_glGetDebugMessageLogARB(GLuint count, GLsizei bufsize, GLenum * sources, GLenum * types, GLuint * ids, GLenum * severities, GLsizei * lengths, GLchar * messageLog) {if (GLeeInit()) return glGetDebugMessageLogARB(count, bufsize, sources, types, ids, severities, lengths, messageLog); return (GLuint)0;} GLEEPFNGLGETDEBUGMESSAGELOGARBPROC GLeeFuncPtr_glGetDebugMessageLogARB=GLee_Lazy_glGetDebugMessageLogARB; #endif #endif /* GL_ARB_robustness */ #ifdef __GLEE_GL_ARB_robustness #ifndef GLEE_C_DEFINED_glGetGraphicsResetStatusARB #define GLEE_C_DEFINED_glGetGraphicsResetStatusARB GLenum __stdcall GLee_Lazy_glGetGraphicsResetStatusARB(void) {if (GLeeInit()) return glGetGraphicsResetStatusARB(); return (GLenum)0;} GLEEPFNGLGETGRAPHICSRESETSTATUSARBPROC GLeeFuncPtr_glGetGraphicsResetStatusARB=GLee_Lazy_glGetGraphicsResetStatusARB; #endif #ifndef GLEE_C_DEFINED_glGetnMapdvARB #define GLEE_C_DEFINED_glGetnMapdvARB void __stdcall GLee_Lazy_glGetnMapdvARB(GLenum target, GLenum query, GLsizei bufSize, GLdouble * v) {if (GLeeInit()) glGetnMapdvARB(target, query, bufSize, v);} GLEEPFNGLGETNMAPDVARBPROC GLeeFuncPtr_glGetnMapdvARB=GLee_Lazy_glGetnMapdvARB; #endif #ifndef GLEE_C_DEFINED_glGetnMapfvARB #define GLEE_C_DEFINED_glGetnMapfvARB void __stdcall GLee_Lazy_glGetnMapfvARB(GLenum target, GLenum query, GLsizei bufSize, GLfloat * v) {if (GLeeInit()) glGetnMapfvARB(target, query, bufSize, v);} GLEEPFNGLGETNMAPFVARBPROC GLeeFuncPtr_glGetnMapfvARB=GLee_Lazy_glGetnMapfvARB; #endif #ifndef GLEE_C_DEFINED_glGetnMapivARB #define GLEE_C_DEFINED_glGetnMapivARB void __stdcall GLee_Lazy_glGetnMapivARB(GLenum target, GLenum query, GLsizei bufSize, GLint * v) {if (GLeeInit()) glGetnMapivARB(target, query, bufSize, v);} GLEEPFNGLGETNMAPIVARBPROC GLeeFuncPtr_glGetnMapivARB=GLee_Lazy_glGetnMapivARB; #endif #ifndef GLEE_C_DEFINED_glGetnPixelMapfvARB #define GLEE_C_DEFINED_glGetnPixelMapfvARB void __stdcall GLee_Lazy_glGetnPixelMapfvARB(GLenum map, GLsizei bufSize, GLfloat * values) {if (GLeeInit()) glGetnPixelMapfvARB(map, bufSize, values);} GLEEPFNGLGETNPIXELMAPFVARBPROC GLeeFuncPtr_glGetnPixelMapfvARB=GLee_Lazy_glGetnPixelMapfvARB; #endif #ifndef GLEE_C_DEFINED_glGetnPixelMapuivARB #define GLEE_C_DEFINED_glGetnPixelMapuivARB void __stdcall GLee_Lazy_glGetnPixelMapuivARB(GLenum map, GLsizei bufSize, GLuint * values) {if (GLeeInit()) glGetnPixelMapuivARB(map, bufSize, values);} GLEEPFNGLGETNPIXELMAPUIVARBPROC GLeeFuncPtr_glGetnPixelMapuivARB=GLee_Lazy_glGetnPixelMapuivARB; #endif #ifndef GLEE_C_DEFINED_glGetnPixelMapusvARB #define GLEE_C_DEFINED_glGetnPixelMapusvARB void __stdcall GLee_Lazy_glGetnPixelMapusvARB(GLenum map, GLsizei bufSize, GLushort * values) {if (GLeeInit()) glGetnPixelMapusvARB(map, bufSize, values);} GLEEPFNGLGETNPIXELMAPUSVARBPROC GLeeFuncPtr_glGetnPixelMapusvARB=GLee_Lazy_glGetnPixelMapusvARB; #endif #ifndef GLEE_C_DEFINED_glGetnPolygonStippleARB #define GLEE_C_DEFINED_glGetnPolygonStippleARB void __stdcall GLee_Lazy_glGetnPolygonStippleARB(GLsizei bufSize, GLubyte * pattern) {if (GLeeInit()) glGetnPolygonStippleARB(bufSize, pattern);} GLEEPFNGLGETNPOLYGONSTIPPLEARBPROC GLeeFuncPtr_glGetnPolygonStippleARB=GLee_Lazy_glGetnPolygonStippleARB; #endif #ifndef GLEE_C_DEFINED_glGetnColorTableARB #define GLEE_C_DEFINED_glGetnColorTableARB void __stdcall GLee_Lazy_glGetnColorTableARB(GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid * table) {if (GLeeInit()) glGetnColorTableARB(target, format, type, bufSize, table);} GLEEPFNGLGETNCOLORTABLEARBPROC GLeeFuncPtr_glGetnColorTableARB=GLee_Lazy_glGetnColorTableARB; #endif #ifndef GLEE_C_DEFINED_glGetnConvolutionFilterARB #define GLEE_C_DEFINED_glGetnConvolutionFilterARB void __stdcall GLee_Lazy_glGetnConvolutionFilterARB(GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid * image) {if (GLeeInit()) glGetnConvolutionFilterARB(target, format, type, bufSize, image);} GLEEPFNGLGETNCONVOLUTIONFILTERARBPROC GLeeFuncPtr_glGetnConvolutionFilterARB=GLee_Lazy_glGetnConvolutionFilterARB; #endif #ifndef GLEE_C_DEFINED_glGetnSeparableFilterARB #define GLEE_C_DEFINED_glGetnSeparableFilterARB void __stdcall GLee_Lazy_glGetnSeparableFilterARB(GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, GLvoid * row, GLsizei columnBufSize, GLvoid * column, GLvoid * span) {if (GLeeInit()) glGetnSeparableFilterARB(target, format, type, rowBufSize, row, columnBufSize, column, span);} GLEEPFNGLGETNSEPARABLEFILTERARBPROC GLeeFuncPtr_glGetnSeparableFilterARB=GLee_Lazy_glGetnSeparableFilterARB; #endif #ifndef GLEE_C_DEFINED_glGetnHistogramARB #define GLEE_C_DEFINED_glGetnHistogramARB void __stdcall GLee_Lazy_glGetnHistogramARB(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid * values) {if (GLeeInit()) glGetnHistogramARB(target, reset, format, type, bufSize, values);} GLEEPFNGLGETNHISTOGRAMARBPROC GLeeFuncPtr_glGetnHistogramARB=GLee_Lazy_glGetnHistogramARB; #endif #ifndef GLEE_C_DEFINED_glGetnMinmaxARB #define GLEE_C_DEFINED_glGetnMinmaxARB void __stdcall GLee_Lazy_glGetnMinmaxARB(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid * values) {if (GLeeInit()) glGetnMinmaxARB(target, reset, format, type, bufSize, values);} GLEEPFNGLGETNMINMAXARBPROC GLeeFuncPtr_glGetnMinmaxARB=GLee_Lazy_glGetnMinmaxARB; #endif #ifndef GLEE_C_DEFINED_glGetnTexImageARB #define GLEE_C_DEFINED_glGetnTexImageARB void __stdcall GLee_Lazy_glGetnTexImageARB(GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, GLvoid * img) {if (GLeeInit()) glGetnTexImageARB(target, level, format, type, bufSize, img);} GLEEPFNGLGETNTEXIMAGEARBPROC GLeeFuncPtr_glGetnTexImageARB=GLee_Lazy_glGetnTexImageARB; #endif #ifndef GLEE_C_DEFINED_glReadnPixelsARB #define GLEE_C_DEFINED_glReadnPixelsARB void __stdcall GLee_Lazy_glReadnPixelsARB(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid * data) {if (GLeeInit()) glReadnPixelsARB(x, y, width, height, format, type, bufSize, data);} GLEEPFNGLREADNPIXELSARBPROC GLeeFuncPtr_glReadnPixelsARB=GLee_Lazy_glReadnPixelsARB; #endif #ifndef GLEE_C_DEFINED_glGetnCompressedTexImageARB #define GLEE_C_DEFINED_glGetnCompressedTexImageARB void __stdcall GLee_Lazy_glGetnCompressedTexImageARB(GLenum target, GLint lod, GLsizei bufSize, GLvoid * img) {if (GLeeInit()) glGetnCompressedTexImageARB(target, lod, bufSize, img);} GLEEPFNGLGETNCOMPRESSEDTEXIMAGEARBPROC GLeeFuncPtr_glGetnCompressedTexImageARB=GLee_Lazy_glGetnCompressedTexImageARB; #endif #ifndef GLEE_C_DEFINED_glGetnUniformfvARB #define GLEE_C_DEFINED_glGetnUniformfvARB void __stdcall GLee_Lazy_glGetnUniformfvARB(GLuint program, GLint location, GLsizei bufSize, GLfloat * params) {if (GLeeInit()) glGetnUniformfvARB(program, location, bufSize, params);} GLEEPFNGLGETNUNIFORMFVARBPROC GLeeFuncPtr_glGetnUniformfvARB=GLee_Lazy_glGetnUniformfvARB; #endif #ifndef GLEE_C_DEFINED_glGetnUniformivARB #define GLEE_C_DEFINED_glGetnUniformivARB void __stdcall GLee_Lazy_glGetnUniformivARB(GLuint program, GLint location, GLsizei bufSize, GLint * params) {if (GLeeInit()) glGetnUniformivARB(program, location, bufSize, params);} GLEEPFNGLGETNUNIFORMIVARBPROC GLeeFuncPtr_glGetnUniformivARB=GLee_Lazy_glGetnUniformivARB; #endif #ifndef GLEE_C_DEFINED_glGetnUniformuivARB #define GLEE_C_DEFINED_glGetnUniformuivARB void __stdcall GLee_Lazy_glGetnUniformuivARB(GLuint program, GLint location, GLsizei bufSize, GLuint * params) {if (GLeeInit()) glGetnUniformuivARB(program, location, bufSize, params);} GLEEPFNGLGETNUNIFORMUIVARBPROC GLeeFuncPtr_glGetnUniformuivARB=GLee_Lazy_glGetnUniformuivARB; #endif #ifndef GLEE_C_DEFINED_glGetnUniformdvARB #define GLEE_C_DEFINED_glGetnUniformdvARB void __stdcall GLee_Lazy_glGetnUniformdvARB(GLuint program, GLint location, GLsizei bufSize, GLdouble * params) {if (GLeeInit()) glGetnUniformdvARB(program, location, bufSize, params);} GLEEPFNGLGETNUNIFORMDVARBPROC GLeeFuncPtr_glGetnUniformdvARB=GLee_Lazy_glGetnUniformdvARB; #endif #endif /* GL_ARB_shader_stencil_export */ #ifdef __GLEE_GL_ARB_shader_stencil_export #endif /* GL_ARB_base_instance */ #ifdef __GLEE_GL_ARB_base_instance #ifndef GLEE_C_DEFINED_glDrawArraysInstancedBaseInstance #define GLEE_C_DEFINED_glDrawArraysInstancedBaseInstance void __stdcall GLee_Lazy_glDrawArraysInstancedBaseInstance(GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance) {if (GLeeInit()) glDrawArraysInstancedBaseInstance(mode, first, count, instancecount, baseinstance);} GLEEPFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC GLeeFuncPtr_glDrawArraysInstancedBaseInstance=GLee_Lazy_glDrawArraysInstancedBaseInstance; #endif #ifndef GLEE_C_DEFINED_glDrawElementsInstancedBaseInstance #define GLEE_C_DEFINED_glDrawElementsInstancedBaseInstance void __stdcall GLee_Lazy_glDrawElementsInstancedBaseInstance(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLuint baseinstance) {if (GLeeInit()) glDrawElementsInstancedBaseInstance(mode, count, type, indices, instancecount, baseinstance);} GLEEPFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC GLeeFuncPtr_glDrawElementsInstancedBaseInstance=GLee_Lazy_glDrawElementsInstancedBaseInstance; #endif #ifndef GLEE_C_DEFINED_glDrawElementsInstancedBaseVertexBaseInstance #define GLEE_C_DEFINED_glDrawElementsInstancedBaseVertexBaseInstance void __stdcall GLee_Lazy_glDrawElementsInstancedBaseVertexBaseInstance(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance) {if (GLeeInit()) glDrawElementsInstancedBaseVertexBaseInstance(mode, count, type, indices, instancecount, basevertex, baseinstance);} GLEEPFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC GLeeFuncPtr_glDrawElementsInstancedBaseVertexBaseInstance=GLee_Lazy_glDrawElementsInstancedBaseVertexBaseInstance; #endif #endif /* GL_ARB_shading_language_420pack */ #ifdef __GLEE_GL_ARB_shading_language_420pack #endif /* GL_ARB_transform_feedback_instanced */ #ifdef __GLEE_GL_ARB_transform_feedback_instanced #ifndef GLEE_C_DEFINED_glDrawTransformFeedbackInstanced #define GLEE_C_DEFINED_glDrawTransformFeedbackInstanced void __stdcall GLee_Lazy_glDrawTransformFeedbackInstanced(GLenum mode, GLuint id, GLsizei instancecount) {if (GLeeInit()) glDrawTransformFeedbackInstanced(mode, id, instancecount);} GLEEPFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC GLeeFuncPtr_glDrawTransformFeedbackInstanced=GLee_Lazy_glDrawTransformFeedbackInstanced; #endif #ifndef GLEE_C_DEFINED_glDrawTransformFeedbackStreamInstanced #define GLEE_C_DEFINED_glDrawTransformFeedbackStreamInstanced void __stdcall GLee_Lazy_glDrawTransformFeedbackStreamInstanced(GLenum mode, GLuint id, GLuint stream, GLsizei instancecount) {if (GLeeInit()) glDrawTransformFeedbackStreamInstanced(mode, id, stream, instancecount);} GLEEPFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC GLeeFuncPtr_glDrawTransformFeedbackStreamInstanced=GLee_Lazy_glDrawTransformFeedbackStreamInstanced; #endif #endif /* GL_ARB_compressed_texture_pixel_storage */ #ifdef __GLEE_GL_ARB_compressed_texture_pixel_storage #endif /* GL_ARB_conservative_depth */ #ifdef __GLEE_GL_ARB_conservative_depth #endif /* GL_ARB_internalformat_query */ #ifdef __GLEE_GL_ARB_internalformat_query #ifndef GLEE_C_DEFINED_glGetInternalformativ #define GLEE_C_DEFINED_glGetInternalformativ void __stdcall GLee_Lazy_glGetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint * params) {if (GLeeInit()) glGetInternalformativ(target, internalformat, pname, bufSize, params);} GLEEPFNGLGETINTERNALFORMATIVPROC GLeeFuncPtr_glGetInternalformativ=GLee_Lazy_glGetInternalformativ; #endif #endif /* GL_ARB_map_buffer_alignment */ #ifdef __GLEE_GL_ARB_map_buffer_alignment #endif /* GL_ARB_shader_atomic_counters */ #ifdef __GLEE_GL_ARB_shader_atomic_counters #ifndef GLEE_C_DEFINED_glGetActiveAtomicCounterBufferiv #define GLEE_C_DEFINED_glGetActiveAtomicCounterBufferiv void __stdcall GLee_Lazy_glGetActiveAtomicCounterBufferiv(GLuint program, GLuint bufferIndex, GLenum pname, GLint * params) {if (GLeeInit()) glGetActiveAtomicCounterBufferiv(program, bufferIndex, pname, params);} GLEEPFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC GLeeFuncPtr_glGetActiveAtomicCounterBufferiv=GLee_Lazy_glGetActiveAtomicCounterBufferiv; #endif #endif /* GL_ARB_shader_image_load_store */ #ifdef __GLEE_GL_ARB_shader_image_load_store #ifndef GLEE_C_DEFINED_glBindImageTexture #define GLEE_C_DEFINED_glBindImageTexture void __stdcall GLee_Lazy_glBindImageTexture(GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format) {if (GLeeInit()) glBindImageTexture(unit, texture, level, layered, layer, access, format);} GLEEPFNGLBINDIMAGETEXTUREPROC GLeeFuncPtr_glBindImageTexture=GLee_Lazy_glBindImageTexture; #endif #ifndef GLEE_C_DEFINED_glMemoryBarrier #define GLEE_C_DEFINED_glMemoryBarrier void __stdcall GLee_Lazy_glMemoryBarrier(GLbitfield barriers) {if (GLeeInit()) glMemoryBarrier(barriers);} GLEEPFNGLMEMORYBARRIERPROC GLeeFuncPtr_glMemoryBarrier=GLee_Lazy_glMemoryBarrier; #endif #endif /* GL_ARB_shading_language_packing */ #ifdef __GLEE_GL_ARB_shading_language_packing #endif /* GL_ARB_texture_storage */ #ifdef __GLEE_GL_ARB_texture_storage #ifndef GLEE_C_DEFINED_glTexStorage1D #define GLEE_C_DEFINED_glTexStorage1D void __stdcall GLee_Lazy_glTexStorage1D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width) {if (GLeeInit()) glTexStorage1D(target, levels, internalformat, width);} GLEEPFNGLTEXSTORAGE1DPROC GLeeFuncPtr_glTexStorage1D=GLee_Lazy_glTexStorage1D; #endif #ifndef GLEE_C_DEFINED_glTexStorage2D #define GLEE_C_DEFINED_glTexStorage2D void __stdcall GLee_Lazy_glTexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height) {if (GLeeInit()) glTexStorage2D(target, levels, internalformat, width, height);} GLEEPFNGLTEXSTORAGE2DPROC GLeeFuncPtr_glTexStorage2D=GLee_Lazy_glTexStorage2D; #endif #ifndef GLEE_C_DEFINED_glTexStorage3D #define GLEE_C_DEFINED_glTexStorage3D void __stdcall GLee_Lazy_glTexStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) {if (GLeeInit()) glTexStorage3D(target, levels, internalformat, width, height, depth);} GLEEPFNGLTEXSTORAGE3DPROC GLeeFuncPtr_glTexStorage3D=GLee_Lazy_glTexStorage3D; #endif #ifndef GLEE_C_DEFINED_glTextureStorage1DEXT #define GLEE_C_DEFINED_glTextureStorage1DEXT void __stdcall GLee_Lazy_glTextureStorage1DEXT(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width) {if (GLeeInit()) glTextureStorage1DEXT(texture, target, levels, internalformat, width);} GLEEPFNGLTEXTURESTORAGE1DEXTPROC GLeeFuncPtr_glTextureStorage1DEXT=GLee_Lazy_glTextureStorage1DEXT; #endif #ifndef GLEE_C_DEFINED_glTextureStorage2DEXT #define GLEE_C_DEFINED_glTextureStorage2DEXT void __stdcall GLee_Lazy_glTextureStorage2DEXT(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height) {if (GLeeInit()) glTextureStorage2DEXT(texture, target, levels, internalformat, width, height);} GLEEPFNGLTEXTURESTORAGE2DEXTPROC GLeeFuncPtr_glTextureStorage2DEXT=GLee_Lazy_glTextureStorage2DEXT; #endif #ifndef GLEE_C_DEFINED_glTextureStorage3DEXT #define GLEE_C_DEFINED_glTextureStorage3DEXT void __stdcall GLee_Lazy_glTextureStorage3DEXT(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) {if (GLeeInit()) glTextureStorage3DEXT(texture, target, levels, internalformat, width, height, depth);} GLEEPFNGLTEXTURESTORAGE3DEXTPROC GLeeFuncPtr_glTextureStorage3DEXT=GLee_Lazy_glTextureStorage3DEXT; #endif #endif /* GL_KHR_texture_compression_astc_ldr */ #ifdef __GLEE_GL_KHR_texture_compression_astc_ldr #endif /* GL_KHR_debug */ #ifdef __GLEE_GL_KHR_debug #ifndef GLEE_C_DEFINED_glDebugMessageControl #define GLEE_C_DEFINED_glDebugMessageControl void __stdcall GLee_Lazy_glDebugMessageControl(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled) {if (GLeeInit()) glDebugMessageControl(source, type, severity, count, ids, enabled);} GLEEPFNGLDEBUGMESSAGECONTROLPROC GLeeFuncPtr_glDebugMessageControl=GLee_Lazy_glDebugMessageControl; #endif #ifndef GLEE_C_DEFINED_glDebugMessageInsert #define GLEE_C_DEFINED_glDebugMessageInsert void __stdcall GLee_Lazy_glDebugMessageInsert(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * buf) {if (GLeeInit()) glDebugMessageInsert(source, type, id, severity, length, buf);} GLEEPFNGLDEBUGMESSAGEINSERTPROC GLeeFuncPtr_glDebugMessageInsert=GLee_Lazy_glDebugMessageInsert; #endif #ifndef GLEE_C_DEFINED_glDebugMessageCallback #define GLEE_C_DEFINED_glDebugMessageCallback void __stdcall GLee_Lazy_glDebugMessageCallback(GLDEBUGPROC callback, const void * userParam) {if (GLeeInit()) glDebugMessageCallback(callback, userParam);} GLEEPFNGLDEBUGMESSAGECALLBACKPROC GLeeFuncPtr_glDebugMessageCallback=GLee_Lazy_glDebugMessageCallback; #endif #ifndef GLEE_C_DEFINED_glGetDebugMessageLog #define GLEE_C_DEFINED_glGetDebugMessageLog GLuint __stdcall GLee_Lazy_glGetDebugMessageLog(GLuint count, GLsizei bufsize, GLenum * sources, GLenum * types, GLuint * ids, GLenum * severities, GLsizei * lengths, GLchar * messageLog) {if (GLeeInit()) return glGetDebugMessageLog(count, bufsize, sources, types, ids, severities, lengths, messageLog); return (GLuint)0;} GLEEPFNGLGETDEBUGMESSAGELOGPROC GLeeFuncPtr_glGetDebugMessageLog=GLee_Lazy_glGetDebugMessageLog; #endif #ifndef GLEE_C_DEFINED_glPushDebugGroup #define GLEE_C_DEFINED_glPushDebugGroup void __stdcall GLee_Lazy_glPushDebugGroup(GLenum source, GLuint id, GLsizei length, const GLchar * message) {if (GLeeInit()) glPushDebugGroup(source, id, length, message);} GLEEPFNGLPUSHDEBUGGROUPPROC GLeeFuncPtr_glPushDebugGroup=GLee_Lazy_glPushDebugGroup; #endif #ifndef GLEE_C_DEFINED_glPopDebugGroup #define GLEE_C_DEFINED_glPopDebugGroup void __stdcall GLee_Lazy_glPopDebugGroup(void) {if (GLeeInit()) glPopDebugGroup();} GLEEPFNGLPOPDEBUGGROUPPROC GLeeFuncPtr_glPopDebugGroup=GLee_Lazy_glPopDebugGroup; #endif #ifndef GLEE_C_DEFINED_glObjectLabel #define GLEE_C_DEFINED_glObjectLabel void __stdcall GLee_Lazy_glObjectLabel(GLenum identifier, GLuint name, GLsizei length, const GLchar * label) {if (GLeeInit()) glObjectLabel(identifier, name, length, label);} GLEEPFNGLOBJECTLABELPROC GLeeFuncPtr_glObjectLabel=GLee_Lazy_glObjectLabel; #endif #ifndef GLEE_C_DEFINED_glGetObjectLabel #define GLEE_C_DEFINED_glGetObjectLabel void __stdcall GLee_Lazy_glGetObjectLabel(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei * length, GLchar * label) {if (GLeeInit()) glGetObjectLabel(identifier, name, bufSize, length, label);} GLEEPFNGLGETOBJECTLABELPROC GLeeFuncPtr_glGetObjectLabel=GLee_Lazy_glGetObjectLabel; #endif #ifndef GLEE_C_DEFINED_glObjectPtrLabel #define GLEE_C_DEFINED_glObjectPtrLabel void __stdcall GLee_Lazy_glObjectPtrLabel(const void * ptr, GLsizei length, const GLchar * label) {if (GLeeInit()) glObjectPtrLabel(ptr, length, label);} GLEEPFNGLOBJECTPTRLABELPROC GLeeFuncPtr_glObjectPtrLabel=GLee_Lazy_glObjectPtrLabel; #endif #ifndef GLEE_C_DEFINED_glGetObjectPtrLabel #define GLEE_C_DEFINED_glGetObjectPtrLabel void __stdcall GLee_Lazy_glGetObjectPtrLabel(const void * ptr, GLsizei bufSize, GLsizei * length, GLchar * label) {if (GLeeInit()) glGetObjectPtrLabel(ptr, bufSize, length, label);} GLEEPFNGLGETOBJECTPTRLABELPROC GLeeFuncPtr_glGetObjectPtrLabel=GLee_Lazy_glGetObjectPtrLabel; #endif #endif /* GL_ARB_arrays_of_arrays */ #ifdef __GLEE_GL_ARB_arrays_of_arrays #endif /* GL_ARB_clear_buffer_object */ #ifdef __GLEE_GL_ARB_clear_buffer_object #ifndef GLEE_C_DEFINED_glClearBufferData #define GLEE_C_DEFINED_glClearBufferData void __stdcall GLee_Lazy_glClearBufferData(GLenum target, GLenum internalformat, GLenum format, GLenum type, const void * data) {if (GLeeInit()) glClearBufferData(target, internalformat, format, type, data);} GLEEPFNGLCLEARBUFFERDATAPROC GLeeFuncPtr_glClearBufferData=GLee_Lazy_glClearBufferData; #endif #ifndef GLEE_C_DEFINED_glClearBufferSubData #define GLEE_C_DEFINED_glClearBufferSubData void __stdcall GLee_Lazy_glClearBufferSubData(GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void * data) {if (GLeeInit()) glClearBufferSubData(target, internalformat, offset, size, format, type, data);} GLEEPFNGLCLEARBUFFERSUBDATAPROC GLeeFuncPtr_glClearBufferSubData=GLee_Lazy_glClearBufferSubData; #endif #ifndef GLEE_C_DEFINED_glClearNamedBufferDataEXT #define GLEE_C_DEFINED_glClearNamedBufferDataEXT void __stdcall GLee_Lazy_glClearNamedBufferDataEXT(GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void * data) {if (GLeeInit()) glClearNamedBufferDataEXT(buffer, internalformat, format, type, data);} GLEEPFNGLCLEARNAMEDBUFFERDATAEXTPROC GLeeFuncPtr_glClearNamedBufferDataEXT=GLee_Lazy_glClearNamedBufferDataEXT; #endif #ifndef GLEE_C_DEFINED_glClearNamedBufferSubDataEXT #define GLEE_C_DEFINED_glClearNamedBufferSubDataEXT void __stdcall GLee_Lazy_glClearNamedBufferSubDataEXT(GLuint buffer, GLenum internalformat, GLenum format, GLenum type, GLsizeiptr offset, GLsizeiptr size, const void * data) {if (GLeeInit()) glClearNamedBufferSubDataEXT(buffer, internalformat, format, type, offset, size, data);} GLEEPFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC GLeeFuncPtr_glClearNamedBufferSubDataEXT=GLee_Lazy_glClearNamedBufferSubDataEXT; #endif #endif /* GL_ARB_compute_shader */ #ifdef __GLEE_GL_ARB_compute_shader #ifndef GLEE_C_DEFINED_glDispatchCompute #define GLEE_C_DEFINED_glDispatchCompute void __stdcall GLee_Lazy_glDispatchCompute(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z) {if (GLeeInit()) glDispatchCompute(num_groups_x, num_groups_y, num_groups_z);} GLEEPFNGLDISPATCHCOMPUTEPROC GLeeFuncPtr_glDispatchCompute=GLee_Lazy_glDispatchCompute; #endif #ifndef GLEE_C_DEFINED_glDispatchComputeIndirect #define GLEE_C_DEFINED_glDispatchComputeIndirect void __stdcall GLee_Lazy_glDispatchComputeIndirect(GLintptr indirect) {if (GLeeInit()) glDispatchComputeIndirect(indirect);} GLEEPFNGLDISPATCHCOMPUTEINDIRECTPROC GLeeFuncPtr_glDispatchComputeIndirect=GLee_Lazy_glDispatchComputeIndirect; #endif #endif /* GL_ARB_copy_image */ #ifdef __GLEE_GL_ARB_copy_image #ifndef GLEE_C_DEFINED_glCopyImageSubData #define GLEE_C_DEFINED_glCopyImageSubData void __stdcall GLee_Lazy_glCopyImageSubData(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth) {if (GLeeInit()) glCopyImageSubData(srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth);} GLEEPFNGLCOPYIMAGESUBDATAPROC GLeeFuncPtr_glCopyImageSubData=GLee_Lazy_glCopyImageSubData; #endif #endif /* GL_ARB_texture_view */ #ifdef __GLEE_GL_ARB_texture_view #ifndef GLEE_C_DEFINED_glTextureView #define GLEE_C_DEFINED_glTextureView void __stdcall GLee_Lazy_glTextureView(GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers) {if (GLeeInit()) glTextureView(texture, target, origtexture, internalformat, minlevel, numlevels, minlayer, numlayers);} GLEEPFNGLTEXTUREVIEWPROC GLeeFuncPtr_glTextureView=GLee_Lazy_glTextureView; #endif #endif /* GL_ARB_vertex_attrib_binding */ #ifdef __GLEE_GL_ARB_vertex_attrib_binding #ifndef GLEE_C_DEFINED_glBindVertexBuffer #define GLEE_C_DEFINED_glBindVertexBuffer void __stdcall GLee_Lazy_glBindVertexBuffer(GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride) {if (GLeeInit()) glBindVertexBuffer(bindingindex, buffer, offset, stride);} GLEEPFNGLBINDVERTEXBUFFERPROC GLeeFuncPtr_glBindVertexBuffer=GLee_Lazy_glBindVertexBuffer; #endif #ifndef GLEE_C_DEFINED_glVertexAttribFormat #define GLEE_C_DEFINED_glVertexAttribFormat void __stdcall GLee_Lazy_glVertexAttribFormat(GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset) {if (GLeeInit()) glVertexAttribFormat(attribindex, size, type, normalized, relativeoffset);} GLEEPFNGLVERTEXATTRIBFORMATPROC GLeeFuncPtr_glVertexAttribFormat=GLee_Lazy_glVertexAttribFormat; #endif #ifndef GLEE_C_DEFINED_glVertexAttribIFormat #define GLEE_C_DEFINED_glVertexAttribIFormat void __stdcall GLee_Lazy_glVertexAttribIFormat(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset) {if (GLeeInit()) glVertexAttribIFormat(attribindex, size, type, relativeoffset);} GLEEPFNGLVERTEXATTRIBIFORMATPROC GLeeFuncPtr_glVertexAttribIFormat=GLee_Lazy_glVertexAttribIFormat; #endif #ifndef GLEE_C_DEFINED_glVertexAttribLFormat #define GLEE_C_DEFINED_glVertexAttribLFormat void __stdcall GLee_Lazy_glVertexAttribLFormat(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset) {if (GLeeInit()) glVertexAttribLFormat(attribindex, size, type, relativeoffset);} GLEEPFNGLVERTEXATTRIBLFORMATPROC GLeeFuncPtr_glVertexAttribLFormat=GLee_Lazy_glVertexAttribLFormat; #endif #ifndef GLEE_C_DEFINED_glVertexAttribBinding #define GLEE_C_DEFINED_glVertexAttribBinding void __stdcall GLee_Lazy_glVertexAttribBinding(GLuint attribindex, GLuint bindingindex) {if (GLeeInit()) glVertexAttribBinding(attribindex, bindingindex);} GLEEPFNGLVERTEXATTRIBBINDINGPROC GLeeFuncPtr_glVertexAttribBinding=GLee_Lazy_glVertexAttribBinding; #endif #ifndef GLEE_C_DEFINED_glVertexBindingDivisor #define GLEE_C_DEFINED_glVertexBindingDivisor void __stdcall GLee_Lazy_glVertexBindingDivisor(GLuint bindingindex, GLuint divisor) {if (GLeeInit()) glVertexBindingDivisor(bindingindex, divisor);} GLEEPFNGLVERTEXBINDINGDIVISORPROC GLeeFuncPtr_glVertexBindingDivisor=GLee_Lazy_glVertexBindingDivisor; #endif #ifndef GLEE_C_DEFINED_glVertexArrayBindVertexBufferEXT #define GLEE_C_DEFINED_glVertexArrayBindVertexBufferEXT void __stdcall GLee_Lazy_glVertexArrayBindVertexBufferEXT(GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride) {if (GLeeInit()) glVertexArrayBindVertexBufferEXT(vaobj, bindingindex, buffer, offset, stride);} GLEEPFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC GLeeFuncPtr_glVertexArrayBindVertexBufferEXT=GLee_Lazy_glVertexArrayBindVertexBufferEXT; #endif #ifndef GLEE_C_DEFINED_glVertexArrayVertexAttribFormatEXT #define GLEE_C_DEFINED_glVertexArrayVertexAttribFormatEXT void __stdcall GLee_Lazy_glVertexArrayVertexAttribFormatEXT(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset) {if (GLeeInit()) glVertexArrayVertexAttribFormatEXT(vaobj, attribindex, size, type, normalized, relativeoffset);} GLEEPFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC GLeeFuncPtr_glVertexArrayVertexAttribFormatEXT=GLee_Lazy_glVertexArrayVertexAttribFormatEXT; #endif #ifndef GLEE_C_DEFINED_glVertexArrayVertexAttribIFormatEXT #define GLEE_C_DEFINED_glVertexArrayVertexAttribIFormatEXT void __stdcall GLee_Lazy_glVertexArrayVertexAttribIFormatEXT(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset) {if (GLeeInit()) glVertexArrayVertexAttribIFormatEXT(vaobj, attribindex, size, type, relativeoffset);} GLEEPFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC GLeeFuncPtr_glVertexArrayVertexAttribIFormatEXT=GLee_Lazy_glVertexArrayVertexAttribIFormatEXT; #endif #ifndef GLEE_C_DEFINED_glVertexArrayVertexAttribLFormatEXT #define GLEE_C_DEFINED_glVertexArrayVertexAttribLFormatEXT void __stdcall GLee_Lazy_glVertexArrayVertexAttribLFormatEXT(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset) {if (GLeeInit()) glVertexArrayVertexAttribLFormatEXT(vaobj, attribindex, size, type, relativeoffset);} GLEEPFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC GLeeFuncPtr_glVertexArrayVertexAttribLFormatEXT=GLee_Lazy_glVertexArrayVertexAttribLFormatEXT; #endif #ifndef GLEE_C_DEFINED_glVertexArrayVertexAttribBindingEXT #define GLEE_C_DEFINED_glVertexArrayVertexAttribBindingEXT void __stdcall GLee_Lazy_glVertexArrayVertexAttribBindingEXT(GLuint vaobj, GLuint attribindex, GLuint bindingindex) {if (GLeeInit()) glVertexArrayVertexAttribBindingEXT(vaobj, attribindex, bindingindex);} GLEEPFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC GLeeFuncPtr_glVertexArrayVertexAttribBindingEXT=GLee_Lazy_glVertexArrayVertexAttribBindingEXT; #endif #ifndef GLEE_C_DEFINED_glVertexArrayVertexBindingDivisorEXT #define GLEE_C_DEFINED_glVertexArrayVertexBindingDivisorEXT void __stdcall GLee_Lazy_glVertexArrayVertexBindingDivisorEXT(GLuint vaobj, GLuint bindingindex, GLuint divisor) {if (GLeeInit()) glVertexArrayVertexBindingDivisorEXT(vaobj, bindingindex, divisor);} GLEEPFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC GLeeFuncPtr_glVertexArrayVertexBindingDivisorEXT=GLee_Lazy_glVertexArrayVertexBindingDivisorEXT; #endif #endif /* GL_ARB_robustness_isolation */ #ifdef __GLEE_GL_ARB_robustness_isolation #endif /* GL_ARB_ES3_compatibility */ #ifdef __GLEE_GL_ARB_ES3_compatibility #endif /* GL_ARB_explicit_uniform_location */ #ifdef __GLEE_GL_ARB_explicit_uniform_location #endif /* GL_ARB_fragment_layer_viewport */ #ifdef __GLEE_GL_ARB_fragment_layer_viewport #endif /* GL_ARB_framebuffer_no_attachments */ #ifdef __GLEE_GL_ARB_framebuffer_no_attachments #ifndef GLEE_C_DEFINED_glFramebufferParameteri #define GLEE_C_DEFINED_glFramebufferParameteri void __stdcall GLee_Lazy_glFramebufferParameteri(GLenum target, GLenum pname, GLint param) {if (GLeeInit()) glFramebufferParameteri(target, pname, param);} GLEEPFNGLFRAMEBUFFERPARAMETERIPROC GLeeFuncPtr_glFramebufferParameteri=GLee_Lazy_glFramebufferParameteri; #endif #ifndef GLEE_C_DEFINED_glGetFramebufferParameteriv #define GLEE_C_DEFINED_glGetFramebufferParameteriv void __stdcall GLee_Lazy_glGetFramebufferParameteriv(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetFramebufferParameteriv(target, pname, params);} GLEEPFNGLGETFRAMEBUFFERPARAMETERIVPROC GLeeFuncPtr_glGetFramebufferParameteriv=GLee_Lazy_glGetFramebufferParameteriv; #endif #ifndef GLEE_C_DEFINED_glNamedFramebufferParameteriEXT #define GLEE_C_DEFINED_glNamedFramebufferParameteriEXT void __stdcall GLee_Lazy_glNamedFramebufferParameteriEXT(GLuint framebuffer, GLenum pname, GLint param) {if (GLeeInit()) glNamedFramebufferParameteriEXT(framebuffer, pname, param);} GLEEPFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC GLeeFuncPtr_glNamedFramebufferParameteriEXT=GLee_Lazy_glNamedFramebufferParameteriEXT; #endif #ifndef GLEE_C_DEFINED_glGetNamedFramebufferParameterivEXT #define GLEE_C_DEFINED_glGetNamedFramebufferParameterivEXT void __stdcall GLee_Lazy_glGetNamedFramebufferParameterivEXT(GLuint framebuffer, GLenum pname, GLint * params) {if (GLeeInit()) glGetNamedFramebufferParameterivEXT(framebuffer, pname, params);} GLEEPFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC GLeeFuncPtr_glGetNamedFramebufferParameterivEXT=GLee_Lazy_glGetNamedFramebufferParameterivEXT; #endif #endif /* GL_ARB_internalformat_query2 */ #ifdef __GLEE_GL_ARB_internalformat_query2 #ifndef GLEE_C_DEFINED_glGetInternalformati64v #define GLEE_C_DEFINED_glGetInternalformati64v void __stdcall GLee_Lazy_glGetInternalformati64v(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 * params) {if (GLeeInit()) glGetInternalformati64v(target, internalformat, pname, bufSize, params);} GLEEPFNGLGETINTERNALFORMATI64VPROC GLeeFuncPtr_glGetInternalformati64v=GLee_Lazy_glGetInternalformati64v; #endif #endif /* GL_ARB_invalidate_subdata */ #ifdef __GLEE_GL_ARB_invalidate_subdata #ifndef GLEE_C_DEFINED_glInvalidateTexSubImage #define GLEE_C_DEFINED_glInvalidateTexSubImage void __stdcall GLee_Lazy_glInvalidateTexSubImage(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth) {if (GLeeInit()) glInvalidateTexSubImage(texture, level, xoffset, yoffset, zoffset, width, height, depth);} GLEEPFNGLINVALIDATETEXSUBIMAGEPROC GLeeFuncPtr_glInvalidateTexSubImage=GLee_Lazy_glInvalidateTexSubImage; #endif #ifndef GLEE_C_DEFINED_glInvalidateTexImage #define GLEE_C_DEFINED_glInvalidateTexImage void __stdcall GLee_Lazy_glInvalidateTexImage(GLuint texture, GLint level) {if (GLeeInit()) glInvalidateTexImage(texture, level);} GLEEPFNGLINVALIDATETEXIMAGEPROC GLeeFuncPtr_glInvalidateTexImage=GLee_Lazy_glInvalidateTexImage; #endif #ifndef GLEE_C_DEFINED_glInvalidateBufferSubData #define GLEE_C_DEFINED_glInvalidateBufferSubData void __stdcall GLee_Lazy_glInvalidateBufferSubData(GLuint buffer, GLintptr offset, GLsizeiptr length) {if (GLeeInit()) glInvalidateBufferSubData(buffer, offset, length);} GLEEPFNGLINVALIDATEBUFFERSUBDATAPROC GLeeFuncPtr_glInvalidateBufferSubData=GLee_Lazy_glInvalidateBufferSubData; #endif #ifndef GLEE_C_DEFINED_glInvalidateBufferData #define GLEE_C_DEFINED_glInvalidateBufferData void __stdcall GLee_Lazy_glInvalidateBufferData(GLuint buffer) {if (GLeeInit()) glInvalidateBufferData(buffer);} GLEEPFNGLINVALIDATEBUFFERDATAPROC GLeeFuncPtr_glInvalidateBufferData=GLee_Lazy_glInvalidateBufferData; #endif #ifndef GLEE_C_DEFINED_glInvalidateFramebuffer #define GLEE_C_DEFINED_glInvalidateFramebuffer void __stdcall GLee_Lazy_glInvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum * attachments) {if (GLeeInit()) glInvalidateFramebuffer(target, numAttachments, attachments);} GLEEPFNGLINVALIDATEFRAMEBUFFERPROC GLeeFuncPtr_glInvalidateFramebuffer=GLee_Lazy_glInvalidateFramebuffer; #endif #ifndef GLEE_C_DEFINED_glInvalidateSubFramebuffer #define GLEE_C_DEFINED_glInvalidateSubFramebuffer void __stdcall GLee_Lazy_glInvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum * attachments, GLint x, GLint y, GLsizei width, GLsizei height) {if (GLeeInit()) glInvalidateSubFramebuffer(target, numAttachments, attachments, x, y, width, height);} GLEEPFNGLINVALIDATESUBFRAMEBUFFERPROC GLeeFuncPtr_glInvalidateSubFramebuffer=GLee_Lazy_glInvalidateSubFramebuffer; #endif #endif /* GL_ARB_multi_draw_indirect */ #ifdef __GLEE_GL_ARB_multi_draw_indirect #ifndef GLEE_C_DEFINED_glMultiDrawArraysIndirect #define GLEE_C_DEFINED_glMultiDrawArraysIndirect void __stdcall GLee_Lazy_glMultiDrawArraysIndirect(GLenum mode, const void * indirect, GLsizei drawcount, GLsizei stride) {if (GLeeInit()) glMultiDrawArraysIndirect(mode, indirect, drawcount, stride);} GLEEPFNGLMULTIDRAWARRAYSINDIRECTPROC GLeeFuncPtr_glMultiDrawArraysIndirect=GLee_Lazy_glMultiDrawArraysIndirect; #endif #ifndef GLEE_C_DEFINED_glMultiDrawElementsIndirect #define GLEE_C_DEFINED_glMultiDrawElementsIndirect void __stdcall GLee_Lazy_glMultiDrawElementsIndirect(GLenum mode, GLenum type, const void * indirect, GLsizei drawcount, GLsizei stride) {if (GLeeInit()) glMultiDrawElementsIndirect(mode, type, indirect, drawcount, stride);} GLEEPFNGLMULTIDRAWELEMENTSINDIRECTPROC GLeeFuncPtr_glMultiDrawElementsIndirect=GLee_Lazy_glMultiDrawElementsIndirect; #endif #endif /* GL_ARB_program_interface_query */ #ifdef __GLEE_GL_ARB_program_interface_query #ifndef GLEE_C_DEFINED_glGetProgramInterfaceiv #define GLEE_C_DEFINED_glGetProgramInterfaceiv void __stdcall GLee_Lazy_glGetProgramInterfaceiv(GLuint program, GLenum programInterface, GLenum pname, GLint * params) {if (GLeeInit()) glGetProgramInterfaceiv(program, programInterface, pname, params);} GLEEPFNGLGETPROGRAMINTERFACEIVPROC GLeeFuncPtr_glGetProgramInterfaceiv=GLee_Lazy_glGetProgramInterfaceiv; #endif #ifndef GLEE_C_DEFINED_glGetProgramResourceIndex #define GLEE_C_DEFINED_glGetProgramResourceIndex GLuint __stdcall GLee_Lazy_glGetProgramResourceIndex(GLuint program, GLenum programInterface, const GLchar * name) {if (GLeeInit()) return glGetProgramResourceIndex(program, programInterface, name); return (GLuint)0;} GLEEPFNGLGETPROGRAMRESOURCEINDEXPROC GLeeFuncPtr_glGetProgramResourceIndex=GLee_Lazy_glGetProgramResourceIndex; #endif #ifndef GLEE_C_DEFINED_glGetProgramResourceName #define GLEE_C_DEFINED_glGetProgramResourceName void __stdcall GLee_Lazy_glGetProgramResourceName(GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei * length, GLchar * name) {if (GLeeInit()) glGetProgramResourceName(program, programInterface, index, bufSize, length, name);} GLEEPFNGLGETPROGRAMRESOURCENAMEPROC GLeeFuncPtr_glGetProgramResourceName=GLee_Lazy_glGetProgramResourceName; #endif #ifndef GLEE_C_DEFINED_glGetProgramResourceiv #define GLEE_C_DEFINED_glGetProgramResourceiv void __stdcall GLee_Lazy_glGetProgramResourceiv(GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum * props, GLsizei bufSize, GLsizei * length, GLint * params) {if (GLeeInit()) glGetProgramResourceiv(program, programInterface, index, propCount, props, bufSize, length, params);} GLEEPFNGLGETPROGRAMRESOURCEIVPROC GLeeFuncPtr_glGetProgramResourceiv=GLee_Lazy_glGetProgramResourceiv; #endif #ifndef GLEE_C_DEFINED_glGetProgramResourceLocation #define GLEE_C_DEFINED_glGetProgramResourceLocation GLint __stdcall GLee_Lazy_glGetProgramResourceLocation(GLuint program, GLenum programInterface, const GLchar * name) {if (GLeeInit()) return glGetProgramResourceLocation(program, programInterface, name); return (GLint)0;} GLEEPFNGLGETPROGRAMRESOURCELOCATIONPROC GLeeFuncPtr_glGetProgramResourceLocation=GLee_Lazy_glGetProgramResourceLocation; #endif #ifndef GLEE_C_DEFINED_glGetProgramResourceLocationIndex #define GLEE_C_DEFINED_glGetProgramResourceLocationIndex GLint __stdcall GLee_Lazy_glGetProgramResourceLocationIndex(GLuint program, GLenum programInterface, const GLchar * name) {if (GLeeInit()) return glGetProgramResourceLocationIndex(program, programInterface, name); return (GLint)0;} GLEEPFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC GLeeFuncPtr_glGetProgramResourceLocationIndex=GLee_Lazy_glGetProgramResourceLocationIndex; #endif #endif /* GL_ARB_robust_buffer_access_behavior */ #ifdef __GLEE_GL_ARB_robust_buffer_access_behavior #endif /* GL_ARB_shader_image_size */ #ifdef __GLEE_GL_ARB_shader_image_size #endif /* GL_ARB_shader_storage_buffer_object */ #ifdef __GLEE_GL_ARB_shader_storage_buffer_object #ifndef GLEE_C_DEFINED_glShaderStorageBlockBinding #define GLEE_C_DEFINED_glShaderStorageBlockBinding void __stdcall GLee_Lazy_glShaderStorageBlockBinding(GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding) {if (GLeeInit()) glShaderStorageBlockBinding(program, storageBlockIndex, storageBlockBinding);} GLEEPFNGLSHADERSTORAGEBLOCKBINDINGPROC GLeeFuncPtr_glShaderStorageBlockBinding=GLee_Lazy_glShaderStorageBlockBinding; #endif #endif /* GL_ARB_stencil_texturing */ #ifdef __GLEE_GL_ARB_stencil_texturing #endif /* GL_ARB_texture_buffer_range */ #ifdef __GLEE_GL_ARB_texture_buffer_range #ifndef GLEE_C_DEFINED_glTexBufferRange #define GLEE_C_DEFINED_glTexBufferRange void __stdcall GLee_Lazy_glTexBufferRange(GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size) {if (GLeeInit()) glTexBufferRange(target, internalformat, buffer, offset, size);} GLEEPFNGLTEXBUFFERRANGEPROC GLeeFuncPtr_glTexBufferRange=GLee_Lazy_glTexBufferRange; #endif #ifndef GLEE_C_DEFINED_glTextureBufferRangeEXT #define GLEE_C_DEFINED_glTextureBufferRangeEXT void __stdcall GLee_Lazy_glTextureBufferRangeEXT(GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size) {if (GLeeInit()) glTextureBufferRangeEXT(texture, target, internalformat, buffer, offset, size);} GLEEPFNGLTEXTUREBUFFERRANGEEXTPROC GLeeFuncPtr_glTextureBufferRangeEXT=GLee_Lazy_glTextureBufferRangeEXT; #endif #endif /* GL_ARB_texture_query_levels */ #ifdef __GLEE_GL_ARB_texture_query_levels #endif /* GL_ARB_texture_storage_multisample */ #ifdef __GLEE_GL_ARB_texture_storage_multisample #ifndef GLEE_C_DEFINED_glTexStorage2DMultisample #define GLEE_C_DEFINED_glTexStorage2DMultisample void __stdcall GLee_Lazy_glTexStorage2DMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations) {if (GLeeInit()) glTexStorage2DMultisample(target, samples, internalformat, width, height, fixedsamplelocations);} GLEEPFNGLTEXSTORAGE2DMULTISAMPLEPROC GLeeFuncPtr_glTexStorage2DMultisample=GLee_Lazy_glTexStorage2DMultisample; #endif #ifndef GLEE_C_DEFINED_glTexStorage3DMultisample #define GLEE_C_DEFINED_glTexStorage3DMultisample void __stdcall GLee_Lazy_glTexStorage3DMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations) {if (GLeeInit()) glTexStorage3DMultisample(target, samples, internalformat, width, height, depth, fixedsamplelocations);} GLEEPFNGLTEXSTORAGE3DMULTISAMPLEPROC GLeeFuncPtr_glTexStorage3DMultisample=GLee_Lazy_glTexStorage3DMultisample; #endif #ifndef GLEE_C_DEFINED_glTextureStorage2DMultisampleEXT #define GLEE_C_DEFINED_glTextureStorage2DMultisampleEXT void __stdcall GLee_Lazy_glTextureStorage2DMultisampleEXT(GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations) {if (GLeeInit()) glTextureStorage2DMultisampleEXT(texture, target, samples, internalformat, width, height, fixedsamplelocations);} GLEEPFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC GLeeFuncPtr_glTextureStorage2DMultisampleEXT=GLee_Lazy_glTextureStorage2DMultisampleEXT; #endif #ifndef GLEE_C_DEFINED_glTextureStorage3DMultisampleEXT #define GLEE_C_DEFINED_glTextureStorage3DMultisampleEXT void __stdcall GLee_Lazy_glTextureStorage3DMultisampleEXT(GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations) {if (GLeeInit()) glTextureStorage3DMultisampleEXT(texture, target, samples, internalformat, width, height, depth, fixedsamplelocations);} GLEEPFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC GLeeFuncPtr_glTextureStorage3DMultisampleEXT=GLee_Lazy_glTextureStorage3DMultisampleEXT; #endif #endif /* GL_EXT_abgr */ #ifdef __GLEE_GL_EXT_abgr #endif /* GL_EXT_blend_color */ #ifdef __GLEE_GL_EXT_blend_color #ifndef GLEE_C_DEFINED_glBlendColorEXT #define GLEE_C_DEFINED_glBlendColorEXT void __stdcall GLee_Lazy_glBlendColorEXT(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) {if (GLeeInit()) glBlendColorEXT(red, green, blue, alpha);} GLEEPFNGLBLENDCOLOREXTPROC GLeeFuncPtr_glBlendColorEXT=GLee_Lazy_glBlendColorEXT; #endif #endif /* GL_EXT_polygon_offset */ #ifdef __GLEE_GL_EXT_polygon_offset #ifndef GLEE_C_DEFINED_glPolygonOffsetEXT #define GLEE_C_DEFINED_glPolygonOffsetEXT void __stdcall GLee_Lazy_glPolygonOffsetEXT(GLfloat factor, GLfloat bias) {if (GLeeInit()) glPolygonOffsetEXT(factor, bias);} GLEEPFNGLPOLYGONOFFSETEXTPROC GLeeFuncPtr_glPolygonOffsetEXT=GLee_Lazy_glPolygonOffsetEXT; #endif #endif /* GL_EXT_texture */ #ifdef __GLEE_GL_EXT_texture #endif /* GL_EXT_texture3D */ #ifdef __GLEE_GL_EXT_texture3D #ifndef GLEE_C_DEFINED_glTexImage3DEXT #define GLEE_C_DEFINED_glTexImage3DEXT void __stdcall GLee_Lazy_glTexImage3DEXT(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glTexImage3DEXT(target, level, internalformat, width, height, depth, border, format, type, pixels);} GLEEPFNGLTEXIMAGE3DEXTPROC GLeeFuncPtr_glTexImage3DEXT=GLee_Lazy_glTexImage3DEXT; #endif #ifndef GLEE_C_DEFINED_glTexSubImage3DEXT #define GLEE_C_DEFINED_glTexSubImage3DEXT void __stdcall GLee_Lazy_glTexSubImage3DEXT(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glTexSubImage3DEXT(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);} GLEEPFNGLTEXSUBIMAGE3DEXTPROC GLeeFuncPtr_glTexSubImage3DEXT=GLee_Lazy_glTexSubImage3DEXT; #endif #endif /* GL_SGIS_texture_filter4 */ #ifdef __GLEE_GL_SGIS_texture_filter4 #ifndef GLEE_C_DEFINED_glGetTexFilterFuncSGIS #define GLEE_C_DEFINED_glGetTexFilterFuncSGIS void __stdcall GLee_Lazy_glGetTexFilterFuncSGIS(GLenum target, GLenum filter, GLfloat * weights) {if (GLeeInit()) glGetTexFilterFuncSGIS(target, filter, weights);} GLEEPFNGLGETTEXFILTERFUNCSGISPROC GLeeFuncPtr_glGetTexFilterFuncSGIS=GLee_Lazy_glGetTexFilterFuncSGIS; #endif #ifndef GLEE_C_DEFINED_glTexFilterFuncSGIS #define GLEE_C_DEFINED_glTexFilterFuncSGIS void __stdcall GLee_Lazy_glTexFilterFuncSGIS(GLenum target, GLenum filter, GLsizei n, const GLfloat * weights) {if (GLeeInit()) glTexFilterFuncSGIS(target, filter, n, weights);} GLEEPFNGLTEXFILTERFUNCSGISPROC GLeeFuncPtr_glTexFilterFuncSGIS=GLee_Lazy_glTexFilterFuncSGIS; #endif #endif /* GL_EXT_subtexture */ #ifdef __GLEE_GL_EXT_subtexture #ifndef GLEE_C_DEFINED_glTexSubImage1DEXT #define GLEE_C_DEFINED_glTexSubImage1DEXT void __stdcall GLee_Lazy_glTexSubImage1DEXT(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glTexSubImage1DEXT(target, level, xoffset, width, format, type, pixels);} GLEEPFNGLTEXSUBIMAGE1DEXTPROC GLeeFuncPtr_glTexSubImage1DEXT=GLee_Lazy_glTexSubImage1DEXT; #endif #ifndef GLEE_C_DEFINED_glTexSubImage2DEXT #define GLEE_C_DEFINED_glTexSubImage2DEXT void __stdcall GLee_Lazy_glTexSubImage2DEXT(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glTexSubImage2DEXT(target, level, xoffset, yoffset, width, height, format, type, pixels);} GLEEPFNGLTEXSUBIMAGE2DEXTPROC GLeeFuncPtr_glTexSubImage2DEXT=GLee_Lazy_glTexSubImage2DEXT; #endif #endif /* GL_EXT_copy_texture */ #ifdef __GLEE_GL_EXT_copy_texture #ifndef GLEE_C_DEFINED_glCopyTexImage1DEXT #define GLEE_C_DEFINED_glCopyTexImage1DEXT void __stdcall GLee_Lazy_glCopyTexImage1DEXT(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border) {if (GLeeInit()) glCopyTexImage1DEXT(target, level, internalformat, x, y, width, border);} GLEEPFNGLCOPYTEXIMAGE1DEXTPROC GLeeFuncPtr_glCopyTexImage1DEXT=GLee_Lazy_glCopyTexImage1DEXT; #endif #ifndef GLEE_C_DEFINED_glCopyTexImage2DEXT #define GLEE_C_DEFINED_glCopyTexImage2DEXT void __stdcall GLee_Lazy_glCopyTexImage2DEXT(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) {if (GLeeInit()) glCopyTexImage2DEXT(target, level, internalformat, x, y, width, height, border);} GLEEPFNGLCOPYTEXIMAGE2DEXTPROC GLeeFuncPtr_glCopyTexImage2DEXT=GLee_Lazy_glCopyTexImage2DEXT; #endif #ifndef GLEE_C_DEFINED_glCopyTexSubImage1DEXT #define GLEE_C_DEFINED_glCopyTexSubImage1DEXT void __stdcall GLee_Lazy_glCopyTexSubImage1DEXT(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) {if (GLeeInit()) glCopyTexSubImage1DEXT(target, level, xoffset, x, y, width);} GLEEPFNGLCOPYTEXSUBIMAGE1DEXTPROC GLeeFuncPtr_glCopyTexSubImage1DEXT=GLee_Lazy_glCopyTexSubImage1DEXT; #endif #ifndef GLEE_C_DEFINED_glCopyTexSubImage2DEXT #define GLEE_C_DEFINED_glCopyTexSubImage2DEXT void __stdcall GLee_Lazy_glCopyTexSubImage2DEXT(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) {if (GLeeInit()) glCopyTexSubImage2DEXT(target, level, xoffset, yoffset, x, y, width, height);} GLEEPFNGLCOPYTEXSUBIMAGE2DEXTPROC GLeeFuncPtr_glCopyTexSubImage2DEXT=GLee_Lazy_glCopyTexSubImage2DEXT; #endif #ifndef GLEE_C_DEFINED_glCopyTexSubImage3DEXT #define GLEE_C_DEFINED_glCopyTexSubImage3DEXT void __stdcall GLee_Lazy_glCopyTexSubImage3DEXT(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) {if (GLeeInit()) glCopyTexSubImage3DEXT(target, level, xoffset, yoffset, zoffset, x, y, width, height);} GLEEPFNGLCOPYTEXSUBIMAGE3DEXTPROC GLeeFuncPtr_glCopyTexSubImage3DEXT=GLee_Lazy_glCopyTexSubImage3DEXT; #endif #endif /* GL_EXT_histogram */ #ifdef __GLEE_GL_EXT_histogram #ifndef GLEE_C_DEFINED_glGetHistogramEXT #define GLEE_C_DEFINED_glGetHistogramEXT void __stdcall GLee_Lazy_glGetHistogramEXT(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values) {if (GLeeInit()) glGetHistogramEXT(target, reset, format, type, values);} GLEEPFNGLGETHISTOGRAMEXTPROC GLeeFuncPtr_glGetHistogramEXT=GLee_Lazy_glGetHistogramEXT; #endif #ifndef GLEE_C_DEFINED_glGetHistogramParameterfvEXT #define GLEE_C_DEFINED_glGetHistogramParameterfvEXT void __stdcall GLee_Lazy_glGetHistogramParameterfvEXT(GLenum target, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetHistogramParameterfvEXT(target, pname, params);} GLEEPFNGLGETHISTOGRAMPARAMETERFVEXTPROC GLeeFuncPtr_glGetHistogramParameterfvEXT=GLee_Lazy_glGetHistogramParameterfvEXT; #endif #ifndef GLEE_C_DEFINED_glGetHistogramParameterivEXT #define GLEE_C_DEFINED_glGetHistogramParameterivEXT void __stdcall GLee_Lazy_glGetHistogramParameterivEXT(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetHistogramParameterivEXT(target, pname, params);} GLEEPFNGLGETHISTOGRAMPARAMETERIVEXTPROC GLeeFuncPtr_glGetHistogramParameterivEXT=GLee_Lazy_glGetHistogramParameterivEXT; #endif #ifndef GLEE_C_DEFINED_glGetMinmaxEXT #define GLEE_C_DEFINED_glGetMinmaxEXT void __stdcall GLee_Lazy_glGetMinmaxEXT(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values) {if (GLeeInit()) glGetMinmaxEXT(target, reset, format, type, values);} GLEEPFNGLGETMINMAXEXTPROC GLeeFuncPtr_glGetMinmaxEXT=GLee_Lazy_glGetMinmaxEXT; #endif #ifndef GLEE_C_DEFINED_glGetMinmaxParameterfvEXT #define GLEE_C_DEFINED_glGetMinmaxParameterfvEXT void __stdcall GLee_Lazy_glGetMinmaxParameterfvEXT(GLenum target, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetMinmaxParameterfvEXT(target, pname, params);} GLEEPFNGLGETMINMAXPARAMETERFVEXTPROC GLeeFuncPtr_glGetMinmaxParameterfvEXT=GLee_Lazy_glGetMinmaxParameterfvEXT; #endif #ifndef GLEE_C_DEFINED_glGetMinmaxParameterivEXT #define GLEE_C_DEFINED_glGetMinmaxParameterivEXT void __stdcall GLee_Lazy_glGetMinmaxParameterivEXT(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetMinmaxParameterivEXT(target, pname, params);} GLEEPFNGLGETMINMAXPARAMETERIVEXTPROC GLeeFuncPtr_glGetMinmaxParameterivEXT=GLee_Lazy_glGetMinmaxParameterivEXT; #endif #ifndef GLEE_C_DEFINED_glHistogramEXT #define GLEE_C_DEFINED_glHistogramEXT void __stdcall GLee_Lazy_glHistogramEXT(GLenum target, GLsizei width, GLenum internalformat, GLboolean sink) {if (GLeeInit()) glHistogramEXT(target, width, internalformat, sink);} GLEEPFNGLHISTOGRAMEXTPROC GLeeFuncPtr_glHistogramEXT=GLee_Lazy_glHistogramEXT; #endif #ifndef GLEE_C_DEFINED_glMinmaxEXT #define GLEE_C_DEFINED_glMinmaxEXT void __stdcall GLee_Lazy_glMinmaxEXT(GLenum target, GLenum internalformat, GLboolean sink) {if (GLeeInit()) glMinmaxEXT(target, internalformat, sink);} GLEEPFNGLMINMAXEXTPROC GLeeFuncPtr_glMinmaxEXT=GLee_Lazy_glMinmaxEXT; #endif #ifndef GLEE_C_DEFINED_glResetHistogramEXT #define GLEE_C_DEFINED_glResetHistogramEXT void __stdcall GLee_Lazy_glResetHistogramEXT(GLenum target) {if (GLeeInit()) glResetHistogramEXT(target);} GLEEPFNGLRESETHISTOGRAMEXTPROC GLeeFuncPtr_glResetHistogramEXT=GLee_Lazy_glResetHistogramEXT; #endif #ifndef GLEE_C_DEFINED_glResetMinmaxEXT #define GLEE_C_DEFINED_glResetMinmaxEXT void __stdcall GLee_Lazy_glResetMinmaxEXT(GLenum target) {if (GLeeInit()) glResetMinmaxEXT(target);} GLEEPFNGLRESETMINMAXEXTPROC GLeeFuncPtr_glResetMinmaxEXT=GLee_Lazy_glResetMinmaxEXT; #endif #endif /* GL_EXT_convolution */ #ifdef __GLEE_GL_EXT_convolution #ifndef GLEE_C_DEFINED_glConvolutionFilter1DEXT #define GLEE_C_DEFINED_glConvolutionFilter1DEXT void __stdcall GLee_Lazy_glConvolutionFilter1DEXT(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * image) {if (GLeeInit()) glConvolutionFilter1DEXT(target, internalformat, width, format, type, image);} GLEEPFNGLCONVOLUTIONFILTER1DEXTPROC GLeeFuncPtr_glConvolutionFilter1DEXT=GLee_Lazy_glConvolutionFilter1DEXT; #endif #ifndef GLEE_C_DEFINED_glConvolutionFilter2DEXT #define GLEE_C_DEFINED_glConvolutionFilter2DEXT void __stdcall GLee_Lazy_glConvolutionFilter2DEXT(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * image) {if (GLeeInit()) glConvolutionFilter2DEXT(target, internalformat, width, height, format, type, image);} GLEEPFNGLCONVOLUTIONFILTER2DEXTPROC GLeeFuncPtr_glConvolutionFilter2DEXT=GLee_Lazy_glConvolutionFilter2DEXT; #endif #ifndef GLEE_C_DEFINED_glConvolutionParameterfEXT #define GLEE_C_DEFINED_glConvolutionParameterfEXT void __stdcall GLee_Lazy_glConvolutionParameterfEXT(GLenum target, GLenum pname, GLfloat params) {if (GLeeInit()) glConvolutionParameterfEXT(target, pname, params);} GLEEPFNGLCONVOLUTIONPARAMETERFEXTPROC GLeeFuncPtr_glConvolutionParameterfEXT=GLee_Lazy_glConvolutionParameterfEXT; #endif #ifndef GLEE_C_DEFINED_glConvolutionParameterfvEXT #define GLEE_C_DEFINED_glConvolutionParameterfvEXT void __stdcall GLee_Lazy_glConvolutionParameterfvEXT(GLenum target, GLenum pname, const GLfloat * params) {if (GLeeInit()) glConvolutionParameterfvEXT(target, pname, params);} GLEEPFNGLCONVOLUTIONPARAMETERFVEXTPROC GLeeFuncPtr_glConvolutionParameterfvEXT=GLee_Lazy_glConvolutionParameterfvEXT; #endif #ifndef GLEE_C_DEFINED_glConvolutionParameteriEXT #define GLEE_C_DEFINED_glConvolutionParameteriEXT void __stdcall GLee_Lazy_glConvolutionParameteriEXT(GLenum target, GLenum pname, GLint params) {if (GLeeInit()) glConvolutionParameteriEXT(target, pname, params);} GLEEPFNGLCONVOLUTIONPARAMETERIEXTPROC GLeeFuncPtr_glConvolutionParameteriEXT=GLee_Lazy_glConvolutionParameteriEXT; #endif #ifndef GLEE_C_DEFINED_glConvolutionParameterivEXT #define GLEE_C_DEFINED_glConvolutionParameterivEXT void __stdcall GLee_Lazy_glConvolutionParameterivEXT(GLenum target, GLenum pname, const GLint * params) {if (GLeeInit()) glConvolutionParameterivEXT(target, pname, params);} GLEEPFNGLCONVOLUTIONPARAMETERIVEXTPROC GLeeFuncPtr_glConvolutionParameterivEXT=GLee_Lazy_glConvolutionParameterivEXT; #endif #ifndef GLEE_C_DEFINED_glCopyConvolutionFilter1DEXT #define GLEE_C_DEFINED_glCopyConvolutionFilter1DEXT void __stdcall GLee_Lazy_glCopyConvolutionFilter1DEXT(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width) {if (GLeeInit()) glCopyConvolutionFilter1DEXT(target, internalformat, x, y, width);} GLEEPFNGLCOPYCONVOLUTIONFILTER1DEXTPROC GLeeFuncPtr_glCopyConvolutionFilter1DEXT=GLee_Lazy_glCopyConvolutionFilter1DEXT; #endif #ifndef GLEE_C_DEFINED_glCopyConvolutionFilter2DEXT #define GLEE_C_DEFINED_glCopyConvolutionFilter2DEXT void __stdcall GLee_Lazy_glCopyConvolutionFilter2DEXT(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height) {if (GLeeInit()) glCopyConvolutionFilter2DEXT(target, internalformat, x, y, width, height);} GLEEPFNGLCOPYCONVOLUTIONFILTER2DEXTPROC GLeeFuncPtr_glCopyConvolutionFilter2DEXT=GLee_Lazy_glCopyConvolutionFilter2DEXT; #endif #ifndef GLEE_C_DEFINED_glGetConvolutionFilterEXT #define GLEE_C_DEFINED_glGetConvolutionFilterEXT void __stdcall GLee_Lazy_glGetConvolutionFilterEXT(GLenum target, GLenum format, GLenum type, GLvoid * image) {if (GLeeInit()) glGetConvolutionFilterEXT(target, format, type, image);} GLEEPFNGLGETCONVOLUTIONFILTEREXTPROC GLeeFuncPtr_glGetConvolutionFilterEXT=GLee_Lazy_glGetConvolutionFilterEXT; #endif #ifndef GLEE_C_DEFINED_glGetConvolutionParameterfvEXT #define GLEE_C_DEFINED_glGetConvolutionParameterfvEXT void __stdcall GLee_Lazy_glGetConvolutionParameterfvEXT(GLenum target, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetConvolutionParameterfvEXT(target, pname, params);} GLEEPFNGLGETCONVOLUTIONPARAMETERFVEXTPROC GLeeFuncPtr_glGetConvolutionParameterfvEXT=GLee_Lazy_glGetConvolutionParameterfvEXT; #endif #ifndef GLEE_C_DEFINED_glGetConvolutionParameterivEXT #define GLEE_C_DEFINED_glGetConvolutionParameterivEXT void __stdcall GLee_Lazy_glGetConvolutionParameterivEXT(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetConvolutionParameterivEXT(target, pname, params);} GLEEPFNGLGETCONVOLUTIONPARAMETERIVEXTPROC GLeeFuncPtr_glGetConvolutionParameterivEXT=GLee_Lazy_glGetConvolutionParameterivEXT; #endif #ifndef GLEE_C_DEFINED_glGetSeparableFilterEXT #define GLEE_C_DEFINED_glGetSeparableFilterEXT void __stdcall GLee_Lazy_glGetSeparableFilterEXT(GLenum target, GLenum format, GLenum type, GLvoid * row, GLvoid * column, GLvoid * span) {if (GLeeInit()) glGetSeparableFilterEXT(target, format, type, row, column, span);} GLEEPFNGLGETSEPARABLEFILTEREXTPROC GLeeFuncPtr_glGetSeparableFilterEXT=GLee_Lazy_glGetSeparableFilterEXT; #endif #ifndef GLEE_C_DEFINED_glSeparableFilter2DEXT #define GLEE_C_DEFINED_glSeparableFilter2DEXT void __stdcall GLee_Lazy_glSeparableFilter2DEXT(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * row, const GLvoid * column) {if (GLeeInit()) glSeparableFilter2DEXT(target, internalformat, width, height, format, type, row, column);} GLEEPFNGLSEPARABLEFILTER2DEXTPROC GLeeFuncPtr_glSeparableFilter2DEXT=GLee_Lazy_glSeparableFilter2DEXT; #endif #endif /* GL_SGI_color_matrix */ #ifdef __GLEE_GL_SGI_color_matrix #endif /* GL_SGI_color_table */ #ifdef __GLEE_GL_SGI_color_table #ifndef GLEE_C_DEFINED_glColorTableSGI #define GLEE_C_DEFINED_glColorTableSGI void __stdcall GLee_Lazy_glColorTableSGI(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * table) {if (GLeeInit()) glColorTableSGI(target, internalformat, width, format, type, table);} GLEEPFNGLCOLORTABLESGIPROC GLeeFuncPtr_glColorTableSGI=GLee_Lazy_glColorTableSGI; #endif #ifndef GLEE_C_DEFINED_glColorTableParameterfvSGI #define GLEE_C_DEFINED_glColorTableParameterfvSGI void __stdcall GLee_Lazy_glColorTableParameterfvSGI(GLenum target, GLenum pname, const GLfloat * params) {if (GLeeInit()) glColorTableParameterfvSGI(target, pname, params);} GLEEPFNGLCOLORTABLEPARAMETERFVSGIPROC GLeeFuncPtr_glColorTableParameterfvSGI=GLee_Lazy_glColorTableParameterfvSGI; #endif #ifndef GLEE_C_DEFINED_glColorTableParameterivSGI #define GLEE_C_DEFINED_glColorTableParameterivSGI void __stdcall GLee_Lazy_glColorTableParameterivSGI(GLenum target, GLenum pname, const GLint * params) {if (GLeeInit()) glColorTableParameterivSGI(target, pname, params);} GLEEPFNGLCOLORTABLEPARAMETERIVSGIPROC GLeeFuncPtr_glColorTableParameterivSGI=GLee_Lazy_glColorTableParameterivSGI; #endif #ifndef GLEE_C_DEFINED_glCopyColorTableSGI #define GLEE_C_DEFINED_glCopyColorTableSGI void __stdcall GLee_Lazy_glCopyColorTableSGI(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width) {if (GLeeInit()) glCopyColorTableSGI(target, internalformat, x, y, width);} GLEEPFNGLCOPYCOLORTABLESGIPROC GLeeFuncPtr_glCopyColorTableSGI=GLee_Lazy_glCopyColorTableSGI; #endif #ifndef GLEE_C_DEFINED_glGetColorTableSGI #define GLEE_C_DEFINED_glGetColorTableSGI void __stdcall GLee_Lazy_glGetColorTableSGI(GLenum target, GLenum format, GLenum type, GLvoid * table) {if (GLeeInit()) glGetColorTableSGI(target, format, type, table);} GLEEPFNGLGETCOLORTABLESGIPROC GLeeFuncPtr_glGetColorTableSGI=GLee_Lazy_glGetColorTableSGI; #endif #ifndef GLEE_C_DEFINED_glGetColorTableParameterfvSGI #define GLEE_C_DEFINED_glGetColorTableParameterfvSGI void __stdcall GLee_Lazy_glGetColorTableParameterfvSGI(GLenum target, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetColorTableParameterfvSGI(target, pname, params);} GLEEPFNGLGETCOLORTABLEPARAMETERFVSGIPROC GLeeFuncPtr_glGetColorTableParameterfvSGI=GLee_Lazy_glGetColorTableParameterfvSGI; #endif #ifndef GLEE_C_DEFINED_glGetColorTableParameterivSGI #define GLEE_C_DEFINED_glGetColorTableParameterivSGI void __stdcall GLee_Lazy_glGetColorTableParameterivSGI(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetColorTableParameterivSGI(target, pname, params);} GLEEPFNGLGETCOLORTABLEPARAMETERIVSGIPROC GLeeFuncPtr_glGetColorTableParameterivSGI=GLee_Lazy_glGetColorTableParameterivSGI; #endif #endif /* GL_SGIS_pixel_texture */ #ifdef __GLEE_GL_SGIS_pixel_texture #ifndef GLEE_C_DEFINED_glPixelTexGenParameteriSGIS #define GLEE_C_DEFINED_glPixelTexGenParameteriSGIS void __stdcall GLee_Lazy_glPixelTexGenParameteriSGIS(GLenum pname, GLint param) {if (GLeeInit()) glPixelTexGenParameteriSGIS(pname, param);} GLEEPFNGLPIXELTEXGENPARAMETERISGISPROC GLeeFuncPtr_glPixelTexGenParameteriSGIS=GLee_Lazy_glPixelTexGenParameteriSGIS; #endif #ifndef GLEE_C_DEFINED_glPixelTexGenParameterivSGIS #define GLEE_C_DEFINED_glPixelTexGenParameterivSGIS void __stdcall GLee_Lazy_glPixelTexGenParameterivSGIS(GLenum pname, const GLint * params) {if (GLeeInit()) glPixelTexGenParameterivSGIS(pname, params);} GLEEPFNGLPIXELTEXGENPARAMETERIVSGISPROC GLeeFuncPtr_glPixelTexGenParameterivSGIS=GLee_Lazy_glPixelTexGenParameterivSGIS; #endif #ifndef GLEE_C_DEFINED_glPixelTexGenParameterfSGIS #define GLEE_C_DEFINED_glPixelTexGenParameterfSGIS void __stdcall GLee_Lazy_glPixelTexGenParameterfSGIS(GLenum pname, GLfloat param) {if (GLeeInit()) glPixelTexGenParameterfSGIS(pname, param);} GLEEPFNGLPIXELTEXGENPARAMETERFSGISPROC GLeeFuncPtr_glPixelTexGenParameterfSGIS=GLee_Lazy_glPixelTexGenParameterfSGIS; #endif #ifndef GLEE_C_DEFINED_glPixelTexGenParameterfvSGIS #define GLEE_C_DEFINED_glPixelTexGenParameterfvSGIS void __stdcall GLee_Lazy_glPixelTexGenParameterfvSGIS(GLenum pname, const GLfloat * params) {if (GLeeInit()) glPixelTexGenParameterfvSGIS(pname, params);} GLEEPFNGLPIXELTEXGENPARAMETERFVSGISPROC GLeeFuncPtr_glPixelTexGenParameterfvSGIS=GLee_Lazy_glPixelTexGenParameterfvSGIS; #endif #ifndef GLEE_C_DEFINED_glGetPixelTexGenParameterivSGIS #define GLEE_C_DEFINED_glGetPixelTexGenParameterivSGIS void __stdcall GLee_Lazy_glGetPixelTexGenParameterivSGIS(GLenum pname, GLint * params) {if (GLeeInit()) glGetPixelTexGenParameterivSGIS(pname, params);} GLEEPFNGLGETPIXELTEXGENPARAMETERIVSGISPROC GLeeFuncPtr_glGetPixelTexGenParameterivSGIS=GLee_Lazy_glGetPixelTexGenParameterivSGIS; #endif #ifndef GLEE_C_DEFINED_glGetPixelTexGenParameterfvSGIS #define GLEE_C_DEFINED_glGetPixelTexGenParameterfvSGIS void __stdcall GLee_Lazy_glGetPixelTexGenParameterfvSGIS(GLenum pname, GLfloat * params) {if (GLeeInit()) glGetPixelTexGenParameterfvSGIS(pname, params);} GLEEPFNGLGETPIXELTEXGENPARAMETERFVSGISPROC GLeeFuncPtr_glGetPixelTexGenParameterfvSGIS=GLee_Lazy_glGetPixelTexGenParameterfvSGIS; #endif #endif /* GL_SGIX_pixel_texture */ #ifdef __GLEE_GL_SGIX_pixel_texture #ifndef GLEE_C_DEFINED_glPixelTexGenSGIX #define GLEE_C_DEFINED_glPixelTexGenSGIX void __stdcall GLee_Lazy_glPixelTexGenSGIX(GLenum mode) {if (GLeeInit()) glPixelTexGenSGIX(mode);} GLEEPFNGLPIXELTEXGENSGIXPROC GLeeFuncPtr_glPixelTexGenSGIX=GLee_Lazy_glPixelTexGenSGIX; #endif #endif /* GL_SGIS_texture4D */ #ifdef __GLEE_GL_SGIS_texture4D #ifndef GLEE_C_DEFINED_glTexImage4DSGIS #define GLEE_C_DEFINED_glTexImage4DSGIS void __stdcall GLee_Lazy_glTexImage4DSGIS(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glTexImage4DSGIS(target, level, internalformat, width, height, depth, size4d, border, format, type, pixels);} GLEEPFNGLTEXIMAGE4DSGISPROC GLeeFuncPtr_glTexImage4DSGIS=GLee_Lazy_glTexImage4DSGIS; #endif #ifndef GLEE_C_DEFINED_glTexSubImage4DSGIS #define GLEE_C_DEFINED_glTexSubImage4DSGIS void __stdcall GLee_Lazy_glTexSubImage4DSGIS(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glTexSubImage4DSGIS(target, level, xoffset, yoffset, zoffset, woffset, width, height, depth, size4d, format, type, pixels);} GLEEPFNGLTEXSUBIMAGE4DSGISPROC GLeeFuncPtr_glTexSubImage4DSGIS=GLee_Lazy_glTexSubImage4DSGIS; #endif #endif /* GL_SGI_texture_color_table */ #ifdef __GLEE_GL_SGI_texture_color_table #endif /* GL_EXT_cmyka */ #ifdef __GLEE_GL_EXT_cmyka #endif /* GL_EXT_texture_object */ #ifdef __GLEE_GL_EXT_texture_object #ifndef GLEE_C_DEFINED_glAreTexturesResidentEXT #define GLEE_C_DEFINED_glAreTexturesResidentEXT GLboolean __stdcall GLee_Lazy_glAreTexturesResidentEXT(GLsizei n, const GLuint * textures, GLboolean * residences) {if (GLeeInit()) return glAreTexturesResidentEXT(n, textures, residences); return (GLboolean)0;} GLEEPFNGLARETEXTURESRESIDENTEXTPROC GLeeFuncPtr_glAreTexturesResidentEXT=GLee_Lazy_glAreTexturesResidentEXT; #endif #ifndef GLEE_C_DEFINED_glBindTextureEXT #define GLEE_C_DEFINED_glBindTextureEXT void __stdcall GLee_Lazy_glBindTextureEXT(GLenum target, GLuint texture) {if (GLeeInit()) glBindTextureEXT(target, texture);} GLEEPFNGLBINDTEXTUREEXTPROC GLeeFuncPtr_glBindTextureEXT=GLee_Lazy_glBindTextureEXT; #endif #ifndef GLEE_C_DEFINED_glDeleteTexturesEXT #define GLEE_C_DEFINED_glDeleteTexturesEXT void __stdcall GLee_Lazy_glDeleteTexturesEXT(GLsizei n, const GLuint * textures) {if (GLeeInit()) glDeleteTexturesEXT(n, textures);} GLEEPFNGLDELETETEXTURESEXTPROC GLeeFuncPtr_glDeleteTexturesEXT=GLee_Lazy_glDeleteTexturesEXT; #endif #ifndef GLEE_C_DEFINED_glGenTexturesEXT #define GLEE_C_DEFINED_glGenTexturesEXT void __stdcall GLee_Lazy_glGenTexturesEXT(GLsizei n, GLuint * textures) {if (GLeeInit()) glGenTexturesEXT(n, textures);} GLEEPFNGLGENTEXTURESEXTPROC GLeeFuncPtr_glGenTexturesEXT=GLee_Lazy_glGenTexturesEXT; #endif #ifndef GLEE_C_DEFINED_glIsTextureEXT #define GLEE_C_DEFINED_glIsTextureEXT GLboolean __stdcall GLee_Lazy_glIsTextureEXT(GLuint texture) {if (GLeeInit()) return glIsTextureEXT(texture); return (GLboolean)0;} GLEEPFNGLISTEXTUREEXTPROC GLeeFuncPtr_glIsTextureEXT=GLee_Lazy_glIsTextureEXT; #endif #ifndef GLEE_C_DEFINED_glPrioritizeTexturesEXT #define GLEE_C_DEFINED_glPrioritizeTexturesEXT void __stdcall GLee_Lazy_glPrioritizeTexturesEXT(GLsizei n, const GLuint * textures, const GLclampf * priorities) {if (GLeeInit()) glPrioritizeTexturesEXT(n, textures, priorities);} GLEEPFNGLPRIORITIZETEXTURESEXTPROC GLeeFuncPtr_glPrioritizeTexturesEXT=GLee_Lazy_glPrioritizeTexturesEXT; #endif #endif /* GL_SGIS_detail_texture */ #ifdef __GLEE_GL_SGIS_detail_texture #ifndef GLEE_C_DEFINED_glDetailTexFuncSGIS #define GLEE_C_DEFINED_glDetailTexFuncSGIS void __stdcall GLee_Lazy_glDetailTexFuncSGIS(GLenum target, GLsizei n, const GLfloat * points) {if (GLeeInit()) glDetailTexFuncSGIS(target, n, points);} GLEEPFNGLDETAILTEXFUNCSGISPROC GLeeFuncPtr_glDetailTexFuncSGIS=GLee_Lazy_glDetailTexFuncSGIS; #endif #ifndef GLEE_C_DEFINED_glGetDetailTexFuncSGIS #define GLEE_C_DEFINED_glGetDetailTexFuncSGIS void __stdcall GLee_Lazy_glGetDetailTexFuncSGIS(GLenum target, GLfloat * points) {if (GLeeInit()) glGetDetailTexFuncSGIS(target, points);} GLEEPFNGLGETDETAILTEXFUNCSGISPROC GLeeFuncPtr_glGetDetailTexFuncSGIS=GLee_Lazy_glGetDetailTexFuncSGIS; #endif #endif /* GL_SGIS_sharpen_texture */ #ifdef __GLEE_GL_SGIS_sharpen_texture #ifndef GLEE_C_DEFINED_glSharpenTexFuncSGIS #define GLEE_C_DEFINED_glSharpenTexFuncSGIS void __stdcall GLee_Lazy_glSharpenTexFuncSGIS(GLenum target, GLsizei n, const GLfloat * points) {if (GLeeInit()) glSharpenTexFuncSGIS(target, n, points);} GLEEPFNGLSHARPENTEXFUNCSGISPROC GLeeFuncPtr_glSharpenTexFuncSGIS=GLee_Lazy_glSharpenTexFuncSGIS; #endif #ifndef GLEE_C_DEFINED_glGetSharpenTexFuncSGIS #define GLEE_C_DEFINED_glGetSharpenTexFuncSGIS void __stdcall GLee_Lazy_glGetSharpenTexFuncSGIS(GLenum target, GLfloat * points) {if (GLeeInit()) glGetSharpenTexFuncSGIS(target, points);} GLEEPFNGLGETSHARPENTEXFUNCSGISPROC GLeeFuncPtr_glGetSharpenTexFuncSGIS=GLee_Lazy_glGetSharpenTexFuncSGIS; #endif #endif /* GL_EXT_packed_pixels */ #ifdef __GLEE_GL_EXT_packed_pixels #endif /* GL_SGIS_texture_lod */ #ifdef __GLEE_GL_SGIS_texture_lod #endif /* GL_SGIS_multisample */ #ifdef __GLEE_GL_SGIS_multisample #ifndef GLEE_C_DEFINED_glSampleMaskSGIS #define GLEE_C_DEFINED_glSampleMaskSGIS void __stdcall GLee_Lazy_glSampleMaskSGIS(GLclampf value, GLboolean invert) {if (GLeeInit()) glSampleMaskSGIS(value, invert);} GLEEPFNGLSAMPLEMASKSGISPROC GLeeFuncPtr_glSampleMaskSGIS=GLee_Lazy_glSampleMaskSGIS; #endif #ifndef GLEE_C_DEFINED_glSamplePatternSGIS #define GLEE_C_DEFINED_glSamplePatternSGIS void __stdcall GLee_Lazy_glSamplePatternSGIS(GLenum pattern) {if (GLeeInit()) glSamplePatternSGIS(pattern);} GLEEPFNGLSAMPLEPATTERNSGISPROC GLeeFuncPtr_glSamplePatternSGIS=GLee_Lazy_glSamplePatternSGIS; #endif #endif /* GL_EXT_rescale_normal */ #ifdef __GLEE_GL_EXT_rescale_normal #endif /* GL_EXT_vertex_array */ #ifdef __GLEE_GL_EXT_vertex_array #ifndef GLEE_C_DEFINED_glArrayElementEXT #define GLEE_C_DEFINED_glArrayElementEXT void __stdcall GLee_Lazy_glArrayElementEXT(GLint i) {if (GLeeInit()) glArrayElementEXT(i);} GLEEPFNGLARRAYELEMENTEXTPROC GLeeFuncPtr_glArrayElementEXT=GLee_Lazy_glArrayElementEXT; #endif #ifndef GLEE_C_DEFINED_glColorPointerEXT #define GLEE_C_DEFINED_glColorPointerEXT void __stdcall GLee_Lazy_glColorPointerEXT(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer) {if (GLeeInit()) glColorPointerEXT(size, type, stride, count, pointer);} GLEEPFNGLCOLORPOINTEREXTPROC GLeeFuncPtr_glColorPointerEXT=GLee_Lazy_glColorPointerEXT; #endif #ifndef GLEE_C_DEFINED_glDrawArraysEXT #define GLEE_C_DEFINED_glDrawArraysEXT void __stdcall GLee_Lazy_glDrawArraysEXT(GLenum mode, GLint first, GLsizei count) {if (GLeeInit()) glDrawArraysEXT(mode, first, count);} GLEEPFNGLDRAWARRAYSEXTPROC GLeeFuncPtr_glDrawArraysEXT=GLee_Lazy_glDrawArraysEXT; #endif #ifndef GLEE_C_DEFINED_glEdgeFlagPointerEXT #define GLEE_C_DEFINED_glEdgeFlagPointerEXT void __stdcall GLee_Lazy_glEdgeFlagPointerEXT(GLsizei stride, GLsizei count, const GLboolean * pointer) {if (GLeeInit()) glEdgeFlagPointerEXT(stride, count, pointer);} GLEEPFNGLEDGEFLAGPOINTEREXTPROC GLeeFuncPtr_glEdgeFlagPointerEXT=GLee_Lazy_glEdgeFlagPointerEXT; #endif #ifndef GLEE_C_DEFINED_glGetPointervEXT #define GLEE_C_DEFINED_glGetPointervEXT void __stdcall GLee_Lazy_glGetPointervEXT(GLenum pname, GLvoid* * params) {if (GLeeInit()) glGetPointervEXT(pname, params);} GLEEPFNGLGETPOINTERVEXTPROC GLeeFuncPtr_glGetPointervEXT=GLee_Lazy_glGetPointervEXT; #endif #ifndef GLEE_C_DEFINED_glIndexPointerEXT #define GLEE_C_DEFINED_glIndexPointerEXT void __stdcall GLee_Lazy_glIndexPointerEXT(GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer) {if (GLeeInit()) glIndexPointerEXT(type, stride, count, pointer);} GLEEPFNGLINDEXPOINTEREXTPROC GLeeFuncPtr_glIndexPointerEXT=GLee_Lazy_glIndexPointerEXT; #endif #ifndef GLEE_C_DEFINED_glNormalPointerEXT #define GLEE_C_DEFINED_glNormalPointerEXT void __stdcall GLee_Lazy_glNormalPointerEXT(GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer) {if (GLeeInit()) glNormalPointerEXT(type, stride, count, pointer);} GLEEPFNGLNORMALPOINTEREXTPROC GLeeFuncPtr_glNormalPointerEXT=GLee_Lazy_glNormalPointerEXT; #endif #ifndef GLEE_C_DEFINED_glTexCoordPointerEXT #define GLEE_C_DEFINED_glTexCoordPointerEXT void __stdcall GLee_Lazy_glTexCoordPointerEXT(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer) {if (GLeeInit()) glTexCoordPointerEXT(size, type, stride, count, pointer);} GLEEPFNGLTEXCOORDPOINTEREXTPROC GLeeFuncPtr_glTexCoordPointerEXT=GLee_Lazy_glTexCoordPointerEXT; #endif #ifndef GLEE_C_DEFINED_glVertexPointerEXT #define GLEE_C_DEFINED_glVertexPointerEXT void __stdcall GLee_Lazy_glVertexPointerEXT(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer) {if (GLeeInit()) glVertexPointerEXT(size, type, stride, count, pointer);} GLEEPFNGLVERTEXPOINTEREXTPROC GLeeFuncPtr_glVertexPointerEXT=GLee_Lazy_glVertexPointerEXT; #endif #endif /* GL_EXT_misc_attribute */ #ifdef __GLEE_GL_EXT_misc_attribute #endif /* GL_SGIS_generate_mipmap */ #ifdef __GLEE_GL_SGIS_generate_mipmap #endif /* GL_SGIX_clipmap */ #ifdef __GLEE_GL_SGIX_clipmap #endif /* GL_SGIX_shadow */ #ifdef __GLEE_GL_SGIX_shadow #endif /* GL_SGIS_texture_edge_clamp */ #ifdef __GLEE_GL_SGIS_texture_edge_clamp #endif /* GL_SGIS_texture_border_clamp */ #ifdef __GLEE_GL_SGIS_texture_border_clamp #endif /* GL_EXT_blend_minmax */ #ifdef __GLEE_GL_EXT_blend_minmax #ifndef GLEE_C_DEFINED_glBlendEquationEXT #define GLEE_C_DEFINED_glBlendEquationEXT void __stdcall GLee_Lazy_glBlendEquationEXT(GLenum mode) {if (GLeeInit()) glBlendEquationEXT(mode);} GLEEPFNGLBLENDEQUATIONEXTPROC GLeeFuncPtr_glBlendEquationEXT=GLee_Lazy_glBlendEquationEXT; #endif #endif /* GL_EXT_blend_subtract */ #ifdef __GLEE_GL_EXT_blend_subtract #endif /* GL_EXT_blend_logic_op */ #ifdef __GLEE_GL_EXT_blend_logic_op #endif /* GL_SGIX_interlace */ #ifdef __GLEE_GL_SGIX_interlace #endif /* GL_SGIX_pixel_tiles */ #ifdef __GLEE_GL_SGIX_pixel_tiles #endif /* GL_SGIS_texture_select */ #ifdef __GLEE_GL_SGIS_texture_select #endif /* GL_SGIX_sprite */ #ifdef __GLEE_GL_SGIX_sprite #ifndef GLEE_C_DEFINED_glSpriteParameterfSGIX #define GLEE_C_DEFINED_glSpriteParameterfSGIX void __stdcall GLee_Lazy_glSpriteParameterfSGIX(GLenum pname, GLfloat param) {if (GLeeInit()) glSpriteParameterfSGIX(pname, param);} GLEEPFNGLSPRITEPARAMETERFSGIXPROC GLeeFuncPtr_glSpriteParameterfSGIX=GLee_Lazy_glSpriteParameterfSGIX; #endif #ifndef GLEE_C_DEFINED_glSpriteParameterfvSGIX #define GLEE_C_DEFINED_glSpriteParameterfvSGIX void __stdcall GLee_Lazy_glSpriteParameterfvSGIX(GLenum pname, const GLfloat * params) {if (GLeeInit()) glSpriteParameterfvSGIX(pname, params);} GLEEPFNGLSPRITEPARAMETERFVSGIXPROC GLeeFuncPtr_glSpriteParameterfvSGIX=GLee_Lazy_glSpriteParameterfvSGIX; #endif #ifndef GLEE_C_DEFINED_glSpriteParameteriSGIX #define GLEE_C_DEFINED_glSpriteParameteriSGIX void __stdcall GLee_Lazy_glSpriteParameteriSGIX(GLenum pname, GLint param) {if (GLeeInit()) glSpriteParameteriSGIX(pname, param);} GLEEPFNGLSPRITEPARAMETERISGIXPROC GLeeFuncPtr_glSpriteParameteriSGIX=GLee_Lazy_glSpriteParameteriSGIX; #endif #ifndef GLEE_C_DEFINED_glSpriteParameterivSGIX #define GLEE_C_DEFINED_glSpriteParameterivSGIX void __stdcall GLee_Lazy_glSpriteParameterivSGIX(GLenum pname, const GLint * params) {if (GLeeInit()) glSpriteParameterivSGIX(pname, params);} GLEEPFNGLSPRITEPARAMETERIVSGIXPROC GLeeFuncPtr_glSpriteParameterivSGIX=GLee_Lazy_glSpriteParameterivSGIX; #endif #endif /* GL_SGIX_texture_multi_buffer */ #ifdef __GLEE_GL_SGIX_texture_multi_buffer #endif /* GL_EXT_point_parameters */ #ifdef __GLEE_GL_EXT_point_parameters #ifndef GLEE_C_DEFINED_glPointParameterfEXT #define GLEE_C_DEFINED_glPointParameterfEXT void __stdcall GLee_Lazy_glPointParameterfEXT(GLenum pname, GLfloat param) {if (GLeeInit()) glPointParameterfEXT(pname, param);} GLEEPFNGLPOINTPARAMETERFEXTPROC GLeeFuncPtr_glPointParameterfEXT=GLee_Lazy_glPointParameterfEXT; #endif #ifndef GLEE_C_DEFINED_glPointParameterfvEXT #define GLEE_C_DEFINED_glPointParameterfvEXT void __stdcall GLee_Lazy_glPointParameterfvEXT(GLenum pname, const GLfloat * params) {if (GLeeInit()) glPointParameterfvEXT(pname, params);} GLEEPFNGLPOINTPARAMETERFVEXTPROC GLeeFuncPtr_glPointParameterfvEXT=GLee_Lazy_glPointParameterfvEXT; #endif #endif /* GL_SGIS_point_parameters */ #ifdef __GLEE_GL_SGIS_point_parameters #ifndef GLEE_C_DEFINED_glPointParameterfSGIS #define GLEE_C_DEFINED_glPointParameterfSGIS void __stdcall GLee_Lazy_glPointParameterfSGIS(GLenum pname, GLfloat param) {if (GLeeInit()) glPointParameterfSGIS(pname, param);} GLEEPFNGLPOINTPARAMETERFSGISPROC GLeeFuncPtr_glPointParameterfSGIS=GLee_Lazy_glPointParameterfSGIS; #endif #ifndef GLEE_C_DEFINED_glPointParameterfvSGIS #define GLEE_C_DEFINED_glPointParameterfvSGIS void __stdcall GLee_Lazy_glPointParameterfvSGIS(GLenum pname, const GLfloat * params) {if (GLeeInit()) glPointParameterfvSGIS(pname, params);} GLEEPFNGLPOINTPARAMETERFVSGISPROC GLeeFuncPtr_glPointParameterfvSGIS=GLee_Lazy_glPointParameterfvSGIS; #endif #endif /* GL_SGIX_instruments */ #ifdef __GLEE_GL_SGIX_instruments #ifndef GLEE_C_DEFINED_glGetInstrumentsSGIX #define GLEE_C_DEFINED_glGetInstrumentsSGIX GLint __stdcall GLee_Lazy_glGetInstrumentsSGIX(void) {if (GLeeInit()) return glGetInstrumentsSGIX(); return (GLint)0;} GLEEPFNGLGETINSTRUMENTSSGIXPROC GLeeFuncPtr_glGetInstrumentsSGIX=GLee_Lazy_glGetInstrumentsSGIX; #endif #ifndef GLEE_C_DEFINED_glInstrumentsBufferSGIX #define GLEE_C_DEFINED_glInstrumentsBufferSGIX void __stdcall GLee_Lazy_glInstrumentsBufferSGIX(GLsizei size, GLint * buffer) {if (GLeeInit()) glInstrumentsBufferSGIX(size, buffer);} GLEEPFNGLINSTRUMENTSBUFFERSGIXPROC GLeeFuncPtr_glInstrumentsBufferSGIX=GLee_Lazy_glInstrumentsBufferSGIX; #endif #ifndef GLEE_C_DEFINED_glPollInstrumentsSGIX #define GLEE_C_DEFINED_glPollInstrumentsSGIX GLint __stdcall GLee_Lazy_glPollInstrumentsSGIX(GLint * marker_p) {if (GLeeInit()) return glPollInstrumentsSGIX(marker_p); return (GLint)0;} GLEEPFNGLPOLLINSTRUMENTSSGIXPROC GLeeFuncPtr_glPollInstrumentsSGIX=GLee_Lazy_glPollInstrumentsSGIX; #endif #ifndef GLEE_C_DEFINED_glReadInstrumentsSGIX #define GLEE_C_DEFINED_glReadInstrumentsSGIX void __stdcall GLee_Lazy_glReadInstrumentsSGIX(GLint marker) {if (GLeeInit()) glReadInstrumentsSGIX(marker);} GLEEPFNGLREADINSTRUMENTSSGIXPROC GLeeFuncPtr_glReadInstrumentsSGIX=GLee_Lazy_glReadInstrumentsSGIX; #endif #ifndef GLEE_C_DEFINED_glStartInstrumentsSGIX #define GLEE_C_DEFINED_glStartInstrumentsSGIX void __stdcall GLee_Lazy_glStartInstrumentsSGIX(void) {if (GLeeInit()) glStartInstrumentsSGIX();} GLEEPFNGLSTARTINSTRUMENTSSGIXPROC GLeeFuncPtr_glStartInstrumentsSGIX=GLee_Lazy_glStartInstrumentsSGIX; #endif #ifndef GLEE_C_DEFINED_glStopInstrumentsSGIX #define GLEE_C_DEFINED_glStopInstrumentsSGIX void __stdcall GLee_Lazy_glStopInstrumentsSGIX(GLint marker) {if (GLeeInit()) glStopInstrumentsSGIX(marker);} GLEEPFNGLSTOPINSTRUMENTSSGIXPROC GLeeFuncPtr_glStopInstrumentsSGIX=GLee_Lazy_glStopInstrumentsSGIX; #endif #endif /* GL_SGIX_texture_scale_bias */ #ifdef __GLEE_GL_SGIX_texture_scale_bias #endif /* GL_SGIX_framezoom */ #ifdef __GLEE_GL_SGIX_framezoom #ifndef GLEE_C_DEFINED_glFrameZoomSGIX #define GLEE_C_DEFINED_glFrameZoomSGIX void __stdcall GLee_Lazy_glFrameZoomSGIX(GLint factor) {if (GLeeInit()) glFrameZoomSGIX(factor);} GLEEPFNGLFRAMEZOOMSGIXPROC GLeeFuncPtr_glFrameZoomSGIX=GLee_Lazy_glFrameZoomSGIX; #endif #endif /* GL_SGIX_tag_sample_buffer */ #ifdef __GLEE_GL_SGIX_tag_sample_buffer #ifndef GLEE_C_DEFINED_glTagSampleBufferSGIX #define GLEE_C_DEFINED_glTagSampleBufferSGIX void __stdcall GLee_Lazy_glTagSampleBufferSGIX(void) {if (GLeeInit()) glTagSampleBufferSGIX();} GLEEPFNGLTAGSAMPLEBUFFERSGIXPROC GLeeFuncPtr_glTagSampleBufferSGIX=GLee_Lazy_glTagSampleBufferSGIX; #endif #endif /* GL_FfdMaskSGIX */ #ifdef __GLEE_GL_FfdMaskSGIX #endif /* GL_SGIX_polynomial_ffd */ #ifdef __GLEE_GL_SGIX_polynomial_ffd #ifndef GLEE_C_DEFINED_glDeformationMap3dSGIX #define GLEE_C_DEFINED_glDeformationMap3dSGIX void __stdcall GLee_Lazy_glDeformationMap3dSGIX(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble * points) {if (GLeeInit()) glDeformationMap3dSGIX(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, w1, w2, wstride, worder, points);} GLEEPFNGLDEFORMATIONMAP3DSGIXPROC GLeeFuncPtr_glDeformationMap3dSGIX=GLee_Lazy_glDeformationMap3dSGIX; #endif #ifndef GLEE_C_DEFINED_glDeformationMap3fSGIX #define GLEE_C_DEFINED_glDeformationMap3fSGIX void __stdcall GLee_Lazy_glDeformationMap3fSGIX(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat * points) {if (GLeeInit()) glDeformationMap3fSGIX(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, w1, w2, wstride, worder, points);} GLEEPFNGLDEFORMATIONMAP3FSGIXPROC GLeeFuncPtr_glDeformationMap3fSGIX=GLee_Lazy_glDeformationMap3fSGIX; #endif #ifndef GLEE_C_DEFINED_glDeformSGIX #define GLEE_C_DEFINED_glDeformSGIX void __stdcall GLee_Lazy_glDeformSGIX(GLbitfield mask) {if (GLeeInit()) glDeformSGIX(mask);} GLEEPFNGLDEFORMSGIXPROC GLeeFuncPtr_glDeformSGIX=GLee_Lazy_glDeformSGIX; #endif #ifndef GLEE_C_DEFINED_glLoadIdentityDeformationMapSGIX #define GLEE_C_DEFINED_glLoadIdentityDeformationMapSGIX void __stdcall GLee_Lazy_glLoadIdentityDeformationMapSGIX(GLbitfield mask) {if (GLeeInit()) glLoadIdentityDeformationMapSGIX(mask);} GLEEPFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC GLeeFuncPtr_glLoadIdentityDeformationMapSGIX=GLee_Lazy_glLoadIdentityDeformationMapSGIX; #endif #endif /* GL_SGIX_reference_plane */ #ifdef __GLEE_GL_SGIX_reference_plane #ifndef GLEE_C_DEFINED_glReferencePlaneSGIX #define GLEE_C_DEFINED_glReferencePlaneSGIX void __stdcall GLee_Lazy_glReferencePlaneSGIX(const GLdouble * equation) {if (GLeeInit()) glReferencePlaneSGIX(equation);} GLEEPFNGLREFERENCEPLANESGIXPROC GLeeFuncPtr_glReferencePlaneSGIX=GLee_Lazy_glReferencePlaneSGIX; #endif #endif /* GL_SGIX_flush_raster */ #ifdef __GLEE_GL_SGIX_flush_raster #ifndef GLEE_C_DEFINED_glFlushRasterSGIX #define GLEE_C_DEFINED_glFlushRasterSGIX void __stdcall GLee_Lazy_glFlushRasterSGIX(void) {if (GLeeInit()) glFlushRasterSGIX();} GLEEPFNGLFLUSHRASTERSGIXPROC GLeeFuncPtr_glFlushRasterSGIX=GLee_Lazy_glFlushRasterSGIX; #endif #endif /* GL_SGIX_depth_texture */ #ifdef __GLEE_GL_SGIX_depth_texture #endif /* GL_SGIS_fog_function */ #ifdef __GLEE_GL_SGIS_fog_function #ifndef GLEE_C_DEFINED_glFogFuncSGIS #define GLEE_C_DEFINED_glFogFuncSGIS void __stdcall GLee_Lazy_glFogFuncSGIS(GLsizei n, const GLfloat * points) {if (GLeeInit()) glFogFuncSGIS(n, points);} GLEEPFNGLFOGFUNCSGISPROC GLeeFuncPtr_glFogFuncSGIS=GLee_Lazy_glFogFuncSGIS; #endif #ifndef GLEE_C_DEFINED_glGetFogFuncSGIS #define GLEE_C_DEFINED_glGetFogFuncSGIS void __stdcall GLee_Lazy_glGetFogFuncSGIS(GLfloat * points) {if (GLeeInit()) glGetFogFuncSGIS(points);} GLEEPFNGLGETFOGFUNCSGISPROC GLeeFuncPtr_glGetFogFuncSGIS=GLee_Lazy_glGetFogFuncSGIS; #endif #endif /* GL_SGIX_fog_offset */ #ifdef __GLEE_GL_SGIX_fog_offset #endif /* GL_HP_image_transform */ #ifdef __GLEE_GL_HP_image_transform #ifndef GLEE_C_DEFINED_glImageTransformParameteriHP #define GLEE_C_DEFINED_glImageTransformParameteriHP void __stdcall GLee_Lazy_glImageTransformParameteriHP(GLenum target, GLenum pname, GLint param) {if (GLeeInit()) glImageTransformParameteriHP(target, pname, param);} GLEEPFNGLIMAGETRANSFORMPARAMETERIHPPROC GLeeFuncPtr_glImageTransformParameteriHP=GLee_Lazy_glImageTransformParameteriHP; #endif #ifndef GLEE_C_DEFINED_glImageTransformParameterfHP #define GLEE_C_DEFINED_glImageTransformParameterfHP void __stdcall GLee_Lazy_glImageTransformParameterfHP(GLenum target, GLenum pname, GLfloat param) {if (GLeeInit()) glImageTransformParameterfHP(target, pname, param);} GLEEPFNGLIMAGETRANSFORMPARAMETERFHPPROC GLeeFuncPtr_glImageTransformParameterfHP=GLee_Lazy_glImageTransformParameterfHP; #endif #ifndef GLEE_C_DEFINED_glImageTransformParameterivHP #define GLEE_C_DEFINED_glImageTransformParameterivHP void __stdcall GLee_Lazy_glImageTransformParameterivHP(GLenum target, GLenum pname, const GLint * params) {if (GLeeInit()) glImageTransformParameterivHP(target, pname, params);} GLEEPFNGLIMAGETRANSFORMPARAMETERIVHPPROC GLeeFuncPtr_glImageTransformParameterivHP=GLee_Lazy_glImageTransformParameterivHP; #endif #ifndef GLEE_C_DEFINED_glImageTransformParameterfvHP #define GLEE_C_DEFINED_glImageTransformParameterfvHP void __stdcall GLee_Lazy_glImageTransformParameterfvHP(GLenum target, GLenum pname, const GLfloat * params) {if (GLeeInit()) glImageTransformParameterfvHP(target, pname, params);} GLEEPFNGLIMAGETRANSFORMPARAMETERFVHPPROC GLeeFuncPtr_glImageTransformParameterfvHP=GLee_Lazy_glImageTransformParameterfvHP; #endif #ifndef GLEE_C_DEFINED_glGetImageTransformParameterivHP #define GLEE_C_DEFINED_glGetImageTransformParameterivHP void __stdcall GLee_Lazy_glGetImageTransformParameterivHP(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetImageTransformParameterivHP(target, pname, params);} GLEEPFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC GLeeFuncPtr_glGetImageTransformParameterivHP=GLee_Lazy_glGetImageTransformParameterivHP; #endif #ifndef GLEE_C_DEFINED_glGetImageTransformParameterfvHP #define GLEE_C_DEFINED_glGetImageTransformParameterfvHP void __stdcall GLee_Lazy_glGetImageTransformParameterfvHP(GLenum target, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetImageTransformParameterfvHP(target, pname, params);} GLEEPFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC GLeeFuncPtr_glGetImageTransformParameterfvHP=GLee_Lazy_glGetImageTransformParameterfvHP; #endif #endif /* GL_HP_convolution_border_modes */ #ifdef __GLEE_GL_HP_convolution_border_modes #endif /* GL_INGR_palette_buffer */ #ifdef __GLEE_GL_INGR_palette_buffer #endif /* GL_SGIX_texture_add_env */ #ifdef __GLEE_GL_SGIX_texture_add_env #endif /* GL_EXT_color_subtable */ #ifdef __GLEE_GL_EXT_color_subtable #ifndef GLEE_C_DEFINED_glColorSubTableEXT #define GLEE_C_DEFINED_glColorSubTableEXT void __stdcall GLee_Lazy_glColorSubTableEXT(GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid * data) {if (GLeeInit()) glColorSubTableEXT(target, start, count, format, type, data);} GLEEPFNGLCOLORSUBTABLEEXTPROC GLeeFuncPtr_glColorSubTableEXT=GLee_Lazy_glColorSubTableEXT; #endif #ifndef GLEE_C_DEFINED_glCopyColorSubTableEXT #define GLEE_C_DEFINED_glCopyColorSubTableEXT void __stdcall GLee_Lazy_glCopyColorSubTableEXT(GLenum target, GLsizei start, GLint x, GLint y, GLsizei width) {if (GLeeInit()) glCopyColorSubTableEXT(target, start, x, y, width);} GLEEPFNGLCOPYCOLORSUBTABLEEXTPROC GLeeFuncPtr_glCopyColorSubTableEXT=GLee_Lazy_glCopyColorSubTableEXT; #endif #endif /* GL_PGI_vertex_hints */ #ifdef __GLEE_GL_PGI_vertex_hints #endif /* GL_PGI_misc_hints */ #ifdef __GLEE_GL_PGI_misc_hints #ifndef GLEE_C_DEFINED_glHintPGI #define GLEE_C_DEFINED_glHintPGI void __stdcall GLee_Lazy_glHintPGI(GLenum target, GLint mode) {if (GLeeInit()) glHintPGI(target, mode);} GLEEPFNGLHINTPGIPROC GLeeFuncPtr_glHintPGI=GLee_Lazy_glHintPGI; #endif #endif /* GL_EXT_paletted_texture */ #ifdef __GLEE_GL_EXT_paletted_texture #ifndef GLEE_C_DEFINED_glColorTableEXT #define GLEE_C_DEFINED_glColorTableEXT void __stdcall GLee_Lazy_glColorTableEXT(GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid * table) {if (GLeeInit()) glColorTableEXT(target, internalFormat, width, format, type, table);} GLEEPFNGLCOLORTABLEEXTPROC GLeeFuncPtr_glColorTableEXT=GLee_Lazy_glColorTableEXT; #endif #ifndef GLEE_C_DEFINED_glGetColorTableEXT #define GLEE_C_DEFINED_glGetColorTableEXT void __stdcall GLee_Lazy_glGetColorTableEXT(GLenum target, GLenum format, GLenum type, GLvoid * data) {if (GLeeInit()) glGetColorTableEXT(target, format, type, data);} GLEEPFNGLGETCOLORTABLEEXTPROC GLeeFuncPtr_glGetColorTableEXT=GLee_Lazy_glGetColorTableEXT; #endif #ifndef GLEE_C_DEFINED_glGetColorTableParameterivEXT #define GLEE_C_DEFINED_glGetColorTableParameterivEXT void __stdcall GLee_Lazy_glGetColorTableParameterivEXT(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetColorTableParameterivEXT(target, pname, params);} GLEEPFNGLGETCOLORTABLEPARAMETERIVEXTPROC GLeeFuncPtr_glGetColorTableParameterivEXT=GLee_Lazy_glGetColorTableParameterivEXT; #endif #ifndef GLEE_C_DEFINED_glGetColorTableParameterfvEXT #define GLEE_C_DEFINED_glGetColorTableParameterfvEXT void __stdcall GLee_Lazy_glGetColorTableParameterfvEXT(GLenum target, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetColorTableParameterfvEXT(target, pname, params);} GLEEPFNGLGETCOLORTABLEPARAMETERFVEXTPROC GLeeFuncPtr_glGetColorTableParameterfvEXT=GLee_Lazy_glGetColorTableParameterfvEXT; #endif #endif /* GL_EXT_clip_volume_hint */ #ifdef __GLEE_GL_EXT_clip_volume_hint #endif /* GL_SGIX_list_priority */ #ifdef __GLEE_GL_SGIX_list_priority #ifndef GLEE_C_DEFINED_glGetListParameterfvSGIX #define GLEE_C_DEFINED_glGetListParameterfvSGIX void __stdcall GLee_Lazy_glGetListParameterfvSGIX(GLuint list, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetListParameterfvSGIX(list, pname, params);} GLEEPFNGLGETLISTPARAMETERFVSGIXPROC GLeeFuncPtr_glGetListParameterfvSGIX=GLee_Lazy_glGetListParameterfvSGIX; #endif #ifndef GLEE_C_DEFINED_glGetListParameterivSGIX #define GLEE_C_DEFINED_glGetListParameterivSGIX void __stdcall GLee_Lazy_glGetListParameterivSGIX(GLuint list, GLenum pname, GLint * params) {if (GLeeInit()) glGetListParameterivSGIX(list, pname, params);} GLEEPFNGLGETLISTPARAMETERIVSGIXPROC GLeeFuncPtr_glGetListParameterivSGIX=GLee_Lazy_glGetListParameterivSGIX; #endif #ifndef GLEE_C_DEFINED_glListParameterfSGIX #define GLEE_C_DEFINED_glListParameterfSGIX void __stdcall GLee_Lazy_glListParameterfSGIX(GLuint list, GLenum pname, GLfloat param) {if (GLeeInit()) glListParameterfSGIX(list, pname, param);} GLEEPFNGLLISTPARAMETERFSGIXPROC GLeeFuncPtr_glListParameterfSGIX=GLee_Lazy_glListParameterfSGIX; #endif #ifndef GLEE_C_DEFINED_glListParameterfvSGIX #define GLEE_C_DEFINED_glListParameterfvSGIX void __stdcall GLee_Lazy_glListParameterfvSGIX(GLuint list, GLenum pname, const GLfloat * params) {if (GLeeInit()) glListParameterfvSGIX(list, pname, params);} GLEEPFNGLLISTPARAMETERFVSGIXPROC GLeeFuncPtr_glListParameterfvSGIX=GLee_Lazy_glListParameterfvSGIX; #endif #ifndef GLEE_C_DEFINED_glListParameteriSGIX #define GLEE_C_DEFINED_glListParameteriSGIX void __stdcall GLee_Lazy_glListParameteriSGIX(GLuint list, GLenum pname, GLint param) {if (GLeeInit()) glListParameteriSGIX(list, pname, param);} GLEEPFNGLLISTPARAMETERISGIXPROC GLeeFuncPtr_glListParameteriSGIX=GLee_Lazy_glListParameteriSGIX; #endif #ifndef GLEE_C_DEFINED_glListParameterivSGIX #define GLEE_C_DEFINED_glListParameterivSGIX void __stdcall GLee_Lazy_glListParameterivSGIX(GLuint list, GLenum pname, const GLint * params) {if (GLeeInit()) glListParameterivSGIX(list, pname, params);} GLEEPFNGLLISTPARAMETERIVSGIXPROC GLeeFuncPtr_glListParameterivSGIX=GLee_Lazy_glListParameterivSGIX; #endif #endif /* GL_SGIX_ir_instrument1 */ #ifdef __GLEE_GL_SGIX_ir_instrument1 #endif /* GL_SGIX_calligraphic_fragment */ #ifdef __GLEE_GL_SGIX_calligraphic_fragment #endif /* GL_SGIX_texture_lod_bias */ #ifdef __GLEE_GL_SGIX_texture_lod_bias #endif /* GL_SGIX_shadow_ambient */ #ifdef __GLEE_GL_SGIX_shadow_ambient #endif /* GL_EXT_index_texture */ #ifdef __GLEE_GL_EXT_index_texture #endif /* GL_EXT_index_material */ #ifdef __GLEE_GL_EXT_index_material #ifndef GLEE_C_DEFINED_glIndexMaterialEXT #define GLEE_C_DEFINED_glIndexMaterialEXT void __stdcall GLee_Lazy_glIndexMaterialEXT(GLenum face, GLenum mode) {if (GLeeInit()) glIndexMaterialEXT(face, mode);} GLEEPFNGLINDEXMATERIALEXTPROC GLeeFuncPtr_glIndexMaterialEXT=GLee_Lazy_glIndexMaterialEXT; #endif #endif /* GL_EXT_index_func */ #ifdef __GLEE_GL_EXT_index_func #ifndef GLEE_C_DEFINED_glIndexFuncEXT #define GLEE_C_DEFINED_glIndexFuncEXT void __stdcall GLee_Lazy_glIndexFuncEXT(GLenum func, GLclampf ref) {if (GLeeInit()) glIndexFuncEXT(func, ref);} GLEEPFNGLINDEXFUNCEXTPROC GLeeFuncPtr_glIndexFuncEXT=GLee_Lazy_glIndexFuncEXT; #endif #endif /* GL_EXT_index_array_formats */ #ifdef __GLEE_GL_EXT_index_array_formats #endif /* GL_EXT_compiled_vertex_array */ #ifdef __GLEE_GL_EXT_compiled_vertex_array #ifndef GLEE_C_DEFINED_glLockArraysEXT #define GLEE_C_DEFINED_glLockArraysEXT void __stdcall GLee_Lazy_glLockArraysEXT(GLint first, GLsizei count) {if (GLeeInit()) glLockArraysEXT(first, count);} GLEEPFNGLLOCKARRAYSEXTPROC GLeeFuncPtr_glLockArraysEXT=GLee_Lazy_glLockArraysEXT; #endif #ifndef GLEE_C_DEFINED_glUnlockArraysEXT #define GLEE_C_DEFINED_glUnlockArraysEXT void __stdcall GLee_Lazy_glUnlockArraysEXT(void) {if (GLeeInit()) glUnlockArraysEXT();} GLEEPFNGLUNLOCKARRAYSEXTPROC GLeeFuncPtr_glUnlockArraysEXT=GLee_Lazy_glUnlockArraysEXT; #endif #endif /* GL_EXT_cull_vertex */ #ifdef __GLEE_GL_EXT_cull_vertex #ifndef GLEE_C_DEFINED_glCullParameterdvEXT #define GLEE_C_DEFINED_glCullParameterdvEXT void __stdcall GLee_Lazy_glCullParameterdvEXT(GLenum pname, GLdouble * params) {if (GLeeInit()) glCullParameterdvEXT(pname, params);} GLEEPFNGLCULLPARAMETERDVEXTPROC GLeeFuncPtr_glCullParameterdvEXT=GLee_Lazy_glCullParameterdvEXT; #endif #ifndef GLEE_C_DEFINED_glCullParameterfvEXT #define GLEE_C_DEFINED_glCullParameterfvEXT void __stdcall GLee_Lazy_glCullParameterfvEXT(GLenum pname, GLfloat * params) {if (GLeeInit()) glCullParameterfvEXT(pname, params);} GLEEPFNGLCULLPARAMETERFVEXTPROC GLeeFuncPtr_glCullParameterfvEXT=GLee_Lazy_glCullParameterfvEXT; #endif #endif /* GL_SGIX_ycrcb */ #ifdef __GLEE_GL_SGIX_ycrcb #endif /* GL_SGIX_fragment_lighting */ #ifdef __GLEE_GL_SGIX_fragment_lighting #ifndef GLEE_C_DEFINED_glFragmentColorMaterialSGIX #define GLEE_C_DEFINED_glFragmentColorMaterialSGIX void __stdcall GLee_Lazy_glFragmentColorMaterialSGIX(GLenum face, GLenum mode) {if (GLeeInit()) glFragmentColorMaterialSGIX(face, mode);} GLEEPFNGLFRAGMENTCOLORMATERIALSGIXPROC GLeeFuncPtr_glFragmentColorMaterialSGIX=GLee_Lazy_glFragmentColorMaterialSGIX; #endif #ifndef GLEE_C_DEFINED_glFragmentLightfSGIX #define GLEE_C_DEFINED_glFragmentLightfSGIX void __stdcall GLee_Lazy_glFragmentLightfSGIX(GLenum light, GLenum pname, GLfloat param) {if (GLeeInit()) glFragmentLightfSGIX(light, pname, param);} GLEEPFNGLFRAGMENTLIGHTFSGIXPROC GLeeFuncPtr_glFragmentLightfSGIX=GLee_Lazy_glFragmentLightfSGIX; #endif #ifndef GLEE_C_DEFINED_glFragmentLightfvSGIX #define GLEE_C_DEFINED_glFragmentLightfvSGIX void __stdcall GLee_Lazy_glFragmentLightfvSGIX(GLenum light, GLenum pname, const GLfloat * params) {if (GLeeInit()) glFragmentLightfvSGIX(light, pname, params);} GLEEPFNGLFRAGMENTLIGHTFVSGIXPROC GLeeFuncPtr_glFragmentLightfvSGIX=GLee_Lazy_glFragmentLightfvSGIX; #endif #ifndef GLEE_C_DEFINED_glFragmentLightiSGIX #define GLEE_C_DEFINED_glFragmentLightiSGIX void __stdcall GLee_Lazy_glFragmentLightiSGIX(GLenum light, GLenum pname, GLint param) {if (GLeeInit()) glFragmentLightiSGIX(light, pname, param);} GLEEPFNGLFRAGMENTLIGHTISGIXPROC GLeeFuncPtr_glFragmentLightiSGIX=GLee_Lazy_glFragmentLightiSGIX; #endif #ifndef GLEE_C_DEFINED_glFragmentLightivSGIX #define GLEE_C_DEFINED_glFragmentLightivSGIX void __stdcall GLee_Lazy_glFragmentLightivSGIX(GLenum light, GLenum pname, const GLint * params) {if (GLeeInit()) glFragmentLightivSGIX(light, pname, params);} GLEEPFNGLFRAGMENTLIGHTIVSGIXPROC GLeeFuncPtr_glFragmentLightivSGIX=GLee_Lazy_glFragmentLightivSGIX; #endif #ifndef GLEE_C_DEFINED_glFragmentLightModelfSGIX #define GLEE_C_DEFINED_glFragmentLightModelfSGIX void __stdcall GLee_Lazy_glFragmentLightModelfSGIX(GLenum pname, GLfloat param) {if (GLeeInit()) glFragmentLightModelfSGIX(pname, param);} GLEEPFNGLFRAGMENTLIGHTMODELFSGIXPROC GLeeFuncPtr_glFragmentLightModelfSGIX=GLee_Lazy_glFragmentLightModelfSGIX; #endif #ifndef GLEE_C_DEFINED_glFragmentLightModelfvSGIX #define GLEE_C_DEFINED_glFragmentLightModelfvSGIX void __stdcall GLee_Lazy_glFragmentLightModelfvSGIX(GLenum pname, const GLfloat * params) {if (GLeeInit()) glFragmentLightModelfvSGIX(pname, params);} GLEEPFNGLFRAGMENTLIGHTMODELFVSGIXPROC GLeeFuncPtr_glFragmentLightModelfvSGIX=GLee_Lazy_glFragmentLightModelfvSGIX; #endif #ifndef GLEE_C_DEFINED_glFragmentLightModeliSGIX #define GLEE_C_DEFINED_glFragmentLightModeliSGIX void __stdcall GLee_Lazy_glFragmentLightModeliSGIX(GLenum pname, GLint param) {if (GLeeInit()) glFragmentLightModeliSGIX(pname, param);} GLEEPFNGLFRAGMENTLIGHTMODELISGIXPROC GLeeFuncPtr_glFragmentLightModeliSGIX=GLee_Lazy_glFragmentLightModeliSGIX; #endif #ifndef GLEE_C_DEFINED_glFragmentLightModelivSGIX #define GLEE_C_DEFINED_glFragmentLightModelivSGIX void __stdcall GLee_Lazy_glFragmentLightModelivSGIX(GLenum pname, const GLint * params) {if (GLeeInit()) glFragmentLightModelivSGIX(pname, params);} GLEEPFNGLFRAGMENTLIGHTMODELIVSGIXPROC GLeeFuncPtr_glFragmentLightModelivSGIX=GLee_Lazy_glFragmentLightModelivSGIX; #endif #ifndef GLEE_C_DEFINED_glFragmentMaterialfSGIX #define GLEE_C_DEFINED_glFragmentMaterialfSGIX void __stdcall GLee_Lazy_glFragmentMaterialfSGIX(GLenum face, GLenum pname, GLfloat param) {if (GLeeInit()) glFragmentMaterialfSGIX(face, pname, param);} GLEEPFNGLFRAGMENTMATERIALFSGIXPROC GLeeFuncPtr_glFragmentMaterialfSGIX=GLee_Lazy_glFragmentMaterialfSGIX; #endif #ifndef GLEE_C_DEFINED_glFragmentMaterialfvSGIX #define GLEE_C_DEFINED_glFragmentMaterialfvSGIX void __stdcall GLee_Lazy_glFragmentMaterialfvSGIX(GLenum face, GLenum pname, const GLfloat * params) {if (GLeeInit()) glFragmentMaterialfvSGIX(face, pname, params);} GLEEPFNGLFRAGMENTMATERIALFVSGIXPROC GLeeFuncPtr_glFragmentMaterialfvSGIX=GLee_Lazy_glFragmentMaterialfvSGIX; #endif #ifndef GLEE_C_DEFINED_glFragmentMaterialiSGIX #define GLEE_C_DEFINED_glFragmentMaterialiSGIX void __stdcall GLee_Lazy_glFragmentMaterialiSGIX(GLenum face, GLenum pname, GLint param) {if (GLeeInit()) glFragmentMaterialiSGIX(face, pname, param);} GLEEPFNGLFRAGMENTMATERIALISGIXPROC GLeeFuncPtr_glFragmentMaterialiSGIX=GLee_Lazy_glFragmentMaterialiSGIX; #endif #ifndef GLEE_C_DEFINED_glFragmentMaterialivSGIX #define GLEE_C_DEFINED_glFragmentMaterialivSGIX void __stdcall GLee_Lazy_glFragmentMaterialivSGIX(GLenum face, GLenum pname, const GLint * params) {if (GLeeInit()) glFragmentMaterialivSGIX(face, pname, params);} GLEEPFNGLFRAGMENTMATERIALIVSGIXPROC GLeeFuncPtr_glFragmentMaterialivSGIX=GLee_Lazy_glFragmentMaterialivSGIX; #endif #ifndef GLEE_C_DEFINED_glGetFragmentLightfvSGIX #define GLEE_C_DEFINED_glGetFragmentLightfvSGIX void __stdcall GLee_Lazy_glGetFragmentLightfvSGIX(GLenum light, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetFragmentLightfvSGIX(light, pname, params);} GLEEPFNGLGETFRAGMENTLIGHTFVSGIXPROC GLeeFuncPtr_glGetFragmentLightfvSGIX=GLee_Lazy_glGetFragmentLightfvSGIX; #endif #ifndef GLEE_C_DEFINED_glGetFragmentLightivSGIX #define GLEE_C_DEFINED_glGetFragmentLightivSGIX void __stdcall GLee_Lazy_glGetFragmentLightivSGIX(GLenum light, GLenum pname, GLint * params) {if (GLeeInit()) glGetFragmentLightivSGIX(light, pname, params);} GLEEPFNGLGETFRAGMENTLIGHTIVSGIXPROC GLeeFuncPtr_glGetFragmentLightivSGIX=GLee_Lazy_glGetFragmentLightivSGIX; #endif #ifndef GLEE_C_DEFINED_glGetFragmentMaterialfvSGIX #define GLEE_C_DEFINED_glGetFragmentMaterialfvSGIX void __stdcall GLee_Lazy_glGetFragmentMaterialfvSGIX(GLenum face, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetFragmentMaterialfvSGIX(face, pname, params);} GLEEPFNGLGETFRAGMENTMATERIALFVSGIXPROC GLeeFuncPtr_glGetFragmentMaterialfvSGIX=GLee_Lazy_glGetFragmentMaterialfvSGIX; #endif #ifndef GLEE_C_DEFINED_glGetFragmentMaterialivSGIX #define GLEE_C_DEFINED_glGetFragmentMaterialivSGIX void __stdcall GLee_Lazy_glGetFragmentMaterialivSGIX(GLenum face, GLenum pname, GLint * params) {if (GLeeInit()) glGetFragmentMaterialivSGIX(face, pname, params);} GLEEPFNGLGETFRAGMENTMATERIALIVSGIXPROC GLeeFuncPtr_glGetFragmentMaterialivSGIX=GLee_Lazy_glGetFragmentMaterialivSGIX; #endif #ifndef GLEE_C_DEFINED_glLightEnviSGIX #define GLEE_C_DEFINED_glLightEnviSGIX void __stdcall GLee_Lazy_glLightEnviSGIX(GLenum pname, GLint param) {if (GLeeInit()) glLightEnviSGIX(pname, param);} GLEEPFNGLLIGHTENVISGIXPROC GLeeFuncPtr_glLightEnviSGIX=GLee_Lazy_glLightEnviSGIX; #endif #endif /* GL_IBM_rasterpos_clip */ #ifdef __GLEE_GL_IBM_rasterpos_clip #endif /* GL_HP_texture_lighting */ #ifdef __GLEE_GL_HP_texture_lighting #endif /* GL_EXT_draw_range_elements */ #ifdef __GLEE_GL_EXT_draw_range_elements #ifndef GLEE_C_DEFINED_glDrawRangeElementsEXT #define GLEE_C_DEFINED_glDrawRangeElementsEXT void __stdcall GLee_Lazy_glDrawRangeElementsEXT(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices) {if (GLeeInit()) glDrawRangeElementsEXT(mode, start, end, count, type, indices);} GLEEPFNGLDRAWRANGEELEMENTSEXTPROC GLeeFuncPtr_glDrawRangeElementsEXT=GLee_Lazy_glDrawRangeElementsEXT; #endif #endif /* GL_WIN_phong_shading */ #ifdef __GLEE_GL_WIN_phong_shading #endif /* GL_WIN_specular_fog */ #ifdef __GLEE_GL_WIN_specular_fog #endif /* GL_EXT_light_texture */ #ifdef __GLEE_GL_EXT_light_texture #ifndef GLEE_C_DEFINED_glApplyTextureEXT #define GLEE_C_DEFINED_glApplyTextureEXT void __stdcall GLee_Lazy_glApplyTextureEXT(GLenum mode) {if (GLeeInit()) glApplyTextureEXT(mode);} GLEEPFNGLAPPLYTEXTUREEXTPROC GLeeFuncPtr_glApplyTextureEXT=GLee_Lazy_glApplyTextureEXT; #endif #ifndef GLEE_C_DEFINED_glTextureLightEXT #define GLEE_C_DEFINED_glTextureLightEXT void __stdcall GLee_Lazy_glTextureLightEXT(GLenum pname) {if (GLeeInit()) glTextureLightEXT(pname);} GLEEPFNGLTEXTURELIGHTEXTPROC GLeeFuncPtr_glTextureLightEXT=GLee_Lazy_glTextureLightEXT; #endif #ifndef GLEE_C_DEFINED_glTextureMaterialEXT #define GLEE_C_DEFINED_glTextureMaterialEXT void __stdcall GLee_Lazy_glTextureMaterialEXT(GLenum face, GLenum mode) {if (GLeeInit()) glTextureMaterialEXT(face, mode);} GLEEPFNGLTEXTUREMATERIALEXTPROC GLeeFuncPtr_glTextureMaterialEXT=GLee_Lazy_glTextureMaterialEXT; #endif #endif /* GL_SGIX_blend_alpha_minmax */ #ifdef __GLEE_GL_SGIX_blend_alpha_minmax #endif /* GL_SGIX_impact_pixel_texture */ #ifdef __GLEE_GL_SGIX_impact_pixel_texture #endif /* GL_EXT_bgra */ #ifdef __GLEE_GL_EXT_bgra #endif /* GL_SGIX_async */ #ifdef __GLEE_GL_SGIX_async #ifndef GLEE_C_DEFINED_glAsyncMarkerSGIX #define GLEE_C_DEFINED_glAsyncMarkerSGIX void __stdcall GLee_Lazy_glAsyncMarkerSGIX(GLuint marker) {if (GLeeInit()) glAsyncMarkerSGIX(marker);} GLEEPFNGLASYNCMARKERSGIXPROC GLeeFuncPtr_glAsyncMarkerSGIX=GLee_Lazy_glAsyncMarkerSGIX; #endif #ifndef GLEE_C_DEFINED_glFinishAsyncSGIX #define GLEE_C_DEFINED_glFinishAsyncSGIX GLint __stdcall GLee_Lazy_glFinishAsyncSGIX(GLuint * markerp) {if (GLeeInit()) return glFinishAsyncSGIX(markerp); return (GLint)0;} GLEEPFNGLFINISHASYNCSGIXPROC GLeeFuncPtr_glFinishAsyncSGIX=GLee_Lazy_glFinishAsyncSGIX; #endif #ifndef GLEE_C_DEFINED_glPollAsyncSGIX #define GLEE_C_DEFINED_glPollAsyncSGIX GLint __stdcall GLee_Lazy_glPollAsyncSGIX(GLuint * markerp) {if (GLeeInit()) return glPollAsyncSGIX(markerp); return (GLint)0;} GLEEPFNGLPOLLASYNCSGIXPROC GLeeFuncPtr_glPollAsyncSGIX=GLee_Lazy_glPollAsyncSGIX; #endif #ifndef GLEE_C_DEFINED_glGenAsyncMarkersSGIX #define GLEE_C_DEFINED_glGenAsyncMarkersSGIX GLuint __stdcall GLee_Lazy_glGenAsyncMarkersSGIX(GLsizei range) {if (GLeeInit()) return glGenAsyncMarkersSGIX(range); return (GLuint)0;} GLEEPFNGLGENASYNCMARKERSSGIXPROC GLeeFuncPtr_glGenAsyncMarkersSGIX=GLee_Lazy_glGenAsyncMarkersSGIX; #endif #ifndef GLEE_C_DEFINED_glDeleteAsyncMarkersSGIX #define GLEE_C_DEFINED_glDeleteAsyncMarkersSGIX void __stdcall GLee_Lazy_glDeleteAsyncMarkersSGIX(GLuint marker, GLsizei range) {if (GLeeInit()) glDeleteAsyncMarkersSGIX(marker, range);} GLEEPFNGLDELETEASYNCMARKERSSGIXPROC GLeeFuncPtr_glDeleteAsyncMarkersSGIX=GLee_Lazy_glDeleteAsyncMarkersSGIX; #endif #ifndef GLEE_C_DEFINED_glIsAsyncMarkerSGIX #define GLEE_C_DEFINED_glIsAsyncMarkerSGIX GLboolean __stdcall GLee_Lazy_glIsAsyncMarkerSGIX(GLuint marker) {if (GLeeInit()) return glIsAsyncMarkerSGIX(marker); return (GLboolean)0;} GLEEPFNGLISASYNCMARKERSGIXPROC GLeeFuncPtr_glIsAsyncMarkerSGIX=GLee_Lazy_glIsAsyncMarkerSGIX; #endif #endif /* GL_SGIX_async_pixel */ #ifdef __GLEE_GL_SGIX_async_pixel #endif /* GL_SGIX_async_histogram */ #ifdef __GLEE_GL_SGIX_async_histogram #endif /* GL_INTEL_texture_scissor */ #ifdef __GLEE_GL_INTEL_texture_scissor #endif /* GL_INTEL_parallel_arrays */ #ifdef __GLEE_GL_INTEL_parallel_arrays #ifndef GLEE_C_DEFINED_glVertexPointervINTEL #define GLEE_C_DEFINED_glVertexPointervINTEL void __stdcall GLee_Lazy_glVertexPointervINTEL(GLint size, GLenum type, const GLvoid* * pointer) {if (GLeeInit()) glVertexPointervINTEL(size, type, pointer);} GLEEPFNGLVERTEXPOINTERVINTELPROC GLeeFuncPtr_glVertexPointervINTEL=GLee_Lazy_glVertexPointervINTEL; #endif #ifndef GLEE_C_DEFINED_glNormalPointervINTEL #define GLEE_C_DEFINED_glNormalPointervINTEL void __stdcall GLee_Lazy_glNormalPointervINTEL(GLenum type, const GLvoid* * pointer) {if (GLeeInit()) glNormalPointervINTEL(type, pointer);} GLEEPFNGLNORMALPOINTERVINTELPROC GLeeFuncPtr_glNormalPointervINTEL=GLee_Lazy_glNormalPointervINTEL; #endif #ifndef GLEE_C_DEFINED_glColorPointervINTEL #define GLEE_C_DEFINED_glColorPointervINTEL void __stdcall GLee_Lazy_glColorPointervINTEL(GLint size, GLenum type, const GLvoid* * pointer) {if (GLeeInit()) glColorPointervINTEL(size, type, pointer);} GLEEPFNGLCOLORPOINTERVINTELPROC GLeeFuncPtr_glColorPointervINTEL=GLee_Lazy_glColorPointervINTEL; #endif #ifndef GLEE_C_DEFINED_glTexCoordPointervINTEL #define GLEE_C_DEFINED_glTexCoordPointervINTEL void __stdcall GLee_Lazy_glTexCoordPointervINTEL(GLint size, GLenum type, const GLvoid* * pointer) {if (GLeeInit()) glTexCoordPointervINTEL(size, type, pointer);} GLEEPFNGLTEXCOORDPOINTERVINTELPROC GLeeFuncPtr_glTexCoordPointervINTEL=GLee_Lazy_glTexCoordPointervINTEL; #endif #endif /* GL_HP_occlusion_test */ #ifdef __GLEE_GL_HP_occlusion_test #endif /* GL_EXT_pixel_transform */ #ifdef __GLEE_GL_EXT_pixel_transform #ifndef GLEE_C_DEFINED_glPixelTransformParameteriEXT #define GLEE_C_DEFINED_glPixelTransformParameteriEXT void __stdcall GLee_Lazy_glPixelTransformParameteriEXT(GLenum target, GLenum pname, GLint param) {if (GLeeInit()) glPixelTransformParameteriEXT(target, pname, param);} GLEEPFNGLPIXELTRANSFORMPARAMETERIEXTPROC GLeeFuncPtr_glPixelTransformParameteriEXT=GLee_Lazy_glPixelTransformParameteriEXT; #endif #ifndef GLEE_C_DEFINED_glPixelTransformParameterfEXT #define GLEE_C_DEFINED_glPixelTransformParameterfEXT void __stdcall GLee_Lazy_glPixelTransformParameterfEXT(GLenum target, GLenum pname, GLfloat param) {if (GLeeInit()) glPixelTransformParameterfEXT(target, pname, param);} GLEEPFNGLPIXELTRANSFORMPARAMETERFEXTPROC GLeeFuncPtr_glPixelTransformParameterfEXT=GLee_Lazy_glPixelTransformParameterfEXT; #endif #ifndef GLEE_C_DEFINED_glPixelTransformParameterivEXT #define GLEE_C_DEFINED_glPixelTransformParameterivEXT void __stdcall GLee_Lazy_glPixelTransformParameterivEXT(GLenum target, GLenum pname, const GLint * params) {if (GLeeInit()) glPixelTransformParameterivEXT(target, pname, params);} GLEEPFNGLPIXELTRANSFORMPARAMETERIVEXTPROC GLeeFuncPtr_glPixelTransformParameterivEXT=GLee_Lazy_glPixelTransformParameterivEXT; #endif #ifndef GLEE_C_DEFINED_glPixelTransformParameterfvEXT #define GLEE_C_DEFINED_glPixelTransformParameterfvEXT void __stdcall GLee_Lazy_glPixelTransformParameterfvEXT(GLenum target, GLenum pname, const GLfloat * params) {if (GLeeInit()) glPixelTransformParameterfvEXT(target, pname, params);} GLEEPFNGLPIXELTRANSFORMPARAMETERFVEXTPROC GLeeFuncPtr_glPixelTransformParameterfvEXT=GLee_Lazy_glPixelTransformParameterfvEXT; #endif #ifndef GLEE_C_DEFINED_glGetPixelTransformParameterivEXT #define GLEE_C_DEFINED_glGetPixelTransformParameterivEXT void __stdcall GLee_Lazy_glGetPixelTransformParameterivEXT(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetPixelTransformParameterivEXT(target, pname, params);} GLEEPFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC GLeeFuncPtr_glGetPixelTransformParameterivEXT=GLee_Lazy_glGetPixelTransformParameterivEXT; #endif #ifndef GLEE_C_DEFINED_glGetPixelTransformParameterfvEXT #define GLEE_C_DEFINED_glGetPixelTransformParameterfvEXT void __stdcall GLee_Lazy_glGetPixelTransformParameterfvEXT(GLenum target, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetPixelTransformParameterfvEXT(target, pname, params);} GLEEPFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC GLeeFuncPtr_glGetPixelTransformParameterfvEXT=GLee_Lazy_glGetPixelTransformParameterfvEXT; #endif #endif /* GL_EXT_pixel_transform_color_table */ #ifdef __GLEE_GL_EXT_pixel_transform_color_table #endif /* GL_EXT_shared_texture_palette */ #ifdef __GLEE_GL_EXT_shared_texture_palette #endif /* GL_EXT_separate_specular_color */ #ifdef __GLEE_GL_EXT_separate_specular_color #endif /* GL_EXT_secondary_color */ #ifdef __GLEE_GL_EXT_secondary_color #ifndef GLEE_C_DEFINED_glSecondaryColor3bEXT #define GLEE_C_DEFINED_glSecondaryColor3bEXT void __stdcall GLee_Lazy_glSecondaryColor3bEXT(GLbyte red, GLbyte green, GLbyte blue) {if (GLeeInit()) glSecondaryColor3bEXT(red, green, blue);} GLEEPFNGLSECONDARYCOLOR3BEXTPROC GLeeFuncPtr_glSecondaryColor3bEXT=GLee_Lazy_glSecondaryColor3bEXT; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3bvEXT #define GLEE_C_DEFINED_glSecondaryColor3bvEXT void __stdcall GLee_Lazy_glSecondaryColor3bvEXT(const GLbyte * v) {if (GLeeInit()) glSecondaryColor3bvEXT(v);} GLEEPFNGLSECONDARYCOLOR3BVEXTPROC GLeeFuncPtr_glSecondaryColor3bvEXT=GLee_Lazy_glSecondaryColor3bvEXT; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3dEXT #define GLEE_C_DEFINED_glSecondaryColor3dEXT void __stdcall GLee_Lazy_glSecondaryColor3dEXT(GLdouble red, GLdouble green, GLdouble blue) {if (GLeeInit()) glSecondaryColor3dEXT(red, green, blue);} GLEEPFNGLSECONDARYCOLOR3DEXTPROC GLeeFuncPtr_glSecondaryColor3dEXT=GLee_Lazy_glSecondaryColor3dEXT; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3dvEXT #define GLEE_C_DEFINED_glSecondaryColor3dvEXT void __stdcall GLee_Lazy_glSecondaryColor3dvEXT(const GLdouble * v) {if (GLeeInit()) glSecondaryColor3dvEXT(v);} GLEEPFNGLSECONDARYCOLOR3DVEXTPROC GLeeFuncPtr_glSecondaryColor3dvEXT=GLee_Lazy_glSecondaryColor3dvEXT; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3fEXT #define GLEE_C_DEFINED_glSecondaryColor3fEXT void __stdcall GLee_Lazy_glSecondaryColor3fEXT(GLfloat red, GLfloat green, GLfloat blue) {if (GLeeInit()) glSecondaryColor3fEXT(red, green, blue);} GLEEPFNGLSECONDARYCOLOR3FEXTPROC GLeeFuncPtr_glSecondaryColor3fEXT=GLee_Lazy_glSecondaryColor3fEXT; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3fvEXT #define GLEE_C_DEFINED_glSecondaryColor3fvEXT void __stdcall GLee_Lazy_glSecondaryColor3fvEXT(const GLfloat * v) {if (GLeeInit()) glSecondaryColor3fvEXT(v);} GLEEPFNGLSECONDARYCOLOR3FVEXTPROC GLeeFuncPtr_glSecondaryColor3fvEXT=GLee_Lazy_glSecondaryColor3fvEXT; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3iEXT #define GLEE_C_DEFINED_glSecondaryColor3iEXT void __stdcall GLee_Lazy_glSecondaryColor3iEXT(GLint red, GLint green, GLint blue) {if (GLeeInit()) glSecondaryColor3iEXT(red, green, blue);} GLEEPFNGLSECONDARYCOLOR3IEXTPROC GLeeFuncPtr_glSecondaryColor3iEXT=GLee_Lazy_glSecondaryColor3iEXT; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3ivEXT #define GLEE_C_DEFINED_glSecondaryColor3ivEXT void __stdcall GLee_Lazy_glSecondaryColor3ivEXT(const GLint * v) {if (GLeeInit()) glSecondaryColor3ivEXT(v);} GLEEPFNGLSECONDARYCOLOR3IVEXTPROC GLeeFuncPtr_glSecondaryColor3ivEXT=GLee_Lazy_glSecondaryColor3ivEXT; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3sEXT #define GLEE_C_DEFINED_glSecondaryColor3sEXT void __stdcall GLee_Lazy_glSecondaryColor3sEXT(GLshort red, GLshort green, GLshort blue) {if (GLeeInit()) glSecondaryColor3sEXT(red, green, blue);} GLEEPFNGLSECONDARYCOLOR3SEXTPROC GLeeFuncPtr_glSecondaryColor3sEXT=GLee_Lazy_glSecondaryColor3sEXT; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3svEXT #define GLEE_C_DEFINED_glSecondaryColor3svEXT void __stdcall GLee_Lazy_glSecondaryColor3svEXT(const GLshort * v) {if (GLeeInit()) glSecondaryColor3svEXT(v);} GLEEPFNGLSECONDARYCOLOR3SVEXTPROC GLeeFuncPtr_glSecondaryColor3svEXT=GLee_Lazy_glSecondaryColor3svEXT; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3ubEXT #define GLEE_C_DEFINED_glSecondaryColor3ubEXT void __stdcall GLee_Lazy_glSecondaryColor3ubEXT(GLubyte red, GLubyte green, GLubyte blue) {if (GLeeInit()) glSecondaryColor3ubEXT(red, green, blue);} GLEEPFNGLSECONDARYCOLOR3UBEXTPROC GLeeFuncPtr_glSecondaryColor3ubEXT=GLee_Lazy_glSecondaryColor3ubEXT; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3ubvEXT #define GLEE_C_DEFINED_glSecondaryColor3ubvEXT void __stdcall GLee_Lazy_glSecondaryColor3ubvEXT(const GLubyte * v) {if (GLeeInit()) glSecondaryColor3ubvEXT(v);} GLEEPFNGLSECONDARYCOLOR3UBVEXTPROC GLeeFuncPtr_glSecondaryColor3ubvEXT=GLee_Lazy_glSecondaryColor3ubvEXT; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3uiEXT #define GLEE_C_DEFINED_glSecondaryColor3uiEXT void __stdcall GLee_Lazy_glSecondaryColor3uiEXT(GLuint red, GLuint green, GLuint blue) {if (GLeeInit()) glSecondaryColor3uiEXT(red, green, blue);} GLEEPFNGLSECONDARYCOLOR3UIEXTPROC GLeeFuncPtr_glSecondaryColor3uiEXT=GLee_Lazy_glSecondaryColor3uiEXT; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3uivEXT #define GLEE_C_DEFINED_glSecondaryColor3uivEXT void __stdcall GLee_Lazy_glSecondaryColor3uivEXT(const GLuint * v) {if (GLeeInit()) glSecondaryColor3uivEXT(v);} GLEEPFNGLSECONDARYCOLOR3UIVEXTPROC GLeeFuncPtr_glSecondaryColor3uivEXT=GLee_Lazy_glSecondaryColor3uivEXT; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3usEXT #define GLEE_C_DEFINED_glSecondaryColor3usEXT void __stdcall GLee_Lazy_glSecondaryColor3usEXT(GLushort red, GLushort green, GLushort blue) {if (GLeeInit()) glSecondaryColor3usEXT(red, green, blue);} GLEEPFNGLSECONDARYCOLOR3USEXTPROC GLeeFuncPtr_glSecondaryColor3usEXT=GLee_Lazy_glSecondaryColor3usEXT; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3usvEXT #define GLEE_C_DEFINED_glSecondaryColor3usvEXT void __stdcall GLee_Lazy_glSecondaryColor3usvEXT(const GLushort * v) {if (GLeeInit()) glSecondaryColor3usvEXT(v);} GLEEPFNGLSECONDARYCOLOR3USVEXTPROC GLeeFuncPtr_glSecondaryColor3usvEXT=GLee_Lazy_glSecondaryColor3usvEXT; #endif #ifndef GLEE_C_DEFINED_glSecondaryColorPointerEXT #define GLEE_C_DEFINED_glSecondaryColorPointerEXT void __stdcall GLee_Lazy_glSecondaryColorPointerEXT(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer) {if (GLeeInit()) glSecondaryColorPointerEXT(size, type, stride, pointer);} GLEEPFNGLSECONDARYCOLORPOINTEREXTPROC GLeeFuncPtr_glSecondaryColorPointerEXT=GLee_Lazy_glSecondaryColorPointerEXT; #endif #endif /* GL_EXT_texture_perturb_normal */ #ifdef __GLEE_GL_EXT_texture_perturb_normal #ifndef GLEE_C_DEFINED_glTextureNormalEXT #define GLEE_C_DEFINED_glTextureNormalEXT void __stdcall GLee_Lazy_glTextureNormalEXT(GLenum mode) {if (GLeeInit()) glTextureNormalEXT(mode);} GLEEPFNGLTEXTURENORMALEXTPROC GLeeFuncPtr_glTextureNormalEXT=GLee_Lazy_glTextureNormalEXT; #endif #endif /* GL_EXT_multi_draw_arrays */ #ifdef __GLEE_GL_EXT_multi_draw_arrays #ifndef GLEE_C_DEFINED_glMultiDrawArraysEXT #define GLEE_C_DEFINED_glMultiDrawArraysEXT void __stdcall GLee_Lazy_glMultiDrawArraysEXT(GLenum mode, const GLint * first, const GLsizei * count, GLsizei primcount) {if (GLeeInit()) glMultiDrawArraysEXT(mode, first, count, primcount);} GLEEPFNGLMULTIDRAWARRAYSEXTPROC GLeeFuncPtr_glMultiDrawArraysEXT=GLee_Lazy_glMultiDrawArraysEXT; #endif #ifndef GLEE_C_DEFINED_glMultiDrawElementsEXT #define GLEE_C_DEFINED_glMultiDrawElementsEXT void __stdcall GLee_Lazy_glMultiDrawElementsEXT(GLenum mode, const GLsizei * count, GLenum type, const GLvoid* * indices, GLsizei primcount) {if (GLeeInit()) glMultiDrawElementsEXT(mode, count, type, indices, primcount);} GLEEPFNGLMULTIDRAWELEMENTSEXTPROC GLeeFuncPtr_glMultiDrawElementsEXT=GLee_Lazy_glMultiDrawElementsEXT; #endif #endif /* GL_EXT_fog_coord */ #ifdef __GLEE_GL_EXT_fog_coord #ifndef GLEE_C_DEFINED_glFogCoordfEXT #define GLEE_C_DEFINED_glFogCoordfEXT void __stdcall GLee_Lazy_glFogCoordfEXT(GLfloat coord) {if (GLeeInit()) glFogCoordfEXT(coord);} GLEEPFNGLFOGCOORDFEXTPROC GLeeFuncPtr_glFogCoordfEXT=GLee_Lazy_glFogCoordfEXT; #endif #ifndef GLEE_C_DEFINED_glFogCoordfvEXT #define GLEE_C_DEFINED_glFogCoordfvEXT void __stdcall GLee_Lazy_glFogCoordfvEXT(const GLfloat * coord) {if (GLeeInit()) glFogCoordfvEXT(coord);} GLEEPFNGLFOGCOORDFVEXTPROC GLeeFuncPtr_glFogCoordfvEXT=GLee_Lazy_glFogCoordfvEXT; #endif #ifndef GLEE_C_DEFINED_glFogCoorddEXT #define GLEE_C_DEFINED_glFogCoorddEXT void __stdcall GLee_Lazy_glFogCoorddEXT(GLdouble coord) {if (GLeeInit()) glFogCoorddEXT(coord);} GLEEPFNGLFOGCOORDDEXTPROC GLeeFuncPtr_glFogCoorddEXT=GLee_Lazy_glFogCoorddEXT; #endif #ifndef GLEE_C_DEFINED_glFogCoorddvEXT #define GLEE_C_DEFINED_glFogCoorddvEXT void __stdcall GLee_Lazy_glFogCoorddvEXT(const GLdouble * coord) {if (GLeeInit()) glFogCoorddvEXT(coord);} GLEEPFNGLFOGCOORDDVEXTPROC GLeeFuncPtr_glFogCoorddvEXT=GLee_Lazy_glFogCoorddvEXT; #endif #ifndef GLEE_C_DEFINED_glFogCoordPointerEXT #define GLEE_C_DEFINED_glFogCoordPointerEXT void __stdcall GLee_Lazy_glFogCoordPointerEXT(GLenum type, GLsizei stride, const GLvoid * pointer) {if (GLeeInit()) glFogCoordPointerEXT(type, stride, pointer);} GLEEPFNGLFOGCOORDPOINTEREXTPROC GLeeFuncPtr_glFogCoordPointerEXT=GLee_Lazy_glFogCoordPointerEXT; #endif #endif /* GL_REND_screen_coordinates */ #ifdef __GLEE_GL_REND_screen_coordinates #endif /* GL_EXT_coordinate_frame */ #ifdef __GLEE_GL_EXT_coordinate_frame #ifndef GLEE_C_DEFINED_glTangent3bEXT #define GLEE_C_DEFINED_glTangent3bEXT void __stdcall GLee_Lazy_glTangent3bEXT(GLbyte tx, GLbyte ty, GLbyte tz) {if (GLeeInit()) glTangent3bEXT(tx, ty, tz);} GLEEPFNGLTANGENT3BEXTPROC GLeeFuncPtr_glTangent3bEXT=GLee_Lazy_glTangent3bEXT; #endif #ifndef GLEE_C_DEFINED_glTangent3bvEXT #define GLEE_C_DEFINED_glTangent3bvEXT void __stdcall GLee_Lazy_glTangent3bvEXT(const GLbyte * v) {if (GLeeInit()) glTangent3bvEXT(v);} GLEEPFNGLTANGENT3BVEXTPROC GLeeFuncPtr_glTangent3bvEXT=GLee_Lazy_glTangent3bvEXT; #endif #ifndef GLEE_C_DEFINED_glTangent3dEXT #define GLEE_C_DEFINED_glTangent3dEXT void __stdcall GLee_Lazy_glTangent3dEXT(GLdouble tx, GLdouble ty, GLdouble tz) {if (GLeeInit()) glTangent3dEXT(tx, ty, tz);} GLEEPFNGLTANGENT3DEXTPROC GLeeFuncPtr_glTangent3dEXT=GLee_Lazy_glTangent3dEXT; #endif #ifndef GLEE_C_DEFINED_glTangent3dvEXT #define GLEE_C_DEFINED_glTangent3dvEXT void __stdcall GLee_Lazy_glTangent3dvEXT(const GLdouble * v) {if (GLeeInit()) glTangent3dvEXT(v);} GLEEPFNGLTANGENT3DVEXTPROC GLeeFuncPtr_glTangent3dvEXT=GLee_Lazy_glTangent3dvEXT; #endif #ifndef GLEE_C_DEFINED_glTangent3fEXT #define GLEE_C_DEFINED_glTangent3fEXT void __stdcall GLee_Lazy_glTangent3fEXT(GLfloat tx, GLfloat ty, GLfloat tz) {if (GLeeInit()) glTangent3fEXT(tx, ty, tz);} GLEEPFNGLTANGENT3FEXTPROC GLeeFuncPtr_glTangent3fEXT=GLee_Lazy_glTangent3fEXT; #endif #ifndef GLEE_C_DEFINED_glTangent3fvEXT #define GLEE_C_DEFINED_glTangent3fvEXT void __stdcall GLee_Lazy_glTangent3fvEXT(const GLfloat * v) {if (GLeeInit()) glTangent3fvEXT(v);} GLEEPFNGLTANGENT3FVEXTPROC GLeeFuncPtr_glTangent3fvEXT=GLee_Lazy_glTangent3fvEXT; #endif #ifndef GLEE_C_DEFINED_glTangent3iEXT #define GLEE_C_DEFINED_glTangent3iEXT void __stdcall GLee_Lazy_glTangent3iEXT(GLint tx, GLint ty, GLint tz) {if (GLeeInit()) glTangent3iEXT(tx, ty, tz);} GLEEPFNGLTANGENT3IEXTPROC GLeeFuncPtr_glTangent3iEXT=GLee_Lazy_glTangent3iEXT; #endif #ifndef GLEE_C_DEFINED_glTangent3ivEXT #define GLEE_C_DEFINED_glTangent3ivEXT void __stdcall GLee_Lazy_glTangent3ivEXT(const GLint * v) {if (GLeeInit()) glTangent3ivEXT(v);} GLEEPFNGLTANGENT3IVEXTPROC GLeeFuncPtr_glTangent3ivEXT=GLee_Lazy_glTangent3ivEXT; #endif #ifndef GLEE_C_DEFINED_glTangent3sEXT #define GLEE_C_DEFINED_glTangent3sEXT void __stdcall GLee_Lazy_glTangent3sEXT(GLshort tx, GLshort ty, GLshort tz) {if (GLeeInit()) glTangent3sEXT(tx, ty, tz);} GLEEPFNGLTANGENT3SEXTPROC GLeeFuncPtr_glTangent3sEXT=GLee_Lazy_glTangent3sEXT; #endif #ifndef GLEE_C_DEFINED_glTangent3svEXT #define GLEE_C_DEFINED_glTangent3svEXT void __stdcall GLee_Lazy_glTangent3svEXT(const GLshort * v) {if (GLeeInit()) glTangent3svEXT(v);} GLEEPFNGLTANGENT3SVEXTPROC GLeeFuncPtr_glTangent3svEXT=GLee_Lazy_glTangent3svEXT; #endif #ifndef GLEE_C_DEFINED_glBinormal3bEXT #define GLEE_C_DEFINED_glBinormal3bEXT void __stdcall GLee_Lazy_glBinormal3bEXT(GLbyte bx, GLbyte by, GLbyte bz) {if (GLeeInit()) glBinormal3bEXT(bx, by, bz);} GLEEPFNGLBINORMAL3BEXTPROC GLeeFuncPtr_glBinormal3bEXT=GLee_Lazy_glBinormal3bEXT; #endif #ifndef GLEE_C_DEFINED_glBinormal3bvEXT #define GLEE_C_DEFINED_glBinormal3bvEXT void __stdcall GLee_Lazy_glBinormal3bvEXT(const GLbyte * v) {if (GLeeInit()) glBinormal3bvEXT(v);} GLEEPFNGLBINORMAL3BVEXTPROC GLeeFuncPtr_glBinormal3bvEXT=GLee_Lazy_glBinormal3bvEXT; #endif #ifndef GLEE_C_DEFINED_glBinormal3dEXT #define GLEE_C_DEFINED_glBinormal3dEXT void __stdcall GLee_Lazy_glBinormal3dEXT(GLdouble bx, GLdouble by, GLdouble bz) {if (GLeeInit()) glBinormal3dEXT(bx, by, bz);} GLEEPFNGLBINORMAL3DEXTPROC GLeeFuncPtr_glBinormal3dEXT=GLee_Lazy_glBinormal3dEXT; #endif #ifndef GLEE_C_DEFINED_glBinormal3dvEXT #define GLEE_C_DEFINED_glBinormal3dvEXT void __stdcall GLee_Lazy_glBinormal3dvEXT(const GLdouble * v) {if (GLeeInit()) glBinormal3dvEXT(v);} GLEEPFNGLBINORMAL3DVEXTPROC GLeeFuncPtr_glBinormal3dvEXT=GLee_Lazy_glBinormal3dvEXT; #endif #ifndef GLEE_C_DEFINED_glBinormal3fEXT #define GLEE_C_DEFINED_glBinormal3fEXT void __stdcall GLee_Lazy_glBinormal3fEXT(GLfloat bx, GLfloat by, GLfloat bz) {if (GLeeInit()) glBinormal3fEXT(bx, by, bz);} GLEEPFNGLBINORMAL3FEXTPROC GLeeFuncPtr_glBinormal3fEXT=GLee_Lazy_glBinormal3fEXT; #endif #ifndef GLEE_C_DEFINED_glBinormal3fvEXT #define GLEE_C_DEFINED_glBinormal3fvEXT void __stdcall GLee_Lazy_glBinormal3fvEXT(const GLfloat * v) {if (GLeeInit()) glBinormal3fvEXT(v);} GLEEPFNGLBINORMAL3FVEXTPROC GLeeFuncPtr_glBinormal3fvEXT=GLee_Lazy_glBinormal3fvEXT; #endif #ifndef GLEE_C_DEFINED_glBinormal3iEXT #define GLEE_C_DEFINED_glBinormal3iEXT void __stdcall GLee_Lazy_glBinormal3iEXT(GLint bx, GLint by, GLint bz) {if (GLeeInit()) glBinormal3iEXT(bx, by, bz);} GLEEPFNGLBINORMAL3IEXTPROC GLeeFuncPtr_glBinormal3iEXT=GLee_Lazy_glBinormal3iEXT; #endif #ifndef GLEE_C_DEFINED_glBinormal3ivEXT #define GLEE_C_DEFINED_glBinormal3ivEXT void __stdcall GLee_Lazy_glBinormal3ivEXT(const GLint * v) {if (GLeeInit()) glBinormal3ivEXT(v);} GLEEPFNGLBINORMAL3IVEXTPROC GLeeFuncPtr_glBinormal3ivEXT=GLee_Lazy_glBinormal3ivEXT; #endif #ifndef GLEE_C_DEFINED_glBinormal3sEXT #define GLEE_C_DEFINED_glBinormal3sEXT void __stdcall GLee_Lazy_glBinormal3sEXT(GLshort bx, GLshort by, GLshort bz) {if (GLeeInit()) glBinormal3sEXT(bx, by, bz);} GLEEPFNGLBINORMAL3SEXTPROC GLeeFuncPtr_glBinormal3sEXT=GLee_Lazy_glBinormal3sEXT; #endif #ifndef GLEE_C_DEFINED_glBinormal3svEXT #define GLEE_C_DEFINED_glBinormal3svEXT void __stdcall GLee_Lazy_glBinormal3svEXT(const GLshort * v) {if (GLeeInit()) glBinormal3svEXT(v);} GLEEPFNGLBINORMAL3SVEXTPROC GLeeFuncPtr_glBinormal3svEXT=GLee_Lazy_glBinormal3svEXT; #endif #ifndef GLEE_C_DEFINED_glTangentPointerEXT #define GLEE_C_DEFINED_glTangentPointerEXT void __stdcall GLee_Lazy_glTangentPointerEXT(GLenum type, GLsizei stride, const GLvoid * pointer) {if (GLeeInit()) glTangentPointerEXT(type, stride, pointer);} GLEEPFNGLTANGENTPOINTEREXTPROC GLeeFuncPtr_glTangentPointerEXT=GLee_Lazy_glTangentPointerEXT; #endif #ifndef GLEE_C_DEFINED_glBinormalPointerEXT #define GLEE_C_DEFINED_glBinormalPointerEXT void __stdcall GLee_Lazy_glBinormalPointerEXT(GLenum type, GLsizei stride, const GLvoid * pointer) {if (GLeeInit()) glBinormalPointerEXT(type, stride, pointer);} GLEEPFNGLBINORMALPOINTEREXTPROC GLeeFuncPtr_glBinormalPointerEXT=GLee_Lazy_glBinormalPointerEXT; #endif #endif /* GL_EXT_texture_env_combine */ #ifdef __GLEE_GL_EXT_texture_env_combine #endif /* GL_APPLE_specular_vector */ #ifdef __GLEE_GL_APPLE_specular_vector #endif /* GL_APPLE_transform_hint */ #ifdef __GLEE_GL_APPLE_transform_hint #endif /* GL_SGIX_fog_scale */ #ifdef __GLEE_GL_SGIX_fog_scale #endif /* GL_SUNX_constant_data */ #ifdef __GLEE_GL_SUNX_constant_data #ifndef GLEE_C_DEFINED_glFinishTextureSUNX #define GLEE_C_DEFINED_glFinishTextureSUNX void __stdcall GLee_Lazy_glFinishTextureSUNX(void) {if (GLeeInit()) glFinishTextureSUNX();} GLEEPFNGLFINISHTEXTURESUNXPROC GLeeFuncPtr_glFinishTextureSUNX=GLee_Lazy_glFinishTextureSUNX; #endif #endif /* GL_SUN_global_alpha */ #ifdef __GLEE_GL_SUN_global_alpha #ifndef GLEE_C_DEFINED_glGlobalAlphaFactorbSUN #define GLEE_C_DEFINED_glGlobalAlphaFactorbSUN void __stdcall GLee_Lazy_glGlobalAlphaFactorbSUN(GLbyte factor) {if (GLeeInit()) glGlobalAlphaFactorbSUN(factor);} GLEEPFNGLGLOBALALPHAFACTORBSUNPROC GLeeFuncPtr_glGlobalAlphaFactorbSUN=GLee_Lazy_glGlobalAlphaFactorbSUN; #endif #ifndef GLEE_C_DEFINED_glGlobalAlphaFactorsSUN #define GLEE_C_DEFINED_glGlobalAlphaFactorsSUN void __stdcall GLee_Lazy_glGlobalAlphaFactorsSUN(GLshort factor) {if (GLeeInit()) glGlobalAlphaFactorsSUN(factor);} GLEEPFNGLGLOBALALPHAFACTORSSUNPROC GLeeFuncPtr_glGlobalAlphaFactorsSUN=GLee_Lazy_glGlobalAlphaFactorsSUN; #endif #ifndef GLEE_C_DEFINED_glGlobalAlphaFactoriSUN #define GLEE_C_DEFINED_glGlobalAlphaFactoriSUN void __stdcall GLee_Lazy_glGlobalAlphaFactoriSUN(GLint factor) {if (GLeeInit()) glGlobalAlphaFactoriSUN(factor);} GLEEPFNGLGLOBALALPHAFACTORISUNPROC GLeeFuncPtr_glGlobalAlphaFactoriSUN=GLee_Lazy_glGlobalAlphaFactoriSUN; #endif #ifndef GLEE_C_DEFINED_glGlobalAlphaFactorfSUN #define GLEE_C_DEFINED_glGlobalAlphaFactorfSUN void __stdcall GLee_Lazy_glGlobalAlphaFactorfSUN(GLfloat factor) {if (GLeeInit()) glGlobalAlphaFactorfSUN(factor);} GLEEPFNGLGLOBALALPHAFACTORFSUNPROC GLeeFuncPtr_glGlobalAlphaFactorfSUN=GLee_Lazy_glGlobalAlphaFactorfSUN; #endif #ifndef GLEE_C_DEFINED_glGlobalAlphaFactordSUN #define GLEE_C_DEFINED_glGlobalAlphaFactordSUN void __stdcall GLee_Lazy_glGlobalAlphaFactordSUN(GLdouble factor) {if (GLeeInit()) glGlobalAlphaFactordSUN(factor);} GLEEPFNGLGLOBALALPHAFACTORDSUNPROC GLeeFuncPtr_glGlobalAlphaFactordSUN=GLee_Lazy_glGlobalAlphaFactordSUN; #endif #ifndef GLEE_C_DEFINED_glGlobalAlphaFactorubSUN #define GLEE_C_DEFINED_glGlobalAlphaFactorubSUN void __stdcall GLee_Lazy_glGlobalAlphaFactorubSUN(GLubyte factor) {if (GLeeInit()) glGlobalAlphaFactorubSUN(factor);} GLEEPFNGLGLOBALALPHAFACTORUBSUNPROC GLeeFuncPtr_glGlobalAlphaFactorubSUN=GLee_Lazy_glGlobalAlphaFactorubSUN; #endif #ifndef GLEE_C_DEFINED_glGlobalAlphaFactorusSUN #define GLEE_C_DEFINED_glGlobalAlphaFactorusSUN void __stdcall GLee_Lazy_glGlobalAlphaFactorusSUN(GLushort factor) {if (GLeeInit()) glGlobalAlphaFactorusSUN(factor);} GLEEPFNGLGLOBALALPHAFACTORUSSUNPROC GLeeFuncPtr_glGlobalAlphaFactorusSUN=GLee_Lazy_glGlobalAlphaFactorusSUN; #endif #ifndef GLEE_C_DEFINED_glGlobalAlphaFactoruiSUN #define GLEE_C_DEFINED_glGlobalAlphaFactoruiSUN void __stdcall GLee_Lazy_glGlobalAlphaFactoruiSUN(GLuint factor) {if (GLeeInit()) glGlobalAlphaFactoruiSUN(factor);} GLEEPFNGLGLOBALALPHAFACTORUISUNPROC GLeeFuncPtr_glGlobalAlphaFactoruiSUN=GLee_Lazy_glGlobalAlphaFactoruiSUN; #endif #endif /* GL_SUN_triangle_list */ #ifdef __GLEE_GL_SUN_triangle_list #ifndef GLEE_C_DEFINED_glReplacementCodeuiSUN #define GLEE_C_DEFINED_glReplacementCodeuiSUN void __stdcall GLee_Lazy_glReplacementCodeuiSUN(GLuint code) {if (GLeeInit()) glReplacementCodeuiSUN(code);} GLEEPFNGLREPLACEMENTCODEUISUNPROC GLeeFuncPtr_glReplacementCodeuiSUN=GLee_Lazy_glReplacementCodeuiSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeusSUN #define GLEE_C_DEFINED_glReplacementCodeusSUN void __stdcall GLee_Lazy_glReplacementCodeusSUN(GLushort code) {if (GLeeInit()) glReplacementCodeusSUN(code);} GLEEPFNGLREPLACEMENTCODEUSSUNPROC GLeeFuncPtr_glReplacementCodeusSUN=GLee_Lazy_glReplacementCodeusSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeubSUN #define GLEE_C_DEFINED_glReplacementCodeubSUN void __stdcall GLee_Lazy_glReplacementCodeubSUN(GLubyte code) {if (GLeeInit()) glReplacementCodeubSUN(code);} GLEEPFNGLREPLACEMENTCODEUBSUNPROC GLeeFuncPtr_glReplacementCodeubSUN=GLee_Lazy_glReplacementCodeubSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeuivSUN #define GLEE_C_DEFINED_glReplacementCodeuivSUN void __stdcall GLee_Lazy_glReplacementCodeuivSUN(const GLuint * code) {if (GLeeInit()) glReplacementCodeuivSUN(code);} GLEEPFNGLREPLACEMENTCODEUIVSUNPROC GLeeFuncPtr_glReplacementCodeuivSUN=GLee_Lazy_glReplacementCodeuivSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeusvSUN #define GLEE_C_DEFINED_glReplacementCodeusvSUN void __stdcall GLee_Lazy_glReplacementCodeusvSUN(const GLushort * code) {if (GLeeInit()) glReplacementCodeusvSUN(code);} GLEEPFNGLREPLACEMENTCODEUSVSUNPROC GLeeFuncPtr_glReplacementCodeusvSUN=GLee_Lazy_glReplacementCodeusvSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeubvSUN #define GLEE_C_DEFINED_glReplacementCodeubvSUN void __stdcall GLee_Lazy_glReplacementCodeubvSUN(const GLubyte * code) {if (GLeeInit()) glReplacementCodeubvSUN(code);} GLEEPFNGLREPLACEMENTCODEUBVSUNPROC GLeeFuncPtr_glReplacementCodeubvSUN=GLee_Lazy_glReplacementCodeubvSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodePointerSUN #define GLEE_C_DEFINED_glReplacementCodePointerSUN void __stdcall GLee_Lazy_glReplacementCodePointerSUN(GLenum type, GLsizei stride, const GLvoid* * pointer) {if (GLeeInit()) glReplacementCodePointerSUN(type, stride, pointer);} GLEEPFNGLREPLACEMENTCODEPOINTERSUNPROC GLeeFuncPtr_glReplacementCodePointerSUN=GLee_Lazy_glReplacementCodePointerSUN; #endif #endif /* GL_SUN_vertex */ #ifdef __GLEE_GL_SUN_vertex #ifndef GLEE_C_DEFINED_glColor4ubVertex2fSUN #define GLEE_C_DEFINED_glColor4ubVertex2fSUN void __stdcall GLee_Lazy_glColor4ubVertex2fSUN(GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y) {if (GLeeInit()) glColor4ubVertex2fSUN(r, g, b, a, x, y);} GLEEPFNGLCOLOR4UBVERTEX2FSUNPROC GLeeFuncPtr_glColor4ubVertex2fSUN=GLee_Lazy_glColor4ubVertex2fSUN; #endif #ifndef GLEE_C_DEFINED_glColor4ubVertex2fvSUN #define GLEE_C_DEFINED_glColor4ubVertex2fvSUN void __stdcall GLee_Lazy_glColor4ubVertex2fvSUN(const GLubyte * c, const GLfloat * v) {if (GLeeInit()) glColor4ubVertex2fvSUN(c, v);} GLEEPFNGLCOLOR4UBVERTEX2FVSUNPROC GLeeFuncPtr_glColor4ubVertex2fvSUN=GLee_Lazy_glColor4ubVertex2fvSUN; #endif #ifndef GLEE_C_DEFINED_glColor4ubVertex3fSUN #define GLEE_C_DEFINED_glColor4ubVertex3fSUN void __stdcall GLee_Lazy_glColor4ubVertex3fSUN(GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glColor4ubVertex3fSUN(r, g, b, a, x, y, z);} GLEEPFNGLCOLOR4UBVERTEX3FSUNPROC GLeeFuncPtr_glColor4ubVertex3fSUN=GLee_Lazy_glColor4ubVertex3fSUN; #endif #ifndef GLEE_C_DEFINED_glColor4ubVertex3fvSUN #define GLEE_C_DEFINED_glColor4ubVertex3fvSUN void __stdcall GLee_Lazy_glColor4ubVertex3fvSUN(const GLubyte * c, const GLfloat * v) {if (GLeeInit()) glColor4ubVertex3fvSUN(c, v);} GLEEPFNGLCOLOR4UBVERTEX3FVSUNPROC GLeeFuncPtr_glColor4ubVertex3fvSUN=GLee_Lazy_glColor4ubVertex3fvSUN; #endif #ifndef GLEE_C_DEFINED_glColor3fVertex3fSUN #define GLEE_C_DEFINED_glColor3fVertex3fSUN void __stdcall GLee_Lazy_glColor3fVertex3fSUN(GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glColor3fVertex3fSUN(r, g, b, x, y, z);} GLEEPFNGLCOLOR3FVERTEX3FSUNPROC GLeeFuncPtr_glColor3fVertex3fSUN=GLee_Lazy_glColor3fVertex3fSUN; #endif #ifndef GLEE_C_DEFINED_glColor3fVertex3fvSUN #define GLEE_C_DEFINED_glColor3fVertex3fvSUN void __stdcall GLee_Lazy_glColor3fVertex3fvSUN(const GLfloat * c, const GLfloat * v) {if (GLeeInit()) glColor3fVertex3fvSUN(c, v);} GLEEPFNGLCOLOR3FVERTEX3FVSUNPROC GLeeFuncPtr_glColor3fVertex3fvSUN=GLee_Lazy_glColor3fVertex3fvSUN; #endif #ifndef GLEE_C_DEFINED_glNormal3fVertex3fSUN #define GLEE_C_DEFINED_glNormal3fVertex3fSUN void __stdcall GLee_Lazy_glNormal3fVertex3fSUN(GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glNormal3fVertex3fSUN(nx, ny, nz, x, y, z);} GLEEPFNGLNORMAL3FVERTEX3FSUNPROC GLeeFuncPtr_glNormal3fVertex3fSUN=GLee_Lazy_glNormal3fVertex3fSUN; #endif #ifndef GLEE_C_DEFINED_glNormal3fVertex3fvSUN #define GLEE_C_DEFINED_glNormal3fVertex3fvSUN void __stdcall GLee_Lazy_glNormal3fVertex3fvSUN(const GLfloat * n, const GLfloat * v) {if (GLeeInit()) glNormal3fVertex3fvSUN(n, v);} GLEEPFNGLNORMAL3FVERTEX3FVSUNPROC GLeeFuncPtr_glNormal3fVertex3fvSUN=GLee_Lazy_glNormal3fVertex3fvSUN; #endif #ifndef GLEE_C_DEFINED_glColor4fNormal3fVertex3fSUN #define GLEE_C_DEFINED_glColor4fNormal3fVertex3fSUN void __stdcall GLee_Lazy_glColor4fNormal3fVertex3fSUN(GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glColor4fNormal3fVertex3fSUN(r, g, b, a, nx, ny, nz, x, y, z);} GLEEPFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC GLeeFuncPtr_glColor4fNormal3fVertex3fSUN=GLee_Lazy_glColor4fNormal3fVertex3fSUN; #endif #ifndef GLEE_C_DEFINED_glColor4fNormal3fVertex3fvSUN #define GLEE_C_DEFINED_glColor4fNormal3fVertex3fvSUN void __stdcall GLee_Lazy_glColor4fNormal3fVertex3fvSUN(const GLfloat * c, const GLfloat * n, const GLfloat * v) {if (GLeeInit()) glColor4fNormal3fVertex3fvSUN(c, n, v);} GLEEPFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC GLeeFuncPtr_glColor4fNormal3fVertex3fvSUN=GLee_Lazy_glColor4fNormal3fVertex3fvSUN; #endif #ifndef GLEE_C_DEFINED_glTexCoord2fVertex3fSUN #define GLEE_C_DEFINED_glTexCoord2fVertex3fSUN void __stdcall GLee_Lazy_glTexCoord2fVertex3fSUN(GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glTexCoord2fVertex3fSUN(s, t, x, y, z);} GLEEPFNGLTEXCOORD2FVERTEX3FSUNPROC GLeeFuncPtr_glTexCoord2fVertex3fSUN=GLee_Lazy_glTexCoord2fVertex3fSUN; #endif #ifndef GLEE_C_DEFINED_glTexCoord2fVertex3fvSUN #define GLEE_C_DEFINED_glTexCoord2fVertex3fvSUN void __stdcall GLee_Lazy_glTexCoord2fVertex3fvSUN(const GLfloat * tc, const GLfloat * v) {if (GLeeInit()) glTexCoord2fVertex3fvSUN(tc, v);} GLEEPFNGLTEXCOORD2FVERTEX3FVSUNPROC GLeeFuncPtr_glTexCoord2fVertex3fvSUN=GLee_Lazy_glTexCoord2fVertex3fvSUN; #endif #ifndef GLEE_C_DEFINED_glTexCoord4fVertex4fSUN #define GLEE_C_DEFINED_glTexCoord4fVertex4fSUN void __stdcall GLee_Lazy_glTexCoord4fVertex4fSUN(GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {if (GLeeInit()) glTexCoord4fVertex4fSUN(s, t, p, q, x, y, z, w);} GLEEPFNGLTEXCOORD4FVERTEX4FSUNPROC GLeeFuncPtr_glTexCoord4fVertex4fSUN=GLee_Lazy_glTexCoord4fVertex4fSUN; #endif #ifndef GLEE_C_DEFINED_glTexCoord4fVertex4fvSUN #define GLEE_C_DEFINED_glTexCoord4fVertex4fvSUN void __stdcall GLee_Lazy_glTexCoord4fVertex4fvSUN(const GLfloat * tc, const GLfloat * v) {if (GLeeInit()) glTexCoord4fVertex4fvSUN(tc, v);} GLEEPFNGLTEXCOORD4FVERTEX4FVSUNPROC GLeeFuncPtr_glTexCoord4fVertex4fvSUN=GLee_Lazy_glTexCoord4fVertex4fvSUN; #endif #ifndef GLEE_C_DEFINED_glTexCoord2fColor4ubVertex3fSUN #define GLEE_C_DEFINED_glTexCoord2fColor4ubVertex3fSUN void __stdcall GLee_Lazy_glTexCoord2fColor4ubVertex3fSUN(GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glTexCoord2fColor4ubVertex3fSUN(s, t, r, g, b, a, x, y, z);} GLEEPFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC GLeeFuncPtr_glTexCoord2fColor4ubVertex3fSUN=GLee_Lazy_glTexCoord2fColor4ubVertex3fSUN; #endif #ifndef GLEE_C_DEFINED_glTexCoord2fColor4ubVertex3fvSUN #define GLEE_C_DEFINED_glTexCoord2fColor4ubVertex3fvSUN void __stdcall GLee_Lazy_glTexCoord2fColor4ubVertex3fvSUN(const GLfloat * tc, const GLubyte * c, const GLfloat * v) {if (GLeeInit()) glTexCoord2fColor4ubVertex3fvSUN(tc, c, v);} GLEEPFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC GLeeFuncPtr_glTexCoord2fColor4ubVertex3fvSUN=GLee_Lazy_glTexCoord2fColor4ubVertex3fvSUN; #endif #ifndef GLEE_C_DEFINED_glTexCoord2fColor3fVertex3fSUN #define GLEE_C_DEFINED_glTexCoord2fColor3fVertex3fSUN void __stdcall GLee_Lazy_glTexCoord2fColor3fVertex3fSUN(GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glTexCoord2fColor3fVertex3fSUN(s, t, r, g, b, x, y, z);} GLEEPFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC GLeeFuncPtr_glTexCoord2fColor3fVertex3fSUN=GLee_Lazy_glTexCoord2fColor3fVertex3fSUN; #endif #ifndef GLEE_C_DEFINED_glTexCoord2fColor3fVertex3fvSUN #define GLEE_C_DEFINED_glTexCoord2fColor3fVertex3fvSUN void __stdcall GLee_Lazy_glTexCoord2fColor3fVertex3fvSUN(const GLfloat * tc, const GLfloat * c, const GLfloat * v) {if (GLeeInit()) glTexCoord2fColor3fVertex3fvSUN(tc, c, v);} GLEEPFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC GLeeFuncPtr_glTexCoord2fColor3fVertex3fvSUN=GLee_Lazy_glTexCoord2fColor3fVertex3fvSUN; #endif #ifndef GLEE_C_DEFINED_glTexCoord2fNormal3fVertex3fSUN #define GLEE_C_DEFINED_glTexCoord2fNormal3fVertex3fSUN void __stdcall GLee_Lazy_glTexCoord2fNormal3fVertex3fSUN(GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glTexCoord2fNormal3fVertex3fSUN(s, t, nx, ny, nz, x, y, z);} GLEEPFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC GLeeFuncPtr_glTexCoord2fNormal3fVertex3fSUN=GLee_Lazy_glTexCoord2fNormal3fVertex3fSUN; #endif #ifndef GLEE_C_DEFINED_glTexCoord2fNormal3fVertex3fvSUN #define GLEE_C_DEFINED_glTexCoord2fNormal3fVertex3fvSUN void __stdcall GLee_Lazy_glTexCoord2fNormal3fVertex3fvSUN(const GLfloat * tc, const GLfloat * n, const GLfloat * v) {if (GLeeInit()) glTexCoord2fNormal3fVertex3fvSUN(tc, n, v);} GLEEPFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC GLeeFuncPtr_glTexCoord2fNormal3fVertex3fvSUN=GLee_Lazy_glTexCoord2fNormal3fVertex3fvSUN; #endif #ifndef GLEE_C_DEFINED_glTexCoord2fColor4fNormal3fVertex3fSUN #define GLEE_C_DEFINED_glTexCoord2fColor4fNormal3fVertex3fSUN void __stdcall GLee_Lazy_glTexCoord2fColor4fNormal3fVertex3fSUN(GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glTexCoord2fColor4fNormal3fVertex3fSUN(s, t, r, g, b, a, nx, ny, nz, x, y, z);} GLEEPFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC GLeeFuncPtr_glTexCoord2fColor4fNormal3fVertex3fSUN=GLee_Lazy_glTexCoord2fColor4fNormal3fVertex3fSUN; #endif #ifndef GLEE_C_DEFINED_glTexCoord2fColor4fNormal3fVertex3fvSUN #define GLEE_C_DEFINED_glTexCoord2fColor4fNormal3fVertex3fvSUN void __stdcall GLee_Lazy_glTexCoord2fColor4fNormal3fVertex3fvSUN(const GLfloat * tc, const GLfloat * c, const GLfloat * n, const GLfloat * v) {if (GLeeInit()) glTexCoord2fColor4fNormal3fVertex3fvSUN(tc, c, n, v);} GLEEPFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC GLeeFuncPtr_glTexCoord2fColor4fNormal3fVertex3fvSUN=GLee_Lazy_glTexCoord2fColor4fNormal3fVertex3fvSUN; #endif #ifndef GLEE_C_DEFINED_glTexCoord4fColor4fNormal3fVertex4fSUN #define GLEE_C_DEFINED_glTexCoord4fColor4fNormal3fVertex4fSUN void __stdcall GLee_Lazy_glTexCoord4fColor4fNormal3fVertex4fSUN(GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {if (GLeeInit()) glTexCoord4fColor4fNormal3fVertex4fSUN(s, t, p, q, r, g, b, a, nx, ny, nz, x, y, z, w);} GLEEPFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC GLeeFuncPtr_glTexCoord4fColor4fNormal3fVertex4fSUN=GLee_Lazy_glTexCoord4fColor4fNormal3fVertex4fSUN; #endif #ifndef GLEE_C_DEFINED_glTexCoord4fColor4fNormal3fVertex4fvSUN #define GLEE_C_DEFINED_glTexCoord4fColor4fNormal3fVertex4fvSUN void __stdcall GLee_Lazy_glTexCoord4fColor4fNormal3fVertex4fvSUN(const GLfloat * tc, const GLfloat * c, const GLfloat * n, const GLfloat * v) {if (GLeeInit()) glTexCoord4fColor4fNormal3fVertex4fvSUN(tc, c, n, v);} GLEEPFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC GLeeFuncPtr_glTexCoord4fColor4fNormal3fVertex4fvSUN=GLee_Lazy_glTexCoord4fColor4fNormal3fVertex4fvSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeuiVertex3fSUN #define GLEE_C_DEFINED_glReplacementCodeuiVertex3fSUN void __stdcall GLee_Lazy_glReplacementCodeuiVertex3fSUN(GLuint rc, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glReplacementCodeuiVertex3fSUN(rc, x, y, z);} GLEEPFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC GLeeFuncPtr_glReplacementCodeuiVertex3fSUN=GLee_Lazy_glReplacementCodeuiVertex3fSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeuiVertex3fvSUN #define GLEE_C_DEFINED_glReplacementCodeuiVertex3fvSUN void __stdcall GLee_Lazy_glReplacementCodeuiVertex3fvSUN(const GLuint * rc, const GLfloat * v) {if (GLeeInit()) glReplacementCodeuiVertex3fvSUN(rc, v);} GLEEPFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC GLeeFuncPtr_glReplacementCodeuiVertex3fvSUN=GLee_Lazy_glReplacementCodeuiVertex3fvSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeuiColor4ubVertex3fSUN #define GLEE_C_DEFINED_glReplacementCodeuiColor4ubVertex3fSUN void __stdcall GLee_Lazy_glReplacementCodeuiColor4ubVertex3fSUN(GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glReplacementCodeuiColor4ubVertex3fSUN(rc, r, g, b, a, x, y, z);} GLEEPFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC GLeeFuncPtr_glReplacementCodeuiColor4ubVertex3fSUN=GLee_Lazy_glReplacementCodeuiColor4ubVertex3fSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeuiColor4ubVertex3fvSUN #define GLEE_C_DEFINED_glReplacementCodeuiColor4ubVertex3fvSUN void __stdcall GLee_Lazy_glReplacementCodeuiColor4ubVertex3fvSUN(const GLuint * rc, const GLubyte * c, const GLfloat * v) {if (GLeeInit()) glReplacementCodeuiColor4ubVertex3fvSUN(rc, c, v);} GLEEPFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC GLeeFuncPtr_glReplacementCodeuiColor4ubVertex3fvSUN=GLee_Lazy_glReplacementCodeuiColor4ubVertex3fvSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeuiColor3fVertex3fSUN #define GLEE_C_DEFINED_glReplacementCodeuiColor3fVertex3fSUN void __stdcall GLee_Lazy_glReplacementCodeuiColor3fVertex3fSUN(GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glReplacementCodeuiColor3fVertex3fSUN(rc, r, g, b, x, y, z);} GLEEPFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC GLeeFuncPtr_glReplacementCodeuiColor3fVertex3fSUN=GLee_Lazy_glReplacementCodeuiColor3fVertex3fSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeuiColor3fVertex3fvSUN #define GLEE_C_DEFINED_glReplacementCodeuiColor3fVertex3fvSUN void __stdcall GLee_Lazy_glReplacementCodeuiColor3fVertex3fvSUN(const GLuint * rc, const GLfloat * c, const GLfloat * v) {if (GLeeInit()) glReplacementCodeuiColor3fVertex3fvSUN(rc, c, v);} GLEEPFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC GLeeFuncPtr_glReplacementCodeuiColor3fVertex3fvSUN=GLee_Lazy_glReplacementCodeuiColor3fVertex3fvSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeuiNormal3fVertex3fSUN #define GLEE_C_DEFINED_glReplacementCodeuiNormal3fVertex3fSUN void __stdcall GLee_Lazy_glReplacementCodeuiNormal3fVertex3fSUN(GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glReplacementCodeuiNormal3fVertex3fSUN(rc, nx, ny, nz, x, y, z);} GLEEPFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC GLeeFuncPtr_glReplacementCodeuiNormal3fVertex3fSUN=GLee_Lazy_glReplacementCodeuiNormal3fVertex3fSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeuiNormal3fVertex3fvSUN #define GLEE_C_DEFINED_glReplacementCodeuiNormal3fVertex3fvSUN void __stdcall GLee_Lazy_glReplacementCodeuiNormal3fVertex3fvSUN(const GLuint * rc, const GLfloat * n, const GLfloat * v) {if (GLeeInit()) glReplacementCodeuiNormal3fVertex3fvSUN(rc, n, v);} GLEEPFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC GLeeFuncPtr_glReplacementCodeuiNormal3fVertex3fvSUN=GLee_Lazy_glReplacementCodeuiNormal3fVertex3fvSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeuiColor4fNormal3fVertex3fSUN #define GLEE_C_DEFINED_glReplacementCodeuiColor4fNormal3fVertex3fSUN void __stdcall GLee_Lazy_glReplacementCodeuiColor4fNormal3fVertex3fSUN(GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glReplacementCodeuiColor4fNormal3fVertex3fSUN(rc, r, g, b, a, nx, ny, nz, x, y, z);} GLEEPFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC GLeeFuncPtr_glReplacementCodeuiColor4fNormal3fVertex3fSUN=GLee_Lazy_glReplacementCodeuiColor4fNormal3fVertex3fSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeuiColor4fNormal3fVertex3fvSUN #define GLEE_C_DEFINED_glReplacementCodeuiColor4fNormal3fVertex3fvSUN void __stdcall GLee_Lazy_glReplacementCodeuiColor4fNormal3fVertex3fvSUN(const GLuint * rc, const GLfloat * c, const GLfloat * n, const GLfloat * v) {if (GLeeInit()) glReplacementCodeuiColor4fNormal3fVertex3fvSUN(rc, c, n, v);} GLEEPFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC GLeeFuncPtr_glReplacementCodeuiColor4fNormal3fVertex3fvSUN=GLee_Lazy_glReplacementCodeuiColor4fNormal3fVertex3fvSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeuiTexCoord2fVertex3fSUN #define GLEE_C_DEFINED_glReplacementCodeuiTexCoord2fVertex3fSUN void __stdcall GLee_Lazy_glReplacementCodeuiTexCoord2fVertex3fSUN(GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glReplacementCodeuiTexCoord2fVertex3fSUN(rc, s, t, x, y, z);} GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC GLeeFuncPtr_glReplacementCodeuiTexCoord2fVertex3fSUN=GLee_Lazy_glReplacementCodeuiTexCoord2fVertex3fSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeuiTexCoord2fVertex3fvSUN #define GLEE_C_DEFINED_glReplacementCodeuiTexCoord2fVertex3fvSUN void __stdcall GLee_Lazy_glReplacementCodeuiTexCoord2fVertex3fvSUN(const GLuint * rc, const GLfloat * tc, const GLfloat * v) {if (GLeeInit()) glReplacementCodeuiTexCoord2fVertex3fvSUN(rc, tc, v);} GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC GLeeFuncPtr_glReplacementCodeuiTexCoord2fVertex3fvSUN=GLee_Lazy_glReplacementCodeuiTexCoord2fVertex3fvSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN #define GLEE_C_DEFINED_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN void __stdcall GLee_Lazy_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN(GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN(rc, s, t, nx, ny, nz, x, y, z);} GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC GLeeFuncPtr_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN=GLee_Lazy_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN #define GLEE_C_DEFINED_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN void __stdcall GLee_Lazy_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN(const GLuint * rc, const GLfloat * tc, const GLfloat * n, const GLfloat * v) {if (GLeeInit()) glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN(rc, tc, n, v);} GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC GLeeFuncPtr_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN=GLee_Lazy_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN #define GLEE_C_DEFINED_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN void __stdcall GLee_Lazy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN(GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN(rc, s, t, r, g, b, a, nx, ny, nz, x, y, z);} GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC GLeeFuncPtr_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN=GLee_Lazy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN #define GLEE_C_DEFINED_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN void __stdcall GLee_Lazy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN(const GLuint * rc, const GLfloat * tc, const GLfloat * c, const GLfloat * n, const GLfloat * v) {if (GLeeInit()) glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN(rc, tc, c, n, v);} GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC GLeeFuncPtr_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN=GLee_Lazy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN; #endif #endif /* GL_EXT_blend_func_separate */ #ifdef __GLEE_GL_EXT_blend_func_separate #ifndef GLEE_C_DEFINED_glBlendFuncSeparateEXT #define GLEE_C_DEFINED_glBlendFuncSeparateEXT void __stdcall GLee_Lazy_glBlendFuncSeparateEXT(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) {if (GLeeInit()) glBlendFuncSeparateEXT(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha);} GLEEPFNGLBLENDFUNCSEPARATEEXTPROC GLeeFuncPtr_glBlendFuncSeparateEXT=GLee_Lazy_glBlendFuncSeparateEXT; #endif #endif /* GL_INGR_color_clamp */ #ifdef __GLEE_GL_INGR_color_clamp #endif /* GL_INGR_interlace_read */ #ifdef __GLEE_GL_INGR_interlace_read #endif /* GL_EXT_stencil_wrap */ #ifdef __GLEE_GL_EXT_stencil_wrap #endif /* GL_EXT_422_pixels */ #ifdef __GLEE_GL_EXT_422_pixels #endif /* GL_NV_texgen_reflection */ #ifdef __GLEE_GL_NV_texgen_reflection #endif /* GL_EXT_texture_cube_map */ #ifdef __GLEE_GL_EXT_texture_cube_map #endif /* GL_SUN_convolution_border_modes */ #ifdef __GLEE_GL_SUN_convolution_border_modes #endif /* GL_EXT_texture_env_add */ #ifdef __GLEE_GL_EXT_texture_env_add #endif /* GL_EXT_texture_lod_bias */ #ifdef __GLEE_GL_EXT_texture_lod_bias #endif /* GL_EXT_texture_filter_anisotropic */ #ifdef __GLEE_GL_EXT_texture_filter_anisotropic #endif /* GL_EXT_vertex_weighting */ #ifdef __GLEE_GL_EXT_vertex_weighting #ifndef GLEE_C_DEFINED_glVertexWeightfEXT #define GLEE_C_DEFINED_glVertexWeightfEXT void __stdcall GLee_Lazy_glVertexWeightfEXT(GLfloat weight) {if (GLeeInit()) glVertexWeightfEXT(weight);} GLEEPFNGLVERTEXWEIGHTFEXTPROC GLeeFuncPtr_glVertexWeightfEXT=GLee_Lazy_glVertexWeightfEXT; #endif #ifndef GLEE_C_DEFINED_glVertexWeightfvEXT #define GLEE_C_DEFINED_glVertexWeightfvEXT void __stdcall GLee_Lazy_glVertexWeightfvEXT(const GLfloat * weight) {if (GLeeInit()) glVertexWeightfvEXT(weight);} GLEEPFNGLVERTEXWEIGHTFVEXTPROC GLeeFuncPtr_glVertexWeightfvEXT=GLee_Lazy_glVertexWeightfvEXT; #endif #ifndef GLEE_C_DEFINED_glVertexWeightPointerEXT #define GLEE_C_DEFINED_glVertexWeightPointerEXT void __stdcall GLee_Lazy_glVertexWeightPointerEXT(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer) {if (GLeeInit()) glVertexWeightPointerEXT(size, type, stride, pointer);} GLEEPFNGLVERTEXWEIGHTPOINTEREXTPROC GLeeFuncPtr_glVertexWeightPointerEXT=GLee_Lazy_glVertexWeightPointerEXT; #endif #endif /* GL_NV_light_max_exponent */ #ifdef __GLEE_GL_NV_light_max_exponent #endif /* GL_NV_vertex_array_range */ #ifdef __GLEE_GL_NV_vertex_array_range #ifndef GLEE_C_DEFINED_glFlushVertexArrayRangeNV #define GLEE_C_DEFINED_glFlushVertexArrayRangeNV void __stdcall GLee_Lazy_glFlushVertexArrayRangeNV(void) {if (GLeeInit()) glFlushVertexArrayRangeNV();} GLEEPFNGLFLUSHVERTEXARRAYRANGENVPROC GLeeFuncPtr_glFlushVertexArrayRangeNV=GLee_Lazy_glFlushVertexArrayRangeNV; #endif #ifndef GLEE_C_DEFINED_glVertexArrayRangeNV #define GLEE_C_DEFINED_glVertexArrayRangeNV void __stdcall GLee_Lazy_glVertexArrayRangeNV(GLsizei length, const GLvoid * pointer) {if (GLeeInit()) glVertexArrayRangeNV(length, pointer);} GLEEPFNGLVERTEXARRAYRANGENVPROC GLeeFuncPtr_glVertexArrayRangeNV=GLee_Lazy_glVertexArrayRangeNV; #endif #endif /* GL_NV_register_combiners */ #ifdef __GLEE_GL_NV_register_combiners #ifndef GLEE_C_DEFINED_glCombinerParameterfvNV #define GLEE_C_DEFINED_glCombinerParameterfvNV void __stdcall GLee_Lazy_glCombinerParameterfvNV(GLenum pname, const GLfloat * params) {if (GLeeInit()) glCombinerParameterfvNV(pname, params);} GLEEPFNGLCOMBINERPARAMETERFVNVPROC GLeeFuncPtr_glCombinerParameterfvNV=GLee_Lazy_glCombinerParameterfvNV; #endif #ifndef GLEE_C_DEFINED_glCombinerParameterfNV #define GLEE_C_DEFINED_glCombinerParameterfNV void __stdcall GLee_Lazy_glCombinerParameterfNV(GLenum pname, GLfloat param) {if (GLeeInit()) glCombinerParameterfNV(pname, param);} GLEEPFNGLCOMBINERPARAMETERFNVPROC GLeeFuncPtr_glCombinerParameterfNV=GLee_Lazy_glCombinerParameterfNV; #endif #ifndef GLEE_C_DEFINED_glCombinerParameterivNV #define GLEE_C_DEFINED_glCombinerParameterivNV void __stdcall GLee_Lazy_glCombinerParameterivNV(GLenum pname, const GLint * params) {if (GLeeInit()) glCombinerParameterivNV(pname, params);} GLEEPFNGLCOMBINERPARAMETERIVNVPROC GLeeFuncPtr_glCombinerParameterivNV=GLee_Lazy_glCombinerParameterivNV; #endif #ifndef GLEE_C_DEFINED_glCombinerParameteriNV #define GLEE_C_DEFINED_glCombinerParameteriNV void __stdcall GLee_Lazy_glCombinerParameteriNV(GLenum pname, GLint param) {if (GLeeInit()) glCombinerParameteriNV(pname, param);} GLEEPFNGLCOMBINERPARAMETERINVPROC GLeeFuncPtr_glCombinerParameteriNV=GLee_Lazy_glCombinerParameteriNV; #endif #ifndef GLEE_C_DEFINED_glCombinerInputNV #define GLEE_C_DEFINED_glCombinerInputNV void __stdcall GLee_Lazy_glCombinerInputNV(GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage) {if (GLeeInit()) glCombinerInputNV(stage, portion, variable, input, mapping, componentUsage);} GLEEPFNGLCOMBINERINPUTNVPROC GLeeFuncPtr_glCombinerInputNV=GLee_Lazy_glCombinerInputNV; #endif #ifndef GLEE_C_DEFINED_glCombinerOutputNV #define GLEE_C_DEFINED_glCombinerOutputNV void __stdcall GLee_Lazy_glCombinerOutputNV(GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum) {if (GLeeInit()) glCombinerOutputNV(stage, portion, abOutput, cdOutput, sumOutput, scale, bias, abDotProduct, cdDotProduct, muxSum);} GLEEPFNGLCOMBINEROUTPUTNVPROC GLeeFuncPtr_glCombinerOutputNV=GLee_Lazy_glCombinerOutputNV; #endif #ifndef GLEE_C_DEFINED_glFinalCombinerInputNV #define GLEE_C_DEFINED_glFinalCombinerInputNV void __stdcall GLee_Lazy_glFinalCombinerInputNV(GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage) {if (GLeeInit()) glFinalCombinerInputNV(variable, input, mapping, componentUsage);} GLEEPFNGLFINALCOMBINERINPUTNVPROC GLeeFuncPtr_glFinalCombinerInputNV=GLee_Lazy_glFinalCombinerInputNV; #endif #ifndef GLEE_C_DEFINED_glGetCombinerInputParameterfvNV #define GLEE_C_DEFINED_glGetCombinerInputParameterfvNV void __stdcall GLee_Lazy_glGetCombinerInputParameterfvNV(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetCombinerInputParameterfvNV(stage, portion, variable, pname, params);} GLEEPFNGLGETCOMBINERINPUTPARAMETERFVNVPROC GLeeFuncPtr_glGetCombinerInputParameterfvNV=GLee_Lazy_glGetCombinerInputParameterfvNV; #endif #ifndef GLEE_C_DEFINED_glGetCombinerInputParameterivNV #define GLEE_C_DEFINED_glGetCombinerInputParameterivNV void __stdcall GLee_Lazy_glGetCombinerInputParameterivNV(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint * params) {if (GLeeInit()) glGetCombinerInputParameterivNV(stage, portion, variable, pname, params);} GLEEPFNGLGETCOMBINERINPUTPARAMETERIVNVPROC GLeeFuncPtr_glGetCombinerInputParameterivNV=GLee_Lazy_glGetCombinerInputParameterivNV; #endif #ifndef GLEE_C_DEFINED_glGetCombinerOutputParameterfvNV #define GLEE_C_DEFINED_glGetCombinerOutputParameterfvNV void __stdcall GLee_Lazy_glGetCombinerOutputParameterfvNV(GLenum stage, GLenum portion, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetCombinerOutputParameterfvNV(stage, portion, pname, params);} GLEEPFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC GLeeFuncPtr_glGetCombinerOutputParameterfvNV=GLee_Lazy_glGetCombinerOutputParameterfvNV; #endif #ifndef GLEE_C_DEFINED_glGetCombinerOutputParameterivNV #define GLEE_C_DEFINED_glGetCombinerOutputParameterivNV void __stdcall GLee_Lazy_glGetCombinerOutputParameterivNV(GLenum stage, GLenum portion, GLenum pname, GLint * params) {if (GLeeInit()) glGetCombinerOutputParameterivNV(stage, portion, pname, params);} GLEEPFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC GLeeFuncPtr_glGetCombinerOutputParameterivNV=GLee_Lazy_glGetCombinerOutputParameterivNV; #endif #ifndef GLEE_C_DEFINED_glGetFinalCombinerInputParameterfvNV #define GLEE_C_DEFINED_glGetFinalCombinerInputParameterfvNV void __stdcall GLee_Lazy_glGetFinalCombinerInputParameterfvNV(GLenum variable, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetFinalCombinerInputParameterfvNV(variable, pname, params);} GLEEPFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC GLeeFuncPtr_glGetFinalCombinerInputParameterfvNV=GLee_Lazy_glGetFinalCombinerInputParameterfvNV; #endif #ifndef GLEE_C_DEFINED_glGetFinalCombinerInputParameterivNV #define GLEE_C_DEFINED_glGetFinalCombinerInputParameterivNV void __stdcall GLee_Lazy_glGetFinalCombinerInputParameterivNV(GLenum variable, GLenum pname, GLint * params) {if (GLeeInit()) glGetFinalCombinerInputParameterivNV(variable, pname, params);} GLEEPFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC GLeeFuncPtr_glGetFinalCombinerInputParameterivNV=GLee_Lazy_glGetFinalCombinerInputParameterivNV; #endif #endif /* GL_NV_fog_distance */ #ifdef __GLEE_GL_NV_fog_distance #endif /* GL_NV_texgen_emboss */ #ifdef __GLEE_GL_NV_texgen_emboss #endif /* GL_NV_blend_square */ #ifdef __GLEE_GL_NV_blend_square #endif /* GL_NV_texture_env_combine4 */ #ifdef __GLEE_GL_NV_texture_env_combine4 #endif /* GL_MESA_resize_buffers */ #ifdef __GLEE_GL_MESA_resize_buffers #ifndef GLEE_C_DEFINED_glResizeBuffersMESA #define GLEE_C_DEFINED_glResizeBuffersMESA void __stdcall GLee_Lazy_glResizeBuffersMESA(void) {if (GLeeInit()) glResizeBuffersMESA();} GLEEPFNGLRESIZEBUFFERSMESAPROC GLeeFuncPtr_glResizeBuffersMESA=GLee_Lazy_glResizeBuffersMESA; #endif #endif /* GL_MESA_window_pos */ #ifdef __GLEE_GL_MESA_window_pos #ifndef GLEE_C_DEFINED_glWindowPos2dMESA #define GLEE_C_DEFINED_glWindowPos2dMESA void __stdcall GLee_Lazy_glWindowPos2dMESA(GLdouble x, GLdouble y) {if (GLeeInit()) glWindowPos2dMESA(x, y);} GLEEPFNGLWINDOWPOS2DMESAPROC GLeeFuncPtr_glWindowPos2dMESA=GLee_Lazy_glWindowPos2dMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos2dvMESA #define GLEE_C_DEFINED_glWindowPos2dvMESA void __stdcall GLee_Lazy_glWindowPos2dvMESA(const GLdouble * v) {if (GLeeInit()) glWindowPos2dvMESA(v);} GLEEPFNGLWINDOWPOS2DVMESAPROC GLeeFuncPtr_glWindowPos2dvMESA=GLee_Lazy_glWindowPos2dvMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos2fMESA #define GLEE_C_DEFINED_glWindowPos2fMESA void __stdcall GLee_Lazy_glWindowPos2fMESA(GLfloat x, GLfloat y) {if (GLeeInit()) glWindowPos2fMESA(x, y);} GLEEPFNGLWINDOWPOS2FMESAPROC GLeeFuncPtr_glWindowPos2fMESA=GLee_Lazy_glWindowPos2fMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos2fvMESA #define GLEE_C_DEFINED_glWindowPos2fvMESA void __stdcall GLee_Lazy_glWindowPos2fvMESA(const GLfloat * v) {if (GLeeInit()) glWindowPos2fvMESA(v);} GLEEPFNGLWINDOWPOS2FVMESAPROC GLeeFuncPtr_glWindowPos2fvMESA=GLee_Lazy_glWindowPos2fvMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos2iMESA #define GLEE_C_DEFINED_glWindowPos2iMESA void __stdcall GLee_Lazy_glWindowPos2iMESA(GLint x, GLint y) {if (GLeeInit()) glWindowPos2iMESA(x, y);} GLEEPFNGLWINDOWPOS2IMESAPROC GLeeFuncPtr_glWindowPos2iMESA=GLee_Lazy_glWindowPos2iMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos2ivMESA #define GLEE_C_DEFINED_glWindowPos2ivMESA void __stdcall GLee_Lazy_glWindowPos2ivMESA(const GLint * v) {if (GLeeInit()) glWindowPos2ivMESA(v);} GLEEPFNGLWINDOWPOS2IVMESAPROC GLeeFuncPtr_glWindowPos2ivMESA=GLee_Lazy_glWindowPos2ivMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos2sMESA #define GLEE_C_DEFINED_glWindowPos2sMESA void __stdcall GLee_Lazy_glWindowPos2sMESA(GLshort x, GLshort y) {if (GLeeInit()) glWindowPos2sMESA(x, y);} GLEEPFNGLWINDOWPOS2SMESAPROC GLeeFuncPtr_glWindowPos2sMESA=GLee_Lazy_glWindowPos2sMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos2svMESA #define GLEE_C_DEFINED_glWindowPos2svMESA void __stdcall GLee_Lazy_glWindowPos2svMESA(const GLshort * v) {if (GLeeInit()) glWindowPos2svMESA(v);} GLEEPFNGLWINDOWPOS2SVMESAPROC GLeeFuncPtr_glWindowPos2svMESA=GLee_Lazy_glWindowPos2svMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos3dMESA #define GLEE_C_DEFINED_glWindowPos3dMESA void __stdcall GLee_Lazy_glWindowPos3dMESA(GLdouble x, GLdouble y, GLdouble z) {if (GLeeInit()) glWindowPos3dMESA(x, y, z);} GLEEPFNGLWINDOWPOS3DMESAPROC GLeeFuncPtr_glWindowPos3dMESA=GLee_Lazy_glWindowPos3dMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos3dvMESA #define GLEE_C_DEFINED_glWindowPos3dvMESA void __stdcall GLee_Lazy_glWindowPos3dvMESA(const GLdouble * v) {if (GLeeInit()) glWindowPos3dvMESA(v);} GLEEPFNGLWINDOWPOS3DVMESAPROC GLeeFuncPtr_glWindowPos3dvMESA=GLee_Lazy_glWindowPos3dvMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos3fMESA #define GLEE_C_DEFINED_glWindowPos3fMESA void __stdcall GLee_Lazy_glWindowPos3fMESA(GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glWindowPos3fMESA(x, y, z);} GLEEPFNGLWINDOWPOS3FMESAPROC GLeeFuncPtr_glWindowPos3fMESA=GLee_Lazy_glWindowPos3fMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos3fvMESA #define GLEE_C_DEFINED_glWindowPos3fvMESA void __stdcall GLee_Lazy_glWindowPos3fvMESA(const GLfloat * v) {if (GLeeInit()) glWindowPos3fvMESA(v);} GLEEPFNGLWINDOWPOS3FVMESAPROC GLeeFuncPtr_glWindowPos3fvMESA=GLee_Lazy_glWindowPos3fvMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos3iMESA #define GLEE_C_DEFINED_glWindowPos3iMESA void __stdcall GLee_Lazy_glWindowPos3iMESA(GLint x, GLint y, GLint z) {if (GLeeInit()) glWindowPos3iMESA(x, y, z);} GLEEPFNGLWINDOWPOS3IMESAPROC GLeeFuncPtr_glWindowPos3iMESA=GLee_Lazy_glWindowPos3iMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos3ivMESA #define GLEE_C_DEFINED_glWindowPos3ivMESA void __stdcall GLee_Lazy_glWindowPos3ivMESA(const GLint * v) {if (GLeeInit()) glWindowPos3ivMESA(v);} GLEEPFNGLWINDOWPOS3IVMESAPROC GLeeFuncPtr_glWindowPos3ivMESA=GLee_Lazy_glWindowPos3ivMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos3sMESA #define GLEE_C_DEFINED_glWindowPos3sMESA void __stdcall GLee_Lazy_glWindowPos3sMESA(GLshort x, GLshort y, GLshort z) {if (GLeeInit()) glWindowPos3sMESA(x, y, z);} GLEEPFNGLWINDOWPOS3SMESAPROC GLeeFuncPtr_glWindowPos3sMESA=GLee_Lazy_glWindowPos3sMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos3svMESA #define GLEE_C_DEFINED_glWindowPos3svMESA void __stdcall GLee_Lazy_glWindowPos3svMESA(const GLshort * v) {if (GLeeInit()) glWindowPos3svMESA(v);} GLEEPFNGLWINDOWPOS3SVMESAPROC GLeeFuncPtr_glWindowPos3svMESA=GLee_Lazy_glWindowPos3svMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos4dMESA #define GLEE_C_DEFINED_glWindowPos4dMESA void __stdcall GLee_Lazy_glWindowPos4dMESA(GLdouble x, GLdouble y, GLdouble z, GLdouble w) {if (GLeeInit()) glWindowPos4dMESA(x, y, z, w);} GLEEPFNGLWINDOWPOS4DMESAPROC GLeeFuncPtr_glWindowPos4dMESA=GLee_Lazy_glWindowPos4dMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos4dvMESA #define GLEE_C_DEFINED_glWindowPos4dvMESA void __stdcall GLee_Lazy_glWindowPos4dvMESA(const GLdouble * v) {if (GLeeInit()) glWindowPos4dvMESA(v);} GLEEPFNGLWINDOWPOS4DVMESAPROC GLeeFuncPtr_glWindowPos4dvMESA=GLee_Lazy_glWindowPos4dvMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos4fMESA #define GLEE_C_DEFINED_glWindowPos4fMESA void __stdcall GLee_Lazy_glWindowPos4fMESA(GLfloat x, GLfloat y, GLfloat z, GLfloat w) {if (GLeeInit()) glWindowPos4fMESA(x, y, z, w);} GLEEPFNGLWINDOWPOS4FMESAPROC GLeeFuncPtr_glWindowPos4fMESA=GLee_Lazy_glWindowPos4fMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos4fvMESA #define GLEE_C_DEFINED_glWindowPos4fvMESA void __stdcall GLee_Lazy_glWindowPos4fvMESA(const GLfloat * v) {if (GLeeInit()) glWindowPos4fvMESA(v);} GLEEPFNGLWINDOWPOS4FVMESAPROC GLeeFuncPtr_glWindowPos4fvMESA=GLee_Lazy_glWindowPos4fvMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos4iMESA #define GLEE_C_DEFINED_glWindowPos4iMESA void __stdcall GLee_Lazy_glWindowPos4iMESA(GLint x, GLint y, GLint z, GLint w) {if (GLeeInit()) glWindowPos4iMESA(x, y, z, w);} GLEEPFNGLWINDOWPOS4IMESAPROC GLeeFuncPtr_glWindowPos4iMESA=GLee_Lazy_glWindowPos4iMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos4ivMESA #define GLEE_C_DEFINED_glWindowPos4ivMESA void __stdcall GLee_Lazy_glWindowPos4ivMESA(const GLint * v) {if (GLeeInit()) glWindowPos4ivMESA(v);} GLEEPFNGLWINDOWPOS4IVMESAPROC GLeeFuncPtr_glWindowPos4ivMESA=GLee_Lazy_glWindowPos4ivMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos4sMESA #define GLEE_C_DEFINED_glWindowPos4sMESA void __stdcall GLee_Lazy_glWindowPos4sMESA(GLshort x, GLshort y, GLshort z, GLshort w) {if (GLeeInit()) glWindowPos4sMESA(x, y, z, w);} GLEEPFNGLWINDOWPOS4SMESAPROC GLeeFuncPtr_glWindowPos4sMESA=GLee_Lazy_glWindowPos4sMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos4svMESA #define GLEE_C_DEFINED_glWindowPos4svMESA void __stdcall GLee_Lazy_glWindowPos4svMESA(const GLshort * v) {if (GLeeInit()) glWindowPos4svMESA(v);} GLEEPFNGLWINDOWPOS4SVMESAPROC GLeeFuncPtr_glWindowPos4svMESA=GLee_Lazy_glWindowPos4svMESA; #endif #endif /* GL_EXT_texture_compression_s3tc */ #ifdef __GLEE_GL_EXT_texture_compression_s3tc #endif /* GL_IBM_cull_vertex */ #ifdef __GLEE_GL_IBM_cull_vertex #endif /* GL_IBM_multimode_draw_arrays */ #ifdef __GLEE_GL_IBM_multimode_draw_arrays #ifndef GLEE_C_DEFINED_glMultiModeDrawArraysIBM #define GLEE_C_DEFINED_glMultiModeDrawArraysIBM void __stdcall GLee_Lazy_glMultiModeDrawArraysIBM(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride) {if (GLeeInit()) glMultiModeDrawArraysIBM(mode, first, count, primcount, modestride);} GLEEPFNGLMULTIMODEDRAWARRAYSIBMPROC GLeeFuncPtr_glMultiModeDrawArraysIBM=GLee_Lazy_glMultiModeDrawArraysIBM; #endif #ifndef GLEE_C_DEFINED_glMultiModeDrawElementsIBM #define GLEE_C_DEFINED_glMultiModeDrawElementsIBM void __stdcall GLee_Lazy_glMultiModeDrawElementsIBM(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid* const * indices, GLsizei primcount, GLint modestride) {if (GLeeInit()) glMultiModeDrawElementsIBM(mode, count, type, indices, primcount, modestride);} GLEEPFNGLMULTIMODEDRAWELEMENTSIBMPROC GLeeFuncPtr_glMultiModeDrawElementsIBM=GLee_Lazy_glMultiModeDrawElementsIBM; #endif #endif /* GL_IBM_vertex_array_lists */ #ifdef __GLEE_GL_IBM_vertex_array_lists #ifndef GLEE_C_DEFINED_glColorPointerListIBM #define GLEE_C_DEFINED_glColorPointerListIBM void __stdcall GLee_Lazy_glColorPointerListIBM(GLint size, GLenum type, GLint stride, const GLvoid* * pointer, GLint ptrstride) {if (GLeeInit()) glColorPointerListIBM(size, type, stride, pointer, ptrstride);} GLEEPFNGLCOLORPOINTERLISTIBMPROC GLeeFuncPtr_glColorPointerListIBM=GLee_Lazy_glColorPointerListIBM; #endif #ifndef GLEE_C_DEFINED_glSecondaryColorPointerListIBM #define GLEE_C_DEFINED_glSecondaryColorPointerListIBM void __stdcall GLee_Lazy_glSecondaryColorPointerListIBM(GLint size, GLenum type, GLint stride, const GLvoid* * pointer, GLint ptrstride) {if (GLeeInit()) glSecondaryColorPointerListIBM(size, type, stride, pointer, ptrstride);} GLEEPFNGLSECONDARYCOLORPOINTERLISTIBMPROC GLeeFuncPtr_glSecondaryColorPointerListIBM=GLee_Lazy_glSecondaryColorPointerListIBM; #endif #ifndef GLEE_C_DEFINED_glEdgeFlagPointerListIBM #define GLEE_C_DEFINED_glEdgeFlagPointerListIBM void __stdcall GLee_Lazy_glEdgeFlagPointerListIBM(GLint stride, const GLboolean* * pointer, GLint ptrstride) {if (GLeeInit()) glEdgeFlagPointerListIBM(stride, pointer, ptrstride);} GLEEPFNGLEDGEFLAGPOINTERLISTIBMPROC GLeeFuncPtr_glEdgeFlagPointerListIBM=GLee_Lazy_glEdgeFlagPointerListIBM; #endif #ifndef GLEE_C_DEFINED_glFogCoordPointerListIBM #define GLEE_C_DEFINED_glFogCoordPointerListIBM void __stdcall GLee_Lazy_glFogCoordPointerListIBM(GLenum type, GLint stride, const GLvoid* * pointer, GLint ptrstride) {if (GLeeInit()) glFogCoordPointerListIBM(type, stride, pointer, ptrstride);} GLEEPFNGLFOGCOORDPOINTERLISTIBMPROC GLeeFuncPtr_glFogCoordPointerListIBM=GLee_Lazy_glFogCoordPointerListIBM; #endif #ifndef GLEE_C_DEFINED_glIndexPointerListIBM #define GLEE_C_DEFINED_glIndexPointerListIBM void __stdcall GLee_Lazy_glIndexPointerListIBM(GLenum type, GLint stride, const GLvoid* * pointer, GLint ptrstride) {if (GLeeInit()) glIndexPointerListIBM(type, stride, pointer, ptrstride);} GLEEPFNGLINDEXPOINTERLISTIBMPROC GLeeFuncPtr_glIndexPointerListIBM=GLee_Lazy_glIndexPointerListIBM; #endif #ifndef GLEE_C_DEFINED_glNormalPointerListIBM #define GLEE_C_DEFINED_glNormalPointerListIBM void __stdcall GLee_Lazy_glNormalPointerListIBM(GLenum type, GLint stride, const GLvoid* * pointer, GLint ptrstride) {if (GLeeInit()) glNormalPointerListIBM(type, stride, pointer, ptrstride);} GLEEPFNGLNORMALPOINTERLISTIBMPROC GLeeFuncPtr_glNormalPointerListIBM=GLee_Lazy_glNormalPointerListIBM; #endif #ifndef GLEE_C_DEFINED_glTexCoordPointerListIBM #define GLEE_C_DEFINED_glTexCoordPointerListIBM void __stdcall GLee_Lazy_glTexCoordPointerListIBM(GLint size, GLenum type, GLint stride, const GLvoid* * pointer, GLint ptrstride) {if (GLeeInit()) glTexCoordPointerListIBM(size, type, stride, pointer, ptrstride);} GLEEPFNGLTEXCOORDPOINTERLISTIBMPROC GLeeFuncPtr_glTexCoordPointerListIBM=GLee_Lazy_glTexCoordPointerListIBM; #endif #ifndef GLEE_C_DEFINED_glVertexPointerListIBM #define GLEE_C_DEFINED_glVertexPointerListIBM void __stdcall GLee_Lazy_glVertexPointerListIBM(GLint size, GLenum type, GLint stride, const GLvoid* * pointer, GLint ptrstride) {if (GLeeInit()) glVertexPointerListIBM(size, type, stride, pointer, ptrstride);} GLEEPFNGLVERTEXPOINTERLISTIBMPROC GLeeFuncPtr_glVertexPointerListIBM=GLee_Lazy_glVertexPointerListIBM; #endif #endif /* GL_SGIX_subsample */ #ifdef __GLEE_GL_SGIX_subsample #endif /* GL_SGIX_ycrcb_subsample */ #ifdef __GLEE_GL_SGIX_ycrcb_subsample #endif /* GL_SGIX_ycrcba */ #ifdef __GLEE_GL_SGIX_ycrcba #endif /* GL_SGI_depth_pass_instrument */ #ifdef __GLEE_GL_SGI_depth_pass_instrument #endif /* GL_3DFX_texture_compression_FXT1 */ #ifdef __GLEE_GL_3DFX_texture_compression_FXT1 #endif /* GL_3DFX_multisample */ #ifdef __GLEE_GL_3DFX_multisample #endif /* GL_3DFX_tbuffer */ #ifdef __GLEE_GL_3DFX_tbuffer #ifndef GLEE_C_DEFINED_glTbufferMask3DFX #define GLEE_C_DEFINED_glTbufferMask3DFX void __stdcall GLee_Lazy_glTbufferMask3DFX(GLuint mask) {if (GLeeInit()) glTbufferMask3DFX(mask);} GLEEPFNGLTBUFFERMASK3DFXPROC GLeeFuncPtr_glTbufferMask3DFX=GLee_Lazy_glTbufferMask3DFX; #endif #endif /* GL_EXT_multisample */ #ifdef __GLEE_GL_EXT_multisample #ifndef GLEE_C_DEFINED_glSampleMaskEXT #define GLEE_C_DEFINED_glSampleMaskEXT void __stdcall GLee_Lazy_glSampleMaskEXT(GLclampf value, GLboolean invert) {if (GLeeInit()) glSampleMaskEXT(value, invert);} GLEEPFNGLSAMPLEMASKEXTPROC GLeeFuncPtr_glSampleMaskEXT=GLee_Lazy_glSampleMaskEXT; #endif #ifndef GLEE_C_DEFINED_glSamplePatternEXT #define GLEE_C_DEFINED_glSamplePatternEXT void __stdcall GLee_Lazy_glSamplePatternEXT(GLenum pattern) {if (GLeeInit()) glSamplePatternEXT(pattern);} GLEEPFNGLSAMPLEPATTERNEXTPROC GLeeFuncPtr_glSamplePatternEXT=GLee_Lazy_glSamplePatternEXT; #endif #endif /* GL_SGIX_vertex_preclip */ #ifdef __GLEE_GL_SGIX_vertex_preclip #endif /* GL_SGIX_convolution_accuracy */ #ifdef __GLEE_GL_SGIX_convolution_accuracy #endif /* GL_SGIX_resample */ #ifdef __GLEE_GL_SGIX_resample #endif /* GL_SGIS_point_line_texgen */ #ifdef __GLEE_GL_SGIS_point_line_texgen #endif /* GL_SGIS_texture_color_mask */ #ifdef __GLEE_GL_SGIS_texture_color_mask #ifndef GLEE_C_DEFINED_glTextureColorMaskSGIS #define GLEE_C_DEFINED_glTextureColorMaskSGIS void __stdcall GLee_Lazy_glTextureColorMaskSGIS(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) {if (GLeeInit()) glTextureColorMaskSGIS(red, green, blue, alpha);} GLEEPFNGLTEXTURECOLORMASKSGISPROC GLeeFuncPtr_glTextureColorMaskSGIS=GLee_Lazy_glTextureColorMaskSGIS; #endif #endif /* GL_EXT_texture_env_dot3 */ #ifdef __GLEE_GL_EXT_texture_env_dot3 #endif /* GL_ATI_texture_mirror_once */ #ifdef __GLEE_GL_ATI_texture_mirror_once #endif /* GL_NV_fence */ #ifdef __GLEE_GL_NV_fence #ifndef GLEE_C_DEFINED_glDeleteFencesNV #define GLEE_C_DEFINED_glDeleteFencesNV void __stdcall GLee_Lazy_glDeleteFencesNV(GLsizei n, const GLuint * fences) {if (GLeeInit()) glDeleteFencesNV(n, fences);} GLEEPFNGLDELETEFENCESNVPROC GLeeFuncPtr_glDeleteFencesNV=GLee_Lazy_glDeleteFencesNV; #endif #ifndef GLEE_C_DEFINED_glGenFencesNV #define GLEE_C_DEFINED_glGenFencesNV void __stdcall GLee_Lazy_glGenFencesNV(GLsizei n, GLuint * fences) {if (GLeeInit()) glGenFencesNV(n, fences);} GLEEPFNGLGENFENCESNVPROC GLeeFuncPtr_glGenFencesNV=GLee_Lazy_glGenFencesNV; #endif #ifndef GLEE_C_DEFINED_glIsFenceNV #define GLEE_C_DEFINED_glIsFenceNV GLboolean __stdcall GLee_Lazy_glIsFenceNV(GLuint fence) {if (GLeeInit()) return glIsFenceNV(fence); return (GLboolean)0;} GLEEPFNGLISFENCENVPROC GLeeFuncPtr_glIsFenceNV=GLee_Lazy_glIsFenceNV; #endif #ifndef GLEE_C_DEFINED_glTestFenceNV #define GLEE_C_DEFINED_glTestFenceNV GLboolean __stdcall GLee_Lazy_glTestFenceNV(GLuint fence) {if (GLeeInit()) return glTestFenceNV(fence); return (GLboolean)0;} GLEEPFNGLTESTFENCENVPROC GLeeFuncPtr_glTestFenceNV=GLee_Lazy_glTestFenceNV; #endif #ifndef GLEE_C_DEFINED_glGetFenceivNV #define GLEE_C_DEFINED_glGetFenceivNV void __stdcall GLee_Lazy_glGetFenceivNV(GLuint fence, GLenum pname, GLint * params) {if (GLeeInit()) glGetFenceivNV(fence, pname, params);} GLEEPFNGLGETFENCEIVNVPROC GLeeFuncPtr_glGetFenceivNV=GLee_Lazy_glGetFenceivNV; #endif #ifndef GLEE_C_DEFINED_glFinishFenceNV #define GLEE_C_DEFINED_glFinishFenceNV void __stdcall GLee_Lazy_glFinishFenceNV(GLuint fence) {if (GLeeInit()) glFinishFenceNV(fence);} GLEEPFNGLFINISHFENCENVPROC GLeeFuncPtr_glFinishFenceNV=GLee_Lazy_glFinishFenceNV; #endif #ifndef GLEE_C_DEFINED_glSetFenceNV #define GLEE_C_DEFINED_glSetFenceNV void __stdcall GLee_Lazy_glSetFenceNV(GLuint fence, GLenum condition) {if (GLeeInit()) glSetFenceNV(fence, condition);} GLEEPFNGLSETFENCENVPROC GLeeFuncPtr_glSetFenceNV=GLee_Lazy_glSetFenceNV; #endif #endif /* GL_IBM_texture_mirrored_repeat */ #ifdef __GLEE_GL_IBM_texture_mirrored_repeat #endif /* GL_NV_evaluators */ #ifdef __GLEE_GL_NV_evaluators #ifndef GLEE_C_DEFINED_glMapControlPointsNV #define GLEE_C_DEFINED_glMapControlPointsNV void __stdcall GLee_Lazy_glMapControlPointsNV(GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid * points) {if (GLeeInit()) glMapControlPointsNV(target, index, type, ustride, vstride, uorder, vorder, packed, points);} GLEEPFNGLMAPCONTROLPOINTSNVPROC GLeeFuncPtr_glMapControlPointsNV=GLee_Lazy_glMapControlPointsNV; #endif #ifndef GLEE_C_DEFINED_glMapParameterivNV #define GLEE_C_DEFINED_glMapParameterivNV void __stdcall GLee_Lazy_glMapParameterivNV(GLenum target, GLenum pname, const GLint * params) {if (GLeeInit()) glMapParameterivNV(target, pname, params);} GLEEPFNGLMAPPARAMETERIVNVPROC GLeeFuncPtr_glMapParameterivNV=GLee_Lazy_glMapParameterivNV; #endif #ifndef GLEE_C_DEFINED_glMapParameterfvNV #define GLEE_C_DEFINED_glMapParameterfvNV void __stdcall GLee_Lazy_glMapParameterfvNV(GLenum target, GLenum pname, const GLfloat * params) {if (GLeeInit()) glMapParameterfvNV(target, pname, params);} GLEEPFNGLMAPPARAMETERFVNVPROC GLeeFuncPtr_glMapParameterfvNV=GLee_Lazy_glMapParameterfvNV; #endif #ifndef GLEE_C_DEFINED_glGetMapControlPointsNV #define GLEE_C_DEFINED_glGetMapControlPointsNV void __stdcall GLee_Lazy_glGetMapControlPointsNV(GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, GLvoid * points) {if (GLeeInit()) glGetMapControlPointsNV(target, index, type, ustride, vstride, packed, points);} GLEEPFNGLGETMAPCONTROLPOINTSNVPROC GLeeFuncPtr_glGetMapControlPointsNV=GLee_Lazy_glGetMapControlPointsNV; #endif #ifndef GLEE_C_DEFINED_glGetMapParameterivNV #define GLEE_C_DEFINED_glGetMapParameterivNV void __stdcall GLee_Lazy_glGetMapParameterivNV(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetMapParameterivNV(target, pname, params);} GLEEPFNGLGETMAPPARAMETERIVNVPROC GLeeFuncPtr_glGetMapParameterivNV=GLee_Lazy_glGetMapParameterivNV; #endif #ifndef GLEE_C_DEFINED_glGetMapParameterfvNV #define GLEE_C_DEFINED_glGetMapParameterfvNV void __stdcall GLee_Lazy_glGetMapParameterfvNV(GLenum target, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetMapParameterfvNV(target, pname, params);} GLEEPFNGLGETMAPPARAMETERFVNVPROC GLeeFuncPtr_glGetMapParameterfvNV=GLee_Lazy_glGetMapParameterfvNV; #endif #ifndef GLEE_C_DEFINED_glGetMapAttribParameterivNV #define GLEE_C_DEFINED_glGetMapAttribParameterivNV void __stdcall GLee_Lazy_glGetMapAttribParameterivNV(GLenum target, GLuint index, GLenum pname, GLint * params) {if (GLeeInit()) glGetMapAttribParameterivNV(target, index, pname, params);} GLEEPFNGLGETMAPATTRIBPARAMETERIVNVPROC GLeeFuncPtr_glGetMapAttribParameterivNV=GLee_Lazy_glGetMapAttribParameterivNV; #endif #ifndef GLEE_C_DEFINED_glGetMapAttribParameterfvNV #define GLEE_C_DEFINED_glGetMapAttribParameterfvNV void __stdcall GLee_Lazy_glGetMapAttribParameterfvNV(GLenum target, GLuint index, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetMapAttribParameterfvNV(target, index, pname, params);} GLEEPFNGLGETMAPATTRIBPARAMETERFVNVPROC GLeeFuncPtr_glGetMapAttribParameterfvNV=GLee_Lazy_glGetMapAttribParameterfvNV; #endif #ifndef GLEE_C_DEFINED_glEvalMapsNV #define GLEE_C_DEFINED_glEvalMapsNV void __stdcall GLee_Lazy_glEvalMapsNV(GLenum target, GLenum mode) {if (GLeeInit()) glEvalMapsNV(target, mode);} GLEEPFNGLEVALMAPSNVPROC GLeeFuncPtr_glEvalMapsNV=GLee_Lazy_glEvalMapsNV; #endif #endif /* GL_NV_packed_depth_stencil */ #ifdef __GLEE_GL_NV_packed_depth_stencil #endif /* GL_NV_register_combiners2 */ #ifdef __GLEE_GL_NV_register_combiners2 #ifndef GLEE_C_DEFINED_glCombinerStageParameterfvNV #define GLEE_C_DEFINED_glCombinerStageParameterfvNV void __stdcall GLee_Lazy_glCombinerStageParameterfvNV(GLenum stage, GLenum pname, const GLfloat * params) {if (GLeeInit()) glCombinerStageParameterfvNV(stage, pname, params);} GLEEPFNGLCOMBINERSTAGEPARAMETERFVNVPROC GLeeFuncPtr_glCombinerStageParameterfvNV=GLee_Lazy_glCombinerStageParameterfvNV; #endif #ifndef GLEE_C_DEFINED_glGetCombinerStageParameterfvNV #define GLEE_C_DEFINED_glGetCombinerStageParameterfvNV void __stdcall GLee_Lazy_glGetCombinerStageParameterfvNV(GLenum stage, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetCombinerStageParameterfvNV(stage, pname, params);} GLEEPFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC GLeeFuncPtr_glGetCombinerStageParameterfvNV=GLee_Lazy_glGetCombinerStageParameterfvNV; #endif #endif /* GL_NV_texture_compression_vtc */ #ifdef __GLEE_GL_NV_texture_compression_vtc #endif /* GL_NV_texture_rectangle */ #ifdef __GLEE_GL_NV_texture_rectangle #endif /* GL_NV_texture_shader */ #ifdef __GLEE_GL_NV_texture_shader #endif /* GL_NV_texture_shader2 */ #ifdef __GLEE_GL_NV_texture_shader2 #endif /* GL_NV_vertex_array_range2 */ #ifdef __GLEE_GL_NV_vertex_array_range2 #endif /* GL_NV_vertex_program */ #ifdef __GLEE_GL_NV_vertex_program #ifndef GLEE_C_DEFINED_glAreProgramsResidentNV #define GLEE_C_DEFINED_glAreProgramsResidentNV GLboolean __stdcall GLee_Lazy_glAreProgramsResidentNV(GLsizei n, const GLuint * programs, GLboolean * residences) {if (GLeeInit()) return glAreProgramsResidentNV(n, programs, residences); return (GLboolean)0;} GLEEPFNGLAREPROGRAMSRESIDENTNVPROC GLeeFuncPtr_glAreProgramsResidentNV=GLee_Lazy_glAreProgramsResidentNV; #endif #ifndef GLEE_C_DEFINED_glBindProgramNV #define GLEE_C_DEFINED_glBindProgramNV void __stdcall GLee_Lazy_glBindProgramNV(GLenum target, GLuint id) {if (GLeeInit()) glBindProgramNV(target, id);} GLEEPFNGLBINDPROGRAMNVPROC GLeeFuncPtr_glBindProgramNV=GLee_Lazy_glBindProgramNV; #endif #ifndef GLEE_C_DEFINED_glDeleteProgramsNV #define GLEE_C_DEFINED_glDeleteProgramsNV void __stdcall GLee_Lazy_glDeleteProgramsNV(GLsizei n, const GLuint * programs) {if (GLeeInit()) glDeleteProgramsNV(n, programs);} GLEEPFNGLDELETEPROGRAMSNVPROC GLeeFuncPtr_glDeleteProgramsNV=GLee_Lazy_glDeleteProgramsNV; #endif #ifndef GLEE_C_DEFINED_glExecuteProgramNV #define GLEE_C_DEFINED_glExecuteProgramNV void __stdcall GLee_Lazy_glExecuteProgramNV(GLenum target, GLuint id, const GLfloat * params) {if (GLeeInit()) glExecuteProgramNV(target, id, params);} GLEEPFNGLEXECUTEPROGRAMNVPROC GLeeFuncPtr_glExecuteProgramNV=GLee_Lazy_glExecuteProgramNV; #endif #ifndef GLEE_C_DEFINED_glGenProgramsNV #define GLEE_C_DEFINED_glGenProgramsNV void __stdcall GLee_Lazy_glGenProgramsNV(GLsizei n, GLuint * programs) {if (GLeeInit()) glGenProgramsNV(n, programs);} GLEEPFNGLGENPROGRAMSNVPROC GLeeFuncPtr_glGenProgramsNV=GLee_Lazy_glGenProgramsNV; #endif #ifndef GLEE_C_DEFINED_glGetProgramParameterdvNV #define GLEE_C_DEFINED_glGetProgramParameterdvNV void __stdcall GLee_Lazy_glGetProgramParameterdvNV(GLenum target, GLuint index, GLenum pname, GLdouble * params) {if (GLeeInit()) glGetProgramParameterdvNV(target, index, pname, params);} GLEEPFNGLGETPROGRAMPARAMETERDVNVPROC GLeeFuncPtr_glGetProgramParameterdvNV=GLee_Lazy_glGetProgramParameterdvNV; #endif #ifndef GLEE_C_DEFINED_glGetProgramParameterfvNV #define GLEE_C_DEFINED_glGetProgramParameterfvNV void __stdcall GLee_Lazy_glGetProgramParameterfvNV(GLenum target, GLuint index, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetProgramParameterfvNV(target, index, pname, params);} GLEEPFNGLGETPROGRAMPARAMETERFVNVPROC GLeeFuncPtr_glGetProgramParameterfvNV=GLee_Lazy_glGetProgramParameterfvNV; #endif #ifndef GLEE_C_DEFINED_glGetProgramivNV #define GLEE_C_DEFINED_glGetProgramivNV void __stdcall GLee_Lazy_glGetProgramivNV(GLuint id, GLenum pname, GLint * params) {if (GLeeInit()) glGetProgramivNV(id, pname, params);} GLEEPFNGLGETPROGRAMIVNVPROC GLeeFuncPtr_glGetProgramivNV=GLee_Lazy_glGetProgramivNV; #endif #ifndef GLEE_C_DEFINED_glGetProgramStringNV #define GLEE_C_DEFINED_glGetProgramStringNV void __stdcall GLee_Lazy_glGetProgramStringNV(GLuint id, GLenum pname, GLubyte * program) {if (GLeeInit()) glGetProgramStringNV(id, pname, program);} GLEEPFNGLGETPROGRAMSTRINGNVPROC GLeeFuncPtr_glGetProgramStringNV=GLee_Lazy_glGetProgramStringNV; #endif #ifndef GLEE_C_DEFINED_glGetTrackMatrixivNV #define GLEE_C_DEFINED_glGetTrackMatrixivNV void __stdcall GLee_Lazy_glGetTrackMatrixivNV(GLenum target, GLuint address, GLenum pname, GLint * params) {if (GLeeInit()) glGetTrackMatrixivNV(target, address, pname, params);} GLEEPFNGLGETTRACKMATRIXIVNVPROC GLeeFuncPtr_glGetTrackMatrixivNV=GLee_Lazy_glGetTrackMatrixivNV; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribdvNV #define GLEE_C_DEFINED_glGetVertexAttribdvNV void __stdcall GLee_Lazy_glGetVertexAttribdvNV(GLuint index, GLenum pname, GLdouble * params) {if (GLeeInit()) glGetVertexAttribdvNV(index, pname, params);} GLEEPFNGLGETVERTEXATTRIBDVNVPROC GLeeFuncPtr_glGetVertexAttribdvNV=GLee_Lazy_glGetVertexAttribdvNV; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribfvNV #define GLEE_C_DEFINED_glGetVertexAttribfvNV void __stdcall GLee_Lazy_glGetVertexAttribfvNV(GLuint index, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetVertexAttribfvNV(index, pname, params);} GLEEPFNGLGETVERTEXATTRIBFVNVPROC GLeeFuncPtr_glGetVertexAttribfvNV=GLee_Lazy_glGetVertexAttribfvNV; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribivNV #define GLEE_C_DEFINED_glGetVertexAttribivNV void __stdcall GLee_Lazy_glGetVertexAttribivNV(GLuint index, GLenum pname, GLint * params) {if (GLeeInit()) glGetVertexAttribivNV(index, pname, params);} GLEEPFNGLGETVERTEXATTRIBIVNVPROC GLeeFuncPtr_glGetVertexAttribivNV=GLee_Lazy_glGetVertexAttribivNV; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribPointervNV #define GLEE_C_DEFINED_glGetVertexAttribPointervNV void __stdcall GLee_Lazy_glGetVertexAttribPointervNV(GLuint index, GLenum pname, GLvoid* * pointer) {if (GLeeInit()) glGetVertexAttribPointervNV(index, pname, pointer);} GLEEPFNGLGETVERTEXATTRIBPOINTERVNVPROC GLeeFuncPtr_glGetVertexAttribPointervNV=GLee_Lazy_glGetVertexAttribPointervNV; #endif #ifndef GLEE_C_DEFINED_glIsProgramNV #define GLEE_C_DEFINED_glIsProgramNV GLboolean __stdcall GLee_Lazy_glIsProgramNV(GLuint id) {if (GLeeInit()) return glIsProgramNV(id); return (GLboolean)0;} GLEEPFNGLISPROGRAMNVPROC GLeeFuncPtr_glIsProgramNV=GLee_Lazy_glIsProgramNV; #endif #ifndef GLEE_C_DEFINED_glLoadProgramNV #define GLEE_C_DEFINED_glLoadProgramNV void __stdcall GLee_Lazy_glLoadProgramNV(GLenum target, GLuint id, GLsizei len, const GLubyte * program) {if (GLeeInit()) glLoadProgramNV(target, id, len, program);} GLEEPFNGLLOADPROGRAMNVPROC GLeeFuncPtr_glLoadProgramNV=GLee_Lazy_glLoadProgramNV; #endif #ifndef GLEE_C_DEFINED_glProgramParameter4dNV #define GLEE_C_DEFINED_glProgramParameter4dNV void __stdcall GLee_Lazy_glProgramParameter4dNV(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) {if (GLeeInit()) glProgramParameter4dNV(target, index, x, y, z, w);} GLEEPFNGLPROGRAMPARAMETER4DNVPROC GLeeFuncPtr_glProgramParameter4dNV=GLee_Lazy_glProgramParameter4dNV; #endif #ifndef GLEE_C_DEFINED_glProgramParameter4dvNV #define GLEE_C_DEFINED_glProgramParameter4dvNV void __stdcall GLee_Lazy_glProgramParameter4dvNV(GLenum target, GLuint index, const GLdouble * v) {if (GLeeInit()) glProgramParameter4dvNV(target, index, v);} GLEEPFNGLPROGRAMPARAMETER4DVNVPROC GLeeFuncPtr_glProgramParameter4dvNV=GLee_Lazy_glProgramParameter4dvNV; #endif #ifndef GLEE_C_DEFINED_glProgramParameter4fNV #define GLEE_C_DEFINED_glProgramParameter4fNV void __stdcall GLee_Lazy_glProgramParameter4fNV(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {if (GLeeInit()) glProgramParameter4fNV(target, index, x, y, z, w);} GLEEPFNGLPROGRAMPARAMETER4FNVPROC GLeeFuncPtr_glProgramParameter4fNV=GLee_Lazy_glProgramParameter4fNV; #endif #ifndef GLEE_C_DEFINED_glProgramParameter4fvNV #define GLEE_C_DEFINED_glProgramParameter4fvNV void __stdcall GLee_Lazy_glProgramParameter4fvNV(GLenum target, GLuint index, const GLfloat * v) {if (GLeeInit()) glProgramParameter4fvNV(target, index, v);} GLEEPFNGLPROGRAMPARAMETER4FVNVPROC GLeeFuncPtr_glProgramParameter4fvNV=GLee_Lazy_glProgramParameter4fvNV; #endif #ifndef GLEE_C_DEFINED_glProgramParameters4dvNV #define GLEE_C_DEFINED_glProgramParameters4dvNV void __stdcall GLee_Lazy_glProgramParameters4dvNV(GLenum target, GLuint index, GLsizei count, const GLdouble * v) {if (GLeeInit()) glProgramParameters4dvNV(target, index, count, v);} GLEEPFNGLPROGRAMPARAMETERS4DVNVPROC GLeeFuncPtr_glProgramParameters4dvNV=GLee_Lazy_glProgramParameters4dvNV; #endif #ifndef GLEE_C_DEFINED_glProgramParameters4fvNV #define GLEE_C_DEFINED_glProgramParameters4fvNV void __stdcall GLee_Lazy_glProgramParameters4fvNV(GLenum target, GLuint index, GLsizei count, const GLfloat * v) {if (GLeeInit()) glProgramParameters4fvNV(target, index, count, v);} GLEEPFNGLPROGRAMPARAMETERS4FVNVPROC GLeeFuncPtr_glProgramParameters4fvNV=GLee_Lazy_glProgramParameters4fvNV; #endif #ifndef GLEE_C_DEFINED_glRequestResidentProgramsNV #define GLEE_C_DEFINED_glRequestResidentProgramsNV void __stdcall GLee_Lazy_glRequestResidentProgramsNV(GLsizei n, const GLuint * programs) {if (GLeeInit()) glRequestResidentProgramsNV(n, programs);} GLEEPFNGLREQUESTRESIDENTPROGRAMSNVPROC GLeeFuncPtr_glRequestResidentProgramsNV=GLee_Lazy_glRequestResidentProgramsNV; #endif #ifndef GLEE_C_DEFINED_glTrackMatrixNV #define GLEE_C_DEFINED_glTrackMatrixNV void __stdcall GLee_Lazy_glTrackMatrixNV(GLenum target, GLuint address, GLenum matrix, GLenum transform) {if (GLeeInit()) glTrackMatrixNV(target, address, matrix, transform);} GLEEPFNGLTRACKMATRIXNVPROC GLeeFuncPtr_glTrackMatrixNV=GLee_Lazy_glTrackMatrixNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribPointerNV #define GLEE_C_DEFINED_glVertexAttribPointerNV void __stdcall GLee_Lazy_glVertexAttribPointerNV(GLuint index, GLint fsize, GLenum type, GLsizei stride, const GLvoid * pointer) {if (GLeeInit()) glVertexAttribPointerNV(index, fsize, type, stride, pointer);} GLEEPFNGLVERTEXATTRIBPOINTERNVPROC GLeeFuncPtr_glVertexAttribPointerNV=GLee_Lazy_glVertexAttribPointerNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1dNV #define GLEE_C_DEFINED_glVertexAttrib1dNV void __stdcall GLee_Lazy_glVertexAttrib1dNV(GLuint index, GLdouble x) {if (GLeeInit()) glVertexAttrib1dNV(index, x);} GLEEPFNGLVERTEXATTRIB1DNVPROC GLeeFuncPtr_glVertexAttrib1dNV=GLee_Lazy_glVertexAttrib1dNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1dvNV #define GLEE_C_DEFINED_glVertexAttrib1dvNV void __stdcall GLee_Lazy_glVertexAttrib1dvNV(GLuint index, const GLdouble * v) {if (GLeeInit()) glVertexAttrib1dvNV(index, v);} GLEEPFNGLVERTEXATTRIB1DVNVPROC GLeeFuncPtr_glVertexAttrib1dvNV=GLee_Lazy_glVertexAttrib1dvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1fNV #define GLEE_C_DEFINED_glVertexAttrib1fNV void __stdcall GLee_Lazy_glVertexAttrib1fNV(GLuint index, GLfloat x) {if (GLeeInit()) glVertexAttrib1fNV(index, x);} GLEEPFNGLVERTEXATTRIB1FNVPROC GLeeFuncPtr_glVertexAttrib1fNV=GLee_Lazy_glVertexAttrib1fNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1fvNV #define GLEE_C_DEFINED_glVertexAttrib1fvNV void __stdcall GLee_Lazy_glVertexAttrib1fvNV(GLuint index, const GLfloat * v) {if (GLeeInit()) glVertexAttrib1fvNV(index, v);} GLEEPFNGLVERTEXATTRIB1FVNVPROC GLeeFuncPtr_glVertexAttrib1fvNV=GLee_Lazy_glVertexAttrib1fvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1sNV #define GLEE_C_DEFINED_glVertexAttrib1sNV void __stdcall GLee_Lazy_glVertexAttrib1sNV(GLuint index, GLshort x) {if (GLeeInit()) glVertexAttrib1sNV(index, x);} GLEEPFNGLVERTEXATTRIB1SNVPROC GLeeFuncPtr_glVertexAttrib1sNV=GLee_Lazy_glVertexAttrib1sNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1svNV #define GLEE_C_DEFINED_glVertexAttrib1svNV void __stdcall GLee_Lazy_glVertexAttrib1svNV(GLuint index, const GLshort * v) {if (GLeeInit()) glVertexAttrib1svNV(index, v);} GLEEPFNGLVERTEXATTRIB1SVNVPROC GLeeFuncPtr_glVertexAttrib1svNV=GLee_Lazy_glVertexAttrib1svNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2dNV #define GLEE_C_DEFINED_glVertexAttrib2dNV void __stdcall GLee_Lazy_glVertexAttrib2dNV(GLuint index, GLdouble x, GLdouble y) {if (GLeeInit()) glVertexAttrib2dNV(index, x, y);} GLEEPFNGLVERTEXATTRIB2DNVPROC GLeeFuncPtr_glVertexAttrib2dNV=GLee_Lazy_glVertexAttrib2dNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2dvNV #define GLEE_C_DEFINED_glVertexAttrib2dvNV void __stdcall GLee_Lazy_glVertexAttrib2dvNV(GLuint index, const GLdouble * v) {if (GLeeInit()) glVertexAttrib2dvNV(index, v);} GLEEPFNGLVERTEXATTRIB2DVNVPROC GLeeFuncPtr_glVertexAttrib2dvNV=GLee_Lazy_glVertexAttrib2dvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2fNV #define GLEE_C_DEFINED_glVertexAttrib2fNV void __stdcall GLee_Lazy_glVertexAttrib2fNV(GLuint index, GLfloat x, GLfloat y) {if (GLeeInit()) glVertexAttrib2fNV(index, x, y);} GLEEPFNGLVERTEXATTRIB2FNVPROC GLeeFuncPtr_glVertexAttrib2fNV=GLee_Lazy_glVertexAttrib2fNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2fvNV #define GLEE_C_DEFINED_glVertexAttrib2fvNV void __stdcall GLee_Lazy_glVertexAttrib2fvNV(GLuint index, const GLfloat * v) {if (GLeeInit()) glVertexAttrib2fvNV(index, v);} GLEEPFNGLVERTEXATTRIB2FVNVPROC GLeeFuncPtr_glVertexAttrib2fvNV=GLee_Lazy_glVertexAttrib2fvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2sNV #define GLEE_C_DEFINED_glVertexAttrib2sNV void __stdcall GLee_Lazy_glVertexAttrib2sNV(GLuint index, GLshort x, GLshort y) {if (GLeeInit()) glVertexAttrib2sNV(index, x, y);} GLEEPFNGLVERTEXATTRIB2SNVPROC GLeeFuncPtr_glVertexAttrib2sNV=GLee_Lazy_glVertexAttrib2sNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2svNV #define GLEE_C_DEFINED_glVertexAttrib2svNV void __stdcall GLee_Lazy_glVertexAttrib2svNV(GLuint index, const GLshort * v) {if (GLeeInit()) glVertexAttrib2svNV(index, v);} GLEEPFNGLVERTEXATTRIB2SVNVPROC GLeeFuncPtr_glVertexAttrib2svNV=GLee_Lazy_glVertexAttrib2svNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3dNV #define GLEE_C_DEFINED_glVertexAttrib3dNV void __stdcall GLee_Lazy_glVertexAttrib3dNV(GLuint index, GLdouble x, GLdouble y, GLdouble z) {if (GLeeInit()) glVertexAttrib3dNV(index, x, y, z);} GLEEPFNGLVERTEXATTRIB3DNVPROC GLeeFuncPtr_glVertexAttrib3dNV=GLee_Lazy_glVertexAttrib3dNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3dvNV #define GLEE_C_DEFINED_glVertexAttrib3dvNV void __stdcall GLee_Lazy_glVertexAttrib3dvNV(GLuint index, const GLdouble * v) {if (GLeeInit()) glVertexAttrib3dvNV(index, v);} GLEEPFNGLVERTEXATTRIB3DVNVPROC GLeeFuncPtr_glVertexAttrib3dvNV=GLee_Lazy_glVertexAttrib3dvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3fNV #define GLEE_C_DEFINED_glVertexAttrib3fNV void __stdcall GLee_Lazy_glVertexAttrib3fNV(GLuint index, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glVertexAttrib3fNV(index, x, y, z);} GLEEPFNGLVERTEXATTRIB3FNVPROC GLeeFuncPtr_glVertexAttrib3fNV=GLee_Lazy_glVertexAttrib3fNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3fvNV #define GLEE_C_DEFINED_glVertexAttrib3fvNV void __stdcall GLee_Lazy_glVertexAttrib3fvNV(GLuint index, const GLfloat * v) {if (GLeeInit()) glVertexAttrib3fvNV(index, v);} GLEEPFNGLVERTEXATTRIB3FVNVPROC GLeeFuncPtr_glVertexAttrib3fvNV=GLee_Lazy_glVertexAttrib3fvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3sNV #define GLEE_C_DEFINED_glVertexAttrib3sNV void __stdcall GLee_Lazy_glVertexAttrib3sNV(GLuint index, GLshort x, GLshort y, GLshort z) {if (GLeeInit()) glVertexAttrib3sNV(index, x, y, z);} GLEEPFNGLVERTEXATTRIB3SNVPROC GLeeFuncPtr_glVertexAttrib3sNV=GLee_Lazy_glVertexAttrib3sNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3svNV #define GLEE_C_DEFINED_glVertexAttrib3svNV void __stdcall GLee_Lazy_glVertexAttrib3svNV(GLuint index, const GLshort * v) {if (GLeeInit()) glVertexAttrib3svNV(index, v);} GLEEPFNGLVERTEXATTRIB3SVNVPROC GLeeFuncPtr_glVertexAttrib3svNV=GLee_Lazy_glVertexAttrib3svNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4dNV #define GLEE_C_DEFINED_glVertexAttrib4dNV void __stdcall GLee_Lazy_glVertexAttrib4dNV(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) {if (GLeeInit()) glVertexAttrib4dNV(index, x, y, z, w);} GLEEPFNGLVERTEXATTRIB4DNVPROC GLeeFuncPtr_glVertexAttrib4dNV=GLee_Lazy_glVertexAttrib4dNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4dvNV #define GLEE_C_DEFINED_glVertexAttrib4dvNV void __stdcall GLee_Lazy_glVertexAttrib4dvNV(GLuint index, const GLdouble * v) {if (GLeeInit()) glVertexAttrib4dvNV(index, v);} GLEEPFNGLVERTEXATTRIB4DVNVPROC GLeeFuncPtr_glVertexAttrib4dvNV=GLee_Lazy_glVertexAttrib4dvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4fNV #define GLEE_C_DEFINED_glVertexAttrib4fNV void __stdcall GLee_Lazy_glVertexAttrib4fNV(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {if (GLeeInit()) glVertexAttrib4fNV(index, x, y, z, w);} GLEEPFNGLVERTEXATTRIB4FNVPROC GLeeFuncPtr_glVertexAttrib4fNV=GLee_Lazy_glVertexAttrib4fNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4fvNV #define GLEE_C_DEFINED_glVertexAttrib4fvNV void __stdcall GLee_Lazy_glVertexAttrib4fvNV(GLuint index, const GLfloat * v) {if (GLeeInit()) glVertexAttrib4fvNV(index, v);} GLEEPFNGLVERTEXATTRIB4FVNVPROC GLeeFuncPtr_glVertexAttrib4fvNV=GLee_Lazy_glVertexAttrib4fvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4sNV #define GLEE_C_DEFINED_glVertexAttrib4sNV void __stdcall GLee_Lazy_glVertexAttrib4sNV(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w) {if (GLeeInit()) glVertexAttrib4sNV(index, x, y, z, w);} GLEEPFNGLVERTEXATTRIB4SNVPROC GLeeFuncPtr_glVertexAttrib4sNV=GLee_Lazy_glVertexAttrib4sNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4svNV #define GLEE_C_DEFINED_glVertexAttrib4svNV void __stdcall GLee_Lazy_glVertexAttrib4svNV(GLuint index, const GLshort * v) {if (GLeeInit()) glVertexAttrib4svNV(index, v);} GLEEPFNGLVERTEXATTRIB4SVNVPROC GLeeFuncPtr_glVertexAttrib4svNV=GLee_Lazy_glVertexAttrib4svNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4ubNV #define GLEE_C_DEFINED_glVertexAttrib4ubNV void __stdcall GLee_Lazy_glVertexAttrib4ubNV(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w) {if (GLeeInit()) glVertexAttrib4ubNV(index, x, y, z, w);} GLEEPFNGLVERTEXATTRIB4UBNVPROC GLeeFuncPtr_glVertexAttrib4ubNV=GLee_Lazy_glVertexAttrib4ubNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4ubvNV #define GLEE_C_DEFINED_glVertexAttrib4ubvNV void __stdcall GLee_Lazy_glVertexAttrib4ubvNV(GLuint index, const GLubyte * v) {if (GLeeInit()) glVertexAttrib4ubvNV(index, v);} GLEEPFNGLVERTEXATTRIB4UBVNVPROC GLeeFuncPtr_glVertexAttrib4ubvNV=GLee_Lazy_glVertexAttrib4ubvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribs1dvNV #define GLEE_C_DEFINED_glVertexAttribs1dvNV void __stdcall GLee_Lazy_glVertexAttribs1dvNV(GLuint index, GLsizei count, const GLdouble * v) {if (GLeeInit()) glVertexAttribs1dvNV(index, count, v);} GLEEPFNGLVERTEXATTRIBS1DVNVPROC GLeeFuncPtr_glVertexAttribs1dvNV=GLee_Lazy_glVertexAttribs1dvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribs1fvNV #define GLEE_C_DEFINED_glVertexAttribs1fvNV void __stdcall GLee_Lazy_glVertexAttribs1fvNV(GLuint index, GLsizei count, const GLfloat * v) {if (GLeeInit()) glVertexAttribs1fvNV(index, count, v);} GLEEPFNGLVERTEXATTRIBS1FVNVPROC GLeeFuncPtr_glVertexAttribs1fvNV=GLee_Lazy_glVertexAttribs1fvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribs1svNV #define GLEE_C_DEFINED_glVertexAttribs1svNV void __stdcall GLee_Lazy_glVertexAttribs1svNV(GLuint index, GLsizei count, const GLshort * v) {if (GLeeInit()) glVertexAttribs1svNV(index, count, v);} GLEEPFNGLVERTEXATTRIBS1SVNVPROC GLeeFuncPtr_glVertexAttribs1svNV=GLee_Lazy_glVertexAttribs1svNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribs2dvNV #define GLEE_C_DEFINED_glVertexAttribs2dvNV void __stdcall GLee_Lazy_glVertexAttribs2dvNV(GLuint index, GLsizei count, const GLdouble * v) {if (GLeeInit()) glVertexAttribs2dvNV(index, count, v);} GLEEPFNGLVERTEXATTRIBS2DVNVPROC GLeeFuncPtr_glVertexAttribs2dvNV=GLee_Lazy_glVertexAttribs2dvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribs2fvNV #define GLEE_C_DEFINED_glVertexAttribs2fvNV void __stdcall GLee_Lazy_glVertexAttribs2fvNV(GLuint index, GLsizei count, const GLfloat * v) {if (GLeeInit()) glVertexAttribs2fvNV(index, count, v);} GLEEPFNGLVERTEXATTRIBS2FVNVPROC GLeeFuncPtr_glVertexAttribs2fvNV=GLee_Lazy_glVertexAttribs2fvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribs2svNV #define GLEE_C_DEFINED_glVertexAttribs2svNV void __stdcall GLee_Lazy_glVertexAttribs2svNV(GLuint index, GLsizei count, const GLshort * v) {if (GLeeInit()) glVertexAttribs2svNV(index, count, v);} GLEEPFNGLVERTEXATTRIBS2SVNVPROC GLeeFuncPtr_glVertexAttribs2svNV=GLee_Lazy_glVertexAttribs2svNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribs3dvNV #define GLEE_C_DEFINED_glVertexAttribs3dvNV void __stdcall GLee_Lazy_glVertexAttribs3dvNV(GLuint index, GLsizei count, const GLdouble * v) {if (GLeeInit()) glVertexAttribs3dvNV(index, count, v);} GLEEPFNGLVERTEXATTRIBS3DVNVPROC GLeeFuncPtr_glVertexAttribs3dvNV=GLee_Lazy_glVertexAttribs3dvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribs3fvNV #define GLEE_C_DEFINED_glVertexAttribs3fvNV void __stdcall GLee_Lazy_glVertexAttribs3fvNV(GLuint index, GLsizei count, const GLfloat * v) {if (GLeeInit()) glVertexAttribs3fvNV(index, count, v);} GLEEPFNGLVERTEXATTRIBS3FVNVPROC GLeeFuncPtr_glVertexAttribs3fvNV=GLee_Lazy_glVertexAttribs3fvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribs3svNV #define GLEE_C_DEFINED_glVertexAttribs3svNV void __stdcall GLee_Lazy_glVertexAttribs3svNV(GLuint index, GLsizei count, const GLshort * v) {if (GLeeInit()) glVertexAttribs3svNV(index, count, v);} GLEEPFNGLVERTEXATTRIBS3SVNVPROC GLeeFuncPtr_glVertexAttribs3svNV=GLee_Lazy_glVertexAttribs3svNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribs4dvNV #define GLEE_C_DEFINED_glVertexAttribs4dvNV void __stdcall GLee_Lazy_glVertexAttribs4dvNV(GLuint index, GLsizei count, const GLdouble * v) {if (GLeeInit()) glVertexAttribs4dvNV(index, count, v);} GLEEPFNGLVERTEXATTRIBS4DVNVPROC GLeeFuncPtr_glVertexAttribs4dvNV=GLee_Lazy_glVertexAttribs4dvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribs4fvNV #define GLEE_C_DEFINED_glVertexAttribs4fvNV void __stdcall GLee_Lazy_glVertexAttribs4fvNV(GLuint index, GLsizei count, const GLfloat * v) {if (GLeeInit()) glVertexAttribs4fvNV(index, count, v);} GLEEPFNGLVERTEXATTRIBS4FVNVPROC GLeeFuncPtr_glVertexAttribs4fvNV=GLee_Lazy_glVertexAttribs4fvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribs4svNV #define GLEE_C_DEFINED_glVertexAttribs4svNV void __stdcall GLee_Lazy_glVertexAttribs4svNV(GLuint index, GLsizei count, const GLshort * v) {if (GLeeInit()) glVertexAttribs4svNV(index, count, v);} GLEEPFNGLVERTEXATTRIBS4SVNVPROC GLeeFuncPtr_glVertexAttribs4svNV=GLee_Lazy_glVertexAttribs4svNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribs4ubvNV #define GLEE_C_DEFINED_glVertexAttribs4ubvNV void __stdcall GLee_Lazy_glVertexAttribs4ubvNV(GLuint index, GLsizei count, const GLubyte * v) {if (GLeeInit()) glVertexAttribs4ubvNV(index, count, v);} GLEEPFNGLVERTEXATTRIBS4UBVNVPROC GLeeFuncPtr_glVertexAttribs4ubvNV=GLee_Lazy_glVertexAttribs4ubvNV; #endif #endif /* GL_SGIX_texture_coordinate_clamp */ #ifdef __GLEE_GL_SGIX_texture_coordinate_clamp #endif /* GL_SGIX_scalebias_hint */ #ifdef __GLEE_GL_SGIX_scalebias_hint #endif /* GL_OML_interlace */ #ifdef __GLEE_GL_OML_interlace #endif /* GL_OML_subsample */ #ifdef __GLEE_GL_OML_subsample #endif /* GL_OML_resample */ #ifdef __GLEE_GL_OML_resample #endif /* GL_NV_copy_depth_to_color */ #ifdef __GLEE_GL_NV_copy_depth_to_color #endif /* GL_ATI_envmap_bumpmap */ #ifdef __GLEE_GL_ATI_envmap_bumpmap #ifndef GLEE_C_DEFINED_glTexBumpParameterivATI #define GLEE_C_DEFINED_glTexBumpParameterivATI void __stdcall GLee_Lazy_glTexBumpParameterivATI(GLenum pname, const GLint * param) {if (GLeeInit()) glTexBumpParameterivATI(pname, param);} GLEEPFNGLTEXBUMPPARAMETERIVATIPROC GLeeFuncPtr_glTexBumpParameterivATI=GLee_Lazy_glTexBumpParameterivATI; #endif #ifndef GLEE_C_DEFINED_glTexBumpParameterfvATI #define GLEE_C_DEFINED_glTexBumpParameterfvATI void __stdcall GLee_Lazy_glTexBumpParameterfvATI(GLenum pname, const GLfloat * param) {if (GLeeInit()) glTexBumpParameterfvATI(pname, param);} GLEEPFNGLTEXBUMPPARAMETERFVATIPROC GLeeFuncPtr_glTexBumpParameterfvATI=GLee_Lazy_glTexBumpParameterfvATI; #endif #ifndef GLEE_C_DEFINED_glGetTexBumpParameterivATI #define GLEE_C_DEFINED_glGetTexBumpParameterivATI void __stdcall GLee_Lazy_glGetTexBumpParameterivATI(GLenum pname, GLint * param) {if (GLeeInit()) glGetTexBumpParameterivATI(pname, param);} GLEEPFNGLGETTEXBUMPPARAMETERIVATIPROC GLeeFuncPtr_glGetTexBumpParameterivATI=GLee_Lazy_glGetTexBumpParameterivATI; #endif #ifndef GLEE_C_DEFINED_glGetTexBumpParameterfvATI #define GLEE_C_DEFINED_glGetTexBumpParameterfvATI void __stdcall GLee_Lazy_glGetTexBumpParameterfvATI(GLenum pname, GLfloat * param) {if (GLeeInit()) glGetTexBumpParameterfvATI(pname, param);} GLEEPFNGLGETTEXBUMPPARAMETERFVATIPROC GLeeFuncPtr_glGetTexBumpParameterfvATI=GLee_Lazy_glGetTexBumpParameterfvATI; #endif #endif /* GL_ATI_fragment_shader */ #ifdef __GLEE_GL_ATI_fragment_shader #ifndef GLEE_C_DEFINED_glGenFragmentShadersATI #define GLEE_C_DEFINED_glGenFragmentShadersATI GLuint __stdcall GLee_Lazy_glGenFragmentShadersATI(GLuint range) {if (GLeeInit()) return glGenFragmentShadersATI(range); return (GLuint)0;} GLEEPFNGLGENFRAGMENTSHADERSATIPROC GLeeFuncPtr_glGenFragmentShadersATI=GLee_Lazy_glGenFragmentShadersATI; #endif #ifndef GLEE_C_DEFINED_glBindFragmentShaderATI #define GLEE_C_DEFINED_glBindFragmentShaderATI void __stdcall GLee_Lazy_glBindFragmentShaderATI(GLuint id) {if (GLeeInit()) glBindFragmentShaderATI(id);} GLEEPFNGLBINDFRAGMENTSHADERATIPROC GLeeFuncPtr_glBindFragmentShaderATI=GLee_Lazy_glBindFragmentShaderATI; #endif #ifndef GLEE_C_DEFINED_glDeleteFragmentShaderATI #define GLEE_C_DEFINED_glDeleteFragmentShaderATI void __stdcall GLee_Lazy_glDeleteFragmentShaderATI(GLuint id) {if (GLeeInit()) glDeleteFragmentShaderATI(id);} GLEEPFNGLDELETEFRAGMENTSHADERATIPROC GLeeFuncPtr_glDeleteFragmentShaderATI=GLee_Lazy_glDeleteFragmentShaderATI; #endif #ifndef GLEE_C_DEFINED_glBeginFragmentShaderATI #define GLEE_C_DEFINED_glBeginFragmentShaderATI void __stdcall GLee_Lazy_glBeginFragmentShaderATI(void) {if (GLeeInit()) glBeginFragmentShaderATI();} GLEEPFNGLBEGINFRAGMENTSHADERATIPROC GLeeFuncPtr_glBeginFragmentShaderATI=GLee_Lazy_glBeginFragmentShaderATI; #endif #ifndef GLEE_C_DEFINED_glEndFragmentShaderATI #define GLEE_C_DEFINED_glEndFragmentShaderATI void __stdcall GLee_Lazy_glEndFragmentShaderATI(void) {if (GLeeInit()) glEndFragmentShaderATI();} GLEEPFNGLENDFRAGMENTSHADERATIPROC GLeeFuncPtr_glEndFragmentShaderATI=GLee_Lazy_glEndFragmentShaderATI; #endif #ifndef GLEE_C_DEFINED_glPassTexCoordATI #define GLEE_C_DEFINED_glPassTexCoordATI void __stdcall GLee_Lazy_glPassTexCoordATI(GLuint dst, GLuint coord, GLenum swizzle) {if (GLeeInit()) glPassTexCoordATI(dst, coord, swizzle);} GLEEPFNGLPASSTEXCOORDATIPROC GLeeFuncPtr_glPassTexCoordATI=GLee_Lazy_glPassTexCoordATI; #endif #ifndef GLEE_C_DEFINED_glSampleMapATI #define GLEE_C_DEFINED_glSampleMapATI void __stdcall GLee_Lazy_glSampleMapATI(GLuint dst, GLuint interp, GLenum swizzle) {if (GLeeInit()) glSampleMapATI(dst, interp, swizzle);} GLEEPFNGLSAMPLEMAPATIPROC GLeeFuncPtr_glSampleMapATI=GLee_Lazy_glSampleMapATI; #endif #ifndef GLEE_C_DEFINED_glColorFragmentOp1ATI #define GLEE_C_DEFINED_glColorFragmentOp1ATI void __stdcall GLee_Lazy_glColorFragmentOp1ATI(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod) {if (GLeeInit()) glColorFragmentOp1ATI(op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod);} GLEEPFNGLCOLORFRAGMENTOP1ATIPROC GLeeFuncPtr_glColorFragmentOp1ATI=GLee_Lazy_glColorFragmentOp1ATI; #endif #ifndef GLEE_C_DEFINED_glColorFragmentOp2ATI #define GLEE_C_DEFINED_glColorFragmentOp2ATI void __stdcall GLee_Lazy_glColorFragmentOp2ATI(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod) {if (GLeeInit()) glColorFragmentOp2ATI(op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod);} GLEEPFNGLCOLORFRAGMENTOP2ATIPROC GLeeFuncPtr_glColorFragmentOp2ATI=GLee_Lazy_glColorFragmentOp2ATI; #endif #ifndef GLEE_C_DEFINED_glColorFragmentOp3ATI #define GLEE_C_DEFINED_glColorFragmentOp3ATI void __stdcall GLee_Lazy_glColorFragmentOp3ATI(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod) {if (GLeeInit()) glColorFragmentOp3ATI(op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod, arg3, arg3Rep, arg3Mod);} GLEEPFNGLCOLORFRAGMENTOP3ATIPROC GLeeFuncPtr_glColorFragmentOp3ATI=GLee_Lazy_glColorFragmentOp3ATI; #endif #ifndef GLEE_C_DEFINED_glAlphaFragmentOp1ATI #define GLEE_C_DEFINED_glAlphaFragmentOp1ATI void __stdcall GLee_Lazy_glAlphaFragmentOp1ATI(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod) {if (GLeeInit()) glAlphaFragmentOp1ATI(op, dst, dstMod, arg1, arg1Rep, arg1Mod);} GLEEPFNGLALPHAFRAGMENTOP1ATIPROC GLeeFuncPtr_glAlphaFragmentOp1ATI=GLee_Lazy_glAlphaFragmentOp1ATI; #endif #ifndef GLEE_C_DEFINED_glAlphaFragmentOp2ATI #define GLEE_C_DEFINED_glAlphaFragmentOp2ATI void __stdcall GLee_Lazy_glAlphaFragmentOp2ATI(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod) {if (GLeeInit()) glAlphaFragmentOp2ATI(op, dst, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod);} GLEEPFNGLALPHAFRAGMENTOP2ATIPROC GLeeFuncPtr_glAlphaFragmentOp2ATI=GLee_Lazy_glAlphaFragmentOp2ATI; #endif #ifndef GLEE_C_DEFINED_glAlphaFragmentOp3ATI #define GLEE_C_DEFINED_glAlphaFragmentOp3ATI void __stdcall GLee_Lazy_glAlphaFragmentOp3ATI(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod) {if (GLeeInit()) glAlphaFragmentOp3ATI(op, dst, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod, arg3, arg3Rep, arg3Mod);} GLEEPFNGLALPHAFRAGMENTOP3ATIPROC GLeeFuncPtr_glAlphaFragmentOp3ATI=GLee_Lazy_glAlphaFragmentOp3ATI; #endif #ifndef GLEE_C_DEFINED_glSetFragmentShaderConstantATI #define GLEE_C_DEFINED_glSetFragmentShaderConstantATI void __stdcall GLee_Lazy_glSetFragmentShaderConstantATI(GLuint dst, const GLfloat * value) {if (GLeeInit()) glSetFragmentShaderConstantATI(dst, value);} GLEEPFNGLSETFRAGMENTSHADERCONSTANTATIPROC GLeeFuncPtr_glSetFragmentShaderConstantATI=GLee_Lazy_glSetFragmentShaderConstantATI; #endif #endif /* GL_ATI_pn_triangles */ #ifdef __GLEE_GL_ATI_pn_triangles #ifndef GLEE_C_DEFINED_glPNTrianglesiATI #define GLEE_C_DEFINED_glPNTrianglesiATI void __stdcall GLee_Lazy_glPNTrianglesiATI(GLenum pname, GLint param) {if (GLeeInit()) glPNTrianglesiATI(pname, param);} GLEEPFNGLPNTRIANGLESIATIPROC GLeeFuncPtr_glPNTrianglesiATI=GLee_Lazy_glPNTrianglesiATI; #endif #ifndef GLEE_C_DEFINED_glPNTrianglesfATI #define GLEE_C_DEFINED_glPNTrianglesfATI void __stdcall GLee_Lazy_glPNTrianglesfATI(GLenum pname, GLfloat param) {if (GLeeInit()) glPNTrianglesfATI(pname, param);} GLEEPFNGLPNTRIANGLESFATIPROC GLeeFuncPtr_glPNTrianglesfATI=GLee_Lazy_glPNTrianglesfATI; #endif #endif /* GL_ATI_vertex_array_object */ #ifdef __GLEE_GL_ATI_vertex_array_object #ifndef GLEE_C_DEFINED_glNewObjectBufferATI #define GLEE_C_DEFINED_glNewObjectBufferATI GLuint __stdcall GLee_Lazy_glNewObjectBufferATI(GLsizei size, const GLvoid * pointer, GLenum usage) {if (GLeeInit()) return glNewObjectBufferATI(size, pointer, usage); return (GLuint)0;} GLEEPFNGLNEWOBJECTBUFFERATIPROC GLeeFuncPtr_glNewObjectBufferATI=GLee_Lazy_glNewObjectBufferATI; #endif #ifndef GLEE_C_DEFINED_glIsObjectBufferATI #define GLEE_C_DEFINED_glIsObjectBufferATI GLboolean __stdcall GLee_Lazy_glIsObjectBufferATI(GLuint buffer) {if (GLeeInit()) return glIsObjectBufferATI(buffer); return (GLboolean)0;} GLEEPFNGLISOBJECTBUFFERATIPROC GLeeFuncPtr_glIsObjectBufferATI=GLee_Lazy_glIsObjectBufferATI; #endif #ifndef GLEE_C_DEFINED_glUpdateObjectBufferATI #define GLEE_C_DEFINED_glUpdateObjectBufferATI void __stdcall GLee_Lazy_glUpdateObjectBufferATI(GLuint buffer, GLuint offset, GLsizei size, const GLvoid * pointer, GLenum preserve) {if (GLeeInit()) glUpdateObjectBufferATI(buffer, offset, size, pointer, preserve);} GLEEPFNGLUPDATEOBJECTBUFFERATIPROC GLeeFuncPtr_glUpdateObjectBufferATI=GLee_Lazy_glUpdateObjectBufferATI; #endif #ifndef GLEE_C_DEFINED_glGetObjectBufferfvATI #define GLEE_C_DEFINED_glGetObjectBufferfvATI void __stdcall GLee_Lazy_glGetObjectBufferfvATI(GLuint buffer, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetObjectBufferfvATI(buffer, pname, params);} GLEEPFNGLGETOBJECTBUFFERFVATIPROC GLeeFuncPtr_glGetObjectBufferfvATI=GLee_Lazy_glGetObjectBufferfvATI; #endif #ifndef GLEE_C_DEFINED_glGetObjectBufferivATI #define GLEE_C_DEFINED_glGetObjectBufferivATI void __stdcall GLee_Lazy_glGetObjectBufferivATI(GLuint buffer, GLenum pname, GLint * params) {if (GLeeInit()) glGetObjectBufferivATI(buffer, pname, params);} GLEEPFNGLGETOBJECTBUFFERIVATIPROC GLeeFuncPtr_glGetObjectBufferivATI=GLee_Lazy_glGetObjectBufferivATI; #endif #ifndef GLEE_C_DEFINED_glFreeObjectBufferATI #define GLEE_C_DEFINED_glFreeObjectBufferATI void __stdcall GLee_Lazy_glFreeObjectBufferATI(GLuint buffer) {if (GLeeInit()) glFreeObjectBufferATI(buffer);} GLEEPFNGLFREEOBJECTBUFFERATIPROC GLeeFuncPtr_glFreeObjectBufferATI=GLee_Lazy_glFreeObjectBufferATI; #endif #ifndef GLEE_C_DEFINED_glArrayObjectATI #define GLEE_C_DEFINED_glArrayObjectATI void __stdcall GLee_Lazy_glArrayObjectATI(GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset) {if (GLeeInit()) glArrayObjectATI(array, size, type, stride, buffer, offset);} GLEEPFNGLARRAYOBJECTATIPROC GLeeFuncPtr_glArrayObjectATI=GLee_Lazy_glArrayObjectATI; #endif #ifndef GLEE_C_DEFINED_glGetArrayObjectfvATI #define GLEE_C_DEFINED_glGetArrayObjectfvATI void __stdcall GLee_Lazy_glGetArrayObjectfvATI(GLenum array, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetArrayObjectfvATI(array, pname, params);} GLEEPFNGLGETARRAYOBJECTFVATIPROC GLeeFuncPtr_glGetArrayObjectfvATI=GLee_Lazy_glGetArrayObjectfvATI; #endif #ifndef GLEE_C_DEFINED_glGetArrayObjectivATI #define GLEE_C_DEFINED_glGetArrayObjectivATI void __stdcall GLee_Lazy_glGetArrayObjectivATI(GLenum array, GLenum pname, GLint * params) {if (GLeeInit()) glGetArrayObjectivATI(array, pname, params);} GLEEPFNGLGETARRAYOBJECTIVATIPROC GLeeFuncPtr_glGetArrayObjectivATI=GLee_Lazy_glGetArrayObjectivATI; #endif #ifndef GLEE_C_DEFINED_glVariantArrayObjectATI #define GLEE_C_DEFINED_glVariantArrayObjectATI void __stdcall GLee_Lazy_glVariantArrayObjectATI(GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset) {if (GLeeInit()) glVariantArrayObjectATI(id, type, stride, buffer, offset);} GLEEPFNGLVARIANTARRAYOBJECTATIPROC GLeeFuncPtr_glVariantArrayObjectATI=GLee_Lazy_glVariantArrayObjectATI; #endif #ifndef GLEE_C_DEFINED_glGetVariantArrayObjectfvATI #define GLEE_C_DEFINED_glGetVariantArrayObjectfvATI void __stdcall GLee_Lazy_glGetVariantArrayObjectfvATI(GLuint id, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetVariantArrayObjectfvATI(id, pname, params);} GLEEPFNGLGETVARIANTARRAYOBJECTFVATIPROC GLeeFuncPtr_glGetVariantArrayObjectfvATI=GLee_Lazy_glGetVariantArrayObjectfvATI; #endif #ifndef GLEE_C_DEFINED_glGetVariantArrayObjectivATI #define GLEE_C_DEFINED_glGetVariantArrayObjectivATI void __stdcall GLee_Lazy_glGetVariantArrayObjectivATI(GLuint id, GLenum pname, GLint * params) {if (GLeeInit()) glGetVariantArrayObjectivATI(id, pname, params);} GLEEPFNGLGETVARIANTARRAYOBJECTIVATIPROC GLeeFuncPtr_glGetVariantArrayObjectivATI=GLee_Lazy_glGetVariantArrayObjectivATI; #endif #endif /* GL_EXT_vertex_shader */ #ifdef __GLEE_GL_EXT_vertex_shader #ifndef GLEE_C_DEFINED_glBeginVertexShaderEXT #define GLEE_C_DEFINED_glBeginVertexShaderEXT void __stdcall GLee_Lazy_glBeginVertexShaderEXT(void) {if (GLeeInit()) glBeginVertexShaderEXT();} GLEEPFNGLBEGINVERTEXSHADEREXTPROC GLeeFuncPtr_glBeginVertexShaderEXT=GLee_Lazy_glBeginVertexShaderEXT; #endif #ifndef GLEE_C_DEFINED_glEndVertexShaderEXT #define GLEE_C_DEFINED_glEndVertexShaderEXT void __stdcall GLee_Lazy_glEndVertexShaderEXT(void) {if (GLeeInit()) glEndVertexShaderEXT();} GLEEPFNGLENDVERTEXSHADEREXTPROC GLeeFuncPtr_glEndVertexShaderEXT=GLee_Lazy_glEndVertexShaderEXT; #endif #ifndef GLEE_C_DEFINED_glBindVertexShaderEXT #define GLEE_C_DEFINED_glBindVertexShaderEXT void __stdcall GLee_Lazy_glBindVertexShaderEXT(GLuint id) {if (GLeeInit()) glBindVertexShaderEXT(id);} GLEEPFNGLBINDVERTEXSHADEREXTPROC GLeeFuncPtr_glBindVertexShaderEXT=GLee_Lazy_glBindVertexShaderEXT; #endif #ifndef GLEE_C_DEFINED_glGenVertexShadersEXT #define GLEE_C_DEFINED_glGenVertexShadersEXT GLuint __stdcall GLee_Lazy_glGenVertexShadersEXT(GLuint range) {if (GLeeInit()) return glGenVertexShadersEXT(range); return (GLuint)0;} GLEEPFNGLGENVERTEXSHADERSEXTPROC GLeeFuncPtr_glGenVertexShadersEXT=GLee_Lazy_glGenVertexShadersEXT; #endif #ifndef GLEE_C_DEFINED_glDeleteVertexShaderEXT #define GLEE_C_DEFINED_glDeleteVertexShaderEXT void __stdcall GLee_Lazy_glDeleteVertexShaderEXT(GLuint id) {if (GLeeInit()) glDeleteVertexShaderEXT(id);} GLEEPFNGLDELETEVERTEXSHADEREXTPROC GLeeFuncPtr_glDeleteVertexShaderEXT=GLee_Lazy_glDeleteVertexShaderEXT; #endif #ifndef GLEE_C_DEFINED_glShaderOp1EXT #define GLEE_C_DEFINED_glShaderOp1EXT void __stdcall GLee_Lazy_glShaderOp1EXT(GLenum op, GLuint res, GLuint arg1) {if (GLeeInit()) glShaderOp1EXT(op, res, arg1);} GLEEPFNGLSHADEROP1EXTPROC GLeeFuncPtr_glShaderOp1EXT=GLee_Lazy_glShaderOp1EXT; #endif #ifndef GLEE_C_DEFINED_glShaderOp2EXT #define GLEE_C_DEFINED_glShaderOp2EXT void __stdcall GLee_Lazy_glShaderOp2EXT(GLenum op, GLuint res, GLuint arg1, GLuint arg2) {if (GLeeInit()) glShaderOp2EXT(op, res, arg1, arg2);} GLEEPFNGLSHADEROP2EXTPROC GLeeFuncPtr_glShaderOp2EXT=GLee_Lazy_glShaderOp2EXT; #endif #ifndef GLEE_C_DEFINED_glShaderOp3EXT #define GLEE_C_DEFINED_glShaderOp3EXT void __stdcall GLee_Lazy_glShaderOp3EXT(GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3) {if (GLeeInit()) glShaderOp3EXT(op, res, arg1, arg2, arg3);} GLEEPFNGLSHADEROP3EXTPROC GLeeFuncPtr_glShaderOp3EXT=GLee_Lazy_glShaderOp3EXT; #endif #ifndef GLEE_C_DEFINED_glSwizzleEXT #define GLEE_C_DEFINED_glSwizzleEXT void __stdcall GLee_Lazy_glSwizzleEXT(GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW) {if (GLeeInit()) glSwizzleEXT(res, in, outX, outY, outZ, outW);} GLEEPFNGLSWIZZLEEXTPROC GLeeFuncPtr_glSwizzleEXT=GLee_Lazy_glSwizzleEXT; #endif #ifndef GLEE_C_DEFINED_glWriteMaskEXT #define GLEE_C_DEFINED_glWriteMaskEXT void __stdcall GLee_Lazy_glWriteMaskEXT(GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW) {if (GLeeInit()) glWriteMaskEXT(res, in, outX, outY, outZ, outW);} GLEEPFNGLWRITEMASKEXTPROC GLeeFuncPtr_glWriteMaskEXT=GLee_Lazy_glWriteMaskEXT; #endif #ifndef GLEE_C_DEFINED_glInsertComponentEXT #define GLEE_C_DEFINED_glInsertComponentEXT void __stdcall GLee_Lazy_glInsertComponentEXT(GLuint res, GLuint src, GLuint num) {if (GLeeInit()) glInsertComponentEXT(res, src, num);} GLEEPFNGLINSERTCOMPONENTEXTPROC GLeeFuncPtr_glInsertComponentEXT=GLee_Lazy_glInsertComponentEXT; #endif #ifndef GLEE_C_DEFINED_glExtractComponentEXT #define GLEE_C_DEFINED_glExtractComponentEXT void __stdcall GLee_Lazy_glExtractComponentEXT(GLuint res, GLuint src, GLuint num) {if (GLeeInit()) glExtractComponentEXT(res, src, num);} GLEEPFNGLEXTRACTCOMPONENTEXTPROC GLeeFuncPtr_glExtractComponentEXT=GLee_Lazy_glExtractComponentEXT; #endif #ifndef GLEE_C_DEFINED_glGenSymbolsEXT #define GLEE_C_DEFINED_glGenSymbolsEXT GLuint __stdcall GLee_Lazy_glGenSymbolsEXT(GLenum datatype, GLenum storagetype, GLenum range, GLuint components) {if (GLeeInit()) return glGenSymbolsEXT(datatype, storagetype, range, components); return (GLuint)0;} GLEEPFNGLGENSYMBOLSEXTPROC GLeeFuncPtr_glGenSymbolsEXT=GLee_Lazy_glGenSymbolsEXT; #endif #ifndef GLEE_C_DEFINED_glSetInvariantEXT #define GLEE_C_DEFINED_glSetInvariantEXT void __stdcall GLee_Lazy_glSetInvariantEXT(GLuint id, GLenum type, const GLvoid * addr) {if (GLeeInit()) glSetInvariantEXT(id, type, addr);} GLEEPFNGLSETINVARIANTEXTPROC GLeeFuncPtr_glSetInvariantEXT=GLee_Lazy_glSetInvariantEXT; #endif #ifndef GLEE_C_DEFINED_glSetLocalConstantEXT #define GLEE_C_DEFINED_glSetLocalConstantEXT void __stdcall GLee_Lazy_glSetLocalConstantEXT(GLuint id, GLenum type, const GLvoid * addr) {if (GLeeInit()) glSetLocalConstantEXT(id, type, addr);} GLEEPFNGLSETLOCALCONSTANTEXTPROC GLeeFuncPtr_glSetLocalConstantEXT=GLee_Lazy_glSetLocalConstantEXT; #endif #ifndef GLEE_C_DEFINED_glVariantbvEXT #define GLEE_C_DEFINED_glVariantbvEXT void __stdcall GLee_Lazy_glVariantbvEXT(GLuint id, const GLbyte * addr) {if (GLeeInit()) glVariantbvEXT(id, addr);} GLEEPFNGLVARIANTBVEXTPROC GLeeFuncPtr_glVariantbvEXT=GLee_Lazy_glVariantbvEXT; #endif #ifndef GLEE_C_DEFINED_glVariantsvEXT #define GLEE_C_DEFINED_glVariantsvEXT void __stdcall GLee_Lazy_glVariantsvEXT(GLuint id, const GLshort * addr) {if (GLeeInit()) glVariantsvEXT(id, addr);} GLEEPFNGLVARIANTSVEXTPROC GLeeFuncPtr_glVariantsvEXT=GLee_Lazy_glVariantsvEXT; #endif #ifndef GLEE_C_DEFINED_glVariantivEXT #define GLEE_C_DEFINED_glVariantivEXT void __stdcall GLee_Lazy_glVariantivEXT(GLuint id, const GLint * addr) {if (GLeeInit()) glVariantivEXT(id, addr);} GLEEPFNGLVARIANTIVEXTPROC GLeeFuncPtr_glVariantivEXT=GLee_Lazy_glVariantivEXT; #endif #ifndef GLEE_C_DEFINED_glVariantfvEXT #define GLEE_C_DEFINED_glVariantfvEXT void __stdcall GLee_Lazy_glVariantfvEXT(GLuint id, const GLfloat * addr) {if (GLeeInit()) glVariantfvEXT(id, addr);} GLEEPFNGLVARIANTFVEXTPROC GLeeFuncPtr_glVariantfvEXT=GLee_Lazy_glVariantfvEXT; #endif #ifndef GLEE_C_DEFINED_glVariantdvEXT #define GLEE_C_DEFINED_glVariantdvEXT void __stdcall GLee_Lazy_glVariantdvEXT(GLuint id, const GLdouble * addr) {if (GLeeInit()) glVariantdvEXT(id, addr);} GLEEPFNGLVARIANTDVEXTPROC GLeeFuncPtr_glVariantdvEXT=GLee_Lazy_glVariantdvEXT; #endif #ifndef GLEE_C_DEFINED_glVariantubvEXT #define GLEE_C_DEFINED_glVariantubvEXT void __stdcall GLee_Lazy_glVariantubvEXT(GLuint id, const GLubyte * addr) {if (GLeeInit()) glVariantubvEXT(id, addr);} GLEEPFNGLVARIANTUBVEXTPROC GLeeFuncPtr_glVariantubvEXT=GLee_Lazy_glVariantubvEXT; #endif #ifndef GLEE_C_DEFINED_glVariantusvEXT #define GLEE_C_DEFINED_glVariantusvEXT void __stdcall GLee_Lazy_glVariantusvEXT(GLuint id, const GLushort * addr) {if (GLeeInit()) glVariantusvEXT(id, addr);} GLEEPFNGLVARIANTUSVEXTPROC GLeeFuncPtr_glVariantusvEXT=GLee_Lazy_glVariantusvEXT; #endif #ifndef GLEE_C_DEFINED_glVariantuivEXT #define GLEE_C_DEFINED_glVariantuivEXT void __stdcall GLee_Lazy_glVariantuivEXT(GLuint id, const GLuint * addr) {if (GLeeInit()) glVariantuivEXT(id, addr);} GLEEPFNGLVARIANTUIVEXTPROC GLeeFuncPtr_glVariantuivEXT=GLee_Lazy_glVariantuivEXT; #endif #ifndef GLEE_C_DEFINED_glVariantPointerEXT #define GLEE_C_DEFINED_glVariantPointerEXT void __stdcall GLee_Lazy_glVariantPointerEXT(GLuint id, GLenum type, GLuint stride, const GLvoid * addr) {if (GLeeInit()) glVariantPointerEXT(id, type, stride, addr);} GLEEPFNGLVARIANTPOINTEREXTPROC GLeeFuncPtr_glVariantPointerEXT=GLee_Lazy_glVariantPointerEXT; #endif #ifndef GLEE_C_DEFINED_glEnableVariantClientStateEXT #define GLEE_C_DEFINED_glEnableVariantClientStateEXT void __stdcall GLee_Lazy_glEnableVariantClientStateEXT(GLuint id) {if (GLeeInit()) glEnableVariantClientStateEXT(id);} GLEEPFNGLENABLEVARIANTCLIENTSTATEEXTPROC GLeeFuncPtr_glEnableVariantClientStateEXT=GLee_Lazy_glEnableVariantClientStateEXT; #endif #ifndef GLEE_C_DEFINED_glDisableVariantClientStateEXT #define GLEE_C_DEFINED_glDisableVariantClientStateEXT void __stdcall GLee_Lazy_glDisableVariantClientStateEXT(GLuint id) {if (GLeeInit()) glDisableVariantClientStateEXT(id);} GLEEPFNGLDISABLEVARIANTCLIENTSTATEEXTPROC GLeeFuncPtr_glDisableVariantClientStateEXT=GLee_Lazy_glDisableVariantClientStateEXT; #endif #ifndef GLEE_C_DEFINED_glBindLightParameterEXT #define GLEE_C_DEFINED_glBindLightParameterEXT GLuint __stdcall GLee_Lazy_glBindLightParameterEXT(GLenum light, GLenum value) {if (GLeeInit()) return glBindLightParameterEXT(light, value); return (GLuint)0;} GLEEPFNGLBINDLIGHTPARAMETEREXTPROC GLeeFuncPtr_glBindLightParameterEXT=GLee_Lazy_glBindLightParameterEXT; #endif #ifndef GLEE_C_DEFINED_glBindMaterialParameterEXT #define GLEE_C_DEFINED_glBindMaterialParameterEXT GLuint __stdcall GLee_Lazy_glBindMaterialParameterEXT(GLenum face, GLenum value) {if (GLeeInit()) return glBindMaterialParameterEXT(face, value); return (GLuint)0;} GLEEPFNGLBINDMATERIALPARAMETEREXTPROC GLeeFuncPtr_glBindMaterialParameterEXT=GLee_Lazy_glBindMaterialParameterEXT; #endif #ifndef GLEE_C_DEFINED_glBindTexGenParameterEXT #define GLEE_C_DEFINED_glBindTexGenParameterEXT GLuint __stdcall GLee_Lazy_glBindTexGenParameterEXT(GLenum unit, GLenum coord, GLenum value) {if (GLeeInit()) return glBindTexGenParameterEXT(unit, coord, value); return (GLuint)0;} GLEEPFNGLBINDTEXGENPARAMETEREXTPROC GLeeFuncPtr_glBindTexGenParameterEXT=GLee_Lazy_glBindTexGenParameterEXT; #endif #ifndef GLEE_C_DEFINED_glBindTextureUnitParameterEXT #define GLEE_C_DEFINED_glBindTextureUnitParameterEXT GLuint __stdcall GLee_Lazy_glBindTextureUnitParameterEXT(GLenum unit, GLenum value) {if (GLeeInit()) return glBindTextureUnitParameterEXT(unit, value); return (GLuint)0;} GLEEPFNGLBINDTEXTUREUNITPARAMETEREXTPROC GLeeFuncPtr_glBindTextureUnitParameterEXT=GLee_Lazy_glBindTextureUnitParameterEXT; #endif #ifndef GLEE_C_DEFINED_glBindParameterEXT #define GLEE_C_DEFINED_glBindParameterEXT GLuint __stdcall GLee_Lazy_glBindParameterEXT(GLenum value) {if (GLeeInit()) return glBindParameterEXT(value); return (GLuint)0;} GLEEPFNGLBINDPARAMETEREXTPROC GLeeFuncPtr_glBindParameterEXT=GLee_Lazy_glBindParameterEXT; #endif #ifndef GLEE_C_DEFINED_glIsVariantEnabledEXT #define GLEE_C_DEFINED_glIsVariantEnabledEXT GLboolean __stdcall GLee_Lazy_glIsVariantEnabledEXT(GLuint id, GLenum cap) {if (GLeeInit()) return glIsVariantEnabledEXT(id, cap); return (GLboolean)0;} GLEEPFNGLISVARIANTENABLEDEXTPROC GLeeFuncPtr_glIsVariantEnabledEXT=GLee_Lazy_glIsVariantEnabledEXT; #endif #ifndef GLEE_C_DEFINED_glGetVariantBooleanvEXT #define GLEE_C_DEFINED_glGetVariantBooleanvEXT void __stdcall GLee_Lazy_glGetVariantBooleanvEXT(GLuint id, GLenum value, GLboolean * data) {if (GLeeInit()) glGetVariantBooleanvEXT(id, value, data);} GLEEPFNGLGETVARIANTBOOLEANVEXTPROC GLeeFuncPtr_glGetVariantBooleanvEXT=GLee_Lazy_glGetVariantBooleanvEXT; #endif #ifndef GLEE_C_DEFINED_glGetVariantIntegervEXT #define GLEE_C_DEFINED_glGetVariantIntegervEXT void __stdcall GLee_Lazy_glGetVariantIntegervEXT(GLuint id, GLenum value, GLint * data) {if (GLeeInit()) glGetVariantIntegervEXT(id, value, data);} GLEEPFNGLGETVARIANTINTEGERVEXTPROC GLeeFuncPtr_glGetVariantIntegervEXT=GLee_Lazy_glGetVariantIntegervEXT; #endif #ifndef GLEE_C_DEFINED_glGetVariantFloatvEXT #define GLEE_C_DEFINED_glGetVariantFloatvEXT void __stdcall GLee_Lazy_glGetVariantFloatvEXT(GLuint id, GLenum value, GLfloat * data) {if (GLeeInit()) glGetVariantFloatvEXT(id, value, data);} GLEEPFNGLGETVARIANTFLOATVEXTPROC GLeeFuncPtr_glGetVariantFloatvEXT=GLee_Lazy_glGetVariantFloatvEXT; #endif #ifndef GLEE_C_DEFINED_glGetVariantPointervEXT #define GLEE_C_DEFINED_glGetVariantPointervEXT void __stdcall GLee_Lazy_glGetVariantPointervEXT(GLuint id, GLenum value, GLvoid* * data) {if (GLeeInit()) glGetVariantPointervEXT(id, value, data);} GLEEPFNGLGETVARIANTPOINTERVEXTPROC GLeeFuncPtr_glGetVariantPointervEXT=GLee_Lazy_glGetVariantPointervEXT; #endif #ifndef GLEE_C_DEFINED_glGetInvariantBooleanvEXT #define GLEE_C_DEFINED_glGetInvariantBooleanvEXT void __stdcall GLee_Lazy_glGetInvariantBooleanvEXT(GLuint id, GLenum value, GLboolean * data) {if (GLeeInit()) glGetInvariantBooleanvEXT(id, value, data);} GLEEPFNGLGETINVARIANTBOOLEANVEXTPROC GLeeFuncPtr_glGetInvariantBooleanvEXT=GLee_Lazy_glGetInvariantBooleanvEXT; #endif #ifndef GLEE_C_DEFINED_glGetInvariantIntegervEXT #define GLEE_C_DEFINED_glGetInvariantIntegervEXT void __stdcall GLee_Lazy_glGetInvariantIntegervEXT(GLuint id, GLenum value, GLint * data) {if (GLeeInit()) glGetInvariantIntegervEXT(id, value, data);} GLEEPFNGLGETINVARIANTINTEGERVEXTPROC GLeeFuncPtr_glGetInvariantIntegervEXT=GLee_Lazy_glGetInvariantIntegervEXT; #endif #ifndef GLEE_C_DEFINED_glGetInvariantFloatvEXT #define GLEE_C_DEFINED_glGetInvariantFloatvEXT void __stdcall GLee_Lazy_glGetInvariantFloatvEXT(GLuint id, GLenum value, GLfloat * data) {if (GLeeInit()) glGetInvariantFloatvEXT(id, value, data);} GLEEPFNGLGETINVARIANTFLOATVEXTPROC GLeeFuncPtr_glGetInvariantFloatvEXT=GLee_Lazy_glGetInvariantFloatvEXT; #endif #ifndef GLEE_C_DEFINED_glGetLocalConstantBooleanvEXT #define GLEE_C_DEFINED_glGetLocalConstantBooleanvEXT void __stdcall GLee_Lazy_glGetLocalConstantBooleanvEXT(GLuint id, GLenum value, GLboolean * data) {if (GLeeInit()) glGetLocalConstantBooleanvEXT(id, value, data);} GLEEPFNGLGETLOCALCONSTANTBOOLEANVEXTPROC GLeeFuncPtr_glGetLocalConstantBooleanvEXT=GLee_Lazy_glGetLocalConstantBooleanvEXT; #endif #ifndef GLEE_C_DEFINED_glGetLocalConstantIntegervEXT #define GLEE_C_DEFINED_glGetLocalConstantIntegervEXT void __stdcall GLee_Lazy_glGetLocalConstantIntegervEXT(GLuint id, GLenum value, GLint * data) {if (GLeeInit()) glGetLocalConstantIntegervEXT(id, value, data);} GLEEPFNGLGETLOCALCONSTANTINTEGERVEXTPROC GLeeFuncPtr_glGetLocalConstantIntegervEXT=GLee_Lazy_glGetLocalConstantIntegervEXT; #endif #ifndef GLEE_C_DEFINED_glGetLocalConstantFloatvEXT #define GLEE_C_DEFINED_glGetLocalConstantFloatvEXT void __stdcall GLee_Lazy_glGetLocalConstantFloatvEXT(GLuint id, GLenum value, GLfloat * data) {if (GLeeInit()) glGetLocalConstantFloatvEXT(id, value, data);} GLEEPFNGLGETLOCALCONSTANTFLOATVEXTPROC GLeeFuncPtr_glGetLocalConstantFloatvEXT=GLee_Lazy_glGetLocalConstantFloatvEXT; #endif #endif /* GL_ATI_vertex_streams */ #ifdef __GLEE_GL_ATI_vertex_streams #ifndef GLEE_C_DEFINED_glVertexStream1sATI #define GLEE_C_DEFINED_glVertexStream1sATI void __stdcall GLee_Lazy_glVertexStream1sATI(GLenum stream, GLshort x) {if (GLeeInit()) glVertexStream1sATI(stream, x);} GLEEPFNGLVERTEXSTREAM1SATIPROC GLeeFuncPtr_glVertexStream1sATI=GLee_Lazy_glVertexStream1sATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream1svATI #define GLEE_C_DEFINED_glVertexStream1svATI void __stdcall GLee_Lazy_glVertexStream1svATI(GLenum stream, const GLshort * coords) {if (GLeeInit()) glVertexStream1svATI(stream, coords);} GLEEPFNGLVERTEXSTREAM1SVATIPROC GLeeFuncPtr_glVertexStream1svATI=GLee_Lazy_glVertexStream1svATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream1iATI #define GLEE_C_DEFINED_glVertexStream1iATI void __stdcall GLee_Lazy_glVertexStream1iATI(GLenum stream, GLint x) {if (GLeeInit()) glVertexStream1iATI(stream, x);} GLEEPFNGLVERTEXSTREAM1IATIPROC GLeeFuncPtr_glVertexStream1iATI=GLee_Lazy_glVertexStream1iATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream1ivATI #define GLEE_C_DEFINED_glVertexStream1ivATI void __stdcall GLee_Lazy_glVertexStream1ivATI(GLenum stream, const GLint * coords) {if (GLeeInit()) glVertexStream1ivATI(stream, coords);} GLEEPFNGLVERTEXSTREAM1IVATIPROC GLeeFuncPtr_glVertexStream1ivATI=GLee_Lazy_glVertexStream1ivATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream1fATI #define GLEE_C_DEFINED_glVertexStream1fATI void __stdcall GLee_Lazy_glVertexStream1fATI(GLenum stream, GLfloat x) {if (GLeeInit()) glVertexStream1fATI(stream, x);} GLEEPFNGLVERTEXSTREAM1FATIPROC GLeeFuncPtr_glVertexStream1fATI=GLee_Lazy_glVertexStream1fATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream1fvATI #define GLEE_C_DEFINED_glVertexStream1fvATI void __stdcall GLee_Lazy_glVertexStream1fvATI(GLenum stream, const GLfloat * coords) {if (GLeeInit()) glVertexStream1fvATI(stream, coords);} GLEEPFNGLVERTEXSTREAM1FVATIPROC GLeeFuncPtr_glVertexStream1fvATI=GLee_Lazy_glVertexStream1fvATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream1dATI #define GLEE_C_DEFINED_glVertexStream1dATI void __stdcall GLee_Lazy_glVertexStream1dATI(GLenum stream, GLdouble x) {if (GLeeInit()) glVertexStream1dATI(stream, x);} GLEEPFNGLVERTEXSTREAM1DATIPROC GLeeFuncPtr_glVertexStream1dATI=GLee_Lazy_glVertexStream1dATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream1dvATI #define GLEE_C_DEFINED_glVertexStream1dvATI void __stdcall GLee_Lazy_glVertexStream1dvATI(GLenum stream, const GLdouble * coords) {if (GLeeInit()) glVertexStream1dvATI(stream, coords);} GLEEPFNGLVERTEXSTREAM1DVATIPROC GLeeFuncPtr_glVertexStream1dvATI=GLee_Lazy_glVertexStream1dvATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream2sATI #define GLEE_C_DEFINED_glVertexStream2sATI void __stdcall GLee_Lazy_glVertexStream2sATI(GLenum stream, GLshort x, GLshort y) {if (GLeeInit()) glVertexStream2sATI(stream, x, y);} GLEEPFNGLVERTEXSTREAM2SATIPROC GLeeFuncPtr_glVertexStream2sATI=GLee_Lazy_glVertexStream2sATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream2svATI #define GLEE_C_DEFINED_glVertexStream2svATI void __stdcall GLee_Lazy_glVertexStream2svATI(GLenum stream, const GLshort * coords) {if (GLeeInit()) glVertexStream2svATI(stream, coords);} GLEEPFNGLVERTEXSTREAM2SVATIPROC GLeeFuncPtr_glVertexStream2svATI=GLee_Lazy_glVertexStream2svATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream2iATI #define GLEE_C_DEFINED_glVertexStream2iATI void __stdcall GLee_Lazy_glVertexStream2iATI(GLenum stream, GLint x, GLint y) {if (GLeeInit()) glVertexStream2iATI(stream, x, y);} GLEEPFNGLVERTEXSTREAM2IATIPROC GLeeFuncPtr_glVertexStream2iATI=GLee_Lazy_glVertexStream2iATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream2ivATI #define GLEE_C_DEFINED_glVertexStream2ivATI void __stdcall GLee_Lazy_glVertexStream2ivATI(GLenum stream, const GLint * coords) {if (GLeeInit()) glVertexStream2ivATI(stream, coords);} GLEEPFNGLVERTEXSTREAM2IVATIPROC GLeeFuncPtr_glVertexStream2ivATI=GLee_Lazy_glVertexStream2ivATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream2fATI #define GLEE_C_DEFINED_glVertexStream2fATI void __stdcall GLee_Lazy_glVertexStream2fATI(GLenum stream, GLfloat x, GLfloat y) {if (GLeeInit()) glVertexStream2fATI(stream, x, y);} GLEEPFNGLVERTEXSTREAM2FATIPROC GLeeFuncPtr_glVertexStream2fATI=GLee_Lazy_glVertexStream2fATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream2fvATI #define GLEE_C_DEFINED_glVertexStream2fvATI void __stdcall GLee_Lazy_glVertexStream2fvATI(GLenum stream, const GLfloat * coords) {if (GLeeInit()) glVertexStream2fvATI(stream, coords);} GLEEPFNGLVERTEXSTREAM2FVATIPROC GLeeFuncPtr_glVertexStream2fvATI=GLee_Lazy_glVertexStream2fvATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream2dATI #define GLEE_C_DEFINED_glVertexStream2dATI void __stdcall GLee_Lazy_glVertexStream2dATI(GLenum stream, GLdouble x, GLdouble y) {if (GLeeInit()) glVertexStream2dATI(stream, x, y);} GLEEPFNGLVERTEXSTREAM2DATIPROC GLeeFuncPtr_glVertexStream2dATI=GLee_Lazy_glVertexStream2dATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream2dvATI #define GLEE_C_DEFINED_glVertexStream2dvATI void __stdcall GLee_Lazy_glVertexStream2dvATI(GLenum stream, const GLdouble * coords) {if (GLeeInit()) glVertexStream2dvATI(stream, coords);} GLEEPFNGLVERTEXSTREAM2DVATIPROC GLeeFuncPtr_glVertexStream2dvATI=GLee_Lazy_glVertexStream2dvATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream3sATI #define GLEE_C_DEFINED_glVertexStream3sATI void __stdcall GLee_Lazy_glVertexStream3sATI(GLenum stream, GLshort x, GLshort y, GLshort z) {if (GLeeInit()) glVertexStream3sATI(stream, x, y, z);} GLEEPFNGLVERTEXSTREAM3SATIPROC GLeeFuncPtr_glVertexStream3sATI=GLee_Lazy_glVertexStream3sATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream3svATI #define GLEE_C_DEFINED_glVertexStream3svATI void __stdcall GLee_Lazy_glVertexStream3svATI(GLenum stream, const GLshort * coords) {if (GLeeInit()) glVertexStream3svATI(stream, coords);} GLEEPFNGLVERTEXSTREAM3SVATIPROC GLeeFuncPtr_glVertexStream3svATI=GLee_Lazy_glVertexStream3svATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream3iATI #define GLEE_C_DEFINED_glVertexStream3iATI void __stdcall GLee_Lazy_glVertexStream3iATI(GLenum stream, GLint x, GLint y, GLint z) {if (GLeeInit()) glVertexStream3iATI(stream, x, y, z);} GLEEPFNGLVERTEXSTREAM3IATIPROC GLeeFuncPtr_glVertexStream3iATI=GLee_Lazy_glVertexStream3iATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream3ivATI #define GLEE_C_DEFINED_glVertexStream3ivATI void __stdcall GLee_Lazy_glVertexStream3ivATI(GLenum stream, const GLint * coords) {if (GLeeInit()) glVertexStream3ivATI(stream, coords);} GLEEPFNGLVERTEXSTREAM3IVATIPROC GLeeFuncPtr_glVertexStream3ivATI=GLee_Lazy_glVertexStream3ivATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream3fATI #define GLEE_C_DEFINED_glVertexStream3fATI void __stdcall GLee_Lazy_glVertexStream3fATI(GLenum stream, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glVertexStream3fATI(stream, x, y, z);} GLEEPFNGLVERTEXSTREAM3FATIPROC GLeeFuncPtr_glVertexStream3fATI=GLee_Lazy_glVertexStream3fATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream3fvATI #define GLEE_C_DEFINED_glVertexStream3fvATI void __stdcall GLee_Lazy_glVertexStream3fvATI(GLenum stream, const GLfloat * coords) {if (GLeeInit()) glVertexStream3fvATI(stream, coords);} GLEEPFNGLVERTEXSTREAM3FVATIPROC GLeeFuncPtr_glVertexStream3fvATI=GLee_Lazy_glVertexStream3fvATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream3dATI #define GLEE_C_DEFINED_glVertexStream3dATI void __stdcall GLee_Lazy_glVertexStream3dATI(GLenum stream, GLdouble x, GLdouble y, GLdouble z) {if (GLeeInit()) glVertexStream3dATI(stream, x, y, z);} GLEEPFNGLVERTEXSTREAM3DATIPROC GLeeFuncPtr_glVertexStream3dATI=GLee_Lazy_glVertexStream3dATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream3dvATI #define GLEE_C_DEFINED_glVertexStream3dvATI void __stdcall GLee_Lazy_glVertexStream3dvATI(GLenum stream, const GLdouble * coords) {if (GLeeInit()) glVertexStream3dvATI(stream, coords);} GLEEPFNGLVERTEXSTREAM3DVATIPROC GLeeFuncPtr_glVertexStream3dvATI=GLee_Lazy_glVertexStream3dvATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream4sATI #define GLEE_C_DEFINED_glVertexStream4sATI void __stdcall GLee_Lazy_glVertexStream4sATI(GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w) {if (GLeeInit()) glVertexStream4sATI(stream, x, y, z, w);} GLEEPFNGLVERTEXSTREAM4SATIPROC GLeeFuncPtr_glVertexStream4sATI=GLee_Lazy_glVertexStream4sATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream4svATI #define GLEE_C_DEFINED_glVertexStream4svATI void __stdcall GLee_Lazy_glVertexStream4svATI(GLenum stream, const GLshort * coords) {if (GLeeInit()) glVertexStream4svATI(stream, coords);} GLEEPFNGLVERTEXSTREAM4SVATIPROC GLeeFuncPtr_glVertexStream4svATI=GLee_Lazy_glVertexStream4svATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream4iATI #define GLEE_C_DEFINED_glVertexStream4iATI void __stdcall GLee_Lazy_glVertexStream4iATI(GLenum stream, GLint x, GLint y, GLint z, GLint w) {if (GLeeInit()) glVertexStream4iATI(stream, x, y, z, w);} GLEEPFNGLVERTEXSTREAM4IATIPROC GLeeFuncPtr_glVertexStream4iATI=GLee_Lazy_glVertexStream4iATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream4ivATI #define GLEE_C_DEFINED_glVertexStream4ivATI void __stdcall GLee_Lazy_glVertexStream4ivATI(GLenum stream, const GLint * coords) {if (GLeeInit()) glVertexStream4ivATI(stream, coords);} GLEEPFNGLVERTEXSTREAM4IVATIPROC GLeeFuncPtr_glVertexStream4ivATI=GLee_Lazy_glVertexStream4ivATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream4fATI #define GLEE_C_DEFINED_glVertexStream4fATI void __stdcall GLee_Lazy_glVertexStream4fATI(GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {if (GLeeInit()) glVertexStream4fATI(stream, x, y, z, w);} GLEEPFNGLVERTEXSTREAM4FATIPROC GLeeFuncPtr_glVertexStream4fATI=GLee_Lazy_glVertexStream4fATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream4fvATI #define GLEE_C_DEFINED_glVertexStream4fvATI void __stdcall GLee_Lazy_glVertexStream4fvATI(GLenum stream, const GLfloat * coords) {if (GLeeInit()) glVertexStream4fvATI(stream, coords);} GLEEPFNGLVERTEXSTREAM4FVATIPROC GLeeFuncPtr_glVertexStream4fvATI=GLee_Lazy_glVertexStream4fvATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream4dATI #define GLEE_C_DEFINED_glVertexStream4dATI void __stdcall GLee_Lazy_glVertexStream4dATI(GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w) {if (GLeeInit()) glVertexStream4dATI(stream, x, y, z, w);} GLEEPFNGLVERTEXSTREAM4DATIPROC GLeeFuncPtr_glVertexStream4dATI=GLee_Lazy_glVertexStream4dATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream4dvATI #define GLEE_C_DEFINED_glVertexStream4dvATI void __stdcall GLee_Lazy_glVertexStream4dvATI(GLenum stream, const GLdouble * coords) {if (GLeeInit()) glVertexStream4dvATI(stream, coords);} GLEEPFNGLVERTEXSTREAM4DVATIPROC GLeeFuncPtr_glVertexStream4dvATI=GLee_Lazy_glVertexStream4dvATI; #endif #ifndef GLEE_C_DEFINED_glNormalStream3bATI #define GLEE_C_DEFINED_glNormalStream3bATI void __stdcall GLee_Lazy_glNormalStream3bATI(GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz) {if (GLeeInit()) glNormalStream3bATI(stream, nx, ny, nz);} GLEEPFNGLNORMALSTREAM3BATIPROC GLeeFuncPtr_glNormalStream3bATI=GLee_Lazy_glNormalStream3bATI; #endif #ifndef GLEE_C_DEFINED_glNormalStream3bvATI #define GLEE_C_DEFINED_glNormalStream3bvATI void __stdcall GLee_Lazy_glNormalStream3bvATI(GLenum stream, const GLbyte * coords) {if (GLeeInit()) glNormalStream3bvATI(stream, coords);} GLEEPFNGLNORMALSTREAM3BVATIPROC GLeeFuncPtr_glNormalStream3bvATI=GLee_Lazy_glNormalStream3bvATI; #endif #ifndef GLEE_C_DEFINED_glNormalStream3sATI #define GLEE_C_DEFINED_glNormalStream3sATI void __stdcall GLee_Lazy_glNormalStream3sATI(GLenum stream, GLshort nx, GLshort ny, GLshort nz) {if (GLeeInit()) glNormalStream3sATI(stream, nx, ny, nz);} GLEEPFNGLNORMALSTREAM3SATIPROC GLeeFuncPtr_glNormalStream3sATI=GLee_Lazy_glNormalStream3sATI; #endif #ifndef GLEE_C_DEFINED_glNormalStream3svATI #define GLEE_C_DEFINED_glNormalStream3svATI void __stdcall GLee_Lazy_glNormalStream3svATI(GLenum stream, const GLshort * coords) {if (GLeeInit()) glNormalStream3svATI(stream, coords);} GLEEPFNGLNORMALSTREAM3SVATIPROC GLeeFuncPtr_glNormalStream3svATI=GLee_Lazy_glNormalStream3svATI; #endif #ifndef GLEE_C_DEFINED_glNormalStream3iATI #define GLEE_C_DEFINED_glNormalStream3iATI void __stdcall GLee_Lazy_glNormalStream3iATI(GLenum stream, GLint nx, GLint ny, GLint nz) {if (GLeeInit()) glNormalStream3iATI(stream, nx, ny, nz);} GLEEPFNGLNORMALSTREAM3IATIPROC GLeeFuncPtr_glNormalStream3iATI=GLee_Lazy_glNormalStream3iATI; #endif #ifndef GLEE_C_DEFINED_glNormalStream3ivATI #define GLEE_C_DEFINED_glNormalStream3ivATI void __stdcall GLee_Lazy_glNormalStream3ivATI(GLenum stream, const GLint * coords) {if (GLeeInit()) glNormalStream3ivATI(stream, coords);} GLEEPFNGLNORMALSTREAM3IVATIPROC GLeeFuncPtr_glNormalStream3ivATI=GLee_Lazy_glNormalStream3ivATI; #endif #ifndef GLEE_C_DEFINED_glNormalStream3fATI #define GLEE_C_DEFINED_glNormalStream3fATI void __stdcall GLee_Lazy_glNormalStream3fATI(GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz) {if (GLeeInit()) glNormalStream3fATI(stream, nx, ny, nz);} GLEEPFNGLNORMALSTREAM3FATIPROC GLeeFuncPtr_glNormalStream3fATI=GLee_Lazy_glNormalStream3fATI; #endif #ifndef GLEE_C_DEFINED_glNormalStream3fvATI #define GLEE_C_DEFINED_glNormalStream3fvATI void __stdcall GLee_Lazy_glNormalStream3fvATI(GLenum stream, const GLfloat * coords) {if (GLeeInit()) glNormalStream3fvATI(stream, coords);} GLEEPFNGLNORMALSTREAM3FVATIPROC GLeeFuncPtr_glNormalStream3fvATI=GLee_Lazy_glNormalStream3fvATI; #endif #ifndef GLEE_C_DEFINED_glNormalStream3dATI #define GLEE_C_DEFINED_glNormalStream3dATI void __stdcall GLee_Lazy_glNormalStream3dATI(GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz) {if (GLeeInit()) glNormalStream3dATI(stream, nx, ny, nz);} GLEEPFNGLNORMALSTREAM3DATIPROC GLeeFuncPtr_glNormalStream3dATI=GLee_Lazy_glNormalStream3dATI; #endif #ifndef GLEE_C_DEFINED_glNormalStream3dvATI #define GLEE_C_DEFINED_glNormalStream3dvATI void __stdcall GLee_Lazy_glNormalStream3dvATI(GLenum stream, const GLdouble * coords) {if (GLeeInit()) glNormalStream3dvATI(stream, coords);} GLEEPFNGLNORMALSTREAM3DVATIPROC GLeeFuncPtr_glNormalStream3dvATI=GLee_Lazy_glNormalStream3dvATI; #endif #ifndef GLEE_C_DEFINED_glClientActiveVertexStreamATI #define GLEE_C_DEFINED_glClientActiveVertexStreamATI void __stdcall GLee_Lazy_glClientActiveVertexStreamATI(GLenum stream) {if (GLeeInit()) glClientActiveVertexStreamATI(stream);} GLEEPFNGLCLIENTACTIVEVERTEXSTREAMATIPROC GLeeFuncPtr_glClientActiveVertexStreamATI=GLee_Lazy_glClientActiveVertexStreamATI; #endif #ifndef GLEE_C_DEFINED_glVertexBlendEnviATI #define GLEE_C_DEFINED_glVertexBlendEnviATI void __stdcall GLee_Lazy_glVertexBlendEnviATI(GLenum pname, GLint param) {if (GLeeInit()) glVertexBlendEnviATI(pname, param);} GLEEPFNGLVERTEXBLENDENVIATIPROC GLeeFuncPtr_glVertexBlendEnviATI=GLee_Lazy_glVertexBlendEnviATI; #endif #ifndef GLEE_C_DEFINED_glVertexBlendEnvfATI #define GLEE_C_DEFINED_glVertexBlendEnvfATI void __stdcall GLee_Lazy_glVertexBlendEnvfATI(GLenum pname, GLfloat param) {if (GLeeInit()) glVertexBlendEnvfATI(pname, param);} GLEEPFNGLVERTEXBLENDENVFATIPROC GLeeFuncPtr_glVertexBlendEnvfATI=GLee_Lazy_glVertexBlendEnvfATI; #endif #endif /* GL_ATI_element_array */ #ifdef __GLEE_GL_ATI_element_array #ifndef GLEE_C_DEFINED_glElementPointerATI #define GLEE_C_DEFINED_glElementPointerATI void __stdcall GLee_Lazy_glElementPointerATI(GLenum type, const GLvoid * pointer) {if (GLeeInit()) glElementPointerATI(type, pointer);} GLEEPFNGLELEMENTPOINTERATIPROC GLeeFuncPtr_glElementPointerATI=GLee_Lazy_glElementPointerATI; #endif #ifndef GLEE_C_DEFINED_glDrawElementArrayATI #define GLEE_C_DEFINED_glDrawElementArrayATI void __stdcall GLee_Lazy_glDrawElementArrayATI(GLenum mode, GLsizei count) {if (GLeeInit()) glDrawElementArrayATI(mode, count);} GLEEPFNGLDRAWELEMENTARRAYATIPROC GLeeFuncPtr_glDrawElementArrayATI=GLee_Lazy_glDrawElementArrayATI; #endif #ifndef GLEE_C_DEFINED_glDrawRangeElementArrayATI #define GLEE_C_DEFINED_glDrawRangeElementArrayATI void __stdcall GLee_Lazy_glDrawRangeElementArrayATI(GLenum mode, GLuint start, GLuint end, GLsizei count) {if (GLeeInit()) glDrawRangeElementArrayATI(mode, start, end, count);} GLEEPFNGLDRAWRANGEELEMENTARRAYATIPROC GLeeFuncPtr_glDrawRangeElementArrayATI=GLee_Lazy_glDrawRangeElementArrayATI; #endif #endif /* GL_SUN_mesh_array */ #ifdef __GLEE_GL_SUN_mesh_array #ifndef GLEE_C_DEFINED_glDrawMeshArraysSUN #define GLEE_C_DEFINED_glDrawMeshArraysSUN void __stdcall GLee_Lazy_glDrawMeshArraysSUN(GLenum mode, GLint first, GLsizei count, GLsizei width) {if (GLeeInit()) glDrawMeshArraysSUN(mode, first, count, width);} GLEEPFNGLDRAWMESHARRAYSSUNPROC GLeeFuncPtr_glDrawMeshArraysSUN=GLee_Lazy_glDrawMeshArraysSUN; #endif #endif /* GL_SUN_slice_accum */ #ifdef __GLEE_GL_SUN_slice_accum #endif /* GL_NV_multisample_filter_hint */ #ifdef __GLEE_GL_NV_multisample_filter_hint #endif /* GL_NV_depth_clamp */ #ifdef __GLEE_GL_NV_depth_clamp #endif /* GL_NV_occlusion_query */ #ifdef __GLEE_GL_NV_occlusion_query #ifndef GLEE_C_DEFINED_glGenOcclusionQueriesNV #define GLEE_C_DEFINED_glGenOcclusionQueriesNV void __stdcall GLee_Lazy_glGenOcclusionQueriesNV(GLsizei n, GLuint * ids) {if (GLeeInit()) glGenOcclusionQueriesNV(n, ids);} GLEEPFNGLGENOCCLUSIONQUERIESNVPROC GLeeFuncPtr_glGenOcclusionQueriesNV=GLee_Lazy_glGenOcclusionQueriesNV; #endif #ifndef GLEE_C_DEFINED_glDeleteOcclusionQueriesNV #define GLEE_C_DEFINED_glDeleteOcclusionQueriesNV void __stdcall GLee_Lazy_glDeleteOcclusionQueriesNV(GLsizei n, const GLuint * ids) {if (GLeeInit()) glDeleteOcclusionQueriesNV(n, ids);} GLEEPFNGLDELETEOCCLUSIONQUERIESNVPROC GLeeFuncPtr_glDeleteOcclusionQueriesNV=GLee_Lazy_glDeleteOcclusionQueriesNV; #endif #ifndef GLEE_C_DEFINED_glIsOcclusionQueryNV #define GLEE_C_DEFINED_glIsOcclusionQueryNV GLboolean __stdcall GLee_Lazy_glIsOcclusionQueryNV(GLuint id) {if (GLeeInit()) return glIsOcclusionQueryNV(id); return (GLboolean)0;} GLEEPFNGLISOCCLUSIONQUERYNVPROC GLeeFuncPtr_glIsOcclusionQueryNV=GLee_Lazy_glIsOcclusionQueryNV; #endif #ifndef GLEE_C_DEFINED_glBeginOcclusionQueryNV #define GLEE_C_DEFINED_glBeginOcclusionQueryNV void __stdcall GLee_Lazy_glBeginOcclusionQueryNV(GLuint id) {if (GLeeInit()) glBeginOcclusionQueryNV(id);} GLEEPFNGLBEGINOCCLUSIONQUERYNVPROC GLeeFuncPtr_glBeginOcclusionQueryNV=GLee_Lazy_glBeginOcclusionQueryNV; #endif #ifndef GLEE_C_DEFINED_glEndOcclusionQueryNV #define GLEE_C_DEFINED_glEndOcclusionQueryNV void __stdcall GLee_Lazy_glEndOcclusionQueryNV(void) {if (GLeeInit()) glEndOcclusionQueryNV();} GLEEPFNGLENDOCCLUSIONQUERYNVPROC GLeeFuncPtr_glEndOcclusionQueryNV=GLee_Lazy_glEndOcclusionQueryNV; #endif #ifndef GLEE_C_DEFINED_glGetOcclusionQueryivNV #define GLEE_C_DEFINED_glGetOcclusionQueryivNV void __stdcall GLee_Lazy_glGetOcclusionQueryivNV(GLuint id, GLenum pname, GLint * params) {if (GLeeInit()) glGetOcclusionQueryivNV(id, pname, params);} GLEEPFNGLGETOCCLUSIONQUERYIVNVPROC GLeeFuncPtr_glGetOcclusionQueryivNV=GLee_Lazy_glGetOcclusionQueryivNV; #endif #ifndef GLEE_C_DEFINED_glGetOcclusionQueryuivNV #define GLEE_C_DEFINED_glGetOcclusionQueryuivNV void __stdcall GLee_Lazy_glGetOcclusionQueryuivNV(GLuint id, GLenum pname, GLuint * params) {if (GLeeInit()) glGetOcclusionQueryuivNV(id, pname, params);} GLEEPFNGLGETOCCLUSIONQUERYUIVNVPROC GLeeFuncPtr_glGetOcclusionQueryuivNV=GLee_Lazy_glGetOcclusionQueryuivNV; #endif #endif /* GL_NV_point_sprite */ #ifdef __GLEE_GL_NV_point_sprite #ifndef GLEE_C_DEFINED_glPointParameteriNV #define GLEE_C_DEFINED_glPointParameteriNV void __stdcall GLee_Lazy_glPointParameteriNV(GLenum pname, GLint param) {if (GLeeInit()) glPointParameteriNV(pname, param);} GLEEPFNGLPOINTPARAMETERINVPROC GLeeFuncPtr_glPointParameteriNV=GLee_Lazy_glPointParameteriNV; #endif #ifndef GLEE_C_DEFINED_glPointParameterivNV #define GLEE_C_DEFINED_glPointParameterivNV void __stdcall GLee_Lazy_glPointParameterivNV(GLenum pname, const GLint * params) {if (GLeeInit()) glPointParameterivNV(pname, params);} GLEEPFNGLPOINTPARAMETERIVNVPROC GLeeFuncPtr_glPointParameterivNV=GLee_Lazy_glPointParameterivNV; #endif #endif /* GL_NV_texture_shader3 */ #ifdef __GLEE_GL_NV_texture_shader3 #endif /* GL_NV_vertex_program1_1 */ #ifdef __GLEE_GL_NV_vertex_program1_1 #endif /* GL_EXT_shadow_funcs */ #ifdef __GLEE_GL_EXT_shadow_funcs #endif /* GL_EXT_stencil_two_side */ #ifdef __GLEE_GL_EXT_stencil_two_side #ifndef GLEE_C_DEFINED_glActiveStencilFaceEXT #define GLEE_C_DEFINED_glActiveStencilFaceEXT void __stdcall GLee_Lazy_glActiveStencilFaceEXT(GLenum face) {if (GLeeInit()) glActiveStencilFaceEXT(face);} GLEEPFNGLACTIVESTENCILFACEEXTPROC GLeeFuncPtr_glActiveStencilFaceEXT=GLee_Lazy_glActiveStencilFaceEXT; #endif #endif /* GL_ATI_text_fragment_shader */ #ifdef __GLEE_GL_ATI_text_fragment_shader #endif /* GL_APPLE_client_storage */ #ifdef __GLEE_GL_APPLE_client_storage #endif /* GL_APPLE_element_array */ #ifdef __GLEE_GL_APPLE_element_array #ifndef GLEE_C_DEFINED_glElementPointerAPPLE #define GLEE_C_DEFINED_glElementPointerAPPLE void __stdcall GLee_Lazy_glElementPointerAPPLE(GLenum type, const GLvoid * pointer) {if (GLeeInit()) glElementPointerAPPLE(type, pointer);} GLEEPFNGLELEMENTPOINTERAPPLEPROC GLeeFuncPtr_glElementPointerAPPLE=GLee_Lazy_glElementPointerAPPLE; #endif #ifndef GLEE_C_DEFINED_glDrawElementArrayAPPLE #define GLEE_C_DEFINED_glDrawElementArrayAPPLE void __stdcall GLee_Lazy_glDrawElementArrayAPPLE(GLenum mode, GLint first, GLsizei count) {if (GLeeInit()) glDrawElementArrayAPPLE(mode, first, count);} GLEEPFNGLDRAWELEMENTARRAYAPPLEPROC GLeeFuncPtr_glDrawElementArrayAPPLE=GLee_Lazy_glDrawElementArrayAPPLE; #endif #ifndef GLEE_C_DEFINED_glDrawRangeElementArrayAPPLE #define GLEE_C_DEFINED_glDrawRangeElementArrayAPPLE void __stdcall GLee_Lazy_glDrawRangeElementArrayAPPLE(GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count) {if (GLeeInit()) glDrawRangeElementArrayAPPLE(mode, start, end, first, count);} GLEEPFNGLDRAWRANGEELEMENTARRAYAPPLEPROC GLeeFuncPtr_glDrawRangeElementArrayAPPLE=GLee_Lazy_glDrawRangeElementArrayAPPLE; #endif #ifndef GLEE_C_DEFINED_glMultiDrawElementArrayAPPLE #define GLEE_C_DEFINED_glMultiDrawElementArrayAPPLE void __stdcall GLee_Lazy_glMultiDrawElementArrayAPPLE(GLenum mode, const GLint * first, const GLsizei * count, GLsizei primcount) {if (GLeeInit()) glMultiDrawElementArrayAPPLE(mode, first, count, primcount);} GLEEPFNGLMULTIDRAWELEMENTARRAYAPPLEPROC GLeeFuncPtr_glMultiDrawElementArrayAPPLE=GLee_Lazy_glMultiDrawElementArrayAPPLE; #endif #ifndef GLEE_C_DEFINED_glMultiDrawRangeElementArrayAPPLE #define GLEE_C_DEFINED_glMultiDrawRangeElementArrayAPPLE void __stdcall GLee_Lazy_glMultiDrawRangeElementArrayAPPLE(GLenum mode, GLuint start, GLuint end, const GLint * first, const GLsizei * count, GLsizei primcount) {if (GLeeInit()) glMultiDrawRangeElementArrayAPPLE(mode, start, end, first, count, primcount);} GLEEPFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC GLeeFuncPtr_glMultiDrawRangeElementArrayAPPLE=GLee_Lazy_glMultiDrawRangeElementArrayAPPLE; #endif #endif /* GL_APPLE_fence */ #ifdef __GLEE_GL_APPLE_fence #ifndef GLEE_C_DEFINED_glGenFencesAPPLE #define GLEE_C_DEFINED_glGenFencesAPPLE void __stdcall GLee_Lazy_glGenFencesAPPLE(GLsizei n, GLuint * fences) {if (GLeeInit()) glGenFencesAPPLE(n, fences);} GLEEPFNGLGENFENCESAPPLEPROC GLeeFuncPtr_glGenFencesAPPLE=GLee_Lazy_glGenFencesAPPLE; #endif #ifndef GLEE_C_DEFINED_glDeleteFencesAPPLE #define GLEE_C_DEFINED_glDeleteFencesAPPLE void __stdcall GLee_Lazy_glDeleteFencesAPPLE(GLsizei n, const GLuint * fences) {if (GLeeInit()) glDeleteFencesAPPLE(n, fences);} GLEEPFNGLDELETEFENCESAPPLEPROC GLeeFuncPtr_glDeleteFencesAPPLE=GLee_Lazy_glDeleteFencesAPPLE; #endif #ifndef GLEE_C_DEFINED_glSetFenceAPPLE #define GLEE_C_DEFINED_glSetFenceAPPLE void __stdcall GLee_Lazy_glSetFenceAPPLE(GLuint fence) {if (GLeeInit()) glSetFenceAPPLE(fence);} GLEEPFNGLSETFENCEAPPLEPROC GLeeFuncPtr_glSetFenceAPPLE=GLee_Lazy_glSetFenceAPPLE; #endif #ifndef GLEE_C_DEFINED_glIsFenceAPPLE #define GLEE_C_DEFINED_glIsFenceAPPLE GLboolean __stdcall GLee_Lazy_glIsFenceAPPLE(GLuint fence) {if (GLeeInit()) return glIsFenceAPPLE(fence); return (GLboolean)0;} GLEEPFNGLISFENCEAPPLEPROC GLeeFuncPtr_glIsFenceAPPLE=GLee_Lazy_glIsFenceAPPLE; #endif #ifndef GLEE_C_DEFINED_glTestFenceAPPLE #define GLEE_C_DEFINED_glTestFenceAPPLE GLboolean __stdcall GLee_Lazy_glTestFenceAPPLE(GLuint fence) {if (GLeeInit()) return glTestFenceAPPLE(fence); return (GLboolean)0;} GLEEPFNGLTESTFENCEAPPLEPROC GLeeFuncPtr_glTestFenceAPPLE=GLee_Lazy_glTestFenceAPPLE; #endif #ifndef GLEE_C_DEFINED_glFinishFenceAPPLE #define GLEE_C_DEFINED_glFinishFenceAPPLE void __stdcall GLee_Lazy_glFinishFenceAPPLE(GLuint fence) {if (GLeeInit()) glFinishFenceAPPLE(fence);} GLEEPFNGLFINISHFENCEAPPLEPROC GLeeFuncPtr_glFinishFenceAPPLE=GLee_Lazy_glFinishFenceAPPLE; #endif #ifndef GLEE_C_DEFINED_glTestObjectAPPLE #define GLEE_C_DEFINED_glTestObjectAPPLE GLboolean __stdcall GLee_Lazy_glTestObjectAPPLE(GLenum object, GLuint name) {if (GLeeInit()) return glTestObjectAPPLE(object, name); return (GLboolean)0;} GLEEPFNGLTESTOBJECTAPPLEPROC GLeeFuncPtr_glTestObjectAPPLE=GLee_Lazy_glTestObjectAPPLE; #endif #ifndef GLEE_C_DEFINED_glFinishObjectAPPLE #define GLEE_C_DEFINED_glFinishObjectAPPLE void __stdcall GLee_Lazy_glFinishObjectAPPLE(GLenum object, GLint name) {if (GLeeInit()) glFinishObjectAPPLE(object, name);} GLEEPFNGLFINISHOBJECTAPPLEPROC GLeeFuncPtr_glFinishObjectAPPLE=GLee_Lazy_glFinishObjectAPPLE; #endif #endif /* GL_APPLE_vertex_array_object */ #ifdef __GLEE_GL_APPLE_vertex_array_object #ifndef GLEE_C_DEFINED_glBindVertexArrayAPPLE #define GLEE_C_DEFINED_glBindVertexArrayAPPLE void __stdcall GLee_Lazy_glBindVertexArrayAPPLE(GLuint array) {if (GLeeInit()) glBindVertexArrayAPPLE(array);} GLEEPFNGLBINDVERTEXARRAYAPPLEPROC GLeeFuncPtr_glBindVertexArrayAPPLE=GLee_Lazy_glBindVertexArrayAPPLE; #endif #ifndef GLEE_C_DEFINED_glDeleteVertexArraysAPPLE #define GLEE_C_DEFINED_glDeleteVertexArraysAPPLE void __stdcall GLee_Lazy_glDeleteVertexArraysAPPLE(GLsizei n, const GLuint * arrays) {if (GLeeInit()) glDeleteVertexArraysAPPLE(n, arrays);} GLEEPFNGLDELETEVERTEXARRAYSAPPLEPROC GLeeFuncPtr_glDeleteVertexArraysAPPLE=GLee_Lazy_glDeleteVertexArraysAPPLE; #endif #ifndef GLEE_C_DEFINED_glGenVertexArraysAPPLE #define GLEE_C_DEFINED_glGenVertexArraysAPPLE void __stdcall GLee_Lazy_glGenVertexArraysAPPLE(GLsizei n, GLuint * arrays) {if (GLeeInit()) glGenVertexArraysAPPLE(n, arrays);} GLEEPFNGLGENVERTEXARRAYSAPPLEPROC GLeeFuncPtr_glGenVertexArraysAPPLE=GLee_Lazy_glGenVertexArraysAPPLE; #endif #ifndef GLEE_C_DEFINED_glIsVertexArrayAPPLE #define GLEE_C_DEFINED_glIsVertexArrayAPPLE GLboolean __stdcall GLee_Lazy_glIsVertexArrayAPPLE(GLuint array) {if (GLeeInit()) return glIsVertexArrayAPPLE(array); return (GLboolean)0;} GLEEPFNGLISVERTEXARRAYAPPLEPROC GLeeFuncPtr_glIsVertexArrayAPPLE=GLee_Lazy_glIsVertexArrayAPPLE; #endif #endif /* GL_APPLE_vertex_array_range */ #ifdef __GLEE_GL_APPLE_vertex_array_range #ifndef GLEE_C_DEFINED_glVertexArrayRangeAPPLE #define GLEE_C_DEFINED_glVertexArrayRangeAPPLE void __stdcall GLee_Lazy_glVertexArrayRangeAPPLE(GLsizei length, GLvoid * pointer) {if (GLeeInit()) glVertexArrayRangeAPPLE(length, pointer);} GLEEPFNGLVERTEXARRAYRANGEAPPLEPROC GLeeFuncPtr_glVertexArrayRangeAPPLE=GLee_Lazy_glVertexArrayRangeAPPLE; #endif #ifndef GLEE_C_DEFINED_glFlushVertexArrayRangeAPPLE #define GLEE_C_DEFINED_glFlushVertexArrayRangeAPPLE void __stdcall GLee_Lazy_glFlushVertexArrayRangeAPPLE(GLsizei length, GLvoid * pointer) {if (GLeeInit()) glFlushVertexArrayRangeAPPLE(length, pointer);} GLEEPFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC GLeeFuncPtr_glFlushVertexArrayRangeAPPLE=GLee_Lazy_glFlushVertexArrayRangeAPPLE; #endif #ifndef GLEE_C_DEFINED_glVertexArrayParameteriAPPLE #define GLEE_C_DEFINED_glVertexArrayParameteriAPPLE void __stdcall GLee_Lazy_glVertexArrayParameteriAPPLE(GLenum pname, GLint param) {if (GLeeInit()) glVertexArrayParameteriAPPLE(pname, param);} GLEEPFNGLVERTEXARRAYPARAMETERIAPPLEPROC GLeeFuncPtr_glVertexArrayParameteriAPPLE=GLee_Lazy_glVertexArrayParameteriAPPLE; #endif #endif /* GL_APPLE_ycbcr_422 */ #ifdef __GLEE_GL_APPLE_ycbcr_422 #endif /* GL_S3_s3tc */ #ifdef __GLEE_GL_S3_s3tc #endif /* GL_ATI_draw_buffers */ #ifdef __GLEE_GL_ATI_draw_buffers #ifndef GLEE_C_DEFINED_glDrawBuffersATI #define GLEE_C_DEFINED_glDrawBuffersATI void __stdcall GLee_Lazy_glDrawBuffersATI(GLsizei n, const GLenum * bufs) {if (GLeeInit()) glDrawBuffersATI(n, bufs);} GLEEPFNGLDRAWBUFFERSATIPROC GLeeFuncPtr_glDrawBuffersATI=GLee_Lazy_glDrawBuffersATI; #endif #endif /* GL_ATI_pixel_format_float */ #ifdef __GLEE_GL_ATI_pixel_format_float #endif /* GL_ATI_texture_env_combine3 */ #ifdef __GLEE_GL_ATI_texture_env_combine3 #endif /* GL_ATI_texture_float */ #ifdef __GLEE_GL_ATI_texture_float #endif /* GL_NV_float_buffer */ #ifdef __GLEE_GL_NV_float_buffer #endif /* GL_NV_fragment_program */ #ifdef __GLEE_GL_NV_fragment_program #ifndef GLEE_C_DEFINED_glProgramNamedParameter4fNV #define GLEE_C_DEFINED_glProgramNamedParameter4fNV void __stdcall GLee_Lazy_glProgramNamedParameter4fNV(GLuint id, GLsizei len, const GLubyte * name, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {if (GLeeInit()) glProgramNamedParameter4fNV(id, len, name, x, y, z, w);} GLEEPFNGLPROGRAMNAMEDPARAMETER4FNVPROC GLeeFuncPtr_glProgramNamedParameter4fNV=GLee_Lazy_glProgramNamedParameter4fNV; #endif #ifndef GLEE_C_DEFINED_glProgramNamedParameter4fvNV #define GLEE_C_DEFINED_glProgramNamedParameter4fvNV void __stdcall GLee_Lazy_glProgramNamedParameter4fvNV(GLuint id, GLsizei len, const GLubyte * name, const GLfloat * v) {if (GLeeInit()) glProgramNamedParameter4fvNV(id, len, name, v);} GLEEPFNGLPROGRAMNAMEDPARAMETER4FVNVPROC GLeeFuncPtr_glProgramNamedParameter4fvNV=GLee_Lazy_glProgramNamedParameter4fvNV; #endif #ifndef GLEE_C_DEFINED_glProgramNamedParameter4dNV #define GLEE_C_DEFINED_glProgramNamedParameter4dNV void __stdcall GLee_Lazy_glProgramNamedParameter4dNV(GLuint id, GLsizei len, const GLubyte * name, GLdouble x, GLdouble y, GLdouble z, GLdouble w) {if (GLeeInit()) glProgramNamedParameter4dNV(id, len, name, x, y, z, w);} GLEEPFNGLPROGRAMNAMEDPARAMETER4DNVPROC GLeeFuncPtr_glProgramNamedParameter4dNV=GLee_Lazy_glProgramNamedParameter4dNV; #endif #ifndef GLEE_C_DEFINED_glProgramNamedParameter4dvNV #define GLEE_C_DEFINED_glProgramNamedParameter4dvNV void __stdcall GLee_Lazy_glProgramNamedParameter4dvNV(GLuint id, GLsizei len, const GLubyte * name, const GLdouble * v) {if (GLeeInit()) glProgramNamedParameter4dvNV(id, len, name, v);} GLEEPFNGLPROGRAMNAMEDPARAMETER4DVNVPROC GLeeFuncPtr_glProgramNamedParameter4dvNV=GLee_Lazy_glProgramNamedParameter4dvNV; #endif #ifndef GLEE_C_DEFINED_glGetProgramNamedParameterfvNV #define GLEE_C_DEFINED_glGetProgramNamedParameterfvNV void __stdcall GLee_Lazy_glGetProgramNamedParameterfvNV(GLuint id, GLsizei len, const GLubyte * name, GLfloat * params) {if (GLeeInit()) glGetProgramNamedParameterfvNV(id, len, name, params);} GLEEPFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC GLeeFuncPtr_glGetProgramNamedParameterfvNV=GLee_Lazy_glGetProgramNamedParameterfvNV; #endif #ifndef GLEE_C_DEFINED_glGetProgramNamedParameterdvNV #define GLEE_C_DEFINED_glGetProgramNamedParameterdvNV void __stdcall GLee_Lazy_glGetProgramNamedParameterdvNV(GLuint id, GLsizei len, const GLubyte * name, GLdouble * params) {if (GLeeInit()) glGetProgramNamedParameterdvNV(id, len, name, params);} GLEEPFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC GLeeFuncPtr_glGetProgramNamedParameterdvNV=GLee_Lazy_glGetProgramNamedParameterdvNV; #endif #endif /* GL_NV_half_float */ #ifdef __GLEE_GL_NV_half_float #ifndef GLEE_C_DEFINED_glVertex2hNV #define GLEE_C_DEFINED_glVertex2hNV void __stdcall GLee_Lazy_glVertex2hNV(GLhalfNV x, GLhalfNV y) {if (GLeeInit()) glVertex2hNV(x, y);} GLEEPFNGLVERTEX2HNVPROC GLeeFuncPtr_glVertex2hNV=GLee_Lazy_glVertex2hNV; #endif #ifndef GLEE_C_DEFINED_glVertex2hvNV #define GLEE_C_DEFINED_glVertex2hvNV void __stdcall GLee_Lazy_glVertex2hvNV(const GLhalfNV * v) {if (GLeeInit()) glVertex2hvNV(v);} GLEEPFNGLVERTEX2HVNVPROC GLeeFuncPtr_glVertex2hvNV=GLee_Lazy_glVertex2hvNV; #endif #ifndef GLEE_C_DEFINED_glVertex3hNV #define GLEE_C_DEFINED_glVertex3hNV void __stdcall GLee_Lazy_glVertex3hNV(GLhalfNV x, GLhalfNV y, GLhalfNV z) {if (GLeeInit()) glVertex3hNV(x, y, z);} GLEEPFNGLVERTEX3HNVPROC GLeeFuncPtr_glVertex3hNV=GLee_Lazy_glVertex3hNV; #endif #ifndef GLEE_C_DEFINED_glVertex3hvNV #define GLEE_C_DEFINED_glVertex3hvNV void __stdcall GLee_Lazy_glVertex3hvNV(const GLhalfNV * v) {if (GLeeInit()) glVertex3hvNV(v);} GLEEPFNGLVERTEX3HVNVPROC GLeeFuncPtr_glVertex3hvNV=GLee_Lazy_glVertex3hvNV; #endif #ifndef GLEE_C_DEFINED_glVertex4hNV #define GLEE_C_DEFINED_glVertex4hNV void __stdcall GLee_Lazy_glVertex4hNV(GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w) {if (GLeeInit()) glVertex4hNV(x, y, z, w);} GLEEPFNGLVERTEX4HNVPROC GLeeFuncPtr_glVertex4hNV=GLee_Lazy_glVertex4hNV; #endif #ifndef GLEE_C_DEFINED_glVertex4hvNV #define GLEE_C_DEFINED_glVertex4hvNV void __stdcall GLee_Lazy_glVertex4hvNV(const GLhalfNV * v) {if (GLeeInit()) glVertex4hvNV(v);} GLEEPFNGLVERTEX4HVNVPROC GLeeFuncPtr_glVertex4hvNV=GLee_Lazy_glVertex4hvNV; #endif #ifndef GLEE_C_DEFINED_glNormal3hNV #define GLEE_C_DEFINED_glNormal3hNV void __stdcall GLee_Lazy_glNormal3hNV(GLhalfNV nx, GLhalfNV ny, GLhalfNV nz) {if (GLeeInit()) glNormal3hNV(nx, ny, nz);} GLEEPFNGLNORMAL3HNVPROC GLeeFuncPtr_glNormal3hNV=GLee_Lazy_glNormal3hNV; #endif #ifndef GLEE_C_DEFINED_glNormal3hvNV #define GLEE_C_DEFINED_glNormal3hvNV void __stdcall GLee_Lazy_glNormal3hvNV(const GLhalfNV * v) {if (GLeeInit()) glNormal3hvNV(v);} GLEEPFNGLNORMAL3HVNVPROC GLeeFuncPtr_glNormal3hvNV=GLee_Lazy_glNormal3hvNV; #endif #ifndef GLEE_C_DEFINED_glColor3hNV #define GLEE_C_DEFINED_glColor3hNV void __stdcall GLee_Lazy_glColor3hNV(GLhalfNV red, GLhalfNV green, GLhalfNV blue) {if (GLeeInit()) glColor3hNV(red, green, blue);} GLEEPFNGLCOLOR3HNVPROC GLeeFuncPtr_glColor3hNV=GLee_Lazy_glColor3hNV; #endif #ifndef GLEE_C_DEFINED_glColor3hvNV #define GLEE_C_DEFINED_glColor3hvNV void __stdcall GLee_Lazy_glColor3hvNV(const GLhalfNV * v) {if (GLeeInit()) glColor3hvNV(v);} GLEEPFNGLCOLOR3HVNVPROC GLeeFuncPtr_glColor3hvNV=GLee_Lazy_glColor3hvNV; #endif #ifndef GLEE_C_DEFINED_glColor4hNV #define GLEE_C_DEFINED_glColor4hNV void __stdcall GLee_Lazy_glColor4hNV(GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha) {if (GLeeInit()) glColor4hNV(red, green, blue, alpha);} GLEEPFNGLCOLOR4HNVPROC GLeeFuncPtr_glColor4hNV=GLee_Lazy_glColor4hNV; #endif #ifndef GLEE_C_DEFINED_glColor4hvNV #define GLEE_C_DEFINED_glColor4hvNV void __stdcall GLee_Lazy_glColor4hvNV(const GLhalfNV * v) {if (GLeeInit()) glColor4hvNV(v);} GLEEPFNGLCOLOR4HVNVPROC GLeeFuncPtr_glColor4hvNV=GLee_Lazy_glColor4hvNV; #endif #ifndef GLEE_C_DEFINED_glTexCoord1hNV #define GLEE_C_DEFINED_glTexCoord1hNV void __stdcall GLee_Lazy_glTexCoord1hNV(GLhalfNV s) {if (GLeeInit()) glTexCoord1hNV(s);} GLEEPFNGLTEXCOORD1HNVPROC GLeeFuncPtr_glTexCoord1hNV=GLee_Lazy_glTexCoord1hNV; #endif #ifndef GLEE_C_DEFINED_glTexCoord1hvNV #define GLEE_C_DEFINED_glTexCoord1hvNV void __stdcall GLee_Lazy_glTexCoord1hvNV(const GLhalfNV * v) {if (GLeeInit()) glTexCoord1hvNV(v);} GLEEPFNGLTEXCOORD1HVNVPROC GLeeFuncPtr_glTexCoord1hvNV=GLee_Lazy_glTexCoord1hvNV; #endif #ifndef GLEE_C_DEFINED_glTexCoord2hNV #define GLEE_C_DEFINED_glTexCoord2hNV void __stdcall GLee_Lazy_glTexCoord2hNV(GLhalfNV s, GLhalfNV t) {if (GLeeInit()) glTexCoord2hNV(s, t);} GLEEPFNGLTEXCOORD2HNVPROC GLeeFuncPtr_glTexCoord2hNV=GLee_Lazy_glTexCoord2hNV; #endif #ifndef GLEE_C_DEFINED_glTexCoord2hvNV #define GLEE_C_DEFINED_glTexCoord2hvNV void __stdcall GLee_Lazy_glTexCoord2hvNV(const GLhalfNV * v) {if (GLeeInit()) glTexCoord2hvNV(v);} GLEEPFNGLTEXCOORD2HVNVPROC GLeeFuncPtr_glTexCoord2hvNV=GLee_Lazy_glTexCoord2hvNV; #endif #ifndef GLEE_C_DEFINED_glTexCoord3hNV #define GLEE_C_DEFINED_glTexCoord3hNV void __stdcall GLee_Lazy_glTexCoord3hNV(GLhalfNV s, GLhalfNV t, GLhalfNV r) {if (GLeeInit()) glTexCoord3hNV(s, t, r);} GLEEPFNGLTEXCOORD3HNVPROC GLeeFuncPtr_glTexCoord3hNV=GLee_Lazy_glTexCoord3hNV; #endif #ifndef GLEE_C_DEFINED_glTexCoord3hvNV #define GLEE_C_DEFINED_glTexCoord3hvNV void __stdcall GLee_Lazy_glTexCoord3hvNV(const GLhalfNV * v) {if (GLeeInit()) glTexCoord3hvNV(v);} GLEEPFNGLTEXCOORD3HVNVPROC GLeeFuncPtr_glTexCoord3hvNV=GLee_Lazy_glTexCoord3hvNV; #endif #ifndef GLEE_C_DEFINED_glTexCoord4hNV #define GLEE_C_DEFINED_glTexCoord4hNV void __stdcall GLee_Lazy_glTexCoord4hNV(GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q) {if (GLeeInit()) glTexCoord4hNV(s, t, r, q);} GLEEPFNGLTEXCOORD4HNVPROC GLeeFuncPtr_glTexCoord4hNV=GLee_Lazy_glTexCoord4hNV; #endif #ifndef GLEE_C_DEFINED_glTexCoord4hvNV #define GLEE_C_DEFINED_glTexCoord4hvNV void __stdcall GLee_Lazy_glTexCoord4hvNV(const GLhalfNV * v) {if (GLeeInit()) glTexCoord4hvNV(v);} GLEEPFNGLTEXCOORD4HVNVPROC GLeeFuncPtr_glTexCoord4hvNV=GLee_Lazy_glTexCoord4hvNV; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1hNV #define GLEE_C_DEFINED_glMultiTexCoord1hNV void __stdcall GLee_Lazy_glMultiTexCoord1hNV(GLenum target, GLhalfNV s) {if (GLeeInit()) glMultiTexCoord1hNV(target, s);} GLEEPFNGLMULTITEXCOORD1HNVPROC GLeeFuncPtr_glMultiTexCoord1hNV=GLee_Lazy_glMultiTexCoord1hNV; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1hvNV #define GLEE_C_DEFINED_glMultiTexCoord1hvNV void __stdcall GLee_Lazy_glMultiTexCoord1hvNV(GLenum target, const GLhalfNV * v) {if (GLeeInit()) glMultiTexCoord1hvNV(target, v);} GLEEPFNGLMULTITEXCOORD1HVNVPROC GLeeFuncPtr_glMultiTexCoord1hvNV=GLee_Lazy_glMultiTexCoord1hvNV; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2hNV #define GLEE_C_DEFINED_glMultiTexCoord2hNV void __stdcall GLee_Lazy_glMultiTexCoord2hNV(GLenum target, GLhalfNV s, GLhalfNV t) {if (GLeeInit()) glMultiTexCoord2hNV(target, s, t);} GLEEPFNGLMULTITEXCOORD2HNVPROC GLeeFuncPtr_glMultiTexCoord2hNV=GLee_Lazy_glMultiTexCoord2hNV; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2hvNV #define GLEE_C_DEFINED_glMultiTexCoord2hvNV void __stdcall GLee_Lazy_glMultiTexCoord2hvNV(GLenum target, const GLhalfNV * v) {if (GLeeInit()) glMultiTexCoord2hvNV(target, v);} GLEEPFNGLMULTITEXCOORD2HVNVPROC GLeeFuncPtr_glMultiTexCoord2hvNV=GLee_Lazy_glMultiTexCoord2hvNV; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3hNV #define GLEE_C_DEFINED_glMultiTexCoord3hNV void __stdcall GLee_Lazy_glMultiTexCoord3hNV(GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r) {if (GLeeInit()) glMultiTexCoord3hNV(target, s, t, r);} GLEEPFNGLMULTITEXCOORD3HNVPROC GLeeFuncPtr_glMultiTexCoord3hNV=GLee_Lazy_glMultiTexCoord3hNV; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3hvNV #define GLEE_C_DEFINED_glMultiTexCoord3hvNV void __stdcall GLee_Lazy_glMultiTexCoord3hvNV(GLenum target, const GLhalfNV * v) {if (GLeeInit()) glMultiTexCoord3hvNV(target, v);} GLEEPFNGLMULTITEXCOORD3HVNVPROC GLeeFuncPtr_glMultiTexCoord3hvNV=GLee_Lazy_glMultiTexCoord3hvNV; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4hNV #define GLEE_C_DEFINED_glMultiTexCoord4hNV void __stdcall GLee_Lazy_glMultiTexCoord4hNV(GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q) {if (GLeeInit()) glMultiTexCoord4hNV(target, s, t, r, q);} GLEEPFNGLMULTITEXCOORD4HNVPROC GLeeFuncPtr_glMultiTexCoord4hNV=GLee_Lazy_glMultiTexCoord4hNV; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4hvNV #define GLEE_C_DEFINED_glMultiTexCoord4hvNV void __stdcall GLee_Lazy_glMultiTexCoord4hvNV(GLenum target, const GLhalfNV * v) {if (GLeeInit()) glMultiTexCoord4hvNV(target, v);} GLEEPFNGLMULTITEXCOORD4HVNVPROC GLeeFuncPtr_glMultiTexCoord4hvNV=GLee_Lazy_glMultiTexCoord4hvNV; #endif #ifndef GLEE_C_DEFINED_glFogCoordhNV #define GLEE_C_DEFINED_glFogCoordhNV void __stdcall GLee_Lazy_glFogCoordhNV(GLhalfNV fog) {if (GLeeInit()) glFogCoordhNV(fog);} GLEEPFNGLFOGCOORDHNVPROC GLeeFuncPtr_glFogCoordhNV=GLee_Lazy_glFogCoordhNV; #endif #ifndef GLEE_C_DEFINED_glFogCoordhvNV #define GLEE_C_DEFINED_glFogCoordhvNV void __stdcall GLee_Lazy_glFogCoordhvNV(const GLhalfNV * fog) {if (GLeeInit()) glFogCoordhvNV(fog);} GLEEPFNGLFOGCOORDHVNVPROC GLeeFuncPtr_glFogCoordhvNV=GLee_Lazy_glFogCoordhvNV; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3hNV #define GLEE_C_DEFINED_glSecondaryColor3hNV void __stdcall GLee_Lazy_glSecondaryColor3hNV(GLhalfNV red, GLhalfNV green, GLhalfNV blue) {if (GLeeInit()) glSecondaryColor3hNV(red, green, blue);} GLEEPFNGLSECONDARYCOLOR3HNVPROC GLeeFuncPtr_glSecondaryColor3hNV=GLee_Lazy_glSecondaryColor3hNV; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3hvNV #define GLEE_C_DEFINED_glSecondaryColor3hvNV void __stdcall GLee_Lazy_glSecondaryColor3hvNV(const GLhalfNV * v) {if (GLeeInit()) glSecondaryColor3hvNV(v);} GLEEPFNGLSECONDARYCOLOR3HVNVPROC GLeeFuncPtr_glSecondaryColor3hvNV=GLee_Lazy_glSecondaryColor3hvNV; #endif #ifndef GLEE_C_DEFINED_glVertexWeighthNV #define GLEE_C_DEFINED_glVertexWeighthNV void __stdcall GLee_Lazy_glVertexWeighthNV(GLhalfNV weight) {if (GLeeInit()) glVertexWeighthNV(weight);} GLEEPFNGLVERTEXWEIGHTHNVPROC GLeeFuncPtr_glVertexWeighthNV=GLee_Lazy_glVertexWeighthNV; #endif #ifndef GLEE_C_DEFINED_glVertexWeighthvNV #define GLEE_C_DEFINED_glVertexWeighthvNV void __stdcall GLee_Lazy_glVertexWeighthvNV(const GLhalfNV * weight) {if (GLeeInit()) glVertexWeighthvNV(weight);} GLEEPFNGLVERTEXWEIGHTHVNVPROC GLeeFuncPtr_glVertexWeighthvNV=GLee_Lazy_glVertexWeighthvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1hNV #define GLEE_C_DEFINED_glVertexAttrib1hNV void __stdcall GLee_Lazy_glVertexAttrib1hNV(GLuint index, GLhalfNV x) {if (GLeeInit()) glVertexAttrib1hNV(index, x);} GLEEPFNGLVERTEXATTRIB1HNVPROC GLeeFuncPtr_glVertexAttrib1hNV=GLee_Lazy_glVertexAttrib1hNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1hvNV #define GLEE_C_DEFINED_glVertexAttrib1hvNV void __stdcall GLee_Lazy_glVertexAttrib1hvNV(GLuint index, const GLhalfNV * v) {if (GLeeInit()) glVertexAttrib1hvNV(index, v);} GLEEPFNGLVERTEXATTRIB1HVNVPROC GLeeFuncPtr_glVertexAttrib1hvNV=GLee_Lazy_glVertexAttrib1hvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2hNV #define GLEE_C_DEFINED_glVertexAttrib2hNV void __stdcall GLee_Lazy_glVertexAttrib2hNV(GLuint index, GLhalfNV x, GLhalfNV y) {if (GLeeInit()) glVertexAttrib2hNV(index, x, y);} GLEEPFNGLVERTEXATTRIB2HNVPROC GLeeFuncPtr_glVertexAttrib2hNV=GLee_Lazy_glVertexAttrib2hNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2hvNV #define GLEE_C_DEFINED_glVertexAttrib2hvNV void __stdcall GLee_Lazy_glVertexAttrib2hvNV(GLuint index, const GLhalfNV * v) {if (GLeeInit()) glVertexAttrib2hvNV(index, v);} GLEEPFNGLVERTEXATTRIB2HVNVPROC GLeeFuncPtr_glVertexAttrib2hvNV=GLee_Lazy_glVertexAttrib2hvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3hNV #define GLEE_C_DEFINED_glVertexAttrib3hNV void __stdcall GLee_Lazy_glVertexAttrib3hNV(GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z) {if (GLeeInit()) glVertexAttrib3hNV(index, x, y, z);} GLEEPFNGLVERTEXATTRIB3HNVPROC GLeeFuncPtr_glVertexAttrib3hNV=GLee_Lazy_glVertexAttrib3hNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3hvNV #define GLEE_C_DEFINED_glVertexAttrib3hvNV void __stdcall GLee_Lazy_glVertexAttrib3hvNV(GLuint index, const GLhalfNV * v) {if (GLeeInit()) glVertexAttrib3hvNV(index, v);} GLEEPFNGLVERTEXATTRIB3HVNVPROC GLeeFuncPtr_glVertexAttrib3hvNV=GLee_Lazy_glVertexAttrib3hvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4hNV #define GLEE_C_DEFINED_glVertexAttrib4hNV void __stdcall GLee_Lazy_glVertexAttrib4hNV(GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w) {if (GLeeInit()) glVertexAttrib4hNV(index, x, y, z, w);} GLEEPFNGLVERTEXATTRIB4HNVPROC GLeeFuncPtr_glVertexAttrib4hNV=GLee_Lazy_glVertexAttrib4hNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4hvNV #define GLEE_C_DEFINED_glVertexAttrib4hvNV void __stdcall GLee_Lazy_glVertexAttrib4hvNV(GLuint index, const GLhalfNV * v) {if (GLeeInit()) glVertexAttrib4hvNV(index, v);} GLEEPFNGLVERTEXATTRIB4HVNVPROC GLeeFuncPtr_glVertexAttrib4hvNV=GLee_Lazy_glVertexAttrib4hvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribs1hvNV #define GLEE_C_DEFINED_glVertexAttribs1hvNV void __stdcall GLee_Lazy_glVertexAttribs1hvNV(GLuint index, GLsizei n, const GLhalfNV * v) {if (GLeeInit()) glVertexAttribs1hvNV(index, n, v);} GLEEPFNGLVERTEXATTRIBS1HVNVPROC GLeeFuncPtr_glVertexAttribs1hvNV=GLee_Lazy_glVertexAttribs1hvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribs2hvNV #define GLEE_C_DEFINED_glVertexAttribs2hvNV void __stdcall GLee_Lazy_glVertexAttribs2hvNV(GLuint index, GLsizei n, const GLhalfNV * v) {if (GLeeInit()) glVertexAttribs2hvNV(index, n, v);} GLEEPFNGLVERTEXATTRIBS2HVNVPROC GLeeFuncPtr_glVertexAttribs2hvNV=GLee_Lazy_glVertexAttribs2hvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribs3hvNV #define GLEE_C_DEFINED_glVertexAttribs3hvNV void __stdcall GLee_Lazy_glVertexAttribs3hvNV(GLuint index, GLsizei n, const GLhalfNV * v) {if (GLeeInit()) glVertexAttribs3hvNV(index, n, v);} GLEEPFNGLVERTEXATTRIBS3HVNVPROC GLeeFuncPtr_glVertexAttribs3hvNV=GLee_Lazy_glVertexAttribs3hvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribs4hvNV #define GLEE_C_DEFINED_glVertexAttribs4hvNV void __stdcall GLee_Lazy_glVertexAttribs4hvNV(GLuint index, GLsizei n, const GLhalfNV * v) {if (GLeeInit()) glVertexAttribs4hvNV(index, n, v);} GLEEPFNGLVERTEXATTRIBS4HVNVPROC GLeeFuncPtr_glVertexAttribs4hvNV=GLee_Lazy_glVertexAttribs4hvNV; #endif #endif /* GL_NV_pixel_data_range */ #ifdef __GLEE_GL_NV_pixel_data_range #ifndef GLEE_C_DEFINED_glPixelDataRangeNV #define GLEE_C_DEFINED_glPixelDataRangeNV void __stdcall GLee_Lazy_glPixelDataRangeNV(GLenum target, GLsizei length, const GLvoid * pointer) {if (GLeeInit()) glPixelDataRangeNV(target, length, pointer);} GLEEPFNGLPIXELDATARANGENVPROC GLeeFuncPtr_glPixelDataRangeNV=GLee_Lazy_glPixelDataRangeNV; #endif #ifndef GLEE_C_DEFINED_glFlushPixelDataRangeNV #define GLEE_C_DEFINED_glFlushPixelDataRangeNV void __stdcall GLee_Lazy_glFlushPixelDataRangeNV(GLenum target) {if (GLeeInit()) glFlushPixelDataRangeNV(target);} GLEEPFNGLFLUSHPIXELDATARANGENVPROC GLeeFuncPtr_glFlushPixelDataRangeNV=GLee_Lazy_glFlushPixelDataRangeNV; #endif #endif /* GL_NV_primitive_restart */ #ifdef __GLEE_GL_NV_primitive_restart #ifndef GLEE_C_DEFINED_glPrimitiveRestartNV #define GLEE_C_DEFINED_glPrimitiveRestartNV void __stdcall GLee_Lazy_glPrimitiveRestartNV(void) {if (GLeeInit()) glPrimitiveRestartNV();} GLEEPFNGLPRIMITIVERESTARTNVPROC GLeeFuncPtr_glPrimitiveRestartNV=GLee_Lazy_glPrimitiveRestartNV; #endif #ifndef GLEE_C_DEFINED_glPrimitiveRestartIndexNV #define GLEE_C_DEFINED_glPrimitiveRestartIndexNV void __stdcall GLee_Lazy_glPrimitiveRestartIndexNV(GLuint index) {if (GLeeInit()) glPrimitiveRestartIndexNV(index);} GLEEPFNGLPRIMITIVERESTARTINDEXNVPROC GLeeFuncPtr_glPrimitiveRestartIndexNV=GLee_Lazy_glPrimitiveRestartIndexNV; #endif #endif /* GL_NV_texture_expand_normal */ #ifdef __GLEE_GL_NV_texture_expand_normal #endif /* GL_NV_vertex_program2 */ #ifdef __GLEE_GL_NV_vertex_program2 #endif /* GL_ATI_map_object_buffer */ #ifdef __GLEE_GL_ATI_map_object_buffer #ifndef GLEE_C_DEFINED_glMapObjectBufferATI #define GLEE_C_DEFINED_glMapObjectBufferATI GLvoid* __stdcall GLee_Lazy_glMapObjectBufferATI(GLuint buffer) {if (GLeeInit()) return glMapObjectBufferATI(buffer); return (GLvoid*)0;} GLEEPFNGLMAPOBJECTBUFFERATIPROC GLeeFuncPtr_glMapObjectBufferATI=GLee_Lazy_glMapObjectBufferATI; #endif #ifndef GLEE_C_DEFINED_glUnmapObjectBufferATI #define GLEE_C_DEFINED_glUnmapObjectBufferATI void __stdcall GLee_Lazy_glUnmapObjectBufferATI(GLuint buffer) {if (GLeeInit()) glUnmapObjectBufferATI(buffer);} GLEEPFNGLUNMAPOBJECTBUFFERATIPROC GLeeFuncPtr_glUnmapObjectBufferATI=GLee_Lazy_glUnmapObjectBufferATI; #endif #endif /* GL_ATI_separate_stencil */ #ifdef __GLEE_GL_ATI_separate_stencil #ifndef GLEE_C_DEFINED_glStencilOpSeparateATI #define GLEE_C_DEFINED_glStencilOpSeparateATI void __stdcall GLee_Lazy_glStencilOpSeparateATI(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) {if (GLeeInit()) glStencilOpSeparateATI(face, sfail, dpfail, dppass);} GLEEPFNGLSTENCILOPSEPARATEATIPROC GLeeFuncPtr_glStencilOpSeparateATI=GLee_Lazy_glStencilOpSeparateATI; #endif #ifndef GLEE_C_DEFINED_glStencilFuncSeparateATI #define GLEE_C_DEFINED_glStencilFuncSeparateATI void __stdcall GLee_Lazy_glStencilFuncSeparateATI(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask) {if (GLeeInit()) glStencilFuncSeparateATI(frontfunc, backfunc, ref, mask);} GLEEPFNGLSTENCILFUNCSEPARATEATIPROC GLeeFuncPtr_glStencilFuncSeparateATI=GLee_Lazy_glStencilFuncSeparateATI; #endif #endif /* GL_ATI_vertex_attrib_array_object */ #ifdef __GLEE_GL_ATI_vertex_attrib_array_object #ifndef GLEE_C_DEFINED_glVertexAttribArrayObjectATI #define GLEE_C_DEFINED_glVertexAttribArrayObjectATI void __stdcall GLee_Lazy_glVertexAttribArrayObjectATI(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset) {if (GLeeInit()) glVertexAttribArrayObjectATI(index, size, type, normalized, stride, buffer, offset);} GLEEPFNGLVERTEXATTRIBARRAYOBJECTATIPROC GLeeFuncPtr_glVertexAttribArrayObjectATI=GLee_Lazy_glVertexAttribArrayObjectATI; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribArrayObjectfvATI #define GLEE_C_DEFINED_glGetVertexAttribArrayObjectfvATI void __stdcall GLee_Lazy_glGetVertexAttribArrayObjectfvATI(GLuint index, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetVertexAttribArrayObjectfvATI(index, pname, params);} GLEEPFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC GLeeFuncPtr_glGetVertexAttribArrayObjectfvATI=GLee_Lazy_glGetVertexAttribArrayObjectfvATI; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribArrayObjectivATI #define GLEE_C_DEFINED_glGetVertexAttribArrayObjectivATI void __stdcall GLee_Lazy_glGetVertexAttribArrayObjectivATI(GLuint index, GLenum pname, GLint * params) {if (GLeeInit()) glGetVertexAttribArrayObjectivATI(index, pname, params);} GLEEPFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC GLeeFuncPtr_glGetVertexAttribArrayObjectivATI=GLee_Lazy_glGetVertexAttribArrayObjectivATI; #endif #endif /* GL_OES_byte_coordinates */ #ifdef __GLEE_GL_OES_byte_coordinates #ifndef GLEE_C_DEFINED_glMultiTexCoord1bOES #define GLEE_C_DEFINED_glMultiTexCoord1bOES void __stdcall GLee_Lazy_glMultiTexCoord1bOES(GLenum texture, GLbyte s) {if (GLeeInit()) glMultiTexCoord1bOES(texture, s);} GLEEPFNGLMULTITEXCOORD1BOESPROC GLeeFuncPtr_glMultiTexCoord1bOES=GLee_Lazy_glMultiTexCoord1bOES; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1bvOES #define GLEE_C_DEFINED_glMultiTexCoord1bvOES void __stdcall GLee_Lazy_glMultiTexCoord1bvOES(GLenum texture, const GLbyte * coords) {if (GLeeInit()) glMultiTexCoord1bvOES(texture, coords);} GLEEPFNGLMULTITEXCOORD1BVOESPROC GLeeFuncPtr_glMultiTexCoord1bvOES=GLee_Lazy_glMultiTexCoord1bvOES; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2bOES #define GLEE_C_DEFINED_glMultiTexCoord2bOES void __stdcall GLee_Lazy_glMultiTexCoord2bOES(GLenum texture, GLbyte s, GLbyte t) {if (GLeeInit()) glMultiTexCoord2bOES(texture, s, t);} GLEEPFNGLMULTITEXCOORD2BOESPROC GLeeFuncPtr_glMultiTexCoord2bOES=GLee_Lazy_glMultiTexCoord2bOES; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2bvOES #define GLEE_C_DEFINED_glMultiTexCoord2bvOES void __stdcall GLee_Lazy_glMultiTexCoord2bvOES(GLenum texture, const GLbyte * coords) {if (GLeeInit()) glMultiTexCoord2bvOES(texture, coords);} GLEEPFNGLMULTITEXCOORD2BVOESPROC GLeeFuncPtr_glMultiTexCoord2bvOES=GLee_Lazy_glMultiTexCoord2bvOES; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3bOES #define GLEE_C_DEFINED_glMultiTexCoord3bOES void __stdcall GLee_Lazy_glMultiTexCoord3bOES(GLenum texture, GLbyte s, GLbyte t, GLbyte r) {if (GLeeInit()) glMultiTexCoord3bOES(texture, s, t, r);} GLEEPFNGLMULTITEXCOORD3BOESPROC GLeeFuncPtr_glMultiTexCoord3bOES=GLee_Lazy_glMultiTexCoord3bOES; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3bvOES #define GLEE_C_DEFINED_glMultiTexCoord3bvOES void __stdcall GLee_Lazy_glMultiTexCoord3bvOES(GLenum texture, const GLbyte * coords) {if (GLeeInit()) glMultiTexCoord3bvOES(texture, coords);} GLEEPFNGLMULTITEXCOORD3BVOESPROC GLeeFuncPtr_glMultiTexCoord3bvOES=GLee_Lazy_glMultiTexCoord3bvOES; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4bOES #define GLEE_C_DEFINED_glMultiTexCoord4bOES void __stdcall GLee_Lazy_glMultiTexCoord4bOES(GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q) {if (GLeeInit()) glMultiTexCoord4bOES(texture, s, t, r, q);} GLEEPFNGLMULTITEXCOORD4BOESPROC GLeeFuncPtr_glMultiTexCoord4bOES=GLee_Lazy_glMultiTexCoord4bOES; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4bvOES #define GLEE_C_DEFINED_glMultiTexCoord4bvOES void __stdcall GLee_Lazy_glMultiTexCoord4bvOES(GLenum texture, const GLbyte * coords) {if (GLeeInit()) glMultiTexCoord4bvOES(texture, coords);} GLEEPFNGLMULTITEXCOORD4BVOESPROC GLeeFuncPtr_glMultiTexCoord4bvOES=GLee_Lazy_glMultiTexCoord4bvOES; #endif #ifndef GLEE_C_DEFINED_glTexCoord1bOES #define GLEE_C_DEFINED_glTexCoord1bOES void __stdcall GLee_Lazy_glTexCoord1bOES(GLbyte s) {if (GLeeInit()) glTexCoord1bOES(s);} GLEEPFNGLTEXCOORD1BOESPROC GLeeFuncPtr_glTexCoord1bOES=GLee_Lazy_glTexCoord1bOES; #endif #ifndef GLEE_C_DEFINED_glTexCoord1bvOES #define GLEE_C_DEFINED_glTexCoord1bvOES void __stdcall GLee_Lazy_glTexCoord1bvOES(const GLbyte * coords) {if (GLeeInit()) glTexCoord1bvOES(coords);} GLEEPFNGLTEXCOORD1BVOESPROC GLeeFuncPtr_glTexCoord1bvOES=GLee_Lazy_glTexCoord1bvOES; #endif #ifndef GLEE_C_DEFINED_glTexCoord2bOES #define GLEE_C_DEFINED_glTexCoord2bOES void __stdcall GLee_Lazy_glTexCoord2bOES(GLbyte s, GLbyte t) {if (GLeeInit()) glTexCoord2bOES(s, t);} GLEEPFNGLTEXCOORD2BOESPROC GLeeFuncPtr_glTexCoord2bOES=GLee_Lazy_glTexCoord2bOES; #endif #ifndef GLEE_C_DEFINED_glTexCoord2bvOES #define GLEE_C_DEFINED_glTexCoord2bvOES void __stdcall GLee_Lazy_glTexCoord2bvOES(const GLbyte * coords) {if (GLeeInit()) glTexCoord2bvOES(coords);} GLEEPFNGLTEXCOORD2BVOESPROC GLeeFuncPtr_glTexCoord2bvOES=GLee_Lazy_glTexCoord2bvOES; #endif #ifndef GLEE_C_DEFINED_glTexCoord3bOES #define GLEE_C_DEFINED_glTexCoord3bOES void __stdcall GLee_Lazy_glTexCoord3bOES(GLbyte s, GLbyte t, GLbyte r) {if (GLeeInit()) glTexCoord3bOES(s, t, r);} GLEEPFNGLTEXCOORD3BOESPROC GLeeFuncPtr_glTexCoord3bOES=GLee_Lazy_glTexCoord3bOES; #endif #ifndef GLEE_C_DEFINED_glTexCoord3bvOES #define GLEE_C_DEFINED_glTexCoord3bvOES void __stdcall GLee_Lazy_glTexCoord3bvOES(const GLbyte * coords) {if (GLeeInit()) glTexCoord3bvOES(coords);} GLEEPFNGLTEXCOORD3BVOESPROC GLeeFuncPtr_glTexCoord3bvOES=GLee_Lazy_glTexCoord3bvOES; #endif #ifndef GLEE_C_DEFINED_glTexCoord4bOES #define GLEE_C_DEFINED_glTexCoord4bOES void __stdcall GLee_Lazy_glTexCoord4bOES(GLbyte s, GLbyte t, GLbyte r, GLbyte q) {if (GLeeInit()) glTexCoord4bOES(s, t, r, q);} GLEEPFNGLTEXCOORD4BOESPROC GLeeFuncPtr_glTexCoord4bOES=GLee_Lazy_glTexCoord4bOES; #endif #ifndef GLEE_C_DEFINED_glTexCoord4bvOES #define GLEE_C_DEFINED_glTexCoord4bvOES void __stdcall GLee_Lazy_glTexCoord4bvOES(const GLbyte * coords) {if (GLeeInit()) glTexCoord4bvOES(coords);} GLEEPFNGLTEXCOORD4BVOESPROC GLeeFuncPtr_glTexCoord4bvOES=GLee_Lazy_glTexCoord4bvOES; #endif #ifndef GLEE_C_DEFINED_glVertex2bOES #define GLEE_C_DEFINED_glVertex2bOES void __stdcall GLee_Lazy_glVertex2bOES(GLbyte x) {if (GLeeInit()) glVertex2bOES(x);} GLEEPFNGLVERTEX2BOESPROC GLeeFuncPtr_glVertex2bOES=GLee_Lazy_glVertex2bOES; #endif #ifndef GLEE_C_DEFINED_glVertex2bvOES #define GLEE_C_DEFINED_glVertex2bvOES void __stdcall GLee_Lazy_glVertex2bvOES(const GLbyte * coords) {if (GLeeInit()) glVertex2bvOES(coords);} GLEEPFNGLVERTEX2BVOESPROC GLeeFuncPtr_glVertex2bvOES=GLee_Lazy_glVertex2bvOES; #endif #ifndef GLEE_C_DEFINED_glVertex3bOES #define GLEE_C_DEFINED_glVertex3bOES void __stdcall GLee_Lazy_glVertex3bOES(GLbyte x, GLbyte y) {if (GLeeInit()) glVertex3bOES(x, y);} GLEEPFNGLVERTEX3BOESPROC GLeeFuncPtr_glVertex3bOES=GLee_Lazy_glVertex3bOES; #endif #ifndef GLEE_C_DEFINED_glVertex3bvOES #define GLEE_C_DEFINED_glVertex3bvOES void __stdcall GLee_Lazy_glVertex3bvOES(const GLbyte * coords) {if (GLeeInit()) glVertex3bvOES(coords);} GLEEPFNGLVERTEX3BVOESPROC GLeeFuncPtr_glVertex3bvOES=GLee_Lazy_glVertex3bvOES; #endif #ifndef GLEE_C_DEFINED_glVertex4bOES #define GLEE_C_DEFINED_glVertex4bOES void __stdcall GLee_Lazy_glVertex4bOES(GLbyte x, GLbyte y, GLbyte z) {if (GLeeInit()) glVertex4bOES(x, y, z);} GLEEPFNGLVERTEX4BOESPROC GLeeFuncPtr_glVertex4bOES=GLee_Lazy_glVertex4bOES; #endif #ifndef GLEE_C_DEFINED_glVertex4bvOES #define GLEE_C_DEFINED_glVertex4bvOES void __stdcall GLee_Lazy_glVertex4bvOES(const GLbyte * coords) {if (GLeeInit()) glVertex4bvOES(coords);} GLEEPFNGLVERTEX4BVOESPROC GLeeFuncPtr_glVertex4bvOES=GLee_Lazy_glVertex4bvOES; #endif #endif /* GL_OES_fixed_point */ #ifdef __GLEE_GL_OES_fixed_point #ifndef GLEE_C_DEFINED_glAccumxOES #define GLEE_C_DEFINED_glAccumxOES void __stdcall GLee_Lazy_glAccumxOES(GLenum op, GLfixed value) {if (GLeeInit()) glAccumxOES(op, value);} GLEEPFNGLACCUMXOESPROC GLeeFuncPtr_glAccumxOES=GLee_Lazy_glAccumxOES; #endif #ifndef GLEE_C_DEFINED_glAlphaFuncxOES #define GLEE_C_DEFINED_glAlphaFuncxOES void __stdcall GLee_Lazy_glAlphaFuncxOES(GLenum func, GLfixed ref) {if (GLeeInit()) glAlphaFuncxOES(func, ref);} GLEEPFNGLALPHAFUNCXOESPROC GLeeFuncPtr_glAlphaFuncxOES=GLee_Lazy_glAlphaFuncxOES; #endif #ifndef GLEE_C_DEFINED_glBitmapxOES #define GLEE_C_DEFINED_glBitmapxOES void __stdcall GLee_Lazy_glBitmapxOES(GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte * bitmap) {if (GLeeInit()) glBitmapxOES(width, height, xorig, yorig, xmove, ymove, bitmap);} GLEEPFNGLBITMAPXOESPROC GLeeFuncPtr_glBitmapxOES=GLee_Lazy_glBitmapxOES; #endif #ifndef GLEE_C_DEFINED_glBlendColorxOES #define GLEE_C_DEFINED_glBlendColorxOES void __stdcall GLee_Lazy_glBlendColorxOES(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha) {if (GLeeInit()) glBlendColorxOES(red, green, blue, alpha);} GLEEPFNGLBLENDCOLORXOESPROC GLeeFuncPtr_glBlendColorxOES=GLee_Lazy_glBlendColorxOES; #endif #ifndef GLEE_C_DEFINED_glClearAccumxOES #define GLEE_C_DEFINED_glClearAccumxOES void __stdcall GLee_Lazy_glClearAccumxOES(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha) {if (GLeeInit()) glClearAccumxOES(red, green, blue, alpha);} GLEEPFNGLCLEARACCUMXOESPROC GLeeFuncPtr_glClearAccumxOES=GLee_Lazy_glClearAccumxOES; #endif #ifndef GLEE_C_DEFINED_glClearColorxOES #define GLEE_C_DEFINED_glClearColorxOES void __stdcall GLee_Lazy_glClearColorxOES(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha) {if (GLeeInit()) glClearColorxOES(red, green, blue, alpha);} GLEEPFNGLCLEARCOLORXOESPROC GLeeFuncPtr_glClearColorxOES=GLee_Lazy_glClearColorxOES; #endif #ifndef GLEE_C_DEFINED_glClearDepthxOES #define GLEE_C_DEFINED_glClearDepthxOES void __stdcall GLee_Lazy_glClearDepthxOES(GLfixed depth) {if (GLeeInit()) glClearDepthxOES(depth);} GLEEPFNGLCLEARDEPTHXOESPROC GLeeFuncPtr_glClearDepthxOES=GLee_Lazy_glClearDepthxOES; #endif #ifndef GLEE_C_DEFINED_glClipPlanexOES #define GLEE_C_DEFINED_glClipPlanexOES void __stdcall GLee_Lazy_glClipPlanexOES(GLenum plane, const GLfixed * equation) {if (GLeeInit()) glClipPlanexOES(plane, equation);} GLEEPFNGLCLIPPLANEXOESPROC GLeeFuncPtr_glClipPlanexOES=GLee_Lazy_glClipPlanexOES; #endif #ifndef GLEE_C_DEFINED_glColor3xOES #define GLEE_C_DEFINED_glColor3xOES void __stdcall GLee_Lazy_glColor3xOES(GLfixed red, GLfixed green, GLfixed blue) {if (GLeeInit()) glColor3xOES(red, green, blue);} GLEEPFNGLCOLOR3XOESPROC GLeeFuncPtr_glColor3xOES=GLee_Lazy_glColor3xOES; #endif #ifndef GLEE_C_DEFINED_glColor4xOES #define GLEE_C_DEFINED_glColor4xOES void __stdcall GLee_Lazy_glColor4xOES(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha) {if (GLeeInit()) glColor4xOES(red, green, blue, alpha);} GLEEPFNGLCOLOR4XOESPROC GLeeFuncPtr_glColor4xOES=GLee_Lazy_glColor4xOES; #endif #ifndef GLEE_C_DEFINED_glColor3xvOES #define GLEE_C_DEFINED_glColor3xvOES void __stdcall GLee_Lazy_glColor3xvOES(const GLfixed * components) {if (GLeeInit()) glColor3xvOES(components);} GLEEPFNGLCOLOR3XVOESPROC GLeeFuncPtr_glColor3xvOES=GLee_Lazy_glColor3xvOES; #endif #ifndef GLEE_C_DEFINED_glColor4xvOES #define GLEE_C_DEFINED_glColor4xvOES void __stdcall GLee_Lazy_glColor4xvOES(const GLfixed * components) {if (GLeeInit()) glColor4xvOES(components);} GLEEPFNGLCOLOR4XVOESPROC GLeeFuncPtr_glColor4xvOES=GLee_Lazy_glColor4xvOES; #endif #ifndef GLEE_C_DEFINED_glConvolutionParameterxOES #define GLEE_C_DEFINED_glConvolutionParameterxOES void __stdcall GLee_Lazy_glConvolutionParameterxOES(GLenum target, GLenum pname, GLfixed param) {if (GLeeInit()) glConvolutionParameterxOES(target, pname, param);} GLEEPFNGLCONVOLUTIONPARAMETERXOESPROC GLeeFuncPtr_glConvolutionParameterxOES=GLee_Lazy_glConvolutionParameterxOES; #endif #ifndef GLEE_C_DEFINED_glConvolutionParameterxvOES #define GLEE_C_DEFINED_glConvolutionParameterxvOES void __stdcall GLee_Lazy_glConvolutionParameterxvOES(GLenum target, GLenum pname, const GLfixed * params) {if (GLeeInit()) glConvolutionParameterxvOES(target, pname, params);} GLEEPFNGLCONVOLUTIONPARAMETERXVOESPROC GLeeFuncPtr_glConvolutionParameterxvOES=GLee_Lazy_glConvolutionParameterxvOES; #endif #ifndef GLEE_C_DEFINED_glDepthRangexOES #define GLEE_C_DEFINED_glDepthRangexOES void __stdcall GLee_Lazy_glDepthRangexOES(GLfixed n, GLfixed f) {if (GLeeInit()) glDepthRangexOES(n, f);} GLEEPFNGLDEPTHRANGEXOESPROC GLeeFuncPtr_glDepthRangexOES=GLee_Lazy_glDepthRangexOES; #endif #ifndef GLEE_C_DEFINED_glEvalCoord1xOES #define GLEE_C_DEFINED_glEvalCoord1xOES void __stdcall GLee_Lazy_glEvalCoord1xOES(GLfixed u) {if (GLeeInit()) glEvalCoord1xOES(u);} GLEEPFNGLEVALCOORD1XOESPROC GLeeFuncPtr_glEvalCoord1xOES=GLee_Lazy_glEvalCoord1xOES; #endif #ifndef GLEE_C_DEFINED_glEvalCoord2xOES #define GLEE_C_DEFINED_glEvalCoord2xOES void __stdcall GLee_Lazy_glEvalCoord2xOES(GLfixed u, GLfixed v) {if (GLeeInit()) glEvalCoord2xOES(u, v);} GLEEPFNGLEVALCOORD2XOESPROC GLeeFuncPtr_glEvalCoord2xOES=GLee_Lazy_glEvalCoord2xOES; #endif #ifndef GLEE_C_DEFINED_glEvalCoord1xvOES #define GLEE_C_DEFINED_glEvalCoord1xvOES void __stdcall GLee_Lazy_glEvalCoord1xvOES(const GLfixed * coords) {if (GLeeInit()) glEvalCoord1xvOES(coords);} GLEEPFNGLEVALCOORD1XVOESPROC GLeeFuncPtr_glEvalCoord1xvOES=GLee_Lazy_glEvalCoord1xvOES; #endif #ifndef GLEE_C_DEFINED_glEvalCoord2xvOES #define GLEE_C_DEFINED_glEvalCoord2xvOES void __stdcall GLee_Lazy_glEvalCoord2xvOES(const GLfixed * coords) {if (GLeeInit()) glEvalCoord2xvOES(coords);} GLEEPFNGLEVALCOORD2XVOESPROC GLeeFuncPtr_glEvalCoord2xvOES=GLee_Lazy_glEvalCoord2xvOES; #endif #ifndef GLEE_C_DEFINED_glFeedbackBufferxOES #define GLEE_C_DEFINED_glFeedbackBufferxOES void __stdcall GLee_Lazy_glFeedbackBufferxOES(GLsizei n, GLenum type, const GLfixed * buffer) {if (GLeeInit()) glFeedbackBufferxOES(n, type, buffer);} GLEEPFNGLFEEDBACKBUFFERXOESPROC GLeeFuncPtr_glFeedbackBufferxOES=GLee_Lazy_glFeedbackBufferxOES; #endif #ifndef GLEE_C_DEFINED_glFogxOES #define GLEE_C_DEFINED_glFogxOES void __stdcall GLee_Lazy_glFogxOES(GLenum pname, GLfixed param) {if (GLeeInit()) glFogxOES(pname, param);} GLEEPFNGLFOGXOESPROC GLeeFuncPtr_glFogxOES=GLee_Lazy_glFogxOES; #endif #ifndef GLEE_C_DEFINED_glFogxvOES #define GLEE_C_DEFINED_glFogxvOES void __stdcall GLee_Lazy_glFogxvOES(GLenum pname, const GLfixed * param) {if (GLeeInit()) glFogxvOES(pname, param);} GLEEPFNGLFOGXVOESPROC GLeeFuncPtr_glFogxvOES=GLee_Lazy_glFogxvOES; #endif #ifndef GLEE_C_DEFINED_glFrustumxOES #define GLEE_C_DEFINED_glFrustumxOES void __stdcall GLee_Lazy_glFrustumxOES(GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f) {if (GLeeInit()) glFrustumxOES(l, r, b, t, n, f);} GLEEPFNGLFRUSTUMXOESPROC GLeeFuncPtr_glFrustumxOES=GLee_Lazy_glFrustumxOES; #endif #ifndef GLEE_C_DEFINED_glGetClipPlanexOES #define GLEE_C_DEFINED_glGetClipPlanexOES void __stdcall GLee_Lazy_glGetClipPlanexOES(GLenum plane, GLfixed * equation) {if (GLeeInit()) glGetClipPlanexOES(plane, equation);} GLEEPFNGLGETCLIPPLANEXOESPROC GLeeFuncPtr_glGetClipPlanexOES=GLee_Lazy_glGetClipPlanexOES; #endif #ifndef GLEE_C_DEFINED_glGetConvolutionParameterxvOES #define GLEE_C_DEFINED_glGetConvolutionParameterxvOES void __stdcall GLee_Lazy_glGetConvolutionParameterxvOES(GLenum target, GLenum pname, GLfixed * params) {if (GLeeInit()) glGetConvolutionParameterxvOES(target, pname, params);} GLEEPFNGLGETCONVOLUTIONPARAMETERXVOESPROC GLeeFuncPtr_glGetConvolutionParameterxvOES=GLee_Lazy_glGetConvolutionParameterxvOES; #endif #ifndef GLEE_C_DEFINED_glGetFixedvOES #define GLEE_C_DEFINED_glGetFixedvOES void __stdcall GLee_Lazy_glGetFixedvOES(GLenum pname, GLfixed * params) {if (GLeeInit()) glGetFixedvOES(pname, params);} GLEEPFNGLGETFIXEDVOESPROC GLeeFuncPtr_glGetFixedvOES=GLee_Lazy_glGetFixedvOES; #endif #ifndef GLEE_C_DEFINED_glGetHistogramParameterxvOES #define GLEE_C_DEFINED_glGetHistogramParameterxvOES void __stdcall GLee_Lazy_glGetHistogramParameterxvOES(GLenum target, GLenum pname, GLfixed * params) {if (GLeeInit()) glGetHistogramParameterxvOES(target, pname, params);} GLEEPFNGLGETHISTOGRAMPARAMETERXVOESPROC GLeeFuncPtr_glGetHistogramParameterxvOES=GLee_Lazy_glGetHistogramParameterxvOES; #endif #ifndef GLEE_C_DEFINED_glGetLightxOES #define GLEE_C_DEFINED_glGetLightxOES void __stdcall GLee_Lazy_glGetLightxOES(GLenum light, GLenum pname, GLfixed * params) {if (GLeeInit()) glGetLightxOES(light, pname, params);} GLEEPFNGLGETLIGHTXOESPROC GLeeFuncPtr_glGetLightxOES=GLee_Lazy_glGetLightxOES; #endif #ifndef GLEE_C_DEFINED_glGetMapxvOES #define GLEE_C_DEFINED_glGetMapxvOES void __stdcall GLee_Lazy_glGetMapxvOES(GLenum target, GLenum query, GLfixed * v) {if (GLeeInit()) glGetMapxvOES(target, query, v);} GLEEPFNGLGETMAPXVOESPROC GLeeFuncPtr_glGetMapxvOES=GLee_Lazy_glGetMapxvOES; #endif #ifndef GLEE_C_DEFINED_glGetMaterialxOES #define GLEE_C_DEFINED_glGetMaterialxOES void __stdcall GLee_Lazy_glGetMaterialxOES(GLenum face, GLenum pname, GLfixed param) {if (GLeeInit()) glGetMaterialxOES(face, pname, param);} GLEEPFNGLGETMATERIALXOESPROC GLeeFuncPtr_glGetMaterialxOES=GLee_Lazy_glGetMaterialxOES; #endif #ifndef GLEE_C_DEFINED_glGetPixelMapxv #define GLEE_C_DEFINED_glGetPixelMapxv void __stdcall GLee_Lazy_glGetPixelMapxv(GLenum map, GLint size, GLfixed * values) {if (GLeeInit()) glGetPixelMapxv(map, size, values);} GLEEPFNGLGETPIXELMAPXVPROC GLeeFuncPtr_glGetPixelMapxv=GLee_Lazy_glGetPixelMapxv; #endif #ifndef GLEE_C_DEFINED_glGetTexEnvxvOES #define GLEE_C_DEFINED_glGetTexEnvxvOES void __stdcall GLee_Lazy_glGetTexEnvxvOES(GLenum target, GLenum pname, GLfixed * params) {if (GLeeInit()) glGetTexEnvxvOES(target, pname, params);} GLEEPFNGLGETTEXENVXVOESPROC GLeeFuncPtr_glGetTexEnvxvOES=GLee_Lazy_glGetTexEnvxvOES; #endif #ifndef GLEE_C_DEFINED_glGetTexGenxvOES #define GLEE_C_DEFINED_glGetTexGenxvOES void __stdcall GLee_Lazy_glGetTexGenxvOES(GLenum coord, GLenum pname, GLfixed * params) {if (GLeeInit()) glGetTexGenxvOES(coord, pname, params);} GLEEPFNGLGETTEXGENXVOESPROC GLeeFuncPtr_glGetTexGenxvOES=GLee_Lazy_glGetTexGenxvOES; #endif #ifndef GLEE_C_DEFINED_glGetTexLevelParameterxvOES #define GLEE_C_DEFINED_glGetTexLevelParameterxvOES void __stdcall GLee_Lazy_glGetTexLevelParameterxvOES(GLenum target, GLint level, GLenum pname, GLfixed * params) {if (GLeeInit()) glGetTexLevelParameterxvOES(target, level, pname, params);} GLEEPFNGLGETTEXLEVELPARAMETERXVOESPROC GLeeFuncPtr_glGetTexLevelParameterxvOES=GLee_Lazy_glGetTexLevelParameterxvOES; #endif #ifndef GLEE_C_DEFINED_glGetTexParameterxvOES #define GLEE_C_DEFINED_glGetTexParameterxvOES void __stdcall GLee_Lazy_glGetTexParameterxvOES(GLenum target, GLenum pname, GLfixed * params) {if (GLeeInit()) glGetTexParameterxvOES(target, pname, params);} GLEEPFNGLGETTEXPARAMETERXVOESPROC GLeeFuncPtr_glGetTexParameterxvOES=GLee_Lazy_glGetTexParameterxvOES; #endif #ifndef GLEE_C_DEFINED_glIndexxOES #define GLEE_C_DEFINED_glIndexxOES void __stdcall GLee_Lazy_glIndexxOES(GLfixed component) {if (GLeeInit()) glIndexxOES(component);} GLEEPFNGLINDEXXOESPROC GLeeFuncPtr_glIndexxOES=GLee_Lazy_glIndexxOES; #endif #ifndef GLEE_C_DEFINED_glIndexxvOES #define GLEE_C_DEFINED_glIndexxvOES void __stdcall GLee_Lazy_glIndexxvOES(const GLfixed * component) {if (GLeeInit()) glIndexxvOES(component);} GLEEPFNGLINDEXXVOESPROC GLeeFuncPtr_glIndexxvOES=GLee_Lazy_glIndexxvOES; #endif #ifndef GLEE_C_DEFINED_glLightModelxOES #define GLEE_C_DEFINED_glLightModelxOES void __stdcall GLee_Lazy_glLightModelxOES(GLenum pname, GLfixed param) {if (GLeeInit()) glLightModelxOES(pname, param);} GLEEPFNGLLIGHTMODELXOESPROC GLeeFuncPtr_glLightModelxOES=GLee_Lazy_glLightModelxOES; #endif #ifndef GLEE_C_DEFINED_glLightModelxvOES #define GLEE_C_DEFINED_glLightModelxvOES void __stdcall GLee_Lazy_glLightModelxvOES(GLenum pname, const GLfixed * param) {if (GLeeInit()) glLightModelxvOES(pname, param);} GLEEPFNGLLIGHTMODELXVOESPROC GLeeFuncPtr_glLightModelxvOES=GLee_Lazy_glLightModelxvOES; #endif #ifndef GLEE_C_DEFINED_glLightxOES #define GLEE_C_DEFINED_glLightxOES void __stdcall GLee_Lazy_glLightxOES(GLenum light, GLenum pname, GLfixed param) {if (GLeeInit()) glLightxOES(light, pname, param);} GLEEPFNGLLIGHTXOESPROC GLeeFuncPtr_glLightxOES=GLee_Lazy_glLightxOES; #endif #ifndef GLEE_C_DEFINED_glLightxvOES #define GLEE_C_DEFINED_glLightxvOES void __stdcall GLee_Lazy_glLightxvOES(GLenum light, GLenum pname, const GLfixed * params) {if (GLeeInit()) glLightxvOES(light, pname, params);} GLEEPFNGLLIGHTXVOESPROC GLeeFuncPtr_glLightxvOES=GLee_Lazy_glLightxvOES; #endif #ifndef GLEE_C_DEFINED_glLineWidthxOES #define GLEE_C_DEFINED_glLineWidthxOES void __stdcall GLee_Lazy_glLineWidthxOES(GLfixed width) {if (GLeeInit()) glLineWidthxOES(width);} GLEEPFNGLLINEWIDTHXOESPROC GLeeFuncPtr_glLineWidthxOES=GLee_Lazy_glLineWidthxOES; #endif #ifndef GLEE_C_DEFINED_glLoadMatrixxOES #define GLEE_C_DEFINED_glLoadMatrixxOES void __stdcall GLee_Lazy_glLoadMatrixxOES(const GLfixed * m) {if (GLeeInit()) glLoadMatrixxOES(m);} GLEEPFNGLLOADMATRIXXOESPROC GLeeFuncPtr_glLoadMatrixxOES=GLee_Lazy_glLoadMatrixxOES; #endif #ifndef GLEE_C_DEFINED_glLoadTransposeMatrixxOES #define GLEE_C_DEFINED_glLoadTransposeMatrixxOES void __stdcall GLee_Lazy_glLoadTransposeMatrixxOES(const GLfixed * m) {if (GLeeInit()) glLoadTransposeMatrixxOES(m);} GLEEPFNGLLOADTRANSPOSEMATRIXXOESPROC GLeeFuncPtr_glLoadTransposeMatrixxOES=GLee_Lazy_glLoadTransposeMatrixxOES; #endif #ifndef GLEE_C_DEFINED_glMap1xOES #define GLEE_C_DEFINED_glMap1xOES void __stdcall GLee_Lazy_glMap1xOES(GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points) {if (GLeeInit()) glMap1xOES(target, u1, u2, stride, order, points);} GLEEPFNGLMAP1XOESPROC GLeeFuncPtr_glMap1xOES=GLee_Lazy_glMap1xOES; #endif #ifndef GLEE_C_DEFINED_glMap2xOES #define GLEE_C_DEFINED_glMap2xOES void __stdcall GLee_Lazy_glMap2xOES(GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points) {if (GLeeInit()) glMap2xOES(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points);} GLEEPFNGLMAP2XOESPROC GLeeFuncPtr_glMap2xOES=GLee_Lazy_glMap2xOES; #endif #ifndef GLEE_C_DEFINED_glMapGrid1xOES #define GLEE_C_DEFINED_glMapGrid1xOES void __stdcall GLee_Lazy_glMapGrid1xOES(GLint n, GLfixed u1, GLfixed u2) {if (GLeeInit()) glMapGrid1xOES(n, u1, u2);} GLEEPFNGLMAPGRID1XOESPROC GLeeFuncPtr_glMapGrid1xOES=GLee_Lazy_glMapGrid1xOES; #endif #ifndef GLEE_C_DEFINED_glMapGrid2xOES #define GLEE_C_DEFINED_glMapGrid2xOES void __stdcall GLee_Lazy_glMapGrid2xOES(GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2) {if (GLeeInit()) glMapGrid2xOES(n, u1, u2, v1, v2);} GLEEPFNGLMAPGRID2XOESPROC GLeeFuncPtr_glMapGrid2xOES=GLee_Lazy_glMapGrid2xOES; #endif #ifndef GLEE_C_DEFINED_glMaterialxOES #define GLEE_C_DEFINED_glMaterialxOES void __stdcall GLee_Lazy_glMaterialxOES(GLenum face, GLenum pname, GLfixed param) {if (GLeeInit()) glMaterialxOES(face, pname, param);} GLEEPFNGLMATERIALXOESPROC GLeeFuncPtr_glMaterialxOES=GLee_Lazy_glMaterialxOES; #endif #ifndef GLEE_C_DEFINED_glMaterialxvOES #define GLEE_C_DEFINED_glMaterialxvOES void __stdcall GLee_Lazy_glMaterialxvOES(GLenum face, GLenum pname, const GLfixed * param) {if (GLeeInit()) glMaterialxvOES(face, pname, param);} GLEEPFNGLMATERIALXVOESPROC GLeeFuncPtr_glMaterialxvOES=GLee_Lazy_glMaterialxvOES; #endif #ifndef GLEE_C_DEFINED_glMultMatrixxOES #define GLEE_C_DEFINED_glMultMatrixxOES void __stdcall GLee_Lazy_glMultMatrixxOES(const GLfixed * m) {if (GLeeInit()) glMultMatrixxOES(m);} GLEEPFNGLMULTMATRIXXOESPROC GLeeFuncPtr_glMultMatrixxOES=GLee_Lazy_glMultMatrixxOES; #endif #ifndef GLEE_C_DEFINED_glMultTransposeMatrixxOES #define GLEE_C_DEFINED_glMultTransposeMatrixxOES void __stdcall GLee_Lazy_glMultTransposeMatrixxOES(const GLfixed * m) {if (GLeeInit()) glMultTransposeMatrixxOES(m);} GLEEPFNGLMULTTRANSPOSEMATRIXXOESPROC GLeeFuncPtr_glMultTransposeMatrixxOES=GLee_Lazy_glMultTransposeMatrixxOES; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1xOES #define GLEE_C_DEFINED_glMultiTexCoord1xOES void __stdcall GLee_Lazy_glMultiTexCoord1xOES(GLenum texture, GLfixed s) {if (GLeeInit()) glMultiTexCoord1xOES(texture, s);} GLEEPFNGLMULTITEXCOORD1XOESPROC GLeeFuncPtr_glMultiTexCoord1xOES=GLee_Lazy_glMultiTexCoord1xOES; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2xOES #define GLEE_C_DEFINED_glMultiTexCoord2xOES void __stdcall GLee_Lazy_glMultiTexCoord2xOES(GLenum texture, GLfixed s, GLfixed t) {if (GLeeInit()) glMultiTexCoord2xOES(texture, s, t);} GLEEPFNGLMULTITEXCOORD2XOESPROC GLeeFuncPtr_glMultiTexCoord2xOES=GLee_Lazy_glMultiTexCoord2xOES; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3xOES #define GLEE_C_DEFINED_glMultiTexCoord3xOES void __stdcall GLee_Lazy_glMultiTexCoord3xOES(GLenum texture, GLfixed s, GLfixed t, GLfixed r) {if (GLeeInit()) glMultiTexCoord3xOES(texture, s, t, r);} GLEEPFNGLMULTITEXCOORD3XOESPROC GLeeFuncPtr_glMultiTexCoord3xOES=GLee_Lazy_glMultiTexCoord3xOES; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4xOES #define GLEE_C_DEFINED_glMultiTexCoord4xOES void __stdcall GLee_Lazy_glMultiTexCoord4xOES(GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q) {if (GLeeInit()) glMultiTexCoord4xOES(texture, s, t, r, q);} GLEEPFNGLMULTITEXCOORD4XOESPROC GLeeFuncPtr_glMultiTexCoord4xOES=GLee_Lazy_glMultiTexCoord4xOES; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1xvOES #define GLEE_C_DEFINED_glMultiTexCoord1xvOES void __stdcall GLee_Lazy_glMultiTexCoord1xvOES(GLenum texture, const GLfixed * coords) {if (GLeeInit()) glMultiTexCoord1xvOES(texture, coords);} GLEEPFNGLMULTITEXCOORD1XVOESPROC GLeeFuncPtr_glMultiTexCoord1xvOES=GLee_Lazy_glMultiTexCoord1xvOES; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2xvOES #define GLEE_C_DEFINED_glMultiTexCoord2xvOES void __stdcall GLee_Lazy_glMultiTexCoord2xvOES(GLenum texture, const GLfixed * coords) {if (GLeeInit()) glMultiTexCoord2xvOES(texture, coords);} GLEEPFNGLMULTITEXCOORD2XVOESPROC GLeeFuncPtr_glMultiTexCoord2xvOES=GLee_Lazy_glMultiTexCoord2xvOES; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3xvOES #define GLEE_C_DEFINED_glMultiTexCoord3xvOES void __stdcall GLee_Lazy_glMultiTexCoord3xvOES(GLenum texture, const GLfixed * coords) {if (GLeeInit()) glMultiTexCoord3xvOES(texture, coords);} GLEEPFNGLMULTITEXCOORD3XVOESPROC GLeeFuncPtr_glMultiTexCoord3xvOES=GLee_Lazy_glMultiTexCoord3xvOES; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4xvOES #define GLEE_C_DEFINED_glMultiTexCoord4xvOES void __stdcall GLee_Lazy_glMultiTexCoord4xvOES(GLenum texture, const GLfixed * coords) {if (GLeeInit()) glMultiTexCoord4xvOES(texture, coords);} GLEEPFNGLMULTITEXCOORD4XVOESPROC GLeeFuncPtr_glMultiTexCoord4xvOES=GLee_Lazy_glMultiTexCoord4xvOES; #endif #ifndef GLEE_C_DEFINED_glNormal3xOES #define GLEE_C_DEFINED_glNormal3xOES void __stdcall GLee_Lazy_glNormal3xOES(GLfixed nx, GLfixed ny, GLfixed nz) {if (GLeeInit()) glNormal3xOES(nx, ny, nz);} GLEEPFNGLNORMAL3XOESPROC GLeeFuncPtr_glNormal3xOES=GLee_Lazy_glNormal3xOES; #endif #ifndef GLEE_C_DEFINED_glNormal3xvOES #define GLEE_C_DEFINED_glNormal3xvOES void __stdcall GLee_Lazy_glNormal3xvOES(const GLfixed * coords) {if (GLeeInit()) glNormal3xvOES(coords);} GLEEPFNGLNORMAL3XVOESPROC GLeeFuncPtr_glNormal3xvOES=GLee_Lazy_glNormal3xvOES; #endif #ifndef GLEE_C_DEFINED_glOrthoxOES #define GLEE_C_DEFINED_glOrthoxOES void __stdcall GLee_Lazy_glOrthoxOES(GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f) {if (GLeeInit()) glOrthoxOES(l, r, b, t, n, f);} GLEEPFNGLORTHOXOESPROC GLeeFuncPtr_glOrthoxOES=GLee_Lazy_glOrthoxOES; #endif #ifndef GLEE_C_DEFINED_glPassThroughxOES #define GLEE_C_DEFINED_glPassThroughxOES void __stdcall GLee_Lazy_glPassThroughxOES(GLfixed token) {if (GLeeInit()) glPassThroughxOES(token);} GLEEPFNGLPASSTHROUGHXOESPROC GLeeFuncPtr_glPassThroughxOES=GLee_Lazy_glPassThroughxOES; #endif #ifndef GLEE_C_DEFINED_glPixelMapx #define GLEE_C_DEFINED_glPixelMapx void __stdcall GLee_Lazy_glPixelMapx(GLenum map, GLint size, const GLfixed * values) {if (GLeeInit()) glPixelMapx(map, size, values);} GLEEPFNGLPIXELMAPXPROC GLeeFuncPtr_glPixelMapx=GLee_Lazy_glPixelMapx; #endif #ifndef GLEE_C_DEFINED_glPixelStorex #define GLEE_C_DEFINED_glPixelStorex void __stdcall GLee_Lazy_glPixelStorex(GLenum pname, GLfixed param) {if (GLeeInit()) glPixelStorex(pname, param);} GLEEPFNGLPIXELSTOREXPROC GLeeFuncPtr_glPixelStorex=GLee_Lazy_glPixelStorex; #endif #ifndef GLEE_C_DEFINED_glPixelTransferxOES #define GLEE_C_DEFINED_glPixelTransferxOES void __stdcall GLee_Lazy_glPixelTransferxOES(GLenum pname, GLfixed param) {if (GLeeInit()) glPixelTransferxOES(pname, param);} GLEEPFNGLPIXELTRANSFERXOESPROC GLeeFuncPtr_glPixelTransferxOES=GLee_Lazy_glPixelTransferxOES; #endif #ifndef GLEE_C_DEFINED_glPixelZoomxOES #define GLEE_C_DEFINED_glPixelZoomxOES void __stdcall GLee_Lazy_glPixelZoomxOES(GLfixed xfactor, GLfixed yfactor) {if (GLeeInit()) glPixelZoomxOES(xfactor, yfactor);} GLEEPFNGLPIXELZOOMXOESPROC GLeeFuncPtr_glPixelZoomxOES=GLee_Lazy_glPixelZoomxOES; #endif #ifndef GLEE_C_DEFINED_glPointParameterxvOES #define GLEE_C_DEFINED_glPointParameterxvOES void __stdcall GLee_Lazy_glPointParameterxvOES(GLenum pname, const GLfixed * params) {if (GLeeInit()) glPointParameterxvOES(pname, params);} GLEEPFNGLPOINTPARAMETERXVOESPROC GLeeFuncPtr_glPointParameterxvOES=GLee_Lazy_glPointParameterxvOES; #endif #ifndef GLEE_C_DEFINED_glPointSizexOES #define GLEE_C_DEFINED_glPointSizexOES void __stdcall GLee_Lazy_glPointSizexOES(GLfixed size) {if (GLeeInit()) glPointSizexOES(size);} GLEEPFNGLPOINTSIZEXOESPROC GLeeFuncPtr_glPointSizexOES=GLee_Lazy_glPointSizexOES; #endif #ifndef GLEE_C_DEFINED_glPolygonOffsetxOES #define GLEE_C_DEFINED_glPolygonOffsetxOES void __stdcall GLee_Lazy_glPolygonOffsetxOES(GLfixed factor, GLfixed units) {if (GLeeInit()) glPolygonOffsetxOES(factor, units);} GLEEPFNGLPOLYGONOFFSETXOESPROC GLeeFuncPtr_glPolygonOffsetxOES=GLee_Lazy_glPolygonOffsetxOES; #endif #ifndef GLEE_C_DEFINED_glPrioritizeTexturesxOES #define GLEE_C_DEFINED_glPrioritizeTexturesxOES void __stdcall GLee_Lazy_glPrioritizeTexturesxOES(GLsizei n, const GLuint * textures, const GLfixed * priorities) {if (GLeeInit()) glPrioritizeTexturesxOES(n, textures, priorities);} GLEEPFNGLPRIORITIZETEXTURESXOESPROC GLeeFuncPtr_glPrioritizeTexturesxOES=GLee_Lazy_glPrioritizeTexturesxOES; #endif #ifndef GLEE_C_DEFINED_glRasterPos2xOES #define GLEE_C_DEFINED_glRasterPos2xOES void __stdcall GLee_Lazy_glRasterPos2xOES(GLfixed x, GLfixed y) {if (GLeeInit()) glRasterPos2xOES(x, y);} GLEEPFNGLRASTERPOS2XOESPROC GLeeFuncPtr_glRasterPos2xOES=GLee_Lazy_glRasterPos2xOES; #endif #ifndef GLEE_C_DEFINED_glRasterPos3xOES #define GLEE_C_DEFINED_glRasterPos3xOES void __stdcall GLee_Lazy_glRasterPos3xOES(GLfixed x, GLfixed y, GLfixed z) {if (GLeeInit()) glRasterPos3xOES(x, y, z);} GLEEPFNGLRASTERPOS3XOESPROC GLeeFuncPtr_glRasterPos3xOES=GLee_Lazy_glRasterPos3xOES; #endif #ifndef GLEE_C_DEFINED_glRasterPos4xOES #define GLEE_C_DEFINED_glRasterPos4xOES void __stdcall GLee_Lazy_glRasterPos4xOES(GLfixed x, GLfixed y, GLfixed z, GLfixed w) {if (GLeeInit()) glRasterPos4xOES(x, y, z, w);} GLEEPFNGLRASTERPOS4XOESPROC GLeeFuncPtr_glRasterPos4xOES=GLee_Lazy_glRasterPos4xOES; #endif #ifndef GLEE_C_DEFINED_glRasterPos2xvOES #define GLEE_C_DEFINED_glRasterPos2xvOES void __stdcall GLee_Lazy_glRasterPos2xvOES(const GLfixed * coords) {if (GLeeInit()) glRasterPos2xvOES(coords);} GLEEPFNGLRASTERPOS2XVOESPROC GLeeFuncPtr_glRasterPos2xvOES=GLee_Lazy_glRasterPos2xvOES; #endif #ifndef GLEE_C_DEFINED_glRasterPos3xvOES #define GLEE_C_DEFINED_glRasterPos3xvOES void __stdcall GLee_Lazy_glRasterPos3xvOES(const GLfixed * coords) {if (GLeeInit()) glRasterPos3xvOES(coords);} GLEEPFNGLRASTERPOS3XVOESPROC GLeeFuncPtr_glRasterPos3xvOES=GLee_Lazy_glRasterPos3xvOES; #endif #ifndef GLEE_C_DEFINED_glRasterPos4xvOES #define GLEE_C_DEFINED_glRasterPos4xvOES void __stdcall GLee_Lazy_glRasterPos4xvOES(const GLfixed * coords) {if (GLeeInit()) glRasterPos4xvOES(coords);} GLEEPFNGLRASTERPOS4XVOESPROC GLeeFuncPtr_glRasterPos4xvOES=GLee_Lazy_glRasterPos4xvOES; #endif #ifndef GLEE_C_DEFINED_glRectxOES #define GLEE_C_DEFINED_glRectxOES void __stdcall GLee_Lazy_glRectxOES(GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2) {if (GLeeInit()) glRectxOES(x1, y1, x2, y2);} GLEEPFNGLRECTXOESPROC GLeeFuncPtr_glRectxOES=GLee_Lazy_glRectxOES; #endif #ifndef GLEE_C_DEFINED_glRectxvOES #define GLEE_C_DEFINED_glRectxvOES void __stdcall GLee_Lazy_glRectxvOES(const GLfixed * v1, const GLfixed * v2) {if (GLeeInit()) glRectxvOES(v1, v2);} GLEEPFNGLRECTXVOESPROC GLeeFuncPtr_glRectxvOES=GLee_Lazy_glRectxvOES; #endif #ifndef GLEE_C_DEFINED_glRotatexOES #define GLEE_C_DEFINED_glRotatexOES void __stdcall GLee_Lazy_glRotatexOES(GLfixed angle, GLfixed x, GLfixed y, GLfixed z) {if (GLeeInit()) glRotatexOES(angle, x, y, z);} GLEEPFNGLROTATEXOESPROC GLeeFuncPtr_glRotatexOES=GLee_Lazy_glRotatexOES; #endif #ifndef GLEE_C_DEFINED_glSampleCoverageOES #define GLEE_C_DEFINED_glSampleCoverageOES void __stdcall GLee_Lazy_glSampleCoverageOES(GLfixed value, GLboolean invert) {if (GLeeInit()) glSampleCoverageOES(value, invert);} GLEEPFNGLSAMPLECOVERAGEOESPROC GLeeFuncPtr_glSampleCoverageOES=GLee_Lazy_glSampleCoverageOES; #endif #ifndef GLEE_C_DEFINED_glScalexOES #define GLEE_C_DEFINED_glScalexOES void __stdcall GLee_Lazy_glScalexOES(GLfixed x, GLfixed y, GLfixed z) {if (GLeeInit()) glScalexOES(x, y, z);} GLEEPFNGLSCALEXOESPROC GLeeFuncPtr_glScalexOES=GLee_Lazy_glScalexOES; #endif #ifndef GLEE_C_DEFINED_glTexCoord1xOES #define GLEE_C_DEFINED_glTexCoord1xOES void __stdcall GLee_Lazy_glTexCoord1xOES(GLfixed s) {if (GLeeInit()) glTexCoord1xOES(s);} GLEEPFNGLTEXCOORD1XOESPROC GLeeFuncPtr_glTexCoord1xOES=GLee_Lazy_glTexCoord1xOES; #endif #ifndef GLEE_C_DEFINED_glTexCoord2xOES #define GLEE_C_DEFINED_glTexCoord2xOES void __stdcall GLee_Lazy_glTexCoord2xOES(GLfixed s, GLfixed t) {if (GLeeInit()) glTexCoord2xOES(s, t);} GLEEPFNGLTEXCOORD2XOESPROC GLeeFuncPtr_glTexCoord2xOES=GLee_Lazy_glTexCoord2xOES; #endif #ifndef GLEE_C_DEFINED_glTexCoord3xOES #define GLEE_C_DEFINED_glTexCoord3xOES void __stdcall GLee_Lazy_glTexCoord3xOES(GLfixed s, GLfixed t, GLfixed r) {if (GLeeInit()) glTexCoord3xOES(s, t, r);} GLEEPFNGLTEXCOORD3XOESPROC GLeeFuncPtr_glTexCoord3xOES=GLee_Lazy_glTexCoord3xOES; #endif #ifndef GLEE_C_DEFINED_glTexCoord4xOES #define GLEE_C_DEFINED_glTexCoord4xOES void __stdcall GLee_Lazy_glTexCoord4xOES(GLfixed s, GLfixed t, GLfixed r, GLfixed q) {if (GLeeInit()) glTexCoord4xOES(s, t, r, q);} GLEEPFNGLTEXCOORD4XOESPROC GLeeFuncPtr_glTexCoord4xOES=GLee_Lazy_glTexCoord4xOES; #endif #ifndef GLEE_C_DEFINED_glTexCoord1xvOES #define GLEE_C_DEFINED_glTexCoord1xvOES void __stdcall GLee_Lazy_glTexCoord1xvOES(const GLfixed * coords) {if (GLeeInit()) glTexCoord1xvOES(coords);} GLEEPFNGLTEXCOORD1XVOESPROC GLeeFuncPtr_glTexCoord1xvOES=GLee_Lazy_glTexCoord1xvOES; #endif #ifndef GLEE_C_DEFINED_glTexCoord2xvOES #define GLEE_C_DEFINED_glTexCoord2xvOES void __stdcall GLee_Lazy_glTexCoord2xvOES(const GLfixed * coords) {if (GLeeInit()) glTexCoord2xvOES(coords);} GLEEPFNGLTEXCOORD2XVOESPROC GLeeFuncPtr_glTexCoord2xvOES=GLee_Lazy_glTexCoord2xvOES; #endif #ifndef GLEE_C_DEFINED_glTexCoord3xvOES #define GLEE_C_DEFINED_glTexCoord3xvOES void __stdcall GLee_Lazy_glTexCoord3xvOES(const GLfixed * coords) {if (GLeeInit()) glTexCoord3xvOES(coords);} GLEEPFNGLTEXCOORD3XVOESPROC GLeeFuncPtr_glTexCoord3xvOES=GLee_Lazy_glTexCoord3xvOES; #endif #ifndef GLEE_C_DEFINED_glTexCoord4xvOES #define GLEE_C_DEFINED_glTexCoord4xvOES void __stdcall GLee_Lazy_glTexCoord4xvOES(const GLfixed * coords) {if (GLeeInit()) glTexCoord4xvOES(coords);} GLEEPFNGLTEXCOORD4XVOESPROC GLeeFuncPtr_glTexCoord4xvOES=GLee_Lazy_glTexCoord4xvOES; #endif #ifndef GLEE_C_DEFINED_glTexEnvxOES #define GLEE_C_DEFINED_glTexEnvxOES void __stdcall GLee_Lazy_glTexEnvxOES(GLenum target, GLenum pname, GLfixed param) {if (GLeeInit()) glTexEnvxOES(target, pname, param);} GLEEPFNGLTEXENVXOESPROC GLeeFuncPtr_glTexEnvxOES=GLee_Lazy_glTexEnvxOES; #endif #ifndef GLEE_C_DEFINED_glTexEnvxvOES #define GLEE_C_DEFINED_glTexEnvxvOES void __stdcall GLee_Lazy_glTexEnvxvOES(GLenum target, GLenum pname, const GLfixed * params) {if (GLeeInit()) glTexEnvxvOES(target, pname, params);} GLEEPFNGLTEXENVXVOESPROC GLeeFuncPtr_glTexEnvxvOES=GLee_Lazy_glTexEnvxvOES; #endif #ifndef GLEE_C_DEFINED_glTexGenxOES #define GLEE_C_DEFINED_glTexGenxOES void __stdcall GLee_Lazy_glTexGenxOES(GLenum coord, GLenum pname, GLfixed param) {if (GLeeInit()) glTexGenxOES(coord, pname, param);} GLEEPFNGLTEXGENXOESPROC GLeeFuncPtr_glTexGenxOES=GLee_Lazy_glTexGenxOES; #endif #ifndef GLEE_C_DEFINED_glTexGenxvOES #define GLEE_C_DEFINED_glTexGenxvOES void __stdcall GLee_Lazy_glTexGenxvOES(GLenum coord, GLenum pname, const GLfixed * params) {if (GLeeInit()) glTexGenxvOES(coord, pname, params);} GLEEPFNGLTEXGENXVOESPROC GLeeFuncPtr_glTexGenxvOES=GLee_Lazy_glTexGenxvOES; #endif #ifndef GLEE_C_DEFINED_glTexParameterxOES #define GLEE_C_DEFINED_glTexParameterxOES void __stdcall GLee_Lazy_glTexParameterxOES(GLenum target, GLenum pname, GLfixed param) {if (GLeeInit()) glTexParameterxOES(target, pname, param);} GLEEPFNGLTEXPARAMETERXOESPROC GLeeFuncPtr_glTexParameterxOES=GLee_Lazy_glTexParameterxOES; #endif #ifndef GLEE_C_DEFINED_glTexParameterxvOES #define GLEE_C_DEFINED_glTexParameterxvOES void __stdcall GLee_Lazy_glTexParameterxvOES(GLenum target, GLenum pname, const GLfixed * params) {if (GLeeInit()) glTexParameterxvOES(target, pname, params);} GLEEPFNGLTEXPARAMETERXVOESPROC GLeeFuncPtr_glTexParameterxvOES=GLee_Lazy_glTexParameterxvOES; #endif #ifndef GLEE_C_DEFINED_glTranslatexOES #define GLEE_C_DEFINED_glTranslatexOES void __stdcall GLee_Lazy_glTranslatexOES(GLfixed x, GLfixed y, GLfixed z) {if (GLeeInit()) glTranslatexOES(x, y, z);} GLEEPFNGLTRANSLATEXOESPROC GLeeFuncPtr_glTranslatexOES=GLee_Lazy_glTranslatexOES; #endif #ifndef GLEE_C_DEFINED_glVertex2xOES #define GLEE_C_DEFINED_glVertex2xOES void __stdcall GLee_Lazy_glVertex2xOES(GLfixed x) {if (GLeeInit()) glVertex2xOES(x);} GLEEPFNGLVERTEX2XOESPROC GLeeFuncPtr_glVertex2xOES=GLee_Lazy_glVertex2xOES; #endif #ifndef GLEE_C_DEFINED_glVertex3xOES #define GLEE_C_DEFINED_glVertex3xOES void __stdcall GLee_Lazy_glVertex3xOES(GLfixed x, GLfixed y) {if (GLeeInit()) glVertex3xOES(x, y);} GLEEPFNGLVERTEX3XOESPROC GLeeFuncPtr_glVertex3xOES=GLee_Lazy_glVertex3xOES; #endif #ifndef GLEE_C_DEFINED_glVertex4xOES #define GLEE_C_DEFINED_glVertex4xOES void __stdcall GLee_Lazy_glVertex4xOES(GLfixed x, GLfixed y, GLfixed z) {if (GLeeInit()) glVertex4xOES(x, y, z);} GLEEPFNGLVERTEX4XOESPROC GLeeFuncPtr_glVertex4xOES=GLee_Lazy_glVertex4xOES; #endif #ifndef GLEE_C_DEFINED_glVertex2xvOES #define GLEE_C_DEFINED_glVertex2xvOES void __stdcall GLee_Lazy_glVertex2xvOES(const GLfixed * coords) {if (GLeeInit()) glVertex2xvOES(coords);} GLEEPFNGLVERTEX2XVOESPROC GLeeFuncPtr_glVertex2xvOES=GLee_Lazy_glVertex2xvOES; #endif #ifndef GLEE_C_DEFINED_glVertex3xvOES #define GLEE_C_DEFINED_glVertex3xvOES void __stdcall GLee_Lazy_glVertex3xvOES(const GLfixed * coords) {if (GLeeInit()) glVertex3xvOES(coords);} GLEEPFNGLVERTEX3XVOESPROC GLeeFuncPtr_glVertex3xvOES=GLee_Lazy_glVertex3xvOES; #endif #ifndef GLEE_C_DEFINED_glVertex4xvOES #define GLEE_C_DEFINED_glVertex4xvOES void __stdcall GLee_Lazy_glVertex4xvOES(const GLfixed * coords) {if (GLeeInit()) glVertex4xvOES(coords);} GLEEPFNGLVERTEX4XVOESPROC GLeeFuncPtr_glVertex4xvOES=GLee_Lazy_glVertex4xvOES; #endif #endif /* GL_OES_single_precision */ #ifdef __GLEE_GL_OES_single_precision #ifndef GLEE_C_DEFINED_glDepthRangefOES #define GLEE_C_DEFINED_glDepthRangefOES void __stdcall GLee_Lazy_glDepthRangefOES(GLclampf n, GLclampf f) {if (GLeeInit()) glDepthRangefOES(n, f);} GLEEPFNGLDEPTHRANGEFOESPROC GLeeFuncPtr_glDepthRangefOES=GLee_Lazy_glDepthRangefOES; #endif #ifndef GLEE_C_DEFINED_glFrustumfOES #define GLEE_C_DEFINED_glFrustumfOES void __stdcall GLee_Lazy_glFrustumfOES(GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f) {if (GLeeInit()) glFrustumfOES(l, r, b, t, n, f);} GLEEPFNGLFRUSTUMFOESPROC GLeeFuncPtr_glFrustumfOES=GLee_Lazy_glFrustumfOES; #endif #ifndef GLEE_C_DEFINED_glOrthofOES #define GLEE_C_DEFINED_glOrthofOES void __stdcall GLee_Lazy_glOrthofOES(GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f) {if (GLeeInit()) glOrthofOES(l, r, b, t, n, f);} GLEEPFNGLORTHOFOESPROC GLeeFuncPtr_glOrthofOES=GLee_Lazy_glOrthofOES; #endif #ifndef GLEE_C_DEFINED_glClipPlanefOES #define GLEE_C_DEFINED_glClipPlanefOES void __stdcall GLee_Lazy_glClipPlanefOES(GLenum plane, const GLfloat * equation) {if (GLeeInit()) glClipPlanefOES(plane, equation);} GLEEPFNGLCLIPPLANEFOESPROC GLeeFuncPtr_glClipPlanefOES=GLee_Lazy_glClipPlanefOES; #endif #ifndef GLEE_C_DEFINED_glClearDepthfOES #define GLEE_C_DEFINED_glClearDepthfOES void __stdcall GLee_Lazy_glClearDepthfOES(GLclampd depth) {if (GLeeInit()) glClearDepthfOES(depth);} GLEEPFNGLCLEARDEPTHFOESPROC GLeeFuncPtr_glClearDepthfOES=GLee_Lazy_glClearDepthfOES; #endif #ifndef GLEE_C_DEFINED_glGetClipPlanefOES #define GLEE_C_DEFINED_glGetClipPlanefOES void __stdcall GLee_Lazy_glGetClipPlanefOES(GLenum plane, GLfloat * equation) {if (GLeeInit()) glGetClipPlanefOES(plane, equation);} GLEEPFNGLGETCLIPPLANEFOESPROC GLeeFuncPtr_glGetClipPlanefOES=GLee_Lazy_glGetClipPlanefOES; #endif #endif /* GL_OES_compressed_paletted_texture */ #ifdef __GLEE_GL_OES_compressed_paletted_texture #endif /* GL_OES_read_format */ #ifdef __GLEE_GL_OES_read_format #endif /* GL_OES_query_matrix */ #ifdef __GLEE_GL_OES_query_matrix #ifndef GLEE_C_DEFINED_glQueryMatrixxOES #define GLEE_C_DEFINED_glQueryMatrixxOES GLbitfield __stdcall GLee_Lazy_glQueryMatrixxOES(const GLfixed * mantissa, const GLint * exponent) {if (GLeeInit()) return glQueryMatrixxOES(mantissa, exponent); return (GLbitfield)0;} GLEEPFNGLQUERYMATRIXXOESPROC GLeeFuncPtr_glQueryMatrixxOES=GLee_Lazy_glQueryMatrixxOES; #endif #endif /* GL_EXT_depth_bounds_test */ #ifdef __GLEE_GL_EXT_depth_bounds_test #ifndef GLEE_C_DEFINED_glDepthBoundsEXT #define GLEE_C_DEFINED_glDepthBoundsEXT void __stdcall GLee_Lazy_glDepthBoundsEXT(GLclampd zmin, GLclampd zmax) {if (GLeeInit()) glDepthBoundsEXT(zmin, zmax);} GLEEPFNGLDEPTHBOUNDSEXTPROC GLeeFuncPtr_glDepthBoundsEXT=GLee_Lazy_glDepthBoundsEXT; #endif #endif /* GL_EXT_texture_mirror_clamp */ #ifdef __GLEE_GL_EXT_texture_mirror_clamp #endif /* GL_EXT_blend_equation_separate */ #ifdef __GLEE_GL_EXT_blend_equation_separate #ifndef GLEE_C_DEFINED_glBlendEquationSeparateEXT #define GLEE_C_DEFINED_glBlendEquationSeparateEXT void __stdcall GLee_Lazy_glBlendEquationSeparateEXT(GLenum modeRGB, GLenum modeAlpha) {if (GLeeInit()) glBlendEquationSeparateEXT(modeRGB, modeAlpha);} GLEEPFNGLBLENDEQUATIONSEPARATEEXTPROC GLeeFuncPtr_glBlendEquationSeparateEXT=GLee_Lazy_glBlendEquationSeparateEXT; #endif #endif /* GL_MESA_pack_invert */ #ifdef __GLEE_GL_MESA_pack_invert #endif /* GL_MESA_ycbcr_texture */ #ifdef __GLEE_GL_MESA_ycbcr_texture #endif /* GL_EXT_pixel_buffer_object */ #ifdef __GLEE_GL_EXT_pixel_buffer_object #endif /* GL_NV_fragment_program_option */ #ifdef __GLEE_GL_NV_fragment_program_option #endif /* GL_NV_fragment_program2 */ #ifdef __GLEE_GL_NV_fragment_program2 #endif /* GL_NV_vertex_program2_option */ #ifdef __GLEE_GL_NV_vertex_program2_option #endif /* GL_NV_vertex_program3 */ #ifdef __GLEE_GL_NV_vertex_program3 #endif /* GL_EXT_framebuffer_object */ #ifdef __GLEE_GL_EXT_framebuffer_object #ifndef GLEE_C_DEFINED_glIsRenderbufferEXT #define GLEE_C_DEFINED_glIsRenderbufferEXT GLboolean __stdcall GLee_Lazy_glIsRenderbufferEXT(GLuint renderbuffer) {if (GLeeInit()) return glIsRenderbufferEXT(renderbuffer); return (GLboolean)0;} GLEEPFNGLISRENDERBUFFEREXTPROC GLeeFuncPtr_glIsRenderbufferEXT=GLee_Lazy_glIsRenderbufferEXT; #endif #ifndef GLEE_C_DEFINED_glBindRenderbufferEXT #define GLEE_C_DEFINED_glBindRenderbufferEXT void __stdcall GLee_Lazy_glBindRenderbufferEXT(GLenum target, GLuint renderbuffer) {if (GLeeInit()) glBindRenderbufferEXT(target, renderbuffer);} GLEEPFNGLBINDRENDERBUFFEREXTPROC GLeeFuncPtr_glBindRenderbufferEXT=GLee_Lazy_glBindRenderbufferEXT; #endif #ifndef GLEE_C_DEFINED_glDeleteRenderbuffersEXT #define GLEE_C_DEFINED_glDeleteRenderbuffersEXT void __stdcall GLee_Lazy_glDeleteRenderbuffersEXT(GLsizei n, const GLuint * renderbuffers) {if (GLeeInit()) glDeleteRenderbuffersEXT(n, renderbuffers);} GLEEPFNGLDELETERENDERBUFFERSEXTPROC GLeeFuncPtr_glDeleteRenderbuffersEXT=GLee_Lazy_glDeleteRenderbuffersEXT; #endif #ifndef GLEE_C_DEFINED_glGenRenderbuffersEXT #define GLEE_C_DEFINED_glGenRenderbuffersEXT void __stdcall GLee_Lazy_glGenRenderbuffersEXT(GLsizei n, GLuint * renderbuffers) {if (GLeeInit()) glGenRenderbuffersEXT(n, renderbuffers);} GLEEPFNGLGENRENDERBUFFERSEXTPROC GLeeFuncPtr_glGenRenderbuffersEXT=GLee_Lazy_glGenRenderbuffersEXT; #endif #ifndef GLEE_C_DEFINED_glRenderbufferStorageEXT #define GLEE_C_DEFINED_glRenderbufferStorageEXT void __stdcall GLee_Lazy_glRenderbufferStorageEXT(GLenum target, GLenum internalformat, GLsizei width, GLsizei height) {if (GLeeInit()) glRenderbufferStorageEXT(target, internalformat, width, height);} GLEEPFNGLRENDERBUFFERSTORAGEEXTPROC GLeeFuncPtr_glRenderbufferStorageEXT=GLee_Lazy_glRenderbufferStorageEXT; #endif #ifndef GLEE_C_DEFINED_glGetRenderbufferParameterivEXT #define GLEE_C_DEFINED_glGetRenderbufferParameterivEXT void __stdcall GLee_Lazy_glGetRenderbufferParameterivEXT(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetRenderbufferParameterivEXT(target, pname, params);} GLEEPFNGLGETRENDERBUFFERPARAMETERIVEXTPROC GLeeFuncPtr_glGetRenderbufferParameterivEXT=GLee_Lazy_glGetRenderbufferParameterivEXT; #endif #ifndef GLEE_C_DEFINED_glIsFramebufferEXT #define GLEE_C_DEFINED_glIsFramebufferEXT GLboolean __stdcall GLee_Lazy_glIsFramebufferEXT(GLuint framebuffer) {if (GLeeInit()) return glIsFramebufferEXT(framebuffer); return (GLboolean)0;} GLEEPFNGLISFRAMEBUFFEREXTPROC GLeeFuncPtr_glIsFramebufferEXT=GLee_Lazy_glIsFramebufferEXT; #endif #ifndef GLEE_C_DEFINED_glBindFramebufferEXT #define GLEE_C_DEFINED_glBindFramebufferEXT void __stdcall GLee_Lazy_glBindFramebufferEXT(GLenum target, GLuint framebuffer) {if (GLeeInit()) glBindFramebufferEXT(target, framebuffer);} GLEEPFNGLBINDFRAMEBUFFEREXTPROC GLeeFuncPtr_glBindFramebufferEXT=GLee_Lazy_glBindFramebufferEXT; #endif #ifndef GLEE_C_DEFINED_glDeleteFramebuffersEXT #define GLEE_C_DEFINED_glDeleteFramebuffersEXT void __stdcall GLee_Lazy_glDeleteFramebuffersEXT(GLsizei n, const GLuint * framebuffers) {if (GLeeInit()) glDeleteFramebuffersEXT(n, framebuffers);} GLEEPFNGLDELETEFRAMEBUFFERSEXTPROC GLeeFuncPtr_glDeleteFramebuffersEXT=GLee_Lazy_glDeleteFramebuffersEXT; #endif #ifndef GLEE_C_DEFINED_glGenFramebuffersEXT #define GLEE_C_DEFINED_glGenFramebuffersEXT void __stdcall GLee_Lazy_glGenFramebuffersEXT(GLsizei n, GLuint * framebuffers) {if (GLeeInit()) glGenFramebuffersEXT(n, framebuffers);} GLEEPFNGLGENFRAMEBUFFERSEXTPROC GLeeFuncPtr_glGenFramebuffersEXT=GLee_Lazy_glGenFramebuffersEXT; #endif #ifndef GLEE_C_DEFINED_glCheckFramebufferStatusEXT #define GLEE_C_DEFINED_glCheckFramebufferStatusEXT GLenum __stdcall GLee_Lazy_glCheckFramebufferStatusEXT(GLenum target) {if (GLeeInit()) return glCheckFramebufferStatusEXT(target); return (GLenum)0;} GLEEPFNGLCHECKFRAMEBUFFERSTATUSEXTPROC GLeeFuncPtr_glCheckFramebufferStatusEXT=GLee_Lazy_glCheckFramebufferStatusEXT; #endif #ifndef GLEE_C_DEFINED_glFramebufferTexture1DEXT #define GLEE_C_DEFINED_glFramebufferTexture1DEXT void __stdcall GLee_Lazy_glFramebufferTexture1DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) {if (GLeeInit()) glFramebufferTexture1DEXT(target, attachment, textarget, texture, level);} GLEEPFNGLFRAMEBUFFERTEXTURE1DEXTPROC GLeeFuncPtr_glFramebufferTexture1DEXT=GLee_Lazy_glFramebufferTexture1DEXT; #endif #ifndef GLEE_C_DEFINED_glFramebufferTexture2DEXT #define GLEE_C_DEFINED_glFramebufferTexture2DEXT void __stdcall GLee_Lazy_glFramebufferTexture2DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) {if (GLeeInit()) glFramebufferTexture2DEXT(target, attachment, textarget, texture, level);} GLEEPFNGLFRAMEBUFFERTEXTURE2DEXTPROC GLeeFuncPtr_glFramebufferTexture2DEXT=GLee_Lazy_glFramebufferTexture2DEXT; #endif #ifndef GLEE_C_DEFINED_glFramebufferTexture3DEXT #define GLEE_C_DEFINED_glFramebufferTexture3DEXT void __stdcall GLee_Lazy_glFramebufferTexture3DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) {if (GLeeInit()) glFramebufferTexture3DEXT(target, attachment, textarget, texture, level, zoffset);} GLEEPFNGLFRAMEBUFFERTEXTURE3DEXTPROC GLeeFuncPtr_glFramebufferTexture3DEXT=GLee_Lazy_glFramebufferTexture3DEXT; #endif #ifndef GLEE_C_DEFINED_glFramebufferRenderbufferEXT #define GLEE_C_DEFINED_glFramebufferRenderbufferEXT void __stdcall GLee_Lazy_glFramebufferRenderbufferEXT(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) {if (GLeeInit()) glFramebufferRenderbufferEXT(target, attachment, renderbuffertarget, renderbuffer);} GLEEPFNGLFRAMEBUFFERRENDERBUFFEREXTPROC GLeeFuncPtr_glFramebufferRenderbufferEXT=GLee_Lazy_glFramebufferRenderbufferEXT; #endif #ifndef GLEE_C_DEFINED_glGetFramebufferAttachmentParameterivEXT #define GLEE_C_DEFINED_glGetFramebufferAttachmentParameterivEXT void __stdcall GLee_Lazy_glGetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment, GLenum pname, GLint * params) {if (GLeeInit()) glGetFramebufferAttachmentParameterivEXT(target, attachment, pname, params);} GLEEPFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC GLeeFuncPtr_glGetFramebufferAttachmentParameterivEXT=GLee_Lazy_glGetFramebufferAttachmentParameterivEXT; #endif #ifndef GLEE_C_DEFINED_glGenerateMipmapEXT #define GLEE_C_DEFINED_glGenerateMipmapEXT void __stdcall GLee_Lazy_glGenerateMipmapEXT(GLenum target) {if (GLeeInit()) glGenerateMipmapEXT(target);} GLEEPFNGLGENERATEMIPMAPEXTPROC GLeeFuncPtr_glGenerateMipmapEXT=GLee_Lazy_glGenerateMipmapEXT; #endif #endif /* GL_GREMEDY_string_marker */ #ifdef __GLEE_GL_GREMEDY_string_marker #ifndef GLEE_C_DEFINED_glStringMarkerGREMEDY #define GLEE_C_DEFINED_glStringMarkerGREMEDY void __stdcall GLee_Lazy_glStringMarkerGREMEDY(GLsizei len, const GLvoid * string) {if (GLeeInit()) glStringMarkerGREMEDY(len, string);} GLEEPFNGLSTRINGMARKERGREMEDYPROC GLeeFuncPtr_glStringMarkerGREMEDY=GLee_Lazy_glStringMarkerGREMEDY; #endif #endif /* GL_EXT_packed_depth_stencil */ #ifdef __GLEE_GL_EXT_packed_depth_stencil #endif /* GL_EXT_stencil_clear_tag */ #ifdef __GLEE_GL_EXT_stencil_clear_tag #ifndef GLEE_C_DEFINED_glStencilClearTagEXT #define GLEE_C_DEFINED_glStencilClearTagEXT void __stdcall GLee_Lazy_glStencilClearTagEXT(GLsizei stencilTagBits, GLuint stencilClearTag) {if (GLeeInit()) glStencilClearTagEXT(stencilTagBits, stencilClearTag);} GLEEPFNGLSTENCILCLEARTAGEXTPROC GLeeFuncPtr_glStencilClearTagEXT=GLee_Lazy_glStencilClearTagEXT; #endif #endif /* GL_EXT_texture_sRGB */ #ifdef __GLEE_GL_EXT_texture_sRGB #endif /* GL_EXT_framebuffer_blit */ #ifdef __GLEE_GL_EXT_framebuffer_blit #ifndef GLEE_C_DEFINED_glBlitFramebufferEXT #define GLEE_C_DEFINED_glBlitFramebufferEXT void __stdcall GLee_Lazy_glBlitFramebufferEXT(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) {if (GLeeInit()) glBlitFramebufferEXT(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);} GLEEPFNGLBLITFRAMEBUFFEREXTPROC GLeeFuncPtr_glBlitFramebufferEXT=GLee_Lazy_glBlitFramebufferEXT; #endif #endif /* GL_EXT_framebuffer_multisample */ #ifdef __GLEE_GL_EXT_framebuffer_multisample #ifndef GLEE_C_DEFINED_glRenderbufferStorageMultisampleEXT #define GLEE_C_DEFINED_glRenderbufferStorageMultisampleEXT void __stdcall GLee_Lazy_glRenderbufferStorageMultisampleEXT(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) {if (GLeeInit()) glRenderbufferStorageMultisampleEXT(target, samples, internalformat, width, height);} GLEEPFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC GLeeFuncPtr_glRenderbufferStorageMultisampleEXT=GLee_Lazy_glRenderbufferStorageMultisampleEXT; #endif #endif /* GL_MESAX_texture_stack */ #ifdef __GLEE_GL_MESAX_texture_stack #endif /* GL_EXT_timer_query */ #ifdef __GLEE_GL_EXT_timer_query #ifndef GLEE_C_DEFINED_glGetQueryObjecti64vEXT #define GLEE_C_DEFINED_glGetQueryObjecti64vEXT void __stdcall GLee_Lazy_glGetQueryObjecti64vEXT(GLuint id, GLenum pname, GLint64EXT * params) {if (GLeeInit()) glGetQueryObjecti64vEXT(id, pname, params);} GLEEPFNGLGETQUERYOBJECTI64VEXTPROC GLeeFuncPtr_glGetQueryObjecti64vEXT=GLee_Lazy_glGetQueryObjecti64vEXT; #endif #ifndef GLEE_C_DEFINED_glGetQueryObjectui64vEXT #define GLEE_C_DEFINED_glGetQueryObjectui64vEXT void __stdcall GLee_Lazy_glGetQueryObjectui64vEXT(GLuint id, GLenum pname, GLuint64EXT * params) {if (GLeeInit()) glGetQueryObjectui64vEXT(id, pname, params);} GLEEPFNGLGETQUERYOBJECTUI64VEXTPROC GLeeFuncPtr_glGetQueryObjectui64vEXT=GLee_Lazy_glGetQueryObjectui64vEXT; #endif #endif /* GL_EXT_gpu_program_parameters */ #ifdef __GLEE_GL_EXT_gpu_program_parameters #ifndef GLEE_C_DEFINED_glProgramEnvParameters4fvEXT #define GLEE_C_DEFINED_glProgramEnvParameters4fvEXT void __stdcall GLee_Lazy_glProgramEnvParameters4fvEXT(GLenum target, GLuint index, GLsizei count, const GLfloat * params) {if (GLeeInit()) glProgramEnvParameters4fvEXT(target, index, count, params);} GLEEPFNGLPROGRAMENVPARAMETERS4FVEXTPROC GLeeFuncPtr_glProgramEnvParameters4fvEXT=GLee_Lazy_glProgramEnvParameters4fvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramLocalParameters4fvEXT #define GLEE_C_DEFINED_glProgramLocalParameters4fvEXT void __stdcall GLee_Lazy_glProgramLocalParameters4fvEXT(GLenum target, GLuint index, GLsizei count, const GLfloat * params) {if (GLeeInit()) glProgramLocalParameters4fvEXT(target, index, count, params);} GLEEPFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC GLeeFuncPtr_glProgramLocalParameters4fvEXT=GLee_Lazy_glProgramLocalParameters4fvEXT; #endif #endif /* GL_APPLE_flush_buffer_range */ #ifdef __GLEE_GL_APPLE_flush_buffer_range #ifndef GLEE_C_DEFINED_glBufferParameteriAPPLE #define GLEE_C_DEFINED_glBufferParameteriAPPLE void __stdcall GLee_Lazy_glBufferParameteriAPPLE(GLenum target, GLenum pname, GLint param) {if (GLeeInit()) glBufferParameteriAPPLE(target, pname, param);} GLEEPFNGLBUFFERPARAMETERIAPPLEPROC GLeeFuncPtr_glBufferParameteriAPPLE=GLee_Lazy_glBufferParameteriAPPLE; #endif #ifndef GLEE_C_DEFINED_glFlushMappedBufferRangeAPPLE #define GLEE_C_DEFINED_glFlushMappedBufferRangeAPPLE void __stdcall GLee_Lazy_glFlushMappedBufferRangeAPPLE(GLenum target, GLintptr offset, GLsizeiptr size) {if (GLeeInit()) glFlushMappedBufferRangeAPPLE(target, offset, size);} GLEEPFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC GLeeFuncPtr_glFlushMappedBufferRangeAPPLE=GLee_Lazy_glFlushMappedBufferRangeAPPLE; #endif #endif /* GL_EXT_gpu_shader4 */ #ifdef __GLEE_GL_EXT_gpu_shader4 #ifndef GLEE_C_DEFINED_glGetUniformuivEXT #define GLEE_C_DEFINED_glGetUniformuivEXT void __stdcall GLee_Lazy_glGetUniformuivEXT(GLuint program, GLint location, GLuint * params) {if (GLeeInit()) glGetUniformuivEXT(program, location, params);} GLEEPFNGLGETUNIFORMUIVEXTPROC GLeeFuncPtr_glGetUniformuivEXT=GLee_Lazy_glGetUniformuivEXT; #endif #ifndef GLEE_C_DEFINED_glBindFragDataLocationEXT #define GLEE_C_DEFINED_glBindFragDataLocationEXT void __stdcall GLee_Lazy_glBindFragDataLocationEXT(GLuint program, GLuint color, const GLchar * name) {if (GLeeInit()) glBindFragDataLocationEXT(program, color, name);} GLEEPFNGLBINDFRAGDATALOCATIONEXTPROC GLeeFuncPtr_glBindFragDataLocationEXT=GLee_Lazy_glBindFragDataLocationEXT; #endif #ifndef GLEE_C_DEFINED_glGetFragDataLocationEXT #define GLEE_C_DEFINED_glGetFragDataLocationEXT GLint __stdcall GLee_Lazy_glGetFragDataLocationEXT(GLuint program, const GLchar * name) {if (GLeeInit()) return glGetFragDataLocationEXT(program, name); return (GLint)0;} GLEEPFNGLGETFRAGDATALOCATIONEXTPROC GLeeFuncPtr_glGetFragDataLocationEXT=GLee_Lazy_glGetFragDataLocationEXT; #endif #ifndef GLEE_C_DEFINED_glUniform1uiEXT #define GLEE_C_DEFINED_glUniform1uiEXT void __stdcall GLee_Lazy_glUniform1uiEXT(GLint location, GLuint v0) {if (GLeeInit()) glUniform1uiEXT(location, v0);} GLEEPFNGLUNIFORM1UIEXTPROC GLeeFuncPtr_glUniform1uiEXT=GLee_Lazy_glUniform1uiEXT; #endif #ifndef GLEE_C_DEFINED_glUniform2uiEXT #define GLEE_C_DEFINED_glUniform2uiEXT void __stdcall GLee_Lazy_glUniform2uiEXT(GLint location, GLuint v0, GLuint v1) {if (GLeeInit()) glUniform2uiEXT(location, v0, v1);} GLEEPFNGLUNIFORM2UIEXTPROC GLeeFuncPtr_glUniform2uiEXT=GLee_Lazy_glUniform2uiEXT; #endif #ifndef GLEE_C_DEFINED_glUniform3uiEXT #define GLEE_C_DEFINED_glUniform3uiEXT void __stdcall GLee_Lazy_glUniform3uiEXT(GLint location, GLuint v0, GLuint v1, GLuint v2) {if (GLeeInit()) glUniform3uiEXT(location, v0, v1, v2);} GLEEPFNGLUNIFORM3UIEXTPROC GLeeFuncPtr_glUniform3uiEXT=GLee_Lazy_glUniform3uiEXT; #endif #ifndef GLEE_C_DEFINED_glUniform4uiEXT #define GLEE_C_DEFINED_glUniform4uiEXT void __stdcall GLee_Lazy_glUniform4uiEXT(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) {if (GLeeInit()) glUniform4uiEXT(location, v0, v1, v2, v3);} GLEEPFNGLUNIFORM4UIEXTPROC GLeeFuncPtr_glUniform4uiEXT=GLee_Lazy_glUniform4uiEXT; #endif #ifndef GLEE_C_DEFINED_glUniform1uivEXT #define GLEE_C_DEFINED_glUniform1uivEXT void __stdcall GLee_Lazy_glUniform1uivEXT(GLint location, GLsizei count, const GLuint * value) {if (GLeeInit()) glUniform1uivEXT(location, count, value);} GLEEPFNGLUNIFORM1UIVEXTPROC GLeeFuncPtr_glUniform1uivEXT=GLee_Lazy_glUniform1uivEXT; #endif #ifndef GLEE_C_DEFINED_glUniform2uivEXT #define GLEE_C_DEFINED_glUniform2uivEXT void __stdcall GLee_Lazy_glUniform2uivEXT(GLint location, GLsizei count, const GLuint * value) {if (GLeeInit()) glUniform2uivEXT(location, count, value);} GLEEPFNGLUNIFORM2UIVEXTPROC GLeeFuncPtr_glUniform2uivEXT=GLee_Lazy_glUniform2uivEXT; #endif #ifndef GLEE_C_DEFINED_glUniform3uivEXT #define GLEE_C_DEFINED_glUniform3uivEXT void __stdcall GLee_Lazy_glUniform3uivEXT(GLint location, GLsizei count, const GLuint * value) {if (GLeeInit()) glUniform3uivEXT(location, count, value);} GLEEPFNGLUNIFORM3UIVEXTPROC GLeeFuncPtr_glUniform3uivEXT=GLee_Lazy_glUniform3uivEXT; #endif #ifndef GLEE_C_DEFINED_glUniform4uivEXT #define GLEE_C_DEFINED_glUniform4uivEXT void __stdcall GLee_Lazy_glUniform4uivEXT(GLint location, GLsizei count, const GLuint * value) {if (GLeeInit()) glUniform4uivEXT(location, count, value);} GLEEPFNGLUNIFORM4UIVEXTPROC GLeeFuncPtr_glUniform4uivEXT=GLee_Lazy_glUniform4uivEXT; #endif #endif /* GL_EXT_draw_instanced */ #ifdef __GLEE_GL_EXT_draw_instanced #ifndef GLEE_C_DEFINED_glDrawArraysInstancedEXT #define GLEE_C_DEFINED_glDrawArraysInstancedEXT void __stdcall GLee_Lazy_glDrawArraysInstancedEXT(GLenum mode, GLint start, GLsizei count, GLsizei primcount) {if (GLeeInit()) glDrawArraysInstancedEXT(mode, start, count, primcount);} GLEEPFNGLDRAWARRAYSINSTANCEDEXTPROC GLeeFuncPtr_glDrawArraysInstancedEXT=GLee_Lazy_glDrawArraysInstancedEXT; #endif #ifndef GLEE_C_DEFINED_glDrawElementsInstancedEXT #define GLEE_C_DEFINED_glDrawElementsInstancedEXT void __stdcall GLee_Lazy_glDrawElementsInstancedEXT(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLsizei primcount) {if (GLeeInit()) glDrawElementsInstancedEXT(mode, count, type, indices, primcount);} GLEEPFNGLDRAWELEMENTSINSTANCEDEXTPROC GLeeFuncPtr_glDrawElementsInstancedEXT=GLee_Lazy_glDrawElementsInstancedEXT; #endif #endif /* GL_EXT_packed_float */ #ifdef __GLEE_GL_EXT_packed_float #endif /* GL_EXT_texture_array */ #ifdef __GLEE_GL_EXT_texture_array #endif /* GL_EXT_texture_buffer_object */ #ifdef __GLEE_GL_EXT_texture_buffer_object #ifndef GLEE_C_DEFINED_glTexBufferEXT #define GLEE_C_DEFINED_glTexBufferEXT void __stdcall GLee_Lazy_glTexBufferEXT(GLenum target, GLenum internalformat, GLuint buffer) {if (GLeeInit()) glTexBufferEXT(target, internalformat, buffer);} GLEEPFNGLTEXBUFFEREXTPROC GLeeFuncPtr_glTexBufferEXT=GLee_Lazy_glTexBufferEXT; #endif #endif /* GL_EXT_texture_compression_latc */ #ifdef __GLEE_GL_EXT_texture_compression_latc #endif /* GL_EXT_texture_compression_rgtc */ #ifdef __GLEE_GL_EXT_texture_compression_rgtc #endif /* GL_EXT_texture_shared_exponent */ #ifdef __GLEE_GL_EXT_texture_shared_exponent #endif /* GL_NV_depth_buffer_float */ #ifdef __GLEE_GL_NV_depth_buffer_float #ifndef GLEE_C_DEFINED_glDepthRangedNV #define GLEE_C_DEFINED_glDepthRangedNV void __stdcall GLee_Lazy_glDepthRangedNV(GLdouble zNear, GLdouble zFar) {if (GLeeInit()) glDepthRangedNV(zNear, zFar);} GLEEPFNGLDEPTHRANGEDNVPROC GLeeFuncPtr_glDepthRangedNV=GLee_Lazy_glDepthRangedNV; #endif #ifndef GLEE_C_DEFINED_glClearDepthdNV #define GLEE_C_DEFINED_glClearDepthdNV void __stdcall GLee_Lazy_glClearDepthdNV(GLdouble depth) {if (GLeeInit()) glClearDepthdNV(depth);} GLEEPFNGLCLEARDEPTHDNVPROC GLeeFuncPtr_glClearDepthdNV=GLee_Lazy_glClearDepthdNV; #endif #ifndef GLEE_C_DEFINED_glDepthBoundsdNV #define GLEE_C_DEFINED_glDepthBoundsdNV void __stdcall GLee_Lazy_glDepthBoundsdNV(GLdouble zmin, GLdouble zmax) {if (GLeeInit()) glDepthBoundsdNV(zmin, zmax);} GLEEPFNGLDEPTHBOUNDSDNVPROC GLeeFuncPtr_glDepthBoundsdNV=GLee_Lazy_glDepthBoundsdNV; #endif #endif /* GL_NV_framebuffer_multisample_coverage */ #ifdef __GLEE_GL_NV_framebuffer_multisample_coverage #ifndef GLEE_C_DEFINED_glRenderbufferStorageMultisampleCoverageNV #define GLEE_C_DEFINED_glRenderbufferStorageMultisampleCoverageNV void __stdcall GLee_Lazy_glRenderbufferStorageMultisampleCoverageNV(GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height) {if (GLeeInit()) glRenderbufferStorageMultisampleCoverageNV(target, coverageSamples, colorSamples, internalformat, width, height);} GLEEPFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC GLeeFuncPtr_glRenderbufferStorageMultisampleCoverageNV=GLee_Lazy_glRenderbufferStorageMultisampleCoverageNV; #endif #endif /* GL_EXT_framebuffer_sRGB */ #ifdef __GLEE_GL_EXT_framebuffer_sRGB #endif /* GL_NV_geometry_shader4 */ #ifdef __GLEE_GL_NV_geometry_shader4 #endif /* GL_NV_parameter_buffer_object */ #ifdef __GLEE_GL_NV_parameter_buffer_object #ifndef GLEE_C_DEFINED_glProgramBufferParametersfvNV #define GLEE_C_DEFINED_glProgramBufferParametersfvNV void __stdcall GLee_Lazy_glProgramBufferParametersfvNV(GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat * params) {if (GLeeInit()) glProgramBufferParametersfvNV(target, bindingIndex, wordIndex, count, params);} GLEEPFNGLPROGRAMBUFFERPARAMETERSFVNVPROC GLeeFuncPtr_glProgramBufferParametersfvNV=GLee_Lazy_glProgramBufferParametersfvNV; #endif #ifndef GLEE_C_DEFINED_glProgramBufferParametersIivNV #define GLEE_C_DEFINED_glProgramBufferParametersIivNV void __stdcall GLee_Lazy_glProgramBufferParametersIivNV(GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint * params) {if (GLeeInit()) glProgramBufferParametersIivNV(target, bindingIndex, wordIndex, count, params);} GLEEPFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC GLeeFuncPtr_glProgramBufferParametersIivNV=GLee_Lazy_glProgramBufferParametersIivNV; #endif #ifndef GLEE_C_DEFINED_glProgramBufferParametersIuivNV #define GLEE_C_DEFINED_glProgramBufferParametersIuivNV void __stdcall GLee_Lazy_glProgramBufferParametersIuivNV(GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint * params) {if (GLeeInit()) glProgramBufferParametersIuivNV(target, bindingIndex, wordIndex, count, params);} GLEEPFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC GLeeFuncPtr_glProgramBufferParametersIuivNV=GLee_Lazy_glProgramBufferParametersIuivNV; #endif #endif /* GL_EXT_draw_buffers2 */ #ifdef __GLEE_GL_EXT_draw_buffers2 #ifndef GLEE_C_DEFINED_glColorMaskIndexedEXT #define GLEE_C_DEFINED_glColorMaskIndexedEXT void __stdcall GLee_Lazy_glColorMaskIndexedEXT(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a) {if (GLeeInit()) glColorMaskIndexedEXT(index, r, g, b, a);} GLEEPFNGLCOLORMASKINDEXEDEXTPROC GLeeFuncPtr_glColorMaskIndexedEXT=GLee_Lazy_glColorMaskIndexedEXT; #endif #ifndef GLEE_C_DEFINED_glGetBooleanIndexedvEXT #define GLEE_C_DEFINED_glGetBooleanIndexedvEXT void __stdcall GLee_Lazy_glGetBooleanIndexedvEXT(GLenum target, GLuint index, GLboolean * data) {if (GLeeInit()) glGetBooleanIndexedvEXT(target, index, data);} GLEEPFNGLGETBOOLEANINDEXEDVEXTPROC GLeeFuncPtr_glGetBooleanIndexedvEXT=GLee_Lazy_glGetBooleanIndexedvEXT; #endif #ifndef GLEE_C_DEFINED_glGetIntegerIndexedvEXT #define GLEE_C_DEFINED_glGetIntegerIndexedvEXT void __stdcall GLee_Lazy_glGetIntegerIndexedvEXT(GLenum target, GLuint index, GLint * data) {if (GLeeInit()) glGetIntegerIndexedvEXT(target, index, data);} GLEEPFNGLGETINTEGERINDEXEDVEXTPROC GLeeFuncPtr_glGetIntegerIndexedvEXT=GLee_Lazy_glGetIntegerIndexedvEXT; #endif #ifndef GLEE_C_DEFINED_glEnableIndexedEXT #define GLEE_C_DEFINED_glEnableIndexedEXT void __stdcall GLee_Lazy_glEnableIndexedEXT(GLenum target, GLuint index) {if (GLeeInit()) glEnableIndexedEXT(target, index);} GLEEPFNGLENABLEINDEXEDEXTPROC GLeeFuncPtr_glEnableIndexedEXT=GLee_Lazy_glEnableIndexedEXT; #endif #ifndef GLEE_C_DEFINED_glDisableIndexedEXT #define GLEE_C_DEFINED_glDisableIndexedEXT void __stdcall GLee_Lazy_glDisableIndexedEXT(GLenum target, GLuint index) {if (GLeeInit()) glDisableIndexedEXT(target, index);} GLEEPFNGLDISABLEINDEXEDEXTPROC GLeeFuncPtr_glDisableIndexedEXT=GLee_Lazy_glDisableIndexedEXT; #endif #ifndef GLEE_C_DEFINED_glIsEnabledIndexedEXT #define GLEE_C_DEFINED_glIsEnabledIndexedEXT GLboolean __stdcall GLee_Lazy_glIsEnabledIndexedEXT(GLenum target, GLuint index) {if (GLeeInit()) return glIsEnabledIndexedEXT(target, index); return (GLboolean)0;} GLEEPFNGLISENABLEDINDEXEDEXTPROC GLeeFuncPtr_glIsEnabledIndexedEXT=GLee_Lazy_glIsEnabledIndexedEXT; #endif #endif /* GL_NV_transform_feedback */ #ifdef __GLEE_GL_NV_transform_feedback #ifndef GLEE_C_DEFINED_glBeginTransformFeedbackNV #define GLEE_C_DEFINED_glBeginTransformFeedbackNV void __stdcall GLee_Lazy_glBeginTransformFeedbackNV(GLenum primitiveMode) {if (GLeeInit()) glBeginTransformFeedbackNV(primitiveMode);} GLEEPFNGLBEGINTRANSFORMFEEDBACKNVPROC GLeeFuncPtr_glBeginTransformFeedbackNV=GLee_Lazy_glBeginTransformFeedbackNV; #endif #ifndef GLEE_C_DEFINED_glEndTransformFeedbackNV #define GLEE_C_DEFINED_glEndTransformFeedbackNV void __stdcall GLee_Lazy_glEndTransformFeedbackNV(void) {if (GLeeInit()) glEndTransformFeedbackNV();} GLEEPFNGLENDTRANSFORMFEEDBACKNVPROC GLeeFuncPtr_glEndTransformFeedbackNV=GLee_Lazy_glEndTransformFeedbackNV; #endif #ifndef GLEE_C_DEFINED_glTransformFeedbackAttribsNV #define GLEE_C_DEFINED_glTransformFeedbackAttribsNV void __stdcall GLee_Lazy_glTransformFeedbackAttribsNV(GLuint count, const GLint * attribs, GLenum bufferMode) {if (GLeeInit()) glTransformFeedbackAttribsNV(count, attribs, bufferMode);} GLEEPFNGLTRANSFORMFEEDBACKATTRIBSNVPROC GLeeFuncPtr_glTransformFeedbackAttribsNV=GLee_Lazy_glTransformFeedbackAttribsNV; #endif #ifndef GLEE_C_DEFINED_glBindBufferRangeNV #define GLEE_C_DEFINED_glBindBufferRangeNV void __stdcall GLee_Lazy_glBindBufferRangeNV(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) {if (GLeeInit()) glBindBufferRangeNV(target, index, buffer, offset, size);} GLEEPFNGLBINDBUFFERRANGENVPROC GLeeFuncPtr_glBindBufferRangeNV=GLee_Lazy_glBindBufferRangeNV; #endif #ifndef GLEE_C_DEFINED_glBindBufferOffsetNV #define GLEE_C_DEFINED_glBindBufferOffsetNV void __stdcall GLee_Lazy_glBindBufferOffsetNV(GLenum target, GLuint index, GLuint buffer, GLintptr offset) {if (GLeeInit()) glBindBufferOffsetNV(target, index, buffer, offset);} GLEEPFNGLBINDBUFFEROFFSETNVPROC GLeeFuncPtr_glBindBufferOffsetNV=GLee_Lazy_glBindBufferOffsetNV; #endif #ifndef GLEE_C_DEFINED_glBindBufferBaseNV #define GLEE_C_DEFINED_glBindBufferBaseNV void __stdcall GLee_Lazy_glBindBufferBaseNV(GLenum target, GLuint index, GLuint buffer) {if (GLeeInit()) glBindBufferBaseNV(target, index, buffer);} GLEEPFNGLBINDBUFFERBASENVPROC GLeeFuncPtr_glBindBufferBaseNV=GLee_Lazy_glBindBufferBaseNV; #endif #ifndef GLEE_C_DEFINED_glTransformFeedbackVaryingsNV #define GLEE_C_DEFINED_glTransformFeedbackVaryingsNV void __stdcall GLee_Lazy_glTransformFeedbackVaryingsNV(GLuint program, GLsizei count, const GLint * locations, GLenum bufferMode) {if (GLeeInit()) glTransformFeedbackVaryingsNV(program, count, locations, bufferMode);} GLEEPFNGLTRANSFORMFEEDBACKVARYINGSNVPROC GLeeFuncPtr_glTransformFeedbackVaryingsNV=GLee_Lazy_glTransformFeedbackVaryingsNV; #endif #ifndef GLEE_C_DEFINED_glActiveVaryingNV #define GLEE_C_DEFINED_glActiveVaryingNV void __stdcall GLee_Lazy_glActiveVaryingNV(GLuint program, const GLchar * name) {if (GLeeInit()) glActiveVaryingNV(program, name);} GLEEPFNGLACTIVEVARYINGNVPROC GLeeFuncPtr_glActiveVaryingNV=GLee_Lazy_glActiveVaryingNV; #endif #ifndef GLEE_C_DEFINED_glGetVaryingLocationNV #define GLEE_C_DEFINED_glGetVaryingLocationNV GLint __stdcall GLee_Lazy_glGetVaryingLocationNV(GLuint program, const GLchar * name) {if (GLeeInit()) return glGetVaryingLocationNV(program, name); return (GLint)0;} GLEEPFNGLGETVARYINGLOCATIONNVPROC GLeeFuncPtr_glGetVaryingLocationNV=GLee_Lazy_glGetVaryingLocationNV; #endif #ifndef GLEE_C_DEFINED_glGetActiveVaryingNV #define GLEE_C_DEFINED_glGetActiveVaryingNV void __stdcall GLee_Lazy_glGetActiveVaryingNV(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name) {if (GLeeInit()) glGetActiveVaryingNV(program, index, bufSize, length, size, type, name);} GLEEPFNGLGETACTIVEVARYINGNVPROC GLeeFuncPtr_glGetActiveVaryingNV=GLee_Lazy_glGetActiveVaryingNV; #endif #ifndef GLEE_C_DEFINED_glGetTransformFeedbackVaryingNV #define GLEE_C_DEFINED_glGetTransformFeedbackVaryingNV void __stdcall GLee_Lazy_glGetTransformFeedbackVaryingNV(GLuint program, GLuint index, GLint * location) {if (GLeeInit()) glGetTransformFeedbackVaryingNV(program, index, location);} GLEEPFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC GLeeFuncPtr_glGetTransformFeedbackVaryingNV=GLee_Lazy_glGetTransformFeedbackVaryingNV; #endif #ifndef GLEE_C_DEFINED_glTransformFeedbackStreamAttribsNV #define GLEE_C_DEFINED_glTransformFeedbackStreamAttribsNV void __stdcall GLee_Lazy_glTransformFeedbackStreamAttribsNV(GLsizei count, const GLint * attribs, GLsizei nbuffers, const GLint * bufstreams, GLenum bufferMode) {if (GLeeInit()) glTransformFeedbackStreamAttribsNV(count, attribs, nbuffers, bufstreams, bufferMode);} GLEEPFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC GLeeFuncPtr_glTransformFeedbackStreamAttribsNV=GLee_Lazy_glTransformFeedbackStreamAttribsNV; #endif #endif /* GL_EXT_bindable_uniform */ #ifdef __GLEE_GL_EXT_bindable_uniform #ifndef GLEE_C_DEFINED_glUniformBufferEXT #define GLEE_C_DEFINED_glUniformBufferEXT void __stdcall GLee_Lazy_glUniformBufferEXT(GLuint program, GLint location, GLuint buffer) {if (GLeeInit()) glUniformBufferEXT(program, location, buffer);} GLEEPFNGLUNIFORMBUFFEREXTPROC GLeeFuncPtr_glUniformBufferEXT=GLee_Lazy_glUniformBufferEXT; #endif #ifndef GLEE_C_DEFINED_glGetUniformBufferSizeEXT #define GLEE_C_DEFINED_glGetUniformBufferSizeEXT GLint __stdcall GLee_Lazy_glGetUniformBufferSizeEXT(GLuint program, GLint location) {if (GLeeInit()) return glGetUniformBufferSizeEXT(program, location); return (GLint)0;} GLEEPFNGLGETUNIFORMBUFFERSIZEEXTPROC GLeeFuncPtr_glGetUniformBufferSizeEXT=GLee_Lazy_glGetUniformBufferSizeEXT; #endif #ifndef GLEE_C_DEFINED_glGetUniformOffsetEXT #define GLEE_C_DEFINED_glGetUniformOffsetEXT GLintptr __stdcall GLee_Lazy_glGetUniformOffsetEXT(GLuint program, GLint location) {if (GLeeInit()) return glGetUniformOffsetEXT(program, location); return (GLintptr)0;} GLEEPFNGLGETUNIFORMOFFSETEXTPROC GLeeFuncPtr_glGetUniformOffsetEXT=GLee_Lazy_glGetUniformOffsetEXT; #endif #endif /* GL_EXT_texture_integer */ #ifdef __GLEE_GL_EXT_texture_integer #ifndef GLEE_C_DEFINED_glTexParameterIivEXT #define GLEE_C_DEFINED_glTexParameterIivEXT void __stdcall GLee_Lazy_glTexParameterIivEXT(GLenum target, GLenum pname, const GLint * params) {if (GLeeInit()) glTexParameterIivEXT(target, pname, params);} GLEEPFNGLTEXPARAMETERIIVEXTPROC GLeeFuncPtr_glTexParameterIivEXT=GLee_Lazy_glTexParameterIivEXT; #endif #ifndef GLEE_C_DEFINED_glTexParameterIuivEXT #define GLEE_C_DEFINED_glTexParameterIuivEXT void __stdcall GLee_Lazy_glTexParameterIuivEXT(GLenum target, GLenum pname, const GLuint * params) {if (GLeeInit()) glTexParameterIuivEXT(target, pname, params);} GLEEPFNGLTEXPARAMETERIUIVEXTPROC GLeeFuncPtr_glTexParameterIuivEXT=GLee_Lazy_glTexParameterIuivEXT; #endif #ifndef GLEE_C_DEFINED_glGetTexParameterIivEXT #define GLEE_C_DEFINED_glGetTexParameterIivEXT void __stdcall GLee_Lazy_glGetTexParameterIivEXT(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetTexParameterIivEXT(target, pname, params);} GLEEPFNGLGETTEXPARAMETERIIVEXTPROC GLeeFuncPtr_glGetTexParameterIivEXT=GLee_Lazy_glGetTexParameterIivEXT; #endif #ifndef GLEE_C_DEFINED_glGetTexParameterIuivEXT #define GLEE_C_DEFINED_glGetTexParameterIuivEXT void __stdcall GLee_Lazy_glGetTexParameterIuivEXT(GLenum target, GLenum pname, GLuint * params) {if (GLeeInit()) glGetTexParameterIuivEXT(target, pname, params);} GLEEPFNGLGETTEXPARAMETERIUIVEXTPROC GLeeFuncPtr_glGetTexParameterIuivEXT=GLee_Lazy_glGetTexParameterIuivEXT; #endif #ifndef GLEE_C_DEFINED_glClearColorIiEXT #define GLEE_C_DEFINED_glClearColorIiEXT void __stdcall GLee_Lazy_glClearColorIiEXT(GLint red, GLint green, GLint blue, GLint alpha) {if (GLeeInit()) glClearColorIiEXT(red, green, blue, alpha);} GLEEPFNGLCLEARCOLORIIEXTPROC GLeeFuncPtr_glClearColorIiEXT=GLee_Lazy_glClearColorIiEXT; #endif #ifndef GLEE_C_DEFINED_glClearColorIuiEXT #define GLEE_C_DEFINED_glClearColorIuiEXT void __stdcall GLee_Lazy_glClearColorIuiEXT(GLuint red, GLuint green, GLuint blue, GLuint alpha) {if (GLeeInit()) glClearColorIuiEXT(red, green, blue, alpha);} GLEEPFNGLCLEARCOLORIUIEXTPROC GLeeFuncPtr_glClearColorIuiEXT=GLee_Lazy_glClearColorIuiEXT; #endif #endif /* GL_GREMEDY_frame_terminator */ #ifdef __GLEE_GL_GREMEDY_frame_terminator #ifndef GLEE_C_DEFINED_glFrameTerminatorGREMEDY #define GLEE_C_DEFINED_glFrameTerminatorGREMEDY void __stdcall GLee_Lazy_glFrameTerminatorGREMEDY(void) {if (GLeeInit()) glFrameTerminatorGREMEDY();} GLEEPFNGLFRAMETERMINATORGREMEDYPROC GLeeFuncPtr_glFrameTerminatorGREMEDY=GLee_Lazy_glFrameTerminatorGREMEDY; #endif #endif /* GL_NV_conditional_render */ #ifdef __GLEE_GL_NV_conditional_render #ifndef GLEE_C_DEFINED_glBeginConditionalRenderNV #define GLEE_C_DEFINED_glBeginConditionalRenderNV void __stdcall GLee_Lazy_glBeginConditionalRenderNV(GLuint id, GLenum mode) {if (GLeeInit()) glBeginConditionalRenderNV(id, mode);} GLEEPFNGLBEGINCONDITIONALRENDERNVPROC GLeeFuncPtr_glBeginConditionalRenderNV=GLee_Lazy_glBeginConditionalRenderNV; #endif #ifndef GLEE_C_DEFINED_glEndConditionalRenderNV #define GLEE_C_DEFINED_glEndConditionalRenderNV void __stdcall GLee_Lazy_glEndConditionalRenderNV(void) {if (GLeeInit()) glEndConditionalRenderNV();} GLEEPFNGLENDCONDITIONALRENDERNVPROC GLeeFuncPtr_glEndConditionalRenderNV=GLee_Lazy_glEndConditionalRenderNV; #endif #endif /* GL_NV_present_video */ #ifdef __GLEE_GL_NV_present_video #ifndef GLEE_C_DEFINED_glPresentFrameKeyedNV #define GLEE_C_DEFINED_glPresentFrameKeyedNV void __stdcall GLee_Lazy_glPresentFrameKeyedNV(GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1) {if (GLeeInit()) glPresentFrameKeyedNV(video_slot, minPresentTime, beginPresentTimeId, presentDurationId, type, target0, fill0, key0, target1, fill1, key1);} GLEEPFNGLPRESENTFRAMEKEYEDNVPROC GLeeFuncPtr_glPresentFrameKeyedNV=GLee_Lazy_glPresentFrameKeyedNV; #endif #ifndef GLEE_C_DEFINED_glPresentFrameDualFillNV #define GLEE_C_DEFINED_glPresentFrameDualFillNV void __stdcall GLee_Lazy_glPresentFrameDualFillNV(GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3) {if (GLeeInit()) glPresentFrameDualFillNV(video_slot, minPresentTime, beginPresentTimeId, presentDurationId, type, target0, fill0, target1, fill1, target2, fill2, target3, fill3);} GLEEPFNGLPRESENTFRAMEDUALFILLNVPROC GLeeFuncPtr_glPresentFrameDualFillNV=GLee_Lazy_glPresentFrameDualFillNV; #endif #ifndef GLEE_C_DEFINED_glGetVideoivNV #define GLEE_C_DEFINED_glGetVideoivNV void __stdcall GLee_Lazy_glGetVideoivNV(GLuint video_slot, GLenum pname, GLint * params) {if (GLeeInit()) glGetVideoivNV(video_slot, pname, params);} GLEEPFNGLGETVIDEOIVNVPROC GLeeFuncPtr_glGetVideoivNV=GLee_Lazy_glGetVideoivNV; #endif #ifndef GLEE_C_DEFINED_glGetVideouivNV #define GLEE_C_DEFINED_glGetVideouivNV void __stdcall GLee_Lazy_glGetVideouivNV(GLuint video_slot, GLenum pname, GLuint * params) {if (GLeeInit()) glGetVideouivNV(video_slot, pname, params);} GLEEPFNGLGETVIDEOUIVNVPROC GLeeFuncPtr_glGetVideouivNV=GLee_Lazy_glGetVideouivNV; #endif #ifndef GLEE_C_DEFINED_glGetVideoi64vNV #define GLEE_C_DEFINED_glGetVideoi64vNV void __stdcall GLee_Lazy_glGetVideoi64vNV(GLuint video_slot, GLenum pname, GLint64EXT * params) {if (GLeeInit()) glGetVideoi64vNV(video_slot, pname, params);} GLEEPFNGLGETVIDEOI64VNVPROC GLeeFuncPtr_glGetVideoi64vNV=GLee_Lazy_glGetVideoi64vNV; #endif #ifndef GLEE_C_DEFINED_glGetVideoui64vNV #define GLEE_C_DEFINED_glGetVideoui64vNV void __stdcall GLee_Lazy_glGetVideoui64vNV(GLuint video_slot, GLenum pname, GLuint64EXT * params) {if (GLeeInit()) glGetVideoui64vNV(video_slot, pname, params);} GLEEPFNGLGETVIDEOUI64VNVPROC GLeeFuncPtr_glGetVideoui64vNV=GLee_Lazy_glGetVideoui64vNV; #endif #endif /* GL_EXT_transform_feedback */ #ifdef __GLEE_GL_EXT_transform_feedback #ifndef GLEE_C_DEFINED_glBeginTransformFeedbackEXT #define GLEE_C_DEFINED_glBeginTransformFeedbackEXT void __stdcall GLee_Lazy_glBeginTransformFeedbackEXT(GLenum primitiveMode) {if (GLeeInit()) glBeginTransformFeedbackEXT(primitiveMode);} GLEEPFNGLBEGINTRANSFORMFEEDBACKEXTPROC GLeeFuncPtr_glBeginTransformFeedbackEXT=GLee_Lazy_glBeginTransformFeedbackEXT; #endif #ifndef GLEE_C_DEFINED_glEndTransformFeedbackEXT #define GLEE_C_DEFINED_glEndTransformFeedbackEXT void __stdcall GLee_Lazy_glEndTransformFeedbackEXT(void) {if (GLeeInit()) glEndTransformFeedbackEXT();} GLEEPFNGLENDTRANSFORMFEEDBACKEXTPROC GLeeFuncPtr_glEndTransformFeedbackEXT=GLee_Lazy_glEndTransformFeedbackEXT; #endif #ifndef GLEE_C_DEFINED_glBindBufferRangeEXT #define GLEE_C_DEFINED_glBindBufferRangeEXT void __stdcall GLee_Lazy_glBindBufferRangeEXT(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) {if (GLeeInit()) glBindBufferRangeEXT(target, index, buffer, offset, size);} GLEEPFNGLBINDBUFFERRANGEEXTPROC GLeeFuncPtr_glBindBufferRangeEXT=GLee_Lazy_glBindBufferRangeEXT; #endif #ifndef GLEE_C_DEFINED_glBindBufferOffsetEXT #define GLEE_C_DEFINED_glBindBufferOffsetEXT void __stdcall GLee_Lazy_glBindBufferOffsetEXT(GLenum target, GLuint index, GLuint buffer, GLintptr offset) {if (GLeeInit()) glBindBufferOffsetEXT(target, index, buffer, offset);} GLEEPFNGLBINDBUFFEROFFSETEXTPROC GLeeFuncPtr_glBindBufferOffsetEXT=GLee_Lazy_glBindBufferOffsetEXT; #endif #ifndef GLEE_C_DEFINED_glBindBufferBaseEXT #define GLEE_C_DEFINED_glBindBufferBaseEXT void __stdcall GLee_Lazy_glBindBufferBaseEXT(GLenum target, GLuint index, GLuint buffer) {if (GLeeInit()) glBindBufferBaseEXT(target, index, buffer);} GLEEPFNGLBINDBUFFERBASEEXTPROC GLeeFuncPtr_glBindBufferBaseEXT=GLee_Lazy_glBindBufferBaseEXT; #endif #ifndef GLEE_C_DEFINED_glTransformFeedbackVaryingsEXT #define GLEE_C_DEFINED_glTransformFeedbackVaryingsEXT void __stdcall GLee_Lazy_glTransformFeedbackVaryingsEXT(GLuint program, GLsizei count, const GLchar* * varyings, GLenum bufferMode) {if (GLeeInit()) glTransformFeedbackVaryingsEXT(program, count, varyings, bufferMode);} GLEEPFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC GLeeFuncPtr_glTransformFeedbackVaryingsEXT=GLee_Lazy_glTransformFeedbackVaryingsEXT; #endif #ifndef GLEE_C_DEFINED_glGetTransformFeedbackVaryingEXT #define GLEE_C_DEFINED_glGetTransformFeedbackVaryingEXT void __stdcall GLee_Lazy_glGetTransformFeedbackVaryingEXT(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name) {if (GLeeInit()) glGetTransformFeedbackVaryingEXT(program, index, bufSize, length, size, type, name);} GLEEPFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC GLeeFuncPtr_glGetTransformFeedbackVaryingEXT=GLee_Lazy_glGetTransformFeedbackVaryingEXT; #endif #endif /* GL_EXT_direct_state_access */ #ifdef __GLEE_GL_EXT_direct_state_access #ifndef GLEE_C_DEFINED_glClientAttribDefaultEXT #define GLEE_C_DEFINED_glClientAttribDefaultEXT void __stdcall GLee_Lazy_glClientAttribDefaultEXT(GLbitfield mask) {if (GLeeInit()) glClientAttribDefaultEXT(mask);} GLEEPFNGLCLIENTATTRIBDEFAULTEXTPROC GLeeFuncPtr_glClientAttribDefaultEXT=GLee_Lazy_glClientAttribDefaultEXT; #endif #ifndef GLEE_C_DEFINED_glPushClientAttribDefaultEXT #define GLEE_C_DEFINED_glPushClientAttribDefaultEXT void __stdcall GLee_Lazy_glPushClientAttribDefaultEXT(GLbitfield mask) {if (GLeeInit()) glPushClientAttribDefaultEXT(mask);} GLEEPFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC GLeeFuncPtr_glPushClientAttribDefaultEXT=GLee_Lazy_glPushClientAttribDefaultEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixLoadfEXT #define GLEE_C_DEFINED_glMatrixLoadfEXT void __stdcall GLee_Lazy_glMatrixLoadfEXT(GLenum mode, const GLfloat * m) {if (GLeeInit()) glMatrixLoadfEXT(mode, m);} GLEEPFNGLMATRIXLOADFEXTPROC GLeeFuncPtr_glMatrixLoadfEXT=GLee_Lazy_glMatrixLoadfEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixLoaddEXT #define GLEE_C_DEFINED_glMatrixLoaddEXT void __stdcall GLee_Lazy_glMatrixLoaddEXT(GLenum mode, const GLdouble * m) {if (GLeeInit()) glMatrixLoaddEXT(mode, m);} GLEEPFNGLMATRIXLOADDEXTPROC GLeeFuncPtr_glMatrixLoaddEXT=GLee_Lazy_glMatrixLoaddEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixMultfEXT #define GLEE_C_DEFINED_glMatrixMultfEXT void __stdcall GLee_Lazy_glMatrixMultfEXT(GLenum mode, const GLfloat * m) {if (GLeeInit()) glMatrixMultfEXT(mode, m);} GLEEPFNGLMATRIXMULTFEXTPROC GLeeFuncPtr_glMatrixMultfEXT=GLee_Lazy_glMatrixMultfEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixMultdEXT #define GLEE_C_DEFINED_glMatrixMultdEXT void __stdcall GLee_Lazy_glMatrixMultdEXT(GLenum mode, const GLdouble * m) {if (GLeeInit()) glMatrixMultdEXT(mode, m);} GLEEPFNGLMATRIXMULTDEXTPROC GLeeFuncPtr_glMatrixMultdEXT=GLee_Lazy_glMatrixMultdEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixLoadIdentityEXT #define GLEE_C_DEFINED_glMatrixLoadIdentityEXT void __stdcall GLee_Lazy_glMatrixLoadIdentityEXT(GLenum mode) {if (GLeeInit()) glMatrixLoadIdentityEXT(mode);} GLEEPFNGLMATRIXLOADIDENTITYEXTPROC GLeeFuncPtr_glMatrixLoadIdentityEXT=GLee_Lazy_glMatrixLoadIdentityEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixRotatefEXT #define GLEE_C_DEFINED_glMatrixRotatefEXT void __stdcall GLee_Lazy_glMatrixRotatefEXT(GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glMatrixRotatefEXT(mode, angle, x, y, z);} GLEEPFNGLMATRIXROTATEFEXTPROC GLeeFuncPtr_glMatrixRotatefEXT=GLee_Lazy_glMatrixRotatefEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixRotatedEXT #define GLEE_C_DEFINED_glMatrixRotatedEXT void __stdcall GLee_Lazy_glMatrixRotatedEXT(GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z) {if (GLeeInit()) glMatrixRotatedEXT(mode, angle, x, y, z);} GLEEPFNGLMATRIXROTATEDEXTPROC GLeeFuncPtr_glMatrixRotatedEXT=GLee_Lazy_glMatrixRotatedEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixScalefEXT #define GLEE_C_DEFINED_glMatrixScalefEXT void __stdcall GLee_Lazy_glMatrixScalefEXT(GLenum mode, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glMatrixScalefEXT(mode, x, y, z);} GLEEPFNGLMATRIXSCALEFEXTPROC GLeeFuncPtr_glMatrixScalefEXT=GLee_Lazy_glMatrixScalefEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixScaledEXT #define GLEE_C_DEFINED_glMatrixScaledEXT void __stdcall GLee_Lazy_glMatrixScaledEXT(GLenum mode, GLdouble x, GLdouble y, GLdouble z) {if (GLeeInit()) glMatrixScaledEXT(mode, x, y, z);} GLEEPFNGLMATRIXSCALEDEXTPROC GLeeFuncPtr_glMatrixScaledEXT=GLee_Lazy_glMatrixScaledEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixTranslatefEXT #define GLEE_C_DEFINED_glMatrixTranslatefEXT void __stdcall GLee_Lazy_glMatrixTranslatefEXT(GLenum mode, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glMatrixTranslatefEXT(mode, x, y, z);} GLEEPFNGLMATRIXTRANSLATEFEXTPROC GLeeFuncPtr_glMatrixTranslatefEXT=GLee_Lazy_glMatrixTranslatefEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixTranslatedEXT #define GLEE_C_DEFINED_glMatrixTranslatedEXT void __stdcall GLee_Lazy_glMatrixTranslatedEXT(GLenum mode, GLdouble x, GLdouble y, GLdouble z) {if (GLeeInit()) glMatrixTranslatedEXT(mode, x, y, z);} GLEEPFNGLMATRIXTRANSLATEDEXTPROC GLeeFuncPtr_glMatrixTranslatedEXT=GLee_Lazy_glMatrixTranslatedEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixFrustumEXT #define GLEE_C_DEFINED_glMatrixFrustumEXT void __stdcall GLee_Lazy_glMatrixFrustumEXT(GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) {if (GLeeInit()) glMatrixFrustumEXT(mode, left, right, bottom, top, zNear, zFar);} GLEEPFNGLMATRIXFRUSTUMEXTPROC GLeeFuncPtr_glMatrixFrustumEXT=GLee_Lazy_glMatrixFrustumEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixOrthoEXT #define GLEE_C_DEFINED_glMatrixOrthoEXT void __stdcall GLee_Lazy_glMatrixOrthoEXT(GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) {if (GLeeInit()) glMatrixOrthoEXT(mode, left, right, bottom, top, zNear, zFar);} GLEEPFNGLMATRIXORTHOEXTPROC GLeeFuncPtr_glMatrixOrthoEXT=GLee_Lazy_glMatrixOrthoEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixPopEXT #define GLEE_C_DEFINED_glMatrixPopEXT void __stdcall GLee_Lazy_glMatrixPopEXT(GLenum mode) {if (GLeeInit()) glMatrixPopEXT(mode);} GLEEPFNGLMATRIXPOPEXTPROC GLeeFuncPtr_glMatrixPopEXT=GLee_Lazy_glMatrixPopEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixPushEXT #define GLEE_C_DEFINED_glMatrixPushEXT void __stdcall GLee_Lazy_glMatrixPushEXT(GLenum mode) {if (GLeeInit()) glMatrixPushEXT(mode);} GLEEPFNGLMATRIXPUSHEXTPROC GLeeFuncPtr_glMatrixPushEXT=GLee_Lazy_glMatrixPushEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixLoadTransposefEXT #define GLEE_C_DEFINED_glMatrixLoadTransposefEXT void __stdcall GLee_Lazy_glMatrixLoadTransposefEXT(GLenum mode, const GLfloat * m) {if (GLeeInit()) glMatrixLoadTransposefEXT(mode, m);} GLEEPFNGLMATRIXLOADTRANSPOSEFEXTPROC GLeeFuncPtr_glMatrixLoadTransposefEXT=GLee_Lazy_glMatrixLoadTransposefEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixLoadTransposedEXT #define GLEE_C_DEFINED_glMatrixLoadTransposedEXT void __stdcall GLee_Lazy_glMatrixLoadTransposedEXT(GLenum mode, const GLdouble * m) {if (GLeeInit()) glMatrixLoadTransposedEXT(mode, m);} GLEEPFNGLMATRIXLOADTRANSPOSEDEXTPROC GLeeFuncPtr_glMatrixLoadTransposedEXT=GLee_Lazy_glMatrixLoadTransposedEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixMultTransposefEXT #define GLEE_C_DEFINED_glMatrixMultTransposefEXT void __stdcall GLee_Lazy_glMatrixMultTransposefEXT(GLenum mode, const GLfloat * m) {if (GLeeInit()) glMatrixMultTransposefEXT(mode, m);} GLEEPFNGLMATRIXMULTTRANSPOSEFEXTPROC GLeeFuncPtr_glMatrixMultTransposefEXT=GLee_Lazy_glMatrixMultTransposefEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixMultTransposedEXT #define GLEE_C_DEFINED_glMatrixMultTransposedEXT void __stdcall GLee_Lazy_glMatrixMultTransposedEXT(GLenum mode, const GLdouble * m) {if (GLeeInit()) glMatrixMultTransposedEXT(mode, m);} GLEEPFNGLMATRIXMULTTRANSPOSEDEXTPROC GLeeFuncPtr_glMatrixMultTransposedEXT=GLee_Lazy_glMatrixMultTransposedEXT; #endif #ifndef GLEE_C_DEFINED_glTextureParameterfEXT #define GLEE_C_DEFINED_glTextureParameterfEXT void __stdcall GLee_Lazy_glTextureParameterfEXT(GLuint texture, GLenum target, GLenum pname, GLfloat param) {if (GLeeInit()) glTextureParameterfEXT(texture, target, pname, param);} GLEEPFNGLTEXTUREPARAMETERFEXTPROC GLeeFuncPtr_glTextureParameterfEXT=GLee_Lazy_glTextureParameterfEXT; #endif #ifndef GLEE_C_DEFINED_glTextureParameterfvEXT #define GLEE_C_DEFINED_glTextureParameterfvEXT void __stdcall GLee_Lazy_glTextureParameterfvEXT(GLuint texture, GLenum target, GLenum pname, const GLfloat * params) {if (GLeeInit()) glTextureParameterfvEXT(texture, target, pname, params);} GLEEPFNGLTEXTUREPARAMETERFVEXTPROC GLeeFuncPtr_glTextureParameterfvEXT=GLee_Lazy_glTextureParameterfvEXT; #endif #ifndef GLEE_C_DEFINED_glTextureParameteriEXT #define GLEE_C_DEFINED_glTextureParameteriEXT void __stdcall GLee_Lazy_glTextureParameteriEXT(GLuint texture, GLenum target, GLenum pname, GLint param) {if (GLeeInit()) glTextureParameteriEXT(texture, target, pname, param);} GLEEPFNGLTEXTUREPARAMETERIEXTPROC GLeeFuncPtr_glTextureParameteriEXT=GLee_Lazy_glTextureParameteriEXT; #endif #ifndef GLEE_C_DEFINED_glTextureParameterivEXT #define GLEE_C_DEFINED_glTextureParameterivEXT void __stdcall GLee_Lazy_glTextureParameterivEXT(GLuint texture, GLenum target, GLenum pname, const GLint * params) {if (GLeeInit()) glTextureParameterivEXT(texture, target, pname, params);} GLEEPFNGLTEXTUREPARAMETERIVEXTPROC GLeeFuncPtr_glTextureParameterivEXT=GLee_Lazy_glTextureParameterivEXT; #endif #ifndef GLEE_C_DEFINED_glTextureImage1DEXT #define GLEE_C_DEFINED_glTextureImage1DEXT void __stdcall GLee_Lazy_glTextureImage1DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glTextureImage1DEXT(texture, target, level, internalformat, width, border, format, type, pixels);} GLEEPFNGLTEXTUREIMAGE1DEXTPROC GLeeFuncPtr_glTextureImage1DEXT=GLee_Lazy_glTextureImage1DEXT; #endif #ifndef GLEE_C_DEFINED_glTextureImage2DEXT #define GLEE_C_DEFINED_glTextureImage2DEXT void __stdcall GLee_Lazy_glTextureImage2DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glTextureImage2DEXT(texture, target, level, internalformat, width, height, border, format, type, pixels);} GLEEPFNGLTEXTUREIMAGE2DEXTPROC GLeeFuncPtr_glTextureImage2DEXT=GLee_Lazy_glTextureImage2DEXT; #endif #ifndef GLEE_C_DEFINED_glTextureSubImage1DEXT #define GLEE_C_DEFINED_glTextureSubImage1DEXT void __stdcall GLee_Lazy_glTextureSubImage1DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glTextureSubImage1DEXT(texture, target, level, xoffset, width, format, type, pixels);} GLEEPFNGLTEXTURESUBIMAGE1DEXTPROC GLeeFuncPtr_glTextureSubImage1DEXT=GLee_Lazy_glTextureSubImage1DEXT; #endif #ifndef GLEE_C_DEFINED_glTextureSubImage2DEXT #define GLEE_C_DEFINED_glTextureSubImage2DEXT void __stdcall GLee_Lazy_glTextureSubImage2DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glTextureSubImage2DEXT(texture, target, level, xoffset, yoffset, width, height, format, type, pixels);} GLEEPFNGLTEXTURESUBIMAGE2DEXTPROC GLeeFuncPtr_glTextureSubImage2DEXT=GLee_Lazy_glTextureSubImage2DEXT; #endif #ifndef GLEE_C_DEFINED_glCopyTextureImage1DEXT #define GLEE_C_DEFINED_glCopyTextureImage1DEXT void __stdcall GLee_Lazy_glCopyTextureImage1DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border) {if (GLeeInit()) glCopyTextureImage1DEXT(texture, target, level, internalformat, x, y, width, border);} GLEEPFNGLCOPYTEXTUREIMAGE1DEXTPROC GLeeFuncPtr_glCopyTextureImage1DEXT=GLee_Lazy_glCopyTextureImage1DEXT; #endif #ifndef GLEE_C_DEFINED_glCopyTextureImage2DEXT #define GLEE_C_DEFINED_glCopyTextureImage2DEXT void __stdcall GLee_Lazy_glCopyTextureImage2DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) {if (GLeeInit()) glCopyTextureImage2DEXT(texture, target, level, internalformat, x, y, width, height, border);} GLEEPFNGLCOPYTEXTUREIMAGE2DEXTPROC GLeeFuncPtr_glCopyTextureImage2DEXT=GLee_Lazy_glCopyTextureImage2DEXT; #endif #ifndef GLEE_C_DEFINED_glCopyTextureSubImage1DEXT #define GLEE_C_DEFINED_glCopyTextureSubImage1DEXT void __stdcall GLee_Lazy_glCopyTextureSubImage1DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) {if (GLeeInit()) glCopyTextureSubImage1DEXT(texture, target, level, xoffset, x, y, width);} GLEEPFNGLCOPYTEXTURESUBIMAGE1DEXTPROC GLeeFuncPtr_glCopyTextureSubImage1DEXT=GLee_Lazy_glCopyTextureSubImage1DEXT; #endif #ifndef GLEE_C_DEFINED_glCopyTextureSubImage2DEXT #define GLEE_C_DEFINED_glCopyTextureSubImage2DEXT void __stdcall GLee_Lazy_glCopyTextureSubImage2DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) {if (GLeeInit()) glCopyTextureSubImage2DEXT(texture, target, level, xoffset, yoffset, x, y, width, height);} GLEEPFNGLCOPYTEXTURESUBIMAGE2DEXTPROC GLeeFuncPtr_glCopyTextureSubImage2DEXT=GLee_Lazy_glCopyTextureSubImage2DEXT; #endif #ifndef GLEE_C_DEFINED_glGetTextureImageEXT #define GLEE_C_DEFINED_glGetTextureImageEXT void __stdcall GLee_Lazy_glGetTextureImageEXT(GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, GLvoid * pixels) {if (GLeeInit()) glGetTextureImageEXT(texture, target, level, format, type, pixels);} GLEEPFNGLGETTEXTUREIMAGEEXTPROC GLeeFuncPtr_glGetTextureImageEXT=GLee_Lazy_glGetTextureImageEXT; #endif #ifndef GLEE_C_DEFINED_glGetTextureParameterfvEXT #define GLEE_C_DEFINED_glGetTextureParameterfvEXT void __stdcall GLee_Lazy_glGetTextureParameterfvEXT(GLuint texture, GLenum target, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetTextureParameterfvEXT(texture, target, pname, params);} GLEEPFNGLGETTEXTUREPARAMETERFVEXTPROC GLeeFuncPtr_glGetTextureParameterfvEXT=GLee_Lazy_glGetTextureParameterfvEXT; #endif #ifndef GLEE_C_DEFINED_glGetTextureParameterivEXT #define GLEE_C_DEFINED_glGetTextureParameterivEXT void __stdcall GLee_Lazy_glGetTextureParameterivEXT(GLuint texture, GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetTextureParameterivEXT(texture, target, pname, params);} GLEEPFNGLGETTEXTUREPARAMETERIVEXTPROC GLeeFuncPtr_glGetTextureParameterivEXT=GLee_Lazy_glGetTextureParameterivEXT; #endif #ifndef GLEE_C_DEFINED_glGetTextureLevelParameterfvEXT #define GLEE_C_DEFINED_glGetTextureLevelParameterfvEXT void __stdcall GLee_Lazy_glGetTextureLevelParameterfvEXT(GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetTextureLevelParameterfvEXT(texture, target, level, pname, params);} GLEEPFNGLGETTEXTURELEVELPARAMETERFVEXTPROC GLeeFuncPtr_glGetTextureLevelParameterfvEXT=GLee_Lazy_glGetTextureLevelParameterfvEXT; #endif #ifndef GLEE_C_DEFINED_glGetTextureLevelParameterivEXT #define GLEE_C_DEFINED_glGetTextureLevelParameterivEXT void __stdcall GLee_Lazy_glGetTextureLevelParameterivEXT(GLuint texture, GLenum target, GLint level, GLenum pname, GLint * params) {if (GLeeInit()) glGetTextureLevelParameterivEXT(texture, target, level, pname, params);} GLEEPFNGLGETTEXTURELEVELPARAMETERIVEXTPROC GLeeFuncPtr_glGetTextureLevelParameterivEXT=GLee_Lazy_glGetTextureLevelParameterivEXT; #endif #ifndef GLEE_C_DEFINED_glTextureImage3DEXT #define GLEE_C_DEFINED_glTextureImage3DEXT void __stdcall GLee_Lazy_glTextureImage3DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glTextureImage3DEXT(texture, target, level, internalformat, width, height, depth, border, format, type, pixels);} GLEEPFNGLTEXTUREIMAGE3DEXTPROC GLeeFuncPtr_glTextureImage3DEXT=GLee_Lazy_glTextureImage3DEXT; #endif #ifndef GLEE_C_DEFINED_glTextureSubImage3DEXT #define GLEE_C_DEFINED_glTextureSubImage3DEXT void __stdcall GLee_Lazy_glTextureSubImage3DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glTextureSubImage3DEXT(texture, target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);} GLEEPFNGLTEXTURESUBIMAGE3DEXTPROC GLeeFuncPtr_glTextureSubImage3DEXT=GLee_Lazy_glTextureSubImage3DEXT; #endif #ifndef GLEE_C_DEFINED_glCopyTextureSubImage3DEXT #define GLEE_C_DEFINED_glCopyTextureSubImage3DEXT void __stdcall GLee_Lazy_glCopyTextureSubImage3DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) {if (GLeeInit()) glCopyTextureSubImage3DEXT(texture, target, level, xoffset, yoffset, zoffset, x, y, width, height);} GLEEPFNGLCOPYTEXTURESUBIMAGE3DEXTPROC GLeeFuncPtr_glCopyTextureSubImage3DEXT=GLee_Lazy_glCopyTextureSubImage3DEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexParameterfEXT #define GLEE_C_DEFINED_glMultiTexParameterfEXT void __stdcall GLee_Lazy_glMultiTexParameterfEXT(GLenum texunit, GLenum target, GLenum pname, GLfloat param) {if (GLeeInit()) glMultiTexParameterfEXT(texunit, target, pname, param);} GLEEPFNGLMULTITEXPARAMETERFEXTPROC GLeeFuncPtr_glMultiTexParameterfEXT=GLee_Lazy_glMultiTexParameterfEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexParameterfvEXT #define GLEE_C_DEFINED_glMultiTexParameterfvEXT void __stdcall GLee_Lazy_glMultiTexParameterfvEXT(GLenum texunit, GLenum target, GLenum pname, const GLfloat * params) {if (GLeeInit()) glMultiTexParameterfvEXT(texunit, target, pname, params);} GLEEPFNGLMULTITEXPARAMETERFVEXTPROC GLeeFuncPtr_glMultiTexParameterfvEXT=GLee_Lazy_glMultiTexParameterfvEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexParameteriEXT #define GLEE_C_DEFINED_glMultiTexParameteriEXT void __stdcall GLee_Lazy_glMultiTexParameteriEXT(GLenum texunit, GLenum target, GLenum pname, GLint param) {if (GLeeInit()) glMultiTexParameteriEXT(texunit, target, pname, param);} GLEEPFNGLMULTITEXPARAMETERIEXTPROC GLeeFuncPtr_glMultiTexParameteriEXT=GLee_Lazy_glMultiTexParameteriEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexParameterivEXT #define GLEE_C_DEFINED_glMultiTexParameterivEXT void __stdcall GLee_Lazy_glMultiTexParameterivEXT(GLenum texunit, GLenum target, GLenum pname, const GLint * params) {if (GLeeInit()) glMultiTexParameterivEXT(texunit, target, pname, params);} GLEEPFNGLMULTITEXPARAMETERIVEXTPROC GLeeFuncPtr_glMultiTexParameterivEXT=GLee_Lazy_glMultiTexParameterivEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexImage1DEXT #define GLEE_C_DEFINED_glMultiTexImage1DEXT void __stdcall GLee_Lazy_glMultiTexImage1DEXT(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glMultiTexImage1DEXT(texunit, target, level, internalformat, width, border, format, type, pixels);} GLEEPFNGLMULTITEXIMAGE1DEXTPROC GLeeFuncPtr_glMultiTexImage1DEXT=GLee_Lazy_glMultiTexImage1DEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexImage2DEXT #define GLEE_C_DEFINED_glMultiTexImage2DEXT void __stdcall GLee_Lazy_glMultiTexImage2DEXT(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glMultiTexImage2DEXT(texunit, target, level, internalformat, width, height, border, format, type, pixels);} GLEEPFNGLMULTITEXIMAGE2DEXTPROC GLeeFuncPtr_glMultiTexImage2DEXT=GLee_Lazy_glMultiTexImage2DEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexSubImage1DEXT #define GLEE_C_DEFINED_glMultiTexSubImage1DEXT void __stdcall GLee_Lazy_glMultiTexSubImage1DEXT(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glMultiTexSubImage1DEXT(texunit, target, level, xoffset, width, format, type, pixels);} GLEEPFNGLMULTITEXSUBIMAGE1DEXTPROC GLeeFuncPtr_glMultiTexSubImage1DEXT=GLee_Lazy_glMultiTexSubImage1DEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexSubImage2DEXT #define GLEE_C_DEFINED_glMultiTexSubImage2DEXT void __stdcall GLee_Lazy_glMultiTexSubImage2DEXT(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glMultiTexSubImage2DEXT(texunit, target, level, xoffset, yoffset, width, height, format, type, pixels);} GLEEPFNGLMULTITEXSUBIMAGE2DEXTPROC GLeeFuncPtr_glMultiTexSubImage2DEXT=GLee_Lazy_glMultiTexSubImage2DEXT; #endif #ifndef GLEE_C_DEFINED_glCopyMultiTexImage1DEXT #define GLEE_C_DEFINED_glCopyMultiTexImage1DEXT void __stdcall GLee_Lazy_glCopyMultiTexImage1DEXT(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border) {if (GLeeInit()) glCopyMultiTexImage1DEXT(texunit, target, level, internalformat, x, y, width, border);} GLEEPFNGLCOPYMULTITEXIMAGE1DEXTPROC GLeeFuncPtr_glCopyMultiTexImage1DEXT=GLee_Lazy_glCopyMultiTexImage1DEXT; #endif #ifndef GLEE_C_DEFINED_glCopyMultiTexImage2DEXT #define GLEE_C_DEFINED_glCopyMultiTexImage2DEXT void __stdcall GLee_Lazy_glCopyMultiTexImage2DEXT(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) {if (GLeeInit()) glCopyMultiTexImage2DEXT(texunit, target, level, internalformat, x, y, width, height, border);} GLEEPFNGLCOPYMULTITEXIMAGE2DEXTPROC GLeeFuncPtr_glCopyMultiTexImage2DEXT=GLee_Lazy_glCopyMultiTexImage2DEXT; #endif #ifndef GLEE_C_DEFINED_glCopyMultiTexSubImage1DEXT #define GLEE_C_DEFINED_glCopyMultiTexSubImage1DEXT void __stdcall GLee_Lazy_glCopyMultiTexSubImage1DEXT(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) {if (GLeeInit()) glCopyMultiTexSubImage1DEXT(texunit, target, level, xoffset, x, y, width);} GLEEPFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC GLeeFuncPtr_glCopyMultiTexSubImage1DEXT=GLee_Lazy_glCopyMultiTexSubImage1DEXT; #endif #ifndef GLEE_C_DEFINED_glCopyMultiTexSubImage2DEXT #define GLEE_C_DEFINED_glCopyMultiTexSubImage2DEXT void __stdcall GLee_Lazy_glCopyMultiTexSubImage2DEXT(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) {if (GLeeInit()) glCopyMultiTexSubImage2DEXT(texunit, target, level, xoffset, yoffset, x, y, width, height);} GLEEPFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC GLeeFuncPtr_glCopyMultiTexSubImage2DEXT=GLee_Lazy_glCopyMultiTexSubImage2DEXT; #endif #ifndef GLEE_C_DEFINED_glGetMultiTexImageEXT #define GLEE_C_DEFINED_glGetMultiTexImageEXT void __stdcall GLee_Lazy_glGetMultiTexImageEXT(GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, GLvoid * pixels) {if (GLeeInit()) glGetMultiTexImageEXT(texunit, target, level, format, type, pixels);} GLEEPFNGLGETMULTITEXIMAGEEXTPROC GLeeFuncPtr_glGetMultiTexImageEXT=GLee_Lazy_glGetMultiTexImageEXT; #endif #ifndef GLEE_C_DEFINED_glGetMultiTexParameterfvEXT #define GLEE_C_DEFINED_glGetMultiTexParameterfvEXT void __stdcall GLee_Lazy_glGetMultiTexParameterfvEXT(GLenum texunit, GLenum target, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetMultiTexParameterfvEXT(texunit, target, pname, params);} GLEEPFNGLGETMULTITEXPARAMETERFVEXTPROC GLeeFuncPtr_glGetMultiTexParameterfvEXT=GLee_Lazy_glGetMultiTexParameterfvEXT; #endif #ifndef GLEE_C_DEFINED_glGetMultiTexParameterivEXT #define GLEE_C_DEFINED_glGetMultiTexParameterivEXT void __stdcall GLee_Lazy_glGetMultiTexParameterivEXT(GLenum texunit, GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetMultiTexParameterivEXT(texunit, target, pname, params);} GLEEPFNGLGETMULTITEXPARAMETERIVEXTPROC GLeeFuncPtr_glGetMultiTexParameterivEXT=GLee_Lazy_glGetMultiTexParameterivEXT; #endif #ifndef GLEE_C_DEFINED_glGetMultiTexLevelParameterfvEXT #define GLEE_C_DEFINED_glGetMultiTexLevelParameterfvEXT void __stdcall GLee_Lazy_glGetMultiTexLevelParameterfvEXT(GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetMultiTexLevelParameterfvEXT(texunit, target, level, pname, params);} GLEEPFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC GLeeFuncPtr_glGetMultiTexLevelParameterfvEXT=GLee_Lazy_glGetMultiTexLevelParameterfvEXT; #endif #ifndef GLEE_C_DEFINED_glGetMultiTexLevelParameterivEXT #define GLEE_C_DEFINED_glGetMultiTexLevelParameterivEXT void __stdcall GLee_Lazy_glGetMultiTexLevelParameterivEXT(GLenum texunit, GLenum target, GLint level, GLenum pname, GLint * params) {if (GLeeInit()) glGetMultiTexLevelParameterivEXT(texunit, target, level, pname, params);} GLEEPFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC GLeeFuncPtr_glGetMultiTexLevelParameterivEXT=GLee_Lazy_glGetMultiTexLevelParameterivEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexImage3DEXT #define GLEE_C_DEFINED_glMultiTexImage3DEXT void __stdcall GLee_Lazy_glMultiTexImage3DEXT(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glMultiTexImage3DEXT(texunit, target, level, internalformat, width, height, depth, border, format, type, pixels);} GLEEPFNGLMULTITEXIMAGE3DEXTPROC GLeeFuncPtr_glMultiTexImage3DEXT=GLee_Lazy_glMultiTexImage3DEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexSubImage3DEXT #define GLEE_C_DEFINED_glMultiTexSubImage3DEXT void __stdcall GLee_Lazy_glMultiTexSubImage3DEXT(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glMultiTexSubImage3DEXT(texunit, target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);} GLEEPFNGLMULTITEXSUBIMAGE3DEXTPROC GLeeFuncPtr_glMultiTexSubImage3DEXT=GLee_Lazy_glMultiTexSubImage3DEXT; #endif #ifndef GLEE_C_DEFINED_glCopyMultiTexSubImage3DEXT #define GLEE_C_DEFINED_glCopyMultiTexSubImage3DEXT void __stdcall GLee_Lazy_glCopyMultiTexSubImage3DEXT(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) {if (GLeeInit()) glCopyMultiTexSubImage3DEXT(texunit, target, level, xoffset, yoffset, zoffset, x, y, width, height);} GLEEPFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC GLeeFuncPtr_glCopyMultiTexSubImage3DEXT=GLee_Lazy_glCopyMultiTexSubImage3DEXT; #endif #ifndef GLEE_C_DEFINED_glBindMultiTextureEXT #define GLEE_C_DEFINED_glBindMultiTextureEXT void __stdcall GLee_Lazy_glBindMultiTextureEXT(GLenum texunit, GLenum target, GLuint texture) {if (GLeeInit()) glBindMultiTextureEXT(texunit, target, texture);} GLEEPFNGLBINDMULTITEXTUREEXTPROC GLeeFuncPtr_glBindMultiTextureEXT=GLee_Lazy_glBindMultiTextureEXT; #endif #ifndef GLEE_C_DEFINED_glEnableClientStateIndexedEXT #define GLEE_C_DEFINED_glEnableClientStateIndexedEXT void __stdcall GLee_Lazy_glEnableClientStateIndexedEXT(GLenum array, GLuint index) {if (GLeeInit()) glEnableClientStateIndexedEXT(array, index);} GLEEPFNGLENABLECLIENTSTATEINDEXEDEXTPROC GLeeFuncPtr_glEnableClientStateIndexedEXT=GLee_Lazy_glEnableClientStateIndexedEXT; #endif #ifndef GLEE_C_DEFINED_glDisableClientStateIndexedEXT #define GLEE_C_DEFINED_glDisableClientStateIndexedEXT void __stdcall GLee_Lazy_glDisableClientStateIndexedEXT(GLenum array, GLuint index) {if (GLeeInit()) glDisableClientStateIndexedEXT(array, index);} GLEEPFNGLDISABLECLIENTSTATEINDEXEDEXTPROC GLeeFuncPtr_glDisableClientStateIndexedEXT=GLee_Lazy_glDisableClientStateIndexedEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoordPointerEXT #define GLEE_C_DEFINED_glMultiTexCoordPointerEXT void __stdcall GLee_Lazy_glMultiTexCoordPointerEXT(GLenum texunit, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer) {if (GLeeInit()) glMultiTexCoordPointerEXT(texunit, size, type, stride, pointer);} GLEEPFNGLMULTITEXCOORDPOINTEREXTPROC GLeeFuncPtr_glMultiTexCoordPointerEXT=GLee_Lazy_glMultiTexCoordPointerEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexEnvfEXT #define GLEE_C_DEFINED_glMultiTexEnvfEXT void __stdcall GLee_Lazy_glMultiTexEnvfEXT(GLenum texunit, GLenum target, GLenum pname, GLfloat param) {if (GLeeInit()) glMultiTexEnvfEXT(texunit, target, pname, param);} GLEEPFNGLMULTITEXENVFEXTPROC GLeeFuncPtr_glMultiTexEnvfEXT=GLee_Lazy_glMultiTexEnvfEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexEnvfvEXT #define GLEE_C_DEFINED_glMultiTexEnvfvEXT void __stdcall GLee_Lazy_glMultiTexEnvfvEXT(GLenum texunit, GLenum target, GLenum pname, const GLfloat * params) {if (GLeeInit()) glMultiTexEnvfvEXT(texunit, target, pname, params);} GLEEPFNGLMULTITEXENVFVEXTPROC GLeeFuncPtr_glMultiTexEnvfvEXT=GLee_Lazy_glMultiTexEnvfvEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexEnviEXT #define GLEE_C_DEFINED_glMultiTexEnviEXT void __stdcall GLee_Lazy_glMultiTexEnviEXT(GLenum texunit, GLenum target, GLenum pname, GLint param) {if (GLeeInit()) glMultiTexEnviEXT(texunit, target, pname, param);} GLEEPFNGLMULTITEXENVIEXTPROC GLeeFuncPtr_glMultiTexEnviEXT=GLee_Lazy_glMultiTexEnviEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexEnvivEXT #define GLEE_C_DEFINED_glMultiTexEnvivEXT void __stdcall GLee_Lazy_glMultiTexEnvivEXT(GLenum texunit, GLenum target, GLenum pname, const GLint * params) {if (GLeeInit()) glMultiTexEnvivEXT(texunit, target, pname, params);} GLEEPFNGLMULTITEXENVIVEXTPROC GLeeFuncPtr_glMultiTexEnvivEXT=GLee_Lazy_glMultiTexEnvivEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexGendEXT #define GLEE_C_DEFINED_glMultiTexGendEXT void __stdcall GLee_Lazy_glMultiTexGendEXT(GLenum texunit, GLenum coord, GLenum pname, GLdouble param) {if (GLeeInit()) glMultiTexGendEXT(texunit, coord, pname, param);} GLEEPFNGLMULTITEXGENDEXTPROC GLeeFuncPtr_glMultiTexGendEXT=GLee_Lazy_glMultiTexGendEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexGendvEXT #define GLEE_C_DEFINED_glMultiTexGendvEXT void __stdcall GLee_Lazy_glMultiTexGendvEXT(GLenum texunit, GLenum coord, GLenum pname, const GLdouble * params) {if (GLeeInit()) glMultiTexGendvEXT(texunit, coord, pname, params);} GLEEPFNGLMULTITEXGENDVEXTPROC GLeeFuncPtr_glMultiTexGendvEXT=GLee_Lazy_glMultiTexGendvEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexGenfEXT #define GLEE_C_DEFINED_glMultiTexGenfEXT void __stdcall GLee_Lazy_glMultiTexGenfEXT(GLenum texunit, GLenum coord, GLenum pname, GLfloat param) {if (GLeeInit()) glMultiTexGenfEXT(texunit, coord, pname, param);} GLEEPFNGLMULTITEXGENFEXTPROC GLeeFuncPtr_glMultiTexGenfEXT=GLee_Lazy_glMultiTexGenfEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexGenfvEXT #define GLEE_C_DEFINED_glMultiTexGenfvEXT void __stdcall GLee_Lazy_glMultiTexGenfvEXT(GLenum texunit, GLenum coord, GLenum pname, const GLfloat * params) {if (GLeeInit()) glMultiTexGenfvEXT(texunit, coord, pname, params);} GLEEPFNGLMULTITEXGENFVEXTPROC GLeeFuncPtr_glMultiTexGenfvEXT=GLee_Lazy_glMultiTexGenfvEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexGeniEXT #define GLEE_C_DEFINED_glMultiTexGeniEXT void __stdcall GLee_Lazy_glMultiTexGeniEXT(GLenum texunit, GLenum coord, GLenum pname, GLint param) {if (GLeeInit()) glMultiTexGeniEXT(texunit, coord, pname, param);} GLEEPFNGLMULTITEXGENIEXTPROC GLeeFuncPtr_glMultiTexGeniEXT=GLee_Lazy_glMultiTexGeniEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexGenivEXT #define GLEE_C_DEFINED_glMultiTexGenivEXT void __stdcall GLee_Lazy_glMultiTexGenivEXT(GLenum texunit, GLenum coord, GLenum pname, const GLint * params) {if (GLeeInit()) glMultiTexGenivEXT(texunit, coord, pname, params);} GLEEPFNGLMULTITEXGENIVEXTPROC GLeeFuncPtr_glMultiTexGenivEXT=GLee_Lazy_glMultiTexGenivEXT; #endif #ifndef GLEE_C_DEFINED_glGetMultiTexEnvfvEXT #define GLEE_C_DEFINED_glGetMultiTexEnvfvEXT void __stdcall GLee_Lazy_glGetMultiTexEnvfvEXT(GLenum texunit, GLenum target, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetMultiTexEnvfvEXT(texunit, target, pname, params);} GLEEPFNGLGETMULTITEXENVFVEXTPROC GLeeFuncPtr_glGetMultiTexEnvfvEXT=GLee_Lazy_glGetMultiTexEnvfvEXT; #endif #ifndef GLEE_C_DEFINED_glGetMultiTexEnvivEXT #define GLEE_C_DEFINED_glGetMultiTexEnvivEXT void __stdcall GLee_Lazy_glGetMultiTexEnvivEXT(GLenum texunit, GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetMultiTexEnvivEXT(texunit, target, pname, params);} GLEEPFNGLGETMULTITEXENVIVEXTPROC GLeeFuncPtr_glGetMultiTexEnvivEXT=GLee_Lazy_glGetMultiTexEnvivEXT; #endif #ifndef GLEE_C_DEFINED_glGetMultiTexGendvEXT #define GLEE_C_DEFINED_glGetMultiTexGendvEXT void __stdcall GLee_Lazy_glGetMultiTexGendvEXT(GLenum texunit, GLenum coord, GLenum pname, GLdouble * params) {if (GLeeInit()) glGetMultiTexGendvEXT(texunit, coord, pname, params);} GLEEPFNGLGETMULTITEXGENDVEXTPROC GLeeFuncPtr_glGetMultiTexGendvEXT=GLee_Lazy_glGetMultiTexGendvEXT; #endif #ifndef GLEE_C_DEFINED_glGetMultiTexGenfvEXT #define GLEE_C_DEFINED_glGetMultiTexGenfvEXT void __stdcall GLee_Lazy_glGetMultiTexGenfvEXT(GLenum texunit, GLenum coord, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetMultiTexGenfvEXT(texunit, coord, pname, params);} GLEEPFNGLGETMULTITEXGENFVEXTPROC GLeeFuncPtr_glGetMultiTexGenfvEXT=GLee_Lazy_glGetMultiTexGenfvEXT; #endif #ifndef GLEE_C_DEFINED_glGetMultiTexGenivEXT #define GLEE_C_DEFINED_glGetMultiTexGenivEXT void __stdcall GLee_Lazy_glGetMultiTexGenivEXT(GLenum texunit, GLenum coord, GLenum pname, GLint * params) {if (GLeeInit()) glGetMultiTexGenivEXT(texunit, coord, pname, params);} GLEEPFNGLGETMULTITEXGENIVEXTPROC GLeeFuncPtr_glGetMultiTexGenivEXT=GLee_Lazy_glGetMultiTexGenivEXT; #endif #ifndef GLEE_C_DEFINED_glGetFloatIndexedvEXT #define GLEE_C_DEFINED_glGetFloatIndexedvEXT void __stdcall GLee_Lazy_glGetFloatIndexedvEXT(GLenum target, GLuint index, GLfloat * data) {if (GLeeInit()) glGetFloatIndexedvEXT(target, index, data);} GLEEPFNGLGETFLOATINDEXEDVEXTPROC GLeeFuncPtr_glGetFloatIndexedvEXT=GLee_Lazy_glGetFloatIndexedvEXT; #endif #ifndef GLEE_C_DEFINED_glGetDoubleIndexedvEXT #define GLEE_C_DEFINED_glGetDoubleIndexedvEXT void __stdcall GLee_Lazy_glGetDoubleIndexedvEXT(GLenum target, GLuint index, GLdouble * data) {if (GLeeInit()) glGetDoubleIndexedvEXT(target, index, data);} GLEEPFNGLGETDOUBLEINDEXEDVEXTPROC GLeeFuncPtr_glGetDoubleIndexedvEXT=GLee_Lazy_glGetDoubleIndexedvEXT; #endif #ifndef GLEE_C_DEFINED_glGetPointerIndexedvEXT #define GLEE_C_DEFINED_glGetPointerIndexedvEXT void __stdcall GLee_Lazy_glGetPointerIndexedvEXT(GLenum target, GLuint index, GLvoid* * data) {if (GLeeInit()) glGetPointerIndexedvEXT(target, index, data);} GLEEPFNGLGETPOINTERINDEXEDVEXTPROC GLeeFuncPtr_glGetPointerIndexedvEXT=GLee_Lazy_glGetPointerIndexedvEXT; #endif #ifndef GLEE_C_DEFINED_glCompressedTextureImage3DEXT #define GLEE_C_DEFINED_glCompressedTextureImage3DEXT void __stdcall GLee_Lazy_glCompressedTextureImage3DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * bits) {if (GLeeInit()) glCompressedTextureImage3DEXT(texture, target, level, internalformat, width, height, depth, border, imageSize, bits);} GLEEPFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC GLeeFuncPtr_glCompressedTextureImage3DEXT=GLee_Lazy_glCompressedTextureImage3DEXT; #endif #ifndef GLEE_C_DEFINED_glCompressedTextureImage2DEXT #define GLEE_C_DEFINED_glCompressedTextureImage2DEXT void __stdcall GLee_Lazy_glCompressedTextureImage2DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * bits) {if (GLeeInit()) glCompressedTextureImage2DEXT(texture, target, level, internalformat, width, height, border, imageSize, bits);} GLEEPFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC GLeeFuncPtr_glCompressedTextureImage2DEXT=GLee_Lazy_glCompressedTextureImage2DEXT; #endif #ifndef GLEE_C_DEFINED_glCompressedTextureImage1DEXT #define GLEE_C_DEFINED_glCompressedTextureImage1DEXT void __stdcall GLee_Lazy_glCompressedTextureImage1DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid * bits) {if (GLeeInit()) glCompressedTextureImage1DEXT(texture, target, level, internalformat, width, border, imageSize, bits);} GLEEPFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC GLeeFuncPtr_glCompressedTextureImage1DEXT=GLee_Lazy_glCompressedTextureImage1DEXT; #endif #ifndef GLEE_C_DEFINED_glCompressedTextureSubImage3DEXT #define GLEE_C_DEFINED_glCompressedTextureSubImage3DEXT void __stdcall GLee_Lazy_glCompressedTextureSubImage3DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * bits) {if (GLeeInit()) glCompressedTextureSubImage3DEXT(texture, target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, bits);} GLEEPFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC GLeeFuncPtr_glCompressedTextureSubImage3DEXT=GLee_Lazy_glCompressedTextureSubImage3DEXT; #endif #ifndef GLEE_C_DEFINED_glCompressedTextureSubImage2DEXT #define GLEE_C_DEFINED_glCompressedTextureSubImage2DEXT void __stdcall GLee_Lazy_glCompressedTextureSubImage2DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * bits) {if (GLeeInit()) glCompressedTextureSubImage2DEXT(texture, target, level, xoffset, yoffset, width, height, format, imageSize, bits);} GLEEPFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC GLeeFuncPtr_glCompressedTextureSubImage2DEXT=GLee_Lazy_glCompressedTextureSubImage2DEXT; #endif #ifndef GLEE_C_DEFINED_glCompressedTextureSubImage1DEXT #define GLEE_C_DEFINED_glCompressedTextureSubImage1DEXT void __stdcall GLee_Lazy_glCompressedTextureSubImage1DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * bits) {if (GLeeInit()) glCompressedTextureSubImage1DEXT(texture, target, level, xoffset, width, format, imageSize, bits);} GLEEPFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC GLeeFuncPtr_glCompressedTextureSubImage1DEXT=GLee_Lazy_glCompressedTextureSubImage1DEXT; #endif #ifndef GLEE_C_DEFINED_glGetCompressedTextureImageEXT #define GLEE_C_DEFINED_glGetCompressedTextureImageEXT void __stdcall GLee_Lazy_glGetCompressedTextureImageEXT(GLuint texture, GLenum target, GLint lod, GLvoid * img) {if (GLeeInit()) glGetCompressedTextureImageEXT(texture, target, lod, img);} GLEEPFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC GLeeFuncPtr_glGetCompressedTextureImageEXT=GLee_Lazy_glGetCompressedTextureImageEXT; #endif #ifndef GLEE_C_DEFINED_glCompressedMultiTexImage3DEXT #define GLEE_C_DEFINED_glCompressedMultiTexImage3DEXT void __stdcall GLee_Lazy_glCompressedMultiTexImage3DEXT(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * bits) {if (GLeeInit()) glCompressedMultiTexImage3DEXT(texunit, target, level, internalformat, width, height, depth, border, imageSize, bits);} GLEEPFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC GLeeFuncPtr_glCompressedMultiTexImage3DEXT=GLee_Lazy_glCompressedMultiTexImage3DEXT; #endif #ifndef GLEE_C_DEFINED_glCompressedMultiTexImage2DEXT #define GLEE_C_DEFINED_glCompressedMultiTexImage2DEXT void __stdcall GLee_Lazy_glCompressedMultiTexImage2DEXT(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * bits) {if (GLeeInit()) glCompressedMultiTexImage2DEXT(texunit, target, level, internalformat, width, height, border, imageSize, bits);} GLEEPFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC GLeeFuncPtr_glCompressedMultiTexImage2DEXT=GLee_Lazy_glCompressedMultiTexImage2DEXT; #endif #ifndef GLEE_C_DEFINED_glCompressedMultiTexImage1DEXT #define GLEE_C_DEFINED_glCompressedMultiTexImage1DEXT void __stdcall GLee_Lazy_glCompressedMultiTexImage1DEXT(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid * bits) {if (GLeeInit()) glCompressedMultiTexImage1DEXT(texunit, target, level, internalformat, width, border, imageSize, bits);} GLEEPFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC GLeeFuncPtr_glCompressedMultiTexImage1DEXT=GLee_Lazy_glCompressedMultiTexImage1DEXT; #endif #ifndef GLEE_C_DEFINED_glCompressedMultiTexSubImage3DEXT #define GLEE_C_DEFINED_glCompressedMultiTexSubImage3DEXT void __stdcall GLee_Lazy_glCompressedMultiTexSubImage3DEXT(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * bits) {if (GLeeInit()) glCompressedMultiTexSubImage3DEXT(texunit, target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, bits);} GLEEPFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC GLeeFuncPtr_glCompressedMultiTexSubImage3DEXT=GLee_Lazy_glCompressedMultiTexSubImage3DEXT; #endif #ifndef GLEE_C_DEFINED_glCompressedMultiTexSubImage2DEXT #define GLEE_C_DEFINED_glCompressedMultiTexSubImage2DEXT void __stdcall GLee_Lazy_glCompressedMultiTexSubImage2DEXT(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * bits) {if (GLeeInit()) glCompressedMultiTexSubImage2DEXT(texunit, target, level, xoffset, yoffset, width, height, format, imageSize, bits);} GLEEPFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC GLeeFuncPtr_glCompressedMultiTexSubImage2DEXT=GLee_Lazy_glCompressedMultiTexSubImage2DEXT; #endif #ifndef GLEE_C_DEFINED_glCompressedMultiTexSubImage1DEXT #define GLEE_C_DEFINED_glCompressedMultiTexSubImage1DEXT void __stdcall GLee_Lazy_glCompressedMultiTexSubImage1DEXT(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * bits) {if (GLeeInit()) glCompressedMultiTexSubImage1DEXT(texunit, target, level, xoffset, width, format, imageSize, bits);} GLEEPFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC GLeeFuncPtr_glCompressedMultiTexSubImage1DEXT=GLee_Lazy_glCompressedMultiTexSubImage1DEXT; #endif #ifndef GLEE_C_DEFINED_glGetCompressedMultiTexImageEXT #define GLEE_C_DEFINED_glGetCompressedMultiTexImageEXT void __stdcall GLee_Lazy_glGetCompressedMultiTexImageEXT(GLenum texunit, GLenum target, GLint lod, GLvoid * img) {if (GLeeInit()) glGetCompressedMultiTexImageEXT(texunit, target, lod, img);} GLEEPFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC GLeeFuncPtr_glGetCompressedMultiTexImageEXT=GLee_Lazy_glGetCompressedMultiTexImageEXT; #endif #ifndef GLEE_C_DEFINED_glNamedProgramStringEXT #define GLEE_C_DEFINED_glNamedProgramStringEXT void __stdcall GLee_Lazy_glNamedProgramStringEXT(GLuint program, GLenum target, GLenum format, GLsizei len, const GLvoid * string) {if (GLeeInit()) glNamedProgramStringEXT(program, target, format, len, string);} GLEEPFNGLNAMEDPROGRAMSTRINGEXTPROC GLeeFuncPtr_glNamedProgramStringEXT=GLee_Lazy_glNamedProgramStringEXT; #endif #ifndef GLEE_C_DEFINED_glNamedProgramLocalParameter4dEXT #define GLEE_C_DEFINED_glNamedProgramLocalParameter4dEXT void __stdcall GLee_Lazy_glNamedProgramLocalParameter4dEXT(GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) {if (GLeeInit()) glNamedProgramLocalParameter4dEXT(program, target, index, x, y, z, w);} GLEEPFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC GLeeFuncPtr_glNamedProgramLocalParameter4dEXT=GLee_Lazy_glNamedProgramLocalParameter4dEXT; #endif #ifndef GLEE_C_DEFINED_glNamedProgramLocalParameter4dvEXT #define GLEE_C_DEFINED_glNamedProgramLocalParameter4dvEXT void __stdcall GLee_Lazy_glNamedProgramLocalParameter4dvEXT(GLuint program, GLenum target, GLuint index, const GLdouble * params) {if (GLeeInit()) glNamedProgramLocalParameter4dvEXT(program, target, index, params);} GLEEPFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC GLeeFuncPtr_glNamedProgramLocalParameter4dvEXT=GLee_Lazy_glNamedProgramLocalParameter4dvEXT; #endif #ifndef GLEE_C_DEFINED_glNamedProgramLocalParameter4fEXT #define GLEE_C_DEFINED_glNamedProgramLocalParameter4fEXT void __stdcall GLee_Lazy_glNamedProgramLocalParameter4fEXT(GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {if (GLeeInit()) glNamedProgramLocalParameter4fEXT(program, target, index, x, y, z, w);} GLEEPFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC GLeeFuncPtr_glNamedProgramLocalParameter4fEXT=GLee_Lazy_glNamedProgramLocalParameter4fEXT; #endif #ifndef GLEE_C_DEFINED_glNamedProgramLocalParameter4fvEXT #define GLEE_C_DEFINED_glNamedProgramLocalParameter4fvEXT void __stdcall GLee_Lazy_glNamedProgramLocalParameter4fvEXT(GLuint program, GLenum target, GLuint index, const GLfloat * params) {if (GLeeInit()) glNamedProgramLocalParameter4fvEXT(program, target, index, params);} GLEEPFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC GLeeFuncPtr_glNamedProgramLocalParameter4fvEXT=GLee_Lazy_glNamedProgramLocalParameter4fvEXT; #endif #ifndef GLEE_C_DEFINED_glGetNamedProgramLocalParameterdvEXT #define GLEE_C_DEFINED_glGetNamedProgramLocalParameterdvEXT void __stdcall GLee_Lazy_glGetNamedProgramLocalParameterdvEXT(GLuint program, GLenum target, GLuint index, GLdouble * params) {if (GLeeInit()) glGetNamedProgramLocalParameterdvEXT(program, target, index, params);} GLEEPFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC GLeeFuncPtr_glGetNamedProgramLocalParameterdvEXT=GLee_Lazy_glGetNamedProgramLocalParameterdvEXT; #endif #ifndef GLEE_C_DEFINED_glGetNamedProgramLocalParameterfvEXT #define GLEE_C_DEFINED_glGetNamedProgramLocalParameterfvEXT void __stdcall GLee_Lazy_glGetNamedProgramLocalParameterfvEXT(GLuint program, GLenum target, GLuint index, GLfloat * params) {if (GLeeInit()) glGetNamedProgramLocalParameterfvEXT(program, target, index, params);} GLEEPFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC GLeeFuncPtr_glGetNamedProgramLocalParameterfvEXT=GLee_Lazy_glGetNamedProgramLocalParameterfvEXT; #endif #ifndef GLEE_C_DEFINED_glGetNamedProgramivEXT #define GLEE_C_DEFINED_glGetNamedProgramivEXT void __stdcall GLee_Lazy_glGetNamedProgramivEXT(GLuint program, GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetNamedProgramivEXT(program, target, pname, params);} GLEEPFNGLGETNAMEDPROGRAMIVEXTPROC GLeeFuncPtr_glGetNamedProgramivEXT=GLee_Lazy_glGetNamedProgramivEXT; #endif #ifndef GLEE_C_DEFINED_glGetNamedProgramStringEXT #define GLEE_C_DEFINED_glGetNamedProgramStringEXT void __stdcall GLee_Lazy_glGetNamedProgramStringEXT(GLuint program, GLenum target, GLenum pname, GLvoid * string) {if (GLeeInit()) glGetNamedProgramStringEXT(program, target, pname, string);} GLEEPFNGLGETNAMEDPROGRAMSTRINGEXTPROC GLeeFuncPtr_glGetNamedProgramStringEXT=GLee_Lazy_glGetNamedProgramStringEXT; #endif #ifndef GLEE_C_DEFINED_glNamedProgramLocalParameters4fvEXT #define GLEE_C_DEFINED_glNamedProgramLocalParameters4fvEXT void __stdcall GLee_Lazy_glNamedProgramLocalParameters4fvEXT(GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat * params) {if (GLeeInit()) glNamedProgramLocalParameters4fvEXT(program, target, index, count, params);} GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC GLeeFuncPtr_glNamedProgramLocalParameters4fvEXT=GLee_Lazy_glNamedProgramLocalParameters4fvEXT; #endif #ifndef GLEE_C_DEFINED_glNamedProgramLocalParameterI4iEXT #define GLEE_C_DEFINED_glNamedProgramLocalParameterI4iEXT void __stdcall GLee_Lazy_glNamedProgramLocalParameterI4iEXT(GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w) {if (GLeeInit()) glNamedProgramLocalParameterI4iEXT(program, target, index, x, y, z, w);} GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC GLeeFuncPtr_glNamedProgramLocalParameterI4iEXT=GLee_Lazy_glNamedProgramLocalParameterI4iEXT; #endif #ifndef GLEE_C_DEFINED_glNamedProgramLocalParameterI4ivEXT #define GLEE_C_DEFINED_glNamedProgramLocalParameterI4ivEXT void __stdcall GLee_Lazy_glNamedProgramLocalParameterI4ivEXT(GLuint program, GLenum target, GLuint index, const GLint * params) {if (GLeeInit()) glNamedProgramLocalParameterI4ivEXT(program, target, index, params);} GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC GLeeFuncPtr_glNamedProgramLocalParameterI4ivEXT=GLee_Lazy_glNamedProgramLocalParameterI4ivEXT; #endif #ifndef GLEE_C_DEFINED_glNamedProgramLocalParametersI4ivEXT #define GLEE_C_DEFINED_glNamedProgramLocalParametersI4ivEXT void __stdcall GLee_Lazy_glNamedProgramLocalParametersI4ivEXT(GLuint program, GLenum target, GLuint index, GLsizei count, const GLint * params) {if (GLeeInit()) glNamedProgramLocalParametersI4ivEXT(program, target, index, count, params);} GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC GLeeFuncPtr_glNamedProgramLocalParametersI4ivEXT=GLee_Lazy_glNamedProgramLocalParametersI4ivEXT; #endif #ifndef GLEE_C_DEFINED_glNamedProgramLocalParameterI4uiEXT #define GLEE_C_DEFINED_glNamedProgramLocalParameterI4uiEXT void __stdcall GLee_Lazy_glNamedProgramLocalParameterI4uiEXT(GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) {if (GLeeInit()) glNamedProgramLocalParameterI4uiEXT(program, target, index, x, y, z, w);} GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC GLeeFuncPtr_glNamedProgramLocalParameterI4uiEXT=GLee_Lazy_glNamedProgramLocalParameterI4uiEXT; #endif #ifndef GLEE_C_DEFINED_glNamedProgramLocalParameterI4uivEXT #define GLEE_C_DEFINED_glNamedProgramLocalParameterI4uivEXT void __stdcall GLee_Lazy_glNamedProgramLocalParameterI4uivEXT(GLuint program, GLenum target, GLuint index, const GLuint * params) {if (GLeeInit()) glNamedProgramLocalParameterI4uivEXT(program, target, index, params);} GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC GLeeFuncPtr_glNamedProgramLocalParameterI4uivEXT=GLee_Lazy_glNamedProgramLocalParameterI4uivEXT; #endif #ifndef GLEE_C_DEFINED_glNamedProgramLocalParametersI4uivEXT #define GLEE_C_DEFINED_glNamedProgramLocalParametersI4uivEXT void __stdcall GLee_Lazy_glNamedProgramLocalParametersI4uivEXT(GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint * params) {if (GLeeInit()) glNamedProgramLocalParametersI4uivEXT(program, target, index, count, params);} GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC GLeeFuncPtr_glNamedProgramLocalParametersI4uivEXT=GLee_Lazy_glNamedProgramLocalParametersI4uivEXT; #endif #ifndef GLEE_C_DEFINED_glGetNamedProgramLocalParameterIivEXT #define GLEE_C_DEFINED_glGetNamedProgramLocalParameterIivEXT void __stdcall GLee_Lazy_glGetNamedProgramLocalParameterIivEXT(GLuint program, GLenum target, GLuint index, GLint * params) {if (GLeeInit()) glGetNamedProgramLocalParameterIivEXT(program, target, index, params);} GLEEPFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC GLeeFuncPtr_glGetNamedProgramLocalParameterIivEXT=GLee_Lazy_glGetNamedProgramLocalParameterIivEXT; #endif #ifndef GLEE_C_DEFINED_glGetNamedProgramLocalParameterIuivEXT #define GLEE_C_DEFINED_glGetNamedProgramLocalParameterIuivEXT void __stdcall GLee_Lazy_glGetNamedProgramLocalParameterIuivEXT(GLuint program, GLenum target, GLuint index, GLuint * params) {if (GLeeInit()) glGetNamedProgramLocalParameterIuivEXT(program, target, index, params);} GLEEPFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC GLeeFuncPtr_glGetNamedProgramLocalParameterIuivEXT=GLee_Lazy_glGetNamedProgramLocalParameterIuivEXT; #endif #ifndef GLEE_C_DEFINED_glTextureParameterIivEXT #define GLEE_C_DEFINED_glTextureParameterIivEXT void __stdcall GLee_Lazy_glTextureParameterIivEXT(GLuint texture, GLenum target, GLenum pname, const GLint * params) {if (GLeeInit()) glTextureParameterIivEXT(texture, target, pname, params);} GLEEPFNGLTEXTUREPARAMETERIIVEXTPROC GLeeFuncPtr_glTextureParameterIivEXT=GLee_Lazy_glTextureParameterIivEXT; #endif #ifndef GLEE_C_DEFINED_glTextureParameterIuivEXT #define GLEE_C_DEFINED_glTextureParameterIuivEXT void __stdcall GLee_Lazy_glTextureParameterIuivEXT(GLuint texture, GLenum target, GLenum pname, const GLuint * params) {if (GLeeInit()) glTextureParameterIuivEXT(texture, target, pname, params);} GLEEPFNGLTEXTUREPARAMETERIUIVEXTPROC GLeeFuncPtr_glTextureParameterIuivEXT=GLee_Lazy_glTextureParameterIuivEXT; #endif #ifndef GLEE_C_DEFINED_glGetTextureParameterIivEXT #define GLEE_C_DEFINED_glGetTextureParameterIivEXT void __stdcall GLee_Lazy_glGetTextureParameterIivEXT(GLuint texture, GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetTextureParameterIivEXT(texture, target, pname, params);} GLEEPFNGLGETTEXTUREPARAMETERIIVEXTPROC GLeeFuncPtr_glGetTextureParameterIivEXT=GLee_Lazy_glGetTextureParameterIivEXT; #endif #ifndef GLEE_C_DEFINED_glGetTextureParameterIuivEXT #define GLEE_C_DEFINED_glGetTextureParameterIuivEXT void __stdcall GLee_Lazy_glGetTextureParameterIuivEXT(GLuint texture, GLenum target, GLenum pname, GLuint * params) {if (GLeeInit()) glGetTextureParameterIuivEXT(texture, target, pname, params);} GLEEPFNGLGETTEXTUREPARAMETERIUIVEXTPROC GLeeFuncPtr_glGetTextureParameterIuivEXT=GLee_Lazy_glGetTextureParameterIuivEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexParameterIivEXT #define GLEE_C_DEFINED_glMultiTexParameterIivEXT void __stdcall GLee_Lazy_glMultiTexParameterIivEXT(GLenum texunit, GLenum target, GLenum pname, const GLint * params) {if (GLeeInit()) glMultiTexParameterIivEXT(texunit, target, pname, params);} GLEEPFNGLMULTITEXPARAMETERIIVEXTPROC GLeeFuncPtr_glMultiTexParameterIivEXT=GLee_Lazy_glMultiTexParameterIivEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexParameterIuivEXT #define GLEE_C_DEFINED_glMultiTexParameterIuivEXT void __stdcall GLee_Lazy_glMultiTexParameterIuivEXT(GLenum texunit, GLenum target, GLenum pname, const GLuint * params) {if (GLeeInit()) glMultiTexParameterIuivEXT(texunit, target, pname, params);} GLEEPFNGLMULTITEXPARAMETERIUIVEXTPROC GLeeFuncPtr_glMultiTexParameterIuivEXT=GLee_Lazy_glMultiTexParameterIuivEXT; #endif #ifndef GLEE_C_DEFINED_glGetMultiTexParameterIivEXT #define GLEE_C_DEFINED_glGetMultiTexParameterIivEXT void __stdcall GLee_Lazy_glGetMultiTexParameterIivEXT(GLenum texunit, GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetMultiTexParameterIivEXT(texunit, target, pname, params);} GLEEPFNGLGETMULTITEXPARAMETERIIVEXTPROC GLeeFuncPtr_glGetMultiTexParameterIivEXT=GLee_Lazy_glGetMultiTexParameterIivEXT; #endif #ifndef GLEE_C_DEFINED_glGetMultiTexParameterIuivEXT #define GLEE_C_DEFINED_glGetMultiTexParameterIuivEXT void __stdcall GLee_Lazy_glGetMultiTexParameterIuivEXT(GLenum texunit, GLenum target, GLenum pname, GLuint * params) {if (GLeeInit()) glGetMultiTexParameterIuivEXT(texunit, target, pname, params);} GLEEPFNGLGETMULTITEXPARAMETERIUIVEXTPROC GLeeFuncPtr_glGetMultiTexParameterIuivEXT=GLee_Lazy_glGetMultiTexParameterIuivEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform1fEXT #define GLEE_C_DEFINED_glProgramUniform1fEXT void __stdcall GLee_Lazy_glProgramUniform1fEXT(GLuint program, GLint location, GLfloat v0) {if (GLeeInit()) glProgramUniform1fEXT(program, location, v0);} GLEEPFNGLPROGRAMUNIFORM1FEXTPROC GLeeFuncPtr_glProgramUniform1fEXT=GLee_Lazy_glProgramUniform1fEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform2fEXT #define GLEE_C_DEFINED_glProgramUniform2fEXT void __stdcall GLee_Lazy_glProgramUniform2fEXT(GLuint program, GLint location, GLfloat v0, GLfloat v1) {if (GLeeInit()) glProgramUniform2fEXT(program, location, v0, v1);} GLEEPFNGLPROGRAMUNIFORM2FEXTPROC GLeeFuncPtr_glProgramUniform2fEXT=GLee_Lazy_glProgramUniform2fEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform3fEXT #define GLEE_C_DEFINED_glProgramUniform3fEXT void __stdcall GLee_Lazy_glProgramUniform3fEXT(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) {if (GLeeInit()) glProgramUniform3fEXT(program, location, v0, v1, v2);} GLEEPFNGLPROGRAMUNIFORM3FEXTPROC GLeeFuncPtr_glProgramUniform3fEXT=GLee_Lazy_glProgramUniform3fEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform4fEXT #define GLEE_C_DEFINED_glProgramUniform4fEXT void __stdcall GLee_Lazy_glProgramUniform4fEXT(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) {if (GLeeInit()) glProgramUniform4fEXT(program, location, v0, v1, v2, v3);} GLEEPFNGLPROGRAMUNIFORM4FEXTPROC GLeeFuncPtr_glProgramUniform4fEXT=GLee_Lazy_glProgramUniform4fEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform1iEXT #define GLEE_C_DEFINED_glProgramUniform1iEXT void __stdcall GLee_Lazy_glProgramUniform1iEXT(GLuint program, GLint location, GLint v0) {if (GLeeInit()) glProgramUniform1iEXT(program, location, v0);} GLEEPFNGLPROGRAMUNIFORM1IEXTPROC GLeeFuncPtr_glProgramUniform1iEXT=GLee_Lazy_glProgramUniform1iEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform2iEXT #define GLEE_C_DEFINED_glProgramUniform2iEXT void __stdcall GLee_Lazy_glProgramUniform2iEXT(GLuint program, GLint location, GLint v0, GLint v1) {if (GLeeInit()) glProgramUniform2iEXT(program, location, v0, v1);} GLEEPFNGLPROGRAMUNIFORM2IEXTPROC GLeeFuncPtr_glProgramUniform2iEXT=GLee_Lazy_glProgramUniform2iEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform3iEXT #define GLEE_C_DEFINED_glProgramUniform3iEXT void __stdcall GLee_Lazy_glProgramUniform3iEXT(GLuint program, GLint location, GLint v0, GLint v1, GLint v2) {if (GLeeInit()) glProgramUniform3iEXT(program, location, v0, v1, v2);} GLEEPFNGLPROGRAMUNIFORM3IEXTPROC GLeeFuncPtr_glProgramUniform3iEXT=GLee_Lazy_glProgramUniform3iEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform4iEXT #define GLEE_C_DEFINED_glProgramUniform4iEXT void __stdcall GLee_Lazy_glProgramUniform4iEXT(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3) {if (GLeeInit()) glProgramUniform4iEXT(program, location, v0, v1, v2, v3);} GLEEPFNGLPROGRAMUNIFORM4IEXTPROC GLeeFuncPtr_glProgramUniform4iEXT=GLee_Lazy_glProgramUniform4iEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform1fvEXT #define GLEE_C_DEFINED_glProgramUniform1fvEXT void __stdcall GLee_Lazy_glProgramUniform1fvEXT(GLuint program, GLint location, GLsizei count, const GLfloat * value) {if (GLeeInit()) glProgramUniform1fvEXT(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM1FVEXTPROC GLeeFuncPtr_glProgramUniform1fvEXT=GLee_Lazy_glProgramUniform1fvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform2fvEXT #define GLEE_C_DEFINED_glProgramUniform2fvEXT void __stdcall GLee_Lazy_glProgramUniform2fvEXT(GLuint program, GLint location, GLsizei count, const GLfloat * value) {if (GLeeInit()) glProgramUniform2fvEXT(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM2FVEXTPROC GLeeFuncPtr_glProgramUniform2fvEXT=GLee_Lazy_glProgramUniform2fvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform3fvEXT #define GLEE_C_DEFINED_glProgramUniform3fvEXT void __stdcall GLee_Lazy_glProgramUniform3fvEXT(GLuint program, GLint location, GLsizei count, const GLfloat * value) {if (GLeeInit()) glProgramUniform3fvEXT(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM3FVEXTPROC GLeeFuncPtr_glProgramUniform3fvEXT=GLee_Lazy_glProgramUniform3fvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform4fvEXT #define GLEE_C_DEFINED_glProgramUniform4fvEXT void __stdcall GLee_Lazy_glProgramUniform4fvEXT(GLuint program, GLint location, GLsizei count, const GLfloat * value) {if (GLeeInit()) glProgramUniform4fvEXT(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM4FVEXTPROC GLeeFuncPtr_glProgramUniform4fvEXT=GLee_Lazy_glProgramUniform4fvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform1ivEXT #define GLEE_C_DEFINED_glProgramUniform1ivEXT void __stdcall GLee_Lazy_glProgramUniform1ivEXT(GLuint program, GLint location, GLsizei count, const GLint * value) {if (GLeeInit()) glProgramUniform1ivEXT(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM1IVEXTPROC GLeeFuncPtr_glProgramUniform1ivEXT=GLee_Lazy_glProgramUniform1ivEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform2ivEXT #define GLEE_C_DEFINED_glProgramUniform2ivEXT void __stdcall GLee_Lazy_glProgramUniform2ivEXT(GLuint program, GLint location, GLsizei count, const GLint * value) {if (GLeeInit()) glProgramUniform2ivEXT(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM2IVEXTPROC GLeeFuncPtr_glProgramUniform2ivEXT=GLee_Lazy_glProgramUniform2ivEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform3ivEXT #define GLEE_C_DEFINED_glProgramUniform3ivEXT void __stdcall GLee_Lazy_glProgramUniform3ivEXT(GLuint program, GLint location, GLsizei count, const GLint * value) {if (GLeeInit()) glProgramUniform3ivEXT(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM3IVEXTPROC GLeeFuncPtr_glProgramUniform3ivEXT=GLee_Lazy_glProgramUniform3ivEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform4ivEXT #define GLEE_C_DEFINED_glProgramUniform4ivEXT void __stdcall GLee_Lazy_glProgramUniform4ivEXT(GLuint program, GLint location, GLsizei count, const GLint * value) {if (GLeeInit()) glProgramUniform4ivEXT(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM4IVEXTPROC GLeeFuncPtr_glProgramUniform4ivEXT=GLee_Lazy_glProgramUniform4ivEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix2fvEXT #define GLEE_C_DEFINED_glProgramUniformMatrix2fvEXT void __stdcall GLee_Lazy_glProgramUniformMatrix2fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glProgramUniformMatrix2fvEXT(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC GLeeFuncPtr_glProgramUniformMatrix2fvEXT=GLee_Lazy_glProgramUniformMatrix2fvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix3fvEXT #define GLEE_C_DEFINED_glProgramUniformMatrix3fvEXT void __stdcall GLee_Lazy_glProgramUniformMatrix3fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glProgramUniformMatrix3fvEXT(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC GLeeFuncPtr_glProgramUniformMatrix3fvEXT=GLee_Lazy_glProgramUniformMatrix3fvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix4fvEXT #define GLEE_C_DEFINED_glProgramUniformMatrix4fvEXT void __stdcall GLee_Lazy_glProgramUniformMatrix4fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glProgramUniformMatrix4fvEXT(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC GLeeFuncPtr_glProgramUniformMatrix4fvEXT=GLee_Lazy_glProgramUniformMatrix4fvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix2x3fvEXT #define GLEE_C_DEFINED_glProgramUniformMatrix2x3fvEXT void __stdcall GLee_Lazy_glProgramUniformMatrix2x3fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glProgramUniformMatrix2x3fvEXT(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC GLeeFuncPtr_glProgramUniformMatrix2x3fvEXT=GLee_Lazy_glProgramUniformMatrix2x3fvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix3x2fvEXT #define GLEE_C_DEFINED_glProgramUniformMatrix3x2fvEXT void __stdcall GLee_Lazy_glProgramUniformMatrix3x2fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glProgramUniformMatrix3x2fvEXT(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC GLeeFuncPtr_glProgramUniformMatrix3x2fvEXT=GLee_Lazy_glProgramUniformMatrix3x2fvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix2x4fvEXT #define GLEE_C_DEFINED_glProgramUniformMatrix2x4fvEXT void __stdcall GLee_Lazy_glProgramUniformMatrix2x4fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glProgramUniformMatrix2x4fvEXT(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC GLeeFuncPtr_glProgramUniformMatrix2x4fvEXT=GLee_Lazy_glProgramUniformMatrix2x4fvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix4x2fvEXT #define GLEE_C_DEFINED_glProgramUniformMatrix4x2fvEXT void __stdcall GLee_Lazy_glProgramUniformMatrix4x2fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glProgramUniformMatrix4x2fvEXT(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC GLeeFuncPtr_glProgramUniformMatrix4x2fvEXT=GLee_Lazy_glProgramUniformMatrix4x2fvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix3x4fvEXT #define GLEE_C_DEFINED_glProgramUniformMatrix3x4fvEXT void __stdcall GLee_Lazy_glProgramUniformMatrix3x4fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glProgramUniformMatrix3x4fvEXT(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC GLeeFuncPtr_glProgramUniformMatrix3x4fvEXT=GLee_Lazy_glProgramUniformMatrix3x4fvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix4x3fvEXT #define GLEE_C_DEFINED_glProgramUniformMatrix4x3fvEXT void __stdcall GLee_Lazy_glProgramUniformMatrix4x3fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glProgramUniformMatrix4x3fvEXT(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC GLeeFuncPtr_glProgramUniformMatrix4x3fvEXT=GLee_Lazy_glProgramUniformMatrix4x3fvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform1uiEXT #define GLEE_C_DEFINED_glProgramUniform1uiEXT void __stdcall GLee_Lazy_glProgramUniform1uiEXT(GLuint program, GLint location, GLuint v0) {if (GLeeInit()) glProgramUniform1uiEXT(program, location, v0);} GLEEPFNGLPROGRAMUNIFORM1UIEXTPROC GLeeFuncPtr_glProgramUniform1uiEXT=GLee_Lazy_glProgramUniform1uiEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform2uiEXT #define GLEE_C_DEFINED_glProgramUniform2uiEXT void __stdcall GLee_Lazy_glProgramUniform2uiEXT(GLuint program, GLint location, GLuint v0, GLuint v1) {if (GLeeInit()) glProgramUniform2uiEXT(program, location, v0, v1);} GLEEPFNGLPROGRAMUNIFORM2UIEXTPROC GLeeFuncPtr_glProgramUniform2uiEXT=GLee_Lazy_glProgramUniform2uiEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform3uiEXT #define GLEE_C_DEFINED_glProgramUniform3uiEXT void __stdcall GLee_Lazy_glProgramUniform3uiEXT(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2) {if (GLeeInit()) glProgramUniform3uiEXT(program, location, v0, v1, v2);} GLEEPFNGLPROGRAMUNIFORM3UIEXTPROC GLeeFuncPtr_glProgramUniform3uiEXT=GLee_Lazy_glProgramUniform3uiEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform4uiEXT #define GLEE_C_DEFINED_glProgramUniform4uiEXT void __stdcall GLee_Lazy_glProgramUniform4uiEXT(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) {if (GLeeInit()) glProgramUniform4uiEXT(program, location, v0, v1, v2, v3);} GLEEPFNGLPROGRAMUNIFORM4UIEXTPROC GLeeFuncPtr_glProgramUniform4uiEXT=GLee_Lazy_glProgramUniform4uiEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform1uivEXT #define GLEE_C_DEFINED_glProgramUniform1uivEXT void __stdcall GLee_Lazy_glProgramUniform1uivEXT(GLuint program, GLint location, GLsizei count, const GLuint * value) {if (GLeeInit()) glProgramUniform1uivEXT(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM1UIVEXTPROC GLeeFuncPtr_glProgramUniform1uivEXT=GLee_Lazy_glProgramUniform1uivEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform2uivEXT #define GLEE_C_DEFINED_glProgramUniform2uivEXT void __stdcall GLee_Lazy_glProgramUniform2uivEXT(GLuint program, GLint location, GLsizei count, const GLuint * value) {if (GLeeInit()) glProgramUniform2uivEXT(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM2UIVEXTPROC GLeeFuncPtr_glProgramUniform2uivEXT=GLee_Lazy_glProgramUniform2uivEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform3uivEXT #define GLEE_C_DEFINED_glProgramUniform3uivEXT void __stdcall GLee_Lazy_glProgramUniform3uivEXT(GLuint program, GLint location, GLsizei count, const GLuint * value) {if (GLeeInit()) glProgramUniform3uivEXT(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM3UIVEXTPROC GLeeFuncPtr_glProgramUniform3uivEXT=GLee_Lazy_glProgramUniform3uivEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform4uivEXT #define GLEE_C_DEFINED_glProgramUniform4uivEXT void __stdcall GLee_Lazy_glProgramUniform4uivEXT(GLuint program, GLint location, GLsizei count, const GLuint * value) {if (GLeeInit()) glProgramUniform4uivEXT(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM4UIVEXTPROC GLeeFuncPtr_glProgramUniform4uivEXT=GLee_Lazy_glProgramUniform4uivEXT; #endif #ifndef GLEE_C_DEFINED_glNamedBufferDataEXT #define GLEE_C_DEFINED_glNamedBufferDataEXT void __stdcall GLee_Lazy_glNamedBufferDataEXT(GLuint buffer, GLsizeiptr size, const GLvoid * data, GLenum usage) {if (GLeeInit()) glNamedBufferDataEXT(buffer, size, data, usage);} GLEEPFNGLNAMEDBUFFERDATAEXTPROC GLeeFuncPtr_glNamedBufferDataEXT=GLee_Lazy_glNamedBufferDataEXT; #endif #ifndef GLEE_C_DEFINED_glNamedBufferSubDataEXT #define GLEE_C_DEFINED_glNamedBufferSubDataEXT void __stdcall GLee_Lazy_glNamedBufferSubDataEXT(GLuint buffer, GLintptr offset, GLsizeiptr size, const GLvoid * data) {if (GLeeInit()) glNamedBufferSubDataEXT(buffer, offset, size, data);} GLEEPFNGLNAMEDBUFFERSUBDATAEXTPROC GLeeFuncPtr_glNamedBufferSubDataEXT=GLee_Lazy_glNamedBufferSubDataEXT; #endif #ifndef GLEE_C_DEFINED_glMapNamedBufferEXT #define GLEE_C_DEFINED_glMapNamedBufferEXT GLvoid* __stdcall GLee_Lazy_glMapNamedBufferEXT(GLuint buffer, GLenum access) {if (GLeeInit()) return glMapNamedBufferEXT(buffer, access); return (GLvoid*)0;} GLEEPFNGLMAPNAMEDBUFFEREXTPROC GLeeFuncPtr_glMapNamedBufferEXT=GLee_Lazy_glMapNamedBufferEXT; #endif #ifndef GLEE_C_DEFINED_glUnmapNamedBufferEXT #define GLEE_C_DEFINED_glUnmapNamedBufferEXT GLboolean __stdcall GLee_Lazy_glUnmapNamedBufferEXT(GLuint buffer) {if (GLeeInit()) return glUnmapNamedBufferEXT(buffer); return (GLboolean)0;} GLEEPFNGLUNMAPNAMEDBUFFEREXTPROC GLeeFuncPtr_glUnmapNamedBufferEXT=GLee_Lazy_glUnmapNamedBufferEXT; #endif #ifndef GLEE_C_DEFINED_glMapNamedBufferRangeEXT #define GLEE_C_DEFINED_glMapNamedBufferRangeEXT GLvoid* __stdcall GLee_Lazy_glMapNamedBufferRangeEXT(GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access) {if (GLeeInit()) return glMapNamedBufferRangeEXT(buffer, offset, length, access); return (GLvoid*)0;} GLEEPFNGLMAPNAMEDBUFFERRANGEEXTPROC GLeeFuncPtr_glMapNamedBufferRangeEXT=GLee_Lazy_glMapNamedBufferRangeEXT; #endif #ifndef GLEE_C_DEFINED_glFlushMappedNamedBufferRangeEXT #define GLEE_C_DEFINED_glFlushMappedNamedBufferRangeEXT void __stdcall GLee_Lazy_glFlushMappedNamedBufferRangeEXT(GLuint buffer, GLintptr offset, GLsizeiptr length) {if (GLeeInit()) glFlushMappedNamedBufferRangeEXT(buffer, offset, length);} GLEEPFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC GLeeFuncPtr_glFlushMappedNamedBufferRangeEXT=GLee_Lazy_glFlushMappedNamedBufferRangeEXT; #endif #ifndef GLEE_C_DEFINED_glNamedCopyBufferSubDataEXT #define GLEE_C_DEFINED_glNamedCopyBufferSubDataEXT void __stdcall GLee_Lazy_glNamedCopyBufferSubDataEXT(GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) {if (GLeeInit()) glNamedCopyBufferSubDataEXT(readBuffer, writeBuffer, readOffset, writeOffset, size);} GLEEPFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC GLeeFuncPtr_glNamedCopyBufferSubDataEXT=GLee_Lazy_glNamedCopyBufferSubDataEXT; #endif #ifndef GLEE_C_DEFINED_glGetNamedBufferParameterivEXT #define GLEE_C_DEFINED_glGetNamedBufferParameterivEXT void __stdcall GLee_Lazy_glGetNamedBufferParameterivEXT(GLuint buffer, GLenum pname, GLint * params) {if (GLeeInit()) glGetNamedBufferParameterivEXT(buffer, pname, params);} GLEEPFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC GLeeFuncPtr_glGetNamedBufferParameterivEXT=GLee_Lazy_glGetNamedBufferParameterivEXT; #endif #ifndef GLEE_C_DEFINED_glGetNamedBufferPointervEXT #define GLEE_C_DEFINED_glGetNamedBufferPointervEXT void __stdcall GLee_Lazy_glGetNamedBufferPointervEXT(GLuint buffer, GLenum pname, GLvoid* * params) {if (GLeeInit()) glGetNamedBufferPointervEXT(buffer, pname, params);} GLEEPFNGLGETNAMEDBUFFERPOINTERVEXTPROC GLeeFuncPtr_glGetNamedBufferPointervEXT=GLee_Lazy_glGetNamedBufferPointervEXT; #endif #ifndef GLEE_C_DEFINED_glGetNamedBufferSubDataEXT #define GLEE_C_DEFINED_glGetNamedBufferSubDataEXT void __stdcall GLee_Lazy_glGetNamedBufferSubDataEXT(GLuint buffer, GLintptr offset, GLsizeiptr size, GLvoid * data) {if (GLeeInit()) glGetNamedBufferSubDataEXT(buffer, offset, size, data);} GLEEPFNGLGETNAMEDBUFFERSUBDATAEXTPROC GLeeFuncPtr_glGetNamedBufferSubDataEXT=GLee_Lazy_glGetNamedBufferSubDataEXT; #endif #ifndef GLEE_C_DEFINED_glTextureBufferEXT #define GLEE_C_DEFINED_glTextureBufferEXT void __stdcall GLee_Lazy_glTextureBufferEXT(GLuint texture, GLenum target, GLenum internalformat, GLuint buffer) {if (GLeeInit()) glTextureBufferEXT(texture, target, internalformat, buffer);} GLEEPFNGLTEXTUREBUFFEREXTPROC GLeeFuncPtr_glTextureBufferEXT=GLee_Lazy_glTextureBufferEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexBufferEXT #define GLEE_C_DEFINED_glMultiTexBufferEXT void __stdcall GLee_Lazy_glMultiTexBufferEXT(GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer) {if (GLeeInit()) glMultiTexBufferEXT(texunit, target, internalformat, buffer);} GLEEPFNGLMULTITEXBUFFEREXTPROC GLeeFuncPtr_glMultiTexBufferEXT=GLee_Lazy_glMultiTexBufferEXT; #endif #ifndef GLEE_C_DEFINED_glNamedRenderbufferStorageEXT #define GLEE_C_DEFINED_glNamedRenderbufferStorageEXT void __stdcall GLee_Lazy_glNamedRenderbufferStorageEXT(GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height) {if (GLeeInit()) glNamedRenderbufferStorageEXT(renderbuffer, internalformat, width, height);} GLEEPFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC GLeeFuncPtr_glNamedRenderbufferStorageEXT=GLee_Lazy_glNamedRenderbufferStorageEXT; #endif #ifndef GLEE_C_DEFINED_glGetNamedRenderbufferParameterivEXT #define GLEE_C_DEFINED_glGetNamedRenderbufferParameterivEXT void __stdcall GLee_Lazy_glGetNamedRenderbufferParameterivEXT(GLuint renderbuffer, GLenum pname, GLint * params) {if (GLeeInit()) glGetNamedRenderbufferParameterivEXT(renderbuffer, pname, params);} GLEEPFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC GLeeFuncPtr_glGetNamedRenderbufferParameterivEXT=GLee_Lazy_glGetNamedRenderbufferParameterivEXT; #endif #ifndef GLEE_C_DEFINED_glCheckNamedFramebufferStatusEXT #define GLEE_C_DEFINED_glCheckNamedFramebufferStatusEXT GLenum __stdcall GLee_Lazy_glCheckNamedFramebufferStatusEXT(GLuint framebuffer, GLenum target) {if (GLeeInit()) return glCheckNamedFramebufferStatusEXT(framebuffer, target); return (GLenum)0;} GLEEPFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC GLeeFuncPtr_glCheckNamedFramebufferStatusEXT=GLee_Lazy_glCheckNamedFramebufferStatusEXT; #endif #ifndef GLEE_C_DEFINED_glNamedFramebufferTexture1DEXT #define GLEE_C_DEFINED_glNamedFramebufferTexture1DEXT void __stdcall GLee_Lazy_glNamedFramebufferTexture1DEXT(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level) {if (GLeeInit()) glNamedFramebufferTexture1DEXT(framebuffer, attachment, textarget, texture, level);} GLEEPFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC GLeeFuncPtr_glNamedFramebufferTexture1DEXT=GLee_Lazy_glNamedFramebufferTexture1DEXT; #endif #ifndef GLEE_C_DEFINED_glNamedFramebufferTexture2DEXT #define GLEE_C_DEFINED_glNamedFramebufferTexture2DEXT void __stdcall GLee_Lazy_glNamedFramebufferTexture2DEXT(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level) {if (GLeeInit()) glNamedFramebufferTexture2DEXT(framebuffer, attachment, textarget, texture, level);} GLEEPFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC GLeeFuncPtr_glNamedFramebufferTexture2DEXT=GLee_Lazy_glNamedFramebufferTexture2DEXT; #endif #ifndef GLEE_C_DEFINED_glNamedFramebufferTexture3DEXT #define GLEE_C_DEFINED_glNamedFramebufferTexture3DEXT void __stdcall GLee_Lazy_glNamedFramebufferTexture3DEXT(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) {if (GLeeInit()) glNamedFramebufferTexture3DEXT(framebuffer, attachment, textarget, texture, level, zoffset);} GLEEPFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC GLeeFuncPtr_glNamedFramebufferTexture3DEXT=GLee_Lazy_glNamedFramebufferTexture3DEXT; #endif #ifndef GLEE_C_DEFINED_glNamedFramebufferRenderbufferEXT #define GLEE_C_DEFINED_glNamedFramebufferRenderbufferEXT void __stdcall GLee_Lazy_glNamedFramebufferRenderbufferEXT(GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) {if (GLeeInit()) glNamedFramebufferRenderbufferEXT(framebuffer, attachment, renderbuffertarget, renderbuffer);} GLEEPFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC GLeeFuncPtr_glNamedFramebufferRenderbufferEXT=GLee_Lazy_glNamedFramebufferRenderbufferEXT; #endif #ifndef GLEE_C_DEFINED_glGetNamedFramebufferAttachmentParameterivEXT #define GLEE_C_DEFINED_glGetNamedFramebufferAttachmentParameterivEXT void __stdcall GLee_Lazy_glGetNamedFramebufferAttachmentParameterivEXT(GLuint framebuffer, GLenum attachment, GLenum pname, GLint * params) {if (GLeeInit()) glGetNamedFramebufferAttachmentParameterivEXT(framebuffer, attachment, pname, params);} GLEEPFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC GLeeFuncPtr_glGetNamedFramebufferAttachmentParameterivEXT=GLee_Lazy_glGetNamedFramebufferAttachmentParameterivEXT; #endif #ifndef GLEE_C_DEFINED_glGenerateTextureMipmapEXT #define GLEE_C_DEFINED_glGenerateTextureMipmapEXT void __stdcall GLee_Lazy_glGenerateTextureMipmapEXT(GLuint texture, GLenum target) {if (GLeeInit()) glGenerateTextureMipmapEXT(texture, target);} GLEEPFNGLGENERATETEXTUREMIPMAPEXTPROC GLeeFuncPtr_glGenerateTextureMipmapEXT=GLee_Lazy_glGenerateTextureMipmapEXT; #endif #ifndef GLEE_C_DEFINED_glGenerateMultiTexMipmapEXT #define GLEE_C_DEFINED_glGenerateMultiTexMipmapEXT void __stdcall GLee_Lazy_glGenerateMultiTexMipmapEXT(GLenum texunit, GLenum target) {if (GLeeInit()) glGenerateMultiTexMipmapEXT(texunit, target);} GLEEPFNGLGENERATEMULTITEXMIPMAPEXTPROC GLeeFuncPtr_glGenerateMultiTexMipmapEXT=GLee_Lazy_glGenerateMultiTexMipmapEXT; #endif #ifndef GLEE_C_DEFINED_glFramebufferDrawBufferEXT #define GLEE_C_DEFINED_glFramebufferDrawBufferEXT void __stdcall GLee_Lazy_glFramebufferDrawBufferEXT(GLuint framebuffer, GLenum mode) {if (GLeeInit()) glFramebufferDrawBufferEXT(framebuffer, mode);} GLEEPFNGLFRAMEBUFFERDRAWBUFFEREXTPROC GLeeFuncPtr_glFramebufferDrawBufferEXT=GLee_Lazy_glFramebufferDrawBufferEXT; #endif #ifndef GLEE_C_DEFINED_glFramebufferDrawBuffersEXT #define GLEE_C_DEFINED_glFramebufferDrawBuffersEXT void __stdcall GLee_Lazy_glFramebufferDrawBuffersEXT(GLuint framebuffer, GLsizei n, const GLenum * bufs) {if (GLeeInit()) glFramebufferDrawBuffersEXT(framebuffer, n, bufs);} GLEEPFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC GLeeFuncPtr_glFramebufferDrawBuffersEXT=GLee_Lazy_glFramebufferDrawBuffersEXT; #endif #ifndef GLEE_C_DEFINED_glFramebufferReadBufferEXT #define GLEE_C_DEFINED_glFramebufferReadBufferEXT void __stdcall GLee_Lazy_glFramebufferReadBufferEXT(GLuint framebuffer, GLenum mode) {if (GLeeInit()) glFramebufferReadBufferEXT(framebuffer, mode);} GLEEPFNGLFRAMEBUFFERREADBUFFEREXTPROC GLeeFuncPtr_glFramebufferReadBufferEXT=GLee_Lazy_glFramebufferReadBufferEXT; #endif #ifndef GLEE_C_DEFINED_glGetFramebufferParameterivEXT #define GLEE_C_DEFINED_glGetFramebufferParameterivEXT void __stdcall GLee_Lazy_glGetFramebufferParameterivEXT(GLuint framebuffer, GLenum pname, GLint * params) {if (GLeeInit()) glGetFramebufferParameterivEXT(framebuffer, pname, params);} GLEEPFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC GLeeFuncPtr_glGetFramebufferParameterivEXT=GLee_Lazy_glGetFramebufferParameterivEXT; #endif #ifndef GLEE_C_DEFINED_glNamedRenderbufferStorageMultisampleEXT #define GLEE_C_DEFINED_glNamedRenderbufferStorageMultisampleEXT void __stdcall GLee_Lazy_glNamedRenderbufferStorageMultisampleEXT(GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) {if (GLeeInit()) glNamedRenderbufferStorageMultisampleEXT(renderbuffer, samples, internalformat, width, height);} GLEEPFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC GLeeFuncPtr_glNamedRenderbufferStorageMultisampleEXT=GLee_Lazy_glNamedRenderbufferStorageMultisampleEXT; #endif #ifndef GLEE_C_DEFINED_glNamedRenderbufferStorageMultisampleCoverageEXT #define GLEE_C_DEFINED_glNamedRenderbufferStorageMultisampleCoverageEXT void __stdcall GLee_Lazy_glNamedRenderbufferStorageMultisampleCoverageEXT(GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height) {if (GLeeInit()) glNamedRenderbufferStorageMultisampleCoverageEXT(renderbuffer, coverageSamples, colorSamples, internalformat, width, height);} GLEEPFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC GLeeFuncPtr_glNamedRenderbufferStorageMultisampleCoverageEXT=GLee_Lazy_glNamedRenderbufferStorageMultisampleCoverageEXT; #endif #ifndef GLEE_C_DEFINED_glNamedFramebufferTextureEXT #define GLEE_C_DEFINED_glNamedFramebufferTextureEXT void __stdcall GLee_Lazy_glNamedFramebufferTextureEXT(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level) {if (GLeeInit()) glNamedFramebufferTextureEXT(framebuffer, attachment, texture, level);} GLEEPFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC GLeeFuncPtr_glNamedFramebufferTextureEXT=GLee_Lazy_glNamedFramebufferTextureEXT; #endif #ifndef GLEE_C_DEFINED_glNamedFramebufferTextureLayerEXT #define GLEE_C_DEFINED_glNamedFramebufferTextureLayerEXT void __stdcall GLee_Lazy_glNamedFramebufferTextureLayerEXT(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer) {if (GLeeInit()) glNamedFramebufferTextureLayerEXT(framebuffer, attachment, texture, level, layer);} GLEEPFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC GLeeFuncPtr_glNamedFramebufferTextureLayerEXT=GLee_Lazy_glNamedFramebufferTextureLayerEXT; #endif #ifndef GLEE_C_DEFINED_glNamedFramebufferTextureFaceEXT #define GLEE_C_DEFINED_glNamedFramebufferTextureFaceEXT void __stdcall GLee_Lazy_glNamedFramebufferTextureFaceEXT(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face) {if (GLeeInit()) glNamedFramebufferTextureFaceEXT(framebuffer, attachment, texture, level, face);} GLEEPFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC GLeeFuncPtr_glNamedFramebufferTextureFaceEXT=GLee_Lazy_glNamedFramebufferTextureFaceEXT; #endif #ifndef GLEE_C_DEFINED_glTextureRenderbufferEXT #define GLEE_C_DEFINED_glTextureRenderbufferEXT void __stdcall GLee_Lazy_glTextureRenderbufferEXT(GLuint texture, GLenum target, GLuint renderbuffer) {if (GLeeInit()) glTextureRenderbufferEXT(texture, target, renderbuffer);} GLEEPFNGLTEXTURERENDERBUFFEREXTPROC GLeeFuncPtr_glTextureRenderbufferEXT=GLee_Lazy_glTextureRenderbufferEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexRenderbufferEXT #define GLEE_C_DEFINED_glMultiTexRenderbufferEXT void __stdcall GLee_Lazy_glMultiTexRenderbufferEXT(GLenum texunit, GLenum target, GLuint renderbuffer) {if (GLeeInit()) glMultiTexRenderbufferEXT(texunit, target, renderbuffer);} GLEEPFNGLMULTITEXRENDERBUFFEREXTPROC GLeeFuncPtr_glMultiTexRenderbufferEXT=GLee_Lazy_glMultiTexRenderbufferEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform1dEXT #define GLEE_C_DEFINED_glProgramUniform1dEXT void __stdcall GLee_Lazy_glProgramUniform1dEXT(GLuint program, GLint location, GLdouble x) {if (GLeeInit()) glProgramUniform1dEXT(program, location, x);} GLEEPFNGLPROGRAMUNIFORM1DEXTPROC GLeeFuncPtr_glProgramUniform1dEXT=GLee_Lazy_glProgramUniform1dEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform2dEXT #define GLEE_C_DEFINED_glProgramUniform2dEXT void __stdcall GLee_Lazy_glProgramUniform2dEXT(GLuint program, GLint location, GLdouble x, GLdouble y) {if (GLeeInit()) glProgramUniform2dEXT(program, location, x, y);} GLEEPFNGLPROGRAMUNIFORM2DEXTPROC GLeeFuncPtr_glProgramUniform2dEXT=GLee_Lazy_glProgramUniform2dEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform3dEXT #define GLEE_C_DEFINED_glProgramUniform3dEXT void __stdcall GLee_Lazy_glProgramUniform3dEXT(GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z) {if (GLeeInit()) glProgramUniform3dEXT(program, location, x, y, z);} GLEEPFNGLPROGRAMUNIFORM3DEXTPROC GLeeFuncPtr_glProgramUniform3dEXT=GLee_Lazy_glProgramUniform3dEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform4dEXT #define GLEE_C_DEFINED_glProgramUniform4dEXT void __stdcall GLee_Lazy_glProgramUniform4dEXT(GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w) {if (GLeeInit()) glProgramUniform4dEXT(program, location, x, y, z, w);} GLEEPFNGLPROGRAMUNIFORM4DEXTPROC GLeeFuncPtr_glProgramUniform4dEXT=GLee_Lazy_glProgramUniform4dEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform1dvEXT #define GLEE_C_DEFINED_glProgramUniform1dvEXT void __stdcall GLee_Lazy_glProgramUniform1dvEXT(GLuint program, GLint location, GLsizei count, const GLdouble * value) {if (GLeeInit()) glProgramUniform1dvEXT(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM1DVEXTPROC GLeeFuncPtr_glProgramUniform1dvEXT=GLee_Lazy_glProgramUniform1dvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform2dvEXT #define GLEE_C_DEFINED_glProgramUniform2dvEXT void __stdcall GLee_Lazy_glProgramUniform2dvEXT(GLuint program, GLint location, GLsizei count, const GLdouble * value) {if (GLeeInit()) glProgramUniform2dvEXT(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM2DVEXTPROC GLeeFuncPtr_glProgramUniform2dvEXT=GLee_Lazy_glProgramUniform2dvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform3dvEXT #define GLEE_C_DEFINED_glProgramUniform3dvEXT void __stdcall GLee_Lazy_glProgramUniform3dvEXT(GLuint program, GLint location, GLsizei count, const GLdouble * value) {if (GLeeInit()) glProgramUniform3dvEXT(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM3DVEXTPROC GLeeFuncPtr_glProgramUniform3dvEXT=GLee_Lazy_glProgramUniform3dvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform4dvEXT #define GLEE_C_DEFINED_glProgramUniform4dvEXT void __stdcall GLee_Lazy_glProgramUniform4dvEXT(GLuint program, GLint location, GLsizei count, const GLdouble * value) {if (GLeeInit()) glProgramUniform4dvEXT(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM4DVEXTPROC GLeeFuncPtr_glProgramUniform4dvEXT=GLee_Lazy_glProgramUniform4dvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix2dvEXT #define GLEE_C_DEFINED_glProgramUniformMatrix2dvEXT void __stdcall GLee_Lazy_glProgramUniformMatrix2dvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value) {if (GLeeInit()) glProgramUniformMatrix2dvEXT(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC GLeeFuncPtr_glProgramUniformMatrix2dvEXT=GLee_Lazy_glProgramUniformMatrix2dvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix3dvEXT #define GLEE_C_DEFINED_glProgramUniformMatrix3dvEXT void __stdcall GLee_Lazy_glProgramUniformMatrix3dvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value) {if (GLeeInit()) glProgramUniformMatrix3dvEXT(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC GLeeFuncPtr_glProgramUniformMatrix3dvEXT=GLee_Lazy_glProgramUniformMatrix3dvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix4dvEXT #define GLEE_C_DEFINED_glProgramUniformMatrix4dvEXT void __stdcall GLee_Lazy_glProgramUniformMatrix4dvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value) {if (GLeeInit()) glProgramUniformMatrix4dvEXT(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC GLeeFuncPtr_glProgramUniformMatrix4dvEXT=GLee_Lazy_glProgramUniformMatrix4dvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix2x3dvEXT #define GLEE_C_DEFINED_glProgramUniformMatrix2x3dvEXT void __stdcall GLee_Lazy_glProgramUniformMatrix2x3dvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value) {if (GLeeInit()) glProgramUniformMatrix2x3dvEXT(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC GLeeFuncPtr_glProgramUniformMatrix2x3dvEXT=GLee_Lazy_glProgramUniformMatrix2x3dvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix2x4dvEXT #define GLEE_C_DEFINED_glProgramUniformMatrix2x4dvEXT void __stdcall GLee_Lazy_glProgramUniformMatrix2x4dvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value) {if (GLeeInit()) glProgramUniformMatrix2x4dvEXT(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC GLeeFuncPtr_glProgramUniformMatrix2x4dvEXT=GLee_Lazy_glProgramUniformMatrix2x4dvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix3x2dvEXT #define GLEE_C_DEFINED_glProgramUniformMatrix3x2dvEXT void __stdcall GLee_Lazy_glProgramUniformMatrix3x2dvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value) {if (GLeeInit()) glProgramUniformMatrix3x2dvEXT(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC GLeeFuncPtr_glProgramUniformMatrix3x2dvEXT=GLee_Lazy_glProgramUniformMatrix3x2dvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix3x4dvEXT #define GLEE_C_DEFINED_glProgramUniformMatrix3x4dvEXT void __stdcall GLee_Lazy_glProgramUniformMatrix3x4dvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value) {if (GLeeInit()) glProgramUniformMatrix3x4dvEXT(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC GLeeFuncPtr_glProgramUniformMatrix3x4dvEXT=GLee_Lazy_glProgramUniformMatrix3x4dvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix4x2dvEXT #define GLEE_C_DEFINED_glProgramUniformMatrix4x2dvEXT void __stdcall GLee_Lazy_glProgramUniformMatrix4x2dvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value) {if (GLeeInit()) glProgramUniformMatrix4x2dvEXT(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC GLeeFuncPtr_glProgramUniformMatrix4x2dvEXT=GLee_Lazy_glProgramUniformMatrix4x2dvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix4x3dvEXT #define GLEE_C_DEFINED_glProgramUniformMatrix4x3dvEXT void __stdcall GLee_Lazy_glProgramUniformMatrix4x3dvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value) {if (GLeeInit()) glProgramUniformMatrix4x3dvEXT(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC GLeeFuncPtr_glProgramUniformMatrix4x3dvEXT=GLee_Lazy_glProgramUniformMatrix4x3dvEXT; #endif #endif /* GL_EXT_vertex_array_bgra */ #ifdef __GLEE_GL_EXT_vertex_array_bgra #endif /* GL_EXT_texture_swizzle */ #ifdef __GLEE_GL_EXT_texture_swizzle #endif /* GL_NV_explicit_multisample */ #ifdef __GLEE_GL_NV_explicit_multisample #ifndef GLEE_C_DEFINED_glGetMultisamplefvNV #define GLEE_C_DEFINED_glGetMultisamplefvNV void __stdcall GLee_Lazy_glGetMultisamplefvNV(GLenum pname, GLuint index, GLfloat * val) {if (GLeeInit()) glGetMultisamplefvNV(pname, index, val);} GLEEPFNGLGETMULTISAMPLEFVNVPROC GLeeFuncPtr_glGetMultisamplefvNV=GLee_Lazy_glGetMultisamplefvNV; #endif #ifndef GLEE_C_DEFINED_glSampleMaskIndexedNV #define GLEE_C_DEFINED_glSampleMaskIndexedNV void __stdcall GLee_Lazy_glSampleMaskIndexedNV(GLuint index, GLbitfield mask) {if (GLeeInit()) glSampleMaskIndexedNV(index, mask);} GLEEPFNGLSAMPLEMASKINDEXEDNVPROC GLeeFuncPtr_glSampleMaskIndexedNV=GLee_Lazy_glSampleMaskIndexedNV; #endif #ifndef GLEE_C_DEFINED_glTexRenderbufferNV #define GLEE_C_DEFINED_glTexRenderbufferNV void __stdcall GLee_Lazy_glTexRenderbufferNV(GLenum target, GLuint renderbuffer) {if (GLeeInit()) glTexRenderbufferNV(target, renderbuffer);} GLEEPFNGLTEXRENDERBUFFERNVPROC GLeeFuncPtr_glTexRenderbufferNV=GLee_Lazy_glTexRenderbufferNV; #endif #endif /* GL_NV_transform_feedback2 */ #ifdef __GLEE_GL_NV_transform_feedback2 #ifndef GLEE_C_DEFINED_glBindTransformFeedbackNV #define GLEE_C_DEFINED_glBindTransformFeedbackNV void __stdcall GLee_Lazy_glBindTransformFeedbackNV(GLenum target, GLuint id) {if (GLeeInit()) glBindTransformFeedbackNV(target, id);} GLEEPFNGLBINDTRANSFORMFEEDBACKNVPROC GLeeFuncPtr_glBindTransformFeedbackNV=GLee_Lazy_glBindTransformFeedbackNV; #endif #ifndef GLEE_C_DEFINED_glDeleteTransformFeedbacksNV #define GLEE_C_DEFINED_glDeleteTransformFeedbacksNV void __stdcall GLee_Lazy_glDeleteTransformFeedbacksNV(GLsizei n, const GLuint * ids) {if (GLeeInit()) glDeleteTransformFeedbacksNV(n, ids);} GLEEPFNGLDELETETRANSFORMFEEDBACKSNVPROC GLeeFuncPtr_glDeleteTransformFeedbacksNV=GLee_Lazy_glDeleteTransformFeedbacksNV; #endif #ifndef GLEE_C_DEFINED_glGenTransformFeedbacksNV #define GLEE_C_DEFINED_glGenTransformFeedbacksNV void __stdcall GLee_Lazy_glGenTransformFeedbacksNV(GLsizei n, GLuint * ids) {if (GLeeInit()) glGenTransformFeedbacksNV(n, ids);} GLEEPFNGLGENTRANSFORMFEEDBACKSNVPROC GLeeFuncPtr_glGenTransformFeedbacksNV=GLee_Lazy_glGenTransformFeedbacksNV; #endif #ifndef GLEE_C_DEFINED_glIsTransformFeedbackNV #define GLEE_C_DEFINED_glIsTransformFeedbackNV GLboolean __stdcall GLee_Lazy_glIsTransformFeedbackNV(GLuint id) {if (GLeeInit()) return glIsTransformFeedbackNV(id); return (GLboolean)0;} GLEEPFNGLISTRANSFORMFEEDBACKNVPROC GLeeFuncPtr_glIsTransformFeedbackNV=GLee_Lazy_glIsTransformFeedbackNV; #endif #ifndef GLEE_C_DEFINED_glPauseTransformFeedbackNV #define GLEE_C_DEFINED_glPauseTransformFeedbackNV void __stdcall GLee_Lazy_glPauseTransformFeedbackNV(void) {if (GLeeInit()) glPauseTransformFeedbackNV();} GLEEPFNGLPAUSETRANSFORMFEEDBACKNVPROC GLeeFuncPtr_glPauseTransformFeedbackNV=GLee_Lazy_glPauseTransformFeedbackNV; #endif #ifndef GLEE_C_DEFINED_glResumeTransformFeedbackNV #define GLEE_C_DEFINED_glResumeTransformFeedbackNV void __stdcall GLee_Lazy_glResumeTransformFeedbackNV(void) {if (GLeeInit()) glResumeTransformFeedbackNV();} GLEEPFNGLRESUMETRANSFORMFEEDBACKNVPROC GLeeFuncPtr_glResumeTransformFeedbackNV=GLee_Lazy_glResumeTransformFeedbackNV; #endif #ifndef GLEE_C_DEFINED_glDrawTransformFeedbackNV #define GLEE_C_DEFINED_glDrawTransformFeedbackNV void __stdcall GLee_Lazy_glDrawTransformFeedbackNV(GLenum mode, GLuint id) {if (GLeeInit()) glDrawTransformFeedbackNV(mode, id);} GLEEPFNGLDRAWTRANSFORMFEEDBACKNVPROC GLeeFuncPtr_glDrawTransformFeedbackNV=GLee_Lazy_glDrawTransformFeedbackNV; #endif #endif /* GL_ATI_meminfo */ #ifdef __GLEE_GL_ATI_meminfo #endif /* GL_AMD_performance_monitor */ #ifdef __GLEE_GL_AMD_performance_monitor #ifndef GLEE_C_DEFINED_glGetPerfMonitorGroupsAMD #define GLEE_C_DEFINED_glGetPerfMonitorGroupsAMD void __stdcall GLee_Lazy_glGetPerfMonitorGroupsAMD(GLint * numGroups, GLsizei groupsSize, GLuint * groups) {if (GLeeInit()) glGetPerfMonitorGroupsAMD(numGroups, groupsSize, groups);} GLEEPFNGLGETPERFMONITORGROUPSAMDPROC GLeeFuncPtr_glGetPerfMonitorGroupsAMD=GLee_Lazy_glGetPerfMonitorGroupsAMD; #endif #ifndef GLEE_C_DEFINED_glGetPerfMonitorCountersAMD #define GLEE_C_DEFINED_glGetPerfMonitorCountersAMD void __stdcall GLee_Lazy_glGetPerfMonitorCountersAMD(GLuint group, GLint * numCounters, GLint * maxActiveCounters, GLsizei counterSize, GLuint * counters) {if (GLeeInit()) glGetPerfMonitorCountersAMD(group, numCounters, maxActiveCounters, counterSize, counters);} GLEEPFNGLGETPERFMONITORCOUNTERSAMDPROC GLeeFuncPtr_glGetPerfMonitorCountersAMD=GLee_Lazy_glGetPerfMonitorCountersAMD; #endif #ifndef GLEE_C_DEFINED_glGetPerfMonitorGroupStringAMD #define GLEE_C_DEFINED_glGetPerfMonitorGroupStringAMD void __stdcall GLee_Lazy_glGetPerfMonitorGroupStringAMD(GLuint group, GLsizei bufSize, GLsizei * length, GLchar * groupString) {if (GLeeInit()) glGetPerfMonitorGroupStringAMD(group, bufSize, length, groupString);} GLEEPFNGLGETPERFMONITORGROUPSTRINGAMDPROC GLeeFuncPtr_glGetPerfMonitorGroupStringAMD=GLee_Lazy_glGetPerfMonitorGroupStringAMD; #endif #ifndef GLEE_C_DEFINED_glGetPerfMonitorCounterStringAMD #define GLEE_C_DEFINED_glGetPerfMonitorCounterStringAMD void __stdcall GLee_Lazy_glGetPerfMonitorCounterStringAMD(GLuint group, GLuint counter, GLsizei bufSize, GLsizei * length, GLchar * counterString) {if (GLeeInit()) glGetPerfMonitorCounterStringAMD(group, counter, bufSize, length, counterString);} GLEEPFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC GLeeFuncPtr_glGetPerfMonitorCounterStringAMD=GLee_Lazy_glGetPerfMonitorCounterStringAMD; #endif #ifndef GLEE_C_DEFINED_glGetPerfMonitorCounterInfoAMD #define GLEE_C_DEFINED_glGetPerfMonitorCounterInfoAMD void __stdcall GLee_Lazy_glGetPerfMonitorCounterInfoAMD(GLuint group, GLuint counter, GLenum pname, GLvoid * data) {if (GLeeInit()) glGetPerfMonitorCounterInfoAMD(group, counter, pname, data);} GLEEPFNGLGETPERFMONITORCOUNTERINFOAMDPROC GLeeFuncPtr_glGetPerfMonitorCounterInfoAMD=GLee_Lazy_glGetPerfMonitorCounterInfoAMD; #endif #ifndef GLEE_C_DEFINED_glGenPerfMonitorsAMD #define GLEE_C_DEFINED_glGenPerfMonitorsAMD void __stdcall GLee_Lazy_glGenPerfMonitorsAMD(GLsizei n, GLuint * monitors) {if (GLeeInit()) glGenPerfMonitorsAMD(n, monitors);} GLEEPFNGLGENPERFMONITORSAMDPROC GLeeFuncPtr_glGenPerfMonitorsAMD=GLee_Lazy_glGenPerfMonitorsAMD; #endif #ifndef GLEE_C_DEFINED_glDeletePerfMonitorsAMD #define GLEE_C_DEFINED_glDeletePerfMonitorsAMD void __stdcall GLee_Lazy_glDeletePerfMonitorsAMD(GLsizei n, GLuint * monitors) {if (GLeeInit()) glDeletePerfMonitorsAMD(n, monitors);} GLEEPFNGLDELETEPERFMONITORSAMDPROC GLeeFuncPtr_glDeletePerfMonitorsAMD=GLee_Lazy_glDeletePerfMonitorsAMD; #endif #ifndef GLEE_C_DEFINED_glSelectPerfMonitorCountersAMD #define GLEE_C_DEFINED_glSelectPerfMonitorCountersAMD void __stdcall GLee_Lazy_glSelectPerfMonitorCountersAMD(GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint * counterList) {if (GLeeInit()) glSelectPerfMonitorCountersAMD(monitor, enable, group, numCounters, counterList);} GLEEPFNGLSELECTPERFMONITORCOUNTERSAMDPROC GLeeFuncPtr_glSelectPerfMonitorCountersAMD=GLee_Lazy_glSelectPerfMonitorCountersAMD; #endif #ifndef GLEE_C_DEFINED_glBeginPerfMonitorAMD #define GLEE_C_DEFINED_glBeginPerfMonitorAMD void __stdcall GLee_Lazy_glBeginPerfMonitorAMD(GLuint monitor) {if (GLeeInit()) glBeginPerfMonitorAMD(monitor);} GLEEPFNGLBEGINPERFMONITORAMDPROC GLeeFuncPtr_glBeginPerfMonitorAMD=GLee_Lazy_glBeginPerfMonitorAMD; #endif #ifndef GLEE_C_DEFINED_glEndPerfMonitorAMD #define GLEE_C_DEFINED_glEndPerfMonitorAMD void __stdcall GLee_Lazy_glEndPerfMonitorAMD(GLuint monitor) {if (GLeeInit()) glEndPerfMonitorAMD(monitor);} GLEEPFNGLENDPERFMONITORAMDPROC GLeeFuncPtr_glEndPerfMonitorAMD=GLee_Lazy_glEndPerfMonitorAMD; #endif #ifndef GLEE_C_DEFINED_glGetPerfMonitorCounterDataAMD #define GLEE_C_DEFINED_glGetPerfMonitorCounterDataAMD void __stdcall GLee_Lazy_glGetPerfMonitorCounterDataAMD(GLuint monitor, GLenum pname, GLsizei dataSize, GLuint * data, GLint * bytesWritten) {if (GLeeInit()) glGetPerfMonitorCounterDataAMD(monitor, pname, dataSize, data, bytesWritten);} GLEEPFNGLGETPERFMONITORCOUNTERDATAAMDPROC GLeeFuncPtr_glGetPerfMonitorCounterDataAMD=GLee_Lazy_glGetPerfMonitorCounterDataAMD; #endif #endif /* GL_AMD_texture_texture4 */ #ifdef __GLEE_GL_AMD_texture_texture4 #endif /* GL_AMD_vertex_shader_tesselator */ #ifdef __GLEE_GL_AMD_vertex_shader_tesselator #ifndef GLEE_C_DEFINED_glTessellationFactorAMD #define GLEE_C_DEFINED_glTessellationFactorAMD void __stdcall GLee_Lazy_glTessellationFactorAMD(GLfloat factor) {if (GLeeInit()) glTessellationFactorAMD(factor);} GLEEPFNGLTESSELLATIONFACTORAMDPROC GLeeFuncPtr_glTessellationFactorAMD=GLee_Lazy_glTessellationFactorAMD; #endif #ifndef GLEE_C_DEFINED_glTessellationModeAMD #define GLEE_C_DEFINED_glTessellationModeAMD void __stdcall GLee_Lazy_glTessellationModeAMD(GLenum mode) {if (GLeeInit()) glTessellationModeAMD(mode);} GLEEPFNGLTESSELLATIONMODEAMDPROC GLeeFuncPtr_glTessellationModeAMD=GLee_Lazy_glTessellationModeAMD; #endif #endif /* GL_EXT_provoking_vertex */ #ifdef __GLEE_GL_EXT_provoking_vertex #ifndef GLEE_C_DEFINED_glProvokingVertexEXT #define GLEE_C_DEFINED_glProvokingVertexEXT void __stdcall GLee_Lazy_glProvokingVertexEXT(GLenum mode) {if (GLeeInit()) glProvokingVertexEXT(mode);} GLEEPFNGLPROVOKINGVERTEXEXTPROC GLeeFuncPtr_glProvokingVertexEXT=GLee_Lazy_glProvokingVertexEXT; #endif #endif /* GL_EXT_texture_snorm */ #ifdef __GLEE_GL_EXT_texture_snorm #endif /* GL_AMD_draw_buffers_blend */ #ifdef __GLEE_GL_AMD_draw_buffers_blend #ifndef GLEE_C_DEFINED_glBlendFuncIndexedAMD #define GLEE_C_DEFINED_glBlendFuncIndexedAMD void __stdcall GLee_Lazy_glBlendFuncIndexedAMD(GLuint buf, GLenum src, GLenum dst) {if (GLeeInit()) glBlendFuncIndexedAMD(buf, src, dst);} GLEEPFNGLBLENDFUNCINDEXEDAMDPROC GLeeFuncPtr_glBlendFuncIndexedAMD=GLee_Lazy_glBlendFuncIndexedAMD; #endif #ifndef GLEE_C_DEFINED_glBlendFuncSeparateIndexedAMD #define GLEE_C_DEFINED_glBlendFuncSeparateIndexedAMD void __stdcall GLee_Lazy_glBlendFuncSeparateIndexedAMD(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) {if (GLeeInit()) glBlendFuncSeparateIndexedAMD(buf, srcRGB, dstRGB, srcAlpha, dstAlpha);} GLEEPFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC GLeeFuncPtr_glBlendFuncSeparateIndexedAMD=GLee_Lazy_glBlendFuncSeparateIndexedAMD; #endif #ifndef GLEE_C_DEFINED_glBlendEquationIndexedAMD #define GLEE_C_DEFINED_glBlendEquationIndexedAMD void __stdcall GLee_Lazy_glBlendEquationIndexedAMD(GLuint buf, GLenum mode) {if (GLeeInit()) glBlendEquationIndexedAMD(buf, mode);} GLEEPFNGLBLENDEQUATIONINDEXEDAMDPROC GLeeFuncPtr_glBlendEquationIndexedAMD=GLee_Lazy_glBlendEquationIndexedAMD; #endif #ifndef GLEE_C_DEFINED_glBlendEquationSeparateIndexedAMD #define GLEE_C_DEFINED_glBlendEquationSeparateIndexedAMD void __stdcall GLee_Lazy_glBlendEquationSeparateIndexedAMD(GLuint buf, GLenum modeRGB, GLenum modeAlpha) {if (GLeeInit()) glBlendEquationSeparateIndexedAMD(buf, modeRGB, modeAlpha);} GLEEPFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC GLeeFuncPtr_glBlendEquationSeparateIndexedAMD=GLee_Lazy_glBlendEquationSeparateIndexedAMD; #endif #endif /* GL_APPLE_texture_range */ #ifdef __GLEE_GL_APPLE_texture_range #ifndef GLEE_C_DEFINED_glTextureRangeAPPLE #define GLEE_C_DEFINED_glTextureRangeAPPLE void __stdcall GLee_Lazy_glTextureRangeAPPLE(GLenum target, GLsizei length, const GLvoid * pointer) {if (GLeeInit()) glTextureRangeAPPLE(target, length, pointer);} GLEEPFNGLTEXTURERANGEAPPLEPROC GLeeFuncPtr_glTextureRangeAPPLE=GLee_Lazy_glTextureRangeAPPLE; #endif #ifndef GLEE_C_DEFINED_glGetTexParameterPointervAPPLE #define GLEE_C_DEFINED_glGetTexParameterPointervAPPLE void __stdcall GLee_Lazy_glGetTexParameterPointervAPPLE(GLenum target, GLenum pname, GLvoid* * params) {if (GLeeInit()) glGetTexParameterPointervAPPLE(target, pname, params);} GLEEPFNGLGETTEXPARAMETERPOINTERVAPPLEPROC GLeeFuncPtr_glGetTexParameterPointervAPPLE=GLee_Lazy_glGetTexParameterPointervAPPLE; #endif #endif /* GL_APPLE_float_pixels */ #ifdef __GLEE_GL_APPLE_float_pixels #endif /* GL_APPLE_vertex_program_evaluators */ #ifdef __GLEE_GL_APPLE_vertex_program_evaluators #ifndef GLEE_C_DEFINED_glEnableVertexAttribAPPLE #define GLEE_C_DEFINED_glEnableVertexAttribAPPLE void __stdcall GLee_Lazy_glEnableVertexAttribAPPLE(GLuint index, GLenum pname) {if (GLeeInit()) glEnableVertexAttribAPPLE(index, pname);} GLEEPFNGLENABLEVERTEXATTRIBAPPLEPROC GLeeFuncPtr_glEnableVertexAttribAPPLE=GLee_Lazy_glEnableVertexAttribAPPLE; #endif #ifndef GLEE_C_DEFINED_glDisableVertexAttribAPPLE #define GLEE_C_DEFINED_glDisableVertexAttribAPPLE void __stdcall GLee_Lazy_glDisableVertexAttribAPPLE(GLuint index, GLenum pname) {if (GLeeInit()) glDisableVertexAttribAPPLE(index, pname);} GLEEPFNGLDISABLEVERTEXATTRIBAPPLEPROC GLeeFuncPtr_glDisableVertexAttribAPPLE=GLee_Lazy_glDisableVertexAttribAPPLE; #endif #ifndef GLEE_C_DEFINED_glIsVertexAttribEnabledAPPLE #define GLEE_C_DEFINED_glIsVertexAttribEnabledAPPLE GLboolean __stdcall GLee_Lazy_glIsVertexAttribEnabledAPPLE(GLuint index, GLenum pname) {if (GLeeInit()) return glIsVertexAttribEnabledAPPLE(index, pname); return (GLboolean)0;} GLEEPFNGLISVERTEXATTRIBENABLEDAPPLEPROC GLeeFuncPtr_glIsVertexAttribEnabledAPPLE=GLee_Lazy_glIsVertexAttribEnabledAPPLE; #endif #ifndef GLEE_C_DEFINED_glMapVertexAttrib1dAPPLE #define GLEE_C_DEFINED_glMapVertexAttrib1dAPPLE void __stdcall GLee_Lazy_glMapVertexAttrib1dAPPLE(GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble * points) {if (GLeeInit()) glMapVertexAttrib1dAPPLE(index, size, u1, u2, stride, order, points);} GLEEPFNGLMAPVERTEXATTRIB1DAPPLEPROC GLeeFuncPtr_glMapVertexAttrib1dAPPLE=GLee_Lazy_glMapVertexAttrib1dAPPLE; #endif #ifndef GLEE_C_DEFINED_glMapVertexAttrib1fAPPLE #define GLEE_C_DEFINED_glMapVertexAttrib1fAPPLE void __stdcall GLee_Lazy_glMapVertexAttrib1fAPPLE(GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat * points) {if (GLeeInit()) glMapVertexAttrib1fAPPLE(index, size, u1, u2, stride, order, points);} GLEEPFNGLMAPVERTEXATTRIB1FAPPLEPROC GLeeFuncPtr_glMapVertexAttrib1fAPPLE=GLee_Lazy_glMapVertexAttrib1fAPPLE; #endif #ifndef GLEE_C_DEFINED_glMapVertexAttrib2dAPPLE #define GLEE_C_DEFINED_glMapVertexAttrib2dAPPLE void __stdcall GLee_Lazy_glMapVertexAttrib2dAPPLE(GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble * points) {if (GLeeInit()) glMapVertexAttrib2dAPPLE(index, size, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points);} GLEEPFNGLMAPVERTEXATTRIB2DAPPLEPROC GLeeFuncPtr_glMapVertexAttrib2dAPPLE=GLee_Lazy_glMapVertexAttrib2dAPPLE; #endif #ifndef GLEE_C_DEFINED_glMapVertexAttrib2fAPPLE #define GLEE_C_DEFINED_glMapVertexAttrib2fAPPLE void __stdcall GLee_Lazy_glMapVertexAttrib2fAPPLE(GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat * points) {if (GLeeInit()) glMapVertexAttrib2fAPPLE(index, size, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points);} GLEEPFNGLMAPVERTEXATTRIB2FAPPLEPROC GLeeFuncPtr_glMapVertexAttrib2fAPPLE=GLee_Lazy_glMapVertexAttrib2fAPPLE; #endif #endif /* GL_APPLE_aux_depth_stencil */ #ifdef __GLEE_GL_APPLE_aux_depth_stencil #endif /* GL_APPLE_object_purgeable */ #ifdef __GLEE_GL_APPLE_object_purgeable #ifndef GLEE_C_DEFINED_glObjectPurgeableAPPLE #define GLEE_C_DEFINED_glObjectPurgeableAPPLE GLenum __stdcall GLee_Lazy_glObjectPurgeableAPPLE(GLenum objectType, GLuint name, GLenum option) {if (GLeeInit()) return glObjectPurgeableAPPLE(objectType, name, option); return (GLenum)0;} GLEEPFNGLOBJECTPURGEABLEAPPLEPROC GLeeFuncPtr_glObjectPurgeableAPPLE=GLee_Lazy_glObjectPurgeableAPPLE; #endif #ifndef GLEE_C_DEFINED_glObjectUnpurgeableAPPLE #define GLEE_C_DEFINED_glObjectUnpurgeableAPPLE GLenum __stdcall GLee_Lazy_glObjectUnpurgeableAPPLE(GLenum objectType, GLuint name, GLenum option) {if (GLeeInit()) return glObjectUnpurgeableAPPLE(objectType, name, option); return (GLenum)0;} GLEEPFNGLOBJECTUNPURGEABLEAPPLEPROC GLeeFuncPtr_glObjectUnpurgeableAPPLE=GLee_Lazy_glObjectUnpurgeableAPPLE; #endif #ifndef GLEE_C_DEFINED_glGetObjectParameterivAPPLE #define GLEE_C_DEFINED_glGetObjectParameterivAPPLE void __stdcall GLee_Lazy_glGetObjectParameterivAPPLE(GLenum objectType, GLuint name, GLenum pname, GLint * params) {if (GLeeInit()) glGetObjectParameterivAPPLE(objectType, name, pname, params);} GLEEPFNGLGETOBJECTPARAMETERIVAPPLEPROC GLeeFuncPtr_glGetObjectParameterivAPPLE=GLee_Lazy_glGetObjectParameterivAPPLE; #endif #endif /* GL_APPLE_row_bytes */ #ifdef __GLEE_GL_APPLE_row_bytes #endif /* GL_APPLE_rgb_422 */ #ifdef __GLEE_GL_APPLE_rgb_422 #endif /* GL_NV_video_capture */ #ifdef __GLEE_GL_NV_video_capture #ifndef GLEE_C_DEFINED_glBeginVideoCaptureNV #define GLEE_C_DEFINED_glBeginVideoCaptureNV void __stdcall GLee_Lazy_glBeginVideoCaptureNV(GLuint video_capture_slot) {if (GLeeInit()) glBeginVideoCaptureNV(video_capture_slot);} GLEEPFNGLBEGINVIDEOCAPTURENVPROC GLeeFuncPtr_glBeginVideoCaptureNV=GLee_Lazy_glBeginVideoCaptureNV; #endif #ifndef GLEE_C_DEFINED_glBindVideoCaptureStreamBufferNV #define GLEE_C_DEFINED_glBindVideoCaptureStreamBufferNV void __stdcall GLee_Lazy_glBindVideoCaptureStreamBufferNV(GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset) {if (GLeeInit()) glBindVideoCaptureStreamBufferNV(video_capture_slot, stream, frame_region, offset);} GLEEPFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC GLeeFuncPtr_glBindVideoCaptureStreamBufferNV=GLee_Lazy_glBindVideoCaptureStreamBufferNV; #endif #ifndef GLEE_C_DEFINED_glBindVideoCaptureStreamTextureNV #define GLEE_C_DEFINED_glBindVideoCaptureStreamTextureNV void __stdcall GLee_Lazy_glBindVideoCaptureStreamTextureNV(GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture) {if (GLeeInit()) glBindVideoCaptureStreamTextureNV(video_capture_slot, stream, frame_region, target, texture);} GLEEPFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC GLeeFuncPtr_glBindVideoCaptureStreamTextureNV=GLee_Lazy_glBindVideoCaptureStreamTextureNV; #endif #ifndef GLEE_C_DEFINED_glEndVideoCaptureNV #define GLEE_C_DEFINED_glEndVideoCaptureNV void __stdcall GLee_Lazy_glEndVideoCaptureNV(GLuint video_capture_slot) {if (GLeeInit()) glEndVideoCaptureNV(video_capture_slot);} GLEEPFNGLENDVIDEOCAPTURENVPROC GLeeFuncPtr_glEndVideoCaptureNV=GLee_Lazy_glEndVideoCaptureNV; #endif #ifndef GLEE_C_DEFINED_glGetVideoCaptureivNV #define GLEE_C_DEFINED_glGetVideoCaptureivNV void __stdcall GLee_Lazy_glGetVideoCaptureivNV(GLuint video_capture_slot, GLenum pname, GLint * params) {if (GLeeInit()) glGetVideoCaptureivNV(video_capture_slot, pname, params);} GLEEPFNGLGETVIDEOCAPTUREIVNVPROC GLeeFuncPtr_glGetVideoCaptureivNV=GLee_Lazy_glGetVideoCaptureivNV; #endif #ifndef GLEE_C_DEFINED_glGetVideoCaptureStreamivNV #define GLEE_C_DEFINED_glGetVideoCaptureStreamivNV void __stdcall GLee_Lazy_glGetVideoCaptureStreamivNV(GLuint video_capture_slot, GLuint stream, GLenum pname, GLint * params) {if (GLeeInit()) glGetVideoCaptureStreamivNV(video_capture_slot, stream, pname, params);} GLEEPFNGLGETVIDEOCAPTURESTREAMIVNVPROC GLeeFuncPtr_glGetVideoCaptureStreamivNV=GLee_Lazy_glGetVideoCaptureStreamivNV; #endif #ifndef GLEE_C_DEFINED_glGetVideoCaptureStreamfvNV #define GLEE_C_DEFINED_glGetVideoCaptureStreamfvNV void __stdcall GLee_Lazy_glGetVideoCaptureStreamfvNV(GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetVideoCaptureStreamfvNV(video_capture_slot, stream, pname, params);} GLEEPFNGLGETVIDEOCAPTURESTREAMFVNVPROC GLeeFuncPtr_glGetVideoCaptureStreamfvNV=GLee_Lazy_glGetVideoCaptureStreamfvNV; #endif #ifndef GLEE_C_DEFINED_glGetVideoCaptureStreamdvNV #define GLEE_C_DEFINED_glGetVideoCaptureStreamdvNV void __stdcall GLee_Lazy_glGetVideoCaptureStreamdvNV(GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble * params) {if (GLeeInit()) glGetVideoCaptureStreamdvNV(video_capture_slot, stream, pname, params);} GLEEPFNGLGETVIDEOCAPTURESTREAMDVNVPROC GLeeFuncPtr_glGetVideoCaptureStreamdvNV=GLee_Lazy_glGetVideoCaptureStreamdvNV; #endif #ifndef GLEE_C_DEFINED_glVideoCaptureNV #define GLEE_C_DEFINED_glVideoCaptureNV GLenum __stdcall GLee_Lazy_glVideoCaptureNV(GLuint video_capture_slot, GLuint * sequence_num, GLuint64EXT * capture_time) {if (GLeeInit()) return glVideoCaptureNV(video_capture_slot, sequence_num, capture_time); return (GLenum)0;} GLEEPFNGLVIDEOCAPTURENVPROC GLeeFuncPtr_glVideoCaptureNV=GLee_Lazy_glVideoCaptureNV; #endif #ifndef GLEE_C_DEFINED_glVideoCaptureStreamParameterivNV #define GLEE_C_DEFINED_glVideoCaptureStreamParameterivNV void __stdcall GLee_Lazy_glVideoCaptureStreamParameterivNV(GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint * params) {if (GLeeInit()) glVideoCaptureStreamParameterivNV(video_capture_slot, stream, pname, params);} GLEEPFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC GLeeFuncPtr_glVideoCaptureStreamParameterivNV=GLee_Lazy_glVideoCaptureStreamParameterivNV; #endif #ifndef GLEE_C_DEFINED_glVideoCaptureStreamParameterfvNV #define GLEE_C_DEFINED_glVideoCaptureStreamParameterfvNV void __stdcall GLee_Lazy_glVideoCaptureStreamParameterfvNV(GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat * params) {if (GLeeInit()) glVideoCaptureStreamParameterfvNV(video_capture_slot, stream, pname, params);} GLEEPFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC GLeeFuncPtr_glVideoCaptureStreamParameterfvNV=GLee_Lazy_glVideoCaptureStreamParameterfvNV; #endif #ifndef GLEE_C_DEFINED_glVideoCaptureStreamParameterdvNV #define GLEE_C_DEFINED_glVideoCaptureStreamParameterdvNV void __stdcall GLee_Lazy_glVideoCaptureStreamParameterdvNV(GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble * params) {if (GLeeInit()) glVideoCaptureStreamParameterdvNV(video_capture_slot, stream, pname, params);} GLEEPFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC GLeeFuncPtr_glVideoCaptureStreamParameterdvNV=GLee_Lazy_glVideoCaptureStreamParameterdvNV; #endif #endif /* GL_NV_copy_image */ #ifdef __GLEE_GL_NV_copy_image #ifndef GLEE_C_DEFINED_glCopyImageSubDataNV #define GLEE_C_DEFINED_glCopyImageSubDataNV void __stdcall GLee_Lazy_glCopyImageSubDataNV(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth) {if (GLeeInit()) glCopyImageSubDataNV(srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, width, height, depth);} GLEEPFNGLCOPYIMAGESUBDATANVPROC GLeeFuncPtr_glCopyImageSubDataNV=GLee_Lazy_glCopyImageSubDataNV; #endif #endif /* GL_EXT_separate_shader_objects */ #ifdef __GLEE_GL_EXT_separate_shader_objects #ifndef GLEE_C_DEFINED_glUseShaderProgramEXT #define GLEE_C_DEFINED_glUseShaderProgramEXT void __stdcall GLee_Lazy_glUseShaderProgramEXT(GLenum type, GLuint program) {if (GLeeInit()) glUseShaderProgramEXT(type, program);} GLEEPFNGLUSESHADERPROGRAMEXTPROC GLeeFuncPtr_glUseShaderProgramEXT=GLee_Lazy_glUseShaderProgramEXT; #endif #ifndef GLEE_C_DEFINED_glActiveProgramEXT #define GLEE_C_DEFINED_glActiveProgramEXT void __stdcall GLee_Lazy_glActiveProgramEXT(GLuint program) {if (GLeeInit()) glActiveProgramEXT(program);} GLEEPFNGLACTIVEPROGRAMEXTPROC GLeeFuncPtr_glActiveProgramEXT=GLee_Lazy_glActiveProgramEXT; #endif #ifndef GLEE_C_DEFINED_glCreateShaderProgramEXT #define GLEE_C_DEFINED_glCreateShaderProgramEXT GLuint __stdcall GLee_Lazy_glCreateShaderProgramEXT(GLenum type, const GLchar * string) {if (GLeeInit()) return glCreateShaderProgramEXT(type, string); return (GLuint)0;} GLEEPFNGLCREATESHADERPROGRAMEXTPROC GLeeFuncPtr_glCreateShaderProgramEXT=GLee_Lazy_glCreateShaderProgramEXT; #endif #endif /* GL_NV_parameter_buffer_object2 */ #ifdef __GLEE_GL_NV_parameter_buffer_object2 #endif /* GL_NV_shader_buffer_load */ #ifdef __GLEE_GL_NV_shader_buffer_load #ifndef GLEE_C_DEFINED_glMakeBufferResidentNV #define GLEE_C_DEFINED_glMakeBufferResidentNV void __stdcall GLee_Lazy_glMakeBufferResidentNV(GLenum target, GLenum access) {if (GLeeInit()) glMakeBufferResidentNV(target, access);} GLEEPFNGLMAKEBUFFERRESIDENTNVPROC GLeeFuncPtr_glMakeBufferResidentNV=GLee_Lazy_glMakeBufferResidentNV; #endif #ifndef GLEE_C_DEFINED_glMakeBufferNonResidentNV #define GLEE_C_DEFINED_glMakeBufferNonResidentNV void __stdcall GLee_Lazy_glMakeBufferNonResidentNV(GLenum target) {if (GLeeInit()) glMakeBufferNonResidentNV(target);} GLEEPFNGLMAKEBUFFERNONRESIDENTNVPROC GLeeFuncPtr_glMakeBufferNonResidentNV=GLee_Lazy_glMakeBufferNonResidentNV; #endif #ifndef GLEE_C_DEFINED_glIsBufferResidentNV #define GLEE_C_DEFINED_glIsBufferResidentNV GLboolean __stdcall GLee_Lazy_glIsBufferResidentNV(GLenum target) {if (GLeeInit()) return glIsBufferResidentNV(target); return (GLboolean)0;} GLEEPFNGLISBUFFERRESIDENTNVPROC GLeeFuncPtr_glIsBufferResidentNV=GLee_Lazy_glIsBufferResidentNV; #endif #ifndef GLEE_C_DEFINED_glMakeNamedBufferResidentNV #define GLEE_C_DEFINED_glMakeNamedBufferResidentNV void __stdcall GLee_Lazy_glMakeNamedBufferResidentNV(GLuint buffer, GLenum access) {if (GLeeInit()) glMakeNamedBufferResidentNV(buffer, access);} GLEEPFNGLMAKENAMEDBUFFERRESIDENTNVPROC GLeeFuncPtr_glMakeNamedBufferResidentNV=GLee_Lazy_glMakeNamedBufferResidentNV; #endif #ifndef GLEE_C_DEFINED_glMakeNamedBufferNonResidentNV #define GLEE_C_DEFINED_glMakeNamedBufferNonResidentNV void __stdcall GLee_Lazy_glMakeNamedBufferNonResidentNV(GLuint buffer) {if (GLeeInit()) glMakeNamedBufferNonResidentNV(buffer);} GLEEPFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC GLeeFuncPtr_glMakeNamedBufferNonResidentNV=GLee_Lazy_glMakeNamedBufferNonResidentNV; #endif #ifndef GLEE_C_DEFINED_glIsNamedBufferResidentNV #define GLEE_C_DEFINED_glIsNamedBufferResidentNV GLboolean __stdcall GLee_Lazy_glIsNamedBufferResidentNV(GLuint buffer) {if (GLeeInit()) return glIsNamedBufferResidentNV(buffer); return (GLboolean)0;} GLEEPFNGLISNAMEDBUFFERRESIDENTNVPROC GLeeFuncPtr_glIsNamedBufferResidentNV=GLee_Lazy_glIsNamedBufferResidentNV; #endif #ifndef GLEE_C_DEFINED_glGetBufferParameterui64vNV #define GLEE_C_DEFINED_glGetBufferParameterui64vNV void __stdcall GLee_Lazy_glGetBufferParameterui64vNV(GLenum target, GLenum pname, GLuint64EXT * params) {if (GLeeInit()) glGetBufferParameterui64vNV(target, pname, params);} GLEEPFNGLGETBUFFERPARAMETERUI64VNVPROC GLeeFuncPtr_glGetBufferParameterui64vNV=GLee_Lazy_glGetBufferParameterui64vNV; #endif #ifndef GLEE_C_DEFINED_glGetNamedBufferParameterui64vNV #define GLEE_C_DEFINED_glGetNamedBufferParameterui64vNV void __stdcall GLee_Lazy_glGetNamedBufferParameterui64vNV(GLuint buffer, GLenum pname, GLuint64EXT * params) {if (GLeeInit()) glGetNamedBufferParameterui64vNV(buffer, pname, params);} GLEEPFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC GLeeFuncPtr_glGetNamedBufferParameterui64vNV=GLee_Lazy_glGetNamedBufferParameterui64vNV; #endif #ifndef GLEE_C_DEFINED_glGetIntegerui64vNV #define GLEE_C_DEFINED_glGetIntegerui64vNV void __stdcall GLee_Lazy_glGetIntegerui64vNV(GLenum value, GLuint64EXT * result) {if (GLeeInit()) glGetIntegerui64vNV(value, result);} GLEEPFNGLGETINTEGERUI64VNVPROC GLeeFuncPtr_glGetIntegerui64vNV=GLee_Lazy_glGetIntegerui64vNV; #endif #ifndef GLEE_C_DEFINED_glUniformui64NV #define GLEE_C_DEFINED_glUniformui64NV void __stdcall GLee_Lazy_glUniformui64NV(GLint location, GLuint64EXT value) {if (GLeeInit()) glUniformui64NV(location, value);} GLEEPFNGLUNIFORMUI64NVPROC GLeeFuncPtr_glUniformui64NV=GLee_Lazy_glUniformui64NV; #endif #ifndef GLEE_C_DEFINED_glUniformui64vNV #define GLEE_C_DEFINED_glUniformui64vNV void __stdcall GLee_Lazy_glUniformui64vNV(GLint location, GLsizei count, const GLuint64EXT * value) {if (GLeeInit()) glUniformui64vNV(location, count, value);} GLEEPFNGLUNIFORMUI64VNVPROC GLeeFuncPtr_glUniformui64vNV=GLee_Lazy_glUniformui64vNV; #endif #ifndef GLEE_C_DEFINED_glGetUniformui64vNV #define GLEE_C_DEFINED_glGetUniformui64vNV void __stdcall GLee_Lazy_glGetUniformui64vNV(GLuint program, GLint location, GLuint64EXT * params) {if (GLeeInit()) glGetUniformui64vNV(program, location, params);} GLEEPFNGLGETUNIFORMUI64VNVPROC GLeeFuncPtr_glGetUniformui64vNV=GLee_Lazy_glGetUniformui64vNV; #endif #ifndef GLEE_C_DEFINED_glProgramUniformui64NV #define GLEE_C_DEFINED_glProgramUniformui64NV void __stdcall GLee_Lazy_glProgramUniformui64NV(GLuint program, GLint location, GLuint64EXT value) {if (GLeeInit()) glProgramUniformui64NV(program, location, value);} GLEEPFNGLPROGRAMUNIFORMUI64NVPROC GLeeFuncPtr_glProgramUniformui64NV=GLee_Lazy_glProgramUniformui64NV; #endif #ifndef GLEE_C_DEFINED_glProgramUniformui64vNV #define GLEE_C_DEFINED_glProgramUniformui64vNV void __stdcall GLee_Lazy_glProgramUniformui64vNV(GLuint program, GLint location, GLsizei count, const GLuint64EXT * value) {if (GLeeInit()) glProgramUniformui64vNV(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORMUI64VNVPROC GLeeFuncPtr_glProgramUniformui64vNV=GLee_Lazy_glProgramUniformui64vNV; #endif #endif /* GL_NV_vertex_buffer_unified_memory */ #ifdef __GLEE_GL_NV_vertex_buffer_unified_memory #ifndef GLEE_C_DEFINED_glBufferAddressRangeNV #define GLEE_C_DEFINED_glBufferAddressRangeNV void __stdcall GLee_Lazy_glBufferAddressRangeNV(GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length) {if (GLeeInit()) glBufferAddressRangeNV(pname, index, address, length);} GLEEPFNGLBUFFERADDRESSRANGENVPROC GLeeFuncPtr_glBufferAddressRangeNV=GLee_Lazy_glBufferAddressRangeNV; #endif #ifndef GLEE_C_DEFINED_glVertexFormatNV #define GLEE_C_DEFINED_glVertexFormatNV void __stdcall GLee_Lazy_glVertexFormatNV(GLint size, GLenum type, GLsizei stride) {if (GLeeInit()) glVertexFormatNV(size, type, stride);} GLEEPFNGLVERTEXFORMATNVPROC GLeeFuncPtr_glVertexFormatNV=GLee_Lazy_glVertexFormatNV; #endif #ifndef GLEE_C_DEFINED_glNormalFormatNV #define GLEE_C_DEFINED_glNormalFormatNV void __stdcall GLee_Lazy_glNormalFormatNV(GLenum type, GLsizei stride) {if (GLeeInit()) glNormalFormatNV(type, stride);} GLEEPFNGLNORMALFORMATNVPROC GLeeFuncPtr_glNormalFormatNV=GLee_Lazy_glNormalFormatNV; #endif #ifndef GLEE_C_DEFINED_glColorFormatNV #define GLEE_C_DEFINED_glColorFormatNV void __stdcall GLee_Lazy_glColorFormatNV(GLint size, GLenum type, GLsizei stride) {if (GLeeInit()) glColorFormatNV(size, type, stride);} GLEEPFNGLCOLORFORMATNVPROC GLeeFuncPtr_glColorFormatNV=GLee_Lazy_glColorFormatNV; #endif #ifndef GLEE_C_DEFINED_glIndexFormatNV #define GLEE_C_DEFINED_glIndexFormatNV void __stdcall GLee_Lazy_glIndexFormatNV(GLenum type, GLsizei stride) {if (GLeeInit()) glIndexFormatNV(type, stride);} GLEEPFNGLINDEXFORMATNVPROC GLeeFuncPtr_glIndexFormatNV=GLee_Lazy_glIndexFormatNV; #endif #ifndef GLEE_C_DEFINED_glTexCoordFormatNV #define GLEE_C_DEFINED_glTexCoordFormatNV void __stdcall GLee_Lazy_glTexCoordFormatNV(GLint size, GLenum type, GLsizei stride) {if (GLeeInit()) glTexCoordFormatNV(size, type, stride);} GLEEPFNGLTEXCOORDFORMATNVPROC GLeeFuncPtr_glTexCoordFormatNV=GLee_Lazy_glTexCoordFormatNV; #endif #ifndef GLEE_C_DEFINED_glEdgeFlagFormatNV #define GLEE_C_DEFINED_glEdgeFlagFormatNV void __stdcall GLee_Lazy_glEdgeFlagFormatNV(GLsizei stride) {if (GLeeInit()) glEdgeFlagFormatNV(stride);} GLEEPFNGLEDGEFLAGFORMATNVPROC GLeeFuncPtr_glEdgeFlagFormatNV=GLee_Lazy_glEdgeFlagFormatNV; #endif #ifndef GLEE_C_DEFINED_glSecondaryColorFormatNV #define GLEE_C_DEFINED_glSecondaryColorFormatNV void __stdcall GLee_Lazy_glSecondaryColorFormatNV(GLint size, GLenum type, GLsizei stride) {if (GLeeInit()) glSecondaryColorFormatNV(size, type, stride);} GLEEPFNGLSECONDARYCOLORFORMATNVPROC GLeeFuncPtr_glSecondaryColorFormatNV=GLee_Lazy_glSecondaryColorFormatNV; #endif #ifndef GLEE_C_DEFINED_glFogCoordFormatNV #define GLEE_C_DEFINED_glFogCoordFormatNV void __stdcall GLee_Lazy_glFogCoordFormatNV(GLenum type, GLsizei stride) {if (GLeeInit()) glFogCoordFormatNV(type, stride);} GLEEPFNGLFOGCOORDFORMATNVPROC GLeeFuncPtr_glFogCoordFormatNV=GLee_Lazy_glFogCoordFormatNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribFormatNV #define GLEE_C_DEFINED_glVertexAttribFormatNV void __stdcall GLee_Lazy_glVertexAttribFormatNV(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride) {if (GLeeInit()) glVertexAttribFormatNV(index, size, type, normalized, stride);} GLEEPFNGLVERTEXATTRIBFORMATNVPROC GLeeFuncPtr_glVertexAttribFormatNV=GLee_Lazy_glVertexAttribFormatNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribIFormatNV #define GLEE_C_DEFINED_glVertexAttribIFormatNV void __stdcall GLee_Lazy_glVertexAttribIFormatNV(GLuint index, GLint size, GLenum type, GLsizei stride) {if (GLeeInit()) glVertexAttribIFormatNV(index, size, type, stride);} GLEEPFNGLVERTEXATTRIBIFORMATNVPROC GLeeFuncPtr_glVertexAttribIFormatNV=GLee_Lazy_glVertexAttribIFormatNV; #endif #ifndef GLEE_C_DEFINED_glGetIntegerui64i_vNV #define GLEE_C_DEFINED_glGetIntegerui64i_vNV void __stdcall GLee_Lazy_glGetIntegerui64i_vNV(GLenum value, GLuint index, GLuint64EXT * result) {if (GLeeInit()) glGetIntegerui64i_vNV(value, index, result);} GLEEPFNGLGETINTEGERUI64I_VNVPROC GLeeFuncPtr_glGetIntegerui64i_vNV=GLee_Lazy_glGetIntegerui64i_vNV; #endif #endif /* GL_NV_texture_barrier */ #ifdef __GLEE_GL_NV_texture_barrier #ifndef GLEE_C_DEFINED_glTextureBarrierNV #define GLEE_C_DEFINED_glTextureBarrierNV void __stdcall GLee_Lazy_glTextureBarrierNV(void) {if (GLeeInit()) glTextureBarrierNV();} GLEEPFNGLTEXTUREBARRIERNVPROC GLeeFuncPtr_glTextureBarrierNV=GLee_Lazy_glTextureBarrierNV; #endif #endif /* GL_AMD_shader_stencil_export */ #ifdef __GLEE_GL_AMD_shader_stencil_export #endif /* GL_AMD_seamless_cubemap_per_texture */ #ifdef __GLEE_GL_AMD_seamless_cubemap_per_texture #endif /* GL_AMD_conservative_depth */ #ifdef __GLEE_GL_AMD_conservative_depth #endif /* GL_EXT_shader_image_load_store */ #ifdef __GLEE_GL_EXT_shader_image_load_store #ifndef GLEE_C_DEFINED_glBindImageTextureEXT #define GLEE_C_DEFINED_glBindImageTextureEXT void __stdcall GLee_Lazy_glBindImageTextureEXT(GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format) {if (GLeeInit()) glBindImageTextureEXT(index, texture, level, layered, layer, access, format);} GLEEPFNGLBINDIMAGETEXTUREEXTPROC GLeeFuncPtr_glBindImageTextureEXT=GLee_Lazy_glBindImageTextureEXT; #endif #ifndef GLEE_C_DEFINED_glMemoryBarrierEXT #define GLEE_C_DEFINED_glMemoryBarrierEXT void __stdcall GLee_Lazy_glMemoryBarrierEXT(GLbitfield barriers) {if (GLeeInit()) glMemoryBarrierEXT(barriers);} GLEEPFNGLMEMORYBARRIEREXTPROC GLeeFuncPtr_glMemoryBarrierEXT=GLee_Lazy_glMemoryBarrierEXT; #endif #endif /* GL_EXT_vertex_attrib_64bit */ #ifdef __GLEE_GL_EXT_vertex_attrib_64bit #ifndef GLEE_C_DEFINED_glVertexAttribL1dEXT #define GLEE_C_DEFINED_glVertexAttribL1dEXT void __stdcall GLee_Lazy_glVertexAttribL1dEXT(GLuint index, GLdouble x) {if (GLeeInit()) glVertexAttribL1dEXT(index, x);} GLEEPFNGLVERTEXATTRIBL1DEXTPROC GLeeFuncPtr_glVertexAttribL1dEXT=GLee_Lazy_glVertexAttribL1dEXT; #endif #ifndef GLEE_C_DEFINED_glVertexAttribL2dEXT #define GLEE_C_DEFINED_glVertexAttribL2dEXT void __stdcall GLee_Lazy_glVertexAttribL2dEXT(GLuint index, GLdouble x, GLdouble y) {if (GLeeInit()) glVertexAttribL2dEXT(index, x, y);} GLEEPFNGLVERTEXATTRIBL2DEXTPROC GLeeFuncPtr_glVertexAttribL2dEXT=GLee_Lazy_glVertexAttribL2dEXT; #endif #ifndef GLEE_C_DEFINED_glVertexAttribL3dEXT #define GLEE_C_DEFINED_glVertexAttribL3dEXT void __stdcall GLee_Lazy_glVertexAttribL3dEXT(GLuint index, GLdouble x, GLdouble y, GLdouble z) {if (GLeeInit()) glVertexAttribL3dEXT(index, x, y, z);} GLEEPFNGLVERTEXATTRIBL3DEXTPROC GLeeFuncPtr_glVertexAttribL3dEXT=GLee_Lazy_glVertexAttribL3dEXT; #endif #ifndef GLEE_C_DEFINED_glVertexAttribL4dEXT #define GLEE_C_DEFINED_glVertexAttribL4dEXT void __stdcall GLee_Lazy_glVertexAttribL4dEXT(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) {if (GLeeInit()) glVertexAttribL4dEXT(index, x, y, z, w);} GLEEPFNGLVERTEXATTRIBL4DEXTPROC GLeeFuncPtr_glVertexAttribL4dEXT=GLee_Lazy_glVertexAttribL4dEXT; #endif #ifndef GLEE_C_DEFINED_glVertexAttribL1dvEXT #define GLEE_C_DEFINED_glVertexAttribL1dvEXT void __stdcall GLee_Lazy_glVertexAttribL1dvEXT(GLuint index, const GLdouble * v) {if (GLeeInit()) glVertexAttribL1dvEXT(index, v);} GLEEPFNGLVERTEXATTRIBL1DVEXTPROC GLeeFuncPtr_glVertexAttribL1dvEXT=GLee_Lazy_glVertexAttribL1dvEXT; #endif #ifndef GLEE_C_DEFINED_glVertexAttribL2dvEXT #define GLEE_C_DEFINED_glVertexAttribL2dvEXT void __stdcall GLee_Lazy_glVertexAttribL2dvEXT(GLuint index, const GLdouble * v) {if (GLeeInit()) glVertexAttribL2dvEXT(index, v);} GLEEPFNGLVERTEXATTRIBL2DVEXTPROC GLeeFuncPtr_glVertexAttribL2dvEXT=GLee_Lazy_glVertexAttribL2dvEXT; #endif #ifndef GLEE_C_DEFINED_glVertexAttribL3dvEXT #define GLEE_C_DEFINED_glVertexAttribL3dvEXT void __stdcall GLee_Lazy_glVertexAttribL3dvEXT(GLuint index, const GLdouble * v) {if (GLeeInit()) glVertexAttribL3dvEXT(index, v);} GLEEPFNGLVERTEXATTRIBL3DVEXTPROC GLeeFuncPtr_glVertexAttribL3dvEXT=GLee_Lazy_glVertexAttribL3dvEXT; #endif #ifndef GLEE_C_DEFINED_glVertexAttribL4dvEXT #define GLEE_C_DEFINED_glVertexAttribL4dvEXT void __stdcall GLee_Lazy_glVertexAttribL4dvEXT(GLuint index, const GLdouble * v) {if (GLeeInit()) glVertexAttribL4dvEXT(index, v);} GLEEPFNGLVERTEXATTRIBL4DVEXTPROC GLeeFuncPtr_glVertexAttribL4dvEXT=GLee_Lazy_glVertexAttribL4dvEXT; #endif #ifndef GLEE_C_DEFINED_glVertexAttribLPointerEXT #define GLEE_C_DEFINED_glVertexAttribLPointerEXT void __stdcall GLee_Lazy_glVertexAttribLPointerEXT(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer) {if (GLeeInit()) glVertexAttribLPointerEXT(index, size, type, stride, pointer);} GLEEPFNGLVERTEXATTRIBLPOINTEREXTPROC GLeeFuncPtr_glVertexAttribLPointerEXT=GLee_Lazy_glVertexAttribLPointerEXT; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribLdvEXT #define GLEE_C_DEFINED_glGetVertexAttribLdvEXT void __stdcall GLee_Lazy_glGetVertexAttribLdvEXT(GLuint index, GLenum pname, GLdouble * params) {if (GLeeInit()) glGetVertexAttribLdvEXT(index, pname, params);} GLEEPFNGLGETVERTEXATTRIBLDVEXTPROC GLeeFuncPtr_glGetVertexAttribLdvEXT=GLee_Lazy_glGetVertexAttribLdvEXT; #endif #ifndef GLEE_C_DEFINED_glVertexArrayVertexAttribLOffsetEXT #define GLEE_C_DEFINED_glVertexArrayVertexAttribLOffsetEXT void __stdcall GLee_Lazy_glVertexArrayVertexAttribLOffsetEXT(GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset) {if (GLeeInit()) glVertexArrayVertexAttribLOffsetEXT(vaobj, buffer, index, size, type, stride, offset);} GLEEPFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC GLeeFuncPtr_glVertexArrayVertexAttribLOffsetEXT=GLee_Lazy_glVertexArrayVertexAttribLOffsetEXT; #endif #endif /* GL_NV_gpu_program5 */ #ifdef __GLEE_GL_NV_gpu_program5 #ifndef GLEE_C_DEFINED_glProgramSubroutineParametersuivNV #define GLEE_C_DEFINED_glProgramSubroutineParametersuivNV void __stdcall GLee_Lazy_glProgramSubroutineParametersuivNV(GLenum target, GLsizei count, const GLuint * params) {if (GLeeInit()) glProgramSubroutineParametersuivNV(target, count, params);} GLEEPFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC GLeeFuncPtr_glProgramSubroutineParametersuivNV=GLee_Lazy_glProgramSubroutineParametersuivNV; #endif #ifndef GLEE_C_DEFINED_glGetProgramSubroutineParameteruivNV #define GLEE_C_DEFINED_glGetProgramSubroutineParameteruivNV void __stdcall GLee_Lazy_glGetProgramSubroutineParameteruivNV(GLenum target, GLuint index, GLuint * param) {if (GLeeInit()) glGetProgramSubroutineParameteruivNV(target, index, param);} GLEEPFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC GLeeFuncPtr_glGetProgramSubroutineParameteruivNV=GLee_Lazy_glGetProgramSubroutineParameteruivNV; #endif #endif /* GL_NV_gpu_shader5 */ #ifdef __GLEE_GL_NV_gpu_shader5 #ifndef GLEE_C_DEFINED_glUniform1i64NV #define GLEE_C_DEFINED_glUniform1i64NV void __stdcall GLee_Lazy_glUniform1i64NV(GLint location, GLint64EXT x) {if (GLeeInit()) glUniform1i64NV(location, x);} GLEEPFNGLUNIFORM1I64NVPROC GLeeFuncPtr_glUniform1i64NV=GLee_Lazy_glUniform1i64NV; #endif #ifndef GLEE_C_DEFINED_glUniform2i64NV #define GLEE_C_DEFINED_glUniform2i64NV void __stdcall GLee_Lazy_glUniform2i64NV(GLint location, GLint64EXT x, GLint64EXT y) {if (GLeeInit()) glUniform2i64NV(location, x, y);} GLEEPFNGLUNIFORM2I64NVPROC GLeeFuncPtr_glUniform2i64NV=GLee_Lazy_glUniform2i64NV; #endif #ifndef GLEE_C_DEFINED_glUniform3i64NV #define GLEE_C_DEFINED_glUniform3i64NV void __stdcall GLee_Lazy_glUniform3i64NV(GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z) {if (GLeeInit()) glUniform3i64NV(location, x, y, z);} GLEEPFNGLUNIFORM3I64NVPROC GLeeFuncPtr_glUniform3i64NV=GLee_Lazy_glUniform3i64NV; #endif #ifndef GLEE_C_DEFINED_glUniform4i64NV #define GLEE_C_DEFINED_glUniform4i64NV void __stdcall GLee_Lazy_glUniform4i64NV(GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w) {if (GLeeInit()) glUniform4i64NV(location, x, y, z, w);} GLEEPFNGLUNIFORM4I64NVPROC GLeeFuncPtr_glUniform4i64NV=GLee_Lazy_glUniform4i64NV; #endif #ifndef GLEE_C_DEFINED_glUniform1i64vNV #define GLEE_C_DEFINED_glUniform1i64vNV void __stdcall GLee_Lazy_glUniform1i64vNV(GLint location, GLsizei count, const GLint64EXT * value) {if (GLeeInit()) glUniform1i64vNV(location, count, value);} GLEEPFNGLUNIFORM1I64VNVPROC GLeeFuncPtr_glUniform1i64vNV=GLee_Lazy_glUniform1i64vNV; #endif #ifndef GLEE_C_DEFINED_glUniform2i64vNV #define GLEE_C_DEFINED_glUniform2i64vNV void __stdcall GLee_Lazy_glUniform2i64vNV(GLint location, GLsizei count, const GLint64EXT * value) {if (GLeeInit()) glUniform2i64vNV(location, count, value);} GLEEPFNGLUNIFORM2I64VNVPROC GLeeFuncPtr_glUniform2i64vNV=GLee_Lazy_glUniform2i64vNV; #endif #ifndef GLEE_C_DEFINED_glUniform3i64vNV #define GLEE_C_DEFINED_glUniform3i64vNV void __stdcall GLee_Lazy_glUniform3i64vNV(GLint location, GLsizei count, const GLint64EXT * value) {if (GLeeInit()) glUniform3i64vNV(location, count, value);} GLEEPFNGLUNIFORM3I64VNVPROC GLeeFuncPtr_glUniform3i64vNV=GLee_Lazy_glUniform3i64vNV; #endif #ifndef GLEE_C_DEFINED_glUniform4i64vNV #define GLEE_C_DEFINED_glUniform4i64vNV void __stdcall GLee_Lazy_glUniform4i64vNV(GLint location, GLsizei count, const GLint64EXT * value) {if (GLeeInit()) glUniform4i64vNV(location, count, value);} GLEEPFNGLUNIFORM4I64VNVPROC GLeeFuncPtr_glUniform4i64vNV=GLee_Lazy_glUniform4i64vNV; #endif #ifndef GLEE_C_DEFINED_glUniform1ui64NV #define GLEE_C_DEFINED_glUniform1ui64NV void __stdcall GLee_Lazy_glUniform1ui64NV(GLint location, GLuint64EXT x) {if (GLeeInit()) glUniform1ui64NV(location, x);} GLEEPFNGLUNIFORM1UI64NVPROC GLeeFuncPtr_glUniform1ui64NV=GLee_Lazy_glUniform1ui64NV; #endif #ifndef GLEE_C_DEFINED_glUniform2ui64NV #define GLEE_C_DEFINED_glUniform2ui64NV void __stdcall GLee_Lazy_glUniform2ui64NV(GLint location, GLuint64EXT x, GLuint64EXT y) {if (GLeeInit()) glUniform2ui64NV(location, x, y);} GLEEPFNGLUNIFORM2UI64NVPROC GLeeFuncPtr_glUniform2ui64NV=GLee_Lazy_glUniform2ui64NV; #endif #ifndef GLEE_C_DEFINED_glUniform3ui64NV #define GLEE_C_DEFINED_glUniform3ui64NV void __stdcall GLee_Lazy_glUniform3ui64NV(GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z) {if (GLeeInit()) glUniform3ui64NV(location, x, y, z);} GLEEPFNGLUNIFORM3UI64NVPROC GLeeFuncPtr_glUniform3ui64NV=GLee_Lazy_glUniform3ui64NV; #endif #ifndef GLEE_C_DEFINED_glUniform4ui64NV #define GLEE_C_DEFINED_glUniform4ui64NV void __stdcall GLee_Lazy_glUniform4ui64NV(GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w) {if (GLeeInit()) glUniform4ui64NV(location, x, y, z, w);} GLEEPFNGLUNIFORM4UI64NVPROC GLeeFuncPtr_glUniform4ui64NV=GLee_Lazy_glUniform4ui64NV; #endif #ifndef GLEE_C_DEFINED_glUniform1ui64vNV #define GLEE_C_DEFINED_glUniform1ui64vNV void __stdcall GLee_Lazy_glUniform1ui64vNV(GLint location, GLsizei count, const GLuint64EXT * value) {if (GLeeInit()) glUniform1ui64vNV(location, count, value);} GLEEPFNGLUNIFORM1UI64VNVPROC GLeeFuncPtr_glUniform1ui64vNV=GLee_Lazy_glUniform1ui64vNV; #endif #ifndef GLEE_C_DEFINED_glUniform2ui64vNV #define GLEE_C_DEFINED_glUniform2ui64vNV void __stdcall GLee_Lazy_glUniform2ui64vNV(GLint location, GLsizei count, const GLuint64EXT * value) {if (GLeeInit()) glUniform2ui64vNV(location, count, value);} GLEEPFNGLUNIFORM2UI64VNVPROC GLeeFuncPtr_glUniform2ui64vNV=GLee_Lazy_glUniform2ui64vNV; #endif #ifndef GLEE_C_DEFINED_glUniform3ui64vNV #define GLEE_C_DEFINED_glUniform3ui64vNV void __stdcall GLee_Lazy_glUniform3ui64vNV(GLint location, GLsizei count, const GLuint64EXT * value) {if (GLeeInit()) glUniform3ui64vNV(location, count, value);} GLEEPFNGLUNIFORM3UI64VNVPROC GLeeFuncPtr_glUniform3ui64vNV=GLee_Lazy_glUniform3ui64vNV; #endif #ifndef GLEE_C_DEFINED_glUniform4ui64vNV #define GLEE_C_DEFINED_glUniform4ui64vNV void __stdcall GLee_Lazy_glUniform4ui64vNV(GLint location, GLsizei count, const GLuint64EXT * value) {if (GLeeInit()) glUniform4ui64vNV(location, count, value);} GLEEPFNGLUNIFORM4UI64VNVPROC GLeeFuncPtr_glUniform4ui64vNV=GLee_Lazy_glUniform4ui64vNV; #endif #ifndef GLEE_C_DEFINED_glGetUniformi64vNV #define GLEE_C_DEFINED_glGetUniformi64vNV void __stdcall GLee_Lazy_glGetUniformi64vNV(GLuint program, GLint location, GLint64EXT * params) {if (GLeeInit()) glGetUniformi64vNV(program, location, params);} GLEEPFNGLGETUNIFORMI64VNVPROC GLeeFuncPtr_glGetUniformi64vNV=GLee_Lazy_glGetUniformi64vNV; #endif #ifndef GLEE_C_DEFINED_glProgramUniform1i64NV #define GLEE_C_DEFINED_glProgramUniform1i64NV void __stdcall GLee_Lazy_glProgramUniform1i64NV(GLuint program, GLint location, GLint64EXT x) {if (GLeeInit()) glProgramUniform1i64NV(program, location, x);} GLEEPFNGLPROGRAMUNIFORM1I64NVPROC GLeeFuncPtr_glProgramUniform1i64NV=GLee_Lazy_glProgramUniform1i64NV; #endif #ifndef GLEE_C_DEFINED_glProgramUniform2i64NV #define GLEE_C_DEFINED_glProgramUniform2i64NV void __stdcall GLee_Lazy_glProgramUniform2i64NV(GLuint program, GLint location, GLint64EXT x, GLint64EXT y) {if (GLeeInit()) glProgramUniform2i64NV(program, location, x, y);} GLEEPFNGLPROGRAMUNIFORM2I64NVPROC GLeeFuncPtr_glProgramUniform2i64NV=GLee_Lazy_glProgramUniform2i64NV; #endif #ifndef GLEE_C_DEFINED_glProgramUniform3i64NV #define GLEE_C_DEFINED_glProgramUniform3i64NV void __stdcall GLee_Lazy_glProgramUniform3i64NV(GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z) {if (GLeeInit()) glProgramUniform3i64NV(program, location, x, y, z);} GLEEPFNGLPROGRAMUNIFORM3I64NVPROC GLeeFuncPtr_glProgramUniform3i64NV=GLee_Lazy_glProgramUniform3i64NV; #endif #ifndef GLEE_C_DEFINED_glProgramUniform4i64NV #define GLEE_C_DEFINED_glProgramUniform4i64NV void __stdcall GLee_Lazy_glProgramUniform4i64NV(GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w) {if (GLeeInit()) glProgramUniform4i64NV(program, location, x, y, z, w);} GLEEPFNGLPROGRAMUNIFORM4I64NVPROC GLeeFuncPtr_glProgramUniform4i64NV=GLee_Lazy_glProgramUniform4i64NV; #endif #ifndef GLEE_C_DEFINED_glProgramUniform1i64vNV #define GLEE_C_DEFINED_glProgramUniform1i64vNV void __stdcall GLee_Lazy_glProgramUniform1i64vNV(GLuint program, GLint location, GLsizei count, const GLint64EXT * value) {if (GLeeInit()) glProgramUniform1i64vNV(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM1I64VNVPROC GLeeFuncPtr_glProgramUniform1i64vNV=GLee_Lazy_glProgramUniform1i64vNV; #endif #ifndef GLEE_C_DEFINED_glProgramUniform2i64vNV #define GLEE_C_DEFINED_glProgramUniform2i64vNV void __stdcall GLee_Lazy_glProgramUniform2i64vNV(GLuint program, GLint location, GLsizei count, const GLint64EXT * value) {if (GLeeInit()) glProgramUniform2i64vNV(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM2I64VNVPROC GLeeFuncPtr_glProgramUniform2i64vNV=GLee_Lazy_glProgramUniform2i64vNV; #endif #ifndef GLEE_C_DEFINED_glProgramUniform3i64vNV #define GLEE_C_DEFINED_glProgramUniform3i64vNV void __stdcall GLee_Lazy_glProgramUniform3i64vNV(GLuint program, GLint location, GLsizei count, const GLint64EXT * value) {if (GLeeInit()) glProgramUniform3i64vNV(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM3I64VNVPROC GLeeFuncPtr_glProgramUniform3i64vNV=GLee_Lazy_glProgramUniform3i64vNV; #endif #ifndef GLEE_C_DEFINED_glProgramUniform4i64vNV #define GLEE_C_DEFINED_glProgramUniform4i64vNV void __stdcall GLee_Lazy_glProgramUniform4i64vNV(GLuint program, GLint location, GLsizei count, const GLint64EXT * value) {if (GLeeInit()) glProgramUniform4i64vNV(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM4I64VNVPROC GLeeFuncPtr_glProgramUniform4i64vNV=GLee_Lazy_glProgramUniform4i64vNV; #endif #ifndef GLEE_C_DEFINED_glProgramUniform1ui64NV #define GLEE_C_DEFINED_glProgramUniform1ui64NV void __stdcall GLee_Lazy_glProgramUniform1ui64NV(GLuint program, GLint location, GLuint64EXT x) {if (GLeeInit()) glProgramUniform1ui64NV(program, location, x);} GLEEPFNGLPROGRAMUNIFORM1UI64NVPROC GLeeFuncPtr_glProgramUniform1ui64NV=GLee_Lazy_glProgramUniform1ui64NV; #endif #ifndef GLEE_C_DEFINED_glProgramUniform2ui64NV #define GLEE_C_DEFINED_glProgramUniform2ui64NV void __stdcall GLee_Lazy_glProgramUniform2ui64NV(GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y) {if (GLeeInit()) glProgramUniform2ui64NV(program, location, x, y);} GLEEPFNGLPROGRAMUNIFORM2UI64NVPROC GLeeFuncPtr_glProgramUniform2ui64NV=GLee_Lazy_glProgramUniform2ui64NV; #endif #ifndef GLEE_C_DEFINED_glProgramUniform3ui64NV #define GLEE_C_DEFINED_glProgramUniform3ui64NV void __stdcall GLee_Lazy_glProgramUniform3ui64NV(GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z) {if (GLeeInit()) glProgramUniform3ui64NV(program, location, x, y, z);} GLEEPFNGLPROGRAMUNIFORM3UI64NVPROC GLeeFuncPtr_glProgramUniform3ui64NV=GLee_Lazy_glProgramUniform3ui64NV; #endif #ifndef GLEE_C_DEFINED_glProgramUniform4ui64NV #define GLEE_C_DEFINED_glProgramUniform4ui64NV void __stdcall GLee_Lazy_glProgramUniform4ui64NV(GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w) {if (GLeeInit()) glProgramUniform4ui64NV(program, location, x, y, z, w);} GLEEPFNGLPROGRAMUNIFORM4UI64NVPROC GLeeFuncPtr_glProgramUniform4ui64NV=GLee_Lazy_glProgramUniform4ui64NV; #endif #ifndef GLEE_C_DEFINED_glProgramUniform1ui64vNV #define GLEE_C_DEFINED_glProgramUniform1ui64vNV void __stdcall GLee_Lazy_glProgramUniform1ui64vNV(GLuint program, GLint location, GLsizei count, const GLuint64EXT * value) {if (GLeeInit()) glProgramUniform1ui64vNV(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM1UI64VNVPROC GLeeFuncPtr_glProgramUniform1ui64vNV=GLee_Lazy_glProgramUniform1ui64vNV; #endif #ifndef GLEE_C_DEFINED_glProgramUniform2ui64vNV #define GLEE_C_DEFINED_glProgramUniform2ui64vNV void __stdcall GLee_Lazy_glProgramUniform2ui64vNV(GLuint program, GLint location, GLsizei count, const GLuint64EXT * value) {if (GLeeInit()) glProgramUniform2ui64vNV(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM2UI64VNVPROC GLeeFuncPtr_glProgramUniform2ui64vNV=GLee_Lazy_glProgramUniform2ui64vNV; #endif #ifndef GLEE_C_DEFINED_glProgramUniform3ui64vNV #define GLEE_C_DEFINED_glProgramUniform3ui64vNV void __stdcall GLee_Lazy_glProgramUniform3ui64vNV(GLuint program, GLint location, GLsizei count, const GLuint64EXT * value) {if (GLeeInit()) glProgramUniform3ui64vNV(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM3UI64VNVPROC GLeeFuncPtr_glProgramUniform3ui64vNV=GLee_Lazy_glProgramUniform3ui64vNV; #endif #ifndef GLEE_C_DEFINED_glProgramUniform4ui64vNV #define GLEE_C_DEFINED_glProgramUniform4ui64vNV void __stdcall GLee_Lazy_glProgramUniform4ui64vNV(GLuint program, GLint location, GLsizei count, const GLuint64EXT * value) {if (GLeeInit()) glProgramUniform4ui64vNV(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM4UI64VNVPROC GLeeFuncPtr_glProgramUniform4ui64vNV=GLee_Lazy_glProgramUniform4ui64vNV; #endif #endif /* GL_NV_shader_buffer_store */ #ifdef __GLEE_GL_NV_shader_buffer_store #endif /* GL_NV_tessellation_program5 */ #ifdef __GLEE_GL_NV_tessellation_program5 #endif /* GL_NV_vertex_attrib_integer_64bit */ #ifdef __GLEE_GL_NV_vertex_attrib_integer_64bit #ifndef GLEE_C_DEFINED_glVertexAttribL1i64NV #define GLEE_C_DEFINED_glVertexAttribL1i64NV void __stdcall GLee_Lazy_glVertexAttribL1i64NV(GLuint index, GLint64EXT x) {if (GLeeInit()) glVertexAttribL1i64NV(index, x);} GLEEPFNGLVERTEXATTRIBL1I64NVPROC GLeeFuncPtr_glVertexAttribL1i64NV=GLee_Lazy_glVertexAttribL1i64NV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribL2i64NV #define GLEE_C_DEFINED_glVertexAttribL2i64NV void __stdcall GLee_Lazy_glVertexAttribL2i64NV(GLuint index, GLint64EXT x, GLint64EXT y) {if (GLeeInit()) glVertexAttribL2i64NV(index, x, y);} GLEEPFNGLVERTEXATTRIBL2I64NVPROC GLeeFuncPtr_glVertexAttribL2i64NV=GLee_Lazy_glVertexAttribL2i64NV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribL3i64NV #define GLEE_C_DEFINED_glVertexAttribL3i64NV void __stdcall GLee_Lazy_glVertexAttribL3i64NV(GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z) {if (GLeeInit()) glVertexAttribL3i64NV(index, x, y, z);} GLEEPFNGLVERTEXATTRIBL3I64NVPROC GLeeFuncPtr_glVertexAttribL3i64NV=GLee_Lazy_glVertexAttribL3i64NV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribL4i64NV #define GLEE_C_DEFINED_glVertexAttribL4i64NV void __stdcall GLee_Lazy_glVertexAttribL4i64NV(GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w) {if (GLeeInit()) glVertexAttribL4i64NV(index, x, y, z, w);} GLEEPFNGLVERTEXATTRIBL4I64NVPROC GLeeFuncPtr_glVertexAttribL4i64NV=GLee_Lazy_glVertexAttribL4i64NV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribL1i64vNV #define GLEE_C_DEFINED_glVertexAttribL1i64vNV void __stdcall GLee_Lazy_glVertexAttribL1i64vNV(GLuint index, const GLint64EXT * v) {if (GLeeInit()) glVertexAttribL1i64vNV(index, v);} GLEEPFNGLVERTEXATTRIBL1I64VNVPROC GLeeFuncPtr_glVertexAttribL1i64vNV=GLee_Lazy_glVertexAttribL1i64vNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribL2i64vNV #define GLEE_C_DEFINED_glVertexAttribL2i64vNV void __stdcall GLee_Lazy_glVertexAttribL2i64vNV(GLuint index, const GLint64EXT * v) {if (GLeeInit()) glVertexAttribL2i64vNV(index, v);} GLEEPFNGLVERTEXATTRIBL2I64VNVPROC GLeeFuncPtr_glVertexAttribL2i64vNV=GLee_Lazy_glVertexAttribL2i64vNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribL3i64vNV #define GLEE_C_DEFINED_glVertexAttribL3i64vNV void __stdcall GLee_Lazy_glVertexAttribL3i64vNV(GLuint index, const GLint64EXT * v) {if (GLeeInit()) glVertexAttribL3i64vNV(index, v);} GLEEPFNGLVERTEXATTRIBL3I64VNVPROC GLeeFuncPtr_glVertexAttribL3i64vNV=GLee_Lazy_glVertexAttribL3i64vNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribL4i64vNV #define GLEE_C_DEFINED_glVertexAttribL4i64vNV void __stdcall GLee_Lazy_glVertexAttribL4i64vNV(GLuint index, const GLint64EXT * v) {if (GLeeInit()) glVertexAttribL4i64vNV(index, v);} GLEEPFNGLVERTEXATTRIBL4I64VNVPROC GLeeFuncPtr_glVertexAttribL4i64vNV=GLee_Lazy_glVertexAttribL4i64vNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribL1ui64NV #define GLEE_C_DEFINED_glVertexAttribL1ui64NV void __stdcall GLee_Lazy_glVertexAttribL1ui64NV(GLuint index, GLuint64EXT x) {if (GLeeInit()) glVertexAttribL1ui64NV(index, x);} GLEEPFNGLVERTEXATTRIBL1UI64NVPROC GLeeFuncPtr_glVertexAttribL1ui64NV=GLee_Lazy_glVertexAttribL1ui64NV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribL2ui64NV #define GLEE_C_DEFINED_glVertexAttribL2ui64NV void __stdcall GLee_Lazy_glVertexAttribL2ui64NV(GLuint index, GLuint64EXT x, GLuint64EXT y) {if (GLeeInit()) glVertexAttribL2ui64NV(index, x, y);} GLEEPFNGLVERTEXATTRIBL2UI64NVPROC GLeeFuncPtr_glVertexAttribL2ui64NV=GLee_Lazy_glVertexAttribL2ui64NV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribL3ui64NV #define GLEE_C_DEFINED_glVertexAttribL3ui64NV void __stdcall GLee_Lazy_glVertexAttribL3ui64NV(GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z) {if (GLeeInit()) glVertexAttribL3ui64NV(index, x, y, z);} GLEEPFNGLVERTEXATTRIBL3UI64NVPROC GLeeFuncPtr_glVertexAttribL3ui64NV=GLee_Lazy_glVertexAttribL3ui64NV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribL4ui64NV #define GLEE_C_DEFINED_glVertexAttribL4ui64NV void __stdcall GLee_Lazy_glVertexAttribL4ui64NV(GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w) {if (GLeeInit()) glVertexAttribL4ui64NV(index, x, y, z, w);} GLEEPFNGLVERTEXATTRIBL4UI64NVPROC GLeeFuncPtr_glVertexAttribL4ui64NV=GLee_Lazy_glVertexAttribL4ui64NV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribL1ui64vNV #define GLEE_C_DEFINED_glVertexAttribL1ui64vNV void __stdcall GLee_Lazy_glVertexAttribL1ui64vNV(GLuint index, const GLuint64EXT * v) {if (GLeeInit()) glVertexAttribL1ui64vNV(index, v);} GLEEPFNGLVERTEXATTRIBL1UI64VNVPROC GLeeFuncPtr_glVertexAttribL1ui64vNV=GLee_Lazy_glVertexAttribL1ui64vNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribL2ui64vNV #define GLEE_C_DEFINED_glVertexAttribL2ui64vNV void __stdcall GLee_Lazy_glVertexAttribL2ui64vNV(GLuint index, const GLuint64EXT * v) {if (GLeeInit()) glVertexAttribL2ui64vNV(index, v);} GLEEPFNGLVERTEXATTRIBL2UI64VNVPROC GLeeFuncPtr_glVertexAttribL2ui64vNV=GLee_Lazy_glVertexAttribL2ui64vNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribL3ui64vNV #define GLEE_C_DEFINED_glVertexAttribL3ui64vNV void __stdcall GLee_Lazy_glVertexAttribL3ui64vNV(GLuint index, const GLuint64EXT * v) {if (GLeeInit()) glVertexAttribL3ui64vNV(index, v);} GLEEPFNGLVERTEXATTRIBL3UI64VNVPROC GLeeFuncPtr_glVertexAttribL3ui64vNV=GLee_Lazy_glVertexAttribL3ui64vNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribL4ui64vNV #define GLEE_C_DEFINED_glVertexAttribL4ui64vNV void __stdcall GLee_Lazy_glVertexAttribL4ui64vNV(GLuint index, const GLuint64EXT * v) {if (GLeeInit()) glVertexAttribL4ui64vNV(index, v);} GLEEPFNGLVERTEXATTRIBL4UI64VNVPROC GLeeFuncPtr_glVertexAttribL4ui64vNV=GLee_Lazy_glVertexAttribL4ui64vNV; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribLi64vNV #define GLEE_C_DEFINED_glGetVertexAttribLi64vNV void __stdcall GLee_Lazy_glGetVertexAttribLi64vNV(GLuint index, GLenum pname, GLint64EXT * params) {if (GLeeInit()) glGetVertexAttribLi64vNV(index, pname, params);} GLEEPFNGLGETVERTEXATTRIBLI64VNVPROC GLeeFuncPtr_glGetVertexAttribLi64vNV=GLee_Lazy_glGetVertexAttribLi64vNV; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribLui64vNV #define GLEE_C_DEFINED_glGetVertexAttribLui64vNV void __stdcall GLee_Lazy_glGetVertexAttribLui64vNV(GLuint index, GLenum pname, GLuint64EXT * params) {if (GLeeInit()) glGetVertexAttribLui64vNV(index, pname, params);} GLEEPFNGLGETVERTEXATTRIBLUI64VNVPROC GLeeFuncPtr_glGetVertexAttribLui64vNV=GLee_Lazy_glGetVertexAttribLui64vNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribLFormatNV #define GLEE_C_DEFINED_glVertexAttribLFormatNV void __stdcall GLee_Lazy_glVertexAttribLFormatNV(GLuint index, GLint size, GLenum type, GLsizei stride) {if (GLeeInit()) glVertexAttribLFormatNV(index, size, type, stride);} GLEEPFNGLVERTEXATTRIBLFORMATNVPROC GLeeFuncPtr_glVertexAttribLFormatNV=GLee_Lazy_glVertexAttribLFormatNV; #endif #endif /* GL_NV_multisample_coverage */ #ifdef __GLEE_GL_NV_multisample_coverage #endif /* GL_AMD_name_gen_delete */ #ifdef __GLEE_GL_AMD_name_gen_delete #ifndef GLEE_C_DEFINED_glGenNamesAMD #define GLEE_C_DEFINED_glGenNamesAMD void __stdcall GLee_Lazy_glGenNamesAMD(GLenum identifier, GLuint num, GLuint * names) {if (GLeeInit()) glGenNamesAMD(identifier, num, names);} GLEEPFNGLGENNAMESAMDPROC GLeeFuncPtr_glGenNamesAMD=GLee_Lazy_glGenNamesAMD; #endif #ifndef GLEE_C_DEFINED_glDeleteNamesAMD #define GLEE_C_DEFINED_glDeleteNamesAMD void __stdcall GLee_Lazy_glDeleteNamesAMD(GLenum identifier, GLuint num, const GLuint * names) {if (GLeeInit()) glDeleteNamesAMD(identifier, num, names);} GLEEPFNGLDELETENAMESAMDPROC GLeeFuncPtr_glDeleteNamesAMD=GLee_Lazy_glDeleteNamesAMD; #endif #ifndef GLEE_C_DEFINED_glIsNameAMD #define GLEE_C_DEFINED_glIsNameAMD GLboolean __stdcall GLee_Lazy_glIsNameAMD(GLenum identifier, GLuint name) {if (GLeeInit()) return glIsNameAMD(identifier, name); return (GLboolean)0;} GLEEPFNGLISNAMEAMDPROC GLeeFuncPtr_glIsNameAMD=GLee_Lazy_glIsNameAMD; #endif #endif /* GL_AMD_debug_output */ #ifdef __GLEE_GL_AMD_debug_output #ifndef GLEE_C_DEFINED_glDebugMessageEnableAMD #define GLEE_C_DEFINED_glDebugMessageEnableAMD void __stdcall GLee_Lazy_glDebugMessageEnableAMD(GLenum category, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled) {if (GLeeInit()) glDebugMessageEnableAMD(category, severity, count, ids, enabled);} GLEEPFNGLDEBUGMESSAGEENABLEAMDPROC GLeeFuncPtr_glDebugMessageEnableAMD=GLee_Lazy_glDebugMessageEnableAMD; #endif #ifndef GLEE_C_DEFINED_glDebugMessageInsertAMD #define GLEE_C_DEFINED_glDebugMessageInsertAMD void __stdcall GLee_Lazy_glDebugMessageInsertAMD(GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar * buf) {if (GLeeInit()) glDebugMessageInsertAMD(category, severity, id, length, buf);} GLEEPFNGLDEBUGMESSAGEINSERTAMDPROC GLeeFuncPtr_glDebugMessageInsertAMD=GLee_Lazy_glDebugMessageInsertAMD; #endif #ifndef GLEE_C_DEFINED_glDebugMessageCallbackAMD #define GLEE_C_DEFINED_glDebugMessageCallbackAMD void __stdcall GLee_Lazy_glDebugMessageCallbackAMD(GLDEBUGPROCAMD callback, GLvoid * userParam) {if (GLeeInit()) glDebugMessageCallbackAMD(callback, userParam);} GLEEPFNGLDEBUGMESSAGECALLBACKAMDPROC GLeeFuncPtr_glDebugMessageCallbackAMD=GLee_Lazy_glDebugMessageCallbackAMD; #endif #ifndef GLEE_C_DEFINED_glGetDebugMessageLogAMD #define GLEE_C_DEFINED_glGetDebugMessageLogAMD GLuint __stdcall GLee_Lazy_glGetDebugMessageLogAMD(GLuint count, GLsizei bufsize, GLenum * categories, GLuint * severities, GLuint * ids, GLsizei * lengths, GLchar * message) {if (GLeeInit()) return glGetDebugMessageLogAMD(count, bufsize, categories, severities, ids, lengths, message); return (GLuint)0;} GLEEPFNGLGETDEBUGMESSAGELOGAMDPROC GLeeFuncPtr_glGetDebugMessageLogAMD=GLee_Lazy_glGetDebugMessageLogAMD; #endif #endif /* GL_AMD_transform_feedback3_lines_triangles */ #ifdef __GLEE_GL_AMD_transform_feedback3_lines_triangles #endif /* GL_AMD_depth_clamp_separate */ #ifdef __GLEE_GL_AMD_depth_clamp_separate #endif /* GL_EXT_texture_sRGB_decode */ #ifdef __GLEE_GL_EXT_texture_sRGB_decode #endif /* GL_NV_texture_multisample */ #ifdef __GLEE_GL_NV_texture_multisample #ifndef GLEE_C_DEFINED_glTexImage2DMultisampleCoverageNV #define GLEE_C_DEFINED_glTexImage2DMultisampleCoverageNV void __stdcall GLee_Lazy_glTexImage2DMultisampleCoverageNV(GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations) {if (GLeeInit()) glTexImage2DMultisampleCoverageNV(target, coverageSamples, colorSamples, internalFormat, width, height, fixedSampleLocations);} GLEEPFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC GLeeFuncPtr_glTexImage2DMultisampleCoverageNV=GLee_Lazy_glTexImage2DMultisampleCoverageNV; #endif #ifndef GLEE_C_DEFINED_glTexImage3DMultisampleCoverageNV #define GLEE_C_DEFINED_glTexImage3DMultisampleCoverageNV void __stdcall GLee_Lazy_glTexImage3DMultisampleCoverageNV(GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations) {if (GLeeInit()) glTexImage3DMultisampleCoverageNV(target, coverageSamples, colorSamples, internalFormat, width, height, depth, fixedSampleLocations);} GLEEPFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC GLeeFuncPtr_glTexImage3DMultisampleCoverageNV=GLee_Lazy_glTexImage3DMultisampleCoverageNV; #endif #ifndef GLEE_C_DEFINED_glTextureImage2DMultisampleNV #define GLEE_C_DEFINED_glTextureImage2DMultisampleNV void __stdcall GLee_Lazy_glTextureImage2DMultisampleNV(GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations) {if (GLeeInit()) glTextureImage2DMultisampleNV(texture, target, samples, internalFormat, width, height, fixedSampleLocations);} GLEEPFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC GLeeFuncPtr_glTextureImage2DMultisampleNV=GLee_Lazy_glTextureImage2DMultisampleNV; #endif #ifndef GLEE_C_DEFINED_glTextureImage3DMultisampleNV #define GLEE_C_DEFINED_glTextureImage3DMultisampleNV void __stdcall GLee_Lazy_glTextureImage3DMultisampleNV(GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations) {if (GLeeInit()) glTextureImage3DMultisampleNV(texture, target, samples, internalFormat, width, height, depth, fixedSampleLocations);} GLEEPFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC GLeeFuncPtr_glTextureImage3DMultisampleNV=GLee_Lazy_glTextureImage3DMultisampleNV; #endif #ifndef GLEE_C_DEFINED_glTextureImage2DMultisampleCoverageNV #define GLEE_C_DEFINED_glTextureImage2DMultisampleCoverageNV void __stdcall GLee_Lazy_glTextureImage2DMultisampleCoverageNV(GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations) {if (GLeeInit()) glTextureImage2DMultisampleCoverageNV(texture, target, coverageSamples, colorSamples, internalFormat, width, height, fixedSampleLocations);} GLEEPFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC GLeeFuncPtr_glTextureImage2DMultisampleCoverageNV=GLee_Lazy_glTextureImage2DMultisampleCoverageNV; #endif #ifndef GLEE_C_DEFINED_glTextureImage3DMultisampleCoverageNV #define GLEE_C_DEFINED_glTextureImage3DMultisampleCoverageNV void __stdcall GLee_Lazy_glTextureImage3DMultisampleCoverageNV(GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations) {if (GLeeInit()) glTextureImage3DMultisampleCoverageNV(texture, target, coverageSamples, colorSamples, internalFormat, width, height, depth, fixedSampleLocations);} GLEEPFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC GLeeFuncPtr_glTextureImage3DMultisampleCoverageNV=GLee_Lazy_glTextureImage3DMultisampleCoverageNV; #endif #endif /* GL_AMD_blend_minmax_factor */ #ifdef __GLEE_GL_AMD_blend_minmax_factor #endif /* GL_AMD_sample_positions */ #ifdef __GLEE_GL_AMD_sample_positions #ifndef GLEE_C_DEFINED_glSetMultisamplefvAMD #define GLEE_C_DEFINED_glSetMultisamplefvAMD void __stdcall GLee_Lazy_glSetMultisamplefvAMD(GLenum pname, GLuint index, const GLfloat * val) {if (GLeeInit()) glSetMultisamplefvAMD(pname, index, val);} GLEEPFNGLSETMULTISAMPLEFVAMDPROC GLeeFuncPtr_glSetMultisamplefvAMD=GLee_Lazy_glSetMultisamplefvAMD; #endif #endif /* GL_EXT_x11_sync_object */ #ifdef __GLEE_GL_EXT_x11_sync_object #ifndef GLEE_C_DEFINED_glImportSyncEXT #define GLEE_C_DEFINED_glImportSyncEXT GLsync __stdcall GLee_Lazy_glImportSyncEXT(GLenum external_sync_type, GLintptr external_sync, GLbitfield flags) {if (GLeeInit()) return glImportSyncEXT(external_sync_type, external_sync, flags); return (GLsync)0;} GLEEPFNGLIMPORTSYNCEXTPROC GLeeFuncPtr_glImportSyncEXT=GLee_Lazy_glImportSyncEXT; #endif #endif /* GL_AMD_multi_draw_indirect */ #ifdef __GLEE_GL_AMD_multi_draw_indirect #ifndef GLEE_C_DEFINED_glMultiDrawArraysIndirectAMD #define GLEE_C_DEFINED_glMultiDrawArraysIndirectAMD void __stdcall GLee_Lazy_glMultiDrawArraysIndirectAMD(GLenum mode, const GLvoid * indirect, GLsizei primcount, GLsizei stride) {if (GLeeInit()) glMultiDrawArraysIndirectAMD(mode, indirect, primcount, stride);} GLEEPFNGLMULTIDRAWARRAYSINDIRECTAMDPROC GLeeFuncPtr_glMultiDrawArraysIndirectAMD=GLee_Lazy_glMultiDrawArraysIndirectAMD; #endif #ifndef GLEE_C_DEFINED_glMultiDrawElementsIndirectAMD #define GLEE_C_DEFINED_glMultiDrawElementsIndirectAMD void __stdcall GLee_Lazy_glMultiDrawElementsIndirectAMD(GLenum mode, GLenum type, const GLvoid * indirect, GLsizei primcount, GLsizei stride) {if (GLeeInit()) glMultiDrawElementsIndirectAMD(mode, type, indirect, primcount, stride);} GLEEPFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC GLeeFuncPtr_glMultiDrawElementsIndirectAMD=GLee_Lazy_glMultiDrawElementsIndirectAMD; #endif #endif /* GL_EXT_framebuffer_multisample_blit_scaled */ #ifdef __GLEE_GL_EXT_framebuffer_multisample_blit_scaled #endif /* GL_NV_path_rendering */ #ifdef __GLEE_GL_NV_path_rendering #ifndef GLEE_C_DEFINED_glGenPathsNV #define GLEE_C_DEFINED_glGenPathsNV GLuint __stdcall GLee_Lazy_glGenPathsNV(GLsizei range) {if (GLeeInit()) return glGenPathsNV(range); return (GLuint)0;} GLEEPFNGLGENPATHSNVPROC GLeeFuncPtr_glGenPathsNV=GLee_Lazy_glGenPathsNV; #endif #ifndef GLEE_C_DEFINED_glDeletePathsNV #define GLEE_C_DEFINED_glDeletePathsNV void __stdcall GLee_Lazy_glDeletePathsNV(GLuint path, GLsizei range) {if (GLeeInit()) glDeletePathsNV(path, range);} GLEEPFNGLDELETEPATHSNVPROC GLeeFuncPtr_glDeletePathsNV=GLee_Lazy_glDeletePathsNV; #endif #ifndef GLEE_C_DEFINED_glIsPathNV #define GLEE_C_DEFINED_glIsPathNV GLboolean __stdcall GLee_Lazy_glIsPathNV(GLuint path) {if (GLeeInit()) return glIsPathNV(path); return (GLboolean)0;} GLEEPFNGLISPATHNVPROC GLeeFuncPtr_glIsPathNV=GLee_Lazy_glIsPathNV; #endif #ifndef GLEE_C_DEFINED_glPathCommandsNV #define GLEE_C_DEFINED_glPathCommandsNV void __stdcall GLee_Lazy_glPathCommandsNV(GLuint path, GLsizei numCommands, const GLubyte * commands, GLsizei numCoords, GLenum coordType, const GLvoid * coords) {if (GLeeInit()) glPathCommandsNV(path, numCommands, commands, numCoords, coordType, coords);} GLEEPFNGLPATHCOMMANDSNVPROC GLeeFuncPtr_glPathCommandsNV=GLee_Lazy_glPathCommandsNV; #endif #ifndef GLEE_C_DEFINED_glPathCoordsNV #define GLEE_C_DEFINED_glPathCoordsNV void __stdcall GLee_Lazy_glPathCoordsNV(GLuint path, GLsizei numCoords, GLenum coordType, const GLvoid * coords) {if (GLeeInit()) glPathCoordsNV(path, numCoords, coordType, coords);} GLEEPFNGLPATHCOORDSNVPROC GLeeFuncPtr_glPathCoordsNV=GLee_Lazy_glPathCoordsNV; #endif #ifndef GLEE_C_DEFINED_glPathSubCommandsNV #define GLEE_C_DEFINED_glPathSubCommandsNV void __stdcall GLee_Lazy_glPathSubCommandsNV(GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte * commands, GLsizei numCoords, GLenum coordType, const GLvoid * coords) {if (GLeeInit()) glPathSubCommandsNV(path, commandStart, commandsToDelete, numCommands, commands, numCoords, coordType, coords);} GLEEPFNGLPATHSUBCOMMANDSNVPROC GLeeFuncPtr_glPathSubCommandsNV=GLee_Lazy_glPathSubCommandsNV; #endif #ifndef GLEE_C_DEFINED_glPathSubCoordsNV #define GLEE_C_DEFINED_glPathSubCoordsNV void __stdcall GLee_Lazy_glPathSubCoordsNV(GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const GLvoid * coords) {if (GLeeInit()) glPathSubCoordsNV(path, coordStart, numCoords, coordType, coords);} GLEEPFNGLPATHSUBCOORDSNVPROC GLeeFuncPtr_glPathSubCoordsNV=GLee_Lazy_glPathSubCoordsNV; #endif #ifndef GLEE_C_DEFINED_glPathStringNV #define GLEE_C_DEFINED_glPathStringNV void __stdcall GLee_Lazy_glPathStringNV(GLuint path, GLenum format, GLsizei length, const GLvoid * pathString) {if (GLeeInit()) glPathStringNV(path, format, length, pathString);} GLEEPFNGLPATHSTRINGNVPROC GLeeFuncPtr_glPathStringNV=GLee_Lazy_glPathStringNV; #endif #ifndef GLEE_C_DEFINED_glPathGlyphsNV #define GLEE_C_DEFINED_glPathGlyphsNV void __stdcall GLee_Lazy_glPathGlyphsNV(GLuint firstPathName, GLenum fontTarget, const GLvoid * fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const GLvoid * charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale) {if (GLeeInit()) glPathGlyphsNV(firstPathName, fontTarget, fontName, fontStyle, numGlyphs, type, charcodes, handleMissingGlyphs, pathParameterTemplate, emScale);} GLEEPFNGLPATHGLYPHSNVPROC GLeeFuncPtr_glPathGlyphsNV=GLee_Lazy_glPathGlyphsNV; #endif #ifndef GLEE_C_DEFINED_glPathGlyphRangeNV #define GLEE_C_DEFINED_glPathGlyphRangeNV void __stdcall GLee_Lazy_glPathGlyphRangeNV(GLuint firstPathName, GLenum fontTarget, const GLvoid * fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale) {if (GLeeInit()) glPathGlyphRangeNV(firstPathName, fontTarget, fontName, fontStyle, firstGlyph, numGlyphs, handleMissingGlyphs, pathParameterTemplate, emScale);} GLEEPFNGLPATHGLYPHRANGENVPROC GLeeFuncPtr_glPathGlyphRangeNV=GLee_Lazy_glPathGlyphRangeNV; #endif #ifndef GLEE_C_DEFINED_glWeightPathsNV #define GLEE_C_DEFINED_glWeightPathsNV void __stdcall GLee_Lazy_glWeightPathsNV(GLuint resultPath, GLsizei numPaths, const GLuint * paths, const GLfloat * weights) {if (GLeeInit()) glWeightPathsNV(resultPath, numPaths, paths, weights);} GLEEPFNGLWEIGHTPATHSNVPROC GLeeFuncPtr_glWeightPathsNV=GLee_Lazy_glWeightPathsNV; #endif #ifndef GLEE_C_DEFINED_glCopyPathNV #define GLEE_C_DEFINED_glCopyPathNV void __stdcall GLee_Lazy_glCopyPathNV(GLuint resultPath, GLuint srcPath) {if (GLeeInit()) glCopyPathNV(resultPath, srcPath);} GLEEPFNGLCOPYPATHNVPROC GLeeFuncPtr_glCopyPathNV=GLee_Lazy_glCopyPathNV; #endif #ifndef GLEE_C_DEFINED_glInterpolatePathsNV #define GLEE_C_DEFINED_glInterpolatePathsNV void __stdcall GLee_Lazy_glInterpolatePathsNV(GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight) {if (GLeeInit()) glInterpolatePathsNV(resultPath, pathA, pathB, weight);} GLEEPFNGLINTERPOLATEPATHSNVPROC GLeeFuncPtr_glInterpolatePathsNV=GLee_Lazy_glInterpolatePathsNV; #endif #ifndef GLEE_C_DEFINED_glTransformPathNV #define GLEE_C_DEFINED_glTransformPathNV void __stdcall GLee_Lazy_glTransformPathNV(GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat * transformValues) {if (GLeeInit()) glTransformPathNV(resultPath, srcPath, transformType, transformValues);} GLEEPFNGLTRANSFORMPATHNVPROC GLeeFuncPtr_glTransformPathNV=GLee_Lazy_glTransformPathNV; #endif #ifndef GLEE_C_DEFINED_glPathParameterivNV #define GLEE_C_DEFINED_glPathParameterivNV void __stdcall GLee_Lazy_glPathParameterivNV(GLuint path, GLenum pname, const GLint * value) {if (GLeeInit()) glPathParameterivNV(path, pname, value);} GLEEPFNGLPATHPARAMETERIVNVPROC GLeeFuncPtr_glPathParameterivNV=GLee_Lazy_glPathParameterivNV; #endif #ifndef GLEE_C_DEFINED_glPathParameteriNV #define GLEE_C_DEFINED_glPathParameteriNV void __stdcall GLee_Lazy_glPathParameteriNV(GLuint path, GLenum pname, GLint value) {if (GLeeInit()) glPathParameteriNV(path, pname, value);} GLEEPFNGLPATHPARAMETERINVPROC GLeeFuncPtr_glPathParameteriNV=GLee_Lazy_glPathParameteriNV; #endif #ifndef GLEE_C_DEFINED_glPathParameterfvNV #define GLEE_C_DEFINED_glPathParameterfvNV void __stdcall GLee_Lazy_glPathParameterfvNV(GLuint path, GLenum pname, const GLfloat * value) {if (GLeeInit()) glPathParameterfvNV(path, pname, value);} GLEEPFNGLPATHPARAMETERFVNVPROC GLeeFuncPtr_glPathParameterfvNV=GLee_Lazy_glPathParameterfvNV; #endif #ifndef GLEE_C_DEFINED_glPathParameterfNV #define GLEE_C_DEFINED_glPathParameterfNV void __stdcall GLee_Lazy_glPathParameterfNV(GLuint path, GLenum pname, GLfloat value) {if (GLeeInit()) glPathParameterfNV(path, pname, value);} GLEEPFNGLPATHPARAMETERFNVPROC GLeeFuncPtr_glPathParameterfNV=GLee_Lazy_glPathParameterfNV; #endif #ifndef GLEE_C_DEFINED_glPathDashArrayNV #define GLEE_C_DEFINED_glPathDashArrayNV void __stdcall GLee_Lazy_glPathDashArrayNV(GLuint path, GLsizei dashCount, const GLfloat * dashArray) {if (GLeeInit()) glPathDashArrayNV(path, dashCount, dashArray);} GLEEPFNGLPATHDASHARRAYNVPROC GLeeFuncPtr_glPathDashArrayNV=GLee_Lazy_glPathDashArrayNV; #endif #ifndef GLEE_C_DEFINED_glPathStencilFuncNV #define GLEE_C_DEFINED_glPathStencilFuncNV void __stdcall GLee_Lazy_glPathStencilFuncNV(GLenum func, GLint ref, GLuint mask) {if (GLeeInit()) glPathStencilFuncNV(func, ref, mask);} GLEEPFNGLPATHSTENCILFUNCNVPROC GLeeFuncPtr_glPathStencilFuncNV=GLee_Lazy_glPathStencilFuncNV; #endif #ifndef GLEE_C_DEFINED_glPathStencilDepthOffsetNV #define GLEE_C_DEFINED_glPathStencilDepthOffsetNV void __stdcall GLee_Lazy_glPathStencilDepthOffsetNV(GLfloat factor, GLfloat units) {if (GLeeInit()) glPathStencilDepthOffsetNV(factor, units);} GLEEPFNGLPATHSTENCILDEPTHOFFSETNVPROC GLeeFuncPtr_glPathStencilDepthOffsetNV=GLee_Lazy_glPathStencilDepthOffsetNV; #endif #ifndef GLEE_C_DEFINED_glStencilFillPathNV #define GLEE_C_DEFINED_glStencilFillPathNV void __stdcall GLee_Lazy_glStencilFillPathNV(GLuint path, GLenum fillMode, GLuint mask) {if (GLeeInit()) glStencilFillPathNV(path, fillMode, mask);} GLEEPFNGLSTENCILFILLPATHNVPROC GLeeFuncPtr_glStencilFillPathNV=GLee_Lazy_glStencilFillPathNV; #endif #ifndef GLEE_C_DEFINED_glStencilStrokePathNV #define GLEE_C_DEFINED_glStencilStrokePathNV void __stdcall GLee_Lazy_glStencilStrokePathNV(GLuint path, GLint reference, GLuint mask) {if (GLeeInit()) glStencilStrokePathNV(path, reference, mask);} GLEEPFNGLSTENCILSTROKEPATHNVPROC GLeeFuncPtr_glStencilStrokePathNV=GLee_Lazy_glStencilStrokePathNV; #endif #ifndef GLEE_C_DEFINED_glStencilFillPathInstancedNV #define GLEE_C_DEFINED_glStencilFillPathInstancedNV void __stdcall GLee_Lazy_glStencilFillPathInstancedNV(GLsizei numPaths, GLenum pathNameType, const GLvoid * paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat * transformValues) {if (GLeeInit()) glStencilFillPathInstancedNV(numPaths, pathNameType, paths, pathBase, fillMode, mask, transformType, transformValues);} GLEEPFNGLSTENCILFILLPATHINSTANCEDNVPROC GLeeFuncPtr_glStencilFillPathInstancedNV=GLee_Lazy_glStencilFillPathInstancedNV; #endif #ifndef GLEE_C_DEFINED_glStencilStrokePathInstancedNV #define GLEE_C_DEFINED_glStencilStrokePathInstancedNV void __stdcall GLee_Lazy_glStencilStrokePathInstancedNV(GLsizei numPaths, GLenum pathNameType, const GLvoid * paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat * transformValues) {if (GLeeInit()) glStencilStrokePathInstancedNV(numPaths, pathNameType, paths, pathBase, reference, mask, transformType, transformValues);} GLEEPFNGLSTENCILSTROKEPATHINSTANCEDNVPROC GLeeFuncPtr_glStencilStrokePathInstancedNV=GLee_Lazy_glStencilStrokePathInstancedNV; #endif #ifndef GLEE_C_DEFINED_glPathCoverDepthFuncNV #define GLEE_C_DEFINED_glPathCoverDepthFuncNV void __stdcall GLee_Lazy_glPathCoverDepthFuncNV(GLenum func) {if (GLeeInit()) glPathCoverDepthFuncNV(func);} GLEEPFNGLPATHCOVERDEPTHFUNCNVPROC GLeeFuncPtr_glPathCoverDepthFuncNV=GLee_Lazy_glPathCoverDepthFuncNV; #endif #ifndef GLEE_C_DEFINED_glPathColorGenNV #define GLEE_C_DEFINED_glPathColorGenNV void __stdcall GLee_Lazy_glPathColorGenNV(GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat * coeffs) {if (GLeeInit()) glPathColorGenNV(color, genMode, colorFormat, coeffs);} GLEEPFNGLPATHCOLORGENNVPROC GLeeFuncPtr_glPathColorGenNV=GLee_Lazy_glPathColorGenNV; #endif #ifndef GLEE_C_DEFINED_glPathTexGenNV #define GLEE_C_DEFINED_glPathTexGenNV void __stdcall GLee_Lazy_glPathTexGenNV(GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat * coeffs) {if (GLeeInit()) glPathTexGenNV(texCoordSet, genMode, components, coeffs);} GLEEPFNGLPATHTEXGENNVPROC GLeeFuncPtr_glPathTexGenNV=GLee_Lazy_glPathTexGenNV; #endif #ifndef GLEE_C_DEFINED_glPathFogGenNV #define GLEE_C_DEFINED_glPathFogGenNV void __stdcall GLee_Lazy_glPathFogGenNV(GLenum genMode) {if (GLeeInit()) glPathFogGenNV(genMode);} GLEEPFNGLPATHFOGGENNVPROC GLeeFuncPtr_glPathFogGenNV=GLee_Lazy_glPathFogGenNV; #endif #ifndef GLEE_C_DEFINED_glCoverFillPathNV #define GLEE_C_DEFINED_glCoverFillPathNV void __stdcall GLee_Lazy_glCoverFillPathNV(GLuint path, GLenum coverMode) {if (GLeeInit()) glCoverFillPathNV(path, coverMode);} GLEEPFNGLCOVERFILLPATHNVPROC GLeeFuncPtr_glCoverFillPathNV=GLee_Lazy_glCoverFillPathNV; #endif #ifndef GLEE_C_DEFINED_glCoverStrokePathNV #define GLEE_C_DEFINED_glCoverStrokePathNV void __stdcall GLee_Lazy_glCoverStrokePathNV(GLuint path, GLenum coverMode) {if (GLeeInit()) glCoverStrokePathNV(path, coverMode);} GLEEPFNGLCOVERSTROKEPATHNVPROC GLeeFuncPtr_glCoverStrokePathNV=GLee_Lazy_glCoverStrokePathNV; #endif #ifndef GLEE_C_DEFINED_glCoverFillPathInstancedNV #define GLEE_C_DEFINED_glCoverFillPathInstancedNV void __stdcall GLee_Lazy_glCoverFillPathInstancedNV(GLsizei numPaths, GLenum pathNameType, const GLvoid * paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat * transformValues) {if (GLeeInit()) glCoverFillPathInstancedNV(numPaths, pathNameType, paths, pathBase, coverMode, transformType, transformValues);} GLEEPFNGLCOVERFILLPATHINSTANCEDNVPROC GLeeFuncPtr_glCoverFillPathInstancedNV=GLee_Lazy_glCoverFillPathInstancedNV; #endif #ifndef GLEE_C_DEFINED_glCoverStrokePathInstancedNV #define GLEE_C_DEFINED_glCoverStrokePathInstancedNV void __stdcall GLee_Lazy_glCoverStrokePathInstancedNV(GLsizei numPaths, GLenum pathNameType, const GLvoid * paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat * transformValues) {if (GLeeInit()) glCoverStrokePathInstancedNV(numPaths, pathNameType, paths, pathBase, coverMode, transformType, transformValues);} GLEEPFNGLCOVERSTROKEPATHINSTANCEDNVPROC GLeeFuncPtr_glCoverStrokePathInstancedNV=GLee_Lazy_glCoverStrokePathInstancedNV; #endif #ifndef GLEE_C_DEFINED_glGetPathParameterivNV #define GLEE_C_DEFINED_glGetPathParameterivNV void __stdcall GLee_Lazy_glGetPathParameterivNV(GLuint path, GLenum pname, GLint * value) {if (GLeeInit()) glGetPathParameterivNV(path, pname, value);} GLEEPFNGLGETPATHPARAMETERIVNVPROC GLeeFuncPtr_glGetPathParameterivNV=GLee_Lazy_glGetPathParameterivNV; #endif #ifndef GLEE_C_DEFINED_glGetPathParameterfvNV #define GLEE_C_DEFINED_glGetPathParameterfvNV void __stdcall GLee_Lazy_glGetPathParameterfvNV(GLuint path, GLenum pname, GLfloat * value) {if (GLeeInit()) glGetPathParameterfvNV(path, pname, value);} GLEEPFNGLGETPATHPARAMETERFVNVPROC GLeeFuncPtr_glGetPathParameterfvNV=GLee_Lazy_glGetPathParameterfvNV; #endif #ifndef GLEE_C_DEFINED_glGetPathCommandsNV #define GLEE_C_DEFINED_glGetPathCommandsNV void __stdcall GLee_Lazy_glGetPathCommandsNV(GLuint path, GLubyte * commands) {if (GLeeInit()) glGetPathCommandsNV(path, commands);} GLEEPFNGLGETPATHCOMMANDSNVPROC GLeeFuncPtr_glGetPathCommandsNV=GLee_Lazy_glGetPathCommandsNV; #endif #ifndef GLEE_C_DEFINED_glGetPathCoordsNV #define GLEE_C_DEFINED_glGetPathCoordsNV void __stdcall GLee_Lazy_glGetPathCoordsNV(GLuint path, GLfloat * coords) {if (GLeeInit()) glGetPathCoordsNV(path, coords);} GLEEPFNGLGETPATHCOORDSNVPROC GLeeFuncPtr_glGetPathCoordsNV=GLee_Lazy_glGetPathCoordsNV; #endif #ifndef GLEE_C_DEFINED_glGetPathDashArrayNV #define GLEE_C_DEFINED_glGetPathDashArrayNV void __stdcall GLee_Lazy_glGetPathDashArrayNV(GLuint path, GLfloat * dashArray) {if (GLeeInit()) glGetPathDashArrayNV(path, dashArray);} GLEEPFNGLGETPATHDASHARRAYNVPROC GLeeFuncPtr_glGetPathDashArrayNV=GLee_Lazy_glGetPathDashArrayNV; #endif #ifndef GLEE_C_DEFINED_glGetPathMetricsNV #define GLEE_C_DEFINED_glGetPathMetricsNV void __stdcall GLee_Lazy_glGetPathMetricsNV(GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const GLvoid * paths, GLuint pathBase, GLsizei stride, GLfloat * metrics) {if (GLeeInit()) glGetPathMetricsNV(metricQueryMask, numPaths, pathNameType, paths, pathBase, stride, metrics);} GLEEPFNGLGETPATHMETRICSNVPROC GLeeFuncPtr_glGetPathMetricsNV=GLee_Lazy_glGetPathMetricsNV; #endif #ifndef GLEE_C_DEFINED_glGetPathMetricRangeNV #define GLEE_C_DEFINED_glGetPathMetricRangeNV void __stdcall GLee_Lazy_glGetPathMetricRangeNV(GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat * metrics) {if (GLeeInit()) glGetPathMetricRangeNV(metricQueryMask, firstPathName, numPaths, stride, metrics);} GLEEPFNGLGETPATHMETRICRANGENVPROC GLeeFuncPtr_glGetPathMetricRangeNV=GLee_Lazy_glGetPathMetricRangeNV; #endif #ifndef GLEE_C_DEFINED_glGetPathSpacingNV #define GLEE_C_DEFINED_glGetPathSpacingNV void __stdcall GLee_Lazy_glGetPathSpacingNV(GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const GLvoid * paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat * returnedSpacing) {if (GLeeInit()) glGetPathSpacingNV(pathListMode, numPaths, pathNameType, paths, pathBase, advanceScale, kerningScale, transformType, returnedSpacing);} GLEEPFNGLGETPATHSPACINGNVPROC GLeeFuncPtr_glGetPathSpacingNV=GLee_Lazy_glGetPathSpacingNV; #endif #ifndef GLEE_C_DEFINED_glGetPathColorGenivNV #define GLEE_C_DEFINED_glGetPathColorGenivNV void __stdcall GLee_Lazy_glGetPathColorGenivNV(GLenum color, GLenum pname, GLint * value) {if (GLeeInit()) glGetPathColorGenivNV(color, pname, value);} GLEEPFNGLGETPATHCOLORGENIVNVPROC GLeeFuncPtr_glGetPathColorGenivNV=GLee_Lazy_glGetPathColorGenivNV; #endif #ifndef GLEE_C_DEFINED_glGetPathColorGenfvNV #define GLEE_C_DEFINED_glGetPathColorGenfvNV void __stdcall GLee_Lazy_glGetPathColorGenfvNV(GLenum color, GLenum pname, GLfloat * value) {if (GLeeInit()) glGetPathColorGenfvNV(color, pname, value);} GLEEPFNGLGETPATHCOLORGENFVNVPROC GLeeFuncPtr_glGetPathColorGenfvNV=GLee_Lazy_glGetPathColorGenfvNV; #endif #ifndef GLEE_C_DEFINED_glGetPathTexGenivNV #define GLEE_C_DEFINED_glGetPathTexGenivNV void __stdcall GLee_Lazy_glGetPathTexGenivNV(GLenum texCoordSet, GLenum pname, GLint * value) {if (GLeeInit()) glGetPathTexGenivNV(texCoordSet, pname, value);} GLEEPFNGLGETPATHTEXGENIVNVPROC GLeeFuncPtr_glGetPathTexGenivNV=GLee_Lazy_glGetPathTexGenivNV; #endif #ifndef GLEE_C_DEFINED_glGetPathTexGenfvNV #define GLEE_C_DEFINED_glGetPathTexGenfvNV void __stdcall GLee_Lazy_glGetPathTexGenfvNV(GLenum texCoordSet, GLenum pname, GLfloat * value) {if (GLeeInit()) glGetPathTexGenfvNV(texCoordSet, pname, value);} GLEEPFNGLGETPATHTEXGENFVNVPROC GLeeFuncPtr_glGetPathTexGenfvNV=GLee_Lazy_glGetPathTexGenfvNV; #endif #ifndef GLEE_C_DEFINED_glIsPointInFillPathNV #define GLEE_C_DEFINED_glIsPointInFillPathNV GLboolean __stdcall GLee_Lazy_glIsPointInFillPathNV(GLuint path, GLuint mask, GLfloat x, GLfloat y) {if (GLeeInit()) return glIsPointInFillPathNV(path, mask, x, y); return (GLboolean)0;} GLEEPFNGLISPOINTINFILLPATHNVPROC GLeeFuncPtr_glIsPointInFillPathNV=GLee_Lazy_glIsPointInFillPathNV; #endif #ifndef GLEE_C_DEFINED_glIsPointInStrokePathNV #define GLEE_C_DEFINED_glIsPointInStrokePathNV GLboolean __stdcall GLee_Lazy_glIsPointInStrokePathNV(GLuint path, GLfloat x, GLfloat y) {if (GLeeInit()) return glIsPointInStrokePathNV(path, x, y); return (GLboolean)0;} GLEEPFNGLISPOINTINSTROKEPATHNVPROC GLeeFuncPtr_glIsPointInStrokePathNV=GLee_Lazy_glIsPointInStrokePathNV; #endif #ifndef GLEE_C_DEFINED_glGetPathLengthNV #define GLEE_C_DEFINED_glGetPathLengthNV GLfloat __stdcall GLee_Lazy_glGetPathLengthNV(GLuint path, GLsizei startSegment, GLsizei numSegments) {if (GLeeInit()) return glGetPathLengthNV(path, startSegment, numSegments); return (GLfloat)0;} GLEEPFNGLGETPATHLENGTHNVPROC GLeeFuncPtr_glGetPathLengthNV=GLee_Lazy_glGetPathLengthNV; #endif #ifndef GLEE_C_DEFINED_glPointAlongPathNV #define GLEE_C_DEFINED_glPointAlongPathNV GLboolean __stdcall GLee_Lazy_glPointAlongPathNV(GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat * x, GLfloat * y, GLfloat * tangentX, GLfloat * tangentY) {if (GLeeInit()) return glPointAlongPathNV(path, startSegment, numSegments, distance, x, y, tangentX, tangentY); return (GLboolean)0;} GLEEPFNGLPOINTALONGPATHNVPROC GLeeFuncPtr_glPointAlongPathNV=GLee_Lazy_glPointAlongPathNV; #endif #endif /* GL_AMD_pinned_memory */ #ifdef __GLEE_GL_AMD_pinned_memory #endif /* GL_AMD_stencil_operation_extended */ #ifdef __GLEE_GL_AMD_stencil_operation_extended #ifndef GLEE_C_DEFINED_glStencilOpValueAMD #define GLEE_C_DEFINED_glStencilOpValueAMD void __stdcall GLee_Lazy_glStencilOpValueAMD(GLenum face, GLuint value) {if (GLeeInit()) glStencilOpValueAMD(face, value);} GLEEPFNGLSTENCILOPVALUEAMDPROC GLeeFuncPtr_glStencilOpValueAMD=GLee_Lazy_glStencilOpValueAMD; #endif #endif /* GL_AMD_vertex_shader_viewport_index */ #ifdef __GLEE_GL_AMD_vertex_shader_viewport_index #endif /* GL_AMD_vertex_shader_layer */ #ifdef __GLEE_GL_AMD_vertex_shader_layer #endif /* GL_NV_bindless_texture */ #ifdef __GLEE_GL_NV_bindless_texture #ifndef GLEE_C_DEFINED_glGetTextureHandleNV #define GLEE_C_DEFINED_glGetTextureHandleNV GLuint64 __stdcall GLee_Lazy_glGetTextureHandleNV(GLuint texture) {if (GLeeInit()) return glGetTextureHandleNV(texture); return (GLuint64)0;} GLEEPFNGLGETTEXTUREHANDLENVPROC GLeeFuncPtr_glGetTextureHandleNV=GLee_Lazy_glGetTextureHandleNV; #endif #ifndef GLEE_C_DEFINED_glGetTextureSamplerHandleNV #define GLEE_C_DEFINED_glGetTextureSamplerHandleNV GLuint64 __stdcall GLee_Lazy_glGetTextureSamplerHandleNV(GLuint texture, GLuint sampler) {if (GLeeInit()) return glGetTextureSamplerHandleNV(texture, sampler); return (GLuint64)0;} GLEEPFNGLGETTEXTURESAMPLERHANDLENVPROC GLeeFuncPtr_glGetTextureSamplerHandleNV=GLee_Lazy_glGetTextureSamplerHandleNV; #endif #ifndef GLEE_C_DEFINED_glMakeTextureHandleResidentNV #define GLEE_C_DEFINED_glMakeTextureHandleResidentNV void __stdcall GLee_Lazy_glMakeTextureHandleResidentNV(GLuint64 handle) {if (GLeeInit()) glMakeTextureHandleResidentNV(handle);} GLEEPFNGLMAKETEXTUREHANDLERESIDENTNVPROC GLeeFuncPtr_glMakeTextureHandleResidentNV=GLee_Lazy_glMakeTextureHandleResidentNV; #endif #ifndef GLEE_C_DEFINED_glMakeTextureHandleNonResidentNV #define GLEE_C_DEFINED_glMakeTextureHandleNonResidentNV void __stdcall GLee_Lazy_glMakeTextureHandleNonResidentNV(GLuint64 handle) {if (GLeeInit()) glMakeTextureHandleNonResidentNV(handle);} GLEEPFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC GLeeFuncPtr_glMakeTextureHandleNonResidentNV=GLee_Lazy_glMakeTextureHandleNonResidentNV; #endif #ifndef GLEE_C_DEFINED_glGetImageHandleNV #define GLEE_C_DEFINED_glGetImageHandleNV GLuint64 __stdcall GLee_Lazy_glGetImageHandleNV(GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format) {if (GLeeInit()) return glGetImageHandleNV(texture, level, layered, layer, format); return (GLuint64)0;} GLEEPFNGLGETIMAGEHANDLENVPROC GLeeFuncPtr_glGetImageHandleNV=GLee_Lazy_glGetImageHandleNV; #endif #ifndef GLEE_C_DEFINED_glMakeImageHandleResidentNV #define GLEE_C_DEFINED_glMakeImageHandleResidentNV void __stdcall GLee_Lazy_glMakeImageHandleResidentNV(GLuint64 handle, GLenum access) {if (GLeeInit()) glMakeImageHandleResidentNV(handle, access);} GLEEPFNGLMAKEIMAGEHANDLERESIDENTNVPROC GLeeFuncPtr_glMakeImageHandleResidentNV=GLee_Lazy_glMakeImageHandleResidentNV; #endif #ifndef GLEE_C_DEFINED_glMakeImageHandleNonResidentNV #define GLEE_C_DEFINED_glMakeImageHandleNonResidentNV void __stdcall GLee_Lazy_glMakeImageHandleNonResidentNV(GLuint64 handle) {if (GLeeInit()) glMakeImageHandleNonResidentNV(handle);} GLEEPFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC GLeeFuncPtr_glMakeImageHandleNonResidentNV=GLee_Lazy_glMakeImageHandleNonResidentNV; #endif #ifndef GLEE_C_DEFINED_glUniformHandleui64NV #define GLEE_C_DEFINED_glUniformHandleui64NV void __stdcall GLee_Lazy_glUniformHandleui64NV(GLint location, GLuint64 value) {if (GLeeInit()) glUniformHandleui64NV(location, value);} GLEEPFNGLUNIFORMHANDLEUI64NVPROC GLeeFuncPtr_glUniformHandleui64NV=GLee_Lazy_glUniformHandleui64NV; #endif #ifndef GLEE_C_DEFINED_glUniformHandleui64vNV #define GLEE_C_DEFINED_glUniformHandleui64vNV void __stdcall GLee_Lazy_glUniformHandleui64vNV(GLint location, GLsizei count, const GLuint64 * value) {if (GLeeInit()) glUniformHandleui64vNV(location, count, value);} GLEEPFNGLUNIFORMHANDLEUI64VNVPROC GLeeFuncPtr_glUniformHandleui64vNV=GLee_Lazy_glUniformHandleui64vNV; #endif #ifndef GLEE_C_DEFINED_glProgramUniformHandleui64NV #define GLEE_C_DEFINED_glProgramUniformHandleui64NV void __stdcall GLee_Lazy_glProgramUniformHandleui64NV(GLuint program, GLint location, GLuint64 value) {if (GLeeInit()) glProgramUniformHandleui64NV(program, location, value);} GLEEPFNGLPROGRAMUNIFORMHANDLEUI64NVPROC GLeeFuncPtr_glProgramUniformHandleui64NV=GLee_Lazy_glProgramUniformHandleui64NV; #endif #ifndef GLEE_C_DEFINED_glProgramUniformHandleui64vNV #define GLEE_C_DEFINED_glProgramUniformHandleui64vNV void __stdcall GLee_Lazy_glProgramUniformHandleui64vNV(GLuint program, GLint location, GLsizei count, const GLuint64 * values) {if (GLeeInit()) glProgramUniformHandleui64vNV(program, location, count, values);} GLEEPFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC GLeeFuncPtr_glProgramUniformHandleui64vNV=GLee_Lazy_glProgramUniformHandleui64vNV; #endif #ifndef GLEE_C_DEFINED_glIsTextureHandleResidentNV #define GLEE_C_DEFINED_glIsTextureHandleResidentNV GLboolean __stdcall GLee_Lazy_glIsTextureHandleResidentNV(GLuint64 handle) {if (GLeeInit()) return glIsTextureHandleResidentNV(handle); return (GLboolean)0;} GLEEPFNGLISTEXTUREHANDLERESIDENTNVPROC GLeeFuncPtr_glIsTextureHandleResidentNV=GLee_Lazy_glIsTextureHandleResidentNV; #endif #ifndef GLEE_C_DEFINED_glIsImageHandleResidentNV #define GLEE_C_DEFINED_glIsImageHandleResidentNV GLboolean __stdcall GLee_Lazy_glIsImageHandleResidentNV(GLuint64 handle) {if (GLeeInit()) return glIsImageHandleResidentNV(handle); return (GLboolean)0;} GLEEPFNGLISIMAGEHANDLERESIDENTNVPROC GLeeFuncPtr_glIsImageHandleResidentNV=GLee_Lazy_glIsImageHandleResidentNV; #endif #endif /* GL_NV_shader_atomic_float */ #ifdef __GLEE_GL_NV_shader_atomic_float #endif /* GL_AMD_query_buffer_object */ #ifdef __GLEE_GL_AMD_query_buffer_object #endif /* GL_NV_compute_program5 */ #ifdef __GLEE_GL_NV_compute_program5 #endif /* GL_NV_shader_storage_buffer_object */ #ifdef __GLEE_GL_NV_shader_storage_buffer_object #endif /* GL_NV_shader_atomic_counters */ #ifdef __GLEE_GL_NV_shader_atomic_counters #endif /* GL_NV_deep_texture3D */ #ifdef __GLEE_GL_NV_deep_texture3D #endif /* GL_NVX_conditional_render */ #ifdef __GLEE_GL_NVX_conditional_render #ifndef GLEE_C_DEFINED_glBeginConditionalRenderNVX #define GLEE_C_DEFINED_glBeginConditionalRenderNVX void __stdcall GLee_Lazy_glBeginConditionalRenderNVX(GLuint id) {if (GLeeInit()) glBeginConditionalRenderNVX(id);} GLEEPFNGLBEGINCONDITIONALRENDERNVXPROC GLeeFuncPtr_glBeginConditionalRenderNVX=GLee_Lazy_glBeginConditionalRenderNVX; #endif #ifndef GLEE_C_DEFINED_glEndConditionalRenderNVX #define GLEE_C_DEFINED_glEndConditionalRenderNVX void __stdcall GLee_Lazy_glEndConditionalRenderNVX(void) {if (GLeeInit()) glEndConditionalRenderNVX();} GLEEPFNGLENDCONDITIONALRENDERNVXPROC GLeeFuncPtr_glEndConditionalRenderNVX=GLee_Lazy_glEndConditionalRenderNVX; #endif #endif /* GL_AMD_sparse_texture */ #ifdef __GLEE_GL_AMD_sparse_texture #ifndef GLEE_C_DEFINED_glTexStorageSparseAMD #define GLEE_C_DEFINED_glTexStorageSparseAMD void __stdcall GLee_Lazy_glTexStorageSparseAMD(GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags) {if (GLeeInit()) glTexStorageSparseAMD(target, internalFormat, width, height, depth, layers, flags);} GLEEPFNGLTEXSTORAGESPARSEAMDPROC GLeeFuncPtr_glTexStorageSparseAMD=GLee_Lazy_glTexStorageSparseAMD; #endif #ifndef GLEE_C_DEFINED_glTextureStorageSparseAMD #define GLEE_C_DEFINED_glTextureStorageSparseAMD void __stdcall GLee_Lazy_glTextureStorageSparseAMD(GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags) {if (GLeeInit()) glTextureStorageSparseAMD(texture, target, internalFormat, width, height, depth, layers, flags);} GLEEPFNGLTEXTURESTORAGESPARSEAMDPROC GLeeFuncPtr_glTextureStorageSparseAMD=GLee_Lazy_glTextureStorageSparseAMD; #endif #endif /* GL_AMD_shader_trinary_minmax */ #ifdef __GLEE_GL_AMD_shader_trinary_minmax #endif /* GL_INTEL_map_texture */ #ifdef __GLEE_GL_INTEL_map_texture #ifndef GLEE_C_DEFINED_glSyncTextureINTEL #define GLEE_C_DEFINED_glSyncTextureINTEL void __stdcall GLee_Lazy_glSyncTextureINTEL(GLuint texture) {if (GLeeInit()) glSyncTextureINTEL(texture);} GLEEPFNGLSYNCTEXTUREINTELPROC GLeeFuncPtr_glSyncTextureINTEL=GLee_Lazy_glSyncTextureINTEL; #endif #ifndef GLEE_C_DEFINED_glUnmapTexture2DINTEL #define GLEE_C_DEFINED_glUnmapTexture2DINTEL void __stdcall GLee_Lazy_glUnmapTexture2DINTEL(GLuint texture, GLint level) {if (GLeeInit()) glUnmapTexture2DINTEL(texture, level);} GLEEPFNGLUNMAPTEXTURE2DINTELPROC GLeeFuncPtr_glUnmapTexture2DINTEL=GLee_Lazy_glUnmapTexture2DINTEL; #endif #ifndef GLEE_C_DEFINED_glMapTexture2DINTEL #define GLEE_C_DEFINED_glMapTexture2DINTEL GLvoid* __stdcall GLee_Lazy_glMapTexture2DINTEL(GLuint texture, GLint level, GLbitfield access, const GLint * stride, const GLenum * layout) {if (GLeeInit()) return glMapTexture2DINTEL(texture, level, access, stride, layout); return (GLvoid*)0;} GLEEPFNGLMAPTEXTURE2DINTELPROC GLeeFuncPtr_glMapTexture2DINTEL=GLee_Lazy_glMapTexture2DINTEL; #endif #endif /* GL_NV_draw_texture */ #ifdef __GLEE_GL_NV_draw_texture #ifndef GLEE_C_DEFINED_glDrawTextureNV #define GLEE_C_DEFINED_glDrawTextureNV void __stdcall GLee_Lazy_glDrawTextureNV(GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1) {if (GLeeInit()) glDrawTextureNV(texture, sampler, x0, y0, x1, y1, z, s0, t0, s1, t1);} GLEEPFNGLDRAWTEXTURENVPROC GLeeFuncPtr_glDrawTextureNV=GLee_Lazy_glDrawTextureNV; #endif #endif /* GL_SGIX_texture_select */ #ifdef __GLEE_GL_SGIX_texture_select #endif /* GL_INGR_blend_func_separate */ #ifdef __GLEE_GL_INGR_blend_func_separate #ifndef GLEE_C_DEFINED_glBlendFuncSeparateINGR #define GLEE_C_DEFINED_glBlendFuncSeparateINGR void __stdcall GLee_Lazy_glBlendFuncSeparateINGR(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) {if (GLeeInit()) glBlendFuncSeparateINGR(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha);} GLEEPFNGLBLENDFUNCSEPARATEINGRPROC GLeeFuncPtr_glBlendFuncSeparateINGR=GLee_Lazy_glBlendFuncSeparateINGR; #endif #endif /* GL_SGIX_depth_pass_instrument */ #ifdef __GLEE_GL_SGIX_depth_pass_instrument #endif /* GL_SGIX_igloo_interface */ #ifdef __GLEE_GL_SGIX_igloo_interface #ifndef GLEE_C_DEFINED_glIglooInterfaceSGIX #define GLEE_C_DEFINED_glIglooInterfaceSGIX void __stdcall GLee_Lazy_glIglooInterfaceSGIX(GLenum pname, const GLvoid * params) {if (GLeeInit()) glIglooInterfaceSGIX(pname, params);} GLEEPFNGLIGLOOINTERFACESGIXPROC GLeeFuncPtr_glIglooInterfaceSGIX=GLee_Lazy_glIglooInterfaceSGIX; #endif #endif /* WGL */ #ifdef _WIN32 /* Extension querying variables */ GLboolean _GLEE_WGL_ARB_buffer_region = GL_FALSE; GLboolean _GLEE_WGL_ARB_multisample = GL_FALSE; GLboolean _GLEE_WGL_ARB_extensions_string = GL_FALSE; GLboolean _GLEE_WGL_ARB_pixel_format = GL_FALSE; GLboolean _GLEE_WGL_ARB_make_current_read = GL_FALSE; GLboolean _GLEE_WGL_ARB_pbuffer = GL_FALSE; GLboolean _GLEE_WGL_ARB_render_texture = GL_FALSE; GLboolean _GLEE_WGL_ARB_pixel_format_float = GL_FALSE; GLboolean _GLEE_WGL_ARB_framebuffer_sRGB = GL_FALSE; GLboolean _GLEE_WGL_ARB_create_context = GL_FALSE; GLboolean _GLEE_WGL_ARB_create_context_profile = GL_FALSE; GLboolean _GLEE_WGL_ARB_create_context_robustness = GL_FALSE; GLboolean _GLEE_WGL_EXT_make_current_read = GL_FALSE; GLboolean _GLEE_WGL_EXT_pixel_format = GL_FALSE; GLboolean _GLEE_WGL_EXT_pbuffer = GL_FALSE; GLboolean _GLEE_WGL_EXT_depth_float = GL_FALSE; GLboolean _GLEE_WGL_3DFX_multisample = GL_FALSE; GLboolean _GLEE_WGL_EXT_multisample = GL_FALSE; GLboolean _GLEE_WGL_I3D_digital_video_control = GL_FALSE; GLboolean _GLEE_WGL_I3D_gamma = GL_FALSE; GLboolean _GLEE_WGL_I3D_genlock = GL_FALSE; GLboolean _GLEE_WGL_I3D_image_buffer = GL_FALSE; GLboolean _GLEE_WGL_I3D_swap_frame_lock = GL_FALSE; GLboolean _GLEE_WGL_NV_render_depth_texture = GL_FALSE; GLboolean _GLEE_WGL_NV_render_texture_rectangle = GL_FALSE; GLboolean _GLEE_WGL_ATI_pixel_format_float = GL_FALSE; GLboolean _GLEE_WGL_NV_float_buffer = GL_FALSE; GLboolean _GLEE_WGL_3DL_stereo_control = GL_FALSE; GLboolean _GLEE_WGL_EXT_pixel_format_packed_float = GL_FALSE; GLboolean _GLEE_WGL_EXT_framebuffer_sRGB = GL_FALSE; GLboolean _GLEE_WGL_NV_present_video = GL_FALSE; GLboolean _GLEE_WGL_NV_swap_group = GL_FALSE; GLboolean _GLEE_WGL_NV_gpu_affinity = GL_FALSE; GLboolean _GLEE_WGL_AMD_gpu_association = GL_FALSE; GLboolean _GLEE_WGL_NV_copy_image = GL_FALSE; GLboolean _GLEE_WGL_NV_multisample_coverage = GL_FALSE; GLboolean _GLEE_WGL_EXT_create_context_es2_profile = GL_FALSE; GLboolean _GLEE_WGL_NV_DX_interop = GL_FALSE; GLboolean _GLEE_WGL_NV_DX_interop2 = GL_FALSE; GLboolean _GLEE_WGL_EXT_swap_control_tear = GL_FALSE; GLboolean _GLEE_WGL_EXT_display_color_table = GL_FALSE; GLboolean _GLEE_WGL_EXT_extensions_string = GL_FALSE; GLboolean _GLEE_WGL_EXT_swap_control = GL_FALSE; GLboolean _GLEE_WGL_NV_vertex_array_range = GL_FALSE; GLboolean _GLEE_WGL_OML_sync_control = GL_FALSE; GLboolean _GLEE_WGL_I3D_swap_frame_usage = GL_FALSE; GLboolean _GLEE_WGL_NV_video_output = GL_FALSE; /* WGL Extension names */ char __GLeeWGLExtensionNames[47][35]={ "WGL_ARB_buffer_region", "WGL_ARB_multisample", "WGL_ARB_extensions_string", "WGL_ARB_pixel_format", "WGL_ARB_make_current_read", "WGL_ARB_pbuffer", "WGL_ARB_render_texture", "WGL_ARB_pixel_format_float", "WGL_ARB_framebuffer_sRGB", "WGL_ARB_create_context", "WGL_ARB_create_context_profile", "WGL_ARB_create_context_robustness", "WGL_EXT_make_current_read", "WGL_EXT_pixel_format", "WGL_EXT_pbuffer", "WGL_EXT_depth_float", "WGL_3DFX_multisample", "WGL_EXT_multisample", "WGL_I3D_digital_video_control", "WGL_I3D_gamma", "WGL_I3D_genlock", "WGL_I3D_image_buffer", "WGL_I3D_swap_frame_lock", "WGL_NV_render_depth_texture", "WGL_NV_render_texture_rectangle", "WGL_ATI_pixel_format_float", "WGL_NV_float_buffer", "WGL_3DL_stereo_control", "WGL_EXT_pixel_format_packed_float", "WGL_EXT_framebuffer_sRGB", "WGL_NV_present_video", "WGL_NV_swap_group", "WGL_NV_gpu_affinity", "WGL_AMD_gpu_association", "WGL_NV_copy_image", "WGL_NV_multisample_coverage", "WGL_EXT_create_context_es2_profile", "WGL_NV_DX_interop", "WGL_NV_DX_interop2", "WGL_EXT_swap_control_tear", "WGL_EXT_display_color_table", "WGL_EXT_extensions_string", "WGL_EXT_swap_control", "WGL_NV_vertex_array_range", "WGL_OML_sync_control", "WGL_I3D_swap_frame_usage", "WGL_NV_video_output" }; int __GLeeWGLNumExtensions=47; /* WGL_ARB_buffer_region */ #ifdef __GLEE_WGL_ARB_buffer_region #ifndef GLEE_C_DEFINED_wglCreateBufferRegionARB #define GLEE_C_DEFINED_wglCreateBufferRegionARB HANDLE __stdcall GLee_Lazy_wglCreateBufferRegionARB(HDC hDC, int iLayerPlane, UINT uType) {if (GLeeInit()) return wglCreateBufferRegionARB(hDC, iLayerPlane, uType); return (HANDLE)0;} GLEEPFNWGLCREATEBUFFERREGIONARBPROC GLeeFuncPtr_wglCreateBufferRegionARB=GLee_Lazy_wglCreateBufferRegionARB; #endif #ifndef GLEE_C_DEFINED_wglDeleteBufferRegionARB #define GLEE_C_DEFINED_wglDeleteBufferRegionARB VOID __stdcall GLee_Lazy_wglDeleteBufferRegionARB(HANDLE hRegion) {if (GLeeInit()) wglDeleteBufferRegionARB(hRegion);} GLEEPFNWGLDELETEBUFFERREGIONARBPROC GLeeFuncPtr_wglDeleteBufferRegionARB=GLee_Lazy_wglDeleteBufferRegionARB; #endif #ifndef GLEE_C_DEFINED_wglSaveBufferRegionARB #define GLEE_C_DEFINED_wglSaveBufferRegionARB BOOL __stdcall GLee_Lazy_wglSaveBufferRegionARB(HANDLE hRegion, int x, int y, int width, int height) {if (GLeeInit()) return wglSaveBufferRegionARB(hRegion, x, y, width, height); return (BOOL)0;} GLEEPFNWGLSAVEBUFFERREGIONARBPROC GLeeFuncPtr_wglSaveBufferRegionARB=GLee_Lazy_wglSaveBufferRegionARB; #endif #ifndef GLEE_C_DEFINED_wglRestoreBufferRegionARB #define GLEE_C_DEFINED_wglRestoreBufferRegionARB BOOL __stdcall GLee_Lazy_wglRestoreBufferRegionARB(HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc) {if (GLeeInit()) return wglRestoreBufferRegionARB(hRegion, x, y, width, height, xSrc, ySrc); return (BOOL)0;} GLEEPFNWGLRESTOREBUFFERREGIONARBPROC GLeeFuncPtr_wglRestoreBufferRegionARB=GLee_Lazy_wglRestoreBufferRegionARB; #endif #endif /* WGL_ARB_multisample */ #ifdef __GLEE_WGL_ARB_multisample #endif /* WGL_ARB_extensions_string */ #ifdef __GLEE_WGL_ARB_extensions_string #ifndef GLEE_C_DEFINED_wglGetExtensionsStringARB #define GLEE_C_DEFINED_wglGetExtensionsStringARB const char * __stdcall GLee_Lazy_wglGetExtensionsStringARB(HDC hdc) {if (GLeeInit()) return wglGetExtensionsStringARB(hdc); return (const char *)0;} GLEEPFNWGLGETEXTENSIONSSTRINGARBPROC GLeeFuncPtr_wglGetExtensionsStringARB=GLee_Lazy_wglGetExtensionsStringARB; #endif #endif /* WGL_ARB_pixel_format */ #ifdef __GLEE_WGL_ARB_pixel_format #ifndef GLEE_C_DEFINED_wglGetPixelFormatAttribivARB #define GLEE_C_DEFINED_wglGetPixelFormatAttribivARB BOOL __stdcall GLee_Lazy_wglGetPixelFormatAttribivARB(HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int * piAttributes, int * piValues) {if (GLeeInit()) return wglGetPixelFormatAttribivARB(hdc, iPixelFormat, iLayerPlane, nAttributes, piAttributes, piValues); return (BOOL)0;} GLEEPFNWGLGETPIXELFORMATATTRIBIVARBPROC GLeeFuncPtr_wglGetPixelFormatAttribivARB=GLee_Lazy_wglGetPixelFormatAttribivARB; #endif #ifndef GLEE_C_DEFINED_wglGetPixelFormatAttribfvARB #define GLEE_C_DEFINED_wglGetPixelFormatAttribfvARB BOOL __stdcall GLee_Lazy_wglGetPixelFormatAttribfvARB(HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int * piAttributes, FLOAT * pfValues) {if (GLeeInit()) return wglGetPixelFormatAttribfvARB(hdc, iPixelFormat, iLayerPlane, nAttributes, piAttributes, pfValues); return (BOOL)0;} GLEEPFNWGLGETPIXELFORMATATTRIBFVARBPROC GLeeFuncPtr_wglGetPixelFormatAttribfvARB=GLee_Lazy_wglGetPixelFormatAttribfvARB; #endif #ifndef GLEE_C_DEFINED_wglChoosePixelFormatARB #define GLEE_C_DEFINED_wglChoosePixelFormatARB BOOL __stdcall GLee_Lazy_wglChoosePixelFormatARB(HDC hdc, const int * piAttribIList, const FLOAT * pfAttribFList, UINT nMaxFormats, int * piFormats, UINT * nNumFormats) {if (GLeeInit()) return wglChoosePixelFormatARB(hdc, piAttribIList, pfAttribFList, nMaxFormats, piFormats, nNumFormats); return (BOOL)0;} GLEEPFNWGLCHOOSEPIXELFORMATARBPROC GLeeFuncPtr_wglChoosePixelFormatARB=GLee_Lazy_wglChoosePixelFormatARB; #endif #endif /* WGL_ARB_make_current_read */ #ifdef __GLEE_WGL_ARB_make_current_read #ifndef GLEE_C_DEFINED_wglMakeContextCurrentARB #define GLEE_C_DEFINED_wglMakeContextCurrentARB BOOL __stdcall GLee_Lazy_wglMakeContextCurrentARB(HDC hDrawDC, HDC hReadDC, HGLRC hglrc) {if (GLeeInit()) return wglMakeContextCurrentARB(hDrawDC, hReadDC, hglrc); return (BOOL)0;} GLEEPFNWGLMAKECONTEXTCURRENTARBPROC GLeeFuncPtr_wglMakeContextCurrentARB=GLee_Lazy_wglMakeContextCurrentARB; #endif #ifndef GLEE_C_DEFINED_wglGetCurrentReadDCARB #define GLEE_C_DEFINED_wglGetCurrentReadDCARB HDC __stdcall GLee_Lazy_wglGetCurrentReadDCARB(void) {if (GLeeInit()) return wglGetCurrentReadDCARB(); return (HDC)0;} GLEEPFNWGLGETCURRENTREADDCARBPROC GLeeFuncPtr_wglGetCurrentReadDCARB=GLee_Lazy_wglGetCurrentReadDCARB; #endif #endif /* WGL_ARB_pbuffer */ #ifdef __GLEE_WGL_ARB_pbuffer #ifndef GLEE_C_DEFINED_wglCreatePbufferARB #define GLEE_C_DEFINED_wglCreatePbufferARB HPBUFFERARB __stdcall GLee_Lazy_wglCreatePbufferARB(HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int * piAttribList) {if (GLeeInit()) return wglCreatePbufferARB(hDC, iPixelFormat, iWidth, iHeight, piAttribList); return (HPBUFFERARB)0;} GLEEPFNWGLCREATEPBUFFERARBPROC GLeeFuncPtr_wglCreatePbufferARB=GLee_Lazy_wglCreatePbufferARB; #endif #ifndef GLEE_C_DEFINED_wglGetPbufferDCARB #define GLEE_C_DEFINED_wglGetPbufferDCARB HDC __stdcall GLee_Lazy_wglGetPbufferDCARB(HPBUFFERARB hPbuffer) {if (GLeeInit()) return wglGetPbufferDCARB(hPbuffer); return (HDC)0;} GLEEPFNWGLGETPBUFFERDCARBPROC GLeeFuncPtr_wglGetPbufferDCARB=GLee_Lazy_wglGetPbufferDCARB; #endif #ifndef GLEE_C_DEFINED_wglReleasePbufferDCARB #define GLEE_C_DEFINED_wglReleasePbufferDCARB int __stdcall GLee_Lazy_wglReleasePbufferDCARB(HPBUFFERARB hPbuffer, HDC hDC) {if (GLeeInit()) return wglReleasePbufferDCARB(hPbuffer, hDC); return (int)0;} GLEEPFNWGLRELEASEPBUFFERDCARBPROC GLeeFuncPtr_wglReleasePbufferDCARB=GLee_Lazy_wglReleasePbufferDCARB; #endif #ifndef GLEE_C_DEFINED_wglDestroyPbufferARB #define GLEE_C_DEFINED_wglDestroyPbufferARB BOOL __stdcall GLee_Lazy_wglDestroyPbufferARB(HPBUFFERARB hPbuffer) {if (GLeeInit()) return wglDestroyPbufferARB(hPbuffer); return (BOOL)0;} GLEEPFNWGLDESTROYPBUFFERARBPROC GLeeFuncPtr_wglDestroyPbufferARB=GLee_Lazy_wglDestroyPbufferARB; #endif #ifndef GLEE_C_DEFINED_wglQueryPbufferARB #define GLEE_C_DEFINED_wglQueryPbufferARB BOOL __stdcall GLee_Lazy_wglQueryPbufferARB(HPBUFFERARB hPbuffer, int iAttribute, int * piValue) {if (GLeeInit()) return wglQueryPbufferARB(hPbuffer, iAttribute, piValue); return (BOOL)0;} GLEEPFNWGLQUERYPBUFFERARBPROC GLeeFuncPtr_wglQueryPbufferARB=GLee_Lazy_wglQueryPbufferARB; #endif #endif /* WGL_ARB_render_texture */ #ifdef __GLEE_WGL_ARB_render_texture #ifndef GLEE_C_DEFINED_wglBindTexImageARB #define GLEE_C_DEFINED_wglBindTexImageARB BOOL __stdcall GLee_Lazy_wglBindTexImageARB(HPBUFFERARB hPbuffer, int iBuffer) {if (GLeeInit()) return wglBindTexImageARB(hPbuffer, iBuffer); return (BOOL)0;} GLEEPFNWGLBINDTEXIMAGEARBPROC GLeeFuncPtr_wglBindTexImageARB=GLee_Lazy_wglBindTexImageARB; #endif #ifndef GLEE_C_DEFINED_wglReleaseTexImageARB #define GLEE_C_DEFINED_wglReleaseTexImageARB BOOL __stdcall GLee_Lazy_wglReleaseTexImageARB(HPBUFFERARB hPbuffer, int iBuffer) {if (GLeeInit()) return wglReleaseTexImageARB(hPbuffer, iBuffer); return (BOOL)0;} GLEEPFNWGLRELEASETEXIMAGEARBPROC GLeeFuncPtr_wglReleaseTexImageARB=GLee_Lazy_wglReleaseTexImageARB; #endif #ifndef GLEE_C_DEFINED_wglSetPbufferAttribARB #define GLEE_C_DEFINED_wglSetPbufferAttribARB BOOL __stdcall GLee_Lazy_wglSetPbufferAttribARB(HPBUFFERARB hPbuffer, const int * piAttribList) {if (GLeeInit()) return wglSetPbufferAttribARB(hPbuffer, piAttribList); return (BOOL)0;} GLEEPFNWGLSETPBUFFERATTRIBARBPROC GLeeFuncPtr_wglSetPbufferAttribARB=GLee_Lazy_wglSetPbufferAttribARB; #endif #endif /* WGL_ARB_pixel_format_float */ #ifdef __GLEE_WGL_ARB_pixel_format_float #endif /* WGL_ARB_framebuffer_sRGB */ #ifdef __GLEE_WGL_ARB_framebuffer_sRGB #endif /* WGL_ARB_create_context */ #ifdef __GLEE_WGL_ARB_create_context #ifndef GLEE_C_DEFINED_wglCreateContextAttribsARB #define GLEE_C_DEFINED_wglCreateContextAttribsARB HGLRC __stdcall GLee_Lazy_wglCreateContextAttribsARB(HDC hDC, HGLRC hShareContext, const int * attribList) {if (GLeeInit()) return wglCreateContextAttribsARB(hDC, hShareContext, attribList); return (HGLRC)0;} GLEEPFNWGLCREATECONTEXTATTRIBSARBPROC GLeeFuncPtr_wglCreateContextAttribsARB=GLee_Lazy_wglCreateContextAttribsARB; #endif #endif /* WGL_ARB_create_context_profile */ #ifdef __GLEE_WGL_ARB_create_context_profile #endif /* WGL_ARB_create_context_robustness */ #ifdef __GLEE_WGL_ARB_create_context_robustness #endif /* WGL_EXT_make_current_read */ #ifdef __GLEE_WGL_EXT_make_current_read #ifndef GLEE_C_DEFINED_wglMakeContextCurrentEXT #define GLEE_C_DEFINED_wglMakeContextCurrentEXT BOOL __stdcall GLee_Lazy_wglMakeContextCurrentEXT(HDC hDrawDC, HDC hReadDC, HGLRC hglrc) {if (GLeeInit()) return wglMakeContextCurrentEXT(hDrawDC, hReadDC, hglrc); return (BOOL)0;} GLEEPFNWGLMAKECONTEXTCURRENTEXTPROC GLeeFuncPtr_wglMakeContextCurrentEXT=GLee_Lazy_wglMakeContextCurrentEXT; #endif #ifndef GLEE_C_DEFINED_wglGetCurrentReadDCEXT #define GLEE_C_DEFINED_wglGetCurrentReadDCEXT HDC __stdcall GLee_Lazy_wglGetCurrentReadDCEXT(void) {if (GLeeInit()) return wglGetCurrentReadDCEXT(); return (HDC)0;} GLEEPFNWGLGETCURRENTREADDCEXTPROC GLeeFuncPtr_wglGetCurrentReadDCEXT=GLee_Lazy_wglGetCurrentReadDCEXT; #endif #endif /* WGL_EXT_pixel_format */ #ifdef __GLEE_WGL_EXT_pixel_format #ifndef GLEE_C_DEFINED_wglGetPixelFormatAttribivEXT #define GLEE_C_DEFINED_wglGetPixelFormatAttribivEXT BOOL __stdcall GLee_Lazy_wglGetPixelFormatAttribivEXT(HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int * piAttributes, int * piValues) {if (GLeeInit()) return wglGetPixelFormatAttribivEXT(hdc, iPixelFormat, iLayerPlane, nAttributes, piAttributes, piValues); return (BOOL)0;} GLEEPFNWGLGETPIXELFORMATATTRIBIVEXTPROC GLeeFuncPtr_wglGetPixelFormatAttribivEXT=GLee_Lazy_wglGetPixelFormatAttribivEXT; #endif #ifndef GLEE_C_DEFINED_wglGetPixelFormatAttribfvEXT #define GLEE_C_DEFINED_wglGetPixelFormatAttribfvEXT BOOL __stdcall GLee_Lazy_wglGetPixelFormatAttribfvEXT(HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int * piAttributes, FLOAT * pfValues) {if (GLeeInit()) return wglGetPixelFormatAttribfvEXT(hdc, iPixelFormat, iLayerPlane, nAttributes, piAttributes, pfValues); return (BOOL)0;} GLEEPFNWGLGETPIXELFORMATATTRIBFVEXTPROC GLeeFuncPtr_wglGetPixelFormatAttribfvEXT=GLee_Lazy_wglGetPixelFormatAttribfvEXT; #endif #ifndef GLEE_C_DEFINED_wglChoosePixelFormatEXT #define GLEE_C_DEFINED_wglChoosePixelFormatEXT BOOL __stdcall GLee_Lazy_wglChoosePixelFormatEXT(HDC hdc, const int * piAttribIList, const FLOAT * pfAttribFList, UINT nMaxFormats, int * piFormats, UINT * nNumFormats) {if (GLeeInit()) return wglChoosePixelFormatEXT(hdc, piAttribIList, pfAttribFList, nMaxFormats, piFormats, nNumFormats); return (BOOL)0;} GLEEPFNWGLCHOOSEPIXELFORMATEXTPROC GLeeFuncPtr_wglChoosePixelFormatEXT=GLee_Lazy_wglChoosePixelFormatEXT; #endif #endif /* WGL_EXT_pbuffer */ #ifdef __GLEE_WGL_EXT_pbuffer #ifndef GLEE_C_DEFINED_wglCreatePbufferEXT #define GLEE_C_DEFINED_wglCreatePbufferEXT HPBUFFEREXT __stdcall GLee_Lazy_wglCreatePbufferEXT(HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int * piAttribList) {if (GLeeInit()) return wglCreatePbufferEXT(hDC, iPixelFormat, iWidth, iHeight, piAttribList); return (HPBUFFEREXT)0;} GLEEPFNWGLCREATEPBUFFEREXTPROC GLeeFuncPtr_wglCreatePbufferEXT=GLee_Lazy_wglCreatePbufferEXT; #endif #ifndef GLEE_C_DEFINED_wglGetPbufferDCEXT #define GLEE_C_DEFINED_wglGetPbufferDCEXT HDC __stdcall GLee_Lazy_wglGetPbufferDCEXT(HPBUFFEREXT hPbuffer) {if (GLeeInit()) return wglGetPbufferDCEXT(hPbuffer); return (HDC)0;} GLEEPFNWGLGETPBUFFERDCEXTPROC GLeeFuncPtr_wglGetPbufferDCEXT=GLee_Lazy_wglGetPbufferDCEXT; #endif #ifndef GLEE_C_DEFINED_wglReleasePbufferDCEXT #define GLEE_C_DEFINED_wglReleasePbufferDCEXT int __stdcall GLee_Lazy_wglReleasePbufferDCEXT(HPBUFFEREXT hPbuffer, HDC hDC) {if (GLeeInit()) return wglReleasePbufferDCEXT(hPbuffer, hDC); return (int)0;} GLEEPFNWGLRELEASEPBUFFERDCEXTPROC GLeeFuncPtr_wglReleasePbufferDCEXT=GLee_Lazy_wglReleasePbufferDCEXT; #endif #ifndef GLEE_C_DEFINED_wglDestroyPbufferEXT #define GLEE_C_DEFINED_wglDestroyPbufferEXT BOOL __stdcall GLee_Lazy_wglDestroyPbufferEXT(HPBUFFEREXT hPbuffer) {if (GLeeInit()) return wglDestroyPbufferEXT(hPbuffer); return (BOOL)0;} GLEEPFNWGLDESTROYPBUFFEREXTPROC GLeeFuncPtr_wglDestroyPbufferEXT=GLee_Lazy_wglDestroyPbufferEXT; #endif #ifndef GLEE_C_DEFINED_wglQueryPbufferEXT #define GLEE_C_DEFINED_wglQueryPbufferEXT BOOL __stdcall GLee_Lazy_wglQueryPbufferEXT(HPBUFFEREXT hPbuffer, int iAttribute, int * piValue) {if (GLeeInit()) return wglQueryPbufferEXT(hPbuffer, iAttribute, piValue); return (BOOL)0;} GLEEPFNWGLQUERYPBUFFEREXTPROC GLeeFuncPtr_wglQueryPbufferEXT=GLee_Lazy_wglQueryPbufferEXT; #endif #endif /* WGL_EXT_depth_float */ #ifdef __GLEE_WGL_EXT_depth_float #endif /* WGL_3DFX_multisample */ #ifdef __GLEE_WGL_3DFX_multisample #endif /* WGL_EXT_multisample */ #ifdef __GLEE_WGL_EXT_multisample #endif /* WGL_I3D_digital_video_control */ #ifdef __GLEE_WGL_I3D_digital_video_control #ifndef GLEE_C_DEFINED_wglGetDigitalVideoParametersI3D #define GLEE_C_DEFINED_wglGetDigitalVideoParametersI3D BOOL __stdcall GLee_Lazy_wglGetDigitalVideoParametersI3D(HDC hDC, int iAttribute, int * piValue) {if (GLeeInit()) return wglGetDigitalVideoParametersI3D(hDC, iAttribute, piValue); return (BOOL)0;} GLEEPFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC GLeeFuncPtr_wglGetDigitalVideoParametersI3D=GLee_Lazy_wglGetDigitalVideoParametersI3D; #endif #ifndef GLEE_C_DEFINED_wglSetDigitalVideoParametersI3D #define GLEE_C_DEFINED_wglSetDigitalVideoParametersI3D BOOL __stdcall GLee_Lazy_wglSetDigitalVideoParametersI3D(HDC hDC, int iAttribute, const int * piValue) {if (GLeeInit()) return wglSetDigitalVideoParametersI3D(hDC, iAttribute, piValue); return (BOOL)0;} GLEEPFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC GLeeFuncPtr_wglSetDigitalVideoParametersI3D=GLee_Lazy_wglSetDigitalVideoParametersI3D; #endif #endif /* WGL_I3D_gamma */ #ifdef __GLEE_WGL_I3D_gamma #ifndef GLEE_C_DEFINED_wglGetGammaTableParametersI3D #define GLEE_C_DEFINED_wglGetGammaTableParametersI3D BOOL __stdcall GLee_Lazy_wglGetGammaTableParametersI3D(HDC hDC, int iAttribute, int * piValue) {if (GLeeInit()) return wglGetGammaTableParametersI3D(hDC, iAttribute, piValue); return (BOOL)0;} GLEEPFNWGLGETGAMMATABLEPARAMETERSI3DPROC GLeeFuncPtr_wglGetGammaTableParametersI3D=GLee_Lazy_wglGetGammaTableParametersI3D; #endif #ifndef GLEE_C_DEFINED_wglSetGammaTableParametersI3D #define GLEE_C_DEFINED_wglSetGammaTableParametersI3D BOOL __stdcall GLee_Lazy_wglSetGammaTableParametersI3D(HDC hDC, int iAttribute, const int * piValue) {if (GLeeInit()) return wglSetGammaTableParametersI3D(hDC, iAttribute, piValue); return (BOOL)0;} GLEEPFNWGLSETGAMMATABLEPARAMETERSI3DPROC GLeeFuncPtr_wglSetGammaTableParametersI3D=GLee_Lazy_wglSetGammaTableParametersI3D; #endif #ifndef GLEE_C_DEFINED_wglGetGammaTableI3D #define GLEE_C_DEFINED_wglGetGammaTableI3D BOOL __stdcall GLee_Lazy_wglGetGammaTableI3D(HDC hDC, int iEntries, USHORT * puRed, USHORT * puGreen, USHORT * puBlue) {if (GLeeInit()) return wglGetGammaTableI3D(hDC, iEntries, puRed, puGreen, puBlue); return (BOOL)0;} GLEEPFNWGLGETGAMMATABLEI3DPROC GLeeFuncPtr_wglGetGammaTableI3D=GLee_Lazy_wglGetGammaTableI3D; #endif #ifndef GLEE_C_DEFINED_wglSetGammaTableI3D #define GLEE_C_DEFINED_wglSetGammaTableI3D BOOL __stdcall GLee_Lazy_wglSetGammaTableI3D(HDC hDC, int iEntries, const USHORT * puRed, const USHORT * puGreen, const USHORT * puBlue) {if (GLeeInit()) return wglSetGammaTableI3D(hDC, iEntries, puRed, puGreen, puBlue); return (BOOL)0;} GLEEPFNWGLSETGAMMATABLEI3DPROC GLeeFuncPtr_wglSetGammaTableI3D=GLee_Lazy_wglSetGammaTableI3D; #endif #endif /* WGL_I3D_genlock */ #ifdef __GLEE_WGL_I3D_genlock #ifndef GLEE_C_DEFINED_wglEnableGenlockI3D #define GLEE_C_DEFINED_wglEnableGenlockI3D BOOL __stdcall GLee_Lazy_wglEnableGenlockI3D(HDC hDC) {if (GLeeInit()) return wglEnableGenlockI3D(hDC); return (BOOL)0;} GLEEPFNWGLENABLEGENLOCKI3DPROC GLeeFuncPtr_wglEnableGenlockI3D=GLee_Lazy_wglEnableGenlockI3D; #endif #ifndef GLEE_C_DEFINED_wglDisableGenlockI3D #define GLEE_C_DEFINED_wglDisableGenlockI3D BOOL __stdcall GLee_Lazy_wglDisableGenlockI3D(HDC hDC) {if (GLeeInit()) return wglDisableGenlockI3D(hDC); return (BOOL)0;} GLEEPFNWGLDISABLEGENLOCKI3DPROC GLeeFuncPtr_wglDisableGenlockI3D=GLee_Lazy_wglDisableGenlockI3D; #endif #ifndef GLEE_C_DEFINED_wglIsEnabledGenlockI3D #define GLEE_C_DEFINED_wglIsEnabledGenlockI3D BOOL __stdcall GLee_Lazy_wglIsEnabledGenlockI3D(HDC hDC, BOOL * pFlag) {if (GLeeInit()) return wglIsEnabledGenlockI3D(hDC, pFlag); return (BOOL)0;} GLEEPFNWGLISENABLEDGENLOCKI3DPROC GLeeFuncPtr_wglIsEnabledGenlockI3D=GLee_Lazy_wglIsEnabledGenlockI3D; #endif #ifndef GLEE_C_DEFINED_wglGenlockSourceI3D #define GLEE_C_DEFINED_wglGenlockSourceI3D BOOL __stdcall GLee_Lazy_wglGenlockSourceI3D(HDC hDC, UINT uSource) {if (GLeeInit()) return wglGenlockSourceI3D(hDC, uSource); return (BOOL)0;} GLEEPFNWGLGENLOCKSOURCEI3DPROC GLeeFuncPtr_wglGenlockSourceI3D=GLee_Lazy_wglGenlockSourceI3D; #endif #ifndef GLEE_C_DEFINED_wglGetGenlockSourceI3D #define GLEE_C_DEFINED_wglGetGenlockSourceI3D BOOL __stdcall GLee_Lazy_wglGetGenlockSourceI3D(HDC hDC, UINT * uSource) {if (GLeeInit()) return wglGetGenlockSourceI3D(hDC, uSource); return (BOOL)0;} GLEEPFNWGLGETGENLOCKSOURCEI3DPROC GLeeFuncPtr_wglGetGenlockSourceI3D=GLee_Lazy_wglGetGenlockSourceI3D; #endif #ifndef GLEE_C_DEFINED_wglGenlockSourceEdgeI3D #define GLEE_C_DEFINED_wglGenlockSourceEdgeI3D BOOL __stdcall GLee_Lazy_wglGenlockSourceEdgeI3D(HDC hDC, UINT uEdge) {if (GLeeInit()) return wglGenlockSourceEdgeI3D(hDC, uEdge); return (BOOL)0;} GLEEPFNWGLGENLOCKSOURCEEDGEI3DPROC GLeeFuncPtr_wglGenlockSourceEdgeI3D=GLee_Lazy_wglGenlockSourceEdgeI3D; #endif #ifndef GLEE_C_DEFINED_wglGetGenlockSourceEdgeI3D #define GLEE_C_DEFINED_wglGetGenlockSourceEdgeI3D BOOL __stdcall GLee_Lazy_wglGetGenlockSourceEdgeI3D(HDC hDC, UINT * uEdge) {if (GLeeInit()) return wglGetGenlockSourceEdgeI3D(hDC, uEdge); return (BOOL)0;} GLEEPFNWGLGETGENLOCKSOURCEEDGEI3DPROC GLeeFuncPtr_wglGetGenlockSourceEdgeI3D=GLee_Lazy_wglGetGenlockSourceEdgeI3D; #endif #ifndef GLEE_C_DEFINED_wglGenlockSampleRateI3D #define GLEE_C_DEFINED_wglGenlockSampleRateI3D BOOL __stdcall GLee_Lazy_wglGenlockSampleRateI3D(HDC hDC, UINT uRate) {if (GLeeInit()) return wglGenlockSampleRateI3D(hDC, uRate); return (BOOL)0;} GLEEPFNWGLGENLOCKSAMPLERATEI3DPROC GLeeFuncPtr_wglGenlockSampleRateI3D=GLee_Lazy_wglGenlockSampleRateI3D; #endif #ifndef GLEE_C_DEFINED_wglGetGenlockSampleRateI3D #define GLEE_C_DEFINED_wglGetGenlockSampleRateI3D BOOL __stdcall GLee_Lazy_wglGetGenlockSampleRateI3D(HDC hDC, UINT * uRate) {if (GLeeInit()) return wglGetGenlockSampleRateI3D(hDC, uRate); return (BOOL)0;} GLEEPFNWGLGETGENLOCKSAMPLERATEI3DPROC GLeeFuncPtr_wglGetGenlockSampleRateI3D=GLee_Lazy_wglGetGenlockSampleRateI3D; #endif #ifndef GLEE_C_DEFINED_wglGenlockSourceDelayI3D #define GLEE_C_DEFINED_wglGenlockSourceDelayI3D BOOL __stdcall GLee_Lazy_wglGenlockSourceDelayI3D(HDC hDC, UINT uDelay) {if (GLeeInit()) return wglGenlockSourceDelayI3D(hDC, uDelay); return (BOOL)0;} GLEEPFNWGLGENLOCKSOURCEDELAYI3DPROC GLeeFuncPtr_wglGenlockSourceDelayI3D=GLee_Lazy_wglGenlockSourceDelayI3D; #endif #ifndef GLEE_C_DEFINED_wglGetGenlockSourceDelayI3D #define GLEE_C_DEFINED_wglGetGenlockSourceDelayI3D BOOL __stdcall GLee_Lazy_wglGetGenlockSourceDelayI3D(HDC hDC, UINT * uDelay) {if (GLeeInit()) return wglGetGenlockSourceDelayI3D(hDC, uDelay); return (BOOL)0;} GLEEPFNWGLGETGENLOCKSOURCEDELAYI3DPROC GLeeFuncPtr_wglGetGenlockSourceDelayI3D=GLee_Lazy_wglGetGenlockSourceDelayI3D; #endif #ifndef GLEE_C_DEFINED_wglQueryGenlockMaxSourceDelayI3D #define GLEE_C_DEFINED_wglQueryGenlockMaxSourceDelayI3D BOOL __stdcall GLee_Lazy_wglQueryGenlockMaxSourceDelayI3D(HDC hDC, UINT * uMaxLineDelay, UINT * uMaxPixelDelay) {if (GLeeInit()) return wglQueryGenlockMaxSourceDelayI3D(hDC, uMaxLineDelay, uMaxPixelDelay); return (BOOL)0;} GLEEPFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC GLeeFuncPtr_wglQueryGenlockMaxSourceDelayI3D=GLee_Lazy_wglQueryGenlockMaxSourceDelayI3D; #endif #endif /* WGL_I3D_image_buffer */ #ifdef __GLEE_WGL_I3D_image_buffer #ifndef GLEE_C_DEFINED_wglCreateImageBufferI3D #define GLEE_C_DEFINED_wglCreateImageBufferI3D LPVOID __stdcall GLee_Lazy_wglCreateImageBufferI3D(HDC hDC, DWORD dwSize, UINT uFlags) {if (GLeeInit()) return wglCreateImageBufferI3D(hDC, dwSize, uFlags); return (LPVOID)0;} GLEEPFNWGLCREATEIMAGEBUFFERI3DPROC GLeeFuncPtr_wglCreateImageBufferI3D=GLee_Lazy_wglCreateImageBufferI3D; #endif #ifndef GLEE_C_DEFINED_wglDestroyImageBufferI3D #define GLEE_C_DEFINED_wglDestroyImageBufferI3D BOOL __stdcall GLee_Lazy_wglDestroyImageBufferI3D(HDC hDC, LPVOID pAddress) {if (GLeeInit()) return wglDestroyImageBufferI3D(hDC, pAddress); return (BOOL)0;} GLEEPFNWGLDESTROYIMAGEBUFFERI3DPROC GLeeFuncPtr_wglDestroyImageBufferI3D=GLee_Lazy_wglDestroyImageBufferI3D; #endif #ifndef GLEE_C_DEFINED_wglAssociateImageBufferEventsI3D #define GLEE_C_DEFINED_wglAssociateImageBufferEventsI3D BOOL __stdcall GLee_Lazy_wglAssociateImageBufferEventsI3D(HDC hDC, const HANDLE * pEvent, const LPVOID * pAddress, const DWORD * pSize, UINT count) {if (GLeeInit()) return wglAssociateImageBufferEventsI3D(hDC, pEvent, pAddress, pSize, count); return (BOOL)0;} GLEEPFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC GLeeFuncPtr_wglAssociateImageBufferEventsI3D=GLee_Lazy_wglAssociateImageBufferEventsI3D; #endif #ifndef GLEE_C_DEFINED_wglReleaseImageBufferEventsI3D #define GLEE_C_DEFINED_wglReleaseImageBufferEventsI3D BOOL __stdcall GLee_Lazy_wglReleaseImageBufferEventsI3D(HDC hDC, const LPVOID * pAddress, UINT count) {if (GLeeInit()) return wglReleaseImageBufferEventsI3D(hDC, pAddress, count); return (BOOL)0;} GLEEPFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC GLeeFuncPtr_wglReleaseImageBufferEventsI3D=GLee_Lazy_wglReleaseImageBufferEventsI3D; #endif #endif /* WGL_I3D_swap_frame_lock */ #ifdef __GLEE_WGL_I3D_swap_frame_lock #ifndef GLEE_C_DEFINED_wglEnableFrameLockI3D #define GLEE_C_DEFINED_wglEnableFrameLockI3D BOOL __stdcall GLee_Lazy_wglEnableFrameLockI3D(void) {if (GLeeInit()) return wglEnableFrameLockI3D(); return (BOOL)0;} GLEEPFNWGLENABLEFRAMELOCKI3DPROC GLeeFuncPtr_wglEnableFrameLockI3D=GLee_Lazy_wglEnableFrameLockI3D; #endif #ifndef GLEE_C_DEFINED_wglDisableFrameLockI3D #define GLEE_C_DEFINED_wglDisableFrameLockI3D BOOL __stdcall GLee_Lazy_wglDisableFrameLockI3D(void) {if (GLeeInit()) return wglDisableFrameLockI3D(); return (BOOL)0;} GLEEPFNWGLDISABLEFRAMELOCKI3DPROC GLeeFuncPtr_wglDisableFrameLockI3D=GLee_Lazy_wglDisableFrameLockI3D; #endif #ifndef GLEE_C_DEFINED_wglIsEnabledFrameLockI3D #define GLEE_C_DEFINED_wglIsEnabledFrameLockI3D BOOL __stdcall GLee_Lazy_wglIsEnabledFrameLockI3D(BOOL * pFlag) {if (GLeeInit()) return wglIsEnabledFrameLockI3D(pFlag); return (BOOL)0;} GLEEPFNWGLISENABLEDFRAMELOCKI3DPROC GLeeFuncPtr_wglIsEnabledFrameLockI3D=GLee_Lazy_wglIsEnabledFrameLockI3D; #endif #ifndef GLEE_C_DEFINED_wglQueryFrameLockMasterI3D #define GLEE_C_DEFINED_wglQueryFrameLockMasterI3D BOOL __stdcall GLee_Lazy_wglQueryFrameLockMasterI3D(BOOL * pFlag) {if (GLeeInit()) return wglQueryFrameLockMasterI3D(pFlag); return (BOOL)0;} GLEEPFNWGLQUERYFRAMELOCKMASTERI3DPROC GLeeFuncPtr_wglQueryFrameLockMasterI3D=GLee_Lazy_wglQueryFrameLockMasterI3D; #endif #endif /* WGL_NV_render_depth_texture */ #ifdef __GLEE_WGL_NV_render_depth_texture #endif /* WGL_NV_render_texture_rectangle */ #ifdef __GLEE_WGL_NV_render_texture_rectangle #endif /* WGL_ATI_pixel_format_float */ #ifdef __GLEE_WGL_ATI_pixel_format_float #endif /* WGL_NV_float_buffer */ #ifdef __GLEE_WGL_NV_float_buffer #endif /* WGL_3DL_stereo_control */ #ifdef __GLEE_WGL_3DL_stereo_control #ifndef GLEE_C_DEFINED_wglSetStereoEmitterState3DL #define GLEE_C_DEFINED_wglSetStereoEmitterState3DL BOOL __stdcall GLee_Lazy_wglSetStereoEmitterState3DL(HDC hDC, UINT uState) {if (GLeeInit()) return wglSetStereoEmitterState3DL(hDC, uState); return (BOOL)0;} GLEEPFNWGLSETSTEREOEMITTERSTATE3DLPROC GLeeFuncPtr_wglSetStereoEmitterState3DL=GLee_Lazy_wglSetStereoEmitterState3DL; #endif #endif /* WGL_EXT_pixel_format_packed_float */ #ifdef __GLEE_WGL_EXT_pixel_format_packed_float #endif /* WGL_EXT_framebuffer_sRGB */ #ifdef __GLEE_WGL_EXT_framebuffer_sRGB #endif /* WGL_NV_present_video */ #ifdef __GLEE_WGL_NV_present_video #ifndef GLEE_C_DEFINED_wglEnumerateVideoDevicesNV #define GLEE_C_DEFINED_wglEnumerateVideoDevicesNV int __stdcall GLee_Lazy_wglEnumerateVideoDevicesNV(HDC hDC, HVIDEOOUTPUTDEVICENV * phDeviceList) {if (GLeeInit()) return wglEnumerateVideoDevicesNV(hDC, phDeviceList); return (int)0;} GLEEPFNWGLENUMERATEVIDEODEVICESNVPROC GLeeFuncPtr_wglEnumerateVideoDevicesNV=GLee_Lazy_wglEnumerateVideoDevicesNV; #endif #ifndef GLEE_C_DEFINED_wglBindVideoDeviceNV #define GLEE_C_DEFINED_wglBindVideoDeviceNV BOOL __stdcall GLee_Lazy_wglBindVideoDeviceNV(HDC hDC, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int * piAttribList) {if (GLeeInit()) return wglBindVideoDeviceNV(hDC, uVideoSlot, hVideoDevice, piAttribList); return (BOOL)0;} GLEEPFNWGLBINDVIDEODEVICENVPROC GLeeFuncPtr_wglBindVideoDeviceNV=GLee_Lazy_wglBindVideoDeviceNV; #endif #ifndef GLEE_C_DEFINED_wglQueryCurrentContextNV #define GLEE_C_DEFINED_wglQueryCurrentContextNV BOOL __stdcall GLee_Lazy_wglQueryCurrentContextNV(int iAttribute, int * piValue) {if (GLeeInit()) return wglQueryCurrentContextNV(iAttribute, piValue); return (BOOL)0;} GLEEPFNWGLQUERYCURRENTCONTEXTNVPROC GLeeFuncPtr_wglQueryCurrentContextNV=GLee_Lazy_wglQueryCurrentContextNV; #endif #endif /* WGL_NV_swap_group */ #ifdef __GLEE_WGL_NV_swap_group #ifndef GLEE_C_DEFINED_wglJoinSwapGroupNV #define GLEE_C_DEFINED_wglJoinSwapGroupNV BOOL __stdcall GLee_Lazy_wglJoinSwapGroupNV(HDC hDC, GLuint group) {if (GLeeInit()) return wglJoinSwapGroupNV(hDC, group); return (BOOL)0;} GLEEPFNWGLJOINSWAPGROUPNVPROC GLeeFuncPtr_wglJoinSwapGroupNV=GLee_Lazy_wglJoinSwapGroupNV; #endif #ifndef GLEE_C_DEFINED_wglBindSwapBarrierNV #define GLEE_C_DEFINED_wglBindSwapBarrierNV BOOL __stdcall GLee_Lazy_wglBindSwapBarrierNV(GLuint group, GLuint barrier) {if (GLeeInit()) return wglBindSwapBarrierNV(group, barrier); return (BOOL)0;} GLEEPFNWGLBINDSWAPBARRIERNVPROC GLeeFuncPtr_wglBindSwapBarrierNV=GLee_Lazy_wglBindSwapBarrierNV; #endif #ifndef GLEE_C_DEFINED_wglQuerySwapGroupNV #define GLEE_C_DEFINED_wglQuerySwapGroupNV BOOL __stdcall GLee_Lazy_wglQuerySwapGroupNV(HDC hDC, GLuint * group, GLuint * barrier) {if (GLeeInit()) return wglQuerySwapGroupNV(hDC, group, barrier); return (BOOL)0;} GLEEPFNWGLQUERYSWAPGROUPNVPROC GLeeFuncPtr_wglQuerySwapGroupNV=GLee_Lazy_wglQuerySwapGroupNV; #endif #ifndef GLEE_C_DEFINED_wglQueryMaxSwapGroupsNV #define GLEE_C_DEFINED_wglQueryMaxSwapGroupsNV BOOL __stdcall GLee_Lazy_wglQueryMaxSwapGroupsNV(HDC hDC, GLuint * maxGroups, GLuint * maxBarriers) {if (GLeeInit()) return wglQueryMaxSwapGroupsNV(hDC, maxGroups, maxBarriers); return (BOOL)0;} GLEEPFNWGLQUERYMAXSWAPGROUPSNVPROC GLeeFuncPtr_wglQueryMaxSwapGroupsNV=GLee_Lazy_wglQueryMaxSwapGroupsNV; #endif #ifndef GLEE_C_DEFINED_wglQueryFrameCountNV #define GLEE_C_DEFINED_wglQueryFrameCountNV BOOL __stdcall GLee_Lazy_wglQueryFrameCountNV(HDC hDC, GLuint * count) {if (GLeeInit()) return wglQueryFrameCountNV(hDC, count); return (BOOL)0;} GLEEPFNWGLQUERYFRAMECOUNTNVPROC GLeeFuncPtr_wglQueryFrameCountNV=GLee_Lazy_wglQueryFrameCountNV; #endif #ifndef GLEE_C_DEFINED_wglResetFrameCountNV #define GLEE_C_DEFINED_wglResetFrameCountNV BOOL __stdcall GLee_Lazy_wglResetFrameCountNV(HDC hDC) {if (GLeeInit()) return wglResetFrameCountNV(hDC); return (BOOL)0;} GLEEPFNWGLRESETFRAMECOUNTNVPROC GLeeFuncPtr_wglResetFrameCountNV=GLee_Lazy_wglResetFrameCountNV; #endif #endif /* WGL_NV_gpu_affinity */ #ifdef __GLEE_WGL_NV_gpu_affinity #ifndef GLEE_C_DEFINED_wglEnumGpusNV #define GLEE_C_DEFINED_wglEnumGpusNV BOOL __stdcall GLee_Lazy_wglEnumGpusNV(UINT iGpuIndex, HGPUNV * phGpu) {if (GLeeInit()) return wglEnumGpusNV(iGpuIndex, phGpu); return (BOOL)0;} GLEEPFNWGLENUMGPUSNVPROC GLeeFuncPtr_wglEnumGpusNV=GLee_Lazy_wglEnumGpusNV; #endif #ifndef GLEE_C_DEFINED_wglEnumGpuDevicesNV #define GLEE_C_DEFINED_wglEnumGpuDevicesNV BOOL __stdcall GLee_Lazy_wglEnumGpuDevicesNV(HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice) {if (GLeeInit()) return wglEnumGpuDevicesNV(hGpu, iDeviceIndex, lpGpuDevice); return (BOOL)0;} GLEEPFNWGLENUMGPUDEVICESNVPROC GLeeFuncPtr_wglEnumGpuDevicesNV=GLee_Lazy_wglEnumGpuDevicesNV; #endif #ifndef GLEE_C_DEFINED_wglCreateAffinityDCNV #define GLEE_C_DEFINED_wglCreateAffinityDCNV HDC __stdcall GLee_Lazy_wglCreateAffinityDCNV(const HGPUNV * phGpuList) {if (GLeeInit()) return wglCreateAffinityDCNV(phGpuList); return (HDC)0;} GLEEPFNWGLCREATEAFFINITYDCNVPROC GLeeFuncPtr_wglCreateAffinityDCNV=GLee_Lazy_wglCreateAffinityDCNV; #endif #ifndef GLEE_C_DEFINED_wglEnumGpusFromAffinityDCNV #define GLEE_C_DEFINED_wglEnumGpusFromAffinityDCNV BOOL __stdcall GLee_Lazy_wglEnumGpusFromAffinityDCNV(HDC hAffinityDC, UINT iGpuIndex, HGPUNV * hGpu) {if (GLeeInit()) return wglEnumGpusFromAffinityDCNV(hAffinityDC, iGpuIndex, hGpu); return (BOOL)0;} GLEEPFNWGLENUMGPUSFROMAFFINITYDCNVPROC GLeeFuncPtr_wglEnumGpusFromAffinityDCNV=GLee_Lazy_wglEnumGpusFromAffinityDCNV; #endif #ifndef GLEE_C_DEFINED_wglDeleteDCNV #define GLEE_C_DEFINED_wglDeleteDCNV BOOL __stdcall GLee_Lazy_wglDeleteDCNV(HDC hdc) {if (GLeeInit()) return wglDeleteDCNV(hdc); return (BOOL)0;} GLEEPFNWGLDELETEDCNVPROC GLeeFuncPtr_wglDeleteDCNV=GLee_Lazy_wglDeleteDCNV; #endif #endif /* WGL_AMD_gpu_association */ #ifdef __GLEE_WGL_AMD_gpu_association #ifndef GLEE_C_DEFINED_wglGetGPUIDsAMD #define GLEE_C_DEFINED_wglGetGPUIDsAMD UINT __stdcall GLee_Lazy_wglGetGPUIDsAMD(UINT maxCount, UINT * ids) {if (GLeeInit()) return wglGetGPUIDsAMD(maxCount, ids); return (UINT)0;} GLEEPFNWGLGETGPUIDSAMDPROC GLeeFuncPtr_wglGetGPUIDsAMD=GLee_Lazy_wglGetGPUIDsAMD; #endif #ifndef GLEE_C_DEFINED_wglGetGPUInfoAMD #define GLEE_C_DEFINED_wglGetGPUInfoAMD INT __stdcall GLee_Lazy_wglGetGPUInfoAMD(UINT id, int property, GLenum dataType, UINT size, void * data) {if (GLeeInit()) return wglGetGPUInfoAMD(id, property, dataType, size, data); return (INT)0;} GLEEPFNWGLGETGPUINFOAMDPROC GLeeFuncPtr_wglGetGPUInfoAMD=GLee_Lazy_wglGetGPUInfoAMD; #endif #ifndef GLEE_C_DEFINED_wglGetContextGPUIDAMD #define GLEE_C_DEFINED_wglGetContextGPUIDAMD UINT __stdcall GLee_Lazy_wglGetContextGPUIDAMD(HGLRC hglrc) {if (GLeeInit()) return wglGetContextGPUIDAMD(hglrc); return (UINT)0;} GLEEPFNWGLGETCONTEXTGPUIDAMDPROC GLeeFuncPtr_wglGetContextGPUIDAMD=GLee_Lazy_wglGetContextGPUIDAMD; #endif #ifndef GLEE_C_DEFINED_wglCreateAssociatedContextAMD #define GLEE_C_DEFINED_wglCreateAssociatedContextAMD HGLRC __stdcall GLee_Lazy_wglCreateAssociatedContextAMD(UINT id) {if (GLeeInit()) return wglCreateAssociatedContextAMD(id); return (HGLRC)0;} GLEEPFNWGLCREATEASSOCIATEDCONTEXTAMDPROC GLeeFuncPtr_wglCreateAssociatedContextAMD=GLee_Lazy_wglCreateAssociatedContextAMD; #endif #ifndef GLEE_C_DEFINED_wglCreateAssociatedContextAttribsAMD #define GLEE_C_DEFINED_wglCreateAssociatedContextAttribsAMD HGLRC __stdcall GLee_Lazy_wglCreateAssociatedContextAttribsAMD(UINT id, HGLRC hShareContext, const int * attribList) {if (GLeeInit()) return wglCreateAssociatedContextAttribsAMD(id, hShareContext, attribList); return (HGLRC)0;} GLEEPFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC GLeeFuncPtr_wglCreateAssociatedContextAttribsAMD=GLee_Lazy_wglCreateAssociatedContextAttribsAMD; #endif #ifndef GLEE_C_DEFINED_wglDeleteAssociatedContextAMD #define GLEE_C_DEFINED_wglDeleteAssociatedContextAMD BOOL __stdcall GLee_Lazy_wglDeleteAssociatedContextAMD(HGLRC hglrc) {if (GLeeInit()) return wglDeleteAssociatedContextAMD(hglrc); return (BOOL)0;} GLEEPFNWGLDELETEASSOCIATEDCONTEXTAMDPROC GLeeFuncPtr_wglDeleteAssociatedContextAMD=GLee_Lazy_wglDeleteAssociatedContextAMD; #endif #ifndef GLEE_C_DEFINED_wglMakeAssociatedContextCurrentAMD #define GLEE_C_DEFINED_wglMakeAssociatedContextCurrentAMD BOOL __stdcall GLee_Lazy_wglMakeAssociatedContextCurrentAMD(HGLRC hglrc) {if (GLeeInit()) return wglMakeAssociatedContextCurrentAMD(hglrc); return (BOOL)0;} GLEEPFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC GLeeFuncPtr_wglMakeAssociatedContextCurrentAMD=GLee_Lazy_wglMakeAssociatedContextCurrentAMD; #endif #ifndef GLEE_C_DEFINED_wglGetCurrentAssociatedContextAMD #define GLEE_C_DEFINED_wglGetCurrentAssociatedContextAMD HGLRC __stdcall GLee_Lazy_wglGetCurrentAssociatedContextAMD(void) {if (GLeeInit()) return wglGetCurrentAssociatedContextAMD(); return (HGLRC)0;} GLEEPFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC GLeeFuncPtr_wglGetCurrentAssociatedContextAMD=GLee_Lazy_wglGetCurrentAssociatedContextAMD; #endif #ifndef GLEE_C_DEFINED_wglBlitContextFramebufferAMD #define GLEE_C_DEFINED_wglBlitContextFramebufferAMD VOID __stdcall GLee_Lazy_wglBlitContextFramebufferAMD(HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) {if (GLeeInit()) wglBlitContextFramebufferAMD(dstCtx, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);} GLEEPFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC GLeeFuncPtr_wglBlitContextFramebufferAMD=GLee_Lazy_wglBlitContextFramebufferAMD; #endif #endif /* WGL_NV_copy_image */ #ifdef __GLEE_WGL_NV_copy_image #ifndef GLEE_C_DEFINED_wglCopyImageSubDataNV #define GLEE_C_DEFINED_wglCopyImageSubDataNV BOOL __stdcall GLee_Lazy_wglCopyImageSubDataNV(HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth) {if (GLeeInit()) return wglCopyImageSubDataNV(hSrcRC, srcName, srcTarget, srcLevel, srcX, srcY, srcZ, hDstRC, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, width, height, depth); return (BOOL)0;} GLEEPFNWGLCOPYIMAGESUBDATANVPROC GLeeFuncPtr_wglCopyImageSubDataNV=GLee_Lazy_wglCopyImageSubDataNV; #endif #endif /* WGL_NV_multisample_coverage */ #ifdef __GLEE_WGL_NV_multisample_coverage #endif /* WGL_EXT_create_context_es2_profile */ #ifdef __GLEE_WGL_EXT_create_context_es2_profile #endif /* WGL_NV_DX_interop */ #ifdef __GLEE_WGL_NV_DX_interop #ifndef GLEE_C_DEFINED_wglDXSetResourceShareHandleNV #define GLEE_C_DEFINED_wglDXSetResourceShareHandleNV BOOL __stdcall GLee_Lazy_wglDXSetResourceShareHandleNV(void * dxObject, HANDLE shareHandle) {if (GLeeInit()) return wglDXSetResourceShareHandleNV(dxObject, shareHandle); return (BOOL)0;} GLEEPFNWGLDXSETRESOURCESHAREHANDLENVPROC GLeeFuncPtr_wglDXSetResourceShareHandleNV=GLee_Lazy_wglDXSetResourceShareHandleNV; #endif #ifndef GLEE_C_DEFINED_wglDXOpenDeviceNV #define GLEE_C_DEFINED_wglDXOpenDeviceNV HANDLE __stdcall GLee_Lazy_wglDXOpenDeviceNV(void * dxDevice) {if (GLeeInit()) return wglDXOpenDeviceNV(dxDevice); return (HANDLE)0;} GLEEPFNWGLDXOPENDEVICENVPROC GLeeFuncPtr_wglDXOpenDeviceNV=GLee_Lazy_wglDXOpenDeviceNV; #endif #ifndef GLEE_C_DEFINED_wglDXCloseDeviceNV #define GLEE_C_DEFINED_wglDXCloseDeviceNV BOOL __stdcall GLee_Lazy_wglDXCloseDeviceNV(HANDLE hDevice) {if (GLeeInit()) return wglDXCloseDeviceNV(hDevice); return (BOOL)0;} GLEEPFNWGLDXCLOSEDEVICENVPROC GLeeFuncPtr_wglDXCloseDeviceNV=GLee_Lazy_wglDXCloseDeviceNV; #endif #ifndef GLEE_C_DEFINED_wglDXRegisterObjectNV #define GLEE_C_DEFINED_wglDXRegisterObjectNV HANDLE __stdcall GLee_Lazy_wglDXRegisterObjectNV(HANDLE hDevice, void * dxObject, GLuint name, GLenum type, GLenum access) {if (GLeeInit()) return wglDXRegisterObjectNV(hDevice, dxObject, name, type, access); return (HANDLE)0;} GLEEPFNWGLDXREGISTEROBJECTNVPROC GLeeFuncPtr_wglDXRegisterObjectNV=GLee_Lazy_wglDXRegisterObjectNV; #endif #ifndef GLEE_C_DEFINED_wglDXUnregisterObjectNV #define GLEE_C_DEFINED_wglDXUnregisterObjectNV BOOL __stdcall GLee_Lazy_wglDXUnregisterObjectNV(HANDLE hDevice, HANDLE hObject) {if (GLeeInit()) return wglDXUnregisterObjectNV(hDevice, hObject); return (BOOL)0;} GLEEPFNWGLDXUNREGISTEROBJECTNVPROC GLeeFuncPtr_wglDXUnregisterObjectNV=GLee_Lazy_wglDXUnregisterObjectNV; #endif #ifndef GLEE_C_DEFINED_wglDXObjectAccessNV #define GLEE_C_DEFINED_wglDXObjectAccessNV BOOL __stdcall GLee_Lazy_wglDXObjectAccessNV(HANDLE hObject, GLenum access) {if (GLeeInit()) return wglDXObjectAccessNV(hObject, access); return (BOOL)0;} GLEEPFNWGLDXOBJECTACCESSNVPROC GLeeFuncPtr_wglDXObjectAccessNV=GLee_Lazy_wglDXObjectAccessNV; #endif #ifndef GLEE_C_DEFINED_wglDXLockObjectsNV #define GLEE_C_DEFINED_wglDXLockObjectsNV BOOL __stdcall GLee_Lazy_wglDXLockObjectsNV(HANDLE hDevice, GLint count, HANDLE * hObjects) {if (GLeeInit()) return wglDXLockObjectsNV(hDevice, count, hObjects); return (BOOL)0;} GLEEPFNWGLDXLOCKOBJECTSNVPROC GLeeFuncPtr_wglDXLockObjectsNV=GLee_Lazy_wglDXLockObjectsNV; #endif #ifndef GLEE_C_DEFINED_wglDXUnlockObjectsNV #define GLEE_C_DEFINED_wglDXUnlockObjectsNV BOOL __stdcall GLee_Lazy_wglDXUnlockObjectsNV(HANDLE hDevice, GLint count, HANDLE * hObjects) {if (GLeeInit()) return wglDXUnlockObjectsNV(hDevice, count, hObjects); return (BOOL)0;} GLEEPFNWGLDXUNLOCKOBJECTSNVPROC GLeeFuncPtr_wglDXUnlockObjectsNV=GLee_Lazy_wglDXUnlockObjectsNV; #endif #endif /* WGL_NV_DX_interop2 */ #ifdef __GLEE_WGL_NV_DX_interop2 #endif /* WGL_EXT_swap_control_tear */ #ifdef __GLEE_WGL_EXT_swap_control_tear #endif /* WGL_EXT_display_color_table */ #ifdef __GLEE_WGL_EXT_display_color_table #ifndef GLEE_C_DEFINED_wglCreateDisplayColorTableEXT #define GLEE_C_DEFINED_wglCreateDisplayColorTableEXT GLboolean __stdcall GLee_Lazy_wglCreateDisplayColorTableEXT(GLushort id) {if (GLeeInit()) return wglCreateDisplayColorTableEXT(id); return (GLboolean)0;} GLEEPFNWGLCREATEDISPLAYCOLORTABLEEXTPROC GLeeFuncPtr_wglCreateDisplayColorTableEXT=GLee_Lazy_wglCreateDisplayColorTableEXT; #endif #ifndef GLEE_C_DEFINED_wglLoadDisplayColorTableEXT #define GLEE_C_DEFINED_wglLoadDisplayColorTableEXT GLboolean __stdcall GLee_Lazy_wglLoadDisplayColorTableEXT(const GLushort * table, GLuint length) {if (GLeeInit()) return wglLoadDisplayColorTableEXT(table, length); return (GLboolean)0;} GLEEPFNWGLLOADDISPLAYCOLORTABLEEXTPROC GLeeFuncPtr_wglLoadDisplayColorTableEXT=GLee_Lazy_wglLoadDisplayColorTableEXT; #endif #ifndef GLEE_C_DEFINED_wglBindDisplayColorTableEXT #define GLEE_C_DEFINED_wglBindDisplayColorTableEXT GLboolean __stdcall GLee_Lazy_wglBindDisplayColorTableEXT(GLushort id) {if (GLeeInit()) return wglBindDisplayColorTableEXT(id); return (GLboolean)0;} GLEEPFNWGLBINDDISPLAYCOLORTABLEEXTPROC GLeeFuncPtr_wglBindDisplayColorTableEXT=GLee_Lazy_wglBindDisplayColorTableEXT; #endif #ifndef GLEE_C_DEFINED_wglDestroyDisplayColorTableEXT #define GLEE_C_DEFINED_wglDestroyDisplayColorTableEXT VOID __stdcall GLee_Lazy_wglDestroyDisplayColorTableEXT(GLushort id) {if (GLeeInit()) wglDestroyDisplayColorTableEXT(id);} GLEEPFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC GLeeFuncPtr_wglDestroyDisplayColorTableEXT=GLee_Lazy_wglDestroyDisplayColorTableEXT; #endif #endif /* WGL_EXT_extensions_string */ #ifdef __GLEE_WGL_EXT_extensions_string #ifndef GLEE_C_DEFINED_wglGetExtensionsStringEXT #define GLEE_C_DEFINED_wglGetExtensionsStringEXT const char * __stdcall GLee_Lazy_wglGetExtensionsStringEXT(void) {if (GLeeInit()) return wglGetExtensionsStringEXT(); return (const char *)0;} GLEEPFNWGLGETEXTENSIONSSTRINGEXTPROC GLeeFuncPtr_wglGetExtensionsStringEXT=GLee_Lazy_wglGetExtensionsStringEXT; #endif #endif /* WGL_EXT_swap_control */ #ifdef __GLEE_WGL_EXT_swap_control #ifndef GLEE_C_DEFINED_wglSwapIntervalEXT #define GLEE_C_DEFINED_wglSwapIntervalEXT BOOL __stdcall GLee_Lazy_wglSwapIntervalEXT(int interval) {if (GLeeInit()) return wglSwapIntervalEXT(interval); return (BOOL)0;} GLEEPFNWGLSWAPINTERVALEXTPROC GLeeFuncPtr_wglSwapIntervalEXT=GLee_Lazy_wglSwapIntervalEXT; #endif #ifndef GLEE_C_DEFINED_wglGetSwapIntervalEXT #define GLEE_C_DEFINED_wglGetSwapIntervalEXT int __stdcall GLee_Lazy_wglGetSwapIntervalEXT(void) {if (GLeeInit()) return wglGetSwapIntervalEXT(); return (int)0;} GLEEPFNWGLGETSWAPINTERVALEXTPROC GLeeFuncPtr_wglGetSwapIntervalEXT=GLee_Lazy_wglGetSwapIntervalEXT; #endif #endif /* WGL_NV_vertex_array_range */ #ifdef __GLEE_WGL_NV_vertex_array_range #ifndef GLEE_C_DEFINED_wglAllocateMemoryNV #define GLEE_C_DEFINED_wglAllocateMemoryNV void* __stdcall GLee_Lazy_wglAllocateMemoryNV(GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority) {if (GLeeInit()) return wglAllocateMemoryNV(size, readfreq, writefreq, priority); return (void*)0;} GLEEPFNWGLALLOCATEMEMORYNVPROC GLeeFuncPtr_wglAllocateMemoryNV=GLee_Lazy_wglAllocateMemoryNV; #endif #ifndef GLEE_C_DEFINED_wglFreeMemoryNV #define GLEE_C_DEFINED_wglFreeMemoryNV void __stdcall GLee_Lazy_wglFreeMemoryNV(void * pointer) {if (GLeeInit()) wglFreeMemoryNV(pointer);} GLEEPFNWGLFREEMEMORYNVPROC GLeeFuncPtr_wglFreeMemoryNV=GLee_Lazy_wglFreeMemoryNV; #endif #endif /* WGL_OML_sync_control */ #ifdef __GLEE_WGL_OML_sync_control #ifndef GLEE_C_DEFINED_wglGetSyncValuesOML #define GLEE_C_DEFINED_wglGetSyncValuesOML BOOL __stdcall GLee_Lazy_wglGetSyncValuesOML(HDC hdc, INT64 * ust, INT64 * msc, INT64 * sbc) {if (GLeeInit()) return wglGetSyncValuesOML(hdc, ust, msc, sbc); return (BOOL)0;} GLEEPFNWGLGETSYNCVALUESOMLPROC GLeeFuncPtr_wglGetSyncValuesOML=GLee_Lazy_wglGetSyncValuesOML; #endif #ifndef GLEE_C_DEFINED_wglGetMscRateOML #define GLEE_C_DEFINED_wglGetMscRateOML BOOL __stdcall GLee_Lazy_wglGetMscRateOML(HDC hdc, INT32 * numerator, INT32 * denominator) {if (GLeeInit()) return wglGetMscRateOML(hdc, numerator, denominator); return (BOOL)0;} GLEEPFNWGLGETMSCRATEOMLPROC GLeeFuncPtr_wglGetMscRateOML=GLee_Lazy_wglGetMscRateOML; #endif #ifndef GLEE_C_DEFINED_wglSwapBuffersMscOML #define GLEE_C_DEFINED_wglSwapBuffersMscOML INT64 __stdcall GLee_Lazy_wglSwapBuffersMscOML(HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder) {if (GLeeInit()) return wglSwapBuffersMscOML(hdc, target_msc, divisor, remainder); return (INT64)0;} GLEEPFNWGLSWAPBUFFERSMSCOMLPROC GLeeFuncPtr_wglSwapBuffersMscOML=GLee_Lazy_wglSwapBuffersMscOML; #endif #ifndef GLEE_C_DEFINED_wglSwapLayerBuffersMscOML #define GLEE_C_DEFINED_wglSwapLayerBuffersMscOML INT64 __stdcall GLee_Lazy_wglSwapLayerBuffersMscOML(HDC hdc, int fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder) {if (GLeeInit()) return wglSwapLayerBuffersMscOML(hdc, fuPlanes, target_msc, divisor, remainder); return (INT64)0;} GLEEPFNWGLSWAPLAYERBUFFERSMSCOMLPROC GLeeFuncPtr_wglSwapLayerBuffersMscOML=GLee_Lazy_wglSwapLayerBuffersMscOML; #endif #ifndef GLEE_C_DEFINED_wglWaitForMscOML #define GLEE_C_DEFINED_wglWaitForMscOML BOOL __stdcall GLee_Lazy_wglWaitForMscOML(HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 * ust, INT64 * msc, INT64 * sbc) {if (GLeeInit()) return wglWaitForMscOML(hdc, target_msc, divisor, remainder, ust, msc, sbc); return (BOOL)0;} GLEEPFNWGLWAITFORMSCOMLPROC GLeeFuncPtr_wglWaitForMscOML=GLee_Lazy_wglWaitForMscOML; #endif #ifndef GLEE_C_DEFINED_wglWaitForSbcOML #define GLEE_C_DEFINED_wglWaitForSbcOML BOOL __stdcall GLee_Lazy_wglWaitForSbcOML(HDC hdc, INT64 target_sbc, INT64 * ust, INT64 * msc, INT64 * sbc) {if (GLeeInit()) return wglWaitForSbcOML(hdc, target_sbc, ust, msc, sbc); return (BOOL)0;} GLEEPFNWGLWAITFORSBCOMLPROC GLeeFuncPtr_wglWaitForSbcOML=GLee_Lazy_wglWaitForSbcOML; #endif #endif /* WGL_I3D_swap_frame_usage */ #ifdef __GLEE_WGL_I3D_swap_frame_usage #ifndef GLEE_C_DEFINED_wglGetFrameUsageI3D #define GLEE_C_DEFINED_wglGetFrameUsageI3D BOOL __stdcall GLee_Lazy_wglGetFrameUsageI3D(float * pUsage) {if (GLeeInit()) return wglGetFrameUsageI3D(pUsage); return (BOOL)0;} GLEEPFNWGLGETFRAMEUSAGEI3DPROC GLeeFuncPtr_wglGetFrameUsageI3D=GLee_Lazy_wglGetFrameUsageI3D; #endif #ifndef GLEE_C_DEFINED_wglBeginFrameTrackingI3D #define GLEE_C_DEFINED_wglBeginFrameTrackingI3D BOOL __stdcall GLee_Lazy_wglBeginFrameTrackingI3D(void) {if (GLeeInit()) return wglBeginFrameTrackingI3D(); return (BOOL)0;} GLEEPFNWGLBEGINFRAMETRACKINGI3DPROC GLeeFuncPtr_wglBeginFrameTrackingI3D=GLee_Lazy_wglBeginFrameTrackingI3D; #endif #ifndef GLEE_C_DEFINED_wglEndFrameTrackingI3D #define GLEE_C_DEFINED_wglEndFrameTrackingI3D BOOL __stdcall GLee_Lazy_wglEndFrameTrackingI3D(void) {if (GLeeInit()) return wglEndFrameTrackingI3D(); return (BOOL)0;} GLEEPFNWGLENDFRAMETRACKINGI3DPROC GLeeFuncPtr_wglEndFrameTrackingI3D=GLee_Lazy_wglEndFrameTrackingI3D; #endif #ifndef GLEE_C_DEFINED_wglQueryFrameTrackingI3D #define GLEE_C_DEFINED_wglQueryFrameTrackingI3D BOOL __stdcall GLee_Lazy_wglQueryFrameTrackingI3D(DWORD * pFrameCount, DWORD * pMissedFrames, float * pLastMissedUsage) {if (GLeeInit()) return wglQueryFrameTrackingI3D(pFrameCount, pMissedFrames, pLastMissedUsage); return (BOOL)0;} GLEEPFNWGLQUERYFRAMETRACKINGI3DPROC GLeeFuncPtr_wglQueryFrameTrackingI3D=GLee_Lazy_wglQueryFrameTrackingI3D; #endif #endif /* WGL_NV_video_output */ #ifdef __GLEE_WGL_NV_video_output #ifndef GLEE_C_DEFINED_wglGetVideoDeviceNV #define GLEE_C_DEFINED_wglGetVideoDeviceNV BOOL __stdcall GLee_Lazy_wglGetVideoDeviceNV(HDC hDC, int numDevices, HPVIDEODEV * hVideoDevice) {if (GLeeInit()) return wglGetVideoDeviceNV(hDC, numDevices, hVideoDevice); return (BOOL)0;} GLEEPFNWGLGETVIDEODEVICENVPROC GLeeFuncPtr_wglGetVideoDeviceNV=GLee_Lazy_wglGetVideoDeviceNV; #endif #ifndef GLEE_C_DEFINED_wglReleaseVideoDeviceNV #define GLEE_C_DEFINED_wglReleaseVideoDeviceNV BOOL __stdcall GLee_Lazy_wglReleaseVideoDeviceNV(HPVIDEODEV hVideoDevice) {if (GLeeInit()) return wglReleaseVideoDeviceNV(hVideoDevice); return (BOOL)0;} GLEEPFNWGLRELEASEVIDEODEVICENVPROC GLeeFuncPtr_wglReleaseVideoDeviceNV=GLee_Lazy_wglReleaseVideoDeviceNV; #endif #ifndef GLEE_C_DEFINED_wglBindVideoImageNV #define GLEE_C_DEFINED_wglBindVideoImageNV BOOL __stdcall GLee_Lazy_wglBindVideoImageNV(HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer) {if (GLeeInit()) return wglBindVideoImageNV(hVideoDevice, hPbuffer, iVideoBuffer); return (BOOL)0;} GLEEPFNWGLBINDVIDEOIMAGENVPROC GLeeFuncPtr_wglBindVideoImageNV=GLee_Lazy_wglBindVideoImageNV; #endif #ifndef GLEE_C_DEFINED_wglReleaseVideoImageNV #define GLEE_C_DEFINED_wglReleaseVideoImageNV BOOL __stdcall GLee_Lazy_wglReleaseVideoImageNV(HPBUFFERARB hPbuffer, int iVideoBuffer) {if (GLeeInit()) return wglReleaseVideoImageNV(hPbuffer, iVideoBuffer); return (BOOL)0;} GLEEPFNWGLRELEASEVIDEOIMAGENVPROC GLeeFuncPtr_wglReleaseVideoImageNV=GLee_Lazy_wglReleaseVideoImageNV; #endif #ifndef GLEE_C_DEFINED_wglSendPbufferToVideoNV #define GLEE_C_DEFINED_wglSendPbufferToVideoNV BOOL __stdcall GLee_Lazy_wglSendPbufferToVideoNV(HPBUFFERARB hPbuffer, int iBufferType, unsigned long * pulCounterPbuffer, BOOL bBlock) {if (GLeeInit()) return wglSendPbufferToVideoNV(hPbuffer, iBufferType, pulCounterPbuffer, bBlock); return (BOOL)0;} GLEEPFNWGLSENDPBUFFERTOVIDEONVPROC GLeeFuncPtr_wglSendPbufferToVideoNV=GLee_Lazy_wglSendPbufferToVideoNV; #endif #ifndef GLEE_C_DEFINED_wglGetVideoInfoNV #define GLEE_C_DEFINED_wglGetVideoInfoNV BOOL __stdcall GLee_Lazy_wglGetVideoInfoNV(HPVIDEODEV hpVideoDevice, unsigned long * pulCounterOutputPbuffer, unsigned long * pulCounterOutputVideo) {if (GLeeInit()) return wglGetVideoInfoNV(hpVideoDevice, pulCounterOutputPbuffer, pulCounterOutputVideo); return (BOOL)0;} GLEEPFNWGLGETVIDEOINFONVPROC GLeeFuncPtr_wglGetVideoInfoNV=GLee_Lazy_wglGetVideoInfoNV; #endif #endif #elif defined(__APPLE__) || defined(__APPLE_CC__) #else /* GLX */ /* Extension querying variables */ GLboolean _GLEE_GLX_VERSION_1_3 = GL_FALSE; GLboolean _GLEE_GLX_VERSION_1_4 = GL_FALSE; GLboolean _GLEE_GLX_ARB_multisample = GL_FALSE; GLboolean _GLEE_GLX_ARB_vertex_buffer_object = GL_FALSE; GLboolean _GLEE_GLX_ARB_fbconfig_float = GL_FALSE; GLboolean _GLEE_GLX_ARB_framebuffer_sRGB = GL_FALSE; GLboolean _GLEE_GLX_ARB_create_context = GL_FALSE; GLboolean _GLEE_GLX_ARB_create_context_profile = GL_FALSE; GLboolean _GLEE_GLX_ARB_create_context_robustness = GL_FALSE; GLboolean _GLEE_GLX_SGIS_multisample = GL_FALSE; GLboolean _GLEE_GLX_EXT_visual_info = GL_FALSE; GLboolean _GLEE_GLX_SGI_swap_control = GL_FALSE; GLboolean _GLEE_GLX_SGI_video_sync = GL_FALSE; GLboolean _GLEE_GLX_SGI_make_current_read = GL_FALSE; GLboolean _GLEE_GLX_EXT_visual_rating = GL_FALSE; GLboolean _GLEE_GLX_EXT_import_context = GL_FALSE; GLboolean _GLEE_GLX_SGIX_fbconfig = GL_FALSE; GLboolean _GLEE_GLX_SGIX_pbuffer = GL_FALSE; GLboolean _GLEE_GLX_SGI_cushion = GL_FALSE; GLboolean _GLEE_GLX_SGIX_video_resize = GL_FALSE; GLboolean _GLEE_GLX_SGIX_swap_group = GL_FALSE; GLboolean _GLEE_GLX_SGIX_swap_barrier = GL_FALSE; GLboolean _GLEE_GLX_SGIS_blended_overlay = GL_FALSE; GLboolean _GLEE_GLX_SGIS_shared_multisample = GL_FALSE; GLboolean _GLEE_GLX_SUN_get_transparent_index = GL_FALSE; GLboolean _GLEE_GLX_3DFX_multisample = GL_FALSE; GLboolean _GLEE_GLX_MESA_copy_sub_buffer = GL_FALSE; GLboolean _GLEE_GLX_MESA_pixmap_colormap = GL_FALSE; GLboolean _GLEE_GLX_MESA_release_buffers = GL_FALSE; GLboolean _GLEE_GLX_MESA_set_3dfx_mode = GL_FALSE; GLboolean _GLEE_GLX_SGIX_visual_select_group = GL_FALSE; GLboolean _GLEE_GLX_OML_swap_method = GL_FALSE; GLboolean _GLEE_GLX_OML_sync_control = GL_FALSE; GLboolean _GLEE_GLX_NV_float_buffer = GL_FALSE; GLboolean _GLEE_GLX_SGIX_hyperpipe = GL_FALSE; GLboolean _GLEE_GLX_MESA_agp_offset = GL_FALSE; GLboolean _GLEE_GLX_EXT_fbconfig_packed_float = GL_FALSE; GLboolean _GLEE_GLX_EXT_framebuffer_sRGB = GL_FALSE; GLboolean _GLEE_GLX_EXT_texture_from_pixmap = GL_FALSE; GLboolean _GLEE_GLX_NV_present_video = GL_FALSE; GLboolean _GLEE_GLX_NV_video_out = GL_FALSE; GLboolean _GLEE_GLX_NV_swap_group = GL_FALSE; GLboolean _GLEE_GLX_NV_video_capture = GL_FALSE; GLboolean _GLEE_GLX_EXT_swap_control = GL_FALSE; GLboolean _GLEE_GLX_NV_copy_image = GL_FALSE; GLboolean _GLEE_GLX_INTEL_swap_event = GL_FALSE; GLboolean _GLEE_GLX_NV_multisample_coverage = GL_FALSE; GLboolean _GLEE_GLX_AMD_gpu_association = GL_FALSE; GLboolean _GLEE_GLX_EXT_create_context_es2_profile = GL_FALSE; GLboolean _GLEE_GLX_EXT_create_context_es_profile = GL_FALSE; GLboolean _GLEE_GLX_EXT_swap_control_tear = GL_FALSE; GLboolean _GLEE_GLX_EXT_buffer_age = GL_FALSE; GLboolean _GLEE_GLX_NV_video_output = GL_FALSE; /* GLX Extension names */ char __GLeeGLXExtensionNames[53][35]={ "GLX_VERSION_1_3", "GLX_VERSION_1_4", "GLX_ARB_multisample", "GLX_ARB_vertex_buffer_object", "GLX_ARB_fbconfig_float", "GLX_ARB_framebuffer_sRGB", "GLX_ARB_create_context", "GLX_ARB_create_context_profile", "GLX_ARB_create_context_robustness", "GLX_SGIS_multisample", "GLX_EXT_visual_info", "GLX_SGI_swap_control", "GLX_SGI_video_sync", "GLX_SGI_make_current_read", "GLX_EXT_visual_rating", "GLX_EXT_import_context", "GLX_SGIX_fbconfig", "GLX_SGIX_pbuffer", "GLX_SGI_cushion", "GLX_SGIX_video_resize", "GLX_SGIX_swap_group", "GLX_SGIX_swap_barrier", "GLX_SGIS_blended_overlay", "GLX_SGIS_shared_multisample", "GLX_SUN_get_transparent_index", "GLX_3DFX_multisample", "GLX_MESA_copy_sub_buffer", "GLX_MESA_pixmap_colormap", "GLX_MESA_release_buffers", "GLX_MESA_set_3dfx_mode", "GLX_SGIX_visual_select_group", "GLX_OML_swap_method", "GLX_OML_sync_control", "GLX_NV_float_buffer", "GLX_SGIX_hyperpipe", "GLX_MESA_agp_offset", "GLX_EXT_fbconfig_packed_float", "GLX_EXT_framebuffer_sRGB", "GLX_EXT_texture_from_pixmap", "GLX_NV_present_video", "GLX_NV_video_out", "GLX_NV_swap_group", "GLX_NV_video_capture", "GLX_EXT_swap_control", "GLX_NV_copy_image", "GLX_INTEL_swap_event", "GLX_NV_multisample_coverage", "GLX_AMD_gpu_association", "GLX_EXT_create_context_es2_profile", "GLX_EXT_create_context_es_profile", "GLX_EXT_swap_control_tear", "GLX_EXT_buffer_age", "GLX_NV_video_output" }; int __GLeeGLXNumExtensions=53; /* GLX_VERSION_1_3 */ #ifdef __GLEE_GLX_VERSION_1_3 #ifndef GLEE_C_DEFINED_glXGetFBConfigs #define GLEE_C_DEFINED_glXGetFBConfigs GLXFBConfig * __stdcall GLee_Lazy_glXGetFBConfigs(Display * dpy, int screen, int * nelements) {if (GLeeInit()) return glXGetFBConfigs(dpy, screen, nelements); return (GLXFBConfig *)0;} GLEEPFNGLXGETFBCONFIGSPROC GLeeFuncPtr_glXGetFBConfigs=GLee_Lazy_glXGetFBConfigs; #endif #ifndef GLEE_C_DEFINED_glXChooseFBConfig #define GLEE_C_DEFINED_glXChooseFBConfig GLXFBConfig * __stdcall GLee_Lazy_glXChooseFBConfig(Display * dpy, int screen, const int * attrib_list, int * nelements) {if (GLeeInit()) return glXChooseFBConfig(dpy, screen, attrib_list, nelements); return (GLXFBConfig *)0;} GLEEPFNGLXCHOOSEFBCONFIGPROC GLeeFuncPtr_glXChooseFBConfig=GLee_Lazy_glXChooseFBConfig; #endif #ifndef GLEE_C_DEFINED_glXGetFBConfigAttrib #define GLEE_C_DEFINED_glXGetFBConfigAttrib int __stdcall GLee_Lazy_glXGetFBConfigAttrib(Display * dpy, GLXFBConfig config, int attribute, int * value) {if (GLeeInit()) return glXGetFBConfigAttrib(dpy, config, attribute, value); return (int)0;} GLEEPFNGLXGETFBCONFIGATTRIBPROC GLeeFuncPtr_glXGetFBConfigAttrib=GLee_Lazy_glXGetFBConfigAttrib; #endif #ifndef GLEE_C_DEFINED_glXGetVisualFromFBConfig #define GLEE_C_DEFINED_glXGetVisualFromFBConfig XVisualInfo * __stdcall GLee_Lazy_glXGetVisualFromFBConfig(Display * dpy, GLXFBConfig config) {if (GLeeInit()) return glXGetVisualFromFBConfig(dpy, config); return (XVisualInfo *)0;} GLEEPFNGLXGETVISUALFROMFBCONFIGPROC GLeeFuncPtr_glXGetVisualFromFBConfig=GLee_Lazy_glXGetVisualFromFBConfig; #endif #ifndef GLEE_C_DEFINED_glXCreateWindow #define GLEE_C_DEFINED_glXCreateWindow GLXWindow __stdcall GLee_Lazy_glXCreateWindow(Display * dpy, GLXFBConfig config, Window win, const int * attrib_list) {if (GLeeInit()) return glXCreateWindow(dpy, config, win, attrib_list); return (GLXWindow)0;} GLEEPFNGLXCREATEWINDOWPROC GLeeFuncPtr_glXCreateWindow=GLee_Lazy_glXCreateWindow; #endif #ifndef GLEE_C_DEFINED_glXDestroyWindow #define GLEE_C_DEFINED_glXDestroyWindow void __stdcall GLee_Lazy_glXDestroyWindow(Display * dpy, GLXWindow win) {if (GLeeInit()) glXDestroyWindow(dpy, win);} GLEEPFNGLXDESTROYWINDOWPROC GLeeFuncPtr_glXDestroyWindow=GLee_Lazy_glXDestroyWindow; #endif #ifndef GLEE_C_DEFINED_glXCreatePixmap #define GLEE_C_DEFINED_glXCreatePixmap GLXPixmap __stdcall GLee_Lazy_glXCreatePixmap(Display * dpy, GLXFBConfig config, Pixmap pixmap, const int * attrib_list) {if (GLeeInit()) return glXCreatePixmap(dpy, config, pixmap, attrib_list); return (GLXPixmap)0;} GLEEPFNGLXCREATEPIXMAPPROC GLeeFuncPtr_glXCreatePixmap=GLee_Lazy_glXCreatePixmap; #endif #ifndef GLEE_C_DEFINED_glXDestroyPixmap #define GLEE_C_DEFINED_glXDestroyPixmap void __stdcall GLee_Lazy_glXDestroyPixmap(Display * dpy, GLXPixmap pixmap) {if (GLeeInit()) glXDestroyPixmap(dpy, pixmap);} GLEEPFNGLXDESTROYPIXMAPPROC GLeeFuncPtr_glXDestroyPixmap=GLee_Lazy_glXDestroyPixmap; #endif #ifndef GLEE_C_DEFINED_glXCreatePbuffer #define GLEE_C_DEFINED_glXCreatePbuffer GLXPbuffer __stdcall GLee_Lazy_glXCreatePbuffer(Display * dpy, GLXFBConfig config, const int * attrib_list) {if (GLeeInit()) return glXCreatePbuffer(dpy, config, attrib_list); return (GLXPbuffer)0;} GLEEPFNGLXCREATEPBUFFERPROC GLeeFuncPtr_glXCreatePbuffer=GLee_Lazy_glXCreatePbuffer; #endif #ifndef GLEE_C_DEFINED_glXDestroyPbuffer #define GLEE_C_DEFINED_glXDestroyPbuffer void __stdcall GLee_Lazy_glXDestroyPbuffer(Display * dpy, GLXPbuffer pbuf) {if (GLeeInit()) glXDestroyPbuffer(dpy, pbuf);} GLEEPFNGLXDESTROYPBUFFERPROC GLeeFuncPtr_glXDestroyPbuffer=GLee_Lazy_glXDestroyPbuffer; #endif #ifndef GLEE_C_DEFINED_glXQueryDrawable #define GLEE_C_DEFINED_glXQueryDrawable void __stdcall GLee_Lazy_glXQueryDrawable(Display * dpy, GLXDrawable draw, int attribute, unsigned int * value) {if (GLeeInit()) glXQueryDrawable(dpy, draw, attribute, value);} GLEEPFNGLXQUERYDRAWABLEPROC GLeeFuncPtr_glXQueryDrawable=GLee_Lazy_glXQueryDrawable; #endif #ifndef GLEE_C_DEFINED_glXCreateNewContext #define GLEE_C_DEFINED_glXCreateNewContext GLXContext __stdcall GLee_Lazy_glXCreateNewContext(Display * dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct) {if (GLeeInit()) return glXCreateNewContext(dpy, config, render_type, share_list, direct); return (GLXContext)0;} GLEEPFNGLXCREATENEWCONTEXTPROC GLeeFuncPtr_glXCreateNewContext=GLee_Lazy_glXCreateNewContext; #endif #ifndef GLEE_C_DEFINED_glXMakeContextCurrent #define GLEE_C_DEFINED_glXMakeContextCurrent Bool __stdcall GLee_Lazy_glXMakeContextCurrent(Display * dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx) {if (GLeeInit()) return glXMakeContextCurrent(dpy, draw, read, ctx); return (Bool)0;} GLEEPFNGLXMAKECONTEXTCURRENTPROC GLeeFuncPtr_glXMakeContextCurrent=GLee_Lazy_glXMakeContextCurrent; #endif #ifndef GLEE_C_DEFINED_glXGetCurrentReadDrawable #define GLEE_C_DEFINED_glXGetCurrentReadDrawable GLXDrawable __stdcall GLee_Lazy_glXGetCurrentReadDrawable(void) {if (GLeeInit()) return glXGetCurrentReadDrawable(); return (GLXDrawable)0;} GLEEPFNGLXGETCURRENTREADDRAWABLEPROC GLeeFuncPtr_glXGetCurrentReadDrawable=GLee_Lazy_glXGetCurrentReadDrawable; #endif #ifndef GLEE_C_DEFINED_glXGetCurrentDisplay #define GLEE_C_DEFINED_glXGetCurrentDisplay Display * __stdcall GLee_Lazy_glXGetCurrentDisplay(void) {if (GLeeInit()) return glXGetCurrentDisplay(); return (Display *)0;} GLEEPFNGLXGETCURRENTDISPLAYPROC GLeeFuncPtr_glXGetCurrentDisplay=GLee_Lazy_glXGetCurrentDisplay; #endif #ifndef GLEE_C_DEFINED_glXQueryContext #define GLEE_C_DEFINED_glXQueryContext int __stdcall GLee_Lazy_glXQueryContext(Display * dpy, GLXContext ctx, int attribute, int * value) {if (GLeeInit()) return glXQueryContext(dpy, ctx, attribute, value); return (int)0;} GLEEPFNGLXQUERYCONTEXTPROC GLeeFuncPtr_glXQueryContext=GLee_Lazy_glXQueryContext; #endif #ifndef GLEE_C_DEFINED_glXSelectEvent #define GLEE_C_DEFINED_glXSelectEvent void __stdcall GLee_Lazy_glXSelectEvent(Display * dpy, GLXDrawable draw, unsigned long event_mask) {if (GLeeInit()) glXSelectEvent(dpy, draw, event_mask);} GLEEPFNGLXSELECTEVENTPROC GLeeFuncPtr_glXSelectEvent=GLee_Lazy_glXSelectEvent; #endif #ifndef GLEE_C_DEFINED_glXGetSelectedEvent #define GLEE_C_DEFINED_glXGetSelectedEvent void __stdcall GLee_Lazy_glXGetSelectedEvent(Display * dpy, GLXDrawable draw, unsigned long * event_mask) {if (GLeeInit()) glXGetSelectedEvent(dpy, draw, event_mask);} GLEEPFNGLXGETSELECTEDEVENTPROC GLeeFuncPtr_glXGetSelectedEvent=GLee_Lazy_glXGetSelectedEvent; #endif #endif /* GLX_VERSION_1_4 */ #ifdef __GLEE_GLX_VERSION_1_4 #ifndef GLEE_C_DEFINED_glXGetProcAddress #define GLEE_C_DEFINED_glXGetProcAddress __GLXextFuncPtr __stdcall GLee_Lazy_glXGetProcAddress(const GLubyte * procName) {if (GLeeInit()) return glXGetProcAddress(procName); return (__GLXextFuncPtr)0;} GLEEPFNGLXGETPROCADDRESSPROC GLeeFuncPtr_glXGetProcAddress=GLee_Lazy_glXGetProcAddress; #endif #endif /* GLX_ARB_multisample */ #ifdef __GLEE_GLX_ARB_multisample #endif /* GLX_ARB_vertex_buffer_object */ #ifdef __GLEE_GLX_ARB_vertex_buffer_object #endif /* GLX_ARB_fbconfig_float */ #ifdef __GLEE_GLX_ARB_fbconfig_float #endif /* GLX_ARB_framebuffer_sRGB */ #ifdef __GLEE_GLX_ARB_framebuffer_sRGB #endif /* GLX_ARB_create_context */ #ifdef __GLEE_GLX_ARB_create_context #ifndef GLEE_C_DEFINED_glXCreateContextAttribsARB #define GLEE_C_DEFINED_glXCreateContextAttribsARB GLXContext __stdcall GLee_Lazy_glXCreateContextAttribsARB(Display * dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int * attrib_list) {if (GLeeInit()) return glXCreateContextAttribsARB(dpy, config, share_context, direct, attrib_list); return (GLXContext)0;} GLEEPFNGLXCREATECONTEXTATTRIBSARBPROC GLeeFuncPtr_glXCreateContextAttribsARB=GLee_Lazy_glXCreateContextAttribsARB; #endif #endif /* GLX_ARB_create_context_profile */ #ifdef __GLEE_GLX_ARB_create_context_profile #endif /* GLX_ARB_create_context_robustness */ #ifdef __GLEE_GLX_ARB_create_context_robustness #endif /* GLX_SGIS_multisample */ #ifdef __GLEE_GLX_SGIS_multisample #endif /* GLX_EXT_visual_info */ #ifdef __GLEE_GLX_EXT_visual_info #endif /* GLX_SGI_swap_control */ #ifdef __GLEE_GLX_SGI_swap_control #ifndef GLEE_C_DEFINED_glXSwapIntervalSGI #define GLEE_C_DEFINED_glXSwapIntervalSGI int __stdcall GLee_Lazy_glXSwapIntervalSGI(int interval) {if (GLeeInit()) return glXSwapIntervalSGI(interval); return (int)0;} GLEEPFNGLXSWAPINTERVALSGIPROC GLeeFuncPtr_glXSwapIntervalSGI=GLee_Lazy_glXSwapIntervalSGI; #endif #endif /* GLX_SGI_video_sync */ #ifdef __GLEE_GLX_SGI_video_sync #ifndef GLEE_C_DEFINED_glXGetVideoSyncSGI #define GLEE_C_DEFINED_glXGetVideoSyncSGI int __stdcall GLee_Lazy_glXGetVideoSyncSGI(unsigned int * count) {if (GLeeInit()) return glXGetVideoSyncSGI(count); return (int)0;} GLEEPFNGLXGETVIDEOSYNCSGIPROC GLeeFuncPtr_glXGetVideoSyncSGI=GLee_Lazy_glXGetVideoSyncSGI; #endif #ifndef GLEE_C_DEFINED_glXWaitVideoSyncSGI #define GLEE_C_DEFINED_glXWaitVideoSyncSGI int __stdcall GLee_Lazy_glXWaitVideoSyncSGI(int divisor, int remainder, unsigned int * count) {if (GLeeInit()) return glXWaitVideoSyncSGI(divisor, remainder, count); return (int)0;} GLEEPFNGLXWAITVIDEOSYNCSGIPROC GLeeFuncPtr_glXWaitVideoSyncSGI=GLee_Lazy_glXWaitVideoSyncSGI; #endif #endif /* GLX_SGI_make_current_read */ #ifdef __GLEE_GLX_SGI_make_current_read #ifndef GLEE_C_DEFINED_glXMakeCurrentReadSGI #define GLEE_C_DEFINED_glXMakeCurrentReadSGI Bool __stdcall GLee_Lazy_glXMakeCurrentReadSGI(Display * dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx) {if (GLeeInit()) return glXMakeCurrentReadSGI(dpy, draw, read, ctx); return (Bool)0;} GLEEPFNGLXMAKECURRENTREADSGIPROC GLeeFuncPtr_glXMakeCurrentReadSGI=GLee_Lazy_glXMakeCurrentReadSGI; #endif #ifndef GLEE_C_DEFINED_glXGetCurrentReadDrawableSGI #define GLEE_C_DEFINED_glXGetCurrentReadDrawableSGI GLXDrawable __stdcall GLee_Lazy_glXGetCurrentReadDrawableSGI(void) {if (GLeeInit()) return glXGetCurrentReadDrawableSGI(); return (GLXDrawable)0;} GLEEPFNGLXGETCURRENTREADDRAWABLESGIPROC GLeeFuncPtr_glXGetCurrentReadDrawableSGI=GLee_Lazy_glXGetCurrentReadDrawableSGI; #endif #endif /* GLX_EXT_visual_rating */ #ifdef __GLEE_GLX_EXT_visual_rating #endif /* GLX_EXT_import_context */ #ifdef __GLEE_GLX_EXT_import_context #ifndef GLEE_C_DEFINED_glXGetCurrentDisplayEXT #define GLEE_C_DEFINED_glXGetCurrentDisplayEXT Display * __stdcall GLee_Lazy_glXGetCurrentDisplayEXT(void) {if (GLeeInit()) return glXGetCurrentDisplayEXT(); return (Display *)0;} GLEEPFNGLXGETCURRENTDISPLAYEXTPROC GLeeFuncPtr_glXGetCurrentDisplayEXT=GLee_Lazy_glXGetCurrentDisplayEXT; #endif #ifndef GLEE_C_DEFINED_glXQueryContextInfoEXT #define GLEE_C_DEFINED_glXQueryContextInfoEXT int __stdcall GLee_Lazy_glXQueryContextInfoEXT(Display * dpy, GLXContext context, int attribute, int * value) {if (GLeeInit()) return glXQueryContextInfoEXT(dpy, context, attribute, value); return (int)0;} GLEEPFNGLXQUERYCONTEXTINFOEXTPROC GLeeFuncPtr_glXQueryContextInfoEXT=GLee_Lazy_glXQueryContextInfoEXT; #endif #ifndef GLEE_C_DEFINED_glXGetContextIDEXT #define GLEE_C_DEFINED_glXGetContextIDEXT GLEE_GLXContextID __stdcall GLee_Lazy_glXGetContextIDEXT(const GLXContext context) {if (GLeeInit()) return glXGetContextIDEXT(context); return (GLEE_GLXContextID)0;} GLEEPFNGLXGETCONTEXTIDEXTPROC GLeeFuncPtr_glXGetContextIDEXT=GLee_Lazy_glXGetContextIDEXT; #endif #ifndef GLEE_C_DEFINED_glXImportContextEXT #define GLEE_C_DEFINED_glXImportContextEXT GLXContext __stdcall GLee_Lazy_glXImportContextEXT(Display * dpy, GLEE_GLXContextID contextID) {if (GLeeInit()) return glXImportContextEXT(dpy, contextID); return (GLXContext)0;} GLEEPFNGLXIMPORTCONTEXTEXTPROC GLeeFuncPtr_glXImportContextEXT=GLee_Lazy_glXImportContextEXT; #endif #ifndef GLEE_C_DEFINED_glXFreeContextEXT #define GLEE_C_DEFINED_glXFreeContextEXT void __stdcall GLee_Lazy_glXFreeContextEXT(Display * dpy, GLXContext context) {if (GLeeInit()) glXFreeContextEXT(dpy, context);} GLEEPFNGLXFREECONTEXTEXTPROC GLeeFuncPtr_glXFreeContextEXT=GLee_Lazy_glXFreeContextEXT; #endif #endif /* GLX_SGIX_fbconfig */ #ifdef __GLEE_GLX_SGIX_fbconfig #ifndef GLEE_C_DEFINED_glXGetFBConfigAttribSGIX #define GLEE_C_DEFINED_glXGetFBConfigAttribSGIX int __stdcall GLee_Lazy_glXGetFBConfigAttribSGIX(Display * dpy, GLXFBConfigSGIX config, int attribute, int * value) {if (GLeeInit()) return glXGetFBConfigAttribSGIX(dpy, config, attribute, value); return (int)0;} GLEEPFNGLXGETFBCONFIGATTRIBSGIXPROC GLeeFuncPtr_glXGetFBConfigAttribSGIX=GLee_Lazy_glXGetFBConfigAttribSGIX; #endif #ifndef GLEE_C_DEFINED_glXChooseFBConfigSGIX #define GLEE_C_DEFINED_glXChooseFBConfigSGIX GLXFBConfigSGIX * __stdcall GLee_Lazy_glXChooseFBConfigSGIX(Display * dpy, int screen, int * attrib_list, int * nelements) {if (GLeeInit()) return glXChooseFBConfigSGIX(dpy, screen, attrib_list, nelements); return (GLXFBConfigSGIX *)0;} GLEEPFNGLXCHOOSEFBCONFIGSGIXPROC GLeeFuncPtr_glXChooseFBConfigSGIX=GLee_Lazy_glXChooseFBConfigSGIX; #endif #ifndef GLEE_C_DEFINED_glXCreateGLXPixmapWithConfigSGIX #define GLEE_C_DEFINED_glXCreateGLXPixmapWithConfigSGIX GLXPixmap __stdcall GLee_Lazy_glXCreateGLXPixmapWithConfigSGIX(Display * dpy, GLXFBConfigSGIX config, Pixmap pixmap) {if (GLeeInit()) return glXCreateGLXPixmapWithConfigSGIX(dpy, config, pixmap); return (GLXPixmap)0;} GLEEPFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC GLeeFuncPtr_glXCreateGLXPixmapWithConfigSGIX=GLee_Lazy_glXCreateGLXPixmapWithConfigSGIX; #endif #ifndef GLEE_C_DEFINED_glXCreateContextWithConfigSGIX #define GLEE_C_DEFINED_glXCreateContextWithConfigSGIX GLXContext __stdcall GLee_Lazy_glXCreateContextWithConfigSGIX(Display * dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct) {if (GLeeInit()) return glXCreateContextWithConfigSGIX(dpy, config, render_type, share_list, direct); return (GLXContext)0;} GLEEPFNGLXCREATECONTEXTWITHCONFIGSGIXPROC GLeeFuncPtr_glXCreateContextWithConfigSGIX=GLee_Lazy_glXCreateContextWithConfigSGIX; #endif #ifndef GLEE_C_DEFINED_glXGetVisualFromFBConfigSGIX #define GLEE_C_DEFINED_glXGetVisualFromFBConfigSGIX XVisualInfo * __stdcall GLee_Lazy_glXGetVisualFromFBConfigSGIX(Display * dpy, GLXFBConfigSGIX config) {if (GLeeInit()) return glXGetVisualFromFBConfigSGIX(dpy, config); return (XVisualInfo *)0;} GLEEPFNGLXGETVISUALFROMFBCONFIGSGIXPROC GLeeFuncPtr_glXGetVisualFromFBConfigSGIX=GLee_Lazy_glXGetVisualFromFBConfigSGIX; #endif #ifndef GLEE_C_DEFINED_glXGetFBConfigFromVisualSGIX #define GLEE_C_DEFINED_glXGetFBConfigFromVisualSGIX GLXFBConfigSGIX __stdcall GLee_Lazy_glXGetFBConfigFromVisualSGIX(Display * dpy, XVisualInfo * vis) {if (GLeeInit()) return glXGetFBConfigFromVisualSGIX(dpy, vis); return (GLXFBConfigSGIX)0;} GLEEPFNGLXGETFBCONFIGFROMVISUALSGIXPROC GLeeFuncPtr_glXGetFBConfigFromVisualSGIX=GLee_Lazy_glXGetFBConfigFromVisualSGIX; #endif #endif /* GLX_SGIX_pbuffer */ #ifdef __GLEE_GLX_SGIX_pbuffer #ifndef GLEE_C_DEFINED_glXCreateGLXPbufferSGIX #define GLEE_C_DEFINED_glXCreateGLXPbufferSGIX GLXPbufferSGIX __stdcall GLee_Lazy_glXCreateGLXPbufferSGIX(Display * dpy, GLXFBConfigSGIX config, unsigned int width, unsigned int height, int * attrib_list) {if (GLeeInit()) return glXCreateGLXPbufferSGIX(dpy, config, width, height, attrib_list); return (GLXPbufferSGIX)0;} GLEEPFNGLXCREATEGLXPBUFFERSGIXPROC GLeeFuncPtr_glXCreateGLXPbufferSGIX=GLee_Lazy_glXCreateGLXPbufferSGIX; #endif #ifndef GLEE_C_DEFINED_glXDestroyGLXPbufferSGIX #define GLEE_C_DEFINED_glXDestroyGLXPbufferSGIX void __stdcall GLee_Lazy_glXDestroyGLXPbufferSGIX(Display * dpy, GLXPbufferSGIX pbuf) {if (GLeeInit()) glXDestroyGLXPbufferSGIX(dpy, pbuf);} GLEEPFNGLXDESTROYGLXPBUFFERSGIXPROC GLeeFuncPtr_glXDestroyGLXPbufferSGIX=GLee_Lazy_glXDestroyGLXPbufferSGIX; #endif #ifndef GLEE_C_DEFINED_glXQueryGLXPbufferSGIX #define GLEE_C_DEFINED_glXQueryGLXPbufferSGIX int __stdcall GLee_Lazy_glXQueryGLXPbufferSGIX(Display * dpy, GLXPbufferSGIX pbuf, int attribute, unsigned int * value) {if (GLeeInit()) return glXQueryGLXPbufferSGIX(dpy, pbuf, attribute, value); return (int)0;} GLEEPFNGLXQUERYGLXPBUFFERSGIXPROC GLeeFuncPtr_glXQueryGLXPbufferSGIX=GLee_Lazy_glXQueryGLXPbufferSGIX; #endif #ifndef GLEE_C_DEFINED_glXSelectEventSGIX #define GLEE_C_DEFINED_glXSelectEventSGIX void __stdcall GLee_Lazy_glXSelectEventSGIX(Display * dpy, GLXDrawable drawable, unsigned long mask) {if (GLeeInit()) glXSelectEventSGIX(dpy, drawable, mask);} GLEEPFNGLXSELECTEVENTSGIXPROC GLeeFuncPtr_glXSelectEventSGIX=GLee_Lazy_glXSelectEventSGIX; #endif #ifndef GLEE_C_DEFINED_glXGetSelectedEventSGIX #define GLEE_C_DEFINED_glXGetSelectedEventSGIX void __stdcall GLee_Lazy_glXGetSelectedEventSGIX(Display * dpy, GLXDrawable drawable, unsigned long * mask) {if (GLeeInit()) glXGetSelectedEventSGIX(dpy, drawable, mask);} GLEEPFNGLXGETSELECTEDEVENTSGIXPROC GLeeFuncPtr_glXGetSelectedEventSGIX=GLee_Lazy_glXGetSelectedEventSGIX; #endif #endif /* GLX_SGI_cushion */ #ifdef __GLEE_GLX_SGI_cushion #ifndef GLEE_C_DEFINED_glXCushionSGI #define GLEE_C_DEFINED_glXCushionSGI void __stdcall GLee_Lazy_glXCushionSGI(Display * dpy, Window window, float cushion) {if (GLeeInit()) glXCushionSGI(dpy, window, cushion);} GLEEPFNGLXCUSHIONSGIPROC GLeeFuncPtr_glXCushionSGI=GLee_Lazy_glXCushionSGI; #endif #endif /* GLX_SGIX_video_resize */ #ifdef __GLEE_GLX_SGIX_video_resize #ifndef GLEE_C_DEFINED_glXBindChannelToWindowSGIX #define GLEE_C_DEFINED_glXBindChannelToWindowSGIX int __stdcall GLee_Lazy_glXBindChannelToWindowSGIX(Display * display, int screen, int channel, Window window) {if (GLeeInit()) return glXBindChannelToWindowSGIX(display, screen, channel, window); return (int)0;} GLEEPFNGLXBINDCHANNELTOWINDOWSGIXPROC GLeeFuncPtr_glXBindChannelToWindowSGIX=GLee_Lazy_glXBindChannelToWindowSGIX; #endif #ifndef GLEE_C_DEFINED_glXChannelRectSGIX #define GLEE_C_DEFINED_glXChannelRectSGIX int __stdcall GLee_Lazy_glXChannelRectSGIX(Display * display, int screen, int channel, int x, int y, int w, int h) {if (GLeeInit()) return glXChannelRectSGIX(display, screen, channel, x, y, w, h); return (int)0;} GLEEPFNGLXCHANNELRECTSGIXPROC GLeeFuncPtr_glXChannelRectSGIX=GLee_Lazy_glXChannelRectSGIX; #endif #ifndef GLEE_C_DEFINED_glXQueryChannelRectSGIX #define GLEE_C_DEFINED_glXQueryChannelRectSGIX int __stdcall GLee_Lazy_glXQueryChannelRectSGIX(Display * display, int screen, int channel, int * dx, int * dy, int * dw, int * dh) {if (GLeeInit()) return glXQueryChannelRectSGIX(display, screen, channel, dx, dy, dw, dh); return (int)0;} GLEEPFNGLXQUERYCHANNELRECTSGIXPROC GLeeFuncPtr_glXQueryChannelRectSGIX=GLee_Lazy_glXQueryChannelRectSGIX; #endif #ifndef GLEE_C_DEFINED_glXQueryChannelDeltasSGIX #define GLEE_C_DEFINED_glXQueryChannelDeltasSGIX int __stdcall GLee_Lazy_glXQueryChannelDeltasSGIX(Display * display, int screen, int channel, int * x, int * y, int * w, int * h) {if (GLeeInit()) return glXQueryChannelDeltasSGIX(display, screen, channel, x, y, w, h); return (int)0;} GLEEPFNGLXQUERYCHANNELDELTASSGIXPROC GLeeFuncPtr_glXQueryChannelDeltasSGIX=GLee_Lazy_glXQueryChannelDeltasSGIX; #endif #ifndef GLEE_C_DEFINED_glXChannelRectSyncSGIX #define GLEE_C_DEFINED_glXChannelRectSyncSGIX int __stdcall GLee_Lazy_glXChannelRectSyncSGIX(Display * display, int screen, int channel, GLenum synctype) {if (GLeeInit()) return glXChannelRectSyncSGIX(display, screen, channel, synctype); return (int)0;} GLEEPFNGLXCHANNELRECTSYNCSGIXPROC GLeeFuncPtr_glXChannelRectSyncSGIX=GLee_Lazy_glXChannelRectSyncSGIX; #endif #endif /* GLX_SGIX_swap_group */ #ifdef __GLEE_GLX_SGIX_swap_group #ifndef GLEE_C_DEFINED_glXJoinSwapGroupSGIX #define GLEE_C_DEFINED_glXJoinSwapGroupSGIX void __stdcall GLee_Lazy_glXJoinSwapGroupSGIX(Display * dpy, GLXDrawable drawable, GLXDrawable member) {if (GLeeInit()) glXJoinSwapGroupSGIX(dpy, drawable, member);} GLEEPFNGLXJOINSWAPGROUPSGIXPROC GLeeFuncPtr_glXJoinSwapGroupSGIX=GLee_Lazy_glXJoinSwapGroupSGIX; #endif #endif /* GLX_SGIX_swap_barrier */ #ifdef __GLEE_GLX_SGIX_swap_barrier #ifndef GLEE_C_DEFINED_glXBindSwapBarrierSGIX #define GLEE_C_DEFINED_glXBindSwapBarrierSGIX void __stdcall GLee_Lazy_glXBindSwapBarrierSGIX(Display * dpy, GLXDrawable drawable, int barrier) {if (GLeeInit()) glXBindSwapBarrierSGIX(dpy, drawable, barrier);} GLEEPFNGLXBINDSWAPBARRIERSGIXPROC GLeeFuncPtr_glXBindSwapBarrierSGIX=GLee_Lazy_glXBindSwapBarrierSGIX; #endif #ifndef GLEE_C_DEFINED_glXQueryMaxSwapBarriersSGIX #define GLEE_C_DEFINED_glXQueryMaxSwapBarriersSGIX Bool __stdcall GLee_Lazy_glXQueryMaxSwapBarriersSGIX(Display * dpy, int screen, int * max) {if (GLeeInit()) return glXQueryMaxSwapBarriersSGIX(dpy, screen, max); return (Bool)0;} GLEEPFNGLXQUERYMAXSWAPBARRIERSSGIXPROC GLeeFuncPtr_glXQueryMaxSwapBarriersSGIX=GLee_Lazy_glXQueryMaxSwapBarriersSGIX; #endif #endif /* GLX_SGIS_blended_overlay */ #ifdef __GLEE_GLX_SGIS_blended_overlay #endif /* GLX_SGIS_shared_multisample */ #ifdef __GLEE_GLX_SGIS_shared_multisample #endif /* GLX_SUN_get_transparent_index */ #ifdef __GLEE_GLX_SUN_get_transparent_index #ifndef GLEE_C_DEFINED_glXGetTransparentIndexSUN #define GLEE_C_DEFINED_glXGetTransparentIndexSUN Status __stdcall GLee_Lazy_glXGetTransparentIndexSUN(Display * dpy, Window overlay, Window underlay, long * pTransparentIndex) {if (GLeeInit()) return glXGetTransparentIndexSUN(dpy, overlay, underlay, pTransparentIndex); return (Status)0;} GLEEPFNGLXGETTRANSPARENTINDEXSUNPROC GLeeFuncPtr_glXGetTransparentIndexSUN=GLee_Lazy_glXGetTransparentIndexSUN; #endif #endif /* GLX_3DFX_multisample */ #ifdef __GLEE_GLX_3DFX_multisample #endif /* GLX_MESA_copy_sub_buffer */ #ifdef __GLEE_GLX_MESA_copy_sub_buffer #ifndef GLEE_C_DEFINED_glXCopySubBufferMESA #define GLEE_C_DEFINED_glXCopySubBufferMESA void __stdcall GLee_Lazy_glXCopySubBufferMESA(Display * dpy, GLXDrawable drawable, int x, int y, int width, int height) {if (GLeeInit()) glXCopySubBufferMESA(dpy, drawable, x, y, width, height);} GLEEPFNGLXCOPYSUBBUFFERMESAPROC GLeeFuncPtr_glXCopySubBufferMESA=GLee_Lazy_glXCopySubBufferMESA; #endif #endif /* GLX_MESA_pixmap_colormap */ #ifdef __GLEE_GLX_MESA_pixmap_colormap #ifndef GLEE_C_DEFINED_glXCreateGLXPixmapMESA #define GLEE_C_DEFINED_glXCreateGLXPixmapMESA GLXPixmap __stdcall GLee_Lazy_glXCreateGLXPixmapMESA(Display * dpy, XVisualInfo * visual, Pixmap pixmap, Colormap cmap) {if (GLeeInit()) return glXCreateGLXPixmapMESA(dpy, visual, pixmap, cmap); return (GLXPixmap)0;} GLEEPFNGLXCREATEGLXPIXMAPMESAPROC GLeeFuncPtr_glXCreateGLXPixmapMESA=GLee_Lazy_glXCreateGLXPixmapMESA; #endif #endif /* GLX_MESA_release_buffers */ #ifdef __GLEE_GLX_MESA_release_buffers #ifndef GLEE_C_DEFINED_glXReleaseBuffersMESA #define GLEE_C_DEFINED_glXReleaseBuffersMESA Bool __stdcall GLee_Lazy_glXReleaseBuffersMESA(Display * dpy, GLXDrawable drawable) {if (GLeeInit()) return glXReleaseBuffersMESA(dpy, drawable); return (Bool)0;} GLEEPFNGLXRELEASEBUFFERSMESAPROC GLeeFuncPtr_glXReleaseBuffersMESA=GLee_Lazy_glXReleaseBuffersMESA; #endif #endif /* GLX_MESA_set_3dfx_mode */ #ifdef __GLEE_GLX_MESA_set_3dfx_mode #ifndef GLEE_C_DEFINED_glXSet3DfxModeMESA #define GLEE_C_DEFINED_glXSet3DfxModeMESA Bool __stdcall GLee_Lazy_glXSet3DfxModeMESA(int mode) {if (GLeeInit()) return glXSet3DfxModeMESA(mode); return (Bool)0;} GLEEPFNGLXSET3DFXMODEMESAPROC GLeeFuncPtr_glXSet3DfxModeMESA=GLee_Lazy_glXSet3DfxModeMESA; #endif #endif /* GLX_SGIX_visual_select_group */ #ifdef __GLEE_GLX_SGIX_visual_select_group #endif /* GLX_OML_swap_method */ #ifdef __GLEE_GLX_OML_swap_method #endif /* GLX_OML_sync_control */ #ifdef __GLEE_GLX_OML_sync_control #ifndef GLEE_C_DEFINED_glXGetSyncValuesOML #define GLEE_C_DEFINED_glXGetSyncValuesOML Bool __stdcall GLee_Lazy_glXGetSyncValuesOML(Display * dpy, GLXDrawable drawable, int64_t * ust, int64_t * msc, int64_t * sbc) {if (GLeeInit()) return glXGetSyncValuesOML(dpy, drawable, ust, msc, sbc); return (Bool)0;} GLEEPFNGLXGETSYNCVALUESOMLPROC GLeeFuncPtr_glXGetSyncValuesOML=GLee_Lazy_glXGetSyncValuesOML; #endif #ifndef GLEE_C_DEFINED_glXGetMscRateOML #define GLEE_C_DEFINED_glXGetMscRateOML Bool __stdcall GLee_Lazy_glXGetMscRateOML(Display * dpy, GLXDrawable drawable, int32_t * numerator, int32_t * denominator) {if (GLeeInit()) return glXGetMscRateOML(dpy, drawable, numerator, denominator); return (Bool)0;} GLEEPFNGLXGETMSCRATEOMLPROC GLeeFuncPtr_glXGetMscRateOML=GLee_Lazy_glXGetMscRateOML; #endif #ifndef GLEE_C_DEFINED_glXSwapBuffersMscOML #define GLEE_C_DEFINED_glXSwapBuffersMscOML int64_t __stdcall GLee_Lazy_glXSwapBuffersMscOML(Display * dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder) {if (GLeeInit()) return glXSwapBuffersMscOML(dpy, drawable, target_msc, divisor, remainder); return (int64_t)0;} GLEEPFNGLXSWAPBUFFERSMSCOMLPROC GLeeFuncPtr_glXSwapBuffersMscOML=GLee_Lazy_glXSwapBuffersMscOML; #endif #ifndef GLEE_C_DEFINED_glXWaitForMscOML #define GLEE_C_DEFINED_glXWaitForMscOML Bool __stdcall GLee_Lazy_glXWaitForMscOML(Display * dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t * ust, int64_t * msc, int64_t * sbc) {if (GLeeInit()) return glXWaitForMscOML(dpy, drawable, target_msc, divisor, remainder, ust, msc, sbc); return (Bool)0;} GLEEPFNGLXWAITFORMSCOMLPROC GLeeFuncPtr_glXWaitForMscOML=GLee_Lazy_glXWaitForMscOML; #endif #ifndef GLEE_C_DEFINED_glXWaitForSbcOML #define GLEE_C_DEFINED_glXWaitForSbcOML Bool __stdcall GLee_Lazy_glXWaitForSbcOML(Display * dpy, GLXDrawable drawable, int64_t target_sbc, int64_t * ust, int64_t * msc, int64_t * sbc) {if (GLeeInit()) return glXWaitForSbcOML(dpy, drawable, target_sbc, ust, msc, sbc); return (Bool)0;} GLEEPFNGLXWAITFORSBCOMLPROC GLeeFuncPtr_glXWaitForSbcOML=GLee_Lazy_glXWaitForSbcOML; #endif #endif /* GLX_NV_float_buffer */ #ifdef __GLEE_GLX_NV_float_buffer #endif /* GLX_SGIX_hyperpipe */ #ifdef __GLEE_GLX_SGIX_hyperpipe #ifndef GLEE_C_DEFINED_glXQueryHyperpipeNetworkSGIX #define GLEE_C_DEFINED_glXQueryHyperpipeNetworkSGIX GLXHyperpipeNetworkSGIX * __stdcall GLee_Lazy_glXQueryHyperpipeNetworkSGIX(Display * dpy, int * npipes) {if (GLeeInit()) return glXQueryHyperpipeNetworkSGIX(dpy, npipes); return (GLXHyperpipeNetworkSGIX *)0;} GLEEPFNGLXQUERYHYPERPIPENETWORKSGIXPROC GLeeFuncPtr_glXQueryHyperpipeNetworkSGIX=GLee_Lazy_glXQueryHyperpipeNetworkSGIX; #endif #ifndef GLEE_C_DEFINED_glXHyperpipeConfigSGIX #define GLEE_C_DEFINED_glXHyperpipeConfigSGIX int __stdcall GLee_Lazy_glXHyperpipeConfigSGIX(Display * dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX * cfg, int * hpId) {if (GLeeInit()) return glXHyperpipeConfigSGIX(dpy, networkId, npipes, cfg, hpId); return (int)0;} GLEEPFNGLXHYPERPIPECONFIGSGIXPROC GLeeFuncPtr_glXHyperpipeConfigSGIX=GLee_Lazy_glXHyperpipeConfigSGIX; #endif #ifndef GLEE_C_DEFINED_glXQueryHyperpipeConfigSGIX #define GLEE_C_DEFINED_glXQueryHyperpipeConfigSGIX GLXHyperpipeConfigSGIX * __stdcall GLee_Lazy_glXQueryHyperpipeConfigSGIX(Display * dpy, int hpId, int * npipes) {if (GLeeInit()) return glXQueryHyperpipeConfigSGIX(dpy, hpId, npipes); return (GLXHyperpipeConfigSGIX *)0;} GLEEPFNGLXQUERYHYPERPIPECONFIGSGIXPROC GLeeFuncPtr_glXQueryHyperpipeConfigSGIX=GLee_Lazy_glXQueryHyperpipeConfigSGIX; #endif #ifndef GLEE_C_DEFINED_glXDestroyHyperpipeConfigSGIX #define GLEE_C_DEFINED_glXDestroyHyperpipeConfigSGIX int __stdcall GLee_Lazy_glXDestroyHyperpipeConfigSGIX(Display * dpy, int hpId) {if (GLeeInit()) return glXDestroyHyperpipeConfigSGIX(dpy, hpId); return (int)0;} GLEEPFNGLXDESTROYHYPERPIPECONFIGSGIXPROC GLeeFuncPtr_glXDestroyHyperpipeConfigSGIX=GLee_Lazy_glXDestroyHyperpipeConfigSGIX; #endif #ifndef GLEE_C_DEFINED_glXBindHyperpipeSGIX #define GLEE_C_DEFINED_glXBindHyperpipeSGIX int __stdcall GLee_Lazy_glXBindHyperpipeSGIX(Display * dpy, int hpId) {if (GLeeInit()) return glXBindHyperpipeSGIX(dpy, hpId); return (int)0;} GLEEPFNGLXBINDHYPERPIPESGIXPROC GLeeFuncPtr_glXBindHyperpipeSGIX=GLee_Lazy_glXBindHyperpipeSGIX; #endif #ifndef GLEE_C_DEFINED_glXQueryHyperpipeBestAttribSGIX #define GLEE_C_DEFINED_glXQueryHyperpipeBestAttribSGIX int __stdcall GLee_Lazy_glXQueryHyperpipeBestAttribSGIX(Display * dpy, int timeSlice, int attrib, int size, void * attribList, void * returnAttribList) {if (GLeeInit()) return glXQueryHyperpipeBestAttribSGIX(dpy, timeSlice, attrib, size, attribList, returnAttribList); return (int)0;} GLEEPFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC GLeeFuncPtr_glXQueryHyperpipeBestAttribSGIX=GLee_Lazy_glXQueryHyperpipeBestAttribSGIX; #endif #ifndef GLEE_C_DEFINED_glXHyperpipeAttribSGIX #define GLEE_C_DEFINED_glXHyperpipeAttribSGIX int __stdcall GLee_Lazy_glXHyperpipeAttribSGIX(Display * dpy, int timeSlice, int attrib, int size, void * attribList) {if (GLeeInit()) return glXHyperpipeAttribSGIX(dpy, timeSlice, attrib, size, attribList); return (int)0;} GLEEPFNGLXHYPERPIPEATTRIBSGIXPROC GLeeFuncPtr_glXHyperpipeAttribSGIX=GLee_Lazy_glXHyperpipeAttribSGIX; #endif #ifndef GLEE_C_DEFINED_glXQueryHyperpipeAttribSGIX #define GLEE_C_DEFINED_glXQueryHyperpipeAttribSGIX int __stdcall GLee_Lazy_glXQueryHyperpipeAttribSGIX(Display * dpy, int timeSlice, int attrib, int size, void * returnAttribList) {if (GLeeInit()) return glXQueryHyperpipeAttribSGIX(dpy, timeSlice, attrib, size, returnAttribList); return (int)0;} GLEEPFNGLXQUERYHYPERPIPEATTRIBSGIXPROC GLeeFuncPtr_glXQueryHyperpipeAttribSGIX=GLee_Lazy_glXQueryHyperpipeAttribSGIX; #endif #endif /* GLX_MESA_agp_offset */ #ifdef __GLEE_GLX_MESA_agp_offset #ifndef GLEE_C_DEFINED_glXGetAGPOffsetMESA #define GLEE_C_DEFINED_glXGetAGPOffsetMESA unsigned int __stdcall GLee_Lazy_glXGetAGPOffsetMESA(const void * pointer) {if (GLeeInit()) return glXGetAGPOffsetMESA(pointer); return (unsigned int)0;} GLEEPFNGLXGETAGPOFFSETMESAPROC GLeeFuncPtr_glXGetAGPOffsetMESA=GLee_Lazy_glXGetAGPOffsetMESA; #endif #endif /* GLX_EXT_fbconfig_packed_float */ #ifdef __GLEE_GLX_EXT_fbconfig_packed_float #endif /* GLX_EXT_framebuffer_sRGB */ #ifdef __GLEE_GLX_EXT_framebuffer_sRGB #endif /* GLX_EXT_texture_from_pixmap */ #ifdef __GLEE_GLX_EXT_texture_from_pixmap #ifndef GLEE_C_DEFINED_glXBindTexImageEXT #define GLEE_C_DEFINED_glXBindTexImageEXT void __stdcall GLee_Lazy_glXBindTexImageEXT(Display * dpy, GLXDrawable drawable, int buffer, const int * attrib_list) {if (GLeeInit()) glXBindTexImageEXT(dpy, drawable, buffer, attrib_list);} GLEEPFNGLXBINDTEXIMAGEEXTPROC GLeeFuncPtr_glXBindTexImageEXT=GLee_Lazy_glXBindTexImageEXT; #endif #ifndef GLEE_C_DEFINED_glXReleaseTexImageEXT #define GLEE_C_DEFINED_glXReleaseTexImageEXT void __stdcall GLee_Lazy_glXReleaseTexImageEXT(Display * dpy, GLXDrawable drawable, int buffer) {if (GLeeInit()) glXReleaseTexImageEXT(dpy, drawable, buffer);} GLEEPFNGLXRELEASETEXIMAGEEXTPROC GLeeFuncPtr_glXReleaseTexImageEXT=GLee_Lazy_glXReleaseTexImageEXT; #endif #endif /* GLX_NV_present_video */ #ifdef __GLEE_GLX_NV_present_video #ifndef GLEE_C_DEFINED_glXEnumerateVideoDevicesNV #define GLEE_C_DEFINED_glXEnumerateVideoDevicesNV unsigned int * __stdcall GLee_Lazy_glXEnumerateVideoDevicesNV(Display * dpy, int screen, int * nelements) {if (GLeeInit()) return glXEnumerateVideoDevicesNV(dpy, screen, nelements); return (unsigned int *)0;} GLEEPFNGLXENUMERATEVIDEODEVICESNVPROC GLeeFuncPtr_glXEnumerateVideoDevicesNV=GLee_Lazy_glXEnumerateVideoDevicesNV; #endif #ifndef GLEE_C_DEFINED_glXBindVideoDeviceNV #define GLEE_C_DEFINED_glXBindVideoDeviceNV int __stdcall GLee_Lazy_glXBindVideoDeviceNV(Display * dpy, unsigned int video_slot, unsigned int video_device, const int * attrib_list) {if (GLeeInit()) return glXBindVideoDeviceNV(dpy, video_slot, video_device, attrib_list); return (int)0;} GLEEPFNGLXBINDVIDEODEVICENVPROC GLeeFuncPtr_glXBindVideoDeviceNV=GLee_Lazy_glXBindVideoDeviceNV; #endif #endif /* GLX_NV_video_out */ #ifdef __GLEE_GLX_NV_video_out #endif /* GLX_NV_swap_group */ #ifdef __GLEE_GLX_NV_swap_group #ifndef GLEE_C_DEFINED_glXJoinSwapGroupNV #define GLEE_C_DEFINED_glXJoinSwapGroupNV Bool __stdcall GLee_Lazy_glXJoinSwapGroupNV(Display * dpy, GLXDrawable drawable, GLuint group) {if (GLeeInit()) return glXJoinSwapGroupNV(dpy, drawable, group); return (Bool)0;} GLEEPFNGLXJOINSWAPGROUPNVPROC GLeeFuncPtr_glXJoinSwapGroupNV=GLee_Lazy_glXJoinSwapGroupNV; #endif #ifndef GLEE_C_DEFINED_glXBindSwapBarrierNV #define GLEE_C_DEFINED_glXBindSwapBarrierNV Bool __stdcall GLee_Lazy_glXBindSwapBarrierNV(Display * dpy, GLuint group, GLuint barrier) {if (GLeeInit()) return glXBindSwapBarrierNV(dpy, group, barrier); return (Bool)0;} GLEEPFNGLXBINDSWAPBARRIERNVPROC GLeeFuncPtr_glXBindSwapBarrierNV=GLee_Lazy_glXBindSwapBarrierNV; #endif #ifndef GLEE_C_DEFINED_glXQuerySwapGroupNV #define GLEE_C_DEFINED_glXQuerySwapGroupNV Bool __stdcall GLee_Lazy_glXQuerySwapGroupNV(Display * dpy, GLXDrawable drawable, GLuint * group, GLuint * barrier) {if (GLeeInit()) return glXQuerySwapGroupNV(dpy, drawable, group, barrier); return (Bool)0;} GLEEPFNGLXQUERYSWAPGROUPNVPROC GLeeFuncPtr_glXQuerySwapGroupNV=GLee_Lazy_glXQuerySwapGroupNV; #endif #ifndef GLEE_C_DEFINED_glXQueryMaxSwapGroupsNV #define GLEE_C_DEFINED_glXQueryMaxSwapGroupsNV Bool __stdcall GLee_Lazy_glXQueryMaxSwapGroupsNV(Display * dpy, int screen, GLuint * maxGroups, GLuint * maxBarriers) {if (GLeeInit()) return glXQueryMaxSwapGroupsNV(dpy, screen, maxGroups, maxBarriers); return (Bool)0;} GLEEPFNGLXQUERYMAXSWAPGROUPSNVPROC GLeeFuncPtr_glXQueryMaxSwapGroupsNV=GLee_Lazy_glXQueryMaxSwapGroupsNV; #endif #ifndef GLEE_C_DEFINED_glXQueryFrameCountNV #define GLEE_C_DEFINED_glXQueryFrameCountNV Bool __stdcall GLee_Lazy_glXQueryFrameCountNV(Display * dpy, int screen, GLuint * count) {if (GLeeInit()) return glXQueryFrameCountNV(dpy, screen, count); return (Bool)0;} GLEEPFNGLXQUERYFRAMECOUNTNVPROC GLeeFuncPtr_glXQueryFrameCountNV=GLee_Lazy_glXQueryFrameCountNV; #endif #ifndef GLEE_C_DEFINED_glXResetFrameCountNV #define GLEE_C_DEFINED_glXResetFrameCountNV Bool __stdcall GLee_Lazy_glXResetFrameCountNV(Display * dpy, int screen) {if (GLeeInit()) return glXResetFrameCountNV(dpy, screen); return (Bool)0;} GLEEPFNGLXRESETFRAMECOUNTNVPROC GLeeFuncPtr_glXResetFrameCountNV=GLee_Lazy_glXResetFrameCountNV; #endif #endif /* GLX_NV_video_capture */ #ifdef __GLEE_GLX_NV_video_capture #ifndef GLEE_C_DEFINED_glXBindVideoCaptureDeviceNV #define GLEE_C_DEFINED_glXBindVideoCaptureDeviceNV int __stdcall GLee_Lazy_glXBindVideoCaptureDeviceNV(Display * dpy, unsigned int video_capture_slot, GLXVideoCaptureDeviceNV device) {if (GLeeInit()) return glXBindVideoCaptureDeviceNV(dpy, video_capture_slot, device); return (int)0;} GLEEPFNGLXBINDVIDEOCAPTUREDEVICENVPROC GLeeFuncPtr_glXBindVideoCaptureDeviceNV=GLee_Lazy_glXBindVideoCaptureDeviceNV; #endif #ifndef GLEE_C_DEFINED_glXEnumerateVideoCaptureDevicesNV #define GLEE_C_DEFINED_glXEnumerateVideoCaptureDevicesNV GLXVideoCaptureDeviceNV * __stdcall GLee_Lazy_glXEnumerateVideoCaptureDevicesNV(Display * dpy, int screen, int * nelements) {if (GLeeInit()) return glXEnumerateVideoCaptureDevicesNV(dpy, screen, nelements); return (GLXVideoCaptureDeviceNV *)0;} GLEEPFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC GLeeFuncPtr_glXEnumerateVideoCaptureDevicesNV=GLee_Lazy_glXEnumerateVideoCaptureDevicesNV; #endif #ifndef GLEE_C_DEFINED_glXLockVideoCaptureDeviceNV #define GLEE_C_DEFINED_glXLockVideoCaptureDeviceNV void __stdcall GLee_Lazy_glXLockVideoCaptureDeviceNV(Display * dpy, GLXVideoCaptureDeviceNV device) {if (GLeeInit()) glXLockVideoCaptureDeviceNV(dpy, device);} GLEEPFNGLXLOCKVIDEOCAPTUREDEVICENVPROC GLeeFuncPtr_glXLockVideoCaptureDeviceNV=GLee_Lazy_glXLockVideoCaptureDeviceNV; #endif #ifndef GLEE_C_DEFINED_glXQueryVideoCaptureDeviceNV #define GLEE_C_DEFINED_glXQueryVideoCaptureDeviceNV int __stdcall GLee_Lazy_glXQueryVideoCaptureDeviceNV(Display * dpy, GLXVideoCaptureDeviceNV device, int attribute, int * value) {if (GLeeInit()) return glXQueryVideoCaptureDeviceNV(dpy, device, attribute, value); return (int)0;} GLEEPFNGLXQUERYVIDEOCAPTUREDEVICENVPROC GLeeFuncPtr_glXQueryVideoCaptureDeviceNV=GLee_Lazy_glXQueryVideoCaptureDeviceNV; #endif #ifndef GLEE_C_DEFINED_glXReleaseVideoCaptureDeviceNV #define GLEE_C_DEFINED_glXReleaseVideoCaptureDeviceNV void __stdcall GLee_Lazy_glXReleaseVideoCaptureDeviceNV(Display * dpy, GLXVideoCaptureDeviceNV device) {if (GLeeInit()) glXReleaseVideoCaptureDeviceNV(dpy, device);} GLEEPFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC GLeeFuncPtr_glXReleaseVideoCaptureDeviceNV=GLee_Lazy_glXReleaseVideoCaptureDeviceNV; #endif #endif /* GLX_EXT_swap_control */ #ifdef __GLEE_GLX_EXT_swap_control #ifndef GLEE_C_DEFINED_glXSwapIntervalEXT #define GLEE_C_DEFINED_glXSwapIntervalEXT void __stdcall GLee_Lazy_glXSwapIntervalEXT(Display * dpy, GLXDrawable drawable, int interval) {if (GLeeInit()) glXSwapIntervalEXT(dpy, drawable, interval);} GLEEPFNGLXSWAPINTERVALEXTPROC GLeeFuncPtr_glXSwapIntervalEXT=GLee_Lazy_glXSwapIntervalEXT; #endif #endif /* GLX_NV_copy_image */ #ifdef __GLEE_GLX_NV_copy_image #ifndef GLEE_C_DEFINED_glXCopyImageSubDataNV #define GLEE_C_DEFINED_glXCopyImageSubDataNV void __stdcall GLee_Lazy_glXCopyImageSubDataNV(Display * dpy, GLXContext srcCtx, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLXContext dstCtx, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth) {if (GLeeInit()) glXCopyImageSubDataNV(dpy, srcCtx, srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstCtx, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, width, height, depth);} GLEEPFNGLXCOPYIMAGESUBDATANVPROC GLeeFuncPtr_glXCopyImageSubDataNV=GLee_Lazy_glXCopyImageSubDataNV; #endif #endif /* GLX_INTEL_swap_event */ #ifdef __GLEE_GLX_INTEL_swap_event #endif /* GLX_NV_multisample_coverage */ #ifdef __GLEE_GLX_NV_multisample_coverage #endif /* GLX_AMD_gpu_association */ #ifdef __GLEE_GLX_AMD_gpu_association #endif /* GLX_EXT_create_context_es2_profile */ #ifdef __GLEE_GLX_EXT_create_context_es2_profile #endif /* GLX_EXT_create_context_es_profile */ #ifdef __GLEE_GLX_EXT_create_context_es_profile #endif /* GLX_EXT_swap_control_tear */ #ifdef __GLEE_GLX_EXT_swap_control_tear #endif /* GLX_EXT_buffer_age */ #ifdef __GLEE_GLX_EXT_buffer_age #endif /* GLX_NV_video_output */ #ifdef __GLEE_GLX_NV_video_output #ifndef GLEE_C_DEFINED_glXGetVideoDeviceNV #define GLEE_C_DEFINED_glXGetVideoDeviceNV int __stdcall GLee_Lazy_glXGetVideoDeviceNV(Display * dpy, int screen, int numVideoDevices, GLXVideoDeviceNV * pVideoDevice) {if (GLeeInit()) return glXGetVideoDeviceNV(dpy, screen, numVideoDevices, pVideoDevice); return (int)0;} GLEEPFNGLXGETVIDEODEVICENVPROC GLeeFuncPtr_glXGetVideoDeviceNV=GLee_Lazy_glXGetVideoDeviceNV; #endif #ifndef GLEE_C_DEFINED_glXReleaseVideoDeviceNV #define GLEE_C_DEFINED_glXReleaseVideoDeviceNV int __stdcall GLee_Lazy_glXReleaseVideoDeviceNV(Display * dpy, int screen, GLXVideoDeviceNV VideoDevice) {if (GLeeInit()) return glXReleaseVideoDeviceNV(dpy, screen, VideoDevice); return (int)0;} GLEEPFNGLXRELEASEVIDEODEVICENVPROC GLeeFuncPtr_glXReleaseVideoDeviceNV=GLee_Lazy_glXReleaseVideoDeviceNV; #endif #ifndef GLEE_C_DEFINED_glXBindVideoImageNV #define GLEE_C_DEFINED_glXBindVideoImageNV int __stdcall GLee_Lazy_glXBindVideoImageNV(Display * dpy, GLXVideoDeviceNV VideoDevice, GLXPbuffer pbuf, int iVideoBuffer) {if (GLeeInit()) return glXBindVideoImageNV(dpy, VideoDevice, pbuf, iVideoBuffer); return (int)0;} GLEEPFNGLXBINDVIDEOIMAGENVPROC GLeeFuncPtr_glXBindVideoImageNV=GLee_Lazy_glXBindVideoImageNV; #endif #ifndef GLEE_C_DEFINED_glXReleaseVideoImageNV #define GLEE_C_DEFINED_glXReleaseVideoImageNV int __stdcall GLee_Lazy_glXReleaseVideoImageNV(Display * dpy, GLXPbuffer pbuf) {if (GLeeInit()) return glXReleaseVideoImageNV(dpy, pbuf); return (int)0;} GLEEPFNGLXRELEASEVIDEOIMAGENVPROC GLeeFuncPtr_glXReleaseVideoImageNV=GLee_Lazy_glXReleaseVideoImageNV; #endif #ifndef GLEE_C_DEFINED_glXSendPbufferToVideoNV #define GLEE_C_DEFINED_glXSendPbufferToVideoNV int __stdcall GLee_Lazy_glXSendPbufferToVideoNV(Display * dpy, GLXPbuffer pbuf, int iBufferType, unsigned long * pulCounterPbuffer, GLboolean bBlock) {if (GLeeInit()) return glXSendPbufferToVideoNV(dpy, pbuf, iBufferType, pulCounterPbuffer, bBlock); return (int)0;} GLEEPFNGLXSENDPBUFFERTOVIDEONVPROC GLeeFuncPtr_glXSendPbufferToVideoNV=GLee_Lazy_glXSendPbufferToVideoNV; #endif #ifndef GLEE_C_DEFINED_glXGetVideoInfoNV #define GLEE_C_DEFINED_glXGetVideoInfoNV int __stdcall GLee_Lazy_glXGetVideoInfoNV(Display * dpy, int screen, GLXVideoDeviceNV VideoDevice, unsigned long * pulCounterOutputPbuffer, unsigned long * pulCounterOutputVideo) {if (GLeeInit()) return glXGetVideoInfoNV(dpy, screen, VideoDevice, pulCounterOutputPbuffer, pulCounterOutputVideo); return (int)0;} GLEEPFNGLXGETVIDEOINFONVPROC GLeeFuncPtr_glXGetVideoInfoNV=GLee_Lazy_glXGetVideoInfoNV; #endif #endif #endif /* end GLX */ /***************************************************************** * Extension link functions *****************************************************************/ GLuint __GLeeLink_GL_VERSION_1_2(void) { GLint nLinked=0; #ifdef __GLEE_GL_VERSION_1_2 if ((GLeeFuncPtr_glBlendColor = (GLEEPFNGLBLENDCOLORPROC) __GLeeGetProcAddress("glBlendColor"))!=0) nLinked++; if ((GLeeFuncPtr_glBlendEquation = (GLEEPFNGLBLENDEQUATIONPROC) __GLeeGetProcAddress("glBlendEquation"))!=0) nLinked++; if ((GLeeFuncPtr_glDrawRangeElements = (GLEEPFNGLDRAWRANGEELEMENTSPROC) __GLeeGetProcAddress("glDrawRangeElements"))!=0) nLinked++; if ((GLeeFuncPtr_glTexImage3D = (GLEEPFNGLTEXIMAGE3DPROC) __GLeeGetProcAddress("glTexImage3D"))!=0) nLinked++; if ((GLeeFuncPtr_glTexSubImage3D = (GLEEPFNGLTEXSUBIMAGE3DPROC) __GLeeGetProcAddress("glTexSubImage3D"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyTexSubImage3D = (GLEEPFNGLCOPYTEXSUBIMAGE3DPROC) __GLeeGetProcAddress("glCopyTexSubImage3D"))!=0) nLinked++; if ((GLeeFuncPtr_glColorTable = (GLEEPFNGLCOLORTABLEPROC) __GLeeGetProcAddress("glColorTable"))!=0) nLinked++; if ((GLeeFuncPtr_glColorTableParameterfv = (GLEEPFNGLCOLORTABLEPARAMETERFVPROC) __GLeeGetProcAddress("glColorTableParameterfv"))!=0) nLinked++; if ((GLeeFuncPtr_glColorTableParameteriv = (GLEEPFNGLCOLORTABLEPARAMETERIVPROC) __GLeeGetProcAddress("glColorTableParameteriv"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyColorTable = (GLEEPFNGLCOPYCOLORTABLEPROC) __GLeeGetProcAddress("glCopyColorTable"))!=0) nLinked++; if ((GLeeFuncPtr_glGetColorTable = (GLEEPFNGLGETCOLORTABLEPROC) __GLeeGetProcAddress("glGetColorTable"))!=0) nLinked++; if ((GLeeFuncPtr_glGetColorTableParameterfv = (GLEEPFNGLGETCOLORTABLEPARAMETERFVPROC) __GLeeGetProcAddress("glGetColorTableParameterfv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetColorTableParameteriv = (GLEEPFNGLGETCOLORTABLEPARAMETERIVPROC) __GLeeGetProcAddress("glGetColorTableParameteriv"))!=0) nLinked++; if ((GLeeFuncPtr_glColorSubTable = (GLEEPFNGLCOLORSUBTABLEPROC) __GLeeGetProcAddress("glColorSubTable"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyColorSubTable = (GLEEPFNGLCOPYCOLORSUBTABLEPROC) __GLeeGetProcAddress("glCopyColorSubTable"))!=0) nLinked++; if ((GLeeFuncPtr_glConvolutionFilter1D = (GLEEPFNGLCONVOLUTIONFILTER1DPROC) __GLeeGetProcAddress("glConvolutionFilter1D"))!=0) nLinked++; if ((GLeeFuncPtr_glConvolutionFilter2D = (GLEEPFNGLCONVOLUTIONFILTER2DPROC) __GLeeGetProcAddress("glConvolutionFilter2D"))!=0) nLinked++; if ((GLeeFuncPtr_glConvolutionParameterf = (GLEEPFNGLCONVOLUTIONPARAMETERFPROC) __GLeeGetProcAddress("glConvolutionParameterf"))!=0) nLinked++; if ((GLeeFuncPtr_glConvolutionParameterfv = (GLEEPFNGLCONVOLUTIONPARAMETERFVPROC) __GLeeGetProcAddress("glConvolutionParameterfv"))!=0) nLinked++; if ((GLeeFuncPtr_glConvolutionParameteri = (GLEEPFNGLCONVOLUTIONPARAMETERIPROC) __GLeeGetProcAddress("glConvolutionParameteri"))!=0) nLinked++; if ((GLeeFuncPtr_glConvolutionParameteriv = (GLEEPFNGLCONVOLUTIONPARAMETERIVPROC) __GLeeGetProcAddress("glConvolutionParameteriv"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyConvolutionFilter1D = (GLEEPFNGLCOPYCONVOLUTIONFILTER1DPROC) __GLeeGetProcAddress("glCopyConvolutionFilter1D"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyConvolutionFilter2D = (GLEEPFNGLCOPYCONVOLUTIONFILTER2DPROC) __GLeeGetProcAddress("glCopyConvolutionFilter2D"))!=0) nLinked++; if ((GLeeFuncPtr_glGetConvolutionFilter = (GLEEPFNGLGETCONVOLUTIONFILTERPROC) __GLeeGetProcAddress("glGetConvolutionFilter"))!=0) nLinked++; if ((GLeeFuncPtr_glGetConvolutionParameterfv = (GLEEPFNGLGETCONVOLUTIONPARAMETERFVPROC) __GLeeGetProcAddress("glGetConvolutionParameterfv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetConvolutionParameteriv = (GLEEPFNGLGETCONVOLUTIONPARAMETERIVPROC) __GLeeGetProcAddress("glGetConvolutionParameteriv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetSeparableFilter = (GLEEPFNGLGETSEPARABLEFILTERPROC) __GLeeGetProcAddress("glGetSeparableFilter"))!=0) nLinked++; if ((GLeeFuncPtr_glSeparableFilter2D = (GLEEPFNGLSEPARABLEFILTER2DPROC) __GLeeGetProcAddress("glSeparableFilter2D"))!=0) nLinked++; if ((GLeeFuncPtr_glGetHistogram = (GLEEPFNGLGETHISTOGRAMPROC) __GLeeGetProcAddress("glGetHistogram"))!=0) nLinked++; if ((GLeeFuncPtr_glGetHistogramParameterfv = (GLEEPFNGLGETHISTOGRAMPARAMETERFVPROC) __GLeeGetProcAddress("glGetHistogramParameterfv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetHistogramParameteriv = (GLEEPFNGLGETHISTOGRAMPARAMETERIVPROC) __GLeeGetProcAddress("glGetHistogramParameteriv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMinmax = (GLEEPFNGLGETMINMAXPROC) __GLeeGetProcAddress("glGetMinmax"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMinmaxParameterfv = (GLEEPFNGLGETMINMAXPARAMETERFVPROC) __GLeeGetProcAddress("glGetMinmaxParameterfv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMinmaxParameteriv = (GLEEPFNGLGETMINMAXPARAMETERIVPROC) __GLeeGetProcAddress("glGetMinmaxParameteriv"))!=0) nLinked++; if ((GLeeFuncPtr_glHistogram = (GLEEPFNGLHISTOGRAMPROC) __GLeeGetProcAddress("glHistogram"))!=0) nLinked++; if ((GLeeFuncPtr_glMinmax = (GLEEPFNGLMINMAXPROC) __GLeeGetProcAddress("glMinmax"))!=0) nLinked++; if ((GLeeFuncPtr_glResetHistogram = (GLEEPFNGLRESETHISTOGRAMPROC) __GLeeGetProcAddress("glResetHistogram"))!=0) nLinked++; if ((GLeeFuncPtr_glResetMinmax = (GLEEPFNGLRESETMINMAXPROC) __GLeeGetProcAddress("glResetMinmax"))!=0) nLinked++; #endif if (nLinked==38) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_imaging(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_VERSION_1_3(void) { GLint nLinked=0; #ifdef __GLEE_GL_VERSION_1_3 if ((GLeeFuncPtr_glActiveTexture = (GLEEPFNGLACTIVETEXTUREPROC) __GLeeGetProcAddress("glActiveTexture"))!=0) nLinked++; if ((GLeeFuncPtr_glSampleCoverage = (GLEEPFNGLSAMPLECOVERAGEPROC) __GLeeGetProcAddress("glSampleCoverage"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedTexImage3D = (GLEEPFNGLCOMPRESSEDTEXIMAGE3DPROC) __GLeeGetProcAddress("glCompressedTexImage3D"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedTexImage2D = (GLEEPFNGLCOMPRESSEDTEXIMAGE2DPROC) __GLeeGetProcAddress("glCompressedTexImage2D"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedTexImage1D = (GLEEPFNGLCOMPRESSEDTEXIMAGE1DPROC) __GLeeGetProcAddress("glCompressedTexImage1D"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedTexSubImage3D = (GLEEPFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) __GLeeGetProcAddress("glCompressedTexSubImage3D"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedTexSubImage2D = (GLEEPFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) __GLeeGetProcAddress("glCompressedTexSubImage2D"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedTexSubImage1D = (GLEEPFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) __GLeeGetProcAddress("glCompressedTexSubImage1D"))!=0) nLinked++; if ((GLeeFuncPtr_glGetCompressedTexImage = (GLEEPFNGLGETCOMPRESSEDTEXIMAGEPROC) __GLeeGetProcAddress("glGetCompressedTexImage"))!=0) nLinked++; if ((GLeeFuncPtr_glClientActiveTexture = (GLEEPFNGLCLIENTACTIVETEXTUREPROC) __GLeeGetProcAddress("glClientActiveTexture"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1d = (GLEEPFNGLMULTITEXCOORD1DPROC) __GLeeGetProcAddress("glMultiTexCoord1d"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1dv = (GLEEPFNGLMULTITEXCOORD1DVPROC) __GLeeGetProcAddress("glMultiTexCoord1dv"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1f = (GLEEPFNGLMULTITEXCOORD1FPROC) __GLeeGetProcAddress("glMultiTexCoord1f"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1fv = (GLEEPFNGLMULTITEXCOORD1FVPROC) __GLeeGetProcAddress("glMultiTexCoord1fv"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1i = (GLEEPFNGLMULTITEXCOORD1IPROC) __GLeeGetProcAddress("glMultiTexCoord1i"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1iv = (GLEEPFNGLMULTITEXCOORD1IVPROC) __GLeeGetProcAddress("glMultiTexCoord1iv"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1s = (GLEEPFNGLMULTITEXCOORD1SPROC) __GLeeGetProcAddress("glMultiTexCoord1s"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1sv = (GLEEPFNGLMULTITEXCOORD1SVPROC) __GLeeGetProcAddress("glMultiTexCoord1sv"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2d = (GLEEPFNGLMULTITEXCOORD2DPROC) __GLeeGetProcAddress("glMultiTexCoord2d"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2dv = (GLEEPFNGLMULTITEXCOORD2DVPROC) __GLeeGetProcAddress("glMultiTexCoord2dv"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2f = (GLEEPFNGLMULTITEXCOORD2FPROC) __GLeeGetProcAddress("glMultiTexCoord2f"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2fv = (GLEEPFNGLMULTITEXCOORD2FVPROC) __GLeeGetProcAddress("glMultiTexCoord2fv"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2i = (GLEEPFNGLMULTITEXCOORD2IPROC) __GLeeGetProcAddress("glMultiTexCoord2i"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2iv = (GLEEPFNGLMULTITEXCOORD2IVPROC) __GLeeGetProcAddress("glMultiTexCoord2iv"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2s = (GLEEPFNGLMULTITEXCOORD2SPROC) __GLeeGetProcAddress("glMultiTexCoord2s"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2sv = (GLEEPFNGLMULTITEXCOORD2SVPROC) __GLeeGetProcAddress("glMultiTexCoord2sv"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3d = (GLEEPFNGLMULTITEXCOORD3DPROC) __GLeeGetProcAddress("glMultiTexCoord3d"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3dv = (GLEEPFNGLMULTITEXCOORD3DVPROC) __GLeeGetProcAddress("glMultiTexCoord3dv"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3f = (GLEEPFNGLMULTITEXCOORD3FPROC) __GLeeGetProcAddress("glMultiTexCoord3f"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3fv = (GLEEPFNGLMULTITEXCOORD3FVPROC) __GLeeGetProcAddress("glMultiTexCoord3fv"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3i = (GLEEPFNGLMULTITEXCOORD3IPROC) __GLeeGetProcAddress("glMultiTexCoord3i"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3iv = (GLEEPFNGLMULTITEXCOORD3IVPROC) __GLeeGetProcAddress("glMultiTexCoord3iv"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3s = (GLEEPFNGLMULTITEXCOORD3SPROC) __GLeeGetProcAddress("glMultiTexCoord3s"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3sv = (GLEEPFNGLMULTITEXCOORD3SVPROC) __GLeeGetProcAddress("glMultiTexCoord3sv"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4d = (GLEEPFNGLMULTITEXCOORD4DPROC) __GLeeGetProcAddress("glMultiTexCoord4d"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4dv = (GLEEPFNGLMULTITEXCOORD4DVPROC) __GLeeGetProcAddress("glMultiTexCoord4dv"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4f = (GLEEPFNGLMULTITEXCOORD4FPROC) __GLeeGetProcAddress("glMultiTexCoord4f"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4fv = (GLEEPFNGLMULTITEXCOORD4FVPROC) __GLeeGetProcAddress("glMultiTexCoord4fv"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4i = (GLEEPFNGLMULTITEXCOORD4IPROC) __GLeeGetProcAddress("glMultiTexCoord4i"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4iv = (GLEEPFNGLMULTITEXCOORD4IVPROC) __GLeeGetProcAddress("glMultiTexCoord4iv"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4s = (GLEEPFNGLMULTITEXCOORD4SPROC) __GLeeGetProcAddress("glMultiTexCoord4s"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4sv = (GLEEPFNGLMULTITEXCOORD4SVPROC) __GLeeGetProcAddress("glMultiTexCoord4sv"))!=0) nLinked++; if ((GLeeFuncPtr_glLoadTransposeMatrixf = (GLEEPFNGLLOADTRANSPOSEMATRIXFPROC) __GLeeGetProcAddress("glLoadTransposeMatrixf"))!=0) nLinked++; if ((GLeeFuncPtr_glLoadTransposeMatrixd = (GLEEPFNGLLOADTRANSPOSEMATRIXDPROC) __GLeeGetProcAddress("glLoadTransposeMatrixd"))!=0) nLinked++; if ((GLeeFuncPtr_glMultTransposeMatrixf = (GLEEPFNGLMULTTRANSPOSEMATRIXFPROC) __GLeeGetProcAddress("glMultTransposeMatrixf"))!=0) nLinked++; if ((GLeeFuncPtr_glMultTransposeMatrixd = (GLEEPFNGLMULTTRANSPOSEMATRIXDPROC) __GLeeGetProcAddress("glMultTransposeMatrixd"))!=0) nLinked++; #endif if (nLinked==46) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_VERSION_1_4(void) { GLint nLinked=0; #ifdef __GLEE_GL_VERSION_1_4 if ((GLeeFuncPtr_glBlendFuncSeparate = (GLEEPFNGLBLENDFUNCSEPARATEPROC) __GLeeGetProcAddress("glBlendFuncSeparate"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiDrawArrays = (GLEEPFNGLMULTIDRAWARRAYSPROC) __GLeeGetProcAddress("glMultiDrawArrays"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiDrawElements = (GLEEPFNGLMULTIDRAWELEMENTSPROC) __GLeeGetProcAddress("glMultiDrawElements"))!=0) nLinked++; if ((GLeeFuncPtr_glPointParameterf = (GLEEPFNGLPOINTPARAMETERFPROC) __GLeeGetProcAddress("glPointParameterf"))!=0) nLinked++; if ((GLeeFuncPtr_glPointParameterfv = (GLEEPFNGLPOINTPARAMETERFVPROC) __GLeeGetProcAddress("glPointParameterfv"))!=0) nLinked++; if ((GLeeFuncPtr_glPointParameteri = (GLEEPFNGLPOINTPARAMETERIPROC) __GLeeGetProcAddress("glPointParameteri"))!=0) nLinked++; if ((GLeeFuncPtr_glPointParameteriv = (GLEEPFNGLPOINTPARAMETERIVPROC) __GLeeGetProcAddress("glPointParameteriv"))!=0) nLinked++; if ((GLeeFuncPtr_glFogCoordf = (GLEEPFNGLFOGCOORDFPROC) __GLeeGetProcAddress("glFogCoordf"))!=0) nLinked++; if ((GLeeFuncPtr_glFogCoordfv = (GLEEPFNGLFOGCOORDFVPROC) __GLeeGetProcAddress("glFogCoordfv"))!=0) nLinked++; if ((GLeeFuncPtr_glFogCoordd = (GLEEPFNGLFOGCOORDDPROC) __GLeeGetProcAddress("glFogCoordd"))!=0) nLinked++; if ((GLeeFuncPtr_glFogCoorddv = (GLEEPFNGLFOGCOORDDVPROC) __GLeeGetProcAddress("glFogCoorddv"))!=0) nLinked++; if ((GLeeFuncPtr_glFogCoordPointer = (GLEEPFNGLFOGCOORDPOINTERPROC) __GLeeGetProcAddress("glFogCoordPointer"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3b = (GLEEPFNGLSECONDARYCOLOR3BPROC) __GLeeGetProcAddress("glSecondaryColor3b"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3bv = (GLEEPFNGLSECONDARYCOLOR3BVPROC) __GLeeGetProcAddress("glSecondaryColor3bv"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3d = (GLEEPFNGLSECONDARYCOLOR3DPROC) __GLeeGetProcAddress("glSecondaryColor3d"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3dv = (GLEEPFNGLSECONDARYCOLOR3DVPROC) __GLeeGetProcAddress("glSecondaryColor3dv"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3f = (GLEEPFNGLSECONDARYCOLOR3FPROC) __GLeeGetProcAddress("glSecondaryColor3f"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3fv = (GLEEPFNGLSECONDARYCOLOR3FVPROC) __GLeeGetProcAddress("glSecondaryColor3fv"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3i = (GLEEPFNGLSECONDARYCOLOR3IPROC) __GLeeGetProcAddress("glSecondaryColor3i"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3iv = (GLEEPFNGLSECONDARYCOLOR3IVPROC) __GLeeGetProcAddress("glSecondaryColor3iv"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3s = (GLEEPFNGLSECONDARYCOLOR3SPROC) __GLeeGetProcAddress("glSecondaryColor3s"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3sv = (GLEEPFNGLSECONDARYCOLOR3SVPROC) __GLeeGetProcAddress("glSecondaryColor3sv"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3ub = (GLEEPFNGLSECONDARYCOLOR3UBPROC) __GLeeGetProcAddress("glSecondaryColor3ub"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3ubv = (GLEEPFNGLSECONDARYCOLOR3UBVPROC) __GLeeGetProcAddress("glSecondaryColor3ubv"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3ui = (GLEEPFNGLSECONDARYCOLOR3UIPROC) __GLeeGetProcAddress("glSecondaryColor3ui"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3uiv = (GLEEPFNGLSECONDARYCOLOR3UIVPROC) __GLeeGetProcAddress("glSecondaryColor3uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3us = (GLEEPFNGLSECONDARYCOLOR3USPROC) __GLeeGetProcAddress("glSecondaryColor3us"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3usv = (GLEEPFNGLSECONDARYCOLOR3USVPROC) __GLeeGetProcAddress("glSecondaryColor3usv"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColorPointer = (GLEEPFNGLSECONDARYCOLORPOINTERPROC) __GLeeGetProcAddress("glSecondaryColorPointer"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2d = (GLEEPFNGLWINDOWPOS2DPROC) __GLeeGetProcAddress("glWindowPos2d"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2dv = (GLEEPFNGLWINDOWPOS2DVPROC) __GLeeGetProcAddress("glWindowPos2dv"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2f = (GLEEPFNGLWINDOWPOS2FPROC) __GLeeGetProcAddress("glWindowPos2f"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2fv = (GLEEPFNGLWINDOWPOS2FVPROC) __GLeeGetProcAddress("glWindowPos2fv"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2i = (GLEEPFNGLWINDOWPOS2IPROC) __GLeeGetProcAddress("glWindowPos2i"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2iv = (GLEEPFNGLWINDOWPOS2IVPROC) __GLeeGetProcAddress("glWindowPos2iv"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2s = (GLEEPFNGLWINDOWPOS2SPROC) __GLeeGetProcAddress("glWindowPos2s"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2sv = (GLEEPFNGLWINDOWPOS2SVPROC) __GLeeGetProcAddress("glWindowPos2sv"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3d = (GLEEPFNGLWINDOWPOS3DPROC) __GLeeGetProcAddress("glWindowPos3d"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3dv = (GLEEPFNGLWINDOWPOS3DVPROC) __GLeeGetProcAddress("glWindowPos3dv"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3f = (GLEEPFNGLWINDOWPOS3FPROC) __GLeeGetProcAddress("glWindowPos3f"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3fv = (GLEEPFNGLWINDOWPOS3FVPROC) __GLeeGetProcAddress("glWindowPos3fv"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3i = (GLEEPFNGLWINDOWPOS3IPROC) __GLeeGetProcAddress("glWindowPos3i"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3iv = (GLEEPFNGLWINDOWPOS3IVPROC) __GLeeGetProcAddress("glWindowPos3iv"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3s = (GLEEPFNGLWINDOWPOS3SPROC) __GLeeGetProcAddress("glWindowPos3s"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3sv = (GLEEPFNGLWINDOWPOS3SVPROC) __GLeeGetProcAddress("glWindowPos3sv"))!=0) nLinked++; #endif if (nLinked==45) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_VERSION_1_5(void) { GLint nLinked=0; #ifdef __GLEE_GL_VERSION_1_5 if ((GLeeFuncPtr_glGenQueries = (GLEEPFNGLGENQUERIESPROC) __GLeeGetProcAddress("glGenQueries"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteQueries = (GLEEPFNGLDELETEQUERIESPROC) __GLeeGetProcAddress("glDeleteQueries"))!=0) nLinked++; if ((GLeeFuncPtr_glIsQuery = (GLEEPFNGLISQUERYPROC) __GLeeGetProcAddress("glIsQuery"))!=0) nLinked++; if ((GLeeFuncPtr_glBeginQuery = (GLEEPFNGLBEGINQUERYPROC) __GLeeGetProcAddress("glBeginQuery"))!=0) nLinked++; if ((GLeeFuncPtr_glEndQuery = (GLEEPFNGLENDQUERYPROC) __GLeeGetProcAddress("glEndQuery"))!=0) nLinked++; if ((GLeeFuncPtr_glGetQueryiv = (GLEEPFNGLGETQUERYIVPROC) __GLeeGetProcAddress("glGetQueryiv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetQueryObjectiv = (GLEEPFNGLGETQUERYOBJECTIVPROC) __GLeeGetProcAddress("glGetQueryObjectiv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetQueryObjectuiv = (GLEEPFNGLGETQUERYOBJECTUIVPROC) __GLeeGetProcAddress("glGetQueryObjectuiv"))!=0) nLinked++; if ((GLeeFuncPtr_glBindBuffer = (GLEEPFNGLBINDBUFFERPROC) __GLeeGetProcAddress("glBindBuffer"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteBuffers = (GLEEPFNGLDELETEBUFFERSPROC) __GLeeGetProcAddress("glDeleteBuffers"))!=0) nLinked++; if ((GLeeFuncPtr_glGenBuffers = (GLEEPFNGLGENBUFFERSPROC) __GLeeGetProcAddress("glGenBuffers"))!=0) nLinked++; if ((GLeeFuncPtr_glIsBuffer = (GLEEPFNGLISBUFFERPROC) __GLeeGetProcAddress("glIsBuffer"))!=0) nLinked++; if ((GLeeFuncPtr_glBufferData = (GLEEPFNGLBUFFERDATAPROC) __GLeeGetProcAddress("glBufferData"))!=0) nLinked++; if ((GLeeFuncPtr_glBufferSubData = (GLEEPFNGLBUFFERSUBDATAPROC) __GLeeGetProcAddress("glBufferSubData"))!=0) nLinked++; if ((GLeeFuncPtr_glGetBufferSubData = (GLEEPFNGLGETBUFFERSUBDATAPROC) __GLeeGetProcAddress("glGetBufferSubData"))!=0) nLinked++; if ((GLeeFuncPtr_glMapBuffer = (GLEEPFNGLMAPBUFFERPROC) __GLeeGetProcAddress("glMapBuffer"))!=0) nLinked++; if ((GLeeFuncPtr_glUnmapBuffer = (GLEEPFNGLUNMAPBUFFERPROC) __GLeeGetProcAddress("glUnmapBuffer"))!=0) nLinked++; if ((GLeeFuncPtr_glGetBufferParameteriv = (GLEEPFNGLGETBUFFERPARAMETERIVPROC) __GLeeGetProcAddress("glGetBufferParameteriv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetBufferPointerv = (GLEEPFNGLGETBUFFERPOINTERVPROC) __GLeeGetProcAddress("glGetBufferPointerv"))!=0) nLinked++; #endif if (nLinked==19) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_VERSION_2_0(void) { GLint nLinked=0; #ifdef __GLEE_GL_VERSION_2_0 if ((GLeeFuncPtr_glBlendEquationSeparate = (GLEEPFNGLBLENDEQUATIONSEPARATEPROC) __GLeeGetProcAddress("glBlendEquationSeparate"))!=0) nLinked++; if ((GLeeFuncPtr_glDrawBuffers = (GLEEPFNGLDRAWBUFFERSPROC) __GLeeGetProcAddress("glDrawBuffers"))!=0) nLinked++; if ((GLeeFuncPtr_glStencilOpSeparate = (GLEEPFNGLSTENCILOPSEPARATEPROC) __GLeeGetProcAddress("glStencilOpSeparate"))!=0) nLinked++; if ((GLeeFuncPtr_glStencilFuncSeparate = (GLEEPFNGLSTENCILFUNCSEPARATEPROC) __GLeeGetProcAddress("glStencilFuncSeparate"))!=0) nLinked++; if ((GLeeFuncPtr_glStencilMaskSeparate = (GLEEPFNGLSTENCILMASKSEPARATEPROC) __GLeeGetProcAddress("glStencilMaskSeparate"))!=0) nLinked++; if ((GLeeFuncPtr_glAttachShader = (GLEEPFNGLATTACHSHADERPROC) __GLeeGetProcAddress("glAttachShader"))!=0) nLinked++; if ((GLeeFuncPtr_glBindAttribLocation = (GLEEPFNGLBINDATTRIBLOCATIONPROC) __GLeeGetProcAddress("glBindAttribLocation"))!=0) nLinked++; if ((GLeeFuncPtr_glCompileShader = (GLEEPFNGLCOMPILESHADERPROC) __GLeeGetProcAddress("glCompileShader"))!=0) nLinked++; if ((GLeeFuncPtr_glCreateProgram = (GLEEPFNGLCREATEPROGRAMPROC) __GLeeGetProcAddress("glCreateProgram"))!=0) nLinked++; if ((GLeeFuncPtr_glCreateShader = (GLEEPFNGLCREATESHADERPROC) __GLeeGetProcAddress("glCreateShader"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteProgram = (GLEEPFNGLDELETEPROGRAMPROC) __GLeeGetProcAddress("glDeleteProgram"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteShader = (GLEEPFNGLDELETESHADERPROC) __GLeeGetProcAddress("glDeleteShader"))!=0) nLinked++; if ((GLeeFuncPtr_glDetachShader = (GLEEPFNGLDETACHSHADERPROC) __GLeeGetProcAddress("glDetachShader"))!=0) nLinked++; if ((GLeeFuncPtr_glDisableVertexAttribArray = (GLEEPFNGLDISABLEVERTEXATTRIBARRAYPROC) __GLeeGetProcAddress("glDisableVertexAttribArray"))!=0) nLinked++; if ((GLeeFuncPtr_glEnableVertexAttribArray = (GLEEPFNGLENABLEVERTEXATTRIBARRAYPROC) __GLeeGetProcAddress("glEnableVertexAttribArray"))!=0) nLinked++; if ((GLeeFuncPtr_glGetActiveAttrib = (GLEEPFNGLGETACTIVEATTRIBPROC) __GLeeGetProcAddress("glGetActiveAttrib"))!=0) nLinked++; if ((GLeeFuncPtr_glGetActiveUniform = (GLEEPFNGLGETACTIVEUNIFORMPROC) __GLeeGetProcAddress("glGetActiveUniform"))!=0) nLinked++; if ((GLeeFuncPtr_glGetAttachedShaders = (GLEEPFNGLGETATTACHEDSHADERSPROC) __GLeeGetProcAddress("glGetAttachedShaders"))!=0) nLinked++; if ((GLeeFuncPtr_glGetAttribLocation = (GLEEPFNGLGETATTRIBLOCATIONPROC) __GLeeGetProcAddress("glGetAttribLocation"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramiv = (GLEEPFNGLGETPROGRAMIVPROC) __GLeeGetProcAddress("glGetProgramiv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramInfoLog = (GLEEPFNGLGETPROGRAMINFOLOGPROC) __GLeeGetProcAddress("glGetProgramInfoLog"))!=0) nLinked++; if ((GLeeFuncPtr_glGetShaderiv = (GLEEPFNGLGETSHADERIVPROC) __GLeeGetProcAddress("glGetShaderiv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetShaderInfoLog = (GLEEPFNGLGETSHADERINFOLOGPROC) __GLeeGetProcAddress("glGetShaderInfoLog"))!=0) nLinked++; if ((GLeeFuncPtr_glGetShaderSource = (GLEEPFNGLGETSHADERSOURCEPROC) __GLeeGetProcAddress("glGetShaderSource"))!=0) nLinked++; if ((GLeeFuncPtr_glGetUniformLocation = (GLEEPFNGLGETUNIFORMLOCATIONPROC) __GLeeGetProcAddress("glGetUniformLocation"))!=0) nLinked++; if ((GLeeFuncPtr_glGetUniformfv = (GLEEPFNGLGETUNIFORMFVPROC) __GLeeGetProcAddress("glGetUniformfv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetUniformiv = (GLEEPFNGLGETUNIFORMIVPROC) __GLeeGetProcAddress("glGetUniformiv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribdv = (GLEEPFNGLGETVERTEXATTRIBDVPROC) __GLeeGetProcAddress("glGetVertexAttribdv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribfv = (GLEEPFNGLGETVERTEXATTRIBFVPROC) __GLeeGetProcAddress("glGetVertexAttribfv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribiv = (GLEEPFNGLGETVERTEXATTRIBIVPROC) __GLeeGetProcAddress("glGetVertexAttribiv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribPointerv = (GLEEPFNGLGETVERTEXATTRIBPOINTERVPROC) __GLeeGetProcAddress("glGetVertexAttribPointerv"))!=0) nLinked++; if ((GLeeFuncPtr_glIsProgram = (GLEEPFNGLISPROGRAMPROC) __GLeeGetProcAddress("glIsProgram"))!=0) nLinked++; if ((GLeeFuncPtr_glIsShader = (GLEEPFNGLISSHADERPROC) __GLeeGetProcAddress("glIsShader"))!=0) nLinked++; if ((GLeeFuncPtr_glLinkProgram = (GLEEPFNGLLINKPROGRAMPROC) __GLeeGetProcAddress("glLinkProgram"))!=0) nLinked++; if ((GLeeFuncPtr_glShaderSource = (GLEEPFNGLSHADERSOURCEPROC) __GLeeGetProcAddress("glShaderSource"))!=0) nLinked++; if ((GLeeFuncPtr_glUseProgram = (GLEEPFNGLUSEPROGRAMPROC) __GLeeGetProcAddress("glUseProgram"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform1f = (GLEEPFNGLUNIFORM1FPROC) __GLeeGetProcAddress("glUniform1f"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform2f = (GLEEPFNGLUNIFORM2FPROC) __GLeeGetProcAddress("glUniform2f"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform3f = (GLEEPFNGLUNIFORM3FPROC) __GLeeGetProcAddress("glUniform3f"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform4f = (GLEEPFNGLUNIFORM4FPROC) __GLeeGetProcAddress("glUniform4f"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform1i = (GLEEPFNGLUNIFORM1IPROC) __GLeeGetProcAddress("glUniform1i"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform2i = (GLEEPFNGLUNIFORM2IPROC) __GLeeGetProcAddress("glUniform2i"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform3i = (GLEEPFNGLUNIFORM3IPROC) __GLeeGetProcAddress("glUniform3i"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform4i = (GLEEPFNGLUNIFORM4IPROC) __GLeeGetProcAddress("glUniform4i"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform1fv = (GLEEPFNGLUNIFORM1FVPROC) __GLeeGetProcAddress("glUniform1fv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform2fv = (GLEEPFNGLUNIFORM2FVPROC) __GLeeGetProcAddress("glUniform2fv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform3fv = (GLEEPFNGLUNIFORM3FVPROC) __GLeeGetProcAddress("glUniform3fv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform4fv = (GLEEPFNGLUNIFORM4FVPROC) __GLeeGetProcAddress("glUniform4fv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform1iv = (GLEEPFNGLUNIFORM1IVPROC) __GLeeGetProcAddress("glUniform1iv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform2iv = (GLEEPFNGLUNIFORM2IVPROC) __GLeeGetProcAddress("glUniform2iv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform3iv = (GLEEPFNGLUNIFORM3IVPROC) __GLeeGetProcAddress("glUniform3iv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform4iv = (GLEEPFNGLUNIFORM4IVPROC) __GLeeGetProcAddress("glUniform4iv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniformMatrix2fv = (GLEEPFNGLUNIFORMMATRIX2FVPROC) __GLeeGetProcAddress("glUniformMatrix2fv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniformMatrix3fv = (GLEEPFNGLUNIFORMMATRIX3FVPROC) __GLeeGetProcAddress("glUniformMatrix3fv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniformMatrix4fv = (GLEEPFNGLUNIFORMMATRIX4FVPROC) __GLeeGetProcAddress("glUniformMatrix4fv"))!=0) nLinked++; if ((GLeeFuncPtr_glValidateProgram = (GLEEPFNGLVALIDATEPROGRAMPROC) __GLeeGetProcAddress("glValidateProgram"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1d = (GLEEPFNGLVERTEXATTRIB1DPROC) __GLeeGetProcAddress("glVertexAttrib1d"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1dv = (GLEEPFNGLVERTEXATTRIB1DVPROC) __GLeeGetProcAddress("glVertexAttrib1dv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1f = (GLEEPFNGLVERTEXATTRIB1FPROC) __GLeeGetProcAddress("glVertexAttrib1f"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1fv = (GLEEPFNGLVERTEXATTRIB1FVPROC) __GLeeGetProcAddress("glVertexAttrib1fv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1s = (GLEEPFNGLVERTEXATTRIB1SPROC) __GLeeGetProcAddress("glVertexAttrib1s"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1sv = (GLEEPFNGLVERTEXATTRIB1SVPROC) __GLeeGetProcAddress("glVertexAttrib1sv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2d = (GLEEPFNGLVERTEXATTRIB2DPROC) __GLeeGetProcAddress("glVertexAttrib2d"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2dv = (GLEEPFNGLVERTEXATTRIB2DVPROC) __GLeeGetProcAddress("glVertexAttrib2dv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2f = (GLEEPFNGLVERTEXATTRIB2FPROC) __GLeeGetProcAddress("glVertexAttrib2f"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2fv = (GLEEPFNGLVERTEXATTRIB2FVPROC) __GLeeGetProcAddress("glVertexAttrib2fv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2s = (GLEEPFNGLVERTEXATTRIB2SPROC) __GLeeGetProcAddress("glVertexAttrib2s"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2sv = (GLEEPFNGLVERTEXATTRIB2SVPROC) __GLeeGetProcAddress("glVertexAttrib2sv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3d = (GLEEPFNGLVERTEXATTRIB3DPROC) __GLeeGetProcAddress("glVertexAttrib3d"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3dv = (GLEEPFNGLVERTEXATTRIB3DVPROC) __GLeeGetProcAddress("glVertexAttrib3dv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3f = (GLEEPFNGLVERTEXATTRIB3FPROC) __GLeeGetProcAddress("glVertexAttrib3f"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3fv = (GLEEPFNGLVERTEXATTRIB3FVPROC) __GLeeGetProcAddress("glVertexAttrib3fv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3s = (GLEEPFNGLVERTEXATTRIB3SPROC) __GLeeGetProcAddress("glVertexAttrib3s"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3sv = (GLEEPFNGLVERTEXATTRIB3SVPROC) __GLeeGetProcAddress("glVertexAttrib3sv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4Nbv = (GLEEPFNGLVERTEXATTRIB4NBVPROC) __GLeeGetProcAddress("glVertexAttrib4Nbv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4Niv = (GLEEPFNGLVERTEXATTRIB4NIVPROC) __GLeeGetProcAddress("glVertexAttrib4Niv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4Nsv = (GLEEPFNGLVERTEXATTRIB4NSVPROC) __GLeeGetProcAddress("glVertexAttrib4Nsv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4Nub = (GLEEPFNGLVERTEXATTRIB4NUBPROC) __GLeeGetProcAddress("glVertexAttrib4Nub"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4Nubv = (GLEEPFNGLVERTEXATTRIB4NUBVPROC) __GLeeGetProcAddress("glVertexAttrib4Nubv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4Nuiv = (GLEEPFNGLVERTEXATTRIB4NUIVPROC) __GLeeGetProcAddress("glVertexAttrib4Nuiv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4Nusv = (GLEEPFNGLVERTEXATTRIB4NUSVPROC) __GLeeGetProcAddress("glVertexAttrib4Nusv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4bv = (GLEEPFNGLVERTEXATTRIB4BVPROC) __GLeeGetProcAddress("glVertexAttrib4bv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4d = (GLEEPFNGLVERTEXATTRIB4DPROC) __GLeeGetProcAddress("glVertexAttrib4d"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4dv = (GLEEPFNGLVERTEXATTRIB4DVPROC) __GLeeGetProcAddress("glVertexAttrib4dv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4f = (GLEEPFNGLVERTEXATTRIB4FPROC) __GLeeGetProcAddress("glVertexAttrib4f"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4fv = (GLEEPFNGLVERTEXATTRIB4FVPROC) __GLeeGetProcAddress("glVertexAttrib4fv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4iv = (GLEEPFNGLVERTEXATTRIB4IVPROC) __GLeeGetProcAddress("glVertexAttrib4iv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4s = (GLEEPFNGLVERTEXATTRIB4SPROC) __GLeeGetProcAddress("glVertexAttrib4s"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4sv = (GLEEPFNGLVERTEXATTRIB4SVPROC) __GLeeGetProcAddress("glVertexAttrib4sv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4ubv = (GLEEPFNGLVERTEXATTRIB4UBVPROC) __GLeeGetProcAddress("glVertexAttrib4ubv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4uiv = (GLEEPFNGLVERTEXATTRIB4UIVPROC) __GLeeGetProcAddress("glVertexAttrib4uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4usv = (GLEEPFNGLVERTEXATTRIB4USVPROC) __GLeeGetProcAddress("glVertexAttrib4usv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribPointer = (GLEEPFNGLVERTEXATTRIBPOINTERPROC) __GLeeGetProcAddress("glVertexAttribPointer"))!=0) nLinked++; #endif if (nLinked==93) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_VERSION_2_1(void) { GLint nLinked=0; #ifdef __GLEE_GL_VERSION_2_1 if ((GLeeFuncPtr_glUniformMatrix2x3fv = (GLEEPFNGLUNIFORMMATRIX2X3FVPROC) __GLeeGetProcAddress("glUniformMatrix2x3fv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniformMatrix3x2fv = (GLEEPFNGLUNIFORMMATRIX3X2FVPROC) __GLeeGetProcAddress("glUniformMatrix3x2fv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniformMatrix2x4fv = (GLEEPFNGLUNIFORMMATRIX2X4FVPROC) __GLeeGetProcAddress("glUniformMatrix2x4fv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniformMatrix4x2fv = (GLEEPFNGLUNIFORMMATRIX4X2FVPROC) __GLeeGetProcAddress("glUniformMatrix4x2fv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniformMatrix3x4fv = (GLEEPFNGLUNIFORMMATRIX3X4FVPROC) __GLeeGetProcAddress("glUniformMatrix3x4fv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniformMatrix4x3fv = (GLEEPFNGLUNIFORMMATRIX4X3FVPROC) __GLeeGetProcAddress("glUniformMatrix4x3fv"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_VERSION_3_0(void) { GLint nLinked=0; #ifdef __GLEE_GL_VERSION_3_0 if ((GLeeFuncPtr_glColorMaski = (GLEEPFNGLCOLORMASKIPROC) __GLeeGetProcAddress("glColorMaski"))!=0) nLinked++; if ((GLeeFuncPtr_glGetBooleani_v = (GLEEPFNGLGETBOOLEANI_VPROC) __GLeeGetProcAddress("glGetBooleani_v"))!=0) nLinked++; if ((GLeeFuncPtr_glGetIntegeri_v = (GLEEPFNGLGETINTEGERI_VPROC) __GLeeGetProcAddress("glGetIntegeri_v"))!=0) nLinked++; if ((GLeeFuncPtr_glEnablei = (GLEEPFNGLENABLEIPROC) __GLeeGetProcAddress("glEnablei"))!=0) nLinked++; if ((GLeeFuncPtr_glDisablei = (GLEEPFNGLDISABLEIPROC) __GLeeGetProcAddress("glDisablei"))!=0) nLinked++; if ((GLeeFuncPtr_glIsEnabledi = (GLEEPFNGLISENABLEDIPROC) __GLeeGetProcAddress("glIsEnabledi"))!=0) nLinked++; if ((GLeeFuncPtr_glBeginTransformFeedback = (GLEEPFNGLBEGINTRANSFORMFEEDBACKPROC) __GLeeGetProcAddress("glBeginTransformFeedback"))!=0) nLinked++; if ((GLeeFuncPtr_glEndTransformFeedback = (GLEEPFNGLENDTRANSFORMFEEDBACKPROC) __GLeeGetProcAddress("glEndTransformFeedback"))!=0) nLinked++; if ((GLeeFuncPtr_glBindBufferRange = (GLEEPFNGLBINDBUFFERRANGEPROC) __GLeeGetProcAddress("glBindBufferRange"))!=0) nLinked++; if ((GLeeFuncPtr_glBindBufferBase = (GLEEPFNGLBINDBUFFERBASEPROC) __GLeeGetProcAddress("glBindBufferBase"))!=0) nLinked++; if ((GLeeFuncPtr_glTransformFeedbackVaryings = (GLEEPFNGLTRANSFORMFEEDBACKVARYINGSPROC) __GLeeGetProcAddress("glTransformFeedbackVaryings"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTransformFeedbackVarying = (GLEEPFNGLGETTRANSFORMFEEDBACKVARYINGPROC) __GLeeGetProcAddress("glGetTransformFeedbackVarying"))!=0) nLinked++; if ((GLeeFuncPtr_glClampColor = (GLEEPFNGLCLAMPCOLORPROC) __GLeeGetProcAddress("glClampColor"))!=0) nLinked++; if ((GLeeFuncPtr_glBeginConditionalRender = (GLEEPFNGLBEGINCONDITIONALRENDERPROC) __GLeeGetProcAddress("glBeginConditionalRender"))!=0) nLinked++; if ((GLeeFuncPtr_glEndConditionalRender = (GLEEPFNGLENDCONDITIONALRENDERPROC) __GLeeGetProcAddress("glEndConditionalRender"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribIPointer = (GLEEPFNGLVERTEXATTRIBIPOINTERPROC) __GLeeGetProcAddress("glVertexAttribIPointer"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribIiv = (GLEEPFNGLGETVERTEXATTRIBIIVPROC) __GLeeGetProcAddress("glGetVertexAttribIiv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribIuiv = (GLEEPFNGLGETVERTEXATTRIBIUIVPROC) __GLeeGetProcAddress("glGetVertexAttribIuiv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI1i = (GLEEPFNGLVERTEXATTRIBI1IPROC) __GLeeGetProcAddress("glVertexAttribI1i"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI2i = (GLEEPFNGLVERTEXATTRIBI2IPROC) __GLeeGetProcAddress("glVertexAttribI2i"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI3i = (GLEEPFNGLVERTEXATTRIBI3IPROC) __GLeeGetProcAddress("glVertexAttribI3i"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI4i = (GLEEPFNGLVERTEXATTRIBI4IPROC) __GLeeGetProcAddress("glVertexAttribI4i"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI1ui = (GLEEPFNGLVERTEXATTRIBI1UIPROC) __GLeeGetProcAddress("glVertexAttribI1ui"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI2ui = (GLEEPFNGLVERTEXATTRIBI2UIPROC) __GLeeGetProcAddress("glVertexAttribI2ui"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI3ui = (GLEEPFNGLVERTEXATTRIBI3UIPROC) __GLeeGetProcAddress("glVertexAttribI3ui"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI4ui = (GLEEPFNGLVERTEXATTRIBI4UIPROC) __GLeeGetProcAddress("glVertexAttribI4ui"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI1iv = (GLEEPFNGLVERTEXATTRIBI1IVPROC) __GLeeGetProcAddress("glVertexAttribI1iv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI2iv = (GLEEPFNGLVERTEXATTRIBI2IVPROC) __GLeeGetProcAddress("glVertexAttribI2iv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI3iv = (GLEEPFNGLVERTEXATTRIBI3IVPROC) __GLeeGetProcAddress("glVertexAttribI3iv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI4iv = (GLEEPFNGLVERTEXATTRIBI4IVPROC) __GLeeGetProcAddress("glVertexAttribI4iv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI1uiv = (GLEEPFNGLVERTEXATTRIBI1UIVPROC) __GLeeGetProcAddress("glVertexAttribI1uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI2uiv = (GLEEPFNGLVERTEXATTRIBI2UIVPROC) __GLeeGetProcAddress("glVertexAttribI2uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI3uiv = (GLEEPFNGLVERTEXATTRIBI3UIVPROC) __GLeeGetProcAddress("glVertexAttribI3uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI4uiv = (GLEEPFNGLVERTEXATTRIBI4UIVPROC) __GLeeGetProcAddress("glVertexAttribI4uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI4bv = (GLEEPFNGLVERTEXATTRIBI4BVPROC) __GLeeGetProcAddress("glVertexAttribI4bv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI4sv = (GLEEPFNGLVERTEXATTRIBI4SVPROC) __GLeeGetProcAddress("glVertexAttribI4sv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI4ubv = (GLEEPFNGLVERTEXATTRIBI4UBVPROC) __GLeeGetProcAddress("glVertexAttribI4ubv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI4usv = (GLEEPFNGLVERTEXATTRIBI4USVPROC) __GLeeGetProcAddress("glVertexAttribI4usv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetUniformuiv = (GLEEPFNGLGETUNIFORMUIVPROC) __GLeeGetProcAddress("glGetUniformuiv"))!=0) nLinked++; if ((GLeeFuncPtr_glBindFragDataLocation = (GLEEPFNGLBINDFRAGDATALOCATIONPROC) __GLeeGetProcAddress("glBindFragDataLocation"))!=0) nLinked++; if ((GLeeFuncPtr_glGetFragDataLocation = (GLEEPFNGLGETFRAGDATALOCATIONPROC) __GLeeGetProcAddress("glGetFragDataLocation"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform1ui = (GLEEPFNGLUNIFORM1UIPROC) __GLeeGetProcAddress("glUniform1ui"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform2ui = (GLEEPFNGLUNIFORM2UIPROC) __GLeeGetProcAddress("glUniform2ui"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform3ui = (GLEEPFNGLUNIFORM3UIPROC) __GLeeGetProcAddress("glUniform3ui"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform4ui = (GLEEPFNGLUNIFORM4UIPROC) __GLeeGetProcAddress("glUniform4ui"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform1uiv = (GLEEPFNGLUNIFORM1UIVPROC) __GLeeGetProcAddress("glUniform1uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform2uiv = (GLEEPFNGLUNIFORM2UIVPROC) __GLeeGetProcAddress("glUniform2uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform3uiv = (GLEEPFNGLUNIFORM3UIVPROC) __GLeeGetProcAddress("glUniform3uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform4uiv = (GLEEPFNGLUNIFORM4UIVPROC) __GLeeGetProcAddress("glUniform4uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glTexParameterIiv = (GLEEPFNGLTEXPARAMETERIIVPROC) __GLeeGetProcAddress("glTexParameterIiv"))!=0) nLinked++; if ((GLeeFuncPtr_glTexParameterIuiv = (GLEEPFNGLTEXPARAMETERIUIVPROC) __GLeeGetProcAddress("glTexParameterIuiv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTexParameterIiv = (GLEEPFNGLGETTEXPARAMETERIIVPROC) __GLeeGetProcAddress("glGetTexParameterIiv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTexParameterIuiv = (GLEEPFNGLGETTEXPARAMETERIUIVPROC) __GLeeGetProcAddress("glGetTexParameterIuiv"))!=0) nLinked++; if ((GLeeFuncPtr_glClearBufferiv = (GLEEPFNGLCLEARBUFFERIVPROC) __GLeeGetProcAddress("glClearBufferiv"))!=0) nLinked++; if ((GLeeFuncPtr_glClearBufferuiv = (GLEEPFNGLCLEARBUFFERUIVPROC) __GLeeGetProcAddress("glClearBufferuiv"))!=0) nLinked++; if ((GLeeFuncPtr_glClearBufferfv = (GLEEPFNGLCLEARBUFFERFVPROC) __GLeeGetProcAddress("glClearBufferfv"))!=0) nLinked++; if ((GLeeFuncPtr_glClearBufferfi = (GLEEPFNGLCLEARBUFFERFIPROC) __GLeeGetProcAddress("glClearBufferfi"))!=0) nLinked++; if ((GLeeFuncPtr_glGetStringi = (GLEEPFNGLGETSTRINGIPROC) __GLeeGetProcAddress("glGetStringi"))!=0) nLinked++; #endif if (nLinked==58) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_VERSION_3_1(void) { GLint nLinked=0; #ifdef __GLEE_GL_VERSION_3_1 if ((GLeeFuncPtr_glDrawArraysInstanced = (GLEEPFNGLDRAWARRAYSINSTANCEDPROC) __GLeeGetProcAddress("glDrawArraysInstanced"))!=0) nLinked++; if ((GLeeFuncPtr_glDrawElementsInstanced = (GLEEPFNGLDRAWELEMENTSINSTANCEDPROC) __GLeeGetProcAddress("glDrawElementsInstanced"))!=0) nLinked++; if ((GLeeFuncPtr_glTexBuffer = (GLEEPFNGLTEXBUFFERPROC) __GLeeGetProcAddress("glTexBuffer"))!=0) nLinked++; if ((GLeeFuncPtr_glPrimitiveRestartIndex = (GLEEPFNGLPRIMITIVERESTARTINDEXPROC) __GLeeGetProcAddress("glPrimitiveRestartIndex"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_VERSION_3_2(void) { GLint nLinked=0; #ifdef __GLEE_GL_VERSION_3_2 if ((GLeeFuncPtr_glGetInteger64i_v = (GLEEPFNGLGETINTEGER64I_VPROC) __GLeeGetProcAddress("glGetInteger64i_v"))!=0) nLinked++; if ((GLeeFuncPtr_glGetBufferParameteri64v = (GLEEPFNGLGETBUFFERPARAMETERI64VPROC) __GLeeGetProcAddress("glGetBufferParameteri64v"))!=0) nLinked++; if ((GLeeFuncPtr_glFramebufferTexture = (GLEEPFNGLFRAMEBUFFERTEXTUREPROC) __GLeeGetProcAddress("glFramebufferTexture"))!=0) nLinked++; #endif if (nLinked==3) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_VERSION_3_3(void) { GLint nLinked=0; #ifdef __GLEE_GL_VERSION_3_3 if ((GLeeFuncPtr_glVertexAttribDivisor = (GLEEPFNGLVERTEXATTRIBDIVISORPROC) __GLeeGetProcAddress("glVertexAttribDivisor"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_VERSION_4_0(void) { GLint nLinked=0; #ifdef __GLEE_GL_VERSION_4_0 if ((GLeeFuncPtr_glMinSampleShading = (GLEEPFNGLMINSAMPLESHADINGPROC) __GLeeGetProcAddress("glMinSampleShading"))!=0) nLinked++; if ((GLeeFuncPtr_glBlendEquationi = (GLEEPFNGLBLENDEQUATIONIPROC) __GLeeGetProcAddress("glBlendEquationi"))!=0) nLinked++; if ((GLeeFuncPtr_glBlendEquationSeparatei = (GLEEPFNGLBLENDEQUATIONSEPARATEIPROC) __GLeeGetProcAddress("glBlendEquationSeparatei"))!=0) nLinked++; if ((GLeeFuncPtr_glBlendFunci = (GLEEPFNGLBLENDFUNCIPROC) __GLeeGetProcAddress("glBlendFunci"))!=0) nLinked++; if ((GLeeFuncPtr_glBlendFuncSeparatei = (GLEEPFNGLBLENDFUNCSEPARATEIPROC) __GLeeGetProcAddress("glBlendFuncSeparatei"))!=0) nLinked++; #endif if (nLinked==5) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_VERSION_4_1(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_VERSION_4_2(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_VERSION_4_3(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_multitexture(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_multitexture if ((GLeeFuncPtr_glActiveTextureARB = (GLEEPFNGLACTIVETEXTUREARBPROC) __GLeeGetProcAddress("glActiveTextureARB"))!=0) nLinked++; if ((GLeeFuncPtr_glClientActiveTextureARB = (GLEEPFNGLCLIENTACTIVETEXTUREARBPROC) __GLeeGetProcAddress("glClientActiveTextureARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1dARB = (GLEEPFNGLMULTITEXCOORD1DARBPROC) __GLeeGetProcAddress("glMultiTexCoord1dARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1dvARB = (GLEEPFNGLMULTITEXCOORD1DVARBPROC) __GLeeGetProcAddress("glMultiTexCoord1dvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1fARB = (GLEEPFNGLMULTITEXCOORD1FARBPROC) __GLeeGetProcAddress("glMultiTexCoord1fARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1fvARB = (GLEEPFNGLMULTITEXCOORD1FVARBPROC) __GLeeGetProcAddress("glMultiTexCoord1fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1iARB = (GLEEPFNGLMULTITEXCOORD1IARBPROC) __GLeeGetProcAddress("glMultiTexCoord1iARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1ivARB = (GLEEPFNGLMULTITEXCOORD1IVARBPROC) __GLeeGetProcAddress("glMultiTexCoord1ivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1sARB = (GLEEPFNGLMULTITEXCOORD1SARBPROC) __GLeeGetProcAddress("glMultiTexCoord1sARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1svARB = (GLEEPFNGLMULTITEXCOORD1SVARBPROC) __GLeeGetProcAddress("glMultiTexCoord1svARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2dARB = (GLEEPFNGLMULTITEXCOORD2DARBPROC) __GLeeGetProcAddress("glMultiTexCoord2dARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2dvARB = (GLEEPFNGLMULTITEXCOORD2DVARBPROC) __GLeeGetProcAddress("glMultiTexCoord2dvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2fARB = (GLEEPFNGLMULTITEXCOORD2FARBPROC) __GLeeGetProcAddress("glMultiTexCoord2fARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2fvARB = (GLEEPFNGLMULTITEXCOORD2FVARBPROC) __GLeeGetProcAddress("glMultiTexCoord2fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2iARB = (GLEEPFNGLMULTITEXCOORD2IARBPROC) __GLeeGetProcAddress("glMultiTexCoord2iARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2ivARB = (GLEEPFNGLMULTITEXCOORD2IVARBPROC) __GLeeGetProcAddress("glMultiTexCoord2ivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2sARB = (GLEEPFNGLMULTITEXCOORD2SARBPROC) __GLeeGetProcAddress("glMultiTexCoord2sARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2svARB = (GLEEPFNGLMULTITEXCOORD2SVARBPROC) __GLeeGetProcAddress("glMultiTexCoord2svARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3dARB = (GLEEPFNGLMULTITEXCOORD3DARBPROC) __GLeeGetProcAddress("glMultiTexCoord3dARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3dvARB = (GLEEPFNGLMULTITEXCOORD3DVARBPROC) __GLeeGetProcAddress("glMultiTexCoord3dvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3fARB = (GLEEPFNGLMULTITEXCOORD3FARBPROC) __GLeeGetProcAddress("glMultiTexCoord3fARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3fvARB = (GLEEPFNGLMULTITEXCOORD3FVARBPROC) __GLeeGetProcAddress("glMultiTexCoord3fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3iARB = (GLEEPFNGLMULTITEXCOORD3IARBPROC) __GLeeGetProcAddress("glMultiTexCoord3iARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3ivARB = (GLEEPFNGLMULTITEXCOORD3IVARBPROC) __GLeeGetProcAddress("glMultiTexCoord3ivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3sARB = (GLEEPFNGLMULTITEXCOORD3SARBPROC) __GLeeGetProcAddress("glMultiTexCoord3sARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3svARB = (GLEEPFNGLMULTITEXCOORD3SVARBPROC) __GLeeGetProcAddress("glMultiTexCoord3svARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4dARB = (GLEEPFNGLMULTITEXCOORD4DARBPROC) __GLeeGetProcAddress("glMultiTexCoord4dARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4dvARB = (GLEEPFNGLMULTITEXCOORD4DVARBPROC) __GLeeGetProcAddress("glMultiTexCoord4dvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4fARB = (GLEEPFNGLMULTITEXCOORD4FARBPROC) __GLeeGetProcAddress("glMultiTexCoord4fARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4fvARB = (GLEEPFNGLMULTITEXCOORD4FVARBPROC) __GLeeGetProcAddress("glMultiTexCoord4fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4iARB = (GLEEPFNGLMULTITEXCOORD4IARBPROC) __GLeeGetProcAddress("glMultiTexCoord4iARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4ivARB = (GLEEPFNGLMULTITEXCOORD4IVARBPROC) __GLeeGetProcAddress("glMultiTexCoord4ivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4sARB = (GLEEPFNGLMULTITEXCOORD4SARBPROC) __GLeeGetProcAddress("glMultiTexCoord4sARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4svARB = (GLEEPFNGLMULTITEXCOORD4SVARBPROC) __GLeeGetProcAddress("glMultiTexCoord4svARB"))!=0) nLinked++; #endif if (nLinked==34) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_transpose_matrix(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_transpose_matrix if ((GLeeFuncPtr_glLoadTransposeMatrixfARB = (GLEEPFNGLLOADTRANSPOSEMATRIXFARBPROC) __GLeeGetProcAddress("glLoadTransposeMatrixfARB"))!=0) nLinked++; if ((GLeeFuncPtr_glLoadTransposeMatrixdARB = (GLEEPFNGLLOADTRANSPOSEMATRIXDARBPROC) __GLeeGetProcAddress("glLoadTransposeMatrixdARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultTransposeMatrixfARB = (GLEEPFNGLMULTTRANSPOSEMATRIXFARBPROC) __GLeeGetProcAddress("glMultTransposeMatrixfARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultTransposeMatrixdARB = (GLEEPFNGLMULTTRANSPOSEMATRIXDARBPROC) __GLeeGetProcAddress("glMultTransposeMatrixdARB"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_multisample(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_multisample if ((GLeeFuncPtr_glSampleCoverageARB = (GLEEPFNGLSAMPLECOVERAGEARBPROC) __GLeeGetProcAddress("glSampleCoverageARB"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_texture_env_add(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_texture_cube_map(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_texture_compression(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_texture_compression if ((GLeeFuncPtr_glCompressedTexImage3DARB = (GLEEPFNGLCOMPRESSEDTEXIMAGE3DARBPROC) __GLeeGetProcAddress("glCompressedTexImage3DARB"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedTexImage2DARB = (GLEEPFNGLCOMPRESSEDTEXIMAGE2DARBPROC) __GLeeGetProcAddress("glCompressedTexImage2DARB"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedTexImage1DARB = (GLEEPFNGLCOMPRESSEDTEXIMAGE1DARBPROC) __GLeeGetProcAddress("glCompressedTexImage1DARB"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedTexSubImage3DARB = (GLEEPFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) __GLeeGetProcAddress("glCompressedTexSubImage3DARB"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedTexSubImage2DARB = (GLEEPFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) __GLeeGetProcAddress("glCompressedTexSubImage2DARB"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedTexSubImage1DARB = (GLEEPFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) __GLeeGetProcAddress("glCompressedTexSubImage1DARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetCompressedTexImageARB = (GLEEPFNGLGETCOMPRESSEDTEXIMAGEARBPROC) __GLeeGetProcAddress("glGetCompressedTexImageARB"))!=0) nLinked++; #endif if (nLinked==7) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_texture_border_clamp(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_point_parameters(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_point_parameters if ((GLeeFuncPtr_glPointParameterfARB = (GLEEPFNGLPOINTPARAMETERFARBPROC) __GLeeGetProcAddress("glPointParameterfARB"))!=0) nLinked++; if ((GLeeFuncPtr_glPointParameterfvARB = (GLEEPFNGLPOINTPARAMETERFVARBPROC) __GLeeGetProcAddress("glPointParameterfvARB"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_vertex_blend(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_vertex_blend if ((GLeeFuncPtr_glWeightbvARB = (GLEEPFNGLWEIGHTBVARBPROC) __GLeeGetProcAddress("glWeightbvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWeightsvARB = (GLEEPFNGLWEIGHTSVARBPROC) __GLeeGetProcAddress("glWeightsvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWeightivARB = (GLEEPFNGLWEIGHTIVARBPROC) __GLeeGetProcAddress("glWeightivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWeightfvARB = (GLEEPFNGLWEIGHTFVARBPROC) __GLeeGetProcAddress("glWeightfvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWeightdvARB = (GLEEPFNGLWEIGHTDVARBPROC) __GLeeGetProcAddress("glWeightdvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWeightubvARB = (GLEEPFNGLWEIGHTUBVARBPROC) __GLeeGetProcAddress("glWeightubvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWeightusvARB = (GLEEPFNGLWEIGHTUSVARBPROC) __GLeeGetProcAddress("glWeightusvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWeightuivARB = (GLEEPFNGLWEIGHTUIVARBPROC) __GLeeGetProcAddress("glWeightuivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWeightPointerARB = (GLEEPFNGLWEIGHTPOINTERARBPROC) __GLeeGetProcAddress("glWeightPointerARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexBlendARB = (GLEEPFNGLVERTEXBLENDARBPROC) __GLeeGetProcAddress("glVertexBlendARB"))!=0) nLinked++; #endif if (nLinked==10) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_matrix_palette(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_matrix_palette if ((GLeeFuncPtr_glCurrentPaletteMatrixARB = (GLEEPFNGLCURRENTPALETTEMATRIXARBPROC) __GLeeGetProcAddress("glCurrentPaletteMatrixARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixIndexubvARB = (GLEEPFNGLMATRIXINDEXUBVARBPROC) __GLeeGetProcAddress("glMatrixIndexubvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixIndexusvARB = (GLEEPFNGLMATRIXINDEXUSVARBPROC) __GLeeGetProcAddress("glMatrixIndexusvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixIndexuivARB = (GLEEPFNGLMATRIXINDEXUIVARBPROC) __GLeeGetProcAddress("glMatrixIndexuivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixIndexPointerARB = (GLEEPFNGLMATRIXINDEXPOINTERARBPROC) __GLeeGetProcAddress("glMatrixIndexPointerARB"))!=0) nLinked++; #endif if (nLinked==5) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_texture_env_combine(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_texture_env_crossbar(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_texture_env_dot3(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_texture_mirrored_repeat(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_depth_texture(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_shadow(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_shadow_ambient(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_window_pos(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_window_pos if ((GLeeFuncPtr_glWindowPos2dARB = (GLEEPFNGLWINDOWPOS2DARBPROC) __GLeeGetProcAddress("glWindowPos2dARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2dvARB = (GLEEPFNGLWINDOWPOS2DVARBPROC) __GLeeGetProcAddress("glWindowPos2dvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2fARB = (GLEEPFNGLWINDOWPOS2FARBPROC) __GLeeGetProcAddress("glWindowPos2fARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2fvARB = (GLEEPFNGLWINDOWPOS2FVARBPROC) __GLeeGetProcAddress("glWindowPos2fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2iARB = (GLEEPFNGLWINDOWPOS2IARBPROC) __GLeeGetProcAddress("glWindowPos2iARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2ivARB = (GLEEPFNGLWINDOWPOS2IVARBPROC) __GLeeGetProcAddress("glWindowPos2ivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2sARB = (GLEEPFNGLWINDOWPOS2SARBPROC) __GLeeGetProcAddress("glWindowPos2sARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2svARB = (GLEEPFNGLWINDOWPOS2SVARBPROC) __GLeeGetProcAddress("glWindowPos2svARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3dARB = (GLEEPFNGLWINDOWPOS3DARBPROC) __GLeeGetProcAddress("glWindowPos3dARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3dvARB = (GLEEPFNGLWINDOWPOS3DVARBPROC) __GLeeGetProcAddress("glWindowPos3dvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3fARB = (GLEEPFNGLWINDOWPOS3FARBPROC) __GLeeGetProcAddress("glWindowPos3fARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3fvARB = (GLEEPFNGLWINDOWPOS3FVARBPROC) __GLeeGetProcAddress("glWindowPos3fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3iARB = (GLEEPFNGLWINDOWPOS3IARBPROC) __GLeeGetProcAddress("glWindowPos3iARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3ivARB = (GLEEPFNGLWINDOWPOS3IVARBPROC) __GLeeGetProcAddress("glWindowPos3ivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3sARB = (GLEEPFNGLWINDOWPOS3SARBPROC) __GLeeGetProcAddress("glWindowPos3sARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3svARB = (GLEEPFNGLWINDOWPOS3SVARBPROC) __GLeeGetProcAddress("glWindowPos3svARB"))!=0) nLinked++; #endif if (nLinked==16) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_vertex_program(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_vertex_program if ((GLeeFuncPtr_glVertexAttrib1dARB = (GLEEPFNGLVERTEXATTRIB1DARBPROC) __GLeeGetProcAddress("glVertexAttrib1dARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1dvARB = (GLEEPFNGLVERTEXATTRIB1DVARBPROC) __GLeeGetProcAddress("glVertexAttrib1dvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1fARB = (GLEEPFNGLVERTEXATTRIB1FARBPROC) __GLeeGetProcAddress("glVertexAttrib1fARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1fvARB = (GLEEPFNGLVERTEXATTRIB1FVARBPROC) __GLeeGetProcAddress("glVertexAttrib1fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1sARB = (GLEEPFNGLVERTEXATTRIB1SARBPROC) __GLeeGetProcAddress("glVertexAttrib1sARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1svARB = (GLEEPFNGLVERTEXATTRIB1SVARBPROC) __GLeeGetProcAddress("glVertexAttrib1svARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2dARB = (GLEEPFNGLVERTEXATTRIB2DARBPROC) __GLeeGetProcAddress("glVertexAttrib2dARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2dvARB = (GLEEPFNGLVERTEXATTRIB2DVARBPROC) __GLeeGetProcAddress("glVertexAttrib2dvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2fARB = (GLEEPFNGLVERTEXATTRIB2FARBPROC) __GLeeGetProcAddress("glVertexAttrib2fARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2fvARB = (GLEEPFNGLVERTEXATTRIB2FVARBPROC) __GLeeGetProcAddress("glVertexAttrib2fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2sARB = (GLEEPFNGLVERTEXATTRIB2SARBPROC) __GLeeGetProcAddress("glVertexAttrib2sARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2svARB = (GLEEPFNGLVERTEXATTRIB2SVARBPROC) __GLeeGetProcAddress("glVertexAttrib2svARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3dARB = (GLEEPFNGLVERTEXATTRIB3DARBPROC) __GLeeGetProcAddress("glVertexAttrib3dARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3dvARB = (GLEEPFNGLVERTEXATTRIB3DVARBPROC) __GLeeGetProcAddress("glVertexAttrib3dvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3fARB = (GLEEPFNGLVERTEXATTRIB3FARBPROC) __GLeeGetProcAddress("glVertexAttrib3fARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3fvARB = (GLEEPFNGLVERTEXATTRIB3FVARBPROC) __GLeeGetProcAddress("glVertexAttrib3fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3sARB = (GLEEPFNGLVERTEXATTRIB3SARBPROC) __GLeeGetProcAddress("glVertexAttrib3sARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3svARB = (GLEEPFNGLVERTEXATTRIB3SVARBPROC) __GLeeGetProcAddress("glVertexAttrib3svARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4NbvARB = (GLEEPFNGLVERTEXATTRIB4NBVARBPROC) __GLeeGetProcAddress("glVertexAttrib4NbvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4NivARB = (GLEEPFNGLVERTEXATTRIB4NIVARBPROC) __GLeeGetProcAddress("glVertexAttrib4NivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4NsvARB = (GLEEPFNGLVERTEXATTRIB4NSVARBPROC) __GLeeGetProcAddress("glVertexAttrib4NsvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4NubARB = (GLEEPFNGLVERTEXATTRIB4NUBARBPROC) __GLeeGetProcAddress("glVertexAttrib4NubARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4NubvARB = (GLEEPFNGLVERTEXATTRIB4NUBVARBPROC) __GLeeGetProcAddress("glVertexAttrib4NubvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4NuivARB = (GLEEPFNGLVERTEXATTRIB4NUIVARBPROC) __GLeeGetProcAddress("glVertexAttrib4NuivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4NusvARB = (GLEEPFNGLVERTEXATTRIB4NUSVARBPROC) __GLeeGetProcAddress("glVertexAttrib4NusvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4bvARB = (GLEEPFNGLVERTEXATTRIB4BVARBPROC) __GLeeGetProcAddress("glVertexAttrib4bvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4dARB = (GLEEPFNGLVERTEXATTRIB4DARBPROC) __GLeeGetProcAddress("glVertexAttrib4dARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4dvARB = (GLEEPFNGLVERTEXATTRIB4DVARBPROC) __GLeeGetProcAddress("glVertexAttrib4dvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4fARB = (GLEEPFNGLVERTEXATTRIB4FARBPROC) __GLeeGetProcAddress("glVertexAttrib4fARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4fvARB = (GLEEPFNGLVERTEXATTRIB4FVARBPROC) __GLeeGetProcAddress("glVertexAttrib4fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4ivARB = (GLEEPFNGLVERTEXATTRIB4IVARBPROC) __GLeeGetProcAddress("glVertexAttrib4ivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4sARB = (GLEEPFNGLVERTEXATTRIB4SARBPROC) __GLeeGetProcAddress("glVertexAttrib4sARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4svARB = (GLEEPFNGLVERTEXATTRIB4SVARBPROC) __GLeeGetProcAddress("glVertexAttrib4svARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4ubvARB = (GLEEPFNGLVERTEXATTRIB4UBVARBPROC) __GLeeGetProcAddress("glVertexAttrib4ubvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4uivARB = (GLEEPFNGLVERTEXATTRIB4UIVARBPROC) __GLeeGetProcAddress("glVertexAttrib4uivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4usvARB = (GLEEPFNGLVERTEXATTRIB4USVARBPROC) __GLeeGetProcAddress("glVertexAttrib4usvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribPointerARB = (GLEEPFNGLVERTEXATTRIBPOINTERARBPROC) __GLeeGetProcAddress("glVertexAttribPointerARB"))!=0) nLinked++; if ((GLeeFuncPtr_glEnableVertexAttribArrayARB = (GLEEPFNGLENABLEVERTEXATTRIBARRAYARBPROC) __GLeeGetProcAddress("glEnableVertexAttribArrayARB"))!=0) nLinked++; if ((GLeeFuncPtr_glDisableVertexAttribArrayARB = (GLEEPFNGLDISABLEVERTEXATTRIBARRAYARBPROC) __GLeeGetProcAddress("glDisableVertexAttribArrayARB"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramStringARB = (GLEEPFNGLPROGRAMSTRINGARBPROC) __GLeeGetProcAddress("glProgramStringARB"))!=0) nLinked++; if ((GLeeFuncPtr_glBindProgramARB = (GLEEPFNGLBINDPROGRAMARBPROC) __GLeeGetProcAddress("glBindProgramARB"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteProgramsARB = (GLEEPFNGLDELETEPROGRAMSARBPROC) __GLeeGetProcAddress("glDeleteProgramsARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGenProgramsARB = (GLEEPFNGLGENPROGRAMSARBPROC) __GLeeGetProcAddress("glGenProgramsARB"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramEnvParameter4dARB = (GLEEPFNGLPROGRAMENVPARAMETER4DARBPROC) __GLeeGetProcAddress("glProgramEnvParameter4dARB"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramEnvParameter4dvARB = (GLEEPFNGLPROGRAMENVPARAMETER4DVARBPROC) __GLeeGetProcAddress("glProgramEnvParameter4dvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramEnvParameter4fARB = (GLEEPFNGLPROGRAMENVPARAMETER4FARBPROC) __GLeeGetProcAddress("glProgramEnvParameter4fARB"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramEnvParameter4fvARB = (GLEEPFNGLPROGRAMENVPARAMETER4FVARBPROC) __GLeeGetProcAddress("glProgramEnvParameter4fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramLocalParameter4dARB = (GLEEPFNGLPROGRAMLOCALPARAMETER4DARBPROC) __GLeeGetProcAddress("glProgramLocalParameter4dARB"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramLocalParameter4dvARB = (GLEEPFNGLPROGRAMLOCALPARAMETER4DVARBPROC) __GLeeGetProcAddress("glProgramLocalParameter4dvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramLocalParameter4fARB = (GLEEPFNGLPROGRAMLOCALPARAMETER4FARBPROC) __GLeeGetProcAddress("glProgramLocalParameter4fARB"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramLocalParameter4fvARB = (GLEEPFNGLPROGRAMLOCALPARAMETER4FVARBPROC) __GLeeGetProcAddress("glProgramLocalParameter4fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramEnvParameterdvARB = (GLEEPFNGLGETPROGRAMENVPARAMETERDVARBPROC) __GLeeGetProcAddress("glGetProgramEnvParameterdvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramEnvParameterfvARB = (GLEEPFNGLGETPROGRAMENVPARAMETERFVARBPROC) __GLeeGetProcAddress("glGetProgramEnvParameterfvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramLocalParameterdvARB = (GLEEPFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) __GLeeGetProcAddress("glGetProgramLocalParameterdvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramLocalParameterfvARB = (GLEEPFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) __GLeeGetProcAddress("glGetProgramLocalParameterfvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramivARB = (GLEEPFNGLGETPROGRAMIVARBPROC) __GLeeGetProcAddress("glGetProgramivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramStringARB = (GLEEPFNGLGETPROGRAMSTRINGARBPROC) __GLeeGetProcAddress("glGetProgramStringARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribdvARB = (GLEEPFNGLGETVERTEXATTRIBDVARBPROC) __GLeeGetProcAddress("glGetVertexAttribdvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribfvARB = (GLEEPFNGLGETVERTEXATTRIBFVARBPROC) __GLeeGetProcAddress("glGetVertexAttribfvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribivARB = (GLEEPFNGLGETVERTEXATTRIBIVARBPROC) __GLeeGetProcAddress("glGetVertexAttribivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribPointervARB = (GLEEPFNGLGETVERTEXATTRIBPOINTERVARBPROC) __GLeeGetProcAddress("glGetVertexAttribPointervARB"))!=0) nLinked++; if ((GLeeFuncPtr_glIsProgramARB = (GLEEPFNGLISPROGRAMARBPROC) __GLeeGetProcAddress("glIsProgramARB"))!=0) nLinked++; #endif if (nLinked==62) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_fragment_program(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_vertex_buffer_object(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_vertex_buffer_object if ((GLeeFuncPtr_glBindBufferARB = (GLEEPFNGLBINDBUFFERARBPROC) __GLeeGetProcAddress("glBindBufferARB"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteBuffersARB = (GLEEPFNGLDELETEBUFFERSARBPROC) __GLeeGetProcAddress("glDeleteBuffersARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGenBuffersARB = (GLEEPFNGLGENBUFFERSARBPROC) __GLeeGetProcAddress("glGenBuffersARB"))!=0) nLinked++; if ((GLeeFuncPtr_glIsBufferARB = (GLEEPFNGLISBUFFERARBPROC) __GLeeGetProcAddress("glIsBufferARB"))!=0) nLinked++; if ((GLeeFuncPtr_glBufferDataARB = (GLEEPFNGLBUFFERDATAARBPROC) __GLeeGetProcAddress("glBufferDataARB"))!=0) nLinked++; if ((GLeeFuncPtr_glBufferSubDataARB = (GLEEPFNGLBUFFERSUBDATAARBPROC) __GLeeGetProcAddress("glBufferSubDataARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetBufferSubDataARB = (GLEEPFNGLGETBUFFERSUBDATAARBPROC) __GLeeGetProcAddress("glGetBufferSubDataARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMapBufferARB = (GLEEPFNGLMAPBUFFERARBPROC) __GLeeGetProcAddress("glMapBufferARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUnmapBufferARB = (GLEEPFNGLUNMAPBUFFERARBPROC) __GLeeGetProcAddress("glUnmapBufferARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetBufferParameterivARB = (GLEEPFNGLGETBUFFERPARAMETERIVARBPROC) __GLeeGetProcAddress("glGetBufferParameterivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetBufferPointervARB = (GLEEPFNGLGETBUFFERPOINTERVARBPROC) __GLeeGetProcAddress("glGetBufferPointervARB"))!=0) nLinked++; #endif if (nLinked==11) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_occlusion_query(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_occlusion_query if ((GLeeFuncPtr_glGenQueriesARB = (GLEEPFNGLGENQUERIESARBPROC) __GLeeGetProcAddress("glGenQueriesARB"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteQueriesARB = (GLEEPFNGLDELETEQUERIESARBPROC) __GLeeGetProcAddress("glDeleteQueriesARB"))!=0) nLinked++; if ((GLeeFuncPtr_glIsQueryARB = (GLEEPFNGLISQUERYARBPROC) __GLeeGetProcAddress("glIsQueryARB"))!=0) nLinked++; if ((GLeeFuncPtr_glBeginQueryARB = (GLEEPFNGLBEGINQUERYARBPROC) __GLeeGetProcAddress("glBeginQueryARB"))!=0) nLinked++; if ((GLeeFuncPtr_glEndQueryARB = (GLEEPFNGLENDQUERYARBPROC) __GLeeGetProcAddress("glEndQueryARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetQueryivARB = (GLEEPFNGLGETQUERYIVARBPROC) __GLeeGetProcAddress("glGetQueryivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetQueryObjectivARB = (GLEEPFNGLGETQUERYOBJECTIVARBPROC) __GLeeGetProcAddress("glGetQueryObjectivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetQueryObjectuivARB = (GLEEPFNGLGETQUERYOBJECTUIVARBPROC) __GLeeGetProcAddress("glGetQueryObjectuivARB"))!=0) nLinked++; #endif if (nLinked==8) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_shader_objects(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_shader_objects if ((GLeeFuncPtr_glDeleteObjectARB = (GLEEPFNGLDELETEOBJECTARBPROC) __GLeeGetProcAddress("glDeleteObjectARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetHandleARB = (GLEEPFNGLGETHANDLEARBPROC) __GLeeGetProcAddress("glGetHandleARB"))!=0) nLinked++; if ((GLeeFuncPtr_glDetachObjectARB = (GLEEPFNGLDETACHOBJECTARBPROC) __GLeeGetProcAddress("glDetachObjectARB"))!=0) nLinked++; if ((GLeeFuncPtr_glCreateShaderObjectARB = (GLEEPFNGLCREATESHADEROBJECTARBPROC) __GLeeGetProcAddress("glCreateShaderObjectARB"))!=0) nLinked++; if ((GLeeFuncPtr_glShaderSourceARB = (GLEEPFNGLSHADERSOURCEARBPROC) __GLeeGetProcAddress("glShaderSourceARB"))!=0) nLinked++; if ((GLeeFuncPtr_glCompileShaderARB = (GLEEPFNGLCOMPILESHADERARBPROC) __GLeeGetProcAddress("glCompileShaderARB"))!=0) nLinked++; if ((GLeeFuncPtr_glCreateProgramObjectARB = (GLEEPFNGLCREATEPROGRAMOBJECTARBPROC) __GLeeGetProcAddress("glCreateProgramObjectARB"))!=0) nLinked++; if ((GLeeFuncPtr_glAttachObjectARB = (GLEEPFNGLATTACHOBJECTARBPROC) __GLeeGetProcAddress("glAttachObjectARB"))!=0) nLinked++; if ((GLeeFuncPtr_glLinkProgramARB = (GLEEPFNGLLINKPROGRAMARBPROC) __GLeeGetProcAddress("glLinkProgramARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUseProgramObjectARB = (GLEEPFNGLUSEPROGRAMOBJECTARBPROC) __GLeeGetProcAddress("glUseProgramObjectARB"))!=0) nLinked++; if ((GLeeFuncPtr_glValidateProgramARB = (GLEEPFNGLVALIDATEPROGRAMARBPROC) __GLeeGetProcAddress("glValidateProgramARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform1fARB = (GLEEPFNGLUNIFORM1FARBPROC) __GLeeGetProcAddress("glUniform1fARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform2fARB = (GLEEPFNGLUNIFORM2FARBPROC) __GLeeGetProcAddress("glUniform2fARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform3fARB = (GLEEPFNGLUNIFORM3FARBPROC) __GLeeGetProcAddress("glUniform3fARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform4fARB = (GLEEPFNGLUNIFORM4FARBPROC) __GLeeGetProcAddress("glUniform4fARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform1iARB = (GLEEPFNGLUNIFORM1IARBPROC) __GLeeGetProcAddress("glUniform1iARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform2iARB = (GLEEPFNGLUNIFORM2IARBPROC) __GLeeGetProcAddress("glUniform2iARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform3iARB = (GLEEPFNGLUNIFORM3IARBPROC) __GLeeGetProcAddress("glUniform3iARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform4iARB = (GLEEPFNGLUNIFORM4IARBPROC) __GLeeGetProcAddress("glUniform4iARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform1fvARB = (GLEEPFNGLUNIFORM1FVARBPROC) __GLeeGetProcAddress("glUniform1fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform2fvARB = (GLEEPFNGLUNIFORM2FVARBPROC) __GLeeGetProcAddress("glUniform2fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform3fvARB = (GLEEPFNGLUNIFORM3FVARBPROC) __GLeeGetProcAddress("glUniform3fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform4fvARB = (GLEEPFNGLUNIFORM4FVARBPROC) __GLeeGetProcAddress("glUniform4fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform1ivARB = (GLEEPFNGLUNIFORM1IVARBPROC) __GLeeGetProcAddress("glUniform1ivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform2ivARB = (GLEEPFNGLUNIFORM2IVARBPROC) __GLeeGetProcAddress("glUniform2ivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform3ivARB = (GLEEPFNGLUNIFORM3IVARBPROC) __GLeeGetProcAddress("glUniform3ivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform4ivARB = (GLEEPFNGLUNIFORM4IVARBPROC) __GLeeGetProcAddress("glUniform4ivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniformMatrix2fvARB = (GLEEPFNGLUNIFORMMATRIX2FVARBPROC) __GLeeGetProcAddress("glUniformMatrix2fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniformMatrix3fvARB = (GLEEPFNGLUNIFORMMATRIX3FVARBPROC) __GLeeGetProcAddress("glUniformMatrix3fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniformMatrix4fvARB = (GLEEPFNGLUNIFORMMATRIX4FVARBPROC) __GLeeGetProcAddress("glUniformMatrix4fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetObjectParameterfvARB = (GLEEPFNGLGETOBJECTPARAMETERFVARBPROC) __GLeeGetProcAddress("glGetObjectParameterfvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetObjectParameterivARB = (GLEEPFNGLGETOBJECTPARAMETERIVARBPROC) __GLeeGetProcAddress("glGetObjectParameterivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetInfoLogARB = (GLEEPFNGLGETINFOLOGARBPROC) __GLeeGetProcAddress("glGetInfoLogARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetAttachedObjectsARB = (GLEEPFNGLGETATTACHEDOBJECTSARBPROC) __GLeeGetProcAddress("glGetAttachedObjectsARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetUniformLocationARB = (GLEEPFNGLGETUNIFORMLOCATIONARBPROC) __GLeeGetProcAddress("glGetUniformLocationARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetActiveUniformARB = (GLEEPFNGLGETACTIVEUNIFORMARBPROC) __GLeeGetProcAddress("glGetActiveUniformARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetUniformfvARB = (GLEEPFNGLGETUNIFORMFVARBPROC) __GLeeGetProcAddress("glGetUniformfvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetUniformivARB = (GLEEPFNGLGETUNIFORMIVARBPROC) __GLeeGetProcAddress("glGetUniformivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetShaderSourceARB = (GLEEPFNGLGETSHADERSOURCEARBPROC) __GLeeGetProcAddress("glGetShaderSourceARB"))!=0) nLinked++; #endif if (nLinked==39) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_vertex_shader(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_vertex_shader if ((GLeeFuncPtr_glBindAttribLocationARB = (GLEEPFNGLBINDATTRIBLOCATIONARBPROC) __GLeeGetProcAddress("glBindAttribLocationARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetActiveAttribARB = (GLEEPFNGLGETACTIVEATTRIBARBPROC) __GLeeGetProcAddress("glGetActiveAttribARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetAttribLocationARB = (GLEEPFNGLGETATTRIBLOCATIONARBPROC) __GLeeGetProcAddress("glGetAttribLocationARB"))!=0) nLinked++; #endif if (nLinked==3) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_fragment_shader(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_shading_language_100(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_texture_non_power_of_two(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_point_sprite(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_fragment_program_shadow(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_draw_buffers(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_draw_buffers if ((GLeeFuncPtr_glDrawBuffersARB = (GLEEPFNGLDRAWBUFFERSARBPROC) __GLeeGetProcAddress("glDrawBuffersARB"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_texture_rectangle(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_color_buffer_float(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_color_buffer_float if ((GLeeFuncPtr_glClampColorARB = (GLEEPFNGLCLAMPCOLORARBPROC) __GLeeGetProcAddress("glClampColorARB"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_half_float_pixel(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_texture_float(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_pixel_buffer_object(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_depth_buffer_float(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_draw_instanced(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_draw_instanced if ((GLeeFuncPtr_glDrawArraysInstancedARB = (GLEEPFNGLDRAWARRAYSINSTANCEDARBPROC) __GLeeGetProcAddress("glDrawArraysInstancedARB"))!=0) nLinked++; if ((GLeeFuncPtr_glDrawElementsInstancedARB = (GLEEPFNGLDRAWELEMENTSINSTANCEDARBPROC) __GLeeGetProcAddress("glDrawElementsInstancedARB"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_framebuffer_object(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_framebuffer_object if ((GLeeFuncPtr_glIsRenderbuffer = (GLEEPFNGLISRENDERBUFFERPROC) __GLeeGetProcAddress("glIsRenderbuffer"))!=0) nLinked++; if ((GLeeFuncPtr_glBindRenderbuffer = (GLEEPFNGLBINDRENDERBUFFERPROC) __GLeeGetProcAddress("glBindRenderbuffer"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteRenderbuffers = (GLEEPFNGLDELETERENDERBUFFERSPROC) __GLeeGetProcAddress("glDeleteRenderbuffers"))!=0) nLinked++; if ((GLeeFuncPtr_glGenRenderbuffers = (GLEEPFNGLGENRENDERBUFFERSPROC) __GLeeGetProcAddress("glGenRenderbuffers"))!=0) nLinked++; if ((GLeeFuncPtr_glRenderbufferStorage = (GLEEPFNGLRENDERBUFFERSTORAGEPROC) __GLeeGetProcAddress("glRenderbufferStorage"))!=0) nLinked++; if ((GLeeFuncPtr_glGetRenderbufferParameteriv = (GLEEPFNGLGETRENDERBUFFERPARAMETERIVPROC) __GLeeGetProcAddress("glGetRenderbufferParameteriv"))!=0) nLinked++; if ((GLeeFuncPtr_glIsFramebuffer = (GLEEPFNGLISFRAMEBUFFERPROC) __GLeeGetProcAddress("glIsFramebuffer"))!=0) nLinked++; if ((GLeeFuncPtr_glBindFramebuffer = (GLEEPFNGLBINDFRAMEBUFFERPROC) __GLeeGetProcAddress("glBindFramebuffer"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteFramebuffers = (GLEEPFNGLDELETEFRAMEBUFFERSPROC) __GLeeGetProcAddress("glDeleteFramebuffers"))!=0) nLinked++; if ((GLeeFuncPtr_glGenFramebuffers = (GLEEPFNGLGENFRAMEBUFFERSPROC) __GLeeGetProcAddress("glGenFramebuffers"))!=0) nLinked++; if ((GLeeFuncPtr_glCheckFramebufferStatus = (GLEEPFNGLCHECKFRAMEBUFFERSTATUSPROC) __GLeeGetProcAddress("glCheckFramebufferStatus"))!=0) nLinked++; if ((GLeeFuncPtr_glFramebufferTexture1D = (GLEEPFNGLFRAMEBUFFERTEXTURE1DPROC) __GLeeGetProcAddress("glFramebufferTexture1D"))!=0) nLinked++; if ((GLeeFuncPtr_glFramebufferTexture2D = (GLEEPFNGLFRAMEBUFFERTEXTURE2DPROC) __GLeeGetProcAddress("glFramebufferTexture2D"))!=0) nLinked++; if ((GLeeFuncPtr_glFramebufferTexture3D = (GLEEPFNGLFRAMEBUFFERTEXTURE3DPROC) __GLeeGetProcAddress("glFramebufferTexture3D"))!=0) nLinked++; if ((GLeeFuncPtr_glFramebufferRenderbuffer = (GLEEPFNGLFRAMEBUFFERRENDERBUFFERPROC) __GLeeGetProcAddress("glFramebufferRenderbuffer"))!=0) nLinked++; if ((GLeeFuncPtr_glGetFramebufferAttachmentParameteriv = (GLEEPFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) __GLeeGetProcAddress("glGetFramebufferAttachmentParameteriv"))!=0) nLinked++; if ((GLeeFuncPtr_glGenerateMipmap = (GLEEPFNGLGENERATEMIPMAPPROC) __GLeeGetProcAddress("glGenerateMipmap"))!=0) nLinked++; if ((GLeeFuncPtr_glBlitFramebuffer = (GLEEPFNGLBLITFRAMEBUFFERPROC) __GLeeGetProcAddress("glBlitFramebuffer"))!=0) nLinked++; if ((GLeeFuncPtr_glRenderbufferStorageMultisample = (GLEEPFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) __GLeeGetProcAddress("glRenderbufferStorageMultisample"))!=0) nLinked++; if ((GLeeFuncPtr_glFramebufferTextureLayer = (GLEEPFNGLFRAMEBUFFERTEXTURELAYERPROC) __GLeeGetProcAddress("glFramebufferTextureLayer"))!=0) nLinked++; #endif if (nLinked==20) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_framebuffer_sRGB(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_geometry_shader4(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_geometry_shader4 if ((GLeeFuncPtr_glProgramParameteriARB = (GLEEPFNGLPROGRAMPARAMETERIARBPROC) __GLeeGetProcAddress("glProgramParameteriARB"))!=0) nLinked++; if ((GLeeFuncPtr_glFramebufferTextureARB = (GLEEPFNGLFRAMEBUFFERTEXTUREARBPROC) __GLeeGetProcAddress("glFramebufferTextureARB"))!=0) nLinked++; if ((GLeeFuncPtr_glFramebufferTextureLayerARB = (GLEEPFNGLFRAMEBUFFERTEXTURELAYERARBPROC) __GLeeGetProcAddress("glFramebufferTextureLayerARB"))!=0) nLinked++; if ((GLeeFuncPtr_glFramebufferTextureFaceARB = (GLEEPFNGLFRAMEBUFFERTEXTUREFACEARBPROC) __GLeeGetProcAddress("glFramebufferTextureFaceARB"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_half_float_vertex(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_instanced_arrays(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_instanced_arrays if ((GLeeFuncPtr_glVertexAttribDivisorARB = (GLEEPFNGLVERTEXATTRIBDIVISORARBPROC) __GLeeGetProcAddress("glVertexAttribDivisorARB"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_map_buffer_range(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_map_buffer_range if ((GLeeFuncPtr_glMapBufferRange = (GLEEPFNGLMAPBUFFERRANGEPROC) __GLeeGetProcAddress("glMapBufferRange"))!=0) nLinked++; if ((GLeeFuncPtr_glFlushMappedBufferRange = (GLEEPFNGLFLUSHMAPPEDBUFFERRANGEPROC) __GLeeGetProcAddress("glFlushMappedBufferRange"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_texture_buffer_object(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_texture_buffer_object if ((GLeeFuncPtr_glTexBufferARB = (GLEEPFNGLTEXBUFFERARBPROC) __GLeeGetProcAddress("glTexBufferARB"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_texture_compression_rgtc(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_texture_rg(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_vertex_array_object(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_vertex_array_object if ((GLeeFuncPtr_glBindVertexArray = (GLEEPFNGLBINDVERTEXARRAYPROC) __GLeeGetProcAddress("glBindVertexArray"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteVertexArrays = (GLEEPFNGLDELETEVERTEXARRAYSPROC) __GLeeGetProcAddress("glDeleteVertexArrays"))!=0) nLinked++; if ((GLeeFuncPtr_glGenVertexArrays = (GLEEPFNGLGENVERTEXARRAYSPROC) __GLeeGetProcAddress("glGenVertexArrays"))!=0) nLinked++; if ((GLeeFuncPtr_glIsVertexArray = (GLEEPFNGLISVERTEXARRAYPROC) __GLeeGetProcAddress("glIsVertexArray"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_uniform_buffer_object(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_uniform_buffer_object if ((GLeeFuncPtr_glGetUniformIndices = (GLEEPFNGLGETUNIFORMINDICESPROC) __GLeeGetProcAddress("glGetUniformIndices"))!=0) nLinked++; if ((GLeeFuncPtr_glGetActiveUniformsiv = (GLEEPFNGLGETACTIVEUNIFORMSIVPROC) __GLeeGetProcAddress("glGetActiveUniformsiv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetActiveUniformName = (GLEEPFNGLGETACTIVEUNIFORMNAMEPROC) __GLeeGetProcAddress("glGetActiveUniformName"))!=0) nLinked++; if ((GLeeFuncPtr_glGetUniformBlockIndex = (GLEEPFNGLGETUNIFORMBLOCKINDEXPROC) __GLeeGetProcAddress("glGetUniformBlockIndex"))!=0) nLinked++; if ((GLeeFuncPtr_glGetActiveUniformBlockiv = (GLEEPFNGLGETACTIVEUNIFORMBLOCKIVPROC) __GLeeGetProcAddress("glGetActiveUniformBlockiv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetActiveUniformBlockName = (GLEEPFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) __GLeeGetProcAddress("glGetActiveUniformBlockName"))!=0) nLinked++; if ((GLeeFuncPtr_glUniformBlockBinding = (GLEEPFNGLUNIFORMBLOCKBINDINGPROC) __GLeeGetProcAddress("glUniformBlockBinding"))!=0) nLinked++; #endif if (nLinked==7) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_compatibility(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_copy_buffer(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_copy_buffer if ((GLeeFuncPtr_glCopyBufferSubData = (GLEEPFNGLCOPYBUFFERSUBDATAPROC) __GLeeGetProcAddress("glCopyBufferSubData"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_shader_texture_lod(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_depth_clamp(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_draw_elements_base_vertex(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_draw_elements_base_vertex if ((GLeeFuncPtr_glDrawElementsBaseVertex = (GLEEPFNGLDRAWELEMENTSBASEVERTEXPROC) __GLeeGetProcAddress("glDrawElementsBaseVertex"))!=0) nLinked++; if ((GLeeFuncPtr_glDrawRangeElementsBaseVertex = (GLEEPFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) __GLeeGetProcAddress("glDrawRangeElementsBaseVertex"))!=0) nLinked++; if ((GLeeFuncPtr_glDrawElementsInstancedBaseVertex = (GLEEPFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) __GLeeGetProcAddress("glDrawElementsInstancedBaseVertex"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiDrawElementsBaseVertex = (GLEEPFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) __GLeeGetProcAddress("glMultiDrawElementsBaseVertex"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_fragment_coord_conventions(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_provoking_vertex(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_provoking_vertex if ((GLeeFuncPtr_glProvokingVertex = (GLEEPFNGLPROVOKINGVERTEXPROC) __GLeeGetProcAddress("glProvokingVertex"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_seamless_cube_map(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_sync(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_sync if ((GLeeFuncPtr_glFenceSync = (GLEEPFNGLFENCESYNCPROC) __GLeeGetProcAddress("glFenceSync"))!=0) nLinked++; if ((GLeeFuncPtr_glIsSync = (GLEEPFNGLISSYNCPROC) __GLeeGetProcAddress("glIsSync"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteSync = (GLEEPFNGLDELETESYNCPROC) __GLeeGetProcAddress("glDeleteSync"))!=0) nLinked++; if ((GLeeFuncPtr_glClientWaitSync = (GLEEPFNGLCLIENTWAITSYNCPROC) __GLeeGetProcAddress("glClientWaitSync"))!=0) nLinked++; if ((GLeeFuncPtr_glWaitSync = (GLEEPFNGLWAITSYNCPROC) __GLeeGetProcAddress("glWaitSync"))!=0) nLinked++; if ((GLeeFuncPtr_glGetInteger64v = (GLEEPFNGLGETINTEGER64VPROC) __GLeeGetProcAddress("glGetInteger64v"))!=0) nLinked++; if ((GLeeFuncPtr_glGetSynciv = (GLEEPFNGLGETSYNCIVPROC) __GLeeGetProcAddress("glGetSynciv"))!=0) nLinked++; #endif if (nLinked==7) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_texture_multisample(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_texture_multisample if ((GLeeFuncPtr_glTexImage2DMultisample = (GLEEPFNGLTEXIMAGE2DMULTISAMPLEPROC) __GLeeGetProcAddress("glTexImage2DMultisample"))!=0) nLinked++; if ((GLeeFuncPtr_glTexImage3DMultisample = (GLEEPFNGLTEXIMAGE3DMULTISAMPLEPROC) __GLeeGetProcAddress("glTexImage3DMultisample"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMultisamplefv = (GLEEPFNGLGETMULTISAMPLEFVPROC) __GLeeGetProcAddress("glGetMultisamplefv"))!=0) nLinked++; if ((GLeeFuncPtr_glSampleMaski = (GLEEPFNGLSAMPLEMASKIPROC) __GLeeGetProcAddress("glSampleMaski"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_vertex_array_bgra(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_draw_buffers_blend(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_draw_buffers_blend if ((GLeeFuncPtr_glBlendEquationiARB = (GLEEPFNGLBLENDEQUATIONIARBPROC) __GLeeGetProcAddress("glBlendEquationiARB"))!=0) nLinked++; if ((GLeeFuncPtr_glBlendEquationSeparateiARB = (GLEEPFNGLBLENDEQUATIONSEPARATEIARBPROC) __GLeeGetProcAddress("glBlendEquationSeparateiARB"))!=0) nLinked++; if ((GLeeFuncPtr_glBlendFunciARB = (GLEEPFNGLBLENDFUNCIARBPROC) __GLeeGetProcAddress("glBlendFunciARB"))!=0) nLinked++; if ((GLeeFuncPtr_glBlendFuncSeparateiARB = (GLEEPFNGLBLENDFUNCSEPARATEIARBPROC) __GLeeGetProcAddress("glBlendFuncSeparateiARB"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_sample_shading(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_sample_shading if ((GLeeFuncPtr_glMinSampleShadingARB = (GLEEPFNGLMINSAMPLESHADINGARBPROC) __GLeeGetProcAddress("glMinSampleShadingARB"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_texture_cube_map_array(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_texture_gather(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_texture_query_lod(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_shading_language_include(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_shading_language_include if ((GLeeFuncPtr_glNamedStringARB = (GLEEPFNGLNAMEDSTRINGARBPROC) __GLeeGetProcAddress("glNamedStringARB"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteNamedStringARB = (GLEEPFNGLDELETENAMEDSTRINGARBPROC) __GLeeGetProcAddress("glDeleteNamedStringARB"))!=0) nLinked++; if ((GLeeFuncPtr_glCompileShaderIncludeARB = (GLEEPFNGLCOMPILESHADERINCLUDEARBPROC) __GLeeGetProcAddress("glCompileShaderIncludeARB"))!=0) nLinked++; if ((GLeeFuncPtr_glIsNamedStringARB = (GLEEPFNGLISNAMEDSTRINGARBPROC) __GLeeGetProcAddress("glIsNamedStringARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetNamedStringARB = (GLEEPFNGLGETNAMEDSTRINGARBPROC) __GLeeGetProcAddress("glGetNamedStringARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetNamedStringivARB = (GLEEPFNGLGETNAMEDSTRINGIVARBPROC) __GLeeGetProcAddress("glGetNamedStringivARB"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_texture_compression_bptc(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_blend_func_extended(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_blend_func_extended if ((GLeeFuncPtr_glBindFragDataLocationIndexed = (GLEEPFNGLBINDFRAGDATALOCATIONINDEXEDPROC) __GLeeGetProcAddress("glBindFragDataLocationIndexed"))!=0) nLinked++; if ((GLeeFuncPtr_glGetFragDataIndex = (GLEEPFNGLGETFRAGDATAINDEXPROC) __GLeeGetProcAddress("glGetFragDataIndex"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_explicit_attrib_location(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_occlusion_query2(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_sampler_objects(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_sampler_objects if ((GLeeFuncPtr_glGenSamplers = (GLEEPFNGLGENSAMPLERSPROC) __GLeeGetProcAddress("glGenSamplers"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteSamplers = (GLEEPFNGLDELETESAMPLERSPROC) __GLeeGetProcAddress("glDeleteSamplers"))!=0) nLinked++; if ((GLeeFuncPtr_glIsSampler = (GLEEPFNGLISSAMPLERPROC) __GLeeGetProcAddress("glIsSampler"))!=0) nLinked++; if ((GLeeFuncPtr_glBindSampler = (GLEEPFNGLBINDSAMPLERPROC) __GLeeGetProcAddress("glBindSampler"))!=0) nLinked++; if ((GLeeFuncPtr_glSamplerParameteri = (GLEEPFNGLSAMPLERPARAMETERIPROC) __GLeeGetProcAddress("glSamplerParameteri"))!=0) nLinked++; if ((GLeeFuncPtr_glSamplerParameteriv = (GLEEPFNGLSAMPLERPARAMETERIVPROC) __GLeeGetProcAddress("glSamplerParameteriv"))!=0) nLinked++; if ((GLeeFuncPtr_glSamplerParameterf = (GLEEPFNGLSAMPLERPARAMETERFPROC) __GLeeGetProcAddress("glSamplerParameterf"))!=0) nLinked++; if ((GLeeFuncPtr_glSamplerParameterfv = (GLEEPFNGLSAMPLERPARAMETERFVPROC) __GLeeGetProcAddress("glSamplerParameterfv"))!=0) nLinked++; if ((GLeeFuncPtr_glSamplerParameterIiv = (GLEEPFNGLSAMPLERPARAMETERIIVPROC) __GLeeGetProcAddress("glSamplerParameterIiv"))!=0) nLinked++; if ((GLeeFuncPtr_glSamplerParameterIuiv = (GLEEPFNGLSAMPLERPARAMETERIUIVPROC) __GLeeGetProcAddress("glSamplerParameterIuiv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetSamplerParameteriv = (GLEEPFNGLGETSAMPLERPARAMETERIVPROC) __GLeeGetProcAddress("glGetSamplerParameteriv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetSamplerParameterIiv = (GLEEPFNGLGETSAMPLERPARAMETERIIVPROC) __GLeeGetProcAddress("glGetSamplerParameterIiv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetSamplerParameterfv = (GLEEPFNGLGETSAMPLERPARAMETERFVPROC) __GLeeGetProcAddress("glGetSamplerParameterfv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetSamplerParameterIuiv = (GLEEPFNGLGETSAMPLERPARAMETERIUIVPROC) __GLeeGetProcAddress("glGetSamplerParameterIuiv"))!=0) nLinked++; #endif if (nLinked==14) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_shader_bit_encoding(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_texture_rgb10_a2ui(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_texture_swizzle(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_timer_query(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_timer_query if ((GLeeFuncPtr_glQueryCounter = (GLEEPFNGLQUERYCOUNTERPROC) __GLeeGetProcAddress("glQueryCounter"))!=0) nLinked++; if ((GLeeFuncPtr_glGetQueryObjecti64v = (GLEEPFNGLGETQUERYOBJECTI64VPROC) __GLeeGetProcAddress("glGetQueryObjecti64v"))!=0) nLinked++; if ((GLeeFuncPtr_glGetQueryObjectui64v = (GLEEPFNGLGETQUERYOBJECTUI64VPROC) __GLeeGetProcAddress("glGetQueryObjectui64v"))!=0) nLinked++; #endif if (nLinked==3) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_vertex_type_2_10_10_10_rev(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_vertex_type_2_10_10_10_rev if ((GLeeFuncPtr_glVertexP2ui = (GLEEPFNGLVERTEXP2UIPROC) __GLeeGetProcAddress("glVertexP2ui"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexP2uiv = (GLEEPFNGLVERTEXP2UIVPROC) __GLeeGetProcAddress("glVertexP2uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexP3ui = (GLEEPFNGLVERTEXP3UIPROC) __GLeeGetProcAddress("glVertexP3ui"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexP3uiv = (GLEEPFNGLVERTEXP3UIVPROC) __GLeeGetProcAddress("glVertexP3uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexP4ui = (GLEEPFNGLVERTEXP4UIPROC) __GLeeGetProcAddress("glVertexP4ui"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexP4uiv = (GLEEPFNGLVERTEXP4UIVPROC) __GLeeGetProcAddress("glVertexP4uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoordP1ui = (GLEEPFNGLTEXCOORDP1UIPROC) __GLeeGetProcAddress("glTexCoordP1ui"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoordP1uiv = (GLEEPFNGLTEXCOORDP1UIVPROC) __GLeeGetProcAddress("glTexCoordP1uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoordP2ui = (GLEEPFNGLTEXCOORDP2UIPROC) __GLeeGetProcAddress("glTexCoordP2ui"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoordP2uiv = (GLEEPFNGLTEXCOORDP2UIVPROC) __GLeeGetProcAddress("glTexCoordP2uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoordP3ui = (GLEEPFNGLTEXCOORDP3UIPROC) __GLeeGetProcAddress("glTexCoordP3ui"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoordP3uiv = (GLEEPFNGLTEXCOORDP3UIVPROC) __GLeeGetProcAddress("glTexCoordP3uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoordP4ui = (GLEEPFNGLTEXCOORDP4UIPROC) __GLeeGetProcAddress("glTexCoordP4ui"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoordP4uiv = (GLEEPFNGLTEXCOORDP4UIVPROC) __GLeeGetProcAddress("glTexCoordP4uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoordP1ui = (GLEEPFNGLMULTITEXCOORDP1UIPROC) __GLeeGetProcAddress("glMultiTexCoordP1ui"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoordP1uiv = (GLEEPFNGLMULTITEXCOORDP1UIVPROC) __GLeeGetProcAddress("glMultiTexCoordP1uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoordP2ui = (GLEEPFNGLMULTITEXCOORDP2UIPROC) __GLeeGetProcAddress("glMultiTexCoordP2ui"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoordP2uiv = (GLEEPFNGLMULTITEXCOORDP2UIVPROC) __GLeeGetProcAddress("glMultiTexCoordP2uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoordP3ui = (GLEEPFNGLMULTITEXCOORDP3UIPROC) __GLeeGetProcAddress("glMultiTexCoordP3ui"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoordP3uiv = (GLEEPFNGLMULTITEXCOORDP3UIVPROC) __GLeeGetProcAddress("glMultiTexCoordP3uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoordP4ui = (GLEEPFNGLMULTITEXCOORDP4UIPROC) __GLeeGetProcAddress("glMultiTexCoordP4ui"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoordP4uiv = (GLEEPFNGLMULTITEXCOORDP4UIVPROC) __GLeeGetProcAddress("glMultiTexCoordP4uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glNormalP3ui = (GLEEPFNGLNORMALP3UIPROC) __GLeeGetProcAddress("glNormalP3ui"))!=0) nLinked++; if ((GLeeFuncPtr_glNormalP3uiv = (GLEEPFNGLNORMALP3UIVPROC) __GLeeGetProcAddress("glNormalP3uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glColorP3ui = (GLEEPFNGLCOLORP3UIPROC) __GLeeGetProcAddress("glColorP3ui"))!=0) nLinked++; if ((GLeeFuncPtr_glColorP3uiv = (GLEEPFNGLCOLORP3UIVPROC) __GLeeGetProcAddress("glColorP3uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glColorP4ui = (GLEEPFNGLCOLORP4UIPROC) __GLeeGetProcAddress("glColorP4ui"))!=0) nLinked++; if ((GLeeFuncPtr_glColorP4uiv = (GLEEPFNGLCOLORP4UIVPROC) __GLeeGetProcAddress("glColorP4uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColorP3ui = (GLEEPFNGLSECONDARYCOLORP3UIPROC) __GLeeGetProcAddress("glSecondaryColorP3ui"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColorP3uiv = (GLEEPFNGLSECONDARYCOLORP3UIVPROC) __GLeeGetProcAddress("glSecondaryColorP3uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribP1ui = (GLEEPFNGLVERTEXATTRIBP1UIPROC) __GLeeGetProcAddress("glVertexAttribP1ui"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribP1uiv = (GLEEPFNGLVERTEXATTRIBP1UIVPROC) __GLeeGetProcAddress("glVertexAttribP1uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribP2ui = (GLEEPFNGLVERTEXATTRIBP2UIPROC) __GLeeGetProcAddress("glVertexAttribP2ui"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribP2uiv = (GLEEPFNGLVERTEXATTRIBP2UIVPROC) __GLeeGetProcAddress("glVertexAttribP2uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribP3ui = (GLEEPFNGLVERTEXATTRIBP3UIPROC) __GLeeGetProcAddress("glVertexAttribP3ui"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribP3uiv = (GLEEPFNGLVERTEXATTRIBP3UIVPROC) __GLeeGetProcAddress("glVertexAttribP3uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribP4ui = (GLEEPFNGLVERTEXATTRIBP4UIPROC) __GLeeGetProcAddress("glVertexAttribP4ui"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribP4uiv = (GLEEPFNGLVERTEXATTRIBP4UIVPROC) __GLeeGetProcAddress("glVertexAttribP4uiv"))!=0) nLinked++; #endif if (nLinked==38) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_draw_indirect(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_draw_indirect if ((GLeeFuncPtr_glDrawArraysIndirect = (GLEEPFNGLDRAWARRAYSINDIRECTPROC) __GLeeGetProcAddress("glDrawArraysIndirect"))!=0) nLinked++; if ((GLeeFuncPtr_glDrawElementsIndirect = (GLEEPFNGLDRAWELEMENTSINDIRECTPROC) __GLeeGetProcAddress("glDrawElementsIndirect"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_gpu_shader5(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_gpu_shader_fp64(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_gpu_shader_fp64 if ((GLeeFuncPtr_glUniform1d = (GLEEPFNGLUNIFORM1DPROC) __GLeeGetProcAddress("glUniform1d"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform2d = (GLEEPFNGLUNIFORM2DPROC) __GLeeGetProcAddress("glUniform2d"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform3d = (GLEEPFNGLUNIFORM3DPROC) __GLeeGetProcAddress("glUniform3d"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform4d = (GLEEPFNGLUNIFORM4DPROC) __GLeeGetProcAddress("glUniform4d"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform1dv = (GLEEPFNGLUNIFORM1DVPROC) __GLeeGetProcAddress("glUniform1dv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform2dv = (GLEEPFNGLUNIFORM2DVPROC) __GLeeGetProcAddress("glUniform2dv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform3dv = (GLEEPFNGLUNIFORM3DVPROC) __GLeeGetProcAddress("glUniform3dv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform4dv = (GLEEPFNGLUNIFORM4DVPROC) __GLeeGetProcAddress("glUniform4dv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniformMatrix2dv = (GLEEPFNGLUNIFORMMATRIX2DVPROC) __GLeeGetProcAddress("glUniformMatrix2dv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniformMatrix3dv = (GLEEPFNGLUNIFORMMATRIX3DVPROC) __GLeeGetProcAddress("glUniformMatrix3dv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniformMatrix4dv = (GLEEPFNGLUNIFORMMATRIX4DVPROC) __GLeeGetProcAddress("glUniformMatrix4dv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniformMatrix2x3dv = (GLEEPFNGLUNIFORMMATRIX2X3DVPROC) __GLeeGetProcAddress("glUniformMatrix2x3dv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniformMatrix2x4dv = (GLEEPFNGLUNIFORMMATRIX2X4DVPROC) __GLeeGetProcAddress("glUniformMatrix2x4dv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniformMatrix3x2dv = (GLEEPFNGLUNIFORMMATRIX3X2DVPROC) __GLeeGetProcAddress("glUniformMatrix3x2dv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniformMatrix3x4dv = (GLEEPFNGLUNIFORMMATRIX3X4DVPROC) __GLeeGetProcAddress("glUniformMatrix3x4dv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniformMatrix4x2dv = (GLEEPFNGLUNIFORMMATRIX4X2DVPROC) __GLeeGetProcAddress("glUniformMatrix4x2dv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniformMatrix4x3dv = (GLEEPFNGLUNIFORMMATRIX4X3DVPROC) __GLeeGetProcAddress("glUniformMatrix4x3dv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetUniformdv = (GLEEPFNGLGETUNIFORMDVPROC) __GLeeGetProcAddress("glGetUniformdv"))!=0) nLinked++; #endif if (nLinked==18) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_shader_subroutine(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_shader_subroutine if ((GLeeFuncPtr_glGetSubroutineUniformLocation = (GLEEPFNGLGETSUBROUTINEUNIFORMLOCATIONPROC) __GLeeGetProcAddress("glGetSubroutineUniformLocation"))!=0) nLinked++; if ((GLeeFuncPtr_glGetSubroutineIndex = (GLEEPFNGLGETSUBROUTINEINDEXPROC) __GLeeGetProcAddress("glGetSubroutineIndex"))!=0) nLinked++; if ((GLeeFuncPtr_glGetActiveSubroutineUniformiv = (GLEEPFNGLGETACTIVESUBROUTINEUNIFORMIVPROC) __GLeeGetProcAddress("glGetActiveSubroutineUniformiv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetActiveSubroutineUniformName = (GLEEPFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC) __GLeeGetProcAddress("glGetActiveSubroutineUniformName"))!=0) nLinked++; if ((GLeeFuncPtr_glGetActiveSubroutineName = (GLEEPFNGLGETACTIVESUBROUTINENAMEPROC) __GLeeGetProcAddress("glGetActiveSubroutineName"))!=0) nLinked++; if ((GLeeFuncPtr_glUniformSubroutinesuiv = (GLEEPFNGLUNIFORMSUBROUTINESUIVPROC) __GLeeGetProcAddress("glUniformSubroutinesuiv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetUniformSubroutineuiv = (GLEEPFNGLGETUNIFORMSUBROUTINEUIVPROC) __GLeeGetProcAddress("glGetUniformSubroutineuiv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramStageiv = (GLEEPFNGLGETPROGRAMSTAGEIVPROC) __GLeeGetProcAddress("glGetProgramStageiv"))!=0) nLinked++; #endif if (nLinked==8) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_tessellation_shader(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_tessellation_shader if ((GLeeFuncPtr_glPatchParameteri = (GLEEPFNGLPATCHPARAMETERIPROC) __GLeeGetProcAddress("glPatchParameteri"))!=0) nLinked++; if ((GLeeFuncPtr_glPatchParameterfv = (GLEEPFNGLPATCHPARAMETERFVPROC) __GLeeGetProcAddress("glPatchParameterfv"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_texture_buffer_object_rgb32(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_transform_feedback2(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_transform_feedback2 if ((GLeeFuncPtr_glBindTransformFeedback = (GLEEPFNGLBINDTRANSFORMFEEDBACKPROC) __GLeeGetProcAddress("glBindTransformFeedback"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteTransformFeedbacks = (GLEEPFNGLDELETETRANSFORMFEEDBACKSPROC) __GLeeGetProcAddress("glDeleteTransformFeedbacks"))!=0) nLinked++; if ((GLeeFuncPtr_glGenTransformFeedbacks = (GLEEPFNGLGENTRANSFORMFEEDBACKSPROC) __GLeeGetProcAddress("glGenTransformFeedbacks"))!=0) nLinked++; if ((GLeeFuncPtr_glIsTransformFeedback = (GLEEPFNGLISTRANSFORMFEEDBACKPROC) __GLeeGetProcAddress("glIsTransformFeedback"))!=0) nLinked++; if ((GLeeFuncPtr_glPauseTransformFeedback = (GLEEPFNGLPAUSETRANSFORMFEEDBACKPROC) __GLeeGetProcAddress("glPauseTransformFeedback"))!=0) nLinked++; if ((GLeeFuncPtr_glResumeTransformFeedback = (GLEEPFNGLRESUMETRANSFORMFEEDBACKPROC) __GLeeGetProcAddress("glResumeTransformFeedback"))!=0) nLinked++; if ((GLeeFuncPtr_glDrawTransformFeedback = (GLEEPFNGLDRAWTRANSFORMFEEDBACKPROC) __GLeeGetProcAddress("glDrawTransformFeedback"))!=0) nLinked++; #endif if (nLinked==7) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_transform_feedback3(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_transform_feedback3 if ((GLeeFuncPtr_glDrawTransformFeedbackStream = (GLEEPFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC) __GLeeGetProcAddress("glDrawTransformFeedbackStream"))!=0) nLinked++; if ((GLeeFuncPtr_glBeginQueryIndexed = (GLEEPFNGLBEGINQUERYINDEXEDPROC) __GLeeGetProcAddress("glBeginQueryIndexed"))!=0) nLinked++; if ((GLeeFuncPtr_glEndQueryIndexed = (GLEEPFNGLENDQUERYINDEXEDPROC) __GLeeGetProcAddress("glEndQueryIndexed"))!=0) nLinked++; if ((GLeeFuncPtr_glGetQueryIndexediv = (GLEEPFNGLGETQUERYINDEXEDIVPROC) __GLeeGetProcAddress("glGetQueryIndexediv"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_ES2_compatibility(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_ES2_compatibility if ((GLeeFuncPtr_glReleaseShaderCompiler = (GLEEPFNGLRELEASESHADERCOMPILERPROC) __GLeeGetProcAddress("glReleaseShaderCompiler"))!=0) nLinked++; if ((GLeeFuncPtr_glShaderBinary = (GLEEPFNGLSHADERBINARYPROC) __GLeeGetProcAddress("glShaderBinary"))!=0) nLinked++; if ((GLeeFuncPtr_glGetShaderPrecisionFormat = (GLEEPFNGLGETSHADERPRECISIONFORMATPROC) __GLeeGetProcAddress("glGetShaderPrecisionFormat"))!=0) nLinked++; if ((GLeeFuncPtr_glDepthRangef = (GLEEPFNGLDEPTHRANGEFPROC) __GLeeGetProcAddress("glDepthRangef"))!=0) nLinked++; if ((GLeeFuncPtr_glClearDepthf = (GLEEPFNGLCLEARDEPTHFPROC) __GLeeGetProcAddress("glClearDepthf"))!=0) nLinked++; #endif if (nLinked==5) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_get_program_binary(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_get_program_binary if ((GLeeFuncPtr_glGetProgramBinary = (GLEEPFNGLGETPROGRAMBINARYPROC) __GLeeGetProcAddress("glGetProgramBinary"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramBinary = (GLEEPFNGLPROGRAMBINARYPROC) __GLeeGetProcAddress("glProgramBinary"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramParameteri = (GLEEPFNGLPROGRAMPARAMETERIPROC) __GLeeGetProcAddress("glProgramParameteri"))!=0) nLinked++; #endif if (nLinked==3) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_separate_shader_objects(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_separate_shader_objects if ((GLeeFuncPtr_glUseProgramStages = (GLEEPFNGLUSEPROGRAMSTAGESPROC) __GLeeGetProcAddress("glUseProgramStages"))!=0) nLinked++; if ((GLeeFuncPtr_glActiveShaderProgram = (GLEEPFNGLACTIVESHADERPROGRAMPROC) __GLeeGetProcAddress("glActiveShaderProgram"))!=0) nLinked++; if ((GLeeFuncPtr_glCreateShaderProgramv = (GLEEPFNGLCREATESHADERPROGRAMVPROC) __GLeeGetProcAddress("glCreateShaderProgramv"))!=0) nLinked++; if ((GLeeFuncPtr_glBindProgramPipeline = (GLEEPFNGLBINDPROGRAMPIPELINEPROC) __GLeeGetProcAddress("glBindProgramPipeline"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteProgramPipelines = (GLEEPFNGLDELETEPROGRAMPIPELINESPROC) __GLeeGetProcAddress("glDeleteProgramPipelines"))!=0) nLinked++; if ((GLeeFuncPtr_glGenProgramPipelines = (GLEEPFNGLGENPROGRAMPIPELINESPROC) __GLeeGetProcAddress("glGenProgramPipelines"))!=0) nLinked++; if ((GLeeFuncPtr_glIsProgramPipeline = (GLEEPFNGLISPROGRAMPIPELINEPROC) __GLeeGetProcAddress("glIsProgramPipeline"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramPipelineiv = (GLEEPFNGLGETPROGRAMPIPELINEIVPROC) __GLeeGetProcAddress("glGetProgramPipelineiv"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform1i = (GLEEPFNGLPROGRAMUNIFORM1IPROC) __GLeeGetProcAddress("glProgramUniform1i"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform1iv = (GLEEPFNGLPROGRAMUNIFORM1IVPROC) __GLeeGetProcAddress("glProgramUniform1iv"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform1f = (GLEEPFNGLPROGRAMUNIFORM1FPROC) __GLeeGetProcAddress("glProgramUniform1f"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform1fv = (GLEEPFNGLPROGRAMUNIFORM1FVPROC) __GLeeGetProcAddress("glProgramUniform1fv"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform1d = (GLEEPFNGLPROGRAMUNIFORM1DPROC) __GLeeGetProcAddress("glProgramUniform1d"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform1dv = (GLEEPFNGLPROGRAMUNIFORM1DVPROC) __GLeeGetProcAddress("glProgramUniform1dv"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform1ui = (GLEEPFNGLPROGRAMUNIFORM1UIPROC) __GLeeGetProcAddress("glProgramUniform1ui"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform1uiv = (GLEEPFNGLPROGRAMUNIFORM1UIVPROC) __GLeeGetProcAddress("glProgramUniform1uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform2i = (GLEEPFNGLPROGRAMUNIFORM2IPROC) __GLeeGetProcAddress("glProgramUniform2i"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform2iv = (GLEEPFNGLPROGRAMUNIFORM2IVPROC) __GLeeGetProcAddress("glProgramUniform2iv"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform2f = (GLEEPFNGLPROGRAMUNIFORM2FPROC) __GLeeGetProcAddress("glProgramUniform2f"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform2fv = (GLEEPFNGLPROGRAMUNIFORM2FVPROC) __GLeeGetProcAddress("glProgramUniform2fv"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform2d = (GLEEPFNGLPROGRAMUNIFORM2DPROC) __GLeeGetProcAddress("glProgramUniform2d"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform2dv = (GLEEPFNGLPROGRAMUNIFORM2DVPROC) __GLeeGetProcAddress("glProgramUniform2dv"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform2ui = (GLEEPFNGLPROGRAMUNIFORM2UIPROC) __GLeeGetProcAddress("glProgramUniform2ui"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform2uiv = (GLEEPFNGLPROGRAMUNIFORM2UIVPROC) __GLeeGetProcAddress("glProgramUniform2uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform3i = (GLEEPFNGLPROGRAMUNIFORM3IPROC) __GLeeGetProcAddress("glProgramUniform3i"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform3iv = (GLEEPFNGLPROGRAMUNIFORM3IVPROC) __GLeeGetProcAddress("glProgramUniform3iv"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform3f = (GLEEPFNGLPROGRAMUNIFORM3FPROC) __GLeeGetProcAddress("glProgramUniform3f"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform3fv = (GLEEPFNGLPROGRAMUNIFORM3FVPROC) __GLeeGetProcAddress("glProgramUniform3fv"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform3d = (GLEEPFNGLPROGRAMUNIFORM3DPROC) __GLeeGetProcAddress("glProgramUniform3d"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform3dv = (GLEEPFNGLPROGRAMUNIFORM3DVPROC) __GLeeGetProcAddress("glProgramUniform3dv"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform3ui = (GLEEPFNGLPROGRAMUNIFORM3UIPROC) __GLeeGetProcAddress("glProgramUniform3ui"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform3uiv = (GLEEPFNGLPROGRAMUNIFORM3UIVPROC) __GLeeGetProcAddress("glProgramUniform3uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform4i = (GLEEPFNGLPROGRAMUNIFORM4IPROC) __GLeeGetProcAddress("glProgramUniform4i"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform4iv = (GLEEPFNGLPROGRAMUNIFORM4IVPROC) __GLeeGetProcAddress("glProgramUniform4iv"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform4f = (GLEEPFNGLPROGRAMUNIFORM4FPROC) __GLeeGetProcAddress("glProgramUniform4f"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform4fv = (GLEEPFNGLPROGRAMUNIFORM4FVPROC) __GLeeGetProcAddress("glProgramUniform4fv"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform4d = (GLEEPFNGLPROGRAMUNIFORM4DPROC) __GLeeGetProcAddress("glProgramUniform4d"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform4dv = (GLEEPFNGLPROGRAMUNIFORM4DVPROC) __GLeeGetProcAddress("glProgramUniform4dv"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform4ui = (GLEEPFNGLPROGRAMUNIFORM4UIPROC) __GLeeGetProcAddress("glProgramUniform4ui"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform4uiv = (GLEEPFNGLPROGRAMUNIFORM4UIVPROC) __GLeeGetProcAddress("glProgramUniform4uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix2fv = (GLEEPFNGLPROGRAMUNIFORMMATRIX2FVPROC) __GLeeGetProcAddress("glProgramUniformMatrix2fv"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix3fv = (GLEEPFNGLPROGRAMUNIFORMMATRIX3FVPROC) __GLeeGetProcAddress("glProgramUniformMatrix3fv"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix4fv = (GLEEPFNGLPROGRAMUNIFORMMATRIX4FVPROC) __GLeeGetProcAddress("glProgramUniformMatrix4fv"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix2dv = (GLEEPFNGLPROGRAMUNIFORMMATRIX2DVPROC) __GLeeGetProcAddress("glProgramUniformMatrix2dv"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix3dv = (GLEEPFNGLPROGRAMUNIFORMMATRIX3DVPROC) __GLeeGetProcAddress("glProgramUniformMatrix3dv"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix4dv = (GLEEPFNGLPROGRAMUNIFORMMATRIX4DVPROC) __GLeeGetProcAddress("glProgramUniformMatrix4dv"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix2x3fv = (GLEEPFNGLPROGRAMUNIFORMMATRIX2X3FVPROC) __GLeeGetProcAddress("glProgramUniformMatrix2x3fv"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix3x2fv = (GLEEPFNGLPROGRAMUNIFORMMATRIX3X2FVPROC) __GLeeGetProcAddress("glProgramUniformMatrix3x2fv"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix2x4fv = (GLEEPFNGLPROGRAMUNIFORMMATRIX2X4FVPROC) __GLeeGetProcAddress("glProgramUniformMatrix2x4fv"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix4x2fv = (GLEEPFNGLPROGRAMUNIFORMMATRIX4X2FVPROC) __GLeeGetProcAddress("glProgramUniformMatrix4x2fv"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix3x4fv = (GLEEPFNGLPROGRAMUNIFORMMATRIX3X4FVPROC) __GLeeGetProcAddress("glProgramUniformMatrix3x4fv"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix4x3fv = (GLEEPFNGLPROGRAMUNIFORMMATRIX4X3FVPROC) __GLeeGetProcAddress("glProgramUniformMatrix4x3fv"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix2x3dv = (GLEEPFNGLPROGRAMUNIFORMMATRIX2X3DVPROC) __GLeeGetProcAddress("glProgramUniformMatrix2x3dv"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix3x2dv = (GLEEPFNGLPROGRAMUNIFORMMATRIX3X2DVPROC) __GLeeGetProcAddress("glProgramUniformMatrix3x2dv"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix2x4dv = (GLEEPFNGLPROGRAMUNIFORMMATRIX2X4DVPROC) __GLeeGetProcAddress("glProgramUniformMatrix2x4dv"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix4x2dv = (GLEEPFNGLPROGRAMUNIFORMMATRIX4X2DVPROC) __GLeeGetProcAddress("glProgramUniformMatrix4x2dv"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix3x4dv = (GLEEPFNGLPROGRAMUNIFORMMATRIX3X4DVPROC) __GLeeGetProcAddress("glProgramUniformMatrix3x4dv"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix4x3dv = (GLEEPFNGLPROGRAMUNIFORMMATRIX4X3DVPROC) __GLeeGetProcAddress("glProgramUniformMatrix4x3dv"))!=0) nLinked++; if ((GLeeFuncPtr_glValidateProgramPipeline = (GLEEPFNGLVALIDATEPROGRAMPIPELINEPROC) __GLeeGetProcAddress("glValidateProgramPipeline"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramPipelineInfoLog = (GLEEPFNGLGETPROGRAMPIPELINEINFOLOGPROC) __GLeeGetProcAddress("glGetProgramPipelineInfoLog"))!=0) nLinked++; #endif if (nLinked==60) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_shader_precision(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_vertex_attrib_64bit(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_vertex_attrib_64bit if ((GLeeFuncPtr_glVertexAttribL1d = (GLEEPFNGLVERTEXATTRIBL1DPROC) __GLeeGetProcAddress("glVertexAttribL1d"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribL2d = (GLEEPFNGLVERTEXATTRIBL2DPROC) __GLeeGetProcAddress("glVertexAttribL2d"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribL3d = (GLEEPFNGLVERTEXATTRIBL3DPROC) __GLeeGetProcAddress("glVertexAttribL3d"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribL4d = (GLEEPFNGLVERTEXATTRIBL4DPROC) __GLeeGetProcAddress("glVertexAttribL4d"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribL1dv = (GLEEPFNGLVERTEXATTRIBL1DVPROC) __GLeeGetProcAddress("glVertexAttribL1dv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribL2dv = (GLEEPFNGLVERTEXATTRIBL2DVPROC) __GLeeGetProcAddress("glVertexAttribL2dv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribL3dv = (GLEEPFNGLVERTEXATTRIBL3DVPROC) __GLeeGetProcAddress("glVertexAttribL3dv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribL4dv = (GLEEPFNGLVERTEXATTRIBL4DVPROC) __GLeeGetProcAddress("glVertexAttribL4dv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribLPointer = (GLEEPFNGLVERTEXATTRIBLPOINTERPROC) __GLeeGetProcAddress("glVertexAttribLPointer"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribLdv = (GLEEPFNGLGETVERTEXATTRIBLDVPROC) __GLeeGetProcAddress("glGetVertexAttribLdv"))!=0) nLinked++; #endif if (nLinked==10) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_viewport_array(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_viewport_array if ((GLeeFuncPtr_glViewportArrayv = (GLEEPFNGLVIEWPORTARRAYVPROC) __GLeeGetProcAddress("glViewportArrayv"))!=0) nLinked++; if ((GLeeFuncPtr_glViewportIndexedf = (GLEEPFNGLVIEWPORTINDEXEDFPROC) __GLeeGetProcAddress("glViewportIndexedf"))!=0) nLinked++; if ((GLeeFuncPtr_glViewportIndexedfv = (GLEEPFNGLVIEWPORTINDEXEDFVPROC) __GLeeGetProcAddress("glViewportIndexedfv"))!=0) nLinked++; if ((GLeeFuncPtr_glScissorArrayv = (GLEEPFNGLSCISSORARRAYVPROC) __GLeeGetProcAddress("glScissorArrayv"))!=0) nLinked++; if ((GLeeFuncPtr_glScissorIndexed = (GLEEPFNGLSCISSORINDEXEDPROC) __GLeeGetProcAddress("glScissorIndexed"))!=0) nLinked++; if ((GLeeFuncPtr_glScissorIndexedv = (GLEEPFNGLSCISSORINDEXEDVPROC) __GLeeGetProcAddress("glScissorIndexedv"))!=0) nLinked++; if ((GLeeFuncPtr_glDepthRangeArrayv = (GLEEPFNGLDEPTHRANGEARRAYVPROC) __GLeeGetProcAddress("glDepthRangeArrayv"))!=0) nLinked++; if ((GLeeFuncPtr_glDepthRangeIndexed = (GLEEPFNGLDEPTHRANGEINDEXEDPROC) __GLeeGetProcAddress("glDepthRangeIndexed"))!=0) nLinked++; if ((GLeeFuncPtr_glGetFloati_v = (GLEEPFNGLGETFLOATI_VPROC) __GLeeGetProcAddress("glGetFloati_v"))!=0) nLinked++; if ((GLeeFuncPtr_glGetDoublei_v = (GLEEPFNGLGETDOUBLEI_VPROC) __GLeeGetProcAddress("glGetDoublei_v"))!=0) nLinked++; #endif if (nLinked==10) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_cl_event(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_cl_event if ((GLeeFuncPtr_glCreateSyncFromCLeventARB = (GLEEPFNGLCREATESYNCFROMCLEVENTARBPROC) __GLeeGetProcAddress("glCreateSyncFromCLeventARB"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_debug_output(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_debug_output if ((GLeeFuncPtr_glDebugMessageControlARB = (GLEEPFNGLDEBUGMESSAGECONTROLARBPROC) __GLeeGetProcAddress("glDebugMessageControlARB"))!=0) nLinked++; if ((GLeeFuncPtr_glDebugMessageInsertARB = (GLEEPFNGLDEBUGMESSAGEINSERTARBPROC) __GLeeGetProcAddress("glDebugMessageInsertARB"))!=0) nLinked++; if ((GLeeFuncPtr_glDebugMessageCallbackARB = (GLEEPFNGLDEBUGMESSAGECALLBACKARBPROC) __GLeeGetProcAddress("glDebugMessageCallbackARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetDebugMessageLogARB = (GLEEPFNGLGETDEBUGMESSAGELOGARBPROC) __GLeeGetProcAddress("glGetDebugMessageLogARB"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_robustness(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_robustness if ((GLeeFuncPtr_glGetGraphicsResetStatusARB = (GLEEPFNGLGETGRAPHICSRESETSTATUSARBPROC) __GLeeGetProcAddress("glGetGraphicsResetStatusARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetnMapdvARB = (GLEEPFNGLGETNMAPDVARBPROC) __GLeeGetProcAddress("glGetnMapdvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetnMapfvARB = (GLEEPFNGLGETNMAPFVARBPROC) __GLeeGetProcAddress("glGetnMapfvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetnMapivARB = (GLEEPFNGLGETNMAPIVARBPROC) __GLeeGetProcAddress("glGetnMapivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetnPixelMapfvARB = (GLEEPFNGLGETNPIXELMAPFVARBPROC) __GLeeGetProcAddress("glGetnPixelMapfvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetnPixelMapuivARB = (GLEEPFNGLGETNPIXELMAPUIVARBPROC) __GLeeGetProcAddress("glGetnPixelMapuivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetnPixelMapusvARB = (GLEEPFNGLGETNPIXELMAPUSVARBPROC) __GLeeGetProcAddress("glGetnPixelMapusvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetnPolygonStippleARB = (GLEEPFNGLGETNPOLYGONSTIPPLEARBPROC) __GLeeGetProcAddress("glGetnPolygonStippleARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetnColorTableARB = (GLEEPFNGLGETNCOLORTABLEARBPROC) __GLeeGetProcAddress("glGetnColorTableARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetnConvolutionFilterARB = (GLEEPFNGLGETNCONVOLUTIONFILTERARBPROC) __GLeeGetProcAddress("glGetnConvolutionFilterARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetnSeparableFilterARB = (GLEEPFNGLGETNSEPARABLEFILTERARBPROC) __GLeeGetProcAddress("glGetnSeparableFilterARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetnHistogramARB = (GLEEPFNGLGETNHISTOGRAMARBPROC) __GLeeGetProcAddress("glGetnHistogramARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetnMinmaxARB = (GLEEPFNGLGETNMINMAXARBPROC) __GLeeGetProcAddress("glGetnMinmaxARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetnTexImageARB = (GLEEPFNGLGETNTEXIMAGEARBPROC) __GLeeGetProcAddress("glGetnTexImageARB"))!=0) nLinked++; if ((GLeeFuncPtr_glReadnPixelsARB = (GLEEPFNGLREADNPIXELSARBPROC) __GLeeGetProcAddress("glReadnPixelsARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetnCompressedTexImageARB = (GLEEPFNGLGETNCOMPRESSEDTEXIMAGEARBPROC) __GLeeGetProcAddress("glGetnCompressedTexImageARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetnUniformfvARB = (GLEEPFNGLGETNUNIFORMFVARBPROC) __GLeeGetProcAddress("glGetnUniformfvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetnUniformivARB = (GLEEPFNGLGETNUNIFORMIVARBPROC) __GLeeGetProcAddress("glGetnUniformivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetnUniformuivARB = (GLEEPFNGLGETNUNIFORMUIVARBPROC) __GLeeGetProcAddress("glGetnUniformuivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetnUniformdvARB = (GLEEPFNGLGETNUNIFORMDVARBPROC) __GLeeGetProcAddress("glGetnUniformdvARB"))!=0) nLinked++; #endif if (nLinked==20) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_shader_stencil_export(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_base_instance(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_base_instance if ((GLeeFuncPtr_glDrawArraysInstancedBaseInstance = (GLEEPFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC) __GLeeGetProcAddress("glDrawArraysInstancedBaseInstance"))!=0) nLinked++; if ((GLeeFuncPtr_glDrawElementsInstancedBaseInstance = (GLEEPFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC) __GLeeGetProcAddress("glDrawElementsInstancedBaseInstance"))!=0) nLinked++; if ((GLeeFuncPtr_glDrawElementsInstancedBaseVertexBaseInstance = (GLEEPFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC) __GLeeGetProcAddress("glDrawElementsInstancedBaseVertexBaseInstance"))!=0) nLinked++; #endif if (nLinked==3) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_shading_language_420pack(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_transform_feedback_instanced(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_transform_feedback_instanced if ((GLeeFuncPtr_glDrawTransformFeedbackInstanced = (GLEEPFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC) __GLeeGetProcAddress("glDrawTransformFeedbackInstanced"))!=0) nLinked++; if ((GLeeFuncPtr_glDrawTransformFeedbackStreamInstanced = (GLEEPFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC) __GLeeGetProcAddress("glDrawTransformFeedbackStreamInstanced"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_compressed_texture_pixel_storage(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_conservative_depth(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_internalformat_query(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_internalformat_query if ((GLeeFuncPtr_glGetInternalformativ = (GLEEPFNGLGETINTERNALFORMATIVPROC) __GLeeGetProcAddress("glGetInternalformativ"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_map_buffer_alignment(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_shader_atomic_counters(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_shader_atomic_counters if ((GLeeFuncPtr_glGetActiveAtomicCounterBufferiv = (GLEEPFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC) __GLeeGetProcAddress("glGetActiveAtomicCounterBufferiv"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_shader_image_load_store(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_shader_image_load_store if ((GLeeFuncPtr_glBindImageTexture = (GLEEPFNGLBINDIMAGETEXTUREPROC) __GLeeGetProcAddress("glBindImageTexture"))!=0) nLinked++; if ((GLeeFuncPtr_glMemoryBarrier = (GLEEPFNGLMEMORYBARRIERPROC) __GLeeGetProcAddress("glMemoryBarrier"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_shading_language_packing(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_texture_storage(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_texture_storage if ((GLeeFuncPtr_glTexStorage1D = (GLEEPFNGLTEXSTORAGE1DPROC) __GLeeGetProcAddress("glTexStorage1D"))!=0) nLinked++; if ((GLeeFuncPtr_glTexStorage2D = (GLEEPFNGLTEXSTORAGE2DPROC) __GLeeGetProcAddress("glTexStorage2D"))!=0) nLinked++; if ((GLeeFuncPtr_glTexStorage3D = (GLEEPFNGLTEXSTORAGE3DPROC) __GLeeGetProcAddress("glTexStorage3D"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureStorage1DEXT = (GLEEPFNGLTEXTURESTORAGE1DEXTPROC) __GLeeGetProcAddress("glTextureStorage1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureStorage2DEXT = (GLEEPFNGLTEXTURESTORAGE2DEXTPROC) __GLeeGetProcAddress("glTextureStorage2DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureStorage3DEXT = (GLEEPFNGLTEXTURESTORAGE3DEXTPROC) __GLeeGetProcAddress("glTextureStorage3DEXT"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_KHR_texture_compression_astc_ldr(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_KHR_debug(void) { GLint nLinked=0; #ifdef __GLEE_GL_KHR_debug if ((GLeeFuncPtr_glDebugMessageControl = (GLEEPFNGLDEBUGMESSAGECONTROLPROC) __GLeeGetProcAddress("glDebugMessageControl"))!=0) nLinked++; if ((GLeeFuncPtr_glDebugMessageInsert = (GLEEPFNGLDEBUGMESSAGEINSERTPROC) __GLeeGetProcAddress("glDebugMessageInsert"))!=0) nLinked++; if ((GLeeFuncPtr_glDebugMessageCallback = (GLEEPFNGLDEBUGMESSAGECALLBACKPROC) __GLeeGetProcAddress("glDebugMessageCallback"))!=0) nLinked++; if ((GLeeFuncPtr_glGetDebugMessageLog = (GLEEPFNGLGETDEBUGMESSAGELOGPROC) __GLeeGetProcAddress("glGetDebugMessageLog"))!=0) nLinked++; if ((GLeeFuncPtr_glPushDebugGroup = (GLEEPFNGLPUSHDEBUGGROUPPROC) __GLeeGetProcAddress("glPushDebugGroup"))!=0) nLinked++; if ((GLeeFuncPtr_glPopDebugGroup = (GLEEPFNGLPOPDEBUGGROUPPROC) __GLeeGetProcAddress("glPopDebugGroup"))!=0) nLinked++; if ((GLeeFuncPtr_glObjectLabel = (GLEEPFNGLOBJECTLABELPROC) __GLeeGetProcAddress("glObjectLabel"))!=0) nLinked++; if ((GLeeFuncPtr_glGetObjectLabel = (GLEEPFNGLGETOBJECTLABELPROC) __GLeeGetProcAddress("glGetObjectLabel"))!=0) nLinked++; if ((GLeeFuncPtr_glObjectPtrLabel = (GLEEPFNGLOBJECTPTRLABELPROC) __GLeeGetProcAddress("glObjectPtrLabel"))!=0) nLinked++; if ((GLeeFuncPtr_glGetObjectPtrLabel = (GLEEPFNGLGETOBJECTPTRLABELPROC) __GLeeGetProcAddress("glGetObjectPtrLabel"))!=0) nLinked++; #endif if (nLinked==10) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_arrays_of_arrays(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_clear_buffer_object(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_clear_buffer_object if ((GLeeFuncPtr_glClearBufferData = (GLEEPFNGLCLEARBUFFERDATAPROC) __GLeeGetProcAddress("glClearBufferData"))!=0) nLinked++; if ((GLeeFuncPtr_glClearBufferSubData = (GLEEPFNGLCLEARBUFFERSUBDATAPROC) __GLeeGetProcAddress("glClearBufferSubData"))!=0) nLinked++; if ((GLeeFuncPtr_glClearNamedBufferDataEXT = (GLEEPFNGLCLEARNAMEDBUFFERDATAEXTPROC) __GLeeGetProcAddress("glClearNamedBufferDataEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glClearNamedBufferSubDataEXT = (GLEEPFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC) __GLeeGetProcAddress("glClearNamedBufferSubDataEXT"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_compute_shader(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_compute_shader if ((GLeeFuncPtr_glDispatchCompute = (GLEEPFNGLDISPATCHCOMPUTEPROC) __GLeeGetProcAddress("glDispatchCompute"))!=0) nLinked++; if ((GLeeFuncPtr_glDispatchComputeIndirect = (GLEEPFNGLDISPATCHCOMPUTEINDIRECTPROC) __GLeeGetProcAddress("glDispatchComputeIndirect"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_copy_image(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_copy_image if ((GLeeFuncPtr_glCopyImageSubData = (GLEEPFNGLCOPYIMAGESUBDATAPROC) __GLeeGetProcAddress("glCopyImageSubData"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_texture_view(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_texture_view if ((GLeeFuncPtr_glTextureView = (GLEEPFNGLTEXTUREVIEWPROC) __GLeeGetProcAddress("glTextureView"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_vertex_attrib_binding(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_vertex_attrib_binding if ((GLeeFuncPtr_glBindVertexBuffer = (GLEEPFNGLBINDVERTEXBUFFERPROC) __GLeeGetProcAddress("glBindVertexBuffer"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribFormat = (GLEEPFNGLVERTEXATTRIBFORMATPROC) __GLeeGetProcAddress("glVertexAttribFormat"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribIFormat = (GLEEPFNGLVERTEXATTRIBIFORMATPROC) __GLeeGetProcAddress("glVertexAttribIFormat"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribLFormat = (GLEEPFNGLVERTEXATTRIBLFORMATPROC) __GLeeGetProcAddress("glVertexAttribLFormat"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribBinding = (GLEEPFNGLVERTEXATTRIBBINDINGPROC) __GLeeGetProcAddress("glVertexAttribBinding"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexBindingDivisor = (GLEEPFNGLVERTEXBINDINGDIVISORPROC) __GLeeGetProcAddress("glVertexBindingDivisor"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexArrayBindVertexBufferEXT = (GLEEPFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC) __GLeeGetProcAddress("glVertexArrayBindVertexBufferEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexArrayVertexAttribFormatEXT = (GLEEPFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC) __GLeeGetProcAddress("glVertexArrayVertexAttribFormatEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexArrayVertexAttribIFormatEXT = (GLEEPFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC) __GLeeGetProcAddress("glVertexArrayVertexAttribIFormatEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexArrayVertexAttribLFormatEXT = (GLEEPFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC) __GLeeGetProcAddress("glVertexArrayVertexAttribLFormatEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexArrayVertexAttribBindingEXT = (GLEEPFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC) __GLeeGetProcAddress("glVertexArrayVertexAttribBindingEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexArrayVertexBindingDivisorEXT = (GLEEPFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC) __GLeeGetProcAddress("glVertexArrayVertexBindingDivisorEXT"))!=0) nLinked++; #endif if (nLinked==12) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_robustness_isolation(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_ES3_compatibility(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_explicit_uniform_location(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_fragment_layer_viewport(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_framebuffer_no_attachments(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_framebuffer_no_attachments if ((GLeeFuncPtr_glFramebufferParameteri = (GLEEPFNGLFRAMEBUFFERPARAMETERIPROC) __GLeeGetProcAddress("glFramebufferParameteri"))!=0) nLinked++; if ((GLeeFuncPtr_glGetFramebufferParameteriv = (GLEEPFNGLGETFRAMEBUFFERPARAMETERIVPROC) __GLeeGetProcAddress("glGetFramebufferParameteriv"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedFramebufferParameteriEXT = (GLEEPFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC) __GLeeGetProcAddress("glNamedFramebufferParameteriEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetNamedFramebufferParameterivEXT = (GLEEPFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC) __GLeeGetProcAddress("glGetNamedFramebufferParameterivEXT"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_internalformat_query2(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_internalformat_query2 if ((GLeeFuncPtr_glGetInternalformati64v = (GLEEPFNGLGETINTERNALFORMATI64VPROC) __GLeeGetProcAddress("glGetInternalformati64v"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_invalidate_subdata(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_invalidate_subdata if ((GLeeFuncPtr_glInvalidateTexSubImage = (GLEEPFNGLINVALIDATETEXSUBIMAGEPROC) __GLeeGetProcAddress("glInvalidateTexSubImage"))!=0) nLinked++; if ((GLeeFuncPtr_glInvalidateTexImage = (GLEEPFNGLINVALIDATETEXIMAGEPROC) __GLeeGetProcAddress("glInvalidateTexImage"))!=0) nLinked++; if ((GLeeFuncPtr_glInvalidateBufferSubData = (GLEEPFNGLINVALIDATEBUFFERSUBDATAPROC) __GLeeGetProcAddress("glInvalidateBufferSubData"))!=0) nLinked++; if ((GLeeFuncPtr_glInvalidateBufferData = (GLEEPFNGLINVALIDATEBUFFERDATAPROC) __GLeeGetProcAddress("glInvalidateBufferData"))!=0) nLinked++; if ((GLeeFuncPtr_glInvalidateFramebuffer = (GLEEPFNGLINVALIDATEFRAMEBUFFERPROC) __GLeeGetProcAddress("glInvalidateFramebuffer"))!=0) nLinked++; if ((GLeeFuncPtr_glInvalidateSubFramebuffer = (GLEEPFNGLINVALIDATESUBFRAMEBUFFERPROC) __GLeeGetProcAddress("glInvalidateSubFramebuffer"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_multi_draw_indirect(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_multi_draw_indirect if ((GLeeFuncPtr_glMultiDrawArraysIndirect = (GLEEPFNGLMULTIDRAWARRAYSINDIRECTPROC) __GLeeGetProcAddress("glMultiDrawArraysIndirect"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiDrawElementsIndirect = (GLEEPFNGLMULTIDRAWELEMENTSINDIRECTPROC) __GLeeGetProcAddress("glMultiDrawElementsIndirect"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_program_interface_query(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_program_interface_query if ((GLeeFuncPtr_glGetProgramInterfaceiv = (GLEEPFNGLGETPROGRAMINTERFACEIVPROC) __GLeeGetProcAddress("glGetProgramInterfaceiv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramResourceIndex = (GLEEPFNGLGETPROGRAMRESOURCEINDEXPROC) __GLeeGetProcAddress("glGetProgramResourceIndex"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramResourceName = (GLEEPFNGLGETPROGRAMRESOURCENAMEPROC) __GLeeGetProcAddress("glGetProgramResourceName"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramResourceiv = (GLEEPFNGLGETPROGRAMRESOURCEIVPROC) __GLeeGetProcAddress("glGetProgramResourceiv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramResourceLocation = (GLEEPFNGLGETPROGRAMRESOURCELOCATIONPROC) __GLeeGetProcAddress("glGetProgramResourceLocation"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramResourceLocationIndex = (GLEEPFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC) __GLeeGetProcAddress("glGetProgramResourceLocationIndex"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_robust_buffer_access_behavior(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_shader_image_size(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_shader_storage_buffer_object(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_shader_storage_buffer_object if ((GLeeFuncPtr_glShaderStorageBlockBinding = (GLEEPFNGLSHADERSTORAGEBLOCKBINDINGPROC) __GLeeGetProcAddress("glShaderStorageBlockBinding"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_stencil_texturing(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_texture_buffer_range(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_texture_buffer_range if ((GLeeFuncPtr_glTexBufferRange = (GLEEPFNGLTEXBUFFERRANGEPROC) __GLeeGetProcAddress("glTexBufferRange"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureBufferRangeEXT = (GLEEPFNGLTEXTUREBUFFERRANGEEXTPROC) __GLeeGetProcAddress("glTextureBufferRangeEXT"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_texture_query_levels(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_texture_storage_multisample(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_texture_storage_multisample if ((GLeeFuncPtr_glTexStorage2DMultisample = (GLEEPFNGLTEXSTORAGE2DMULTISAMPLEPROC) __GLeeGetProcAddress("glTexStorage2DMultisample"))!=0) nLinked++; if ((GLeeFuncPtr_glTexStorage3DMultisample = (GLEEPFNGLTEXSTORAGE3DMULTISAMPLEPROC) __GLeeGetProcAddress("glTexStorage3DMultisample"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureStorage2DMultisampleEXT = (GLEEPFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC) __GLeeGetProcAddress("glTextureStorage2DMultisampleEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureStorage3DMultisampleEXT = (GLEEPFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC) __GLeeGetProcAddress("glTextureStorage3DMultisampleEXT"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_abgr(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_blend_color(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_blend_color if ((GLeeFuncPtr_glBlendColorEXT = (GLEEPFNGLBLENDCOLOREXTPROC) __GLeeGetProcAddress("glBlendColorEXT"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_polygon_offset(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_polygon_offset if ((GLeeFuncPtr_glPolygonOffsetEXT = (GLEEPFNGLPOLYGONOFFSETEXTPROC) __GLeeGetProcAddress("glPolygonOffsetEXT"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_texture(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_texture3D(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_texture3D if ((GLeeFuncPtr_glTexImage3DEXT = (GLEEPFNGLTEXIMAGE3DEXTPROC) __GLeeGetProcAddress("glTexImage3DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTexSubImage3DEXT = (GLEEPFNGLTEXSUBIMAGE3DEXTPROC) __GLeeGetProcAddress("glTexSubImage3DEXT"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIS_texture_filter4(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIS_texture_filter4 if ((GLeeFuncPtr_glGetTexFilterFuncSGIS = (GLEEPFNGLGETTEXFILTERFUNCSGISPROC) __GLeeGetProcAddress("glGetTexFilterFuncSGIS"))!=0) nLinked++; if ((GLeeFuncPtr_glTexFilterFuncSGIS = (GLEEPFNGLTEXFILTERFUNCSGISPROC) __GLeeGetProcAddress("glTexFilterFuncSGIS"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_subtexture(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_subtexture if ((GLeeFuncPtr_glTexSubImage1DEXT = (GLEEPFNGLTEXSUBIMAGE1DEXTPROC) __GLeeGetProcAddress("glTexSubImage1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTexSubImage2DEXT = (GLEEPFNGLTEXSUBIMAGE2DEXTPROC) __GLeeGetProcAddress("glTexSubImage2DEXT"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_copy_texture(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_copy_texture if ((GLeeFuncPtr_glCopyTexImage1DEXT = (GLEEPFNGLCOPYTEXIMAGE1DEXTPROC) __GLeeGetProcAddress("glCopyTexImage1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyTexImage2DEXT = (GLEEPFNGLCOPYTEXIMAGE2DEXTPROC) __GLeeGetProcAddress("glCopyTexImage2DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyTexSubImage1DEXT = (GLEEPFNGLCOPYTEXSUBIMAGE1DEXTPROC) __GLeeGetProcAddress("glCopyTexSubImage1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyTexSubImage2DEXT = (GLEEPFNGLCOPYTEXSUBIMAGE2DEXTPROC) __GLeeGetProcAddress("glCopyTexSubImage2DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyTexSubImage3DEXT = (GLEEPFNGLCOPYTEXSUBIMAGE3DEXTPROC) __GLeeGetProcAddress("glCopyTexSubImage3DEXT"))!=0) nLinked++; #endif if (nLinked==5) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_histogram(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_histogram if ((GLeeFuncPtr_glGetHistogramEXT = (GLEEPFNGLGETHISTOGRAMEXTPROC) __GLeeGetProcAddress("glGetHistogramEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetHistogramParameterfvEXT = (GLEEPFNGLGETHISTOGRAMPARAMETERFVEXTPROC) __GLeeGetProcAddress("glGetHistogramParameterfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetHistogramParameterivEXT = (GLEEPFNGLGETHISTOGRAMPARAMETERIVEXTPROC) __GLeeGetProcAddress("glGetHistogramParameterivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMinmaxEXT = (GLEEPFNGLGETMINMAXEXTPROC) __GLeeGetProcAddress("glGetMinmaxEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMinmaxParameterfvEXT = (GLEEPFNGLGETMINMAXPARAMETERFVEXTPROC) __GLeeGetProcAddress("glGetMinmaxParameterfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMinmaxParameterivEXT = (GLEEPFNGLGETMINMAXPARAMETERIVEXTPROC) __GLeeGetProcAddress("glGetMinmaxParameterivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glHistogramEXT = (GLEEPFNGLHISTOGRAMEXTPROC) __GLeeGetProcAddress("glHistogramEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMinmaxEXT = (GLEEPFNGLMINMAXEXTPROC) __GLeeGetProcAddress("glMinmaxEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glResetHistogramEXT = (GLEEPFNGLRESETHISTOGRAMEXTPROC) __GLeeGetProcAddress("glResetHistogramEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glResetMinmaxEXT = (GLEEPFNGLRESETMINMAXEXTPROC) __GLeeGetProcAddress("glResetMinmaxEXT"))!=0) nLinked++; #endif if (nLinked==10) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_convolution(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_convolution if ((GLeeFuncPtr_glConvolutionFilter1DEXT = (GLEEPFNGLCONVOLUTIONFILTER1DEXTPROC) __GLeeGetProcAddress("glConvolutionFilter1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glConvolutionFilter2DEXT = (GLEEPFNGLCONVOLUTIONFILTER2DEXTPROC) __GLeeGetProcAddress("glConvolutionFilter2DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glConvolutionParameterfEXT = (GLEEPFNGLCONVOLUTIONPARAMETERFEXTPROC) __GLeeGetProcAddress("glConvolutionParameterfEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glConvolutionParameterfvEXT = (GLEEPFNGLCONVOLUTIONPARAMETERFVEXTPROC) __GLeeGetProcAddress("glConvolutionParameterfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glConvolutionParameteriEXT = (GLEEPFNGLCONVOLUTIONPARAMETERIEXTPROC) __GLeeGetProcAddress("glConvolutionParameteriEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glConvolutionParameterivEXT = (GLEEPFNGLCONVOLUTIONPARAMETERIVEXTPROC) __GLeeGetProcAddress("glConvolutionParameterivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyConvolutionFilter1DEXT = (GLEEPFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) __GLeeGetProcAddress("glCopyConvolutionFilter1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyConvolutionFilter2DEXT = (GLEEPFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) __GLeeGetProcAddress("glCopyConvolutionFilter2DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetConvolutionFilterEXT = (GLEEPFNGLGETCONVOLUTIONFILTEREXTPROC) __GLeeGetProcAddress("glGetConvolutionFilterEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetConvolutionParameterfvEXT = (GLEEPFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) __GLeeGetProcAddress("glGetConvolutionParameterfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetConvolutionParameterivEXT = (GLEEPFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) __GLeeGetProcAddress("glGetConvolutionParameterivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetSeparableFilterEXT = (GLEEPFNGLGETSEPARABLEFILTEREXTPROC) __GLeeGetProcAddress("glGetSeparableFilterEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSeparableFilter2DEXT = (GLEEPFNGLSEPARABLEFILTER2DEXTPROC) __GLeeGetProcAddress("glSeparableFilter2DEXT"))!=0) nLinked++; #endif if (nLinked==13) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGI_color_matrix(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGI_color_table(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGI_color_table if ((GLeeFuncPtr_glColorTableSGI = (GLEEPFNGLCOLORTABLESGIPROC) __GLeeGetProcAddress("glColorTableSGI"))!=0) nLinked++; if ((GLeeFuncPtr_glColorTableParameterfvSGI = (GLEEPFNGLCOLORTABLEPARAMETERFVSGIPROC) __GLeeGetProcAddress("glColorTableParameterfvSGI"))!=0) nLinked++; if ((GLeeFuncPtr_glColorTableParameterivSGI = (GLEEPFNGLCOLORTABLEPARAMETERIVSGIPROC) __GLeeGetProcAddress("glColorTableParameterivSGI"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyColorTableSGI = (GLEEPFNGLCOPYCOLORTABLESGIPROC) __GLeeGetProcAddress("glCopyColorTableSGI"))!=0) nLinked++; if ((GLeeFuncPtr_glGetColorTableSGI = (GLEEPFNGLGETCOLORTABLESGIPROC) __GLeeGetProcAddress("glGetColorTableSGI"))!=0) nLinked++; if ((GLeeFuncPtr_glGetColorTableParameterfvSGI = (GLEEPFNGLGETCOLORTABLEPARAMETERFVSGIPROC) __GLeeGetProcAddress("glGetColorTableParameterfvSGI"))!=0) nLinked++; if ((GLeeFuncPtr_glGetColorTableParameterivSGI = (GLEEPFNGLGETCOLORTABLEPARAMETERIVSGIPROC) __GLeeGetProcAddress("glGetColorTableParameterivSGI"))!=0) nLinked++; #endif if (nLinked==7) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIS_pixel_texture(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIS_pixel_texture if ((GLeeFuncPtr_glPixelTexGenParameteriSGIS = (GLEEPFNGLPIXELTEXGENPARAMETERISGISPROC) __GLeeGetProcAddress("glPixelTexGenParameteriSGIS"))!=0) nLinked++; if ((GLeeFuncPtr_glPixelTexGenParameterivSGIS = (GLEEPFNGLPIXELTEXGENPARAMETERIVSGISPROC) __GLeeGetProcAddress("glPixelTexGenParameterivSGIS"))!=0) nLinked++; if ((GLeeFuncPtr_glPixelTexGenParameterfSGIS = (GLEEPFNGLPIXELTEXGENPARAMETERFSGISPROC) __GLeeGetProcAddress("glPixelTexGenParameterfSGIS"))!=0) nLinked++; if ((GLeeFuncPtr_glPixelTexGenParameterfvSGIS = (GLEEPFNGLPIXELTEXGENPARAMETERFVSGISPROC) __GLeeGetProcAddress("glPixelTexGenParameterfvSGIS"))!=0) nLinked++; if ((GLeeFuncPtr_glGetPixelTexGenParameterivSGIS = (GLEEPFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) __GLeeGetProcAddress("glGetPixelTexGenParameterivSGIS"))!=0) nLinked++; if ((GLeeFuncPtr_glGetPixelTexGenParameterfvSGIS = (GLEEPFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) __GLeeGetProcAddress("glGetPixelTexGenParameterfvSGIS"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIX_pixel_texture(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIX_pixel_texture if ((GLeeFuncPtr_glPixelTexGenSGIX = (GLEEPFNGLPIXELTEXGENSGIXPROC) __GLeeGetProcAddress("glPixelTexGenSGIX"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIS_texture4D(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIS_texture4D if ((GLeeFuncPtr_glTexImage4DSGIS = (GLEEPFNGLTEXIMAGE4DSGISPROC) __GLeeGetProcAddress("glTexImage4DSGIS"))!=0) nLinked++; if ((GLeeFuncPtr_glTexSubImage4DSGIS = (GLEEPFNGLTEXSUBIMAGE4DSGISPROC) __GLeeGetProcAddress("glTexSubImage4DSGIS"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGI_texture_color_table(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_cmyka(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_texture_object(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_texture_object if ((GLeeFuncPtr_glAreTexturesResidentEXT = (GLEEPFNGLARETEXTURESRESIDENTEXTPROC) __GLeeGetProcAddress("glAreTexturesResidentEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBindTextureEXT = (GLEEPFNGLBINDTEXTUREEXTPROC) __GLeeGetProcAddress("glBindTextureEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteTexturesEXT = (GLEEPFNGLDELETETEXTURESEXTPROC) __GLeeGetProcAddress("glDeleteTexturesEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGenTexturesEXT = (GLEEPFNGLGENTEXTURESEXTPROC) __GLeeGetProcAddress("glGenTexturesEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glIsTextureEXT = (GLEEPFNGLISTEXTUREEXTPROC) __GLeeGetProcAddress("glIsTextureEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glPrioritizeTexturesEXT = (GLEEPFNGLPRIORITIZETEXTURESEXTPROC) __GLeeGetProcAddress("glPrioritizeTexturesEXT"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIS_detail_texture(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIS_detail_texture if ((GLeeFuncPtr_glDetailTexFuncSGIS = (GLEEPFNGLDETAILTEXFUNCSGISPROC) __GLeeGetProcAddress("glDetailTexFuncSGIS"))!=0) nLinked++; if ((GLeeFuncPtr_glGetDetailTexFuncSGIS = (GLEEPFNGLGETDETAILTEXFUNCSGISPROC) __GLeeGetProcAddress("glGetDetailTexFuncSGIS"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIS_sharpen_texture(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIS_sharpen_texture if ((GLeeFuncPtr_glSharpenTexFuncSGIS = (GLEEPFNGLSHARPENTEXFUNCSGISPROC) __GLeeGetProcAddress("glSharpenTexFuncSGIS"))!=0) nLinked++; if ((GLeeFuncPtr_glGetSharpenTexFuncSGIS = (GLEEPFNGLGETSHARPENTEXFUNCSGISPROC) __GLeeGetProcAddress("glGetSharpenTexFuncSGIS"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_packed_pixels(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIS_texture_lod(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIS_multisample(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIS_multisample if ((GLeeFuncPtr_glSampleMaskSGIS = (GLEEPFNGLSAMPLEMASKSGISPROC) __GLeeGetProcAddress("glSampleMaskSGIS"))!=0) nLinked++; if ((GLeeFuncPtr_glSamplePatternSGIS = (GLEEPFNGLSAMPLEPATTERNSGISPROC) __GLeeGetProcAddress("glSamplePatternSGIS"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_rescale_normal(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_vertex_array(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_vertex_array if ((GLeeFuncPtr_glArrayElementEXT = (GLEEPFNGLARRAYELEMENTEXTPROC) __GLeeGetProcAddress("glArrayElementEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glColorPointerEXT = (GLEEPFNGLCOLORPOINTEREXTPROC) __GLeeGetProcAddress("glColorPointerEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glDrawArraysEXT = (GLEEPFNGLDRAWARRAYSEXTPROC) __GLeeGetProcAddress("glDrawArraysEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glEdgeFlagPointerEXT = (GLEEPFNGLEDGEFLAGPOINTEREXTPROC) __GLeeGetProcAddress("glEdgeFlagPointerEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetPointervEXT = (GLEEPFNGLGETPOINTERVEXTPROC) __GLeeGetProcAddress("glGetPointervEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glIndexPointerEXT = (GLEEPFNGLINDEXPOINTEREXTPROC) __GLeeGetProcAddress("glIndexPointerEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNormalPointerEXT = (GLEEPFNGLNORMALPOINTEREXTPROC) __GLeeGetProcAddress("glNormalPointerEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoordPointerEXT = (GLEEPFNGLTEXCOORDPOINTEREXTPROC) __GLeeGetProcAddress("glTexCoordPointerEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexPointerEXT = (GLEEPFNGLVERTEXPOINTEREXTPROC) __GLeeGetProcAddress("glVertexPointerEXT"))!=0) nLinked++; #endif if (nLinked==9) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_misc_attribute(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIS_generate_mipmap(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_clipmap(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_shadow(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIS_texture_edge_clamp(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIS_texture_border_clamp(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_blend_minmax(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_blend_minmax if ((GLeeFuncPtr_glBlendEquationEXT = (GLEEPFNGLBLENDEQUATIONEXTPROC) __GLeeGetProcAddress("glBlendEquationEXT"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_blend_subtract(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_blend_logic_op(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_interlace(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_pixel_tiles(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIS_texture_select(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_sprite(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIX_sprite if ((GLeeFuncPtr_glSpriteParameterfSGIX = (GLEEPFNGLSPRITEPARAMETERFSGIXPROC) __GLeeGetProcAddress("glSpriteParameterfSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glSpriteParameterfvSGIX = (GLEEPFNGLSPRITEPARAMETERFVSGIXPROC) __GLeeGetProcAddress("glSpriteParameterfvSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glSpriteParameteriSGIX = (GLEEPFNGLSPRITEPARAMETERISGIXPROC) __GLeeGetProcAddress("glSpriteParameteriSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glSpriteParameterivSGIX = (GLEEPFNGLSPRITEPARAMETERIVSGIXPROC) __GLeeGetProcAddress("glSpriteParameterivSGIX"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIX_texture_multi_buffer(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_point_parameters(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_point_parameters if ((GLeeFuncPtr_glPointParameterfEXT = (GLEEPFNGLPOINTPARAMETERFEXTPROC) __GLeeGetProcAddress("glPointParameterfEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glPointParameterfvEXT = (GLEEPFNGLPOINTPARAMETERFVEXTPROC) __GLeeGetProcAddress("glPointParameterfvEXT"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIS_point_parameters(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIS_point_parameters if ((GLeeFuncPtr_glPointParameterfSGIS = (GLEEPFNGLPOINTPARAMETERFSGISPROC) __GLeeGetProcAddress("glPointParameterfSGIS"))!=0) nLinked++; if ((GLeeFuncPtr_glPointParameterfvSGIS = (GLEEPFNGLPOINTPARAMETERFVSGISPROC) __GLeeGetProcAddress("glPointParameterfvSGIS"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIX_instruments(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIX_instruments if ((GLeeFuncPtr_glGetInstrumentsSGIX = (GLEEPFNGLGETINSTRUMENTSSGIXPROC) __GLeeGetProcAddress("glGetInstrumentsSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glInstrumentsBufferSGIX = (GLEEPFNGLINSTRUMENTSBUFFERSGIXPROC) __GLeeGetProcAddress("glInstrumentsBufferSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glPollInstrumentsSGIX = (GLEEPFNGLPOLLINSTRUMENTSSGIXPROC) __GLeeGetProcAddress("glPollInstrumentsSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glReadInstrumentsSGIX = (GLEEPFNGLREADINSTRUMENTSSGIXPROC) __GLeeGetProcAddress("glReadInstrumentsSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glStartInstrumentsSGIX = (GLEEPFNGLSTARTINSTRUMENTSSGIXPROC) __GLeeGetProcAddress("glStartInstrumentsSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glStopInstrumentsSGIX = (GLEEPFNGLSTOPINSTRUMENTSSGIXPROC) __GLeeGetProcAddress("glStopInstrumentsSGIX"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIX_texture_scale_bias(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_framezoom(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIX_framezoom if ((GLeeFuncPtr_glFrameZoomSGIX = (GLEEPFNGLFRAMEZOOMSGIXPROC) __GLeeGetProcAddress("glFrameZoomSGIX"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIX_tag_sample_buffer(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIX_tag_sample_buffer if ((GLeeFuncPtr_glTagSampleBufferSGIX = (GLEEPFNGLTAGSAMPLEBUFFERSGIXPROC) __GLeeGetProcAddress("glTagSampleBufferSGIX"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_FfdMaskSGIX(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_polynomial_ffd(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIX_polynomial_ffd if ((GLeeFuncPtr_glDeformationMap3dSGIX = (GLEEPFNGLDEFORMATIONMAP3DSGIXPROC) __GLeeGetProcAddress("glDeformationMap3dSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glDeformationMap3fSGIX = (GLEEPFNGLDEFORMATIONMAP3FSGIXPROC) __GLeeGetProcAddress("glDeformationMap3fSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glDeformSGIX = (GLEEPFNGLDEFORMSGIXPROC) __GLeeGetProcAddress("glDeformSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glLoadIdentityDeformationMapSGIX = (GLEEPFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) __GLeeGetProcAddress("glLoadIdentityDeformationMapSGIX"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIX_reference_plane(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIX_reference_plane if ((GLeeFuncPtr_glReferencePlaneSGIX = (GLEEPFNGLREFERENCEPLANESGIXPROC) __GLeeGetProcAddress("glReferencePlaneSGIX"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIX_flush_raster(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIX_flush_raster if ((GLeeFuncPtr_glFlushRasterSGIX = (GLEEPFNGLFLUSHRASTERSGIXPROC) __GLeeGetProcAddress("glFlushRasterSGIX"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIX_depth_texture(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIS_fog_function(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIS_fog_function if ((GLeeFuncPtr_glFogFuncSGIS = (GLEEPFNGLFOGFUNCSGISPROC) __GLeeGetProcAddress("glFogFuncSGIS"))!=0) nLinked++; if ((GLeeFuncPtr_glGetFogFuncSGIS = (GLEEPFNGLGETFOGFUNCSGISPROC) __GLeeGetProcAddress("glGetFogFuncSGIS"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIX_fog_offset(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_HP_image_transform(void) { GLint nLinked=0; #ifdef __GLEE_GL_HP_image_transform if ((GLeeFuncPtr_glImageTransformParameteriHP = (GLEEPFNGLIMAGETRANSFORMPARAMETERIHPPROC) __GLeeGetProcAddress("glImageTransformParameteriHP"))!=0) nLinked++; if ((GLeeFuncPtr_glImageTransformParameterfHP = (GLEEPFNGLIMAGETRANSFORMPARAMETERFHPPROC) __GLeeGetProcAddress("glImageTransformParameterfHP"))!=0) nLinked++; if ((GLeeFuncPtr_glImageTransformParameterivHP = (GLEEPFNGLIMAGETRANSFORMPARAMETERIVHPPROC) __GLeeGetProcAddress("glImageTransformParameterivHP"))!=0) nLinked++; if ((GLeeFuncPtr_glImageTransformParameterfvHP = (GLEEPFNGLIMAGETRANSFORMPARAMETERFVHPPROC) __GLeeGetProcAddress("glImageTransformParameterfvHP"))!=0) nLinked++; if ((GLeeFuncPtr_glGetImageTransformParameterivHP = (GLEEPFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) __GLeeGetProcAddress("glGetImageTransformParameterivHP"))!=0) nLinked++; if ((GLeeFuncPtr_glGetImageTransformParameterfvHP = (GLEEPFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) __GLeeGetProcAddress("glGetImageTransformParameterfvHP"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_HP_convolution_border_modes(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_INGR_palette_buffer(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_texture_add_env(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_color_subtable(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_color_subtable if ((GLeeFuncPtr_glColorSubTableEXT = (GLEEPFNGLCOLORSUBTABLEEXTPROC) __GLeeGetProcAddress("glColorSubTableEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyColorSubTableEXT = (GLEEPFNGLCOPYCOLORSUBTABLEEXTPROC) __GLeeGetProcAddress("glCopyColorSubTableEXT"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_PGI_vertex_hints(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_PGI_misc_hints(void) { GLint nLinked=0; #ifdef __GLEE_GL_PGI_misc_hints if ((GLeeFuncPtr_glHintPGI = (GLEEPFNGLHINTPGIPROC) __GLeeGetProcAddress("glHintPGI"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_paletted_texture(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_paletted_texture if ((GLeeFuncPtr_glColorTableEXT = (GLEEPFNGLCOLORTABLEEXTPROC) __GLeeGetProcAddress("glColorTableEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetColorTableEXT = (GLEEPFNGLGETCOLORTABLEEXTPROC) __GLeeGetProcAddress("glGetColorTableEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetColorTableParameterivEXT = (GLEEPFNGLGETCOLORTABLEPARAMETERIVEXTPROC) __GLeeGetProcAddress("glGetColorTableParameterivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetColorTableParameterfvEXT = (GLEEPFNGLGETCOLORTABLEPARAMETERFVEXTPROC) __GLeeGetProcAddress("glGetColorTableParameterfvEXT"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_clip_volume_hint(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_list_priority(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIX_list_priority if ((GLeeFuncPtr_glGetListParameterfvSGIX = (GLEEPFNGLGETLISTPARAMETERFVSGIXPROC) __GLeeGetProcAddress("glGetListParameterfvSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glGetListParameterivSGIX = (GLEEPFNGLGETLISTPARAMETERIVSGIXPROC) __GLeeGetProcAddress("glGetListParameterivSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glListParameterfSGIX = (GLEEPFNGLLISTPARAMETERFSGIXPROC) __GLeeGetProcAddress("glListParameterfSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glListParameterfvSGIX = (GLEEPFNGLLISTPARAMETERFVSGIXPROC) __GLeeGetProcAddress("glListParameterfvSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glListParameteriSGIX = (GLEEPFNGLLISTPARAMETERISGIXPROC) __GLeeGetProcAddress("glListParameteriSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glListParameterivSGIX = (GLEEPFNGLLISTPARAMETERIVSGIXPROC) __GLeeGetProcAddress("glListParameterivSGIX"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIX_ir_instrument1(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_calligraphic_fragment(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_texture_lod_bias(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_shadow_ambient(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_index_texture(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_index_material(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_index_material if ((GLeeFuncPtr_glIndexMaterialEXT = (GLEEPFNGLINDEXMATERIALEXTPROC) __GLeeGetProcAddress("glIndexMaterialEXT"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_index_func(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_index_func if ((GLeeFuncPtr_glIndexFuncEXT = (GLEEPFNGLINDEXFUNCEXTPROC) __GLeeGetProcAddress("glIndexFuncEXT"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_index_array_formats(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_compiled_vertex_array(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_compiled_vertex_array if ((GLeeFuncPtr_glLockArraysEXT = (GLEEPFNGLLOCKARRAYSEXTPROC) __GLeeGetProcAddress("glLockArraysEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glUnlockArraysEXT = (GLEEPFNGLUNLOCKARRAYSEXTPROC) __GLeeGetProcAddress("glUnlockArraysEXT"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_cull_vertex(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_cull_vertex if ((GLeeFuncPtr_glCullParameterdvEXT = (GLEEPFNGLCULLPARAMETERDVEXTPROC) __GLeeGetProcAddress("glCullParameterdvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCullParameterfvEXT = (GLEEPFNGLCULLPARAMETERFVEXTPROC) __GLeeGetProcAddress("glCullParameterfvEXT"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIX_ycrcb(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_fragment_lighting(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIX_fragment_lighting if ((GLeeFuncPtr_glFragmentColorMaterialSGIX = (GLEEPFNGLFRAGMENTCOLORMATERIALSGIXPROC) __GLeeGetProcAddress("glFragmentColorMaterialSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glFragmentLightfSGIX = (GLEEPFNGLFRAGMENTLIGHTFSGIXPROC) __GLeeGetProcAddress("glFragmentLightfSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glFragmentLightfvSGIX = (GLEEPFNGLFRAGMENTLIGHTFVSGIXPROC) __GLeeGetProcAddress("glFragmentLightfvSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glFragmentLightiSGIX = (GLEEPFNGLFRAGMENTLIGHTISGIXPROC) __GLeeGetProcAddress("glFragmentLightiSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glFragmentLightivSGIX = (GLEEPFNGLFRAGMENTLIGHTIVSGIXPROC) __GLeeGetProcAddress("glFragmentLightivSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glFragmentLightModelfSGIX = (GLEEPFNGLFRAGMENTLIGHTMODELFSGIXPROC) __GLeeGetProcAddress("glFragmentLightModelfSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glFragmentLightModelfvSGIX = (GLEEPFNGLFRAGMENTLIGHTMODELFVSGIXPROC) __GLeeGetProcAddress("glFragmentLightModelfvSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glFragmentLightModeliSGIX = (GLEEPFNGLFRAGMENTLIGHTMODELISGIXPROC) __GLeeGetProcAddress("glFragmentLightModeliSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glFragmentLightModelivSGIX = (GLEEPFNGLFRAGMENTLIGHTMODELIVSGIXPROC) __GLeeGetProcAddress("glFragmentLightModelivSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glFragmentMaterialfSGIX = (GLEEPFNGLFRAGMENTMATERIALFSGIXPROC) __GLeeGetProcAddress("glFragmentMaterialfSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glFragmentMaterialfvSGIX = (GLEEPFNGLFRAGMENTMATERIALFVSGIXPROC) __GLeeGetProcAddress("glFragmentMaterialfvSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glFragmentMaterialiSGIX = (GLEEPFNGLFRAGMENTMATERIALISGIXPROC) __GLeeGetProcAddress("glFragmentMaterialiSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glFragmentMaterialivSGIX = (GLEEPFNGLFRAGMENTMATERIALIVSGIXPROC) __GLeeGetProcAddress("glFragmentMaterialivSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glGetFragmentLightfvSGIX = (GLEEPFNGLGETFRAGMENTLIGHTFVSGIXPROC) __GLeeGetProcAddress("glGetFragmentLightfvSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glGetFragmentLightivSGIX = (GLEEPFNGLGETFRAGMENTLIGHTIVSGIXPROC) __GLeeGetProcAddress("glGetFragmentLightivSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glGetFragmentMaterialfvSGIX = (GLEEPFNGLGETFRAGMENTMATERIALFVSGIXPROC) __GLeeGetProcAddress("glGetFragmentMaterialfvSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glGetFragmentMaterialivSGIX = (GLEEPFNGLGETFRAGMENTMATERIALIVSGIXPROC) __GLeeGetProcAddress("glGetFragmentMaterialivSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glLightEnviSGIX = (GLEEPFNGLLIGHTENVISGIXPROC) __GLeeGetProcAddress("glLightEnviSGIX"))!=0) nLinked++; #endif if (nLinked==18) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_IBM_rasterpos_clip(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_HP_texture_lighting(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_draw_range_elements(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_draw_range_elements if ((GLeeFuncPtr_glDrawRangeElementsEXT = (GLEEPFNGLDRAWRANGEELEMENTSEXTPROC) __GLeeGetProcAddress("glDrawRangeElementsEXT"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_WIN_phong_shading(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_WIN_specular_fog(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_light_texture(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_light_texture if ((GLeeFuncPtr_glApplyTextureEXT = (GLEEPFNGLAPPLYTEXTUREEXTPROC) __GLeeGetProcAddress("glApplyTextureEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureLightEXT = (GLEEPFNGLTEXTURELIGHTEXTPROC) __GLeeGetProcAddress("glTextureLightEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureMaterialEXT = (GLEEPFNGLTEXTUREMATERIALEXTPROC) __GLeeGetProcAddress("glTextureMaterialEXT"))!=0) nLinked++; #endif if (nLinked==3) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIX_blend_alpha_minmax(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_impact_pixel_texture(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_bgra(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_async(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIX_async if ((GLeeFuncPtr_glAsyncMarkerSGIX = (GLEEPFNGLASYNCMARKERSGIXPROC) __GLeeGetProcAddress("glAsyncMarkerSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glFinishAsyncSGIX = (GLEEPFNGLFINISHASYNCSGIXPROC) __GLeeGetProcAddress("glFinishAsyncSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glPollAsyncSGIX = (GLEEPFNGLPOLLASYNCSGIXPROC) __GLeeGetProcAddress("glPollAsyncSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glGenAsyncMarkersSGIX = (GLEEPFNGLGENASYNCMARKERSSGIXPROC) __GLeeGetProcAddress("glGenAsyncMarkersSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteAsyncMarkersSGIX = (GLEEPFNGLDELETEASYNCMARKERSSGIXPROC) __GLeeGetProcAddress("glDeleteAsyncMarkersSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glIsAsyncMarkerSGIX = (GLEEPFNGLISASYNCMARKERSGIXPROC) __GLeeGetProcAddress("glIsAsyncMarkerSGIX"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIX_async_pixel(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_async_histogram(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_INTEL_texture_scissor(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_INTEL_parallel_arrays(void) { GLint nLinked=0; #ifdef __GLEE_GL_INTEL_parallel_arrays if ((GLeeFuncPtr_glVertexPointervINTEL = (GLEEPFNGLVERTEXPOINTERVINTELPROC) __GLeeGetProcAddress("glVertexPointervINTEL"))!=0) nLinked++; if ((GLeeFuncPtr_glNormalPointervINTEL = (GLEEPFNGLNORMALPOINTERVINTELPROC) __GLeeGetProcAddress("glNormalPointervINTEL"))!=0) nLinked++; if ((GLeeFuncPtr_glColorPointervINTEL = (GLEEPFNGLCOLORPOINTERVINTELPROC) __GLeeGetProcAddress("glColorPointervINTEL"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoordPointervINTEL = (GLEEPFNGLTEXCOORDPOINTERVINTELPROC) __GLeeGetProcAddress("glTexCoordPointervINTEL"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_HP_occlusion_test(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_pixel_transform(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_pixel_transform if ((GLeeFuncPtr_glPixelTransformParameteriEXT = (GLEEPFNGLPIXELTRANSFORMPARAMETERIEXTPROC) __GLeeGetProcAddress("glPixelTransformParameteriEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glPixelTransformParameterfEXT = (GLEEPFNGLPIXELTRANSFORMPARAMETERFEXTPROC) __GLeeGetProcAddress("glPixelTransformParameterfEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glPixelTransformParameterivEXT = (GLEEPFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) __GLeeGetProcAddress("glPixelTransformParameterivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glPixelTransformParameterfvEXT = (GLEEPFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) __GLeeGetProcAddress("glPixelTransformParameterfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetPixelTransformParameterivEXT = (GLEEPFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC) __GLeeGetProcAddress("glGetPixelTransformParameterivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetPixelTransformParameterfvEXT = (GLEEPFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC) __GLeeGetProcAddress("glGetPixelTransformParameterfvEXT"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_pixel_transform_color_table(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_shared_texture_palette(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_separate_specular_color(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_secondary_color(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_secondary_color if ((GLeeFuncPtr_glSecondaryColor3bEXT = (GLEEPFNGLSECONDARYCOLOR3BEXTPROC) __GLeeGetProcAddress("glSecondaryColor3bEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3bvEXT = (GLEEPFNGLSECONDARYCOLOR3BVEXTPROC) __GLeeGetProcAddress("glSecondaryColor3bvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3dEXT = (GLEEPFNGLSECONDARYCOLOR3DEXTPROC) __GLeeGetProcAddress("glSecondaryColor3dEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3dvEXT = (GLEEPFNGLSECONDARYCOLOR3DVEXTPROC) __GLeeGetProcAddress("glSecondaryColor3dvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3fEXT = (GLEEPFNGLSECONDARYCOLOR3FEXTPROC) __GLeeGetProcAddress("glSecondaryColor3fEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3fvEXT = (GLEEPFNGLSECONDARYCOLOR3FVEXTPROC) __GLeeGetProcAddress("glSecondaryColor3fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3iEXT = (GLEEPFNGLSECONDARYCOLOR3IEXTPROC) __GLeeGetProcAddress("glSecondaryColor3iEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3ivEXT = (GLEEPFNGLSECONDARYCOLOR3IVEXTPROC) __GLeeGetProcAddress("glSecondaryColor3ivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3sEXT = (GLEEPFNGLSECONDARYCOLOR3SEXTPROC) __GLeeGetProcAddress("glSecondaryColor3sEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3svEXT = (GLEEPFNGLSECONDARYCOLOR3SVEXTPROC) __GLeeGetProcAddress("glSecondaryColor3svEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3ubEXT = (GLEEPFNGLSECONDARYCOLOR3UBEXTPROC) __GLeeGetProcAddress("glSecondaryColor3ubEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3ubvEXT = (GLEEPFNGLSECONDARYCOLOR3UBVEXTPROC) __GLeeGetProcAddress("glSecondaryColor3ubvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3uiEXT = (GLEEPFNGLSECONDARYCOLOR3UIEXTPROC) __GLeeGetProcAddress("glSecondaryColor3uiEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3uivEXT = (GLEEPFNGLSECONDARYCOLOR3UIVEXTPROC) __GLeeGetProcAddress("glSecondaryColor3uivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3usEXT = (GLEEPFNGLSECONDARYCOLOR3USEXTPROC) __GLeeGetProcAddress("glSecondaryColor3usEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3usvEXT = (GLEEPFNGLSECONDARYCOLOR3USVEXTPROC) __GLeeGetProcAddress("glSecondaryColor3usvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColorPointerEXT = (GLEEPFNGLSECONDARYCOLORPOINTEREXTPROC) __GLeeGetProcAddress("glSecondaryColorPointerEXT"))!=0) nLinked++; #endif if (nLinked==17) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_texture_perturb_normal(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_texture_perturb_normal if ((GLeeFuncPtr_glTextureNormalEXT = (GLEEPFNGLTEXTURENORMALEXTPROC) __GLeeGetProcAddress("glTextureNormalEXT"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_multi_draw_arrays(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_multi_draw_arrays if ((GLeeFuncPtr_glMultiDrawArraysEXT = (GLEEPFNGLMULTIDRAWARRAYSEXTPROC) __GLeeGetProcAddress("glMultiDrawArraysEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiDrawElementsEXT = (GLEEPFNGLMULTIDRAWELEMENTSEXTPROC) __GLeeGetProcAddress("glMultiDrawElementsEXT"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_fog_coord(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_fog_coord if ((GLeeFuncPtr_glFogCoordfEXT = (GLEEPFNGLFOGCOORDFEXTPROC) __GLeeGetProcAddress("glFogCoordfEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFogCoordfvEXT = (GLEEPFNGLFOGCOORDFVEXTPROC) __GLeeGetProcAddress("glFogCoordfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFogCoorddEXT = (GLEEPFNGLFOGCOORDDEXTPROC) __GLeeGetProcAddress("glFogCoorddEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFogCoorddvEXT = (GLEEPFNGLFOGCOORDDVEXTPROC) __GLeeGetProcAddress("glFogCoorddvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFogCoordPointerEXT = (GLEEPFNGLFOGCOORDPOINTEREXTPROC) __GLeeGetProcAddress("glFogCoordPointerEXT"))!=0) nLinked++; #endif if (nLinked==5) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_REND_screen_coordinates(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_coordinate_frame(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_coordinate_frame if ((GLeeFuncPtr_glTangent3bEXT = (GLEEPFNGLTANGENT3BEXTPROC) __GLeeGetProcAddress("glTangent3bEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTangent3bvEXT = (GLEEPFNGLTANGENT3BVEXTPROC) __GLeeGetProcAddress("glTangent3bvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTangent3dEXT = (GLEEPFNGLTANGENT3DEXTPROC) __GLeeGetProcAddress("glTangent3dEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTangent3dvEXT = (GLEEPFNGLTANGENT3DVEXTPROC) __GLeeGetProcAddress("glTangent3dvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTangent3fEXT = (GLEEPFNGLTANGENT3FEXTPROC) __GLeeGetProcAddress("glTangent3fEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTangent3fvEXT = (GLEEPFNGLTANGENT3FVEXTPROC) __GLeeGetProcAddress("glTangent3fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTangent3iEXT = (GLEEPFNGLTANGENT3IEXTPROC) __GLeeGetProcAddress("glTangent3iEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTangent3ivEXT = (GLEEPFNGLTANGENT3IVEXTPROC) __GLeeGetProcAddress("glTangent3ivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTangent3sEXT = (GLEEPFNGLTANGENT3SEXTPROC) __GLeeGetProcAddress("glTangent3sEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTangent3svEXT = (GLEEPFNGLTANGENT3SVEXTPROC) __GLeeGetProcAddress("glTangent3svEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBinormal3bEXT = (GLEEPFNGLBINORMAL3BEXTPROC) __GLeeGetProcAddress("glBinormal3bEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBinormal3bvEXT = (GLEEPFNGLBINORMAL3BVEXTPROC) __GLeeGetProcAddress("glBinormal3bvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBinormal3dEXT = (GLEEPFNGLBINORMAL3DEXTPROC) __GLeeGetProcAddress("glBinormal3dEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBinormal3dvEXT = (GLEEPFNGLBINORMAL3DVEXTPROC) __GLeeGetProcAddress("glBinormal3dvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBinormal3fEXT = (GLEEPFNGLBINORMAL3FEXTPROC) __GLeeGetProcAddress("glBinormal3fEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBinormal3fvEXT = (GLEEPFNGLBINORMAL3FVEXTPROC) __GLeeGetProcAddress("glBinormal3fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBinormal3iEXT = (GLEEPFNGLBINORMAL3IEXTPROC) __GLeeGetProcAddress("glBinormal3iEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBinormal3ivEXT = (GLEEPFNGLBINORMAL3IVEXTPROC) __GLeeGetProcAddress("glBinormal3ivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBinormal3sEXT = (GLEEPFNGLBINORMAL3SEXTPROC) __GLeeGetProcAddress("glBinormal3sEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBinormal3svEXT = (GLEEPFNGLBINORMAL3SVEXTPROC) __GLeeGetProcAddress("glBinormal3svEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTangentPointerEXT = (GLEEPFNGLTANGENTPOINTEREXTPROC) __GLeeGetProcAddress("glTangentPointerEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBinormalPointerEXT = (GLEEPFNGLBINORMALPOINTEREXTPROC) __GLeeGetProcAddress("glBinormalPointerEXT"))!=0) nLinked++; #endif if (nLinked==22) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_texture_env_combine(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_APPLE_specular_vector(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_APPLE_transform_hint(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_fog_scale(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SUNX_constant_data(void) { GLint nLinked=0; #ifdef __GLEE_GL_SUNX_constant_data if ((GLeeFuncPtr_glFinishTextureSUNX = (GLEEPFNGLFINISHTEXTURESUNXPROC) __GLeeGetProcAddress("glFinishTextureSUNX"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SUN_global_alpha(void) { GLint nLinked=0; #ifdef __GLEE_GL_SUN_global_alpha if ((GLeeFuncPtr_glGlobalAlphaFactorbSUN = (GLEEPFNGLGLOBALALPHAFACTORBSUNPROC) __GLeeGetProcAddress("glGlobalAlphaFactorbSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glGlobalAlphaFactorsSUN = (GLEEPFNGLGLOBALALPHAFACTORSSUNPROC) __GLeeGetProcAddress("glGlobalAlphaFactorsSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glGlobalAlphaFactoriSUN = (GLEEPFNGLGLOBALALPHAFACTORISUNPROC) __GLeeGetProcAddress("glGlobalAlphaFactoriSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glGlobalAlphaFactorfSUN = (GLEEPFNGLGLOBALALPHAFACTORFSUNPROC) __GLeeGetProcAddress("glGlobalAlphaFactorfSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glGlobalAlphaFactordSUN = (GLEEPFNGLGLOBALALPHAFACTORDSUNPROC) __GLeeGetProcAddress("glGlobalAlphaFactordSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glGlobalAlphaFactorubSUN = (GLEEPFNGLGLOBALALPHAFACTORUBSUNPROC) __GLeeGetProcAddress("glGlobalAlphaFactorubSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glGlobalAlphaFactorusSUN = (GLEEPFNGLGLOBALALPHAFACTORUSSUNPROC) __GLeeGetProcAddress("glGlobalAlphaFactorusSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glGlobalAlphaFactoruiSUN = (GLEEPFNGLGLOBALALPHAFACTORUISUNPROC) __GLeeGetProcAddress("glGlobalAlphaFactoruiSUN"))!=0) nLinked++; #endif if (nLinked==8) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SUN_triangle_list(void) { GLint nLinked=0; #ifdef __GLEE_GL_SUN_triangle_list if ((GLeeFuncPtr_glReplacementCodeuiSUN = (GLEEPFNGLREPLACEMENTCODEUISUNPROC) __GLeeGetProcAddress("glReplacementCodeuiSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeusSUN = (GLEEPFNGLREPLACEMENTCODEUSSUNPROC) __GLeeGetProcAddress("glReplacementCodeusSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeubSUN = (GLEEPFNGLREPLACEMENTCODEUBSUNPROC) __GLeeGetProcAddress("glReplacementCodeubSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeuivSUN = (GLEEPFNGLREPLACEMENTCODEUIVSUNPROC) __GLeeGetProcAddress("glReplacementCodeuivSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeusvSUN = (GLEEPFNGLREPLACEMENTCODEUSVSUNPROC) __GLeeGetProcAddress("glReplacementCodeusvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeubvSUN = (GLEEPFNGLREPLACEMENTCODEUBVSUNPROC) __GLeeGetProcAddress("glReplacementCodeubvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodePointerSUN = (GLEEPFNGLREPLACEMENTCODEPOINTERSUNPROC) __GLeeGetProcAddress("glReplacementCodePointerSUN"))!=0) nLinked++; #endif if (nLinked==7) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SUN_vertex(void) { GLint nLinked=0; #ifdef __GLEE_GL_SUN_vertex if ((GLeeFuncPtr_glColor4ubVertex2fSUN = (GLEEPFNGLCOLOR4UBVERTEX2FSUNPROC) __GLeeGetProcAddress("glColor4ubVertex2fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glColor4ubVertex2fvSUN = (GLEEPFNGLCOLOR4UBVERTEX2FVSUNPROC) __GLeeGetProcAddress("glColor4ubVertex2fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glColor4ubVertex3fSUN = (GLEEPFNGLCOLOR4UBVERTEX3FSUNPROC) __GLeeGetProcAddress("glColor4ubVertex3fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glColor4ubVertex3fvSUN = (GLEEPFNGLCOLOR4UBVERTEX3FVSUNPROC) __GLeeGetProcAddress("glColor4ubVertex3fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glColor3fVertex3fSUN = (GLEEPFNGLCOLOR3FVERTEX3FSUNPROC) __GLeeGetProcAddress("glColor3fVertex3fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glColor3fVertex3fvSUN = (GLEEPFNGLCOLOR3FVERTEX3FVSUNPROC) __GLeeGetProcAddress("glColor3fVertex3fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glNormal3fVertex3fSUN = (GLEEPFNGLNORMAL3FVERTEX3FSUNPROC) __GLeeGetProcAddress("glNormal3fVertex3fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glNormal3fVertex3fvSUN = (GLEEPFNGLNORMAL3FVERTEX3FVSUNPROC) __GLeeGetProcAddress("glNormal3fVertex3fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glColor4fNormal3fVertex3fSUN = (GLEEPFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) __GLeeGetProcAddress("glColor4fNormal3fVertex3fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glColor4fNormal3fVertex3fvSUN = (GLEEPFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) __GLeeGetProcAddress("glColor4fNormal3fVertex3fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord2fVertex3fSUN = (GLEEPFNGLTEXCOORD2FVERTEX3FSUNPROC) __GLeeGetProcAddress("glTexCoord2fVertex3fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord2fVertex3fvSUN = (GLEEPFNGLTEXCOORD2FVERTEX3FVSUNPROC) __GLeeGetProcAddress("glTexCoord2fVertex3fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord4fVertex4fSUN = (GLEEPFNGLTEXCOORD4FVERTEX4FSUNPROC) __GLeeGetProcAddress("glTexCoord4fVertex4fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord4fVertex4fvSUN = (GLEEPFNGLTEXCOORD4FVERTEX4FVSUNPROC) __GLeeGetProcAddress("glTexCoord4fVertex4fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord2fColor4ubVertex3fSUN = (GLEEPFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) __GLeeGetProcAddress("glTexCoord2fColor4ubVertex3fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord2fColor4ubVertex3fvSUN = (GLEEPFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) __GLeeGetProcAddress("glTexCoord2fColor4ubVertex3fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord2fColor3fVertex3fSUN = (GLEEPFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) __GLeeGetProcAddress("glTexCoord2fColor3fVertex3fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord2fColor3fVertex3fvSUN = (GLEEPFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) __GLeeGetProcAddress("glTexCoord2fColor3fVertex3fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord2fNormal3fVertex3fSUN = (GLEEPFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) __GLeeGetProcAddress("glTexCoord2fNormal3fVertex3fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord2fNormal3fVertex3fvSUN = (GLEEPFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) __GLeeGetProcAddress("glTexCoord2fNormal3fVertex3fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord2fColor4fNormal3fVertex3fSUN = (GLEEPFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) __GLeeGetProcAddress("glTexCoord2fColor4fNormal3fVertex3fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord2fColor4fNormal3fVertex3fvSUN = (GLEEPFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) __GLeeGetProcAddress("glTexCoord2fColor4fNormal3fVertex3fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord4fColor4fNormal3fVertex4fSUN = (GLEEPFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) __GLeeGetProcAddress("glTexCoord4fColor4fNormal3fVertex4fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord4fColor4fNormal3fVertex4fvSUN = (GLEEPFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) __GLeeGetProcAddress("glTexCoord4fColor4fNormal3fVertex4fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeuiVertex3fSUN = (GLEEPFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) __GLeeGetProcAddress("glReplacementCodeuiVertex3fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeuiVertex3fvSUN = (GLEEPFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) __GLeeGetProcAddress("glReplacementCodeuiVertex3fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeuiColor4ubVertex3fSUN = (GLEEPFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) __GLeeGetProcAddress("glReplacementCodeuiColor4ubVertex3fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeuiColor4ubVertex3fvSUN = (GLEEPFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) __GLeeGetProcAddress("glReplacementCodeuiColor4ubVertex3fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeuiColor3fVertex3fSUN = (GLEEPFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) __GLeeGetProcAddress("glReplacementCodeuiColor3fVertex3fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeuiColor3fVertex3fvSUN = (GLEEPFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) __GLeeGetProcAddress("glReplacementCodeuiColor3fVertex3fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeuiNormal3fVertex3fSUN = (GLEEPFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) __GLeeGetProcAddress("glReplacementCodeuiNormal3fVertex3fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeuiNormal3fVertex3fvSUN = (GLEEPFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) __GLeeGetProcAddress("glReplacementCodeuiNormal3fVertex3fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeuiColor4fNormal3fVertex3fSUN = (GLEEPFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) __GLeeGetProcAddress("glReplacementCodeuiColor4fNormal3fVertex3fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeuiColor4fNormal3fVertex3fvSUN = (GLEEPFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) __GLeeGetProcAddress("glReplacementCodeuiColor4fNormal3fVertex3fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeuiTexCoord2fVertex3fSUN = (GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) __GLeeGetProcAddress("glReplacementCodeuiTexCoord2fVertex3fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeuiTexCoord2fVertex3fvSUN = (GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) __GLeeGetProcAddress("glReplacementCodeuiTexCoord2fVertex3fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN = (GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) __GLeeGetProcAddress("glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN = (GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) __GLeeGetProcAddress("glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN = (GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) __GLeeGetProcAddress("glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN = (GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) __GLeeGetProcAddress("glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN"))!=0) nLinked++; #endif if (nLinked==40) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_blend_func_separate(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_blend_func_separate if ((GLeeFuncPtr_glBlendFuncSeparateEXT = (GLEEPFNGLBLENDFUNCSEPARATEEXTPROC) __GLeeGetProcAddress("glBlendFuncSeparateEXT"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_INGR_color_clamp(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_INGR_interlace_read(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_stencil_wrap(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_422_pixels(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_texgen_reflection(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_texture_cube_map(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SUN_convolution_border_modes(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_texture_env_add(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_texture_lod_bias(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_texture_filter_anisotropic(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_vertex_weighting(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_vertex_weighting if ((GLeeFuncPtr_glVertexWeightfEXT = (GLEEPFNGLVERTEXWEIGHTFEXTPROC) __GLeeGetProcAddress("glVertexWeightfEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexWeightfvEXT = (GLEEPFNGLVERTEXWEIGHTFVEXTPROC) __GLeeGetProcAddress("glVertexWeightfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexWeightPointerEXT = (GLEEPFNGLVERTEXWEIGHTPOINTEREXTPROC) __GLeeGetProcAddress("glVertexWeightPointerEXT"))!=0) nLinked++; #endif if (nLinked==3) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_light_max_exponent(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_vertex_array_range(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_vertex_array_range if ((GLeeFuncPtr_glFlushVertexArrayRangeNV = (GLEEPFNGLFLUSHVERTEXARRAYRANGENVPROC) __GLeeGetProcAddress("glFlushVertexArrayRangeNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexArrayRangeNV = (GLEEPFNGLVERTEXARRAYRANGENVPROC) __GLeeGetProcAddress("glVertexArrayRangeNV"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_register_combiners(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_register_combiners if ((GLeeFuncPtr_glCombinerParameterfvNV = (GLEEPFNGLCOMBINERPARAMETERFVNVPROC) __GLeeGetProcAddress("glCombinerParameterfvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glCombinerParameterfNV = (GLEEPFNGLCOMBINERPARAMETERFNVPROC) __GLeeGetProcAddress("glCombinerParameterfNV"))!=0) nLinked++; if ((GLeeFuncPtr_glCombinerParameterivNV = (GLEEPFNGLCOMBINERPARAMETERIVNVPROC) __GLeeGetProcAddress("glCombinerParameterivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glCombinerParameteriNV = (GLEEPFNGLCOMBINERPARAMETERINVPROC) __GLeeGetProcAddress("glCombinerParameteriNV"))!=0) nLinked++; if ((GLeeFuncPtr_glCombinerInputNV = (GLEEPFNGLCOMBINERINPUTNVPROC) __GLeeGetProcAddress("glCombinerInputNV"))!=0) nLinked++; if ((GLeeFuncPtr_glCombinerOutputNV = (GLEEPFNGLCOMBINEROUTPUTNVPROC) __GLeeGetProcAddress("glCombinerOutputNV"))!=0) nLinked++; if ((GLeeFuncPtr_glFinalCombinerInputNV = (GLEEPFNGLFINALCOMBINERINPUTNVPROC) __GLeeGetProcAddress("glFinalCombinerInputNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetCombinerInputParameterfvNV = (GLEEPFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) __GLeeGetProcAddress("glGetCombinerInputParameterfvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetCombinerInputParameterivNV = (GLEEPFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) __GLeeGetProcAddress("glGetCombinerInputParameterivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetCombinerOutputParameterfvNV = (GLEEPFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) __GLeeGetProcAddress("glGetCombinerOutputParameterfvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetCombinerOutputParameterivNV = (GLEEPFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) __GLeeGetProcAddress("glGetCombinerOutputParameterivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetFinalCombinerInputParameterfvNV = (GLEEPFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) __GLeeGetProcAddress("glGetFinalCombinerInputParameterfvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetFinalCombinerInputParameterivNV = (GLEEPFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) __GLeeGetProcAddress("glGetFinalCombinerInputParameterivNV"))!=0) nLinked++; #endif if (nLinked==13) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_fog_distance(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_texgen_emboss(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_blend_square(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_texture_env_combine4(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_MESA_resize_buffers(void) { GLint nLinked=0; #ifdef __GLEE_GL_MESA_resize_buffers if ((GLeeFuncPtr_glResizeBuffersMESA = (GLEEPFNGLRESIZEBUFFERSMESAPROC) __GLeeGetProcAddress("glResizeBuffersMESA"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_MESA_window_pos(void) { GLint nLinked=0; #ifdef __GLEE_GL_MESA_window_pos if ((GLeeFuncPtr_glWindowPos2dMESA = (GLEEPFNGLWINDOWPOS2DMESAPROC) __GLeeGetProcAddress("glWindowPos2dMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2dvMESA = (GLEEPFNGLWINDOWPOS2DVMESAPROC) __GLeeGetProcAddress("glWindowPos2dvMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2fMESA = (GLEEPFNGLWINDOWPOS2FMESAPROC) __GLeeGetProcAddress("glWindowPos2fMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2fvMESA = (GLEEPFNGLWINDOWPOS2FVMESAPROC) __GLeeGetProcAddress("glWindowPos2fvMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2iMESA = (GLEEPFNGLWINDOWPOS2IMESAPROC) __GLeeGetProcAddress("glWindowPos2iMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2ivMESA = (GLEEPFNGLWINDOWPOS2IVMESAPROC) __GLeeGetProcAddress("glWindowPos2ivMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2sMESA = (GLEEPFNGLWINDOWPOS2SMESAPROC) __GLeeGetProcAddress("glWindowPos2sMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2svMESA = (GLEEPFNGLWINDOWPOS2SVMESAPROC) __GLeeGetProcAddress("glWindowPos2svMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3dMESA = (GLEEPFNGLWINDOWPOS3DMESAPROC) __GLeeGetProcAddress("glWindowPos3dMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3dvMESA = (GLEEPFNGLWINDOWPOS3DVMESAPROC) __GLeeGetProcAddress("glWindowPos3dvMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3fMESA = (GLEEPFNGLWINDOWPOS3FMESAPROC) __GLeeGetProcAddress("glWindowPos3fMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3fvMESA = (GLEEPFNGLWINDOWPOS3FVMESAPROC) __GLeeGetProcAddress("glWindowPos3fvMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3iMESA = (GLEEPFNGLWINDOWPOS3IMESAPROC) __GLeeGetProcAddress("glWindowPos3iMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3ivMESA = (GLEEPFNGLWINDOWPOS3IVMESAPROC) __GLeeGetProcAddress("glWindowPos3ivMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3sMESA = (GLEEPFNGLWINDOWPOS3SMESAPROC) __GLeeGetProcAddress("glWindowPos3sMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3svMESA = (GLEEPFNGLWINDOWPOS3SVMESAPROC) __GLeeGetProcAddress("glWindowPos3svMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos4dMESA = (GLEEPFNGLWINDOWPOS4DMESAPROC) __GLeeGetProcAddress("glWindowPos4dMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos4dvMESA = (GLEEPFNGLWINDOWPOS4DVMESAPROC) __GLeeGetProcAddress("glWindowPos4dvMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos4fMESA = (GLEEPFNGLWINDOWPOS4FMESAPROC) __GLeeGetProcAddress("glWindowPos4fMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos4fvMESA = (GLEEPFNGLWINDOWPOS4FVMESAPROC) __GLeeGetProcAddress("glWindowPos4fvMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos4iMESA = (GLEEPFNGLWINDOWPOS4IMESAPROC) __GLeeGetProcAddress("glWindowPos4iMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos4ivMESA = (GLEEPFNGLWINDOWPOS4IVMESAPROC) __GLeeGetProcAddress("glWindowPos4ivMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos4sMESA = (GLEEPFNGLWINDOWPOS4SMESAPROC) __GLeeGetProcAddress("glWindowPos4sMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos4svMESA = (GLEEPFNGLWINDOWPOS4SVMESAPROC) __GLeeGetProcAddress("glWindowPos4svMESA"))!=0) nLinked++; #endif if (nLinked==24) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_texture_compression_s3tc(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_IBM_cull_vertex(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_IBM_multimode_draw_arrays(void) { GLint nLinked=0; #ifdef __GLEE_GL_IBM_multimode_draw_arrays if ((GLeeFuncPtr_glMultiModeDrawArraysIBM = (GLEEPFNGLMULTIMODEDRAWARRAYSIBMPROC) __GLeeGetProcAddress("glMultiModeDrawArraysIBM"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiModeDrawElementsIBM = (GLEEPFNGLMULTIMODEDRAWELEMENTSIBMPROC) __GLeeGetProcAddress("glMultiModeDrawElementsIBM"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_IBM_vertex_array_lists(void) { GLint nLinked=0; #ifdef __GLEE_GL_IBM_vertex_array_lists if ((GLeeFuncPtr_glColorPointerListIBM = (GLEEPFNGLCOLORPOINTERLISTIBMPROC) __GLeeGetProcAddress("glColorPointerListIBM"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColorPointerListIBM = (GLEEPFNGLSECONDARYCOLORPOINTERLISTIBMPROC) __GLeeGetProcAddress("glSecondaryColorPointerListIBM"))!=0) nLinked++; if ((GLeeFuncPtr_glEdgeFlagPointerListIBM = (GLEEPFNGLEDGEFLAGPOINTERLISTIBMPROC) __GLeeGetProcAddress("glEdgeFlagPointerListIBM"))!=0) nLinked++; if ((GLeeFuncPtr_glFogCoordPointerListIBM = (GLEEPFNGLFOGCOORDPOINTERLISTIBMPROC) __GLeeGetProcAddress("glFogCoordPointerListIBM"))!=0) nLinked++; if ((GLeeFuncPtr_glIndexPointerListIBM = (GLEEPFNGLINDEXPOINTERLISTIBMPROC) __GLeeGetProcAddress("glIndexPointerListIBM"))!=0) nLinked++; if ((GLeeFuncPtr_glNormalPointerListIBM = (GLEEPFNGLNORMALPOINTERLISTIBMPROC) __GLeeGetProcAddress("glNormalPointerListIBM"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoordPointerListIBM = (GLEEPFNGLTEXCOORDPOINTERLISTIBMPROC) __GLeeGetProcAddress("glTexCoordPointerListIBM"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexPointerListIBM = (GLEEPFNGLVERTEXPOINTERLISTIBMPROC) __GLeeGetProcAddress("glVertexPointerListIBM"))!=0) nLinked++; #endif if (nLinked==8) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIX_subsample(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_ycrcb_subsample(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_ycrcba(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGI_depth_pass_instrument(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_3DFX_texture_compression_FXT1(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_3DFX_multisample(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_3DFX_tbuffer(void) { GLint nLinked=0; #ifdef __GLEE_GL_3DFX_tbuffer if ((GLeeFuncPtr_glTbufferMask3DFX = (GLEEPFNGLTBUFFERMASK3DFXPROC) __GLeeGetProcAddress("glTbufferMask3DFX"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_multisample(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_multisample if ((GLeeFuncPtr_glSampleMaskEXT = (GLEEPFNGLSAMPLEMASKEXTPROC) __GLeeGetProcAddress("glSampleMaskEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSamplePatternEXT = (GLEEPFNGLSAMPLEPATTERNEXTPROC) __GLeeGetProcAddress("glSamplePatternEXT"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIX_vertex_preclip(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_convolution_accuracy(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_resample(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIS_point_line_texgen(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIS_texture_color_mask(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIS_texture_color_mask if ((GLeeFuncPtr_glTextureColorMaskSGIS = (GLEEPFNGLTEXTURECOLORMASKSGISPROC) __GLeeGetProcAddress("glTextureColorMaskSGIS"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_texture_env_dot3(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ATI_texture_mirror_once(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_fence(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_fence if ((GLeeFuncPtr_glDeleteFencesNV = (GLEEPFNGLDELETEFENCESNVPROC) __GLeeGetProcAddress("glDeleteFencesNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGenFencesNV = (GLEEPFNGLGENFENCESNVPROC) __GLeeGetProcAddress("glGenFencesNV"))!=0) nLinked++; if ((GLeeFuncPtr_glIsFenceNV = (GLEEPFNGLISFENCENVPROC) __GLeeGetProcAddress("glIsFenceNV"))!=0) nLinked++; if ((GLeeFuncPtr_glTestFenceNV = (GLEEPFNGLTESTFENCENVPROC) __GLeeGetProcAddress("glTestFenceNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetFenceivNV = (GLEEPFNGLGETFENCEIVNVPROC) __GLeeGetProcAddress("glGetFenceivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glFinishFenceNV = (GLEEPFNGLFINISHFENCENVPROC) __GLeeGetProcAddress("glFinishFenceNV"))!=0) nLinked++; if ((GLeeFuncPtr_glSetFenceNV = (GLEEPFNGLSETFENCENVPROC) __GLeeGetProcAddress("glSetFenceNV"))!=0) nLinked++; #endif if (nLinked==7) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_IBM_texture_mirrored_repeat(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_evaluators(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_evaluators if ((GLeeFuncPtr_glMapControlPointsNV = (GLEEPFNGLMAPCONTROLPOINTSNVPROC) __GLeeGetProcAddress("glMapControlPointsNV"))!=0) nLinked++; if ((GLeeFuncPtr_glMapParameterivNV = (GLEEPFNGLMAPPARAMETERIVNVPROC) __GLeeGetProcAddress("glMapParameterivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glMapParameterfvNV = (GLEEPFNGLMAPPARAMETERFVNVPROC) __GLeeGetProcAddress("glMapParameterfvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMapControlPointsNV = (GLEEPFNGLGETMAPCONTROLPOINTSNVPROC) __GLeeGetProcAddress("glGetMapControlPointsNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMapParameterivNV = (GLEEPFNGLGETMAPPARAMETERIVNVPROC) __GLeeGetProcAddress("glGetMapParameterivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMapParameterfvNV = (GLEEPFNGLGETMAPPARAMETERFVNVPROC) __GLeeGetProcAddress("glGetMapParameterfvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMapAttribParameterivNV = (GLEEPFNGLGETMAPATTRIBPARAMETERIVNVPROC) __GLeeGetProcAddress("glGetMapAttribParameterivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMapAttribParameterfvNV = (GLEEPFNGLGETMAPATTRIBPARAMETERFVNVPROC) __GLeeGetProcAddress("glGetMapAttribParameterfvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glEvalMapsNV = (GLEEPFNGLEVALMAPSNVPROC) __GLeeGetProcAddress("glEvalMapsNV"))!=0) nLinked++; #endif if (nLinked==9) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_packed_depth_stencil(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_register_combiners2(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_register_combiners2 if ((GLeeFuncPtr_glCombinerStageParameterfvNV = (GLEEPFNGLCOMBINERSTAGEPARAMETERFVNVPROC) __GLeeGetProcAddress("glCombinerStageParameterfvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetCombinerStageParameterfvNV = (GLEEPFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) __GLeeGetProcAddress("glGetCombinerStageParameterfvNV"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_texture_compression_vtc(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_texture_rectangle(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_texture_shader(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_texture_shader2(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_vertex_array_range2(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_vertex_program(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_vertex_program if ((GLeeFuncPtr_glAreProgramsResidentNV = (GLEEPFNGLAREPROGRAMSRESIDENTNVPROC) __GLeeGetProcAddress("glAreProgramsResidentNV"))!=0) nLinked++; if ((GLeeFuncPtr_glBindProgramNV = (GLEEPFNGLBINDPROGRAMNVPROC) __GLeeGetProcAddress("glBindProgramNV"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteProgramsNV = (GLEEPFNGLDELETEPROGRAMSNVPROC) __GLeeGetProcAddress("glDeleteProgramsNV"))!=0) nLinked++; if ((GLeeFuncPtr_glExecuteProgramNV = (GLEEPFNGLEXECUTEPROGRAMNVPROC) __GLeeGetProcAddress("glExecuteProgramNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGenProgramsNV = (GLEEPFNGLGENPROGRAMSNVPROC) __GLeeGetProcAddress("glGenProgramsNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramParameterdvNV = (GLEEPFNGLGETPROGRAMPARAMETERDVNVPROC) __GLeeGetProcAddress("glGetProgramParameterdvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramParameterfvNV = (GLEEPFNGLGETPROGRAMPARAMETERFVNVPROC) __GLeeGetProcAddress("glGetProgramParameterfvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramivNV = (GLEEPFNGLGETPROGRAMIVNVPROC) __GLeeGetProcAddress("glGetProgramivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramStringNV = (GLEEPFNGLGETPROGRAMSTRINGNVPROC) __GLeeGetProcAddress("glGetProgramStringNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTrackMatrixivNV = (GLEEPFNGLGETTRACKMATRIXIVNVPROC) __GLeeGetProcAddress("glGetTrackMatrixivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribdvNV = (GLEEPFNGLGETVERTEXATTRIBDVNVPROC) __GLeeGetProcAddress("glGetVertexAttribdvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribfvNV = (GLEEPFNGLGETVERTEXATTRIBFVNVPROC) __GLeeGetProcAddress("glGetVertexAttribfvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribivNV = (GLEEPFNGLGETVERTEXATTRIBIVNVPROC) __GLeeGetProcAddress("glGetVertexAttribivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribPointervNV = (GLEEPFNGLGETVERTEXATTRIBPOINTERVNVPROC) __GLeeGetProcAddress("glGetVertexAttribPointervNV"))!=0) nLinked++; if ((GLeeFuncPtr_glIsProgramNV = (GLEEPFNGLISPROGRAMNVPROC) __GLeeGetProcAddress("glIsProgramNV"))!=0) nLinked++; if ((GLeeFuncPtr_glLoadProgramNV = (GLEEPFNGLLOADPROGRAMNVPROC) __GLeeGetProcAddress("glLoadProgramNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramParameter4dNV = (GLEEPFNGLPROGRAMPARAMETER4DNVPROC) __GLeeGetProcAddress("glProgramParameter4dNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramParameter4dvNV = (GLEEPFNGLPROGRAMPARAMETER4DVNVPROC) __GLeeGetProcAddress("glProgramParameter4dvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramParameter4fNV = (GLEEPFNGLPROGRAMPARAMETER4FNVPROC) __GLeeGetProcAddress("glProgramParameter4fNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramParameter4fvNV = (GLEEPFNGLPROGRAMPARAMETER4FVNVPROC) __GLeeGetProcAddress("glProgramParameter4fvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramParameters4dvNV = (GLEEPFNGLPROGRAMPARAMETERS4DVNVPROC) __GLeeGetProcAddress("glProgramParameters4dvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramParameters4fvNV = (GLEEPFNGLPROGRAMPARAMETERS4FVNVPROC) __GLeeGetProcAddress("glProgramParameters4fvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glRequestResidentProgramsNV = (GLEEPFNGLREQUESTRESIDENTPROGRAMSNVPROC) __GLeeGetProcAddress("glRequestResidentProgramsNV"))!=0) nLinked++; if ((GLeeFuncPtr_glTrackMatrixNV = (GLEEPFNGLTRACKMATRIXNVPROC) __GLeeGetProcAddress("glTrackMatrixNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribPointerNV = (GLEEPFNGLVERTEXATTRIBPOINTERNVPROC) __GLeeGetProcAddress("glVertexAttribPointerNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1dNV = (GLEEPFNGLVERTEXATTRIB1DNVPROC) __GLeeGetProcAddress("glVertexAttrib1dNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1dvNV = (GLEEPFNGLVERTEXATTRIB1DVNVPROC) __GLeeGetProcAddress("glVertexAttrib1dvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1fNV = (GLEEPFNGLVERTEXATTRIB1FNVPROC) __GLeeGetProcAddress("glVertexAttrib1fNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1fvNV = (GLEEPFNGLVERTEXATTRIB1FVNVPROC) __GLeeGetProcAddress("glVertexAttrib1fvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1sNV = (GLEEPFNGLVERTEXATTRIB1SNVPROC) __GLeeGetProcAddress("glVertexAttrib1sNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1svNV = (GLEEPFNGLVERTEXATTRIB1SVNVPROC) __GLeeGetProcAddress("glVertexAttrib1svNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2dNV = (GLEEPFNGLVERTEXATTRIB2DNVPROC) __GLeeGetProcAddress("glVertexAttrib2dNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2dvNV = (GLEEPFNGLVERTEXATTRIB2DVNVPROC) __GLeeGetProcAddress("glVertexAttrib2dvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2fNV = (GLEEPFNGLVERTEXATTRIB2FNVPROC) __GLeeGetProcAddress("glVertexAttrib2fNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2fvNV = (GLEEPFNGLVERTEXATTRIB2FVNVPROC) __GLeeGetProcAddress("glVertexAttrib2fvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2sNV = (GLEEPFNGLVERTEXATTRIB2SNVPROC) __GLeeGetProcAddress("glVertexAttrib2sNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2svNV = (GLEEPFNGLVERTEXATTRIB2SVNVPROC) __GLeeGetProcAddress("glVertexAttrib2svNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3dNV = (GLEEPFNGLVERTEXATTRIB3DNVPROC) __GLeeGetProcAddress("glVertexAttrib3dNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3dvNV = (GLEEPFNGLVERTEXATTRIB3DVNVPROC) __GLeeGetProcAddress("glVertexAttrib3dvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3fNV = (GLEEPFNGLVERTEXATTRIB3FNVPROC) __GLeeGetProcAddress("glVertexAttrib3fNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3fvNV = (GLEEPFNGLVERTEXATTRIB3FVNVPROC) __GLeeGetProcAddress("glVertexAttrib3fvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3sNV = (GLEEPFNGLVERTEXATTRIB3SNVPROC) __GLeeGetProcAddress("glVertexAttrib3sNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3svNV = (GLEEPFNGLVERTEXATTRIB3SVNVPROC) __GLeeGetProcAddress("glVertexAttrib3svNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4dNV = (GLEEPFNGLVERTEXATTRIB4DNVPROC) __GLeeGetProcAddress("glVertexAttrib4dNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4dvNV = (GLEEPFNGLVERTEXATTRIB4DVNVPROC) __GLeeGetProcAddress("glVertexAttrib4dvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4fNV = (GLEEPFNGLVERTEXATTRIB4FNVPROC) __GLeeGetProcAddress("glVertexAttrib4fNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4fvNV = (GLEEPFNGLVERTEXATTRIB4FVNVPROC) __GLeeGetProcAddress("glVertexAttrib4fvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4sNV = (GLEEPFNGLVERTEXATTRIB4SNVPROC) __GLeeGetProcAddress("glVertexAttrib4sNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4svNV = (GLEEPFNGLVERTEXATTRIB4SVNVPROC) __GLeeGetProcAddress("glVertexAttrib4svNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4ubNV = (GLEEPFNGLVERTEXATTRIB4UBNVPROC) __GLeeGetProcAddress("glVertexAttrib4ubNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4ubvNV = (GLEEPFNGLVERTEXATTRIB4UBVNVPROC) __GLeeGetProcAddress("glVertexAttrib4ubvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribs1dvNV = (GLEEPFNGLVERTEXATTRIBS1DVNVPROC) __GLeeGetProcAddress("glVertexAttribs1dvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribs1fvNV = (GLEEPFNGLVERTEXATTRIBS1FVNVPROC) __GLeeGetProcAddress("glVertexAttribs1fvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribs1svNV = (GLEEPFNGLVERTEXATTRIBS1SVNVPROC) __GLeeGetProcAddress("glVertexAttribs1svNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribs2dvNV = (GLEEPFNGLVERTEXATTRIBS2DVNVPROC) __GLeeGetProcAddress("glVertexAttribs2dvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribs2fvNV = (GLEEPFNGLVERTEXATTRIBS2FVNVPROC) __GLeeGetProcAddress("glVertexAttribs2fvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribs2svNV = (GLEEPFNGLVERTEXATTRIBS2SVNVPROC) __GLeeGetProcAddress("glVertexAttribs2svNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribs3dvNV = (GLEEPFNGLVERTEXATTRIBS3DVNVPROC) __GLeeGetProcAddress("glVertexAttribs3dvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribs3fvNV = (GLEEPFNGLVERTEXATTRIBS3FVNVPROC) __GLeeGetProcAddress("glVertexAttribs3fvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribs3svNV = (GLEEPFNGLVERTEXATTRIBS3SVNVPROC) __GLeeGetProcAddress("glVertexAttribs3svNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribs4dvNV = (GLEEPFNGLVERTEXATTRIBS4DVNVPROC) __GLeeGetProcAddress("glVertexAttribs4dvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribs4fvNV = (GLEEPFNGLVERTEXATTRIBS4FVNVPROC) __GLeeGetProcAddress("glVertexAttribs4fvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribs4svNV = (GLEEPFNGLVERTEXATTRIBS4SVNVPROC) __GLeeGetProcAddress("glVertexAttribs4svNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribs4ubvNV = (GLEEPFNGLVERTEXATTRIBS4UBVNVPROC) __GLeeGetProcAddress("glVertexAttribs4ubvNV"))!=0) nLinked++; #endif if (nLinked==64) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIX_texture_coordinate_clamp(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_scalebias_hint(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_OML_interlace(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_OML_subsample(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_OML_resample(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_copy_depth_to_color(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ATI_envmap_bumpmap(void) { GLint nLinked=0; #ifdef __GLEE_GL_ATI_envmap_bumpmap if ((GLeeFuncPtr_glTexBumpParameterivATI = (GLEEPFNGLTEXBUMPPARAMETERIVATIPROC) __GLeeGetProcAddress("glTexBumpParameterivATI"))!=0) nLinked++; if ((GLeeFuncPtr_glTexBumpParameterfvATI = (GLEEPFNGLTEXBUMPPARAMETERFVATIPROC) __GLeeGetProcAddress("glTexBumpParameterfvATI"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTexBumpParameterivATI = (GLEEPFNGLGETTEXBUMPPARAMETERIVATIPROC) __GLeeGetProcAddress("glGetTexBumpParameterivATI"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTexBumpParameterfvATI = (GLEEPFNGLGETTEXBUMPPARAMETERFVATIPROC) __GLeeGetProcAddress("glGetTexBumpParameterfvATI"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ATI_fragment_shader(void) { GLint nLinked=0; #ifdef __GLEE_GL_ATI_fragment_shader if ((GLeeFuncPtr_glGenFragmentShadersATI = (GLEEPFNGLGENFRAGMENTSHADERSATIPROC) __GLeeGetProcAddress("glGenFragmentShadersATI"))!=0) nLinked++; if ((GLeeFuncPtr_glBindFragmentShaderATI = (GLEEPFNGLBINDFRAGMENTSHADERATIPROC) __GLeeGetProcAddress("glBindFragmentShaderATI"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteFragmentShaderATI = (GLEEPFNGLDELETEFRAGMENTSHADERATIPROC) __GLeeGetProcAddress("glDeleteFragmentShaderATI"))!=0) nLinked++; if ((GLeeFuncPtr_glBeginFragmentShaderATI = (GLEEPFNGLBEGINFRAGMENTSHADERATIPROC) __GLeeGetProcAddress("glBeginFragmentShaderATI"))!=0) nLinked++; if ((GLeeFuncPtr_glEndFragmentShaderATI = (GLEEPFNGLENDFRAGMENTSHADERATIPROC) __GLeeGetProcAddress("glEndFragmentShaderATI"))!=0) nLinked++; if ((GLeeFuncPtr_glPassTexCoordATI = (GLEEPFNGLPASSTEXCOORDATIPROC) __GLeeGetProcAddress("glPassTexCoordATI"))!=0) nLinked++; if ((GLeeFuncPtr_glSampleMapATI = (GLEEPFNGLSAMPLEMAPATIPROC) __GLeeGetProcAddress("glSampleMapATI"))!=0) nLinked++; if ((GLeeFuncPtr_glColorFragmentOp1ATI = (GLEEPFNGLCOLORFRAGMENTOP1ATIPROC) __GLeeGetProcAddress("glColorFragmentOp1ATI"))!=0) nLinked++; if ((GLeeFuncPtr_glColorFragmentOp2ATI = (GLEEPFNGLCOLORFRAGMENTOP2ATIPROC) __GLeeGetProcAddress("glColorFragmentOp2ATI"))!=0) nLinked++; if ((GLeeFuncPtr_glColorFragmentOp3ATI = (GLEEPFNGLCOLORFRAGMENTOP3ATIPROC) __GLeeGetProcAddress("glColorFragmentOp3ATI"))!=0) nLinked++; if ((GLeeFuncPtr_glAlphaFragmentOp1ATI = (GLEEPFNGLALPHAFRAGMENTOP1ATIPROC) __GLeeGetProcAddress("glAlphaFragmentOp1ATI"))!=0) nLinked++; if ((GLeeFuncPtr_glAlphaFragmentOp2ATI = (GLEEPFNGLALPHAFRAGMENTOP2ATIPROC) __GLeeGetProcAddress("glAlphaFragmentOp2ATI"))!=0) nLinked++; if ((GLeeFuncPtr_glAlphaFragmentOp3ATI = (GLEEPFNGLALPHAFRAGMENTOP3ATIPROC) __GLeeGetProcAddress("glAlphaFragmentOp3ATI"))!=0) nLinked++; if ((GLeeFuncPtr_glSetFragmentShaderConstantATI = (GLEEPFNGLSETFRAGMENTSHADERCONSTANTATIPROC) __GLeeGetProcAddress("glSetFragmentShaderConstantATI"))!=0) nLinked++; #endif if (nLinked==14) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ATI_pn_triangles(void) { GLint nLinked=0; #ifdef __GLEE_GL_ATI_pn_triangles if ((GLeeFuncPtr_glPNTrianglesiATI = (GLEEPFNGLPNTRIANGLESIATIPROC) __GLeeGetProcAddress("glPNTrianglesiATI"))!=0) nLinked++; if ((GLeeFuncPtr_glPNTrianglesfATI = (GLEEPFNGLPNTRIANGLESFATIPROC) __GLeeGetProcAddress("glPNTrianglesfATI"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ATI_vertex_array_object(void) { GLint nLinked=0; #ifdef __GLEE_GL_ATI_vertex_array_object if ((GLeeFuncPtr_glNewObjectBufferATI = (GLEEPFNGLNEWOBJECTBUFFERATIPROC) __GLeeGetProcAddress("glNewObjectBufferATI"))!=0) nLinked++; if ((GLeeFuncPtr_glIsObjectBufferATI = (GLEEPFNGLISOBJECTBUFFERATIPROC) __GLeeGetProcAddress("glIsObjectBufferATI"))!=0) nLinked++; if ((GLeeFuncPtr_glUpdateObjectBufferATI = (GLEEPFNGLUPDATEOBJECTBUFFERATIPROC) __GLeeGetProcAddress("glUpdateObjectBufferATI"))!=0) nLinked++; if ((GLeeFuncPtr_glGetObjectBufferfvATI = (GLEEPFNGLGETOBJECTBUFFERFVATIPROC) __GLeeGetProcAddress("glGetObjectBufferfvATI"))!=0) nLinked++; if ((GLeeFuncPtr_glGetObjectBufferivATI = (GLEEPFNGLGETOBJECTBUFFERIVATIPROC) __GLeeGetProcAddress("glGetObjectBufferivATI"))!=0) nLinked++; if ((GLeeFuncPtr_glFreeObjectBufferATI = (GLEEPFNGLFREEOBJECTBUFFERATIPROC) __GLeeGetProcAddress("glFreeObjectBufferATI"))!=0) nLinked++; if ((GLeeFuncPtr_glArrayObjectATI = (GLEEPFNGLARRAYOBJECTATIPROC) __GLeeGetProcAddress("glArrayObjectATI"))!=0) nLinked++; if ((GLeeFuncPtr_glGetArrayObjectfvATI = (GLEEPFNGLGETARRAYOBJECTFVATIPROC) __GLeeGetProcAddress("glGetArrayObjectfvATI"))!=0) nLinked++; if ((GLeeFuncPtr_glGetArrayObjectivATI = (GLEEPFNGLGETARRAYOBJECTIVATIPROC) __GLeeGetProcAddress("glGetArrayObjectivATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVariantArrayObjectATI = (GLEEPFNGLVARIANTARRAYOBJECTATIPROC) __GLeeGetProcAddress("glVariantArrayObjectATI"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVariantArrayObjectfvATI = (GLEEPFNGLGETVARIANTARRAYOBJECTFVATIPROC) __GLeeGetProcAddress("glGetVariantArrayObjectfvATI"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVariantArrayObjectivATI = (GLEEPFNGLGETVARIANTARRAYOBJECTIVATIPROC) __GLeeGetProcAddress("glGetVariantArrayObjectivATI"))!=0) nLinked++; #endif if (nLinked==12) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_vertex_shader(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_vertex_shader if ((GLeeFuncPtr_glBeginVertexShaderEXT = (GLEEPFNGLBEGINVERTEXSHADEREXTPROC) __GLeeGetProcAddress("glBeginVertexShaderEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glEndVertexShaderEXT = (GLEEPFNGLENDVERTEXSHADEREXTPROC) __GLeeGetProcAddress("glEndVertexShaderEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBindVertexShaderEXT = (GLEEPFNGLBINDVERTEXSHADEREXTPROC) __GLeeGetProcAddress("glBindVertexShaderEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGenVertexShadersEXT = (GLEEPFNGLGENVERTEXSHADERSEXTPROC) __GLeeGetProcAddress("glGenVertexShadersEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteVertexShaderEXT = (GLEEPFNGLDELETEVERTEXSHADEREXTPROC) __GLeeGetProcAddress("glDeleteVertexShaderEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glShaderOp1EXT = (GLEEPFNGLSHADEROP1EXTPROC) __GLeeGetProcAddress("glShaderOp1EXT"))!=0) nLinked++; if ((GLeeFuncPtr_glShaderOp2EXT = (GLEEPFNGLSHADEROP2EXTPROC) __GLeeGetProcAddress("glShaderOp2EXT"))!=0) nLinked++; if ((GLeeFuncPtr_glShaderOp3EXT = (GLEEPFNGLSHADEROP3EXTPROC) __GLeeGetProcAddress("glShaderOp3EXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSwizzleEXT = (GLEEPFNGLSWIZZLEEXTPROC) __GLeeGetProcAddress("glSwizzleEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glWriteMaskEXT = (GLEEPFNGLWRITEMASKEXTPROC) __GLeeGetProcAddress("glWriteMaskEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glInsertComponentEXT = (GLEEPFNGLINSERTCOMPONENTEXTPROC) __GLeeGetProcAddress("glInsertComponentEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glExtractComponentEXT = (GLEEPFNGLEXTRACTCOMPONENTEXTPROC) __GLeeGetProcAddress("glExtractComponentEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGenSymbolsEXT = (GLEEPFNGLGENSYMBOLSEXTPROC) __GLeeGetProcAddress("glGenSymbolsEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSetInvariantEXT = (GLEEPFNGLSETINVARIANTEXTPROC) __GLeeGetProcAddress("glSetInvariantEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSetLocalConstantEXT = (GLEEPFNGLSETLOCALCONSTANTEXTPROC) __GLeeGetProcAddress("glSetLocalConstantEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVariantbvEXT = (GLEEPFNGLVARIANTBVEXTPROC) __GLeeGetProcAddress("glVariantbvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVariantsvEXT = (GLEEPFNGLVARIANTSVEXTPROC) __GLeeGetProcAddress("glVariantsvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVariantivEXT = (GLEEPFNGLVARIANTIVEXTPROC) __GLeeGetProcAddress("glVariantivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVariantfvEXT = (GLEEPFNGLVARIANTFVEXTPROC) __GLeeGetProcAddress("glVariantfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVariantdvEXT = (GLEEPFNGLVARIANTDVEXTPROC) __GLeeGetProcAddress("glVariantdvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVariantubvEXT = (GLEEPFNGLVARIANTUBVEXTPROC) __GLeeGetProcAddress("glVariantubvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVariantusvEXT = (GLEEPFNGLVARIANTUSVEXTPROC) __GLeeGetProcAddress("glVariantusvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVariantuivEXT = (GLEEPFNGLVARIANTUIVEXTPROC) __GLeeGetProcAddress("glVariantuivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVariantPointerEXT = (GLEEPFNGLVARIANTPOINTEREXTPROC) __GLeeGetProcAddress("glVariantPointerEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glEnableVariantClientStateEXT = (GLEEPFNGLENABLEVARIANTCLIENTSTATEEXTPROC) __GLeeGetProcAddress("glEnableVariantClientStateEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glDisableVariantClientStateEXT = (GLEEPFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) __GLeeGetProcAddress("glDisableVariantClientStateEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBindLightParameterEXT = (GLEEPFNGLBINDLIGHTPARAMETEREXTPROC) __GLeeGetProcAddress("glBindLightParameterEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBindMaterialParameterEXT = (GLEEPFNGLBINDMATERIALPARAMETEREXTPROC) __GLeeGetProcAddress("glBindMaterialParameterEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBindTexGenParameterEXT = (GLEEPFNGLBINDTEXGENPARAMETEREXTPROC) __GLeeGetProcAddress("glBindTexGenParameterEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBindTextureUnitParameterEXT = (GLEEPFNGLBINDTEXTUREUNITPARAMETEREXTPROC) __GLeeGetProcAddress("glBindTextureUnitParameterEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBindParameterEXT = (GLEEPFNGLBINDPARAMETEREXTPROC) __GLeeGetProcAddress("glBindParameterEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glIsVariantEnabledEXT = (GLEEPFNGLISVARIANTENABLEDEXTPROC) __GLeeGetProcAddress("glIsVariantEnabledEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVariantBooleanvEXT = (GLEEPFNGLGETVARIANTBOOLEANVEXTPROC) __GLeeGetProcAddress("glGetVariantBooleanvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVariantIntegervEXT = (GLEEPFNGLGETVARIANTINTEGERVEXTPROC) __GLeeGetProcAddress("glGetVariantIntegervEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVariantFloatvEXT = (GLEEPFNGLGETVARIANTFLOATVEXTPROC) __GLeeGetProcAddress("glGetVariantFloatvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVariantPointervEXT = (GLEEPFNGLGETVARIANTPOINTERVEXTPROC) __GLeeGetProcAddress("glGetVariantPointervEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetInvariantBooleanvEXT = (GLEEPFNGLGETINVARIANTBOOLEANVEXTPROC) __GLeeGetProcAddress("glGetInvariantBooleanvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetInvariantIntegervEXT = (GLEEPFNGLGETINVARIANTINTEGERVEXTPROC) __GLeeGetProcAddress("glGetInvariantIntegervEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetInvariantFloatvEXT = (GLEEPFNGLGETINVARIANTFLOATVEXTPROC) __GLeeGetProcAddress("glGetInvariantFloatvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetLocalConstantBooleanvEXT = (GLEEPFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) __GLeeGetProcAddress("glGetLocalConstantBooleanvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetLocalConstantIntegervEXT = (GLEEPFNGLGETLOCALCONSTANTINTEGERVEXTPROC) __GLeeGetProcAddress("glGetLocalConstantIntegervEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetLocalConstantFloatvEXT = (GLEEPFNGLGETLOCALCONSTANTFLOATVEXTPROC) __GLeeGetProcAddress("glGetLocalConstantFloatvEXT"))!=0) nLinked++; #endif if (nLinked==42) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ATI_vertex_streams(void) { GLint nLinked=0; #ifdef __GLEE_GL_ATI_vertex_streams if ((GLeeFuncPtr_glVertexStream1sATI = (GLEEPFNGLVERTEXSTREAM1SATIPROC) __GLeeGetProcAddress("glVertexStream1sATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream1svATI = (GLEEPFNGLVERTEXSTREAM1SVATIPROC) __GLeeGetProcAddress("glVertexStream1svATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream1iATI = (GLEEPFNGLVERTEXSTREAM1IATIPROC) __GLeeGetProcAddress("glVertexStream1iATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream1ivATI = (GLEEPFNGLVERTEXSTREAM1IVATIPROC) __GLeeGetProcAddress("glVertexStream1ivATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream1fATI = (GLEEPFNGLVERTEXSTREAM1FATIPROC) __GLeeGetProcAddress("glVertexStream1fATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream1fvATI = (GLEEPFNGLVERTEXSTREAM1FVATIPROC) __GLeeGetProcAddress("glVertexStream1fvATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream1dATI = (GLEEPFNGLVERTEXSTREAM1DATIPROC) __GLeeGetProcAddress("glVertexStream1dATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream1dvATI = (GLEEPFNGLVERTEXSTREAM1DVATIPROC) __GLeeGetProcAddress("glVertexStream1dvATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream2sATI = (GLEEPFNGLVERTEXSTREAM2SATIPROC) __GLeeGetProcAddress("glVertexStream2sATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream2svATI = (GLEEPFNGLVERTEXSTREAM2SVATIPROC) __GLeeGetProcAddress("glVertexStream2svATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream2iATI = (GLEEPFNGLVERTEXSTREAM2IATIPROC) __GLeeGetProcAddress("glVertexStream2iATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream2ivATI = (GLEEPFNGLVERTEXSTREAM2IVATIPROC) __GLeeGetProcAddress("glVertexStream2ivATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream2fATI = (GLEEPFNGLVERTEXSTREAM2FATIPROC) __GLeeGetProcAddress("glVertexStream2fATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream2fvATI = (GLEEPFNGLVERTEXSTREAM2FVATIPROC) __GLeeGetProcAddress("glVertexStream2fvATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream2dATI = (GLEEPFNGLVERTEXSTREAM2DATIPROC) __GLeeGetProcAddress("glVertexStream2dATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream2dvATI = (GLEEPFNGLVERTEXSTREAM2DVATIPROC) __GLeeGetProcAddress("glVertexStream2dvATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream3sATI = (GLEEPFNGLVERTEXSTREAM3SATIPROC) __GLeeGetProcAddress("glVertexStream3sATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream3svATI = (GLEEPFNGLVERTEXSTREAM3SVATIPROC) __GLeeGetProcAddress("glVertexStream3svATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream3iATI = (GLEEPFNGLVERTEXSTREAM3IATIPROC) __GLeeGetProcAddress("glVertexStream3iATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream3ivATI = (GLEEPFNGLVERTEXSTREAM3IVATIPROC) __GLeeGetProcAddress("glVertexStream3ivATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream3fATI = (GLEEPFNGLVERTEXSTREAM3FATIPROC) __GLeeGetProcAddress("glVertexStream3fATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream3fvATI = (GLEEPFNGLVERTEXSTREAM3FVATIPROC) __GLeeGetProcAddress("glVertexStream3fvATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream3dATI = (GLEEPFNGLVERTEXSTREAM3DATIPROC) __GLeeGetProcAddress("glVertexStream3dATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream3dvATI = (GLEEPFNGLVERTEXSTREAM3DVATIPROC) __GLeeGetProcAddress("glVertexStream3dvATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream4sATI = (GLEEPFNGLVERTEXSTREAM4SATIPROC) __GLeeGetProcAddress("glVertexStream4sATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream4svATI = (GLEEPFNGLVERTEXSTREAM4SVATIPROC) __GLeeGetProcAddress("glVertexStream4svATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream4iATI = (GLEEPFNGLVERTEXSTREAM4IATIPROC) __GLeeGetProcAddress("glVertexStream4iATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream4ivATI = (GLEEPFNGLVERTEXSTREAM4IVATIPROC) __GLeeGetProcAddress("glVertexStream4ivATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream4fATI = (GLEEPFNGLVERTEXSTREAM4FATIPROC) __GLeeGetProcAddress("glVertexStream4fATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream4fvATI = (GLEEPFNGLVERTEXSTREAM4FVATIPROC) __GLeeGetProcAddress("glVertexStream4fvATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream4dATI = (GLEEPFNGLVERTEXSTREAM4DATIPROC) __GLeeGetProcAddress("glVertexStream4dATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream4dvATI = (GLEEPFNGLVERTEXSTREAM4DVATIPROC) __GLeeGetProcAddress("glVertexStream4dvATI"))!=0) nLinked++; if ((GLeeFuncPtr_glNormalStream3bATI = (GLEEPFNGLNORMALSTREAM3BATIPROC) __GLeeGetProcAddress("glNormalStream3bATI"))!=0) nLinked++; if ((GLeeFuncPtr_glNormalStream3bvATI = (GLEEPFNGLNORMALSTREAM3BVATIPROC) __GLeeGetProcAddress("glNormalStream3bvATI"))!=0) nLinked++; if ((GLeeFuncPtr_glNormalStream3sATI = (GLEEPFNGLNORMALSTREAM3SATIPROC) __GLeeGetProcAddress("glNormalStream3sATI"))!=0) nLinked++; if ((GLeeFuncPtr_glNormalStream3svATI = (GLEEPFNGLNORMALSTREAM3SVATIPROC) __GLeeGetProcAddress("glNormalStream3svATI"))!=0) nLinked++; if ((GLeeFuncPtr_glNormalStream3iATI = (GLEEPFNGLNORMALSTREAM3IATIPROC) __GLeeGetProcAddress("glNormalStream3iATI"))!=0) nLinked++; if ((GLeeFuncPtr_glNormalStream3ivATI = (GLEEPFNGLNORMALSTREAM3IVATIPROC) __GLeeGetProcAddress("glNormalStream3ivATI"))!=0) nLinked++; if ((GLeeFuncPtr_glNormalStream3fATI = (GLEEPFNGLNORMALSTREAM3FATIPROC) __GLeeGetProcAddress("glNormalStream3fATI"))!=0) nLinked++; if ((GLeeFuncPtr_glNormalStream3fvATI = (GLEEPFNGLNORMALSTREAM3FVATIPROC) __GLeeGetProcAddress("glNormalStream3fvATI"))!=0) nLinked++; if ((GLeeFuncPtr_glNormalStream3dATI = (GLEEPFNGLNORMALSTREAM3DATIPROC) __GLeeGetProcAddress("glNormalStream3dATI"))!=0) nLinked++; if ((GLeeFuncPtr_glNormalStream3dvATI = (GLEEPFNGLNORMALSTREAM3DVATIPROC) __GLeeGetProcAddress("glNormalStream3dvATI"))!=0) nLinked++; if ((GLeeFuncPtr_glClientActiveVertexStreamATI = (GLEEPFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) __GLeeGetProcAddress("glClientActiveVertexStreamATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexBlendEnviATI = (GLEEPFNGLVERTEXBLENDENVIATIPROC) __GLeeGetProcAddress("glVertexBlendEnviATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexBlendEnvfATI = (GLEEPFNGLVERTEXBLENDENVFATIPROC) __GLeeGetProcAddress("glVertexBlendEnvfATI"))!=0) nLinked++; #endif if (nLinked==45) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ATI_element_array(void) { GLint nLinked=0; #ifdef __GLEE_GL_ATI_element_array if ((GLeeFuncPtr_glElementPointerATI = (GLEEPFNGLELEMENTPOINTERATIPROC) __GLeeGetProcAddress("glElementPointerATI"))!=0) nLinked++; if ((GLeeFuncPtr_glDrawElementArrayATI = (GLEEPFNGLDRAWELEMENTARRAYATIPROC) __GLeeGetProcAddress("glDrawElementArrayATI"))!=0) nLinked++; if ((GLeeFuncPtr_glDrawRangeElementArrayATI = (GLEEPFNGLDRAWRANGEELEMENTARRAYATIPROC) __GLeeGetProcAddress("glDrawRangeElementArrayATI"))!=0) nLinked++; #endif if (nLinked==3) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SUN_mesh_array(void) { GLint nLinked=0; #ifdef __GLEE_GL_SUN_mesh_array if ((GLeeFuncPtr_glDrawMeshArraysSUN = (GLEEPFNGLDRAWMESHARRAYSSUNPROC) __GLeeGetProcAddress("glDrawMeshArraysSUN"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SUN_slice_accum(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_multisample_filter_hint(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_depth_clamp(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_occlusion_query(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_occlusion_query if ((GLeeFuncPtr_glGenOcclusionQueriesNV = (GLEEPFNGLGENOCCLUSIONQUERIESNVPROC) __GLeeGetProcAddress("glGenOcclusionQueriesNV"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteOcclusionQueriesNV = (GLEEPFNGLDELETEOCCLUSIONQUERIESNVPROC) __GLeeGetProcAddress("glDeleteOcclusionQueriesNV"))!=0) nLinked++; if ((GLeeFuncPtr_glIsOcclusionQueryNV = (GLEEPFNGLISOCCLUSIONQUERYNVPROC) __GLeeGetProcAddress("glIsOcclusionQueryNV"))!=0) nLinked++; if ((GLeeFuncPtr_glBeginOcclusionQueryNV = (GLEEPFNGLBEGINOCCLUSIONQUERYNVPROC) __GLeeGetProcAddress("glBeginOcclusionQueryNV"))!=0) nLinked++; if ((GLeeFuncPtr_glEndOcclusionQueryNV = (GLEEPFNGLENDOCCLUSIONQUERYNVPROC) __GLeeGetProcAddress("glEndOcclusionQueryNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetOcclusionQueryivNV = (GLEEPFNGLGETOCCLUSIONQUERYIVNVPROC) __GLeeGetProcAddress("glGetOcclusionQueryivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetOcclusionQueryuivNV = (GLEEPFNGLGETOCCLUSIONQUERYUIVNVPROC) __GLeeGetProcAddress("glGetOcclusionQueryuivNV"))!=0) nLinked++; #endif if (nLinked==7) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_point_sprite(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_point_sprite if ((GLeeFuncPtr_glPointParameteriNV = (GLEEPFNGLPOINTPARAMETERINVPROC) __GLeeGetProcAddress("glPointParameteriNV"))!=0) nLinked++; if ((GLeeFuncPtr_glPointParameterivNV = (GLEEPFNGLPOINTPARAMETERIVNVPROC) __GLeeGetProcAddress("glPointParameterivNV"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_texture_shader3(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_vertex_program1_1(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_shadow_funcs(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_stencil_two_side(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_stencil_two_side if ((GLeeFuncPtr_glActiveStencilFaceEXT = (GLEEPFNGLACTIVESTENCILFACEEXTPROC) __GLeeGetProcAddress("glActiveStencilFaceEXT"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ATI_text_fragment_shader(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_APPLE_client_storage(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_APPLE_element_array(void) { GLint nLinked=0; #ifdef __GLEE_GL_APPLE_element_array if ((GLeeFuncPtr_glElementPointerAPPLE = (GLEEPFNGLELEMENTPOINTERAPPLEPROC) __GLeeGetProcAddress("glElementPointerAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glDrawElementArrayAPPLE = (GLEEPFNGLDRAWELEMENTARRAYAPPLEPROC) __GLeeGetProcAddress("glDrawElementArrayAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glDrawRangeElementArrayAPPLE = (GLEEPFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) __GLeeGetProcAddress("glDrawRangeElementArrayAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiDrawElementArrayAPPLE = (GLEEPFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) __GLeeGetProcAddress("glMultiDrawElementArrayAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiDrawRangeElementArrayAPPLE = (GLEEPFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) __GLeeGetProcAddress("glMultiDrawRangeElementArrayAPPLE"))!=0) nLinked++; #endif if (nLinked==5) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_APPLE_fence(void) { GLint nLinked=0; #ifdef __GLEE_GL_APPLE_fence if ((GLeeFuncPtr_glGenFencesAPPLE = (GLEEPFNGLGENFENCESAPPLEPROC) __GLeeGetProcAddress("glGenFencesAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteFencesAPPLE = (GLEEPFNGLDELETEFENCESAPPLEPROC) __GLeeGetProcAddress("glDeleteFencesAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glSetFenceAPPLE = (GLEEPFNGLSETFENCEAPPLEPROC) __GLeeGetProcAddress("glSetFenceAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glIsFenceAPPLE = (GLEEPFNGLISFENCEAPPLEPROC) __GLeeGetProcAddress("glIsFenceAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glTestFenceAPPLE = (GLEEPFNGLTESTFENCEAPPLEPROC) __GLeeGetProcAddress("glTestFenceAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glFinishFenceAPPLE = (GLEEPFNGLFINISHFENCEAPPLEPROC) __GLeeGetProcAddress("glFinishFenceAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glTestObjectAPPLE = (GLEEPFNGLTESTOBJECTAPPLEPROC) __GLeeGetProcAddress("glTestObjectAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glFinishObjectAPPLE = (GLEEPFNGLFINISHOBJECTAPPLEPROC) __GLeeGetProcAddress("glFinishObjectAPPLE"))!=0) nLinked++; #endif if (nLinked==8) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_APPLE_vertex_array_object(void) { GLint nLinked=0; #ifdef __GLEE_GL_APPLE_vertex_array_object if ((GLeeFuncPtr_glBindVertexArrayAPPLE = (GLEEPFNGLBINDVERTEXARRAYAPPLEPROC) __GLeeGetProcAddress("glBindVertexArrayAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteVertexArraysAPPLE = (GLEEPFNGLDELETEVERTEXARRAYSAPPLEPROC) __GLeeGetProcAddress("glDeleteVertexArraysAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glGenVertexArraysAPPLE = (GLEEPFNGLGENVERTEXARRAYSAPPLEPROC) __GLeeGetProcAddress("glGenVertexArraysAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glIsVertexArrayAPPLE = (GLEEPFNGLISVERTEXARRAYAPPLEPROC) __GLeeGetProcAddress("glIsVertexArrayAPPLE"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_APPLE_vertex_array_range(void) { GLint nLinked=0; #ifdef __GLEE_GL_APPLE_vertex_array_range if ((GLeeFuncPtr_glVertexArrayRangeAPPLE = (GLEEPFNGLVERTEXARRAYRANGEAPPLEPROC) __GLeeGetProcAddress("glVertexArrayRangeAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glFlushVertexArrayRangeAPPLE = (GLEEPFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) __GLeeGetProcAddress("glFlushVertexArrayRangeAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexArrayParameteriAPPLE = (GLEEPFNGLVERTEXARRAYPARAMETERIAPPLEPROC) __GLeeGetProcAddress("glVertexArrayParameteriAPPLE"))!=0) nLinked++; #endif if (nLinked==3) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_APPLE_ycbcr_422(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_S3_s3tc(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ATI_draw_buffers(void) { GLint nLinked=0; #ifdef __GLEE_GL_ATI_draw_buffers if ((GLeeFuncPtr_glDrawBuffersATI = (GLEEPFNGLDRAWBUFFERSATIPROC) __GLeeGetProcAddress("glDrawBuffersATI"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ATI_pixel_format_float(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ATI_texture_env_combine3(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ATI_texture_float(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_float_buffer(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_fragment_program(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_fragment_program if ((GLeeFuncPtr_glProgramNamedParameter4fNV = (GLEEPFNGLPROGRAMNAMEDPARAMETER4FNVPROC) __GLeeGetProcAddress("glProgramNamedParameter4fNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramNamedParameter4fvNV = (GLEEPFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) __GLeeGetProcAddress("glProgramNamedParameter4fvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramNamedParameter4dNV = (GLEEPFNGLPROGRAMNAMEDPARAMETER4DNVPROC) __GLeeGetProcAddress("glProgramNamedParameter4dNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramNamedParameter4dvNV = (GLEEPFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) __GLeeGetProcAddress("glProgramNamedParameter4dvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramNamedParameterfvNV = (GLEEPFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) __GLeeGetProcAddress("glGetProgramNamedParameterfvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramNamedParameterdvNV = (GLEEPFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) __GLeeGetProcAddress("glGetProgramNamedParameterdvNV"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_half_float(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_half_float if ((GLeeFuncPtr_glVertex2hNV = (GLEEPFNGLVERTEX2HNVPROC) __GLeeGetProcAddress("glVertex2hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertex2hvNV = (GLEEPFNGLVERTEX2HVNVPROC) __GLeeGetProcAddress("glVertex2hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertex3hNV = (GLEEPFNGLVERTEX3HNVPROC) __GLeeGetProcAddress("glVertex3hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertex3hvNV = (GLEEPFNGLVERTEX3HVNVPROC) __GLeeGetProcAddress("glVertex3hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertex4hNV = (GLEEPFNGLVERTEX4HNVPROC) __GLeeGetProcAddress("glVertex4hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertex4hvNV = (GLEEPFNGLVERTEX4HVNVPROC) __GLeeGetProcAddress("glVertex4hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glNormal3hNV = (GLEEPFNGLNORMAL3HNVPROC) __GLeeGetProcAddress("glNormal3hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glNormal3hvNV = (GLEEPFNGLNORMAL3HVNVPROC) __GLeeGetProcAddress("glNormal3hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glColor3hNV = (GLEEPFNGLCOLOR3HNVPROC) __GLeeGetProcAddress("glColor3hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glColor3hvNV = (GLEEPFNGLCOLOR3HVNVPROC) __GLeeGetProcAddress("glColor3hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glColor4hNV = (GLEEPFNGLCOLOR4HNVPROC) __GLeeGetProcAddress("glColor4hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glColor4hvNV = (GLEEPFNGLCOLOR4HVNVPROC) __GLeeGetProcAddress("glColor4hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord1hNV = (GLEEPFNGLTEXCOORD1HNVPROC) __GLeeGetProcAddress("glTexCoord1hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord1hvNV = (GLEEPFNGLTEXCOORD1HVNVPROC) __GLeeGetProcAddress("glTexCoord1hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord2hNV = (GLEEPFNGLTEXCOORD2HNVPROC) __GLeeGetProcAddress("glTexCoord2hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord2hvNV = (GLEEPFNGLTEXCOORD2HVNVPROC) __GLeeGetProcAddress("glTexCoord2hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord3hNV = (GLEEPFNGLTEXCOORD3HNVPROC) __GLeeGetProcAddress("glTexCoord3hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord3hvNV = (GLEEPFNGLTEXCOORD3HVNVPROC) __GLeeGetProcAddress("glTexCoord3hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord4hNV = (GLEEPFNGLTEXCOORD4HNVPROC) __GLeeGetProcAddress("glTexCoord4hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord4hvNV = (GLEEPFNGLTEXCOORD4HVNVPROC) __GLeeGetProcAddress("glTexCoord4hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1hNV = (GLEEPFNGLMULTITEXCOORD1HNVPROC) __GLeeGetProcAddress("glMultiTexCoord1hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1hvNV = (GLEEPFNGLMULTITEXCOORD1HVNVPROC) __GLeeGetProcAddress("glMultiTexCoord1hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2hNV = (GLEEPFNGLMULTITEXCOORD2HNVPROC) __GLeeGetProcAddress("glMultiTexCoord2hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2hvNV = (GLEEPFNGLMULTITEXCOORD2HVNVPROC) __GLeeGetProcAddress("glMultiTexCoord2hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3hNV = (GLEEPFNGLMULTITEXCOORD3HNVPROC) __GLeeGetProcAddress("glMultiTexCoord3hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3hvNV = (GLEEPFNGLMULTITEXCOORD3HVNVPROC) __GLeeGetProcAddress("glMultiTexCoord3hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4hNV = (GLEEPFNGLMULTITEXCOORD4HNVPROC) __GLeeGetProcAddress("glMultiTexCoord4hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4hvNV = (GLEEPFNGLMULTITEXCOORD4HVNVPROC) __GLeeGetProcAddress("glMultiTexCoord4hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glFogCoordhNV = (GLEEPFNGLFOGCOORDHNVPROC) __GLeeGetProcAddress("glFogCoordhNV"))!=0) nLinked++; if ((GLeeFuncPtr_glFogCoordhvNV = (GLEEPFNGLFOGCOORDHVNVPROC) __GLeeGetProcAddress("glFogCoordhvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3hNV = (GLEEPFNGLSECONDARYCOLOR3HNVPROC) __GLeeGetProcAddress("glSecondaryColor3hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3hvNV = (GLEEPFNGLSECONDARYCOLOR3HVNVPROC) __GLeeGetProcAddress("glSecondaryColor3hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexWeighthNV = (GLEEPFNGLVERTEXWEIGHTHNVPROC) __GLeeGetProcAddress("glVertexWeighthNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexWeighthvNV = (GLEEPFNGLVERTEXWEIGHTHVNVPROC) __GLeeGetProcAddress("glVertexWeighthvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1hNV = (GLEEPFNGLVERTEXATTRIB1HNVPROC) __GLeeGetProcAddress("glVertexAttrib1hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1hvNV = (GLEEPFNGLVERTEXATTRIB1HVNVPROC) __GLeeGetProcAddress("glVertexAttrib1hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2hNV = (GLEEPFNGLVERTEXATTRIB2HNVPROC) __GLeeGetProcAddress("glVertexAttrib2hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2hvNV = (GLEEPFNGLVERTEXATTRIB2HVNVPROC) __GLeeGetProcAddress("glVertexAttrib2hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3hNV = (GLEEPFNGLVERTEXATTRIB3HNVPROC) __GLeeGetProcAddress("glVertexAttrib3hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3hvNV = (GLEEPFNGLVERTEXATTRIB3HVNVPROC) __GLeeGetProcAddress("glVertexAttrib3hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4hNV = (GLEEPFNGLVERTEXATTRIB4HNVPROC) __GLeeGetProcAddress("glVertexAttrib4hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4hvNV = (GLEEPFNGLVERTEXATTRIB4HVNVPROC) __GLeeGetProcAddress("glVertexAttrib4hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribs1hvNV = (GLEEPFNGLVERTEXATTRIBS1HVNVPROC) __GLeeGetProcAddress("glVertexAttribs1hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribs2hvNV = (GLEEPFNGLVERTEXATTRIBS2HVNVPROC) __GLeeGetProcAddress("glVertexAttribs2hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribs3hvNV = (GLEEPFNGLVERTEXATTRIBS3HVNVPROC) __GLeeGetProcAddress("glVertexAttribs3hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribs4hvNV = (GLEEPFNGLVERTEXATTRIBS4HVNVPROC) __GLeeGetProcAddress("glVertexAttribs4hvNV"))!=0) nLinked++; #endif if (nLinked==46) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_pixel_data_range(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_pixel_data_range if ((GLeeFuncPtr_glPixelDataRangeNV = (GLEEPFNGLPIXELDATARANGENVPROC) __GLeeGetProcAddress("glPixelDataRangeNV"))!=0) nLinked++; if ((GLeeFuncPtr_glFlushPixelDataRangeNV = (GLEEPFNGLFLUSHPIXELDATARANGENVPROC) __GLeeGetProcAddress("glFlushPixelDataRangeNV"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_primitive_restart(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_primitive_restart if ((GLeeFuncPtr_glPrimitiveRestartNV = (GLEEPFNGLPRIMITIVERESTARTNVPROC) __GLeeGetProcAddress("glPrimitiveRestartNV"))!=0) nLinked++; if ((GLeeFuncPtr_glPrimitiveRestartIndexNV = (GLEEPFNGLPRIMITIVERESTARTINDEXNVPROC) __GLeeGetProcAddress("glPrimitiveRestartIndexNV"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_texture_expand_normal(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_vertex_program2(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ATI_map_object_buffer(void) { GLint nLinked=0; #ifdef __GLEE_GL_ATI_map_object_buffer if ((GLeeFuncPtr_glMapObjectBufferATI = (GLEEPFNGLMAPOBJECTBUFFERATIPROC) __GLeeGetProcAddress("glMapObjectBufferATI"))!=0) nLinked++; if ((GLeeFuncPtr_glUnmapObjectBufferATI = (GLEEPFNGLUNMAPOBJECTBUFFERATIPROC) __GLeeGetProcAddress("glUnmapObjectBufferATI"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ATI_separate_stencil(void) { GLint nLinked=0; #ifdef __GLEE_GL_ATI_separate_stencil if ((GLeeFuncPtr_glStencilOpSeparateATI = (GLEEPFNGLSTENCILOPSEPARATEATIPROC) __GLeeGetProcAddress("glStencilOpSeparateATI"))!=0) nLinked++; if ((GLeeFuncPtr_glStencilFuncSeparateATI = (GLEEPFNGLSTENCILFUNCSEPARATEATIPROC) __GLeeGetProcAddress("glStencilFuncSeparateATI"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ATI_vertex_attrib_array_object(void) { GLint nLinked=0; #ifdef __GLEE_GL_ATI_vertex_attrib_array_object if ((GLeeFuncPtr_glVertexAttribArrayObjectATI = (GLEEPFNGLVERTEXATTRIBARRAYOBJECTATIPROC) __GLeeGetProcAddress("glVertexAttribArrayObjectATI"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribArrayObjectfvATI = (GLEEPFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) __GLeeGetProcAddress("glGetVertexAttribArrayObjectfvATI"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribArrayObjectivATI = (GLEEPFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) __GLeeGetProcAddress("glGetVertexAttribArrayObjectivATI"))!=0) nLinked++; #endif if (nLinked==3) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_OES_byte_coordinates(void) { GLint nLinked=0; #ifdef __GLEE_GL_OES_byte_coordinates if ((GLeeFuncPtr_glMultiTexCoord1bOES = (GLEEPFNGLMULTITEXCOORD1BOESPROC) __GLeeGetProcAddress("glMultiTexCoord1bOES"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1bvOES = (GLEEPFNGLMULTITEXCOORD1BVOESPROC) __GLeeGetProcAddress("glMultiTexCoord1bvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2bOES = (GLEEPFNGLMULTITEXCOORD2BOESPROC) __GLeeGetProcAddress("glMultiTexCoord2bOES"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2bvOES = (GLEEPFNGLMULTITEXCOORD2BVOESPROC) __GLeeGetProcAddress("glMultiTexCoord2bvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3bOES = (GLEEPFNGLMULTITEXCOORD3BOESPROC) __GLeeGetProcAddress("glMultiTexCoord3bOES"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3bvOES = (GLEEPFNGLMULTITEXCOORD3BVOESPROC) __GLeeGetProcAddress("glMultiTexCoord3bvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4bOES = (GLEEPFNGLMULTITEXCOORD4BOESPROC) __GLeeGetProcAddress("glMultiTexCoord4bOES"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4bvOES = (GLEEPFNGLMULTITEXCOORD4BVOESPROC) __GLeeGetProcAddress("glMultiTexCoord4bvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord1bOES = (GLEEPFNGLTEXCOORD1BOESPROC) __GLeeGetProcAddress("glTexCoord1bOES"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord1bvOES = (GLEEPFNGLTEXCOORD1BVOESPROC) __GLeeGetProcAddress("glTexCoord1bvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord2bOES = (GLEEPFNGLTEXCOORD2BOESPROC) __GLeeGetProcAddress("glTexCoord2bOES"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord2bvOES = (GLEEPFNGLTEXCOORD2BVOESPROC) __GLeeGetProcAddress("glTexCoord2bvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord3bOES = (GLEEPFNGLTEXCOORD3BOESPROC) __GLeeGetProcAddress("glTexCoord3bOES"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord3bvOES = (GLEEPFNGLTEXCOORD3BVOESPROC) __GLeeGetProcAddress("glTexCoord3bvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord4bOES = (GLEEPFNGLTEXCOORD4BOESPROC) __GLeeGetProcAddress("glTexCoord4bOES"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord4bvOES = (GLEEPFNGLTEXCOORD4BVOESPROC) __GLeeGetProcAddress("glTexCoord4bvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glVertex2bOES = (GLEEPFNGLVERTEX2BOESPROC) __GLeeGetProcAddress("glVertex2bOES"))!=0) nLinked++; if ((GLeeFuncPtr_glVertex2bvOES = (GLEEPFNGLVERTEX2BVOESPROC) __GLeeGetProcAddress("glVertex2bvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glVertex3bOES = (GLEEPFNGLVERTEX3BOESPROC) __GLeeGetProcAddress("glVertex3bOES"))!=0) nLinked++; if ((GLeeFuncPtr_glVertex3bvOES = (GLEEPFNGLVERTEX3BVOESPROC) __GLeeGetProcAddress("glVertex3bvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glVertex4bOES = (GLEEPFNGLVERTEX4BOESPROC) __GLeeGetProcAddress("glVertex4bOES"))!=0) nLinked++; if ((GLeeFuncPtr_glVertex4bvOES = (GLEEPFNGLVERTEX4BVOESPROC) __GLeeGetProcAddress("glVertex4bvOES"))!=0) nLinked++; #endif if (nLinked==22) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_OES_fixed_point(void) { GLint nLinked=0; #ifdef __GLEE_GL_OES_fixed_point if ((GLeeFuncPtr_glAccumxOES = (GLEEPFNGLACCUMXOESPROC) __GLeeGetProcAddress("glAccumxOES"))!=0) nLinked++; if ((GLeeFuncPtr_glAlphaFuncxOES = (GLEEPFNGLALPHAFUNCXOESPROC) __GLeeGetProcAddress("glAlphaFuncxOES"))!=0) nLinked++; if ((GLeeFuncPtr_glBitmapxOES = (GLEEPFNGLBITMAPXOESPROC) __GLeeGetProcAddress("glBitmapxOES"))!=0) nLinked++; if ((GLeeFuncPtr_glBlendColorxOES = (GLEEPFNGLBLENDCOLORXOESPROC) __GLeeGetProcAddress("glBlendColorxOES"))!=0) nLinked++; if ((GLeeFuncPtr_glClearAccumxOES = (GLEEPFNGLCLEARACCUMXOESPROC) __GLeeGetProcAddress("glClearAccumxOES"))!=0) nLinked++; if ((GLeeFuncPtr_glClearColorxOES = (GLEEPFNGLCLEARCOLORXOESPROC) __GLeeGetProcAddress("glClearColorxOES"))!=0) nLinked++; if ((GLeeFuncPtr_glClearDepthxOES = (GLEEPFNGLCLEARDEPTHXOESPROC) __GLeeGetProcAddress("glClearDepthxOES"))!=0) nLinked++; if ((GLeeFuncPtr_glClipPlanexOES = (GLEEPFNGLCLIPPLANEXOESPROC) __GLeeGetProcAddress("glClipPlanexOES"))!=0) nLinked++; if ((GLeeFuncPtr_glColor3xOES = (GLEEPFNGLCOLOR3XOESPROC) __GLeeGetProcAddress("glColor3xOES"))!=0) nLinked++; if ((GLeeFuncPtr_glColor4xOES = (GLEEPFNGLCOLOR4XOESPROC) __GLeeGetProcAddress("glColor4xOES"))!=0) nLinked++; if ((GLeeFuncPtr_glColor3xvOES = (GLEEPFNGLCOLOR3XVOESPROC) __GLeeGetProcAddress("glColor3xvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glColor4xvOES = (GLEEPFNGLCOLOR4XVOESPROC) __GLeeGetProcAddress("glColor4xvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glConvolutionParameterxOES = (GLEEPFNGLCONVOLUTIONPARAMETERXOESPROC) __GLeeGetProcAddress("glConvolutionParameterxOES"))!=0) nLinked++; if ((GLeeFuncPtr_glConvolutionParameterxvOES = (GLEEPFNGLCONVOLUTIONPARAMETERXVOESPROC) __GLeeGetProcAddress("glConvolutionParameterxvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glDepthRangexOES = (GLEEPFNGLDEPTHRANGEXOESPROC) __GLeeGetProcAddress("glDepthRangexOES"))!=0) nLinked++; if ((GLeeFuncPtr_glEvalCoord1xOES = (GLEEPFNGLEVALCOORD1XOESPROC) __GLeeGetProcAddress("glEvalCoord1xOES"))!=0) nLinked++; if ((GLeeFuncPtr_glEvalCoord2xOES = (GLEEPFNGLEVALCOORD2XOESPROC) __GLeeGetProcAddress("glEvalCoord2xOES"))!=0) nLinked++; if ((GLeeFuncPtr_glEvalCoord1xvOES = (GLEEPFNGLEVALCOORD1XVOESPROC) __GLeeGetProcAddress("glEvalCoord1xvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glEvalCoord2xvOES = (GLEEPFNGLEVALCOORD2XVOESPROC) __GLeeGetProcAddress("glEvalCoord2xvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glFeedbackBufferxOES = (GLEEPFNGLFEEDBACKBUFFERXOESPROC) __GLeeGetProcAddress("glFeedbackBufferxOES"))!=0) nLinked++; if ((GLeeFuncPtr_glFogxOES = (GLEEPFNGLFOGXOESPROC) __GLeeGetProcAddress("glFogxOES"))!=0) nLinked++; if ((GLeeFuncPtr_glFogxvOES = (GLEEPFNGLFOGXVOESPROC) __GLeeGetProcAddress("glFogxvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glFrustumxOES = (GLEEPFNGLFRUSTUMXOESPROC) __GLeeGetProcAddress("glFrustumxOES"))!=0) nLinked++; if ((GLeeFuncPtr_glGetClipPlanexOES = (GLEEPFNGLGETCLIPPLANEXOESPROC) __GLeeGetProcAddress("glGetClipPlanexOES"))!=0) nLinked++; if ((GLeeFuncPtr_glGetConvolutionParameterxvOES = (GLEEPFNGLGETCONVOLUTIONPARAMETERXVOESPROC) __GLeeGetProcAddress("glGetConvolutionParameterxvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glGetFixedvOES = (GLEEPFNGLGETFIXEDVOESPROC) __GLeeGetProcAddress("glGetFixedvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glGetHistogramParameterxvOES = (GLEEPFNGLGETHISTOGRAMPARAMETERXVOESPROC) __GLeeGetProcAddress("glGetHistogramParameterxvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glGetLightxOES = (GLEEPFNGLGETLIGHTXOESPROC) __GLeeGetProcAddress("glGetLightxOES"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMapxvOES = (GLEEPFNGLGETMAPXVOESPROC) __GLeeGetProcAddress("glGetMapxvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMaterialxOES = (GLEEPFNGLGETMATERIALXOESPROC) __GLeeGetProcAddress("glGetMaterialxOES"))!=0) nLinked++; if ((GLeeFuncPtr_glGetPixelMapxv = (GLEEPFNGLGETPIXELMAPXVPROC) __GLeeGetProcAddress("glGetPixelMapxv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTexEnvxvOES = (GLEEPFNGLGETTEXENVXVOESPROC) __GLeeGetProcAddress("glGetTexEnvxvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTexGenxvOES = (GLEEPFNGLGETTEXGENXVOESPROC) __GLeeGetProcAddress("glGetTexGenxvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTexLevelParameterxvOES = (GLEEPFNGLGETTEXLEVELPARAMETERXVOESPROC) __GLeeGetProcAddress("glGetTexLevelParameterxvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTexParameterxvOES = (GLEEPFNGLGETTEXPARAMETERXVOESPROC) __GLeeGetProcAddress("glGetTexParameterxvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glIndexxOES = (GLEEPFNGLINDEXXOESPROC) __GLeeGetProcAddress("glIndexxOES"))!=0) nLinked++; if ((GLeeFuncPtr_glIndexxvOES = (GLEEPFNGLINDEXXVOESPROC) __GLeeGetProcAddress("glIndexxvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glLightModelxOES = (GLEEPFNGLLIGHTMODELXOESPROC) __GLeeGetProcAddress("glLightModelxOES"))!=0) nLinked++; if ((GLeeFuncPtr_glLightModelxvOES = (GLEEPFNGLLIGHTMODELXVOESPROC) __GLeeGetProcAddress("glLightModelxvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glLightxOES = (GLEEPFNGLLIGHTXOESPROC) __GLeeGetProcAddress("glLightxOES"))!=0) nLinked++; if ((GLeeFuncPtr_glLightxvOES = (GLEEPFNGLLIGHTXVOESPROC) __GLeeGetProcAddress("glLightxvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glLineWidthxOES = (GLEEPFNGLLINEWIDTHXOESPROC) __GLeeGetProcAddress("glLineWidthxOES"))!=0) nLinked++; if ((GLeeFuncPtr_glLoadMatrixxOES = (GLEEPFNGLLOADMATRIXXOESPROC) __GLeeGetProcAddress("glLoadMatrixxOES"))!=0) nLinked++; if ((GLeeFuncPtr_glLoadTransposeMatrixxOES = (GLEEPFNGLLOADTRANSPOSEMATRIXXOESPROC) __GLeeGetProcAddress("glLoadTransposeMatrixxOES"))!=0) nLinked++; if ((GLeeFuncPtr_glMap1xOES = (GLEEPFNGLMAP1XOESPROC) __GLeeGetProcAddress("glMap1xOES"))!=0) nLinked++; if ((GLeeFuncPtr_glMap2xOES = (GLEEPFNGLMAP2XOESPROC) __GLeeGetProcAddress("glMap2xOES"))!=0) nLinked++; if ((GLeeFuncPtr_glMapGrid1xOES = (GLEEPFNGLMAPGRID1XOESPROC) __GLeeGetProcAddress("glMapGrid1xOES"))!=0) nLinked++; if ((GLeeFuncPtr_glMapGrid2xOES = (GLEEPFNGLMAPGRID2XOESPROC) __GLeeGetProcAddress("glMapGrid2xOES"))!=0) nLinked++; if ((GLeeFuncPtr_glMaterialxOES = (GLEEPFNGLMATERIALXOESPROC) __GLeeGetProcAddress("glMaterialxOES"))!=0) nLinked++; if ((GLeeFuncPtr_glMaterialxvOES = (GLEEPFNGLMATERIALXVOESPROC) __GLeeGetProcAddress("glMaterialxvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glMultMatrixxOES = (GLEEPFNGLMULTMATRIXXOESPROC) __GLeeGetProcAddress("glMultMatrixxOES"))!=0) nLinked++; if ((GLeeFuncPtr_glMultTransposeMatrixxOES = (GLEEPFNGLMULTTRANSPOSEMATRIXXOESPROC) __GLeeGetProcAddress("glMultTransposeMatrixxOES"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1xOES = (GLEEPFNGLMULTITEXCOORD1XOESPROC) __GLeeGetProcAddress("glMultiTexCoord1xOES"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2xOES = (GLEEPFNGLMULTITEXCOORD2XOESPROC) __GLeeGetProcAddress("glMultiTexCoord2xOES"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3xOES = (GLEEPFNGLMULTITEXCOORD3XOESPROC) __GLeeGetProcAddress("glMultiTexCoord3xOES"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4xOES = (GLEEPFNGLMULTITEXCOORD4XOESPROC) __GLeeGetProcAddress("glMultiTexCoord4xOES"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1xvOES = (GLEEPFNGLMULTITEXCOORD1XVOESPROC) __GLeeGetProcAddress("glMultiTexCoord1xvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2xvOES = (GLEEPFNGLMULTITEXCOORD2XVOESPROC) __GLeeGetProcAddress("glMultiTexCoord2xvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3xvOES = (GLEEPFNGLMULTITEXCOORD3XVOESPROC) __GLeeGetProcAddress("glMultiTexCoord3xvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4xvOES = (GLEEPFNGLMULTITEXCOORD4XVOESPROC) __GLeeGetProcAddress("glMultiTexCoord4xvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glNormal3xOES = (GLEEPFNGLNORMAL3XOESPROC) __GLeeGetProcAddress("glNormal3xOES"))!=0) nLinked++; if ((GLeeFuncPtr_glNormal3xvOES = (GLEEPFNGLNORMAL3XVOESPROC) __GLeeGetProcAddress("glNormal3xvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glOrthoxOES = (GLEEPFNGLORTHOXOESPROC) __GLeeGetProcAddress("glOrthoxOES"))!=0) nLinked++; if ((GLeeFuncPtr_glPassThroughxOES = (GLEEPFNGLPASSTHROUGHXOESPROC) __GLeeGetProcAddress("glPassThroughxOES"))!=0) nLinked++; if ((GLeeFuncPtr_glPixelMapx = (GLEEPFNGLPIXELMAPXPROC) __GLeeGetProcAddress("glPixelMapx"))!=0) nLinked++; if ((GLeeFuncPtr_glPixelStorex = (GLEEPFNGLPIXELSTOREXPROC) __GLeeGetProcAddress("glPixelStorex"))!=0) nLinked++; if ((GLeeFuncPtr_glPixelTransferxOES = (GLEEPFNGLPIXELTRANSFERXOESPROC) __GLeeGetProcAddress("glPixelTransferxOES"))!=0) nLinked++; if ((GLeeFuncPtr_glPixelZoomxOES = (GLEEPFNGLPIXELZOOMXOESPROC) __GLeeGetProcAddress("glPixelZoomxOES"))!=0) nLinked++; if ((GLeeFuncPtr_glPointParameterxvOES = (GLEEPFNGLPOINTPARAMETERXVOESPROC) __GLeeGetProcAddress("glPointParameterxvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glPointSizexOES = (GLEEPFNGLPOINTSIZEXOESPROC) __GLeeGetProcAddress("glPointSizexOES"))!=0) nLinked++; if ((GLeeFuncPtr_glPolygonOffsetxOES = (GLEEPFNGLPOLYGONOFFSETXOESPROC) __GLeeGetProcAddress("glPolygonOffsetxOES"))!=0) nLinked++; if ((GLeeFuncPtr_glPrioritizeTexturesxOES = (GLEEPFNGLPRIORITIZETEXTURESXOESPROC) __GLeeGetProcAddress("glPrioritizeTexturesxOES"))!=0) nLinked++; if ((GLeeFuncPtr_glRasterPos2xOES = (GLEEPFNGLRASTERPOS2XOESPROC) __GLeeGetProcAddress("glRasterPos2xOES"))!=0) nLinked++; if ((GLeeFuncPtr_glRasterPos3xOES = (GLEEPFNGLRASTERPOS3XOESPROC) __GLeeGetProcAddress("glRasterPos3xOES"))!=0) nLinked++; if ((GLeeFuncPtr_glRasterPos4xOES = (GLEEPFNGLRASTERPOS4XOESPROC) __GLeeGetProcAddress("glRasterPos4xOES"))!=0) nLinked++; if ((GLeeFuncPtr_glRasterPos2xvOES = (GLEEPFNGLRASTERPOS2XVOESPROC) __GLeeGetProcAddress("glRasterPos2xvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glRasterPos3xvOES = (GLEEPFNGLRASTERPOS3XVOESPROC) __GLeeGetProcAddress("glRasterPos3xvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glRasterPos4xvOES = (GLEEPFNGLRASTERPOS4XVOESPROC) __GLeeGetProcAddress("glRasterPos4xvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glRectxOES = (GLEEPFNGLRECTXOESPROC) __GLeeGetProcAddress("glRectxOES"))!=0) nLinked++; if ((GLeeFuncPtr_glRectxvOES = (GLEEPFNGLRECTXVOESPROC) __GLeeGetProcAddress("glRectxvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glRotatexOES = (GLEEPFNGLROTATEXOESPROC) __GLeeGetProcAddress("glRotatexOES"))!=0) nLinked++; if ((GLeeFuncPtr_glSampleCoverageOES = (GLEEPFNGLSAMPLECOVERAGEOESPROC) __GLeeGetProcAddress("glSampleCoverageOES"))!=0) nLinked++; if ((GLeeFuncPtr_glScalexOES = (GLEEPFNGLSCALEXOESPROC) __GLeeGetProcAddress("glScalexOES"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord1xOES = (GLEEPFNGLTEXCOORD1XOESPROC) __GLeeGetProcAddress("glTexCoord1xOES"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord2xOES = (GLEEPFNGLTEXCOORD2XOESPROC) __GLeeGetProcAddress("glTexCoord2xOES"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord3xOES = (GLEEPFNGLTEXCOORD3XOESPROC) __GLeeGetProcAddress("glTexCoord3xOES"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord4xOES = (GLEEPFNGLTEXCOORD4XOESPROC) __GLeeGetProcAddress("glTexCoord4xOES"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord1xvOES = (GLEEPFNGLTEXCOORD1XVOESPROC) __GLeeGetProcAddress("glTexCoord1xvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord2xvOES = (GLEEPFNGLTEXCOORD2XVOESPROC) __GLeeGetProcAddress("glTexCoord2xvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord3xvOES = (GLEEPFNGLTEXCOORD3XVOESPROC) __GLeeGetProcAddress("glTexCoord3xvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord4xvOES = (GLEEPFNGLTEXCOORD4XVOESPROC) __GLeeGetProcAddress("glTexCoord4xvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glTexEnvxOES = (GLEEPFNGLTEXENVXOESPROC) __GLeeGetProcAddress("glTexEnvxOES"))!=0) nLinked++; if ((GLeeFuncPtr_glTexEnvxvOES = (GLEEPFNGLTEXENVXVOESPROC) __GLeeGetProcAddress("glTexEnvxvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glTexGenxOES = (GLEEPFNGLTEXGENXOESPROC) __GLeeGetProcAddress("glTexGenxOES"))!=0) nLinked++; if ((GLeeFuncPtr_glTexGenxvOES = (GLEEPFNGLTEXGENXVOESPROC) __GLeeGetProcAddress("glTexGenxvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glTexParameterxOES = (GLEEPFNGLTEXPARAMETERXOESPROC) __GLeeGetProcAddress("glTexParameterxOES"))!=0) nLinked++; if ((GLeeFuncPtr_glTexParameterxvOES = (GLEEPFNGLTEXPARAMETERXVOESPROC) __GLeeGetProcAddress("glTexParameterxvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glTranslatexOES = (GLEEPFNGLTRANSLATEXOESPROC) __GLeeGetProcAddress("glTranslatexOES"))!=0) nLinked++; if ((GLeeFuncPtr_glVertex2xOES = (GLEEPFNGLVERTEX2XOESPROC) __GLeeGetProcAddress("glVertex2xOES"))!=0) nLinked++; if ((GLeeFuncPtr_glVertex3xOES = (GLEEPFNGLVERTEX3XOESPROC) __GLeeGetProcAddress("glVertex3xOES"))!=0) nLinked++; if ((GLeeFuncPtr_glVertex4xOES = (GLEEPFNGLVERTEX4XOESPROC) __GLeeGetProcAddress("glVertex4xOES"))!=0) nLinked++; if ((GLeeFuncPtr_glVertex2xvOES = (GLEEPFNGLVERTEX2XVOESPROC) __GLeeGetProcAddress("glVertex2xvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glVertex3xvOES = (GLEEPFNGLVERTEX3XVOESPROC) __GLeeGetProcAddress("glVertex3xvOES"))!=0) nLinked++; if ((GLeeFuncPtr_glVertex4xvOES = (GLEEPFNGLVERTEX4XVOESPROC) __GLeeGetProcAddress("glVertex4xvOES"))!=0) nLinked++; #endif if (nLinked==104) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_OES_single_precision(void) { GLint nLinked=0; #ifdef __GLEE_GL_OES_single_precision if ((GLeeFuncPtr_glDepthRangefOES = (GLEEPFNGLDEPTHRANGEFOESPROC) __GLeeGetProcAddress("glDepthRangefOES"))!=0) nLinked++; if ((GLeeFuncPtr_glFrustumfOES = (GLEEPFNGLFRUSTUMFOESPROC) __GLeeGetProcAddress("glFrustumfOES"))!=0) nLinked++; if ((GLeeFuncPtr_glOrthofOES = (GLEEPFNGLORTHOFOESPROC) __GLeeGetProcAddress("glOrthofOES"))!=0) nLinked++; if ((GLeeFuncPtr_glClipPlanefOES = (GLEEPFNGLCLIPPLANEFOESPROC) __GLeeGetProcAddress("glClipPlanefOES"))!=0) nLinked++; if ((GLeeFuncPtr_glClearDepthfOES = (GLEEPFNGLCLEARDEPTHFOESPROC) __GLeeGetProcAddress("glClearDepthfOES"))!=0) nLinked++; if ((GLeeFuncPtr_glGetClipPlanefOES = (GLEEPFNGLGETCLIPPLANEFOESPROC) __GLeeGetProcAddress("glGetClipPlanefOES"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_OES_compressed_paletted_texture(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_OES_read_format(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_OES_query_matrix(void) { GLint nLinked=0; #ifdef __GLEE_GL_OES_query_matrix if ((GLeeFuncPtr_glQueryMatrixxOES = (GLEEPFNGLQUERYMATRIXXOESPROC) __GLeeGetProcAddress("glQueryMatrixxOES"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_depth_bounds_test(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_depth_bounds_test if ((GLeeFuncPtr_glDepthBoundsEXT = (GLEEPFNGLDEPTHBOUNDSEXTPROC) __GLeeGetProcAddress("glDepthBoundsEXT"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_texture_mirror_clamp(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_blend_equation_separate(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_blend_equation_separate if ((GLeeFuncPtr_glBlendEquationSeparateEXT = (GLEEPFNGLBLENDEQUATIONSEPARATEEXTPROC) __GLeeGetProcAddress("glBlendEquationSeparateEXT"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_MESA_pack_invert(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_MESA_ycbcr_texture(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_pixel_buffer_object(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_fragment_program_option(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_fragment_program2(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_vertex_program2_option(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_vertex_program3(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_framebuffer_object(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_framebuffer_object if ((GLeeFuncPtr_glIsRenderbufferEXT = (GLEEPFNGLISRENDERBUFFEREXTPROC) __GLeeGetProcAddress("glIsRenderbufferEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBindRenderbufferEXT = (GLEEPFNGLBINDRENDERBUFFEREXTPROC) __GLeeGetProcAddress("glBindRenderbufferEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteRenderbuffersEXT = (GLEEPFNGLDELETERENDERBUFFERSEXTPROC) __GLeeGetProcAddress("glDeleteRenderbuffersEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGenRenderbuffersEXT = (GLEEPFNGLGENRENDERBUFFERSEXTPROC) __GLeeGetProcAddress("glGenRenderbuffersEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glRenderbufferStorageEXT = (GLEEPFNGLRENDERBUFFERSTORAGEEXTPROC) __GLeeGetProcAddress("glRenderbufferStorageEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetRenderbufferParameterivEXT = (GLEEPFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) __GLeeGetProcAddress("glGetRenderbufferParameterivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glIsFramebufferEXT = (GLEEPFNGLISFRAMEBUFFEREXTPROC) __GLeeGetProcAddress("glIsFramebufferEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBindFramebufferEXT = (GLEEPFNGLBINDFRAMEBUFFEREXTPROC) __GLeeGetProcAddress("glBindFramebufferEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteFramebuffersEXT = (GLEEPFNGLDELETEFRAMEBUFFERSEXTPROC) __GLeeGetProcAddress("glDeleteFramebuffersEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGenFramebuffersEXT = (GLEEPFNGLGENFRAMEBUFFERSEXTPROC) __GLeeGetProcAddress("glGenFramebuffersEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCheckFramebufferStatusEXT = (GLEEPFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) __GLeeGetProcAddress("glCheckFramebufferStatusEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFramebufferTexture1DEXT = (GLEEPFNGLFRAMEBUFFERTEXTURE1DEXTPROC) __GLeeGetProcAddress("glFramebufferTexture1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFramebufferTexture2DEXT = (GLEEPFNGLFRAMEBUFFERTEXTURE2DEXTPROC) __GLeeGetProcAddress("glFramebufferTexture2DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFramebufferTexture3DEXT = (GLEEPFNGLFRAMEBUFFERTEXTURE3DEXTPROC) __GLeeGetProcAddress("glFramebufferTexture3DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFramebufferRenderbufferEXT = (GLEEPFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) __GLeeGetProcAddress("glFramebufferRenderbufferEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetFramebufferAttachmentParameterivEXT = (GLEEPFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) __GLeeGetProcAddress("glGetFramebufferAttachmentParameterivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGenerateMipmapEXT = (GLEEPFNGLGENERATEMIPMAPEXTPROC) __GLeeGetProcAddress("glGenerateMipmapEXT"))!=0) nLinked++; #endif if (nLinked==17) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_GREMEDY_string_marker(void) { GLint nLinked=0; #ifdef __GLEE_GL_GREMEDY_string_marker if ((GLeeFuncPtr_glStringMarkerGREMEDY = (GLEEPFNGLSTRINGMARKERGREMEDYPROC) __GLeeGetProcAddress("glStringMarkerGREMEDY"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_packed_depth_stencil(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_stencil_clear_tag(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_stencil_clear_tag if ((GLeeFuncPtr_glStencilClearTagEXT = (GLEEPFNGLSTENCILCLEARTAGEXTPROC) __GLeeGetProcAddress("glStencilClearTagEXT"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_texture_sRGB(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_framebuffer_blit(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_framebuffer_blit if ((GLeeFuncPtr_glBlitFramebufferEXT = (GLEEPFNGLBLITFRAMEBUFFEREXTPROC) __GLeeGetProcAddress("glBlitFramebufferEXT"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_framebuffer_multisample(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_framebuffer_multisample if ((GLeeFuncPtr_glRenderbufferStorageMultisampleEXT = (GLEEPFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) __GLeeGetProcAddress("glRenderbufferStorageMultisampleEXT"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_MESAX_texture_stack(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_timer_query(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_timer_query if ((GLeeFuncPtr_glGetQueryObjecti64vEXT = (GLEEPFNGLGETQUERYOBJECTI64VEXTPROC) __GLeeGetProcAddress("glGetQueryObjecti64vEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetQueryObjectui64vEXT = (GLEEPFNGLGETQUERYOBJECTUI64VEXTPROC) __GLeeGetProcAddress("glGetQueryObjectui64vEXT"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_gpu_program_parameters(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_gpu_program_parameters if ((GLeeFuncPtr_glProgramEnvParameters4fvEXT = (GLEEPFNGLPROGRAMENVPARAMETERS4FVEXTPROC) __GLeeGetProcAddress("glProgramEnvParameters4fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramLocalParameters4fvEXT = (GLEEPFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) __GLeeGetProcAddress("glProgramLocalParameters4fvEXT"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_APPLE_flush_buffer_range(void) { GLint nLinked=0; #ifdef __GLEE_GL_APPLE_flush_buffer_range if ((GLeeFuncPtr_glBufferParameteriAPPLE = (GLEEPFNGLBUFFERPARAMETERIAPPLEPROC) __GLeeGetProcAddress("glBufferParameteriAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glFlushMappedBufferRangeAPPLE = (GLEEPFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) __GLeeGetProcAddress("glFlushMappedBufferRangeAPPLE"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_gpu_shader4(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_gpu_shader4 if ((GLeeFuncPtr_glGetUniformuivEXT = (GLEEPFNGLGETUNIFORMUIVEXTPROC) __GLeeGetProcAddress("glGetUniformuivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBindFragDataLocationEXT = (GLEEPFNGLBINDFRAGDATALOCATIONEXTPROC) __GLeeGetProcAddress("glBindFragDataLocationEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetFragDataLocationEXT = (GLEEPFNGLGETFRAGDATALOCATIONEXTPROC) __GLeeGetProcAddress("glGetFragDataLocationEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform1uiEXT = (GLEEPFNGLUNIFORM1UIEXTPROC) __GLeeGetProcAddress("glUniform1uiEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform2uiEXT = (GLEEPFNGLUNIFORM2UIEXTPROC) __GLeeGetProcAddress("glUniform2uiEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform3uiEXT = (GLEEPFNGLUNIFORM3UIEXTPROC) __GLeeGetProcAddress("glUniform3uiEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform4uiEXT = (GLEEPFNGLUNIFORM4UIEXTPROC) __GLeeGetProcAddress("glUniform4uiEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform1uivEXT = (GLEEPFNGLUNIFORM1UIVEXTPROC) __GLeeGetProcAddress("glUniform1uivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform2uivEXT = (GLEEPFNGLUNIFORM2UIVEXTPROC) __GLeeGetProcAddress("glUniform2uivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform3uivEXT = (GLEEPFNGLUNIFORM3UIVEXTPROC) __GLeeGetProcAddress("glUniform3uivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform4uivEXT = (GLEEPFNGLUNIFORM4UIVEXTPROC) __GLeeGetProcAddress("glUniform4uivEXT"))!=0) nLinked++; #endif if (nLinked==11) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_draw_instanced(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_draw_instanced if ((GLeeFuncPtr_glDrawArraysInstancedEXT = (GLEEPFNGLDRAWARRAYSINSTANCEDEXTPROC) __GLeeGetProcAddress("glDrawArraysInstancedEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glDrawElementsInstancedEXT = (GLEEPFNGLDRAWELEMENTSINSTANCEDEXTPROC) __GLeeGetProcAddress("glDrawElementsInstancedEXT"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_packed_float(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_texture_array(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_texture_buffer_object(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_texture_buffer_object if ((GLeeFuncPtr_glTexBufferEXT = (GLEEPFNGLTEXBUFFEREXTPROC) __GLeeGetProcAddress("glTexBufferEXT"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_texture_compression_latc(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_texture_compression_rgtc(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_texture_shared_exponent(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_depth_buffer_float(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_depth_buffer_float if ((GLeeFuncPtr_glDepthRangedNV = (GLEEPFNGLDEPTHRANGEDNVPROC) __GLeeGetProcAddress("glDepthRangedNV"))!=0) nLinked++; if ((GLeeFuncPtr_glClearDepthdNV = (GLEEPFNGLCLEARDEPTHDNVPROC) __GLeeGetProcAddress("glClearDepthdNV"))!=0) nLinked++; if ((GLeeFuncPtr_glDepthBoundsdNV = (GLEEPFNGLDEPTHBOUNDSDNVPROC) __GLeeGetProcAddress("glDepthBoundsdNV"))!=0) nLinked++; #endif if (nLinked==3) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_framebuffer_multisample_coverage(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_framebuffer_multisample_coverage if ((GLeeFuncPtr_glRenderbufferStorageMultisampleCoverageNV = (GLEEPFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) __GLeeGetProcAddress("glRenderbufferStorageMultisampleCoverageNV"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_framebuffer_sRGB(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_geometry_shader4(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_parameter_buffer_object(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_parameter_buffer_object if ((GLeeFuncPtr_glProgramBufferParametersfvNV = (GLEEPFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) __GLeeGetProcAddress("glProgramBufferParametersfvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramBufferParametersIivNV = (GLEEPFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC) __GLeeGetProcAddress("glProgramBufferParametersIivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramBufferParametersIuivNV = (GLEEPFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC) __GLeeGetProcAddress("glProgramBufferParametersIuivNV"))!=0) nLinked++; #endif if (nLinked==3) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_draw_buffers2(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_draw_buffers2 if ((GLeeFuncPtr_glColorMaskIndexedEXT = (GLEEPFNGLCOLORMASKINDEXEDEXTPROC) __GLeeGetProcAddress("glColorMaskIndexedEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetBooleanIndexedvEXT = (GLEEPFNGLGETBOOLEANINDEXEDVEXTPROC) __GLeeGetProcAddress("glGetBooleanIndexedvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetIntegerIndexedvEXT = (GLEEPFNGLGETINTEGERINDEXEDVEXTPROC) __GLeeGetProcAddress("glGetIntegerIndexedvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glEnableIndexedEXT = (GLEEPFNGLENABLEINDEXEDEXTPROC) __GLeeGetProcAddress("glEnableIndexedEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glDisableIndexedEXT = (GLEEPFNGLDISABLEINDEXEDEXTPROC) __GLeeGetProcAddress("glDisableIndexedEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glIsEnabledIndexedEXT = (GLEEPFNGLISENABLEDINDEXEDEXTPROC) __GLeeGetProcAddress("glIsEnabledIndexedEXT"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_transform_feedback(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_transform_feedback if ((GLeeFuncPtr_glBeginTransformFeedbackNV = (GLEEPFNGLBEGINTRANSFORMFEEDBACKNVPROC) __GLeeGetProcAddress("glBeginTransformFeedbackNV"))!=0) nLinked++; if ((GLeeFuncPtr_glEndTransformFeedbackNV = (GLEEPFNGLENDTRANSFORMFEEDBACKNVPROC) __GLeeGetProcAddress("glEndTransformFeedbackNV"))!=0) nLinked++; if ((GLeeFuncPtr_glTransformFeedbackAttribsNV = (GLEEPFNGLTRANSFORMFEEDBACKATTRIBSNVPROC) __GLeeGetProcAddress("glTransformFeedbackAttribsNV"))!=0) nLinked++; if ((GLeeFuncPtr_glBindBufferRangeNV = (GLEEPFNGLBINDBUFFERRANGENVPROC) __GLeeGetProcAddress("glBindBufferRangeNV"))!=0) nLinked++; if ((GLeeFuncPtr_glBindBufferOffsetNV = (GLEEPFNGLBINDBUFFEROFFSETNVPROC) __GLeeGetProcAddress("glBindBufferOffsetNV"))!=0) nLinked++; if ((GLeeFuncPtr_glBindBufferBaseNV = (GLEEPFNGLBINDBUFFERBASENVPROC) __GLeeGetProcAddress("glBindBufferBaseNV"))!=0) nLinked++; if ((GLeeFuncPtr_glTransformFeedbackVaryingsNV = (GLEEPFNGLTRANSFORMFEEDBACKVARYINGSNVPROC) __GLeeGetProcAddress("glTransformFeedbackVaryingsNV"))!=0) nLinked++; if ((GLeeFuncPtr_glActiveVaryingNV = (GLEEPFNGLACTIVEVARYINGNVPROC) __GLeeGetProcAddress("glActiveVaryingNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVaryingLocationNV = (GLEEPFNGLGETVARYINGLOCATIONNVPROC) __GLeeGetProcAddress("glGetVaryingLocationNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetActiveVaryingNV = (GLEEPFNGLGETACTIVEVARYINGNVPROC) __GLeeGetProcAddress("glGetActiveVaryingNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTransformFeedbackVaryingNV = (GLEEPFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC) __GLeeGetProcAddress("glGetTransformFeedbackVaryingNV"))!=0) nLinked++; if ((GLeeFuncPtr_glTransformFeedbackStreamAttribsNV = (GLEEPFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC) __GLeeGetProcAddress("glTransformFeedbackStreamAttribsNV"))!=0) nLinked++; #endif if (nLinked==12) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_bindable_uniform(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_bindable_uniform if ((GLeeFuncPtr_glUniformBufferEXT = (GLEEPFNGLUNIFORMBUFFEREXTPROC) __GLeeGetProcAddress("glUniformBufferEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetUniformBufferSizeEXT = (GLEEPFNGLGETUNIFORMBUFFERSIZEEXTPROC) __GLeeGetProcAddress("glGetUniformBufferSizeEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetUniformOffsetEXT = (GLEEPFNGLGETUNIFORMOFFSETEXTPROC) __GLeeGetProcAddress("glGetUniformOffsetEXT"))!=0) nLinked++; #endif if (nLinked==3) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_texture_integer(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_texture_integer if ((GLeeFuncPtr_glTexParameterIivEXT = (GLEEPFNGLTEXPARAMETERIIVEXTPROC) __GLeeGetProcAddress("glTexParameterIivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTexParameterIuivEXT = (GLEEPFNGLTEXPARAMETERIUIVEXTPROC) __GLeeGetProcAddress("glTexParameterIuivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTexParameterIivEXT = (GLEEPFNGLGETTEXPARAMETERIIVEXTPROC) __GLeeGetProcAddress("glGetTexParameterIivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTexParameterIuivEXT = (GLEEPFNGLGETTEXPARAMETERIUIVEXTPROC) __GLeeGetProcAddress("glGetTexParameterIuivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glClearColorIiEXT = (GLEEPFNGLCLEARCOLORIIEXTPROC) __GLeeGetProcAddress("glClearColorIiEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glClearColorIuiEXT = (GLEEPFNGLCLEARCOLORIUIEXTPROC) __GLeeGetProcAddress("glClearColorIuiEXT"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_GREMEDY_frame_terminator(void) { GLint nLinked=0; #ifdef __GLEE_GL_GREMEDY_frame_terminator if ((GLeeFuncPtr_glFrameTerminatorGREMEDY = (GLEEPFNGLFRAMETERMINATORGREMEDYPROC) __GLeeGetProcAddress("glFrameTerminatorGREMEDY"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_conditional_render(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_conditional_render if ((GLeeFuncPtr_glBeginConditionalRenderNV = (GLEEPFNGLBEGINCONDITIONALRENDERNVPROC) __GLeeGetProcAddress("glBeginConditionalRenderNV"))!=0) nLinked++; if ((GLeeFuncPtr_glEndConditionalRenderNV = (GLEEPFNGLENDCONDITIONALRENDERNVPROC) __GLeeGetProcAddress("glEndConditionalRenderNV"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_present_video(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_present_video if ((GLeeFuncPtr_glPresentFrameKeyedNV = (GLEEPFNGLPRESENTFRAMEKEYEDNVPROC) __GLeeGetProcAddress("glPresentFrameKeyedNV"))!=0) nLinked++; if ((GLeeFuncPtr_glPresentFrameDualFillNV = (GLEEPFNGLPRESENTFRAMEDUALFILLNVPROC) __GLeeGetProcAddress("glPresentFrameDualFillNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVideoivNV = (GLEEPFNGLGETVIDEOIVNVPROC) __GLeeGetProcAddress("glGetVideoivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVideouivNV = (GLEEPFNGLGETVIDEOUIVNVPROC) __GLeeGetProcAddress("glGetVideouivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVideoi64vNV = (GLEEPFNGLGETVIDEOI64VNVPROC) __GLeeGetProcAddress("glGetVideoi64vNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVideoui64vNV = (GLEEPFNGLGETVIDEOUI64VNVPROC) __GLeeGetProcAddress("glGetVideoui64vNV"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_transform_feedback(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_transform_feedback if ((GLeeFuncPtr_glBeginTransformFeedbackEXT = (GLEEPFNGLBEGINTRANSFORMFEEDBACKEXTPROC) __GLeeGetProcAddress("glBeginTransformFeedbackEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glEndTransformFeedbackEXT = (GLEEPFNGLENDTRANSFORMFEEDBACKEXTPROC) __GLeeGetProcAddress("glEndTransformFeedbackEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBindBufferRangeEXT = (GLEEPFNGLBINDBUFFERRANGEEXTPROC) __GLeeGetProcAddress("glBindBufferRangeEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBindBufferOffsetEXT = (GLEEPFNGLBINDBUFFEROFFSETEXTPROC) __GLeeGetProcAddress("glBindBufferOffsetEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBindBufferBaseEXT = (GLEEPFNGLBINDBUFFERBASEEXTPROC) __GLeeGetProcAddress("glBindBufferBaseEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTransformFeedbackVaryingsEXT = (GLEEPFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) __GLeeGetProcAddress("glTransformFeedbackVaryingsEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTransformFeedbackVaryingEXT = (GLEEPFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC) __GLeeGetProcAddress("glGetTransformFeedbackVaryingEXT"))!=0) nLinked++; #endif if (nLinked==7) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_direct_state_access(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_direct_state_access if ((GLeeFuncPtr_glClientAttribDefaultEXT = (GLEEPFNGLCLIENTATTRIBDEFAULTEXTPROC) __GLeeGetProcAddress("glClientAttribDefaultEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glPushClientAttribDefaultEXT = (GLEEPFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC) __GLeeGetProcAddress("glPushClientAttribDefaultEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixLoadfEXT = (GLEEPFNGLMATRIXLOADFEXTPROC) __GLeeGetProcAddress("glMatrixLoadfEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixLoaddEXT = (GLEEPFNGLMATRIXLOADDEXTPROC) __GLeeGetProcAddress("glMatrixLoaddEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixMultfEXT = (GLEEPFNGLMATRIXMULTFEXTPROC) __GLeeGetProcAddress("glMatrixMultfEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixMultdEXT = (GLEEPFNGLMATRIXMULTDEXTPROC) __GLeeGetProcAddress("glMatrixMultdEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixLoadIdentityEXT = (GLEEPFNGLMATRIXLOADIDENTITYEXTPROC) __GLeeGetProcAddress("glMatrixLoadIdentityEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixRotatefEXT = (GLEEPFNGLMATRIXROTATEFEXTPROC) __GLeeGetProcAddress("glMatrixRotatefEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixRotatedEXT = (GLEEPFNGLMATRIXROTATEDEXTPROC) __GLeeGetProcAddress("glMatrixRotatedEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixScalefEXT = (GLEEPFNGLMATRIXSCALEFEXTPROC) __GLeeGetProcAddress("glMatrixScalefEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixScaledEXT = (GLEEPFNGLMATRIXSCALEDEXTPROC) __GLeeGetProcAddress("glMatrixScaledEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixTranslatefEXT = (GLEEPFNGLMATRIXTRANSLATEFEXTPROC) __GLeeGetProcAddress("glMatrixTranslatefEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixTranslatedEXT = (GLEEPFNGLMATRIXTRANSLATEDEXTPROC) __GLeeGetProcAddress("glMatrixTranslatedEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixFrustumEXT = (GLEEPFNGLMATRIXFRUSTUMEXTPROC) __GLeeGetProcAddress("glMatrixFrustumEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixOrthoEXT = (GLEEPFNGLMATRIXORTHOEXTPROC) __GLeeGetProcAddress("glMatrixOrthoEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixPopEXT = (GLEEPFNGLMATRIXPOPEXTPROC) __GLeeGetProcAddress("glMatrixPopEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixPushEXT = (GLEEPFNGLMATRIXPUSHEXTPROC) __GLeeGetProcAddress("glMatrixPushEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixLoadTransposefEXT = (GLEEPFNGLMATRIXLOADTRANSPOSEFEXTPROC) __GLeeGetProcAddress("glMatrixLoadTransposefEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixLoadTransposedEXT = (GLEEPFNGLMATRIXLOADTRANSPOSEDEXTPROC) __GLeeGetProcAddress("glMatrixLoadTransposedEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixMultTransposefEXT = (GLEEPFNGLMATRIXMULTTRANSPOSEFEXTPROC) __GLeeGetProcAddress("glMatrixMultTransposefEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixMultTransposedEXT = (GLEEPFNGLMATRIXMULTTRANSPOSEDEXTPROC) __GLeeGetProcAddress("glMatrixMultTransposedEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureParameterfEXT = (GLEEPFNGLTEXTUREPARAMETERFEXTPROC) __GLeeGetProcAddress("glTextureParameterfEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureParameterfvEXT = (GLEEPFNGLTEXTUREPARAMETERFVEXTPROC) __GLeeGetProcAddress("glTextureParameterfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureParameteriEXT = (GLEEPFNGLTEXTUREPARAMETERIEXTPROC) __GLeeGetProcAddress("glTextureParameteriEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureParameterivEXT = (GLEEPFNGLTEXTUREPARAMETERIVEXTPROC) __GLeeGetProcAddress("glTextureParameterivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureImage1DEXT = (GLEEPFNGLTEXTUREIMAGE1DEXTPROC) __GLeeGetProcAddress("glTextureImage1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureImage2DEXT = (GLEEPFNGLTEXTUREIMAGE2DEXTPROC) __GLeeGetProcAddress("glTextureImage2DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureSubImage1DEXT = (GLEEPFNGLTEXTURESUBIMAGE1DEXTPROC) __GLeeGetProcAddress("glTextureSubImage1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureSubImage2DEXT = (GLEEPFNGLTEXTURESUBIMAGE2DEXTPROC) __GLeeGetProcAddress("glTextureSubImage2DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyTextureImage1DEXT = (GLEEPFNGLCOPYTEXTUREIMAGE1DEXTPROC) __GLeeGetProcAddress("glCopyTextureImage1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyTextureImage2DEXT = (GLEEPFNGLCOPYTEXTUREIMAGE2DEXTPROC) __GLeeGetProcAddress("glCopyTextureImage2DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyTextureSubImage1DEXT = (GLEEPFNGLCOPYTEXTURESUBIMAGE1DEXTPROC) __GLeeGetProcAddress("glCopyTextureSubImage1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyTextureSubImage2DEXT = (GLEEPFNGLCOPYTEXTURESUBIMAGE2DEXTPROC) __GLeeGetProcAddress("glCopyTextureSubImage2DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTextureImageEXT = (GLEEPFNGLGETTEXTUREIMAGEEXTPROC) __GLeeGetProcAddress("glGetTextureImageEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTextureParameterfvEXT = (GLEEPFNGLGETTEXTUREPARAMETERFVEXTPROC) __GLeeGetProcAddress("glGetTextureParameterfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTextureParameterivEXT = (GLEEPFNGLGETTEXTUREPARAMETERIVEXTPROC) __GLeeGetProcAddress("glGetTextureParameterivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTextureLevelParameterfvEXT = (GLEEPFNGLGETTEXTURELEVELPARAMETERFVEXTPROC) __GLeeGetProcAddress("glGetTextureLevelParameterfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTextureLevelParameterivEXT = (GLEEPFNGLGETTEXTURELEVELPARAMETERIVEXTPROC) __GLeeGetProcAddress("glGetTextureLevelParameterivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureImage3DEXT = (GLEEPFNGLTEXTUREIMAGE3DEXTPROC) __GLeeGetProcAddress("glTextureImage3DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureSubImage3DEXT = (GLEEPFNGLTEXTURESUBIMAGE3DEXTPROC) __GLeeGetProcAddress("glTextureSubImage3DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyTextureSubImage3DEXT = (GLEEPFNGLCOPYTEXTURESUBIMAGE3DEXTPROC) __GLeeGetProcAddress("glCopyTextureSubImage3DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexParameterfEXT = (GLEEPFNGLMULTITEXPARAMETERFEXTPROC) __GLeeGetProcAddress("glMultiTexParameterfEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexParameterfvEXT = (GLEEPFNGLMULTITEXPARAMETERFVEXTPROC) __GLeeGetProcAddress("glMultiTexParameterfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexParameteriEXT = (GLEEPFNGLMULTITEXPARAMETERIEXTPROC) __GLeeGetProcAddress("glMultiTexParameteriEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexParameterivEXT = (GLEEPFNGLMULTITEXPARAMETERIVEXTPROC) __GLeeGetProcAddress("glMultiTexParameterivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexImage1DEXT = (GLEEPFNGLMULTITEXIMAGE1DEXTPROC) __GLeeGetProcAddress("glMultiTexImage1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexImage2DEXT = (GLEEPFNGLMULTITEXIMAGE2DEXTPROC) __GLeeGetProcAddress("glMultiTexImage2DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexSubImage1DEXT = (GLEEPFNGLMULTITEXSUBIMAGE1DEXTPROC) __GLeeGetProcAddress("glMultiTexSubImage1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexSubImage2DEXT = (GLEEPFNGLMULTITEXSUBIMAGE2DEXTPROC) __GLeeGetProcAddress("glMultiTexSubImage2DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyMultiTexImage1DEXT = (GLEEPFNGLCOPYMULTITEXIMAGE1DEXTPROC) __GLeeGetProcAddress("glCopyMultiTexImage1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyMultiTexImage2DEXT = (GLEEPFNGLCOPYMULTITEXIMAGE2DEXTPROC) __GLeeGetProcAddress("glCopyMultiTexImage2DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyMultiTexSubImage1DEXT = (GLEEPFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC) __GLeeGetProcAddress("glCopyMultiTexSubImage1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyMultiTexSubImage2DEXT = (GLEEPFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC) __GLeeGetProcAddress("glCopyMultiTexSubImage2DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMultiTexImageEXT = (GLEEPFNGLGETMULTITEXIMAGEEXTPROC) __GLeeGetProcAddress("glGetMultiTexImageEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMultiTexParameterfvEXT = (GLEEPFNGLGETMULTITEXPARAMETERFVEXTPROC) __GLeeGetProcAddress("glGetMultiTexParameterfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMultiTexParameterivEXT = (GLEEPFNGLGETMULTITEXPARAMETERIVEXTPROC) __GLeeGetProcAddress("glGetMultiTexParameterivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMultiTexLevelParameterfvEXT = (GLEEPFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC) __GLeeGetProcAddress("glGetMultiTexLevelParameterfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMultiTexLevelParameterivEXT = (GLEEPFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC) __GLeeGetProcAddress("glGetMultiTexLevelParameterivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexImage3DEXT = (GLEEPFNGLMULTITEXIMAGE3DEXTPROC) __GLeeGetProcAddress("glMultiTexImage3DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexSubImage3DEXT = (GLEEPFNGLMULTITEXSUBIMAGE3DEXTPROC) __GLeeGetProcAddress("glMultiTexSubImage3DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyMultiTexSubImage3DEXT = (GLEEPFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC) __GLeeGetProcAddress("glCopyMultiTexSubImage3DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBindMultiTextureEXT = (GLEEPFNGLBINDMULTITEXTUREEXTPROC) __GLeeGetProcAddress("glBindMultiTextureEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glEnableClientStateIndexedEXT = (GLEEPFNGLENABLECLIENTSTATEINDEXEDEXTPROC) __GLeeGetProcAddress("glEnableClientStateIndexedEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glDisableClientStateIndexedEXT = (GLEEPFNGLDISABLECLIENTSTATEINDEXEDEXTPROC) __GLeeGetProcAddress("glDisableClientStateIndexedEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoordPointerEXT = (GLEEPFNGLMULTITEXCOORDPOINTEREXTPROC) __GLeeGetProcAddress("glMultiTexCoordPointerEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexEnvfEXT = (GLEEPFNGLMULTITEXENVFEXTPROC) __GLeeGetProcAddress("glMultiTexEnvfEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexEnvfvEXT = (GLEEPFNGLMULTITEXENVFVEXTPROC) __GLeeGetProcAddress("glMultiTexEnvfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexEnviEXT = (GLEEPFNGLMULTITEXENVIEXTPROC) __GLeeGetProcAddress("glMultiTexEnviEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexEnvivEXT = (GLEEPFNGLMULTITEXENVIVEXTPROC) __GLeeGetProcAddress("glMultiTexEnvivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexGendEXT = (GLEEPFNGLMULTITEXGENDEXTPROC) __GLeeGetProcAddress("glMultiTexGendEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexGendvEXT = (GLEEPFNGLMULTITEXGENDVEXTPROC) __GLeeGetProcAddress("glMultiTexGendvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexGenfEXT = (GLEEPFNGLMULTITEXGENFEXTPROC) __GLeeGetProcAddress("glMultiTexGenfEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexGenfvEXT = (GLEEPFNGLMULTITEXGENFVEXTPROC) __GLeeGetProcAddress("glMultiTexGenfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexGeniEXT = (GLEEPFNGLMULTITEXGENIEXTPROC) __GLeeGetProcAddress("glMultiTexGeniEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexGenivEXT = (GLEEPFNGLMULTITEXGENIVEXTPROC) __GLeeGetProcAddress("glMultiTexGenivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMultiTexEnvfvEXT = (GLEEPFNGLGETMULTITEXENVFVEXTPROC) __GLeeGetProcAddress("glGetMultiTexEnvfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMultiTexEnvivEXT = (GLEEPFNGLGETMULTITEXENVIVEXTPROC) __GLeeGetProcAddress("glGetMultiTexEnvivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMultiTexGendvEXT = (GLEEPFNGLGETMULTITEXGENDVEXTPROC) __GLeeGetProcAddress("glGetMultiTexGendvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMultiTexGenfvEXT = (GLEEPFNGLGETMULTITEXGENFVEXTPROC) __GLeeGetProcAddress("glGetMultiTexGenfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMultiTexGenivEXT = (GLEEPFNGLGETMULTITEXGENIVEXTPROC) __GLeeGetProcAddress("glGetMultiTexGenivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetFloatIndexedvEXT = (GLEEPFNGLGETFLOATINDEXEDVEXTPROC) __GLeeGetProcAddress("glGetFloatIndexedvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetDoubleIndexedvEXT = (GLEEPFNGLGETDOUBLEINDEXEDVEXTPROC) __GLeeGetProcAddress("glGetDoubleIndexedvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetPointerIndexedvEXT = (GLEEPFNGLGETPOINTERINDEXEDVEXTPROC) __GLeeGetProcAddress("glGetPointerIndexedvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedTextureImage3DEXT = (GLEEPFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC) __GLeeGetProcAddress("glCompressedTextureImage3DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedTextureImage2DEXT = (GLEEPFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC) __GLeeGetProcAddress("glCompressedTextureImage2DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedTextureImage1DEXT = (GLEEPFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC) __GLeeGetProcAddress("glCompressedTextureImage1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedTextureSubImage3DEXT = (GLEEPFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC) __GLeeGetProcAddress("glCompressedTextureSubImage3DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedTextureSubImage2DEXT = (GLEEPFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC) __GLeeGetProcAddress("glCompressedTextureSubImage2DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedTextureSubImage1DEXT = (GLEEPFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC) __GLeeGetProcAddress("glCompressedTextureSubImage1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetCompressedTextureImageEXT = (GLEEPFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC) __GLeeGetProcAddress("glGetCompressedTextureImageEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedMultiTexImage3DEXT = (GLEEPFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC) __GLeeGetProcAddress("glCompressedMultiTexImage3DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedMultiTexImage2DEXT = (GLEEPFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC) __GLeeGetProcAddress("glCompressedMultiTexImage2DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedMultiTexImage1DEXT = (GLEEPFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC) __GLeeGetProcAddress("glCompressedMultiTexImage1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedMultiTexSubImage3DEXT = (GLEEPFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC) __GLeeGetProcAddress("glCompressedMultiTexSubImage3DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedMultiTexSubImage2DEXT = (GLEEPFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC) __GLeeGetProcAddress("glCompressedMultiTexSubImage2DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedMultiTexSubImage1DEXT = (GLEEPFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC) __GLeeGetProcAddress("glCompressedMultiTexSubImage1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetCompressedMultiTexImageEXT = (GLEEPFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC) __GLeeGetProcAddress("glGetCompressedMultiTexImageEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedProgramStringEXT = (GLEEPFNGLNAMEDPROGRAMSTRINGEXTPROC) __GLeeGetProcAddress("glNamedProgramStringEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedProgramLocalParameter4dEXT = (GLEEPFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC) __GLeeGetProcAddress("glNamedProgramLocalParameter4dEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedProgramLocalParameter4dvEXT = (GLEEPFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC) __GLeeGetProcAddress("glNamedProgramLocalParameter4dvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedProgramLocalParameter4fEXT = (GLEEPFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC) __GLeeGetProcAddress("glNamedProgramLocalParameter4fEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedProgramLocalParameter4fvEXT = (GLEEPFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC) __GLeeGetProcAddress("glNamedProgramLocalParameter4fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetNamedProgramLocalParameterdvEXT = (GLEEPFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC) __GLeeGetProcAddress("glGetNamedProgramLocalParameterdvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetNamedProgramLocalParameterfvEXT = (GLEEPFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC) __GLeeGetProcAddress("glGetNamedProgramLocalParameterfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetNamedProgramivEXT = (GLEEPFNGLGETNAMEDPROGRAMIVEXTPROC) __GLeeGetProcAddress("glGetNamedProgramivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetNamedProgramStringEXT = (GLEEPFNGLGETNAMEDPROGRAMSTRINGEXTPROC) __GLeeGetProcAddress("glGetNamedProgramStringEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedProgramLocalParameters4fvEXT = (GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC) __GLeeGetProcAddress("glNamedProgramLocalParameters4fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedProgramLocalParameterI4iEXT = (GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC) __GLeeGetProcAddress("glNamedProgramLocalParameterI4iEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedProgramLocalParameterI4ivEXT = (GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC) __GLeeGetProcAddress("glNamedProgramLocalParameterI4ivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedProgramLocalParametersI4ivEXT = (GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC) __GLeeGetProcAddress("glNamedProgramLocalParametersI4ivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedProgramLocalParameterI4uiEXT = (GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC) __GLeeGetProcAddress("glNamedProgramLocalParameterI4uiEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedProgramLocalParameterI4uivEXT = (GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC) __GLeeGetProcAddress("glNamedProgramLocalParameterI4uivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedProgramLocalParametersI4uivEXT = (GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC) __GLeeGetProcAddress("glNamedProgramLocalParametersI4uivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetNamedProgramLocalParameterIivEXT = (GLEEPFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC) __GLeeGetProcAddress("glGetNamedProgramLocalParameterIivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetNamedProgramLocalParameterIuivEXT = (GLEEPFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC) __GLeeGetProcAddress("glGetNamedProgramLocalParameterIuivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureParameterIivEXT = (GLEEPFNGLTEXTUREPARAMETERIIVEXTPROC) __GLeeGetProcAddress("glTextureParameterIivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureParameterIuivEXT = (GLEEPFNGLTEXTUREPARAMETERIUIVEXTPROC) __GLeeGetProcAddress("glTextureParameterIuivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTextureParameterIivEXT = (GLEEPFNGLGETTEXTUREPARAMETERIIVEXTPROC) __GLeeGetProcAddress("glGetTextureParameterIivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTextureParameterIuivEXT = (GLEEPFNGLGETTEXTUREPARAMETERIUIVEXTPROC) __GLeeGetProcAddress("glGetTextureParameterIuivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexParameterIivEXT = (GLEEPFNGLMULTITEXPARAMETERIIVEXTPROC) __GLeeGetProcAddress("glMultiTexParameterIivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexParameterIuivEXT = (GLEEPFNGLMULTITEXPARAMETERIUIVEXTPROC) __GLeeGetProcAddress("glMultiTexParameterIuivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMultiTexParameterIivEXT = (GLEEPFNGLGETMULTITEXPARAMETERIIVEXTPROC) __GLeeGetProcAddress("glGetMultiTexParameterIivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMultiTexParameterIuivEXT = (GLEEPFNGLGETMULTITEXPARAMETERIUIVEXTPROC) __GLeeGetProcAddress("glGetMultiTexParameterIuivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform1fEXT = (GLEEPFNGLPROGRAMUNIFORM1FEXTPROC) __GLeeGetProcAddress("glProgramUniform1fEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform2fEXT = (GLEEPFNGLPROGRAMUNIFORM2FEXTPROC) __GLeeGetProcAddress("glProgramUniform2fEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform3fEXT = (GLEEPFNGLPROGRAMUNIFORM3FEXTPROC) __GLeeGetProcAddress("glProgramUniform3fEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform4fEXT = (GLEEPFNGLPROGRAMUNIFORM4FEXTPROC) __GLeeGetProcAddress("glProgramUniform4fEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform1iEXT = (GLEEPFNGLPROGRAMUNIFORM1IEXTPROC) __GLeeGetProcAddress("glProgramUniform1iEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform2iEXT = (GLEEPFNGLPROGRAMUNIFORM2IEXTPROC) __GLeeGetProcAddress("glProgramUniform2iEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform3iEXT = (GLEEPFNGLPROGRAMUNIFORM3IEXTPROC) __GLeeGetProcAddress("glProgramUniform3iEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform4iEXT = (GLEEPFNGLPROGRAMUNIFORM4IEXTPROC) __GLeeGetProcAddress("glProgramUniform4iEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform1fvEXT = (GLEEPFNGLPROGRAMUNIFORM1FVEXTPROC) __GLeeGetProcAddress("glProgramUniform1fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform2fvEXT = (GLEEPFNGLPROGRAMUNIFORM2FVEXTPROC) __GLeeGetProcAddress("glProgramUniform2fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform3fvEXT = (GLEEPFNGLPROGRAMUNIFORM3FVEXTPROC) __GLeeGetProcAddress("glProgramUniform3fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform4fvEXT = (GLEEPFNGLPROGRAMUNIFORM4FVEXTPROC) __GLeeGetProcAddress("glProgramUniform4fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform1ivEXT = (GLEEPFNGLPROGRAMUNIFORM1IVEXTPROC) __GLeeGetProcAddress("glProgramUniform1ivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform2ivEXT = (GLEEPFNGLPROGRAMUNIFORM2IVEXTPROC) __GLeeGetProcAddress("glProgramUniform2ivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform3ivEXT = (GLEEPFNGLPROGRAMUNIFORM3IVEXTPROC) __GLeeGetProcAddress("glProgramUniform3ivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform4ivEXT = (GLEEPFNGLPROGRAMUNIFORM4IVEXTPROC) __GLeeGetProcAddress("glProgramUniform4ivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix2fvEXT = (GLEEPFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) __GLeeGetProcAddress("glProgramUniformMatrix2fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix3fvEXT = (GLEEPFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) __GLeeGetProcAddress("glProgramUniformMatrix3fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix4fvEXT = (GLEEPFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) __GLeeGetProcAddress("glProgramUniformMatrix4fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix2x3fvEXT = (GLEEPFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) __GLeeGetProcAddress("glProgramUniformMatrix2x3fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix3x2fvEXT = (GLEEPFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) __GLeeGetProcAddress("glProgramUniformMatrix3x2fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix2x4fvEXT = (GLEEPFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) __GLeeGetProcAddress("glProgramUniformMatrix2x4fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix4x2fvEXT = (GLEEPFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) __GLeeGetProcAddress("glProgramUniformMatrix4x2fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix3x4fvEXT = (GLEEPFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) __GLeeGetProcAddress("glProgramUniformMatrix3x4fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix4x3fvEXT = (GLEEPFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) __GLeeGetProcAddress("glProgramUniformMatrix4x3fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform1uiEXT = (GLEEPFNGLPROGRAMUNIFORM1UIEXTPROC) __GLeeGetProcAddress("glProgramUniform1uiEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform2uiEXT = (GLEEPFNGLPROGRAMUNIFORM2UIEXTPROC) __GLeeGetProcAddress("glProgramUniform2uiEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform3uiEXT = (GLEEPFNGLPROGRAMUNIFORM3UIEXTPROC) __GLeeGetProcAddress("glProgramUniform3uiEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform4uiEXT = (GLEEPFNGLPROGRAMUNIFORM4UIEXTPROC) __GLeeGetProcAddress("glProgramUniform4uiEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform1uivEXT = (GLEEPFNGLPROGRAMUNIFORM1UIVEXTPROC) __GLeeGetProcAddress("glProgramUniform1uivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform2uivEXT = (GLEEPFNGLPROGRAMUNIFORM2UIVEXTPROC) __GLeeGetProcAddress("glProgramUniform2uivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform3uivEXT = (GLEEPFNGLPROGRAMUNIFORM3UIVEXTPROC) __GLeeGetProcAddress("glProgramUniform3uivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform4uivEXT = (GLEEPFNGLPROGRAMUNIFORM4UIVEXTPROC) __GLeeGetProcAddress("glProgramUniform4uivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedBufferDataEXT = (GLEEPFNGLNAMEDBUFFERDATAEXTPROC) __GLeeGetProcAddress("glNamedBufferDataEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedBufferSubDataEXT = (GLEEPFNGLNAMEDBUFFERSUBDATAEXTPROC) __GLeeGetProcAddress("glNamedBufferSubDataEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMapNamedBufferEXT = (GLEEPFNGLMAPNAMEDBUFFEREXTPROC) __GLeeGetProcAddress("glMapNamedBufferEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glUnmapNamedBufferEXT = (GLEEPFNGLUNMAPNAMEDBUFFEREXTPROC) __GLeeGetProcAddress("glUnmapNamedBufferEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMapNamedBufferRangeEXT = (GLEEPFNGLMAPNAMEDBUFFERRANGEEXTPROC) __GLeeGetProcAddress("glMapNamedBufferRangeEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFlushMappedNamedBufferRangeEXT = (GLEEPFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC) __GLeeGetProcAddress("glFlushMappedNamedBufferRangeEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedCopyBufferSubDataEXT = (GLEEPFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC) __GLeeGetProcAddress("glNamedCopyBufferSubDataEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetNamedBufferParameterivEXT = (GLEEPFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC) __GLeeGetProcAddress("glGetNamedBufferParameterivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetNamedBufferPointervEXT = (GLEEPFNGLGETNAMEDBUFFERPOINTERVEXTPROC) __GLeeGetProcAddress("glGetNamedBufferPointervEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetNamedBufferSubDataEXT = (GLEEPFNGLGETNAMEDBUFFERSUBDATAEXTPROC) __GLeeGetProcAddress("glGetNamedBufferSubDataEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureBufferEXT = (GLEEPFNGLTEXTUREBUFFEREXTPROC) __GLeeGetProcAddress("glTextureBufferEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexBufferEXT = (GLEEPFNGLMULTITEXBUFFEREXTPROC) __GLeeGetProcAddress("glMultiTexBufferEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedRenderbufferStorageEXT = (GLEEPFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC) __GLeeGetProcAddress("glNamedRenderbufferStorageEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetNamedRenderbufferParameterivEXT = (GLEEPFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC) __GLeeGetProcAddress("glGetNamedRenderbufferParameterivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCheckNamedFramebufferStatusEXT = (GLEEPFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC) __GLeeGetProcAddress("glCheckNamedFramebufferStatusEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedFramebufferTexture1DEXT = (GLEEPFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC) __GLeeGetProcAddress("glNamedFramebufferTexture1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedFramebufferTexture2DEXT = (GLEEPFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC) __GLeeGetProcAddress("glNamedFramebufferTexture2DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedFramebufferTexture3DEXT = (GLEEPFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC) __GLeeGetProcAddress("glNamedFramebufferTexture3DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedFramebufferRenderbufferEXT = (GLEEPFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC) __GLeeGetProcAddress("glNamedFramebufferRenderbufferEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetNamedFramebufferAttachmentParameterivEXT = (GLEEPFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) __GLeeGetProcAddress("glGetNamedFramebufferAttachmentParameterivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGenerateTextureMipmapEXT = (GLEEPFNGLGENERATETEXTUREMIPMAPEXTPROC) __GLeeGetProcAddress("glGenerateTextureMipmapEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGenerateMultiTexMipmapEXT = (GLEEPFNGLGENERATEMULTITEXMIPMAPEXTPROC) __GLeeGetProcAddress("glGenerateMultiTexMipmapEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFramebufferDrawBufferEXT = (GLEEPFNGLFRAMEBUFFERDRAWBUFFEREXTPROC) __GLeeGetProcAddress("glFramebufferDrawBufferEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFramebufferDrawBuffersEXT = (GLEEPFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC) __GLeeGetProcAddress("glFramebufferDrawBuffersEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFramebufferReadBufferEXT = (GLEEPFNGLFRAMEBUFFERREADBUFFEREXTPROC) __GLeeGetProcAddress("glFramebufferReadBufferEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetFramebufferParameterivEXT = (GLEEPFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC) __GLeeGetProcAddress("glGetFramebufferParameterivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedRenderbufferStorageMultisampleEXT = (GLEEPFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) __GLeeGetProcAddress("glNamedRenderbufferStorageMultisampleEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedRenderbufferStorageMultisampleCoverageEXT = (GLEEPFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC) __GLeeGetProcAddress("glNamedRenderbufferStorageMultisampleCoverageEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedFramebufferTextureEXT = (GLEEPFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC) __GLeeGetProcAddress("glNamedFramebufferTextureEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedFramebufferTextureLayerEXT = (GLEEPFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC) __GLeeGetProcAddress("glNamedFramebufferTextureLayerEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedFramebufferTextureFaceEXT = (GLEEPFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC) __GLeeGetProcAddress("glNamedFramebufferTextureFaceEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureRenderbufferEXT = (GLEEPFNGLTEXTURERENDERBUFFEREXTPROC) __GLeeGetProcAddress("glTextureRenderbufferEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexRenderbufferEXT = (GLEEPFNGLMULTITEXRENDERBUFFEREXTPROC) __GLeeGetProcAddress("glMultiTexRenderbufferEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform1dEXT = (GLEEPFNGLPROGRAMUNIFORM1DEXTPROC) __GLeeGetProcAddress("glProgramUniform1dEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform2dEXT = (GLEEPFNGLPROGRAMUNIFORM2DEXTPROC) __GLeeGetProcAddress("glProgramUniform2dEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform3dEXT = (GLEEPFNGLPROGRAMUNIFORM3DEXTPROC) __GLeeGetProcAddress("glProgramUniform3dEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform4dEXT = (GLEEPFNGLPROGRAMUNIFORM4DEXTPROC) __GLeeGetProcAddress("glProgramUniform4dEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform1dvEXT = (GLEEPFNGLPROGRAMUNIFORM1DVEXTPROC) __GLeeGetProcAddress("glProgramUniform1dvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform2dvEXT = (GLEEPFNGLPROGRAMUNIFORM2DVEXTPROC) __GLeeGetProcAddress("glProgramUniform2dvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform3dvEXT = (GLEEPFNGLPROGRAMUNIFORM3DVEXTPROC) __GLeeGetProcAddress("glProgramUniform3dvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform4dvEXT = (GLEEPFNGLPROGRAMUNIFORM4DVEXTPROC) __GLeeGetProcAddress("glProgramUniform4dvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix2dvEXT = (GLEEPFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC) __GLeeGetProcAddress("glProgramUniformMatrix2dvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix3dvEXT = (GLEEPFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC) __GLeeGetProcAddress("glProgramUniformMatrix3dvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix4dvEXT = (GLEEPFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC) __GLeeGetProcAddress("glProgramUniformMatrix4dvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix2x3dvEXT = (GLEEPFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC) __GLeeGetProcAddress("glProgramUniformMatrix2x3dvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix2x4dvEXT = (GLEEPFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC) __GLeeGetProcAddress("glProgramUniformMatrix2x4dvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix3x2dvEXT = (GLEEPFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC) __GLeeGetProcAddress("glProgramUniformMatrix3x2dvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix3x4dvEXT = (GLEEPFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC) __GLeeGetProcAddress("glProgramUniformMatrix3x4dvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix4x2dvEXT = (GLEEPFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC) __GLeeGetProcAddress("glProgramUniformMatrix4x2dvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix4x3dvEXT = (GLEEPFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC) __GLeeGetProcAddress("glProgramUniformMatrix4x3dvEXT"))!=0) nLinked++; #endif if (nLinked==206) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_vertex_array_bgra(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_texture_swizzle(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_explicit_multisample(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_explicit_multisample if ((GLeeFuncPtr_glGetMultisamplefvNV = (GLEEPFNGLGETMULTISAMPLEFVNVPROC) __GLeeGetProcAddress("glGetMultisamplefvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glSampleMaskIndexedNV = (GLEEPFNGLSAMPLEMASKINDEXEDNVPROC) __GLeeGetProcAddress("glSampleMaskIndexedNV"))!=0) nLinked++; if ((GLeeFuncPtr_glTexRenderbufferNV = (GLEEPFNGLTEXRENDERBUFFERNVPROC) __GLeeGetProcAddress("glTexRenderbufferNV"))!=0) nLinked++; #endif if (nLinked==3) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_transform_feedback2(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_transform_feedback2 if ((GLeeFuncPtr_glBindTransformFeedbackNV = (GLEEPFNGLBINDTRANSFORMFEEDBACKNVPROC) __GLeeGetProcAddress("glBindTransformFeedbackNV"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteTransformFeedbacksNV = (GLEEPFNGLDELETETRANSFORMFEEDBACKSNVPROC) __GLeeGetProcAddress("glDeleteTransformFeedbacksNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGenTransformFeedbacksNV = (GLEEPFNGLGENTRANSFORMFEEDBACKSNVPROC) __GLeeGetProcAddress("glGenTransformFeedbacksNV"))!=0) nLinked++; if ((GLeeFuncPtr_glIsTransformFeedbackNV = (GLEEPFNGLISTRANSFORMFEEDBACKNVPROC) __GLeeGetProcAddress("glIsTransformFeedbackNV"))!=0) nLinked++; if ((GLeeFuncPtr_glPauseTransformFeedbackNV = (GLEEPFNGLPAUSETRANSFORMFEEDBACKNVPROC) __GLeeGetProcAddress("glPauseTransformFeedbackNV"))!=0) nLinked++; if ((GLeeFuncPtr_glResumeTransformFeedbackNV = (GLEEPFNGLRESUMETRANSFORMFEEDBACKNVPROC) __GLeeGetProcAddress("glResumeTransformFeedbackNV"))!=0) nLinked++; if ((GLeeFuncPtr_glDrawTransformFeedbackNV = (GLEEPFNGLDRAWTRANSFORMFEEDBACKNVPROC) __GLeeGetProcAddress("glDrawTransformFeedbackNV"))!=0) nLinked++; #endif if (nLinked==7) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ATI_meminfo(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_AMD_performance_monitor(void) { GLint nLinked=0; #ifdef __GLEE_GL_AMD_performance_monitor if ((GLeeFuncPtr_glGetPerfMonitorGroupsAMD = (GLEEPFNGLGETPERFMONITORGROUPSAMDPROC) __GLeeGetProcAddress("glGetPerfMonitorGroupsAMD"))!=0) nLinked++; if ((GLeeFuncPtr_glGetPerfMonitorCountersAMD = (GLEEPFNGLGETPERFMONITORCOUNTERSAMDPROC) __GLeeGetProcAddress("glGetPerfMonitorCountersAMD"))!=0) nLinked++; if ((GLeeFuncPtr_glGetPerfMonitorGroupStringAMD = (GLEEPFNGLGETPERFMONITORGROUPSTRINGAMDPROC) __GLeeGetProcAddress("glGetPerfMonitorGroupStringAMD"))!=0) nLinked++; if ((GLeeFuncPtr_glGetPerfMonitorCounterStringAMD = (GLEEPFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) __GLeeGetProcAddress("glGetPerfMonitorCounterStringAMD"))!=0) nLinked++; if ((GLeeFuncPtr_glGetPerfMonitorCounterInfoAMD = (GLEEPFNGLGETPERFMONITORCOUNTERINFOAMDPROC) __GLeeGetProcAddress("glGetPerfMonitorCounterInfoAMD"))!=0) nLinked++; if ((GLeeFuncPtr_glGenPerfMonitorsAMD = (GLEEPFNGLGENPERFMONITORSAMDPROC) __GLeeGetProcAddress("glGenPerfMonitorsAMD"))!=0) nLinked++; if ((GLeeFuncPtr_glDeletePerfMonitorsAMD = (GLEEPFNGLDELETEPERFMONITORSAMDPROC) __GLeeGetProcAddress("glDeletePerfMonitorsAMD"))!=0) nLinked++; if ((GLeeFuncPtr_glSelectPerfMonitorCountersAMD = (GLEEPFNGLSELECTPERFMONITORCOUNTERSAMDPROC) __GLeeGetProcAddress("glSelectPerfMonitorCountersAMD"))!=0) nLinked++; if ((GLeeFuncPtr_glBeginPerfMonitorAMD = (GLEEPFNGLBEGINPERFMONITORAMDPROC) __GLeeGetProcAddress("glBeginPerfMonitorAMD"))!=0) nLinked++; if ((GLeeFuncPtr_glEndPerfMonitorAMD = (GLEEPFNGLENDPERFMONITORAMDPROC) __GLeeGetProcAddress("glEndPerfMonitorAMD"))!=0) nLinked++; if ((GLeeFuncPtr_glGetPerfMonitorCounterDataAMD = (GLEEPFNGLGETPERFMONITORCOUNTERDATAAMDPROC) __GLeeGetProcAddress("glGetPerfMonitorCounterDataAMD"))!=0) nLinked++; #endif if (nLinked==11) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_AMD_texture_texture4(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_AMD_vertex_shader_tesselator(void) { GLint nLinked=0; #ifdef __GLEE_GL_AMD_vertex_shader_tesselator if ((GLeeFuncPtr_glTessellationFactorAMD = (GLEEPFNGLTESSELLATIONFACTORAMDPROC) __GLeeGetProcAddress("glTessellationFactorAMD"))!=0) nLinked++; if ((GLeeFuncPtr_glTessellationModeAMD = (GLEEPFNGLTESSELLATIONMODEAMDPROC) __GLeeGetProcAddress("glTessellationModeAMD"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_provoking_vertex(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_provoking_vertex if ((GLeeFuncPtr_glProvokingVertexEXT = (GLEEPFNGLPROVOKINGVERTEXEXTPROC) __GLeeGetProcAddress("glProvokingVertexEXT"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_texture_snorm(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_AMD_draw_buffers_blend(void) { GLint nLinked=0; #ifdef __GLEE_GL_AMD_draw_buffers_blend if ((GLeeFuncPtr_glBlendFuncIndexedAMD = (GLEEPFNGLBLENDFUNCINDEXEDAMDPROC) __GLeeGetProcAddress("glBlendFuncIndexedAMD"))!=0) nLinked++; if ((GLeeFuncPtr_glBlendFuncSeparateIndexedAMD = (GLEEPFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC) __GLeeGetProcAddress("glBlendFuncSeparateIndexedAMD"))!=0) nLinked++; if ((GLeeFuncPtr_glBlendEquationIndexedAMD = (GLEEPFNGLBLENDEQUATIONINDEXEDAMDPROC) __GLeeGetProcAddress("glBlendEquationIndexedAMD"))!=0) nLinked++; if ((GLeeFuncPtr_glBlendEquationSeparateIndexedAMD = (GLEEPFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC) __GLeeGetProcAddress("glBlendEquationSeparateIndexedAMD"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_APPLE_texture_range(void) { GLint nLinked=0; #ifdef __GLEE_GL_APPLE_texture_range if ((GLeeFuncPtr_glTextureRangeAPPLE = (GLEEPFNGLTEXTURERANGEAPPLEPROC) __GLeeGetProcAddress("glTextureRangeAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTexParameterPointervAPPLE = (GLEEPFNGLGETTEXPARAMETERPOINTERVAPPLEPROC) __GLeeGetProcAddress("glGetTexParameterPointervAPPLE"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_APPLE_float_pixels(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_APPLE_vertex_program_evaluators(void) { GLint nLinked=0; #ifdef __GLEE_GL_APPLE_vertex_program_evaluators if ((GLeeFuncPtr_glEnableVertexAttribAPPLE = (GLEEPFNGLENABLEVERTEXATTRIBAPPLEPROC) __GLeeGetProcAddress("glEnableVertexAttribAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glDisableVertexAttribAPPLE = (GLEEPFNGLDISABLEVERTEXATTRIBAPPLEPROC) __GLeeGetProcAddress("glDisableVertexAttribAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glIsVertexAttribEnabledAPPLE = (GLEEPFNGLISVERTEXATTRIBENABLEDAPPLEPROC) __GLeeGetProcAddress("glIsVertexAttribEnabledAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glMapVertexAttrib1dAPPLE = (GLEEPFNGLMAPVERTEXATTRIB1DAPPLEPROC) __GLeeGetProcAddress("glMapVertexAttrib1dAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glMapVertexAttrib1fAPPLE = (GLEEPFNGLMAPVERTEXATTRIB1FAPPLEPROC) __GLeeGetProcAddress("glMapVertexAttrib1fAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glMapVertexAttrib2dAPPLE = (GLEEPFNGLMAPVERTEXATTRIB2DAPPLEPROC) __GLeeGetProcAddress("glMapVertexAttrib2dAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glMapVertexAttrib2fAPPLE = (GLEEPFNGLMAPVERTEXATTRIB2FAPPLEPROC) __GLeeGetProcAddress("glMapVertexAttrib2fAPPLE"))!=0) nLinked++; #endif if (nLinked==7) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_APPLE_aux_depth_stencil(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_APPLE_object_purgeable(void) { GLint nLinked=0; #ifdef __GLEE_GL_APPLE_object_purgeable if ((GLeeFuncPtr_glObjectPurgeableAPPLE = (GLEEPFNGLOBJECTPURGEABLEAPPLEPROC) __GLeeGetProcAddress("glObjectPurgeableAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glObjectUnpurgeableAPPLE = (GLEEPFNGLOBJECTUNPURGEABLEAPPLEPROC) __GLeeGetProcAddress("glObjectUnpurgeableAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glGetObjectParameterivAPPLE = (GLEEPFNGLGETOBJECTPARAMETERIVAPPLEPROC) __GLeeGetProcAddress("glGetObjectParameterivAPPLE"))!=0) nLinked++; #endif if (nLinked==3) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_APPLE_row_bytes(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_APPLE_rgb_422(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_video_capture(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_video_capture if ((GLeeFuncPtr_glBeginVideoCaptureNV = (GLEEPFNGLBEGINVIDEOCAPTURENVPROC) __GLeeGetProcAddress("glBeginVideoCaptureNV"))!=0) nLinked++; if ((GLeeFuncPtr_glBindVideoCaptureStreamBufferNV = (GLEEPFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC) __GLeeGetProcAddress("glBindVideoCaptureStreamBufferNV"))!=0) nLinked++; if ((GLeeFuncPtr_glBindVideoCaptureStreamTextureNV = (GLEEPFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC) __GLeeGetProcAddress("glBindVideoCaptureStreamTextureNV"))!=0) nLinked++; if ((GLeeFuncPtr_glEndVideoCaptureNV = (GLEEPFNGLENDVIDEOCAPTURENVPROC) __GLeeGetProcAddress("glEndVideoCaptureNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVideoCaptureivNV = (GLEEPFNGLGETVIDEOCAPTUREIVNVPROC) __GLeeGetProcAddress("glGetVideoCaptureivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVideoCaptureStreamivNV = (GLEEPFNGLGETVIDEOCAPTURESTREAMIVNVPROC) __GLeeGetProcAddress("glGetVideoCaptureStreamivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVideoCaptureStreamfvNV = (GLEEPFNGLGETVIDEOCAPTURESTREAMFVNVPROC) __GLeeGetProcAddress("glGetVideoCaptureStreamfvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVideoCaptureStreamdvNV = (GLEEPFNGLGETVIDEOCAPTURESTREAMDVNVPROC) __GLeeGetProcAddress("glGetVideoCaptureStreamdvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVideoCaptureNV = (GLEEPFNGLVIDEOCAPTURENVPROC) __GLeeGetProcAddress("glVideoCaptureNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVideoCaptureStreamParameterivNV = (GLEEPFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC) __GLeeGetProcAddress("glVideoCaptureStreamParameterivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVideoCaptureStreamParameterfvNV = (GLEEPFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC) __GLeeGetProcAddress("glVideoCaptureStreamParameterfvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVideoCaptureStreamParameterdvNV = (GLEEPFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC) __GLeeGetProcAddress("glVideoCaptureStreamParameterdvNV"))!=0) nLinked++; #endif if (nLinked==12) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_copy_image(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_copy_image if ((GLeeFuncPtr_glCopyImageSubDataNV = (GLEEPFNGLCOPYIMAGESUBDATANVPROC) __GLeeGetProcAddress("glCopyImageSubDataNV"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_separate_shader_objects(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_separate_shader_objects if ((GLeeFuncPtr_glUseShaderProgramEXT = (GLEEPFNGLUSESHADERPROGRAMEXTPROC) __GLeeGetProcAddress("glUseShaderProgramEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glActiveProgramEXT = (GLEEPFNGLACTIVEPROGRAMEXTPROC) __GLeeGetProcAddress("glActiveProgramEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCreateShaderProgramEXT = (GLEEPFNGLCREATESHADERPROGRAMEXTPROC) __GLeeGetProcAddress("glCreateShaderProgramEXT"))!=0) nLinked++; #endif if (nLinked==3) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_parameter_buffer_object2(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_shader_buffer_load(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_shader_buffer_load if ((GLeeFuncPtr_glMakeBufferResidentNV = (GLEEPFNGLMAKEBUFFERRESIDENTNVPROC) __GLeeGetProcAddress("glMakeBufferResidentNV"))!=0) nLinked++; if ((GLeeFuncPtr_glMakeBufferNonResidentNV = (GLEEPFNGLMAKEBUFFERNONRESIDENTNVPROC) __GLeeGetProcAddress("glMakeBufferNonResidentNV"))!=0) nLinked++; if ((GLeeFuncPtr_glIsBufferResidentNV = (GLEEPFNGLISBUFFERRESIDENTNVPROC) __GLeeGetProcAddress("glIsBufferResidentNV"))!=0) nLinked++; if ((GLeeFuncPtr_glMakeNamedBufferResidentNV = (GLEEPFNGLMAKENAMEDBUFFERRESIDENTNVPROC) __GLeeGetProcAddress("glMakeNamedBufferResidentNV"))!=0) nLinked++; if ((GLeeFuncPtr_glMakeNamedBufferNonResidentNV = (GLEEPFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC) __GLeeGetProcAddress("glMakeNamedBufferNonResidentNV"))!=0) nLinked++; if ((GLeeFuncPtr_glIsNamedBufferResidentNV = (GLEEPFNGLISNAMEDBUFFERRESIDENTNVPROC) __GLeeGetProcAddress("glIsNamedBufferResidentNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetBufferParameterui64vNV = (GLEEPFNGLGETBUFFERPARAMETERUI64VNVPROC) __GLeeGetProcAddress("glGetBufferParameterui64vNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetNamedBufferParameterui64vNV = (GLEEPFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC) __GLeeGetProcAddress("glGetNamedBufferParameterui64vNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetIntegerui64vNV = (GLEEPFNGLGETINTEGERUI64VNVPROC) __GLeeGetProcAddress("glGetIntegerui64vNV"))!=0) nLinked++; if ((GLeeFuncPtr_glUniformui64NV = (GLEEPFNGLUNIFORMUI64NVPROC) __GLeeGetProcAddress("glUniformui64NV"))!=0) nLinked++; if ((GLeeFuncPtr_glUniformui64vNV = (GLEEPFNGLUNIFORMUI64VNVPROC) __GLeeGetProcAddress("glUniformui64vNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetUniformui64vNV = (GLEEPFNGLGETUNIFORMUI64VNVPROC) __GLeeGetProcAddress("glGetUniformui64vNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformui64NV = (GLEEPFNGLPROGRAMUNIFORMUI64NVPROC) __GLeeGetProcAddress("glProgramUniformui64NV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformui64vNV = (GLEEPFNGLPROGRAMUNIFORMUI64VNVPROC) __GLeeGetProcAddress("glProgramUniformui64vNV"))!=0) nLinked++; #endif if (nLinked==14) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_vertex_buffer_unified_memory(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_vertex_buffer_unified_memory if ((GLeeFuncPtr_glBufferAddressRangeNV = (GLEEPFNGLBUFFERADDRESSRANGENVPROC) __GLeeGetProcAddress("glBufferAddressRangeNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexFormatNV = (GLEEPFNGLVERTEXFORMATNVPROC) __GLeeGetProcAddress("glVertexFormatNV"))!=0) nLinked++; if ((GLeeFuncPtr_glNormalFormatNV = (GLEEPFNGLNORMALFORMATNVPROC) __GLeeGetProcAddress("glNormalFormatNV"))!=0) nLinked++; if ((GLeeFuncPtr_glColorFormatNV = (GLEEPFNGLCOLORFORMATNVPROC) __GLeeGetProcAddress("glColorFormatNV"))!=0) nLinked++; if ((GLeeFuncPtr_glIndexFormatNV = (GLEEPFNGLINDEXFORMATNVPROC) __GLeeGetProcAddress("glIndexFormatNV"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoordFormatNV = (GLEEPFNGLTEXCOORDFORMATNVPROC) __GLeeGetProcAddress("glTexCoordFormatNV"))!=0) nLinked++; if ((GLeeFuncPtr_glEdgeFlagFormatNV = (GLEEPFNGLEDGEFLAGFORMATNVPROC) __GLeeGetProcAddress("glEdgeFlagFormatNV"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColorFormatNV = (GLEEPFNGLSECONDARYCOLORFORMATNVPROC) __GLeeGetProcAddress("glSecondaryColorFormatNV"))!=0) nLinked++; if ((GLeeFuncPtr_glFogCoordFormatNV = (GLEEPFNGLFOGCOORDFORMATNVPROC) __GLeeGetProcAddress("glFogCoordFormatNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribFormatNV = (GLEEPFNGLVERTEXATTRIBFORMATNVPROC) __GLeeGetProcAddress("glVertexAttribFormatNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribIFormatNV = (GLEEPFNGLVERTEXATTRIBIFORMATNVPROC) __GLeeGetProcAddress("glVertexAttribIFormatNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetIntegerui64i_vNV = (GLEEPFNGLGETINTEGERUI64I_VNVPROC) __GLeeGetProcAddress("glGetIntegerui64i_vNV"))!=0) nLinked++; #endif if (nLinked==12) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_texture_barrier(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_texture_barrier if ((GLeeFuncPtr_glTextureBarrierNV = (GLEEPFNGLTEXTUREBARRIERNVPROC) __GLeeGetProcAddress("glTextureBarrierNV"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_AMD_shader_stencil_export(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_AMD_seamless_cubemap_per_texture(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_AMD_conservative_depth(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_shader_image_load_store(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_shader_image_load_store if ((GLeeFuncPtr_glBindImageTextureEXT = (GLEEPFNGLBINDIMAGETEXTUREEXTPROC) __GLeeGetProcAddress("glBindImageTextureEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMemoryBarrierEXT = (GLEEPFNGLMEMORYBARRIEREXTPROC) __GLeeGetProcAddress("glMemoryBarrierEXT"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_vertex_attrib_64bit(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_vertex_attrib_64bit if ((GLeeFuncPtr_glVertexAttribL1dEXT = (GLEEPFNGLVERTEXATTRIBL1DEXTPROC) __GLeeGetProcAddress("glVertexAttribL1dEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribL2dEXT = (GLEEPFNGLVERTEXATTRIBL2DEXTPROC) __GLeeGetProcAddress("glVertexAttribL2dEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribL3dEXT = (GLEEPFNGLVERTEXATTRIBL3DEXTPROC) __GLeeGetProcAddress("glVertexAttribL3dEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribL4dEXT = (GLEEPFNGLVERTEXATTRIBL4DEXTPROC) __GLeeGetProcAddress("glVertexAttribL4dEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribL1dvEXT = (GLEEPFNGLVERTEXATTRIBL1DVEXTPROC) __GLeeGetProcAddress("glVertexAttribL1dvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribL2dvEXT = (GLEEPFNGLVERTEXATTRIBL2DVEXTPROC) __GLeeGetProcAddress("glVertexAttribL2dvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribL3dvEXT = (GLEEPFNGLVERTEXATTRIBL3DVEXTPROC) __GLeeGetProcAddress("glVertexAttribL3dvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribL4dvEXT = (GLEEPFNGLVERTEXATTRIBL4DVEXTPROC) __GLeeGetProcAddress("glVertexAttribL4dvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribLPointerEXT = (GLEEPFNGLVERTEXATTRIBLPOINTEREXTPROC) __GLeeGetProcAddress("glVertexAttribLPointerEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribLdvEXT = (GLEEPFNGLGETVERTEXATTRIBLDVEXTPROC) __GLeeGetProcAddress("glGetVertexAttribLdvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexArrayVertexAttribLOffsetEXT = (GLEEPFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC) __GLeeGetProcAddress("glVertexArrayVertexAttribLOffsetEXT"))!=0) nLinked++; #endif if (nLinked==11) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_gpu_program5(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_gpu_program5 if ((GLeeFuncPtr_glProgramSubroutineParametersuivNV = (GLEEPFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC) __GLeeGetProcAddress("glProgramSubroutineParametersuivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramSubroutineParameteruivNV = (GLEEPFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC) __GLeeGetProcAddress("glGetProgramSubroutineParameteruivNV"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_gpu_shader5(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_gpu_shader5 if ((GLeeFuncPtr_glUniform1i64NV = (GLEEPFNGLUNIFORM1I64NVPROC) __GLeeGetProcAddress("glUniform1i64NV"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform2i64NV = (GLEEPFNGLUNIFORM2I64NVPROC) __GLeeGetProcAddress("glUniform2i64NV"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform3i64NV = (GLEEPFNGLUNIFORM3I64NVPROC) __GLeeGetProcAddress("glUniform3i64NV"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform4i64NV = (GLEEPFNGLUNIFORM4I64NVPROC) __GLeeGetProcAddress("glUniform4i64NV"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform1i64vNV = (GLEEPFNGLUNIFORM1I64VNVPROC) __GLeeGetProcAddress("glUniform1i64vNV"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform2i64vNV = (GLEEPFNGLUNIFORM2I64VNVPROC) __GLeeGetProcAddress("glUniform2i64vNV"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform3i64vNV = (GLEEPFNGLUNIFORM3I64VNVPROC) __GLeeGetProcAddress("glUniform3i64vNV"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform4i64vNV = (GLEEPFNGLUNIFORM4I64VNVPROC) __GLeeGetProcAddress("glUniform4i64vNV"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform1ui64NV = (GLEEPFNGLUNIFORM1UI64NVPROC) __GLeeGetProcAddress("glUniform1ui64NV"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform2ui64NV = (GLEEPFNGLUNIFORM2UI64NVPROC) __GLeeGetProcAddress("glUniform2ui64NV"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform3ui64NV = (GLEEPFNGLUNIFORM3UI64NVPROC) __GLeeGetProcAddress("glUniform3ui64NV"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform4ui64NV = (GLEEPFNGLUNIFORM4UI64NVPROC) __GLeeGetProcAddress("glUniform4ui64NV"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform1ui64vNV = (GLEEPFNGLUNIFORM1UI64VNVPROC) __GLeeGetProcAddress("glUniform1ui64vNV"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform2ui64vNV = (GLEEPFNGLUNIFORM2UI64VNVPROC) __GLeeGetProcAddress("glUniform2ui64vNV"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform3ui64vNV = (GLEEPFNGLUNIFORM3UI64VNVPROC) __GLeeGetProcAddress("glUniform3ui64vNV"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform4ui64vNV = (GLEEPFNGLUNIFORM4UI64VNVPROC) __GLeeGetProcAddress("glUniform4ui64vNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetUniformi64vNV = (GLEEPFNGLGETUNIFORMI64VNVPROC) __GLeeGetProcAddress("glGetUniformi64vNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform1i64NV = (GLEEPFNGLPROGRAMUNIFORM1I64NVPROC) __GLeeGetProcAddress("glProgramUniform1i64NV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform2i64NV = (GLEEPFNGLPROGRAMUNIFORM2I64NVPROC) __GLeeGetProcAddress("glProgramUniform2i64NV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform3i64NV = (GLEEPFNGLPROGRAMUNIFORM3I64NVPROC) __GLeeGetProcAddress("glProgramUniform3i64NV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform4i64NV = (GLEEPFNGLPROGRAMUNIFORM4I64NVPROC) __GLeeGetProcAddress("glProgramUniform4i64NV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform1i64vNV = (GLEEPFNGLPROGRAMUNIFORM1I64VNVPROC) __GLeeGetProcAddress("glProgramUniform1i64vNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform2i64vNV = (GLEEPFNGLPROGRAMUNIFORM2I64VNVPROC) __GLeeGetProcAddress("glProgramUniform2i64vNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform3i64vNV = (GLEEPFNGLPROGRAMUNIFORM3I64VNVPROC) __GLeeGetProcAddress("glProgramUniform3i64vNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform4i64vNV = (GLEEPFNGLPROGRAMUNIFORM4I64VNVPROC) __GLeeGetProcAddress("glProgramUniform4i64vNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform1ui64NV = (GLEEPFNGLPROGRAMUNIFORM1UI64NVPROC) __GLeeGetProcAddress("glProgramUniform1ui64NV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform2ui64NV = (GLEEPFNGLPROGRAMUNIFORM2UI64NVPROC) __GLeeGetProcAddress("glProgramUniform2ui64NV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform3ui64NV = (GLEEPFNGLPROGRAMUNIFORM3UI64NVPROC) __GLeeGetProcAddress("glProgramUniform3ui64NV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform4ui64NV = (GLEEPFNGLPROGRAMUNIFORM4UI64NVPROC) __GLeeGetProcAddress("glProgramUniform4ui64NV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform1ui64vNV = (GLEEPFNGLPROGRAMUNIFORM1UI64VNVPROC) __GLeeGetProcAddress("glProgramUniform1ui64vNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform2ui64vNV = (GLEEPFNGLPROGRAMUNIFORM2UI64VNVPROC) __GLeeGetProcAddress("glProgramUniform2ui64vNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform3ui64vNV = (GLEEPFNGLPROGRAMUNIFORM3UI64VNVPROC) __GLeeGetProcAddress("glProgramUniform3ui64vNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform4ui64vNV = (GLEEPFNGLPROGRAMUNIFORM4UI64VNVPROC) __GLeeGetProcAddress("glProgramUniform4ui64vNV"))!=0) nLinked++; #endif if (nLinked==33) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_shader_buffer_store(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_tessellation_program5(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_vertex_attrib_integer_64bit(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_vertex_attrib_integer_64bit if ((GLeeFuncPtr_glVertexAttribL1i64NV = (GLEEPFNGLVERTEXATTRIBL1I64NVPROC) __GLeeGetProcAddress("glVertexAttribL1i64NV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribL2i64NV = (GLEEPFNGLVERTEXATTRIBL2I64NVPROC) __GLeeGetProcAddress("glVertexAttribL2i64NV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribL3i64NV = (GLEEPFNGLVERTEXATTRIBL3I64NVPROC) __GLeeGetProcAddress("glVertexAttribL3i64NV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribL4i64NV = (GLEEPFNGLVERTEXATTRIBL4I64NVPROC) __GLeeGetProcAddress("glVertexAttribL4i64NV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribL1i64vNV = (GLEEPFNGLVERTEXATTRIBL1I64VNVPROC) __GLeeGetProcAddress("glVertexAttribL1i64vNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribL2i64vNV = (GLEEPFNGLVERTEXATTRIBL2I64VNVPROC) __GLeeGetProcAddress("glVertexAttribL2i64vNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribL3i64vNV = (GLEEPFNGLVERTEXATTRIBL3I64VNVPROC) __GLeeGetProcAddress("glVertexAttribL3i64vNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribL4i64vNV = (GLEEPFNGLVERTEXATTRIBL4I64VNVPROC) __GLeeGetProcAddress("glVertexAttribL4i64vNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribL1ui64NV = (GLEEPFNGLVERTEXATTRIBL1UI64NVPROC) __GLeeGetProcAddress("glVertexAttribL1ui64NV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribL2ui64NV = (GLEEPFNGLVERTEXATTRIBL2UI64NVPROC) __GLeeGetProcAddress("glVertexAttribL2ui64NV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribL3ui64NV = (GLEEPFNGLVERTEXATTRIBL3UI64NVPROC) __GLeeGetProcAddress("glVertexAttribL3ui64NV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribL4ui64NV = (GLEEPFNGLVERTEXATTRIBL4UI64NVPROC) __GLeeGetProcAddress("glVertexAttribL4ui64NV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribL1ui64vNV = (GLEEPFNGLVERTEXATTRIBL1UI64VNVPROC) __GLeeGetProcAddress("glVertexAttribL1ui64vNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribL2ui64vNV = (GLEEPFNGLVERTEXATTRIBL2UI64VNVPROC) __GLeeGetProcAddress("glVertexAttribL2ui64vNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribL3ui64vNV = (GLEEPFNGLVERTEXATTRIBL3UI64VNVPROC) __GLeeGetProcAddress("glVertexAttribL3ui64vNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribL4ui64vNV = (GLEEPFNGLVERTEXATTRIBL4UI64VNVPROC) __GLeeGetProcAddress("glVertexAttribL4ui64vNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribLi64vNV = (GLEEPFNGLGETVERTEXATTRIBLI64VNVPROC) __GLeeGetProcAddress("glGetVertexAttribLi64vNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribLui64vNV = (GLEEPFNGLGETVERTEXATTRIBLUI64VNVPROC) __GLeeGetProcAddress("glGetVertexAttribLui64vNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribLFormatNV = (GLEEPFNGLVERTEXATTRIBLFORMATNVPROC) __GLeeGetProcAddress("glVertexAttribLFormatNV"))!=0) nLinked++; #endif if (nLinked==19) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_multisample_coverage(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_AMD_name_gen_delete(void) { GLint nLinked=0; #ifdef __GLEE_GL_AMD_name_gen_delete if ((GLeeFuncPtr_glGenNamesAMD = (GLEEPFNGLGENNAMESAMDPROC) __GLeeGetProcAddress("glGenNamesAMD"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteNamesAMD = (GLEEPFNGLDELETENAMESAMDPROC) __GLeeGetProcAddress("glDeleteNamesAMD"))!=0) nLinked++; if ((GLeeFuncPtr_glIsNameAMD = (GLEEPFNGLISNAMEAMDPROC) __GLeeGetProcAddress("glIsNameAMD"))!=0) nLinked++; #endif if (nLinked==3) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_AMD_debug_output(void) { GLint nLinked=0; #ifdef __GLEE_GL_AMD_debug_output if ((GLeeFuncPtr_glDebugMessageEnableAMD = (GLEEPFNGLDEBUGMESSAGEENABLEAMDPROC) __GLeeGetProcAddress("glDebugMessageEnableAMD"))!=0) nLinked++; if ((GLeeFuncPtr_glDebugMessageInsertAMD = (GLEEPFNGLDEBUGMESSAGEINSERTAMDPROC) __GLeeGetProcAddress("glDebugMessageInsertAMD"))!=0) nLinked++; if ((GLeeFuncPtr_glDebugMessageCallbackAMD = (GLEEPFNGLDEBUGMESSAGECALLBACKAMDPROC) __GLeeGetProcAddress("glDebugMessageCallbackAMD"))!=0) nLinked++; if ((GLeeFuncPtr_glGetDebugMessageLogAMD = (GLEEPFNGLGETDEBUGMESSAGELOGAMDPROC) __GLeeGetProcAddress("glGetDebugMessageLogAMD"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_AMD_transform_feedback3_lines_triangles(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_AMD_depth_clamp_separate(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_texture_sRGB_decode(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_texture_multisample(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_texture_multisample if ((GLeeFuncPtr_glTexImage2DMultisampleCoverageNV = (GLEEPFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC) __GLeeGetProcAddress("glTexImage2DMultisampleCoverageNV"))!=0) nLinked++; if ((GLeeFuncPtr_glTexImage3DMultisampleCoverageNV = (GLEEPFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC) __GLeeGetProcAddress("glTexImage3DMultisampleCoverageNV"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureImage2DMultisampleNV = (GLEEPFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC) __GLeeGetProcAddress("glTextureImage2DMultisampleNV"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureImage3DMultisampleNV = (GLEEPFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC) __GLeeGetProcAddress("glTextureImage3DMultisampleNV"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureImage2DMultisampleCoverageNV = (GLEEPFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC) __GLeeGetProcAddress("glTextureImage2DMultisampleCoverageNV"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureImage3DMultisampleCoverageNV = (GLEEPFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC) __GLeeGetProcAddress("glTextureImage3DMultisampleCoverageNV"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_AMD_blend_minmax_factor(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_AMD_sample_positions(void) { GLint nLinked=0; #ifdef __GLEE_GL_AMD_sample_positions if ((GLeeFuncPtr_glSetMultisamplefvAMD = (GLEEPFNGLSETMULTISAMPLEFVAMDPROC) __GLeeGetProcAddress("glSetMultisamplefvAMD"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_x11_sync_object(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_x11_sync_object if ((GLeeFuncPtr_glImportSyncEXT = (GLEEPFNGLIMPORTSYNCEXTPROC) __GLeeGetProcAddress("glImportSyncEXT"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_AMD_multi_draw_indirect(void) { GLint nLinked=0; #ifdef __GLEE_GL_AMD_multi_draw_indirect if ((GLeeFuncPtr_glMultiDrawArraysIndirectAMD = (GLEEPFNGLMULTIDRAWARRAYSINDIRECTAMDPROC) __GLeeGetProcAddress("glMultiDrawArraysIndirectAMD"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiDrawElementsIndirectAMD = (GLEEPFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC) __GLeeGetProcAddress("glMultiDrawElementsIndirectAMD"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_framebuffer_multisample_blit_scaled(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_path_rendering(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_path_rendering if ((GLeeFuncPtr_glGenPathsNV = (GLEEPFNGLGENPATHSNVPROC) __GLeeGetProcAddress("glGenPathsNV"))!=0) nLinked++; if ((GLeeFuncPtr_glDeletePathsNV = (GLEEPFNGLDELETEPATHSNVPROC) __GLeeGetProcAddress("glDeletePathsNV"))!=0) nLinked++; if ((GLeeFuncPtr_glIsPathNV = (GLEEPFNGLISPATHNVPROC) __GLeeGetProcAddress("glIsPathNV"))!=0) nLinked++; if ((GLeeFuncPtr_glPathCommandsNV = (GLEEPFNGLPATHCOMMANDSNVPROC) __GLeeGetProcAddress("glPathCommandsNV"))!=0) nLinked++; if ((GLeeFuncPtr_glPathCoordsNV = (GLEEPFNGLPATHCOORDSNVPROC) __GLeeGetProcAddress("glPathCoordsNV"))!=0) nLinked++; if ((GLeeFuncPtr_glPathSubCommandsNV = (GLEEPFNGLPATHSUBCOMMANDSNVPROC) __GLeeGetProcAddress("glPathSubCommandsNV"))!=0) nLinked++; if ((GLeeFuncPtr_glPathSubCoordsNV = (GLEEPFNGLPATHSUBCOORDSNVPROC) __GLeeGetProcAddress("glPathSubCoordsNV"))!=0) nLinked++; if ((GLeeFuncPtr_glPathStringNV = (GLEEPFNGLPATHSTRINGNVPROC) __GLeeGetProcAddress("glPathStringNV"))!=0) nLinked++; if ((GLeeFuncPtr_glPathGlyphsNV = (GLEEPFNGLPATHGLYPHSNVPROC) __GLeeGetProcAddress("glPathGlyphsNV"))!=0) nLinked++; if ((GLeeFuncPtr_glPathGlyphRangeNV = (GLEEPFNGLPATHGLYPHRANGENVPROC) __GLeeGetProcAddress("glPathGlyphRangeNV"))!=0) nLinked++; if ((GLeeFuncPtr_glWeightPathsNV = (GLEEPFNGLWEIGHTPATHSNVPROC) __GLeeGetProcAddress("glWeightPathsNV"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyPathNV = (GLEEPFNGLCOPYPATHNVPROC) __GLeeGetProcAddress("glCopyPathNV"))!=0) nLinked++; if ((GLeeFuncPtr_glInterpolatePathsNV = (GLEEPFNGLINTERPOLATEPATHSNVPROC) __GLeeGetProcAddress("glInterpolatePathsNV"))!=0) nLinked++; if ((GLeeFuncPtr_glTransformPathNV = (GLEEPFNGLTRANSFORMPATHNVPROC) __GLeeGetProcAddress("glTransformPathNV"))!=0) nLinked++; if ((GLeeFuncPtr_glPathParameterivNV = (GLEEPFNGLPATHPARAMETERIVNVPROC) __GLeeGetProcAddress("glPathParameterivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glPathParameteriNV = (GLEEPFNGLPATHPARAMETERINVPROC) __GLeeGetProcAddress("glPathParameteriNV"))!=0) nLinked++; if ((GLeeFuncPtr_glPathParameterfvNV = (GLEEPFNGLPATHPARAMETERFVNVPROC) __GLeeGetProcAddress("glPathParameterfvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glPathParameterfNV = (GLEEPFNGLPATHPARAMETERFNVPROC) __GLeeGetProcAddress("glPathParameterfNV"))!=0) nLinked++; if ((GLeeFuncPtr_glPathDashArrayNV = (GLEEPFNGLPATHDASHARRAYNVPROC) __GLeeGetProcAddress("glPathDashArrayNV"))!=0) nLinked++; if ((GLeeFuncPtr_glPathStencilFuncNV = (GLEEPFNGLPATHSTENCILFUNCNVPROC) __GLeeGetProcAddress("glPathStencilFuncNV"))!=0) nLinked++; if ((GLeeFuncPtr_glPathStencilDepthOffsetNV = (GLEEPFNGLPATHSTENCILDEPTHOFFSETNVPROC) __GLeeGetProcAddress("glPathStencilDepthOffsetNV"))!=0) nLinked++; if ((GLeeFuncPtr_glStencilFillPathNV = (GLEEPFNGLSTENCILFILLPATHNVPROC) __GLeeGetProcAddress("glStencilFillPathNV"))!=0) nLinked++; if ((GLeeFuncPtr_glStencilStrokePathNV = (GLEEPFNGLSTENCILSTROKEPATHNVPROC) __GLeeGetProcAddress("glStencilStrokePathNV"))!=0) nLinked++; if ((GLeeFuncPtr_glStencilFillPathInstancedNV = (GLEEPFNGLSTENCILFILLPATHINSTANCEDNVPROC) __GLeeGetProcAddress("glStencilFillPathInstancedNV"))!=0) nLinked++; if ((GLeeFuncPtr_glStencilStrokePathInstancedNV = (GLEEPFNGLSTENCILSTROKEPATHINSTANCEDNVPROC) __GLeeGetProcAddress("glStencilStrokePathInstancedNV"))!=0) nLinked++; if ((GLeeFuncPtr_glPathCoverDepthFuncNV = (GLEEPFNGLPATHCOVERDEPTHFUNCNVPROC) __GLeeGetProcAddress("glPathCoverDepthFuncNV"))!=0) nLinked++; if ((GLeeFuncPtr_glPathColorGenNV = (GLEEPFNGLPATHCOLORGENNVPROC) __GLeeGetProcAddress("glPathColorGenNV"))!=0) nLinked++; if ((GLeeFuncPtr_glPathTexGenNV = (GLEEPFNGLPATHTEXGENNVPROC) __GLeeGetProcAddress("glPathTexGenNV"))!=0) nLinked++; if ((GLeeFuncPtr_glPathFogGenNV = (GLEEPFNGLPATHFOGGENNVPROC) __GLeeGetProcAddress("glPathFogGenNV"))!=0) nLinked++; if ((GLeeFuncPtr_glCoverFillPathNV = (GLEEPFNGLCOVERFILLPATHNVPROC) __GLeeGetProcAddress("glCoverFillPathNV"))!=0) nLinked++; if ((GLeeFuncPtr_glCoverStrokePathNV = (GLEEPFNGLCOVERSTROKEPATHNVPROC) __GLeeGetProcAddress("glCoverStrokePathNV"))!=0) nLinked++; if ((GLeeFuncPtr_glCoverFillPathInstancedNV = (GLEEPFNGLCOVERFILLPATHINSTANCEDNVPROC) __GLeeGetProcAddress("glCoverFillPathInstancedNV"))!=0) nLinked++; if ((GLeeFuncPtr_glCoverStrokePathInstancedNV = (GLEEPFNGLCOVERSTROKEPATHINSTANCEDNVPROC) __GLeeGetProcAddress("glCoverStrokePathInstancedNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetPathParameterivNV = (GLEEPFNGLGETPATHPARAMETERIVNVPROC) __GLeeGetProcAddress("glGetPathParameterivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetPathParameterfvNV = (GLEEPFNGLGETPATHPARAMETERFVNVPROC) __GLeeGetProcAddress("glGetPathParameterfvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetPathCommandsNV = (GLEEPFNGLGETPATHCOMMANDSNVPROC) __GLeeGetProcAddress("glGetPathCommandsNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetPathCoordsNV = (GLEEPFNGLGETPATHCOORDSNVPROC) __GLeeGetProcAddress("glGetPathCoordsNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetPathDashArrayNV = (GLEEPFNGLGETPATHDASHARRAYNVPROC) __GLeeGetProcAddress("glGetPathDashArrayNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetPathMetricsNV = (GLEEPFNGLGETPATHMETRICSNVPROC) __GLeeGetProcAddress("glGetPathMetricsNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetPathMetricRangeNV = (GLEEPFNGLGETPATHMETRICRANGENVPROC) __GLeeGetProcAddress("glGetPathMetricRangeNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetPathSpacingNV = (GLEEPFNGLGETPATHSPACINGNVPROC) __GLeeGetProcAddress("glGetPathSpacingNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetPathColorGenivNV = (GLEEPFNGLGETPATHCOLORGENIVNVPROC) __GLeeGetProcAddress("glGetPathColorGenivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetPathColorGenfvNV = (GLEEPFNGLGETPATHCOLORGENFVNVPROC) __GLeeGetProcAddress("glGetPathColorGenfvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetPathTexGenivNV = (GLEEPFNGLGETPATHTEXGENIVNVPROC) __GLeeGetProcAddress("glGetPathTexGenivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetPathTexGenfvNV = (GLEEPFNGLGETPATHTEXGENFVNVPROC) __GLeeGetProcAddress("glGetPathTexGenfvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glIsPointInFillPathNV = (GLEEPFNGLISPOINTINFILLPATHNVPROC) __GLeeGetProcAddress("glIsPointInFillPathNV"))!=0) nLinked++; if ((GLeeFuncPtr_glIsPointInStrokePathNV = (GLEEPFNGLISPOINTINSTROKEPATHNVPROC) __GLeeGetProcAddress("glIsPointInStrokePathNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetPathLengthNV = (GLEEPFNGLGETPATHLENGTHNVPROC) __GLeeGetProcAddress("glGetPathLengthNV"))!=0) nLinked++; if ((GLeeFuncPtr_glPointAlongPathNV = (GLEEPFNGLPOINTALONGPATHNVPROC) __GLeeGetProcAddress("glPointAlongPathNV"))!=0) nLinked++; #endif if (nLinked==49) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_AMD_pinned_memory(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_AMD_stencil_operation_extended(void) { GLint nLinked=0; #ifdef __GLEE_GL_AMD_stencil_operation_extended if ((GLeeFuncPtr_glStencilOpValueAMD = (GLEEPFNGLSTENCILOPVALUEAMDPROC) __GLeeGetProcAddress("glStencilOpValueAMD"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_AMD_vertex_shader_viewport_index(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_AMD_vertex_shader_layer(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_bindless_texture(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_bindless_texture if ((GLeeFuncPtr_glGetTextureHandleNV = (GLEEPFNGLGETTEXTUREHANDLENVPROC) __GLeeGetProcAddress("glGetTextureHandleNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTextureSamplerHandleNV = (GLEEPFNGLGETTEXTURESAMPLERHANDLENVPROC) __GLeeGetProcAddress("glGetTextureSamplerHandleNV"))!=0) nLinked++; if ((GLeeFuncPtr_glMakeTextureHandleResidentNV = (GLEEPFNGLMAKETEXTUREHANDLERESIDENTNVPROC) __GLeeGetProcAddress("glMakeTextureHandleResidentNV"))!=0) nLinked++; if ((GLeeFuncPtr_glMakeTextureHandleNonResidentNV = (GLEEPFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC) __GLeeGetProcAddress("glMakeTextureHandleNonResidentNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetImageHandleNV = (GLEEPFNGLGETIMAGEHANDLENVPROC) __GLeeGetProcAddress("glGetImageHandleNV"))!=0) nLinked++; if ((GLeeFuncPtr_glMakeImageHandleResidentNV = (GLEEPFNGLMAKEIMAGEHANDLERESIDENTNVPROC) __GLeeGetProcAddress("glMakeImageHandleResidentNV"))!=0) nLinked++; if ((GLeeFuncPtr_glMakeImageHandleNonResidentNV = (GLEEPFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC) __GLeeGetProcAddress("glMakeImageHandleNonResidentNV"))!=0) nLinked++; if ((GLeeFuncPtr_glUniformHandleui64NV = (GLEEPFNGLUNIFORMHANDLEUI64NVPROC) __GLeeGetProcAddress("glUniformHandleui64NV"))!=0) nLinked++; if ((GLeeFuncPtr_glUniformHandleui64vNV = (GLEEPFNGLUNIFORMHANDLEUI64VNVPROC) __GLeeGetProcAddress("glUniformHandleui64vNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformHandleui64NV = (GLEEPFNGLPROGRAMUNIFORMHANDLEUI64NVPROC) __GLeeGetProcAddress("glProgramUniformHandleui64NV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformHandleui64vNV = (GLEEPFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC) __GLeeGetProcAddress("glProgramUniformHandleui64vNV"))!=0) nLinked++; if ((GLeeFuncPtr_glIsTextureHandleResidentNV = (GLEEPFNGLISTEXTUREHANDLERESIDENTNVPROC) __GLeeGetProcAddress("glIsTextureHandleResidentNV"))!=0) nLinked++; if ((GLeeFuncPtr_glIsImageHandleResidentNV = (GLEEPFNGLISIMAGEHANDLERESIDENTNVPROC) __GLeeGetProcAddress("glIsImageHandleResidentNV"))!=0) nLinked++; #endif if (nLinked==13) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_shader_atomic_float(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_AMD_query_buffer_object(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_compute_program5(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_shader_storage_buffer_object(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_shader_atomic_counters(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_deep_texture3D(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NVX_conditional_render(void) { GLint nLinked=0; #ifdef __GLEE_GL_NVX_conditional_render if ((GLeeFuncPtr_glBeginConditionalRenderNVX = (GLEEPFNGLBEGINCONDITIONALRENDERNVXPROC) __GLeeGetProcAddress("glBeginConditionalRenderNVX"))!=0) nLinked++; if ((GLeeFuncPtr_glEndConditionalRenderNVX = (GLEEPFNGLENDCONDITIONALRENDERNVXPROC) __GLeeGetProcAddress("glEndConditionalRenderNVX"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_AMD_sparse_texture(void) { GLint nLinked=0; #ifdef __GLEE_GL_AMD_sparse_texture if ((GLeeFuncPtr_glTexStorageSparseAMD = (GLEEPFNGLTEXSTORAGESPARSEAMDPROC) __GLeeGetProcAddress("glTexStorageSparseAMD"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureStorageSparseAMD = (GLEEPFNGLTEXTURESTORAGESPARSEAMDPROC) __GLeeGetProcAddress("glTextureStorageSparseAMD"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_AMD_shader_trinary_minmax(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_INTEL_map_texture(void) { GLint nLinked=0; #ifdef __GLEE_GL_INTEL_map_texture if ((GLeeFuncPtr_glSyncTextureINTEL = (GLEEPFNGLSYNCTEXTUREINTELPROC) __GLeeGetProcAddress("glSyncTextureINTEL"))!=0) nLinked++; if ((GLeeFuncPtr_glUnmapTexture2DINTEL = (GLEEPFNGLUNMAPTEXTURE2DINTELPROC) __GLeeGetProcAddress("glUnmapTexture2DINTEL"))!=0) nLinked++; if ((GLeeFuncPtr_glMapTexture2DINTEL = (GLEEPFNGLMAPTEXTURE2DINTELPROC) __GLeeGetProcAddress("glMapTexture2DINTEL"))!=0) nLinked++; #endif if (nLinked==3) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_draw_texture(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_draw_texture if ((GLeeFuncPtr_glDrawTextureNV = (GLEEPFNGLDRAWTEXTURENVPROC) __GLeeGetProcAddress("glDrawTextureNV"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIX_texture_select(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_INGR_blend_func_separate(void) { GLint nLinked=0; #ifdef __GLEE_GL_INGR_blend_func_separate if ((GLeeFuncPtr_glBlendFuncSeparateINGR = (GLEEPFNGLBLENDFUNCSEPARATEINGRPROC) __GLeeGetProcAddress("glBlendFuncSeparateINGR"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIX_depth_pass_instrument(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_igloo_interface(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIX_igloo_interface if ((GLeeFuncPtr_glIglooInterfaceSGIX = (GLEEPFNGLIGLOOINTERFACESGIXPROC) __GLeeGetProcAddress("glIglooInterfaceSGIX"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLEE_LINK_FUNCTION __GLeeGLLoadFunction[463]; void initGLLoadFunctions(void) { __GLeeGLLoadFunction[0]=__GLeeLink_GL_VERSION_1_2; __GLeeGLLoadFunction[1]=__GLeeLink_GL_ARB_imaging; __GLeeGLLoadFunction[2]=__GLeeLink_GL_VERSION_1_3; __GLeeGLLoadFunction[3]=__GLeeLink_GL_VERSION_1_4; __GLeeGLLoadFunction[4]=__GLeeLink_GL_VERSION_1_5; __GLeeGLLoadFunction[5]=__GLeeLink_GL_VERSION_2_0; __GLeeGLLoadFunction[6]=__GLeeLink_GL_VERSION_2_1; __GLeeGLLoadFunction[7]=__GLeeLink_GL_VERSION_3_0; __GLeeGLLoadFunction[8]=__GLeeLink_GL_VERSION_3_1; __GLeeGLLoadFunction[9]=__GLeeLink_GL_VERSION_3_2; __GLeeGLLoadFunction[10]=__GLeeLink_GL_VERSION_3_3; __GLeeGLLoadFunction[11]=__GLeeLink_GL_VERSION_4_0; __GLeeGLLoadFunction[12]=__GLeeLink_GL_VERSION_4_1; __GLeeGLLoadFunction[13]=__GLeeLink_GL_VERSION_4_2; __GLeeGLLoadFunction[14]=__GLeeLink_GL_VERSION_4_3; __GLeeGLLoadFunction[15]=__GLeeLink_GL_ARB_multitexture; __GLeeGLLoadFunction[16]=__GLeeLink_GL_ARB_transpose_matrix; __GLeeGLLoadFunction[17]=__GLeeLink_GL_ARB_multisample; __GLeeGLLoadFunction[18]=__GLeeLink_GL_ARB_texture_env_add; __GLeeGLLoadFunction[19]=__GLeeLink_GL_ARB_texture_cube_map; __GLeeGLLoadFunction[20]=__GLeeLink_GL_ARB_texture_compression; __GLeeGLLoadFunction[21]=__GLeeLink_GL_ARB_texture_border_clamp; __GLeeGLLoadFunction[22]=__GLeeLink_GL_ARB_point_parameters; __GLeeGLLoadFunction[23]=__GLeeLink_GL_ARB_vertex_blend; __GLeeGLLoadFunction[24]=__GLeeLink_GL_ARB_matrix_palette; __GLeeGLLoadFunction[25]=__GLeeLink_GL_ARB_texture_env_combine; __GLeeGLLoadFunction[26]=__GLeeLink_GL_ARB_texture_env_crossbar; __GLeeGLLoadFunction[27]=__GLeeLink_GL_ARB_texture_env_dot3; __GLeeGLLoadFunction[28]=__GLeeLink_GL_ARB_texture_mirrored_repeat; __GLeeGLLoadFunction[29]=__GLeeLink_GL_ARB_depth_texture; __GLeeGLLoadFunction[30]=__GLeeLink_GL_ARB_shadow; __GLeeGLLoadFunction[31]=__GLeeLink_GL_ARB_shadow_ambient; __GLeeGLLoadFunction[32]=__GLeeLink_GL_ARB_window_pos; __GLeeGLLoadFunction[33]=__GLeeLink_GL_ARB_vertex_program; __GLeeGLLoadFunction[34]=__GLeeLink_GL_ARB_fragment_program; __GLeeGLLoadFunction[35]=__GLeeLink_GL_ARB_vertex_buffer_object; __GLeeGLLoadFunction[36]=__GLeeLink_GL_ARB_occlusion_query; __GLeeGLLoadFunction[37]=__GLeeLink_GL_ARB_shader_objects; __GLeeGLLoadFunction[38]=__GLeeLink_GL_ARB_vertex_shader; __GLeeGLLoadFunction[39]=__GLeeLink_GL_ARB_fragment_shader; __GLeeGLLoadFunction[40]=__GLeeLink_GL_ARB_shading_language_100; __GLeeGLLoadFunction[41]=__GLeeLink_GL_ARB_texture_non_power_of_two; __GLeeGLLoadFunction[42]=__GLeeLink_GL_ARB_point_sprite; __GLeeGLLoadFunction[43]=__GLeeLink_GL_ARB_fragment_program_shadow; __GLeeGLLoadFunction[44]=__GLeeLink_GL_ARB_draw_buffers; __GLeeGLLoadFunction[45]=__GLeeLink_GL_ARB_texture_rectangle; __GLeeGLLoadFunction[46]=__GLeeLink_GL_ARB_color_buffer_float; __GLeeGLLoadFunction[47]=__GLeeLink_GL_ARB_half_float_pixel; __GLeeGLLoadFunction[48]=__GLeeLink_GL_ARB_texture_float; __GLeeGLLoadFunction[49]=__GLeeLink_GL_ARB_pixel_buffer_object; __GLeeGLLoadFunction[50]=__GLeeLink_GL_ARB_depth_buffer_float; __GLeeGLLoadFunction[51]=__GLeeLink_GL_ARB_draw_instanced; __GLeeGLLoadFunction[52]=__GLeeLink_GL_ARB_framebuffer_object; __GLeeGLLoadFunction[53]=__GLeeLink_GL_ARB_framebuffer_sRGB; __GLeeGLLoadFunction[54]=__GLeeLink_GL_ARB_geometry_shader4; __GLeeGLLoadFunction[55]=__GLeeLink_GL_ARB_half_float_vertex; __GLeeGLLoadFunction[56]=__GLeeLink_GL_ARB_instanced_arrays; __GLeeGLLoadFunction[57]=__GLeeLink_GL_ARB_map_buffer_range; __GLeeGLLoadFunction[58]=__GLeeLink_GL_ARB_texture_buffer_object; __GLeeGLLoadFunction[59]=__GLeeLink_GL_ARB_texture_compression_rgtc; __GLeeGLLoadFunction[60]=__GLeeLink_GL_ARB_texture_rg; __GLeeGLLoadFunction[61]=__GLeeLink_GL_ARB_vertex_array_object; __GLeeGLLoadFunction[62]=__GLeeLink_GL_ARB_uniform_buffer_object; __GLeeGLLoadFunction[63]=__GLeeLink_GL_ARB_compatibility; __GLeeGLLoadFunction[64]=__GLeeLink_GL_ARB_copy_buffer; __GLeeGLLoadFunction[65]=__GLeeLink_GL_ARB_shader_texture_lod; __GLeeGLLoadFunction[66]=__GLeeLink_GL_ARB_depth_clamp; __GLeeGLLoadFunction[67]=__GLeeLink_GL_ARB_draw_elements_base_vertex; __GLeeGLLoadFunction[68]=__GLeeLink_GL_ARB_fragment_coord_conventions; __GLeeGLLoadFunction[69]=__GLeeLink_GL_ARB_provoking_vertex; __GLeeGLLoadFunction[70]=__GLeeLink_GL_ARB_seamless_cube_map; __GLeeGLLoadFunction[71]=__GLeeLink_GL_ARB_sync; __GLeeGLLoadFunction[72]=__GLeeLink_GL_ARB_texture_multisample; __GLeeGLLoadFunction[73]=__GLeeLink_GL_ARB_vertex_array_bgra; __GLeeGLLoadFunction[74]=__GLeeLink_GL_ARB_draw_buffers_blend; __GLeeGLLoadFunction[75]=__GLeeLink_GL_ARB_sample_shading; __GLeeGLLoadFunction[76]=__GLeeLink_GL_ARB_texture_cube_map_array; __GLeeGLLoadFunction[77]=__GLeeLink_GL_ARB_texture_gather; __GLeeGLLoadFunction[78]=__GLeeLink_GL_ARB_texture_query_lod; __GLeeGLLoadFunction[79]=__GLeeLink_GL_ARB_shading_language_include; __GLeeGLLoadFunction[80]=__GLeeLink_GL_ARB_texture_compression_bptc; __GLeeGLLoadFunction[81]=__GLeeLink_GL_ARB_blend_func_extended; __GLeeGLLoadFunction[82]=__GLeeLink_GL_ARB_explicit_attrib_location; __GLeeGLLoadFunction[83]=__GLeeLink_GL_ARB_occlusion_query2; __GLeeGLLoadFunction[84]=__GLeeLink_GL_ARB_sampler_objects; __GLeeGLLoadFunction[85]=__GLeeLink_GL_ARB_shader_bit_encoding; __GLeeGLLoadFunction[86]=__GLeeLink_GL_ARB_texture_rgb10_a2ui; __GLeeGLLoadFunction[87]=__GLeeLink_GL_ARB_texture_swizzle; __GLeeGLLoadFunction[88]=__GLeeLink_GL_ARB_timer_query; __GLeeGLLoadFunction[89]=__GLeeLink_GL_ARB_vertex_type_2_10_10_10_rev; __GLeeGLLoadFunction[90]=__GLeeLink_GL_ARB_draw_indirect; __GLeeGLLoadFunction[91]=__GLeeLink_GL_ARB_gpu_shader5; __GLeeGLLoadFunction[92]=__GLeeLink_GL_ARB_gpu_shader_fp64; __GLeeGLLoadFunction[93]=__GLeeLink_GL_ARB_shader_subroutine; __GLeeGLLoadFunction[94]=__GLeeLink_GL_ARB_tessellation_shader; __GLeeGLLoadFunction[95]=__GLeeLink_GL_ARB_texture_buffer_object_rgb32; __GLeeGLLoadFunction[96]=__GLeeLink_GL_ARB_transform_feedback2; __GLeeGLLoadFunction[97]=__GLeeLink_GL_ARB_transform_feedback3; __GLeeGLLoadFunction[98]=__GLeeLink_GL_ARB_ES2_compatibility; __GLeeGLLoadFunction[99]=__GLeeLink_GL_ARB_get_program_binary; __GLeeGLLoadFunction[100]=__GLeeLink_GL_ARB_separate_shader_objects; __GLeeGLLoadFunction[101]=__GLeeLink_GL_ARB_shader_precision; __GLeeGLLoadFunction[102]=__GLeeLink_GL_ARB_vertex_attrib_64bit; __GLeeGLLoadFunction[103]=__GLeeLink_GL_ARB_viewport_array; __GLeeGLLoadFunction[104]=__GLeeLink_GL_ARB_cl_event; __GLeeGLLoadFunction[105]=__GLeeLink_GL_ARB_debug_output; __GLeeGLLoadFunction[106]=__GLeeLink_GL_ARB_robustness; __GLeeGLLoadFunction[107]=__GLeeLink_GL_ARB_shader_stencil_export; __GLeeGLLoadFunction[108]=__GLeeLink_GL_ARB_base_instance; __GLeeGLLoadFunction[109]=__GLeeLink_GL_ARB_shading_language_420pack; __GLeeGLLoadFunction[110]=__GLeeLink_GL_ARB_transform_feedback_instanced; __GLeeGLLoadFunction[111]=__GLeeLink_GL_ARB_compressed_texture_pixel_storage; __GLeeGLLoadFunction[112]=__GLeeLink_GL_ARB_conservative_depth; __GLeeGLLoadFunction[113]=__GLeeLink_GL_ARB_internalformat_query; __GLeeGLLoadFunction[114]=__GLeeLink_GL_ARB_map_buffer_alignment; __GLeeGLLoadFunction[115]=__GLeeLink_GL_ARB_shader_atomic_counters; __GLeeGLLoadFunction[116]=__GLeeLink_GL_ARB_shader_image_load_store; __GLeeGLLoadFunction[117]=__GLeeLink_GL_ARB_shading_language_packing; __GLeeGLLoadFunction[118]=__GLeeLink_GL_ARB_texture_storage; __GLeeGLLoadFunction[119]=__GLeeLink_GL_KHR_texture_compression_astc_ldr; __GLeeGLLoadFunction[120]=__GLeeLink_GL_KHR_debug; __GLeeGLLoadFunction[121]=__GLeeLink_GL_ARB_arrays_of_arrays; __GLeeGLLoadFunction[122]=__GLeeLink_GL_ARB_clear_buffer_object; __GLeeGLLoadFunction[123]=__GLeeLink_GL_ARB_compute_shader; __GLeeGLLoadFunction[124]=__GLeeLink_GL_ARB_copy_image; __GLeeGLLoadFunction[125]=__GLeeLink_GL_ARB_texture_view; __GLeeGLLoadFunction[126]=__GLeeLink_GL_ARB_vertex_attrib_binding; __GLeeGLLoadFunction[127]=__GLeeLink_GL_ARB_robustness_isolation; __GLeeGLLoadFunction[128]=__GLeeLink_GL_ARB_ES3_compatibility; __GLeeGLLoadFunction[129]=__GLeeLink_GL_ARB_explicit_uniform_location; __GLeeGLLoadFunction[130]=__GLeeLink_GL_ARB_fragment_layer_viewport; __GLeeGLLoadFunction[131]=__GLeeLink_GL_ARB_framebuffer_no_attachments; __GLeeGLLoadFunction[132]=__GLeeLink_GL_ARB_internalformat_query2; __GLeeGLLoadFunction[133]=__GLeeLink_GL_ARB_invalidate_subdata; __GLeeGLLoadFunction[134]=__GLeeLink_GL_ARB_multi_draw_indirect; __GLeeGLLoadFunction[135]=__GLeeLink_GL_ARB_program_interface_query; __GLeeGLLoadFunction[136]=__GLeeLink_GL_ARB_robust_buffer_access_behavior; __GLeeGLLoadFunction[137]=__GLeeLink_GL_ARB_shader_image_size; __GLeeGLLoadFunction[138]=__GLeeLink_GL_ARB_shader_storage_buffer_object; __GLeeGLLoadFunction[139]=__GLeeLink_GL_ARB_stencil_texturing; __GLeeGLLoadFunction[140]=__GLeeLink_GL_ARB_texture_buffer_range; __GLeeGLLoadFunction[141]=__GLeeLink_GL_ARB_texture_query_levels; __GLeeGLLoadFunction[142]=__GLeeLink_GL_ARB_texture_storage_multisample; __GLeeGLLoadFunction[143]=__GLeeLink_GL_EXT_abgr; __GLeeGLLoadFunction[144]=__GLeeLink_GL_EXT_blend_color; __GLeeGLLoadFunction[145]=__GLeeLink_GL_EXT_polygon_offset; __GLeeGLLoadFunction[146]=__GLeeLink_GL_EXT_texture; __GLeeGLLoadFunction[147]=__GLeeLink_GL_EXT_texture3D; __GLeeGLLoadFunction[148]=__GLeeLink_GL_SGIS_texture_filter4; __GLeeGLLoadFunction[149]=__GLeeLink_GL_EXT_subtexture; __GLeeGLLoadFunction[150]=__GLeeLink_GL_EXT_copy_texture; __GLeeGLLoadFunction[151]=__GLeeLink_GL_EXT_histogram; __GLeeGLLoadFunction[152]=__GLeeLink_GL_EXT_convolution; __GLeeGLLoadFunction[153]=__GLeeLink_GL_SGI_color_matrix; __GLeeGLLoadFunction[154]=__GLeeLink_GL_SGI_color_table; __GLeeGLLoadFunction[155]=__GLeeLink_GL_SGIS_pixel_texture; __GLeeGLLoadFunction[156]=__GLeeLink_GL_SGIX_pixel_texture; __GLeeGLLoadFunction[157]=__GLeeLink_GL_SGIS_texture4D; __GLeeGLLoadFunction[158]=__GLeeLink_GL_SGI_texture_color_table; __GLeeGLLoadFunction[159]=__GLeeLink_GL_EXT_cmyka; __GLeeGLLoadFunction[160]=__GLeeLink_GL_EXT_texture_object; __GLeeGLLoadFunction[161]=__GLeeLink_GL_SGIS_detail_texture; __GLeeGLLoadFunction[162]=__GLeeLink_GL_SGIS_sharpen_texture; __GLeeGLLoadFunction[163]=__GLeeLink_GL_EXT_packed_pixels; __GLeeGLLoadFunction[164]=__GLeeLink_GL_SGIS_texture_lod; __GLeeGLLoadFunction[165]=__GLeeLink_GL_SGIS_multisample; __GLeeGLLoadFunction[166]=__GLeeLink_GL_EXT_rescale_normal; __GLeeGLLoadFunction[167]=__GLeeLink_GL_EXT_vertex_array; __GLeeGLLoadFunction[168]=__GLeeLink_GL_EXT_misc_attribute; __GLeeGLLoadFunction[169]=__GLeeLink_GL_SGIS_generate_mipmap; __GLeeGLLoadFunction[170]=__GLeeLink_GL_SGIX_clipmap; __GLeeGLLoadFunction[171]=__GLeeLink_GL_SGIX_shadow; __GLeeGLLoadFunction[172]=__GLeeLink_GL_SGIS_texture_edge_clamp; __GLeeGLLoadFunction[173]=__GLeeLink_GL_SGIS_texture_border_clamp; __GLeeGLLoadFunction[174]=__GLeeLink_GL_EXT_blend_minmax; __GLeeGLLoadFunction[175]=__GLeeLink_GL_EXT_blend_subtract; __GLeeGLLoadFunction[176]=__GLeeLink_GL_EXT_blend_logic_op; __GLeeGLLoadFunction[177]=__GLeeLink_GL_SGIX_interlace; __GLeeGLLoadFunction[178]=__GLeeLink_GL_SGIX_pixel_tiles; __GLeeGLLoadFunction[179]=__GLeeLink_GL_SGIS_texture_select; __GLeeGLLoadFunction[180]=__GLeeLink_GL_SGIX_sprite; __GLeeGLLoadFunction[181]=__GLeeLink_GL_SGIX_texture_multi_buffer; __GLeeGLLoadFunction[182]=__GLeeLink_GL_EXT_point_parameters; __GLeeGLLoadFunction[183]=__GLeeLink_GL_SGIS_point_parameters; __GLeeGLLoadFunction[184]=__GLeeLink_GL_SGIX_instruments; __GLeeGLLoadFunction[185]=__GLeeLink_GL_SGIX_texture_scale_bias; __GLeeGLLoadFunction[186]=__GLeeLink_GL_SGIX_framezoom; __GLeeGLLoadFunction[187]=__GLeeLink_GL_SGIX_tag_sample_buffer; __GLeeGLLoadFunction[188]=__GLeeLink_GL_FfdMaskSGIX; __GLeeGLLoadFunction[189]=__GLeeLink_GL_SGIX_polynomial_ffd; __GLeeGLLoadFunction[190]=__GLeeLink_GL_SGIX_reference_plane; __GLeeGLLoadFunction[191]=__GLeeLink_GL_SGIX_flush_raster; __GLeeGLLoadFunction[192]=__GLeeLink_GL_SGIX_depth_texture; __GLeeGLLoadFunction[193]=__GLeeLink_GL_SGIS_fog_function; __GLeeGLLoadFunction[194]=__GLeeLink_GL_SGIX_fog_offset; __GLeeGLLoadFunction[195]=__GLeeLink_GL_HP_image_transform; __GLeeGLLoadFunction[196]=__GLeeLink_GL_HP_convolution_border_modes; __GLeeGLLoadFunction[197]=__GLeeLink_GL_INGR_palette_buffer; __GLeeGLLoadFunction[198]=__GLeeLink_GL_SGIX_texture_add_env; __GLeeGLLoadFunction[199]=__GLeeLink_GL_EXT_color_subtable; __GLeeGLLoadFunction[200]=__GLeeLink_GL_PGI_vertex_hints; __GLeeGLLoadFunction[201]=__GLeeLink_GL_PGI_misc_hints; __GLeeGLLoadFunction[202]=__GLeeLink_GL_EXT_paletted_texture; __GLeeGLLoadFunction[203]=__GLeeLink_GL_EXT_clip_volume_hint; __GLeeGLLoadFunction[204]=__GLeeLink_GL_SGIX_list_priority; __GLeeGLLoadFunction[205]=__GLeeLink_GL_SGIX_ir_instrument1; __GLeeGLLoadFunction[206]=__GLeeLink_GL_SGIX_calligraphic_fragment; __GLeeGLLoadFunction[207]=__GLeeLink_GL_SGIX_texture_lod_bias; __GLeeGLLoadFunction[208]=__GLeeLink_GL_SGIX_shadow_ambient; __GLeeGLLoadFunction[209]=__GLeeLink_GL_EXT_index_texture; __GLeeGLLoadFunction[210]=__GLeeLink_GL_EXT_index_material; __GLeeGLLoadFunction[211]=__GLeeLink_GL_EXT_index_func; __GLeeGLLoadFunction[212]=__GLeeLink_GL_EXT_index_array_formats; __GLeeGLLoadFunction[213]=__GLeeLink_GL_EXT_compiled_vertex_array; __GLeeGLLoadFunction[214]=__GLeeLink_GL_EXT_cull_vertex; __GLeeGLLoadFunction[215]=__GLeeLink_GL_SGIX_ycrcb; __GLeeGLLoadFunction[216]=__GLeeLink_GL_SGIX_fragment_lighting; __GLeeGLLoadFunction[217]=__GLeeLink_GL_IBM_rasterpos_clip; __GLeeGLLoadFunction[218]=__GLeeLink_GL_HP_texture_lighting; __GLeeGLLoadFunction[219]=__GLeeLink_GL_EXT_draw_range_elements; __GLeeGLLoadFunction[220]=__GLeeLink_GL_WIN_phong_shading; __GLeeGLLoadFunction[221]=__GLeeLink_GL_WIN_specular_fog; __GLeeGLLoadFunction[222]=__GLeeLink_GL_EXT_light_texture; __GLeeGLLoadFunction[223]=__GLeeLink_GL_SGIX_blend_alpha_minmax; __GLeeGLLoadFunction[224]=__GLeeLink_GL_SGIX_impact_pixel_texture; __GLeeGLLoadFunction[225]=__GLeeLink_GL_EXT_bgra; __GLeeGLLoadFunction[226]=__GLeeLink_GL_SGIX_async; __GLeeGLLoadFunction[227]=__GLeeLink_GL_SGIX_async_pixel; __GLeeGLLoadFunction[228]=__GLeeLink_GL_SGIX_async_histogram; __GLeeGLLoadFunction[229]=__GLeeLink_GL_INTEL_texture_scissor; __GLeeGLLoadFunction[230]=__GLeeLink_GL_INTEL_parallel_arrays; __GLeeGLLoadFunction[231]=__GLeeLink_GL_HP_occlusion_test; __GLeeGLLoadFunction[232]=__GLeeLink_GL_EXT_pixel_transform; __GLeeGLLoadFunction[233]=__GLeeLink_GL_EXT_pixel_transform_color_table; __GLeeGLLoadFunction[234]=__GLeeLink_GL_EXT_shared_texture_palette; __GLeeGLLoadFunction[235]=__GLeeLink_GL_EXT_separate_specular_color; __GLeeGLLoadFunction[236]=__GLeeLink_GL_EXT_secondary_color; __GLeeGLLoadFunction[237]=__GLeeLink_GL_EXT_texture_perturb_normal; __GLeeGLLoadFunction[238]=__GLeeLink_GL_EXT_multi_draw_arrays; __GLeeGLLoadFunction[239]=__GLeeLink_GL_EXT_fog_coord; __GLeeGLLoadFunction[240]=__GLeeLink_GL_REND_screen_coordinates; __GLeeGLLoadFunction[241]=__GLeeLink_GL_EXT_coordinate_frame; __GLeeGLLoadFunction[242]=__GLeeLink_GL_EXT_texture_env_combine; __GLeeGLLoadFunction[243]=__GLeeLink_GL_APPLE_specular_vector; __GLeeGLLoadFunction[244]=__GLeeLink_GL_APPLE_transform_hint; __GLeeGLLoadFunction[245]=__GLeeLink_GL_SGIX_fog_scale; __GLeeGLLoadFunction[246]=__GLeeLink_GL_SUNX_constant_data; __GLeeGLLoadFunction[247]=__GLeeLink_GL_SUN_global_alpha; __GLeeGLLoadFunction[248]=__GLeeLink_GL_SUN_triangle_list; __GLeeGLLoadFunction[249]=__GLeeLink_GL_SUN_vertex; __GLeeGLLoadFunction[250]=__GLeeLink_GL_EXT_blend_func_separate; __GLeeGLLoadFunction[251]=__GLeeLink_GL_INGR_color_clamp; __GLeeGLLoadFunction[252]=__GLeeLink_GL_INGR_interlace_read; __GLeeGLLoadFunction[253]=__GLeeLink_GL_EXT_stencil_wrap; __GLeeGLLoadFunction[254]=__GLeeLink_GL_EXT_422_pixels; __GLeeGLLoadFunction[255]=__GLeeLink_GL_NV_texgen_reflection; __GLeeGLLoadFunction[256]=__GLeeLink_GL_EXT_texture_cube_map; __GLeeGLLoadFunction[257]=__GLeeLink_GL_SUN_convolution_border_modes; __GLeeGLLoadFunction[258]=__GLeeLink_GL_EXT_texture_env_add; __GLeeGLLoadFunction[259]=__GLeeLink_GL_EXT_texture_lod_bias; __GLeeGLLoadFunction[260]=__GLeeLink_GL_EXT_texture_filter_anisotropic; __GLeeGLLoadFunction[261]=__GLeeLink_GL_EXT_vertex_weighting; __GLeeGLLoadFunction[262]=__GLeeLink_GL_NV_light_max_exponent; __GLeeGLLoadFunction[263]=__GLeeLink_GL_NV_vertex_array_range; __GLeeGLLoadFunction[264]=__GLeeLink_GL_NV_register_combiners; __GLeeGLLoadFunction[265]=__GLeeLink_GL_NV_fog_distance; __GLeeGLLoadFunction[266]=__GLeeLink_GL_NV_texgen_emboss; __GLeeGLLoadFunction[267]=__GLeeLink_GL_NV_blend_square; __GLeeGLLoadFunction[268]=__GLeeLink_GL_NV_texture_env_combine4; __GLeeGLLoadFunction[269]=__GLeeLink_GL_MESA_resize_buffers; __GLeeGLLoadFunction[270]=__GLeeLink_GL_MESA_window_pos; __GLeeGLLoadFunction[271]=__GLeeLink_GL_EXT_texture_compression_s3tc; __GLeeGLLoadFunction[272]=__GLeeLink_GL_IBM_cull_vertex; __GLeeGLLoadFunction[273]=__GLeeLink_GL_IBM_multimode_draw_arrays; __GLeeGLLoadFunction[274]=__GLeeLink_GL_IBM_vertex_array_lists; __GLeeGLLoadFunction[275]=__GLeeLink_GL_SGIX_subsample; __GLeeGLLoadFunction[276]=__GLeeLink_GL_SGIX_ycrcb_subsample; __GLeeGLLoadFunction[277]=__GLeeLink_GL_SGIX_ycrcba; __GLeeGLLoadFunction[278]=__GLeeLink_GL_SGI_depth_pass_instrument; __GLeeGLLoadFunction[279]=__GLeeLink_GL_3DFX_texture_compression_FXT1; __GLeeGLLoadFunction[280]=__GLeeLink_GL_3DFX_multisample; __GLeeGLLoadFunction[281]=__GLeeLink_GL_3DFX_tbuffer; __GLeeGLLoadFunction[282]=__GLeeLink_GL_EXT_multisample; __GLeeGLLoadFunction[283]=__GLeeLink_GL_SGIX_vertex_preclip; __GLeeGLLoadFunction[284]=__GLeeLink_GL_SGIX_convolution_accuracy; __GLeeGLLoadFunction[285]=__GLeeLink_GL_SGIX_resample; __GLeeGLLoadFunction[286]=__GLeeLink_GL_SGIS_point_line_texgen; __GLeeGLLoadFunction[287]=__GLeeLink_GL_SGIS_texture_color_mask; __GLeeGLLoadFunction[288]=__GLeeLink_GL_EXT_texture_env_dot3; __GLeeGLLoadFunction[289]=__GLeeLink_GL_ATI_texture_mirror_once; __GLeeGLLoadFunction[290]=__GLeeLink_GL_NV_fence; __GLeeGLLoadFunction[291]=__GLeeLink_GL_IBM_texture_mirrored_repeat; __GLeeGLLoadFunction[292]=__GLeeLink_GL_NV_evaluators; __GLeeGLLoadFunction[293]=__GLeeLink_GL_NV_packed_depth_stencil; __GLeeGLLoadFunction[294]=__GLeeLink_GL_NV_register_combiners2; __GLeeGLLoadFunction[295]=__GLeeLink_GL_NV_texture_compression_vtc; __GLeeGLLoadFunction[296]=__GLeeLink_GL_NV_texture_rectangle; __GLeeGLLoadFunction[297]=__GLeeLink_GL_NV_texture_shader; __GLeeGLLoadFunction[298]=__GLeeLink_GL_NV_texture_shader2; __GLeeGLLoadFunction[299]=__GLeeLink_GL_NV_vertex_array_range2; __GLeeGLLoadFunction[300]=__GLeeLink_GL_NV_vertex_program; __GLeeGLLoadFunction[301]=__GLeeLink_GL_SGIX_texture_coordinate_clamp; __GLeeGLLoadFunction[302]=__GLeeLink_GL_SGIX_scalebias_hint; __GLeeGLLoadFunction[303]=__GLeeLink_GL_OML_interlace; __GLeeGLLoadFunction[304]=__GLeeLink_GL_OML_subsample; __GLeeGLLoadFunction[305]=__GLeeLink_GL_OML_resample; __GLeeGLLoadFunction[306]=__GLeeLink_GL_NV_copy_depth_to_color; __GLeeGLLoadFunction[307]=__GLeeLink_GL_ATI_envmap_bumpmap; __GLeeGLLoadFunction[308]=__GLeeLink_GL_ATI_fragment_shader; __GLeeGLLoadFunction[309]=__GLeeLink_GL_ATI_pn_triangles; __GLeeGLLoadFunction[310]=__GLeeLink_GL_ATI_vertex_array_object; __GLeeGLLoadFunction[311]=__GLeeLink_GL_EXT_vertex_shader; __GLeeGLLoadFunction[312]=__GLeeLink_GL_ATI_vertex_streams; __GLeeGLLoadFunction[313]=__GLeeLink_GL_ATI_element_array; __GLeeGLLoadFunction[314]=__GLeeLink_GL_SUN_mesh_array; __GLeeGLLoadFunction[315]=__GLeeLink_GL_SUN_slice_accum; __GLeeGLLoadFunction[316]=__GLeeLink_GL_NV_multisample_filter_hint; __GLeeGLLoadFunction[317]=__GLeeLink_GL_NV_depth_clamp; __GLeeGLLoadFunction[318]=__GLeeLink_GL_NV_occlusion_query; __GLeeGLLoadFunction[319]=__GLeeLink_GL_NV_point_sprite; __GLeeGLLoadFunction[320]=__GLeeLink_GL_NV_texture_shader3; __GLeeGLLoadFunction[321]=__GLeeLink_GL_NV_vertex_program1_1; __GLeeGLLoadFunction[322]=__GLeeLink_GL_EXT_shadow_funcs; __GLeeGLLoadFunction[323]=__GLeeLink_GL_EXT_stencil_two_side; __GLeeGLLoadFunction[324]=__GLeeLink_GL_ATI_text_fragment_shader; __GLeeGLLoadFunction[325]=__GLeeLink_GL_APPLE_client_storage; __GLeeGLLoadFunction[326]=__GLeeLink_GL_APPLE_element_array; __GLeeGLLoadFunction[327]=__GLeeLink_GL_APPLE_fence; __GLeeGLLoadFunction[328]=__GLeeLink_GL_APPLE_vertex_array_object; __GLeeGLLoadFunction[329]=__GLeeLink_GL_APPLE_vertex_array_range; __GLeeGLLoadFunction[330]=__GLeeLink_GL_APPLE_ycbcr_422; __GLeeGLLoadFunction[331]=__GLeeLink_GL_S3_s3tc; __GLeeGLLoadFunction[332]=__GLeeLink_GL_ATI_draw_buffers; __GLeeGLLoadFunction[333]=__GLeeLink_GL_ATI_pixel_format_float; __GLeeGLLoadFunction[334]=__GLeeLink_GL_ATI_texture_env_combine3; __GLeeGLLoadFunction[335]=__GLeeLink_GL_ATI_texture_float; __GLeeGLLoadFunction[336]=__GLeeLink_GL_NV_float_buffer; __GLeeGLLoadFunction[337]=__GLeeLink_GL_NV_fragment_program; __GLeeGLLoadFunction[338]=__GLeeLink_GL_NV_half_float; __GLeeGLLoadFunction[339]=__GLeeLink_GL_NV_pixel_data_range; __GLeeGLLoadFunction[340]=__GLeeLink_GL_NV_primitive_restart; __GLeeGLLoadFunction[341]=__GLeeLink_GL_NV_texture_expand_normal; __GLeeGLLoadFunction[342]=__GLeeLink_GL_NV_vertex_program2; __GLeeGLLoadFunction[343]=__GLeeLink_GL_ATI_map_object_buffer; __GLeeGLLoadFunction[344]=__GLeeLink_GL_ATI_separate_stencil; __GLeeGLLoadFunction[345]=__GLeeLink_GL_ATI_vertex_attrib_array_object; __GLeeGLLoadFunction[346]=__GLeeLink_GL_OES_byte_coordinates; __GLeeGLLoadFunction[347]=__GLeeLink_GL_OES_fixed_point; __GLeeGLLoadFunction[348]=__GLeeLink_GL_OES_single_precision; __GLeeGLLoadFunction[349]=__GLeeLink_GL_OES_compressed_paletted_texture; __GLeeGLLoadFunction[350]=__GLeeLink_GL_OES_read_format; __GLeeGLLoadFunction[351]=__GLeeLink_GL_OES_query_matrix; __GLeeGLLoadFunction[352]=__GLeeLink_GL_EXT_depth_bounds_test; __GLeeGLLoadFunction[353]=__GLeeLink_GL_EXT_texture_mirror_clamp; __GLeeGLLoadFunction[354]=__GLeeLink_GL_EXT_blend_equation_separate; __GLeeGLLoadFunction[355]=__GLeeLink_GL_MESA_pack_invert; __GLeeGLLoadFunction[356]=__GLeeLink_GL_MESA_ycbcr_texture; __GLeeGLLoadFunction[357]=__GLeeLink_GL_EXT_pixel_buffer_object; __GLeeGLLoadFunction[358]=__GLeeLink_GL_NV_fragment_program_option; __GLeeGLLoadFunction[359]=__GLeeLink_GL_NV_fragment_program2; __GLeeGLLoadFunction[360]=__GLeeLink_GL_NV_vertex_program2_option; __GLeeGLLoadFunction[361]=__GLeeLink_GL_NV_vertex_program3; __GLeeGLLoadFunction[362]=__GLeeLink_GL_EXT_framebuffer_object; __GLeeGLLoadFunction[363]=__GLeeLink_GL_GREMEDY_string_marker; __GLeeGLLoadFunction[364]=__GLeeLink_GL_EXT_packed_depth_stencil; __GLeeGLLoadFunction[365]=__GLeeLink_GL_EXT_stencil_clear_tag; __GLeeGLLoadFunction[366]=__GLeeLink_GL_EXT_texture_sRGB; __GLeeGLLoadFunction[367]=__GLeeLink_GL_EXT_framebuffer_blit; __GLeeGLLoadFunction[368]=__GLeeLink_GL_EXT_framebuffer_multisample; __GLeeGLLoadFunction[369]=__GLeeLink_GL_MESAX_texture_stack; __GLeeGLLoadFunction[370]=__GLeeLink_GL_EXT_timer_query; __GLeeGLLoadFunction[371]=__GLeeLink_GL_EXT_gpu_program_parameters; __GLeeGLLoadFunction[372]=__GLeeLink_GL_APPLE_flush_buffer_range; __GLeeGLLoadFunction[373]=__GLeeLink_GL_EXT_gpu_shader4; __GLeeGLLoadFunction[374]=__GLeeLink_GL_EXT_draw_instanced; __GLeeGLLoadFunction[375]=__GLeeLink_GL_EXT_packed_float; __GLeeGLLoadFunction[376]=__GLeeLink_GL_EXT_texture_array; __GLeeGLLoadFunction[377]=__GLeeLink_GL_EXT_texture_buffer_object; __GLeeGLLoadFunction[378]=__GLeeLink_GL_EXT_texture_compression_latc; __GLeeGLLoadFunction[379]=__GLeeLink_GL_EXT_texture_compression_rgtc; __GLeeGLLoadFunction[380]=__GLeeLink_GL_EXT_texture_shared_exponent; __GLeeGLLoadFunction[381]=__GLeeLink_GL_NV_depth_buffer_float; __GLeeGLLoadFunction[382]=__GLeeLink_GL_NV_framebuffer_multisample_coverage; __GLeeGLLoadFunction[383]=__GLeeLink_GL_EXT_framebuffer_sRGB; __GLeeGLLoadFunction[384]=__GLeeLink_GL_NV_geometry_shader4; __GLeeGLLoadFunction[385]=__GLeeLink_GL_NV_parameter_buffer_object; __GLeeGLLoadFunction[386]=__GLeeLink_GL_EXT_draw_buffers2; __GLeeGLLoadFunction[387]=__GLeeLink_GL_NV_transform_feedback; __GLeeGLLoadFunction[388]=__GLeeLink_GL_EXT_bindable_uniform; __GLeeGLLoadFunction[389]=__GLeeLink_GL_EXT_texture_integer; __GLeeGLLoadFunction[390]=__GLeeLink_GL_GREMEDY_frame_terminator; __GLeeGLLoadFunction[391]=__GLeeLink_GL_NV_conditional_render; __GLeeGLLoadFunction[392]=__GLeeLink_GL_NV_present_video; __GLeeGLLoadFunction[393]=__GLeeLink_GL_EXT_transform_feedback; __GLeeGLLoadFunction[394]=__GLeeLink_GL_EXT_direct_state_access; __GLeeGLLoadFunction[395]=__GLeeLink_GL_EXT_vertex_array_bgra; __GLeeGLLoadFunction[396]=__GLeeLink_GL_EXT_texture_swizzle; __GLeeGLLoadFunction[397]=__GLeeLink_GL_NV_explicit_multisample; __GLeeGLLoadFunction[398]=__GLeeLink_GL_NV_transform_feedback2; __GLeeGLLoadFunction[399]=__GLeeLink_GL_ATI_meminfo; __GLeeGLLoadFunction[400]=__GLeeLink_GL_AMD_performance_monitor; __GLeeGLLoadFunction[401]=__GLeeLink_GL_AMD_texture_texture4; __GLeeGLLoadFunction[402]=__GLeeLink_GL_AMD_vertex_shader_tesselator; __GLeeGLLoadFunction[403]=__GLeeLink_GL_EXT_provoking_vertex; __GLeeGLLoadFunction[404]=__GLeeLink_GL_EXT_texture_snorm; __GLeeGLLoadFunction[405]=__GLeeLink_GL_AMD_draw_buffers_blend; __GLeeGLLoadFunction[406]=__GLeeLink_GL_APPLE_texture_range; __GLeeGLLoadFunction[407]=__GLeeLink_GL_APPLE_float_pixels; __GLeeGLLoadFunction[408]=__GLeeLink_GL_APPLE_vertex_program_evaluators; __GLeeGLLoadFunction[409]=__GLeeLink_GL_APPLE_aux_depth_stencil; __GLeeGLLoadFunction[410]=__GLeeLink_GL_APPLE_object_purgeable; __GLeeGLLoadFunction[411]=__GLeeLink_GL_APPLE_row_bytes; __GLeeGLLoadFunction[412]=__GLeeLink_GL_APPLE_rgb_422; __GLeeGLLoadFunction[413]=__GLeeLink_GL_NV_video_capture; __GLeeGLLoadFunction[414]=__GLeeLink_GL_NV_copy_image; __GLeeGLLoadFunction[415]=__GLeeLink_GL_EXT_separate_shader_objects; __GLeeGLLoadFunction[416]=__GLeeLink_GL_NV_parameter_buffer_object2; __GLeeGLLoadFunction[417]=__GLeeLink_GL_NV_shader_buffer_load; __GLeeGLLoadFunction[418]=__GLeeLink_GL_NV_vertex_buffer_unified_memory; __GLeeGLLoadFunction[419]=__GLeeLink_GL_NV_texture_barrier; __GLeeGLLoadFunction[420]=__GLeeLink_GL_AMD_shader_stencil_export; __GLeeGLLoadFunction[421]=__GLeeLink_GL_AMD_seamless_cubemap_per_texture; __GLeeGLLoadFunction[422]=__GLeeLink_GL_AMD_conservative_depth; __GLeeGLLoadFunction[423]=__GLeeLink_GL_EXT_shader_image_load_store; __GLeeGLLoadFunction[424]=__GLeeLink_GL_EXT_vertex_attrib_64bit; __GLeeGLLoadFunction[425]=__GLeeLink_GL_NV_gpu_program5; __GLeeGLLoadFunction[426]=__GLeeLink_GL_NV_gpu_shader5; __GLeeGLLoadFunction[427]=__GLeeLink_GL_NV_shader_buffer_store; __GLeeGLLoadFunction[428]=__GLeeLink_GL_NV_tessellation_program5; __GLeeGLLoadFunction[429]=__GLeeLink_GL_NV_vertex_attrib_integer_64bit; __GLeeGLLoadFunction[430]=__GLeeLink_GL_NV_multisample_coverage; __GLeeGLLoadFunction[431]=__GLeeLink_GL_AMD_name_gen_delete; __GLeeGLLoadFunction[432]=__GLeeLink_GL_AMD_debug_output; __GLeeGLLoadFunction[433]=__GLeeLink_GL_AMD_transform_feedback3_lines_triangles; __GLeeGLLoadFunction[434]=__GLeeLink_GL_AMD_depth_clamp_separate; __GLeeGLLoadFunction[435]=__GLeeLink_GL_EXT_texture_sRGB_decode; __GLeeGLLoadFunction[436]=__GLeeLink_GL_NV_texture_multisample; __GLeeGLLoadFunction[437]=__GLeeLink_GL_AMD_blend_minmax_factor; __GLeeGLLoadFunction[438]=__GLeeLink_GL_AMD_sample_positions; __GLeeGLLoadFunction[439]=__GLeeLink_GL_EXT_x11_sync_object; __GLeeGLLoadFunction[440]=__GLeeLink_GL_AMD_multi_draw_indirect; __GLeeGLLoadFunction[441]=__GLeeLink_GL_EXT_framebuffer_multisample_blit_scaled; __GLeeGLLoadFunction[442]=__GLeeLink_GL_NV_path_rendering; __GLeeGLLoadFunction[443]=__GLeeLink_GL_AMD_pinned_memory; __GLeeGLLoadFunction[444]=__GLeeLink_GL_AMD_stencil_operation_extended; __GLeeGLLoadFunction[445]=__GLeeLink_GL_AMD_vertex_shader_viewport_index; __GLeeGLLoadFunction[446]=__GLeeLink_GL_AMD_vertex_shader_layer; __GLeeGLLoadFunction[447]=__GLeeLink_GL_NV_bindless_texture; __GLeeGLLoadFunction[448]=__GLeeLink_GL_NV_shader_atomic_float; __GLeeGLLoadFunction[449]=__GLeeLink_GL_AMD_query_buffer_object; __GLeeGLLoadFunction[450]=__GLeeLink_GL_NV_compute_program5; __GLeeGLLoadFunction[451]=__GLeeLink_GL_NV_shader_storage_buffer_object; __GLeeGLLoadFunction[452]=__GLeeLink_GL_NV_shader_atomic_counters; __GLeeGLLoadFunction[453]=__GLeeLink_GL_NV_deep_texture3D; __GLeeGLLoadFunction[454]=__GLeeLink_GL_NVX_conditional_render; __GLeeGLLoadFunction[455]=__GLeeLink_GL_AMD_sparse_texture; __GLeeGLLoadFunction[456]=__GLeeLink_GL_AMD_shader_trinary_minmax; __GLeeGLLoadFunction[457]=__GLeeLink_GL_INTEL_map_texture; __GLeeGLLoadFunction[458]=__GLeeLink_GL_NV_draw_texture; __GLeeGLLoadFunction[459]=__GLeeLink_GL_SGIX_texture_select; __GLeeGLLoadFunction[460]=__GLeeLink_GL_INGR_blend_func_separate; __GLeeGLLoadFunction[461]=__GLeeLink_GL_SGIX_depth_pass_instrument; __GLeeGLLoadFunction[462]=__GLeeLink_GL_SGIX_igloo_interface; } #ifdef _WIN32 GLuint __GLeeLink_WGL_ARB_buffer_region(void) { GLint nLinked=0; #ifdef __GLEE_WGL_ARB_buffer_region if ((GLeeFuncPtr_wglCreateBufferRegionARB = (GLEEPFNWGLCREATEBUFFERREGIONARBPROC) __GLeeGetProcAddress("wglCreateBufferRegionARB"))!=0) nLinked++; if ((GLeeFuncPtr_wglDeleteBufferRegionARB = (GLEEPFNWGLDELETEBUFFERREGIONARBPROC) __GLeeGetProcAddress("wglDeleteBufferRegionARB"))!=0) nLinked++; if ((GLeeFuncPtr_wglSaveBufferRegionARB = (GLEEPFNWGLSAVEBUFFERREGIONARBPROC) __GLeeGetProcAddress("wglSaveBufferRegionARB"))!=0) nLinked++; if ((GLeeFuncPtr_wglRestoreBufferRegionARB = (GLEEPFNWGLRESTOREBUFFERREGIONARBPROC) __GLeeGetProcAddress("wglRestoreBufferRegionARB"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_ARB_multisample(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_WGL_ARB_extensions_string(void) { GLint nLinked=0; #ifdef __GLEE_WGL_ARB_extensions_string if ((GLeeFuncPtr_wglGetExtensionsStringARB = (GLEEPFNWGLGETEXTENSIONSSTRINGARBPROC) __GLeeGetProcAddress("wglGetExtensionsStringARB"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_ARB_pixel_format(void) { GLint nLinked=0; #ifdef __GLEE_WGL_ARB_pixel_format if ((GLeeFuncPtr_wglGetPixelFormatAttribivARB = (GLEEPFNWGLGETPIXELFORMATATTRIBIVARBPROC) __GLeeGetProcAddress("wglGetPixelFormatAttribivARB"))!=0) nLinked++; if ((GLeeFuncPtr_wglGetPixelFormatAttribfvARB = (GLEEPFNWGLGETPIXELFORMATATTRIBFVARBPROC) __GLeeGetProcAddress("wglGetPixelFormatAttribfvARB"))!=0) nLinked++; if ((GLeeFuncPtr_wglChoosePixelFormatARB = (GLEEPFNWGLCHOOSEPIXELFORMATARBPROC) __GLeeGetProcAddress("wglChoosePixelFormatARB"))!=0) nLinked++; #endif if (nLinked==3) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_ARB_make_current_read(void) { GLint nLinked=0; #ifdef __GLEE_WGL_ARB_make_current_read if ((GLeeFuncPtr_wglMakeContextCurrentARB = (GLEEPFNWGLMAKECONTEXTCURRENTARBPROC) __GLeeGetProcAddress("wglMakeContextCurrentARB"))!=0) nLinked++; if ((GLeeFuncPtr_wglGetCurrentReadDCARB = (GLEEPFNWGLGETCURRENTREADDCARBPROC) __GLeeGetProcAddress("wglGetCurrentReadDCARB"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_ARB_pbuffer(void) { GLint nLinked=0; #ifdef __GLEE_WGL_ARB_pbuffer if ((GLeeFuncPtr_wglCreatePbufferARB = (GLEEPFNWGLCREATEPBUFFERARBPROC) __GLeeGetProcAddress("wglCreatePbufferARB"))!=0) nLinked++; if ((GLeeFuncPtr_wglGetPbufferDCARB = (GLEEPFNWGLGETPBUFFERDCARBPROC) __GLeeGetProcAddress("wglGetPbufferDCARB"))!=0) nLinked++; if ((GLeeFuncPtr_wglReleasePbufferDCARB = (GLEEPFNWGLRELEASEPBUFFERDCARBPROC) __GLeeGetProcAddress("wglReleasePbufferDCARB"))!=0) nLinked++; if ((GLeeFuncPtr_wglDestroyPbufferARB = (GLEEPFNWGLDESTROYPBUFFERARBPROC) __GLeeGetProcAddress("wglDestroyPbufferARB"))!=0) nLinked++; if ((GLeeFuncPtr_wglQueryPbufferARB = (GLEEPFNWGLQUERYPBUFFERARBPROC) __GLeeGetProcAddress("wglQueryPbufferARB"))!=0) nLinked++; #endif if (nLinked==5) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_ARB_render_texture(void) { GLint nLinked=0; #ifdef __GLEE_WGL_ARB_render_texture if ((GLeeFuncPtr_wglBindTexImageARB = (GLEEPFNWGLBINDTEXIMAGEARBPROC) __GLeeGetProcAddress("wglBindTexImageARB"))!=0) nLinked++; if ((GLeeFuncPtr_wglReleaseTexImageARB = (GLEEPFNWGLRELEASETEXIMAGEARBPROC) __GLeeGetProcAddress("wglReleaseTexImageARB"))!=0) nLinked++; if ((GLeeFuncPtr_wglSetPbufferAttribARB = (GLEEPFNWGLSETPBUFFERATTRIBARBPROC) __GLeeGetProcAddress("wglSetPbufferAttribARB"))!=0) nLinked++; #endif if (nLinked==3) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_ARB_pixel_format_float(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_WGL_ARB_framebuffer_sRGB(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_WGL_ARB_create_context(void) { GLint nLinked=0; #ifdef __GLEE_WGL_ARB_create_context if ((GLeeFuncPtr_wglCreateContextAttribsARB = (GLEEPFNWGLCREATECONTEXTATTRIBSARBPROC) __GLeeGetProcAddress("wglCreateContextAttribsARB"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_ARB_create_context_profile(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_WGL_ARB_create_context_robustness(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_WGL_EXT_make_current_read(void) { GLint nLinked=0; #ifdef __GLEE_WGL_EXT_make_current_read if ((GLeeFuncPtr_wglMakeContextCurrentEXT = (GLEEPFNWGLMAKECONTEXTCURRENTEXTPROC) __GLeeGetProcAddress("wglMakeContextCurrentEXT"))!=0) nLinked++; if ((GLeeFuncPtr_wglGetCurrentReadDCEXT = (GLEEPFNWGLGETCURRENTREADDCEXTPROC) __GLeeGetProcAddress("wglGetCurrentReadDCEXT"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_EXT_pixel_format(void) { GLint nLinked=0; #ifdef __GLEE_WGL_EXT_pixel_format if ((GLeeFuncPtr_wglGetPixelFormatAttribivEXT = (GLEEPFNWGLGETPIXELFORMATATTRIBIVEXTPROC) __GLeeGetProcAddress("wglGetPixelFormatAttribivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_wglGetPixelFormatAttribfvEXT = (GLEEPFNWGLGETPIXELFORMATATTRIBFVEXTPROC) __GLeeGetProcAddress("wglGetPixelFormatAttribfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_wglChoosePixelFormatEXT = (GLEEPFNWGLCHOOSEPIXELFORMATEXTPROC) __GLeeGetProcAddress("wglChoosePixelFormatEXT"))!=0) nLinked++; #endif if (nLinked==3) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_EXT_pbuffer(void) { GLint nLinked=0; #ifdef __GLEE_WGL_EXT_pbuffer if ((GLeeFuncPtr_wglCreatePbufferEXT = (GLEEPFNWGLCREATEPBUFFEREXTPROC) __GLeeGetProcAddress("wglCreatePbufferEXT"))!=0) nLinked++; if ((GLeeFuncPtr_wglGetPbufferDCEXT = (GLEEPFNWGLGETPBUFFERDCEXTPROC) __GLeeGetProcAddress("wglGetPbufferDCEXT"))!=0) nLinked++; if ((GLeeFuncPtr_wglReleasePbufferDCEXT = (GLEEPFNWGLRELEASEPBUFFERDCEXTPROC) __GLeeGetProcAddress("wglReleasePbufferDCEXT"))!=0) nLinked++; if ((GLeeFuncPtr_wglDestroyPbufferEXT = (GLEEPFNWGLDESTROYPBUFFEREXTPROC) __GLeeGetProcAddress("wglDestroyPbufferEXT"))!=0) nLinked++; if ((GLeeFuncPtr_wglQueryPbufferEXT = (GLEEPFNWGLQUERYPBUFFEREXTPROC) __GLeeGetProcAddress("wglQueryPbufferEXT"))!=0) nLinked++; #endif if (nLinked==5) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_EXT_depth_float(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_WGL_3DFX_multisample(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_WGL_EXT_multisample(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_WGL_I3D_digital_video_control(void) { GLint nLinked=0; #ifdef __GLEE_WGL_I3D_digital_video_control if ((GLeeFuncPtr_wglGetDigitalVideoParametersI3D = (GLEEPFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC) __GLeeGetProcAddress("wglGetDigitalVideoParametersI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglSetDigitalVideoParametersI3D = (GLEEPFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC) __GLeeGetProcAddress("wglSetDigitalVideoParametersI3D"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_I3D_gamma(void) { GLint nLinked=0; #ifdef __GLEE_WGL_I3D_gamma if ((GLeeFuncPtr_wglGetGammaTableParametersI3D = (GLEEPFNWGLGETGAMMATABLEPARAMETERSI3DPROC) __GLeeGetProcAddress("wglGetGammaTableParametersI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglSetGammaTableParametersI3D = (GLEEPFNWGLSETGAMMATABLEPARAMETERSI3DPROC) __GLeeGetProcAddress("wglSetGammaTableParametersI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglGetGammaTableI3D = (GLEEPFNWGLGETGAMMATABLEI3DPROC) __GLeeGetProcAddress("wglGetGammaTableI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglSetGammaTableI3D = (GLEEPFNWGLSETGAMMATABLEI3DPROC) __GLeeGetProcAddress("wglSetGammaTableI3D"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_I3D_genlock(void) { GLint nLinked=0; #ifdef __GLEE_WGL_I3D_genlock if ((GLeeFuncPtr_wglEnableGenlockI3D = (GLEEPFNWGLENABLEGENLOCKI3DPROC) __GLeeGetProcAddress("wglEnableGenlockI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglDisableGenlockI3D = (GLEEPFNWGLDISABLEGENLOCKI3DPROC) __GLeeGetProcAddress("wglDisableGenlockI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglIsEnabledGenlockI3D = (GLEEPFNWGLISENABLEDGENLOCKI3DPROC) __GLeeGetProcAddress("wglIsEnabledGenlockI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglGenlockSourceI3D = (GLEEPFNWGLGENLOCKSOURCEI3DPROC) __GLeeGetProcAddress("wglGenlockSourceI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglGetGenlockSourceI3D = (GLEEPFNWGLGETGENLOCKSOURCEI3DPROC) __GLeeGetProcAddress("wglGetGenlockSourceI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglGenlockSourceEdgeI3D = (GLEEPFNWGLGENLOCKSOURCEEDGEI3DPROC) __GLeeGetProcAddress("wglGenlockSourceEdgeI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglGetGenlockSourceEdgeI3D = (GLEEPFNWGLGETGENLOCKSOURCEEDGEI3DPROC) __GLeeGetProcAddress("wglGetGenlockSourceEdgeI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglGenlockSampleRateI3D = (GLEEPFNWGLGENLOCKSAMPLERATEI3DPROC) __GLeeGetProcAddress("wglGenlockSampleRateI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglGetGenlockSampleRateI3D = (GLEEPFNWGLGETGENLOCKSAMPLERATEI3DPROC) __GLeeGetProcAddress("wglGetGenlockSampleRateI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglGenlockSourceDelayI3D = (GLEEPFNWGLGENLOCKSOURCEDELAYI3DPROC) __GLeeGetProcAddress("wglGenlockSourceDelayI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglGetGenlockSourceDelayI3D = (GLEEPFNWGLGETGENLOCKSOURCEDELAYI3DPROC) __GLeeGetProcAddress("wglGetGenlockSourceDelayI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglQueryGenlockMaxSourceDelayI3D = (GLEEPFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC) __GLeeGetProcAddress("wglQueryGenlockMaxSourceDelayI3D"))!=0) nLinked++; #endif if (nLinked==12) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_I3D_image_buffer(void) { GLint nLinked=0; #ifdef __GLEE_WGL_I3D_image_buffer if ((GLeeFuncPtr_wglCreateImageBufferI3D = (GLEEPFNWGLCREATEIMAGEBUFFERI3DPROC) __GLeeGetProcAddress("wglCreateImageBufferI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglDestroyImageBufferI3D = (GLEEPFNWGLDESTROYIMAGEBUFFERI3DPROC) __GLeeGetProcAddress("wglDestroyImageBufferI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglAssociateImageBufferEventsI3D = (GLEEPFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC) __GLeeGetProcAddress("wglAssociateImageBufferEventsI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglReleaseImageBufferEventsI3D = (GLEEPFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC) __GLeeGetProcAddress("wglReleaseImageBufferEventsI3D"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_I3D_swap_frame_lock(void) { GLint nLinked=0; #ifdef __GLEE_WGL_I3D_swap_frame_lock if ((GLeeFuncPtr_wglEnableFrameLockI3D = (GLEEPFNWGLENABLEFRAMELOCKI3DPROC) __GLeeGetProcAddress("wglEnableFrameLockI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglDisableFrameLockI3D = (GLEEPFNWGLDISABLEFRAMELOCKI3DPROC) __GLeeGetProcAddress("wglDisableFrameLockI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglIsEnabledFrameLockI3D = (GLEEPFNWGLISENABLEDFRAMELOCKI3DPROC) __GLeeGetProcAddress("wglIsEnabledFrameLockI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglQueryFrameLockMasterI3D = (GLEEPFNWGLQUERYFRAMELOCKMASTERI3DPROC) __GLeeGetProcAddress("wglQueryFrameLockMasterI3D"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_NV_render_depth_texture(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_WGL_NV_render_texture_rectangle(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_WGL_ATI_pixel_format_float(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_WGL_NV_float_buffer(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_WGL_3DL_stereo_control(void) { GLint nLinked=0; #ifdef __GLEE_WGL_3DL_stereo_control if ((GLeeFuncPtr_wglSetStereoEmitterState3DL = (GLEEPFNWGLSETSTEREOEMITTERSTATE3DLPROC) __GLeeGetProcAddress("wglSetStereoEmitterState3DL"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_EXT_pixel_format_packed_float(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_WGL_EXT_framebuffer_sRGB(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_WGL_NV_present_video(void) { GLint nLinked=0; #ifdef __GLEE_WGL_NV_present_video if ((GLeeFuncPtr_wglEnumerateVideoDevicesNV = (GLEEPFNWGLENUMERATEVIDEODEVICESNVPROC) __GLeeGetProcAddress("wglEnumerateVideoDevicesNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglBindVideoDeviceNV = (GLEEPFNWGLBINDVIDEODEVICENVPROC) __GLeeGetProcAddress("wglBindVideoDeviceNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglQueryCurrentContextNV = (GLEEPFNWGLQUERYCURRENTCONTEXTNVPROC) __GLeeGetProcAddress("wglQueryCurrentContextNV"))!=0) nLinked++; #endif if (nLinked==3) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_NV_swap_group(void) { GLint nLinked=0; #ifdef __GLEE_WGL_NV_swap_group if ((GLeeFuncPtr_wglJoinSwapGroupNV = (GLEEPFNWGLJOINSWAPGROUPNVPROC) __GLeeGetProcAddress("wglJoinSwapGroupNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglBindSwapBarrierNV = (GLEEPFNWGLBINDSWAPBARRIERNVPROC) __GLeeGetProcAddress("wglBindSwapBarrierNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglQuerySwapGroupNV = (GLEEPFNWGLQUERYSWAPGROUPNVPROC) __GLeeGetProcAddress("wglQuerySwapGroupNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglQueryMaxSwapGroupsNV = (GLEEPFNWGLQUERYMAXSWAPGROUPSNVPROC) __GLeeGetProcAddress("wglQueryMaxSwapGroupsNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglQueryFrameCountNV = (GLEEPFNWGLQUERYFRAMECOUNTNVPROC) __GLeeGetProcAddress("wglQueryFrameCountNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglResetFrameCountNV = (GLEEPFNWGLRESETFRAMECOUNTNVPROC) __GLeeGetProcAddress("wglResetFrameCountNV"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_NV_gpu_affinity(void) { GLint nLinked=0; #ifdef __GLEE_WGL_NV_gpu_affinity if ((GLeeFuncPtr_wglEnumGpusNV = (GLEEPFNWGLENUMGPUSNVPROC) __GLeeGetProcAddress("wglEnumGpusNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglEnumGpuDevicesNV = (GLEEPFNWGLENUMGPUDEVICESNVPROC) __GLeeGetProcAddress("wglEnumGpuDevicesNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglCreateAffinityDCNV = (GLEEPFNWGLCREATEAFFINITYDCNVPROC) __GLeeGetProcAddress("wglCreateAffinityDCNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglEnumGpusFromAffinityDCNV = (GLEEPFNWGLENUMGPUSFROMAFFINITYDCNVPROC) __GLeeGetProcAddress("wglEnumGpusFromAffinityDCNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglDeleteDCNV = (GLEEPFNWGLDELETEDCNVPROC) __GLeeGetProcAddress("wglDeleteDCNV"))!=0) nLinked++; #endif if (nLinked==5) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_AMD_gpu_association(void) { GLint nLinked=0; #ifdef __GLEE_WGL_AMD_gpu_association if ((GLeeFuncPtr_wglGetGPUIDsAMD = (GLEEPFNWGLGETGPUIDSAMDPROC) __GLeeGetProcAddress("wglGetGPUIDsAMD"))!=0) nLinked++; if ((GLeeFuncPtr_wglGetGPUInfoAMD = (GLEEPFNWGLGETGPUINFOAMDPROC) __GLeeGetProcAddress("wglGetGPUInfoAMD"))!=0) nLinked++; if ((GLeeFuncPtr_wglGetContextGPUIDAMD = (GLEEPFNWGLGETCONTEXTGPUIDAMDPROC) __GLeeGetProcAddress("wglGetContextGPUIDAMD"))!=0) nLinked++; if ((GLeeFuncPtr_wglCreateAssociatedContextAMD = (GLEEPFNWGLCREATEASSOCIATEDCONTEXTAMDPROC) __GLeeGetProcAddress("wglCreateAssociatedContextAMD"))!=0) nLinked++; if ((GLeeFuncPtr_wglCreateAssociatedContextAttribsAMD = (GLEEPFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC) __GLeeGetProcAddress("wglCreateAssociatedContextAttribsAMD"))!=0) nLinked++; if ((GLeeFuncPtr_wglDeleteAssociatedContextAMD = (GLEEPFNWGLDELETEASSOCIATEDCONTEXTAMDPROC) __GLeeGetProcAddress("wglDeleteAssociatedContextAMD"))!=0) nLinked++; if ((GLeeFuncPtr_wglMakeAssociatedContextCurrentAMD = (GLEEPFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC) __GLeeGetProcAddress("wglMakeAssociatedContextCurrentAMD"))!=0) nLinked++; if ((GLeeFuncPtr_wglGetCurrentAssociatedContextAMD = (GLEEPFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC) __GLeeGetProcAddress("wglGetCurrentAssociatedContextAMD"))!=0) nLinked++; if ((GLeeFuncPtr_wglBlitContextFramebufferAMD = (GLEEPFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC) __GLeeGetProcAddress("wglBlitContextFramebufferAMD"))!=0) nLinked++; #endif if (nLinked==9) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_NV_copy_image(void) { GLint nLinked=0; #ifdef __GLEE_WGL_NV_copy_image if ((GLeeFuncPtr_wglCopyImageSubDataNV = (GLEEPFNWGLCOPYIMAGESUBDATANVPROC) __GLeeGetProcAddress("wglCopyImageSubDataNV"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_NV_multisample_coverage(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_WGL_EXT_create_context_es2_profile(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_WGL_NV_DX_interop(void) { GLint nLinked=0; #ifdef __GLEE_WGL_NV_DX_interop if ((GLeeFuncPtr_wglDXSetResourceShareHandleNV = (GLEEPFNWGLDXSETRESOURCESHAREHANDLENVPROC) __GLeeGetProcAddress("wglDXSetResourceShareHandleNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglDXOpenDeviceNV = (GLEEPFNWGLDXOPENDEVICENVPROC) __GLeeGetProcAddress("wglDXOpenDeviceNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglDXCloseDeviceNV = (GLEEPFNWGLDXCLOSEDEVICENVPROC) __GLeeGetProcAddress("wglDXCloseDeviceNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglDXRegisterObjectNV = (GLEEPFNWGLDXREGISTEROBJECTNVPROC) __GLeeGetProcAddress("wglDXRegisterObjectNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglDXUnregisterObjectNV = (GLEEPFNWGLDXUNREGISTEROBJECTNVPROC) __GLeeGetProcAddress("wglDXUnregisterObjectNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglDXObjectAccessNV = (GLEEPFNWGLDXOBJECTACCESSNVPROC) __GLeeGetProcAddress("wglDXObjectAccessNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglDXLockObjectsNV = (GLEEPFNWGLDXLOCKOBJECTSNVPROC) __GLeeGetProcAddress("wglDXLockObjectsNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglDXUnlockObjectsNV = (GLEEPFNWGLDXUNLOCKOBJECTSNVPROC) __GLeeGetProcAddress("wglDXUnlockObjectsNV"))!=0) nLinked++; #endif if (nLinked==8) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_NV_DX_interop2(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_WGL_EXT_swap_control_tear(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_WGL_EXT_display_color_table(void) { GLint nLinked=0; #ifdef __GLEE_WGL_EXT_display_color_table if ((GLeeFuncPtr_wglCreateDisplayColorTableEXT = (GLEEPFNWGLCREATEDISPLAYCOLORTABLEEXTPROC) __GLeeGetProcAddress("wglCreateDisplayColorTableEXT"))!=0) nLinked++; if ((GLeeFuncPtr_wglLoadDisplayColorTableEXT = (GLEEPFNWGLLOADDISPLAYCOLORTABLEEXTPROC) __GLeeGetProcAddress("wglLoadDisplayColorTableEXT"))!=0) nLinked++; if ((GLeeFuncPtr_wglBindDisplayColorTableEXT = (GLEEPFNWGLBINDDISPLAYCOLORTABLEEXTPROC) __GLeeGetProcAddress("wglBindDisplayColorTableEXT"))!=0) nLinked++; if ((GLeeFuncPtr_wglDestroyDisplayColorTableEXT = (GLEEPFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC) __GLeeGetProcAddress("wglDestroyDisplayColorTableEXT"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_EXT_extensions_string(void) { GLint nLinked=0; #ifdef __GLEE_WGL_EXT_extensions_string if ((GLeeFuncPtr_wglGetExtensionsStringEXT = (GLEEPFNWGLGETEXTENSIONSSTRINGEXTPROC) __GLeeGetProcAddress("wglGetExtensionsStringEXT"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_EXT_swap_control(void) { GLint nLinked=0; #ifdef __GLEE_WGL_EXT_swap_control if ((GLeeFuncPtr_wglSwapIntervalEXT = (GLEEPFNWGLSWAPINTERVALEXTPROC) __GLeeGetProcAddress("wglSwapIntervalEXT"))!=0) nLinked++; if ((GLeeFuncPtr_wglGetSwapIntervalEXT = (GLEEPFNWGLGETSWAPINTERVALEXTPROC) __GLeeGetProcAddress("wglGetSwapIntervalEXT"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_NV_vertex_array_range(void) { GLint nLinked=0; #ifdef __GLEE_WGL_NV_vertex_array_range if ((GLeeFuncPtr_wglAllocateMemoryNV = (GLEEPFNWGLALLOCATEMEMORYNVPROC) __GLeeGetProcAddress("wglAllocateMemoryNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglFreeMemoryNV = (GLEEPFNWGLFREEMEMORYNVPROC) __GLeeGetProcAddress("wglFreeMemoryNV"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_OML_sync_control(void) { GLint nLinked=0; #ifdef __GLEE_WGL_OML_sync_control if ((GLeeFuncPtr_wglGetSyncValuesOML = (GLEEPFNWGLGETSYNCVALUESOMLPROC) __GLeeGetProcAddress("wglGetSyncValuesOML"))!=0) nLinked++; if ((GLeeFuncPtr_wglGetMscRateOML = (GLEEPFNWGLGETMSCRATEOMLPROC) __GLeeGetProcAddress("wglGetMscRateOML"))!=0) nLinked++; if ((GLeeFuncPtr_wglSwapBuffersMscOML = (GLEEPFNWGLSWAPBUFFERSMSCOMLPROC) __GLeeGetProcAddress("wglSwapBuffersMscOML"))!=0) nLinked++; if ((GLeeFuncPtr_wglSwapLayerBuffersMscOML = (GLEEPFNWGLSWAPLAYERBUFFERSMSCOMLPROC) __GLeeGetProcAddress("wglSwapLayerBuffersMscOML"))!=0) nLinked++; if ((GLeeFuncPtr_wglWaitForMscOML = (GLEEPFNWGLWAITFORMSCOMLPROC) __GLeeGetProcAddress("wglWaitForMscOML"))!=0) nLinked++; if ((GLeeFuncPtr_wglWaitForSbcOML = (GLEEPFNWGLWAITFORSBCOMLPROC) __GLeeGetProcAddress("wglWaitForSbcOML"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_I3D_swap_frame_usage(void) { GLint nLinked=0; #ifdef __GLEE_WGL_I3D_swap_frame_usage if ((GLeeFuncPtr_wglGetFrameUsageI3D = (GLEEPFNWGLGETFRAMEUSAGEI3DPROC) __GLeeGetProcAddress("wglGetFrameUsageI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglBeginFrameTrackingI3D = (GLEEPFNWGLBEGINFRAMETRACKINGI3DPROC) __GLeeGetProcAddress("wglBeginFrameTrackingI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglEndFrameTrackingI3D = (GLEEPFNWGLENDFRAMETRACKINGI3DPROC) __GLeeGetProcAddress("wglEndFrameTrackingI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglQueryFrameTrackingI3D = (GLEEPFNWGLQUERYFRAMETRACKINGI3DPROC) __GLeeGetProcAddress("wglQueryFrameTrackingI3D"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_NV_video_output(void) { GLint nLinked=0; #ifdef __GLEE_WGL_NV_video_output if ((GLeeFuncPtr_wglGetVideoDeviceNV = (GLEEPFNWGLGETVIDEODEVICENVPROC) __GLeeGetProcAddress("wglGetVideoDeviceNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglReleaseVideoDeviceNV = (GLEEPFNWGLRELEASEVIDEODEVICENVPROC) __GLeeGetProcAddress("wglReleaseVideoDeviceNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglBindVideoImageNV = (GLEEPFNWGLBINDVIDEOIMAGENVPROC) __GLeeGetProcAddress("wglBindVideoImageNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglReleaseVideoImageNV = (GLEEPFNWGLRELEASEVIDEOIMAGENVPROC) __GLeeGetProcAddress("wglReleaseVideoImageNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglSendPbufferToVideoNV = (GLEEPFNWGLSENDPBUFFERTOVIDEONVPROC) __GLeeGetProcAddress("wglSendPbufferToVideoNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglGetVideoInfoNV = (GLEEPFNWGLGETVIDEOINFONVPROC) __GLeeGetProcAddress("wglGetVideoInfoNV"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLEE_LINK_FUNCTION __GLeeWGLLoadFunction[47]; void initWGLLoadFunctions(void) { __GLeeWGLLoadFunction[0]=__GLeeLink_WGL_ARB_buffer_region; __GLeeWGLLoadFunction[1]=__GLeeLink_WGL_ARB_multisample; __GLeeWGLLoadFunction[2]=__GLeeLink_WGL_ARB_extensions_string; __GLeeWGLLoadFunction[3]=__GLeeLink_WGL_ARB_pixel_format; __GLeeWGLLoadFunction[4]=__GLeeLink_WGL_ARB_make_current_read; __GLeeWGLLoadFunction[5]=__GLeeLink_WGL_ARB_pbuffer; __GLeeWGLLoadFunction[6]=__GLeeLink_WGL_ARB_render_texture; __GLeeWGLLoadFunction[7]=__GLeeLink_WGL_ARB_pixel_format_float; __GLeeWGLLoadFunction[8]=__GLeeLink_WGL_ARB_framebuffer_sRGB; __GLeeWGLLoadFunction[9]=__GLeeLink_WGL_ARB_create_context; __GLeeWGLLoadFunction[10]=__GLeeLink_WGL_ARB_create_context_profile; __GLeeWGLLoadFunction[11]=__GLeeLink_WGL_ARB_create_context_robustness; __GLeeWGLLoadFunction[12]=__GLeeLink_WGL_EXT_make_current_read; __GLeeWGLLoadFunction[13]=__GLeeLink_WGL_EXT_pixel_format; __GLeeWGLLoadFunction[14]=__GLeeLink_WGL_EXT_pbuffer; __GLeeWGLLoadFunction[15]=__GLeeLink_WGL_EXT_depth_float; __GLeeWGLLoadFunction[16]=__GLeeLink_WGL_3DFX_multisample; __GLeeWGLLoadFunction[17]=__GLeeLink_WGL_EXT_multisample; __GLeeWGLLoadFunction[18]=__GLeeLink_WGL_I3D_digital_video_control; __GLeeWGLLoadFunction[19]=__GLeeLink_WGL_I3D_gamma; __GLeeWGLLoadFunction[20]=__GLeeLink_WGL_I3D_genlock; __GLeeWGLLoadFunction[21]=__GLeeLink_WGL_I3D_image_buffer; __GLeeWGLLoadFunction[22]=__GLeeLink_WGL_I3D_swap_frame_lock; __GLeeWGLLoadFunction[23]=__GLeeLink_WGL_NV_render_depth_texture; __GLeeWGLLoadFunction[24]=__GLeeLink_WGL_NV_render_texture_rectangle; __GLeeWGLLoadFunction[25]=__GLeeLink_WGL_ATI_pixel_format_float; __GLeeWGLLoadFunction[26]=__GLeeLink_WGL_NV_float_buffer; __GLeeWGLLoadFunction[27]=__GLeeLink_WGL_3DL_stereo_control; __GLeeWGLLoadFunction[28]=__GLeeLink_WGL_EXT_pixel_format_packed_float; __GLeeWGLLoadFunction[29]=__GLeeLink_WGL_EXT_framebuffer_sRGB; __GLeeWGLLoadFunction[30]=__GLeeLink_WGL_NV_present_video; __GLeeWGLLoadFunction[31]=__GLeeLink_WGL_NV_swap_group; __GLeeWGLLoadFunction[32]=__GLeeLink_WGL_NV_gpu_affinity; __GLeeWGLLoadFunction[33]=__GLeeLink_WGL_AMD_gpu_association; __GLeeWGLLoadFunction[34]=__GLeeLink_WGL_NV_copy_image; __GLeeWGLLoadFunction[35]=__GLeeLink_WGL_NV_multisample_coverage; __GLeeWGLLoadFunction[36]=__GLeeLink_WGL_EXT_create_context_es2_profile; __GLeeWGLLoadFunction[37]=__GLeeLink_WGL_NV_DX_interop; __GLeeWGLLoadFunction[38]=__GLeeLink_WGL_NV_DX_interop2; __GLeeWGLLoadFunction[39]=__GLeeLink_WGL_EXT_swap_control_tear; __GLeeWGLLoadFunction[40]=__GLeeLink_WGL_EXT_display_color_table; __GLeeWGLLoadFunction[41]=__GLeeLink_WGL_EXT_extensions_string; __GLeeWGLLoadFunction[42]=__GLeeLink_WGL_EXT_swap_control; __GLeeWGLLoadFunction[43]=__GLeeLink_WGL_NV_vertex_array_range; __GLeeWGLLoadFunction[44]=__GLeeLink_WGL_OML_sync_control; __GLeeWGLLoadFunction[45]=__GLeeLink_WGL_I3D_swap_frame_usage; __GLeeWGLLoadFunction[46]=__GLeeLink_WGL_NV_video_output; } #elif defined(__APPLE__) || defined(__APPLE_CC__) #else /* Linux */ GLuint __GLeeLink_GLX_VERSION_1_3(void) { GLint nLinked=0; #ifdef __GLEE_GLX_VERSION_1_3 if ((GLeeFuncPtr_glXGetFBConfigs = (GLEEPFNGLXGETFBCONFIGSPROC) __GLeeGetProcAddress("glXGetFBConfigs"))!=0) nLinked++; if ((GLeeFuncPtr_glXChooseFBConfig = (GLEEPFNGLXCHOOSEFBCONFIGPROC) __GLeeGetProcAddress("glXChooseFBConfig"))!=0) nLinked++; if ((GLeeFuncPtr_glXGetFBConfigAttrib = (GLEEPFNGLXGETFBCONFIGATTRIBPROC) __GLeeGetProcAddress("glXGetFBConfigAttrib"))!=0) nLinked++; if ((GLeeFuncPtr_glXGetVisualFromFBConfig = (GLEEPFNGLXGETVISUALFROMFBCONFIGPROC) __GLeeGetProcAddress("glXGetVisualFromFBConfig"))!=0) nLinked++; if ((GLeeFuncPtr_glXCreateWindow = (GLEEPFNGLXCREATEWINDOWPROC) __GLeeGetProcAddress("glXCreateWindow"))!=0) nLinked++; if ((GLeeFuncPtr_glXDestroyWindow = (GLEEPFNGLXDESTROYWINDOWPROC) __GLeeGetProcAddress("glXDestroyWindow"))!=0) nLinked++; if ((GLeeFuncPtr_glXCreatePixmap = (GLEEPFNGLXCREATEPIXMAPPROC) __GLeeGetProcAddress("glXCreatePixmap"))!=0) nLinked++; if ((GLeeFuncPtr_glXDestroyPixmap = (GLEEPFNGLXDESTROYPIXMAPPROC) __GLeeGetProcAddress("glXDestroyPixmap"))!=0) nLinked++; if ((GLeeFuncPtr_glXCreatePbuffer = (GLEEPFNGLXCREATEPBUFFERPROC) __GLeeGetProcAddress("glXCreatePbuffer"))!=0) nLinked++; if ((GLeeFuncPtr_glXDestroyPbuffer = (GLEEPFNGLXDESTROYPBUFFERPROC) __GLeeGetProcAddress("glXDestroyPbuffer"))!=0) nLinked++; if ((GLeeFuncPtr_glXQueryDrawable = (GLEEPFNGLXQUERYDRAWABLEPROC) __GLeeGetProcAddress("glXQueryDrawable"))!=0) nLinked++; if ((GLeeFuncPtr_glXCreateNewContext = (GLEEPFNGLXCREATENEWCONTEXTPROC) __GLeeGetProcAddress("glXCreateNewContext"))!=0) nLinked++; if ((GLeeFuncPtr_glXMakeContextCurrent = (GLEEPFNGLXMAKECONTEXTCURRENTPROC) __GLeeGetProcAddress("glXMakeContextCurrent"))!=0) nLinked++; if ((GLeeFuncPtr_glXGetCurrentReadDrawable = (GLEEPFNGLXGETCURRENTREADDRAWABLEPROC) __GLeeGetProcAddress("glXGetCurrentReadDrawable"))!=0) nLinked++; if ((GLeeFuncPtr_glXGetCurrentDisplay = (GLEEPFNGLXGETCURRENTDISPLAYPROC) __GLeeGetProcAddress("glXGetCurrentDisplay"))!=0) nLinked++; if ((GLeeFuncPtr_glXQueryContext = (GLEEPFNGLXQUERYCONTEXTPROC) __GLeeGetProcAddress("glXQueryContext"))!=0) nLinked++; if ((GLeeFuncPtr_glXSelectEvent = (GLEEPFNGLXSELECTEVENTPROC) __GLeeGetProcAddress("glXSelectEvent"))!=0) nLinked++; if ((GLeeFuncPtr_glXGetSelectedEvent = (GLEEPFNGLXGETSELECTEDEVENTPROC) __GLeeGetProcAddress("glXGetSelectedEvent"))!=0) nLinked++; #endif if (nLinked==18) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_VERSION_1_4(void) { GLint nLinked=0; #ifdef __GLEE_GLX_VERSION_1_4 if ((GLeeFuncPtr_glXGetProcAddress = (GLEEPFNGLXGETPROCADDRESSPROC) __GLeeGetProcAddress("glXGetProcAddress"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_ARB_multisample(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_ARB_vertex_buffer_object(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_ARB_fbconfig_float(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_ARB_framebuffer_sRGB(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_ARB_create_context(void) { GLint nLinked=0; #ifdef __GLEE_GLX_ARB_create_context if ((GLeeFuncPtr_glXCreateContextAttribsARB = (GLEEPFNGLXCREATECONTEXTATTRIBSARBPROC) __GLeeGetProcAddress("glXCreateContextAttribsARB"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_ARB_create_context_profile(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_ARB_create_context_robustness(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_SGIS_multisample(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_EXT_visual_info(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_SGI_swap_control(void) { GLint nLinked=0; #ifdef __GLEE_GLX_SGI_swap_control if ((GLeeFuncPtr_glXSwapIntervalSGI = (GLEEPFNGLXSWAPINTERVALSGIPROC) __GLeeGetProcAddress("glXSwapIntervalSGI"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_SGI_video_sync(void) { GLint nLinked=0; #ifdef __GLEE_GLX_SGI_video_sync if ((GLeeFuncPtr_glXGetVideoSyncSGI = (GLEEPFNGLXGETVIDEOSYNCSGIPROC) __GLeeGetProcAddress("glXGetVideoSyncSGI"))!=0) nLinked++; if ((GLeeFuncPtr_glXWaitVideoSyncSGI = (GLEEPFNGLXWAITVIDEOSYNCSGIPROC) __GLeeGetProcAddress("glXWaitVideoSyncSGI"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_SGI_make_current_read(void) { GLint nLinked=0; #ifdef __GLEE_GLX_SGI_make_current_read if ((GLeeFuncPtr_glXMakeCurrentReadSGI = (GLEEPFNGLXMAKECURRENTREADSGIPROC) __GLeeGetProcAddress("glXMakeCurrentReadSGI"))!=0) nLinked++; if ((GLeeFuncPtr_glXGetCurrentReadDrawableSGI = (GLEEPFNGLXGETCURRENTREADDRAWABLESGIPROC) __GLeeGetProcAddress("glXGetCurrentReadDrawableSGI"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_EXT_visual_rating(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_EXT_import_context(void) { GLint nLinked=0; #ifdef __GLEE_GLX_EXT_import_context if ((GLeeFuncPtr_glXGetCurrentDisplayEXT = (GLEEPFNGLXGETCURRENTDISPLAYEXTPROC) __GLeeGetProcAddress("glXGetCurrentDisplayEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glXQueryContextInfoEXT = (GLEEPFNGLXQUERYCONTEXTINFOEXTPROC) __GLeeGetProcAddress("glXQueryContextInfoEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glXGetContextIDEXT = (GLEEPFNGLXGETCONTEXTIDEXTPROC) __GLeeGetProcAddress("glXGetContextIDEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glXImportContextEXT = (GLEEPFNGLXIMPORTCONTEXTEXTPROC) __GLeeGetProcAddress("glXImportContextEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glXFreeContextEXT = (GLEEPFNGLXFREECONTEXTEXTPROC) __GLeeGetProcAddress("glXFreeContextEXT"))!=0) nLinked++; #endif if (nLinked==5) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_SGIX_fbconfig(void) { GLint nLinked=0; #ifdef __GLEE_GLX_SGIX_fbconfig if ((GLeeFuncPtr_glXGetFBConfigAttribSGIX = (GLEEPFNGLXGETFBCONFIGATTRIBSGIXPROC) __GLeeGetProcAddress("glXGetFBConfigAttribSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXChooseFBConfigSGIX = (GLEEPFNGLXCHOOSEFBCONFIGSGIXPROC) __GLeeGetProcAddress("glXChooseFBConfigSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXCreateGLXPixmapWithConfigSGIX = (GLEEPFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC) __GLeeGetProcAddress("glXCreateGLXPixmapWithConfigSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXCreateContextWithConfigSGIX = (GLEEPFNGLXCREATECONTEXTWITHCONFIGSGIXPROC) __GLeeGetProcAddress("glXCreateContextWithConfigSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXGetVisualFromFBConfigSGIX = (GLEEPFNGLXGETVISUALFROMFBCONFIGSGIXPROC) __GLeeGetProcAddress("glXGetVisualFromFBConfigSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXGetFBConfigFromVisualSGIX = (GLEEPFNGLXGETFBCONFIGFROMVISUALSGIXPROC) __GLeeGetProcAddress("glXGetFBConfigFromVisualSGIX"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_SGIX_pbuffer(void) { GLint nLinked=0; #ifdef __GLEE_GLX_SGIX_pbuffer if ((GLeeFuncPtr_glXCreateGLXPbufferSGIX = (GLEEPFNGLXCREATEGLXPBUFFERSGIXPROC) __GLeeGetProcAddress("glXCreateGLXPbufferSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXDestroyGLXPbufferSGIX = (GLEEPFNGLXDESTROYGLXPBUFFERSGIXPROC) __GLeeGetProcAddress("glXDestroyGLXPbufferSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXQueryGLXPbufferSGIX = (GLEEPFNGLXQUERYGLXPBUFFERSGIXPROC) __GLeeGetProcAddress("glXQueryGLXPbufferSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXSelectEventSGIX = (GLEEPFNGLXSELECTEVENTSGIXPROC) __GLeeGetProcAddress("glXSelectEventSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXGetSelectedEventSGIX = (GLEEPFNGLXGETSELECTEDEVENTSGIXPROC) __GLeeGetProcAddress("glXGetSelectedEventSGIX"))!=0) nLinked++; #endif if (nLinked==5) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_SGI_cushion(void) { GLint nLinked=0; #ifdef __GLEE_GLX_SGI_cushion if ((GLeeFuncPtr_glXCushionSGI = (GLEEPFNGLXCUSHIONSGIPROC) __GLeeGetProcAddress("glXCushionSGI"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_SGIX_video_resize(void) { GLint nLinked=0; #ifdef __GLEE_GLX_SGIX_video_resize if ((GLeeFuncPtr_glXBindChannelToWindowSGIX = (GLEEPFNGLXBINDCHANNELTOWINDOWSGIXPROC) __GLeeGetProcAddress("glXBindChannelToWindowSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXChannelRectSGIX = (GLEEPFNGLXCHANNELRECTSGIXPROC) __GLeeGetProcAddress("glXChannelRectSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXQueryChannelRectSGIX = (GLEEPFNGLXQUERYCHANNELRECTSGIXPROC) __GLeeGetProcAddress("glXQueryChannelRectSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXQueryChannelDeltasSGIX = (GLEEPFNGLXQUERYCHANNELDELTASSGIXPROC) __GLeeGetProcAddress("glXQueryChannelDeltasSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXChannelRectSyncSGIX = (GLEEPFNGLXCHANNELRECTSYNCSGIXPROC) __GLeeGetProcAddress("glXChannelRectSyncSGIX"))!=0) nLinked++; #endif if (nLinked==5) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_SGIX_swap_group(void) { GLint nLinked=0; #ifdef __GLEE_GLX_SGIX_swap_group if ((GLeeFuncPtr_glXJoinSwapGroupSGIX = (GLEEPFNGLXJOINSWAPGROUPSGIXPROC) __GLeeGetProcAddress("glXJoinSwapGroupSGIX"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_SGIX_swap_barrier(void) { GLint nLinked=0; #ifdef __GLEE_GLX_SGIX_swap_barrier if ((GLeeFuncPtr_glXBindSwapBarrierSGIX = (GLEEPFNGLXBINDSWAPBARRIERSGIXPROC) __GLeeGetProcAddress("glXBindSwapBarrierSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXQueryMaxSwapBarriersSGIX = (GLEEPFNGLXQUERYMAXSWAPBARRIERSSGIXPROC) __GLeeGetProcAddress("glXQueryMaxSwapBarriersSGIX"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_SGIS_blended_overlay(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_SGIS_shared_multisample(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_SUN_get_transparent_index(void) { GLint nLinked=0; #ifdef __GLEE_GLX_SUN_get_transparent_index if ((GLeeFuncPtr_glXGetTransparentIndexSUN = (GLEEPFNGLXGETTRANSPARENTINDEXSUNPROC) __GLeeGetProcAddress("glXGetTransparentIndexSUN"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_3DFX_multisample(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_MESA_copy_sub_buffer(void) { GLint nLinked=0; #ifdef __GLEE_GLX_MESA_copy_sub_buffer if ((GLeeFuncPtr_glXCopySubBufferMESA = (GLEEPFNGLXCOPYSUBBUFFERMESAPROC) __GLeeGetProcAddress("glXCopySubBufferMESA"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_MESA_pixmap_colormap(void) { GLint nLinked=0; #ifdef __GLEE_GLX_MESA_pixmap_colormap if ((GLeeFuncPtr_glXCreateGLXPixmapMESA = (GLEEPFNGLXCREATEGLXPIXMAPMESAPROC) __GLeeGetProcAddress("glXCreateGLXPixmapMESA"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_MESA_release_buffers(void) { GLint nLinked=0; #ifdef __GLEE_GLX_MESA_release_buffers if ((GLeeFuncPtr_glXReleaseBuffersMESA = (GLEEPFNGLXRELEASEBUFFERSMESAPROC) __GLeeGetProcAddress("glXReleaseBuffersMESA"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_MESA_set_3dfx_mode(void) { GLint nLinked=0; #ifdef __GLEE_GLX_MESA_set_3dfx_mode if ((GLeeFuncPtr_glXSet3DfxModeMESA = (GLEEPFNGLXSET3DFXMODEMESAPROC) __GLeeGetProcAddress("glXSet3DfxModeMESA"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_SGIX_visual_select_group(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_OML_swap_method(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_OML_sync_control(void) { GLint nLinked=0; #ifdef __GLEE_GLX_OML_sync_control if ((GLeeFuncPtr_glXGetSyncValuesOML = (GLEEPFNGLXGETSYNCVALUESOMLPROC) __GLeeGetProcAddress("glXGetSyncValuesOML"))!=0) nLinked++; if ((GLeeFuncPtr_glXGetMscRateOML = (GLEEPFNGLXGETMSCRATEOMLPROC) __GLeeGetProcAddress("glXGetMscRateOML"))!=0) nLinked++; if ((GLeeFuncPtr_glXSwapBuffersMscOML = (GLEEPFNGLXSWAPBUFFERSMSCOMLPROC) __GLeeGetProcAddress("glXSwapBuffersMscOML"))!=0) nLinked++; if ((GLeeFuncPtr_glXWaitForMscOML = (GLEEPFNGLXWAITFORMSCOMLPROC) __GLeeGetProcAddress("glXWaitForMscOML"))!=0) nLinked++; if ((GLeeFuncPtr_glXWaitForSbcOML = (GLEEPFNGLXWAITFORSBCOMLPROC) __GLeeGetProcAddress("glXWaitForSbcOML"))!=0) nLinked++; #endif if (nLinked==5) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_NV_float_buffer(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_SGIX_hyperpipe(void) { GLint nLinked=0; #ifdef __GLEE_GLX_SGIX_hyperpipe if ((GLeeFuncPtr_glXQueryHyperpipeNetworkSGIX = (GLEEPFNGLXQUERYHYPERPIPENETWORKSGIXPROC) __GLeeGetProcAddress("glXQueryHyperpipeNetworkSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXHyperpipeConfigSGIX = (GLEEPFNGLXHYPERPIPECONFIGSGIXPROC) __GLeeGetProcAddress("glXHyperpipeConfigSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXQueryHyperpipeConfigSGIX = (GLEEPFNGLXQUERYHYPERPIPECONFIGSGIXPROC) __GLeeGetProcAddress("glXQueryHyperpipeConfigSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXDestroyHyperpipeConfigSGIX = (GLEEPFNGLXDESTROYHYPERPIPECONFIGSGIXPROC) __GLeeGetProcAddress("glXDestroyHyperpipeConfigSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXBindHyperpipeSGIX = (GLEEPFNGLXBINDHYPERPIPESGIXPROC) __GLeeGetProcAddress("glXBindHyperpipeSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXQueryHyperpipeBestAttribSGIX = (GLEEPFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC) __GLeeGetProcAddress("glXQueryHyperpipeBestAttribSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXHyperpipeAttribSGIX = (GLEEPFNGLXHYPERPIPEATTRIBSGIXPROC) __GLeeGetProcAddress("glXHyperpipeAttribSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXQueryHyperpipeAttribSGIX = (GLEEPFNGLXQUERYHYPERPIPEATTRIBSGIXPROC) __GLeeGetProcAddress("glXQueryHyperpipeAttribSGIX"))!=0) nLinked++; #endif if (nLinked==8) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_MESA_agp_offset(void) { GLint nLinked=0; #ifdef __GLEE_GLX_MESA_agp_offset if ((GLeeFuncPtr_glXGetAGPOffsetMESA = (GLEEPFNGLXGETAGPOFFSETMESAPROC) __GLeeGetProcAddress("glXGetAGPOffsetMESA"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_EXT_fbconfig_packed_float(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_EXT_framebuffer_sRGB(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_EXT_texture_from_pixmap(void) { GLint nLinked=0; #ifdef __GLEE_GLX_EXT_texture_from_pixmap if ((GLeeFuncPtr_glXBindTexImageEXT = (GLEEPFNGLXBINDTEXIMAGEEXTPROC) __GLeeGetProcAddress("glXBindTexImageEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glXReleaseTexImageEXT = (GLEEPFNGLXRELEASETEXIMAGEEXTPROC) __GLeeGetProcAddress("glXReleaseTexImageEXT"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_NV_present_video(void) { GLint nLinked=0; #ifdef __GLEE_GLX_NV_present_video if ((GLeeFuncPtr_glXEnumerateVideoDevicesNV = (GLEEPFNGLXENUMERATEVIDEODEVICESNVPROC) __GLeeGetProcAddress("glXEnumerateVideoDevicesNV"))!=0) nLinked++; if ((GLeeFuncPtr_glXBindVideoDeviceNV = (GLEEPFNGLXBINDVIDEODEVICENVPROC) __GLeeGetProcAddress("glXBindVideoDeviceNV"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_NV_video_out(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_NV_swap_group(void) { GLint nLinked=0; #ifdef __GLEE_GLX_NV_swap_group if ((GLeeFuncPtr_glXJoinSwapGroupNV = (GLEEPFNGLXJOINSWAPGROUPNVPROC) __GLeeGetProcAddress("glXJoinSwapGroupNV"))!=0) nLinked++; if ((GLeeFuncPtr_glXBindSwapBarrierNV = (GLEEPFNGLXBINDSWAPBARRIERNVPROC) __GLeeGetProcAddress("glXBindSwapBarrierNV"))!=0) nLinked++; if ((GLeeFuncPtr_glXQuerySwapGroupNV = (GLEEPFNGLXQUERYSWAPGROUPNVPROC) __GLeeGetProcAddress("glXQuerySwapGroupNV"))!=0) nLinked++; if ((GLeeFuncPtr_glXQueryMaxSwapGroupsNV = (GLEEPFNGLXQUERYMAXSWAPGROUPSNVPROC) __GLeeGetProcAddress("glXQueryMaxSwapGroupsNV"))!=0) nLinked++; if ((GLeeFuncPtr_glXQueryFrameCountNV = (GLEEPFNGLXQUERYFRAMECOUNTNVPROC) __GLeeGetProcAddress("glXQueryFrameCountNV"))!=0) nLinked++; if ((GLeeFuncPtr_glXResetFrameCountNV = (GLEEPFNGLXRESETFRAMECOUNTNVPROC) __GLeeGetProcAddress("glXResetFrameCountNV"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_NV_video_capture(void) { GLint nLinked=0; #ifdef __GLEE_GLX_NV_video_capture if ((GLeeFuncPtr_glXBindVideoCaptureDeviceNV = (GLEEPFNGLXBINDVIDEOCAPTUREDEVICENVPROC) __GLeeGetProcAddress("glXBindVideoCaptureDeviceNV"))!=0) nLinked++; if ((GLeeFuncPtr_glXEnumerateVideoCaptureDevicesNV = (GLEEPFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC) __GLeeGetProcAddress("glXEnumerateVideoCaptureDevicesNV"))!=0) nLinked++; if ((GLeeFuncPtr_glXLockVideoCaptureDeviceNV = (GLEEPFNGLXLOCKVIDEOCAPTUREDEVICENVPROC) __GLeeGetProcAddress("glXLockVideoCaptureDeviceNV"))!=0) nLinked++; if ((GLeeFuncPtr_glXQueryVideoCaptureDeviceNV = (GLEEPFNGLXQUERYVIDEOCAPTUREDEVICENVPROC) __GLeeGetProcAddress("glXQueryVideoCaptureDeviceNV"))!=0) nLinked++; if ((GLeeFuncPtr_glXReleaseVideoCaptureDeviceNV = (GLEEPFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC) __GLeeGetProcAddress("glXReleaseVideoCaptureDeviceNV"))!=0) nLinked++; #endif if (nLinked==5) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_EXT_swap_control(void) { GLint nLinked=0; #ifdef __GLEE_GLX_EXT_swap_control if ((GLeeFuncPtr_glXSwapIntervalEXT = (GLEEPFNGLXSWAPINTERVALEXTPROC) __GLeeGetProcAddress("glXSwapIntervalEXT"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_NV_copy_image(void) { GLint nLinked=0; #ifdef __GLEE_GLX_NV_copy_image if ((GLeeFuncPtr_glXCopyImageSubDataNV = (GLEEPFNGLXCOPYIMAGESUBDATANVPROC) __GLeeGetProcAddress("glXCopyImageSubDataNV"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_INTEL_swap_event(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_NV_multisample_coverage(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_AMD_gpu_association(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_EXT_create_context_es2_profile(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_EXT_create_context_es_profile(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_EXT_swap_control_tear(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_EXT_buffer_age(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_NV_video_output(void) { GLint nLinked=0; #ifdef __GLEE_GLX_NV_video_output if ((GLeeFuncPtr_glXGetVideoDeviceNV = (GLEEPFNGLXGETVIDEODEVICENVPROC) __GLeeGetProcAddress("glXGetVideoDeviceNV"))!=0) nLinked++; if ((GLeeFuncPtr_glXReleaseVideoDeviceNV = (GLEEPFNGLXRELEASEVIDEODEVICENVPROC) __GLeeGetProcAddress("glXReleaseVideoDeviceNV"))!=0) nLinked++; if ((GLeeFuncPtr_glXBindVideoImageNV = (GLEEPFNGLXBINDVIDEOIMAGENVPROC) __GLeeGetProcAddress("glXBindVideoImageNV"))!=0) nLinked++; if ((GLeeFuncPtr_glXReleaseVideoImageNV = (GLEEPFNGLXRELEASEVIDEOIMAGENVPROC) __GLeeGetProcAddress("glXReleaseVideoImageNV"))!=0) nLinked++; if ((GLeeFuncPtr_glXSendPbufferToVideoNV = (GLEEPFNGLXSENDPBUFFERTOVIDEONVPROC) __GLeeGetProcAddress("glXSendPbufferToVideoNV"))!=0) nLinked++; if ((GLeeFuncPtr_glXGetVideoInfoNV = (GLEEPFNGLXGETVIDEOINFONVPROC) __GLeeGetProcAddress("glXGetVideoInfoNV"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLEE_LINK_FUNCTION __GLeeGLXLoadFunction[53]; void initGLXLoadFunctions(void) { __GLeeGLXLoadFunction[0]=__GLeeLink_GLX_VERSION_1_3; __GLeeGLXLoadFunction[1]=__GLeeLink_GLX_VERSION_1_4; __GLeeGLXLoadFunction[2]=__GLeeLink_GLX_ARB_multisample; __GLeeGLXLoadFunction[3]=__GLeeLink_GLX_ARB_vertex_buffer_object; __GLeeGLXLoadFunction[4]=__GLeeLink_GLX_ARB_fbconfig_float; __GLeeGLXLoadFunction[5]=__GLeeLink_GLX_ARB_framebuffer_sRGB; __GLeeGLXLoadFunction[6]=__GLeeLink_GLX_ARB_create_context; __GLeeGLXLoadFunction[7]=__GLeeLink_GLX_ARB_create_context_profile; __GLeeGLXLoadFunction[8]=__GLeeLink_GLX_ARB_create_context_robustness; __GLeeGLXLoadFunction[9]=__GLeeLink_GLX_SGIS_multisample; __GLeeGLXLoadFunction[10]=__GLeeLink_GLX_EXT_visual_info; __GLeeGLXLoadFunction[11]=__GLeeLink_GLX_SGI_swap_control; __GLeeGLXLoadFunction[12]=__GLeeLink_GLX_SGI_video_sync; __GLeeGLXLoadFunction[13]=__GLeeLink_GLX_SGI_make_current_read; __GLeeGLXLoadFunction[14]=__GLeeLink_GLX_EXT_visual_rating; __GLeeGLXLoadFunction[15]=__GLeeLink_GLX_EXT_import_context; __GLeeGLXLoadFunction[16]=__GLeeLink_GLX_SGIX_fbconfig; __GLeeGLXLoadFunction[17]=__GLeeLink_GLX_SGIX_pbuffer; __GLeeGLXLoadFunction[18]=__GLeeLink_GLX_SGI_cushion; __GLeeGLXLoadFunction[19]=__GLeeLink_GLX_SGIX_video_resize; __GLeeGLXLoadFunction[20]=__GLeeLink_GLX_SGIX_swap_group; __GLeeGLXLoadFunction[21]=__GLeeLink_GLX_SGIX_swap_barrier; __GLeeGLXLoadFunction[22]=__GLeeLink_GLX_SGIS_blended_overlay; __GLeeGLXLoadFunction[23]=__GLeeLink_GLX_SGIS_shared_multisample; __GLeeGLXLoadFunction[24]=__GLeeLink_GLX_SUN_get_transparent_index; __GLeeGLXLoadFunction[25]=__GLeeLink_GLX_3DFX_multisample; __GLeeGLXLoadFunction[26]=__GLeeLink_GLX_MESA_copy_sub_buffer; __GLeeGLXLoadFunction[27]=__GLeeLink_GLX_MESA_pixmap_colormap; __GLeeGLXLoadFunction[28]=__GLeeLink_GLX_MESA_release_buffers; __GLeeGLXLoadFunction[29]=__GLeeLink_GLX_MESA_set_3dfx_mode; __GLeeGLXLoadFunction[30]=__GLeeLink_GLX_SGIX_visual_select_group; __GLeeGLXLoadFunction[31]=__GLeeLink_GLX_OML_swap_method; __GLeeGLXLoadFunction[32]=__GLeeLink_GLX_OML_sync_control; __GLeeGLXLoadFunction[33]=__GLeeLink_GLX_NV_float_buffer; __GLeeGLXLoadFunction[34]=__GLeeLink_GLX_SGIX_hyperpipe; __GLeeGLXLoadFunction[35]=__GLeeLink_GLX_MESA_agp_offset; __GLeeGLXLoadFunction[36]=__GLeeLink_GLX_EXT_fbconfig_packed_float; __GLeeGLXLoadFunction[37]=__GLeeLink_GLX_EXT_framebuffer_sRGB; __GLeeGLXLoadFunction[38]=__GLeeLink_GLX_EXT_texture_from_pixmap; __GLeeGLXLoadFunction[39]=__GLeeLink_GLX_NV_present_video; __GLeeGLXLoadFunction[40]=__GLeeLink_GLX_NV_video_out; __GLeeGLXLoadFunction[41]=__GLeeLink_GLX_NV_swap_group; __GLeeGLXLoadFunction[42]=__GLeeLink_GLX_NV_video_capture; __GLeeGLXLoadFunction[43]=__GLeeLink_GLX_EXT_swap_control; __GLeeGLXLoadFunction[44]=__GLeeLink_GLX_NV_copy_image; __GLeeGLXLoadFunction[45]=__GLeeLink_GLX_INTEL_swap_event; __GLeeGLXLoadFunction[46]=__GLeeLink_GLX_NV_multisample_coverage; __GLeeGLXLoadFunction[47]=__GLeeLink_GLX_AMD_gpu_association; __GLeeGLXLoadFunction[48]=__GLeeLink_GLX_EXT_create_context_es2_profile; __GLeeGLXLoadFunction[49]=__GLeeLink_GLX_EXT_create_context_es_profile; __GLeeGLXLoadFunction[50]=__GLeeLink_GLX_EXT_swap_control_tear; __GLeeGLXLoadFunction[51]=__GLeeLink_GLX_EXT_buffer_age; __GLeeGLXLoadFunction[52]=__GLeeLink_GLX_NV_video_output; } #endif /* end Linux */ /***************************************************************** * GLee internal types *****************************************************************/ typedef struct { char ** names; int * lengths; int numNames; }ExtensionList; /***************************************************************** * GLee internal variables *****************************************************************/ char GLeeErrorString[256]=""; /***************************************************************** * GLee internal functions *****************************************************************/ void __GLeeExtList_init(ExtensionList *extList) { extList->names=0; extList->lengths=0; extList->numNames=0; } void __GLeeExtList_clean(ExtensionList *extList) { int a; for (a=0;anumNames;a++) { if (extList->names[a]!=0) free((void *)extList->names[a]); } if (extList->names!=0) free((void *)extList->names); if (extList->lengths!=0) free((void *)extList->lengths); extList->names=0; extList->lengths=0; extList->numNames=0; } void __GLeeExtList_add(ExtensionList *extList, const char * extName) { int length=strlen(extName)+1; int i=extList->numNames; int n=i+1; if (i==0) { extList->lengths=(int *)malloc(sizeof(int)); extList->names=(char **)malloc(sizeof(char *)); }else { extList->lengths=(int *)realloc((void *)extList->lengths, n*sizeof(int)); extList->names=(char **)realloc((void *)extList->names, n*sizeof(char *)); } extList->names[i]=strdup(extName); extList->lengths[i]=length; extList->numNames++; } const char *__GLeeGetExtStrPlat( void ) { #ifdef _WIN32 if (!_GLEE_WGL_ARB_extensions_string) wglGetExtensionsStringARB = (GLEEPFNWGLGETEXTENSIONSSTRINGARBPROC) wglGetProcAddress("wglGetExtensionsStringARB"); if (wglGetExtensionsStringARB) return (const char *)wglGetExtensionsStringARB(wglGetCurrentDC()); #elif defined(__APPLE__) || defined(__APPLE_CC__) #else Display *dpy=glXGetCurrentDisplay(); if(dpy) { int dpynr=DefaultScreen(dpy); return (const char*)glXQueryExtensionsString(dpy,dpynr); } #endif return 0; } void __GLeeWriteError(const char * errorStr) { int a=0; for (a=0;a<256;a++) { GLeeErrorString[a]=errorStr[a]; } GLeeErrorString[255]='\0'; } int __GLeeGetVersionNumber(char *versionStr) { int major=(int)versionStr[0]-(int)'0'; int minor=(int)versionStr[2]-(int)'0'; return major<<8 | minor; } GLboolean __GLeeGetExtensions(ExtensionList* extList) { const char * platExtStr; const char * glExtStr; char * extStr; char * p; int totalExtStrLen = 0; int addASpace; /* read the platform specific extension string */ platExtStr=__GLeeGetExtStrPlat(); if (!platExtStr) platExtStr=""; else totalExtStrLen = strlen(platExtStr); glExtStr=(const char *)glGetString(GL_EXTENSIONS); if (glExtStr==0) { __GLeeWriteError("glGetString(GL_EXTENSIONS) failed."); return GL_FALSE; } /* If the last character of platExtStr is not a space, we need to add one when we concatenate the extension strings*/ addASpace = 0; if ( totalExtStrLen ) { if ( platExtStr[ totalExtStrLen-1 ] != ' ') { addASpace = 1; totalExtStrLen++; } } /* allocate the extension string */ totalExtStrLen += strlen(glExtStr); extStr=(char *)malloc( totalExtStrLen+1 ); /* allow for a null terminator */ /* concatenate the two extension strings */ snprintf(extStr,totalExtStrLen+1,addASpace?"%s %s":"%s%s",platExtStr,glExtStr); /* extract the extensions */ for (p = extStr + totalExtStrLen; p > extStr; --p) { if (*p == ' ') { __GLeeExtList_add(extList,p+1); *p = 0; } } __GLeeExtList_add(extList,extStr); free((void *)extStr); return GL_TRUE; } GLboolean __GLeeCheckExtension(const char * name, ExtensionList *extensionNames) { int n=extensionNames->numNames; int a; for (a=0;anames[a],name)==0) return GL_TRUE; } return GL_FALSE; } GLEE_EXTERN GLint __GLeeGetExtensionNumber(const char *extensionName, int type) { int a; switch (type) { case 0: for (a=0;a<__GLeeGLNumExtensions;a++) if (strcmp(extensionName,__GLeeGLExtensionNames[a])==0) return a; return -1; #ifdef _WIN32 case 1: for (a=0;a<__GLeeWGLNumExtensions;a++) if (strcmp(extensionName,__GLeeWGLExtensionNames[a])==0) return a; return -1; #elif defined(__APPLE__) || defined(__APPLE_CC__) #else case 2: for (a=0;a<__GLeeGLXNumExtensions;a++) if (strcmp(extensionName,__GLeeGLXExtensionNames[a])==0) return a; return -1; #endif } return -1; } /***************************************************************** * GLee external functions *****************************************************************/ #ifdef _WIN32 GLEE_EXTERN const char * GLeeGetExtStrWGL( void ) { return __GLeeGetExtStrPlat(); } #elif defined(__APPLE__) || defined(__APPLE_CC__) #else GLEE_EXTERN const char * GLeeGetExtStrGLX( void ) { return __GLeeGetExtStrPlat(); } #endif GLEE_EXTERN const char * GLeeGetExtStrGL( void ) { return (const char *)glGetString(GL_EXTENSIONS); } GLEE_EXTERN const char * GLeeGetErrorString( void ) { return GLeeErrorString; } GLboolean __GLeeInitedLoadFunctions=GL_FALSE; GLEE_EXTERN GLint GLeeForceLink(const char * extensionName) { int type=0; int extNum; int len=strlen(extensionName); if (len<5) return GLEE_LINK_FAIL; if (!__GLeeInitedLoadFunctions) { if (!__GLeeInited) GLeeInit(); initGLLoadFunctions(); #ifdef _WIN32 initWGLLoadFunctions(); #elif defined(__APPLE__) || defined(__APPLE_CC__) #else initGLXLoadFunctions(); #endif __GLeeInitedLoadFunctions=GL_TRUE; } if (extensionName[0]=='W') type=1; else if (extensionName[2]=='X') type=2; extNum=__GLeeGetExtensionNumber(extensionName,type); if (extNum==-1) return GLEE_LINK_FAIL; if (type==0) return __GLeeGLLoadFunction[extNum](); #ifdef _WIN32 if (type==1) return __GLeeWGLLoadFunction[extNum](); #elif defined(__APPLE__) || defined(__APPLE_CC__) #else if (type==2) return __GLeeGLXLoadFunction[extNum](); #endif return GLEE_LINK_FAIL; } GLEE_EXTERN GLboolean GLeeEnabled(GLboolean * extensionQueryingVariable) { if (!__GLeeInited) GLeeInit(); return *extensionQueryingVariable; } GLEE_EXTERN GLboolean GLeeInit( void ) { int version; ExtensionList extensionNames; if (__GLeeInited) { return GL_FALSE; } __GLeeExtList_init(&extensionNames); if (!__GLeeGetExtensions(&extensionNames)) { __GLeeWriteError("GL extension querying failed."); __GLeeExtList_clean(&extensionNames); return GL_FALSE; } version=__GLeeGetVersionNumber((char *)glGetString(GL_VERSION)); __GLeeInited = GL_TRUE; /***************************************************************** * Autogenerated linking functions *****************************************************************/ if (version>=258) { _GLEE_VERSION_1_2 = GL_TRUE; __GLeeLink_GL_VERSION_1_2(); } if (__GLeeCheckExtension("GL_ARB_imaging", &extensionNames) ) { _GLEE_ARB_imaging = GL_TRUE; __GLeeLink_GL_ARB_imaging(); } if (version>=259) { _GLEE_VERSION_1_3 = GL_TRUE; __GLeeLink_GL_VERSION_1_3(); } if (version>=260) { _GLEE_VERSION_1_4 = GL_TRUE; __GLeeLink_GL_VERSION_1_4(); } if (version>=261) { _GLEE_VERSION_1_5 = GL_TRUE; __GLeeLink_GL_VERSION_1_5(); } if (version>=512) { _GLEE_VERSION_2_0 = GL_TRUE; __GLeeLink_GL_VERSION_2_0(); } if (version>=513) { _GLEE_VERSION_2_1 = GL_TRUE; __GLeeLink_GL_VERSION_2_1(); } if (version>=768) { _GLEE_VERSION_3_0 = GL_TRUE; __GLeeLink_GL_VERSION_3_0(); } if (version>=769) { _GLEE_VERSION_3_1 = GL_TRUE; __GLeeLink_GL_VERSION_3_1(); } if (version>=770) { _GLEE_VERSION_3_2 = GL_TRUE; __GLeeLink_GL_VERSION_3_2(); } if (version>=771) { _GLEE_VERSION_3_3 = GL_TRUE; __GLeeLink_GL_VERSION_3_3(); } if (version>=1024) { _GLEE_VERSION_4_0 = GL_TRUE; __GLeeLink_GL_VERSION_4_0(); } if (version>=1025) { _GLEE_VERSION_4_1 = GL_TRUE; __GLeeLink_GL_VERSION_4_1(); } if (version>=1026) { _GLEE_VERSION_4_2 = GL_TRUE; __GLeeLink_GL_VERSION_4_2(); } if (version>=1027) { _GLEE_VERSION_4_3 = GL_TRUE; __GLeeLink_GL_VERSION_4_3(); } if (__GLeeCheckExtension("GL_ARB_multitexture", &extensionNames) ) { _GLEE_ARB_multitexture = GL_TRUE; __GLeeLink_GL_ARB_multitexture(); } if (__GLeeCheckExtension("GL_ARB_transpose_matrix", &extensionNames) ) { _GLEE_ARB_transpose_matrix = GL_TRUE; __GLeeLink_GL_ARB_transpose_matrix(); } if (__GLeeCheckExtension("GL_ARB_multisample", &extensionNames) ) { _GLEE_ARB_multisample = GL_TRUE; __GLeeLink_GL_ARB_multisample(); } if (__GLeeCheckExtension("GL_ARB_texture_env_add", &extensionNames) ) { _GLEE_ARB_texture_env_add = GL_TRUE; __GLeeLink_GL_ARB_texture_env_add(); } if (__GLeeCheckExtension("GL_ARB_texture_cube_map", &extensionNames) ) { _GLEE_ARB_texture_cube_map = GL_TRUE; __GLeeLink_GL_ARB_texture_cube_map(); } if (__GLeeCheckExtension("GL_ARB_texture_compression", &extensionNames) ) { _GLEE_ARB_texture_compression = GL_TRUE; __GLeeLink_GL_ARB_texture_compression(); } if (__GLeeCheckExtension("GL_ARB_texture_border_clamp", &extensionNames) ) { _GLEE_ARB_texture_border_clamp = GL_TRUE; __GLeeLink_GL_ARB_texture_border_clamp(); } if (__GLeeCheckExtension("GL_ARB_point_parameters", &extensionNames) ) { _GLEE_ARB_point_parameters = GL_TRUE; __GLeeLink_GL_ARB_point_parameters(); } if (__GLeeCheckExtension("GL_ARB_vertex_blend", &extensionNames) ) { _GLEE_ARB_vertex_blend = GL_TRUE; __GLeeLink_GL_ARB_vertex_blend(); } if (__GLeeCheckExtension("GL_ARB_matrix_palette", &extensionNames) ) { _GLEE_ARB_matrix_palette = GL_TRUE; __GLeeLink_GL_ARB_matrix_palette(); } if (__GLeeCheckExtension("GL_ARB_texture_env_combine", &extensionNames) ) { _GLEE_ARB_texture_env_combine = GL_TRUE; __GLeeLink_GL_ARB_texture_env_combine(); } if (__GLeeCheckExtension("GL_ARB_texture_env_crossbar", &extensionNames) ) { _GLEE_ARB_texture_env_crossbar = GL_TRUE; __GLeeLink_GL_ARB_texture_env_crossbar(); } if (__GLeeCheckExtension("GL_ARB_texture_env_dot3", &extensionNames) ) { _GLEE_ARB_texture_env_dot3 = GL_TRUE; __GLeeLink_GL_ARB_texture_env_dot3(); } if (__GLeeCheckExtension("GL_ARB_texture_mirrored_repeat", &extensionNames) ) { _GLEE_ARB_texture_mirrored_repeat = GL_TRUE; __GLeeLink_GL_ARB_texture_mirrored_repeat(); } if (__GLeeCheckExtension("GL_ARB_depth_texture", &extensionNames) ) { _GLEE_ARB_depth_texture = GL_TRUE; __GLeeLink_GL_ARB_depth_texture(); } if (__GLeeCheckExtension("GL_ARB_shadow", &extensionNames) ) { _GLEE_ARB_shadow = GL_TRUE; __GLeeLink_GL_ARB_shadow(); } if (__GLeeCheckExtension("GL_ARB_shadow_ambient", &extensionNames) ) { _GLEE_ARB_shadow_ambient = GL_TRUE; __GLeeLink_GL_ARB_shadow_ambient(); } if (__GLeeCheckExtension("GL_ARB_window_pos", &extensionNames) ) { _GLEE_ARB_window_pos = GL_TRUE; __GLeeLink_GL_ARB_window_pos(); } if (__GLeeCheckExtension("GL_ARB_vertex_program", &extensionNames) ) { _GLEE_ARB_vertex_program = GL_TRUE; __GLeeLink_GL_ARB_vertex_program(); } if (__GLeeCheckExtension("GL_ARB_fragment_program", &extensionNames) ) { _GLEE_ARB_fragment_program = GL_TRUE; __GLeeLink_GL_ARB_fragment_program(); } if (__GLeeCheckExtension("GL_ARB_vertex_buffer_object", &extensionNames) ) { _GLEE_ARB_vertex_buffer_object = GL_TRUE; __GLeeLink_GL_ARB_vertex_buffer_object(); } if (__GLeeCheckExtension("GL_ARB_occlusion_query", &extensionNames) ) { _GLEE_ARB_occlusion_query = GL_TRUE; __GLeeLink_GL_ARB_occlusion_query(); } if (__GLeeCheckExtension("GL_ARB_shader_objects", &extensionNames) ) { _GLEE_ARB_shader_objects = GL_TRUE; __GLeeLink_GL_ARB_shader_objects(); } if (__GLeeCheckExtension("GL_ARB_vertex_shader", &extensionNames) ) { _GLEE_ARB_vertex_shader = GL_TRUE; __GLeeLink_GL_ARB_vertex_shader(); } if (__GLeeCheckExtension("GL_ARB_fragment_shader", &extensionNames) ) { _GLEE_ARB_fragment_shader = GL_TRUE; __GLeeLink_GL_ARB_fragment_shader(); } if (__GLeeCheckExtension("GL_ARB_shading_language_100", &extensionNames) ) { _GLEE_ARB_shading_language_100 = GL_TRUE; __GLeeLink_GL_ARB_shading_language_100(); } if (__GLeeCheckExtension("GL_ARB_texture_non_power_of_two", &extensionNames) ) { _GLEE_ARB_texture_non_power_of_two = GL_TRUE; __GLeeLink_GL_ARB_texture_non_power_of_two(); } if (__GLeeCheckExtension("GL_ARB_point_sprite", &extensionNames) ) { _GLEE_ARB_point_sprite = GL_TRUE; __GLeeLink_GL_ARB_point_sprite(); } if (__GLeeCheckExtension("GL_ARB_fragment_program_shadow", &extensionNames) ) { _GLEE_ARB_fragment_program_shadow = GL_TRUE; __GLeeLink_GL_ARB_fragment_program_shadow(); } if (__GLeeCheckExtension("GL_ARB_draw_buffers", &extensionNames) ) { _GLEE_ARB_draw_buffers = GL_TRUE; __GLeeLink_GL_ARB_draw_buffers(); } if (__GLeeCheckExtension("GL_ARB_texture_rectangle", &extensionNames) ) { _GLEE_ARB_texture_rectangle = GL_TRUE; __GLeeLink_GL_ARB_texture_rectangle(); } if (__GLeeCheckExtension("GL_ARB_color_buffer_float", &extensionNames) ) { _GLEE_ARB_color_buffer_float = GL_TRUE; __GLeeLink_GL_ARB_color_buffer_float(); } if (__GLeeCheckExtension("GL_ARB_half_float_pixel", &extensionNames) ) { _GLEE_ARB_half_float_pixel = GL_TRUE; __GLeeLink_GL_ARB_half_float_pixel(); } if (__GLeeCheckExtension("GL_ARB_texture_float", &extensionNames) ) { _GLEE_ARB_texture_float = GL_TRUE; __GLeeLink_GL_ARB_texture_float(); } if (__GLeeCheckExtension("GL_ARB_pixel_buffer_object", &extensionNames) ) { _GLEE_ARB_pixel_buffer_object = GL_TRUE; __GLeeLink_GL_ARB_pixel_buffer_object(); } if (__GLeeCheckExtension("GL_ARB_depth_buffer_float", &extensionNames) ) { _GLEE_ARB_depth_buffer_float = GL_TRUE; __GLeeLink_GL_ARB_depth_buffer_float(); } if (__GLeeCheckExtension("GL_ARB_draw_instanced", &extensionNames) ) { _GLEE_ARB_draw_instanced = GL_TRUE; __GLeeLink_GL_ARB_draw_instanced(); } if (__GLeeCheckExtension("GL_ARB_framebuffer_object", &extensionNames) ) { _GLEE_ARB_framebuffer_object = GL_TRUE; __GLeeLink_GL_ARB_framebuffer_object(); } if (__GLeeCheckExtension("GL_ARB_framebuffer_sRGB", &extensionNames) ) { _GLEE_ARB_framebuffer_sRGB = GL_TRUE; __GLeeLink_GL_ARB_framebuffer_sRGB(); } if (__GLeeCheckExtension("GL_ARB_geometry_shader4", &extensionNames) ) { _GLEE_ARB_geometry_shader4 = GL_TRUE; __GLeeLink_GL_ARB_geometry_shader4(); } if (__GLeeCheckExtension("GL_ARB_half_float_vertex", &extensionNames) ) { _GLEE_ARB_half_float_vertex = GL_TRUE; __GLeeLink_GL_ARB_half_float_vertex(); } if (__GLeeCheckExtension("GL_ARB_instanced_arrays", &extensionNames) ) { _GLEE_ARB_instanced_arrays = GL_TRUE; __GLeeLink_GL_ARB_instanced_arrays(); } if (__GLeeCheckExtension("GL_ARB_map_buffer_range", &extensionNames) ) { _GLEE_ARB_map_buffer_range = GL_TRUE; __GLeeLink_GL_ARB_map_buffer_range(); } if (__GLeeCheckExtension("GL_ARB_texture_buffer_object", &extensionNames) ) { _GLEE_ARB_texture_buffer_object = GL_TRUE; __GLeeLink_GL_ARB_texture_buffer_object(); } if (__GLeeCheckExtension("GL_ARB_texture_compression_rgtc", &extensionNames) ) { _GLEE_ARB_texture_compression_rgtc = GL_TRUE; __GLeeLink_GL_ARB_texture_compression_rgtc(); } if (__GLeeCheckExtension("GL_ARB_texture_rg", &extensionNames) ) { _GLEE_ARB_texture_rg = GL_TRUE; __GLeeLink_GL_ARB_texture_rg(); } if (__GLeeCheckExtension("GL_ARB_vertex_array_object", &extensionNames) ) { _GLEE_ARB_vertex_array_object = GL_TRUE; __GLeeLink_GL_ARB_vertex_array_object(); } if (__GLeeCheckExtension("GL_ARB_uniform_buffer_object", &extensionNames) ) { _GLEE_ARB_uniform_buffer_object = GL_TRUE; __GLeeLink_GL_ARB_uniform_buffer_object(); } if (__GLeeCheckExtension("GL_ARB_compatibility", &extensionNames) ) { _GLEE_ARB_compatibility = GL_TRUE; __GLeeLink_GL_ARB_compatibility(); } if (__GLeeCheckExtension("GL_ARB_copy_buffer", &extensionNames) ) { _GLEE_ARB_copy_buffer = GL_TRUE; __GLeeLink_GL_ARB_copy_buffer(); } if (__GLeeCheckExtension("GL_ARB_shader_texture_lod", &extensionNames) ) { _GLEE_ARB_shader_texture_lod = GL_TRUE; __GLeeLink_GL_ARB_shader_texture_lod(); } if (__GLeeCheckExtension("GL_ARB_depth_clamp", &extensionNames) ) { _GLEE_ARB_depth_clamp = GL_TRUE; __GLeeLink_GL_ARB_depth_clamp(); } if (__GLeeCheckExtension("GL_ARB_draw_elements_base_vertex", &extensionNames) ) { _GLEE_ARB_draw_elements_base_vertex = GL_TRUE; __GLeeLink_GL_ARB_draw_elements_base_vertex(); } if (__GLeeCheckExtension("GL_ARB_fragment_coord_conventions", &extensionNames) ) { _GLEE_ARB_fragment_coord_conventions = GL_TRUE; __GLeeLink_GL_ARB_fragment_coord_conventions(); } if (__GLeeCheckExtension("GL_ARB_provoking_vertex", &extensionNames) ) { _GLEE_ARB_provoking_vertex = GL_TRUE; __GLeeLink_GL_ARB_provoking_vertex(); } if (__GLeeCheckExtension("GL_ARB_seamless_cube_map", &extensionNames) ) { _GLEE_ARB_seamless_cube_map = GL_TRUE; __GLeeLink_GL_ARB_seamless_cube_map(); } if (__GLeeCheckExtension("GL_ARB_sync", &extensionNames) ) { _GLEE_ARB_sync = GL_TRUE; __GLeeLink_GL_ARB_sync(); } if (__GLeeCheckExtension("GL_ARB_texture_multisample", &extensionNames) ) { _GLEE_ARB_texture_multisample = GL_TRUE; __GLeeLink_GL_ARB_texture_multisample(); } if (__GLeeCheckExtension("GL_ARB_vertex_array_bgra", &extensionNames) ) { _GLEE_ARB_vertex_array_bgra = GL_TRUE; __GLeeLink_GL_ARB_vertex_array_bgra(); } if (__GLeeCheckExtension("GL_ARB_draw_buffers_blend", &extensionNames) ) { _GLEE_ARB_draw_buffers_blend = GL_TRUE; __GLeeLink_GL_ARB_draw_buffers_blend(); } if (__GLeeCheckExtension("GL_ARB_sample_shading", &extensionNames) ) { _GLEE_ARB_sample_shading = GL_TRUE; __GLeeLink_GL_ARB_sample_shading(); } if (__GLeeCheckExtension("GL_ARB_texture_cube_map_array", &extensionNames) ) { _GLEE_ARB_texture_cube_map_array = GL_TRUE; __GLeeLink_GL_ARB_texture_cube_map_array(); } if (__GLeeCheckExtension("GL_ARB_texture_gather", &extensionNames) ) { _GLEE_ARB_texture_gather = GL_TRUE; __GLeeLink_GL_ARB_texture_gather(); } if (__GLeeCheckExtension("GL_ARB_texture_query_lod", &extensionNames) ) { _GLEE_ARB_texture_query_lod = GL_TRUE; __GLeeLink_GL_ARB_texture_query_lod(); } if (__GLeeCheckExtension("GL_ARB_shading_language_include", &extensionNames) ) { _GLEE_ARB_shading_language_include = GL_TRUE; __GLeeLink_GL_ARB_shading_language_include(); } if (__GLeeCheckExtension("GL_ARB_texture_compression_bptc", &extensionNames) ) { _GLEE_ARB_texture_compression_bptc = GL_TRUE; __GLeeLink_GL_ARB_texture_compression_bptc(); } if (__GLeeCheckExtension("GL_ARB_blend_func_extended", &extensionNames) ) { _GLEE_ARB_blend_func_extended = GL_TRUE; __GLeeLink_GL_ARB_blend_func_extended(); } if (__GLeeCheckExtension("GL_ARB_explicit_attrib_location", &extensionNames) ) { _GLEE_ARB_explicit_attrib_location = GL_TRUE; __GLeeLink_GL_ARB_explicit_attrib_location(); } if (__GLeeCheckExtension("GL_ARB_occlusion_query2", &extensionNames) ) { _GLEE_ARB_occlusion_query2 = GL_TRUE; __GLeeLink_GL_ARB_occlusion_query2(); } if (__GLeeCheckExtension("GL_ARB_sampler_objects", &extensionNames) ) { _GLEE_ARB_sampler_objects = GL_TRUE; __GLeeLink_GL_ARB_sampler_objects(); } if (__GLeeCheckExtension("GL_ARB_shader_bit_encoding", &extensionNames) ) { _GLEE_ARB_shader_bit_encoding = GL_TRUE; __GLeeLink_GL_ARB_shader_bit_encoding(); } if (__GLeeCheckExtension("GL_ARB_texture_rgb10_a2ui", &extensionNames) ) { _GLEE_ARB_texture_rgb10_a2ui = GL_TRUE; __GLeeLink_GL_ARB_texture_rgb10_a2ui(); } if (__GLeeCheckExtension("GL_ARB_texture_swizzle", &extensionNames) ) { _GLEE_ARB_texture_swizzle = GL_TRUE; __GLeeLink_GL_ARB_texture_swizzle(); } if (__GLeeCheckExtension("GL_ARB_timer_query", &extensionNames) ) { _GLEE_ARB_timer_query = GL_TRUE; __GLeeLink_GL_ARB_timer_query(); } if (__GLeeCheckExtension("GL_ARB_vertex_type_2_10_10_10_rev", &extensionNames) ) { _GLEE_ARB_vertex_type_2_10_10_10_rev = GL_TRUE; __GLeeLink_GL_ARB_vertex_type_2_10_10_10_rev(); } if (__GLeeCheckExtension("GL_ARB_draw_indirect", &extensionNames) ) { _GLEE_ARB_draw_indirect = GL_TRUE; __GLeeLink_GL_ARB_draw_indirect(); } if (__GLeeCheckExtension("GL_ARB_gpu_shader5", &extensionNames) ) { _GLEE_ARB_gpu_shader5 = GL_TRUE; __GLeeLink_GL_ARB_gpu_shader5(); } if (__GLeeCheckExtension("GL_ARB_gpu_shader_fp64", &extensionNames) ) { _GLEE_ARB_gpu_shader_fp64 = GL_TRUE; __GLeeLink_GL_ARB_gpu_shader_fp64(); } if (__GLeeCheckExtension("GL_ARB_shader_subroutine", &extensionNames) ) { _GLEE_ARB_shader_subroutine = GL_TRUE; __GLeeLink_GL_ARB_shader_subroutine(); } if (__GLeeCheckExtension("GL_ARB_tessellation_shader", &extensionNames) ) { _GLEE_ARB_tessellation_shader = GL_TRUE; __GLeeLink_GL_ARB_tessellation_shader(); } if (__GLeeCheckExtension("GL_ARB_texture_buffer_object_rgb32", &extensionNames) ) { _GLEE_ARB_texture_buffer_object_rgb32 = GL_TRUE; __GLeeLink_GL_ARB_texture_buffer_object_rgb32(); } if (__GLeeCheckExtension("GL_ARB_transform_feedback2", &extensionNames) ) { _GLEE_ARB_transform_feedback2 = GL_TRUE; __GLeeLink_GL_ARB_transform_feedback2(); } if (__GLeeCheckExtension("GL_ARB_transform_feedback3", &extensionNames) ) { _GLEE_ARB_transform_feedback3 = GL_TRUE; __GLeeLink_GL_ARB_transform_feedback3(); } if (__GLeeCheckExtension("GL_ARB_ES2_compatibility", &extensionNames) ) { _GLEE_ARB_ES2_compatibility = GL_TRUE; __GLeeLink_GL_ARB_ES2_compatibility(); } if (__GLeeCheckExtension("GL_ARB_get_program_binary", &extensionNames) ) { _GLEE_ARB_get_program_binary = GL_TRUE; __GLeeLink_GL_ARB_get_program_binary(); } if (__GLeeCheckExtension("GL_ARB_separate_shader_objects", &extensionNames) ) { _GLEE_ARB_separate_shader_objects = GL_TRUE; __GLeeLink_GL_ARB_separate_shader_objects(); } if (__GLeeCheckExtension("GL_ARB_shader_precision", &extensionNames) ) { _GLEE_ARB_shader_precision = GL_TRUE; __GLeeLink_GL_ARB_shader_precision(); } if (__GLeeCheckExtension("GL_ARB_vertex_attrib_64bit", &extensionNames) ) { _GLEE_ARB_vertex_attrib_64bit = GL_TRUE; __GLeeLink_GL_ARB_vertex_attrib_64bit(); } if (__GLeeCheckExtension("GL_ARB_viewport_array", &extensionNames) ) { _GLEE_ARB_viewport_array = GL_TRUE; __GLeeLink_GL_ARB_viewport_array(); } if (__GLeeCheckExtension("GL_ARB_cl_event", &extensionNames) ) { _GLEE_ARB_cl_event = GL_TRUE; __GLeeLink_GL_ARB_cl_event(); } if (__GLeeCheckExtension("GL_ARB_debug_output", &extensionNames) ) { _GLEE_ARB_debug_output = GL_TRUE; __GLeeLink_GL_ARB_debug_output(); } if (__GLeeCheckExtension("GL_ARB_robustness", &extensionNames) ) { _GLEE_ARB_robustness = GL_TRUE; __GLeeLink_GL_ARB_robustness(); } if (__GLeeCheckExtension("GL_ARB_shader_stencil_export", &extensionNames) ) { _GLEE_ARB_shader_stencil_export = GL_TRUE; __GLeeLink_GL_ARB_shader_stencil_export(); } if (__GLeeCheckExtension("GL_ARB_base_instance", &extensionNames) ) { _GLEE_ARB_base_instance = GL_TRUE; __GLeeLink_GL_ARB_base_instance(); } if (__GLeeCheckExtension("GL_ARB_shading_language_420pack", &extensionNames) ) { _GLEE_ARB_shading_language_420pack = GL_TRUE; __GLeeLink_GL_ARB_shading_language_420pack(); } if (__GLeeCheckExtension("GL_ARB_transform_feedback_instanced", &extensionNames) ) { _GLEE_ARB_transform_feedback_instanced = GL_TRUE; __GLeeLink_GL_ARB_transform_feedback_instanced(); } if (__GLeeCheckExtension("GL_ARB_compressed_texture_pixel_storage", &extensionNames) ) { _GLEE_ARB_compressed_texture_pixel_storage = GL_TRUE; __GLeeLink_GL_ARB_compressed_texture_pixel_storage(); } if (__GLeeCheckExtension("GL_ARB_conservative_depth", &extensionNames) ) { _GLEE_ARB_conservative_depth = GL_TRUE; __GLeeLink_GL_ARB_conservative_depth(); } if (__GLeeCheckExtension("GL_ARB_internalformat_query", &extensionNames) ) { _GLEE_ARB_internalformat_query = GL_TRUE; __GLeeLink_GL_ARB_internalformat_query(); } if (__GLeeCheckExtension("GL_ARB_map_buffer_alignment", &extensionNames) ) { _GLEE_ARB_map_buffer_alignment = GL_TRUE; __GLeeLink_GL_ARB_map_buffer_alignment(); } if (__GLeeCheckExtension("GL_ARB_shader_atomic_counters", &extensionNames) ) { _GLEE_ARB_shader_atomic_counters = GL_TRUE; __GLeeLink_GL_ARB_shader_atomic_counters(); } if (__GLeeCheckExtension("GL_ARB_shader_image_load_store", &extensionNames) ) { _GLEE_ARB_shader_image_load_store = GL_TRUE; __GLeeLink_GL_ARB_shader_image_load_store(); } if (__GLeeCheckExtension("GL_ARB_shading_language_packing", &extensionNames) ) { _GLEE_ARB_shading_language_packing = GL_TRUE; __GLeeLink_GL_ARB_shading_language_packing(); } if (__GLeeCheckExtension("GL_ARB_texture_storage", &extensionNames) ) { _GLEE_ARB_texture_storage = GL_TRUE; __GLeeLink_GL_ARB_texture_storage(); } if (__GLeeCheckExtension("GL_KHR_texture_compression_astc_ldr", &extensionNames) ) { _GLEE_KHR_texture_compression_astc_ldr = GL_TRUE; __GLeeLink_GL_KHR_texture_compression_astc_ldr(); } if (__GLeeCheckExtension("GL_KHR_debug", &extensionNames) ) { _GLEE_KHR_debug = GL_TRUE; __GLeeLink_GL_KHR_debug(); } if (__GLeeCheckExtension("GL_ARB_arrays_of_arrays", &extensionNames) ) { _GLEE_ARB_arrays_of_arrays = GL_TRUE; __GLeeLink_GL_ARB_arrays_of_arrays(); } if (__GLeeCheckExtension("GL_ARB_clear_buffer_object", &extensionNames) ) { _GLEE_ARB_clear_buffer_object = GL_TRUE; __GLeeLink_GL_ARB_clear_buffer_object(); } if (__GLeeCheckExtension("GL_ARB_compute_shader", &extensionNames) ) { _GLEE_ARB_compute_shader = GL_TRUE; __GLeeLink_GL_ARB_compute_shader(); } if (__GLeeCheckExtension("GL_ARB_copy_image", &extensionNames) ) { _GLEE_ARB_copy_image = GL_TRUE; __GLeeLink_GL_ARB_copy_image(); } if (__GLeeCheckExtension("GL_ARB_texture_view", &extensionNames) ) { _GLEE_ARB_texture_view = GL_TRUE; __GLeeLink_GL_ARB_texture_view(); } if (__GLeeCheckExtension("GL_ARB_vertex_attrib_binding", &extensionNames) ) { _GLEE_ARB_vertex_attrib_binding = GL_TRUE; __GLeeLink_GL_ARB_vertex_attrib_binding(); } if (__GLeeCheckExtension("GL_ARB_robustness_isolation", &extensionNames) ) { _GLEE_ARB_robustness_isolation = GL_TRUE; __GLeeLink_GL_ARB_robustness_isolation(); } if (__GLeeCheckExtension("GL_ARB_ES3_compatibility", &extensionNames) ) { _GLEE_ARB_ES3_compatibility = GL_TRUE; __GLeeLink_GL_ARB_ES3_compatibility(); } if (__GLeeCheckExtension("GL_ARB_explicit_uniform_location", &extensionNames) ) { _GLEE_ARB_explicit_uniform_location = GL_TRUE; __GLeeLink_GL_ARB_explicit_uniform_location(); } if (__GLeeCheckExtension("GL_ARB_fragment_layer_viewport", &extensionNames) ) { _GLEE_ARB_fragment_layer_viewport = GL_TRUE; __GLeeLink_GL_ARB_fragment_layer_viewport(); } if (__GLeeCheckExtension("GL_ARB_framebuffer_no_attachments", &extensionNames) ) { _GLEE_ARB_framebuffer_no_attachments = GL_TRUE; __GLeeLink_GL_ARB_framebuffer_no_attachments(); } if (__GLeeCheckExtension("GL_ARB_internalformat_query2", &extensionNames) ) { _GLEE_ARB_internalformat_query2 = GL_TRUE; __GLeeLink_GL_ARB_internalformat_query2(); } if (__GLeeCheckExtension("GL_ARB_invalidate_subdata", &extensionNames) ) { _GLEE_ARB_invalidate_subdata = GL_TRUE; __GLeeLink_GL_ARB_invalidate_subdata(); } if (__GLeeCheckExtension("GL_ARB_multi_draw_indirect", &extensionNames) ) { _GLEE_ARB_multi_draw_indirect = GL_TRUE; __GLeeLink_GL_ARB_multi_draw_indirect(); } if (__GLeeCheckExtension("GL_ARB_program_interface_query", &extensionNames) ) { _GLEE_ARB_program_interface_query = GL_TRUE; __GLeeLink_GL_ARB_program_interface_query(); } if (__GLeeCheckExtension("GL_ARB_robust_buffer_access_behavior", &extensionNames) ) { _GLEE_ARB_robust_buffer_access_behavior = GL_TRUE; __GLeeLink_GL_ARB_robust_buffer_access_behavior(); } if (__GLeeCheckExtension("GL_ARB_shader_image_size", &extensionNames) ) { _GLEE_ARB_shader_image_size = GL_TRUE; __GLeeLink_GL_ARB_shader_image_size(); } if (__GLeeCheckExtension("GL_ARB_shader_storage_buffer_object", &extensionNames) ) { _GLEE_ARB_shader_storage_buffer_object = GL_TRUE; __GLeeLink_GL_ARB_shader_storage_buffer_object(); } if (__GLeeCheckExtension("GL_ARB_stencil_texturing", &extensionNames) ) { _GLEE_ARB_stencil_texturing = GL_TRUE; __GLeeLink_GL_ARB_stencil_texturing(); } if (__GLeeCheckExtension("GL_ARB_texture_buffer_range", &extensionNames) ) { _GLEE_ARB_texture_buffer_range = GL_TRUE; __GLeeLink_GL_ARB_texture_buffer_range(); } if (__GLeeCheckExtension("GL_ARB_texture_query_levels", &extensionNames) ) { _GLEE_ARB_texture_query_levels = GL_TRUE; __GLeeLink_GL_ARB_texture_query_levels(); } if (__GLeeCheckExtension("GL_ARB_texture_storage_multisample", &extensionNames) ) { _GLEE_ARB_texture_storage_multisample = GL_TRUE; __GLeeLink_GL_ARB_texture_storage_multisample(); } if (__GLeeCheckExtension("GL_EXT_abgr", &extensionNames) ) { _GLEE_EXT_abgr = GL_TRUE; __GLeeLink_GL_EXT_abgr(); } if (__GLeeCheckExtension("GL_EXT_blend_color", &extensionNames) ) { _GLEE_EXT_blend_color = GL_TRUE; __GLeeLink_GL_EXT_blend_color(); } if (__GLeeCheckExtension("GL_EXT_polygon_offset", &extensionNames) ) { _GLEE_EXT_polygon_offset = GL_TRUE; __GLeeLink_GL_EXT_polygon_offset(); } if (__GLeeCheckExtension("GL_EXT_texture", &extensionNames) ) { _GLEE_EXT_texture = GL_TRUE; __GLeeLink_GL_EXT_texture(); } if (__GLeeCheckExtension("GL_EXT_texture3D", &extensionNames) ) { _GLEE_EXT_texture3D = GL_TRUE; __GLeeLink_GL_EXT_texture3D(); } if (__GLeeCheckExtension("GL_SGIS_texture_filter4", &extensionNames) ) { _GLEE_SGIS_texture_filter4 = GL_TRUE; __GLeeLink_GL_SGIS_texture_filter4(); } if (__GLeeCheckExtension("GL_EXT_subtexture", &extensionNames) ) { _GLEE_EXT_subtexture = GL_TRUE; __GLeeLink_GL_EXT_subtexture(); } if (__GLeeCheckExtension("GL_EXT_copy_texture", &extensionNames) ) { _GLEE_EXT_copy_texture = GL_TRUE; __GLeeLink_GL_EXT_copy_texture(); } if (__GLeeCheckExtension("GL_EXT_histogram", &extensionNames) ) { _GLEE_EXT_histogram = GL_TRUE; __GLeeLink_GL_EXT_histogram(); } if (__GLeeCheckExtension("GL_EXT_convolution", &extensionNames) ) { _GLEE_EXT_convolution = GL_TRUE; __GLeeLink_GL_EXT_convolution(); } if (__GLeeCheckExtension("GL_SGI_color_matrix", &extensionNames) ) { _GLEE_SGI_color_matrix = GL_TRUE; __GLeeLink_GL_SGI_color_matrix(); } if (__GLeeCheckExtension("GL_SGI_color_table", &extensionNames) ) { _GLEE_SGI_color_table = GL_TRUE; __GLeeLink_GL_SGI_color_table(); } if (__GLeeCheckExtension("GL_SGIS_pixel_texture", &extensionNames) ) { _GLEE_SGIS_pixel_texture = GL_TRUE; __GLeeLink_GL_SGIS_pixel_texture(); } if (__GLeeCheckExtension("GL_SGIX_pixel_texture", &extensionNames) ) { _GLEE_SGIX_pixel_texture = GL_TRUE; __GLeeLink_GL_SGIX_pixel_texture(); } if (__GLeeCheckExtension("GL_SGIS_texture4D", &extensionNames) ) { _GLEE_SGIS_texture4D = GL_TRUE; __GLeeLink_GL_SGIS_texture4D(); } if (__GLeeCheckExtension("GL_SGI_texture_color_table", &extensionNames) ) { _GLEE_SGI_texture_color_table = GL_TRUE; __GLeeLink_GL_SGI_texture_color_table(); } if (__GLeeCheckExtension("GL_EXT_cmyka", &extensionNames) ) { _GLEE_EXT_cmyka = GL_TRUE; __GLeeLink_GL_EXT_cmyka(); } if (__GLeeCheckExtension("GL_EXT_texture_object", &extensionNames) ) { _GLEE_EXT_texture_object = GL_TRUE; __GLeeLink_GL_EXT_texture_object(); } if (__GLeeCheckExtension("GL_SGIS_detail_texture", &extensionNames) ) { _GLEE_SGIS_detail_texture = GL_TRUE; __GLeeLink_GL_SGIS_detail_texture(); } if (__GLeeCheckExtension("GL_SGIS_sharpen_texture", &extensionNames) ) { _GLEE_SGIS_sharpen_texture = GL_TRUE; __GLeeLink_GL_SGIS_sharpen_texture(); } if (__GLeeCheckExtension("GL_EXT_packed_pixels", &extensionNames) ) { _GLEE_EXT_packed_pixels = GL_TRUE; __GLeeLink_GL_EXT_packed_pixels(); } if (__GLeeCheckExtension("GL_SGIS_texture_lod", &extensionNames) ) { _GLEE_SGIS_texture_lod = GL_TRUE; __GLeeLink_GL_SGIS_texture_lod(); } if (__GLeeCheckExtension("GL_SGIS_multisample", &extensionNames) ) { _GLEE_SGIS_multisample = GL_TRUE; __GLeeLink_GL_SGIS_multisample(); } if (__GLeeCheckExtension("GL_EXT_rescale_normal", &extensionNames) ) { _GLEE_EXT_rescale_normal = GL_TRUE; __GLeeLink_GL_EXT_rescale_normal(); } if (__GLeeCheckExtension("GL_EXT_vertex_array", &extensionNames) ) { _GLEE_EXT_vertex_array = GL_TRUE; __GLeeLink_GL_EXT_vertex_array(); } if (__GLeeCheckExtension("GL_EXT_misc_attribute", &extensionNames) ) { _GLEE_EXT_misc_attribute = GL_TRUE; __GLeeLink_GL_EXT_misc_attribute(); } if (__GLeeCheckExtension("GL_SGIS_generate_mipmap", &extensionNames) ) { _GLEE_SGIS_generate_mipmap = GL_TRUE; __GLeeLink_GL_SGIS_generate_mipmap(); } if (__GLeeCheckExtension("GL_SGIX_clipmap", &extensionNames) ) { _GLEE_SGIX_clipmap = GL_TRUE; __GLeeLink_GL_SGIX_clipmap(); } if (__GLeeCheckExtension("GL_SGIX_shadow", &extensionNames) ) { _GLEE_SGIX_shadow = GL_TRUE; __GLeeLink_GL_SGIX_shadow(); } if (__GLeeCheckExtension("GL_SGIS_texture_edge_clamp", &extensionNames) ) { _GLEE_SGIS_texture_edge_clamp = GL_TRUE; __GLeeLink_GL_SGIS_texture_edge_clamp(); } if (__GLeeCheckExtension("GL_SGIS_texture_border_clamp", &extensionNames) ) { _GLEE_SGIS_texture_border_clamp = GL_TRUE; __GLeeLink_GL_SGIS_texture_border_clamp(); } if (__GLeeCheckExtension("GL_EXT_blend_minmax", &extensionNames) ) { _GLEE_EXT_blend_minmax = GL_TRUE; __GLeeLink_GL_EXT_blend_minmax(); } if (__GLeeCheckExtension("GL_EXT_blend_subtract", &extensionNames) ) { _GLEE_EXT_blend_subtract = GL_TRUE; __GLeeLink_GL_EXT_blend_subtract(); } if (__GLeeCheckExtension("GL_EXT_blend_logic_op", &extensionNames) ) { _GLEE_EXT_blend_logic_op = GL_TRUE; __GLeeLink_GL_EXT_blend_logic_op(); } if (__GLeeCheckExtension("GL_SGIX_interlace", &extensionNames) ) { _GLEE_SGIX_interlace = GL_TRUE; __GLeeLink_GL_SGIX_interlace(); } if (__GLeeCheckExtension("GL_SGIX_pixel_tiles", &extensionNames) ) { _GLEE_SGIX_pixel_tiles = GL_TRUE; __GLeeLink_GL_SGIX_pixel_tiles(); } if (__GLeeCheckExtension("GL_SGIS_texture_select", &extensionNames) ) { _GLEE_SGIS_texture_select = GL_TRUE; __GLeeLink_GL_SGIS_texture_select(); } if (__GLeeCheckExtension("GL_SGIX_sprite", &extensionNames) ) { _GLEE_SGIX_sprite = GL_TRUE; __GLeeLink_GL_SGIX_sprite(); } if (__GLeeCheckExtension("GL_SGIX_texture_multi_buffer", &extensionNames) ) { _GLEE_SGIX_texture_multi_buffer = GL_TRUE; __GLeeLink_GL_SGIX_texture_multi_buffer(); } if (__GLeeCheckExtension("GL_EXT_point_parameters", &extensionNames) ) { _GLEE_EXT_point_parameters = GL_TRUE; __GLeeLink_GL_EXT_point_parameters(); } if (__GLeeCheckExtension("GL_SGIS_point_parameters", &extensionNames) ) { _GLEE_SGIS_point_parameters = GL_TRUE; __GLeeLink_GL_SGIS_point_parameters(); } if (__GLeeCheckExtension("GL_SGIX_instruments", &extensionNames) ) { _GLEE_SGIX_instruments = GL_TRUE; __GLeeLink_GL_SGIX_instruments(); } if (__GLeeCheckExtension("GL_SGIX_texture_scale_bias", &extensionNames) ) { _GLEE_SGIX_texture_scale_bias = GL_TRUE; __GLeeLink_GL_SGIX_texture_scale_bias(); } if (__GLeeCheckExtension("GL_SGIX_framezoom", &extensionNames) ) { _GLEE_SGIX_framezoom = GL_TRUE; __GLeeLink_GL_SGIX_framezoom(); } if (__GLeeCheckExtension("GL_SGIX_tag_sample_buffer", &extensionNames) ) { _GLEE_SGIX_tag_sample_buffer = GL_TRUE; __GLeeLink_GL_SGIX_tag_sample_buffer(); } if (__GLeeCheckExtension("GL_FfdMaskSGIX", &extensionNames) ) { _GLEE_FfdMaskSGIX = GL_TRUE; __GLeeLink_GL_FfdMaskSGIX(); } if (__GLeeCheckExtension("GL_SGIX_polynomial_ffd", &extensionNames) ) { _GLEE_SGIX_polynomial_ffd = GL_TRUE; __GLeeLink_GL_SGIX_polynomial_ffd(); } if (__GLeeCheckExtension("GL_SGIX_reference_plane", &extensionNames) ) { _GLEE_SGIX_reference_plane = GL_TRUE; __GLeeLink_GL_SGIX_reference_plane(); } if (__GLeeCheckExtension("GL_SGIX_flush_raster", &extensionNames) ) { _GLEE_SGIX_flush_raster = GL_TRUE; __GLeeLink_GL_SGIX_flush_raster(); } if (__GLeeCheckExtension("GL_SGIX_depth_texture", &extensionNames) ) { _GLEE_SGIX_depth_texture = GL_TRUE; __GLeeLink_GL_SGIX_depth_texture(); } if (__GLeeCheckExtension("GL_SGIS_fog_function", &extensionNames) ) { _GLEE_SGIS_fog_function = GL_TRUE; __GLeeLink_GL_SGIS_fog_function(); } if (__GLeeCheckExtension("GL_SGIX_fog_offset", &extensionNames) ) { _GLEE_SGIX_fog_offset = GL_TRUE; __GLeeLink_GL_SGIX_fog_offset(); } if (__GLeeCheckExtension("GL_HP_image_transform", &extensionNames) ) { _GLEE_HP_image_transform = GL_TRUE; __GLeeLink_GL_HP_image_transform(); } if (__GLeeCheckExtension("GL_HP_convolution_border_modes", &extensionNames) ) { _GLEE_HP_convolution_border_modes = GL_TRUE; __GLeeLink_GL_HP_convolution_border_modes(); } if (__GLeeCheckExtension("GL_INGR_palette_buffer", &extensionNames) ) { _GLEE_INGR_palette_buffer = GL_TRUE; __GLeeLink_GL_INGR_palette_buffer(); } if (__GLeeCheckExtension("GL_SGIX_texture_add_env", &extensionNames) ) { _GLEE_SGIX_texture_add_env = GL_TRUE; __GLeeLink_GL_SGIX_texture_add_env(); } if (__GLeeCheckExtension("GL_EXT_color_subtable", &extensionNames) ) { _GLEE_EXT_color_subtable = GL_TRUE; __GLeeLink_GL_EXT_color_subtable(); } if (__GLeeCheckExtension("GL_PGI_vertex_hints", &extensionNames) ) { _GLEE_PGI_vertex_hints = GL_TRUE; __GLeeLink_GL_PGI_vertex_hints(); } if (__GLeeCheckExtension("GL_PGI_misc_hints", &extensionNames) ) { _GLEE_PGI_misc_hints = GL_TRUE; __GLeeLink_GL_PGI_misc_hints(); } if (__GLeeCheckExtension("GL_EXT_paletted_texture", &extensionNames) ) { _GLEE_EXT_paletted_texture = GL_TRUE; __GLeeLink_GL_EXT_paletted_texture(); } if (__GLeeCheckExtension("GL_EXT_clip_volume_hint", &extensionNames) ) { _GLEE_EXT_clip_volume_hint = GL_TRUE; __GLeeLink_GL_EXT_clip_volume_hint(); } if (__GLeeCheckExtension("GL_SGIX_list_priority", &extensionNames) ) { _GLEE_SGIX_list_priority = GL_TRUE; __GLeeLink_GL_SGIX_list_priority(); } if (__GLeeCheckExtension("GL_SGIX_ir_instrument1", &extensionNames) ) { _GLEE_SGIX_ir_instrument1 = GL_TRUE; __GLeeLink_GL_SGIX_ir_instrument1(); } if (__GLeeCheckExtension("GL_SGIX_calligraphic_fragment", &extensionNames) ) { _GLEE_SGIX_calligraphic_fragment = GL_TRUE; __GLeeLink_GL_SGIX_calligraphic_fragment(); } if (__GLeeCheckExtension("GL_SGIX_texture_lod_bias", &extensionNames) ) { _GLEE_SGIX_texture_lod_bias = GL_TRUE; __GLeeLink_GL_SGIX_texture_lod_bias(); } if (__GLeeCheckExtension("GL_SGIX_shadow_ambient", &extensionNames) ) { _GLEE_SGIX_shadow_ambient = GL_TRUE; __GLeeLink_GL_SGIX_shadow_ambient(); } if (__GLeeCheckExtension("GL_EXT_index_texture", &extensionNames) ) { _GLEE_EXT_index_texture = GL_TRUE; __GLeeLink_GL_EXT_index_texture(); } if (__GLeeCheckExtension("GL_EXT_index_material", &extensionNames) ) { _GLEE_EXT_index_material = GL_TRUE; __GLeeLink_GL_EXT_index_material(); } if (__GLeeCheckExtension("GL_EXT_index_func", &extensionNames) ) { _GLEE_EXT_index_func = GL_TRUE; __GLeeLink_GL_EXT_index_func(); } if (__GLeeCheckExtension("GL_EXT_index_array_formats", &extensionNames) ) { _GLEE_EXT_index_array_formats = GL_TRUE; __GLeeLink_GL_EXT_index_array_formats(); } if (__GLeeCheckExtension("GL_EXT_compiled_vertex_array", &extensionNames) ) { _GLEE_EXT_compiled_vertex_array = GL_TRUE; __GLeeLink_GL_EXT_compiled_vertex_array(); } if (__GLeeCheckExtension("GL_EXT_cull_vertex", &extensionNames) ) { _GLEE_EXT_cull_vertex = GL_TRUE; __GLeeLink_GL_EXT_cull_vertex(); } if (__GLeeCheckExtension("GL_SGIX_ycrcb", &extensionNames) ) { _GLEE_SGIX_ycrcb = GL_TRUE; __GLeeLink_GL_SGIX_ycrcb(); } if (__GLeeCheckExtension("GL_SGIX_fragment_lighting", &extensionNames) ) { _GLEE_SGIX_fragment_lighting = GL_TRUE; __GLeeLink_GL_SGIX_fragment_lighting(); } if (__GLeeCheckExtension("GL_IBM_rasterpos_clip", &extensionNames) ) { _GLEE_IBM_rasterpos_clip = GL_TRUE; __GLeeLink_GL_IBM_rasterpos_clip(); } if (__GLeeCheckExtension("GL_HP_texture_lighting", &extensionNames) ) { _GLEE_HP_texture_lighting = GL_TRUE; __GLeeLink_GL_HP_texture_lighting(); } if (__GLeeCheckExtension("GL_EXT_draw_range_elements", &extensionNames) ) { _GLEE_EXT_draw_range_elements = GL_TRUE; __GLeeLink_GL_EXT_draw_range_elements(); } if (__GLeeCheckExtension("GL_WIN_phong_shading", &extensionNames) ) { _GLEE_WIN_phong_shading = GL_TRUE; __GLeeLink_GL_WIN_phong_shading(); } if (__GLeeCheckExtension("GL_WIN_specular_fog", &extensionNames) ) { _GLEE_WIN_specular_fog = GL_TRUE; __GLeeLink_GL_WIN_specular_fog(); } if (__GLeeCheckExtension("GL_EXT_light_texture", &extensionNames) ) { _GLEE_EXT_light_texture = GL_TRUE; __GLeeLink_GL_EXT_light_texture(); } if (__GLeeCheckExtension("GL_SGIX_blend_alpha_minmax", &extensionNames) ) { _GLEE_SGIX_blend_alpha_minmax = GL_TRUE; __GLeeLink_GL_SGIX_blend_alpha_minmax(); } if (__GLeeCheckExtension("GL_SGIX_impact_pixel_texture", &extensionNames) ) { _GLEE_SGIX_impact_pixel_texture = GL_TRUE; __GLeeLink_GL_SGIX_impact_pixel_texture(); } if (__GLeeCheckExtension("GL_EXT_bgra", &extensionNames) ) { _GLEE_EXT_bgra = GL_TRUE; __GLeeLink_GL_EXT_bgra(); } if (__GLeeCheckExtension("GL_SGIX_async", &extensionNames) ) { _GLEE_SGIX_async = GL_TRUE; __GLeeLink_GL_SGIX_async(); } if (__GLeeCheckExtension("GL_SGIX_async_pixel", &extensionNames) ) { _GLEE_SGIX_async_pixel = GL_TRUE; __GLeeLink_GL_SGIX_async_pixel(); } if (__GLeeCheckExtension("GL_SGIX_async_histogram", &extensionNames) ) { _GLEE_SGIX_async_histogram = GL_TRUE; __GLeeLink_GL_SGIX_async_histogram(); } if (__GLeeCheckExtension("GL_INTEL_texture_scissor", &extensionNames) ) { _GLEE_INTEL_texture_scissor = GL_TRUE; __GLeeLink_GL_INTEL_texture_scissor(); } if (__GLeeCheckExtension("GL_INTEL_parallel_arrays", &extensionNames) ) { _GLEE_INTEL_parallel_arrays = GL_TRUE; __GLeeLink_GL_INTEL_parallel_arrays(); } if (__GLeeCheckExtension("GL_HP_occlusion_test", &extensionNames) ) { _GLEE_HP_occlusion_test = GL_TRUE; __GLeeLink_GL_HP_occlusion_test(); } if (__GLeeCheckExtension("GL_EXT_pixel_transform", &extensionNames) ) { _GLEE_EXT_pixel_transform = GL_TRUE; __GLeeLink_GL_EXT_pixel_transform(); } if (__GLeeCheckExtension("GL_EXT_pixel_transform_color_table", &extensionNames) ) { _GLEE_EXT_pixel_transform_color_table = GL_TRUE; __GLeeLink_GL_EXT_pixel_transform_color_table(); } if (__GLeeCheckExtension("GL_EXT_shared_texture_palette", &extensionNames) ) { _GLEE_EXT_shared_texture_palette = GL_TRUE; __GLeeLink_GL_EXT_shared_texture_palette(); } if (__GLeeCheckExtension("GL_EXT_separate_specular_color", &extensionNames) ) { _GLEE_EXT_separate_specular_color = GL_TRUE; __GLeeLink_GL_EXT_separate_specular_color(); } if (__GLeeCheckExtension("GL_EXT_secondary_color", &extensionNames) ) { _GLEE_EXT_secondary_color = GL_TRUE; __GLeeLink_GL_EXT_secondary_color(); } if (__GLeeCheckExtension("GL_EXT_texture_perturb_normal", &extensionNames) ) { _GLEE_EXT_texture_perturb_normal = GL_TRUE; __GLeeLink_GL_EXT_texture_perturb_normal(); } if (__GLeeCheckExtension("GL_EXT_multi_draw_arrays", &extensionNames) ) { _GLEE_EXT_multi_draw_arrays = GL_TRUE; __GLeeLink_GL_EXT_multi_draw_arrays(); } if (__GLeeCheckExtension("GL_EXT_fog_coord", &extensionNames) ) { _GLEE_EXT_fog_coord = GL_TRUE; __GLeeLink_GL_EXT_fog_coord(); } if (__GLeeCheckExtension("GL_REND_screen_coordinates", &extensionNames) ) { _GLEE_REND_screen_coordinates = GL_TRUE; __GLeeLink_GL_REND_screen_coordinates(); } if (__GLeeCheckExtension("GL_EXT_coordinate_frame", &extensionNames) ) { _GLEE_EXT_coordinate_frame = GL_TRUE; __GLeeLink_GL_EXT_coordinate_frame(); } if (__GLeeCheckExtension("GL_EXT_texture_env_combine", &extensionNames) ) { _GLEE_EXT_texture_env_combine = GL_TRUE; __GLeeLink_GL_EXT_texture_env_combine(); } if (__GLeeCheckExtension("GL_APPLE_specular_vector", &extensionNames) ) { _GLEE_APPLE_specular_vector = GL_TRUE; __GLeeLink_GL_APPLE_specular_vector(); } if (__GLeeCheckExtension("GL_APPLE_transform_hint", &extensionNames) ) { _GLEE_APPLE_transform_hint = GL_TRUE; __GLeeLink_GL_APPLE_transform_hint(); } if (__GLeeCheckExtension("GL_SGIX_fog_scale", &extensionNames) ) { _GLEE_SGIX_fog_scale = GL_TRUE; __GLeeLink_GL_SGIX_fog_scale(); } if (__GLeeCheckExtension("GL_SUNX_constant_data", &extensionNames) ) { _GLEE_SUNX_constant_data = GL_TRUE; __GLeeLink_GL_SUNX_constant_data(); } if (__GLeeCheckExtension("GL_SUN_global_alpha", &extensionNames) ) { _GLEE_SUN_global_alpha = GL_TRUE; __GLeeLink_GL_SUN_global_alpha(); } if (__GLeeCheckExtension("GL_SUN_triangle_list", &extensionNames) ) { _GLEE_SUN_triangle_list = GL_TRUE; __GLeeLink_GL_SUN_triangle_list(); } if (__GLeeCheckExtension("GL_SUN_vertex", &extensionNames) ) { _GLEE_SUN_vertex = GL_TRUE; __GLeeLink_GL_SUN_vertex(); } if (__GLeeCheckExtension("GL_EXT_blend_func_separate", &extensionNames) ) { _GLEE_EXT_blend_func_separate = GL_TRUE; __GLeeLink_GL_EXT_blend_func_separate(); } if (__GLeeCheckExtension("GL_INGR_color_clamp", &extensionNames) ) { _GLEE_INGR_color_clamp = GL_TRUE; __GLeeLink_GL_INGR_color_clamp(); } if (__GLeeCheckExtension("GL_INGR_interlace_read", &extensionNames) ) { _GLEE_INGR_interlace_read = GL_TRUE; __GLeeLink_GL_INGR_interlace_read(); } if (__GLeeCheckExtension("GL_EXT_stencil_wrap", &extensionNames) ) { _GLEE_EXT_stencil_wrap = GL_TRUE; __GLeeLink_GL_EXT_stencil_wrap(); } if (__GLeeCheckExtension("GL_EXT_422_pixels", &extensionNames) ) { _GLEE_EXT_422_pixels = GL_TRUE; __GLeeLink_GL_EXT_422_pixels(); } if (__GLeeCheckExtension("GL_NV_texgen_reflection", &extensionNames) ) { _GLEE_NV_texgen_reflection = GL_TRUE; __GLeeLink_GL_NV_texgen_reflection(); } if (__GLeeCheckExtension("GL_EXT_texture_cube_map", &extensionNames) ) { _GLEE_EXT_texture_cube_map = GL_TRUE; __GLeeLink_GL_EXT_texture_cube_map(); } if (__GLeeCheckExtension("GL_SUN_convolution_border_modes", &extensionNames) ) { _GLEE_SUN_convolution_border_modes = GL_TRUE; __GLeeLink_GL_SUN_convolution_border_modes(); } if (__GLeeCheckExtension("GL_EXT_texture_env_add", &extensionNames) ) { _GLEE_EXT_texture_env_add = GL_TRUE; __GLeeLink_GL_EXT_texture_env_add(); } if (__GLeeCheckExtension("GL_EXT_texture_lod_bias", &extensionNames) ) { _GLEE_EXT_texture_lod_bias = GL_TRUE; __GLeeLink_GL_EXT_texture_lod_bias(); } if (__GLeeCheckExtension("GL_EXT_texture_filter_anisotropic", &extensionNames) ) { _GLEE_EXT_texture_filter_anisotropic = GL_TRUE; __GLeeLink_GL_EXT_texture_filter_anisotropic(); } if (__GLeeCheckExtension("GL_EXT_vertex_weighting", &extensionNames) ) { _GLEE_EXT_vertex_weighting = GL_TRUE; __GLeeLink_GL_EXT_vertex_weighting(); } if (__GLeeCheckExtension("GL_NV_light_max_exponent", &extensionNames) ) { _GLEE_NV_light_max_exponent = GL_TRUE; __GLeeLink_GL_NV_light_max_exponent(); } if (__GLeeCheckExtension("GL_NV_vertex_array_range", &extensionNames) ) { _GLEE_NV_vertex_array_range = GL_TRUE; __GLeeLink_GL_NV_vertex_array_range(); } if (__GLeeCheckExtension("GL_NV_register_combiners", &extensionNames) ) { _GLEE_NV_register_combiners = GL_TRUE; __GLeeLink_GL_NV_register_combiners(); } if (__GLeeCheckExtension("GL_NV_fog_distance", &extensionNames) ) { _GLEE_NV_fog_distance = GL_TRUE; __GLeeLink_GL_NV_fog_distance(); } if (__GLeeCheckExtension("GL_NV_texgen_emboss", &extensionNames) ) { _GLEE_NV_texgen_emboss = GL_TRUE; __GLeeLink_GL_NV_texgen_emboss(); } if (__GLeeCheckExtension("GL_NV_blend_square", &extensionNames) ) { _GLEE_NV_blend_square = GL_TRUE; __GLeeLink_GL_NV_blend_square(); } if (__GLeeCheckExtension("GL_NV_texture_env_combine4", &extensionNames) ) { _GLEE_NV_texture_env_combine4 = GL_TRUE; __GLeeLink_GL_NV_texture_env_combine4(); } if (__GLeeCheckExtension("GL_MESA_resize_buffers", &extensionNames) ) { _GLEE_MESA_resize_buffers = GL_TRUE; __GLeeLink_GL_MESA_resize_buffers(); } if (__GLeeCheckExtension("GL_MESA_window_pos", &extensionNames) ) { _GLEE_MESA_window_pos = GL_TRUE; __GLeeLink_GL_MESA_window_pos(); } if (__GLeeCheckExtension("GL_EXT_texture_compression_s3tc", &extensionNames) ) { _GLEE_EXT_texture_compression_s3tc = GL_TRUE; __GLeeLink_GL_EXT_texture_compression_s3tc(); } if (__GLeeCheckExtension("GL_IBM_cull_vertex", &extensionNames) ) { _GLEE_IBM_cull_vertex = GL_TRUE; __GLeeLink_GL_IBM_cull_vertex(); } if (__GLeeCheckExtension("GL_IBM_multimode_draw_arrays", &extensionNames) ) { _GLEE_IBM_multimode_draw_arrays = GL_TRUE; __GLeeLink_GL_IBM_multimode_draw_arrays(); } if (__GLeeCheckExtension("GL_IBM_vertex_array_lists", &extensionNames) ) { _GLEE_IBM_vertex_array_lists = GL_TRUE; __GLeeLink_GL_IBM_vertex_array_lists(); } if (__GLeeCheckExtension("GL_SGIX_subsample", &extensionNames) ) { _GLEE_SGIX_subsample = GL_TRUE; __GLeeLink_GL_SGIX_subsample(); } if (__GLeeCheckExtension("GL_SGIX_ycrcb_subsample", &extensionNames) ) { _GLEE_SGIX_ycrcb_subsample = GL_TRUE; __GLeeLink_GL_SGIX_ycrcb_subsample(); } if (__GLeeCheckExtension("GL_SGIX_ycrcba", &extensionNames) ) { _GLEE_SGIX_ycrcba = GL_TRUE; __GLeeLink_GL_SGIX_ycrcba(); } if (__GLeeCheckExtension("GL_SGI_depth_pass_instrument", &extensionNames) ) { _GLEE_SGI_depth_pass_instrument = GL_TRUE; __GLeeLink_GL_SGI_depth_pass_instrument(); } if (__GLeeCheckExtension("GL_3DFX_texture_compression_FXT1", &extensionNames) ) { _GLEE_3DFX_texture_compression_FXT1 = GL_TRUE; __GLeeLink_GL_3DFX_texture_compression_FXT1(); } if (__GLeeCheckExtension("GL_3DFX_multisample", &extensionNames) ) { _GLEE_3DFX_multisample = GL_TRUE; __GLeeLink_GL_3DFX_multisample(); } if (__GLeeCheckExtension("GL_3DFX_tbuffer", &extensionNames) ) { _GLEE_3DFX_tbuffer = GL_TRUE; __GLeeLink_GL_3DFX_tbuffer(); } if (__GLeeCheckExtension("GL_EXT_multisample", &extensionNames) ) { _GLEE_EXT_multisample = GL_TRUE; __GLeeLink_GL_EXT_multisample(); } if (__GLeeCheckExtension("GL_SGIX_vertex_preclip", &extensionNames) ) { _GLEE_SGIX_vertex_preclip = GL_TRUE; __GLeeLink_GL_SGIX_vertex_preclip(); } if (__GLeeCheckExtension("GL_SGIX_convolution_accuracy", &extensionNames) ) { _GLEE_SGIX_convolution_accuracy = GL_TRUE; __GLeeLink_GL_SGIX_convolution_accuracy(); } if (__GLeeCheckExtension("GL_SGIX_resample", &extensionNames) ) { _GLEE_SGIX_resample = GL_TRUE; __GLeeLink_GL_SGIX_resample(); } if (__GLeeCheckExtension("GL_SGIS_point_line_texgen", &extensionNames) ) { _GLEE_SGIS_point_line_texgen = GL_TRUE; __GLeeLink_GL_SGIS_point_line_texgen(); } if (__GLeeCheckExtension("GL_SGIS_texture_color_mask", &extensionNames) ) { _GLEE_SGIS_texture_color_mask = GL_TRUE; __GLeeLink_GL_SGIS_texture_color_mask(); } if (__GLeeCheckExtension("GL_EXT_texture_env_dot3", &extensionNames) ) { _GLEE_EXT_texture_env_dot3 = GL_TRUE; __GLeeLink_GL_EXT_texture_env_dot3(); } if (__GLeeCheckExtension("GL_ATI_texture_mirror_once", &extensionNames) ) { _GLEE_ATI_texture_mirror_once = GL_TRUE; __GLeeLink_GL_ATI_texture_mirror_once(); } if (__GLeeCheckExtension("GL_NV_fence", &extensionNames) ) { _GLEE_NV_fence = GL_TRUE; __GLeeLink_GL_NV_fence(); } if (__GLeeCheckExtension("GL_IBM_texture_mirrored_repeat", &extensionNames) ) { _GLEE_IBM_texture_mirrored_repeat = GL_TRUE; __GLeeLink_GL_IBM_texture_mirrored_repeat(); } if (__GLeeCheckExtension("GL_NV_evaluators", &extensionNames) ) { _GLEE_NV_evaluators = GL_TRUE; __GLeeLink_GL_NV_evaluators(); } if (__GLeeCheckExtension("GL_NV_packed_depth_stencil", &extensionNames) ) { _GLEE_NV_packed_depth_stencil = GL_TRUE; __GLeeLink_GL_NV_packed_depth_stencil(); } if (__GLeeCheckExtension("GL_NV_register_combiners2", &extensionNames) ) { _GLEE_NV_register_combiners2 = GL_TRUE; __GLeeLink_GL_NV_register_combiners2(); } if (__GLeeCheckExtension("GL_NV_texture_compression_vtc", &extensionNames) ) { _GLEE_NV_texture_compression_vtc = GL_TRUE; __GLeeLink_GL_NV_texture_compression_vtc(); } if (__GLeeCheckExtension("GL_NV_texture_rectangle", &extensionNames) ) { _GLEE_NV_texture_rectangle = GL_TRUE; __GLeeLink_GL_NV_texture_rectangle(); } if (__GLeeCheckExtension("GL_NV_texture_shader", &extensionNames) ) { _GLEE_NV_texture_shader = GL_TRUE; __GLeeLink_GL_NV_texture_shader(); } if (__GLeeCheckExtension("GL_NV_texture_shader2", &extensionNames) ) { _GLEE_NV_texture_shader2 = GL_TRUE; __GLeeLink_GL_NV_texture_shader2(); } if (__GLeeCheckExtension("GL_NV_vertex_array_range2", &extensionNames) ) { _GLEE_NV_vertex_array_range2 = GL_TRUE; __GLeeLink_GL_NV_vertex_array_range2(); } if (__GLeeCheckExtension("GL_NV_vertex_program", &extensionNames) ) { _GLEE_NV_vertex_program = GL_TRUE; __GLeeLink_GL_NV_vertex_program(); } if (__GLeeCheckExtension("GL_SGIX_texture_coordinate_clamp", &extensionNames) ) { _GLEE_SGIX_texture_coordinate_clamp = GL_TRUE; __GLeeLink_GL_SGIX_texture_coordinate_clamp(); } if (__GLeeCheckExtension("GL_SGIX_scalebias_hint", &extensionNames) ) { _GLEE_SGIX_scalebias_hint = GL_TRUE; __GLeeLink_GL_SGIX_scalebias_hint(); } if (__GLeeCheckExtension("GL_OML_interlace", &extensionNames) ) { _GLEE_OML_interlace = GL_TRUE; __GLeeLink_GL_OML_interlace(); } if (__GLeeCheckExtension("GL_OML_subsample", &extensionNames) ) { _GLEE_OML_subsample = GL_TRUE; __GLeeLink_GL_OML_subsample(); } if (__GLeeCheckExtension("GL_OML_resample", &extensionNames) ) { _GLEE_OML_resample = GL_TRUE; __GLeeLink_GL_OML_resample(); } if (__GLeeCheckExtension("GL_NV_copy_depth_to_color", &extensionNames) ) { _GLEE_NV_copy_depth_to_color = GL_TRUE; __GLeeLink_GL_NV_copy_depth_to_color(); } if (__GLeeCheckExtension("GL_ATI_envmap_bumpmap", &extensionNames) ) { _GLEE_ATI_envmap_bumpmap = GL_TRUE; __GLeeLink_GL_ATI_envmap_bumpmap(); } if (__GLeeCheckExtension("GL_ATI_fragment_shader", &extensionNames) ) { _GLEE_ATI_fragment_shader = GL_TRUE; __GLeeLink_GL_ATI_fragment_shader(); } if (__GLeeCheckExtension("GL_ATI_pn_triangles", &extensionNames) ) { _GLEE_ATI_pn_triangles = GL_TRUE; __GLeeLink_GL_ATI_pn_triangles(); } if (__GLeeCheckExtension("GL_ATI_vertex_array_object", &extensionNames) ) { _GLEE_ATI_vertex_array_object = GL_TRUE; __GLeeLink_GL_ATI_vertex_array_object(); } if (__GLeeCheckExtension("GL_EXT_vertex_shader", &extensionNames) ) { _GLEE_EXT_vertex_shader = GL_TRUE; __GLeeLink_GL_EXT_vertex_shader(); } if (__GLeeCheckExtension("GL_ATI_vertex_streams", &extensionNames) ) { _GLEE_ATI_vertex_streams = GL_TRUE; __GLeeLink_GL_ATI_vertex_streams(); } if (__GLeeCheckExtension("GL_ATI_element_array", &extensionNames) ) { _GLEE_ATI_element_array = GL_TRUE; __GLeeLink_GL_ATI_element_array(); } if (__GLeeCheckExtension("GL_SUN_mesh_array", &extensionNames) ) { _GLEE_SUN_mesh_array = GL_TRUE; __GLeeLink_GL_SUN_mesh_array(); } if (__GLeeCheckExtension("GL_SUN_slice_accum", &extensionNames) ) { _GLEE_SUN_slice_accum = GL_TRUE; __GLeeLink_GL_SUN_slice_accum(); } if (__GLeeCheckExtension("GL_NV_multisample_filter_hint", &extensionNames) ) { _GLEE_NV_multisample_filter_hint = GL_TRUE; __GLeeLink_GL_NV_multisample_filter_hint(); } if (__GLeeCheckExtension("GL_NV_depth_clamp", &extensionNames) ) { _GLEE_NV_depth_clamp = GL_TRUE; __GLeeLink_GL_NV_depth_clamp(); } if (__GLeeCheckExtension("GL_NV_occlusion_query", &extensionNames) ) { _GLEE_NV_occlusion_query = GL_TRUE; __GLeeLink_GL_NV_occlusion_query(); } if (__GLeeCheckExtension("GL_NV_point_sprite", &extensionNames) ) { _GLEE_NV_point_sprite = GL_TRUE; __GLeeLink_GL_NV_point_sprite(); } if (__GLeeCheckExtension("GL_NV_texture_shader3", &extensionNames) ) { _GLEE_NV_texture_shader3 = GL_TRUE; __GLeeLink_GL_NV_texture_shader3(); } if (__GLeeCheckExtension("GL_NV_vertex_program1_1", &extensionNames) ) { _GLEE_NV_vertex_program1_1 = GL_TRUE; __GLeeLink_GL_NV_vertex_program1_1(); } if (__GLeeCheckExtension("GL_EXT_shadow_funcs", &extensionNames) ) { _GLEE_EXT_shadow_funcs = GL_TRUE; __GLeeLink_GL_EXT_shadow_funcs(); } if (__GLeeCheckExtension("GL_EXT_stencil_two_side", &extensionNames) ) { _GLEE_EXT_stencil_two_side = GL_TRUE; __GLeeLink_GL_EXT_stencil_two_side(); } if (__GLeeCheckExtension("GL_ATI_text_fragment_shader", &extensionNames) ) { _GLEE_ATI_text_fragment_shader = GL_TRUE; __GLeeLink_GL_ATI_text_fragment_shader(); } if (__GLeeCheckExtension("GL_APPLE_client_storage", &extensionNames) ) { _GLEE_APPLE_client_storage = GL_TRUE; __GLeeLink_GL_APPLE_client_storage(); } if (__GLeeCheckExtension("GL_APPLE_element_array", &extensionNames) ) { _GLEE_APPLE_element_array = GL_TRUE; __GLeeLink_GL_APPLE_element_array(); } if (__GLeeCheckExtension("GL_APPLE_fence", &extensionNames) ) { _GLEE_APPLE_fence = GL_TRUE; __GLeeLink_GL_APPLE_fence(); } if (__GLeeCheckExtension("GL_APPLE_vertex_array_object", &extensionNames) ) { _GLEE_APPLE_vertex_array_object = GL_TRUE; __GLeeLink_GL_APPLE_vertex_array_object(); } if (__GLeeCheckExtension("GL_APPLE_vertex_array_range", &extensionNames) ) { _GLEE_APPLE_vertex_array_range = GL_TRUE; __GLeeLink_GL_APPLE_vertex_array_range(); } if (__GLeeCheckExtension("GL_APPLE_ycbcr_422", &extensionNames) ) { _GLEE_APPLE_ycbcr_422 = GL_TRUE; __GLeeLink_GL_APPLE_ycbcr_422(); } if (__GLeeCheckExtension("GL_S3_s3tc", &extensionNames) ) { _GLEE_S3_s3tc = GL_TRUE; __GLeeLink_GL_S3_s3tc(); } if (__GLeeCheckExtension("GL_ATI_draw_buffers", &extensionNames) ) { _GLEE_ATI_draw_buffers = GL_TRUE; __GLeeLink_GL_ATI_draw_buffers(); } if (__GLeeCheckExtension("GL_ATI_pixel_format_float", &extensionNames) ) { _GLEE_ATI_pixel_format_float = GL_TRUE; __GLeeLink_GL_ATI_pixel_format_float(); } if (__GLeeCheckExtension("GL_ATI_texture_env_combine3", &extensionNames) ) { _GLEE_ATI_texture_env_combine3 = GL_TRUE; __GLeeLink_GL_ATI_texture_env_combine3(); } if (__GLeeCheckExtension("GL_ATI_texture_float", &extensionNames) ) { _GLEE_ATI_texture_float = GL_TRUE; __GLeeLink_GL_ATI_texture_float(); } if (__GLeeCheckExtension("GL_NV_float_buffer", &extensionNames) ) { _GLEE_NV_float_buffer = GL_TRUE; __GLeeLink_GL_NV_float_buffer(); } if (__GLeeCheckExtension("GL_NV_fragment_program", &extensionNames) ) { _GLEE_NV_fragment_program = GL_TRUE; __GLeeLink_GL_NV_fragment_program(); } if (__GLeeCheckExtension("GL_NV_half_float", &extensionNames) ) { _GLEE_NV_half_float = GL_TRUE; __GLeeLink_GL_NV_half_float(); } if (__GLeeCheckExtension("GL_NV_pixel_data_range", &extensionNames) ) { _GLEE_NV_pixel_data_range = GL_TRUE; __GLeeLink_GL_NV_pixel_data_range(); } if (__GLeeCheckExtension("GL_NV_primitive_restart", &extensionNames) ) { _GLEE_NV_primitive_restart = GL_TRUE; __GLeeLink_GL_NV_primitive_restart(); } if (__GLeeCheckExtension("GL_NV_texture_expand_normal", &extensionNames) ) { _GLEE_NV_texture_expand_normal = GL_TRUE; __GLeeLink_GL_NV_texture_expand_normal(); } if (__GLeeCheckExtension("GL_NV_vertex_program2", &extensionNames) ) { _GLEE_NV_vertex_program2 = GL_TRUE; __GLeeLink_GL_NV_vertex_program2(); } if (__GLeeCheckExtension("GL_ATI_map_object_buffer", &extensionNames) ) { _GLEE_ATI_map_object_buffer = GL_TRUE; __GLeeLink_GL_ATI_map_object_buffer(); } if (__GLeeCheckExtension("GL_ATI_separate_stencil", &extensionNames) ) { _GLEE_ATI_separate_stencil = GL_TRUE; __GLeeLink_GL_ATI_separate_stencil(); } if (__GLeeCheckExtension("GL_ATI_vertex_attrib_array_object", &extensionNames) ) { _GLEE_ATI_vertex_attrib_array_object = GL_TRUE; __GLeeLink_GL_ATI_vertex_attrib_array_object(); } if (__GLeeCheckExtension("GL_OES_byte_coordinates", &extensionNames) ) { _GLEE_OES_byte_coordinates = GL_TRUE; __GLeeLink_GL_OES_byte_coordinates(); } if (__GLeeCheckExtension("GL_OES_fixed_point", &extensionNames) ) { _GLEE_OES_fixed_point = GL_TRUE; __GLeeLink_GL_OES_fixed_point(); } if (__GLeeCheckExtension("GL_OES_single_precision", &extensionNames) ) { _GLEE_OES_single_precision = GL_TRUE; __GLeeLink_GL_OES_single_precision(); } if (__GLeeCheckExtension("GL_OES_compressed_paletted_texture", &extensionNames) ) { _GLEE_OES_compressed_paletted_texture = GL_TRUE; __GLeeLink_GL_OES_compressed_paletted_texture(); } if (__GLeeCheckExtension("GL_OES_read_format", &extensionNames) ) { _GLEE_OES_read_format = GL_TRUE; __GLeeLink_GL_OES_read_format(); } if (__GLeeCheckExtension("GL_OES_query_matrix", &extensionNames) ) { _GLEE_OES_query_matrix = GL_TRUE; __GLeeLink_GL_OES_query_matrix(); } if (__GLeeCheckExtension("GL_EXT_depth_bounds_test", &extensionNames) ) { _GLEE_EXT_depth_bounds_test = GL_TRUE; __GLeeLink_GL_EXT_depth_bounds_test(); } if (__GLeeCheckExtension("GL_EXT_texture_mirror_clamp", &extensionNames) ) { _GLEE_EXT_texture_mirror_clamp = GL_TRUE; __GLeeLink_GL_EXT_texture_mirror_clamp(); } if (__GLeeCheckExtension("GL_EXT_blend_equation_separate", &extensionNames) ) { _GLEE_EXT_blend_equation_separate = GL_TRUE; __GLeeLink_GL_EXT_blend_equation_separate(); } if (__GLeeCheckExtension("GL_MESA_pack_invert", &extensionNames) ) { _GLEE_MESA_pack_invert = GL_TRUE; __GLeeLink_GL_MESA_pack_invert(); } if (__GLeeCheckExtension("GL_MESA_ycbcr_texture", &extensionNames) ) { _GLEE_MESA_ycbcr_texture = GL_TRUE; __GLeeLink_GL_MESA_ycbcr_texture(); } if (__GLeeCheckExtension("GL_EXT_pixel_buffer_object", &extensionNames) ) { _GLEE_EXT_pixel_buffer_object = GL_TRUE; __GLeeLink_GL_EXT_pixel_buffer_object(); } if (__GLeeCheckExtension("GL_NV_fragment_program_option", &extensionNames) ) { _GLEE_NV_fragment_program_option = GL_TRUE; __GLeeLink_GL_NV_fragment_program_option(); } if (__GLeeCheckExtension("GL_NV_fragment_program2", &extensionNames) ) { _GLEE_NV_fragment_program2 = GL_TRUE; __GLeeLink_GL_NV_fragment_program2(); } if (__GLeeCheckExtension("GL_NV_vertex_program2_option", &extensionNames) ) { _GLEE_NV_vertex_program2_option = GL_TRUE; __GLeeLink_GL_NV_vertex_program2_option(); } if (__GLeeCheckExtension("GL_NV_vertex_program3", &extensionNames) ) { _GLEE_NV_vertex_program3 = GL_TRUE; __GLeeLink_GL_NV_vertex_program3(); } if (__GLeeCheckExtension("GL_EXT_framebuffer_object", &extensionNames) ) { _GLEE_EXT_framebuffer_object = GL_TRUE; __GLeeLink_GL_EXT_framebuffer_object(); } if (__GLeeCheckExtension("GL_GREMEDY_string_marker", &extensionNames) ) { _GLEE_GREMEDY_string_marker = GL_TRUE; __GLeeLink_GL_GREMEDY_string_marker(); } if (__GLeeCheckExtension("GL_EXT_packed_depth_stencil", &extensionNames) ) { _GLEE_EXT_packed_depth_stencil = GL_TRUE; __GLeeLink_GL_EXT_packed_depth_stencil(); } if (__GLeeCheckExtension("GL_EXT_stencil_clear_tag", &extensionNames) ) { _GLEE_EXT_stencil_clear_tag = GL_TRUE; __GLeeLink_GL_EXT_stencil_clear_tag(); } if (__GLeeCheckExtension("GL_EXT_texture_sRGB", &extensionNames) ) { _GLEE_EXT_texture_sRGB = GL_TRUE; __GLeeLink_GL_EXT_texture_sRGB(); } if (__GLeeCheckExtension("GL_EXT_framebuffer_blit", &extensionNames) ) { _GLEE_EXT_framebuffer_blit = GL_TRUE; __GLeeLink_GL_EXT_framebuffer_blit(); } if (__GLeeCheckExtension("GL_EXT_framebuffer_multisample", &extensionNames) ) { _GLEE_EXT_framebuffer_multisample = GL_TRUE; __GLeeLink_GL_EXT_framebuffer_multisample(); } if (__GLeeCheckExtension("GL_MESAX_texture_stack", &extensionNames) ) { _GLEE_MESAX_texture_stack = GL_TRUE; __GLeeLink_GL_MESAX_texture_stack(); } if (__GLeeCheckExtension("GL_EXT_timer_query", &extensionNames) ) { _GLEE_EXT_timer_query = GL_TRUE; __GLeeLink_GL_EXT_timer_query(); } if (__GLeeCheckExtension("GL_EXT_gpu_program_parameters", &extensionNames) ) { _GLEE_EXT_gpu_program_parameters = GL_TRUE; __GLeeLink_GL_EXT_gpu_program_parameters(); } if (__GLeeCheckExtension("GL_APPLE_flush_buffer_range", &extensionNames) ) { _GLEE_APPLE_flush_buffer_range = GL_TRUE; __GLeeLink_GL_APPLE_flush_buffer_range(); } if (__GLeeCheckExtension("GL_EXT_gpu_shader4", &extensionNames) ) { _GLEE_EXT_gpu_shader4 = GL_TRUE; __GLeeLink_GL_EXT_gpu_shader4(); } if (__GLeeCheckExtension("GL_EXT_draw_instanced", &extensionNames) ) { _GLEE_EXT_draw_instanced = GL_TRUE; __GLeeLink_GL_EXT_draw_instanced(); } if (__GLeeCheckExtension("GL_EXT_packed_float", &extensionNames) ) { _GLEE_EXT_packed_float = GL_TRUE; __GLeeLink_GL_EXT_packed_float(); } if (__GLeeCheckExtension("GL_EXT_texture_array", &extensionNames) ) { _GLEE_EXT_texture_array = GL_TRUE; __GLeeLink_GL_EXT_texture_array(); } if (__GLeeCheckExtension("GL_EXT_texture_buffer_object", &extensionNames) ) { _GLEE_EXT_texture_buffer_object = GL_TRUE; __GLeeLink_GL_EXT_texture_buffer_object(); } if (__GLeeCheckExtension("GL_EXT_texture_compression_latc", &extensionNames) ) { _GLEE_EXT_texture_compression_latc = GL_TRUE; __GLeeLink_GL_EXT_texture_compression_latc(); } if (__GLeeCheckExtension("GL_EXT_texture_compression_rgtc", &extensionNames) ) { _GLEE_EXT_texture_compression_rgtc = GL_TRUE; __GLeeLink_GL_EXT_texture_compression_rgtc(); } if (__GLeeCheckExtension("GL_EXT_texture_shared_exponent", &extensionNames) ) { _GLEE_EXT_texture_shared_exponent = GL_TRUE; __GLeeLink_GL_EXT_texture_shared_exponent(); } if (__GLeeCheckExtension("GL_NV_depth_buffer_float", &extensionNames) ) { _GLEE_NV_depth_buffer_float = GL_TRUE; __GLeeLink_GL_NV_depth_buffer_float(); } if (__GLeeCheckExtension("GL_NV_framebuffer_multisample_coverage", &extensionNames) ) { _GLEE_NV_framebuffer_multisample_coverage = GL_TRUE; __GLeeLink_GL_NV_framebuffer_multisample_coverage(); } if (__GLeeCheckExtension("GL_EXT_framebuffer_sRGB", &extensionNames) ) { _GLEE_EXT_framebuffer_sRGB = GL_TRUE; __GLeeLink_GL_EXT_framebuffer_sRGB(); } if (__GLeeCheckExtension("GL_NV_geometry_shader4", &extensionNames) ) { _GLEE_NV_geometry_shader4 = GL_TRUE; __GLeeLink_GL_NV_geometry_shader4(); } if (__GLeeCheckExtension("GL_NV_parameter_buffer_object", &extensionNames) ) { _GLEE_NV_parameter_buffer_object = GL_TRUE; __GLeeLink_GL_NV_parameter_buffer_object(); } if (__GLeeCheckExtension("GL_EXT_draw_buffers2", &extensionNames) ) { _GLEE_EXT_draw_buffers2 = GL_TRUE; __GLeeLink_GL_EXT_draw_buffers2(); } if (__GLeeCheckExtension("GL_NV_transform_feedback", &extensionNames) ) { _GLEE_NV_transform_feedback = GL_TRUE; __GLeeLink_GL_NV_transform_feedback(); } if (__GLeeCheckExtension("GL_EXT_bindable_uniform", &extensionNames) ) { _GLEE_EXT_bindable_uniform = GL_TRUE; __GLeeLink_GL_EXT_bindable_uniform(); } if (__GLeeCheckExtension("GL_EXT_texture_integer", &extensionNames) ) { _GLEE_EXT_texture_integer = GL_TRUE; __GLeeLink_GL_EXT_texture_integer(); } if (__GLeeCheckExtension("GL_GREMEDY_frame_terminator", &extensionNames) ) { _GLEE_GREMEDY_frame_terminator = GL_TRUE; __GLeeLink_GL_GREMEDY_frame_terminator(); } if (__GLeeCheckExtension("GL_NV_conditional_render", &extensionNames) ) { _GLEE_NV_conditional_render = GL_TRUE; __GLeeLink_GL_NV_conditional_render(); } if (__GLeeCheckExtension("GL_NV_present_video", &extensionNames) ) { _GLEE_NV_present_video = GL_TRUE; __GLeeLink_GL_NV_present_video(); } if (__GLeeCheckExtension("GL_EXT_transform_feedback", &extensionNames) ) { _GLEE_EXT_transform_feedback = GL_TRUE; __GLeeLink_GL_EXT_transform_feedback(); } if (__GLeeCheckExtension("GL_EXT_direct_state_access", &extensionNames) ) { _GLEE_EXT_direct_state_access = GL_TRUE; __GLeeLink_GL_EXT_direct_state_access(); } if (__GLeeCheckExtension("GL_EXT_vertex_array_bgra", &extensionNames) ) { _GLEE_EXT_vertex_array_bgra = GL_TRUE; __GLeeLink_GL_EXT_vertex_array_bgra(); } if (__GLeeCheckExtension("GL_EXT_texture_swizzle", &extensionNames) ) { _GLEE_EXT_texture_swizzle = GL_TRUE; __GLeeLink_GL_EXT_texture_swizzle(); } if (__GLeeCheckExtension("GL_NV_explicit_multisample", &extensionNames) ) { _GLEE_NV_explicit_multisample = GL_TRUE; __GLeeLink_GL_NV_explicit_multisample(); } if (__GLeeCheckExtension("GL_NV_transform_feedback2", &extensionNames) ) { _GLEE_NV_transform_feedback2 = GL_TRUE; __GLeeLink_GL_NV_transform_feedback2(); } if (__GLeeCheckExtension("GL_ATI_meminfo", &extensionNames) ) { _GLEE_ATI_meminfo = GL_TRUE; __GLeeLink_GL_ATI_meminfo(); } if (__GLeeCheckExtension("GL_AMD_performance_monitor", &extensionNames) ) { _GLEE_AMD_performance_monitor = GL_TRUE; __GLeeLink_GL_AMD_performance_monitor(); } if (__GLeeCheckExtension("GL_AMD_texture_texture4", &extensionNames) ) { _GLEE_AMD_texture_texture4 = GL_TRUE; __GLeeLink_GL_AMD_texture_texture4(); } if (__GLeeCheckExtension("GL_AMD_vertex_shader_tesselator", &extensionNames) ) { _GLEE_AMD_vertex_shader_tesselator = GL_TRUE; __GLeeLink_GL_AMD_vertex_shader_tesselator(); } if (__GLeeCheckExtension("GL_EXT_provoking_vertex", &extensionNames) ) { _GLEE_EXT_provoking_vertex = GL_TRUE; __GLeeLink_GL_EXT_provoking_vertex(); } if (__GLeeCheckExtension("GL_EXT_texture_snorm", &extensionNames) ) { _GLEE_EXT_texture_snorm = GL_TRUE; __GLeeLink_GL_EXT_texture_snorm(); } if (__GLeeCheckExtension("GL_AMD_draw_buffers_blend", &extensionNames) ) { _GLEE_AMD_draw_buffers_blend = GL_TRUE; __GLeeLink_GL_AMD_draw_buffers_blend(); } if (__GLeeCheckExtension("GL_APPLE_texture_range", &extensionNames) ) { _GLEE_APPLE_texture_range = GL_TRUE; __GLeeLink_GL_APPLE_texture_range(); } if (__GLeeCheckExtension("GL_APPLE_float_pixels", &extensionNames) ) { _GLEE_APPLE_float_pixels = GL_TRUE; __GLeeLink_GL_APPLE_float_pixels(); } if (__GLeeCheckExtension("GL_APPLE_vertex_program_evaluators", &extensionNames) ) { _GLEE_APPLE_vertex_program_evaluators = GL_TRUE; __GLeeLink_GL_APPLE_vertex_program_evaluators(); } if (__GLeeCheckExtension("GL_APPLE_aux_depth_stencil", &extensionNames) ) { _GLEE_APPLE_aux_depth_stencil = GL_TRUE; __GLeeLink_GL_APPLE_aux_depth_stencil(); } if (__GLeeCheckExtension("GL_APPLE_object_purgeable", &extensionNames) ) { _GLEE_APPLE_object_purgeable = GL_TRUE; __GLeeLink_GL_APPLE_object_purgeable(); } if (__GLeeCheckExtension("GL_APPLE_row_bytes", &extensionNames) ) { _GLEE_APPLE_row_bytes = GL_TRUE; __GLeeLink_GL_APPLE_row_bytes(); } if (__GLeeCheckExtension("GL_APPLE_rgb_422", &extensionNames) ) { _GLEE_APPLE_rgb_422 = GL_TRUE; __GLeeLink_GL_APPLE_rgb_422(); } if (__GLeeCheckExtension("GL_NV_video_capture", &extensionNames) ) { _GLEE_NV_video_capture = GL_TRUE; __GLeeLink_GL_NV_video_capture(); } if (__GLeeCheckExtension("GL_NV_copy_image", &extensionNames) ) { _GLEE_NV_copy_image = GL_TRUE; __GLeeLink_GL_NV_copy_image(); } if (__GLeeCheckExtension("GL_EXT_separate_shader_objects", &extensionNames) ) { _GLEE_EXT_separate_shader_objects = GL_TRUE; __GLeeLink_GL_EXT_separate_shader_objects(); } if (__GLeeCheckExtension("GL_NV_parameter_buffer_object2", &extensionNames) ) { _GLEE_NV_parameter_buffer_object2 = GL_TRUE; __GLeeLink_GL_NV_parameter_buffer_object2(); } if (__GLeeCheckExtension("GL_NV_shader_buffer_load", &extensionNames) ) { _GLEE_NV_shader_buffer_load = GL_TRUE; __GLeeLink_GL_NV_shader_buffer_load(); } if (__GLeeCheckExtension("GL_NV_vertex_buffer_unified_memory", &extensionNames) ) { _GLEE_NV_vertex_buffer_unified_memory = GL_TRUE; __GLeeLink_GL_NV_vertex_buffer_unified_memory(); } if (__GLeeCheckExtension("GL_NV_texture_barrier", &extensionNames) ) { _GLEE_NV_texture_barrier = GL_TRUE; __GLeeLink_GL_NV_texture_barrier(); } if (__GLeeCheckExtension("GL_AMD_shader_stencil_export", &extensionNames) ) { _GLEE_AMD_shader_stencil_export = GL_TRUE; __GLeeLink_GL_AMD_shader_stencil_export(); } if (__GLeeCheckExtension("GL_AMD_seamless_cubemap_per_texture", &extensionNames) ) { _GLEE_AMD_seamless_cubemap_per_texture = GL_TRUE; __GLeeLink_GL_AMD_seamless_cubemap_per_texture(); } if (__GLeeCheckExtension("GL_AMD_conservative_depth", &extensionNames) ) { _GLEE_AMD_conservative_depth = GL_TRUE; __GLeeLink_GL_AMD_conservative_depth(); } if (__GLeeCheckExtension("GL_EXT_shader_image_load_store", &extensionNames) ) { _GLEE_EXT_shader_image_load_store = GL_TRUE; __GLeeLink_GL_EXT_shader_image_load_store(); } if (__GLeeCheckExtension("GL_EXT_vertex_attrib_64bit", &extensionNames) ) { _GLEE_EXT_vertex_attrib_64bit = GL_TRUE; __GLeeLink_GL_EXT_vertex_attrib_64bit(); } if (__GLeeCheckExtension("GL_NV_gpu_program5", &extensionNames) ) { _GLEE_NV_gpu_program5 = GL_TRUE; __GLeeLink_GL_NV_gpu_program5(); } if (__GLeeCheckExtension("GL_NV_gpu_shader5", &extensionNames) ) { _GLEE_NV_gpu_shader5 = GL_TRUE; __GLeeLink_GL_NV_gpu_shader5(); } if (__GLeeCheckExtension("GL_NV_shader_buffer_store", &extensionNames) ) { _GLEE_NV_shader_buffer_store = GL_TRUE; __GLeeLink_GL_NV_shader_buffer_store(); } if (__GLeeCheckExtension("GL_NV_tessellation_program5", &extensionNames) ) { _GLEE_NV_tessellation_program5 = GL_TRUE; __GLeeLink_GL_NV_tessellation_program5(); } if (__GLeeCheckExtension("GL_NV_vertex_attrib_integer_64bit", &extensionNames) ) { _GLEE_NV_vertex_attrib_integer_64bit = GL_TRUE; __GLeeLink_GL_NV_vertex_attrib_integer_64bit(); } if (__GLeeCheckExtension("GL_NV_multisample_coverage", &extensionNames) ) { _GLEE_NV_multisample_coverage = GL_TRUE; __GLeeLink_GL_NV_multisample_coverage(); } if (__GLeeCheckExtension("GL_AMD_name_gen_delete", &extensionNames) ) { _GLEE_AMD_name_gen_delete = GL_TRUE; __GLeeLink_GL_AMD_name_gen_delete(); } if (__GLeeCheckExtension("GL_AMD_debug_output", &extensionNames) ) { _GLEE_AMD_debug_output = GL_TRUE; __GLeeLink_GL_AMD_debug_output(); } if (__GLeeCheckExtension("GL_AMD_transform_feedback3_lines_triangles", &extensionNames) ) { _GLEE_AMD_transform_feedback3_lines_triangles = GL_TRUE; __GLeeLink_GL_AMD_transform_feedback3_lines_triangles(); } if (__GLeeCheckExtension("GL_AMD_depth_clamp_separate", &extensionNames) ) { _GLEE_AMD_depth_clamp_separate = GL_TRUE; __GLeeLink_GL_AMD_depth_clamp_separate(); } if (__GLeeCheckExtension("GL_EXT_texture_sRGB_decode", &extensionNames) ) { _GLEE_EXT_texture_sRGB_decode = GL_TRUE; __GLeeLink_GL_EXT_texture_sRGB_decode(); } if (__GLeeCheckExtension("GL_NV_texture_multisample", &extensionNames) ) { _GLEE_NV_texture_multisample = GL_TRUE; __GLeeLink_GL_NV_texture_multisample(); } if (__GLeeCheckExtension("GL_AMD_blend_minmax_factor", &extensionNames) ) { _GLEE_AMD_blend_minmax_factor = GL_TRUE; __GLeeLink_GL_AMD_blend_minmax_factor(); } if (__GLeeCheckExtension("GL_AMD_sample_positions", &extensionNames) ) { _GLEE_AMD_sample_positions = GL_TRUE; __GLeeLink_GL_AMD_sample_positions(); } if (__GLeeCheckExtension("GL_EXT_x11_sync_object", &extensionNames) ) { _GLEE_EXT_x11_sync_object = GL_TRUE; __GLeeLink_GL_EXT_x11_sync_object(); } if (__GLeeCheckExtension("GL_AMD_multi_draw_indirect", &extensionNames) ) { _GLEE_AMD_multi_draw_indirect = GL_TRUE; __GLeeLink_GL_AMD_multi_draw_indirect(); } if (__GLeeCheckExtension("GL_EXT_framebuffer_multisample_blit_scaled", &extensionNames) ) { _GLEE_EXT_framebuffer_multisample_blit_scaled = GL_TRUE; __GLeeLink_GL_EXT_framebuffer_multisample_blit_scaled(); } if (__GLeeCheckExtension("GL_NV_path_rendering", &extensionNames) ) { _GLEE_NV_path_rendering = GL_TRUE; __GLeeLink_GL_NV_path_rendering(); } if (__GLeeCheckExtension("GL_AMD_pinned_memory", &extensionNames) ) { _GLEE_AMD_pinned_memory = GL_TRUE; __GLeeLink_GL_AMD_pinned_memory(); } if (__GLeeCheckExtension("GL_AMD_stencil_operation_extended", &extensionNames) ) { _GLEE_AMD_stencil_operation_extended = GL_TRUE; __GLeeLink_GL_AMD_stencil_operation_extended(); } if (__GLeeCheckExtension("GL_AMD_vertex_shader_viewport_index", &extensionNames) ) { _GLEE_AMD_vertex_shader_viewport_index = GL_TRUE; __GLeeLink_GL_AMD_vertex_shader_viewport_index(); } if (__GLeeCheckExtension("GL_AMD_vertex_shader_layer", &extensionNames) ) { _GLEE_AMD_vertex_shader_layer = GL_TRUE; __GLeeLink_GL_AMD_vertex_shader_layer(); } if (__GLeeCheckExtension("GL_NV_bindless_texture", &extensionNames) ) { _GLEE_NV_bindless_texture = GL_TRUE; __GLeeLink_GL_NV_bindless_texture(); } if (__GLeeCheckExtension("GL_NV_shader_atomic_float", &extensionNames) ) { _GLEE_NV_shader_atomic_float = GL_TRUE; __GLeeLink_GL_NV_shader_atomic_float(); } if (__GLeeCheckExtension("GL_AMD_query_buffer_object", &extensionNames) ) { _GLEE_AMD_query_buffer_object = GL_TRUE; __GLeeLink_GL_AMD_query_buffer_object(); } if (__GLeeCheckExtension("GL_NV_compute_program5", &extensionNames) ) { _GLEE_NV_compute_program5 = GL_TRUE; __GLeeLink_GL_NV_compute_program5(); } if (__GLeeCheckExtension("GL_NV_shader_storage_buffer_object", &extensionNames) ) { _GLEE_NV_shader_storage_buffer_object = GL_TRUE; __GLeeLink_GL_NV_shader_storage_buffer_object(); } if (__GLeeCheckExtension("GL_NV_shader_atomic_counters", &extensionNames) ) { _GLEE_NV_shader_atomic_counters = GL_TRUE; __GLeeLink_GL_NV_shader_atomic_counters(); } if (__GLeeCheckExtension("GL_NV_deep_texture3D", &extensionNames) ) { _GLEE_NV_deep_texture3D = GL_TRUE; __GLeeLink_GL_NV_deep_texture3D(); } if (__GLeeCheckExtension("GL_NVX_conditional_render", &extensionNames) ) { _GLEE_NVX_conditional_render = GL_TRUE; __GLeeLink_GL_NVX_conditional_render(); } if (__GLeeCheckExtension("GL_AMD_sparse_texture", &extensionNames) ) { _GLEE_AMD_sparse_texture = GL_TRUE; __GLeeLink_GL_AMD_sparse_texture(); } if (__GLeeCheckExtension("GL_AMD_shader_trinary_minmax", &extensionNames) ) { _GLEE_AMD_shader_trinary_minmax = GL_TRUE; __GLeeLink_GL_AMD_shader_trinary_minmax(); } if (__GLeeCheckExtension("GL_INTEL_map_texture", &extensionNames) ) { _GLEE_INTEL_map_texture = GL_TRUE; __GLeeLink_GL_INTEL_map_texture(); } if (__GLeeCheckExtension("GL_NV_draw_texture", &extensionNames) ) { _GLEE_NV_draw_texture = GL_TRUE; __GLeeLink_GL_NV_draw_texture(); } if (__GLeeCheckExtension("GL_SGIX_texture_select", &extensionNames) ) { _GLEE_SGIX_texture_select = GL_TRUE; __GLeeLink_GL_SGIX_texture_select(); } if (__GLeeCheckExtension("GL_INGR_blend_func_separate", &extensionNames) ) { _GLEE_INGR_blend_func_separate = GL_TRUE; __GLeeLink_GL_INGR_blend_func_separate(); } if (__GLeeCheckExtension("GL_SGIX_depth_pass_instrument", &extensionNames) ) { _GLEE_SGIX_depth_pass_instrument = GL_TRUE; __GLeeLink_GL_SGIX_depth_pass_instrument(); } if (__GLeeCheckExtension("GL_SGIX_igloo_interface", &extensionNames) ) { _GLEE_SGIX_igloo_interface = GL_TRUE; __GLeeLink_GL_SGIX_igloo_interface(); } #ifdef _WIN32 if (__GLeeCheckExtension("WGL_ARB_buffer_region", &extensionNames) ) { _GLEE_WGL_ARB_buffer_region = GL_TRUE; __GLeeLink_WGL_ARB_buffer_region(); } if (__GLeeCheckExtension("WGL_ARB_multisample", &extensionNames) ) { _GLEE_WGL_ARB_multisample = GL_TRUE; __GLeeLink_WGL_ARB_multisample(); } if (__GLeeCheckExtension("WGL_ARB_extensions_string", &extensionNames) ) { _GLEE_WGL_ARB_extensions_string = GL_TRUE; __GLeeLink_WGL_ARB_extensions_string(); } if (__GLeeCheckExtension("WGL_ARB_pixel_format", &extensionNames) ) { _GLEE_WGL_ARB_pixel_format = GL_TRUE; __GLeeLink_WGL_ARB_pixel_format(); } if (__GLeeCheckExtension("WGL_ARB_make_current_read", &extensionNames) ) { _GLEE_WGL_ARB_make_current_read = GL_TRUE; __GLeeLink_WGL_ARB_make_current_read(); } if (__GLeeCheckExtension("WGL_ARB_pbuffer", &extensionNames) ) { _GLEE_WGL_ARB_pbuffer = GL_TRUE; __GLeeLink_WGL_ARB_pbuffer(); } if (__GLeeCheckExtension("WGL_ARB_render_texture", &extensionNames) ) { _GLEE_WGL_ARB_render_texture = GL_TRUE; __GLeeLink_WGL_ARB_render_texture(); } if (__GLeeCheckExtension("WGL_ARB_pixel_format_float", &extensionNames) ) { _GLEE_WGL_ARB_pixel_format_float = GL_TRUE; __GLeeLink_WGL_ARB_pixel_format_float(); } if (__GLeeCheckExtension("WGL_ARB_framebuffer_sRGB", &extensionNames) ) { _GLEE_WGL_ARB_framebuffer_sRGB = GL_TRUE; __GLeeLink_WGL_ARB_framebuffer_sRGB(); } if (__GLeeCheckExtension("WGL_ARB_create_context", &extensionNames) ) { _GLEE_WGL_ARB_create_context = GL_TRUE; __GLeeLink_WGL_ARB_create_context(); } if (__GLeeCheckExtension("WGL_ARB_create_context_profile", &extensionNames) ) { _GLEE_WGL_ARB_create_context_profile = GL_TRUE; __GLeeLink_WGL_ARB_create_context_profile(); } if (__GLeeCheckExtension("WGL_ARB_create_context_robustness", &extensionNames) ) { _GLEE_WGL_ARB_create_context_robustness = GL_TRUE; __GLeeLink_WGL_ARB_create_context_robustness(); } if (__GLeeCheckExtension("WGL_EXT_make_current_read", &extensionNames) ) { _GLEE_WGL_EXT_make_current_read = GL_TRUE; __GLeeLink_WGL_EXT_make_current_read(); } if (__GLeeCheckExtension("WGL_EXT_pixel_format", &extensionNames) ) { _GLEE_WGL_EXT_pixel_format = GL_TRUE; __GLeeLink_WGL_EXT_pixel_format(); } if (__GLeeCheckExtension("WGL_EXT_pbuffer", &extensionNames) ) { _GLEE_WGL_EXT_pbuffer = GL_TRUE; __GLeeLink_WGL_EXT_pbuffer(); } if (__GLeeCheckExtension("WGL_EXT_depth_float", &extensionNames) ) { _GLEE_WGL_EXT_depth_float = GL_TRUE; __GLeeLink_WGL_EXT_depth_float(); } if (__GLeeCheckExtension("WGL_3DFX_multisample", &extensionNames) ) { _GLEE_WGL_3DFX_multisample = GL_TRUE; __GLeeLink_WGL_3DFX_multisample(); } if (__GLeeCheckExtension("WGL_EXT_multisample", &extensionNames) ) { _GLEE_WGL_EXT_multisample = GL_TRUE; __GLeeLink_WGL_EXT_multisample(); } if (__GLeeCheckExtension("WGL_I3D_digital_video_control", &extensionNames) ) { _GLEE_WGL_I3D_digital_video_control = GL_TRUE; __GLeeLink_WGL_I3D_digital_video_control(); } if (__GLeeCheckExtension("WGL_I3D_gamma", &extensionNames) ) { _GLEE_WGL_I3D_gamma = GL_TRUE; __GLeeLink_WGL_I3D_gamma(); } if (__GLeeCheckExtension("WGL_I3D_genlock", &extensionNames) ) { _GLEE_WGL_I3D_genlock = GL_TRUE; __GLeeLink_WGL_I3D_genlock(); } if (__GLeeCheckExtension("WGL_I3D_image_buffer", &extensionNames) ) { _GLEE_WGL_I3D_image_buffer = GL_TRUE; __GLeeLink_WGL_I3D_image_buffer(); } if (__GLeeCheckExtension("WGL_I3D_swap_frame_lock", &extensionNames) ) { _GLEE_WGL_I3D_swap_frame_lock = GL_TRUE; __GLeeLink_WGL_I3D_swap_frame_lock(); } if (__GLeeCheckExtension("WGL_NV_render_depth_texture", &extensionNames) ) { _GLEE_WGL_NV_render_depth_texture = GL_TRUE; __GLeeLink_WGL_NV_render_depth_texture(); } if (__GLeeCheckExtension("WGL_NV_render_texture_rectangle", &extensionNames) ) { _GLEE_WGL_NV_render_texture_rectangle = GL_TRUE; __GLeeLink_WGL_NV_render_texture_rectangle(); } if (__GLeeCheckExtension("WGL_ATI_pixel_format_float", &extensionNames) ) { _GLEE_WGL_ATI_pixel_format_float = GL_TRUE; __GLeeLink_WGL_ATI_pixel_format_float(); } if (__GLeeCheckExtension("WGL_NV_float_buffer", &extensionNames) ) { _GLEE_WGL_NV_float_buffer = GL_TRUE; __GLeeLink_WGL_NV_float_buffer(); } if (__GLeeCheckExtension("WGL_3DL_stereo_control", &extensionNames) ) { _GLEE_WGL_3DL_stereo_control = GL_TRUE; __GLeeLink_WGL_3DL_stereo_control(); } if (__GLeeCheckExtension("WGL_EXT_pixel_format_packed_float", &extensionNames) ) { _GLEE_WGL_EXT_pixel_format_packed_float = GL_TRUE; __GLeeLink_WGL_EXT_pixel_format_packed_float(); } if (__GLeeCheckExtension("WGL_EXT_framebuffer_sRGB", &extensionNames) ) { _GLEE_WGL_EXT_framebuffer_sRGB = GL_TRUE; __GLeeLink_WGL_EXT_framebuffer_sRGB(); } if (__GLeeCheckExtension("WGL_NV_present_video", &extensionNames) ) { _GLEE_WGL_NV_present_video = GL_TRUE; __GLeeLink_WGL_NV_present_video(); } if (__GLeeCheckExtension("WGL_NV_swap_group", &extensionNames) ) { _GLEE_WGL_NV_swap_group = GL_TRUE; __GLeeLink_WGL_NV_swap_group(); } if (__GLeeCheckExtension("WGL_NV_gpu_affinity", &extensionNames) ) { _GLEE_WGL_NV_gpu_affinity = GL_TRUE; __GLeeLink_WGL_NV_gpu_affinity(); } if (__GLeeCheckExtension("WGL_AMD_gpu_association", &extensionNames) ) { _GLEE_WGL_AMD_gpu_association = GL_TRUE; __GLeeLink_WGL_AMD_gpu_association(); } if (__GLeeCheckExtension("WGL_NV_copy_image", &extensionNames) ) { _GLEE_WGL_NV_copy_image = GL_TRUE; __GLeeLink_WGL_NV_copy_image(); } if (__GLeeCheckExtension("WGL_NV_multisample_coverage", &extensionNames) ) { _GLEE_WGL_NV_multisample_coverage = GL_TRUE; __GLeeLink_WGL_NV_multisample_coverage(); } if (__GLeeCheckExtension("WGL_EXT_create_context_es2_profile", &extensionNames) ) { _GLEE_WGL_EXT_create_context_es2_profile = GL_TRUE; __GLeeLink_WGL_EXT_create_context_es2_profile(); } if (__GLeeCheckExtension("WGL_NV_DX_interop", &extensionNames) ) { _GLEE_WGL_NV_DX_interop = GL_TRUE; __GLeeLink_WGL_NV_DX_interop(); } if (__GLeeCheckExtension("WGL_NV_DX_interop2", &extensionNames) ) { _GLEE_WGL_NV_DX_interop2 = GL_TRUE; __GLeeLink_WGL_NV_DX_interop2(); } if (__GLeeCheckExtension("WGL_EXT_swap_control_tear", &extensionNames) ) { _GLEE_WGL_EXT_swap_control_tear = GL_TRUE; __GLeeLink_WGL_EXT_swap_control_tear(); } if (__GLeeCheckExtension("WGL_EXT_display_color_table", &extensionNames) ) { _GLEE_WGL_EXT_display_color_table = GL_TRUE; __GLeeLink_WGL_EXT_display_color_table(); } if (__GLeeCheckExtension("WGL_EXT_extensions_string", &extensionNames) ) { _GLEE_WGL_EXT_extensions_string = GL_TRUE; __GLeeLink_WGL_EXT_extensions_string(); } if (__GLeeCheckExtension("WGL_EXT_swap_control", &extensionNames) ) { _GLEE_WGL_EXT_swap_control = GL_TRUE; __GLeeLink_WGL_EXT_swap_control(); } if (__GLeeCheckExtension("WGL_NV_vertex_array_range", &extensionNames) ) { _GLEE_WGL_NV_vertex_array_range = GL_TRUE; __GLeeLink_WGL_NV_vertex_array_range(); } if (__GLeeCheckExtension("WGL_OML_sync_control", &extensionNames) ) { _GLEE_WGL_OML_sync_control = GL_TRUE; __GLeeLink_WGL_OML_sync_control(); } if (__GLeeCheckExtension("WGL_I3D_swap_frame_usage", &extensionNames) ) { _GLEE_WGL_I3D_swap_frame_usage = GL_TRUE; __GLeeLink_WGL_I3D_swap_frame_usage(); } if (__GLeeCheckExtension("WGL_NV_video_output", &extensionNames) ) { _GLEE_WGL_NV_video_output = GL_TRUE; __GLeeLink_WGL_NV_video_output(); } #elif defined(__APPLE__) || defined(__APPLE_CC__) #else /* GLX */ if (__GLeeCheckExtension("GLX_VERSION_1_3", &extensionNames) ) { _GLEE_GLX_VERSION_1_3 = GL_TRUE; __GLeeLink_GLX_VERSION_1_3(); } if (__GLeeCheckExtension("GLX_VERSION_1_4", &extensionNames) ) { _GLEE_GLX_VERSION_1_4 = GL_TRUE; __GLeeLink_GLX_VERSION_1_4(); } if (__GLeeCheckExtension("GLX_ARB_multisample", &extensionNames) ) { _GLEE_GLX_ARB_multisample = GL_TRUE; __GLeeLink_GLX_ARB_multisample(); } if (__GLeeCheckExtension("GLX_ARB_vertex_buffer_object", &extensionNames) ) { _GLEE_GLX_ARB_vertex_buffer_object = GL_TRUE; __GLeeLink_GLX_ARB_vertex_buffer_object(); } if (__GLeeCheckExtension("GLX_ARB_fbconfig_float", &extensionNames) ) { _GLEE_GLX_ARB_fbconfig_float = GL_TRUE; __GLeeLink_GLX_ARB_fbconfig_float(); } if (__GLeeCheckExtension("GLX_ARB_framebuffer_sRGB", &extensionNames) ) { _GLEE_GLX_ARB_framebuffer_sRGB = GL_TRUE; __GLeeLink_GLX_ARB_framebuffer_sRGB(); } if (__GLeeCheckExtension("GLX_ARB_create_context", &extensionNames) ) { _GLEE_GLX_ARB_create_context = GL_TRUE; __GLeeLink_GLX_ARB_create_context(); } if (__GLeeCheckExtension("GLX_ARB_create_context_profile", &extensionNames) ) { _GLEE_GLX_ARB_create_context_profile = GL_TRUE; __GLeeLink_GLX_ARB_create_context_profile(); } if (__GLeeCheckExtension("GLX_ARB_create_context_robustness", &extensionNames) ) { _GLEE_GLX_ARB_create_context_robustness = GL_TRUE; __GLeeLink_GLX_ARB_create_context_robustness(); } if (__GLeeCheckExtension("GLX_SGIS_multisample", &extensionNames) ) { _GLEE_GLX_SGIS_multisample = GL_TRUE; __GLeeLink_GLX_SGIS_multisample(); } if (__GLeeCheckExtension("GLX_EXT_visual_info", &extensionNames) ) { _GLEE_GLX_EXT_visual_info = GL_TRUE; __GLeeLink_GLX_EXT_visual_info(); } if (__GLeeCheckExtension("GLX_SGI_swap_control", &extensionNames) ) { _GLEE_GLX_SGI_swap_control = GL_TRUE; __GLeeLink_GLX_SGI_swap_control(); } if (__GLeeCheckExtension("GLX_SGI_video_sync", &extensionNames) ) { _GLEE_GLX_SGI_video_sync = GL_TRUE; __GLeeLink_GLX_SGI_video_sync(); } if (__GLeeCheckExtension("GLX_SGI_make_current_read", &extensionNames) ) { _GLEE_GLX_SGI_make_current_read = GL_TRUE; __GLeeLink_GLX_SGI_make_current_read(); } if (__GLeeCheckExtension("GLX_EXT_visual_rating", &extensionNames) ) { _GLEE_GLX_EXT_visual_rating = GL_TRUE; __GLeeLink_GLX_EXT_visual_rating(); } if (__GLeeCheckExtension("GLX_EXT_import_context", &extensionNames) ) { _GLEE_GLX_EXT_import_context = GL_TRUE; __GLeeLink_GLX_EXT_import_context(); } if (__GLeeCheckExtension("GLX_SGIX_fbconfig", &extensionNames) ) { _GLEE_GLX_SGIX_fbconfig = GL_TRUE; __GLeeLink_GLX_SGIX_fbconfig(); } if (__GLeeCheckExtension("GLX_SGIX_pbuffer", &extensionNames) ) { _GLEE_GLX_SGIX_pbuffer = GL_TRUE; __GLeeLink_GLX_SGIX_pbuffer(); } if (__GLeeCheckExtension("GLX_SGI_cushion", &extensionNames) ) { _GLEE_GLX_SGI_cushion = GL_TRUE; __GLeeLink_GLX_SGI_cushion(); } if (__GLeeCheckExtension("GLX_SGIX_video_resize", &extensionNames) ) { _GLEE_GLX_SGIX_video_resize = GL_TRUE; __GLeeLink_GLX_SGIX_video_resize(); } if (__GLeeCheckExtension("GLX_SGIX_swap_group", &extensionNames) ) { _GLEE_GLX_SGIX_swap_group = GL_TRUE; __GLeeLink_GLX_SGIX_swap_group(); } if (__GLeeCheckExtension("GLX_SGIX_swap_barrier", &extensionNames) ) { _GLEE_GLX_SGIX_swap_barrier = GL_TRUE; __GLeeLink_GLX_SGIX_swap_barrier(); } if (__GLeeCheckExtension("GLX_SGIS_blended_overlay", &extensionNames) ) { _GLEE_GLX_SGIS_blended_overlay = GL_TRUE; __GLeeLink_GLX_SGIS_blended_overlay(); } if (__GLeeCheckExtension("GLX_SGIS_shared_multisample", &extensionNames) ) { _GLEE_GLX_SGIS_shared_multisample = GL_TRUE; __GLeeLink_GLX_SGIS_shared_multisample(); } if (__GLeeCheckExtension("GLX_SUN_get_transparent_index", &extensionNames) ) { _GLEE_GLX_SUN_get_transparent_index = GL_TRUE; __GLeeLink_GLX_SUN_get_transparent_index(); } if (__GLeeCheckExtension("GLX_3DFX_multisample", &extensionNames) ) { _GLEE_GLX_3DFX_multisample = GL_TRUE; __GLeeLink_GLX_3DFX_multisample(); } if (__GLeeCheckExtension("GLX_MESA_copy_sub_buffer", &extensionNames) ) { _GLEE_GLX_MESA_copy_sub_buffer = GL_TRUE; __GLeeLink_GLX_MESA_copy_sub_buffer(); } if (__GLeeCheckExtension("GLX_MESA_pixmap_colormap", &extensionNames) ) { _GLEE_GLX_MESA_pixmap_colormap = GL_TRUE; __GLeeLink_GLX_MESA_pixmap_colormap(); } if (__GLeeCheckExtension("GLX_MESA_release_buffers", &extensionNames) ) { _GLEE_GLX_MESA_release_buffers = GL_TRUE; __GLeeLink_GLX_MESA_release_buffers(); } if (__GLeeCheckExtension("GLX_MESA_set_3dfx_mode", &extensionNames) ) { _GLEE_GLX_MESA_set_3dfx_mode = GL_TRUE; __GLeeLink_GLX_MESA_set_3dfx_mode(); } if (__GLeeCheckExtension("GLX_SGIX_visual_select_group", &extensionNames) ) { _GLEE_GLX_SGIX_visual_select_group = GL_TRUE; __GLeeLink_GLX_SGIX_visual_select_group(); } if (__GLeeCheckExtension("GLX_OML_swap_method", &extensionNames) ) { _GLEE_GLX_OML_swap_method = GL_TRUE; __GLeeLink_GLX_OML_swap_method(); } if (__GLeeCheckExtension("GLX_OML_sync_control", &extensionNames) ) { _GLEE_GLX_OML_sync_control = GL_TRUE; __GLeeLink_GLX_OML_sync_control(); } if (__GLeeCheckExtension("GLX_NV_float_buffer", &extensionNames) ) { _GLEE_GLX_NV_float_buffer = GL_TRUE; __GLeeLink_GLX_NV_float_buffer(); } if (__GLeeCheckExtension("GLX_SGIX_hyperpipe", &extensionNames) ) { _GLEE_GLX_SGIX_hyperpipe = GL_TRUE; __GLeeLink_GLX_SGIX_hyperpipe(); } if (__GLeeCheckExtension("GLX_MESA_agp_offset", &extensionNames) ) { _GLEE_GLX_MESA_agp_offset = GL_TRUE; __GLeeLink_GLX_MESA_agp_offset(); } if (__GLeeCheckExtension("GLX_EXT_fbconfig_packed_float", &extensionNames) ) { _GLEE_GLX_EXT_fbconfig_packed_float = GL_TRUE; __GLeeLink_GLX_EXT_fbconfig_packed_float(); } if (__GLeeCheckExtension("GLX_EXT_framebuffer_sRGB", &extensionNames) ) { _GLEE_GLX_EXT_framebuffer_sRGB = GL_TRUE; __GLeeLink_GLX_EXT_framebuffer_sRGB(); } if (__GLeeCheckExtension("GLX_EXT_texture_from_pixmap", &extensionNames) ) { _GLEE_GLX_EXT_texture_from_pixmap = GL_TRUE; __GLeeLink_GLX_EXT_texture_from_pixmap(); } if (__GLeeCheckExtension("GLX_NV_present_video", &extensionNames) ) { _GLEE_GLX_NV_present_video = GL_TRUE; __GLeeLink_GLX_NV_present_video(); } if (__GLeeCheckExtension("GLX_NV_video_out", &extensionNames) ) { _GLEE_GLX_NV_video_out = GL_TRUE; __GLeeLink_GLX_NV_video_out(); } if (__GLeeCheckExtension("GLX_NV_swap_group", &extensionNames) ) { _GLEE_GLX_NV_swap_group = GL_TRUE; __GLeeLink_GLX_NV_swap_group(); } if (__GLeeCheckExtension("GLX_NV_video_capture", &extensionNames) ) { _GLEE_GLX_NV_video_capture = GL_TRUE; __GLeeLink_GLX_NV_video_capture(); } if (__GLeeCheckExtension("GLX_EXT_swap_control", &extensionNames) ) { _GLEE_GLX_EXT_swap_control = GL_TRUE; __GLeeLink_GLX_EXT_swap_control(); } if (__GLeeCheckExtension("GLX_NV_copy_image", &extensionNames) ) { _GLEE_GLX_NV_copy_image = GL_TRUE; __GLeeLink_GLX_NV_copy_image(); } if (__GLeeCheckExtension("GLX_INTEL_swap_event", &extensionNames) ) { _GLEE_GLX_INTEL_swap_event = GL_TRUE; __GLeeLink_GLX_INTEL_swap_event(); } if (__GLeeCheckExtension("GLX_NV_multisample_coverage", &extensionNames) ) { _GLEE_GLX_NV_multisample_coverage = GL_TRUE; __GLeeLink_GLX_NV_multisample_coverage(); } if (__GLeeCheckExtension("GLX_AMD_gpu_association", &extensionNames) ) { _GLEE_GLX_AMD_gpu_association = GL_TRUE; __GLeeLink_GLX_AMD_gpu_association(); } if (__GLeeCheckExtension("GLX_EXT_create_context_es2_profile", &extensionNames) ) { _GLEE_GLX_EXT_create_context_es2_profile = GL_TRUE; __GLeeLink_GLX_EXT_create_context_es2_profile(); } if (__GLeeCheckExtension("GLX_EXT_create_context_es_profile", &extensionNames) ) { _GLEE_GLX_EXT_create_context_es_profile = GL_TRUE; __GLeeLink_GLX_EXT_create_context_es_profile(); } if (__GLeeCheckExtension("GLX_EXT_swap_control_tear", &extensionNames) ) { _GLEE_GLX_EXT_swap_control_tear = GL_TRUE; __GLeeLink_GLX_EXT_swap_control_tear(); } if (__GLeeCheckExtension("GLX_EXT_buffer_age", &extensionNames) ) { _GLEE_GLX_EXT_buffer_age = GL_TRUE; __GLeeLink_GLX_EXT_buffer_age(); } if (__GLeeCheckExtension("GLX_NV_video_output", &extensionNames) ) { _GLEE_GLX_NV_video_output = GL_TRUE; __GLeeLink_GLX_NV_video_output(); } #endif /* end GLX */ __GLeeExtList_clean(&extensionNames); return GL_TRUE; } fifengine-0.4.1/engine/core/ext/glee/GLee.h000066400000000000000000050053031304641216200203510ustar00rootroot00000000000000/*************************************************************************** * * GLee.h * GLee (OpenGL Easy Extension library) * Version : 5.5 * * Copyright (c)2011 Ben Woodhouse All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer as * the first lines of this file unmodified. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY BEN WOODHOUSE ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL BEN WOODHOUSE BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * Web: http://elf-stone.com/glee.php * * [This file was automatically generated by GLeeGen 7.0 * ***************************************************************************/ #ifndef __glee_h_ #define __glee_h_ #ifdef __gl_h_ #error gl.h included before GLee.h #endif #ifdef __glext_h_ #error glext.h included before GLee.h #endif #ifdef __wglext_h_ #error wglext.h included before GLee.h #endif #ifdef __glxext_h_ #error glxext.h included before GLee.h #endif #ifdef _WIN32 #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif #include #include #elif defined(__APPLE__) || defined(__APPLE_CC__) #define GL_GLEXT_LEGACY #include #else // GLX #define __glext_h_ /* prevent glext.h from being included */ #define __glxext_h_ /* prevent glxext.h from being included */ #define GLX_GLXEXT_PROTOTYPES #include #include typedef XID GLEE_GLXContextID; #endif #ifndef APIENTRY #define APIENTRY #endif #ifndef APIENTRYP #define APIENTRYP APIENTRY * #endif #define GLEE_EXTERN extern #ifdef __cplusplus extern "C" { /* begin C linkage */ #endif #define GLEE_LINK_FAIL 0 #define GLEE_LINK_PARTIAL 1 #define GLEE_LINK_COMPLETE 2 typedef void (*GLEE_FUNC)(void); struct _cl_context; struct _cl_event; /* Extension querying variables */ GLEE_EXTERN GLboolean _GLEE_VERSION_1_2; GLEE_EXTERN GLboolean _GLEE_ARB_imaging; GLEE_EXTERN GLboolean _GLEE_VERSION_1_3; GLEE_EXTERN GLboolean _GLEE_VERSION_1_4; GLEE_EXTERN GLboolean _GLEE_VERSION_1_5; GLEE_EXTERN GLboolean _GLEE_VERSION_2_0; GLEE_EXTERN GLboolean _GLEE_VERSION_2_1; GLEE_EXTERN GLboolean _GLEE_VERSION_3_0; GLEE_EXTERN GLboolean _GLEE_VERSION_3_1; GLEE_EXTERN GLboolean _GLEE_VERSION_3_2; GLEE_EXTERN GLboolean _GLEE_VERSION_3_3; GLEE_EXTERN GLboolean _GLEE_VERSION_4_0; GLEE_EXTERN GLboolean _GLEE_VERSION_4_1; GLEE_EXTERN GLboolean _GLEE_VERSION_4_2; GLEE_EXTERN GLboolean _GLEE_VERSION_4_3; GLEE_EXTERN GLboolean _GLEE_ARB_multitexture; GLEE_EXTERN GLboolean _GLEE_ARB_transpose_matrix; GLEE_EXTERN GLboolean _GLEE_ARB_multisample; GLEE_EXTERN GLboolean _GLEE_ARB_texture_env_add; GLEE_EXTERN GLboolean _GLEE_ARB_texture_cube_map; GLEE_EXTERN GLboolean _GLEE_ARB_texture_compression; GLEE_EXTERN GLboolean _GLEE_ARB_texture_border_clamp; GLEE_EXTERN GLboolean _GLEE_ARB_point_parameters; GLEE_EXTERN GLboolean _GLEE_ARB_vertex_blend; GLEE_EXTERN GLboolean _GLEE_ARB_matrix_palette; GLEE_EXTERN GLboolean _GLEE_ARB_texture_env_combine; GLEE_EXTERN GLboolean _GLEE_ARB_texture_env_crossbar; GLEE_EXTERN GLboolean _GLEE_ARB_texture_env_dot3; GLEE_EXTERN GLboolean _GLEE_ARB_texture_mirrored_repeat; GLEE_EXTERN GLboolean _GLEE_ARB_depth_texture; GLEE_EXTERN GLboolean _GLEE_ARB_shadow; GLEE_EXTERN GLboolean _GLEE_ARB_shadow_ambient; GLEE_EXTERN GLboolean _GLEE_ARB_window_pos; GLEE_EXTERN GLboolean _GLEE_ARB_vertex_program; GLEE_EXTERN GLboolean _GLEE_ARB_fragment_program; GLEE_EXTERN GLboolean _GLEE_ARB_vertex_buffer_object; GLEE_EXTERN GLboolean _GLEE_ARB_occlusion_query; GLEE_EXTERN GLboolean _GLEE_ARB_shader_objects; GLEE_EXTERN GLboolean _GLEE_ARB_vertex_shader; GLEE_EXTERN GLboolean _GLEE_ARB_fragment_shader; GLEE_EXTERN GLboolean _GLEE_ARB_shading_language_100; GLEE_EXTERN GLboolean _GLEE_ARB_texture_non_power_of_two; GLEE_EXTERN GLboolean _GLEE_ARB_point_sprite; GLEE_EXTERN GLboolean _GLEE_ARB_fragment_program_shadow; GLEE_EXTERN GLboolean _GLEE_ARB_draw_buffers; GLEE_EXTERN GLboolean _GLEE_ARB_texture_rectangle; GLEE_EXTERN GLboolean _GLEE_ARB_color_buffer_float; GLEE_EXTERN GLboolean _GLEE_ARB_half_float_pixel; GLEE_EXTERN GLboolean _GLEE_ARB_texture_float; GLEE_EXTERN GLboolean _GLEE_ARB_pixel_buffer_object; GLEE_EXTERN GLboolean _GLEE_ARB_depth_buffer_float; GLEE_EXTERN GLboolean _GLEE_ARB_draw_instanced; GLEE_EXTERN GLboolean _GLEE_ARB_framebuffer_object; GLEE_EXTERN GLboolean _GLEE_ARB_framebuffer_sRGB; GLEE_EXTERN GLboolean _GLEE_ARB_geometry_shader4; GLEE_EXTERN GLboolean _GLEE_ARB_half_float_vertex; GLEE_EXTERN GLboolean _GLEE_ARB_instanced_arrays; GLEE_EXTERN GLboolean _GLEE_ARB_map_buffer_range; GLEE_EXTERN GLboolean _GLEE_ARB_texture_buffer_object; GLEE_EXTERN GLboolean _GLEE_ARB_texture_compression_rgtc; GLEE_EXTERN GLboolean _GLEE_ARB_texture_rg; GLEE_EXTERN GLboolean _GLEE_ARB_vertex_array_object; GLEE_EXTERN GLboolean _GLEE_ARB_uniform_buffer_object; GLEE_EXTERN GLboolean _GLEE_ARB_compatibility; GLEE_EXTERN GLboolean _GLEE_ARB_copy_buffer; GLEE_EXTERN GLboolean _GLEE_ARB_shader_texture_lod; GLEE_EXTERN GLboolean _GLEE_ARB_depth_clamp; GLEE_EXTERN GLboolean _GLEE_ARB_draw_elements_base_vertex; GLEE_EXTERN GLboolean _GLEE_ARB_fragment_coord_conventions; GLEE_EXTERN GLboolean _GLEE_ARB_provoking_vertex; GLEE_EXTERN GLboolean _GLEE_ARB_seamless_cube_map; GLEE_EXTERN GLboolean _GLEE_ARB_sync; GLEE_EXTERN GLboolean _GLEE_ARB_texture_multisample; GLEE_EXTERN GLboolean _GLEE_ARB_vertex_array_bgra; GLEE_EXTERN GLboolean _GLEE_ARB_draw_buffers_blend; GLEE_EXTERN GLboolean _GLEE_ARB_sample_shading; GLEE_EXTERN GLboolean _GLEE_ARB_texture_cube_map_array; GLEE_EXTERN GLboolean _GLEE_ARB_texture_gather; GLEE_EXTERN GLboolean _GLEE_ARB_texture_query_lod; GLEE_EXTERN GLboolean _GLEE_ARB_shading_language_include; GLEE_EXTERN GLboolean _GLEE_ARB_texture_compression_bptc; GLEE_EXTERN GLboolean _GLEE_ARB_blend_func_extended; GLEE_EXTERN GLboolean _GLEE_ARB_explicit_attrib_location; GLEE_EXTERN GLboolean _GLEE_ARB_occlusion_query2; GLEE_EXTERN GLboolean _GLEE_ARB_sampler_objects; GLEE_EXTERN GLboolean _GLEE_ARB_shader_bit_encoding; GLEE_EXTERN GLboolean _GLEE_ARB_texture_rgb10_a2ui; GLEE_EXTERN GLboolean _GLEE_ARB_texture_swizzle; GLEE_EXTERN GLboolean _GLEE_ARB_timer_query; GLEE_EXTERN GLboolean _GLEE_ARB_vertex_type_2_10_10_10_rev; GLEE_EXTERN GLboolean _GLEE_ARB_draw_indirect; GLEE_EXTERN GLboolean _GLEE_ARB_gpu_shader5; GLEE_EXTERN GLboolean _GLEE_ARB_gpu_shader_fp64; GLEE_EXTERN GLboolean _GLEE_ARB_shader_subroutine; GLEE_EXTERN GLboolean _GLEE_ARB_tessellation_shader; GLEE_EXTERN GLboolean _GLEE_ARB_texture_buffer_object_rgb32; GLEE_EXTERN GLboolean _GLEE_ARB_transform_feedback2; GLEE_EXTERN GLboolean _GLEE_ARB_transform_feedback3; GLEE_EXTERN GLboolean _GLEE_ARB_ES2_compatibility; GLEE_EXTERN GLboolean _GLEE_ARB_get_program_binary; GLEE_EXTERN GLboolean _GLEE_ARB_separate_shader_objects; GLEE_EXTERN GLboolean _GLEE_ARB_shader_precision; GLEE_EXTERN GLboolean _GLEE_ARB_vertex_attrib_64bit; GLEE_EXTERN GLboolean _GLEE_ARB_viewport_array; GLEE_EXTERN GLboolean _GLEE_ARB_cl_event; GLEE_EXTERN GLboolean _GLEE_ARB_debug_output; GLEE_EXTERN GLboolean _GLEE_ARB_robustness; GLEE_EXTERN GLboolean _GLEE_ARB_shader_stencil_export; GLEE_EXTERN GLboolean _GLEE_ARB_base_instance; GLEE_EXTERN GLboolean _GLEE_ARB_shading_language_420pack; GLEE_EXTERN GLboolean _GLEE_ARB_transform_feedback_instanced; GLEE_EXTERN GLboolean _GLEE_ARB_compressed_texture_pixel_storage; GLEE_EXTERN GLboolean _GLEE_ARB_conservative_depth; GLEE_EXTERN GLboolean _GLEE_ARB_internalformat_query; GLEE_EXTERN GLboolean _GLEE_ARB_map_buffer_alignment; GLEE_EXTERN GLboolean _GLEE_ARB_shader_atomic_counters; GLEE_EXTERN GLboolean _GLEE_ARB_shader_image_load_store; GLEE_EXTERN GLboolean _GLEE_ARB_shading_language_packing; GLEE_EXTERN GLboolean _GLEE_ARB_texture_storage; GLEE_EXTERN GLboolean _GLEE_KHR_texture_compression_astc_ldr; GLEE_EXTERN GLboolean _GLEE_KHR_debug; GLEE_EXTERN GLboolean _GLEE_ARB_arrays_of_arrays; GLEE_EXTERN GLboolean _GLEE_ARB_clear_buffer_object; GLEE_EXTERN GLboolean _GLEE_ARB_compute_shader; GLEE_EXTERN GLboolean _GLEE_ARB_copy_image; GLEE_EXTERN GLboolean _GLEE_ARB_texture_view; GLEE_EXTERN GLboolean _GLEE_ARB_vertex_attrib_binding; GLEE_EXTERN GLboolean _GLEE_ARB_robustness_isolation; GLEE_EXTERN GLboolean _GLEE_ARB_ES3_compatibility; GLEE_EXTERN GLboolean _GLEE_ARB_explicit_uniform_location; GLEE_EXTERN GLboolean _GLEE_ARB_fragment_layer_viewport; GLEE_EXTERN GLboolean _GLEE_ARB_framebuffer_no_attachments; GLEE_EXTERN GLboolean _GLEE_ARB_internalformat_query2; GLEE_EXTERN GLboolean _GLEE_ARB_invalidate_subdata; GLEE_EXTERN GLboolean _GLEE_ARB_multi_draw_indirect; GLEE_EXTERN GLboolean _GLEE_ARB_program_interface_query; GLEE_EXTERN GLboolean _GLEE_ARB_robust_buffer_access_behavior; GLEE_EXTERN GLboolean _GLEE_ARB_shader_image_size; GLEE_EXTERN GLboolean _GLEE_ARB_shader_storage_buffer_object; GLEE_EXTERN GLboolean _GLEE_ARB_stencil_texturing; GLEE_EXTERN GLboolean _GLEE_ARB_texture_buffer_range; GLEE_EXTERN GLboolean _GLEE_ARB_texture_query_levels; GLEE_EXTERN GLboolean _GLEE_ARB_texture_storage_multisample; GLEE_EXTERN GLboolean _GLEE_EXT_abgr; GLEE_EXTERN GLboolean _GLEE_EXT_blend_color; GLEE_EXTERN GLboolean _GLEE_EXT_polygon_offset; GLEE_EXTERN GLboolean _GLEE_EXT_texture; GLEE_EXTERN GLboolean _GLEE_EXT_texture3D; GLEE_EXTERN GLboolean _GLEE_SGIS_texture_filter4; GLEE_EXTERN GLboolean _GLEE_EXT_subtexture; GLEE_EXTERN GLboolean _GLEE_EXT_copy_texture; GLEE_EXTERN GLboolean _GLEE_EXT_histogram; GLEE_EXTERN GLboolean _GLEE_EXT_convolution; GLEE_EXTERN GLboolean _GLEE_SGI_color_matrix; GLEE_EXTERN GLboolean _GLEE_SGI_color_table; GLEE_EXTERN GLboolean _GLEE_SGIS_pixel_texture; GLEE_EXTERN GLboolean _GLEE_SGIX_pixel_texture; GLEE_EXTERN GLboolean _GLEE_SGIS_texture4D; GLEE_EXTERN GLboolean _GLEE_SGI_texture_color_table; GLEE_EXTERN GLboolean _GLEE_EXT_cmyka; GLEE_EXTERN GLboolean _GLEE_EXT_texture_object; GLEE_EXTERN GLboolean _GLEE_SGIS_detail_texture; GLEE_EXTERN GLboolean _GLEE_SGIS_sharpen_texture; GLEE_EXTERN GLboolean _GLEE_EXT_packed_pixels; GLEE_EXTERN GLboolean _GLEE_SGIS_texture_lod; GLEE_EXTERN GLboolean _GLEE_SGIS_multisample; GLEE_EXTERN GLboolean _GLEE_EXT_rescale_normal; GLEE_EXTERN GLboolean _GLEE_EXT_vertex_array; GLEE_EXTERN GLboolean _GLEE_EXT_misc_attribute; GLEE_EXTERN GLboolean _GLEE_SGIS_generate_mipmap; GLEE_EXTERN GLboolean _GLEE_SGIX_clipmap; GLEE_EXTERN GLboolean _GLEE_SGIX_shadow; GLEE_EXTERN GLboolean _GLEE_SGIS_texture_edge_clamp; GLEE_EXTERN GLboolean _GLEE_SGIS_texture_border_clamp; GLEE_EXTERN GLboolean _GLEE_EXT_blend_minmax; GLEE_EXTERN GLboolean _GLEE_EXT_blend_subtract; GLEE_EXTERN GLboolean _GLEE_EXT_blend_logic_op; GLEE_EXTERN GLboolean _GLEE_SGIX_interlace; GLEE_EXTERN GLboolean _GLEE_SGIX_pixel_tiles; GLEE_EXTERN GLboolean _GLEE_SGIS_texture_select; GLEE_EXTERN GLboolean _GLEE_SGIX_sprite; GLEE_EXTERN GLboolean _GLEE_SGIX_texture_multi_buffer; GLEE_EXTERN GLboolean _GLEE_EXT_point_parameters; GLEE_EXTERN GLboolean _GLEE_SGIS_point_parameters; GLEE_EXTERN GLboolean _GLEE_SGIX_instruments; GLEE_EXTERN GLboolean _GLEE_SGIX_texture_scale_bias; GLEE_EXTERN GLboolean _GLEE_SGIX_framezoom; GLEE_EXTERN GLboolean _GLEE_SGIX_tag_sample_buffer; GLEE_EXTERN GLboolean _GLEE_FfdMaskSGIX; GLEE_EXTERN GLboolean _GLEE_SGIX_polynomial_ffd; GLEE_EXTERN GLboolean _GLEE_SGIX_reference_plane; GLEE_EXTERN GLboolean _GLEE_SGIX_flush_raster; GLEE_EXTERN GLboolean _GLEE_SGIX_depth_texture; GLEE_EXTERN GLboolean _GLEE_SGIS_fog_function; GLEE_EXTERN GLboolean _GLEE_SGIX_fog_offset; GLEE_EXTERN GLboolean _GLEE_HP_image_transform; GLEE_EXTERN GLboolean _GLEE_HP_convolution_border_modes; GLEE_EXTERN GLboolean _GLEE_INGR_palette_buffer; GLEE_EXTERN GLboolean _GLEE_SGIX_texture_add_env; GLEE_EXTERN GLboolean _GLEE_EXT_color_subtable; GLEE_EXTERN GLboolean _GLEE_PGI_vertex_hints; GLEE_EXTERN GLboolean _GLEE_PGI_misc_hints; GLEE_EXTERN GLboolean _GLEE_EXT_paletted_texture; GLEE_EXTERN GLboolean _GLEE_EXT_clip_volume_hint; GLEE_EXTERN GLboolean _GLEE_SGIX_list_priority; GLEE_EXTERN GLboolean _GLEE_SGIX_ir_instrument1; GLEE_EXTERN GLboolean _GLEE_SGIX_calligraphic_fragment; GLEE_EXTERN GLboolean _GLEE_SGIX_texture_lod_bias; GLEE_EXTERN GLboolean _GLEE_SGIX_shadow_ambient; GLEE_EXTERN GLboolean _GLEE_EXT_index_texture; GLEE_EXTERN GLboolean _GLEE_EXT_index_material; GLEE_EXTERN GLboolean _GLEE_EXT_index_func; GLEE_EXTERN GLboolean _GLEE_EXT_index_array_formats; GLEE_EXTERN GLboolean _GLEE_EXT_compiled_vertex_array; GLEE_EXTERN GLboolean _GLEE_EXT_cull_vertex; GLEE_EXTERN GLboolean _GLEE_SGIX_ycrcb; GLEE_EXTERN GLboolean _GLEE_SGIX_fragment_lighting; GLEE_EXTERN GLboolean _GLEE_IBM_rasterpos_clip; GLEE_EXTERN GLboolean _GLEE_HP_texture_lighting; GLEE_EXTERN GLboolean _GLEE_EXT_draw_range_elements; GLEE_EXTERN GLboolean _GLEE_WIN_phong_shading; GLEE_EXTERN GLboolean _GLEE_WIN_specular_fog; GLEE_EXTERN GLboolean _GLEE_EXT_light_texture; GLEE_EXTERN GLboolean _GLEE_SGIX_blend_alpha_minmax; GLEE_EXTERN GLboolean _GLEE_SGIX_impact_pixel_texture; GLEE_EXTERN GLboolean _GLEE_EXT_bgra; GLEE_EXTERN GLboolean _GLEE_SGIX_async; GLEE_EXTERN GLboolean _GLEE_SGIX_async_pixel; GLEE_EXTERN GLboolean _GLEE_SGIX_async_histogram; GLEE_EXTERN GLboolean _GLEE_INTEL_texture_scissor; GLEE_EXTERN GLboolean _GLEE_INTEL_parallel_arrays; GLEE_EXTERN GLboolean _GLEE_HP_occlusion_test; GLEE_EXTERN GLboolean _GLEE_EXT_pixel_transform; GLEE_EXTERN GLboolean _GLEE_EXT_pixel_transform_color_table; GLEE_EXTERN GLboolean _GLEE_EXT_shared_texture_palette; GLEE_EXTERN GLboolean _GLEE_EXT_separate_specular_color; GLEE_EXTERN GLboolean _GLEE_EXT_secondary_color; GLEE_EXTERN GLboolean _GLEE_EXT_texture_perturb_normal; GLEE_EXTERN GLboolean _GLEE_EXT_multi_draw_arrays; GLEE_EXTERN GLboolean _GLEE_EXT_fog_coord; GLEE_EXTERN GLboolean _GLEE_REND_screen_coordinates; GLEE_EXTERN GLboolean _GLEE_EXT_coordinate_frame; GLEE_EXTERN GLboolean _GLEE_EXT_texture_env_combine; GLEE_EXTERN GLboolean _GLEE_APPLE_specular_vector; GLEE_EXTERN GLboolean _GLEE_APPLE_transform_hint; GLEE_EXTERN GLboolean _GLEE_SGIX_fog_scale; GLEE_EXTERN GLboolean _GLEE_SUNX_constant_data; GLEE_EXTERN GLboolean _GLEE_SUN_global_alpha; GLEE_EXTERN GLboolean _GLEE_SUN_triangle_list; GLEE_EXTERN GLboolean _GLEE_SUN_vertex; GLEE_EXTERN GLboolean _GLEE_EXT_blend_func_separate; GLEE_EXTERN GLboolean _GLEE_INGR_color_clamp; GLEE_EXTERN GLboolean _GLEE_INGR_interlace_read; GLEE_EXTERN GLboolean _GLEE_EXT_stencil_wrap; GLEE_EXTERN GLboolean _GLEE_EXT_422_pixels; GLEE_EXTERN GLboolean _GLEE_NV_texgen_reflection; GLEE_EXTERN GLboolean _GLEE_EXT_texture_cube_map; GLEE_EXTERN GLboolean _GLEE_SUN_convolution_border_modes; GLEE_EXTERN GLboolean _GLEE_EXT_texture_env_add; GLEE_EXTERN GLboolean _GLEE_EXT_texture_lod_bias; GLEE_EXTERN GLboolean _GLEE_EXT_texture_filter_anisotropic; GLEE_EXTERN GLboolean _GLEE_EXT_vertex_weighting; GLEE_EXTERN GLboolean _GLEE_NV_light_max_exponent; GLEE_EXTERN GLboolean _GLEE_NV_vertex_array_range; GLEE_EXTERN GLboolean _GLEE_NV_register_combiners; GLEE_EXTERN GLboolean _GLEE_NV_fog_distance; GLEE_EXTERN GLboolean _GLEE_NV_texgen_emboss; GLEE_EXTERN GLboolean _GLEE_NV_blend_square; GLEE_EXTERN GLboolean _GLEE_NV_texture_env_combine4; GLEE_EXTERN GLboolean _GLEE_MESA_resize_buffers; GLEE_EXTERN GLboolean _GLEE_MESA_window_pos; GLEE_EXTERN GLboolean _GLEE_EXT_texture_compression_s3tc; GLEE_EXTERN GLboolean _GLEE_IBM_cull_vertex; GLEE_EXTERN GLboolean _GLEE_IBM_multimode_draw_arrays; GLEE_EXTERN GLboolean _GLEE_IBM_vertex_array_lists; GLEE_EXTERN GLboolean _GLEE_SGIX_subsample; GLEE_EXTERN GLboolean _GLEE_SGIX_ycrcb_subsample; GLEE_EXTERN GLboolean _GLEE_SGIX_ycrcba; GLEE_EXTERN GLboolean _GLEE_SGI_depth_pass_instrument; GLEE_EXTERN GLboolean _GLEE_3DFX_texture_compression_FXT1; GLEE_EXTERN GLboolean _GLEE_3DFX_multisample; GLEE_EXTERN GLboolean _GLEE_3DFX_tbuffer; GLEE_EXTERN GLboolean _GLEE_EXT_multisample; GLEE_EXTERN GLboolean _GLEE_SGIX_vertex_preclip; GLEE_EXTERN GLboolean _GLEE_SGIX_convolution_accuracy; GLEE_EXTERN GLboolean _GLEE_SGIX_resample; GLEE_EXTERN GLboolean _GLEE_SGIS_point_line_texgen; GLEE_EXTERN GLboolean _GLEE_SGIS_texture_color_mask; GLEE_EXTERN GLboolean _GLEE_EXT_texture_env_dot3; GLEE_EXTERN GLboolean _GLEE_ATI_texture_mirror_once; GLEE_EXTERN GLboolean _GLEE_NV_fence; GLEE_EXTERN GLboolean _GLEE_IBM_texture_mirrored_repeat; GLEE_EXTERN GLboolean _GLEE_NV_evaluators; GLEE_EXTERN GLboolean _GLEE_NV_packed_depth_stencil; GLEE_EXTERN GLboolean _GLEE_NV_register_combiners2; GLEE_EXTERN GLboolean _GLEE_NV_texture_compression_vtc; GLEE_EXTERN GLboolean _GLEE_NV_texture_rectangle; GLEE_EXTERN GLboolean _GLEE_NV_texture_shader; GLEE_EXTERN GLboolean _GLEE_NV_texture_shader2; GLEE_EXTERN GLboolean _GLEE_NV_vertex_array_range2; GLEE_EXTERN GLboolean _GLEE_NV_vertex_program; GLEE_EXTERN GLboolean _GLEE_SGIX_texture_coordinate_clamp; GLEE_EXTERN GLboolean _GLEE_SGIX_scalebias_hint; GLEE_EXTERN GLboolean _GLEE_OML_interlace; GLEE_EXTERN GLboolean _GLEE_OML_subsample; GLEE_EXTERN GLboolean _GLEE_OML_resample; GLEE_EXTERN GLboolean _GLEE_NV_copy_depth_to_color; GLEE_EXTERN GLboolean _GLEE_ATI_envmap_bumpmap; GLEE_EXTERN GLboolean _GLEE_ATI_fragment_shader; GLEE_EXTERN GLboolean _GLEE_ATI_pn_triangles; GLEE_EXTERN GLboolean _GLEE_ATI_vertex_array_object; GLEE_EXTERN GLboolean _GLEE_EXT_vertex_shader; GLEE_EXTERN GLboolean _GLEE_ATI_vertex_streams; GLEE_EXTERN GLboolean _GLEE_ATI_element_array; GLEE_EXTERN GLboolean _GLEE_SUN_mesh_array; GLEE_EXTERN GLboolean _GLEE_SUN_slice_accum; GLEE_EXTERN GLboolean _GLEE_NV_multisample_filter_hint; GLEE_EXTERN GLboolean _GLEE_NV_depth_clamp; GLEE_EXTERN GLboolean _GLEE_NV_occlusion_query; GLEE_EXTERN GLboolean _GLEE_NV_point_sprite; GLEE_EXTERN GLboolean _GLEE_NV_texture_shader3; GLEE_EXTERN GLboolean _GLEE_NV_vertex_program1_1; GLEE_EXTERN GLboolean _GLEE_EXT_shadow_funcs; GLEE_EXTERN GLboolean _GLEE_EXT_stencil_two_side; GLEE_EXTERN GLboolean _GLEE_ATI_text_fragment_shader; GLEE_EXTERN GLboolean _GLEE_APPLE_client_storage; GLEE_EXTERN GLboolean _GLEE_APPLE_element_array; GLEE_EXTERN GLboolean _GLEE_APPLE_fence; GLEE_EXTERN GLboolean _GLEE_APPLE_vertex_array_object; GLEE_EXTERN GLboolean _GLEE_APPLE_vertex_array_range; GLEE_EXTERN GLboolean _GLEE_APPLE_ycbcr_422; GLEE_EXTERN GLboolean _GLEE_S3_s3tc; GLEE_EXTERN GLboolean _GLEE_ATI_draw_buffers; GLEE_EXTERN GLboolean _GLEE_ATI_pixel_format_float; GLEE_EXTERN GLboolean _GLEE_ATI_texture_env_combine3; GLEE_EXTERN GLboolean _GLEE_ATI_texture_float; GLEE_EXTERN GLboolean _GLEE_NV_float_buffer; GLEE_EXTERN GLboolean _GLEE_NV_fragment_program; GLEE_EXTERN GLboolean _GLEE_NV_half_float; GLEE_EXTERN GLboolean _GLEE_NV_pixel_data_range; GLEE_EXTERN GLboolean _GLEE_NV_primitive_restart; GLEE_EXTERN GLboolean _GLEE_NV_texture_expand_normal; GLEE_EXTERN GLboolean _GLEE_NV_vertex_program2; GLEE_EXTERN GLboolean _GLEE_ATI_map_object_buffer; GLEE_EXTERN GLboolean _GLEE_ATI_separate_stencil; GLEE_EXTERN GLboolean _GLEE_ATI_vertex_attrib_array_object; GLEE_EXTERN GLboolean _GLEE_OES_byte_coordinates; GLEE_EXTERN GLboolean _GLEE_OES_fixed_point; GLEE_EXTERN GLboolean _GLEE_OES_single_precision; GLEE_EXTERN GLboolean _GLEE_OES_compressed_paletted_texture; GLEE_EXTERN GLboolean _GLEE_OES_read_format; GLEE_EXTERN GLboolean _GLEE_OES_query_matrix; GLEE_EXTERN GLboolean _GLEE_EXT_depth_bounds_test; GLEE_EXTERN GLboolean _GLEE_EXT_texture_mirror_clamp; GLEE_EXTERN GLboolean _GLEE_EXT_blend_equation_separate; GLEE_EXTERN GLboolean _GLEE_MESA_pack_invert; GLEE_EXTERN GLboolean _GLEE_MESA_ycbcr_texture; GLEE_EXTERN GLboolean _GLEE_EXT_pixel_buffer_object; GLEE_EXTERN GLboolean _GLEE_NV_fragment_program_option; GLEE_EXTERN GLboolean _GLEE_NV_fragment_program2; GLEE_EXTERN GLboolean _GLEE_NV_vertex_program2_option; GLEE_EXTERN GLboolean _GLEE_NV_vertex_program3; GLEE_EXTERN GLboolean _GLEE_EXT_framebuffer_object; GLEE_EXTERN GLboolean _GLEE_GREMEDY_string_marker; GLEE_EXTERN GLboolean _GLEE_EXT_packed_depth_stencil; GLEE_EXTERN GLboolean _GLEE_EXT_stencil_clear_tag; GLEE_EXTERN GLboolean _GLEE_EXT_texture_sRGB; GLEE_EXTERN GLboolean _GLEE_EXT_framebuffer_blit; GLEE_EXTERN GLboolean _GLEE_EXT_framebuffer_multisample; GLEE_EXTERN GLboolean _GLEE_MESAX_texture_stack; GLEE_EXTERN GLboolean _GLEE_EXT_timer_query; GLEE_EXTERN GLboolean _GLEE_EXT_gpu_program_parameters; GLEE_EXTERN GLboolean _GLEE_APPLE_flush_buffer_range; GLEE_EXTERN GLboolean _GLEE_EXT_gpu_shader4; GLEE_EXTERN GLboolean _GLEE_EXT_draw_instanced; GLEE_EXTERN GLboolean _GLEE_EXT_packed_float; GLEE_EXTERN GLboolean _GLEE_EXT_texture_array; GLEE_EXTERN GLboolean _GLEE_EXT_texture_buffer_object; GLEE_EXTERN GLboolean _GLEE_EXT_texture_compression_latc; GLEE_EXTERN GLboolean _GLEE_EXT_texture_compression_rgtc; GLEE_EXTERN GLboolean _GLEE_EXT_texture_shared_exponent; GLEE_EXTERN GLboolean _GLEE_NV_depth_buffer_float; GLEE_EXTERN GLboolean _GLEE_NV_framebuffer_multisample_coverage; GLEE_EXTERN GLboolean _GLEE_EXT_framebuffer_sRGB; GLEE_EXTERN GLboolean _GLEE_NV_geometry_shader4; GLEE_EXTERN GLboolean _GLEE_NV_parameter_buffer_object; GLEE_EXTERN GLboolean _GLEE_EXT_draw_buffers2; GLEE_EXTERN GLboolean _GLEE_NV_transform_feedback; GLEE_EXTERN GLboolean _GLEE_EXT_bindable_uniform; GLEE_EXTERN GLboolean _GLEE_EXT_texture_integer; GLEE_EXTERN GLboolean _GLEE_GREMEDY_frame_terminator; GLEE_EXTERN GLboolean _GLEE_NV_conditional_render; GLEE_EXTERN GLboolean _GLEE_NV_present_video; GLEE_EXTERN GLboolean _GLEE_EXT_transform_feedback; GLEE_EXTERN GLboolean _GLEE_EXT_direct_state_access; GLEE_EXTERN GLboolean _GLEE_EXT_vertex_array_bgra; GLEE_EXTERN GLboolean _GLEE_EXT_texture_swizzle; GLEE_EXTERN GLboolean _GLEE_NV_explicit_multisample; GLEE_EXTERN GLboolean _GLEE_NV_transform_feedback2; GLEE_EXTERN GLboolean _GLEE_ATI_meminfo; GLEE_EXTERN GLboolean _GLEE_AMD_performance_monitor; GLEE_EXTERN GLboolean _GLEE_AMD_texture_texture4; GLEE_EXTERN GLboolean _GLEE_AMD_vertex_shader_tesselator; GLEE_EXTERN GLboolean _GLEE_EXT_provoking_vertex; GLEE_EXTERN GLboolean _GLEE_EXT_texture_snorm; GLEE_EXTERN GLboolean _GLEE_AMD_draw_buffers_blend; GLEE_EXTERN GLboolean _GLEE_APPLE_texture_range; GLEE_EXTERN GLboolean _GLEE_APPLE_float_pixels; GLEE_EXTERN GLboolean _GLEE_APPLE_vertex_program_evaluators; GLEE_EXTERN GLboolean _GLEE_APPLE_aux_depth_stencil; GLEE_EXTERN GLboolean _GLEE_APPLE_object_purgeable; GLEE_EXTERN GLboolean _GLEE_APPLE_row_bytes; GLEE_EXTERN GLboolean _GLEE_APPLE_rgb_422; GLEE_EXTERN GLboolean _GLEE_NV_video_capture; GLEE_EXTERN GLboolean _GLEE_NV_copy_image; GLEE_EXTERN GLboolean _GLEE_EXT_separate_shader_objects; GLEE_EXTERN GLboolean _GLEE_NV_parameter_buffer_object2; GLEE_EXTERN GLboolean _GLEE_NV_shader_buffer_load; GLEE_EXTERN GLboolean _GLEE_NV_vertex_buffer_unified_memory; GLEE_EXTERN GLboolean _GLEE_NV_texture_barrier; GLEE_EXTERN GLboolean _GLEE_AMD_shader_stencil_export; GLEE_EXTERN GLboolean _GLEE_AMD_seamless_cubemap_per_texture; GLEE_EXTERN GLboolean _GLEE_AMD_conservative_depth; GLEE_EXTERN GLboolean _GLEE_EXT_shader_image_load_store; GLEE_EXTERN GLboolean _GLEE_EXT_vertex_attrib_64bit; GLEE_EXTERN GLboolean _GLEE_NV_gpu_program5; GLEE_EXTERN GLboolean _GLEE_NV_gpu_shader5; GLEE_EXTERN GLboolean _GLEE_NV_shader_buffer_store; GLEE_EXTERN GLboolean _GLEE_NV_tessellation_program5; GLEE_EXTERN GLboolean _GLEE_NV_vertex_attrib_integer_64bit; GLEE_EXTERN GLboolean _GLEE_NV_multisample_coverage; GLEE_EXTERN GLboolean _GLEE_AMD_name_gen_delete; GLEE_EXTERN GLboolean _GLEE_AMD_debug_output; GLEE_EXTERN GLboolean _GLEE_AMD_transform_feedback3_lines_triangles; GLEE_EXTERN GLboolean _GLEE_AMD_depth_clamp_separate; GLEE_EXTERN GLboolean _GLEE_EXT_texture_sRGB_decode; GLEE_EXTERN GLboolean _GLEE_NV_texture_multisample; GLEE_EXTERN GLboolean _GLEE_AMD_blend_minmax_factor; GLEE_EXTERN GLboolean _GLEE_AMD_sample_positions; GLEE_EXTERN GLboolean _GLEE_EXT_x11_sync_object; GLEE_EXTERN GLboolean _GLEE_AMD_multi_draw_indirect; GLEE_EXTERN GLboolean _GLEE_EXT_framebuffer_multisample_blit_scaled; GLEE_EXTERN GLboolean _GLEE_NV_path_rendering; GLEE_EXTERN GLboolean _GLEE_AMD_pinned_memory; GLEE_EXTERN GLboolean _GLEE_AMD_stencil_operation_extended; GLEE_EXTERN GLboolean _GLEE_AMD_vertex_shader_viewport_index; GLEE_EXTERN GLboolean _GLEE_AMD_vertex_shader_layer; GLEE_EXTERN GLboolean _GLEE_NV_bindless_texture; GLEE_EXTERN GLboolean _GLEE_NV_shader_atomic_float; GLEE_EXTERN GLboolean _GLEE_AMD_query_buffer_object; GLEE_EXTERN GLboolean _GLEE_NV_compute_program5; GLEE_EXTERN GLboolean _GLEE_NV_shader_storage_buffer_object; GLEE_EXTERN GLboolean _GLEE_NV_shader_atomic_counters; GLEE_EXTERN GLboolean _GLEE_NV_deep_texture3D; GLEE_EXTERN GLboolean _GLEE_NVX_conditional_render; GLEE_EXTERN GLboolean _GLEE_AMD_sparse_texture; GLEE_EXTERN GLboolean _GLEE_AMD_shader_trinary_minmax; GLEE_EXTERN GLboolean _GLEE_INTEL_map_texture; GLEE_EXTERN GLboolean _GLEE_NV_draw_texture; GLEE_EXTERN GLboolean _GLEE_SGIX_texture_select; GLEE_EXTERN GLboolean _GLEE_INGR_blend_func_separate; GLEE_EXTERN GLboolean _GLEE_SGIX_depth_pass_instrument; GLEE_EXTERN GLboolean _GLEE_SGIX_igloo_interface; /* Aliases for extension querying variables */ #define GLEE_VERSION_1_2 GLeeEnabled(&_GLEE_VERSION_1_2) #define GLEE_ARB_imaging GLeeEnabled(&_GLEE_ARB_imaging) #define GLEE_VERSION_1_3 GLeeEnabled(&_GLEE_VERSION_1_3) #define GLEE_VERSION_1_4 GLeeEnabled(&_GLEE_VERSION_1_4) #define GLEE_VERSION_1_5 GLeeEnabled(&_GLEE_VERSION_1_5) #define GLEE_VERSION_2_0 GLeeEnabled(&_GLEE_VERSION_2_0) #define GLEE_VERSION_2_1 GLeeEnabled(&_GLEE_VERSION_2_1) #define GLEE_VERSION_3_0 GLeeEnabled(&_GLEE_VERSION_3_0) #define GLEE_VERSION_3_1 GLeeEnabled(&_GLEE_VERSION_3_1) #define GLEE_VERSION_3_2 GLeeEnabled(&_GLEE_VERSION_3_2) #define GLEE_VERSION_3_3 GLeeEnabled(&_GLEE_VERSION_3_3) #define GLEE_VERSION_4_0 GLeeEnabled(&_GLEE_VERSION_4_0) #define GLEE_VERSION_4_1 GLeeEnabled(&_GLEE_VERSION_4_1) #define GLEE_VERSION_4_2 GLeeEnabled(&_GLEE_VERSION_4_2) #define GLEE_VERSION_4_3 GLeeEnabled(&_GLEE_VERSION_4_3) #define GLEE_ARB_multitexture GLeeEnabled(&_GLEE_ARB_multitexture) #define GLEE_ARB_transpose_matrix GLeeEnabled(&_GLEE_ARB_transpose_matrix) #define GLEE_ARB_multisample GLeeEnabled(&_GLEE_ARB_multisample) #define GLEE_ARB_texture_env_add GLeeEnabled(&_GLEE_ARB_texture_env_add) #define GLEE_ARB_texture_cube_map GLeeEnabled(&_GLEE_ARB_texture_cube_map) #define GLEE_ARB_texture_compression GLeeEnabled(&_GLEE_ARB_texture_compression) #define GLEE_ARB_texture_border_clamp GLeeEnabled(&_GLEE_ARB_texture_border_clamp) #define GLEE_ARB_point_parameters GLeeEnabled(&_GLEE_ARB_point_parameters) #define GLEE_ARB_vertex_blend GLeeEnabled(&_GLEE_ARB_vertex_blend) #define GLEE_ARB_matrix_palette GLeeEnabled(&_GLEE_ARB_matrix_palette) #define GLEE_ARB_texture_env_combine GLeeEnabled(&_GLEE_ARB_texture_env_combine) #define GLEE_ARB_texture_env_crossbar GLeeEnabled(&_GLEE_ARB_texture_env_crossbar) #define GLEE_ARB_texture_env_dot3 GLeeEnabled(&_GLEE_ARB_texture_env_dot3) #define GLEE_ARB_texture_mirrored_repeat GLeeEnabled(&_GLEE_ARB_texture_mirrored_repeat) #define GLEE_ARB_depth_texture GLeeEnabled(&_GLEE_ARB_depth_texture) #define GLEE_ARB_shadow GLeeEnabled(&_GLEE_ARB_shadow) #define GLEE_ARB_shadow_ambient GLeeEnabled(&_GLEE_ARB_shadow_ambient) #define GLEE_ARB_window_pos GLeeEnabled(&_GLEE_ARB_window_pos) #define GLEE_ARB_vertex_program GLeeEnabled(&_GLEE_ARB_vertex_program) #define GLEE_ARB_fragment_program GLeeEnabled(&_GLEE_ARB_fragment_program) #define GLEE_ARB_vertex_buffer_object GLeeEnabled(&_GLEE_ARB_vertex_buffer_object) #define GLEE_ARB_occlusion_query GLeeEnabled(&_GLEE_ARB_occlusion_query) #define GLEE_ARB_shader_objects GLeeEnabled(&_GLEE_ARB_shader_objects) #define GLEE_ARB_vertex_shader GLeeEnabled(&_GLEE_ARB_vertex_shader) #define GLEE_ARB_fragment_shader GLeeEnabled(&_GLEE_ARB_fragment_shader) #define GLEE_ARB_shading_language_100 GLeeEnabled(&_GLEE_ARB_shading_language_100) #define GLEE_ARB_texture_non_power_of_two GLeeEnabled(&_GLEE_ARB_texture_non_power_of_two) #define GLEE_ARB_point_sprite GLeeEnabled(&_GLEE_ARB_point_sprite) #define GLEE_ARB_fragment_program_shadow GLeeEnabled(&_GLEE_ARB_fragment_program_shadow) #define GLEE_ARB_draw_buffers GLeeEnabled(&_GLEE_ARB_draw_buffers) #define GLEE_ARB_texture_rectangle GLeeEnabled(&_GLEE_ARB_texture_rectangle) #define GLEE_ARB_color_buffer_float GLeeEnabled(&_GLEE_ARB_color_buffer_float) #define GLEE_ARB_half_float_pixel GLeeEnabled(&_GLEE_ARB_half_float_pixel) #define GLEE_ARB_texture_float GLeeEnabled(&_GLEE_ARB_texture_float) #define GLEE_ARB_pixel_buffer_object GLeeEnabled(&_GLEE_ARB_pixel_buffer_object) #define GLEE_ARB_depth_buffer_float GLeeEnabled(&_GLEE_ARB_depth_buffer_float) #define GLEE_ARB_draw_instanced GLeeEnabled(&_GLEE_ARB_draw_instanced) #define GLEE_ARB_framebuffer_object GLeeEnabled(&_GLEE_ARB_framebuffer_object) #define GLEE_ARB_framebuffer_sRGB GLeeEnabled(&_GLEE_ARB_framebuffer_sRGB) #define GLEE_ARB_geometry_shader4 GLeeEnabled(&_GLEE_ARB_geometry_shader4) #define GLEE_ARB_half_float_vertex GLeeEnabled(&_GLEE_ARB_half_float_vertex) #define GLEE_ARB_instanced_arrays GLeeEnabled(&_GLEE_ARB_instanced_arrays) #define GLEE_ARB_map_buffer_range GLeeEnabled(&_GLEE_ARB_map_buffer_range) #define GLEE_ARB_texture_buffer_object GLeeEnabled(&_GLEE_ARB_texture_buffer_object) #define GLEE_ARB_texture_compression_rgtc GLeeEnabled(&_GLEE_ARB_texture_compression_rgtc) #define GLEE_ARB_texture_rg GLeeEnabled(&_GLEE_ARB_texture_rg) #define GLEE_ARB_vertex_array_object GLeeEnabled(&_GLEE_ARB_vertex_array_object) #define GLEE_ARB_uniform_buffer_object GLeeEnabled(&_GLEE_ARB_uniform_buffer_object) #define GLEE_ARB_compatibility GLeeEnabled(&_GLEE_ARB_compatibility) #define GLEE_ARB_copy_buffer GLeeEnabled(&_GLEE_ARB_copy_buffer) #define GLEE_ARB_shader_texture_lod GLeeEnabled(&_GLEE_ARB_shader_texture_lod) #define GLEE_ARB_depth_clamp GLeeEnabled(&_GLEE_ARB_depth_clamp) #define GLEE_ARB_draw_elements_base_vertex GLeeEnabled(&_GLEE_ARB_draw_elements_base_vertex) #define GLEE_ARB_fragment_coord_conventions GLeeEnabled(&_GLEE_ARB_fragment_coord_conventions) #define GLEE_ARB_provoking_vertex GLeeEnabled(&_GLEE_ARB_provoking_vertex) #define GLEE_ARB_seamless_cube_map GLeeEnabled(&_GLEE_ARB_seamless_cube_map) #define GLEE_ARB_sync GLeeEnabled(&_GLEE_ARB_sync) #define GLEE_ARB_texture_multisample GLeeEnabled(&_GLEE_ARB_texture_multisample) #define GLEE_ARB_vertex_array_bgra GLeeEnabled(&_GLEE_ARB_vertex_array_bgra) #define GLEE_ARB_draw_buffers_blend GLeeEnabled(&_GLEE_ARB_draw_buffers_blend) #define GLEE_ARB_sample_shading GLeeEnabled(&_GLEE_ARB_sample_shading) #define GLEE_ARB_texture_cube_map_array GLeeEnabled(&_GLEE_ARB_texture_cube_map_array) #define GLEE_ARB_texture_gather GLeeEnabled(&_GLEE_ARB_texture_gather) #define GLEE_ARB_texture_query_lod GLeeEnabled(&_GLEE_ARB_texture_query_lod) #define GLEE_ARB_shading_language_include GLeeEnabled(&_GLEE_ARB_shading_language_include) #define GLEE_ARB_texture_compression_bptc GLeeEnabled(&_GLEE_ARB_texture_compression_bptc) #define GLEE_ARB_blend_func_extended GLeeEnabled(&_GLEE_ARB_blend_func_extended) #define GLEE_ARB_explicit_attrib_location GLeeEnabled(&_GLEE_ARB_explicit_attrib_location) #define GLEE_ARB_occlusion_query2 GLeeEnabled(&_GLEE_ARB_occlusion_query2) #define GLEE_ARB_sampler_objects GLeeEnabled(&_GLEE_ARB_sampler_objects) #define GLEE_ARB_shader_bit_encoding GLeeEnabled(&_GLEE_ARB_shader_bit_encoding) #define GLEE_ARB_texture_rgb10_a2ui GLeeEnabled(&_GLEE_ARB_texture_rgb10_a2ui) #define GLEE_ARB_texture_swizzle GLeeEnabled(&_GLEE_ARB_texture_swizzle) #define GLEE_ARB_timer_query GLeeEnabled(&_GLEE_ARB_timer_query) #define GLEE_ARB_vertex_type_2_10_10_10_rev GLeeEnabled(&_GLEE_ARB_vertex_type_2_10_10_10_rev) #define GLEE_ARB_draw_indirect GLeeEnabled(&_GLEE_ARB_draw_indirect) #define GLEE_ARB_gpu_shader5 GLeeEnabled(&_GLEE_ARB_gpu_shader5) #define GLEE_ARB_gpu_shader_fp64 GLeeEnabled(&_GLEE_ARB_gpu_shader_fp64) #define GLEE_ARB_shader_subroutine GLeeEnabled(&_GLEE_ARB_shader_subroutine) #define GLEE_ARB_tessellation_shader GLeeEnabled(&_GLEE_ARB_tessellation_shader) #define GLEE_ARB_texture_buffer_object_rgb32 GLeeEnabled(&_GLEE_ARB_texture_buffer_object_rgb32) #define GLEE_ARB_transform_feedback2 GLeeEnabled(&_GLEE_ARB_transform_feedback2) #define GLEE_ARB_transform_feedback3 GLeeEnabled(&_GLEE_ARB_transform_feedback3) #define GLEE_ARB_ES2_compatibility GLeeEnabled(&_GLEE_ARB_ES2_compatibility) #define GLEE_ARB_get_program_binary GLeeEnabled(&_GLEE_ARB_get_program_binary) #define GLEE_ARB_separate_shader_objects GLeeEnabled(&_GLEE_ARB_separate_shader_objects) #define GLEE_ARB_shader_precision GLeeEnabled(&_GLEE_ARB_shader_precision) #define GLEE_ARB_vertex_attrib_64bit GLeeEnabled(&_GLEE_ARB_vertex_attrib_64bit) #define GLEE_ARB_viewport_array GLeeEnabled(&_GLEE_ARB_viewport_array) #define GLEE_ARB_cl_event GLeeEnabled(&_GLEE_ARB_cl_event) #define GLEE_ARB_debug_output GLeeEnabled(&_GLEE_ARB_debug_output) #define GLEE_ARB_robustness GLeeEnabled(&_GLEE_ARB_robustness) #define GLEE_ARB_shader_stencil_export GLeeEnabled(&_GLEE_ARB_shader_stencil_export) #define GLEE_ARB_base_instance GLeeEnabled(&_GLEE_ARB_base_instance) #define GLEE_ARB_shading_language_420pack GLeeEnabled(&_GLEE_ARB_shading_language_420pack) #define GLEE_ARB_transform_feedback_instanced GLeeEnabled(&_GLEE_ARB_transform_feedback_instanced) #define GLEE_ARB_compressed_texture_pixel_storage GLeeEnabled(&_GLEE_ARB_compressed_texture_pixel_storage) #define GLEE_ARB_conservative_depth GLeeEnabled(&_GLEE_ARB_conservative_depth) #define GLEE_ARB_internalformat_query GLeeEnabled(&_GLEE_ARB_internalformat_query) #define GLEE_ARB_map_buffer_alignment GLeeEnabled(&_GLEE_ARB_map_buffer_alignment) #define GLEE_ARB_shader_atomic_counters GLeeEnabled(&_GLEE_ARB_shader_atomic_counters) #define GLEE_ARB_shader_image_load_store GLeeEnabled(&_GLEE_ARB_shader_image_load_store) #define GLEE_ARB_shading_language_packing GLeeEnabled(&_GLEE_ARB_shading_language_packing) #define GLEE_ARB_texture_storage GLeeEnabled(&_GLEE_ARB_texture_storage) #define GLEE_KHR_texture_compression_astc_ldr GLeeEnabled(&_GLEE_KHR_texture_compression_astc_ldr) #define GLEE_KHR_debug GLeeEnabled(&_GLEE_KHR_debug) #define GLEE_ARB_arrays_of_arrays GLeeEnabled(&_GLEE_ARB_arrays_of_arrays) #define GLEE_ARB_clear_buffer_object GLeeEnabled(&_GLEE_ARB_clear_buffer_object) #define GLEE_ARB_compute_shader GLeeEnabled(&_GLEE_ARB_compute_shader) #define GLEE_ARB_copy_image GLeeEnabled(&_GLEE_ARB_copy_image) #define GLEE_ARB_texture_view GLeeEnabled(&_GLEE_ARB_texture_view) #define GLEE_ARB_vertex_attrib_binding GLeeEnabled(&_GLEE_ARB_vertex_attrib_binding) #define GLEE_ARB_robustness_isolation GLeeEnabled(&_GLEE_ARB_robustness_isolation) #define GLEE_ARB_ES3_compatibility GLeeEnabled(&_GLEE_ARB_ES3_compatibility) #define GLEE_ARB_explicit_uniform_location GLeeEnabled(&_GLEE_ARB_explicit_uniform_location) #define GLEE_ARB_fragment_layer_viewport GLeeEnabled(&_GLEE_ARB_fragment_layer_viewport) #define GLEE_ARB_framebuffer_no_attachments GLeeEnabled(&_GLEE_ARB_framebuffer_no_attachments) #define GLEE_ARB_internalformat_query2 GLeeEnabled(&_GLEE_ARB_internalformat_query2) #define GLEE_ARB_invalidate_subdata GLeeEnabled(&_GLEE_ARB_invalidate_subdata) #define GLEE_ARB_multi_draw_indirect GLeeEnabled(&_GLEE_ARB_multi_draw_indirect) #define GLEE_ARB_program_interface_query GLeeEnabled(&_GLEE_ARB_program_interface_query) #define GLEE_ARB_robust_buffer_access_behavior GLeeEnabled(&_GLEE_ARB_robust_buffer_access_behavior) #define GLEE_ARB_shader_image_size GLeeEnabled(&_GLEE_ARB_shader_image_size) #define GLEE_ARB_shader_storage_buffer_object GLeeEnabled(&_GLEE_ARB_shader_storage_buffer_object) #define GLEE_ARB_stencil_texturing GLeeEnabled(&_GLEE_ARB_stencil_texturing) #define GLEE_ARB_texture_buffer_range GLeeEnabled(&_GLEE_ARB_texture_buffer_range) #define GLEE_ARB_texture_query_levels GLeeEnabled(&_GLEE_ARB_texture_query_levels) #define GLEE_ARB_texture_storage_multisample GLeeEnabled(&_GLEE_ARB_texture_storage_multisample) #define GLEE_EXT_abgr GLeeEnabled(&_GLEE_EXT_abgr) #define GLEE_EXT_blend_color GLeeEnabled(&_GLEE_EXT_blend_color) #define GLEE_EXT_polygon_offset GLeeEnabled(&_GLEE_EXT_polygon_offset) #define GLEE_EXT_texture GLeeEnabled(&_GLEE_EXT_texture) #define GLEE_EXT_texture3D GLeeEnabled(&_GLEE_EXT_texture3D) #define GLEE_SGIS_texture_filter4 GLeeEnabled(&_GLEE_SGIS_texture_filter4) #define GLEE_EXT_subtexture GLeeEnabled(&_GLEE_EXT_subtexture) #define GLEE_EXT_copy_texture GLeeEnabled(&_GLEE_EXT_copy_texture) #define GLEE_EXT_histogram GLeeEnabled(&_GLEE_EXT_histogram) #define GLEE_EXT_convolution GLeeEnabled(&_GLEE_EXT_convolution) #define GLEE_SGI_color_matrix GLeeEnabled(&_GLEE_SGI_color_matrix) #define GLEE_SGI_color_table GLeeEnabled(&_GLEE_SGI_color_table) #define GLEE_SGIS_pixel_texture GLeeEnabled(&_GLEE_SGIS_pixel_texture) #define GLEE_SGIX_pixel_texture GLeeEnabled(&_GLEE_SGIX_pixel_texture) #define GLEE_SGIS_texture4D GLeeEnabled(&_GLEE_SGIS_texture4D) #define GLEE_SGI_texture_color_table GLeeEnabled(&_GLEE_SGI_texture_color_table) #define GLEE_EXT_cmyka GLeeEnabled(&_GLEE_EXT_cmyka) #define GLEE_EXT_texture_object GLeeEnabled(&_GLEE_EXT_texture_object) #define GLEE_SGIS_detail_texture GLeeEnabled(&_GLEE_SGIS_detail_texture) #define GLEE_SGIS_sharpen_texture GLeeEnabled(&_GLEE_SGIS_sharpen_texture) #define GLEE_EXT_packed_pixels GLeeEnabled(&_GLEE_EXT_packed_pixels) #define GLEE_SGIS_texture_lod GLeeEnabled(&_GLEE_SGIS_texture_lod) #define GLEE_SGIS_multisample GLeeEnabled(&_GLEE_SGIS_multisample) #define GLEE_EXT_rescale_normal GLeeEnabled(&_GLEE_EXT_rescale_normal) #define GLEE_EXT_vertex_array GLeeEnabled(&_GLEE_EXT_vertex_array) #define GLEE_EXT_misc_attribute GLeeEnabled(&_GLEE_EXT_misc_attribute) #define GLEE_SGIS_generate_mipmap GLeeEnabled(&_GLEE_SGIS_generate_mipmap) #define GLEE_SGIX_clipmap GLeeEnabled(&_GLEE_SGIX_clipmap) #define GLEE_SGIX_shadow GLeeEnabled(&_GLEE_SGIX_shadow) #define GLEE_SGIS_texture_edge_clamp GLeeEnabled(&_GLEE_SGIS_texture_edge_clamp) #define GLEE_SGIS_texture_border_clamp GLeeEnabled(&_GLEE_SGIS_texture_border_clamp) #define GLEE_EXT_blend_minmax GLeeEnabled(&_GLEE_EXT_blend_minmax) #define GLEE_EXT_blend_subtract GLeeEnabled(&_GLEE_EXT_blend_subtract) #define GLEE_EXT_blend_logic_op GLeeEnabled(&_GLEE_EXT_blend_logic_op) #define GLEE_SGIX_interlace GLeeEnabled(&_GLEE_SGIX_interlace) #define GLEE_SGIX_pixel_tiles GLeeEnabled(&_GLEE_SGIX_pixel_tiles) #define GLEE_SGIS_texture_select GLeeEnabled(&_GLEE_SGIS_texture_select) #define GLEE_SGIX_sprite GLeeEnabled(&_GLEE_SGIX_sprite) #define GLEE_SGIX_texture_multi_buffer GLeeEnabled(&_GLEE_SGIX_texture_multi_buffer) #define GLEE_EXT_point_parameters GLeeEnabled(&_GLEE_EXT_point_parameters) #define GLEE_SGIS_point_parameters GLeeEnabled(&_GLEE_SGIS_point_parameters) #define GLEE_SGIX_instruments GLeeEnabled(&_GLEE_SGIX_instruments) #define GLEE_SGIX_texture_scale_bias GLeeEnabled(&_GLEE_SGIX_texture_scale_bias) #define GLEE_SGIX_framezoom GLeeEnabled(&_GLEE_SGIX_framezoom) #define GLEE_SGIX_tag_sample_buffer GLeeEnabled(&_GLEE_SGIX_tag_sample_buffer) #define GLEE_FfdMaskSGIX GLeeEnabled(&_GLEE_FfdMaskSGIX) #define GLEE_SGIX_polynomial_ffd GLeeEnabled(&_GLEE_SGIX_polynomial_ffd) #define GLEE_SGIX_reference_plane GLeeEnabled(&_GLEE_SGIX_reference_plane) #define GLEE_SGIX_flush_raster GLeeEnabled(&_GLEE_SGIX_flush_raster) #define GLEE_SGIX_depth_texture GLeeEnabled(&_GLEE_SGIX_depth_texture) #define GLEE_SGIS_fog_function GLeeEnabled(&_GLEE_SGIS_fog_function) #define GLEE_SGIX_fog_offset GLeeEnabled(&_GLEE_SGIX_fog_offset) #define GLEE_HP_image_transform GLeeEnabled(&_GLEE_HP_image_transform) #define GLEE_HP_convolution_border_modes GLeeEnabled(&_GLEE_HP_convolution_border_modes) #define GLEE_INGR_palette_buffer GLeeEnabled(&_GLEE_INGR_palette_buffer) #define GLEE_SGIX_texture_add_env GLeeEnabled(&_GLEE_SGIX_texture_add_env) #define GLEE_EXT_color_subtable GLeeEnabled(&_GLEE_EXT_color_subtable) #define GLEE_PGI_vertex_hints GLeeEnabled(&_GLEE_PGI_vertex_hints) #define GLEE_PGI_misc_hints GLeeEnabled(&_GLEE_PGI_misc_hints) #define GLEE_EXT_paletted_texture GLeeEnabled(&_GLEE_EXT_paletted_texture) #define GLEE_EXT_clip_volume_hint GLeeEnabled(&_GLEE_EXT_clip_volume_hint) #define GLEE_SGIX_list_priority GLeeEnabled(&_GLEE_SGIX_list_priority) #define GLEE_SGIX_ir_instrument1 GLeeEnabled(&_GLEE_SGIX_ir_instrument1) #define GLEE_SGIX_calligraphic_fragment GLeeEnabled(&_GLEE_SGIX_calligraphic_fragment) #define GLEE_SGIX_texture_lod_bias GLeeEnabled(&_GLEE_SGIX_texture_lod_bias) #define GLEE_SGIX_shadow_ambient GLeeEnabled(&_GLEE_SGIX_shadow_ambient) #define GLEE_EXT_index_texture GLeeEnabled(&_GLEE_EXT_index_texture) #define GLEE_EXT_index_material GLeeEnabled(&_GLEE_EXT_index_material) #define GLEE_EXT_index_func GLeeEnabled(&_GLEE_EXT_index_func) #define GLEE_EXT_index_array_formats GLeeEnabled(&_GLEE_EXT_index_array_formats) #define GLEE_EXT_compiled_vertex_array GLeeEnabled(&_GLEE_EXT_compiled_vertex_array) #define GLEE_EXT_cull_vertex GLeeEnabled(&_GLEE_EXT_cull_vertex) #define GLEE_SGIX_ycrcb GLeeEnabled(&_GLEE_SGIX_ycrcb) #define GLEE_SGIX_fragment_lighting GLeeEnabled(&_GLEE_SGIX_fragment_lighting) #define GLEE_IBM_rasterpos_clip GLeeEnabled(&_GLEE_IBM_rasterpos_clip) #define GLEE_HP_texture_lighting GLeeEnabled(&_GLEE_HP_texture_lighting) #define GLEE_EXT_draw_range_elements GLeeEnabled(&_GLEE_EXT_draw_range_elements) #define GLEE_WIN_phong_shading GLeeEnabled(&_GLEE_WIN_phong_shading) #define GLEE_WIN_specular_fog GLeeEnabled(&_GLEE_WIN_specular_fog) #define GLEE_EXT_light_texture GLeeEnabled(&_GLEE_EXT_light_texture) #define GLEE_SGIX_blend_alpha_minmax GLeeEnabled(&_GLEE_SGIX_blend_alpha_minmax) #define GLEE_SGIX_impact_pixel_texture GLeeEnabled(&_GLEE_SGIX_impact_pixel_texture) #define GLEE_EXT_bgra GLeeEnabled(&_GLEE_EXT_bgra) #define GLEE_SGIX_async GLeeEnabled(&_GLEE_SGIX_async) #define GLEE_SGIX_async_pixel GLeeEnabled(&_GLEE_SGIX_async_pixel) #define GLEE_SGIX_async_histogram GLeeEnabled(&_GLEE_SGIX_async_histogram) #define GLEE_INTEL_texture_scissor GLeeEnabled(&_GLEE_INTEL_texture_scissor) #define GLEE_INTEL_parallel_arrays GLeeEnabled(&_GLEE_INTEL_parallel_arrays) #define GLEE_HP_occlusion_test GLeeEnabled(&_GLEE_HP_occlusion_test) #define GLEE_EXT_pixel_transform GLeeEnabled(&_GLEE_EXT_pixel_transform) #define GLEE_EXT_pixel_transform_color_table GLeeEnabled(&_GLEE_EXT_pixel_transform_color_table) #define GLEE_EXT_shared_texture_palette GLeeEnabled(&_GLEE_EXT_shared_texture_palette) #define GLEE_EXT_separate_specular_color GLeeEnabled(&_GLEE_EXT_separate_specular_color) #define GLEE_EXT_secondary_color GLeeEnabled(&_GLEE_EXT_secondary_color) #define GLEE_EXT_texture_perturb_normal GLeeEnabled(&_GLEE_EXT_texture_perturb_normal) #define GLEE_EXT_multi_draw_arrays GLeeEnabled(&_GLEE_EXT_multi_draw_arrays) #define GLEE_EXT_fog_coord GLeeEnabled(&_GLEE_EXT_fog_coord) #define GLEE_REND_screen_coordinates GLeeEnabled(&_GLEE_REND_screen_coordinates) #define GLEE_EXT_coordinate_frame GLeeEnabled(&_GLEE_EXT_coordinate_frame) #define GLEE_EXT_texture_env_combine GLeeEnabled(&_GLEE_EXT_texture_env_combine) #define GLEE_APPLE_specular_vector GLeeEnabled(&_GLEE_APPLE_specular_vector) #define GLEE_APPLE_transform_hint GLeeEnabled(&_GLEE_APPLE_transform_hint) #define GLEE_SGIX_fog_scale GLeeEnabled(&_GLEE_SGIX_fog_scale) #define GLEE_SUNX_constant_data GLeeEnabled(&_GLEE_SUNX_constant_data) #define GLEE_SUN_global_alpha GLeeEnabled(&_GLEE_SUN_global_alpha) #define GLEE_SUN_triangle_list GLeeEnabled(&_GLEE_SUN_triangle_list) #define GLEE_SUN_vertex GLeeEnabled(&_GLEE_SUN_vertex) #define GLEE_EXT_blend_func_separate GLeeEnabled(&_GLEE_EXT_blend_func_separate) #define GLEE_INGR_color_clamp GLeeEnabled(&_GLEE_INGR_color_clamp) #define GLEE_INGR_interlace_read GLeeEnabled(&_GLEE_INGR_interlace_read) #define GLEE_EXT_stencil_wrap GLeeEnabled(&_GLEE_EXT_stencil_wrap) #define GLEE_EXT_422_pixels GLeeEnabled(&_GLEE_EXT_422_pixels) #define GLEE_NV_texgen_reflection GLeeEnabled(&_GLEE_NV_texgen_reflection) #define GLEE_EXT_texture_cube_map GLeeEnabled(&_GLEE_EXT_texture_cube_map) #define GLEE_SUN_convolution_border_modes GLeeEnabled(&_GLEE_SUN_convolution_border_modes) #define GLEE_EXT_texture_env_add GLeeEnabled(&_GLEE_EXT_texture_env_add) #define GLEE_EXT_texture_lod_bias GLeeEnabled(&_GLEE_EXT_texture_lod_bias) #define GLEE_EXT_texture_filter_anisotropic GLeeEnabled(&_GLEE_EXT_texture_filter_anisotropic) #define GLEE_EXT_vertex_weighting GLeeEnabled(&_GLEE_EXT_vertex_weighting) #define GLEE_NV_light_max_exponent GLeeEnabled(&_GLEE_NV_light_max_exponent) #define GLEE_NV_vertex_array_range GLeeEnabled(&_GLEE_NV_vertex_array_range) #define GLEE_NV_register_combiners GLeeEnabled(&_GLEE_NV_register_combiners) #define GLEE_NV_fog_distance GLeeEnabled(&_GLEE_NV_fog_distance) #define GLEE_NV_texgen_emboss GLeeEnabled(&_GLEE_NV_texgen_emboss) #define GLEE_NV_blend_square GLeeEnabled(&_GLEE_NV_blend_square) #define GLEE_NV_texture_env_combine4 GLeeEnabled(&_GLEE_NV_texture_env_combine4) #define GLEE_MESA_resize_buffers GLeeEnabled(&_GLEE_MESA_resize_buffers) #define GLEE_MESA_window_pos GLeeEnabled(&_GLEE_MESA_window_pos) #define GLEE_EXT_texture_compression_s3tc GLeeEnabled(&_GLEE_EXT_texture_compression_s3tc) #define GLEE_IBM_cull_vertex GLeeEnabled(&_GLEE_IBM_cull_vertex) #define GLEE_IBM_multimode_draw_arrays GLeeEnabled(&_GLEE_IBM_multimode_draw_arrays) #define GLEE_IBM_vertex_array_lists GLeeEnabled(&_GLEE_IBM_vertex_array_lists) #define GLEE_SGIX_subsample GLeeEnabled(&_GLEE_SGIX_subsample) #define GLEE_SGIX_ycrcb_subsample GLeeEnabled(&_GLEE_SGIX_ycrcb_subsample) #define GLEE_SGIX_ycrcba GLeeEnabled(&_GLEE_SGIX_ycrcba) #define GLEE_SGI_depth_pass_instrument GLeeEnabled(&_GLEE_SGI_depth_pass_instrument) #define GLEE_3DFX_texture_compression_FXT1 GLeeEnabled(&_GLEE_3DFX_texture_compression_FXT1) #define GLEE_3DFX_multisample GLeeEnabled(&_GLEE_3DFX_multisample) #define GLEE_3DFX_tbuffer GLeeEnabled(&_GLEE_3DFX_tbuffer) #define GLEE_EXT_multisample GLeeEnabled(&_GLEE_EXT_multisample) #define GLEE_SGIX_vertex_preclip GLeeEnabled(&_GLEE_SGIX_vertex_preclip) #define GLEE_SGIX_convolution_accuracy GLeeEnabled(&_GLEE_SGIX_convolution_accuracy) #define GLEE_SGIX_resample GLeeEnabled(&_GLEE_SGIX_resample) #define GLEE_SGIS_point_line_texgen GLeeEnabled(&_GLEE_SGIS_point_line_texgen) #define GLEE_SGIS_texture_color_mask GLeeEnabled(&_GLEE_SGIS_texture_color_mask) #define GLEE_EXT_texture_env_dot3 GLeeEnabled(&_GLEE_EXT_texture_env_dot3) #define GLEE_ATI_texture_mirror_once GLeeEnabled(&_GLEE_ATI_texture_mirror_once) #define GLEE_NV_fence GLeeEnabled(&_GLEE_NV_fence) #define GLEE_IBM_texture_mirrored_repeat GLeeEnabled(&_GLEE_IBM_texture_mirrored_repeat) #define GLEE_NV_evaluators GLeeEnabled(&_GLEE_NV_evaluators) #define GLEE_NV_packed_depth_stencil GLeeEnabled(&_GLEE_NV_packed_depth_stencil) #define GLEE_NV_register_combiners2 GLeeEnabled(&_GLEE_NV_register_combiners2) #define GLEE_NV_texture_compression_vtc GLeeEnabled(&_GLEE_NV_texture_compression_vtc) #define GLEE_NV_texture_rectangle GLeeEnabled(&_GLEE_NV_texture_rectangle) #define GLEE_NV_texture_shader GLeeEnabled(&_GLEE_NV_texture_shader) #define GLEE_NV_texture_shader2 GLeeEnabled(&_GLEE_NV_texture_shader2) #define GLEE_NV_vertex_array_range2 GLeeEnabled(&_GLEE_NV_vertex_array_range2) #define GLEE_NV_vertex_program GLeeEnabled(&_GLEE_NV_vertex_program) #define GLEE_SGIX_texture_coordinate_clamp GLeeEnabled(&_GLEE_SGIX_texture_coordinate_clamp) #define GLEE_SGIX_scalebias_hint GLeeEnabled(&_GLEE_SGIX_scalebias_hint) #define GLEE_OML_interlace GLeeEnabled(&_GLEE_OML_interlace) #define GLEE_OML_subsample GLeeEnabled(&_GLEE_OML_subsample) #define GLEE_OML_resample GLeeEnabled(&_GLEE_OML_resample) #define GLEE_NV_copy_depth_to_color GLeeEnabled(&_GLEE_NV_copy_depth_to_color) #define GLEE_ATI_envmap_bumpmap GLeeEnabled(&_GLEE_ATI_envmap_bumpmap) #define GLEE_ATI_fragment_shader GLeeEnabled(&_GLEE_ATI_fragment_shader) #define GLEE_ATI_pn_triangles GLeeEnabled(&_GLEE_ATI_pn_triangles) #define GLEE_ATI_vertex_array_object GLeeEnabled(&_GLEE_ATI_vertex_array_object) #define GLEE_EXT_vertex_shader GLeeEnabled(&_GLEE_EXT_vertex_shader) #define GLEE_ATI_vertex_streams GLeeEnabled(&_GLEE_ATI_vertex_streams) #define GLEE_ATI_element_array GLeeEnabled(&_GLEE_ATI_element_array) #define GLEE_SUN_mesh_array GLeeEnabled(&_GLEE_SUN_mesh_array) #define GLEE_SUN_slice_accum GLeeEnabled(&_GLEE_SUN_slice_accum) #define GLEE_NV_multisample_filter_hint GLeeEnabled(&_GLEE_NV_multisample_filter_hint) #define GLEE_NV_depth_clamp GLeeEnabled(&_GLEE_NV_depth_clamp) #define GLEE_NV_occlusion_query GLeeEnabled(&_GLEE_NV_occlusion_query) #define GLEE_NV_point_sprite GLeeEnabled(&_GLEE_NV_point_sprite) #define GLEE_NV_texture_shader3 GLeeEnabled(&_GLEE_NV_texture_shader3) #define GLEE_NV_vertex_program1_1 GLeeEnabled(&_GLEE_NV_vertex_program1_1) #define GLEE_EXT_shadow_funcs GLeeEnabled(&_GLEE_EXT_shadow_funcs) #define GLEE_EXT_stencil_two_side GLeeEnabled(&_GLEE_EXT_stencil_two_side) #define GLEE_ATI_text_fragment_shader GLeeEnabled(&_GLEE_ATI_text_fragment_shader) #define GLEE_APPLE_client_storage GLeeEnabled(&_GLEE_APPLE_client_storage) #define GLEE_APPLE_element_array GLeeEnabled(&_GLEE_APPLE_element_array) #define GLEE_APPLE_fence GLeeEnabled(&_GLEE_APPLE_fence) #define GLEE_APPLE_vertex_array_object GLeeEnabled(&_GLEE_APPLE_vertex_array_object) #define GLEE_APPLE_vertex_array_range GLeeEnabled(&_GLEE_APPLE_vertex_array_range) #define GLEE_APPLE_ycbcr_422 GLeeEnabled(&_GLEE_APPLE_ycbcr_422) #define GLEE_S3_s3tc GLeeEnabled(&_GLEE_S3_s3tc) #define GLEE_ATI_draw_buffers GLeeEnabled(&_GLEE_ATI_draw_buffers) #define GLEE_ATI_pixel_format_float GLeeEnabled(&_GLEE_ATI_pixel_format_float) #define GLEE_ATI_texture_env_combine3 GLeeEnabled(&_GLEE_ATI_texture_env_combine3) #define GLEE_ATI_texture_float GLeeEnabled(&_GLEE_ATI_texture_float) #define GLEE_NV_float_buffer GLeeEnabled(&_GLEE_NV_float_buffer) #define GLEE_NV_fragment_program GLeeEnabled(&_GLEE_NV_fragment_program) #define GLEE_NV_half_float GLeeEnabled(&_GLEE_NV_half_float) #define GLEE_NV_pixel_data_range GLeeEnabled(&_GLEE_NV_pixel_data_range) #define GLEE_NV_primitive_restart GLeeEnabled(&_GLEE_NV_primitive_restart) #define GLEE_NV_texture_expand_normal GLeeEnabled(&_GLEE_NV_texture_expand_normal) #define GLEE_NV_vertex_program2 GLeeEnabled(&_GLEE_NV_vertex_program2) #define GLEE_ATI_map_object_buffer GLeeEnabled(&_GLEE_ATI_map_object_buffer) #define GLEE_ATI_separate_stencil GLeeEnabled(&_GLEE_ATI_separate_stencil) #define GLEE_ATI_vertex_attrib_array_object GLeeEnabled(&_GLEE_ATI_vertex_attrib_array_object) #define GLEE_OES_byte_coordinates GLeeEnabled(&_GLEE_OES_byte_coordinates) #define GLEE_OES_fixed_point GLeeEnabled(&_GLEE_OES_fixed_point) #define GLEE_OES_single_precision GLeeEnabled(&_GLEE_OES_single_precision) #define GLEE_OES_compressed_paletted_texture GLeeEnabled(&_GLEE_OES_compressed_paletted_texture) #define GLEE_OES_read_format GLeeEnabled(&_GLEE_OES_read_format) #define GLEE_OES_query_matrix GLeeEnabled(&_GLEE_OES_query_matrix) #define GLEE_EXT_depth_bounds_test GLeeEnabled(&_GLEE_EXT_depth_bounds_test) #define GLEE_EXT_texture_mirror_clamp GLeeEnabled(&_GLEE_EXT_texture_mirror_clamp) #define GLEE_EXT_blend_equation_separate GLeeEnabled(&_GLEE_EXT_blend_equation_separate) #define GLEE_MESA_pack_invert GLeeEnabled(&_GLEE_MESA_pack_invert) #define GLEE_MESA_ycbcr_texture GLeeEnabled(&_GLEE_MESA_ycbcr_texture) #define GLEE_EXT_pixel_buffer_object GLeeEnabled(&_GLEE_EXT_pixel_buffer_object) #define GLEE_NV_fragment_program_option GLeeEnabled(&_GLEE_NV_fragment_program_option) #define GLEE_NV_fragment_program2 GLeeEnabled(&_GLEE_NV_fragment_program2) #define GLEE_NV_vertex_program2_option GLeeEnabled(&_GLEE_NV_vertex_program2_option) #define GLEE_NV_vertex_program3 GLeeEnabled(&_GLEE_NV_vertex_program3) #define GLEE_EXT_framebuffer_object GLeeEnabled(&_GLEE_EXT_framebuffer_object) #define GLEE_GREMEDY_string_marker GLeeEnabled(&_GLEE_GREMEDY_string_marker) #define GLEE_EXT_packed_depth_stencil GLeeEnabled(&_GLEE_EXT_packed_depth_stencil) #define GLEE_EXT_stencil_clear_tag GLeeEnabled(&_GLEE_EXT_stencil_clear_tag) #define GLEE_EXT_texture_sRGB GLeeEnabled(&_GLEE_EXT_texture_sRGB) #define GLEE_EXT_framebuffer_blit GLeeEnabled(&_GLEE_EXT_framebuffer_blit) #define GLEE_EXT_framebuffer_multisample GLeeEnabled(&_GLEE_EXT_framebuffer_multisample) #define GLEE_MESAX_texture_stack GLeeEnabled(&_GLEE_MESAX_texture_stack) #define GLEE_EXT_timer_query GLeeEnabled(&_GLEE_EXT_timer_query) #define GLEE_EXT_gpu_program_parameters GLeeEnabled(&_GLEE_EXT_gpu_program_parameters) #define GLEE_APPLE_flush_buffer_range GLeeEnabled(&_GLEE_APPLE_flush_buffer_range) #define GLEE_EXT_gpu_shader4 GLeeEnabled(&_GLEE_EXT_gpu_shader4) #define GLEE_EXT_draw_instanced GLeeEnabled(&_GLEE_EXT_draw_instanced) #define GLEE_EXT_packed_float GLeeEnabled(&_GLEE_EXT_packed_float) #define GLEE_EXT_texture_array GLeeEnabled(&_GLEE_EXT_texture_array) #define GLEE_EXT_texture_buffer_object GLeeEnabled(&_GLEE_EXT_texture_buffer_object) #define GLEE_EXT_texture_compression_latc GLeeEnabled(&_GLEE_EXT_texture_compression_latc) #define GLEE_EXT_texture_compression_rgtc GLeeEnabled(&_GLEE_EXT_texture_compression_rgtc) #define GLEE_EXT_texture_shared_exponent GLeeEnabled(&_GLEE_EXT_texture_shared_exponent) #define GLEE_NV_depth_buffer_float GLeeEnabled(&_GLEE_NV_depth_buffer_float) #define GLEE_NV_framebuffer_multisample_coverage GLeeEnabled(&_GLEE_NV_framebuffer_multisample_coverage) #define GLEE_EXT_framebuffer_sRGB GLeeEnabled(&_GLEE_EXT_framebuffer_sRGB) #define GLEE_NV_geometry_shader4 GLeeEnabled(&_GLEE_NV_geometry_shader4) #define GLEE_NV_parameter_buffer_object GLeeEnabled(&_GLEE_NV_parameter_buffer_object) #define GLEE_EXT_draw_buffers2 GLeeEnabled(&_GLEE_EXT_draw_buffers2) #define GLEE_NV_transform_feedback GLeeEnabled(&_GLEE_NV_transform_feedback) #define GLEE_EXT_bindable_uniform GLeeEnabled(&_GLEE_EXT_bindable_uniform) #define GLEE_EXT_texture_integer GLeeEnabled(&_GLEE_EXT_texture_integer) #define GLEE_GREMEDY_frame_terminator GLeeEnabled(&_GLEE_GREMEDY_frame_terminator) #define GLEE_NV_conditional_render GLeeEnabled(&_GLEE_NV_conditional_render) #define GLEE_NV_present_video GLeeEnabled(&_GLEE_NV_present_video) #define GLEE_EXT_transform_feedback GLeeEnabled(&_GLEE_EXT_transform_feedback) #define GLEE_EXT_direct_state_access GLeeEnabled(&_GLEE_EXT_direct_state_access) #define GLEE_EXT_vertex_array_bgra GLeeEnabled(&_GLEE_EXT_vertex_array_bgra) #define GLEE_EXT_texture_swizzle GLeeEnabled(&_GLEE_EXT_texture_swizzle) #define GLEE_NV_explicit_multisample GLeeEnabled(&_GLEE_NV_explicit_multisample) #define GLEE_NV_transform_feedback2 GLeeEnabled(&_GLEE_NV_transform_feedback2) #define GLEE_ATI_meminfo GLeeEnabled(&_GLEE_ATI_meminfo) #define GLEE_AMD_performance_monitor GLeeEnabled(&_GLEE_AMD_performance_monitor) #define GLEE_AMD_texture_texture4 GLeeEnabled(&_GLEE_AMD_texture_texture4) #define GLEE_AMD_vertex_shader_tesselator GLeeEnabled(&_GLEE_AMD_vertex_shader_tesselator) #define GLEE_EXT_provoking_vertex GLeeEnabled(&_GLEE_EXT_provoking_vertex) #define GLEE_EXT_texture_snorm GLeeEnabled(&_GLEE_EXT_texture_snorm) #define GLEE_AMD_draw_buffers_blend GLeeEnabled(&_GLEE_AMD_draw_buffers_blend) #define GLEE_APPLE_texture_range GLeeEnabled(&_GLEE_APPLE_texture_range) #define GLEE_APPLE_float_pixels GLeeEnabled(&_GLEE_APPLE_float_pixels) #define GLEE_APPLE_vertex_program_evaluators GLeeEnabled(&_GLEE_APPLE_vertex_program_evaluators) #define GLEE_APPLE_aux_depth_stencil GLeeEnabled(&_GLEE_APPLE_aux_depth_stencil) #define GLEE_APPLE_object_purgeable GLeeEnabled(&_GLEE_APPLE_object_purgeable) #define GLEE_APPLE_row_bytes GLeeEnabled(&_GLEE_APPLE_row_bytes) #define GLEE_APPLE_rgb_422 GLeeEnabled(&_GLEE_APPLE_rgb_422) #define GLEE_NV_video_capture GLeeEnabled(&_GLEE_NV_video_capture) #define GLEE_NV_copy_image GLeeEnabled(&_GLEE_NV_copy_image) #define GLEE_EXT_separate_shader_objects GLeeEnabled(&_GLEE_EXT_separate_shader_objects) #define GLEE_NV_parameter_buffer_object2 GLeeEnabled(&_GLEE_NV_parameter_buffer_object2) #define GLEE_NV_shader_buffer_load GLeeEnabled(&_GLEE_NV_shader_buffer_load) #define GLEE_NV_vertex_buffer_unified_memory GLeeEnabled(&_GLEE_NV_vertex_buffer_unified_memory) #define GLEE_NV_texture_barrier GLeeEnabled(&_GLEE_NV_texture_barrier) #define GLEE_AMD_shader_stencil_export GLeeEnabled(&_GLEE_AMD_shader_stencil_export) #define GLEE_AMD_seamless_cubemap_per_texture GLeeEnabled(&_GLEE_AMD_seamless_cubemap_per_texture) #define GLEE_AMD_conservative_depth GLeeEnabled(&_GLEE_AMD_conservative_depth) #define GLEE_EXT_shader_image_load_store GLeeEnabled(&_GLEE_EXT_shader_image_load_store) #define GLEE_EXT_vertex_attrib_64bit GLeeEnabled(&_GLEE_EXT_vertex_attrib_64bit) #define GLEE_NV_gpu_program5 GLeeEnabled(&_GLEE_NV_gpu_program5) #define GLEE_NV_gpu_shader5 GLeeEnabled(&_GLEE_NV_gpu_shader5) #define GLEE_NV_shader_buffer_store GLeeEnabled(&_GLEE_NV_shader_buffer_store) #define GLEE_NV_tessellation_program5 GLeeEnabled(&_GLEE_NV_tessellation_program5) #define GLEE_NV_vertex_attrib_integer_64bit GLeeEnabled(&_GLEE_NV_vertex_attrib_integer_64bit) #define GLEE_NV_multisample_coverage GLeeEnabled(&_GLEE_NV_multisample_coverage) #define GLEE_AMD_name_gen_delete GLeeEnabled(&_GLEE_AMD_name_gen_delete) #define GLEE_AMD_debug_output GLeeEnabled(&_GLEE_AMD_debug_output) #define GLEE_AMD_transform_feedback3_lines_triangles GLeeEnabled(&_GLEE_AMD_transform_feedback3_lines_triangles) #define GLEE_AMD_depth_clamp_separate GLeeEnabled(&_GLEE_AMD_depth_clamp_separate) #define GLEE_EXT_texture_sRGB_decode GLeeEnabled(&_GLEE_EXT_texture_sRGB_decode) #define GLEE_NV_texture_multisample GLeeEnabled(&_GLEE_NV_texture_multisample) #define GLEE_AMD_blend_minmax_factor GLeeEnabled(&_GLEE_AMD_blend_minmax_factor) #define GLEE_AMD_sample_positions GLeeEnabled(&_GLEE_AMD_sample_positions) #define GLEE_EXT_x11_sync_object GLeeEnabled(&_GLEE_EXT_x11_sync_object) #define GLEE_AMD_multi_draw_indirect GLeeEnabled(&_GLEE_AMD_multi_draw_indirect) #define GLEE_EXT_framebuffer_multisample_blit_scaled GLeeEnabled(&_GLEE_EXT_framebuffer_multisample_blit_scaled) #define GLEE_NV_path_rendering GLeeEnabled(&_GLEE_NV_path_rendering) #define GLEE_AMD_pinned_memory GLeeEnabled(&_GLEE_AMD_pinned_memory) #define GLEE_AMD_stencil_operation_extended GLeeEnabled(&_GLEE_AMD_stencil_operation_extended) #define GLEE_AMD_vertex_shader_viewport_index GLeeEnabled(&_GLEE_AMD_vertex_shader_viewport_index) #define GLEE_AMD_vertex_shader_layer GLeeEnabled(&_GLEE_AMD_vertex_shader_layer) #define GLEE_NV_bindless_texture GLeeEnabled(&_GLEE_NV_bindless_texture) #define GLEE_NV_shader_atomic_float GLeeEnabled(&_GLEE_NV_shader_atomic_float) #define GLEE_AMD_query_buffer_object GLeeEnabled(&_GLEE_AMD_query_buffer_object) #define GLEE_NV_compute_program5 GLeeEnabled(&_GLEE_NV_compute_program5) #define GLEE_NV_shader_storage_buffer_object GLeeEnabled(&_GLEE_NV_shader_storage_buffer_object) #define GLEE_NV_shader_atomic_counters GLeeEnabled(&_GLEE_NV_shader_atomic_counters) #define GLEE_NV_deep_texture3D GLeeEnabled(&_GLEE_NV_deep_texture3D) #define GLEE_NVX_conditional_render GLeeEnabled(&_GLEE_NVX_conditional_render) #define GLEE_AMD_sparse_texture GLeeEnabled(&_GLEE_AMD_sparse_texture) #define GLEE_AMD_shader_trinary_minmax GLeeEnabled(&_GLEE_AMD_shader_trinary_minmax) #define GLEE_INTEL_map_texture GLeeEnabled(&_GLEE_INTEL_map_texture) #define GLEE_NV_draw_texture GLeeEnabled(&_GLEE_NV_draw_texture) #define GLEE_SGIX_texture_select GLeeEnabled(&_GLEE_SGIX_texture_select) #define GLEE_INGR_blend_func_separate GLeeEnabled(&_GLEE_INGR_blend_func_separate) #define GLEE_SGIX_depth_pass_instrument GLeeEnabled(&_GLEE_SGIX_depth_pass_instrument) #define GLEE_SGIX_igloo_interface GLeeEnabled(&_GLEE_SGIX_igloo_interface) /***************************************************************** * Additional types needed for extensions *****************************************************************/ /* Used for GLSL shader text */ #ifndef GL_VERSION_2_0 typedef char GLchar; #endif #ifdef _MSC_VER #if _MSC_VER >= 1600 #include #else typedef __int32 int32_t; typedef unsigned __int32 uint32_t; typedef __int64 int64_t; typedef unsigned __int64 uint64_t; #endif #else #include #include #endif #ifndef GL_VERSION_1_5 typedef ptrdiff_t GLintptr; typedef ptrdiff_t GLsizeiptr; #endif #ifndef GL_NV_half_float typedef unsigned short GLhalfNV; #endif #ifndef GL_ARB_vertex_buffer_object /* awful hack to work around issue with GLee and Mac OS 10.9's gltypes.h */ #if defined(__APPLE__) typedef long GLintptrARB; typedef long GLsizeiptrARB; #else typedef ptrdiff_t GLintptrARB; typedef ptrdiff_t GLsizeiptrARB; #endif #endif #ifndef GL_ARB_shader_objects #if defined(__APPLE__) typedef void *GLhandleARB; #else typedef int GLhandleARB; #endif typedef char GLcharARB; #endif #ifndef GL_EXT_timer_query typedef signed long long GLint64EXT; typedef unsigned long long GLuint64EXT; #endif #ifndef GL_ARB_sync typedef int64_t GLint64; typedef uint64_t GLuint64; typedef struct __GLsync *GLsync; #endif #ifndef GL_ARB_cl_event /* These incomplete types let us declare types compatible with OpenCL's cl_context and cl_event */ struct _cl_context; struct _cl_event; #endif #ifndef GL_ARB_debug_output typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam); #endif #ifndef GL_AMD_debug_output typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam); #endif #ifndef GL_KHR_debug typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam); #endif #ifndef GL_NV_vdpau_interop typedef GLintptr GLvdpauSurfaceNV; #endif #ifndef GL_OES_fixed_point /* GLint must be 32 bits, a relatively safe assumption on modern CPUs */ typedef GLint GLfixed; #endif /* Platform-specific */ #ifdef _WIN32 /* WGL */ #ifndef WGL_ARB_pbuffer DECLARE_HANDLE(HPBUFFERARB); #endif #ifndef WGL_EXT_pbuffer DECLARE_HANDLE(HPBUFFEREXT); #endif #ifndef WGL_NV_video_output DECLARE_HANDLE(HPVIDEODEV); #endif #ifndef WGL_NV_present_video DECLARE_HANDLE(HVIDEOOUTPUTDEVICENV); #endif #ifndef WGL_NV_gpu_affinity DECLARE_HANDLE(HPGPUNV); DECLARE_HANDLE(HGPUNV); typedef struct _GPU_DEVICE { DWORD cb; CHAR DeviceName[32]; CHAR DeviceString[128]; DWORD Flags; RECT rcVirtualScreen; } GPU_DEVICE, *PGPU_DEVICE; #endif #ifndef WGL_NV_video_capture DECLARE_HANDLE(HVIDEOINPUTDEVICENV); #endif #elif defined(__APPLE__) || defined(__APPLE_CC__) /* Mac OS X */ #else /* GLX */ typedef void (*__GLXextFuncPtr)(void); #ifndef GLX_ARB_get_proc_address #define GLX_ARB_get_proc_address 1 extern __GLXextFuncPtr glXGetProcAddressARB (const GLubyte *); extern void ( * glXGetProcAddressARB (const GLubyte *procName))(void); typedef __GLXextFuncPtr ( * PFNGLXGETPROCADDRESSARBPROC) (const GLubyte *procName); #endif #ifndef GLX_SGIX_fbconfig typedef XID GLXFBConfigIDSGIX; typedef struct __GLXFBConfigRec *GLXFBConfigSGIX; #endif #ifndef GLX_SGIX_pbuffer typedef XID GLXPbufferSGIX; typedef struct { int type; unsigned long serial; Bool send_event; Display *display; GLXDrawable drawable; int event_type; int draw_type; unsigned int mask; int x, y; int width, height; int count; } GLXBufferClobberEventSGIX; #endif #ifndef GLX_SGIX_hyperpipe #define _GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX 80 typedef struct { char pipeName[_GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; int networkId; } GLXHyperpipeNetworkSGIX; typedef struct { char pipeName[_GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; int channel; unsigned int participationType; int timeSlice; } GLXHyperpipeConfigSGIX; typedef struct { char pipeName[_GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; int srcXOrigin; int srcYOrigin; int srcWidth; int srcHeight; int destXOrigin; int destYOrigin; int destWidth; int destHeight; } GLXPipeRect; typedef struct { char pipeName[_GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; int XOrigin; int YOrigin; int maxHeight; int maxWidth; } GLXPipeRectLimits; #endif #ifndef GLX_NV_video_output typedef unsigned int GLXVideoDeviceNV; #endif // GLX_NV_video_output #ifndef GLX_NV_video_capture typedef XID GLXVideoCaptureDeviceNV; #endif // GLX_NV_video_output #endif /* end platform specific */ /* GL_VERSION_1_2 */ #ifndef GL_VERSION_1_2 #define GL_VERSION_1_2 1 #define __GLEE_GL_VERSION_1_2 1 /* Constants */ #define GL_UNSIGNED_BYTE_3_3_2 0x8032 #define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 #define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 #define GL_UNSIGNED_INT_8_8_8_8 0x8035 #define GL_UNSIGNED_INT_10_10_10_2 0x8036 #define GL_TEXTURE_BINDING_3D 0x806A #define GL_PACK_SKIP_IMAGES 0x806B #define GL_PACK_IMAGE_HEIGHT 0x806C #define GL_UNPACK_SKIP_IMAGES 0x806D #define GL_UNPACK_IMAGE_HEIGHT 0x806E #define GL_TEXTURE_3D 0x806F #define GL_PROXY_TEXTURE_3D 0x8070 #define GL_TEXTURE_DEPTH 0x8071 #define GL_TEXTURE_WRAP_R 0x8072 #define GL_MAX_3D_TEXTURE_SIZE 0x8073 #define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 #define GL_UNSIGNED_SHORT_5_6_5 0x8363 #define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 #define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 #define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 #define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 #define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 #define GL_BGR 0x80E0 #define GL_BGRA 0x80E1 #define GL_MAX_ELEMENTS_VERTICES 0x80E8 #define GL_MAX_ELEMENTS_INDICES 0x80E9 #define GL_CLAMP_TO_EDGE 0x812F #define GL_TEXTURE_MIN_LOD 0x813A #define GL_TEXTURE_MAX_LOD 0x813B #define GL_TEXTURE_BASE_LEVEL 0x813C #define GL_TEXTURE_MAX_LEVEL 0x813D #define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 #define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 #define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 #define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 #define GL_ALIASED_LINE_WIDTH_RANGE 0x846E #define GL_RESCALE_NORMAL 0x803A #define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 #define GL_SINGLE_COLOR 0x81F9 #define GL_SEPARATE_SPECULAR_COLOR 0x81FA #define GL_ALIASED_POINT_SIZE_RANGE 0x846D #ifndef GLEE_H_DEFINED_glBlendColor #define GLEE_H_DEFINED_glBlendColor typedef void (APIENTRYP GLEEPFNGLBLENDCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); GLEE_EXTERN GLEEPFNGLBLENDCOLORPROC GLeeFuncPtr_glBlendColor; #define glBlendColor GLeeFuncPtr_glBlendColor #endif #ifndef GLEE_H_DEFINED_glBlendEquation #define GLEE_H_DEFINED_glBlendEquation typedef void (APIENTRYP GLEEPFNGLBLENDEQUATIONPROC) (GLenum mode); GLEE_EXTERN GLEEPFNGLBLENDEQUATIONPROC GLeeFuncPtr_glBlendEquation; #define glBlendEquation GLeeFuncPtr_glBlendEquation #endif #ifndef GLEE_H_DEFINED_glDrawRangeElements #define GLEE_H_DEFINED_glDrawRangeElements typedef void (APIENTRYP GLEEPFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices); GLEE_EXTERN GLEEPFNGLDRAWRANGEELEMENTSPROC GLeeFuncPtr_glDrawRangeElements; #define glDrawRangeElements GLeeFuncPtr_glDrawRangeElements #endif #ifndef GLEE_H_DEFINED_glTexImage3D #define GLEE_H_DEFINED_glTexImage3D typedef void (APIENTRYP GLEEPFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLTEXIMAGE3DPROC GLeeFuncPtr_glTexImage3D; #define glTexImage3D GLeeFuncPtr_glTexImage3D #endif #ifndef GLEE_H_DEFINED_glTexSubImage3D #define GLEE_H_DEFINED_glTexSubImage3D typedef void (APIENTRYP GLEEPFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLTEXSUBIMAGE3DPROC GLeeFuncPtr_glTexSubImage3D; #define glTexSubImage3D GLeeFuncPtr_glTexSubImage3D #endif #ifndef GLEE_H_DEFINED_glCopyTexSubImage3D #define GLEE_H_DEFINED_glCopyTexSubImage3D typedef void (APIENTRYP GLEEPFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLCOPYTEXSUBIMAGE3DPROC GLeeFuncPtr_glCopyTexSubImage3D; #define glCopyTexSubImage3D GLeeFuncPtr_glCopyTexSubImage3D #endif #ifndef GLEE_H_DEFINED_glColorTable #define GLEE_H_DEFINED_glColorTable typedef void (APIENTRYP GLEEPFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * table); GLEE_EXTERN GLEEPFNGLCOLORTABLEPROC GLeeFuncPtr_glColorTable; #define glColorTable GLeeFuncPtr_glColorTable #endif #ifndef GLEE_H_DEFINED_glColorTableParameterfv #define GLEE_H_DEFINED_glColorTableParameterfv typedef void (APIENTRYP GLEEPFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLCOLORTABLEPARAMETERFVPROC GLeeFuncPtr_glColorTableParameterfv; #define glColorTableParameterfv GLeeFuncPtr_glColorTableParameterfv #endif #ifndef GLEE_H_DEFINED_glColorTableParameteriv #define GLEE_H_DEFINED_glColorTableParameteriv typedef void (APIENTRYP GLEEPFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLCOLORTABLEPARAMETERIVPROC GLeeFuncPtr_glColorTableParameteriv; #define glColorTableParameteriv GLeeFuncPtr_glColorTableParameteriv #endif #ifndef GLEE_H_DEFINED_glCopyColorTable #define GLEE_H_DEFINED_glCopyColorTable typedef void (APIENTRYP GLEEPFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); GLEE_EXTERN GLEEPFNGLCOPYCOLORTABLEPROC GLeeFuncPtr_glCopyColorTable; #define glCopyColorTable GLeeFuncPtr_glCopyColorTable #endif #ifndef GLEE_H_DEFINED_glGetColorTable #define GLEE_H_DEFINED_glGetColorTable typedef void (APIENTRYP GLEEPFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, GLvoid * table); GLEE_EXTERN GLEEPFNGLGETCOLORTABLEPROC GLeeFuncPtr_glGetColorTable; #define glGetColorTable GLeeFuncPtr_glGetColorTable #endif #ifndef GLEE_H_DEFINED_glGetColorTableParameterfv #define GLEE_H_DEFINED_glGetColorTableParameterfv typedef void (APIENTRYP GLEEPFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETCOLORTABLEPARAMETERFVPROC GLeeFuncPtr_glGetColorTableParameterfv; #define glGetColorTableParameterfv GLeeFuncPtr_glGetColorTableParameterfv #endif #ifndef GLEE_H_DEFINED_glGetColorTableParameteriv #define GLEE_H_DEFINED_glGetColorTableParameteriv typedef void (APIENTRYP GLEEPFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETCOLORTABLEPARAMETERIVPROC GLeeFuncPtr_glGetColorTableParameteriv; #define glGetColorTableParameteriv GLeeFuncPtr_glGetColorTableParameteriv #endif #ifndef GLEE_H_DEFINED_glColorSubTable #define GLEE_H_DEFINED_glColorSubTable typedef void (APIENTRYP GLEEPFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid * data); GLEE_EXTERN GLEEPFNGLCOLORSUBTABLEPROC GLeeFuncPtr_glColorSubTable; #define glColorSubTable GLeeFuncPtr_glColorSubTable #endif #ifndef GLEE_H_DEFINED_glCopyColorSubTable #define GLEE_H_DEFINED_glCopyColorSubTable typedef void (APIENTRYP GLEEPFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); GLEE_EXTERN GLEEPFNGLCOPYCOLORSUBTABLEPROC GLeeFuncPtr_glCopyColorSubTable; #define glCopyColorSubTable GLeeFuncPtr_glCopyColorSubTable #endif #ifndef GLEE_H_DEFINED_glConvolutionFilter1D #define GLEE_H_DEFINED_glConvolutionFilter1D typedef void (APIENTRYP GLEEPFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * image); GLEE_EXTERN GLEEPFNGLCONVOLUTIONFILTER1DPROC GLeeFuncPtr_glConvolutionFilter1D; #define glConvolutionFilter1D GLeeFuncPtr_glConvolutionFilter1D #endif #ifndef GLEE_H_DEFINED_glConvolutionFilter2D #define GLEE_H_DEFINED_glConvolutionFilter2D typedef void (APIENTRYP GLEEPFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * image); GLEE_EXTERN GLEEPFNGLCONVOLUTIONFILTER2DPROC GLeeFuncPtr_glConvolutionFilter2D; #define glConvolutionFilter2D GLeeFuncPtr_glConvolutionFilter2D #endif #ifndef GLEE_H_DEFINED_glConvolutionParameterf #define GLEE_H_DEFINED_glConvolutionParameterf typedef void (APIENTRYP GLEEPFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params); GLEE_EXTERN GLEEPFNGLCONVOLUTIONPARAMETERFPROC GLeeFuncPtr_glConvolutionParameterf; #define glConvolutionParameterf GLeeFuncPtr_glConvolutionParameterf #endif #ifndef GLEE_H_DEFINED_glConvolutionParameterfv #define GLEE_H_DEFINED_glConvolutionParameterfv typedef void (APIENTRYP GLEEPFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLCONVOLUTIONPARAMETERFVPROC GLeeFuncPtr_glConvolutionParameterfv; #define glConvolutionParameterfv GLeeFuncPtr_glConvolutionParameterfv #endif #ifndef GLEE_H_DEFINED_glConvolutionParameteri #define GLEE_H_DEFINED_glConvolutionParameteri typedef void (APIENTRYP GLEEPFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params); GLEE_EXTERN GLEEPFNGLCONVOLUTIONPARAMETERIPROC GLeeFuncPtr_glConvolutionParameteri; #define glConvolutionParameteri GLeeFuncPtr_glConvolutionParameteri #endif #ifndef GLEE_H_DEFINED_glConvolutionParameteriv #define GLEE_H_DEFINED_glConvolutionParameteriv typedef void (APIENTRYP GLEEPFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLCONVOLUTIONPARAMETERIVPROC GLeeFuncPtr_glConvolutionParameteriv; #define glConvolutionParameteriv GLeeFuncPtr_glConvolutionParameteriv #endif #ifndef GLEE_H_DEFINED_glCopyConvolutionFilter1D #define GLEE_H_DEFINED_glCopyConvolutionFilter1D typedef void (APIENTRYP GLEEPFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); GLEE_EXTERN GLEEPFNGLCOPYCONVOLUTIONFILTER1DPROC GLeeFuncPtr_glCopyConvolutionFilter1D; #define glCopyConvolutionFilter1D GLeeFuncPtr_glCopyConvolutionFilter1D #endif #ifndef GLEE_H_DEFINED_glCopyConvolutionFilter2D #define GLEE_H_DEFINED_glCopyConvolutionFilter2D typedef void (APIENTRYP GLEEPFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLCOPYCONVOLUTIONFILTER2DPROC GLeeFuncPtr_glCopyConvolutionFilter2D; #define glCopyConvolutionFilter2D GLeeFuncPtr_glCopyConvolutionFilter2D #endif #ifndef GLEE_H_DEFINED_glGetConvolutionFilter #define GLEE_H_DEFINED_glGetConvolutionFilter typedef void (APIENTRYP GLEEPFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid * image); GLEE_EXTERN GLEEPFNGLGETCONVOLUTIONFILTERPROC GLeeFuncPtr_glGetConvolutionFilter; #define glGetConvolutionFilter GLeeFuncPtr_glGetConvolutionFilter #endif #ifndef GLEE_H_DEFINED_glGetConvolutionParameterfv #define GLEE_H_DEFINED_glGetConvolutionParameterfv typedef void (APIENTRYP GLEEPFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETCONVOLUTIONPARAMETERFVPROC GLeeFuncPtr_glGetConvolutionParameterfv; #define glGetConvolutionParameterfv GLeeFuncPtr_glGetConvolutionParameterfv #endif #ifndef GLEE_H_DEFINED_glGetConvolutionParameteriv #define GLEE_H_DEFINED_glGetConvolutionParameteriv typedef void (APIENTRYP GLEEPFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETCONVOLUTIONPARAMETERIVPROC GLeeFuncPtr_glGetConvolutionParameteriv; #define glGetConvolutionParameteriv GLeeFuncPtr_glGetConvolutionParameteriv #endif #ifndef GLEE_H_DEFINED_glGetSeparableFilter #define GLEE_H_DEFINED_glGetSeparableFilter typedef void (APIENTRYP GLEEPFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid * row, GLvoid * column, GLvoid * span); GLEE_EXTERN GLEEPFNGLGETSEPARABLEFILTERPROC GLeeFuncPtr_glGetSeparableFilter; #define glGetSeparableFilter GLeeFuncPtr_glGetSeparableFilter #endif #ifndef GLEE_H_DEFINED_glSeparableFilter2D #define GLEE_H_DEFINED_glSeparableFilter2D typedef void (APIENTRYP GLEEPFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * row, const GLvoid * column); GLEE_EXTERN GLEEPFNGLSEPARABLEFILTER2DPROC GLeeFuncPtr_glSeparableFilter2D; #define glSeparableFilter2D GLeeFuncPtr_glSeparableFilter2D #endif #ifndef GLEE_H_DEFINED_glGetHistogram #define GLEE_H_DEFINED_glGetHistogram typedef void (APIENTRYP GLEEPFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values); GLEE_EXTERN GLEEPFNGLGETHISTOGRAMPROC GLeeFuncPtr_glGetHistogram; #define glGetHistogram GLeeFuncPtr_glGetHistogram #endif #ifndef GLEE_H_DEFINED_glGetHistogramParameterfv #define GLEE_H_DEFINED_glGetHistogramParameterfv typedef void (APIENTRYP GLEEPFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETHISTOGRAMPARAMETERFVPROC GLeeFuncPtr_glGetHistogramParameterfv; #define glGetHistogramParameterfv GLeeFuncPtr_glGetHistogramParameterfv #endif #ifndef GLEE_H_DEFINED_glGetHistogramParameteriv #define GLEE_H_DEFINED_glGetHistogramParameteriv typedef void (APIENTRYP GLEEPFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETHISTOGRAMPARAMETERIVPROC GLeeFuncPtr_glGetHistogramParameteriv; #define glGetHistogramParameteriv GLeeFuncPtr_glGetHistogramParameteriv #endif #ifndef GLEE_H_DEFINED_glGetMinmax #define GLEE_H_DEFINED_glGetMinmax typedef void (APIENTRYP GLEEPFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values); GLEE_EXTERN GLEEPFNGLGETMINMAXPROC GLeeFuncPtr_glGetMinmax; #define glGetMinmax GLeeFuncPtr_glGetMinmax #endif #ifndef GLEE_H_DEFINED_glGetMinmaxParameterfv #define GLEE_H_DEFINED_glGetMinmaxParameterfv typedef void (APIENTRYP GLEEPFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETMINMAXPARAMETERFVPROC GLeeFuncPtr_glGetMinmaxParameterfv; #define glGetMinmaxParameterfv GLeeFuncPtr_glGetMinmaxParameterfv #endif #ifndef GLEE_H_DEFINED_glGetMinmaxParameteriv #define GLEE_H_DEFINED_glGetMinmaxParameteriv typedef void (APIENTRYP GLEEPFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETMINMAXPARAMETERIVPROC GLeeFuncPtr_glGetMinmaxParameteriv; #define glGetMinmaxParameteriv GLeeFuncPtr_glGetMinmaxParameteriv #endif #ifndef GLEE_H_DEFINED_glHistogram #define GLEE_H_DEFINED_glHistogram typedef void (APIENTRYP GLEEPFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); GLEE_EXTERN GLEEPFNGLHISTOGRAMPROC GLeeFuncPtr_glHistogram; #define glHistogram GLeeFuncPtr_glHistogram #endif #ifndef GLEE_H_DEFINED_glMinmax #define GLEE_H_DEFINED_glMinmax typedef void (APIENTRYP GLEEPFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink); GLEE_EXTERN GLEEPFNGLMINMAXPROC GLeeFuncPtr_glMinmax; #define glMinmax GLeeFuncPtr_glMinmax #endif #ifndef GLEE_H_DEFINED_glResetHistogram #define GLEE_H_DEFINED_glResetHistogram typedef void (APIENTRYP GLEEPFNGLRESETHISTOGRAMPROC) (GLenum target); GLEE_EXTERN GLEEPFNGLRESETHISTOGRAMPROC GLeeFuncPtr_glResetHistogram; #define glResetHistogram GLeeFuncPtr_glResetHistogram #endif #ifndef GLEE_H_DEFINED_glResetMinmax #define GLEE_H_DEFINED_glResetMinmax typedef void (APIENTRYP GLEEPFNGLRESETMINMAXPROC) (GLenum target); GLEE_EXTERN GLEEPFNGLRESETMINMAXPROC GLeeFuncPtr_glResetMinmax; #define glResetMinmax GLeeFuncPtr_glResetMinmax #endif #endif /* GL_ARB_imaging */ #ifndef GL_ARB_imaging #define GL_ARB_imaging 1 #define __GLEE_GL_ARB_imaging 1 /* Constants */ #define GL_CONSTANT_COLOR 0x8001 #define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 #define GL_CONSTANT_ALPHA 0x8003 #define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 #define GL_BLEND_COLOR 0x8005 #define GL_FUNC_ADD 0x8006 #define GL_MIN 0x8007 #define GL_MAX 0x8008 #define GL_BLEND_EQUATION 0x8009 #define GL_FUNC_SUBTRACT 0x800A #define GL_FUNC_REVERSE_SUBTRACT 0x800B #define GL_CONVOLUTION_1D 0x8010 #define GL_CONVOLUTION_2D 0x8011 #define GL_SEPARABLE_2D 0x8012 #define GL_CONVOLUTION_BORDER_MODE 0x8013 #define GL_CONVOLUTION_FILTER_SCALE 0x8014 #define GL_CONVOLUTION_FILTER_BIAS 0x8015 #define GL_REDUCE 0x8016 #define GL_CONVOLUTION_FORMAT 0x8017 #define GL_CONVOLUTION_WIDTH 0x8018 #define GL_CONVOLUTION_HEIGHT 0x8019 #define GL_MAX_CONVOLUTION_WIDTH 0x801A #define GL_MAX_CONVOLUTION_HEIGHT 0x801B #define GL_POST_CONVOLUTION_RED_SCALE 0x801C #define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D #define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E #define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F #define GL_POST_CONVOLUTION_RED_BIAS 0x8020 #define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 #define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 #define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 #define GL_HISTOGRAM 0x8024 #define GL_PROXY_HISTOGRAM 0x8025 #define GL_HISTOGRAM_WIDTH 0x8026 #define GL_HISTOGRAM_FORMAT 0x8027 #define GL_HISTOGRAM_RED_SIZE 0x8028 #define GL_HISTOGRAM_GREEN_SIZE 0x8029 #define GL_HISTOGRAM_BLUE_SIZE 0x802A #define GL_HISTOGRAM_ALPHA_SIZE 0x802B #define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C #define GL_HISTOGRAM_SINK 0x802D #define GL_MINMAX 0x802E #define GL_MINMAX_FORMAT 0x802F #define GL_MINMAX_SINK 0x8030 #define GL_TABLE_TOO_LARGE 0x8031 #define GL_COLOR_MATRIX 0x80B1 #define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 #define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 #define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 #define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 #define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 #define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 #define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 #define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 #define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA #define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB #define GL_COLOR_TABLE 0x80D0 #define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 #define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 #define GL_PROXY_COLOR_TABLE 0x80D3 #define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 #define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 #define GL_COLOR_TABLE_SCALE 0x80D6 #define GL_COLOR_TABLE_BIAS 0x80D7 #define GL_COLOR_TABLE_FORMAT 0x80D8 #define GL_COLOR_TABLE_WIDTH 0x80D9 #define GL_COLOR_TABLE_RED_SIZE 0x80DA #define GL_COLOR_TABLE_GREEN_SIZE 0x80DB #define GL_COLOR_TABLE_BLUE_SIZE 0x80DC #define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD #define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE #define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF #define GL_CONSTANT_BORDER 0x8151 #define GL_REPLICATE_BORDER 0x8153 #define GL_CONVOLUTION_BORDER_COLOR 0x8154 #endif /* GL_VERSION_1_3 */ #ifndef GL_VERSION_1_3 #define GL_VERSION_1_3 1 #define __GLEE_GL_VERSION_1_3 1 /* Constants */ #define GL_TEXTURE0 0x84C0 #define GL_TEXTURE1 0x84C1 #define GL_TEXTURE2 0x84C2 #define GL_TEXTURE3 0x84C3 #define GL_TEXTURE4 0x84C4 #define GL_TEXTURE5 0x84C5 #define GL_TEXTURE6 0x84C6 #define GL_TEXTURE7 0x84C7 #define GL_TEXTURE8 0x84C8 #define GL_TEXTURE9 0x84C9 #define GL_TEXTURE10 0x84CA #define GL_TEXTURE11 0x84CB #define GL_TEXTURE12 0x84CC #define GL_TEXTURE13 0x84CD #define GL_TEXTURE14 0x84CE #define GL_TEXTURE15 0x84CF #define GL_TEXTURE16 0x84D0 #define GL_TEXTURE17 0x84D1 #define GL_TEXTURE18 0x84D2 #define GL_TEXTURE19 0x84D3 #define GL_TEXTURE20 0x84D4 #define GL_TEXTURE21 0x84D5 #define GL_TEXTURE22 0x84D6 #define GL_TEXTURE23 0x84D7 #define GL_TEXTURE24 0x84D8 #define GL_TEXTURE25 0x84D9 #define GL_TEXTURE26 0x84DA #define GL_TEXTURE27 0x84DB #define GL_TEXTURE28 0x84DC #define GL_TEXTURE29 0x84DD #define GL_TEXTURE30 0x84DE #define GL_TEXTURE31 0x84DF #define GL_ACTIVE_TEXTURE 0x84E0 #define GL_MULTISAMPLE 0x809D #define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E #define GL_SAMPLE_ALPHA_TO_ONE 0x809F #define GL_SAMPLE_COVERAGE 0x80A0 #define GL_SAMPLE_BUFFERS 0x80A8 #define GL_SAMPLES 0x80A9 #define GL_SAMPLE_COVERAGE_VALUE 0x80AA #define GL_SAMPLE_COVERAGE_INVERT 0x80AB #define GL_TEXTURE_CUBE_MAP 0x8513 #define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A #define GL_PROXY_TEXTURE_CUBE_MAP 0x851B #define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C #define GL_COMPRESSED_RGB 0x84ED #define GL_COMPRESSED_RGBA 0x84EE #define GL_TEXTURE_COMPRESSION_HINT 0x84EF #define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 #define GL_TEXTURE_COMPRESSED 0x86A1 #define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 #define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 #define GL_CLAMP_TO_BORDER 0x812D #define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 #define GL_MAX_TEXTURE_UNITS 0x84E2 #define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 #define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 #define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 #define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 #define GL_MULTISAMPLE_BIT 0x20000000 #define GL_NORMAL_MAP 0x8511 #define GL_REFLECTION_MAP 0x8512 #define GL_COMPRESSED_ALPHA 0x84E9 #define GL_COMPRESSED_LUMINANCE 0x84EA #define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB #define GL_COMPRESSED_INTENSITY 0x84EC #define GL_COMBINE 0x8570 #define GL_COMBINE_RGB 0x8571 #define GL_COMBINE_ALPHA 0x8572 #define GL_SOURCE0_RGB 0x8580 #define GL_SOURCE1_RGB 0x8581 #define GL_SOURCE2_RGB 0x8582 #define GL_SOURCE0_ALPHA 0x8588 #define GL_SOURCE1_ALPHA 0x8589 #define GL_SOURCE2_ALPHA 0x858A #define GL_OPERAND0_RGB 0x8590 #define GL_OPERAND1_RGB 0x8591 #define GL_OPERAND2_RGB 0x8592 #define GL_OPERAND0_ALPHA 0x8598 #define GL_OPERAND1_ALPHA 0x8599 #define GL_OPERAND2_ALPHA 0x859A #define GL_RGB_SCALE 0x8573 #define GL_ADD_SIGNED 0x8574 #define GL_INTERPOLATE 0x8575 #define GL_SUBTRACT 0x84E7 #define GL_CONSTANT 0x8576 #define GL_PRIMARY_COLOR 0x8577 #define GL_PREVIOUS 0x8578 #define GL_DOT3_RGB 0x86AE #define GL_DOT3_RGBA 0x86AF #ifndef GLEE_H_DEFINED_glActiveTexture #define GLEE_H_DEFINED_glActiveTexture typedef void (APIENTRYP GLEEPFNGLACTIVETEXTUREPROC) (GLenum texture); GLEE_EXTERN GLEEPFNGLACTIVETEXTUREPROC GLeeFuncPtr_glActiveTexture; #define glActiveTexture GLeeFuncPtr_glActiveTexture #endif #ifndef GLEE_H_DEFINED_glSampleCoverage #define GLEE_H_DEFINED_glSampleCoverage typedef void (APIENTRYP GLEEPFNGLSAMPLECOVERAGEPROC) (GLfloat value, GLboolean invert); GLEE_EXTERN GLEEPFNGLSAMPLECOVERAGEPROC GLeeFuncPtr_glSampleCoverage; #define glSampleCoverage GLeeFuncPtr_glSampleCoverage #endif #ifndef GLEE_H_DEFINED_glCompressedTexImage3D #define GLEE_H_DEFINED_glCompressedTexImage3D typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * data); GLEE_EXTERN GLEEPFNGLCOMPRESSEDTEXIMAGE3DPROC GLeeFuncPtr_glCompressedTexImage3D; #define glCompressedTexImage3D GLeeFuncPtr_glCompressedTexImage3D #endif #ifndef GLEE_H_DEFINED_glCompressedTexImage2D #define GLEE_H_DEFINED_glCompressedTexImage2D typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data); GLEE_EXTERN GLEEPFNGLCOMPRESSEDTEXIMAGE2DPROC GLeeFuncPtr_glCompressedTexImage2D; #define glCompressedTexImage2D GLeeFuncPtr_glCompressedTexImage2D #endif #ifndef GLEE_H_DEFINED_glCompressedTexImage1D #define GLEE_H_DEFINED_glCompressedTexImage1D typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid * data); GLEE_EXTERN GLEEPFNGLCOMPRESSEDTEXIMAGE1DPROC GLeeFuncPtr_glCompressedTexImage1D; #define glCompressedTexImage1D GLeeFuncPtr_glCompressedTexImage1D #endif #ifndef GLEE_H_DEFINED_glCompressedTexSubImage3D #define GLEE_H_DEFINED_glCompressedTexSubImage3D typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * data); GLEE_EXTERN GLEEPFNGLCOMPRESSEDTEXSUBIMAGE3DPROC GLeeFuncPtr_glCompressedTexSubImage3D; #define glCompressedTexSubImage3D GLeeFuncPtr_glCompressedTexSubImage3D #endif #ifndef GLEE_H_DEFINED_glCompressedTexSubImage2D #define GLEE_H_DEFINED_glCompressedTexSubImage2D typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data); GLEE_EXTERN GLEEPFNGLCOMPRESSEDTEXSUBIMAGE2DPROC GLeeFuncPtr_glCompressedTexSubImage2D; #define glCompressedTexSubImage2D GLeeFuncPtr_glCompressedTexSubImage2D #endif #ifndef GLEE_H_DEFINED_glCompressedTexSubImage1D #define GLEE_H_DEFINED_glCompressedTexSubImage1D typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * data); GLEE_EXTERN GLEEPFNGLCOMPRESSEDTEXSUBIMAGE1DPROC GLeeFuncPtr_glCompressedTexSubImage1D; #define glCompressedTexSubImage1D GLeeFuncPtr_glCompressedTexSubImage1D #endif #ifndef GLEE_H_DEFINED_glGetCompressedTexImage #define GLEE_H_DEFINED_glGetCompressedTexImage typedef void (APIENTRYP GLEEPFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, GLvoid * img); GLEE_EXTERN GLEEPFNGLGETCOMPRESSEDTEXIMAGEPROC GLeeFuncPtr_glGetCompressedTexImage; #define glGetCompressedTexImage GLeeFuncPtr_glGetCompressedTexImage #endif #ifndef GLEE_H_DEFINED_glClientActiveTexture #define GLEE_H_DEFINED_glClientActiveTexture typedef void (APIENTRYP GLEEPFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture); GLEE_EXTERN GLEEPFNGLCLIENTACTIVETEXTUREPROC GLeeFuncPtr_glClientActiveTexture; #define glClientActiveTexture GLeeFuncPtr_glClientActiveTexture #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1d #define GLEE_H_DEFINED_glMultiTexCoord1d typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1DPROC GLeeFuncPtr_glMultiTexCoord1d; #define glMultiTexCoord1d GLeeFuncPtr_glMultiTexCoord1d #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1dv #define GLEE_H_DEFINED_glMultiTexCoord1dv typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1DVPROC GLeeFuncPtr_glMultiTexCoord1dv; #define glMultiTexCoord1dv GLeeFuncPtr_glMultiTexCoord1dv #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1f #define GLEE_H_DEFINED_glMultiTexCoord1f typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1FPROC GLeeFuncPtr_glMultiTexCoord1f; #define glMultiTexCoord1f GLeeFuncPtr_glMultiTexCoord1f #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1fv #define GLEE_H_DEFINED_glMultiTexCoord1fv typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1FVPROC GLeeFuncPtr_glMultiTexCoord1fv; #define glMultiTexCoord1fv GLeeFuncPtr_glMultiTexCoord1fv #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1i #define GLEE_H_DEFINED_glMultiTexCoord1i typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1IPROC GLeeFuncPtr_glMultiTexCoord1i; #define glMultiTexCoord1i GLeeFuncPtr_glMultiTexCoord1i #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1iv #define GLEE_H_DEFINED_glMultiTexCoord1iv typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1IVPROC GLeeFuncPtr_glMultiTexCoord1iv; #define glMultiTexCoord1iv GLeeFuncPtr_glMultiTexCoord1iv #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1s #define GLEE_H_DEFINED_glMultiTexCoord1s typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1SPROC GLeeFuncPtr_glMultiTexCoord1s; #define glMultiTexCoord1s GLeeFuncPtr_glMultiTexCoord1s #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1sv #define GLEE_H_DEFINED_glMultiTexCoord1sv typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1SVPROC GLeeFuncPtr_glMultiTexCoord1sv; #define glMultiTexCoord1sv GLeeFuncPtr_glMultiTexCoord1sv #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2d #define GLEE_H_DEFINED_glMultiTexCoord2d typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2DPROC GLeeFuncPtr_glMultiTexCoord2d; #define glMultiTexCoord2d GLeeFuncPtr_glMultiTexCoord2d #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2dv #define GLEE_H_DEFINED_glMultiTexCoord2dv typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2DVPROC GLeeFuncPtr_glMultiTexCoord2dv; #define glMultiTexCoord2dv GLeeFuncPtr_glMultiTexCoord2dv #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2f #define GLEE_H_DEFINED_glMultiTexCoord2f typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2FPROC GLeeFuncPtr_glMultiTexCoord2f; #define glMultiTexCoord2f GLeeFuncPtr_glMultiTexCoord2f #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2fv #define GLEE_H_DEFINED_glMultiTexCoord2fv typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2FVPROC GLeeFuncPtr_glMultiTexCoord2fv; #define glMultiTexCoord2fv GLeeFuncPtr_glMultiTexCoord2fv #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2i #define GLEE_H_DEFINED_glMultiTexCoord2i typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2IPROC GLeeFuncPtr_glMultiTexCoord2i; #define glMultiTexCoord2i GLeeFuncPtr_glMultiTexCoord2i #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2iv #define GLEE_H_DEFINED_glMultiTexCoord2iv typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2IVPROC GLeeFuncPtr_glMultiTexCoord2iv; #define glMultiTexCoord2iv GLeeFuncPtr_glMultiTexCoord2iv #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2s #define GLEE_H_DEFINED_glMultiTexCoord2s typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2SPROC GLeeFuncPtr_glMultiTexCoord2s; #define glMultiTexCoord2s GLeeFuncPtr_glMultiTexCoord2s #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2sv #define GLEE_H_DEFINED_glMultiTexCoord2sv typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2SVPROC GLeeFuncPtr_glMultiTexCoord2sv; #define glMultiTexCoord2sv GLeeFuncPtr_glMultiTexCoord2sv #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3d #define GLEE_H_DEFINED_glMultiTexCoord3d typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3DPROC GLeeFuncPtr_glMultiTexCoord3d; #define glMultiTexCoord3d GLeeFuncPtr_glMultiTexCoord3d #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3dv #define GLEE_H_DEFINED_glMultiTexCoord3dv typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3DVPROC GLeeFuncPtr_glMultiTexCoord3dv; #define glMultiTexCoord3dv GLeeFuncPtr_glMultiTexCoord3dv #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3f #define GLEE_H_DEFINED_glMultiTexCoord3f typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3FPROC GLeeFuncPtr_glMultiTexCoord3f; #define glMultiTexCoord3f GLeeFuncPtr_glMultiTexCoord3f #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3fv #define GLEE_H_DEFINED_glMultiTexCoord3fv typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3FVPROC GLeeFuncPtr_glMultiTexCoord3fv; #define glMultiTexCoord3fv GLeeFuncPtr_glMultiTexCoord3fv #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3i #define GLEE_H_DEFINED_glMultiTexCoord3i typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3IPROC GLeeFuncPtr_glMultiTexCoord3i; #define glMultiTexCoord3i GLeeFuncPtr_glMultiTexCoord3i #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3iv #define GLEE_H_DEFINED_glMultiTexCoord3iv typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3IVPROC GLeeFuncPtr_glMultiTexCoord3iv; #define glMultiTexCoord3iv GLeeFuncPtr_glMultiTexCoord3iv #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3s #define GLEE_H_DEFINED_glMultiTexCoord3s typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3SPROC GLeeFuncPtr_glMultiTexCoord3s; #define glMultiTexCoord3s GLeeFuncPtr_glMultiTexCoord3s #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3sv #define GLEE_H_DEFINED_glMultiTexCoord3sv typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3SVPROC GLeeFuncPtr_glMultiTexCoord3sv; #define glMultiTexCoord3sv GLeeFuncPtr_glMultiTexCoord3sv #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4d #define GLEE_H_DEFINED_glMultiTexCoord4d typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4DPROC GLeeFuncPtr_glMultiTexCoord4d; #define glMultiTexCoord4d GLeeFuncPtr_glMultiTexCoord4d #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4dv #define GLEE_H_DEFINED_glMultiTexCoord4dv typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4DVPROC GLeeFuncPtr_glMultiTexCoord4dv; #define glMultiTexCoord4dv GLeeFuncPtr_glMultiTexCoord4dv #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4f #define GLEE_H_DEFINED_glMultiTexCoord4f typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4FPROC GLeeFuncPtr_glMultiTexCoord4f; #define glMultiTexCoord4f GLeeFuncPtr_glMultiTexCoord4f #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4fv #define GLEE_H_DEFINED_glMultiTexCoord4fv typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4FVPROC GLeeFuncPtr_glMultiTexCoord4fv; #define glMultiTexCoord4fv GLeeFuncPtr_glMultiTexCoord4fv #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4i #define GLEE_H_DEFINED_glMultiTexCoord4i typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4IPROC GLeeFuncPtr_glMultiTexCoord4i; #define glMultiTexCoord4i GLeeFuncPtr_glMultiTexCoord4i #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4iv #define GLEE_H_DEFINED_glMultiTexCoord4iv typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4IVPROC GLeeFuncPtr_glMultiTexCoord4iv; #define glMultiTexCoord4iv GLeeFuncPtr_glMultiTexCoord4iv #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4s #define GLEE_H_DEFINED_glMultiTexCoord4s typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4SPROC GLeeFuncPtr_glMultiTexCoord4s; #define glMultiTexCoord4s GLeeFuncPtr_glMultiTexCoord4s #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4sv #define GLEE_H_DEFINED_glMultiTexCoord4sv typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4SVPROC GLeeFuncPtr_glMultiTexCoord4sv; #define glMultiTexCoord4sv GLeeFuncPtr_glMultiTexCoord4sv #endif #ifndef GLEE_H_DEFINED_glLoadTransposeMatrixf #define GLEE_H_DEFINED_glLoadTransposeMatrixf typedef void (APIENTRYP GLEEPFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat * m); GLEE_EXTERN GLEEPFNGLLOADTRANSPOSEMATRIXFPROC GLeeFuncPtr_glLoadTransposeMatrixf; #define glLoadTransposeMatrixf GLeeFuncPtr_glLoadTransposeMatrixf #endif #ifndef GLEE_H_DEFINED_glLoadTransposeMatrixd #define GLEE_H_DEFINED_glLoadTransposeMatrixd typedef void (APIENTRYP GLEEPFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble * m); GLEE_EXTERN GLEEPFNGLLOADTRANSPOSEMATRIXDPROC GLeeFuncPtr_glLoadTransposeMatrixd; #define glLoadTransposeMatrixd GLeeFuncPtr_glLoadTransposeMatrixd #endif #ifndef GLEE_H_DEFINED_glMultTransposeMatrixf #define GLEE_H_DEFINED_glMultTransposeMatrixf typedef void (APIENTRYP GLEEPFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat * m); GLEE_EXTERN GLEEPFNGLMULTTRANSPOSEMATRIXFPROC GLeeFuncPtr_glMultTransposeMatrixf; #define glMultTransposeMatrixf GLeeFuncPtr_glMultTransposeMatrixf #endif #ifndef GLEE_H_DEFINED_glMultTransposeMatrixd #define GLEE_H_DEFINED_glMultTransposeMatrixd typedef void (APIENTRYP GLEEPFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble * m); GLEE_EXTERN GLEEPFNGLMULTTRANSPOSEMATRIXDPROC GLeeFuncPtr_glMultTransposeMatrixd; #define glMultTransposeMatrixd GLeeFuncPtr_glMultTransposeMatrixd #endif #endif /* GL_VERSION_1_4 */ #ifndef GL_VERSION_1_4 #define GL_VERSION_1_4 1 #define __GLEE_GL_VERSION_1_4 1 /* Constants */ #define GL_BLEND_DST_RGB 0x80C8 #define GL_BLEND_SRC_RGB 0x80C9 #define GL_BLEND_DST_ALPHA 0x80CA #define GL_BLEND_SRC_ALPHA 0x80CB #define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 #define GL_DEPTH_COMPONENT16 0x81A5 #define GL_DEPTH_COMPONENT24 0x81A6 #define GL_DEPTH_COMPONENT32 0x81A7 #define GL_MIRRORED_REPEAT 0x8370 #define GL_MAX_TEXTURE_LOD_BIAS 0x84FD #define GL_TEXTURE_LOD_BIAS 0x8501 #define GL_INCR_WRAP 0x8507 #define GL_DECR_WRAP 0x8508 #define GL_TEXTURE_DEPTH_SIZE 0x884A #define GL_TEXTURE_COMPARE_MODE 0x884C #define GL_TEXTURE_COMPARE_FUNC 0x884D #define GL_POINT_SIZE_MIN 0x8126 #define GL_POINT_SIZE_MAX 0x8127 #define GL_POINT_DISTANCE_ATTENUATION 0x8129 #define GL_GENERATE_MIPMAP 0x8191 #define GL_GENERATE_MIPMAP_HINT 0x8192 #define GL_FOG_COORDINATE_SOURCE 0x8450 #define GL_FOG_COORDINATE 0x8451 #define GL_FRAGMENT_DEPTH 0x8452 #define GL_CURRENT_FOG_COORDINATE 0x8453 #define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454 #define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455 #define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456 #define GL_FOG_COORDINATE_ARRAY 0x8457 #define GL_COLOR_SUM 0x8458 #define GL_CURRENT_SECONDARY_COLOR 0x8459 #define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A #define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B #define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C #define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D #define GL_SECONDARY_COLOR_ARRAY 0x845E #define GL_TEXTURE_FILTER_CONTROL 0x8500 #define GL_DEPTH_TEXTURE_MODE 0x884B #define GL_COMPARE_R_TO_TEXTURE 0x884E #ifndef GLEE_H_DEFINED_glBlendFuncSeparate #define GLEE_H_DEFINED_glBlendFuncSeparate typedef void (APIENTRYP GLEEPFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); GLEE_EXTERN GLEEPFNGLBLENDFUNCSEPARATEPROC GLeeFuncPtr_glBlendFuncSeparate; #define glBlendFuncSeparate GLeeFuncPtr_glBlendFuncSeparate #endif #ifndef GLEE_H_DEFINED_glMultiDrawArrays #define GLEE_H_DEFINED_glMultiDrawArrays typedef void (APIENTRYP GLEEPFNGLMULTIDRAWARRAYSPROC) (GLenum mode, const GLint * first, const GLsizei * count, GLsizei drawcount); GLEE_EXTERN GLEEPFNGLMULTIDRAWARRAYSPROC GLeeFuncPtr_glMultiDrawArrays; #define glMultiDrawArrays GLeeFuncPtr_glMultiDrawArrays #endif #ifndef GLEE_H_DEFINED_glMultiDrawElements #define GLEE_H_DEFINED_glMultiDrawElements typedef void (APIENTRYP GLEEPFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei * count, GLenum type, const GLvoid* const * indices, GLsizei drawcount); GLEE_EXTERN GLEEPFNGLMULTIDRAWELEMENTSPROC GLeeFuncPtr_glMultiDrawElements; #define glMultiDrawElements GLeeFuncPtr_glMultiDrawElements #endif #ifndef GLEE_H_DEFINED_glPointParameterf #define GLEE_H_DEFINED_glPointParameterf typedef void (APIENTRYP GLEEPFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLPOINTPARAMETERFPROC GLeeFuncPtr_glPointParameterf; #define glPointParameterf GLeeFuncPtr_glPointParameterf #endif #ifndef GLEE_H_DEFINED_glPointParameterfv #define GLEE_H_DEFINED_glPointParameterfv typedef void (APIENTRYP GLEEPFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLPOINTPARAMETERFVPROC GLeeFuncPtr_glPointParameterfv; #define glPointParameterfv GLeeFuncPtr_glPointParameterfv #endif #ifndef GLEE_H_DEFINED_glPointParameteri #define GLEE_H_DEFINED_glPointParameteri typedef void (APIENTRYP GLEEPFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLPOINTPARAMETERIPROC GLeeFuncPtr_glPointParameteri; #define glPointParameteri GLeeFuncPtr_glPointParameteri #endif #ifndef GLEE_H_DEFINED_glPointParameteriv #define GLEE_H_DEFINED_glPointParameteriv typedef void (APIENTRYP GLEEPFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLPOINTPARAMETERIVPROC GLeeFuncPtr_glPointParameteriv; #define glPointParameteriv GLeeFuncPtr_glPointParameteriv #endif #ifndef GLEE_H_DEFINED_glFogCoordf #define GLEE_H_DEFINED_glFogCoordf typedef void (APIENTRYP GLEEPFNGLFOGCOORDFPROC) (GLfloat coord); GLEE_EXTERN GLEEPFNGLFOGCOORDFPROC GLeeFuncPtr_glFogCoordf; #define glFogCoordf GLeeFuncPtr_glFogCoordf #endif #ifndef GLEE_H_DEFINED_glFogCoordfv #define GLEE_H_DEFINED_glFogCoordfv typedef void (APIENTRYP GLEEPFNGLFOGCOORDFVPROC) (const GLfloat * coord); GLEE_EXTERN GLEEPFNGLFOGCOORDFVPROC GLeeFuncPtr_glFogCoordfv; #define glFogCoordfv GLeeFuncPtr_glFogCoordfv #endif #ifndef GLEE_H_DEFINED_glFogCoordd #define GLEE_H_DEFINED_glFogCoordd typedef void (APIENTRYP GLEEPFNGLFOGCOORDDPROC) (GLdouble coord); GLEE_EXTERN GLEEPFNGLFOGCOORDDPROC GLeeFuncPtr_glFogCoordd; #define glFogCoordd GLeeFuncPtr_glFogCoordd #endif #ifndef GLEE_H_DEFINED_glFogCoorddv #define GLEE_H_DEFINED_glFogCoorddv typedef void (APIENTRYP GLEEPFNGLFOGCOORDDVPROC) (const GLdouble * coord); GLEE_EXTERN GLEEPFNGLFOGCOORDDVPROC GLeeFuncPtr_glFogCoorddv; #define glFogCoorddv GLeeFuncPtr_glFogCoorddv #endif #ifndef GLEE_H_DEFINED_glFogCoordPointer #define GLEE_H_DEFINED_glFogCoordPointer typedef void (APIENTRYP GLEEPFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLFOGCOORDPOINTERPROC GLeeFuncPtr_glFogCoordPointer; #define glFogCoordPointer GLeeFuncPtr_glFogCoordPointer #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3b #define GLEE_H_DEFINED_glSecondaryColor3b typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3BPROC GLeeFuncPtr_glSecondaryColor3b; #define glSecondaryColor3b GLeeFuncPtr_glSecondaryColor3b #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3bv #define GLEE_H_DEFINED_glSecondaryColor3bv typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3BVPROC) (const GLbyte * v); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3BVPROC GLeeFuncPtr_glSecondaryColor3bv; #define glSecondaryColor3bv GLeeFuncPtr_glSecondaryColor3bv #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3d #define GLEE_H_DEFINED_glSecondaryColor3d typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3DPROC GLeeFuncPtr_glSecondaryColor3d; #define glSecondaryColor3d GLeeFuncPtr_glSecondaryColor3d #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3dv #define GLEE_H_DEFINED_glSecondaryColor3dv typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3DVPROC) (const GLdouble * v); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3DVPROC GLeeFuncPtr_glSecondaryColor3dv; #define glSecondaryColor3dv GLeeFuncPtr_glSecondaryColor3dv #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3f #define GLEE_H_DEFINED_glSecondaryColor3f typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3FPROC) (GLfloat red, GLfloat green, GLfloat blue); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3FPROC GLeeFuncPtr_glSecondaryColor3f; #define glSecondaryColor3f GLeeFuncPtr_glSecondaryColor3f #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3fv #define GLEE_H_DEFINED_glSecondaryColor3fv typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3FVPROC) (const GLfloat * v); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3FVPROC GLeeFuncPtr_glSecondaryColor3fv; #define glSecondaryColor3fv GLeeFuncPtr_glSecondaryColor3fv #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3i #define GLEE_H_DEFINED_glSecondaryColor3i typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3IPROC) (GLint red, GLint green, GLint blue); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3IPROC GLeeFuncPtr_glSecondaryColor3i; #define glSecondaryColor3i GLeeFuncPtr_glSecondaryColor3i #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3iv #define GLEE_H_DEFINED_glSecondaryColor3iv typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3IVPROC) (const GLint * v); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3IVPROC GLeeFuncPtr_glSecondaryColor3iv; #define glSecondaryColor3iv GLeeFuncPtr_glSecondaryColor3iv #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3s #define GLEE_H_DEFINED_glSecondaryColor3s typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3SPROC) (GLshort red, GLshort green, GLshort blue); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3SPROC GLeeFuncPtr_glSecondaryColor3s; #define glSecondaryColor3s GLeeFuncPtr_glSecondaryColor3s #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3sv #define GLEE_H_DEFINED_glSecondaryColor3sv typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3SVPROC) (const GLshort * v); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3SVPROC GLeeFuncPtr_glSecondaryColor3sv; #define glSecondaryColor3sv GLeeFuncPtr_glSecondaryColor3sv #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3ub #define GLEE_H_DEFINED_glSecondaryColor3ub typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3UBPROC) (GLubyte red, GLubyte green, GLubyte blue); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3UBPROC GLeeFuncPtr_glSecondaryColor3ub; #define glSecondaryColor3ub GLeeFuncPtr_glSecondaryColor3ub #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3ubv #define GLEE_H_DEFINED_glSecondaryColor3ubv typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3UBVPROC) (const GLubyte * v); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3UBVPROC GLeeFuncPtr_glSecondaryColor3ubv; #define glSecondaryColor3ubv GLeeFuncPtr_glSecondaryColor3ubv #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3ui #define GLEE_H_DEFINED_glSecondaryColor3ui typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3UIPROC) (GLuint red, GLuint green, GLuint blue); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3UIPROC GLeeFuncPtr_glSecondaryColor3ui; #define glSecondaryColor3ui GLeeFuncPtr_glSecondaryColor3ui #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3uiv #define GLEE_H_DEFINED_glSecondaryColor3uiv typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3UIVPROC) (const GLuint * v); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3UIVPROC GLeeFuncPtr_glSecondaryColor3uiv; #define glSecondaryColor3uiv GLeeFuncPtr_glSecondaryColor3uiv #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3us #define GLEE_H_DEFINED_glSecondaryColor3us typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3USPROC) (GLushort red, GLushort green, GLushort blue); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3USPROC GLeeFuncPtr_glSecondaryColor3us; #define glSecondaryColor3us GLeeFuncPtr_glSecondaryColor3us #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3usv #define GLEE_H_DEFINED_glSecondaryColor3usv typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3USVPROC) (const GLushort * v); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3USVPROC GLeeFuncPtr_glSecondaryColor3usv; #define glSecondaryColor3usv GLeeFuncPtr_glSecondaryColor3usv #endif #ifndef GLEE_H_DEFINED_glSecondaryColorPointer #define GLEE_H_DEFINED_glSecondaryColorPointer typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLORPOINTERPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLSECONDARYCOLORPOINTERPROC GLeeFuncPtr_glSecondaryColorPointer; #define glSecondaryColorPointer GLeeFuncPtr_glSecondaryColorPointer #endif #ifndef GLEE_H_DEFINED_glWindowPos2d #define GLEE_H_DEFINED_glWindowPos2d typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2DPROC) (GLdouble x, GLdouble y); GLEE_EXTERN GLEEPFNGLWINDOWPOS2DPROC GLeeFuncPtr_glWindowPos2d; #define glWindowPos2d GLeeFuncPtr_glWindowPos2d #endif #ifndef GLEE_H_DEFINED_glWindowPos2dv #define GLEE_H_DEFINED_glWindowPos2dv typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2DVPROC) (const GLdouble * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS2DVPROC GLeeFuncPtr_glWindowPos2dv; #define glWindowPos2dv GLeeFuncPtr_glWindowPos2dv #endif #ifndef GLEE_H_DEFINED_glWindowPos2f #define GLEE_H_DEFINED_glWindowPos2f typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2FPROC) (GLfloat x, GLfloat y); GLEE_EXTERN GLEEPFNGLWINDOWPOS2FPROC GLeeFuncPtr_glWindowPos2f; #define glWindowPos2f GLeeFuncPtr_glWindowPos2f #endif #ifndef GLEE_H_DEFINED_glWindowPos2fv #define GLEE_H_DEFINED_glWindowPos2fv typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2FVPROC) (const GLfloat * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS2FVPROC GLeeFuncPtr_glWindowPos2fv; #define glWindowPos2fv GLeeFuncPtr_glWindowPos2fv #endif #ifndef GLEE_H_DEFINED_glWindowPos2i #define GLEE_H_DEFINED_glWindowPos2i typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2IPROC) (GLint x, GLint y); GLEE_EXTERN GLEEPFNGLWINDOWPOS2IPROC GLeeFuncPtr_glWindowPos2i; #define glWindowPos2i GLeeFuncPtr_glWindowPos2i #endif #ifndef GLEE_H_DEFINED_glWindowPos2iv #define GLEE_H_DEFINED_glWindowPos2iv typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2IVPROC) (const GLint * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS2IVPROC GLeeFuncPtr_glWindowPos2iv; #define glWindowPos2iv GLeeFuncPtr_glWindowPos2iv #endif #ifndef GLEE_H_DEFINED_glWindowPos2s #define GLEE_H_DEFINED_glWindowPos2s typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2SPROC) (GLshort x, GLshort y); GLEE_EXTERN GLEEPFNGLWINDOWPOS2SPROC GLeeFuncPtr_glWindowPos2s; #define glWindowPos2s GLeeFuncPtr_glWindowPos2s #endif #ifndef GLEE_H_DEFINED_glWindowPos2sv #define GLEE_H_DEFINED_glWindowPos2sv typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2SVPROC) (const GLshort * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS2SVPROC GLeeFuncPtr_glWindowPos2sv; #define glWindowPos2sv GLeeFuncPtr_glWindowPos2sv #endif #ifndef GLEE_H_DEFINED_glWindowPos3d #define GLEE_H_DEFINED_glWindowPos3d typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3DPROC) (GLdouble x, GLdouble y, GLdouble z); GLEE_EXTERN GLEEPFNGLWINDOWPOS3DPROC GLeeFuncPtr_glWindowPos3d; #define glWindowPos3d GLeeFuncPtr_glWindowPos3d #endif #ifndef GLEE_H_DEFINED_glWindowPos3dv #define GLEE_H_DEFINED_glWindowPos3dv typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3DVPROC) (const GLdouble * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS3DVPROC GLeeFuncPtr_glWindowPos3dv; #define glWindowPos3dv GLeeFuncPtr_glWindowPos3dv #endif #ifndef GLEE_H_DEFINED_glWindowPos3f #define GLEE_H_DEFINED_glWindowPos3f typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3FPROC) (GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLWINDOWPOS3FPROC GLeeFuncPtr_glWindowPos3f; #define glWindowPos3f GLeeFuncPtr_glWindowPos3f #endif #ifndef GLEE_H_DEFINED_glWindowPos3fv #define GLEE_H_DEFINED_glWindowPos3fv typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3FVPROC) (const GLfloat * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS3FVPROC GLeeFuncPtr_glWindowPos3fv; #define glWindowPos3fv GLeeFuncPtr_glWindowPos3fv #endif #ifndef GLEE_H_DEFINED_glWindowPos3i #define GLEE_H_DEFINED_glWindowPos3i typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3IPROC) (GLint x, GLint y, GLint z); GLEE_EXTERN GLEEPFNGLWINDOWPOS3IPROC GLeeFuncPtr_glWindowPos3i; #define glWindowPos3i GLeeFuncPtr_glWindowPos3i #endif #ifndef GLEE_H_DEFINED_glWindowPos3iv #define GLEE_H_DEFINED_glWindowPos3iv typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3IVPROC) (const GLint * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS3IVPROC GLeeFuncPtr_glWindowPos3iv; #define glWindowPos3iv GLeeFuncPtr_glWindowPos3iv #endif #ifndef GLEE_H_DEFINED_glWindowPos3s #define GLEE_H_DEFINED_glWindowPos3s typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3SPROC) (GLshort x, GLshort y, GLshort z); GLEE_EXTERN GLEEPFNGLWINDOWPOS3SPROC GLeeFuncPtr_glWindowPos3s; #define glWindowPos3s GLeeFuncPtr_glWindowPos3s #endif #ifndef GLEE_H_DEFINED_glWindowPos3sv #define GLEE_H_DEFINED_glWindowPos3sv typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3SVPROC) (const GLshort * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS3SVPROC GLeeFuncPtr_glWindowPos3sv; #define glWindowPos3sv GLeeFuncPtr_glWindowPos3sv #endif #endif /* GL_VERSION_1_5 */ #ifndef GL_VERSION_1_5 #define GL_VERSION_1_5 1 #define __GLEE_GL_VERSION_1_5 1 /* Constants */ #define GL_BUFFER_SIZE 0x8764 #define GL_BUFFER_USAGE 0x8765 #define GL_QUERY_COUNTER_BITS 0x8864 #define GL_CURRENT_QUERY 0x8865 #define GL_QUERY_RESULT 0x8866 #define GL_QUERY_RESULT_AVAILABLE 0x8867 #define GL_ARRAY_BUFFER 0x8892 #define GL_ELEMENT_ARRAY_BUFFER 0x8893 #define GL_ARRAY_BUFFER_BINDING 0x8894 #define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 #define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F #define GL_READ_ONLY 0x88B8 #define GL_WRITE_ONLY 0x88B9 #define GL_READ_WRITE 0x88BA #define GL_BUFFER_ACCESS 0x88BB #define GL_BUFFER_MAPPED 0x88BC #define GL_BUFFER_MAP_POINTER 0x88BD #define GL_STREAM_DRAW 0x88E0 #define GL_STREAM_READ 0x88E1 #define GL_STREAM_COPY 0x88E2 #define GL_STATIC_DRAW 0x88E4 #define GL_STATIC_READ 0x88E5 #define GL_STATIC_COPY 0x88E6 #define GL_DYNAMIC_DRAW 0x88E8 #define GL_DYNAMIC_READ 0x88E9 #define GL_DYNAMIC_COPY 0x88EA #define GL_SAMPLES_PASSED 0x8914 #define GL_SRC1_ALPHA 0x8589 #define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 #define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 #define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 #define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 #define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A #define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B #define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C #define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D #define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E #define GL_FOG_COORD_SRC 0x8450 #define GL_FOG_COORD 0x8451 #define GL_CURRENT_FOG_COORD 0x8453 #define GL_FOG_COORD_ARRAY_TYPE 0x8454 #define GL_FOG_COORD_ARRAY_STRIDE 0x8455 #define GL_FOG_COORD_ARRAY_POINTER 0x8456 #define GL_FOG_COORD_ARRAY 0x8457 #define GL_FOG_COORD_ARRAY_BUFFER_BINDING 0x889D #define GL_SRC0_RGB 0x8580 #define GL_SRC1_RGB 0x8581 #define GL_SRC2_RGB 0x8582 #define GL_SRC0_ALPHA 0x8588 #define GL_SRC2_ALPHA 0x858A #ifndef GLEE_H_DEFINED_glGenQueries #define GLEE_H_DEFINED_glGenQueries typedef void (APIENTRYP GLEEPFNGLGENQUERIESPROC) (GLsizei n, GLuint * ids); GLEE_EXTERN GLEEPFNGLGENQUERIESPROC GLeeFuncPtr_glGenQueries; #define glGenQueries GLeeFuncPtr_glGenQueries #endif #ifndef GLEE_H_DEFINED_glDeleteQueries #define GLEE_H_DEFINED_glDeleteQueries typedef void (APIENTRYP GLEEPFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint * ids); GLEE_EXTERN GLEEPFNGLDELETEQUERIESPROC GLeeFuncPtr_glDeleteQueries; #define glDeleteQueries GLeeFuncPtr_glDeleteQueries #endif #ifndef GLEE_H_DEFINED_glIsQuery #define GLEE_H_DEFINED_glIsQuery typedef GLboolean (APIENTRYP GLEEPFNGLISQUERYPROC) (GLuint id); GLEE_EXTERN GLEEPFNGLISQUERYPROC GLeeFuncPtr_glIsQuery; #define glIsQuery GLeeFuncPtr_glIsQuery #endif #ifndef GLEE_H_DEFINED_glBeginQuery #define GLEE_H_DEFINED_glBeginQuery typedef void (APIENTRYP GLEEPFNGLBEGINQUERYPROC) (GLenum target, GLuint id); GLEE_EXTERN GLEEPFNGLBEGINQUERYPROC GLeeFuncPtr_glBeginQuery; #define glBeginQuery GLeeFuncPtr_glBeginQuery #endif #ifndef GLEE_H_DEFINED_glEndQuery #define GLEE_H_DEFINED_glEndQuery typedef void (APIENTRYP GLEEPFNGLENDQUERYPROC) (GLenum target); GLEE_EXTERN GLEEPFNGLENDQUERYPROC GLeeFuncPtr_glEndQuery; #define glEndQuery GLeeFuncPtr_glEndQuery #endif #ifndef GLEE_H_DEFINED_glGetQueryiv #define GLEE_H_DEFINED_glGetQueryiv typedef void (APIENTRYP GLEEPFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETQUERYIVPROC GLeeFuncPtr_glGetQueryiv; #define glGetQueryiv GLeeFuncPtr_glGetQueryiv #endif #ifndef GLEE_H_DEFINED_glGetQueryObjectiv #define GLEE_H_DEFINED_glGetQueryObjectiv typedef void (APIENTRYP GLEEPFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETQUERYOBJECTIVPROC GLeeFuncPtr_glGetQueryObjectiv; #define glGetQueryObjectiv GLeeFuncPtr_glGetQueryObjectiv #endif #ifndef GLEE_H_DEFINED_glGetQueryObjectuiv #define GLEE_H_DEFINED_glGetQueryObjectuiv typedef void (APIENTRYP GLEEPFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint * params); GLEE_EXTERN GLEEPFNGLGETQUERYOBJECTUIVPROC GLeeFuncPtr_glGetQueryObjectuiv; #define glGetQueryObjectuiv GLeeFuncPtr_glGetQueryObjectuiv #endif #ifndef GLEE_H_DEFINED_glBindBuffer #define GLEE_H_DEFINED_glBindBuffer typedef void (APIENTRYP GLEEPFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); GLEE_EXTERN GLEEPFNGLBINDBUFFERPROC GLeeFuncPtr_glBindBuffer; #define glBindBuffer GLeeFuncPtr_glBindBuffer #endif #ifndef GLEE_H_DEFINED_glDeleteBuffers #define GLEE_H_DEFINED_glDeleteBuffers typedef void (APIENTRYP GLEEPFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint * buffers); GLEE_EXTERN GLEEPFNGLDELETEBUFFERSPROC GLeeFuncPtr_glDeleteBuffers; #define glDeleteBuffers GLeeFuncPtr_glDeleteBuffers #endif #ifndef GLEE_H_DEFINED_glGenBuffers #define GLEE_H_DEFINED_glGenBuffers typedef void (APIENTRYP GLEEPFNGLGENBUFFERSPROC) (GLsizei n, GLuint * buffers); GLEE_EXTERN GLEEPFNGLGENBUFFERSPROC GLeeFuncPtr_glGenBuffers; #define glGenBuffers GLeeFuncPtr_glGenBuffers #endif #ifndef GLEE_H_DEFINED_glIsBuffer #define GLEE_H_DEFINED_glIsBuffer typedef GLboolean (APIENTRYP GLEEPFNGLISBUFFERPROC) (GLuint buffer); GLEE_EXTERN GLEEPFNGLISBUFFERPROC GLeeFuncPtr_glIsBuffer; #define glIsBuffer GLeeFuncPtr_glIsBuffer #endif #ifndef GLEE_H_DEFINED_glBufferData #define GLEE_H_DEFINED_glBufferData typedef void (APIENTRYP GLEEPFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const GLvoid * data, GLenum usage); GLEE_EXTERN GLEEPFNGLBUFFERDATAPROC GLeeFuncPtr_glBufferData; #define glBufferData GLeeFuncPtr_glBufferData #endif #ifndef GLEE_H_DEFINED_glBufferSubData #define GLEE_H_DEFINED_glBufferSubData typedef void (APIENTRYP GLEEPFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid * data); GLEE_EXTERN GLEEPFNGLBUFFERSUBDATAPROC GLeeFuncPtr_glBufferSubData; #define glBufferSubData GLeeFuncPtr_glBufferSubData #endif #ifndef GLEE_H_DEFINED_glGetBufferSubData #define GLEE_H_DEFINED_glGetBufferSubData typedef void (APIENTRYP GLEEPFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid * data); GLEE_EXTERN GLEEPFNGLGETBUFFERSUBDATAPROC GLeeFuncPtr_glGetBufferSubData; #define glGetBufferSubData GLeeFuncPtr_glGetBufferSubData #endif #ifndef GLEE_H_DEFINED_glMapBuffer #define GLEE_H_DEFINED_glMapBuffer typedef GLvoid* (APIENTRYP GLEEPFNGLMAPBUFFERPROC) (GLenum target, GLenum access); GLEE_EXTERN GLEEPFNGLMAPBUFFERPROC GLeeFuncPtr_glMapBuffer; #define glMapBuffer GLeeFuncPtr_glMapBuffer #endif #ifndef GLEE_H_DEFINED_glUnmapBuffer #define GLEE_H_DEFINED_glUnmapBuffer typedef GLboolean (APIENTRYP GLEEPFNGLUNMAPBUFFERPROC) (GLenum target); GLEE_EXTERN GLEEPFNGLUNMAPBUFFERPROC GLeeFuncPtr_glUnmapBuffer; #define glUnmapBuffer GLeeFuncPtr_glUnmapBuffer #endif #ifndef GLEE_H_DEFINED_glGetBufferParameteriv #define GLEE_H_DEFINED_glGetBufferParameteriv typedef void (APIENTRYP GLEEPFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETBUFFERPARAMETERIVPROC GLeeFuncPtr_glGetBufferParameteriv; #define glGetBufferParameteriv GLeeFuncPtr_glGetBufferParameteriv #endif #ifndef GLEE_H_DEFINED_glGetBufferPointerv #define GLEE_H_DEFINED_glGetBufferPointerv typedef void (APIENTRYP GLEEPFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, GLvoid* * params); GLEE_EXTERN GLEEPFNGLGETBUFFERPOINTERVPROC GLeeFuncPtr_glGetBufferPointerv; #define glGetBufferPointerv GLeeFuncPtr_glGetBufferPointerv #endif #endif /* GL_VERSION_2_0 */ #ifndef GL_VERSION_2_0 #define GL_VERSION_2_0 1 #define __GLEE_GL_VERSION_2_0 1 /* Constants */ #define GL_BLEND_EQUATION_RGB 0x8009 #define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 #define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 #define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 #define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 #define GL_CURRENT_VERTEX_ATTRIB 0x8626 #define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 #define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 #define GL_STENCIL_BACK_FUNC 0x8800 #define GL_STENCIL_BACK_FAIL 0x8801 #define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 #define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 #define GL_MAX_DRAW_BUFFERS 0x8824 #define GL_DRAW_BUFFER0 0x8825 #define GL_DRAW_BUFFER1 0x8826 #define GL_DRAW_BUFFER2 0x8827 #define GL_DRAW_BUFFER3 0x8828 #define GL_DRAW_BUFFER4 0x8829 #define GL_DRAW_BUFFER5 0x882A #define GL_DRAW_BUFFER6 0x882B #define GL_DRAW_BUFFER7 0x882C #define GL_DRAW_BUFFER8 0x882D #define GL_DRAW_BUFFER9 0x882E #define GL_DRAW_BUFFER10 0x882F #define GL_DRAW_BUFFER11 0x8830 #define GL_DRAW_BUFFER12 0x8831 #define GL_DRAW_BUFFER13 0x8832 #define GL_DRAW_BUFFER14 0x8833 #define GL_DRAW_BUFFER15 0x8834 #define GL_BLEND_EQUATION_ALPHA 0x883D #define GL_MAX_VERTEX_ATTRIBS 0x8869 #define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A #define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 #define GL_FRAGMENT_SHADER 0x8B30 #define GL_VERTEX_SHADER 0x8B31 #define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 #define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A #define GL_MAX_VARYING_FLOATS 0x8B4B #define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C #define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D #define GL_SHADER_TYPE 0x8B4F #define GL_FLOAT_VEC2 0x8B50 #define GL_FLOAT_VEC3 0x8B51 #define GL_FLOAT_VEC4 0x8B52 #define GL_INT_VEC2 0x8B53 #define GL_INT_VEC3 0x8B54 #define GL_INT_VEC4 0x8B55 #define GL_BOOL 0x8B56 #define GL_BOOL_VEC2 0x8B57 #define GL_BOOL_VEC3 0x8B58 #define GL_BOOL_VEC4 0x8B59 #define GL_FLOAT_MAT2 0x8B5A #define GL_FLOAT_MAT3 0x8B5B #define GL_FLOAT_MAT4 0x8B5C #define GL_SAMPLER_1D 0x8B5D #define GL_SAMPLER_2D 0x8B5E #define GL_SAMPLER_3D 0x8B5F #define GL_SAMPLER_CUBE 0x8B60 #define GL_SAMPLER_1D_SHADOW 0x8B61 #define GL_SAMPLER_2D_SHADOW 0x8B62 #define GL_DELETE_STATUS 0x8B80 #define GL_COMPILE_STATUS 0x8B81 #define GL_LINK_STATUS 0x8B82 #define GL_VALIDATE_STATUS 0x8B83 #define GL_INFO_LOG_LENGTH 0x8B84 #define GL_ATTACHED_SHADERS 0x8B85 #define GL_ACTIVE_UNIFORMS 0x8B86 #define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 #define GL_SHADER_SOURCE_LENGTH 0x8B88 #define GL_ACTIVE_ATTRIBUTES 0x8B89 #define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A #define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B #define GL_SHADING_LANGUAGE_VERSION 0x8B8C #define GL_CURRENT_PROGRAM 0x8B8D #define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 #define GL_LOWER_LEFT 0x8CA1 #define GL_UPPER_LEFT 0x8CA2 #define GL_STENCIL_BACK_REF 0x8CA3 #define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 #define GL_STENCIL_BACK_WRITEMASK 0x8CA5 #define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 #define GL_POINT_SPRITE 0x8861 #define GL_COORD_REPLACE 0x8862 #define GL_MAX_TEXTURE_COORDS 0x8871 #ifndef GLEE_H_DEFINED_glBlendEquationSeparate #define GLEE_H_DEFINED_glBlendEquationSeparate typedef void (APIENTRYP GLEEPFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha); GLEE_EXTERN GLEEPFNGLBLENDEQUATIONSEPARATEPROC GLeeFuncPtr_glBlendEquationSeparate; #define glBlendEquationSeparate GLeeFuncPtr_glBlendEquationSeparate #endif #ifndef GLEE_H_DEFINED_glDrawBuffers #define GLEE_H_DEFINED_glDrawBuffers typedef void (APIENTRYP GLEEPFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum * bufs); GLEE_EXTERN GLEEPFNGLDRAWBUFFERSPROC GLeeFuncPtr_glDrawBuffers; #define glDrawBuffers GLeeFuncPtr_glDrawBuffers #endif #ifndef GLEE_H_DEFINED_glStencilOpSeparate #define GLEE_H_DEFINED_glStencilOpSeparate typedef void (APIENTRYP GLEEPFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); GLEE_EXTERN GLEEPFNGLSTENCILOPSEPARATEPROC GLeeFuncPtr_glStencilOpSeparate; #define glStencilOpSeparate GLeeFuncPtr_glStencilOpSeparate #endif #ifndef GLEE_H_DEFINED_glStencilFuncSeparate #define GLEE_H_DEFINED_glStencilFuncSeparate typedef void (APIENTRYP GLEEPFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask); GLEE_EXTERN GLEEPFNGLSTENCILFUNCSEPARATEPROC GLeeFuncPtr_glStencilFuncSeparate; #define glStencilFuncSeparate GLeeFuncPtr_glStencilFuncSeparate #endif #ifndef GLEE_H_DEFINED_glStencilMaskSeparate #define GLEE_H_DEFINED_glStencilMaskSeparate typedef void (APIENTRYP GLEEPFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask); GLEE_EXTERN GLEEPFNGLSTENCILMASKSEPARATEPROC GLeeFuncPtr_glStencilMaskSeparate; #define glStencilMaskSeparate GLeeFuncPtr_glStencilMaskSeparate #endif #ifndef GLEE_H_DEFINED_glAttachShader #define GLEE_H_DEFINED_glAttachShader typedef void (APIENTRYP GLEEPFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); GLEE_EXTERN GLEEPFNGLATTACHSHADERPROC GLeeFuncPtr_glAttachShader; #define glAttachShader GLeeFuncPtr_glAttachShader #endif #ifndef GLEE_H_DEFINED_glBindAttribLocation #define GLEE_H_DEFINED_glBindAttribLocation typedef void (APIENTRYP GLEEPFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar * name); GLEE_EXTERN GLEEPFNGLBINDATTRIBLOCATIONPROC GLeeFuncPtr_glBindAttribLocation; #define glBindAttribLocation GLeeFuncPtr_glBindAttribLocation #endif #ifndef GLEE_H_DEFINED_glCompileShader #define GLEE_H_DEFINED_glCompileShader typedef void (APIENTRYP GLEEPFNGLCOMPILESHADERPROC) (GLuint shader); GLEE_EXTERN GLEEPFNGLCOMPILESHADERPROC GLeeFuncPtr_glCompileShader; #define glCompileShader GLeeFuncPtr_glCompileShader #endif #ifndef GLEE_H_DEFINED_glCreateProgram #define GLEE_H_DEFINED_glCreateProgram typedef GLuint (APIENTRYP GLEEPFNGLCREATEPROGRAMPROC) (); GLEE_EXTERN GLEEPFNGLCREATEPROGRAMPROC GLeeFuncPtr_glCreateProgram; #define glCreateProgram GLeeFuncPtr_glCreateProgram #endif #ifndef GLEE_H_DEFINED_glCreateShader #define GLEE_H_DEFINED_glCreateShader typedef GLuint (APIENTRYP GLEEPFNGLCREATESHADERPROC) (GLenum type); GLEE_EXTERN GLEEPFNGLCREATESHADERPROC GLeeFuncPtr_glCreateShader; #define glCreateShader GLeeFuncPtr_glCreateShader #endif #ifndef GLEE_H_DEFINED_glDeleteProgram #define GLEE_H_DEFINED_glDeleteProgram typedef void (APIENTRYP GLEEPFNGLDELETEPROGRAMPROC) (GLuint program); GLEE_EXTERN GLEEPFNGLDELETEPROGRAMPROC GLeeFuncPtr_glDeleteProgram; #define glDeleteProgram GLeeFuncPtr_glDeleteProgram #endif #ifndef GLEE_H_DEFINED_glDeleteShader #define GLEE_H_DEFINED_glDeleteShader typedef void (APIENTRYP GLEEPFNGLDELETESHADERPROC) (GLuint shader); GLEE_EXTERN GLEEPFNGLDELETESHADERPROC GLeeFuncPtr_glDeleteShader; #define glDeleteShader GLeeFuncPtr_glDeleteShader #endif #ifndef GLEE_H_DEFINED_glDetachShader #define GLEE_H_DEFINED_glDetachShader typedef void (APIENTRYP GLEEPFNGLDETACHSHADERPROC) (GLuint program, GLuint shader); GLEE_EXTERN GLEEPFNGLDETACHSHADERPROC GLeeFuncPtr_glDetachShader; #define glDetachShader GLeeFuncPtr_glDetachShader #endif #ifndef GLEE_H_DEFINED_glDisableVertexAttribArray #define GLEE_H_DEFINED_glDisableVertexAttribArray typedef void (APIENTRYP GLEEPFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index); GLEE_EXTERN GLEEPFNGLDISABLEVERTEXATTRIBARRAYPROC GLeeFuncPtr_glDisableVertexAttribArray; #define glDisableVertexAttribArray GLeeFuncPtr_glDisableVertexAttribArray #endif #ifndef GLEE_H_DEFINED_glEnableVertexAttribArray #define GLEE_H_DEFINED_glEnableVertexAttribArray typedef void (APIENTRYP GLEEPFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index); GLEE_EXTERN GLEEPFNGLENABLEVERTEXATTRIBARRAYPROC GLeeFuncPtr_glEnableVertexAttribArray; #define glEnableVertexAttribArray GLeeFuncPtr_glEnableVertexAttribArray #endif #ifndef GLEE_H_DEFINED_glGetActiveAttrib #define GLEE_H_DEFINED_glGetActiveAttrib typedef void (APIENTRYP GLEEPFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name); GLEE_EXTERN GLEEPFNGLGETACTIVEATTRIBPROC GLeeFuncPtr_glGetActiveAttrib; #define glGetActiveAttrib GLeeFuncPtr_glGetActiveAttrib #endif #ifndef GLEE_H_DEFINED_glGetActiveUniform #define GLEE_H_DEFINED_glGetActiveUniform typedef void (APIENTRYP GLEEPFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name); GLEE_EXTERN GLEEPFNGLGETACTIVEUNIFORMPROC GLeeFuncPtr_glGetActiveUniform; #define glGetActiveUniform GLeeFuncPtr_glGetActiveUniform #endif #ifndef GLEE_H_DEFINED_glGetAttachedShaders #define GLEE_H_DEFINED_glGetAttachedShaders typedef void (APIENTRYP GLEEPFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei * count, GLuint * obj); GLEE_EXTERN GLEEPFNGLGETATTACHEDSHADERSPROC GLeeFuncPtr_glGetAttachedShaders; #define glGetAttachedShaders GLeeFuncPtr_glGetAttachedShaders #endif #ifndef GLEE_H_DEFINED_glGetAttribLocation #define GLEE_H_DEFINED_glGetAttribLocation typedef GLint (APIENTRYP GLEEPFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar * name); GLEE_EXTERN GLEEPFNGLGETATTRIBLOCATIONPROC GLeeFuncPtr_glGetAttribLocation; #define glGetAttribLocation GLeeFuncPtr_glGetAttribLocation #endif #ifndef GLEE_H_DEFINED_glGetProgramiv #define GLEE_H_DEFINED_glGetProgramiv typedef void (APIENTRYP GLEEPFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETPROGRAMIVPROC GLeeFuncPtr_glGetProgramiv; #define glGetProgramiv GLeeFuncPtr_glGetProgramiv #endif #ifndef GLEE_H_DEFINED_glGetProgramInfoLog #define GLEE_H_DEFINED_glGetProgramInfoLog typedef void (APIENTRYP GLEEPFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei * length, GLchar * infoLog); GLEE_EXTERN GLEEPFNGLGETPROGRAMINFOLOGPROC GLeeFuncPtr_glGetProgramInfoLog; #define glGetProgramInfoLog GLeeFuncPtr_glGetProgramInfoLog #endif #ifndef GLEE_H_DEFINED_glGetShaderiv #define GLEE_H_DEFINED_glGetShaderiv typedef void (APIENTRYP GLEEPFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETSHADERIVPROC GLeeFuncPtr_glGetShaderiv; #define glGetShaderiv GLeeFuncPtr_glGetShaderiv #endif #ifndef GLEE_H_DEFINED_glGetShaderInfoLog #define GLEE_H_DEFINED_glGetShaderInfoLog typedef void (APIENTRYP GLEEPFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * infoLog); GLEE_EXTERN GLEEPFNGLGETSHADERINFOLOGPROC GLeeFuncPtr_glGetShaderInfoLog; #define glGetShaderInfoLog GLeeFuncPtr_glGetShaderInfoLog #endif #ifndef GLEE_H_DEFINED_glGetShaderSource #define GLEE_H_DEFINED_glGetShaderSource typedef void (APIENTRYP GLEEPFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * source); GLEE_EXTERN GLEEPFNGLGETSHADERSOURCEPROC GLeeFuncPtr_glGetShaderSource; #define glGetShaderSource GLeeFuncPtr_glGetShaderSource #endif #ifndef GLEE_H_DEFINED_glGetUniformLocation #define GLEE_H_DEFINED_glGetUniformLocation typedef GLint (APIENTRYP GLEEPFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar * name); GLEE_EXTERN GLEEPFNGLGETUNIFORMLOCATIONPROC GLeeFuncPtr_glGetUniformLocation; #define glGetUniformLocation GLeeFuncPtr_glGetUniformLocation #endif #ifndef GLEE_H_DEFINED_glGetUniformfv #define GLEE_H_DEFINED_glGetUniformfv typedef void (APIENTRYP GLEEPFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETUNIFORMFVPROC GLeeFuncPtr_glGetUniformfv; #define glGetUniformfv GLeeFuncPtr_glGetUniformfv #endif #ifndef GLEE_H_DEFINED_glGetUniformiv #define GLEE_H_DEFINED_glGetUniformiv typedef void (APIENTRYP GLEEPFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint * params); GLEE_EXTERN GLEEPFNGLGETUNIFORMIVPROC GLeeFuncPtr_glGetUniformiv; #define glGetUniformiv GLeeFuncPtr_glGetUniformiv #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribdv #define GLEE_H_DEFINED_glGetVertexAttribdv typedef void (APIENTRYP GLEEPFNGLGETVERTEXATTRIBDVPROC) (GLuint index, GLenum pname, GLdouble * params); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBDVPROC GLeeFuncPtr_glGetVertexAttribdv; #define glGetVertexAttribdv GLeeFuncPtr_glGetVertexAttribdv #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribfv #define GLEE_H_DEFINED_glGetVertexAttribfv typedef void (APIENTRYP GLEEPFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBFVPROC GLeeFuncPtr_glGetVertexAttribfv; #define glGetVertexAttribfv GLeeFuncPtr_glGetVertexAttribfv #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribiv #define GLEE_H_DEFINED_glGetVertexAttribiv typedef void (APIENTRYP GLEEPFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBIVPROC GLeeFuncPtr_glGetVertexAttribiv; #define glGetVertexAttribiv GLeeFuncPtr_glGetVertexAttribiv #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribPointerv #define GLEE_H_DEFINED_glGetVertexAttribPointerv typedef void (APIENTRYP GLEEPFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, GLvoid* * pointer); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBPOINTERVPROC GLeeFuncPtr_glGetVertexAttribPointerv; #define glGetVertexAttribPointerv GLeeFuncPtr_glGetVertexAttribPointerv #endif #ifndef GLEE_H_DEFINED_glIsProgram #define GLEE_H_DEFINED_glIsProgram typedef GLboolean (APIENTRYP GLEEPFNGLISPROGRAMPROC) (GLuint program); GLEE_EXTERN GLEEPFNGLISPROGRAMPROC GLeeFuncPtr_glIsProgram; #define glIsProgram GLeeFuncPtr_glIsProgram #endif #ifndef GLEE_H_DEFINED_glIsShader #define GLEE_H_DEFINED_glIsShader typedef GLboolean (APIENTRYP GLEEPFNGLISSHADERPROC) (GLuint shader); GLEE_EXTERN GLEEPFNGLISSHADERPROC GLeeFuncPtr_glIsShader; #define glIsShader GLeeFuncPtr_glIsShader #endif #ifndef GLEE_H_DEFINED_glLinkProgram #define GLEE_H_DEFINED_glLinkProgram typedef void (APIENTRYP GLEEPFNGLLINKPROGRAMPROC) (GLuint program); GLEE_EXTERN GLEEPFNGLLINKPROGRAMPROC GLeeFuncPtr_glLinkProgram; #define glLinkProgram GLeeFuncPtr_glLinkProgram #endif #ifndef GLEE_H_DEFINED_glShaderSource #define GLEE_H_DEFINED_glShaderSource typedef void (APIENTRYP GLEEPFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar* const * string, const GLint * length); GLEE_EXTERN GLEEPFNGLSHADERSOURCEPROC GLeeFuncPtr_glShaderSource; #define glShaderSource GLeeFuncPtr_glShaderSource #endif #ifndef GLEE_H_DEFINED_glUseProgram #define GLEE_H_DEFINED_glUseProgram typedef void (APIENTRYP GLEEPFNGLUSEPROGRAMPROC) (GLuint program); GLEE_EXTERN GLEEPFNGLUSEPROGRAMPROC GLeeFuncPtr_glUseProgram; #define glUseProgram GLeeFuncPtr_glUseProgram #endif #ifndef GLEE_H_DEFINED_glUniform1f #define GLEE_H_DEFINED_glUniform1f typedef void (APIENTRYP GLEEPFNGLUNIFORM1FPROC) (GLint location, GLfloat v0); GLEE_EXTERN GLEEPFNGLUNIFORM1FPROC GLeeFuncPtr_glUniform1f; #define glUniform1f GLeeFuncPtr_glUniform1f #endif #ifndef GLEE_H_DEFINED_glUniform2f #define GLEE_H_DEFINED_glUniform2f typedef void (APIENTRYP GLEEPFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1); GLEE_EXTERN GLEEPFNGLUNIFORM2FPROC GLeeFuncPtr_glUniform2f; #define glUniform2f GLeeFuncPtr_glUniform2f #endif #ifndef GLEE_H_DEFINED_glUniform3f #define GLEE_H_DEFINED_glUniform3f typedef void (APIENTRYP GLEEPFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); GLEE_EXTERN GLEEPFNGLUNIFORM3FPROC GLeeFuncPtr_glUniform3f; #define glUniform3f GLeeFuncPtr_glUniform3f #endif #ifndef GLEE_H_DEFINED_glUniform4f #define GLEE_H_DEFINED_glUniform4f typedef void (APIENTRYP GLEEPFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); GLEE_EXTERN GLEEPFNGLUNIFORM4FPROC GLeeFuncPtr_glUniform4f; #define glUniform4f GLeeFuncPtr_glUniform4f #endif #ifndef GLEE_H_DEFINED_glUniform1i #define GLEE_H_DEFINED_glUniform1i typedef void (APIENTRYP GLEEPFNGLUNIFORM1IPROC) (GLint location, GLint v0); GLEE_EXTERN GLEEPFNGLUNIFORM1IPROC GLeeFuncPtr_glUniform1i; #define glUniform1i GLeeFuncPtr_glUniform1i #endif #ifndef GLEE_H_DEFINED_glUniform2i #define GLEE_H_DEFINED_glUniform2i typedef void (APIENTRYP GLEEPFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1); GLEE_EXTERN GLEEPFNGLUNIFORM2IPROC GLeeFuncPtr_glUniform2i; #define glUniform2i GLeeFuncPtr_glUniform2i #endif #ifndef GLEE_H_DEFINED_glUniform3i #define GLEE_H_DEFINED_glUniform3i typedef void (APIENTRYP GLEEPFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2); GLEE_EXTERN GLEEPFNGLUNIFORM3IPROC GLeeFuncPtr_glUniform3i; #define glUniform3i GLeeFuncPtr_glUniform3i #endif #ifndef GLEE_H_DEFINED_glUniform4i #define GLEE_H_DEFINED_glUniform4i typedef void (APIENTRYP GLEEPFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); GLEE_EXTERN GLEEPFNGLUNIFORM4IPROC GLeeFuncPtr_glUniform4i; #define glUniform4i GLeeFuncPtr_glUniform4i #endif #ifndef GLEE_H_DEFINED_glUniform1fv #define GLEE_H_DEFINED_glUniform1fv typedef void (APIENTRYP GLEEPFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORM1FVPROC GLeeFuncPtr_glUniform1fv; #define glUniform1fv GLeeFuncPtr_glUniform1fv #endif #ifndef GLEE_H_DEFINED_glUniform2fv #define GLEE_H_DEFINED_glUniform2fv typedef void (APIENTRYP GLEEPFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORM2FVPROC GLeeFuncPtr_glUniform2fv; #define glUniform2fv GLeeFuncPtr_glUniform2fv #endif #ifndef GLEE_H_DEFINED_glUniform3fv #define GLEE_H_DEFINED_glUniform3fv typedef void (APIENTRYP GLEEPFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORM3FVPROC GLeeFuncPtr_glUniform3fv; #define glUniform3fv GLeeFuncPtr_glUniform3fv #endif #ifndef GLEE_H_DEFINED_glUniform4fv #define GLEE_H_DEFINED_glUniform4fv typedef void (APIENTRYP GLEEPFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORM4FVPROC GLeeFuncPtr_glUniform4fv; #define glUniform4fv GLeeFuncPtr_glUniform4fv #endif #ifndef GLEE_H_DEFINED_glUniform1iv #define GLEE_H_DEFINED_glUniform1iv typedef void (APIENTRYP GLEEPFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint * value); GLEE_EXTERN GLEEPFNGLUNIFORM1IVPROC GLeeFuncPtr_glUniform1iv; #define glUniform1iv GLeeFuncPtr_glUniform1iv #endif #ifndef GLEE_H_DEFINED_glUniform2iv #define GLEE_H_DEFINED_glUniform2iv typedef void (APIENTRYP GLEEPFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint * value); GLEE_EXTERN GLEEPFNGLUNIFORM2IVPROC GLeeFuncPtr_glUniform2iv; #define glUniform2iv GLeeFuncPtr_glUniform2iv #endif #ifndef GLEE_H_DEFINED_glUniform3iv #define GLEE_H_DEFINED_glUniform3iv typedef void (APIENTRYP GLEEPFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint * value); GLEE_EXTERN GLEEPFNGLUNIFORM3IVPROC GLeeFuncPtr_glUniform3iv; #define glUniform3iv GLeeFuncPtr_glUniform3iv #endif #ifndef GLEE_H_DEFINED_glUniform4iv #define GLEE_H_DEFINED_glUniform4iv typedef void (APIENTRYP GLEEPFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint * value); GLEE_EXTERN GLEEPFNGLUNIFORM4IVPROC GLeeFuncPtr_glUniform4iv; #define glUniform4iv GLeeFuncPtr_glUniform4iv #endif #ifndef GLEE_H_DEFINED_glUniformMatrix2fv #define GLEE_H_DEFINED_glUniformMatrix2fv typedef void (APIENTRYP GLEEPFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORMMATRIX2FVPROC GLeeFuncPtr_glUniformMatrix2fv; #define glUniformMatrix2fv GLeeFuncPtr_glUniformMatrix2fv #endif #ifndef GLEE_H_DEFINED_glUniformMatrix3fv #define GLEE_H_DEFINED_glUniformMatrix3fv typedef void (APIENTRYP GLEEPFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORMMATRIX3FVPROC GLeeFuncPtr_glUniformMatrix3fv; #define glUniformMatrix3fv GLeeFuncPtr_glUniformMatrix3fv #endif #ifndef GLEE_H_DEFINED_glUniformMatrix4fv #define GLEE_H_DEFINED_glUniformMatrix4fv typedef void (APIENTRYP GLEEPFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORMMATRIX4FVPROC GLeeFuncPtr_glUniformMatrix4fv; #define glUniformMatrix4fv GLeeFuncPtr_glUniformMatrix4fv #endif #ifndef GLEE_H_DEFINED_glValidateProgram #define GLEE_H_DEFINED_glValidateProgram typedef void (APIENTRYP GLEEPFNGLVALIDATEPROGRAMPROC) (GLuint program); GLEE_EXTERN GLEEPFNGLVALIDATEPROGRAMPROC GLeeFuncPtr_glValidateProgram; #define glValidateProgram GLeeFuncPtr_glValidateProgram #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1d #define GLEE_H_DEFINED_glVertexAttrib1d typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1DPROC GLeeFuncPtr_glVertexAttrib1d; #define glVertexAttrib1d GLeeFuncPtr_glVertexAttrib1d #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1dv #define GLEE_H_DEFINED_glVertexAttrib1dv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1DVPROC GLeeFuncPtr_glVertexAttrib1dv; #define glVertexAttrib1dv GLeeFuncPtr_glVertexAttrib1dv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1f #define GLEE_H_DEFINED_glVertexAttrib1f typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1FPROC GLeeFuncPtr_glVertexAttrib1f; #define glVertexAttrib1f GLeeFuncPtr_glVertexAttrib1f #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1fv #define GLEE_H_DEFINED_glVertexAttrib1fv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1FVPROC GLeeFuncPtr_glVertexAttrib1fv; #define glVertexAttrib1fv GLeeFuncPtr_glVertexAttrib1fv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1s #define GLEE_H_DEFINED_glVertexAttrib1s typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1SPROC GLeeFuncPtr_glVertexAttrib1s; #define glVertexAttrib1s GLeeFuncPtr_glVertexAttrib1s #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1sv #define GLEE_H_DEFINED_glVertexAttrib1sv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1SVPROC GLeeFuncPtr_glVertexAttrib1sv; #define glVertexAttrib1sv GLeeFuncPtr_glVertexAttrib1sv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2d #define GLEE_H_DEFINED_glVertexAttrib2d typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2DPROC GLeeFuncPtr_glVertexAttrib2d; #define glVertexAttrib2d GLeeFuncPtr_glVertexAttrib2d #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2dv #define GLEE_H_DEFINED_glVertexAttrib2dv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2DVPROC GLeeFuncPtr_glVertexAttrib2dv; #define glVertexAttrib2dv GLeeFuncPtr_glVertexAttrib2dv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2f #define GLEE_H_DEFINED_glVertexAttrib2f typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2FPROC GLeeFuncPtr_glVertexAttrib2f; #define glVertexAttrib2f GLeeFuncPtr_glVertexAttrib2f #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2fv #define GLEE_H_DEFINED_glVertexAttrib2fv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2FVPROC GLeeFuncPtr_glVertexAttrib2fv; #define glVertexAttrib2fv GLeeFuncPtr_glVertexAttrib2fv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2s #define GLEE_H_DEFINED_glVertexAttrib2s typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2SPROC GLeeFuncPtr_glVertexAttrib2s; #define glVertexAttrib2s GLeeFuncPtr_glVertexAttrib2s #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2sv #define GLEE_H_DEFINED_glVertexAttrib2sv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2SVPROC GLeeFuncPtr_glVertexAttrib2sv; #define glVertexAttrib2sv GLeeFuncPtr_glVertexAttrib2sv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3d #define GLEE_H_DEFINED_glVertexAttrib3d typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3DPROC GLeeFuncPtr_glVertexAttrib3d; #define glVertexAttrib3d GLeeFuncPtr_glVertexAttrib3d #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3dv #define GLEE_H_DEFINED_glVertexAttrib3dv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3DVPROC GLeeFuncPtr_glVertexAttrib3dv; #define glVertexAttrib3dv GLeeFuncPtr_glVertexAttrib3dv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3f #define GLEE_H_DEFINED_glVertexAttrib3f typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3FPROC GLeeFuncPtr_glVertexAttrib3f; #define glVertexAttrib3f GLeeFuncPtr_glVertexAttrib3f #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3fv #define GLEE_H_DEFINED_glVertexAttrib3fv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3FVPROC GLeeFuncPtr_glVertexAttrib3fv; #define glVertexAttrib3fv GLeeFuncPtr_glVertexAttrib3fv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3s #define GLEE_H_DEFINED_glVertexAttrib3s typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3SPROC GLeeFuncPtr_glVertexAttrib3s; #define glVertexAttrib3s GLeeFuncPtr_glVertexAttrib3s #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3sv #define GLEE_H_DEFINED_glVertexAttrib3sv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3SVPROC GLeeFuncPtr_glVertexAttrib3sv; #define glVertexAttrib3sv GLeeFuncPtr_glVertexAttrib3sv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4Nbv #define GLEE_H_DEFINED_glVertexAttrib4Nbv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4NBVPROC GLeeFuncPtr_glVertexAttrib4Nbv; #define glVertexAttrib4Nbv GLeeFuncPtr_glVertexAttrib4Nbv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4Niv #define GLEE_H_DEFINED_glVertexAttrib4Niv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4NIVPROC GLeeFuncPtr_glVertexAttrib4Niv; #define glVertexAttrib4Niv GLeeFuncPtr_glVertexAttrib4Niv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4Nsv #define GLEE_H_DEFINED_glVertexAttrib4Nsv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4NSVPROC GLeeFuncPtr_glVertexAttrib4Nsv; #define glVertexAttrib4Nsv GLeeFuncPtr_glVertexAttrib4Nsv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4Nub #define GLEE_H_DEFINED_glVertexAttrib4Nub typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4NUBPROC GLeeFuncPtr_glVertexAttrib4Nub; #define glVertexAttrib4Nub GLeeFuncPtr_glVertexAttrib4Nub #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4Nubv #define GLEE_H_DEFINED_glVertexAttrib4Nubv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4NUBVPROC GLeeFuncPtr_glVertexAttrib4Nubv; #define glVertexAttrib4Nubv GLeeFuncPtr_glVertexAttrib4Nubv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4Nuiv #define GLEE_H_DEFINED_glVertexAttrib4Nuiv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4NUIVPROC GLeeFuncPtr_glVertexAttrib4Nuiv; #define glVertexAttrib4Nuiv GLeeFuncPtr_glVertexAttrib4Nuiv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4Nusv #define GLEE_H_DEFINED_glVertexAttrib4Nusv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4NUSVPROC GLeeFuncPtr_glVertexAttrib4Nusv; #define glVertexAttrib4Nusv GLeeFuncPtr_glVertexAttrib4Nusv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4bv #define GLEE_H_DEFINED_glVertexAttrib4bv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4BVPROC GLeeFuncPtr_glVertexAttrib4bv; #define glVertexAttrib4bv GLeeFuncPtr_glVertexAttrib4bv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4d #define GLEE_H_DEFINED_glVertexAttrib4d typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4DPROC GLeeFuncPtr_glVertexAttrib4d; #define glVertexAttrib4d GLeeFuncPtr_glVertexAttrib4d #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4dv #define GLEE_H_DEFINED_glVertexAttrib4dv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4DVPROC GLeeFuncPtr_glVertexAttrib4dv; #define glVertexAttrib4dv GLeeFuncPtr_glVertexAttrib4dv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4f #define GLEE_H_DEFINED_glVertexAttrib4f typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4FPROC GLeeFuncPtr_glVertexAttrib4f; #define glVertexAttrib4f GLeeFuncPtr_glVertexAttrib4f #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4fv #define GLEE_H_DEFINED_glVertexAttrib4fv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4FVPROC GLeeFuncPtr_glVertexAttrib4fv; #define glVertexAttrib4fv GLeeFuncPtr_glVertexAttrib4fv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4iv #define GLEE_H_DEFINED_glVertexAttrib4iv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4IVPROC GLeeFuncPtr_glVertexAttrib4iv; #define glVertexAttrib4iv GLeeFuncPtr_glVertexAttrib4iv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4s #define GLEE_H_DEFINED_glVertexAttrib4s typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4SPROC GLeeFuncPtr_glVertexAttrib4s; #define glVertexAttrib4s GLeeFuncPtr_glVertexAttrib4s #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4sv #define GLEE_H_DEFINED_glVertexAttrib4sv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4SVPROC GLeeFuncPtr_glVertexAttrib4sv; #define glVertexAttrib4sv GLeeFuncPtr_glVertexAttrib4sv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4ubv #define GLEE_H_DEFINED_glVertexAttrib4ubv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4UBVPROC GLeeFuncPtr_glVertexAttrib4ubv; #define glVertexAttrib4ubv GLeeFuncPtr_glVertexAttrib4ubv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4uiv #define GLEE_H_DEFINED_glVertexAttrib4uiv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4UIVPROC GLeeFuncPtr_glVertexAttrib4uiv; #define glVertexAttrib4uiv GLeeFuncPtr_glVertexAttrib4uiv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4usv #define GLEE_H_DEFINED_glVertexAttrib4usv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4USVPROC GLeeFuncPtr_glVertexAttrib4usv; #define glVertexAttrib4usv GLeeFuncPtr_glVertexAttrib4usv #endif #ifndef GLEE_H_DEFINED_glVertexAttribPointer #define GLEE_H_DEFINED_glVertexAttribPointer typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBPOINTERPROC GLeeFuncPtr_glVertexAttribPointer; #define glVertexAttribPointer GLeeFuncPtr_glVertexAttribPointer #endif #endif /* GL_VERSION_2_1 */ #ifndef GL_VERSION_2_1 #define GL_VERSION_2_1 1 #define __GLEE_GL_VERSION_2_1 1 /* Constants */ #define GL_PIXEL_PACK_BUFFER 0x88EB #define GL_PIXEL_UNPACK_BUFFER 0x88EC #define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED #define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF #define GL_FLOAT_MAT2x3 0x8B65 #define GL_FLOAT_MAT2x4 0x8B66 #define GL_FLOAT_MAT3x2 0x8B67 #define GL_FLOAT_MAT3x4 0x8B68 #define GL_FLOAT_MAT4x2 0x8B69 #define GL_FLOAT_MAT4x3 0x8B6A #define GL_SRGB 0x8C40 #define GL_SRGB8 0x8C41 #define GL_SRGB_ALPHA 0x8C42 #define GL_SRGB8_ALPHA8 0x8C43 #define GL_COMPRESSED_SRGB 0x8C48 #define GL_COMPRESSED_SRGB_ALPHA 0x8C49 #define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F #define GL_SLUMINANCE_ALPHA 0x8C44 #define GL_SLUMINANCE8_ALPHA8 0x8C45 #define GL_SLUMINANCE 0x8C46 #define GL_SLUMINANCE8 0x8C47 #define GL_COMPRESSED_SLUMINANCE 0x8C4A #define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B #ifndef GLEE_H_DEFINED_glUniformMatrix2x3fv #define GLEE_H_DEFINED_glUniformMatrix2x3fv typedef void (APIENTRYP GLEEPFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORMMATRIX2X3FVPROC GLeeFuncPtr_glUniformMatrix2x3fv; #define glUniformMatrix2x3fv GLeeFuncPtr_glUniformMatrix2x3fv #endif #ifndef GLEE_H_DEFINED_glUniformMatrix3x2fv #define GLEE_H_DEFINED_glUniformMatrix3x2fv typedef void (APIENTRYP GLEEPFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORMMATRIX3X2FVPROC GLeeFuncPtr_glUniformMatrix3x2fv; #define glUniformMatrix3x2fv GLeeFuncPtr_glUniformMatrix3x2fv #endif #ifndef GLEE_H_DEFINED_glUniformMatrix2x4fv #define GLEE_H_DEFINED_glUniformMatrix2x4fv typedef void (APIENTRYP GLEEPFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORMMATRIX2X4FVPROC GLeeFuncPtr_glUniformMatrix2x4fv; #define glUniformMatrix2x4fv GLeeFuncPtr_glUniformMatrix2x4fv #endif #ifndef GLEE_H_DEFINED_glUniformMatrix4x2fv #define GLEE_H_DEFINED_glUniformMatrix4x2fv typedef void (APIENTRYP GLEEPFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORMMATRIX4X2FVPROC GLeeFuncPtr_glUniformMatrix4x2fv; #define glUniformMatrix4x2fv GLeeFuncPtr_glUniformMatrix4x2fv #endif #ifndef GLEE_H_DEFINED_glUniformMatrix3x4fv #define GLEE_H_DEFINED_glUniformMatrix3x4fv typedef void (APIENTRYP GLEEPFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORMMATRIX3X4FVPROC GLeeFuncPtr_glUniformMatrix3x4fv; #define glUniformMatrix3x4fv GLeeFuncPtr_glUniformMatrix3x4fv #endif #ifndef GLEE_H_DEFINED_glUniformMatrix4x3fv #define GLEE_H_DEFINED_glUniformMatrix4x3fv typedef void (APIENTRYP GLEEPFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORMMATRIX4X3FVPROC GLeeFuncPtr_glUniformMatrix4x3fv; #define glUniformMatrix4x3fv GLeeFuncPtr_glUniformMatrix4x3fv #endif #endif /* GL_VERSION_3_0 */ #ifndef GL_VERSION_3_0 #define GL_VERSION_3_0 1 #define __GLEE_GL_VERSION_3_0 1 /* Constants */ #define GL_COMPARE_REF_TO_TEXTURE 0x884E #define GL_CLIP_DISTANCE0 0x3000 #define GL_CLIP_DISTANCE1 0x3001 #define GL_CLIP_DISTANCE2 0x3002 #define GL_CLIP_DISTANCE3 0x3003 #define GL_CLIP_DISTANCE4 0x3004 #define GL_CLIP_DISTANCE5 0x3005 #define GL_CLIP_DISTANCE6 0x3006 #define GL_CLIP_DISTANCE7 0x3007 #define GL_MAX_CLIP_DISTANCES 0x0D32 #define GL_MAJOR_VERSION 0x821B #define GL_MINOR_VERSION 0x821C #define GL_NUM_EXTENSIONS 0x821D #define GL_CONTEXT_FLAGS 0x821E #define GL_COMPRESSED_RED 0x8225 #define GL_COMPRESSED_RG 0x8226 #define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x0001 #define GL_RGBA32F 0x8814 #define GL_RGB32F 0x8815 #define GL_RGBA16F 0x881A #define GL_RGB16F 0x881B #define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD #define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF #define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 #define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 #define GL_CLAMP_READ_COLOR 0x891C #define GL_FIXED_ONLY 0x891D #define GL_MAX_VARYING_COMPONENTS 0x8B4B #define GL_TEXTURE_1D_ARRAY 0x8C18 #define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 #define GL_TEXTURE_2D_ARRAY 0x8C1A #define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B #define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C #define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D #define GL_R11F_G11F_B10F 0x8C3A #define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B #define GL_RGB9_E5 0x8C3D #define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E #define GL_TEXTURE_SHARED_SIZE 0x8C3F #define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 #define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 #define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 #define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 #define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 #define GL_PRIMITIVES_GENERATED 0x8C87 #define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 #define GL_RASTERIZER_DISCARD 0x8C89 #define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B #define GL_INTERLEAVED_ATTRIBS 0x8C8C #define GL_SEPARATE_ATTRIBS 0x8C8D #define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E #define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F #define GL_RGBA32UI 0x8D70 #define GL_RGB32UI 0x8D71 #define GL_RGBA16UI 0x8D76 #define GL_RGB16UI 0x8D77 #define GL_RGBA8UI 0x8D7C #define GL_RGB8UI 0x8D7D #define GL_RGBA32I 0x8D82 #define GL_RGB32I 0x8D83 #define GL_RGBA16I 0x8D88 #define GL_RGB16I 0x8D89 #define GL_RGBA8I 0x8D8E #define GL_RGB8I 0x8D8F #define GL_RED_INTEGER 0x8D94 #define GL_GREEN_INTEGER 0x8D95 #define GL_BLUE_INTEGER 0x8D96 #define GL_RGB_INTEGER 0x8D98 #define GL_RGBA_INTEGER 0x8D99 #define GL_BGR_INTEGER 0x8D9A #define GL_BGRA_INTEGER 0x8D9B #define GL_SAMPLER_1D_ARRAY 0x8DC0 #define GL_SAMPLER_2D_ARRAY 0x8DC1 #define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 #define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 #define GL_SAMPLER_CUBE_SHADOW 0x8DC5 #define GL_UNSIGNED_INT_VEC2 0x8DC6 #define GL_UNSIGNED_INT_VEC3 0x8DC7 #define GL_UNSIGNED_INT_VEC4 0x8DC8 #define GL_INT_SAMPLER_1D 0x8DC9 #define GL_INT_SAMPLER_2D 0x8DCA #define GL_INT_SAMPLER_3D 0x8DCB #define GL_INT_SAMPLER_CUBE 0x8DCC #define GL_INT_SAMPLER_1D_ARRAY 0x8DCE #define GL_INT_SAMPLER_2D_ARRAY 0x8DCF #define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 #define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 #define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 #define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 #define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 #define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 #define GL_QUERY_WAIT 0x8E13 #define GL_QUERY_NO_WAIT 0x8E14 #define GL_QUERY_BY_REGION_WAIT 0x8E15 #define GL_QUERY_BY_REGION_NO_WAIT 0x8E16 #define GL_BUFFER_ACCESS_FLAGS 0x911F #define GL_BUFFER_MAP_LENGTH 0x9120 #define GL_BUFFER_MAP_OFFSET 0x9121 #define GL_CLAMP_VERTEX_COLOR 0x891A #define GL_CLAMP_FRAGMENT_COLOR 0x891B #define GL_ALPHA_INTEGER 0x8D97 #ifndef GLEE_H_DEFINED_glColorMaski #define GLEE_H_DEFINED_glColorMaski typedef void (APIENTRYP GLEEPFNGLCOLORMASKIPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); GLEE_EXTERN GLEEPFNGLCOLORMASKIPROC GLeeFuncPtr_glColorMaski; #define glColorMaski GLeeFuncPtr_glColorMaski #endif #ifndef GLEE_H_DEFINED_glGetBooleani_v #define GLEE_H_DEFINED_glGetBooleani_v typedef void (APIENTRYP GLEEPFNGLGETBOOLEANI_VPROC) (GLenum target, GLuint index, GLboolean * data); GLEE_EXTERN GLEEPFNGLGETBOOLEANI_VPROC GLeeFuncPtr_glGetBooleani_v; #define glGetBooleani_v GLeeFuncPtr_glGetBooleani_v #endif #ifndef GLEE_H_DEFINED_glGetIntegeri_v #define GLEE_H_DEFINED_glGetIntegeri_v typedef void (APIENTRYP GLEEPFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint * data); GLEE_EXTERN GLEEPFNGLGETINTEGERI_VPROC GLeeFuncPtr_glGetIntegeri_v; #define glGetIntegeri_v GLeeFuncPtr_glGetIntegeri_v #endif #ifndef GLEE_H_DEFINED_glEnablei #define GLEE_H_DEFINED_glEnablei typedef void (APIENTRYP GLEEPFNGLENABLEIPROC) (GLenum target, GLuint index); GLEE_EXTERN GLEEPFNGLENABLEIPROC GLeeFuncPtr_glEnablei; #define glEnablei GLeeFuncPtr_glEnablei #endif #ifndef GLEE_H_DEFINED_glDisablei #define GLEE_H_DEFINED_glDisablei typedef void (APIENTRYP GLEEPFNGLDISABLEIPROC) (GLenum target, GLuint index); GLEE_EXTERN GLEEPFNGLDISABLEIPROC GLeeFuncPtr_glDisablei; #define glDisablei GLeeFuncPtr_glDisablei #endif #ifndef GLEE_H_DEFINED_glIsEnabledi #define GLEE_H_DEFINED_glIsEnabledi typedef GLboolean (APIENTRYP GLEEPFNGLISENABLEDIPROC) (GLenum target, GLuint index); GLEE_EXTERN GLEEPFNGLISENABLEDIPROC GLeeFuncPtr_glIsEnabledi; #define glIsEnabledi GLeeFuncPtr_glIsEnabledi #endif #ifndef GLEE_H_DEFINED_glBeginTransformFeedback #define GLEE_H_DEFINED_glBeginTransformFeedback typedef void (APIENTRYP GLEEPFNGLBEGINTRANSFORMFEEDBACKPROC) (GLenum primitiveMode); GLEE_EXTERN GLEEPFNGLBEGINTRANSFORMFEEDBACKPROC GLeeFuncPtr_glBeginTransformFeedback; #define glBeginTransformFeedback GLeeFuncPtr_glBeginTransformFeedback #endif #ifndef GLEE_H_DEFINED_glEndTransformFeedback #define GLEE_H_DEFINED_glEndTransformFeedback typedef void (APIENTRYP GLEEPFNGLENDTRANSFORMFEEDBACKPROC) (); GLEE_EXTERN GLEEPFNGLENDTRANSFORMFEEDBACKPROC GLeeFuncPtr_glEndTransformFeedback; #define glEndTransformFeedback GLeeFuncPtr_glEndTransformFeedback #endif #ifndef GLEE_H_DEFINED_glBindBufferRange #define GLEE_H_DEFINED_glBindBufferRange typedef void (APIENTRYP GLEEPFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); GLEE_EXTERN GLEEPFNGLBINDBUFFERRANGEPROC GLeeFuncPtr_glBindBufferRange; #define glBindBufferRange GLeeFuncPtr_glBindBufferRange #endif #ifndef GLEE_H_DEFINED_glBindBufferBase #define GLEE_H_DEFINED_glBindBufferBase typedef void (APIENTRYP GLEEPFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer); GLEE_EXTERN GLEEPFNGLBINDBUFFERBASEPROC GLeeFuncPtr_glBindBufferBase; #define glBindBufferBase GLeeFuncPtr_glBindBufferBase #endif #ifndef GLEE_H_DEFINED_glTransformFeedbackVaryings #define GLEE_H_DEFINED_glTransformFeedbackVaryings typedef void (APIENTRYP GLEEPFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint program, GLsizei count, const GLchar* const * varyings, GLenum bufferMode); GLEE_EXTERN GLEEPFNGLTRANSFORMFEEDBACKVARYINGSPROC GLeeFuncPtr_glTransformFeedbackVaryings; #define glTransformFeedbackVaryings GLeeFuncPtr_glTransformFeedbackVaryings #endif #ifndef GLEE_H_DEFINED_glGetTransformFeedbackVarying #define GLEE_H_DEFINED_glGetTransformFeedbackVarying typedef void (APIENTRYP GLEEPFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name); GLEE_EXTERN GLEEPFNGLGETTRANSFORMFEEDBACKVARYINGPROC GLeeFuncPtr_glGetTransformFeedbackVarying; #define glGetTransformFeedbackVarying GLeeFuncPtr_glGetTransformFeedbackVarying #endif #ifndef GLEE_H_DEFINED_glClampColor #define GLEE_H_DEFINED_glClampColor typedef void (APIENTRYP GLEEPFNGLCLAMPCOLORPROC) (GLenum target, GLenum clamp); GLEE_EXTERN GLEEPFNGLCLAMPCOLORPROC GLeeFuncPtr_glClampColor; #define glClampColor GLeeFuncPtr_glClampColor #endif #ifndef GLEE_H_DEFINED_glBeginConditionalRender #define GLEE_H_DEFINED_glBeginConditionalRender typedef void (APIENTRYP GLEEPFNGLBEGINCONDITIONALRENDERPROC) (GLuint id, GLenum mode); GLEE_EXTERN GLEEPFNGLBEGINCONDITIONALRENDERPROC GLeeFuncPtr_glBeginConditionalRender; #define glBeginConditionalRender GLeeFuncPtr_glBeginConditionalRender #endif #ifndef GLEE_H_DEFINED_glEndConditionalRender #define GLEE_H_DEFINED_glEndConditionalRender typedef void (APIENTRYP GLEEPFNGLENDCONDITIONALRENDERPROC) (); GLEE_EXTERN GLEEPFNGLENDCONDITIONALRENDERPROC GLeeFuncPtr_glEndConditionalRender; #define glEndConditionalRender GLeeFuncPtr_glEndConditionalRender #endif #ifndef GLEE_H_DEFINED_glVertexAttribIPointer #define GLEE_H_DEFINED_glVertexAttribIPointer typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBIPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBIPOINTERPROC GLeeFuncPtr_glVertexAttribIPointer; #define glVertexAttribIPointer GLeeFuncPtr_glVertexAttribIPointer #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribIiv #define GLEE_H_DEFINED_glGetVertexAttribIiv typedef void (APIENTRYP GLEEPFNGLGETVERTEXATTRIBIIVPROC) (GLuint index, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBIIVPROC GLeeFuncPtr_glGetVertexAttribIiv; #define glGetVertexAttribIiv GLeeFuncPtr_glGetVertexAttribIiv #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribIuiv #define GLEE_H_DEFINED_glGetVertexAttribIuiv typedef void (APIENTRYP GLEEPFNGLGETVERTEXATTRIBIUIVPROC) (GLuint index, GLenum pname, GLuint * params); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBIUIVPROC GLeeFuncPtr_glGetVertexAttribIuiv; #define glGetVertexAttribIuiv GLeeFuncPtr_glGetVertexAttribIuiv #endif #ifndef GLEE_H_DEFINED_glVertexAttribI1i #define GLEE_H_DEFINED_glVertexAttribI1i typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI1IPROC) (GLuint index, GLint x); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI1IPROC GLeeFuncPtr_glVertexAttribI1i; #define glVertexAttribI1i GLeeFuncPtr_glVertexAttribI1i #endif #ifndef GLEE_H_DEFINED_glVertexAttribI2i #define GLEE_H_DEFINED_glVertexAttribI2i typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI2IPROC) (GLuint index, GLint x, GLint y); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI2IPROC GLeeFuncPtr_glVertexAttribI2i; #define glVertexAttribI2i GLeeFuncPtr_glVertexAttribI2i #endif #ifndef GLEE_H_DEFINED_glVertexAttribI3i #define GLEE_H_DEFINED_glVertexAttribI3i typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI3IPROC) (GLuint index, GLint x, GLint y, GLint z); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI3IPROC GLeeFuncPtr_glVertexAttribI3i; #define glVertexAttribI3i GLeeFuncPtr_glVertexAttribI3i #endif #ifndef GLEE_H_DEFINED_glVertexAttribI4i #define GLEE_H_DEFINED_glVertexAttribI4i typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI4IPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI4IPROC GLeeFuncPtr_glVertexAttribI4i; #define glVertexAttribI4i GLeeFuncPtr_glVertexAttribI4i #endif #ifndef GLEE_H_DEFINED_glVertexAttribI1ui #define GLEE_H_DEFINED_glVertexAttribI1ui typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI1UIPROC) (GLuint index, GLuint x); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI1UIPROC GLeeFuncPtr_glVertexAttribI1ui; #define glVertexAttribI1ui GLeeFuncPtr_glVertexAttribI1ui #endif #ifndef GLEE_H_DEFINED_glVertexAttribI2ui #define GLEE_H_DEFINED_glVertexAttribI2ui typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI2UIPROC) (GLuint index, GLuint x, GLuint y); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI2UIPROC GLeeFuncPtr_glVertexAttribI2ui; #define glVertexAttribI2ui GLeeFuncPtr_glVertexAttribI2ui #endif #ifndef GLEE_H_DEFINED_glVertexAttribI3ui #define GLEE_H_DEFINED_glVertexAttribI3ui typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI3UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI3UIPROC GLeeFuncPtr_glVertexAttribI3ui; #define glVertexAttribI3ui GLeeFuncPtr_glVertexAttribI3ui #endif #ifndef GLEE_H_DEFINED_glVertexAttribI4ui #define GLEE_H_DEFINED_glVertexAttribI4ui typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI4UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI4UIPROC GLeeFuncPtr_glVertexAttribI4ui; #define glVertexAttribI4ui GLeeFuncPtr_glVertexAttribI4ui #endif #ifndef GLEE_H_DEFINED_glVertexAttribI1iv #define GLEE_H_DEFINED_glVertexAttribI1iv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI1IVPROC) (GLuint index, const GLint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI1IVPROC GLeeFuncPtr_glVertexAttribI1iv; #define glVertexAttribI1iv GLeeFuncPtr_glVertexAttribI1iv #endif #ifndef GLEE_H_DEFINED_glVertexAttribI2iv #define GLEE_H_DEFINED_glVertexAttribI2iv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI2IVPROC) (GLuint index, const GLint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI2IVPROC GLeeFuncPtr_glVertexAttribI2iv; #define glVertexAttribI2iv GLeeFuncPtr_glVertexAttribI2iv #endif #ifndef GLEE_H_DEFINED_glVertexAttribI3iv #define GLEE_H_DEFINED_glVertexAttribI3iv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI3IVPROC) (GLuint index, const GLint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI3IVPROC GLeeFuncPtr_glVertexAttribI3iv; #define glVertexAttribI3iv GLeeFuncPtr_glVertexAttribI3iv #endif #ifndef GLEE_H_DEFINED_glVertexAttribI4iv #define GLEE_H_DEFINED_glVertexAttribI4iv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI4IVPROC) (GLuint index, const GLint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI4IVPROC GLeeFuncPtr_glVertexAttribI4iv; #define glVertexAttribI4iv GLeeFuncPtr_glVertexAttribI4iv #endif #ifndef GLEE_H_DEFINED_glVertexAttribI1uiv #define GLEE_H_DEFINED_glVertexAttribI1uiv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI1UIVPROC) (GLuint index, const GLuint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI1UIVPROC GLeeFuncPtr_glVertexAttribI1uiv; #define glVertexAttribI1uiv GLeeFuncPtr_glVertexAttribI1uiv #endif #ifndef GLEE_H_DEFINED_glVertexAttribI2uiv #define GLEE_H_DEFINED_glVertexAttribI2uiv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI2UIVPROC) (GLuint index, const GLuint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI2UIVPROC GLeeFuncPtr_glVertexAttribI2uiv; #define glVertexAttribI2uiv GLeeFuncPtr_glVertexAttribI2uiv #endif #ifndef GLEE_H_DEFINED_glVertexAttribI3uiv #define GLEE_H_DEFINED_glVertexAttribI3uiv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI3UIVPROC) (GLuint index, const GLuint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI3UIVPROC GLeeFuncPtr_glVertexAttribI3uiv; #define glVertexAttribI3uiv GLeeFuncPtr_glVertexAttribI3uiv #endif #ifndef GLEE_H_DEFINED_glVertexAttribI4uiv #define GLEE_H_DEFINED_glVertexAttribI4uiv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI4UIVPROC) (GLuint index, const GLuint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI4UIVPROC GLeeFuncPtr_glVertexAttribI4uiv; #define glVertexAttribI4uiv GLeeFuncPtr_glVertexAttribI4uiv #endif #ifndef GLEE_H_DEFINED_glVertexAttribI4bv #define GLEE_H_DEFINED_glVertexAttribI4bv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI4BVPROC) (GLuint index, const GLbyte * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI4BVPROC GLeeFuncPtr_glVertexAttribI4bv; #define glVertexAttribI4bv GLeeFuncPtr_glVertexAttribI4bv #endif #ifndef GLEE_H_DEFINED_glVertexAttribI4sv #define GLEE_H_DEFINED_glVertexAttribI4sv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI4SVPROC) (GLuint index, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI4SVPROC GLeeFuncPtr_glVertexAttribI4sv; #define glVertexAttribI4sv GLeeFuncPtr_glVertexAttribI4sv #endif #ifndef GLEE_H_DEFINED_glVertexAttribI4ubv #define GLEE_H_DEFINED_glVertexAttribI4ubv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI4UBVPROC) (GLuint index, const GLubyte * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI4UBVPROC GLeeFuncPtr_glVertexAttribI4ubv; #define glVertexAttribI4ubv GLeeFuncPtr_glVertexAttribI4ubv #endif #ifndef GLEE_H_DEFINED_glVertexAttribI4usv #define GLEE_H_DEFINED_glVertexAttribI4usv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI4USVPROC) (GLuint index, const GLushort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI4USVPROC GLeeFuncPtr_glVertexAttribI4usv; #define glVertexAttribI4usv GLeeFuncPtr_glVertexAttribI4usv #endif #ifndef GLEE_H_DEFINED_glGetUniformuiv #define GLEE_H_DEFINED_glGetUniformuiv typedef void (APIENTRYP GLEEPFNGLGETUNIFORMUIVPROC) (GLuint program, GLint location, GLuint * params); GLEE_EXTERN GLEEPFNGLGETUNIFORMUIVPROC GLeeFuncPtr_glGetUniformuiv; #define glGetUniformuiv GLeeFuncPtr_glGetUniformuiv #endif #ifndef GLEE_H_DEFINED_glBindFragDataLocation #define GLEE_H_DEFINED_glBindFragDataLocation typedef void (APIENTRYP GLEEPFNGLBINDFRAGDATALOCATIONPROC) (GLuint program, GLuint color, const GLchar * name); GLEE_EXTERN GLEEPFNGLBINDFRAGDATALOCATIONPROC GLeeFuncPtr_glBindFragDataLocation; #define glBindFragDataLocation GLeeFuncPtr_glBindFragDataLocation #endif #ifndef GLEE_H_DEFINED_glGetFragDataLocation #define GLEE_H_DEFINED_glGetFragDataLocation typedef GLint (APIENTRYP GLEEPFNGLGETFRAGDATALOCATIONPROC) (GLuint program, const GLchar * name); GLEE_EXTERN GLEEPFNGLGETFRAGDATALOCATIONPROC GLeeFuncPtr_glGetFragDataLocation; #define glGetFragDataLocation GLeeFuncPtr_glGetFragDataLocation #endif #ifndef GLEE_H_DEFINED_glUniform1ui #define GLEE_H_DEFINED_glUniform1ui typedef void (APIENTRYP GLEEPFNGLUNIFORM1UIPROC) (GLint location, GLuint v0); GLEE_EXTERN GLEEPFNGLUNIFORM1UIPROC GLeeFuncPtr_glUniform1ui; #define glUniform1ui GLeeFuncPtr_glUniform1ui #endif #ifndef GLEE_H_DEFINED_glUniform2ui #define GLEE_H_DEFINED_glUniform2ui typedef void (APIENTRYP GLEEPFNGLUNIFORM2UIPROC) (GLint location, GLuint v0, GLuint v1); GLEE_EXTERN GLEEPFNGLUNIFORM2UIPROC GLeeFuncPtr_glUniform2ui; #define glUniform2ui GLeeFuncPtr_glUniform2ui #endif #ifndef GLEE_H_DEFINED_glUniform3ui #define GLEE_H_DEFINED_glUniform3ui typedef void (APIENTRYP GLEEPFNGLUNIFORM3UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); GLEE_EXTERN GLEEPFNGLUNIFORM3UIPROC GLeeFuncPtr_glUniform3ui; #define glUniform3ui GLeeFuncPtr_glUniform3ui #endif #ifndef GLEE_H_DEFINED_glUniform4ui #define GLEE_H_DEFINED_glUniform4ui typedef void (APIENTRYP GLEEPFNGLUNIFORM4UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); GLEE_EXTERN GLEEPFNGLUNIFORM4UIPROC GLeeFuncPtr_glUniform4ui; #define glUniform4ui GLeeFuncPtr_glUniform4ui #endif #ifndef GLEE_H_DEFINED_glUniform1uiv #define GLEE_H_DEFINED_glUniform1uiv typedef void (APIENTRYP GLEEPFNGLUNIFORM1UIVPROC) (GLint location, GLsizei count, const GLuint * value); GLEE_EXTERN GLEEPFNGLUNIFORM1UIVPROC GLeeFuncPtr_glUniform1uiv; #define glUniform1uiv GLeeFuncPtr_glUniform1uiv #endif #ifndef GLEE_H_DEFINED_glUniform2uiv #define GLEE_H_DEFINED_glUniform2uiv typedef void (APIENTRYP GLEEPFNGLUNIFORM2UIVPROC) (GLint location, GLsizei count, const GLuint * value); GLEE_EXTERN GLEEPFNGLUNIFORM2UIVPROC GLeeFuncPtr_glUniform2uiv; #define glUniform2uiv GLeeFuncPtr_glUniform2uiv #endif #ifndef GLEE_H_DEFINED_glUniform3uiv #define GLEE_H_DEFINED_glUniform3uiv typedef void (APIENTRYP GLEEPFNGLUNIFORM3UIVPROC) (GLint location, GLsizei count, const GLuint * value); GLEE_EXTERN GLEEPFNGLUNIFORM3UIVPROC GLeeFuncPtr_glUniform3uiv; #define glUniform3uiv GLeeFuncPtr_glUniform3uiv #endif #ifndef GLEE_H_DEFINED_glUniform4uiv #define GLEE_H_DEFINED_glUniform4uiv typedef void (APIENTRYP GLEEPFNGLUNIFORM4UIVPROC) (GLint location, GLsizei count, const GLuint * value); GLEE_EXTERN GLEEPFNGLUNIFORM4UIVPROC GLeeFuncPtr_glUniform4uiv; #define glUniform4uiv GLeeFuncPtr_glUniform4uiv #endif #ifndef GLEE_H_DEFINED_glTexParameterIiv #define GLEE_H_DEFINED_glTexParameterIiv typedef void (APIENTRYP GLEEPFNGLTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLTEXPARAMETERIIVPROC GLeeFuncPtr_glTexParameterIiv; #define glTexParameterIiv GLeeFuncPtr_glTexParameterIiv #endif #ifndef GLEE_H_DEFINED_glTexParameterIuiv #define GLEE_H_DEFINED_glTexParameterIuiv typedef void (APIENTRYP GLEEPFNGLTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, const GLuint * params); GLEE_EXTERN GLEEPFNGLTEXPARAMETERIUIVPROC GLeeFuncPtr_glTexParameterIuiv; #define glTexParameterIuiv GLeeFuncPtr_glTexParameterIuiv #endif #ifndef GLEE_H_DEFINED_glGetTexParameterIiv #define GLEE_H_DEFINED_glGetTexParameterIiv typedef void (APIENTRYP GLEEPFNGLGETTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETTEXPARAMETERIIVPROC GLeeFuncPtr_glGetTexParameterIiv; #define glGetTexParameterIiv GLeeFuncPtr_glGetTexParameterIiv #endif #ifndef GLEE_H_DEFINED_glGetTexParameterIuiv #define GLEE_H_DEFINED_glGetTexParameterIuiv typedef void (APIENTRYP GLEEPFNGLGETTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, GLuint * params); GLEE_EXTERN GLEEPFNGLGETTEXPARAMETERIUIVPROC GLeeFuncPtr_glGetTexParameterIuiv; #define glGetTexParameterIuiv GLeeFuncPtr_glGetTexParameterIuiv #endif #ifndef GLEE_H_DEFINED_glClearBufferiv #define GLEE_H_DEFINED_glClearBufferiv typedef void (APIENTRYP GLEEPFNGLCLEARBUFFERIVPROC) (GLenum buffer, GLint drawbuffer, const GLint * value); GLEE_EXTERN GLEEPFNGLCLEARBUFFERIVPROC GLeeFuncPtr_glClearBufferiv; #define glClearBufferiv GLeeFuncPtr_glClearBufferiv #endif #ifndef GLEE_H_DEFINED_glClearBufferuiv #define GLEE_H_DEFINED_glClearBufferuiv typedef void (APIENTRYP GLEEPFNGLCLEARBUFFERUIVPROC) (GLenum buffer, GLint drawbuffer, const GLuint * value); GLEE_EXTERN GLEEPFNGLCLEARBUFFERUIVPROC GLeeFuncPtr_glClearBufferuiv; #define glClearBufferuiv GLeeFuncPtr_glClearBufferuiv #endif #ifndef GLEE_H_DEFINED_glClearBufferfv #define GLEE_H_DEFINED_glClearBufferfv typedef void (APIENTRYP GLEEPFNGLCLEARBUFFERFVPROC) (GLenum buffer, GLint drawbuffer, const GLfloat * value); GLEE_EXTERN GLEEPFNGLCLEARBUFFERFVPROC GLeeFuncPtr_glClearBufferfv; #define glClearBufferfv GLeeFuncPtr_glClearBufferfv #endif #ifndef GLEE_H_DEFINED_glClearBufferfi #define GLEE_H_DEFINED_glClearBufferfi typedef void (APIENTRYP GLEEPFNGLCLEARBUFFERFIPROC) (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); GLEE_EXTERN GLEEPFNGLCLEARBUFFERFIPROC GLeeFuncPtr_glClearBufferfi; #define glClearBufferfi GLeeFuncPtr_glClearBufferfi #endif #ifndef GLEE_H_DEFINED_glGetStringi #define GLEE_H_DEFINED_glGetStringi typedef const GLubyte * (APIENTRYP GLEEPFNGLGETSTRINGIPROC) (GLenum name, GLuint index); GLEE_EXTERN GLEEPFNGLGETSTRINGIPROC GLeeFuncPtr_glGetStringi; #define glGetStringi GLeeFuncPtr_glGetStringi #endif #endif /* GL_VERSION_3_1 */ #ifndef GL_VERSION_3_1 #define GL_VERSION_3_1 1 #define __GLEE_GL_VERSION_3_1 1 /* Constants */ #define GL_SAMPLER_2D_RECT 0x8B63 #define GL_SAMPLER_2D_RECT_SHADOW 0x8B64 #define GL_SAMPLER_BUFFER 0x8DC2 #define GL_INT_SAMPLER_2D_RECT 0x8DCD #define GL_INT_SAMPLER_BUFFER 0x8DD0 #define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 #define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 #define GL_TEXTURE_BUFFER 0x8C2A #define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B #define GL_TEXTURE_BINDING_BUFFER 0x8C2C #define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D #define GL_TEXTURE_RECTANGLE 0x84F5 #define GL_TEXTURE_BINDING_RECTANGLE 0x84F6 #define GL_PROXY_TEXTURE_RECTANGLE 0x84F7 #define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 #define GL_RED_SNORM 0x8F90 #define GL_RG_SNORM 0x8F91 #define GL_RGB_SNORM 0x8F92 #define GL_RGBA_SNORM 0x8F93 #define GL_R8_SNORM 0x8F94 #define GL_RG8_SNORM 0x8F95 #define GL_RGB8_SNORM 0x8F96 #define GL_RGBA8_SNORM 0x8F97 #define GL_R16_SNORM 0x8F98 #define GL_RG16_SNORM 0x8F99 #define GL_RGB16_SNORM 0x8F9A #define GL_RGBA16_SNORM 0x8F9B #define GL_SIGNED_NORMALIZED 0x8F9C #define GL_PRIMITIVE_RESTART 0x8F9D #define GL_PRIMITIVE_RESTART_INDEX 0x8F9E #ifndef GLEE_H_DEFINED_glDrawArraysInstanced #define GLEE_H_DEFINED_glDrawArraysInstanced typedef void (APIENTRYP GLEEPFNGLDRAWARRAYSINSTANCEDPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount); GLEE_EXTERN GLEEPFNGLDRAWARRAYSINSTANCEDPROC GLeeFuncPtr_glDrawArraysInstanced; #define glDrawArraysInstanced GLeeFuncPtr_glDrawArraysInstanced #endif #ifndef GLEE_H_DEFINED_glDrawElementsInstanced #define GLEE_H_DEFINED_glDrawElementsInstanced typedef void (APIENTRYP GLEEPFNGLDRAWELEMENTSINSTANCEDPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLsizei instancecount); GLEE_EXTERN GLEEPFNGLDRAWELEMENTSINSTANCEDPROC GLeeFuncPtr_glDrawElementsInstanced; #define glDrawElementsInstanced GLeeFuncPtr_glDrawElementsInstanced #endif #ifndef GLEE_H_DEFINED_glTexBuffer #define GLEE_H_DEFINED_glTexBuffer typedef void (APIENTRYP GLEEPFNGLTEXBUFFERPROC) (GLenum target, GLenum internalformat, GLuint buffer); GLEE_EXTERN GLEEPFNGLTEXBUFFERPROC GLeeFuncPtr_glTexBuffer; #define glTexBuffer GLeeFuncPtr_glTexBuffer #endif #ifndef GLEE_H_DEFINED_glPrimitiveRestartIndex #define GLEE_H_DEFINED_glPrimitiveRestartIndex typedef void (APIENTRYP GLEEPFNGLPRIMITIVERESTARTINDEXPROC) (GLuint index); GLEE_EXTERN GLEEPFNGLPRIMITIVERESTARTINDEXPROC GLeeFuncPtr_glPrimitiveRestartIndex; #define glPrimitiveRestartIndex GLeeFuncPtr_glPrimitiveRestartIndex #endif #endif /* GL_VERSION_3_2 */ #ifndef GL_VERSION_3_2 #define GL_VERSION_3_2 1 #define __GLEE_GL_VERSION_3_2 1 /* Constants */ #define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 #define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 #define GL_LINES_ADJACENCY 0x000A #define GL_LINE_STRIP_ADJACENCY 0x000B #define GL_TRIANGLES_ADJACENCY 0x000C #define GL_TRIANGLE_STRIP_ADJACENCY 0x000D #define GL_PROGRAM_POINT_SIZE 0x8642 #define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29 #define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7 #define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8 #define GL_GEOMETRY_SHADER 0x8DD9 #define GL_GEOMETRY_VERTICES_OUT 0x8916 #define GL_GEOMETRY_INPUT_TYPE 0x8917 #define GL_GEOMETRY_OUTPUT_TYPE 0x8918 #define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF #define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0 #define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1 #define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 #define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123 #define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124 #define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 #define GL_CONTEXT_PROFILE_MASK 0x9126 #ifndef GLEE_H_DEFINED_glGetInteger64i_v #define GLEE_H_DEFINED_glGetInteger64i_v typedef void (APIENTRYP GLEEPFNGLGETINTEGER64I_VPROC) (GLenum target, GLuint index, GLint64 * data); GLEE_EXTERN GLEEPFNGLGETINTEGER64I_VPROC GLeeFuncPtr_glGetInteger64i_v; #define glGetInteger64i_v GLeeFuncPtr_glGetInteger64i_v #endif #ifndef GLEE_H_DEFINED_glGetBufferParameteri64v #define GLEE_H_DEFINED_glGetBufferParameteri64v typedef void (APIENTRYP GLEEPFNGLGETBUFFERPARAMETERI64VPROC) (GLenum target, GLenum pname, GLint64 * params); GLEE_EXTERN GLEEPFNGLGETBUFFERPARAMETERI64VPROC GLeeFuncPtr_glGetBufferParameteri64v; #define glGetBufferParameteri64v GLeeFuncPtr_glGetBufferParameteri64v #endif #ifndef GLEE_H_DEFINED_glFramebufferTexture #define GLEE_H_DEFINED_glFramebufferTexture typedef void (APIENTRYP GLEEPFNGLFRAMEBUFFERTEXTUREPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERTEXTUREPROC GLeeFuncPtr_glFramebufferTexture; #define glFramebufferTexture GLeeFuncPtr_glFramebufferTexture #endif #endif /* GL_VERSION_3_3 */ #ifndef GL_VERSION_3_3 #define GL_VERSION_3_3 1 #define __GLEE_GL_VERSION_3_3 1 /* Constants */ #define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE #ifndef GLEE_H_DEFINED_glVertexAttribDivisor #define GLEE_H_DEFINED_glVertexAttribDivisor typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBDIVISORPROC GLeeFuncPtr_glVertexAttribDivisor; #define glVertexAttribDivisor GLeeFuncPtr_glVertexAttribDivisor #endif #endif /* GL_VERSION_4_0 */ #ifndef GL_VERSION_4_0 #define GL_VERSION_4_0 1 #define __GLEE_GL_VERSION_4_0 1 /* Constants */ #define GL_SAMPLE_SHADING 0x8C36 #define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37 #define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E #define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F #define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009 #define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A #define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B #define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C #define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D #define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E #define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F #ifndef GLEE_H_DEFINED_glMinSampleShading #define GLEE_H_DEFINED_glMinSampleShading typedef void (APIENTRYP GLEEPFNGLMINSAMPLESHADINGPROC) (GLfloat value); GLEE_EXTERN GLEEPFNGLMINSAMPLESHADINGPROC GLeeFuncPtr_glMinSampleShading; #define glMinSampleShading GLeeFuncPtr_glMinSampleShading #endif #ifndef GLEE_H_DEFINED_glBlendEquationi #define GLEE_H_DEFINED_glBlendEquationi typedef void (APIENTRYP GLEEPFNGLBLENDEQUATIONIPROC) (GLuint buf, GLenum mode); GLEE_EXTERN GLEEPFNGLBLENDEQUATIONIPROC GLeeFuncPtr_glBlendEquationi; #define glBlendEquationi GLeeFuncPtr_glBlendEquationi #endif #ifndef GLEE_H_DEFINED_glBlendEquationSeparatei #define GLEE_H_DEFINED_glBlendEquationSeparatei typedef void (APIENTRYP GLEEPFNGLBLENDEQUATIONSEPARATEIPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); GLEE_EXTERN GLEEPFNGLBLENDEQUATIONSEPARATEIPROC GLeeFuncPtr_glBlendEquationSeparatei; #define glBlendEquationSeparatei GLeeFuncPtr_glBlendEquationSeparatei #endif #ifndef GLEE_H_DEFINED_glBlendFunci #define GLEE_H_DEFINED_glBlendFunci typedef void (APIENTRYP GLEEPFNGLBLENDFUNCIPROC) (GLuint buf, GLenum src, GLenum dst); GLEE_EXTERN GLEEPFNGLBLENDFUNCIPROC GLeeFuncPtr_glBlendFunci; #define glBlendFunci GLeeFuncPtr_glBlendFunci #endif #ifndef GLEE_H_DEFINED_glBlendFuncSeparatei #define GLEE_H_DEFINED_glBlendFuncSeparatei typedef void (APIENTRYP GLEEPFNGLBLENDFUNCSEPARATEIPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); GLEE_EXTERN GLEEPFNGLBLENDFUNCSEPARATEIPROC GLeeFuncPtr_glBlendFuncSeparatei; #define glBlendFuncSeparatei GLeeFuncPtr_glBlendFuncSeparatei #endif #endif /* GL_VERSION_4_1 */ #ifndef GL_VERSION_4_1 #define GL_VERSION_4_1 1 #define __GLEE_GL_VERSION_4_1 1 /* Constants */ #endif /* GL_VERSION_4_2 */ #ifndef GL_VERSION_4_2 #define GL_VERSION_4_2 1 #define __GLEE_GL_VERSION_4_2 1 /* Constants */ #endif /* GL_VERSION_4_3 */ #ifndef GL_VERSION_4_3 #define GL_VERSION_4_3 1 #define __GLEE_GL_VERSION_4_3 1 /* Constants */ #define GL_NUM_SHADING_LANGUAGE_VERSIONS 0x82E9 #define GL_VERTEX_ATTRIB_ARRAY_LONG 0x874E #endif /* GL_ARB_multitexture */ #ifndef GL_ARB_multitexture #define GL_ARB_multitexture 1 #define __GLEE_GL_ARB_multitexture 1 /* Constants */ #define GL_TEXTURE0_ARB 0x84C0 #define GL_TEXTURE1_ARB 0x84C1 #define GL_TEXTURE2_ARB 0x84C2 #define GL_TEXTURE3_ARB 0x84C3 #define GL_TEXTURE4_ARB 0x84C4 #define GL_TEXTURE5_ARB 0x84C5 #define GL_TEXTURE6_ARB 0x84C6 #define GL_TEXTURE7_ARB 0x84C7 #define GL_TEXTURE8_ARB 0x84C8 #define GL_TEXTURE9_ARB 0x84C9 #define GL_TEXTURE10_ARB 0x84CA #define GL_TEXTURE11_ARB 0x84CB #define GL_TEXTURE12_ARB 0x84CC #define GL_TEXTURE13_ARB 0x84CD #define GL_TEXTURE14_ARB 0x84CE #define GL_TEXTURE15_ARB 0x84CF #define GL_TEXTURE16_ARB 0x84D0 #define GL_TEXTURE17_ARB 0x84D1 #define GL_TEXTURE18_ARB 0x84D2 #define GL_TEXTURE19_ARB 0x84D3 #define GL_TEXTURE20_ARB 0x84D4 #define GL_TEXTURE21_ARB 0x84D5 #define GL_TEXTURE22_ARB 0x84D6 #define GL_TEXTURE23_ARB 0x84D7 #define GL_TEXTURE24_ARB 0x84D8 #define GL_TEXTURE25_ARB 0x84D9 #define GL_TEXTURE26_ARB 0x84DA #define GL_TEXTURE27_ARB 0x84DB #define GL_TEXTURE28_ARB 0x84DC #define GL_TEXTURE29_ARB 0x84DD #define GL_TEXTURE30_ARB 0x84DE #define GL_TEXTURE31_ARB 0x84DF #define GL_ACTIVE_TEXTURE_ARB 0x84E0 #define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 #define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 #ifndef GLEE_H_DEFINED_glActiveTextureARB #define GLEE_H_DEFINED_glActiveTextureARB typedef void (APIENTRYP GLEEPFNGLACTIVETEXTUREARBPROC) (GLenum texture); GLEE_EXTERN GLEEPFNGLACTIVETEXTUREARBPROC GLeeFuncPtr_glActiveTextureARB; #define glActiveTextureARB GLeeFuncPtr_glActiveTextureARB #endif #ifndef GLEE_H_DEFINED_glClientActiveTextureARB #define GLEE_H_DEFINED_glClientActiveTextureARB typedef void (APIENTRYP GLEEPFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); GLEE_EXTERN GLEEPFNGLCLIENTACTIVETEXTUREARBPROC GLeeFuncPtr_glClientActiveTextureARB; #define glClientActiveTextureARB GLeeFuncPtr_glClientActiveTextureARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1dARB #define GLEE_H_DEFINED_glMultiTexCoord1dARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1DARBPROC GLeeFuncPtr_glMultiTexCoord1dARB; #define glMultiTexCoord1dARB GLeeFuncPtr_glMultiTexCoord1dARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1dvARB #define GLEE_H_DEFINED_glMultiTexCoord1dvARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1DVARBPROC GLeeFuncPtr_glMultiTexCoord1dvARB; #define glMultiTexCoord1dvARB GLeeFuncPtr_glMultiTexCoord1dvARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1fARB #define GLEE_H_DEFINED_glMultiTexCoord1fARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1FARBPROC GLeeFuncPtr_glMultiTexCoord1fARB; #define glMultiTexCoord1fARB GLeeFuncPtr_glMultiTexCoord1fARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1fvARB #define GLEE_H_DEFINED_glMultiTexCoord1fvARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1FVARBPROC GLeeFuncPtr_glMultiTexCoord1fvARB; #define glMultiTexCoord1fvARB GLeeFuncPtr_glMultiTexCoord1fvARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1iARB #define GLEE_H_DEFINED_glMultiTexCoord1iARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1IARBPROC GLeeFuncPtr_glMultiTexCoord1iARB; #define glMultiTexCoord1iARB GLeeFuncPtr_glMultiTexCoord1iARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1ivARB #define GLEE_H_DEFINED_glMultiTexCoord1ivARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1IVARBPROC GLeeFuncPtr_glMultiTexCoord1ivARB; #define glMultiTexCoord1ivARB GLeeFuncPtr_glMultiTexCoord1ivARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1sARB #define GLEE_H_DEFINED_glMultiTexCoord1sARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1SARBPROC GLeeFuncPtr_glMultiTexCoord1sARB; #define glMultiTexCoord1sARB GLeeFuncPtr_glMultiTexCoord1sARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1svARB #define GLEE_H_DEFINED_glMultiTexCoord1svARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1SVARBPROC GLeeFuncPtr_glMultiTexCoord1svARB; #define glMultiTexCoord1svARB GLeeFuncPtr_glMultiTexCoord1svARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2dARB #define GLEE_H_DEFINED_glMultiTexCoord2dARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2DARBPROC GLeeFuncPtr_glMultiTexCoord2dARB; #define glMultiTexCoord2dARB GLeeFuncPtr_glMultiTexCoord2dARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2dvARB #define GLEE_H_DEFINED_glMultiTexCoord2dvARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2DVARBPROC GLeeFuncPtr_glMultiTexCoord2dvARB; #define glMultiTexCoord2dvARB GLeeFuncPtr_glMultiTexCoord2dvARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2fARB #define GLEE_H_DEFINED_glMultiTexCoord2fARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2FARBPROC GLeeFuncPtr_glMultiTexCoord2fARB; #define glMultiTexCoord2fARB GLeeFuncPtr_glMultiTexCoord2fARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2fvARB #define GLEE_H_DEFINED_glMultiTexCoord2fvARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2FVARBPROC GLeeFuncPtr_glMultiTexCoord2fvARB; #define glMultiTexCoord2fvARB GLeeFuncPtr_glMultiTexCoord2fvARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2iARB #define GLEE_H_DEFINED_glMultiTexCoord2iARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2IARBPROC GLeeFuncPtr_glMultiTexCoord2iARB; #define glMultiTexCoord2iARB GLeeFuncPtr_glMultiTexCoord2iARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2ivARB #define GLEE_H_DEFINED_glMultiTexCoord2ivARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2IVARBPROC GLeeFuncPtr_glMultiTexCoord2ivARB; #define glMultiTexCoord2ivARB GLeeFuncPtr_glMultiTexCoord2ivARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2sARB #define GLEE_H_DEFINED_glMultiTexCoord2sARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2SARBPROC GLeeFuncPtr_glMultiTexCoord2sARB; #define glMultiTexCoord2sARB GLeeFuncPtr_glMultiTexCoord2sARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2svARB #define GLEE_H_DEFINED_glMultiTexCoord2svARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2SVARBPROC GLeeFuncPtr_glMultiTexCoord2svARB; #define glMultiTexCoord2svARB GLeeFuncPtr_glMultiTexCoord2svARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3dARB #define GLEE_H_DEFINED_glMultiTexCoord3dARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3DARBPROC GLeeFuncPtr_glMultiTexCoord3dARB; #define glMultiTexCoord3dARB GLeeFuncPtr_glMultiTexCoord3dARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3dvARB #define GLEE_H_DEFINED_glMultiTexCoord3dvARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3DVARBPROC GLeeFuncPtr_glMultiTexCoord3dvARB; #define glMultiTexCoord3dvARB GLeeFuncPtr_glMultiTexCoord3dvARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3fARB #define GLEE_H_DEFINED_glMultiTexCoord3fARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3FARBPROC GLeeFuncPtr_glMultiTexCoord3fARB; #define glMultiTexCoord3fARB GLeeFuncPtr_glMultiTexCoord3fARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3fvARB #define GLEE_H_DEFINED_glMultiTexCoord3fvARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3FVARBPROC GLeeFuncPtr_glMultiTexCoord3fvARB; #define glMultiTexCoord3fvARB GLeeFuncPtr_glMultiTexCoord3fvARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3iARB #define GLEE_H_DEFINED_glMultiTexCoord3iARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3IARBPROC GLeeFuncPtr_glMultiTexCoord3iARB; #define glMultiTexCoord3iARB GLeeFuncPtr_glMultiTexCoord3iARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3ivARB #define GLEE_H_DEFINED_glMultiTexCoord3ivARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3IVARBPROC GLeeFuncPtr_glMultiTexCoord3ivARB; #define glMultiTexCoord3ivARB GLeeFuncPtr_glMultiTexCoord3ivARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3sARB #define GLEE_H_DEFINED_glMultiTexCoord3sARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3SARBPROC GLeeFuncPtr_glMultiTexCoord3sARB; #define glMultiTexCoord3sARB GLeeFuncPtr_glMultiTexCoord3sARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3svARB #define GLEE_H_DEFINED_glMultiTexCoord3svARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3SVARBPROC GLeeFuncPtr_glMultiTexCoord3svARB; #define glMultiTexCoord3svARB GLeeFuncPtr_glMultiTexCoord3svARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4dARB #define GLEE_H_DEFINED_glMultiTexCoord4dARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4DARBPROC GLeeFuncPtr_glMultiTexCoord4dARB; #define glMultiTexCoord4dARB GLeeFuncPtr_glMultiTexCoord4dARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4dvARB #define GLEE_H_DEFINED_glMultiTexCoord4dvARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4DVARBPROC GLeeFuncPtr_glMultiTexCoord4dvARB; #define glMultiTexCoord4dvARB GLeeFuncPtr_glMultiTexCoord4dvARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4fARB #define GLEE_H_DEFINED_glMultiTexCoord4fARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4FARBPROC GLeeFuncPtr_glMultiTexCoord4fARB; #define glMultiTexCoord4fARB GLeeFuncPtr_glMultiTexCoord4fARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4fvARB #define GLEE_H_DEFINED_glMultiTexCoord4fvARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4FVARBPROC GLeeFuncPtr_glMultiTexCoord4fvARB; #define glMultiTexCoord4fvARB GLeeFuncPtr_glMultiTexCoord4fvARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4iARB #define GLEE_H_DEFINED_glMultiTexCoord4iARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4IARBPROC GLeeFuncPtr_glMultiTexCoord4iARB; #define glMultiTexCoord4iARB GLeeFuncPtr_glMultiTexCoord4iARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4ivARB #define GLEE_H_DEFINED_glMultiTexCoord4ivARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4IVARBPROC GLeeFuncPtr_glMultiTexCoord4ivARB; #define glMultiTexCoord4ivARB GLeeFuncPtr_glMultiTexCoord4ivARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4sARB #define GLEE_H_DEFINED_glMultiTexCoord4sARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4SARBPROC GLeeFuncPtr_glMultiTexCoord4sARB; #define glMultiTexCoord4sARB GLeeFuncPtr_glMultiTexCoord4sARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4svARB #define GLEE_H_DEFINED_glMultiTexCoord4svARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4SVARBPROC GLeeFuncPtr_glMultiTexCoord4svARB; #define glMultiTexCoord4svARB GLeeFuncPtr_glMultiTexCoord4svARB #endif #endif /* GL_ARB_transpose_matrix */ #ifndef GL_ARB_transpose_matrix #define GL_ARB_transpose_matrix 1 #define __GLEE_GL_ARB_transpose_matrix 1 /* Constants */ #define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3 #define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4 #define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5 #define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6 #ifndef GLEE_H_DEFINED_glLoadTransposeMatrixfARB #define GLEE_H_DEFINED_glLoadTransposeMatrixfARB typedef void (APIENTRYP GLEEPFNGLLOADTRANSPOSEMATRIXFARBPROC) (const GLfloat * m); GLEE_EXTERN GLEEPFNGLLOADTRANSPOSEMATRIXFARBPROC GLeeFuncPtr_glLoadTransposeMatrixfARB; #define glLoadTransposeMatrixfARB GLeeFuncPtr_glLoadTransposeMatrixfARB #endif #ifndef GLEE_H_DEFINED_glLoadTransposeMatrixdARB #define GLEE_H_DEFINED_glLoadTransposeMatrixdARB typedef void (APIENTRYP GLEEPFNGLLOADTRANSPOSEMATRIXDARBPROC) (const GLdouble * m); GLEE_EXTERN GLEEPFNGLLOADTRANSPOSEMATRIXDARBPROC GLeeFuncPtr_glLoadTransposeMatrixdARB; #define glLoadTransposeMatrixdARB GLeeFuncPtr_glLoadTransposeMatrixdARB #endif #ifndef GLEE_H_DEFINED_glMultTransposeMatrixfARB #define GLEE_H_DEFINED_glMultTransposeMatrixfARB typedef void (APIENTRYP GLEEPFNGLMULTTRANSPOSEMATRIXFARBPROC) (const GLfloat * m); GLEE_EXTERN GLEEPFNGLMULTTRANSPOSEMATRIXFARBPROC GLeeFuncPtr_glMultTransposeMatrixfARB; #define glMultTransposeMatrixfARB GLeeFuncPtr_glMultTransposeMatrixfARB #endif #ifndef GLEE_H_DEFINED_glMultTransposeMatrixdARB #define GLEE_H_DEFINED_glMultTransposeMatrixdARB typedef void (APIENTRYP GLEEPFNGLMULTTRANSPOSEMATRIXDARBPROC) (const GLdouble * m); GLEE_EXTERN GLEEPFNGLMULTTRANSPOSEMATRIXDARBPROC GLeeFuncPtr_glMultTransposeMatrixdARB; #define glMultTransposeMatrixdARB GLeeFuncPtr_glMultTransposeMatrixdARB #endif #endif /* GL_ARB_multisample */ #ifndef GL_ARB_multisample #define GL_ARB_multisample 1 #define __GLEE_GL_ARB_multisample 1 /* Constants */ #define GL_MULTISAMPLE_ARB 0x809D #define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E #define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F #define GL_SAMPLE_COVERAGE_ARB 0x80A0 #define GL_SAMPLE_BUFFERS_ARB 0x80A8 #define GL_SAMPLES_ARB 0x80A9 #define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA #define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB #define GL_MULTISAMPLE_BIT_ARB 0x20000000 #ifndef GLEE_H_DEFINED_glSampleCoverageARB #define GLEE_H_DEFINED_glSampleCoverageARB typedef void (APIENTRYP GLEEPFNGLSAMPLECOVERAGEARBPROC) (GLfloat value, GLboolean invert); GLEE_EXTERN GLEEPFNGLSAMPLECOVERAGEARBPROC GLeeFuncPtr_glSampleCoverageARB; #define glSampleCoverageARB GLeeFuncPtr_glSampleCoverageARB #endif #endif /* GL_ARB_texture_env_add */ #ifndef GL_ARB_texture_env_add #define GL_ARB_texture_env_add 1 #define __GLEE_GL_ARB_texture_env_add 1 /* Constants */ #endif /* GL_ARB_texture_cube_map */ #ifndef GL_ARB_texture_cube_map #define GL_ARB_texture_cube_map 1 #define __GLEE_GL_ARB_texture_cube_map 1 /* Constants */ #define GL_NORMAL_MAP_ARB 0x8511 #define GL_REFLECTION_MAP_ARB 0x8512 #define GL_TEXTURE_CUBE_MAP_ARB 0x8513 #define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A #define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B #define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C #endif /* GL_ARB_texture_compression */ #ifndef GL_ARB_texture_compression #define GL_ARB_texture_compression 1 #define __GLEE_GL_ARB_texture_compression 1 /* Constants */ #define GL_COMPRESSED_ALPHA_ARB 0x84E9 #define GL_COMPRESSED_LUMINANCE_ARB 0x84EA #define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB #define GL_COMPRESSED_INTENSITY_ARB 0x84EC #define GL_COMPRESSED_RGB_ARB 0x84ED #define GL_COMPRESSED_RGBA_ARB 0x84EE #define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF #define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0 #define GL_TEXTURE_COMPRESSED_ARB 0x86A1 #define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 #define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 #ifndef GLEE_H_DEFINED_glCompressedTexImage3DARB #define GLEE_H_DEFINED_glCompressedTexImage3DARB typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * data); GLEE_EXTERN GLEEPFNGLCOMPRESSEDTEXIMAGE3DARBPROC GLeeFuncPtr_glCompressedTexImage3DARB; #define glCompressedTexImage3DARB GLeeFuncPtr_glCompressedTexImage3DARB #endif #ifndef GLEE_H_DEFINED_glCompressedTexImage2DARB #define GLEE_H_DEFINED_glCompressedTexImage2DARB typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data); GLEE_EXTERN GLEEPFNGLCOMPRESSEDTEXIMAGE2DARBPROC GLeeFuncPtr_glCompressedTexImage2DARB; #define glCompressedTexImage2DARB GLeeFuncPtr_glCompressedTexImage2DARB #endif #ifndef GLEE_H_DEFINED_glCompressedTexImage1DARB #define GLEE_H_DEFINED_glCompressedTexImage1DARB typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid * data); GLEE_EXTERN GLEEPFNGLCOMPRESSEDTEXIMAGE1DARBPROC GLeeFuncPtr_glCompressedTexImage1DARB; #define glCompressedTexImage1DARB GLeeFuncPtr_glCompressedTexImage1DARB #endif #ifndef GLEE_H_DEFINED_glCompressedTexSubImage3DARB #define GLEE_H_DEFINED_glCompressedTexSubImage3DARB typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * data); GLEE_EXTERN GLEEPFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC GLeeFuncPtr_glCompressedTexSubImage3DARB; #define glCompressedTexSubImage3DARB GLeeFuncPtr_glCompressedTexSubImage3DARB #endif #ifndef GLEE_H_DEFINED_glCompressedTexSubImage2DARB #define GLEE_H_DEFINED_glCompressedTexSubImage2DARB typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data); GLEE_EXTERN GLEEPFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC GLeeFuncPtr_glCompressedTexSubImage2DARB; #define glCompressedTexSubImage2DARB GLeeFuncPtr_glCompressedTexSubImage2DARB #endif #ifndef GLEE_H_DEFINED_glCompressedTexSubImage1DARB #define GLEE_H_DEFINED_glCompressedTexSubImage1DARB typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * data); GLEE_EXTERN GLEEPFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC GLeeFuncPtr_glCompressedTexSubImage1DARB; #define glCompressedTexSubImage1DARB GLeeFuncPtr_glCompressedTexSubImage1DARB #endif #ifndef GLEE_H_DEFINED_glGetCompressedTexImageARB #define GLEE_H_DEFINED_glGetCompressedTexImageARB typedef void (APIENTRYP GLEEPFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint level, GLvoid * img); GLEE_EXTERN GLEEPFNGLGETCOMPRESSEDTEXIMAGEARBPROC GLeeFuncPtr_glGetCompressedTexImageARB; #define glGetCompressedTexImageARB GLeeFuncPtr_glGetCompressedTexImageARB #endif #endif /* GL_ARB_texture_border_clamp */ #ifndef GL_ARB_texture_border_clamp #define GL_ARB_texture_border_clamp 1 #define __GLEE_GL_ARB_texture_border_clamp 1 /* Constants */ #define GL_CLAMP_TO_BORDER_ARB 0x812D #endif /* GL_ARB_point_parameters */ #ifndef GL_ARB_point_parameters #define GL_ARB_point_parameters 1 #define __GLEE_GL_ARB_point_parameters 1 /* Constants */ #define GL_POINT_SIZE_MIN_ARB 0x8126 #define GL_POINT_SIZE_MAX_ARB 0x8127 #define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 #define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129 #ifndef GLEE_H_DEFINED_glPointParameterfARB #define GLEE_H_DEFINED_glPointParameterfARB typedef void (APIENTRYP GLEEPFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLPOINTPARAMETERFARBPROC GLeeFuncPtr_glPointParameterfARB; #define glPointParameterfARB GLeeFuncPtr_glPointParameterfARB #endif #ifndef GLEE_H_DEFINED_glPointParameterfvARB #define GLEE_H_DEFINED_glPointParameterfvARB typedef void (APIENTRYP GLEEPFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLPOINTPARAMETERFVARBPROC GLeeFuncPtr_glPointParameterfvARB; #define glPointParameterfvARB GLeeFuncPtr_glPointParameterfvARB #endif #endif /* GL_ARB_vertex_blend */ #ifndef GL_ARB_vertex_blend #define GL_ARB_vertex_blend 1 #define __GLEE_GL_ARB_vertex_blend 1 /* Constants */ #define GL_MAX_VERTEX_UNITS_ARB 0x86A4 #define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 #define GL_WEIGHT_SUM_UNITY_ARB 0x86A6 #define GL_VERTEX_BLEND_ARB 0x86A7 #define GL_CURRENT_WEIGHT_ARB 0x86A8 #define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 #define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA #define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB #define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC #define GL_WEIGHT_ARRAY_ARB 0x86AD #define GL_MODELVIEW0_ARB 0x1700 #define GL_MODELVIEW1_ARB 0x850A #define GL_MODELVIEW2_ARB 0x8722 #define GL_MODELVIEW3_ARB 0x8723 #define GL_MODELVIEW4_ARB 0x8724 #define GL_MODELVIEW5_ARB 0x8725 #define GL_MODELVIEW6_ARB 0x8726 #define GL_MODELVIEW7_ARB 0x8727 #define GL_MODELVIEW8_ARB 0x8728 #define GL_MODELVIEW9_ARB 0x8729 #define GL_MODELVIEW10_ARB 0x872A #define GL_MODELVIEW11_ARB 0x872B #define GL_MODELVIEW12_ARB 0x872C #define GL_MODELVIEW13_ARB 0x872D #define GL_MODELVIEW14_ARB 0x872E #define GL_MODELVIEW15_ARB 0x872F #define GL_MODELVIEW16_ARB 0x8730 #define GL_MODELVIEW17_ARB 0x8731 #define GL_MODELVIEW18_ARB 0x8732 #define GL_MODELVIEW19_ARB 0x8733 #define GL_MODELVIEW20_ARB 0x8734 #define GL_MODELVIEW21_ARB 0x8735 #define GL_MODELVIEW22_ARB 0x8736 #define GL_MODELVIEW23_ARB 0x8737 #define GL_MODELVIEW24_ARB 0x8738 #define GL_MODELVIEW25_ARB 0x8739 #define GL_MODELVIEW26_ARB 0x873A #define GL_MODELVIEW27_ARB 0x873B #define GL_MODELVIEW28_ARB 0x873C #define GL_MODELVIEW29_ARB 0x873D #define GL_MODELVIEW30_ARB 0x873E #define GL_MODELVIEW31_ARB 0x873F #ifndef GLEE_H_DEFINED_glWeightbvARB #define GLEE_H_DEFINED_glWeightbvARB typedef void (APIENTRYP GLEEPFNGLWEIGHTBVARBPROC) (GLint size, const GLbyte * weights); GLEE_EXTERN GLEEPFNGLWEIGHTBVARBPROC GLeeFuncPtr_glWeightbvARB; #define glWeightbvARB GLeeFuncPtr_glWeightbvARB #endif #ifndef GLEE_H_DEFINED_glWeightsvARB #define GLEE_H_DEFINED_glWeightsvARB typedef void (APIENTRYP GLEEPFNGLWEIGHTSVARBPROC) (GLint size, const GLshort * weights); GLEE_EXTERN GLEEPFNGLWEIGHTSVARBPROC GLeeFuncPtr_glWeightsvARB; #define glWeightsvARB GLeeFuncPtr_glWeightsvARB #endif #ifndef GLEE_H_DEFINED_glWeightivARB #define GLEE_H_DEFINED_glWeightivARB typedef void (APIENTRYP GLEEPFNGLWEIGHTIVARBPROC) (GLint size, const GLint * weights); GLEE_EXTERN GLEEPFNGLWEIGHTIVARBPROC GLeeFuncPtr_glWeightivARB; #define glWeightivARB GLeeFuncPtr_glWeightivARB #endif #ifndef GLEE_H_DEFINED_glWeightfvARB #define GLEE_H_DEFINED_glWeightfvARB typedef void (APIENTRYP GLEEPFNGLWEIGHTFVARBPROC) (GLint size, const GLfloat * weights); GLEE_EXTERN GLEEPFNGLWEIGHTFVARBPROC GLeeFuncPtr_glWeightfvARB; #define glWeightfvARB GLeeFuncPtr_glWeightfvARB #endif #ifndef GLEE_H_DEFINED_glWeightdvARB #define GLEE_H_DEFINED_glWeightdvARB typedef void (APIENTRYP GLEEPFNGLWEIGHTDVARBPROC) (GLint size, const GLdouble * weights); GLEE_EXTERN GLEEPFNGLWEIGHTDVARBPROC GLeeFuncPtr_glWeightdvARB; #define glWeightdvARB GLeeFuncPtr_glWeightdvARB #endif #ifndef GLEE_H_DEFINED_glWeightubvARB #define GLEE_H_DEFINED_glWeightubvARB typedef void (APIENTRYP GLEEPFNGLWEIGHTUBVARBPROC) (GLint size, const GLubyte * weights); GLEE_EXTERN GLEEPFNGLWEIGHTUBVARBPROC GLeeFuncPtr_glWeightubvARB; #define glWeightubvARB GLeeFuncPtr_glWeightubvARB #endif #ifndef GLEE_H_DEFINED_glWeightusvARB #define GLEE_H_DEFINED_glWeightusvARB typedef void (APIENTRYP GLEEPFNGLWEIGHTUSVARBPROC) (GLint size, const GLushort * weights); GLEE_EXTERN GLEEPFNGLWEIGHTUSVARBPROC GLeeFuncPtr_glWeightusvARB; #define glWeightusvARB GLeeFuncPtr_glWeightusvARB #endif #ifndef GLEE_H_DEFINED_glWeightuivARB #define GLEE_H_DEFINED_glWeightuivARB typedef void (APIENTRYP GLEEPFNGLWEIGHTUIVARBPROC) (GLint size, const GLuint * weights); GLEE_EXTERN GLEEPFNGLWEIGHTUIVARBPROC GLeeFuncPtr_glWeightuivARB; #define glWeightuivARB GLeeFuncPtr_glWeightuivARB #endif #ifndef GLEE_H_DEFINED_glWeightPointerARB #define GLEE_H_DEFINED_glWeightPointerARB typedef void (APIENTRYP GLEEPFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLWEIGHTPOINTERARBPROC GLeeFuncPtr_glWeightPointerARB; #define glWeightPointerARB GLeeFuncPtr_glWeightPointerARB #endif #ifndef GLEE_H_DEFINED_glVertexBlendARB #define GLEE_H_DEFINED_glVertexBlendARB typedef void (APIENTRYP GLEEPFNGLVERTEXBLENDARBPROC) (GLint count); GLEE_EXTERN GLEEPFNGLVERTEXBLENDARBPROC GLeeFuncPtr_glVertexBlendARB; #define glVertexBlendARB GLeeFuncPtr_glVertexBlendARB #endif #endif /* GL_ARB_matrix_palette */ #ifndef GL_ARB_matrix_palette #define GL_ARB_matrix_palette 1 #define __GLEE_GL_ARB_matrix_palette 1 /* Constants */ #define GL_MATRIX_PALETTE_ARB 0x8840 #define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 #define GL_MAX_PALETTE_MATRICES_ARB 0x8842 #define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 #define GL_MATRIX_INDEX_ARRAY_ARB 0x8844 #define GL_CURRENT_MATRIX_INDEX_ARB 0x8845 #define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 #define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 #define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 #define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 #ifndef GLEE_H_DEFINED_glCurrentPaletteMatrixARB #define GLEE_H_DEFINED_glCurrentPaletteMatrixARB typedef void (APIENTRYP GLEEPFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index); GLEE_EXTERN GLEEPFNGLCURRENTPALETTEMATRIXARBPROC GLeeFuncPtr_glCurrentPaletteMatrixARB; #define glCurrentPaletteMatrixARB GLeeFuncPtr_glCurrentPaletteMatrixARB #endif #ifndef GLEE_H_DEFINED_glMatrixIndexubvARB #define GLEE_H_DEFINED_glMatrixIndexubvARB typedef void (APIENTRYP GLEEPFNGLMATRIXINDEXUBVARBPROC) (GLint size, const GLubyte * indices); GLEE_EXTERN GLEEPFNGLMATRIXINDEXUBVARBPROC GLeeFuncPtr_glMatrixIndexubvARB; #define glMatrixIndexubvARB GLeeFuncPtr_glMatrixIndexubvARB #endif #ifndef GLEE_H_DEFINED_glMatrixIndexusvARB #define GLEE_H_DEFINED_glMatrixIndexusvARB typedef void (APIENTRYP GLEEPFNGLMATRIXINDEXUSVARBPROC) (GLint size, const GLushort * indices); GLEE_EXTERN GLEEPFNGLMATRIXINDEXUSVARBPROC GLeeFuncPtr_glMatrixIndexusvARB; #define glMatrixIndexusvARB GLeeFuncPtr_glMatrixIndexusvARB #endif #ifndef GLEE_H_DEFINED_glMatrixIndexuivARB #define GLEE_H_DEFINED_glMatrixIndexuivARB typedef void (APIENTRYP GLEEPFNGLMATRIXINDEXUIVARBPROC) (GLint size, const GLuint * indices); GLEE_EXTERN GLEEPFNGLMATRIXINDEXUIVARBPROC GLeeFuncPtr_glMatrixIndexuivARB; #define glMatrixIndexuivARB GLeeFuncPtr_glMatrixIndexuivARB #endif #ifndef GLEE_H_DEFINED_glMatrixIndexPointerARB #define GLEE_H_DEFINED_glMatrixIndexPointerARB typedef void (APIENTRYP GLEEPFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLMATRIXINDEXPOINTERARBPROC GLeeFuncPtr_glMatrixIndexPointerARB; #define glMatrixIndexPointerARB GLeeFuncPtr_glMatrixIndexPointerARB #endif #endif /* GL_ARB_texture_env_combine */ #ifndef GL_ARB_texture_env_combine #define GL_ARB_texture_env_combine 1 #define __GLEE_GL_ARB_texture_env_combine 1 /* Constants */ #define GL_COMBINE_ARB 0x8570 #define GL_COMBINE_RGB_ARB 0x8571 #define GL_COMBINE_ALPHA_ARB 0x8572 #define GL_SOURCE0_RGB_ARB 0x8580 #define GL_SOURCE1_RGB_ARB 0x8581 #define GL_SOURCE2_RGB_ARB 0x8582 #define GL_SOURCE0_ALPHA_ARB 0x8588 #define GL_SOURCE1_ALPHA_ARB 0x8589 #define GL_SOURCE2_ALPHA_ARB 0x858A #define GL_OPERAND0_RGB_ARB 0x8590 #define GL_OPERAND1_RGB_ARB 0x8591 #define GL_OPERAND2_RGB_ARB 0x8592 #define GL_OPERAND0_ALPHA_ARB 0x8598 #define GL_OPERAND1_ALPHA_ARB 0x8599 #define GL_OPERAND2_ALPHA_ARB 0x859A #define GL_RGB_SCALE_ARB 0x8573 #define GL_ADD_SIGNED_ARB 0x8574 #define GL_INTERPOLATE_ARB 0x8575 #define GL_SUBTRACT_ARB 0x84E7 #define GL_CONSTANT_ARB 0x8576 #define GL_PRIMARY_COLOR_ARB 0x8577 #define GL_PREVIOUS_ARB 0x8578 #endif /* GL_ARB_texture_env_crossbar */ #ifndef GL_ARB_texture_env_crossbar #define GL_ARB_texture_env_crossbar 1 #define __GLEE_GL_ARB_texture_env_crossbar 1 /* Constants */ #endif /* GL_ARB_texture_env_dot3 */ #ifndef GL_ARB_texture_env_dot3 #define GL_ARB_texture_env_dot3 1 #define __GLEE_GL_ARB_texture_env_dot3 1 /* Constants */ #define GL_DOT3_RGB_ARB 0x86AE #define GL_DOT3_RGBA_ARB 0x86AF #endif /* GL_ARB_texture_mirrored_repeat */ #ifndef GL_ARB_texture_mirrored_repeat #define GL_ARB_texture_mirrored_repeat 1 #define __GLEE_GL_ARB_texture_mirrored_repeat 1 /* Constants */ #define GL_MIRRORED_REPEAT_ARB 0x8370 #endif /* GL_ARB_depth_texture */ #ifndef GL_ARB_depth_texture #define GL_ARB_depth_texture 1 #define __GLEE_GL_ARB_depth_texture 1 /* Constants */ #define GL_DEPTH_COMPONENT16_ARB 0x81A5 #define GL_DEPTH_COMPONENT24_ARB 0x81A6 #define GL_DEPTH_COMPONENT32_ARB 0x81A7 #define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A #define GL_DEPTH_TEXTURE_MODE_ARB 0x884B #endif /* GL_ARB_shadow */ #ifndef GL_ARB_shadow #define GL_ARB_shadow 1 #define __GLEE_GL_ARB_shadow 1 /* Constants */ #define GL_TEXTURE_COMPARE_MODE_ARB 0x884C #define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D #define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E #endif /* GL_ARB_shadow_ambient */ #ifndef GL_ARB_shadow_ambient #define GL_ARB_shadow_ambient 1 #define __GLEE_GL_ARB_shadow_ambient 1 /* Constants */ #define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF #endif /* GL_ARB_window_pos */ #ifndef GL_ARB_window_pos #define GL_ARB_window_pos 1 #define __GLEE_GL_ARB_window_pos 1 /* Constants */ #ifndef GLEE_H_DEFINED_glWindowPos2dARB #define GLEE_H_DEFINED_glWindowPos2dARB typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y); GLEE_EXTERN GLEEPFNGLWINDOWPOS2DARBPROC GLeeFuncPtr_glWindowPos2dARB; #define glWindowPos2dARB GLeeFuncPtr_glWindowPos2dARB #endif #ifndef GLEE_H_DEFINED_glWindowPos2dvARB #define GLEE_H_DEFINED_glWindowPos2dvARB typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2DVARBPROC) (const GLdouble * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS2DVARBPROC GLeeFuncPtr_glWindowPos2dvARB; #define glWindowPos2dvARB GLeeFuncPtr_glWindowPos2dvARB #endif #ifndef GLEE_H_DEFINED_glWindowPos2fARB #define GLEE_H_DEFINED_glWindowPos2fARB typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y); GLEE_EXTERN GLEEPFNGLWINDOWPOS2FARBPROC GLeeFuncPtr_glWindowPos2fARB; #define glWindowPos2fARB GLeeFuncPtr_glWindowPos2fARB #endif #ifndef GLEE_H_DEFINED_glWindowPos2fvARB #define GLEE_H_DEFINED_glWindowPos2fvARB typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2FVARBPROC) (const GLfloat * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS2FVARBPROC GLeeFuncPtr_glWindowPos2fvARB; #define glWindowPos2fvARB GLeeFuncPtr_glWindowPos2fvARB #endif #ifndef GLEE_H_DEFINED_glWindowPos2iARB #define GLEE_H_DEFINED_glWindowPos2iARB typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y); GLEE_EXTERN GLEEPFNGLWINDOWPOS2IARBPROC GLeeFuncPtr_glWindowPos2iARB; #define glWindowPos2iARB GLeeFuncPtr_glWindowPos2iARB #endif #ifndef GLEE_H_DEFINED_glWindowPos2ivARB #define GLEE_H_DEFINED_glWindowPos2ivARB typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2IVARBPROC) (const GLint * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS2IVARBPROC GLeeFuncPtr_glWindowPos2ivARB; #define glWindowPos2ivARB GLeeFuncPtr_glWindowPos2ivARB #endif #ifndef GLEE_H_DEFINED_glWindowPos2sARB #define GLEE_H_DEFINED_glWindowPos2sARB typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y); GLEE_EXTERN GLEEPFNGLWINDOWPOS2SARBPROC GLeeFuncPtr_glWindowPos2sARB; #define glWindowPos2sARB GLeeFuncPtr_glWindowPos2sARB #endif #ifndef GLEE_H_DEFINED_glWindowPos2svARB #define GLEE_H_DEFINED_glWindowPos2svARB typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2SVARBPROC) (const GLshort * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS2SVARBPROC GLeeFuncPtr_glWindowPos2svARB; #define glWindowPos2svARB GLeeFuncPtr_glWindowPos2svARB #endif #ifndef GLEE_H_DEFINED_glWindowPos3dARB #define GLEE_H_DEFINED_glWindowPos3dARB typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z); GLEE_EXTERN GLEEPFNGLWINDOWPOS3DARBPROC GLeeFuncPtr_glWindowPos3dARB; #define glWindowPos3dARB GLeeFuncPtr_glWindowPos3dARB #endif #ifndef GLEE_H_DEFINED_glWindowPos3dvARB #define GLEE_H_DEFINED_glWindowPos3dvARB typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3DVARBPROC) (const GLdouble * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS3DVARBPROC GLeeFuncPtr_glWindowPos3dvARB; #define glWindowPos3dvARB GLeeFuncPtr_glWindowPos3dvARB #endif #ifndef GLEE_H_DEFINED_glWindowPos3fARB #define GLEE_H_DEFINED_glWindowPos3fARB typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLWINDOWPOS3FARBPROC GLeeFuncPtr_glWindowPos3fARB; #define glWindowPos3fARB GLeeFuncPtr_glWindowPos3fARB #endif #ifndef GLEE_H_DEFINED_glWindowPos3fvARB #define GLEE_H_DEFINED_glWindowPos3fvARB typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3FVARBPROC) (const GLfloat * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS3FVARBPROC GLeeFuncPtr_glWindowPos3fvARB; #define glWindowPos3fvARB GLeeFuncPtr_glWindowPos3fvARB #endif #ifndef GLEE_H_DEFINED_glWindowPos3iARB #define GLEE_H_DEFINED_glWindowPos3iARB typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z); GLEE_EXTERN GLEEPFNGLWINDOWPOS3IARBPROC GLeeFuncPtr_glWindowPos3iARB; #define glWindowPos3iARB GLeeFuncPtr_glWindowPos3iARB #endif #ifndef GLEE_H_DEFINED_glWindowPos3ivARB #define GLEE_H_DEFINED_glWindowPos3ivARB typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3IVARBPROC) (const GLint * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS3IVARBPROC GLeeFuncPtr_glWindowPos3ivARB; #define glWindowPos3ivARB GLeeFuncPtr_glWindowPos3ivARB #endif #ifndef GLEE_H_DEFINED_glWindowPos3sARB #define GLEE_H_DEFINED_glWindowPos3sARB typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z); GLEE_EXTERN GLEEPFNGLWINDOWPOS3SARBPROC GLeeFuncPtr_glWindowPos3sARB; #define glWindowPos3sARB GLeeFuncPtr_glWindowPos3sARB #endif #ifndef GLEE_H_DEFINED_glWindowPos3svARB #define GLEE_H_DEFINED_glWindowPos3svARB typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3SVARBPROC) (const GLshort * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS3SVARBPROC GLeeFuncPtr_glWindowPos3svARB; #define glWindowPos3svARB GLeeFuncPtr_glWindowPos3svARB #endif #endif /* GL_ARB_vertex_program */ #ifndef GL_ARB_vertex_program #define GL_ARB_vertex_program 1 #define __GLEE_GL_ARB_vertex_program 1 /* Constants */ #define GL_COLOR_SUM_ARB 0x8458 #define GL_VERTEX_PROGRAM_ARB 0x8620 #define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622 #define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623 #define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624 #define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625 #define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626 #define GL_PROGRAM_LENGTH_ARB 0x8627 #define GL_PROGRAM_STRING_ARB 0x8628 #define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E #define GL_MAX_PROGRAM_MATRICES_ARB 0x862F #define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 #define GL_CURRENT_MATRIX_ARB 0x8641 #define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 #define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 #define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 #define GL_PROGRAM_ERROR_POSITION_ARB 0x864B #define GL_PROGRAM_BINDING_ARB 0x8677 #define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 #define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A #define GL_PROGRAM_ERROR_STRING_ARB 0x8874 #define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 #define GL_PROGRAM_FORMAT_ARB 0x8876 #define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0 #define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1 #define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2 #define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3 #define GL_PROGRAM_TEMPORARIES_ARB 0x88A4 #define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5 #define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6 #define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7 #define GL_PROGRAM_PARAMETERS_ARB 0x88A8 #define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9 #define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA #define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB #define GL_PROGRAM_ATTRIBS_ARB 0x88AC #define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD #define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE #define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF #define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0 #define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1 #define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2 #define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3 #define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4 #define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5 #define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6 #define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7 #define GL_MATRIX0_ARB 0x88C0 #define GL_MATRIX1_ARB 0x88C1 #define GL_MATRIX2_ARB 0x88C2 #define GL_MATRIX3_ARB 0x88C3 #define GL_MATRIX4_ARB 0x88C4 #define GL_MATRIX5_ARB 0x88C5 #define GL_MATRIX6_ARB 0x88C6 #define GL_MATRIX7_ARB 0x88C7 #define GL_MATRIX8_ARB 0x88C8 #define GL_MATRIX9_ARB 0x88C9 #define GL_MATRIX10_ARB 0x88CA #define GL_MATRIX11_ARB 0x88CB #define GL_MATRIX12_ARB 0x88CC #define GL_MATRIX13_ARB 0x88CD #define GL_MATRIX14_ARB 0x88CE #define GL_MATRIX15_ARB 0x88CF #define GL_MATRIX16_ARB 0x88D0 #define GL_MATRIX17_ARB 0x88D1 #define GL_MATRIX18_ARB 0x88D2 #define GL_MATRIX19_ARB 0x88D3 #define GL_MATRIX20_ARB 0x88D4 #define GL_MATRIX21_ARB 0x88D5 #define GL_MATRIX22_ARB 0x88D6 #define GL_MATRIX23_ARB 0x88D7 #define GL_MATRIX24_ARB 0x88D8 #define GL_MATRIX25_ARB 0x88D9 #define GL_MATRIX26_ARB 0x88DA #define GL_MATRIX27_ARB 0x88DB #define GL_MATRIX28_ARB 0x88DC #define GL_MATRIX29_ARB 0x88DD #define GL_MATRIX30_ARB 0x88DE #define GL_MATRIX31_ARB 0x88DF #ifndef GLEE_H_DEFINED_glVertexAttrib1dARB #define GLEE_H_DEFINED_glVertexAttrib1dARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1DARBPROC GLeeFuncPtr_glVertexAttrib1dARB; #define glVertexAttrib1dARB GLeeFuncPtr_glVertexAttrib1dARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1dvARB #define GLEE_H_DEFINED_glVertexAttrib1dvARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1DVARBPROC GLeeFuncPtr_glVertexAttrib1dvARB; #define glVertexAttrib1dvARB GLeeFuncPtr_glVertexAttrib1dvARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1fARB #define GLEE_H_DEFINED_glVertexAttrib1fARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1FARBPROC GLeeFuncPtr_glVertexAttrib1fARB; #define glVertexAttrib1fARB GLeeFuncPtr_glVertexAttrib1fARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1fvARB #define GLEE_H_DEFINED_glVertexAttrib1fvARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1FVARBPROC GLeeFuncPtr_glVertexAttrib1fvARB; #define glVertexAttrib1fvARB GLeeFuncPtr_glVertexAttrib1fvARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1sARB #define GLEE_H_DEFINED_glVertexAttrib1sARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1SARBPROC GLeeFuncPtr_glVertexAttrib1sARB; #define glVertexAttrib1sARB GLeeFuncPtr_glVertexAttrib1sARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1svARB #define GLEE_H_DEFINED_glVertexAttrib1svARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1SVARBPROC GLeeFuncPtr_glVertexAttrib1svARB; #define glVertexAttrib1svARB GLeeFuncPtr_glVertexAttrib1svARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2dARB #define GLEE_H_DEFINED_glVertexAttrib2dARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2DARBPROC GLeeFuncPtr_glVertexAttrib2dARB; #define glVertexAttrib2dARB GLeeFuncPtr_glVertexAttrib2dARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2dvARB #define GLEE_H_DEFINED_glVertexAttrib2dvARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2DVARBPROC GLeeFuncPtr_glVertexAttrib2dvARB; #define glVertexAttrib2dvARB GLeeFuncPtr_glVertexAttrib2dvARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2fARB #define GLEE_H_DEFINED_glVertexAttrib2fARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2FARBPROC GLeeFuncPtr_glVertexAttrib2fARB; #define glVertexAttrib2fARB GLeeFuncPtr_glVertexAttrib2fARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2fvARB #define GLEE_H_DEFINED_glVertexAttrib2fvARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2FVARBPROC GLeeFuncPtr_glVertexAttrib2fvARB; #define glVertexAttrib2fvARB GLeeFuncPtr_glVertexAttrib2fvARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2sARB #define GLEE_H_DEFINED_glVertexAttrib2sARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2SARBPROC GLeeFuncPtr_glVertexAttrib2sARB; #define glVertexAttrib2sARB GLeeFuncPtr_glVertexAttrib2sARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2svARB #define GLEE_H_DEFINED_glVertexAttrib2svARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2SVARBPROC GLeeFuncPtr_glVertexAttrib2svARB; #define glVertexAttrib2svARB GLeeFuncPtr_glVertexAttrib2svARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3dARB #define GLEE_H_DEFINED_glVertexAttrib3dARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3DARBPROC GLeeFuncPtr_glVertexAttrib3dARB; #define glVertexAttrib3dARB GLeeFuncPtr_glVertexAttrib3dARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3dvARB #define GLEE_H_DEFINED_glVertexAttrib3dvARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3DVARBPROC GLeeFuncPtr_glVertexAttrib3dvARB; #define glVertexAttrib3dvARB GLeeFuncPtr_glVertexAttrib3dvARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3fARB #define GLEE_H_DEFINED_glVertexAttrib3fARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3FARBPROC GLeeFuncPtr_glVertexAttrib3fARB; #define glVertexAttrib3fARB GLeeFuncPtr_glVertexAttrib3fARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3fvARB #define GLEE_H_DEFINED_glVertexAttrib3fvARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3FVARBPROC GLeeFuncPtr_glVertexAttrib3fvARB; #define glVertexAttrib3fvARB GLeeFuncPtr_glVertexAttrib3fvARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3sARB #define GLEE_H_DEFINED_glVertexAttrib3sARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3SARBPROC GLeeFuncPtr_glVertexAttrib3sARB; #define glVertexAttrib3sARB GLeeFuncPtr_glVertexAttrib3sARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3svARB #define GLEE_H_DEFINED_glVertexAttrib3svARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3SVARBPROC GLeeFuncPtr_glVertexAttrib3svARB; #define glVertexAttrib3svARB GLeeFuncPtr_glVertexAttrib3svARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4NbvARB #define GLEE_H_DEFINED_glVertexAttrib4NbvARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4NBVARBPROC GLeeFuncPtr_glVertexAttrib4NbvARB; #define glVertexAttrib4NbvARB GLeeFuncPtr_glVertexAttrib4NbvARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4NivARB #define GLEE_H_DEFINED_glVertexAttrib4NivARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4NIVARBPROC GLeeFuncPtr_glVertexAttrib4NivARB; #define glVertexAttrib4NivARB GLeeFuncPtr_glVertexAttrib4NivARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4NsvARB #define GLEE_H_DEFINED_glVertexAttrib4NsvARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4NSVARBPROC GLeeFuncPtr_glVertexAttrib4NsvARB; #define glVertexAttrib4NsvARB GLeeFuncPtr_glVertexAttrib4NsvARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4NubARB #define GLEE_H_DEFINED_glVertexAttrib4NubARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4NUBARBPROC GLeeFuncPtr_glVertexAttrib4NubARB; #define glVertexAttrib4NubARB GLeeFuncPtr_glVertexAttrib4NubARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4NubvARB #define GLEE_H_DEFINED_glVertexAttrib4NubvARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4NUBVARBPROC GLeeFuncPtr_glVertexAttrib4NubvARB; #define glVertexAttrib4NubvARB GLeeFuncPtr_glVertexAttrib4NubvARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4NuivARB #define GLEE_H_DEFINED_glVertexAttrib4NuivARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4NUIVARBPROC GLeeFuncPtr_glVertexAttrib4NuivARB; #define glVertexAttrib4NuivARB GLeeFuncPtr_glVertexAttrib4NuivARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4NusvARB #define GLEE_H_DEFINED_glVertexAttrib4NusvARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4NUSVARBPROC GLeeFuncPtr_glVertexAttrib4NusvARB; #define glVertexAttrib4NusvARB GLeeFuncPtr_glVertexAttrib4NusvARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4bvARB #define GLEE_H_DEFINED_glVertexAttrib4bvARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4BVARBPROC GLeeFuncPtr_glVertexAttrib4bvARB; #define glVertexAttrib4bvARB GLeeFuncPtr_glVertexAttrib4bvARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4dARB #define GLEE_H_DEFINED_glVertexAttrib4dARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4DARBPROC GLeeFuncPtr_glVertexAttrib4dARB; #define glVertexAttrib4dARB GLeeFuncPtr_glVertexAttrib4dARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4dvARB #define GLEE_H_DEFINED_glVertexAttrib4dvARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4DVARBPROC GLeeFuncPtr_glVertexAttrib4dvARB; #define glVertexAttrib4dvARB GLeeFuncPtr_glVertexAttrib4dvARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4fARB #define GLEE_H_DEFINED_glVertexAttrib4fARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4FARBPROC GLeeFuncPtr_glVertexAttrib4fARB; #define glVertexAttrib4fARB GLeeFuncPtr_glVertexAttrib4fARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4fvARB #define GLEE_H_DEFINED_glVertexAttrib4fvARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4FVARBPROC GLeeFuncPtr_glVertexAttrib4fvARB; #define glVertexAttrib4fvARB GLeeFuncPtr_glVertexAttrib4fvARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4ivARB #define GLEE_H_DEFINED_glVertexAttrib4ivARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4IVARBPROC GLeeFuncPtr_glVertexAttrib4ivARB; #define glVertexAttrib4ivARB GLeeFuncPtr_glVertexAttrib4ivARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4sARB #define GLEE_H_DEFINED_glVertexAttrib4sARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4SARBPROC GLeeFuncPtr_glVertexAttrib4sARB; #define glVertexAttrib4sARB GLeeFuncPtr_glVertexAttrib4sARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4svARB #define GLEE_H_DEFINED_glVertexAttrib4svARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4SVARBPROC GLeeFuncPtr_glVertexAttrib4svARB; #define glVertexAttrib4svARB GLeeFuncPtr_glVertexAttrib4svARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4ubvARB #define GLEE_H_DEFINED_glVertexAttrib4ubvARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4UBVARBPROC GLeeFuncPtr_glVertexAttrib4ubvARB; #define glVertexAttrib4ubvARB GLeeFuncPtr_glVertexAttrib4ubvARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4uivARB #define GLEE_H_DEFINED_glVertexAttrib4uivARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4UIVARBPROC GLeeFuncPtr_glVertexAttrib4uivARB; #define glVertexAttrib4uivARB GLeeFuncPtr_glVertexAttrib4uivARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4usvARB #define GLEE_H_DEFINED_glVertexAttrib4usvARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4USVARBPROC GLeeFuncPtr_glVertexAttrib4usvARB; #define glVertexAttrib4usvARB GLeeFuncPtr_glVertexAttrib4usvARB #endif #ifndef GLEE_H_DEFINED_glVertexAttribPointerARB #define GLEE_H_DEFINED_glVertexAttribPointerARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBPOINTERARBPROC GLeeFuncPtr_glVertexAttribPointerARB; #define glVertexAttribPointerARB GLeeFuncPtr_glVertexAttribPointerARB #endif #ifndef GLEE_H_DEFINED_glEnableVertexAttribArrayARB #define GLEE_H_DEFINED_glEnableVertexAttribArrayARB typedef void (APIENTRYP GLEEPFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); GLEE_EXTERN GLEEPFNGLENABLEVERTEXATTRIBARRAYARBPROC GLeeFuncPtr_glEnableVertexAttribArrayARB; #define glEnableVertexAttribArrayARB GLeeFuncPtr_glEnableVertexAttribArrayARB #endif #ifndef GLEE_H_DEFINED_glDisableVertexAttribArrayARB #define GLEE_H_DEFINED_glDisableVertexAttribArrayARB typedef void (APIENTRYP GLEEPFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); GLEE_EXTERN GLEEPFNGLDISABLEVERTEXATTRIBARRAYARBPROC GLeeFuncPtr_glDisableVertexAttribArrayARB; #define glDisableVertexAttribArrayARB GLeeFuncPtr_glDisableVertexAttribArrayARB #endif #ifndef GLEE_H_DEFINED_glProgramStringARB #define GLEE_H_DEFINED_glProgramStringARB typedef void (APIENTRYP GLEEPFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const GLvoid * string); GLEE_EXTERN GLEEPFNGLPROGRAMSTRINGARBPROC GLeeFuncPtr_glProgramStringARB; #define glProgramStringARB GLeeFuncPtr_glProgramStringARB #endif #ifndef GLEE_H_DEFINED_glBindProgramARB #define GLEE_H_DEFINED_glBindProgramARB typedef void (APIENTRYP GLEEPFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint program); GLEE_EXTERN GLEEPFNGLBINDPROGRAMARBPROC GLeeFuncPtr_glBindProgramARB; #define glBindProgramARB GLeeFuncPtr_glBindProgramARB #endif #ifndef GLEE_H_DEFINED_glDeleteProgramsARB #define GLEE_H_DEFINED_glDeleteProgramsARB typedef void (APIENTRYP GLEEPFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint * programs); GLEE_EXTERN GLEEPFNGLDELETEPROGRAMSARBPROC GLeeFuncPtr_glDeleteProgramsARB; #define glDeleteProgramsARB GLeeFuncPtr_glDeleteProgramsARB #endif #ifndef GLEE_H_DEFINED_glGenProgramsARB #define GLEE_H_DEFINED_glGenProgramsARB typedef void (APIENTRYP GLEEPFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint * programs); GLEE_EXTERN GLEEPFNGLGENPROGRAMSARBPROC GLeeFuncPtr_glGenProgramsARB; #define glGenProgramsARB GLeeFuncPtr_glGenProgramsARB #endif #ifndef GLEE_H_DEFINED_glProgramEnvParameter4dARB #define GLEE_H_DEFINED_glProgramEnvParameter4dARB typedef void (APIENTRYP GLEEPFNGLPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLEE_EXTERN GLEEPFNGLPROGRAMENVPARAMETER4DARBPROC GLeeFuncPtr_glProgramEnvParameter4dARB; #define glProgramEnvParameter4dARB GLeeFuncPtr_glProgramEnvParameter4dARB #endif #ifndef GLEE_H_DEFINED_glProgramEnvParameter4dvARB #define GLEE_H_DEFINED_glProgramEnvParameter4dvARB typedef void (APIENTRYP GLEEPFNGLPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble * params); GLEE_EXTERN GLEEPFNGLPROGRAMENVPARAMETER4DVARBPROC GLeeFuncPtr_glProgramEnvParameter4dvARB; #define glProgramEnvParameter4dvARB GLeeFuncPtr_glProgramEnvParameter4dvARB #endif #ifndef GLEE_H_DEFINED_glProgramEnvParameter4fARB #define GLEE_H_DEFINED_glProgramEnvParameter4fARB typedef void (APIENTRYP GLEEPFNGLPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLEE_EXTERN GLEEPFNGLPROGRAMENVPARAMETER4FARBPROC GLeeFuncPtr_glProgramEnvParameter4fARB; #define glProgramEnvParameter4fARB GLeeFuncPtr_glProgramEnvParameter4fARB #endif #ifndef GLEE_H_DEFINED_glProgramEnvParameter4fvARB #define GLEE_H_DEFINED_glProgramEnvParameter4fvARB typedef void (APIENTRYP GLEEPFNGLPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat * params); GLEE_EXTERN GLEEPFNGLPROGRAMENVPARAMETER4FVARBPROC GLeeFuncPtr_glProgramEnvParameter4fvARB; #define glProgramEnvParameter4fvARB GLeeFuncPtr_glProgramEnvParameter4fvARB #endif #ifndef GLEE_H_DEFINED_glProgramLocalParameter4dARB #define GLEE_H_DEFINED_glProgramLocalParameter4dARB typedef void (APIENTRYP GLEEPFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLEE_EXTERN GLEEPFNGLPROGRAMLOCALPARAMETER4DARBPROC GLeeFuncPtr_glProgramLocalParameter4dARB; #define glProgramLocalParameter4dARB GLeeFuncPtr_glProgramLocalParameter4dARB #endif #ifndef GLEE_H_DEFINED_glProgramLocalParameter4dvARB #define GLEE_H_DEFINED_glProgramLocalParameter4dvARB typedef void (APIENTRYP GLEEPFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble * params); GLEE_EXTERN GLEEPFNGLPROGRAMLOCALPARAMETER4DVARBPROC GLeeFuncPtr_glProgramLocalParameter4dvARB; #define glProgramLocalParameter4dvARB GLeeFuncPtr_glProgramLocalParameter4dvARB #endif #ifndef GLEE_H_DEFINED_glProgramLocalParameter4fARB #define GLEE_H_DEFINED_glProgramLocalParameter4fARB typedef void (APIENTRYP GLEEPFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLEE_EXTERN GLEEPFNGLPROGRAMLOCALPARAMETER4FARBPROC GLeeFuncPtr_glProgramLocalParameter4fARB; #define glProgramLocalParameter4fARB GLeeFuncPtr_glProgramLocalParameter4fARB #endif #ifndef GLEE_H_DEFINED_glProgramLocalParameter4fvARB #define GLEE_H_DEFINED_glProgramLocalParameter4fvARB typedef void (APIENTRYP GLEEPFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat * params); GLEE_EXTERN GLEEPFNGLPROGRAMLOCALPARAMETER4FVARBPROC GLeeFuncPtr_glProgramLocalParameter4fvARB; #define glProgramLocalParameter4fvARB GLeeFuncPtr_glProgramLocalParameter4fvARB #endif #ifndef GLEE_H_DEFINED_glGetProgramEnvParameterdvARB #define GLEE_H_DEFINED_glGetProgramEnvParameterdvARB typedef void (APIENTRYP GLEEPFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble * params); GLEE_EXTERN GLEEPFNGLGETPROGRAMENVPARAMETERDVARBPROC GLeeFuncPtr_glGetProgramEnvParameterdvARB; #define glGetProgramEnvParameterdvARB GLeeFuncPtr_glGetProgramEnvParameterdvARB #endif #ifndef GLEE_H_DEFINED_glGetProgramEnvParameterfvARB #define GLEE_H_DEFINED_glGetProgramEnvParameterfvARB typedef void (APIENTRYP GLEEPFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETPROGRAMENVPARAMETERFVARBPROC GLeeFuncPtr_glGetProgramEnvParameterfvARB; #define glGetProgramEnvParameterfvARB GLeeFuncPtr_glGetProgramEnvParameterfvARB #endif #ifndef GLEE_H_DEFINED_glGetProgramLocalParameterdvARB #define GLEE_H_DEFINED_glGetProgramLocalParameterdvARB typedef void (APIENTRYP GLEEPFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble * params); GLEE_EXTERN GLEEPFNGLGETPROGRAMLOCALPARAMETERDVARBPROC GLeeFuncPtr_glGetProgramLocalParameterdvARB; #define glGetProgramLocalParameterdvARB GLeeFuncPtr_glGetProgramLocalParameterdvARB #endif #ifndef GLEE_H_DEFINED_glGetProgramLocalParameterfvARB #define GLEE_H_DEFINED_glGetProgramLocalParameterfvARB typedef void (APIENTRYP GLEEPFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETPROGRAMLOCALPARAMETERFVARBPROC GLeeFuncPtr_glGetProgramLocalParameterfvARB; #define glGetProgramLocalParameterfvARB GLeeFuncPtr_glGetProgramLocalParameterfvARB #endif #ifndef GLEE_H_DEFINED_glGetProgramivARB #define GLEE_H_DEFINED_glGetProgramivARB typedef void (APIENTRYP GLEEPFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETPROGRAMIVARBPROC GLeeFuncPtr_glGetProgramivARB; #define glGetProgramivARB GLeeFuncPtr_glGetProgramivARB #endif #ifndef GLEE_H_DEFINED_glGetProgramStringARB #define GLEE_H_DEFINED_glGetProgramStringARB typedef void (APIENTRYP GLEEPFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, GLvoid * string); GLEE_EXTERN GLEEPFNGLGETPROGRAMSTRINGARBPROC GLeeFuncPtr_glGetProgramStringARB; #define glGetProgramStringARB GLeeFuncPtr_glGetProgramStringARB #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribdvARB #define GLEE_H_DEFINED_glGetVertexAttribdvARB typedef void (APIENTRYP GLEEPFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble * params); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBDVARBPROC GLeeFuncPtr_glGetVertexAttribdvARB; #define glGetVertexAttribdvARB GLeeFuncPtr_glGetVertexAttribdvARB #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribfvARB #define GLEE_H_DEFINED_glGetVertexAttribfvARB typedef void (APIENTRYP GLEEPFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBFVARBPROC GLeeFuncPtr_glGetVertexAttribfvARB; #define glGetVertexAttribfvARB GLeeFuncPtr_glGetVertexAttribfvARB #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribivARB #define GLEE_H_DEFINED_glGetVertexAttribivARB typedef void (APIENTRYP GLEEPFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBIVARBPROC GLeeFuncPtr_glGetVertexAttribivARB; #define glGetVertexAttribivARB GLeeFuncPtr_glGetVertexAttribivARB #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribPointervARB #define GLEE_H_DEFINED_glGetVertexAttribPointervARB typedef void (APIENTRYP GLEEPFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, GLvoid* * pointer); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBPOINTERVARBPROC GLeeFuncPtr_glGetVertexAttribPointervARB; #define glGetVertexAttribPointervARB GLeeFuncPtr_glGetVertexAttribPointervARB #endif #ifndef GLEE_H_DEFINED_glIsProgramARB #define GLEE_H_DEFINED_glIsProgramARB typedef GLboolean (APIENTRYP GLEEPFNGLISPROGRAMARBPROC) (GLuint program); GLEE_EXTERN GLEEPFNGLISPROGRAMARBPROC GLeeFuncPtr_glIsProgramARB; #define glIsProgramARB GLeeFuncPtr_glIsProgramARB #endif #endif /* GL_ARB_fragment_program */ #ifndef GL_ARB_fragment_program #define GL_ARB_fragment_program 1 #define __GLEE_GL_ARB_fragment_program 1 /* Constants */ #define GL_FRAGMENT_PROGRAM_ARB 0x8804 #define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805 #define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806 #define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807 #define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808 #define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809 #define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A #define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B #define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C #define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D #define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E #define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F #define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810 #define GL_MAX_TEXTURE_COORDS_ARB 0x8871 #define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 #endif /* GL_ARB_vertex_buffer_object */ #ifndef GL_ARB_vertex_buffer_object #define GL_ARB_vertex_buffer_object 1 #define __GLEE_GL_ARB_vertex_buffer_object 1 /* Constants */ #define GL_BUFFER_SIZE_ARB 0x8764 #define GL_BUFFER_USAGE_ARB 0x8765 #define GL_ARRAY_BUFFER_ARB 0x8892 #define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 #define GL_ARRAY_BUFFER_BINDING_ARB 0x8894 #define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 #define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 #define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 #define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 #define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 #define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A #define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B #define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C #define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D #define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E #define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F #define GL_READ_ONLY_ARB 0x88B8 #define GL_WRITE_ONLY_ARB 0x88B9 #define GL_READ_WRITE_ARB 0x88BA #define GL_BUFFER_ACCESS_ARB 0x88BB #define GL_BUFFER_MAPPED_ARB 0x88BC #define GL_BUFFER_MAP_POINTER_ARB 0x88BD #define GL_STREAM_DRAW_ARB 0x88E0 #define GL_STREAM_READ_ARB 0x88E1 #define GL_STREAM_COPY_ARB 0x88E2 #define GL_STATIC_DRAW_ARB 0x88E4 #define GL_STATIC_READ_ARB 0x88E5 #define GL_STATIC_COPY_ARB 0x88E6 #define GL_DYNAMIC_DRAW_ARB 0x88E8 #define GL_DYNAMIC_READ_ARB 0x88E9 #define GL_DYNAMIC_COPY_ARB 0x88EA #ifndef GLEE_H_DEFINED_glBindBufferARB #define GLEE_H_DEFINED_glBindBufferARB typedef void (APIENTRYP GLEEPFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer); GLEE_EXTERN GLEEPFNGLBINDBUFFERARBPROC GLeeFuncPtr_glBindBufferARB; #define glBindBufferARB GLeeFuncPtr_glBindBufferARB #endif #ifndef GLEE_H_DEFINED_glDeleteBuffersARB #define GLEE_H_DEFINED_glDeleteBuffersARB typedef void (APIENTRYP GLEEPFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint * buffers); GLEE_EXTERN GLEEPFNGLDELETEBUFFERSARBPROC GLeeFuncPtr_glDeleteBuffersARB; #define glDeleteBuffersARB GLeeFuncPtr_glDeleteBuffersARB #endif #ifndef GLEE_H_DEFINED_glGenBuffersARB #define GLEE_H_DEFINED_glGenBuffersARB typedef void (APIENTRYP GLEEPFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint * buffers); GLEE_EXTERN GLEEPFNGLGENBUFFERSARBPROC GLeeFuncPtr_glGenBuffersARB; #define glGenBuffersARB GLeeFuncPtr_glGenBuffersARB #endif #ifndef GLEE_H_DEFINED_glIsBufferARB #define GLEE_H_DEFINED_glIsBufferARB typedef GLboolean (APIENTRYP GLEEPFNGLISBUFFERARBPROC) (GLuint buffer); GLEE_EXTERN GLEEPFNGLISBUFFERARBPROC GLeeFuncPtr_glIsBufferARB; #define glIsBufferARB GLeeFuncPtr_glIsBufferARB #endif #ifndef GLEE_H_DEFINED_glBufferDataARB #define GLEE_H_DEFINED_glBufferDataARB typedef void (APIENTRYP GLEEPFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const GLvoid * data, GLenum usage); GLEE_EXTERN GLEEPFNGLBUFFERDATAARBPROC GLeeFuncPtr_glBufferDataARB; #define glBufferDataARB GLeeFuncPtr_glBufferDataARB #endif #ifndef GLEE_H_DEFINED_glBufferSubDataARB #define GLEE_H_DEFINED_glBufferSubDataARB typedef void (APIENTRYP GLEEPFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid * data); GLEE_EXTERN GLEEPFNGLBUFFERSUBDATAARBPROC GLeeFuncPtr_glBufferSubDataARB; #define glBufferSubDataARB GLeeFuncPtr_glBufferSubDataARB #endif #ifndef GLEE_H_DEFINED_glGetBufferSubDataARB #define GLEE_H_DEFINED_glGetBufferSubDataARB typedef void (APIENTRYP GLEEPFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid * data); GLEE_EXTERN GLEEPFNGLGETBUFFERSUBDATAARBPROC GLeeFuncPtr_glGetBufferSubDataARB; #define glGetBufferSubDataARB GLeeFuncPtr_glGetBufferSubDataARB #endif #ifndef GLEE_H_DEFINED_glMapBufferARB #define GLEE_H_DEFINED_glMapBufferARB typedef GLvoid* (APIENTRYP GLEEPFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access); GLEE_EXTERN GLEEPFNGLMAPBUFFERARBPROC GLeeFuncPtr_glMapBufferARB; #define glMapBufferARB GLeeFuncPtr_glMapBufferARB #endif #ifndef GLEE_H_DEFINED_glUnmapBufferARB #define GLEE_H_DEFINED_glUnmapBufferARB typedef GLboolean (APIENTRYP GLEEPFNGLUNMAPBUFFERARBPROC) (GLenum target); GLEE_EXTERN GLEEPFNGLUNMAPBUFFERARBPROC GLeeFuncPtr_glUnmapBufferARB; #define glUnmapBufferARB GLeeFuncPtr_glUnmapBufferARB #endif #ifndef GLEE_H_DEFINED_glGetBufferParameterivARB #define GLEE_H_DEFINED_glGetBufferParameterivARB typedef void (APIENTRYP GLEEPFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETBUFFERPARAMETERIVARBPROC GLeeFuncPtr_glGetBufferParameterivARB; #define glGetBufferParameterivARB GLeeFuncPtr_glGetBufferParameterivARB #endif #ifndef GLEE_H_DEFINED_glGetBufferPointervARB #define GLEE_H_DEFINED_glGetBufferPointervARB typedef void (APIENTRYP GLEEPFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, GLvoid* * params); GLEE_EXTERN GLEEPFNGLGETBUFFERPOINTERVARBPROC GLeeFuncPtr_glGetBufferPointervARB; #define glGetBufferPointervARB GLeeFuncPtr_glGetBufferPointervARB #endif #endif /* GL_ARB_occlusion_query */ #ifndef GL_ARB_occlusion_query #define GL_ARB_occlusion_query 1 #define __GLEE_GL_ARB_occlusion_query 1 /* Constants */ #define GL_QUERY_COUNTER_BITS_ARB 0x8864 #define GL_CURRENT_QUERY_ARB 0x8865 #define GL_QUERY_RESULT_ARB 0x8866 #define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867 #define GL_SAMPLES_PASSED_ARB 0x8914 #ifndef GLEE_H_DEFINED_glGenQueriesARB #define GLEE_H_DEFINED_glGenQueriesARB typedef void (APIENTRYP GLEEPFNGLGENQUERIESARBPROC) (GLsizei n, GLuint * ids); GLEE_EXTERN GLEEPFNGLGENQUERIESARBPROC GLeeFuncPtr_glGenQueriesARB; #define glGenQueriesARB GLeeFuncPtr_glGenQueriesARB #endif #ifndef GLEE_H_DEFINED_glDeleteQueriesARB #define GLEE_H_DEFINED_glDeleteQueriesARB typedef void (APIENTRYP GLEEPFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint * ids); GLEE_EXTERN GLEEPFNGLDELETEQUERIESARBPROC GLeeFuncPtr_glDeleteQueriesARB; #define glDeleteQueriesARB GLeeFuncPtr_glDeleteQueriesARB #endif #ifndef GLEE_H_DEFINED_glIsQueryARB #define GLEE_H_DEFINED_glIsQueryARB typedef GLboolean (APIENTRYP GLEEPFNGLISQUERYARBPROC) (GLuint id); GLEE_EXTERN GLEEPFNGLISQUERYARBPROC GLeeFuncPtr_glIsQueryARB; #define glIsQueryARB GLeeFuncPtr_glIsQueryARB #endif #ifndef GLEE_H_DEFINED_glBeginQueryARB #define GLEE_H_DEFINED_glBeginQueryARB typedef void (APIENTRYP GLEEPFNGLBEGINQUERYARBPROC) (GLenum target, GLuint id); GLEE_EXTERN GLEEPFNGLBEGINQUERYARBPROC GLeeFuncPtr_glBeginQueryARB; #define glBeginQueryARB GLeeFuncPtr_glBeginQueryARB #endif #ifndef GLEE_H_DEFINED_glEndQueryARB #define GLEE_H_DEFINED_glEndQueryARB typedef void (APIENTRYP GLEEPFNGLENDQUERYARBPROC) (GLenum target); GLEE_EXTERN GLEEPFNGLENDQUERYARBPROC GLeeFuncPtr_glEndQueryARB; #define glEndQueryARB GLeeFuncPtr_glEndQueryARB #endif #ifndef GLEE_H_DEFINED_glGetQueryivARB #define GLEE_H_DEFINED_glGetQueryivARB typedef void (APIENTRYP GLEEPFNGLGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETQUERYIVARBPROC GLeeFuncPtr_glGetQueryivARB; #define glGetQueryivARB GLeeFuncPtr_glGetQueryivARB #endif #ifndef GLEE_H_DEFINED_glGetQueryObjectivARB #define GLEE_H_DEFINED_glGetQueryObjectivARB typedef void (APIENTRYP GLEEPFNGLGETQUERYOBJECTIVARBPROC) (GLuint id, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETQUERYOBJECTIVARBPROC GLeeFuncPtr_glGetQueryObjectivARB; #define glGetQueryObjectivARB GLeeFuncPtr_glGetQueryObjectivARB #endif #ifndef GLEE_H_DEFINED_glGetQueryObjectuivARB #define GLEE_H_DEFINED_glGetQueryObjectuivARB typedef void (APIENTRYP GLEEPFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, GLuint * params); GLEE_EXTERN GLEEPFNGLGETQUERYOBJECTUIVARBPROC GLeeFuncPtr_glGetQueryObjectuivARB; #define glGetQueryObjectuivARB GLeeFuncPtr_glGetQueryObjectuivARB #endif #endif /* GL_ARB_shader_objects */ #ifndef GL_ARB_shader_objects #define GL_ARB_shader_objects 1 #define __GLEE_GL_ARB_shader_objects 1 /* Constants */ #define GL_PROGRAM_OBJECT_ARB 0x8B40 #define GL_SHADER_OBJECT_ARB 0x8B48 #define GL_OBJECT_TYPE_ARB 0x8B4E #define GL_OBJECT_SUBTYPE_ARB 0x8B4F #define GL_FLOAT_VEC2_ARB 0x8B50 #define GL_FLOAT_VEC3_ARB 0x8B51 #define GL_FLOAT_VEC4_ARB 0x8B52 #define GL_INT_VEC2_ARB 0x8B53 #define GL_INT_VEC3_ARB 0x8B54 #define GL_INT_VEC4_ARB 0x8B55 #define GL_BOOL_ARB 0x8B56 #define GL_BOOL_VEC2_ARB 0x8B57 #define GL_BOOL_VEC3_ARB 0x8B58 #define GL_BOOL_VEC4_ARB 0x8B59 #define GL_FLOAT_MAT2_ARB 0x8B5A #define GL_FLOAT_MAT3_ARB 0x8B5B #define GL_FLOAT_MAT4_ARB 0x8B5C #define GL_SAMPLER_1D_ARB 0x8B5D #define GL_SAMPLER_2D_ARB 0x8B5E #define GL_SAMPLER_3D_ARB 0x8B5F #define GL_SAMPLER_CUBE_ARB 0x8B60 #define GL_SAMPLER_1D_SHADOW_ARB 0x8B61 #define GL_SAMPLER_2D_SHADOW_ARB 0x8B62 #define GL_SAMPLER_2D_RECT_ARB 0x8B63 #define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 #define GL_OBJECT_DELETE_STATUS_ARB 0x8B80 #define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81 #define GL_OBJECT_LINK_STATUS_ARB 0x8B82 #define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83 #define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84 #define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85 #define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86 #define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87 #define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88 #ifndef GLEE_H_DEFINED_glDeleteObjectARB #define GLEE_H_DEFINED_glDeleteObjectARB typedef void (APIENTRYP GLEEPFNGLDELETEOBJECTARBPROC) (GLhandleARB obj); GLEE_EXTERN GLEEPFNGLDELETEOBJECTARBPROC GLeeFuncPtr_glDeleteObjectARB; #define glDeleteObjectARB GLeeFuncPtr_glDeleteObjectARB #endif #ifndef GLEE_H_DEFINED_glGetHandleARB #define GLEE_H_DEFINED_glGetHandleARB typedef GLhandleARB (APIENTRYP GLEEPFNGLGETHANDLEARBPROC) (GLenum pname); GLEE_EXTERN GLEEPFNGLGETHANDLEARBPROC GLeeFuncPtr_glGetHandleARB; #define glGetHandleARB GLeeFuncPtr_glGetHandleARB #endif #ifndef GLEE_H_DEFINED_glDetachObjectARB #define GLEE_H_DEFINED_glDetachObjectARB typedef void (APIENTRYP GLEEPFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj); GLEE_EXTERN GLEEPFNGLDETACHOBJECTARBPROC GLeeFuncPtr_glDetachObjectARB; #define glDetachObjectARB GLeeFuncPtr_glDetachObjectARB #endif #ifndef GLEE_H_DEFINED_glCreateShaderObjectARB #define GLEE_H_DEFINED_glCreateShaderObjectARB typedef GLhandleARB (APIENTRYP GLEEPFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType); GLEE_EXTERN GLEEPFNGLCREATESHADEROBJECTARBPROC GLeeFuncPtr_glCreateShaderObjectARB; #define glCreateShaderObjectARB GLeeFuncPtr_glCreateShaderObjectARB #endif #ifndef GLEE_H_DEFINED_glShaderSourceARB #define GLEE_H_DEFINED_glShaderSourceARB typedef void (APIENTRYP GLEEPFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB* * string, const GLint * length); GLEE_EXTERN GLEEPFNGLSHADERSOURCEARBPROC GLeeFuncPtr_glShaderSourceARB; #define glShaderSourceARB GLeeFuncPtr_glShaderSourceARB #endif #ifndef GLEE_H_DEFINED_glCompileShaderARB #define GLEE_H_DEFINED_glCompileShaderARB typedef void (APIENTRYP GLEEPFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj); GLEE_EXTERN GLEEPFNGLCOMPILESHADERARBPROC GLeeFuncPtr_glCompileShaderARB; #define glCompileShaderARB GLeeFuncPtr_glCompileShaderARB #endif #ifndef GLEE_H_DEFINED_glCreateProgramObjectARB #define GLEE_H_DEFINED_glCreateProgramObjectARB typedef GLhandleARB (APIENTRYP GLEEPFNGLCREATEPROGRAMOBJECTARBPROC) (); GLEE_EXTERN GLEEPFNGLCREATEPROGRAMOBJECTARBPROC GLeeFuncPtr_glCreateProgramObjectARB; #define glCreateProgramObjectARB GLeeFuncPtr_glCreateProgramObjectARB #endif #ifndef GLEE_H_DEFINED_glAttachObjectARB #define GLEE_H_DEFINED_glAttachObjectARB typedef void (APIENTRYP GLEEPFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj); GLEE_EXTERN GLEEPFNGLATTACHOBJECTARBPROC GLeeFuncPtr_glAttachObjectARB; #define glAttachObjectARB GLeeFuncPtr_glAttachObjectARB #endif #ifndef GLEE_H_DEFINED_glLinkProgramARB #define GLEE_H_DEFINED_glLinkProgramARB typedef void (APIENTRYP GLEEPFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj); GLEE_EXTERN GLEEPFNGLLINKPROGRAMARBPROC GLeeFuncPtr_glLinkProgramARB; #define glLinkProgramARB GLeeFuncPtr_glLinkProgramARB #endif #ifndef GLEE_H_DEFINED_glUseProgramObjectARB #define GLEE_H_DEFINED_glUseProgramObjectARB typedef void (APIENTRYP GLEEPFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj); GLEE_EXTERN GLEEPFNGLUSEPROGRAMOBJECTARBPROC GLeeFuncPtr_glUseProgramObjectARB; #define glUseProgramObjectARB GLeeFuncPtr_glUseProgramObjectARB #endif #ifndef GLEE_H_DEFINED_glValidateProgramARB #define GLEE_H_DEFINED_glValidateProgramARB typedef void (APIENTRYP GLEEPFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj); GLEE_EXTERN GLEEPFNGLVALIDATEPROGRAMARBPROC GLeeFuncPtr_glValidateProgramARB; #define glValidateProgramARB GLeeFuncPtr_glValidateProgramARB #endif #ifndef GLEE_H_DEFINED_glUniform1fARB #define GLEE_H_DEFINED_glUniform1fARB typedef void (APIENTRYP GLEEPFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0); GLEE_EXTERN GLEEPFNGLUNIFORM1FARBPROC GLeeFuncPtr_glUniform1fARB; #define glUniform1fARB GLeeFuncPtr_glUniform1fARB #endif #ifndef GLEE_H_DEFINED_glUniform2fARB #define GLEE_H_DEFINED_glUniform2fARB typedef void (APIENTRYP GLEEPFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1); GLEE_EXTERN GLEEPFNGLUNIFORM2FARBPROC GLeeFuncPtr_glUniform2fARB; #define glUniform2fARB GLeeFuncPtr_glUniform2fARB #endif #ifndef GLEE_H_DEFINED_glUniform3fARB #define GLEE_H_DEFINED_glUniform3fARB typedef void (APIENTRYP GLEEPFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); GLEE_EXTERN GLEEPFNGLUNIFORM3FARBPROC GLeeFuncPtr_glUniform3fARB; #define glUniform3fARB GLeeFuncPtr_glUniform3fARB #endif #ifndef GLEE_H_DEFINED_glUniform4fARB #define GLEE_H_DEFINED_glUniform4fARB typedef void (APIENTRYP GLEEPFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); GLEE_EXTERN GLEEPFNGLUNIFORM4FARBPROC GLeeFuncPtr_glUniform4fARB; #define glUniform4fARB GLeeFuncPtr_glUniform4fARB #endif #ifndef GLEE_H_DEFINED_glUniform1iARB #define GLEE_H_DEFINED_glUniform1iARB typedef void (APIENTRYP GLEEPFNGLUNIFORM1IARBPROC) (GLint location, GLint v0); GLEE_EXTERN GLEEPFNGLUNIFORM1IARBPROC GLeeFuncPtr_glUniform1iARB; #define glUniform1iARB GLeeFuncPtr_glUniform1iARB #endif #ifndef GLEE_H_DEFINED_glUniform2iARB #define GLEE_H_DEFINED_glUniform2iARB typedef void (APIENTRYP GLEEPFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1); GLEE_EXTERN GLEEPFNGLUNIFORM2IARBPROC GLeeFuncPtr_glUniform2iARB; #define glUniform2iARB GLeeFuncPtr_glUniform2iARB #endif #ifndef GLEE_H_DEFINED_glUniform3iARB #define GLEE_H_DEFINED_glUniform3iARB typedef void (APIENTRYP GLEEPFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2); GLEE_EXTERN GLEEPFNGLUNIFORM3IARBPROC GLeeFuncPtr_glUniform3iARB; #define glUniform3iARB GLeeFuncPtr_glUniform3iARB #endif #ifndef GLEE_H_DEFINED_glUniform4iARB #define GLEE_H_DEFINED_glUniform4iARB typedef void (APIENTRYP GLEEPFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); GLEE_EXTERN GLEEPFNGLUNIFORM4IARBPROC GLeeFuncPtr_glUniform4iARB; #define glUniform4iARB GLeeFuncPtr_glUniform4iARB #endif #ifndef GLEE_H_DEFINED_glUniform1fvARB #define GLEE_H_DEFINED_glUniform1fvARB typedef void (APIENTRYP GLEEPFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORM1FVARBPROC GLeeFuncPtr_glUniform1fvARB; #define glUniform1fvARB GLeeFuncPtr_glUniform1fvARB #endif #ifndef GLEE_H_DEFINED_glUniform2fvARB #define GLEE_H_DEFINED_glUniform2fvARB typedef void (APIENTRYP GLEEPFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORM2FVARBPROC GLeeFuncPtr_glUniform2fvARB; #define glUniform2fvARB GLeeFuncPtr_glUniform2fvARB #endif #ifndef GLEE_H_DEFINED_glUniform3fvARB #define GLEE_H_DEFINED_glUniform3fvARB typedef void (APIENTRYP GLEEPFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORM3FVARBPROC GLeeFuncPtr_glUniform3fvARB; #define glUniform3fvARB GLeeFuncPtr_glUniform3fvARB #endif #ifndef GLEE_H_DEFINED_glUniform4fvARB #define GLEE_H_DEFINED_glUniform4fvARB typedef void (APIENTRYP GLEEPFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORM4FVARBPROC GLeeFuncPtr_glUniform4fvARB; #define glUniform4fvARB GLeeFuncPtr_glUniform4fvARB #endif #ifndef GLEE_H_DEFINED_glUniform1ivARB #define GLEE_H_DEFINED_glUniform1ivARB typedef void (APIENTRYP GLEEPFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint * value); GLEE_EXTERN GLEEPFNGLUNIFORM1IVARBPROC GLeeFuncPtr_glUniform1ivARB; #define glUniform1ivARB GLeeFuncPtr_glUniform1ivARB #endif #ifndef GLEE_H_DEFINED_glUniform2ivARB #define GLEE_H_DEFINED_glUniform2ivARB typedef void (APIENTRYP GLEEPFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint * value); GLEE_EXTERN GLEEPFNGLUNIFORM2IVARBPROC GLeeFuncPtr_glUniform2ivARB; #define glUniform2ivARB GLeeFuncPtr_glUniform2ivARB #endif #ifndef GLEE_H_DEFINED_glUniform3ivARB #define GLEE_H_DEFINED_glUniform3ivARB typedef void (APIENTRYP GLEEPFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint * value); GLEE_EXTERN GLEEPFNGLUNIFORM3IVARBPROC GLeeFuncPtr_glUniform3ivARB; #define glUniform3ivARB GLeeFuncPtr_glUniform3ivARB #endif #ifndef GLEE_H_DEFINED_glUniform4ivARB #define GLEE_H_DEFINED_glUniform4ivARB typedef void (APIENTRYP GLEEPFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint * value); GLEE_EXTERN GLEEPFNGLUNIFORM4IVARBPROC GLeeFuncPtr_glUniform4ivARB; #define glUniform4ivARB GLeeFuncPtr_glUniform4ivARB #endif #ifndef GLEE_H_DEFINED_glUniformMatrix2fvARB #define GLEE_H_DEFINED_glUniformMatrix2fvARB typedef void (APIENTRYP GLEEPFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORMMATRIX2FVARBPROC GLeeFuncPtr_glUniformMatrix2fvARB; #define glUniformMatrix2fvARB GLeeFuncPtr_glUniformMatrix2fvARB #endif #ifndef GLEE_H_DEFINED_glUniformMatrix3fvARB #define GLEE_H_DEFINED_glUniformMatrix3fvARB typedef void (APIENTRYP GLEEPFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORMMATRIX3FVARBPROC GLeeFuncPtr_glUniformMatrix3fvARB; #define glUniformMatrix3fvARB GLeeFuncPtr_glUniformMatrix3fvARB #endif #ifndef GLEE_H_DEFINED_glUniformMatrix4fvARB #define GLEE_H_DEFINED_glUniformMatrix4fvARB typedef void (APIENTRYP GLEEPFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORMMATRIX4FVARBPROC GLeeFuncPtr_glUniformMatrix4fvARB; #define glUniformMatrix4fvARB GLeeFuncPtr_glUniformMatrix4fvARB #endif #ifndef GLEE_H_DEFINED_glGetObjectParameterfvARB #define GLEE_H_DEFINED_glGetObjectParameterfvARB typedef void (APIENTRYP GLEEPFNGLGETOBJECTPARAMETERFVARBPROC) (GLhandleARB obj, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETOBJECTPARAMETERFVARBPROC GLeeFuncPtr_glGetObjectParameterfvARB; #define glGetObjectParameterfvARB GLeeFuncPtr_glGetObjectParameterfvARB #endif #ifndef GLEE_H_DEFINED_glGetObjectParameterivARB #define GLEE_H_DEFINED_glGetObjectParameterivARB typedef void (APIENTRYP GLEEPFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETOBJECTPARAMETERIVARBPROC GLeeFuncPtr_glGetObjectParameterivARB; #define glGetObjectParameterivARB GLeeFuncPtr_glGetObjectParameterivARB #endif #ifndef GLEE_H_DEFINED_glGetInfoLogARB #define GLEE_H_DEFINED_glGetInfoLogARB typedef void (APIENTRYP GLEEPFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog); GLEE_EXTERN GLEEPFNGLGETINFOLOGARBPROC GLeeFuncPtr_glGetInfoLogARB; #define glGetInfoLogARB GLeeFuncPtr_glGetInfoLogARB #endif #ifndef GLEE_H_DEFINED_glGetAttachedObjectsARB #define GLEE_H_DEFINED_glGetAttachedObjectsARB typedef void (APIENTRYP GLEEPFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei * count, GLhandleARB * obj); GLEE_EXTERN GLEEPFNGLGETATTACHEDOBJECTSARBPROC GLeeFuncPtr_glGetAttachedObjectsARB; #define glGetAttachedObjectsARB GLeeFuncPtr_glGetAttachedObjectsARB #endif #ifndef GLEE_H_DEFINED_glGetUniformLocationARB #define GLEE_H_DEFINED_glGetUniformLocationARB typedef GLint (APIENTRYP GLEEPFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB * name); GLEE_EXTERN GLEEPFNGLGETUNIFORMLOCATIONARBPROC GLeeFuncPtr_glGetUniformLocationARB; #define glGetUniformLocationARB GLeeFuncPtr_glGetUniformLocationARB #endif #ifndef GLEE_H_DEFINED_glGetActiveUniformARB #define GLEE_H_DEFINED_glGetActiveUniformARB typedef void (APIENTRYP GLEEPFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei * length, GLint * size, GLenum * type, GLcharARB * name); GLEE_EXTERN GLEEPFNGLGETACTIVEUNIFORMARBPROC GLeeFuncPtr_glGetActiveUniformARB; #define glGetActiveUniformARB GLeeFuncPtr_glGetActiveUniformARB #endif #ifndef GLEE_H_DEFINED_glGetUniformfvARB #define GLEE_H_DEFINED_glGetUniformfvARB typedef void (APIENTRYP GLEEPFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETUNIFORMFVARBPROC GLeeFuncPtr_glGetUniformfvARB; #define glGetUniformfvARB GLeeFuncPtr_glGetUniformfvARB #endif #ifndef GLEE_H_DEFINED_glGetUniformivARB #define GLEE_H_DEFINED_glGetUniformivARB typedef void (APIENTRYP GLEEPFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint * params); GLEE_EXTERN GLEEPFNGLGETUNIFORMIVARBPROC GLeeFuncPtr_glGetUniformivARB; #define glGetUniformivARB GLeeFuncPtr_glGetUniformivARB #endif #ifndef GLEE_H_DEFINED_glGetShaderSourceARB #define GLEE_H_DEFINED_glGetShaderSourceARB typedef void (APIENTRYP GLEEPFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * source); GLEE_EXTERN GLEEPFNGLGETSHADERSOURCEARBPROC GLeeFuncPtr_glGetShaderSourceARB; #define glGetShaderSourceARB GLeeFuncPtr_glGetShaderSourceARB #endif #endif /* GL_ARB_vertex_shader */ #ifndef GL_ARB_vertex_shader #define GL_ARB_vertex_shader 1 #define __GLEE_GL_ARB_vertex_shader 1 /* Constants */ #define GL_VERTEX_SHADER_ARB 0x8B31 #define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A #define GL_MAX_VARYING_FLOATS_ARB 0x8B4B #define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C #define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D #define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89 #define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A #ifndef GLEE_H_DEFINED_glBindAttribLocationARB #define GLEE_H_DEFINED_glBindAttribLocationARB typedef void (APIENTRYP GLEEPFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB * name); GLEE_EXTERN GLEEPFNGLBINDATTRIBLOCATIONARBPROC GLeeFuncPtr_glBindAttribLocationARB; #define glBindAttribLocationARB GLeeFuncPtr_glBindAttribLocationARB #endif #ifndef GLEE_H_DEFINED_glGetActiveAttribARB #define GLEE_H_DEFINED_glGetActiveAttribARB typedef void (APIENTRYP GLEEPFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei * length, GLint * size, GLenum * type, GLcharARB * name); GLEE_EXTERN GLEEPFNGLGETACTIVEATTRIBARBPROC GLeeFuncPtr_glGetActiveAttribARB; #define glGetActiveAttribARB GLeeFuncPtr_glGetActiveAttribARB #endif #ifndef GLEE_H_DEFINED_glGetAttribLocationARB #define GLEE_H_DEFINED_glGetAttribLocationARB typedef GLint (APIENTRYP GLEEPFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB * name); GLEE_EXTERN GLEEPFNGLGETATTRIBLOCATIONARBPROC GLeeFuncPtr_glGetAttribLocationARB; #define glGetAttribLocationARB GLeeFuncPtr_glGetAttribLocationARB #endif #endif /* GL_ARB_fragment_shader */ #ifndef GL_ARB_fragment_shader #define GL_ARB_fragment_shader 1 #define __GLEE_GL_ARB_fragment_shader 1 /* Constants */ #define GL_FRAGMENT_SHADER_ARB 0x8B30 #define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 #define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B #endif /* GL_ARB_shading_language_100 */ #ifndef GL_ARB_shading_language_100 #define GL_ARB_shading_language_100 1 #define __GLEE_GL_ARB_shading_language_100 1 /* Constants */ #define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C #endif /* GL_ARB_texture_non_power_of_two */ #ifndef GL_ARB_texture_non_power_of_two #define GL_ARB_texture_non_power_of_two 1 #define __GLEE_GL_ARB_texture_non_power_of_two 1 /* Constants */ #endif /* GL_ARB_point_sprite */ #ifndef GL_ARB_point_sprite #define GL_ARB_point_sprite 1 #define __GLEE_GL_ARB_point_sprite 1 /* Constants */ #define GL_POINT_SPRITE_ARB 0x8861 #define GL_COORD_REPLACE_ARB 0x8862 #endif /* GL_ARB_fragment_program_shadow */ #ifndef GL_ARB_fragment_program_shadow #define GL_ARB_fragment_program_shadow 1 #define __GLEE_GL_ARB_fragment_program_shadow 1 /* Constants */ #endif /* GL_ARB_draw_buffers */ #ifndef GL_ARB_draw_buffers #define GL_ARB_draw_buffers 1 #define __GLEE_GL_ARB_draw_buffers 1 /* Constants */ #define GL_MAX_DRAW_BUFFERS_ARB 0x8824 #define GL_DRAW_BUFFER0_ARB 0x8825 #define GL_DRAW_BUFFER1_ARB 0x8826 #define GL_DRAW_BUFFER2_ARB 0x8827 #define GL_DRAW_BUFFER3_ARB 0x8828 #define GL_DRAW_BUFFER4_ARB 0x8829 #define GL_DRAW_BUFFER5_ARB 0x882A #define GL_DRAW_BUFFER6_ARB 0x882B #define GL_DRAW_BUFFER7_ARB 0x882C #define GL_DRAW_BUFFER8_ARB 0x882D #define GL_DRAW_BUFFER9_ARB 0x882E #define GL_DRAW_BUFFER10_ARB 0x882F #define GL_DRAW_BUFFER11_ARB 0x8830 #define GL_DRAW_BUFFER12_ARB 0x8831 #define GL_DRAW_BUFFER13_ARB 0x8832 #define GL_DRAW_BUFFER14_ARB 0x8833 #define GL_DRAW_BUFFER15_ARB 0x8834 #ifndef GLEE_H_DEFINED_glDrawBuffersARB #define GLEE_H_DEFINED_glDrawBuffersARB typedef void (APIENTRYP GLEEPFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum * bufs); GLEE_EXTERN GLEEPFNGLDRAWBUFFERSARBPROC GLeeFuncPtr_glDrawBuffersARB; #define glDrawBuffersARB GLeeFuncPtr_glDrawBuffersARB #endif #endif /* GL_ARB_texture_rectangle */ #ifndef GL_ARB_texture_rectangle #define GL_ARB_texture_rectangle 1 #define __GLEE_GL_ARB_texture_rectangle 1 /* Constants */ #define GL_TEXTURE_RECTANGLE_ARB 0x84F5 #define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6 #define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7 #define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 #endif /* GL_ARB_color_buffer_float */ #ifndef GL_ARB_color_buffer_float #define GL_ARB_color_buffer_float 1 #define __GLEE_GL_ARB_color_buffer_float 1 /* Constants */ #define GL_RGBA_FLOAT_MODE_ARB 0x8820 #define GL_CLAMP_VERTEX_COLOR_ARB 0x891A #define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B #define GL_CLAMP_READ_COLOR_ARB 0x891C #define GL_FIXED_ONLY_ARB 0x891D #ifndef GLEE_H_DEFINED_glClampColorARB #define GLEE_H_DEFINED_glClampColorARB typedef void (APIENTRYP GLEEPFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp); GLEE_EXTERN GLEEPFNGLCLAMPCOLORARBPROC GLeeFuncPtr_glClampColorARB; #define glClampColorARB GLeeFuncPtr_glClampColorARB #endif #endif /* GL_ARB_half_float_pixel */ #ifndef GL_ARB_half_float_pixel #define GL_ARB_half_float_pixel 1 #define __GLEE_GL_ARB_half_float_pixel 1 /* Constants */ #define GL_HALF_FLOAT_ARB 0x140B #endif /* GL_ARB_texture_float */ #ifndef GL_ARB_texture_float #define GL_ARB_texture_float 1 #define __GLEE_GL_ARB_texture_float 1 /* Constants */ #define GL_TEXTURE_RED_TYPE_ARB 0x8C10 #define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 #define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 #define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 #define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 #define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 #define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 #define GL_UNSIGNED_NORMALIZED_ARB 0x8C17 #define GL_RGBA32F_ARB 0x8814 #define GL_RGB32F_ARB 0x8815 #define GL_ALPHA32F_ARB 0x8816 #define GL_INTENSITY32F_ARB 0x8817 #define GL_LUMINANCE32F_ARB 0x8818 #define GL_LUMINANCE_ALPHA32F_ARB 0x8819 #define GL_RGBA16F_ARB 0x881A #define GL_RGB16F_ARB 0x881B #define GL_ALPHA16F_ARB 0x881C #define GL_INTENSITY16F_ARB 0x881D #define GL_LUMINANCE16F_ARB 0x881E #define GL_LUMINANCE_ALPHA16F_ARB 0x881F #endif /* GL_ARB_pixel_buffer_object */ #ifndef GL_ARB_pixel_buffer_object #define GL_ARB_pixel_buffer_object 1 #define __GLEE_GL_ARB_pixel_buffer_object 1 /* Constants */ #define GL_PIXEL_PACK_BUFFER_ARB 0x88EB #define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC #define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED #define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF #endif /* GL_ARB_depth_buffer_float */ #ifndef GL_ARB_depth_buffer_float #define GL_ARB_depth_buffer_float 1 #define __GLEE_GL_ARB_depth_buffer_float 1 /* Constants */ #define GL_DEPTH_COMPONENT32F 0x8CAC #define GL_DEPTH32F_STENCIL8 0x8CAD #define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD #endif /* GL_ARB_draw_instanced */ #ifndef GL_ARB_draw_instanced #define GL_ARB_draw_instanced 1 #define __GLEE_GL_ARB_draw_instanced 1 /* Constants */ #ifndef GLEE_H_DEFINED_glDrawArraysInstancedARB #define GLEE_H_DEFINED_glDrawArraysInstancedARB typedef void (APIENTRYP GLEEPFNGLDRAWARRAYSINSTANCEDARBPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); GLEE_EXTERN GLEEPFNGLDRAWARRAYSINSTANCEDARBPROC GLeeFuncPtr_glDrawArraysInstancedARB; #define glDrawArraysInstancedARB GLeeFuncPtr_glDrawArraysInstancedARB #endif #ifndef GLEE_H_DEFINED_glDrawElementsInstancedARB #define GLEE_H_DEFINED_glDrawElementsInstancedARB typedef void (APIENTRYP GLEEPFNGLDRAWELEMENTSINSTANCEDARBPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLsizei primcount); GLEE_EXTERN GLEEPFNGLDRAWELEMENTSINSTANCEDARBPROC GLeeFuncPtr_glDrawElementsInstancedARB; #define glDrawElementsInstancedARB GLeeFuncPtr_glDrawElementsInstancedARB #endif #endif /* GL_ARB_framebuffer_object */ #ifndef GL_ARB_framebuffer_object #define GL_ARB_framebuffer_object 1 #define __GLEE_GL_ARB_framebuffer_object 1 /* Constants */ #define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 #define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 #define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 #define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 #define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 #define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 #define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 #define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 #define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 #define GL_FRAMEBUFFER_DEFAULT 0x8218 #define GL_FRAMEBUFFER_UNDEFINED 0x8219 #define GL_DEPTH_STENCIL_ATTACHMENT 0x821A #define GL_MAX_RENDERBUFFER_SIZE 0x84E8 #define GL_DEPTH_STENCIL 0x84F9 #define GL_UNSIGNED_INT_24_8 0x84FA #define GL_DEPTH24_STENCIL8 0x88F0 #define GL_TEXTURE_STENCIL_SIZE 0x88F1 #define GL_TEXTURE_RED_TYPE 0x8C10 #define GL_TEXTURE_GREEN_TYPE 0x8C11 #define GL_TEXTURE_BLUE_TYPE 0x8C12 #define GL_TEXTURE_ALPHA_TYPE 0x8C13 #define GL_TEXTURE_DEPTH_TYPE 0x8C16 #define GL_UNSIGNED_NORMALIZED 0x8C17 #define GL_FRAMEBUFFER_BINDING 0x8CA6 #define GL_DRAW_FRAMEBUFFER_BINDING GL_FRAMEBUFFER_BINDING #define GL_RENDERBUFFER_BINDING 0x8CA7 #define GL_READ_FRAMEBUFFER 0x8CA8 #define GL_DRAW_FRAMEBUFFER 0x8CA9 #define GL_READ_FRAMEBUFFER_BINDING 0x8CAA #define GL_RENDERBUFFER_SAMPLES 0x8CAB #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 #define GL_FRAMEBUFFER_COMPLETE 0x8CD5 #define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 #define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 #define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB #define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC #define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD #define GL_MAX_COLOR_ATTACHMENTS 0x8CDF #define GL_COLOR_ATTACHMENT0 0x8CE0 #define GL_COLOR_ATTACHMENT1 0x8CE1 #define GL_COLOR_ATTACHMENT2 0x8CE2 #define GL_COLOR_ATTACHMENT3 0x8CE3 #define GL_COLOR_ATTACHMENT4 0x8CE4 #define GL_COLOR_ATTACHMENT5 0x8CE5 #define GL_COLOR_ATTACHMENT6 0x8CE6 #define GL_COLOR_ATTACHMENT7 0x8CE7 #define GL_COLOR_ATTACHMENT8 0x8CE8 #define GL_COLOR_ATTACHMENT9 0x8CE9 #define GL_COLOR_ATTACHMENT10 0x8CEA #define GL_COLOR_ATTACHMENT11 0x8CEB #define GL_COLOR_ATTACHMENT12 0x8CEC #define GL_COLOR_ATTACHMENT13 0x8CED #define GL_COLOR_ATTACHMENT14 0x8CEE #define GL_COLOR_ATTACHMENT15 0x8CEF #define GL_DEPTH_ATTACHMENT 0x8D00 #define GL_STENCIL_ATTACHMENT 0x8D20 #define GL_FRAMEBUFFER 0x8D40 #define GL_RENDERBUFFER 0x8D41 #define GL_RENDERBUFFER_WIDTH 0x8D42 #define GL_RENDERBUFFER_HEIGHT 0x8D43 #define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 #define GL_STENCIL_INDEX1 0x8D46 #define GL_STENCIL_INDEX4 0x8D47 #define GL_STENCIL_INDEX8 0x8D48 #define GL_STENCIL_INDEX16 0x8D49 #define GL_RENDERBUFFER_RED_SIZE 0x8D50 #define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 #define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 #define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 #define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 #define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 #define GL_MAX_SAMPLES 0x8D57 #define GL_INDEX 0x8222 #define GL_TEXTURE_LUMINANCE_TYPE 0x8C14 #define GL_TEXTURE_INTENSITY_TYPE 0x8C15 #ifndef GLEE_H_DEFINED_glIsRenderbuffer #define GLEE_H_DEFINED_glIsRenderbuffer typedef GLboolean (APIENTRYP GLEEPFNGLISRENDERBUFFERPROC) (GLuint renderbuffer); GLEE_EXTERN GLEEPFNGLISRENDERBUFFERPROC GLeeFuncPtr_glIsRenderbuffer; #define glIsRenderbuffer GLeeFuncPtr_glIsRenderbuffer #endif #ifndef GLEE_H_DEFINED_glBindRenderbuffer #define GLEE_H_DEFINED_glBindRenderbuffer typedef void (APIENTRYP GLEEPFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer); GLEE_EXTERN GLEEPFNGLBINDRENDERBUFFERPROC GLeeFuncPtr_glBindRenderbuffer; #define glBindRenderbuffer GLeeFuncPtr_glBindRenderbuffer #endif #ifndef GLEE_H_DEFINED_glDeleteRenderbuffers #define GLEE_H_DEFINED_glDeleteRenderbuffers typedef void (APIENTRYP GLEEPFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint * renderbuffers); GLEE_EXTERN GLEEPFNGLDELETERENDERBUFFERSPROC GLeeFuncPtr_glDeleteRenderbuffers; #define glDeleteRenderbuffers GLeeFuncPtr_glDeleteRenderbuffers #endif #ifndef GLEE_H_DEFINED_glGenRenderbuffers #define GLEE_H_DEFINED_glGenRenderbuffers typedef void (APIENTRYP GLEEPFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint * renderbuffers); GLEE_EXTERN GLEEPFNGLGENRENDERBUFFERSPROC GLeeFuncPtr_glGenRenderbuffers; #define glGenRenderbuffers GLeeFuncPtr_glGenRenderbuffers #endif #ifndef GLEE_H_DEFINED_glRenderbufferStorage #define GLEE_H_DEFINED_glRenderbufferStorage typedef void (APIENTRYP GLEEPFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLRENDERBUFFERSTORAGEPROC GLeeFuncPtr_glRenderbufferStorage; #define glRenderbufferStorage GLeeFuncPtr_glRenderbufferStorage #endif #ifndef GLEE_H_DEFINED_glGetRenderbufferParameteriv #define GLEE_H_DEFINED_glGetRenderbufferParameteriv typedef void (APIENTRYP GLEEPFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETRENDERBUFFERPARAMETERIVPROC GLeeFuncPtr_glGetRenderbufferParameteriv; #define glGetRenderbufferParameteriv GLeeFuncPtr_glGetRenderbufferParameteriv #endif #ifndef GLEE_H_DEFINED_glIsFramebuffer #define GLEE_H_DEFINED_glIsFramebuffer typedef GLboolean (APIENTRYP GLEEPFNGLISFRAMEBUFFERPROC) (GLuint framebuffer); GLEE_EXTERN GLEEPFNGLISFRAMEBUFFERPROC GLeeFuncPtr_glIsFramebuffer; #define glIsFramebuffer GLeeFuncPtr_glIsFramebuffer #endif #ifndef GLEE_H_DEFINED_glBindFramebuffer #define GLEE_H_DEFINED_glBindFramebuffer typedef void (APIENTRYP GLEEPFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer); GLEE_EXTERN GLEEPFNGLBINDFRAMEBUFFERPROC GLeeFuncPtr_glBindFramebuffer; #define glBindFramebuffer GLeeFuncPtr_glBindFramebuffer #endif #ifndef GLEE_H_DEFINED_glDeleteFramebuffers #define GLEE_H_DEFINED_glDeleteFramebuffers typedef void (APIENTRYP GLEEPFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint * framebuffers); GLEE_EXTERN GLEEPFNGLDELETEFRAMEBUFFERSPROC GLeeFuncPtr_glDeleteFramebuffers; #define glDeleteFramebuffers GLeeFuncPtr_glDeleteFramebuffers #endif #ifndef GLEE_H_DEFINED_glGenFramebuffers #define GLEE_H_DEFINED_glGenFramebuffers typedef void (APIENTRYP GLEEPFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint * framebuffers); GLEE_EXTERN GLEEPFNGLGENFRAMEBUFFERSPROC GLeeFuncPtr_glGenFramebuffers; #define glGenFramebuffers GLeeFuncPtr_glGenFramebuffers #endif #ifndef GLEE_H_DEFINED_glCheckFramebufferStatus #define GLEE_H_DEFINED_glCheckFramebufferStatus typedef GLenum (APIENTRYP GLEEPFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target); GLEE_EXTERN GLEEPFNGLCHECKFRAMEBUFFERSTATUSPROC GLeeFuncPtr_glCheckFramebufferStatus; #define glCheckFramebufferStatus GLeeFuncPtr_glCheckFramebufferStatus #endif #ifndef GLEE_H_DEFINED_glFramebufferTexture1D #define GLEE_H_DEFINED_glFramebufferTexture1D typedef void (APIENTRYP GLEEPFNGLFRAMEBUFFERTEXTURE1DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERTEXTURE1DPROC GLeeFuncPtr_glFramebufferTexture1D; #define glFramebufferTexture1D GLeeFuncPtr_glFramebufferTexture1D #endif #ifndef GLEE_H_DEFINED_glFramebufferTexture2D #define GLEE_H_DEFINED_glFramebufferTexture2D typedef void (APIENTRYP GLEEPFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERTEXTURE2DPROC GLeeFuncPtr_glFramebufferTexture2D; #define glFramebufferTexture2D GLeeFuncPtr_glFramebufferTexture2D #endif #ifndef GLEE_H_DEFINED_glFramebufferTexture3D #define GLEE_H_DEFINED_glFramebufferTexture3D typedef void (APIENTRYP GLEEPFNGLFRAMEBUFFERTEXTURE3DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERTEXTURE3DPROC GLeeFuncPtr_glFramebufferTexture3D; #define glFramebufferTexture3D GLeeFuncPtr_glFramebufferTexture3D #endif #ifndef GLEE_H_DEFINED_glFramebufferRenderbuffer #define GLEE_H_DEFINED_glFramebufferRenderbuffer typedef void (APIENTRYP GLEEPFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERRENDERBUFFERPROC GLeeFuncPtr_glFramebufferRenderbuffer; #define glFramebufferRenderbuffer GLeeFuncPtr_glFramebufferRenderbuffer #endif #ifndef GLEE_H_DEFINED_glGetFramebufferAttachmentParameteriv #define GLEE_H_DEFINED_glGetFramebufferAttachmentParameteriv typedef void (APIENTRYP GLEEPFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC GLeeFuncPtr_glGetFramebufferAttachmentParameteriv; #define glGetFramebufferAttachmentParameteriv GLeeFuncPtr_glGetFramebufferAttachmentParameteriv #endif #ifndef GLEE_H_DEFINED_glGenerateMipmap #define GLEE_H_DEFINED_glGenerateMipmap typedef void (APIENTRYP GLEEPFNGLGENERATEMIPMAPPROC) (GLenum target); GLEE_EXTERN GLEEPFNGLGENERATEMIPMAPPROC GLeeFuncPtr_glGenerateMipmap; #define glGenerateMipmap GLeeFuncPtr_glGenerateMipmap #endif #ifndef GLEE_H_DEFINED_glBlitFramebuffer #define GLEE_H_DEFINED_glBlitFramebuffer typedef void (APIENTRYP GLEEPFNGLBLITFRAMEBUFFERPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); GLEE_EXTERN GLEEPFNGLBLITFRAMEBUFFERPROC GLeeFuncPtr_glBlitFramebuffer; #define glBlitFramebuffer GLeeFuncPtr_glBlitFramebuffer #endif #ifndef GLEE_H_DEFINED_glRenderbufferStorageMultisample #define GLEE_H_DEFINED_glRenderbufferStorageMultisample typedef void (APIENTRYP GLEEPFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC GLeeFuncPtr_glRenderbufferStorageMultisample; #define glRenderbufferStorageMultisample GLeeFuncPtr_glRenderbufferStorageMultisample #endif #ifndef GLEE_H_DEFINED_glFramebufferTextureLayer #define GLEE_H_DEFINED_glFramebufferTextureLayer typedef void (APIENTRYP GLEEPFNGLFRAMEBUFFERTEXTURELAYERPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERTEXTURELAYERPROC GLeeFuncPtr_glFramebufferTextureLayer; #define glFramebufferTextureLayer GLeeFuncPtr_glFramebufferTextureLayer #endif #endif /* GL_ARB_framebuffer_sRGB */ #ifndef GL_ARB_framebuffer_sRGB #define GL_ARB_framebuffer_sRGB 1 #define __GLEE_GL_ARB_framebuffer_sRGB 1 /* Constants */ #define GL_FRAMEBUFFER_SRGB 0x8DB9 #endif /* GL_ARB_geometry_shader4 */ #ifndef GL_ARB_geometry_shader4 #define GL_ARB_geometry_shader4 1 #define __GLEE_GL_ARB_geometry_shader4 1 /* Constants */ #define GL_LINES_ADJACENCY_ARB 0x000A #define GL_LINE_STRIP_ADJACENCY_ARB 0x000B #define GL_TRIANGLES_ADJACENCY_ARB 0x000C #define GL_TRIANGLE_STRIP_ADJACENCY_ARB 0x000D #define GL_PROGRAM_POINT_SIZE_ARB 0x8642 #define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29 #define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8DA7 #define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8DA8 #define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8DA9 #define GL_GEOMETRY_SHADER_ARB 0x8DD9 #define GL_GEOMETRY_VERTICES_OUT_ARB 0x8DDA #define GL_GEOMETRY_INPUT_TYPE_ARB 0x8DDB #define GL_GEOMETRY_OUTPUT_TYPE_ARB 0x8DDC #define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8DDD #define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8DDE #define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8DDF #define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8DE0 #define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8DE1 #ifndef GLEE_H_DEFINED_glProgramParameteriARB #define GLEE_H_DEFINED_glProgramParameteriARB typedef void (APIENTRYP GLEEPFNGLPROGRAMPARAMETERIARBPROC) (GLuint program, GLenum pname, GLint value); GLEE_EXTERN GLEEPFNGLPROGRAMPARAMETERIARBPROC GLeeFuncPtr_glProgramParameteriARB; #define glProgramParameteriARB GLeeFuncPtr_glProgramParameteriARB #endif #ifndef GLEE_H_DEFINED_glFramebufferTextureARB #define GLEE_H_DEFINED_glFramebufferTextureARB typedef void (APIENTRYP GLEEPFNGLFRAMEBUFFERTEXTUREARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERTEXTUREARBPROC GLeeFuncPtr_glFramebufferTextureARB; #define glFramebufferTextureARB GLeeFuncPtr_glFramebufferTextureARB #endif #ifndef GLEE_H_DEFINED_glFramebufferTextureLayerARB #define GLEE_H_DEFINED_glFramebufferTextureLayerARB typedef void (APIENTRYP GLEEPFNGLFRAMEBUFFERTEXTURELAYERARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERTEXTURELAYERARBPROC GLeeFuncPtr_glFramebufferTextureLayerARB; #define glFramebufferTextureLayerARB GLeeFuncPtr_glFramebufferTextureLayerARB #endif #ifndef GLEE_H_DEFINED_glFramebufferTextureFaceARB #define GLEE_H_DEFINED_glFramebufferTextureFaceARB typedef void (APIENTRYP GLEEPFNGLFRAMEBUFFERTEXTUREFACEARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERTEXTUREFACEARBPROC GLeeFuncPtr_glFramebufferTextureFaceARB; #define glFramebufferTextureFaceARB GLeeFuncPtr_glFramebufferTextureFaceARB #endif #endif /* GL_ARB_half_float_vertex */ #ifndef GL_ARB_half_float_vertex #define GL_ARB_half_float_vertex 1 #define __GLEE_GL_ARB_half_float_vertex 1 /* Constants */ #define GL_HALF_FLOAT 0x140B #endif /* GL_ARB_instanced_arrays */ #ifndef GL_ARB_instanced_arrays #define GL_ARB_instanced_arrays 1 #define __GLEE_GL_ARB_instanced_arrays 1 /* Constants */ #define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE #ifndef GLEE_H_DEFINED_glVertexAttribDivisorARB #define GLEE_H_DEFINED_glVertexAttribDivisorARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBDIVISORARBPROC) (GLuint index, GLuint divisor); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBDIVISORARBPROC GLeeFuncPtr_glVertexAttribDivisorARB; #define glVertexAttribDivisorARB GLeeFuncPtr_glVertexAttribDivisorARB #endif #endif /* GL_ARB_map_buffer_range */ #ifndef GL_ARB_map_buffer_range #define GL_ARB_map_buffer_range 1 #define __GLEE_GL_ARB_map_buffer_range 1 /* Constants */ #define GL_MAP_READ_BIT 0x0001 #define GL_MAP_WRITE_BIT 0x0002 #define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 #define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 #define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 #define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 #ifndef GLEE_H_DEFINED_glMapBufferRange #define GLEE_H_DEFINED_glMapBufferRange typedef GLvoid* (APIENTRYP GLEEPFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); GLEE_EXTERN GLEEPFNGLMAPBUFFERRANGEPROC GLeeFuncPtr_glMapBufferRange; #define glMapBufferRange GLeeFuncPtr_glMapBufferRange #endif #ifndef GLEE_H_DEFINED_glFlushMappedBufferRange #define GLEE_H_DEFINED_glFlushMappedBufferRange typedef void (APIENTRYP GLEEPFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length); GLEE_EXTERN GLEEPFNGLFLUSHMAPPEDBUFFERRANGEPROC GLeeFuncPtr_glFlushMappedBufferRange; #define glFlushMappedBufferRange GLeeFuncPtr_glFlushMappedBufferRange #endif #endif /* GL_ARB_texture_buffer_object */ #ifndef GL_ARB_texture_buffer_object #define GL_ARB_texture_buffer_object 1 #define __GLEE_GL_ARB_texture_buffer_object 1 /* Constants */ #define GL_TEXTURE_BUFFER_ARB 0x8C2A #define GL_MAX_TEXTURE_BUFFER_SIZE_ARB 0x8C2B #define GL_TEXTURE_BINDING_BUFFER_ARB 0x8C2C #define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB 0x8C2D #define GL_TEXTURE_BUFFER_FORMAT_ARB 0x8C2E #ifndef GLEE_H_DEFINED_glTexBufferARB #define GLEE_H_DEFINED_glTexBufferARB typedef void (APIENTRYP GLEEPFNGLTEXBUFFERARBPROC) (GLenum target, GLenum internalformat, GLuint buffer); GLEE_EXTERN GLEEPFNGLTEXBUFFERARBPROC GLeeFuncPtr_glTexBufferARB; #define glTexBufferARB GLeeFuncPtr_glTexBufferARB #endif #endif /* GL_ARB_texture_compression_rgtc */ #ifndef GL_ARB_texture_compression_rgtc #define GL_ARB_texture_compression_rgtc 1 #define __GLEE_GL_ARB_texture_compression_rgtc 1 /* Constants */ #define GL_COMPRESSED_RED_RGTC1 0x8DBB #define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC #define GL_COMPRESSED_RG_RGTC2 0x8DBD #define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE #endif /* GL_ARB_texture_rg */ #ifndef GL_ARB_texture_rg #define GL_ARB_texture_rg 1 #define __GLEE_GL_ARB_texture_rg 1 /* Constants */ #define GL_RG 0x8227 #define GL_RG_INTEGER 0x8228 #define GL_R8 0x8229 #define GL_R16 0x822A #define GL_RG8 0x822B #define GL_RG16 0x822C #define GL_R16F 0x822D #define GL_R32F 0x822E #define GL_RG16F 0x822F #define GL_RG32F 0x8230 #define GL_R8I 0x8231 #define GL_R8UI 0x8232 #define GL_R16I 0x8233 #define GL_R16UI 0x8234 #define GL_R32I 0x8235 #define GL_R32UI 0x8236 #define GL_RG8I 0x8237 #define GL_RG8UI 0x8238 #define GL_RG16I 0x8239 #define GL_RG16UI 0x823A #define GL_RG32I 0x823B #define GL_RG32UI 0x823C #endif /* GL_ARB_vertex_array_object */ #ifndef GL_ARB_vertex_array_object #define GL_ARB_vertex_array_object 1 #define __GLEE_GL_ARB_vertex_array_object 1 /* Constants */ #define GL_VERTEX_ARRAY_BINDING 0x85B5 #ifndef GLEE_H_DEFINED_glBindVertexArray #define GLEE_H_DEFINED_glBindVertexArray typedef void (APIENTRYP GLEEPFNGLBINDVERTEXARRAYPROC) (GLuint array); GLEE_EXTERN GLEEPFNGLBINDVERTEXARRAYPROC GLeeFuncPtr_glBindVertexArray; #define glBindVertexArray GLeeFuncPtr_glBindVertexArray #endif #ifndef GLEE_H_DEFINED_glDeleteVertexArrays #define GLEE_H_DEFINED_glDeleteVertexArrays typedef void (APIENTRYP GLEEPFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint * arrays); GLEE_EXTERN GLEEPFNGLDELETEVERTEXARRAYSPROC GLeeFuncPtr_glDeleteVertexArrays; #define glDeleteVertexArrays GLeeFuncPtr_glDeleteVertexArrays #endif #ifndef GLEE_H_DEFINED_glGenVertexArrays #define GLEE_H_DEFINED_glGenVertexArrays typedef void (APIENTRYP GLEEPFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint * arrays); GLEE_EXTERN GLEEPFNGLGENVERTEXARRAYSPROC GLeeFuncPtr_glGenVertexArrays; #define glGenVertexArrays GLeeFuncPtr_glGenVertexArrays #endif #ifndef GLEE_H_DEFINED_glIsVertexArray #define GLEE_H_DEFINED_glIsVertexArray typedef GLboolean (APIENTRYP GLEEPFNGLISVERTEXARRAYPROC) (GLuint array); GLEE_EXTERN GLEEPFNGLISVERTEXARRAYPROC GLeeFuncPtr_glIsVertexArray; #define glIsVertexArray GLeeFuncPtr_glIsVertexArray #endif #endif /* GL_ARB_uniform_buffer_object */ #ifndef GL_ARB_uniform_buffer_object #define GL_ARB_uniform_buffer_object 1 #define __GLEE_GL_ARB_uniform_buffer_object 1 /* Constants */ #define GL_UNIFORM_BUFFER 0x8A11 #define GL_UNIFORM_BUFFER_BINDING 0x8A28 #define GL_UNIFORM_BUFFER_START 0x8A29 #define GL_UNIFORM_BUFFER_SIZE 0x8A2A #define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B #define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C #define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D #define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E #define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F #define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 #define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 #define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 #define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 #define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 #define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 #define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 #define GL_UNIFORM_TYPE 0x8A37 #define GL_UNIFORM_SIZE 0x8A38 #define GL_UNIFORM_NAME_LENGTH 0x8A39 #define GL_UNIFORM_BLOCK_INDEX 0x8A3A #define GL_UNIFORM_OFFSET 0x8A3B #define GL_UNIFORM_ARRAY_STRIDE 0x8A3C #define GL_UNIFORM_MATRIX_STRIDE 0x8A3D #define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E #define GL_UNIFORM_BLOCK_BINDING 0x8A3F #define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 #define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 #define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 #define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 #define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 #define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 #define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 #define GL_INVALID_INDEX 0xFFFFFFFFu #ifndef GLEE_H_DEFINED_glGetUniformIndices #define GLEE_H_DEFINED_glGetUniformIndices typedef void (APIENTRYP GLEEPFNGLGETUNIFORMINDICESPROC) (GLuint program, GLsizei uniformCount, const GLchar* const * uniformNames, GLuint * uniformIndices); GLEE_EXTERN GLEEPFNGLGETUNIFORMINDICESPROC GLeeFuncPtr_glGetUniformIndices; #define glGetUniformIndices GLeeFuncPtr_glGetUniformIndices #endif #ifndef GLEE_H_DEFINED_glGetActiveUniformsiv #define GLEE_H_DEFINED_glGetActiveUniformsiv typedef void (APIENTRYP GLEEPFNGLGETACTIVEUNIFORMSIVPROC) (GLuint program, GLsizei uniformCount, const GLuint * uniformIndices, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETACTIVEUNIFORMSIVPROC GLeeFuncPtr_glGetActiveUniformsiv; #define glGetActiveUniformsiv GLeeFuncPtr_glGetActiveUniformsiv #endif #ifndef GLEE_H_DEFINED_glGetActiveUniformName #define GLEE_H_DEFINED_glGetActiveUniformName typedef void (APIENTRYP GLEEPFNGLGETACTIVEUNIFORMNAMEPROC) (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei * length, GLchar * uniformName); GLEE_EXTERN GLEEPFNGLGETACTIVEUNIFORMNAMEPROC GLeeFuncPtr_glGetActiveUniformName; #define glGetActiveUniformName GLeeFuncPtr_glGetActiveUniformName #endif #ifndef GLEE_H_DEFINED_glGetUniformBlockIndex #define GLEE_H_DEFINED_glGetUniformBlockIndex typedef GLuint (APIENTRYP GLEEPFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const GLchar * uniformBlockName); GLEE_EXTERN GLEEPFNGLGETUNIFORMBLOCKINDEXPROC GLeeFuncPtr_glGetUniformBlockIndex; #define glGetUniformBlockIndex GLeeFuncPtr_glGetUniformBlockIndex #endif #ifndef GLEE_H_DEFINED_glGetActiveUniformBlockiv #define GLEE_H_DEFINED_glGetActiveUniformBlockiv typedef void (APIENTRYP GLEEPFNGLGETACTIVEUNIFORMBLOCKIVPROC) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETACTIVEUNIFORMBLOCKIVPROC GLeeFuncPtr_glGetActiveUniformBlockiv; #define glGetActiveUniformBlockiv GLeeFuncPtr_glGetActiveUniformBlockiv #endif #ifndef GLEE_H_DEFINED_glGetActiveUniformBlockName #define GLEE_H_DEFINED_glGetActiveUniformBlockName typedef void (APIENTRYP GLEEPFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei * length, GLchar * uniformBlockName); GLEE_EXTERN GLEEPFNGLGETACTIVEUNIFORMBLOCKNAMEPROC GLeeFuncPtr_glGetActiveUniformBlockName; #define glGetActiveUniformBlockName GLeeFuncPtr_glGetActiveUniformBlockName #endif #ifndef GLEE_H_DEFINED_glUniformBlockBinding #define GLEE_H_DEFINED_glUniformBlockBinding typedef void (APIENTRYP GLEEPFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); GLEE_EXTERN GLEEPFNGLUNIFORMBLOCKBINDINGPROC GLeeFuncPtr_glUniformBlockBinding; #define glUniformBlockBinding GLeeFuncPtr_glUniformBlockBinding #endif #endif /* GL_ARB_compatibility */ #ifndef GL_ARB_compatibility #define GL_ARB_compatibility 1 #define __GLEE_GL_ARB_compatibility 1 /* Constants */ #endif /* GL_ARB_copy_buffer */ #ifndef GL_ARB_copy_buffer #define GL_ARB_copy_buffer 1 #define __GLEE_GL_ARB_copy_buffer 1 /* Constants */ #define GL_COPY_READ_BUFFER_BINDING 0x8F36 #define GL_COPY_READ_BUFFER GL_COPY_READ_BUFFER_BINDING #define GL_COPY_WRITE_BUFFER_BINDING 0x8F37 #define GL_COPY_WRITE_BUFFER GL_COPY_WRITE_BUFFER_BINDING #ifndef GLEE_H_DEFINED_glCopyBufferSubData #define GLEE_H_DEFINED_glCopyBufferSubData typedef void (APIENTRYP GLEEPFNGLCOPYBUFFERSUBDATAPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); GLEE_EXTERN GLEEPFNGLCOPYBUFFERSUBDATAPROC GLeeFuncPtr_glCopyBufferSubData; #define glCopyBufferSubData GLeeFuncPtr_glCopyBufferSubData #endif #endif /* GL_ARB_shader_texture_lod */ #ifndef GL_ARB_shader_texture_lod #define GL_ARB_shader_texture_lod 1 #define __GLEE_GL_ARB_shader_texture_lod 1 /* Constants */ #endif /* GL_ARB_depth_clamp */ #ifndef GL_ARB_depth_clamp #define GL_ARB_depth_clamp 1 #define __GLEE_GL_ARB_depth_clamp 1 /* Constants */ #define GL_DEPTH_CLAMP 0x864F #endif /* GL_ARB_draw_elements_base_vertex */ #ifndef GL_ARB_draw_elements_base_vertex #define GL_ARB_draw_elements_base_vertex 1 #define __GLEE_GL_ARB_draw_elements_base_vertex 1 /* Constants */ #ifndef GLEE_H_DEFINED_glDrawElementsBaseVertex #define GLEE_H_DEFINED_glDrawElementsBaseVertex typedef void (APIENTRYP GLEEPFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLint basevertex); GLEE_EXTERN GLEEPFNGLDRAWELEMENTSBASEVERTEXPROC GLeeFuncPtr_glDrawElementsBaseVertex; #define glDrawElementsBaseVertex GLeeFuncPtr_glDrawElementsBaseVertex #endif #ifndef GLEE_H_DEFINED_glDrawRangeElementsBaseVertex #define GLEE_H_DEFINED_glDrawRangeElementsBaseVertex typedef void (APIENTRYP GLEEPFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices, GLint basevertex); GLEE_EXTERN GLEEPFNGLDRAWRANGEELEMENTSBASEVERTEXPROC GLeeFuncPtr_glDrawRangeElementsBaseVertex; #define glDrawRangeElementsBaseVertex GLeeFuncPtr_glDrawRangeElementsBaseVertex #endif #ifndef GLEE_H_DEFINED_glDrawElementsInstancedBaseVertex #define GLEE_H_DEFINED_glDrawElementsInstancedBaseVertex typedef void (APIENTRYP GLEEPFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLsizei instancecount, GLint basevertex); GLEE_EXTERN GLEEPFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC GLeeFuncPtr_glDrawElementsInstancedBaseVertex; #define glDrawElementsInstancedBaseVertex GLeeFuncPtr_glDrawElementsInstancedBaseVertex #endif #ifndef GLEE_H_DEFINED_glMultiDrawElementsBaseVertex #define GLEE_H_DEFINED_glMultiDrawElementsBaseVertex typedef void (APIENTRYP GLEEPFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, const GLsizei * count, GLenum type, const GLvoid* const * indices, GLsizei drawcount, const GLint * basevertex); GLEE_EXTERN GLEEPFNGLMULTIDRAWELEMENTSBASEVERTEXPROC GLeeFuncPtr_glMultiDrawElementsBaseVertex; #define glMultiDrawElementsBaseVertex GLeeFuncPtr_glMultiDrawElementsBaseVertex #endif #endif /* GL_ARB_fragment_coord_conventions */ #ifndef GL_ARB_fragment_coord_conventions #define GL_ARB_fragment_coord_conventions 1 #define __GLEE_GL_ARB_fragment_coord_conventions 1 /* Constants */ #endif /* GL_ARB_provoking_vertex */ #ifndef GL_ARB_provoking_vertex #define GL_ARB_provoking_vertex 1 #define __GLEE_GL_ARB_provoking_vertex 1 /* Constants */ #define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C #define GL_FIRST_VERTEX_CONVENTION 0x8E4D #define GL_LAST_VERTEX_CONVENTION 0x8E4E #define GL_PROVOKING_VERTEX 0x8E4F #ifndef GLEE_H_DEFINED_glProvokingVertex #define GLEE_H_DEFINED_glProvokingVertex typedef void (APIENTRYP GLEEPFNGLPROVOKINGVERTEXPROC) (GLenum mode); GLEE_EXTERN GLEEPFNGLPROVOKINGVERTEXPROC GLeeFuncPtr_glProvokingVertex; #define glProvokingVertex GLeeFuncPtr_glProvokingVertex #endif #endif /* GL_ARB_seamless_cube_map */ #ifndef GL_ARB_seamless_cube_map #define GL_ARB_seamless_cube_map 1 #define __GLEE_GL_ARB_seamless_cube_map 1 /* Constants */ #define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F #endif /* GL_ARB_sync */ #ifndef GL_ARB_sync #define GL_ARB_sync 1 #define __GLEE_GL_ARB_sync 1 /* Constants */ #define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 #define GL_OBJECT_TYPE 0x9112 #define GL_SYNC_CONDITION 0x9113 #define GL_SYNC_STATUS 0x9114 #define GL_SYNC_FLAGS 0x9115 #define GL_SYNC_FENCE 0x9116 #define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 #define GL_UNSIGNALED 0x9118 #define GL_SIGNALED 0x9119 #define GL_ALREADY_SIGNALED 0x911A #define GL_TIMEOUT_EXPIRED 0x911B #define GL_CONDITION_SATISFIED 0x911C #define GL_WAIT_FAILED 0x911D #define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 #define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull #ifndef GLEE_H_DEFINED_glFenceSync #define GLEE_H_DEFINED_glFenceSync typedef GLsync (APIENTRYP GLEEPFNGLFENCESYNCPROC) (GLenum condition, GLbitfield flags); GLEE_EXTERN GLEEPFNGLFENCESYNCPROC GLeeFuncPtr_glFenceSync; #define glFenceSync GLeeFuncPtr_glFenceSync #endif #ifndef GLEE_H_DEFINED_glIsSync #define GLEE_H_DEFINED_glIsSync typedef GLboolean (APIENTRYP GLEEPFNGLISSYNCPROC) (GLsync sync); GLEE_EXTERN GLEEPFNGLISSYNCPROC GLeeFuncPtr_glIsSync; #define glIsSync GLeeFuncPtr_glIsSync #endif #ifndef GLEE_H_DEFINED_glDeleteSync #define GLEE_H_DEFINED_glDeleteSync typedef void (APIENTRYP GLEEPFNGLDELETESYNCPROC) (GLsync sync); GLEE_EXTERN GLEEPFNGLDELETESYNCPROC GLeeFuncPtr_glDeleteSync; #define glDeleteSync GLeeFuncPtr_glDeleteSync #endif #ifndef GLEE_H_DEFINED_glClientWaitSync #define GLEE_H_DEFINED_glClientWaitSync typedef GLenum (APIENTRYP GLEEPFNGLCLIENTWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); GLEE_EXTERN GLEEPFNGLCLIENTWAITSYNCPROC GLeeFuncPtr_glClientWaitSync; #define glClientWaitSync GLeeFuncPtr_glClientWaitSync #endif #ifndef GLEE_H_DEFINED_glWaitSync #define GLEE_H_DEFINED_glWaitSync typedef void (APIENTRYP GLEEPFNGLWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); GLEE_EXTERN GLEEPFNGLWAITSYNCPROC GLeeFuncPtr_glWaitSync; #define glWaitSync GLeeFuncPtr_glWaitSync #endif #ifndef GLEE_H_DEFINED_glGetInteger64v #define GLEE_H_DEFINED_glGetInteger64v typedef void (APIENTRYP GLEEPFNGLGETINTEGER64VPROC) (GLenum pname, GLint64 * params); GLEE_EXTERN GLEEPFNGLGETINTEGER64VPROC GLeeFuncPtr_glGetInteger64v; #define glGetInteger64v GLeeFuncPtr_glGetInteger64v #endif #ifndef GLEE_H_DEFINED_glGetSynciv #define GLEE_H_DEFINED_glGetSynciv typedef void (APIENTRYP GLEEPFNGLGETSYNCIVPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * values); GLEE_EXTERN GLEEPFNGLGETSYNCIVPROC GLeeFuncPtr_glGetSynciv; #define glGetSynciv GLeeFuncPtr_glGetSynciv #endif #endif /* GL_ARB_texture_multisample */ #ifndef GL_ARB_texture_multisample #define GL_ARB_texture_multisample 1 #define __GLEE_GL_ARB_texture_multisample 1 /* Constants */ #define GL_SAMPLE_POSITION 0x8E50 #define GL_SAMPLE_MASK 0x8E51 #define GL_SAMPLE_MASK_VALUE 0x8E52 #define GL_MAX_SAMPLE_MASK_WORDS 0x8E59 #define GL_TEXTURE_2D_MULTISAMPLE 0x9100 #define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101 #define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 #define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103 #define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104 #define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105 #define GL_TEXTURE_SAMPLES 0x9106 #define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107 #define GL_SAMPLER_2D_MULTISAMPLE 0x9108 #define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109 #define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A #define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B #define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C #define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D #define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E #define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F #define GL_MAX_INTEGER_SAMPLES 0x9110 #ifndef GLEE_H_DEFINED_glTexImage2DMultisample #define GLEE_H_DEFINED_glTexImage2DMultisample typedef void (APIENTRYP GLEEPFNGLTEXIMAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); GLEE_EXTERN GLEEPFNGLTEXIMAGE2DMULTISAMPLEPROC GLeeFuncPtr_glTexImage2DMultisample; #define glTexImage2DMultisample GLeeFuncPtr_glTexImage2DMultisample #endif #ifndef GLEE_H_DEFINED_glTexImage3DMultisample #define GLEE_H_DEFINED_glTexImage3DMultisample typedef void (APIENTRYP GLEEPFNGLTEXIMAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); GLEE_EXTERN GLEEPFNGLTEXIMAGE3DMULTISAMPLEPROC GLeeFuncPtr_glTexImage3DMultisample; #define glTexImage3DMultisample GLeeFuncPtr_glTexImage3DMultisample #endif #ifndef GLEE_H_DEFINED_glGetMultisamplefv #define GLEE_H_DEFINED_glGetMultisamplefv typedef void (APIENTRYP GLEEPFNGLGETMULTISAMPLEFVPROC) (GLenum pname, GLuint index, GLfloat * val); GLEE_EXTERN GLEEPFNGLGETMULTISAMPLEFVPROC GLeeFuncPtr_glGetMultisamplefv; #define glGetMultisamplefv GLeeFuncPtr_glGetMultisamplefv #endif #ifndef GLEE_H_DEFINED_glSampleMaski #define GLEE_H_DEFINED_glSampleMaski typedef void (APIENTRYP GLEEPFNGLSAMPLEMASKIPROC) (GLuint index, GLbitfield mask); GLEE_EXTERN GLEEPFNGLSAMPLEMASKIPROC GLeeFuncPtr_glSampleMaski; #define glSampleMaski GLeeFuncPtr_glSampleMaski #endif #endif /* GL_ARB_vertex_array_bgra */ #ifndef GL_ARB_vertex_array_bgra #define GL_ARB_vertex_array_bgra 1 #define __GLEE_GL_ARB_vertex_array_bgra 1 /* Constants */ #endif /* GL_ARB_draw_buffers_blend */ #ifndef GL_ARB_draw_buffers_blend #define GL_ARB_draw_buffers_blend 1 #define __GLEE_GL_ARB_draw_buffers_blend 1 /* Constants */ #ifndef GLEE_H_DEFINED_glBlendEquationiARB #define GLEE_H_DEFINED_glBlendEquationiARB typedef void (APIENTRYP GLEEPFNGLBLENDEQUATIONIARBPROC) (GLuint buf, GLenum mode); GLEE_EXTERN GLEEPFNGLBLENDEQUATIONIARBPROC GLeeFuncPtr_glBlendEquationiARB; #define glBlendEquationiARB GLeeFuncPtr_glBlendEquationiARB #endif #ifndef GLEE_H_DEFINED_glBlendEquationSeparateiARB #define GLEE_H_DEFINED_glBlendEquationSeparateiARB typedef void (APIENTRYP GLEEPFNGLBLENDEQUATIONSEPARATEIARBPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); GLEE_EXTERN GLEEPFNGLBLENDEQUATIONSEPARATEIARBPROC GLeeFuncPtr_glBlendEquationSeparateiARB; #define glBlendEquationSeparateiARB GLeeFuncPtr_glBlendEquationSeparateiARB #endif #ifndef GLEE_H_DEFINED_glBlendFunciARB #define GLEE_H_DEFINED_glBlendFunciARB typedef void (APIENTRYP GLEEPFNGLBLENDFUNCIARBPROC) (GLuint buf, GLenum src, GLenum dst); GLEE_EXTERN GLEEPFNGLBLENDFUNCIARBPROC GLeeFuncPtr_glBlendFunciARB; #define glBlendFunciARB GLeeFuncPtr_glBlendFunciARB #endif #ifndef GLEE_H_DEFINED_glBlendFuncSeparateiARB #define GLEE_H_DEFINED_glBlendFuncSeparateiARB typedef void (APIENTRYP GLEEPFNGLBLENDFUNCSEPARATEIARBPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); GLEE_EXTERN GLEEPFNGLBLENDFUNCSEPARATEIARBPROC GLeeFuncPtr_glBlendFuncSeparateiARB; #define glBlendFuncSeparateiARB GLeeFuncPtr_glBlendFuncSeparateiARB #endif #endif /* GL_ARB_sample_shading */ #ifndef GL_ARB_sample_shading #define GL_ARB_sample_shading 1 #define __GLEE_GL_ARB_sample_shading 1 /* Constants */ #define GL_SAMPLE_SHADING_ARB 0x8C36 #define GL_MIN_SAMPLE_SHADING_VALUE_ARB 0x8C37 #ifndef GLEE_H_DEFINED_glMinSampleShadingARB #define GLEE_H_DEFINED_glMinSampleShadingARB typedef void (APIENTRYP GLEEPFNGLMINSAMPLESHADINGARBPROC) (GLfloat value); GLEE_EXTERN GLEEPFNGLMINSAMPLESHADINGARBPROC GLeeFuncPtr_glMinSampleShadingARB; #define glMinSampleShadingARB GLeeFuncPtr_glMinSampleShadingARB #endif #endif /* GL_ARB_texture_cube_map_array */ #ifndef GL_ARB_texture_cube_map_array #define GL_ARB_texture_cube_map_array 1 #define __GLEE_GL_ARB_texture_cube_map_array 1 /* Constants */ #define GL_TEXTURE_CUBE_MAP_ARRAY_ARB 0x9009 #define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB 0x900A #define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB 0x900B #define GL_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900C #define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D #define GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900E #define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900F #endif /* GL_ARB_texture_gather */ #ifndef GL_ARB_texture_gather #define GL_ARB_texture_gather 1 #define __GLEE_GL_ARB_texture_gather 1 /* Constants */ #define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E #define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5F #define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB 0x8F9F #endif /* GL_ARB_texture_query_lod */ #ifndef GL_ARB_texture_query_lod #define GL_ARB_texture_query_lod 1 #define __GLEE_GL_ARB_texture_query_lod 1 /* Constants */ #endif /* GL_ARB_shading_language_include */ #ifndef GL_ARB_shading_language_include #define GL_ARB_shading_language_include 1 #define __GLEE_GL_ARB_shading_language_include 1 /* Constants */ #define GL_SHADER_INCLUDE_ARB 0x8DAE #define GL_NAMED_STRING_LENGTH_ARB 0x8DE9 #define GL_NAMED_STRING_TYPE_ARB 0x8DEA #ifndef GLEE_H_DEFINED_glNamedStringARB #define GLEE_H_DEFINED_glNamedStringARB typedef void (APIENTRYP GLEEPFNGLNAMEDSTRINGARBPROC) (GLenum type, GLint namelen, const GLchar * name, GLint stringlen, const GLchar * string); GLEE_EXTERN GLEEPFNGLNAMEDSTRINGARBPROC GLeeFuncPtr_glNamedStringARB; #define glNamedStringARB GLeeFuncPtr_glNamedStringARB #endif #ifndef GLEE_H_DEFINED_glDeleteNamedStringARB #define GLEE_H_DEFINED_glDeleteNamedStringARB typedef void (APIENTRYP GLEEPFNGLDELETENAMEDSTRINGARBPROC) (GLint namelen, const GLchar * name); GLEE_EXTERN GLEEPFNGLDELETENAMEDSTRINGARBPROC GLeeFuncPtr_glDeleteNamedStringARB; #define glDeleteNamedStringARB GLeeFuncPtr_glDeleteNamedStringARB #endif #ifndef GLEE_H_DEFINED_glCompileShaderIncludeARB #define GLEE_H_DEFINED_glCompileShaderIncludeARB typedef void (APIENTRYP GLEEPFNGLCOMPILESHADERINCLUDEARBPROC) (GLuint shader, GLsizei count, const GLchar* * path, const GLint * length); GLEE_EXTERN GLEEPFNGLCOMPILESHADERINCLUDEARBPROC GLeeFuncPtr_glCompileShaderIncludeARB; #define glCompileShaderIncludeARB GLeeFuncPtr_glCompileShaderIncludeARB #endif #ifndef GLEE_H_DEFINED_glIsNamedStringARB #define GLEE_H_DEFINED_glIsNamedStringARB typedef GLboolean (APIENTRYP GLEEPFNGLISNAMEDSTRINGARBPROC) (GLint namelen, const GLchar * name); GLEE_EXTERN GLEEPFNGLISNAMEDSTRINGARBPROC GLeeFuncPtr_glIsNamedStringARB; #define glIsNamedStringARB GLeeFuncPtr_glIsNamedStringARB #endif #ifndef GLEE_H_DEFINED_glGetNamedStringARB #define GLEE_H_DEFINED_glGetNamedStringARB typedef void (APIENTRYP GLEEPFNGLGETNAMEDSTRINGARBPROC) (GLint namelen, const GLchar * name, GLsizei bufSize, GLint * stringlen, GLchar * string); GLEE_EXTERN GLEEPFNGLGETNAMEDSTRINGARBPROC GLeeFuncPtr_glGetNamedStringARB; #define glGetNamedStringARB GLeeFuncPtr_glGetNamedStringARB #endif #ifndef GLEE_H_DEFINED_glGetNamedStringivARB #define GLEE_H_DEFINED_glGetNamedStringivARB typedef void (APIENTRYP GLEEPFNGLGETNAMEDSTRINGIVARBPROC) (GLint namelen, const GLchar * name, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETNAMEDSTRINGIVARBPROC GLeeFuncPtr_glGetNamedStringivARB; #define glGetNamedStringivARB GLeeFuncPtr_glGetNamedStringivARB #endif #endif /* GL_ARB_texture_compression_bptc */ #ifndef GL_ARB_texture_compression_bptc #define GL_ARB_texture_compression_bptc 1 #define __GLEE_GL_ARB_texture_compression_bptc 1 /* Constants */ #define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C #define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D #define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E #define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F #endif /* GL_ARB_blend_func_extended */ #ifndef GL_ARB_blend_func_extended #define GL_ARB_blend_func_extended 1 #define __GLEE_GL_ARB_blend_func_extended 1 /* Constants */ #define GL_SRC1_COLOR 0x88F9 #define GL_ONE_MINUS_SRC1_COLOR 0x88FA #define GL_ONE_MINUS_SRC1_ALPHA 0x88FB #define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC #ifndef GLEE_H_DEFINED_glBindFragDataLocationIndexed #define GLEE_H_DEFINED_glBindFragDataLocationIndexed typedef void (APIENTRYP GLEEPFNGLBINDFRAGDATALOCATIONINDEXEDPROC) (GLuint program, GLuint colorNumber, GLuint index, const GLchar * name); GLEE_EXTERN GLEEPFNGLBINDFRAGDATALOCATIONINDEXEDPROC GLeeFuncPtr_glBindFragDataLocationIndexed; #define glBindFragDataLocationIndexed GLeeFuncPtr_glBindFragDataLocationIndexed #endif #ifndef GLEE_H_DEFINED_glGetFragDataIndex #define GLEE_H_DEFINED_glGetFragDataIndex typedef GLint (APIENTRYP GLEEPFNGLGETFRAGDATAINDEXPROC) (GLuint program, const GLchar * name); GLEE_EXTERN GLEEPFNGLGETFRAGDATAINDEXPROC GLeeFuncPtr_glGetFragDataIndex; #define glGetFragDataIndex GLeeFuncPtr_glGetFragDataIndex #endif #endif /* GL_ARB_explicit_attrib_location */ #ifndef GL_ARB_explicit_attrib_location #define GL_ARB_explicit_attrib_location 1 #define __GLEE_GL_ARB_explicit_attrib_location 1 /* Constants */ #endif /* GL_ARB_occlusion_query2 */ #ifndef GL_ARB_occlusion_query2 #define GL_ARB_occlusion_query2 1 #define __GLEE_GL_ARB_occlusion_query2 1 /* Constants */ #define GL_ANY_SAMPLES_PASSED 0x8C2F #endif /* GL_ARB_sampler_objects */ #ifndef GL_ARB_sampler_objects #define GL_ARB_sampler_objects 1 #define __GLEE_GL_ARB_sampler_objects 1 /* Constants */ #define GL_SAMPLER_BINDING 0x8919 #ifndef GLEE_H_DEFINED_glGenSamplers #define GLEE_H_DEFINED_glGenSamplers typedef void (APIENTRYP GLEEPFNGLGENSAMPLERSPROC) (GLsizei count, GLuint * samplers); GLEE_EXTERN GLEEPFNGLGENSAMPLERSPROC GLeeFuncPtr_glGenSamplers; #define glGenSamplers GLeeFuncPtr_glGenSamplers #endif #ifndef GLEE_H_DEFINED_glDeleteSamplers #define GLEE_H_DEFINED_glDeleteSamplers typedef void (APIENTRYP GLEEPFNGLDELETESAMPLERSPROC) (GLsizei count, const GLuint * samplers); GLEE_EXTERN GLEEPFNGLDELETESAMPLERSPROC GLeeFuncPtr_glDeleteSamplers; #define glDeleteSamplers GLeeFuncPtr_glDeleteSamplers #endif #ifndef GLEE_H_DEFINED_glIsSampler #define GLEE_H_DEFINED_glIsSampler typedef GLboolean (APIENTRYP GLEEPFNGLISSAMPLERPROC) (GLuint sampler); GLEE_EXTERN GLEEPFNGLISSAMPLERPROC GLeeFuncPtr_glIsSampler; #define glIsSampler GLeeFuncPtr_glIsSampler #endif #ifndef GLEE_H_DEFINED_glBindSampler #define GLEE_H_DEFINED_glBindSampler typedef void (APIENTRYP GLEEPFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler); GLEE_EXTERN GLEEPFNGLBINDSAMPLERPROC GLeeFuncPtr_glBindSampler; #define glBindSampler GLeeFuncPtr_glBindSampler #endif #ifndef GLEE_H_DEFINED_glSamplerParameteri #define GLEE_H_DEFINED_glSamplerParameteri typedef void (APIENTRYP GLEEPFNGLSAMPLERPARAMETERIPROC) (GLuint sampler, GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLSAMPLERPARAMETERIPROC GLeeFuncPtr_glSamplerParameteri; #define glSamplerParameteri GLeeFuncPtr_glSamplerParameteri #endif #ifndef GLEE_H_DEFINED_glSamplerParameteriv #define GLEE_H_DEFINED_glSamplerParameteriv typedef void (APIENTRYP GLEEPFNGLSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, const GLint * param); GLEE_EXTERN GLEEPFNGLSAMPLERPARAMETERIVPROC GLeeFuncPtr_glSamplerParameteriv; #define glSamplerParameteriv GLeeFuncPtr_glSamplerParameteriv #endif #ifndef GLEE_H_DEFINED_glSamplerParameterf #define GLEE_H_DEFINED_glSamplerParameterf typedef void (APIENTRYP GLEEPFNGLSAMPLERPARAMETERFPROC) (GLuint sampler, GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLSAMPLERPARAMETERFPROC GLeeFuncPtr_glSamplerParameterf; #define glSamplerParameterf GLeeFuncPtr_glSamplerParameterf #endif #ifndef GLEE_H_DEFINED_glSamplerParameterfv #define GLEE_H_DEFINED_glSamplerParameterfv typedef void (APIENTRYP GLEEPFNGLSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, const GLfloat * param); GLEE_EXTERN GLEEPFNGLSAMPLERPARAMETERFVPROC GLeeFuncPtr_glSamplerParameterfv; #define glSamplerParameterfv GLeeFuncPtr_glSamplerParameterfv #endif #ifndef GLEE_H_DEFINED_glSamplerParameterIiv #define GLEE_H_DEFINED_glSamplerParameterIiv typedef void (APIENTRYP GLEEPFNGLSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, const GLint * param); GLEE_EXTERN GLEEPFNGLSAMPLERPARAMETERIIVPROC GLeeFuncPtr_glSamplerParameterIiv; #define glSamplerParameterIiv GLeeFuncPtr_glSamplerParameterIiv #endif #ifndef GLEE_H_DEFINED_glSamplerParameterIuiv #define GLEE_H_DEFINED_glSamplerParameterIuiv typedef void (APIENTRYP GLEEPFNGLSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, const GLuint * param); GLEE_EXTERN GLEEPFNGLSAMPLERPARAMETERIUIVPROC GLeeFuncPtr_glSamplerParameterIuiv; #define glSamplerParameterIuiv GLeeFuncPtr_glSamplerParameterIuiv #endif #ifndef GLEE_H_DEFINED_glGetSamplerParameteriv #define GLEE_H_DEFINED_glGetSamplerParameteriv typedef void (APIENTRYP GLEEPFNGLGETSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETSAMPLERPARAMETERIVPROC GLeeFuncPtr_glGetSamplerParameteriv; #define glGetSamplerParameteriv GLeeFuncPtr_glGetSamplerParameteriv #endif #ifndef GLEE_H_DEFINED_glGetSamplerParameterIiv #define GLEE_H_DEFINED_glGetSamplerParameterIiv typedef void (APIENTRYP GLEEPFNGLGETSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETSAMPLERPARAMETERIIVPROC GLeeFuncPtr_glGetSamplerParameterIiv; #define glGetSamplerParameterIiv GLeeFuncPtr_glGetSamplerParameterIiv #endif #ifndef GLEE_H_DEFINED_glGetSamplerParameterfv #define GLEE_H_DEFINED_glGetSamplerParameterfv typedef void (APIENTRYP GLEEPFNGLGETSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETSAMPLERPARAMETERFVPROC GLeeFuncPtr_glGetSamplerParameterfv; #define glGetSamplerParameterfv GLeeFuncPtr_glGetSamplerParameterfv #endif #ifndef GLEE_H_DEFINED_glGetSamplerParameterIuiv #define GLEE_H_DEFINED_glGetSamplerParameterIuiv typedef void (APIENTRYP GLEEPFNGLGETSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, GLuint * params); GLEE_EXTERN GLEEPFNGLGETSAMPLERPARAMETERIUIVPROC GLeeFuncPtr_glGetSamplerParameterIuiv; #define glGetSamplerParameterIuiv GLeeFuncPtr_glGetSamplerParameterIuiv #endif #endif /* GL_ARB_shader_bit_encoding */ #ifndef GL_ARB_shader_bit_encoding #define GL_ARB_shader_bit_encoding 1 #define __GLEE_GL_ARB_shader_bit_encoding 1 /* Constants */ #endif /* GL_ARB_texture_rgb10_a2ui */ #ifndef GL_ARB_texture_rgb10_a2ui #define GL_ARB_texture_rgb10_a2ui 1 #define __GLEE_GL_ARB_texture_rgb10_a2ui 1 /* Constants */ #define GL_RGB10_A2UI 0x906F #endif /* GL_ARB_texture_swizzle */ #ifndef GL_ARB_texture_swizzle #define GL_ARB_texture_swizzle 1 #define __GLEE_GL_ARB_texture_swizzle 1 /* Constants */ #define GL_TEXTURE_SWIZZLE_R 0x8E42 #define GL_TEXTURE_SWIZZLE_G 0x8E43 #define GL_TEXTURE_SWIZZLE_B 0x8E44 #define GL_TEXTURE_SWIZZLE_A 0x8E45 #define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 #endif /* GL_ARB_timer_query */ #ifndef GL_ARB_timer_query #define GL_ARB_timer_query 1 #define __GLEE_GL_ARB_timer_query 1 /* Constants */ #define GL_TIME_ELAPSED 0x88BF #define GL_TIMESTAMP 0x8E28 #ifndef GLEE_H_DEFINED_glQueryCounter #define GLEE_H_DEFINED_glQueryCounter typedef void (APIENTRYP GLEEPFNGLQUERYCOUNTERPROC) (GLuint id, GLenum target); GLEE_EXTERN GLEEPFNGLQUERYCOUNTERPROC GLeeFuncPtr_glQueryCounter; #define glQueryCounter GLeeFuncPtr_glQueryCounter #endif #ifndef GLEE_H_DEFINED_glGetQueryObjecti64v #define GLEE_H_DEFINED_glGetQueryObjecti64v typedef void (APIENTRYP GLEEPFNGLGETQUERYOBJECTI64VPROC) (GLuint id, GLenum pname, GLint64 * params); GLEE_EXTERN GLEEPFNGLGETQUERYOBJECTI64VPROC GLeeFuncPtr_glGetQueryObjecti64v; #define glGetQueryObjecti64v GLeeFuncPtr_glGetQueryObjecti64v #endif #ifndef GLEE_H_DEFINED_glGetQueryObjectui64v #define GLEE_H_DEFINED_glGetQueryObjectui64v typedef void (APIENTRYP GLEEPFNGLGETQUERYOBJECTUI64VPROC) (GLuint id, GLenum pname, GLuint64 * params); GLEE_EXTERN GLEEPFNGLGETQUERYOBJECTUI64VPROC GLeeFuncPtr_glGetQueryObjectui64v; #define glGetQueryObjectui64v GLeeFuncPtr_glGetQueryObjectui64v #endif #endif /* GL_ARB_vertex_type_2_10_10_10_rev */ #ifndef GL_ARB_vertex_type_2_10_10_10_rev #define GL_ARB_vertex_type_2_10_10_10_rev 1 #define __GLEE_GL_ARB_vertex_type_2_10_10_10_rev 1 /* Constants */ #define GL_INT_2_10_10_10_REV 0x8D9F #ifndef GLEE_H_DEFINED_glVertexP2ui #define GLEE_H_DEFINED_glVertexP2ui typedef void (APIENTRYP GLEEPFNGLVERTEXP2UIPROC) (GLenum type, GLuint value); GLEE_EXTERN GLEEPFNGLVERTEXP2UIPROC GLeeFuncPtr_glVertexP2ui; #define glVertexP2ui GLeeFuncPtr_glVertexP2ui #endif #ifndef GLEE_H_DEFINED_glVertexP2uiv #define GLEE_H_DEFINED_glVertexP2uiv typedef void (APIENTRYP GLEEPFNGLVERTEXP2UIVPROC) (GLenum type, const GLuint * value); GLEE_EXTERN GLEEPFNGLVERTEXP2UIVPROC GLeeFuncPtr_glVertexP2uiv; #define glVertexP2uiv GLeeFuncPtr_glVertexP2uiv #endif #ifndef GLEE_H_DEFINED_glVertexP3ui #define GLEE_H_DEFINED_glVertexP3ui typedef void (APIENTRYP GLEEPFNGLVERTEXP3UIPROC) (GLenum type, GLuint value); GLEE_EXTERN GLEEPFNGLVERTEXP3UIPROC GLeeFuncPtr_glVertexP3ui; #define glVertexP3ui GLeeFuncPtr_glVertexP3ui #endif #ifndef GLEE_H_DEFINED_glVertexP3uiv #define GLEE_H_DEFINED_glVertexP3uiv typedef void (APIENTRYP GLEEPFNGLVERTEXP3UIVPROC) (GLenum type, const GLuint * value); GLEE_EXTERN GLEEPFNGLVERTEXP3UIVPROC GLeeFuncPtr_glVertexP3uiv; #define glVertexP3uiv GLeeFuncPtr_glVertexP3uiv #endif #ifndef GLEE_H_DEFINED_glVertexP4ui #define GLEE_H_DEFINED_glVertexP4ui typedef void (APIENTRYP GLEEPFNGLVERTEXP4UIPROC) (GLenum type, GLuint value); GLEE_EXTERN GLEEPFNGLVERTEXP4UIPROC GLeeFuncPtr_glVertexP4ui; #define glVertexP4ui GLeeFuncPtr_glVertexP4ui #endif #ifndef GLEE_H_DEFINED_glVertexP4uiv #define GLEE_H_DEFINED_glVertexP4uiv typedef void (APIENTRYP GLEEPFNGLVERTEXP4UIVPROC) (GLenum type, const GLuint * value); GLEE_EXTERN GLEEPFNGLVERTEXP4UIVPROC GLeeFuncPtr_glVertexP4uiv; #define glVertexP4uiv GLeeFuncPtr_glVertexP4uiv #endif #ifndef GLEE_H_DEFINED_glTexCoordP1ui #define GLEE_H_DEFINED_glTexCoordP1ui typedef void (APIENTRYP GLEEPFNGLTEXCOORDP1UIPROC) (GLenum type, GLuint coords); GLEE_EXTERN GLEEPFNGLTEXCOORDP1UIPROC GLeeFuncPtr_glTexCoordP1ui; #define glTexCoordP1ui GLeeFuncPtr_glTexCoordP1ui #endif #ifndef GLEE_H_DEFINED_glTexCoordP1uiv #define GLEE_H_DEFINED_glTexCoordP1uiv typedef void (APIENTRYP GLEEPFNGLTEXCOORDP1UIVPROC) (GLenum type, const GLuint * coords); GLEE_EXTERN GLEEPFNGLTEXCOORDP1UIVPROC GLeeFuncPtr_glTexCoordP1uiv; #define glTexCoordP1uiv GLeeFuncPtr_glTexCoordP1uiv #endif #ifndef GLEE_H_DEFINED_glTexCoordP2ui #define GLEE_H_DEFINED_glTexCoordP2ui typedef void (APIENTRYP GLEEPFNGLTEXCOORDP2UIPROC) (GLenum type, GLuint coords); GLEE_EXTERN GLEEPFNGLTEXCOORDP2UIPROC GLeeFuncPtr_glTexCoordP2ui; #define glTexCoordP2ui GLeeFuncPtr_glTexCoordP2ui #endif #ifndef GLEE_H_DEFINED_glTexCoordP2uiv #define GLEE_H_DEFINED_glTexCoordP2uiv typedef void (APIENTRYP GLEEPFNGLTEXCOORDP2UIVPROC) (GLenum type, const GLuint * coords); GLEE_EXTERN GLEEPFNGLTEXCOORDP2UIVPROC GLeeFuncPtr_glTexCoordP2uiv; #define glTexCoordP2uiv GLeeFuncPtr_glTexCoordP2uiv #endif #ifndef GLEE_H_DEFINED_glTexCoordP3ui #define GLEE_H_DEFINED_glTexCoordP3ui typedef void (APIENTRYP GLEEPFNGLTEXCOORDP3UIPROC) (GLenum type, GLuint coords); GLEE_EXTERN GLEEPFNGLTEXCOORDP3UIPROC GLeeFuncPtr_glTexCoordP3ui; #define glTexCoordP3ui GLeeFuncPtr_glTexCoordP3ui #endif #ifndef GLEE_H_DEFINED_glTexCoordP3uiv #define GLEE_H_DEFINED_glTexCoordP3uiv typedef void (APIENTRYP GLEEPFNGLTEXCOORDP3UIVPROC) (GLenum type, const GLuint * coords); GLEE_EXTERN GLEEPFNGLTEXCOORDP3UIVPROC GLeeFuncPtr_glTexCoordP3uiv; #define glTexCoordP3uiv GLeeFuncPtr_glTexCoordP3uiv #endif #ifndef GLEE_H_DEFINED_glTexCoordP4ui #define GLEE_H_DEFINED_glTexCoordP4ui typedef void (APIENTRYP GLEEPFNGLTEXCOORDP4UIPROC) (GLenum type, GLuint coords); GLEE_EXTERN GLEEPFNGLTEXCOORDP4UIPROC GLeeFuncPtr_glTexCoordP4ui; #define glTexCoordP4ui GLeeFuncPtr_glTexCoordP4ui #endif #ifndef GLEE_H_DEFINED_glTexCoordP4uiv #define GLEE_H_DEFINED_glTexCoordP4uiv typedef void (APIENTRYP GLEEPFNGLTEXCOORDP4UIVPROC) (GLenum type, const GLuint * coords); GLEE_EXTERN GLEEPFNGLTEXCOORDP4UIVPROC GLeeFuncPtr_glTexCoordP4uiv; #define glTexCoordP4uiv GLeeFuncPtr_glTexCoordP4uiv #endif #ifndef GLEE_H_DEFINED_glMultiTexCoordP1ui #define GLEE_H_DEFINED_glMultiTexCoordP1ui typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORDP1UIPROC) (GLenum texture, GLenum type, GLuint coords); GLEE_EXTERN GLEEPFNGLMULTITEXCOORDP1UIPROC GLeeFuncPtr_glMultiTexCoordP1ui; #define glMultiTexCoordP1ui GLeeFuncPtr_glMultiTexCoordP1ui #endif #ifndef GLEE_H_DEFINED_glMultiTexCoordP1uiv #define GLEE_H_DEFINED_glMultiTexCoordP1uiv typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORDP1UIVPROC) (GLenum texture, GLenum type, const GLuint * coords); GLEE_EXTERN GLEEPFNGLMULTITEXCOORDP1UIVPROC GLeeFuncPtr_glMultiTexCoordP1uiv; #define glMultiTexCoordP1uiv GLeeFuncPtr_glMultiTexCoordP1uiv #endif #ifndef GLEE_H_DEFINED_glMultiTexCoordP2ui #define GLEE_H_DEFINED_glMultiTexCoordP2ui typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORDP2UIPROC) (GLenum texture, GLenum type, GLuint coords); GLEE_EXTERN GLEEPFNGLMULTITEXCOORDP2UIPROC GLeeFuncPtr_glMultiTexCoordP2ui; #define glMultiTexCoordP2ui GLeeFuncPtr_glMultiTexCoordP2ui #endif #ifndef GLEE_H_DEFINED_glMultiTexCoordP2uiv #define GLEE_H_DEFINED_glMultiTexCoordP2uiv typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORDP2UIVPROC) (GLenum texture, GLenum type, const GLuint * coords); GLEE_EXTERN GLEEPFNGLMULTITEXCOORDP2UIVPROC GLeeFuncPtr_glMultiTexCoordP2uiv; #define glMultiTexCoordP2uiv GLeeFuncPtr_glMultiTexCoordP2uiv #endif #ifndef GLEE_H_DEFINED_glMultiTexCoordP3ui #define GLEE_H_DEFINED_glMultiTexCoordP3ui typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORDP3UIPROC) (GLenum texture, GLenum type, GLuint coords); GLEE_EXTERN GLEEPFNGLMULTITEXCOORDP3UIPROC GLeeFuncPtr_glMultiTexCoordP3ui; #define glMultiTexCoordP3ui GLeeFuncPtr_glMultiTexCoordP3ui #endif #ifndef GLEE_H_DEFINED_glMultiTexCoordP3uiv #define GLEE_H_DEFINED_glMultiTexCoordP3uiv typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORDP3UIVPROC) (GLenum texture, GLenum type, const GLuint * coords); GLEE_EXTERN GLEEPFNGLMULTITEXCOORDP3UIVPROC GLeeFuncPtr_glMultiTexCoordP3uiv; #define glMultiTexCoordP3uiv GLeeFuncPtr_glMultiTexCoordP3uiv #endif #ifndef GLEE_H_DEFINED_glMultiTexCoordP4ui #define GLEE_H_DEFINED_glMultiTexCoordP4ui typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORDP4UIPROC) (GLenum texture, GLenum type, GLuint coords); GLEE_EXTERN GLEEPFNGLMULTITEXCOORDP4UIPROC GLeeFuncPtr_glMultiTexCoordP4ui; #define glMultiTexCoordP4ui GLeeFuncPtr_glMultiTexCoordP4ui #endif #ifndef GLEE_H_DEFINED_glMultiTexCoordP4uiv #define GLEE_H_DEFINED_glMultiTexCoordP4uiv typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORDP4UIVPROC) (GLenum texture, GLenum type, const GLuint * coords); GLEE_EXTERN GLEEPFNGLMULTITEXCOORDP4UIVPROC GLeeFuncPtr_glMultiTexCoordP4uiv; #define glMultiTexCoordP4uiv GLeeFuncPtr_glMultiTexCoordP4uiv #endif #ifndef GLEE_H_DEFINED_glNormalP3ui #define GLEE_H_DEFINED_glNormalP3ui typedef void (APIENTRYP GLEEPFNGLNORMALP3UIPROC) (GLenum type, GLuint coords); GLEE_EXTERN GLEEPFNGLNORMALP3UIPROC GLeeFuncPtr_glNormalP3ui; #define glNormalP3ui GLeeFuncPtr_glNormalP3ui #endif #ifndef GLEE_H_DEFINED_glNormalP3uiv #define GLEE_H_DEFINED_glNormalP3uiv typedef void (APIENTRYP GLEEPFNGLNORMALP3UIVPROC) (GLenum type, const GLuint * coords); GLEE_EXTERN GLEEPFNGLNORMALP3UIVPROC GLeeFuncPtr_glNormalP3uiv; #define glNormalP3uiv GLeeFuncPtr_glNormalP3uiv #endif #ifndef GLEE_H_DEFINED_glColorP3ui #define GLEE_H_DEFINED_glColorP3ui typedef void (APIENTRYP GLEEPFNGLCOLORP3UIPROC) (GLenum type, GLuint color); GLEE_EXTERN GLEEPFNGLCOLORP3UIPROC GLeeFuncPtr_glColorP3ui; #define glColorP3ui GLeeFuncPtr_glColorP3ui #endif #ifndef GLEE_H_DEFINED_glColorP3uiv #define GLEE_H_DEFINED_glColorP3uiv typedef void (APIENTRYP GLEEPFNGLCOLORP3UIVPROC) (GLenum type, const GLuint * color); GLEE_EXTERN GLEEPFNGLCOLORP3UIVPROC GLeeFuncPtr_glColorP3uiv; #define glColorP3uiv GLeeFuncPtr_glColorP3uiv #endif #ifndef GLEE_H_DEFINED_glColorP4ui #define GLEE_H_DEFINED_glColorP4ui typedef void (APIENTRYP GLEEPFNGLCOLORP4UIPROC) (GLenum type, GLuint color); GLEE_EXTERN GLEEPFNGLCOLORP4UIPROC GLeeFuncPtr_glColorP4ui; #define glColorP4ui GLeeFuncPtr_glColorP4ui #endif #ifndef GLEE_H_DEFINED_glColorP4uiv #define GLEE_H_DEFINED_glColorP4uiv typedef void (APIENTRYP GLEEPFNGLCOLORP4UIVPROC) (GLenum type, const GLuint * color); GLEE_EXTERN GLEEPFNGLCOLORP4UIVPROC GLeeFuncPtr_glColorP4uiv; #define glColorP4uiv GLeeFuncPtr_glColorP4uiv #endif #ifndef GLEE_H_DEFINED_glSecondaryColorP3ui #define GLEE_H_DEFINED_glSecondaryColorP3ui typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLORP3UIPROC) (GLenum type, GLuint color); GLEE_EXTERN GLEEPFNGLSECONDARYCOLORP3UIPROC GLeeFuncPtr_glSecondaryColorP3ui; #define glSecondaryColorP3ui GLeeFuncPtr_glSecondaryColorP3ui #endif #ifndef GLEE_H_DEFINED_glSecondaryColorP3uiv #define GLEE_H_DEFINED_glSecondaryColorP3uiv typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLORP3UIVPROC) (GLenum type, const GLuint * color); GLEE_EXTERN GLEEPFNGLSECONDARYCOLORP3UIVPROC GLeeFuncPtr_glSecondaryColorP3uiv; #define glSecondaryColorP3uiv GLeeFuncPtr_glSecondaryColorP3uiv #endif #ifndef GLEE_H_DEFINED_glVertexAttribP1ui #define GLEE_H_DEFINED_glVertexAttribP1ui typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBP1UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBP1UIPROC GLeeFuncPtr_glVertexAttribP1ui; #define glVertexAttribP1ui GLeeFuncPtr_glVertexAttribP1ui #endif #ifndef GLEE_H_DEFINED_glVertexAttribP1uiv #define GLEE_H_DEFINED_glVertexAttribP1uiv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBP1UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint * value); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBP1UIVPROC GLeeFuncPtr_glVertexAttribP1uiv; #define glVertexAttribP1uiv GLeeFuncPtr_glVertexAttribP1uiv #endif #ifndef GLEE_H_DEFINED_glVertexAttribP2ui #define GLEE_H_DEFINED_glVertexAttribP2ui typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBP2UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBP2UIPROC GLeeFuncPtr_glVertexAttribP2ui; #define glVertexAttribP2ui GLeeFuncPtr_glVertexAttribP2ui #endif #ifndef GLEE_H_DEFINED_glVertexAttribP2uiv #define GLEE_H_DEFINED_glVertexAttribP2uiv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBP2UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint * value); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBP2UIVPROC GLeeFuncPtr_glVertexAttribP2uiv; #define glVertexAttribP2uiv GLeeFuncPtr_glVertexAttribP2uiv #endif #ifndef GLEE_H_DEFINED_glVertexAttribP3ui #define GLEE_H_DEFINED_glVertexAttribP3ui typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBP3UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBP3UIPROC GLeeFuncPtr_glVertexAttribP3ui; #define glVertexAttribP3ui GLeeFuncPtr_glVertexAttribP3ui #endif #ifndef GLEE_H_DEFINED_glVertexAttribP3uiv #define GLEE_H_DEFINED_glVertexAttribP3uiv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBP3UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint * value); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBP3UIVPROC GLeeFuncPtr_glVertexAttribP3uiv; #define glVertexAttribP3uiv GLeeFuncPtr_glVertexAttribP3uiv #endif #ifndef GLEE_H_DEFINED_glVertexAttribP4ui #define GLEE_H_DEFINED_glVertexAttribP4ui typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBP4UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBP4UIPROC GLeeFuncPtr_glVertexAttribP4ui; #define glVertexAttribP4ui GLeeFuncPtr_glVertexAttribP4ui #endif #ifndef GLEE_H_DEFINED_glVertexAttribP4uiv #define GLEE_H_DEFINED_glVertexAttribP4uiv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBP4UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint * value); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBP4UIVPROC GLeeFuncPtr_glVertexAttribP4uiv; #define glVertexAttribP4uiv GLeeFuncPtr_glVertexAttribP4uiv #endif #endif /* GL_ARB_draw_indirect */ #ifndef GL_ARB_draw_indirect #define GL_ARB_draw_indirect 1 #define __GLEE_GL_ARB_draw_indirect 1 /* Constants */ #define GL_DRAW_INDIRECT_BUFFER 0x8F3F #define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43 #ifndef GLEE_H_DEFINED_glDrawArraysIndirect #define GLEE_H_DEFINED_glDrawArraysIndirect typedef void (APIENTRYP GLEEPFNGLDRAWARRAYSINDIRECTPROC) (GLenum mode, const GLvoid * indirect); GLEE_EXTERN GLEEPFNGLDRAWARRAYSINDIRECTPROC GLeeFuncPtr_glDrawArraysIndirect; #define glDrawArraysIndirect GLeeFuncPtr_glDrawArraysIndirect #endif #ifndef GLEE_H_DEFINED_glDrawElementsIndirect #define GLEE_H_DEFINED_glDrawElementsIndirect typedef void (APIENTRYP GLEEPFNGLDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const GLvoid * indirect); GLEE_EXTERN GLEEPFNGLDRAWELEMENTSINDIRECTPROC GLeeFuncPtr_glDrawElementsIndirect; #define glDrawElementsIndirect GLeeFuncPtr_glDrawElementsIndirect #endif #endif /* GL_ARB_gpu_shader5 */ #ifndef GL_ARB_gpu_shader5 #define GL_ARB_gpu_shader5 1 #define __GLEE_GL_ARB_gpu_shader5 1 /* Constants */ #define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F #define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A #define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B #define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C #define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D #endif /* GL_ARB_gpu_shader_fp64 */ #ifndef GL_ARB_gpu_shader_fp64 #define GL_ARB_gpu_shader_fp64 1 #define __GLEE_GL_ARB_gpu_shader_fp64 1 /* Constants */ #define GL_DOUBLE_VEC2 0x8FFC #define GL_DOUBLE_VEC3 0x8FFD #define GL_DOUBLE_VEC4 0x8FFE #define GL_DOUBLE_MAT2 0x8F46 #define GL_DOUBLE_MAT3 0x8F47 #define GL_DOUBLE_MAT4 0x8F48 #define GL_DOUBLE_MAT2x3 0x8F49 #define GL_DOUBLE_MAT2x4 0x8F4A #define GL_DOUBLE_MAT3x2 0x8F4B #define GL_DOUBLE_MAT3x4 0x8F4C #define GL_DOUBLE_MAT4x2 0x8F4D #define GL_DOUBLE_MAT4x3 0x8F4E #ifndef GLEE_H_DEFINED_glUniform1d #define GLEE_H_DEFINED_glUniform1d typedef void (APIENTRYP GLEEPFNGLUNIFORM1DPROC) (GLint location, GLdouble x); GLEE_EXTERN GLEEPFNGLUNIFORM1DPROC GLeeFuncPtr_glUniform1d; #define glUniform1d GLeeFuncPtr_glUniform1d #endif #ifndef GLEE_H_DEFINED_glUniform2d #define GLEE_H_DEFINED_glUniform2d typedef void (APIENTRYP GLEEPFNGLUNIFORM2DPROC) (GLint location, GLdouble x, GLdouble y); GLEE_EXTERN GLEEPFNGLUNIFORM2DPROC GLeeFuncPtr_glUniform2d; #define glUniform2d GLeeFuncPtr_glUniform2d #endif #ifndef GLEE_H_DEFINED_glUniform3d #define GLEE_H_DEFINED_glUniform3d typedef void (APIENTRYP GLEEPFNGLUNIFORM3DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z); GLEE_EXTERN GLEEPFNGLUNIFORM3DPROC GLeeFuncPtr_glUniform3d; #define glUniform3d GLeeFuncPtr_glUniform3d #endif #ifndef GLEE_H_DEFINED_glUniform4d #define GLEE_H_DEFINED_glUniform4d typedef void (APIENTRYP GLEEPFNGLUNIFORM4DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLEE_EXTERN GLEEPFNGLUNIFORM4DPROC GLeeFuncPtr_glUniform4d; #define glUniform4d GLeeFuncPtr_glUniform4d #endif #ifndef GLEE_H_DEFINED_glUniform1dv #define GLEE_H_DEFINED_glUniform1dv typedef void (APIENTRYP GLEEPFNGLUNIFORM1DVPROC) (GLint location, GLsizei count, const GLdouble * value); GLEE_EXTERN GLEEPFNGLUNIFORM1DVPROC GLeeFuncPtr_glUniform1dv; #define glUniform1dv GLeeFuncPtr_glUniform1dv #endif #ifndef GLEE_H_DEFINED_glUniform2dv #define GLEE_H_DEFINED_glUniform2dv typedef void (APIENTRYP GLEEPFNGLUNIFORM2DVPROC) (GLint location, GLsizei count, const GLdouble * value); GLEE_EXTERN GLEEPFNGLUNIFORM2DVPROC GLeeFuncPtr_glUniform2dv; #define glUniform2dv GLeeFuncPtr_glUniform2dv #endif #ifndef GLEE_H_DEFINED_glUniform3dv #define GLEE_H_DEFINED_glUniform3dv typedef void (APIENTRYP GLEEPFNGLUNIFORM3DVPROC) (GLint location, GLsizei count, const GLdouble * value); GLEE_EXTERN GLEEPFNGLUNIFORM3DVPROC GLeeFuncPtr_glUniform3dv; #define glUniform3dv GLeeFuncPtr_glUniform3dv #endif #ifndef GLEE_H_DEFINED_glUniform4dv #define GLEE_H_DEFINED_glUniform4dv typedef void (APIENTRYP GLEEPFNGLUNIFORM4DVPROC) (GLint location, GLsizei count, const GLdouble * value); GLEE_EXTERN GLEEPFNGLUNIFORM4DVPROC GLeeFuncPtr_glUniform4dv; #define glUniform4dv GLeeFuncPtr_glUniform4dv #endif #ifndef GLEE_H_DEFINED_glUniformMatrix2dv #define GLEE_H_DEFINED_glUniformMatrix2dv typedef void (APIENTRYP GLEEPFNGLUNIFORMMATRIX2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); GLEE_EXTERN GLEEPFNGLUNIFORMMATRIX2DVPROC GLeeFuncPtr_glUniformMatrix2dv; #define glUniformMatrix2dv GLeeFuncPtr_glUniformMatrix2dv #endif #ifndef GLEE_H_DEFINED_glUniformMatrix3dv #define GLEE_H_DEFINED_glUniformMatrix3dv typedef void (APIENTRYP GLEEPFNGLUNIFORMMATRIX3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); GLEE_EXTERN GLEEPFNGLUNIFORMMATRIX3DVPROC GLeeFuncPtr_glUniformMatrix3dv; #define glUniformMatrix3dv GLeeFuncPtr_glUniformMatrix3dv #endif #ifndef GLEE_H_DEFINED_glUniformMatrix4dv #define GLEE_H_DEFINED_glUniformMatrix4dv typedef void (APIENTRYP GLEEPFNGLUNIFORMMATRIX4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); GLEE_EXTERN GLEEPFNGLUNIFORMMATRIX4DVPROC GLeeFuncPtr_glUniformMatrix4dv; #define glUniformMatrix4dv GLeeFuncPtr_glUniformMatrix4dv #endif #ifndef GLEE_H_DEFINED_glUniformMatrix2x3dv #define GLEE_H_DEFINED_glUniformMatrix2x3dv typedef void (APIENTRYP GLEEPFNGLUNIFORMMATRIX2X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); GLEE_EXTERN GLEEPFNGLUNIFORMMATRIX2X3DVPROC GLeeFuncPtr_glUniformMatrix2x3dv; #define glUniformMatrix2x3dv GLeeFuncPtr_glUniformMatrix2x3dv #endif #ifndef GLEE_H_DEFINED_glUniformMatrix2x4dv #define GLEE_H_DEFINED_glUniformMatrix2x4dv typedef void (APIENTRYP GLEEPFNGLUNIFORMMATRIX2X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); GLEE_EXTERN GLEEPFNGLUNIFORMMATRIX2X4DVPROC GLeeFuncPtr_glUniformMatrix2x4dv; #define glUniformMatrix2x4dv GLeeFuncPtr_glUniformMatrix2x4dv #endif #ifndef GLEE_H_DEFINED_glUniformMatrix3x2dv #define GLEE_H_DEFINED_glUniformMatrix3x2dv typedef void (APIENTRYP GLEEPFNGLUNIFORMMATRIX3X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); GLEE_EXTERN GLEEPFNGLUNIFORMMATRIX3X2DVPROC GLeeFuncPtr_glUniformMatrix3x2dv; #define glUniformMatrix3x2dv GLeeFuncPtr_glUniformMatrix3x2dv #endif #ifndef GLEE_H_DEFINED_glUniformMatrix3x4dv #define GLEE_H_DEFINED_glUniformMatrix3x4dv typedef void (APIENTRYP GLEEPFNGLUNIFORMMATRIX3X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); GLEE_EXTERN GLEEPFNGLUNIFORMMATRIX3X4DVPROC GLeeFuncPtr_glUniformMatrix3x4dv; #define glUniformMatrix3x4dv GLeeFuncPtr_glUniformMatrix3x4dv #endif #ifndef GLEE_H_DEFINED_glUniformMatrix4x2dv #define GLEE_H_DEFINED_glUniformMatrix4x2dv typedef void (APIENTRYP GLEEPFNGLUNIFORMMATRIX4X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); GLEE_EXTERN GLEEPFNGLUNIFORMMATRIX4X2DVPROC GLeeFuncPtr_glUniformMatrix4x2dv; #define glUniformMatrix4x2dv GLeeFuncPtr_glUniformMatrix4x2dv #endif #ifndef GLEE_H_DEFINED_glUniformMatrix4x3dv #define GLEE_H_DEFINED_glUniformMatrix4x3dv typedef void (APIENTRYP GLEEPFNGLUNIFORMMATRIX4X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); GLEE_EXTERN GLEEPFNGLUNIFORMMATRIX4X3DVPROC GLeeFuncPtr_glUniformMatrix4x3dv; #define glUniformMatrix4x3dv GLeeFuncPtr_glUniformMatrix4x3dv #endif #ifndef GLEE_H_DEFINED_glGetUniformdv #define GLEE_H_DEFINED_glGetUniformdv typedef void (APIENTRYP GLEEPFNGLGETUNIFORMDVPROC) (GLuint program, GLint location, GLdouble * params); GLEE_EXTERN GLEEPFNGLGETUNIFORMDVPROC GLeeFuncPtr_glGetUniformdv; #define glGetUniformdv GLeeFuncPtr_glGetUniformdv #endif #endif /* GL_ARB_shader_subroutine */ #ifndef GL_ARB_shader_subroutine #define GL_ARB_shader_subroutine 1 #define __GLEE_GL_ARB_shader_subroutine 1 /* Constants */ #define GL_ACTIVE_SUBROUTINES 0x8DE5 #define GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6 #define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47 #define GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48 #define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49 #define GL_MAX_SUBROUTINES 0x8DE7 #define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8 #define GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A #define GL_COMPATIBLE_SUBROUTINES 0x8E4B #ifndef GLEE_H_DEFINED_glGetSubroutineUniformLocation #define GLEE_H_DEFINED_glGetSubroutineUniformLocation typedef GLint (APIENTRYP GLEEPFNGLGETSUBROUTINEUNIFORMLOCATIONPROC) (GLuint program, GLenum shadertype, const GLchar * name); GLEE_EXTERN GLEEPFNGLGETSUBROUTINEUNIFORMLOCATIONPROC GLeeFuncPtr_glGetSubroutineUniformLocation; #define glGetSubroutineUniformLocation GLeeFuncPtr_glGetSubroutineUniformLocation #endif #ifndef GLEE_H_DEFINED_glGetSubroutineIndex #define GLEE_H_DEFINED_glGetSubroutineIndex typedef GLuint (APIENTRYP GLEEPFNGLGETSUBROUTINEINDEXPROC) (GLuint program, GLenum shadertype, const GLchar * name); GLEE_EXTERN GLEEPFNGLGETSUBROUTINEINDEXPROC GLeeFuncPtr_glGetSubroutineIndex; #define glGetSubroutineIndex GLeeFuncPtr_glGetSubroutineIndex #endif #ifndef GLEE_H_DEFINED_glGetActiveSubroutineUniformiv #define GLEE_H_DEFINED_glGetActiveSubroutineUniformiv typedef void (APIENTRYP GLEEPFNGLGETACTIVESUBROUTINEUNIFORMIVPROC) (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint * values); GLEE_EXTERN GLEEPFNGLGETACTIVESUBROUTINEUNIFORMIVPROC GLeeFuncPtr_glGetActiveSubroutineUniformiv; #define glGetActiveSubroutineUniformiv GLeeFuncPtr_glGetActiveSubroutineUniformiv #endif #ifndef GLEE_H_DEFINED_glGetActiveSubroutineUniformName #define GLEE_H_DEFINED_glGetActiveSubroutineUniformName typedef void (APIENTRYP GLEEPFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei * length, GLchar * name); GLEE_EXTERN GLEEPFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC GLeeFuncPtr_glGetActiveSubroutineUniformName; #define glGetActiveSubroutineUniformName GLeeFuncPtr_glGetActiveSubroutineUniformName #endif #ifndef GLEE_H_DEFINED_glGetActiveSubroutineName #define GLEE_H_DEFINED_glGetActiveSubroutineName typedef void (APIENTRYP GLEEPFNGLGETACTIVESUBROUTINENAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei * length, GLchar * name); GLEE_EXTERN GLEEPFNGLGETACTIVESUBROUTINENAMEPROC GLeeFuncPtr_glGetActiveSubroutineName; #define glGetActiveSubroutineName GLeeFuncPtr_glGetActiveSubroutineName #endif #ifndef GLEE_H_DEFINED_glUniformSubroutinesuiv #define GLEE_H_DEFINED_glUniformSubroutinesuiv typedef void (APIENTRYP GLEEPFNGLUNIFORMSUBROUTINESUIVPROC) (GLenum shadertype, GLsizei count, const GLuint * indices); GLEE_EXTERN GLEEPFNGLUNIFORMSUBROUTINESUIVPROC GLeeFuncPtr_glUniformSubroutinesuiv; #define glUniformSubroutinesuiv GLeeFuncPtr_glUniformSubroutinesuiv #endif #ifndef GLEE_H_DEFINED_glGetUniformSubroutineuiv #define GLEE_H_DEFINED_glGetUniformSubroutineuiv typedef void (APIENTRYP GLEEPFNGLGETUNIFORMSUBROUTINEUIVPROC) (GLenum shadertype, GLint location, GLuint * params); GLEE_EXTERN GLEEPFNGLGETUNIFORMSUBROUTINEUIVPROC GLeeFuncPtr_glGetUniformSubroutineuiv; #define glGetUniformSubroutineuiv GLeeFuncPtr_glGetUniformSubroutineuiv #endif #ifndef GLEE_H_DEFINED_glGetProgramStageiv #define GLEE_H_DEFINED_glGetProgramStageiv typedef void (APIENTRYP GLEEPFNGLGETPROGRAMSTAGEIVPROC) (GLuint program, GLenum shadertype, GLenum pname, GLint * values); GLEE_EXTERN GLEEPFNGLGETPROGRAMSTAGEIVPROC GLeeFuncPtr_glGetProgramStageiv; #define glGetProgramStageiv GLeeFuncPtr_glGetProgramStageiv #endif #endif /* GL_ARB_tessellation_shader */ #ifndef GL_ARB_tessellation_shader #define GL_ARB_tessellation_shader 1 #define __GLEE_GL_ARB_tessellation_shader 1 /* Constants */ #define GL_PATCHES 0x000E #define GL_PATCH_VERTICES 0x8E72 #define GL_PATCH_DEFAULT_INNER_LEVEL 0x8E73 #define GL_PATCH_DEFAULT_OUTER_LEVEL 0x8E74 #define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75 #define GL_TESS_GEN_MODE 0x8E76 #define GL_TESS_GEN_SPACING 0x8E77 #define GL_TESS_GEN_VERTEX_ORDER 0x8E78 #define GL_TESS_GEN_POINT_MODE 0x8E79 #define GL_ISOLINES 0x8E7A #define GL_FRACTIONAL_ODD 0x8E7B #define GL_FRACTIONAL_EVEN 0x8E7C #define GL_MAX_PATCH_VERTICES 0x8E7D #define GL_MAX_TESS_GEN_LEVEL 0x8E7E #define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F #define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80 #define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81 #define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82 #define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83 #define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84 #define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85 #define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86 #define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89 #define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A #define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C #define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D #define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E #define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F #define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0 #define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1 #define GL_TESS_EVALUATION_SHADER 0x8E87 #define GL_TESS_CONTROL_SHADER 0x8E88 #ifndef GLEE_H_DEFINED_glPatchParameteri #define GLEE_H_DEFINED_glPatchParameteri typedef void (APIENTRYP GLEEPFNGLPATCHPARAMETERIPROC) (GLenum pname, GLint value); GLEE_EXTERN GLEEPFNGLPATCHPARAMETERIPROC GLeeFuncPtr_glPatchParameteri; #define glPatchParameteri GLeeFuncPtr_glPatchParameteri #endif #ifndef GLEE_H_DEFINED_glPatchParameterfv #define GLEE_H_DEFINED_glPatchParameterfv typedef void (APIENTRYP GLEEPFNGLPATCHPARAMETERFVPROC) (GLenum pname, const GLfloat * values); GLEE_EXTERN GLEEPFNGLPATCHPARAMETERFVPROC GLeeFuncPtr_glPatchParameterfv; #define glPatchParameterfv GLeeFuncPtr_glPatchParameterfv #endif #endif /* GL_ARB_texture_buffer_object_rgb32 */ #ifndef GL_ARB_texture_buffer_object_rgb32 #define GL_ARB_texture_buffer_object_rgb32 1 #define __GLEE_GL_ARB_texture_buffer_object_rgb32 1 /* Constants */ #endif /* GL_ARB_transform_feedback2 */ #ifndef GL_ARB_transform_feedback2 #define GL_ARB_transform_feedback2 1 #define __GLEE_GL_ARB_transform_feedback2 1 /* Constants */ #define GL_TRANSFORM_FEEDBACK 0x8E22 #define GL_TRANSFORM_FEEDBACK_PAUSED 0x8E23 #define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED GL_TRANSFORM_FEEDBACK_PAUSED #define GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24 #define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE GL_TRANSFORM_FEEDBACK_ACTIVE #define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25 #ifndef GLEE_H_DEFINED_glBindTransformFeedback #define GLEE_H_DEFINED_glBindTransformFeedback typedef void (APIENTRYP GLEEPFNGLBINDTRANSFORMFEEDBACKPROC) (GLenum target, GLuint id); GLEE_EXTERN GLEEPFNGLBINDTRANSFORMFEEDBACKPROC GLeeFuncPtr_glBindTransformFeedback; #define glBindTransformFeedback GLeeFuncPtr_glBindTransformFeedback #endif #ifndef GLEE_H_DEFINED_glDeleteTransformFeedbacks #define GLEE_H_DEFINED_glDeleteTransformFeedbacks typedef void (APIENTRYP GLEEPFNGLDELETETRANSFORMFEEDBACKSPROC) (GLsizei n, const GLuint * ids); GLEE_EXTERN GLEEPFNGLDELETETRANSFORMFEEDBACKSPROC GLeeFuncPtr_glDeleteTransformFeedbacks; #define glDeleteTransformFeedbacks GLeeFuncPtr_glDeleteTransformFeedbacks #endif #ifndef GLEE_H_DEFINED_glGenTransformFeedbacks #define GLEE_H_DEFINED_glGenTransformFeedbacks typedef void (APIENTRYP GLEEPFNGLGENTRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint * ids); GLEE_EXTERN GLEEPFNGLGENTRANSFORMFEEDBACKSPROC GLeeFuncPtr_glGenTransformFeedbacks; #define glGenTransformFeedbacks GLeeFuncPtr_glGenTransformFeedbacks #endif #ifndef GLEE_H_DEFINED_glIsTransformFeedback #define GLEE_H_DEFINED_glIsTransformFeedback typedef GLboolean (APIENTRYP GLEEPFNGLISTRANSFORMFEEDBACKPROC) (GLuint id); GLEE_EXTERN GLEEPFNGLISTRANSFORMFEEDBACKPROC GLeeFuncPtr_glIsTransformFeedback; #define glIsTransformFeedback GLeeFuncPtr_glIsTransformFeedback #endif #ifndef GLEE_H_DEFINED_glPauseTransformFeedback #define GLEE_H_DEFINED_glPauseTransformFeedback typedef void (APIENTRYP GLEEPFNGLPAUSETRANSFORMFEEDBACKPROC) (); GLEE_EXTERN GLEEPFNGLPAUSETRANSFORMFEEDBACKPROC GLeeFuncPtr_glPauseTransformFeedback; #define glPauseTransformFeedback GLeeFuncPtr_glPauseTransformFeedback #endif #ifndef GLEE_H_DEFINED_glResumeTransformFeedback #define GLEE_H_DEFINED_glResumeTransformFeedback typedef void (APIENTRYP GLEEPFNGLRESUMETRANSFORMFEEDBACKPROC) (); GLEE_EXTERN GLEEPFNGLRESUMETRANSFORMFEEDBACKPROC GLeeFuncPtr_glResumeTransformFeedback; #define glResumeTransformFeedback GLeeFuncPtr_glResumeTransformFeedback #endif #ifndef GLEE_H_DEFINED_glDrawTransformFeedback #define GLEE_H_DEFINED_glDrawTransformFeedback typedef void (APIENTRYP GLEEPFNGLDRAWTRANSFORMFEEDBACKPROC) (GLenum mode, GLuint id); GLEE_EXTERN GLEEPFNGLDRAWTRANSFORMFEEDBACKPROC GLeeFuncPtr_glDrawTransformFeedback; #define glDrawTransformFeedback GLeeFuncPtr_glDrawTransformFeedback #endif #endif /* GL_ARB_transform_feedback3 */ #ifndef GL_ARB_transform_feedback3 #define GL_ARB_transform_feedback3 1 #define __GLEE_GL_ARB_transform_feedback3 1 /* Constants */ #define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70 #define GL_MAX_VERTEX_STREAMS 0x8E71 #ifndef GLEE_H_DEFINED_glDrawTransformFeedbackStream #define GLEE_H_DEFINED_glDrawTransformFeedbackStream typedef void (APIENTRYP GLEEPFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC) (GLenum mode, GLuint id, GLuint stream); GLEE_EXTERN GLEEPFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC GLeeFuncPtr_glDrawTransformFeedbackStream; #define glDrawTransformFeedbackStream GLeeFuncPtr_glDrawTransformFeedbackStream #endif #ifndef GLEE_H_DEFINED_glBeginQueryIndexed #define GLEE_H_DEFINED_glBeginQueryIndexed typedef void (APIENTRYP GLEEPFNGLBEGINQUERYINDEXEDPROC) (GLenum target, GLuint index, GLuint id); GLEE_EXTERN GLEEPFNGLBEGINQUERYINDEXEDPROC GLeeFuncPtr_glBeginQueryIndexed; #define glBeginQueryIndexed GLeeFuncPtr_glBeginQueryIndexed #endif #ifndef GLEE_H_DEFINED_glEndQueryIndexed #define GLEE_H_DEFINED_glEndQueryIndexed typedef void (APIENTRYP GLEEPFNGLENDQUERYINDEXEDPROC) (GLenum target, GLuint index); GLEE_EXTERN GLEEPFNGLENDQUERYINDEXEDPROC GLeeFuncPtr_glEndQueryIndexed; #define glEndQueryIndexed GLeeFuncPtr_glEndQueryIndexed #endif #ifndef GLEE_H_DEFINED_glGetQueryIndexediv #define GLEE_H_DEFINED_glGetQueryIndexediv typedef void (APIENTRYP GLEEPFNGLGETQUERYINDEXEDIVPROC) (GLenum target, GLuint index, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETQUERYINDEXEDIVPROC GLeeFuncPtr_glGetQueryIndexediv; #define glGetQueryIndexediv GLeeFuncPtr_glGetQueryIndexediv #endif #endif /* GL_ARB_ES2_compatibility */ #ifndef GL_ARB_ES2_compatibility #define GL_ARB_ES2_compatibility 1 #define __GLEE_GL_ARB_ES2_compatibility 1 /* Constants */ #define GL_FIXED 0x140C #define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A #define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B #define GL_LOW_FLOAT 0x8DF0 #define GL_MEDIUM_FLOAT 0x8DF1 #define GL_HIGH_FLOAT 0x8DF2 #define GL_LOW_INT 0x8DF3 #define GL_MEDIUM_INT 0x8DF4 #define GL_HIGH_INT 0x8DF5 #define GL_SHADER_COMPILER 0x8DFA #define GL_SHADER_BINARY_FORMATS 0x8DF8 #define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 #define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB #define GL_MAX_VARYING_VECTORS 0x8DFC #define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD #define GL_RGB565 0x8D62 #ifndef GLEE_H_DEFINED_glReleaseShaderCompiler #define GLEE_H_DEFINED_glReleaseShaderCompiler typedef void (APIENTRYP GLEEPFNGLRELEASESHADERCOMPILERPROC) (); GLEE_EXTERN GLEEPFNGLRELEASESHADERCOMPILERPROC GLeeFuncPtr_glReleaseShaderCompiler; #define glReleaseShaderCompiler GLeeFuncPtr_glReleaseShaderCompiler #endif #ifndef GLEE_H_DEFINED_glShaderBinary #define GLEE_H_DEFINED_glShaderBinary typedef void (APIENTRYP GLEEPFNGLSHADERBINARYPROC) (GLsizei count, const GLuint * shaders, GLenum binaryformat, const GLvoid * binary, GLsizei length); GLEE_EXTERN GLEEPFNGLSHADERBINARYPROC GLeeFuncPtr_glShaderBinary; #define glShaderBinary GLeeFuncPtr_glShaderBinary #endif #ifndef GLEE_H_DEFINED_glGetShaderPrecisionFormat #define GLEE_H_DEFINED_glGetShaderPrecisionFormat typedef void (APIENTRYP GLEEPFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint * range, GLint * precision); GLEE_EXTERN GLEEPFNGLGETSHADERPRECISIONFORMATPROC GLeeFuncPtr_glGetShaderPrecisionFormat; #define glGetShaderPrecisionFormat GLeeFuncPtr_glGetShaderPrecisionFormat #endif #ifndef GLEE_H_DEFINED_glDepthRangef #define GLEE_H_DEFINED_glDepthRangef typedef void (APIENTRYP GLEEPFNGLDEPTHRANGEFPROC) (GLfloat n, GLfloat f); GLEE_EXTERN GLEEPFNGLDEPTHRANGEFPROC GLeeFuncPtr_glDepthRangef; #define glDepthRangef GLeeFuncPtr_glDepthRangef #endif #ifndef GLEE_H_DEFINED_glClearDepthf #define GLEE_H_DEFINED_glClearDepthf typedef void (APIENTRYP GLEEPFNGLCLEARDEPTHFPROC) (GLfloat d); GLEE_EXTERN GLEEPFNGLCLEARDEPTHFPROC GLeeFuncPtr_glClearDepthf; #define glClearDepthf GLeeFuncPtr_glClearDepthf #endif #endif /* GL_ARB_get_program_binary */ #ifndef GL_ARB_get_program_binary #define GL_ARB_get_program_binary 1 #define __GLEE_GL_ARB_get_program_binary 1 /* Constants */ #define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257 #define GL_PROGRAM_BINARY_LENGTH 0x8741 #define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE #define GL_PROGRAM_BINARY_FORMATS 0x87FF #ifndef GLEE_H_DEFINED_glGetProgramBinary #define GLEE_H_DEFINED_glGetProgramBinary typedef void (APIENTRYP GLEEPFNGLGETPROGRAMBINARYPROC) (GLuint program, GLsizei bufSize, GLsizei * length, GLenum * binaryFormat, GLvoid * binary); GLEE_EXTERN GLEEPFNGLGETPROGRAMBINARYPROC GLeeFuncPtr_glGetProgramBinary; #define glGetProgramBinary GLeeFuncPtr_glGetProgramBinary #endif #ifndef GLEE_H_DEFINED_glProgramBinary #define GLEE_H_DEFINED_glProgramBinary typedef void (APIENTRYP GLEEPFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const GLvoid * binary, GLsizei length); GLEE_EXTERN GLEEPFNGLPROGRAMBINARYPROC GLeeFuncPtr_glProgramBinary; #define glProgramBinary GLeeFuncPtr_glProgramBinary #endif #ifndef GLEE_H_DEFINED_glProgramParameteri #define GLEE_H_DEFINED_glProgramParameteri typedef void (APIENTRYP GLEEPFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value); GLEE_EXTERN GLEEPFNGLPROGRAMPARAMETERIPROC GLeeFuncPtr_glProgramParameteri; #define glProgramParameteri GLeeFuncPtr_glProgramParameteri #endif #endif /* GL_ARB_separate_shader_objects */ #ifndef GL_ARB_separate_shader_objects #define GL_ARB_separate_shader_objects 1 #define __GLEE_GL_ARB_separate_shader_objects 1 /* Constants */ #define GL_VERTEX_SHADER_BIT 0x00000001 #define GL_FRAGMENT_SHADER_BIT 0x00000002 #define GL_GEOMETRY_SHADER_BIT 0x00000004 #define GL_TESS_CONTROL_SHADER_BIT 0x00000008 #define GL_TESS_EVALUATION_SHADER_BIT 0x00000010 #define GL_ALL_SHADER_BITS 0xFFFFFFFF #define GL_PROGRAM_SEPARABLE 0x8258 #define GL_ACTIVE_PROGRAM 0x8259 #define GL_PROGRAM_PIPELINE_BINDING 0x825A #ifndef GLEE_H_DEFINED_glUseProgramStages #define GLEE_H_DEFINED_glUseProgramStages typedef void (APIENTRYP GLEEPFNGLUSEPROGRAMSTAGESPROC) (GLuint pipeline, GLbitfield stages, GLuint program); GLEE_EXTERN GLEEPFNGLUSEPROGRAMSTAGESPROC GLeeFuncPtr_glUseProgramStages; #define glUseProgramStages GLeeFuncPtr_glUseProgramStages #endif #ifndef GLEE_H_DEFINED_glActiveShaderProgram #define GLEE_H_DEFINED_glActiveShaderProgram typedef void (APIENTRYP GLEEPFNGLACTIVESHADERPROGRAMPROC) (GLuint pipeline, GLuint program); GLEE_EXTERN GLEEPFNGLACTIVESHADERPROGRAMPROC GLeeFuncPtr_glActiveShaderProgram; #define glActiveShaderProgram GLeeFuncPtr_glActiveShaderProgram #endif #ifndef GLEE_H_DEFINED_glCreateShaderProgramv #define GLEE_H_DEFINED_glCreateShaderProgramv typedef GLuint (APIENTRYP GLEEPFNGLCREATESHADERPROGRAMVPROC) (GLenum type, GLsizei count, const GLchar* const * strings); GLEE_EXTERN GLEEPFNGLCREATESHADERPROGRAMVPROC GLeeFuncPtr_glCreateShaderProgramv; #define glCreateShaderProgramv GLeeFuncPtr_glCreateShaderProgramv #endif #ifndef GLEE_H_DEFINED_glBindProgramPipeline #define GLEE_H_DEFINED_glBindProgramPipeline typedef void (APIENTRYP GLEEPFNGLBINDPROGRAMPIPELINEPROC) (GLuint pipeline); GLEE_EXTERN GLEEPFNGLBINDPROGRAMPIPELINEPROC GLeeFuncPtr_glBindProgramPipeline; #define glBindProgramPipeline GLeeFuncPtr_glBindProgramPipeline #endif #ifndef GLEE_H_DEFINED_glDeleteProgramPipelines #define GLEE_H_DEFINED_glDeleteProgramPipelines typedef void (APIENTRYP GLEEPFNGLDELETEPROGRAMPIPELINESPROC) (GLsizei n, const GLuint * pipelines); GLEE_EXTERN GLEEPFNGLDELETEPROGRAMPIPELINESPROC GLeeFuncPtr_glDeleteProgramPipelines; #define glDeleteProgramPipelines GLeeFuncPtr_glDeleteProgramPipelines #endif #ifndef GLEE_H_DEFINED_glGenProgramPipelines #define GLEE_H_DEFINED_glGenProgramPipelines typedef void (APIENTRYP GLEEPFNGLGENPROGRAMPIPELINESPROC) (GLsizei n, GLuint * pipelines); GLEE_EXTERN GLEEPFNGLGENPROGRAMPIPELINESPROC GLeeFuncPtr_glGenProgramPipelines; #define glGenProgramPipelines GLeeFuncPtr_glGenProgramPipelines #endif #ifndef GLEE_H_DEFINED_glIsProgramPipeline #define GLEE_H_DEFINED_glIsProgramPipeline typedef GLboolean (APIENTRYP GLEEPFNGLISPROGRAMPIPELINEPROC) (GLuint pipeline); GLEE_EXTERN GLEEPFNGLISPROGRAMPIPELINEPROC GLeeFuncPtr_glIsProgramPipeline; #define glIsProgramPipeline GLeeFuncPtr_glIsProgramPipeline #endif #ifndef GLEE_H_DEFINED_glGetProgramPipelineiv #define GLEE_H_DEFINED_glGetProgramPipelineiv typedef void (APIENTRYP GLEEPFNGLGETPROGRAMPIPELINEIVPROC) (GLuint pipeline, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETPROGRAMPIPELINEIVPROC GLeeFuncPtr_glGetProgramPipelineiv; #define glGetProgramPipelineiv GLeeFuncPtr_glGetProgramPipelineiv #endif #ifndef GLEE_H_DEFINED_glProgramUniform1i #define GLEE_H_DEFINED_glProgramUniform1i typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM1IPROC) (GLuint program, GLint location, GLint v0); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM1IPROC GLeeFuncPtr_glProgramUniform1i; #define glProgramUniform1i GLeeFuncPtr_glProgramUniform1i #endif #ifndef GLEE_H_DEFINED_glProgramUniform1iv #define GLEE_H_DEFINED_glProgramUniform1iv typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM1IVPROC) (GLuint program, GLint location, GLsizei count, const GLint * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM1IVPROC GLeeFuncPtr_glProgramUniform1iv; #define glProgramUniform1iv GLeeFuncPtr_glProgramUniform1iv #endif #ifndef GLEE_H_DEFINED_glProgramUniform1f #define GLEE_H_DEFINED_glProgramUniform1f typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM1FPROC) (GLuint program, GLint location, GLfloat v0); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM1FPROC GLeeFuncPtr_glProgramUniform1f; #define glProgramUniform1f GLeeFuncPtr_glProgramUniform1f #endif #ifndef GLEE_H_DEFINED_glProgramUniform1fv #define GLEE_H_DEFINED_glProgramUniform1fv typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM1FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM1FVPROC GLeeFuncPtr_glProgramUniform1fv; #define glProgramUniform1fv GLeeFuncPtr_glProgramUniform1fv #endif #ifndef GLEE_H_DEFINED_glProgramUniform1d #define GLEE_H_DEFINED_glProgramUniform1d typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM1DPROC) (GLuint program, GLint location, GLdouble v0); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM1DPROC GLeeFuncPtr_glProgramUniform1d; #define glProgramUniform1d GLeeFuncPtr_glProgramUniform1d #endif #ifndef GLEE_H_DEFINED_glProgramUniform1dv #define GLEE_H_DEFINED_glProgramUniform1dv typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM1DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM1DVPROC GLeeFuncPtr_glProgramUniform1dv; #define glProgramUniform1dv GLeeFuncPtr_glProgramUniform1dv #endif #ifndef GLEE_H_DEFINED_glProgramUniform1ui #define GLEE_H_DEFINED_glProgramUniform1ui typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM1UIPROC) (GLuint program, GLint location, GLuint v0); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM1UIPROC GLeeFuncPtr_glProgramUniform1ui; #define glProgramUniform1ui GLeeFuncPtr_glProgramUniform1ui #endif #ifndef GLEE_H_DEFINED_glProgramUniform1uiv #define GLEE_H_DEFINED_glProgramUniform1uiv typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM1UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM1UIVPROC GLeeFuncPtr_glProgramUniform1uiv; #define glProgramUniform1uiv GLeeFuncPtr_glProgramUniform1uiv #endif #ifndef GLEE_H_DEFINED_glProgramUniform2i #define GLEE_H_DEFINED_glProgramUniform2i typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM2IPROC) (GLuint program, GLint location, GLint v0, GLint v1); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM2IPROC GLeeFuncPtr_glProgramUniform2i; #define glProgramUniform2i GLeeFuncPtr_glProgramUniform2i #endif #ifndef GLEE_H_DEFINED_glProgramUniform2iv #define GLEE_H_DEFINED_glProgramUniform2iv typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM2IVPROC) (GLuint program, GLint location, GLsizei count, const GLint * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM2IVPROC GLeeFuncPtr_glProgramUniform2iv; #define glProgramUniform2iv GLeeFuncPtr_glProgramUniform2iv #endif #ifndef GLEE_H_DEFINED_glProgramUniform2f #define GLEE_H_DEFINED_glProgramUniform2f typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM2FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM2FPROC GLeeFuncPtr_glProgramUniform2f; #define glProgramUniform2f GLeeFuncPtr_glProgramUniform2f #endif #ifndef GLEE_H_DEFINED_glProgramUniform2fv #define GLEE_H_DEFINED_glProgramUniform2fv typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM2FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM2FVPROC GLeeFuncPtr_glProgramUniform2fv; #define glProgramUniform2fv GLeeFuncPtr_glProgramUniform2fv #endif #ifndef GLEE_H_DEFINED_glProgramUniform2d #define GLEE_H_DEFINED_glProgramUniform2d typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM2DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM2DPROC GLeeFuncPtr_glProgramUniform2d; #define glProgramUniform2d GLeeFuncPtr_glProgramUniform2d #endif #ifndef GLEE_H_DEFINED_glProgramUniform2dv #define GLEE_H_DEFINED_glProgramUniform2dv typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM2DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM2DVPROC GLeeFuncPtr_glProgramUniform2dv; #define glProgramUniform2dv GLeeFuncPtr_glProgramUniform2dv #endif #ifndef GLEE_H_DEFINED_glProgramUniform2ui #define GLEE_H_DEFINED_glProgramUniform2ui typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM2UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM2UIPROC GLeeFuncPtr_glProgramUniform2ui; #define glProgramUniform2ui GLeeFuncPtr_glProgramUniform2ui #endif #ifndef GLEE_H_DEFINED_glProgramUniform2uiv #define GLEE_H_DEFINED_glProgramUniform2uiv typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM2UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM2UIVPROC GLeeFuncPtr_glProgramUniform2uiv; #define glProgramUniform2uiv GLeeFuncPtr_glProgramUniform2uiv #endif #ifndef GLEE_H_DEFINED_glProgramUniform3i #define GLEE_H_DEFINED_glProgramUniform3i typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM3IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM3IPROC GLeeFuncPtr_glProgramUniform3i; #define glProgramUniform3i GLeeFuncPtr_glProgramUniform3i #endif #ifndef GLEE_H_DEFINED_glProgramUniform3iv #define GLEE_H_DEFINED_glProgramUniform3iv typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM3IVPROC) (GLuint program, GLint location, GLsizei count, const GLint * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM3IVPROC GLeeFuncPtr_glProgramUniform3iv; #define glProgramUniform3iv GLeeFuncPtr_glProgramUniform3iv #endif #ifndef GLEE_H_DEFINED_glProgramUniform3f #define GLEE_H_DEFINED_glProgramUniform3f typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM3FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM3FPROC GLeeFuncPtr_glProgramUniform3f; #define glProgramUniform3f GLeeFuncPtr_glProgramUniform3f #endif #ifndef GLEE_H_DEFINED_glProgramUniform3fv #define GLEE_H_DEFINED_glProgramUniform3fv typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM3FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM3FVPROC GLeeFuncPtr_glProgramUniform3fv; #define glProgramUniform3fv GLeeFuncPtr_glProgramUniform3fv #endif #ifndef GLEE_H_DEFINED_glProgramUniform3d #define GLEE_H_DEFINED_glProgramUniform3d typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM3DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM3DPROC GLeeFuncPtr_glProgramUniform3d; #define glProgramUniform3d GLeeFuncPtr_glProgramUniform3d #endif #ifndef GLEE_H_DEFINED_glProgramUniform3dv #define GLEE_H_DEFINED_glProgramUniform3dv typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM3DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM3DVPROC GLeeFuncPtr_glProgramUniform3dv; #define glProgramUniform3dv GLeeFuncPtr_glProgramUniform3dv #endif #ifndef GLEE_H_DEFINED_glProgramUniform3ui #define GLEE_H_DEFINED_glProgramUniform3ui typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM3UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM3UIPROC GLeeFuncPtr_glProgramUniform3ui; #define glProgramUniform3ui GLeeFuncPtr_glProgramUniform3ui #endif #ifndef GLEE_H_DEFINED_glProgramUniform3uiv #define GLEE_H_DEFINED_glProgramUniform3uiv typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM3UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM3UIVPROC GLeeFuncPtr_glProgramUniform3uiv; #define glProgramUniform3uiv GLeeFuncPtr_glProgramUniform3uiv #endif #ifndef GLEE_H_DEFINED_glProgramUniform4i #define GLEE_H_DEFINED_glProgramUniform4i typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM4IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM4IPROC GLeeFuncPtr_glProgramUniform4i; #define glProgramUniform4i GLeeFuncPtr_glProgramUniform4i #endif #ifndef GLEE_H_DEFINED_glProgramUniform4iv #define GLEE_H_DEFINED_glProgramUniform4iv typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM4IVPROC) (GLuint program, GLint location, GLsizei count, const GLint * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM4IVPROC GLeeFuncPtr_glProgramUniform4iv; #define glProgramUniform4iv GLeeFuncPtr_glProgramUniform4iv #endif #ifndef GLEE_H_DEFINED_glProgramUniform4f #define GLEE_H_DEFINED_glProgramUniform4f typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM4FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM4FPROC GLeeFuncPtr_glProgramUniform4f; #define glProgramUniform4f GLeeFuncPtr_glProgramUniform4f #endif #ifndef GLEE_H_DEFINED_glProgramUniform4fv #define GLEE_H_DEFINED_glProgramUniform4fv typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM4FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM4FVPROC GLeeFuncPtr_glProgramUniform4fv; #define glProgramUniform4fv GLeeFuncPtr_glProgramUniform4fv #endif #ifndef GLEE_H_DEFINED_glProgramUniform4d #define GLEE_H_DEFINED_glProgramUniform4d typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM4DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM4DPROC GLeeFuncPtr_glProgramUniform4d; #define glProgramUniform4d GLeeFuncPtr_glProgramUniform4d #endif #ifndef GLEE_H_DEFINED_glProgramUniform4dv #define GLEE_H_DEFINED_glProgramUniform4dv typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM4DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM4DVPROC GLeeFuncPtr_glProgramUniform4dv; #define glProgramUniform4dv GLeeFuncPtr_glProgramUniform4dv #endif #ifndef GLEE_H_DEFINED_glProgramUniform4ui #define GLEE_H_DEFINED_glProgramUniform4ui typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM4UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM4UIPROC GLeeFuncPtr_glProgramUniform4ui; #define glProgramUniform4ui GLeeFuncPtr_glProgramUniform4ui #endif #ifndef GLEE_H_DEFINED_glProgramUniform4uiv #define GLEE_H_DEFINED_glProgramUniform4uiv typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM4UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM4UIVPROC GLeeFuncPtr_glProgramUniform4uiv; #define glProgramUniform4uiv GLeeFuncPtr_glProgramUniform4uiv #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix2fv #define GLEE_H_DEFINED_glProgramUniformMatrix2fv typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX2FVPROC GLeeFuncPtr_glProgramUniformMatrix2fv; #define glProgramUniformMatrix2fv GLeeFuncPtr_glProgramUniformMatrix2fv #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix3fv #define GLEE_H_DEFINED_glProgramUniformMatrix3fv typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX3FVPROC GLeeFuncPtr_glProgramUniformMatrix3fv; #define glProgramUniformMatrix3fv GLeeFuncPtr_glProgramUniformMatrix3fv #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix4fv #define GLEE_H_DEFINED_glProgramUniformMatrix4fv typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX4FVPROC GLeeFuncPtr_glProgramUniformMatrix4fv; #define glProgramUniformMatrix4fv GLeeFuncPtr_glProgramUniformMatrix4fv #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix2dv #define GLEE_H_DEFINED_glProgramUniformMatrix2dv typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX2DVPROC GLeeFuncPtr_glProgramUniformMatrix2dv; #define glProgramUniformMatrix2dv GLeeFuncPtr_glProgramUniformMatrix2dv #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix3dv #define GLEE_H_DEFINED_glProgramUniformMatrix3dv typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX3DVPROC GLeeFuncPtr_glProgramUniformMatrix3dv; #define glProgramUniformMatrix3dv GLeeFuncPtr_glProgramUniformMatrix3dv #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix4dv #define GLEE_H_DEFINED_glProgramUniformMatrix4dv typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX4DVPROC GLeeFuncPtr_glProgramUniformMatrix4dv; #define glProgramUniformMatrix4dv GLeeFuncPtr_glProgramUniformMatrix4dv #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix2x3fv #define GLEE_H_DEFINED_glProgramUniformMatrix2x3fv typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX2X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX2X3FVPROC GLeeFuncPtr_glProgramUniformMatrix2x3fv; #define glProgramUniformMatrix2x3fv GLeeFuncPtr_glProgramUniformMatrix2x3fv #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix3x2fv #define GLEE_H_DEFINED_glProgramUniformMatrix3x2fv typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX3X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX3X2FVPROC GLeeFuncPtr_glProgramUniformMatrix3x2fv; #define glProgramUniformMatrix3x2fv GLeeFuncPtr_glProgramUniformMatrix3x2fv #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix2x4fv #define GLEE_H_DEFINED_glProgramUniformMatrix2x4fv typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX2X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX2X4FVPROC GLeeFuncPtr_glProgramUniformMatrix2x4fv; #define glProgramUniformMatrix2x4fv GLeeFuncPtr_glProgramUniformMatrix2x4fv #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix4x2fv #define GLEE_H_DEFINED_glProgramUniformMatrix4x2fv typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX4X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX4X2FVPROC GLeeFuncPtr_glProgramUniformMatrix4x2fv; #define glProgramUniformMatrix4x2fv GLeeFuncPtr_glProgramUniformMatrix4x2fv #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix3x4fv #define GLEE_H_DEFINED_glProgramUniformMatrix3x4fv typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX3X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX3X4FVPROC GLeeFuncPtr_glProgramUniformMatrix3x4fv; #define glProgramUniformMatrix3x4fv GLeeFuncPtr_glProgramUniformMatrix3x4fv #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix4x3fv #define GLEE_H_DEFINED_glProgramUniformMatrix4x3fv typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX4X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX4X3FVPROC GLeeFuncPtr_glProgramUniformMatrix4x3fv; #define glProgramUniformMatrix4x3fv GLeeFuncPtr_glProgramUniformMatrix4x3fv #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix2x3dv #define GLEE_H_DEFINED_glProgramUniformMatrix2x3dv typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX2X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX2X3DVPROC GLeeFuncPtr_glProgramUniformMatrix2x3dv; #define glProgramUniformMatrix2x3dv GLeeFuncPtr_glProgramUniformMatrix2x3dv #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix3x2dv #define GLEE_H_DEFINED_glProgramUniformMatrix3x2dv typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX3X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX3X2DVPROC GLeeFuncPtr_glProgramUniformMatrix3x2dv; #define glProgramUniformMatrix3x2dv GLeeFuncPtr_glProgramUniformMatrix3x2dv #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix2x4dv #define GLEE_H_DEFINED_glProgramUniformMatrix2x4dv typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX2X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX2X4DVPROC GLeeFuncPtr_glProgramUniformMatrix2x4dv; #define glProgramUniformMatrix2x4dv GLeeFuncPtr_glProgramUniformMatrix2x4dv #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix4x2dv #define GLEE_H_DEFINED_glProgramUniformMatrix4x2dv typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX4X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX4X2DVPROC GLeeFuncPtr_glProgramUniformMatrix4x2dv; #define glProgramUniformMatrix4x2dv GLeeFuncPtr_glProgramUniformMatrix4x2dv #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix3x4dv #define GLEE_H_DEFINED_glProgramUniformMatrix3x4dv typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX3X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX3X4DVPROC GLeeFuncPtr_glProgramUniformMatrix3x4dv; #define glProgramUniformMatrix3x4dv GLeeFuncPtr_glProgramUniformMatrix3x4dv #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix4x3dv #define GLEE_H_DEFINED_glProgramUniformMatrix4x3dv typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX4X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX4X3DVPROC GLeeFuncPtr_glProgramUniformMatrix4x3dv; #define glProgramUniformMatrix4x3dv GLeeFuncPtr_glProgramUniformMatrix4x3dv #endif #ifndef GLEE_H_DEFINED_glValidateProgramPipeline #define GLEE_H_DEFINED_glValidateProgramPipeline typedef void (APIENTRYP GLEEPFNGLVALIDATEPROGRAMPIPELINEPROC) (GLuint pipeline); GLEE_EXTERN GLEEPFNGLVALIDATEPROGRAMPIPELINEPROC GLeeFuncPtr_glValidateProgramPipeline; #define glValidateProgramPipeline GLeeFuncPtr_glValidateProgramPipeline #endif #ifndef GLEE_H_DEFINED_glGetProgramPipelineInfoLog #define GLEE_H_DEFINED_glGetProgramPipelineInfoLog typedef void (APIENTRYP GLEEPFNGLGETPROGRAMPIPELINEINFOLOGPROC) (GLuint pipeline, GLsizei bufSize, GLsizei * length, GLchar * infoLog); GLEE_EXTERN GLEEPFNGLGETPROGRAMPIPELINEINFOLOGPROC GLeeFuncPtr_glGetProgramPipelineInfoLog; #define glGetProgramPipelineInfoLog GLeeFuncPtr_glGetProgramPipelineInfoLog #endif #endif /* GL_ARB_shader_precision */ #ifndef GL_ARB_shader_precision #define GL_ARB_shader_precision 1 #define __GLEE_GL_ARB_shader_precision 1 /* Constants */ #endif /* GL_ARB_vertex_attrib_64bit */ #ifndef GL_ARB_vertex_attrib_64bit #define GL_ARB_vertex_attrib_64bit 1 #define __GLEE_GL_ARB_vertex_attrib_64bit 1 /* Constants */ #ifndef GLEE_H_DEFINED_glVertexAttribL1d #define GLEE_H_DEFINED_glVertexAttribL1d typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBL1DPROC) (GLuint index, GLdouble x); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBL1DPROC GLeeFuncPtr_glVertexAttribL1d; #define glVertexAttribL1d GLeeFuncPtr_glVertexAttribL1d #endif #ifndef GLEE_H_DEFINED_glVertexAttribL2d #define GLEE_H_DEFINED_glVertexAttribL2d typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBL2DPROC) (GLuint index, GLdouble x, GLdouble y); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBL2DPROC GLeeFuncPtr_glVertexAttribL2d; #define glVertexAttribL2d GLeeFuncPtr_glVertexAttribL2d #endif #ifndef GLEE_H_DEFINED_glVertexAttribL3d #define GLEE_H_DEFINED_glVertexAttribL3d typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBL3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBL3DPROC GLeeFuncPtr_glVertexAttribL3d; #define glVertexAttribL3d GLeeFuncPtr_glVertexAttribL3d #endif #ifndef GLEE_H_DEFINED_glVertexAttribL4d #define GLEE_H_DEFINED_glVertexAttribL4d typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBL4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBL4DPROC GLeeFuncPtr_glVertexAttribL4d; #define glVertexAttribL4d GLeeFuncPtr_glVertexAttribL4d #endif #ifndef GLEE_H_DEFINED_glVertexAttribL1dv #define GLEE_H_DEFINED_glVertexAttribL1dv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBL1DVPROC) (GLuint index, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBL1DVPROC GLeeFuncPtr_glVertexAttribL1dv; #define glVertexAttribL1dv GLeeFuncPtr_glVertexAttribL1dv #endif #ifndef GLEE_H_DEFINED_glVertexAttribL2dv #define GLEE_H_DEFINED_glVertexAttribL2dv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBL2DVPROC) (GLuint index, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBL2DVPROC GLeeFuncPtr_glVertexAttribL2dv; #define glVertexAttribL2dv GLeeFuncPtr_glVertexAttribL2dv #endif #ifndef GLEE_H_DEFINED_glVertexAttribL3dv #define GLEE_H_DEFINED_glVertexAttribL3dv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBL3DVPROC) (GLuint index, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBL3DVPROC GLeeFuncPtr_glVertexAttribL3dv; #define glVertexAttribL3dv GLeeFuncPtr_glVertexAttribL3dv #endif #ifndef GLEE_H_DEFINED_glVertexAttribL4dv #define GLEE_H_DEFINED_glVertexAttribL4dv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBL4DVPROC) (GLuint index, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBL4DVPROC GLeeFuncPtr_glVertexAttribL4dv; #define glVertexAttribL4dv GLeeFuncPtr_glVertexAttribL4dv #endif #ifndef GLEE_H_DEFINED_glVertexAttribLPointer #define GLEE_H_DEFINED_glVertexAttribLPointer typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBLPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBLPOINTERPROC GLeeFuncPtr_glVertexAttribLPointer; #define glVertexAttribLPointer GLeeFuncPtr_glVertexAttribLPointer #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribLdv #define GLEE_H_DEFINED_glGetVertexAttribLdv typedef void (APIENTRYP GLEEPFNGLGETVERTEXATTRIBLDVPROC) (GLuint index, GLenum pname, GLdouble * params); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBLDVPROC GLeeFuncPtr_glGetVertexAttribLdv; #define glGetVertexAttribLdv GLeeFuncPtr_glGetVertexAttribLdv #endif #endif /* GL_ARB_viewport_array */ #ifndef GL_ARB_viewport_array #define GL_ARB_viewport_array 1 #define __GLEE_GL_ARB_viewport_array 1 /* Constants */ #define GL_MAX_VIEWPORTS 0x825B #define GL_VIEWPORT_SUBPIXEL_BITS 0x825C #define GL_VIEWPORT_BOUNDS_RANGE 0x825D #define GL_LAYER_PROVOKING_VERTEX 0x825E #define GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F #define GL_UNDEFINED_VERTEX 0x8260 #ifndef GLEE_H_DEFINED_glViewportArrayv #define GLEE_H_DEFINED_glViewportArrayv typedef void (APIENTRYP GLEEPFNGLVIEWPORTARRAYVPROC) (GLuint first, GLsizei count, const GLfloat * v); GLEE_EXTERN GLEEPFNGLVIEWPORTARRAYVPROC GLeeFuncPtr_glViewportArrayv; #define glViewportArrayv GLeeFuncPtr_glViewportArrayv #endif #ifndef GLEE_H_DEFINED_glViewportIndexedf #define GLEE_H_DEFINED_glViewportIndexedf typedef void (APIENTRYP GLEEPFNGLVIEWPORTINDEXEDFPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); GLEE_EXTERN GLEEPFNGLVIEWPORTINDEXEDFPROC GLeeFuncPtr_glViewportIndexedf; #define glViewportIndexedf GLeeFuncPtr_glViewportIndexedf #endif #ifndef GLEE_H_DEFINED_glViewportIndexedfv #define GLEE_H_DEFINED_glViewportIndexedfv typedef void (APIENTRYP GLEEPFNGLVIEWPORTINDEXEDFVPROC) (GLuint index, const GLfloat * v); GLEE_EXTERN GLEEPFNGLVIEWPORTINDEXEDFVPROC GLeeFuncPtr_glViewportIndexedfv; #define glViewportIndexedfv GLeeFuncPtr_glViewportIndexedfv #endif #ifndef GLEE_H_DEFINED_glScissorArrayv #define GLEE_H_DEFINED_glScissorArrayv typedef void (APIENTRYP GLEEPFNGLSCISSORARRAYVPROC) (GLuint first, GLsizei count, const GLint * v); GLEE_EXTERN GLEEPFNGLSCISSORARRAYVPROC GLeeFuncPtr_glScissorArrayv; #define glScissorArrayv GLeeFuncPtr_glScissorArrayv #endif #ifndef GLEE_H_DEFINED_glScissorIndexed #define GLEE_H_DEFINED_glScissorIndexed typedef void (APIENTRYP GLEEPFNGLSCISSORINDEXEDPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLSCISSORINDEXEDPROC GLeeFuncPtr_glScissorIndexed; #define glScissorIndexed GLeeFuncPtr_glScissorIndexed #endif #ifndef GLEE_H_DEFINED_glScissorIndexedv #define GLEE_H_DEFINED_glScissorIndexedv typedef void (APIENTRYP GLEEPFNGLSCISSORINDEXEDVPROC) (GLuint index, const GLint * v); GLEE_EXTERN GLEEPFNGLSCISSORINDEXEDVPROC GLeeFuncPtr_glScissorIndexedv; #define glScissorIndexedv GLeeFuncPtr_glScissorIndexedv #endif #ifndef GLEE_H_DEFINED_glDepthRangeArrayv #define GLEE_H_DEFINED_glDepthRangeArrayv typedef void (APIENTRYP GLEEPFNGLDEPTHRANGEARRAYVPROC) (GLuint first, GLsizei count, const GLdouble * v); GLEE_EXTERN GLEEPFNGLDEPTHRANGEARRAYVPROC GLeeFuncPtr_glDepthRangeArrayv; #define glDepthRangeArrayv GLeeFuncPtr_glDepthRangeArrayv #endif #ifndef GLEE_H_DEFINED_glDepthRangeIndexed #define GLEE_H_DEFINED_glDepthRangeIndexed typedef void (APIENTRYP GLEEPFNGLDEPTHRANGEINDEXEDPROC) (GLuint index, GLdouble n, GLdouble f); GLEE_EXTERN GLEEPFNGLDEPTHRANGEINDEXEDPROC GLeeFuncPtr_glDepthRangeIndexed; #define glDepthRangeIndexed GLeeFuncPtr_glDepthRangeIndexed #endif #ifndef GLEE_H_DEFINED_glGetFloati_v #define GLEE_H_DEFINED_glGetFloati_v typedef void (APIENTRYP GLEEPFNGLGETFLOATI_VPROC) (GLenum target, GLuint index, GLfloat * data); GLEE_EXTERN GLEEPFNGLGETFLOATI_VPROC GLeeFuncPtr_glGetFloati_v; #define glGetFloati_v GLeeFuncPtr_glGetFloati_v #endif #ifndef GLEE_H_DEFINED_glGetDoublei_v #define GLEE_H_DEFINED_glGetDoublei_v typedef void (APIENTRYP GLEEPFNGLGETDOUBLEI_VPROC) (GLenum target, GLuint index, GLdouble * data); GLEE_EXTERN GLEEPFNGLGETDOUBLEI_VPROC GLeeFuncPtr_glGetDoublei_v; #define glGetDoublei_v GLeeFuncPtr_glGetDoublei_v #endif #endif /* GL_ARB_cl_event */ #ifndef GL_ARB_cl_event #define GL_ARB_cl_event 1 #define __GLEE_GL_ARB_cl_event 1 /* Constants */ #define GL_SYNC_CL_EVENT_ARB 0x8240 #define GL_SYNC_CL_EVENT_COMPLETE_ARB 0x8241 #ifndef GLEE_H_DEFINED_glCreateSyncFromCLeventARB #define GLEE_H_DEFINED_glCreateSyncFromCLeventARB typedef GLsync (APIENTRYP GLEEPFNGLCREATESYNCFROMCLEVENTARBPROC) (struct _cl_context * context, struct _cl_event * event, GLbitfield flags); GLEE_EXTERN GLEEPFNGLCREATESYNCFROMCLEVENTARBPROC GLeeFuncPtr_glCreateSyncFromCLeventARB; #define glCreateSyncFromCLeventARB GLeeFuncPtr_glCreateSyncFromCLeventARB #endif #endif /* GL_ARB_debug_output */ #ifndef GL_ARB_debug_output #define GL_ARB_debug_output 1 #define __GLEE_GL_ARB_debug_output 1 /* Constants */ #define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242 #define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243 #define GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244 #define GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245 #define GL_DEBUG_SOURCE_API_ARB 0x8246 #define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247 #define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248 #define GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249 #define GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A #define GL_DEBUG_SOURCE_OTHER_ARB 0x824B #define GL_DEBUG_TYPE_ERROR_ARB 0x824C #define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D #define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E #define GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F #define GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250 #define GL_DEBUG_TYPE_OTHER_ARB 0x8251 #define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143 #define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144 #define GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145 #define GL_DEBUG_SEVERITY_HIGH_ARB 0x9146 #define GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147 #define GL_DEBUG_SEVERITY_LOW_ARB 0x9148 #ifndef GLEE_H_DEFINED_glDebugMessageControlARB #define GLEE_H_DEFINED_glDebugMessageControlARB typedef void (APIENTRYP GLEEPFNGLDEBUGMESSAGECONTROLARBPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled); GLEE_EXTERN GLEEPFNGLDEBUGMESSAGECONTROLARBPROC GLeeFuncPtr_glDebugMessageControlARB; #define glDebugMessageControlARB GLeeFuncPtr_glDebugMessageControlARB #endif #ifndef GLEE_H_DEFINED_glDebugMessageInsertARB #define GLEE_H_DEFINED_glDebugMessageInsertARB typedef void (APIENTRYP GLEEPFNGLDEBUGMESSAGEINSERTARBPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * buf); GLEE_EXTERN GLEEPFNGLDEBUGMESSAGEINSERTARBPROC GLeeFuncPtr_glDebugMessageInsertARB; #define glDebugMessageInsertARB GLeeFuncPtr_glDebugMessageInsertARB #endif #ifndef GLEE_H_DEFINED_glDebugMessageCallbackARB #define GLEE_H_DEFINED_glDebugMessageCallbackARB typedef void (APIENTRYP GLEEPFNGLDEBUGMESSAGECALLBACKARBPROC) (GLDEBUGPROCARB callback, const GLvoid * userParam); GLEE_EXTERN GLEEPFNGLDEBUGMESSAGECALLBACKARBPROC GLeeFuncPtr_glDebugMessageCallbackARB; #define glDebugMessageCallbackARB GLeeFuncPtr_glDebugMessageCallbackARB #endif #ifndef GLEE_H_DEFINED_glGetDebugMessageLogARB #define GLEE_H_DEFINED_glGetDebugMessageLogARB typedef GLuint (APIENTRYP GLEEPFNGLGETDEBUGMESSAGELOGARBPROC) (GLuint count, GLsizei bufsize, GLenum * sources, GLenum * types, GLuint * ids, GLenum * severities, GLsizei * lengths, GLchar * messageLog); GLEE_EXTERN GLEEPFNGLGETDEBUGMESSAGELOGARBPROC GLeeFuncPtr_glGetDebugMessageLogARB; #define glGetDebugMessageLogARB GLeeFuncPtr_glGetDebugMessageLogARB #endif #endif /* GL_ARB_robustness */ #ifndef GL_ARB_robustness #define GL_ARB_robustness 1 #define __GLEE_GL_ARB_robustness 1 /* Constants */ #define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004 #define GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 #define GL_GUILTY_CONTEXT_RESET_ARB 0x8253 #define GL_INNOCENT_CONTEXT_RESET_ARB 0x8254 #define GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255 #define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 #define GL_NO_RESET_NOTIFICATION_ARB 0x8261 #ifndef GLEE_H_DEFINED_glGetGraphicsResetStatusARB #define GLEE_H_DEFINED_glGetGraphicsResetStatusARB typedef GLenum (APIENTRYP GLEEPFNGLGETGRAPHICSRESETSTATUSARBPROC) (); GLEE_EXTERN GLEEPFNGLGETGRAPHICSRESETSTATUSARBPROC GLeeFuncPtr_glGetGraphicsResetStatusARB; #define glGetGraphicsResetStatusARB GLeeFuncPtr_glGetGraphicsResetStatusARB #endif #ifndef GLEE_H_DEFINED_glGetnMapdvARB #define GLEE_H_DEFINED_glGetnMapdvARB typedef void (APIENTRYP GLEEPFNGLGETNMAPDVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLdouble * v); GLEE_EXTERN GLEEPFNGLGETNMAPDVARBPROC GLeeFuncPtr_glGetnMapdvARB; #define glGetnMapdvARB GLeeFuncPtr_glGetnMapdvARB #endif #ifndef GLEE_H_DEFINED_glGetnMapfvARB #define GLEE_H_DEFINED_glGetnMapfvARB typedef void (APIENTRYP GLEEPFNGLGETNMAPFVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLfloat * v); GLEE_EXTERN GLEEPFNGLGETNMAPFVARBPROC GLeeFuncPtr_glGetnMapfvARB; #define glGetnMapfvARB GLeeFuncPtr_glGetnMapfvARB #endif #ifndef GLEE_H_DEFINED_glGetnMapivARB #define GLEE_H_DEFINED_glGetnMapivARB typedef void (APIENTRYP GLEEPFNGLGETNMAPIVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLint * v); GLEE_EXTERN GLEEPFNGLGETNMAPIVARBPROC GLeeFuncPtr_glGetnMapivARB; #define glGetnMapivARB GLeeFuncPtr_glGetnMapivARB #endif #ifndef GLEE_H_DEFINED_glGetnPixelMapfvARB #define GLEE_H_DEFINED_glGetnPixelMapfvARB typedef void (APIENTRYP GLEEPFNGLGETNPIXELMAPFVARBPROC) (GLenum map, GLsizei bufSize, GLfloat * values); GLEE_EXTERN GLEEPFNGLGETNPIXELMAPFVARBPROC GLeeFuncPtr_glGetnPixelMapfvARB; #define glGetnPixelMapfvARB GLeeFuncPtr_glGetnPixelMapfvARB #endif #ifndef GLEE_H_DEFINED_glGetnPixelMapuivARB #define GLEE_H_DEFINED_glGetnPixelMapuivARB typedef void (APIENTRYP GLEEPFNGLGETNPIXELMAPUIVARBPROC) (GLenum map, GLsizei bufSize, GLuint * values); GLEE_EXTERN GLEEPFNGLGETNPIXELMAPUIVARBPROC GLeeFuncPtr_glGetnPixelMapuivARB; #define glGetnPixelMapuivARB GLeeFuncPtr_glGetnPixelMapuivARB #endif #ifndef GLEE_H_DEFINED_glGetnPixelMapusvARB #define GLEE_H_DEFINED_glGetnPixelMapusvARB typedef void (APIENTRYP GLEEPFNGLGETNPIXELMAPUSVARBPROC) (GLenum map, GLsizei bufSize, GLushort * values); GLEE_EXTERN GLEEPFNGLGETNPIXELMAPUSVARBPROC GLeeFuncPtr_glGetnPixelMapusvARB; #define glGetnPixelMapusvARB GLeeFuncPtr_glGetnPixelMapusvARB #endif #ifndef GLEE_H_DEFINED_glGetnPolygonStippleARB #define GLEE_H_DEFINED_glGetnPolygonStippleARB typedef void (APIENTRYP GLEEPFNGLGETNPOLYGONSTIPPLEARBPROC) (GLsizei bufSize, GLubyte * pattern); GLEE_EXTERN GLEEPFNGLGETNPOLYGONSTIPPLEARBPROC GLeeFuncPtr_glGetnPolygonStippleARB; #define glGetnPolygonStippleARB GLeeFuncPtr_glGetnPolygonStippleARB #endif #ifndef GLEE_H_DEFINED_glGetnColorTableARB #define GLEE_H_DEFINED_glGetnColorTableARB typedef void (APIENTRYP GLEEPFNGLGETNCOLORTABLEARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid * table); GLEE_EXTERN GLEEPFNGLGETNCOLORTABLEARBPROC GLeeFuncPtr_glGetnColorTableARB; #define glGetnColorTableARB GLeeFuncPtr_glGetnColorTableARB #endif #ifndef GLEE_H_DEFINED_glGetnConvolutionFilterARB #define GLEE_H_DEFINED_glGetnConvolutionFilterARB typedef void (APIENTRYP GLEEPFNGLGETNCONVOLUTIONFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid * image); GLEE_EXTERN GLEEPFNGLGETNCONVOLUTIONFILTERARBPROC GLeeFuncPtr_glGetnConvolutionFilterARB; #define glGetnConvolutionFilterARB GLeeFuncPtr_glGetnConvolutionFilterARB #endif #ifndef GLEE_H_DEFINED_glGetnSeparableFilterARB #define GLEE_H_DEFINED_glGetnSeparableFilterARB typedef void (APIENTRYP GLEEPFNGLGETNSEPARABLEFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, GLvoid * row, GLsizei columnBufSize, GLvoid * column, GLvoid * span); GLEE_EXTERN GLEEPFNGLGETNSEPARABLEFILTERARBPROC GLeeFuncPtr_glGetnSeparableFilterARB; #define glGetnSeparableFilterARB GLeeFuncPtr_glGetnSeparableFilterARB #endif #ifndef GLEE_H_DEFINED_glGetnHistogramARB #define GLEE_H_DEFINED_glGetnHistogramARB typedef void (APIENTRYP GLEEPFNGLGETNHISTOGRAMARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid * values); GLEE_EXTERN GLEEPFNGLGETNHISTOGRAMARBPROC GLeeFuncPtr_glGetnHistogramARB; #define glGetnHistogramARB GLeeFuncPtr_glGetnHistogramARB #endif #ifndef GLEE_H_DEFINED_glGetnMinmaxARB #define GLEE_H_DEFINED_glGetnMinmaxARB typedef void (APIENTRYP GLEEPFNGLGETNMINMAXARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid * values); GLEE_EXTERN GLEEPFNGLGETNMINMAXARBPROC GLeeFuncPtr_glGetnMinmaxARB; #define glGetnMinmaxARB GLeeFuncPtr_glGetnMinmaxARB #endif #ifndef GLEE_H_DEFINED_glGetnTexImageARB #define GLEE_H_DEFINED_glGetnTexImageARB typedef void (APIENTRYP GLEEPFNGLGETNTEXIMAGEARBPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, GLvoid * img); GLEE_EXTERN GLEEPFNGLGETNTEXIMAGEARBPROC GLeeFuncPtr_glGetnTexImageARB; #define glGetnTexImageARB GLeeFuncPtr_glGetnTexImageARB #endif #ifndef GLEE_H_DEFINED_glReadnPixelsARB #define GLEE_H_DEFINED_glReadnPixelsARB typedef void (APIENTRYP GLEEPFNGLREADNPIXELSARBPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid * data); GLEE_EXTERN GLEEPFNGLREADNPIXELSARBPROC GLeeFuncPtr_glReadnPixelsARB; #define glReadnPixelsARB GLeeFuncPtr_glReadnPixelsARB #endif #ifndef GLEE_H_DEFINED_glGetnCompressedTexImageARB #define GLEE_H_DEFINED_glGetnCompressedTexImageARB typedef void (APIENTRYP GLEEPFNGLGETNCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint lod, GLsizei bufSize, GLvoid * img); GLEE_EXTERN GLEEPFNGLGETNCOMPRESSEDTEXIMAGEARBPROC GLeeFuncPtr_glGetnCompressedTexImageARB; #define glGetnCompressedTexImageARB GLeeFuncPtr_glGetnCompressedTexImageARB #endif #ifndef GLEE_H_DEFINED_glGetnUniformfvARB #define GLEE_H_DEFINED_glGetnUniformfvARB typedef void (APIENTRYP GLEEPFNGLGETNUNIFORMFVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETNUNIFORMFVARBPROC GLeeFuncPtr_glGetnUniformfvARB; #define glGetnUniformfvARB GLeeFuncPtr_glGetnUniformfvARB #endif #ifndef GLEE_H_DEFINED_glGetnUniformivARB #define GLEE_H_DEFINED_glGetnUniformivARB typedef void (APIENTRYP GLEEPFNGLGETNUNIFORMIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLint * params); GLEE_EXTERN GLEEPFNGLGETNUNIFORMIVARBPROC GLeeFuncPtr_glGetnUniformivARB; #define glGetnUniformivARB GLeeFuncPtr_glGetnUniformivARB #endif #ifndef GLEE_H_DEFINED_glGetnUniformuivARB #define GLEE_H_DEFINED_glGetnUniformuivARB typedef void (APIENTRYP GLEEPFNGLGETNUNIFORMUIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint * params); GLEE_EXTERN GLEEPFNGLGETNUNIFORMUIVARBPROC GLeeFuncPtr_glGetnUniformuivARB; #define glGetnUniformuivARB GLeeFuncPtr_glGetnUniformuivARB #endif #ifndef GLEE_H_DEFINED_glGetnUniformdvARB #define GLEE_H_DEFINED_glGetnUniformdvARB typedef void (APIENTRYP GLEEPFNGLGETNUNIFORMDVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble * params); GLEE_EXTERN GLEEPFNGLGETNUNIFORMDVARBPROC GLeeFuncPtr_glGetnUniformdvARB; #define glGetnUniformdvARB GLeeFuncPtr_glGetnUniformdvARB #endif #endif /* GL_ARB_shader_stencil_export */ #ifndef GL_ARB_shader_stencil_export #define GL_ARB_shader_stencil_export 1 #define __GLEE_GL_ARB_shader_stencil_export 1 /* Constants */ #endif /* GL_ARB_base_instance */ #ifndef GL_ARB_base_instance #define GL_ARB_base_instance 1 #define __GLEE_GL_ARB_base_instance 1 /* Constants */ #ifndef GLEE_H_DEFINED_glDrawArraysInstancedBaseInstance #define GLEE_H_DEFINED_glDrawArraysInstancedBaseInstance typedef void (APIENTRYP GLEEPFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); GLEE_EXTERN GLEEPFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC GLeeFuncPtr_glDrawArraysInstancedBaseInstance; #define glDrawArraysInstancedBaseInstance GLeeFuncPtr_glDrawArraysInstancedBaseInstance #endif #ifndef GLEE_H_DEFINED_glDrawElementsInstancedBaseInstance #define GLEE_H_DEFINED_glDrawElementsInstancedBaseInstance typedef void (APIENTRYP GLEEPFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLuint baseinstance); GLEE_EXTERN GLEEPFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC GLeeFuncPtr_glDrawElementsInstancedBaseInstance; #define glDrawElementsInstancedBaseInstance GLeeFuncPtr_glDrawElementsInstancedBaseInstance #endif #ifndef GLEE_H_DEFINED_glDrawElementsInstancedBaseVertexBaseInstance #define GLEE_H_DEFINED_glDrawElementsInstancedBaseVertexBaseInstance typedef void (APIENTRYP GLEEPFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); GLEE_EXTERN GLEEPFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC GLeeFuncPtr_glDrawElementsInstancedBaseVertexBaseInstance; #define glDrawElementsInstancedBaseVertexBaseInstance GLeeFuncPtr_glDrawElementsInstancedBaseVertexBaseInstance #endif #endif /* GL_ARB_shading_language_420pack */ #ifndef GL_ARB_shading_language_420pack #define GL_ARB_shading_language_420pack 1 #define __GLEE_GL_ARB_shading_language_420pack 1 /* Constants */ #endif /* GL_ARB_transform_feedback_instanced */ #ifndef GL_ARB_transform_feedback_instanced #define GL_ARB_transform_feedback_instanced 1 #define __GLEE_GL_ARB_transform_feedback_instanced 1 /* Constants */ #ifndef GLEE_H_DEFINED_glDrawTransformFeedbackInstanced #define GLEE_H_DEFINED_glDrawTransformFeedbackInstanced typedef void (APIENTRYP GLEEPFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC) (GLenum mode, GLuint id, GLsizei instancecount); GLEE_EXTERN GLEEPFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC GLeeFuncPtr_glDrawTransformFeedbackInstanced; #define glDrawTransformFeedbackInstanced GLeeFuncPtr_glDrawTransformFeedbackInstanced #endif #ifndef GLEE_H_DEFINED_glDrawTransformFeedbackStreamInstanced #define GLEE_H_DEFINED_glDrawTransformFeedbackStreamInstanced typedef void (APIENTRYP GLEEPFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC) (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); GLEE_EXTERN GLEEPFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC GLeeFuncPtr_glDrawTransformFeedbackStreamInstanced; #define glDrawTransformFeedbackStreamInstanced GLeeFuncPtr_glDrawTransformFeedbackStreamInstanced #endif #endif /* GL_ARB_compressed_texture_pixel_storage */ #ifndef GL_ARB_compressed_texture_pixel_storage #define GL_ARB_compressed_texture_pixel_storage 1 #define __GLEE_GL_ARB_compressed_texture_pixel_storage 1 /* Constants */ #define GL_UNPACK_COMPRESSED_BLOCK_WIDTH 0x9127 #define GL_UNPACK_COMPRESSED_BLOCK_HEIGHT 0x9128 #define GL_UNPACK_COMPRESSED_BLOCK_DEPTH 0x9129 #define GL_UNPACK_COMPRESSED_BLOCK_SIZE 0x912A #define GL_PACK_COMPRESSED_BLOCK_WIDTH 0x912B #define GL_PACK_COMPRESSED_BLOCK_HEIGHT 0x912C #define GL_PACK_COMPRESSED_BLOCK_DEPTH 0x912D #define GL_PACK_COMPRESSED_BLOCK_SIZE 0x912E #endif /* GL_ARB_conservative_depth */ #ifndef GL_ARB_conservative_depth #define GL_ARB_conservative_depth 1 #define __GLEE_GL_ARB_conservative_depth 1 /* Constants */ #endif /* GL_ARB_internalformat_query */ #ifndef GL_ARB_internalformat_query #define GL_ARB_internalformat_query 1 #define __GLEE_GL_ARB_internalformat_query 1 /* Constants */ #define GL_NUM_SAMPLE_COUNTS 0x9380 #ifndef GLEE_H_DEFINED_glGetInternalformativ #define GLEE_H_DEFINED_glGetInternalformativ typedef void (APIENTRYP GLEEPFNGLGETINTERNALFORMATIVPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint * params); GLEE_EXTERN GLEEPFNGLGETINTERNALFORMATIVPROC GLeeFuncPtr_glGetInternalformativ; #define glGetInternalformativ GLeeFuncPtr_glGetInternalformativ #endif #endif /* GL_ARB_map_buffer_alignment */ #ifndef GL_ARB_map_buffer_alignment #define GL_ARB_map_buffer_alignment 1 #define __GLEE_GL_ARB_map_buffer_alignment 1 /* Constants */ #define GL_MIN_MAP_BUFFER_ALIGNMENT 0x90BC #endif /* GL_ARB_shader_atomic_counters */ #ifndef GL_ARB_shader_atomic_counters #define GL_ARB_shader_atomic_counters 1 #define __GLEE_GL_ARB_shader_atomic_counters 1 /* Constants */ #define GL_ATOMIC_COUNTER_BUFFER 0x92C0 #define GL_ATOMIC_COUNTER_BUFFER_BINDING 0x92C1 #define GL_ATOMIC_COUNTER_BUFFER_START 0x92C2 #define GL_ATOMIC_COUNTER_BUFFER_SIZE 0x92C3 #define GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE 0x92C4 #define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS 0x92C5 #define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES 0x92C6 #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER 0x92C7 #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER 0x92C8 #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER 0x92C9 #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER 0x92CA #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER 0x92CB #define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC #define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD #define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE #define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF #define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0 #define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1 #define GL_MAX_VERTEX_ATOMIC_COUNTERS 0x92D2 #define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3 #define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4 #define GL_MAX_GEOMETRY_ATOMIC_COUNTERS 0x92D5 #define GL_MAX_FRAGMENT_ATOMIC_COUNTERS 0x92D6 #define GL_MAX_COMBINED_ATOMIC_COUNTERS 0x92D7 #define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8 #define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC #define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9 #define GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX 0x92DA #define GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB #ifndef GLEE_H_DEFINED_glGetActiveAtomicCounterBufferiv #define GLEE_H_DEFINED_glGetActiveAtomicCounterBufferiv typedef void (APIENTRYP GLEEPFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC) (GLuint program, GLuint bufferIndex, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC GLeeFuncPtr_glGetActiveAtomicCounterBufferiv; #define glGetActiveAtomicCounterBufferiv GLeeFuncPtr_glGetActiveAtomicCounterBufferiv #endif #endif /* GL_ARB_shader_image_load_store */ #ifndef GL_ARB_shader_image_load_store #define GL_ARB_shader_image_load_store 1 #define __GLEE_GL_ARB_shader_image_load_store 1 /* Constants */ #define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001 #define GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002 #define GL_UNIFORM_BARRIER_BIT 0x00000004 #define GL_TEXTURE_FETCH_BARRIER_BIT 0x00000008 #define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020 #define GL_COMMAND_BARRIER_BIT 0x00000040 #define GL_PIXEL_BUFFER_BARRIER_BIT 0x00000080 #define GL_TEXTURE_UPDATE_BARRIER_BIT 0x00000100 #define GL_BUFFER_UPDATE_BARRIER_BIT 0x00000200 #define GL_FRAMEBUFFER_BARRIER_BIT 0x00000400 #define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800 #define GL_ATOMIC_COUNTER_BARRIER_BIT 0x00001000 #define GL_ALL_BARRIER_BITS 0xFFFFFFFF #define GL_MAX_IMAGE_UNITS 0x8F38 #define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS 0x8F39 #define GL_IMAGE_BINDING_NAME 0x8F3A #define GL_IMAGE_BINDING_LEVEL 0x8F3B #define GL_IMAGE_BINDING_LAYERED 0x8F3C #define GL_IMAGE_BINDING_LAYER 0x8F3D #define GL_IMAGE_BINDING_ACCESS 0x8F3E #define GL_IMAGE_1D 0x904C #define GL_IMAGE_2D 0x904D #define GL_IMAGE_3D 0x904E #define GL_IMAGE_2D_RECT 0x904F #define GL_IMAGE_CUBE 0x9050 #define GL_IMAGE_BUFFER 0x9051 #define GL_IMAGE_1D_ARRAY 0x9052 #define GL_IMAGE_2D_ARRAY 0x9053 #define GL_IMAGE_CUBE_MAP_ARRAY 0x9054 #define GL_IMAGE_2D_MULTISAMPLE 0x9055 #define GL_IMAGE_2D_MULTISAMPLE_ARRAY 0x9056 #define GL_INT_IMAGE_1D 0x9057 #define GL_INT_IMAGE_2D 0x9058 #define GL_INT_IMAGE_3D 0x9059 #define GL_INT_IMAGE_2D_RECT 0x905A #define GL_INT_IMAGE_CUBE 0x905B #define GL_INT_IMAGE_BUFFER 0x905C #define GL_INT_IMAGE_1D_ARRAY 0x905D #define GL_INT_IMAGE_2D_ARRAY 0x905E #define GL_INT_IMAGE_CUBE_MAP_ARRAY 0x905F #define GL_INT_IMAGE_2D_MULTISAMPLE 0x9060 #define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x9061 #define GL_UNSIGNED_INT_IMAGE_1D 0x9062 #define GL_UNSIGNED_INT_IMAGE_2D 0x9063 #define GL_UNSIGNED_INT_IMAGE_3D 0x9064 #define GL_UNSIGNED_INT_IMAGE_2D_RECT 0x9065 #define GL_UNSIGNED_INT_IMAGE_CUBE 0x9066 #define GL_UNSIGNED_INT_IMAGE_BUFFER 0x9067 #define GL_UNSIGNED_INT_IMAGE_1D_ARRAY 0x9068 #define GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069 #define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A #define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE 0x906B #define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x906C #define GL_MAX_IMAGE_SAMPLES 0x906D #define GL_IMAGE_BINDING_FORMAT 0x906E #define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7 #define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8 #define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9 #define GL_MAX_VERTEX_IMAGE_UNIFORMS 0x90CA #define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB #define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC #define GL_MAX_GEOMETRY_IMAGE_UNIFORMS 0x90CD #define GL_MAX_FRAGMENT_IMAGE_UNIFORMS 0x90CE #define GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF #ifndef GLEE_H_DEFINED_glBindImageTexture #define GLEE_H_DEFINED_glBindImageTexture typedef void (APIENTRYP GLEEPFNGLBINDIMAGETEXTUREPROC) (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); GLEE_EXTERN GLEEPFNGLBINDIMAGETEXTUREPROC GLeeFuncPtr_glBindImageTexture; #define glBindImageTexture GLeeFuncPtr_glBindImageTexture #endif #ifndef GLEE_H_DEFINED_glMemoryBarrier #define GLEE_H_DEFINED_glMemoryBarrier typedef void (APIENTRYP GLEEPFNGLMEMORYBARRIERPROC) (GLbitfield barriers); GLEE_EXTERN GLEEPFNGLMEMORYBARRIERPROC GLeeFuncPtr_glMemoryBarrier; #define glMemoryBarrier GLeeFuncPtr_glMemoryBarrier #endif #endif /* GL_ARB_shading_language_packing */ #ifndef GL_ARB_shading_language_packing #define GL_ARB_shading_language_packing 1 #define __GLEE_GL_ARB_shading_language_packing 1 /* Constants */ #endif /* GL_ARB_texture_storage */ #ifndef GL_ARB_texture_storage #define GL_ARB_texture_storage 1 #define __GLEE_GL_ARB_texture_storage 1 /* Constants */ #define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F #ifndef GLEE_H_DEFINED_glTexStorage1D #define GLEE_H_DEFINED_glTexStorage1D typedef void (APIENTRYP GLEEPFNGLTEXSTORAGE1DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); GLEE_EXTERN GLEEPFNGLTEXSTORAGE1DPROC GLeeFuncPtr_glTexStorage1D; #define glTexStorage1D GLeeFuncPtr_glTexStorage1D #endif #ifndef GLEE_H_DEFINED_glTexStorage2D #define GLEE_H_DEFINED_glTexStorage2D typedef void (APIENTRYP GLEEPFNGLTEXSTORAGE2DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLTEXSTORAGE2DPROC GLeeFuncPtr_glTexStorage2D; #define glTexStorage2D GLeeFuncPtr_glTexStorage2D #endif #ifndef GLEE_H_DEFINED_glTexStorage3D #define GLEE_H_DEFINED_glTexStorage3D typedef void (APIENTRYP GLEEPFNGLTEXSTORAGE3DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); GLEE_EXTERN GLEEPFNGLTEXSTORAGE3DPROC GLeeFuncPtr_glTexStorage3D; #define glTexStorage3D GLeeFuncPtr_glTexStorage3D #endif #ifndef GLEE_H_DEFINED_glTextureStorage1DEXT #define GLEE_H_DEFINED_glTextureStorage1DEXT typedef void (APIENTRYP GLEEPFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); GLEE_EXTERN GLEEPFNGLTEXTURESTORAGE1DEXTPROC GLeeFuncPtr_glTextureStorage1DEXT; #define glTextureStorage1DEXT GLeeFuncPtr_glTextureStorage1DEXT #endif #ifndef GLEE_H_DEFINED_glTextureStorage2DEXT #define GLEE_H_DEFINED_glTextureStorage2DEXT typedef void (APIENTRYP GLEEPFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLTEXTURESTORAGE2DEXTPROC GLeeFuncPtr_glTextureStorage2DEXT; #define glTextureStorage2DEXT GLeeFuncPtr_glTextureStorage2DEXT #endif #ifndef GLEE_H_DEFINED_glTextureStorage3DEXT #define GLEE_H_DEFINED_glTextureStorage3DEXT typedef void (APIENTRYP GLEEPFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); GLEE_EXTERN GLEEPFNGLTEXTURESTORAGE3DEXTPROC GLeeFuncPtr_glTextureStorage3DEXT; #define glTextureStorage3DEXT GLeeFuncPtr_glTextureStorage3DEXT #endif #endif /* GL_KHR_texture_compression_astc_ldr */ #ifndef GL_KHR_texture_compression_astc_ldr #define GL_KHR_texture_compression_astc_ldr 1 #define __GLEE_GL_KHR_texture_compression_astc_ldr 1 /* Constants */ #define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0 #define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1 #define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2 #define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3 #define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4 #define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5 #define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6 #define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7 #define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8 #define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9 #define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA #define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB #define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC #define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9 #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC #define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD #endif /* GL_KHR_debug */ #ifndef GL_KHR_debug #define GL_KHR_debug 1 #define __GLEE_GL_KHR_debug 1 /* Constants */ #define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 #define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243 #define GL_DEBUG_CALLBACK_FUNCTION 0x8244 #define GL_DEBUG_CALLBACK_USER_PARAM 0x8245 #define GL_DEBUG_SOURCE_API 0x8246 #define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247 #define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248 #define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249 #define GL_DEBUG_SOURCE_APPLICATION 0x824A #define GL_DEBUG_SOURCE_OTHER 0x824B #define GL_DEBUG_TYPE_ERROR 0x824C #define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D #define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E #define GL_DEBUG_TYPE_PORTABILITY 0x824F #define GL_DEBUG_TYPE_PERFORMANCE 0x8250 #define GL_DEBUG_TYPE_OTHER 0x8251 #define GL_DEBUG_TYPE_MARKER 0x8268 #define GL_DEBUG_TYPE_PUSH_GROUP 0x8269 #define GL_DEBUG_TYPE_POP_GROUP 0x826A #define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B #define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C #define GL_DEBUG_GROUP_STACK_DEPTH 0x826D #define GL_BUFFER 0x82E0 #define GL_SHADER 0x82E1 #define GL_PROGRAM 0x82E2 #define GL_QUERY 0x82E3 #define GL_PROGRAM_PIPELINE 0x82E4 #define GL_SAMPLER 0x82E6 #define GL_DISPLAY_LIST 0x82E7 #define GL_MAX_LABEL_LENGTH 0x82E8 #define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143 #define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144 #define GL_DEBUG_LOGGED_MESSAGES 0x9145 #define GL_DEBUG_SEVERITY_HIGH 0x9146 #define GL_DEBUG_SEVERITY_MEDIUM 0x9147 #define GL_DEBUG_SEVERITY_LOW 0x9148 #define GL_DEBUG_OUTPUT 0x92E0 #define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 #ifndef GLEE_H_DEFINED_glDebugMessageControl #define GLEE_H_DEFINED_glDebugMessageControl typedef void (APIENTRYP GLEEPFNGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled); GLEE_EXTERN GLEEPFNGLDEBUGMESSAGECONTROLPROC GLeeFuncPtr_glDebugMessageControl; #define glDebugMessageControl GLeeFuncPtr_glDebugMessageControl #endif #ifndef GLEE_H_DEFINED_glDebugMessageInsert #define GLEE_H_DEFINED_glDebugMessageInsert typedef void (APIENTRYP GLEEPFNGLDEBUGMESSAGEINSERTPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * buf); GLEE_EXTERN GLEEPFNGLDEBUGMESSAGEINSERTPROC GLeeFuncPtr_glDebugMessageInsert; #define glDebugMessageInsert GLeeFuncPtr_glDebugMessageInsert #endif #ifndef GLEE_H_DEFINED_glDebugMessageCallback #define GLEE_H_DEFINED_glDebugMessageCallback typedef void (APIENTRYP GLEEPFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const void * userParam); GLEE_EXTERN GLEEPFNGLDEBUGMESSAGECALLBACKPROC GLeeFuncPtr_glDebugMessageCallback; #define glDebugMessageCallback GLeeFuncPtr_glDebugMessageCallback #endif #ifndef GLEE_H_DEFINED_glGetDebugMessageLog #define GLEE_H_DEFINED_glGetDebugMessageLog typedef GLuint (APIENTRYP GLEEPFNGLGETDEBUGMESSAGELOGPROC) (GLuint count, GLsizei bufsize, GLenum * sources, GLenum * types, GLuint * ids, GLenum * severities, GLsizei * lengths, GLchar * messageLog); GLEE_EXTERN GLEEPFNGLGETDEBUGMESSAGELOGPROC GLeeFuncPtr_glGetDebugMessageLog; #define glGetDebugMessageLog GLeeFuncPtr_glGetDebugMessageLog #endif #ifndef GLEE_H_DEFINED_glPushDebugGroup #define GLEE_H_DEFINED_glPushDebugGroup typedef void (APIENTRYP GLEEPFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, GLsizei length, const GLchar * message); GLEE_EXTERN GLEEPFNGLPUSHDEBUGGROUPPROC GLeeFuncPtr_glPushDebugGroup; #define glPushDebugGroup GLeeFuncPtr_glPushDebugGroup #endif #ifndef GLEE_H_DEFINED_glPopDebugGroup #define GLEE_H_DEFINED_glPopDebugGroup typedef void (APIENTRYP GLEEPFNGLPOPDEBUGGROUPPROC) (); GLEE_EXTERN GLEEPFNGLPOPDEBUGGROUPPROC GLeeFuncPtr_glPopDebugGroup; #define glPopDebugGroup GLeeFuncPtr_glPopDebugGroup #endif #ifndef GLEE_H_DEFINED_glObjectLabel #define GLEE_H_DEFINED_glObjectLabel typedef void (APIENTRYP GLEEPFNGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar * label); GLEE_EXTERN GLEEPFNGLOBJECTLABELPROC GLeeFuncPtr_glObjectLabel; #define glObjectLabel GLeeFuncPtr_glObjectLabel #endif #ifndef GLEE_H_DEFINED_glGetObjectLabel #define GLEE_H_DEFINED_glGetObjectLabel typedef void (APIENTRYP GLEEPFNGLGETOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei * length, GLchar * label); GLEE_EXTERN GLEEPFNGLGETOBJECTLABELPROC GLeeFuncPtr_glGetObjectLabel; #define glGetObjectLabel GLeeFuncPtr_glGetObjectLabel #endif #ifndef GLEE_H_DEFINED_glObjectPtrLabel #define GLEE_H_DEFINED_glObjectPtrLabel typedef void (APIENTRYP GLEEPFNGLOBJECTPTRLABELPROC) (const void * ptr, GLsizei length, const GLchar * label); GLEE_EXTERN GLEEPFNGLOBJECTPTRLABELPROC GLeeFuncPtr_glObjectPtrLabel; #define glObjectPtrLabel GLeeFuncPtr_glObjectPtrLabel #endif #ifndef GLEE_H_DEFINED_glGetObjectPtrLabel #define GLEE_H_DEFINED_glGetObjectPtrLabel typedef void (APIENTRYP GLEEPFNGLGETOBJECTPTRLABELPROC) (const void * ptr, GLsizei bufSize, GLsizei * length, GLchar * label); GLEE_EXTERN GLEEPFNGLGETOBJECTPTRLABELPROC GLeeFuncPtr_glGetObjectPtrLabel; #define glGetObjectPtrLabel GLeeFuncPtr_glGetObjectPtrLabel #endif #endif /* GL_ARB_arrays_of_arrays */ #ifndef GL_ARB_arrays_of_arrays #define GL_ARB_arrays_of_arrays 1 #define __GLEE_GL_ARB_arrays_of_arrays 1 /* Constants */ #endif /* GL_ARB_clear_buffer_object */ #ifndef GL_ARB_clear_buffer_object #define GL_ARB_clear_buffer_object 1 #define __GLEE_GL_ARB_clear_buffer_object 1 /* Constants */ #ifndef GLEE_H_DEFINED_glClearBufferData #define GLEE_H_DEFINED_glClearBufferData typedef void (APIENTRYP GLEEPFNGLCLEARBUFFERDATAPROC) (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void * data); GLEE_EXTERN GLEEPFNGLCLEARBUFFERDATAPROC GLeeFuncPtr_glClearBufferData; #define glClearBufferData GLeeFuncPtr_glClearBufferData #endif #ifndef GLEE_H_DEFINED_glClearBufferSubData #define GLEE_H_DEFINED_glClearBufferSubData typedef void (APIENTRYP GLEEPFNGLCLEARBUFFERSUBDATAPROC) (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void * data); GLEE_EXTERN GLEEPFNGLCLEARBUFFERSUBDATAPROC GLeeFuncPtr_glClearBufferSubData; #define glClearBufferSubData GLeeFuncPtr_glClearBufferSubData #endif #ifndef GLEE_H_DEFINED_glClearNamedBufferDataEXT #define GLEE_H_DEFINED_glClearNamedBufferDataEXT typedef void (APIENTRYP GLEEPFNGLCLEARNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void * data); GLEE_EXTERN GLEEPFNGLCLEARNAMEDBUFFERDATAEXTPROC GLeeFuncPtr_glClearNamedBufferDataEXT; #define glClearNamedBufferDataEXT GLeeFuncPtr_glClearNamedBufferDataEXT #endif #ifndef GLEE_H_DEFINED_glClearNamedBufferSubDataEXT #define GLEE_H_DEFINED_glClearNamedBufferSubDataEXT typedef void (APIENTRYP GLEEPFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, GLsizeiptr offset, GLsizeiptr size, const void * data); GLEE_EXTERN GLEEPFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC GLeeFuncPtr_glClearNamedBufferSubDataEXT; #define glClearNamedBufferSubDataEXT GLeeFuncPtr_glClearNamedBufferSubDataEXT #endif #endif /* GL_ARB_compute_shader */ #ifndef GL_ARB_compute_shader #define GL_ARB_compute_shader 1 #define __GLEE_GL_ARB_compute_shader 1 /* Constants */ #define GL_COMPUTE_SHADER 0x91B9 #define GL_MAX_COMPUTE_UNIFORM_BLOCKS 0x91BB #define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS 0x91BC #define GL_MAX_COMPUTE_IMAGE_UNIFORMS 0x91BD #define GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 0x8262 #define GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263 #define GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 0x8264 #define GL_MAX_COMPUTE_ATOMIC_COUNTERS 0x8265 #define GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS 0x8266 #define GL_MAX_COMPUTE_LOCAL_INVOCATIONS 0x90EB #define GL_MAX_COMPUTE_WORK_GROUP_COUNT 0x91BE #define GL_MAX_COMPUTE_WORK_GROUP_SIZE 0x91BF #define GL_COMPUTE_LOCAL_WORK_SIZE 0x8267 #define GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER 0x90EC #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER 0x90ED #define GL_DISPATCH_INDIRECT_BUFFER 0x90EE #define GL_DISPATCH_INDIRECT_BUFFER_BINDING 0x90EF #define GL_COMPUTE_SHADER_BIT 0x00000020 #ifndef GLEE_H_DEFINED_glDispatchCompute #define GLEE_H_DEFINED_glDispatchCompute typedef void (APIENTRYP GLEEPFNGLDISPATCHCOMPUTEPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); GLEE_EXTERN GLEEPFNGLDISPATCHCOMPUTEPROC GLeeFuncPtr_glDispatchCompute; #define glDispatchCompute GLeeFuncPtr_glDispatchCompute #endif #ifndef GLEE_H_DEFINED_glDispatchComputeIndirect #define GLEE_H_DEFINED_glDispatchComputeIndirect typedef void (APIENTRYP GLEEPFNGLDISPATCHCOMPUTEINDIRECTPROC) (GLintptr indirect); GLEE_EXTERN GLEEPFNGLDISPATCHCOMPUTEINDIRECTPROC GLeeFuncPtr_glDispatchComputeIndirect; #define glDispatchComputeIndirect GLeeFuncPtr_glDispatchComputeIndirect #endif #endif /* GL_ARB_copy_image */ #ifndef GL_ARB_copy_image #define GL_ARB_copy_image 1 #define __GLEE_GL_ARB_copy_image 1 /* Constants */ #ifndef GLEE_H_DEFINED_glCopyImageSubData #define GLEE_H_DEFINED_glCopyImageSubData typedef void (APIENTRYP GLEEPFNGLCOPYIMAGESUBDATAPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); GLEE_EXTERN GLEEPFNGLCOPYIMAGESUBDATAPROC GLeeFuncPtr_glCopyImageSubData; #define glCopyImageSubData GLeeFuncPtr_glCopyImageSubData #endif #endif /* GL_ARB_texture_view */ #ifndef GL_ARB_texture_view #define GL_ARB_texture_view 1 #define __GLEE_GL_ARB_texture_view 1 /* Constants */ #define GL_TEXTURE_VIEW_MIN_LEVEL 0x82DB #define GL_TEXTURE_VIEW_NUM_LEVELS 0x82DC #define GL_TEXTURE_VIEW_MIN_LAYER 0x82DD #define GL_TEXTURE_VIEW_NUM_LAYERS 0x82DE #define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF #ifndef GLEE_H_DEFINED_glTextureView #define GLEE_H_DEFINED_glTextureView typedef void (APIENTRYP GLEEPFNGLTEXTUREVIEWPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); GLEE_EXTERN GLEEPFNGLTEXTUREVIEWPROC GLeeFuncPtr_glTextureView; #define glTextureView GLeeFuncPtr_glTextureView #endif #endif /* GL_ARB_vertex_attrib_binding */ #ifndef GL_ARB_vertex_attrib_binding #define GL_ARB_vertex_attrib_binding 1 #define __GLEE_GL_ARB_vertex_attrib_binding 1 /* Constants */ #define GL_VERTEX_ATTRIB_BINDING 0x82D4 #define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5 #define GL_VERTEX_BINDING_DIVISOR 0x82D6 #define GL_VERTEX_BINDING_OFFSET 0x82D7 #define GL_VERTEX_BINDING_STRIDE 0x82D8 #define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9 #define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA #ifndef GLEE_H_DEFINED_glBindVertexBuffer #define GLEE_H_DEFINED_glBindVertexBuffer typedef void (APIENTRYP GLEEPFNGLBINDVERTEXBUFFERPROC) (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); GLEE_EXTERN GLEEPFNGLBINDVERTEXBUFFERPROC GLeeFuncPtr_glBindVertexBuffer; #define glBindVertexBuffer GLeeFuncPtr_glBindVertexBuffer #endif #ifndef GLEE_H_DEFINED_glVertexAttribFormat #define GLEE_H_DEFINED_glVertexAttribFormat typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBFORMATPROC GLeeFuncPtr_glVertexAttribFormat; #define glVertexAttribFormat GLeeFuncPtr_glVertexAttribFormat #endif #ifndef GLEE_H_DEFINED_glVertexAttribIFormat #define GLEE_H_DEFINED_glVertexAttribIFormat typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBIFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBIFORMATPROC GLeeFuncPtr_glVertexAttribIFormat; #define glVertexAttribIFormat GLeeFuncPtr_glVertexAttribIFormat #endif #ifndef GLEE_H_DEFINED_glVertexAttribLFormat #define GLEE_H_DEFINED_glVertexAttribLFormat typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBLFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBLFORMATPROC GLeeFuncPtr_glVertexAttribLFormat; #define glVertexAttribLFormat GLeeFuncPtr_glVertexAttribLFormat #endif #ifndef GLEE_H_DEFINED_glVertexAttribBinding #define GLEE_H_DEFINED_glVertexAttribBinding typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBBINDINGPROC) (GLuint attribindex, GLuint bindingindex); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBBINDINGPROC GLeeFuncPtr_glVertexAttribBinding; #define glVertexAttribBinding GLeeFuncPtr_glVertexAttribBinding #endif #ifndef GLEE_H_DEFINED_glVertexBindingDivisor #define GLEE_H_DEFINED_glVertexBindingDivisor typedef void (APIENTRYP GLEEPFNGLVERTEXBINDINGDIVISORPROC) (GLuint bindingindex, GLuint divisor); GLEE_EXTERN GLEEPFNGLVERTEXBINDINGDIVISORPROC GLeeFuncPtr_glVertexBindingDivisor; #define glVertexBindingDivisor GLeeFuncPtr_glVertexBindingDivisor #endif #ifndef GLEE_H_DEFINED_glVertexArrayBindVertexBufferEXT #define GLEE_H_DEFINED_glVertexArrayBindVertexBufferEXT typedef void (APIENTRYP GLEEPFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); GLEE_EXTERN GLEEPFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC GLeeFuncPtr_glVertexArrayBindVertexBufferEXT; #define glVertexArrayBindVertexBufferEXT GLeeFuncPtr_glVertexArrayBindVertexBufferEXT #endif #ifndef GLEE_H_DEFINED_glVertexArrayVertexAttribFormatEXT #define GLEE_H_DEFINED_glVertexArrayVertexAttribFormatEXT typedef void (APIENTRYP GLEEPFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); GLEE_EXTERN GLEEPFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC GLeeFuncPtr_glVertexArrayVertexAttribFormatEXT; #define glVertexArrayVertexAttribFormatEXT GLeeFuncPtr_glVertexArrayVertexAttribFormatEXT #endif #ifndef GLEE_H_DEFINED_glVertexArrayVertexAttribIFormatEXT #define GLEE_H_DEFINED_glVertexArrayVertexAttribIFormatEXT typedef void (APIENTRYP GLEEPFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); GLEE_EXTERN GLEEPFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC GLeeFuncPtr_glVertexArrayVertexAttribIFormatEXT; #define glVertexArrayVertexAttribIFormatEXT GLeeFuncPtr_glVertexArrayVertexAttribIFormatEXT #endif #ifndef GLEE_H_DEFINED_glVertexArrayVertexAttribLFormatEXT #define GLEE_H_DEFINED_glVertexArrayVertexAttribLFormatEXT typedef void (APIENTRYP GLEEPFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); GLEE_EXTERN GLEEPFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC GLeeFuncPtr_glVertexArrayVertexAttribLFormatEXT; #define glVertexArrayVertexAttribLFormatEXT GLeeFuncPtr_glVertexArrayVertexAttribLFormatEXT #endif #ifndef GLEE_H_DEFINED_glVertexArrayVertexAttribBindingEXT #define GLEE_H_DEFINED_glVertexArrayVertexAttribBindingEXT typedef void (APIENTRYP GLEEPFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC) (GLuint vaobj, GLuint attribindex, GLuint bindingindex); GLEE_EXTERN GLEEPFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC GLeeFuncPtr_glVertexArrayVertexAttribBindingEXT; #define glVertexArrayVertexAttribBindingEXT GLeeFuncPtr_glVertexArrayVertexAttribBindingEXT #endif #ifndef GLEE_H_DEFINED_glVertexArrayVertexBindingDivisorEXT #define GLEE_H_DEFINED_glVertexArrayVertexBindingDivisorEXT typedef void (APIENTRYP GLEEPFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint divisor); GLEE_EXTERN GLEEPFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC GLeeFuncPtr_glVertexArrayVertexBindingDivisorEXT; #define glVertexArrayVertexBindingDivisorEXT GLeeFuncPtr_glVertexArrayVertexBindingDivisorEXT #endif #endif /* GL_ARB_robustness_isolation */ #ifndef GL_ARB_robustness_isolation #define GL_ARB_robustness_isolation 1 #define __GLEE_GL_ARB_robustness_isolation 1 /* Constants */ #endif /* GL_ARB_ES3_compatibility */ #ifndef GL_ARB_ES3_compatibility #define GL_ARB_ES3_compatibility 1 #define __GLEE_GL_ARB_ES3_compatibility 1 /* Constants */ #define GL_COMPRESSED_RGB8_ETC2 0x9274 #define GL_COMPRESSED_SRGB8_ETC2 0x9275 #define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276 #define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277 #define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278 #define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279 #define GL_COMPRESSED_R11_EAC 0x9270 #define GL_COMPRESSED_SIGNED_R11_EAC 0x9271 #define GL_COMPRESSED_RG11_EAC 0x9272 #define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273 #define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69 #define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A #define GL_MAX_ELEMENT_INDEX 0x8D6B #endif /* GL_ARB_explicit_uniform_location */ #ifndef GL_ARB_explicit_uniform_location #define GL_ARB_explicit_uniform_location 1 #define __GLEE_GL_ARB_explicit_uniform_location 1 /* Constants */ #define GL_MAX_UNIFORM_LOCATIONS 0x826E #endif /* GL_ARB_fragment_layer_viewport */ #ifndef GL_ARB_fragment_layer_viewport #define GL_ARB_fragment_layer_viewport 1 #define __GLEE_GL_ARB_fragment_layer_viewport 1 /* Constants */ #endif /* GL_ARB_framebuffer_no_attachments */ #ifndef GL_ARB_framebuffer_no_attachments #define GL_ARB_framebuffer_no_attachments 1 #define __GLEE_GL_ARB_framebuffer_no_attachments 1 /* Constants */ #define GL_FRAMEBUFFER_DEFAULT_WIDTH 0x9310 #define GL_FRAMEBUFFER_DEFAULT_HEIGHT 0x9311 #define GL_FRAMEBUFFER_DEFAULT_LAYERS 0x9312 #define GL_FRAMEBUFFER_DEFAULT_SAMPLES 0x9313 #define GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS 0x9314 #define GL_MAX_FRAMEBUFFER_WIDTH 0x9315 #define GL_MAX_FRAMEBUFFER_HEIGHT 0x9316 #define GL_MAX_FRAMEBUFFER_LAYERS 0x9317 #define GL_MAX_FRAMEBUFFER_SAMPLES 0x9318 #ifndef GLEE_H_DEFINED_glFramebufferParameteri #define GLEE_H_DEFINED_glFramebufferParameteri typedef void (APIENTRYP GLEEPFNGLFRAMEBUFFERPARAMETERIPROC) (GLenum target, GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERPARAMETERIPROC GLeeFuncPtr_glFramebufferParameteri; #define glFramebufferParameteri GLeeFuncPtr_glFramebufferParameteri #endif #ifndef GLEE_H_DEFINED_glGetFramebufferParameteriv #define GLEE_H_DEFINED_glGetFramebufferParameteriv typedef void (APIENTRYP GLEEPFNGLGETFRAMEBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETFRAMEBUFFERPARAMETERIVPROC GLeeFuncPtr_glGetFramebufferParameteriv; #define glGetFramebufferParameteriv GLeeFuncPtr_glGetFramebufferParameteriv #endif #ifndef GLEE_H_DEFINED_glNamedFramebufferParameteriEXT #define GLEE_H_DEFINED_glNamedFramebufferParameteriEXT typedef void (APIENTRYP GLEEPFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC) (GLuint framebuffer, GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC GLeeFuncPtr_glNamedFramebufferParameteriEXT; #define glNamedFramebufferParameteriEXT GLeeFuncPtr_glNamedFramebufferParameteriEXT #endif #ifndef GLEE_H_DEFINED_glGetNamedFramebufferParameterivEXT #define GLEE_H_DEFINED_glGetNamedFramebufferParameterivEXT typedef void (APIENTRYP GLEEPFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC GLeeFuncPtr_glGetNamedFramebufferParameterivEXT; #define glGetNamedFramebufferParameterivEXT GLeeFuncPtr_glGetNamedFramebufferParameterivEXT #endif #endif /* GL_ARB_internalformat_query2 */ #ifndef GL_ARB_internalformat_query2 #define GL_ARB_internalformat_query2 1 #define __GLEE_GL_ARB_internalformat_query2 1 /* Constants */ #define GL_INTERNALFORMAT_SUPPORTED 0x826F #define GL_INTERNALFORMAT_PREFERRED 0x8270 #define GL_INTERNALFORMAT_RED_SIZE 0x8271 #define GL_INTERNALFORMAT_GREEN_SIZE 0x8272 #define GL_INTERNALFORMAT_BLUE_SIZE 0x8273 #define GL_INTERNALFORMAT_ALPHA_SIZE 0x8274 #define GL_INTERNALFORMAT_DEPTH_SIZE 0x8275 #define GL_INTERNALFORMAT_STENCIL_SIZE 0x8276 #define GL_INTERNALFORMAT_SHARED_SIZE 0x8277 #define GL_INTERNALFORMAT_RED_TYPE 0x8278 #define GL_INTERNALFORMAT_GREEN_TYPE 0x8279 #define GL_INTERNALFORMAT_BLUE_TYPE 0x827A #define GL_INTERNALFORMAT_ALPHA_TYPE 0x827B #define GL_INTERNALFORMAT_DEPTH_TYPE 0x827C #define GL_INTERNALFORMAT_STENCIL_TYPE 0x827D #define GL_MAX_WIDTH 0x827E #define GL_MAX_HEIGHT 0x827F #define GL_MAX_DEPTH 0x8280 #define GL_MAX_LAYERS 0x8281 #define GL_MAX_COMBINED_DIMENSIONS 0x8282 #define GL_COLOR_COMPONENTS 0x8283 #define GL_DEPTH_COMPONENTS 0x8284 #define GL_STENCIL_COMPONENTS 0x8285 #define GL_COLOR_RENDERABLE 0x8286 #define GL_DEPTH_RENDERABLE 0x8287 #define GL_STENCIL_RENDERABLE 0x8288 #define GL_FRAMEBUFFER_RENDERABLE 0x8289 #define GL_FRAMEBUFFER_RENDERABLE_LAYERED 0x828A #define GL_FRAMEBUFFER_BLEND 0x828B #define GL_READ_PIXELS 0x828C #define GL_READ_PIXELS_FORMAT 0x828D #define GL_READ_PIXELS_TYPE 0x828E #define GL_TEXTURE_IMAGE_FORMAT 0x828F #define GL_TEXTURE_IMAGE_TYPE 0x8290 #define GL_GET_TEXTURE_IMAGE_FORMAT 0x8291 #define GL_GET_TEXTURE_IMAGE_TYPE 0x8292 #define GL_MIPMAP 0x8293 #define GL_MANUAL_GENERATE_MIPMAP 0x8294 #define GL_AUTO_GENERATE_MIPMAP 0x8295 #define GL_COLOR_ENCODING 0x8296 #define GL_SRGB_READ 0x8297 #define GL_SRGB_WRITE 0x8298 #define GL_SRGB_DECODE_ARB 0x8299 #define GL_FILTER 0x829A #define GL_VERTEX_TEXTURE 0x829B #define GL_TESS_CONTROL_TEXTURE 0x829C #define GL_TESS_EVALUATION_TEXTURE 0x829D #define GL_GEOMETRY_TEXTURE 0x829E #define GL_FRAGMENT_TEXTURE 0x829F #define GL_COMPUTE_TEXTURE 0x82A0 #define GL_TEXTURE_SHADOW 0x82A1 #define GL_TEXTURE_GATHER 0x82A2 #define GL_TEXTURE_GATHER_SHADOW 0x82A3 #define GL_SHADER_IMAGE_LOAD 0x82A4 #define GL_SHADER_IMAGE_STORE 0x82A5 #define GL_SHADER_IMAGE_ATOMIC 0x82A6 #define GL_IMAGE_TEXEL_SIZE 0x82A7 #define GL_IMAGE_COMPATIBILITY_CLASS 0x82A8 #define GL_IMAGE_PIXEL_FORMAT 0x82A9 #define GL_IMAGE_PIXEL_TYPE 0x82AA #define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC #define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD #define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE #define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF #define GL_TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1 #define GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2 #define GL_TEXTURE_COMPRESSED_BLOCK_SIZE 0x82B3 #define GL_CLEAR_BUFFER 0x82B4 #define GL_TEXTURE_VIEW 0x82B5 #define GL_VIEW_COMPATIBILITY_CLASS 0x82B6 #define GL_FULL_SUPPORT 0x82B7 #define GL_CAVEAT_SUPPORT 0x82B8 #define GL_IMAGE_CLASS_4_X_32 0x82B9 #define GL_IMAGE_CLASS_2_X_32 0x82BA #define GL_IMAGE_CLASS_1_X_32 0x82BB #define GL_IMAGE_CLASS_4_X_16 0x82BC #define GL_IMAGE_CLASS_2_X_16 0x82BD #define GL_IMAGE_CLASS_1_X_16 0x82BE #define GL_IMAGE_CLASS_4_X_8 0x82BF #define GL_IMAGE_CLASS_2_X_8 0x82C0 #define GL_IMAGE_CLASS_1_X_8 0x82C1 #define GL_IMAGE_CLASS_11_11_10 0x82C2 #define GL_IMAGE_CLASS_10_10_10_2 0x82C3 #define GL_VIEW_CLASS_128_BITS 0x82C4 #define GL_VIEW_CLASS_96_BITS 0x82C5 #define GL_VIEW_CLASS_64_BITS 0x82C6 #define GL_VIEW_CLASS_48_BITS 0x82C7 #define GL_VIEW_CLASS_32_BITS 0x82C8 #define GL_VIEW_CLASS_24_BITS 0x82C9 #define GL_VIEW_CLASS_16_BITS 0x82CA #define GL_VIEW_CLASS_8_BITS 0x82CB #define GL_VIEW_CLASS_S3TC_DXT1_RGB 0x82CC #define GL_VIEW_CLASS_S3TC_DXT1_RGBA 0x82CD #define GL_VIEW_CLASS_S3TC_DXT3_RGBA 0x82CE #define GL_VIEW_CLASS_S3TC_DXT5_RGBA 0x82CF #define GL_VIEW_CLASS_RGTC1_RED 0x82D0 #define GL_VIEW_CLASS_RGTC2_RG 0x82D1 #define GL_VIEW_CLASS_BPTC_UNORM 0x82D2 #define GL_VIEW_CLASS_BPTC_FLOAT 0x82D3 #ifndef GLEE_H_DEFINED_glGetInternalformati64v #define GLEE_H_DEFINED_glGetInternalformati64v typedef void (APIENTRYP GLEEPFNGLGETINTERNALFORMATI64VPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 * params); GLEE_EXTERN GLEEPFNGLGETINTERNALFORMATI64VPROC GLeeFuncPtr_glGetInternalformati64v; #define glGetInternalformati64v GLeeFuncPtr_glGetInternalformati64v #endif #endif /* GL_ARB_invalidate_subdata */ #ifndef GL_ARB_invalidate_subdata #define GL_ARB_invalidate_subdata 1 #define __GLEE_GL_ARB_invalidate_subdata 1 /* Constants */ #ifndef GLEE_H_DEFINED_glInvalidateTexSubImage #define GLEE_H_DEFINED_glInvalidateTexSubImage typedef void (APIENTRYP GLEEPFNGLINVALIDATETEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); GLEE_EXTERN GLEEPFNGLINVALIDATETEXSUBIMAGEPROC GLeeFuncPtr_glInvalidateTexSubImage; #define glInvalidateTexSubImage GLeeFuncPtr_glInvalidateTexSubImage #endif #ifndef GLEE_H_DEFINED_glInvalidateTexImage #define GLEE_H_DEFINED_glInvalidateTexImage typedef void (APIENTRYP GLEEPFNGLINVALIDATETEXIMAGEPROC) (GLuint texture, GLint level); GLEE_EXTERN GLEEPFNGLINVALIDATETEXIMAGEPROC GLeeFuncPtr_glInvalidateTexImage; #define glInvalidateTexImage GLeeFuncPtr_glInvalidateTexImage #endif #ifndef GLEE_H_DEFINED_glInvalidateBufferSubData #define GLEE_H_DEFINED_glInvalidateBufferSubData typedef void (APIENTRYP GLEEPFNGLINVALIDATEBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); GLEE_EXTERN GLEEPFNGLINVALIDATEBUFFERSUBDATAPROC GLeeFuncPtr_glInvalidateBufferSubData; #define glInvalidateBufferSubData GLeeFuncPtr_glInvalidateBufferSubData #endif #ifndef GLEE_H_DEFINED_glInvalidateBufferData #define GLEE_H_DEFINED_glInvalidateBufferData typedef void (APIENTRYP GLEEPFNGLINVALIDATEBUFFERDATAPROC) (GLuint buffer); GLEE_EXTERN GLEEPFNGLINVALIDATEBUFFERDATAPROC GLeeFuncPtr_glInvalidateBufferData; #define glInvalidateBufferData GLeeFuncPtr_glInvalidateBufferData #endif #ifndef GLEE_H_DEFINED_glInvalidateFramebuffer #define GLEE_H_DEFINED_glInvalidateFramebuffer typedef void (APIENTRYP GLEEPFNGLINVALIDATEFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum * attachments); GLEE_EXTERN GLEEPFNGLINVALIDATEFRAMEBUFFERPROC GLeeFuncPtr_glInvalidateFramebuffer; #define glInvalidateFramebuffer GLeeFuncPtr_glInvalidateFramebuffer #endif #ifndef GLEE_H_DEFINED_glInvalidateSubFramebuffer #define GLEE_H_DEFINED_glInvalidateSubFramebuffer typedef void (APIENTRYP GLEEPFNGLINVALIDATESUBFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum * attachments, GLint x, GLint y, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLINVALIDATESUBFRAMEBUFFERPROC GLeeFuncPtr_glInvalidateSubFramebuffer; #define glInvalidateSubFramebuffer GLeeFuncPtr_glInvalidateSubFramebuffer #endif #endif /* GL_ARB_multi_draw_indirect */ #ifndef GL_ARB_multi_draw_indirect #define GL_ARB_multi_draw_indirect 1 #define __GLEE_GL_ARB_multi_draw_indirect 1 /* Constants */ #ifndef GLEE_H_DEFINED_glMultiDrawArraysIndirect #define GLEE_H_DEFINED_glMultiDrawArraysIndirect typedef void (APIENTRYP GLEEPFNGLMULTIDRAWARRAYSINDIRECTPROC) (GLenum mode, const void * indirect, GLsizei drawcount, GLsizei stride); GLEE_EXTERN GLEEPFNGLMULTIDRAWARRAYSINDIRECTPROC GLeeFuncPtr_glMultiDrawArraysIndirect; #define glMultiDrawArraysIndirect GLeeFuncPtr_glMultiDrawArraysIndirect #endif #ifndef GLEE_H_DEFINED_glMultiDrawElementsIndirect #define GLEE_H_DEFINED_glMultiDrawElementsIndirect typedef void (APIENTRYP GLEEPFNGLMULTIDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void * indirect, GLsizei drawcount, GLsizei stride); GLEE_EXTERN GLEEPFNGLMULTIDRAWELEMENTSINDIRECTPROC GLeeFuncPtr_glMultiDrawElementsIndirect; #define glMultiDrawElementsIndirect GLeeFuncPtr_glMultiDrawElementsIndirect #endif #endif /* GL_ARB_program_interface_query */ #ifndef GL_ARB_program_interface_query #define GL_ARB_program_interface_query 1 #define __GLEE_GL_ARB_program_interface_query 1 /* Constants */ #define GL_UNIFORM 0x92E1 #define GL_UNIFORM_BLOCK 0x92E2 #define GL_PROGRAM_INPUT 0x92E3 #define GL_PROGRAM_OUTPUT 0x92E4 #define GL_BUFFER_VARIABLE 0x92E5 #define GL_SHADER_STORAGE_BLOCK 0x92E6 #define GL_VERTEX_SUBROUTINE 0x92E8 #define GL_TESS_CONTROL_SUBROUTINE 0x92E9 #define GL_TESS_EVALUATION_SUBROUTINE 0x92EA #define GL_GEOMETRY_SUBROUTINE 0x92EB #define GL_FRAGMENT_SUBROUTINE 0x92EC #define GL_COMPUTE_SUBROUTINE 0x92ED #define GL_VERTEX_SUBROUTINE_UNIFORM 0x92EE #define GL_TESS_CONTROL_SUBROUTINE_UNIFORM 0x92EF #define GL_TESS_EVALUATION_SUBROUTINE_UNIFORM 0x92F0 #define GL_GEOMETRY_SUBROUTINE_UNIFORM 0x92F1 #define GL_FRAGMENT_SUBROUTINE_UNIFORM 0x92F2 #define GL_COMPUTE_SUBROUTINE_UNIFORM 0x92F3 #define GL_TRANSFORM_FEEDBACK_VARYING 0x92F4 #define GL_ACTIVE_RESOURCES 0x92F5 #define GL_MAX_NAME_LENGTH 0x92F6 #define GL_MAX_NUM_ACTIVE_VARIABLES 0x92F7 #define GL_MAX_NUM_COMPATIBLE_SUBROUTINES 0x92F8 #define GL_NAME_LENGTH 0x92F9 #define GL_TYPE 0x92FA #define GL_ARRAY_SIZE 0x92FB #define GL_OFFSET 0x92FC #define GL_BLOCK_INDEX 0x92FD #define GL_ARRAY_STRIDE 0x92FE #define GL_MATRIX_STRIDE 0x92FF #define GL_IS_ROW_MAJOR 0x9300 #define GL_ATOMIC_COUNTER_BUFFER_INDEX 0x9301 #define GL_BUFFER_BINDING 0x9302 #define GL_BUFFER_DATA_SIZE 0x9303 #define GL_NUM_ACTIVE_VARIABLES 0x9304 #define GL_ACTIVE_VARIABLES 0x9305 #define GL_REFERENCED_BY_VERTEX_SHADER 0x9306 #define GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307 #define GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308 #define GL_REFERENCED_BY_GEOMETRY_SHADER 0x9309 #define GL_REFERENCED_BY_FRAGMENT_SHADER 0x930A #define GL_REFERENCED_BY_COMPUTE_SHADER 0x930B #define GL_TOP_LEVEL_ARRAY_SIZE 0x930C #define GL_TOP_LEVEL_ARRAY_STRIDE 0x930D #define GL_LOCATION 0x930E #define GL_LOCATION_INDEX 0x930F #define GL_IS_PER_PATCH 0x92E7 #ifndef GLEE_H_DEFINED_glGetProgramInterfaceiv #define GLEE_H_DEFINED_glGetProgramInterfaceiv typedef void (APIENTRYP GLEEPFNGLGETPROGRAMINTERFACEIVPROC) (GLuint program, GLenum programInterface, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETPROGRAMINTERFACEIVPROC GLeeFuncPtr_glGetProgramInterfaceiv; #define glGetProgramInterfaceiv GLeeFuncPtr_glGetProgramInterfaceiv #endif #ifndef GLEE_H_DEFINED_glGetProgramResourceIndex #define GLEE_H_DEFINED_glGetProgramResourceIndex typedef GLuint (APIENTRYP GLEEPFNGLGETPROGRAMRESOURCEINDEXPROC) (GLuint program, GLenum programInterface, const GLchar * name); GLEE_EXTERN GLEEPFNGLGETPROGRAMRESOURCEINDEXPROC GLeeFuncPtr_glGetProgramResourceIndex; #define glGetProgramResourceIndex GLeeFuncPtr_glGetProgramResourceIndex #endif #ifndef GLEE_H_DEFINED_glGetProgramResourceName #define GLEE_H_DEFINED_glGetProgramResourceName typedef void (APIENTRYP GLEEPFNGLGETPROGRAMRESOURCENAMEPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei * length, GLchar * name); GLEE_EXTERN GLEEPFNGLGETPROGRAMRESOURCENAMEPROC GLeeFuncPtr_glGetProgramResourceName; #define glGetProgramResourceName GLeeFuncPtr_glGetProgramResourceName #endif #ifndef GLEE_H_DEFINED_glGetProgramResourceiv #define GLEE_H_DEFINED_glGetProgramResourceiv typedef void (APIENTRYP GLEEPFNGLGETPROGRAMRESOURCEIVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum * props, GLsizei bufSize, GLsizei * length, GLint * params); GLEE_EXTERN GLEEPFNGLGETPROGRAMRESOURCEIVPROC GLeeFuncPtr_glGetProgramResourceiv; #define glGetProgramResourceiv GLeeFuncPtr_glGetProgramResourceiv #endif #ifndef GLEE_H_DEFINED_glGetProgramResourceLocation #define GLEE_H_DEFINED_glGetProgramResourceLocation typedef GLint (APIENTRYP GLEEPFNGLGETPROGRAMRESOURCELOCATIONPROC) (GLuint program, GLenum programInterface, const GLchar * name); GLEE_EXTERN GLEEPFNGLGETPROGRAMRESOURCELOCATIONPROC GLeeFuncPtr_glGetProgramResourceLocation; #define glGetProgramResourceLocation GLeeFuncPtr_glGetProgramResourceLocation #endif #ifndef GLEE_H_DEFINED_glGetProgramResourceLocationIndex #define GLEE_H_DEFINED_glGetProgramResourceLocationIndex typedef GLint (APIENTRYP GLEEPFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC) (GLuint program, GLenum programInterface, const GLchar * name); GLEE_EXTERN GLEEPFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC GLeeFuncPtr_glGetProgramResourceLocationIndex; #define glGetProgramResourceLocationIndex GLeeFuncPtr_glGetProgramResourceLocationIndex #endif #endif /* GL_ARB_robust_buffer_access_behavior */ #ifndef GL_ARB_robust_buffer_access_behavior #define GL_ARB_robust_buffer_access_behavior 1 #define __GLEE_GL_ARB_robust_buffer_access_behavior 1 /* Constants */ #endif /* GL_ARB_shader_image_size */ #ifndef GL_ARB_shader_image_size #define GL_ARB_shader_image_size 1 #define __GLEE_GL_ARB_shader_image_size 1 /* Constants */ #endif /* GL_ARB_shader_storage_buffer_object */ #ifndef GL_ARB_shader_storage_buffer_object #define GL_ARB_shader_storage_buffer_object 1 #define __GLEE_GL_ARB_shader_storage_buffer_object 1 /* Constants */ #define GL_SHADER_STORAGE_BUFFER 0x90D2 #define GL_SHADER_STORAGE_BUFFER_BINDING 0x90D3 #define GL_SHADER_STORAGE_BUFFER_START 0x90D4 #define GL_SHADER_STORAGE_BUFFER_SIZE 0x90D5 #define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6 #define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7 #define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8 #define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9 #define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA #define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB #define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC #define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD #define GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90DE #define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF #define GL_SHADER_STORAGE_BARRIER_BIT 0x2000 #define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS #ifndef GLEE_H_DEFINED_glShaderStorageBlockBinding #define GLEE_H_DEFINED_glShaderStorageBlockBinding typedef void (APIENTRYP GLEEPFNGLSHADERSTORAGEBLOCKBINDINGPROC) (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); GLEE_EXTERN GLEEPFNGLSHADERSTORAGEBLOCKBINDINGPROC GLeeFuncPtr_glShaderStorageBlockBinding; #define glShaderStorageBlockBinding GLeeFuncPtr_glShaderStorageBlockBinding #endif #endif /* GL_ARB_stencil_texturing */ #ifndef GL_ARB_stencil_texturing #define GL_ARB_stencil_texturing 1 #define __GLEE_GL_ARB_stencil_texturing 1 /* Constants */ #define GL_DEPTH_STENCIL_TEXTURE_MODE 0x90EA #endif /* GL_ARB_texture_buffer_range */ #ifndef GL_ARB_texture_buffer_range #define GL_ARB_texture_buffer_range 1 #define __GLEE_GL_ARB_texture_buffer_range 1 /* Constants */ #define GL_TEXTURE_BUFFER_OFFSET 0x919D #define GL_TEXTURE_BUFFER_SIZE 0x919E #define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F #ifndef GLEE_H_DEFINED_glTexBufferRange #define GLEE_H_DEFINED_glTexBufferRange typedef void (APIENTRYP GLEEPFNGLTEXBUFFERRANGEPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); GLEE_EXTERN GLEEPFNGLTEXBUFFERRANGEPROC GLeeFuncPtr_glTexBufferRange; #define glTexBufferRange GLeeFuncPtr_glTexBufferRange #endif #ifndef GLEE_H_DEFINED_glTextureBufferRangeEXT #define GLEE_H_DEFINED_glTextureBufferRangeEXT typedef void (APIENTRYP GLEEPFNGLTEXTUREBUFFERRANGEEXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); GLEE_EXTERN GLEEPFNGLTEXTUREBUFFERRANGEEXTPROC GLeeFuncPtr_glTextureBufferRangeEXT; #define glTextureBufferRangeEXT GLeeFuncPtr_glTextureBufferRangeEXT #endif #endif /* GL_ARB_texture_query_levels */ #ifndef GL_ARB_texture_query_levels #define GL_ARB_texture_query_levels 1 #define __GLEE_GL_ARB_texture_query_levels 1 /* Constants */ #endif /* GL_ARB_texture_storage_multisample */ #ifndef GL_ARB_texture_storage_multisample #define GL_ARB_texture_storage_multisample 1 #define __GLEE_GL_ARB_texture_storage_multisample 1 /* Constants */ #ifndef GLEE_H_DEFINED_glTexStorage2DMultisample #define GLEE_H_DEFINED_glTexStorage2DMultisample typedef void (APIENTRYP GLEEPFNGLTEXSTORAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); GLEE_EXTERN GLEEPFNGLTEXSTORAGE2DMULTISAMPLEPROC GLeeFuncPtr_glTexStorage2DMultisample; #define glTexStorage2DMultisample GLeeFuncPtr_glTexStorage2DMultisample #endif #ifndef GLEE_H_DEFINED_glTexStorage3DMultisample #define GLEE_H_DEFINED_glTexStorage3DMultisample typedef void (APIENTRYP GLEEPFNGLTEXSTORAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); GLEE_EXTERN GLEEPFNGLTEXSTORAGE3DMULTISAMPLEPROC GLeeFuncPtr_glTexStorage3DMultisample; #define glTexStorage3DMultisample GLeeFuncPtr_glTexStorage3DMultisample #endif #ifndef GLEE_H_DEFINED_glTextureStorage2DMultisampleEXT #define GLEE_H_DEFINED_glTextureStorage2DMultisampleEXT typedef void (APIENTRYP GLEEPFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); GLEE_EXTERN GLEEPFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC GLeeFuncPtr_glTextureStorage2DMultisampleEXT; #define glTextureStorage2DMultisampleEXT GLeeFuncPtr_glTextureStorage2DMultisampleEXT #endif #ifndef GLEE_H_DEFINED_glTextureStorage3DMultisampleEXT #define GLEE_H_DEFINED_glTextureStorage3DMultisampleEXT typedef void (APIENTRYP GLEEPFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); GLEE_EXTERN GLEEPFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC GLeeFuncPtr_glTextureStorage3DMultisampleEXT; #define glTextureStorage3DMultisampleEXT GLeeFuncPtr_glTextureStorage3DMultisampleEXT #endif #endif /* GL_EXT_abgr */ #ifndef GL_EXT_abgr #define GL_EXT_abgr 1 #define __GLEE_GL_EXT_abgr 1 /* Constants */ #define GL_ABGR_EXT 0x8000 #endif /* GL_EXT_blend_color */ #ifndef GL_EXT_blend_color #define GL_EXT_blend_color 1 #define __GLEE_GL_EXT_blend_color 1 /* Constants */ #define GL_CONSTANT_COLOR_EXT 0x8001 #define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 #define GL_CONSTANT_ALPHA_EXT 0x8003 #define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 #define GL_BLEND_COLOR_EXT 0x8005 #ifndef GLEE_H_DEFINED_glBlendColorEXT #define GLEE_H_DEFINED_glBlendColorEXT typedef void (APIENTRYP GLEEPFNGLBLENDCOLOREXTPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); GLEE_EXTERN GLEEPFNGLBLENDCOLOREXTPROC GLeeFuncPtr_glBlendColorEXT; #define glBlendColorEXT GLeeFuncPtr_glBlendColorEXT #endif #endif /* GL_EXT_polygon_offset */ #ifndef GL_EXT_polygon_offset #define GL_EXT_polygon_offset 1 #define __GLEE_GL_EXT_polygon_offset 1 /* Constants */ #define GL_POLYGON_OFFSET_EXT 0x8037 #define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 #define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 #ifndef GLEE_H_DEFINED_glPolygonOffsetEXT #define GLEE_H_DEFINED_glPolygonOffsetEXT typedef void (APIENTRYP GLEEPFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias); GLEE_EXTERN GLEEPFNGLPOLYGONOFFSETEXTPROC GLeeFuncPtr_glPolygonOffsetEXT; #define glPolygonOffsetEXT GLeeFuncPtr_glPolygonOffsetEXT #endif #endif /* GL_EXT_texture */ #ifndef GL_EXT_texture #define GL_EXT_texture 1 #define __GLEE_GL_EXT_texture 1 /* Constants */ #define GL_ALPHA4_EXT 0x803B #define GL_ALPHA8_EXT 0x803C #define GL_ALPHA12_EXT 0x803D #define GL_ALPHA16_EXT 0x803E #define GL_LUMINANCE4_EXT 0x803F #define GL_LUMINANCE8_EXT 0x8040 #define GL_LUMINANCE12_EXT 0x8041 #define GL_LUMINANCE16_EXT 0x8042 #define GL_LUMINANCE4_ALPHA4_EXT 0x8043 #define GL_LUMINANCE6_ALPHA2_EXT 0x8044 #define GL_LUMINANCE8_ALPHA8_EXT 0x8045 #define GL_LUMINANCE12_ALPHA4_EXT 0x8046 #define GL_LUMINANCE12_ALPHA12_EXT 0x8047 #define GL_LUMINANCE16_ALPHA16_EXT 0x8048 #define GL_INTENSITY_EXT 0x8049 #define GL_INTENSITY4_EXT 0x804A #define GL_INTENSITY8_EXT 0x804B #define GL_INTENSITY12_EXT 0x804C #define GL_INTENSITY16_EXT 0x804D #define GL_RGB2_EXT 0x804E #define GL_RGB4_EXT 0x804F #define GL_RGB5_EXT 0x8050 #define GL_RGB8_EXT 0x8051 #define GL_RGB10_EXT 0x8052 #define GL_RGB12_EXT 0x8053 #define GL_RGB16_EXT 0x8054 #define GL_RGBA2_EXT 0x8055 #define GL_RGBA4_EXT 0x8056 #define GL_RGB5_A1_EXT 0x8057 #define GL_RGBA8_EXT 0x8058 #define GL_RGB10_A2_EXT 0x8059 #define GL_RGBA12_EXT 0x805A #define GL_RGBA16_EXT 0x805B #define GL_TEXTURE_RED_SIZE_EXT 0x805C #define GL_TEXTURE_GREEN_SIZE_EXT 0x805D #define GL_TEXTURE_BLUE_SIZE_EXT 0x805E #define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F #define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 #define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 #define GL_REPLACE_EXT 0x8062 #define GL_PROXY_TEXTURE_1D_EXT 0x8063 #define GL_PROXY_TEXTURE_2D_EXT 0x8064 #define GL_TEXTURE_TOO_LARGE_EXT 0x8065 #endif /* GL_EXT_texture3D */ #ifndef GL_EXT_texture3D #define GL_EXT_texture3D 1 #define __GLEE_GL_EXT_texture3D 1 /* Constants */ #define GL_PACK_SKIP_IMAGES_EXT 0x806B #define GL_PACK_IMAGE_HEIGHT_EXT 0x806C #define GL_UNPACK_SKIP_IMAGES_EXT 0x806D #define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E #define GL_TEXTURE_3D_EXT 0x806F #define GL_PROXY_TEXTURE_3D_EXT 0x8070 #define GL_TEXTURE_DEPTH_EXT 0x8071 #define GL_TEXTURE_WRAP_R_EXT 0x8072 #define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 #ifndef GLEE_H_DEFINED_glTexImage3DEXT #define GLEE_H_DEFINED_glTexImage3DEXT typedef void (APIENTRYP GLEEPFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLTEXIMAGE3DEXTPROC GLeeFuncPtr_glTexImage3DEXT; #define glTexImage3DEXT GLeeFuncPtr_glTexImage3DEXT #endif #ifndef GLEE_H_DEFINED_glTexSubImage3DEXT #define GLEE_H_DEFINED_glTexSubImage3DEXT typedef void (APIENTRYP GLEEPFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLTEXSUBIMAGE3DEXTPROC GLeeFuncPtr_glTexSubImage3DEXT; #define glTexSubImage3DEXT GLeeFuncPtr_glTexSubImage3DEXT #endif #endif /* GL_SGIS_texture_filter4 */ #ifndef GL_SGIS_texture_filter4 #define GL_SGIS_texture_filter4 1 #define __GLEE_GL_SGIS_texture_filter4 1 /* Constants */ #define GL_FILTER4_SGIS 0x8146 #define GL_TEXTURE_FILTER4_SIZE_SGIS 0x8147 #ifndef GLEE_H_DEFINED_glGetTexFilterFuncSGIS #define GLEE_H_DEFINED_glGetTexFilterFuncSGIS typedef void (APIENTRYP GLEEPFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat * weights); GLEE_EXTERN GLEEPFNGLGETTEXFILTERFUNCSGISPROC GLeeFuncPtr_glGetTexFilterFuncSGIS; #define glGetTexFilterFuncSGIS GLeeFuncPtr_glGetTexFilterFuncSGIS #endif #ifndef GLEE_H_DEFINED_glTexFilterFuncSGIS #define GLEE_H_DEFINED_glTexFilterFuncSGIS typedef void (APIENTRYP GLEEPFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat * weights); GLEE_EXTERN GLEEPFNGLTEXFILTERFUNCSGISPROC GLeeFuncPtr_glTexFilterFuncSGIS; #define glTexFilterFuncSGIS GLeeFuncPtr_glTexFilterFuncSGIS #endif #endif /* GL_EXT_subtexture */ #ifndef GL_EXT_subtexture #define GL_EXT_subtexture 1 #define __GLEE_GL_EXT_subtexture 1 /* Constants */ #ifndef GLEE_H_DEFINED_glTexSubImage1DEXT #define GLEE_H_DEFINED_glTexSubImage1DEXT typedef void (APIENTRYP GLEEPFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLTEXSUBIMAGE1DEXTPROC GLeeFuncPtr_glTexSubImage1DEXT; #define glTexSubImage1DEXT GLeeFuncPtr_glTexSubImage1DEXT #endif #ifndef GLEE_H_DEFINED_glTexSubImage2DEXT #define GLEE_H_DEFINED_glTexSubImage2DEXT typedef void (APIENTRYP GLEEPFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLTEXSUBIMAGE2DEXTPROC GLeeFuncPtr_glTexSubImage2DEXT; #define glTexSubImage2DEXT GLeeFuncPtr_glTexSubImage2DEXT #endif #endif /* GL_EXT_copy_texture */ #ifndef GL_EXT_copy_texture #define GL_EXT_copy_texture 1 #define __GLEE_GL_EXT_copy_texture 1 /* Constants */ #ifndef GLEE_H_DEFINED_glCopyTexImage1DEXT #define GLEE_H_DEFINED_glCopyTexImage1DEXT typedef void (APIENTRYP GLEEPFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); GLEE_EXTERN GLEEPFNGLCOPYTEXIMAGE1DEXTPROC GLeeFuncPtr_glCopyTexImage1DEXT; #define glCopyTexImage1DEXT GLeeFuncPtr_glCopyTexImage1DEXT #endif #ifndef GLEE_H_DEFINED_glCopyTexImage2DEXT #define GLEE_H_DEFINED_glCopyTexImage2DEXT typedef void (APIENTRYP GLEEPFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); GLEE_EXTERN GLEEPFNGLCOPYTEXIMAGE2DEXTPROC GLeeFuncPtr_glCopyTexImage2DEXT; #define glCopyTexImage2DEXT GLeeFuncPtr_glCopyTexImage2DEXT #endif #ifndef GLEE_H_DEFINED_glCopyTexSubImage1DEXT #define GLEE_H_DEFINED_glCopyTexSubImage1DEXT typedef void (APIENTRYP GLEEPFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); GLEE_EXTERN GLEEPFNGLCOPYTEXSUBIMAGE1DEXTPROC GLeeFuncPtr_glCopyTexSubImage1DEXT; #define glCopyTexSubImage1DEXT GLeeFuncPtr_glCopyTexSubImage1DEXT #endif #ifndef GLEE_H_DEFINED_glCopyTexSubImage2DEXT #define GLEE_H_DEFINED_glCopyTexSubImage2DEXT typedef void (APIENTRYP GLEEPFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLCOPYTEXSUBIMAGE2DEXTPROC GLeeFuncPtr_glCopyTexSubImage2DEXT; #define glCopyTexSubImage2DEXT GLeeFuncPtr_glCopyTexSubImage2DEXT #endif #ifndef GLEE_H_DEFINED_glCopyTexSubImage3DEXT #define GLEE_H_DEFINED_glCopyTexSubImage3DEXT typedef void (APIENTRYP GLEEPFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLCOPYTEXSUBIMAGE3DEXTPROC GLeeFuncPtr_glCopyTexSubImage3DEXT; #define glCopyTexSubImage3DEXT GLeeFuncPtr_glCopyTexSubImage3DEXT #endif #endif /* GL_EXT_histogram */ #ifndef GL_EXT_histogram #define GL_EXT_histogram 1 #define __GLEE_GL_EXT_histogram 1 /* Constants */ #define GL_HISTOGRAM_EXT 0x8024 #define GL_PROXY_HISTOGRAM_EXT 0x8025 #define GL_HISTOGRAM_WIDTH_EXT 0x8026 #define GL_HISTOGRAM_FORMAT_EXT 0x8027 #define GL_HISTOGRAM_RED_SIZE_EXT 0x8028 #define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029 #define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A #define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B #define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C #define GL_HISTOGRAM_SINK_EXT 0x802D #define GL_MINMAX_EXT 0x802E #define GL_MINMAX_FORMAT_EXT 0x802F #define GL_MINMAX_SINK_EXT 0x8030 #define GL_TABLE_TOO_LARGE_EXT 0x8031 #ifndef GLEE_H_DEFINED_glGetHistogramEXT #define GLEE_H_DEFINED_glGetHistogramEXT typedef void (APIENTRYP GLEEPFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values); GLEE_EXTERN GLEEPFNGLGETHISTOGRAMEXTPROC GLeeFuncPtr_glGetHistogramEXT; #define glGetHistogramEXT GLeeFuncPtr_glGetHistogramEXT #endif #ifndef GLEE_H_DEFINED_glGetHistogramParameterfvEXT #define GLEE_H_DEFINED_glGetHistogramParameterfvEXT typedef void (APIENTRYP GLEEPFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETHISTOGRAMPARAMETERFVEXTPROC GLeeFuncPtr_glGetHistogramParameterfvEXT; #define glGetHistogramParameterfvEXT GLeeFuncPtr_glGetHistogramParameterfvEXT #endif #ifndef GLEE_H_DEFINED_glGetHistogramParameterivEXT #define GLEE_H_DEFINED_glGetHistogramParameterivEXT typedef void (APIENTRYP GLEEPFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETHISTOGRAMPARAMETERIVEXTPROC GLeeFuncPtr_glGetHistogramParameterivEXT; #define glGetHistogramParameterivEXT GLeeFuncPtr_glGetHistogramParameterivEXT #endif #ifndef GLEE_H_DEFINED_glGetMinmaxEXT #define GLEE_H_DEFINED_glGetMinmaxEXT typedef void (APIENTRYP GLEEPFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values); GLEE_EXTERN GLEEPFNGLGETMINMAXEXTPROC GLeeFuncPtr_glGetMinmaxEXT; #define glGetMinmaxEXT GLeeFuncPtr_glGetMinmaxEXT #endif #ifndef GLEE_H_DEFINED_glGetMinmaxParameterfvEXT #define GLEE_H_DEFINED_glGetMinmaxParameterfvEXT typedef void (APIENTRYP GLEEPFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETMINMAXPARAMETERFVEXTPROC GLeeFuncPtr_glGetMinmaxParameterfvEXT; #define glGetMinmaxParameterfvEXT GLeeFuncPtr_glGetMinmaxParameterfvEXT #endif #ifndef GLEE_H_DEFINED_glGetMinmaxParameterivEXT #define GLEE_H_DEFINED_glGetMinmaxParameterivEXT typedef void (APIENTRYP GLEEPFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETMINMAXPARAMETERIVEXTPROC GLeeFuncPtr_glGetMinmaxParameterivEXT; #define glGetMinmaxParameterivEXT GLeeFuncPtr_glGetMinmaxParameterivEXT #endif #ifndef GLEE_H_DEFINED_glHistogramEXT #define GLEE_H_DEFINED_glHistogramEXT typedef void (APIENTRYP GLEEPFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); GLEE_EXTERN GLEEPFNGLHISTOGRAMEXTPROC GLeeFuncPtr_glHistogramEXT; #define glHistogramEXT GLeeFuncPtr_glHistogramEXT #endif #ifndef GLEE_H_DEFINED_glMinmaxEXT #define GLEE_H_DEFINED_glMinmaxEXT typedef void (APIENTRYP GLEEPFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink); GLEE_EXTERN GLEEPFNGLMINMAXEXTPROC GLeeFuncPtr_glMinmaxEXT; #define glMinmaxEXT GLeeFuncPtr_glMinmaxEXT #endif #ifndef GLEE_H_DEFINED_glResetHistogramEXT #define GLEE_H_DEFINED_glResetHistogramEXT typedef void (APIENTRYP GLEEPFNGLRESETHISTOGRAMEXTPROC) (GLenum target); GLEE_EXTERN GLEEPFNGLRESETHISTOGRAMEXTPROC GLeeFuncPtr_glResetHistogramEXT; #define glResetHistogramEXT GLeeFuncPtr_glResetHistogramEXT #endif #ifndef GLEE_H_DEFINED_glResetMinmaxEXT #define GLEE_H_DEFINED_glResetMinmaxEXT typedef void (APIENTRYP GLEEPFNGLRESETMINMAXEXTPROC) (GLenum target); GLEE_EXTERN GLEEPFNGLRESETMINMAXEXTPROC GLeeFuncPtr_glResetMinmaxEXT; #define glResetMinmaxEXT GLeeFuncPtr_glResetMinmaxEXT #endif #endif /* GL_EXT_convolution */ #ifndef GL_EXT_convolution #define GL_EXT_convolution 1 #define __GLEE_GL_EXT_convolution 1 /* Constants */ #define GL_CONVOLUTION_1D_EXT 0x8010 #define GL_CONVOLUTION_2D_EXT 0x8011 #define GL_SEPARABLE_2D_EXT 0x8012 #define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013 #define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014 #define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015 #define GL_REDUCE_EXT 0x8016 #define GL_CONVOLUTION_FORMAT_EXT 0x8017 #define GL_CONVOLUTION_WIDTH_EXT 0x8018 #define GL_CONVOLUTION_HEIGHT_EXT 0x8019 #define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A #define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B #define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C #define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D #define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E #define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F #define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020 #define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021 #define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 #define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 #ifndef GLEE_H_DEFINED_glConvolutionFilter1DEXT #define GLEE_H_DEFINED_glConvolutionFilter1DEXT typedef void (APIENTRYP GLEEPFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * image); GLEE_EXTERN GLEEPFNGLCONVOLUTIONFILTER1DEXTPROC GLeeFuncPtr_glConvolutionFilter1DEXT; #define glConvolutionFilter1DEXT GLeeFuncPtr_glConvolutionFilter1DEXT #endif #ifndef GLEE_H_DEFINED_glConvolutionFilter2DEXT #define GLEE_H_DEFINED_glConvolutionFilter2DEXT typedef void (APIENTRYP GLEEPFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * image); GLEE_EXTERN GLEEPFNGLCONVOLUTIONFILTER2DEXTPROC GLeeFuncPtr_glConvolutionFilter2DEXT; #define glConvolutionFilter2DEXT GLeeFuncPtr_glConvolutionFilter2DEXT #endif #ifndef GLEE_H_DEFINED_glConvolutionParameterfEXT #define GLEE_H_DEFINED_glConvolutionParameterfEXT typedef void (APIENTRYP GLEEPFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat params); GLEE_EXTERN GLEEPFNGLCONVOLUTIONPARAMETERFEXTPROC GLeeFuncPtr_glConvolutionParameterfEXT; #define glConvolutionParameterfEXT GLeeFuncPtr_glConvolutionParameterfEXT #endif #ifndef GLEE_H_DEFINED_glConvolutionParameterfvEXT #define GLEE_H_DEFINED_glConvolutionParameterfvEXT typedef void (APIENTRYP GLEEPFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLCONVOLUTIONPARAMETERFVEXTPROC GLeeFuncPtr_glConvolutionParameterfvEXT; #define glConvolutionParameterfvEXT GLeeFuncPtr_glConvolutionParameterfvEXT #endif #ifndef GLEE_H_DEFINED_glConvolutionParameteriEXT #define GLEE_H_DEFINED_glConvolutionParameteriEXT typedef void (APIENTRYP GLEEPFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint params); GLEE_EXTERN GLEEPFNGLCONVOLUTIONPARAMETERIEXTPROC GLeeFuncPtr_glConvolutionParameteriEXT; #define glConvolutionParameteriEXT GLeeFuncPtr_glConvolutionParameteriEXT #endif #ifndef GLEE_H_DEFINED_glConvolutionParameterivEXT #define GLEE_H_DEFINED_glConvolutionParameterivEXT typedef void (APIENTRYP GLEEPFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLCONVOLUTIONPARAMETERIVEXTPROC GLeeFuncPtr_glConvolutionParameterivEXT; #define glConvolutionParameterivEXT GLeeFuncPtr_glConvolutionParameterivEXT #endif #ifndef GLEE_H_DEFINED_glCopyConvolutionFilter1DEXT #define GLEE_H_DEFINED_glCopyConvolutionFilter1DEXT typedef void (APIENTRYP GLEEPFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); GLEE_EXTERN GLEEPFNGLCOPYCONVOLUTIONFILTER1DEXTPROC GLeeFuncPtr_glCopyConvolutionFilter1DEXT; #define glCopyConvolutionFilter1DEXT GLeeFuncPtr_glCopyConvolutionFilter1DEXT #endif #ifndef GLEE_H_DEFINED_glCopyConvolutionFilter2DEXT #define GLEE_H_DEFINED_glCopyConvolutionFilter2DEXT typedef void (APIENTRYP GLEEPFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLCOPYCONVOLUTIONFILTER2DEXTPROC GLeeFuncPtr_glCopyConvolutionFilter2DEXT; #define glCopyConvolutionFilter2DEXT GLeeFuncPtr_glCopyConvolutionFilter2DEXT #endif #ifndef GLEE_H_DEFINED_glGetConvolutionFilterEXT #define GLEE_H_DEFINED_glGetConvolutionFilterEXT typedef void (APIENTRYP GLEEPFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid * image); GLEE_EXTERN GLEEPFNGLGETCONVOLUTIONFILTEREXTPROC GLeeFuncPtr_glGetConvolutionFilterEXT; #define glGetConvolutionFilterEXT GLeeFuncPtr_glGetConvolutionFilterEXT #endif #ifndef GLEE_H_DEFINED_glGetConvolutionParameterfvEXT #define GLEE_H_DEFINED_glGetConvolutionParameterfvEXT typedef void (APIENTRYP GLEEPFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETCONVOLUTIONPARAMETERFVEXTPROC GLeeFuncPtr_glGetConvolutionParameterfvEXT; #define glGetConvolutionParameterfvEXT GLeeFuncPtr_glGetConvolutionParameterfvEXT #endif #ifndef GLEE_H_DEFINED_glGetConvolutionParameterivEXT #define GLEE_H_DEFINED_glGetConvolutionParameterivEXT typedef void (APIENTRYP GLEEPFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETCONVOLUTIONPARAMETERIVEXTPROC GLeeFuncPtr_glGetConvolutionParameterivEXT; #define glGetConvolutionParameterivEXT GLeeFuncPtr_glGetConvolutionParameterivEXT #endif #ifndef GLEE_H_DEFINED_glGetSeparableFilterEXT #define GLEE_H_DEFINED_glGetSeparableFilterEXT typedef void (APIENTRYP GLEEPFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid * row, GLvoid * column, GLvoid * span); GLEE_EXTERN GLEEPFNGLGETSEPARABLEFILTEREXTPROC GLeeFuncPtr_glGetSeparableFilterEXT; #define glGetSeparableFilterEXT GLeeFuncPtr_glGetSeparableFilterEXT #endif #ifndef GLEE_H_DEFINED_glSeparableFilter2DEXT #define GLEE_H_DEFINED_glSeparableFilter2DEXT typedef void (APIENTRYP GLEEPFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * row, const GLvoid * column); GLEE_EXTERN GLEEPFNGLSEPARABLEFILTER2DEXTPROC GLeeFuncPtr_glSeparableFilter2DEXT; #define glSeparableFilter2DEXT GLeeFuncPtr_glSeparableFilter2DEXT #endif #endif /* GL_SGI_color_matrix */ #ifndef GL_SGI_color_matrix #define GL_SGI_color_matrix 1 #define __GLEE_GL_SGI_color_matrix 1 /* Constants */ #define GL_COLOR_MATRIX_SGI 0x80B1 #define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2 #define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3 #define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4 #define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5 #define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6 #define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7 #define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8 #define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9 #define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA #define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB #endif /* GL_SGI_color_table */ #ifndef GL_SGI_color_table #define GL_SGI_color_table 1 #define __GLEE_GL_SGI_color_table 1 /* Constants */ #define GL_COLOR_TABLE_SGI 0x80D0 #define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1 #define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2 #define GL_PROXY_COLOR_TABLE_SGI 0x80D3 #define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4 #define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5 #define GL_COLOR_TABLE_SCALE_SGI 0x80D6 #define GL_COLOR_TABLE_BIAS_SGI 0x80D7 #define GL_COLOR_TABLE_FORMAT_SGI 0x80D8 #define GL_COLOR_TABLE_WIDTH_SGI 0x80D9 #define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA #define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB #define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC #define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD #define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE #define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF #ifndef GLEE_H_DEFINED_glColorTableSGI #define GLEE_H_DEFINED_glColorTableSGI typedef void (APIENTRYP GLEEPFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * table); GLEE_EXTERN GLEEPFNGLCOLORTABLESGIPROC GLeeFuncPtr_glColorTableSGI; #define glColorTableSGI GLeeFuncPtr_glColorTableSGI #endif #ifndef GLEE_H_DEFINED_glColorTableParameterfvSGI #define GLEE_H_DEFINED_glColorTableParameterfvSGI typedef void (APIENTRYP GLEEPFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLCOLORTABLEPARAMETERFVSGIPROC GLeeFuncPtr_glColorTableParameterfvSGI; #define glColorTableParameterfvSGI GLeeFuncPtr_glColorTableParameterfvSGI #endif #ifndef GLEE_H_DEFINED_glColorTableParameterivSGI #define GLEE_H_DEFINED_glColorTableParameterivSGI typedef void (APIENTRYP GLEEPFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLCOLORTABLEPARAMETERIVSGIPROC GLeeFuncPtr_glColorTableParameterivSGI; #define glColorTableParameterivSGI GLeeFuncPtr_glColorTableParameterivSGI #endif #ifndef GLEE_H_DEFINED_glCopyColorTableSGI #define GLEE_H_DEFINED_glCopyColorTableSGI typedef void (APIENTRYP GLEEPFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); GLEE_EXTERN GLEEPFNGLCOPYCOLORTABLESGIPROC GLeeFuncPtr_glCopyColorTableSGI; #define glCopyColorTableSGI GLeeFuncPtr_glCopyColorTableSGI #endif #ifndef GLEE_H_DEFINED_glGetColorTableSGI #define GLEE_H_DEFINED_glGetColorTableSGI typedef void (APIENTRYP GLEEPFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, GLvoid * table); GLEE_EXTERN GLEEPFNGLGETCOLORTABLESGIPROC GLeeFuncPtr_glGetColorTableSGI; #define glGetColorTableSGI GLeeFuncPtr_glGetColorTableSGI #endif #ifndef GLEE_H_DEFINED_glGetColorTableParameterfvSGI #define GLEE_H_DEFINED_glGetColorTableParameterfvSGI typedef void (APIENTRYP GLEEPFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETCOLORTABLEPARAMETERFVSGIPROC GLeeFuncPtr_glGetColorTableParameterfvSGI; #define glGetColorTableParameterfvSGI GLeeFuncPtr_glGetColorTableParameterfvSGI #endif #ifndef GLEE_H_DEFINED_glGetColorTableParameterivSGI #define GLEE_H_DEFINED_glGetColorTableParameterivSGI typedef void (APIENTRYP GLEEPFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETCOLORTABLEPARAMETERIVSGIPROC GLeeFuncPtr_glGetColorTableParameterivSGI; #define glGetColorTableParameterivSGI GLeeFuncPtr_glGetColorTableParameterivSGI #endif #endif /* GL_SGIS_pixel_texture */ #ifndef GL_SGIS_pixel_texture #define GL_SGIS_pixel_texture 1 #define __GLEE_GL_SGIS_pixel_texture 1 /* Constants */ #define GL_PIXEL_TEXTURE_SGIS 0x8353 #define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354 #define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355 #define GL_PIXEL_GROUP_COLOR_SGIS 0x8356 #ifndef GLEE_H_DEFINED_glPixelTexGenParameteriSGIS #define GLEE_H_DEFINED_glPixelTexGenParameteriSGIS typedef void (APIENTRYP GLEEPFNGLPIXELTEXGENPARAMETERISGISPROC) (GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLPIXELTEXGENPARAMETERISGISPROC GLeeFuncPtr_glPixelTexGenParameteriSGIS; #define glPixelTexGenParameteriSGIS GLeeFuncPtr_glPixelTexGenParameteriSGIS #endif #ifndef GLEE_H_DEFINED_glPixelTexGenParameterivSGIS #define GLEE_H_DEFINED_glPixelTexGenParameterivSGIS typedef void (APIENTRYP GLEEPFNGLPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLPIXELTEXGENPARAMETERIVSGISPROC GLeeFuncPtr_glPixelTexGenParameterivSGIS; #define glPixelTexGenParameterivSGIS GLeeFuncPtr_glPixelTexGenParameterivSGIS #endif #ifndef GLEE_H_DEFINED_glPixelTexGenParameterfSGIS #define GLEE_H_DEFINED_glPixelTexGenParameterfSGIS typedef void (APIENTRYP GLEEPFNGLPIXELTEXGENPARAMETERFSGISPROC) (GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLPIXELTEXGENPARAMETERFSGISPROC GLeeFuncPtr_glPixelTexGenParameterfSGIS; #define glPixelTexGenParameterfSGIS GLeeFuncPtr_glPixelTexGenParameterfSGIS #endif #ifndef GLEE_H_DEFINED_glPixelTexGenParameterfvSGIS #define GLEE_H_DEFINED_glPixelTexGenParameterfvSGIS typedef void (APIENTRYP GLEEPFNGLPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLPIXELTEXGENPARAMETERFVSGISPROC GLeeFuncPtr_glPixelTexGenParameterfvSGIS; #define glPixelTexGenParameterfvSGIS GLeeFuncPtr_glPixelTexGenParameterfvSGIS #endif #ifndef GLEE_H_DEFINED_glGetPixelTexGenParameterivSGIS #define GLEE_H_DEFINED_glGetPixelTexGenParameterivSGIS typedef void (APIENTRYP GLEEPFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETPIXELTEXGENPARAMETERIVSGISPROC GLeeFuncPtr_glGetPixelTexGenParameterivSGIS; #define glGetPixelTexGenParameterivSGIS GLeeFuncPtr_glGetPixelTexGenParameterivSGIS #endif #ifndef GLEE_H_DEFINED_glGetPixelTexGenParameterfvSGIS #define GLEE_H_DEFINED_glGetPixelTexGenParameterfvSGIS typedef void (APIENTRYP GLEEPFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETPIXELTEXGENPARAMETERFVSGISPROC GLeeFuncPtr_glGetPixelTexGenParameterfvSGIS; #define glGetPixelTexGenParameterfvSGIS GLeeFuncPtr_glGetPixelTexGenParameterfvSGIS #endif #endif /* GL_SGIX_pixel_texture */ #ifndef GL_SGIX_pixel_texture #define GL_SGIX_pixel_texture 1 #define __GLEE_GL_SGIX_pixel_texture 1 /* Constants */ #define GL_PIXEL_TEX_GEN_SGIX 0x8139 #define GL_PIXEL_TEX_GEN_MODE_SGIX 0x832B #ifndef GLEE_H_DEFINED_glPixelTexGenSGIX #define GLEE_H_DEFINED_glPixelTexGenSGIX typedef void (APIENTRYP GLEEPFNGLPIXELTEXGENSGIXPROC) (GLenum mode); GLEE_EXTERN GLEEPFNGLPIXELTEXGENSGIXPROC GLeeFuncPtr_glPixelTexGenSGIX; #define glPixelTexGenSGIX GLeeFuncPtr_glPixelTexGenSGIX #endif #endif /* GL_SGIS_texture4D */ #ifndef GL_SGIS_texture4D #define GL_SGIS_texture4D 1 #define __GLEE_GL_SGIS_texture4D 1 /* Constants */ #define GL_PACK_SKIP_VOLUMES_SGIS 0x8130 #define GL_PACK_IMAGE_DEPTH_SGIS 0x8131 #define GL_UNPACK_SKIP_VOLUMES_SGIS 0x8132 #define GL_UNPACK_IMAGE_DEPTH_SGIS 0x8133 #define GL_TEXTURE_4D_SGIS 0x8134 #define GL_PROXY_TEXTURE_4D_SGIS 0x8135 #define GL_TEXTURE_4DSIZE_SGIS 0x8136 #define GL_TEXTURE_WRAP_Q_SGIS 0x8137 #define GL_MAX_4D_TEXTURE_SIZE_SGIS 0x8138 #define GL_TEXTURE_4D_BINDING_SGIS 0x814F #ifndef GLEE_H_DEFINED_glTexImage4DSGIS #define GLEE_H_DEFINED_glTexImage4DSGIS typedef void (APIENTRYP GLEEPFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLTEXIMAGE4DSGISPROC GLeeFuncPtr_glTexImage4DSGIS; #define glTexImage4DSGIS GLeeFuncPtr_glTexImage4DSGIS #endif #ifndef GLEE_H_DEFINED_glTexSubImage4DSGIS #define GLEE_H_DEFINED_glTexSubImage4DSGIS typedef void (APIENTRYP GLEEPFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLTEXSUBIMAGE4DSGISPROC GLeeFuncPtr_glTexSubImage4DSGIS; #define glTexSubImage4DSGIS GLeeFuncPtr_glTexSubImage4DSGIS #endif #endif /* GL_SGI_texture_color_table */ #ifndef GL_SGI_texture_color_table #define GL_SGI_texture_color_table 1 #define __GLEE_GL_SGI_texture_color_table 1 /* Constants */ #define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC #define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD #endif /* GL_EXT_cmyka */ #ifndef GL_EXT_cmyka #define GL_EXT_cmyka 1 #define __GLEE_GL_EXT_cmyka 1 /* Constants */ #define GL_CMYK_EXT 0x800C #define GL_CMYKA_EXT 0x800D #define GL_PACK_CMYK_HINT_EXT 0x800E #define GL_UNPACK_CMYK_HINT_EXT 0x800F #endif /* GL_EXT_texture_object */ #ifndef GL_EXT_texture_object #define GL_EXT_texture_object 1 #define __GLEE_GL_EXT_texture_object 1 /* Constants */ #define GL_TEXTURE_PRIORITY_EXT 0x8066 #define GL_TEXTURE_RESIDENT_EXT 0x8067 #define GL_TEXTURE_1D_BINDING_EXT 0x8068 #define GL_TEXTURE_2D_BINDING_EXT 0x8069 #define GL_TEXTURE_3D_BINDING_EXT 0x806A #ifndef GLEE_H_DEFINED_glAreTexturesResidentEXT #define GLEE_H_DEFINED_glAreTexturesResidentEXT typedef GLboolean (APIENTRYP GLEEPFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint * textures, GLboolean * residences); GLEE_EXTERN GLEEPFNGLARETEXTURESRESIDENTEXTPROC GLeeFuncPtr_glAreTexturesResidentEXT; #define glAreTexturesResidentEXT GLeeFuncPtr_glAreTexturesResidentEXT #endif #ifndef GLEE_H_DEFINED_glBindTextureEXT #define GLEE_H_DEFINED_glBindTextureEXT typedef void (APIENTRYP GLEEPFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture); GLEE_EXTERN GLEEPFNGLBINDTEXTUREEXTPROC GLeeFuncPtr_glBindTextureEXT; #define glBindTextureEXT GLeeFuncPtr_glBindTextureEXT #endif #ifndef GLEE_H_DEFINED_glDeleteTexturesEXT #define GLEE_H_DEFINED_glDeleteTexturesEXT typedef void (APIENTRYP GLEEPFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint * textures); GLEE_EXTERN GLEEPFNGLDELETETEXTURESEXTPROC GLeeFuncPtr_glDeleteTexturesEXT; #define glDeleteTexturesEXT GLeeFuncPtr_glDeleteTexturesEXT #endif #ifndef GLEE_H_DEFINED_glGenTexturesEXT #define GLEE_H_DEFINED_glGenTexturesEXT typedef void (APIENTRYP GLEEPFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint * textures); GLEE_EXTERN GLEEPFNGLGENTEXTURESEXTPROC GLeeFuncPtr_glGenTexturesEXT; #define glGenTexturesEXT GLeeFuncPtr_glGenTexturesEXT #endif #ifndef GLEE_H_DEFINED_glIsTextureEXT #define GLEE_H_DEFINED_glIsTextureEXT typedef GLboolean (APIENTRYP GLEEPFNGLISTEXTUREEXTPROC) (GLuint texture); GLEE_EXTERN GLEEPFNGLISTEXTUREEXTPROC GLeeFuncPtr_glIsTextureEXT; #define glIsTextureEXT GLeeFuncPtr_glIsTextureEXT #endif #ifndef GLEE_H_DEFINED_glPrioritizeTexturesEXT #define GLEE_H_DEFINED_glPrioritizeTexturesEXT typedef void (APIENTRYP GLEEPFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint * textures, const GLclampf * priorities); GLEE_EXTERN GLEEPFNGLPRIORITIZETEXTURESEXTPROC GLeeFuncPtr_glPrioritizeTexturesEXT; #define glPrioritizeTexturesEXT GLeeFuncPtr_glPrioritizeTexturesEXT #endif #endif /* GL_SGIS_detail_texture */ #ifndef GL_SGIS_detail_texture #define GL_SGIS_detail_texture 1 #define __GLEE_GL_SGIS_detail_texture 1 /* Constants */ #define GL_DETAIL_TEXTURE_2D_SGIS 0x8095 #define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096 #define GL_LINEAR_DETAIL_SGIS 0x8097 #define GL_LINEAR_DETAIL_ALPHA_SGIS 0x8098 #define GL_LINEAR_DETAIL_COLOR_SGIS 0x8099 #define GL_DETAIL_TEXTURE_LEVEL_SGIS 0x809A #define GL_DETAIL_TEXTURE_MODE_SGIS 0x809B #define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C #ifndef GLEE_H_DEFINED_glDetailTexFuncSGIS #define GLEE_H_DEFINED_glDetailTexFuncSGIS typedef void (APIENTRYP GLEEPFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat * points); GLEE_EXTERN GLEEPFNGLDETAILTEXFUNCSGISPROC GLeeFuncPtr_glDetailTexFuncSGIS; #define glDetailTexFuncSGIS GLeeFuncPtr_glDetailTexFuncSGIS #endif #ifndef GLEE_H_DEFINED_glGetDetailTexFuncSGIS #define GLEE_H_DEFINED_glGetDetailTexFuncSGIS typedef void (APIENTRYP GLEEPFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat * points); GLEE_EXTERN GLEEPFNGLGETDETAILTEXFUNCSGISPROC GLeeFuncPtr_glGetDetailTexFuncSGIS; #define glGetDetailTexFuncSGIS GLeeFuncPtr_glGetDetailTexFuncSGIS #endif #endif /* GL_SGIS_sharpen_texture */ #ifndef GL_SGIS_sharpen_texture #define GL_SGIS_sharpen_texture 1 #define __GLEE_GL_SGIS_sharpen_texture 1 /* Constants */ #define GL_LINEAR_SHARPEN_SGIS 0x80AD #define GL_LINEAR_SHARPEN_ALPHA_SGIS 0x80AE #define GL_LINEAR_SHARPEN_COLOR_SGIS 0x80AF #define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0 #ifndef GLEE_H_DEFINED_glSharpenTexFuncSGIS #define GLEE_H_DEFINED_glSharpenTexFuncSGIS typedef void (APIENTRYP GLEEPFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat * points); GLEE_EXTERN GLEEPFNGLSHARPENTEXFUNCSGISPROC GLeeFuncPtr_glSharpenTexFuncSGIS; #define glSharpenTexFuncSGIS GLeeFuncPtr_glSharpenTexFuncSGIS #endif #ifndef GLEE_H_DEFINED_glGetSharpenTexFuncSGIS #define GLEE_H_DEFINED_glGetSharpenTexFuncSGIS typedef void (APIENTRYP GLEEPFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat * points); GLEE_EXTERN GLEEPFNGLGETSHARPENTEXFUNCSGISPROC GLeeFuncPtr_glGetSharpenTexFuncSGIS; #define glGetSharpenTexFuncSGIS GLeeFuncPtr_glGetSharpenTexFuncSGIS #endif #endif /* GL_EXT_packed_pixels */ #ifndef GL_EXT_packed_pixels #define GL_EXT_packed_pixels 1 #define __GLEE_GL_EXT_packed_pixels 1 /* Constants */ #define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032 #define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033 #define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034 #define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035 #define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036 #endif /* GL_SGIS_texture_lod */ #ifndef GL_SGIS_texture_lod #define GL_SGIS_texture_lod 1 #define __GLEE_GL_SGIS_texture_lod 1 /* Constants */ #define GL_TEXTURE_MIN_LOD_SGIS 0x813A #define GL_TEXTURE_MAX_LOD_SGIS 0x813B #define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C #define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D #endif /* GL_SGIS_multisample */ #ifndef GL_SGIS_multisample #define GL_SGIS_multisample 1 #define __GLEE_GL_SGIS_multisample 1 /* Constants */ #define GL_MULTISAMPLE_SGIS 0x809D #define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E #define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F #define GL_SAMPLE_MASK_SGIS 0x80A0 #define GL_1PASS_SGIS 0x80A1 #define GL_2PASS_0_SGIS 0x80A2 #define GL_2PASS_1_SGIS 0x80A3 #define GL_4PASS_0_SGIS 0x80A4 #define GL_4PASS_1_SGIS 0x80A5 #define GL_4PASS_2_SGIS 0x80A6 #define GL_4PASS_3_SGIS 0x80A7 #define GL_SAMPLE_BUFFERS_SGIS 0x80A8 #define GL_SAMPLES_SGIS 0x80A9 #define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA #define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB #define GL_SAMPLE_PATTERN_SGIS 0x80AC #ifndef GLEE_H_DEFINED_glSampleMaskSGIS #define GLEE_H_DEFINED_glSampleMaskSGIS typedef void (APIENTRYP GLEEPFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert); GLEE_EXTERN GLEEPFNGLSAMPLEMASKSGISPROC GLeeFuncPtr_glSampleMaskSGIS; #define glSampleMaskSGIS GLeeFuncPtr_glSampleMaskSGIS #endif #ifndef GLEE_H_DEFINED_glSamplePatternSGIS #define GLEE_H_DEFINED_glSamplePatternSGIS typedef void (APIENTRYP GLEEPFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern); GLEE_EXTERN GLEEPFNGLSAMPLEPATTERNSGISPROC GLeeFuncPtr_glSamplePatternSGIS; #define glSamplePatternSGIS GLeeFuncPtr_glSamplePatternSGIS #endif #endif /* GL_EXT_rescale_normal */ #ifndef GL_EXT_rescale_normal #define GL_EXT_rescale_normal 1 #define __GLEE_GL_EXT_rescale_normal 1 /* Constants */ #define GL_RESCALE_NORMAL_EXT 0x803A #endif /* GL_EXT_vertex_array */ #ifndef GL_EXT_vertex_array #define GL_EXT_vertex_array 1 #define __GLEE_GL_EXT_vertex_array 1 /* Constants */ #define GL_VERTEX_ARRAY_EXT 0x8074 #define GL_NORMAL_ARRAY_EXT 0x8075 #define GL_COLOR_ARRAY_EXT 0x8076 #define GL_INDEX_ARRAY_EXT 0x8077 #define GL_TEXTURE_COORD_ARRAY_EXT 0x8078 #define GL_EDGE_FLAG_ARRAY_EXT 0x8079 #define GL_VERTEX_ARRAY_SIZE_EXT 0x807A #define GL_VERTEX_ARRAY_TYPE_EXT 0x807B #define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C #define GL_VERTEX_ARRAY_COUNT_EXT 0x807D #define GL_NORMAL_ARRAY_TYPE_EXT 0x807E #define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F #define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 #define GL_COLOR_ARRAY_SIZE_EXT 0x8081 #define GL_COLOR_ARRAY_TYPE_EXT 0x8082 #define GL_COLOR_ARRAY_STRIDE_EXT 0x8083 #define GL_COLOR_ARRAY_COUNT_EXT 0x8084 #define GL_INDEX_ARRAY_TYPE_EXT 0x8085 #define GL_INDEX_ARRAY_STRIDE_EXT 0x8086 #define GL_INDEX_ARRAY_COUNT_EXT 0x8087 #define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 #define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 #define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A #define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B #define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C #define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D #define GL_VERTEX_ARRAY_POINTER_EXT 0x808E #define GL_NORMAL_ARRAY_POINTER_EXT 0x808F #define GL_COLOR_ARRAY_POINTER_EXT 0x8090 #define GL_INDEX_ARRAY_POINTER_EXT 0x8091 #define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 #define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 #ifndef GLEE_H_DEFINED_glArrayElementEXT #define GLEE_H_DEFINED_glArrayElementEXT typedef void (APIENTRYP GLEEPFNGLARRAYELEMENTEXTPROC) (GLint i); GLEE_EXTERN GLEEPFNGLARRAYELEMENTEXTPROC GLeeFuncPtr_glArrayElementEXT; #define glArrayElementEXT GLeeFuncPtr_glArrayElementEXT #endif #ifndef GLEE_H_DEFINED_glColorPointerEXT #define GLEE_H_DEFINED_glColorPointerEXT typedef void (APIENTRYP GLEEPFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLCOLORPOINTEREXTPROC GLeeFuncPtr_glColorPointerEXT; #define glColorPointerEXT GLeeFuncPtr_glColorPointerEXT #endif #ifndef GLEE_H_DEFINED_glDrawArraysEXT #define GLEE_H_DEFINED_glDrawArraysEXT typedef void (APIENTRYP GLEEPFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count); GLEE_EXTERN GLEEPFNGLDRAWARRAYSEXTPROC GLeeFuncPtr_glDrawArraysEXT; #define glDrawArraysEXT GLeeFuncPtr_glDrawArraysEXT #endif #ifndef GLEE_H_DEFINED_glEdgeFlagPointerEXT #define GLEE_H_DEFINED_glEdgeFlagPointerEXT typedef void (APIENTRYP GLEEPFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean * pointer); GLEE_EXTERN GLEEPFNGLEDGEFLAGPOINTEREXTPROC GLeeFuncPtr_glEdgeFlagPointerEXT; #define glEdgeFlagPointerEXT GLeeFuncPtr_glEdgeFlagPointerEXT #endif #ifndef GLEE_H_DEFINED_glGetPointervEXT #define GLEE_H_DEFINED_glGetPointervEXT typedef void (APIENTRYP GLEEPFNGLGETPOINTERVEXTPROC) (GLenum pname, GLvoid* * params); GLEE_EXTERN GLEEPFNGLGETPOINTERVEXTPROC GLeeFuncPtr_glGetPointervEXT; #define glGetPointervEXT GLeeFuncPtr_glGetPointervEXT #endif #ifndef GLEE_H_DEFINED_glIndexPointerEXT #define GLEE_H_DEFINED_glIndexPointerEXT typedef void (APIENTRYP GLEEPFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLINDEXPOINTEREXTPROC GLeeFuncPtr_glIndexPointerEXT; #define glIndexPointerEXT GLeeFuncPtr_glIndexPointerEXT #endif #ifndef GLEE_H_DEFINED_glNormalPointerEXT #define GLEE_H_DEFINED_glNormalPointerEXT typedef void (APIENTRYP GLEEPFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLNORMALPOINTEREXTPROC GLeeFuncPtr_glNormalPointerEXT; #define glNormalPointerEXT GLeeFuncPtr_glNormalPointerEXT #endif #ifndef GLEE_H_DEFINED_glTexCoordPointerEXT #define GLEE_H_DEFINED_glTexCoordPointerEXT typedef void (APIENTRYP GLEEPFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLTEXCOORDPOINTEREXTPROC GLeeFuncPtr_glTexCoordPointerEXT; #define glTexCoordPointerEXT GLeeFuncPtr_glTexCoordPointerEXT #endif #ifndef GLEE_H_DEFINED_glVertexPointerEXT #define GLEE_H_DEFINED_glVertexPointerEXT typedef void (APIENTRYP GLEEPFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLVERTEXPOINTEREXTPROC GLeeFuncPtr_glVertexPointerEXT; #define glVertexPointerEXT GLeeFuncPtr_glVertexPointerEXT #endif #endif /* GL_EXT_misc_attribute */ #ifndef GL_EXT_misc_attribute #define GL_EXT_misc_attribute 1 #define __GLEE_GL_EXT_misc_attribute 1 /* Constants */ #endif /* GL_SGIS_generate_mipmap */ #ifndef GL_SGIS_generate_mipmap #define GL_SGIS_generate_mipmap 1 #define __GLEE_GL_SGIS_generate_mipmap 1 /* Constants */ #define GL_GENERATE_MIPMAP_SGIS 0x8191 #define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 #endif /* GL_SGIX_clipmap */ #ifndef GL_SGIX_clipmap #define GL_SGIX_clipmap 1 #define __GLEE_GL_SGIX_clipmap 1 /* Constants */ #define GL_LINEAR_CLIPMAP_LINEAR_SGIX 0x8170 #define GL_TEXTURE_CLIPMAP_CENTER_SGIX 0x8171 #define GL_TEXTURE_CLIPMAP_FRAME_SGIX 0x8172 #define GL_TEXTURE_CLIPMAP_OFFSET_SGIX 0x8173 #define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174 #define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175 #define GL_TEXTURE_CLIPMAP_DEPTH_SGIX 0x8176 #define GL_MAX_CLIPMAP_DEPTH_SGIX 0x8177 #define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178 #define GL_NEAREST_CLIPMAP_NEAREST_SGIX 0x844D #define GL_NEAREST_CLIPMAP_LINEAR_SGIX 0x844E #define GL_LINEAR_CLIPMAP_NEAREST_SGIX 0x844F #endif /* GL_SGIX_shadow */ #ifndef GL_SGIX_shadow #define GL_SGIX_shadow 1 #define __GLEE_GL_SGIX_shadow 1 /* Constants */ #define GL_TEXTURE_COMPARE_SGIX 0x819A #define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B #define GL_TEXTURE_LEQUAL_R_SGIX 0x819C #define GL_TEXTURE_GEQUAL_R_SGIX 0x819D #endif /* GL_SGIS_texture_edge_clamp */ #ifndef GL_SGIS_texture_edge_clamp #define GL_SGIS_texture_edge_clamp 1 #define __GLEE_GL_SGIS_texture_edge_clamp 1 /* Constants */ #define GL_CLAMP_TO_EDGE_SGIS 0x812F #endif /* GL_SGIS_texture_border_clamp */ #ifndef GL_SGIS_texture_border_clamp #define GL_SGIS_texture_border_clamp 1 #define __GLEE_GL_SGIS_texture_border_clamp 1 /* Constants */ #define GL_CLAMP_TO_BORDER_SGIS 0x812D #endif /* GL_EXT_blend_minmax */ #ifndef GL_EXT_blend_minmax #define GL_EXT_blend_minmax 1 #define __GLEE_GL_EXT_blend_minmax 1 /* Constants */ #define GL_FUNC_ADD_EXT 0x8006 #define GL_MIN_EXT 0x8007 #define GL_MAX_EXT 0x8008 #define GL_BLEND_EQUATION_EXT 0x8009 #ifndef GLEE_H_DEFINED_glBlendEquationEXT #define GLEE_H_DEFINED_glBlendEquationEXT typedef void (APIENTRYP GLEEPFNGLBLENDEQUATIONEXTPROC) (GLenum mode); GLEE_EXTERN GLEEPFNGLBLENDEQUATIONEXTPROC GLeeFuncPtr_glBlendEquationEXT; #define glBlendEquationEXT GLeeFuncPtr_glBlendEquationEXT #endif #endif /* GL_EXT_blend_subtract */ #ifndef GL_EXT_blend_subtract #define GL_EXT_blend_subtract 1 #define __GLEE_GL_EXT_blend_subtract 1 /* Constants */ #define GL_FUNC_SUBTRACT_EXT 0x800A #define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B #endif /* GL_EXT_blend_logic_op */ #ifndef GL_EXT_blend_logic_op #define GL_EXT_blend_logic_op 1 #define __GLEE_GL_EXT_blend_logic_op 1 /* Constants */ #endif /* GL_SGIX_interlace */ #ifndef GL_SGIX_interlace #define GL_SGIX_interlace 1 #define __GLEE_GL_SGIX_interlace 1 /* Constants */ #define GL_INTERLACE_SGIX 0x8094 #endif /* GL_SGIX_pixel_tiles */ #ifndef GL_SGIX_pixel_tiles #define GL_SGIX_pixel_tiles 1 #define __GLEE_GL_SGIX_pixel_tiles 1 /* Constants */ #define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E #define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F #define GL_PIXEL_TILE_WIDTH_SGIX 0x8140 #define GL_PIXEL_TILE_HEIGHT_SGIX 0x8141 #define GL_PIXEL_TILE_GRID_WIDTH_SGIX 0x8142 #define GL_PIXEL_TILE_GRID_HEIGHT_SGIX 0x8143 #define GL_PIXEL_TILE_GRID_DEPTH_SGIX 0x8144 #define GL_PIXEL_TILE_CACHE_SIZE_SGIX 0x8145 #endif /* GL_SGIS_texture_select */ #ifndef GL_SGIS_texture_select #define GL_SGIS_texture_select 1 #define __GLEE_GL_SGIS_texture_select 1 /* Constants */ #define GL_DUAL_ALPHA4_SGIS 0x8110 #define GL_DUAL_ALPHA8_SGIS 0x8111 #define GL_DUAL_ALPHA12_SGIS 0x8112 #define GL_DUAL_ALPHA16_SGIS 0x8113 #define GL_DUAL_LUMINANCE4_SGIS 0x8114 #define GL_DUAL_LUMINANCE8_SGIS 0x8115 #define GL_DUAL_LUMINANCE12_SGIS 0x8116 #define GL_DUAL_LUMINANCE16_SGIS 0x8117 #define GL_DUAL_INTENSITY4_SGIS 0x8118 #define GL_DUAL_INTENSITY8_SGIS 0x8119 #define GL_DUAL_INTENSITY12_SGIS 0x811A #define GL_DUAL_INTENSITY16_SGIS 0x811B #define GL_DUAL_LUMINANCE_ALPHA4_SGIS 0x811C #define GL_DUAL_LUMINANCE_ALPHA8_SGIS 0x811D #define GL_QUAD_ALPHA4_SGIS 0x811E #define GL_QUAD_ALPHA8_SGIS 0x811F #define GL_QUAD_LUMINANCE4_SGIS 0x8120 #define GL_QUAD_LUMINANCE8_SGIS 0x8121 #define GL_QUAD_INTENSITY4_SGIS 0x8122 #define GL_QUAD_INTENSITY8_SGIS 0x8123 #define GL_DUAL_TEXTURE_SELECT_SGIS 0x8124 #define GL_QUAD_TEXTURE_SELECT_SGIS 0x8125 #endif /* GL_SGIX_sprite */ #ifndef GL_SGIX_sprite #define GL_SGIX_sprite 1 #define __GLEE_GL_SGIX_sprite 1 /* Constants */ #define GL_SPRITE_SGIX 0x8148 #define GL_SPRITE_MODE_SGIX 0x8149 #define GL_SPRITE_AXIS_SGIX 0x814A #define GL_SPRITE_TRANSLATION_SGIX 0x814B #define GL_SPRITE_AXIAL_SGIX 0x814C #define GL_SPRITE_OBJECT_ALIGNED_SGIX 0x814D #define GL_SPRITE_EYE_ALIGNED_SGIX 0x814E #ifndef GLEE_H_DEFINED_glSpriteParameterfSGIX #define GLEE_H_DEFINED_glSpriteParameterfSGIX typedef void (APIENTRYP GLEEPFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLSPRITEPARAMETERFSGIXPROC GLeeFuncPtr_glSpriteParameterfSGIX; #define glSpriteParameterfSGIX GLeeFuncPtr_glSpriteParameterfSGIX #endif #ifndef GLEE_H_DEFINED_glSpriteParameterfvSGIX #define GLEE_H_DEFINED_glSpriteParameterfvSGIX typedef void (APIENTRYP GLEEPFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLSPRITEPARAMETERFVSGIXPROC GLeeFuncPtr_glSpriteParameterfvSGIX; #define glSpriteParameterfvSGIX GLeeFuncPtr_glSpriteParameterfvSGIX #endif #ifndef GLEE_H_DEFINED_glSpriteParameteriSGIX #define GLEE_H_DEFINED_glSpriteParameteriSGIX typedef void (APIENTRYP GLEEPFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLSPRITEPARAMETERISGIXPROC GLeeFuncPtr_glSpriteParameteriSGIX; #define glSpriteParameteriSGIX GLeeFuncPtr_glSpriteParameteriSGIX #endif #ifndef GLEE_H_DEFINED_glSpriteParameterivSGIX #define GLEE_H_DEFINED_glSpriteParameterivSGIX typedef void (APIENTRYP GLEEPFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLSPRITEPARAMETERIVSGIXPROC GLeeFuncPtr_glSpriteParameterivSGIX; #define glSpriteParameterivSGIX GLeeFuncPtr_glSpriteParameterivSGIX #endif #endif /* GL_SGIX_texture_multi_buffer */ #ifndef GL_SGIX_texture_multi_buffer #define GL_SGIX_texture_multi_buffer 1 #define __GLEE_GL_SGIX_texture_multi_buffer 1 /* Constants */ #define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E #endif /* GL_EXT_point_parameters */ #ifndef GL_EXT_point_parameters #define GL_EXT_point_parameters 1 #define __GLEE_GL_EXT_point_parameters 1 /* Constants */ #define GL_POINT_SIZE_MIN_EXT 0x8126 #define GL_POINT_SIZE_MAX_EXT 0x8127 #define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 #define GL_DISTANCE_ATTENUATION_EXT 0x8129 #ifndef GLEE_H_DEFINED_glPointParameterfEXT #define GLEE_H_DEFINED_glPointParameterfEXT typedef void (APIENTRYP GLEEPFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLPOINTPARAMETERFEXTPROC GLeeFuncPtr_glPointParameterfEXT; #define glPointParameterfEXT GLeeFuncPtr_glPointParameterfEXT #endif #ifndef GLEE_H_DEFINED_glPointParameterfvEXT #define GLEE_H_DEFINED_glPointParameterfvEXT typedef void (APIENTRYP GLEEPFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLPOINTPARAMETERFVEXTPROC GLeeFuncPtr_glPointParameterfvEXT; #define glPointParameterfvEXT GLeeFuncPtr_glPointParameterfvEXT #endif #endif /* GL_SGIS_point_parameters */ #ifndef GL_SGIS_point_parameters #define GL_SGIS_point_parameters 1 #define __GLEE_GL_SGIS_point_parameters 1 /* Constants */ #define GL_POINT_SIZE_MIN_SGIS 0x8126 #define GL_POINT_SIZE_MAX_SGIS 0x8127 #define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128 #define GL_DISTANCE_ATTENUATION_SGIS 0x8129 #ifndef GLEE_H_DEFINED_glPointParameterfSGIS #define GLEE_H_DEFINED_glPointParameterfSGIS typedef void (APIENTRYP GLEEPFNGLPOINTPARAMETERFSGISPROC) (GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLPOINTPARAMETERFSGISPROC GLeeFuncPtr_glPointParameterfSGIS; #define glPointParameterfSGIS GLeeFuncPtr_glPointParameterfSGIS #endif #ifndef GLEE_H_DEFINED_glPointParameterfvSGIS #define GLEE_H_DEFINED_glPointParameterfvSGIS typedef void (APIENTRYP GLEEPFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLPOINTPARAMETERFVSGISPROC GLeeFuncPtr_glPointParameterfvSGIS; #define glPointParameterfvSGIS GLeeFuncPtr_glPointParameterfvSGIS #endif #endif /* GL_SGIX_instruments */ #ifndef GL_SGIX_instruments #define GL_SGIX_instruments 1 #define __GLEE_GL_SGIX_instruments 1 /* Constants */ #define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180 #define GL_INSTRUMENT_MEASUREMENTS_SGIX 0x8181 #ifndef GLEE_H_DEFINED_glGetInstrumentsSGIX #define GLEE_H_DEFINED_glGetInstrumentsSGIX typedef GLint (APIENTRYP GLEEPFNGLGETINSTRUMENTSSGIXPROC) (); GLEE_EXTERN GLEEPFNGLGETINSTRUMENTSSGIXPROC GLeeFuncPtr_glGetInstrumentsSGIX; #define glGetInstrumentsSGIX GLeeFuncPtr_glGetInstrumentsSGIX #endif #ifndef GLEE_H_DEFINED_glInstrumentsBufferSGIX #define GLEE_H_DEFINED_glInstrumentsBufferSGIX typedef void (APIENTRYP GLEEPFNGLINSTRUMENTSBUFFERSGIXPROC) (GLsizei size, GLint * buffer); GLEE_EXTERN GLEEPFNGLINSTRUMENTSBUFFERSGIXPROC GLeeFuncPtr_glInstrumentsBufferSGIX; #define glInstrumentsBufferSGIX GLeeFuncPtr_glInstrumentsBufferSGIX #endif #ifndef GLEE_H_DEFINED_glPollInstrumentsSGIX #define GLEE_H_DEFINED_glPollInstrumentsSGIX typedef GLint (APIENTRYP GLEEPFNGLPOLLINSTRUMENTSSGIXPROC) (GLint * marker_p); GLEE_EXTERN GLEEPFNGLPOLLINSTRUMENTSSGIXPROC GLeeFuncPtr_glPollInstrumentsSGIX; #define glPollInstrumentsSGIX GLeeFuncPtr_glPollInstrumentsSGIX #endif #ifndef GLEE_H_DEFINED_glReadInstrumentsSGIX #define GLEE_H_DEFINED_glReadInstrumentsSGIX typedef void (APIENTRYP GLEEPFNGLREADINSTRUMENTSSGIXPROC) (GLint marker); GLEE_EXTERN GLEEPFNGLREADINSTRUMENTSSGIXPROC GLeeFuncPtr_glReadInstrumentsSGIX; #define glReadInstrumentsSGIX GLeeFuncPtr_glReadInstrumentsSGIX #endif #ifndef GLEE_H_DEFINED_glStartInstrumentsSGIX #define GLEE_H_DEFINED_glStartInstrumentsSGIX typedef void (APIENTRYP GLEEPFNGLSTARTINSTRUMENTSSGIXPROC) (); GLEE_EXTERN GLEEPFNGLSTARTINSTRUMENTSSGIXPROC GLeeFuncPtr_glStartInstrumentsSGIX; #define glStartInstrumentsSGIX GLeeFuncPtr_glStartInstrumentsSGIX #endif #ifndef GLEE_H_DEFINED_glStopInstrumentsSGIX #define GLEE_H_DEFINED_glStopInstrumentsSGIX typedef void (APIENTRYP GLEEPFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker); GLEE_EXTERN GLEEPFNGLSTOPINSTRUMENTSSGIXPROC GLeeFuncPtr_glStopInstrumentsSGIX; #define glStopInstrumentsSGIX GLeeFuncPtr_glStopInstrumentsSGIX #endif #endif /* GL_SGIX_texture_scale_bias */ #ifndef GL_SGIX_texture_scale_bias #define GL_SGIX_texture_scale_bias 1 #define __GLEE_GL_SGIX_texture_scale_bias 1 /* Constants */ #define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179 #define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A #define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B #define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C #endif /* GL_SGIX_framezoom */ #ifndef GL_SGIX_framezoom #define GL_SGIX_framezoom 1 #define __GLEE_GL_SGIX_framezoom 1 /* Constants */ #define GL_FRAMEZOOM_SGIX 0x818B #define GL_FRAMEZOOM_FACTOR_SGIX 0x818C #define GL_MAX_FRAMEZOOM_FACTOR_SGIX 0x818D #ifndef GLEE_H_DEFINED_glFrameZoomSGIX #define GLEE_H_DEFINED_glFrameZoomSGIX typedef void (APIENTRYP GLEEPFNGLFRAMEZOOMSGIXPROC) (GLint factor); GLEE_EXTERN GLEEPFNGLFRAMEZOOMSGIXPROC GLeeFuncPtr_glFrameZoomSGIX; #define glFrameZoomSGIX GLeeFuncPtr_glFrameZoomSGIX #endif #endif /* GL_SGIX_tag_sample_buffer */ #ifndef GL_SGIX_tag_sample_buffer #define GL_SGIX_tag_sample_buffer 1 #define __GLEE_GL_SGIX_tag_sample_buffer 1 /* Constants */ #ifndef GLEE_H_DEFINED_glTagSampleBufferSGIX #define GLEE_H_DEFINED_glTagSampleBufferSGIX typedef void (APIENTRYP GLEEPFNGLTAGSAMPLEBUFFERSGIXPROC) (); GLEE_EXTERN GLEEPFNGLTAGSAMPLEBUFFERSGIXPROC GLeeFuncPtr_glTagSampleBufferSGIX; #define glTagSampleBufferSGIX GLeeFuncPtr_glTagSampleBufferSGIX #endif #endif /* GL_FfdMaskSGIX */ #ifndef GL_FfdMaskSGIX #define GL_FfdMaskSGIX 1 #define __GLEE_GL_FfdMaskSGIX 1 /* Constants */ #define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x00000001 #define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x00000002 #endif /* GL_SGIX_polynomial_ffd */ #ifndef GL_SGIX_polynomial_ffd #define GL_SGIX_polynomial_ffd 1 #define __GLEE_GL_SGIX_polynomial_ffd 1 /* Constants */ #define GL_GEOMETRY_DEFORMATION_SGIX 0x8194 #define GL_TEXTURE_DEFORMATION_SGIX 0x8195 #define GL_DEFORMATIONS_MASK_SGIX 0x8196 #define GL_MAX_DEFORMATION_ORDER_SGIX 0x8197 #ifndef GLEE_H_DEFINED_glDeformationMap3dSGIX #define GLEE_H_DEFINED_glDeformationMap3dSGIX typedef void (APIENTRYP GLEEPFNGLDEFORMATIONMAP3DSGIXPROC) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble * points); GLEE_EXTERN GLEEPFNGLDEFORMATIONMAP3DSGIXPROC GLeeFuncPtr_glDeformationMap3dSGIX; #define glDeformationMap3dSGIX GLeeFuncPtr_glDeformationMap3dSGIX #endif #ifndef GLEE_H_DEFINED_glDeformationMap3fSGIX #define GLEE_H_DEFINED_glDeformationMap3fSGIX typedef void (APIENTRYP GLEEPFNGLDEFORMATIONMAP3FSGIXPROC) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat * points); GLEE_EXTERN GLEEPFNGLDEFORMATIONMAP3FSGIXPROC GLeeFuncPtr_glDeformationMap3fSGIX; #define glDeformationMap3fSGIX GLeeFuncPtr_glDeformationMap3fSGIX #endif #ifndef GLEE_H_DEFINED_glDeformSGIX #define GLEE_H_DEFINED_glDeformSGIX typedef void (APIENTRYP GLEEPFNGLDEFORMSGIXPROC) (GLbitfield mask); GLEE_EXTERN GLEEPFNGLDEFORMSGIXPROC GLeeFuncPtr_glDeformSGIX; #define glDeformSGIX GLeeFuncPtr_glDeformSGIX #endif #ifndef GLEE_H_DEFINED_glLoadIdentityDeformationMapSGIX #define GLEE_H_DEFINED_glLoadIdentityDeformationMapSGIX typedef void (APIENTRYP GLEEPFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mask); GLEE_EXTERN GLEEPFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC GLeeFuncPtr_glLoadIdentityDeformationMapSGIX; #define glLoadIdentityDeformationMapSGIX GLeeFuncPtr_glLoadIdentityDeformationMapSGIX #endif #endif /* GL_SGIX_reference_plane */ #ifndef GL_SGIX_reference_plane #define GL_SGIX_reference_plane 1 #define __GLEE_GL_SGIX_reference_plane 1 /* Constants */ #define GL_REFERENCE_PLANE_SGIX 0x817D #define GL_REFERENCE_PLANE_EQUATION_SGIX 0x817E #ifndef GLEE_H_DEFINED_glReferencePlaneSGIX #define GLEE_H_DEFINED_glReferencePlaneSGIX typedef void (APIENTRYP GLEEPFNGLREFERENCEPLANESGIXPROC) (const GLdouble * equation); GLEE_EXTERN GLEEPFNGLREFERENCEPLANESGIXPROC GLeeFuncPtr_glReferencePlaneSGIX; #define glReferencePlaneSGIX GLeeFuncPtr_glReferencePlaneSGIX #endif #endif /* GL_SGIX_flush_raster */ #ifndef GL_SGIX_flush_raster #define GL_SGIX_flush_raster 1 #define __GLEE_GL_SGIX_flush_raster 1 /* Constants */ #ifndef GLEE_H_DEFINED_glFlushRasterSGIX #define GLEE_H_DEFINED_glFlushRasterSGIX typedef void (APIENTRYP GLEEPFNGLFLUSHRASTERSGIXPROC) (); GLEE_EXTERN GLEEPFNGLFLUSHRASTERSGIXPROC GLeeFuncPtr_glFlushRasterSGIX; #define glFlushRasterSGIX GLeeFuncPtr_glFlushRasterSGIX #endif #endif /* GL_SGIX_depth_texture */ #ifndef GL_SGIX_depth_texture #define GL_SGIX_depth_texture 1 #define __GLEE_GL_SGIX_depth_texture 1 /* Constants */ #define GL_DEPTH_COMPONENT16_SGIX 0x81A5 #define GL_DEPTH_COMPONENT24_SGIX 0x81A6 #define GL_DEPTH_COMPONENT32_SGIX 0x81A7 #endif /* GL_SGIS_fog_function */ #ifndef GL_SGIS_fog_function #define GL_SGIS_fog_function 1 #define __GLEE_GL_SGIS_fog_function 1 /* Constants */ #define GL_FOG_FUNC_SGIS 0x812A #define GL_FOG_FUNC_POINTS_SGIS 0x812B #define GL_MAX_FOG_FUNC_POINTS_SGIS 0x812C #ifndef GLEE_H_DEFINED_glFogFuncSGIS #define GLEE_H_DEFINED_glFogFuncSGIS typedef void (APIENTRYP GLEEPFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat * points); GLEE_EXTERN GLEEPFNGLFOGFUNCSGISPROC GLeeFuncPtr_glFogFuncSGIS; #define glFogFuncSGIS GLeeFuncPtr_glFogFuncSGIS #endif #ifndef GLEE_H_DEFINED_glGetFogFuncSGIS #define GLEE_H_DEFINED_glGetFogFuncSGIS typedef void (APIENTRYP GLEEPFNGLGETFOGFUNCSGISPROC) (GLfloat * points); GLEE_EXTERN GLEEPFNGLGETFOGFUNCSGISPROC GLeeFuncPtr_glGetFogFuncSGIS; #define glGetFogFuncSGIS GLeeFuncPtr_glGetFogFuncSGIS #endif #endif /* GL_SGIX_fog_offset */ #ifndef GL_SGIX_fog_offset #define GL_SGIX_fog_offset 1 #define __GLEE_GL_SGIX_fog_offset 1 /* Constants */ #define GL_FOG_OFFSET_SGIX 0x8198 #define GL_FOG_OFFSET_VALUE_SGIX 0x8199 #endif /* GL_HP_image_transform */ #ifndef GL_HP_image_transform #define GL_HP_image_transform 1 #define __GLEE_GL_HP_image_transform 1 /* Constants */ #define GL_IMAGE_SCALE_X_HP 0x8155 #define GL_IMAGE_SCALE_Y_HP 0x8156 #define GL_IMAGE_TRANSLATE_X_HP 0x8157 #define GL_IMAGE_TRANSLATE_Y_HP 0x8158 #define GL_IMAGE_ROTATE_ANGLE_HP 0x8159 #define GL_IMAGE_ROTATE_ORIGIN_X_HP 0x815A #define GL_IMAGE_ROTATE_ORIGIN_Y_HP 0x815B #define GL_IMAGE_MAG_FILTER_HP 0x815C #define GL_IMAGE_MIN_FILTER_HP 0x815D #define GL_IMAGE_CUBIC_WEIGHT_HP 0x815E #define GL_CUBIC_HP 0x815F #define GL_AVERAGE_HP 0x8160 #define GL_IMAGE_TRANSFORM_2D_HP 0x8161 #define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162 #define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163 #ifndef GLEE_H_DEFINED_glImageTransformParameteriHP #define GLEE_H_DEFINED_glImageTransformParameteriHP typedef void (APIENTRYP GLEEPFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLIMAGETRANSFORMPARAMETERIHPPROC GLeeFuncPtr_glImageTransformParameteriHP; #define glImageTransformParameteriHP GLeeFuncPtr_glImageTransformParameteriHP #endif #ifndef GLEE_H_DEFINED_glImageTransformParameterfHP #define GLEE_H_DEFINED_glImageTransformParameterfHP typedef void (APIENTRYP GLEEPFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLIMAGETRANSFORMPARAMETERFHPPROC GLeeFuncPtr_glImageTransformParameterfHP; #define glImageTransformParameterfHP GLeeFuncPtr_glImageTransformParameterfHP #endif #ifndef GLEE_H_DEFINED_glImageTransformParameterivHP #define GLEE_H_DEFINED_glImageTransformParameterivHP typedef void (APIENTRYP GLEEPFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLIMAGETRANSFORMPARAMETERIVHPPROC GLeeFuncPtr_glImageTransformParameterivHP; #define glImageTransformParameterivHP GLeeFuncPtr_glImageTransformParameterivHP #endif #ifndef GLEE_H_DEFINED_glImageTransformParameterfvHP #define GLEE_H_DEFINED_glImageTransformParameterfvHP typedef void (APIENTRYP GLEEPFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLIMAGETRANSFORMPARAMETERFVHPPROC GLeeFuncPtr_glImageTransformParameterfvHP; #define glImageTransformParameterfvHP GLeeFuncPtr_glImageTransformParameterfvHP #endif #ifndef GLEE_H_DEFINED_glGetImageTransformParameterivHP #define GLEE_H_DEFINED_glGetImageTransformParameterivHP typedef void (APIENTRYP GLEEPFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC GLeeFuncPtr_glGetImageTransformParameterivHP; #define glGetImageTransformParameterivHP GLeeFuncPtr_glGetImageTransformParameterivHP #endif #ifndef GLEE_H_DEFINED_glGetImageTransformParameterfvHP #define GLEE_H_DEFINED_glGetImageTransformParameterfvHP typedef void (APIENTRYP GLEEPFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC GLeeFuncPtr_glGetImageTransformParameterfvHP; #define glGetImageTransformParameterfvHP GLeeFuncPtr_glGetImageTransformParameterfvHP #endif #endif /* GL_HP_convolution_border_modes */ #ifndef GL_HP_convolution_border_modes #define GL_HP_convolution_border_modes 1 #define __GLEE_GL_HP_convolution_border_modes 1 /* Constants */ #define GL_IGNORE_BORDER_HP 0x8150 #define GL_CONSTANT_BORDER_HP 0x8151 #define GL_REPLICATE_BORDER_HP 0x8153 #define GL_CONVOLUTION_BORDER_COLOR_HP 0x8154 #endif /* GL_INGR_palette_buffer */ #ifndef GL_INGR_palette_buffer #define GL_INGR_palette_buffer 1 #define __GLEE_GL_INGR_palette_buffer 1 /* Constants */ #endif /* GL_SGIX_texture_add_env */ #ifndef GL_SGIX_texture_add_env #define GL_SGIX_texture_add_env 1 #define __GLEE_GL_SGIX_texture_add_env 1 /* Constants */ #define GL_TEXTURE_ENV_BIAS_SGIX 0x80BE #endif /* GL_EXT_color_subtable */ #ifndef GL_EXT_color_subtable #define GL_EXT_color_subtable 1 #define __GLEE_GL_EXT_color_subtable 1 /* Constants */ #ifndef GLEE_H_DEFINED_glColorSubTableEXT #define GLEE_H_DEFINED_glColorSubTableEXT typedef void (APIENTRYP GLEEPFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid * data); GLEE_EXTERN GLEEPFNGLCOLORSUBTABLEEXTPROC GLeeFuncPtr_glColorSubTableEXT; #define glColorSubTableEXT GLeeFuncPtr_glColorSubTableEXT #endif #ifndef GLEE_H_DEFINED_glCopyColorSubTableEXT #define GLEE_H_DEFINED_glCopyColorSubTableEXT typedef void (APIENTRYP GLEEPFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); GLEE_EXTERN GLEEPFNGLCOPYCOLORSUBTABLEEXTPROC GLeeFuncPtr_glCopyColorSubTableEXT; #define glCopyColorSubTableEXT GLeeFuncPtr_glCopyColorSubTableEXT #endif #endif /* GL_PGI_vertex_hints */ #ifndef GL_PGI_vertex_hints #define GL_PGI_vertex_hints 1 #define __GLEE_GL_PGI_vertex_hints 1 /* Constants */ #define GL_VERTEX_DATA_HINT_PGI 0x1A22A #define GL_VERTEX_CONSISTENT_HINT_PGI 0x1A22B #define GL_MATERIAL_SIDE_HINT_PGI 0x1A22C #define GL_MAX_VERTEX_HINT_PGI 0x1A22D #define GL_COLOR3_BIT_PGI 0x00010000 #define GL_COLOR4_BIT_PGI 0x00020000 #define GL_EDGEFLAG_BIT_PGI 0x00040000 #define GL_INDEX_BIT_PGI 0x00080000 #define GL_MAT_AMBIENT_BIT_PGI 0x00100000 #define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000 #define GL_MAT_DIFFUSE_BIT_PGI 0x00400000 #define GL_MAT_EMISSION_BIT_PGI 0x00800000 #define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000 #define GL_MAT_SHININESS_BIT_PGI 0x02000000 #define GL_MAT_SPECULAR_BIT_PGI 0x04000000 #define GL_NORMAL_BIT_PGI 0x08000000 #define GL_TEXCOORD1_BIT_PGI 0x10000000 #define GL_TEXCOORD2_BIT_PGI 0x20000000 #define GL_TEXCOORD3_BIT_PGI 0x40000000 #define GL_TEXCOORD4_BIT_PGI 0x80000000 #define GL_VERTEX23_BIT_PGI 0x00000004 #define GL_VERTEX4_BIT_PGI 0x00000008 #endif /* GL_PGI_misc_hints */ #ifndef GL_PGI_misc_hints #define GL_PGI_misc_hints 1 #define __GLEE_GL_PGI_misc_hints 1 /* Constants */ #define GL_PREFER_DOUBLEBUFFER_HINT_PGI 0x1A1F8 #define GL_CONSERVE_MEMORY_HINT_PGI 0x1A1FD #define GL_RECLAIM_MEMORY_HINT_PGI 0x1A1FE #define GL_NATIVE_GRAPHICS_HANDLE_PGI 0x1A202 #define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203 #define GL_NATIVE_GRAPHICS_END_HINT_PGI 0x1A204 #define GL_ALWAYS_FAST_HINT_PGI 0x1A20C #define GL_ALWAYS_SOFT_HINT_PGI 0x1A20D #define GL_ALLOW_DRAW_OBJ_HINT_PGI 0x1A20E #define GL_ALLOW_DRAW_WIN_HINT_PGI 0x1A20F #define GL_ALLOW_DRAW_FRG_HINT_PGI 0x1A210 #define GL_ALLOW_DRAW_MEM_HINT_PGI 0x1A211 #define GL_STRICT_DEPTHFUNC_HINT_PGI 0x1A216 #define GL_STRICT_LIGHTING_HINT_PGI 0x1A217 #define GL_STRICT_SCISSOR_HINT_PGI 0x1A218 #define GL_FULL_STIPPLE_HINT_PGI 0x1A219 #define GL_CLIP_NEAR_HINT_PGI 0x1A220 #define GL_CLIP_FAR_HINT_PGI 0x1A221 #define GL_WIDE_LINE_HINT_PGI 0x1A222 #define GL_BACK_NORMALS_HINT_PGI 0x1A223 #ifndef GLEE_H_DEFINED_glHintPGI #define GLEE_H_DEFINED_glHintPGI typedef void (APIENTRYP GLEEPFNGLHINTPGIPROC) (GLenum target, GLint mode); GLEE_EXTERN GLEEPFNGLHINTPGIPROC GLeeFuncPtr_glHintPGI; #define glHintPGI GLeeFuncPtr_glHintPGI #endif #endif /* GL_EXT_paletted_texture */ #ifndef GL_EXT_paletted_texture #define GL_EXT_paletted_texture 1 #define __GLEE_GL_EXT_paletted_texture 1 /* Constants */ #define GL_COLOR_INDEX1_EXT 0x80E2 #define GL_COLOR_INDEX2_EXT 0x80E3 #define GL_COLOR_INDEX4_EXT 0x80E4 #define GL_COLOR_INDEX8_EXT 0x80E5 #define GL_COLOR_INDEX12_EXT 0x80E6 #define GL_COLOR_INDEX16_EXT 0x80E7 #define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED #ifndef GLEE_H_DEFINED_glColorTableEXT #define GLEE_H_DEFINED_glColorTableEXT typedef void (APIENTRYP GLEEPFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid * table); GLEE_EXTERN GLEEPFNGLCOLORTABLEEXTPROC GLeeFuncPtr_glColorTableEXT; #define glColorTableEXT GLeeFuncPtr_glColorTableEXT #endif #ifndef GLEE_H_DEFINED_glGetColorTableEXT #define GLEE_H_DEFINED_glGetColorTableEXT typedef void (APIENTRYP GLEEPFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid * data); GLEE_EXTERN GLEEPFNGLGETCOLORTABLEEXTPROC GLeeFuncPtr_glGetColorTableEXT; #define glGetColorTableEXT GLeeFuncPtr_glGetColorTableEXT #endif #ifndef GLEE_H_DEFINED_glGetColorTableParameterivEXT #define GLEE_H_DEFINED_glGetColorTableParameterivEXT typedef void (APIENTRYP GLEEPFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETCOLORTABLEPARAMETERIVEXTPROC GLeeFuncPtr_glGetColorTableParameterivEXT; #define glGetColorTableParameterivEXT GLeeFuncPtr_glGetColorTableParameterivEXT #endif #ifndef GLEE_H_DEFINED_glGetColorTableParameterfvEXT #define GLEE_H_DEFINED_glGetColorTableParameterfvEXT typedef void (APIENTRYP GLEEPFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETCOLORTABLEPARAMETERFVEXTPROC GLeeFuncPtr_glGetColorTableParameterfvEXT; #define glGetColorTableParameterfvEXT GLeeFuncPtr_glGetColorTableParameterfvEXT #endif #endif /* GL_EXT_clip_volume_hint */ #ifndef GL_EXT_clip_volume_hint #define GL_EXT_clip_volume_hint 1 #define __GLEE_GL_EXT_clip_volume_hint 1 /* Constants */ #define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 #endif /* GL_SGIX_list_priority */ #ifndef GL_SGIX_list_priority #define GL_SGIX_list_priority 1 #define __GLEE_GL_SGIX_list_priority 1 /* Constants */ #define GL_LIST_PRIORITY_SGIX 0x8182 #ifndef GLEE_H_DEFINED_glGetListParameterfvSGIX #define GLEE_H_DEFINED_glGetListParameterfvSGIX typedef void (APIENTRYP GLEEPFNGLGETLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETLISTPARAMETERFVSGIXPROC GLeeFuncPtr_glGetListParameterfvSGIX; #define glGetListParameterfvSGIX GLeeFuncPtr_glGetListParameterfvSGIX #endif #ifndef GLEE_H_DEFINED_glGetListParameterivSGIX #define GLEE_H_DEFINED_glGetListParameterivSGIX typedef void (APIENTRYP GLEEPFNGLGETLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETLISTPARAMETERIVSGIXPROC GLeeFuncPtr_glGetListParameterivSGIX; #define glGetListParameterivSGIX GLeeFuncPtr_glGetListParameterivSGIX #endif #ifndef GLEE_H_DEFINED_glListParameterfSGIX #define GLEE_H_DEFINED_glListParameterfSGIX typedef void (APIENTRYP GLEEPFNGLLISTPARAMETERFSGIXPROC) (GLuint list, GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLLISTPARAMETERFSGIXPROC GLeeFuncPtr_glListParameterfSGIX; #define glListParameterfSGIX GLeeFuncPtr_glListParameterfSGIX #endif #ifndef GLEE_H_DEFINED_glListParameterfvSGIX #define GLEE_H_DEFINED_glListParameterfvSGIX typedef void (APIENTRYP GLEEPFNGLLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLLISTPARAMETERFVSGIXPROC GLeeFuncPtr_glListParameterfvSGIX; #define glListParameterfvSGIX GLeeFuncPtr_glListParameterfvSGIX #endif #ifndef GLEE_H_DEFINED_glListParameteriSGIX #define GLEE_H_DEFINED_glListParameteriSGIX typedef void (APIENTRYP GLEEPFNGLLISTPARAMETERISGIXPROC) (GLuint list, GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLLISTPARAMETERISGIXPROC GLeeFuncPtr_glListParameteriSGIX; #define glListParameteriSGIX GLeeFuncPtr_glListParameteriSGIX #endif #ifndef GLEE_H_DEFINED_glListParameterivSGIX #define GLEE_H_DEFINED_glListParameterivSGIX typedef void (APIENTRYP GLEEPFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLLISTPARAMETERIVSGIXPROC GLeeFuncPtr_glListParameterivSGIX; #define glListParameterivSGIX GLeeFuncPtr_glListParameterivSGIX #endif #endif /* GL_SGIX_ir_instrument1 */ #ifndef GL_SGIX_ir_instrument1 #define GL_SGIX_ir_instrument1 1 #define __GLEE_GL_SGIX_ir_instrument1 1 /* Constants */ #define GL_IR_INSTRUMENT1_SGIX 0x817F #endif /* GL_SGIX_calligraphic_fragment */ #ifndef GL_SGIX_calligraphic_fragment #define GL_SGIX_calligraphic_fragment 1 #define __GLEE_GL_SGIX_calligraphic_fragment 1 /* Constants */ #define GL_CALLIGRAPHIC_FRAGMENT_SGIX 0x8183 #endif /* GL_SGIX_texture_lod_bias */ #ifndef GL_SGIX_texture_lod_bias #define GL_SGIX_texture_lod_bias 1 #define __GLEE_GL_SGIX_texture_lod_bias 1 /* Constants */ #define GL_TEXTURE_LOD_BIAS_S_SGIX 0x818E #define GL_TEXTURE_LOD_BIAS_T_SGIX 0x818F #define GL_TEXTURE_LOD_BIAS_R_SGIX 0x8190 #endif /* GL_SGIX_shadow_ambient */ #ifndef GL_SGIX_shadow_ambient #define GL_SGIX_shadow_ambient 1 #define __GLEE_GL_SGIX_shadow_ambient 1 /* Constants */ #define GL_SHADOW_AMBIENT_SGIX 0x80BF #endif /* GL_EXT_index_texture */ #ifndef GL_EXT_index_texture #define GL_EXT_index_texture 1 #define __GLEE_GL_EXT_index_texture 1 /* Constants */ #endif /* GL_EXT_index_material */ #ifndef GL_EXT_index_material #define GL_EXT_index_material 1 #define __GLEE_GL_EXT_index_material 1 /* Constants */ #define GL_INDEX_MATERIAL_EXT 0x81B8 #define GL_INDEX_MATERIAL_PARAMETER_EXT 0x81B9 #define GL_INDEX_MATERIAL_FACE_EXT 0x81BA #ifndef GLEE_H_DEFINED_glIndexMaterialEXT #define GLEE_H_DEFINED_glIndexMaterialEXT typedef void (APIENTRYP GLEEPFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode); GLEE_EXTERN GLEEPFNGLINDEXMATERIALEXTPROC GLeeFuncPtr_glIndexMaterialEXT; #define glIndexMaterialEXT GLeeFuncPtr_glIndexMaterialEXT #endif #endif /* GL_EXT_index_func */ #ifndef GL_EXT_index_func #define GL_EXT_index_func 1 #define __GLEE_GL_EXT_index_func 1 /* Constants */ #define GL_INDEX_TEST_EXT 0x81B5 #define GL_INDEX_TEST_FUNC_EXT 0x81B6 #define GL_INDEX_TEST_REF_EXT 0x81B7 #ifndef GLEE_H_DEFINED_glIndexFuncEXT #define GLEE_H_DEFINED_glIndexFuncEXT typedef void (APIENTRYP GLEEPFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref); GLEE_EXTERN GLEEPFNGLINDEXFUNCEXTPROC GLeeFuncPtr_glIndexFuncEXT; #define glIndexFuncEXT GLeeFuncPtr_glIndexFuncEXT #endif #endif /* GL_EXT_index_array_formats */ #ifndef GL_EXT_index_array_formats #define GL_EXT_index_array_formats 1 #define __GLEE_GL_EXT_index_array_formats 1 /* Constants */ #define GL_IUI_V2F_EXT 0x81AD #define GL_IUI_V3F_EXT 0x81AE #define GL_IUI_N3F_V2F_EXT 0x81AF #define GL_IUI_N3F_V3F_EXT 0x81B0 #define GL_T2F_IUI_V2F_EXT 0x81B1 #define GL_T2F_IUI_V3F_EXT 0x81B2 #define GL_T2F_IUI_N3F_V2F_EXT 0x81B3 #define GL_T2F_IUI_N3F_V3F_EXT 0x81B4 #endif /* GL_EXT_compiled_vertex_array */ #ifndef GL_EXT_compiled_vertex_array #define GL_EXT_compiled_vertex_array 1 #define __GLEE_GL_EXT_compiled_vertex_array 1 /* Constants */ #define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8 #define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9 #ifndef GLEE_H_DEFINED_glLockArraysEXT #define GLEE_H_DEFINED_glLockArraysEXT typedef void (APIENTRYP GLEEPFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count); GLEE_EXTERN GLEEPFNGLLOCKARRAYSEXTPROC GLeeFuncPtr_glLockArraysEXT; #define glLockArraysEXT GLeeFuncPtr_glLockArraysEXT #endif #ifndef GLEE_H_DEFINED_glUnlockArraysEXT #define GLEE_H_DEFINED_glUnlockArraysEXT typedef void (APIENTRYP GLEEPFNGLUNLOCKARRAYSEXTPROC) (); GLEE_EXTERN GLEEPFNGLUNLOCKARRAYSEXTPROC GLeeFuncPtr_glUnlockArraysEXT; #define glUnlockArraysEXT GLeeFuncPtr_glUnlockArraysEXT #endif #endif /* GL_EXT_cull_vertex */ #ifndef GL_EXT_cull_vertex #define GL_EXT_cull_vertex 1 #define __GLEE_GL_EXT_cull_vertex 1 /* Constants */ #define GL_CULL_VERTEX_EXT 0x81AA #define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB #define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC #ifndef GLEE_H_DEFINED_glCullParameterdvEXT #define GLEE_H_DEFINED_glCullParameterdvEXT typedef void (APIENTRYP GLEEPFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble * params); GLEE_EXTERN GLEEPFNGLCULLPARAMETERDVEXTPROC GLeeFuncPtr_glCullParameterdvEXT; #define glCullParameterdvEXT GLeeFuncPtr_glCullParameterdvEXT #endif #ifndef GLEE_H_DEFINED_glCullParameterfvEXT #define GLEE_H_DEFINED_glCullParameterfvEXT typedef void (APIENTRYP GLEEPFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLCULLPARAMETERFVEXTPROC GLeeFuncPtr_glCullParameterfvEXT; #define glCullParameterfvEXT GLeeFuncPtr_glCullParameterfvEXT #endif #endif /* GL_SGIX_ycrcb */ #ifndef GL_SGIX_ycrcb #define GL_SGIX_ycrcb 1 #define __GLEE_GL_SGIX_ycrcb 1 /* Constants */ #define GL_YCRCB_422_SGIX 0x81BB #define GL_YCRCB_444_SGIX 0x81BC #endif /* GL_SGIX_fragment_lighting */ #ifndef GL_SGIX_fragment_lighting #define GL_SGIX_fragment_lighting 1 #define __GLEE_GL_SGIX_fragment_lighting 1 /* Constants */ #define GL_FRAGMENT_LIGHTING_SGIX 0x8400 #define GL_FRAGMENT_COLOR_MATERIAL_SGIX 0x8401 #define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402 #define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403 #define GL_MAX_FRAGMENT_LIGHTS_SGIX 0x8404 #define GL_MAX_ACTIVE_LIGHTS_SGIX 0x8405 #define GL_CURRENT_RASTER_NORMAL_SGIX 0x8406 #define GL_LIGHT_ENV_MODE_SGIX 0x8407 #define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408 #define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409 #define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A #define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B #define GL_FRAGMENT_LIGHT0_SGIX 0x840C #define GL_FRAGMENT_LIGHT1_SGIX 0x840D #define GL_FRAGMENT_LIGHT2_SGIX 0x840E #define GL_FRAGMENT_LIGHT3_SGIX 0x840F #define GL_FRAGMENT_LIGHT4_SGIX 0x8410 #define GL_FRAGMENT_LIGHT5_SGIX 0x8411 #define GL_FRAGMENT_LIGHT6_SGIX 0x8412 #define GL_FRAGMENT_LIGHT7_SGIX 0x8413 #ifndef GLEE_H_DEFINED_glFragmentColorMaterialSGIX #define GLEE_H_DEFINED_glFragmentColorMaterialSGIX typedef void (APIENTRYP GLEEPFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode); GLEE_EXTERN GLEEPFNGLFRAGMENTCOLORMATERIALSGIXPROC GLeeFuncPtr_glFragmentColorMaterialSGIX; #define glFragmentColorMaterialSGIX GLeeFuncPtr_glFragmentColorMaterialSGIX #endif #ifndef GLEE_H_DEFINED_glFragmentLightfSGIX #define GLEE_H_DEFINED_glFragmentLightfSGIX typedef void (APIENTRYP GLEEPFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLFRAGMENTLIGHTFSGIXPROC GLeeFuncPtr_glFragmentLightfSGIX; #define glFragmentLightfSGIX GLeeFuncPtr_glFragmentLightfSGIX #endif #ifndef GLEE_H_DEFINED_glFragmentLightfvSGIX #define GLEE_H_DEFINED_glFragmentLightfvSGIX typedef void (APIENTRYP GLEEPFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLFRAGMENTLIGHTFVSGIXPROC GLeeFuncPtr_glFragmentLightfvSGIX; #define glFragmentLightfvSGIX GLeeFuncPtr_glFragmentLightfvSGIX #endif #ifndef GLEE_H_DEFINED_glFragmentLightiSGIX #define GLEE_H_DEFINED_glFragmentLightiSGIX typedef void (APIENTRYP GLEEPFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLFRAGMENTLIGHTISGIXPROC GLeeFuncPtr_glFragmentLightiSGIX; #define glFragmentLightiSGIX GLeeFuncPtr_glFragmentLightiSGIX #endif #ifndef GLEE_H_DEFINED_glFragmentLightivSGIX #define GLEE_H_DEFINED_glFragmentLightivSGIX typedef void (APIENTRYP GLEEPFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLFRAGMENTLIGHTIVSGIXPROC GLeeFuncPtr_glFragmentLightivSGIX; #define glFragmentLightivSGIX GLeeFuncPtr_glFragmentLightivSGIX #endif #ifndef GLEE_H_DEFINED_glFragmentLightModelfSGIX #define GLEE_H_DEFINED_glFragmentLightModelfSGIX typedef void (APIENTRYP GLEEPFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLFRAGMENTLIGHTMODELFSGIXPROC GLeeFuncPtr_glFragmentLightModelfSGIX; #define glFragmentLightModelfSGIX GLeeFuncPtr_glFragmentLightModelfSGIX #endif #ifndef GLEE_H_DEFINED_glFragmentLightModelfvSGIX #define GLEE_H_DEFINED_glFragmentLightModelfvSGIX typedef void (APIENTRYP GLEEPFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLFRAGMENTLIGHTMODELFVSGIXPROC GLeeFuncPtr_glFragmentLightModelfvSGIX; #define glFragmentLightModelfvSGIX GLeeFuncPtr_glFragmentLightModelfvSGIX #endif #ifndef GLEE_H_DEFINED_glFragmentLightModeliSGIX #define GLEE_H_DEFINED_glFragmentLightModeliSGIX typedef void (APIENTRYP GLEEPFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLFRAGMENTLIGHTMODELISGIXPROC GLeeFuncPtr_glFragmentLightModeliSGIX; #define glFragmentLightModeliSGIX GLeeFuncPtr_glFragmentLightModeliSGIX #endif #ifndef GLEE_H_DEFINED_glFragmentLightModelivSGIX #define GLEE_H_DEFINED_glFragmentLightModelivSGIX typedef void (APIENTRYP GLEEPFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLFRAGMENTLIGHTMODELIVSGIXPROC GLeeFuncPtr_glFragmentLightModelivSGIX; #define glFragmentLightModelivSGIX GLeeFuncPtr_glFragmentLightModelivSGIX #endif #ifndef GLEE_H_DEFINED_glFragmentMaterialfSGIX #define GLEE_H_DEFINED_glFragmentMaterialfSGIX typedef void (APIENTRYP GLEEPFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLFRAGMENTMATERIALFSGIXPROC GLeeFuncPtr_glFragmentMaterialfSGIX; #define glFragmentMaterialfSGIX GLeeFuncPtr_glFragmentMaterialfSGIX #endif #ifndef GLEE_H_DEFINED_glFragmentMaterialfvSGIX #define GLEE_H_DEFINED_glFragmentMaterialfvSGIX typedef void (APIENTRYP GLEEPFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLFRAGMENTMATERIALFVSGIXPROC GLeeFuncPtr_glFragmentMaterialfvSGIX; #define glFragmentMaterialfvSGIX GLeeFuncPtr_glFragmentMaterialfvSGIX #endif #ifndef GLEE_H_DEFINED_glFragmentMaterialiSGIX #define GLEE_H_DEFINED_glFragmentMaterialiSGIX typedef void (APIENTRYP GLEEPFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLFRAGMENTMATERIALISGIXPROC GLeeFuncPtr_glFragmentMaterialiSGIX; #define glFragmentMaterialiSGIX GLeeFuncPtr_glFragmentMaterialiSGIX #endif #ifndef GLEE_H_DEFINED_glFragmentMaterialivSGIX #define GLEE_H_DEFINED_glFragmentMaterialivSGIX typedef void (APIENTRYP GLEEPFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLFRAGMENTMATERIALIVSGIXPROC GLeeFuncPtr_glFragmentMaterialivSGIX; #define glFragmentMaterialivSGIX GLeeFuncPtr_glFragmentMaterialivSGIX #endif #ifndef GLEE_H_DEFINED_glGetFragmentLightfvSGIX #define GLEE_H_DEFINED_glGetFragmentLightfvSGIX typedef void (APIENTRYP GLEEPFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETFRAGMENTLIGHTFVSGIXPROC GLeeFuncPtr_glGetFragmentLightfvSGIX; #define glGetFragmentLightfvSGIX GLeeFuncPtr_glGetFragmentLightfvSGIX #endif #ifndef GLEE_H_DEFINED_glGetFragmentLightivSGIX #define GLEE_H_DEFINED_glGetFragmentLightivSGIX typedef void (APIENTRYP GLEEPFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETFRAGMENTLIGHTIVSGIXPROC GLeeFuncPtr_glGetFragmentLightivSGIX; #define glGetFragmentLightivSGIX GLeeFuncPtr_glGetFragmentLightivSGIX #endif #ifndef GLEE_H_DEFINED_glGetFragmentMaterialfvSGIX #define GLEE_H_DEFINED_glGetFragmentMaterialfvSGIX typedef void (APIENTRYP GLEEPFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETFRAGMENTMATERIALFVSGIXPROC GLeeFuncPtr_glGetFragmentMaterialfvSGIX; #define glGetFragmentMaterialfvSGIX GLeeFuncPtr_glGetFragmentMaterialfvSGIX #endif #ifndef GLEE_H_DEFINED_glGetFragmentMaterialivSGIX #define GLEE_H_DEFINED_glGetFragmentMaterialivSGIX typedef void (APIENTRYP GLEEPFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETFRAGMENTMATERIALIVSGIXPROC GLeeFuncPtr_glGetFragmentMaterialivSGIX; #define glGetFragmentMaterialivSGIX GLeeFuncPtr_glGetFragmentMaterialivSGIX #endif #ifndef GLEE_H_DEFINED_glLightEnviSGIX #define GLEE_H_DEFINED_glLightEnviSGIX typedef void (APIENTRYP GLEEPFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLLIGHTENVISGIXPROC GLeeFuncPtr_glLightEnviSGIX; #define glLightEnviSGIX GLeeFuncPtr_glLightEnviSGIX #endif #endif /* GL_IBM_rasterpos_clip */ #ifndef GL_IBM_rasterpos_clip #define GL_IBM_rasterpos_clip 1 #define __GLEE_GL_IBM_rasterpos_clip 1 /* Constants */ #define GL_RASTER_POSITION_UNCLIPPED_IBM 0x19262 #endif /* GL_HP_texture_lighting */ #ifndef GL_HP_texture_lighting #define GL_HP_texture_lighting 1 #define __GLEE_GL_HP_texture_lighting 1 /* Constants */ #define GL_TEXTURE_LIGHTING_MODE_HP 0x8167 #define GL_TEXTURE_POST_SPECULAR_HP 0x8168 #define GL_TEXTURE_PRE_SPECULAR_HP 0x8169 #endif /* GL_EXT_draw_range_elements */ #ifndef GL_EXT_draw_range_elements #define GL_EXT_draw_range_elements 1 #define __GLEE_GL_EXT_draw_range_elements 1 /* Constants */ #define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 #define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 #ifndef GLEE_H_DEFINED_glDrawRangeElementsEXT #define GLEE_H_DEFINED_glDrawRangeElementsEXT typedef void (APIENTRYP GLEEPFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices); GLEE_EXTERN GLEEPFNGLDRAWRANGEELEMENTSEXTPROC GLeeFuncPtr_glDrawRangeElementsEXT; #define glDrawRangeElementsEXT GLeeFuncPtr_glDrawRangeElementsEXT #endif #endif /* GL_WIN_phong_shading */ #ifndef GL_WIN_phong_shading #define GL_WIN_phong_shading 1 #define __GLEE_GL_WIN_phong_shading 1 /* Constants */ #define GL_PHONG_WIN 0x80EA #define GL_PHONG_HINT_WIN 0x80EB #endif /* GL_WIN_specular_fog */ #ifndef GL_WIN_specular_fog #define GL_WIN_specular_fog 1 #define __GLEE_GL_WIN_specular_fog 1 /* Constants */ #define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC #endif /* GL_EXT_light_texture */ #ifndef GL_EXT_light_texture #define GL_EXT_light_texture 1 #define __GLEE_GL_EXT_light_texture 1 /* Constants */ #define GL_FRAGMENT_MATERIAL_EXT 0x8349 #define GL_FRAGMENT_NORMAL_EXT 0x834A #define GL_FRAGMENT_COLOR_EXT 0x834C #define GL_ATTENUATION_EXT 0x834D #define GL_SHADOW_ATTENUATION_EXT 0x834E #define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F #define GL_TEXTURE_LIGHT_EXT 0x8350 #define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351 #define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352 #ifndef GLEE_H_DEFINED_glApplyTextureEXT #define GLEE_H_DEFINED_glApplyTextureEXT typedef void (APIENTRYP GLEEPFNGLAPPLYTEXTUREEXTPROC) (GLenum mode); GLEE_EXTERN GLEEPFNGLAPPLYTEXTUREEXTPROC GLeeFuncPtr_glApplyTextureEXT; #define glApplyTextureEXT GLeeFuncPtr_glApplyTextureEXT #endif #ifndef GLEE_H_DEFINED_glTextureLightEXT #define GLEE_H_DEFINED_glTextureLightEXT typedef void (APIENTRYP GLEEPFNGLTEXTURELIGHTEXTPROC) (GLenum pname); GLEE_EXTERN GLEEPFNGLTEXTURELIGHTEXTPROC GLeeFuncPtr_glTextureLightEXT; #define glTextureLightEXT GLeeFuncPtr_glTextureLightEXT #endif #ifndef GLEE_H_DEFINED_glTextureMaterialEXT #define GLEE_H_DEFINED_glTextureMaterialEXT typedef void (APIENTRYP GLEEPFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode); GLEE_EXTERN GLEEPFNGLTEXTUREMATERIALEXTPROC GLeeFuncPtr_glTextureMaterialEXT; #define glTextureMaterialEXT GLeeFuncPtr_glTextureMaterialEXT #endif #endif /* GL_SGIX_blend_alpha_minmax */ #ifndef GL_SGIX_blend_alpha_minmax #define GL_SGIX_blend_alpha_minmax 1 #define __GLEE_GL_SGIX_blend_alpha_minmax 1 /* Constants */ #define GL_ALPHA_MIN_SGIX 0x8320 #define GL_ALPHA_MAX_SGIX 0x8321 #endif /* GL_SGIX_impact_pixel_texture */ #ifndef GL_SGIX_impact_pixel_texture #define GL_SGIX_impact_pixel_texture 1 #define __GLEE_GL_SGIX_impact_pixel_texture 1 /* Constants */ #define GL_PIXEL_TEX_GEN_Q_CEILING_SGIX 0x8184 #define GL_PIXEL_TEX_GEN_Q_ROUND_SGIX 0x8185 #define GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX 0x8186 #define GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX 0x8187 #define GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX 0x8188 #define GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX 0x8189 #define GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX 0x818A #endif /* GL_EXT_bgra */ #ifndef GL_EXT_bgra #define GL_EXT_bgra 1 #define __GLEE_GL_EXT_bgra 1 /* Constants */ #define GL_BGR_EXT 0x80E0 #define GL_BGRA_EXT 0x80E1 #endif /* GL_SGIX_async */ #ifndef GL_SGIX_async #define GL_SGIX_async 1 #define __GLEE_GL_SGIX_async 1 /* Constants */ #define GL_ASYNC_MARKER_SGIX 0x8329 #ifndef GLEE_H_DEFINED_glAsyncMarkerSGIX #define GLEE_H_DEFINED_glAsyncMarkerSGIX typedef void (APIENTRYP GLEEPFNGLASYNCMARKERSGIXPROC) (GLuint marker); GLEE_EXTERN GLEEPFNGLASYNCMARKERSGIXPROC GLeeFuncPtr_glAsyncMarkerSGIX; #define glAsyncMarkerSGIX GLeeFuncPtr_glAsyncMarkerSGIX #endif #ifndef GLEE_H_DEFINED_glFinishAsyncSGIX #define GLEE_H_DEFINED_glFinishAsyncSGIX typedef GLint (APIENTRYP GLEEPFNGLFINISHASYNCSGIXPROC) (GLuint * markerp); GLEE_EXTERN GLEEPFNGLFINISHASYNCSGIXPROC GLeeFuncPtr_glFinishAsyncSGIX; #define glFinishAsyncSGIX GLeeFuncPtr_glFinishAsyncSGIX #endif #ifndef GLEE_H_DEFINED_glPollAsyncSGIX #define GLEE_H_DEFINED_glPollAsyncSGIX typedef GLint (APIENTRYP GLEEPFNGLPOLLASYNCSGIXPROC) (GLuint * markerp); GLEE_EXTERN GLEEPFNGLPOLLASYNCSGIXPROC GLeeFuncPtr_glPollAsyncSGIX; #define glPollAsyncSGIX GLeeFuncPtr_glPollAsyncSGIX #endif #ifndef GLEE_H_DEFINED_glGenAsyncMarkersSGIX #define GLEE_H_DEFINED_glGenAsyncMarkersSGIX typedef GLuint (APIENTRYP GLEEPFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range); GLEE_EXTERN GLEEPFNGLGENASYNCMARKERSSGIXPROC GLeeFuncPtr_glGenAsyncMarkersSGIX; #define glGenAsyncMarkersSGIX GLeeFuncPtr_glGenAsyncMarkersSGIX #endif #ifndef GLEE_H_DEFINED_glDeleteAsyncMarkersSGIX #define GLEE_H_DEFINED_glDeleteAsyncMarkersSGIX typedef void (APIENTRYP GLEEPFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range); GLEE_EXTERN GLEEPFNGLDELETEASYNCMARKERSSGIXPROC GLeeFuncPtr_glDeleteAsyncMarkersSGIX; #define glDeleteAsyncMarkersSGIX GLeeFuncPtr_glDeleteAsyncMarkersSGIX #endif #ifndef GLEE_H_DEFINED_glIsAsyncMarkerSGIX #define GLEE_H_DEFINED_glIsAsyncMarkerSGIX typedef GLboolean (APIENTRYP GLEEPFNGLISASYNCMARKERSGIXPROC) (GLuint marker); GLEE_EXTERN GLEEPFNGLISASYNCMARKERSGIXPROC GLeeFuncPtr_glIsAsyncMarkerSGIX; #define glIsAsyncMarkerSGIX GLeeFuncPtr_glIsAsyncMarkerSGIX #endif #endif /* GL_SGIX_async_pixel */ #ifndef GL_SGIX_async_pixel #define GL_SGIX_async_pixel 1 #define __GLEE_GL_SGIX_async_pixel 1 /* Constants */ #define GL_ASYNC_TEX_IMAGE_SGIX 0x835C #define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D #define GL_ASYNC_READ_PIXELS_SGIX 0x835E #define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F #define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360 #define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361 #endif /* GL_SGIX_async_histogram */ #ifndef GL_SGIX_async_histogram #define GL_SGIX_async_histogram 1 #define __GLEE_GL_SGIX_async_histogram 1 /* Constants */ #define GL_ASYNC_HISTOGRAM_SGIX 0x832C #define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D #endif /* GL_INTEL_texture_scissor */ #ifndef GL_INTEL_texture_scissor #define GL_INTEL_texture_scissor 1 #define __GLEE_GL_INTEL_texture_scissor 1 /* Constants */ #endif /* GL_INTEL_parallel_arrays */ #ifndef GL_INTEL_parallel_arrays #define GL_INTEL_parallel_arrays 1 #define __GLEE_GL_INTEL_parallel_arrays 1 /* Constants */ #define GL_PARALLEL_ARRAYS_INTEL 0x83F4 #define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5 #define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6 #define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7 #define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8 #ifndef GLEE_H_DEFINED_glVertexPointervINTEL #define GLEE_H_DEFINED_glVertexPointervINTEL typedef void (APIENTRYP GLEEPFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* * pointer); GLEE_EXTERN GLEEPFNGLVERTEXPOINTERVINTELPROC GLeeFuncPtr_glVertexPointervINTEL; #define glVertexPointervINTEL GLeeFuncPtr_glVertexPointervINTEL #endif #ifndef GLEE_H_DEFINED_glNormalPointervINTEL #define GLEE_H_DEFINED_glNormalPointervINTEL typedef void (APIENTRYP GLEEPFNGLNORMALPOINTERVINTELPROC) (GLenum type, const GLvoid* * pointer); GLEE_EXTERN GLEEPFNGLNORMALPOINTERVINTELPROC GLeeFuncPtr_glNormalPointervINTEL; #define glNormalPointervINTEL GLeeFuncPtr_glNormalPointervINTEL #endif #ifndef GLEE_H_DEFINED_glColorPointervINTEL #define GLEE_H_DEFINED_glColorPointervINTEL typedef void (APIENTRYP GLEEPFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* * pointer); GLEE_EXTERN GLEEPFNGLCOLORPOINTERVINTELPROC GLeeFuncPtr_glColorPointervINTEL; #define glColorPointervINTEL GLeeFuncPtr_glColorPointervINTEL #endif #ifndef GLEE_H_DEFINED_glTexCoordPointervINTEL #define GLEE_H_DEFINED_glTexCoordPointervINTEL typedef void (APIENTRYP GLEEPFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* * pointer); GLEE_EXTERN GLEEPFNGLTEXCOORDPOINTERVINTELPROC GLeeFuncPtr_glTexCoordPointervINTEL; #define glTexCoordPointervINTEL GLeeFuncPtr_glTexCoordPointervINTEL #endif #endif /* GL_HP_occlusion_test */ #ifndef GL_HP_occlusion_test #define GL_HP_occlusion_test 1 #define __GLEE_GL_HP_occlusion_test 1 /* Constants */ #define GL_OCCLUSION_TEST_HP 0x8165 #define GL_OCCLUSION_TEST_RESULT_HP 0x8166 #endif /* GL_EXT_pixel_transform */ #ifndef GL_EXT_pixel_transform #define GL_EXT_pixel_transform 1 #define __GLEE_GL_EXT_pixel_transform 1 /* Constants */ #define GL_PIXEL_TRANSFORM_2D_EXT 0x8330 #define GL_PIXEL_MAG_FILTER_EXT 0x8331 #define GL_PIXEL_MIN_FILTER_EXT 0x8332 #define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333 #define GL_CUBIC_EXT 0x8334 #define GL_AVERAGE_EXT 0x8335 #define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336 #define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 #define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338 #ifndef GLEE_H_DEFINED_glPixelTransformParameteriEXT #define GLEE_H_DEFINED_glPixelTransformParameteriEXT typedef void (APIENTRYP GLEEPFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLPIXELTRANSFORMPARAMETERIEXTPROC GLeeFuncPtr_glPixelTransformParameteriEXT; #define glPixelTransformParameteriEXT GLeeFuncPtr_glPixelTransformParameteriEXT #endif #ifndef GLEE_H_DEFINED_glPixelTransformParameterfEXT #define GLEE_H_DEFINED_glPixelTransformParameterfEXT typedef void (APIENTRYP GLEEPFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLPIXELTRANSFORMPARAMETERFEXTPROC GLeeFuncPtr_glPixelTransformParameterfEXT; #define glPixelTransformParameterfEXT GLeeFuncPtr_glPixelTransformParameterfEXT #endif #ifndef GLEE_H_DEFINED_glPixelTransformParameterivEXT #define GLEE_H_DEFINED_glPixelTransformParameterivEXT typedef void (APIENTRYP GLEEPFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLPIXELTRANSFORMPARAMETERIVEXTPROC GLeeFuncPtr_glPixelTransformParameterivEXT; #define glPixelTransformParameterivEXT GLeeFuncPtr_glPixelTransformParameterivEXT #endif #ifndef GLEE_H_DEFINED_glPixelTransformParameterfvEXT #define GLEE_H_DEFINED_glPixelTransformParameterfvEXT typedef void (APIENTRYP GLEEPFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLPIXELTRANSFORMPARAMETERFVEXTPROC GLeeFuncPtr_glPixelTransformParameterfvEXT; #define glPixelTransformParameterfvEXT GLeeFuncPtr_glPixelTransformParameterfvEXT #endif #ifndef GLEE_H_DEFINED_glGetPixelTransformParameterivEXT #define GLEE_H_DEFINED_glGetPixelTransformParameterivEXT typedef void (APIENTRYP GLEEPFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC GLeeFuncPtr_glGetPixelTransformParameterivEXT; #define glGetPixelTransformParameterivEXT GLeeFuncPtr_glGetPixelTransformParameterivEXT #endif #ifndef GLEE_H_DEFINED_glGetPixelTransformParameterfvEXT #define GLEE_H_DEFINED_glGetPixelTransformParameterfvEXT typedef void (APIENTRYP GLEEPFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC GLeeFuncPtr_glGetPixelTransformParameterfvEXT; #define glGetPixelTransformParameterfvEXT GLeeFuncPtr_glGetPixelTransformParameterfvEXT #endif #endif /* GL_EXT_pixel_transform_color_table */ #ifndef GL_EXT_pixel_transform_color_table #define GL_EXT_pixel_transform_color_table 1 #define __GLEE_GL_EXT_pixel_transform_color_table 1 /* Constants */ #endif /* GL_EXT_shared_texture_palette */ #ifndef GL_EXT_shared_texture_palette #define GL_EXT_shared_texture_palette 1 #define __GLEE_GL_EXT_shared_texture_palette 1 /* Constants */ #define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB #endif /* GL_EXT_separate_specular_color */ #ifndef GL_EXT_separate_specular_color #define GL_EXT_separate_specular_color 1 #define __GLEE_GL_EXT_separate_specular_color 1 /* Constants */ #define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 #define GL_SINGLE_COLOR_EXT 0x81F9 #define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA #endif /* GL_EXT_secondary_color */ #ifndef GL_EXT_secondary_color #define GL_EXT_secondary_color 1 #define __GLEE_GL_EXT_secondary_color 1 /* Constants */ #define GL_COLOR_SUM_EXT 0x8458 #define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 #define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A #define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B #define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C #define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D #define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E #ifndef GLEE_H_DEFINED_glSecondaryColor3bEXT #define GLEE_H_DEFINED_glSecondaryColor3bEXT typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3BEXTPROC GLeeFuncPtr_glSecondaryColor3bEXT; #define glSecondaryColor3bEXT GLeeFuncPtr_glSecondaryColor3bEXT #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3bvEXT #define GLEE_H_DEFINED_glSecondaryColor3bvEXT typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte * v); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3BVEXTPROC GLeeFuncPtr_glSecondaryColor3bvEXT; #define glSecondaryColor3bvEXT GLeeFuncPtr_glSecondaryColor3bvEXT #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3dEXT #define GLEE_H_DEFINED_glSecondaryColor3dEXT typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3DEXTPROC GLeeFuncPtr_glSecondaryColor3dEXT; #define glSecondaryColor3dEXT GLeeFuncPtr_glSecondaryColor3dEXT #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3dvEXT #define GLEE_H_DEFINED_glSecondaryColor3dvEXT typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble * v); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3DVEXTPROC GLeeFuncPtr_glSecondaryColor3dvEXT; #define glSecondaryColor3dvEXT GLeeFuncPtr_glSecondaryColor3dvEXT #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3fEXT #define GLEE_H_DEFINED_glSecondaryColor3fEXT typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3FEXTPROC GLeeFuncPtr_glSecondaryColor3fEXT; #define glSecondaryColor3fEXT GLeeFuncPtr_glSecondaryColor3fEXT #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3fvEXT #define GLEE_H_DEFINED_glSecondaryColor3fvEXT typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat * v); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3FVEXTPROC GLeeFuncPtr_glSecondaryColor3fvEXT; #define glSecondaryColor3fvEXT GLeeFuncPtr_glSecondaryColor3fvEXT #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3iEXT #define GLEE_H_DEFINED_glSecondaryColor3iEXT typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3IEXTPROC GLeeFuncPtr_glSecondaryColor3iEXT; #define glSecondaryColor3iEXT GLeeFuncPtr_glSecondaryColor3iEXT #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3ivEXT #define GLEE_H_DEFINED_glSecondaryColor3ivEXT typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint * v); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3IVEXTPROC GLeeFuncPtr_glSecondaryColor3ivEXT; #define glSecondaryColor3ivEXT GLeeFuncPtr_glSecondaryColor3ivEXT #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3sEXT #define GLEE_H_DEFINED_glSecondaryColor3sEXT typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3SEXTPROC GLeeFuncPtr_glSecondaryColor3sEXT; #define glSecondaryColor3sEXT GLeeFuncPtr_glSecondaryColor3sEXT #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3svEXT #define GLEE_H_DEFINED_glSecondaryColor3svEXT typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort * v); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3SVEXTPROC GLeeFuncPtr_glSecondaryColor3svEXT; #define glSecondaryColor3svEXT GLeeFuncPtr_glSecondaryColor3svEXT #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3ubEXT #define GLEE_H_DEFINED_glSecondaryColor3ubEXT typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3UBEXTPROC GLeeFuncPtr_glSecondaryColor3ubEXT; #define glSecondaryColor3ubEXT GLeeFuncPtr_glSecondaryColor3ubEXT #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3ubvEXT #define GLEE_H_DEFINED_glSecondaryColor3ubvEXT typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte * v); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3UBVEXTPROC GLeeFuncPtr_glSecondaryColor3ubvEXT; #define glSecondaryColor3ubvEXT GLeeFuncPtr_glSecondaryColor3ubvEXT #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3uiEXT #define GLEE_H_DEFINED_glSecondaryColor3uiEXT typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3UIEXTPROC GLeeFuncPtr_glSecondaryColor3uiEXT; #define glSecondaryColor3uiEXT GLeeFuncPtr_glSecondaryColor3uiEXT #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3uivEXT #define GLEE_H_DEFINED_glSecondaryColor3uivEXT typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint * v); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3UIVEXTPROC GLeeFuncPtr_glSecondaryColor3uivEXT; #define glSecondaryColor3uivEXT GLeeFuncPtr_glSecondaryColor3uivEXT #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3usEXT #define GLEE_H_DEFINED_glSecondaryColor3usEXT typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3USEXTPROC GLeeFuncPtr_glSecondaryColor3usEXT; #define glSecondaryColor3usEXT GLeeFuncPtr_glSecondaryColor3usEXT #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3usvEXT #define GLEE_H_DEFINED_glSecondaryColor3usvEXT typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort * v); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3USVEXTPROC GLeeFuncPtr_glSecondaryColor3usvEXT; #define glSecondaryColor3usvEXT GLeeFuncPtr_glSecondaryColor3usvEXT #endif #ifndef GLEE_H_DEFINED_glSecondaryColorPointerEXT #define GLEE_H_DEFINED_glSecondaryColorPointerEXT typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLSECONDARYCOLORPOINTEREXTPROC GLeeFuncPtr_glSecondaryColorPointerEXT; #define glSecondaryColorPointerEXT GLeeFuncPtr_glSecondaryColorPointerEXT #endif #endif /* GL_EXT_texture_perturb_normal */ #ifndef GL_EXT_texture_perturb_normal #define GL_EXT_texture_perturb_normal 1 #define __GLEE_GL_EXT_texture_perturb_normal 1 /* Constants */ #define GL_PERTURB_EXT 0x85AE #define GL_TEXTURE_NORMAL_EXT 0x85AF #ifndef GLEE_H_DEFINED_glTextureNormalEXT #define GLEE_H_DEFINED_glTextureNormalEXT typedef void (APIENTRYP GLEEPFNGLTEXTURENORMALEXTPROC) (GLenum mode); GLEE_EXTERN GLEEPFNGLTEXTURENORMALEXTPROC GLeeFuncPtr_glTextureNormalEXT; #define glTextureNormalEXT GLeeFuncPtr_glTextureNormalEXT #endif #endif /* GL_EXT_multi_draw_arrays */ #ifndef GL_EXT_multi_draw_arrays #define GL_EXT_multi_draw_arrays 1 #define __GLEE_GL_EXT_multi_draw_arrays 1 /* Constants */ #ifndef GLEE_H_DEFINED_glMultiDrawArraysEXT #define GLEE_H_DEFINED_glMultiDrawArraysEXT typedef void (APIENTRYP GLEEPFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint * first, const GLsizei * count, GLsizei primcount); GLEE_EXTERN GLEEPFNGLMULTIDRAWARRAYSEXTPROC GLeeFuncPtr_glMultiDrawArraysEXT; #define glMultiDrawArraysEXT GLeeFuncPtr_glMultiDrawArraysEXT #endif #ifndef GLEE_H_DEFINED_glMultiDrawElementsEXT #define GLEE_H_DEFINED_glMultiDrawElementsEXT typedef void (APIENTRYP GLEEPFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei * count, GLenum type, const GLvoid* * indices, GLsizei primcount); GLEE_EXTERN GLEEPFNGLMULTIDRAWELEMENTSEXTPROC GLeeFuncPtr_glMultiDrawElementsEXT; #define glMultiDrawElementsEXT GLeeFuncPtr_glMultiDrawElementsEXT #endif #endif /* GL_EXT_fog_coord */ #ifndef GL_EXT_fog_coord #define GL_EXT_fog_coord 1 #define __GLEE_GL_EXT_fog_coord 1 /* Constants */ #define GL_FOG_COORDINATE_SOURCE_EXT 0x8450 #define GL_FOG_COORDINATE_EXT 0x8451 #define GL_FRAGMENT_DEPTH_EXT 0x8452 #define GL_CURRENT_FOG_COORDINATE_EXT 0x8453 #define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 #define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 #define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 #define GL_FOG_COORDINATE_ARRAY_EXT 0x8457 #ifndef GLEE_H_DEFINED_glFogCoordfEXT #define GLEE_H_DEFINED_glFogCoordfEXT typedef void (APIENTRYP GLEEPFNGLFOGCOORDFEXTPROC) (GLfloat coord); GLEE_EXTERN GLEEPFNGLFOGCOORDFEXTPROC GLeeFuncPtr_glFogCoordfEXT; #define glFogCoordfEXT GLeeFuncPtr_glFogCoordfEXT #endif #ifndef GLEE_H_DEFINED_glFogCoordfvEXT #define GLEE_H_DEFINED_glFogCoordfvEXT typedef void (APIENTRYP GLEEPFNGLFOGCOORDFVEXTPROC) (const GLfloat * coord); GLEE_EXTERN GLEEPFNGLFOGCOORDFVEXTPROC GLeeFuncPtr_glFogCoordfvEXT; #define glFogCoordfvEXT GLeeFuncPtr_glFogCoordfvEXT #endif #ifndef GLEE_H_DEFINED_glFogCoorddEXT #define GLEE_H_DEFINED_glFogCoorddEXT typedef void (APIENTRYP GLEEPFNGLFOGCOORDDEXTPROC) (GLdouble coord); GLEE_EXTERN GLEEPFNGLFOGCOORDDEXTPROC GLeeFuncPtr_glFogCoorddEXT; #define glFogCoorddEXT GLeeFuncPtr_glFogCoorddEXT #endif #ifndef GLEE_H_DEFINED_glFogCoorddvEXT #define GLEE_H_DEFINED_glFogCoorddvEXT typedef void (APIENTRYP GLEEPFNGLFOGCOORDDVEXTPROC) (const GLdouble * coord); GLEE_EXTERN GLEEPFNGLFOGCOORDDVEXTPROC GLeeFuncPtr_glFogCoorddvEXT; #define glFogCoorddvEXT GLeeFuncPtr_glFogCoorddvEXT #endif #ifndef GLEE_H_DEFINED_glFogCoordPointerEXT #define GLEE_H_DEFINED_glFogCoordPointerEXT typedef void (APIENTRYP GLEEPFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLFOGCOORDPOINTEREXTPROC GLeeFuncPtr_glFogCoordPointerEXT; #define glFogCoordPointerEXT GLeeFuncPtr_glFogCoordPointerEXT #endif #endif /* GL_REND_screen_coordinates */ #ifndef GL_REND_screen_coordinates #define GL_REND_screen_coordinates 1 #define __GLEE_GL_REND_screen_coordinates 1 /* Constants */ #define GL_SCREEN_COORDINATES_REND 0x8490 #define GL_INVERTED_SCREEN_W_REND 0x8491 #endif /* GL_EXT_coordinate_frame */ #ifndef GL_EXT_coordinate_frame #define GL_EXT_coordinate_frame 1 #define __GLEE_GL_EXT_coordinate_frame 1 /* Constants */ #define GL_TANGENT_ARRAY_EXT 0x8439 #define GL_BINORMAL_ARRAY_EXT 0x843A #define GL_CURRENT_TANGENT_EXT 0x843B #define GL_CURRENT_BINORMAL_EXT 0x843C #define GL_TANGENT_ARRAY_TYPE_EXT 0x843E #define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F #define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440 #define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441 #define GL_TANGENT_ARRAY_POINTER_EXT 0x8442 #define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443 #define GL_MAP1_TANGENT_EXT 0x8444 #define GL_MAP2_TANGENT_EXT 0x8445 #define GL_MAP1_BINORMAL_EXT 0x8446 #define GL_MAP2_BINORMAL_EXT 0x8447 #ifndef GLEE_H_DEFINED_glTangent3bEXT #define GLEE_H_DEFINED_glTangent3bEXT typedef void (APIENTRYP GLEEPFNGLTANGENT3BEXTPROC) (GLbyte tx, GLbyte ty, GLbyte tz); GLEE_EXTERN GLEEPFNGLTANGENT3BEXTPROC GLeeFuncPtr_glTangent3bEXT; #define glTangent3bEXT GLeeFuncPtr_glTangent3bEXT #endif #ifndef GLEE_H_DEFINED_glTangent3bvEXT #define GLEE_H_DEFINED_glTangent3bvEXT typedef void (APIENTRYP GLEEPFNGLTANGENT3BVEXTPROC) (const GLbyte * v); GLEE_EXTERN GLEEPFNGLTANGENT3BVEXTPROC GLeeFuncPtr_glTangent3bvEXT; #define glTangent3bvEXT GLeeFuncPtr_glTangent3bvEXT #endif #ifndef GLEE_H_DEFINED_glTangent3dEXT #define GLEE_H_DEFINED_glTangent3dEXT typedef void (APIENTRYP GLEEPFNGLTANGENT3DEXTPROC) (GLdouble tx, GLdouble ty, GLdouble tz); GLEE_EXTERN GLEEPFNGLTANGENT3DEXTPROC GLeeFuncPtr_glTangent3dEXT; #define glTangent3dEXT GLeeFuncPtr_glTangent3dEXT #endif #ifndef GLEE_H_DEFINED_glTangent3dvEXT #define GLEE_H_DEFINED_glTangent3dvEXT typedef void (APIENTRYP GLEEPFNGLTANGENT3DVEXTPROC) (const GLdouble * v); GLEE_EXTERN GLEEPFNGLTANGENT3DVEXTPROC GLeeFuncPtr_glTangent3dvEXT; #define glTangent3dvEXT GLeeFuncPtr_glTangent3dvEXT #endif #ifndef GLEE_H_DEFINED_glTangent3fEXT #define GLEE_H_DEFINED_glTangent3fEXT typedef void (APIENTRYP GLEEPFNGLTANGENT3FEXTPROC) (GLfloat tx, GLfloat ty, GLfloat tz); GLEE_EXTERN GLEEPFNGLTANGENT3FEXTPROC GLeeFuncPtr_glTangent3fEXT; #define glTangent3fEXT GLeeFuncPtr_glTangent3fEXT #endif #ifndef GLEE_H_DEFINED_glTangent3fvEXT #define GLEE_H_DEFINED_glTangent3fvEXT typedef void (APIENTRYP GLEEPFNGLTANGENT3FVEXTPROC) (const GLfloat * v); GLEE_EXTERN GLEEPFNGLTANGENT3FVEXTPROC GLeeFuncPtr_glTangent3fvEXT; #define glTangent3fvEXT GLeeFuncPtr_glTangent3fvEXT #endif #ifndef GLEE_H_DEFINED_glTangent3iEXT #define GLEE_H_DEFINED_glTangent3iEXT typedef void (APIENTRYP GLEEPFNGLTANGENT3IEXTPROC) (GLint tx, GLint ty, GLint tz); GLEE_EXTERN GLEEPFNGLTANGENT3IEXTPROC GLeeFuncPtr_glTangent3iEXT; #define glTangent3iEXT GLeeFuncPtr_glTangent3iEXT #endif #ifndef GLEE_H_DEFINED_glTangent3ivEXT #define GLEE_H_DEFINED_glTangent3ivEXT typedef void (APIENTRYP GLEEPFNGLTANGENT3IVEXTPROC) (const GLint * v); GLEE_EXTERN GLEEPFNGLTANGENT3IVEXTPROC GLeeFuncPtr_glTangent3ivEXT; #define glTangent3ivEXT GLeeFuncPtr_glTangent3ivEXT #endif #ifndef GLEE_H_DEFINED_glTangent3sEXT #define GLEE_H_DEFINED_glTangent3sEXT typedef void (APIENTRYP GLEEPFNGLTANGENT3SEXTPROC) (GLshort tx, GLshort ty, GLshort tz); GLEE_EXTERN GLEEPFNGLTANGENT3SEXTPROC GLeeFuncPtr_glTangent3sEXT; #define glTangent3sEXT GLeeFuncPtr_glTangent3sEXT #endif #ifndef GLEE_H_DEFINED_glTangent3svEXT #define GLEE_H_DEFINED_glTangent3svEXT typedef void (APIENTRYP GLEEPFNGLTANGENT3SVEXTPROC) (const GLshort * v); GLEE_EXTERN GLEEPFNGLTANGENT3SVEXTPROC GLeeFuncPtr_glTangent3svEXT; #define glTangent3svEXT GLeeFuncPtr_glTangent3svEXT #endif #ifndef GLEE_H_DEFINED_glBinormal3bEXT #define GLEE_H_DEFINED_glBinormal3bEXT typedef void (APIENTRYP GLEEPFNGLBINORMAL3BEXTPROC) (GLbyte bx, GLbyte by, GLbyte bz); GLEE_EXTERN GLEEPFNGLBINORMAL3BEXTPROC GLeeFuncPtr_glBinormal3bEXT; #define glBinormal3bEXT GLeeFuncPtr_glBinormal3bEXT #endif #ifndef GLEE_H_DEFINED_glBinormal3bvEXT #define GLEE_H_DEFINED_glBinormal3bvEXT typedef void (APIENTRYP GLEEPFNGLBINORMAL3BVEXTPROC) (const GLbyte * v); GLEE_EXTERN GLEEPFNGLBINORMAL3BVEXTPROC GLeeFuncPtr_glBinormal3bvEXT; #define glBinormal3bvEXT GLeeFuncPtr_glBinormal3bvEXT #endif #ifndef GLEE_H_DEFINED_glBinormal3dEXT #define GLEE_H_DEFINED_glBinormal3dEXT typedef void (APIENTRYP GLEEPFNGLBINORMAL3DEXTPROC) (GLdouble bx, GLdouble by, GLdouble bz); GLEE_EXTERN GLEEPFNGLBINORMAL3DEXTPROC GLeeFuncPtr_glBinormal3dEXT; #define glBinormal3dEXT GLeeFuncPtr_glBinormal3dEXT #endif #ifndef GLEE_H_DEFINED_glBinormal3dvEXT #define GLEE_H_DEFINED_glBinormal3dvEXT typedef void (APIENTRYP GLEEPFNGLBINORMAL3DVEXTPROC) (const GLdouble * v); GLEE_EXTERN GLEEPFNGLBINORMAL3DVEXTPROC GLeeFuncPtr_glBinormal3dvEXT; #define glBinormal3dvEXT GLeeFuncPtr_glBinormal3dvEXT #endif #ifndef GLEE_H_DEFINED_glBinormal3fEXT #define GLEE_H_DEFINED_glBinormal3fEXT typedef void (APIENTRYP GLEEPFNGLBINORMAL3FEXTPROC) (GLfloat bx, GLfloat by, GLfloat bz); GLEE_EXTERN GLEEPFNGLBINORMAL3FEXTPROC GLeeFuncPtr_glBinormal3fEXT; #define glBinormal3fEXT GLeeFuncPtr_glBinormal3fEXT #endif #ifndef GLEE_H_DEFINED_glBinormal3fvEXT #define GLEE_H_DEFINED_glBinormal3fvEXT typedef void (APIENTRYP GLEEPFNGLBINORMAL3FVEXTPROC) (const GLfloat * v); GLEE_EXTERN GLEEPFNGLBINORMAL3FVEXTPROC GLeeFuncPtr_glBinormal3fvEXT; #define glBinormal3fvEXT GLeeFuncPtr_glBinormal3fvEXT #endif #ifndef GLEE_H_DEFINED_glBinormal3iEXT #define GLEE_H_DEFINED_glBinormal3iEXT typedef void (APIENTRYP GLEEPFNGLBINORMAL3IEXTPROC) (GLint bx, GLint by, GLint bz); GLEE_EXTERN GLEEPFNGLBINORMAL3IEXTPROC GLeeFuncPtr_glBinormal3iEXT; #define glBinormal3iEXT GLeeFuncPtr_glBinormal3iEXT #endif #ifndef GLEE_H_DEFINED_glBinormal3ivEXT #define GLEE_H_DEFINED_glBinormal3ivEXT typedef void (APIENTRYP GLEEPFNGLBINORMAL3IVEXTPROC) (const GLint * v); GLEE_EXTERN GLEEPFNGLBINORMAL3IVEXTPROC GLeeFuncPtr_glBinormal3ivEXT; #define glBinormal3ivEXT GLeeFuncPtr_glBinormal3ivEXT #endif #ifndef GLEE_H_DEFINED_glBinormal3sEXT #define GLEE_H_DEFINED_glBinormal3sEXT typedef void (APIENTRYP GLEEPFNGLBINORMAL3SEXTPROC) (GLshort bx, GLshort by, GLshort bz); GLEE_EXTERN GLEEPFNGLBINORMAL3SEXTPROC GLeeFuncPtr_glBinormal3sEXT; #define glBinormal3sEXT GLeeFuncPtr_glBinormal3sEXT #endif #ifndef GLEE_H_DEFINED_glBinormal3svEXT #define GLEE_H_DEFINED_glBinormal3svEXT typedef void (APIENTRYP GLEEPFNGLBINORMAL3SVEXTPROC) (const GLshort * v); GLEE_EXTERN GLEEPFNGLBINORMAL3SVEXTPROC GLeeFuncPtr_glBinormal3svEXT; #define glBinormal3svEXT GLeeFuncPtr_glBinormal3svEXT #endif #ifndef GLEE_H_DEFINED_glTangentPointerEXT #define GLEE_H_DEFINED_glTangentPointerEXT typedef void (APIENTRYP GLEEPFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLTANGENTPOINTEREXTPROC GLeeFuncPtr_glTangentPointerEXT; #define glTangentPointerEXT GLeeFuncPtr_glTangentPointerEXT #endif #ifndef GLEE_H_DEFINED_glBinormalPointerEXT #define GLEE_H_DEFINED_glBinormalPointerEXT typedef void (APIENTRYP GLEEPFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLBINORMALPOINTEREXTPROC GLeeFuncPtr_glBinormalPointerEXT; #define glBinormalPointerEXT GLeeFuncPtr_glBinormalPointerEXT #endif #endif /* GL_EXT_texture_env_combine */ #ifndef GL_EXT_texture_env_combine #define GL_EXT_texture_env_combine 1 #define __GLEE_GL_EXT_texture_env_combine 1 /* Constants */ #define GL_COMBINE_EXT 0x8570 #define GL_COMBINE_RGB_EXT 0x8571 #define GL_COMBINE_ALPHA_EXT 0x8572 #define GL_RGB_SCALE_EXT 0x8573 #define GL_ADD_SIGNED_EXT 0x8574 #define GL_INTERPOLATE_EXT 0x8575 #define GL_CONSTANT_EXT 0x8576 #define GL_PRIMARY_COLOR_EXT 0x8577 #define GL_PREVIOUS_EXT 0x8578 #define GL_SOURCE0_RGB_EXT 0x8580 #define GL_SOURCE1_RGB_EXT 0x8581 #define GL_SOURCE2_RGB_EXT 0x8582 #define GL_SOURCE0_ALPHA_EXT 0x8588 #define GL_SOURCE1_ALPHA_EXT 0x8589 #define GL_SOURCE2_ALPHA_EXT 0x858A #define GL_OPERAND0_RGB_EXT 0x8590 #define GL_OPERAND1_RGB_EXT 0x8591 #define GL_OPERAND2_RGB_EXT 0x8592 #define GL_OPERAND0_ALPHA_EXT 0x8598 #define GL_OPERAND1_ALPHA_EXT 0x8599 #define GL_OPERAND2_ALPHA_EXT 0x859A #endif /* GL_APPLE_specular_vector */ #ifndef GL_APPLE_specular_vector #define GL_APPLE_specular_vector 1 #define __GLEE_GL_APPLE_specular_vector 1 /* Constants */ #define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 #endif /* GL_APPLE_transform_hint */ #ifndef GL_APPLE_transform_hint #define GL_APPLE_transform_hint 1 #define __GLEE_GL_APPLE_transform_hint 1 /* Constants */ #define GL_TRANSFORM_HINT_APPLE 0x85B1 #endif /* GL_SGIX_fog_scale */ #ifndef GL_SGIX_fog_scale #define GL_SGIX_fog_scale 1 #define __GLEE_GL_SGIX_fog_scale 1 /* Constants */ #define GL_FOG_SCALE_SGIX 0x81FC #define GL_FOG_SCALE_VALUE_SGIX 0x81FD #endif /* GL_SUNX_constant_data */ #ifndef GL_SUNX_constant_data #define GL_SUNX_constant_data 1 #define __GLEE_GL_SUNX_constant_data 1 /* Constants */ #define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5 #define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6 #ifndef GLEE_H_DEFINED_glFinishTextureSUNX #define GLEE_H_DEFINED_glFinishTextureSUNX typedef void (APIENTRYP GLEEPFNGLFINISHTEXTURESUNXPROC) (); GLEE_EXTERN GLEEPFNGLFINISHTEXTURESUNXPROC GLeeFuncPtr_glFinishTextureSUNX; #define glFinishTextureSUNX GLeeFuncPtr_glFinishTextureSUNX #endif #endif /* GL_SUN_global_alpha */ #ifndef GL_SUN_global_alpha #define GL_SUN_global_alpha 1 #define __GLEE_GL_SUN_global_alpha 1 /* Constants */ #define GL_GLOBAL_ALPHA_SUN 0x81D9 #define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA #ifndef GLEE_H_DEFINED_glGlobalAlphaFactorbSUN #define GLEE_H_DEFINED_glGlobalAlphaFactorbSUN typedef void (APIENTRYP GLEEPFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor); GLEE_EXTERN GLEEPFNGLGLOBALALPHAFACTORBSUNPROC GLeeFuncPtr_glGlobalAlphaFactorbSUN; #define glGlobalAlphaFactorbSUN GLeeFuncPtr_glGlobalAlphaFactorbSUN #endif #ifndef GLEE_H_DEFINED_glGlobalAlphaFactorsSUN #define GLEE_H_DEFINED_glGlobalAlphaFactorsSUN typedef void (APIENTRYP GLEEPFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor); GLEE_EXTERN GLEEPFNGLGLOBALALPHAFACTORSSUNPROC GLeeFuncPtr_glGlobalAlphaFactorsSUN; #define glGlobalAlphaFactorsSUN GLeeFuncPtr_glGlobalAlphaFactorsSUN #endif #ifndef GLEE_H_DEFINED_glGlobalAlphaFactoriSUN #define GLEE_H_DEFINED_glGlobalAlphaFactoriSUN typedef void (APIENTRYP GLEEPFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor); GLEE_EXTERN GLEEPFNGLGLOBALALPHAFACTORISUNPROC GLeeFuncPtr_glGlobalAlphaFactoriSUN; #define glGlobalAlphaFactoriSUN GLeeFuncPtr_glGlobalAlphaFactoriSUN #endif #ifndef GLEE_H_DEFINED_glGlobalAlphaFactorfSUN #define GLEE_H_DEFINED_glGlobalAlphaFactorfSUN typedef void (APIENTRYP GLEEPFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor); GLEE_EXTERN GLEEPFNGLGLOBALALPHAFACTORFSUNPROC GLeeFuncPtr_glGlobalAlphaFactorfSUN; #define glGlobalAlphaFactorfSUN GLeeFuncPtr_glGlobalAlphaFactorfSUN #endif #ifndef GLEE_H_DEFINED_glGlobalAlphaFactordSUN #define GLEE_H_DEFINED_glGlobalAlphaFactordSUN typedef void (APIENTRYP GLEEPFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor); GLEE_EXTERN GLEEPFNGLGLOBALALPHAFACTORDSUNPROC GLeeFuncPtr_glGlobalAlphaFactordSUN; #define glGlobalAlphaFactordSUN GLeeFuncPtr_glGlobalAlphaFactordSUN #endif #ifndef GLEE_H_DEFINED_glGlobalAlphaFactorubSUN #define GLEE_H_DEFINED_glGlobalAlphaFactorubSUN typedef void (APIENTRYP GLEEPFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor); GLEE_EXTERN GLEEPFNGLGLOBALALPHAFACTORUBSUNPROC GLeeFuncPtr_glGlobalAlphaFactorubSUN; #define glGlobalAlphaFactorubSUN GLeeFuncPtr_glGlobalAlphaFactorubSUN #endif #ifndef GLEE_H_DEFINED_glGlobalAlphaFactorusSUN #define GLEE_H_DEFINED_glGlobalAlphaFactorusSUN typedef void (APIENTRYP GLEEPFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor); GLEE_EXTERN GLEEPFNGLGLOBALALPHAFACTORUSSUNPROC GLeeFuncPtr_glGlobalAlphaFactorusSUN; #define glGlobalAlphaFactorusSUN GLeeFuncPtr_glGlobalAlphaFactorusSUN #endif #ifndef GLEE_H_DEFINED_glGlobalAlphaFactoruiSUN #define GLEE_H_DEFINED_glGlobalAlphaFactoruiSUN typedef void (APIENTRYP GLEEPFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor); GLEE_EXTERN GLEEPFNGLGLOBALALPHAFACTORUISUNPROC GLeeFuncPtr_glGlobalAlphaFactoruiSUN; #define glGlobalAlphaFactoruiSUN GLeeFuncPtr_glGlobalAlphaFactoruiSUN #endif #endif /* GL_SUN_triangle_list */ #ifndef GL_SUN_triangle_list #define GL_SUN_triangle_list 1 #define __GLEE_GL_SUN_triangle_list 1 /* Constants */ #define GL_RESTART_SUN 0x0001 #define GL_REPLACE_MIDDLE_SUN 0x0002 #define GL_REPLACE_OLDEST_SUN 0x0003 #define GL_TRIANGLE_LIST_SUN 0x81D7 #define GL_REPLACEMENT_CODE_SUN 0x81D8 #define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0 #define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1 #define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2 #define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3 #define GL_R1UI_V3F_SUN 0x85C4 #define GL_R1UI_C4UB_V3F_SUN 0x85C5 #define GL_R1UI_C3F_V3F_SUN 0x85C6 #define GL_R1UI_N3F_V3F_SUN 0x85C7 #define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8 #define GL_R1UI_T2F_V3F_SUN 0x85C9 #define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA #define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB #ifndef GLEE_H_DEFINED_glReplacementCodeuiSUN #define GLEE_H_DEFINED_glReplacementCodeuiSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUISUNPROC) (GLuint code); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUISUNPROC GLeeFuncPtr_glReplacementCodeuiSUN; #define glReplacementCodeuiSUN GLeeFuncPtr_glReplacementCodeuiSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeusSUN #define GLEE_H_DEFINED_glReplacementCodeusSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUSSUNPROC GLeeFuncPtr_glReplacementCodeusSUN; #define glReplacementCodeusSUN GLeeFuncPtr_glReplacementCodeusSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeubSUN #define GLEE_H_DEFINED_glReplacementCodeubSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUBSUNPROC GLeeFuncPtr_glReplacementCodeubSUN; #define glReplacementCodeubSUN GLeeFuncPtr_glReplacementCodeubSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeuivSUN #define GLEE_H_DEFINED_glReplacementCodeuivSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint * code); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUIVSUNPROC GLeeFuncPtr_glReplacementCodeuivSUN; #define glReplacementCodeuivSUN GLeeFuncPtr_glReplacementCodeuivSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeusvSUN #define GLEE_H_DEFINED_glReplacementCodeusvSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort * code); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUSVSUNPROC GLeeFuncPtr_glReplacementCodeusvSUN; #define glReplacementCodeusvSUN GLeeFuncPtr_glReplacementCodeusvSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeubvSUN #define GLEE_H_DEFINED_glReplacementCodeubvSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte * code); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUBVSUNPROC GLeeFuncPtr_glReplacementCodeubvSUN; #define glReplacementCodeubvSUN GLeeFuncPtr_glReplacementCodeubvSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodePointerSUN #define GLEE_H_DEFINED_glReplacementCodePointerSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const GLvoid* * pointer); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEPOINTERSUNPROC GLeeFuncPtr_glReplacementCodePointerSUN; #define glReplacementCodePointerSUN GLeeFuncPtr_glReplacementCodePointerSUN #endif #endif /* GL_SUN_vertex */ #ifndef GL_SUN_vertex #define GL_SUN_vertex 1 #define __GLEE_GL_SUN_vertex 1 /* Constants */ #ifndef GLEE_H_DEFINED_glColor4ubVertex2fSUN #define GLEE_H_DEFINED_glColor4ubVertex2fSUN typedef void (APIENTRYP GLEEPFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); GLEE_EXTERN GLEEPFNGLCOLOR4UBVERTEX2FSUNPROC GLeeFuncPtr_glColor4ubVertex2fSUN; #define glColor4ubVertex2fSUN GLeeFuncPtr_glColor4ubVertex2fSUN #endif #ifndef GLEE_H_DEFINED_glColor4ubVertex2fvSUN #define GLEE_H_DEFINED_glColor4ubVertex2fvSUN typedef void (APIENTRYP GLEEPFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte * c, const GLfloat * v); GLEE_EXTERN GLEEPFNGLCOLOR4UBVERTEX2FVSUNPROC GLeeFuncPtr_glColor4ubVertex2fvSUN; #define glColor4ubVertex2fvSUN GLeeFuncPtr_glColor4ubVertex2fvSUN #endif #ifndef GLEE_H_DEFINED_glColor4ubVertex3fSUN #define GLEE_H_DEFINED_glColor4ubVertex3fSUN typedef void (APIENTRYP GLEEPFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLCOLOR4UBVERTEX3FSUNPROC GLeeFuncPtr_glColor4ubVertex3fSUN; #define glColor4ubVertex3fSUN GLeeFuncPtr_glColor4ubVertex3fSUN #endif #ifndef GLEE_H_DEFINED_glColor4ubVertex3fvSUN #define GLEE_H_DEFINED_glColor4ubVertex3fvSUN typedef void (APIENTRYP GLEEPFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte * c, const GLfloat * v); GLEE_EXTERN GLEEPFNGLCOLOR4UBVERTEX3FVSUNPROC GLeeFuncPtr_glColor4ubVertex3fvSUN; #define glColor4ubVertex3fvSUN GLeeFuncPtr_glColor4ubVertex3fvSUN #endif #ifndef GLEE_H_DEFINED_glColor3fVertex3fSUN #define GLEE_H_DEFINED_glColor3fVertex3fSUN typedef void (APIENTRYP GLEEPFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLCOLOR3FVERTEX3FSUNPROC GLeeFuncPtr_glColor3fVertex3fSUN; #define glColor3fVertex3fSUN GLeeFuncPtr_glColor3fVertex3fSUN #endif #ifndef GLEE_H_DEFINED_glColor3fVertex3fvSUN #define GLEE_H_DEFINED_glColor3fVertex3fvSUN typedef void (APIENTRYP GLEEPFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat * c, const GLfloat * v); GLEE_EXTERN GLEEPFNGLCOLOR3FVERTEX3FVSUNPROC GLeeFuncPtr_glColor3fVertex3fvSUN; #define glColor3fVertex3fvSUN GLeeFuncPtr_glColor3fVertex3fvSUN #endif #ifndef GLEE_H_DEFINED_glNormal3fVertex3fSUN #define GLEE_H_DEFINED_glNormal3fVertex3fSUN typedef void (APIENTRYP GLEEPFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLNORMAL3FVERTEX3FSUNPROC GLeeFuncPtr_glNormal3fVertex3fSUN; #define glNormal3fVertex3fSUN GLeeFuncPtr_glNormal3fVertex3fSUN #endif #ifndef GLEE_H_DEFINED_glNormal3fVertex3fvSUN #define GLEE_H_DEFINED_glNormal3fVertex3fvSUN typedef void (APIENTRYP GLEEPFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat * n, const GLfloat * v); GLEE_EXTERN GLEEPFNGLNORMAL3FVERTEX3FVSUNPROC GLeeFuncPtr_glNormal3fVertex3fvSUN; #define glNormal3fVertex3fvSUN GLeeFuncPtr_glNormal3fVertex3fvSUN #endif #ifndef GLEE_H_DEFINED_glColor4fNormal3fVertex3fSUN #define GLEE_H_DEFINED_glColor4fNormal3fVertex3fSUN typedef void (APIENTRYP GLEEPFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC GLeeFuncPtr_glColor4fNormal3fVertex3fSUN; #define glColor4fNormal3fVertex3fSUN GLeeFuncPtr_glColor4fNormal3fVertex3fSUN #endif #ifndef GLEE_H_DEFINED_glColor4fNormal3fVertex3fvSUN #define GLEE_H_DEFINED_glColor4fNormal3fVertex3fvSUN typedef void (APIENTRYP GLEEPFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat * c, const GLfloat * n, const GLfloat * v); GLEE_EXTERN GLEEPFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC GLeeFuncPtr_glColor4fNormal3fVertex3fvSUN; #define glColor4fNormal3fVertex3fvSUN GLeeFuncPtr_glColor4fNormal3fVertex3fvSUN #endif #ifndef GLEE_H_DEFINED_glTexCoord2fVertex3fSUN #define GLEE_H_DEFINED_glTexCoord2fVertex3fSUN typedef void (APIENTRYP GLEEPFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLTEXCOORD2FVERTEX3FSUNPROC GLeeFuncPtr_glTexCoord2fVertex3fSUN; #define glTexCoord2fVertex3fSUN GLeeFuncPtr_glTexCoord2fVertex3fSUN #endif #ifndef GLEE_H_DEFINED_glTexCoord2fVertex3fvSUN #define GLEE_H_DEFINED_glTexCoord2fVertex3fvSUN typedef void (APIENTRYP GLEEPFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat * tc, const GLfloat * v); GLEE_EXTERN GLEEPFNGLTEXCOORD2FVERTEX3FVSUNPROC GLeeFuncPtr_glTexCoord2fVertex3fvSUN; #define glTexCoord2fVertex3fvSUN GLeeFuncPtr_glTexCoord2fVertex3fvSUN #endif #ifndef GLEE_H_DEFINED_glTexCoord4fVertex4fSUN #define GLEE_H_DEFINED_glTexCoord4fVertex4fSUN typedef void (APIENTRYP GLEEPFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLEE_EXTERN GLEEPFNGLTEXCOORD4FVERTEX4FSUNPROC GLeeFuncPtr_glTexCoord4fVertex4fSUN; #define glTexCoord4fVertex4fSUN GLeeFuncPtr_glTexCoord4fVertex4fSUN #endif #ifndef GLEE_H_DEFINED_glTexCoord4fVertex4fvSUN #define GLEE_H_DEFINED_glTexCoord4fVertex4fvSUN typedef void (APIENTRYP GLEEPFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat * tc, const GLfloat * v); GLEE_EXTERN GLEEPFNGLTEXCOORD4FVERTEX4FVSUNPROC GLeeFuncPtr_glTexCoord4fVertex4fvSUN; #define glTexCoord4fVertex4fvSUN GLeeFuncPtr_glTexCoord4fVertex4fvSUN #endif #ifndef GLEE_H_DEFINED_glTexCoord2fColor4ubVertex3fSUN #define GLEE_H_DEFINED_glTexCoord2fColor4ubVertex3fSUN typedef void (APIENTRYP GLEEPFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC GLeeFuncPtr_glTexCoord2fColor4ubVertex3fSUN; #define glTexCoord2fColor4ubVertex3fSUN GLeeFuncPtr_glTexCoord2fColor4ubVertex3fSUN #endif #ifndef GLEE_H_DEFINED_glTexCoord2fColor4ubVertex3fvSUN #define GLEE_H_DEFINED_glTexCoord2fColor4ubVertex3fvSUN typedef void (APIENTRYP GLEEPFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat * tc, const GLubyte * c, const GLfloat * v); GLEE_EXTERN GLEEPFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC GLeeFuncPtr_glTexCoord2fColor4ubVertex3fvSUN; #define glTexCoord2fColor4ubVertex3fvSUN GLeeFuncPtr_glTexCoord2fColor4ubVertex3fvSUN #endif #ifndef GLEE_H_DEFINED_glTexCoord2fColor3fVertex3fSUN #define GLEE_H_DEFINED_glTexCoord2fColor3fVertex3fSUN typedef void (APIENTRYP GLEEPFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC GLeeFuncPtr_glTexCoord2fColor3fVertex3fSUN; #define glTexCoord2fColor3fVertex3fSUN GLeeFuncPtr_glTexCoord2fColor3fVertex3fSUN #endif #ifndef GLEE_H_DEFINED_glTexCoord2fColor3fVertex3fvSUN #define GLEE_H_DEFINED_glTexCoord2fColor3fVertex3fvSUN typedef void (APIENTRYP GLEEPFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat * tc, const GLfloat * c, const GLfloat * v); GLEE_EXTERN GLEEPFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC GLeeFuncPtr_glTexCoord2fColor3fVertex3fvSUN; #define glTexCoord2fColor3fVertex3fvSUN GLeeFuncPtr_glTexCoord2fColor3fVertex3fvSUN #endif #ifndef GLEE_H_DEFINED_glTexCoord2fNormal3fVertex3fSUN #define GLEE_H_DEFINED_glTexCoord2fNormal3fVertex3fSUN typedef void (APIENTRYP GLEEPFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC GLeeFuncPtr_glTexCoord2fNormal3fVertex3fSUN; #define glTexCoord2fNormal3fVertex3fSUN GLeeFuncPtr_glTexCoord2fNormal3fVertex3fSUN #endif #ifndef GLEE_H_DEFINED_glTexCoord2fNormal3fVertex3fvSUN #define GLEE_H_DEFINED_glTexCoord2fNormal3fVertex3fvSUN typedef void (APIENTRYP GLEEPFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat * tc, const GLfloat * n, const GLfloat * v); GLEE_EXTERN GLEEPFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC GLeeFuncPtr_glTexCoord2fNormal3fVertex3fvSUN; #define glTexCoord2fNormal3fVertex3fvSUN GLeeFuncPtr_glTexCoord2fNormal3fVertex3fvSUN #endif #ifndef GLEE_H_DEFINED_glTexCoord2fColor4fNormal3fVertex3fSUN #define GLEE_H_DEFINED_glTexCoord2fColor4fNormal3fVertex3fSUN typedef void (APIENTRYP GLEEPFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC GLeeFuncPtr_glTexCoord2fColor4fNormal3fVertex3fSUN; #define glTexCoord2fColor4fNormal3fVertex3fSUN GLeeFuncPtr_glTexCoord2fColor4fNormal3fVertex3fSUN #endif #ifndef GLEE_H_DEFINED_glTexCoord2fColor4fNormal3fVertex3fvSUN #define GLEE_H_DEFINED_glTexCoord2fColor4fNormal3fVertex3fvSUN typedef void (APIENTRYP GLEEPFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat * tc, const GLfloat * c, const GLfloat * n, const GLfloat * v); GLEE_EXTERN GLEEPFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC GLeeFuncPtr_glTexCoord2fColor4fNormal3fVertex3fvSUN; #define glTexCoord2fColor4fNormal3fVertex3fvSUN GLeeFuncPtr_glTexCoord2fColor4fNormal3fVertex3fvSUN #endif #ifndef GLEE_H_DEFINED_glTexCoord4fColor4fNormal3fVertex4fSUN #define GLEE_H_DEFINED_glTexCoord4fColor4fNormal3fVertex4fSUN typedef void (APIENTRYP GLEEPFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLEE_EXTERN GLEEPFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC GLeeFuncPtr_glTexCoord4fColor4fNormal3fVertex4fSUN; #define glTexCoord4fColor4fNormal3fVertex4fSUN GLeeFuncPtr_glTexCoord4fColor4fNormal3fVertex4fSUN #endif #ifndef GLEE_H_DEFINED_glTexCoord4fColor4fNormal3fVertex4fvSUN #define GLEE_H_DEFINED_glTexCoord4fColor4fNormal3fVertex4fvSUN typedef void (APIENTRYP GLEEPFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat * tc, const GLfloat * c, const GLfloat * n, const GLfloat * v); GLEE_EXTERN GLEEPFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC GLeeFuncPtr_glTexCoord4fColor4fNormal3fVertex4fvSUN; #define glTexCoord4fColor4fNormal3fVertex4fvSUN GLeeFuncPtr_glTexCoord4fColor4fNormal3fVertex4fvSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeuiVertex3fSUN #define GLEE_H_DEFINED_glReplacementCodeuiVertex3fSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLuint rc, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC GLeeFuncPtr_glReplacementCodeuiVertex3fSUN; #define glReplacementCodeuiVertex3fSUN GLeeFuncPtr_glReplacementCodeuiVertex3fSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeuiVertex3fvSUN #define GLEE_H_DEFINED_glReplacementCodeuiVertex3fvSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLuint * rc, const GLfloat * v); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC GLeeFuncPtr_glReplacementCodeuiVertex3fvSUN; #define glReplacementCodeuiVertex3fvSUN GLeeFuncPtr_glReplacementCodeuiVertex3fvSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeuiColor4ubVertex3fSUN #define GLEE_H_DEFINED_glReplacementCodeuiColor4ubVertex3fSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC GLeeFuncPtr_glReplacementCodeuiColor4ubVertex3fSUN; #define glReplacementCodeuiColor4ubVertex3fSUN GLeeFuncPtr_glReplacementCodeuiColor4ubVertex3fSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeuiColor4ubVertex3fvSUN #define GLEE_H_DEFINED_glReplacementCodeuiColor4ubVertex3fvSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLuint * rc, const GLubyte * c, const GLfloat * v); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC GLeeFuncPtr_glReplacementCodeuiColor4ubVertex3fvSUN; #define glReplacementCodeuiColor4ubVertex3fvSUN GLeeFuncPtr_glReplacementCodeuiColor4ubVertex3fvSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeuiColor3fVertex3fSUN #define GLEE_H_DEFINED_glReplacementCodeuiColor3fVertex3fSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC GLeeFuncPtr_glReplacementCodeuiColor3fVertex3fSUN; #define glReplacementCodeuiColor3fVertex3fSUN GLeeFuncPtr_glReplacementCodeuiColor3fVertex3fSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeuiColor3fVertex3fvSUN #define GLEE_H_DEFINED_glReplacementCodeuiColor3fVertex3fvSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLuint * rc, const GLfloat * c, const GLfloat * v); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC GLeeFuncPtr_glReplacementCodeuiColor3fVertex3fvSUN; #define glReplacementCodeuiColor3fVertex3fvSUN GLeeFuncPtr_glReplacementCodeuiColor3fVertex3fvSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeuiNormal3fVertex3fSUN #define GLEE_H_DEFINED_glReplacementCodeuiNormal3fVertex3fSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC GLeeFuncPtr_glReplacementCodeuiNormal3fVertex3fSUN; #define glReplacementCodeuiNormal3fVertex3fSUN GLeeFuncPtr_glReplacementCodeuiNormal3fVertex3fSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeuiNormal3fVertex3fvSUN #define GLEE_H_DEFINED_glReplacementCodeuiNormal3fVertex3fvSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLuint * rc, const GLfloat * n, const GLfloat * v); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC GLeeFuncPtr_glReplacementCodeuiNormal3fVertex3fvSUN; #define glReplacementCodeuiNormal3fVertex3fvSUN GLeeFuncPtr_glReplacementCodeuiNormal3fVertex3fvSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeuiColor4fNormal3fVertex3fSUN #define GLEE_H_DEFINED_glReplacementCodeuiColor4fNormal3fVertex3fSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC GLeeFuncPtr_glReplacementCodeuiColor4fNormal3fVertex3fSUN; #define glReplacementCodeuiColor4fNormal3fVertex3fSUN GLeeFuncPtr_glReplacementCodeuiColor4fNormal3fVertex3fSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeuiColor4fNormal3fVertex3fvSUN #define GLEE_H_DEFINED_glReplacementCodeuiColor4fNormal3fVertex3fvSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint * rc, const GLfloat * c, const GLfloat * n, const GLfloat * v); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC GLeeFuncPtr_glReplacementCodeuiColor4fNormal3fVertex3fvSUN; #define glReplacementCodeuiColor4fNormal3fVertex3fvSUN GLeeFuncPtr_glReplacementCodeuiColor4fNormal3fVertex3fvSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeuiTexCoord2fVertex3fSUN #define GLEE_H_DEFINED_glReplacementCodeuiTexCoord2fVertex3fSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC GLeeFuncPtr_glReplacementCodeuiTexCoord2fVertex3fSUN; #define glReplacementCodeuiTexCoord2fVertex3fSUN GLeeFuncPtr_glReplacementCodeuiTexCoord2fVertex3fSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeuiTexCoord2fVertex3fvSUN #define GLEE_H_DEFINED_glReplacementCodeuiTexCoord2fVertex3fvSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLuint * rc, const GLfloat * tc, const GLfloat * v); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC GLeeFuncPtr_glReplacementCodeuiTexCoord2fVertex3fvSUN; #define glReplacementCodeuiTexCoord2fVertex3fvSUN GLeeFuncPtr_glReplacementCodeuiTexCoord2fVertex3fvSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN #define GLEE_H_DEFINED_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC GLeeFuncPtr_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN; #define glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN GLeeFuncPtr_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN #define GLEE_H_DEFINED_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLuint * rc, const GLfloat * tc, const GLfloat * n, const GLfloat * v); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC GLeeFuncPtr_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN; #define glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN GLeeFuncPtr_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN #define GLEE_H_DEFINED_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC GLeeFuncPtr_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN; #define glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN GLeeFuncPtr_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN #define GLEE_H_DEFINED_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint * rc, const GLfloat * tc, const GLfloat * c, const GLfloat * n, const GLfloat * v); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC GLeeFuncPtr_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN; #define glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN GLeeFuncPtr_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN #endif #endif /* GL_EXT_blend_func_separate */ #ifndef GL_EXT_blend_func_separate #define GL_EXT_blend_func_separate 1 #define __GLEE_GL_EXT_blend_func_separate 1 /* Constants */ #define GL_BLEND_DST_RGB_EXT 0x80C8 #define GL_BLEND_SRC_RGB_EXT 0x80C9 #define GL_BLEND_DST_ALPHA_EXT 0x80CA #define GL_BLEND_SRC_ALPHA_EXT 0x80CB #ifndef GLEE_H_DEFINED_glBlendFuncSeparateEXT #define GLEE_H_DEFINED_glBlendFuncSeparateEXT typedef void (APIENTRYP GLEEPFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); GLEE_EXTERN GLEEPFNGLBLENDFUNCSEPARATEEXTPROC GLeeFuncPtr_glBlendFuncSeparateEXT; #define glBlendFuncSeparateEXT GLeeFuncPtr_glBlendFuncSeparateEXT #endif #endif /* GL_INGR_color_clamp */ #ifndef GL_INGR_color_clamp #define GL_INGR_color_clamp 1 #define __GLEE_GL_INGR_color_clamp 1 /* Constants */ #define GL_RED_MIN_CLAMP_INGR 0x8560 #define GL_GREEN_MIN_CLAMP_INGR 0x8561 #define GL_BLUE_MIN_CLAMP_INGR 0x8562 #define GL_ALPHA_MIN_CLAMP_INGR 0x8563 #define GL_RED_MAX_CLAMP_INGR 0x8564 #define GL_GREEN_MAX_CLAMP_INGR 0x8565 #define GL_BLUE_MAX_CLAMP_INGR 0x8566 #define GL_ALPHA_MAX_CLAMP_INGR 0x8567 #endif /* GL_INGR_interlace_read */ #ifndef GL_INGR_interlace_read #define GL_INGR_interlace_read 1 #define __GLEE_GL_INGR_interlace_read 1 /* Constants */ #define GL_INTERLACE_READ_INGR 0x8568 #endif /* GL_EXT_stencil_wrap */ #ifndef GL_EXT_stencil_wrap #define GL_EXT_stencil_wrap 1 #define __GLEE_GL_EXT_stencil_wrap 1 /* Constants */ #define GL_INCR_WRAP_EXT 0x8507 #define GL_DECR_WRAP_EXT 0x8508 #endif /* GL_EXT_422_pixels */ #ifndef GL_EXT_422_pixels #define GL_EXT_422_pixels 1 #define __GLEE_GL_EXT_422_pixels 1 /* Constants */ #define GL_422_EXT 0x80CC #define GL_422_REV_EXT 0x80CD #define GL_422_AVERAGE_EXT 0x80CE #define GL_422_REV_AVERAGE_EXT 0x80CF #endif /* GL_NV_texgen_reflection */ #ifndef GL_NV_texgen_reflection #define GL_NV_texgen_reflection 1 #define __GLEE_GL_NV_texgen_reflection 1 /* Constants */ #define GL_NORMAL_MAP_NV 0x8511 #define GL_REFLECTION_MAP_NV 0x8512 #endif /* GL_EXT_texture_cube_map */ #ifndef GL_EXT_texture_cube_map #define GL_EXT_texture_cube_map 1 #define __GLEE_GL_EXT_texture_cube_map 1 /* Constants */ #define GL_NORMAL_MAP_EXT 0x8511 #define GL_REFLECTION_MAP_EXT 0x8512 #define GL_TEXTURE_CUBE_MAP_EXT 0x8513 #define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A #define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B #define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C #endif /* GL_SUN_convolution_border_modes */ #ifndef GL_SUN_convolution_border_modes #define GL_SUN_convolution_border_modes 1 #define __GLEE_GL_SUN_convolution_border_modes 1 /* Constants */ #define GL_WRAP_BORDER_SUN 0x81D4 #endif /* GL_EXT_texture_env_add */ #ifndef GL_EXT_texture_env_add #define GL_EXT_texture_env_add 1 #define __GLEE_GL_EXT_texture_env_add 1 /* Constants */ #endif /* GL_EXT_texture_lod_bias */ #ifndef GL_EXT_texture_lod_bias #define GL_EXT_texture_lod_bias 1 #define __GLEE_GL_EXT_texture_lod_bias 1 /* Constants */ #define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD #define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 #define GL_TEXTURE_LOD_BIAS_EXT 0x8501 #endif /* GL_EXT_texture_filter_anisotropic */ #ifndef GL_EXT_texture_filter_anisotropic #define GL_EXT_texture_filter_anisotropic 1 #define __GLEE_GL_EXT_texture_filter_anisotropic 1 /* Constants */ #define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE #define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF #endif /* GL_EXT_vertex_weighting */ #ifndef GL_EXT_vertex_weighting #define GL_EXT_vertex_weighting 1 #define __GLEE_GL_EXT_vertex_weighting 1 /* Constants */ #define GL_MODELVIEW0_STACK_DEPTH_EXT GL_MODELVIEW_STACK_DEPTH #define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 #define GL_MODELVIEW0_MATRIX_EXT GL_MODELVIEW_MATRIX #define GL_MODELVIEW1_MATRIX_EXT 0x8506 #define GL_VERTEX_WEIGHTING_EXT 0x8509 #define GL_MODELVIEW0_EXT GL_MODELVIEW #define GL_MODELVIEW1_EXT 0x850A #define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B #define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C #define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D #define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E #define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F #define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510 #ifndef GLEE_H_DEFINED_glVertexWeightfEXT #define GLEE_H_DEFINED_glVertexWeightfEXT typedef void (APIENTRYP GLEEPFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight); GLEE_EXTERN GLEEPFNGLVERTEXWEIGHTFEXTPROC GLeeFuncPtr_glVertexWeightfEXT; #define glVertexWeightfEXT GLeeFuncPtr_glVertexWeightfEXT #endif #ifndef GLEE_H_DEFINED_glVertexWeightfvEXT #define GLEE_H_DEFINED_glVertexWeightfvEXT typedef void (APIENTRYP GLEEPFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat * weight); GLEE_EXTERN GLEEPFNGLVERTEXWEIGHTFVEXTPROC GLeeFuncPtr_glVertexWeightfvEXT; #define glVertexWeightfvEXT GLeeFuncPtr_glVertexWeightfvEXT #endif #ifndef GLEE_H_DEFINED_glVertexWeightPointerEXT #define GLEE_H_DEFINED_glVertexWeightPointerEXT typedef void (APIENTRYP GLEEPFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLVERTEXWEIGHTPOINTEREXTPROC GLeeFuncPtr_glVertexWeightPointerEXT; #define glVertexWeightPointerEXT GLeeFuncPtr_glVertexWeightPointerEXT #endif #endif /* GL_NV_light_max_exponent */ #ifndef GL_NV_light_max_exponent #define GL_NV_light_max_exponent 1 #define __GLEE_GL_NV_light_max_exponent 1 /* Constants */ #define GL_MAX_SHININESS_NV 0x8504 #define GL_MAX_SPOT_EXPONENT_NV 0x8505 #endif /* GL_NV_vertex_array_range */ #ifndef GL_NV_vertex_array_range #define GL_NV_vertex_array_range 1 #define __GLEE_GL_NV_vertex_array_range 1 /* Constants */ #define GL_VERTEX_ARRAY_RANGE_NV 0x851D #define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E #define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F #define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520 #define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521 #ifndef GLEE_H_DEFINED_glFlushVertexArrayRangeNV #define GLEE_H_DEFINED_glFlushVertexArrayRangeNV typedef void (APIENTRYP GLEEPFNGLFLUSHVERTEXARRAYRANGENVPROC) (); GLEE_EXTERN GLEEPFNGLFLUSHVERTEXARRAYRANGENVPROC GLeeFuncPtr_glFlushVertexArrayRangeNV; #define glFlushVertexArrayRangeNV GLeeFuncPtr_glFlushVertexArrayRangeNV #endif #ifndef GLEE_H_DEFINED_glVertexArrayRangeNV #define GLEE_H_DEFINED_glVertexArrayRangeNV typedef void (APIENTRYP GLEEPFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLVERTEXARRAYRANGENVPROC GLeeFuncPtr_glVertexArrayRangeNV; #define glVertexArrayRangeNV GLeeFuncPtr_glVertexArrayRangeNV #endif #endif /* GL_NV_register_combiners */ #ifndef GL_NV_register_combiners #define GL_NV_register_combiners 1 #define __GLEE_GL_NV_register_combiners 1 /* Constants */ #define GL_REGISTER_COMBINERS_NV 0x8522 #define GL_VARIABLE_A_NV 0x8523 #define GL_VARIABLE_B_NV 0x8524 #define GL_VARIABLE_C_NV 0x8525 #define GL_VARIABLE_D_NV 0x8526 #define GL_VARIABLE_E_NV 0x8527 #define GL_VARIABLE_F_NV 0x8528 #define GL_VARIABLE_G_NV 0x8529 #define GL_CONSTANT_COLOR0_NV 0x852A #define GL_CONSTANT_COLOR1_NV 0x852B #define GL_PRIMARY_COLOR_NV 0x852C #define GL_SECONDARY_COLOR_NV 0x852D #define GL_SPARE0_NV 0x852E #define GL_SPARE1_NV 0x852F #define GL_DISCARD_NV 0x8530 #define GL_E_TIMES_F_NV 0x8531 #define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532 #define GL_UNSIGNED_IDENTITY_NV 0x8536 #define GL_UNSIGNED_INVERT_NV 0x8537 #define GL_EXPAND_NORMAL_NV 0x8538 #define GL_EXPAND_NEGATE_NV 0x8539 #define GL_HALF_BIAS_NORMAL_NV 0x853A #define GL_HALF_BIAS_NEGATE_NV 0x853B #define GL_SIGNED_IDENTITY_NV 0x853C #define GL_SIGNED_NEGATE_NV 0x853D #define GL_SCALE_BY_TWO_NV 0x853E #define GL_SCALE_BY_FOUR_NV 0x853F #define GL_SCALE_BY_ONE_HALF_NV 0x8540 #define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541 #define GL_COMBINER_INPUT_NV 0x8542 #define GL_COMBINER_MAPPING_NV 0x8543 #define GL_COMBINER_COMPONENT_USAGE_NV 0x8544 #define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545 #define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546 #define GL_COMBINER_MUX_SUM_NV 0x8547 #define GL_COMBINER_SCALE_NV 0x8548 #define GL_COMBINER_BIAS_NV 0x8549 #define GL_COMBINER_AB_OUTPUT_NV 0x854A #define GL_COMBINER_CD_OUTPUT_NV 0x854B #define GL_COMBINER_SUM_OUTPUT_NV 0x854C #define GL_MAX_GENERAL_COMBINERS_NV 0x854D #define GL_NUM_GENERAL_COMBINERS_NV 0x854E #define GL_COLOR_SUM_CLAMP_NV 0x854F #define GL_COMBINER0_NV 0x8550 #define GL_COMBINER1_NV 0x8551 #define GL_COMBINER2_NV 0x8552 #define GL_COMBINER3_NV 0x8553 #define GL_COMBINER4_NV 0x8554 #define GL_COMBINER5_NV 0x8555 #define GL_COMBINER6_NV 0x8556 #define GL_COMBINER7_NV 0x8557 #ifndef GLEE_H_DEFINED_glCombinerParameterfvNV #define GLEE_H_DEFINED_glCombinerParameterfvNV typedef void (APIENTRYP GLEEPFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLCOMBINERPARAMETERFVNVPROC GLeeFuncPtr_glCombinerParameterfvNV; #define glCombinerParameterfvNV GLeeFuncPtr_glCombinerParameterfvNV #endif #ifndef GLEE_H_DEFINED_glCombinerParameterfNV #define GLEE_H_DEFINED_glCombinerParameterfNV typedef void (APIENTRYP GLEEPFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLCOMBINERPARAMETERFNVPROC GLeeFuncPtr_glCombinerParameterfNV; #define glCombinerParameterfNV GLeeFuncPtr_glCombinerParameterfNV #endif #ifndef GLEE_H_DEFINED_glCombinerParameterivNV #define GLEE_H_DEFINED_glCombinerParameterivNV typedef void (APIENTRYP GLEEPFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLCOMBINERPARAMETERIVNVPROC GLeeFuncPtr_glCombinerParameterivNV; #define glCombinerParameterivNV GLeeFuncPtr_glCombinerParameterivNV #endif #ifndef GLEE_H_DEFINED_glCombinerParameteriNV #define GLEE_H_DEFINED_glCombinerParameteriNV typedef void (APIENTRYP GLEEPFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLCOMBINERPARAMETERINVPROC GLeeFuncPtr_glCombinerParameteriNV; #define glCombinerParameteriNV GLeeFuncPtr_glCombinerParameteriNV #endif #ifndef GLEE_H_DEFINED_glCombinerInputNV #define GLEE_H_DEFINED_glCombinerInputNV typedef void (APIENTRYP GLEEPFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); GLEE_EXTERN GLEEPFNGLCOMBINERINPUTNVPROC GLeeFuncPtr_glCombinerInputNV; #define glCombinerInputNV GLeeFuncPtr_glCombinerInputNV #endif #ifndef GLEE_H_DEFINED_glCombinerOutputNV #define GLEE_H_DEFINED_glCombinerOutputNV typedef void (APIENTRYP GLEEPFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); GLEE_EXTERN GLEEPFNGLCOMBINEROUTPUTNVPROC GLeeFuncPtr_glCombinerOutputNV; #define glCombinerOutputNV GLeeFuncPtr_glCombinerOutputNV #endif #ifndef GLEE_H_DEFINED_glFinalCombinerInputNV #define GLEE_H_DEFINED_glFinalCombinerInputNV typedef void (APIENTRYP GLEEPFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); GLEE_EXTERN GLEEPFNGLFINALCOMBINERINPUTNVPROC GLeeFuncPtr_glFinalCombinerInputNV; #define glFinalCombinerInputNV GLeeFuncPtr_glFinalCombinerInputNV #endif #ifndef GLEE_H_DEFINED_glGetCombinerInputParameterfvNV #define GLEE_H_DEFINED_glGetCombinerInputParameterfvNV typedef void (APIENTRYP GLEEPFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETCOMBINERINPUTPARAMETERFVNVPROC GLeeFuncPtr_glGetCombinerInputParameterfvNV; #define glGetCombinerInputParameterfvNV GLeeFuncPtr_glGetCombinerInputParameterfvNV #endif #ifndef GLEE_H_DEFINED_glGetCombinerInputParameterivNV #define GLEE_H_DEFINED_glGetCombinerInputParameterivNV typedef void (APIENTRYP GLEEPFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETCOMBINERINPUTPARAMETERIVNVPROC GLeeFuncPtr_glGetCombinerInputParameterivNV; #define glGetCombinerInputParameterivNV GLeeFuncPtr_glGetCombinerInputParameterivNV #endif #ifndef GLEE_H_DEFINED_glGetCombinerOutputParameterfvNV #define GLEE_H_DEFINED_glGetCombinerOutputParameterfvNV typedef void (APIENTRYP GLEEPFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC GLeeFuncPtr_glGetCombinerOutputParameterfvNV; #define glGetCombinerOutputParameterfvNV GLeeFuncPtr_glGetCombinerOutputParameterfvNV #endif #ifndef GLEE_H_DEFINED_glGetCombinerOutputParameterivNV #define GLEE_H_DEFINED_glGetCombinerOutputParameterivNV typedef void (APIENTRYP GLEEPFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC GLeeFuncPtr_glGetCombinerOutputParameterivNV; #define glGetCombinerOutputParameterivNV GLeeFuncPtr_glGetCombinerOutputParameterivNV #endif #ifndef GLEE_H_DEFINED_glGetFinalCombinerInputParameterfvNV #define GLEE_H_DEFINED_glGetFinalCombinerInputParameterfvNV typedef void (APIENTRYP GLEEPFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC GLeeFuncPtr_glGetFinalCombinerInputParameterfvNV; #define glGetFinalCombinerInputParameterfvNV GLeeFuncPtr_glGetFinalCombinerInputParameterfvNV #endif #ifndef GLEE_H_DEFINED_glGetFinalCombinerInputParameterivNV #define GLEE_H_DEFINED_glGetFinalCombinerInputParameterivNV typedef void (APIENTRYP GLEEPFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC GLeeFuncPtr_glGetFinalCombinerInputParameterivNV; #define glGetFinalCombinerInputParameterivNV GLeeFuncPtr_glGetFinalCombinerInputParameterivNV #endif #endif /* GL_NV_fog_distance */ #ifndef GL_NV_fog_distance #define GL_NV_fog_distance 1 #define __GLEE_GL_NV_fog_distance 1 /* Constants */ #define GL_FOG_DISTANCE_MODE_NV 0x855A #define GL_EYE_RADIAL_NV 0x855B #define GL_EYE_PLANE_ABSOLUTE_NV 0x855C #endif /* GL_NV_texgen_emboss */ #ifndef GL_NV_texgen_emboss #define GL_NV_texgen_emboss 1 #define __GLEE_GL_NV_texgen_emboss 1 /* Constants */ #define GL_EMBOSS_LIGHT_NV 0x855D #define GL_EMBOSS_CONSTANT_NV 0x855E #define GL_EMBOSS_MAP_NV 0x855F #endif /* GL_NV_blend_square */ #ifndef GL_NV_blend_square #define GL_NV_blend_square 1 #define __GLEE_GL_NV_blend_square 1 /* Constants */ #endif /* GL_NV_texture_env_combine4 */ #ifndef GL_NV_texture_env_combine4 #define GL_NV_texture_env_combine4 1 #define __GLEE_GL_NV_texture_env_combine4 1 /* Constants */ #define GL_COMBINE4_NV 0x8503 #define GL_SOURCE3_RGB_NV 0x8583 #define GL_SOURCE3_ALPHA_NV 0x858B #define GL_OPERAND3_RGB_NV 0x8593 #define GL_OPERAND3_ALPHA_NV 0x859B #endif /* GL_MESA_resize_buffers */ #ifndef GL_MESA_resize_buffers #define GL_MESA_resize_buffers 1 #define __GLEE_GL_MESA_resize_buffers 1 /* Constants */ #ifndef GLEE_H_DEFINED_glResizeBuffersMESA #define GLEE_H_DEFINED_glResizeBuffersMESA typedef void (APIENTRYP GLEEPFNGLRESIZEBUFFERSMESAPROC) (); GLEE_EXTERN GLEEPFNGLRESIZEBUFFERSMESAPROC GLeeFuncPtr_glResizeBuffersMESA; #define glResizeBuffersMESA GLeeFuncPtr_glResizeBuffersMESA #endif #endif /* GL_MESA_window_pos */ #ifndef GL_MESA_window_pos #define GL_MESA_window_pos 1 #define __GLEE_GL_MESA_window_pos 1 /* Constants */ #ifndef GLEE_H_DEFINED_glWindowPos2dMESA #define GLEE_H_DEFINED_glWindowPos2dMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y); GLEE_EXTERN GLEEPFNGLWINDOWPOS2DMESAPROC GLeeFuncPtr_glWindowPos2dMESA; #define glWindowPos2dMESA GLeeFuncPtr_glWindowPos2dMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos2dvMESA #define GLEE_H_DEFINED_glWindowPos2dvMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2DVMESAPROC) (const GLdouble * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS2DVMESAPROC GLeeFuncPtr_glWindowPos2dvMESA; #define glWindowPos2dvMESA GLeeFuncPtr_glWindowPos2dvMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos2fMESA #define GLEE_H_DEFINED_glWindowPos2fMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y); GLEE_EXTERN GLEEPFNGLWINDOWPOS2FMESAPROC GLeeFuncPtr_glWindowPos2fMESA; #define glWindowPos2fMESA GLeeFuncPtr_glWindowPos2fMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos2fvMESA #define GLEE_H_DEFINED_glWindowPos2fvMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2FVMESAPROC) (const GLfloat * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS2FVMESAPROC GLeeFuncPtr_glWindowPos2fvMESA; #define glWindowPos2fvMESA GLeeFuncPtr_glWindowPos2fvMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos2iMESA #define GLEE_H_DEFINED_glWindowPos2iMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y); GLEE_EXTERN GLEEPFNGLWINDOWPOS2IMESAPROC GLeeFuncPtr_glWindowPos2iMESA; #define glWindowPos2iMESA GLeeFuncPtr_glWindowPos2iMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos2ivMESA #define GLEE_H_DEFINED_glWindowPos2ivMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2IVMESAPROC) (const GLint * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS2IVMESAPROC GLeeFuncPtr_glWindowPos2ivMESA; #define glWindowPos2ivMESA GLeeFuncPtr_glWindowPos2ivMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos2sMESA #define GLEE_H_DEFINED_glWindowPos2sMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y); GLEE_EXTERN GLEEPFNGLWINDOWPOS2SMESAPROC GLeeFuncPtr_glWindowPos2sMESA; #define glWindowPos2sMESA GLeeFuncPtr_glWindowPos2sMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos2svMESA #define GLEE_H_DEFINED_glWindowPos2svMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2SVMESAPROC) (const GLshort * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS2SVMESAPROC GLeeFuncPtr_glWindowPos2svMESA; #define glWindowPos2svMESA GLeeFuncPtr_glWindowPos2svMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos3dMESA #define GLEE_H_DEFINED_glWindowPos3dMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z); GLEE_EXTERN GLEEPFNGLWINDOWPOS3DMESAPROC GLeeFuncPtr_glWindowPos3dMESA; #define glWindowPos3dMESA GLeeFuncPtr_glWindowPos3dMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos3dvMESA #define GLEE_H_DEFINED_glWindowPos3dvMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3DVMESAPROC) (const GLdouble * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS3DVMESAPROC GLeeFuncPtr_glWindowPos3dvMESA; #define glWindowPos3dvMESA GLeeFuncPtr_glWindowPos3dvMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos3fMESA #define GLEE_H_DEFINED_glWindowPos3fMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLWINDOWPOS3FMESAPROC GLeeFuncPtr_glWindowPos3fMESA; #define glWindowPos3fMESA GLeeFuncPtr_glWindowPos3fMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos3fvMESA #define GLEE_H_DEFINED_glWindowPos3fvMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3FVMESAPROC) (const GLfloat * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS3FVMESAPROC GLeeFuncPtr_glWindowPos3fvMESA; #define glWindowPos3fvMESA GLeeFuncPtr_glWindowPos3fvMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos3iMESA #define GLEE_H_DEFINED_glWindowPos3iMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z); GLEE_EXTERN GLEEPFNGLWINDOWPOS3IMESAPROC GLeeFuncPtr_glWindowPos3iMESA; #define glWindowPos3iMESA GLeeFuncPtr_glWindowPos3iMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos3ivMESA #define GLEE_H_DEFINED_glWindowPos3ivMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3IVMESAPROC) (const GLint * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS3IVMESAPROC GLeeFuncPtr_glWindowPos3ivMESA; #define glWindowPos3ivMESA GLeeFuncPtr_glWindowPos3ivMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos3sMESA #define GLEE_H_DEFINED_glWindowPos3sMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z); GLEE_EXTERN GLEEPFNGLWINDOWPOS3SMESAPROC GLeeFuncPtr_glWindowPos3sMESA; #define glWindowPos3sMESA GLeeFuncPtr_glWindowPos3sMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos3svMESA #define GLEE_H_DEFINED_glWindowPos3svMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3SVMESAPROC) (const GLshort * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS3SVMESAPROC GLeeFuncPtr_glWindowPos3svMESA; #define glWindowPos3svMESA GLeeFuncPtr_glWindowPos3svMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos4dMESA #define GLEE_H_DEFINED_glWindowPos4dMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLEE_EXTERN GLEEPFNGLWINDOWPOS4DMESAPROC GLeeFuncPtr_glWindowPos4dMESA; #define glWindowPos4dMESA GLeeFuncPtr_glWindowPos4dMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos4dvMESA #define GLEE_H_DEFINED_glWindowPos4dvMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS4DVMESAPROC) (const GLdouble * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS4DVMESAPROC GLeeFuncPtr_glWindowPos4dvMESA; #define glWindowPos4dvMESA GLeeFuncPtr_glWindowPos4dvMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos4fMESA #define GLEE_H_DEFINED_glWindowPos4fMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLEE_EXTERN GLEEPFNGLWINDOWPOS4FMESAPROC GLeeFuncPtr_glWindowPos4fMESA; #define glWindowPos4fMESA GLeeFuncPtr_glWindowPos4fMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos4fvMESA #define GLEE_H_DEFINED_glWindowPos4fvMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS4FVMESAPROC) (const GLfloat * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS4FVMESAPROC GLeeFuncPtr_glWindowPos4fvMESA; #define glWindowPos4fvMESA GLeeFuncPtr_glWindowPos4fvMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos4iMESA #define GLEE_H_DEFINED_glWindowPos4iMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w); GLEE_EXTERN GLEEPFNGLWINDOWPOS4IMESAPROC GLeeFuncPtr_glWindowPos4iMESA; #define glWindowPos4iMESA GLeeFuncPtr_glWindowPos4iMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos4ivMESA #define GLEE_H_DEFINED_glWindowPos4ivMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS4IVMESAPROC) (const GLint * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS4IVMESAPROC GLeeFuncPtr_glWindowPos4ivMESA; #define glWindowPos4ivMESA GLeeFuncPtr_glWindowPos4ivMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos4sMESA #define GLEE_H_DEFINED_glWindowPos4sMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w); GLEE_EXTERN GLEEPFNGLWINDOWPOS4SMESAPROC GLeeFuncPtr_glWindowPos4sMESA; #define glWindowPos4sMESA GLeeFuncPtr_glWindowPos4sMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos4svMESA #define GLEE_H_DEFINED_glWindowPos4svMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS4SVMESAPROC) (const GLshort * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS4SVMESAPROC GLeeFuncPtr_glWindowPos4svMESA; #define glWindowPos4svMESA GLeeFuncPtr_glWindowPos4svMESA #endif #endif /* GL_EXT_texture_compression_s3tc */ #ifndef GL_EXT_texture_compression_s3tc #define GL_EXT_texture_compression_s3tc 1 #define __GLEE_GL_EXT_texture_compression_s3tc 1 /* Constants */ #define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 #define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 #define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 #define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 #endif /* GL_IBM_cull_vertex */ #ifndef GL_IBM_cull_vertex #define GL_IBM_cull_vertex 1 #define __GLEE_GL_IBM_cull_vertex 1 /* Constants */ #define GL_CULL_VERTEX_IBM 103050 #endif /* GL_IBM_multimode_draw_arrays */ #ifndef GL_IBM_multimode_draw_arrays #define GL_IBM_multimode_draw_arrays 1 #define __GLEE_GL_IBM_multimode_draw_arrays 1 /* Constants */ #ifndef GLEE_H_DEFINED_glMultiModeDrawArraysIBM #define GLEE_H_DEFINED_glMultiModeDrawArraysIBM typedef void (APIENTRYP GLEEPFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride); GLEE_EXTERN GLEEPFNGLMULTIMODEDRAWARRAYSIBMPROC GLeeFuncPtr_glMultiModeDrawArraysIBM; #define glMultiModeDrawArraysIBM GLeeFuncPtr_glMultiModeDrawArraysIBM #endif #ifndef GLEE_H_DEFINED_glMultiModeDrawElementsIBM #define GLEE_H_DEFINED_glMultiModeDrawElementsIBM typedef void (APIENTRYP GLEEPFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid* const * indices, GLsizei primcount, GLint modestride); GLEE_EXTERN GLEEPFNGLMULTIMODEDRAWELEMENTSIBMPROC GLeeFuncPtr_glMultiModeDrawElementsIBM; #define glMultiModeDrawElementsIBM GLeeFuncPtr_glMultiModeDrawElementsIBM #endif #endif /* GL_IBM_vertex_array_lists */ #ifndef GL_IBM_vertex_array_lists #define GL_IBM_vertex_array_lists 1 #define __GLEE_GL_IBM_vertex_array_lists 1 /* Constants */ #define GL_VERTEX_ARRAY_LIST_IBM 103070 #define GL_NORMAL_ARRAY_LIST_IBM 103071 #define GL_COLOR_ARRAY_LIST_IBM 103072 #define GL_INDEX_ARRAY_LIST_IBM 103073 #define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074 #define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075 #define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076 #define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077 #define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080 #define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081 #define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082 #define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083 #define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084 #define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085 #define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086 #define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087 #ifndef GLEE_H_DEFINED_glColorPointerListIBM #define GLEE_H_DEFINED_glColorPointerListIBM typedef void (APIENTRYP GLEEPFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* * pointer, GLint ptrstride); GLEE_EXTERN GLEEPFNGLCOLORPOINTERLISTIBMPROC GLeeFuncPtr_glColorPointerListIBM; #define glColorPointerListIBM GLeeFuncPtr_glColorPointerListIBM #endif #ifndef GLEE_H_DEFINED_glSecondaryColorPointerListIBM #define GLEE_H_DEFINED_glSecondaryColorPointerListIBM typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* * pointer, GLint ptrstride); GLEE_EXTERN GLEEPFNGLSECONDARYCOLORPOINTERLISTIBMPROC GLeeFuncPtr_glSecondaryColorPointerListIBM; #define glSecondaryColorPointerListIBM GLeeFuncPtr_glSecondaryColorPointerListIBM #endif #ifndef GLEE_H_DEFINED_glEdgeFlagPointerListIBM #define GLEE_H_DEFINED_glEdgeFlagPointerListIBM typedef void (APIENTRYP GLEEPFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean* * pointer, GLint ptrstride); GLEE_EXTERN GLEEPFNGLEDGEFLAGPOINTERLISTIBMPROC GLeeFuncPtr_glEdgeFlagPointerListIBM; #define glEdgeFlagPointerListIBM GLeeFuncPtr_glEdgeFlagPointerListIBM #endif #ifndef GLEE_H_DEFINED_glFogCoordPointerListIBM #define GLEE_H_DEFINED_glFogCoordPointerListIBM typedef void (APIENTRYP GLEEPFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* * pointer, GLint ptrstride); GLEE_EXTERN GLEEPFNGLFOGCOORDPOINTERLISTIBMPROC GLeeFuncPtr_glFogCoordPointerListIBM; #define glFogCoordPointerListIBM GLeeFuncPtr_glFogCoordPointerListIBM #endif #ifndef GLEE_H_DEFINED_glIndexPointerListIBM #define GLEE_H_DEFINED_glIndexPointerListIBM typedef void (APIENTRYP GLEEPFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* * pointer, GLint ptrstride); GLEE_EXTERN GLEEPFNGLINDEXPOINTERLISTIBMPROC GLeeFuncPtr_glIndexPointerListIBM; #define glIndexPointerListIBM GLeeFuncPtr_glIndexPointerListIBM #endif #ifndef GLEE_H_DEFINED_glNormalPointerListIBM #define GLEE_H_DEFINED_glNormalPointerListIBM typedef void (APIENTRYP GLEEPFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* * pointer, GLint ptrstride); GLEE_EXTERN GLEEPFNGLNORMALPOINTERLISTIBMPROC GLeeFuncPtr_glNormalPointerListIBM; #define glNormalPointerListIBM GLeeFuncPtr_glNormalPointerListIBM #endif #ifndef GLEE_H_DEFINED_glTexCoordPointerListIBM #define GLEE_H_DEFINED_glTexCoordPointerListIBM typedef void (APIENTRYP GLEEPFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* * pointer, GLint ptrstride); GLEE_EXTERN GLEEPFNGLTEXCOORDPOINTERLISTIBMPROC GLeeFuncPtr_glTexCoordPointerListIBM; #define glTexCoordPointerListIBM GLeeFuncPtr_glTexCoordPointerListIBM #endif #ifndef GLEE_H_DEFINED_glVertexPointerListIBM #define GLEE_H_DEFINED_glVertexPointerListIBM typedef void (APIENTRYP GLEEPFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* * pointer, GLint ptrstride); GLEE_EXTERN GLEEPFNGLVERTEXPOINTERLISTIBMPROC GLeeFuncPtr_glVertexPointerListIBM; #define glVertexPointerListIBM GLeeFuncPtr_glVertexPointerListIBM #endif #endif /* GL_SGIX_subsample */ #ifndef GL_SGIX_subsample #define GL_SGIX_subsample 1 #define __GLEE_GL_SGIX_subsample 1 /* Constants */ #define GL_PACK_SUBSAMPLE_RATE_SGIX 0x85A0 #define GL_UNPACK_SUBSAMPLE_RATE_SGIX 0x85A1 #define GL_PIXEL_SUBSAMPLE_4444_SGIX 0x85A2 #define GL_PIXEL_SUBSAMPLE_2424_SGIX 0x85A3 #define GL_PIXEL_SUBSAMPLE_4242_SGIX 0x85A4 #endif /* GL_SGIX_ycrcb_subsample */ #ifndef GL_SGIX_ycrcb_subsample #define GL_SGIX_ycrcb_subsample 1 #define __GLEE_GL_SGIX_ycrcb_subsample 1 /* Constants */ #endif /* GL_SGIX_ycrcba */ #ifndef GL_SGIX_ycrcba #define GL_SGIX_ycrcba 1 #define __GLEE_GL_SGIX_ycrcba 1 /* Constants */ #define GL_YCRCB_SGIX 0x8318 #define GL_YCRCBA_SGIX 0x8319 #endif /* GL_SGI_depth_pass_instrument */ #ifndef GL_SGI_depth_pass_instrument #define GL_SGI_depth_pass_instrument 1 #define __GLEE_GL_SGI_depth_pass_instrument 1 /* Constants */ #define GL_DEPTH_PASS_INSTRUMENT_SGIX 0x8310 #define GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX 0x8311 #define GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX 0x8312 #endif /* GL_3DFX_texture_compression_FXT1 */ #ifndef GL_3DFX_texture_compression_FXT1 #define GL_3DFX_texture_compression_FXT1 1 #define __GLEE_GL_3DFX_texture_compression_FXT1 1 /* Constants */ #define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0 #define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1 #endif /* GL_3DFX_multisample */ #ifndef GL_3DFX_multisample #define GL_3DFX_multisample 1 #define __GLEE_GL_3DFX_multisample 1 /* Constants */ #define GL_MULTISAMPLE_3DFX 0x86B2 #define GL_SAMPLE_BUFFERS_3DFX 0x86B3 #define GL_SAMPLES_3DFX 0x86B4 #define GL_MULTISAMPLE_BIT_3DFX 0x20000000 #endif /* GL_3DFX_tbuffer */ #ifndef GL_3DFX_tbuffer #define GL_3DFX_tbuffer 1 #define __GLEE_GL_3DFX_tbuffer 1 /* Constants */ #ifndef GLEE_H_DEFINED_glTbufferMask3DFX #define GLEE_H_DEFINED_glTbufferMask3DFX typedef void (APIENTRYP GLEEPFNGLTBUFFERMASK3DFXPROC) (GLuint mask); GLEE_EXTERN GLEEPFNGLTBUFFERMASK3DFXPROC GLeeFuncPtr_glTbufferMask3DFX; #define glTbufferMask3DFX GLeeFuncPtr_glTbufferMask3DFX #endif #endif /* GL_EXT_multisample */ #ifndef GL_EXT_multisample #define GL_EXT_multisample 1 #define __GLEE_GL_EXT_multisample 1 /* Constants */ #define GL_MULTISAMPLE_EXT 0x809D #define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E #define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F #define GL_SAMPLE_MASK_EXT 0x80A0 #define GL_1PASS_EXT 0x80A1 #define GL_2PASS_0_EXT 0x80A2 #define GL_2PASS_1_EXT 0x80A3 #define GL_4PASS_0_EXT 0x80A4 #define GL_4PASS_1_EXT 0x80A5 #define GL_4PASS_2_EXT 0x80A6 #define GL_4PASS_3_EXT 0x80A7 #define GL_SAMPLE_BUFFERS_EXT 0x80A8 #define GL_SAMPLES_EXT 0x80A9 #define GL_SAMPLE_MASK_VALUE_EXT 0x80AA #define GL_SAMPLE_MASK_INVERT_EXT 0x80AB #define GL_SAMPLE_PATTERN_EXT 0x80AC #define GL_MULTISAMPLE_BIT_EXT 0x20000000 #ifndef GLEE_H_DEFINED_glSampleMaskEXT #define GLEE_H_DEFINED_glSampleMaskEXT typedef void (APIENTRYP GLEEPFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert); GLEE_EXTERN GLEEPFNGLSAMPLEMASKEXTPROC GLeeFuncPtr_glSampleMaskEXT; #define glSampleMaskEXT GLeeFuncPtr_glSampleMaskEXT #endif #ifndef GLEE_H_DEFINED_glSamplePatternEXT #define GLEE_H_DEFINED_glSamplePatternEXT typedef void (APIENTRYP GLEEPFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern); GLEE_EXTERN GLEEPFNGLSAMPLEPATTERNEXTPROC GLeeFuncPtr_glSamplePatternEXT; #define glSamplePatternEXT GLeeFuncPtr_glSamplePatternEXT #endif #endif /* GL_SGIX_vertex_preclip */ #ifndef GL_SGIX_vertex_preclip #define GL_SGIX_vertex_preclip 1 #define __GLEE_GL_SGIX_vertex_preclip 1 /* Constants */ #define GL_VERTEX_PRECLIP_SGIX 0x83EE #define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF #endif /* GL_SGIX_convolution_accuracy */ #ifndef GL_SGIX_convolution_accuracy #define GL_SGIX_convolution_accuracy 1 #define __GLEE_GL_SGIX_convolution_accuracy 1 /* Constants */ #define GL_CONVOLUTION_HINT_SGIX 0x8316 #endif /* GL_SGIX_resample */ #ifndef GL_SGIX_resample #define GL_SGIX_resample 1 #define __GLEE_GL_SGIX_resample 1 /* Constants */ #define GL_PACK_RESAMPLE_SGIX 0x842C #define GL_UNPACK_RESAMPLE_SGIX 0x842D #define GL_RESAMPLE_REPLICATE_SGIX 0x842E #define GL_RESAMPLE_ZERO_FILL_SGIX 0x842F #define GL_RESAMPLE_DECIMATE_SGIX 0x8430 #endif /* GL_SGIS_point_line_texgen */ #ifndef GL_SGIS_point_line_texgen #define GL_SGIS_point_line_texgen 1 #define __GLEE_GL_SGIS_point_line_texgen 1 /* Constants */ #define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0 #define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1 #define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2 #define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3 #define GL_EYE_POINT_SGIS 0x81F4 #define GL_OBJECT_POINT_SGIS 0x81F5 #define GL_EYE_LINE_SGIS 0x81F6 #define GL_OBJECT_LINE_SGIS 0x81F7 #endif /* GL_SGIS_texture_color_mask */ #ifndef GL_SGIS_texture_color_mask #define GL_SGIS_texture_color_mask 1 #define __GLEE_GL_SGIS_texture_color_mask 1 /* Constants */ #define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF #ifndef GLEE_H_DEFINED_glTextureColorMaskSGIS #define GLEE_H_DEFINED_glTextureColorMaskSGIS typedef void (APIENTRYP GLEEPFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); GLEE_EXTERN GLEEPFNGLTEXTURECOLORMASKSGISPROC GLeeFuncPtr_glTextureColorMaskSGIS; #define glTextureColorMaskSGIS GLeeFuncPtr_glTextureColorMaskSGIS #endif #endif /* GL_EXT_texture_env_dot3 */ #ifndef GL_EXT_texture_env_dot3 #define GL_EXT_texture_env_dot3 1 #define __GLEE_GL_EXT_texture_env_dot3 1 /* Constants */ #define GL_DOT3_RGB_EXT 0x8740 #define GL_DOT3_RGBA_EXT 0x8741 #endif /* GL_ATI_texture_mirror_once */ #ifndef GL_ATI_texture_mirror_once #define GL_ATI_texture_mirror_once 1 #define __GLEE_GL_ATI_texture_mirror_once 1 /* Constants */ #define GL_MIRROR_CLAMP_ATI 0x8742 #define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 #endif /* GL_NV_fence */ #ifndef GL_NV_fence #define GL_NV_fence 1 #define __GLEE_GL_NV_fence 1 /* Constants */ #define GL_ALL_COMPLETED_NV 0x84F2 #define GL_FENCE_STATUS_NV 0x84F3 #define GL_FENCE_CONDITION_NV 0x84F4 #ifndef GLEE_H_DEFINED_glDeleteFencesNV #define GLEE_H_DEFINED_glDeleteFencesNV typedef void (APIENTRYP GLEEPFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint * fences); GLEE_EXTERN GLEEPFNGLDELETEFENCESNVPROC GLeeFuncPtr_glDeleteFencesNV; #define glDeleteFencesNV GLeeFuncPtr_glDeleteFencesNV #endif #ifndef GLEE_H_DEFINED_glGenFencesNV #define GLEE_H_DEFINED_glGenFencesNV typedef void (APIENTRYP GLEEPFNGLGENFENCESNVPROC) (GLsizei n, GLuint * fences); GLEE_EXTERN GLEEPFNGLGENFENCESNVPROC GLeeFuncPtr_glGenFencesNV; #define glGenFencesNV GLeeFuncPtr_glGenFencesNV #endif #ifndef GLEE_H_DEFINED_glIsFenceNV #define GLEE_H_DEFINED_glIsFenceNV typedef GLboolean (APIENTRYP GLEEPFNGLISFENCENVPROC) (GLuint fence); GLEE_EXTERN GLEEPFNGLISFENCENVPROC GLeeFuncPtr_glIsFenceNV; #define glIsFenceNV GLeeFuncPtr_glIsFenceNV #endif #ifndef GLEE_H_DEFINED_glTestFenceNV #define GLEE_H_DEFINED_glTestFenceNV typedef GLboolean (APIENTRYP GLEEPFNGLTESTFENCENVPROC) (GLuint fence); GLEE_EXTERN GLEEPFNGLTESTFENCENVPROC GLeeFuncPtr_glTestFenceNV; #define glTestFenceNV GLeeFuncPtr_glTestFenceNV #endif #ifndef GLEE_H_DEFINED_glGetFenceivNV #define GLEE_H_DEFINED_glGetFenceivNV typedef void (APIENTRYP GLEEPFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETFENCEIVNVPROC GLeeFuncPtr_glGetFenceivNV; #define glGetFenceivNV GLeeFuncPtr_glGetFenceivNV #endif #ifndef GLEE_H_DEFINED_glFinishFenceNV #define GLEE_H_DEFINED_glFinishFenceNV typedef void (APIENTRYP GLEEPFNGLFINISHFENCENVPROC) (GLuint fence); GLEE_EXTERN GLEEPFNGLFINISHFENCENVPROC GLeeFuncPtr_glFinishFenceNV; #define glFinishFenceNV GLeeFuncPtr_glFinishFenceNV #endif #ifndef GLEE_H_DEFINED_glSetFenceNV #define GLEE_H_DEFINED_glSetFenceNV typedef void (APIENTRYP GLEEPFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); GLEE_EXTERN GLEEPFNGLSETFENCENVPROC GLeeFuncPtr_glSetFenceNV; #define glSetFenceNV GLeeFuncPtr_glSetFenceNV #endif #endif /* GL_IBM_texture_mirrored_repeat */ #ifndef GL_IBM_texture_mirrored_repeat #define GL_IBM_texture_mirrored_repeat 1 #define __GLEE_GL_IBM_texture_mirrored_repeat 1 /* Constants */ #define GL_MIRRORED_REPEAT_IBM 0x8370 #endif /* GL_NV_evaluators */ #ifndef GL_NV_evaluators #define GL_NV_evaluators 1 #define __GLEE_GL_NV_evaluators 1 /* Constants */ #define GL_EVAL_2D_NV 0x86C0 #define GL_EVAL_TRIANGULAR_2D_NV 0x86C1 #define GL_MAP_TESSELLATION_NV 0x86C2 #define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3 #define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4 #define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5 #define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6 #define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7 #define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8 #define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9 #define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA #define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB #define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC #define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD #define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE #define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF #define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0 #define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1 #define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2 #define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3 #define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4 #define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5 #define GL_MAX_MAP_TESSELLATION_NV 0x86D6 #define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7 #ifndef GLEE_H_DEFINED_glMapControlPointsNV #define GLEE_H_DEFINED_glMapControlPointsNV typedef void (APIENTRYP GLEEPFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid * points); GLEE_EXTERN GLEEPFNGLMAPCONTROLPOINTSNVPROC GLeeFuncPtr_glMapControlPointsNV; #define glMapControlPointsNV GLeeFuncPtr_glMapControlPointsNV #endif #ifndef GLEE_H_DEFINED_glMapParameterivNV #define GLEE_H_DEFINED_glMapParameterivNV typedef void (APIENTRYP GLEEPFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLMAPPARAMETERIVNVPROC GLeeFuncPtr_glMapParameterivNV; #define glMapParameterivNV GLeeFuncPtr_glMapParameterivNV #endif #ifndef GLEE_H_DEFINED_glMapParameterfvNV #define GLEE_H_DEFINED_glMapParameterfvNV typedef void (APIENTRYP GLEEPFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLMAPPARAMETERFVNVPROC GLeeFuncPtr_glMapParameterfvNV; #define glMapParameterfvNV GLeeFuncPtr_glMapParameterfvNV #endif #ifndef GLEE_H_DEFINED_glGetMapControlPointsNV #define GLEE_H_DEFINED_glGetMapControlPointsNV typedef void (APIENTRYP GLEEPFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, GLvoid * points); GLEE_EXTERN GLEEPFNGLGETMAPCONTROLPOINTSNVPROC GLeeFuncPtr_glGetMapControlPointsNV; #define glGetMapControlPointsNV GLeeFuncPtr_glGetMapControlPointsNV #endif #ifndef GLEE_H_DEFINED_glGetMapParameterivNV #define GLEE_H_DEFINED_glGetMapParameterivNV typedef void (APIENTRYP GLEEPFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETMAPPARAMETERIVNVPROC GLeeFuncPtr_glGetMapParameterivNV; #define glGetMapParameterivNV GLeeFuncPtr_glGetMapParameterivNV #endif #ifndef GLEE_H_DEFINED_glGetMapParameterfvNV #define GLEE_H_DEFINED_glGetMapParameterfvNV typedef void (APIENTRYP GLEEPFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETMAPPARAMETERFVNVPROC GLeeFuncPtr_glGetMapParameterfvNV; #define glGetMapParameterfvNV GLeeFuncPtr_glGetMapParameterfvNV #endif #ifndef GLEE_H_DEFINED_glGetMapAttribParameterivNV #define GLEE_H_DEFINED_glGetMapAttribParameterivNV typedef void (APIENTRYP GLEEPFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETMAPATTRIBPARAMETERIVNVPROC GLeeFuncPtr_glGetMapAttribParameterivNV; #define glGetMapAttribParameterivNV GLeeFuncPtr_glGetMapAttribParameterivNV #endif #ifndef GLEE_H_DEFINED_glGetMapAttribParameterfvNV #define GLEE_H_DEFINED_glGetMapAttribParameterfvNV typedef void (APIENTRYP GLEEPFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETMAPATTRIBPARAMETERFVNVPROC GLeeFuncPtr_glGetMapAttribParameterfvNV; #define glGetMapAttribParameterfvNV GLeeFuncPtr_glGetMapAttribParameterfvNV #endif #ifndef GLEE_H_DEFINED_glEvalMapsNV #define GLEE_H_DEFINED_glEvalMapsNV typedef void (APIENTRYP GLEEPFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode); GLEE_EXTERN GLEEPFNGLEVALMAPSNVPROC GLeeFuncPtr_glEvalMapsNV; #define glEvalMapsNV GLeeFuncPtr_glEvalMapsNV #endif #endif /* GL_NV_packed_depth_stencil */ #ifndef GL_NV_packed_depth_stencil #define GL_NV_packed_depth_stencil 1 #define __GLEE_GL_NV_packed_depth_stencil 1 /* Constants */ #define GL_DEPTH_STENCIL_NV 0x84F9 #define GL_UNSIGNED_INT_24_8_NV 0x84FA #endif /* GL_NV_register_combiners2 */ #ifndef GL_NV_register_combiners2 #define GL_NV_register_combiners2 1 #define __GLEE_GL_NV_register_combiners2 1 /* Constants */ #define GL_PER_STAGE_CONSTANTS_NV 0x8535 #ifndef GLEE_H_DEFINED_glCombinerStageParameterfvNV #define GLEE_H_DEFINED_glCombinerStageParameterfvNV typedef void (APIENTRYP GLEEPFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLCOMBINERSTAGEPARAMETERFVNVPROC GLeeFuncPtr_glCombinerStageParameterfvNV; #define glCombinerStageParameterfvNV GLeeFuncPtr_glCombinerStageParameterfvNV #endif #ifndef GLEE_H_DEFINED_glGetCombinerStageParameterfvNV #define GLEE_H_DEFINED_glGetCombinerStageParameterfvNV typedef void (APIENTRYP GLEEPFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC GLeeFuncPtr_glGetCombinerStageParameterfvNV; #define glGetCombinerStageParameterfvNV GLeeFuncPtr_glGetCombinerStageParameterfvNV #endif #endif /* GL_NV_texture_compression_vtc */ #ifndef GL_NV_texture_compression_vtc #define GL_NV_texture_compression_vtc 1 #define __GLEE_GL_NV_texture_compression_vtc 1 /* Constants */ #endif /* GL_NV_texture_rectangle */ #ifndef GL_NV_texture_rectangle #define GL_NV_texture_rectangle 1 #define __GLEE_GL_NV_texture_rectangle 1 /* Constants */ #define GL_TEXTURE_RECTANGLE_NV 0x84F5 #define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6 #define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7 #define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8 #endif /* GL_NV_texture_shader */ #ifndef GL_NV_texture_shader #define GL_NV_texture_shader 1 #define __GLEE_GL_NV_texture_shader 1 /* Constants */ #define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C #define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D #define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E #define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9 #define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA #define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB #define GL_DSDT_MAG_INTENSITY_NV 0x86DC #define GL_SHADER_CONSISTENT_NV 0x86DD #define GL_TEXTURE_SHADER_NV 0x86DE #define GL_SHADER_OPERATION_NV 0x86DF #define GL_CULL_MODES_NV 0x86E0 #define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1 #define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 #define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 #define GL_OFFSET_TEXTURE_2D_MATRIX_NV GL_OFFSET_TEXTURE_MATRIX_NV #define GL_OFFSET_TEXTURE_2D_SCALE_NV GL_OFFSET_TEXTURE_SCALE_NV #define GL_OFFSET_TEXTURE_2D_BIAS_NV GL_OFFSET_TEXTURE_BIAS_NV #define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4 #define GL_CONST_EYE_NV 0x86E5 #define GL_PASS_THROUGH_NV 0x86E6 #define GL_CULL_FRAGMENT_NV 0x86E7 #define GL_OFFSET_TEXTURE_2D_NV 0x86E8 #define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9 #define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA #define GL_DOT_PRODUCT_NV 0x86EC #define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED #define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE #define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0 #define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1 #define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2 #define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3 #define GL_HILO_NV 0x86F4 #define GL_DSDT_NV 0x86F5 #define GL_DSDT_MAG_NV 0x86F6 #define GL_DSDT_MAG_VIB_NV 0x86F7 #define GL_HILO16_NV 0x86F8 #define GL_SIGNED_HILO_NV 0x86F9 #define GL_SIGNED_HILO16_NV 0x86FA #define GL_SIGNED_RGBA_NV 0x86FB #define GL_SIGNED_RGBA8_NV 0x86FC #define GL_SIGNED_RGB_NV 0x86FE #define GL_SIGNED_RGB8_NV 0x86FF #define GL_SIGNED_LUMINANCE_NV 0x8701 #define GL_SIGNED_LUMINANCE8_NV 0x8702 #define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 #define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 #define GL_SIGNED_ALPHA_NV 0x8705 #define GL_SIGNED_ALPHA8_NV 0x8706 #define GL_SIGNED_INTENSITY_NV 0x8707 #define GL_SIGNED_INTENSITY8_NV 0x8708 #define GL_DSDT8_NV 0x8709 #define GL_DSDT8_MAG8_NV 0x870A #define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B #define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C #define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D #define GL_HI_SCALE_NV 0x870E #define GL_LO_SCALE_NV 0x870F #define GL_DS_SCALE_NV 0x8710 #define GL_DT_SCALE_NV 0x8711 #define GL_MAGNITUDE_SCALE_NV 0x8712 #define GL_VIBRANCE_SCALE_NV 0x8713 #define GL_HI_BIAS_NV 0x8714 #define GL_LO_BIAS_NV 0x8715 #define GL_DS_BIAS_NV 0x8716 #define GL_DT_BIAS_NV 0x8717 #define GL_MAGNITUDE_BIAS_NV 0x8718 #define GL_VIBRANCE_BIAS_NV 0x8719 #define GL_TEXTURE_BORDER_VALUES_NV 0x871A #define GL_TEXTURE_HI_SIZE_NV 0x871B #define GL_TEXTURE_LO_SIZE_NV 0x871C #define GL_TEXTURE_DS_SIZE_NV 0x871D #define GL_TEXTURE_DT_SIZE_NV 0x871E #define GL_TEXTURE_MAG_SIZE_NV 0x871F #endif /* GL_NV_texture_shader2 */ #ifndef GL_NV_texture_shader2 #define GL_NV_texture_shader2 1 #define __GLEE_GL_NV_texture_shader2 1 /* Constants */ #define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF #endif /* GL_NV_vertex_array_range2 */ #ifndef GL_NV_vertex_array_range2 #define GL_NV_vertex_array_range2 1 #define __GLEE_GL_NV_vertex_array_range2 1 /* Constants */ #define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 #endif /* GL_NV_vertex_program */ #ifndef GL_NV_vertex_program #define GL_NV_vertex_program 1 #define __GLEE_GL_NV_vertex_program 1 /* Constants */ #define GL_VERTEX_PROGRAM_NV 0x8620 #define GL_VERTEX_STATE_PROGRAM_NV 0x8621 #define GL_ATTRIB_ARRAY_SIZE_NV 0x8623 #define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624 #define GL_ATTRIB_ARRAY_TYPE_NV 0x8625 #define GL_CURRENT_ATTRIB_NV 0x8626 #define GL_PROGRAM_LENGTH_NV 0x8627 #define GL_PROGRAM_STRING_NV 0x8628 #define GL_MODELVIEW_PROJECTION_NV 0x8629 #define GL_IDENTITY_NV 0x862A #define GL_INVERSE_NV 0x862B #define GL_TRANSPOSE_NV 0x862C #define GL_INVERSE_TRANSPOSE_NV 0x862D #define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E #define GL_MAX_TRACK_MATRICES_NV 0x862F #define GL_MATRIX0_NV 0x8630 #define GL_MATRIX1_NV 0x8631 #define GL_MATRIX2_NV 0x8632 #define GL_MATRIX3_NV 0x8633 #define GL_MATRIX4_NV 0x8634 #define GL_MATRIX5_NV 0x8635 #define GL_MATRIX6_NV 0x8636 #define GL_MATRIX7_NV 0x8637 #define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640 #define GL_CURRENT_MATRIX_NV 0x8641 #define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642 #define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643 #define GL_PROGRAM_PARAMETER_NV 0x8644 #define GL_ATTRIB_ARRAY_POINTER_NV 0x8645 #define GL_PROGRAM_TARGET_NV 0x8646 #define GL_PROGRAM_RESIDENT_NV 0x8647 #define GL_TRACK_MATRIX_NV 0x8648 #define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649 #define GL_VERTEX_PROGRAM_BINDING_NV 0x864A #define GL_PROGRAM_ERROR_POSITION_NV 0x864B #define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650 #define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651 #define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652 #define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653 #define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654 #define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655 #define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656 #define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657 #define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658 #define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659 #define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A #define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B #define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C #define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D #define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E #define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F #define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660 #define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661 #define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662 #define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663 #define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664 #define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665 #define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666 #define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667 #define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668 #define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669 #define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A #define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B #define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C #define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D #define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E #define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F #define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670 #define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671 #define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672 #define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673 #define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674 #define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675 #define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676 #define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677 #define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678 #define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679 #define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A #define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B #define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C #define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D #define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E #define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F #ifndef GLEE_H_DEFINED_glAreProgramsResidentNV #define GLEE_H_DEFINED_glAreProgramsResidentNV typedef GLboolean (APIENTRYP GLEEPFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint * programs, GLboolean * residences); GLEE_EXTERN GLEEPFNGLAREPROGRAMSRESIDENTNVPROC GLeeFuncPtr_glAreProgramsResidentNV; #define glAreProgramsResidentNV GLeeFuncPtr_glAreProgramsResidentNV #endif #ifndef GLEE_H_DEFINED_glBindProgramNV #define GLEE_H_DEFINED_glBindProgramNV typedef void (APIENTRYP GLEEPFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id); GLEE_EXTERN GLEEPFNGLBINDPROGRAMNVPROC GLeeFuncPtr_glBindProgramNV; #define glBindProgramNV GLeeFuncPtr_glBindProgramNV #endif #ifndef GLEE_H_DEFINED_glDeleteProgramsNV #define GLEE_H_DEFINED_glDeleteProgramsNV typedef void (APIENTRYP GLEEPFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint * programs); GLEE_EXTERN GLEEPFNGLDELETEPROGRAMSNVPROC GLeeFuncPtr_glDeleteProgramsNV; #define glDeleteProgramsNV GLeeFuncPtr_glDeleteProgramsNV #endif #ifndef GLEE_H_DEFINED_glExecuteProgramNV #define GLEE_H_DEFINED_glExecuteProgramNV typedef void (APIENTRYP GLEEPFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat * params); GLEE_EXTERN GLEEPFNGLEXECUTEPROGRAMNVPROC GLeeFuncPtr_glExecuteProgramNV; #define glExecuteProgramNV GLeeFuncPtr_glExecuteProgramNV #endif #ifndef GLEE_H_DEFINED_glGenProgramsNV #define GLEE_H_DEFINED_glGenProgramsNV typedef void (APIENTRYP GLEEPFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint * programs); GLEE_EXTERN GLEEPFNGLGENPROGRAMSNVPROC GLeeFuncPtr_glGenProgramsNV; #define glGenProgramsNV GLeeFuncPtr_glGenProgramsNV #endif #ifndef GLEE_H_DEFINED_glGetProgramParameterdvNV #define GLEE_H_DEFINED_glGetProgramParameterdvNV typedef void (APIENTRYP GLEEPFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble * params); GLEE_EXTERN GLEEPFNGLGETPROGRAMPARAMETERDVNVPROC GLeeFuncPtr_glGetProgramParameterdvNV; #define glGetProgramParameterdvNV GLeeFuncPtr_glGetProgramParameterdvNV #endif #ifndef GLEE_H_DEFINED_glGetProgramParameterfvNV #define GLEE_H_DEFINED_glGetProgramParameterfvNV typedef void (APIENTRYP GLEEPFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETPROGRAMPARAMETERFVNVPROC GLeeFuncPtr_glGetProgramParameterfvNV; #define glGetProgramParameterfvNV GLeeFuncPtr_glGetProgramParameterfvNV #endif #ifndef GLEE_H_DEFINED_glGetProgramivNV #define GLEE_H_DEFINED_glGetProgramivNV typedef void (APIENTRYP GLEEPFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETPROGRAMIVNVPROC GLeeFuncPtr_glGetProgramivNV; #define glGetProgramivNV GLeeFuncPtr_glGetProgramivNV #endif #ifndef GLEE_H_DEFINED_glGetProgramStringNV #define GLEE_H_DEFINED_glGetProgramStringNV typedef void (APIENTRYP GLEEPFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte * program); GLEE_EXTERN GLEEPFNGLGETPROGRAMSTRINGNVPROC GLeeFuncPtr_glGetProgramStringNV; #define glGetProgramStringNV GLeeFuncPtr_glGetProgramStringNV #endif #ifndef GLEE_H_DEFINED_glGetTrackMatrixivNV #define GLEE_H_DEFINED_glGetTrackMatrixivNV typedef void (APIENTRYP GLEEPFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETTRACKMATRIXIVNVPROC GLeeFuncPtr_glGetTrackMatrixivNV; #define glGetTrackMatrixivNV GLeeFuncPtr_glGetTrackMatrixivNV #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribdvNV #define GLEE_H_DEFINED_glGetVertexAttribdvNV typedef void (APIENTRYP GLEEPFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble * params); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBDVNVPROC GLeeFuncPtr_glGetVertexAttribdvNV; #define glGetVertexAttribdvNV GLeeFuncPtr_glGetVertexAttribdvNV #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribfvNV #define GLEE_H_DEFINED_glGetVertexAttribfvNV typedef void (APIENTRYP GLEEPFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBFVNVPROC GLeeFuncPtr_glGetVertexAttribfvNV; #define glGetVertexAttribfvNV GLeeFuncPtr_glGetVertexAttribfvNV #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribivNV #define GLEE_H_DEFINED_glGetVertexAttribivNV typedef void (APIENTRYP GLEEPFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBIVNVPROC GLeeFuncPtr_glGetVertexAttribivNV; #define glGetVertexAttribivNV GLeeFuncPtr_glGetVertexAttribivNV #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribPointervNV #define GLEE_H_DEFINED_glGetVertexAttribPointervNV typedef void (APIENTRYP GLEEPFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, GLvoid* * pointer); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBPOINTERVNVPROC GLeeFuncPtr_glGetVertexAttribPointervNV; #define glGetVertexAttribPointervNV GLeeFuncPtr_glGetVertexAttribPointervNV #endif #ifndef GLEE_H_DEFINED_glIsProgramNV #define GLEE_H_DEFINED_glIsProgramNV typedef GLboolean (APIENTRYP GLEEPFNGLISPROGRAMNVPROC) (GLuint id); GLEE_EXTERN GLEEPFNGLISPROGRAMNVPROC GLeeFuncPtr_glIsProgramNV; #define glIsProgramNV GLeeFuncPtr_glIsProgramNV #endif #ifndef GLEE_H_DEFINED_glLoadProgramNV #define GLEE_H_DEFINED_glLoadProgramNV typedef void (APIENTRYP GLEEPFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte * program); GLEE_EXTERN GLEEPFNGLLOADPROGRAMNVPROC GLeeFuncPtr_glLoadProgramNV; #define glLoadProgramNV GLeeFuncPtr_glLoadProgramNV #endif #ifndef GLEE_H_DEFINED_glProgramParameter4dNV #define GLEE_H_DEFINED_glProgramParameter4dNV typedef void (APIENTRYP GLEEPFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLEE_EXTERN GLEEPFNGLPROGRAMPARAMETER4DNVPROC GLeeFuncPtr_glProgramParameter4dNV; #define glProgramParameter4dNV GLeeFuncPtr_glProgramParameter4dNV #endif #ifndef GLEE_H_DEFINED_glProgramParameter4dvNV #define GLEE_H_DEFINED_glProgramParameter4dvNV typedef void (APIENTRYP GLEEPFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble * v); GLEE_EXTERN GLEEPFNGLPROGRAMPARAMETER4DVNVPROC GLeeFuncPtr_glProgramParameter4dvNV; #define glProgramParameter4dvNV GLeeFuncPtr_glProgramParameter4dvNV #endif #ifndef GLEE_H_DEFINED_glProgramParameter4fNV #define GLEE_H_DEFINED_glProgramParameter4fNV typedef void (APIENTRYP GLEEPFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLEE_EXTERN GLEEPFNGLPROGRAMPARAMETER4FNVPROC GLeeFuncPtr_glProgramParameter4fNV; #define glProgramParameter4fNV GLeeFuncPtr_glProgramParameter4fNV #endif #ifndef GLEE_H_DEFINED_glProgramParameter4fvNV #define GLEE_H_DEFINED_glProgramParameter4fvNV typedef void (APIENTRYP GLEEPFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat * v); GLEE_EXTERN GLEEPFNGLPROGRAMPARAMETER4FVNVPROC GLeeFuncPtr_glProgramParameter4fvNV; #define glProgramParameter4fvNV GLeeFuncPtr_glProgramParameter4fvNV #endif #ifndef GLEE_H_DEFINED_glProgramParameters4dvNV #define GLEE_H_DEFINED_glProgramParameters4dvNV typedef void (APIENTRYP GLEEPFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLdouble * v); GLEE_EXTERN GLEEPFNGLPROGRAMPARAMETERS4DVNVPROC GLeeFuncPtr_glProgramParameters4dvNV; #define glProgramParameters4dvNV GLeeFuncPtr_glProgramParameters4dvNV #endif #ifndef GLEE_H_DEFINED_glProgramParameters4fvNV #define GLEE_H_DEFINED_glProgramParameters4fvNV typedef void (APIENTRYP GLEEPFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat * v); GLEE_EXTERN GLEEPFNGLPROGRAMPARAMETERS4FVNVPROC GLeeFuncPtr_glProgramParameters4fvNV; #define glProgramParameters4fvNV GLeeFuncPtr_glProgramParameters4fvNV #endif #ifndef GLEE_H_DEFINED_glRequestResidentProgramsNV #define GLEE_H_DEFINED_glRequestResidentProgramsNV typedef void (APIENTRYP GLEEPFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint * programs); GLEE_EXTERN GLEEPFNGLREQUESTRESIDENTPROGRAMSNVPROC GLeeFuncPtr_glRequestResidentProgramsNV; #define glRequestResidentProgramsNV GLeeFuncPtr_glRequestResidentProgramsNV #endif #ifndef GLEE_H_DEFINED_glTrackMatrixNV #define GLEE_H_DEFINED_glTrackMatrixNV typedef void (APIENTRYP GLEEPFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform); GLEE_EXTERN GLEEPFNGLTRACKMATRIXNVPROC GLeeFuncPtr_glTrackMatrixNV; #define glTrackMatrixNV GLeeFuncPtr_glTrackMatrixNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribPointerNV #define GLEE_H_DEFINED_glVertexAttribPointerNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBPOINTERNVPROC GLeeFuncPtr_glVertexAttribPointerNV; #define glVertexAttribPointerNV GLeeFuncPtr_glVertexAttribPointerNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1dNV #define GLEE_H_DEFINED_glVertexAttrib1dNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1DNVPROC GLeeFuncPtr_glVertexAttrib1dNV; #define glVertexAttrib1dNV GLeeFuncPtr_glVertexAttrib1dNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1dvNV #define GLEE_H_DEFINED_glVertexAttrib1dvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1DVNVPROC GLeeFuncPtr_glVertexAttrib1dvNV; #define glVertexAttrib1dvNV GLeeFuncPtr_glVertexAttrib1dvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1fNV #define GLEE_H_DEFINED_glVertexAttrib1fNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1FNVPROC GLeeFuncPtr_glVertexAttrib1fNV; #define glVertexAttrib1fNV GLeeFuncPtr_glVertexAttrib1fNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1fvNV #define GLEE_H_DEFINED_glVertexAttrib1fvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1FVNVPROC GLeeFuncPtr_glVertexAttrib1fvNV; #define glVertexAttrib1fvNV GLeeFuncPtr_glVertexAttrib1fvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1sNV #define GLEE_H_DEFINED_glVertexAttrib1sNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1SNVPROC GLeeFuncPtr_glVertexAttrib1sNV; #define glVertexAttrib1sNV GLeeFuncPtr_glVertexAttrib1sNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1svNV #define GLEE_H_DEFINED_glVertexAttrib1svNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1SVNVPROC GLeeFuncPtr_glVertexAttrib1svNV; #define glVertexAttrib1svNV GLeeFuncPtr_glVertexAttrib1svNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2dNV #define GLEE_H_DEFINED_glVertexAttrib2dNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2DNVPROC GLeeFuncPtr_glVertexAttrib2dNV; #define glVertexAttrib2dNV GLeeFuncPtr_glVertexAttrib2dNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2dvNV #define GLEE_H_DEFINED_glVertexAttrib2dvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2DVNVPROC GLeeFuncPtr_glVertexAttrib2dvNV; #define glVertexAttrib2dvNV GLeeFuncPtr_glVertexAttrib2dvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2fNV #define GLEE_H_DEFINED_glVertexAttrib2fNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2FNVPROC GLeeFuncPtr_glVertexAttrib2fNV; #define glVertexAttrib2fNV GLeeFuncPtr_glVertexAttrib2fNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2fvNV #define GLEE_H_DEFINED_glVertexAttrib2fvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2FVNVPROC GLeeFuncPtr_glVertexAttrib2fvNV; #define glVertexAttrib2fvNV GLeeFuncPtr_glVertexAttrib2fvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2sNV #define GLEE_H_DEFINED_glVertexAttrib2sNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2SNVPROC GLeeFuncPtr_glVertexAttrib2sNV; #define glVertexAttrib2sNV GLeeFuncPtr_glVertexAttrib2sNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2svNV #define GLEE_H_DEFINED_glVertexAttrib2svNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2SVNVPROC GLeeFuncPtr_glVertexAttrib2svNV; #define glVertexAttrib2svNV GLeeFuncPtr_glVertexAttrib2svNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3dNV #define GLEE_H_DEFINED_glVertexAttrib3dNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3DNVPROC GLeeFuncPtr_glVertexAttrib3dNV; #define glVertexAttrib3dNV GLeeFuncPtr_glVertexAttrib3dNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3dvNV #define GLEE_H_DEFINED_glVertexAttrib3dvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3DVNVPROC GLeeFuncPtr_glVertexAttrib3dvNV; #define glVertexAttrib3dvNV GLeeFuncPtr_glVertexAttrib3dvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3fNV #define GLEE_H_DEFINED_glVertexAttrib3fNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3FNVPROC GLeeFuncPtr_glVertexAttrib3fNV; #define glVertexAttrib3fNV GLeeFuncPtr_glVertexAttrib3fNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3fvNV #define GLEE_H_DEFINED_glVertexAttrib3fvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3FVNVPROC GLeeFuncPtr_glVertexAttrib3fvNV; #define glVertexAttrib3fvNV GLeeFuncPtr_glVertexAttrib3fvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3sNV #define GLEE_H_DEFINED_glVertexAttrib3sNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3SNVPROC GLeeFuncPtr_glVertexAttrib3sNV; #define glVertexAttrib3sNV GLeeFuncPtr_glVertexAttrib3sNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3svNV #define GLEE_H_DEFINED_glVertexAttrib3svNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3SVNVPROC GLeeFuncPtr_glVertexAttrib3svNV; #define glVertexAttrib3svNV GLeeFuncPtr_glVertexAttrib3svNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4dNV #define GLEE_H_DEFINED_glVertexAttrib4dNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4DNVPROC GLeeFuncPtr_glVertexAttrib4dNV; #define glVertexAttrib4dNV GLeeFuncPtr_glVertexAttrib4dNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4dvNV #define GLEE_H_DEFINED_glVertexAttrib4dvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4DVNVPROC GLeeFuncPtr_glVertexAttrib4dvNV; #define glVertexAttrib4dvNV GLeeFuncPtr_glVertexAttrib4dvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4fNV #define GLEE_H_DEFINED_glVertexAttrib4fNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4FNVPROC GLeeFuncPtr_glVertexAttrib4fNV; #define glVertexAttrib4fNV GLeeFuncPtr_glVertexAttrib4fNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4fvNV #define GLEE_H_DEFINED_glVertexAttrib4fvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4FVNVPROC GLeeFuncPtr_glVertexAttrib4fvNV; #define glVertexAttrib4fvNV GLeeFuncPtr_glVertexAttrib4fvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4sNV #define GLEE_H_DEFINED_glVertexAttrib4sNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4SNVPROC GLeeFuncPtr_glVertexAttrib4sNV; #define glVertexAttrib4sNV GLeeFuncPtr_glVertexAttrib4sNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4svNV #define GLEE_H_DEFINED_glVertexAttrib4svNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4SVNVPROC GLeeFuncPtr_glVertexAttrib4svNV; #define glVertexAttrib4svNV GLeeFuncPtr_glVertexAttrib4svNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4ubNV #define GLEE_H_DEFINED_glVertexAttrib4ubNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4UBNVPROC GLeeFuncPtr_glVertexAttrib4ubNV; #define glVertexAttrib4ubNV GLeeFuncPtr_glVertexAttrib4ubNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4ubvNV #define GLEE_H_DEFINED_glVertexAttrib4ubvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4UBVNVPROC GLeeFuncPtr_glVertexAttrib4ubvNV; #define glVertexAttrib4ubvNV GLeeFuncPtr_glVertexAttrib4ubvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribs1dvNV #define GLEE_H_DEFINED_glVertexAttribs1dvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei count, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBS1DVNVPROC GLeeFuncPtr_glVertexAttribs1dvNV; #define glVertexAttribs1dvNV GLeeFuncPtr_glVertexAttribs1dvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribs1fvNV #define GLEE_H_DEFINED_glVertexAttribs1fvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei count, const GLfloat * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBS1FVNVPROC GLeeFuncPtr_glVertexAttribs1fvNV; #define glVertexAttribs1fvNV GLeeFuncPtr_glVertexAttribs1fvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribs1svNV #define GLEE_H_DEFINED_glVertexAttribs1svNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei count, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBS1SVNVPROC GLeeFuncPtr_glVertexAttribs1svNV; #define glVertexAttribs1svNV GLeeFuncPtr_glVertexAttribs1svNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribs2dvNV #define GLEE_H_DEFINED_glVertexAttribs2dvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei count, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBS2DVNVPROC GLeeFuncPtr_glVertexAttribs2dvNV; #define glVertexAttribs2dvNV GLeeFuncPtr_glVertexAttribs2dvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribs2fvNV #define GLEE_H_DEFINED_glVertexAttribs2fvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei count, const GLfloat * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBS2FVNVPROC GLeeFuncPtr_glVertexAttribs2fvNV; #define glVertexAttribs2fvNV GLeeFuncPtr_glVertexAttribs2fvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribs2svNV #define GLEE_H_DEFINED_glVertexAttribs2svNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei count, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBS2SVNVPROC GLeeFuncPtr_glVertexAttribs2svNV; #define glVertexAttribs2svNV GLeeFuncPtr_glVertexAttribs2svNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribs3dvNV #define GLEE_H_DEFINED_glVertexAttribs3dvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei count, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBS3DVNVPROC GLeeFuncPtr_glVertexAttribs3dvNV; #define glVertexAttribs3dvNV GLeeFuncPtr_glVertexAttribs3dvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribs3fvNV #define GLEE_H_DEFINED_glVertexAttribs3fvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei count, const GLfloat * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBS3FVNVPROC GLeeFuncPtr_glVertexAttribs3fvNV; #define glVertexAttribs3fvNV GLeeFuncPtr_glVertexAttribs3fvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribs3svNV #define GLEE_H_DEFINED_glVertexAttribs3svNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei count, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBS3SVNVPROC GLeeFuncPtr_glVertexAttribs3svNV; #define glVertexAttribs3svNV GLeeFuncPtr_glVertexAttribs3svNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribs4dvNV #define GLEE_H_DEFINED_glVertexAttribs4dvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei count, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBS4DVNVPROC GLeeFuncPtr_glVertexAttribs4dvNV; #define glVertexAttribs4dvNV GLeeFuncPtr_glVertexAttribs4dvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribs4fvNV #define GLEE_H_DEFINED_glVertexAttribs4fvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei count, const GLfloat * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBS4FVNVPROC GLeeFuncPtr_glVertexAttribs4fvNV; #define glVertexAttribs4fvNV GLeeFuncPtr_glVertexAttribs4fvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribs4svNV #define GLEE_H_DEFINED_glVertexAttribs4svNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei count, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBS4SVNVPROC GLeeFuncPtr_glVertexAttribs4svNV; #define glVertexAttribs4svNV GLeeFuncPtr_glVertexAttribs4svNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribs4ubvNV #define GLEE_H_DEFINED_glVertexAttribs4ubvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei count, const GLubyte * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBS4UBVNVPROC GLeeFuncPtr_glVertexAttribs4ubvNV; #define glVertexAttribs4ubvNV GLeeFuncPtr_glVertexAttribs4ubvNV #endif #endif /* GL_SGIX_texture_coordinate_clamp */ #ifndef GL_SGIX_texture_coordinate_clamp #define GL_SGIX_texture_coordinate_clamp 1 #define __GLEE_GL_SGIX_texture_coordinate_clamp 1 /* Constants */ #define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 #define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A #define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B #endif /* GL_SGIX_scalebias_hint */ #ifndef GL_SGIX_scalebias_hint #define GL_SGIX_scalebias_hint 1 #define __GLEE_GL_SGIX_scalebias_hint 1 /* Constants */ #define GL_SCALEBIAS_HINT_SGIX 0x8322 #endif /* GL_OML_interlace */ #ifndef GL_OML_interlace #define GL_OML_interlace 1 #define __GLEE_GL_OML_interlace 1 /* Constants */ #define GL_INTERLACE_OML 0x8980 #define GL_INTERLACE_READ_OML 0x8981 #endif /* GL_OML_subsample */ #ifndef GL_OML_subsample #define GL_OML_subsample 1 #define __GLEE_GL_OML_subsample 1 /* Constants */ #define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982 #define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983 #endif /* GL_OML_resample */ #ifndef GL_OML_resample #define GL_OML_resample 1 #define __GLEE_GL_OML_resample 1 /* Constants */ #define GL_PACK_RESAMPLE_OML 0x8984 #define GL_UNPACK_RESAMPLE_OML 0x8985 #define GL_RESAMPLE_REPLICATE_OML 0x8986 #define GL_RESAMPLE_ZERO_FILL_OML 0x8987 #define GL_RESAMPLE_AVERAGE_OML 0x8988 #define GL_RESAMPLE_DECIMATE_OML 0x8989 #endif /* GL_NV_copy_depth_to_color */ #ifndef GL_NV_copy_depth_to_color #define GL_NV_copy_depth_to_color 1 #define __GLEE_GL_NV_copy_depth_to_color 1 /* Constants */ #define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E #define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F #endif /* GL_ATI_envmap_bumpmap */ #ifndef GL_ATI_envmap_bumpmap #define GL_ATI_envmap_bumpmap 1 #define __GLEE_GL_ATI_envmap_bumpmap 1 /* Constants */ #define GL_BUMP_ROT_MATRIX_ATI 0x8775 #define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 #define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 #define GL_BUMP_TEX_UNITS_ATI 0x8778 #define GL_DUDV_ATI 0x8779 #define GL_DU8DV8_ATI 0x877A #define GL_BUMP_ENVMAP_ATI 0x877B #define GL_BUMP_TARGET_ATI 0x877C #ifndef GLEE_H_DEFINED_glTexBumpParameterivATI #define GLEE_H_DEFINED_glTexBumpParameterivATI typedef void (APIENTRYP GLEEPFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, const GLint * param); GLEE_EXTERN GLEEPFNGLTEXBUMPPARAMETERIVATIPROC GLeeFuncPtr_glTexBumpParameterivATI; #define glTexBumpParameterivATI GLeeFuncPtr_glTexBumpParameterivATI #endif #ifndef GLEE_H_DEFINED_glTexBumpParameterfvATI #define GLEE_H_DEFINED_glTexBumpParameterfvATI typedef void (APIENTRYP GLEEPFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, const GLfloat * param); GLEE_EXTERN GLEEPFNGLTEXBUMPPARAMETERFVATIPROC GLeeFuncPtr_glTexBumpParameterfvATI; #define glTexBumpParameterfvATI GLeeFuncPtr_glTexBumpParameterfvATI #endif #ifndef GLEE_H_DEFINED_glGetTexBumpParameterivATI #define GLEE_H_DEFINED_glGetTexBumpParameterivATI typedef void (APIENTRYP GLEEPFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint * param); GLEE_EXTERN GLEEPFNGLGETTEXBUMPPARAMETERIVATIPROC GLeeFuncPtr_glGetTexBumpParameterivATI; #define glGetTexBumpParameterivATI GLeeFuncPtr_glGetTexBumpParameterivATI #endif #ifndef GLEE_H_DEFINED_glGetTexBumpParameterfvATI #define GLEE_H_DEFINED_glGetTexBumpParameterfvATI typedef void (APIENTRYP GLEEPFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat * param); GLEE_EXTERN GLEEPFNGLGETTEXBUMPPARAMETERFVATIPROC GLeeFuncPtr_glGetTexBumpParameterfvATI; #define glGetTexBumpParameterfvATI GLeeFuncPtr_glGetTexBumpParameterfvATI #endif #endif /* GL_ATI_fragment_shader */ #ifndef GL_ATI_fragment_shader #define GL_ATI_fragment_shader 1 #define __GLEE_GL_ATI_fragment_shader 1 /* Constants */ #define GL_FRAGMENT_SHADER_ATI 0x8920 #define GL_REG_0_ATI 0x8921 #define GL_REG_1_ATI 0x8922 #define GL_REG_2_ATI 0x8923 #define GL_REG_3_ATI 0x8924 #define GL_REG_4_ATI 0x8925 #define GL_REG_5_ATI 0x8926 #define GL_REG_6_ATI 0x8927 #define GL_REG_7_ATI 0x8928 #define GL_REG_8_ATI 0x8929 #define GL_REG_9_ATI 0x892A #define GL_REG_10_ATI 0x892B #define GL_REG_11_ATI 0x892C #define GL_REG_12_ATI 0x892D #define GL_REG_13_ATI 0x892E #define GL_REG_14_ATI 0x892F #define GL_REG_15_ATI 0x8930 #define GL_REG_16_ATI 0x8931 #define GL_REG_17_ATI 0x8932 #define GL_REG_18_ATI 0x8933 #define GL_REG_19_ATI 0x8934 #define GL_REG_20_ATI 0x8935 #define GL_REG_21_ATI 0x8936 #define GL_REG_22_ATI 0x8937 #define GL_REG_23_ATI 0x8938 #define GL_REG_24_ATI 0x8939 #define GL_REG_25_ATI 0x893A #define GL_REG_26_ATI 0x893B #define GL_REG_27_ATI 0x893C #define GL_REG_28_ATI 0x893D #define GL_REG_29_ATI 0x893E #define GL_REG_30_ATI 0x893F #define GL_REG_31_ATI 0x8940 #define GL_CON_0_ATI 0x8941 #define GL_CON_1_ATI 0x8942 #define GL_CON_2_ATI 0x8943 #define GL_CON_3_ATI 0x8944 #define GL_CON_4_ATI 0x8945 #define GL_CON_5_ATI 0x8946 #define GL_CON_6_ATI 0x8947 #define GL_CON_7_ATI 0x8948 #define GL_CON_8_ATI 0x8949 #define GL_CON_9_ATI 0x894A #define GL_CON_10_ATI 0x894B #define GL_CON_11_ATI 0x894C #define GL_CON_12_ATI 0x894D #define GL_CON_13_ATI 0x894E #define GL_CON_14_ATI 0x894F #define GL_CON_15_ATI 0x8950 #define GL_CON_16_ATI 0x8951 #define GL_CON_17_ATI 0x8952 #define GL_CON_18_ATI 0x8953 #define GL_CON_19_ATI 0x8954 #define GL_CON_20_ATI 0x8955 #define GL_CON_21_ATI 0x8956 #define GL_CON_22_ATI 0x8957 #define GL_CON_23_ATI 0x8958 #define GL_CON_24_ATI 0x8959 #define GL_CON_25_ATI 0x895A #define GL_CON_26_ATI 0x895B #define GL_CON_27_ATI 0x895C #define GL_CON_28_ATI 0x895D #define GL_CON_29_ATI 0x895E #define GL_CON_30_ATI 0x895F #define GL_CON_31_ATI 0x8960 #define GL_MOV_ATI 0x8961 #define GL_ADD_ATI 0x8963 #define GL_MUL_ATI 0x8964 #define GL_SUB_ATI 0x8965 #define GL_DOT3_ATI 0x8966 #define GL_DOT4_ATI 0x8967 #define GL_MAD_ATI 0x8968 #define GL_LERP_ATI 0x8969 #define GL_CND_ATI 0x896A #define GL_CND0_ATI 0x896B #define GL_DOT2_ADD_ATI 0x896C #define GL_SECONDARY_INTERPOLATOR_ATI 0x896D #define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E #define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F #define GL_NUM_PASSES_ATI 0x8970 #define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971 #define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972 #define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973 #define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974 #define GL_COLOR_ALPHA_PAIRING_ATI 0x8975 #define GL_SWIZZLE_STR_ATI 0x8976 #define GL_SWIZZLE_STQ_ATI 0x8977 #define GL_SWIZZLE_STR_DR_ATI 0x8978 #define GL_SWIZZLE_STQ_DQ_ATI 0x8979 #define GL_SWIZZLE_STRQ_ATI 0x897A #define GL_SWIZZLE_STRQ_DQ_ATI 0x897B #define GL_RED_BIT_ATI 0x00000001 #define GL_GREEN_BIT_ATI 0x00000002 #define GL_BLUE_BIT_ATI 0x00000004 #define GL_2X_BIT_ATI 0x00000001 #define GL_4X_BIT_ATI 0x00000002 #define GL_8X_BIT_ATI 0x00000004 #define GL_HALF_BIT_ATI 0x00000008 #define GL_QUARTER_BIT_ATI 0x00000010 #define GL_EIGHTH_BIT_ATI 0x00000020 #define GL_SATURATE_BIT_ATI 0x00000040 #define GL_COMP_BIT_ATI 0x00000002 #define GL_NEGATE_BIT_ATI 0x00000004 #define GL_BIAS_BIT_ATI 0x00000008 #ifndef GLEE_H_DEFINED_glGenFragmentShadersATI #define GLEE_H_DEFINED_glGenFragmentShadersATI typedef GLuint (APIENTRYP GLEEPFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range); GLEE_EXTERN GLEEPFNGLGENFRAGMENTSHADERSATIPROC GLeeFuncPtr_glGenFragmentShadersATI; #define glGenFragmentShadersATI GLeeFuncPtr_glGenFragmentShadersATI #endif #ifndef GLEE_H_DEFINED_glBindFragmentShaderATI #define GLEE_H_DEFINED_glBindFragmentShaderATI typedef void (APIENTRYP GLEEPFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id); GLEE_EXTERN GLEEPFNGLBINDFRAGMENTSHADERATIPROC GLeeFuncPtr_glBindFragmentShaderATI; #define glBindFragmentShaderATI GLeeFuncPtr_glBindFragmentShaderATI #endif #ifndef GLEE_H_DEFINED_glDeleteFragmentShaderATI #define GLEE_H_DEFINED_glDeleteFragmentShaderATI typedef void (APIENTRYP GLEEPFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id); GLEE_EXTERN GLEEPFNGLDELETEFRAGMENTSHADERATIPROC GLeeFuncPtr_glDeleteFragmentShaderATI; #define glDeleteFragmentShaderATI GLeeFuncPtr_glDeleteFragmentShaderATI #endif #ifndef GLEE_H_DEFINED_glBeginFragmentShaderATI #define GLEE_H_DEFINED_glBeginFragmentShaderATI typedef void (APIENTRYP GLEEPFNGLBEGINFRAGMENTSHADERATIPROC) (); GLEE_EXTERN GLEEPFNGLBEGINFRAGMENTSHADERATIPROC GLeeFuncPtr_glBeginFragmentShaderATI; #define glBeginFragmentShaderATI GLeeFuncPtr_glBeginFragmentShaderATI #endif #ifndef GLEE_H_DEFINED_glEndFragmentShaderATI #define GLEE_H_DEFINED_glEndFragmentShaderATI typedef void (APIENTRYP GLEEPFNGLENDFRAGMENTSHADERATIPROC) (); GLEE_EXTERN GLEEPFNGLENDFRAGMENTSHADERATIPROC GLeeFuncPtr_glEndFragmentShaderATI; #define glEndFragmentShaderATI GLeeFuncPtr_glEndFragmentShaderATI #endif #ifndef GLEE_H_DEFINED_glPassTexCoordATI #define GLEE_H_DEFINED_glPassTexCoordATI typedef void (APIENTRYP GLEEPFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle); GLEE_EXTERN GLEEPFNGLPASSTEXCOORDATIPROC GLeeFuncPtr_glPassTexCoordATI; #define glPassTexCoordATI GLeeFuncPtr_glPassTexCoordATI #endif #ifndef GLEE_H_DEFINED_glSampleMapATI #define GLEE_H_DEFINED_glSampleMapATI typedef void (APIENTRYP GLEEPFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle); GLEE_EXTERN GLEEPFNGLSAMPLEMAPATIPROC GLeeFuncPtr_glSampleMapATI; #define glSampleMapATI GLeeFuncPtr_glSampleMapATI #endif #ifndef GLEE_H_DEFINED_glColorFragmentOp1ATI #define GLEE_H_DEFINED_glColorFragmentOp1ATI typedef void (APIENTRYP GLEEPFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); GLEE_EXTERN GLEEPFNGLCOLORFRAGMENTOP1ATIPROC GLeeFuncPtr_glColorFragmentOp1ATI; #define glColorFragmentOp1ATI GLeeFuncPtr_glColorFragmentOp1ATI #endif #ifndef GLEE_H_DEFINED_glColorFragmentOp2ATI #define GLEE_H_DEFINED_glColorFragmentOp2ATI typedef void (APIENTRYP GLEEPFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); GLEE_EXTERN GLEEPFNGLCOLORFRAGMENTOP2ATIPROC GLeeFuncPtr_glColorFragmentOp2ATI; #define glColorFragmentOp2ATI GLeeFuncPtr_glColorFragmentOp2ATI #endif #ifndef GLEE_H_DEFINED_glColorFragmentOp3ATI #define GLEE_H_DEFINED_glColorFragmentOp3ATI typedef void (APIENTRYP GLEEPFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); GLEE_EXTERN GLEEPFNGLCOLORFRAGMENTOP3ATIPROC GLeeFuncPtr_glColorFragmentOp3ATI; #define glColorFragmentOp3ATI GLeeFuncPtr_glColorFragmentOp3ATI #endif #ifndef GLEE_H_DEFINED_glAlphaFragmentOp1ATI #define GLEE_H_DEFINED_glAlphaFragmentOp1ATI typedef void (APIENTRYP GLEEPFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); GLEE_EXTERN GLEEPFNGLALPHAFRAGMENTOP1ATIPROC GLeeFuncPtr_glAlphaFragmentOp1ATI; #define glAlphaFragmentOp1ATI GLeeFuncPtr_glAlphaFragmentOp1ATI #endif #ifndef GLEE_H_DEFINED_glAlphaFragmentOp2ATI #define GLEE_H_DEFINED_glAlphaFragmentOp2ATI typedef void (APIENTRYP GLEEPFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); GLEE_EXTERN GLEEPFNGLALPHAFRAGMENTOP2ATIPROC GLeeFuncPtr_glAlphaFragmentOp2ATI; #define glAlphaFragmentOp2ATI GLeeFuncPtr_glAlphaFragmentOp2ATI #endif #ifndef GLEE_H_DEFINED_glAlphaFragmentOp3ATI #define GLEE_H_DEFINED_glAlphaFragmentOp3ATI typedef void (APIENTRYP GLEEPFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); GLEE_EXTERN GLEEPFNGLALPHAFRAGMENTOP3ATIPROC GLeeFuncPtr_glAlphaFragmentOp3ATI; #define glAlphaFragmentOp3ATI GLeeFuncPtr_glAlphaFragmentOp3ATI #endif #ifndef GLEE_H_DEFINED_glSetFragmentShaderConstantATI #define GLEE_H_DEFINED_glSetFragmentShaderConstantATI typedef void (APIENTRYP GLEEPFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat * value); GLEE_EXTERN GLEEPFNGLSETFRAGMENTSHADERCONSTANTATIPROC GLeeFuncPtr_glSetFragmentShaderConstantATI; #define glSetFragmentShaderConstantATI GLeeFuncPtr_glSetFragmentShaderConstantATI #endif #endif /* GL_ATI_pn_triangles */ #ifndef GL_ATI_pn_triangles #define GL_ATI_pn_triangles 1 #define __GLEE_GL_ATI_pn_triangles 1 /* Constants */ #define GL_PN_TRIANGLES_ATI 0x87F0 #define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 #define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 #define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 #define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 #define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 #define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 #define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 #define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 #ifndef GLEE_H_DEFINED_glPNTrianglesiATI #define GLEE_H_DEFINED_glPNTrianglesiATI typedef void (APIENTRYP GLEEPFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLPNTRIANGLESIATIPROC GLeeFuncPtr_glPNTrianglesiATI; #define glPNTrianglesiATI GLeeFuncPtr_glPNTrianglesiATI #endif #ifndef GLEE_H_DEFINED_glPNTrianglesfATI #define GLEE_H_DEFINED_glPNTrianglesfATI typedef void (APIENTRYP GLEEPFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLPNTRIANGLESFATIPROC GLeeFuncPtr_glPNTrianglesfATI; #define glPNTrianglesfATI GLeeFuncPtr_glPNTrianglesfATI #endif #endif /* GL_ATI_vertex_array_object */ #ifndef GL_ATI_vertex_array_object #define GL_ATI_vertex_array_object 1 #define __GLEE_GL_ATI_vertex_array_object 1 /* Constants */ #define GL_STATIC_ATI 0x8760 #define GL_DYNAMIC_ATI 0x8761 #define GL_PRESERVE_ATI 0x8762 #define GL_DISCARD_ATI 0x8763 #define GL_OBJECT_BUFFER_SIZE_ATI 0x8764 #define GL_OBJECT_BUFFER_USAGE_ATI 0x8765 #define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766 #define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767 #ifndef GLEE_H_DEFINED_glNewObjectBufferATI #define GLEE_H_DEFINED_glNewObjectBufferATI typedef GLuint (APIENTRYP GLEEPFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const GLvoid * pointer, GLenum usage); GLEE_EXTERN GLEEPFNGLNEWOBJECTBUFFERATIPROC GLeeFuncPtr_glNewObjectBufferATI; #define glNewObjectBufferATI GLeeFuncPtr_glNewObjectBufferATI #endif #ifndef GLEE_H_DEFINED_glIsObjectBufferATI #define GLEE_H_DEFINED_glIsObjectBufferATI typedef GLboolean (APIENTRYP GLEEPFNGLISOBJECTBUFFERATIPROC) (GLuint buffer); GLEE_EXTERN GLEEPFNGLISOBJECTBUFFERATIPROC GLeeFuncPtr_glIsObjectBufferATI; #define glIsObjectBufferATI GLeeFuncPtr_glIsObjectBufferATI #endif #ifndef GLEE_H_DEFINED_glUpdateObjectBufferATI #define GLEE_H_DEFINED_glUpdateObjectBufferATI typedef void (APIENTRYP GLEEPFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const GLvoid * pointer, GLenum preserve); GLEE_EXTERN GLEEPFNGLUPDATEOBJECTBUFFERATIPROC GLeeFuncPtr_glUpdateObjectBufferATI; #define glUpdateObjectBufferATI GLeeFuncPtr_glUpdateObjectBufferATI #endif #ifndef GLEE_H_DEFINED_glGetObjectBufferfvATI #define GLEE_H_DEFINED_glGetObjectBufferfvATI typedef void (APIENTRYP GLEEPFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETOBJECTBUFFERFVATIPROC GLeeFuncPtr_glGetObjectBufferfvATI; #define glGetObjectBufferfvATI GLeeFuncPtr_glGetObjectBufferfvATI #endif #ifndef GLEE_H_DEFINED_glGetObjectBufferivATI #define GLEE_H_DEFINED_glGetObjectBufferivATI typedef void (APIENTRYP GLEEPFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETOBJECTBUFFERIVATIPROC GLeeFuncPtr_glGetObjectBufferivATI; #define glGetObjectBufferivATI GLeeFuncPtr_glGetObjectBufferivATI #endif #ifndef GLEE_H_DEFINED_glFreeObjectBufferATI #define GLEE_H_DEFINED_glFreeObjectBufferATI typedef void (APIENTRYP GLEEPFNGLFREEOBJECTBUFFERATIPROC) (GLuint buffer); GLEE_EXTERN GLEEPFNGLFREEOBJECTBUFFERATIPROC GLeeFuncPtr_glFreeObjectBufferATI; #define glFreeObjectBufferATI GLeeFuncPtr_glFreeObjectBufferATI #endif #ifndef GLEE_H_DEFINED_glArrayObjectATI #define GLEE_H_DEFINED_glArrayObjectATI typedef void (APIENTRYP GLEEPFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); GLEE_EXTERN GLEEPFNGLARRAYOBJECTATIPROC GLeeFuncPtr_glArrayObjectATI; #define glArrayObjectATI GLeeFuncPtr_glArrayObjectATI #endif #ifndef GLEE_H_DEFINED_glGetArrayObjectfvATI #define GLEE_H_DEFINED_glGetArrayObjectfvATI typedef void (APIENTRYP GLEEPFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETARRAYOBJECTFVATIPROC GLeeFuncPtr_glGetArrayObjectfvATI; #define glGetArrayObjectfvATI GLeeFuncPtr_glGetArrayObjectfvATI #endif #ifndef GLEE_H_DEFINED_glGetArrayObjectivATI #define GLEE_H_DEFINED_glGetArrayObjectivATI typedef void (APIENTRYP GLEEPFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETARRAYOBJECTIVATIPROC GLeeFuncPtr_glGetArrayObjectivATI; #define glGetArrayObjectivATI GLeeFuncPtr_glGetArrayObjectivATI #endif #ifndef GLEE_H_DEFINED_glVariantArrayObjectATI #define GLEE_H_DEFINED_glVariantArrayObjectATI typedef void (APIENTRYP GLEEPFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); GLEE_EXTERN GLEEPFNGLVARIANTARRAYOBJECTATIPROC GLeeFuncPtr_glVariantArrayObjectATI; #define glVariantArrayObjectATI GLeeFuncPtr_glVariantArrayObjectATI #endif #ifndef GLEE_H_DEFINED_glGetVariantArrayObjectfvATI #define GLEE_H_DEFINED_glGetVariantArrayObjectfvATI typedef void (APIENTRYP GLEEPFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETVARIANTARRAYOBJECTFVATIPROC GLeeFuncPtr_glGetVariantArrayObjectfvATI; #define glGetVariantArrayObjectfvATI GLeeFuncPtr_glGetVariantArrayObjectfvATI #endif #ifndef GLEE_H_DEFINED_glGetVariantArrayObjectivATI #define GLEE_H_DEFINED_glGetVariantArrayObjectivATI typedef void (APIENTRYP GLEEPFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETVARIANTARRAYOBJECTIVATIPROC GLeeFuncPtr_glGetVariantArrayObjectivATI; #define glGetVariantArrayObjectivATI GLeeFuncPtr_glGetVariantArrayObjectivATI #endif #endif /* GL_EXT_vertex_shader */ #ifndef GL_EXT_vertex_shader #define GL_EXT_vertex_shader 1 #define __GLEE_GL_EXT_vertex_shader 1 /* Constants */ #define GL_VERTEX_SHADER_EXT 0x8780 #define GL_VERTEX_SHADER_BINDING_EXT 0x8781 #define GL_OP_INDEX_EXT 0x8782 #define GL_OP_NEGATE_EXT 0x8783 #define GL_OP_DOT3_EXT 0x8784 #define GL_OP_DOT4_EXT 0x8785 #define GL_OP_MUL_EXT 0x8786 #define GL_OP_ADD_EXT 0x8787 #define GL_OP_MADD_EXT 0x8788 #define GL_OP_FRAC_EXT 0x8789 #define GL_OP_MAX_EXT 0x878A #define GL_OP_MIN_EXT 0x878B #define GL_OP_SET_GE_EXT 0x878C #define GL_OP_SET_LT_EXT 0x878D #define GL_OP_CLAMP_EXT 0x878E #define GL_OP_FLOOR_EXT 0x878F #define GL_OP_ROUND_EXT 0x8790 #define GL_OP_EXP_BASE_2_EXT 0x8791 #define GL_OP_LOG_BASE_2_EXT 0x8792 #define GL_OP_POWER_EXT 0x8793 #define GL_OP_RECIP_EXT 0x8794 #define GL_OP_RECIP_SQRT_EXT 0x8795 #define GL_OP_SUB_EXT 0x8796 #define GL_OP_CROSS_PRODUCT_EXT 0x8797 #define GL_OP_MULTIPLY_MATRIX_EXT 0x8798 #define GL_OP_MOV_EXT 0x8799 #define GL_OUTPUT_VERTEX_EXT 0x879A #define GL_OUTPUT_COLOR0_EXT 0x879B #define GL_OUTPUT_COLOR1_EXT 0x879C #define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D #define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E #define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F #define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 #define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 #define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 #define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 #define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 #define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 #define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 #define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 #define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 #define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 #define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA #define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB #define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC #define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD #define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE #define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF #define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 #define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 #define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 #define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 #define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 #define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 #define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 #define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 #define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 #define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 #define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA #define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB #define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC #define GL_OUTPUT_FOG_EXT 0x87BD #define GL_SCALAR_EXT 0x87BE #define GL_VECTOR_EXT 0x87BF #define GL_MATRIX_EXT 0x87C0 #define GL_VARIANT_EXT 0x87C1 #define GL_INVARIANT_EXT 0x87C2 #define GL_LOCAL_CONSTANT_EXT 0x87C3 #define GL_LOCAL_EXT 0x87C4 #define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 #define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 #define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 #define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 #define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 #define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA #define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB #define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC #define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CD #define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE #define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF #define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 #define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 #define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 #define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 #define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 #define GL_X_EXT 0x87D5 #define GL_Y_EXT 0x87D6 #define GL_Z_EXT 0x87D7 #define GL_W_EXT 0x87D8 #define GL_NEGATIVE_X_EXT 0x87D9 #define GL_NEGATIVE_Y_EXT 0x87DA #define GL_NEGATIVE_Z_EXT 0x87DB #define GL_NEGATIVE_W_EXT 0x87DC #define GL_ZERO_EXT 0x87DD #define GL_ONE_EXT 0x87DE #define GL_NEGATIVE_ONE_EXT 0x87DF #define GL_NORMALIZED_RANGE_EXT 0x87E0 #define GL_FULL_RANGE_EXT 0x87E1 #define GL_CURRENT_VERTEX_EXT 0x87E2 #define GL_MVP_MATRIX_EXT 0x87E3 #define GL_VARIANT_VALUE_EXT 0x87E4 #define GL_VARIANT_DATATYPE_EXT 0x87E5 #define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 #define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 #define GL_VARIANT_ARRAY_EXT 0x87E8 #define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 #define GL_INVARIANT_VALUE_EXT 0x87EA #define GL_INVARIANT_DATATYPE_EXT 0x87EB #define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC #define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED #ifndef GLEE_H_DEFINED_glBeginVertexShaderEXT #define GLEE_H_DEFINED_glBeginVertexShaderEXT typedef void (APIENTRYP GLEEPFNGLBEGINVERTEXSHADEREXTPROC) (); GLEE_EXTERN GLEEPFNGLBEGINVERTEXSHADEREXTPROC GLeeFuncPtr_glBeginVertexShaderEXT; #define glBeginVertexShaderEXT GLeeFuncPtr_glBeginVertexShaderEXT #endif #ifndef GLEE_H_DEFINED_glEndVertexShaderEXT #define GLEE_H_DEFINED_glEndVertexShaderEXT typedef void (APIENTRYP GLEEPFNGLENDVERTEXSHADEREXTPROC) (); GLEE_EXTERN GLEEPFNGLENDVERTEXSHADEREXTPROC GLeeFuncPtr_glEndVertexShaderEXT; #define glEndVertexShaderEXT GLeeFuncPtr_glEndVertexShaderEXT #endif #ifndef GLEE_H_DEFINED_glBindVertexShaderEXT #define GLEE_H_DEFINED_glBindVertexShaderEXT typedef void (APIENTRYP GLEEPFNGLBINDVERTEXSHADEREXTPROC) (GLuint id); GLEE_EXTERN GLEEPFNGLBINDVERTEXSHADEREXTPROC GLeeFuncPtr_glBindVertexShaderEXT; #define glBindVertexShaderEXT GLeeFuncPtr_glBindVertexShaderEXT #endif #ifndef GLEE_H_DEFINED_glGenVertexShadersEXT #define GLEE_H_DEFINED_glGenVertexShadersEXT typedef GLuint (APIENTRYP GLEEPFNGLGENVERTEXSHADERSEXTPROC) (GLuint range); GLEE_EXTERN GLEEPFNGLGENVERTEXSHADERSEXTPROC GLeeFuncPtr_glGenVertexShadersEXT; #define glGenVertexShadersEXT GLeeFuncPtr_glGenVertexShadersEXT #endif #ifndef GLEE_H_DEFINED_glDeleteVertexShaderEXT #define GLEE_H_DEFINED_glDeleteVertexShaderEXT typedef void (APIENTRYP GLEEPFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id); GLEE_EXTERN GLEEPFNGLDELETEVERTEXSHADEREXTPROC GLeeFuncPtr_glDeleteVertexShaderEXT; #define glDeleteVertexShaderEXT GLeeFuncPtr_glDeleteVertexShaderEXT #endif #ifndef GLEE_H_DEFINED_glShaderOp1EXT #define GLEE_H_DEFINED_glShaderOp1EXT typedef void (APIENTRYP GLEEPFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1); GLEE_EXTERN GLEEPFNGLSHADEROP1EXTPROC GLeeFuncPtr_glShaderOp1EXT; #define glShaderOp1EXT GLeeFuncPtr_glShaderOp1EXT #endif #ifndef GLEE_H_DEFINED_glShaderOp2EXT #define GLEE_H_DEFINED_glShaderOp2EXT typedef void (APIENTRYP GLEEPFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2); GLEE_EXTERN GLEEPFNGLSHADEROP2EXTPROC GLeeFuncPtr_glShaderOp2EXT; #define glShaderOp2EXT GLeeFuncPtr_glShaderOp2EXT #endif #ifndef GLEE_H_DEFINED_glShaderOp3EXT #define GLEE_H_DEFINED_glShaderOp3EXT typedef void (APIENTRYP GLEEPFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); GLEE_EXTERN GLEEPFNGLSHADEROP3EXTPROC GLeeFuncPtr_glShaderOp3EXT; #define glShaderOp3EXT GLeeFuncPtr_glShaderOp3EXT #endif #ifndef GLEE_H_DEFINED_glSwizzleEXT #define GLEE_H_DEFINED_glSwizzleEXT typedef void (APIENTRYP GLEEPFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); GLEE_EXTERN GLEEPFNGLSWIZZLEEXTPROC GLeeFuncPtr_glSwizzleEXT; #define glSwizzleEXT GLeeFuncPtr_glSwizzleEXT #endif #ifndef GLEE_H_DEFINED_glWriteMaskEXT #define GLEE_H_DEFINED_glWriteMaskEXT typedef void (APIENTRYP GLEEPFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); GLEE_EXTERN GLEEPFNGLWRITEMASKEXTPROC GLeeFuncPtr_glWriteMaskEXT; #define glWriteMaskEXT GLeeFuncPtr_glWriteMaskEXT #endif #ifndef GLEE_H_DEFINED_glInsertComponentEXT #define GLEE_H_DEFINED_glInsertComponentEXT typedef void (APIENTRYP GLEEPFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); GLEE_EXTERN GLEEPFNGLINSERTCOMPONENTEXTPROC GLeeFuncPtr_glInsertComponentEXT; #define glInsertComponentEXT GLeeFuncPtr_glInsertComponentEXT #endif #ifndef GLEE_H_DEFINED_glExtractComponentEXT #define GLEE_H_DEFINED_glExtractComponentEXT typedef void (APIENTRYP GLEEPFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); GLEE_EXTERN GLEEPFNGLEXTRACTCOMPONENTEXTPROC GLeeFuncPtr_glExtractComponentEXT; #define glExtractComponentEXT GLeeFuncPtr_glExtractComponentEXT #endif #ifndef GLEE_H_DEFINED_glGenSymbolsEXT #define GLEE_H_DEFINED_glGenSymbolsEXT typedef GLuint (APIENTRYP GLEEPFNGLGENSYMBOLSEXTPROC) (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); GLEE_EXTERN GLEEPFNGLGENSYMBOLSEXTPROC GLeeFuncPtr_glGenSymbolsEXT; #define glGenSymbolsEXT GLeeFuncPtr_glGenSymbolsEXT #endif #ifndef GLEE_H_DEFINED_glSetInvariantEXT #define GLEE_H_DEFINED_glSetInvariantEXT typedef void (APIENTRYP GLEEPFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, const GLvoid * addr); GLEE_EXTERN GLEEPFNGLSETINVARIANTEXTPROC GLeeFuncPtr_glSetInvariantEXT; #define glSetInvariantEXT GLeeFuncPtr_glSetInvariantEXT #endif #ifndef GLEE_H_DEFINED_glSetLocalConstantEXT #define GLEE_H_DEFINED_glSetLocalConstantEXT typedef void (APIENTRYP GLEEPFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, const GLvoid * addr); GLEE_EXTERN GLEEPFNGLSETLOCALCONSTANTEXTPROC GLeeFuncPtr_glSetLocalConstantEXT; #define glSetLocalConstantEXT GLeeFuncPtr_glSetLocalConstantEXT #endif #ifndef GLEE_H_DEFINED_glVariantbvEXT #define GLEE_H_DEFINED_glVariantbvEXT typedef void (APIENTRYP GLEEPFNGLVARIANTBVEXTPROC) (GLuint id, const GLbyte * addr); GLEE_EXTERN GLEEPFNGLVARIANTBVEXTPROC GLeeFuncPtr_glVariantbvEXT; #define glVariantbvEXT GLeeFuncPtr_glVariantbvEXT #endif #ifndef GLEE_H_DEFINED_glVariantsvEXT #define GLEE_H_DEFINED_glVariantsvEXT typedef void (APIENTRYP GLEEPFNGLVARIANTSVEXTPROC) (GLuint id, const GLshort * addr); GLEE_EXTERN GLEEPFNGLVARIANTSVEXTPROC GLeeFuncPtr_glVariantsvEXT; #define glVariantsvEXT GLeeFuncPtr_glVariantsvEXT #endif #ifndef GLEE_H_DEFINED_glVariantivEXT #define GLEE_H_DEFINED_glVariantivEXT typedef void (APIENTRYP GLEEPFNGLVARIANTIVEXTPROC) (GLuint id, const GLint * addr); GLEE_EXTERN GLEEPFNGLVARIANTIVEXTPROC GLeeFuncPtr_glVariantivEXT; #define glVariantivEXT GLeeFuncPtr_glVariantivEXT #endif #ifndef GLEE_H_DEFINED_glVariantfvEXT #define GLEE_H_DEFINED_glVariantfvEXT typedef void (APIENTRYP GLEEPFNGLVARIANTFVEXTPROC) (GLuint id, const GLfloat * addr); GLEE_EXTERN GLEEPFNGLVARIANTFVEXTPROC GLeeFuncPtr_glVariantfvEXT; #define glVariantfvEXT GLeeFuncPtr_glVariantfvEXT #endif #ifndef GLEE_H_DEFINED_glVariantdvEXT #define GLEE_H_DEFINED_glVariantdvEXT typedef void (APIENTRYP GLEEPFNGLVARIANTDVEXTPROC) (GLuint id, const GLdouble * addr); GLEE_EXTERN GLEEPFNGLVARIANTDVEXTPROC GLeeFuncPtr_glVariantdvEXT; #define glVariantdvEXT GLeeFuncPtr_glVariantdvEXT #endif #ifndef GLEE_H_DEFINED_glVariantubvEXT #define GLEE_H_DEFINED_glVariantubvEXT typedef void (APIENTRYP GLEEPFNGLVARIANTUBVEXTPROC) (GLuint id, const GLubyte * addr); GLEE_EXTERN GLEEPFNGLVARIANTUBVEXTPROC GLeeFuncPtr_glVariantubvEXT; #define glVariantubvEXT GLeeFuncPtr_glVariantubvEXT #endif #ifndef GLEE_H_DEFINED_glVariantusvEXT #define GLEE_H_DEFINED_glVariantusvEXT typedef void (APIENTRYP GLEEPFNGLVARIANTUSVEXTPROC) (GLuint id, const GLushort * addr); GLEE_EXTERN GLEEPFNGLVARIANTUSVEXTPROC GLeeFuncPtr_glVariantusvEXT; #define glVariantusvEXT GLeeFuncPtr_glVariantusvEXT #endif #ifndef GLEE_H_DEFINED_glVariantuivEXT #define GLEE_H_DEFINED_glVariantuivEXT typedef void (APIENTRYP GLEEPFNGLVARIANTUIVEXTPROC) (GLuint id, const GLuint * addr); GLEE_EXTERN GLEEPFNGLVARIANTUIVEXTPROC GLeeFuncPtr_glVariantuivEXT; #define glVariantuivEXT GLeeFuncPtr_glVariantuivEXT #endif #ifndef GLEE_H_DEFINED_glVariantPointerEXT #define GLEE_H_DEFINED_glVariantPointerEXT typedef void (APIENTRYP GLEEPFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, const GLvoid * addr); GLEE_EXTERN GLEEPFNGLVARIANTPOINTEREXTPROC GLeeFuncPtr_glVariantPointerEXT; #define glVariantPointerEXT GLeeFuncPtr_glVariantPointerEXT #endif #ifndef GLEE_H_DEFINED_glEnableVariantClientStateEXT #define GLEE_H_DEFINED_glEnableVariantClientStateEXT typedef void (APIENTRYP GLEEPFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); GLEE_EXTERN GLEEPFNGLENABLEVARIANTCLIENTSTATEEXTPROC GLeeFuncPtr_glEnableVariantClientStateEXT; #define glEnableVariantClientStateEXT GLeeFuncPtr_glEnableVariantClientStateEXT #endif #ifndef GLEE_H_DEFINED_glDisableVariantClientStateEXT #define GLEE_H_DEFINED_glDisableVariantClientStateEXT typedef void (APIENTRYP GLEEPFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); GLEE_EXTERN GLEEPFNGLDISABLEVARIANTCLIENTSTATEEXTPROC GLeeFuncPtr_glDisableVariantClientStateEXT; #define glDisableVariantClientStateEXT GLeeFuncPtr_glDisableVariantClientStateEXT #endif #ifndef GLEE_H_DEFINED_glBindLightParameterEXT #define GLEE_H_DEFINED_glBindLightParameterEXT typedef GLuint (APIENTRYP GLEEPFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value); GLEE_EXTERN GLEEPFNGLBINDLIGHTPARAMETEREXTPROC GLeeFuncPtr_glBindLightParameterEXT; #define glBindLightParameterEXT GLeeFuncPtr_glBindLightParameterEXT #endif #ifndef GLEE_H_DEFINED_glBindMaterialParameterEXT #define GLEE_H_DEFINED_glBindMaterialParameterEXT typedef GLuint (APIENTRYP GLEEPFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value); GLEE_EXTERN GLEEPFNGLBINDMATERIALPARAMETEREXTPROC GLeeFuncPtr_glBindMaterialParameterEXT; #define glBindMaterialParameterEXT GLeeFuncPtr_glBindMaterialParameterEXT #endif #ifndef GLEE_H_DEFINED_glBindTexGenParameterEXT #define GLEE_H_DEFINED_glBindTexGenParameterEXT typedef GLuint (APIENTRYP GLEEPFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value); GLEE_EXTERN GLEEPFNGLBINDTEXGENPARAMETEREXTPROC GLeeFuncPtr_glBindTexGenParameterEXT; #define glBindTexGenParameterEXT GLeeFuncPtr_glBindTexGenParameterEXT #endif #ifndef GLEE_H_DEFINED_glBindTextureUnitParameterEXT #define GLEE_H_DEFINED_glBindTextureUnitParameterEXT typedef GLuint (APIENTRYP GLEEPFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value); GLEE_EXTERN GLEEPFNGLBINDTEXTUREUNITPARAMETEREXTPROC GLeeFuncPtr_glBindTextureUnitParameterEXT; #define glBindTextureUnitParameterEXT GLeeFuncPtr_glBindTextureUnitParameterEXT #endif #ifndef GLEE_H_DEFINED_glBindParameterEXT #define GLEE_H_DEFINED_glBindParameterEXT typedef GLuint (APIENTRYP GLEEPFNGLBINDPARAMETEREXTPROC) (GLenum value); GLEE_EXTERN GLEEPFNGLBINDPARAMETEREXTPROC GLeeFuncPtr_glBindParameterEXT; #define glBindParameterEXT GLeeFuncPtr_glBindParameterEXT #endif #ifndef GLEE_H_DEFINED_glIsVariantEnabledEXT #define GLEE_H_DEFINED_glIsVariantEnabledEXT typedef GLboolean (APIENTRYP GLEEPFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap); GLEE_EXTERN GLEEPFNGLISVARIANTENABLEDEXTPROC GLeeFuncPtr_glIsVariantEnabledEXT; #define glIsVariantEnabledEXT GLeeFuncPtr_glIsVariantEnabledEXT #endif #ifndef GLEE_H_DEFINED_glGetVariantBooleanvEXT #define GLEE_H_DEFINED_glGetVariantBooleanvEXT typedef void (APIENTRYP GLEEPFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean * data); GLEE_EXTERN GLEEPFNGLGETVARIANTBOOLEANVEXTPROC GLeeFuncPtr_glGetVariantBooleanvEXT; #define glGetVariantBooleanvEXT GLeeFuncPtr_glGetVariantBooleanvEXT #endif #ifndef GLEE_H_DEFINED_glGetVariantIntegervEXT #define GLEE_H_DEFINED_glGetVariantIntegervEXT typedef void (APIENTRYP GLEEPFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint * data); GLEE_EXTERN GLEEPFNGLGETVARIANTINTEGERVEXTPROC GLeeFuncPtr_glGetVariantIntegervEXT; #define glGetVariantIntegervEXT GLeeFuncPtr_glGetVariantIntegervEXT #endif #ifndef GLEE_H_DEFINED_glGetVariantFloatvEXT #define GLEE_H_DEFINED_glGetVariantFloatvEXT typedef void (APIENTRYP GLEEPFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat * data); GLEE_EXTERN GLEEPFNGLGETVARIANTFLOATVEXTPROC GLeeFuncPtr_glGetVariantFloatvEXT; #define glGetVariantFloatvEXT GLeeFuncPtr_glGetVariantFloatvEXT #endif #ifndef GLEE_H_DEFINED_glGetVariantPointervEXT #define GLEE_H_DEFINED_glGetVariantPointervEXT typedef void (APIENTRYP GLEEPFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, GLvoid* * data); GLEE_EXTERN GLEEPFNGLGETVARIANTPOINTERVEXTPROC GLeeFuncPtr_glGetVariantPointervEXT; #define glGetVariantPointervEXT GLeeFuncPtr_glGetVariantPointervEXT #endif #ifndef GLEE_H_DEFINED_glGetInvariantBooleanvEXT #define GLEE_H_DEFINED_glGetInvariantBooleanvEXT typedef void (APIENTRYP GLEEPFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean * data); GLEE_EXTERN GLEEPFNGLGETINVARIANTBOOLEANVEXTPROC GLeeFuncPtr_glGetInvariantBooleanvEXT; #define glGetInvariantBooleanvEXT GLeeFuncPtr_glGetInvariantBooleanvEXT #endif #ifndef GLEE_H_DEFINED_glGetInvariantIntegervEXT #define GLEE_H_DEFINED_glGetInvariantIntegervEXT typedef void (APIENTRYP GLEEPFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint * data); GLEE_EXTERN GLEEPFNGLGETINVARIANTINTEGERVEXTPROC GLeeFuncPtr_glGetInvariantIntegervEXT; #define glGetInvariantIntegervEXT GLeeFuncPtr_glGetInvariantIntegervEXT #endif #ifndef GLEE_H_DEFINED_glGetInvariantFloatvEXT #define GLEE_H_DEFINED_glGetInvariantFloatvEXT typedef void (APIENTRYP GLEEPFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat * data); GLEE_EXTERN GLEEPFNGLGETINVARIANTFLOATVEXTPROC GLeeFuncPtr_glGetInvariantFloatvEXT; #define glGetInvariantFloatvEXT GLeeFuncPtr_glGetInvariantFloatvEXT #endif #ifndef GLEE_H_DEFINED_glGetLocalConstantBooleanvEXT #define GLEE_H_DEFINED_glGetLocalConstantBooleanvEXT typedef void (APIENTRYP GLEEPFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean * data); GLEE_EXTERN GLEEPFNGLGETLOCALCONSTANTBOOLEANVEXTPROC GLeeFuncPtr_glGetLocalConstantBooleanvEXT; #define glGetLocalConstantBooleanvEXT GLeeFuncPtr_glGetLocalConstantBooleanvEXT #endif #ifndef GLEE_H_DEFINED_glGetLocalConstantIntegervEXT #define GLEE_H_DEFINED_glGetLocalConstantIntegervEXT typedef void (APIENTRYP GLEEPFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint * data); GLEE_EXTERN GLEEPFNGLGETLOCALCONSTANTINTEGERVEXTPROC GLeeFuncPtr_glGetLocalConstantIntegervEXT; #define glGetLocalConstantIntegervEXT GLeeFuncPtr_glGetLocalConstantIntegervEXT #endif #ifndef GLEE_H_DEFINED_glGetLocalConstantFloatvEXT #define GLEE_H_DEFINED_glGetLocalConstantFloatvEXT typedef void (APIENTRYP GLEEPFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat * data); GLEE_EXTERN GLEEPFNGLGETLOCALCONSTANTFLOATVEXTPROC GLeeFuncPtr_glGetLocalConstantFloatvEXT; #define glGetLocalConstantFloatvEXT GLeeFuncPtr_glGetLocalConstantFloatvEXT #endif #endif /* GL_ATI_vertex_streams */ #ifndef GL_ATI_vertex_streams #define GL_ATI_vertex_streams 1 #define __GLEE_GL_ATI_vertex_streams 1 /* Constants */ #define GL_MAX_VERTEX_STREAMS_ATI 0x876B #define GL_VERTEX_STREAM0_ATI 0x876C #define GL_VERTEX_STREAM1_ATI 0x876D #define GL_VERTEX_STREAM2_ATI 0x876E #define GL_VERTEX_STREAM3_ATI 0x876F #define GL_VERTEX_STREAM4_ATI 0x8770 #define GL_VERTEX_STREAM5_ATI 0x8771 #define GL_VERTEX_STREAM6_ATI 0x8772 #define GL_VERTEX_STREAM7_ATI 0x8773 #define GL_VERTEX_SOURCE_ATI 0x8774 #ifndef GLEE_H_DEFINED_glVertexStream1sATI #define GLEE_H_DEFINED_glVertexStream1sATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM1SATIPROC GLeeFuncPtr_glVertexStream1sATI; #define glVertexStream1sATI GLeeFuncPtr_glVertexStream1sATI #endif #ifndef GLEE_H_DEFINED_glVertexStream1svATI #define GLEE_H_DEFINED_glVertexStream1svATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort * coords); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM1SVATIPROC GLeeFuncPtr_glVertexStream1svATI; #define glVertexStream1svATI GLeeFuncPtr_glVertexStream1svATI #endif #ifndef GLEE_H_DEFINED_glVertexStream1iATI #define GLEE_H_DEFINED_glVertexStream1iATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM1IATIPROC) (GLenum stream, GLint x); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM1IATIPROC GLeeFuncPtr_glVertexStream1iATI; #define glVertexStream1iATI GLeeFuncPtr_glVertexStream1iATI #endif #ifndef GLEE_H_DEFINED_glVertexStream1ivATI #define GLEE_H_DEFINED_glVertexStream1ivATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM1IVATIPROC) (GLenum stream, const GLint * coords); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM1IVATIPROC GLeeFuncPtr_glVertexStream1ivATI; #define glVertexStream1ivATI GLeeFuncPtr_glVertexStream1ivATI #endif #ifndef GLEE_H_DEFINED_glVertexStream1fATI #define GLEE_H_DEFINED_glVertexStream1fATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM1FATIPROC) (GLenum stream, GLfloat x); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM1FATIPROC GLeeFuncPtr_glVertexStream1fATI; #define glVertexStream1fATI GLeeFuncPtr_glVertexStream1fATI #endif #ifndef GLEE_H_DEFINED_glVertexStream1fvATI #define GLEE_H_DEFINED_glVertexStream1fvATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM1FVATIPROC) (GLenum stream, const GLfloat * coords); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM1FVATIPROC GLeeFuncPtr_glVertexStream1fvATI; #define glVertexStream1fvATI GLeeFuncPtr_glVertexStream1fvATI #endif #ifndef GLEE_H_DEFINED_glVertexStream1dATI #define GLEE_H_DEFINED_glVertexStream1dATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM1DATIPROC) (GLenum stream, GLdouble x); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM1DATIPROC GLeeFuncPtr_glVertexStream1dATI; #define glVertexStream1dATI GLeeFuncPtr_glVertexStream1dATI #endif #ifndef GLEE_H_DEFINED_glVertexStream1dvATI #define GLEE_H_DEFINED_glVertexStream1dvATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM1DVATIPROC) (GLenum stream, const GLdouble * coords); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM1DVATIPROC GLeeFuncPtr_glVertexStream1dvATI; #define glVertexStream1dvATI GLeeFuncPtr_glVertexStream1dvATI #endif #ifndef GLEE_H_DEFINED_glVertexStream2sATI #define GLEE_H_DEFINED_glVertexStream2sATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM2SATIPROC GLeeFuncPtr_glVertexStream2sATI; #define glVertexStream2sATI GLeeFuncPtr_glVertexStream2sATI #endif #ifndef GLEE_H_DEFINED_glVertexStream2svATI #define GLEE_H_DEFINED_glVertexStream2svATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort * coords); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM2SVATIPROC GLeeFuncPtr_glVertexStream2svATI; #define glVertexStream2svATI GLeeFuncPtr_glVertexStream2svATI #endif #ifndef GLEE_H_DEFINED_glVertexStream2iATI #define GLEE_H_DEFINED_glVertexStream2iATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM2IATIPROC GLeeFuncPtr_glVertexStream2iATI; #define glVertexStream2iATI GLeeFuncPtr_glVertexStream2iATI #endif #ifndef GLEE_H_DEFINED_glVertexStream2ivATI #define GLEE_H_DEFINED_glVertexStream2ivATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint * coords); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM2IVATIPROC GLeeFuncPtr_glVertexStream2ivATI; #define glVertexStream2ivATI GLeeFuncPtr_glVertexStream2ivATI #endif #ifndef GLEE_H_DEFINED_glVertexStream2fATI #define GLEE_H_DEFINED_glVertexStream2fATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM2FATIPROC GLeeFuncPtr_glVertexStream2fATI; #define glVertexStream2fATI GLeeFuncPtr_glVertexStream2fATI #endif #ifndef GLEE_H_DEFINED_glVertexStream2fvATI #define GLEE_H_DEFINED_glVertexStream2fvATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat * coords); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM2FVATIPROC GLeeFuncPtr_glVertexStream2fvATI; #define glVertexStream2fvATI GLeeFuncPtr_glVertexStream2fvATI #endif #ifndef GLEE_H_DEFINED_glVertexStream2dATI #define GLEE_H_DEFINED_glVertexStream2dATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM2DATIPROC GLeeFuncPtr_glVertexStream2dATI; #define glVertexStream2dATI GLeeFuncPtr_glVertexStream2dATI #endif #ifndef GLEE_H_DEFINED_glVertexStream2dvATI #define GLEE_H_DEFINED_glVertexStream2dvATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble * coords); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM2DVATIPROC GLeeFuncPtr_glVertexStream2dvATI; #define glVertexStream2dvATI GLeeFuncPtr_glVertexStream2dvATI #endif #ifndef GLEE_H_DEFINED_glVertexStream3sATI #define GLEE_H_DEFINED_glVertexStream3sATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM3SATIPROC GLeeFuncPtr_glVertexStream3sATI; #define glVertexStream3sATI GLeeFuncPtr_glVertexStream3sATI #endif #ifndef GLEE_H_DEFINED_glVertexStream3svATI #define GLEE_H_DEFINED_glVertexStream3svATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort * coords); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM3SVATIPROC GLeeFuncPtr_glVertexStream3svATI; #define glVertexStream3svATI GLeeFuncPtr_glVertexStream3svATI #endif #ifndef GLEE_H_DEFINED_glVertexStream3iATI #define GLEE_H_DEFINED_glVertexStream3iATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM3IATIPROC GLeeFuncPtr_glVertexStream3iATI; #define glVertexStream3iATI GLeeFuncPtr_glVertexStream3iATI #endif #ifndef GLEE_H_DEFINED_glVertexStream3ivATI #define GLEE_H_DEFINED_glVertexStream3ivATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint * coords); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM3IVATIPROC GLeeFuncPtr_glVertexStream3ivATI; #define glVertexStream3ivATI GLeeFuncPtr_glVertexStream3ivATI #endif #ifndef GLEE_H_DEFINED_glVertexStream3fATI #define GLEE_H_DEFINED_glVertexStream3fATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM3FATIPROC GLeeFuncPtr_glVertexStream3fATI; #define glVertexStream3fATI GLeeFuncPtr_glVertexStream3fATI #endif #ifndef GLEE_H_DEFINED_glVertexStream3fvATI #define GLEE_H_DEFINED_glVertexStream3fvATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat * coords); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM3FVATIPROC GLeeFuncPtr_glVertexStream3fvATI; #define glVertexStream3fvATI GLeeFuncPtr_glVertexStream3fvATI #endif #ifndef GLEE_H_DEFINED_glVertexStream3dATI #define GLEE_H_DEFINED_glVertexStream3dATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM3DATIPROC GLeeFuncPtr_glVertexStream3dATI; #define glVertexStream3dATI GLeeFuncPtr_glVertexStream3dATI #endif #ifndef GLEE_H_DEFINED_glVertexStream3dvATI #define GLEE_H_DEFINED_glVertexStream3dvATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble * coords); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM3DVATIPROC GLeeFuncPtr_glVertexStream3dvATI; #define glVertexStream3dvATI GLeeFuncPtr_glVertexStream3dvATI #endif #ifndef GLEE_H_DEFINED_glVertexStream4sATI #define GLEE_H_DEFINED_glVertexStream4sATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM4SATIPROC GLeeFuncPtr_glVertexStream4sATI; #define glVertexStream4sATI GLeeFuncPtr_glVertexStream4sATI #endif #ifndef GLEE_H_DEFINED_glVertexStream4svATI #define GLEE_H_DEFINED_glVertexStream4svATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort * coords); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM4SVATIPROC GLeeFuncPtr_glVertexStream4svATI; #define glVertexStream4svATI GLeeFuncPtr_glVertexStream4svATI #endif #ifndef GLEE_H_DEFINED_glVertexStream4iATI #define GLEE_H_DEFINED_glVertexStream4iATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM4IATIPROC GLeeFuncPtr_glVertexStream4iATI; #define glVertexStream4iATI GLeeFuncPtr_glVertexStream4iATI #endif #ifndef GLEE_H_DEFINED_glVertexStream4ivATI #define GLEE_H_DEFINED_glVertexStream4ivATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint * coords); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM4IVATIPROC GLeeFuncPtr_glVertexStream4ivATI; #define glVertexStream4ivATI GLeeFuncPtr_glVertexStream4ivATI #endif #ifndef GLEE_H_DEFINED_glVertexStream4fATI #define GLEE_H_DEFINED_glVertexStream4fATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM4FATIPROC GLeeFuncPtr_glVertexStream4fATI; #define glVertexStream4fATI GLeeFuncPtr_glVertexStream4fATI #endif #ifndef GLEE_H_DEFINED_glVertexStream4fvATI #define GLEE_H_DEFINED_glVertexStream4fvATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat * coords); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM4FVATIPROC GLeeFuncPtr_glVertexStream4fvATI; #define glVertexStream4fvATI GLeeFuncPtr_glVertexStream4fvATI #endif #ifndef GLEE_H_DEFINED_glVertexStream4dATI #define GLEE_H_DEFINED_glVertexStream4dATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM4DATIPROC GLeeFuncPtr_glVertexStream4dATI; #define glVertexStream4dATI GLeeFuncPtr_glVertexStream4dATI #endif #ifndef GLEE_H_DEFINED_glVertexStream4dvATI #define GLEE_H_DEFINED_glVertexStream4dvATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble * coords); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM4DVATIPROC GLeeFuncPtr_glVertexStream4dvATI; #define glVertexStream4dvATI GLeeFuncPtr_glVertexStream4dvATI #endif #ifndef GLEE_H_DEFINED_glNormalStream3bATI #define GLEE_H_DEFINED_glNormalStream3bATI typedef void (APIENTRYP GLEEPFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); GLEE_EXTERN GLEEPFNGLNORMALSTREAM3BATIPROC GLeeFuncPtr_glNormalStream3bATI; #define glNormalStream3bATI GLeeFuncPtr_glNormalStream3bATI #endif #ifndef GLEE_H_DEFINED_glNormalStream3bvATI #define GLEE_H_DEFINED_glNormalStream3bvATI typedef void (APIENTRYP GLEEPFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte * coords); GLEE_EXTERN GLEEPFNGLNORMALSTREAM3BVATIPROC GLeeFuncPtr_glNormalStream3bvATI; #define glNormalStream3bvATI GLeeFuncPtr_glNormalStream3bvATI #endif #ifndef GLEE_H_DEFINED_glNormalStream3sATI #define GLEE_H_DEFINED_glNormalStream3sATI typedef void (APIENTRYP GLEEPFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort nx, GLshort ny, GLshort nz); GLEE_EXTERN GLEEPFNGLNORMALSTREAM3SATIPROC GLeeFuncPtr_glNormalStream3sATI; #define glNormalStream3sATI GLeeFuncPtr_glNormalStream3sATI #endif #ifndef GLEE_H_DEFINED_glNormalStream3svATI #define GLEE_H_DEFINED_glNormalStream3svATI typedef void (APIENTRYP GLEEPFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort * coords); GLEE_EXTERN GLEEPFNGLNORMALSTREAM3SVATIPROC GLeeFuncPtr_glNormalStream3svATI; #define glNormalStream3svATI GLeeFuncPtr_glNormalStream3svATI #endif #ifndef GLEE_H_DEFINED_glNormalStream3iATI #define GLEE_H_DEFINED_glNormalStream3iATI typedef void (APIENTRYP GLEEPFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint nx, GLint ny, GLint nz); GLEE_EXTERN GLEEPFNGLNORMALSTREAM3IATIPROC GLeeFuncPtr_glNormalStream3iATI; #define glNormalStream3iATI GLeeFuncPtr_glNormalStream3iATI #endif #ifndef GLEE_H_DEFINED_glNormalStream3ivATI #define GLEE_H_DEFINED_glNormalStream3ivATI typedef void (APIENTRYP GLEEPFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint * coords); GLEE_EXTERN GLEEPFNGLNORMALSTREAM3IVATIPROC GLeeFuncPtr_glNormalStream3ivATI; #define glNormalStream3ivATI GLeeFuncPtr_glNormalStream3ivATI #endif #ifndef GLEE_H_DEFINED_glNormalStream3fATI #define GLEE_H_DEFINED_glNormalStream3fATI typedef void (APIENTRYP GLEEPFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); GLEE_EXTERN GLEEPFNGLNORMALSTREAM3FATIPROC GLeeFuncPtr_glNormalStream3fATI; #define glNormalStream3fATI GLeeFuncPtr_glNormalStream3fATI #endif #ifndef GLEE_H_DEFINED_glNormalStream3fvATI #define GLEE_H_DEFINED_glNormalStream3fvATI typedef void (APIENTRYP GLEEPFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat * coords); GLEE_EXTERN GLEEPFNGLNORMALSTREAM3FVATIPROC GLeeFuncPtr_glNormalStream3fvATI; #define glNormalStream3fvATI GLeeFuncPtr_glNormalStream3fvATI #endif #ifndef GLEE_H_DEFINED_glNormalStream3dATI #define GLEE_H_DEFINED_glNormalStream3dATI typedef void (APIENTRYP GLEEPFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); GLEE_EXTERN GLEEPFNGLNORMALSTREAM3DATIPROC GLeeFuncPtr_glNormalStream3dATI; #define glNormalStream3dATI GLeeFuncPtr_glNormalStream3dATI #endif #ifndef GLEE_H_DEFINED_glNormalStream3dvATI #define GLEE_H_DEFINED_glNormalStream3dvATI typedef void (APIENTRYP GLEEPFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble * coords); GLEE_EXTERN GLEEPFNGLNORMALSTREAM3DVATIPROC GLeeFuncPtr_glNormalStream3dvATI; #define glNormalStream3dvATI GLeeFuncPtr_glNormalStream3dvATI #endif #ifndef GLEE_H_DEFINED_glClientActiveVertexStreamATI #define GLEE_H_DEFINED_glClientActiveVertexStreamATI typedef void (APIENTRYP GLEEPFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream); GLEE_EXTERN GLEEPFNGLCLIENTACTIVEVERTEXSTREAMATIPROC GLeeFuncPtr_glClientActiveVertexStreamATI; #define glClientActiveVertexStreamATI GLeeFuncPtr_glClientActiveVertexStreamATI #endif #ifndef GLEE_H_DEFINED_glVertexBlendEnviATI #define GLEE_H_DEFINED_glVertexBlendEnviATI typedef void (APIENTRYP GLEEPFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLVERTEXBLENDENVIATIPROC GLeeFuncPtr_glVertexBlendEnviATI; #define glVertexBlendEnviATI GLeeFuncPtr_glVertexBlendEnviATI #endif #ifndef GLEE_H_DEFINED_glVertexBlendEnvfATI #define GLEE_H_DEFINED_glVertexBlendEnvfATI typedef void (APIENTRYP GLEEPFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLVERTEXBLENDENVFATIPROC GLeeFuncPtr_glVertexBlendEnvfATI; #define glVertexBlendEnvfATI GLeeFuncPtr_glVertexBlendEnvfATI #endif #endif /* GL_ATI_element_array */ #ifndef GL_ATI_element_array #define GL_ATI_element_array 1 #define __GLEE_GL_ATI_element_array 1 /* Constants */ #define GL_ELEMENT_ARRAY_ATI 0x8768 #define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 #define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A #ifndef GLEE_H_DEFINED_glElementPointerATI #define GLEE_H_DEFINED_glElementPointerATI typedef void (APIENTRYP GLEEPFNGLELEMENTPOINTERATIPROC) (GLenum type, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLELEMENTPOINTERATIPROC GLeeFuncPtr_glElementPointerATI; #define glElementPointerATI GLeeFuncPtr_glElementPointerATI #endif #ifndef GLEE_H_DEFINED_glDrawElementArrayATI #define GLEE_H_DEFINED_glDrawElementArrayATI typedef void (APIENTRYP GLEEPFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count); GLEE_EXTERN GLEEPFNGLDRAWELEMENTARRAYATIPROC GLeeFuncPtr_glDrawElementArrayATI; #define glDrawElementArrayATI GLeeFuncPtr_glDrawElementArrayATI #endif #ifndef GLEE_H_DEFINED_glDrawRangeElementArrayATI #define GLEE_H_DEFINED_glDrawRangeElementArrayATI typedef void (APIENTRYP GLEEPFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count); GLEE_EXTERN GLEEPFNGLDRAWRANGEELEMENTARRAYATIPROC GLeeFuncPtr_glDrawRangeElementArrayATI; #define glDrawRangeElementArrayATI GLeeFuncPtr_glDrawRangeElementArrayATI #endif #endif /* GL_SUN_mesh_array */ #ifndef GL_SUN_mesh_array #define GL_SUN_mesh_array 1 #define __GLEE_GL_SUN_mesh_array 1 /* Constants */ #define GL_QUAD_MESH_SUN 0x8614 #define GL_TRIANGLE_MESH_SUN 0x8615 #ifndef GLEE_H_DEFINED_glDrawMeshArraysSUN #define GLEE_H_DEFINED_glDrawMeshArraysSUN typedef void (APIENTRYP GLEEPFNGLDRAWMESHARRAYSSUNPROC) (GLenum mode, GLint first, GLsizei count, GLsizei width); GLEE_EXTERN GLEEPFNGLDRAWMESHARRAYSSUNPROC GLeeFuncPtr_glDrawMeshArraysSUN; #define glDrawMeshArraysSUN GLeeFuncPtr_glDrawMeshArraysSUN #endif #endif /* GL_SUN_slice_accum */ #ifndef GL_SUN_slice_accum #define GL_SUN_slice_accum 1 #define __GLEE_GL_SUN_slice_accum 1 /* Constants */ #define GL_SLICE_ACCUM_SUN 0x85CC #endif /* GL_NV_multisample_filter_hint */ #ifndef GL_NV_multisample_filter_hint #define GL_NV_multisample_filter_hint 1 #define __GLEE_GL_NV_multisample_filter_hint 1 /* Constants */ #define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 #endif /* GL_NV_depth_clamp */ #ifndef GL_NV_depth_clamp #define GL_NV_depth_clamp 1 #define __GLEE_GL_NV_depth_clamp 1 /* Constants */ #define GL_DEPTH_CLAMP_NV 0x864F #endif /* GL_NV_occlusion_query */ #ifndef GL_NV_occlusion_query #define GL_NV_occlusion_query 1 #define __GLEE_GL_NV_occlusion_query 1 /* Constants */ #define GL_PIXEL_COUNTER_BITS_NV 0x8864 #define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865 #define GL_PIXEL_COUNT_NV 0x8866 #define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867 #ifndef GLEE_H_DEFINED_glGenOcclusionQueriesNV #define GLEE_H_DEFINED_glGenOcclusionQueriesNV typedef void (APIENTRYP GLEEPFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint * ids); GLEE_EXTERN GLEEPFNGLGENOCCLUSIONQUERIESNVPROC GLeeFuncPtr_glGenOcclusionQueriesNV; #define glGenOcclusionQueriesNV GLeeFuncPtr_glGenOcclusionQueriesNV #endif #ifndef GLEE_H_DEFINED_glDeleteOcclusionQueriesNV #define GLEE_H_DEFINED_glDeleteOcclusionQueriesNV typedef void (APIENTRYP GLEEPFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint * ids); GLEE_EXTERN GLEEPFNGLDELETEOCCLUSIONQUERIESNVPROC GLeeFuncPtr_glDeleteOcclusionQueriesNV; #define glDeleteOcclusionQueriesNV GLeeFuncPtr_glDeleteOcclusionQueriesNV #endif #ifndef GLEE_H_DEFINED_glIsOcclusionQueryNV #define GLEE_H_DEFINED_glIsOcclusionQueryNV typedef GLboolean (APIENTRYP GLEEPFNGLISOCCLUSIONQUERYNVPROC) (GLuint id); GLEE_EXTERN GLEEPFNGLISOCCLUSIONQUERYNVPROC GLeeFuncPtr_glIsOcclusionQueryNV; #define glIsOcclusionQueryNV GLeeFuncPtr_glIsOcclusionQueryNV #endif #ifndef GLEE_H_DEFINED_glBeginOcclusionQueryNV #define GLEE_H_DEFINED_glBeginOcclusionQueryNV typedef void (APIENTRYP GLEEPFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id); GLEE_EXTERN GLEEPFNGLBEGINOCCLUSIONQUERYNVPROC GLeeFuncPtr_glBeginOcclusionQueryNV; #define glBeginOcclusionQueryNV GLeeFuncPtr_glBeginOcclusionQueryNV #endif #ifndef GLEE_H_DEFINED_glEndOcclusionQueryNV #define GLEE_H_DEFINED_glEndOcclusionQueryNV typedef void (APIENTRYP GLEEPFNGLENDOCCLUSIONQUERYNVPROC) (); GLEE_EXTERN GLEEPFNGLENDOCCLUSIONQUERYNVPROC GLeeFuncPtr_glEndOcclusionQueryNV; #define glEndOcclusionQueryNV GLeeFuncPtr_glEndOcclusionQueryNV #endif #ifndef GLEE_H_DEFINED_glGetOcclusionQueryivNV #define GLEE_H_DEFINED_glGetOcclusionQueryivNV typedef void (APIENTRYP GLEEPFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETOCCLUSIONQUERYIVNVPROC GLeeFuncPtr_glGetOcclusionQueryivNV; #define glGetOcclusionQueryivNV GLeeFuncPtr_glGetOcclusionQueryivNV #endif #ifndef GLEE_H_DEFINED_glGetOcclusionQueryuivNV #define GLEE_H_DEFINED_glGetOcclusionQueryuivNV typedef void (APIENTRYP GLEEPFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint * params); GLEE_EXTERN GLEEPFNGLGETOCCLUSIONQUERYUIVNVPROC GLeeFuncPtr_glGetOcclusionQueryuivNV; #define glGetOcclusionQueryuivNV GLeeFuncPtr_glGetOcclusionQueryuivNV #endif #endif /* GL_NV_point_sprite */ #ifndef GL_NV_point_sprite #define GL_NV_point_sprite 1 #define __GLEE_GL_NV_point_sprite 1 /* Constants */ #define GL_POINT_SPRITE_NV 0x8861 #define GL_COORD_REPLACE_NV 0x8862 #define GL_POINT_SPRITE_R_MODE_NV 0x8863 #ifndef GLEE_H_DEFINED_glPointParameteriNV #define GLEE_H_DEFINED_glPointParameteriNV typedef void (APIENTRYP GLEEPFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLPOINTPARAMETERINVPROC GLeeFuncPtr_glPointParameteriNV; #define glPointParameteriNV GLeeFuncPtr_glPointParameteriNV #endif #ifndef GLEE_H_DEFINED_glPointParameterivNV #define GLEE_H_DEFINED_glPointParameterivNV typedef void (APIENTRYP GLEEPFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLPOINTPARAMETERIVNVPROC GLeeFuncPtr_glPointParameterivNV; #define glPointParameterivNV GLeeFuncPtr_glPointParameterivNV #endif #endif /* GL_NV_texture_shader3 */ #ifndef GL_NV_texture_shader3 #define GL_NV_texture_shader3 1 #define __GLEE_GL_NV_texture_shader3 1 /* Constants */ #define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850 #define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851 #define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852 #define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853 #define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854 #define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855 #define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856 #define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857 #define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858 #define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859 #define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A #define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B #define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C #define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D #define GL_HILO8_NV 0x885E #define GL_SIGNED_HILO8_NV 0x885F #define GL_FORCE_BLUE_TO_ONE_NV 0x8860 #endif /* GL_NV_vertex_program1_1 */ #ifndef GL_NV_vertex_program1_1 #define GL_NV_vertex_program1_1 1 #define __GLEE_GL_NV_vertex_program1_1 1 /* Constants */ #endif /* GL_EXT_shadow_funcs */ #ifndef GL_EXT_shadow_funcs #define GL_EXT_shadow_funcs 1 #define __GLEE_GL_EXT_shadow_funcs 1 /* Constants */ #endif /* GL_EXT_stencil_two_side */ #ifndef GL_EXT_stencil_two_side #define GL_EXT_stencil_two_side 1 #define __GLEE_GL_EXT_stencil_two_side 1 /* Constants */ #define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 #define GL_ACTIVE_STENCIL_FACE_EXT 0x8911 #ifndef GLEE_H_DEFINED_glActiveStencilFaceEXT #define GLEE_H_DEFINED_glActiveStencilFaceEXT typedef void (APIENTRYP GLEEPFNGLACTIVESTENCILFACEEXTPROC) (GLenum face); GLEE_EXTERN GLEEPFNGLACTIVESTENCILFACEEXTPROC GLeeFuncPtr_glActiveStencilFaceEXT; #define glActiveStencilFaceEXT GLeeFuncPtr_glActiveStencilFaceEXT #endif #endif /* GL_ATI_text_fragment_shader */ #ifndef GL_ATI_text_fragment_shader #define GL_ATI_text_fragment_shader 1 #define __GLEE_GL_ATI_text_fragment_shader 1 /* Constants */ #define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200 #endif /* GL_APPLE_client_storage */ #ifndef GL_APPLE_client_storage #define GL_APPLE_client_storage 1 #define __GLEE_GL_APPLE_client_storage 1 /* Constants */ #define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2 #endif /* GL_APPLE_element_array */ #ifndef GL_APPLE_element_array #define GL_APPLE_element_array 1 #define __GLEE_GL_APPLE_element_array 1 /* Constants */ #define GL_ELEMENT_ARRAY_APPLE 0x8A0C #define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8A0D #define GL_ELEMENT_ARRAY_POINTER_APPLE 0x8A0E #ifndef GLEE_H_DEFINED_glElementPointerAPPLE #define GLEE_H_DEFINED_glElementPointerAPPLE typedef void (APIENTRYP GLEEPFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLELEMENTPOINTERAPPLEPROC GLeeFuncPtr_glElementPointerAPPLE; #define glElementPointerAPPLE GLeeFuncPtr_glElementPointerAPPLE #endif #ifndef GLEE_H_DEFINED_glDrawElementArrayAPPLE #define GLEE_H_DEFINED_glDrawElementArrayAPPLE typedef void (APIENTRYP GLEEPFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count); GLEE_EXTERN GLEEPFNGLDRAWELEMENTARRAYAPPLEPROC GLeeFuncPtr_glDrawElementArrayAPPLE; #define glDrawElementArrayAPPLE GLeeFuncPtr_glDrawElementArrayAPPLE #endif #ifndef GLEE_H_DEFINED_glDrawRangeElementArrayAPPLE #define GLEE_H_DEFINED_glDrawRangeElementArrayAPPLE typedef void (APIENTRYP GLEEPFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); GLEE_EXTERN GLEEPFNGLDRAWRANGEELEMENTARRAYAPPLEPROC GLeeFuncPtr_glDrawRangeElementArrayAPPLE; #define glDrawRangeElementArrayAPPLE GLeeFuncPtr_glDrawRangeElementArrayAPPLE #endif #ifndef GLEE_H_DEFINED_glMultiDrawElementArrayAPPLE #define GLEE_H_DEFINED_glMultiDrawElementArrayAPPLE typedef void (APIENTRYP GLEEPFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint * first, const GLsizei * count, GLsizei primcount); GLEE_EXTERN GLEEPFNGLMULTIDRAWELEMENTARRAYAPPLEPROC GLeeFuncPtr_glMultiDrawElementArrayAPPLE; #define glMultiDrawElementArrayAPPLE GLeeFuncPtr_glMultiDrawElementArrayAPPLE #endif #ifndef GLEE_H_DEFINED_glMultiDrawRangeElementArrayAPPLE #define GLEE_H_DEFINED_glMultiDrawRangeElementArrayAPPLE typedef void (APIENTRYP GLEEPFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint * first, const GLsizei * count, GLsizei primcount); GLEE_EXTERN GLEEPFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC GLeeFuncPtr_glMultiDrawRangeElementArrayAPPLE; #define glMultiDrawRangeElementArrayAPPLE GLeeFuncPtr_glMultiDrawRangeElementArrayAPPLE #endif #endif /* GL_APPLE_fence */ #ifndef GL_APPLE_fence #define GL_APPLE_fence 1 #define __GLEE_GL_APPLE_fence 1 /* Constants */ #define GL_DRAW_PIXELS_APPLE 0x8A0A #define GL_FENCE_APPLE 0x8A0B #ifndef GLEE_H_DEFINED_glGenFencesAPPLE #define GLEE_H_DEFINED_glGenFencesAPPLE typedef void (APIENTRYP GLEEPFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint * fences); GLEE_EXTERN GLEEPFNGLGENFENCESAPPLEPROC GLeeFuncPtr_glGenFencesAPPLE; #define glGenFencesAPPLE GLeeFuncPtr_glGenFencesAPPLE #endif #ifndef GLEE_H_DEFINED_glDeleteFencesAPPLE #define GLEE_H_DEFINED_glDeleteFencesAPPLE typedef void (APIENTRYP GLEEPFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint * fences); GLEE_EXTERN GLEEPFNGLDELETEFENCESAPPLEPROC GLeeFuncPtr_glDeleteFencesAPPLE; #define glDeleteFencesAPPLE GLeeFuncPtr_glDeleteFencesAPPLE #endif #ifndef GLEE_H_DEFINED_glSetFenceAPPLE #define GLEE_H_DEFINED_glSetFenceAPPLE typedef void (APIENTRYP GLEEPFNGLSETFENCEAPPLEPROC) (GLuint fence); GLEE_EXTERN GLEEPFNGLSETFENCEAPPLEPROC GLeeFuncPtr_glSetFenceAPPLE; #define glSetFenceAPPLE GLeeFuncPtr_glSetFenceAPPLE #endif #ifndef GLEE_H_DEFINED_glIsFenceAPPLE #define GLEE_H_DEFINED_glIsFenceAPPLE typedef GLboolean (APIENTRYP GLEEPFNGLISFENCEAPPLEPROC) (GLuint fence); GLEE_EXTERN GLEEPFNGLISFENCEAPPLEPROC GLeeFuncPtr_glIsFenceAPPLE; #define glIsFenceAPPLE GLeeFuncPtr_glIsFenceAPPLE #endif #ifndef GLEE_H_DEFINED_glTestFenceAPPLE #define GLEE_H_DEFINED_glTestFenceAPPLE typedef GLboolean (APIENTRYP GLEEPFNGLTESTFENCEAPPLEPROC) (GLuint fence); GLEE_EXTERN GLEEPFNGLTESTFENCEAPPLEPROC GLeeFuncPtr_glTestFenceAPPLE; #define glTestFenceAPPLE GLeeFuncPtr_glTestFenceAPPLE #endif #ifndef GLEE_H_DEFINED_glFinishFenceAPPLE #define GLEE_H_DEFINED_glFinishFenceAPPLE typedef void (APIENTRYP GLEEPFNGLFINISHFENCEAPPLEPROC) (GLuint fence); GLEE_EXTERN GLEEPFNGLFINISHFENCEAPPLEPROC GLeeFuncPtr_glFinishFenceAPPLE; #define glFinishFenceAPPLE GLeeFuncPtr_glFinishFenceAPPLE #endif #ifndef GLEE_H_DEFINED_glTestObjectAPPLE #define GLEE_H_DEFINED_glTestObjectAPPLE typedef GLboolean (APIENTRYP GLEEPFNGLTESTOBJECTAPPLEPROC) (GLenum object, GLuint name); GLEE_EXTERN GLEEPFNGLTESTOBJECTAPPLEPROC GLeeFuncPtr_glTestObjectAPPLE; #define glTestObjectAPPLE GLeeFuncPtr_glTestObjectAPPLE #endif #ifndef GLEE_H_DEFINED_glFinishObjectAPPLE #define GLEE_H_DEFINED_glFinishObjectAPPLE typedef void (APIENTRYP GLEEPFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name); GLEE_EXTERN GLEEPFNGLFINISHOBJECTAPPLEPROC GLeeFuncPtr_glFinishObjectAPPLE; #define glFinishObjectAPPLE GLeeFuncPtr_glFinishObjectAPPLE #endif #endif /* GL_APPLE_vertex_array_object */ #ifndef GL_APPLE_vertex_array_object #define GL_APPLE_vertex_array_object 1 #define __GLEE_GL_APPLE_vertex_array_object 1 /* Constants */ #define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5 #ifndef GLEE_H_DEFINED_glBindVertexArrayAPPLE #define GLEE_H_DEFINED_glBindVertexArrayAPPLE typedef void (APIENTRYP GLEEPFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array); GLEE_EXTERN GLEEPFNGLBINDVERTEXARRAYAPPLEPROC GLeeFuncPtr_glBindVertexArrayAPPLE; #define glBindVertexArrayAPPLE GLeeFuncPtr_glBindVertexArrayAPPLE #endif #ifndef GLEE_H_DEFINED_glDeleteVertexArraysAPPLE #define GLEE_H_DEFINED_glDeleteVertexArraysAPPLE typedef void (APIENTRYP GLEEPFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint * arrays); GLEE_EXTERN GLEEPFNGLDELETEVERTEXARRAYSAPPLEPROC GLeeFuncPtr_glDeleteVertexArraysAPPLE; #define glDeleteVertexArraysAPPLE GLeeFuncPtr_glDeleteVertexArraysAPPLE #endif #ifndef GLEE_H_DEFINED_glGenVertexArraysAPPLE #define GLEE_H_DEFINED_glGenVertexArraysAPPLE typedef void (APIENTRYP GLEEPFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, GLuint * arrays); GLEE_EXTERN GLEEPFNGLGENVERTEXARRAYSAPPLEPROC GLeeFuncPtr_glGenVertexArraysAPPLE; #define glGenVertexArraysAPPLE GLeeFuncPtr_glGenVertexArraysAPPLE #endif #ifndef GLEE_H_DEFINED_glIsVertexArrayAPPLE #define GLEE_H_DEFINED_glIsVertexArrayAPPLE typedef GLboolean (APIENTRYP GLEEPFNGLISVERTEXARRAYAPPLEPROC) (GLuint array); GLEE_EXTERN GLEEPFNGLISVERTEXARRAYAPPLEPROC GLeeFuncPtr_glIsVertexArrayAPPLE; #define glIsVertexArrayAPPLE GLeeFuncPtr_glIsVertexArrayAPPLE #endif #endif /* GL_APPLE_vertex_array_range */ #ifndef GL_APPLE_vertex_array_range #define GL_APPLE_vertex_array_range 1 #define __GLEE_GL_APPLE_vertex_array_range 1 /* Constants */ #define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D #define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E #define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F #define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 #define GL_STORAGE_CLIENT_APPLE 0x85B4 #define GL_STORAGE_CACHED_APPLE 0x85BE #define GL_STORAGE_SHARED_APPLE 0x85BF #ifndef GLEE_H_DEFINED_glVertexArrayRangeAPPLE #define GLEE_H_DEFINED_glVertexArrayRangeAPPLE typedef void (APIENTRYP GLEEPFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid * pointer); GLEE_EXTERN GLEEPFNGLVERTEXARRAYRANGEAPPLEPROC GLeeFuncPtr_glVertexArrayRangeAPPLE; #define glVertexArrayRangeAPPLE GLeeFuncPtr_glVertexArrayRangeAPPLE #endif #ifndef GLEE_H_DEFINED_glFlushVertexArrayRangeAPPLE #define GLEE_H_DEFINED_glFlushVertexArrayRangeAPPLE typedef void (APIENTRYP GLEEPFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid * pointer); GLEE_EXTERN GLEEPFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC GLeeFuncPtr_glFlushVertexArrayRangeAPPLE; #define glFlushVertexArrayRangeAPPLE GLeeFuncPtr_glFlushVertexArrayRangeAPPLE #endif #ifndef GLEE_H_DEFINED_glVertexArrayParameteriAPPLE #define GLEE_H_DEFINED_glVertexArrayParameteriAPPLE typedef void (APIENTRYP GLEEPFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLVERTEXARRAYPARAMETERIAPPLEPROC GLeeFuncPtr_glVertexArrayParameteriAPPLE; #define glVertexArrayParameteriAPPLE GLeeFuncPtr_glVertexArrayParameteriAPPLE #endif #endif /* GL_APPLE_ycbcr_422 */ #ifndef GL_APPLE_ycbcr_422 #define GL_APPLE_ycbcr_422 1 #define __GLEE_GL_APPLE_ycbcr_422 1 /* Constants */ #define GL_YCBCR_422_APPLE 0x85B9 #define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA #define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB #endif /* GL_S3_s3tc */ #ifndef GL_S3_s3tc #define GL_S3_s3tc 1 #define __GLEE_GL_S3_s3tc 1 /* Constants */ #define GL_RGB_S3TC 0x83A0 #define GL_RGB4_S3TC 0x83A1 #define GL_RGBA_S3TC 0x83A2 #define GL_RGBA4_S3TC 0x83A3 #define GL_RGBA_DXT5_S3TC 0x83A4 #define GL_RGBA4_DXT5_S3TC 0x83A5 #endif /* GL_ATI_draw_buffers */ #ifndef GL_ATI_draw_buffers #define GL_ATI_draw_buffers 1 #define __GLEE_GL_ATI_draw_buffers 1 /* Constants */ #define GL_MAX_DRAW_BUFFERS_ATI 0x8824 #define GL_DRAW_BUFFER0_ATI 0x8825 #define GL_DRAW_BUFFER1_ATI 0x8826 #define GL_DRAW_BUFFER2_ATI 0x8827 #define GL_DRAW_BUFFER3_ATI 0x8828 #define GL_DRAW_BUFFER4_ATI 0x8829 #define GL_DRAW_BUFFER5_ATI 0x882A #define GL_DRAW_BUFFER6_ATI 0x882B #define GL_DRAW_BUFFER7_ATI 0x882C #define GL_DRAW_BUFFER8_ATI 0x882D #define GL_DRAW_BUFFER9_ATI 0x882E #define GL_DRAW_BUFFER10_ATI 0x882F #define GL_DRAW_BUFFER11_ATI 0x8830 #define GL_DRAW_BUFFER12_ATI 0x8831 #define GL_DRAW_BUFFER13_ATI 0x8832 #define GL_DRAW_BUFFER14_ATI 0x8833 #define GL_DRAW_BUFFER15_ATI 0x8834 #ifndef GLEE_H_DEFINED_glDrawBuffersATI #define GLEE_H_DEFINED_glDrawBuffersATI typedef void (APIENTRYP GLEEPFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum * bufs); GLEE_EXTERN GLEEPFNGLDRAWBUFFERSATIPROC GLeeFuncPtr_glDrawBuffersATI; #define glDrawBuffersATI GLeeFuncPtr_glDrawBuffersATI #endif #endif /* GL_ATI_pixel_format_float */ #ifndef GL_ATI_pixel_format_float #define GL_ATI_pixel_format_float 1 #define __GLEE_GL_ATI_pixel_format_float 1 /* Constants */ #define GL_RGBA_FLOAT_MODE_ATI 0x8820 #define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 #endif /* GL_ATI_texture_env_combine3 */ #ifndef GL_ATI_texture_env_combine3 #define GL_ATI_texture_env_combine3 1 #define __GLEE_GL_ATI_texture_env_combine3 1 /* Constants */ #define GL_MODULATE_ADD_ATI 0x8744 #define GL_MODULATE_SIGNED_ADD_ATI 0x8745 #define GL_MODULATE_SUBTRACT_ATI 0x8746 #endif /* GL_ATI_texture_float */ #ifndef GL_ATI_texture_float #define GL_ATI_texture_float 1 #define __GLEE_GL_ATI_texture_float 1 /* Constants */ #define GL_RGBA_FLOAT32_ATI 0x8814 #define GL_RGB_FLOAT32_ATI 0x8815 #define GL_ALPHA_FLOAT32_ATI 0x8816 #define GL_INTENSITY_FLOAT32_ATI 0x8817 #define GL_LUMINANCE_FLOAT32_ATI 0x8818 #define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819 #define GL_RGBA_FLOAT16_ATI 0x881A #define GL_RGB_FLOAT16_ATI 0x881B #define GL_ALPHA_FLOAT16_ATI 0x881C #define GL_INTENSITY_FLOAT16_ATI 0x881D #define GL_LUMINANCE_FLOAT16_ATI 0x881E #define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F #endif /* GL_NV_float_buffer */ #ifndef GL_NV_float_buffer #define GL_NV_float_buffer 1 #define __GLEE_GL_NV_float_buffer 1 /* Constants */ #define GL_FLOAT_R_NV 0x8880 #define GL_FLOAT_RG_NV 0x8881 #define GL_FLOAT_RGB_NV 0x8882 #define GL_FLOAT_RGBA_NV 0x8883 #define GL_FLOAT_R16_NV 0x8884 #define GL_FLOAT_R32_NV 0x8885 #define GL_FLOAT_RG16_NV 0x8886 #define GL_FLOAT_RG32_NV 0x8887 #define GL_FLOAT_RGB16_NV 0x8888 #define GL_FLOAT_RGB32_NV 0x8889 #define GL_FLOAT_RGBA16_NV 0x888A #define GL_FLOAT_RGBA32_NV 0x888B #define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C #define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D #define GL_FLOAT_RGBA_MODE_NV 0x888E #endif /* GL_NV_fragment_program */ #ifndef GL_NV_fragment_program #define GL_NV_fragment_program 1 #define __GLEE_GL_NV_fragment_program 1 /* Constants */ #define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868 #define GL_FRAGMENT_PROGRAM_NV 0x8870 #define GL_MAX_TEXTURE_COORDS_NV 0x8871 #define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872 #define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873 #define GL_PROGRAM_ERROR_STRING_NV 0x8874 #ifndef GLEE_H_DEFINED_glProgramNamedParameter4fNV #define GLEE_H_DEFINED_glProgramNamedParameter4fNV typedef void (APIENTRYP GLEEPFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte * name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLEE_EXTERN GLEEPFNGLPROGRAMNAMEDPARAMETER4FNVPROC GLeeFuncPtr_glProgramNamedParameter4fNV; #define glProgramNamedParameter4fNV GLeeFuncPtr_glProgramNamedParameter4fNV #endif #ifndef GLEE_H_DEFINED_glProgramNamedParameter4fvNV #define GLEE_H_DEFINED_glProgramNamedParameter4fvNV typedef void (APIENTRYP GLEEPFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsizei len, const GLubyte * name, const GLfloat * v); GLEE_EXTERN GLEEPFNGLPROGRAMNAMEDPARAMETER4FVNVPROC GLeeFuncPtr_glProgramNamedParameter4fvNV; #define glProgramNamedParameter4fvNV GLeeFuncPtr_glProgramNamedParameter4fvNV #endif #ifndef GLEE_H_DEFINED_glProgramNamedParameter4dNV #define GLEE_H_DEFINED_glProgramNamedParameter4dNV typedef void (APIENTRYP GLEEPFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte * name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLEE_EXTERN GLEEPFNGLPROGRAMNAMEDPARAMETER4DNVPROC GLeeFuncPtr_glProgramNamedParameter4dNV; #define glProgramNamedParameter4dNV GLeeFuncPtr_glProgramNamedParameter4dNV #endif #ifndef GLEE_H_DEFINED_glProgramNamedParameter4dvNV #define GLEE_H_DEFINED_glProgramNamedParameter4dvNV typedef void (APIENTRYP GLEEPFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) (GLuint id, GLsizei len, const GLubyte * name, const GLdouble * v); GLEE_EXTERN GLEEPFNGLPROGRAMNAMEDPARAMETER4DVNVPROC GLeeFuncPtr_glProgramNamedParameter4dvNV; #define glProgramNamedParameter4dvNV GLeeFuncPtr_glProgramNamedParameter4dvNV #endif #ifndef GLEE_H_DEFINED_glGetProgramNamedParameterfvNV #define GLEE_H_DEFINED_glGetProgramNamedParameterfvNV typedef void (APIENTRYP GLEEPFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) (GLuint id, GLsizei len, const GLubyte * name, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC GLeeFuncPtr_glGetProgramNamedParameterfvNV; #define glGetProgramNamedParameterfvNV GLeeFuncPtr_glGetProgramNamedParameterfvNV #endif #ifndef GLEE_H_DEFINED_glGetProgramNamedParameterdvNV #define GLEE_H_DEFINED_glGetProgramNamedParameterdvNV typedef void (APIENTRYP GLEEPFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsizei len, const GLubyte * name, GLdouble * params); GLEE_EXTERN GLEEPFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC GLeeFuncPtr_glGetProgramNamedParameterdvNV; #define glGetProgramNamedParameterdvNV GLeeFuncPtr_glGetProgramNamedParameterdvNV #endif #endif /* GL_NV_half_float */ #ifndef GL_NV_half_float #define GL_NV_half_float 1 #define __GLEE_GL_NV_half_float 1 /* Constants */ #define GL_HALF_FLOAT_NV 0x140B #ifndef GLEE_H_DEFINED_glVertex2hNV #define GLEE_H_DEFINED_glVertex2hNV typedef void (APIENTRYP GLEEPFNGLVERTEX2HNVPROC) (GLhalfNV x, GLhalfNV y); GLEE_EXTERN GLEEPFNGLVERTEX2HNVPROC GLeeFuncPtr_glVertex2hNV; #define glVertex2hNV GLeeFuncPtr_glVertex2hNV #endif #ifndef GLEE_H_DEFINED_glVertex2hvNV #define GLEE_H_DEFINED_glVertex2hvNV typedef void (APIENTRYP GLEEPFNGLVERTEX2HVNVPROC) (const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLVERTEX2HVNVPROC GLeeFuncPtr_glVertex2hvNV; #define glVertex2hvNV GLeeFuncPtr_glVertex2hvNV #endif #ifndef GLEE_H_DEFINED_glVertex3hNV #define GLEE_H_DEFINED_glVertex3hNV typedef void (APIENTRYP GLEEPFNGLVERTEX3HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z); GLEE_EXTERN GLEEPFNGLVERTEX3HNVPROC GLeeFuncPtr_glVertex3hNV; #define glVertex3hNV GLeeFuncPtr_glVertex3hNV #endif #ifndef GLEE_H_DEFINED_glVertex3hvNV #define GLEE_H_DEFINED_glVertex3hvNV typedef void (APIENTRYP GLEEPFNGLVERTEX3HVNVPROC) (const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLVERTEX3HVNVPROC GLeeFuncPtr_glVertex3hvNV; #define glVertex3hvNV GLeeFuncPtr_glVertex3hvNV #endif #ifndef GLEE_H_DEFINED_glVertex4hNV #define GLEE_H_DEFINED_glVertex4hNV typedef void (APIENTRYP GLEEPFNGLVERTEX4HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); GLEE_EXTERN GLEEPFNGLVERTEX4HNVPROC GLeeFuncPtr_glVertex4hNV; #define glVertex4hNV GLeeFuncPtr_glVertex4hNV #endif #ifndef GLEE_H_DEFINED_glVertex4hvNV #define GLEE_H_DEFINED_glVertex4hvNV typedef void (APIENTRYP GLEEPFNGLVERTEX4HVNVPROC) (const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLVERTEX4HVNVPROC GLeeFuncPtr_glVertex4hvNV; #define glVertex4hvNV GLeeFuncPtr_glVertex4hvNV #endif #ifndef GLEE_H_DEFINED_glNormal3hNV #define GLEE_H_DEFINED_glNormal3hNV typedef void (APIENTRYP GLEEPFNGLNORMAL3HNVPROC) (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); GLEE_EXTERN GLEEPFNGLNORMAL3HNVPROC GLeeFuncPtr_glNormal3hNV; #define glNormal3hNV GLeeFuncPtr_glNormal3hNV #endif #ifndef GLEE_H_DEFINED_glNormal3hvNV #define GLEE_H_DEFINED_glNormal3hvNV typedef void (APIENTRYP GLEEPFNGLNORMAL3HVNVPROC) (const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLNORMAL3HVNVPROC GLeeFuncPtr_glNormal3hvNV; #define glNormal3hvNV GLeeFuncPtr_glNormal3hvNV #endif #ifndef GLEE_H_DEFINED_glColor3hNV #define GLEE_H_DEFINED_glColor3hNV typedef void (APIENTRYP GLEEPFNGLCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); GLEE_EXTERN GLEEPFNGLCOLOR3HNVPROC GLeeFuncPtr_glColor3hNV; #define glColor3hNV GLeeFuncPtr_glColor3hNV #endif #ifndef GLEE_H_DEFINED_glColor3hvNV #define GLEE_H_DEFINED_glColor3hvNV typedef void (APIENTRYP GLEEPFNGLCOLOR3HVNVPROC) (const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLCOLOR3HVNVPROC GLeeFuncPtr_glColor3hvNV; #define glColor3hvNV GLeeFuncPtr_glColor3hvNV #endif #ifndef GLEE_H_DEFINED_glColor4hNV #define GLEE_H_DEFINED_glColor4hNV typedef void (APIENTRYP GLEEPFNGLCOLOR4HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); GLEE_EXTERN GLEEPFNGLCOLOR4HNVPROC GLeeFuncPtr_glColor4hNV; #define glColor4hNV GLeeFuncPtr_glColor4hNV #endif #ifndef GLEE_H_DEFINED_glColor4hvNV #define GLEE_H_DEFINED_glColor4hvNV typedef void (APIENTRYP GLEEPFNGLCOLOR4HVNVPROC) (const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLCOLOR4HVNVPROC GLeeFuncPtr_glColor4hvNV; #define glColor4hvNV GLeeFuncPtr_glColor4hvNV #endif #ifndef GLEE_H_DEFINED_glTexCoord1hNV #define GLEE_H_DEFINED_glTexCoord1hNV typedef void (APIENTRYP GLEEPFNGLTEXCOORD1HNVPROC) (GLhalfNV s); GLEE_EXTERN GLEEPFNGLTEXCOORD1HNVPROC GLeeFuncPtr_glTexCoord1hNV; #define glTexCoord1hNV GLeeFuncPtr_glTexCoord1hNV #endif #ifndef GLEE_H_DEFINED_glTexCoord1hvNV #define GLEE_H_DEFINED_glTexCoord1hvNV typedef void (APIENTRYP GLEEPFNGLTEXCOORD1HVNVPROC) (const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLTEXCOORD1HVNVPROC GLeeFuncPtr_glTexCoord1hvNV; #define glTexCoord1hvNV GLeeFuncPtr_glTexCoord1hvNV #endif #ifndef GLEE_H_DEFINED_glTexCoord2hNV #define GLEE_H_DEFINED_glTexCoord2hNV typedef void (APIENTRYP GLEEPFNGLTEXCOORD2HNVPROC) (GLhalfNV s, GLhalfNV t); GLEE_EXTERN GLEEPFNGLTEXCOORD2HNVPROC GLeeFuncPtr_glTexCoord2hNV; #define glTexCoord2hNV GLeeFuncPtr_glTexCoord2hNV #endif #ifndef GLEE_H_DEFINED_glTexCoord2hvNV #define GLEE_H_DEFINED_glTexCoord2hvNV typedef void (APIENTRYP GLEEPFNGLTEXCOORD2HVNVPROC) (const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLTEXCOORD2HVNVPROC GLeeFuncPtr_glTexCoord2hvNV; #define glTexCoord2hvNV GLeeFuncPtr_glTexCoord2hvNV #endif #ifndef GLEE_H_DEFINED_glTexCoord3hNV #define GLEE_H_DEFINED_glTexCoord3hNV typedef void (APIENTRYP GLEEPFNGLTEXCOORD3HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r); GLEE_EXTERN GLEEPFNGLTEXCOORD3HNVPROC GLeeFuncPtr_glTexCoord3hNV; #define glTexCoord3hNV GLeeFuncPtr_glTexCoord3hNV #endif #ifndef GLEE_H_DEFINED_glTexCoord3hvNV #define GLEE_H_DEFINED_glTexCoord3hvNV typedef void (APIENTRYP GLEEPFNGLTEXCOORD3HVNVPROC) (const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLTEXCOORD3HVNVPROC GLeeFuncPtr_glTexCoord3hvNV; #define glTexCoord3hvNV GLeeFuncPtr_glTexCoord3hvNV #endif #ifndef GLEE_H_DEFINED_glTexCoord4hNV #define GLEE_H_DEFINED_glTexCoord4hNV typedef void (APIENTRYP GLEEPFNGLTEXCOORD4HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); GLEE_EXTERN GLEEPFNGLTEXCOORD4HNVPROC GLeeFuncPtr_glTexCoord4hNV; #define glTexCoord4hNV GLeeFuncPtr_glTexCoord4hNV #endif #ifndef GLEE_H_DEFINED_glTexCoord4hvNV #define GLEE_H_DEFINED_glTexCoord4hvNV typedef void (APIENTRYP GLEEPFNGLTEXCOORD4HVNVPROC) (const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLTEXCOORD4HVNVPROC GLeeFuncPtr_glTexCoord4hvNV; #define glTexCoord4hvNV GLeeFuncPtr_glTexCoord4hvNV #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1hNV #define GLEE_H_DEFINED_glMultiTexCoord1hNV typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalfNV s); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1HNVPROC GLeeFuncPtr_glMultiTexCoord1hNV; #define glMultiTexCoord1hNV GLeeFuncPtr_glMultiTexCoord1hNV #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1hvNV #define GLEE_H_DEFINED_glMultiTexCoord1hvNV typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1HVNVPROC) (GLenum target, const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1HVNVPROC GLeeFuncPtr_glMultiTexCoord1hvNV; #define glMultiTexCoord1hvNV GLeeFuncPtr_glMultiTexCoord1hvNV #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2hNV #define GLEE_H_DEFINED_glMultiTexCoord2hNV typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2HNVPROC GLeeFuncPtr_glMultiTexCoord2hNV; #define glMultiTexCoord2hNV GLeeFuncPtr_glMultiTexCoord2hNV #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2hvNV #define GLEE_H_DEFINED_glMultiTexCoord2hvNV typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2HVNVPROC) (GLenum target, const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2HVNVPROC GLeeFuncPtr_glMultiTexCoord2hvNV; #define glMultiTexCoord2hvNV GLeeFuncPtr_glMultiTexCoord2hvNV #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3hNV #define GLEE_H_DEFINED_glMultiTexCoord3hNV typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3HNVPROC GLeeFuncPtr_glMultiTexCoord3hNV; #define glMultiTexCoord3hNV GLeeFuncPtr_glMultiTexCoord3hNV #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3hvNV #define GLEE_H_DEFINED_glMultiTexCoord3hvNV typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3HVNVPROC GLeeFuncPtr_glMultiTexCoord3hvNV; #define glMultiTexCoord3hvNV GLeeFuncPtr_glMultiTexCoord3hvNV #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4hNV #define GLEE_H_DEFINED_glMultiTexCoord4hNV typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4HNVPROC GLeeFuncPtr_glMultiTexCoord4hNV; #define glMultiTexCoord4hNV GLeeFuncPtr_glMultiTexCoord4hNV #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4hvNV #define GLEE_H_DEFINED_glMultiTexCoord4hvNV typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4HVNVPROC GLeeFuncPtr_glMultiTexCoord4hvNV; #define glMultiTexCoord4hvNV GLeeFuncPtr_glMultiTexCoord4hvNV #endif #ifndef GLEE_H_DEFINED_glFogCoordhNV #define GLEE_H_DEFINED_glFogCoordhNV typedef void (APIENTRYP GLEEPFNGLFOGCOORDHNVPROC) (GLhalfNV fog); GLEE_EXTERN GLEEPFNGLFOGCOORDHNVPROC GLeeFuncPtr_glFogCoordhNV; #define glFogCoordhNV GLeeFuncPtr_glFogCoordhNV #endif #ifndef GLEE_H_DEFINED_glFogCoordhvNV #define GLEE_H_DEFINED_glFogCoordhvNV typedef void (APIENTRYP GLEEPFNGLFOGCOORDHVNVPROC) (const GLhalfNV * fog); GLEE_EXTERN GLEEPFNGLFOGCOORDHVNVPROC GLeeFuncPtr_glFogCoordhvNV; #define glFogCoordhvNV GLeeFuncPtr_glFogCoordhvNV #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3hNV #define GLEE_H_DEFINED_glSecondaryColor3hNV typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3HNVPROC GLeeFuncPtr_glSecondaryColor3hNV; #define glSecondaryColor3hNV GLeeFuncPtr_glSecondaryColor3hNV #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3hvNV #define GLEE_H_DEFINED_glSecondaryColor3hvNV typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3HVNVPROC GLeeFuncPtr_glSecondaryColor3hvNV; #define glSecondaryColor3hvNV GLeeFuncPtr_glSecondaryColor3hvNV #endif #ifndef GLEE_H_DEFINED_glVertexWeighthNV #define GLEE_H_DEFINED_glVertexWeighthNV typedef void (APIENTRYP GLEEPFNGLVERTEXWEIGHTHNVPROC) (GLhalfNV weight); GLEE_EXTERN GLEEPFNGLVERTEXWEIGHTHNVPROC GLeeFuncPtr_glVertexWeighthNV; #define glVertexWeighthNV GLeeFuncPtr_glVertexWeighthNV #endif #ifndef GLEE_H_DEFINED_glVertexWeighthvNV #define GLEE_H_DEFINED_glVertexWeighthvNV typedef void (APIENTRYP GLEEPFNGLVERTEXWEIGHTHVNVPROC) (const GLhalfNV * weight); GLEE_EXTERN GLEEPFNGLVERTEXWEIGHTHVNVPROC GLeeFuncPtr_glVertexWeighthvNV; #define glVertexWeighthvNV GLeeFuncPtr_glVertexWeighthvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1hNV #define GLEE_H_DEFINED_glVertexAttrib1hNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalfNV x); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1HNVPROC GLeeFuncPtr_glVertexAttrib1hNV; #define glVertexAttrib1hNV GLeeFuncPtr_glVertexAttrib1hNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1hvNV #define GLEE_H_DEFINED_glVertexAttrib1hvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1HVNVPROC GLeeFuncPtr_glVertexAttrib1hvNV; #define glVertexAttrib1hvNV GLeeFuncPtr_glVertexAttrib1hvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2hNV #define GLEE_H_DEFINED_glVertexAttrib2hNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2HNVPROC GLeeFuncPtr_glVertexAttrib2hNV; #define glVertexAttrib2hNV GLeeFuncPtr_glVertexAttrib2hNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2hvNV #define GLEE_H_DEFINED_glVertexAttrib2hvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2HVNVPROC) (GLuint index, const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2HVNVPROC GLeeFuncPtr_glVertexAttrib2hvNV; #define glVertexAttrib2hvNV GLeeFuncPtr_glVertexAttrib2hvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3hNV #define GLEE_H_DEFINED_glVertexAttrib3hNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3HNVPROC GLeeFuncPtr_glVertexAttrib3hNV; #define glVertexAttrib3hNV GLeeFuncPtr_glVertexAttrib3hNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3hvNV #define GLEE_H_DEFINED_glVertexAttrib3hvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3HVNVPROC) (GLuint index, const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3HVNVPROC GLeeFuncPtr_glVertexAttrib3hvNV; #define glVertexAttrib3hvNV GLeeFuncPtr_glVertexAttrib3hvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4hNV #define GLEE_H_DEFINED_glVertexAttrib4hNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4HNVPROC GLeeFuncPtr_glVertexAttrib4hNV; #define glVertexAttrib4hNV GLeeFuncPtr_glVertexAttrib4hNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4hvNV #define GLEE_H_DEFINED_glVertexAttrib4hvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4HVNVPROC) (GLuint index, const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4HVNVPROC GLeeFuncPtr_glVertexAttrib4hvNV; #define glVertexAttrib4hvNV GLeeFuncPtr_glVertexAttrib4hvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribs1hvNV #define GLEE_H_DEFINED_glVertexAttribs1hvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBS1HVNVPROC GLeeFuncPtr_glVertexAttribs1hvNV; #define glVertexAttribs1hvNV GLeeFuncPtr_glVertexAttribs1hvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribs2hvNV #define GLEE_H_DEFINED_glVertexAttribs2hvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBS2HVNVPROC GLeeFuncPtr_glVertexAttribs2hvNV; #define glVertexAttribs2hvNV GLeeFuncPtr_glVertexAttribs2hvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribs3hvNV #define GLEE_H_DEFINED_glVertexAttribs3hvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBS3HVNVPROC GLeeFuncPtr_glVertexAttribs3hvNV; #define glVertexAttribs3hvNV GLeeFuncPtr_glVertexAttribs3hvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribs4hvNV #define GLEE_H_DEFINED_glVertexAttribs4hvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBS4HVNVPROC GLeeFuncPtr_glVertexAttribs4hvNV; #define glVertexAttribs4hvNV GLeeFuncPtr_glVertexAttribs4hvNV #endif #endif /* GL_NV_pixel_data_range */ #ifndef GL_NV_pixel_data_range #define GL_NV_pixel_data_range 1 #define __GLEE_GL_NV_pixel_data_range 1 /* Constants */ #define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878 #define GL_READ_PIXEL_DATA_RANGE_NV 0x8879 #define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A #define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B #define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C #define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D #ifndef GLEE_H_DEFINED_glPixelDataRangeNV #define GLEE_H_DEFINED_glPixelDataRangeNV typedef void (APIENTRYP GLEEPFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLPIXELDATARANGENVPROC GLeeFuncPtr_glPixelDataRangeNV; #define glPixelDataRangeNV GLeeFuncPtr_glPixelDataRangeNV #endif #ifndef GLEE_H_DEFINED_glFlushPixelDataRangeNV #define GLEE_H_DEFINED_glFlushPixelDataRangeNV typedef void (APIENTRYP GLEEPFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target); GLEE_EXTERN GLEEPFNGLFLUSHPIXELDATARANGENVPROC GLeeFuncPtr_glFlushPixelDataRangeNV; #define glFlushPixelDataRangeNV GLeeFuncPtr_glFlushPixelDataRangeNV #endif #endif /* GL_NV_primitive_restart */ #ifndef GL_NV_primitive_restart #define GL_NV_primitive_restart 1 #define __GLEE_GL_NV_primitive_restart 1 /* Constants */ #define GL_PRIMITIVE_RESTART_NV 0x8558 #define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559 #ifndef GLEE_H_DEFINED_glPrimitiveRestartNV #define GLEE_H_DEFINED_glPrimitiveRestartNV typedef void (APIENTRYP GLEEPFNGLPRIMITIVERESTARTNVPROC) (); GLEE_EXTERN GLEEPFNGLPRIMITIVERESTARTNVPROC GLeeFuncPtr_glPrimitiveRestartNV; #define glPrimitiveRestartNV GLeeFuncPtr_glPrimitiveRestartNV #endif #ifndef GLEE_H_DEFINED_glPrimitiveRestartIndexNV #define GLEE_H_DEFINED_glPrimitiveRestartIndexNV typedef void (APIENTRYP GLEEPFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index); GLEE_EXTERN GLEEPFNGLPRIMITIVERESTARTINDEXNVPROC GLeeFuncPtr_glPrimitiveRestartIndexNV; #define glPrimitiveRestartIndexNV GLeeFuncPtr_glPrimitiveRestartIndexNV #endif #endif /* GL_NV_texture_expand_normal */ #ifndef GL_NV_texture_expand_normal #define GL_NV_texture_expand_normal 1 #define __GLEE_GL_NV_texture_expand_normal 1 /* Constants */ #define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F #endif /* GL_NV_vertex_program2 */ #ifndef GL_NV_vertex_program2 #define GL_NV_vertex_program2 1 #define __GLEE_GL_NV_vertex_program2 1 /* Constants */ #endif /* GL_ATI_map_object_buffer */ #ifndef GL_ATI_map_object_buffer #define GL_ATI_map_object_buffer 1 #define __GLEE_GL_ATI_map_object_buffer 1 /* Constants */ #ifndef GLEE_H_DEFINED_glMapObjectBufferATI #define GLEE_H_DEFINED_glMapObjectBufferATI typedef GLvoid* (APIENTRYP GLEEPFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer); GLEE_EXTERN GLEEPFNGLMAPOBJECTBUFFERATIPROC GLeeFuncPtr_glMapObjectBufferATI; #define glMapObjectBufferATI GLeeFuncPtr_glMapObjectBufferATI #endif #ifndef GLEE_H_DEFINED_glUnmapObjectBufferATI #define GLEE_H_DEFINED_glUnmapObjectBufferATI typedef void (APIENTRYP GLEEPFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer); GLEE_EXTERN GLEEPFNGLUNMAPOBJECTBUFFERATIPROC GLeeFuncPtr_glUnmapObjectBufferATI; #define glUnmapObjectBufferATI GLeeFuncPtr_glUnmapObjectBufferATI #endif #endif /* GL_ATI_separate_stencil */ #ifndef GL_ATI_separate_stencil #define GL_ATI_separate_stencil 1 #define __GLEE_GL_ATI_separate_stencil 1 /* Constants */ #define GL_STENCIL_BACK_FUNC_ATI 0x8800 #define GL_STENCIL_BACK_FAIL_ATI 0x8801 #define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 #define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 #ifndef GLEE_H_DEFINED_glStencilOpSeparateATI #define GLEE_H_DEFINED_glStencilOpSeparateATI typedef void (APIENTRYP GLEEPFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); GLEE_EXTERN GLEEPFNGLSTENCILOPSEPARATEATIPROC GLeeFuncPtr_glStencilOpSeparateATI; #define glStencilOpSeparateATI GLeeFuncPtr_glStencilOpSeparateATI #endif #ifndef GLEE_H_DEFINED_glStencilFuncSeparateATI #define GLEE_H_DEFINED_glStencilFuncSeparateATI typedef void (APIENTRYP GLEEPFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); GLEE_EXTERN GLEEPFNGLSTENCILFUNCSEPARATEATIPROC GLeeFuncPtr_glStencilFuncSeparateATI; #define glStencilFuncSeparateATI GLeeFuncPtr_glStencilFuncSeparateATI #endif #endif /* GL_ATI_vertex_attrib_array_object */ #ifndef GL_ATI_vertex_attrib_array_object #define GL_ATI_vertex_attrib_array_object 1 #define __GLEE_GL_ATI_vertex_attrib_array_object 1 /* Constants */ #ifndef GLEE_H_DEFINED_glVertexAttribArrayObjectATI #define GLEE_H_DEFINED_glVertexAttribArrayObjectATI typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBARRAYOBJECTATIPROC GLeeFuncPtr_glVertexAttribArrayObjectATI; #define glVertexAttribArrayObjectATI GLeeFuncPtr_glVertexAttribArrayObjectATI #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribArrayObjectfvATI #define GLEE_H_DEFINED_glGetVertexAttribArrayObjectfvATI typedef void (APIENTRYP GLEEPFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC GLeeFuncPtr_glGetVertexAttribArrayObjectfvATI; #define glGetVertexAttribArrayObjectfvATI GLeeFuncPtr_glGetVertexAttribArrayObjectfvATI #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribArrayObjectivATI #define GLEE_H_DEFINED_glGetVertexAttribArrayObjectivATI typedef void (APIENTRYP GLEEPFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC GLeeFuncPtr_glGetVertexAttribArrayObjectivATI; #define glGetVertexAttribArrayObjectivATI GLeeFuncPtr_glGetVertexAttribArrayObjectivATI #endif #endif /* GL_OES_byte_coordinates */ #ifndef GL_OES_byte_coordinates #define GL_OES_byte_coordinates 1 #define __GLEE_GL_OES_byte_coordinates 1 /* Constants */ #ifndef GLEE_H_DEFINED_glMultiTexCoord1bOES #define GLEE_H_DEFINED_glMultiTexCoord1bOES typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1BOESPROC) (GLenum texture, GLbyte s); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1BOESPROC GLeeFuncPtr_glMultiTexCoord1bOES; #define glMultiTexCoord1bOES GLeeFuncPtr_glMultiTexCoord1bOES #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1bvOES #define GLEE_H_DEFINED_glMultiTexCoord1bvOES typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1BVOESPROC) (GLenum texture, const GLbyte * coords); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1BVOESPROC GLeeFuncPtr_glMultiTexCoord1bvOES; #define glMultiTexCoord1bvOES GLeeFuncPtr_glMultiTexCoord1bvOES #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2bOES #define GLEE_H_DEFINED_glMultiTexCoord2bOES typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2BOESPROC) (GLenum texture, GLbyte s, GLbyte t); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2BOESPROC GLeeFuncPtr_glMultiTexCoord2bOES; #define glMultiTexCoord2bOES GLeeFuncPtr_glMultiTexCoord2bOES #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2bvOES #define GLEE_H_DEFINED_glMultiTexCoord2bvOES typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2BVOESPROC) (GLenum texture, const GLbyte * coords); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2BVOESPROC GLeeFuncPtr_glMultiTexCoord2bvOES; #define glMultiTexCoord2bvOES GLeeFuncPtr_glMultiTexCoord2bvOES #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3bOES #define GLEE_H_DEFINED_glMultiTexCoord3bOES typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3BOESPROC GLeeFuncPtr_glMultiTexCoord3bOES; #define glMultiTexCoord3bOES GLeeFuncPtr_glMultiTexCoord3bOES #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3bvOES #define GLEE_H_DEFINED_glMultiTexCoord3bvOES typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3BVOESPROC) (GLenum texture, const GLbyte * coords); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3BVOESPROC GLeeFuncPtr_glMultiTexCoord3bvOES; #define glMultiTexCoord3bvOES GLeeFuncPtr_glMultiTexCoord3bvOES #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4bOES #define GLEE_H_DEFINED_glMultiTexCoord4bOES typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4BOESPROC GLeeFuncPtr_glMultiTexCoord4bOES; #define glMultiTexCoord4bOES GLeeFuncPtr_glMultiTexCoord4bOES #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4bvOES #define GLEE_H_DEFINED_glMultiTexCoord4bvOES typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4BVOESPROC) (GLenum texture, const GLbyte * coords); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4BVOESPROC GLeeFuncPtr_glMultiTexCoord4bvOES; #define glMultiTexCoord4bvOES GLeeFuncPtr_glMultiTexCoord4bvOES #endif #ifndef GLEE_H_DEFINED_glTexCoord1bOES #define GLEE_H_DEFINED_glTexCoord1bOES typedef void (APIENTRYP GLEEPFNGLTEXCOORD1BOESPROC) (GLbyte s); GLEE_EXTERN GLEEPFNGLTEXCOORD1BOESPROC GLeeFuncPtr_glTexCoord1bOES; #define glTexCoord1bOES GLeeFuncPtr_glTexCoord1bOES #endif #ifndef GLEE_H_DEFINED_glTexCoord1bvOES #define GLEE_H_DEFINED_glTexCoord1bvOES typedef void (APIENTRYP GLEEPFNGLTEXCOORD1BVOESPROC) (const GLbyte * coords); GLEE_EXTERN GLEEPFNGLTEXCOORD1BVOESPROC GLeeFuncPtr_glTexCoord1bvOES; #define glTexCoord1bvOES GLeeFuncPtr_glTexCoord1bvOES #endif #ifndef GLEE_H_DEFINED_glTexCoord2bOES #define GLEE_H_DEFINED_glTexCoord2bOES typedef void (APIENTRYP GLEEPFNGLTEXCOORD2BOESPROC) (GLbyte s, GLbyte t); GLEE_EXTERN GLEEPFNGLTEXCOORD2BOESPROC GLeeFuncPtr_glTexCoord2bOES; #define glTexCoord2bOES GLeeFuncPtr_glTexCoord2bOES #endif #ifndef GLEE_H_DEFINED_glTexCoord2bvOES #define GLEE_H_DEFINED_glTexCoord2bvOES typedef void (APIENTRYP GLEEPFNGLTEXCOORD2BVOESPROC) (const GLbyte * coords); GLEE_EXTERN GLEEPFNGLTEXCOORD2BVOESPROC GLeeFuncPtr_glTexCoord2bvOES; #define glTexCoord2bvOES GLeeFuncPtr_glTexCoord2bvOES #endif #ifndef GLEE_H_DEFINED_glTexCoord3bOES #define GLEE_H_DEFINED_glTexCoord3bOES typedef void (APIENTRYP GLEEPFNGLTEXCOORD3BOESPROC) (GLbyte s, GLbyte t, GLbyte r); GLEE_EXTERN GLEEPFNGLTEXCOORD3BOESPROC GLeeFuncPtr_glTexCoord3bOES; #define glTexCoord3bOES GLeeFuncPtr_glTexCoord3bOES #endif #ifndef GLEE_H_DEFINED_glTexCoord3bvOES #define GLEE_H_DEFINED_glTexCoord3bvOES typedef void (APIENTRYP GLEEPFNGLTEXCOORD3BVOESPROC) (const GLbyte * coords); GLEE_EXTERN GLEEPFNGLTEXCOORD3BVOESPROC GLeeFuncPtr_glTexCoord3bvOES; #define glTexCoord3bvOES GLeeFuncPtr_glTexCoord3bvOES #endif #ifndef GLEE_H_DEFINED_glTexCoord4bOES #define GLEE_H_DEFINED_glTexCoord4bOES typedef void (APIENTRYP GLEEPFNGLTEXCOORD4BOESPROC) (GLbyte s, GLbyte t, GLbyte r, GLbyte q); GLEE_EXTERN GLEEPFNGLTEXCOORD4BOESPROC GLeeFuncPtr_glTexCoord4bOES; #define glTexCoord4bOES GLeeFuncPtr_glTexCoord4bOES #endif #ifndef GLEE_H_DEFINED_glTexCoord4bvOES #define GLEE_H_DEFINED_glTexCoord4bvOES typedef void (APIENTRYP GLEEPFNGLTEXCOORD4BVOESPROC) (const GLbyte * coords); GLEE_EXTERN GLEEPFNGLTEXCOORD4BVOESPROC GLeeFuncPtr_glTexCoord4bvOES; #define glTexCoord4bvOES GLeeFuncPtr_glTexCoord4bvOES #endif #ifndef GLEE_H_DEFINED_glVertex2bOES #define GLEE_H_DEFINED_glVertex2bOES typedef void (APIENTRYP GLEEPFNGLVERTEX2BOESPROC) (GLbyte x); GLEE_EXTERN GLEEPFNGLVERTEX2BOESPROC GLeeFuncPtr_glVertex2bOES; #define glVertex2bOES GLeeFuncPtr_glVertex2bOES #endif #ifndef GLEE_H_DEFINED_glVertex2bvOES #define GLEE_H_DEFINED_glVertex2bvOES typedef void (APIENTRYP GLEEPFNGLVERTEX2BVOESPROC) (const GLbyte * coords); GLEE_EXTERN GLEEPFNGLVERTEX2BVOESPROC GLeeFuncPtr_glVertex2bvOES; #define glVertex2bvOES GLeeFuncPtr_glVertex2bvOES #endif #ifndef GLEE_H_DEFINED_glVertex3bOES #define GLEE_H_DEFINED_glVertex3bOES typedef void (APIENTRYP GLEEPFNGLVERTEX3BOESPROC) (GLbyte x, GLbyte y); GLEE_EXTERN GLEEPFNGLVERTEX3BOESPROC GLeeFuncPtr_glVertex3bOES; #define glVertex3bOES GLeeFuncPtr_glVertex3bOES #endif #ifndef GLEE_H_DEFINED_glVertex3bvOES #define GLEE_H_DEFINED_glVertex3bvOES typedef void (APIENTRYP GLEEPFNGLVERTEX3BVOESPROC) (const GLbyte * coords); GLEE_EXTERN GLEEPFNGLVERTEX3BVOESPROC GLeeFuncPtr_glVertex3bvOES; #define glVertex3bvOES GLeeFuncPtr_glVertex3bvOES #endif #ifndef GLEE_H_DEFINED_glVertex4bOES #define GLEE_H_DEFINED_glVertex4bOES typedef void (APIENTRYP GLEEPFNGLVERTEX4BOESPROC) (GLbyte x, GLbyte y, GLbyte z); GLEE_EXTERN GLEEPFNGLVERTEX4BOESPROC GLeeFuncPtr_glVertex4bOES; #define glVertex4bOES GLeeFuncPtr_glVertex4bOES #endif #ifndef GLEE_H_DEFINED_glVertex4bvOES #define GLEE_H_DEFINED_glVertex4bvOES typedef void (APIENTRYP GLEEPFNGLVERTEX4BVOESPROC) (const GLbyte * coords); GLEE_EXTERN GLEEPFNGLVERTEX4BVOESPROC GLeeFuncPtr_glVertex4bvOES; #define glVertex4bvOES GLeeFuncPtr_glVertex4bvOES #endif #endif /* GL_OES_fixed_point */ #ifndef GL_OES_fixed_point #define GL_OES_fixed_point 1 #define __GLEE_GL_OES_fixed_point 1 /* Constants */ #define GL_FIXED_OES 0x140C #ifndef GLEE_H_DEFINED_glAccumxOES #define GLEE_H_DEFINED_glAccumxOES typedef void (APIENTRYP GLEEPFNGLACCUMXOESPROC) (GLenum op, GLfixed value); GLEE_EXTERN GLEEPFNGLACCUMXOESPROC GLeeFuncPtr_glAccumxOES; #define glAccumxOES GLeeFuncPtr_glAccumxOES #endif #ifndef GLEE_H_DEFINED_glAlphaFuncxOES #define GLEE_H_DEFINED_glAlphaFuncxOES typedef void (APIENTRYP GLEEPFNGLALPHAFUNCXOESPROC) (GLenum func, GLfixed ref); GLEE_EXTERN GLEEPFNGLALPHAFUNCXOESPROC GLeeFuncPtr_glAlphaFuncxOES; #define glAlphaFuncxOES GLeeFuncPtr_glAlphaFuncxOES #endif #ifndef GLEE_H_DEFINED_glBitmapxOES #define GLEE_H_DEFINED_glBitmapxOES typedef void (APIENTRYP GLEEPFNGLBITMAPXOESPROC) (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte * bitmap); GLEE_EXTERN GLEEPFNGLBITMAPXOESPROC GLeeFuncPtr_glBitmapxOES; #define glBitmapxOES GLeeFuncPtr_glBitmapxOES #endif #ifndef GLEE_H_DEFINED_glBlendColorxOES #define GLEE_H_DEFINED_glBlendColorxOES typedef void (APIENTRYP GLEEPFNGLBLENDCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); GLEE_EXTERN GLEEPFNGLBLENDCOLORXOESPROC GLeeFuncPtr_glBlendColorxOES; #define glBlendColorxOES GLeeFuncPtr_glBlendColorxOES #endif #ifndef GLEE_H_DEFINED_glClearAccumxOES #define GLEE_H_DEFINED_glClearAccumxOES typedef void (APIENTRYP GLEEPFNGLCLEARACCUMXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); GLEE_EXTERN GLEEPFNGLCLEARACCUMXOESPROC GLeeFuncPtr_glClearAccumxOES; #define glClearAccumxOES GLeeFuncPtr_glClearAccumxOES #endif #ifndef GLEE_H_DEFINED_glClearColorxOES #define GLEE_H_DEFINED_glClearColorxOES typedef void (APIENTRYP GLEEPFNGLCLEARCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); GLEE_EXTERN GLEEPFNGLCLEARCOLORXOESPROC GLeeFuncPtr_glClearColorxOES; #define glClearColorxOES GLeeFuncPtr_glClearColorxOES #endif #ifndef GLEE_H_DEFINED_glClearDepthxOES #define GLEE_H_DEFINED_glClearDepthxOES typedef void (APIENTRYP GLEEPFNGLCLEARDEPTHXOESPROC) (GLfixed depth); GLEE_EXTERN GLEEPFNGLCLEARDEPTHXOESPROC GLeeFuncPtr_glClearDepthxOES; #define glClearDepthxOES GLeeFuncPtr_glClearDepthxOES #endif #ifndef GLEE_H_DEFINED_glClipPlanexOES #define GLEE_H_DEFINED_glClipPlanexOES typedef void (APIENTRYP GLEEPFNGLCLIPPLANEXOESPROC) (GLenum plane, const GLfixed * equation); GLEE_EXTERN GLEEPFNGLCLIPPLANEXOESPROC GLeeFuncPtr_glClipPlanexOES; #define glClipPlanexOES GLeeFuncPtr_glClipPlanexOES #endif #ifndef GLEE_H_DEFINED_glColor3xOES #define GLEE_H_DEFINED_glColor3xOES typedef void (APIENTRYP GLEEPFNGLCOLOR3XOESPROC) (GLfixed red, GLfixed green, GLfixed blue); GLEE_EXTERN GLEEPFNGLCOLOR3XOESPROC GLeeFuncPtr_glColor3xOES; #define glColor3xOES GLeeFuncPtr_glColor3xOES #endif #ifndef GLEE_H_DEFINED_glColor4xOES #define GLEE_H_DEFINED_glColor4xOES typedef void (APIENTRYP GLEEPFNGLCOLOR4XOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); GLEE_EXTERN GLEEPFNGLCOLOR4XOESPROC GLeeFuncPtr_glColor4xOES; #define glColor4xOES GLeeFuncPtr_glColor4xOES #endif #ifndef GLEE_H_DEFINED_glColor3xvOES #define GLEE_H_DEFINED_glColor3xvOES typedef void (APIENTRYP GLEEPFNGLCOLOR3XVOESPROC) (const GLfixed * components); GLEE_EXTERN GLEEPFNGLCOLOR3XVOESPROC GLeeFuncPtr_glColor3xvOES; #define glColor3xvOES GLeeFuncPtr_glColor3xvOES #endif #ifndef GLEE_H_DEFINED_glColor4xvOES #define GLEE_H_DEFINED_glColor4xvOES typedef void (APIENTRYP GLEEPFNGLCOLOR4XVOESPROC) (const GLfixed * components); GLEE_EXTERN GLEEPFNGLCOLOR4XVOESPROC GLeeFuncPtr_glColor4xvOES; #define glColor4xvOES GLeeFuncPtr_glColor4xvOES #endif #ifndef GLEE_H_DEFINED_glConvolutionParameterxOES #define GLEE_H_DEFINED_glConvolutionParameterxOES typedef void (APIENTRYP GLEEPFNGLCONVOLUTIONPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param); GLEE_EXTERN GLEEPFNGLCONVOLUTIONPARAMETERXOESPROC GLeeFuncPtr_glConvolutionParameterxOES; #define glConvolutionParameterxOES GLeeFuncPtr_glConvolutionParameterxOES #endif #ifndef GLEE_H_DEFINED_glConvolutionParameterxvOES #define GLEE_H_DEFINED_glConvolutionParameterxvOES typedef void (APIENTRYP GLEEPFNGLCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed * params); GLEE_EXTERN GLEEPFNGLCONVOLUTIONPARAMETERXVOESPROC GLeeFuncPtr_glConvolutionParameterxvOES; #define glConvolutionParameterxvOES GLeeFuncPtr_glConvolutionParameterxvOES #endif #ifndef GLEE_H_DEFINED_glDepthRangexOES #define GLEE_H_DEFINED_glDepthRangexOES typedef void (APIENTRYP GLEEPFNGLDEPTHRANGEXOESPROC) (GLfixed n, GLfixed f); GLEE_EXTERN GLEEPFNGLDEPTHRANGEXOESPROC GLeeFuncPtr_glDepthRangexOES; #define glDepthRangexOES GLeeFuncPtr_glDepthRangexOES #endif #ifndef GLEE_H_DEFINED_glEvalCoord1xOES #define GLEE_H_DEFINED_glEvalCoord1xOES typedef void (APIENTRYP GLEEPFNGLEVALCOORD1XOESPROC) (GLfixed u); GLEE_EXTERN GLEEPFNGLEVALCOORD1XOESPROC GLeeFuncPtr_glEvalCoord1xOES; #define glEvalCoord1xOES GLeeFuncPtr_glEvalCoord1xOES #endif #ifndef GLEE_H_DEFINED_glEvalCoord2xOES #define GLEE_H_DEFINED_glEvalCoord2xOES typedef void (APIENTRYP GLEEPFNGLEVALCOORD2XOESPROC) (GLfixed u, GLfixed v); GLEE_EXTERN GLEEPFNGLEVALCOORD2XOESPROC GLeeFuncPtr_glEvalCoord2xOES; #define glEvalCoord2xOES GLeeFuncPtr_glEvalCoord2xOES #endif #ifndef GLEE_H_DEFINED_glEvalCoord1xvOES #define GLEE_H_DEFINED_glEvalCoord1xvOES typedef void (APIENTRYP GLEEPFNGLEVALCOORD1XVOESPROC) (const GLfixed * coords); GLEE_EXTERN GLEEPFNGLEVALCOORD1XVOESPROC GLeeFuncPtr_glEvalCoord1xvOES; #define glEvalCoord1xvOES GLeeFuncPtr_glEvalCoord1xvOES #endif #ifndef GLEE_H_DEFINED_glEvalCoord2xvOES #define GLEE_H_DEFINED_glEvalCoord2xvOES typedef void (APIENTRYP GLEEPFNGLEVALCOORD2XVOESPROC) (const GLfixed * coords); GLEE_EXTERN GLEEPFNGLEVALCOORD2XVOESPROC GLeeFuncPtr_glEvalCoord2xvOES; #define glEvalCoord2xvOES GLeeFuncPtr_glEvalCoord2xvOES #endif #ifndef GLEE_H_DEFINED_glFeedbackBufferxOES #define GLEE_H_DEFINED_glFeedbackBufferxOES typedef void (APIENTRYP GLEEPFNGLFEEDBACKBUFFERXOESPROC) (GLsizei n, GLenum type, const GLfixed * buffer); GLEE_EXTERN GLEEPFNGLFEEDBACKBUFFERXOESPROC GLeeFuncPtr_glFeedbackBufferxOES; #define glFeedbackBufferxOES GLeeFuncPtr_glFeedbackBufferxOES #endif #ifndef GLEE_H_DEFINED_glFogxOES #define GLEE_H_DEFINED_glFogxOES typedef void (APIENTRYP GLEEPFNGLFOGXOESPROC) (GLenum pname, GLfixed param); GLEE_EXTERN GLEEPFNGLFOGXOESPROC GLeeFuncPtr_glFogxOES; #define glFogxOES GLeeFuncPtr_glFogxOES #endif #ifndef GLEE_H_DEFINED_glFogxvOES #define GLEE_H_DEFINED_glFogxvOES typedef void (APIENTRYP GLEEPFNGLFOGXVOESPROC) (GLenum pname, const GLfixed * param); GLEE_EXTERN GLEEPFNGLFOGXVOESPROC GLeeFuncPtr_glFogxvOES; #define glFogxvOES GLeeFuncPtr_glFogxvOES #endif #ifndef GLEE_H_DEFINED_glFrustumxOES #define GLEE_H_DEFINED_glFrustumxOES typedef void (APIENTRYP GLEEPFNGLFRUSTUMXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); GLEE_EXTERN GLEEPFNGLFRUSTUMXOESPROC GLeeFuncPtr_glFrustumxOES; #define glFrustumxOES GLeeFuncPtr_glFrustumxOES #endif #ifndef GLEE_H_DEFINED_glGetClipPlanexOES #define GLEE_H_DEFINED_glGetClipPlanexOES typedef void (APIENTRYP GLEEPFNGLGETCLIPPLANEXOESPROC) (GLenum plane, GLfixed * equation); GLEE_EXTERN GLEEPFNGLGETCLIPPLANEXOESPROC GLeeFuncPtr_glGetClipPlanexOES; #define glGetClipPlanexOES GLeeFuncPtr_glGetClipPlanexOES #endif #ifndef GLEE_H_DEFINED_glGetConvolutionParameterxvOES #define GLEE_H_DEFINED_glGetConvolutionParameterxvOES typedef void (APIENTRYP GLEEPFNGLGETCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed * params); GLEE_EXTERN GLEEPFNGLGETCONVOLUTIONPARAMETERXVOESPROC GLeeFuncPtr_glGetConvolutionParameterxvOES; #define glGetConvolutionParameterxvOES GLeeFuncPtr_glGetConvolutionParameterxvOES #endif #ifndef GLEE_H_DEFINED_glGetFixedvOES #define GLEE_H_DEFINED_glGetFixedvOES typedef void (APIENTRYP GLEEPFNGLGETFIXEDVOESPROC) (GLenum pname, GLfixed * params); GLEE_EXTERN GLEEPFNGLGETFIXEDVOESPROC GLeeFuncPtr_glGetFixedvOES; #define glGetFixedvOES GLeeFuncPtr_glGetFixedvOES #endif #ifndef GLEE_H_DEFINED_glGetHistogramParameterxvOES #define GLEE_H_DEFINED_glGetHistogramParameterxvOES typedef void (APIENTRYP GLEEPFNGLGETHISTOGRAMPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed * params); GLEE_EXTERN GLEEPFNGLGETHISTOGRAMPARAMETERXVOESPROC GLeeFuncPtr_glGetHistogramParameterxvOES; #define glGetHistogramParameterxvOES GLeeFuncPtr_glGetHistogramParameterxvOES #endif #ifndef GLEE_H_DEFINED_glGetLightxOES #define GLEE_H_DEFINED_glGetLightxOES typedef void (APIENTRYP GLEEPFNGLGETLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed * params); GLEE_EXTERN GLEEPFNGLGETLIGHTXOESPROC GLeeFuncPtr_glGetLightxOES; #define glGetLightxOES GLeeFuncPtr_glGetLightxOES #endif #ifndef GLEE_H_DEFINED_glGetMapxvOES #define GLEE_H_DEFINED_glGetMapxvOES typedef void (APIENTRYP GLEEPFNGLGETMAPXVOESPROC) (GLenum target, GLenum query, GLfixed * v); GLEE_EXTERN GLEEPFNGLGETMAPXVOESPROC GLeeFuncPtr_glGetMapxvOES; #define glGetMapxvOES GLeeFuncPtr_glGetMapxvOES #endif #ifndef GLEE_H_DEFINED_glGetMaterialxOES #define GLEE_H_DEFINED_glGetMaterialxOES typedef void (APIENTRYP GLEEPFNGLGETMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param); GLEE_EXTERN GLEEPFNGLGETMATERIALXOESPROC GLeeFuncPtr_glGetMaterialxOES; #define glGetMaterialxOES GLeeFuncPtr_glGetMaterialxOES #endif #ifndef GLEE_H_DEFINED_glGetPixelMapxv #define GLEE_H_DEFINED_glGetPixelMapxv typedef void (APIENTRYP GLEEPFNGLGETPIXELMAPXVPROC) (GLenum map, GLint size, GLfixed * values); GLEE_EXTERN GLEEPFNGLGETPIXELMAPXVPROC GLeeFuncPtr_glGetPixelMapxv; #define glGetPixelMapxv GLeeFuncPtr_glGetPixelMapxv #endif #ifndef GLEE_H_DEFINED_glGetTexEnvxvOES #define GLEE_H_DEFINED_glGetTexEnvxvOES typedef void (APIENTRYP GLEEPFNGLGETTEXENVXVOESPROC) (GLenum target, GLenum pname, GLfixed * params); GLEE_EXTERN GLEEPFNGLGETTEXENVXVOESPROC GLeeFuncPtr_glGetTexEnvxvOES; #define glGetTexEnvxvOES GLeeFuncPtr_glGetTexEnvxvOES #endif #ifndef GLEE_H_DEFINED_glGetTexGenxvOES #define GLEE_H_DEFINED_glGetTexGenxvOES typedef void (APIENTRYP GLEEPFNGLGETTEXGENXVOESPROC) (GLenum coord, GLenum pname, GLfixed * params); GLEE_EXTERN GLEEPFNGLGETTEXGENXVOESPROC GLeeFuncPtr_glGetTexGenxvOES; #define glGetTexGenxvOES GLeeFuncPtr_glGetTexGenxvOES #endif #ifndef GLEE_H_DEFINED_glGetTexLevelParameterxvOES #define GLEE_H_DEFINED_glGetTexLevelParameterxvOES typedef void (APIENTRYP GLEEPFNGLGETTEXLEVELPARAMETERXVOESPROC) (GLenum target, GLint level, GLenum pname, GLfixed * params); GLEE_EXTERN GLEEPFNGLGETTEXLEVELPARAMETERXVOESPROC GLeeFuncPtr_glGetTexLevelParameterxvOES; #define glGetTexLevelParameterxvOES GLeeFuncPtr_glGetTexLevelParameterxvOES #endif #ifndef GLEE_H_DEFINED_glGetTexParameterxvOES #define GLEE_H_DEFINED_glGetTexParameterxvOES typedef void (APIENTRYP GLEEPFNGLGETTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed * params); GLEE_EXTERN GLEEPFNGLGETTEXPARAMETERXVOESPROC GLeeFuncPtr_glGetTexParameterxvOES; #define glGetTexParameterxvOES GLeeFuncPtr_glGetTexParameterxvOES #endif #ifndef GLEE_H_DEFINED_glIndexxOES #define GLEE_H_DEFINED_glIndexxOES typedef void (APIENTRYP GLEEPFNGLINDEXXOESPROC) (GLfixed component); GLEE_EXTERN GLEEPFNGLINDEXXOESPROC GLeeFuncPtr_glIndexxOES; #define glIndexxOES GLeeFuncPtr_glIndexxOES #endif #ifndef GLEE_H_DEFINED_glIndexxvOES #define GLEE_H_DEFINED_glIndexxvOES typedef void (APIENTRYP GLEEPFNGLINDEXXVOESPROC) (const GLfixed * component); GLEE_EXTERN GLEEPFNGLINDEXXVOESPROC GLeeFuncPtr_glIndexxvOES; #define glIndexxvOES GLeeFuncPtr_glIndexxvOES #endif #ifndef GLEE_H_DEFINED_glLightModelxOES #define GLEE_H_DEFINED_glLightModelxOES typedef void (APIENTRYP GLEEPFNGLLIGHTMODELXOESPROC) (GLenum pname, GLfixed param); GLEE_EXTERN GLEEPFNGLLIGHTMODELXOESPROC GLeeFuncPtr_glLightModelxOES; #define glLightModelxOES GLeeFuncPtr_glLightModelxOES #endif #ifndef GLEE_H_DEFINED_glLightModelxvOES #define GLEE_H_DEFINED_glLightModelxvOES typedef void (APIENTRYP GLEEPFNGLLIGHTMODELXVOESPROC) (GLenum pname, const GLfixed * param); GLEE_EXTERN GLEEPFNGLLIGHTMODELXVOESPROC GLeeFuncPtr_glLightModelxvOES; #define glLightModelxvOES GLeeFuncPtr_glLightModelxvOES #endif #ifndef GLEE_H_DEFINED_glLightxOES #define GLEE_H_DEFINED_glLightxOES typedef void (APIENTRYP GLEEPFNGLLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed param); GLEE_EXTERN GLEEPFNGLLIGHTXOESPROC GLeeFuncPtr_glLightxOES; #define glLightxOES GLeeFuncPtr_glLightxOES #endif #ifndef GLEE_H_DEFINED_glLightxvOES #define GLEE_H_DEFINED_glLightxvOES typedef void (APIENTRYP GLEEPFNGLLIGHTXVOESPROC) (GLenum light, GLenum pname, const GLfixed * params); GLEE_EXTERN GLEEPFNGLLIGHTXVOESPROC GLeeFuncPtr_glLightxvOES; #define glLightxvOES GLeeFuncPtr_glLightxvOES #endif #ifndef GLEE_H_DEFINED_glLineWidthxOES #define GLEE_H_DEFINED_glLineWidthxOES typedef void (APIENTRYP GLEEPFNGLLINEWIDTHXOESPROC) (GLfixed width); GLEE_EXTERN GLEEPFNGLLINEWIDTHXOESPROC GLeeFuncPtr_glLineWidthxOES; #define glLineWidthxOES GLeeFuncPtr_glLineWidthxOES #endif #ifndef GLEE_H_DEFINED_glLoadMatrixxOES #define GLEE_H_DEFINED_glLoadMatrixxOES typedef void (APIENTRYP GLEEPFNGLLOADMATRIXXOESPROC) (const GLfixed * m); GLEE_EXTERN GLEEPFNGLLOADMATRIXXOESPROC GLeeFuncPtr_glLoadMatrixxOES; #define glLoadMatrixxOES GLeeFuncPtr_glLoadMatrixxOES #endif #ifndef GLEE_H_DEFINED_glLoadTransposeMatrixxOES #define GLEE_H_DEFINED_glLoadTransposeMatrixxOES typedef void (APIENTRYP GLEEPFNGLLOADTRANSPOSEMATRIXXOESPROC) (const GLfixed * m); GLEE_EXTERN GLEEPFNGLLOADTRANSPOSEMATRIXXOESPROC GLeeFuncPtr_glLoadTransposeMatrixxOES; #define glLoadTransposeMatrixxOES GLeeFuncPtr_glLoadTransposeMatrixxOES #endif #ifndef GLEE_H_DEFINED_glMap1xOES #define GLEE_H_DEFINED_glMap1xOES typedef void (APIENTRYP GLEEPFNGLMAP1XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points); GLEE_EXTERN GLEEPFNGLMAP1XOESPROC GLeeFuncPtr_glMap1xOES; #define glMap1xOES GLeeFuncPtr_glMap1xOES #endif #ifndef GLEE_H_DEFINED_glMap2xOES #define GLEE_H_DEFINED_glMap2xOES typedef void (APIENTRYP GLEEPFNGLMAP2XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points); GLEE_EXTERN GLEEPFNGLMAP2XOESPROC GLeeFuncPtr_glMap2xOES; #define glMap2xOES GLeeFuncPtr_glMap2xOES #endif #ifndef GLEE_H_DEFINED_glMapGrid1xOES #define GLEE_H_DEFINED_glMapGrid1xOES typedef void (APIENTRYP GLEEPFNGLMAPGRID1XOESPROC) (GLint n, GLfixed u1, GLfixed u2); GLEE_EXTERN GLEEPFNGLMAPGRID1XOESPROC GLeeFuncPtr_glMapGrid1xOES; #define glMapGrid1xOES GLeeFuncPtr_glMapGrid1xOES #endif #ifndef GLEE_H_DEFINED_glMapGrid2xOES #define GLEE_H_DEFINED_glMapGrid2xOES typedef void (APIENTRYP GLEEPFNGLMAPGRID2XOESPROC) (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2); GLEE_EXTERN GLEEPFNGLMAPGRID2XOESPROC GLeeFuncPtr_glMapGrid2xOES; #define glMapGrid2xOES GLeeFuncPtr_glMapGrid2xOES #endif #ifndef GLEE_H_DEFINED_glMaterialxOES #define GLEE_H_DEFINED_glMaterialxOES typedef void (APIENTRYP GLEEPFNGLMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param); GLEE_EXTERN GLEEPFNGLMATERIALXOESPROC GLeeFuncPtr_glMaterialxOES; #define glMaterialxOES GLeeFuncPtr_glMaterialxOES #endif #ifndef GLEE_H_DEFINED_glMaterialxvOES #define GLEE_H_DEFINED_glMaterialxvOES typedef void (APIENTRYP GLEEPFNGLMATERIALXVOESPROC) (GLenum face, GLenum pname, const GLfixed * param); GLEE_EXTERN GLEEPFNGLMATERIALXVOESPROC GLeeFuncPtr_glMaterialxvOES; #define glMaterialxvOES GLeeFuncPtr_glMaterialxvOES #endif #ifndef GLEE_H_DEFINED_glMultMatrixxOES #define GLEE_H_DEFINED_glMultMatrixxOES typedef void (APIENTRYP GLEEPFNGLMULTMATRIXXOESPROC) (const GLfixed * m); GLEE_EXTERN GLEEPFNGLMULTMATRIXXOESPROC GLeeFuncPtr_glMultMatrixxOES; #define glMultMatrixxOES GLeeFuncPtr_glMultMatrixxOES #endif #ifndef GLEE_H_DEFINED_glMultTransposeMatrixxOES #define GLEE_H_DEFINED_glMultTransposeMatrixxOES typedef void (APIENTRYP GLEEPFNGLMULTTRANSPOSEMATRIXXOESPROC) (const GLfixed * m); GLEE_EXTERN GLEEPFNGLMULTTRANSPOSEMATRIXXOESPROC GLeeFuncPtr_glMultTransposeMatrixxOES; #define glMultTransposeMatrixxOES GLeeFuncPtr_glMultTransposeMatrixxOES #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1xOES #define GLEE_H_DEFINED_glMultiTexCoord1xOES typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1XOESPROC) (GLenum texture, GLfixed s); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1XOESPROC GLeeFuncPtr_glMultiTexCoord1xOES; #define glMultiTexCoord1xOES GLeeFuncPtr_glMultiTexCoord1xOES #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2xOES #define GLEE_H_DEFINED_glMultiTexCoord2xOES typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2XOESPROC) (GLenum texture, GLfixed s, GLfixed t); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2XOESPROC GLeeFuncPtr_glMultiTexCoord2xOES; #define glMultiTexCoord2xOES GLeeFuncPtr_glMultiTexCoord2xOES #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3xOES #define GLEE_H_DEFINED_glMultiTexCoord3xOES typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3XOESPROC GLeeFuncPtr_glMultiTexCoord3xOES; #define glMultiTexCoord3xOES GLeeFuncPtr_glMultiTexCoord3xOES #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4xOES #define GLEE_H_DEFINED_glMultiTexCoord4xOES typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4XOESPROC GLeeFuncPtr_glMultiTexCoord4xOES; #define glMultiTexCoord4xOES GLeeFuncPtr_glMultiTexCoord4xOES #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1xvOES #define GLEE_H_DEFINED_glMultiTexCoord1xvOES typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1XVOESPROC) (GLenum texture, const GLfixed * coords); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1XVOESPROC GLeeFuncPtr_glMultiTexCoord1xvOES; #define glMultiTexCoord1xvOES GLeeFuncPtr_glMultiTexCoord1xvOES #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2xvOES #define GLEE_H_DEFINED_glMultiTexCoord2xvOES typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2XVOESPROC) (GLenum texture, const GLfixed * coords); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2XVOESPROC GLeeFuncPtr_glMultiTexCoord2xvOES; #define glMultiTexCoord2xvOES GLeeFuncPtr_glMultiTexCoord2xvOES #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3xvOES #define GLEE_H_DEFINED_glMultiTexCoord3xvOES typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3XVOESPROC) (GLenum texture, const GLfixed * coords); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3XVOESPROC GLeeFuncPtr_glMultiTexCoord3xvOES; #define glMultiTexCoord3xvOES GLeeFuncPtr_glMultiTexCoord3xvOES #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4xvOES #define GLEE_H_DEFINED_glMultiTexCoord4xvOES typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4XVOESPROC) (GLenum texture, const GLfixed * coords); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4XVOESPROC GLeeFuncPtr_glMultiTexCoord4xvOES; #define glMultiTexCoord4xvOES GLeeFuncPtr_glMultiTexCoord4xvOES #endif #ifndef GLEE_H_DEFINED_glNormal3xOES #define GLEE_H_DEFINED_glNormal3xOES typedef void (APIENTRYP GLEEPFNGLNORMAL3XOESPROC) (GLfixed nx, GLfixed ny, GLfixed nz); GLEE_EXTERN GLEEPFNGLNORMAL3XOESPROC GLeeFuncPtr_glNormal3xOES; #define glNormal3xOES GLeeFuncPtr_glNormal3xOES #endif #ifndef GLEE_H_DEFINED_glNormal3xvOES #define GLEE_H_DEFINED_glNormal3xvOES typedef void (APIENTRYP GLEEPFNGLNORMAL3XVOESPROC) (const GLfixed * coords); GLEE_EXTERN GLEEPFNGLNORMAL3XVOESPROC GLeeFuncPtr_glNormal3xvOES; #define glNormal3xvOES GLeeFuncPtr_glNormal3xvOES #endif #ifndef GLEE_H_DEFINED_glOrthoxOES #define GLEE_H_DEFINED_glOrthoxOES typedef void (APIENTRYP GLEEPFNGLORTHOXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); GLEE_EXTERN GLEEPFNGLORTHOXOESPROC GLeeFuncPtr_glOrthoxOES; #define glOrthoxOES GLeeFuncPtr_glOrthoxOES #endif #ifndef GLEE_H_DEFINED_glPassThroughxOES #define GLEE_H_DEFINED_glPassThroughxOES typedef void (APIENTRYP GLEEPFNGLPASSTHROUGHXOESPROC) (GLfixed token); GLEE_EXTERN GLEEPFNGLPASSTHROUGHXOESPROC GLeeFuncPtr_glPassThroughxOES; #define glPassThroughxOES GLeeFuncPtr_glPassThroughxOES #endif #ifndef GLEE_H_DEFINED_glPixelMapx #define GLEE_H_DEFINED_glPixelMapx typedef void (APIENTRYP GLEEPFNGLPIXELMAPXPROC) (GLenum map, GLint size, const GLfixed * values); GLEE_EXTERN GLEEPFNGLPIXELMAPXPROC GLeeFuncPtr_glPixelMapx; #define glPixelMapx GLeeFuncPtr_glPixelMapx #endif #ifndef GLEE_H_DEFINED_glPixelStorex #define GLEE_H_DEFINED_glPixelStorex typedef void (APIENTRYP GLEEPFNGLPIXELSTOREXPROC) (GLenum pname, GLfixed param); GLEE_EXTERN GLEEPFNGLPIXELSTOREXPROC GLeeFuncPtr_glPixelStorex; #define glPixelStorex GLeeFuncPtr_glPixelStorex #endif #ifndef GLEE_H_DEFINED_glPixelTransferxOES #define GLEE_H_DEFINED_glPixelTransferxOES typedef void (APIENTRYP GLEEPFNGLPIXELTRANSFERXOESPROC) (GLenum pname, GLfixed param); GLEE_EXTERN GLEEPFNGLPIXELTRANSFERXOESPROC GLeeFuncPtr_glPixelTransferxOES; #define glPixelTransferxOES GLeeFuncPtr_glPixelTransferxOES #endif #ifndef GLEE_H_DEFINED_glPixelZoomxOES #define GLEE_H_DEFINED_glPixelZoomxOES typedef void (APIENTRYP GLEEPFNGLPIXELZOOMXOESPROC) (GLfixed xfactor, GLfixed yfactor); GLEE_EXTERN GLEEPFNGLPIXELZOOMXOESPROC GLeeFuncPtr_glPixelZoomxOES; #define glPixelZoomxOES GLeeFuncPtr_glPixelZoomxOES #endif #ifndef GLEE_H_DEFINED_glPointParameterxvOES #define GLEE_H_DEFINED_glPointParameterxvOES typedef void (APIENTRYP GLEEPFNGLPOINTPARAMETERXVOESPROC) (GLenum pname, const GLfixed * params); GLEE_EXTERN GLEEPFNGLPOINTPARAMETERXVOESPROC GLeeFuncPtr_glPointParameterxvOES; #define glPointParameterxvOES GLeeFuncPtr_glPointParameterxvOES #endif #ifndef GLEE_H_DEFINED_glPointSizexOES #define GLEE_H_DEFINED_glPointSizexOES typedef void (APIENTRYP GLEEPFNGLPOINTSIZEXOESPROC) (GLfixed size); GLEE_EXTERN GLEEPFNGLPOINTSIZEXOESPROC GLeeFuncPtr_glPointSizexOES; #define glPointSizexOES GLeeFuncPtr_glPointSizexOES #endif #ifndef GLEE_H_DEFINED_glPolygonOffsetxOES #define GLEE_H_DEFINED_glPolygonOffsetxOES typedef void (APIENTRYP GLEEPFNGLPOLYGONOFFSETXOESPROC) (GLfixed factor, GLfixed units); GLEE_EXTERN GLEEPFNGLPOLYGONOFFSETXOESPROC GLeeFuncPtr_glPolygonOffsetxOES; #define glPolygonOffsetxOES GLeeFuncPtr_glPolygonOffsetxOES #endif #ifndef GLEE_H_DEFINED_glPrioritizeTexturesxOES #define GLEE_H_DEFINED_glPrioritizeTexturesxOES typedef void (APIENTRYP GLEEPFNGLPRIORITIZETEXTURESXOESPROC) (GLsizei n, const GLuint * textures, const GLfixed * priorities); GLEE_EXTERN GLEEPFNGLPRIORITIZETEXTURESXOESPROC GLeeFuncPtr_glPrioritizeTexturesxOES; #define glPrioritizeTexturesxOES GLeeFuncPtr_glPrioritizeTexturesxOES #endif #ifndef GLEE_H_DEFINED_glRasterPos2xOES #define GLEE_H_DEFINED_glRasterPos2xOES typedef void (APIENTRYP GLEEPFNGLRASTERPOS2XOESPROC) (GLfixed x, GLfixed y); GLEE_EXTERN GLEEPFNGLRASTERPOS2XOESPROC GLeeFuncPtr_glRasterPos2xOES; #define glRasterPos2xOES GLeeFuncPtr_glRasterPos2xOES #endif #ifndef GLEE_H_DEFINED_glRasterPos3xOES #define GLEE_H_DEFINED_glRasterPos3xOES typedef void (APIENTRYP GLEEPFNGLRASTERPOS3XOESPROC) (GLfixed x, GLfixed y, GLfixed z); GLEE_EXTERN GLEEPFNGLRASTERPOS3XOESPROC GLeeFuncPtr_glRasterPos3xOES; #define glRasterPos3xOES GLeeFuncPtr_glRasterPos3xOES #endif #ifndef GLEE_H_DEFINED_glRasterPos4xOES #define GLEE_H_DEFINED_glRasterPos4xOES typedef void (APIENTRYP GLEEPFNGLRASTERPOS4XOESPROC) (GLfixed x, GLfixed y, GLfixed z, GLfixed w); GLEE_EXTERN GLEEPFNGLRASTERPOS4XOESPROC GLeeFuncPtr_glRasterPos4xOES; #define glRasterPos4xOES GLeeFuncPtr_glRasterPos4xOES #endif #ifndef GLEE_H_DEFINED_glRasterPos2xvOES #define GLEE_H_DEFINED_glRasterPos2xvOES typedef void (APIENTRYP GLEEPFNGLRASTERPOS2XVOESPROC) (const GLfixed * coords); GLEE_EXTERN GLEEPFNGLRASTERPOS2XVOESPROC GLeeFuncPtr_glRasterPos2xvOES; #define glRasterPos2xvOES GLeeFuncPtr_glRasterPos2xvOES #endif #ifndef GLEE_H_DEFINED_glRasterPos3xvOES #define GLEE_H_DEFINED_glRasterPos3xvOES typedef void (APIENTRYP GLEEPFNGLRASTERPOS3XVOESPROC) (const GLfixed * coords); GLEE_EXTERN GLEEPFNGLRASTERPOS3XVOESPROC GLeeFuncPtr_glRasterPos3xvOES; #define glRasterPos3xvOES GLeeFuncPtr_glRasterPos3xvOES #endif #ifndef GLEE_H_DEFINED_glRasterPos4xvOES #define GLEE_H_DEFINED_glRasterPos4xvOES typedef void (APIENTRYP GLEEPFNGLRASTERPOS4XVOESPROC) (const GLfixed * coords); GLEE_EXTERN GLEEPFNGLRASTERPOS4XVOESPROC GLeeFuncPtr_glRasterPos4xvOES; #define glRasterPos4xvOES GLeeFuncPtr_glRasterPos4xvOES #endif #ifndef GLEE_H_DEFINED_glRectxOES #define GLEE_H_DEFINED_glRectxOES typedef void (APIENTRYP GLEEPFNGLRECTXOESPROC) (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2); GLEE_EXTERN GLEEPFNGLRECTXOESPROC GLeeFuncPtr_glRectxOES; #define glRectxOES GLeeFuncPtr_glRectxOES #endif #ifndef GLEE_H_DEFINED_glRectxvOES #define GLEE_H_DEFINED_glRectxvOES typedef void (APIENTRYP GLEEPFNGLRECTXVOESPROC) (const GLfixed * v1, const GLfixed * v2); GLEE_EXTERN GLEEPFNGLRECTXVOESPROC GLeeFuncPtr_glRectxvOES; #define glRectxvOES GLeeFuncPtr_glRectxvOES #endif #ifndef GLEE_H_DEFINED_glRotatexOES #define GLEE_H_DEFINED_glRotatexOES typedef void (APIENTRYP GLEEPFNGLROTATEXOESPROC) (GLfixed angle, GLfixed x, GLfixed y, GLfixed z); GLEE_EXTERN GLEEPFNGLROTATEXOESPROC GLeeFuncPtr_glRotatexOES; #define glRotatexOES GLeeFuncPtr_glRotatexOES #endif #ifndef GLEE_H_DEFINED_glSampleCoverageOES #define GLEE_H_DEFINED_glSampleCoverageOES typedef void (APIENTRYP GLEEPFNGLSAMPLECOVERAGEOESPROC) (GLfixed value, GLboolean invert); GLEE_EXTERN GLEEPFNGLSAMPLECOVERAGEOESPROC GLeeFuncPtr_glSampleCoverageOES; #define glSampleCoverageOES GLeeFuncPtr_glSampleCoverageOES #endif #ifndef GLEE_H_DEFINED_glScalexOES #define GLEE_H_DEFINED_glScalexOES typedef void (APIENTRYP GLEEPFNGLSCALEXOESPROC) (GLfixed x, GLfixed y, GLfixed z); GLEE_EXTERN GLEEPFNGLSCALEXOESPROC GLeeFuncPtr_glScalexOES; #define glScalexOES GLeeFuncPtr_glScalexOES #endif #ifndef GLEE_H_DEFINED_glTexCoord1xOES #define GLEE_H_DEFINED_glTexCoord1xOES typedef void (APIENTRYP GLEEPFNGLTEXCOORD1XOESPROC) (GLfixed s); GLEE_EXTERN GLEEPFNGLTEXCOORD1XOESPROC GLeeFuncPtr_glTexCoord1xOES; #define glTexCoord1xOES GLeeFuncPtr_glTexCoord1xOES #endif #ifndef GLEE_H_DEFINED_glTexCoord2xOES #define GLEE_H_DEFINED_glTexCoord2xOES typedef void (APIENTRYP GLEEPFNGLTEXCOORD2XOESPROC) (GLfixed s, GLfixed t); GLEE_EXTERN GLEEPFNGLTEXCOORD2XOESPROC GLeeFuncPtr_glTexCoord2xOES; #define glTexCoord2xOES GLeeFuncPtr_glTexCoord2xOES #endif #ifndef GLEE_H_DEFINED_glTexCoord3xOES #define GLEE_H_DEFINED_glTexCoord3xOES typedef void (APIENTRYP GLEEPFNGLTEXCOORD3XOESPROC) (GLfixed s, GLfixed t, GLfixed r); GLEE_EXTERN GLEEPFNGLTEXCOORD3XOESPROC GLeeFuncPtr_glTexCoord3xOES; #define glTexCoord3xOES GLeeFuncPtr_glTexCoord3xOES #endif #ifndef GLEE_H_DEFINED_glTexCoord4xOES #define GLEE_H_DEFINED_glTexCoord4xOES typedef void (APIENTRYP GLEEPFNGLTEXCOORD4XOESPROC) (GLfixed s, GLfixed t, GLfixed r, GLfixed q); GLEE_EXTERN GLEEPFNGLTEXCOORD4XOESPROC GLeeFuncPtr_glTexCoord4xOES; #define glTexCoord4xOES GLeeFuncPtr_glTexCoord4xOES #endif #ifndef GLEE_H_DEFINED_glTexCoord1xvOES #define GLEE_H_DEFINED_glTexCoord1xvOES typedef void (APIENTRYP GLEEPFNGLTEXCOORD1XVOESPROC) (const GLfixed * coords); GLEE_EXTERN GLEEPFNGLTEXCOORD1XVOESPROC GLeeFuncPtr_glTexCoord1xvOES; #define glTexCoord1xvOES GLeeFuncPtr_glTexCoord1xvOES #endif #ifndef GLEE_H_DEFINED_glTexCoord2xvOES #define GLEE_H_DEFINED_glTexCoord2xvOES typedef void (APIENTRYP GLEEPFNGLTEXCOORD2XVOESPROC) (const GLfixed * coords); GLEE_EXTERN GLEEPFNGLTEXCOORD2XVOESPROC GLeeFuncPtr_glTexCoord2xvOES; #define glTexCoord2xvOES GLeeFuncPtr_glTexCoord2xvOES #endif #ifndef GLEE_H_DEFINED_glTexCoord3xvOES #define GLEE_H_DEFINED_glTexCoord3xvOES typedef void (APIENTRYP GLEEPFNGLTEXCOORD3XVOESPROC) (const GLfixed * coords); GLEE_EXTERN GLEEPFNGLTEXCOORD3XVOESPROC GLeeFuncPtr_glTexCoord3xvOES; #define glTexCoord3xvOES GLeeFuncPtr_glTexCoord3xvOES #endif #ifndef GLEE_H_DEFINED_glTexCoord4xvOES #define GLEE_H_DEFINED_glTexCoord4xvOES typedef void (APIENTRYP GLEEPFNGLTEXCOORD4XVOESPROC) (const GLfixed * coords); GLEE_EXTERN GLEEPFNGLTEXCOORD4XVOESPROC GLeeFuncPtr_glTexCoord4xvOES; #define glTexCoord4xvOES GLeeFuncPtr_glTexCoord4xvOES #endif #ifndef GLEE_H_DEFINED_glTexEnvxOES #define GLEE_H_DEFINED_glTexEnvxOES typedef void (APIENTRYP GLEEPFNGLTEXENVXOESPROC) (GLenum target, GLenum pname, GLfixed param); GLEE_EXTERN GLEEPFNGLTEXENVXOESPROC GLeeFuncPtr_glTexEnvxOES; #define glTexEnvxOES GLeeFuncPtr_glTexEnvxOES #endif #ifndef GLEE_H_DEFINED_glTexEnvxvOES #define GLEE_H_DEFINED_glTexEnvxvOES typedef void (APIENTRYP GLEEPFNGLTEXENVXVOESPROC) (GLenum target, GLenum pname, const GLfixed * params); GLEE_EXTERN GLEEPFNGLTEXENVXVOESPROC GLeeFuncPtr_glTexEnvxvOES; #define glTexEnvxvOES GLeeFuncPtr_glTexEnvxvOES #endif #ifndef GLEE_H_DEFINED_glTexGenxOES #define GLEE_H_DEFINED_glTexGenxOES typedef void (APIENTRYP GLEEPFNGLTEXGENXOESPROC) (GLenum coord, GLenum pname, GLfixed param); GLEE_EXTERN GLEEPFNGLTEXGENXOESPROC GLeeFuncPtr_glTexGenxOES; #define glTexGenxOES GLeeFuncPtr_glTexGenxOES #endif #ifndef GLEE_H_DEFINED_glTexGenxvOES #define GLEE_H_DEFINED_glTexGenxvOES typedef void (APIENTRYP GLEEPFNGLTEXGENXVOESPROC) (GLenum coord, GLenum pname, const GLfixed * params); GLEE_EXTERN GLEEPFNGLTEXGENXVOESPROC GLeeFuncPtr_glTexGenxvOES; #define glTexGenxvOES GLeeFuncPtr_glTexGenxvOES #endif #ifndef GLEE_H_DEFINED_glTexParameterxOES #define GLEE_H_DEFINED_glTexParameterxOES typedef void (APIENTRYP GLEEPFNGLTEXPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param); GLEE_EXTERN GLEEPFNGLTEXPARAMETERXOESPROC GLeeFuncPtr_glTexParameterxOES; #define glTexParameterxOES GLeeFuncPtr_glTexParameterxOES #endif #ifndef GLEE_H_DEFINED_glTexParameterxvOES #define GLEE_H_DEFINED_glTexParameterxvOES typedef void (APIENTRYP GLEEPFNGLTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed * params); GLEE_EXTERN GLEEPFNGLTEXPARAMETERXVOESPROC GLeeFuncPtr_glTexParameterxvOES; #define glTexParameterxvOES GLeeFuncPtr_glTexParameterxvOES #endif #ifndef GLEE_H_DEFINED_glTranslatexOES #define GLEE_H_DEFINED_glTranslatexOES typedef void (APIENTRYP GLEEPFNGLTRANSLATEXOESPROC) (GLfixed x, GLfixed y, GLfixed z); GLEE_EXTERN GLEEPFNGLTRANSLATEXOESPROC GLeeFuncPtr_glTranslatexOES; #define glTranslatexOES GLeeFuncPtr_glTranslatexOES #endif #ifndef GLEE_H_DEFINED_glVertex2xOES #define GLEE_H_DEFINED_glVertex2xOES typedef void (APIENTRYP GLEEPFNGLVERTEX2XOESPROC) (GLfixed x); GLEE_EXTERN GLEEPFNGLVERTEX2XOESPROC GLeeFuncPtr_glVertex2xOES; #define glVertex2xOES GLeeFuncPtr_glVertex2xOES #endif #ifndef GLEE_H_DEFINED_glVertex3xOES #define GLEE_H_DEFINED_glVertex3xOES typedef void (APIENTRYP GLEEPFNGLVERTEX3XOESPROC) (GLfixed x, GLfixed y); GLEE_EXTERN GLEEPFNGLVERTEX3XOESPROC GLeeFuncPtr_glVertex3xOES; #define glVertex3xOES GLeeFuncPtr_glVertex3xOES #endif #ifndef GLEE_H_DEFINED_glVertex4xOES #define GLEE_H_DEFINED_glVertex4xOES typedef void (APIENTRYP GLEEPFNGLVERTEX4XOESPROC) (GLfixed x, GLfixed y, GLfixed z); GLEE_EXTERN GLEEPFNGLVERTEX4XOESPROC GLeeFuncPtr_glVertex4xOES; #define glVertex4xOES GLeeFuncPtr_glVertex4xOES #endif #ifndef GLEE_H_DEFINED_glVertex2xvOES #define GLEE_H_DEFINED_glVertex2xvOES typedef void (APIENTRYP GLEEPFNGLVERTEX2XVOESPROC) (const GLfixed * coords); GLEE_EXTERN GLEEPFNGLVERTEX2XVOESPROC GLeeFuncPtr_glVertex2xvOES; #define glVertex2xvOES GLeeFuncPtr_glVertex2xvOES #endif #ifndef GLEE_H_DEFINED_glVertex3xvOES #define GLEE_H_DEFINED_glVertex3xvOES typedef void (APIENTRYP GLEEPFNGLVERTEX3XVOESPROC) (const GLfixed * coords); GLEE_EXTERN GLEEPFNGLVERTEX3XVOESPROC GLeeFuncPtr_glVertex3xvOES; #define glVertex3xvOES GLeeFuncPtr_glVertex3xvOES #endif #ifndef GLEE_H_DEFINED_glVertex4xvOES #define GLEE_H_DEFINED_glVertex4xvOES typedef void (APIENTRYP GLEEPFNGLVERTEX4XVOESPROC) (const GLfixed * coords); GLEE_EXTERN GLEEPFNGLVERTEX4XVOESPROC GLeeFuncPtr_glVertex4xvOES; #define glVertex4xvOES GLeeFuncPtr_glVertex4xvOES #endif #endif /* GL_OES_single_precision */ #ifndef GL_OES_single_precision #define GL_OES_single_precision 1 #define __GLEE_GL_OES_single_precision 1 /* Constants */ #ifndef GLEE_H_DEFINED_glDepthRangefOES #define GLEE_H_DEFINED_glDepthRangefOES typedef void (APIENTRYP GLEEPFNGLDEPTHRANGEFOESPROC) (GLclampf n, GLclampf f); GLEE_EXTERN GLEEPFNGLDEPTHRANGEFOESPROC GLeeFuncPtr_glDepthRangefOES; #define glDepthRangefOES GLeeFuncPtr_glDepthRangefOES #endif #ifndef GLEE_H_DEFINED_glFrustumfOES #define GLEE_H_DEFINED_glFrustumfOES typedef void (APIENTRYP GLEEPFNGLFRUSTUMFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); GLEE_EXTERN GLEEPFNGLFRUSTUMFOESPROC GLeeFuncPtr_glFrustumfOES; #define glFrustumfOES GLeeFuncPtr_glFrustumfOES #endif #ifndef GLEE_H_DEFINED_glOrthofOES #define GLEE_H_DEFINED_glOrthofOES typedef void (APIENTRYP GLEEPFNGLORTHOFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); GLEE_EXTERN GLEEPFNGLORTHOFOESPROC GLeeFuncPtr_glOrthofOES; #define glOrthofOES GLeeFuncPtr_glOrthofOES #endif #ifndef GLEE_H_DEFINED_glClipPlanefOES #define GLEE_H_DEFINED_glClipPlanefOES typedef void (APIENTRYP GLEEPFNGLCLIPPLANEFOESPROC) (GLenum plane, const GLfloat * equation); GLEE_EXTERN GLEEPFNGLCLIPPLANEFOESPROC GLeeFuncPtr_glClipPlanefOES; #define glClipPlanefOES GLeeFuncPtr_glClipPlanefOES #endif #ifndef GLEE_H_DEFINED_glClearDepthfOES #define GLEE_H_DEFINED_glClearDepthfOES typedef void (APIENTRYP GLEEPFNGLCLEARDEPTHFOESPROC) (GLclampd depth); GLEE_EXTERN GLEEPFNGLCLEARDEPTHFOESPROC GLeeFuncPtr_glClearDepthfOES; #define glClearDepthfOES GLeeFuncPtr_glClearDepthfOES #endif #ifndef GLEE_H_DEFINED_glGetClipPlanefOES #define GLEE_H_DEFINED_glGetClipPlanefOES typedef void (APIENTRYP GLEEPFNGLGETCLIPPLANEFOESPROC) (GLenum plane, GLfloat * equation); GLEE_EXTERN GLEEPFNGLGETCLIPPLANEFOESPROC GLeeFuncPtr_glGetClipPlanefOES; #define glGetClipPlanefOES GLeeFuncPtr_glGetClipPlanefOES #endif #endif /* GL_OES_compressed_paletted_texture */ #ifndef GL_OES_compressed_paletted_texture #define GL_OES_compressed_paletted_texture 1 #define __GLEE_GL_OES_compressed_paletted_texture 1 /* Constants */ #define GL_PALETTE4_RGB8_OES 0x8B90 #define GL_PALETTE4_RGBA8_OES 0x8B91 #define GL_PALETTE4_R5_G6_B5_OES 0x8B92 #define GL_PALETTE4_RGBA4_OES 0x8B93 #define GL_PALETTE4_RGB5_A1_OES 0x8B94 #define GL_PALETTE8_RGB8_OES 0x8B95 #define GL_PALETTE8_RGBA8_OES 0x8B96 #define GL_PALETTE8_R5_G6_B5_OES 0x8B97 #define GL_PALETTE8_RGBA4_OES 0x8B98 #define GL_PALETTE8_RGB5_A1_OES 0x8B99 #endif /* GL_OES_read_format */ #ifndef GL_OES_read_format #define GL_OES_read_format 1 #define __GLEE_GL_OES_read_format 1 /* Constants */ #define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A #define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B #endif /* GL_OES_query_matrix */ #ifndef GL_OES_query_matrix #define GL_OES_query_matrix 1 #define __GLEE_GL_OES_query_matrix 1 /* Constants */ #ifndef GLEE_H_DEFINED_glQueryMatrixxOES #define GLEE_H_DEFINED_glQueryMatrixxOES typedef GLbitfield (APIENTRYP GLEEPFNGLQUERYMATRIXXOESPROC) (const GLfixed * mantissa, const GLint * exponent); GLEE_EXTERN GLEEPFNGLQUERYMATRIXXOESPROC GLeeFuncPtr_glQueryMatrixxOES; #define glQueryMatrixxOES GLeeFuncPtr_glQueryMatrixxOES #endif #endif /* GL_EXT_depth_bounds_test */ #ifndef GL_EXT_depth_bounds_test #define GL_EXT_depth_bounds_test 1 #define __GLEE_GL_EXT_depth_bounds_test 1 /* Constants */ #define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 #define GL_DEPTH_BOUNDS_EXT 0x8891 #ifndef GLEE_H_DEFINED_glDepthBoundsEXT #define GLEE_H_DEFINED_glDepthBoundsEXT typedef void (APIENTRYP GLEEPFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax); GLEE_EXTERN GLEEPFNGLDEPTHBOUNDSEXTPROC GLeeFuncPtr_glDepthBoundsEXT; #define glDepthBoundsEXT GLeeFuncPtr_glDepthBoundsEXT #endif #endif /* GL_EXT_texture_mirror_clamp */ #ifndef GL_EXT_texture_mirror_clamp #define GL_EXT_texture_mirror_clamp 1 #define __GLEE_GL_EXT_texture_mirror_clamp 1 /* Constants */ #define GL_MIRROR_CLAMP_EXT 0x8742 #define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 #define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912 #endif /* GL_EXT_blend_equation_separate */ #ifndef GL_EXT_blend_equation_separate #define GL_EXT_blend_equation_separate 1 #define __GLEE_GL_EXT_blend_equation_separate 1 /* Constants */ #define GL_BLEND_EQUATION_RGB_EXT 0x8009 #define GL_BLEND_EQUATION_ALPHA_EXT 0x883D #ifndef GLEE_H_DEFINED_glBlendEquationSeparateEXT #define GLEE_H_DEFINED_glBlendEquationSeparateEXT typedef void (APIENTRYP GLEEPFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha); GLEE_EXTERN GLEEPFNGLBLENDEQUATIONSEPARATEEXTPROC GLeeFuncPtr_glBlendEquationSeparateEXT; #define glBlendEquationSeparateEXT GLeeFuncPtr_glBlendEquationSeparateEXT #endif #endif /* GL_MESA_pack_invert */ #ifndef GL_MESA_pack_invert #define GL_MESA_pack_invert 1 #define __GLEE_GL_MESA_pack_invert 1 /* Constants */ #define GL_PACK_INVERT_MESA 0x8758 #endif /* GL_MESA_ycbcr_texture */ #ifndef GL_MESA_ycbcr_texture #define GL_MESA_ycbcr_texture 1 #define __GLEE_GL_MESA_ycbcr_texture 1 /* Constants */ #define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA #define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB #define GL_YCBCR_MESA 0x8757 #endif /* GL_EXT_pixel_buffer_object */ #ifndef GL_EXT_pixel_buffer_object #define GL_EXT_pixel_buffer_object 1 #define __GLEE_GL_EXT_pixel_buffer_object 1 /* Constants */ #define GL_PIXEL_PACK_BUFFER_EXT 0x88EB #define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC #define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED #define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF #endif /* GL_NV_fragment_program_option */ #ifndef GL_NV_fragment_program_option #define GL_NV_fragment_program_option 1 #define __GLEE_GL_NV_fragment_program_option 1 /* Constants */ #endif /* GL_NV_fragment_program2 */ #ifndef GL_NV_fragment_program2 #define GL_NV_fragment_program2 1 #define __GLEE_GL_NV_fragment_program2 1 /* Constants */ #define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 #define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 #define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 #define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 #define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 #endif /* GL_NV_vertex_program2_option */ #ifndef GL_NV_vertex_program2_option #define GL_NV_vertex_program2_option 1 #define __GLEE_GL_NV_vertex_program2_option 1 /* Constants */ #endif /* GL_NV_vertex_program3 */ #ifndef GL_NV_vertex_program3 #define GL_NV_vertex_program3 1 #define __GLEE_GL_NV_vertex_program3 1 /* Constants */ #endif /* GL_EXT_framebuffer_object */ #ifndef GL_EXT_framebuffer_object #define GL_EXT_framebuffer_object 1 #define __GLEE_GL_EXT_framebuffer_object 1 /* Constants */ #define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 #define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 #define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 #define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 #define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 #define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 #define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 #define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 #define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA #define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB #define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC #define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD #define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF #define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 #define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 #define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 #define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 #define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 #define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 #define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 #define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 #define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 #define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 #define GL_COLOR_ATTACHMENT10_EXT 0x8CEA #define GL_COLOR_ATTACHMENT11_EXT 0x8CEB #define GL_COLOR_ATTACHMENT12_EXT 0x8CEC #define GL_COLOR_ATTACHMENT13_EXT 0x8CED #define GL_COLOR_ATTACHMENT14_EXT 0x8CEE #define GL_COLOR_ATTACHMENT15_EXT 0x8CEF #define GL_DEPTH_ATTACHMENT_EXT 0x8D00 #define GL_STENCIL_ATTACHMENT_EXT 0x8D20 #define GL_FRAMEBUFFER_EXT 0x8D40 #define GL_RENDERBUFFER_EXT 0x8D41 #define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 #define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 #define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 #define GL_STENCIL_INDEX1_EXT 0x8D46 #define GL_STENCIL_INDEX4_EXT 0x8D47 #define GL_STENCIL_INDEX8_EXT 0x8D48 #define GL_STENCIL_INDEX16_EXT 0x8D49 #define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 #define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 #define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 #define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 #define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 #define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 #ifndef GLEE_H_DEFINED_glIsRenderbufferEXT #define GLEE_H_DEFINED_glIsRenderbufferEXT typedef GLboolean (APIENTRYP GLEEPFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer); GLEE_EXTERN GLEEPFNGLISRENDERBUFFEREXTPROC GLeeFuncPtr_glIsRenderbufferEXT; #define glIsRenderbufferEXT GLeeFuncPtr_glIsRenderbufferEXT #endif #ifndef GLEE_H_DEFINED_glBindRenderbufferEXT #define GLEE_H_DEFINED_glBindRenderbufferEXT typedef void (APIENTRYP GLEEPFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer); GLEE_EXTERN GLEEPFNGLBINDRENDERBUFFEREXTPROC GLeeFuncPtr_glBindRenderbufferEXT; #define glBindRenderbufferEXT GLeeFuncPtr_glBindRenderbufferEXT #endif #ifndef GLEE_H_DEFINED_glDeleteRenderbuffersEXT #define GLEE_H_DEFINED_glDeleteRenderbuffersEXT typedef void (APIENTRYP GLEEPFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint * renderbuffers); GLEE_EXTERN GLEEPFNGLDELETERENDERBUFFERSEXTPROC GLeeFuncPtr_glDeleteRenderbuffersEXT; #define glDeleteRenderbuffersEXT GLeeFuncPtr_glDeleteRenderbuffersEXT #endif #ifndef GLEE_H_DEFINED_glGenRenderbuffersEXT #define GLEE_H_DEFINED_glGenRenderbuffersEXT typedef void (APIENTRYP GLEEPFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint * renderbuffers); GLEE_EXTERN GLEEPFNGLGENRENDERBUFFERSEXTPROC GLeeFuncPtr_glGenRenderbuffersEXT; #define glGenRenderbuffersEXT GLeeFuncPtr_glGenRenderbuffersEXT #endif #ifndef GLEE_H_DEFINED_glRenderbufferStorageEXT #define GLEE_H_DEFINED_glRenderbufferStorageEXT typedef void (APIENTRYP GLEEPFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLRENDERBUFFERSTORAGEEXTPROC GLeeFuncPtr_glRenderbufferStorageEXT; #define glRenderbufferStorageEXT GLeeFuncPtr_glRenderbufferStorageEXT #endif #ifndef GLEE_H_DEFINED_glGetRenderbufferParameterivEXT #define GLEE_H_DEFINED_glGetRenderbufferParameterivEXT typedef void (APIENTRYP GLEEPFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETRENDERBUFFERPARAMETERIVEXTPROC GLeeFuncPtr_glGetRenderbufferParameterivEXT; #define glGetRenderbufferParameterivEXT GLeeFuncPtr_glGetRenderbufferParameterivEXT #endif #ifndef GLEE_H_DEFINED_glIsFramebufferEXT #define GLEE_H_DEFINED_glIsFramebufferEXT typedef GLboolean (APIENTRYP GLEEPFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer); GLEE_EXTERN GLEEPFNGLISFRAMEBUFFEREXTPROC GLeeFuncPtr_glIsFramebufferEXT; #define glIsFramebufferEXT GLeeFuncPtr_glIsFramebufferEXT #endif #ifndef GLEE_H_DEFINED_glBindFramebufferEXT #define GLEE_H_DEFINED_glBindFramebufferEXT typedef void (APIENTRYP GLEEPFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer); GLEE_EXTERN GLEEPFNGLBINDFRAMEBUFFEREXTPROC GLeeFuncPtr_glBindFramebufferEXT; #define glBindFramebufferEXT GLeeFuncPtr_glBindFramebufferEXT #endif #ifndef GLEE_H_DEFINED_glDeleteFramebuffersEXT #define GLEE_H_DEFINED_glDeleteFramebuffersEXT typedef void (APIENTRYP GLEEPFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint * framebuffers); GLEE_EXTERN GLEEPFNGLDELETEFRAMEBUFFERSEXTPROC GLeeFuncPtr_glDeleteFramebuffersEXT; #define glDeleteFramebuffersEXT GLeeFuncPtr_glDeleteFramebuffersEXT #endif #ifndef GLEE_H_DEFINED_glGenFramebuffersEXT #define GLEE_H_DEFINED_glGenFramebuffersEXT typedef void (APIENTRYP GLEEPFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint * framebuffers); GLEE_EXTERN GLEEPFNGLGENFRAMEBUFFERSEXTPROC GLeeFuncPtr_glGenFramebuffersEXT; #define glGenFramebuffersEXT GLeeFuncPtr_glGenFramebuffersEXT #endif #ifndef GLEE_H_DEFINED_glCheckFramebufferStatusEXT #define GLEE_H_DEFINED_glCheckFramebufferStatusEXT typedef GLenum (APIENTRYP GLEEPFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target); GLEE_EXTERN GLEEPFNGLCHECKFRAMEBUFFERSTATUSEXTPROC GLeeFuncPtr_glCheckFramebufferStatusEXT; #define glCheckFramebufferStatusEXT GLeeFuncPtr_glCheckFramebufferStatusEXT #endif #ifndef GLEE_H_DEFINED_glFramebufferTexture1DEXT #define GLEE_H_DEFINED_glFramebufferTexture1DEXT typedef void (APIENTRYP GLEEPFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERTEXTURE1DEXTPROC GLeeFuncPtr_glFramebufferTexture1DEXT; #define glFramebufferTexture1DEXT GLeeFuncPtr_glFramebufferTexture1DEXT #endif #ifndef GLEE_H_DEFINED_glFramebufferTexture2DEXT #define GLEE_H_DEFINED_glFramebufferTexture2DEXT typedef void (APIENTRYP GLEEPFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERTEXTURE2DEXTPROC GLeeFuncPtr_glFramebufferTexture2DEXT; #define glFramebufferTexture2DEXT GLeeFuncPtr_glFramebufferTexture2DEXT #endif #ifndef GLEE_H_DEFINED_glFramebufferTexture3DEXT #define GLEE_H_DEFINED_glFramebufferTexture3DEXT typedef void (APIENTRYP GLEEPFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERTEXTURE3DEXTPROC GLeeFuncPtr_glFramebufferTexture3DEXT; #define glFramebufferTexture3DEXT GLeeFuncPtr_glFramebufferTexture3DEXT #endif #ifndef GLEE_H_DEFINED_glFramebufferRenderbufferEXT #define GLEE_H_DEFINED_glFramebufferRenderbufferEXT typedef void (APIENTRYP GLEEPFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERRENDERBUFFEREXTPROC GLeeFuncPtr_glFramebufferRenderbufferEXT; #define glFramebufferRenderbufferEXT GLeeFuncPtr_glFramebufferRenderbufferEXT #endif #ifndef GLEE_H_DEFINED_glGetFramebufferAttachmentParameterivEXT #define GLEE_H_DEFINED_glGetFramebufferAttachmentParameterivEXT typedef void (APIENTRYP GLEEPFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC GLeeFuncPtr_glGetFramebufferAttachmentParameterivEXT; #define glGetFramebufferAttachmentParameterivEXT GLeeFuncPtr_glGetFramebufferAttachmentParameterivEXT #endif #ifndef GLEE_H_DEFINED_glGenerateMipmapEXT #define GLEE_H_DEFINED_glGenerateMipmapEXT typedef void (APIENTRYP GLEEPFNGLGENERATEMIPMAPEXTPROC) (GLenum target); GLEE_EXTERN GLEEPFNGLGENERATEMIPMAPEXTPROC GLeeFuncPtr_glGenerateMipmapEXT; #define glGenerateMipmapEXT GLeeFuncPtr_glGenerateMipmapEXT #endif #endif /* GL_GREMEDY_string_marker */ #ifndef GL_GREMEDY_string_marker #define GL_GREMEDY_string_marker 1 #define __GLEE_GL_GREMEDY_string_marker 1 /* Constants */ #ifndef GLEE_H_DEFINED_glStringMarkerGREMEDY #define GLEE_H_DEFINED_glStringMarkerGREMEDY typedef void (APIENTRYP GLEEPFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const GLvoid * string); GLEE_EXTERN GLEEPFNGLSTRINGMARKERGREMEDYPROC GLeeFuncPtr_glStringMarkerGREMEDY; #define glStringMarkerGREMEDY GLeeFuncPtr_glStringMarkerGREMEDY #endif #endif /* GL_EXT_packed_depth_stencil */ #ifndef GL_EXT_packed_depth_stencil #define GL_EXT_packed_depth_stencil 1 #define __GLEE_GL_EXT_packed_depth_stencil 1 /* Constants */ #define GL_DEPTH_STENCIL_EXT 0x84F9 #define GL_UNSIGNED_INT_24_8_EXT 0x84FA #define GL_DEPTH24_STENCIL8_EXT 0x88F0 #define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1 #endif /* GL_EXT_stencil_clear_tag */ #ifndef GL_EXT_stencil_clear_tag #define GL_EXT_stencil_clear_tag 1 #define __GLEE_GL_EXT_stencil_clear_tag 1 /* Constants */ #define GL_STENCIL_TAG_BITS_EXT 0x88F2 #define GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3 #ifndef GLEE_H_DEFINED_glStencilClearTagEXT #define GLEE_H_DEFINED_glStencilClearTagEXT typedef void (APIENTRYP GLEEPFNGLSTENCILCLEARTAGEXTPROC) (GLsizei stencilTagBits, GLuint stencilClearTag); GLEE_EXTERN GLEEPFNGLSTENCILCLEARTAGEXTPROC GLeeFuncPtr_glStencilClearTagEXT; #define glStencilClearTagEXT GLeeFuncPtr_glStencilClearTagEXT #endif #endif /* GL_EXT_texture_sRGB */ #ifndef GL_EXT_texture_sRGB #define GL_EXT_texture_sRGB 1 #define __GLEE_GL_EXT_texture_sRGB 1 /* Constants */ #define GL_SRGB_EXT 0x8C40 #define GL_SRGB8_EXT 0x8C41 #define GL_SRGB_ALPHA_EXT 0x8C42 #define GL_SRGB8_ALPHA8_EXT 0x8C43 #define GL_SLUMINANCE_ALPHA_EXT 0x8C44 #define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45 #define GL_SLUMINANCE_EXT 0x8C46 #define GL_SLUMINANCE8_EXT 0x8C47 #define GL_COMPRESSED_SRGB_EXT 0x8C48 #define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49 #define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A #define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B #define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F #endif /* GL_EXT_framebuffer_blit */ #ifndef GL_EXT_framebuffer_blit #define GL_EXT_framebuffer_blit 1 #define __GLEE_GL_EXT_framebuffer_blit 1 /* Constants */ #define GL_READ_FRAMEBUFFER_EXT 0x8CA8 #define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 #define GL_DRAW_FRAMEBUFFER_BINDING_EXT GL_FRAMEBUFFER_BINDING_EXT #define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA #ifndef GLEE_H_DEFINED_glBlitFramebufferEXT #define GLEE_H_DEFINED_glBlitFramebufferEXT typedef void (APIENTRYP GLEEPFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); GLEE_EXTERN GLEEPFNGLBLITFRAMEBUFFEREXTPROC GLeeFuncPtr_glBlitFramebufferEXT; #define glBlitFramebufferEXT GLeeFuncPtr_glBlitFramebufferEXT #endif #endif /* GL_EXT_framebuffer_multisample */ #ifndef GL_EXT_framebuffer_multisample #define GL_EXT_framebuffer_multisample 1 #define __GLEE_GL_EXT_framebuffer_multisample 1 /* Constants */ #define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 #define GL_MAX_SAMPLES_EXT 0x8D57 #ifndef GLEE_H_DEFINED_glRenderbufferStorageMultisampleEXT #define GLEE_H_DEFINED_glRenderbufferStorageMultisampleEXT typedef void (APIENTRYP GLEEPFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC GLeeFuncPtr_glRenderbufferStorageMultisampleEXT; #define glRenderbufferStorageMultisampleEXT GLeeFuncPtr_glRenderbufferStorageMultisampleEXT #endif #endif /* GL_MESAX_texture_stack */ #ifndef GL_MESAX_texture_stack #define GL_MESAX_texture_stack 1 #define __GLEE_GL_MESAX_texture_stack 1 /* Constants */ #define GL_TEXTURE_1D_STACK_MESAX 0x8759 #define GL_TEXTURE_2D_STACK_MESAX 0x875A #define GL_PROXY_TEXTURE_1D_STACK_MESAX 0x875B #define GL_PROXY_TEXTURE_2D_STACK_MESAX 0x875C #define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D #define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E #endif /* GL_EXT_timer_query */ #ifndef GL_EXT_timer_query #define GL_EXT_timer_query 1 #define __GLEE_GL_EXT_timer_query 1 /* Constants */ #define GL_TIME_ELAPSED_EXT 0x88BF #ifndef GLEE_H_DEFINED_glGetQueryObjecti64vEXT #define GLEE_H_DEFINED_glGetQueryObjecti64vEXT typedef void (APIENTRYP GLEEPFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64EXT * params); GLEE_EXTERN GLEEPFNGLGETQUERYOBJECTI64VEXTPROC GLeeFuncPtr_glGetQueryObjecti64vEXT; #define glGetQueryObjecti64vEXT GLeeFuncPtr_glGetQueryObjecti64vEXT #endif #ifndef GLEE_H_DEFINED_glGetQueryObjectui64vEXT #define GLEE_H_DEFINED_glGetQueryObjectui64vEXT typedef void (APIENTRYP GLEEPFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64EXT * params); GLEE_EXTERN GLEEPFNGLGETQUERYOBJECTUI64VEXTPROC GLeeFuncPtr_glGetQueryObjectui64vEXT; #define glGetQueryObjectui64vEXT GLeeFuncPtr_glGetQueryObjectui64vEXT #endif #endif /* GL_EXT_gpu_program_parameters */ #ifndef GL_EXT_gpu_program_parameters #define GL_EXT_gpu_program_parameters 1 #define __GLEE_GL_EXT_gpu_program_parameters 1 /* Constants */ #ifndef GLEE_H_DEFINED_glProgramEnvParameters4fvEXT #define GLEE_H_DEFINED_glProgramEnvParameters4fvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMENVPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat * params); GLEE_EXTERN GLEEPFNGLPROGRAMENVPARAMETERS4FVEXTPROC GLeeFuncPtr_glProgramEnvParameters4fvEXT; #define glProgramEnvParameters4fvEXT GLeeFuncPtr_glProgramEnvParameters4fvEXT #endif #ifndef GLEE_H_DEFINED_glProgramLocalParameters4fvEXT #define GLEE_H_DEFINED_glProgramLocalParameters4fvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat * params); GLEE_EXTERN GLEEPFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC GLeeFuncPtr_glProgramLocalParameters4fvEXT; #define glProgramLocalParameters4fvEXT GLeeFuncPtr_glProgramLocalParameters4fvEXT #endif #endif /* GL_APPLE_flush_buffer_range */ #ifndef GL_APPLE_flush_buffer_range #define GL_APPLE_flush_buffer_range 1 #define __GLEE_GL_APPLE_flush_buffer_range 1 /* Constants */ #define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12 #define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13 #ifndef GLEE_H_DEFINED_glBufferParameteriAPPLE #define GLEE_H_DEFINED_glBufferParameteriAPPLE typedef void (APIENTRYP GLEEPFNGLBUFFERPARAMETERIAPPLEPROC) (GLenum target, GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLBUFFERPARAMETERIAPPLEPROC GLeeFuncPtr_glBufferParameteriAPPLE; #define glBufferParameteriAPPLE GLeeFuncPtr_glBufferParameteriAPPLE #endif #ifndef GLEE_H_DEFINED_glFlushMappedBufferRangeAPPLE #define GLEE_H_DEFINED_glFlushMappedBufferRangeAPPLE typedef void (APIENTRYP GLEEPFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) (GLenum target, GLintptr offset, GLsizeiptr size); GLEE_EXTERN GLEEPFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC GLeeFuncPtr_glFlushMappedBufferRangeAPPLE; #define glFlushMappedBufferRangeAPPLE GLeeFuncPtr_glFlushMappedBufferRangeAPPLE #endif #endif /* GL_EXT_gpu_shader4 */ #ifndef GL_EXT_gpu_shader4 #define GL_EXT_gpu_shader4 1 #define __GLEE_GL_EXT_gpu_shader4 1 /* Constants */ #define GL_SAMPLER_1D_ARRAY_EXT 0x8DC0 #define GL_SAMPLER_2D_ARRAY_EXT 0x8DC1 #define GL_SAMPLER_BUFFER_EXT 0x8DC2 #define GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3 #define GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4 #define GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5 #define GL_UNSIGNED_INT_VEC2_EXT 0x8DC6 #define GL_UNSIGNED_INT_VEC3_EXT 0x8DC7 #define GL_UNSIGNED_INT_VEC4_EXT 0x8DC8 #define GL_INT_SAMPLER_1D_EXT 0x8DC9 #define GL_INT_SAMPLER_2D_EXT 0x8DCA #define GL_INT_SAMPLER_3D_EXT 0x8DCB #define GL_INT_SAMPLER_CUBE_EXT 0x8DCC #define GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD #define GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE #define GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF #define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0 #define GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1 #define GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2 #define GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3 #define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4 #define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5 #define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6 #define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7 #define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8 #ifndef GLEE_H_DEFINED_glGetUniformuivEXT #define GLEE_H_DEFINED_glGetUniformuivEXT typedef void (APIENTRYP GLEEPFNGLGETUNIFORMUIVEXTPROC) (GLuint program, GLint location, GLuint * params); GLEE_EXTERN GLEEPFNGLGETUNIFORMUIVEXTPROC GLeeFuncPtr_glGetUniformuivEXT; #define glGetUniformuivEXT GLeeFuncPtr_glGetUniformuivEXT #endif #ifndef GLEE_H_DEFINED_glBindFragDataLocationEXT #define GLEE_H_DEFINED_glBindFragDataLocationEXT typedef void (APIENTRYP GLEEPFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar * name); GLEE_EXTERN GLEEPFNGLBINDFRAGDATALOCATIONEXTPROC GLeeFuncPtr_glBindFragDataLocationEXT; #define glBindFragDataLocationEXT GLeeFuncPtr_glBindFragDataLocationEXT #endif #ifndef GLEE_H_DEFINED_glGetFragDataLocationEXT #define GLEE_H_DEFINED_glGetFragDataLocationEXT typedef GLint (APIENTRYP GLEEPFNGLGETFRAGDATALOCATIONEXTPROC) (GLuint program, const GLchar * name); GLEE_EXTERN GLEEPFNGLGETFRAGDATALOCATIONEXTPROC GLeeFuncPtr_glGetFragDataLocationEXT; #define glGetFragDataLocationEXT GLeeFuncPtr_glGetFragDataLocationEXT #endif #ifndef GLEE_H_DEFINED_glUniform1uiEXT #define GLEE_H_DEFINED_glUniform1uiEXT typedef void (APIENTRYP GLEEPFNGLUNIFORM1UIEXTPROC) (GLint location, GLuint v0); GLEE_EXTERN GLEEPFNGLUNIFORM1UIEXTPROC GLeeFuncPtr_glUniform1uiEXT; #define glUniform1uiEXT GLeeFuncPtr_glUniform1uiEXT #endif #ifndef GLEE_H_DEFINED_glUniform2uiEXT #define GLEE_H_DEFINED_glUniform2uiEXT typedef void (APIENTRYP GLEEPFNGLUNIFORM2UIEXTPROC) (GLint location, GLuint v0, GLuint v1); GLEE_EXTERN GLEEPFNGLUNIFORM2UIEXTPROC GLeeFuncPtr_glUniform2uiEXT; #define glUniform2uiEXT GLeeFuncPtr_glUniform2uiEXT #endif #ifndef GLEE_H_DEFINED_glUniform3uiEXT #define GLEE_H_DEFINED_glUniform3uiEXT typedef void (APIENTRYP GLEEPFNGLUNIFORM3UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); GLEE_EXTERN GLEEPFNGLUNIFORM3UIEXTPROC GLeeFuncPtr_glUniform3uiEXT; #define glUniform3uiEXT GLeeFuncPtr_glUniform3uiEXT #endif #ifndef GLEE_H_DEFINED_glUniform4uiEXT #define GLEE_H_DEFINED_glUniform4uiEXT typedef void (APIENTRYP GLEEPFNGLUNIFORM4UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); GLEE_EXTERN GLEEPFNGLUNIFORM4UIEXTPROC GLeeFuncPtr_glUniform4uiEXT; #define glUniform4uiEXT GLeeFuncPtr_glUniform4uiEXT #endif #ifndef GLEE_H_DEFINED_glUniform1uivEXT #define GLEE_H_DEFINED_glUniform1uivEXT typedef void (APIENTRYP GLEEPFNGLUNIFORM1UIVEXTPROC) (GLint location, GLsizei count, const GLuint * value); GLEE_EXTERN GLEEPFNGLUNIFORM1UIVEXTPROC GLeeFuncPtr_glUniform1uivEXT; #define glUniform1uivEXT GLeeFuncPtr_glUniform1uivEXT #endif #ifndef GLEE_H_DEFINED_glUniform2uivEXT #define GLEE_H_DEFINED_glUniform2uivEXT typedef void (APIENTRYP GLEEPFNGLUNIFORM2UIVEXTPROC) (GLint location, GLsizei count, const GLuint * value); GLEE_EXTERN GLEEPFNGLUNIFORM2UIVEXTPROC GLeeFuncPtr_glUniform2uivEXT; #define glUniform2uivEXT GLeeFuncPtr_glUniform2uivEXT #endif #ifndef GLEE_H_DEFINED_glUniform3uivEXT #define GLEE_H_DEFINED_glUniform3uivEXT typedef void (APIENTRYP GLEEPFNGLUNIFORM3UIVEXTPROC) (GLint location, GLsizei count, const GLuint * value); GLEE_EXTERN GLEEPFNGLUNIFORM3UIVEXTPROC GLeeFuncPtr_glUniform3uivEXT; #define glUniform3uivEXT GLeeFuncPtr_glUniform3uivEXT #endif #ifndef GLEE_H_DEFINED_glUniform4uivEXT #define GLEE_H_DEFINED_glUniform4uivEXT typedef void (APIENTRYP GLEEPFNGLUNIFORM4UIVEXTPROC) (GLint location, GLsizei count, const GLuint * value); GLEE_EXTERN GLEEPFNGLUNIFORM4UIVEXTPROC GLeeFuncPtr_glUniform4uivEXT; #define glUniform4uivEXT GLeeFuncPtr_glUniform4uivEXT #endif #endif /* GL_EXT_draw_instanced */ #ifndef GL_EXT_draw_instanced #define GL_EXT_draw_instanced 1 #define __GLEE_GL_EXT_draw_instanced 1 /* Constants */ #ifndef GLEE_H_DEFINED_glDrawArraysInstancedEXT #define GLEE_H_DEFINED_glDrawArraysInstancedEXT typedef void (APIENTRYP GLEEPFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount); GLEE_EXTERN GLEEPFNGLDRAWARRAYSINSTANCEDEXTPROC GLeeFuncPtr_glDrawArraysInstancedEXT; #define glDrawArraysInstancedEXT GLeeFuncPtr_glDrawArraysInstancedEXT #endif #ifndef GLEE_H_DEFINED_glDrawElementsInstancedEXT #define GLEE_H_DEFINED_glDrawElementsInstancedEXT typedef void (APIENTRYP GLEEPFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLsizei primcount); GLEE_EXTERN GLEEPFNGLDRAWELEMENTSINSTANCEDEXTPROC GLeeFuncPtr_glDrawElementsInstancedEXT; #define glDrawElementsInstancedEXT GLeeFuncPtr_glDrawElementsInstancedEXT #endif #endif /* GL_EXT_packed_float */ #ifndef GL_EXT_packed_float #define GL_EXT_packed_float 1 #define __GLEE_GL_EXT_packed_float 1 /* Constants */ #define GL_R11F_G11F_B10F_EXT 0x8C3A #define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B #define GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C #endif /* GL_EXT_texture_array */ #ifndef GL_EXT_texture_array #define GL_EXT_texture_array 1 #define __GLEE_GL_EXT_texture_array 1 /* Constants */ #define GL_TEXTURE_1D_ARRAY_EXT 0x8C18 #define GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19 #define GL_TEXTURE_2D_ARRAY_EXT 0x8C1A #define GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B #define GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C #define GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D #define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF #define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E #endif /* GL_EXT_texture_buffer_object */ #ifndef GL_EXT_texture_buffer_object #define GL_EXT_texture_buffer_object 1 #define __GLEE_GL_EXT_texture_buffer_object 1 /* Constants */ #define GL_TEXTURE_BUFFER_EXT 0x8C2A #define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B #define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C #define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D #define GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E #ifndef GLEE_H_DEFINED_glTexBufferEXT #define GLEE_H_DEFINED_glTexBufferEXT typedef void (APIENTRYP GLEEPFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer); GLEE_EXTERN GLEEPFNGLTEXBUFFEREXTPROC GLeeFuncPtr_glTexBufferEXT; #define glTexBufferEXT GLeeFuncPtr_glTexBufferEXT #endif #endif /* GL_EXT_texture_compression_latc */ #ifndef GL_EXT_texture_compression_latc #define GL_EXT_texture_compression_latc 1 #define __GLEE_GL_EXT_texture_compression_latc 1 /* Constants */ #define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70 #define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71 #define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72 #define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73 #endif /* GL_EXT_texture_compression_rgtc */ #ifndef GL_EXT_texture_compression_rgtc #define GL_EXT_texture_compression_rgtc 1 #define __GLEE_GL_EXT_texture_compression_rgtc 1 /* Constants */ #define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB #define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC #define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD #define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE #endif /* GL_EXT_texture_shared_exponent */ #ifndef GL_EXT_texture_shared_exponent #define GL_EXT_texture_shared_exponent 1 #define __GLEE_GL_EXT_texture_shared_exponent 1 /* Constants */ #define GL_RGB9_E5_EXT 0x8C3D #define GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E #define GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F #endif /* GL_NV_depth_buffer_float */ #ifndef GL_NV_depth_buffer_float #define GL_NV_depth_buffer_float 1 #define __GLEE_GL_NV_depth_buffer_float 1 /* Constants */ #define GL_DEPTH_COMPONENT32F_NV 0x8DAB #define GL_DEPTH32F_STENCIL8_NV 0x8DAC #define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD #define GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF #ifndef GLEE_H_DEFINED_glDepthRangedNV #define GLEE_H_DEFINED_glDepthRangedNV typedef void (APIENTRYP GLEEPFNGLDEPTHRANGEDNVPROC) (GLdouble zNear, GLdouble zFar); GLEE_EXTERN GLEEPFNGLDEPTHRANGEDNVPROC GLeeFuncPtr_glDepthRangedNV; #define glDepthRangedNV GLeeFuncPtr_glDepthRangedNV #endif #ifndef GLEE_H_DEFINED_glClearDepthdNV #define GLEE_H_DEFINED_glClearDepthdNV typedef void (APIENTRYP GLEEPFNGLCLEARDEPTHDNVPROC) (GLdouble depth); GLEE_EXTERN GLEEPFNGLCLEARDEPTHDNVPROC GLeeFuncPtr_glClearDepthdNV; #define glClearDepthdNV GLeeFuncPtr_glClearDepthdNV #endif #ifndef GLEE_H_DEFINED_glDepthBoundsdNV #define GLEE_H_DEFINED_glDepthBoundsdNV typedef void (APIENTRYP GLEEPFNGLDEPTHBOUNDSDNVPROC) (GLdouble zmin, GLdouble zmax); GLEE_EXTERN GLEEPFNGLDEPTHBOUNDSDNVPROC GLeeFuncPtr_glDepthBoundsdNV; #define glDepthBoundsdNV GLeeFuncPtr_glDepthBoundsdNV #endif #endif /* GL_NV_framebuffer_multisample_coverage */ #ifndef GL_NV_framebuffer_multisample_coverage #define GL_NV_framebuffer_multisample_coverage 1 #define __GLEE_GL_NV_framebuffer_multisample_coverage 1 /* Constants */ #define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB #define GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10 #define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11 #define GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12 #ifndef GLEE_H_DEFINED_glRenderbufferStorageMultisampleCoverageNV #define GLEE_H_DEFINED_glRenderbufferStorageMultisampleCoverageNV typedef void (APIENTRYP GLEEPFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC GLeeFuncPtr_glRenderbufferStorageMultisampleCoverageNV; #define glRenderbufferStorageMultisampleCoverageNV GLeeFuncPtr_glRenderbufferStorageMultisampleCoverageNV #endif #endif /* GL_EXT_framebuffer_sRGB */ #ifndef GL_EXT_framebuffer_sRGB #define GL_EXT_framebuffer_sRGB 1 #define __GLEE_GL_EXT_framebuffer_sRGB 1 /* Constants */ #define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 #define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA #endif /* GL_NV_geometry_shader4 */ #ifndef GL_NV_geometry_shader4 #define GL_NV_geometry_shader4 1 #define __GLEE_GL_NV_geometry_shader4 1 /* Constants */ #endif /* GL_NV_parameter_buffer_object */ #ifndef GL_NV_parameter_buffer_object #define GL_NV_parameter_buffer_object 1 #define __GLEE_GL_NV_parameter_buffer_object 1 /* Constants */ #define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0 #define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1 #define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2 #define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3 #define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4 #ifndef GLEE_H_DEFINED_glProgramBufferParametersfvNV #define GLEE_H_DEFINED_glProgramBufferParametersfvNV typedef void (APIENTRYP GLEEPFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat * params); GLEE_EXTERN GLEEPFNGLPROGRAMBUFFERPARAMETERSFVNVPROC GLeeFuncPtr_glProgramBufferParametersfvNV; #define glProgramBufferParametersfvNV GLeeFuncPtr_glProgramBufferParametersfvNV #endif #ifndef GLEE_H_DEFINED_glProgramBufferParametersIivNV #define GLEE_H_DEFINED_glProgramBufferParametersIivNV typedef void (APIENTRYP GLEEPFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint * params); GLEE_EXTERN GLEEPFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC GLeeFuncPtr_glProgramBufferParametersIivNV; #define glProgramBufferParametersIivNV GLeeFuncPtr_glProgramBufferParametersIivNV #endif #ifndef GLEE_H_DEFINED_glProgramBufferParametersIuivNV #define GLEE_H_DEFINED_glProgramBufferParametersIuivNV typedef void (APIENTRYP GLEEPFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint * params); GLEE_EXTERN GLEEPFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC GLeeFuncPtr_glProgramBufferParametersIuivNV; #define glProgramBufferParametersIuivNV GLeeFuncPtr_glProgramBufferParametersIuivNV #endif #endif /* GL_EXT_draw_buffers2 */ #ifndef GL_EXT_draw_buffers2 #define GL_EXT_draw_buffers2 1 #define __GLEE_GL_EXT_draw_buffers2 1 /* Constants */ #ifndef GLEE_H_DEFINED_glColorMaskIndexedEXT #define GLEE_H_DEFINED_glColorMaskIndexedEXT typedef void (APIENTRYP GLEEPFNGLCOLORMASKINDEXEDEXTPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); GLEE_EXTERN GLEEPFNGLCOLORMASKINDEXEDEXTPROC GLeeFuncPtr_glColorMaskIndexedEXT; #define glColorMaskIndexedEXT GLeeFuncPtr_glColorMaskIndexedEXT #endif #ifndef GLEE_H_DEFINED_glGetBooleanIndexedvEXT #define GLEE_H_DEFINED_glGetBooleanIndexedvEXT typedef void (APIENTRYP GLEEPFNGLGETBOOLEANINDEXEDVEXTPROC) (GLenum target, GLuint index, GLboolean * data); GLEE_EXTERN GLEEPFNGLGETBOOLEANINDEXEDVEXTPROC GLeeFuncPtr_glGetBooleanIndexedvEXT; #define glGetBooleanIndexedvEXT GLeeFuncPtr_glGetBooleanIndexedvEXT #endif #ifndef GLEE_H_DEFINED_glGetIntegerIndexedvEXT #define GLEE_H_DEFINED_glGetIntegerIndexedvEXT typedef void (APIENTRYP GLEEPFNGLGETINTEGERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLint * data); GLEE_EXTERN GLEEPFNGLGETINTEGERINDEXEDVEXTPROC GLeeFuncPtr_glGetIntegerIndexedvEXT; #define glGetIntegerIndexedvEXT GLeeFuncPtr_glGetIntegerIndexedvEXT #endif #ifndef GLEE_H_DEFINED_glEnableIndexedEXT #define GLEE_H_DEFINED_glEnableIndexedEXT typedef void (APIENTRYP GLEEPFNGLENABLEINDEXEDEXTPROC) (GLenum target, GLuint index); GLEE_EXTERN GLEEPFNGLENABLEINDEXEDEXTPROC GLeeFuncPtr_glEnableIndexedEXT; #define glEnableIndexedEXT GLeeFuncPtr_glEnableIndexedEXT #endif #ifndef GLEE_H_DEFINED_glDisableIndexedEXT #define GLEE_H_DEFINED_glDisableIndexedEXT typedef void (APIENTRYP GLEEPFNGLDISABLEINDEXEDEXTPROC) (GLenum target, GLuint index); GLEE_EXTERN GLEEPFNGLDISABLEINDEXEDEXTPROC GLeeFuncPtr_glDisableIndexedEXT; #define glDisableIndexedEXT GLeeFuncPtr_glDisableIndexedEXT #endif #ifndef GLEE_H_DEFINED_glIsEnabledIndexedEXT #define GLEE_H_DEFINED_glIsEnabledIndexedEXT typedef GLboolean (APIENTRYP GLEEPFNGLISENABLEDINDEXEDEXTPROC) (GLenum target, GLuint index); GLEE_EXTERN GLEEPFNGLISENABLEDINDEXEDEXTPROC GLeeFuncPtr_glIsEnabledIndexedEXT; #define glIsEnabledIndexedEXT GLeeFuncPtr_glIsEnabledIndexedEXT #endif #endif /* GL_NV_transform_feedback */ #ifndef GL_NV_transform_feedback #define GL_NV_transform_feedback 1 #define __GLEE_GL_NV_transform_feedback 1 /* Constants */ #define GL_BACK_PRIMARY_COLOR_NV 0x8C77 #define GL_BACK_SECONDARY_COLOR_NV 0x8C78 #define GL_TEXTURE_COORD_NV 0x8C79 #define GL_CLIP_DISTANCE_NV 0x8C7A #define GL_VERTEX_ID_NV 0x8C7B #define GL_PRIMITIVE_ID_NV 0x8C7C #define GL_GENERIC_ATTRIB_NV 0x8C7D #define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E #define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80 #define GL_ACTIVE_VARYINGS_NV 0x8C81 #define GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82 #define GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83 #define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84 #define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85 #define GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86 #define GL_PRIMITIVES_GENERATED_NV 0x8C87 #define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88 #define GL_RASTERIZER_DISCARD_NV 0x8C89 #define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B #define GL_INTERLEAVED_ATTRIBS_NV 0x8C8C #define GL_SEPARATE_ATTRIBS_NV 0x8C8D #define GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E #define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F #define GL_LAYER_NV 0x8DAA #define GL_NEXT_BUFFER_NV -2 #define GL_SKIP_COMPONENTS4_NV -3 #define GL_SKIP_COMPONENTS3_NV -4 #define GL_SKIP_COMPONENTS2_NV -5 #define GL_SKIP_COMPONENTS1_NV -6 #ifndef GLEE_H_DEFINED_glBeginTransformFeedbackNV #define GLEE_H_DEFINED_glBeginTransformFeedbackNV typedef void (APIENTRYP GLEEPFNGLBEGINTRANSFORMFEEDBACKNVPROC) (GLenum primitiveMode); GLEE_EXTERN GLEEPFNGLBEGINTRANSFORMFEEDBACKNVPROC GLeeFuncPtr_glBeginTransformFeedbackNV; #define glBeginTransformFeedbackNV GLeeFuncPtr_glBeginTransformFeedbackNV #endif #ifndef GLEE_H_DEFINED_glEndTransformFeedbackNV #define GLEE_H_DEFINED_glEndTransformFeedbackNV typedef void (APIENTRYP GLEEPFNGLENDTRANSFORMFEEDBACKNVPROC) (); GLEE_EXTERN GLEEPFNGLENDTRANSFORMFEEDBACKNVPROC GLeeFuncPtr_glEndTransformFeedbackNV; #define glEndTransformFeedbackNV GLeeFuncPtr_glEndTransformFeedbackNV #endif #ifndef GLEE_H_DEFINED_glTransformFeedbackAttribsNV #define GLEE_H_DEFINED_glTransformFeedbackAttribsNV typedef void (APIENTRYP GLEEPFNGLTRANSFORMFEEDBACKATTRIBSNVPROC) (GLuint count, const GLint * attribs, GLenum bufferMode); GLEE_EXTERN GLEEPFNGLTRANSFORMFEEDBACKATTRIBSNVPROC GLeeFuncPtr_glTransformFeedbackAttribsNV; #define glTransformFeedbackAttribsNV GLeeFuncPtr_glTransformFeedbackAttribsNV #endif #ifndef GLEE_H_DEFINED_glBindBufferRangeNV #define GLEE_H_DEFINED_glBindBufferRangeNV typedef void (APIENTRYP GLEEPFNGLBINDBUFFERRANGENVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); GLEE_EXTERN GLEEPFNGLBINDBUFFERRANGENVPROC GLeeFuncPtr_glBindBufferRangeNV; #define glBindBufferRangeNV GLeeFuncPtr_glBindBufferRangeNV #endif #ifndef GLEE_H_DEFINED_glBindBufferOffsetNV #define GLEE_H_DEFINED_glBindBufferOffsetNV typedef void (APIENTRYP GLEEPFNGLBINDBUFFEROFFSETNVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); GLEE_EXTERN GLEEPFNGLBINDBUFFEROFFSETNVPROC GLeeFuncPtr_glBindBufferOffsetNV; #define glBindBufferOffsetNV GLeeFuncPtr_glBindBufferOffsetNV #endif #ifndef GLEE_H_DEFINED_glBindBufferBaseNV #define GLEE_H_DEFINED_glBindBufferBaseNV typedef void (APIENTRYP GLEEPFNGLBINDBUFFERBASENVPROC) (GLenum target, GLuint index, GLuint buffer); GLEE_EXTERN GLEEPFNGLBINDBUFFERBASENVPROC GLeeFuncPtr_glBindBufferBaseNV; #define glBindBufferBaseNV GLeeFuncPtr_glBindBufferBaseNV #endif #ifndef GLEE_H_DEFINED_glTransformFeedbackVaryingsNV #define GLEE_H_DEFINED_glTransformFeedbackVaryingsNV typedef void (APIENTRYP GLEEPFNGLTRANSFORMFEEDBACKVARYINGSNVPROC) (GLuint program, GLsizei count, const GLint * locations, GLenum bufferMode); GLEE_EXTERN GLEEPFNGLTRANSFORMFEEDBACKVARYINGSNVPROC GLeeFuncPtr_glTransformFeedbackVaryingsNV; #define glTransformFeedbackVaryingsNV GLeeFuncPtr_glTransformFeedbackVaryingsNV #endif #ifndef GLEE_H_DEFINED_glActiveVaryingNV #define GLEE_H_DEFINED_glActiveVaryingNV typedef void (APIENTRYP GLEEPFNGLACTIVEVARYINGNVPROC) (GLuint program, const GLchar * name); GLEE_EXTERN GLEEPFNGLACTIVEVARYINGNVPROC GLeeFuncPtr_glActiveVaryingNV; #define glActiveVaryingNV GLeeFuncPtr_glActiveVaryingNV #endif #ifndef GLEE_H_DEFINED_glGetVaryingLocationNV #define GLEE_H_DEFINED_glGetVaryingLocationNV typedef GLint (APIENTRYP GLEEPFNGLGETVARYINGLOCATIONNVPROC) (GLuint program, const GLchar * name); GLEE_EXTERN GLEEPFNGLGETVARYINGLOCATIONNVPROC GLeeFuncPtr_glGetVaryingLocationNV; #define glGetVaryingLocationNV GLeeFuncPtr_glGetVaryingLocationNV #endif #ifndef GLEE_H_DEFINED_glGetActiveVaryingNV #define GLEE_H_DEFINED_glGetActiveVaryingNV typedef void (APIENTRYP GLEEPFNGLGETACTIVEVARYINGNVPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name); GLEE_EXTERN GLEEPFNGLGETACTIVEVARYINGNVPROC GLeeFuncPtr_glGetActiveVaryingNV; #define glGetActiveVaryingNV GLeeFuncPtr_glGetActiveVaryingNV #endif #ifndef GLEE_H_DEFINED_glGetTransformFeedbackVaryingNV #define GLEE_H_DEFINED_glGetTransformFeedbackVaryingNV typedef void (APIENTRYP GLEEPFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC) (GLuint program, GLuint index, GLint * location); GLEE_EXTERN GLEEPFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC GLeeFuncPtr_glGetTransformFeedbackVaryingNV; #define glGetTransformFeedbackVaryingNV GLeeFuncPtr_glGetTransformFeedbackVaryingNV #endif #ifndef GLEE_H_DEFINED_glTransformFeedbackStreamAttribsNV #define GLEE_H_DEFINED_glTransformFeedbackStreamAttribsNV typedef void (APIENTRYP GLEEPFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC) (GLsizei count, const GLint * attribs, GLsizei nbuffers, const GLint * bufstreams, GLenum bufferMode); GLEE_EXTERN GLEEPFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC GLeeFuncPtr_glTransformFeedbackStreamAttribsNV; #define glTransformFeedbackStreamAttribsNV GLeeFuncPtr_glTransformFeedbackStreamAttribsNV #endif #endif /* GL_EXT_bindable_uniform */ #ifndef GL_EXT_bindable_uniform #define GL_EXT_bindable_uniform 1 #define __GLEE_GL_EXT_bindable_uniform 1 /* Constants */ #define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2 #define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3 #define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4 #define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED #define GL_UNIFORM_BUFFER_EXT 0x8DEE #define GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF #ifndef GLEE_H_DEFINED_glUniformBufferEXT #define GLEE_H_DEFINED_glUniformBufferEXT typedef void (APIENTRYP GLEEPFNGLUNIFORMBUFFEREXTPROC) (GLuint program, GLint location, GLuint buffer); GLEE_EXTERN GLEEPFNGLUNIFORMBUFFEREXTPROC GLeeFuncPtr_glUniformBufferEXT; #define glUniformBufferEXT GLeeFuncPtr_glUniformBufferEXT #endif #ifndef GLEE_H_DEFINED_glGetUniformBufferSizeEXT #define GLEE_H_DEFINED_glGetUniformBufferSizeEXT typedef GLint (APIENTRYP GLEEPFNGLGETUNIFORMBUFFERSIZEEXTPROC) (GLuint program, GLint location); GLEE_EXTERN GLEEPFNGLGETUNIFORMBUFFERSIZEEXTPROC GLeeFuncPtr_glGetUniformBufferSizeEXT; #define glGetUniformBufferSizeEXT GLeeFuncPtr_glGetUniformBufferSizeEXT #endif #ifndef GLEE_H_DEFINED_glGetUniformOffsetEXT #define GLEE_H_DEFINED_glGetUniformOffsetEXT typedef GLintptr (APIENTRYP GLEEPFNGLGETUNIFORMOFFSETEXTPROC) (GLuint program, GLint location); GLEE_EXTERN GLEEPFNGLGETUNIFORMOFFSETEXTPROC GLeeFuncPtr_glGetUniformOffsetEXT; #define glGetUniformOffsetEXT GLeeFuncPtr_glGetUniformOffsetEXT #endif #endif /* GL_EXT_texture_integer */ #ifndef GL_EXT_texture_integer #define GL_EXT_texture_integer 1 #define __GLEE_GL_EXT_texture_integer 1 /* Constants */ #define GL_RGBA32UI_EXT 0x8D70 #define GL_RGB32UI_EXT 0x8D71 #define GL_ALPHA32UI_EXT 0x8D72 #define GL_INTENSITY32UI_EXT 0x8D73 #define GL_LUMINANCE32UI_EXT 0x8D74 #define GL_LUMINANCE_ALPHA32UI_EXT 0x8D75 #define GL_RGBA16UI_EXT 0x8D76 #define GL_RGB16UI_EXT 0x8D77 #define GL_ALPHA16UI_EXT 0x8D78 #define GL_INTENSITY16UI_EXT 0x8D79 #define GL_LUMINANCE16UI_EXT 0x8D7A #define GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B #define GL_RGBA8UI_EXT 0x8D7C #define GL_RGB8UI_EXT 0x8D7D #define GL_ALPHA8UI_EXT 0x8D7E #define GL_INTENSITY8UI_EXT 0x8D7F #define GL_LUMINANCE8UI_EXT 0x8D80 #define GL_LUMINANCE_ALPHA8UI_EXT 0x8D81 #define GL_RGBA32I_EXT 0x8D82 #define GL_RGB32I_EXT 0x8D83 #define GL_ALPHA32I_EXT 0x8D84 #define GL_INTENSITY32I_EXT 0x8D85 #define GL_LUMINANCE32I_EXT 0x8D86 #define GL_LUMINANCE_ALPHA32I_EXT 0x8D87 #define GL_RGBA16I_EXT 0x8D88 #define GL_RGB16I_EXT 0x8D89 #define GL_ALPHA16I_EXT 0x8D8A #define GL_INTENSITY16I_EXT 0x8D8B #define GL_LUMINANCE16I_EXT 0x8D8C #define GL_LUMINANCE_ALPHA16I_EXT 0x8D8D #define GL_RGBA8I_EXT 0x8D8E #define GL_RGB8I_EXT 0x8D8F #define GL_ALPHA8I_EXT 0x8D90 #define GL_INTENSITY8I_EXT 0x8D91 #define GL_LUMINANCE8I_EXT 0x8D92 #define GL_LUMINANCE_ALPHA8I_EXT 0x8D93 #define GL_RED_INTEGER_EXT 0x8D94 #define GL_GREEN_INTEGER_EXT 0x8D95 #define GL_BLUE_INTEGER_EXT 0x8D96 #define GL_ALPHA_INTEGER_EXT 0x8D97 #define GL_RGB_INTEGER_EXT 0x8D98 #define GL_RGBA_INTEGER_EXT 0x8D99 #define GL_BGR_INTEGER_EXT 0x8D9A #define GL_BGRA_INTEGER_EXT 0x8D9B #define GL_LUMINANCE_INTEGER_EXT 0x8D9C #define GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D #define GL_RGBA_INTEGER_MODE_EXT 0x8D9E #ifndef GLEE_H_DEFINED_glTexParameterIivEXT #define GLEE_H_DEFINED_glTexParameterIivEXT typedef void (APIENTRYP GLEEPFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLTEXPARAMETERIIVEXTPROC GLeeFuncPtr_glTexParameterIivEXT; #define glTexParameterIivEXT GLeeFuncPtr_glTexParameterIivEXT #endif #ifndef GLEE_H_DEFINED_glTexParameterIuivEXT #define GLEE_H_DEFINED_glTexParameterIuivEXT typedef void (APIENTRYP GLEEPFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint * params); GLEE_EXTERN GLEEPFNGLTEXPARAMETERIUIVEXTPROC GLeeFuncPtr_glTexParameterIuivEXT; #define glTexParameterIuivEXT GLeeFuncPtr_glTexParameterIuivEXT #endif #ifndef GLEE_H_DEFINED_glGetTexParameterIivEXT #define GLEE_H_DEFINED_glGetTexParameterIivEXT typedef void (APIENTRYP GLEEPFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETTEXPARAMETERIIVEXTPROC GLeeFuncPtr_glGetTexParameterIivEXT; #define glGetTexParameterIivEXT GLeeFuncPtr_glGetTexParameterIivEXT #endif #ifndef GLEE_H_DEFINED_glGetTexParameterIuivEXT #define GLEE_H_DEFINED_glGetTexParameterIuivEXT typedef void (APIENTRYP GLEEPFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint * params); GLEE_EXTERN GLEEPFNGLGETTEXPARAMETERIUIVEXTPROC GLeeFuncPtr_glGetTexParameterIuivEXT; #define glGetTexParameterIuivEXT GLeeFuncPtr_glGetTexParameterIuivEXT #endif #ifndef GLEE_H_DEFINED_glClearColorIiEXT #define GLEE_H_DEFINED_glClearColorIiEXT typedef void (APIENTRYP GLEEPFNGLCLEARCOLORIIEXTPROC) (GLint red, GLint green, GLint blue, GLint alpha); GLEE_EXTERN GLEEPFNGLCLEARCOLORIIEXTPROC GLeeFuncPtr_glClearColorIiEXT; #define glClearColorIiEXT GLeeFuncPtr_glClearColorIiEXT #endif #ifndef GLEE_H_DEFINED_glClearColorIuiEXT #define GLEE_H_DEFINED_glClearColorIuiEXT typedef void (APIENTRYP GLEEPFNGLCLEARCOLORIUIEXTPROC) (GLuint red, GLuint green, GLuint blue, GLuint alpha); GLEE_EXTERN GLEEPFNGLCLEARCOLORIUIEXTPROC GLeeFuncPtr_glClearColorIuiEXT; #define glClearColorIuiEXT GLeeFuncPtr_glClearColorIuiEXT #endif #endif /* GL_GREMEDY_frame_terminator */ #ifndef GL_GREMEDY_frame_terminator #define GL_GREMEDY_frame_terminator 1 #define __GLEE_GL_GREMEDY_frame_terminator 1 /* Constants */ #ifndef GLEE_H_DEFINED_glFrameTerminatorGREMEDY #define GLEE_H_DEFINED_glFrameTerminatorGREMEDY typedef void (APIENTRYP GLEEPFNGLFRAMETERMINATORGREMEDYPROC) (); GLEE_EXTERN GLEEPFNGLFRAMETERMINATORGREMEDYPROC GLeeFuncPtr_glFrameTerminatorGREMEDY; #define glFrameTerminatorGREMEDY GLeeFuncPtr_glFrameTerminatorGREMEDY #endif #endif /* GL_NV_conditional_render */ #ifndef GL_NV_conditional_render #define GL_NV_conditional_render 1 #define __GLEE_GL_NV_conditional_render 1 /* Constants */ #define GL_QUERY_WAIT_NV 0x8E13 #define GL_QUERY_NO_WAIT_NV 0x8E14 #define GL_QUERY_BY_REGION_WAIT_NV 0x8E15 #define GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16 #ifndef GLEE_H_DEFINED_glBeginConditionalRenderNV #define GLEE_H_DEFINED_glBeginConditionalRenderNV typedef void (APIENTRYP GLEEPFNGLBEGINCONDITIONALRENDERNVPROC) (GLuint id, GLenum mode); GLEE_EXTERN GLEEPFNGLBEGINCONDITIONALRENDERNVPROC GLeeFuncPtr_glBeginConditionalRenderNV; #define glBeginConditionalRenderNV GLeeFuncPtr_glBeginConditionalRenderNV #endif #ifndef GLEE_H_DEFINED_glEndConditionalRenderNV #define GLEE_H_DEFINED_glEndConditionalRenderNV typedef void (APIENTRYP GLEEPFNGLENDCONDITIONALRENDERNVPROC) (); GLEE_EXTERN GLEEPFNGLENDCONDITIONALRENDERNVPROC GLeeFuncPtr_glEndConditionalRenderNV; #define glEndConditionalRenderNV GLeeFuncPtr_glEndConditionalRenderNV #endif #endif /* GL_NV_present_video */ #ifndef GL_NV_present_video #define GL_NV_present_video 1 #define __GLEE_GL_NV_present_video 1 /* Constants */ #define GL_FRAME_NV 0x8E26 #define GL_FIELDS_NV 0x8E27 #define GL_CURRENT_TIME_NV 0x8E28 #define GL_NUM_FILL_STREAMS_NV 0x8E29 #define GL_PRESENT_TIME_NV 0x8E2A #define GL_PRESENT_DURATION_NV 0x8E2B #ifndef GLEE_H_DEFINED_glPresentFrameKeyedNV #define GLEE_H_DEFINED_glPresentFrameKeyedNV typedef void (APIENTRYP GLEEPFNGLPRESENTFRAMEKEYEDNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); GLEE_EXTERN GLEEPFNGLPRESENTFRAMEKEYEDNVPROC GLeeFuncPtr_glPresentFrameKeyedNV; #define glPresentFrameKeyedNV GLeeFuncPtr_glPresentFrameKeyedNV #endif #ifndef GLEE_H_DEFINED_glPresentFrameDualFillNV #define GLEE_H_DEFINED_glPresentFrameDualFillNV typedef void (APIENTRYP GLEEPFNGLPRESENTFRAMEDUALFILLNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); GLEE_EXTERN GLEEPFNGLPRESENTFRAMEDUALFILLNVPROC GLeeFuncPtr_glPresentFrameDualFillNV; #define glPresentFrameDualFillNV GLeeFuncPtr_glPresentFrameDualFillNV #endif #ifndef GLEE_H_DEFINED_glGetVideoivNV #define GLEE_H_DEFINED_glGetVideoivNV typedef void (APIENTRYP GLEEPFNGLGETVIDEOIVNVPROC) (GLuint video_slot, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETVIDEOIVNVPROC GLeeFuncPtr_glGetVideoivNV; #define glGetVideoivNV GLeeFuncPtr_glGetVideoivNV #endif #ifndef GLEE_H_DEFINED_glGetVideouivNV #define GLEE_H_DEFINED_glGetVideouivNV typedef void (APIENTRYP GLEEPFNGLGETVIDEOUIVNVPROC) (GLuint video_slot, GLenum pname, GLuint * params); GLEE_EXTERN GLEEPFNGLGETVIDEOUIVNVPROC GLeeFuncPtr_glGetVideouivNV; #define glGetVideouivNV GLeeFuncPtr_glGetVideouivNV #endif #ifndef GLEE_H_DEFINED_glGetVideoi64vNV #define GLEE_H_DEFINED_glGetVideoi64vNV typedef void (APIENTRYP GLEEPFNGLGETVIDEOI64VNVPROC) (GLuint video_slot, GLenum pname, GLint64EXT * params); GLEE_EXTERN GLEEPFNGLGETVIDEOI64VNVPROC GLeeFuncPtr_glGetVideoi64vNV; #define glGetVideoi64vNV GLeeFuncPtr_glGetVideoi64vNV #endif #ifndef GLEE_H_DEFINED_glGetVideoui64vNV #define GLEE_H_DEFINED_glGetVideoui64vNV typedef void (APIENTRYP GLEEPFNGLGETVIDEOUI64VNVPROC) (GLuint video_slot, GLenum pname, GLuint64EXT * params); GLEE_EXTERN GLEEPFNGLGETVIDEOUI64VNVPROC GLeeFuncPtr_glGetVideoui64vNV; #define glGetVideoui64vNV GLeeFuncPtr_glGetVideoui64vNV #endif #endif /* GL_EXT_transform_feedback */ #ifndef GL_EXT_transform_feedback #define GL_EXT_transform_feedback 1 #define __GLEE_GL_EXT_transform_feedback 1 /* Constants */ #define GL_TRANSFORM_FEEDBACK_BUFFER_EXT 0x8C8E #define GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT 0x8C84 #define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT 0x8C85 #define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT 0x8C8F #define GL_INTERLEAVED_ATTRIBS_EXT 0x8C8C #define GL_SEPARATE_ATTRIBS_EXT 0x8C8D #define GL_PRIMITIVES_GENERATED_EXT 0x8C87 #define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT 0x8C88 #define GL_RASTERIZER_DISCARD_EXT 0x8C89 #define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT 0x8C8A #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT 0x8C8B #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT 0x8C80 #define GL_TRANSFORM_FEEDBACK_VARYINGS_EXT 0x8C83 #define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT 0x8C7F #define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT 0x8C76 #ifndef GLEE_H_DEFINED_glBeginTransformFeedbackEXT #define GLEE_H_DEFINED_glBeginTransformFeedbackEXT typedef void (APIENTRYP GLEEPFNGLBEGINTRANSFORMFEEDBACKEXTPROC) (GLenum primitiveMode); GLEE_EXTERN GLEEPFNGLBEGINTRANSFORMFEEDBACKEXTPROC GLeeFuncPtr_glBeginTransformFeedbackEXT; #define glBeginTransformFeedbackEXT GLeeFuncPtr_glBeginTransformFeedbackEXT #endif #ifndef GLEE_H_DEFINED_glEndTransformFeedbackEXT #define GLEE_H_DEFINED_glEndTransformFeedbackEXT typedef void (APIENTRYP GLEEPFNGLENDTRANSFORMFEEDBACKEXTPROC) (); GLEE_EXTERN GLEEPFNGLENDTRANSFORMFEEDBACKEXTPROC GLeeFuncPtr_glEndTransformFeedbackEXT; #define glEndTransformFeedbackEXT GLeeFuncPtr_glEndTransformFeedbackEXT #endif #ifndef GLEE_H_DEFINED_glBindBufferRangeEXT #define GLEE_H_DEFINED_glBindBufferRangeEXT typedef void (APIENTRYP GLEEPFNGLBINDBUFFERRANGEEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); GLEE_EXTERN GLEEPFNGLBINDBUFFERRANGEEXTPROC GLeeFuncPtr_glBindBufferRangeEXT; #define glBindBufferRangeEXT GLeeFuncPtr_glBindBufferRangeEXT #endif #ifndef GLEE_H_DEFINED_glBindBufferOffsetEXT #define GLEE_H_DEFINED_glBindBufferOffsetEXT typedef void (APIENTRYP GLEEPFNGLBINDBUFFEROFFSETEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); GLEE_EXTERN GLEEPFNGLBINDBUFFEROFFSETEXTPROC GLeeFuncPtr_glBindBufferOffsetEXT; #define glBindBufferOffsetEXT GLeeFuncPtr_glBindBufferOffsetEXT #endif #ifndef GLEE_H_DEFINED_glBindBufferBaseEXT #define GLEE_H_DEFINED_glBindBufferBaseEXT typedef void (APIENTRYP GLEEPFNGLBINDBUFFERBASEEXTPROC) (GLenum target, GLuint index, GLuint buffer); GLEE_EXTERN GLEEPFNGLBINDBUFFERBASEEXTPROC GLeeFuncPtr_glBindBufferBaseEXT; #define glBindBufferBaseEXT GLeeFuncPtr_glBindBufferBaseEXT #endif #ifndef GLEE_H_DEFINED_glTransformFeedbackVaryingsEXT #define GLEE_H_DEFINED_glTransformFeedbackVaryingsEXT typedef void (APIENTRYP GLEEPFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) (GLuint program, GLsizei count, const GLchar* * varyings, GLenum bufferMode); GLEE_EXTERN GLEEPFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC GLeeFuncPtr_glTransformFeedbackVaryingsEXT; #define glTransformFeedbackVaryingsEXT GLeeFuncPtr_glTransformFeedbackVaryingsEXT #endif #ifndef GLEE_H_DEFINED_glGetTransformFeedbackVaryingEXT #define GLEE_H_DEFINED_glGetTransformFeedbackVaryingEXT typedef void (APIENTRYP GLEEPFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name); GLEE_EXTERN GLEEPFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC GLeeFuncPtr_glGetTransformFeedbackVaryingEXT; #define glGetTransformFeedbackVaryingEXT GLeeFuncPtr_glGetTransformFeedbackVaryingEXT #endif #endif /* GL_EXT_direct_state_access */ #ifndef GL_EXT_direct_state_access #define GL_EXT_direct_state_access 1 #define __GLEE_GL_EXT_direct_state_access 1 /* Constants */ #define GL_PROGRAM_MATRIX_EXT 0x8E2D #define GL_TRANSPOSE_PROGRAM_MATRIX_EXT 0x8E2E #define GL_PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F #ifndef GLEE_H_DEFINED_glClientAttribDefaultEXT #define GLEE_H_DEFINED_glClientAttribDefaultEXT typedef void (APIENTRYP GLEEPFNGLCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); GLEE_EXTERN GLEEPFNGLCLIENTATTRIBDEFAULTEXTPROC GLeeFuncPtr_glClientAttribDefaultEXT; #define glClientAttribDefaultEXT GLeeFuncPtr_glClientAttribDefaultEXT #endif #ifndef GLEE_H_DEFINED_glPushClientAttribDefaultEXT #define GLEE_H_DEFINED_glPushClientAttribDefaultEXT typedef void (APIENTRYP GLEEPFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); GLEE_EXTERN GLEEPFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC GLeeFuncPtr_glPushClientAttribDefaultEXT; #define glPushClientAttribDefaultEXT GLeeFuncPtr_glPushClientAttribDefaultEXT #endif #ifndef GLEE_H_DEFINED_glMatrixLoadfEXT #define GLEE_H_DEFINED_glMatrixLoadfEXT typedef void (APIENTRYP GLEEPFNGLMATRIXLOADFEXTPROC) (GLenum mode, const GLfloat * m); GLEE_EXTERN GLEEPFNGLMATRIXLOADFEXTPROC GLeeFuncPtr_glMatrixLoadfEXT; #define glMatrixLoadfEXT GLeeFuncPtr_glMatrixLoadfEXT #endif #ifndef GLEE_H_DEFINED_glMatrixLoaddEXT #define GLEE_H_DEFINED_glMatrixLoaddEXT typedef void (APIENTRYP GLEEPFNGLMATRIXLOADDEXTPROC) (GLenum mode, const GLdouble * m); GLEE_EXTERN GLEEPFNGLMATRIXLOADDEXTPROC GLeeFuncPtr_glMatrixLoaddEXT; #define glMatrixLoaddEXT GLeeFuncPtr_glMatrixLoaddEXT #endif #ifndef GLEE_H_DEFINED_glMatrixMultfEXT #define GLEE_H_DEFINED_glMatrixMultfEXT typedef void (APIENTRYP GLEEPFNGLMATRIXMULTFEXTPROC) (GLenum mode, const GLfloat * m); GLEE_EXTERN GLEEPFNGLMATRIXMULTFEXTPROC GLeeFuncPtr_glMatrixMultfEXT; #define glMatrixMultfEXT GLeeFuncPtr_glMatrixMultfEXT #endif #ifndef GLEE_H_DEFINED_glMatrixMultdEXT #define GLEE_H_DEFINED_glMatrixMultdEXT typedef void (APIENTRYP GLEEPFNGLMATRIXMULTDEXTPROC) (GLenum mode, const GLdouble * m); GLEE_EXTERN GLEEPFNGLMATRIXMULTDEXTPROC GLeeFuncPtr_glMatrixMultdEXT; #define glMatrixMultdEXT GLeeFuncPtr_glMatrixMultdEXT #endif #ifndef GLEE_H_DEFINED_glMatrixLoadIdentityEXT #define GLEE_H_DEFINED_glMatrixLoadIdentityEXT typedef void (APIENTRYP GLEEPFNGLMATRIXLOADIDENTITYEXTPROC) (GLenum mode); GLEE_EXTERN GLEEPFNGLMATRIXLOADIDENTITYEXTPROC GLeeFuncPtr_glMatrixLoadIdentityEXT; #define glMatrixLoadIdentityEXT GLeeFuncPtr_glMatrixLoadIdentityEXT #endif #ifndef GLEE_H_DEFINED_glMatrixRotatefEXT #define GLEE_H_DEFINED_glMatrixRotatefEXT typedef void (APIENTRYP GLEEPFNGLMATRIXROTATEFEXTPROC) (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLMATRIXROTATEFEXTPROC GLeeFuncPtr_glMatrixRotatefEXT; #define glMatrixRotatefEXT GLeeFuncPtr_glMatrixRotatefEXT #endif #ifndef GLEE_H_DEFINED_glMatrixRotatedEXT #define GLEE_H_DEFINED_glMatrixRotatedEXT typedef void (APIENTRYP GLEEPFNGLMATRIXROTATEDEXTPROC) (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); GLEE_EXTERN GLEEPFNGLMATRIXROTATEDEXTPROC GLeeFuncPtr_glMatrixRotatedEXT; #define glMatrixRotatedEXT GLeeFuncPtr_glMatrixRotatedEXT #endif #ifndef GLEE_H_DEFINED_glMatrixScalefEXT #define GLEE_H_DEFINED_glMatrixScalefEXT typedef void (APIENTRYP GLEEPFNGLMATRIXSCALEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLMATRIXSCALEFEXTPROC GLeeFuncPtr_glMatrixScalefEXT; #define glMatrixScalefEXT GLeeFuncPtr_glMatrixScalefEXT #endif #ifndef GLEE_H_DEFINED_glMatrixScaledEXT #define GLEE_H_DEFINED_glMatrixScaledEXT typedef void (APIENTRYP GLEEPFNGLMATRIXSCALEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); GLEE_EXTERN GLEEPFNGLMATRIXSCALEDEXTPROC GLeeFuncPtr_glMatrixScaledEXT; #define glMatrixScaledEXT GLeeFuncPtr_glMatrixScaledEXT #endif #ifndef GLEE_H_DEFINED_glMatrixTranslatefEXT #define GLEE_H_DEFINED_glMatrixTranslatefEXT typedef void (APIENTRYP GLEEPFNGLMATRIXTRANSLATEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLMATRIXTRANSLATEFEXTPROC GLeeFuncPtr_glMatrixTranslatefEXT; #define glMatrixTranslatefEXT GLeeFuncPtr_glMatrixTranslatefEXT #endif #ifndef GLEE_H_DEFINED_glMatrixTranslatedEXT #define GLEE_H_DEFINED_glMatrixTranslatedEXT typedef void (APIENTRYP GLEEPFNGLMATRIXTRANSLATEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); GLEE_EXTERN GLEEPFNGLMATRIXTRANSLATEDEXTPROC GLeeFuncPtr_glMatrixTranslatedEXT; #define glMatrixTranslatedEXT GLeeFuncPtr_glMatrixTranslatedEXT #endif #ifndef GLEE_H_DEFINED_glMatrixFrustumEXT #define GLEE_H_DEFINED_glMatrixFrustumEXT typedef void (APIENTRYP GLEEPFNGLMATRIXFRUSTUMEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); GLEE_EXTERN GLEEPFNGLMATRIXFRUSTUMEXTPROC GLeeFuncPtr_glMatrixFrustumEXT; #define glMatrixFrustumEXT GLeeFuncPtr_glMatrixFrustumEXT #endif #ifndef GLEE_H_DEFINED_glMatrixOrthoEXT #define GLEE_H_DEFINED_glMatrixOrthoEXT typedef void (APIENTRYP GLEEPFNGLMATRIXORTHOEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); GLEE_EXTERN GLEEPFNGLMATRIXORTHOEXTPROC GLeeFuncPtr_glMatrixOrthoEXT; #define glMatrixOrthoEXT GLeeFuncPtr_glMatrixOrthoEXT #endif #ifndef GLEE_H_DEFINED_glMatrixPopEXT #define GLEE_H_DEFINED_glMatrixPopEXT typedef void (APIENTRYP GLEEPFNGLMATRIXPOPEXTPROC) (GLenum mode); GLEE_EXTERN GLEEPFNGLMATRIXPOPEXTPROC GLeeFuncPtr_glMatrixPopEXT; #define glMatrixPopEXT GLeeFuncPtr_glMatrixPopEXT #endif #ifndef GLEE_H_DEFINED_glMatrixPushEXT #define GLEE_H_DEFINED_glMatrixPushEXT typedef void (APIENTRYP GLEEPFNGLMATRIXPUSHEXTPROC) (GLenum mode); GLEE_EXTERN GLEEPFNGLMATRIXPUSHEXTPROC GLeeFuncPtr_glMatrixPushEXT; #define glMatrixPushEXT GLeeFuncPtr_glMatrixPushEXT #endif #ifndef GLEE_H_DEFINED_glMatrixLoadTransposefEXT #define GLEE_H_DEFINED_glMatrixLoadTransposefEXT typedef void (APIENTRYP GLEEPFNGLMATRIXLOADTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat * m); GLEE_EXTERN GLEEPFNGLMATRIXLOADTRANSPOSEFEXTPROC GLeeFuncPtr_glMatrixLoadTransposefEXT; #define glMatrixLoadTransposefEXT GLeeFuncPtr_glMatrixLoadTransposefEXT #endif #ifndef GLEE_H_DEFINED_glMatrixLoadTransposedEXT #define GLEE_H_DEFINED_glMatrixLoadTransposedEXT typedef void (APIENTRYP GLEEPFNGLMATRIXLOADTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble * m); GLEE_EXTERN GLEEPFNGLMATRIXLOADTRANSPOSEDEXTPROC GLeeFuncPtr_glMatrixLoadTransposedEXT; #define glMatrixLoadTransposedEXT GLeeFuncPtr_glMatrixLoadTransposedEXT #endif #ifndef GLEE_H_DEFINED_glMatrixMultTransposefEXT #define GLEE_H_DEFINED_glMatrixMultTransposefEXT typedef void (APIENTRYP GLEEPFNGLMATRIXMULTTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat * m); GLEE_EXTERN GLEEPFNGLMATRIXMULTTRANSPOSEFEXTPROC GLeeFuncPtr_glMatrixMultTransposefEXT; #define glMatrixMultTransposefEXT GLeeFuncPtr_glMatrixMultTransposefEXT #endif #ifndef GLEE_H_DEFINED_glMatrixMultTransposedEXT #define GLEE_H_DEFINED_glMatrixMultTransposedEXT typedef void (APIENTRYP GLEEPFNGLMATRIXMULTTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble * m); GLEE_EXTERN GLEEPFNGLMATRIXMULTTRANSPOSEDEXTPROC GLeeFuncPtr_glMatrixMultTransposedEXT; #define glMatrixMultTransposedEXT GLeeFuncPtr_glMatrixMultTransposedEXT #endif #ifndef GLEE_H_DEFINED_glTextureParameterfEXT #define GLEE_H_DEFINED_glTextureParameterfEXT typedef void (APIENTRYP GLEEPFNGLTEXTUREPARAMETERFEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLTEXTUREPARAMETERFEXTPROC GLeeFuncPtr_glTextureParameterfEXT; #define glTextureParameterfEXT GLeeFuncPtr_glTextureParameterfEXT #endif #ifndef GLEE_H_DEFINED_glTextureParameterfvEXT #define GLEE_H_DEFINED_glTextureParameterfvEXT typedef void (APIENTRYP GLEEPFNGLTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLTEXTUREPARAMETERFVEXTPROC GLeeFuncPtr_glTextureParameterfvEXT; #define glTextureParameterfvEXT GLeeFuncPtr_glTextureParameterfvEXT #endif #ifndef GLEE_H_DEFINED_glTextureParameteriEXT #define GLEE_H_DEFINED_glTextureParameteriEXT typedef void (APIENTRYP GLEEPFNGLTEXTUREPARAMETERIEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLTEXTUREPARAMETERIEXTPROC GLeeFuncPtr_glTextureParameteriEXT; #define glTextureParameteriEXT GLeeFuncPtr_glTextureParameteriEXT #endif #ifndef GLEE_H_DEFINED_glTextureParameterivEXT #define GLEE_H_DEFINED_glTextureParameterivEXT typedef void (APIENTRYP GLEEPFNGLTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLTEXTUREPARAMETERIVEXTPROC GLeeFuncPtr_glTextureParameterivEXT; #define glTextureParameterivEXT GLeeFuncPtr_glTextureParameterivEXT #endif #ifndef GLEE_H_DEFINED_glTextureImage1DEXT #define GLEE_H_DEFINED_glTextureImage1DEXT typedef void (APIENTRYP GLEEPFNGLTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLTEXTUREIMAGE1DEXTPROC GLeeFuncPtr_glTextureImage1DEXT; #define glTextureImage1DEXT GLeeFuncPtr_glTextureImage1DEXT #endif #ifndef GLEE_H_DEFINED_glTextureImage2DEXT #define GLEE_H_DEFINED_glTextureImage2DEXT typedef void (APIENTRYP GLEEPFNGLTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLTEXTUREIMAGE2DEXTPROC GLeeFuncPtr_glTextureImage2DEXT; #define glTextureImage2DEXT GLeeFuncPtr_glTextureImage2DEXT #endif #ifndef GLEE_H_DEFINED_glTextureSubImage1DEXT #define GLEE_H_DEFINED_glTextureSubImage1DEXT typedef void (APIENTRYP GLEEPFNGLTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLTEXTURESUBIMAGE1DEXTPROC GLeeFuncPtr_glTextureSubImage1DEXT; #define glTextureSubImage1DEXT GLeeFuncPtr_glTextureSubImage1DEXT #endif #ifndef GLEE_H_DEFINED_glTextureSubImage2DEXT #define GLEE_H_DEFINED_glTextureSubImage2DEXT typedef void (APIENTRYP GLEEPFNGLTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLTEXTURESUBIMAGE2DEXTPROC GLeeFuncPtr_glTextureSubImage2DEXT; #define glTextureSubImage2DEXT GLeeFuncPtr_glTextureSubImage2DEXT #endif #ifndef GLEE_H_DEFINED_glCopyTextureImage1DEXT #define GLEE_H_DEFINED_glCopyTextureImage1DEXT typedef void (APIENTRYP GLEEPFNGLCOPYTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); GLEE_EXTERN GLEEPFNGLCOPYTEXTUREIMAGE1DEXTPROC GLeeFuncPtr_glCopyTextureImage1DEXT; #define glCopyTextureImage1DEXT GLeeFuncPtr_glCopyTextureImage1DEXT #endif #ifndef GLEE_H_DEFINED_glCopyTextureImage2DEXT #define GLEE_H_DEFINED_glCopyTextureImage2DEXT typedef void (APIENTRYP GLEEPFNGLCOPYTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); GLEE_EXTERN GLEEPFNGLCOPYTEXTUREIMAGE2DEXTPROC GLeeFuncPtr_glCopyTextureImage2DEXT; #define glCopyTextureImage2DEXT GLeeFuncPtr_glCopyTextureImage2DEXT #endif #ifndef GLEE_H_DEFINED_glCopyTextureSubImage1DEXT #define GLEE_H_DEFINED_glCopyTextureSubImage1DEXT typedef void (APIENTRYP GLEEPFNGLCOPYTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); GLEE_EXTERN GLEEPFNGLCOPYTEXTURESUBIMAGE1DEXTPROC GLeeFuncPtr_glCopyTextureSubImage1DEXT; #define glCopyTextureSubImage1DEXT GLeeFuncPtr_glCopyTextureSubImage1DEXT #endif #ifndef GLEE_H_DEFINED_glCopyTextureSubImage2DEXT #define GLEE_H_DEFINED_glCopyTextureSubImage2DEXT typedef void (APIENTRYP GLEEPFNGLCOPYTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLCOPYTEXTURESUBIMAGE2DEXTPROC GLeeFuncPtr_glCopyTextureSubImage2DEXT; #define glCopyTextureSubImage2DEXT GLeeFuncPtr_glCopyTextureSubImage2DEXT #endif #ifndef GLEE_H_DEFINED_glGetTextureImageEXT #define GLEE_H_DEFINED_glGetTextureImageEXT typedef void (APIENTRYP GLEEPFNGLGETTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, GLvoid * pixels); GLEE_EXTERN GLEEPFNGLGETTEXTUREIMAGEEXTPROC GLeeFuncPtr_glGetTextureImageEXT; #define glGetTextureImageEXT GLeeFuncPtr_glGetTextureImageEXT #endif #ifndef GLEE_H_DEFINED_glGetTextureParameterfvEXT #define GLEE_H_DEFINED_glGetTextureParameterfvEXT typedef void (APIENTRYP GLEEPFNGLGETTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETTEXTUREPARAMETERFVEXTPROC GLeeFuncPtr_glGetTextureParameterfvEXT; #define glGetTextureParameterfvEXT GLeeFuncPtr_glGetTextureParameterfvEXT #endif #ifndef GLEE_H_DEFINED_glGetTextureParameterivEXT #define GLEE_H_DEFINED_glGetTextureParameterivEXT typedef void (APIENTRYP GLEEPFNGLGETTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETTEXTUREPARAMETERIVEXTPROC GLeeFuncPtr_glGetTextureParameterivEXT; #define glGetTextureParameterivEXT GLeeFuncPtr_glGetTextureParameterivEXT #endif #ifndef GLEE_H_DEFINED_glGetTextureLevelParameterfvEXT #define GLEE_H_DEFINED_glGetTextureLevelParameterfvEXT typedef void (APIENTRYP GLEEPFNGLGETTEXTURELEVELPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETTEXTURELEVELPARAMETERFVEXTPROC GLeeFuncPtr_glGetTextureLevelParameterfvEXT; #define glGetTextureLevelParameterfvEXT GLeeFuncPtr_glGetTextureLevelParameterfvEXT #endif #ifndef GLEE_H_DEFINED_glGetTextureLevelParameterivEXT #define GLEE_H_DEFINED_glGetTextureLevelParameterivEXT typedef void (APIENTRYP GLEEPFNGLGETTEXTURELEVELPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETTEXTURELEVELPARAMETERIVEXTPROC GLeeFuncPtr_glGetTextureLevelParameterivEXT; #define glGetTextureLevelParameterivEXT GLeeFuncPtr_glGetTextureLevelParameterivEXT #endif #ifndef GLEE_H_DEFINED_glTextureImage3DEXT #define GLEE_H_DEFINED_glTextureImage3DEXT typedef void (APIENTRYP GLEEPFNGLTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLTEXTUREIMAGE3DEXTPROC GLeeFuncPtr_glTextureImage3DEXT; #define glTextureImage3DEXT GLeeFuncPtr_glTextureImage3DEXT #endif #ifndef GLEE_H_DEFINED_glTextureSubImage3DEXT #define GLEE_H_DEFINED_glTextureSubImage3DEXT typedef void (APIENTRYP GLEEPFNGLTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLTEXTURESUBIMAGE3DEXTPROC GLeeFuncPtr_glTextureSubImage3DEXT; #define glTextureSubImage3DEXT GLeeFuncPtr_glTextureSubImage3DEXT #endif #ifndef GLEE_H_DEFINED_glCopyTextureSubImage3DEXT #define GLEE_H_DEFINED_glCopyTextureSubImage3DEXT typedef void (APIENTRYP GLEEPFNGLCOPYTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLCOPYTEXTURESUBIMAGE3DEXTPROC GLeeFuncPtr_glCopyTextureSubImage3DEXT; #define glCopyTextureSubImage3DEXT GLeeFuncPtr_glCopyTextureSubImage3DEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexParameterfEXT #define GLEE_H_DEFINED_glMultiTexParameterfEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXPARAMETERFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLMULTITEXPARAMETERFEXTPROC GLeeFuncPtr_glMultiTexParameterfEXT; #define glMultiTexParameterfEXT GLeeFuncPtr_glMultiTexParameterfEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexParameterfvEXT #define GLEE_H_DEFINED_glMultiTexParameterfvEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLMULTITEXPARAMETERFVEXTPROC GLeeFuncPtr_glMultiTexParameterfvEXT; #define glMultiTexParameterfvEXT GLeeFuncPtr_glMultiTexParameterfvEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexParameteriEXT #define GLEE_H_DEFINED_glMultiTexParameteriEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXPARAMETERIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLMULTITEXPARAMETERIEXTPROC GLeeFuncPtr_glMultiTexParameteriEXT; #define glMultiTexParameteriEXT GLeeFuncPtr_glMultiTexParameteriEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexParameterivEXT #define GLEE_H_DEFINED_glMultiTexParameterivEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLMULTITEXPARAMETERIVEXTPROC GLeeFuncPtr_glMultiTexParameterivEXT; #define glMultiTexParameterivEXT GLeeFuncPtr_glMultiTexParameterivEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexImage1DEXT #define GLEE_H_DEFINED_glMultiTexImage1DEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLMULTITEXIMAGE1DEXTPROC GLeeFuncPtr_glMultiTexImage1DEXT; #define glMultiTexImage1DEXT GLeeFuncPtr_glMultiTexImage1DEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexImage2DEXT #define GLEE_H_DEFINED_glMultiTexImage2DEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLMULTITEXIMAGE2DEXTPROC GLeeFuncPtr_glMultiTexImage2DEXT; #define glMultiTexImage2DEXT GLeeFuncPtr_glMultiTexImage2DEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexSubImage1DEXT #define GLEE_H_DEFINED_glMultiTexSubImage1DEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLMULTITEXSUBIMAGE1DEXTPROC GLeeFuncPtr_glMultiTexSubImage1DEXT; #define glMultiTexSubImage1DEXT GLeeFuncPtr_glMultiTexSubImage1DEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexSubImage2DEXT #define GLEE_H_DEFINED_glMultiTexSubImage2DEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLMULTITEXSUBIMAGE2DEXTPROC GLeeFuncPtr_glMultiTexSubImage2DEXT; #define glMultiTexSubImage2DEXT GLeeFuncPtr_glMultiTexSubImage2DEXT #endif #ifndef GLEE_H_DEFINED_glCopyMultiTexImage1DEXT #define GLEE_H_DEFINED_glCopyMultiTexImage1DEXT typedef void (APIENTRYP GLEEPFNGLCOPYMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); GLEE_EXTERN GLEEPFNGLCOPYMULTITEXIMAGE1DEXTPROC GLeeFuncPtr_glCopyMultiTexImage1DEXT; #define glCopyMultiTexImage1DEXT GLeeFuncPtr_glCopyMultiTexImage1DEXT #endif #ifndef GLEE_H_DEFINED_glCopyMultiTexImage2DEXT #define GLEE_H_DEFINED_glCopyMultiTexImage2DEXT typedef void (APIENTRYP GLEEPFNGLCOPYMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); GLEE_EXTERN GLEEPFNGLCOPYMULTITEXIMAGE2DEXTPROC GLeeFuncPtr_glCopyMultiTexImage2DEXT; #define glCopyMultiTexImage2DEXT GLeeFuncPtr_glCopyMultiTexImage2DEXT #endif #ifndef GLEE_H_DEFINED_glCopyMultiTexSubImage1DEXT #define GLEE_H_DEFINED_glCopyMultiTexSubImage1DEXT typedef void (APIENTRYP GLEEPFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); GLEE_EXTERN GLEEPFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC GLeeFuncPtr_glCopyMultiTexSubImage1DEXT; #define glCopyMultiTexSubImage1DEXT GLeeFuncPtr_glCopyMultiTexSubImage1DEXT #endif #ifndef GLEE_H_DEFINED_glCopyMultiTexSubImage2DEXT #define GLEE_H_DEFINED_glCopyMultiTexSubImage2DEXT typedef void (APIENTRYP GLEEPFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC GLeeFuncPtr_glCopyMultiTexSubImage2DEXT; #define glCopyMultiTexSubImage2DEXT GLeeFuncPtr_glCopyMultiTexSubImage2DEXT #endif #ifndef GLEE_H_DEFINED_glGetMultiTexImageEXT #define GLEE_H_DEFINED_glGetMultiTexImageEXT typedef void (APIENTRYP GLEEPFNGLGETMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, GLvoid * pixels); GLEE_EXTERN GLEEPFNGLGETMULTITEXIMAGEEXTPROC GLeeFuncPtr_glGetMultiTexImageEXT; #define glGetMultiTexImageEXT GLeeFuncPtr_glGetMultiTexImageEXT #endif #ifndef GLEE_H_DEFINED_glGetMultiTexParameterfvEXT #define GLEE_H_DEFINED_glGetMultiTexParameterfvEXT typedef void (APIENTRYP GLEEPFNGLGETMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETMULTITEXPARAMETERFVEXTPROC GLeeFuncPtr_glGetMultiTexParameterfvEXT; #define glGetMultiTexParameterfvEXT GLeeFuncPtr_glGetMultiTexParameterfvEXT #endif #ifndef GLEE_H_DEFINED_glGetMultiTexParameterivEXT #define GLEE_H_DEFINED_glGetMultiTexParameterivEXT typedef void (APIENTRYP GLEEPFNGLGETMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETMULTITEXPARAMETERIVEXTPROC GLeeFuncPtr_glGetMultiTexParameterivEXT; #define glGetMultiTexParameterivEXT GLeeFuncPtr_glGetMultiTexParameterivEXT #endif #ifndef GLEE_H_DEFINED_glGetMultiTexLevelParameterfvEXT #define GLEE_H_DEFINED_glGetMultiTexLevelParameterfvEXT typedef void (APIENTRYP GLEEPFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC GLeeFuncPtr_glGetMultiTexLevelParameterfvEXT; #define glGetMultiTexLevelParameterfvEXT GLeeFuncPtr_glGetMultiTexLevelParameterfvEXT #endif #ifndef GLEE_H_DEFINED_glGetMultiTexLevelParameterivEXT #define GLEE_H_DEFINED_glGetMultiTexLevelParameterivEXT typedef void (APIENTRYP GLEEPFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC GLeeFuncPtr_glGetMultiTexLevelParameterivEXT; #define glGetMultiTexLevelParameterivEXT GLeeFuncPtr_glGetMultiTexLevelParameterivEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexImage3DEXT #define GLEE_H_DEFINED_glMultiTexImage3DEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLMULTITEXIMAGE3DEXTPROC GLeeFuncPtr_glMultiTexImage3DEXT; #define glMultiTexImage3DEXT GLeeFuncPtr_glMultiTexImage3DEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexSubImage3DEXT #define GLEE_H_DEFINED_glMultiTexSubImage3DEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLMULTITEXSUBIMAGE3DEXTPROC GLeeFuncPtr_glMultiTexSubImage3DEXT; #define glMultiTexSubImage3DEXT GLeeFuncPtr_glMultiTexSubImage3DEXT #endif #ifndef GLEE_H_DEFINED_glCopyMultiTexSubImage3DEXT #define GLEE_H_DEFINED_glCopyMultiTexSubImage3DEXT typedef void (APIENTRYP GLEEPFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC GLeeFuncPtr_glCopyMultiTexSubImage3DEXT; #define glCopyMultiTexSubImage3DEXT GLeeFuncPtr_glCopyMultiTexSubImage3DEXT #endif #ifndef GLEE_H_DEFINED_glBindMultiTextureEXT #define GLEE_H_DEFINED_glBindMultiTextureEXT typedef void (APIENTRYP GLEEPFNGLBINDMULTITEXTUREEXTPROC) (GLenum texunit, GLenum target, GLuint texture); GLEE_EXTERN GLEEPFNGLBINDMULTITEXTUREEXTPROC GLeeFuncPtr_glBindMultiTextureEXT; #define glBindMultiTextureEXT GLeeFuncPtr_glBindMultiTextureEXT #endif #ifndef GLEE_H_DEFINED_glEnableClientStateIndexedEXT #define GLEE_H_DEFINED_glEnableClientStateIndexedEXT typedef void (APIENTRYP GLEEPFNGLENABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); GLEE_EXTERN GLEEPFNGLENABLECLIENTSTATEINDEXEDEXTPROC GLeeFuncPtr_glEnableClientStateIndexedEXT; #define glEnableClientStateIndexedEXT GLeeFuncPtr_glEnableClientStateIndexedEXT #endif #ifndef GLEE_H_DEFINED_glDisableClientStateIndexedEXT #define GLEE_H_DEFINED_glDisableClientStateIndexedEXT typedef void (APIENTRYP GLEEPFNGLDISABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); GLEE_EXTERN GLEEPFNGLDISABLECLIENTSTATEINDEXEDEXTPROC GLeeFuncPtr_glDisableClientStateIndexedEXT; #define glDisableClientStateIndexedEXT GLeeFuncPtr_glDisableClientStateIndexedEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexCoordPointerEXT #define GLEE_H_DEFINED_glMultiTexCoordPointerEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORDPOINTEREXTPROC) (GLenum texunit, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLMULTITEXCOORDPOINTEREXTPROC GLeeFuncPtr_glMultiTexCoordPointerEXT; #define glMultiTexCoordPointerEXT GLeeFuncPtr_glMultiTexCoordPointerEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexEnvfEXT #define GLEE_H_DEFINED_glMultiTexEnvfEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXENVFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLMULTITEXENVFEXTPROC GLeeFuncPtr_glMultiTexEnvfEXT; #define glMultiTexEnvfEXT GLeeFuncPtr_glMultiTexEnvfEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexEnvfvEXT #define GLEE_H_DEFINED_glMultiTexEnvfvEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLMULTITEXENVFVEXTPROC GLeeFuncPtr_glMultiTexEnvfvEXT; #define glMultiTexEnvfvEXT GLeeFuncPtr_glMultiTexEnvfvEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexEnviEXT #define GLEE_H_DEFINED_glMultiTexEnviEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXENVIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLMULTITEXENVIEXTPROC GLeeFuncPtr_glMultiTexEnviEXT; #define glMultiTexEnviEXT GLeeFuncPtr_glMultiTexEnviEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexEnvivEXT #define GLEE_H_DEFINED_glMultiTexEnvivEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLMULTITEXENVIVEXTPROC GLeeFuncPtr_glMultiTexEnvivEXT; #define glMultiTexEnvivEXT GLeeFuncPtr_glMultiTexEnvivEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexGendEXT #define GLEE_H_DEFINED_glMultiTexGendEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXGENDEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); GLEE_EXTERN GLEEPFNGLMULTITEXGENDEXTPROC GLeeFuncPtr_glMultiTexGendEXT; #define glMultiTexGendEXT GLeeFuncPtr_glMultiTexGendEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexGendvEXT #define GLEE_H_DEFINED_glMultiTexGendvEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLdouble * params); GLEE_EXTERN GLEEPFNGLMULTITEXGENDVEXTPROC GLeeFuncPtr_glMultiTexGendvEXT; #define glMultiTexGendvEXT GLeeFuncPtr_glMultiTexGendvEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexGenfEXT #define GLEE_H_DEFINED_glMultiTexGenfEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXGENFEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLMULTITEXGENFEXTPROC GLeeFuncPtr_glMultiTexGenfEXT; #define glMultiTexGenfEXT GLeeFuncPtr_glMultiTexGenfEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexGenfvEXT #define GLEE_H_DEFINED_glMultiTexGenfvEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLMULTITEXGENFVEXTPROC GLeeFuncPtr_glMultiTexGenfvEXT; #define glMultiTexGenfvEXT GLeeFuncPtr_glMultiTexGenfvEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexGeniEXT #define GLEE_H_DEFINED_glMultiTexGeniEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXGENIEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLMULTITEXGENIEXTPROC GLeeFuncPtr_glMultiTexGeniEXT; #define glMultiTexGeniEXT GLeeFuncPtr_glMultiTexGeniEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexGenivEXT #define GLEE_H_DEFINED_glMultiTexGenivEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLMULTITEXGENIVEXTPROC GLeeFuncPtr_glMultiTexGenivEXT; #define glMultiTexGenivEXT GLeeFuncPtr_glMultiTexGenivEXT #endif #ifndef GLEE_H_DEFINED_glGetMultiTexEnvfvEXT #define GLEE_H_DEFINED_glGetMultiTexEnvfvEXT typedef void (APIENTRYP GLEEPFNGLGETMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETMULTITEXENVFVEXTPROC GLeeFuncPtr_glGetMultiTexEnvfvEXT; #define glGetMultiTexEnvfvEXT GLeeFuncPtr_glGetMultiTexEnvfvEXT #endif #ifndef GLEE_H_DEFINED_glGetMultiTexEnvivEXT #define GLEE_H_DEFINED_glGetMultiTexEnvivEXT typedef void (APIENTRYP GLEEPFNGLGETMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETMULTITEXENVIVEXTPROC GLeeFuncPtr_glGetMultiTexEnvivEXT; #define glGetMultiTexEnvivEXT GLeeFuncPtr_glGetMultiTexEnvivEXT #endif #ifndef GLEE_H_DEFINED_glGetMultiTexGendvEXT #define GLEE_H_DEFINED_glGetMultiTexGendvEXT typedef void (APIENTRYP GLEEPFNGLGETMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble * params); GLEE_EXTERN GLEEPFNGLGETMULTITEXGENDVEXTPROC GLeeFuncPtr_glGetMultiTexGendvEXT; #define glGetMultiTexGendvEXT GLeeFuncPtr_glGetMultiTexGendvEXT #endif #ifndef GLEE_H_DEFINED_glGetMultiTexGenfvEXT #define GLEE_H_DEFINED_glGetMultiTexGenfvEXT typedef void (APIENTRYP GLEEPFNGLGETMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETMULTITEXGENFVEXTPROC GLeeFuncPtr_glGetMultiTexGenfvEXT; #define glGetMultiTexGenfvEXT GLeeFuncPtr_glGetMultiTexGenfvEXT #endif #ifndef GLEE_H_DEFINED_glGetMultiTexGenivEXT #define GLEE_H_DEFINED_glGetMultiTexGenivEXT typedef void (APIENTRYP GLEEPFNGLGETMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETMULTITEXGENIVEXTPROC GLeeFuncPtr_glGetMultiTexGenivEXT; #define glGetMultiTexGenivEXT GLeeFuncPtr_glGetMultiTexGenivEXT #endif #ifndef GLEE_H_DEFINED_glGetFloatIndexedvEXT #define GLEE_H_DEFINED_glGetFloatIndexedvEXT typedef void (APIENTRYP GLEEPFNGLGETFLOATINDEXEDVEXTPROC) (GLenum target, GLuint index, GLfloat * data); GLEE_EXTERN GLEEPFNGLGETFLOATINDEXEDVEXTPROC GLeeFuncPtr_glGetFloatIndexedvEXT; #define glGetFloatIndexedvEXT GLeeFuncPtr_glGetFloatIndexedvEXT #endif #ifndef GLEE_H_DEFINED_glGetDoubleIndexedvEXT #define GLEE_H_DEFINED_glGetDoubleIndexedvEXT typedef void (APIENTRYP GLEEPFNGLGETDOUBLEINDEXEDVEXTPROC) (GLenum target, GLuint index, GLdouble * data); GLEE_EXTERN GLEEPFNGLGETDOUBLEINDEXEDVEXTPROC GLeeFuncPtr_glGetDoubleIndexedvEXT; #define glGetDoubleIndexedvEXT GLeeFuncPtr_glGetDoubleIndexedvEXT #endif #ifndef GLEE_H_DEFINED_glGetPointerIndexedvEXT #define GLEE_H_DEFINED_glGetPointerIndexedvEXT typedef void (APIENTRYP GLEEPFNGLGETPOINTERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLvoid* * data); GLEE_EXTERN GLEEPFNGLGETPOINTERINDEXEDVEXTPROC GLeeFuncPtr_glGetPointerIndexedvEXT; #define glGetPointerIndexedvEXT GLeeFuncPtr_glGetPointerIndexedvEXT #endif #ifndef GLEE_H_DEFINED_glCompressedTextureImage3DEXT #define GLEE_H_DEFINED_glCompressedTextureImage3DEXT typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * bits); GLEE_EXTERN GLEEPFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC GLeeFuncPtr_glCompressedTextureImage3DEXT; #define glCompressedTextureImage3DEXT GLeeFuncPtr_glCompressedTextureImage3DEXT #endif #ifndef GLEE_H_DEFINED_glCompressedTextureImage2DEXT #define GLEE_H_DEFINED_glCompressedTextureImage2DEXT typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * bits); GLEE_EXTERN GLEEPFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC GLeeFuncPtr_glCompressedTextureImage2DEXT; #define glCompressedTextureImage2DEXT GLeeFuncPtr_glCompressedTextureImage2DEXT #endif #ifndef GLEE_H_DEFINED_glCompressedTextureImage1DEXT #define GLEE_H_DEFINED_glCompressedTextureImage1DEXT typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid * bits); GLEE_EXTERN GLEEPFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC GLeeFuncPtr_glCompressedTextureImage1DEXT; #define glCompressedTextureImage1DEXT GLeeFuncPtr_glCompressedTextureImage1DEXT #endif #ifndef GLEE_H_DEFINED_glCompressedTextureSubImage3DEXT #define GLEE_H_DEFINED_glCompressedTextureSubImage3DEXT typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * bits); GLEE_EXTERN GLEEPFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC GLeeFuncPtr_glCompressedTextureSubImage3DEXT; #define glCompressedTextureSubImage3DEXT GLeeFuncPtr_glCompressedTextureSubImage3DEXT #endif #ifndef GLEE_H_DEFINED_glCompressedTextureSubImage2DEXT #define GLEE_H_DEFINED_glCompressedTextureSubImage2DEXT typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * bits); GLEE_EXTERN GLEEPFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC GLeeFuncPtr_glCompressedTextureSubImage2DEXT; #define glCompressedTextureSubImage2DEXT GLeeFuncPtr_glCompressedTextureSubImage2DEXT #endif #ifndef GLEE_H_DEFINED_glCompressedTextureSubImage1DEXT #define GLEE_H_DEFINED_glCompressedTextureSubImage1DEXT typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * bits); GLEE_EXTERN GLEEPFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC GLeeFuncPtr_glCompressedTextureSubImage1DEXT; #define glCompressedTextureSubImage1DEXT GLeeFuncPtr_glCompressedTextureSubImage1DEXT #endif #ifndef GLEE_H_DEFINED_glGetCompressedTextureImageEXT #define GLEE_H_DEFINED_glGetCompressedTextureImageEXT typedef void (APIENTRYP GLEEPFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint lod, GLvoid * img); GLEE_EXTERN GLEEPFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC GLeeFuncPtr_glGetCompressedTextureImageEXT; #define glGetCompressedTextureImageEXT GLeeFuncPtr_glGetCompressedTextureImageEXT #endif #ifndef GLEE_H_DEFINED_glCompressedMultiTexImage3DEXT #define GLEE_H_DEFINED_glCompressedMultiTexImage3DEXT typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * bits); GLEE_EXTERN GLEEPFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC GLeeFuncPtr_glCompressedMultiTexImage3DEXT; #define glCompressedMultiTexImage3DEXT GLeeFuncPtr_glCompressedMultiTexImage3DEXT #endif #ifndef GLEE_H_DEFINED_glCompressedMultiTexImage2DEXT #define GLEE_H_DEFINED_glCompressedMultiTexImage2DEXT typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * bits); GLEE_EXTERN GLEEPFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC GLeeFuncPtr_glCompressedMultiTexImage2DEXT; #define glCompressedMultiTexImage2DEXT GLeeFuncPtr_glCompressedMultiTexImage2DEXT #endif #ifndef GLEE_H_DEFINED_glCompressedMultiTexImage1DEXT #define GLEE_H_DEFINED_glCompressedMultiTexImage1DEXT typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid * bits); GLEE_EXTERN GLEEPFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC GLeeFuncPtr_glCompressedMultiTexImage1DEXT; #define glCompressedMultiTexImage1DEXT GLeeFuncPtr_glCompressedMultiTexImage1DEXT #endif #ifndef GLEE_H_DEFINED_glCompressedMultiTexSubImage3DEXT #define GLEE_H_DEFINED_glCompressedMultiTexSubImage3DEXT typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * bits); GLEE_EXTERN GLEEPFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC GLeeFuncPtr_glCompressedMultiTexSubImage3DEXT; #define glCompressedMultiTexSubImage3DEXT GLeeFuncPtr_glCompressedMultiTexSubImage3DEXT #endif #ifndef GLEE_H_DEFINED_glCompressedMultiTexSubImage2DEXT #define GLEE_H_DEFINED_glCompressedMultiTexSubImage2DEXT typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * bits); GLEE_EXTERN GLEEPFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC GLeeFuncPtr_glCompressedMultiTexSubImage2DEXT; #define glCompressedMultiTexSubImage2DEXT GLeeFuncPtr_glCompressedMultiTexSubImage2DEXT #endif #ifndef GLEE_H_DEFINED_glCompressedMultiTexSubImage1DEXT #define GLEE_H_DEFINED_glCompressedMultiTexSubImage1DEXT typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * bits); GLEE_EXTERN GLEEPFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC GLeeFuncPtr_glCompressedMultiTexSubImage1DEXT; #define glCompressedMultiTexSubImage1DEXT GLeeFuncPtr_glCompressedMultiTexSubImage1DEXT #endif #ifndef GLEE_H_DEFINED_glGetCompressedMultiTexImageEXT #define GLEE_H_DEFINED_glGetCompressedMultiTexImageEXT typedef void (APIENTRYP GLEEPFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint lod, GLvoid * img); GLEE_EXTERN GLEEPFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC GLeeFuncPtr_glGetCompressedMultiTexImageEXT; #define glGetCompressedMultiTexImageEXT GLeeFuncPtr_glGetCompressedMultiTexImageEXT #endif #ifndef GLEE_H_DEFINED_glNamedProgramStringEXT #define GLEE_H_DEFINED_glNamedProgramStringEXT typedef void (APIENTRYP GLEEPFNGLNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum format, GLsizei len, const GLvoid * string); GLEE_EXTERN GLEEPFNGLNAMEDPROGRAMSTRINGEXTPROC GLeeFuncPtr_glNamedProgramStringEXT; #define glNamedProgramStringEXT GLeeFuncPtr_glNamedProgramStringEXT #endif #ifndef GLEE_H_DEFINED_glNamedProgramLocalParameter4dEXT #define GLEE_H_DEFINED_glNamedProgramLocalParameter4dEXT typedef void (APIENTRYP GLEEPFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLEE_EXTERN GLEEPFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC GLeeFuncPtr_glNamedProgramLocalParameter4dEXT; #define glNamedProgramLocalParameter4dEXT GLeeFuncPtr_glNamedProgramLocalParameter4dEXT #endif #ifndef GLEE_H_DEFINED_glNamedProgramLocalParameter4dvEXT #define GLEE_H_DEFINED_glNamedProgramLocalParameter4dvEXT typedef void (APIENTRYP GLEEPFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLdouble * params); GLEE_EXTERN GLEEPFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC GLeeFuncPtr_glNamedProgramLocalParameter4dvEXT; #define glNamedProgramLocalParameter4dvEXT GLeeFuncPtr_glNamedProgramLocalParameter4dvEXT #endif #ifndef GLEE_H_DEFINED_glNamedProgramLocalParameter4fEXT #define GLEE_H_DEFINED_glNamedProgramLocalParameter4fEXT typedef void (APIENTRYP GLEEPFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLEE_EXTERN GLEEPFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC GLeeFuncPtr_glNamedProgramLocalParameter4fEXT; #define glNamedProgramLocalParameter4fEXT GLeeFuncPtr_glNamedProgramLocalParameter4fEXT #endif #ifndef GLEE_H_DEFINED_glNamedProgramLocalParameter4fvEXT #define GLEE_H_DEFINED_glNamedProgramLocalParameter4fvEXT typedef void (APIENTRYP GLEEPFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLfloat * params); GLEE_EXTERN GLEEPFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC GLeeFuncPtr_glNamedProgramLocalParameter4fvEXT; #define glNamedProgramLocalParameter4fvEXT GLeeFuncPtr_glNamedProgramLocalParameter4fvEXT #endif #ifndef GLEE_H_DEFINED_glGetNamedProgramLocalParameterdvEXT #define GLEE_H_DEFINED_glGetNamedProgramLocalParameterdvEXT typedef void (APIENTRYP GLEEPFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble * params); GLEE_EXTERN GLEEPFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC GLeeFuncPtr_glGetNamedProgramLocalParameterdvEXT; #define glGetNamedProgramLocalParameterdvEXT GLeeFuncPtr_glGetNamedProgramLocalParameterdvEXT #endif #ifndef GLEE_H_DEFINED_glGetNamedProgramLocalParameterfvEXT #define GLEE_H_DEFINED_glGetNamedProgramLocalParameterfvEXT typedef void (APIENTRYP GLEEPFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC GLeeFuncPtr_glGetNamedProgramLocalParameterfvEXT; #define glGetNamedProgramLocalParameterfvEXT GLeeFuncPtr_glGetNamedProgramLocalParameterfvEXT #endif #ifndef GLEE_H_DEFINED_glGetNamedProgramivEXT #define GLEE_H_DEFINED_glGetNamedProgramivEXT typedef void (APIENTRYP GLEEPFNGLGETNAMEDPROGRAMIVEXTPROC) (GLuint program, GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETNAMEDPROGRAMIVEXTPROC GLeeFuncPtr_glGetNamedProgramivEXT; #define glGetNamedProgramivEXT GLeeFuncPtr_glGetNamedProgramivEXT #endif #ifndef GLEE_H_DEFINED_glGetNamedProgramStringEXT #define GLEE_H_DEFINED_glGetNamedProgramStringEXT typedef void (APIENTRYP GLEEPFNGLGETNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum pname, GLvoid * string); GLEE_EXTERN GLEEPFNGLGETNAMEDPROGRAMSTRINGEXTPROC GLeeFuncPtr_glGetNamedProgramStringEXT; #define glGetNamedProgramStringEXT GLeeFuncPtr_glGetNamedProgramStringEXT #endif #ifndef GLEE_H_DEFINED_glNamedProgramLocalParameters4fvEXT #define GLEE_H_DEFINED_glNamedProgramLocalParameters4fvEXT typedef void (APIENTRYP GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat * params); GLEE_EXTERN GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC GLeeFuncPtr_glNamedProgramLocalParameters4fvEXT; #define glNamedProgramLocalParameters4fvEXT GLeeFuncPtr_glNamedProgramLocalParameters4fvEXT #endif #ifndef GLEE_H_DEFINED_glNamedProgramLocalParameterI4iEXT #define GLEE_H_DEFINED_glNamedProgramLocalParameterI4iEXT typedef void (APIENTRYP GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC) (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); GLEE_EXTERN GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC GLeeFuncPtr_glNamedProgramLocalParameterI4iEXT; #define glNamedProgramLocalParameterI4iEXT GLeeFuncPtr_glNamedProgramLocalParameterI4iEXT #endif #ifndef GLEE_H_DEFINED_glNamedProgramLocalParameterI4ivEXT #define GLEE_H_DEFINED_glNamedProgramLocalParameterI4ivEXT typedef void (APIENTRYP GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLint * params); GLEE_EXTERN GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC GLeeFuncPtr_glNamedProgramLocalParameterI4ivEXT; #define glNamedProgramLocalParameterI4ivEXT GLeeFuncPtr_glNamedProgramLocalParameterI4ivEXT #endif #ifndef GLEE_H_DEFINED_glNamedProgramLocalParametersI4ivEXT #define GLEE_H_DEFINED_glNamedProgramLocalParametersI4ivEXT typedef void (APIENTRYP GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint * params); GLEE_EXTERN GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC GLeeFuncPtr_glNamedProgramLocalParametersI4ivEXT; #define glNamedProgramLocalParametersI4ivEXT GLeeFuncPtr_glNamedProgramLocalParametersI4ivEXT #endif #ifndef GLEE_H_DEFINED_glNamedProgramLocalParameterI4uiEXT #define GLEE_H_DEFINED_glNamedProgramLocalParameterI4uiEXT typedef void (APIENTRYP GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); GLEE_EXTERN GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC GLeeFuncPtr_glNamedProgramLocalParameterI4uiEXT; #define glNamedProgramLocalParameterI4uiEXT GLeeFuncPtr_glNamedProgramLocalParameterI4uiEXT #endif #ifndef GLEE_H_DEFINED_glNamedProgramLocalParameterI4uivEXT #define GLEE_H_DEFINED_glNamedProgramLocalParameterI4uivEXT typedef void (APIENTRYP GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLuint * params); GLEE_EXTERN GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC GLeeFuncPtr_glNamedProgramLocalParameterI4uivEXT; #define glNamedProgramLocalParameterI4uivEXT GLeeFuncPtr_glNamedProgramLocalParameterI4uivEXT #endif #ifndef GLEE_H_DEFINED_glNamedProgramLocalParametersI4uivEXT #define GLEE_H_DEFINED_glNamedProgramLocalParametersI4uivEXT typedef void (APIENTRYP GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint * params); GLEE_EXTERN GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC GLeeFuncPtr_glNamedProgramLocalParametersI4uivEXT; #define glNamedProgramLocalParametersI4uivEXT GLeeFuncPtr_glNamedProgramLocalParametersI4uivEXT #endif #ifndef GLEE_H_DEFINED_glGetNamedProgramLocalParameterIivEXT #define GLEE_H_DEFINED_glGetNamedProgramLocalParameterIivEXT typedef void (APIENTRYP GLEEPFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLint * params); GLEE_EXTERN GLEEPFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC GLeeFuncPtr_glGetNamedProgramLocalParameterIivEXT; #define glGetNamedProgramLocalParameterIivEXT GLeeFuncPtr_glGetNamedProgramLocalParameterIivEXT #endif #ifndef GLEE_H_DEFINED_glGetNamedProgramLocalParameterIuivEXT #define GLEE_H_DEFINED_glGetNamedProgramLocalParameterIuivEXT typedef void (APIENTRYP GLEEPFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint * params); GLEE_EXTERN GLEEPFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC GLeeFuncPtr_glGetNamedProgramLocalParameterIuivEXT; #define glGetNamedProgramLocalParameterIuivEXT GLeeFuncPtr_glGetNamedProgramLocalParameterIuivEXT #endif #ifndef GLEE_H_DEFINED_glTextureParameterIivEXT #define GLEE_H_DEFINED_glTextureParameterIivEXT typedef void (APIENTRYP GLEEPFNGLTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLTEXTUREPARAMETERIIVEXTPROC GLeeFuncPtr_glTextureParameterIivEXT; #define glTextureParameterIivEXT GLeeFuncPtr_glTextureParameterIivEXT #endif #ifndef GLEE_H_DEFINED_glTextureParameterIuivEXT #define GLEE_H_DEFINED_glTextureParameterIuivEXT typedef void (APIENTRYP GLEEPFNGLTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLuint * params); GLEE_EXTERN GLEEPFNGLTEXTUREPARAMETERIUIVEXTPROC GLeeFuncPtr_glTextureParameterIuivEXT; #define glTextureParameterIuivEXT GLeeFuncPtr_glTextureParameterIuivEXT #endif #ifndef GLEE_H_DEFINED_glGetTextureParameterIivEXT #define GLEE_H_DEFINED_glGetTextureParameterIivEXT typedef void (APIENTRYP GLEEPFNGLGETTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETTEXTUREPARAMETERIIVEXTPROC GLeeFuncPtr_glGetTextureParameterIivEXT; #define glGetTextureParameterIivEXT GLeeFuncPtr_glGetTextureParameterIivEXT #endif #ifndef GLEE_H_DEFINED_glGetTextureParameterIuivEXT #define GLEE_H_DEFINED_glGetTextureParameterIuivEXT typedef void (APIENTRYP GLEEPFNGLGETTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLuint * params); GLEE_EXTERN GLEEPFNGLGETTEXTUREPARAMETERIUIVEXTPROC GLeeFuncPtr_glGetTextureParameterIuivEXT; #define glGetTextureParameterIuivEXT GLeeFuncPtr_glGetTextureParameterIuivEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexParameterIivEXT #define GLEE_H_DEFINED_glMultiTexParameterIivEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLMULTITEXPARAMETERIIVEXTPROC GLeeFuncPtr_glMultiTexParameterIivEXT; #define glMultiTexParameterIivEXT GLeeFuncPtr_glMultiTexParameterIivEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexParameterIuivEXT #define GLEE_H_DEFINED_glMultiTexParameterIuivEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLuint * params); GLEE_EXTERN GLEEPFNGLMULTITEXPARAMETERIUIVEXTPROC GLeeFuncPtr_glMultiTexParameterIuivEXT; #define glMultiTexParameterIuivEXT GLeeFuncPtr_glMultiTexParameterIuivEXT #endif #ifndef GLEE_H_DEFINED_glGetMultiTexParameterIivEXT #define GLEE_H_DEFINED_glGetMultiTexParameterIivEXT typedef void (APIENTRYP GLEEPFNGLGETMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETMULTITEXPARAMETERIIVEXTPROC GLeeFuncPtr_glGetMultiTexParameterIivEXT; #define glGetMultiTexParameterIivEXT GLeeFuncPtr_glGetMultiTexParameterIivEXT #endif #ifndef GLEE_H_DEFINED_glGetMultiTexParameterIuivEXT #define GLEE_H_DEFINED_glGetMultiTexParameterIuivEXT typedef void (APIENTRYP GLEEPFNGLGETMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLuint * params); GLEE_EXTERN GLEEPFNGLGETMULTITEXPARAMETERIUIVEXTPROC GLeeFuncPtr_glGetMultiTexParameterIuivEXT; #define glGetMultiTexParameterIuivEXT GLeeFuncPtr_glGetMultiTexParameterIuivEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform1fEXT #define GLEE_H_DEFINED_glProgramUniform1fEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat v0); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM1FEXTPROC GLeeFuncPtr_glProgramUniform1fEXT; #define glProgramUniform1fEXT GLeeFuncPtr_glProgramUniform1fEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform2fEXT #define GLEE_H_DEFINED_glProgramUniform2fEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM2FEXTPROC GLeeFuncPtr_glProgramUniform2fEXT; #define glProgramUniform2fEXT GLeeFuncPtr_glProgramUniform2fEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform3fEXT #define GLEE_H_DEFINED_glProgramUniform3fEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM3FEXTPROC GLeeFuncPtr_glProgramUniform3fEXT; #define glProgramUniform3fEXT GLeeFuncPtr_glProgramUniform3fEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform4fEXT #define GLEE_H_DEFINED_glProgramUniform4fEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM4FEXTPROC GLeeFuncPtr_glProgramUniform4fEXT; #define glProgramUniform4fEXT GLeeFuncPtr_glProgramUniform4fEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform1iEXT #define GLEE_H_DEFINED_glProgramUniform1iEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint v0); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM1IEXTPROC GLeeFuncPtr_glProgramUniform1iEXT; #define glProgramUniform1iEXT GLeeFuncPtr_glProgramUniform1iEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform2iEXT #define GLEE_H_DEFINED_glProgramUniform2iEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM2IEXTPROC GLeeFuncPtr_glProgramUniform2iEXT; #define glProgramUniform2iEXT GLeeFuncPtr_glProgramUniform2iEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform3iEXT #define GLEE_H_DEFINED_glProgramUniform3iEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM3IEXTPROC GLeeFuncPtr_glProgramUniform3iEXT; #define glProgramUniform3iEXT GLeeFuncPtr_glProgramUniform3iEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform4iEXT #define GLEE_H_DEFINED_glProgramUniform4iEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM4IEXTPROC GLeeFuncPtr_glProgramUniform4iEXT; #define glProgramUniform4iEXT GLeeFuncPtr_glProgramUniform4iEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform1fvEXT #define GLEE_H_DEFINED_glProgramUniform1fvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM1FVEXTPROC GLeeFuncPtr_glProgramUniform1fvEXT; #define glProgramUniform1fvEXT GLeeFuncPtr_glProgramUniform1fvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform2fvEXT #define GLEE_H_DEFINED_glProgramUniform2fvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM2FVEXTPROC GLeeFuncPtr_glProgramUniform2fvEXT; #define glProgramUniform2fvEXT GLeeFuncPtr_glProgramUniform2fvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform3fvEXT #define GLEE_H_DEFINED_glProgramUniform3fvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM3FVEXTPROC GLeeFuncPtr_glProgramUniform3fvEXT; #define glProgramUniform3fvEXT GLeeFuncPtr_glProgramUniform3fvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform4fvEXT #define GLEE_H_DEFINED_glProgramUniform4fvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM4FVEXTPROC GLeeFuncPtr_glProgramUniform4fvEXT; #define glProgramUniform4fvEXT GLeeFuncPtr_glProgramUniform4fvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform1ivEXT #define GLEE_H_DEFINED_glProgramUniform1ivEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM1IVEXTPROC GLeeFuncPtr_glProgramUniform1ivEXT; #define glProgramUniform1ivEXT GLeeFuncPtr_glProgramUniform1ivEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform2ivEXT #define GLEE_H_DEFINED_glProgramUniform2ivEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM2IVEXTPROC GLeeFuncPtr_glProgramUniform2ivEXT; #define glProgramUniform2ivEXT GLeeFuncPtr_glProgramUniform2ivEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform3ivEXT #define GLEE_H_DEFINED_glProgramUniform3ivEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM3IVEXTPROC GLeeFuncPtr_glProgramUniform3ivEXT; #define glProgramUniform3ivEXT GLeeFuncPtr_glProgramUniform3ivEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform4ivEXT #define GLEE_H_DEFINED_glProgramUniform4ivEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM4IVEXTPROC GLeeFuncPtr_glProgramUniform4ivEXT; #define glProgramUniform4ivEXT GLeeFuncPtr_glProgramUniform4ivEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix2fvEXT #define GLEE_H_DEFINED_glProgramUniformMatrix2fvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC GLeeFuncPtr_glProgramUniformMatrix2fvEXT; #define glProgramUniformMatrix2fvEXT GLeeFuncPtr_glProgramUniformMatrix2fvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix3fvEXT #define GLEE_H_DEFINED_glProgramUniformMatrix3fvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC GLeeFuncPtr_glProgramUniformMatrix3fvEXT; #define glProgramUniformMatrix3fvEXT GLeeFuncPtr_glProgramUniformMatrix3fvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix4fvEXT #define GLEE_H_DEFINED_glProgramUniformMatrix4fvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC GLeeFuncPtr_glProgramUniformMatrix4fvEXT; #define glProgramUniformMatrix4fvEXT GLeeFuncPtr_glProgramUniformMatrix4fvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix2x3fvEXT #define GLEE_H_DEFINED_glProgramUniformMatrix2x3fvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC GLeeFuncPtr_glProgramUniformMatrix2x3fvEXT; #define glProgramUniformMatrix2x3fvEXT GLeeFuncPtr_glProgramUniformMatrix2x3fvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix3x2fvEXT #define GLEE_H_DEFINED_glProgramUniformMatrix3x2fvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC GLeeFuncPtr_glProgramUniformMatrix3x2fvEXT; #define glProgramUniformMatrix3x2fvEXT GLeeFuncPtr_glProgramUniformMatrix3x2fvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix2x4fvEXT #define GLEE_H_DEFINED_glProgramUniformMatrix2x4fvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC GLeeFuncPtr_glProgramUniformMatrix2x4fvEXT; #define glProgramUniformMatrix2x4fvEXT GLeeFuncPtr_glProgramUniformMatrix2x4fvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix4x2fvEXT #define GLEE_H_DEFINED_glProgramUniformMatrix4x2fvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC GLeeFuncPtr_glProgramUniformMatrix4x2fvEXT; #define glProgramUniformMatrix4x2fvEXT GLeeFuncPtr_glProgramUniformMatrix4x2fvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix3x4fvEXT #define GLEE_H_DEFINED_glProgramUniformMatrix3x4fvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC GLeeFuncPtr_glProgramUniformMatrix3x4fvEXT; #define glProgramUniformMatrix3x4fvEXT GLeeFuncPtr_glProgramUniformMatrix3x4fvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix4x3fvEXT #define GLEE_H_DEFINED_glProgramUniformMatrix4x3fvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC GLeeFuncPtr_glProgramUniformMatrix4x3fvEXT; #define glProgramUniformMatrix4x3fvEXT GLeeFuncPtr_glProgramUniformMatrix4x3fvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform1uiEXT #define GLEE_H_DEFINED_glProgramUniform1uiEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM1UIEXTPROC) (GLuint program, GLint location, GLuint v0); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM1UIEXTPROC GLeeFuncPtr_glProgramUniform1uiEXT; #define glProgramUniform1uiEXT GLeeFuncPtr_glProgramUniform1uiEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform2uiEXT #define GLEE_H_DEFINED_glProgramUniform2uiEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM2UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM2UIEXTPROC GLeeFuncPtr_glProgramUniform2uiEXT; #define glProgramUniform2uiEXT GLeeFuncPtr_glProgramUniform2uiEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform3uiEXT #define GLEE_H_DEFINED_glProgramUniform3uiEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM3UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM3UIEXTPROC GLeeFuncPtr_glProgramUniform3uiEXT; #define glProgramUniform3uiEXT GLeeFuncPtr_glProgramUniform3uiEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform4uiEXT #define GLEE_H_DEFINED_glProgramUniform4uiEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM4UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM4UIEXTPROC GLeeFuncPtr_glProgramUniform4uiEXT; #define glProgramUniform4uiEXT GLeeFuncPtr_glProgramUniform4uiEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform1uivEXT #define GLEE_H_DEFINED_glProgramUniform1uivEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM1UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM1UIVEXTPROC GLeeFuncPtr_glProgramUniform1uivEXT; #define glProgramUniform1uivEXT GLeeFuncPtr_glProgramUniform1uivEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform2uivEXT #define GLEE_H_DEFINED_glProgramUniform2uivEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM2UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM2UIVEXTPROC GLeeFuncPtr_glProgramUniform2uivEXT; #define glProgramUniform2uivEXT GLeeFuncPtr_glProgramUniform2uivEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform3uivEXT #define GLEE_H_DEFINED_glProgramUniform3uivEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM3UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM3UIVEXTPROC GLeeFuncPtr_glProgramUniform3uivEXT; #define glProgramUniform3uivEXT GLeeFuncPtr_glProgramUniform3uivEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform4uivEXT #define GLEE_H_DEFINED_glProgramUniform4uivEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM4UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM4UIVEXTPROC GLeeFuncPtr_glProgramUniform4uivEXT; #define glProgramUniform4uivEXT GLeeFuncPtr_glProgramUniform4uivEXT #endif #ifndef GLEE_H_DEFINED_glNamedBufferDataEXT #define GLEE_H_DEFINED_glNamedBufferDataEXT typedef void (APIENTRYP GLEEPFNGLNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLsizeiptr size, const GLvoid * data, GLenum usage); GLEE_EXTERN GLEEPFNGLNAMEDBUFFERDATAEXTPROC GLeeFuncPtr_glNamedBufferDataEXT; #define glNamedBufferDataEXT GLeeFuncPtr_glNamedBufferDataEXT #endif #ifndef GLEE_H_DEFINED_glNamedBufferSubDataEXT #define GLEE_H_DEFINED_glNamedBufferSubDataEXT typedef void (APIENTRYP GLEEPFNGLNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const GLvoid * data); GLEE_EXTERN GLEEPFNGLNAMEDBUFFERSUBDATAEXTPROC GLeeFuncPtr_glNamedBufferSubDataEXT; #define glNamedBufferSubDataEXT GLeeFuncPtr_glNamedBufferSubDataEXT #endif #ifndef GLEE_H_DEFINED_glMapNamedBufferEXT #define GLEE_H_DEFINED_glMapNamedBufferEXT typedef GLvoid* (APIENTRYP GLEEPFNGLMAPNAMEDBUFFEREXTPROC) (GLuint buffer, GLenum access); GLEE_EXTERN GLEEPFNGLMAPNAMEDBUFFEREXTPROC GLeeFuncPtr_glMapNamedBufferEXT; #define glMapNamedBufferEXT GLeeFuncPtr_glMapNamedBufferEXT #endif #ifndef GLEE_H_DEFINED_glUnmapNamedBufferEXT #define GLEE_H_DEFINED_glUnmapNamedBufferEXT typedef GLboolean (APIENTRYP GLEEPFNGLUNMAPNAMEDBUFFEREXTPROC) (GLuint buffer); GLEE_EXTERN GLEEPFNGLUNMAPNAMEDBUFFEREXTPROC GLeeFuncPtr_glUnmapNamedBufferEXT; #define glUnmapNamedBufferEXT GLeeFuncPtr_glUnmapNamedBufferEXT #endif #ifndef GLEE_H_DEFINED_glMapNamedBufferRangeEXT #define GLEE_H_DEFINED_glMapNamedBufferRangeEXT typedef GLvoid* (APIENTRYP GLEEPFNGLMAPNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); GLEE_EXTERN GLEEPFNGLMAPNAMEDBUFFERRANGEEXTPROC GLeeFuncPtr_glMapNamedBufferRangeEXT; #define glMapNamedBufferRangeEXT GLeeFuncPtr_glMapNamedBufferRangeEXT #endif #ifndef GLEE_H_DEFINED_glFlushMappedNamedBufferRangeEXT #define GLEE_H_DEFINED_glFlushMappedNamedBufferRangeEXT typedef void (APIENTRYP GLEEPFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); GLEE_EXTERN GLEEPFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC GLeeFuncPtr_glFlushMappedNamedBufferRangeEXT; #define glFlushMappedNamedBufferRangeEXT GLeeFuncPtr_glFlushMappedNamedBufferRangeEXT #endif #ifndef GLEE_H_DEFINED_glNamedCopyBufferSubDataEXT #define GLEE_H_DEFINED_glNamedCopyBufferSubDataEXT typedef void (APIENTRYP GLEEPFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); GLEE_EXTERN GLEEPFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC GLeeFuncPtr_glNamedCopyBufferSubDataEXT; #define glNamedCopyBufferSubDataEXT GLeeFuncPtr_glNamedCopyBufferSubDataEXT #endif #ifndef GLEE_H_DEFINED_glGetNamedBufferParameterivEXT #define GLEE_H_DEFINED_glGetNamedBufferParameterivEXT typedef void (APIENTRYP GLEEPFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC) (GLuint buffer, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC GLeeFuncPtr_glGetNamedBufferParameterivEXT; #define glGetNamedBufferParameterivEXT GLeeFuncPtr_glGetNamedBufferParameterivEXT #endif #ifndef GLEE_H_DEFINED_glGetNamedBufferPointervEXT #define GLEE_H_DEFINED_glGetNamedBufferPointervEXT typedef void (APIENTRYP GLEEPFNGLGETNAMEDBUFFERPOINTERVEXTPROC) (GLuint buffer, GLenum pname, GLvoid* * params); GLEE_EXTERN GLEEPFNGLGETNAMEDBUFFERPOINTERVEXTPROC GLeeFuncPtr_glGetNamedBufferPointervEXT; #define glGetNamedBufferPointervEXT GLeeFuncPtr_glGetNamedBufferPointervEXT #endif #ifndef GLEE_H_DEFINED_glGetNamedBufferSubDataEXT #define GLEE_H_DEFINED_glGetNamedBufferSubDataEXT typedef void (APIENTRYP GLEEPFNGLGETNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLvoid * data); GLEE_EXTERN GLEEPFNGLGETNAMEDBUFFERSUBDATAEXTPROC GLeeFuncPtr_glGetNamedBufferSubDataEXT; #define glGetNamedBufferSubDataEXT GLeeFuncPtr_glGetNamedBufferSubDataEXT #endif #ifndef GLEE_H_DEFINED_glTextureBufferEXT #define GLEE_H_DEFINED_glTextureBufferEXT typedef void (APIENTRYP GLEEPFNGLTEXTUREBUFFEREXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); GLEE_EXTERN GLEEPFNGLTEXTUREBUFFEREXTPROC GLeeFuncPtr_glTextureBufferEXT; #define glTextureBufferEXT GLeeFuncPtr_glTextureBufferEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexBufferEXT #define GLEE_H_DEFINED_glMultiTexBufferEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXBUFFEREXTPROC) (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); GLEE_EXTERN GLEEPFNGLMULTITEXBUFFEREXTPROC GLeeFuncPtr_glMultiTexBufferEXT; #define glMultiTexBufferEXT GLeeFuncPtr_glMultiTexBufferEXT #endif #ifndef GLEE_H_DEFINED_glNamedRenderbufferStorageEXT #define GLEE_H_DEFINED_glNamedRenderbufferStorageEXT typedef void (APIENTRYP GLEEPFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC GLeeFuncPtr_glNamedRenderbufferStorageEXT; #define glNamedRenderbufferStorageEXT GLeeFuncPtr_glNamedRenderbufferStorageEXT #endif #ifndef GLEE_H_DEFINED_glGetNamedRenderbufferParameterivEXT #define GLEE_H_DEFINED_glGetNamedRenderbufferParameterivEXT typedef void (APIENTRYP GLEEPFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC) (GLuint renderbuffer, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC GLeeFuncPtr_glGetNamedRenderbufferParameterivEXT; #define glGetNamedRenderbufferParameterivEXT GLeeFuncPtr_glGetNamedRenderbufferParameterivEXT #endif #ifndef GLEE_H_DEFINED_glCheckNamedFramebufferStatusEXT #define GLEE_H_DEFINED_glCheckNamedFramebufferStatusEXT typedef GLenum (APIENTRYP GLEEPFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC) (GLuint framebuffer, GLenum target); GLEE_EXTERN GLEEPFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC GLeeFuncPtr_glCheckNamedFramebufferStatusEXT; #define glCheckNamedFramebufferStatusEXT GLeeFuncPtr_glCheckNamedFramebufferStatusEXT #endif #ifndef GLEE_H_DEFINED_glNamedFramebufferTexture1DEXT #define GLEE_H_DEFINED_glNamedFramebufferTexture1DEXT typedef void (APIENTRYP GLEEPFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLEE_EXTERN GLEEPFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC GLeeFuncPtr_glNamedFramebufferTexture1DEXT; #define glNamedFramebufferTexture1DEXT GLeeFuncPtr_glNamedFramebufferTexture1DEXT #endif #ifndef GLEE_H_DEFINED_glNamedFramebufferTexture2DEXT #define GLEE_H_DEFINED_glNamedFramebufferTexture2DEXT typedef void (APIENTRYP GLEEPFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLEE_EXTERN GLEEPFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC GLeeFuncPtr_glNamedFramebufferTexture2DEXT; #define glNamedFramebufferTexture2DEXT GLeeFuncPtr_glNamedFramebufferTexture2DEXT #endif #ifndef GLEE_H_DEFINED_glNamedFramebufferTexture3DEXT #define GLEE_H_DEFINED_glNamedFramebufferTexture3DEXT typedef void (APIENTRYP GLEEPFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); GLEE_EXTERN GLEEPFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC GLeeFuncPtr_glNamedFramebufferTexture3DEXT; #define glNamedFramebufferTexture3DEXT GLeeFuncPtr_glNamedFramebufferTexture3DEXT #endif #ifndef GLEE_H_DEFINED_glNamedFramebufferRenderbufferEXT #define GLEE_H_DEFINED_glNamedFramebufferRenderbufferEXT typedef void (APIENTRYP GLEEPFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); GLEE_EXTERN GLEEPFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC GLeeFuncPtr_glNamedFramebufferRenderbufferEXT; #define glNamedFramebufferRenderbufferEXT GLeeFuncPtr_glNamedFramebufferRenderbufferEXT #endif #ifndef GLEE_H_DEFINED_glGetNamedFramebufferAttachmentParameterivEXT #define GLEE_H_DEFINED_glGetNamedFramebufferAttachmentParameterivEXT typedef void (APIENTRYP GLEEPFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC GLeeFuncPtr_glGetNamedFramebufferAttachmentParameterivEXT; #define glGetNamedFramebufferAttachmentParameterivEXT GLeeFuncPtr_glGetNamedFramebufferAttachmentParameterivEXT #endif #ifndef GLEE_H_DEFINED_glGenerateTextureMipmapEXT #define GLEE_H_DEFINED_glGenerateTextureMipmapEXT typedef void (APIENTRYP GLEEPFNGLGENERATETEXTUREMIPMAPEXTPROC) (GLuint texture, GLenum target); GLEE_EXTERN GLEEPFNGLGENERATETEXTUREMIPMAPEXTPROC GLeeFuncPtr_glGenerateTextureMipmapEXT; #define glGenerateTextureMipmapEXT GLeeFuncPtr_glGenerateTextureMipmapEXT #endif #ifndef GLEE_H_DEFINED_glGenerateMultiTexMipmapEXT #define GLEE_H_DEFINED_glGenerateMultiTexMipmapEXT typedef void (APIENTRYP GLEEPFNGLGENERATEMULTITEXMIPMAPEXTPROC) (GLenum texunit, GLenum target); GLEE_EXTERN GLEEPFNGLGENERATEMULTITEXMIPMAPEXTPROC GLeeFuncPtr_glGenerateMultiTexMipmapEXT; #define glGenerateMultiTexMipmapEXT GLeeFuncPtr_glGenerateMultiTexMipmapEXT #endif #ifndef GLEE_H_DEFINED_glFramebufferDrawBufferEXT #define GLEE_H_DEFINED_glFramebufferDrawBufferEXT typedef void (APIENTRYP GLEEPFNGLFRAMEBUFFERDRAWBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERDRAWBUFFEREXTPROC GLeeFuncPtr_glFramebufferDrawBufferEXT; #define glFramebufferDrawBufferEXT GLeeFuncPtr_glFramebufferDrawBufferEXT #endif #ifndef GLEE_H_DEFINED_glFramebufferDrawBuffersEXT #define GLEE_H_DEFINED_glFramebufferDrawBuffersEXT typedef void (APIENTRYP GLEEPFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC) (GLuint framebuffer, GLsizei n, const GLenum * bufs); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC GLeeFuncPtr_glFramebufferDrawBuffersEXT; #define glFramebufferDrawBuffersEXT GLeeFuncPtr_glFramebufferDrawBuffersEXT #endif #ifndef GLEE_H_DEFINED_glFramebufferReadBufferEXT #define GLEE_H_DEFINED_glFramebufferReadBufferEXT typedef void (APIENTRYP GLEEPFNGLFRAMEBUFFERREADBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERREADBUFFEREXTPROC GLeeFuncPtr_glFramebufferReadBufferEXT; #define glFramebufferReadBufferEXT GLeeFuncPtr_glFramebufferReadBufferEXT #endif #ifndef GLEE_H_DEFINED_glGetFramebufferParameterivEXT #define GLEE_H_DEFINED_glGetFramebufferParameterivEXT typedef void (APIENTRYP GLEEPFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC GLeeFuncPtr_glGetFramebufferParameterivEXT; #define glGetFramebufferParameterivEXT GLeeFuncPtr_glGetFramebufferParameterivEXT #endif #ifndef GLEE_H_DEFINED_glNamedRenderbufferStorageMultisampleEXT #define GLEE_H_DEFINED_glNamedRenderbufferStorageMultisampleEXT typedef void (APIENTRYP GLEEPFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC GLeeFuncPtr_glNamedRenderbufferStorageMultisampleEXT; #define glNamedRenderbufferStorageMultisampleEXT GLeeFuncPtr_glNamedRenderbufferStorageMultisampleEXT #endif #ifndef GLEE_H_DEFINED_glNamedRenderbufferStorageMultisampleCoverageEXT #define GLEE_H_DEFINED_glNamedRenderbufferStorageMultisampleCoverageEXT typedef void (APIENTRYP GLEEPFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC) (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC GLeeFuncPtr_glNamedRenderbufferStorageMultisampleCoverageEXT; #define glNamedRenderbufferStorageMultisampleCoverageEXT GLeeFuncPtr_glNamedRenderbufferStorageMultisampleCoverageEXT #endif #ifndef GLEE_H_DEFINED_glNamedFramebufferTextureEXT #define GLEE_H_DEFINED_glNamedFramebufferTextureEXT typedef void (APIENTRYP GLEEPFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); GLEE_EXTERN GLEEPFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC GLeeFuncPtr_glNamedFramebufferTextureEXT; #define glNamedFramebufferTextureEXT GLeeFuncPtr_glNamedFramebufferTextureEXT #endif #ifndef GLEE_H_DEFINED_glNamedFramebufferTextureLayerEXT #define GLEE_H_DEFINED_glNamedFramebufferTextureLayerEXT typedef void (APIENTRYP GLEEPFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); GLEE_EXTERN GLEEPFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC GLeeFuncPtr_glNamedFramebufferTextureLayerEXT; #define glNamedFramebufferTextureLayerEXT GLeeFuncPtr_glNamedFramebufferTextureLayerEXT #endif #ifndef GLEE_H_DEFINED_glNamedFramebufferTextureFaceEXT #define GLEE_H_DEFINED_glNamedFramebufferTextureFaceEXT typedef void (APIENTRYP GLEEPFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); GLEE_EXTERN GLEEPFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC GLeeFuncPtr_glNamedFramebufferTextureFaceEXT; #define glNamedFramebufferTextureFaceEXT GLeeFuncPtr_glNamedFramebufferTextureFaceEXT #endif #ifndef GLEE_H_DEFINED_glTextureRenderbufferEXT #define GLEE_H_DEFINED_glTextureRenderbufferEXT typedef void (APIENTRYP GLEEPFNGLTEXTURERENDERBUFFEREXTPROC) (GLuint texture, GLenum target, GLuint renderbuffer); GLEE_EXTERN GLEEPFNGLTEXTURERENDERBUFFEREXTPROC GLeeFuncPtr_glTextureRenderbufferEXT; #define glTextureRenderbufferEXT GLeeFuncPtr_glTextureRenderbufferEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexRenderbufferEXT #define GLEE_H_DEFINED_glMultiTexRenderbufferEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXRENDERBUFFEREXTPROC) (GLenum texunit, GLenum target, GLuint renderbuffer); GLEE_EXTERN GLEEPFNGLMULTITEXRENDERBUFFEREXTPROC GLeeFuncPtr_glMultiTexRenderbufferEXT; #define glMultiTexRenderbufferEXT GLeeFuncPtr_glMultiTexRenderbufferEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform1dEXT #define GLEE_H_DEFINED_glProgramUniform1dEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM1DEXTPROC) (GLuint program, GLint location, GLdouble x); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM1DEXTPROC GLeeFuncPtr_glProgramUniform1dEXT; #define glProgramUniform1dEXT GLeeFuncPtr_glProgramUniform1dEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform2dEXT #define GLEE_H_DEFINED_glProgramUniform2dEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM2DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM2DEXTPROC GLeeFuncPtr_glProgramUniform2dEXT; #define glProgramUniform2dEXT GLeeFuncPtr_glProgramUniform2dEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform3dEXT #define GLEE_H_DEFINED_glProgramUniform3dEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM3DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM3DEXTPROC GLeeFuncPtr_glProgramUniform3dEXT; #define glProgramUniform3dEXT GLeeFuncPtr_glProgramUniform3dEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform4dEXT #define GLEE_H_DEFINED_glProgramUniform4dEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM4DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM4DEXTPROC GLeeFuncPtr_glProgramUniform4dEXT; #define glProgramUniform4dEXT GLeeFuncPtr_glProgramUniform4dEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform1dvEXT #define GLEE_H_DEFINED_glProgramUniform1dvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM1DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM1DVEXTPROC GLeeFuncPtr_glProgramUniform1dvEXT; #define glProgramUniform1dvEXT GLeeFuncPtr_glProgramUniform1dvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform2dvEXT #define GLEE_H_DEFINED_glProgramUniform2dvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM2DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM2DVEXTPROC GLeeFuncPtr_glProgramUniform2dvEXT; #define glProgramUniform2dvEXT GLeeFuncPtr_glProgramUniform2dvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform3dvEXT #define GLEE_H_DEFINED_glProgramUniform3dvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM3DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM3DVEXTPROC GLeeFuncPtr_glProgramUniform3dvEXT; #define glProgramUniform3dvEXT GLeeFuncPtr_glProgramUniform3dvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform4dvEXT #define GLEE_H_DEFINED_glProgramUniform4dvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM4DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM4DVEXTPROC GLeeFuncPtr_glProgramUniform4dvEXT; #define glProgramUniform4dvEXT GLeeFuncPtr_glProgramUniform4dvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix2dvEXT #define GLEE_H_DEFINED_glProgramUniformMatrix2dvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC GLeeFuncPtr_glProgramUniformMatrix2dvEXT; #define glProgramUniformMatrix2dvEXT GLeeFuncPtr_glProgramUniformMatrix2dvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix3dvEXT #define GLEE_H_DEFINED_glProgramUniformMatrix3dvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC GLeeFuncPtr_glProgramUniformMatrix3dvEXT; #define glProgramUniformMatrix3dvEXT GLeeFuncPtr_glProgramUniformMatrix3dvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix4dvEXT #define GLEE_H_DEFINED_glProgramUniformMatrix4dvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC GLeeFuncPtr_glProgramUniformMatrix4dvEXT; #define glProgramUniformMatrix4dvEXT GLeeFuncPtr_glProgramUniformMatrix4dvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix2x3dvEXT #define GLEE_H_DEFINED_glProgramUniformMatrix2x3dvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC GLeeFuncPtr_glProgramUniformMatrix2x3dvEXT; #define glProgramUniformMatrix2x3dvEXT GLeeFuncPtr_glProgramUniformMatrix2x3dvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix2x4dvEXT #define GLEE_H_DEFINED_glProgramUniformMatrix2x4dvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC GLeeFuncPtr_glProgramUniformMatrix2x4dvEXT; #define glProgramUniformMatrix2x4dvEXT GLeeFuncPtr_glProgramUniformMatrix2x4dvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix3x2dvEXT #define GLEE_H_DEFINED_glProgramUniformMatrix3x2dvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC GLeeFuncPtr_glProgramUniformMatrix3x2dvEXT; #define glProgramUniformMatrix3x2dvEXT GLeeFuncPtr_glProgramUniformMatrix3x2dvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix3x4dvEXT #define GLEE_H_DEFINED_glProgramUniformMatrix3x4dvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC GLeeFuncPtr_glProgramUniformMatrix3x4dvEXT; #define glProgramUniformMatrix3x4dvEXT GLeeFuncPtr_glProgramUniformMatrix3x4dvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix4x2dvEXT #define GLEE_H_DEFINED_glProgramUniformMatrix4x2dvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC GLeeFuncPtr_glProgramUniformMatrix4x2dvEXT; #define glProgramUniformMatrix4x2dvEXT GLeeFuncPtr_glProgramUniformMatrix4x2dvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix4x3dvEXT #define GLEE_H_DEFINED_glProgramUniformMatrix4x3dvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC GLeeFuncPtr_glProgramUniformMatrix4x3dvEXT; #define glProgramUniformMatrix4x3dvEXT GLeeFuncPtr_glProgramUniformMatrix4x3dvEXT #endif #endif /* GL_EXT_vertex_array_bgra */ #ifndef GL_EXT_vertex_array_bgra #define GL_EXT_vertex_array_bgra 1 #define __GLEE_GL_EXT_vertex_array_bgra 1 /* Constants */ #endif /* GL_EXT_texture_swizzle */ #ifndef GL_EXT_texture_swizzle #define GL_EXT_texture_swizzle 1 #define __GLEE_GL_EXT_texture_swizzle 1 /* Constants */ #define GL_TEXTURE_SWIZZLE_R_EXT 0x8E42 #define GL_TEXTURE_SWIZZLE_G_EXT 0x8E43 #define GL_TEXTURE_SWIZZLE_B_EXT 0x8E44 #define GL_TEXTURE_SWIZZLE_A_EXT 0x8E45 #define GL_TEXTURE_SWIZZLE_RGBA_EXT 0x8E46 #endif /* GL_NV_explicit_multisample */ #ifndef GL_NV_explicit_multisample #define GL_NV_explicit_multisample 1 #define __GLEE_GL_NV_explicit_multisample 1 /* Constants */ #define GL_SAMPLE_POSITION_NV 0x8E50 #define GL_SAMPLE_MASK_NV 0x8E51 #define GL_SAMPLE_MASK_VALUE_NV 0x8E52 #define GL_TEXTURE_BINDING_RENDERBUFFER_NV 0x8E53 #define GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV 0x8E54 #define GL_TEXTURE_RENDERBUFFER_NV 0x8E55 #define GL_SAMPLER_RENDERBUFFER_NV 0x8E56 #define GL_INT_SAMPLER_RENDERBUFFER_NV 0x8E57 #define GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV 0x8E58 #define GL_MAX_SAMPLE_MASK_WORDS_NV 0x8E59 #ifndef GLEE_H_DEFINED_glGetMultisamplefvNV #define GLEE_H_DEFINED_glGetMultisamplefvNV typedef void (APIENTRYP GLEEPFNGLGETMULTISAMPLEFVNVPROC) (GLenum pname, GLuint index, GLfloat * val); GLEE_EXTERN GLEEPFNGLGETMULTISAMPLEFVNVPROC GLeeFuncPtr_glGetMultisamplefvNV; #define glGetMultisamplefvNV GLeeFuncPtr_glGetMultisamplefvNV #endif #ifndef GLEE_H_DEFINED_glSampleMaskIndexedNV #define GLEE_H_DEFINED_glSampleMaskIndexedNV typedef void (APIENTRYP GLEEPFNGLSAMPLEMASKINDEXEDNVPROC) (GLuint index, GLbitfield mask); GLEE_EXTERN GLEEPFNGLSAMPLEMASKINDEXEDNVPROC GLeeFuncPtr_glSampleMaskIndexedNV; #define glSampleMaskIndexedNV GLeeFuncPtr_glSampleMaskIndexedNV #endif #ifndef GLEE_H_DEFINED_glTexRenderbufferNV #define GLEE_H_DEFINED_glTexRenderbufferNV typedef void (APIENTRYP GLEEPFNGLTEXRENDERBUFFERNVPROC) (GLenum target, GLuint renderbuffer); GLEE_EXTERN GLEEPFNGLTEXRENDERBUFFERNVPROC GLeeFuncPtr_glTexRenderbufferNV; #define glTexRenderbufferNV GLeeFuncPtr_glTexRenderbufferNV #endif #endif /* GL_NV_transform_feedback2 */ #ifndef GL_NV_transform_feedback2 #define GL_NV_transform_feedback2 1 #define __GLEE_GL_NV_transform_feedback2 1 /* Constants */ #define GL_TRANSFORM_FEEDBACK_NV 0x8E22 #define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV 0x8E23 #define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV 0x8E24 #define GL_TRANSFORM_FEEDBACK_BINDING_NV 0x8E25 #ifndef GLEE_H_DEFINED_glBindTransformFeedbackNV #define GLEE_H_DEFINED_glBindTransformFeedbackNV typedef void (APIENTRYP GLEEPFNGLBINDTRANSFORMFEEDBACKNVPROC) (GLenum target, GLuint id); GLEE_EXTERN GLEEPFNGLBINDTRANSFORMFEEDBACKNVPROC GLeeFuncPtr_glBindTransformFeedbackNV; #define glBindTransformFeedbackNV GLeeFuncPtr_glBindTransformFeedbackNV #endif #ifndef GLEE_H_DEFINED_glDeleteTransformFeedbacksNV #define GLEE_H_DEFINED_glDeleteTransformFeedbacksNV typedef void (APIENTRYP GLEEPFNGLDELETETRANSFORMFEEDBACKSNVPROC) (GLsizei n, const GLuint * ids); GLEE_EXTERN GLEEPFNGLDELETETRANSFORMFEEDBACKSNVPROC GLeeFuncPtr_glDeleteTransformFeedbacksNV; #define glDeleteTransformFeedbacksNV GLeeFuncPtr_glDeleteTransformFeedbacksNV #endif #ifndef GLEE_H_DEFINED_glGenTransformFeedbacksNV #define GLEE_H_DEFINED_glGenTransformFeedbacksNV typedef void (APIENTRYP GLEEPFNGLGENTRANSFORMFEEDBACKSNVPROC) (GLsizei n, GLuint * ids); GLEE_EXTERN GLEEPFNGLGENTRANSFORMFEEDBACKSNVPROC GLeeFuncPtr_glGenTransformFeedbacksNV; #define glGenTransformFeedbacksNV GLeeFuncPtr_glGenTransformFeedbacksNV #endif #ifndef GLEE_H_DEFINED_glIsTransformFeedbackNV #define GLEE_H_DEFINED_glIsTransformFeedbackNV typedef GLboolean (APIENTRYP GLEEPFNGLISTRANSFORMFEEDBACKNVPROC) (GLuint id); GLEE_EXTERN GLEEPFNGLISTRANSFORMFEEDBACKNVPROC GLeeFuncPtr_glIsTransformFeedbackNV; #define glIsTransformFeedbackNV GLeeFuncPtr_glIsTransformFeedbackNV #endif #ifndef GLEE_H_DEFINED_glPauseTransformFeedbackNV #define GLEE_H_DEFINED_glPauseTransformFeedbackNV typedef void (APIENTRYP GLEEPFNGLPAUSETRANSFORMFEEDBACKNVPROC) (); GLEE_EXTERN GLEEPFNGLPAUSETRANSFORMFEEDBACKNVPROC GLeeFuncPtr_glPauseTransformFeedbackNV; #define glPauseTransformFeedbackNV GLeeFuncPtr_glPauseTransformFeedbackNV #endif #ifndef GLEE_H_DEFINED_glResumeTransformFeedbackNV #define GLEE_H_DEFINED_glResumeTransformFeedbackNV typedef void (APIENTRYP GLEEPFNGLRESUMETRANSFORMFEEDBACKNVPROC) (); GLEE_EXTERN GLEEPFNGLRESUMETRANSFORMFEEDBACKNVPROC GLeeFuncPtr_glResumeTransformFeedbackNV; #define glResumeTransformFeedbackNV GLeeFuncPtr_glResumeTransformFeedbackNV #endif #ifndef GLEE_H_DEFINED_glDrawTransformFeedbackNV #define GLEE_H_DEFINED_glDrawTransformFeedbackNV typedef void (APIENTRYP GLEEPFNGLDRAWTRANSFORMFEEDBACKNVPROC) (GLenum mode, GLuint id); GLEE_EXTERN GLEEPFNGLDRAWTRANSFORMFEEDBACKNVPROC GLeeFuncPtr_glDrawTransformFeedbackNV; #define glDrawTransformFeedbackNV GLeeFuncPtr_glDrawTransformFeedbackNV #endif #endif /* GL_ATI_meminfo */ #ifndef GL_ATI_meminfo #define GL_ATI_meminfo 1 #define __GLEE_GL_ATI_meminfo 1 /* Constants */ #define GL_VBO_FREE_MEMORY_ATI 0x87FB #define GL_TEXTURE_FREE_MEMORY_ATI 0x87FC #define GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD #endif /* GL_AMD_performance_monitor */ #ifndef GL_AMD_performance_monitor #define GL_AMD_performance_monitor 1 #define __GLEE_GL_AMD_performance_monitor 1 /* Constants */ #define GL_COUNTER_TYPE_AMD 0x8BC0 #define GL_COUNTER_RANGE_AMD 0x8BC1 #define GL_UNSIGNED_INT64_AMD 0x8BC2 #define GL_PERCENTAGE_AMD 0x8BC3 #define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 #define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 #define GL_PERFMON_RESULT_AMD 0x8BC6 #ifndef GLEE_H_DEFINED_glGetPerfMonitorGroupsAMD #define GLEE_H_DEFINED_glGetPerfMonitorGroupsAMD typedef void (APIENTRYP GLEEPFNGLGETPERFMONITORGROUPSAMDPROC) (GLint * numGroups, GLsizei groupsSize, GLuint * groups); GLEE_EXTERN GLEEPFNGLGETPERFMONITORGROUPSAMDPROC GLeeFuncPtr_glGetPerfMonitorGroupsAMD; #define glGetPerfMonitorGroupsAMD GLeeFuncPtr_glGetPerfMonitorGroupsAMD #endif #ifndef GLEE_H_DEFINED_glGetPerfMonitorCountersAMD #define GLEE_H_DEFINED_glGetPerfMonitorCountersAMD typedef void (APIENTRYP GLEEPFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint * numCounters, GLint * maxActiveCounters, GLsizei counterSize, GLuint * counters); GLEE_EXTERN GLEEPFNGLGETPERFMONITORCOUNTERSAMDPROC GLeeFuncPtr_glGetPerfMonitorCountersAMD; #define glGetPerfMonitorCountersAMD GLeeFuncPtr_glGetPerfMonitorCountersAMD #endif #ifndef GLEE_H_DEFINED_glGetPerfMonitorGroupStringAMD #define GLEE_H_DEFINED_glGetPerfMonitorGroupStringAMD typedef void (APIENTRYP GLEEPFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei * length, GLchar * groupString); GLEE_EXTERN GLEEPFNGLGETPERFMONITORGROUPSTRINGAMDPROC GLeeFuncPtr_glGetPerfMonitorGroupStringAMD; #define glGetPerfMonitorGroupStringAMD GLeeFuncPtr_glGetPerfMonitorGroupStringAMD #endif #ifndef GLEE_H_DEFINED_glGetPerfMonitorCounterStringAMD #define GLEE_H_DEFINED_glGetPerfMonitorCounterStringAMD typedef void (APIENTRYP GLEEPFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei * length, GLchar * counterString); GLEE_EXTERN GLEEPFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC GLeeFuncPtr_glGetPerfMonitorCounterStringAMD; #define glGetPerfMonitorCounterStringAMD GLeeFuncPtr_glGetPerfMonitorCounterStringAMD #endif #ifndef GLEE_H_DEFINED_glGetPerfMonitorCounterInfoAMD #define GLEE_H_DEFINED_glGetPerfMonitorCounterInfoAMD typedef void (APIENTRYP GLEEPFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, GLvoid * data); GLEE_EXTERN GLEEPFNGLGETPERFMONITORCOUNTERINFOAMDPROC GLeeFuncPtr_glGetPerfMonitorCounterInfoAMD; #define glGetPerfMonitorCounterInfoAMD GLeeFuncPtr_glGetPerfMonitorCounterInfoAMD #endif #ifndef GLEE_H_DEFINED_glGenPerfMonitorsAMD #define GLEE_H_DEFINED_glGenPerfMonitorsAMD typedef void (APIENTRYP GLEEPFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint * monitors); GLEE_EXTERN GLEEPFNGLGENPERFMONITORSAMDPROC GLeeFuncPtr_glGenPerfMonitorsAMD; #define glGenPerfMonitorsAMD GLeeFuncPtr_glGenPerfMonitorsAMD #endif #ifndef GLEE_H_DEFINED_glDeletePerfMonitorsAMD #define GLEE_H_DEFINED_glDeletePerfMonitorsAMD typedef void (APIENTRYP GLEEPFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint * monitors); GLEE_EXTERN GLEEPFNGLDELETEPERFMONITORSAMDPROC GLeeFuncPtr_glDeletePerfMonitorsAMD; #define glDeletePerfMonitorsAMD GLeeFuncPtr_glDeletePerfMonitorsAMD #endif #ifndef GLEE_H_DEFINED_glSelectPerfMonitorCountersAMD #define GLEE_H_DEFINED_glSelectPerfMonitorCountersAMD typedef void (APIENTRYP GLEEPFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint * counterList); GLEE_EXTERN GLEEPFNGLSELECTPERFMONITORCOUNTERSAMDPROC GLeeFuncPtr_glSelectPerfMonitorCountersAMD; #define glSelectPerfMonitorCountersAMD GLeeFuncPtr_glSelectPerfMonitorCountersAMD #endif #ifndef GLEE_H_DEFINED_glBeginPerfMonitorAMD #define GLEE_H_DEFINED_glBeginPerfMonitorAMD typedef void (APIENTRYP GLEEPFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor); GLEE_EXTERN GLEEPFNGLBEGINPERFMONITORAMDPROC GLeeFuncPtr_glBeginPerfMonitorAMD; #define glBeginPerfMonitorAMD GLeeFuncPtr_glBeginPerfMonitorAMD #endif #ifndef GLEE_H_DEFINED_glEndPerfMonitorAMD #define GLEE_H_DEFINED_glEndPerfMonitorAMD typedef void (APIENTRYP GLEEPFNGLENDPERFMONITORAMDPROC) (GLuint monitor); GLEE_EXTERN GLEEPFNGLENDPERFMONITORAMDPROC GLeeFuncPtr_glEndPerfMonitorAMD; #define glEndPerfMonitorAMD GLeeFuncPtr_glEndPerfMonitorAMD #endif #ifndef GLEE_H_DEFINED_glGetPerfMonitorCounterDataAMD #define GLEE_H_DEFINED_glGetPerfMonitorCounterDataAMD typedef void (APIENTRYP GLEEPFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint * data, GLint * bytesWritten); GLEE_EXTERN GLEEPFNGLGETPERFMONITORCOUNTERDATAAMDPROC GLeeFuncPtr_glGetPerfMonitorCounterDataAMD; #define glGetPerfMonitorCounterDataAMD GLeeFuncPtr_glGetPerfMonitorCounterDataAMD #endif #endif /* GL_AMD_texture_texture4 */ #ifndef GL_AMD_texture_texture4 #define GL_AMD_texture_texture4 1 #define __GLEE_GL_AMD_texture_texture4 1 /* Constants */ #endif /* GL_AMD_vertex_shader_tesselator */ #ifndef GL_AMD_vertex_shader_tesselator #define GL_AMD_vertex_shader_tesselator 1 #define __GLEE_GL_AMD_vertex_shader_tesselator 1 /* Constants */ #define GL_SAMPLER_BUFFER_AMD 0x9001 #define GL_INT_SAMPLER_BUFFER_AMD 0x9002 #define GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD 0x9003 #define GL_TESSELLATION_MODE_AMD 0x9004 #define GL_TESSELLATION_FACTOR_AMD 0x9005 #define GL_DISCRETE_AMD 0x9006 #define GL_CONTINUOUS_AMD 0x9007 #ifndef GLEE_H_DEFINED_glTessellationFactorAMD #define GLEE_H_DEFINED_glTessellationFactorAMD typedef void (APIENTRYP GLEEPFNGLTESSELLATIONFACTORAMDPROC) (GLfloat factor); GLEE_EXTERN GLEEPFNGLTESSELLATIONFACTORAMDPROC GLeeFuncPtr_glTessellationFactorAMD; #define glTessellationFactorAMD GLeeFuncPtr_glTessellationFactorAMD #endif #ifndef GLEE_H_DEFINED_glTessellationModeAMD #define GLEE_H_DEFINED_glTessellationModeAMD typedef void (APIENTRYP GLEEPFNGLTESSELLATIONMODEAMDPROC) (GLenum mode); GLEE_EXTERN GLEEPFNGLTESSELLATIONMODEAMDPROC GLeeFuncPtr_glTessellationModeAMD; #define glTessellationModeAMD GLeeFuncPtr_glTessellationModeAMD #endif #endif /* GL_EXT_provoking_vertex */ #ifndef GL_EXT_provoking_vertex #define GL_EXT_provoking_vertex 1 #define __GLEE_GL_EXT_provoking_vertex 1 /* Constants */ #define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT 0x8E4C #define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D #define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E #define GL_PROVOKING_VERTEX_EXT 0x8E4F #ifndef GLEE_H_DEFINED_glProvokingVertexEXT #define GLEE_H_DEFINED_glProvokingVertexEXT typedef void (APIENTRYP GLEEPFNGLPROVOKINGVERTEXEXTPROC) (GLenum mode); GLEE_EXTERN GLEEPFNGLPROVOKINGVERTEXEXTPROC GLeeFuncPtr_glProvokingVertexEXT; #define glProvokingVertexEXT GLeeFuncPtr_glProvokingVertexEXT #endif #endif /* GL_EXT_texture_snorm */ #ifndef GL_EXT_texture_snorm #define GL_EXT_texture_snorm 1 #define __GLEE_GL_EXT_texture_snorm 1 /* Constants */ #define GL_ALPHA_SNORM 0x9010 #define GL_LUMINANCE_SNORM 0x9011 #define GL_LUMINANCE_ALPHA_SNORM 0x9012 #define GL_INTENSITY_SNORM 0x9013 #define GL_ALPHA8_SNORM 0x9014 #define GL_LUMINANCE8_SNORM 0x9015 #define GL_LUMINANCE8_ALPHA8_SNORM 0x9016 #define GL_INTENSITY8_SNORM 0x9017 #define GL_ALPHA16_SNORM 0x9018 #define GL_LUMINANCE16_SNORM 0x9019 #define GL_LUMINANCE16_ALPHA16_SNORM 0x901A #define GL_INTENSITY16_SNORM 0x901B #endif /* GL_AMD_draw_buffers_blend */ #ifndef GL_AMD_draw_buffers_blend #define GL_AMD_draw_buffers_blend 1 #define __GLEE_GL_AMD_draw_buffers_blend 1 /* Constants */ #ifndef GLEE_H_DEFINED_glBlendFuncIndexedAMD #define GLEE_H_DEFINED_glBlendFuncIndexedAMD typedef void (APIENTRYP GLEEPFNGLBLENDFUNCINDEXEDAMDPROC) (GLuint buf, GLenum src, GLenum dst); GLEE_EXTERN GLEEPFNGLBLENDFUNCINDEXEDAMDPROC GLeeFuncPtr_glBlendFuncIndexedAMD; #define glBlendFuncIndexedAMD GLeeFuncPtr_glBlendFuncIndexedAMD #endif #ifndef GLEE_H_DEFINED_glBlendFuncSeparateIndexedAMD #define GLEE_H_DEFINED_glBlendFuncSeparateIndexedAMD typedef void (APIENTRYP GLEEPFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); GLEE_EXTERN GLEEPFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC GLeeFuncPtr_glBlendFuncSeparateIndexedAMD; #define glBlendFuncSeparateIndexedAMD GLeeFuncPtr_glBlendFuncSeparateIndexedAMD #endif #ifndef GLEE_H_DEFINED_glBlendEquationIndexedAMD #define GLEE_H_DEFINED_glBlendEquationIndexedAMD typedef void (APIENTRYP GLEEPFNGLBLENDEQUATIONINDEXEDAMDPROC) (GLuint buf, GLenum mode); GLEE_EXTERN GLEEPFNGLBLENDEQUATIONINDEXEDAMDPROC GLeeFuncPtr_glBlendEquationIndexedAMD; #define glBlendEquationIndexedAMD GLeeFuncPtr_glBlendEquationIndexedAMD #endif #ifndef GLEE_H_DEFINED_glBlendEquationSeparateIndexedAMD #define GLEE_H_DEFINED_glBlendEquationSeparateIndexedAMD typedef void (APIENTRYP GLEEPFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); GLEE_EXTERN GLEEPFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC GLeeFuncPtr_glBlendEquationSeparateIndexedAMD; #define glBlendEquationSeparateIndexedAMD GLeeFuncPtr_glBlendEquationSeparateIndexedAMD #endif #endif /* GL_APPLE_texture_range */ #ifndef GL_APPLE_texture_range #define GL_APPLE_texture_range 1 #define __GLEE_GL_APPLE_texture_range 1 /* Constants */ #define GL_TEXTURE_RANGE_LENGTH_APPLE 0x85B7 #define GL_TEXTURE_RANGE_POINTER_APPLE 0x85B8 #define GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC #define GL_STORAGE_PRIVATE_APPLE 0x85BD #ifndef GLEE_H_DEFINED_glTextureRangeAPPLE #define GLEE_H_DEFINED_glTextureRangeAPPLE typedef void (APIENTRYP GLEEPFNGLTEXTURERANGEAPPLEPROC) (GLenum target, GLsizei length, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLTEXTURERANGEAPPLEPROC GLeeFuncPtr_glTextureRangeAPPLE; #define glTextureRangeAPPLE GLeeFuncPtr_glTextureRangeAPPLE #endif #ifndef GLEE_H_DEFINED_glGetTexParameterPointervAPPLE #define GLEE_H_DEFINED_glGetTexParameterPointervAPPLE typedef void (APIENTRYP GLEEPFNGLGETTEXPARAMETERPOINTERVAPPLEPROC) (GLenum target, GLenum pname, GLvoid* * params); GLEE_EXTERN GLEEPFNGLGETTEXPARAMETERPOINTERVAPPLEPROC GLeeFuncPtr_glGetTexParameterPointervAPPLE; #define glGetTexParameterPointervAPPLE GLeeFuncPtr_glGetTexParameterPointervAPPLE #endif #endif /* GL_APPLE_float_pixels */ #ifndef GL_APPLE_float_pixels #define GL_APPLE_float_pixels 1 #define __GLEE_GL_APPLE_float_pixels 1 /* Constants */ #define GL_HALF_APPLE 0x140B #define GL_RGBA_FLOAT32_APPLE 0x8814 #define GL_RGB_FLOAT32_APPLE 0x8815 #define GL_ALPHA_FLOAT32_APPLE 0x8816 #define GL_INTENSITY_FLOAT32_APPLE 0x8817 #define GL_LUMINANCE_FLOAT32_APPLE 0x8818 #define GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819 #define GL_RGBA_FLOAT16_APPLE 0x881A #define GL_RGB_FLOAT16_APPLE 0x881B #define GL_ALPHA_FLOAT16_APPLE 0x881C #define GL_INTENSITY_FLOAT16_APPLE 0x881D #define GL_LUMINANCE_FLOAT16_APPLE 0x881E #define GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881F #define GL_COLOR_FLOAT_APPLE 0x8A0F #endif /* GL_APPLE_vertex_program_evaluators */ #ifndef GL_APPLE_vertex_program_evaluators #define GL_APPLE_vertex_program_evaluators 1 #define __GLEE_GL_APPLE_vertex_program_evaluators 1 /* Constants */ #define GL_VERTEX_ATTRIB_MAP1_APPLE 0x8A00 #define GL_VERTEX_ATTRIB_MAP2_APPLE 0x8A01 #define GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE 0x8A02 #define GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE 0x8A03 #define GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE 0x8A04 #define GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE 0x8A05 #define GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE 0x8A06 #define GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE 0x8A07 #define GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE 0x8A08 #define GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE 0x8A09 #ifndef GLEE_H_DEFINED_glEnableVertexAttribAPPLE #define GLEE_H_DEFINED_glEnableVertexAttribAPPLE typedef void (APIENTRYP GLEEPFNGLENABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); GLEE_EXTERN GLEEPFNGLENABLEVERTEXATTRIBAPPLEPROC GLeeFuncPtr_glEnableVertexAttribAPPLE; #define glEnableVertexAttribAPPLE GLeeFuncPtr_glEnableVertexAttribAPPLE #endif #ifndef GLEE_H_DEFINED_glDisableVertexAttribAPPLE #define GLEE_H_DEFINED_glDisableVertexAttribAPPLE typedef void (APIENTRYP GLEEPFNGLDISABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); GLEE_EXTERN GLEEPFNGLDISABLEVERTEXATTRIBAPPLEPROC GLeeFuncPtr_glDisableVertexAttribAPPLE; #define glDisableVertexAttribAPPLE GLeeFuncPtr_glDisableVertexAttribAPPLE #endif #ifndef GLEE_H_DEFINED_glIsVertexAttribEnabledAPPLE #define GLEE_H_DEFINED_glIsVertexAttribEnabledAPPLE typedef GLboolean (APIENTRYP GLEEPFNGLISVERTEXATTRIBENABLEDAPPLEPROC) (GLuint index, GLenum pname); GLEE_EXTERN GLEEPFNGLISVERTEXATTRIBENABLEDAPPLEPROC GLeeFuncPtr_glIsVertexAttribEnabledAPPLE; #define glIsVertexAttribEnabledAPPLE GLeeFuncPtr_glIsVertexAttribEnabledAPPLE #endif #ifndef GLEE_H_DEFINED_glMapVertexAttrib1dAPPLE #define GLEE_H_DEFINED_glMapVertexAttrib1dAPPLE typedef void (APIENTRYP GLEEPFNGLMAPVERTEXATTRIB1DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble * points); GLEE_EXTERN GLEEPFNGLMAPVERTEXATTRIB1DAPPLEPROC GLeeFuncPtr_glMapVertexAttrib1dAPPLE; #define glMapVertexAttrib1dAPPLE GLeeFuncPtr_glMapVertexAttrib1dAPPLE #endif #ifndef GLEE_H_DEFINED_glMapVertexAttrib1fAPPLE #define GLEE_H_DEFINED_glMapVertexAttrib1fAPPLE typedef void (APIENTRYP GLEEPFNGLMAPVERTEXATTRIB1FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat * points); GLEE_EXTERN GLEEPFNGLMAPVERTEXATTRIB1FAPPLEPROC GLeeFuncPtr_glMapVertexAttrib1fAPPLE; #define glMapVertexAttrib1fAPPLE GLeeFuncPtr_glMapVertexAttrib1fAPPLE #endif #ifndef GLEE_H_DEFINED_glMapVertexAttrib2dAPPLE #define GLEE_H_DEFINED_glMapVertexAttrib2dAPPLE typedef void (APIENTRYP GLEEPFNGLMAPVERTEXATTRIB2DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble * points); GLEE_EXTERN GLEEPFNGLMAPVERTEXATTRIB2DAPPLEPROC GLeeFuncPtr_glMapVertexAttrib2dAPPLE; #define glMapVertexAttrib2dAPPLE GLeeFuncPtr_glMapVertexAttrib2dAPPLE #endif #ifndef GLEE_H_DEFINED_glMapVertexAttrib2fAPPLE #define GLEE_H_DEFINED_glMapVertexAttrib2fAPPLE typedef void (APIENTRYP GLEEPFNGLMAPVERTEXATTRIB2FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat * points); GLEE_EXTERN GLEEPFNGLMAPVERTEXATTRIB2FAPPLEPROC GLeeFuncPtr_glMapVertexAttrib2fAPPLE; #define glMapVertexAttrib2fAPPLE GLeeFuncPtr_glMapVertexAttrib2fAPPLE #endif #endif /* GL_APPLE_aux_depth_stencil */ #ifndef GL_APPLE_aux_depth_stencil #define GL_APPLE_aux_depth_stencil 1 #define __GLEE_GL_APPLE_aux_depth_stencil 1 /* Constants */ #define GL_AUX_DEPTH_STENCIL_APPLE 0x8A14 #endif /* GL_APPLE_object_purgeable */ #ifndef GL_APPLE_object_purgeable #define GL_APPLE_object_purgeable 1 #define __GLEE_GL_APPLE_object_purgeable 1 /* Constants */ #define GL_BUFFER_OBJECT_APPLE 0x85B3 #define GL_RELEASED_APPLE 0x8A19 #define GL_VOLATILE_APPLE 0x8A1A #define GL_RETAINED_APPLE 0x8A1B #define GL_UNDEFINED_APPLE 0x8A1C #define GL_PURGEABLE_APPLE 0x8A1D #ifndef GLEE_H_DEFINED_glObjectPurgeableAPPLE #define GLEE_H_DEFINED_glObjectPurgeableAPPLE typedef GLenum (APIENTRYP GLEEPFNGLOBJECTPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); GLEE_EXTERN GLEEPFNGLOBJECTPURGEABLEAPPLEPROC GLeeFuncPtr_glObjectPurgeableAPPLE; #define glObjectPurgeableAPPLE GLeeFuncPtr_glObjectPurgeableAPPLE #endif #ifndef GLEE_H_DEFINED_glObjectUnpurgeableAPPLE #define GLEE_H_DEFINED_glObjectUnpurgeableAPPLE typedef GLenum (APIENTRYP GLEEPFNGLOBJECTUNPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); GLEE_EXTERN GLEEPFNGLOBJECTUNPURGEABLEAPPLEPROC GLeeFuncPtr_glObjectUnpurgeableAPPLE; #define glObjectUnpurgeableAPPLE GLeeFuncPtr_glObjectUnpurgeableAPPLE #endif #ifndef GLEE_H_DEFINED_glGetObjectParameterivAPPLE #define GLEE_H_DEFINED_glGetObjectParameterivAPPLE typedef void (APIENTRYP GLEEPFNGLGETOBJECTPARAMETERIVAPPLEPROC) (GLenum objectType, GLuint name, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETOBJECTPARAMETERIVAPPLEPROC GLeeFuncPtr_glGetObjectParameterivAPPLE; #define glGetObjectParameterivAPPLE GLeeFuncPtr_glGetObjectParameterivAPPLE #endif #endif /* GL_APPLE_row_bytes */ #ifndef GL_APPLE_row_bytes #define GL_APPLE_row_bytes 1 #define __GLEE_GL_APPLE_row_bytes 1 /* Constants */ #define GL_PACK_ROW_BYTES_APPLE 0x8A15 #define GL_UNPACK_ROW_BYTES_APPLE 0x8A16 #endif /* GL_APPLE_rgb_422 */ #ifndef GL_APPLE_rgb_422 #define GL_APPLE_rgb_422 1 #define __GLEE_GL_APPLE_rgb_422 1 /* Constants */ #define GL_RGB_422_APPLE 0x8A1F #endif /* GL_NV_video_capture */ #ifndef GL_NV_video_capture #define GL_NV_video_capture 1 #define __GLEE_GL_NV_video_capture 1 /* Constants */ #define GL_VIDEO_BUFFER_NV 0x9020 #define GL_VIDEO_BUFFER_BINDING_NV 0x9021 #define GL_FIELD_UPPER_NV 0x9022 #define GL_FIELD_LOWER_NV 0x9023 #define GL_NUM_VIDEO_CAPTURE_STREAMS_NV 0x9024 #define GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV 0x9025 #define GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV 0x9026 #define GL_LAST_VIDEO_CAPTURE_STATUS_NV 0x9027 #define GL_VIDEO_BUFFER_PITCH_NV 0x9028 #define GL_VIDEO_COLOR_CONVERSION_MATRIX_NV 0x9029 #define GL_VIDEO_COLOR_CONVERSION_MAX_NV 0x902A #define GL_VIDEO_COLOR_CONVERSION_MIN_NV 0x902B #define GL_VIDEO_COLOR_CONVERSION_OFFSET_NV 0x902C #define GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV 0x902D #define GL_PARTIAL_SUCCESS_NV 0x902E #define GL_SUCCESS_NV 0x902F #define GL_FAILURE_NV 0x9030 #define GL_YCBYCR8_422_NV 0x9031 #define GL_YCBAYCR8A_4224_NV 0x9032 #define GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV 0x9033 #define GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV 0x9034 #define GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV 0x9035 #define GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV 0x9036 #define GL_Z4Y12Z4CB12Z4CR12_444_NV 0x9037 #define GL_VIDEO_CAPTURE_FRAME_WIDTH_NV 0x9038 #define GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV 0x9039 #define GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV 0x903A #define GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV 0x903B #define GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV 0x903C #ifndef GLEE_H_DEFINED_glBeginVideoCaptureNV #define GLEE_H_DEFINED_glBeginVideoCaptureNV typedef void (APIENTRYP GLEEPFNGLBEGINVIDEOCAPTURENVPROC) (GLuint video_capture_slot); GLEE_EXTERN GLEEPFNGLBEGINVIDEOCAPTURENVPROC GLeeFuncPtr_glBeginVideoCaptureNV; #define glBeginVideoCaptureNV GLeeFuncPtr_glBeginVideoCaptureNV #endif #ifndef GLEE_H_DEFINED_glBindVideoCaptureStreamBufferNV #define GLEE_H_DEFINED_glBindVideoCaptureStreamBufferNV typedef void (APIENTRYP GLEEPFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); GLEE_EXTERN GLEEPFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC GLeeFuncPtr_glBindVideoCaptureStreamBufferNV; #define glBindVideoCaptureStreamBufferNV GLeeFuncPtr_glBindVideoCaptureStreamBufferNV #endif #ifndef GLEE_H_DEFINED_glBindVideoCaptureStreamTextureNV #define GLEE_H_DEFINED_glBindVideoCaptureStreamTextureNV typedef void (APIENTRYP GLEEPFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); GLEE_EXTERN GLEEPFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC GLeeFuncPtr_glBindVideoCaptureStreamTextureNV; #define glBindVideoCaptureStreamTextureNV GLeeFuncPtr_glBindVideoCaptureStreamTextureNV #endif #ifndef GLEE_H_DEFINED_glEndVideoCaptureNV #define GLEE_H_DEFINED_glEndVideoCaptureNV typedef void (APIENTRYP GLEEPFNGLENDVIDEOCAPTURENVPROC) (GLuint video_capture_slot); GLEE_EXTERN GLEEPFNGLENDVIDEOCAPTURENVPROC GLeeFuncPtr_glEndVideoCaptureNV; #define glEndVideoCaptureNV GLeeFuncPtr_glEndVideoCaptureNV #endif #ifndef GLEE_H_DEFINED_glGetVideoCaptureivNV #define GLEE_H_DEFINED_glGetVideoCaptureivNV typedef void (APIENTRYP GLEEPFNGLGETVIDEOCAPTUREIVNVPROC) (GLuint video_capture_slot, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETVIDEOCAPTUREIVNVPROC GLeeFuncPtr_glGetVideoCaptureivNV; #define glGetVideoCaptureivNV GLeeFuncPtr_glGetVideoCaptureivNV #endif #ifndef GLEE_H_DEFINED_glGetVideoCaptureStreamivNV #define GLEE_H_DEFINED_glGetVideoCaptureStreamivNV typedef void (APIENTRYP GLEEPFNGLGETVIDEOCAPTURESTREAMIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETVIDEOCAPTURESTREAMIVNVPROC GLeeFuncPtr_glGetVideoCaptureStreamivNV; #define glGetVideoCaptureStreamivNV GLeeFuncPtr_glGetVideoCaptureStreamivNV #endif #ifndef GLEE_H_DEFINED_glGetVideoCaptureStreamfvNV #define GLEE_H_DEFINED_glGetVideoCaptureStreamfvNV typedef void (APIENTRYP GLEEPFNGLGETVIDEOCAPTURESTREAMFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETVIDEOCAPTURESTREAMFVNVPROC GLeeFuncPtr_glGetVideoCaptureStreamfvNV; #define glGetVideoCaptureStreamfvNV GLeeFuncPtr_glGetVideoCaptureStreamfvNV #endif #ifndef GLEE_H_DEFINED_glGetVideoCaptureStreamdvNV #define GLEE_H_DEFINED_glGetVideoCaptureStreamdvNV typedef void (APIENTRYP GLEEPFNGLGETVIDEOCAPTURESTREAMDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble * params); GLEE_EXTERN GLEEPFNGLGETVIDEOCAPTURESTREAMDVNVPROC GLeeFuncPtr_glGetVideoCaptureStreamdvNV; #define glGetVideoCaptureStreamdvNV GLeeFuncPtr_glGetVideoCaptureStreamdvNV #endif #ifndef GLEE_H_DEFINED_glVideoCaptureNV #define GLEE_H_DEFINED_glVideoCaptureNV typedef GLenum (APIENTRYP GLEEPFNGLVIDEOCAPTURENVPROC) (GLuint video_capture_slot, GLuint * sequence_num, GLuint64EXT * capture_time); GLEE_EXTERN GLEEPFNGLVIDEOCAPTURENVPROC GLeeFuncPtr_glVideoCaptureNV; #define glVideoCaptureNV GLeeFuncPtr_glVideoCaptureNV #endif #ifndef GLEE_H_DEFINED_glVideoCaptureStreamParameterivNV #define GLEE_H_DEFINED_glVideoCaptureStreamParameterivNV typedef void (APIENTRYP GLEEPFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC GLeeFuncPtr_glVideoCaptureStreamParameterivNV; #define glVideoCaptureStreamParameterivNV GLeeFuncPtr_glVideoCaptureStreamParameterivNV #endif #ifndef GLEE_H_DEFINED_glVideoCaptureStreamParameterfvNV #define GLEE_H_DEFINED_glVideoCaptureStreamParameterfvNV typedef void (APIENTRYP GLEEPFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC GLeeFuncPtr_glVideoCaptureStreamParameterfvNV; #define glVideoCaptureStreamParameterfvNV GLeeFuncPtr_glVideoCaptureStreamParameterfvNV #endif #ifndef GLEE_H_DEFINED_glVideoCaptureStreamParameterdvNV #define GLEE_H_DEFINED_glVideoCaptureStreamParameterdvNV typedef void (APIENTRYP GLEEPFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble * params); GLEE_EXTERN GLEEPFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC GLeeFuncPtr_glVideoCaptureStreamParameterdvNV; #define glVideoCaptureStreamParameterdvNV GLeeFuncPtr_glVideoCaptureStreamParameterdvNV #endif #endif /* GL_NV_copy_image */ #ifndef GL_NV_copy_image #define GL_NV_copy_image 1 #define __GLEE_GL_NV_copy_image 1 /* Constants */ #ifndef GLEE_H_DEFINED_glCopyImageSubDataNV #define GLEE_H_DEFINED_glCopyImageSubDataNV typedef void (APIENTRYP GLEEPFNGLCOPYIMAGESUBDATANVPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); GLEE_EXTERN GLEEPFNGLCOPYIMAGESUBDATANVPROC GLeeFuncPtr_glCopyImageSubDataNV; #define glCopyImageSubDataNV GLeeFuncPtr_glCopyImageSubDataNV #endif #endif /* GL_EXT_separate_shader_objects */ #ifndef GL_EXT_separate_shader_objects #define GL_EXT_separate_shader_objects 1 #define __GLEE_GL_EXT_separate_shader_objects 1 /* Constants */ #define GL_ACTIVE_PROGRAM_EXT 0x8B8D #ifndef GLEE_H_DEFINED_glUseShaderProgramEXT #define GLEE_H_DEFINED_glUseShaderProgramEXT typedef void (APIENTRYP GLEEPFNGLUSESHADERPROGRAMEXTPROC) (GLenum type, GLuint program); GLEE_EXTERN GLEEPFNGLUSESHADERPROGRAMEXTPROC GLeeFuncPtr_glUseShaderProgramEXT; #define glUseShaderProgramEXT GLeeFuncPtr_glUseShaderProgramEXT #endif #ifndef GLEE_H_DEFINED_glActiveProgramEXT #define GLEE_H_DEFINED_glActiveProgramEXT typedef void (APIENTRYP GLEEPFNGLACTIVEPROGRAMEXTPROC) (GLuint program); GLEE_EXTERN GLEEPFNGLACTIVEPROGRAMEXTPROC GLeeFuncPtr_glActiveProgramEXT; #define glActiveProgramEXT GLeeFuncPtr_glActiveProgramEXT #endif #ifndef GLEE_H_DEFINED_glCreateShaderProgramEXT #define GLEE_H_DEFINED_glCreateShaderProgramEXT typedef GLuint (APIENTRYP GLEEPFNGLCREATESHADERPROGRAMEXTPROC) (GLenum type, const GLchar * string); GLEE_EXTERN GLEEPFNGLCREATESHADERPROGRAMEXTPROC GLeeFuncPtr_glCreateShaderProgramEXT; #define glCreateShaderProgramEXT GLeeFuncPtr_glCreateShaderProgramEXT #endif #endif /* GL_NV_parameter_buffer_object2 */ #ifndef GL_NV_parameter_buffer_object2 #define GL_NV_parameter_buffer_object2 1 #define __GLEE_GL_NV_parameter_buffer_object2 1 /* Constants */ #endif /* GL_NV_shader_buffer_load */ #ifndef GL_NV_shader_buffer_load #define GL_NV_shader_buffer_load 1 #define __GLEE_GL_NV_shader_buffer_load 1 /* Constants */ #define GL_BUFFER_GPU_ADDRESS_NV 0x8F1D #define GL_GPU_ADDRESS_NV 0x8F34 #define GL_MAX_SHADER_BUFFER_ADDRESS_NV 0x8F35 #ifndef GLEE_H_DEFINED_glMakeBufferResidentNV #define GLEE_H_DEFINED_glMakeBufferResidentNV typedef void (APIENTRYP GLEEPFNGLMAKEBUFFERRESIDENTNVPROC) (GLenum target, GLenum access); GLEE_EXTERN GLEEPFNGLMAKEBUFFERRESIDENTNVPROC GLeeFuncPtr_glMakeBufferResidentNV; #define glMakeBufferResidentNV GLeeFuncPtr_glMakeBufferResidentNV #endif #ifndef GLEE_H_DEFINED_glMakeBufferNonResidentNV #define GLEE_H_DEFINED_glMakeBufferNonResidentNV typedef void (APIENTRYP GLEEPFNGLMAKEBUFFERNONRESIDENTNVPROC) (GLenum target); GLEE_EXTERN GLEEPFNGLMAKEBUFFERNONRESIDENTNVPROC GLeeFuncPtr_glMakeBufferNonResidentNV; #define glMakeBufferNonResidentNV GLeeFuncPtr_glMakeBufferNonResidentNV #endif #ifndef GLEE_H_DEFINED_glIsBufferResidentNV #define GLEE_H_DEFINED_glIsBufferResidentNV typedef GLboolean (APIENTRYP GLEEPFNGLISBUFFERRESIDENTNVPROC) (GLenum target); GLEE_EXTERN GLEEPFNGLISBUFFERRESIDENTNVPROC GLeeFuncPtr_glIsBufferResidentNV; #define glIsBufferResidentNV GLeeFuncPtr_glIsBufferResidentNV #endif #ifndef GLEE_H_DEFINED_glMakeNamedBufferResidentNV #define GLEE_H_DEFINED_glMakeNamedBufferResidentNV typedef void (APIENTRYP GLEEPFNGLMAKENAMEDBUFFERRESIDENTNVPROC) (GLuint buffer, GLenum access); GLEE_EXTERN GLEEPFNGLMAKENAMEDBUFFERRESIDENTNVPROC GLeeFuncPtr_glMakeNamedBufferResidentNV; #define glMakeNamedBufferResidentNV GLeeFuncPtr_glMakeNamedBufferResidentNV #endif #ifndef GLEE_H_DEFINED_glMakeNamedBufferNonResidentNV #define GLEE_H_DEFINED_glMakeNamedBufferNonResidentNV typedef void (APIENTRYP GLEEPFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC) (GLuint buffer); GLEE_EXTERN GLEEPFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC GLeeFuncPtr_glMakeNamedBufferNonResidentNV; #define glMakeNamedBufferNonResidentNV GLeeFuncPtr_glMakeNamedBufferNonResidentNV #endif #ifndef GLEE_H_DEFINED_glIsNamedBufferResidentNV #define GLEE_H_DEFINED_glIsNamedBufferResidentNV typedef GLboolean (APIENTRYP GLEEPFNGLISNAMEDBUFFERRESIDENTNVPROC) (GLuint buffer); GLEE_EXTERN GLEEPFNGLISNAMEDBUFFERRESIDENTNVPROC GLeeFuncPtr_glIsNamedBufferResidentNV; #define glIsNamedBufferResidentNV GLeeFuncPtr_glIsNamedBufferResidentNV #endif #ifndef GLEE_H_DEFINED_glGetBufferParameterui64vNV #define GLEE_H_DEFINED_glGetBufferParameterui64vNV typedef void (APIENTRYP GLEEPFNGLGETBUFFERPARAMETERUI64VNVPROC) (GLenum target, GLenum pname, GLuint64EXT * params); GLEE_EXTERN GLEEPFNGLGETBUFFERPARAMETERUI64VNVPROC GLeeFuncPtr_glGetBufferParameterui64vNV; #define glGetBufferParameterui64vNV GLeeFuncPtr_glGetBufferParameterui64vNV #endif #ifndef GLEE_H_DEFINED_glGetNamedBufferParameterui64vNV #define GLEE_H_DEFINED_glGetNamedBufferParameterui64vNV typedef void (APIENTRYP GLEEPFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC) (GLuint buffer, GLenum pname, GLuint64EXT * params); GLEE_EXTERN GLEEPFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC GLeeFuncPtr_glGetNamedBufferParameterui64vNV; #define glGetNamedBufferParameterui64vNV GLeeFuncPtr_glGetNamedBufferParameterui64vNV #endif #ifndef GLEE_H_DEFINED_glGetIntegerui64vNV #define GLEE_H_DEFINED_glGetIntegerui64vNV typedef void (APIENTRYP GLEEPFNGLGETINTEGERUI64VNVPROC) (GLenum value, GLuint64EXT * result); GLEE_EXTERN GLEEPFNGLGETINTEGERUI64VNVPROC GLeeFuncPtr_glGetIntegerui64vNV; #define glGetIntegerui64vNV GLeeFuncPtr_glGetIntegerui64vNV #endif #ifndef GLEE_H_DEFINED_glUniformui64NV #define GLEE_H_DEFINED_glUniformui64NV typedef void (APIENTRYP GLEEPFNGLUNIFORMUI64NVPROC) (GLint location, GLuint64EXT value); GLEE_EXTERN GLEEPFNGLUNIFORMUI64NVPROC GLeeFuncPtr_glUniformui64NV; #define glUniformui64NV GLeeFuncPtr_glUniformui64NV #endif #ifndef GLEE_H_DEFINED_glUniformui64vNV #define GLEE_H_DEFINED_glUniformui64vNV typedef void (APIENTRYP GLEEPFNGLUNIFORMUI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT * value); GLEE_EXTERN GLEEPFNGLUNIFORMUI64VNVPROC GLeeFuncPtr_glUniformui64vNV; #define glUniformui64vNV GLeeFuncPtr_glUniformui64vNV #endif #ifndef GLEE_H_DEFINED_glGetUniformui64vNV #define GLEE_H_DEFINED_glGetUniformui64vNV typedef void (APIENTRYP GLEEPFNGLGETUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLuint64EXT * params); GLEE_EXTERN GLEEPFNGLGETUNIFORMUI64VNVPROC GLeeFuncPtr_glGetUniformui64vNV; #define glGetUniformui64vNV GLeeFuncPtr_glGetUniformui64vNV #endif #ifndef GLEE_H_DEFINED_glProgramUniformui64NV #define GLEE_H_DEFINED_glProgramUniformui64NV typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMUI64NVPROC) (GLuint program, GLint location, GLuint64EXT value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMUI64NVPROC GLeeFuncPtr_glProgramUniformui64NV; #define glProgramUniformui64NV GLeeFuncPtr_glProgramUniformui64NV #endif #ifndef GLEE_H_DEFINED_glProgramUniformui64vNV #define GLEE_H_DEFINED_glProgramUniformui64vNV typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMUI64VNVPROC GLeeFuncPtr_glProgramUniformui64vNV; #define glProgramUniformui64vNV GLeeFuncPtr_glProgramUniformui64vNV #endif #endif /* GL_NV_vertex_buffer_unified_memory */ #ifndef GL_NV_vertex_buffer_unified_memory #define GL_NV_vertex_buffer_unified_memory 1 #define __GLEE_GL_NV_vertex_buffer_unified_memory 1 /* Constants */ #define GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV 0x8F1E #define GL_ELEMENT_ARRAY_UNIFIED_NV 0x8F1F #define GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV 0x8F20 #define GL_VERTEX_ARRAY_ADDRESS_NV 0x8F21 #define GL_NORMAL_ARRAY_ADDRESS_NV 0x8F22 #define GL_COLOR_ARRAY_ADDRESS_NV 0x8F23 #define GL_INDEX_ARRAY_ADDRESS_NV 0x8F24 #define GL_TEXTURE_COORD_ARRAY_ADDRESS_NV 0x8F25 #define GL_EDGE_FLAG_ARRAY_ADDRESS_NV 0x8F26 #define GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV 0x8F27 #define GL_FOG_COORD_ARRAY_ADDRESS_NV 0x8F28 #define GL_ELEMENT_ARRAY_ADDRESS_NV 0x8F29 #define GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV 0x8F2A #define GL_VERTEX_ARRAY_LENGTH_NV 0x8F2B #define GL_NORMAL_ARRAY_LENGTH_NV 0x8F2C #define GL_COLOR_ARRAY_LENGTH_NV 0x8F2D #define GL_INDEX_ARRAY_LENGTH_NV 0x8F2E #define GL_TEXTURE_COORD_ARRAY_LENGTH_NV 0x8F2F #define GL_EDGE_FLAG_ARRAY_LENGTH_NV 0x8F30 #define GL_SECONDARY_COLOR_ARRAY_LENGTH_NV 0x8F31 #define GL_FOG_COORD_ARRAY_LENGTH_NV 0x8F32 #define GL_ELEMENT_ARRAY_LENGTH_NV 0x8F33 #define GL_DRAW_INDIRECT_UNIFIED_NV 0x8F40 #define GL_DRAW_INDIRECT_ADDRESS_NV 0x8F41 #define GL_DRAW_INDIRECT_LENGTH_NV 0x8F42 #ifndef GLEE_H_DEFINED_glBufferAddressRangeNV #define GLEE_H_DEFINED_glBufferAddressRangeNV typedef void (APIENTRYP GLEEPFNGLBUFFERADDRESSRANGENVPROC) (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); GLEE_EXTERN GLEEPFNGLBUFFERADDRESSRANGENVPROC GLeeFuncPtr_glBufferAddressRangeNV; #define glBufferAddressRangeNV GLeeFuncPtr_glBufferAddressRangeNV #endif #ifndef GLEE_H_DEFINED_glVertexFormatNV #define GLEE_H_DEFINED_glVertexFormatNV typedef void (APIENTRYP GLEEPFNGLVERTEXFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); GLEE_EXTERN GLEEPFNGLVERTEXFORMATNVPROC GLeeFuncPtr_glVertexFormatNV; #define glVertexFormatNV GLeeFuncPtr_glVertexFormatNV #endif #ifndef GLEE_H_DEFINED_glNormalFormatNV #define GLEE_H_DEFINED_glNormalFormatNV typedef void (APIENTRYP GLEEPFNGLNORMALFORMATNVPROC) (GLenum type, GLsizei stride); GLEE_EXTERN GLEEPFNGLNORMALFORMATNVPROC GLeeFuncPtr_glNormalFormatNV; #define glNormalFormatNV GLeeFuncPtr_glNormalFormatNV #endif #ifndef GLEE_H_DEFINED_glColorFormatNV #define GLEE_H_DEFINED_glColorFormatNV typedef void (APIENTRYP GLEEPFNGLCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); GLEE_EXTERN GLEEPFNGLCOLORFORMATNVPROC GLeeFuncPtr_glColorFormatNV; #define glColorFormatNV GLeeFuncPtr_glColorFormatNV #endif #ifndef GLEE_H_DEFINED_glIndexFormatNV #define GLEE_H_DEFINED_glIndexFormatNV typedef void (APIENTRYP GLEEPFNGLINDEXFORMATNVPROC) (GLenum type, GLsizei stride); GLEE_EXTERN GLEEPFNGLINDEXFORMATNVPROC GLeeFuncPtr_glIndexFormatNV; #define glIndexFormatNV GLeeFuncPtr_glIndexFormatNV #endif #ifndef GLEE_H_DEFINED_glTexCoordFormatNV #define GLEE_H_DEFINED_glTexCoordFormatNV typedef void (APIENTRYP GLEEPFNGLTEXCOORDFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); GLEE_EXTERN GLEEPFNGLTEXCOORDFORMATNVPROC GLeeFuncPtr_glTexCoordFormatNV; #define glTexCoordFormatNV GLeeFuncPtr_glTexCoordFormatNV #endif #ifndef GLEE_H_DEFINED_glEdgeFlagFormatNV #define GLEE_H_DEFINED_glEdgeFlagFormatNV typedef void (APIENTRYP GLEEPFNGLEDGEFLAGFORMATNVPROC) (GLsizei stride); GLEE_EXTERN GLEEPFNGLEDGEFLAGFORMATNVPROC GLeeFuncPtr_glEdgeFlagFormatNV; #define glEdgeFlagFormatNV GLeeFuncPtr_glEdgeFlagFormatNV #endif #ifndef GLEE_H_DEFINED_glSecondaryColorFormatNV #define GLEE_H_DEFINED_glSecondaryColorFormatNV typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); GLEE_EXTERN GLEEPFNGLSECONDARYCOLORFORMATNVPROC GLeeFuncPtr_glSecondaryColorFormatNV; #define glSecondaryColorFormatNV GLeeFuncPtr_glSecondaryColorFormatNV #endif #ifndef GLEE_H_DEFINED_glFogCoordFormatNV #define GLEE_H_DEFINED_glFogCoordFormatNV typedef void (APIENTRYP GLEEPFNGLFOGCOORDFORMATNVPROC) (GLenum type, GLsizei stride); GLEE_EXTERN GLEEPFNGLFOGCOORDFORMATNVPROC GLeeFuncPtr_glFogCoordFormatNV; #define glFogCoordFormatNV GLeeFuncPtr_glFogCoordFormatNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribFormatNV #define GLEE_H_DEFINED_glVertexAttribFormatNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBFORMATNVPROC GLeeFuncPtr_glVertexAttribFormatNV; #define glVertexAttribFormatNV GLeeFuncPtr_glVertexAttribFormatNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribIFormatNV #define GLEE_H_DEFINED_glVertexAttribIFormatNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBIFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBIFORMATNVPROC GLeeFuncPtr_glVertexAttribIFormatNV; #define glVertexAttribIFormatNV GLeeFuncPtr_glVertexAttribIFormatNV #endif #ifndef GLEE_H_DEFINED_glGetIntegerui64i_vNV #define GLEE_H_DEFINED_glGetIntegerui64i_vNV typedef void (APIENTRYP GLEEPFNGLGETINTEGERUI64I_VNVPROC) (GLenum value, GLuint index, GLuint64EXT * result); GLEE_EXTERN GLEEPFNGLGETINTEGERUI64I_VNVPROC GLeeFuncPtr_glGetIntegerui64i_vNV; #define glGetIntegerui64i_vNV GLeeFuncPtr_glGetIntegerui64i_vNV #endif #endif /* GL_NV_texture_barrier */ #ifndef GL_NV_texture_barrier #define GL_NV_texture_barrier 1 #define __GLEE_GL_NV_texture_barrier 1 /* Constants */ #ifndef GLEE_H_DEFINED_glTextureBarrierNV #define GLEE_H_DEFINED_glTextureBarrierNV typedef void (APIENTRYP GLEEPFNGLTEXTUREBARRIERNVPROC) (); GLEE_EXTERN GLEEPFNGLTEXTUREBARRIERNVPROC GLeeFuncPtr_glTextureBarrierNV; #define glTextureBarrierNV GLeeFuncPtr_glTextureBarrierNV #endif #endif /* GL_AMD_shader_stencil_export */ #ifndef GL_AMD_shader_stencil_export #define GL_AMD_shader_stencil_export 1 #define __GLEE_GL_AMD_shader_stencil_export 1 /* Constants */ #endif /* GL_AMD_seamless_cubemap_per_texture */ #ifndef GL_AMD_seamless_cubemap_per_texture #define GL_AMD_seamless_cubemap_per_texture 1 #define __GLEE_GL_AMD_seamless_cubemap_per_texture 1 /* Constants */ #endif /* GL_AMD_conservative_depth */ #ifndef GL_AMD_conservative_depth #define GL_AMD_conservative_depth 1 #define __GLEE_GL_AMD_conservative_depth 1 /* Constants */ #endif /* GL_EXT_shader_image_load_store */ #ifndef GL_EXT_shader_image_load_store #define GL_EXT_shader_image_load_store 1 #define __GLEE_GL_EXT_shader_image_load_store 1 /* Constants */ #define GL_MAX_IMAGE_UNITS_EXT 0x8F38 #define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT 0x8F39 #define GL_IMAGE_BINDING_NAME_EXT 0x8F3A #define GL_IMAGE_BINDING_LEVEL_EXT 0x8F3B #define GL_IMAGE_BINDING_LAYERED_EXT 0x8F3C #define GL_IMAGE_BINDING_LAYER_EXT 0x8F3D #define GL_IMAGE_BINDING_ACCESS_EXT 0x8F3E #define GL_IMAGE_1D_EXT 0x904C #define GL_IMAGE_2D_EXT 0x904D #define GL_IMAGE_3D_EXT 0x904E #define GL_IMAGE_2D_RECT_EXT 0x904F #define GL_IMAGE_CUBE_EXT 0x9050 #define GL_IMAGE_BUFFER_EXT 0x9051 #define GL_IMAGE_1D_ARRAY_EXT 0x9052 #define GL_IMAGE_2D_ARRAY_EXT 0x9053 #define GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054 #define GL_IMAGE_2D_MULTISAMPLE_EXT 0x9055 #define GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9056 #define GL_INT_IMAGE_1D_EXT 0x9057 #define GL_INT_IMAGE_2D_EXT 0x9058 #define GL_INT_IMAGE_3D_EXT 0x9059 #define GL_INT_IMAGE_2D_RECT_EXT 0x905A #define GL_INT_IMAGE_CUBE_EXT 0x905B #define GL_INT_IMAGE_BUFFER_EXT 0x905C #define GL_INT_IMAGE_1D_ARRAY_EXT 0x905D #define GL_INT_IMAGE_2D_ARRAY_EXT 0x905E #define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F #define GL_INT_IMAGE_2D_MULTISAMPLE_EXT 0x9060 #define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9061 #define GL_UNSIGNED_INT_IMAGE_1D_EXT 0x9062 #define GL_UNSIGNED_INT_IMAGE_2D_EXT 0x9063 #define GL_UNSIGNED_INT_IMAGE_3D_EXT 0x9064 #define GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT 0x9065 #define GL_UNSIGNED_INT_IMAGE_CUBE_EXT 0x9066 #define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT 0x9067 #define GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT 0x9068 #define GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT 0x9069 #define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A #define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT 0x906B #define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x906C #define GL_MAX_IMAGE_SAMPLES_EXT 0x906D #define GL_IMAGE_BINDING_FORMAT_EXT 0x906E #define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT 0x00000001 #define GL_ELEMENT_ARRAY_BARRIER_BIT_EXT 0x00000002 #define GL_UNIFORM_BARRIER_BIT_EXT 0x00000004 #define GL_TEXTURE_FETCH_BARRIER_BIT_EXT 0x00000008 #define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT 0x00000020 #define GL_COMMAND_BARRIER_BIT_EXT 0x00000040 #define GL_PIXEL_BUFFER_BARRIER_BIT_EXT 0x00000080 #define GL_TEXTURE_UPDATE_BARRIER_BIT_EXT 0x00000100 #define GL_BUFFER_UPDATE_BARRIER_BIT_EXT 0x00000200 #define GL_FRAMEBUFFER_BARRIER_BIT_EXT 0x00000400 #define GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT 0x00000800 #define GL_ATOMIC_COUNTER_BARRIER_BIT_EXT 0x00001000 #define GL_ALL_BARRIER_BITS_EXT 0xFFFFFFFF #ifndef GLEE_H_DEFINED_glBindImageTextureEXT #define GLEE_H_DEFINED_glBindImageTextureEXT typedef void (APIENTRYP GLEEPFNGLBINDIMAGETEXTUREEXTPROC) (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); GLEE_EXTERN GLEEPFNGLBINDIMAGETEXTUREEXTPROC GLeeFuncPtr_glBindImageTextureEXT; #define glBindImageTextureEXT GLeeFuncPtr_glBindImageTextureEXT #endif #ifndef GLEE_H_DEFINED_glMemoryBarrierEXT #define GLEE_H_DEFINED_glMemoryBarrierEXT typedef void (APIENTRYP GLEEPFNGLMEMORYBARRIEREXTPROC) (GLbitfield barriers); GLEE_EXTERN GLEEPFNGLMEMORYBARRIEREXTPROC GLeeFuncPtr_glMemoryBarrierEXT; #define glMemoryBarrierEXT GLeeFuncPtr_glMemoryBarrierEXT #endif #endif /* GL_EXT_vertex_attrib_64bit */ #ifndef GL_EXT_vertex_attrib_64bit #define GL_EXT_vertex_attrib_64bit 1 #define __GLEE_GL_EXT_vertex_attrib_64bit 1 /* Constants */ #define GL_DOUBLE_VEC2_EXT 0x8FFC #define GL_DOUBLE_VEC3_EXT 0x8FFD #define GL_DOUBLE_VEC4_EXT 0x8FFE #define GL_DOUBLE_MAT2_EXT 0x8F46 #define GL_DOUBLE_MAT3_EXT 0x8F47 #define GL_DOUBLE_MAT4_EXT 0x8F48 #define GL_DOUBLE_MAT2x3_EXT 0x8F49 #define GL_DOUBLE_MAT2x4_EXT 0x8F4A #define GL_DOUBLE_MAT3x2_EXT 0x8F4B #define GL_DOUBLE_MAT3x4_EXT 0x8F4C #define GL_DOUBLE_MAT4x2_EXT 0x8F4D #define GL_DOUBLE_MAT4x3_EXT 0x8F4E #ifndef GLEE_H_DEFINED_glVertexAttribL1dEXT #define GLEE_H_DEFINED_glVertexAttribL1dEXT typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBL1DEXTPROC) (GLuint index, GLdouble x); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBL1DEXTPROC GLeeFuncPtr_glVertexAttribL1dEXT; #define glVertexAttribL1dEXT GLeeFuncPtr_glVertexAttribL1dEXT #endif #ifndef GLEE_H_DEFINED_glVertexAttribL2dEXT #define GLEE_H_DEFINED_glVertexAttribL2dEXT typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBL2DEXTPROC) (GLuint index, GLdouble x, GLdouble y); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBL2DEXTPROC GLeeFuncPtr_glVertexAttribL2dEXT; #define glVertexAttribL2dEXT GLeeFuncPtr_glVertexAttribL2dEXT #endif #ifndef GLEE_H_DEFINED_glVertexAttribL3dEXT #define GLEE_H_DEFINED_glVertexAttribL3dEXT typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBL3DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBL3DEXTPROC GLeeFuncPtr_glVertexAttribL3dEXT; #define glVertexAttribL3dEXT GLeeFuncPtr_glVertexAttribL3dEXT #endif #ifndef GLEE_H_DEFINED_glVertexAttribL4dEXT #define GLEE_H_DEFINED_glVertexAttribL4dEXT typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBL4DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBL4DEXTPROC GLeeFuncPtr_glVertexAttribL4dEXT; #define glVertexAttribL4dEXT GLeeFuncPtr_glVertexAttribL4dEXT #endif #ifndef GLEE_H_DEFINED_glVertexAttribL1dvEXT #define GLEE_H_DEFINED_glVertexAttribL1dvEXT typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBL1DVEXTPROC) (GLuint index, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBL1DVEXTPROC GLeeFuncPtr_glVertexAttribL1dvEXT; #define glVertexAttribL1dvEXT GLeeFuncPtr_glVertexAttribL1dvEXT #endif #ifndef GLEE_H_DEFINED_glVertexAttribL2dvEXT #define GLEE_H_DEFINED_glVertexAttribL2dvEXT typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBL2DVEXTPROC) (GLuint index, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBL2DVEXTPROC GLeeFuncPtr_glVertexAttribL2dvEXT; #define glVertexAttribL2dvEXT GLeeFuncPtr_glVertexAttribL2dvEXT #endif #ifndef GLEE_H_DEFINED_glVertexAttribL3dvEXT #define GLEE_H_DEFINED_glVertexAttribL3dvEXT typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBL3DVEXTPROC) (GLuint index, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBL3DVEXTPROC GLeeFuncPtr_glVertexAttribL3dvEXT; #define glVertexAttribL3dvEXT GLeeFuncPtr_glVertexAttribL3dvEXT #endif #ifndef GLEE_H_DEFINED_glVertexAttribL4dvEXT #define GLEE_H_DEFINED_glVertexAttribL4dvEXT typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBL4DVEXTPROC) (GLuint index, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBL4DVEXTPROC GLeeFuncPtr_glVertexAttribL4dvEXT; #define glVertexAttribL4dvEXT GLeeFuncPtr_glVertexAttribL4dvEXT #endif #ifndef GLEE_H_DEFINED_glVertexAttribLPointerEXT #define GLEE_H_DEFINED_glVertexAttribLPointerEXT typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBLPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBLPOINTEREXTPROC GLeeFuncPtr_glVertexAttribLPointerEXT; #define glVertexAttribLPointerEXT GLeeFuncPtr_glVertexAttribLPointerEXT #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribLdvEXT #define GLEE_H_DEFINED_glGetVertexAttribLdvEXT typedef void (APIENTRYP GLEEPFNGLGETVERTEXATTRIBLDVEXTPROC) (GLuint index, GLenum pname, GLdouble * params); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBLDVEXTPROC GLeeFuncPtr_glGetVertexAttribLdvEXT; #define glGetVertexAttribLdvEXT GLeeFuncPtr_glGetVertexAttribLdvEXT #endif #ifndef GLEE_H_DEFINED_glVertexArrayVertexAttribLOffsetEXT #define GLEE_H_DEFINED_glVertexArrayVertexAttribLOffsetEXT typedef void (APIENTRYP GLEEPFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); GLEE_EXTERN GLEEPFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC GLeeFuncPtr_glVertexArrayVertexAttribLOffsetEXT; #define glVertexArrayVertexAttribLOffsetEXT GLeeFuncPtr_glVertexArrayVertexAttribLOffsetEXT #endif #endif /* GL_NV_gpu_program5 */ #ifndef GL_NV_gpu_program5 #define GL_NV_gpu_program5 1 #define __GLEE_GL_NV_gpu_program5 1 /* Constants */ #define GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A #define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B #define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C #define GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D #define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5E #define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5F #define GL_MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV 0x8F44 #define GL_MAX_PROGRAM_SUBROUTINE_NUM_NV 0x8F45 #ifndef GLEE_H_DEFINED_glProgramSubroutineParametersuivNV #define GLEE_H_DEFINED_glProgramSubroutineParametersuivNV typedef void (APIENTRYP GLEEPFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC) (GLenum target, GLsizei count, const GLuint * params); GLEE_EXTERN GLEEPFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC GLeeFuncPtr_glProgramSubroutineParametersuivNV; #define glProgramSubroutineParametersuivNV GLeeFuncPtr_glProgramSubroutineParametersuivNV #endif #ifndef GLEE_H_DEFINED_glGetProgramSubroutineParameteruivNV #define GLEE_H_DEFINED_glGetProgramSubroutineParameteruivNV typedef void (APIENTRYP GLEEPFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC) (GLenum target, GLuint index, GLuint * param); GLEE_EXTERN GLEEPFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC GLeeFuncPtr_glGetProgramSubroutineParameteruivNV; #define glGetProgramSubroutineParameteruivNV GLeeFuncPtr_glGetProgramSubroutineParameteruivNV #endif #endif /* GL_NV_gpu_shader5 */ #ifndef GL_NV_gpu_shader5 #define GL_NV_gpu_shader5 1 #define __GLEE_GL_NV_gpu_shader5 1 /* Constants */ #define GL_INT64_NV 0x140E #define GL_UNSIGNED_INT64_NV 0x140F #define GL_INT8_NV 0x8FE0 #define GL_INT8_VEC2_NV 0x8FE1 #define GL_INT8_VEC3_NV 0x8FE2 #define GL_INT8_VEC4_NV 0x8FE3 #define GL_INT16_NV 0x8FE4 #define GL_INT16_VEC2_NV 0x8FE5 #define GL_INT16_VEC3_NV 0x8FE6 #define GL_INT16_VEC4_NV 0x8FE7 #define GL_INT64_VEC2_NV 0x8FE9 #define GL_INT64_VEC3_NV 0x8FEA #define GL_INT64_VEC4_NV 0x8FEB #define GL_UNSIGNED_INT8_NV 0x8FEC #define GL_UNSIGNED_INT8_VEC2_NV 0x8FED #define GL_UNSIGNED_INT8_VEC3_NV 0x8FEE #define GL_UNSIGNED_INT8_VEC4_NV 0x8FEF #define GL_UNSIGNED_INT16_NV 0x8FF0 #define GL_UNSIGNED_INT16_VEC2_NV 0x8FF1 #define GL_UNSIGNED_INT16_VEC3_NV 0x8FF2 #define GL_UNSIGNED_INT16_VEC4_NV 0x8FF3 #define GL_UNSIGNED_INT64_VEC2_NV 0x8FF5 #define GL_UNSIGNED_INT64_VEC3_NV 0x8FF6 #define GL_UNSIGNED_INT64_VEC4_NV 0x8FF7 #define GL_FLOAT16_NV 0x8FF8 #define GL_FLOAT16_VEC2_NV 0x8FF9 #define GL_FLOAT16_VEC3_NV 0x8FFA #define GL_FLOAT16_VEC4_NV 0x8FFB #ifndef GLEE_H_DEFINED_glUniform1i64NV #define GLEE_H_DEFINED_glUniform1i64NV typedef void (APIENTRYP GLEEPFNGLUNIFORM1I64NVPROC) (GLint location, GLint64EXT x); GLEE_EXTERN GLEEPFNGLUNIFORM1I64NVPROC GLeeFuncPtr_glUniform1i64NV; #define glUniform1i64NV GLeeFuncPtr_glUniform1i64NV #endif #ifndef GLEE_H_DEFINED_glUniform2i64NV #define GLEE_H_DEFINED_glUniform2i64NV typedef void (APIENTRYP GLEEPFNGLUNIFORM2I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y); GLEE_EXTERN GLEEPFNGLUNIFORM2I64NVPROC GLeeFuncPtr_glUniform2i64NV; #define glUniform2i64NV GLeeFuncPtr_glUniform2i64NV #endif #ifndef GLEE_H_DEFINED_glUniform3i64NV #define GLEE_H_DEFINED_glUniform3i64NV typedef void (APIENTRYP GLEEPFNGLUNIFORM3I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); GLEE_EXTERN GLEEPFNGLUNIFORM3I64NVPROC GLeeFuncPtr_glUniform3i64NV; #define glUniform3i64NV GLeeFuncPtr_glUniform3i64NV #endif #ifndef GLEE_H_DEFINED_glUniform4i64NV #define GLEE_H_DEFINED_glUniform4i64NV typedef void (APIENTRYP GLEEPFNGLUNIFORM4I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); GLEE_EXTERN GLEEPFNGLUNIFORM4I64NVPROC GLeeFuncPtr_glUniform4i64NV; #define glUniform4i64NV GLeeFuncPtr_glUniform4i64NV #endif #ifndef GLEE_H_DEFINED_glUniform1i64vNV #define GLEE_H_DEFINED_glUniform1i64vNV typedef void (APIENTRYP GLEEPFNGLUNIFORM1I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT * value); GLEE_EXTERN GLEEPFNGLUNIFORM1I64VNVPROC GLeeFuncPtr_glUniform1i64vNV; #define glUniform1i64vNV GLeeFuncPtr_glUniform1i64vNV #endif #ifndef GLEE_H_DEFINED_glUniform2i64vNV #define GLEE_H_DEFINED_glUniform2i64vNV typedef void (APIENTRYP GLEEPFNGLUNIFORM2I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT * value); GLEE_EXTERN GLEEPFNGLUNIFORM2I64VNVPROC GLeeFuncPtr_glUniform2i64vNV; #define glUniform2i64vNV GLeeFuncPtr_glUniform2i64vNV #endif #ifndef GLEE_H_DEFINED_glUniform3i64vNV #define GLEE_H_DEFINED_glUniform3i64vNV typedef void (APIENTRYP GLEEPFNGLUNIFORM3I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT * value); GLEE_EXTERN GLEEPFNGLUNIFORM3I64VNVPROC GLeeFuncPtr_glUniform3i64vNV; #define glUniform3i64vNV GLeeFuncPtr_glUniform3i64vNV #endif #ifndef GLEE_H_DEFINED_glUniform4i64vNV #define GLEE_H_DEFINED_glUniform4i64vNV typedef void (APIENTRYP GLEEPFNGLUNIFORM4I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT * value); GLEE_EXTERN GLEEPFNGLUNIFORM4I64VNVPROC GLeeFuncPtr_glUniform4i64vNV; #define glUniform4i64vNV GLeeFuncPtr_glUniform4i64vNV #endif #ifndef GLEE_H_DEFINED_glUniform1ui64NV #define GLEE_H_DEFINED_glUniform1ui64NV typedef void (APIENTRYP GLEEPFNGLUNIFORM1UI64NVPROC) (GLint location, GLuint64EXT x); GLEE_EXTERN GLEEPFNGLUNIFORM1UI64NVPROC GLeeFuncPtr_glUniform1ui64NV; #define glUniform1ui64NV GLeeFuncPtr_glUniform1ui64NV #endif #ifndef GLEE_H_DEFINED_glUniform2ui64NV #define GLEE_H_DEFINED_glUniform2ui64NV typedef void (APIENTRYP GLEEPFNGLUNIFORM2UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y); GLEE_EXTERN GLEEPFNGLUNIFORM2UI64NVPROC GLeeFuncPtr_glUniform2ui64NV; #define glUniform2ui64NV GLeeFuncPtr_glUniform2ui64NV #endif #ifndef GLEE_H_DEFINED_glUniform3ui64NV #define GLEE_H_DEFINED_glUniform3ui64NV typedef void (APIENTRYP GLEEPFNGLUNIFORM3UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); GLEE_EXTERN GLEEPFNGLUNIFORM3UI64NVPROC GLeeFuncPtr_glUniform3ui64NV; #define glUniform3ui64NV GLeeFuncPtr_glUniform3ui64NV #endif #ifndef GLEE_H_DEFINED_glUniform4ui64NV #define GLEE_H_DEFINED_glUniform4ui64NV typedef void (APIENTRYP GLEEPFNGLUNIFORM4UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); GLEE_EXTERN GLEEPFNGLUNIFORM4UI64NVPROC GLeeFuncPtr_glUniform4ui64NV; #define glUniform4ui64NV GLeeFuncPtr_glUniform4ui64NV #endif #ifndef GLEE_H_DEFINED_glUniform1ui64vNV #define GLEE_H_DEFINED_glUniform1ui64vNV typedef void (APIENTRYP GLEEPFNGLUNIFORM1UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT * value); GLEE_EXTERN GLEEPFNGLUNIFORM1UI64VNVPROC GLeeFuncPtr_glUniform1ui64vNV; #define glUniform1ui64vNV GLeeFuncPtr_glUniform1ui64vNV #endif #ifndef GLEE_H_DEFINED_glUniform2ui64vNV #define GLEE_H_DEFINED_glUniform2ui64vNV typedef void (APIENTRYP GLEEPFNGLUNIFORM2UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT * value); GLEE_EXTERN GLEEPFNGLUNIFORM2UI64VNVPROC GLeeFuncPtr_glUniform2ui64vNV; #define glUniform2ui64vNV GLeeFuncPtr_glUniform2ui64vNV #endif #ifndef GLEE_H_DEFINED_glUniform3ui64vNV #define GLEE_H_DEFINED_glUniform3ui64vNV typedef void (APIENTRYP GLEEPFNGLUNIFORM3UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT * value); GLEE_EXTERN GLEEPFNGLUNIFORM3UI64VNVPROC GLeeFuncPtr_glUniform3ui64vNV; #define glUniform3ui64vNV GLeeFuncPtr_glUniform3ui64vNV #endif #ifndef GLEE_H_DEFINED_glUniform4ui64vNV #define GLEE_H_DEFINED_glUniform4ui64vNV typedef void (APIENTRYP GLEEPFNGLUNIFORM4UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT * value); GLEE_EXTERN GLEEPFNGLUNIFORM4UI64VNVPROC GLeeFuncPtr_glUniform4ui64vNV; #define glUniform4ui64vNV GLeeFuncPtr_glUniform4ui64vNV #endif #ifndef GLEE_H_DEFINED_glGetUniformi64vNV #define GLEE_H_DEFINED_glGetUniformi64vNV typedef void (APIENTRYP GLEEPFNGLGETUNIFORMI64VNVPROC) (GLuint program, GLint location, GLint64EXT * params); GLEE_EXTERN GLEEPFNGLGETUNIFORMI64VNVPROC GLeeFuncPtr_glGetUniformi64vNV; #define glGetUniformi64vNV GLeeFuncPtr_glGetUniformi64vNV #endif #ifndef GLEE_H_DEFINED_glProgramUniform1i64NV #define GLEE_H_DEFINED_glProgramUniform1i64NV typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM1I64NVPROC) (GLuint program, GLint location, GLint64EXT x); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM1I64NVPROC GLeeFuncPtr_glProgramUniform1i64NV; #define glProgramUniform1i64NV GLeeFuncPtr_glProgramUniform1i64NV #endif #ifndef GLEE_H_DEFINED_glProgramUniform2i64NV #define GLEE_H_DEFINED_glProgramUniform2i64NV typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM2I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM2I64NVPROC GLeeFuncPtr_glProgramUniform2i64NV; #define glProgramUniform2i64NV GLeeFuncPtr_glProgramUniform2i64NV #endif #ifndef GLEE_H_DEFINED_glProgramUniform3i64NV #define GLEE_H_DEFINED_glProgramUniform3i64NV typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM3I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM3I64NVPROC GLeeFuncPtr_glProgramUniform3i64NV; #define glProgramUniform3i64NV GLeeFuncPtr_glProgramUniform3i64NV #endif #ifndef GLEE_H_DEFINED_glProgramUniform4i64NV #define GLEE_H_DEFINED_glProgramUniform4i64NV typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM4I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM4I64NVPROC GLeeFuncPtr_glProgramUniform4i64NV; #define glProgramUniform4i64NV GLeeFuncPtr_glProgramUniform4i64NV #endif #ifndef GLEE_H_DEFINED_glProgramUniform1i64vNV #define GLEE_H_DEFINED_glProgramUniform1i64vNV typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM1I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM1I64VNVPROC GLeeFuncPtr_glProgramUniform1i64vNV; #define glProgramUniform1i64vNV GLeeFuncPtr_glProgramUniform1i64vNV #endif #ifndef GLEE_H_DEFINED_glProgramUniform2i64vNV #define GLEE_H_DEFINED_glProgramUniform2i64vNV typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM2I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM2I64VNVPROC GLeeFuncPtr_glProgramUniform2i64vNV; #define glProgramUniform2i64vNV GLeeFuncPtr_glProgramUniform2i64vNV #endif #ifndef GLEE_H_DEFINED_glProgramUniform3i64vNV #define GLEE_H_DEFINED_glProgramUniform3i64vNV typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM3I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM3I64VNVPROC GLeeFuncPtr_glProgramUniform3i64vNV; #define glProgramUniform3i64vNV GLeeFuncPtr_glProgramUniform3i64vNV #endif #ifndef GLEE_H_DEFINED_glProgramUniform4i64vNV #define GLEE_H_DEFINED_glProgramUniform4i64vNV typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM4I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM4I64VNVPROC GLeeFuncPtr_glProgramUniform4i64vNV; #define glProgramUniform4i64vNV GLeeFuncPtr_glProgramUniform4i64vNV #endif #ifndef GLEE_H_DEFINED_glProgramUniform1ui64NV #define GLEE_H_DEFINED_glProgramUniform1ui64NV typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM1UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM1UI64NVPROC GLeeFuncPtr_glProgramUniform1ui64NV; #define glProgramUniform1ui64NV GLeeFuncPtr_glProgramUniform1ui64NV #endif #ifndef GLEE_H_DEFINED_glProgramUniform2ui64NV #define GLEE_H_DEFINED_glProgramUniform2ui64NV typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM2UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM2UI64NVPROC GLeeFuncPtr_glProgramUniform2ui64NV; #define glProgramUniform2ui64NV GLeeFuncPtr_glProgramUniform2ui64NV #endif #ifndef GLEE_H_DEFINED_glProgramUniform3ui64NV #define GLEE_H_DEFINED_glProgramUniform3ui64NV typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM3UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM3UI64NVPROC GLeeFuncPtr_glProgramUniform3ui64NV; #define glProgramUniform3ui64NV GLeeFuncPtr_glProgramUniform3ui64NV #endif #ifndef GLEE_H_DEFINED_glProgramUniform4ui64NV #define GLEE_H_DEFINED_glProgramUniform4ui64NV typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM4UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM4UI64NVPROC GLeeFuncPtr_glProgramUniform4ui64NV; #define glProgramUniform4ui64NV GLeeFuncPtr_glProgramUniform4ui64NV #endif #ifndef GLEE_H_DEFINED_glProgramUniform1ui64vNV #define GLEE_H_DEFINED_glProgramUniform1ui64vNV typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM1UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM1UI64VNVPROC GLeeFuncPtr_glProgramUniform1ui64vNV; #define glProgramUniform1ui64vNV GLeeFuncPtr_glProgramUniform1ui64vNV #endif #ifndef GLEE_H_DEFINED_glProgramUniform2ui64vNV #define GLEE_H_DEFINED_glProgramUniform2ui64vNV typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM2UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM2UI64VNVPROC GLeeFuncPtr_glProgramUniform2ui64vNV; #define glProgramUniform2ui64vNV GLeeFuncPtr_glProgramUniform2ui64vNV #endif #ifndef GLEE_H_DEFINED_glProgramUniform3ui64vNV #define GLEE_H_DEFINED_glProgramUniform3ui64vNV typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM3UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM3UI64VNVPROC GLeeFuncPtr_glProgramUniform3ui64vNV; #define glProgramUniform3ui64vNV GLeeFuncPtr_glProgramUniform3ui64vNV #endif #ifndef GLEE_H_DEFINED_glProgramUniform4ui64vNV #define GLEE_H_DEFINED_glProgramUniform4ui64vNV typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM4UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM4UI64VNVPROC GLeeFuncPtr_glProgramUniform4ui64vNV; #define glProgramUniform4ui64vNV GLeeFuncPtr_glProgramUniform4ui64vNV #endif #endif /* GL_NV_shader_buffer_store */ #ifndef GL_NV_shader_buffer_store #define GL_NV_shader_buffer_store 1 #define __GLEE_GL_NV_shader_buffer_store 1 /* Constants */ #define GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV 0x00000010 #endif /* GL_NV_tessellation_program5 */ #ifndef GL_NV_tessellation_program5 #define GL_NV_tessellation_program5 1 #define __GLEE_GL_NV_tessellation_program5 1 /* Constants */ #define GL_MAX_PROGRAM_PATCH_ATTRIBS_NV 0x86D8 #define GL_TESS_CONTROL_PROGRAM_NV 0x891E #define GL_TESS_EVALUATION_PROGRAM_NV 0x891F #define GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV 0x8C74 #define GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV 0x8C75 #endif /* GL_NV_vertex_attrib_integer_64bit */ #ifndef GL_NV_vertex_attrib_integer_64bit #define GL_NV_vertex_attrib_integer_64bit 1 #define __GLEE_GL_NV_vertex_attrib_integer_64bit 1 /* Constants */ #ifndef GLEE_H_DEFINED_glVertexAttribL1i64NV #define GLEE_H_DEFINED_glVertexAttribL1i64NV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBL1I64NVPROC) (GLuint index, GLint64EXT x); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBL1I64NVPROC GLeeFuncPtr_glVertexAttribL1i64NV; #define glVertexAttribL1i64NV GLeeFuncPtr_glVertexAttribL1i64NV #endif #ifndef GLEE_H_DEFINED_glVertexAttribL2i64NV #define GLEE_H_DEFINED_glVertexAttribL2i64NV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBL2I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBL2I64NVPROC GLeeFuncPtr_glVertexAttribL2i64NV; #define glVertexAttribL2i64NV GLeeFuncPtr_glVertexAttribL2i64NV #endif #ifndef GLEE_H_DEFINED_glVertexAttribL3i64NV #define GLEE_H_DEFINED_glVertexAttribL3i64NV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBL3I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBL3I64NVPROC GLeeFuncPtr_glVertexAttribL3i64NV; #define glVertexAttribL3i64NV GLeeFuncPtr_glVertexAttribL3i64NV #endif #ifndef GLEE_H_DEFINED_glVertexAttribL4i64NV #define GLEE_H_DEFINED_glVertexAttribL4i64NV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBL4I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBL4I64NVPROC GLeeFuncPtr_glVertexAttribL4i64NV; #define glVertexAttribL4i64NV GLeeFuncPtr_glVertexAttribL4i64NV #endif #ifndef GLEE_H_DEFINED_glVertexAttribL1i64vNV #define GLEE_H_DEFINED_glVertexAttribL1i64vNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBL1I64VNVPROC) (GLuint index, const GLint64EXT * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBL1I64VNVPROC GLeeFuncPtr_glVertexAttribL1i64vNV; #define glVertexAttribL1i64vNV GLeeFuncPtr_glVertexAttribL1i64vNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribL2i64vNV #define GLEE_H_DEFINED_glVertexAttribL2i64vNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBL2I64VNVPROC) (GLuint index, const GLint64EXT * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBL2I64VNVPROC GLeeFuncPtr_glVertexAttribL2i64vNV; #define glVertexAttribL2i64vNV GLeeFuncPtr_glVertexAttribL2i64vNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribL3i64vNV #define GLEE_H_DEFINED_glVertexAttribL3i64vNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBL3I64VNVPROC) (GLuint index, const GLint64EXT * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBL3I64VNVPROC GLeeFuncPtr_glVertexAttribL3i64vNV; #define glVertexAttribL3i64vNV GLeeFuncPtr_glVertexAttribL3i64vNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribL4i64vNV #define GLEE_H_DEFINED_glVertexAttribL4i64vNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBL4I64VNVPROC) (GLuint index, const GLint64EXT * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBL4I64VNVPROC GLeeFuncPtr_glVertexAttribL4i64vNV; #define glVertexAttribL4i64vNV GLeeFuncPtr_glVertexAttribL4i64vNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribL1ui64NV #define GLEE_H_DEFINED_glVertexAttribL1ui64NV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBL1UI64NVPROC) (GLuint index, GLuint64EXT x); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBL1UI64NVPROC GLeeFuncPtr_glVertexAttribL1ui64NV; #define glVertexAttribL1ui64NV GLeeFuncPtr_glVertexAttribL1ui64NV #endif #ifndef GLEE_H_DEFINED_glVertexAttribL2ui64NV #define GLEE_H_DEFINED_glVertexAttribL2ui64NV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBL2UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBL2UI64NVPROC GLeeFuncPtr_glVertexAttribL2ui64NV; #define glVertexAttribL2ui64NV GLeeFuncPtr_glVertexAttribL2ui64NV #endif #ifndef GLEE_H_DEFINED_glVertexAttribL3ui64NV #define GLEE_H_DEFINED_glVertexAttribL3ui64NV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBL3UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBL3UI64NVPROC GLeeFuncPtr_glVertexAttribL3ui64NV; #define glVertexAttribL3ui64NV GLeeFuncPtr_glVertexAttribL3ui64NV #endif #ifndef GLEE_H_DEFINED_glVertexAttribL4ui64NV #define GLEE_H_DEFINED_glVertexAttribL4ui64NV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBL4UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBL4UI64NVPROC GLeeFuncPtr_glVertexAttribL4ui64NV; #define glVertexAttribL4ui64NV GLeeFuncPtr_glVertexAttribL4ui64NV #endif #ifndef GLEE_H_DEFINED_glVertexAttribL1ui64vNV #define GLEE_H_DEFINED_glVertexAttribL1ui64vNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBL1UI64VNVPROC) (GLuint index, const GLuint64EXT * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBL1UI64VNVPROC GLeeFuncPtr_glVertexAttribL1ui64vNV; #define glVertexAttribL1ui64vNV GLeeFuncPtr_glVertexAttribL1ui64vNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribL2ui64vNV #define GLEE_H_DEFINED_glVertexAttribL2ui64vNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBL2UI64VNVPROC) (GLuint index, const GLuint64EXT * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBL2UI64VNVPROC GLeeFuncPtr_glVertexAttribL2ui64vNV; #define glVertexAttribL2ui64vNV GLeeFuncPtr_glVertexAttribL2ui64vNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribL3ui64vNV #define GLEE_H_DEFINED_glVertexAttribL3ui64vNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBL3UI64VNVPROC) (GLuint index, const GLuint64EXT * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBL3UI64VNVPROC GLeeFuncPtr_glVertexAttribL3ui64vNV; #define glVertexAttribL3ui64vNV GLeeFuncPtr_glVertexAttribL3ui64vNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribL4ui64vNV #define GLEE_H_DEFINED_glVertexAttribL4ui64vNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBL4UI64VNVPROC) (GLuint index, const GLuint64EXT * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBL4UI64VNVPROC GLeeFuncPtr_glVertexAttribL4ui64vNV; #define glVertexAttribL4ui64vNV GLeeFuncPtr_glVertexAttribL4ui64vNV #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribLi64vNV #define GLEE_H_DEFINED_glGetVertexAttribLi64vNV typedef void (APIENTRYP GLEEPFNGLGETVERTEXATTRIBLI64VNVPROC) (GLuint index, GLenum pname, GLint64EXT * params); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBLI64VNVPROC GLeeFuncPtr_glGetVertexAttribLi64vNV; #define glGetVertexAttribLi64vNV GLeeFuncPtr_glGetVertexAttribLi64vNV #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribLui64vNV #define GLEE_H_DEFINED_glGetVertexAttribLui64vNV typedef void (APIENTRYP GLEEPFNGLGETVERTEXATTRIBLUI64VNVPROC) (GLuint index, GLenum pname, GLuint64EXT * params); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBLUI64VNVPROC GLeeFuncPtr_glGetVertexAttribLui64vNV; #define glGetVertexAttribLui64vNV GLeeFuncPtr_glGetVertexAttribLui64vNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribLFormatNV #define GLEE_H_DEFINED_glVertexAttribLFormatNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBLFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBLFORMATNVPROC GLeeFuncPtr_glVertexAttribLFormatNV; #define glVertexAttribLFormatNV GLeeFuncPtr_glVertexAttribLFormatNV #endif #endif /* GL_NV_multisample_coverage */ #ifndef GL_NV_multisample_coverage #define GL_NV_multisample_coverage 1 #define __GLEE_GL_NV_multisample_coverage 1 /* Constants */ #define GL_COVERAGE_SAMPLES_NV 0x80A9 #define GL_COLOR_SAMPLES_NV 0x8E20 #endif /* GL_AMD_name_gen_delete */ #ifndef GL_AMD_name_gen_delete #define GL_AMD_name_gen_delete 1 #define __GLEE_GL_AMD_name_gen_delete 1 /* Constants */ #define GL_DATA_BUFFER_AMD 0x9151 #define GL_PERFORMANCE_MONITOR_AMD 0x9152 #define GL_QUERY_OBJECT_AMD 0x9153 #define GL_VERTEX_ARRAY_OBJECT_AMD 0x9154 #define GL_SAMPLER_OBJECT_AMD 0x9155 #ifndef GLEE_H_DEFINED_glGenNamesAMD #define GLEE_H_DEFINED_glGenNamesAMD typedef void (APIENTRYP GLEEPFNGLGENNAMESAMDPROC) (GLenum identifier, GLuint num, GLuint * names); GLEE_EXTERN GLEEPFNGLGENNAMESAMDPROC GLeeFuncPtr_glGenNamesAMD; #define glGenNamesAMD GLeeFuncPtr_glGenNamesAMD #endif #ifndef GLEE_H_DEFINED_glDeleteNamesAMD #define GLEE_H_DEFINED_glDeleteNamesAMD typedef void (APIENTRYP GLEEPFNGLDELETENAMESAMDPROC) (GLenum identifier, GLuint num, const GLuint * names); GLEE_EXTERN GLEEPFNGLDELETENAMESAMDPROC GLeeFuncPtr_glDeleteNamesAMD; #define glDeleteNamesAMD GLeeFuncPtr_glDeleteNamesAMD #endif #ifndef GLEE_H_DEFINED_glIsNameAMD #define GLEE_H_DEFINED_glIsNameAMD typedef GLboolean (APIENTRYP GLEEPFNGLISNAMEAMDPROC) (GLenum identifier, GLuint name); GLEE_EXTERN GLEEPFNGLISNAMEAMDPROC GLeeFuncPtr_glIsNameAMD; #define glIsNameAMD GLeeFuncPtr_glIsNameAMD #endif #endif /* GL_AMD_debug_output */ #ifndef GL_AMD_debug_output #define GL_AMD_debug_output 1 #define __GLEE_GL_AMD_debug_output 1 /* Constants */ #define GL_MAX_DEBUG_MESSAGE_LENGTH_AMD 0x9143 #define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD 0x9144 #define GL_DEBUG_LOGGED_MESSAGES_AMD 0x9145 #define GL_DEBUG_SEVERITY_HIGH_AMD 0x9146 #define GL_DEBUG_SEVERITY_MEDIUM_AMD 0x9147 #define GL_DEBUG_SEVERITY_LOW_AMD 0x9148 #define GL_DEBUG_CATEGORY_API_ERROR_AMD 0x9149 #define GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD 0x914A #define GL_DEBUG_CATEGORY_DEPRECATION_AMD 0x914B #define GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD 0x914C #define GL_DEBUG_CATEGORY_PERFORMANCE_AMD 0x914D #define GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD 0x914E #define GL_DEBUG_CATEGORY_APPLICATION_AMD 0x914F #define GL_DEBUG_CATEGORY_OTHER_AMD 0x9150 #ifndef GLEE_H_DEFINED_glDebugMessageEnableAMD #define GLEE_H_DEFINED_glDebugMessageEnableAMD typedef void (APIENTRYP GLEEPFNGLDEBUGMESSAGEENABLEAMDPROC) (GLenum category, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled); GLEE_EXTERN GLEEPFNGLDEBUGMESSAGEENABLEAMDPROC GLeeFuncPtr_glDebugMessageEnableAMD; #define glDebugMessageEnableAMD GLeeFuncPtr_glDebugMessageEnableAMD #endif #ifndef GLEE_H_DEFINED_glDebugMessageInsertAMD #define GLEE_H_DEFINED_glDebugMessageInsertAMD typedef void (APIENTRYP GLEEPFNGLDEBUGMESSAGEINSERTAMDPROC) (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar * buf); GLEE_EXTERN GLEEPFNGLDEBUGMESSAGEINSERTAMDPROC GLeeFuncPtr_glDebugMessageInsertAMD; #define glDebugMessageInsertAMD GLeeFuncPtr_glDebugMessageInsertAMD #endif #ifndef GLEE_H_DEFINED_glDebugMessageCallbackAMD #define GLEE_H_DEFINED_glDebugMessageCallbackAMD typedef void (APIENTRYP GLEEPFNGLDEBUGMESSAGECALLBACKAMDPROC) (GLDEBUGPROCAMD callback, GLvoid * userParam); GLEE_EXTERN GLEEPFNGLDEBUGMESSAGECALLBACKAMDPROC GLeeFuncPtr_glDebugMessageCallbackAMD; #define glDebugMessageCallbackAMD GLeeFuncPtr_glDebugMessageCallbackAMD #endif #ifndef GLEE_H_DEFINED_glGetDebugMessageLogAMD #define GLEE_H_DEFINED_glGetDebugMessageLogAMD typedef GLuint (APIENTRYP GLEEPFNGLGETDEBUGMESSAGELOGAMDPROC) (GLuint count, GLsizei bufsize, GLenum * categories, GLuint * severities, GLuint * ids, GLsizei * lengths, GLchar * message); GLEE_EXTERN GLEEPFNGLGETDEBUGMESSAGELOGAMDPROC GLeeFuncPtr_glGetDebugMessageLogAMD; #define glGetDebugMessageLogAMD GLeeFuncPtr_glGetDebugMessageLogAMD #endif #endif /* GL_AMD_transform_feedback3_lines_triangles */ #ifndef GL_AMD_transform_feedback3_lines_triangles #define GL_AMD_transform_feedback3_lines_triangles 1 #define __GLEE_GL_AMD_transform_feedback3_lines_triangles 1 /* Constants */ #endif /* GL_AMD_depth_clamp_separate */ #ifndef GL_AMD_depth_clamp_separate #define GL_AMD_depth_clamp_separate 1 #define __GLEE_GL_AMD_depth_clamp_separate 1 /* Constants */ #define GL_DEPTH_CLAMP_NEAR_AMD 0x901E #define GL_DEPTH_CLAMP_FAR_AMD 0x901F #endif /* GL_EXT_texture_sRGB_decode */ #ifndef GL_EXT_texture_sRGB_decode #define GL_EXT_texture_sRGB_decode 1 #define __GLEE_GL_EXT_texture_sRGB_decode 1 /* Constants */ #define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48 #define GL_DECODE_EXT 0x8A49 #define GL_SKIP_DECODE_EXT 0x8A4A #endif /* GL_NV_texture_multisample */ #ifndef GL_NV_texture_multisample #define GL_NV_texture_multisample 1 #define __GLEE_GL_NV_texture_multisample 1 /* Constants */ #define GL_TEXTURE_COVERAGE_SAMPLES_NV 0x9045 #define GL_TEXTURE_COLOR_SAMPLES_NV 0x9046 #ifndef GLEE_H_DEFINED_glTexImage2DMultisampleCoverageNV #define GLEE_H_DEFINED_glTexImage2DMultisampleCoverageNV typedef void (APIENTRYP GLEEPFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); GLEE_EXTERN GLEEPFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC GLeeFuncPtr_glTexImage2DMultisampleCoverageNV; #define glTexImage2DMultisampleCoverageNV GLeeFuncPtr_glTexImage2DMultisampleCoverageNV #endif #ifndef GLEE_H_DEFINED_glTexImage3DMultisampleCoverageNV #define GLEE_H_DEFINED_glTexImage3DMultisampleCoverageNV typedef void (APIENTRYP GLEEPFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); GLEE_EXTERN GLEEPFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC GLeeFuncPtr_glTexImage3DMultisampleCoverageNV; #define glTexImage3DMultisampleCoverageNV GLeeFuncPtr_glTexImage3DMultisampleCoverageNV #endif #ifndef GLEE_H_DEFINED_glTextureImage2DMultisampleNV #define GLEE_H_DEFINED_glTextureImage2DMultisampleNV typedef void (APIENTRYP GLEEPFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); GLEE_EXTERN GLEEPFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC GLeeFuncPtr_glTextureImage2DMultisampleNV; #define glTextureImage2DMultisampleNV GLeeFuncPtr_glTextureImage2DMultisampleNV #endif #ifndef GLEE_H_DEFINED_glTextureImage3DMultisampleNV #define GLEE_H_DEFINED_glTextureImage3DMultisampleNV typedef void (APIENTRYP GLEEPFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); GLEE_EXTERN GLEEPFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC GLeeFuncPtr_glTextureImage3DMultisampleNV; #define glTextureImage3DMultisampleNV GLeeFuncPtr_glTextureImage3DMultisampleNV #endif #ifndef GLEE_H_DEFINED_glTextureImage2DMultisampleCoverageNV #define GLEE_H_DEFINED_glTextureImage2DMultisampleCoverageNV typedef void (APIENTRYP GLEEPFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); GLEE_EXTERN GLEEPFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC GLeeFuncPtr_glTextureImage2DMultisampleCoverageNV; #define glTextureImage2DMultisampleCoverageNV GLeeFuncPtr_glTextureImage2DMultisampleCoverageNV #endif #ifndef GLEE_H_DEFINED_glTextureImage3DMultisampleCoverageNV #define GLEE_H_DEFINED_glTextureImage3DMultisampleCoverageNV typedef void (APIENTRYP GLEEPFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); GLEE_EXTERN GLEEPFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC GLeeFuncPtr_glTextureImage3DMultisampleCoverageNV; #define glTextureImage3DMultisampleCoverageNV GLeeFuncPtr_glTextureImage3DMultisampleCoverageNV #endif #endif /* GL_AMD_blend_minmax_factor */ #ifndef GL_AMD_blend_minmax_factor #define GL_AMD_blend_minmax_factor 1 #define __GLEE_GL_AMD_blend_minmax_factor 1 /* Constants */ #define GL_FACTOR_MIN_AMD 0x901C #define GL_FACTOR_MAX_AMD 0x901D #endif /* GL_AMD_sample_positions */ #ifndef GL_AMD_sample_positions #define GL_AMD_sample_positions 1 #define __GLEE_GL_AMD_sample_positions 1 /* Constants */ #define GL_SUBSAMPLE_DISTANCE_AMD 0x883F #ifndef GLEE_H_DEFINED_glSetMultisamplefvAMD #define GLEE_H_DEFINED_glSetMultisamplefvAMD typedef void (APIENTRYP GLEEPFNGLSETMULTISAMPLEFVAMDPROC) (GLenum pname, GLuint index, const GLfloat * val); GLEE_EXTERN GLEEPFNGLSETMULTISAMPLEFVAMDPROC GLeeFuncPtr_glSetMultisamplefvAMD; #define glSetMultisamplefvAMD GLeeFuncPtr_glSetMultisamplefvAMD #endif #endif /* GL_EXT_x11_sync_object */ #ifndef GL_EXT_x11_sync_object #define GL_EXT_x11_sync_object 1 #define __GLEE_GL_EXT_x11_sync_object 1 /* Constants */ #define GL_SYNC_X11_FENCE_EXT 0x90E1 #ifndef GLEE_H_DEFINED_glImportSyncEXT #define GLEE_H_DEFINED_glImportSyncEXT typedef GLsync (APIENTRYP GLEEPFNGLIMPORTSYNCEXTPROC) (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); GLEE_EXTERN GLEEPFNGLIMPORTSYNCEXTPROC GLeeFuncPtr_glImportSyncEXT; #define glImportSyncEXT GLeeFuncPtr_glImportSyncEXT #endif #endif /* GL_AMD_multi_draw_indirect */ #ifndef GL_AMD_multi_draw_indirect #define GL_AMD_multi_draw_indirect 1 #define __GLEE_GL_AMD_multi_draw_indirect 1 /* Constants */ #ifndef GLEE_H_DEFINED_glMultiDrawArraysIndirectAMD #define GLEE_H_DEFINED_glMultiDrawArraysIndirectAMD typedef void (APIENTRYP GLEEPFNGLMULTIDRAWARRAYSINDIRECTAMDPROC) (GLenum mode, const GLvoid * indirect, GLsizei primcount, GLsizei stride); GLEE_EXTERN GLEEPFNGLMULTIDRAWARRAYSINDIRECTAMDPROC GLeeFuncPtr_glMultiDrawArraysIndirectAMD; #define glMultiDrawArraysIndirectAMD GLeeFuncPtr_glMultiDrawArraysIndirectAMD #endif #ifndef GLEE_H_DEFINED_glMultiDrawElementsIndirectAMD #define GLEE_H_DEFINED_glMultiDrawElementsIndirectAMD typedef void (APIENTRYP GLEEPFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC) (GLenum mode, GLenum type, const GLvoid * indirect, GLsizei primcount, GLsizei stride); GLEE_EXTERN GLEEPFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC GLeeFuncPtr_glMultiDrawElementsIndirectAMD; #define glMultiDrawElementsIndirectAMD GLeeFuncPtr_glMultiDrawElementsIndirectAMD #endif #endif /* GL_EXT_framebuffer_multisample_blit_scaled */ #ifndef GL_EXT_framebuffer_multisample_blit_scaled #define GL_EXT_framebuffer_multisample_blit_scaled 1 #define __GLEE_GL_EXT_framebuffer_multisample_blit_scaled 1 /* Constants */ #define GL_SCALED_RESOLVE_FASTEST_EXT 0x90BA #define GL_SCALED_RESOLVE_NICEST_EXT 0x90BB #endif /* GL_NV_path_rendering */ #ifndef GL_NV_path_rendering #define GL_NV_path_rendering 1 #define __GLEE_GL_NV_path_rendering 1 /* Constants */ #define GL_PATH_FORMAT_SVG_NV 0x9070 #define GL_PATH_FORMAT_PS_NV 0x9071 #define GL_STANDARD_FONT_NAME_NV 0x9072 #define GL_SYSTEM_FONT_NAME_NV 0x9073 #define GL_FILE_NAME_NV 0x9074 #define GL_PATH_STROKE_WIDTH_NV 0x9075 #define GL_PATH_END_CAPS_NV 0x9076 #define GL_PATH_INITIAL_END_CAP_NV 0x9077 #define GL_PATH_TERMINAL_END_CAP_NV 0x9078 #define GL_PATH_JOIN_STYLE_NV 0x9079 #define GL_PATH_MITER_LIMIT_NV 0x907A #define GL_PATH_DASH_CAPS_NV 0x907B #define GL_PATH_INITIAL_DASH_CAP_NV 0x907C #define GL_PATH_TERMINAL_DASH_CAP_NV 0x907D #define GL_PATH_DASH_OFFSET_NV 0x907E #define GL_PATH_CLIENT_LENGTH_NV 0x907F #define GL_PATH_FILL_MODE_NV 0x9080 #define GL_PATH_FILL_MASK_NV 0x9081 #define GL_PATH_FILL_COVER_MODE_NV 0x9082 #define GL_PATH_STROKE_COVER_MODE_NV 0x9083 #define GL_PATH_STROKE_MASK_NV 0x9084 #define GL_COUNT_UP_NV 0x9088 #define GL_COUNT_DOWN_NV 0x9089 #define GL_PATH_OBJECT_BOUNDING_BOX_NV 0x908A #define GL_CONVEX_HULL_NV 0x908B #define GL_BOUNDING_BOX_NV 0x908D #define GL_TRANSLATE_X_NV 0x908E #define GL_TRANSLATE_Y_NV 0x908F #define GL_TRANSLATE_2D_NV 0x9090 #define GL_TRANSLATE_3D_NV 0x9091 #define GL_AFFINE_2D_NV 0x9092 #define GL_AFFINE_3D_NV 0x9094 #define GL_TRANSPOSE_AFFINE_2D_NV 0x9096 #define GL_TRANSPOSE_AFFINE_3D_NV 0x9098 #define GL_UTF8_NV 0x909A #define GL_UTF16_NV 0x909B #define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C #define GL_PATH_COMMAND_COUNT_NV 0x909D #define GL_PATH_COORD_COUNT_NV 0x909E #define GL_PATH_DASH_ARRAY_COUNT_NV 0x909F #define GL_PATH_COMPUTED_LENGTH_NV 0x90A0 #define GL_PATH_FILL_BOUNDING_BOX_NV 0x90A1 #define GL_PATH_STROKE_BOUNDING_BOX_NV 0x90A2 #define GL_SQUARE_NV 0x90A3 #define GL_ROUND_NV 0x90A4 #define GL_TRIANGULAR_NV 0x90A5 #define GL_BEVEL_NV 0x90A6 #define GL_MITER_REVERT_NV 0x90A7 #define GL_MITER_TRUNCATE_NV 0x90A8 #define GL_SKIP_MISSING_GLYPH_NV 0x90A9 #define GL_USE_MISSING_GLYPH_NV 0x90AA #define GL_PATH_ERROR_POSITION_NV 0x90AB #define GL_PATH_FOG_GEN_MODE_NV 0x90AC #define GL_ACCUM_ADJACENT_PAIRS_NV 0x90AD #define GL_ADJACENT_PAIRS_NV 0x90AE #define GL_FIRST_TO_REST_NV 0x90AF #define GL_PATH_GEN_MODE_NV 0x90B0 #define GL_PATH_GEN_COEFF_NV 0x90B1 #define GL_PATH_GEN_COLOR_FORMAT_NV 0x90B2 #define GL_PATH_GEN_COMPONENTS_NV 0x90B3 #define GL_PATH_STENCIL_FUNC_NV 0x90B7 #define GL_PATH_STENCIL_REF_NV 0x90B8 #define GL_PATH_STENCIL_VALUE_MASK_NV 0x90B9 #define GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD #define GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE #define GL_PATH_COVER_DEPTH_FUNC_NV 0x90BF #define GL_PATH_DASH_OFFSET_RESET_NV 0x90B4 #define GL_MOVE_TO_RESETS_NV 0x90B5 #define GL_MOVE_TO_CONTINUES_NV 0x90B6 #define GL_CLOSE_PATH_NV 0x00 #define GL_MOVE_TO_NV 0x02 #define GL_RELATIVE_MOVE_TO_NV 0x03 #define GL_LINE_TO_NV 0x04 #define GL_RELATIVE_LINE_TO_NV 0x05 #define GL_HORIZONTAL_LINE_TO_NV 0x06 #define GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07 #define GL_VERTICAL_LINE_TO_NV 0x08 #define GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09 #define GL_QUADRATIC_CURVE_TO_NV 0x0A #define GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B #define GL_CUBIC_CURVE_TO_NV 0x0C #define GL_RELATIVE_CUBIC_CURVE_TO_NV 0x0D #define GL_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0E #define GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F #define GL_SMOOTH_CUBIC_CURVE_TO_NV 0x10 #define GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11 #define GL_SMALL_CCW_ARC_TO_NV 0x12 #define GL_RELATIVE_SMALL_CCW_ARC_TO_NV 0x13 #define GL_SMALL_CW_ARC_TO_NV 0x14 #define GL_RELATIVE_SMALL_CW_ARC_TO_NV 0x15 #define GL_LARGE_CCW_ARC_TO_NV 0x16 #define GL_RELATIVE_LARGE_CCW_ARC_TO_NV 0x17 #define GL_LARGE_CW_ARC_TO_NV 0x18 #define GL_RELATIVE_LARGE_CW_ARC_TO_NV 0x19 #define GL_RESTART_PATH_NV 0xF0 #define GL_DUP_FIRST_CUBIC_CURVE_TO_NV 0xF2 #define GL_DUP_LAST_CUBIC_CURVE_TO_NV 0xF4 #define GL_RECT_NV 0xF6 #define GL_CIRCULAR_CCW_ARC_TO_NV 0xF8 #define GL_CIRCULAR_CW_ARC_TO_NV 0xFA #define GL_CIRCULAR_TANGENT_ARC_TO_NV 0xFC #define GL_ARC_TO_NV 0xFE #define GL_RELATIVE_ARC_TO_NV 0xFF #define GL_BOLD_BIT_NV 0x01 #define GL_ITALIC_BIT_NV 0x02 #define GL_GLYPH_WIDTH_BIT_NV 0x01 #define GL_GLYPH_HEIGHT_BIT_NV 0x02 #define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04 #define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08 #define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10 #define GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20 #define GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40 #define GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80 #define GL_GLYPH_HAS_KERNING_BIT_NV 0x100 #define GL_FONT_X_MIN_BOUNDS_BIT_NV 0x00010000 #define GL_FONT_Y_MIN_BOUNDS_BIT_NV 0x00020000 #define GL_FONT_X_MAX_BOUNDS_BIT_NV 0x00040000 #define GL_FONT_Y_MAX_BOUNDS_BIT_NV 0x00080000 #define GL_FONT_UNITS_PER_EM_BIT_NV 0x00100000 #define GL_FONT_ASCENDER_BIT_NV 0x00200000 #define GL_FONT_DESCENDER_BIT_NV 0x00400000 #define GL_FONT_HEIGHT_BIT_NV 0x00800000 #define GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV 0x01000000 #define GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV 0x02000000 #define GL_FONT_UNDERLINE_POSITION_BIT_NV 0x04000000 #define GL_FONT_UNDERLINE_THICKNESS_BIT_NV 0x08000000 #define GL_FONT_HAS_KERNING_BIT_NV 0x10000000 #ifndef GLEE_H_DEFINED_glGenPathsNV #define GLEE_H_DEFINED_glGenPathsNV typedef GLuint (APIENTRYP GLEEPFNGLGENPATHSNVPROC) (GLsizei range); GLEE_EXTERN GLEEPFNGLGENPATHSNVPROC GLeeFuncPtr_glGenPathsNV; #define glGenPathsNV GLeeFuncPtr_glGenPathsNV #endif #ifndef GLEE_H_DEFINED_glDeletePathsNV #define GLEE_H_DEFINED_glDeletePathsNV typedef void (APIENTRYP GLEEPFNGLDELETEPATHSNVPROC) (GLuint path, GLsizei range); GLEE_EXTERN GLEEPFNGLDELETEPATHSNVPROC GLeeFuncPtr_glDeletePathsNV; #define glDeletePathsNV GLeeFuncPtr_glDeletePathsNV #endif #ifndef GLEE_H_DEFINED_glIsPathNV #define GLEE_H_DEFINED_glIsPathNV typedef GLboolean (APIENTRYP GLEEPFNGLISPATHNVPROC) (GLuint path); GLEE_EXTERN GLEEPFNGLISPATHNVPROC GLeeFuncPtr_glIsPathNV; #define glIsPathNV GLeeFuncPtr_glIsPathNV #endif #ifndef GLEE_H_DEFINED_glPathCommandsNV #define GLEE_H_DEFINED_glPathCommandsNV typedef void (APIENTRYP GLEEPFNGLPATHCOMMANDSNVPROC) (GLuint path, GLsizei numCommands, const GLubyte * commands, GLsizei numCoords, GLenum coordType, const GLvoid * coords); GLEE_EXTERN GLEEPFNGLPATHCOMMANDSNVPROC GLeeFuncPtr_glPathCommandsNV; #define glPathCommandsNV GLeeFuncPtr_glPathCommandsNV #endif #ifndef GLEE_H_DEFINED_glPathCoordsNV #define GLEE_H_DEFINED_glPathCoordsNV typedef void (APIENTRYP GLEEPFNGLPATHCOORDSNVPROC) (GLuint path, GLsizei numCoords, GLenum coordType, const GLvoid * coords); GLEE_EXTERN GLEEPFNGLPATHCOORDSNVPROC GLeeFuncPtr_glPathCoordsNV; #define glPathCoordsNV GLeeFuncPtr_glPathCoordsNV #endif #ifndef GLEE_H_DEFINED_glPathSubCommandsNV #define GLEE_H_DEFINED_glPathSubCommandsNV typedef void (APIENTRYP GLEEPFNGLPATHSUBCOMMANDSNVPROC) (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte * commands, GLsizei numCoords, GLenum coordType, const GLvoid * coords); GLEE_EXTERN GLEEPFNGLPATHSUBCOMMANDSNVPROC GLeeFuncPtr_glPathSubCommandsNV; #define glPathSubCommandsNV GLeeFuncPtr_glPathSubCommandsNV #endif #ifndef GLEE_H_DEFINED_glPathSubCoordsNV #define GLEE_H_DEFINED_glPathSubCoordsNV typedef void (APIENTRYP GLEEPFNGLPATHSUBCOORDSNVPROC) (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const GLvoid * coords); GLEE_EXTERN GLEEPFNGLPATHSUBCOORDSNVPROC GLeeFuncPtr_glPathSubCoordsNV; #define glPathSubCoordsNV GLeeFuncPtr_glPathSubCoordsNV #endif #ifndef GLEE_H_DEFINED_glPathStringNV #define GLEE_H_DEFINED_glPathStringNV typedef void (APIENTRYP GLEEPFNGLPATHSTRINGNVPROC) (GLuint path, GLenum format, GLsizei length, const GLvoid * pathString); GLEE_EXTERN GLEEPFNGLPATHSTRINGNVPROC GLeeFuncPtr_glPathStringNV; #define glPathStringNV GLeeFuncPtr_glPathStringNV #endif #ifndef GLEE_H_DEFINED_glPathGlyphsNV #define GLEE_H_DEFINED_glPathGlyphsNV typedef void (APIENTRYP GLEEPFNGLPATHGLYPHSNVPROC) (GLuint firstPathName, GLenum fontTarget, const GLvoid * fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const GLvoid * charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); GLEE_EXTERN GLEEPFNGLPATHGLYPHSNVPROC GLeeFuncPtr_glPathGlyphsNV; #define glPathGlyphsNV GLeeFuncPtr_glPathGlyphsNV #endif #ifndef GLEE_H_DEFINED_glPathGlyphRangeNV #define GLEE_H_DEFINED_glPathGlyphRangeNV typedef void (APIENTRYP GLEEPFNGLPATHGLYPHRANGENVPROC) (GLuint firstPathName, GLenum fontTarget, const GLvoid * fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); GLEE_EXTERN GLEEPFNGLPATHGLYPHRANGENVPROC GLeeFuncPtr_glPathGlyphRangeNV; #define glPathGlyphRangeNV GLeeFuncPtr_glPathGlyphRangeNV #endif #ifndef GLEE_H_DEFINED_glWeightPathsNV #define GLEE_H_DEFINED_glWeightPathsNV typedef void (APIENTRYP GLEEPFNGLWEIGHTPATHSNVPROC) (GLuint resultPath, GLsizei numPaths, const GLuint * paths, const GLfloat * weights); GLEE_EXTERN GLEEPFNGLWEIGHTPATHSNVPROC GLeeFuncPtr_glWeightPathsNV; #define glWeightPathsNV GLeeFuncPtr_glWeightPathsNV #endif #ifndef GLEE_H_DEFINED_glCopyPathNV #define GLEE_H_DEFINED_glCopyPathNV typedef void (APIENTRYP GLEEPFNGLCOPYPATHNVPROC) (GLuint resultPath, GLuint srcPath); GLEE_EXTERN GLEEPFNGLCOPYPATHNVPROC GLeeFuncPtr_glCopyPathNV; #define glCopyPathNV GLeeFuncPtr_glCopyPathNV #endif #ifndef GLEE_H_DEFINED_glInterpolatePathsNV #define GLEE_H_DEFINED_glInterpolatePathsNV typedef void (APIENTRYP GLEEPFNGLINTERPOLATEPATHSNVPROC) (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); GLEE_EXTERN GLEEPFNGLINTERPOLATEPATHSNVPROC GLeeFuncPtr_glInterpolatePathsNV; #define glInterpolatePathsNV GLeeFuncPtr_glInterpolatePathsNV #endif #ifndef GLEE_H_DEFINED_glTransformPathNV #define GLEE_H_DEFINED_glTransformPathNV typedef void (APIENTRYP GLEEPFNGLTRANSFORMPATHNVPROC) (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat * transformValues); GLEE_EXTERN GLEEPFNGLTRANSFORMPATHNVPROC GLeeFuncPtr_glTransformPathNV; #define glTransformPathNV GLeeFuncPtr_glTransformPathNV #endif #ifndef GLEE_H_DEFINED_glPathParameterivNV #define GLEE_H_DEFINED_glPathParameterivNV typedef void (APIENTRYP GLEEPFNGLPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, const GLint * value); GLEE_EXTERN GLEEPFNGLPATHPARAMETERIVNVPROC GLeeFuncPtr_glPathParameterivNV; #define glPathParameterivNV GLeeFuncPtr_glPathParameterivNV #endif #ifndef GLEE_H_DEFINED_glPathParameteriNV #define GLEE_H_DEFINED_glPathParameteriNV typedef void (APIENTRYP GLEEPFNGLPATHPARAMETERINVPROC) (GLuint path, GLenum pname, GLint value); GLEE_EXTERN GLEEPFNGLPATHPARAMETERINVPROC GLeeFuncPtr_glPathParameteriNV; #define glPathParameteriNV GLeeFuncPtr_glPathParameteriNV #endif #ifndef GLEE_H_DEFINED_glPathParameterfvNV #define GLEE_H_DEFINED_glPathParameterfvNV typedef void (APIENTRYP GLEEPFNGLPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPATHPARAMETERFVNVPROC GLeeFuncPtr_glPathParameterfvNV; #define glPathParameterfvNV GLeeFuncPtr_glPathParameterfvNV #endif #ifndef GLEE_H_DEFINED_glPathParameterfNV #define GLEE_H_DEFINED_glPathParameterfNV typedef void (APIENTRYP GLEEPFNGLPATHPARAMETERFNVPROC) (GLuint path, GLenum pname, GLfloat value); GLEE_EXTERN GLEEPFNGLPATHPARAMETERFNVPROC GLeeFuncPtr_glPathParameterfNV; #define glPathParameterfNV GLeeFuncPtr_glPathParameterfNV #endif #ifndef GLEE_H_DEFINED_glPathDashArrayNV #define GLEE_H_DEFINED_glPathDashArrayNV typedef void (APIENTRYP GLEEPFNGLPATHDASHARRAYNVPROC) (GLuint path, GLsizei dashCount, const GLfloat * dashArray); GLEE_EXTERN GLEEPFNGLPATHDASHARRAYNVPROC GLeeFuncPtr_glPathDashArrayNV; #define glPathDashArrayNV GLeeFuncPtr_glPathDashArrayNV #endif #ifndef GLEE_H_DEFINED_glPathStencilFuncNV #define GLEE_H_DEFINED_glPathStencilFuncNV typedef void (APIENTRYP GLEEPFNGLPATHSTENCILFUNCNVPROC) (GLenum func, GLint ref, GLuint mask); GLEE_EXTERN GLEEPFNGLPATHSTENCILFUNCNVPROC GLeeFuncPtr_glPathStencilFuncNV; #define glPathStencilFuncNV GLeeFuncPtr_glPathStencilFuncNV #endif #ifndef GLEE_H_DEFINED_glPathStencilDepthOffsetNV #define GLEE_H_DEFINED_glPathStencilDepthOffsetNV typedef void (APIENTRYP GLEEPFNGLPATHSTENCILDEPTHOFFSETNVPROC) (GLfloat factor, GLfloat units); GLEE_EXTERN GLEEPFNGLPATHSTENCILDEPTHOFFSETNVPROC GLeeFuncPtr_glPathStencilDepthOffsetNV; #define glPathStencilDepthOffsetNV GLeeFuncPtr_glPathStencilDepthOffsetNV #endif #ifndef GLEE_H_DEFINED_glStencilFillPathNV #define GLEE_H_DEFINED_glStencilFillPathNV typedef void (APIENTRYP GLEEPFNGLSTENCILFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask); GLEE_EXTERN GLEEPFNGLSTENCILFILLPATHNVPROC GLeeFuncPtr_glStencilFillPathNV; #define glStencilFillPathNV GLeeFuncPtr_glStencilFillPathNV #endif #ifndef GLEE_H_DEFINED_glStencilStrokePathNV #define GLEE_H_DEFINED_glStencilStrokePathNV typedef void (APIENTRYP GLEEPFNGLSTENCILSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask); GLEE_EXTERN GLEEPFNGLSTENCILSTROKEPATHNVPROC GLeeFuncPtr_glStencilStrokePathNV; #define glStencilStrokePathNV GLeeFuncPtr_glStencilStrokePathNV #endif #ifndef GLEE_H_DEFINED_glStencilFillPathInstancedNV #define GLEE_H_DEFINED_glStencilFillPathInstancedNV typedef void (APIENTRYP GLEEPFNGLSTENCILFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const GLvoid * paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat * transformValues); GLEE_EXTERN GLEEPFNGLSTENCILFILLPATHINSTANCEDNVPROC GLeeFuncPtr_glStencilFillPathInstancedNV; #define glStencilFillPathInstancedNV GLeeFuncPtr_glStencilFillPathInstancedNV #endif #ifndef GLEE_H_DEFINED_glStencilStrokePathInstancedNV #define GLEE_H_DEFINED_glStencilStrokePathInstancedNV typedef void (APIENTRYP GLEEPFNGLSTENCILSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const GLvoid * paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat * transformValues); GLEE_EXTERN GLEEPFNGLSTENCILSTROKEPATHINSTANCEDNVPROC GLeeFuncPtr_glStencilStrokePathInstancedNV; #define glStencilStrokePathInstancedNV GLeeFuncPtr_glStencilStrokePathInstancedNV #endif #ifndef GLEE_H_DEFINED_glPathCoverDepthFuncNV #define GLEE_H_DEFINED_glPathCoverDepthFuncNV typedef void (APIENTRYP GLEEPFNGLPATHCOVERDEPTHFUNCNVPROC) (GLenum func); GLEE_EXTERN GLEEPFNGLPATHCOVERDEPTHFUNCNVPROC GLeeFuncPtr_glPathCoverDepthFuncNV; #define glPathCoverDepthFuncNV GLeeFuncPtr_glPathCoverDepthFuncNV #endif #ifndef GLEE_H_DEFINED_glPathColorGenNV #define GLEE_H_DEFINED_glPathColorGenNV typedef void (APIENTRYP GLEEPFNGLPATHCOLORGENNVPROC) (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat * coeffs); GLEE_EXTERN GLEEPFNGLPATHCOLORGENNVPROC GLeeFuncPtr_glPathColorGenNV; #define glPathColorGenNV GLeeFuncPtr_glPathColorGenNV #endif #ifndef GLEE_H_DEFINED_glPathTexGenNV #define GLEE_H_DEFINED_glPathTexGenNV typedef void (APIENTRYP GLEEPFNGLPATHTEXGENNVPROC) (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat * coeffs); GLEE_EXTERN GLEEPFNGLPATHTEXGENNVPROC GLeeFuncPtr_glPathTexGenNV; #define glPathTexGenNV GLeeFuncPtr_glPathTexGenNV #endif #ifndef GLEE_H_DEFINED_glPathFogGenNV #define GLEE_H_DEFINED_glPathFogGenNV typedef void (APIENTRYP GLEEPFNGLPATHFOGGENNVPROC) (GLenum genMode); GLEE_EXTERN GLEEPFNGLPATHFOGGENNVPROC GLeeFuncPtr_glPathFogGenNV; #define glPathFogGenNV GLeeFuncPtr_glPathFogGenNV #endif #ifndef GLEE_H_DEFINED_glCoverFillPathNV #define GLEE_H_DEFINED_glCoverFillPathNV typedef void (APIENTRYP GLEEPFNGLCOVERFILLPATHNVPROC) (GLuint path, GLenum coverMode); GLEE_EXTERN GLEEPFNGLCOVERFILLPATHNVPROC GLeeFuncPtr_glCoverFillPathNV; #define glCoverFillPathNV GLeeFuncPtr_glCoverFillPathNV #endif #ifndef GLEE_H_DEFINED_glCoverStrokePathNV #define GLEE_H_DEFINED_glCoverStrokePathNV typedef void (APIENTRYP GLEEPFNGLCOVERSTROKEPATHNVPROC) (GLuint path, GLenum coverMode); GLEE_EXTERN GLEEPFNGLCOVERSTROKEPATHNVPROC GLeeFuncPtr_glCoverStrokePathNV; #define glCoverStrokePathNV GLeeFuncPtr_glCoverStrokePathNV #endif #ifndef GLEE_H_DEFINED_glCoverFillPathInstancedNV #define GLEE_H_DEFINED_glCoverFillPathInstancedNV typedef void (APIENTRYP GLEEPFNGLCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const GLvoid * paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat * transformValues); GLEE_EXTERN GLEEPFNGLCOVERFILLPATHINSTANCEDNVPROC GLeeFuncPtr_glCoverFillPathInstancedNV; #define glCoverFillPathInstancedNV GLeeFuncPtr_glCoverFillPathInstancedNV #endif #ifndef GLEE_H_DEFINED_glCoverStrokePathInstancedNV #define GLEE_H_DEFINED_glCoverStrokePathInstancedNV typedef void (APIENTRYP GLEEPFNGLCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const GLvoid * paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat * transformValues); GLEE_EXTERN GLEEPFNGLCOVERSTROKEPATHINSTANCEDNVPROC GLeeFuncPtr_glCoverStrokePathInstancedNV; #define glCoverStrokePathInstancedNV GLeeFuncPtr_glCoverStrokePathInstancedNV #endif #ifndef GLEE_H_DEFINED_glGetPathParameterivNV #define GLEE_H_DEFINED_glGetPathParameterivNV typedef void (APIENTRYP GLEEPFNGLGETPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, GLint * value); GLEE_EXTERN GLEEPFNGLGETPATHPARAMETERIVNVPROC GLeeFuncPtr_glGetPathParameterivNV; #define glGetPathParameterivNV GLeeFuncPtr_glGetPathParameterivNV #endif #ifndef GLEE_H_DEFINED_glGetPathParameterfvNV #define GLEE_H_DEFINED_glGetPathParameterfvNV typedef void (APIENTRYP GLEEPFNGLGETPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, GLfloat * value); GLEE_EXTERN GLEEPFNGLGETPATHPARAMETERFVNVPROC GLeeFuncPtr_glGetPathParameterfvNV; #define glGetPathParameterfvNV GLeeFuncPtr_glGetPathParameterfvNV #endif #ifndef GLEE_H_DEFINED_glGetPathCommandsNV #define GLEE_H_DEFINED_glGetPathCommandsNV typedef void (APIENTRYP GLEEPFNGLGETPATHCOMMANDSNVPROC) (GLuint path, GLubyte * commands); GLEE_EXTERN GLEEPFNGLGETPATHCOMMANDSNVPROC GLeeFuncPtr_glGetPathCommandsNV; #define glGetPathCommandsNV GLeeFuncPtr_glGetPathCommandsNV #endif #ifndef GLEE_H_DEFINED_glGetPathCoordsNV #define GLEE_H_DEFINED_glGetPathCoordsNV typedef void (APIENTRYP GLEEPFNGLGETPATHCOORDSNVPROC) (GLuint path, GLfloat * coords); GLEE_EXTERN GLEEPFNGLGETPATHCOORDSNVPROC GLeeFuncPtr_glGetPathCoordsNV; #define glGetPathCoordsNV GLeeFuncPtr_glGetPathCoordsNV #endif #ifndef GLEE_H_DEFINED_glGetPathDashArrayNV #define GLEE_H_DEFINED_glGetPathDashArrayNV typedef void (APIENTRYP GLEEPFNGLGETPATHDASHARRAYNVPROC) (GLuint path, GLfloat * dashArray); GLEE_EXTERN GLEEPFNGLGETPATHDASHARRAYNVPROC GLeeFuncPtr_glGetPathDashArrayNV; #define glGetPathDashArrayNV GLeeFuncPtr_glGetPathDashArrayNV #endif #ifndef GLEE_H_DEFINED_glGetPathMetricsNV #define GLEE_H_DEFINED_glGetPathMetricsNV typedef void (APIENTRYP GLEEPFNGLGETPATHMETRICSNVPROC) (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const GLvoid * paths, GLuint pathBase, GLsizei stride, GLfloat * metrics); GLEE_EXTERN GLEEPFNGLGETPATHMETRICSNVPROC GLeeFuncPtr_glGetPathMetricsNV; #define glGetPathMetricsNV GLeeFuncPtr_glGetPathMetricsNV #endif #ifndef GLEE_H_DEFINED_glGetPathMetricRangeNV #define GLEE_H_DEFINED_glGetPathMetricRangeNV typedef void (APIENTRYP GLEEPFNGLGETPATHMETRICRANGENVPROC) (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat * metrics); GLEE_EXTERN GLEEPFNGLGETPATHMETRICRANGENVPROC GLeeFuncPtr_glGetPathMetricRangeNV; #define glGetPathMetricRangeNV GLeeFuncPtr_glGetPathMetricRangeNV #endif #ifndef GLEE_H_DEFINED_glGetPathSpacingNV #define GLEE_H_DEFINED_glGetPathSpacingNV typedef void (APIENTRYP GLEEPFNGLGETPATHSPACINGNVPROC) (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const GLvoid * paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat * returnedSpacing); GLEE_EXTERN GLEEPFNGLGETPATHSPACINGNVPROC GLeeFuncPtr_glGetPathSpacingNV; #define glGetPathSpacingNV GLeeFuncPtr_glGetPathSpacingNV #endif #ifndef GLEE_H_DEFINED_glGetPathColorGenivNV #define GLEE_H_DEFINED_glGetPathColorGenivNV typedef void (APIENTRYP GLEEPFNGLGETPATHCOLORGENIVNVPROC) (GLenum color, GLenum pname, GLint * value); GLEE_EXTERN GLEEPFNGLGETPATHCOLORGENIVNVPROC GLeeFuncPtr_glGetPathColorGenivNV; #define glGetPathColorGenivNV GLeeFuncPtr_glGetPathColorGenivNV #endif #ifndef GLEE_H_DEFINED_glGetPathColorGenfvNV #define GLEE_H_DEFINED_glGetPathColorGenfvNV typedef void (APIENTRYP GLEEPFNGLGETPATHCOLORGENFVNVPROC) (GLenum color, GLenum pname, GLfloat * value); GLEE_EXTERN GLEEPFNGLGETPATHCOLORGENFVNVPROC GLeeFuncPtr_glGetPathColorGenfvNV; #define glGetPathColorGenfvNV GLeeFuncPtr_glGetPathColorGenfvNV #endif #ifndef GLEE_H_DEFINED_glGetPathTexGenivNV #define GLEE_H_DEFINED_glGetPathTexGenivNV typedef void (APIENTRYP GLEEPFNGLGETPATHTEXGENIVNVPROC) (GLenum texCoordSet, GLenum pname, GLint * value); GLEE_EXTERN GLEEPFNGLGETPATHTEXGENIVNVPROC GLeeFuncPtr_glGetPathTexGenivNV; #define glGetPathTexGenivNV GLeeFuncPtr_glGetPathTexGenivNV #endif #ifndef GLEE_H_DEFINED_glGetPathTexGenfvNV #define GLEE_H_DEFINED_glGetPathTexGenfvNV typedef void (APIENTRYP GLEEPFNGLGETPATHTEXGENFVNVPROC) (GLenum texCoordSet, GLenum pname, GLfloat * value); GLEE_EXTERN GLEEPFNGLGETPATHTEXGENFVNVPROC GLeeFuncPtr_glGetPathTexGenfvNV; #define glGetPathTexGenfvNV GLeeFuncPtr_glGetPathTexGenfvNV #endif #ifndef GLEE_H_DEFINED_glIsPointInFillPathNV #define GLEE_H_DEFINED_glIsPointInFillPathNV typedef GLboolean (APIENTRYP GLEEPFNGLISPOINTINFILLPATHNVPROC) (GLuint path, GLuint mask, GLfloat x, GLfloat y); GLEE_EXTERN GLEEPFNGLISPOINTINFILLPATHNVPROC GLeeFuncPtr_glIsPointInFillPathNV; #define glIsPointInFillPathNV GLeeFuncPtr_glIsPointInFillPathNV #endif #ifndef GLEE_H_DEFINED_glIsPointInStrokePathNV #define GLEE_H_DEFINED_glIsPointInStrokePathNV typedef GLboolean (APIENTRYP GLEEPFNGLISPOINTINSTROKEPATHNVPROC) (GLuint path, GLfloat x, GLfloat y); GLEE_EXTERN GLEEPFNGLISPOINTINSTROKEPATHNVPROC GLeeFuncPtr_glIsPointInStrokePathNV; #define glIsPointInStrokePathNV GLeeFuncPtr_glIsPointInStrokePathNV #endif #ifndef GLEE_H_DEFINED_glGetPathLengthNV #define GLEE_H_DEFINED_glGetPathLengthNV typedef GLfloat (APIENTRYP GLEEPFNGLGETPATHLENGTHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments); GLEE_EXTERN GLEEPFNGLGETPATHLENGTHNVPROC GLeeFuncPtr_glGetPathLengthNV; #define glGetPathLengthNV GLeeFuncPtr_glGetPathLengthNV #endif #ifndef GLEE_H_DEFINED_glPointAlongPathNV #define GLEE_H_DEFINED_glPointAlongPathNV typedef GLboolean (APIENTRYP GLEEPFNGLPOINTALONGPATHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat * x, GLfloat * y, GLfloat * tangentX, GLfloat * tangentY); GLEE_EXTERN GLEEPFNGLPOINTALONGPATHNVPROC GLeeFuncPtr_glPointAlongPathNV; #define glPointAlongPathNV GLeeFuncPtr_glPointAlongPathNV #endif #endif /* GL_AMD_pinned_memory */ #ifndef GL_AMD_pinned_memory #define GL_AMD_pinned_memory 1 #define __GLEE_GL_AMD_pinned_memory 1 /* Constants */ #define GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD 0x9160 #endif /* GL_AMD_stencil_operation_extended */ #ifndef GL_AMD_stencil_operation_extended #define GL_AMD_stencil_operation_extended 1 #define __GLEE_GL_AMD_stencil_operation_extended 1 /* Constants */ #define GL_SET_AMD 0x874A #define GL_REPLACE_VALUE_AMD 0x874B #define GL_STENCIL_OP_VALUE_AMD 0x874C #define GL_STENCIL_BACK_OP_VALUE_AMD 0x874D #ifndef GLEE_H_DEFINED_glStencilOpValueAMD #define GLEE_H_DEFINED_glStencilOpValueAMD typedef void (APIENTRYP GLEEPFNGLSTENCILOPVALUEAMDPROC) (GLenum face, GLuint value); GLEE_EXTERN GLEEPFNGLSTENCILOPVALUEAMDPROC GLeeFuncPtr_glStencilOpValueAMD; #define glStencilOpValueAMD GLeeFuncPtr_glStencilOpValueAMD #endif #endif /* GL_AMD_vertex_shader_viewport_index */ #ifndef GL_AMD_vertex_shader_viewport_index #define GL_AMD_vertex_shader_viewport_index 1 #define __GLEE_GL_AMD_vertex_shader_viewport_index 1 /* Constants */ #endif /* GL_AMD_vertex_shader_layer */ #ifndef GL_AMD_vertex_shader_layer #define GL_AMD_vertex_shader_layer 1 #define __GLEE_GL_AMD_vertex_shader_layer 1 /* Constants */ #endif /* GL_NV_bindless_texture */ #ifndef GL_NV_bindless_texture #define GL_NV_bindless_texture 1 #define __GLEE_GL_NV_bindless_texture 1 /* Constants */ #ifndef GLEE_H_DEFINED_glGetTextureHandleNV #define GLEE_H_DEFINED_glGetTextureHandleNV typedef GLuint64 (APIENTRYP GLEEPFNGLGETTEXTUREHANDLENVPROC) (GLuint texture); GLEE_EXTERN GLEEPFNGLGETTEXTUREHANDLENVPROC GLeeFuncPtr_glGetTextureHandleNV; #define glGetTextureHandleNV GLeeFuncPtr_glGetTextureHandleNV #endif #ifndef GLEE_H_DEFINED_glGetTextureSamplerHandleNV #define GLEE_H_DEFINED_glGetTextureSamplerHandleNV typedef GLuint64 (APIENTRYP GLEEPFNGLGETTEXTURESAMPLERHANDLENVPROC) (GLuint texture, GLuint sampler); GLEE_EXTERN GLEEPFNGLGETTEXTURESAMPLERHANDLENVPROC GLeeFuncPtr_glGetTextureSamplerHandleNV; #define glGetTextureSamplerHandleNV GLeeFuncPtr_glGetTextureSamplerHandleNV #endif #ifndef GLEE_H_DEFINED_glMakeTextureHandleResidentNV #define GLEE_H_DEFINED_glMakeTextureHandleResidentNV typedef void (APIENTRYP GLEEPFNGLMAKETEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); GLEE_EXTERN GLEEPFNGLMAKETEXTUREHANDLERESIDENTNVPROC GLeeFuncPtr_glMakeTextureHandleResidentNV; #define glMakeTextureHandleResidentNV GLeeFuncPtr_glMakeTextureHandleResidentNV #endif #ifndef GLEE_H_DEFINED_glMakeTextureHandleNonResidentNV #define GLEE_H_DEFINED_glMakeTextureHandleNonResidentNV typedef void (APIENTRYP GLEEPFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC) (GLuint64 handle); GLEE_EXTERN GLEEPFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC GLeeFuncPtr_glMakeTextureHandleNonResidentNV; #define glMakeTextureHandleNonResidentNV GLeeFuncPtr_glMakeTextureHandleNonResidentNV #endif #ifndef GLEE_H_DEFINED_glGetImageHandleNV #define GLEE_H_DEFINED_glGetImageHandleNV typedef GLuint64 (APIENTRYP GLEEPFNGLGETIMAGEHANDLENVPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); GLEE_EXTERN GLEEPFNGLGETIMAGEHANDLENVPROC GLeeFuncPtr_glGetImageHandleNV; #define glGetImageHandleNV GLeeFuncPtr_glGetImageHandleNV #endif #ifndef GLEE_H_DEFINED_glMakeImageHandleResidentNV #define GLEE_H_DEFINED_glMakeImageHandleResidentNV typedef void (APIENTRYP GLEEPFNGLMAKEIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle, GLenum access); GLEE_EXTERN GLEEPFNGLMAKEIMAGEHANDLERESIDENTNVPROC GLeeFuncPtr_glMakeImageHandleResidentNV; #define glMakeImageHandleResidentNV GLeeFuncPtr_glMakeImageHandleResidentNV #endif #ifndef GLEE_H_DEFINED_glMakeImageHandleNonResidentNV #define GLEE_H_DEFINED_glMakeImageHandleNonResidentNV typedef void (APIENTRYP GLEEPFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC) (GLuint64 handle); GLEE_EXTERN GLEEPFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC GLeeFuncPtr_glMakeImageHandleNonResidentNV; #define glMakeImageHandleNonResidentNV GLeeFuncPtr_glMakeImageHandleNonResidentNV #endif #ifndef GLEE_H_DEFINED_glUniformHandleui64NV #define GLEE_H_DEFINED_glUniformHandleui64NV typedef void (APIENTRYP GLEEPFNGLUNIFORMHANDLEUI64NVPROC) (GLint location, GLuint64 value); GLEE_EXTERN GLEEPFNGLUNIFORMHANDLEUI64NVPROC GLeeFuncPtr_glUniformHandleui64NV; #define glUniformHandleui64NV GLeeFuncPtr_glUniformHandleui64NV #endif #ifndef GLEE_H_DEFINED_glUniformHandleui64vNV #define GLEE_H_DEFINED_glUniformHandleui64vNV typedef void (APIENTRYP GLEEPFNGLUNIFORMHANDLEUI64VNVPROC) (GLint location, GLsizei count, const GLuint64 * value); GLEE_EXTERN GLEEPFNGLUNIFORMHANDLEUI64VNVPROC GLeeFuncPtr_glUniformHandleui64vNV; #define glUniformHandleui64vNV GLeeFuncPtr_glUniformHandleui64vNV #endif #ifndef GLEE_H_DEFINED_glProgramUniformHandleui64NV #define GLEE_H_DEFINED_glProgramUniformHandleui64NV typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMHANDLEUI64NVPROC) (GLuint program, GLint location, GLuint64 value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMHANDLEUI64NVPROC GLeeFuncPtr_glProgramUniformHandleui64NV; #define glProgramUniformHandleui64NV GLeeFuncPtr_glProgramUniformHandleui64NV #endif #ifndef GLEE_H_DEFINED_glProgramUniformHandleui64vNV #define GLEE_H_DEFINED_glProgramUniformHandleui64vNV typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 * values); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC GLeeFuncPtr_glProgramUniformHandleui64vNV; #define glProgramUniformHandleui64vNV GLeeFuncPtr_glProgramUniformHandleui64vNV #endif #ifndef GLEE_H_DEFINED_glIsTextureHandleResidentNV #define GLEE_H_DEFINED_glIsTextureHandleResidentNV typedef GLboolean (APIENTRYP GLEEPFNGLISTEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); GLEE_EXTERN GLEEPFNGLISTEXTUREHANDLERESIDENTNVPROC GLeeFuncPtr_glIsTextureHandleResidentNV; #define glIsTextureHandleResidentNV GLeeFuncPtr_glIsTextureHandleResidentNV #endif #ifndef GLEE_H_DEFINED_glIsImageHandleResidentNV #define GLEE_H_DEFINED_glIsImageHandleResidentNV typedef GLboolean (APIENTRYP GLEEPFNGLISIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle); GLEE_EXTERN GLEEPFNGLISIMAGEHANDLERESIDENTNVPROC GLeeFuncPtr_glIsImageHandleResidentNV; #define glIsImageHandleResidentNV GLeeFuncPtr_glIsImageHandleResidentNV #endif #endif /* GL_NV_shader_atomic_float */ #ifndef GL_NV_shader_atomic_float #define GL_NV_shader_atomic_float 1 #define __GLEE_GL_NV_shader_atomic_float 1 /* Constants */ #endif /* GL_AMD_query_buffer_object */ #ifndef GL_AMD_query_buffer_object #define GL_AMD_query_buffer_object 1 #define __GLEE_GL_AMD_query_buffer_object 1 /* Constants */ #define GL_QUERY_BUFFER_AMD 0x9192 #define GL_QUERY_BUFFER_BINDING_AMD 0x9193 #define GL_QUERY_RESULT_NO_WAIT_AMD 0x9194 #endif /* GL_NV_compute_program5 */ #ifndef GL_NV_compute_program5 #define GL_NV_compute_program5 1 #define __GLEE_GL_NV_compute_program5 1 /* Constants */ #define GL_COMPUTE_PROGRAM_NV 0x90FB #define GL_COMPUTE_PROGRAM_PARAMETER_BUFFER_NV 0x90FC #endif /* GL_NV_shader_storage_buffer_object */ #ifndef GL_NV_shader_storage_buffer_object #define GL_NV_shader_storage_buffer_object 1 #define __GLEE_GL_NV_shader_storage_buffer_object 1 /* Constants */ #endif /* GL_NV_shader_atomic_counters */ #ifndef GL_NV_shader_atomic_counters #define GL_NV_shader_atomic_counters 1 #define __GLEE_GL_NV_shader_atomic_counters 1 /* Constants */ #endif /* GL_NV_deep_texture3D */ #ifndef GL_NV_deep_texture3D #define GL_NV_deep_texture3D 1 #define __GLEE_GL_NV_deep_texture3D 1 /* Constants */ #define GL_MAX_DEEP_3D_TEXTURE_WIDTH_HEIGHT_NV 0x90D0 #define GL_MAX_DEEP_3D_TEXTURE_DEPTH_NV 0x90D1 #endif /* GL_NVX_conditional_render */ #ifndef GL_NVX_conditional_render #define GL_NVX_conditional_render 1 #define __GLEE_GL_NVX_conditional_render 1 /* Constants */ #ifndef GLEE_H_DEFINED_glBeginConditionalRenderNVX #define GLEE_H_DEFINED_glBeginConditionalRenderNVX typedef void (APIENTRYP GLEEPFNGLBEGINCONDITIONALRENDERNVXPROC) (GLuint id); GLEE_EXTERN GLEEPFNGLBEGINCONDITIONALRENDERNVXPROC GLeeFuncPtr_glBeginConditionalRenderNVX; #define glBeginConditionalRenderNVX GLeeFuncPtr_glBeginConditionalRenderNVX #endif #ifndef GLEE_H_DEFINED_glEndConditionalRenderNVX #define GLEE_H_DEFINED_glEndConditionalRenderNVX typedef void (APIENTRYP GLEEPFNGLENDCONDITIONALRENDERNVXPROC) (); GLEE_EXTERN GLEEPFNGLENDCONDITIONALRENDERNVXPROC GLeeFuncPtr_glEndConditionalRenderNVX; #define glEndConditionalRenderNVX GLeeFuncPtr_glEndConditionalRenderNVX #endif #endif /* GL_AMD_sparse_texture */ #ifndef GL_AMD_sparse_texture #define GL_AMD_sparse_texture 1 #define __GLEE_GL_AMD_sparse_texture 1 /* Constants */ #define GL_VIRTUAL_PAGE_SIZE_X_AMD 0x9195 #define GL_VIRTUAL_PAGE_SIZE_Y_AMD 0x9196 #define GL_VIRTUAL_PAGE_SIZE_Z_AMD 0x9197 #define GL_MAX_SPARSE_TEXTURE_SIZE_AMD 0x9198 #define GL_MAX_SPARSE_3D_TEXTURE_SIZE_AMD 0x9199 #define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS 0x919A #define GL_MIN_SPARSE_LEVEL_AMD 0x919B #define GL_MIN_LOD_WARNING_AMD 0x919C #define GL_TEXTURE_STORAGE_SPARSE_BIT_AMD 0x00000001 #ifndef GLEE_H_DEFINED_glTexStorageSparseAMD #define GLEE_H_DEFINED_glTexStorageSparseAMD typedef void (APIENTRYP GLEEPFNGLTEXSTORAGESPARSEAMDPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); GLEE_EXTERN GLEEPFNGLTEXSTORAGESPARSEAMDPROC GLeeFuncPtr_glTexStorageSparseAMD; #define glTexStorageSparseAMD GLeeFuncPtr_glTexStorageSparseAMD #endif #ifndef GLEE_H_DEFINED_glTextureStorageSparseAMD #define GLEE_H_DEFINED_glTextureStorageSparseAMD typedef void (APIENTRYP GLEEPFNGLTEXTURESTORAGESPARSEAMDPROC) (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); GLEE_EXTERN GLEEPFNGLTEXTURESTORAGESPARSEAMDPROC GLeeFuncPtr_glTextureStorageSparseAMD; #define glTextureStorageSparseAMD GLeeFuncPtr_glTextureStorageSparseAMD #endif #endif /* GL_AMD_shader_trinary_minmax */ #ifndef GL_AMD_shader_trinary_minmax #define GL_AMD_shader_trinary_minmax 1 #define __GLEE_GL_AMD_shader_trinary_minmax 1 /* Constants */ #endif /* GL_INTEL_map_texture */ #ifndef GL_INTEL_map_texture #define GL_INTEL_map_texture 1 #define __GLEE_GL_INTEL_map_texture 1 /* Constants */ #define GL_TEXTURE_MEMORY_LAYOUT_INTEL 0x83FF #define GL_LAYOUT_DEFAULT_INTEL #define GL_LAYOUT_LINEAR_INTEL #define GL_LAYOUT_LINEAR_CPU_CACHED_INTEL #ifndef GLEE_H_DEFINED_glSyncTextureINTEL #define GLEE_H_DEFINED_glSyncTextureINTEL typedef void (APIENTRYP GLEEPFNGLSYNCTEXTUREINTELPROC) (GLuint texture); GLEE_EXTERN GLEEPFNGLSYNCTEXTUREINTELPROC GLeeFuncPtr_glSyncTextureINTEL; #define glSyncTextureINTEL GLeeFuncPtr_glSyncTextureINTEL #endif #ifndef GLEE_H_DEFINED_glUnmapTexture2DINTEL #define GLEE_H_DEFINED_glUnmapTexture2DINTEL typedef void (APIENTRYP GLEEPFNGLUNMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level); GLEE_EXTERN GLEEPFNGLUNMAPTEXTURE2DINTELPROC GLeeFuncPtr_glUnmapTexture2DINTEL; #define glUnmapTexture2DINTEL GLeeFuncPtr_glUnmapTexture2DINTEL #endif #ifndef GLEE_H_DEFINED_glMapTexture2DINTEL #define GLEE_H_DEFINED_glMapTexture2DINTEL typedef GLvoid* (APIENTRYP GLEEPFNGLMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level, GLbitfield access, const GLint * stride, const GLenum * layout); GLEE_EXTERN GLEEPFNGLMAPTEXTURE2DINTELPROC GLeeFuncPtr_glMapTexture2DINTEL; #define glMapTexture2DINTEL GLeeFuncPtr_glMapTexture2DINTEL #endif #endif /* GL_NV_draw_texture */ #ifndef GL_NV_draw_texture #define GL_NV_draw_texture 1 #define __GLEE_GL_NV_draw_texture 1 /* Constants */ #ifndef GLEE_H_DEFINED_glDrawTextureNV #define GLEE_H_DEFINED_glDrawTextureNV typedef void (APIENTRYP GLEEPFNGLDRAWTEXTURENVPROC) (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); GLEE_EXTERN GLEEPFNGLDRAWTEXTURENVPROC GLeeFuncPtr_glDrawTextureNV; #define glDrawTextureNV GLeeFuncPtr_glDrawTextureNV #endif #endif /* GL_SGIX_texture_select */ #ifndef GL_SGIX_texture_select #define GL_SGIX_texture_select 1 #define __GLEE_GL_SGIX_texture_select 1 /* Constants */ #endif /* GL_INGR_blend_func_separate */ #ifndef GL_INGR_blend_func_separate #define GL_INGR_blend_func_separate 1 #define __GLEE_GL_INGR_blend_func_separate 1 /* Constants */ #ifndef GLEE_H_DEFINED_glBlendFuncSeparateINGR #define GLEE_H_DEFINED_glBlendFuncSeparateINGR typedef void (APIENTRYP GLEEPFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); GLEE_EXTERN GLEEPFNGLBLENDFUNCSEPARATEINGRPROC GLeeFuncPtr_glBlendFuncSeparateINGR; #define glBlendFuncSeparateINGR GLeeFuncPtr_glBlendFuncSeparateINGR #endif #endif /* GL_SGIX_depth_pass_instrument */ #ifndef GL_SGIX_depth_pass_instrument #define GL_SGIX_depth_pass_instrument 1 #define __GLEE_GL_SGIX_depth_pass_instrument 1 /* Constants */ #endif /* GL_SGIX_igloo_interface */ #ifndef GL_SGIX_igloo_interface #define GL_SGIX_igloo_interface 1 #define __GLEE_GL_SGIX_igloo_interface 1 /* Constants */ #ifndef GLEE_H_DEFINED_glIglooInterfaceSGIX #define GLEE_H_DEFINED_glIglooInterfaceSGIX typedef void (APIENTRYP GLEEPFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const GLvoid * params); GLEE_EXTERN GLEEPFNGLIGLOOINTERFACESGIXPROC GLeeFuncPtr_glIglooInterfaceSGIX; #define glIglooInterfaceSGIX GLeeFuncPtr_glIglooInterfaceSGIX #endif #endif /* WGL */ #ifdef _WIN32 /* Extension querying variables */ GLEE_EXTERN GLboolean _GLEE_WGL_ARB_buffer_region; GLEE_EXTERN GLboolean _GLEE_WGL_ARB_multisample; GLEE_EXTERN GLboolean _GLEE_WGL_ARB_extensions_string; GLEE_EXTERN GLboolean _GLEE_WGL_ARB_pixel_format; GLEE_EXTERN GLboolean _GLEE_WGL_ARB_make_current_read; GLEE_EXTERN GLboolean _GLEE_WGL_ARB_pbuffer; GLEE_EXTERN GLboolean _GLEE_WGL_ARB_render_texture; GLEE_EXTERN GLboolean _GLEE_WGL_ARB_pixel_format_float; GLEE_EXTERN GLboolean _GLEE_WGL_ARB_framebuffer_sRGB; GLEE_EXTERN GLboolean _GLEE_WGL_ARB_create_context; GLEE_EXTERN GLboolean _GLEE_WGL_ARB_create_context_profile; GLEE_EXTERN GLboolean _GLEE_WGL_ARB_create_context_robustness; GLEE_EXTERN GLboolean _GLEE_WGL_EXT_make_current_read; GLEE_EXTERN GLboolean _GLEE_WGL_EXT_pixel_format; GLEE_EXTERN GLboolean _GLEE_WGL_EXT_pbuffer; GLEE_EXTERN GLboolean _GLEE_WGL_EXT_depth_float; GLEE_EXTERN GLboolean _GLEE_WGL_3DFX_multisample; GLEE_EXTERN GLboolean _GLEE_WGL_EXT_multisample; GLEE_EXTERN GLboolean _GLEE_WGL_I3D_digital_video_control; GLEE_EXTERN GLboolean _GLEE_WGL_I3D_gamma; GLEE_EXTERN GLboolean _GLEE_WGL_I3D_genlock; GLEE_EXTERN GLboolean _GLEE_WGL_I3D_image_buffer; GLEE_EXTERN GLboolean _GLEE_WGL_I3D_swap_frame_lock; GLEE_EXTERN GLboolean _GLEE_WGL_NV_render_depth_texture; GLEE_EXTERN GLboolean _GLEE_WGL_NV_render_texture_rectangle; GLEE_EXTERN GLboolean _GLEE_WGL_ATI_pixel_format_float; GLEE_EXTERN GLboolean _GLEE_WGL_NV_float_buffer; GLEE_EXTERN GLboolean _GLEE_WGL_3DL_stereo_control; GLEE_EXTERN GLboolean _GLEE_WGL_EXT_pixel_format_packed_float; GLEE_EXTERN GLboolean _GLEE_WGL_EXT_framebuffer_sRGB; GLEE_EXTERN GLboolean _GLEE_WGL_NV_present_video; GLEE_EXTERN GLboolean _GLEE_WGL_NV_swap_group; GLEE_EXTERN GLboolean _GLEE_WGL_NV_gpu_affinity; GLEE_EXTERN GLboolean _GLEE_WGL_AMD_gpu_association; GLEE_EXTERN GLboolean _GLEE_WGL_NV_copy_image; GLEE_EXTERN GLboolean _GLEE_WGL_NV_multisample_coverage; GLEE_EXTERN GLboolean _GLEE_WGL_EXT_create_context_es2_profile; GLEE_EXTERN GLboolean _GLEE_WGL_NV_DX_interop; GLEE_EXTERN GLboolean _GLEE_WGL_NV_DX_interop2; GLEE_EXTERN GLboolean _GLEE_WGL_EXT_swap_control_tear; GLEE_EXTERN GLboolean _GLEE_WGL_EXT_display_color_table; GLEE_EXTERN GLboolean _GLEE_WGL_EXT_extensions_string; GLEE_EXTERN GLboolean _GLEE_WGL_EXT_swap_control; GLEE_EXTERN GLboolean _GLEE_WGL_NV_vertex_array_range; GLEE_EXTERN GLboolean _GLEE_WGL_OML_sync_control; GLEE_EXTERN GLboolean _GLEE_WGL_I3D_swap_frame_usage; GLEE_EXTERN GLboolean _GLEE_WGL_NV_video_output; /* Aliases for extension querying variables */ #define GLEE_WGL_ARB_buffer_region GLeeEnabled(&_GLEE_WGL_ARB_buffer_region) #define GLEE_WGL_ARB_multisample GLeeEnabled(&_GLEE_WGL_ARB_multisample) #define GLEE_WGL_ARB_extensions_string GLeeEnabled(&_GLEE_WGL_ARB_extensions_string) #define GLEE_WGL_ARB_pixel_format GLeeEnabled(&_GLEE_WGL_ARB_pixel_format) #define GLEE_WGL_ARB_make_current_read GLeeEnabled(&_GLEE_WGL_ARB_make_current_read) #define GLEE_WGL_ARB_pbuffer GLeeEnabled(&_GLEE_WGL_ARB_pbuffer) #define GLEE_WGL_ARB_render_texture GLeeEnabled(&_GLEE_WGL_ARB_render_texture) #define GLEE_WGL_ARB_pixel_format_float GLeeEnabled(&_GLEE_WGL_ARB_pixel_format_float) #define GLEE_WGL_ARB_framebuffer_sRGB GLeeEnabled(&_GLEE_WGL_ARB_framebuffer_sRGB) #define GLEE_WGL_ARB_create_context GLeeEnabled(&_GLEE_WGL_ARB_create_context) #define GLEE_WGL_ARB_create_context_profile GLeeEnabled(&_GLEE_WGL_ARB_create_context_profile) #define GLEE_WGL_ARB_create_context_robustness GLeeEnabled(&_GLEE_WGL_ARB_create_context_robustness) #define GLEE_WGL_EXT_make_current_read GLeeEnabled(&_GLEE_WGL_EXT_make_current_read) #define GLEE_WGL_EXT_pixel_format GLeeEnabled(&_GLEE_WGL_EXT_pixel_format) #define GLEE_WGL_EXT_pbuffer GLeeEnabled(&_GLEE_WGL_EXT_pbuffer) #define GLEE_WGL_EXT_depth_float GLeeEnabled(&_GLEE_WGL_EXT_depth_float) #define GLEE_WGL_3DFX_multisample GLeeEnabled(&_GLEE_WGL_3DFX_multisample) #define GLEE_WGL_EXT_multisample GLeeEnabled(&_GLEE_WGL_EXT_multisample) #define GLEE_WGL_I3D_digital_video_control GLeeEnabled(&_GLEE_WGL_I3D_digital_video_control) #define GLEE_WGL_I3D_gamma GLeeEnabled(&_GLEE_WGL_I3D_gamma) #define GLEE_WGL_I3D_genlock GLeeEnabled(&_GLEE_WGL_I3D_genlock) #define GLEE_WGL_I3D_image_buffer GLeeEnabled(&_GLEE_WGL_I3D_image_buffer) #define GLEE_WGL_I3D_swap_frame_lock GLeeEnabled(&_GLEE_WGL_I3D_swap_frame_lock) #define GLEE_WGL_NV_render_depth_texture GLeeEnabled(&_GLEE_WGL_NV_render_depth_texture) #define GLEE_WGL_NV_render_texture_rectangle GLeeEnabled(&_GLEE_WGL_NV_render_texture_rectangle) #define GLEE_WGL_ATI_pixel_format_float GLeeEnabled(&_GLEE_WGL_ATI_pixel_format_float) #define GLEE_WGL_NV_float_buffer GLeeEnabled(&_GLEE_WGL_NV_float_buffer) #define GLEE_WGL_3DL_stereo_control GLeeEnabled(&_GLEE_WGL_3DL_stereo_control) #define GLEE_WGL_EXT_pixel_format_packed_float GLeeEnabled(&_GLEE_WGL_EXT_pixel_format_packed_float) #define GLEE_WGL_EXT_framebuffer_sRGB GLeeEnabled(&_GLEE_WGL_EXT_framebuffer_sRGB) #define GLEE_WGL_NV_present_video GLeeEnabled(&_GLEE_WGL_NV_present_video) #define GLEE_WGL_NV_swap_group GLeeEnabled(&_GLEE_WGL_NV_swap_group) #define GLEE_WGL_NV_gpu_affinity GLeeEnabled(&_GLEE_WGL_NV_gpu_affinity) #define GLEE_WGL_AMD_gpu_association GLeeEnabled(&_GLEE_WGL_AMD_gpu_association) #define GLEE_WGL_NV_copy_image GLeeEnabled(&_GLEE_WGL_NV_copy_image) #define GLEE_WGL_NV_multisample_coverage GLeeEnabled(&_GLEE_WGL_NV_multisample_coverage) #define GLEE_WGL_EXT_create_context_es2_profile GLeeEnabled(&_GLEE_WGL_EXT_create_context_es2_profile) #define GLEE_WGL_NV_DX_interop GLeeEnabled(&_GLEE_WGL_NV_DX_interop) #define GLEE_WGL_NV_DX_interop2 GLeeEnabled(&_GLEE_WGL_NV_DX_interop2) #define GLEE_WGL_EXT_swap_control_tear GLeeEnabled(&_GLEE_WGL_EXT_swap_control_tear) #define GLEE_WGL_EXT_display_color_table GLeeEnabled(&_GLEE_WGL_EXT_display_color_table) #define GLEE_WGL_EXT_extensions_string GLeeEnabled(&_GLEE_WGL_EXT_extensions_string) #define GLEE_WGL_EXT_swap_control GLeeEnabled(&_GLEE_WGL_EXT_swap_control) #define GLEE_WGL_NV_vertex_array_range GLeeEnabled(&_GLEE_WGL_NV_vertex_array_range) #define GLEE_WGL_OML_sync_control GLeeEnabled(&_GLEE_WGL_OML_sync_control) #define GLEE_WGL_I3D_swap_frame_usage GLeeEnabled(&_GLEE_WGL_I3D_swap_frame_usage) #define GLEE_WGL_NV_video_output GLeeEnabled(&_GLEE_WGL_NV_video_output) /* WGL_ARB_buffer_region */ #ifndef WGL_ARB_buffer_region #define WGL_ARB_buffer_region 1 #define __GLEE_WGL_ARB_buffer_region 1 /* Constants */ #define WGL_FRONT_COLOR_BUFFER_BIT_ARB 0x00000001 #define WGL_BACK_COLOR_BUFFER_BIT_ARB 0x00000002 #define WGL_DEPTH_BUFFER_BIT_ARB 0x00000004 #define WGL_STENCIL_BUFFER_BIT_ARB 0x00000008 #ifndef GLEE_H_DEFINED_wglCreateBufferRegionARB #define GLEE_H_DEFINED_wglCreateBufferRegionARB typedef HANDLE (APIENTRYP GLEEPFNWGLCREATEBUFFERREGIONARBPROC) (HDC hDC, int iLayerPlane, UINT uType); GLEE_EXTERN GLEEPFNWGLCREATEBUFFERREGIONARBPROC GLeeFuncPtr_wglCreateBufferRegionARB; #define wglCreateBufferRegionARB GLeeFuncPtr_wglCreateBufferRegionARB #endif #ifndef GLEE_H_DEFINED_wglDeleteBufferRegionARB #define GLEE_H_DEFINED_wglDeleteBufferRegionARB typedef VOID (APIENTRYP GLEEPFNWGLDELETEBUFFERREGIONARBPROC) (HANDLE hRegion); GLEE_EXTERN GLEEPFNWGLDELETEBUFFERREGIONARBPROC GLeeFuncPtr_wglDeleteBufferRegionARB; #define wglDeleteBufferRegionARB GLeeFuncPtr_wglDeleteBufferRegionARB #endif #ifndef GLEE_H_DEFINED_wglSaveBufferRegionARB #define GLEE_H_DEFINED_wglSaveBufferRegionARB typedef BOOL (APIENTRYP GLEEPFNWGLSAVEBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height); GLEE_EXTERN GLEEPFNWGLSAVEBUFFERREGIONARBPROC GLeeFuncPtr_wglSaveBufferRegionARB; #define wglSaveBufferRegionARB GLeeFuncPtr_wglSaveBufferRegionARB #endif #ifndef GLEE_H_DEFINED_wglRestoreBufferRegionARB #define GLEE_H_DEFINED_wglRestoreBufferRegionARB typedef BOOL (APIENTRYP GLEEPFNWGLRESTOREBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc); GLEE_EXTERN GLEEPFNWGLRESTOREBUFFERREGIONARBPROC GLeeFuncPtr_wglRestoreBufferRegionARB; #define wglRestoreBufferRegionARB GLeeFuncPtr_wglRestoreBufferRegionARB #endif #endif /* WGL_ARB_multisample */ #ifndef WGL_ARB_multisample #define WGL_ARB_multisample 1 #define __GLEE_WGL_ARB_multisample 1 /* Constants */ #define WGL_SAMPLE_BUFFERS_ARB 0x2041 #define WGL_SAMPLES_ARB 0x2042 #endif /* WGL_ARB_extensions_string */ #ifndef WGL_ARB_extensions_string #define WGL_ARB_extensions_string 1 #define __GLEE_WGL_ARB_extensions_string 1 /* Constants */ #ifndef GLEE_H_DEFINED_wglGetExtensionsStringARB #define GLEE_H_DEFINED_wglGetExtensionsStringARB typedef const char * (APIENTRYP GLEEPFNWGLGETEXTENSIONSSTRINGARBPROC) (HDC hdc); GLEE_EXTERN GLEEPFNWGLGETEXTENSIONSSTRINGARBPROC GLeeFuncPtr_wglGetExtensionsStringARB; #define wglGetExtensionsStringARB GLeeFuncPtr_wglGetExtensionsStringARB #endif #endif /* WGL_ARB_pixel_format */ #ifndef WGL_ARB_pixel_format #define WGL_ARB_pixel_format 1 #define __GLEE_WGL_ARB_pixel_format 1 /* Constants */ #define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000 #define WGL_DRAW_TO_WINDOW_ARB 0x2001 #define WGL_DRAW_TO_BITMAP_ARB 0x2002 #define WGL_ACCELERATION_ARB 0x2003 #define WGL_NEED_PALETTE_ARB 0x2004 #define WGL_NEED_SYSTEM_PALETTE_ARB 0x2005 #define WGL_SWAP_LAYER_BUFFERS_ARB 0x2006 #define WGL_SWAP_METHOD_ARB 0x2007 #define WGL_NUMBER_OVERLAYS_ARB 0x2008 #define WGL_NUMBER_UNDERLAYS_ARB 0x2009 #define WGL_TRANSPARENT_ARB 0x200A #define WGL_TRANSPARENT_RED_VALUE_ARB 0x2037 #define WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038 #define WGL_TRANSPARENT_BLUE_VALUE_ARB 0x2039 #define WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203A #define WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203B #define WGL_SHARE_DEPTH_ARB 0x200C #define WGL_SHARE_STENCIL_ARB 0x200D #define WGL_SHARE_ACCUM_ARB 0x200E #define WGL_SUPPORT_GDI_ARB 0x200F #define WGL_SUPPORT_OPENGL_ARB 0x2010 #define WGL_DOUBLE_BUFFER_ARB 0x2011 #define WGL_STEREO_ARB 0x2012 #define WGL_PIXEL_TYPE_ARB 0x2013 #define WGL_COLOR_BITS_ARB 0x2014 #define WGL_RED_BITS_ARB 0x2015 #define WGL_RED_SHIFT_ARB 0x2016 #define WGL_GREEN_BITS_ARB 0x2017 #define WGL_GREEN_SHIFT_ARB 0x2018 #define WGL_BLUE_BITS_ARB 0x2019 #define WGL_BLUE_SHIFT_ARB 0x201A #define WGL_ALPHA_BITS_ARB 0x201B #define WGL_ALPHA_SHIFT_ARB 0x201C #define WGL_ACCUM_BITS_ARB 0x201D #define WGL_ACCUM_RED_BITS_ARB 0x201E #define WGL_ACCUM_GREEN_BITS_ARB 0x201F #define WGL_ACCUM_BLUE_BITS_ARB 0x2020 #define WGL_ACCUM_ALPHA_BITS_ARB 0x2021 #define WGL_DEPTH_BITS_ARB 0x2022 #define WGL_STENCIL_BITS_ARB 0x2023 #define WGL_AUX_BUFFERS_ARB 0x2024 #define WGL_NO_ACCELERATION_ARB 0x2025 #define WGL_GENERIC_ACCELERATION_ARB 0x2026 #define WGL_FULL_ACCELERATION_ARB 0x2027 #define WGL_SWAP_EXCHANGE_ARB 0x2028 #define WGL_SWAP_COPY_ARB 0x2029 #define WGL_SWAP_UNDEFINED_ARB 0x202A #define WGL_TYPE_RGBA_ARB 0x202B #define WGL_TYPE_COLORINDEX_ARB 0x202C #ifndef GLEE_H_DEFINED_wglGetPixelFormatAttribivARB #define GLEE_H_DEFINED_wglGetPixelFormatAttribivARB typedef BOOL (APIENTRYP GLEEPFNWGLGETPIXELFORMATATTRIBIVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int * piAttributes, int * piValues); GLEE_EXTERN GLEEPFNWGLGETPIXELFORMATATTRIBIVARBPROC GLeeFuncPtr_wglGetPixelFormatAttribivARB; #define wglGetPixelFormatAttribivARB GLeeFuncPtr_wglGetPixelFormatAttribivARB #endif #ifndef GLEE_H_DEFINED_wglGetPixelFormatAttribfvARB #define GLEE_H_DEFINED_wglGetPixelFormatAttribfvARB typedef BOOL (APIENTRYP GLEEPFNWGLGETPIXELFORMATATTRIBFVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int * piAttributes, FLOAT * pfValues); GLEE_EXTERN GLEEPFNWGLGETPIXELFORMATATTRIBFVARBPROC GLeeFuncPtr_wglGetPixelFormatAttribfvARB; #define wglGetPixelFormatAttribfvARB GLeeFuncPtr_wglGetPixelFormatAttribfvARB #endif #ifndef GLEE_H_DEFINED_wglChoosePixelFormatARB #define GLEE_H_DEFINED_wglChoosePixelFormatARB typedef BOOL (APIENTRYP GLEEPFNWGLCHOOSEPIXELFORMATARBPROC) (HDC hdc, const int * piAttribIList, const FLOAT * pfAttribFList, UINT nMaxFormats, int * piFormats, UINT * nNumFormats); GLEE_EXTERN GLEEPFNWGLCHOOSEPIXELFORMATARBPROC GLeeFuncPtr_wglChoosePixelFormatARB; #define wglChoosePixelFormatARB GLeeFuncPtr_wglChoosePixelFormatARB #endif #endif /* WGL_ARB_make_current_read */ #ifndef WGL_ARB_make_current_read #define WGL_ARB_make_current_read 1 #define __GLEE_WGL_ARB_make_current_read 1 /* Constants */ #define ERROR_INVALID_PIXEL_TYPE_ARB 0x2043 #define ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB 0x2054 #ifndef GLEE_H_DEFINED_wglMakeContextCurrentARB #define GLEE_H_DEFINED_wglMakeContextCurrentARB typedef BOOL (APIENTRYP GLEEPFNWGLMAKECONTEXTCURRENTARBPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc); GLEE_EXTERN GLEEPFNWGLMAKECONTEXTCURRENTARBPROC GLeeFuncPtr_wglMakeContextCurrentARB; #define wglMakeContextCurrentARB GLeeFuncPtr_wglMakeContextCurrentARB #endif #ifndef GLEE_H_DEFINED_wglGetCurrentReadDCARB #define GLEE_H_DEFINED_wglGetCurrentReadDCARB typedef HDC (APIENTRYP GLEEPFNWGLGETCURRENTREADDCARBPROC) (); GLEE_EXTERN GLEEPFNWGLGETCURRENTREADDCARBPROC GLeeFuncPtr_wglGetCurrentReadDCARB; #define wglGetCurrentReadDCARB GLeeFuncPtr_wglGetCurrentReadDCARB #endif #endif /* WGL_ARB_pbuffer */ #ifndef WGL_ARB_pbuffer #define WGL_ARB_pbuffer 1 #define __GLEE_WGL_ARB_pbuffer 1 /* Constants */ #define WGL_DRAW_TO_PBUFFER_ARB 0x202D #define WGL_MAX_PBUFFER_PIXELS_ARB 0x202E #define WGL_MAX_PBUFFER_WIDTH_ARB 0x202F #define WGL_MAX_PBUFFER_HEIGHT_ARB 0x2030 #define WGL_PBUFFER_LARGEST_ARB 0x2033 #define WGL_PBUFFER_WIDTH_ARB 0x2034 #define WGL_PBUFFER_HEIGHT_ARB 0x2035 #define WGL_PBUFFER_LOST_ARB 0x2036 #ifndef GLEE_H_DEFINED_wglCreatePbufferARB #define GLEE_H_DEFINED_wglCreatePbufferARB typedef HPBUFFERARB (APIENTRYP GLEEPFNWGLCREATEPBUFFERARBPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int * piAttribList); GLEE_EXTERN GLEEPFNWGLCREATEPBUFFERARBPROC GLeeFuncPtr_wglCreatePbufferARB; #define wglCreatePbufferARB GLeeFuncPtr_wglCreatePbufferARB #endif #ifndef GLEE_H_DEFINED_wglGetPbufferDCARB #define GLEE_H_DEFINED_wglGetPbufferDCARB typedef HDC (APIENTRYP GLEEPFNWGLGETPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer); GLEE_EXTERN GLEEPFNWGLGETPBUFFERDCARBPROC GLeeFuncPtr_wglGetPbufferDCARB; #define wglGetPbufferDCARB GLeeFuncPtr_wglGetPbufferDCARB #endif #ifndef GLEE_H_DEFINED_wglReleasePbufferDCARB #define GLEE_H_DEFINED_wglReleasePbufferDCARB typedef int (APIENTRYP GLEEPFNWGLRELEASEPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer, HDC hDC); GLEE_EXTERN GLEEPFNWGLRELEASEPBUFFERDCARBPROC GLeeFuncPtr_wglReleasePbufferDCARB; #define wglReleasePbufferDCARB GLeeFuncPtr_wglReleasePbufferDCARB #endif #ifndef GLEE_H_DEFINED_wglDestroyPbufferARB #define GLEE_H_DEFINED_wglDestroyPbufferARB typedef BOOL (APIENTRYP GLEEPFNWGLDESTROYPBUFFERARBPROC) (HPBUFFERARB hPbuffer); GLEE_EXTERN GLEEPFNWGLDESTROYPBUFFERARBPROC GLeeFuncPtr_wglDestroyPbufferARB; #define wglDestroyPbufferARB GLeeFuncPtr_wglDestroyPbufferARB #endif #ifndef GLEE_H_DEFINED_wglQueryPbufferARB #define GLEE_H_DEFINED_wglQueryPbufferARB typedef BOOL (APIENTRYP GLEEPFNWGLQUERYPBUFFERARBPROC) (HPBUFFERARB hPbuffer, int iAttribute, int * piValue); GLEE_EXTERN GLEEPFNWGLQUERYPBUFFERARBPROC GLeeFuncPtr_wglQueryPbufferARB; #define wglQueryPbufferARB GLeeFuncPtr_wglQueryPbufferARB #endif #endif /* WGL_ARB_render_texture */ #ifndef WGL_ARB_render_texture #define WGL_ARB_render_texture 1 #define __GLEE_WGL_ARB_render_texture 1 /* Constants */ #define WGL_BIND_TO_TEXTURE_RGB_ARB 0x2070 #define WGL_BIND_TO_TEXTURE_RGBA_ARB 0x2071 #define WGL_TEXTURE_FORMAT_ARB 0x2072 #define WGL_TEXTURE_TARGET_ARB 0x2073 #define WGL_MIPMAP_TEXTURE_ARB 0x2074 #define WGL_TEXTURE_RGB_ARB 0x2075 #define WGL_TEXTURE_RGBA_ARB 0x2076 #define WGL_NO_TEXTURE_ARB 0x2077 #define WGL_TEXTURE_CUBE_MAP_ARB 0x2078 #define WGL_TEXTURE_1D_ARB 0x2079 #define WGL_TEXTURE_2D_ARB 0x207A #define WGL_MIPMAP_LEVEL_ARB 0x207B #define WGL_CUBE_MAP_FACE_ARB 0x207C #define WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x207D #define WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x207E #define WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x207F #define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x2080 #define WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x2081 #define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x2082 #define WGL_FRONT_LEFT_ARB 0x2083 #define WGL_FRONT_RIGHT_ARB 0x2084 #define WGL_BACK_LEFT_ARB 0x2085 #define WGL_BACK_RIGHT_ARB 0x2086 #define WGL_AUX0_ARB 0x2087 #define WGL_AUX1_ARB 0x2088 #define WGL_AUX2_ARB 0x2089 #define WGL_AUX3_ARB 0x208A #define WGL_AUX4_ARB 0x208B #define WGL_AUX5_ARB 0x208C #define WGL_AUX6_ARB 0x208D #define WGL_AUX7_ARB 0x208E #define WGL_AUX8_ARB 0x208F #define WGL_AUX9_ARB 0x2090 #ifndef GLEE_H_DEFINED_wglBindTexImageARB #define GLEE_H_DEFINED_wglBindTexImageARB typedef BOOL (APIENTRYP GLEEPFNWGLBINDTEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer); GLEE_EXTERN GLEEPFNWGLBINDTEXIMAGEARBPROC GLeeFuncPtr_wglBindTexImageARB; #define wglBindTexImageARB GLeeFuncPtr_wglBindTexImageARB #endif #ifndef GLEE_H_DEFINED_wglReleaseTexImageARB #define GLEE_H_DEFINED_wglReleaseTexImageARB typedef BOOL (APIENTRYP GLEEPFNWGLRELEASETEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer); GLEE_EXTERN GLEEPFNWGLRELEASETEXIMAGEARBPROC GLeeFuncPtr_wglReleaseTexImageARB; #define wglReleaseTexImageARB GLeeFuncPtr_wglReleaseTexImageARB #endif #ifndef GLEE_H_DEFINED_wglSetPbufferAttribARB #define GLEE_H_DEFINED_wglSetPbufferAttribARB typedef BOOL (APIENTRYP GLEEPFNWGLSETPBUFFERATTRIBARBPROC) (HPBUFFERARB hPbuffer, const int * piAttribList); GLEE_EXTERN GLEEPFNWGLSETPBUFFERATTRIBARBPROC GLeeFuncPtr_wglSetPbufferAttribARB; #define wglSetPbufferAttribARB GLeeFuncPtr_wglSetPbufferAttribARB #endif #endif /* WGL_ARB_pixel_format_float */ #ifndef WGL_ARB_pixel_format_float #define WGL_ARB_pixel_format_float 1 #define __GLEE_WGL_ARB_pixel_format_float 1 /* Constants */ #define WGL_TYPE_RGBA_FLOAT_ARB 0x21A0 #endif /* WGL_ARB_framebuffer_sRGB */ #ifndef WGL_ARB_framebuffer_sRGB #define WGL_ARB_framebuffer_sRGB 1 #define __GLEE_WGL_ARB_framebuffer_sRGB 1 /* Constants */ #define WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20A9 #endif /* WGL_ARB_create_context */ #ifndef WGL_ARB_create_context #define WGL_ARB_create_context 1 #define __GLEE_WGL_ARB_create_context 1 /* Constants */ #define WGL_CONTEXT_DEBUG_BIT_ARB 0x00000001 #define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002 #define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091 #define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092 #define WGL_CONTEXT_LAYER_PLANE_ARB 0x2093 #define WGL_CONTEXT_FLAGS_ARB 0x2094 #define ERROR_INVALID_VERSION_ARB 0x2095 #ifndef GLEE_H_DEFINED_wglCreateContextAttribsARB #define GLEE_H_DEFINED_wglCreateContextAttribsARB typedef HGLRC (APIENTRYP GLEEPFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC hDC, HGLRC hShareContext, const int * attribList); GLEE_EXTERN GLEEPFNWGLCREATECONTEXTATTRIBSARBPROC GLeeFuncPtr_wglCreateContextAttribsARB; #define wglCreateContextAttribsARB GLeeFuncPtr_wglCreateContextAttribsARB #endif #endif /* WGL_ARB_create_context_profile */ #ifndef WGL_ARB_create_context_profile #define WGL_ARB_create_context_profile 1 #define __GLEE_WGL_ARB_create_context_profile 1 /* Constants */ #define WGL_CONTEXT_PROFILE_MASK_ARB 0x9126 #define WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001 #define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 #define ERROR_INVALID_PROFILE_ARB 0x2096 #endif /* WGL_ARB_create_context_robustness */ #ifndef WGL_ARB_create_context_robustness #define WGL_ARB_create_context_robustness 1 #define __GLEE_WGL_ARB_create_context_robustness 1 /* Constants */ #define WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004 #define WGL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 #define WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 #define WGL_NO_RESET_NOTIFICATION_ARB 0x8261 #endif /* WGL_EXT_make_current_read */ #ifndef WGL_EXT_make_current_read #define WGL_EXT_make_current_read 1 #define __GLEE_WGL_EXT_make_current_read 1 /* Constants */ #define ERROR_INVALID_PIXEL_TYPE_EXT 0x2043 #ifndef GLEE_H_DEFINED_wglMakeContextCurrentEXT #define GLEE_H_DEFINED_wglMakeContextCurrentEXT typedef BOOL (APIENTRYP GLEEPFNWGLMAKECONTEXTCURRENTEXTPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc); GLEE_EXTERN GLEEPFNWGLMAKECONTEXTCURRENTEXTPROC GLeeFuncPtr_wglMakeContextCurrentEXT; #define wglMakeContextCurrentEXT GLeeFuncPtr_wglMakeContextCurrentEXT #endif #ifndef GLEE_H_DEFINED_wglGetCurrentReadDCEXT #define GLEE_H_DEFINED_wglGetCurrentReadDCEXT typedef HDC (APIENTRYP GLEEPFNWGLGETCURRENTREADDCEXTPROC) (); GLEE_EXTERN GLEEPFNWGLGETCURRENTREADDCEXTPROC GLeeFuncPtr_wglGetCurrentReadDCEXT; #define wglGetCurrentReadDCEXT GLeeFuncPtr_wglGetCurrentReadDCEXT #endif #endif /* WGL_EXT_pixel_format */ #ifndef WGL_EXT_pixel_format #define WGL_EXT_pixel_format 1 #define __GLEE_WGL_EXT_pixel_format 1 /* Constants */ #define WGL_NUMBER_PIXEL_FORMATS_EXT 0x2000 #define WGL_DRAW_TO_WINDOW_EXT 0x2001 #define WGL_DRAW_TO_BITMAP_EXT 0x2002 #define WGL_ACCELERATION_EXT 0x2003 #define WGL_NEED_PALETTE_EXT 0x2004 #define WGL_NEED_SYSTEM_PALETTE_EXT 0x2005 #define WGL_SWAP_LAYER_BUFFERS_EXT 0x2006 #define WGL_SWAP_METHOD_EXT 0x2007 #define WGL_NUMBER_OVERLAYS_EXT 0x2008 #define WGL_NUMBER_UNDERLAYS_EXT 0x2009 #define WGL_TRANSPARENT_EXT 0x200A #define WGL_TRANSPARENT_VALUE_EXT 0x200B #define WGL_SHARE_DEPTH_EXT 0x200C #define WGL_SHARE_STENCIL_EXT 0x200D #define WGL_SHARE_ACCUM_EXT 0x200E #define WGL_SUPPORT_GDI_EXT 0x200F #define WGL_SUPPORT_OPENGL_EXT 0x2010 #define WGL_DOUBLE_BUFFER_EXT 0x2011 #define WGL_STEREO_EXT 0x2012 #define WGL_PIXEL_TYPE_EXT 0x2013 #define WGL_COLOR_BITS_EXT 0x2014 #define WGL_RED_BITS_EXT 0x2015 #define WGL_RED_SHIFT_EXT 0x2016 #define WGL_GREEN_BITS_EXT 0x2017 #define WGL_GREEN_SHIFT_EXT 0x2018 #define WGL_BLUE_BITS_EXT 0x2019 #define WGL_BLUE_SHIFT_EXT 0x201A #define WGL_ALPHA_BITS_EXT 0x201B #define WGL_ALPHA_SHIFT_EXT 0x201C #define WGL_ACCUM_BITS_EXT 0x201D #define WGL_ACCUM_RED_BITS_EXT 0x201E #define WGL_ACCUM_GREEN_BITS_EXT 0x201F #define WGL_ACCUM_BLUE_BITS_EXT 0x2020 #define WGL_ACCUM_ALPHA_BITS_EXT 0x2021 #define WGL_DEPTH_BITS_EXT 0x2022 #define WGL_STENCIL_BITS_EXT 0x2023 #define WGL_AUX_BUFFERS_EXT 0x2024 #define WGL_NO_ACCELERATION_EXT 0x2025 #define WGL_GENERIC_ACCELERATION_EXT 0x2026 #define WGL_FULL_ACCELERATION_EXT 0x2027 #define WGL_SWAP_EXCHANGE_EXT 0x2028 #define WGL_SWAP_COPY_EXT 0x2029 #define WGL_SWAP_UNDEFINED_EXT 0x202A #define WGL_TYPE_RGBA_EXT 0x202B #define WGL_TYPE_COLORINDEX_EXT 0x202C #ifndef GLEE_H_DEFINED_wglGetPixelFormatAttribivEXT #define GLEE_H_DEFINED_wglGetPixelFormatAttribivEXT typedef BOOL (APIENTRYP GLEEPFNWGLGETPIXELFORMATATTRIBIVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int * piAttributes, int * piValues); GLEE_EXTERN GLEEPFNWGLGETPIXELFORMATATTRIBIVEXTPROC GLeeFuncPtr_wglGetPixelFormatAttribivEXT; #define wglGetPixelFormatAttribivEXT GLeeFuncPtr_wglGetPixelFormatAttribivEXT #endif #ifndef GLEE_H_DEFINED_wglGetPixelFormatAttribfvEXT #define GLEE_H_DEFINED_wglGetPixelFormatAttribfvEXT typedef BOOL (APIENTRYP GLEEPFNWGLGETPIXELFORMATATTRIBFVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int * piAttributes, FLOAT * pfValues); GLEE_EXTERN GLEEPFNWGLGETPIXELFORMATATTRIBFVEXTPROC GLeeFuncPtr_wglGetPixelFormatAttribfvEXT; #define wglGetPixelFormatAttribfvEXT GLeeFuncPtr_wglGetPixelFormatAttribfvEXT #endif #ifndef GLEE_H_DEFINED_wglChoosePixelFormatEXT #define GLEE_H_DEFINED_wglChoosePixelFormatEXT typedef BOOL (APIENTRYP GLEEPFNWGLCHOOSEPIXELFORMATEXTPROC) (HDC hdc, const int * piAttribIList, const FLOAT * pfAttribFList, UINT nMaxFormats, int * piFormats, UINT * nNumFormats); GLEE_EXTERN GLEEPFNWGLCHOOSEPIXELFORMATEXTPROC GLeeFuncPtr_wglChoosePixelFormatEXT; #define wglChoosePixelFormatEXT GLeeFuncPtr_wglChoosePixelFormatEXT #endif #endif /* WGL_EXT_pbuffer */ #ifndef WGL_EXT_pbuffer #define WGL_EXT_pbuffer 1 #define __GLEE_WGL_EXT_pbuffer 1 /* Constants */ #define WGL_DRAW_TO_PBUFFER_EXT 0x202D #define WGL_MAX_PBUFFER_PIXELS_EXT 0x202E #define WGL_MAX_PBUFFER_WIDTH_EXT 0x202F #define WGL_MAX_PBUFFER_HEIGHT_EXT 0x2030 #define WGL_OPTIMAL_PBUFFER_WIDTH_EXT 0x2031 #define WGL_OPTIMAL_PBUFFER_HEIGHT_EXT 0x2032 #define WGL_PBUFFER_LARGEST_EXT 0x2033 #define WGL_PBUFFER_WIDTH_EXT 0x2034 #define WGL_PBUFFER_HEIGHT_EXT 0x2035 #ifndef GLEE_H_DEFINED_wglCreatePbufferEXT #define GLEE_H_DEFINED_wglCreatePbufferEXT typedef HPBUFFEREXT (APIENTRYP GLEEPFNWGLCREATEPBUFFEREXTPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int * piAttribList); GLEE_EXTERN GLEEPFNWGLCREATEPBUFFEREXTPROC GLeeFuncPtr_wglCreatePbufferEXT; #define wglCreatePbufferEXT GLeeFuncPtr_wglCreatePbufferEXT #endif #ifndef GLEE_H_DEFINED_wglGetPbufferDCEXT #define GLEE_H_DEFINED_wglGetPbufferDCEXT typedef HDC (APIENTRYP GLEEPFNWGLGETPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer); GLEE_EXTERN GLEEPFNWGLGETPBUFFERDCEXTPROC GLeeFuncPtr_wglGetPbufferDCEXT; #define wglGetPbufferDCEXT GLeeFuncPtr_wglGetPbufferDCEXT #endif #ifndef GLEE_H_DEFINED_wglReleasePbufferDCEXT #define GLEE_H_DEFINED_wglReleasePbufferDCEXT typedef int (APIENTRYP GLEEPFNWGLRELEASEPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer, HDC hDC); GLEE_EXTERN GLEEPFNWGLRELEASEPBUFFERDCEXTPROC GLeeFuncPtr_wglReleasePbufferDCEXT; #define wglReleasePbufferDCEXT GLeeFuncPtr_wglReleasePbufferDCEXT #endif #ifndef GLEE_H_DEFINED_wglDestroyPbufferEXT #define GLEE_H_DEFINED_wglDestroyPbufferEXT typedef BOOL (APIENTRYP GLEEPFNWGLDESTROYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer); GLEE_EXTERN GLEEPFNWGLDESTROYPBUFFEREXTPROC GLeeFuncPtr_wglDestroyPbufferEXT; #define wglDestroyPbufferEXT GLeeFuncPtr_wglDestroyPbufferEXT #endif #ifndef GLEE_H_DEFINED_wglQueryPbufferEXT #define GLEE_H_DEFINED_wglQueryPbufferEXT typedef BOOL (APIENTRYP GLEEPFNWGLQUERYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer, int iAttribute, int * piValue); GLEE_EXTERN GLEEPFNWGLQUERYPBUFFEREXTPROC GLeeFuncPtr_wglQueryPbufferEXT; #define wglQueryPbufferEXT GLeeFuncPtr_wglQueryPbufferEXT #endif #endif /* WGL_EXT_depth_float */ #ifndef WGL_EXT_depth_float #define WGL_EXT_depth_float 1 #define __GLEE_WGL_EXT_depth_float 1 /* Constants */ #define WGL_DEPTH_FLOAT_EXT 0x2040 #endif /* WGL_3DFX_multisample */ #ifndef WGL_3DFX_multisample #define WGL_3DFX_multisample 1 #define __GLEE_WGL_3DFX_multisample 1 /* Constants */ #define WGL_SAMPLE_BUFFERS_3DFX 0x2060 #define WGL_SAMPLES_3DFX 0x2061 #endif /* WGL_EXT_multisample */ #ifndef WGL_EXT_multisample #define WGL_EXT_multisample 1 #define __GLEE_WGL_EXT_multisample 1 /* Constants */ #define WGL_SAMPLE_BUFFERS_EXT 0x2041 #define WGL_SAMPLES_EXT 0x2042 #endif /* WGL_I3D_digital_video_control */ #ifndef WGL_I3D_digital_video_control #define WGL_I3D_digital_video_control 1 #define __GLEE_WGL_I3D_digital_video_control 1 /* Constants */ #define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D 0x2050 #define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D 0x2051 #define WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D 0x2052 #define WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D 0x2053 #ifndef GLEE_H_DEFINED_wglGetDigitalVideoParametersI3D #define GLEE_H_DEFINED_wglGetDigitalVideoParametersI3D typedef BOOL (APIENTRYP GLEEPFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int * piValue); GLEE_EXTERN GLEEPFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC GLeeFuncPtr_wglGetDigitalVideoParametersI3D; #define wglGetDigitalVideoParametersI3D GLeeFuncPtr_wglGetDigitalVideoParametersI3D #endif #ifndef GLEE_H_DEFINED_wglSetDigitalVideoParametersI3D #define GLEE_H_DEFINED_wglSetDigitalVideoParametersI3D typedef BOOL (APIENTRYP GLEEPFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int * piValue); GLEE_EXTERN GLEEPFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC GLeeFuncPtr_wglSetDigitalVideoParametersI3D; #define wglSetDigitalVideoParametersI3D GLeeFuncPtr_wglSetDigitalVideoParametersI3D #endif #endif /* WGL_I3D_gamma */ #ifndef WGL_I3D_gamma #define WGL_I3D_gamma 1 #define __GLEE_WGL_I3D_gamma 1 /* Constants */ #define WGL_GAMMA_TABLE_SIZE_I3D 0x204E #define WGL_GAMMA_EXCLUDE_DESKTOP_I3D 0x204F #ifndef GLEE_H_DEFINED_wglGetGammaTableParametersI3D #define GLEE_H_DEFINED_wglGetGammaTableParametersI3D typedef BOOL (APIENTRYP GLEEPFNWGLGETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int * piValue); GLEE_EXTERN GLEEPFNWGLGETGAMMATABLEPARAMETERSI3DPROC GLeeFuncPtr_wglGetGammaTableParametersI3D; #define wglGetGammaTableParametersI3D GLeeFuncPtr_wglGetGammaTableParametersI3D #endif #ifndef GLEE_H_DEFINED_wglSetGammaTableParametersI3D #define GLEE_H_DEFINED_wglSetGammaTableParametersI3D typedef BOOL (APIENTRYP GLEEPFNWGLSETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int * piValue); GLEE_EXTERN GLEEPFNWGLSETGAMMATABLEPARAMETERSI3DPROC GLeeFuncPtr_wglSetGammaTableParametersI3D; #define wglSetGammaTableParametersI3D GLeeFuncPtr_wglSetGammaTableParametersI3D #endif #ifndef GLEE_H_DEFINED_wglGetGammaTableI3D #define GLEE_H_DEFINED_wglGetGammaTableI3D typedef BOOL (APIENTRYP GLEEPFNWGLGETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, USHORT * puRed, USHORT * puGreen, USHORT * puBlue); GLEE_EXTERN GLEEPFNWGLGETGAMMATABLEI3DPROC GLeeFuncPtr_wglGetGammaTableI3D; #define wglGetGammaTableI3D GLeeFuncPtr_wglGetGammaTableI3D #endif #ifndef GLEE_H_DEFINED_wglSetGammaTableI3D #define GLEE_H_DEFINED_wglSetGammaTableI3D typedef BOOL (APIENTRYP GLEEPFNWGLSETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, const USHORT * puRed, const USHORT * puGreen, const USHORT * puBlue); GLEE_EXTERN GLEEPFNWGLSETGAMMATABLEI3DPROC GLeeFuncPtr_wglSetGammaTableI3D; #define wglSetGammaTableI3D GLeeFuncPtr_wglSetGammaTableI3D #endif #endif /* WGL_I3D_genlock */ #ifndef WGL_I3D_genlock #define WGL_I3D_genlock 1 #define __GLEE_WGL_I3D_genlock 1 /* Constants */ #define WGL_GENLOCK_SOURCE_MULTIVIEW_I3D 0x2044 #define WGL_GENLOCK_SOURCE_EXTENAL_SYNC_I3D 0x2045 #define WGL_GENLOCK_SOURCE_EXTENAL_FIELD_I3D 0x2046 #define WGL_GENLOCK_SOURCE_EXTENAL_TTL_I3D 0x2047 #define WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D 0x2048 #define WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D 0x2049 #define WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D 0x204A #define WGL_GENLOCK_SOURCE_EDGE_RISING_I3D 0x204B #define WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D 0x204C #ifndef GLEE_H_DEFINED_wglEnableGenlockI3D #define GLEE_H_DEFINED_wglEnableGenlockI3D typedef BOOL (APIENTRYP GLEEPFNWGLENABLEGENLOCKI3DPROC) (HDC hDC); GLEE_EXTERN GLEEPFNWGLENABLEGENLOCKI3DPROC GLeeFuncPtr_wglEnableGenlockI3D; #define wglEnableGenlockI3D GLeeFuncPtr_wglEnableGenlockI3D #endif #ifndef GLEE_H_DEFINED_wglDisableGenlockI3D #define GLEE_H_DEFINED_wglDisableGenlockI3D typedef BOOL (APIENTRYP GLEEPFNWGLDISABLEGENLOCKI3DPROC) (HDC hDC); GLEE_EXTERN GLEEPFNWGLDISABLEGENLOCKI3DPROC GLeeFuncPtr_wglDisableGenlockI3D; #define wglDisableGenlockI3D GLeeFuncPtr_wglDisableGenlockI3D #endif #ifndef GLEE_H_DEFINED_wglIsEnabledGenlockI3D #define GLEE_H_DEFINED_wglIsEnabledGenlockI3D typedef BOOL (APIENTRYP GLEEPFNWGLISENABLEDGENLOCKI3DPROC) (HDC hDC, BOOL * pFlag); GLEE_EXTERN GLEEPFNWGLISENABLEDGENLOCKI3DPROC GLeeFuncPtr_wglIsEnabledGenlockI3D; #define wglIsEnabledGenlockI3D GLeeFuncPtr_wglIsEnabledGenlockI3D #endif #ifndef GLEE_H_DEFINED_wglGenlockSourceI3D #define GLEE_H_DEFINED_wglGenlockSourceI3D typedef BOOL (APIENTRYP GLEEPFNWGLGENLOCKSOURCEI3DPROC) (HDC hDC, UINT uSource); GLEE_EXTERN GLEEPFNWGLGENLOCKSOURCEI3DPROC GLeeFuncPtr_wglGenlockSourceI3D; #define wglGenlockSourceI3D GLeeFuncPtr_wglGenlockSourceI3D #endif #ifndef GLEE_H_DEFINED_wglGetGenlockSourceI3D #define GLEE_H_DEFINED_wglGetGenlockSourceI3D typedef BOOL (APIENTRYP GLEEPFNWGLGETGENLOCKSOURCEI3DPROC) (HDC hDC, UINT * uSource); GLEE_EXTERN GLEEPFNWGLGETGENLOCKSOURCEI3DPROC GLeeFuncPtr_wglGetGenlockSourceI3D; #define wglGetGenlockSourceI3D GLeeFuncPtr_wglGetGenlockSourceI3D #endif #ifndef GLEE_H_DEFINED_wglGenlockSourceEdgeI3D #define GLEE_H_DEFINED_wglGenlockSourceEdgeI3D typedef BOOL (APIENTRYP GLEEPFNWGLGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT uEdge); GLEE_EXTERN GLEEPFNWGLGENLOCKSOURCEEDGEI3DPROC GLeeFuncPtr_wglGenlockSourceEdgeI3D; #define wglGenlockSourceEdgeI3D GLeeFuncPtr_wglGenlockSourceEdgeI3D #endif #ifndef GLEE_H_DEFINED_wglGetGenlockSourceEdgeI3D #define GLEE_H_DEFINED_wglGetGenlockSourceEdgeI3D typedef BOOL (APIENTRYP GLEEPFNWGLGETGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT * uEdge); GLEE_EXTERN GLEEPFNWGLGETGENLOCKSOURCEEDGEI3DPROC GLeeFuncPtr_wglGetGenlockSourceEdgeI3D; #define wglGetGenlockSourceEdgeI3D GLeeFuncPtr_wglGetGenlockSourceEdgeI3D #endif #ifndef GLEE_H_DEFINED_wglGenlockSampleRateI3D #define GLEE_H_DEFINED_wglGenlockSampleRateI3D typedef BOOL (APIENTRYP GLEEPFNWGLGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT uRate); GLEE_EXTERN GLEEPFNWGLGENLOCKSAMPLERATEI3DPROC GLeeFuncPtr_wglGenlockSampleRateI3D; #define wglGenlockSampleRateI3D GLeeFuncPtr_wglGenlockSampleRateI3D #endif #ifndef GLEE_H_DEFINED_wglGetGenlockSampleRateI3D #define GLEE_H_DEFINED_wglGetGenlockSampleRateI3D typedef BOOL (APIENTRYP GLEEPFNWGLGETGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT * uRate); GLEE_EXTERN GLEEPFNWGLGETGENLOCKSAMPLERATEI3DPROC GLeeFuncPtr_wglGetGenlockSampleRateI3D; #define wglGetGenlockSampleRateI3D GLeeFuncPtr_wglGetGenlockSampleRateI3D #endif #ifndef GLEE_H_DEFINED_wglGenlockSourceDelayI3D #define GLEE_H_DEFINED_wglGenlockSourceDelayI3D typedef BOOL (APIENTRYP GLEEPFNWGLGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT uDelay); GLEE_EXTERN GLEEPFNWGLGENLOCKSOURCEDELAYI3DPROC GLeeFuncPtr_wglGenlockSourceDelayI3D; #define wglGenlockSourceDelayI3D GLeeFuncPtr_wglGenlockSourceDelayI3D #endif #ifndef GLEE_H_DEFINED_wglGetGenlockSourceDelayI3D #define GLEE_H_DEFINED_wglGetGenlockSourceDelayI3D typedef BOOL (APIENTRYP GLEEPFNWGLGETGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT * uDelay); GLEE_EXTERN GLEEPFNWGLGETGENLOCKSOURCEDELAYI3DPROC GLeeFuncPtr_wglGetGenlockSourceDelayI3D; #define wglGetGenlockSourceDelayI3D GLeeFuncPtr_wglGetGenlockSourceDelayI3D #endif #ifndef GLEE_H_DEFINED_wglQueryGenlockMaxSourceDelayI3D #define GLEE_H_DEFINED_wglQueryGenlockMaxSourceDelayI3D typedef BOOL (APIENTRYP GLEEPFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC) (HDC hDC, UINT * uMaxLineDelay, UINT * uMaxPixelDelay); GLEE_EXTERN GLEEPFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC GLeeFuncPtr_wglQueryGenlockMaxSourceDelayI3D; #define wglQueryGenlockMaxSourceDelayI3D GLeeFuncPtr_wglQueryGenlockMaxSourceDelayI3D #endif #endif /* WGL_I3D_image_buffer */ #ifndef WGL_I3D_image_buffer #define WGL_I3D_image_buffer 1 #define __GLEE_WGL_I3D_image_buffer 1 /* Constants */ #define WGL_IMAGE_BUFFER_MIN_ACCESS_I3D 0x00000001 #define WGL_IMAGE_BUFFER_LOCK_I3D 0x00000002 #ifndef GLEE_H_DEFINED_wglCreateImageBufferI3D #define GLEE_H_DEFINED_wglCreateImageBufferI3D typedef LPVOID (APIENTRYP GLEEPFNWGLCREATEIMAGEBUFFERI3DPROC) (HDC hDC, DWORD dwSize, UINT uFlags); GLEE_EXTERN GLEEPFNWGLCREATEIMAGEBUFFERI3DPROC GLeeFuncPtr_wglCreateImageBufferI3D; #define wglCreateImageBufferI3D GLeeFuncPtr_wglCreateImageBufferI3D #endif #ifndef GLEE_H_DEFINED_wglDestroyImageBufferI3D #define GLEE_H_DEFINED_wglDestroyImageBufferI3D typedef BOOL (APIENTRYP GLEEPFNWGLDESTROYIMAGEBUFFERI3DPROC) (HDC hDC, LPVOID pAddress); GLEE_EXTERN GLEEPFNWGLDESTROYIMAGEBUFFERI3DPROC GLeeFuncPtr_wglDestroyImageBufferI3D; #define wglDestroyImageBufferI3D GLeeFuncPtr_wglDestroyImageBufferI3D #endif #ifndef GLEE_H_DEFINED_wglAssociateImageBufferEventsI3D #define GLEE_H_DEFINED_wglAssociateImageBufferEventsI3D typedef BOOL (APIENTRYP GLEEPFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const HANDLE * pEvent, const LPVOID * pAddress, const DWORD * pSize, UINT count); GLEE_EXTERN GLEEPFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC GLeeFuncPtr_wglAssociateImageBufferEventsI3D; #define wglAssociateImageBufferEventsI3D GLeeFuncPtr_wglAssociateImageBufferEventsI3D #endif #ifndef GLEE_H_DEFINED_wglReleaseImageBufferEventsI3D #define GLEE_H_DEFINED_wglReleaseImageBufferEventsI3D typedef BOOL (APIENTRYP GLEEPFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const LPVOID * pAddress, UINT count); GLEE_EXTERN GLEEPFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC GLeeFuncPtr_wglReleaseImageBufferEventsI3D; #define wglReleaseImageBufferEventsI3D GLeeFuncPtr_wglReleaseImageBufferEventsI3D #endif #endif /* WGL_I3D_swap_frame_lock */ #ifndef WGL_I3D_swap_frame_lock #define WGL_I3D_swap_frame_lock 1 #define __GLEE_WGL_I3D_swap_frame_lock 1 /* Constants */ #ifndef GLEE_H_DEFINED_wglEnableFrameLockI3D #define GLEE_H_DEFINED_wglEnableFrameLockI3D typedef BOOL (APIENTRYP GLEEPFNWGLENABLEFRAMELOCKI3DPROC) (); GLEE_EXTERN GLEEPFNWGLENABLEFRAMELOCKI3DPROC GLeeFuncPtr_wglEnableFrameLockI3D; #define wglEnableFrameLockI3D GLeeFuncPtr_wglEnableFrameLockI3D #endif #ifndef GLEE_H_DEFINED_wglDisableFrameLockI3D #define GLEE_H_DEFINED_wglDisableFrameLockI3D typedef BOOL (APIENTRYP GLEEPFNWGLDISABLEFRAMELOCKI3DPROC) (); GLEE_EXTERN GLEEPFNWGLDISABLEFRAMELOCKI3DPROC GLeeFuncPtr_wglDisableFrameLockI3D; #define wglDisableFrameLockI3D GLeeFuncPtr_wglDisableFrameLockI3D #endif #ifndef GLEE_H_DEFINED_wglIsEnabledFrameLockI3D #define GLEE_H_DEFINED_wglIsEnabledFrameLockI3D typedef BOOL (APIENTRYP GLEEPFNWGLISENABLEDFRAMELOCKI3DPROC) (BOOL * pFlag); GLEE_EXTERN GLEEPFNWGLISENABLEDFRAMELOCKI3DPROC GLeeFuncPtr_wglIsEnabledFrameLockI3D; #define wglIsEnabledFrameLockI3D GLeeFuncPtr_wglIsEnabledFrameLockI3D #endif #ifndef GLEE_H_DEFINED_wglQueryFrameLockMasterI3D #define GLEE_H_DEFINED_wglQueryFrameLockMasterI3D typedef BOOL (APIENTRYP GLEEPFNWGLQUERYFRAMELOCKMASTERI3DPROC) (BOOL * pFlag); GLEE_EXTERN GLEEPFNWGLQUERYFRAMELOCKMASTERI3DPROC GLeeFuncPtr_wglQueryFrameLockMasterI3D; #define wglQueryFrameLockMasterI3D GLeeFuncPtr_wglQueryFrameLockMasterI3D #endif #endif /* WGL_NV_render_depth_texture */ #ifndef WGL_NV_render_depth_texture #define WGL_NV_render_depth_texture 1 #define __GLEE_WGL_NV_render_depth_texture 1 /* Constants */ #define WGL_BIND_TO_TEXTURE_DEPTH_NV 0x20A3 #define WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV 0x20A4 #define WGL_DEPTH_TEXTURE_FORMAT_NV 0x20A5 #define WGL_TEXTURE_DEPTH_COMPONENT_NV 0x20A6 #define WGL_DEPTH_COMPONENT_NV 0x20A7 #endif /* WGL_NV_render_texture_rectangle */ #ifndef WGL_NV_render_texture_rectangle #define WGL_NV_render_texture_rectangle 1 #define __GLEE_WGL_NV_render_texture_rectangle 1 /* Constants */ #define WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV 0x20A0 #define WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV 0x20A1 #define WGL_TEXTURE_RECTANGLE_NV 0x20A2 #endif /* WGL_ATI_pixel_format_float */ #ifndef WGL_ATI_pixel_format_float #define WGL_ATI_pixel_format_float 1 #define __GLEE_WGL_ATI_pixel_format_float 1 /* Constants */ #define WGL_TYPE_RGBA_FLOAT_ATI 0x21A0 #endif /* WGL_NV_float_buffer */ #ifndef WGL_NV_float_buffer #define WGL_NV_float_buffer 1 #define __GLEE_WGL_NV_float_buffer 1 /* Constants */ #define WGL_FLOAT_COMPONENTS_NV 0x20B0 #define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV 0x20B1 #define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV 0x20B2 #define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV 0x20B3 #define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV 0x20B4 #define WGL_TEXTURE_FLOAT_R_NV 0x20B5 #define WGL_TEXTURE_FLOAT_RG_NV 0x20B6 #define WGL_TEXTURE_FLOAT_RGB_NV 0x20B7 #define WGL_TEXTURE_FLOAT_RGBA_NV 0x20B8 #endif /* WGL_3DL_stereo_control */ #ifndef WGL_3DL_stereo_control #define WGL_3DL_stereo_control 1 #define __GLEE_WGL_3DL_stereo_control 1 /* Constants */ #define WGL_STEREO_EMITTER_ENABLE_3DL 0x2055 #define WGL_STEREO_EMITTER_DISABLE_3DL 0x2056 #define WGL_STEREO_POLARITY_NORMAL_3DL 0x2057 #define WGL_STEREO_POLARITY_INVERT_3DL 0x2058 #ifndef GLEE_H_DEFINED_wglSetStereoEmitterState3DL #define GLEE_H_DEFINED_wglSetStereoEmitterState3DL typedef BOOL (APIENTRYP GLEEPFNWGLSETSTEREOEMITTERSTATE3DLPROC) (HDC hDC, UINT uState); GLEE_EXTERN GLEEPFNWGLSETSTEREOEMITTERSTATE3DLPROC GLeeFuncPtr_wglSetStereoEmitterState3DL; #define wglSetStereoEmitterState3DL GLeeFuncPtr_wglSetStereoEmitterState3DL #endif #endif /* WGL_EXT_pixel_format_packed_float */ #ifndef WGL_EXT_pixel_format_packed_float #define WGL_EXT_pixel_format_packed_float 1 #define __GLEE_WGL_EXT_pixel_format_packed_float 1 /* Constants */ #define WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT 0x20A8 #endif /* WGL_EXT_framebuffer_sRGB */ #ifndef WGL_EXT_framebuffer_sRGB #define WGL_EXT_framebuffer_sRGB 1 #define __GLEE_WGL_EXT_framebuffer_sRGB 1 /* Constants */ #define WGL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20A9 #endif /* WGL_NV_present_video */ #ifndef WGL_NV_present_video #define WGL_NV_present_video 1 #define __GLEE_WGL_NV_present_video 1 /* Constants */ #define WGL_NUM_VIDEO_SLOTS_NV 0x20F0 #ifndef GLEE_H_DEFINED_wglEnumerateVideoDevicesNV #define GLEE_H_DEFINED_wglEnumerateVideoDevicesNV typedef int (APIENTRYP GLEEPFNWGLENUMERATEVIDEODEVICESNVPROC) (HDC hDC, HVIDEOOUTPUTDEVICENV * phDeviceList); GLEE_EXTERN GLEEPFNWGLENUMERATEVIDEODEVICESNVPROC GLeeFuncPtr_wglEnumerateVideoDevicesNV; #define wglEnumerateVideoDevicesNV GLeeFuncPtr_wglEnumerateVideoDevicesNV #endif #ifndef GLEE_H_DEFINED_wglBindVideoDeviceNV #define GLEE_H_DEFINED_wglBindVideoDeviceNV typedef BOOL (APIENTRYP GLEEPFNWGLBINDVIDEODEVICENVPROC) (HDC hDC, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int * piAttribList); GLEE_EXTERN GLEEPFNWGLBINDVIDEODEVICENVPROC GLeeFuncPtr_wglBindVideoDeviceNV; #define wglBindVideoDeviceNV GLeeFuncPtr_wglBindVideoDeviceNV #endif #ifndef GLEE_H_DEFINED_wglQueryCurrentContextNV #define GLEE_H_DEFINED_wglQueryCurrentContextNV typedef BOOL (APIENTRYP GLEEPFNWGLQUERYCURRENTCONTEXTNVPROC) (int iAttribute, int * piValue); GLEE_EXTERN GLEEPFNWGLQUERYCURRENTCONTEXTNVPROC GLeeFuncPtr_wglQueryCurrentContextNV; #define wglQueryCurrentContextNV GLeeFuncPtr_wglQueryCurrentContextNV #endif #endif /* WGL_NV_swap_group */ #ifndef WGL_NV_swap_group #define WGL_NV_swap_group 1 #define __GLEE_WGL_NV_swap_group 1 /* Constants */ #ifndef GLEE_H_DEFINED_wglJoinSwapGroupNV #define GLEE_H_DEFINED_wglJoinSwapGroupNV typedef BOOL (APIENTRYP GLEEPFNWGLJOINSWAPGROUPNVPROC) (HDC hDC, GLuint group); GLEE_EXTERN GLEEPFNWGLJOINSWAPGROUPNVPROC GLeeFuncPtr_wglJoinSwapGroupNV; #define wglJoinSwapGroupNV GLeeFuncPtr_wglJoinSwapGroupNV #endif #ifndef GLEE_H_DEFINED_wglBindSwapBarrierNV #define GLEE_H_DEFINED_wglBindSwapBarrierNV typedef BOOL (APIENTRYP GLEEPFNWGLBINDSWAPBARRIERNVPROC) (GLuint group, GLuint barrier); GLEE_EXTERN GLEEPFNWGLBINDSWAPBARRIERNVPROC GLeeFuncPtr_wglBindSwapBarrierNV; #define wglBindSwapBarrierNV GLeeFuncPtr_wglBindSwapBarrierNV #endif #ifndef GLEE_H_DEFINED_wglQuerySwapGroupNV #define GLEE_H_DEFINED_wglQuerySwapGroupNV typedef BOOL (APIENTRYP GLEEPFNWGLQUERYSWAPGROUPNVPROC) (HDC hDC, GLuint * group, GLuint * barrier); GLEE_EXTERN GLEEPFNWGLQUERYSWAPGROUPNVPROC GLeeFuncPtr_wglQuerySwapGroupNV; #define wglQuerySwapGroupNV GLeeFuncPtr_wglQuerySwapGroupNV #endif #ifndef GLEE_H_DEFINED_wglQueryMaxSwapGroupsNV #define GLEE_H_DEFINED_wglQueryMaxSwapGroupsNV typedef BOOL (APIENTRYP GLEEPFNWGLQUERYMAXSWAPGROUPSNVPROC) (HDC hDC, GLuint * maxGroups, GLuint * maxBarriers); GLEE_EXTERN GLEEPFNWGLQUERYMAXSWAPGROUPSNVPROC GLeeFuncPtr_wglQueryMaxSwapGroupsNV; #define wglQueryMaxSwapGroupsNV GLeeFuncPtr_wglQueryMaxSwapGroupsNV #endif #ifndef GLEE_H_DEFINED_wglQueryFrameCountNV #define GLEE_H_DEFINED_wglQueryFrameCountNV typedef BOOL (APIENTRYP GLEEPFNWGLQUERYFRAMECOUNTNVPROC) (HDC hDC, GLuint * count); GLEE_EXTERN GLEEPFNWGLQUERYFRAMECOUNTNVPROC GLeeFuncPtr_wglQueryFrameCountNV; #define wglQueryFrameCountNV GLeeFuncPtr_wglQueryFrameCountNV #endif #ifndef GLEE_H_DEFINED_wglResetFrameCountNV #define GLEE_H_DEFINED_wglResetFrameCountNV typedef BOOL (APIENTRYP GLEEPFNWGLRESETFRAMECOUNTNVPROC) (HDC hDC); GLEE_EXTERN GLEEPFNWGLRESETFRAMECOUNTNVPROC GLeeFuncPtr_wglResetFrameCountNV; #define wglResetFrameCountNV GLeeFuncPtr_wglResetFrameCountNV #endif #endif /* WGL_NV_gpu_affinity */ #ifndef WGL_NV_gpu_affinity #define WGL_NV_gpu_affinity 1 #define __GLEE_WGL_NV_gpu_affinity 1 /* Constants */ #define WGL_ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV 0x20D0 #define WGL_ERROR_MISSING_AFFINITY_MASK_NV 0x20D1 #ifndef GLEE_H_DEFINED_wglEnumGpusNV #define GLEE_H_DEFINED_wglEnumGpusNV typedef BOOL (APIENTRYP GLEEPFNWGLENUMGPUSNVPROC) (UINT iGpuIndex, HGPUNV * phGpu); GLEE_EXTERN GLEEPFNWGLENUMGPUSNVPROC GLeeFuncPtr_wglEnumGpusNV; #define wglEnumGpusNV GLeeFuncPtr_wglEnumGpusNV #endif #ifndef GLEE_H_DEFINED_wglEnumGpuDevicesNV #define GLEE_H_DEFINED_wglEnumGpuDevicesNV typedef BOOL (APIENTRYP GLEEPFNWGLENUMGPUDEVICESNVPROC) (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice); GLEE_EXTERN GLEEPFNWGLENUMGPUDEVICESNVPROC GLeeFuncPtr_wglEnumGpuDevicesNV; #define wglEnumGpuDevicesNV GLeeFuncPtr_wglEnumGpuDevicesNV #endif #ifndef GLEE_H_DEFINED_wglCreateAffinityDCNV #define GLEE_H_DEFINED_wglCreateAffinityDCNV typedef HDC (APIENTRYP GLEEPFNWGLCREATEAFFINITYDCNVPROC) (const HGPUNV * phGpuList); GLEE_EXTERN GLEEPFNWGLCREATEAFFINITYDCNVPROC GLeeFuncPtr_wglCreateAffinityDCNV; #define wglCreateAffinityDCNV GLeeFuncPtr_wglCreateAffinityDCNV #endif #ifndef GLEE_H_DEFINED_wglEnumGpusFromAffinityDCNV #define GLEE_H_DEFINED_wglEnumGpusFromAffinityDCNV typedef BOOL (APIENTRYP GLEEPFNWGLENUMGPUSFROMAFFINITYDCNVPROC) (HDC hAffinityDC, UINT iGpuIndex, HGPUNV * hGpu); GLEE_EXTERN GLEEPFNWGLENUMGPUSFROMAFFINITYDCNVPROC GLeeFuncPtr_wglEnumGpusFromAffinityDCNV; #define wglEnumGpusFromAffinityDCNV GLeeFuncPtr_wglEnumGpusFromAffinityDCNV #endif #ifndef GLEE_H_DEFINED_wglDeleteDCNV #define GLEE_H_DEFINED_wglDeleteDCNV typedef BOOL (APIENTRYP GLEEPFNWGLDELETEDCNVPROC) (HDC hdc); GLEE_EXTERN GLEEPFNWGLDELETEDCNVPROC GLeeFuncPtr_wglDeleteDCNV; #define wglDeleteDCNV GLeeFuncPtr_wglDeleteDCNV #endif #endif /* WGL_AMD_gpu_association */ #ifndef WGL_AMD_gpu_association #define WGL_AMD_gpu_association 1 #define __GLEE_WGL_AMD_gpu_association 1 /* Constants */ #define WGL_GPU_VENDOR_AMD 0x1F00 #define WGL_GPU_RENDERER_STRING_AMD 0x1F01 #define WGL_GPU_OPENGL_VERSION_STRING_AMD 0x1F02 #define WGL_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2 #define WGL_GPU_RAM_AMD 0x21A3 #define WGL_GPU_CLOCK_AMD 0x21A4 #define WGL_GPU_NUM_PIPES_AMD 0x21A5 #define WGL_GPU_NUM_SIMD_AMD 0x21A6 #define WGL_GPU_NUM_RB_AMD 0x21A7 #define WGL_GPU_NUM_SPI_AMD 0x21A8 #ifndef GLEE_H_DEFINED_wglGetGPUIDsAMD #define GLEE_H_DEFINED_wglGetGPUIDsAMD typedef UINT (APIENTRYP GLEEPFNWGLGETGPUIDSAMDPROC) (UINT maxCount, UINT * ids); GLEE_EXTERN GLEEPFNWGLGETGPUIDSAMDPROC GLeeFuncPtr_wglGetGPUIDsAMD; #define wglGetGPUIDsAMD GLeeFuncPtr_wglGetGPUIDsAMD #endif #ifndef GLEE_H_DEFINED_wglGetGPUInfoAMD #define GLEE_H_DEFINED_wglGetGPUInfoAMD typedef INT (APIENTRYP GLEEPFNWGLGETGPUINFOAMDPROC) (UINT id, int property, GLenum dataType, UINT size, void * data); GLEE_EXTERN GLEEPFNWGLGETGPUINFOAMDPROC GLeeFuncPtr_wglGetGPUInfoAMD; #define wglGetGPUInfoAMD GLeeFuncPtr_wglGetGPUInfoAMD #endif #ifndef GLEE_H_DEFINED_wglGetContextGPUIDAMD #define GLEE_H_DEFINED_wglGetContextGPUIDAMD typedef UINT (APIENTRYP GLEEPFNWGLGETCONTEXTGPUIDAMDPROC) (HGLRC hglrc); GLEE_EXTERN GLEEPFNWGLGETCONTEXTGPUIDAMDPROC GLeeFuncPtr_wglGetContextGPUIDAMD; #define wglGetContextGPUIDAMD GLeeFuncPtr_wglGetContextGPUIDAMD #endif #ifndef GLEE_H_DEFINED_wglCreateAssociatedContextAMD #define GLEE_H_DEFINED_wglCreateAssociatedContextAMD typedef HGLRC (APIENTRYP GLEEPFNWGLCREATEASSOCIATEDCONTEXTAMDPROC) (UINT id); GLEE_EXTERN GLEEPFNWGLCREATEASSOCIATEDCONTEXTAMDPROC GLeeFuncPtr_wglCreateAssociatedContextAMD; #define wglCreateAssociatedContextAMD GLeeFuncPtr_wglCreateAssociatedContextAMD #endif #ifndef GLEE_H_DEFINED_wglCreateAssociatedContextAttribsAMD #define GLEE_H_DEFINED_wglCreateAssociatedContextAttribsAMD typedef HGLRC (APIENTRYP GLEEPFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC) (UINT id, HGLRC hShareContext, const int * attribList); GLEE_EXTERN GLEEPFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC GLeeFuncPtr_wglCreateAssociatedContextAttribsAMD; #define wglCreateAssociatedContextAttribsAMD GLeeFuncPtr_wglCreateAssociatedContextAttribsAMD #endif #ifndef GLEE_H_DEFINED_wglDeleteAssociatedContextAMD #define GLEE_H_DEFINED_wglDeleteAssociatedContextAMD typedef BOOL (APIENTRYP GLEEPFNWGLDELETEASSOCIATEDCONTEXTAMDPROC) (HGLRC hglrc); GLEE_EXTERN GLEEPFNWGLDELETEASSOCIATEDCONTEXTAMDPROC GLeeFuncPtr_wglDeleteAssociatedContextAMD; #define wglDeleteAssociatedContextAMD GLeeFuncPtr_wglDeleteAssociatedContextAMD #endif #ifndef GLEE_H_DEFINED_wglMakeAssociatedContextCurrentAMD #define GLEE_H_DEFINED_wglMakeAssociatedContextCurrentAMD typedef BOOL (APIENTRYP GLEEPFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC) (HGLRC hglrc); GLEE_EXTERN GLEEPFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC GLeeFuncPtr_wglMakeAssociatedContextCurrentAMD; #define wglMakeAssociatedContextCurrentAMD GLeeFuncPtr_wglMakeAssociatedContextCurrentAMD #endif #ifndef GLEE_H_DEFINED_wglGetCurrentAssociatedContextAMD #define GLEE_H_DEFINED_wglGetCurrentAssociatedContextAMD typedef HGLRC (APIENTRYP GLEEPFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC) (); GLEE_EXTERN GLEEPFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC GLeeFuncPtr_wglGetCurrentAssociatedContextAMD; #define wglGetCurrentAssociatedContextAMD GLeeFuncPtr_wglGetCurrentAssociatedContextAMD #endif #ifndef GLEE_H_DEFINED_wglBlitContextFramebufferAMD #define GLEE_H_DEFINED_wglBlitContextFramebufferAMD typedef VOID (APIENTRYP GLEEPFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC) (HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); GLEE_EXTERN GLEEPFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC GLeeFuncPtr_wglBlitContextFramebufferAMD; #define wglBlitContextFramebufferAMD GLeeFuncPtr_wglBlitContextFramebufferAMD #endif #endif /* WGL_NV_copy_image */ #ifndef WGL_NV_copy_image #define WGL_NV_copy_image 1 #define __GLEE_WGL_NV_copy_image 1 /* Constants */ #ifndef GLEE_H_DEFINED_wglCopyImageSubDataNV #define GLEE_H_DEFINED_wglCopyImageSubDataNV typedef BOOL (APIENTRYP GLEEPFNWGLCOPYIMAGESUBDATANVPROC) (HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); GLEE_EXTERN GLEEPFNWGLCOPYIMAGESUBDATANVPROC GLeeFuncPtr_wglCopyImageSubDataNV; #define wglCopyImageSubDataNV GLeeFuncPtr_wglCopyImageSubDataNV #endif #endif /* WGL_NV_multisample_coverage */ #ifndef WGL_NV_multisample_coverage #define WGL_NV_multisample_coverage 1 #define __GLEE_WGL_NV_multisample_coverage 1 /* Constants */ #define WGL_COVERAGE_SAMPLES_NV 0x2042 #define WGL_COLOR_SAMPLES_NV 0x20B9 #endif /* WGL_EXT_create_context_es2_profile */ #ifndef WGL_EXT_create_context_es2_profile #define WGL_EXT_create_context_es2_profile 1 #define __GLEE_WGL_EXT_create_context_es2_profile 1 /* Constants */ #define WGL_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004 #endif /* WGL_NV_DX_interop */ #ifndef WGL_NV_DX_interop #define WGL_NV_DX_interop 1 #define __GLEE_WGL_NV_DX_interop 1 /* Constants */ #define WGL_ACCESS_READ_ONLY_NV 0x00000000 #define WGL_ACCESS_READ_WRITE_NV 0x00000001 #define WGL_ACCESS_WRITE_DISCARD_NV 0x00000002 #ifndef GLEE_H_DEFINED_wglDXSetResourceShareHandleNV #define GLEE_H_DEFINED_wglDXSetResourceShareHandleNV typedef BOOL (APIENTRYP GLEEPFNWGLDXSETRESOURCESHAREHANDLENVPROC) (void * dxObject, HANDLE shareHandle); GLEE_EXTERN GLEEPFNWGLDXSETRESOURCESHAREHANDLENVPROC GLeeFuncPtr_wglDXSetResourceShareHandleNV; #define wglDXSetResourceShareHandleNV GLeeFuncPtr_wglDXSetResourceShareHandleNV #endif #ifndef GLEE_H_DEFINED_wglDXOpenDeviceNV #define GLEE_H_DEFINED_wglDXOpenDeviceNV typedef HANDLE (APIENTRYP GLEEPFNWGLDXOPENDEVICENVPROC) (void * dxDevice); GLEE_EXTERN GLEEPFNWGLDXOPENDEVICENVPROC GLeeFuncPtr_wglDXOpenDeviceNV; #define wglDXOpenDeviceNV GLeeFuncPtr_wglDXOpenDeviceNV #endif #ifndef GLEE_H_DEFINED_wglDXCloseDeviceNV #define GLEE_H_DEFINED_wglDXCloseDeviceNV typedef BOOL (APIENTRYP GLEEPFNWGLDXCLOSEDEVICENVPROC) (HANDLE hDevice); GLEE_EXTERN GLEEPFNWGLDXCLOSEDEVICENVPROC GLeeFuncPtr_wglDXCloseDeviceNV; #define wglDXCloseDeviceNV GLeeFuncPtr_wglDXCloseDeviceNV #endif #ifndef GLEE_H_DEFINED_wglDXRegisterObjectNV #define GLEE_H_DEFINED_wglDXRegisterObjectNV typedef HANDLE (APIENTRYP GLEEPFNWGLDXREGISTEROBJECTNVPROC) (HANDLE hDevice, void * dxObject, GLuint name, GLenum type, GLenum access); GLEE_EXTERN GLEEPFNWGLDXREGISTEROBJECTNVPROC GLeeFuncPtr_wglDXRegisterObjectNV; #define wglDXRegisterObjectNV GLeeFuncPtr_wglDXRegisterObjectNV #endif #ifndef GLEE_H_DEFINED_wglDXUnregisterObjectNV #define GLEE_H_DEFINED_wglDXUnregisterObjectNV typedef BOOL (APIENTRYP GLEEPFNWGLDXUNREGISTEROBJECTNVPROC) (HANDLE hDevice, HANDLE hObject); GLEE_EXTERN GLEEPFNWGLDXUNREGISTEROBJECTNVPROC GLeeFuncPtr_wglDXUnregisterObjectNV; #define wglDXUnregisterObjectNV GLeeFuncPtr_wglDXUnregisterObjectNV #endif #ifndef GLEE_H_DEFINED_wglDXObjectAccessNV #define GLEE_H_DEFINED_wglDXObjectAccessNV typedef BOOL (APIENTRYP GLEEPFNWGLDXOBJECTACCESSNVPROC) (HANDLE hObject, GLenum access); GLEE_EXTERN GLEEPFNWGLDXOBJECTACCESSNVPROC GLeeFuncPtr_wglDXObjectAccessNV; #define wglDXObjectAccessNV GLeeFuncPtr_wglDXObjectAccessNV #endif #ifndef GLEE_H_DEFINED_wglDXLockObjectsNV #define GLEE_H_DEFINED_wglDXLockObjectsNV typedef BOOL (APIENTRYP GLEEPFNWGLDXLOCKOBJECTSNVPROC) (HANDLE hDevice, GLint count, HANDLE * hObjects); GLEE_EXTERN GLEEPFNWGLDXLOCKOBJECTSNVPROC GLeeFuncPtr_wglDXLockObjectsNV; #define wglDXLockObjectsNV GLeeFuncPtr_wglDXLockObjectsNV #endif #ifndef GLEE_H_DEFINED_wglDXUnlockObjectsNV #define GLEE_H_DEFINED_wglDXUnlockObjectsNV typedef BOOL (APIENTRYP GLEEPFNWGLDXUNLOCKOBJECTSNVPROC) (HANDLE hDevice, GLint count, HANDLE * hObjects); GLEE_EXTERN GLEEPFNWGLDXUNLOCKOBJECTSNVPROC GLeeFuncPtr_wglDXUnlockObjectsNV; #define wglDXUnlockObjectsNV GLeeFuncPtr_wglDXUnlockObjectsNV #endif #endif /* WGL_NV_DX_interop2 */ #ifndef WGL_NV_DX_interop2 #define WGL_NV_DX_interop2 1 #define __GLEE_WGL_NV_DX_interop2 1 /* Constants */ #endif /* WGL_EXT_swap_control_tear */ #ifndef WGL_EXT_swap_control_tear #define WGL_EXT_swap_control_tear 1 #define __GLEE_WGL_EXT_swap_control_tear 1 /* Constants */ #endif /* WGL_EXT_display_color_table */ #ifndef WGL_EXT_display_color_table #define WGL_EXT_display_color_table 1 #define __GLEE_WGL_EXT_display_color_table 1 /* Constants */ #ifndef GLEE_H_DEFINED_wglCreateDisplayColorTableEXT #define GLEE_H_DEFINED_wglCreateDisplayColorTableEXT typedef GLboolean (APIENTRYP GLEEPFNWGLCREATEDISPLAYCOLORTABLEEXTPROC) (GLushort id); GLEE_EXTERN GLEEPFNWGLCREATEDISPLAYCOLORTABLEEXTPROC GLeeFuncPtr_wglCreateDisplayColorTableEXT; #define wglCreateDisplayColorTableEXT GLeeFuncPtr_wglCreateDisplayColorTableEXT #endif #ifndef GLEE_H_DEFINED_wglLoadDisplayColorTableEXT #define GLEE_H_DEFINED_wglLoadDisplayColorTableEXT typedef GLboolean (APIENTRYP GLEEPFNWGLLOADDISPLAYCOLORTABLEEXTPROC) (const GLushort * table, GLuint length); GLEE_EXTERN GLEEPFNWGLLOADDISPLAYCOLORTABLEEXTPROC GLeeFuncPtr_wglLoadDisplayColorTableEXT; #define wglLoadDisplayColorTableEXT GLeeFuncPtr_wglLoadDisplayColorTableEXT #endif #ifndef GLEE_H_DEFINED_wglBindDisplayColorTableEXT #define GLEE_H_DEFINED_wglBindDisplayColorTableEXT typedef GLboolean (APIENTRYP GLEEPFNWGLBINDDISPLAYCOLORTABLEEXTPROC) (GLushort id); GLEE_EXTERN GLEEPFNWGLBINDDISPLAYCOLORTABLEEXTPROC GLeeFuncPtr_wglBindDisplayColorTableEXT; #define wglBindDisplayColorTableEXT GLeeFuncPtr_wglBindDisplayColorTableEXT #endif #ifndef GLEE_H_DEFINED_wglDestroyDisplayColorTableEXT #define GLEE_H_DEFINED_wglDestroyDisplayColorTableEXT typedef VOID (APIENTRYP GLEEPFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC) (GLushort id); GLEE_EXTERN GLEEPFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC GLeeFuncPtr_wglDestroyDisplayColorTableEXT; #define wglDestroyDisplayColorTableEXT GLeeFuncPtr_wglDestroyDisplayColorTableEXT #endif #endif /* WGL_EXT_extensions_string */ #ifndef WGL_EXT_extensions_string #define WGL_EXT_extensions_string 1 #define __GLEE_WGL_EXT_extensions_string 1 /* Constants */ #ifndef GLEE_H_DEFINED_wglGetExtensionsStringEXT #define GLEE_H_DEFINED_wglGetExtensionsStringEXT typedef const char * (APIENTRYP GLEEPFNWGLGETEXTENSIONSSTRINGEXTPROC) (); GLEE_EXTERN GLEEPFNWGLGETEXTENSIONSSTRINGEXTPROC GLeeFuncPtr_wglGetExtensionsStringEXT; #define wglGetExtensionsStringEXT GLeeFuncPtr_wglGetExtensionsStringEXT #endif #endif /* WGL_EXT_swap_control */ #ifndef WGL_EXT_swap_control #define WGL_EXT_swap_control 1 #define __GLEE_WGL_EXT_swap_control 1 /* Constants */ #ifndef GLEE_H_DEFINED_wglSwapIntervalEXT #define GLEE_H_DEFINED_wglSwapIntervalEXT typedef BOOL (APIENTRYP GLEEPFNWGLSWAPINTERVALEXTPROC) (int interval); GLEE_EXTERN GLEEPFNWGLSWAPINTERVALEXTPROC GLeeFuncPtr_wglSwapIntervalEXT; #define wglSwapIntervalEXT GLeeFuncPtr_wglSwapIntervalEXT #endif #ifndef GLEE_H_DEFINED_wglGetSwapIntervalEXT #define GLEE_H_DEFINED_wglGetSwapIntervalEXT typedef int (APIENTRYP GLEEPFNWGLGETSWAPINTERVALEXTPROC) (); GLEE_EXTERN GLEEPFNWGLGETSWAPINTERVALEXTPROC GLeeFuncPtr_wglGetSwapIntervalEXT; #define wglGetSwapIntervalEXT GLeeFuncPtr_wglGetSwapIntervalEXT #endif #endif /* WGL_NV_vertex_array_range */ #ifndef WGL_NV_vertex_array_range #define WGL_NV_vertex_array_range 1 #define __GLEE_WGL_NV_vertex_array_range 1 /* Constants */ #ifndef GLEE_H_DEFINED_wglAllocateMemoryNV #define GLEE_H_DEFINED_wglAllocateMemoryNV typedef void* (APIENTRYP GLEEPFNWGLALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority); GLEE_EXTERN GLEEPFNWGLALLOCATEMEMORYNVPROC GLeeFuncPtr_wglAllocateMemoryNV; #define wglAllocateMemoryNV GLeeFuncPtr_wglAllocateMemoryNV #endif #ifndef GLEE_H_DEFINED_wglFreeMemoryNV #define GLEE_H_DEFINED_wglFreeMemoryNV typedef void (APIENTRYP GLEEPFNWGLFREEMEMORYNVPROC) (void * pointer); GLEE_EXTERN GLEEPFNWGLFREEMEMORYNVPROC GLeeFuncPtr_wglFreeMemoryNV; #define wglFreeMemoryNV GLeeFuncPtr_wglFreeMemoryNV #endif #endif /* WGL_OML_sync_control */ #ifndef WGL_OML_sync_control #define WGL_OML_sync_control 1 #define __GLEE_WGL_OML_sync_control 1 /* Constants */ #ifndef GLEE_H_DEFINED_wglGetSyncValuesOML #define GLEE_H_DEFINED_wglGetSyncValuesOML typedef BOOL (APIENTRYP GLEEPFNWGLGETSYNCVALUESOMLPROC) (HDC hdc, INT64 * ust, INT64 * msc, INT64 * sbc); GLEE_EXTERN GLEEPFNWGLGETSYNCVALUESOMLPROC GLeeFuncPtr_wglGetSyncValuesOML; #define wglGetSyncValuesOML GLeeFuncPtr_wglGetSyncValuesOML #endif #ifndef GLEE_H_DEFINED_wglGetMscRateOML #define GLEE_H_DEFINED_wglGetMscRateOML typedef BOOL (APIENTRYP GLEEPFNWGLGETMSCRATEOMLPROC) (HDC hdc, INT32 * numerator, INT32 * denominator); GLEE_EXTERN GLEEPFNWGLGETMSCRATEOMLPROC GLeeFuncPtr_wglGetMscRateOML; #define wglGetMscRateOML GLeeFuncPtr_wglGetMscRateOML #endif #ifndef GLEE_H_DEFINED_wglSwapBuffersMscOML #define GLEE_H_DEFINED_wglSwapBuffersMscOML typedef INT64 (APIENTRYP GLEEPFNWGLSWAPBUFFERSMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder); GLEE_EXTERN GLEEPFNWGLSWAPBUFFERSMSCOMLPROC GLeeFuncPtr_wglSwapBuffersMscOML; #define wglSwapBuffersMscOML GLeeFuncPtr_wglSwapBuffersMscOML #endif #ifndef GLEE_H_DEFINED_wglSwapLayerBuffersMscOML #define GLEE_H_DEFINED_wglSwapLayerBuffersMscOML typedef INT64 (APIENTRYP GLEEPFNWGLSWAPLAYERBUFFERSMSCOMLPROC) (HDC hdc, int fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder); GLEE_EXTERN GLEEPFNWGLSWAPLAYERBUFFERSMSCOMLPROC GLeeFuncPtr_wglSwapLayerBuffersMscOML; #define wglSwapLayerBuffersMscOML GLeeFuncPtr_wglSwapLayerBuffersMscOML #endif #ifndef GLEE_H_DEFINED_wglWaitForMscOML #define GLEE_H_DEFINED_wglWaitForMscOML typedef BOOL (APIENTRYP GLEEPFNWGLWAITFORMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 * ust, INT64 * msc, INT64 * sbc); GLEE_EXTERN GLEEPFNWGLWAITFORMSCOMLPROC GLeeFuncPtr_wglWaitForMscOML; #define wglWaitForMscOML GLeeFuncPtr_wglWaitForMscOML #endif #ifndef GLEE_H_DEFINED_wglWaitForSbcOML #define GLEE_H_DEFINED_wglWaitForSbcOML typedef BOOL (APIENTRYP GLEEPFNWGLWAITFORSBCOMLPROC) (HDC hdc, INT64 target_sbc, INT64 * ust, INT64 * msc, INT64 * sbc); GLEE_EXTERN GLEEPFNWGLWAITFORSBCOMLPROC GLeeFuncPtr_wglWaitForSbcOML; #define wglWaitForSbcOML GLeeFuncPtr_wglWaitForSbcOML #endif #endif /* WGL_I3D_swap_frame_usage */ #ifndef WGL_I3D_swap_frame_usage #define WGL_I3D_swap_frame_usage 1 #define __GLEE_WGL_I3D_swap_frame_usage 1 /* Constants */ #ifndef GLEE_H_DEFINED_wglGetFrameUsageI3D #define GLEE_H_DEFINED_wglGetFrameUsageI3D typedef BOOL (APIENTRYP GLEEPFNWGLGETFRAMEUSAGEI3DPROC) (float * pUsage); GLEE_EXTERN GLEEPFNWGLGETFRAMEUSAGEI3DPROC GLeeFuncPtr_wglGetFrameUsageI3D; #define wglGetFrameUsageI3D GLeeFuncPtr_wglGetFrameUsageI3D #endif #ifndef GLEE_H_DEFINED_wglBeginFrameTrackingI3D #define GLEE_H_DEFINED_wglBeginFrameTrackingI3D typedef BOOL (APIENTRYP GLEEPFNWGLBEGINFRAMETRACKINGI3DPROC) (); GLEE_EXTERN GLEEPFNWGLBEGINFRAMETRACKINGI3DPROC GLeeFuncPtr_wglBeginFrameTrackingI3D; #define wglBeginFrameTrackingI3D GLeeFuncPtr_wglBeginFrameTrackingI3D #endif #ifndef GLEE_H_DEFINED_wglEndFrameTrackingI3D #define GLEE_H_DEFINED_wglEndFrameTrackingI3D typedef BOOL (APIENTRYP GLEEPFNWGLENDFRAMETRACKINGI3DPROC) (); GLEE_EXTERN GLEEPFNWGLENDFRAMETRACKINGI3DPROC GLeeFuncPtr_wglEndFrameTrackingI3D; #define wglEndFrameTrackingI3D GLeeFuncPtr_wglEndFrameTrackingI3D #endif #ifndef GLEE_H_DEFINED_wglQueryFrameTrackingI3D #define GLEE_H_DEFINED_wglQueryFrameTrackingI3D typedef BOOL (APIENTRYP GLEEPFNWGLQUERYFRAMETRACKINGI3DPROC) (DWORD * pFrameCount, DWORD * pMissedFrames, float * pLastMissedUsage); GLEE_EXTERN GLEEPFNWGLQUERYFRAMETRACKINGI3DPROC GLeeFuncPtr_wglQueryFrameTrackingI3D; #define wglQueryFrameTrackingI3D GLeeFuncPtr_wglQueryFrameTrackingI3D #endif #endif /* WGL_NV_video_output */ #ifndef WGL_NV_video_output #define WGL_NV_video_output 1 #define __GLEE_WGL_NV_video_output 1 /* Constants */ #ifndef GLEE_H_DEFINED_wglGetVideoDeviceNV #define GLEE_H_DEFINED_wglGetVideoDeviceNV typedef BOOL (APIENTRYP GLEEPFNWGLGETVIDEODEVICENVPROC) (HDC hDC, int numDevices, HPVIDEODEV * hVideoDevice); GLEE_EXTERN GLEEPFNWGLGETVIDEODEVICENVPROC GLeeFuncPtr_wglGetVideoDeviceNV; #define wglGetVideoDeviceNV GLeeFuncPtr_wglGetVideoDeviceNV #endif #ifndef GLEE_H_DEFINED_wglReleaseVideoDeviceNV #define GLEE_H_DEFINED_wglReleaseVideoDeviceNV typedef BOOL (APIENTRYP GLEEPFNWGLRELEASEVIDEODEVICENVPROC) (HPVIDEODEV hVideoDevice); GLEE_EXTERN GLEEPFNWGLRELEASEVIDEODEVICENVPROC GLeeFuncPtr_wglReleaseVideoDeviceNV; #define wglReleaseVideoDeviceNV GLeeFuncPtr_wglReleaseVideoDeviceNV #endif #ifndef GLEE_H_DEFINED_wglBindVideoImageNV #define GLEE_H_DEFINED_wglBindVideoImageNV typedef BOOL (APIENTRYP GLEEPFNWGLBINDVIDEOIMAGENVPROC) (HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer); GLEE_EXTERN GLEEPFNWGLBINDVIDEOIMAGENVPROC GLeeFuncPtr_wglBindVideoImageNV; #define wglBindVideoImageNV GLeeFuncPtr_wglBindVideoImageNV #endif #ifndef GLEE_H_DEFINED_wglReleaseVideoImageNV #define GLEE_H_DEFINED_wglReleaseVideoImageNV typedef BOOL (APIENTRYP GLEEPFNWGLRELEASEVIDEOIMAGENVPROC) (HPBUFFERARB hPbuffer, int iVideoBuffer); GLEE_EXTERN GLEEPFNWGLRELEASEVIDEOIMAGENVPROC GLeeFuncPtr_wglReleaseVideoImageNV; #define wglReleaseVideoImageNV GLeeFuncPtr_wglReleaseVideoImageNV #endif #ifndef GLEE_H_DEFINED_wglSendPbufferToVideoNV #define GLEE_H_DEFINED_wglSendPbufferToVideoNV typedef BOOL (APIENTRYP GLEEPFNWGLSENDPBUFFERTOVIDEONVPROC) (HPBUFFERARB hPbuffer, int iBufferType, unsigned long * pulCounterPbuffer, BOOL bBlock); GLEE_EXTERN GLEEPFNWGLSENDPBUFFERTOVIDEONVPROC GLeeFuncPtr_wglSendPbufferToVideoNV; #define wglSendPbufferToVideoNV GLeeFuncPtr_wglSendPbufferToVideoNV #endif #ifndef GLEE_H_DEFINED_wglGetVideoInfoNV #define GLEE_H_DEFINED_wglGetVideoInfoNV typedef BOOL (APIENTRYP GLEEPFNWGLGETVIDEOINFONVPROC) (HPVIDEODEV hpVideoDevice, unsigned long * pulCounterOutputPbuffer, unsigned long * pulCounterOutputVideo); GLEE_EXTERN GLEEPFNWGLGETVIDEOINFONVPROC GLeeFuncPtr_wglGetVideoInfoNV; #define wglGetVideoInfoNV GLeeFuncPtr_wglGetVideoInfoNV #endif #endif #elif defined(__APPLE__) || defined(__APPLE_CC__) #else /* GLX */ /* Extension querying variables */ GLEE_EXTERN GLboolean _GLEE_GLX_VERSION_1_3; GLEE_EXTERN GLboolean _GLEE_GLX_VERSION_1_4; GLEE_EXTERN GLboolean _GLEE_GLX_ARB_multisample; GLEE_EXTERN GLboolean _GLEE_GLX_ARB_vertex_buffer_object; GLEE_EXTERN GLboolean _GLEE_GLX_ARB_fbconfig_float; GLEE_EXTERN GLboolean _GLEE_GLX_ARB_framebuffer_sRGB; GLEE_EXTERN GLboolean _GLEE_GLX_ARB_create_context; GLEE_EXTERN GLboolean _GLEE_GLX_ARB_create_context_profile; GLEE_EXTERN GLboolean _GLEE_GLX_ARB_create_context_robustness; GLEE_EXTERN GLboolean _GLEE_GLX_SGIS_multisample; GLEE_EXTERN GLboolean _GLEE_GLX_EXT_visual_info; GLEE_EXTERN GLboolean _GLEE_GLX_SGI_swap_control; GLEE_EXTERN GLboolean _GLEE_GLX_SGI_video_sync; GLEE_EXTERN GLboolean _GLEE_GLX_SGI_make_current_read; GLEE_EXTERN GLboolean _GLEE_GLX_EXT_visual_rating; GLEE_EXTERN GLboolean _GLEE_GLX_EXT_import_context; GLEE_EXTERN GLboolean _GLEE_GLX_SGIX_fbconfig; GLEE_EXTERN GLboolean _GLEE_GLX_SGIX_pbuffer; GLEE_EXTERN GLboolean _GLEE_GLX_SGI_cushion; GLEE_EXTERN GLboolean _GLEE_GLX_SGIX_video_resize; GLEE_EXTERN GLboolean _GLEE_GLX_SGIX_swap_group; GLEE_EXTERN GLboolean _GLEE_GLX_SGIX_swap_barrier; GLEE_EXTERN GLboolean _GLEE_GLX_SGIS_blended_overlay; GLEE_EXTERN GLboolean _GLEE_GLX_SGIS_shared_multisample; GLEE_EXTERN GLboolean _GLEE_GLX_SUN_get_transparent_index; GLEE_EXTERN GLboolean _GLEE_GLX_3DFX_multisample; GLEE_EXTERN GLboolean _GLEE_GLX_MESA_copy_sub_buffer; GLEE_EXTERN GLboolean _GLEE_GLX_MESA_pixmap_colormap; GLEE_EXTERN GLboolean _GLEE_GLX_MESA_release_buffers; GLEE_EXTERN GLboolean _GLEE_GLX_MESA_set_3dfx_mode; GLEE_EXTERN GLboolean _GLEE_GLX_SGIX_visual_select_group; GLEE_EXTERN GLboolean _GLEE_GLX_OML_swap_method; GLEE_EXTERN GLboolean _GLEE_GLX_OML_sync_control; GLEE_EXTERN GLboolean _GLEE_GLX_NV_float_buffer; GLEE_EXTERN GLboolean _GLEE_GLX_SGIX_hyperpipe; GLEE_EXTERN GLboolean _GLEE_GLX_MESA_agp_offset; GLEE_EXTERN GLboolean _GLEE_GLX_EXT_fbconfig_packed_float; GLEE_EXTERN GLboolean _GLEE_GLX_EXT_framebuffer_sRGB; GLEE_EXTERN GLboolean _GLEE_GLX_EXT_texture_from_pixmap; GLEE_EXTERN GLboolean _GLEE_GLX_NV_present_video; GLEE_EXTERN GLboolean _GLEE_GLX_NV_video_out; GLEE_EXTERN GLboolean _GLEE_GLX_NV_swap_group; GLEE_EXTERN GLboolean _GLEE_GLX_NV_video_capture; GLEE_EXTERN GLboolean _GLEE_GLX_EXT_swap_control; GLEE_EXTERN GLboolean _GLEE_GLX_NV_copy_image; GLEE_EXTERN GLboolean _GLEE_GLX_INTEL_swap_event; GLEE_EXTERN GLboolean _GLEE_GLX_NV_multisample_coverage; GLEE_EXTERN GLboolean _GLEE_GLX_AMD_gpu_association; GLEE_EXTERN GLboolean _GLEE_GLX_EXT_create_context_es2_profile; GLEE_EXTERN GLboolean _GLEE_GLX_EXT_create_context_es_profile; GLEE_EXTERN GLboolean _GLEE_GLX_EXT_swap_control_tear; GLEE_EXTERN GLboolean _GLEE_GLX_EXT_buffer_age; GLEE_EXTERN GLboolean _GLEE_GLX_NV_video_output; /* Aliases for extension querying variables */ #define GLEE_GLX_VERSION_1_3 GLeeEnabled(&_GLEE_GLX_VERSION_1_3) #define GLEE_GLX_VERSION_1_4 GLeeEnabled(&_GLEE_GLX_VERSION_1_4) #define GLEE_GLX_ARB_multisample GLeeEnabled(&_GLEE_GLX_ARB_multisample) #define GLEE_GLX_ARB_vertex_buffer_object GLeeEnabled(&_GLEE_GLX_ARB_vertex_buffer_object) #define GLEE_GLX_ARB_fbconfig_float GLeeEnabled(&_GLEE_GLX_ARB_fbconfig_float) #define GLEE_GLX_ARB_framebuffer_sRGB GLeeEnabled(&_GLEE_GLX_ARB_framebuffer_sRGB) #define GLEE_GLX_ARB_create_context GLeeEnabled(&_GLEE_GLX_ARB_create_context) #define GLEE_GLX_ARB_create_context_profile GLeeEnabled(&_GLEE_GLX_ARB_create_context_profile) #define GLEE_GLX_ARB_create_context_robustness GLeeEnabled(&_GLEE_GLX_ARB_create_context_robustness) #define GLEE_GLX_SGIS_multisample GLeeEnabled(&_GLEE_GLX_SGIS_multisample) #define GLEE_GLX_EXT_visual_info GLeeEnabled(&_GLEE_GLX_EXT_visual_info) #define GLEE_GLX_SGI_swap_control GLeeEnabled(&_GLEE_GLX_SGI_swap_control) #define GLEE_GLX_SGI_video_sync GLeeEnabled(&_GLEE_GLX_SGI_video_sync) #define GLEE_GLX_SGI_make_current_read GLeeEnabled(&_GLEE_GLX_SGI_make_current_read) #define GLEE_GLX_EXT_visual_rating GLeeEnabled(&_GLEE_GLX_EXT_visual_rating) #define GLEE_GLX_EXT_import_context GLeeEnabled(&_GLEE_GLX_EXT_import_context) #define GLEE_GLX_SGIX_fbconfig GLeeEnabled(&_GLEE_GLX_SGIX_fbconfig) #define GLEE_GLX_SGIX_pbuffer GLeeEnabled(&_GLEE_GLX_SGIX_pbuffer) #define GLEE_GLX_SGI_cushion GLeeEnabled(&_GLEE_GLX_SGI_cushion) #define GLEE_GLX_SGIX_video_resize GLeeEnabled(&_GLEE_GLX_SGIX_video_resize) #define GLEE_GLX_SGIX_swap_group GLeeEnabled(&_GLEE_GLX_SGIX_swap_group) #define GLEE_GLX_SGIX_swap_barrier GLeeEnabled(&_GLEE_GLX_SGIX_swap_barrier) #define GLEE_GLX_SGIS_blended_overlay GLeeEnabled(&_GLEE_GLX_SGIS_blended_overlay) #define GLEE_GLX_SGIS_shared_multisample GLeeEnabled(&_GLEE_GLX_SGIS_shared_multisample) #define GLEE_GLX_SUN_get_transparent_index GLeeEnabled(&_GLEE_GLX_SUN_get_transparent_index) #define GLEE_GLX_3DFX_multisample GLeeEnabled(&_GLEE_GLX_3DFX_multisample) #define GLEE_GLX_MESA_copy_sub_buffer GLeeEnabled(&_GLEE_GLX_MESA_copy_sub_buffer) #define GLEE_GLX_MESA_pixmap_colormap GLeeEnabled(&_GLEE_GLX_MESA_pixmap_colormap) #define GLEE_GLX_MESA_release_buffers GLeeEnabled(&_GLEE_GLX_MESA_release_buffers) #define GLEE_GLX_MESA_set_3dfx_mode GLeeEnabled(&_GLEE_GLX_MESA_set_3dfx_mode) #define GLEE_GLX_SGIX_visual_select_group GLeeEnabled(&_GLEE_GLX_SGIX_visual_select_group) #define GLEE_GLX_OML_swap_method GLeeEnabled(&_GLEE_GLX_OML_swap_method) #define GLEE_GLX_OML_sync_control GLeeEnabled(&_GLEE_GLX_OML_sync_control) #define GLEE_GLX_NV_float_buffer GLeeEnabled(&_GLEE_GLX_NV_float_buffer) #define GLEE_GLX_SGIX_hyperpipe GLeeEnabled(&_GLEE_GLX_SGIX_hyperpipe) #define GLEE_GLX_MESA_agp_offset GLeeEnabled(&_GLEE_GLX_MESA_agp_offset) #define GLEE_GLX_EXT_fbconfig_packed_float GLeeEnabled(&_GLEE_GLX_EXT_fbconfig_packed_float) #define GLEE_GLX_EXT_framebuffer_sRGB GLeeEnabled(&_GLEE_GLX_EXT_framebuffer_sRGB) #define GLEE_GLX_EXT_texture_from_pixmap GLeeEnabled(&_GLEE_GLX_EXT_texture_from_pixmap) #define GLEE_GLX_NV_present_video GLeeEnabled(&_GLEE_GLX_NV_present_video) #define GLEE_GLX_NV_video_out GLeeEnabled(&_GLEE_GLX_NV_video_out) #define GLEE_GLX_NV_swap_group GLeeEnabled(&_GLEE_GLX_NV_swap_group) #define GLEE_GLX_NV_video_capture GLeeEnabled(&_GLEE_GLX_NV_video_capture) #define GLEE_GLX_EXT_swap_control GLeeEnabled(&_GLEE_GLX_EXT_swap_control) #define GLEE_GLX_NV_copy_image GLeeEnabled(&_GLEE_GLX_NV_copy_image) #define GLEE_GLX_INTEL_swap_event GLeeEnabled(&_GLEE_GLX_INTEL_swap_event) #define GLEE_GLX_NV_multisample_coverage GLeeEnabled(&_GLEE_GLX_NV_multisample_coverage) #define GLEE_GLX_AMD_gpu_association GLeeEnabled(&_GLEE_GLX_AMD_gpu_association) #define GLEE_GLX_EXT_create_context_es2_profile GLeeEnabled(&_GLEE_GLX_EXT_create_context_es2_profile) #define GLEE_GLX_EXT_create_context_es_profile GLeeEnabled(&_GLEE_GLX_EXT_create_context_es_profile) #define GLEE_GLX_EXT_swap_control_tear GLeeEnabled(&_GLEE_GLX_EXT_swap_control_tear) #define GLEE_GLX_EXT_buffer_age GLeeEnabled(&_GLEE_GLX_EXT_buffer_age) #define GLEE_GLX_NV_video_output GLeeEnabled(&_GLEE_GLX_NV_video_output) /* GLX_VERSION_1_3 */ #ifndef GLX_VERSION_1_3 #define GLX_VERSION_1_3 1 #define __GLEE_GLX_VERSION_1_3 1 /* Constants */ #define GLX_WINDOW_BIT 0x00000001 #define GLX_PIXMAP_BIT 0x00000002 #define GLX_PBUFFER_BIT 0x00000004 #define GLX_RGBA_BIT 0x00000001 #define GLX_COLOR_INDEX_BIT 0x00000002 #define GLX_PBUFFER_CLOBBER_MASK 0x08000000 #define GLX_FRONT_LEFT_BUFFER_BIT 0x00000001 #define GLX_FRONT_RIGHT_BUFFER_BIT 0x00000002 #define GLX_BACK_LEFT_BUFFER_BIT 0x00000004 #define GLX_BACK_RIGHT_BUFFER_BIT 0x00000008 #define GLX_AUX_BUFFERS_BIT 0x00000010 #define GLX_DEPTH_BUFFER_BIT 0x00000020 #define GLX_STENCIL_BUFFER_BIT 0x00000040 #define GLX_ACCUM_BUFFER_BIT 0x00000080 #define GLX_CONFIG_CAVEAT 0x20 #define GLX_X_VISUAL_TYPE 0x22 #define GLX_TRANSPARENT_TYPE 0x23 #define GLX_TRANSPARENT_INDEX_VALUE 0x24 #define GLX_TRANSPARENT_RED_VALUE 0x25 #define GLX_TRANSPARENT_GREEN_VALUE 0x26 #define GLX_TRANSPARENT_BLUE_VALUE 0x27 #define GLX_TRANSPARENT_ALPHA_VALUE 0x28 #define GLX_DONT_CARE 0xFFFFFFFF #define GLX_NONE 0x8000 #define GLX_SLOW_CONFIG 0x8001 #define GLX_TRUE_COLOR 0x8002 #define GLX_DIRECT_COLOR 0x8003 #define GLX_PSEUDO_COLOR 0x8004 #define GLX_STATIC_COLOR 0x8005 #define GLX_GRAY_SCALE 0x8006 #define GLX_STATIC_GRAY 0x8007 #define GLX_TRANSPARENT_RGB 0x8008 #define GLX_TRANSPARENT_INDEX 0x8009 #define GLX_VISUAL_ID 0x800B #define GLX_SCREEN 0x800C #define GLX_NON_CONFORMANT_CONFIG 0x800D #define GLX_DRAWABLE_TYPE 0x8010 #define GLX_RENDER_TYPE 0x8011 #define GLX_X_RENDERABLE 0x8012 #define GLX_FBCONFIG_ID 0x8013 #define GLX_RGBA_TYPE 0x8014 #define GLX_COLOR_INDEX_TYPE 0x8015 #define GLX_MAX_PBUFFER_WIDTH 0x8016 #define GLX_MAX_PBUFFER_HEIGHT 0x8017 #define GLX_MAX_PBUFFER_PIXELS 0x8018 #define GLX_PRESERVED_CONTENTS 0x801B #define GLX_LARGEST_PBUFFER 0x801C #define GLX_WIDTH 0x801D #define GLX_HEIGHT 0x801E #define GLX_EVENT_MASK 0x801F #define GLX_DAMAGED 0x8020 #define GLX_SAVED 0x8021 #define GLX_WINDOW 0x8022 #define GLX_PBUFFER 0x8023 #define GLX_PBUFFER_HEIGHT 0x8040 #define GLX_PBUFFER_WIDTH 0x8041 #ifndef GLEE_H_DEFINED_glXGetFBConfigs #define GLEE_H_DEFINED_glXGetFBConfigs typedef GLXFBConfig * (APIENTRYP GLEEPFNGLXGETFBCONFIGSPROC) (Display * dpy, int screen, int * nelements); GLEE_EXTERN GLEEPFNGLXGETFBCONFIGSPROC GLeeFuncPtr_glXGetFBConfigs; #define glXGetFBConfigs GLeeFuncPtr_glXGetFBConfigs #endif #ifndef GLEE_H_DEFINED_glXChooseFBConfig #define GLEE_H_DEFINED_glXChooseFBConfig typedef GLXFBConfig * (APIENTRYP GLEEPFNGLXCHOOSEFBCONFIGPROC) (Display * dpy, int screen, const int * attrib_list, int * nelements); GLEE_EXTERN GLEEPFNGLXCHOOSEFBCONFIGPROC GLeeFuncPtr_glXChooseFBConfig; #define glXChooseFBConfig GLeeFuncPtr_glXChooseFBConfig #endif #ifndef GLEE_H_DEFINED_glXGetFBConfigAttrib #define GLEE_H_DEFINED_glXGetFBConfigAttrib typedef int (APIENTRYP GLEEPFNGLXGETFBCONFIGATTRIBPROC) (Display * dpy, GLXFBConfig config, int attribute, int * value); GLEE_EXTERN GLEEPFNGLXGETFBCONFIGATTRIBPROC GLeeFuncPtr_glXGetFBConfigAttrib; #define glXGetFBConfigAttrib GLeeFuncPtr_glXGetFBConfigAttrib #endif #ifndef GLEE_H_DEFINED_glXGetVisualFromFBConfig #define GLEE_H_DEFINED_glXGetVisualFromFBConfig typedef XVisualInfo * (APIENTRYP GLEEPFNGLXGETVISUALFROMFBCONFIGPROC) (Display * dpy, GLXFBConfig config); GLEE_EXTERN GLEEPFNGLXGETVISUALFROMFBCONFIGPROC GLeeFuncPtr_glXGetVisualFromFBConfig; #define glXGetVisualFromFBConfig GLeeFuncPtr_glXGetVisualFromFBConfig #endif #ifndef GLEE_H_DEFINED_glXCreateWindow #define GLEE_H_DEFINED_glXCreateWindow typedef GLXWindow (APIENTRYP GLEEPFNGLXCREATEWINDOWPROC) (Display * dpy, GLXFBConfig config, Window win, const int * attrib_list); GLEE_EXTERN GLEEPFNGLXCREATEWINDOWPROC GLeeFuncPtr_glXCreateWindow; #define glXCreateWindow GLeeFuncPtr_glXCreateWindow #endif #ifndef GLEE_H_DEFINED_glXDestroyWindow #define GLEE_H_DEFINED_glXDestroyWindow typedef void (APIENTRYP GLEEPFNGLXDESTROYWINDOWPROC) (Display * dpy, GLXWindow win); GLEE_EXTERN GLEEPFNGLXDESTROYWINDOWPROC GLeeFuncPtr_glXDestroyWindow; #define glXDestroyWindow GLeeFuncPtr_glXDestroyWindow #endif #ifndef GLEE_H_DEFINED_glXCreatePixmap #define GLEE_H_DEFINED_glXCreatePixmap typedef GLXPixmap (APIENTRYP GLEEPFNGLXCREATEPIXMAPPROC) (Display * dpy, GLXFBConfig config, Pixmap pixmap, const int * attrib_list); GLEE_EXTERN GLEEPFNGLXCREATEPIXMAPPROC GLeeFuncPtr_glXCreatePixmap; #define glXCreatePixmap GLeeFuncPtr_glXCreatePixmap #endif #ifndef GLEE_H_DEFINED_glXDestroyPixmap #define GLEE_H_DEFINED_glXDestroyPixmap typedef void (APIENTRYP GLEEPFNGLXDESTROYPIXMAPPROC) (Display * dpy, GLXPixmap pixmap); GLEE_EXTERN GLEEPFNGLXDESTROYPIXMAPPROC GLeeFuncPtr_glXDestroyPixmap; #define glXDestroyPixmap GLeeFuncPtr_glXDestroyPixmap #endif #ifndef GLEE_H_DEFINED_glXCreatePbuffer #define GLEE_H_DEFINED_glXCreatePbuffer typedef GLXPbuffer (APIENTRYP GLEEPFNGLXCREATEPBUFFERPROC) (Display * dpy, GLXFBConfig config, const int * attrib_list); GLEE_EXTERN GLEEPFNGLXCREATEPBUFFERPROC GLeeFuncPtr_glXCreatePbuffer; #define glXCreatePbuffer GLeeFuncPtr_glXCreatePbuffer #endif #ifndef GLEE_H_DEFINED_glXDestroyPbuffer #define GLEE_H_DEFINED_glXDestroyPbuffer typedef void (APIENTRYP GLEEPFNGLXDESTROYPBUFFERPROC) (Display * dpy, GLXPbuffer pbuf); GLEE_EXTERN GLEEPFNGLXDESTROYPBUFFERPROC GLeeFuncPtr_glXDestroyPbuffer; #define glXDestroyPbuffer GLeeFuncPtr_glXDestroyPbuffer #endif #ifndef GLEE_H_DEFINED_glXQueryDrawable #define GLEE_H_DEFINED_glXQueryDrawable typedef void (APIENTRYP GLEEPFNGLXQUERYDRAWABLEPROC) (Display * dpy, GLXDrawable draw, int attribute, unsigned int * value); GLEE_EXTERN GLEEPFNGLXQUERYDRAWABLEPROC GLeeFuncPtr_glXQueryDrawable; #define glXQueryDrawable GLeeFuncPtr_glXQueryDrawable #endif #ifndef GLEE_H_DEFINED_glXCreateNewContext #define GLEE_H_DEFINED_glXCreateNewContext typedef GLXContext (APIENTRYP GLEEPFNGLXCREATENEWCONTEXTPROC) (Display * dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct); GLEE_EXTERN GLEEPFNGLXCREATENEWCONTEXTPROC GLeeFuncPtr_glXCreateNewContext; #define glXCreateNewContext GLeeFuncPtr_glXCreateNewContext #endif #ifndef GLEE_H_DEFINED_glXMakeContextCurrent #define GLEE_H_DEFINED_glXMakeContextCurrent typedef Bool (APIENTRYP GLEEPFNGLXMAKECONTEXTCURRENTPROC) (Display * dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx); GLEE_EXTERN GLEEPFNGLXMAKECONTEXTCURRENTPROC GLeeFuncPtr_glXMakeContextCurrent; #define glXMakeContextCurrent GLeeFuncPtr_glXMakeContextCurrent #endif #ifndef GLEE_H_DEFINED_glXGetCurrentReadDrawable #define GLEE_H_DEFINED_glXGetCurrentReadDrawable typedef GLXDrawable (APIENTRYP GLEEPFNGLXGETCURRENTREADDRAWABLEPROC) (); GLEE_EXTERN GLEEPFNGLXGETCURRENTREADDRAWABLEPROC GLeeFuncPtr_glXGetCurrentReadDrawable; #define glXGetCurrentReadDrawable GLeeFuncPtr_glXGetCurrentReadDrawable #endif #ifndef GLEE_H_DEFINED_glXGetCurrentDisplay #define GLEE_H_DEFINED_glXGetCurrentDisplay typedef Display * (APIENTRYP GLEEPFNGLXGETCURRENTDISPLAYPROC) (); GLEE_EXTERN GLEEPFNGLXGETCURRENTDISPLAYPROC GLeeFuncPtr_glXGetCurrentDisplay; #define glXGetCurrentDisplay GLeeFuncPtr_glXGetCurrentDisplay #endif #ifndef GLEE_H_DEFINED_glXQueryContext #define GLEE_H_DEFINED_glXQueryContext typedef int (APIENTRYP GLEEPFNGLXQUERYCONTEXTPROC) (Display * dpy, GLXContext ctx, int attribute, int * value); GLEE_EXTERN GLEEPFNGLXQUERYCONTEXTPROC GLeeFuncPtr_glXQueryContext; #define glXQueryContext GLeeFuncPtr_glXQueryContext #endif #ifndef GLEE_H_DEFINED_glXSelectEvent #define GLEE_H_DEFINED_glXSelectEvent typedef void (APIENTRYP GLEEPFNGLXSELECTEVENTPROC) (Display * dpy, GLXDrawable draw, unsigned long event_mask); GLEE_EXTERN GLEEPFNGLXSELECTEVENTPROC GLeeFuncPtr_glXSelectEvent; #define glXSelectEvent GLeeFuncPtr_glXSelectEvent #endif #ifndef GLEE_H_DEFINED_glXGetSelectedEvent #define GLEE_H_DEFINED_glXGetSelectedEvent typedef void (APIENTRYP GLEEPFNGLXGETSELECTEDEVENTPROC) (Display * dpy, GLXDrawable draw, unsigned long * event_mask); GLEE_EXTERN GLEEPFNGLXGETSELECTEDEVENTPROC GLeeFuncPtr_glXGetSelectedEvent; #define glXGetSelectedEvent GLeeFuncPtr_glXGetSelectedEvent #endif #endif /* GLX_VERSION_1_4 */ #ifndef GLX_VERSION_1_4 #define GLX_VERSION_1_4 1 #define __GLEE_GLX_VERSION_1_4 1 /* Constants */ #define GLX_SAMPLE_BUFFERS 100000 #define GLX_SAMPLES 100001 #ifndef GLEE_H_DEFINED_glXGetProcAddress #define GLEE_H_DEFINED_glXGetProcAddress typedef __GLXextFuncPtr (APIENTRYP GLEEPFNGLXGETPROCADDRESSPROC) (const GLubyte * procName); GLEE_EXTERN GLEEPFNGLXGETPROCADDRESSPROC GLeeFuncPtr_glXGetProcAddress; #define glXGetProcAddress GLeeFuncPtr_glXGetProcAddress #endif #endif /* GLX_ARB_multisample */ #ifndef GLX_ARB_multisample #define GLX_ARB_multisample 1 #define __GLEE_GLX_ARB_multisample 1 /* Constants */ #define GLX_SAMPLE_BUFFERS_ARB 100000 #define GLX_SAMPLES_ARB 100001 #endif /* GLX_ARB_vertex_buffer_object */ #ifndef GLX_ARB_vertex_buffer_object #define GLX_ARB_vertex_buffer_object 1 #define __GLEE_GLX_ARB_vertex_buffer_object 1 /* Constants */ #define GLX_CONTEXT_ALLOW_BUFFER_BYTE_ORDER_MISMATCH_ARB 0x2095 #endif /* GLX_ARB_fbconfig_float */ #ifndef GLX_ARB_fbconfig_float #define GLX_ARB_fbconfig_float 1 #define __GLEE_GLX_ARB_fbconfig_float 1 /* Constants */ #define GLX_RGBA_FLOAT_TYPE_ARB 0x20B9 #define GLX_RGBA_FLOAT_BIT_ARB 0x00000004 #endif /* GLX_ARB_framebuffer_sRGB */ #ifndef GLX_ARB_framebuffer_sRGB #define GLX_ARB_framebuffer_sRGB 1 #define __GLEE_GLX_ARB_framebuffer_sRGB 1 /* Constants */ #define GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20B2 #endif /* GLX_ARB_create_context */ #ifndef GLX_ARB_create_context #define GLX_ARB_create_context 1 #define __GLEE_GLX_ARB_create_context 1 /* Constants */ #define GLX_CONTEXT_DEBUG_BIT_ARB 0x00000001 #define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002 #define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091 #define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092 #define GLX_CONTEXT_FLAGS_ARB 0x2094 #ifndef GLEE_H_DEFINED_glXCreateContextAttribsARB #define GLEE_H_DEFINED_glXCreateContextAttribsARB typedef GLXContext (APIENTRYP GLEEPFNGLXCREATECONTEXTATTRIBSARBPROC) (Display * dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int * attrib_list); GLEE_EXTERN GLEEPFNGLXCREATECONTEXTATTRIBSARBPROC GLeeFuncPtr_glXCreateContextAttribsARB; #define glXCreateContextAttribsARB GLeeFuncPtr_glXCreateContextAttribsARB #endif #endif /* GLX_ARB_create_context_profile */ #ifndef GLX_ARB_create_context_profile #define GLX_ARB_create_context_profile 1 #define __GLEE_GLX_ARB_create_context_profile 1 /* Constants */ #define GLX_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001 #define GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 #define GLX_CONTEXT_PROFILE_MASK_ARB 0x9126 #endif /* GLX_ARB_create_context_robustness */ #ifndef GLX_ARB_create_context_robustness #define GLX_ARB_create_context_robustness 1 #define __GLEE_GLX_ARB_create_context_robustness 1 /* Constants */ #define GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004 #define GLX_LOSE_CONTEXT_ON_RESET_ARB 0x8252 #define GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 #define GLX_NO_RESET_NOTIFICATION_ARB 0x8261 #endif /* GLX_SGIS_multisample */ #ifndef GLX_SGIS_multisample #define GLX_SGIS_multisample 1 #define __GLEE_GLX_SGIS_multisample 1 /* Constants */ #define GLX_SAMPLE_BUFFERS_SGIS 100000 #define GLX_SAMPLES_SGIS 100001 #endif /* GLX_EXT_visual_info */ #ifndef GLX_EXT_visual_info #define GLX_EXT_visual_info 1 #define __GLEE_GLX_EXT_visual_info 1 /* Constants */ #define GLX_X_VISUAL_TYPE_EXT 0x22 #define GLX_TRANSPARENT_TYPE_EXT 0x23 #define GLX_TRANSPARENT_INDEX_VALUE_EXT 0x24 #define GLX_TRANSPARENT_RED_VALUE_EXT 0x25 #define GLX_TRANSPARENT_GREEN_VALUE_EXT 0x26 #define GLX_TRANSPARENT_BLUE_VALUE_EXT 0x27 #define GLX_TRANSPARENT_ALPHA_VALUE_EXT 0x28 #define GLX_NONE_EXT 0x8000 #define GLX_TRUE_COLOR_EXT 0x8002 #define GLX_DIRECT_COLOR_EXT 0x8003 #define GLX_PSEUDO_COLOR_EXT 0x8004 #define GLX_STATIC_COLOR_EXT 0x8005 #define GLX_GRAY_SCALE_EXT 0x8006 #define GLX_STATIC_GRAY_EXT 0x8007 #define GLX_TRANSPARENT_RGB_EXT 0x8008 #define GLX_TRANSPARENT_INDEX_EXT 0x8009 #endif /* GLX_SGI_swap_control */ #ifndef GLX_SGI_swap_control #define GLX_SGI_swap_control 1 #define __GLEE_GLX_SGI_swap_control 1 /* Constants */ #ifndef GLEE_H_DEFINED_glXSwapIntervalSGI #define GLEE_H_DEFINED_glXSwapIntervalSGI typedef int (APIENTRYP GLEEPFNGLXSWAPINTERVALSGIPROC) (int interval); GLEE_EXTERN GLEEPFNGLXSWAPINTERVALSGIPROC GLeeFuncPtr_glXSwapIntervalSGI; #define glXSwapIntervalSGI GLeeFuncPtr_glXSwapIntervalSGI #endif #endif /* GLX_SGI_video_sync */ #ifndef GLX_SGI_video_sync #define GLX_SGI_video_sync 1 #define __GLEE_GLX_SGI_video_sync 1 /* Constants */ #ifndef GLEE_H_DEFINED_glXGetVideoSyncSGI #define GLEE_H_DEFINED_glXGetVideoSyncSGI typedef int (APIENTRYP GLEEPFNGLXGETVIDEOSYNCSGIPROC) (unsigned int * count); GLEE_EXTERN GLEEPFNGLXGETVIDEOSYNCSGIPROC GLeeFuncPtr_glXGetVideoSyncSGI; #define glXGetVideoSyncSGI GLeeFuncPtr_glXGetVideoSyncSGI #endif #ifndef GLEE_H_DEFINED_glXWaitVideoSyncSGI #define GLEE_H_DEFINED_glXWaitVideoSyncSGI typedef int (APIENTRYP GLEEPFNGLXWAITVIDEOSYNCSGIPROC) (int divisor, int remainder, unsigned int * count); GLEE_EXTERN GLEEPFNGLXWAITVIDEOSYNCSGIPROC GLeeFuncPtr_glXWaitVideoSyncSGI; #define glXWaitVideoSyncSGI GLeeFuncPtr_glXWaitVideoSyncSGI #endif #endif /* GLX_SGI_make_current_read */ #ifndef GLX_SGI_make_current_read #define GLX_SGI_make_current_read 1 #define __GLEE_GLX_SGI_make_current_read 1 /* Constants */ #ifndef GLEE_H_DEFINED_glXMakeCurrentReadSGI #define GLEE_H_DEFINED_glXMakeCurrentReadSGI typedef Bool (APIENTRYP GLEEPFNGLXMAKECURRENTREADSGIPROC) (Display * dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx); GLEE_EXTERN GLEEPFNGLXMAKECURRENTREADSGIPROC GLeeFuncPtr_glXMakeCurrentReadSGI; #define glXMakeCurrentReadSGI GLeeFuncPtr_glXMakeCurrentReadSGI #endif #ifndef GLEE_H_DEFINED_glXGetCurrentReadDrawableSGI #define GLEE_H_DEFINED_glXGetCurrentReadDrawableSGI typedef GLXDrawable (APIENTRYP GLEEPFNGLXGETCURRENTREADDRAWABLESGIPROC) (); GLEE_EXTERN GLEEPFNGLXGETCURRENTREADDRAWABLESGIPROC GLeeFuncPtr_glXGetCurrentReadDrawableSGI; #define glXGetCurrentReadDrawableSGI GLeeFuncPtr_glXGetCurrentReadDrawableSGI #endif #endif /* GLX_EXT_visual_rating */ #ifndef GLX_EXT_visual_rating #define GLX_EXT_visual_rating 1 #define __GLEE_GLX_EXT_visual_rating 1 /* Constants */ #define GLX_VISUAL_CAVEAT_EXT 0x20 #define GLX_SLOW_VISUAL_EXT 0x8001 #define GLX_NON_CONFORMANT_VISUAL_EXT 0x800D #endif /* GLX_EXT_import_context */ #ifndef GLX_EXT_import_context #define GLX_EXT_import_context 1 #define __GLEE_GLX_EXT_import_context 1 /* Constants */ #define GLX_SHARE_CONTEXT_EXT 0x800A #define GLX_VISUAL_ID_EXT 0x800B #define GLX_SCREEN_EXT 0x800C #ifndef GLEE_H_DEFINED_glXGetCurrentDisplayEXT #define GLEE_H_DEFINED_glXGetCurrentDisplayEXT typedef Display * (APIENTRYP GLEEPFNGLXGETCURRENTDISPLAYEXTPROC) (); GLEE_EXTERN GLEEPFNGLXGETCURRENTDISPLAYEXTPROC GLeeFuncPtr_glXGetCurrentDisplayEXT; #define glXGetCurrentDisplayEXT GLeeFuncPtr_glXGetCurrentDisplayEXT #endif #ifndef GLEE_H_DEFINED_glXQueryContextInfoEXT #define GLEE_H_DEFINED_glXQueryContextInfoEXT typedef int (APIENTRYP GLEEPFNGLXQUERYCONTEXTINFOEXTPROC) (Display * dpy, GLXContext context, int attribute, int * value); GLEE_EXTERN GLEEPFNGLXQUERYCONTEXTINFOEXTPROC GLeeFuncPtr_glXQueryContextInfoEXT; #define glXQueryContextInfoEXT GLeeFuncPtr_glXQueryContextInfoEXT #endif #ifndef GLEE_H_DEFINED_glXGetContextIDEXT #define GLEE_H_DEFINED_glXGetContextIDEXT typedef GLEE_GLXContextID (APIENTRYP GLEEPFNGLXGETCONTEXTIDEXTPROC) (const GLXContext context); GLEE_EXTERN GLEEPFNGLXGETCONTEXTIDEXTPROC GLeeFuncPtr_glXGetContextIDEXT; #define glXGetContextIDEXT GLeeFuncPtr_glXGetContextIDEXT #endif #ifndef GLEE_H_DEFINED_glXImportContextEXT #define GLEE_H_DEFINED_glXImportContextEXT typedef GLXContext (APIENTRYP GLEEPFNGLXIMPORTCONTEXTEXTPROC) (Display * dpy, GLEE_GLXContextID contextID); GLEE_EXTERN GLEEPFNGLXIMPORTCONTEXTEXTPROC GLeeFuncPtr_glXImportContextEXT; #define glXImportContextEXT GLeeFuncPtr_glXImportContextEXT #endif #ifndef GLEE_H_DEFINED_glXFreeContextEXT #define GLEE_H_DEFINED_glXFreeContextEXT typedef void (APIENTRYP GLEEPFNGLXFREECONTEXTEXTPROC) (Display * dpy, GLXContext context); GLEE_EXTERN GLEEPFNGLXFREECONTEXTEXTPROC GLeeFuncPtr_glXFreeContextEXT; #define glXFreeContextEXT GLeeFuncPtr_glXFreeContextEXT #endif #endif /* GLX_SGIX_fbconfig */ #ifndef GLX_SGIX_fbconfig #define GLX_SGIX_fbconfig 1 #define __GLEE_GLX_SGIX_fbconfig 1 /* Constants */ #define GLX_WINDOW_BIT_SGIX 0x00000001 #define GLX_PIXMAP_BIT_SGIX 0x00000002 #define GLX_RGBA_BIT_SGIX 0x00000001 #define GLX_COLOR_INDEX_BIT_SGIX 0x00000002 #define GLX_DRAWABLE_TYPE_SGIX 0x8010 #define GLX_RENDER_TYPE_SGIX 0x8011 #define GLX_X_RENDERABLE_SGIX 0x8012 #define GLX_FBCONFIG_ID_SGIX 0x8013 #define GLX_RGBA_TYPE_SGIX 0x8014 #define GLX_COLOR_INDEX_TYPE_SGIX 0x8015 #ifndef GLEE_H_DEFINED_glXGetFBConfigAttribSGIX #define GLEE_H_DEFINED_glXGetFBConfigAttribSGIX typedef int (APIENTRYP GLEEPFNGLXGETFBCONFIGATTRIBSGIXPROC) (Display * dpy, GLXFBConfigSGIX config, int attribute, int * value); GLEE_EXTERN GLEEPFNGLXGETFBCONFIGATTRIBSGIXPROC GLeeFuncPtr_glXGetFBConfigAttribSGIX; #define glXGetFBConfigAttribSGIX GLeeFuncPtr_glXGetFBConfigAttribSGIX #endif #ifndef GLEE_H_DEFINED_glXChooseFBConfigSGIX #define GLEE_H_DEFINED_glXChooseFBConfigSGIX typedef GLXFBConfigSGIX * (APIENTRYP GLEEPFNGLXCHOOSEFBCONFIGSGIXPROC) (Display * dpy, int screen, int * attrib_list, int * nelements); GLEE_EXTERN GLEEPFNGLXCHOOSEFBCONFIGSGIXPROC GLeeFuncPtr_glXChooseFBConfigSGIX; #define glXChooseFBConfigSGIX GLeeFuncPtr_glXChooseFBConfigSGIX #endif #ifndef GLEE_H_DEFINED_glXCreateGLXPixmapWithConfigSGIX #define GLEE_H_DEFINED_glXCreateGLXPixmapWithConfigSGIX typedef GLXPixmap (APIENTRYP GLEEPFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC) (Display * dpy, GLXFBConfigSGIX config, Pixmap pixmap); GLEE_EXTERN GLEEPFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC GLeeFuncPtr_glXCreateGLXPixmapWithConfigSGIX; #define glXCreateGLXPixmapWithConfigSGIX GLeeFuncPtr_glXCreateGLXPixmapWithConfigSGIX #endif #ifndef GLEE_H_DEFINED_glXCreateContextWithConfigSGIX #define GLEE_H_DEFINED_glXCreateContextWithConfigSGIX typedef GLXContext (APIENTRYP GLEEPFNGLXCREATECONTEXTWITHCONFIGSGIXPROC) (Display * dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct); GLEE_EXTERN GLEEPFNGLXCREATECONTEXTWITHCONFIGSGIXPROC GLeeFuncPtr_glXCreateContextWithConfigSGIX; #define glXCreateContextWithConfigSGIX GLeeFuncPtr_glXCreateContextWithConfigSGIX #endif #ifndef GLEE_H_DEFINED_glXGetVisualFromFBConfigSGIX #define GLEE_H_DEFINED_glXGetVisualFromFBConfigSGIX typedef XVisualInfo * (APIENTRYP GLEEPFNGLXGETVISUALFROMFBCONFIGSGIXPROC) (Display * dpy, GLXFBConfigSGIX config); GLEE_EXTERN GLEEPFNGLXGETVISUALFROMFBCONFIGSGIXPROC GLeeFuncPtr_glXGetVisualFromFBConfigSGIX; #define glXGetVisualFromFBConfigSGIX GLeeFuncPtr_glXGetVisualFromFBConfigSGIX #endif #ifndef GLEE_H_DEFINED_glXGetFBConfigFromVisualSGIX #define GLEE_H_DEFINED_glXGetFBConfigFromVisualSGIX typedef GLXFBConfigSGIX (APIENTRYP GLEEPFNGLXGETFBCONFIGFROMVISUALSGIXPROC) (Display * dpy, XVisualInfo * vis); GLEE_EXTERN GLEEPFNGLXGETFBCONFIGFROMVISUALSGIXPROC GLeeFuncPtr_glXGetFBConfigFromVisualSGIX; #define glXGetFBConfigFromVisualSGIX GLeeFuncPtr_glXGetFBConfigFromVisualSGIX #endif #endif /* GLX_SGIX_pbuffer */ #ifndef GLX_SGIX_pbuffer #define GLX_SGIX_pbuffer 1 #define __GLEE_GLX_SGIX_pbuffer 1 /* Constants */ #define GLX_PBUFFER_BIT_SGIX 0x00000004 #define GLX_BUFFER_CLOBBER_MASK_SGIX 0x08000000 #define GLX_FRONT_LEFT_BUFFER_BIT_SGIX 0x00000001 #define GLX_FRONT_RIGHT_BUFFER_BIT_SGIX 0x00000002 #define GLX_BACK_LEFT_BUFFER_BIT_SGIX 0x00000004 #define GLX_BACK_RIGHT_BUFFER_BIT_SGIX 0x00000008 #define GLX_AUX_BUFFERS_BIT_SGIX 0x00000010 #define GLX_DEPTH_BUFFER_BIT_SGIX 0x00000020 #define GLX_STENCIL_BUFFER_BIT_SGIX 0x00000040 #define GLX_ACCUM_BUFFER_BIT_SGIX 0x00000080 #define GLX_SAMPLE_BUFFERS_BIT_SGIX 0x00000100 #define GLX_MAX_PBUFFER_WIDTH_SGIX 0x8016 #define GLX_MAX_PBUFFER_HEIGHT_SGIX 0x8017 #define GLX_MAX_PBUFFER_PIXELS_SGIX 0x8018 #define GLX_OPTIMAL_PBUFFER_WIDTH_SGIX 0x8019 #define GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX 0x801A #define GLX_PRESERVED_CONTENTS_SGIX 0x801B #define GLX_LARGEST_PBUFFER_SGIX 0x801C #define GLX_WIDTH_SGIX 0x801D #define GLX_HEIGHT_SGIX 0x801E #define GLX_EVENT_MASK_SGIX 0x801F #define GLX_DAMAGED_SGIX 0x8020 #define GLX_SAVED_SGIX 0x8021 #define GLX_WINDOW_SGIX 0x8022 #define GLX_PBUFFER_SGIX 0x8023 #ifndef GLEE_H_DEFINED_glXCreateGLXPbufferSGIX #define GLEE_H_DEFINED_glXCreateGLXPbufferSGIX typedef GLXPbufferSGIX (APIENTRYP GLEEPFNGLXCREATEGLXPBUFFERSGIXPROC) (Display * dpy, GLXFBConfigSGIX config, unsigned int width, unsigned int height, int * attrib_list); GLEE_EXTERN GLEEPFNGLXCREATEGLXPBUFFERSGIXPROC GLeeFuncPtr_glXCreateGLXPbufferSGIX; #define glXCreateGLXPbufferSGIX GLeeFuncPtr_glXCreateGLXPbufferSGIX #endif #ifndef GLEE_H_DEFINED_glXDestroyGLXPbufferSGIX #define GLEE_H_DEFINED_glXDestroyGLXPbufferSGIX typedef void (APIENTRYP GLEEPFNGLXDESTROYGLXPBUFFERSGIXPROC) (Display * dpy, GLXPbufferSGIX pbuf); GLEE_EXTERN GLEEPFNGLXDESTROYGLXPBUFFERSGIXPROC GLeeFuncPtr_glXDestroyGLXPbufferSGIX; #define glXDestroyGLXPbufferSGIX GLeeFuncPtr_glXDestroyGLXPbufferSGIX #endif #ifndef GLEE_H_DEFINED_glXQueryGLXPbufferSGIX #define GLEE_H_DEFINED_glXQueryGLXPbufferSGIX typedef int (APIENTRYP GLEEPFNGLXQUERYGLXPBUFFERSGIXPROC) (Display * dpy, GLXPbufferSGIX pbuf, int attribute, unsigned int * value); GLEE_EXTERN GLEEPFNGLXQUERYGLXPBUFFERSGIXPROC GLeeFuncPtr_glXQueryGLXPbufferSGIX; #define glXQueryGLXPbufferSGIX GLeeFuncPtr_glXQueryGLXPbufferSGIX #endif #ifndef GLEE_H_DEFINED_glXSelectEventSGIX #define GLEE_H_DEFINED_glXSelectEventSGIX typedef void (APIENTRYP GLEEPFNGLXSELECTEVENTSGIXPROC) (Display * dpy, GLXDrawable drawable, unsigned long mask); GLEE_EXTERN GLEEPFNGLXSELECTEVENTSGIXPROC GLeeFuncPtr_glXSelectEventSGIX; #define glXSelectEventSGIX GLeeFuncPtr_glXSelectEventSGIX #endif #ifndef GLEE_H_DEFINED_glXGetSelectedEventSGIX #define GLEE_H_DEFINED_glXGetSelectedEventSGIX typedef void (APIENTRYP GLEEPFNGLXGETSELECTEDEVENTSGIXPROC) (Display * dpy, GLXDrawable drawable, unsigned long * mask); GLEE_EXTERN GLEEPFNGLXGETSELECTEDEVENTSGIXPROC GLeeFuncPtr_glXGetSelectedEventSGIX; #define glXGetSelectedEventSGIX GLeeFuncPtr_glXGetSelectedEventSGIX #endif #endif /* GLX_SGI_cushion */ #ifndef GLX_SGI_cushion #define GLX_SGI_cushion 1 #define __GLEE_GLX_SGI_cushion 1 /* Constants */ #ifndef GLEE_H_DEFINED_glXCushionSGI #define GLEE_H_DEFINED_glXCushionSGI typedef void (APIENTRYP GLEEPFNGLXCUSHIONSGIPROC) (Display * dpy, Window window, float cushion); GLEE_EXTERN GLEEPFNGLXCUSHIONSGIPROC GLeeFuncPtr_glXCushionSGI; #define glXCushionSGI GLeeFuncPtr_glXCushionSGI #endif #endif /* GLX_SGIX_video_resize */ #ifndef GLX_SGIX_video_resize #define GLX_SGIX_video_resize 1 #define __GLEE_GLX_SGIX_video_resize 1 /* Constants */ #define GLX_SYNC_FRAME_SGIX 0x00000000 #define GLX_SYNC_SWAP_SGIX 0x00000001 #ifndef GLEE_H_DEFINED_glXBindChannelToWindowSGIX #define GLEE_H_DEFINED_glXBindChannelToWindowSGIX typedef int (APIENTRYP GLEEPFNGLXBINDCHANNELTOWINDOWSGIXPROC) (Display * display, int screen, int channel, Window window); GLEE_EXTERN GLEEPFNGLXBINDCHANNELTOWINDOWSGIXPROC GLeeFuncPtr_glXBindChannelToWindowSGIX; #define glXBindChannelToWindowSGIX GLeeFuncPtr_glXBindChannelToWindowSGIX #endif #ifndef GLEE_H_DEFINED_glXChannelRectSGIX #define GLEE_H_DEFINED_glXChannelRectSGIX typedef int (APIENTRYP GLEEPFNGLXCHANNELRECTSGIXPROC) (Display * display, int screen, int channel, int x, int y, int w, int h); GLEE_EXTERN GLEEPFNGLXCHANNELRECTSGIXPROC GLeeFuncPtr_glXChannelRectSGIX; #define glXChannelRectSGIX GLeeFuncPtr_glXChannelRectSGIX #endif #ifndef GLEE_H_DEFINED_glXQueryChannelRectSGIX #define GLEE_H_DEFINED_glXQueryChannelRectSGIX typedef int (APIENTRYP GLEEPFNGLXQUERYCHANNELRECTSGIXPROC) (Display * display, int screen, int channel, int * dx, int * dy, int * dw, int * dh); GLEE_EXTERN GLEEPFNGLXQUERYCHANNELRECTSGIXPROC GLeeFuncPtr_glXQueryChannelRectSGIX; #define glXQueryChannelRectSGIX GLeeFuncPtr_glXQueryChannelRectSGIX #endif #ifndef GLEE_H_DEFINED_glXQueryChannelDeltasSGIX #define GLEE_H_DEFINED_glXQueryChannelDeltasSGIX typedef int (APIENTRYP GLEEPFNGLXQUERYCHANNELDELTASSGIXPROC) (Display * display, int screen, int channel, int * x, int * y, int * w, int * h); GLEE_EXTERN GLEEPFNGLXQUERYCHANNELDELTASSGIXPROC GLeeFuncPtr_glXQueryChannelDeltasSGIX; #define glXQueryChannelDeltasSGIX GLeeFuncPtr_glXQueryChannelDeltasSGIX #endif #ifndef GLEE_H_DEFINED_glXChannelRectSyncSGIX #define GLEE_H_DEFINED_glXChannelRectSyncSGIX typedef int (APIENTRYP GLEEPFNGLXCHANNELRECTSYNCSGIXPROC) (Display * display, int screen, int channel, GLenum synctype); GLEE_EXTERN GLEEPFNGLXCHANNELRECTSYNCSGIXPROC GLeeFuncPtr_glXChannelRectSyncSGIX; #define glXChannelRectSyncSGIX GLeeFuncPtr_glXChannelRectSyncSGIX #endif #endif /* GLX_SGIX_swap_group */ #ifndef GLX_SGIX_swap_group #define GLX_SGIX_swap_group 1 #define __GLEE_GLX_SGIX_swap_group 1 /* Constants */ #ifndef GLEE_H_DEFINED_glXJoinSwapGroupSGIX #define GLEE_H_DEFINED_glXJoinSwapGroupSGIX typedef void (APIENTRYP GLEEPFNGLXJOINSWAPGROUPSGIXPROC) (Display * dpy, GLXDrawable drawable, GLXDrawable member); GLEE_EXTERN GLEEPFNGLXJOINSWAPGROUPSGIXPROC GLeeFuncPtr_glXJoinSwapGroupSGIX; #define glXJoinSwapGroupSGIX GLeeFuncPtr_glXJoinSwapGroupSGIX #endif #endif /* GLX_SGIX_swap_barrier */ #ifndef GLX_SGIX_swap_barrier #define GLX_SGIX_swap_barrier 1 #define __GLEE_GLX_SGIX_swap_barrier 1 /* Constants */ #ifndef GLEE_H_DEFINED_glXBindSwapBarrierSGIX #define GLEE_H_DEFINED_glXBindSwapBarrierSGIX typedef void (APIENTRYP GLEEPFNGLXBINDSWAPBARRIERSGIXPROC) (Display * dpy, GLXDrawable drawable, int barrier); GLEE_EXTERN GLEEPFNGLXBINDSWAPBARRIERSGIXPROC GLeeFuncPtr_glXBindSwapBarrierSGIX; #define glXBindSwapBarrierSGIX GLeeFuncPtr_glXBindSwapBarrierSGIX #endif #ifndef GLEE_H_DEFINED_glXQueryMaxSwapBarriersSGIX #define GLEE_H_DEFINED_glXQueryMaxSwapBarriersSGIX typedef Bool (APIENTRYP GLEEPFNGLXQUERYMAXSWAPBARRIERSSGIXPROC) (Display * dpy, int screen, int * max); GLEE_EXTERN GLEEPFNGLXQUERYMAXSWAPBARRIERSSGIXPROC GLeeFuncPtr_glXQueryMaxSwapBarriersSGIX; #define glXQueryMaxSwapBarriersSGIX GLeeFuncPtr_glXQueryMaxSwapBarriersSGIX #endif #endif /* GLX_SGIS_blended_overlay */ #ifndef GLX_SGIS_blended_overlay #define GLX_SGIS_blended_overlay 1 #define __GLEE_GLX_SGIS_blended_overlay 1 /* Constants */ #define GLX_BLENDED_RGBA_SGIS 0x8025 #endif /* GLX_SGIS_shared_multisample */ #ifndef GLX_SGIS_shared_multisample #define GLX_SGIS_shared_multisample 1 #define __GLEE_GLX_SGIS_shared_multisample 1 /* Constants */ #define GLX_MULTISAMPLE_SUB_RECT_WIDTH_SGIS 0x8026 #define GLX_MULTISAMPLE_SUB_RECT_HEIGHT_SGIS 0x8027 #endif /* GLX_SUN_get_transparent_index */ #ifndef GLX_SUN_get_transparent_index #define GLX_SUN_get_transparent_index 1 #define __GLEE_GLX_SUN_get_transparent_index 1 /* Constants */ #ifndef GLEE_H_DEFINED_glXGetTransparentIndexSUN #define GLEE_H_DEFINED_glXGetTransparentIndexSUN typedef Status (APIENTRYP GLEEPFNGLXGETTRANSPARENTINDEXSUNPROC) (Display * dpy, Window overlay, Window underlay, long * pTransparentIndex); GLEE_EXTERN GLEEPFNGLXGETTRANSPARENTINDEXSUNPROC GLeeFuncPtr_glXGetTransparentIndexSUN; #define glXGetTransparentIndexSUN GLeeFuncPtr_glXGetTransparentIndexSUN #endif #endif /* GLX_3DFX_multisample */ #ifndef GLX_3DFX_multisample #define GLX_3DFX_multisample 1 #define __GLEE_GLX_3DFX_multisample 1 /* Constants */ #define GLX_SAMPLE_BUFFERS_3DFX 0x8050 #define GLX_SAMPLES_3DFX 0x8051 #endif /* GLX_MESA_copy_sub_buffer */ #ifndef GLX_MESA_copy_sub_buffer #define GLX_MESA_copy_sub_buffer 1 #define __GLEE_GLX_MESA_copy_sub_buffer 1 /* Constants */ #ifndef GLEE_H_DEFINED_glXCopySubBufferMESA #define GLEE_H_DEFINED_glXCopySubBufferMESA typedef void (APIENTRYP GLEEPFNGLXCOPYSUBBUFFERMESAPROC) (Display * dpy, GLXDrawable drawable, int x, int y, int width, int height); GLEE_EXTERN GLEEPFNGLXCOPYSUBBUFFERMESAPROC GLeeFuncPtr_glXCopySubBufferMESA; #define glXCopySubBufferMESA GLeeFuncPtr_glXCopySubBufferMESA #endif #endif /* GLX_MESA_pixmap_colormap */ #ifndef GLX_MESA_pixmap_colormap #define GLX_MESA_pixmap_colormap 1 #define __GLEE_GLX_MESA_pixmap_colormap 1 /* Constants */ #ifndef GLEE_H_DEFINED_glXCreateGLXPixmapMESA #define GLEE_H_DEFINED_glXCreateGLXPixmapMESA typedef GLXPixmap (APIENTRYP GLEEPFNGLXCREATEGLXPIXMAPMESAPROC) (Display * dpy, XVisualInfo * visual, Pixmap pixmap, Colormap cmap); GLEE_EXTERN GLEEPFNGLXCREATEGLXPIXMAPMESAPROC GLeeFuncPtr_glXCreateGLXPixmapMESA; #define glXCreateGLXPixmapMESA GLeeFuncPtr_glXCreateGLXPixmapMESA #endif #endif /* GLX_MESA_release_buffers */ #ifndef GLX_MESA_release_buffers #define GLX_MESA_release_buffers 1 #define __GLEE_GLX_MESA_release_buffers 1 /* Constants */ #ifndef GLEE_H_DEFINED_glXReleaseBuffersMESA #define GLEE_H_DEFINED_glXReleaseBuffersMESA typedef Bool (APIENTRYP GLEEPFNGLXRELEASEBUFFERSMESAPROC) (Display * dpy, GLXDrawable drawable); GLEE_EXTERN GLEEPFNGLXRELEASEBUFFERSMESAPROC GLeeFuncPtr_glXReleaseBuffersMESA; #define glXReleaseBuffersMESA GLeeFuncPtr_glXReleaseBuffersMESA #endif #endif /* GLX_MESA_set_3dfx_mode */ #ifndef GLX_MESA_set_3dfx_mode #define GLX_MESA_set_3dfx_mode 1 #define __GLEE_GLX_MESA_set_3dfx_mode 1 /* Constants */ #define GLX_3DFX_WINDOW_MODE_MESA 0x1 #define GLX_3DFX_FULLSCREEN_MODE_MESA 0x2 #ifndef GLEE_H_DEFINED_glXSet3DfxModeMESA #define GLEE_H_DEFINED_glXSet3DfxModeMESA typedef Bool (APIENTRYP GLEEPFNGLXSET3DFXMODEMESAPROC) (int mode); GLEE_EXTERN GLEEPFNGLXSET3DFXMODEMESAPROC GLeeFuncPtr_glXSet3DfxModeMESA; #define glXSet3DfxModeMESA GLeeFuncPtr_glXSet3DfxModeMESA #endif #endif /* GLX_SGIX_visual_select_group */ #ifndef GLX_SGIX_visual_select_group #define GLX_SGIX_visual_select_group 1 #define __GLEE_GLX_SGIX_visual_select_group 1 /* Constants */ #define GLX_VISUAL_SELECT_GROUP_SGIX 0x8028 #endif /* GLX_OML_swap_method */ #ifndef GLX_OML_swap_method #define GLX_OML_swap_method 1 #define __GLEE_GLX_OML_swap_method 1 /* Constants */ #define GLX_SWAP_METHOD_OML 0x8060 #define GLX_SWAP_EXCHANGE_OML 0x8061 #define GLX_SWAP_COPY_OML 0x8062 #define GLX_SWAP_UNDEFINED_OML 0x8063 #endif /* GLX_OML_sync_control */ #ifndef GLX_OML_sync_control #define GLX_OML_sync_control 1 #define __GLEE_GLX_OML_sync_control 1 /* Constants */ #ifndef GLEE_H_DEFINED_glXGetSyncValuesOML #define GLEE_H_DEFINED_glXGetSyncValuesOML typedef Bool (APIENTRYP GLEEPFNGLXGETSYNCVALUESOMLPROC) (Display * dpy, GLXDrawable drawable, int64_t * ust, int64_t * msc, int64_t * sbc); GLEE_EXTERN GLEEPFNGLXGETSYNCVALUESOMLPROC GLeeFuncPtr_glXGetSyncValuesOML; #define glXGetSyncValuesOML GLeeFuncPtr_glXGetSyncValuesOML #endif #ifndef GLEE_H_DEFINED_glXGetMscRateOML #define GLEE_H_DEFINED_glXGetMscRateOML typedef Bool (APIENTRYP GLEEPFNGLXGETMSCRATEOMLPROC) (Display * dpy, GLXDrawable drawable, int32_t * numerator, int32_t * denominator); GLEE_EXTERN GLEEPFNGLXGETMSCRATEOMLPROC GLeeFuncPtr_glXGetMscRateOML; #define glXGetMscRateOML GLeeFuncPtr_glXGetMscRateOML #endif #ifndef GLEE_H_DEFINED_glXSwapBuffersMscOML #define GLEE_H_DEFINED_glXSwapBuffersMscOML typedef int64_t (APIENTRYP GLEEPFNGLXSWAPBUFFERSMSCOMLPROC) (Display * dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder); GLEE_EXTERN GLEEPFNGLXSWAPBUFFERSMSCOMLPROC GLeeFuncPtr_glXSwapBuffersMscOML; #define glXSwapBuffersMscOML GLeeFuncPtr_glXSwapBuffersMscOML #endif #ifndef GLEE_H_DEFINED_glXWaitForMscOML #define GLEE_H_DEFINED_glXWaitForMscOML typedef Bool (APIENTRYP GLEEPFNGLXWAITFORMSCOMLPROC) (Display * dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t * ust, int64_t * msc, int64_t * sbc); GLEE_EXTERN GLEEPFNGLXWAITFORMSCOMLPROC GLeeFuncPtr_glXWaitForMscOML; #define glXWaitForMscOML GLeeFuncPtr_glXWaitForMscOML #endif #ifndef GLEE_H_DEFINED_glXWaitForSbcOML #define GLEE_H_DEFINED_glXWaitForSbcOML typedef Bool (APIENTRYP GLEEPFNGLXWAITFORSBCOMLPROC) (Display * dpy, GLXDrawable drawable, int64_t target_sbc, int64_t * ust, int64_t * msc, int64_t * sbc); GLEE_EXTERN GLEEPFNGLXWAITFORSBCOMLPROC GLeeFuncPtr_glXWaitForSbcOML; #define glXWaitForSbcOML GLeeFuncPtr_glXWaitForSbcOML #endif #endif /* GLX_NV_float_buffer */ #ifndef GLX_NV_float_buffer #define GLX_NV_float_buffer 1 #define __GLEE_GLX_NV_float_buffer 1 /* Constants */ #define GLX_FLOAT_COMPONENTS_NV 0x20B0 #endif /* GLX_SGIX_hyperpipe */ #ifndef GLX_SGIX_hyperpipe #define GLX_SGIX_hyperpipe 1 #define __GLEE_GLX_SGIX_hyperpipe 1 /* Constants */ #define GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX 80 #define GLX_BAD_HYPERPIPE_CONFIG_SGIX 91 #define GLX_BAD_HYPERPIPE_SGIX 92 #define GLX_HYPERPIPE_DISPLAY_PIPE_SGIX 0x00000001 #define GLX_HYPERPIPE_RENDER_PIPE_SGIX 0x00000002 #define GLX_PIPE_RECT_SGIX 0x00000001 #define GLX_PIPE_RECT_LIMITS_SGIX 0x00000002 #define GLX_HYPERPIPE_STEREO_SGIX 0x00000003 #define GLX_HYPERPIPE_PIXEL_AVERAGE_SGIX 0x00000004 #define GLX_HYPERPIPE_ID_SGIX 0x8030 #ifndef GLEE_H_DEFINED_glXQueryHyperpipeNetworkSGIX #define GLEE_H_DEFINED_glXQueryHyperpipeNetworkSGIX typedef GLXHyperpipeNetworkSGIX * (APIENTRYP GLEEPFNGLXQUERYHYPERPIPENETWORKSGIXPROC) (Display * dpy, int * npipes); GLEE_EXTERN GLEEPFNGLXQUERYHYPERPIPENETWORKSGIXPROC GLeeFuncPtr_glXQueryHyperpipeNetworkSGIX; #define glXQueryHyperpipeNetworkSGIX GLeeFuncPtr_glXQueryHyperpipeNetworkSGIX #endif #ifndef GLEE_H_DEFINED_glXHyperpipeConfigSGIX #define GLEE_H_DEFINED_glXHyperpipeConfigSGIX typedef int (APIENTRYP GLEEPFNGLXHYPERPIPECONFIGSGIXPROC) (Display * dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX * cfg, int * hpId); GLEE_EXTERN GLEEPFNGLXHYPERPIPECONFIGSGIXPROC GLeeFuncPtr_glXHyperpipeConfigSGIX; #define glXHyperpipeConfigSGIX GLeeFuncPtr_glXHyperpipeConfigSGIX #endif #ifndef GLEE_H_DEFINED_glXQueryHyperpipeConfigSGIX #define GLEE_H_DEFINED_glXQueryHyperpipeConfigSGIX typedef GLXHyperpipeConfigSGIX * (APIENTRYP GLEEPFNGLXQUERYHYPERPIPECONFIGSGIXPROC) (Display * dpy, int hpId, int * npipes); GLEE_EXTERN GLEEPFNGLXQUERYHYPERPIPECONFIGSGIXPROC GLeeFuncPtr_glXQueryHyperpipeConfigSGIX; #define glXQueryHyperpipeConfigSGIX GLeeFuncPtr_glXQueryHyperpipeConfigSGIX #endif #ifndef GLEE_H_DEFINED_glXDestroyHyperpipeConfigSGIX #define GLEE_H_DEFINED_glXDestroyHyperpipeConfigSGIX typedef int (APIENTRYP GLEEPFNGLXDESTROYHYPERPIPECONFIGSGIXPROC) (Display * dpy, int hpId); GLEE_EXTERN GLEEPFNGLXDESTROYHYPERPIPECONFIGSGIXPROC GLeeFuncPtr_glXDestroyHyperpipeConfigSGIX; #define glXDestroyHyperpipeConfigSGIX GLeeFuncPtr_glXDestroyHyperpipeConfigSGIX #endif #ifndef GLEE_H_DEFINED_glXBindHyperpipeSGIX #define GLEE_H_DEFINED_glXBindHyperpipeSGIX typedef int (APIENTRYP GLEEPFNGLXBINDHYPERPIPESGIXPROC) (Display * dpy, int hpId); GLEE_EXTERN GLEEPFNGLXBINDHYPERPIPESGIXPROC GLeeFuncPtr_glXBindHyperpipeSGIX; #define glXBindHyperpipeSGIX GLeeFuncPtr_glXBindHyperpipeSGIX #endif #ifndef GLEE_H_DEFINED_glXQueryHyperpipeBestAttribSGIX #define GLEE_H_DEFINED_glXQueryHyperpipeBestAttribSGIX typedef int (APIENTRYP GLEEPFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC) (Display * dpy, int timeSlice, int attrib, int size, void * attribList, void * returnAttribList); GLEE_EXTERN GLEEPFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC GLeeFuncPtr_glXQueryHyperpipeBestAttribSGIX; #define glXQueryHyperpipeBestAttribSGIX GLeeFuncPtr_glXQueryHyperpipeBestAttribSGIX #endif #ifndef GLEE_H_DEFINED_glXHyperpipeAttribSGIX #define GLEE_H_DEFINED_glXHyperpipeAttribSGIX typedef int (APIENTRYP GLEEPFNGLXHYPERPIPEATTRIBSGIXPROC) (Display * dpy, int timeSlice, int attrib, int size, void * attribList); GLEE_EXTERN GLEEPFNGLXHYPERPIPEATTRIBSGIXPROC GLeeFuncPtr_glXHyperpipeAttribSGIX; #define glXHyperpipeAttribSGIX GLeeFuncPtr_glXHyperpipeAttribSGIX #endif #ifndef GLEE_H_DEFINED_glXQueryHyperpipeAttribSGIX #define GLEE_H_DEFINED_glXQueryHyperpipeAttribSGIX typedef int (APIENTRYP GLEEPFNGLXQUERYHYPERPIPEATTRIBSGIXPROC) (Display * dpy, int timeSlice, int attrib, int size, void * returnAttribList); GLEE_EXTERN GLEEPFNGLXQUERYHYPERPIPEATTRIBSGIXPROC GLeeFuncPtr_glXQueryHyperpipeAttribSGIX; #define glXQueryHyperpipeAttribSGIX GLeeFuncPtr_glXQueryHyperpipeAttribSGIX #endif #endif /* GLX_MESA_agp_offset */ #ifndef GLX_MESA_agp_offset #define GLX_MESA_agp_offset 1 #define __GLEE_GLX_MESA_agp_offset 1 /* Constants */ #ifndef GLEE_H_DEFINED_glXGetAGPOffsetMESA #define GLEE_H_DEFINED_glXGetAGPOffsetMESA typedef unsigned int (APIENTRYP GLEEPFNGLXGETAGPOFFSETMESAPROC) (const void * pointer); GLEE_EXTERN GLEEPFNGLXGETAGPOFFSETMESAPROC GLeeFuncPtr_glXGetAGPOffsetMESA; #define glXGetAGPOffsetMESA GLeeFuncPtr_glXGetAGPOffsetMESA #endif #endif /* GLX_EXT_fbconfig_packed_float */ #ifndef GLX_EXT_fbconfig_packed_float #define GLX_EXT_fbconfig_packed_float 1 #define __GLEE_GLX_EXT_fbconfig_packed_float 1 /* Constants */ #define GLX_RGBA_UNSIGNED_FLOAT_TYPE_EXT 0x20B1 #define GLX_RGBA_UNSIGNED_FLOAT_BIT_EXT 0x00000008 #endif /* GLX_EXT_framebuffer_sRGB */ #ifndef GLX_EXT_framebuffer_sRGB #define GLX_EXT_framebuffer_sRGB 1 #define __GLEE_GLX_EXT_framebuffer_sRGB 1 /* Constants */ #define GLX_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20B2 #endif /* GLX_EXT_texture_from_pixmap */ #ifndef GLX_EXT_texture_from_pixmap #define GLX_EXT_texture_from_pixmap 1 #define __GLEE_GLX_EXT_texture_from_pixmap 1 /* Constants */ #define GLX_TEXTURE_1D_BIT_EXT 0x00000001 #define GLX_TEXTURE_2D_BIT_EXT 0x00000002 #define GLX_TEXTURE_RECTANGLE_BIT_EXT 0x00000004 #define GLX_BIND_TO_TEXTURE_RGB_EXT 0x20D0 #define GLX_BIND_TO_TEXTURE_RGBA_EXT 0x20D1 #define GLX_BIND_TO_MIPMAP_TEXTURE_EXT 0x20D2 #define GLX_BIND_TO_TEXTURE_TARGETS_EXT 0x20D3 #define GLX_Y_INVERTED_EXT 0x20D4 #define GLX_TEXTURE_FORMAT_EXT 0x20D5 #define GLX_TEXTURE_TARGET_EXT 0x20D6 #define GLX_MIPMAP_TEXTURE_EXT 0x20D7 #define GLX_TEXTURE_FORMAT_NONE_EXT 0x20D8 #define GLX_TEXTURE_FORMAT_RGB_EXT 0x20D9 #define GLX_TEXTURE_FORMAT_RGBA_EXT 0x20DA #define GLX_TEXTURE_1D_EXT 0x20DB #define GLX_TEXTURE_2D_EXT 0x20DC #define GLX_TEXTURE_RECTANGLE_EXT 0x20DD #define GLX_FRONT_LEFT_EXT 0x20DE #define GLX_FRONT_RIGHT_EXT 0x20DF #define GLX_BACK_LEFT_EXT 0x20E0 #define GLX_BACK_RIGHT_EXT 0x20E1 #define GLX_FRONT_EXT GLX_FRONT_LEFT_EXT #define GLX_BACK_EXT GLX_BACK_LEFT_EXT #define GLX_AUX0_EXT 0x20E2 #define GLX_AUX1_EXT 0x20E3 #define GLX_AUX2_EXT 0x20E4 #define GLX_AUX3_EXT 0x20E5 #define GLX_AUX4_EXT 0x20E6 #define GLX_AUX5_EXT 0x20E7 #define GLX_AUX6_EXT 0x20E8 #define GLX_AUX7_EXT 0x20E9 #define GLX_AUX8_EXT 0x20EA #define GLX_AUX9_EXT 0x20EB #ifndef GLEE_H_DEFINED_glXBindTexImageEXT #define GLEE_H_DEFINED_glXBindTexImageEXT typedef void (APIENTRYP GLEEPFNGLXBINDTEXIMAGEEXTPROC) (Display * dpy, GLXDrawable drawable, int buffer, const int * attrib_list); GLEE_EXTERN GLEEPFNGLXBINDTEXIMAGEEXTPROC GLeeFuncPtr_glXBindTexImageEXT; #define glXBindTexImageEXT GLeeFuncPtr_glXBindTexImageEXT #endif #ifndef GLEE_H_DEFINED_glXReleaseTexImageEXT #define GLEE_H_DEFINED_glXReleaseTexImageEXT typedef void (APIENTRYP GLEEPFNGLXRELEASETEXIMAGEEXTPROC) (Display * dpy, GLXDrawable drawable, int buffer); GLEE_EXTERN GLEEPFNGLXRELEASETEXIMAGEEXTPROC GLeeFuncPtr_glXReleaseTexImageEXT; #define glXReleaseTexImageEXT GLeeFuncPtr_glXReleaseTexImageEXT #endif #endif /* GLX_NV_present_video */ #ifndef GLX_NV_present_video #define GLX_NV_present_video 1 #define __GLEE_GLX_NV_present_video 1 /* Constants */ #define GLX_NUM_VIDEO_SLOTS_NV 0x20F0 #ifndef GLEE_H_DEFINED_glXEnumerateVideoDevicesNV #define GLEE_H_DEFINED_glXEnumerateVideoDevicesNV typedef unsigned int * (APIENTRYP GLEEPFNGLXENUMERATEVIDEODEVICESNVPROC) (Display * dpy, int screen, int * nelements); GLEE_EXTERN GLEEPFNGLXENUMERATEVIDEODEVICESNVPROC GLeeFuncPtr_glXEnumerateVideoDevicesNV; #define glXEnumerateVideoDevicesNV GLeeFuncPtr_glXEnumerateVideoDevicesNV #endif #ifndef GLEE_H_DEFINED_glXBindVideoDeviceNV #define GLEE_H_DEFINED_glXBindVideoDeviceNV typedef int (APIENTRYP GLEEPFNGLXBINDVIDEODEVICENVPROC) (Display * dpy, unsigned int video_slot, unsigned int video_device, const int * attrib_list); GLEE_EXTERN GLEEPFNGLXBINDVIDEODEVICENVPROC GLeeFuncPtr_glXBindVideoDeviceNV; #define glXBindVideoDeviceNV GLeeFuncPtr_glXBindVideoDeviceNV #endif #endif /* GLX_NV_video_out */ #ifndef GLX_NV_video_out #define GLX_NV_video_out 1 #define __GLEE_GLX_NV_video_out 1 /* Constants */ #define GLX_VIDEO_OUT_COLOR_NV 0x20C3 #define GLX_VIDEO_OUT_ALPHA_NV 0x20C4 #define GLX_VIDEO_OUT_DEPTH_NV 0x20C5 #define GLX_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6 #define GLX_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7 #define GLX_VIDEO_OUT_FRAME_NV 0x20C8 #define GLX_VIDEO_OUT_FIELD_1_NV 0x20C9 #define GLX_VIDEO_OUT_FIELD_2_NV 0x20CA #define GLX_VIDEO_OUT_STACKED_FIELDS_1_2_NV 0x20CB #define GLX_VIDEO_OUT_STACKED_FIELDS_2_1_NV 0x20CC #endif /* GLX_NV_swap_group */ #ifndef GLX_NV_swap_group #define GLX_NV_swap_group 1 #define __GLEE_GLX_NV_swap_group 1 /* Constants */ #ifndef GLEE_H_DEFINED_glXJoinSwapGroupNV #define GLEE_H_DEFINED_glXJoinSwapGroupNV typedef Bool (APIENTRYP GLEEPFNGLXJOINSWAPGROUPNVPROC) (Display * dpy, GLXDrawable drawable, GLuint group); GLEE_EXTERN GLEEPFNGLXJOINSWAPGROUPNVPROC GLeeFuncPtr_glXJoinSwapGroupNV; #define glXJoinSwapGroupNV GLeeFuncPtr_glXJoinSwapGroupNV #endif #ifndef GLEE_H_DEFINED_glXBindSwapBarrierNV #define GLEE_H_DEFINED_glXBindSwapBarrierNV typedef Bool (APIENTRYP GLEEPFNGLXBINDSWAPBARRIERNVPROC) (Display * dpy, GLuint group, GLuint barrier); GLEE_EXTERN GLEEPFNGLXBINDSWAPBARRIERNVPROC GLeeFuncPtr_glXBindSwapBarrierNV; #define glXBindSwapBarrierNV GLeeFuncPtr_glXBindSwapBarrierNV #endif #ifndef GLEE_H_DEFINED_glXQuerySwapGroupNV #define GLEE_H_DEFINED_glXQuerySwapGroupNV typedef Bool (APIENTRYP GLEEPFNGLXQUERYSWAPGROUPNVPROC) (Display * dpy, GLXDrawable drawable, GLuint * group, GLuint * barrier); GLEE_EXTERN GLEEPFNGLXQUERYSWAPGROUPNVPROC GLeeFuncPtr_glXQuerySwapGroupNV; #define glXQuerySwapGroupNV GLeeFuncPtr_glXQuerySwapGroupNV #endif #ifndef GLEE_H_DEFINED_glXQueryMaxSwapGroupsNV #define GLEE_H_DEFINED_glXQueryMaxSwapGroupsNV typedef Bool (APIENTRYP GLEEPFNGLXQUERYMAXSWAPGROUPSNVPROC) (Display * dpy, int screen, GLuint * maxGroups, GLuint * maxBarriers); GLEE_EXTERN GLEEPFNGLXQUERYMAXSWAPGROUPSNVPROC GLeeFuncPtr_glXQueryMaxSwapGroupsNV; #define glXQueryMaxSwapGroupsNV GLeeFuncPtr_glXQueryMaxSwapGroupsNV #endif #ifndef GLEE_H_DEFINED_glXQueryFrameCountNV #define GLEE_H_DEFINED_glXQueryFrameCountNV typedef Bool (APIENTRYP GLEEPFNGLXQUERYFRAMECOUNTNVPROC) (Display * dpy, int screen, GLuint * count); GLEE_EXTERN GLEEPFNGLXQUERYFRAMECOUNTNVPROC GLeeFuncPtr_glXQueryFrameCountNV; #define glXQueryFrameCountNV GLeeFuncPtr_glXQueryFrameCountNV #endif #ifndef GLEE_H_DEFINED_glXResetFrameCountNV #define GLEE_H_DEFINED_glXResetFrameCountNV typedef Bool (APIENTRYP GLEEPFNGLXRESETFRAMECOUNTNVPROC) (Display * dpy, int screen); GLEE_EXTERN GLEEPFNGLXRESETFRAMECOUNTNVPROC GLeeFuncPtr_glXResetFrameCountNV; #define glXResetFrameCountNV GLeeFuncPtr_glXResetFrameCountNV #endif #endif /* GLX_NV_video_capture */ #ifndef GLX_NV_video_capture #define GLX_NV_video_capture 1 #define __GLEE_GLX_NV_video_capture 1 /* Constants */ #define GLX_DEVICE_ID_NV 0x20CD #define GLX_UNIQUE_ID_NV 0x20CE #define GLX_NUM_VIDEO_CAPTURE_SLOTS_NV 0x20CF #ifndef GLEE_H_DEFINED_glXBindVideoCaptureDeviceNV #define GLEE_H_DEFINED_glXBindVideoCaptureDeviceNV typedef int (APIENTRYP GLEEPFNGLXBINDVIDEOCAPTUREDEVICENVPROC) (Display * dpy, unsigned int video_capture_slot, GLXVideoCaptureDeviceNV device); GLEE_EXTERN GLEEPFNGLXBINDVIDEOCAPTUREDEVICENVPROC GLeeFuncPtr_glXBindVideoCaptureDeviceNV; #define glXBindVideoCaptureDeviceNV GLeeFuncPtr_glXBindVideoCaptureDeviceNV #endif #ifndef GLEE_H_DEFINED_glXEnumerateVideoCaptureDevicesNV #define GLEE_H_DEFINED_glXEnumerateVideoCaptureDevicesNV typedef GLXVideoCaptureDeviceNV * (APIENTRYP GLEEPFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC) (Display * dpy, int screen, int * nelements); GLEE_EXTERN GLEEPFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC GLeeFuncPtr_glXEnumerateVideoCaptureDevicesNV; #define glXEnumerateVideoCaptureDevicesNV GLeeFuncPtr_glXEnumerateVideoCaptureDevicesNV #endif #ifndef GLEE_H_DEFINED_glXLockVideoCaptureDeviceNV #define GLEE_H_DEFINED_glXLockVideoCaptureDeviceNV typedef void (APIENTRYP GLEEPFNGLXLOCKVIDEOCAPTUREDEVICENVPROC) (Display * dpy, GLXVideoCaptureDeviceNV device); GLEE_EXTERN GLEEPFNGLXLOCKVIDEOCAPTUREDEVICENVPROC GLeeFuncPtr_glXLockVideoCaptureDeviceNV; #define glXLockVideoCaptureDeviceNV GLeeFuncPtr_glXLockVideoCaptureDeviceNV #endif #ifndef GLEE_H_DEFINED_glXQueryVideoCaptureDeviceNV #define GLEE_H_DEFINED_glXQueryVideoCaptureDeviceNV typedef int (APIENTRYP GLEEPFNGLXQUERYVIDEOCAPTUREDEVICENVPROC) (Display * dpy, GLXVideoCaptureDeviceNV device, int attribute, int * value); GLEE_EXTERN GLEEPFNGLXQUERYVIDEOCAPTUREDEVICENVPROC GLeeFuncPtr_glXQueryVideoCaptureDeviceNV; #define glXQueryVideoCaptureDeviceNV GLeeFuncPtr_glXQueryVideoCaptureDeviceNV #endif #ifndef GLEE_H_DEFINED_glXReleaseVideoCaptureDeviceNV #define GLEE_H_DEFINED_glXReleaseVideoCaptureDeviceNV typedef void (APIENTRYP GLEEPFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC) (Display * dpy, GLXVideoCaptureDeviceNV device); GLEE_EXTERN GLEEPFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC GLeeFuncPtr_glXReleaseVideoCaptureDeviceNV; #define glXReleaseVideoCaptureDeviceNV GLeeFuncPtr_glXReleaseVideoCaptureDeviceNV #endif #endif /* GLX_EXT_swap_control */ #ifndef GLX_EXT_swap_control #define GLX_EXT_swap_control 1 #define __GLEE_GLX_EXT_swap_control 1 /* Constants */ #define GLX_SWAP_INTERVAL_EXT 0x20F1 #define GLX_MAX_SWAP_INTERVAL_EXT 0x20F2 #ifndef GLEE_H_DEFINED_glXSwapIntervalEXT #define GLEE_H_DEFINED_glXSwapIntervalEXT typedef void (APIENTRYP GLEEPFNGLXSWAPINTERVALEXTPROC) (Display * dpy, GLXDrawable drawable, int interval); GLEE_EXTERN GLEEPFNGLXSWAPINTERVALEXTPROC GLeeFuncPtr_glXSwapIntervalEXT; #define glXSwapIntervalEXT GLeeFuncPtr_glXSwapIntervalEXT #endif #endif /* GLX_NV_copy_image */ #ifndef GLX_NV_copy_image #define GLX_NV_copy_image 1 #define __GLEE_GLX_NV_copy_image 1 /* Constants */ #ifndef GLEE_H_DEFINED_glXCopyImageSubDataNV #define GLEE_H_DEFINED_glXCopyImageSubDataNV typedef void (APIENTRYP GLEEPFNGLXCOPYIMAGESUBDATANVPROC) (Display * dpy, GLXContext srcCtx, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLXContext dstCtx, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); GLEE_EXTERN GLEEPFNGLXCOPYIMAGESUBDATANVPROC GLeeFuncPtr_glXCopyImageSubDataNV; #define glXCopyImageSubDataNV GLeeFuncPtr_glXCopyImageSubDataNV #endif #endif /* GLX_INTEL_swap_event */ #ifndef GLX_INTEL_swap_event #define GLX_INTEL_swap_event 1 #define __GLEE_GLX_INTEL_swap_event 1 /* Constants */ #define GLX_BUFFER_SWAP_COMPLETE_INTEL_MASK 0x04000000 #define GLX_EXCHANGE_COMPLETE_INTEL 0x8180 #define GLX_COPY_COMPLETE_INTEL 0x8181 #define GLX_FLIP_COMPLETE_INTEL 0x8182 #endif /* GLX_NV_multisample_coverage */ #ifndef GLX_NV_multisample_coverage #define GLX_NV_multisample_coverage 1 #define __GLEE_GLX_NV_multisample_coverage 1 /* Constants */ #define GLX_COVERAGE_SAMPLES_NV 100001 #define GLX_COLOR_SAMPLES_NV 0x20B3 #endif /* GLX_AMD_gpu_association */ #ifndef GLX_AMD_gpu_association #define GLX_AMD_gpu_association 1 #define __GLEE_GLX_AMD_gpu_association 1 /* Constants */ #define GLX_GPU_VENDOR_AMD 0x1F00 #define GLX_GPU_RENDERER_STRING_AMD 0x1F01 #define GLX_GPU_OPENGL_VERSION_STRING_AMD 0x1F02 #define GLX_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2 #define GLX_GPU_RAM_AMD 0x21A3 #define GLX_GPU_CLOCK_AMD 0x21A4 #define GLX_GPU_NUM_PIPES_AMD 0x21A5 #define GLX_GPU_NUM_SIMD_AMD 0x21A6 #define GLX_GPU_NUM_RB_AMD 0x21A7 #define GLX_GPU_NUM_SPI_AMD 0x21A8 #endif /* GLX_EXT_create_context_es2_profile */ #ifndef GLX_EXT_create_context_es2_profile #define GLX_EXT_create_context_es2_profile 1 #define __GLEE_GLX_EXT_create_context_es2_profile 1 /* Constants */ #define GLX_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004 #endif /* GLX_EXT_create_context_es_profile */ #ifndef GLX_EXT_create_context_es_profile #define GLX_EXT_create_context_es_profile 1 #define __GLEE_GLX_EXT_create_context_es_profile 1 /* Constants */ #define GLX_CONTEXT_ES_PROFILE_BIT_EXT 0x00000004 #endif /* GLX_EXT_swap_control_tear */ #ifndef GLX_EXT_swap_control_tear #define GLX_EXT_swap_control_tear 1 #define __GLEE_GLX_EXT_swap_control_tear 1 /* Constants */ #define GLX_LATE_SWAPS_TEAR_EXT 0x20F3 #endif /* GLX_EXT_buffer_age */ #ifndef GLX_EXT_buffer_age #define GLX_EXT_buffer_age 1 #define __GLEE_GLX_EXT_buffer_age 1 /* Constants */ #define GLX_BACK_BUFFER_AGE_EXT 0x20F4 #endif /* GLX_NV_video_output */ #ifndef GLX_NV_video_output #define GLX_NV_video_output 1 #define __GLEE_GLX_NV_video_output 1 /* Constants */ #ifndef GLEE_H_DEFINED_glXGetVideoDeviceNV #define GLEE_H_DEFINED_glXGetVideoDeviceNV typedef int (APIENTRYP GLEEPFNGLXGETVIDEODEVICENVPROC) (Display * dpy, int screen, int numVideoDevices, GLXVideoDeviceNV * pVideoDevice); GLEE_EXTERN GLEEPFNGLXGETVIDEODEVICENVPROC GLeeFuncPtr_glXGetVideoDeviceNV; #define glXGetVideoDeviceNV GLeeFuncPtr_glXGetVideoDeviceNV #endif #ifndef GLEE_H_DEFINED_glXReleaseVideoDeviceNV #define GLEE_H_DEFINED_glXReleaseVideoDeviceNV typedef int (APIENTRYP GLEEPFNGLXRELEASEVIDEODEVICENVPROC) (Display * dpy, int screen, GLXVideoDeviceNV VideoDevice); GLEE_EXTERN GLEEPFNGLXRELEASEVIDEODEVICENVPROC GLeeFuncPtr_glXReleaseVideoDeviceNV; #define glXReleaseVideoDeviceNV GLeeFuncPtr_glXReleaseVideoDeviceNV #endif #ifndef GLEE_H_DEFINED_glXBindVideoImageNV #define GLEE_H_DEFINED_glXBindVideoImageNV typedef int (APIENTRYP GLEEPFNGLXBINDVIDEOIMAGENVPROC) (Display * dpy, GLXVideoDeviceNV VideoDevice, GLXPbuffer pbuf, int iVideoBuffer); GLEE_EXTERN GLEEPFNGLXBINDVIDEOIMAGENVPROC GLeeFuncPtr_glXBindVideoImageNV; #define glXBindVideoImageNV GLeeFuncPtr_glXBindVideoImageNV #endif #ifndef GLEE_H_DEFINED_glXReleaseVideoImageNV #define GLEE_H_DEFINED_glXReleaseVideoImageNV typedef int (APIENTRYP GLEEPFNGLXRELEASEVIDEOIMAGENVPROC) (Display * dpy, GLXPbuffer pbuf); GLEE_EXTERN GLEEPFNGLXRELEASEVIDEOIMAGENVPROC GLeeFuncPtr_glXReleaseVideoImageNV; #define glXReleaseVideoImageNV GLeeFuncPtr_glXReleaseVideoImageNV #endif #ifndef GLEE_H_DEFINED_glXSendPbufferToVideoNV #define GLEE_H_DEFINED_glXSendPbufferToVideoNV typedef int (APIENTRYP GLEEPFNGLXSENDPBUFFERTOVIDEONVPROC) (Display * dpy, GLXPbuffer pbuf, int iBufferType, unsigned long * pulCounterPbuffer, GLboolean bBlock); GLEE_EXTERN GLEEPFNGLXSENDPBUFFERTOVIDEONVPROC GLeeFuncPtr_glXSendPbufferToVideoNV; #define glXSendPbufferToVideoNV GLeeFuncPtr_glXSendPbufferToVideoNV #endif #ifndef GLEE_H_DEFINED_glXGetVideoInfoNV #define GLEE_H_DEFINED_glXGetVideoInfoNV typedef int (APIENTRYP GLEEPFNGLXGETVIDEOINFONVPROC) (Display * dpy, int screen, GLXVideoDeviceNV VideoDevice, unsigned long * pulCounterOutputPbuffer, unsigned long * pulCounterOutputVideo); GLEE_EXTERN GLEEPFNGLXGETVIDEOINFONVPROC GLeeFuncPtr_glXGetVideoInfoNV; #define glXGetVideoInfoNV GLeeFuncPtr_glXGetVideoInfoNV #endif #endif #endif /*end GLX */ /***************************************************************** * GLee functions *****************************************************************/ GLEE_EXTERN GLboolean GLeeInit( void ); GLEE_EXTERN GLint GLeeForceLink(const char * extensionName); GLEE_EXTERN const char * GLeeGetErrorString( void ); GLEE_EXTERN const char * GLeeGetExtStrGL( void ); GLEE_EXTERN GLboolean GLeeEnabled(GLboolean * extensionQueryingVariable); #ifdef _WIN32 GLEE_EXTERN const char * GLeeGetExtStrWGL( void ); #elif defined(__APPLE__) || defined(__APPLE_CC__) #else GLEE_EXTERN const char * GLeeGetExtStrGLX( void ); #endif #ifdef __cplusplus } /* end C linkage */ #endif #endif /* __glee_h_ defined */ fifengine-0.4.1/engine/core/gui/000077500000000000000000000000001304641216200164265ustar00rootroot00000000000000fifengine-0.4.1/engine/core/gui/cegui/000077500000000000000000000000001304641216200175225ustar00rootroot00000000000000fifengine-0.4.1/engine/core/gui/cegui/base/000077500000000000000000000000001304641216200204345ustar00rootroot00000000000000fifengine-0.4.1/engine/core/gui/cegui/base/ceguiinputprocessor.cpp000066400000000000000000000257701304641216200252670ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "ceguiinputprocessor.h" namespace FIFE { CEGuiInputProcessor::CEGuiInputProcessor() { initializeKeyMap(); } CEGuiInputProcessor::~CEGuiInputProcessor() { } bool CEGuiInputProcessor::onSdlEvent(SDL_Event& event) { bool consumed = false; switch(event.type) { case SDL_KEYUP: case SDL_KEYDOWN: consumed = processKeyInput(event); break; case SDL_TEXTINPUT: consumed = processTextInput(event); break; case SDL_MOUSEWHEEL: case SDL_MOUSEBUTTONUP: case SDL_MOUSEBUTTONDOWN: consumed = processMouseInput(event); break; case SDL_MOUSEMOTION: consumed = processMouseMotion(event); break; default: ; } return consumed; } bool CEGuiInputProcessor::processKeyInput(SDL_Event& event) { bool consumed = false; switch(event.type) { case SDL_KEYDOWN: if (m_keymap.find(event.key.keysym.sym) != m_keymap.end()) consumed |= CEGUI::System::getSingleton().getDefaultGUIContext().injectKeyDown(m_keymap[event.key.keysym.sym]); break; case SDL_KEYUP: if (m_keymap.find(event.key.keysym.sym) != m_keymap.end()) consumed = CEGUI::System::getSingleton().getDefaultGUIContext().injectKeyUp(m_keymap[event.key.keysym.sym]); break; default: ; } return consumed; } bool CEGuiInputProcessor::processTextInput(SDL_Event& event) { CEGUI::String character(event.text.text); bool consumed = CEGUI::System::getSingleton().getDefaultGUIContext().injectChar(character[0]); return consumed; } bool CEGuiInputProcessor::processMouseInput(SDL_Event& event) { bool consumed = false; switch(event.type) { case SDL_MOUSEBUTTONDOWN: { switch(event.button.button) { case SDL_BUTTON_LEFT: consumed = CEGUI::System::getSingleton().getDefaultGUIContext().injectMouseButtonDown(CEGUI::LeftButton); break; case SDL_BUTTON_RIGHT: consumed = CEGUI::System::getSingleton().getDefaultGUIContext().injectMouseButtonDown(CEGUI::RightButton); break; case SDL_BUTTON_MIDDLE: consumed = CEGUI::System::getSingleton().getDefaultGUIContext().injectMouseButtonDown(CEGUI::MiddleButton) ; break; default: ; } break; } case SDL_MOUSEBUTTONUP: { switch(event.button.button) { case SDL_BUTTON_LEFT: consumed = CEGUI::System::getSingleton().getDefaultGUIContext().injectMouseButtonUp(CEGUI::LeftButton); break; case SDL_BUTTON_RIGHT: consumed = CEGUI::System::getSingleton().getDefaultGUIContext().injectMouseButtonUp(CEGUI::RightButton); break; case SDL_BUTTON_MIDDLE: consumed = CEGUI::System::getSingleton().getDefaultGUIContext().injectMouseButtonUp(CEGUI::MiddleButton) ; break; default: ; } break; } case SDL_MOUSEWHEEL: { // mousewheel up or down int32_t wheelChange = event.wheel.y; if (wheelChange != 0) { /*if (event.wheel.direction == SDL_MOUSEWHEEL_FLIPPED) { wheelChange *= -1; }*/ consumed = CEGUI::System::getSingleton().getDefaultGUIContext().injectMouseWheelChange(wheelChange); } break; } default: ; } return consumed; } bool CEGuiInputProcessor::processMouseMotion(SDL_Event& event) { return CEGUI::System::getSingleton().getDefaultGUIContext().injectMousePosition(static_cast(event.motion.x), static_cast(event.motion.y)); } void CEGuiInputProcessor::initializeKeyMap() { m_keymap[SDLK_1] = CEGUI::Key::One; m_keymap[SDLK_2] = CEGUI::Key::Two; m_keymap[SDLK_3] = CEGUI::Key::Three; m_keymap[SDLK_4] = CEGUI::Key::Four; m_keymap[SDLK_5] = CEGUI::Key::Five; m_keymap[SDLK_6] = CEGUI::Key::Six; m_keymap[SDLK_7] = CEGUI::Key::Seven; m_keymap[SDLK_8] = CEGUI::Key::Eight; m_keymap[SDLK_9] = CEGUI::Key::Nine; m_keymap[SDLK_0] = CEGUI::Key::Zero; m_keymap[SDLK_q] = CEGUI::Key::Q; m_keymap[SDLK_w] = CEGUI::Key::W; m_keymap[SDLK_e] = CEGUI::Key::E; m_keymap[SDLK_r] = CEGUI::Key::R; m_keymap[SDLK_t] = CEGUI::Key::T; m_keymap[SDLK_y] = CEGUI::Key::Y; m_keymap[SDLK_u] = CEGUI::Key::U; m_keymap[SDLK_i] = CEGUI::Key::I; m_keymap[SDLK_o] = CEGUI::Key::O; m_keymap[SDLK_p] = CEGUI::Key::P; m_keymap[SDLK_a] = CEGUI::Key::A; m_keymap[SDLK_s] = CEGUI::Key::S; m_keymap[SDLK_d] = CEGUI::Key::D; m_keymap[SDLK_f] = CEGUI::Key::F; m_keymap[SDLK_g] = CEGUI::Key::G; m_keymap[SDLK_h] = CEGUI::Key::H; m_keymap[SDLK_j] = CEGUI::Key::J; m_keymap[SDLK_k] = CEGUI::Key::K; m_keymap[SDLK_l] = CEGUI::Key::L; m_keymap[SDLK_z] = CEGUI::Key::Z; m_keymap[SDLK_x] = CEGUI::Key::X; m_keymap[SDLK_c] = CEGUI::Key::C; m_keymap[SDLK_v] = CEGUI::Key::V; m_keymap[SDLK_b] = CEGUI::Key::B; m_keymap[SDLK_n] = CEGUI::Key::N; m_keymap[SDLK_m] = CEGUI::Key::M; m_keymap[SDLK_COMMA] = CEGUI::Key::Comma; m_keymap[SDLK_PERIOD] = CEGUI::Key::Period; m_keymap[SDLK_SLASH] = CEGUI::Key::Slash; m_keymap[SDLK_BACKSLASH] = CEGUI::Key::Backslash; m_keymap[SDLK_MINUS] = CEGUI::Key::Minus; m_keymap[SDLK_EQUALS] = CEGUI::Key::Equals; m_keymap[SDLK_SEMICOLON] = CEGUI::Key::Semicolon; m_keymap[SDLK_COLON] = CEGUI::Key::Colon; m_keymap[SDLK_LEFTBRACKET] = CEGUI::Key::LeftBracket; m_keymap[SDLK_RIGHTBRACKET] = CEGUI::Key::RightBracket; m_keymap[SDLK_QUOTE] = CEGUI::Key::Apostrophe; m_keymap[SDLK_BACKQUOTE] = CEGUI::Key::Grave; m_keymap[SDLK_AT] = CEGUI::Key::At; m_keymap[SDLK_UNDERSCORE] = CEGUI::Key::Underline; m_keymap[SDLK_RETURN] = CEGUI::Key::Return; m_keymap[SDLK_SPACE] = CEGUI::Key::Space; m_keymap[SDLK_BACKSPACE] = CEGUI::Key::Backspace; m_keymap[SDLK_TAB] = CEGUI::Key::Tab; m_keymap[SDLK_ESCAPE] = CEGUI::Key::Escape; m_keymap[SDLK_PAUSE] = CEGUI::Key::Pause; m_keymap[SDLK_SYSREQ] = CEGUI::Key::SysRq; m_keymap[SDLK_POWER] = CEGUI::Key::Power; m_keymap[SDLK_SLEEP] = CEGUI::Key::Sleep; m_keymap[SDLK_CALCULATOR] = CEGUI::Key::Calculator; m_keymap[SDLK_MAIL] = CEGUI::Key::Mail; m_keymap[SDLK_COMPUTER] = CEGUI::Key::MyComputer; m_keymap[SDLK_MEDIASELECT] = CEGUI::Key::MediaSelect; m_keymap[SDLK_AC_STOP] = CEGUI::Key::Stop; m_keymap[SDLK_AUDIOPLAY] = CEGUI::Key::PlayPause; m_keymap[SDLK_AUDIOSTOP] = CEGUI::Key::MediaStop; m_keymap[SDLK_AUDIOPREV] = CEGUI::Key::PrevTrack; m_keymap[SDLK_AUDIONEXT] = CEGUI::Key::NextTrack; m_keymap[SDLK_AUDIOMUTE] = CEGUI::Key::Mute; m_keymap[SDLK_VOLUMEUP] = CEGUI::Key::VolumeUp; m_keymap[SDLK_VOLUMEDOWN] = CEGUI::Key::VolumeDown; m_keymap[SDLK_AC_BACK] = CEGUI::Key::WebBack; m_keymap[SDLK_AC_FORWARD] = CEGUI::Key::WebForward; m_keymap[SDLK_AC_HOME] = CEGUI::Key::WebHome; m_keymap[SDLK_AC_BOOKMARKS] = CEGUI::Key::WebFavorites; m_keymap[SDLK_AC_SEARCH] = CEGUI::Key::WebSearch; m_keymap[SDLK_AC_REFRESH] = CEGUI::Key::WebRefresh; m_keymap[SDLK_AC_STOP] = CEGUI::Key::WebStop; m_keymap[SDLK_NUMLOCKCLEAR] = CEGUI::Key::NumLock; m_keymap[SDLK_SCROLLLOCK] = CEGUI::Key::ScrollLock; m_keymap[SDLK_CAPSLOCK] = CEGUI::Key::Capital; m_keymap[SDLK_F1] = CEGUI::Key::F1; m_keymap[SDLK_F2] = CEGUI::Key::F2; m_keymap[SDLK_F3] = CEGUI::Key::F3; m_keymap[SDLK_F4] = CEGUI::Key::F4; m_keymap[SDLK_F5] = CEGUI::Key::F5; m_keymap[SDLK_F6] = CEGUI::Key::F6; m_keymap[SDLK_F7] = CEGUI::Key::F7; m_keymap[SDLK_F8] = CEGUI::Key::F8; m_keymap[SDLK_F9] = CEGUI::Key::F9; m_keymap[SDLK_F10] = CEGUI::Key::F10; m_keymap[SDLK_F11] = CEGUI::Key::F11; m_keymap[SDLK_F12] = CEGUI::Key::F12; m_keymap[SDLK_F13] = CEGUI::Key::F13; m_keymap[SDLK_F14] = CEGUI::Key::F14; m_keymap[SDLK_F15] = CEGUI::Key::F15; m_keymap[SDLK_LCTRL] = CEGUI::Key::LeftControl; m_keymap[SDLK_LALT] = CEGUI::Key::LeftAlt; m_keymap[SDLK_LSHIFT] = CEGUI::Key::LeftShift; m_keymap[SDLK_LGUI] = CEGUI::Key::LeftWindows; m_keymap[SDLK_RCTRL] = CEGUI::Key::RightControl; m_keymap[SDLK_RALT] = CEGUI::Key::RightAlt; m_keymap[SDLK_RSHIFT] = CEGUI::Key::RightShift; m_keymap[SDLK_RGUI] = CEGUI::Key::RightWindows; m_keymap[SDLK_MENU] = CEGUI::Key::AppMenu; m_keymap[SDLK_KP_0] = CEGUI::Key::Numpad0; m_keymap[SDLK_KP_1] = CEGUI::Key::Numpad1; m_keymap[SDLK_KP_2] = CEGUI::Key::Numpad2; m_keymap[SDLK_KP_3] = CEGUI::Key::Numpad3; m_keymap[SDLK_KP_4] = CEGUI::Key::Numpad4; m_keymap[SDLK_KP_5] = CEGUI::Key::Numpad5; m_keymap[SDLK_KP_6] = CEGUI::Key::Numpad6; m_keymap[SDLK_KP_7] = CEGUI::Key::Numpad7; m_keymap[SDLK_KP_8] = CEGUI::Key::Numpad8; m_keymap[SDLK_KP_9] = CEGUI::Key::Numpad9; m_keymap[SDLK_KP_PERIOD] = CEGUI::Key::Decimal; m_keymap[SDLK_KP_PLUS] = CEGUI::Key::Add; m_keymap[SDLK_KP_MINUS] = CEGUI::Key::Subtract; m_keymap[SDLK_KP_MULTIPLY] = CEGUI::Key::Multiply; m_keymap[SDLK_KP_DIVIDE] = CEGUI::Key::Divide; m_keymap[SDLK_KP_ENTER] = CEGUI::Key::NumpadEnter; m_keymap[SDLK_KP_COMMA] = CEGUI::Key::NumpadComma; m_keymap[SDLK_KP_EQUALS] = CEGUI::Key::NumpadEquals; m_keymap[SDLK_UP] = CEGUI::Key::ArrowUp; m_keymap[SDLK_LEFT] = CEGUI::Key::ArrowLeft; m_keymap[SDLK_RIGHT] = CEGUI::Key::ArrowRight; m_keymap[SDLK_DOWN] = CEGUI::Key::ArrowDown; m_keymap[SDLK_HOME] = CEGUI::Key::Home; m_keymap[SDLK_END] = CEGUI::Key::End; m_keymap[SDLK_PAGEUP] = CEGUI::Key::PageUp; m_keymap[SDLK_PAGEDOWN] = CEGUI::Key::PageDown; m_keymap[SDLK_INSERT] = CEGUI::Key::Insert; m_keymap[SDLK_DELETE] = CEGUI::Key::Delete; } } fifengine-0.4.1/engine/core/gui/cegui/base/ceguiinputprocessor.h000066400000000000000000000054351304641216200247300ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_GUI_CEGuiInputProcessor #define FIFE_GUI_CEGuiInputProcessor // Standard C++ library includes // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder namespace FIFE { class CEGuiInputProcessor { public: /** Constructor. */ CEGuiInputProcessor(); /** Destructor. */ ~CEGuiInputProcessor(); /** Injects input to the CEGUI system. * * @return A boolean value indicating if the event was consumed or not. */ bool onSdlEvent(SDL_Event& event); private: /** Process a key input event. */ bool processKeyInput(SDL_Event& event); /** Process a text input event. */ bool processTextInput(SDL_Event& event); /** Process a mouse input event. */ bool processMouseInput(SDL_Event& event); /** Process a mouse motion event. */ bool processMouseMotion(SDL_Event& event); /** Initialize the key translation map. */ void initializeKeyMap(); /** Holds translation of key scancodes from SDL to CEGUI. */ std::map m_keymap; }; } #endif //FIFE_GUI_CEGuiInputProcessor fifengine-0.4.1/engine/core/gui/cegui/ceguimanager.cpp000066400000000000000000000064241304641216200226630ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes #include #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "base/ceguiinputprocessor.h" #include "util/time/timemanager.h" #include "ceguimanager.h" namespace FIFE { CEGuiManager::CEGuiManager() { #ifdef HAVE_OPENGL CEGUI::OpenGLRenderer::bootstrapSystem(); #else throw GuiException("CEGUI can be used only if opengl is enabled!"); #endif m_inputProcessor = new CEGuiInputProcessor(); m_lastTimePulse = TimeManager::instance()->getTime() / 1000.0; } CEGuiManager::~CEGuiManager() { delete m_inputProcessor; CEGUI::OpenGLRenderer::destroySystem(); } void CEGuiManager::turn() { injectTimePulse(); CEGUI::System::getSingleton().renderAllGUIContexts(); } void CEGuiManager::resizeTopContainer(uint32_t x, uint32_t y, uint32_t width, uint32_t height) { } bool CEGuiManager::onSdlEvent(SDL_Event &event) { return m_inputProcessor->onSdlEvent(event); } void CEGuiManager::setRootWindow(CEGUI::Window* root) { m_guiRoot = root; CEGUI::System::getSingleton().getDefaultGUIContext().setRootWindow(m_guiRoot); } CEGUI::Window* CEGuiManager::getRootWindow() { return m_guiRoot; } void CEGuiManager::injectTimePulse() { double timeNow = TimeManager::instance()->getTime() / 1000.0; float time_pulse = float(timeNow - m_lastTimePulse); CEGUI::System::getSingleton().injectTimePulse(time_pulse); CEGUI::System::getSingleton().getDefaultGUIContext().injectTimePulse(time_pulse); m_lastTimePulse = timeNow; } } fifengine-0.4.1/engine/core/gui/cegui/ceguimanager.h000066400000000000000000000063141304641216200223260ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_GUI_CEGuiManager #define FIFE_GUI_CEGuiManager // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/singleton.h" #include "gui/guimanager.h" namespace CEGUI { class Window; } namespace FIFE { class CEGuiInputProcessor; class CEGuiManager : public IGUIManager, public DynamicSingleton { public: /** Constructor. */ CEGuiManager(); virtual ~CEGuiManager(); /** Updates and renders the gui. */ virtual void turn(); /** Resizes the top container. * * @param x The new starting X coordinate. * @param y The new starting Y coordinate. * @param width The new width. * @param height The new height. */ virtual void resizeTopContainer(uint32_t x, uint32_t y, uint32_t width, uint32_t height); /** Receives input and converts it to librocket format, then it forwards it * to librocket. */ virtual bool onSdlEvent(SDL_Event& event); /** Sets the root window of the gui system. */ void setRootWindow(CEGUI::Window* setRootWindow); /** @return The root window of the gui system. */ CEGUI::Window* getRootWindow(); private: /** Inject a time pulse to CEGUI. */ void injectTimePulse(); /** Input processor. Converts SDL input to CEGUI input. */ CEGuiInputProcessor* m_inputProcessor; /** Last time pulse injected to CEGUI. */ double m_lastTimePulse; /** Our root gui window. */ CEGUI::Window* m_guiRoot; }; } #endif //FIFE_GUI_CEGuiManager fifengine-0.4.1/engine/core/gui/cegui/ceguimanager.i000066400000000000000000000004211304641216200223200ustar00rootroot00000000000000%module fife %{ #include "gui/cegui/ceguimanager.h" #include "gui/guimanager.h" %} %include "gui/guimanager.i" namespace FIFE { %feature("notabstract") CEGuiManager; class CEGuiManager : public IGUIManager { public: CEGuiManager(); virtual ~CEGuiManager(); }; } fifengine-0.4.1/engine/core/gui/fifechan/000077500000000000000000000000001304641216200201715ustar00rootroot00000000000000fifengine-0.4.1/engine/core/gui/fifechan/base/000077500000000000000000000000001304641216200211035ustar00rootroot00000000000000fifengine-0.4.1/engine/core/gui/fifechan/base/gui_font.cpp000066400000000000000000000107111304641216200234210ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/structures/rect.h" #include "video/image.h" #include "video/renderbackend.h" #include "gui_font.h" namespace FIFE { GuiFont::GuiFont(IFont* font): m_font(font) { assert(font); } GuiFont::~GuiFont() { delete m_font; } int32_t GuiFont::getStringIndexAt(const std::string& text, int32_t x) const { return m_font->getStringIndexAt(text, x); } void GuiFont::drawString(fcn::Graphics* graphics, const std::string& text, int32_t x, int32_t y) { if (text == "") { return; } int32_t yoffset = getRowSpacing() / 2; const fcn::ClipRectangle& clip = graphics->getCurrentClipArea(); FIFE::Rect rect; rect.x = x + clip.xOffset; rect.y = y + clip.yOffset + yoffset; rect.w = getWidth(text); rect.h = getHeight(); if (!rect.intersects(Rect(clip.x,clip.y,clip.width,clip.height)) ) { return; } Image* image = getAsImage(text); image->render(rect); } void GuiFont::drawMultiLineString(fcn::Graphics* graphics, const std::string& text, int32_t x, int32_t y) { if (text == "") { return; } int32_t yoffset = getRowSpacing() / 2; const fcn::ClipRectangle& clip = graphics->getCurrentClipArea(); Image* image = getAsImageMultiline(text); FIFE::Rect rect; rect.x = x + clip.xOffset; rect.y = y + clip.yOffset + yoffset; rect.w = image->getWidth(); rect.h = image->getHeight(); if (!rect.intersects(Rect(clip.x,clip.y,clip.width,clip.height)) ) { return; } image->render(rect); } void GuiFont::setRowSpacing (int32_t spacing) { m_font->setRowSpacing(spacing); } int32_t GuiFont::getRowSpacing() const { return m_font->getRowSpacing(); } void GuiFont::setGlyphSpacing(int32_t spacing) { m_font->setGlyphSpacing(spacing); } int32_t GuiFont::getGlyphSpacing() const { return m_font->getGlyphSpacing(); } void GuiFont::setAntiAlias(bool antiAlias) { m_font->setAntiAlias(antiAlias); } bool GuiFont::isAntiAlias() { return m_font->isAntiAlias(); } Image* GuiFont::getAsImage(const std::string& text) { return m_font->getAsImage(text); } Image* GuiFont::getAsImageMultiline(const std::string& text) { return m_font->getAsImageMultiline(text); } std::string GuiFont::splitTextToWidth (const std::string& text, int32_t render_width) { return m_font->splitTextToWidth(text,render_width); } void GuiFont::setColor(uint8_t r,uint8_t g,uint8_t b, uint8_t a) { m_font->setColor(r, g, b, a); } SDL_Color GuiFont::getColor() const { return m_font->getColor(); } int32_t GuiFont::getWidth(const std::string& text) const { return m_font->getWidth(text); } int32_t GuiFont::getHeight() const { return m_font->getHeight(); } void GuiFont::invalidate() { m_font->invalidate(); } } fifengine-0.4.1/engine/core/gui/fifechan/base/gui_font.h000066400000000000000000000056721304641216200231000ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_GUI_FONT_H #define FIFE_GUI_FONT_H // Standard C++ library includes // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "video/fonts/ifont.h" namespace FIFE { class GuiFont : public fcn::Font, public IFont { public: /** Constructor * Takes the ownership of given font */ GuiFont(IFont* font); virtual ~GuiFont(); int32_t getStringIndexAt(const std::string& text, int32_t x) const; void drawString(fcn::Graphics* graphics, const std::string& text, int32_t x, int32_t y); void drawMultiLineString(fcn::Graphics* graphics, const std::string& text, int32_t x, int32_t y); std::string splitTextToWidth (const std::string& text, int32_t render_width); void setRowSpacing (int32_t spacing); int32_t getRowSpacing() const; void setGlyphSpacing(int32_t spacing); int32_t getGlyphSpacing() const; void setAntiAlias(bool antiAlias); bool isAntiAlias(); Image* getAsImage(const std::string& text); Image* getAsImageMultiline(const std::string& text); void setColor(uint8_t r,uint8_t g,uint8_t b, uint8_t a = 255); SDL_Color getColor() const; int32_t getWidth(const std::string& text) const; int32_t getHeight() const; void invalidate(); private: IFont* m_font; }; } #endif fifengine-0.4.1/engine/core/gui/fifechan/base/gui_font.i000066400000000000000000000051311304641216200230670ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include #include "gui/fifechan/base/gui_font.h" #include "video/fonts/ifont.h" %} %include "video/fonts/fonts.i" namespace fcn { class Graphics; class Font { public: virtual ~Font(){ } virtual int32_t getWidth(const std::string& text) const = 0; virtual int32_t getHeight() const = 0; }; } namespace FIFE { class Image; %feature("notabstract") GuiFont; class GuiFont : public fcn::Font, public IFont { public: GuiFont(IFont* font); virtual ~GuiFont(); int32_t getStringIndexAt(const std::string& text, int32_t x); void drawString(fcn::Graphics* graphics, const std::string& text, int32_t x, int32_t y); void setRowSpacing (int32_t spacing); int32_t getRowSpacing() const; void setGlyphSpacing(int32_t spacing); int32_t getGlyphSpacing() const; void setAntiAlias(bool antiAlias); bool isAntiAlias(); Image* getAsImage(const std::string& text); void setColor(uint8_t r,uint8_t g,uint8_t b, uint8_t a = 255); SDL_Color getColor() const; int32_t getWidth(const std::string& text) const; int32_t getHeight() const; }; } fifengine-0.4.1/engine/core/gui/fifechan/base/gui_image.cpp000066400000000000000000000054121304641216200235370ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/log/logger.h" #include "video/image.h" #include "video/imagemanager.h" #include "gui_image.h" namespace FIFE { static Logger _log(LM_GUI); GuiImage::GuiImage(): fcn::Image(), m_imgPtr() { } GuiImage::GuiImage(ImagePtr img): fcn::Image(), m_imgPtr(img) { } GuiImage::~GuiImage() { } void GuiImage::free() { ImageManager::instance()->free(m_imgPtr->getHandle()); } int32_t GuiImage::getWidth() const { if(!m_imgPtr) return 0; return m_imgPtr->getWidth(); } int32_t GuiImage::getHeight() const { if(!m_imgPtr) return 0; return m_imgPtr->getHeight(); } fcn::Color GuiImage::getPixel(int32_t x, int32_t y) { FL_PANIC(_log, "GuiImage::getPixel, not implemented"); return fcn::Color(); } void GuiImage::putPixel(int32_t x, int32_t y, const fcn::Color& color) { FL_PANIC(_log, "GuiImage::putPixel, not implemented"); } void GuiImage::convertToDisplayFormat() { // empty on purpose // Since we don't need any conversions - this is just a proxy. } } fifengine-0.4.1/engine/core/gui/fifechan/base/gui_image.h000066400000000000000000000046241304641216200232100ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_GUI_IMAGE_H #define FIFE_GUI_IMAGE_H // Standard C++ library includes // 3rd party library includes #include #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/fife_stdint.h" #include "video/image.h" #include "video/imagemanager.h" namespace FIFE { class GuiImage : public fcn::Image { public: GuiImage(); GuiImage(ImagePtr img); ~GuiImage(); void free(); int32_t getWidth() const; int32_t getHeight() const; fcn::Color getPixel(int32_t x, int32_t y); void putPixel(int32_t x, int32_t y, const fcn::Color& color); void convertToDisplayFormat(); ImagePtr getFIFEImage() const { return m_imgPtr; } protected: ImagePtr m_imgPtr; }; } #endif fifengine-0.4.1/engine/core/gui/fifechan/base/gui_image.i000066400000000000000000000040751304641216200232110ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include #include "gui/fifechan/base/gui_image.h" #include "video/image.h" %} %rename(GcnImage) fcn::Image; namespace fcn { class Image { public: Image(); virtual ~Image(); static Image* load(const std::string& filename, bool convertToDisplayFormat = true); virtual int32_t getWidth() const = 0; virtual int32_t getHeight() const = 0; }; } namespace FIFE { class GuiImage: public fcn::Image { public: GuiImage(); GuiImage(FIFE::ImagePtr Image); int32_t getWidth() const; int32_t getHeight() const; }; } fifengine-0.4.1/engine/core/gui/fifechan/base/gui_imageloader.cpp000066400000000000000000000072041304641216200247270ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "video/image.h" #include "video/imagemanager.h" #include "video/atlasbook.h" #include "video/renderbackend.h" #include "gui_imageloader.h" static const uint32_t ATLAS_SIZE = 512; namespace FIFE { GuiImageLoader::GuiImageLoader() { m_atlasbook = new AtlasBook(ATLAS_SIZE, ATLAS_SIZE); } GuiImageLoader::~GuiImageLoader() { delete m_atlasbook; } fcn::Image* GuiImageLoader::load(const std::string& filename, bool convertToDisplayFormat) { ImageManager* imgManager = ImageManager::instance(); if(imgManager->exists(filename)) { return new GuiImage(imgManager->get(filename)); } // load demanded image ImagePtr tmpimg = imgManager->load(filename); if(tmpimg->getWidth() >= ATLAS_SIZE || tmpimg->getHeight() >= ATLAS_SIZE) { return new GuiImage(tmpimg); } // look for a place for an image of given size AtlasBlock* block = m_atlasbook->getBlock(tmpimg->getWidth(), tmpimg->getHeight()); // if it can't fit, we need to add new 'page' if(block->page >= m_atlases.size()) { m_atlases.push_back(imgManager->loadBlank(ATLAS_SIZE, ATLAS_SIZE)); // because we gonna update texture on-the fly (via TexSubImage) // we cant really use compressed texture RenderBackend* rb = RenderBackend::instance(); bool prev = rb->isImageCompressingEnabled(); rb->setImageCompressingEnabled(false); m_atlases[block->page]->forceLoadInternal(); rb->setImageCompressingEnabled(prev); } // update atlas page with given image m_atlases[block->page]->copySubimage(block->left, block->top, tmpimg); // we dont really need this image anymore tmpimg->free(); imgManager->remove(tmpimg); // create shared image and return it ImagePtr img = imgManager->create(filename); Rect region(block->left, block->top, block->getWidth(), block->getHeight()); img->useSharedImage(m_atlases[block->page], region); return new GuiImage(img); } } fifengine-0.4.1/engine/core/gui/fifechan/base/gui_imageloader.h000066400000000000000000000044161304641216200243760ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_GUI_IMAGELOADER_H #define FIFE_GUI_IMAGELOADER_H // Standard C++ library includes // 3rd party library includes #include #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "gui_image.h" namespace FIFE { class AtlasBook; /* Image Loader. */ class GuiImageLoader : public fcn::ImageLoader { public: GuiImageLoader(); virtual ~GuiImageLoader(); virtual fcn::Image* load(const std::string& filename, bool convertToDisplayFormat = true); private: AtlasBook* m_atlasbook; std::vector m_atlases; }; } #endif fifengine-0.4.1/engine/core/gui/fifechan/base/opengl/000077500000000000000000000000001304641216200223675ustar00rootroot00000000000000fifengine-0.4.1/engine/core/gui/fifechan/base/opengl/opengl_gui_graphics.cpp000066400000000000000000000141051304641216200271040ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // This needs to be here, before fifechan includes gl.h #include "video/opengl/fife_opengl.h" // 3rd party library includes #include #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src dir #include "util/log/logger.h" #include "util/base/exception.h" #include "gui/fifechan/base/gui_image.h" #include "util/structures/rect.h" #include "video/image.h" #include "video/imagemanager.h" #include "video/opengl/renderbackendopengl.h" #include "opengl_gui_graphics.h" namespace FIFE { static Logger _log(LM_GUI); OpenGLGuiGraphics::OpenGLGuiGraphics() { mColor = fcn::Color(255, 255, 255, 255); m_renderbackend = static_cast(RenderBackend::instance()); setTargetPlane(m_renderbackend->getWidth(), m_renderbackend->getHeight()); } void OpenGLGuiGraphics::drawImage(const fcn::Image* image, int32_t srcX, int32_t srcY, int32_t dstX, int32_t dstY, int32_t width, int32_t height) { const GuiImage* g_img = dynamic_cast(image); assert(g_img); ImagePtr fifeimg = g_img->getFIFEImage(); const fcn::ClipRectangle& clip = mClipStack.top(); fifeimg->render(Rect(dstX + clip.xOffset, dstY + clip.yOffset, width, height)); } void OpenGLGuiGraphics::drawText(const std::string& text, int32_t x, int32_t y, uint32_t alignment) { if (mFont == NULL) { throw GuiException("OpenGLGuiGraphics::drawText() - No font set!"); } switch (alignment) { case Left: mFont->drawString(this, text, x, y); break; case Center: mFont->drawString(this, text, x - mFont->getWidth(text) / 2, y); break; case Right: mFont->drawString(this, text, x - mFont->getWidth(text), y); break; default: FL_WARN(_log, LMsg("OpenGLGuiGraphics::drawText() - ") << "Unknown alignment: " << alignment); mFont->drawString(this, text, x, y); } } void OpenGLGuiGraphics::drawPoint(int32_t x, int32_t y) { const fcn::ClipRectangle& top = mClipStack.top(); m_renderbackend->putPixel(x + top.xOffset, y + top.yOffset, mColor.r, mColor.g, mColor.b, mColor.a); } void OpenGLGuiGraphics::drawLine(int32_t x1, int32_t y1, int32_t x2, int32_t y2) { const fcn::ClipRectangle& top = mClipStack.top(); x1 += top.xOffset; x2 += top.xOffset; y1 += top.yOffset; y2 += top.yOffset; Point pbegin(static_cast(ceil(x1 + 0.375f)), static_cast(ceil(y1 + 0.375f))); Point pend(static_cast(ceil(x2 + 0.625f)), static_cast(ceil(y2 + 0.625f))); m_renderbackend->drawLine(pbegin, pend, mColor.r, mColor.g, mColor.b, mColor.a); m_renderbackend->putPixel(pbegin.x, pbegin.y, mColor.r, mColor.g, mColor.b, mColor.a); m_renderbackend->putPixel(pend.x, pend.y, mColor.r, mColor.g, mColor.b, mColor.a); } void OpenGLGuiGraphics::drawRectangle(const fcn::Rectangle& rectangle) { const fcn::ClipRectangle& top = mClipStack.top(); m_renderbackend->drawRectangle( Point(rectangle.x + top.xOffset, rectangle.y + top.yOffset), rectangle.width, rectangle.height, mColor.r, mColor.g, mColor.b, mColor.a); } void OpenGLGuiGraphics::fillRectangle(const fcn::Rectangle& rectangle) { const fcn::ClipRectangle& top = mClipStack.top(); m_renderbackend->fillRectangle( Point(rectangle.x + top.xOffset, rectangle.y + top.yOffset), rectangle.width, rectangle.height, mColor.r, mColor.g, mColor.b, mColor.a); } void OpenGLGuiGraphics::_beginDraw() { fcn::Rectangle area(0, 0, mWidth, mHeight); fcn::Graphics::pushClipArea(area); m_renderbackend->pushClipArea(Rect(0, 0, mWidth, mHeight), false); } void OpenGLGuiGraphics::_endDraw() { m_renderbackend->renderVertexArrays(); // Cleanup fcn::Graphics::popClipArea(); m_renderbackend->popClipArea(); } bool OpenGLGuiGraphics::pushClipArea(fcn::Rectangle area) { // Render what we gathered so far m_renderbackend->renderVertexArrays(); fcn::Graphics::pushClipArea(area); // Due to some odd conception in guiChan some of area // has xOffset and yOffset > 0. And if it happens we // need to offset our clip area. Or we can use fifechan stack. const fcn::ClipRectangle& top = mClipStack.top(); m_renderbackend->pushClipArea( Rect(top.x, top.y, top.width, top.height), false); return true; } void OpenGLGuiGraphics::popClipArea() { // Render what we gathered so far m_renderbackend->renderVertexArrays(); fcn::Graphics::popClipArea(); m_renderbackend->popClipArea(); } void OpenGLGuiGraphics::setColor(const fcn::Color& color) { mColor = color; } } fifengine-0.4.1/engine/core/gui/fifechan/base/opengl/opengl_gui_graphics.h000066400000000000000000000054521304641216200265560ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_GUI_OPENGL_GRAPHICS_H #define FIFE_GUI_OPENGL_GRAPHICS_H // Standard C++ library includes // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src dir namespace FIFE { class RenderBackendOpenGL; /** Overrides Guichan Graphics to enable usage of normal fife images & related facilities */ class OpenGLGuiGraphics: public fcn::OpenGLGraphics { public: /** Constructor */ OpenGLGuiGraphics(); virtual void drawImage(const fcn::Image* image, int32_t srcX, int32_t srcY, int32_t dstX, int32_t dstY, int32_t width, int32_t height); virtual void drawText(const std::string& text, int32_t x, int32_t y, uint32_t alignment); virtual void drawPoint(int32_t x, int32_t y); virtual void drawLine(int32_t x1, int32_t y1, int32_t x2, int32_t y2); virtual void drawRectangle(const fcn::Rectangle& rectangle); virtual void fillRectangle(const fcn::Rectangle& rectangle); virtual void _beginDraw(); virtual void _endDraw(); virtual bool pushClipArea(fcn::Rectangle area); virtual void popClipArea(); virtual void setColor(const fcn::Color& color); private: RenderBackendOpenGL* m_renderbackend; }; } #endif fifengine-0.4.1/engine/core/gui/fifechan/base/sdl/000077500000000000000000000000001304641216200216655ustar00rootroot00000000000000fifengine-0.4.1/engine/core/gui/fifechan/base/sdl/sdl_gui_graphics.cpp000066400000000000000000000127201304641216200257010ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes #include #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src dir #include "gui/fifechan/base/gui_image.h" #include "util/base/exception.h" #include "util/structures/rect.h" #include "video/image.h" #include "video/renderbackend.h" #include "sdl_gui_graphics.h" namespace FIFE { static Logger _log(LM_GUI); SdlGuiGraphics::SdlGuiGraphics() { m_renderbackend = RenderBackend::instance(); setTarget(m_renderbackend->getScreenSurface()); } void SdlGuiGraphics::drawImage(const fcn::Image* image, int32_t srcX, int32_t srcY, int32_t dstX, int32_t dstY, int32_t width, int32_t height) { const GuiImage* g_img = dynamic_cast(image); assert(g_img); ImagePtr fifeimg = g_img->getFIFEImage(); const fcn::ClipRectangle& clip = getCurrentClipArea(); Rect rect(dstX, dstY, width, height); rect.x += clip.xOffset; rect.y += clip.yOffset; fifeimg->render(rect); } void SdlGuiGraphics::drawText(const std::string& text, int32_t x, int32_t y, uint32_t alignment) { if (mFont == NULL) { throw GuiException("SdlGuiGraphics::drawText() - No font set!"); } switch (alignment) { case Left: mFont->drawString(this, text, x, y); break; case Center: mFont->drawString(this, text, x - mFont->getWidth(text) / 2, y); break; case Right: mFont->drawString(this, text, x - mFont->getWidth(text), y); break; default: FL_WARN(_log, LMsg("SdlGuiGraphics::drawText() - ") << "Unknown alignment: " << alignment); mFont->drawString(this, text, x, y); } } void SdlGuiGraphics::drawPoint(int32_t x, int32_t y) { const fcn::ClipRectangle& top = mClipStack.top(); m_renderbackend->putPixel(x + top.xOffset, y + top.yOffset, mColor.r, mColor.g, mColor.b, mColor.a); } void SdlGuiGraphics::drawLine(int32_t x1, int32_t y1, int32_t x2, int32_t y2) { const fcn::ClipRectangle& top = mClipStack.top(); x1 += top.xOffset; x2 += top.xOffset; y1 += top.yOffset; y2 += top.yOffset; Point pbegin(x1, y1); Point pend(x2, y2); m_renderbackend->drawLine(pbegin, pend, mColor.r, mColor.g, mColor.b, mColor.a); m_renderbackend->putPixel(pbegin.x, pbegin.y, mColor.r, mColor.g, mColor.b, mColor.a); m_renderbackend->putPixel(pend.x, pend.y, mColor.r, mColor.g, mColor.b, mColor.a); } void SdlGuiGraphics::drawRectangle(const fcn::Rectangle& rectangle) { const fcn::ClipRectangle& top = mClipStack.top(); m_renderbackend->drawRectangle( Point(rectangle.x + top.xOffset, rectangle.y + top.yOffset), rectangle.width, rectangle.height, mColor.r, mColor.g, mColor.b, mColor.a); } void SdlGuiGraphics::fillRectangle(const fcn::Rectangle& rectangle) { const fcn::ClipRectangle& top = mClipStack.top(); m_renderbackend->fillRectangle( Point(rectangle.x + top.xOffset, rectangle.y + top.yOffset), rectangle.width, rectangle.height, mColor.r, mColor.g, mColor.b, mColor.a); } void SdlGuiGraphics::_beginDraw() { fcn::Rectangle area(0, 0, mTarget->w, mTarget->h); fcn::Graphics::pushClipArea(area); m_renderbackend->pushClipArea(Rect(0, 0, mTarget->w, mTarget->h), false); } void SdlGuiGraphics::_endDraw() { // Cleanup fcn::Graphics::popClipArea(); m_renderbackend->popClipArea(); } bool SdlGuiGraphics::pushClipArea(fcn::Rectangle area) { fcn::Graphics::pushClipArea(area); // Due to some odd conception in FifeChan some of area // has xOffset and yOffset > 0. And if it happens we // need to offset our clip area. Or we can use fifechan stack. const fcn::ClipRectangle& top = mClipStack.top(); m_renderbackend->pushClipArea( Rect(top.x, top.y, top.width, top.height), false); return true; } void SdlGuiGraphics::popClipArea() { fcn::Graphics::popClipArea(); m_renderbackend->popClipArea(); } void SdlGuiGraphics::setColor(const fcn::Color& color) { mColor = color; } } fifengine-0.4.1/engine/core/gui/fifechan/base/sdl/sdl_gui_graphics.h000066400000000000000000000054111304641216200253450ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_GUI_SDL_GRAPHICS_H #define FIFE_GUI_SDL_GRAPHICS_H // Standard C++ library includes // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src dir namespace FIFE { class RenderBackend; /** Overrides Guichan Graphics to enable usage of normal fife images & related facilities */ class SdlGuiGraphics: public fcn::SDLGraphics { public: /** Constructor */ SdlGuiGraphics(); virtual void drawImage(const fcn::Image* image, int32_t srcX, int32_t srcY, int32_t dstX, int32_t dstY, int32_t width, int32_t height); virtual void drawText(const std::string& text, int32_t x, int32_t y, uint32_t alignment); virtual void drawPoint(int32_t x, int32_t y); virtual void drawLine(int32_t x1, int32_t y1, int32_t x2, int32_t y2); virtual void drawRectangle(const fcn::Rectangle& rectangle); virtual void fillRectangle(const fcn::Rectangle& rectangle); virtual void _beginDraw(); virtual void _endDraw(); virtual bool pushClipArea(fcn::Rectangle area); virtual void popClipArea(); virtual void setColor(const fcn::Color& color); private: RenderBackend* m_renderbackend; }; } #endif fifengine-0.4.1/engine/core/gui/fifechan/console/000077500000000000000000000000001304641216200216335ustar00rootroot00000000000000fifengine-0.4.1/engine/core/gui/fifechan/console/commandline.cpp000066400000000000000000000111331304641216200246240ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/time/timeevent.h" #include "util/time/timemanager.h" #include "commandline.h" namespace FIFE { using namespace fcn; CommandLine::CommandLine() : fcn::TextField(), m_history_position(0) { m_blinkTimer.setInterval(500); m_blinkTimer.setCallback(boost::bind(&CommandLine::toggleCaretVisible,this)); m_blinkTimer.start(); m_suppressBlinkTimer.setInterval(2000); m_suppressBlinkTimer .setCallback(boost::bind(&CommandLine::startBlinking,this)); } CommandLine::~CommandLine() { } void CommandLine::toggleCaretVisible() { m_caretVisible = !m_caretVisible; } void CommandLine::stopBlinking() { m_suppressBlinkTimer.start(); m_blinkTimer.stop(); m_caretVisible = true; } void CommandLine::startBlinking() { m_suppressBlinkTimer.stop(); m_blinkTimer.start(); } void CommandLine::keyPressed(fcn::KeyEvent &keyEvent) { fcn::Key key = keyEvent.getKey(); int32_t keyType = key.getValue(); if (keyType == Key::Left && getCaretPosition() > 0) { TextField::keyPressed(keyEvent); } else if (keyType == Key::Right && getCaretPosition() < getText().size()) { TextField::keyPressed(keyEvent); } else if (keyType == Key::Down && !m_history.empty()) { if( m_history_position < m_history.size() ) { if( ++m_history_position == m_history.size() ) { setText( m_cmdline ); } else { setText( m_history[m_history_position] ); } }; } else if (keyType == Key::Up && !m_history.empty()) { if( m_history_position > 0 ) { if( m_history_position == m_history.size() ) { m_cmdline = getText(); } --m_history_position; setText( m_history[m_history_position] ); }; } else if (keyType == Key::Delete && getCaretPosition() < getText().size()) { TextField::keyPressed(keyEvent); } else if (keyType == Key::Backspace && getCaretPosition() > 0) { TextField::keyPressed(keyEvent); } else if (keyType == Key::Enter) { if( getText() != "" ) { if(m_callback) { m_callback( getText() ); } m_history.push_back( getText() ); m_history_position = m_history.size(); setText(""); } } else if (keyType == Key::Home) { setCaretPosition(0); } else if (keyType == Key::End) { setCaretPosition(getText().size()); } else if (key.isCharacter() || static_cast(key.getValue()) > 255) { TextField::keyPressed(keyEvent); } stopBlinking(); fixScroll(); } void CommandLine::drawCaret(fcn::Graphics * graphics, int32_t x) { if( !m_caretVisible ) return; graphics->setColor(getForegroundColor()); graphics->drawLine(x, getHeight() - 2, x, 1); graphics->drawLine(x+1, getHeight() - 2, x+1, 1); } void CommandLine::setCallback(const type_callback& cb) { m_callback = cb; } } /* vim: set noexpandtab: set shiftwidth=2: set tabstop=2: */ fifengine-0.4.1/engine/core/gui/fifechan/console/commandline.h000066400000000000000000000056571304641216200243070ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_FIFECHAN_ADDON_COMMANDLINE_H #define FIFE_FIFECHAN_ADDON_COMMANDLINE_H // Standard C++ library includes #include #include // 3rd party library includes #include #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/time/timer.h" namespace FIFE { /** A Command line widget */ class CommandLine : public fcn::TextField { public: typedef boost::function1 type_callback; /** Constructor */ CommandLine(); /** Destructor */ ~CommandLine(); void keyPressed(fcn::KeyEvent& keyEvent); virtual void drawCaret(fcn::Graphics * graphics, int32_t x); /** Set callback on pressing the ENTER key */ void setCallback(const type_callback& cb); /** Toggle the caret visibility */ void toggleCaretVisible(); /** Start blinking the caret */ void startBlinking(); /** Stop blinking the caret for a few seconds */ void stopBlinking(); private: type_callback m_callback; std::vector m_history; size_t m_history_position; std::string m_cmdline; bool m_caretVisible; Timer m_blinkTimer; Timer m_suppressBlinkTimer; }; } #endif /* vim: set noexpandtab: set shiftwidth=2: set tabstop=2: */ fifengine-0.4.1/engine/core/gui/fifechan/console/console.cpp000066400000000000000000000204501304641216200240020ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // 3rd party library includes #include #include #include #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "video/renderbackend.h" #include "util/time/timemanager.h" #include "util/log/logger.h" #include "util/base/exception.h" #include "gui/fifechan/fifechanmanager.h" #include "gui/fifechan/base/gui_font.h" #include "commandline.h" #include "console.h" namespace FIFE { const unsigned Console::m_maxOutputRows = 50; static Logger _log(LM_CONSOLE); Console::Console() : fcn::Container(), m_consoleexec(0), m_input(new CommandLine()), m_output(new fcn::TextBox()), m_outputscrollarea(new fcn::ScrollArea(m_output)), m_status(new fcn::Label()), m_toolsbutton(new fcn::Button("Tools")) { reLayout(); add(m_outputscrollarea); add(m_input); add(m_status); add(m_toolsbutton); setOpaque(true); m_input->setCallback( std::bind1st( std::mem_fun(&Console::execute), this) ); m_prompt = "-- "; m_isAttached = false; m_fpsTimer.setInterval(500); m_fpsTimer.setCallback( boost::bind(&Console::updateCaption, this) ); m_hiding = true; m_animationTimer.setInterval(20); m_animationTimer.setCallback( boost::bind(&Console::updateAnimation, this) ); m_toolsbutton->addActionListener(this); m_toolsbutton->setFocusable(false); m_input->addFocusListener(this); GuiFont* font = FifechanManager::instance()->createFont(); font->setColor(255,255,255); setIOFont(font); } void Console::reLayout() { int32_t w, h, b, input_h, bbar_h, button_w; w = RenderBackend::instance()->getScreenWidth() * 4/5; h = RenderBackend::instance()->getScreenHeight() * 4/5; b = 0; input_h = getFont()->getHeight(); bbar_h = input_h; button_w = 80; fcn::Color black(0x00,0,0,0xff); fcn::Color white(0xff,0xff,0xff,0xff); fcn::Color dark(50,60,50,0xff); setSize(w, h); setPosition((RenderBackend::instance()->getScreenWidth() - w) / 2,-h); setFrameSize(0); setForegroundColor(white); setBackgroundColor(black); setBaseColor(dark); setSize(w, h); m_outputscrollarea->setSize(w - 2*b, h - input_h - 3*b - bbar_h); m_outputscrollarea->setPosition(b,0); m_input->setPosition(b, h - input_h - b - bbar_h); m_input->setSize(w - 2*b, input_h); m_status->setPosition(b, h - b - bbar_h); m_status->setSize(w - 2*b, bbar_h); m_toolsbutton->setPosition(w - button_w, h - b - bbar_h); m_toolsbutton->setSize(button_w, bbar_h); m_output->setBackgroundColor(black); m_output->setFocusable(false); m_outputscrollarea->setBackgroundColor(black); m_outputscrollarea->setBaseColor(dark); m_input->setForegroundColor(white); m_input->setBackgroundColor(black); m_status->setForegroundColor(white); m_status->setBackgroundColor(black); m_toolsbutton->setForegroundColor(white); m_toolsbutton->setBackgroundColor(black); m_toolsbutton->setBaseColor(dark); m_hiddenPos = -h; m_animationDelta = h/6; } Console::~Console() { doHide(); remove(m_input); remove(m_outputscrollarea); remove(m_status); delete m_output; delete m_input; delete m_outputscrollarea; delete m_status; delete m_toolsbutton; } void Console::updateCaption() { std::string caption = "FIFE Console - FPS: "; double fps = 1e3/TimeManager::instance()->getAverageFrameTime(); caption += boost::lexical_cast(fps); m_status->setCaption( caption ); } void Console::updateAnimation() { if (m_hiding){ setPosition(getX(), getY() - m_animationDelta); if (getY() <= m_hiddenPos){ doHide(); m_animationTimer.stop(); } }else{ setPosition(getX(), getY() + m_animationDelta); if (getY() >= 0){ setPosition(getX(), 0); m_animationTimer.stop(); } } } void Console::clear() { m_output->setText(""); } void Console::doShow() { if (m_isAttached) return; m_isAttached = true; FifechanManager::instance()->add(this); FifechanManager::instance()->getTopContainer()->moveToTop(this); // Assure the input field is focused when shown. m_input->requestFocus(); m_fpsTimer.start(); } void Console::doHide() { if (!m_isAttached) return; m_isAttached = false; FifechanManager::instance()->remove(this); m_fpsTimer.stop(); } void Console::show() { if(m_hiding) { m_hiding = false; doShow(); m_animationTimer.start(); } } void Console::hide() { if(!m_hiding) { m_hiding = true; m_animationTimer.start(); } } void Console::toggleShowHide() { m_hiding = !m_hiding; if(!m_hiding) doShow(); m_animationTimer.start(); } void Console::execute(std::string cmd) { FL_DBG(_log, LMsg("in execute with command ") << cmd); if (cmd.empty()) return; // copy input to output println(m_prompt + cmd); // run the command try { if (m_consoleexec) { std::string resp = m_consoleexec->onConsoleCommand(cmd); println(resp); } else { FL_WARN(_log, LMsg("ConsoleExecuter not bind, but command received: ") << cmd.c_str()); } } catch (const FIFE::Exception & e) { FL_WARN(_log, LMsg("Console caught exception: ") << e.what()); println(e.what()); } } void Console::println(const std::string & s) { assert(m_output); // Add the text in rows boost::char_separator separator("\n"); typedef boost::tokenizer > tokenizer; tokenizer tokens(s,separator); for(tokenizer::iterator i = tokens.begin(); i != tokens.end(); ++i) { m_output->addRow(*i); } // Assure the maximum number of rows if( m_output->getNumberOfRows() > m_maxOutputRows ) { unsigned rows = m_output->getNumberOfRows(); int32_t delta_rows = rows - m_maxOutputRows; std::vector rows_text; for(size_t i=delta_rows; i != rows; ++i) { rows_text.push_back(m_output->getTextRow(i)); } m_output->setText(""); for(size_t i=0; i != rows_text.size(); ++i) { m_output->addRow(rows_text[i]); } } // Assure the new text is visible fcn::Rectangle rect(0,m_output->getHeight(),0,0); m_outputscrollarea->showWidgetPart(m_output,rect); } void Console::action(const fcn::ActionEvent & event) { if (m_consoleexec) { m_consoleexec->onToolsClick(); } else { FL_WARN(_log, "ConsoleExecuter not bind, but tools button clicked"); } } void Console::setConsoleExecuter(ConsoleExecuter* const consoleexec) { m_consoleexec = consoleexec; } void Console::removeConsoleExecuter() { m_consoleexec = NULL; } void Console::setIOFont(GuiFont* font) { m_input->setFont(font); m_output->setFont(font); } void Console::focusLost(const fcn::Event& ) { hide(); } } /* vim: set noexpandtab: set shiftwidth=2: set tabstop=2: */ fifengine-0.4.1/engine/core/gui/fifechan/console/console.h000066400000000000000000000115361304641216200234540ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_FIFECHAN_ADDON_CONSOLE_H #define FIFE_FIFECHAN_ADDON_CONSOLE_H // Standard C++ library includes #include // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/time/timer.h" namespace FIFE { class CommandLine; class GuiFont; /** * Console executer is listener interface for console activity */ class ConsoleExecuter { public: /** Destructor */ virtual ~ConsoleExecuter() {} /** Called when console tools button is clicked */ virtual void onToolsClick() = 0; /** Called when user has typed command to console and pressed enter * @return response from executer */ virtual std::string onConsoleCommand(const std::string& command) = 0; }; /** Ingame Console */ class Console : public fcn::Container, public fcn::ActionListener, public fcn::FocusListener { public: /** Constructor */ Console(); /** Destructor */ virtual ~Console(); /** Print one or more lines to the console output */ void println(const std::string & s); /** Show the console * Adds the Console to the fifechan toplevel container * and pushes an input Context so that keys are not send to the * rest of the game. */ void show(); /** Hide the console * Removes itself from the toplevel container * and pops it's input context */ void hide(); /** Clear the console output */ void clear(); /** Toggle the console * Toggles whether the Console is shown or not. * Calls show() or hide() respectively. */ void toggleShowHide(); /** Execute a command * Normally just sends the command to runString() * Checks whether the cmd is just one token * and print it's value rather than throw an * useless error. * * @todo generalize the generated command and the regexp used. */ void execute(std::string cmd); /** Update the FPS caption * @note Is a timer callback. */ void updateCaption(); /** Update the scroll in/out animation. * @note Is a timer callback. */ void updateAnimation(); /** Callback from fifechan to respond to button press */ void action(const fcn::ActionEvent & event); /** Sets executer for the console */ void setConsoleExecuter(ConsoleExecuter* const consoleexec); /** Removes executer for the console */ void removeConsoleExecuter(); /** Layouts the console to match e.g. font changes */ void reLayout(); /** Sets the font used for the input and output areas */ void setIOFont(GuiFont* font); /** Hide if we loose focus */ void focusLost(const fcn::Event& event); private: bool m_isAttached; ConsoleExecuter* m_consoleexec; CommandLine* m_input; fcn::TextBox* m_output; fcn::ScrollArea* m_outputscrollarea; fcn::Label* m_status; fcn::Button* m_toolsbutton; static const unsigned m_maxOutputRows; std::string m_prompt; int32_t m_hiddenPos; int32_t m_animationDelta; bool m_hiding; Timer m_fpsTimer; Timer m_animationTimer; void doShow(); void doHide(); }; } #endif /* vim: set noexpandtab: set shiftwidth=2: set tabstop=2: */ fifengine-0.4.1/engine/core/gui/fifechan/console/console.i000066400000000000000000000040351304641216200234510ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "gui/fifechan/console/console.h" %} namespace FIFE { %feature("director") ConsoleExecuter; class ConsoleExecuter { public: virtual ~ConsoleExecuter() {} virtual void onToolsClick() = 0; virtual std::string onConsoleCommand(const std::string& command) = 0; }; class Console { public: void show(); void hide(); void clear(); void toggleShowHide(); void println( const std::string & s ); void setConsoleExecuter(ConsoleExecuter* const consoleexec); void removeConsoleExecuter(); }; } fifengine-0.4.1/engine/core/gui/fifechan/fifechanmanager.cpp000066400000000000000000000334151304641216200240010ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes #include #include #include #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #ifdef HAVE_OPENGL #include "gui/fifechan/base/opengl/opengl_gui_graphics.h" #endif #include "gui/fifechan/base/sdl/sdl_gui_graphics.h" #include "util/base/exception.h" #include "util/log/logger.h" #include "video/renderbackend.h" #include "gui/fifechan/base/gui_imageloader.h" #include "gui/fifechan/base/gui_font.h" #include "gui/fifechan/console/console.h" #include "video/fonts/fontbase.h" #include "video/fonts/truetypefont.h" #include "video/fonts/subimagefont.h" #include "eventchannel/key/ec_key.h" #include "eventchannel/key/ec_keyevent.h" #include "eventchannel/mouse/ec_mouseevent.h" #include "vfs/fife_boost_filesystem.h" #include "fifechanmanager.h" namespace FIFE { static Logger _log(LM_GUI); FifechanManager::FifechanManager() : m_fcn_gui(new fcn::Gui()), m_focushandler(0), m_fcn_topcontainer(new fcn::Container()), m_imgloader(new GuiImageLoader()) , m_input(new fcn::SDLInput()), m_console(0), m_defaultfont(0), m_fonts(), m_logic_executed(false) { m_fcn_gui->setInput(m_input); fcn::Image::setImageLoader(m_imgloader); m_fcn_gui->setTop(m_fcn_topcontainer); m_focushandler = m_fcn_topcontainer->_getFocusHandler(); m_fcn_topcontainer->setOpaque(false); m_fcn_topcontainer->setFocusable(false); m_had_mouse = false; m_had_widget = false; m_lastMotionX = 0; m_lastMotionY = 0; } FifechanManager::~FifechanManager() { delete m_console; delete m_fcn_topcontainer; delete m_imgloader; delete m_input; delete m_fcn_gui; delete m_gui_graphics; std::vector::iterator i = m_fonts.begin(); while (i != m_fonts.end()) { delete *i; ++i; } } bool FifechanManager::onSdlEvent(SDL_Event& evt) { if (!m_input) { FL_WARN(_log, "FifechanManager, FifechanGUI->getInput == 0 ... discarding events!"); return false; } bool overWidget = m_fcn_topcontainer->getWidgetAt(m_lastMotionX, m_lastMotionY) != 0; switch(evt.type) { case SDL_MOUSEWHEEL: case SDL_MOUSEBUTTONDOWN: m_had_widget = overWidget; case SDL_MOUSEBUTTONUP: // Always send the button up/down events to fifechan m_input->pushInput(evt); // Button was pressed over a widget and still is over a widget // so we mark the event as processed. if( m_had_widget && overWidget ) { return true; } // Button wasn't pressed over a widget so we want to release focus // no matter what. if (!m_had_widget) { m_focushandler->focusNone(); } // Button up was processed by fifechan but there was no widget under // the mouse at the time. Don't mark it as processed here so the // other listeners have a chance to process the event. return false; case SDL_MOUSEMOTION: m_lastMotionX = evt.motion.x; m_lastMotionY = evt.motion.y; if (m_fcn_topcontainer->getWidgetAt(evt.motion.x,evt.motion.y)) { m_had_mouse = true; m_input->pushInput(evt); return true; } if( m_had_mouse ) { // We only keep the mouse if a widget/window has requested // dragging. m_had_mouse = m_focushandler->getDraggedWidget() != 0; m_input->pushInput(evt); return true; } return false; case SDL_KEYDOWN: case SDL_KEYUP: if(m_focushandler->getFocused()) { m_input->pushInput(evt); return true; } return false; case SDL_TEXTINPUT: // don't consume TEXTINPUT m_input->pushInput(evt); return false; case SDL_WINDOWEVENT: // don't consume WINDOWEVENTS m_input->pushInput(evt); return false; default: return false; } } void FifechanManager::resizeTopContainer(uint32_t x, uint32_t y, uint32_t width, uint32_t height) { m_fcn_topcontainer->setDimension(fcn::Rectangle(x, y, width, height)); this->invalidateFonts(); this->m_console->reLayout(); } fcn::Gui* FifechanManager::getFifechanGUI() const { return m_fcn_gui; } void FifechanManager::add(fcn::Widget* widget) { if( !m_widgets.count(widget) ) { m_fcn_topcontainer->add(widget); m_widgets.insert(widget); } } void FifechanManager::remove(fcn::Widget* widget) { if( m_widgets.count(widget) ) { m_widgets.erase(widget); m_fcn_topcontainer->remove(widget); } } void FifechanManager::init(const std::string& backend, int32_t screenWidth, int32_t screenHeight) { if( backend == "SDL" ) { m_gui_graphics = new SdlGuiGraphics(); } #ifdef HAVE_OPENGL else if (backend == "OpenGL") { m_gui_graphics = new OpenGLGuiGraphics(); } #endif else { //should never get here assert(0); } m_fcn_gui->setGraphics(m_gui_graphics); m_console = new Console(); resizeTopContainer(0, 0, screenWidth, screenHeight); } GuiFont* FifechanManager::createFont(const std::string& path, uint32_t size, const std::string& glyphs) { std::string fontpath = path; std::string fontglyphs = glyphs; int32_t fontsize = size; // Set default settings if necessary if(fontpath == "") { fontpath = m_fontpath; } if(fontsize == 0) { fontsize = m_fontsize; } if(fontglyphs == "") { fontglyphs = m_fontglyphs; } IFont* font = NULL; GuiFont* guifont = NULL; if( bfs::extension(fontpath) == ".ttf" || bfs::extension(fontpath) == ".ttc" ) { font = new TrueTypeFont(fontpath, fontsize); } else { font = new SubImageFont(fontpath, fontglyphs); } guifont = new GuiFont(font); m_fonts.push_back(guifont); return guifont; } void FifechanManager::releaseFont(GuiFont* font) { std::vector::iterator i = m_fonts.begin(); while (i != m_fonts.end()) { if ((*i) == font) { m_fonts.erase(i); delete font; return; } ++i; } } void FifechanManager::invalidateFonts() { std::vector::iterator it = m_fonts.begin(); while (it != m_fonts.end()) { (*it)->invalidate(); ++it; } } GuiFont* FifechanManager::setDefaultFont(const std::string& path, uint32_t size, const std::string& glyphs) { m_fontpath = path; m_fontsize = size; m_fontglyphs = glyphs; m_defaultfont = createFont(); fcn::Widget::setGlobalFont(m_defaultfont); if (m_console) { m_console->reLayout(); } return m_defaultfont; } void FifechanManager::turn() { if (!m_logic_executed) m_fcn_gui->logic(); m_logic_executed = false; m_fcn_gui->draw(); } KeyEvent FifechanManager::translateKeyEvent(const fcn::KeyEvent& fcnevt) { KeyEvent keyevt; if(fcnevt.getType() == fcn::KeyEvent::Pressed) keyevt.setType(KeyEvent::PRESSED); else if(fcnevt.getType() == fcn::KeyEvent::Released) keyevt.setType(KeyEvent::RELEASED); else { FL_WARN(_log, LMsg("FifechanManager::translateKeyEvent() - ") << "Unknown event type: " << fcnevt.getType()); keyevt.setType(KeyEvent::UNKNOWN); } keyevt.setShiftPressed(fcnevt.isShiftPressed()); keyevt.setControlPressed(fcnevt.isControlPressed()); keyevt.setAltPressed(fcnevt.isAltPressed()); keyevt.setMetaPressed(fcnevt.isMetaPressed()); keyevt.setNumericPad(fcnevt.isNumericPad()); // Convert from fifechan keyval to FIFE keyval int32_t keyval = fcnevt.getKey().getValue(); keyval = convertFifechanKeyToFifeKey(keyval); keyevt.setKey(Key(static_cast(keyval))); return keyevt; } MouseEvent FifechanManager::translateMouseEvent(const fcn::MouseEvent& fcnevt) { MouseEvent mouseevt; mouseevt.setShiftPressed(fcnevt.isShiftPressed()); mouseevt.setControlPressed(fcnevt.isControlPressed()); mouseevt.setAltPressed(fcnevt.isAltPressed()); mouseevt.setMetaPressed(fcnevt.isMetaPressed()); mouseevt.setX(fcnevt.getX()); mouseevt.setY(fcnevt.getY()); switch(fcnevt.getType()) { case fcn::MouseEvent::Pressed: mouseevt.setType(MouseEvent::PRESSED); break; case fcn::MouseEvent::Released: mouseevt.setType(MouseEvent::RELEASED); break; case fcn::MouseEvent::Moved: mouseevt.setType(MouseEvent::MOVED); break; case fcn::MouseEvent::Clicked: mouseevt.setType(MouseEvent::CLICKED); break; case fcn::MouseEvent::Entered: mouseevt.setType(MouseEvent::ENTERED); break; case fcn::MouseEvent::Exited: mouseevt.setType(MouseEvent::EXITED); break; case fcn::MouseEvent::Dragged: mouseevt.setType(MouseEvent::DRAGGED); break; case fcn::MouseEvent::WheelMovedDown: mouseevt.setType(MouseEvent::WHEEL_MOVED_DOWN); break; case fcn::MouseEvent::WheelMovedUp: mouseevt.setType(MouseEvent::WHEEL_MOVED_UP); break; default: mouseevt.setType(MouseEvent::UNKNOWN_EVENT); } switch(fcnevt.getButton()) { case fcn::MouseInput::Left: mouseevt.setButton(MouseEvent::LEFT); break; case fcn::MouseInput::Right: mouseevt.setButton(MouseEvent::RIGHT); break; case fcn::MouseInput::Middle: mouseevt.setButton(MouseEvent::MIDDLE); break; case fcn::MouseInput::X1: mouseevt.setButton(MouseEvent::X1); break; case fcn::MouseInput::X2: mouseevt.setButton(MouseEvent::X2); break; default: mouseevt.setButton(MouseEvent::UNKNOWN_BUTTON); break; } return mouseevt; } int32_t FifechanManager::convertFifechanKeyToFifeKey(int32_t value) { switch (value) { case fcn::Key::Tab: value = Key::TAB; break; case fcn::Key::LeftAlt: value = Key::LEFT_ALT; break; case fcn::Key::RightAlt: value = Key::RIGHT_ALT; break; case fcn::Key::LeftShift: value = Key::LEFT_SHIFT; break; case fcn::Key::RightShift: value = Key::RIGHT_SHIFT; break; case fcn::Key::LeftControl: value = Key::LEFT_CONTROL; break; case fcn::Key::RightControl: value = Key::RIGHT_CONTROL; break; case fcn::Key::Backspace: value = Key::BACKSPACE; break; case fcn::Key::Pause: value = Key::PAUSE; break; case fcn::Key::Space: value = Key::SPACE; break; case fcn::Key::Escape: value = Key::ESCAPE; break; case fcn::Key::Delete: value = Key::DELETE; break; case fcn::Key::Insert: value = Key::INSERT; break; case fcn::Key::Home: value = Key::HOME; break; case fcn::Key::End: value = Key::END; break; case fcn::Key::PageUp: value = Key::PAGE_UP; break; case fcn::Key::PrintScreen: value = Key::PRINT_SCREEN; break; case fcn::Key::PageDown: value = Key::PAGE_DOWN; break; case fcn::Key::F1: value = Key::F1; break; case fcn::Key::F2: value = Key::F2; break; case fcn::Key::F3: value = Key::F3; break; case fcn::Key::F4: value = Key::F4; break; case fcn::Key::F5: value = Key::F5; break; case fcn::Key::F6: value = Key::F6; break; case fcn::Key::F7: value = Key::F7; break; case fcn::Key::F8: value = Key::F8; break; case fcn::Key::F9: value = Key::F9; break; case fcn::Key::F10: value = Key::F10; break; case fcn::Key::F11: value = Key::F11; break; case fcn::Key::F12: value = Key::F12; break; case fcn::Key::F13: value = Key::F13; break; case fcn::Key::F14: value = Key::F14; break; case fcn::Key::F15: value = Key::F15; break; case fcn::Key::NumLock: value = Key::NUM_LOCK; break; case fcn::Key::CapsLock: value = Key::CAPS_LOCK; break; case fcn::Key::ScrollLock: value = Key::SCROLL_LOCK; break; case fcn::Key::LeftSuper: value = Key::LEFT_SUPER; break; case fcn::Key::RightSuper: value = Key::RIGHT_SUPER; break; case fcn::Key::AltGr: value = Key::ALT_GR; break; case fcn::Key::Up: value = Key::UP; break; case fcn::Key::Down: value = Key::DOWN; break; case fcn::Key::Left: value = Key::LEFT; break; case fcn::Key::Right: value = Key::RIGHT; break; case fcn::Key::Enter: value = Key::ENTER; break; default: // Convert from unicode to lowercase letters if (value >= 1 && value <= 26) { // Control characters value = value - 1 + 'a'; } else if (value >= 'A' && value <= 'Z') { value = value - 'A' + 'a'; } // FIXME: Accented characters (á) will not get converted properly. break; } return value; } } fifengine-0.4.1/engine/core/gui/fifechan/fifechanmanager.h000066400000000000000000000133021304641216200234370ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_VIDEO_GUI_GUICHANMANAGER_H #define FIFE_VIDEO_GUI_GUICHANMANAGER_H // Standard C++ library includes #include // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/fife_stdint.h" #include "util/base/singleton.h" #include "eventchannel/sdl/ec_isdleventlistener.h" #include "gui/guimanager.h" namespace fcn { class Gui; class Container; class Widget; class SDLInput; class FocusHandler; } namespace FIFE { class GuiImageLoader; class Console; class KeyEvent; class MouseEvent; class IFont; class GuiFont; /* GUI Fifechan Manager. * * This class controls the Fifechan GUI system in FIFE. */ class FifechanManager : public IGUIManager, public DynamicSingleton { public: /** Constructor. */ FifechanManager(); /** Destructor. */ virtual ~FifechanManager(); /** Gets the member pointer to the Fifechan GUI. * * @return The member pointer to the Fifechan GUI. */ fcn::Gui* getFifechanGUI() const; /** Performs the GUI logic and draws the GUI accordingly. * * This will be called each frame. */ virtual void turn(); /** Inits the Fifechan GUI Manager. * @param backend The GUI backend object to use * @param screenWidth width for the gui top container * @param screenHeight height for the gui top container */ void init(const std::string& backend, int32_t screenWidth, int32_t screenHeight); /** Resizes the top container. * * @param x The new starting X coordinate. * @param y The new starting Y coordinate. * @param width The new width. * @param height The new height. */ void resizeTopContainer(uint32_t x, uint32_t y, uint32_t width, uint32_t height); /** Adds a new widget. * * @param widget A pointer to the widget to add. */ void add(fcn::Widget* widget); /** Removes a widget. * * @param widget A pointer to the widget to remove. */ void remove(fcn::Widget* widget); /** Gets the top container. * * @return The top container. */ fcn::Container* getTopContainer() const { return m_fcn_topcontainer; } /** Gets the console. * * @return The console. */ Console* getConsole() const { return m_console; }; /** Set the global font properties. */ GuiFont* setDefaultFont(const std::string& path, uint32_t size, const std::string& glyphs); /** Gets the default font */ GuiFont* getDefaultFont() { return m_defaultfont; }; /** Gets font with given properties. Note that font will be owned by Fifechan GUI Manager */ GuiFont* createFont(const std::string& path = "", uint32_t size = 0, const std::string& glyphs = ""); /** Releases given font. */ void releaseFont(GuiFont* font); void invalidateFonts(); virtual bool onSdlEvent(SDL_Event& evt); KeyEvent translateKeyEvent(const fcn::KeyEvent& evt); MouseEvent translateMouseEvent(const fcn::MouseEvent& evt); protected: static int32_t convertFifechanKeyToFifeKey(int32_t value); private: // The Fifechan GUI. fcn::Gui* m_fcn_gui; // Fifechan Graphics fcn::Graphics* m_gui_graphics; // Focus handler for input management fcn::FocusHandler* m_focushandler; // The top container of the GUI. fcn::Container* m_fcn_topcontainer; // The imageloader. GuiImageLoader* m_imgloader; // The input controller. fcn::SDLInput *m_input; // The console. Console *m_console; //The default font GuiFont* m_defaultfont; // The fonts used std::vector m_fonts; // Added widgets std::set m_widgets; // Used to accept mouse motion events that leave widget space bool m_had_mouse; bool m_had_widget; // Track last motion event position int32_t m_lastMotionX; int32_t m_lastMotionY; // default font settings std::string m_fontpath; std::string m_fontglyphs; int32_t m_fontsize; // true, if fifechan logic has already been executed for this round bool m_logic_executed; }; } #endif fifengine-0.4.1/engine/core/gui/fifechan/fifechanmanager.i000066400000000000000000000050461304641216200234460ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include #include "gui/fifechan/fifechanmanager.h" #include "gui/guimanager.h" %} %include "gui/guimanager.i" namespace fcn { class Widget; } namespace FIFE { class Console; class FifechanManager : public IGUIManager { public: FifechanManager(); virtual ~FifechanManager(); void init(const std::string& backend, int32_t screenWidth, int32_t screenHeight); Console* getConsole() const; void add(fcn::Widget* widget); void remove(fcn::Widget* widget); GuiFont* createFont(const std::string& path, uint32_t size, const std::string& glyphs); void releaseFont(GuiFont* font); GuiFont* setDefaultFont(const std::string& path, uint32_t size, const std::string& glyphs); GuiFont* getDefaultFont(); KeyEvent translateKeyEvent(const fcn::KeyEvent& evt); MouseEvent translateMouseEvent(const fcn::MouseEvent& evt); private: virtual void turn(); virtual void resizeTopContainer(uint32_t x, uint32_t y, uint32_t width, uint32_t height); virtual bool onSdlEvent(SDL_Event& evt); }; } fifengine-0.4.1/engine/core/gui/fifechan/lib/000077500000000000000000000000001304641216200207375ustar00rootroot00000000000000fifengine-0.4.1/engine/core/gui/fifechan/lib/fifechanlistener.i000066400000000000000000000065671304641216200244400ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fifechan %{ #include #include #include #include %} namespace fcn { %feature("director") MouseListener; class MouseListener { public: virtual ~MouseListener(); virtual void mouseEntered(fcn::MouseEvent& mouseEvent); virtual void mouseExited(fcn::MouseEvent& mouseEvent); virtual void mousePressed(fcn::MouseEvent& mouseEvent); virtual void mouseReleased(fcn::MouseEvent& mouseEvent); virtual void mouseClicked(fcn::MouseEvent& mouseEvent); virtual void mouseWheelMovedUp(fcn::MouseEvent& mouseEvent); virtual void mouseWheelMovedDown(fcn::MouseEvent& mouseEvent); virtual void mouseWheelMovedRight(fcn::MouseEvent& mouseEvent); virtual void mouseWheelMovedLeft(fcn::MouseEvent& mouseEvent); virtual void mouseMoved(fcn::MouseEvent& mouseEvent); virtual void mouseDragged(fcn::MouseEvent& mouseEvent); protected: MouseListener() { } }; %feature("director") KeyListener; class KeyListener { public: virtual ~KeyListener(); virtual void keyPressed(fcn::KeyEvent& keyEvent); virtual void keyReleased(fcn::KeyEvent& keyEvent); protected: KeyListener() { } }; %feature("director") ActionListener; class ActionListener { public: virtual ~ActionListener() { } virtual void action(const fcn::ActionEvent& actionEvent) = 0; }; %feature("director") WidgetListener; class WidgetListener { public: virtual ~WidgetListener() { } virtual void widgetResized(const fcn::Event& event); virtual void widgetMoved(const fcn::Event& event); virtual void widgetHidden(const fcn::Event& event); virtual void widgetShown(const fcn::Event& event); virtual void ancestorMoved(const fcn::Event& event); virtual void ancestorHidden(const fcn::Event& event); virtual void ancestorShown(const fcn::Event& event); protected: WidgetListener() { } }; } fifengine-0.4.1/engine/core/gui/fifechan/lib/widgets.i000066400000000000000000000324041304641216200225620ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fifechan %{ #include %} namespace fcn { class Font; class Image; class ActionListener; class MouseListener; class KeyListener; %nodefaultctor; class Graphics { public: enum Alignment { Left = 0, Center, Right }; }; %clearnodefaultctor; class Color { public: Color(); Color(int32_t color); Color(int32_t r, int32_t g, int32_t b, int32_t a = 255); Color operator+(const Color& color) const; Color operator-(const Color& color) const; Color operator*(float value) const; bool operator==(const Color& color) const; bool operator!=(const Color& color) const; int32_t r; int32_t g; int32_t b; int32_t a; }; class Widget { public: /* Widget(); */ /* virtual ~Widget(); */ virtual void setWidth(int32_t width); virtual int32_t getWidth() const; virtual void setHeight(int32_t height); virtual int32_t getHeight() const; virtual void setSize(int32_t width, int32_t height); virtual void setX(int32_t x); virtual int32_t getX() const; virtual void setY(int32_t y); virtual int32_t getY() const; virtual void setPosition(int32_t x, int32_t y); virtual void setFrameSize(uint32_t frameSize); virtual uint32_t getFrameSize() const; virtual void setFocusable(bool focusable); virtual bool isFocusable() const; virtual bool isFocused() const; virtual void setEnabled(bool enabled); virtual bool isEnabled() const; virtual void setVisible(bool visible); virtual bool isVisible() const; virtual bool isSetVisible() const; virtual void setBaseColor(const Color& color); virtual const Color& getBaseColor() const; virtual void setForegroundColor(const Color& color); virtual const Color& getForegroundColor() const; virtual void setBackgroundColor(const Color& color); virtual const Color& getBackgroundColor() const; virtual void setSelectionColor(const Color& color); virtual const Color& getSelectionColor() const; virtual void requestFocus(); virtual void requestMoveToTop(); virtual void requestMoveToBottom(); virtual void setActionEventId(const std::string& actionEventId); virtual const std::string& getActionEventId() const; virtual void getAbsolutePosition(int32_t& OUTPUT, int32_t& OUTPUT) const; Font *getFont() const; static void setGlobalFont(Font* font); virtual void setFont(Font* font); virtual bool isTabInEnabled() const; virtual void setTabInEnabled(bool enabled); virtual bool isTabOutEnabled() const; virtual void setTabOutEnabled(bool enabled); virtual bool isModalFocusable() const; virtual bool isModalMouseInputFocusable() const; virtual void requestModalFocus(); virtual void requestModalMouseInputFocus(); virtual void releaseModalFocus(); virtual void releaseModalMouseInputFocus(); virtual bool isModalFocused() const; virtual bool isModalMouseInputFocused() const; virtual Widget *getWidgetAt(int32_t x, int32_t y); virtual void moveToTop(Widget* widget) { }; virtual void moveToBottom(Widget* widget) { }; virtual void focusNext() { }; virtual void focusPrevious() { }; virtual void addActionListener(ActionListener* actionListener); virtual void removeActionListener(ActionListener* actionListener); virtual void addMouseListener(MouseListener* actionListener); virtual void removeMouseListener(MouseListener* actionListener); virtual void addKeyListener(KeyListener* actionListener); virtual void removeKeyListener(KeyListener* actionListener); virtual void addWidgetListener(WidgetListener* widgetListener); virtual void removeWidgetListener(WidgetListener* widgetListener); /* protected: */ virtual void draw(Graphics* graphics) = 0; }; %feature("notabstract") Container; class Container: public Widget { public: Container(); virtual ~Container(); virtual void setOpaque(bool opaque); virtual bool isOpaque() const; virtual void add(Widget* widget); virtual void add(Widget* widget, int32_t x, int32_t y); virtual void remove(Widget* widget); virtual void clear(); }; %feature("notabstract") CheckBox; class CheckBox: public Widget { public: CheckBox(); virtual ~CheckBox(); virtual bool isSelected() const; virtual void setSelected(bool marked); virtual const std::string &getCaption() const; virtual void setCaption(const std::string& caption); virtual void adjustSize(); }; %feature("notabstract") Button; class Button: public Widget { public: Button(); Button(const std::string& caption); virtual void setCaption(const std::string& caption); virtual const std::string& getCaption() const; virtual void setAlignment(Graphics::Alignment alignment); virtual Graphics::Alignment getAlignment() const; virtual void adjustSize(); /*virtual bool isPressed() const;*/ }; %feature("notabstract") ScrollArea; class ScrollArea: public Widget { public: ScrollArea(); ScrollArea(Widget *content); ScrollArea(Widget *content,ScrollArea::ScrollPolicy hPolicy,ScrollArea::ScrollPolicy vPolicy); virtual ~ScrollArea(); virtual void setContent(Widget* widget); virtual Widget* getContent(); virtual void setHorizontalScrollPolicy(ScrollArea::ScrollPolicy hPolicy); virtual ScrollArea::ScrollPolicy getHorizontalScrollPolicy(); virtual void setVerticalScrollPolicy(ScrollArea::ScrollPolicy vPolicy); virtual ScrollArea::ScrollPolicy getVerticalScrollPolicy(); virtual void setScrollPolicy(ScrollArea::ScrollPolicy hPolicy, ScrollArea::ScrollPolicy vPolicy); virtual void setVerticalScrollAmount(int32_t vScroll); virtual int32_t getVerticalScrollAmount(); virtual void setHorizontalScrollAmount(int32_t hScroll); virtual int32_t getHorizontalScrollAmount(); virtual void setScrollAmount(int32_t hScroll, int32_t vScroll); virtual int32_t getHorizontalMaxScroll(); virtual int32_t getVerticalMaxScroll(); virtual void setScrollbarWidth(int32_t width); virtual int32_t getScrollbarWidth(); virtual void setLeftButtonScrollAmount(int32_t amount); virtual void setRightButtonScrollAmount(int32_t amount); virtual void setUpButtonScrollAmount(int32_t amount); virtual void setDownButtonScrollAmount(int32_t amount); virtual int32_t getLeftButtonScrollAmount(); virtual int32_t getRightButtonScrollAmount(); virtual int32_t getUpButtonScrollAmount(); virtual int32_t getDownButtonScrollAmount(); enum ScrollPolicy { ShowAlways, ShowNever, ShowAuto }; }; %feature("director") ListModel; class ListModel { public: virtual ~ListModel() { } virtual int32_t getNumberOfElements() = 0; virtual std::string getElementAt(int32_t i) = 0; }; %feature("notabstract") ListBox; class ListBox: public Widget { public: ListBox(); ListBox(ListModel *listModel); virtual ~ListBox() { } virtual int32_t getSelected(); virtual void setSelected(int32_t selected); virtual void setListModel(ListModel *listModel); virtual ListModel *getListModel(); virtual void adjustSize(); virtual bool isWrappingEnabled(); virtual void setWrappingEnabled(bool wrapping); }; %feature("notabstract") DropDown; class DropDown: public Widget { public: DropDown(ListModel *listModel = NULL, ScrollArea *scrollArea = NULL, ListBox *listBox = NULL); virtual ~DropDown(); virtual int32_t getSelected(); virtual void setSelected(int32_t selected); virtual void setListModel(ListModel *listModel); virtual ListModel *getListModel(); virtual void adjustHeight(); virtual void setBaseColor(const Color& color); virtual const Color& getBaseColor() const; virtual void setForegroundColor(const Color& color); virtual const Color& getForegroundColor() const; virtual void setBackgroundColor(const Color& color); virtual const Color& getBackgroundColor() const; virtual void setSelectionColor(const Color& color); virtual const Color& getSelectionColor() const; }; %feature("notabstract") RadioButton; class RadioButton: public Widget { public: RadioButton(); RadioButton(const std::string &caption, const std::string &group, bool marked=false); virtual ~RadioButton(); virtual bool isSelected() const; virtual void setSelected(bool marked); virtual const std::string &getCaption() const; virtual void setCaption(const std::string caption); virtual void setGroup(const std::string &group); virtual const std::string &getGroup() const; virtual void adjustSize(); }; %feature("notabstract") Slider; class Slider: public Widget { public: Slider(double scaleEnd = 1.0); Slider(double scaleStart, double scaleEnd); virtual ~Slider() { } virtual void setScale(double scaleStart, double scaleEnd); virtual double getScaleStart() const; virtual void setScaleStart(double scaleStart); virtual double getScaleEnd() const; virtual void setScaleEnd(double scaleEnd); virtual double getValue() const; virtual void setValue(double value); virtual void setMarkerLength(int32_t length); virtual int32_t getMarkerLength() const; virtual void setOrientation(Slider::Orientation orientation); virtual Slider::Orientation getOrientation() const; virtual void setStepLength(double length); virtual double getStepLength() const; enum Orientation { Horizontal = 0, Vertical }; }; %feature("notabstract") Window; class Window: public Container { public: Window(); Window(const std::string& caption); virtual ~Window(); virtual void setCaption(const std::string& caption); virtual const std::string& getCaption() const; virtual void setAlignment(Graphics::Alignment alignment); virtual Graphics::Alignment getAlignment() const; virtual void setPadding(uint32_t padding); virtual uint32_t getPadding() const; virtual void setTitleBarHeight(uint32_t height); virtual uint32_t getTitleBarHeight(); virtual void setMovable(bool movable); virtual bool isMovable() const; virtual void setOpaque(bool opaque); virtual bool isOpaque(); virtual void resizeToContent(); }; %feature("notabstract") TextBox; class TextBox: public Widget { public: TextBox(); TextBox(const std::string& text); virtual void setText(const std::string& text); virtual std::string getText() const; virtual std::string getTextRow(int row) const; virtual void setTextRow(int row, const std::string& text); virtual int getNumberOfRows() const; virtual int getCaretPosition() const; virtual void setCaretPosition(int position); virtual int getCaretRow() const; virtual void setCaretRow(int row); virtual int getCaretColumn() const; virtual void setCaretColumn(int column); virtual void setCaretRowColumn(int row, int column); virtual void scrollToCaret(); virtual bool isEditable() const; virtual void setEditable(bool editable); virtual void addRow(const std::string row); virtual bool isOpaque(); virtual void setOpaque(bool opaque); }; %feature("notabstract") TextField; class TextField: public Widget { public: TextField(); TextField(const std::string& text); virtual ~TextField(); virtual void setText(const std::string& text); virtual std::string getText() const; virtual void adjustSize(); virtual void adjustHeight(); virtual void setCaretPosition(uint32_t position); virtual uint32_t getCaretPosition() const; }; %feature("notabstract") PasswordField; class PasswordField : public TextField { public: PasswordField(const std::string& text = ""); virtual ~PasswordField(); }; %feature("notabstract") IconProgressBar; class IconProgressBar : public Widget { public: IconProgressBar(); IconProgressBar(Image *image, int maxIcons); virtual ~IconProgressBar(); void setImage(Image* image); const Image* getImage() const; void setMaxIcons(int32_t maxIcons); int32_t getMaxIcons() const; void setOrientation(IconProgressBar::Orientation orientation); IconProgressBar::Orientation getOrientation() const; void advance(); void reset(); void setOpaque(bool opaque); bool isOpaque() const; enum Orientation { HORIZONTAL = 0, VERTICAL }; }; } fifengine-0.4.1/engine/core/gui/fifechan/util/000077500000000000000000000000001304641216200211465ustar00rootroot00000000000000fifengine-0.4.1/engine/core/gui/fifechan/util/utf8/000077500000000000000000000000001304641216200220345ustar00rootroot00000000000000fifengine-0.4.1/engine/core/gui/fifechan/util/utf8/utf8stringeditor.cpp000066400000000000000000000074071304641216200260740ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2009 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/utf8/utf8.h" #include "utf8stringeditor.h" namespace fcn { int UTF8StringEditor::nextChar(const std::string & text, int byteOffset) { std::string::const_iterator c, e; c = text.begin() + byteOffset; e = text.end(); utf8::next(c, e); return std::string(text.begin(), c).size(); } int UTF8StringEditor::prevChar(const std::string & text, int byteOffset) { std::string::const_iterator c, b; c = text.begin() + byteOffset; b = text.begin(); utf8::prior(c, b); return std::string(b, c).size(); } int UTF8StringEditor::eraseChar(std::string & text, int byteOffset) { std::string::iterator begin, cur; begin = text.begin() + byteOffset; cur = begin; utf8::next(cur, text.end()); text = std::string(text.begin(), begin) + std::string(cur, text.end()); return byteOffset; // this shouldn't change! } int UTF8StringEditor::insertChar(std::string & text, int byteOffset, int ch) { std::string newText; std::string::iterator cut; int newOffset; // make a temp string from left part of the caret (+6 extra chars) newText = text.substr(0, byteOffset) + " "; // append character utf8::append(ch, newText.begin() + byteOffset); // calculate newText real length cut = newText.begin() + byteOffset; utf8::next(cut, newText.end()); // cut the string to real length newText = std::string(newText.begin(), cut); newOffset = newText.size(); // make new text text = newText + text.substr(byteOffset); return newOffset; } int UTF8StringEditor::countChars(const std::string & text, int byteOffset) { return utf8::distance(text.begin(), text.begin() + byteOffset); } int UTF8StringEditor::getOffset(const std::string & text, int charIndex) { std::string::const_iterator cur, end; int bytes = 0, i; if (charIndex < 0) return 0; cur = text.begin(); end = text.end(); for(i = 0; i < charIndex && cur != end; i++) { utf8::next(cur, end); } return std::string(text.begin(), cur).size(); } }; fifengine-0.4.1/engine/core/gui/fifechan/util/utf8/utf8stringeditor.h000066400000000000000000000075671304641216200255500ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2009 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FCN_UTF8STRINGEDITOR_HPP #define FCN_UTF8STRINGEDITOR_HPP // Standard C++ library includes // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder namespace fcn { /** * UTF-8 string editor. * * This is a helper class which allows to use UTF-8 strings in * your application. * * @author Przemyslaw Grzywacz */ class UTF8StringEditor { public: /** * Returns byte offset of the next character. * * @param text UTF-8 text to navigate. * @param byteOffset Byte offset of current character. * @return Byte offset of the next character. */ static int nextChar(const std::string& text, int byteOffset); /** * Returns byte offset of the previous character. * * @param text UTF-8 text to navigate. * @param byteOffset Byte offset of current character. * @return Byte offset of the previous character. */ static int prevChar(const std::string& text, int byteOffset); /** * Erase character at specified byte offset. * * @param text UTF-8 text to modify. * @param byteOffset Byte offset of the character to erase. * @return New byte offset (is equal to byteOffset). */ static int eraseChar(std::string& text, int byteOffset); /** * Insert a character at specified byte offset. * * @param text UTF-8 text to modify. * @param byteOffset Byte offset where character will be inserted. * @param ch Unicode character to insert. * @return New byte offset (after the new character). */ static int insertChar(std::string& text, int byteOffset, int ch); /** * Counts characters up to byteOffset. * * @param text UTF-8 text to navigate. * @param byteOffset Byte offset inside the text. * @return Number of characters. */ static int countChars(const std::string& text, int byteOffset); /** * Gets byte offset for character index. * * This method automaticly clips charIndex to be inside * the string + EOF * * @param text UTF-8 text to navigate. * @param charIndex Character index to move to. * @return Byte offset of character at charIndex. */ static int getOffset(const std::string& text, int charIndex); }; }; #endif // !FCN_UTF8STRINGEDITOR_HPP fifengine-0.4.1/engine/core/gui/fifechan/widgets/000077500000000000000000000000001304641216200216375ustar00rootroot00000000000000fifengine-0.4.1/engine/core/gui/fifechan/widgets/clicklabel.cpp000066400000000000000000000125711304641216200244360ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "gui/fifechan/base/gui_font.h" #include "util/base/exception.h" #include "video/image.h" #include "clicklabel.h" namespace fcn { ClickLabel::ClickLabel() { mGuiFont = static_cast (getFont()); // setAlignment(Graphics::LEFT); mTextWrapping = false; setFrameSize(0); addMouseListener(this); addKeyListener(this); addFocusListener(this); } ClickLabel::ClickLabel(const std::string& caption) { mGuiFont = static_cast (getFont()); // setAlignment(Graphics::LEFT); mTextWrapping = false; setCaption(caption); setFrameSize(0); addMouseListener(this); addKeyListener(this); addFocusListener(this); wrapText(); } ClickLabel::~ClickLabel() { } void ClickLabel::setCaption(const std::string& caption) { mCaption = caption; mGuiFont = static_cast (getFont()); wrapText(); } const std::string& ClickLabel::getCaption() const { return mCaption; } void ClickLabel::setWidth(int32_t width) { Widget::setWidth(width); wrapText(); } void ClickLabel::draw(Graphics* graphics) { if (mGuiFont != static_cast (getFont())) { mGuiFont = static_cast (getFont()); wrapText(); adjustSize(); } int32_t textX = 0; int32_t textY = 0; graphics->setColor(getBackgroundColor()); graphics->fillRectangle(Rectangle(1, 1, getDimension().width-1, getHeight() - 1)); if (mGuiFont) { if( isTextWrapping() ) { mGuiFont->drawMultiLineString(graphics, mWrappedText, textX, textY); } else { mGuiFont->drawMultiLineString(graphics, mCaption, textX, textY); } } } void ClickLabel::setTextWrapping(bool textWrapping) { bool wrappingEnabled = !mTextWrapping && textWrapping; mTextWrapping = textWrapping; if (wrappingEnabled) { wrapText(); } } bool ClickLabel::isTextWrapping() const { return mTextWrapping; } void ClickLabel::adjustSize() { if (mGuiFont) { FIFE::Image* image; if( isTextWrapping() ) { image = mGuiFont->getAsImageMultiline(mWrappedText); } else { image = mGuiFont->getAsImageMultiline(mCaption); } setWidth( image->getWidth() ); setHeight( image->getHeight() ); } } void ClickLabel::wrapText() { if( isTextWrapping() && mGuiFont ) { mWrappedText = mGuiFont->splitTextToWidth(mCaption,getWidth()); } } void ClickLabel::mousePressed(MouseEvent& mouseEvent) { if (mouseEvent.getButton() == MouseEvent::Left) { mMousePressed = true; mouseEvent.consume(); } } void ClickLabel::mouseExited(MouseEvent& mouseEvent) { mHasMouse = false; } void ClickLabel::mouseEntered(MouseEvent& mouseEvent) { mHasMouse = true; } void ClickLabel::mouseReleased(MouseEvent& mouseEvent) { if (mouseEvent.getButton() == MouseEvent::Left && mMousePressed && mHasMouse) { mMousePressed = false; distributeActionEvent(); mouseEvent.consume(); } else if (mouseEvent.getButton() == MouseEvent::Left) { mMousePressed = false; mouseEvent.consume(); } } void ClickLabel::mouseDragged(MouseEvent& mouseEvent) { mouseEvent.consume(); } void ClickLabel::keyPressed(KeyEvent& keyEvent) { Key key = keyEvent.getKey(); if (key.getValue() == Key::Enter || key.getValue() == Key::Space) { mKeyPressed = true; keyEvent.consume(); } } void ClickLabel::keyReleased(KeyEvent& keyEvent) { Key key = keyEvent.getKey(); if ((key.getValue() == Key::Enter || key.getValue() == Key::Space) && mKeyPressed) { mKeyPressed = false; distributeActionEvent(); keyEvent.consume(); } } void ClickLabel::focusLost(const Event& event) { mMousePressed = false; mKeyPressed = false; } } fifengine-0.4.1/engine/core/gui/fifechan/widgets/clicklabel.h000066400000000000000000000063041304641216200241000ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_GUI_WIDGETS_CLICKLABEL_H #define FIFE_GUI_WIDGETS_CLICKLABEL_H // Standard C++ library includes #include // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder namespace FIFE { class GuiFont; } namespace fcn { class ClickLabel : public Widget, public MouseListener, public KeyListener, public FocusListener { public: ClickLabel(); ClickLabel(const std::string& caption); virtual ~ClickLabel(); virtual void setWidth(int32_t width); virtual void setCaption(const std::string& caption); virtual const std::string& getCaption() const; virtual void draw(Graphics* graphics); virtual void adjustSize(); void setTextWrapping(bool); bool isTextWrapping() const; // Inherited from FocusListener virtual void focusLost(const Event& event); // Inherited from MouseListener virtual void mousePressed(MouseEvent& mouseEvent); virtual void mouseReleased(MouseEvent& mouseEvent); virtual void mouseEntered(MouseEvent& mouseEvent); virtual void mouseExited(MouseEvent& mouseEvent); virtual void mouseDragged(MouseEvent& mouseEvent); // Inherited from KeyListener virtual void keyPressed(KeyEvent& keyEvent); virtual void keyReleased(KeyEvent& keyEvent); protected: void wrapText(); FIFE::GuiFont* mGuiFont; bool mTextWrapping; std::string mCaption; std::string mWrappedText; bool mHasMouse; bool mKeyPressed; bool mMousePressed; }; } #endif /* vim: set noexpandtab: set shiftwidth=2: set tabstop=2: */ fifengine-0.4.1/engine/core/gui/fifechan/widgets/icon2.cpp000066400000000000000000000176221304641216200233650ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ /* _______ __ __ __ ______ __ __ _______ __ __ * / _____/\ / /\ / /\ / /\ / ____/\ / /\ / /\ / ___ /\ / |\/ /\ * / /\____\// / // / // / // /\___\// /_// / // /\_/ / // , |/ / / * / / /__ / / // / // / // / / / ___ / // ___ / // /| ' / / * / /_// /\ / /_// / // / // /_/_ / / // / // /\_/ / // / | / / * /______/ //______/ //_/ //_____/\ /_/ //_/ //_/ //_/ //_/ /|_/ / * \______\/ \______\/ \_\/ \_____\/ \_\/ \_\/ \_\/ \_\/ \_\/ \_\/ * * Copyright (c) 2004, 2005 darkbits Js_./ * Per Larsson a.k.a finalman _RqZ{a<^_aa * Olof Naess�n a.k.a jansem/yakslem _asww7!uY`> )\a// * _Qhm`] _f "'c 1!5m * Visit: http://guichan.darkbits.org )Qk

ws?a-?' ._/L #' * binary forms, with or without )4d[#7r, . ' )d`)[ * modification, are permitted provided _Q-5'5W..j/?' -?!\)cam' * that the following conditions are met: j<. a J@\ * this list of conditions and the j(]1u #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "icon2.h" namespace fcn { Icon2::Icon2(Image* image) { mImage = image; mScale = false; mTile = false; if( mImage ) { setHeight(image->getHeight()); setWidth(image->getWidth()); } } void Icon2::draw(Graphics* graphics) { if ( mImage ) { // draw with widget or image size int w = mScale ? getWidth() : mImage->getWidth(); int h = mScale ? getHeight() : mImage->getHeight(); if (mTile && !mScale) { Rectangle rect(0, 0, w, h); while (rect.x < getWidth()) { rect.y = 0; while (rect.y < getHeight()) { graphics->drawImage(mImage, rect.x, rect.y, rect.x, rect.y, rect.width, rect.height); rect.y += rect.height; } rect.x += rect.width; } } else { graphics->drawImage(mImage, 0, 0, 0, 0, w, h); } } } void Icon2::drawFrame(Graphics* graphics) { Color faceColor = getBaseColor(); Color highlightColor, shadowColor; int32_t alpha = getBaseColor().a; int32_t width = getWidth() + getFrameSize() * 2 - 1; int32_t height = getHeight() + getFrameSize() * 2 - 1; highlightColor = faceColor + 0x303030; highlightColor.a = alpha; shadowColor = faceColor - 0x303030; shadowColor.a = alpha; uint32_t i; for (i = 0; i < getFrameSize(); ++i) { graphics->setColor(shadowColor); graphics->drawLine(i,i, width - i, i); graphics->drawLine(i,i + 1, i, height - i - 1); graphics->setColor(highlightColor); graphics->drawLine(width - i,i + 1, width - i, height - i); graphics->drawLine(i,height - i, width - i - 1, height - i); } } void Icon2::setImage(Image* image) { mImage = image; if( mImage ) { setHeight(image->getHeight()); setWidth(image->getWidth()); } } bool Icon2::isScaling() const { return mScale; } void Icon2::setScaling(bool scale) { mScale = scale; } bool Icon2::isTiling() const { return mTile; } void Icon2::setTiling(bool tile) { mTile = tile; } } fifengine-0.4.1/engine/core/gui/fifechan/widgets/icon2.h000066400000000000000000000144741304641216200230340ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ /* _______ __ __ __ ______ __ __ _______ __ __ * / _____/\ / /\ / /\ / /\ / ____/\ / /\ / /\ / ___ /\ / |\/ /\ * / /\____\// / // / // / // /\___\// /_// / // /\_/ / // , |/ / / * / / /__ / / // / // / // / / / ___ / // ___ / // /| ' / / * / /_// /\ / /_// / // / // /_/_ / / // / // /\_/ / // / | / / * /______/ //______/ //_/ //_____/\ /_/ //_/ //_/ //_/ //_/ /|_/ / * \______\/ \______\/ \_\/ \_____\/ \_\/ \_\/ \_\/ \_\/ \_\/ \_\/ * * Copyright (c) 2004, 2005 darkbits Js_./ * Per Larsson a.k.a finalman _RqZ{a<^_aa * Olof Naess�n a.k.a jansem/yakslem _asww7!uY`> )\a// * _Qhm`] _f "'c 1!5m * Visit: http://guichan.darkbits.org )Qk

ws?a-?' ._/L #' * binary forms, with or without )4d[#7r, . ' )d`)[ * modification, are permitted provided _Q-5'5W..j/?' -?!\)cam' * that the following conditions are met: j<. a J@\ * this list of conditions and the j(]1u #include #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/fife_stdint.h" namespace fcn { /** * An Icon for displaying images. * * \note Modified for FIFE. */ class Icon2 : public Widget { public: /** * Constructor. * * @param image an Image to display. */ Icon2(Image* image); virtual ~Icon2() {} // Inherited from Widget virtual void draw(Graphics* graphics); virtual void drawFrame(Graphics* graphics); // added for FIFE void setImage(Image* image); // if enabled the image is scaled to widget size bool isScaling() const; void setScaling(bool scale); // if enabled the image is tiled to widget size bool isTiling() const; void setTiling(bool tile); // changed from private to allow derived instance access protected: Image* mImage; bool mScale; bool mTile; }; } #endif // end FCN_ICON2_HPP fifengine-0.4.1/engine/core/gui/fifechan/widgets/percentagebar.cpp000066400000000000000000000064261304641216200251550ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ /* * For comments regarding functions please see the header file. */ // Standard C++ library includes // 3rd party library includes #include #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "percentagebar.h" namespace fcn { PercentageBar::PercentageBar() { mImage = 0; setOrientation(HORIZONTAL); setValue(0); } void PercentageBar::draw(Graphics* graphics) { graphics->setColor(getForegroundColor()); if (getOrientation() == HORIZONTAL) { graphics->fillRectangle(fcn::Rectangle(0,0,getWidth() * mValue/100,getHeight())); } else { graphics->fillRectangle(fcn::Rectangle(0,getHeight()-getHeight() * mValue/100,getWidth(),getHeight() * mValue/100)); } if ( mImage ) graphics->drawImage(mImage, 0, 0); } void PercentageBar::setForegroundImage(Image* image) { mImage = image; if( mImage ) { setHeight(image->getHeight()); setWidth(image->getWidth()); } } void PercentageBar::setValue(int32_t value) { if (value > 100) { mValue = 100; return; } if (value < 0) { mValue = 0; return; } mValue = value; } int32_t PercentageBar::getValue() const { return mValue; } void PercentageBar::setOrientation(PercentageBar::Orientation orientation) { mOrientation = orientation; } PercentageBar::Orientation PercentageBar::getOrientation() const { return mOrientation; } } fifengine-0.4.1/engine/core/gui/fifechan/widgets/percentagebar.h000066400000000000000000000072121304641216200246140ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FCN_PERCENTAGE_BAR_HPP #define FCN_PERCENTAGE_BAR_HPP // Standard C++ library includes // 3rd party library includes #include #include #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/fife_stdint.h" namespace fcn { /** * A simple percentage bar. * * */ class PercentageBar : public Widget { public: enum Orientation { HORIZONTAL = 0, VERTICAL }; /** * Constructor. * */ PercentageBar(); virtual ~PercentageBar() {} // Inherited from Widget virtual void draw(Graphics* graphics); /* * Sets the image that will be displayed above the widget * * @param image Image to be displayed */ void setForegroundImage(Image* image); /** * Sets the orientation of the percentage bar. * * @param orientation The orientation of the percentage bar. * @see getOrientation */ void setOrientation(Orientation orientation); /** * Gets the orientation of the percentage bar. * * @return The orientation of the percentage bar. * @see setOrientation */ Orientation getOrientation() const; /** * Gets the value of the percentage bar * * @return The value of the percentage bar. */ int32_t getValue() const; /** * Sets the value of the percentage bar * * @param value In the range of 0-100. */ void setValue(int32_t value); // changed from private to allow derived instance access protected: Image* mImage; /** * Holds the current value of the percentage bar. */ double mValue; /** * Holds the orientation of the percentage bar. A percentage bar can be drawn * vertically or horizontally. */ Orientation mOrientation; }; } #endif // end FCN_PERCENTAGE_BAR_HPP fifengine-0.4.1/engine/core/gui/fifechan/widgets/togglebutton.cpp000066400000000000000000000173531304641216200250710ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ /*************************************************************************** * Note! Group and groupmap borrows heavily from ideas of Fifechan library * * version 0.8.1 * ***************************************************************************/ // Standard C++ library includes #include #include // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/log/logger.h" #include "togglebutton.h" namespace fcn { static FIFE::Logger _log(LM_GUI); ToggleButton::GroupMap ToggleButton::m_groupMap; ToggleButton::ToggleButton(Image *up_file , Image *down_file, Image *hover_file, const std::string& caption, const std::string& group): Button(), m_upImage(up_file), m_downImage(down_file), m_hoverImage(hover_file), x_downoffset(0), y_downoffset(0), m_group(group) { m_hoverImage = hover_file; setFrameSize(0); setGroup(m_group); adjustSize(); mCaption = caption; m_toggled = false; addActionListener(this); } ToggleButton::~ToggleButton() { setGroup(""); // Remove button from group } void ToggleButton::setDownOffset(int32_t x, int32_t y) { x_downoffset = x; y_downoffset = y; } void ToggleButton::draw(Graphics *graphics) { Color faceColor = getBaseColor(); Color highlightColor; Color shadowColor; int32_t alpha = getBaseColor().a; Image* img = NULL; int32_t xoffset = 0; int32_t yoffset = 0; if (isPressed() || m_toggled) { faceColor = faceColor - 0x303030; faceColor.a = alpha; highlightColor = faceColor - 0x303030; highlightColor.a = alpha; shadowColor = faceColor + 0x303030; shadowColor.a = alpha; if( m_downImage ) { img = m_downImage; xoffset = x_downoffset; yoffset = y_downoffset; } } else if(mHasMouse) { faceColor = faceColor + 0x303030; faceColor.a = alpha; highlightColor = faceColor + 0x303030; highlightColor.a = alpha; shadowColor = faceColor - 0x303030; shadowColor.a = alpha; if ( m_hoverImage ) { img = m_hoverImage; } } else{ highlightColor = faceColor + 0x303030; highlightColor.a = alpha; shadowColor = faceColor - 0x303030; shadowColor.a = alpha; if (m_upImage) { img = m_upImage; } } graphics->setColor(faceColor); graphics->fillRectangle(Rectangle(1, 1, getDimension().width-1, getHeight() - 1)); graphics->setColor(highlightColor); graphics->drawLine(0, 0, getWidth() - 1, 0); graphics->drawLine(0, 1, 0, getHeight() - 1); graphics->setColor(shadowColor); graphics->drawLine(getWidth() - 1, 1, getWidth() - 1, getHeight() - 1); graphics->drawLine(1, getHeight() - 1, getWidth() - 1, getHeight() - 1); graphics->setColor(getForegroundColor()); if (img) { graphics->drawImage(img, xoffset, yoffset); } int32_t textX; int32_t textY = getHeight() / 2 - getFont()->getHeight() / 2; switch (getAlignment()) { case Graphics::Left: textX = 4; break; case Graphics::Center: textX = getWidth() / 2; break; case Graphics::Right: textX = getWidth() - 4; break; default: //use the default of Graphics::LEFT textX = 4; FL_WARN(_log, FIFE::LMsg("ToggleButton::draw() - ") << "Unknown alignment: " << getAlignment() << ". Using the default of Graphics::LEFT"); } graphics->setFont(getFont()); if (mCaption.size() > 0) { if (isPressed()) graphics->drawText(getCaption(), textX + 1, textY + 1, getAlignment()); else graphics->drawText(getCaption(), textX, textY, getAlignment()); } } void ToggleButton::action(const ActionEvent& actionEvent) { setToggled(!m_toggled); } void ToggleButton::adjustSize() { int32_t w = 0; int32_t h = w; if( m_upImage ) { w = m_upImage->getWidth(); h = m_upImage->getHeight(); } if( m_downImage ) { w = std::max(m_downImage->getWidth(), w); h = std::max(m_downImage->getHeight(), h); } if( m_hoverImage ) { w = std::max(m_hoverImage->getWidth(), w); h = std::max(m_hoverImage->getHeight(), h); } if( mCaption.length() > 0 ) { w = std::max(static_cast(getFont()->getWidth(mCaption)+2*mSpacing), w); h = std::max(static_cast(getFont()->getHeight()+2*mSpacing), h); } setWidth(w); setHeight(h); } void ToggleButton::setUpImage(Image* image) { m_upImage = image; adjustSize(); } void ToggleButton::setDownImage(Image* image) { m_downImage = image; adjustSize(); } void ToggleButton::setHoverImage(Image* image) { m_hoverImage = image; adjustSize(); } bool ToggleButton::isToggled() const { return m_toggled; } void ToggleButton::setToggled(bool toggled) { if (toggled && m_group != "") { // untoggle all buttons in group GroupIterator iter, iterEnd; iterEnd = m_groupMap.upper_bound(m_group); for (iter = m_groupMap.lower_bound(m_group); iter != iterEnd; iter++) { if (iter->second->isToggled()) { iter->second->setToggled(false); } } } m_toggled = toggled; } void ToggleButton::setGroup(const std::string &group) { // Remove button from previous group if (m_group != "") { GroupIterator iter, iterEnd; iterEnd = m_groupMap.upper_bound(m_group); for (iter = m_groupMap.lower_bound(m_group); iter != iterEnd; iter++) { if (iter->second == this) { m_groupMap.erase(iter); break; } } } // Add button to new group if (group != "") { m_groupMap.insert( std::pair(group, this)); } m_group = group; } const std::string &ToggleButton::getGroup() const { return m_group; } int32_t ToggleButton::getDownXOffset() const { return x_downoffset; } int32_t ToggleButton::getDownYOffset() const { return y_downoffset; } } /* vim: set noexpandtab: set shiftwidth=2: set tabstop=2: */ fifengine-0.4.1/engine/core/gui/fifechan/widgets/togglebutton.h000066400000000000000000000144721304641216200245350ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_FIFECHAN_ADDON_TOGGLEBUTTON_H #define FIFE_FIFECHAN_ADDON_TOGGLEBUTTON_H // Standard C++ library includes #include #include // 3rd party library includes #include #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder namespace fcn { /** * An implementation of a toggleable button. * * If the button is in a group, all other buttons in that group will be untoggled * when a button gets toggled. If the button is already toggled, you can untoggle * it by clicking on it. * */ class ToggleButton : public Button, public ActionListener { public: /** * Constructor * * @param up_image Image displayed when the button isn't toggled * @param down_image Image displayed when the button is toggled * @param caption Text to be displayed on button * @param group The group the button belongs to */ ToggleButton(Image *up_image = 0, Image *down_image = 0, Image *hover_image = 0, const std::string& caption = "", const std::string& group = ""); /** * Destructor */ ~ToggleButton(); /** * Draws the button */ void draw(Graphics *graphics); /** * Adjust size to fit image and caption */ void adjustSize(); /** * Sets the image that will be displayed when the button isn't toggled * * @param image Image to be displayed */ void setUpImage(Image* image); /** * Sets the image that will be displayed when the button is toggled or pressed * * @param image Image to be displayed */ void setDownImage(Image* image); /** * Sets the image which will be displayed when the mouse cursor is over the button * * @param image Image to be displayed */ void setHoverImage(Image* image); /** * Sets the number of pixels the image or text will be offset from * the top left corner of button when the button is pressed or toggled. * * @param x Offset from left * @param y Offset from top * @see getDownXOffset * @see getDownYOffset */ void setDownOffset(int32_t x, int32_t y); /** * Gets the number of pixels the image or text will be offset * from the left of button when the button is pressed or toggled. * * @return Offset from left when button is pressed * @see setDownOffset */ int32_t getDownXOffset() const; /** * Gets the number of pixels the image or text will be offset * from the top of button when the button is pressed or toggled. * * @return Offset from top when button is pressed * @see setDownOffset */ int32_t getDownYOffset() const; /** * Checks if the radio button is selected. * * @return True if the radio button is selecte, false otherwise. * @see setSelected */ bool isToggled() const; /** * Sets the radio button to selected or not. * * @param toggled True if the radio button should be selected, false otherwise. * @see isSelected */ void setToggled(bool toggled); // From Guichan 0.8.1 /** * Sets the group the toggle button should belong to. Note that * a toggle button group is unique per application, not per Gui object * as the group is stored in a static map. * * @param group The name of the group. * @see getGroup */ void setGroup(const std::string &group); /** * Gets the group the toggle button belongs to. * * @return The group the toggle button belongs to. * @see setGroup */ const std::string &getGroup() const; protected: // Inherited from fcn::Widget /** * Toggle button when it is activated * * @param actionEvent ActionEvent object */ void action(const ActionEvent& actionEvent); private: // Image to be used when the button is not toggle Image *m_upImage; // Image to be used when the button is toggled or pressed Image *m_downImage; // Image to be used when the mouse cursor is over the image Image *m_hoverImage; // Number of pixels the image/text will be offset from the top left // corner, when the button is pressed or toggled int32_t x_downoffset; int32_t y_downoffset; /** * Whether the button is toggled or not. */ bool m_toggled; //-- From Guichan 0.8.1 -- /** * Holds the group of the toggle button. */ std::string m_group; /** * Typedef. */ typedef std::multimap GroupMap; /** * Typedef. */ typedef GroupMap::iterator GroupIterator; /** * Holds all available toggle button groups. */ static GroupMap m_groupMap; }; } #endif /* vim: set noexpandtab: set shiftwidth=2: set tabstop=2: */ fifengine-0.4.1/engine/core/gui/fifechan/widgets/twobutton.cpp000066400000000000000000000105271304641216200244150ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/log/logger.h" #include "twobutton.h" namespace fcn { static FIFE::Logger _log(LM_GUI); TwoButton::TwoButton(Image *up_file , Image *down_file, Image *hover_file, const std::string& caption): Button(), m_upImage(up_file), m_downImage(down_file), m_hoverImage(hover_file), x_downoffset(0), y_downoffset(0) { addWidgetListener(this); m_hoverImage = hover_file; setFrameSize(0); adjustSize(); mCaption = caption; } TwoButton::~TwoButton() { } void TwoButton::setDownOffset(int32_t x, int32_t y) { x_downoffset = x; y_downoffset = y; } void TwoButton::draw(Graphics *graphics) { Image* img = m_upImage; int32_t xoffset = 0; int32_t yoffset = 0; if (isPressed()) { if( m_downImage ) { img = m_downImage; xoffset = x_downoffset; yoffset = y_downoffset; } } else if(mHasMouse) { if( m_hoverImage ) { img = m_hoverImage; } } if (img) { graphics->drawImage(img, xoffset, yoffset, 0, 0, getWidth(), getHeight()); } graphics->setColor(getForegroundColor()); int32_t textX; int32_t textY = getHeight() / 2 - getFont()->getHeight() / 2; switch (getAlignment()) { case Graphics::Left: textX = 4; break; case Graphics::Center: textX = getWidth() / 2; break; case Graphics::Right: textX = getWidth() - 4; break; default: textX = 4; FL_WARN(_log, FIFE::LMsg("TwoButton::draw() - ") << "Unknown alignment: " << getAlignment() << ". Using the default of Graphics::LEFT"); } graphics->setFont(getFont()); if (mCaption.size() > 0) { if (isPressed()) graphics->drawText(getCaption(), textX + 1, textY + 1, getAlignment()); else graphics->drawText(getCaption(), textX, textY, getAlignment()); } } void TwoButton::adjustSize() { int32_t w = 0; int32_t h = w; if( m_upImage ) { w = m_upImage->getWidth(); h = m_upImage->getHeight(); } if( m_downImage ) { w = std::max(m_downImage->getWidth(), w); h = std::max(m_downImage->getHeight(), h); } if( m_hoverImage ) { w = std::max(m_hoverImage->getWidth(), w); h = std::max(m_hoverImage->getHeight(), h); } setWidth(w); setHeight(h); } void TwoButton::setUpImage(Image* image) { m_upImage = image; adjustSize(); } void TwoButton::setDownImage(Image* image) { m_downImage = image; adjustSize(); } void TwoButton::setHoverImage(Image* image) { m_hoverImage = image; adjustSize(); } void TwoButton::ancestorHidden(const Event& e) { mHasMouse = false; } } /* vim: set noexpandtab: set shiftwidth=2: set tabstop=2: */ fifengine-0.4.1/engine/core/gui/fifechan/widgets/twobutton.h000066400000000000000000000053161304641216200240620ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_FIFECHAN_ADDON_TWOBUTTON_H #define FIFE_FIFECHAN_ADDON_TWOBUTTON_H // Standard C++ library includes #include // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder namespace fcn { class TwoButton; class TwoButton : public Button, public WidgetListener { public: TwoButton(Image *up_image = 0, Image *down_image = 0, Image *hover_file = 0, const std::string& caption = ""); ~TwoButton(); void draw(Graphics *graphics); void adjustSize(); void setUpImage(Image* image); void setDownImage(Image* image); void setHoverImage(Image* image); void setDownOffset(int32_t x, int32_t y); int32_t getDownXOffset() { return x_downoffset; } int32_t getDownYOffset() { return y_downoffset; } virtual void ancestorHidden(const Event& e); private: Image *m_upImage; Image *m_downImage; Image *m_hoverImage; int32_t x_downoffset; int32_t y_downoffset; }; } #endif /* vim: set noexpandtab: set shiftwidth=2: set tabstop=2: */ fifengine-0.4.1/engine/core/gui/fifechan/widgets/widgets.i000066400000000000000000000111231304641216200234550ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include #include "gui/fifechan/widgets/twobutton.h" #include "gui/fifechan/widgets/togglebutton.h" #include "gui/fifechan/widgets/clicklabel.h" #include "gui/fifechan/widgets/icon2.h" #include "gui/fifechan/widgets/percentagebar.h" %} namespace fcn { class ActionListener; class Color; class Font; class Image; class KeyListener; class MouseListener; class WidgetListener; class Widget; %feature("notabstract") TwoButton; class TwoButton: public Widget { public: TwoButton(Image *up_image = 0, Image *down_image = 0, Image *hover_image = 0, const char * caption = ""); ~TwoButton(); virtual void setCaption(const std::string& caption); virtual const std::string& getCaption() const; virtual void setAlignment(Graphics::Alignment alignment); virtual Graphics::Alignment getAlignment() const; void setUpImage(Image* image); void setDownImage(Image* image); void setHoverImage(Image* image); void setDownOffset(int32_t x, int32_t y); int32_t getDownXOffset(); int32_t getDownYOffset(); }; %feature("notabstract") ToggleButton; class ToggleButton: public Widget { public: ToggleButton(Image *up_image = 0, Image *down_image = 0, Image *hover_image = 0, const char * caption = "", const char * group = ""); ~ToggleButton(); virtual void setCaption(const std::string& caption); virtual const std::string& getCaption() const; virtual void setAlignment(Graphics::Alignment alignment); virtual Graphics::Alignment getAlignment() const; void setSpacing(uint32_t spacing); uint32_t getSpacing() const; void setUpImage(Image* image); void setDownImage(Image* image); void setHoverImage(Image* image); void setDownOffset(int32_t x, int32_t y); int32_t getDownXOffset() const; int32_t getDownYOffset() const; bool isToggled() const; void setToggled(bool toggled); void setGroup(const std::string &group); const std::string &getGroup() const; }; %feature("notabstract") ClickLabel; %rename(Label) ClickLabel; class ClickLabel: public Widget { public: ClickLabel(); ClickLabel(const std::string& caption); virtual ~ClickLabel(); virtual void setCaption(const std::string& caption); virtual const std::string& getCaption() const; bool isTextWrapping() const; void setTextWrapping(bool); virtual void setWidth(int32_t width); virtual void adjustSize(); }; %feature("notabstract") Icon2; %rename(Icon) Icon2; class Icon2: public Widget { public: Icon2(Image* image); virtual ~Icon2(); void setImage(Image* image); bool isScaling() const; void setScaling(bool scale); bool isTiling() const; void setTiling(bool tile); }; %feature("notabstract") PercentageBar; class PercentageBar: public Widget { public: PercentageBar(); virtual ~PercentageBar(); virtual void setForegroundImage(Image* image); virtual void setOrientation(PercentageBar::Orientation orientation); virtual PercentageBar::Orientation getOrientation() const; virtual int32_t getValue() const; virtual void setValue(int32_t value); enum Orientation { HORIZONTAL = 0, VERTICAL }; }; } fifengine-0.4.1/engine/core/gui/guimanager.h000066400000000000000000000050721304641216200207220ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_VIDEO_GUI_GUIMANAGER_H #define FIFE_VIDEO_GUI_GUIMANAGER_H // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/fife_stdint.h" #include "util/base/singleton.h" #include "eventchannel/sdl/ec_isdleventlistener.h" namespace FIFE { class IGUIManager : public ISdlEventListener { public: /** Destructor. */ virtual ~IGUIManager() {}; /** Performs the GUI logic and draws the GUI accordingly. * * This will be called each frame. */ virtual void turn() = 0; /** Resizes the top container. * * @param x The new starting X coordinate. * @param y The new starting Y coordinate. * @param width The new width. * @param height The new height. */ virtual void resizeTopContainer(uint32_t x, uint32_t y, uint32_t width, uint32_t height) = 0; }; } #endif fifengine-0.4.1/engine/core/gui/guimanager.i000066400000000000000000000035161304641216200207240ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "gui/guimanager.h" #include "eventchannel/sdl/ec_isdleventlistener.h" %} namespace FIFE { class IGUIManager : public ISdlEventListener { public: virtual ~IGUIManager(); virtual void turn() = 0; virtual void resizeTopContainer(uint32_t x, uint32_t y, uint32_t width, uint32_t height) = 0; }; } fifengine-0.4.1/engine/core/gui/hybrid/000077500000000000000000000000001304641216200177075ustar00rootroot00000000000000fifengine-0.4.1/engine/core/gui/hybrid/hybridguimanager.cpp000066400000000000000000000076361304641216200237500ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/log/logger.h" #include "hybridguimanager.h" namespace FIFE { static Logger _log(LM_GUI); HybridGuiManager::HybridGuiManager() { } HybridGuiManager::~HybridGuiManager() { std::vector::iterator currManager(m_guiManagers.begin()); std::vector::iterator endManager(m_guiManagers.end()); for(; currManager != endManager; ++currManager) { delete (*currManager); } m_guiManagers.clear(); } void HybridGuiManager::addGuiManager(IGUIManager* guiManager) { m_guiManagers.push_back(guiManager); } void HybridGuiManager::removeGuiManager(IGUIManager* guiManager) { std::vector::iterator currManager(m_guiManagers.begin()); std::vector::iterator endManager(m_guiManagers.end()); for(; currManager != endManager;) { if((*currManager) == guiManager) { m_guiManagers.erase(currManager); return; } ++currManager; } FL_WARN(_log, LMsg() << "Tyring to remove a non-existing gui manager from a hybrid gui manager."); } void HybridGuiManager::turn() { //call turn in reverse order because we want prior gui managers to draw on top //of latter ones. std::vector::reverse_iterator currManager(m_guiManagers.rbegin()); std::vector::reverse_iterator endManager(m_guiManagers.rend()); for(; currManager != endManager; ++currManager) { (*currManager)->turn(); } } bool HybridGuiManager::onSdlEvent(SDL_Event& event) { bool consumed = false; std::vector::iterator currManager(m_guiManagers.begin()); std::vector::iterator endManager(m_guiManagers.end()); for(; currManager != endManager; ++currManager) { consumed = (*currManager)->onSdlEvent(event); if (consumed) { return true; } } return false; } void HybridGuiManager::resizeTopContainer(uint32_t x, uint32_t y, uint32_t width, uint32_t height) { std::vector::iterator currManager(m_guiManagers.begin()); std::vector::iterator endManager(m_guiManagers.end()); for(; currManager != endManager; ++currManager) { (*currManager)->resizeTopContainer(x, y, width, height); } } } fifengine-0.4.1/engine/core/gui/hybrid/hybridguimanager.h000066400000000000000000000063771304641216200234160ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_GUI_HYBRIDGUIMANAGER_H #define FIFE_GUI_HYBRIDGUIMANAGER_H // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/singleton.h" #include "gui/guimanager.h" namespace FIFE { class HybridGuiManager : public IGUIManager, public DynamicSingleton { public: /** Constructor. */ HybridGuiManager(); /** Destructor. */ ~HybridGuiManager(); /** Adds a gui manager to this hybrid manager. * * WARNING This object gains ownership of the added gui manager. */ void addGuiManager(IGUIManager* guiManager); /** Removes a gui manager from this hybrid manager. * * WARNING This object loses owenership of the removed gui manager. */ void removeGuiManager(IGUIManager* guiManager); /** Calls turn for each gui manager in the hybrid manager's queue. */ virtual void turn(); /** Calls onSdlEvent for each gui manager in the hybrid manager's queue. * * @param event: The event to be processed by each gui manager. * @return A boolean value indicating if the event was consumed by one of the * gui managers in the queue. */ virtual bool onSdlEvent(SDL_Event& event); /** Calls resize top container for each of the gui managers in the queue. */ virtual void resizeTopContainer(uint32_t x, uint32_t y, uint32_t width, uint32_t height); private: /** All gui managers composing this hybrid gui manager. */ std::vector m_guiManagers; }; } #endif // FIFE_GUI_HYBRIDGUIMANAGER_Hfifengine-0.4.1/engine/core/gui/hybrid/hybridguimanager.i000066400000000000000000000006141304641216200234030ustar00rootroot00000000000000%module fife %{ #include "gui/hybrid/hybridguimanager.h" #include "gui/guimanager.h" %} %include "gui/guimanager.i" namespace FIFE { %feature("notabstract") HybridGuiManager; class HybridGuiManager : public IGUIManager { public: HybridGuiManager(); virtual ~HybridGuiManager(); void addGuiManager(IGUIManager* guiManager); void removeGuiManager(IGUIManager* guiManager); }; }fifengine-0.4.1/engine/core/gui/librocket/000077500000000000000000000000001304641216200204045ustar00rootroot00000000000000fifengine-0.4.1/engine/core/gui/librocket/base/000077500000000000000000000000001304641216200213165ustar00rootroot00000000000000fifengine-0.4.1/engine/core/gui/librocket/base/librocketinputprocessor.cpp000066400000000000000000000274011304641216200270240ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // 3rd party library includes #include #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "librocketinputprocessor.h" namespace FIFE { LibRocketInputProcessor::LibRocketInputProcessor(Rocket::Core::Context* context) : m_context(context), m_keyModState(0), m_wheelCounter(0) { populateKeyMap(); } LibRocketInputProcessor::~LibRocketInputProcessor() { } void LibRocketInputProcessor::updateKeyModState() { SDLMod modState = SDL_GetModState(); m_keyModState = 0; if((modState & KMOD_NONE) != KMOD_NONE) { if((modState & KMOD_SHIFT) == KMOD_SHIFT) { m_keyModState |= Rocket::Core::Input::KM_SHIFT; } if((modState & KMOD_CTRL) == KMOD_CTRL) { m_keyModState |= Rocket::Core::Input::KM_CTRL; } if((modState & KMOD_ALT) == KMOD_ALT) { m_keyModState |= Rocket::Core::Input::KM_ALT; } // KMOD_META is gone so we change it to KMOD_GUI if((modState & KMOD_GUI) == KMOD_GUI) { m_keyModState |= Rocket::Core::Input::KM_META; } if((modState & KMOD_NUM) == KMOD_NUM) { m_keyModState |= Rocket::Core::Input::KM_NUMLOCK; } if((modState & KMOD_CAPS) == KMOD_CAPS) { m_keyModState |= Rocket::Core::Input::KM_CAPSLOCK; } } } bool LibRocketInputProcessor::onSdlEvent(SDL_Event& event) { bool consumed = false; updateKeyModState(); switch(event.type) { case SDL_KEYUP: case SDL_KEYDOWN: consumed = processKeyInput(event); break; case SDL_TEXTINPUT: consumed = processTextInput(event); break; case SDL_MOUSEWHEEL: case SDL_MOUSEBUTTONUP: case SDL_MOUSEBUTTONDOWN: consumed = processMouseInput(event); break; case SDL_MOUSEMOTION: consumed = processMouseMotion(event); break; default: break; } return consumed; } void LibRocketInputProcessor::turn() { if(m_wheelCounter != 0) { m_context->ProcessMouseWheel(m_wheelCounter, m_keyModState); m_wheelCounter = 0; } } bool LibRocketInputProcessor::processMouseMotion(SDL_Event& event) { int x = static_cast(event.motion.x); int y = static_cast(event.motion.y); m_context->ProcessMouseMove(x, y, m_keyModState); return false; } bool LibRocketInputProcessor::processMouseInput(SDL_Event& event) { int index = (event.button.button == SDL_BUTTON_LEFT) ? 0 : (event.button.button == SDL_BUTTON_RIGHT) ? 1 : (event.button.button == SDL_BUTTON_MIDDLE) ? 2 : 3; if(event.type == SDL_MOUSEBUTTONDOWN) { m_context->ProcessMouseButtonDown(index, m_keyModState); } else if (event.type == SDL_MOUSEBUTTONUP) { m_context->ProcessMouseButtonUp(index, m_keyModState); } else if (event.type == SDL_MOUSEWHEEL) { processMouseWheelMotion(event); } return false; } bool LibRocketInputProcessor::processMouseWheelMotion(SDL_Event& event) { // mousewheel up //if (event.wheel.y > 0 || (event.wheel.direction == SDL_MOUSEWHEEL_FLIPPED && event.wheel.y < 0)) { if (event.wheel.y > 0) { if(m_wheelCounter <= 0) { m_wheelCounter--; } else { //the wheel had been moving downwards so sent those movements before reseting the counter m_context->ProcessMouseWheel(m_wheelCounter, m_keyModState); m_wheelCounter = -1; } } // mousewheel down //else if (event.wheel.y < 0 || (event.wheel.direction == SDL_MOUSEWHEEL_FLIPPED && event.wheel.y > 0)) { else if (event.wheel.y < 0) { if(m_wheelCounter >= 0) { m_wheelCounter++; } else { //the wheel had been moving upwards so sent those movements before reseting the counter m_context->ProcessMouseWheel(m_wheelCounter, m_keyModState); m_wheelCounter = 1; } } return false; } bool LibRocketInputProcessor::processKeyInput(SDL_Event& event) { Rocket::Core::Input::KeyIdentifier key = m_keyMap[event.key.keysym.sym]; if(event.type == SDL_KEYDOWN) { m_context->ProcessKeyDown(key, m_keyModState); if(key == Rocket::Core::Input::KI_RETURN) { m_context->ProcessTextInput((Rocket::Core::word) '\n'); } } else { m_context->ProcessKeyUp(m_keyMap[event.key.keysym.sym], m_keyModState); } return false; } bool LibRocketInputProcessor::processTextInput(SDL_Event& event) { Rocket::Core::String text(event.text.text); m_context->ProcessTextInput(text); return false; } void LibRocketInputProcessor::populateKeyMap() { m_keyMap[SDLK_UNKNOWN] = Rocket::Core::Input::KI_UNKNOWN; m_keyMap[SDLK_SPACE] = Rocket::Core::Input::KI_SPACE; m_keyMap[SDLK_0] = Rocket::Core::Input::KI_0; m_keyMap[SDLK_1] = Rocket::Core::Input::KI_1; m_keyMap[SDLK_2] = Rocket::Core::Input::KI_2; m_keyMap[SDLK_3] = Rocket::Core::Input::KI_3; m_keyMap[SDLK_4] = Rocket::Core::Input::KI_4; m_keyMap[SDLK_5] = Rocket::Core::Input::KI_5; m_keyMap[SDLK_6] = Rocket::Core::Input::KI_6; m_keyMap[SDLK_7] = Rocket::Core::Input::KI_7; m_keyMap[SDLK_8] = Rocket::Core::Input::KI_8; m_keyMap[SDLK_9] = Rocket::Core::Input::KI_9; m_keyMap[SDLK_a] = Rocket::Core::Input::KI_A; m_keyMap[SDLK_b] = Rocket::Core::Input::KI_B; m_keyMap[SDLK_c] = Rocket::Core::Input::KI_C; m_keyMap[SDLK_d] = Rocket::Core::Input::KI_D; m_keyMap[SDLK_e] = Rocket::Core::Input::KI_E; m_keyMap[SDLK_f] = Rocket::Core::Input::KI_F; m_keyMap[SDLK_g] = Rocket::Core::Input::KI_G; m_keyMap[SDLK_h] = Rocket::Core::Input::KI_H; m_keyMap[SDLK_i] = Rocket::Core::Input::KI_I; m_keyMap[SDLK_j] = Rocket::Core::Input::KI_J; m_keyMap[SDLK_k] = Rocket::Core::Input::KI_K; m_keyMap[SDLK_l] = Rocket::Core::Input::KI_L; m_keyMap[SDLK_m] = Rocket::Core::Input::KI_M; m_keyMap[SDLK_n] = Rocket::Core::Input::KI_N; m_keyMap[SDLK_o] = Rocket::Core::Input::KI_O; m_keyMap[SDLK_p] = Rocket::Core::Input::KI_P; m_keyMap[SDLK_q] = Rocket::Core::Input::KI_Q; m_keyMap[SDLK_r] = Rocket::Core::Input::KI_R; m_keyMap[SDLK_s] = Rocket::Core::Input::KI_S; m_keyMap[SDLK_t] = Rocket::Core::Input::KI_T; m_keyMap[SDLK_u] = Rocket::Core::Input::KI_U; m_keyMap[SDLK_v] = Rocket::Core::Input::KI_V; m_keyMap[SDLK_w] = Rocket::Core::Input::KI_W; m_keyMap[SDLK_x] = Rocket::Core::Input::KI_X; m_keyMap[SDLK_y] = Rocket::Core::Input::KI_Y; m_keyMap[SDLK_z] = Rocket::Core::Input::KI_Z; m_keyMap[SDLK_SEMICOLON] = Rocket::Core::Input::KI_OEM_1; m_keyMap[SDLK_PLUS] = Rocket::Core::Input::KI_OEM_PLUS; m_keyMap[SDLK_COMMA] = Rocket::Core::Input::KI_OEM_COMMA; m_keyMap[SDLK_MINUS] = Rocket::Core::Input::KI_OEM_MINUS; m_keyMap[SDLK_PERIOD] = Rocket::Core::Input::KI_OEM_PERIOD; m_keyMap[SDLK_SLASH] = Rocket::Core::Input::KI_OEM_2; m_keyMap[SDLK_BACKQUOTE] = Rocket::Core::Input::KI_OEM_3; m_keyMap[SDLK_LEFTBRACKET] = Rocket::Core::Input::KI_OEM_4; m_keyMap[SDLK_BACKSLASH] = Rocket::Core::Input::KI_OEM_5; m_keyMap[SDLK_RIGHTBRACKET] = Rocket::Core::Input::KI_OEM_6; m_keyMap[SDLK_QUOTEDBL] = Rocket::Core::Input::KI_OEM_7; m_keyMap[SDLK_KP_0] = Rocket::Core::Input::KI_NUMPAD0; m_keyMap[SDLK_KP_1] = Rocket::Core::Input::KI_NUMPAD1; m_keyMap[SDLK_KP_2] = Rocket::Core::Input::KI_NUMPAD2; m_keyMap[SDLK_KP_3] = Rocket::Core::Input::KI_NUMPAD3; m_keyMap[SDLK_KP_4] = Rocket::Core::Input::KI_NUMPAD4; m_keyMap[SDLK_KP_5] = Rocket::Core::Input::KI_NUMPAD5; m_keyMap[SDLK_KP_6] = Rocket::Core::Input::KI_NUMPAD6; m_keyMap[SDLK_KP_7] = Rocket::Core::Input::KI_NUMPAD7; m_keyMap[SDLK_KP_8] = Rocket::Core::Input::KI_NUMPAD8; m_keyMap[SDLK_KP_9] = Rocket::Core::Input::KI_NUMPAD9; m_keyMap[SDLK_KP_ENTER] = Rocket::Core::Input::KI_NUMPADENTER; m_keyMap[SDLK_KP_MULTIPLY] = Rocket::Core::Input::KI_MULTIPLY; m_keyMap[SDLK_KP_PLUS] = Rocket::Core::Input::KI_ADD; m_keyMap[SDLK_KP_MINUS] = Rocket::Core::Input::KI_SUBTRACT; m_keyMap[SDLK_KP_PERIOD] = Rocket::Core::Input::KI_DECIMAL; m_keyMap[SDLK_KP_DIVIDE] = Rocket::Core::Input::KI_DIVIDE; m_keyMap[SDLK_KP_EQUALS] = Rocket::Core::Input::KI_OEM_NEC_EQUAL; m_keyMap[SDLK_BACKSPACE] = Rocket::Core::Input::KI_BACK; m_keyMap[SDLK_TAB] = Rocket::Core::Input::KI_TAB; m_keyMap[SDLK_CLEAR] = Rocket::Core::Input::KI_CLEAR; m_keyMap[SDLK_RETURN] = Rocket::Core::Input::KI_RETURN; m_keyMap[SDLK_PAUSE] = Rocket::Core::Input::KI_PAUSE; m_keyMap[SDLK_CAPSLOCK] = Rocket::Core::Input::KI_CAPITAL; m_keyMap[SDLK_PAGEUP] = Rocket::Core::Input::KI_PRIOR; m_keyMap[SDLK_PAGEDOWN] = Rocket::Core::Input::KI_NEXT; m_keyMap[SDLK_END] = Rocket::Core::Input::KI_END; m_keyMap[SDLK_HOME] = Rocket::Core::Input::KI_HOME; m_keyMap[SDLK_LEFT] = Rocket::Core::Input::KI_LEFT; m_keyMap[SDLK_UP] = Rocket::Core::Input::KI_UP; m_keyMap[SDLK_RIGHT] = Rocket::Core::Input::KI_RIGHT; m_keyMap[SDLK_DOWN] = Rocket::Core::Input::KI_DOWN; m_keyMap[SDLK_INSERT] = Rocket::Core::Input::KI_INSERT; m_keyMap[SDLK_DELETE] = Rocket::Core::Input::KI_DELETE; m_keyMap[SDLK_HELP] = Rocket::Core::Input::KI_HELP; m_keyMap[SDLK_LGUI] = Rocket::Core::Input::KI_LWIN; m_keyMap[SDLK_RGUI] = Rocket::Core::Input::KI_RWIN; m_keyMap[SDLK_F1] = Rocket::Core::Input::KI_F1; m_keyMap[SDLK_F2] = Rocket::Core::Input::KI_F2; m_keyMap[SDLK_F3] = Rocket::Core::Input::KI_F3; m_keyMap[SDLK_F4] = Rocket::Core::Input::KI_F4; m_keyMap[SDLK_F5] = Rocket::Core::Input::KI_F5; m_keyMap[SDLK_F6] = Rocket::Core::Input::KI_F6; m_keyMap[SDLK_F7] = Rocket::Core::Input::KI_F7; m_keyMap[SDLK_F8] = Rocket::Core::Input::KI_F8; m_keyMap[SDLK_F9] = Rocket::Core::Input::KI_F9; m_keyMap[SDLK_F10] = Rocket::Core::Input::KI_F10; m_keyMap[SDLK_F11] = Rocket::Core::Input::KI_F11; m_keyMap[SDLK_F12] = Rocket::Core::Input::KI_F12; m_keyMap[SDLK_F13] = Rocket::Core::Input::KI_F13; m_keyMap[SDLK_F14] = Rocket::Core::Input::KI_F14; m_keyMap[SDLK_F15] = Rocket::Core::Input::KI_F15; m_keyMap[SDLK_NUMLOCKCLEAR] = Rocket::Core::Input::KI_NUMLOCK; m_keyMap[SDLK_SCROLLLOCK] = Rocket::Core::Input::KI_SCROLL; m_keyMap[SDLK_LSHIFT] = Rocket::Core::Input::KI_LSHIFT; m_keyMap[SDLK_RSHIFT] = Rocket::Core::Input::KI_RSHIFT; m_keyMap[SDLK_LCTRL] = Rocket::Core::Input::KI_LCONTROL; m_keyMap[SDLK_RCTRL] = Rocket::Core::Input::KI_RCONTROL; m_keyMap[SDLK_LALT] = Rocket::Core::Input::KI_LMENU; m_keyMap[SDLK_RALT] = Rocket::Core::Input::KI_RMENU; } }; fifengine-0.4.1/engine/core/gui/librocket/base/librocketinputprocessor.h000066400000000000000000000076771304641216200265060ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_GUI_LIBROCKETINPUTPROCESSOR_H #define FIFE_GUI_LIBROCKETINPUTPROCESSOR_H // Standard C++ library includes #include // 3rd party library includes #include #include #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/fife_stdint.h" namespace Rocket { namespace Core { class Context; } } namespace FIFE { class LibRocketInputProcessor { public: /** Constructor */ LibRocketInputProcessor(Rocket::Core::Context* context); /** Destructor */ ~LibRocketInputProcessor(); /** Processes SDL input and converts it to librocket input, then forwards it to * the librocket context. * * NOTE There is no way to get, if an event is consumed by Rocket currently. * This is for in case it gets implemented in the future. * * @param evt The SDL input. * @return A boolean value indicating if the event was consumed by librocket or not. */ bool onSdlEvent(SDL_Event &evt); /** * Called each frame to perform update operations. */ void turn(); private: /** Updates the key mod state bitmask. */ void updateKeyModState(); /** Process a mouse motion event. */ bool processMouseMotion(SDL_Event& event); /** Process a mouse input event. */ bool processMouseInput(SDL_Event& event); /** Process a mouse wheel motion event. */ bool processMouseWheelMotion(SDL_Event& event); /** Process a key input event. */ bool processKeyInput(SDL_Event& event); /** Process a text input event. */ bool processTextInput(SDL_Event& event); /** Creates the key map. */ void populateKeyMap(); /** Reference to librocket's context. */ Rocket::Core::Context* m_context; /** Bitmask that stores key modifiers. */ uint32_t m_keyModState; /** Counts how many times the wheel has been moved. Negative * value means that the wheel has been moved abs(m_wheelCounter) upwards, * positive value means that the wheel has been moved m_wheelCounter times downwards. */ int32_t m_wheelCounter; /** Keymap to convert SDL key to Librocket key. */ std::map m_keyMap; }; }; #endif //FIFE_GUI_LIBROCKETINPUTPROCESSOR_Hfifengine-0.4.1/engine/core/gui/librocket/base/librocketrenderinterface.cpp000066400000000000000000000163571304641216200270750ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "video/imagemanager.h" #include "video/opengl/glimage.h" #include "librocketrenderinterface.h" namespace FIFE { LibRocketRenderInterface::LibRocketRenderInterface() : m_renderBackend(RenderBackend::instance()), m_imageManager(ImageManager::instance()) { } LibRocketRenderInterface::~LibRocketRenderInterface() { freeTextures(); } void LibRocketRenderInterface::RenderGeometry(Rocket::Core::Vertex* vertices, int num_vertices, int* indices, int num_indices, Rocket::Core::TextureHandle texture, const Rocket::Core::Vector2f& translation) { GeometryCallData geometryCallData; geometryCallData.vertices.reserve(num_vertices); for(int i = 0; i < num_vertices; i++) { GuiVertex vertex; vertex.position.set(vertices[i].position.x, vertices[i].position.y); vertex.color.set(vertices[i].colour.red, vertices[i].colour.green, vertices[i].colour.blue, vertices[i].colour.alpha); vertex.texCoords.set(vertices[i].tex_coord.x, vertices[i].tex_coord.y); geometryCallData.vertices.push_back(vertex); } geometryCallData.indices.reserve(num_indices); for(int i = 0; i < num_indices; i++) { geometryCallData.indices.push_back(indices[i]); } geometryCallData.textureHandle = texture; geometryCallData.translation.set(translation.x, translation.y); if(m_geometryCalls.empty()) { GeometryCall geometryCall; geometryCall.callChain.push(geometryCallData); m_geometryCalls.push(geometryCall); } else { GeometryCall& geometryCall = m_geometryCalls.back(); geometryCall.callChain.push(geometryCallData); } } Rocket::Core::CompiledGeometryHandle LibRocketRenderInterface::CompileGeometry(Rocket::Core::Vertex* vertices, int num_vertices, int* indices, int num_indices, Rocket::Core::TextureHandle texture) { return (Rocket::Core::CompiledGeometryHandle) NULL; } void LibRocketRenderInterface::RenderCompiledGeometry(Rocket::Core::CompiledGeometryHandle geometry, const Rocket::Core::Vector2f& translation) { } void LibRocketRenderInterface::ReleaseCompiledGeometry(Rocket::Core::CompiledGeometryHandle ROCKET_UNUSED(geometry)) { } void LibRocketRenderInterface::EnableScissorRegion(bool enable) { GeometryCall gc; gc.enableScissorTest = enable; //check if there is a previous call and has a clip area enabled if(!m_geometryCalls.empty()) { GeometryCall& prevgc = m_geometryCalls.back(); if(prevgc.hasScissorArea) { gc.hasScissorArea = true; gc.scissorArea = prevgc.scissorArea; } } m_geometryCalls.push(gc); } void LibRocketRenderInterface::SetScissorRegion(int x, int y, int width, int height) { GeometryCall gc; gc.hasScissorArea = true; gc.scissorArea = Rect(x, y, width, height); //check if there is a previous call and has scissors enabled if(!m_geometryCalls.empty()) { GeometryCall& prevgc = m_geometryCalls.back(); gc.enableScissorTest = prevgc.enableScissorTest; } m_geometryCalls.push(gc); } bool LibRocketRenderInterface::LoadTexture(Rocket::Core::TextureHandle& texture_handle, Rocket::Core::Vector2i& texture_dimensions, const Rocket::Core::String& source) { std::string filename(source.CString()); ImagePtr loadedTexture = m_imageManager->exists(filename) ? m_imageManager->get(filename) : m_imageManager->load(filename); texture_handle = static_cast(loadedTexture->getHandle()); texture_dimensions.x = loadedTexture->getWidth(); texture_dimensions.y = loadedTexture->getHeight(); return true; } bool LibRocketRenderInterface::GenerateTexture(Rocket::Core::TextureHandle& texture_handle, const Rocket::Core::byte* source, const Rocket::Core::Vector2i& source_dimensions) { Image* generatedTexture = m_renderBackend->createImage(source, source_dimensions.x, source_dimensions.y); generatedTexture->setState(IResource::RES_LOADED); m_imageManager->add(generatedTexture); texture_handle = static_cast(generatedTexture->getHandle()); return true; } void LibRocketRenderInterface::ReleaseTexture(Rocket::Core::TextureHandle texture_handle) { ResourceHandle rh = static_cast(texture_handle); m_freedTextures.push_back(rh); } void LibRocketRenderInterface::render() { while(!m_geometryCalls.empty()) { GeometryCall& geometryCall = m_geometryCalls.front(); if(geometryCall.hasScissorArea) { m_renderBackend->pushClipArea(geometryCall.scissorArea, false); } if(geometryCall.enableScissorTest) { m_renderBackend->enableScissorTest(); } else { m_renderBackend->disableScissorTest(); } while(!geometryCall.callChain.empty()) { GeometryCallData& geometryCallData = geometryCall.callChain.front(); ImagePtr img = m_imageManager->get(geometryCallData.textureHandle); m_renderBackend->renderGuiGeometry(geometryCallData.vertices, geometryCallData.indices, geometryCallData.translation, img); geometryCall.callChain.pop(); } if(geometryCall.hasScissorArea) { m_renderBackend->popClipArea(); } m_geometryCalls.pop(); } } void LibRocketRenderInterface::freeTextures() { std::list::iterator it(m_freedTextures.begin()); std::list::iterator end(m_freedTextures.end()); for(; it != end; ++it) { ResourceHandle rh = (*it); ImagePtr texture = m_imageManager->get(rh); texture->free(); } std::list temp; m_freedTextures.swap(temp); } };fifengine-0.4.1/engine/core/gui/librocket/base/librocketrenderinterface.h000066400000000000000000000122271304641216200265320ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_GUI_LIBROCKETRENDERINTERFACE_H #define FIFE_GUI_LIBROCKETRENDERINTERFACE_H // Standard C++ library includes #include #include #include // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/singleton.h" #include "util/resource/resource.h" #include "util/structures/rect.h" #include "util/structures/point.h" #include "video/color.h" #include "video/renderbackend.h" namespace FIFE { class ImageManager; class RenderBackend; class LibRocketRenderInterface : public Rocket::Core::RenderInterface { public: /** Constructor. */ LibRocketRenderInterface(); /** Destructor. */ virtual ~LibRocketRenderInterface(); /** Called by Rocket when it wants to render geometry that it does not wish to optimise. */ virtual void RenderGeometry(Rocket::Core::Vertex* vertices, int num_vertices, int* indices, int num_indices, Rocket::Core::TextureHandle texture, const Rocket::Core::Vector2f& translation); /** Called by Rocket when it wants to compile geometry it believes will be static for the forseeable future. */ virtual Rocket::Core::CompiledGeometryHandle CompileGeometry(Rocket::Core::Vertex* vertices, int num_vertices, int* indices, int num_indices, Rocket::Core::TextureHandle texture); /** Called by Rocket when it wants to render application-compiled geometry. */ virtual void RenderCompiledGeometry(Rocket::Core::CompiledGeometryHandle geometry, const Rocket::Core::Vector2f& translation); /** Called by Rocket when it wants to release application-compiled geometry. */ virtual void ReleaseCompiledGeometry(Rocket::Core::CompiledGeometryHandle geometry); /** Called by Rocket when it wants to enable or disable scissoring to clip content. */ virtual void EnableScissorRegion(bool enable); /** Called by Rocket when it wants to change the scissor region. */ virtual void SetScissorRegion(int x, int y, int width, int height); /** Called by Rocket when a texture is required by the library. */ virtual bool LoadTexture(Rocket::Core::TextureHandle& texture_handle, Rocket::Core::Vector2i& texture_dimensions, const Rocket::Core::String& source); /** Called by Rocket when a texture is required to be built from an internally-generated sequence of pixels. */ virtual bool GenerateTexture(Rocket::Core::TextureHandle& texture_handle, const Rocket::Core::byte* source, const Rocket::Core::Vector2i& source_dimensions); /** Called by Rocket when a loaded texture is no longer required. */ virtual void ReleaseTexture(Rocket::Core::TextureHandle texture_handle); /** * Renders librocket gui. */ void render(); /** * Frees all textures that are no longer needed by librocket. */ void freeTextures(); private: RenderBackend* m_renderBackend; ImageManager* m_imageManager; class GeometryCallData { public: std::vector vertices; std::vector indices; ResourceHandle textureHandle; DoublePoint translation; }; typedef std::queue GeometryCallDataChain; class GeometryCall { public: GeometryCall() : enableScissorTest(false), hasScissorArea(false) { } GeometryCallDataChain callChain; Rect scissorArea; bool enableScissorTest; bool hasScissorArea; }; std::queue m_geometryCalls; std::list m_freedTextures; }; }; #endif // FIFE_GUI_LIBROCKETRENDERINTERFACE_Hfifengine-0.4.1/engine/core/gui/librocket/librocketmanager.cpp000066400000000000000000000142051304641216200244230ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // 3rd party library includes #include #include #ifdef _DEBUG #include #endif // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/exception.h" #include "util/time/timemanager.h" #include "librocketmanager.h" #include "base/librocketinputprocessor.h" #include "base/librocketrenderinterface.h" namespace FIFE { LibRocketManager::LibRocketManager() : m_renderInterface(new LibRocketRenderInterface), m_inputProcessor(NULL) { Rocket::Core::SetSystemInterface(this); Rocket::Core::SetRenderInterface(m_renderInterface); Rocket::Core::Initialise(); Rocket::Controls::Initialise(); } LibRocketManager::~LibRocketManager() { unloadDocuments(); m_context->RemoveReference(); Rocket::Core::Shutdown(); delete m_renderInterface; delete m_inputProcessor; } void LibRocketManager::init(const std::string& backend, int32_t screenWidth, int32_t screenHeight) { m_context = Rocket::Core::CreateContext("default", Rocket::Core::Vector2i(screenWidth, screenHeight)); #ifdef _DEBUG Rocket::Debugger::Initialise(m_context); #endif m_inputProcessor = new LibRocketInputProcessor(m_context); } float LibRocketManager::GetElapsedTime() { static TimeManager *timeManager = TimeManager::instance(); return timeManager->getTime() / 1000.0f; } void LibRocketManager::turn() { m_inputProcessor->turn(); m_context->Update(); m_context->Render(); m_renderInterface->render(); m_renderInterface->freeTextures(); //m_renderInterface->reset(); } void LibRocketManager::resizeTopContainer(uint32_t x, uint32_t y, uint32_t width, uint32_t height) { m_context->SetDimensions(Rocket::Core::Vector2i(width, height)); } Rocket::Core::ElementDocument* LibRocketManager::loadDocument(const std::string& id, const std::string& documentPath) { if(m_openDocuments.find(id) != m_openDocuments.end()) { throw GuiException("Id: " + id + " already used!"); } Rocket::Core::String rocketDocumentPath(documentPath.c_str()); Rocket::Core::ElementDocument* document = m_context->LoadDocument(rocketDocumentPath); if(document != NULL) { m_openDocuments[id] = document; } else { throw GuiException("Could not load document " + documentPath + "!"); } return document; } Rocket::Core::ElementDocument* LibRocketManager::getDocument(const std::string& id) { std::map::iterator doc(m_openDocuments.find(id)); if(doc == m_openDocuments.end()) { throw GuiException("Rocket document with id " + id + " doesn't exist!"); } return doc->second; } void LibRocketManager::unloadDocument(Rocket::Core::ElementDocument* document) { std::map::iterator currDoc(m_openDocuments.begin()); std::map::iterator endDocs(m_openDocuments.end()); for(; currDoc != endDocs;) { if(currDoc->second == document) { m_context->UnloadDocument(currDoc->second); m_openDocuments.erase(currDoc); break; } ++currDoc; } } void LibRocketManager::unloadDocument(const std::string& id) { std::map::iterator doc(m_openDocuments.find(id)); if(doc != m_openDocuments.end()) { m_context->UnloadDocument(doc->second); m_openDocuments.erase(doc); } } void LibRocketManager::loadFont(const std::string& filepath) { Rocket::Core::String rocketFontPath(filepath.c_str()); bool succeeded = Rocket::Core::FontDatabase::LoadFontFace(rocketFontPath); if(!succeeded) { throw GuiException("Librocket cannot open font: " + filepath); } } bool LibRocketManager::onSdlEvent(SDL_Event& evt) { return (m_inputProcessor != NULL) ? m_inputProcessor->onSdlEvent(evt) : false; } void LibRocketManager::showDebugger() const { #ifdef _DEBUG if(!Rocket::Debugger::IsVisible()) { Rocket::Debugger::SetVisible(true); } #endif } void LibRocketManager::hideDebugger() const { #ifdef _DEBUG if(Rocket::Debugger::IsVisible()) { Rocket::Debugger::SetVisible(false); } #endif } void LibRocketManager::unloadDocuments() { std::map::iterator currDoc(m_openDocuments.begin()); std::map::iterator endDocs(m_openDocuments.end()); for(; currDoc != endDocs; ++currDoc) { m_context->UnloadDocument(currDoc->second); } m_openDocuments.clear(); } }; fifengine-0.4.1/engine/core/gui/librocket/librocketmanager.h000066400000000000000000000115251304641216200240720ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_GUI_LIBROCKETMANAGER_H #define FIFE_GUI_LIBROCKETMANAGER_H // Standard C++ library includes #include #include // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/singleton.h" #include "gui/guimanager.h" namespace Rocket { namespace Core { class Context; class ElementDocument; } }; namespace FIFE { class LibRocketInputProcessor; class LibRocketRenderInterface; class LibRocketManager : public Rocket::Core::SystemInterface, public IGUIManager, public DynamicSingleton { public: /** Constructor. */ LibRocketManager(); /** * Destructor. */ virtual ~LibRocketManager(); /** * Initializes the librocket manager. */ void init(const std::string& backend, int32_t screenWidth, int32_t screenHeight); /** * NOTE * There is an inconsistency in the naming of this method. * It's in upper camelcase and should have been in lower camelcase, * but it overrides Rocket::Core::SystemInterface::GetElapsedTime. * * @return The number of seconds elapsed since the start of the application. */ virtual float GetElapsedTime(); /** Updates and renders the gui. */ virtual void turn(); /** Resizes the top container. * * @param x The new starting X coordinate. * @param y The new starting Y coordinate. * @param width The new width. * @param height The new height. */ virtual void resizeTopContainer(uint32_t x, uint32_t y, uint32_t width, uint32_t height); /** Loads a rocket .rml file and shows it. * * @param id Id of the document chosen by the user. * @param documentPath Path to the file. * @return A document if the .rml file exists, NULL otherwise. */ virtual Rocket::Core::ElementDocument* loadDocument(const std::string& id, const std::string& documentPath); /** @return Document with id. */ virtual Rocket::Core::ElementDocument* getDocument(const std::string& id); /** Unloads a rocket document. */ virtual void unloadDocument(Rocket::Core::ElementDocument* document); /** Unloads a rocket document with given id. */ virtual void unloadDocument(const std::string& id); /** * Loads a font to be used by librocket. * * @param filepath Path of the font. */ virtual void loadFont(const std::string& filepath); /** Receives input and converts it to librocket format, then it forwards it * to librocket. */ virtual bool onSdlEvent(SDL_Event& evt); /** Shows the librocket debugger. */ void showDebugger() const; /** * Hides the librocket debugger. */ void hideDebugger() const; private: /** * Unloads documents opened by librocket. */ void unloadDocuments(); /** Librocket's context. */ Rocket::Core::Context* m_context; /** Render Interface for librocket. */ LibRocketRenderInterface* m_renderInterface; /** Input processor for librocket. */ LibRocketInputProcessor* m_inputProcessor; /** A set of all open documents. */ std::map m_openDocuments; }; }; #endif //FIFE_GUI_LIBROCKETMANAGER_Hfifengine-0.4.1/engine/core/gui/librocket/librocketmanager.i000066400000000000000000000007551304641216200240760ustar00rootroot00000000000000%module fife %{ #include "gui/librocket/librocketmanager.h" #include "gui/guimanager.h" %} %include "gui/guimanager.i" namespace FIFE { %feature("notabstract") LibRocketManager; class LibRocketManager : public IGUIManager { public: LibRocketManager(); virtual ~LibRocketManager(); void init(const std::string& backend, int32_t screenWidth, int32_t screenHeight); void loadFont(const std::string& filepath); void showDebugger() const; void hideDebugger() const; }; }fifengine-0.4.1/engine/core/loaders/000077500000000000000000000000001304641216200172735ustar00rootroot00000000000000fifengine-0.4.1/engine/core/loaders/native/000077500000000000000000000000001304641216200205615ustar00rootroot00000000000000fifengine-0.4.1/engine/core/loaders/native/audio/000077500000000000000000000000001304641216200216625ustar00rootroot00000000000000fifengine-0.4.1/engine/core/loaders/native/audio/ogg_loader.cpp000066400000000000000000000044011304641216200244670ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // Platform specific includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "audio/soundclip.h" #include "vfs/vfs.h" #include "util/log/logger.h" #include "util/base/exception.h" #include "ogg_loader.h" #include "sounddecoder_ogg.h" namespace FIFE { static Logger _log(LM_NATIVE_LOADERS); void OggLoader::load(IResource* res) { VFS* vfs = VFS::instance(); std::string filename = res->getName(); RawData* rdptr = vfs->open(filename); dynamic_cast(res)->adobtDecoder(new SoundDecoderOgg(rdptr)); } } fifengine-0.4.1/engine/core/loaders/native/audio/ogg_loader.h000066400000000000000000000040331304641216200241350ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_OGGLOADER_H_ #define FIFE_OGGLOADER_H_ // Standard C++ library includes // Platform specific includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/resource/resource.h" namespace FIFE { class OggLoader : public IResourceLoader { public: OggLoader() { } virtual void load(IResource* res); }; } #endif fifengine-0.4.1/engine/core/loaders/native/audio/sounddecoder_ogg.cpp000066400000000000000000000105231304641216200257010ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // Platform specific includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/log/logger.h" #include "util/base/exception.h" #include "sounddecoder_ogg.h" namespace FIFE { /** Logger to use for this source file. * @relates Logger */ static Logger _log(LM_AUDIO); /* OggVorbis Callback functions */ namespace OGG_cb { static size_t read(void *ptr, size_t size, size_t nmemb, void *datasource) { RawData* rdp = reinterpret_cast(datasource); size_t restlen = rdp->getDataLength()-rdp->getCurrentIndex(); size_t len = (restlen<=size*nmemb)?restlen:size*nmemb; if (len) { rdp->readInto(reinterpret_cast(ptr), len); } return len; } static int32_t seek(void *datasource, ogg_int64_t offset, int32_t whence) { RawData* rdp = reinterpret_cast(datasource); switch (whence) { case SEEK_SET: (*rdp).setIndex(static_cast(offset)); return 0; case SEEK_CUR: (*rdp).moveIndex(static_cast(offset)); return 0; case SEEK_END: (*rdp).setIndex( (*rdp).getDataLength() -1 + static_cast(offset)); return 0; } return -1; } static int32_t close(void *datasource) { return 0; } static long tell(void *datasource) { RawData* rdp = reinterpret_cast(datasource); return (*rdp).getCurrentIndex(); } } SoundDecoderOgg::SoundDecoderOgg(RawData* rdp) : m_file(rdp) { ov_callbacks ocb = { OGG_cb::read, OGG_cb::seek, OGG_cb::close, OGG_cb::tell }; if (0 > ov_open_callbacks(m_file.get(), &m_ovf, 0, 0, ocb)) { throw InvalidFormat("Error opening OggVorbis file"); } vorbis_info *vi = ov_info(&m_ovf, -1); if (!vi) { throw InvalidFormat("Error fetching OggVorbis info"); } if (!ov_seekable(&m_ovf)) { throw InvalidFormat("OggVorbis file has to be seekable"); } m_isstereo = vi->channels == 2; m_samplerate = vi->rate; m_is8bit = false; m_declength = (m_isstereo ? 2 : 1) * 2 * ov_pcm_total(&m_ovf, -1); m_datasize = 0; m_data = NULL; } bool SoundDecoderOgg::decode(uint64_t length) { int32_t stream = 0; int32_t ret = 0; // release buffer and allocate new memory releaseBuffer(); m_data = new char[length]; // decode the stream m_datasize = 0; do { ret = ov_read(&m_ovf, m_data + m_datasize, length-m_datasize, 0, 2, 1, &stream); if (ret > 0) { m_datasize += ret; } } while (length-m_datasize > 0 && ret > 0); return m_datasize == 0; } bool SoundDecoderOgg::setCursor(uint64_t pos) { if (ov_pcm_seek(&m_ovf, pos / ((m_isstereo ? 2 : 1) * 2)) == 0) { return true; } return false; } } fifengine-0.4.1/engine/core/loaders/native/audio/sounddecoder_ogg.h000066400000000000000000000063211304641216200253470ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_SOUNDDECODER_OGG_H #define FIFE_SOUNDDECODER_OGG_H // Standard C++ library includes // Platform specific includes // 3rd party library includes #include #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "vfs/raw/rawdata.h" #include "audio/sounddecoder.h" namespace FIFE { class SoundDecoderOgg : public SoundDecoder { public: SoundDecoderOgg(RawData* ptr); ~SoundDecoderOgg() { releaseBuffer(); } /** Returns the decoded length of the file in bytes */ uint64_t getDecodedLength() const{ return m_declength; } /** Sets the current position in the file (in bytes) * * @return 0 (False), if the positioning was successful */ bool setCursor(uint64_t pos); /** Request the decoding of the next part of the stream. * * @param length The length of the decoded part * @return 0 (False), if decoding was successful */ bool decode(uint64_t length); /** Returns the next decoded buffer. * * The length of the buffer is returned by getBufferSize(). */ void *getBuffer() const{ return m_data; } /** Returns the byte-size of the buffer returned by getBuffer(). */ uint64_t getBufferSize() { return m_datasize; } /** Releases the buffer returned by getBuffer() */ void releaseBuffer() { if (m_data != NULL) { delete[] m_data; m_data = NULL; } } private: boost::scoped_ptr m_file; uint64_t m_declength; uint64_t m_datasize; char* m_data; OggVorbis_File m_ovf; }; } #endif fifengine-0.4.1/engine/core/loaders/native/map/000077500000000000000000000000001304641216200213365ustar00rootroot00000000000000fifengine-0.4.1/engine/core/loaders/native/map/animationloader.cpp000066400000000000000000000214561304641216200252200ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "vfs/fife_boost_filesystem.h" #include "vfs/vfs.h" #include "vfs/raw/rawdata.h" #include "video/imagemanager.h" #include "video/animationmanager.h" #include "video/image.h" #include "video/animation.h" #include "util/base/exception.h" #include "util/log/logger.h" #include "util/resource/resource.h" #include "util/resource/resourcemanager.h" #include "animationloader.h" namespace FIFE { /** Logger to use for this source file. * @relates Logger */ static Logger _log(LM_NATIVE_LOADERS); AnimationLoader::AnimationLoader(VFS* vfs, ImageManager* imageManager, AnimationManager* animationManager) : m_vfs(vfs), m_imageManager(imageManager), m_animationManager(animationManager) { } bool AnimationLoader::isLoadable(const std::string& filename) { bfs::path animPath(filename); std::string animationFilename = animPath.string(); TiXmlDocument animFile; try { RawData* data = m_vfs->open(animationFilename); if (data) { if (data->getDataLength() != 0) { // TODO - this could be expanded to do more checks animFile.Parse(data->readString(data->getDataLength()).c_str()); if (animFile.Error()) { return false; } } // done with data delete resource delete data; data = 0; } } catch (NotFound&) { return false; } // if we get here then loading the file went well TiXmlElement* root = animFile.RootElement(); if (root && root->ValueStr() == "assets") { if (root->FirstChildElement("animation")) { return true; } } return false; } AnimationPtr AnimationLoader::load(const std::string& filename) { bfs::path animPath(filename); std::string animationFilename = animPath.string(); TiXmlDocument doc; AnimationPtr animation; try { RawData* data = m_vfs->open(animationFilename); if (data) { if (data->getDataLength() != 0) { doc.Parse(data->readString(data->getDataLength()).c_str()); if (doc.Error()) { return animation; } // done with data delete resource delete data; data = 0; } } } catch (NotFound& e) { FL_ERR(_log, e.what()); // TODO - should we abort here // or rethrow the exception // or just keep going return animation; } // if we get here then everything loaded properly // so we can just parse out the contents TiXmlElement* root = doc.RootElement(); if (root && root->ValueStr() == "assets") { animation = loadAnimation(filename, root->FirstChildElement("animation")); } return animation; } std::vector AnimationLoader::loadMultiple(const std::string& filename) { bfs::path animPath(filename); std::string animationFilename = animPath.string(); TiXmlDocument doc; std::vector animationVector; try { RawData* data = m_vfs->open(animationFilename); if (data) { if (data->getDataLength() != 0) { doc.Parse(data->readString(data->getDataLength()).c_str()); if (doc.Error()) { return animationVector; } // done with data delete resource delete data; data = 0; } } } catch (NotFound& e) { FL_ERR(_log, e.what()); // TODO - should we abort here // or rethrow the exception // or just keep going return animationVector; } // if we get here then everything loaded properly // so we can just parse out the contents TiXmlElement* root = doc.RootElement(); if (root && root->ValueStr() == "assets") { for (TiXmlElement* animationElem = root->FirstChildElement("animation"); animationElem; animationElem = animationElem->NextSiblingElement("animation")) { AnimationPtr animation = loadAnimation(filename, animationElem); if (animation) { animationVector.push_back(animation); } } } return animationVector; } AnimationPtr AnimationLoader::loadAnimation(const std::string& filename, TiXmlElement* animationElem) { AnimationPtr animation; if (!animationElem) { return animation; } bfs::path animPath(filename); std::string animationFilename = animPath.string(); bool alreadyLoaded = false; // first try to use the id, if no id exists it use the filename as fallback const std::string* animationId = animationElem->Attribute(std::string("id")); if (animationId) { if (!m_animationManager->exists(*animationId)) { animation = m_animationManager->create(*animationId); } else { animation = m_animationManager->getPtr(*animationId); alreadyLoaded = animation->getFrameCount() != 0; } } else { if (HasParentPath(animPath)) { animPath= GetParentPath(animPath) / animationFilename; } else { animPath = bfs::path(animationFilename); } if (!m_animationManager->exists(animPath.string())) { animation = m_animationManager->create(animPath.string()); } else { animation = m_animationManager->getPtr(animPath.string()); alreadyLoaded = animation->getFrameCount() != 0; } } if (alreadyLoaded) { return animation; } int direction = 0; int actionFrame = -1; int animDelay = 0; int animXoffset = 0; int animYoffset = 0; int success = animationElem->QueryValueAttribute("direction", &direction); if (success == TIXML_SUCCESS) { animation->setDirection(direction); } success = animationElem->QueryValueAttribute("action_frame", &actionFrame); if (success == TIXML_SUCCESS) { animation->setActionFrame(actionFrame); } animationElem->QueryValueAttribute("delay", &animDelay); animationElem->QueryValueAttribute("x_offset", &animXoffset); animationElem->QueryValueAttribute("y_offset", &animYoffset); for (TiXmlElement* frameElement = animationElem->FirstChildElement("frame"); frameElement; frameElement = frameElement->NextSiblingElement("frame")) { const std::string* sourceId = frameElement->Attribute(std::string("source")); if (sourceId) { bfs::path framePath(filename); if (HasParentPath(framePath)) { framePath = GetParentPath(framePath) / *sourceId; if (!bfs::exists(framePath)) { framePath = bfs::path(*sourceId); } } else { framePath = bfs::path(*sourceId); } ImagePtr imagePtr; if (!m_imageManager->exists(framePath.string())) { imagePtr = m_imageManager->create(framePath.string()); } else { imagePtr = m_imageManager->getPtr(framePath.string()); } if (imagePtr) { int frameXoffset = 0; success = frameElement->QueryValueAttribute("x_offset", &frameXoffset); if (success == TIXML_SUCCESS) { imagePtr->setXShift(frameXoffset); } else { imagePtr->setXShift(animXoffset); } int frameYoffset = 0; success = frameElement->QueryValueAttribute("y_offset", &frameYoffset); if (success == TIXML_SUCCESS) { imagePtr->setYShift(frameYoffset); } else { imagePtr->setYShift(animYoffset); } int frameDelay = 0; success = frameElement->QueryValueAttribute("delay", &frameDelay); if (success == TIXML_SUCCESS) { animation->addFrame(imagePtr, frameDelay); } else { animation->addFrame(imagePtr, animDelay); } } } } return animation; } } fifengine-0.4.1/engine/core/loaders/native/map/animationloader.h000066400000000000000000000052531304641216200246620ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_ANIMATION_LOADER_H #define FIFE_ANIMATION_LOADER_H // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "video/animation.h" #include "ianimationloader.h" namespace FIFE { class VFS; class ImageManager; class AnimationManager; class AnimationLoader : public IAnimationLoader { public: AnimationLoader(VFS* vfs, ImageManager* imageManager, AnimationManager* animationManager); /** * @see IAnimationLoader::isLoadable */ virtual bool isLoadable(const std::string& filename); /** * @see IAnimationLoader::load */ virtual AnimationPtr load(const std::string& filename); /** * @see IAnimationLoader::loadMultiple */ virtual std::vector loadMultiple(const std::string& filename); private: AnimationPtr loadAnimation(const std::string& filename, TiXmlElement* animationElem); VFS* m_vfs; ImageManager* m_imageManager; AnimationManager* m_animationManager; }; } #endif fifengine-0.4.1/engine/core/loaders/native/map/atlasloader.cpp000066400000000000000000000254421304641216200243440ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "model/model.h" #include "model/structures/layer.h" #include "vfs/fife_boost_filesystem.h" #include "vfs/vfs.h" #include "vfs/raw/rawdata.h" #include "util/base/exception.h" #include "util/log/logger.h" #include "util/resource/resource.h" #include "util/resource/resourcemanager.h" #include "video/animationmanager.h" #include "view/visual.h" #include "atlasloader.h" namespace FIFE { /** Logger to use for this source file. * @relates Logger */ static Logger _log(LM_NATIVE_LOADERS); size_t Atlas::getImageCount() const { return m_subimages.size(); } ImagePtr& Atlas::getPackedImage() { return m_image; } ImagePtr Atlas::getImage(const std::string& id) { SubimageMap::iterator iter = m_subimages.find(id); if(iter == m_subimages.end()) return ImagePtr(); return iter->second.image; } ImagePtr Atlas::getImage(uint32_t index) { if(index > getImageCount()) return ImagePtr(); SubimageMap::iterator iter = m_subimages.begin(); for(uint32_t i = 0; i < index; ++i, ++iter); return iter->second.image; } bool Atlas::addImage(const std::string& imagename, const AtlasData& data) { return m_subimages.insert(std::pair(imagename, data)).second; } void Atlas::setPackedImage(const ImagePtr& image) { m_image = image; } const std::string& Atlas::getName() const { return m_name; } AtlasLoader::AtlasLoader(Model* model, VFS* vfs, ImageManager* imageManager, AnimationManager* animationManager) : m_model(model), m_vfs(vfs), m_imageManager(imageManager), m_animationManager(animationManager) { } AtlasLoader::~AtlasLoader() { } bool AtlasLoader::isLoadable(const std::string& filename) { bfs::path atlasPath(filename); std::string atlasFilename = atlasPath.string(); TiXmlDocument atlasFile; try { RawData* data = m_vfs->open(atlasFilename); if (data) { if (data->getDataLength() != 0) { atlasFile.Parse(data->readString(data->getDataLength()).c_str()); if (atlasFile.Error()) { return false; } } else { return false; } // done with data delete resource delete data; data = 0; } } catch (NotFound&) { return false; } // if we get here then loading the file went well TiXmlElement* root = atlasFile.RootElement(); if (root && root->ValueStr() == "assets") { if (root->FirstChildElement("atlas")) { return true; } } return false; } AtlasPtr AtlasLoader::load(const std::string& filename) { bfs::path atlasPath(filename); bfs::path atlasPathDirectory; std::string atlasFilename = atlasPath.string(); if (HasParentPath(atlasPath)) { // save the directory where the atlas file is located atlasPathDirectory = GetParentPath(atlasPath); } TiXmlDocument doc; AtlasPtr atlas; try { RawData* data = m_vfs->open(atlasFilename); if (data) { if (data->getDataLength() != 0) { doc.Parse(data->readString(data->getDataLength()).c_str()); if (doc.Error()) { return atlas; } // done with data delete resource delete data; data = 0; } } } catch (NotFound& e) { FL_ERR(_log, e.what()); // TODO - should we abort here // or rethrow the exception // or just keep going return atlas; } // if we get here then everything loaded properly // so we can just parse out the contents TiXmlElement* root = doc.RootElement(); if (root && root->ValueStr() == "assets") { atlas = loadAtlas(filename, root->FirstChildElement("atlas")); } return atlas; } std::vector AtlasLoader::loadMultiple(const std::string& filename) { bfs::path atlasPath(filename); bfs::path atlasPathDirectory; std::string atlasFilename = atlasPath.string(); if (HasParentPath(atlasPath)) { // save the directory where the atlas file is located atlasPathDirectory = GetParentPath(atlasPath); } TiXmlDocument doc; std::vector atlasVector; try { RawData* data = m_vfs->open(atlasFilename); if (data) { if (data->getDataLength() != 0) { doc.Parse(data->readString(data->getDataLength()).c_str()); if (doc.Error()) { return atlasVector; } // done with data delete resource delete data; data = 0; } } } catch (NotFound& e) { FL_ERR(_log, e.what()); // TODO - should we abort here // or rethrow the exception // or just keep going return atlasVector; } // if we get here then everything loaded properly // so we can just parse out the contents TiXmlElement* root = doc.RootElement(); if (root && root->ValueStr() == "assets") { for (TiXmlElement* atlasElem = root->FirstChildElement("atlas"); atlasElem; atlasElem = atlasElem->NextSiblingElement("atlas")) { AtlasPtr atlas = loadAtlas(filename, atlasElem); if (atlas) { atlasVector.push_back(atlas); } } } return atlasVector; } AtlasPtr AtlasLoader::loadAtlas(const std::string& filename, TiXmlElement* atlasElem) { AtlasPtr atlas; if (!atlasElem) { return atlas; } const std::string* atlasSource = atlasElem->Attribute(std::string("source")); if (atlasSource) { const std::string* atlasId = atlasElem->Attribute(std::string("id")); bfs::path atlasPath(filename); bfs::path atlasPathDirectory; if (HasParentPath(atlasPath)) { // save the directory where the atlas file is located atlasPathDirectory = GetParentPath(atlasPath); } // Atlas itself doesn't have appended id bfs::path atlasImagePath = atlasPathDirectory / *atlasSource; atlas.reset(new Atlas(atlasImagePath.string())); // End-user could create the same atlas for the second time. // Since we don't hold any data for Atlases like ImageManager we need to recreate // atlas parameters (to return proper AtlasPtr) but don't reload pixel data (they are held by ImageManager). if (!m_imageManager->exists(atlas->getName())) { atlas->setPackedImage(m_imageManager->create(atlas->getName())); } else { atlas->setPackedImage(m_imageManager->getPtr(atlas->getName())); } // Create subimages with given id and individual position and size if (atlasElem->FirstChildElement("subimage")) { for (TiXmlElement* imageElem = atlasElem->FirstChildElement("subimage"); imageElem != 0; imageElem = imageElem->NextSiblingElement("subimage")) { const std::string* subimageId = imageElem->Attribute(std::string("id")); if (subimageId) { Rect region; imageElem->QueryValueAttribute("xpos", ®ion.x); imageElem->QueryValueAttribute("ypos", ®ion.y); imageElem->QueryValueAttribute("width", ®ion.w); imageElem->QueryValueAttribute("height", ®ion.h); std::string finalname; // atlas id is optional here if (atlasId) { finalname = *atlasId + ":" + *subimageId; } else { finalname = *subimageId; } ImagePtr subImage; if (!m_imageManager->exists(finalname)) { subImage = m_imageManager->create(finalname); } else { subImage = m_imageManager->getPtr(finalname); } subImage->useSharedImage(atlas->getPackedImage(), region); AtlasData atlasData = {region, subImage}; atlas->addImage(finalname, atlasData); } } } else { // Create subimages with automatic id and same size int frame = 0; int atlasWidth = 0; int atlasHeight = 0; int subimageWidth = 0; int subimageHeight = 0; atlasElem->QueryValueAttribute("atlas_width", &atlasWidth); atlasElem->QueryValueAttribute("atlas_height", &atlasHeight); atlasElem->QueryValueAttribute("subimage_width", &subimageWidth); atlasElem->QueryValueAttribute("subimage_height", &subimageHeight); // file extension of the atlas is also used as subimage extension std::string extension = bfs::extension(*atlasSource); // we need an atlas id if (!atlasId) { atlasId = atlasSource; } if (atlasWidth != 0 && atlasHeight != 0 && subimageWidth != 0 && subimageHeight != 0) { int x_rows = atlasWidth / subimageWidth; int y_rows = atlasHeight / subimageHeight; Rect region(0, 0, subimageWidth, subimageHeight); for (int y = 0; y < y_rows; ++y) { region.y = y * subimageHeight; for (int x = 0; x < x_rows; ++x) { region.x = x * subimageWidth; static char tmp[64]; snprintf(tmp, 64, "%04d", frame); std::ostringstream finalname; finalname << *atlasId << ":" << std::string(tmp) << extension; ImagePtr subImage; if (!m_imageManager->exists(finalname.str())) { subImage = m_imageManager->create(finalname.str()); } else { subImage = m_imageManager->getPtr(finalname.str()); } subImage->useSharedImage(atlas->getPackedImage(), region); AtlasData atlasData = {region, subImage}; atlas->addImage(finalname.str(), atlasData); ++frame; } } } } } return atlas; } AtlasLoader* createDefaultAtlasLoader(Model* model, VFS* vfs, ImageManager* imageManager, AnimationManager* animationManager) { return new AtlasLoader(model, vfs, imageManager, animationManager); } } fifengine-0.4.1/engine/core/loaders/native/map/atlasloader.h000066400000000000000000000102551304641216200240050ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_ATLAS_LOADER_H #define FIFE_ATLAS_LOADER_H // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/structures/rect.h" #include "video/image.h" #include "video/imagemanager.h" #include "iatlasloader.h" class TiXmlElement; namespace FIFE { class VFS; class ImageManager; class AnimationManager; struct AtlasData { Rect rect; ImagePtr image; }; class Atlas { public: Atlas(const std::string& name) : m_name(name) {;} ~Atlas() {;} /** Returns the number of subimages that belongs to this atlas. */ size_t getImageCount() const; /** Returns an (packed) Image for this atlas. */ ImagePtr& getPackedImage(); /** Return an Image of given id. */ ImagePtr getImage(const std::string& id); /** Return an Image of given (serial) index in atlas */ ImagePtr getImage(uint32_t index); /** Adds new information about subimage that belongs to this atlas. * @remarks This is essential function in parsing atlas files. * @returns True, when image of given name hasn't been added before. */ bool addImage(const std::string& imagename, const AtlasData& data); /** Sets the image for atlas to use it for rendering. * @remarks Should only be used during loading stage */ void setPackedImage(const ImagePtr& image); const std::string& getName() const; protected: typedef std::map SubimageMap; SubimageMap m_subimages; ImagePtr m_image; // Unique atlas name std::string m_name; }; class AtlasLoader : public IAtlasLoader { public: AtlasLoader(Model* model, VFS* vfs, ImageManager* imageManager, AnimationManager* animationManager); virtual ~AtlasLoader(); /** * @see IAtlasLoader::isLoadable */ virtual bool isLoadable(const std::string& filename); /** * @see IAtlasLoader::load */ virtual AtlasPtr load(const std::string& filename); /** * @see IAtlasLoader::loadMultiple */ virtual std::vector loadMultiple(const std::string& filename); private: AtlasPtr loadAtlas(const std::string& filename, TiXmlElement* atlasElem); Model* m_model; VFS* m_vfs; ImageManager* m_imageManager; AnimationManager* m_animationManager; }; /** convenience function for creating the default fife atlas loader * deleting the object returned from this function is the * responsibility of the caller */ AtlasLoader* createDefaultAtlasLoader(Model* model, VFS* vfs, ImageManager* imageManager, AnimationManager* animationManager); } #endif fifengine-0.4.1/engine/core/loaders/native/map/ianimationloader.h000066400000000000000000000051501304641216200250270ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_IANIMATION_LOADER_H #define FIFE_IANIMATION_LOADER_H // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "video/animation.h" namespace FIFE { class IAnimationLoader { public: virtual ~IAnimationLoader() { }; /** determines whether the resource is in * the correct format for this loader */ virtual bool isLoadable(const std::string& filename) = 0; /** responsible for loading the animation * returns a shared pointer to an animation resource */ virtual AnimationPtr load(const std::string& filename) = 0; /** responsible for loading all animations * returns a vector of shared pointer to an animation resource */ virtual std::vector loadMultiple(const std::string& filename) = 0; }; typedef SharedPtr AnimationLoaderPtr; } #endif fifengine-0.4.1/engine/core/loaders/native/map/ianimationloader.i000066400000000000000000000032761304641216200250370ustar00rootroot00000000000000/************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "loaders/native/map/ianimationloader.h" %} %include "video/video.i" namespace FIFE { %feature("director") IAnimationLoader; } %include "loaders/native/map/ianimationloader.h" fifengine-0.4.1/engine/core/loaders/native/map/iatlasloader.h000066400000000000000000000050751304641216200241620ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_IATLAS_LOADER_H #define FIFE_IATLAS_LOADER_H // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "video/imagemanager.h" namespace FIFE { class Atlas; typedef SharedPtr AtlasPtr; class IAtlasLoader { public: virtual ~IAtlasLoader() { }; /** determines whether the resource is in * the correct format for this loader */ virtual bool isLoadable(const std::string& filename) = 0; /** responsible for loading the atlas * returns a shared pointer to an image resource */ virtual AtlasPtr load(const std::string& filename) = 0; /** responsible for loading the all atlases * returns a vector of shared pointer to an image resource */ virtual std::vector loadMultiple(const std::string& filename) = 0; }; typedef SharedPtr AtlasLoaderPtr; } #endif fifengine-0.4.1/engine/core/loaders/native/map/iatlasloader.i000066400000000000000000000033601304641216200241560ustar00rootroot00000000000000/************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "loaders/native/map/iatlasloader.h" #include "loaders/native/map/atlasloader.h" %} namespace FIFE { %feature("director") IAtlasLoader; } %include "loaders/native/map/iatlasloader.h" %include "loaders/native/map/atlasloader.h" fifengine-0.4.1/engine/core/loaders/native/map/imaploader.h000066400000000000000000000057301304641216200236310ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_IMAPLOADER_H_ #define FIFE_IMAPLOADER_H_ // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "iatlasloader.h" #include "iobjectloader.h" #include "ianimationloader.h" namespace FIFE { class Map; /** Interface class that all map loaders should derive from */ class IMapLoader { public: virtual ~IMapLoader() { }; /** allows setting which object loader will be * used to load object files */ virtual void setObjectLoader(const FIFE::ObjectLoaderPtr& objectLoader) = 0; /** allows setting which animation loader will be * used to load animation files */ virtual void setAnimationLoader(const FIFE::AnimationLoaderPtr& animationLoader) = 0; /** allows setting which atlas loader will be * used to load atlas files */ virtual void setAtlasLoader(const FIFE::AtlasLoaderPtr& atlasLoader) = 0; /** determines whether the resource is in * the correct format for this loader */ virtual bool isLoadable(const std::string& filename) const = 0; /** responsible for loading the map resource * and populating the engine */ virtual Map* load(const std::string& filename) = 0; }; } #endif fifengine-0.4.1/engine/core/loaders/native/map/imaploader.i000066400000000000000000000032221304641216200236240ustar00rootroot00000000000000/************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "loaders/native/map/imaploader.h" %} namespace FIFE { %feature("director") IMapLoader; } %include "loaders/native/map/imaploader.h" fifengine-0.4.1/engine/core/loaders/native/map/iobjectloader.h000066400000000000000000000055361304641216200243260ustar00rootroot00000000000000/************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_IOBJECTLOADER_H_ #define FIFE_IOBJECTLOADER_H_ // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/sharedptr.h" #include "ianimationloader.h" #include "iatlasloader.h" namespace FIFE { /** Interface class that all object loaders should derive from */ class IObjectLoader { public: virtual ~IObjectLoader() { }; /** allows setting which animation loader will be * used to load animation files */ virtual void setAnimationLoader(const AnimationLoaderPtr& animationLoader) = 0; virtual AnimationLoaderPtr getAnimationLoader() = 0; /** allows setting which atlas loader will be * used to load atlas files */ virtual void setAtlasLoader(const AtlasLoaderPtr& atlasLoader) = 0; virtual AtlasLoaderPtr getAtlasLoader() = 0; /** determines whether the resource is in * the correct format for this loader */ virtual bool isLoadable(const std::string& filename) const = 0; /** responsible for loading the object resource * and populating the engine */ virtual void load(const std::string& filename) = 0; }; typedef SharedPtr ObjectLoaderPtr; } #endiffifengine-0.4.1/engine/core/loaders/native/map/iobjectloader.i000066400000000000000000000034451304641216200243240ustar00rootroot00000000000000/************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "loaders/native/map/iobjectloader.h" #include "loaders/native/map/ianimationloader.h" #include "loaders/native/map/objectloader.h" %} namespace FIFE { %feature("director") IObjectLoader; } %include "loaders/native/map/iobjectloader.h" %include "loaders/native/map/objectloader.h" fifengine-0.4.1/engine/core/loaders/native/map/maploader.cpp000066400000000000000000000774161304641216200240250ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include #include // 3rd party includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "model/model.h" #include "model/structures/layer.h" #include "model/structures/instance.h" #include "model/structures/cell.h" #include "model/structures/cellcache.h" #include "model/structures/trigger.h" #include "model/structures/triggercontroller.h" #include "model/metamodel/grids/cellgrid.h" #include "model/metamodel/modelcoords.h" #include "model/metamodel/action.h" #include "vfs/fife_boost_filesystem.h" #include "vfs/vfs.h" #include "vfs/vfsdirectory.h" #include "vfs/raw/rawdata.h" #include "util/base/exception.h" #include "util/log/logger.h" #include "util/resource/resource.h" #include "util/structures/rect.h" #include "video/imagemanager.h" #include "video/animationmanager.h" #include "video/image.h" #include "video/renderbackend.h" #include "view/visual.h" #include "view/camera.h" #include "view/renderers/instancerenderer.h" #include "util/base/stringutils.h" #include "atlasloader.h" #include "maploader.h" #include "animationloader.h" #include "objectloader.h" namespace FIFE { /** Logger to use for this source file. * @relates Logger */ static Logger _log(LM_NATIVE_LOADERS); MapLoader::MapLoader(Model* model, VFS* vfs, ImageManager* imageManager, RenderBackend* renderBackend) : m_model(model), m_vfs(vfs), m_imageManager(imageManager), m_animationManager(AnimationManager::instance()), m_renderBackend(renderBackend), m_loaderName("fife"), m_mapDirectory("") { AnimationLoaderPtr animationLoader(new AnimationLoader(m_vfs, m_imageManager, m_animationManager)); AtlasLoaderPtr atlasLoader(new AtlasLoader(m_model, m_vfs, m_imageManager, m_animationManager)); m_objectLoader.reset(new ObjectLoader(m_model, m_vfs, m_imageManager, m_animationManager, animationLoader, atlasLoader)); } MapLoader::~MapLoader() { } Map* MapLoader::load(const std::string& filename) { Map* map = NULL; // reset percent done listener just in case // it has residual data from last load m_percentDoneListener.reset(); bfs::path mapPath(filename); if (HasParentPath(mapPath)) { if (GetParentPath(mapPath).string() != m_mapDirectory) { // save the directory where the map file is located m_mapDirectory = GetParentPath(mapPath).string(); } } TiXmlDocument mapFile; std::string mapFilename = mapPath.string(); try { RawData* data = m_vfs->open(mapFilename); if (data) { if (data->getDataLength() != 0) { mapFile.Parse(data->readString(data->getDataLength()).c_str()); if (mapFile.Error()) { std::ostringstream oss; oss << " Failed to load" << mapFilename << " : " << __FILE__ << " [" << __LINE__ << "]" << std::endl; FL_ERR(_log, oss.str()); return map; } } // done with data delete resource delete data; data = 0; } } catch (NotFound& e) { FL_ERR(_log, e.what()); // TODO - should we abort here // or rethrow the exception // or just keep going return map; } // if we get here then everything loaded properly // so we can just parse out the contents const TiXmlElement* root = mapFile.RootElement(); if (root) { const std::string* loaderName = root->Attribute(std::string("loaderName")); if (loaderName) { m_loaderName = *loaderName; } int numElements = 0; root->QueryValueAttribute("elements", &numElements); m_percentDoneListener.setTotalNumberOfElements(numElements); const std::string* mapName = root->Attribute(std::string("id")); if (mapName) { try { map = m_model->createMap(*mapName); } catch (NameClash& e) { FL_ERR(_log, e.what()); // just rethrow to client throw; } if (map) { map->setFilename(mapFilename); std::string ns = ""; for (const TiXmlElement *importElement = root->FirstChildElement("import"); importElement; importElement = importElement->NextSiblingElement("import")) { const std::string* importDir = importElement->Attribute(std::string("dir")); const std::string* importFile = importElement->Attribute(std::string("file")); std::string directory = ""; if (importDir) { directory = *importDir; } std::string file = ""; if (importFile) { file = *importFile; } if (importDir && !importFile) { bfs::path fullPath(m_mapDirectory); fullPath /= directory; loadImportDirectory(fullPath.string()); } else if (importFile) { bfs::path fullFilePath(file); bfs::path fullDirPath(directory); if (importDir) { fullDirPath = bfs::path(m_mapDirectory); fullDirPath /= directory; } else { fullFilePath = bfs::path(m_mapDirectory); fullFilePath /= file; } loadImportFile(fullFilePath.string(), fullDirPath.string()); } } // converts multiobject part id to object pointer std::list namespaces = m_model->getNamespaces(); std::list::iterator name_it = namespaces.begin(); for (; name_it != namespaces.end(); ++name_it) { std::list objects = m_model->getObjects(*name_it); std::list::iterator object_it = objects.begin(); for (; object_it != objects.end(); ++object_it) { if ((*object_it)->isMultiObject()) { const std::list& multiParts = (*object_it)->getMultiPartIds(); std::list::const_iterator multi_it = multiParts.begin(); for (; multi_it != multiParts.end(); ++multi_it) { Object* partObj = m_model->getObject(*multi_it, *name_it); if (partObj) { partObj->setMultiPart(true); (*object_it)->addMultiPart(partObj); } } } } } // iterate over elements looking for layers for (const TiXmlElement* layerElement = root->FirstChildElement("layer"); layerElement; layerElement = layerElement->NextSiblingElement("layer")) { // defaults double xOffset = 0.0; double yOffset = 0.0; double zOffset = 0.0; double xScale = 1.0; double yScale = 1.0; double zScale = 1.0; double rotation = 0.0; int xOffsetRetVal = layerElement->QueryValueAttribute("x_offset", &xOffset); int yOffsetRetVal = layerElement->QueryValueAttribute("y_offset", &yOffset); layerElement->QueryValueAttribute("z_offset", &zOffset); int xScaleRetVal = layerElement->QueryValueAttribute("x_scale", &xScale); int yScaleRetVal = layerElement->QueryValueAttribute("y_scale", &yScale); layerElement->QueryValueAttribute("z_scale", &zScale); int rotationRetVal = layerElement->QueryValueAttribute("rotation", &rotation); const std::string* layerName = layerElement->Attribute(std::string("id")); const std::string* pathing = layerElement->Attribute(std::string("pathing")); const std::string* sorting = layerElement->Attribute(std::string("sorting")); const std::string* gridType = layerElement->Attribute(std::string("grid_type")); const std::string* layerType = layerElement->Attribute(std::string("layer_type")); const std::string* layerTypeName = layerElement->Attribute(std::string("layer_type_id")); if (xOffsetRetVal == TIXML_SUCCESS && yOffsetRetVal == TIXML_SUCCESS && xScaleRetVal == TIXML_SUCCESS && yScaleRetVal == TIXML_SUCCESS && rotationRetVal == TIXML_SUCCESS && layerName && pathing && gridType) { PathingStrategy pathStrategy = CELL_EDGES_ONLY; if ("cell_edges_and_diagonals" == *pathing) { pathStrategy = CELL_EDGES_AND_DIAGONALS; } SortingStrategy sortStrategy = SORTING_CAMERA; if (sorting) { if (*sorting == "location") { sortStrategy = SORTING_LOCATION; } else if (*sorting == "camera_and_location") { sortStrategy = SORTING_CAMERA_AND_LOCATION; } } CellGrid* grid = NULL; if (gridType) { grid = m_model->getCellGrid(*gridType); } else { grid = m_model->getCellGrid("square"); } if (grid) { grid->setXShift(xOffset); grid->setXScale(xScale); grid->setYShift(yOffset); grid->setYScale(yScale); grid->setZShift(zOffset); grid->setZScale(zScale); grid->setRotation(rotation); Layer *layer = NULL; try { layer = map->createLayer(*layerName, grid); } catch (NameClash&) { // TODO - handle exception assert(false); } if (layer) { layer->setPathingStrategy(pathStrategy); layer->setSortingStrategy(sortStrategy); if (layerType) { if (*layerType == "walkable") { layer->setWalkable(true); } else if (*layerType == "interact") { layer->setInteract(true, *layerTypeName); } } double curr_x = 0; double curr_y = 0; for (const TiXmlElement* instances = layerElement->FirstChildElement("instances"); instances; instances = instances->NextSiblingElement("instances")) { for (const TiXmlElement* instance = instances->FirstChildElement("i"); instance; instance = instance->NextSiblingElement("i")) { double x = 0; double y = 0; double z = 0; int r = 0; int stackpos = 0; int cellStack = 0; int visitorRadius = 0; const std::string* instanceId = instance->Attribute(std::string("id")); const std::string* objectId = instance->Attribute(std::string("o")); const std::string* costId = instance->Attribute(std::string("cost_id")); if (!objectId) { objectId = instance->Attribute(std::string("object")); } if (!objectId) { objectId = instance->Attribute(std::string("obj")); } const std::string* namespaceId = instance->Attribute(std::string("ns")); if (!namespaceId) { namespaceId = instance->Attribute(std::string("namespace")); } int xRetVal = instance->QueryValueAttribute("x", &x); int yRetVal = instance->QueryValueAttribute("y", &y); instance->QueryValueAttribute("z", &z); int rRetVal = instance->QueryValueAttribute("r", &r); if (xRetVal == TIXML_SUCCESS) { curr_x = x; } else { x = ++curr_x; } if (yRetVal == TIXML_SUCCESS) { curr_y = y; } else { y = curr_y; } if (rRetVal != TIXML_SUCCESS) { rRetVal = instance->QueryValueAttribute("rotation", &r); } int stackRetVal = instance->QueryValueAttribute("stackpos", &stackpos); int cellStackRetVal = instance->QueryValueAttribute("cellstack", &cellStack); int visitorRetVal = instance->QueryValueAttribute("visitor_radius", &visitorRadius); const std::string* shapeType = instance->Attribute(std::string("visitor_shape")); VisitorShapeInfo visitorShape = ITYPE_NO_SHAPE; if (shapeType) { if ("quad" == *shapeType) { visitorShape = ITYPE_QUAD_SHAPE; } else if ("circle" == *shapeType) { visitorShape = ITYPE_CIRCLE_SHAPE; } } if (objectId) { if (namespaceId) { ns = *namespaceId; } Object* object = m_model->getObject(*objectId, ns); if (object) { Instance* inst = NULL; if (instanceId) { inst = layer->createInstance(object, ExactModelCoordinate(x,y,z), *instanceId); } else { inst = layer->createInstance(object, ExactModelCoordinate(x,y,z)); } if (inst) { if (rRetVal != TIXML_SUCCESS) { ObjectVisual* objVisual = object->getVisual(); std::vector angles; objVisual->getStaticImageAngles(angles); if (!angles.empty()) { r = angles[0]; } } inst->setRotation(r); InstanceVisual* instVisual = InstanceVisual::create(inst); if (instVisual && (stackRetVal == TIXML_SUCCESS)) { instVisual->setStackPosition(stackpos); } if (cellStackRetVal == TIXML_SUCCESS) { inst->setCellStackPosition(cellStack); } if (visitorRetVal == TIXML_SUCCESS) { inst->setVisitor(true); inst->setVisitorRadius(visitorRadius); inst->setVisitorShape(visitorShape); } if (costId) { double cost = 0; int costRetVal = instance->QueryValueAttribute("cost", &cost); if (costRetVal == TIXML_SUCCESS) { inst->setCost(*costId, cost); } } if (object->getAction("default")) { Location target(layer); inst->actRepeat("default", target); } } else { std::ostringstream oss; oss << " Failed to create instance of object " << *objectId << " : " << __FILE__ << " [" << __LINE__ << "]" << std::endl; FL_ERR(_log, oss.str()); } } } // increment % done counter m_percentDoneListener.incrementCount(); } } } } } // increment % done counter m_percentDoneListener.incrementCount(); } // init CellCaches map->initializeCellCaches(); // add Cells from xml File for (const TiXmlElement* cacheElements = root->FirstChildElement("cellcaches"); cacheElements; cacheElements = cacheElements->NextSiblingElement("cellcaches")) { for (const TiXmlElement* cacheElement = cacheElements->FirstChildElement("cellcache"); cacheElement; cacheElement = cacheElement->NextSiblingElement("cellcache")) { double cacheCost = 1.0; double cacheSpeed = 1.0; const std::string* layerId = cacheElement->Attribute(std::string("id")); if (layerId) { cacheElement->QueryDoubleAttribute("default_cost", &cacheCost); cacheElement->QueryDoubleAttribute("default_speed", &cacheSpeed); Layer* layer = map->getLayer(*layerId); if (layer) { CellCache* cache = layer->getCellCache(); if (cache) { int searchNarrow = 0; cacheElement->QueryIntAttribute("search_narrow", &searchNarrow); cache->setSearchNarrowCells(searchNarrow != 0); cache->setDefaultCostMultiplier(cacheCost); cache->setDefaultSpeedMultiplier(cacheSpeed); for (const TiXmlElement* cellElement = cacheElement->FirstChildElement("cell"); cellElement; cellElement = cellElement->NextSiblingElement("cell")) { int cellX = 0; int cellY = 0; int success = cellElement->QueryIntAttribute("x", &cellX); success &= cellElement->QueryIntAttribute("y", &cellY); if (success == TIXML_SUCCESS) { ModelCoordinate mc(cellX, cellY); Cell* cell = cache->createCell(mc); const std::string* cellVisual = cellElement->Attribute(std::string("state")); if (cellVisual) { CellVisualEffect cve = CELLV_REVEALED; if (*cellVisual == "concealed") { cve = CELLV_CONCEALED; } else if (*cellVisual == "masked") { cve = CELLV_MASKED; } cell->setFoWType(cve); } const std::string* cellBlocker = cellElement->Attribute(std::string("blocker_type")); if (cellBlocker) { if (*cellBlocker == "no_blocker") { CellTypeInfo cti = CTYPE_CELL_NO_BLOCKER; cell->setCellType(cti); } else if (*cellBlocker == "blocker") { CellTypeInfo cti = CTYPE_CELL_BLOCKER; cell->setCellType(cti); } } double cellCost = 1.0; double cellSpeed = 1.0; success = cellElement->QueryDoubleAttribute("default_cost", &cellCost); if (success == TIXML_SUCCESS) { cell->setCostMultiplier(cellCost); } success = cellElement->QueryDoubleAttribute("default_speed", &cellSpeed); if (success == TIXML_SUCCESS) { cell->setSpeedMultiplier(cellSpeed); } int isNarrow = 0; cellElement->QueryIntAttribute("narrow", &isNarrow); if (isNarrow != 0) { cache->addNarrowCell(cell); } // add cost with given id to cell for (const TiXmlElement* costElement = cellElement->FirstChildElement("cost"); costElement; costElement = costElement->NextSiblingElement("cost")) { const std::string* costId = costElement->Attribute(std::string("id")); double cost = 1.0; success = costElement->QueryDoubleAttribute("value", &cost); if (costId && success == TIXML_SUCCESS) { cache->registerCost(*costId, cost); cache->addCellToCost(*costId, cell); } } // add area to cell for (const TiXmlElement* areaElement = cellElement->FirstChildElement("area"); areaElement; areaElement = areaElement->NextSiblingElement("area")) { const std::string* areaId = areaElement->Attribute(std::string("id")); if (areaId) { cache->addCellToArea(*areaId, cell); } } } } } } } } } // finalize CellCaches map->finalizeCellCaches(); // add Transistions for (const TiXmlElement* cacheElements = root->FirstChildElement("cellcaches"); cacheElements; cacheElements = cacheElements->NextSiblingElement("cellcaches")) { for (const TiXmlElement* cacheElement = cacheElements->FirstChildElement("cellcache"); cacheElement; cacheElement = cacheElement->NextSiblingElement("cellcache")) { const std::string* layerId = cacheElement->Attribute(std::string("id")); if (layerId) { Layer* layer = map->getLayer(*layerId); if (layer) { CellCache* cache = layer->getCellCache(); if (cache) { for (const TiXmlElement* cellElement = cacheElement->FirstChildElement("cell"); cellElement; cellElement = cellElement->NextSiblingElement("cell")) { int cellX = 0; int cellY = 0; int success = cellElement->QueryIntAttribute("x", &cellX); success &= cellElement->QueryIntAttribute("y", &cellY); if (success == TIXML_SUCCESS) { ModelCoordinate mc(cellX, cellY); Cell* cell = cache->getCell(mc); if (!cell) { continue; } for (const TiXmlElement* transitionElement = cellElement->FirstChildElement("transition"); transitionElement; transitionElement = transitionElement->NextSiblingElement("transition")) { int targetX = 0; int targetY = 0; int targetZ = 0; success = transitionElement->QueryIntAttribute("x", &targetX); success &= transitionElement->QueryIntAttribute("y", &targetY); transitionElement->QueryIntAttribute("z", &targetZ); if (success == TIXML_SUCCESS) { ModelCoordinate mc(targetX, targetY, targetZ); Layer* targetLayer = NULL; const std::string* targetLayerId = transitionElement->Attribute(std::string("id")); if (targetLayerId) { targetLayer = map->getLayer(*targetLayerId); } if (!targetLayer) { targetLayer = layer; } int immediate = 0; transitionElement->QueryIntAttribute("immediate", &immediate); cell->createTransition(targetLayer, mc, immediate != 0); } } } } } } } } } for (const TiXmlElement* triggerElements = root->FirstChildElement("triggers"); triggerElements; triggerElements = triggerElements->NextSiblingElement("triggers")) { TriggerController* triggerController = map->getTriggerController(); for (const TiXmlElement* triggerElement = triggerElements->FirstChildElement("trigger"); triggerElement; triggerElement = triggerElement->NextSiblingElement("trigger")) { const std::string* triggerName = triggerElement->Attribute(std::string("name")); int triggered = 0; int allInstances = 0; triggerElement->QueryIntAttribute("triggered", &triggered); triggerElement->QueryIntAttribute("all_instances", &allInstances); Trigger* trigger = triggerController->createTrigger(*triggerName); if (triggered > 0) { trigger->setTriggered(); } if (allInstances > 0) { trigger->enableForAllInstances(); } const std::string* instanceId = triggerElement->Attribute(std::string("attached_instance")); const std::string* layerId = triggerElement->Attribute(std::string("attached_layer")); if (instanceId && layerId) { Layer* layer = map->getLayer(*layerId); if (layer) { Instance* instance = layer->getInstance(*instanceId); if (instance) { trigger->attach(instance); } } } for (const TiXmlElement* assignElement = triggerElement->FirstChildElement("assign"); assignElement; assignElement = assignElement->NextSiblingElement("assign")) { layerId = assignElement->Attribute(std::string("layer_id")); if (!layerId) { continue; } int x = 0; int y = 0; assignElement->QueryIntAttribute("x", &x); assignElement->QueryIntAttribute("y", &y); Layer* layer = map->getLayer(*layerId); if (layer) { trigger->assign(layer, ModelCoordinate(x, y)); } } for (const TiXmlElement* enabledElement = triggerElement->FirstChildElement("enabled"); enabledElement; enabledElement = enabledElement->NextSiblingElement("enabled")) { layerId = enabledElement->Attribute(std::string("layer_id")); instanceId = enabledElement->Attribute(std::string("instance_id")); if (!instanceId || !layerId) { continue; } Layer* layer = map->getLayer(*layerId); if (layer) { Instance* instance = layer->getInstance(*instanceId); if (instance) { trigger->enableForInstance(instance); } } } for (const TiXmlElement* conditionElement = triggerElement->FirstChildElement("condition"); conditionElement; conditionElement = conditionElement->NextSiblingElement("condition")) { int conditionId = -1; conditionElement->QueryIntAttribute("id", &conditionId); if (conditionId != -1) { trigger->addTriggerCondition(static_cast(conditionId)); } } } } for (const TiXmlElement* cameraElement = root->FirstChildElement("camera"); cameraElement; cameraElement = cameraElement->NextSiblingElement("camera")) { const std::string* cameraId = cameraElement->Attribute(std::string("id")); const std::string* refLayerId = cameraElement->Attribute(std::string("ref_layer_id")); int refCellWidth = 0; int refCellHeight = 0; int success = cameraElement->QueryIntAttribute("ref_cell_width", &refCellWidth); success &= cameraElement->QueryIntAttribute("ref_cell_height", &refCellHeight); if (cameraId && refLayerId && success == TIXML_SUCCESS) { double tilt = 0.0; double zoom = 1.0; double rotation = 0.0; double zToY = 0.0; cameraElement->QueryDoubleAttribute("tilt", &tilt); cameraElement->QueryDoubleAttribute("zoom", &zoom); cameraElement->QueryDoubleAttribute("rotation", &rotation); success = cameraElement->QueryDoubleAttribute("ztoy", &zToY); const std::string* viewport = cameraElement->Attribute(std::string("viewport")); Layer* layer = NULL; try { layer = map->getLayer(*refLayerId); } catch (NotFound&) { // TODO - handle exception assert(false); } Camera* cam = NULL; if (layer) { if (viewport) { // parse out the viewport parameters IntVector viewportParameters = tokenize(*viewport, ','); // make sure the right number of viewport parameters were parsed if (viewportParameters.size() == 4) { Rect rect(viewportParameters[0], viewportParameters[1], viewportParameters[2], viewportParameters[3]); try { cam = map->addCamera(*cameraId, layer, rect); } catch (NameClash&) { // TODO - handle exception assert(false); } } } else { Rect rect(0, 0, m_renderBackend->getScreenWidth(), m_renderBackend->getScreenHeight()); try { cam = map->addCamera(*cameraId, layer, rect); } catch (NameClash&) { // TODO - handle exception assert(false); } } } if (cam) { cam->setCellImageDimensions(refCellWidth, refCellHeight); cam->setRotation(rotation); cam->setTilt(tilt); cam->setZoom(zoom); if (success == TIXML_SUCCESS) { cam->setZToY(zToY); } // active instance renderer for camera InstanceRenderer* instanceRenderer = InstanceRenderer::getInstance(cam); if (instanceRenderer) { instanceRenderer->activateAllLayers(map); } } } // increment % done counter m_percentDoneListener.incrementCount(); } } } } return map; } void MapLoader::setObjectLoader(const FIFE::ObjectLoaderPtr& objectLoader) { assert(objectLoader); m_objectLoader = objectLoader; } FIFE::ObjectLoaderPtr MapLoader::getObjectLoader() { return m_objectLoader; } void MapLoader::setAnimationLoader(const FIFE::AnimationLoaderPtr& animationLoader) { assert(animationLoader); m_objectLoader->setAnimationLoader(animationLoader); } FIFE::AnimationLoaderPtr MapLoader::getAnimationLoader() { if (m_objectLoader) { return m_objectLoader->getAnimationLoader(); } return FIFE::AnimationLoaderPtr(); } void MapLoader::setAtlasLoader(const FIFE::AtlasLoaderPtr& atlasLoader) { assert(atlasLoader); m_objectLoader->setAtlasLoader(atlasLoader); } FIFE::AtlasLoaderPtr MapLoader::getAtlasLoader() { if (m_objectLoader) { return m_objectLoader->getAtlasLoader(); } return FIFE::AtlasLoaderPtr(); } bool MapLoader::isLoadable(const std::string& filename) const { bfs::path mapPath(filename); TiXmlDocument mapFile; std::string mapFilename = mapPath.string(); try { RawData* data = m_vfs->open(mapFilename); if (data) { if (data->getDataLength() != 0) { mapFile.Parse(data->readString(data->getDataLength()).c_str()); if (mapFile.Error()) { return false; } const TiXmlElement* root = mapFile.RootElement(); if (root) { const std::string* loaderName = root->Attribute(std::string("loader")); // if the file does not specify a loader but was opened and parsed // correctly then we know we have a compatible extension so we will // attempt to load it, if it does specify a loader then the loader // name will be checked if (!loaderName || (loaderName && *loaderName == getLoaderName())) { return true; } } } // done with file delete the resource delete data; data = 0; } } catch (NotFound& e) { FL_ERR(_log, e.what()); return false; } return false; } void MapLoader::loadImportFile(const std::string& file, const std::string& directory) { if (!file.empty()) { bfs::path importFilePath(directory); importFilePath /= file; std::string importFileString = importFilePath.string(); if (m_objectLoader && m_objectLoader->getAtlasLoader() && m_objectLoader->getAtlasLoader()->isLoadable(importFileString)) { m_objectLoader->getAtlasLoader()->loadMultiple(importFileString); } if (m_objectLoader && m_objectLoader->getAnimationLoader() && m_objectLoader->getAnimationLoader()->isLoadable(importFileString)) { m_objectLoader->getAnimationLoader()->loadMultiple(importFileString); } if (m_objectLoader && m_objectLoader->isLoadable(importFileString)) { m_objectLoader->load(importFileString); } } } void MapLoader::loadImportDirectory(const std::string& directory) { if (!directory.empty()) { bfs::path importDirectory(directory); std::string importDirectoryString = importDirectory.string(); std::set files = m_vfs->listFiles(importDirectoryString); // load all xml files in the directory std::set::iterator iter; for (iter = files.begin(); iter != files.end(); ++iter) { // TODO - vtchill - may need a way to allow clients to load things other // than .xml and .zip files std::string ext = bfs::extension(*iter); if (ext == ".xml" || ext == ".zip") { loadImportFile(*iter, importDirectoryString); } } std::set nestedDirectories = m_vfs->listDirectories(importDirectoryString); for (iter = nestedDirectories.begin(); iter != nestedDirectories.end(); ++iter) { // do not attempt to load anything from a .svn directory if ((*iter).find(".svn") == std::string::npos) { loadImportDirectory(importDirectoryString + "/" + *iter); } } } } void MapLoader::addPercentDoneListener(PercentDoneListener* listener) { m_percentDoneListener.addListener(listener); } const std::string& MapLoader::getLoaderName() const { return m_loaderName; } MapLoader* createDefaultMapLoader(Model* model, VFS* vfs, ImageManager* imageManager, RenderBackend* renderBackend) { return (new MapLoader(model, vfs, imageManager, renderBackend)); } } fifengine-0.4.1/engine/core/loaders/native/map/maploader.h000066400000000000000000000110171304641216200234530ustar00rootroot00000000000000/************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_MAPLOADER_H_ #define FIFE_MAPLOADER_H_ // Standard C++ library includes #include #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "imaploader.h" #include "ianimationloader.h" #include "percentdonelistener.h" namespace FIFE { class Model; class Map; class VFS; class Layer; class ImageManager; class AnimationManager; class RenderBackend; class PercentDoneListener; class MapLoader : public IMapLoader { public: MapLoader(Model* model, VFS* vfs, ImageManager* imageManager, RenderBackend* renderBackend); ~MapLoader(); /** * @see IMapLoader::setObjectLoader */ void setObjectLoader(const FIFE::ObjectLoaderPtr& objectLoader); /** * @see IMapLoader::getObjectLoader */ FIFE::ObjectLoaderPtr getObjectLoader(); /** * @see IMapLoader::setAnimationLoader */ void setAnimationLoader(const FIFE::AnimationLoaderPtr& animationLoader); /** * @see IMapLoader::getAnimationLoader */ FIFE::AnimationLoaderPtr getAnimationLoader(); /** * @see IMapLoader::setAtlasLoader */ void setAtlasLoader(const FIFE::AtlasLoaderPtr& atlasLoader); /** * @see IMapLoader::getAtlasLoader */ FIFE::AtlasLoaderPtr getAtlasLoader(); /** * @see IMapLoader::isLoadable */ bool isLoadable(const std::string& filename) const; /** * @see IMapLoader::load */ Map* load(const std::string& filename); /** used to load an object file * if directory is provided then file is assumed relative to directory * if relativeToMap is true then the file/directory is assumed to be relative to * location of map file */ void loadImportFile(const std::string& file, const std::string& directory=""); /** used to load a directory of object files recursively * if relativeToMap is true then the directory is assumed to be relative to * location of map file */ void loadImportDirectory(const std::string& directory); /** * allows adding a listener to the map loader * for percent completed events */ void addPercentDoneListener(PercentDoneListener* listener); /** returns the loader name associated with this * map file loader, this will only be populated * after the load function is called */ const std::string& getLoaderName() const; private: Model* m_model; VFS* m_vfs; ImageManager* m_imageManager; AnimationManager* m_animationManager; ObjectLoaderPtr m_objectLoader; RenderBackend* m_renderBackend; PercentDoneCallback m_percentDoneListener; std::string m_loaderName; std::string m_mapDirectory; std::vector m_importDirectories; }; /** convenience function for creating the default fife map loader * deleting the object returned from this function is the * responsibility of the caller */ MapLoader* createDefaultMapLoader(Model* model, VFS* vfs, ImageManager* imageManager, RenderBackend* renderBackend); } #endif fifengine-0.4.1/engine/core/loaders/native/map/maploader.i000066400000000000000000000031311304641216200234520ustar00rootroot00000000000000/************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "loaders/native/map/maploader.h" %} %include "loaders/native/map/maploader.h" fifengine-0.4.1/engine/core/loaders/native/map/objectloader.cpp000066400000000000000000000517061304641216200245100ustar00rootroot00000000000000/************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/log/logger.h" #include "model/model.h" #include "model/metamodel/object.h" #include "model/metamodel/action.h" #include "vfs/fife_boost_filesystem.h" #include "vfs/vfs.h" #include "vfs/raw/rawdata.h" #include "view/visual.h" #include "video/imagemanager.h" #include "video/animationmanager.h" #include "atlasloader.h" #include "objectloader.h" #include "animationloader.h" namespace FIFE { /** Logger to use for this source file. * @relates Logger */ static Logger _log(LM_NATIVE_LOADERS); ObjectLoader::ObjectLoader(Model* model, VFS* vfs, ImageManager* imageManager, AnimationManager* animationManager, const AnimationLoaderPtr& animationLoader, const AtlasLoaderPtr& atlasLoader) : m_model(model), m_vfs(vfs), m_imageManager(imageManager), m_animationManager(animationManager) { assert(m_model && m_vfs && m_imageManager && m_animationManager); if (animationLoader) { m_animationLoader = animationLoader; } else { m_animationLoader.reset(new AnimationLoader(m_vfs, m_imageManager, m_animationManager)); } if (atlasLoader) { m_atlasLoader = atlasLoader; } else { m_atlasLoader.reset(new AtlasLoader(m_model, m_vfs, m_imageManager, m_animationManager)); } } ObjectLoader::~ObjectLoader() { } void ObjectLoader::setAnimationLoader(const AnimationLoaderPtr& animationLoader) { assert(animationLoader); m_animationLoader = animationLoader; } AnimationLoaderPtr ObjectLoader::getAnimationLoader() { return m_animationLoader; } void ObjectLoader::setAtlasLoader(const AtlasLoaderPtr& atlasLoader) { assert(atlasLoader); m_atlasLoader = atlasLoader; } AtlasLoaderPtr ObjectLoader::getAtlasLoader() { return m_atlasLoader; } bool ObjectLoader::isLoadable(const std::string& filename) const { bfs::path objectPath(filename); TiXmlDocument objectFile; try { RawData* data = m_vfs->open(objectPath.string()); if (data) { if (data->getDataLength() != 0) { objectFile.Parse(data->readString(data->getDataLength()).c_str()); if (objectFile.Error()) { std::ostringstream oss; oss << " Failed to load" << objectPath.string() << " : " << __FILE__ << " [" << __LINE__ << "]" << std::endl; FL_ERR(_log, oss.str()); return false; } } else { std::ostringstream oss; oss << " Failed to load" << objectPath.string() << " : " << __FILE__ << " [" << __LINE__ << "]" << std::endl; FL_ERR(_log, oss.str()); return false; } // done with data delete resource delete data; data = 0; } else { std::ostringstream oss; oss << " Failed to load" << objectPath.string() << " : " << __FILE__ << " [" << __LINE__ << "]" << std::endl; FL_ERR(_log, oss.str()); return false; } } catch (NotFound&) { std::ostringstream oss; oss << " Failed to load" << objectPath.string() << " : " << __FILE__ << " [" << __LINE__ << "]" << std::endl; FL_ERR(_log, oss.str()); // TODO - should we abort here // or rethrow the exception // or just keep going return false; } // if we get here then loading the file went well TiXmlElement* root = objectFile.RootElement(); if (root && root->ValueStr() == "assets") { if (root->FirstChildElement("object")) { return true; } } return false; } void ObjectLoader::load(const std::string& filename) { bfs::path objectPath(filename); TiXmlDocument objectFile; try { RawData* data = m_vfs->open(objectPath.string()); if (data) { if (data->getDataLength() != 0) { objectFile.Parse(data->readString(data->getDataLength()).c_str()); if (objectFile.Error()) { return; } } // done with data delete resource delete data; data = 0; } } catch (NotFound&) { std::ostringstream oss; oss << " Failed to load" << objectPath.string() << " : " << __FILE__ << " [" << __LINE__ << "]" << std::endl; FL_ERR(_log, oss.str()); // TODO - should we abort here // or rethrow the exception // or just keep going return; } std::string objectDirectory = ""; if (HasParentPath(objectPath)) { objectDirectory = GetParentPath(objectPath).string(); } // if we get here then loading the file went well TiXmlElement* root = objectFile.RootElement(); if (root) { for (const TiXmlElement *importElement = root->FirstChildElement("import"); importElement; importElement = importElement->NextSiblingElement("import")) { const std::string* importDir = importElement->Attribute(std::string("dir")); const std::string* importFile = importElement->Attribute(std::string("file")); std::string directory = ""; if (importDir) { directory = *importDir; } std::string file = ""; if (importFile) { file = *importFile; } if (importDir && !importFile) { bfs::path fullPath(objectDirectory); fullPath /= directory; loadImportDirectory(fullPath.string()); } else if (importFile) { bfs::path fullFilePath(file); bfs::path fullDirPath(directory); if (importDir) { fullDirPath = bfs::path(objectDirectory); fullDirPath /= directory; } else { fullFilePath = bfs::path(objectDirectory); fullFilePath /= file; } loadImportFile(fullFilePath.string(), fullDirPath.string()); } } } if (root && root->ValueStr() == "assets") { for (TiXmlElement* objectElem = root->FirstChildElement("object"); objectElem; objectElem = objectElem->NextSiblingElement("object")) { const std::string* objectId = objectElem->Attribute(std::string("id")); const std::string* namespaceId = objectElem->Attribute(std::string("namespace")); Object* obj = NULL; if (objectId && namespaceId) { const std::string* parentId = objectElem->Attribute(std::string("parent")); if (parentId) { Object* parent = m_model->getObject(*parentId, *namespaceId); if (parent) { try { obj = m_model->createObject(*objectId, *namespaceId, parent); } catch (NameClash&) { // TODO - handle exception assert(false); } } } else { // this will make sure the object has not already been loaded if (m_model->getObject(*objectId, *namespaceId) == NULL) { try { obj = m_model->createObject(*objectId, *namespaceId); } catch (NameClash &e) { FL_ERR(_log, e.what()); // TODO - handle exception assert(false); } } } } if (obj) { obj->setFilename(objectPath.string()); ObjectVisual::create(obj); int isBlocking = 0; objectElem->QueryIntAttribute("blocking", &isBlocking); obj->setBlocking(isBlocking!=0); int isStatic = 0; objectElem->QueryIntAttribute("static", &isStatic); obj->setStatic(isStatic!=0); const std::string* pather = objectElem->Attribute(std::string("pather")); if (pather) { obj->setPather(m_model->getPather(*pather)); } else { obj->setPather(m_model->getPather("RoutePather")); } const std::string* costId = objectElem->Attribute(std::string("cost_id")); if (costId) { obj->setCostId(*costId); double cost = 1.0; int success = objectElem->QueryDoubleAttribute("cost", &cost); if (success == TIXML_SUCCESS) { obj->setCost(cost); } } const std::string* areaId = objectElem->Attribute(std::string("area_id")); if (areaId) { obj->setArea(*areaId); } double speed = 1.0; int success = root->QueryDoubleAttribute("speed", &speed); if (success == TIXML_SUCCESS) { obj->setSpeed(speed); } // loop over all walkable areas for (TiXmlElement* walkableElement = objectElem->FirstChildElement("walkable_area"); walkableElement; walkableElement = walkableElement->NextSiblingElement("walkable_area")) { const std::string* walkableId = walkableElement->Attribute(std::string("id")); if (walkableId) { obj->addWalkableArea(*walkableId); } } int cellStack = 0; objectElem->QueryIntAttribute("cellstack", &cellStack); obj->setCellStackPosition(cellStack); double ax = 0; double ay = 0; double az = 0; int xRetVal = objectElem->QueryValueAttribute("anchor_x", &ax); int yRetVal = objectElem->QueryValueAttribute("anchor_y", &ay); if (xRetVal == TIXML_SUCCESS && yRetVal == TIXML_SUCCESS) { obj->setRotationAnchor(ExactModelCoordinate(ax, ay, az)); } int isRestrictedRotation = 0; objectElem->QueryIntAttribute("restricted_rotation", &isRestrictedRotation); obj->setRestrictedRotation(isRestrictedRotation!=0); int zStep = 0; int zRetVal = objectElem->QueryIntAttribute("z_step_limit", &zStep); if (zRetVal == TIXML_SUCCESS) { obj->setZStepRange(zStep); } // loop over all multi parts for (TiXmlElement* multiElement = objectElem->FirstChildElement("multipart"); multiElement; multiElement = multiElement->NextSiblingElement("multipart")) { const std::string* partId = multiElement->Attribute(std::string("id")); if (partId) { obj->addMultiPartId(*partId); } for (TiXmlElement* multiRotation = multiElement->FirstChildElement("rotation"); multiRotation; multiRotation = multiRotation->NextSiblingElement("rotation")) { int rotation = 0; multiRotation->QueryIntAttribute("rot", &rotation); // relative coordinates which are used to position the object for (TiXmlElement* multiCoordinate = multiRotation->FirstChildElement("occupied_coord"); multiCoordinate; multiCoordinate = multiCoordinate->NextSiblingElement("occupied_coord")) { int x = 0; int y = 0; xRetVal = multiCoordinate->QueryValueAttribute("x", &x); yRetVal = multiCoordinate->QueryValueAttribute("y", &y); if (xRetVal == TIXML_SUCCESS && yRetVal == TIXML_SUCCESS) { int z = 0; multiCoordinate->QueryIntAttribute("z", &z); obj->addMultiPartCoordinate(rotation, ModelCoordinate(x, y, z)); } } } } // loop over all image tags for (TiXmlElement* imageElement = objectElem->FirstChildElement("image"); imageElement; imageElement = imageElement->NextSiblingElement("image")) { const std::string* sourceId = imageElement->Attribute(std::string("source")); if (sourceId) { bfs::path imagePath(filename); if (HasParentPath(imagePath)) { imagePath = GetParentPath(imagePath) / *sourceId; } else { imagePath = bfs::path(*sourceId); } if (!bfs::exists(imagePath)) { imagePath= bfs::path(*sourceId); } ImagePtr imagePtr; if(!m_imageManager->exists(imagePath.string())) { imagePtr = m_imageManager->create(imagePath.string()); } else { imagePtr = m_imageManager->getPtr(imagePath.string()); } if (imagePtr) { int xOffset = 0; int success = imageElement->QueryIntAttribute("x_offset", &xOffset); if (success == TIXML_SUCCESS) { imagePtr->setXShift(xOffset); } int yOffset = 0; success = imageElement->QueryIntAttribute("y_offset", &yOffset); if (success == TIXML_SUCCESS) { imagePtr->setYShift(yOffset); } int direction = 0; success = imageElement->QueryIntAttribute("direction", &direction); if (success == TIXML_SUCCESS) { ObjectVisual* objVisual = obj->getVisual(); if (objVisual) { objVisual->addStaticImage(direction, static_cast(imagePtr->getHandle())); } } } } } for (TiXmlElement* actionElement = objectElem->FirstChildElement("action"); actionElement; actionElement = actionElement->NextSiblingElement("action")) { const std::string* actionId = actionElement->Attribute(std::string("id")); if (actionId) { int isDefault = 0; actionElement->QueryIntAttribute("default", &isDefault); Action* action = obj->createAction(*actionId, (isDefault != 0)); ActionVisual::create(action); for (TiXmlElement* animElement = actionElement->FirstChildElement("animation"); animElement; animElement = animElement->NextSiblingElement("animation")) { // Fetch already created animation const std::string* animationId = animElement->Attribute(std::string("animation_id")); if (animationId) { AnimationPtr animation = m_animationManager->getPtr(*animationId); if (animation) { ActionVisual* actionVisual = action->getVisual(); if (actionVisual) { actionVisual->addAnimation(animation->getDirection(), animation); action->setDuration(animation->getDuration()); continue; } } } // Create animated spritesheet const std::string* sourceId = animElement->Attribute(std::string("atlas")); if (sourceId) { bfs::path atlasPath(filename); if (HasParentPath(atlasPath)) { atlasPath = GetParentPath(atlasPath) / *sourceId; } else { atlasPath = bfs::path(*sourceId); } ImagePtr atlasImgPtr; // we need to load this since its shared image if (!m_imageManager->exists(atlasPath.string())) { atlasImgPtr = m_imageManager->create(atlasPath.string()); } else { atlasImgPtr = m_imageManager->getPtr(atlasPath.string()); } int animFrames = 0; int animDelay = 0; int animXoffset = 0; int animYoffset = 0; int frameWidth = 0; int frameHeight = 0; animElement->QueryValueAttribute("width", &frameWidth); animElement->QueryValueAttribute("height", &frameHeight); animElement->QueryValueAttribute("frames", &animFrames); animElement->QueryValueAttribute("delay", &animDelay); animElement->QueryValueAttribute("x_offset", &animXoffset); animElement->QueryValueAttribute("y_offset", &animYoffset); int nDir = 0; for (TiXmlElement* dirElement = animElement->FirstChildElement("direction"); dirElement; dirElement = dirElement->NextSiblingElement("direction")) { int dir; dirElement->QueryIntAttribute("dir", &dir); static char tmp[64]; snprintf(tmp, 64, "%03d", dir); std::string aniId = *objectId + ":" + *actionId + ":" + std::string(tmp); AnimationPtr animation = m_animationManager->get(aniId); int frames; int success = dirElement->QueryValueAttribute("frames", &frames); if(success != TIXML_SUCCESS) { frames = animFrames; } int delay; success = dirElement->QueryValueAttribute("delay", &delay); if(success != TIXML_SUCCESS) { delay = animDelay; } int xoffset; success = dirElement->QueryValueAttribute("x_offset", &xoffset); if(success != TIXML_SUCCESS) { xoffset = animXoffset; } int yoffset; success = dirElement->QueryValueAttribute("y_offset", &yoffset); if(success != TIXML_SUCCESS) { yoffset = animYoffset; } int action_frame; success = dirElement->QueryValueAttribute("action_frame", &action_frame); if(success == TIXML_SUCCESS) { animation->setActionFrame(action_frame); } for (int iframe = 0; iframe < frames; ++iframe) { static char tmpBuf[64]; snprintf(tmpBuf, 64, "%03d:%04d", dir, iframe); std::string frameId = *objectId + ":" + *actionId + ":" + std::string(tmpBuf); Rect region(frameWidth * iframe, frameHeight * nDir, frameWidth, frameHeight); ImagePtr framePtr; if (!m_imageManager->exists(frameId)) { framePtr = m_imageManager->create(frameId); framePtr->useSharedImage(atlasImgPtr, region); framePtr->setXShift(xoffset); framePtr->setYShift(yoffset); } else { framePtr = m_imageManager->getPtr(frameId); } animation->addFrame(framePtr, delay); } ActionVisual* actionVisual = action->getVisual(); if(actionVisual) { actionVisual->addAnimation(dir, animation); action->setDuration(animation->getDuration()); } ++nDir; } continue; } // Load animation.xml with frames sourceId = animElement->Attribute(std::string("source")); if (sourceId) { int direction = 0; int success = animElement->QueryValueAttribute("direction", &direction); bfs::path animPath(filename); if (HasParentPath(animPath)) { animPath = GetParentPath(animPath) / *sourceId; } else { animPath = bfs::path(*sourceId); } AnimationPtr animation; if (m_animationLoader && m_animationLoader->isLoadable(animPath.string())) { animation = m_animationLoader->load(animPath.string()); } if (action && animation) { if (success != TIXML_SUCCESS) { direction = animation->getDirection(); } ActionVisual* actionVisual = action->getVisual(); if (actionVisual) { actionVisual->addAnimation(direction, animation); action->setDuration(animation->getDuration()); } } } } } } } } } } void ObjectLoader::loadImportFile(const std::string& file, const std::string& directory) { if (!file.empty()) { bfs::path importFilePath(directory); importFilePath /= file; std::string importFileString = importFilePath.string(); if (m_atlasLoader && m_atlasLoader->isLoadable(importFileString)) { m_atlasLoader->loadMultiple(importFileString); } if (m_animationLoader && m_animationLoader->isLoadable(importFileString)) { m_animationLoader->loadMultiple(importFileString); } if (isLoadable(importFileString)) { load(importFileString); } } } void ObjectLoader::loadImportDirectory(const std::string& directory) { if (!directory.empty()) { bfs::path importDirectory(directory); std::string importDirectoryString = importDirectory.string(); std::set files = m_vfs->listFiles(importDirectoryString); // load all xml files in the directory std::set::iterator iter; for (iter = files.begin(); iter != files.end(); ++iter) { // TODO - vtchill - may need a way to allow clients to load things other // than .xml and .zip files std::string ext = bfs::extension(*iter); if (ext == ".xml" || ext == ".zip") { loadImportFile(*iter, importDirectoryString); } } std::set nestedDirectories = m_vfs->listDirectories(importDirectoryString); for (iter = nestedDirectories.begin(); iter != nestedDirectories.end(); ++iter) { // do not attempt to load anything from a .svn directory if ((*iter).find(".svn") == std::string::npos) { loadImportDirectory(importDirectoryString + "/" + *iter); } } } } } fifengine-0.4.1/engine/core/loaders/native/map/objectloader.h000066400000000000000000000070051304641216200241460ustar00rootroot00000000000000/************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_OBJECT_LOADER_H_ #define FIFE_OBJECT_LOADER_H_ // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/sharedptr.h" #include "iobjectloader.h" #include "ianimationloader.h" #include "iatlasloader.h" namespace FIFE { class Model; class VFS; class ImageManager; class AnimationManager; class ObjectLoader : public IObjectLoader { public: ObjectLoader(Model* model, VFS* vfs, ImageManager* imageManager, AnimationManager* animationManager, const AnimationLoaderPtr& animationLoader=AnimationLoaderPtr(), const AtlasLoaderPtr& atlasLoader=AtlasLoaderPtr()); ~ObjectLoader(); /** * @see IObjectLoader::setAnimationLoader */ virtual void setAnimationLoader(const AnimationLoaderPtr& animationLoader); /** * @see IObjectLoader::getAnimationLoader */ virtual AnimationLoaderPtr getAnimationLoader(); /** * @see IObjectLoader::setAtlasLoader */ virtual void setAtlasLoader(const AtlasLoaderPtr& atlasLoader); /** * @see IObjectLoader::getAtlasLoader */ virtual AtlasLoaderPtr getAtlasLoader(); /** * @see IObjectLoader::isLoadable */ virtual bool isLoadable(const std::string& filename) const; /** * @see IObjectLoader::load */ virtual void load(const std::string& filename); /** used to load an object, atlas or animation file * if directory is provided then file is assumed relative to directory */ void loadImportFile(const std::string& file, const std::string& directory=""); /** used to load a directory of object, atlas or animation files recursively */ void loadImportDirectory(const std::string& directory); private: Model* m_model; VFS* m_vfs; ImageManager* m_imageManager; AnimationManager* m_animationManager; AnimationLoaderPtr m_animationLoader; AtlasLoaderPtr m_atlasLoader; }; } #endiffifengine-0.4.1/engine/core/loaders/native/map/percentdonelistener.cpp000066400000000000000000000077421304641216200261300ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "percentdonelistener.h" namespace FIFE { const uint32_t minPercent = 0; const uint32_t maxPercent = 100; PercentDoneListener::~PercentDoneListener() { } PercentDoneCallback::PercentDoneCallback() : m_totalElements(0), m_percent(1), m_numberOfEvents(0), m_count(0) { } PercentDoneCallback::~PercentDoneCallback() { } void PercentDoneCallback::setTotalNumberOfElements(unsigned int totalElements) { m_totalElements = totalElements; } void PercentDoneCallback::setPercentDoneInterval(unsigned int percent) { m_percent = percent; } void PercentDoneCallback::incrementCount() { if (m_count == minPercent) { // go ahead and fire event just to tell clients we are starting fireEvent(minPercent); } // increment count ++m_count; // only go through the effort of figuring out percent done if we have listeners // and we have a total number of elements greater than 0 if (!m_listeners.empty() && m_totalElements > 0) { if (m_count >= m_totalElements) { fireEvent(maxPercent); } else { // calculate percent done uint32_t percentDone = static_cast((static_cast(m_count)/m_totalElements) * maxPercent); if ((percentDone % m_percent) == 0 && (percentDone != m_percent * m_numberOfEvents)) { // keep track of how many times event has occurred ++m_numberOfEvents; // alert listeners of event fireEvent(m_percent * m_numberOfEvents); } } } } void PercentDoneCallback::reset() { m_totalElements = 0; m_count = 0; m_numberOfEvents = 0; // send event to alert of the reset fireEvent(minPercent); } void PercentDoneCallback::addListener(PercentDoneListener* listener) { if (listener) { m_listeners.push_back(listener); } } void PercentDoneCallback::removeListener(PercentDoneListener* listener) { ListenerContainer::iterator iter = m_listeners.begin(); for ( ; iter != m_listeners.end(); ++iter) { if (*iter == listener) { m_listeners.erase(iter); break; } } } void PercentDoneCallback::fireEvent(uint32_t percent) { ListenerContainer::iterator iter = m_listeners.begin(); for ( ; iter != m_listeners.end(); ++iter) { (*iter)->OnEvent(percent); } } } fifengine-0.4.1/engine/core/loaders/native/map/percentdonelistener.h000066400000000000000000000052341304641216200255670ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_PERCENT_DONE_LISTENER_H #define FIFE_PERCENT_DONE_LISTENER_H // Standard C++ library includes #include // 3rd party library includes #include "util/base/fife_stdint.h" // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder namespace FIFE { class PercentDoneListener { public: virtual ~PercentDoneListener(); virtual void OnEvent(unsigned int percentDone) = 0; }; class PercentDoneCallback { public: PercentDoneCallback(); virtual ~PercentDoneCallback(); void setTotalNumberOfElements(unsigned int totalElements); void setPercentDoneInterval(unsigned int percent); void incrementCount(); void reset(); void addListener(PercentDoneListener* listener); void removeListener(PercentDoneListener* listener); private: void fireEvent(uint32_t percent); private: uint32_t m_totalElements; uint32_t m_percent; uint32_t m_numberOfEvents; uint32_t m_count; typedef std::vector ListenerContainer; ListenerContainer m_listeners; }; } #endif fifengine-0.4.1/engine/core/loaders/native/map/percentdonelistener.i000066400000000000000000000033701304641216200255670ustar00rootroot00000000000000/************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "loaders/native/map/percentdonelistener.h" %} namespace FIFE { %feature("director") PercentDoneListener; class PercentDoneListener { public: virtual ~PercentDoneListener(); virtual void OnEvent(unsigned int percentDone) = 0; }; }fifengine-0.4.1/engine/core/loaders/native/video/000077500000000000000000000000001304641216200216675ustar00rootroot00000000000000fifengine-0.4.1/engine/core/loaders/native/video/imageloader.cpp000066400000000000000000000101141304641216200246410ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes #include #include #include #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "controller/engine.h" #include "util/base/exception.h" #include "util/resource/resource.h" #include "vfs/raw/rawdata.h" #include "vfs/vfs.h" #include "video/renderbackend.h" #include "video/image.h" #include "imageloader.h" namespace FIFE { void ImageLoader::load(IResource* res) { VFS* vfs = VFS::instance(); Image* img = dynamic_cast(res); //Have to save the images x and y shift or it gets lost when it's //loaded again. int32_t xShiftSave = img->getXShift(); int32_t yShiftSave = img->getYShift(); if(!img->isSharedImage()) { const std::string& filename = img->getName(); boost::scoped_ptr data (vfs->open(filename)); size_t datalen = data->getDataLength(); boost::scoped_array darray(new uint8_t[datalen]); data->readInto(darray.get(), datalen); SDL_RWops* rwops = SDL_RWFromConstMem(darray.get(), static_cast(datalen)); SDL_Surface* surface = IMG_Load_RW(rwops, false); if (!surface) { throw SDLException(std::string("Fatal Error when loading image into a SDL_Surface: ") + SDL_GetError()); } RenderBackend* rb = RenderBackend::instance(); // in case of SDL we don't need to convert the surface if (rb->getName() == "SDL") { img->setSurface(surface); // in case of OpenGL we need a 32bit surface } else { SDL_PixelFormat dst_format = rb->getPixelFormat(); SDL_PixelFormat src_format = *surface->format; uint8_t dstbits = dst_format.BitsPerPixel; uint8_t srcbits = src_format.BitsPerPixel; if (srcbits != 32 || dst_format.Rmask != src_format.Rmask || dst_format.Gmask != src_format.Gmask || dst_format.Bmask != src_format.Bmask || dst_format.Amask != src_format.Amask) { dst_format.BitsPerPixel = 32; SDL_Surface* conv = SDL_ConvertSurface(surface, &dst_format, 0); dst_format.BitsPerPixel = dstbits; if (!conv) { throw SDLException(std::string("Fatal Error when converting surface to the screen format: ") + SDL_GetError()); } img->setSurface(conv); SDL_FreeSurface(surface); } else { img->setSurface(surface); } } SDL_FreeRW(rwops); } //restore saved x and y shifts img->setXShift(xShiftSave); img->setYShift(yShiftSave); } } //FIFE fifengine-0.4.1/engine/core/loaders/native/video/imageloader.h000066400000000000000000000041421304641216200243120ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_VIDEO_LOADERS_IMAGE_PROVIDER_H #define FIFE_VIDEO_LOADERS_IMAGE_PROVIDER_H // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/resource/resource.h" namespace FIFE { /** ImageLoader for some basic formats like jpeg, png etc. */ class ImageLoader : public IResourceLoader { public: ImageLoader() {} virtual void load(IResource* res); }; } #endif fifengine-0.4.1/engine/core/loaders/native/video/resourceanimationloader.cpp000066400000000000000000000043701304641216200273150ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2013 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/exception.h" #include "video/animation.h" #include "resourceanimationloader.h" namespace FIFE { void ResourceAnimationLoader::load(IResource* res) { Animation* anim = dynamic_cast(res); if (anim) { std::vector frames = anim->getFrames(); for (std::vector::iterator it = frames.begin(); it != frames.end(); ++it) { if ((*it)->getState() != IResource::RES_LOADED) { (*it)->load(); } } } } } //FIFE fifengine-0.4.1/engine/core/loaders/native/video/resourceanimationloader.h000066400000000000000000000041441304641216200267610ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2013 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_VIDEO_LOADERS_ANIMATION_PROVIDER_H #define FIFE_VIDEO_LOADERS_ANIMATION_PROVIDER_H // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/resource/resource.h" namespace FIFE { /** ResourceAnimationLoader. */ class ResourceAnimationLoader : public IResourceLoader { public: ResourceAnimationLoader() {} virtual void load(IResource* res); }; } #endif fifengine-0.4.1/engine/core/model/000077500000000000000000000000001304641216200167425ustar00rootroot00000000000000fifengine-0.4.1/engine/core/model/metamodel/000077500000000000000000000000001304641216200207115ustar00rootroot00000000000000fifengine-0.4.1/engine/core/model/metamodel/action.cpp000066400000000000000000000040141304641216200226710ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/exception.h" #include "action.h" namespace FIFE { Action::Action(const std::string& identifier) : m_id(identifier), m_duration(0), m_visual(NULL) { } Action::~Action() { delete m_visual; } } fifengine-0.4.1/engine/core/model/metamodel/action.h000066400000000000000000000057311304641216200223450ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_MODEL_METAMODEL_ACTION_H #define FIFE_MODEL_METAMODEL_ACTION_H // Standard C++ library includes #include #include #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/math/angles.h" #include "util/base/fifeclass.h" #include "ivisual.h" namespace FIFE { class Action : public FifeClass { public: /** Constructor * Actions are created by calling addAction from object, thus * this method should really be called only by object or test code */ Action(const std::string& identifier); /** Destructor */ virtual ~Action(); /** Get the identifier for this action. */ const std::string& getId() { return m_id; } /** Sets the duration for this action */ void setDuration(uint32_t duration) { m_duration = duration; } /** Gets the duration of this action */ uint32_t getDuration() { return m_duration; } /** Sets visualization to be used. Transfers ownership. */ void adoptVisual(IVisual* visual) { m_visual = visual; } /** Gets used visualization */ template T* getVisual() const { return reinterpret_cast(m_visual); } private: std::string m_id; // duration of the action uint32_t m_duration; // visualization for action IVisual* m_visual; }; } #endif fifengine-0.4.1/engine/core/model/metamodel/action.i000066400000000000000000000036671304641216200223540ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "model/metamodel/action.h" %} %include "util/base/utilbase.i" %include "model/metamodel/ivisual.i" namespace FIFE { class Action : public FifeClass { public: Action(const std::string& identifier); virtual ~Action(); const std::string& getId(); void adoptVisual(IVisual* visual); template T* getVisual() const; void setDuration(uint32_t duration); uint32_t getDuration(); }; } fifengine-0.4.1/engine/core/model/metamodel/grids/000077500000000000000000000000001304641216200220215ustar00rootroot00000000000000fifengine-0.4.1/engine/core/model/metamodel/grids/cellgrid.cpp000066400000000000000000000072341304641216200243200ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/log/logger.h" #include "cellgrid.h" namespace FIFE { static Logger _log(LM_CELLGRID); CellGrid::CellGrid(): FifeClass(), m_matrix(), m_inverse_matrix(), m_xshift(0), m_yshift(0), m_zshift(0), m_xscale(1), m_yscale(1), m_zscale(1), m_rotation(0), m_allow_diagonals(false) { updateMatrices(); } CellGrid::~CellGrid() { } void CellGrid::getAccessibleCoordinates(const ModelCoordinate& curpos, std::vector& coordinates) { coordinates.clear(); for (int32_t x = curpos.x - 1; x <= curpos.x + 1; x++) { for (int32_t y = curpos.y - 1; y <= curpos.y + 1; y++) { ModelCoordinate pt(x, y); if (isAccessible(curpos, pt)) { coordinates.push_back(pt); } } } } void CellGrid::updateMatrices() { m_matrix.loadRotate(m_rotation, 0.0, 0.0, 1.0); m_matrix.applyScale(m_xscale, m_yscale, m_zscale); m_matrix.applyTranslate(m_xshift, m_yshift, m_zshift); m_inverse_matrix = m_matrix.inverse(); } ExactModelCoordinate CellGrid::toMapCoordinates(const ModelCoordinate& layer_coords) { return toMapCoordinates(intPt2doublePt(layer_coords)); } int32_t CellGrid::orientation(const ExactModelCoordinate& pt, const ExactModelCoordinate& pt1, const ExactModelCoordinate& pt2) { double o = (pt2.x - pt1.x) * (pt.y - pt1.y) - (pt.x - pt1.x) * (pt2.y - pt1.y); if (o > 0.0) { return 1; } else if (o < 0.0) { return -1; } return 0; } bool CellGrid::ptInTriangle(const ExactModelCoordinate& pt, const ExactModelCoordinate& pt1, const ExactModelCoordinate& pt2, const ExactModelCoordinate& pt3) { double o1 = orientation(pt1, pt2, pt); double o2 = orientation(pt2, pt3, pt); double o3 = orientation(pt3, pt1, pt); bool result = (o1 == o2) && (o2 == o3); FL_DBG(_log, LMsg("ptInTriangle, pt=") << pt << " pt1=" << pt1 << " pt2=" << pt2 << " pt3=" << pt3 << " in=" << result); return result; } } fifengine-0.4.1/engine/core/model/metamodel/grids/cellgrid.h000066400000000000000000000221271304641216200237630ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_MODEL_GRIDS_CELLGRID_H #define FIFE_MODEL_GRIDS_CELLGRID_H // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "model/metamodel/modelcoords.h" #include "util/math/matrix.h" #include "util/base/fifeclass.h" #include "util/base/fife_stdint.h" namespace FIFE { class CellGrid: public FifeClass { public: /** Constructor */ CellGrid(); /** Destructor */ virtual ~CellGrid(); /** Gets the coordinates that are accesible from given point * only cells adjacent to given cell are considered in the evaluation * @param curpos position (coordinates) to evaluate * @param coordinates accessible coordinates */ void getAccessibleCoordinates(const ModelCoordinate& curpos, std::vector& coordinates); /** Type of cellgrid */ virtual const std::string& getType() const = 0; /** Name of the cellgrid (DEPRECATED? -jwt) */ virtual const std::string& getName() const = 0; /** Tells if given target point is accessible from curpos * only cells adjacent to curpos are considered in the evaluation * @param curpos position (coordinates) to evaluate * @param target target coordinate to check * @return true, if target is accessible from curpos, false otherwise */ virtual bool isAccessible(const ModelCoordinate& curpos, const ModelCoordinate& target) = 0; /** Returns *distance* const from curpos to target point * only cells adjacent to curpos are considered in the evaluation * @param curpos position (coordinates) to evaluate * @param target target coordinate to check * @return distance cost from curpos to target */ virtual double getAdjacentCost(const ModelCoordinate& curpos, const ModelCoordinate& target) = 0; /** Returns *distance* const from curpos to target point * @param curpos position (coordinates) to evaluate * @param target target coordinate to check * @return distance cost from curpos to target */ virtual double getHeuristicCost(const ModelCoordinate& curpos, const ModelCoordinate& target) = 0; /** Gets the count of sides for a single cell * @return count of sides for a single cell */ virtual uint32_t getCellSideCount() const = 0; /** Transforms given point from layer coordinates to map coordinates * @return point in map coordinates */ ExactModelCoordinate toMapCoordinates(const ModelCoordinate& layer_coords); /** Transforms given point from layer coordinates to map coordinates * @return point in map coordinates */ virtual ExactModelCoordinate toMapCoordinates(const ExactModelCoordinate& layer_coords) = 0; /** Transforms given point from map coordinates to layer coordinates * @return point in layer coordinates */ virtual ModelCoordinate toLayerCoordinates(const ExactModelCoordinate& map_coord) = 0; /** Transforms given point from map coordinates to layer coordinates * @return point in layer coordinates */ virtual ExactModelCoordinate toExactLayerCoordinates(const ExactModelCoordinate& map_coord) = 0; /** Transforms given point from exact layer coordinates to cell precision layer coordinates * @return point in layer coordinates */ virtual ModelCoordinate toLayerCoordinatesFromExactLayerCoordinates(const ExactModelCoordinate& exact_layer_coords) = 0; /** Fills given point vector with vertices from selected cell * @param vtx vertices for given cell * @param cell cell to get vertices from */ virtual void getVertices(std::vector& vtx, const ModelCoordinate& cell) = 0; /** Returns point vector with coordinates for a multi object * @param position The center position * @param orig The vector with the original coordinates from object * @param reverse If true the orig coordinates are subtracted otherwise they are added */ virtual std::vector toMultiCoordinates(const ModelCoordinate& position, const std::vector& orig, bool reverse = false) = 0; /** Returns point vector with coordinates for a line from start to end. * @param start The start position * @param end The end position * @return vector with points */ virtual std::vector getCoordinatesInLine(const ModelCoordinate& start, const ModelCoordinate& end) = 0; /** Set the cellgrid x shift * @param xshift The shift in map coords */ void setXShift(const double& xshift) { m_xshift = xshift; updateMatrices(); } /** Get the cellgrid x shift * @return The x shift */ const double getXShift() const { return m_xshift; } /** Set the cellgrid y shift * @param yshift The shift in map coords */ void setYShift(const double yshift) { m_yshift = yshift; updateMatrices(); } /** Get the cellgrid y shift * @return The y shift in map coords */ const double getYShift() const { return m_yshift; } /** Set the cellgrid z shift * @param zshift The shift in map coords */ void setZShift(const double zshift) { m_zshift = zshift; updateMatrices(); } /** Get the cellgrid z shift * @return The z shift in map coords */ const double getZShift() const { return m_zshift; } /** Set the cellgrid x-scaling * @param scale The x-scale of cellgrid */ void setXScale(const double scale) { m_xscale = scale; updateMatrices(); } /** Set the cellgrid y-scaling * @param scale The y-scale of cellgrid */ void setYScale(const double scale) { m_yscale = scale; updateMatrices(); } /** Set the cellgrid z-scaling * @param scale The z-scale of cellgrid */ void setZScale(const double scale) { m_zscale = scale; updateMatrices(); } /** Get the cellgrid x-scaling * @return The x-scale of cellgrid */ const double getXScale() const { return m_xscale; } /** Get the cellgrid y-scaling * @return The y-scale of cellgrid */ const double getYScale() const { return m_yscale; } /** Get the cellgrid z-scaling * @return The z-scale of cellgrid */ const double getZScale() const { return m_zscale; } /** Set the cellgrid rotation * @param rotation The rotation of the cellgrid */ void setRotation(const double rotation) { m_rotation = rotation; updateMatrices(); } /** Get the cellgrid rotation * @return rotation The rotation of the cellgrid */ const double getRotation() const { return m_rotation; } /** Set whether diagonal cell access is allowed * @param allow_diagonals True if diagonal access allowed, false if only cell edges allowed */ void setAllowDiagonals(const bool allow_diagonals) { m_allow_diagonals = allow_diagonals; } /** Get whether diagonal cell access is allowed * @return True if diagonal access allowed, false if only cell edges allowed */ const bool getAllowDiagonals() const { return m_allow_diagonals; } /** Returns clone of this cellgrid */ virtual CellGrid* clone() = 0; protected: void updateMatrices(); bool ptInTriangle(const ExactModelCoordinate& pt, const ExactModelCoordinate& pt1, const ExactModelCoordinate& pt2, const ExactModelCoordinate& pt3); DoubleMatrix m_matrix; DoubleMatrix m_inverse_matrix; double m_xshift; double m_yshift; double m_zshift; double m_xscale; double m_yscale; double m_zscale; double m_rotation; bool m_allow_diagonals; private: int32_t orientation(const ExactModelCoordinate& pt, const ExactModelCoordinate& pt1, const ExactModelCoordinate& pt2); }; } #endif fifengine-0.4.1/engine/core/model/metamodel/grids/cellgrids.i000066400000000000000000000131541304641216200241470ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "model/metamodel/grids/cellgrid.h" #include "model/metamodel/grids/hexgrid.h" #include "model/metamodel/grids/squaregrid.h" %} %include "model/metamodel/modelcoords.i" namespace std { %template(ModelCoordinateVector) vector; %template(ExactModelCoordinateVector) vector; } namespace FIFE { %apply std::vector &OUTPUT { std::vector& vtx }; class CellGrid { public: CellGrid(); virtual ~CellGrid(); void getAccessibleCoordinates(const ModelCoordinate& curpos, std::vector& coordinates); virtual const std::string& getType() const = 0; virtual const std::string& getName() const = 0; virtual bool isAccessible(const ModelCoordinate& curpos, const ModelCoordinate& target) = 0; virtual double getAdjacentCost(const ModelCoordinate& curpos, const ModelCoordinate& target) = 0; virtual double getHeuristicCost(const ModelCoordinate& curpos, const ModelCoordinate& target) = 0; virtual uint32_t getCellSideCount() const = 0; ExactModelCoordinate toMapCoordinates(const ModelCoordinate& layer_coords); virtual ExactModelCoordinate toMapCoordinates(const ExactModelCoordinate& layer_coords) = 0; virtual ModelCoordinate toLayerCoordinates(const ExactModelCoordinate& map_coord) = 0; virtual ExactModelCoordinate toExactLayerCoordinates(const ExactModelCoordinate& map_coord) = 0; virtual ModelCoordinate toLayerCoordinatesFromExactLayerCoordinates(const ExactModelCoordinate& exact_layer_coords) = 0; virtual void getVertices(std::vector& vtx, const ModelCoordinate& cell) = 0; virtual std::vector getCoordinatesInLine(const ModelCoordinate& start, const ModelCoordinate& end) = 0; void setXShift(const double& xshift); const double getXShift() const; void setYShift(const double yshift); const double getYShift() const; void setZShift(const double zshift); const double getZShift() const; void setXScale(const double scale); void setYScale(const double scale); void setZScale(const double scale); const double getXScale() const; const double getYScale() const; const double getZScale() const; void setRotation(const double rotation); const double getRotation() const; }; class HexGrid: public CellGrid { public: HexGrid(); virtual ~HexGrid(); bool isAccessible(const ModelCoordinate& curpos, const ModelCoordinate& target); const std::string& getType() const; const std::string& getName() const; double getAdjacentCost(const ModelCoordinate& curpos, const ModelCoordinate& target); uint32_t getCellSideCount() const { return 6; } ExactModelCoordinate toMapCoordinates(const ExactModelCoordinate& layer_coords); ModelCoordinate toLayerCoordinates(const ExactModelCoordinate& map_coord); ExactModelCoordinate toExactLayerCoordinates(const ExactModelCoordinate& map_coord); ModelCoordinate toLayerCoordinatesFromExactLayerCoordinates(const ExactModelCoordinate& exact_layer_coords); void getVertices(std::vector& vtx, const ModelCoordinate& cell); std::vector getCoordinatesInLine(const ModelCoordinate& start, const ModelCoordinate& end); }; class SquareGrid: public CellGrid { public: SquareGrid(); virtual ~SquareGrid(); const std::string& getType() const; const std::string& getName() const; bool isAccessible(const ModelCoordinate& curpos, const ModelCoordinate& target); double getAdjacentCost(const ModelCoordinate& curpos, const ModelCoordinate& target); uint32_t getCellSideCount() const { return 4; } ExactModelCoordinate toMapCoordinates(const ExactModelCoordinate& layer_coords); ModelCoordinate toLayerCoordinates(const ExactModelCoordinate& map_coord); ExactModelCoordinate toExactLayerCoordinates(const ExactModelCoordinate& map_coord); ModelCoordinate toLayerCoordinatesFromExactLayerCoordinates(const ExactModelCoordinate& exact_layer_coords); void getVertices(std::vector& vtx, const ModelCoordinate& cell); std::vector getCoordinatesInLine(const ModelCoordinate& start, const ModelCoordinate& end); }; } fifengine-0.4.1/engine/core/model/metamodel/grids/hexgrid.cpp000066400000000000000000000304011304641216200241550ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/math/fife_math.h" #include "util/log/logger.h" #include "hexgrid.h" namespace FIFE { static Logger _log(LM_HEXGRID); static const double HEX_WIDTH = 1; static const double HEX_TO_EDGE = HEX_WIDTH / 2; static const double HEX_TO_CORNER = 0.5 / Mathd::Cos(Mathd::pi() / 6); static const double HEX_EDGE_HALF = HEX_TO_CORNER * Mathd::Sin(Mathd::pi() / 6); static const double VERTICAL_MULTIP = Mathd::Sqrt(HEX_WIDTH*HEX_WIDTH - HEX_TO_EDGE*HEX_TO_EDGE); static const double VERTICAL_MULTIP_INV = 1 / VERTICAL_MULTIP; static const double HEX_EDGE_GRADIENT = 1 / Mathd::Sqrt(3); HexGrid::HexGrid(): CellGrid() { FL_DBG(_log, "Constructing new HexGrid"); FL_DBG(_log, LMsg("HEX_WIDTH ") << HEX_WIDTH); FL_DBG(_log, LMsg("HEX_TO_EDGE ") << HEX_TO_EDGE); FL_DBG(_log, LMsg("HEX_TO_CORNER ") << HEX_TO_CORNER); FL_DBG(_log, LMsg("HEX_EDGE_HALF ") << HEX_EDGE_HALF); FL_DBG(_log, LMsg("VERTICAL_MULTIP ") << VERTICAL_MULTIP); } CellGrid* HexGrid::clone() { HexGrid* nGrid = new HexGrid(); nGrid->setRotation(m_rotation); nGrid->setXScale(m_xscale); nGrid->setYScale(m_yscale); nGrid->setXShift(m_xshift); nGrid->setYShift(m_yshift); nGrid->setZShift(m_zshift); nGrid->setAllowDiagonals(m_allow_diagonals); return nGrid; } HexGrid::~HexGrid() { } bool HexGrid::isAccessible(const ModelCoordinate& curpos, const ModelCoordinate& target) { int32_t x = target.x-curpos.x; int32_t y = target.y-curpos.y; if (ABS(x) <= 1 && ABS(y) <= 1) { if (y == 0) { return true; } else if (curpos.y & 1) { if (x >= 0) return true; } else if (x <= 0) return true; } return false; } double HexGrid::getAdjacentCost(const ModelCoordinate& curpos, const ModelCoordinate& target) { if (curpos == target) { return 0.0; } return 1.0; } double HexGrid::getHeuristicCost(const ModelCoordinate& curpos, const ModelCoordinate& target) { return static_cast(ABS(target.x - curpos.x) + ABS(target.y - curpos.y)); } const std::string& HexGrid::getType() const { static std::string type("hexagonal"); return type; } const std::string& HexGrid::getName() const { static std::string hexGrid("Hex Grid"); return hexGrid; } double HexGrid::getXZigzagOffset(double y) { // each uneven row has shifted coordinate of 0.5 horizontally // shift has to be gradual on vertical axis double ay = ABS(y); int32_t i_layer_y = static_cast(ay); double offset = ay - static_cast(i_layer_y); if ((i_layer_y % 2) == 1) { offset = 1 - offset; } return HEX_TO_EDGE * offset; } ExactModelCoordinate HexGrid::toMapCoordinates(const ExactModelCoordinate& layer_coords) { ExactModelCoordinate tranformed_coords(layer_coords); tranformed_coords.x += getXZigzagOffset(layer_coords.y); tranformed_coords.y *= VERTICAL_MULTIP; ExactModelCoordinate result = m_matrix * tranformed_coords; FL_DBG(_log, LMsg("layercoords ") << layer_coords << " converted to map: " << result); return result; } ExactModelCoordinate HexGrid::toExactLayerCoordinates(const ExactModelCoordinate& map_coord) { ExactModelCoordinate layer_coords = m_inverse_matrix * map_coord; layer_coords.y /= VERTICAL_MULTIP; layer_coords.x -= getXZigzagOffset(layer_coords.y); FL_DBG(_log, LMsg("mapcoords ") << map_coord << " converted to layer: " << layer_coords); return layer_coords; } ModelCoordinate HexGrid::toLayerCoordinates(const ExactModelCoordinate& map_coord) { FL_DBG(_log, LMsg("==============\nConverting map coords ") << map_coord << " to int32_t layer coords..."); ExactModelCoordinate elc = m_inverse_matrix * map_coord; elc.y *= VERTICAL_MULTIP_INV; return toLayerCoordinatesHelper(elc); } ModelCoordinate HexGrid::toLayerCoordinatesFromExactLayerCoordinates(const ExactModelCoordinate& exact_layer_coords) { ExactModelCoordinate elc = exact_layer_coords; elc.x += getXZigzagOffset(elc.y); return toLayerCoordinatesHelper(elc); } ModelCoordinate HexGrid::toLayerCoordinatesHelper(const ExactModelCoordinate& coords) { // this helper method takes exact layer coordinates with zigzag removed // and converts them to layer coordinates ExactModelCoordinate elc = coords; // approximate conversion using squares instead of hexes if( static_cast(round(elc.y)) & 1 ) elc.x -= 0.5; ExactModelCoordinate lc = ExactModelCoordinate(round(elc.x), round(elc.y), round(elc.z)); int32_t x = static_cast(lc.x); int32_t y = static_cast(lc.y); int32_t z = static_cast(lc.z); // distance of given point from our approximation // If y uneven dx=-dx and dy=-dy double dx,dy; if (y & 1) { dx = elc.x - lc.x; dy = elc.y - lc.y; } else { dx = lc.x - elc.x; dy = lc.y - elc.y; } // adjustment for cases where our approximation lies beyond the hex edge if (ABS(dy) > ((HEX_TO_CORNER - HEX_EDGE_GRADIENT * ABS(dx)) * VERTICAL_MULTIP_INV)) { int8_t ddx, ddy; if (dx>0) ddx = -1; else ddx = 0; if (dy>0) ddy = -1; else ddy = 1; if (y & 1) { ddx = -ddx; ddy = -ddy; } x += ddx; y += ddy; } return ModelCoordinate(x,y,z); } void HexGrid::getVertices(std::vector& vtx, const ModelCoordinate& cell) { FL_DBG(_log, LMsg("===============\ngetting vertices for ") << cell); vtx.clear(); double x = static_cast(cell.x); double y = static_cast(cell.y); double horiz_shift = 0; if (cell.y % 2 != 0) { horiz_shift = HEX_TO_EDGE; FL_DBG(_log, "on uneven row"); } double tx, ty; #define ADD_PT(_x, _y) vtx.push_back(ExactModelCoordinate(_x, _y)); // FL_DBG(_log, LMsg("Added point ") << _x << ", " << _y) ty = y - VERTICAL_MULTIP_INV * HEX_EDGE_HALF; tx = x - HEX_TO_EDGE - getXZigzagOffset(ty) + horiz_shift; ADD_PT(tx, ty); ty = y - VERTICAL_MULTIP_INV * HEX_TO_CORNER; tx = x - getXZigzagOffset(ty) + horiz_shift; ADD_PT(tx, ty); ty = y - VERTICAL_MULTIP_INV * HEX_EDGE_HALF; tx = x + HEX_TO_EDGE - getXZigzagOffset(ty) + horiz_shift; ADD_PT(tx, ty); ty = y + VERTICAL_MULTIP_INV * HEX_EDGE_HALF; tx = x + HEX_TO_EDGE - getXZigzagOffset(ty) + horiz_shift; ADD_PT(tx, ty); ty = y + VERTICAL_MULTIP_INV * HEX_TO_CORNER; tx = x - getXZigzagOffset(ty) + horiz_shift; ADD_PT(tx, ty); ty = y + VERTICAL_MULTIP_INV * HEX_EDGE_HALF; tx = x - HEX_TO_EDGE - getXZigzagOffset(ty) + horiz_shift; ADD_PT(tx, ty); } std::vector HexGrid::toMultiCoordinates(const ModelCoordinate& position, const std::vector& orig, bool reverse) { std::vector coords; std::vector::const_iterator it = orig.begin(); if (reverse) { for (; it != orig.end(); ++it) { ModelCoordinate mc = position; if (mc.y % 2 != 0) { mc.x -= (*it).x; mc.y -= (*it).y; if (mc.y % 2 == 0) { mc.x -= 1; } } else { mc.x -= (*it).x; mc.y -= (*it).y; } coords.push_back(mc); } } else { for (; it != orig.end(); ++it) { ModelCoordinate mc = position; if (mc.y % 2 != 0) { mc.x += (*it).x; mc.y += (*it).y; if (mc.y % 2 == 0) { mc.x += 1; } } else { mc.x += (*it).x; mc.y += (*it).y; } coords.push_back(mc); } } return coords; } std::vector HexGrid::getCoordinatesInLine(const ModelCoordinate& start, const ModelCoordinate& end) { std::vector coords; int32_t doubleDeltaX = 2*(end.x - start.x) + ABS(end.y % 2) - ABS(start.y % 2); int32_t deltaX = (end.x - start.x) + ABS(end.y % 2) - ABS(start.y % 2); int32_t deltaY = end.y - start.y; //int8_t signX = (deltaX >= 0) ? 1 : -1; //int8_t signY = (deltaY >= 0) ? 1 : -1; int8_t signX = (start.x < end.x) ? 1 : -1; int8_t signY = (start.y < end.y) ? 1 : -1; ModelCoordinate current(start); coords.push_back(current); int32_t err = 0; if (ABS(deltaY) < ABS(doubleDeltaX)) { int32_t errX = 3 * ABS(doubleDeltaX); int32_t errY = 3 * ABS(deltaY); while (current.x != end.x || current.y != end.y) { err += errY; if (err > ABS(doubleDeltaX)) { if (signX == -1) { if (signY == -1) { // down left if (current.y % 2 == 0 && current.x != end.x) { current.x -= 1; } current.y -= 1; } else { // up left if (current.y % 2 == 0 && current.x != end.x) { current.x -= 1; } current.y += 1; } } else { if (signY == -1) { // down right if (current.y % 2 != 0 && current.x != end.x) { current.x += 1; } current.y -= 1; } else { // up right if (current.y % 2 != 0 && current.x != end.x) { current.x += 1; } current.y += 1; } } err -= errX; } else { if (signX == -1) { // left current.x -= 1; } else { // right current.x += 1; } err += errY; } coords.push_back(current); } } else { int32_t errX = ABS(doubleDeltaX); int32_t errY = ABS(deltaY); while (current.x != end.x || current.y != end.y) { err += errX; if (err > 0) { if (signX == -1) { if (signY == -1) { // down left if (current.y % 2 == 0 && current.x != end.x) { current.x -= 1; } current.y -= 1; } else { // up left if (current.y % 2 == 0 && current.x != end.x) { current.x -= 1; } current.y += 1; } } else if (signX == 1) { if (signY == -1) { // down right if (current.y % 2 != 0 && current.x != end.x) { current.x += 1; } current.y -= 1; } else { // up right if (current.y % 2 != 0 && current.x != end.x) { current.x += 1; } current.y += 1; } } err -= errY; } else { signX = -signX; if (signX == -1) { if (signY == -1) { // down left if (current.y % 2 == 0 && current.x != end.x) { current.x -= 1; } current.y -= 1; } else { // up left if (current.y % 2 == 0 && current.x != end.x) { current.x -= 1; } current.y += 1; } } else if (signX == 1) { if (signY == -1) { // down right if (current.y % 2 != 0 && current.x != end.x) { current.x += 1; } current.y -= 1; } else { // up right if (current.y % 2 != 0 && current.x != end.x) { current.x += 1; } current.y += 1; } } signX = -signX; err += errY; } coords.push_back(current); } } return coords; } } fifengine-0.4.1/engine/core/model/metamodel/grids/hexgrid.h000066400000000000000000000063271304641216200236340ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_MODEL_GRIDS_HEXGRID_H #define FIFE_MODEL_GRIDS_HEXGRID_H // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/fife_stdint.h" #include "cellgrid.h" namespace FIFE { class HexGrid: public CellGrid { public: HexGrid(); virtual ~HexGrid(); bool isAccessible(const ModelCoordinate& curpos, const ModelCoordinate& target); const std::string& getType() const; const std::string& getName() const; double getAdjacentCost(const ModelCoordinate& curpos, const ModelCoordinate& target); double getHeuristicCost(const ModelCoordinate& curpos, const ModelCoordinate& target); uint32_t getCellSideCount() const { return 6; } ExactModelCoordinate toMapCoordinates(const ExactModelCoordinate& layer_coords); ModelCoordinate toLayerCoordinates(const ExactModelCoordinate& map_coord); ExactModelCoordinate toExactLayerCoordinates(const ExactModelCoordinate& map_coord); ModelCoordinate toLayerCoordinatesFromExactLayerCoordinates(const ExactModelCoordinate& exact_layer_coords); void getVertices(std::vector& vtx, const ModelCoordinate& cell); std::vector toMultiCoordinates(const ModelCoordinate& position, const std::vector& orig, bool reverse); std::vector getCoordinatesInLine(const ModelCoordinate& start, const ModelCoordinate& end); CellGrid* clone(); private: double getXZigzagOffset(double y); ModelCoordinate toLayerCoordinatesHelper(const ExactModelCoordinate& coords); }; } #endif fifengine-0.4.1/engine/core/model/metamodel/grids/squaregrid.cpp000066400000000000000000000134251304641216200247000ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/math/fife_math.h" #include "util/log/logger.h" #include "squaregrid.h" namespace FIFE { static Logger _log(LM_SQUAREGRID); SquareGrid::SquareGrid(): CellGrid() { } CellGrid* SquareGrid::clone() { SquareGrid* nGrid = new SquareGrid(); nGrid->setRotation(m_rotation); nGrid->setXScale(m_xscale); nGrid->setYScale(m_yscale); nGrid->setXShift(m_xshift); nGrid->setYShift(m_yshift); nGrid->setZShift(m_zshift); nGrid->setAllowDiagonals(m_allow_diagonals); return nGrid; } SquareGrid::~SquareGrid() { } bool SquareGrid::isAccessible(const ModelCoordinate& curpos, const ModelCoordinate& target) { uint8_t x = ABS(target.x-curpos.x); uint8_t y = ABS(target.y-curpos.y); if ((x<=1) && (y<=1)) { if (m_allow_diagonals) { return true; } else if (x^y) { return true; } } return false; } double SquareGrid::getAdjacentCost(const ModelCoordinate& curpos, const ModelCoordinate& target) { if (curpos == target) { return 0.0; } else if (ABS(target.x-curpos.x)^ABS(target.y-curpos.y)) { return 1.0; } return 1.4; } double SquareGrid::getHeuristicCost(const ModelCoordinate& curpos, const ModelCoordinate& target) { return static_cast(ABS(target.x - curpos.x) + ABS(target.y - curpos.y)); } const std::string& SquareGrid::getType() const { static std::string type("square"); return type; } const std::string& SquareGrid::getName() const { static std::string squareGrid("Square Grid"); return squareGrid; } ExactModelCoordinate SquareGrid::toMapCoordinates(const ExactModelCoordinate& layer_coords) { return m_matrix * layer_coords; } ExactModelCoordinate SquareGrid::toExactLayerCoordinates(const ExactModelCoordinate& map_coord) { return m_inverse_matrix * map_coord; } ModelCoordinate SquareGrid::toLayerCoordinates(const ExactModelCoordinate& map_coord) { ExactModelCoordinate dblpt = toExactLayerCoordinates(map_coord); return toLayerCoordinatesFromExactLayerCoordinates(dblpt); } ModelCoordinate SquareGrid::toLayerCoordinatesFromExactLayerCoordinates(const ExactModelCoordinate& exact_layer_coords) { ModelCoordinate result(round(exact_layer_coords.x), round(exact_layer_coords.y), round(exact_layer_coords.z)); return result; } void SquareGrid::getVertices(std::vector& vtx, const ModelCoordinate& cell) { vtx.clear(); double x = static_cast(cell.x); double y = static_cast(cell.y); vtx.push_back(ExactModelCoordinate(x-0.5, y-0.5)); vtx.push_back(ExactModelCoordinate(x+0.5, y-0.5)); vtx.push_back(ExactModelCoordinate(x+0.5, y+0.5)); vtx.push_back(ExactModelCoordinate(x-0.5, y+0.5)); } std::vector SquareGrid::toMultiCoordinates(const ModelCoordinate& position, const std::vector& orig, bool reverse) { std::vector coords; std::vector::const_iterator it = orig.begin(); if (reverse) { for (; it != orig.end(); ++it) { ModelCoordinate mc = position; mc.x -= (*it).x; mc.y -= (*it).y; coords.push_back(mc); } } else { for (; it != orig.end(); ++it) { ModelCoordinate mc = position; mc.x += (*it).x; mc.y += (*it).y; coords.push_back(mc); } } return coords; } std::vector SquareGrid::getCoordinatesInLine(const ModelCoordinate& start, const ModelCoordinate& end) { std::vector coords; int32_t dx = ABS(end.x - start.x); int32_t dy = ABS(end.y - start.y); int8_t sx = -1; int8_t sy = -1; if (start.x < end.x) { sx = 1; } if (start.y < end.y) { sy = 1; } int32_t err = dx - dy; int32_t err2 = err*2; ModelCoordinate current(start); bool finished = false; while (!finished) { coords.push_back(current); if (current.x == end.x && current.y == end.y) { finished = true; break; } if (err2 > -dy) { err -= dy; current.x += sx; } else if (err2 < dx) { err += dx; current.y += sy; } err2 = err*2; } return coords; } } fifengine-0.4.1/engine/core/model/metamodel/grids/squaregrid.h000066400000000000000000000061471304641216200243500ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_MODEL_GRIDS_SQUAREGRID_H #define FIFE_MODEL_GRIDS_SQUAREGRID_H // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/fife_stdint.h" #include "cellgrid.h" namespace FIFE { class SquareGrid: public CellGrid { public: SquareGrid(); virtual ~SquareGrid(); const std::string& getType() const; const std::string& getName() const; bool isAccessible(const ModelCoordinate& curpos, const ModelCoordinate& target); double getAdjacentCost(const ModelCoordinate& curpos, const ModelCoordinate& target); double getHeuristicCost(const ModelCoordinate& curpos, const ModelCoordinate& target); uint32_t getCellSideCount() const { return 4; } ExactModelCoordinate toMapCoordinates(const ExactModelCoordinate& layer_coords); ModelCoordinate toLayerCoordinates(const ExactModelCoordinate& map_coord); ExactModelCoordinate toExactLayerCoordinates(const ExactModelCoordinate& map_coord); ModelCoordinate toLayerCoordinatesFromExactLayerCoordinates(const ExactModelCoordinate& exact_layer_coords); void getVertices(std::vector& vtx, const ModelCoordinate& cell); std::vector toMultiCoordinates(const ModelCoordinate& position, const std::vector& orig, bool reverse); std::vector getCoordinatesInLine(const ModelCoordinate& start, const ModelCoordinate& end); CellGrid* clone(); }; } #endif fifengine-0.4.1/engine/core/model/metamodel/ipather.h000066400000000000000000000122551304641216200225230ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2006-2011 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_MODEL_IPATHER_H #define FIFE_MODEL_IPATHER_H // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder namespace FIFE { class Location; class Instance; class Route; //! A path is a list with locations. Each location holds the coordinate for one cell. typedef std::list Path; enum PriorityType { HIGH_PRIORITY, MEDIUM_PRIORITY, LOW_PRIORITY }; class IPather { public: virtual ~IPather() {}; /** Creates a route between the start and end location that needs be solved. * * @param start A const reference to the start location. * @param end A const reference to the target location. * @param immediate A optional boolean, if true the route bypass the max. ticks limit and solves the path immediately, otherwise false. * @param cost_id A const reference to the string that holds the cost identifier. You can use it optional then this cost id is used instead of the default cost. */ virtual Route* createRoute(const Location& start, const Location& end, bool immediate = false, const std::string& cost_id = "") = 0; /** Solves the route to create a path. * * @param route A pointer to the route which should be solved. * @param priority The priority to assign to search (high are pushed to the front of the queue). @see PriorityType * @param immediate A optional boolean, if true the route bypass the max. ticks limit and solves the path immediately, otherwise false. * @return A boolean, if true the route could be solved, otherwise false. */ virtual bool solveRoute(Route* route, int32_t priority = MEDIUM_PRIORITY, bool immediate = false) = 0; /** Follows the path of the route. * * @param current A const reference to the current location. * @param route A pointer to the route which should be followed. * @param speed A double which holds the speed. * @param nextLocation A reference to the next location returned by the pather. * @return A boolean, if true the route could be followed, otherwise false. */ virtual bool followRoute(const Location& current, Route* route, double speed, Location& nextLocation) = 0; /** Updates the pather (should it need updating). * * The update method is called by the model. Pathfinders which require per loop updating * (in the case of pathfinders which implement A* for instance) should use this method * as an oppurtunity to update the search. Generally the method should be constrained to * a maximum amount of search updating to prevent this method from stalling the application. */ virtual void update() = 0; /** Cancels a given session. * * This function is called when (for instance) the user changes their mind about * a destination while the agent is already moving, the old session needs to be * cancelled and a new one created. * * @param sessionId The id of the session to cancel. * @return A boolean to signify whether the session was successfully found and cancelled. */ virtual bool cancelSession(const int32_t sessionId) = 0; /** Sets maximal ticks (update steps) to solve routes. @see update() * @param ticks A integer which holds the steps. default is 1000 */ virtual void setMaxTicks(int32_t ticks) = 0; /** Returns maximal ticks (update steps) to solve routes. @see update() * @return A integer which holds the steps. default is 1000 */ virtual int32_t getMaxTicks() = 0; /** Gets the name of this pather */ virtual std::string getName() const = 0; }; } #endif fifengine-0.4.1/engine/core/model/metamodel/ipather.i000066400000000000000000000045551304641216200225300ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "model/metamodel/ipather.h" %} %include "model/structures/instance.i" %include "pathfinder/route.h" namespace FIFE { enum PriorityType { HIGH_PRIORITY, MEDIUM_PRIORITY, LOW_PRIORITY }; %feature("director") IPather; class IPather { public: virtual ~IPather(); virtual Route* createRoute(const Location& start, const Location& end, bool immediate = false, const std::string& cost_id = "") = 0; virtual bool solveRoute(Route* route, int32_t priority = MEDIUM_PRIORITY, bool immediate = false) = 0; virtual bool followRoute(const Location& current, Route* route, double speed, Location& nextLocation) = 0; virtual void update() = 0; virtual bool cancelSession(const int32_t sessionId) = 0; virtual void setMaxTicks(int32_t ticks) = 0; virtual int32_t getMaxTicks() = 0; virtual std::string getName() const = 0; }; } fifengine-0.4.1/engine/core/model/metamodel/ivisual.h000066400000000000000000000036441304641216200225450ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_MODEL_IVISUAL_H #define FIFE_MODEL_IVISUAL_H // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder namespace FIFE { class IVisual { public: virtual ~IVisual() {}; }; } #endif fifengine-0.4.1/engine/core/model/metamodel/ivisual.i000066400000000000000000000032351304641216200225420ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "model/metamodel/ivisual.h" %} namespace FIFE { class IVisual { public: virtual ~IVisual(); private: IVisual(); }; } fifengine-0.4.1/engine/core/model/metamodel/modelcoords.h000066400000000000000000000037331304641216200234020ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_MODELCOORDS_H #define FIFE_MODELCOORDS_H // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/structures/point.h" namespace FIFE { typedef DoublePoint3D ExactModelCoordinate; typedef Point3D ModelCoordinate; } #endif fifengine-0.4.1/engine/core/model/metamodel/modelcoords.i000066400000000000000000000034241304641216200234000ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "model/metamodel/modelcoords.h" %} %include "model/metamodel/modelcoords.h" %include "util/structures/utilstructures.i" namespace FIFE { %template(ModelCoordinate) PointType3D; %template(ExactModelCoordinate) PointType3D; } fifengine-0.4.1/engine/core/model/metamodel/object.cpp000066400000000000000000000403461304641216200226720ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2006-2012 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/exception.h" #include "object.h" #include "action.h" #include "ipather.h" namespace FIFE { Object::BasicObjectProperty::BasicObjectProperty(): m_area(""), m_actions(NULL), m_defaultAction(NULL), m_blocking(false), m_static(false), m_cellStack(0) { } Object::BasicObjectProperty::~BasicObjectProperty() { if (m_actions) { std::map::const_iterator i(m_actions->begin()); while (i != m_actions->end()) { delete i->second; ++i; } delete m_actions; } } Object::MovableObjectProperty::MovableObjectProperty(): m_pather(NULL), m_costId(""), m_cost(1.0), m_speed(1.0), m_zRange(0) { } Object::MovableObjectProperty::~MovableObjectProperty() { } Object::MultiObjectProperty::MultiObjectProperty(): m_multiPart(false), m_restrictedRotation(false) { } Object::MultiObjectProperty::~MultiObjectProperty() { } Object::Object(const std::string& identifier, const std::string& name_space, Object* inherited): m_id(identifier), m_namespace(name_space), m_filename(""), m_inherited(inherited), m_visual(NULL), m_basicProperty(NULL), m_moveProperty(NULL), m_multiProperty(NULL) { } Object::~Object() { delete m_visual; delete m_basicProperty; delete m_moveProperty; delete m_multiProperty; } Action* Object::createAction(const std::string& identifier, bool is_default) { std::map* actions; if (!m_basicProperty) { m_basicProperty = new BasicObjectProperty(); } if (!m_basicProperty->m_actions) { m_basicProperty->m_actions = new std::map; } actions = m_basicProperty->m_actions; std::map::const_iterator it = actions->begin(); for(; it != actions->end(); ++it) { if(identifier == it->second->getId()) { throw NameClash(identifier); } } Action* a = getAction(identifier, false); if (!a) { a = new Action(identifier); (*actions)[identifier] = a; if (is_default || (!m_basicProperty->m_defaultAction)) { m_basicProperty->m_defaultAction = a; } } return a; } Action* Object::getAction(const std::string& identifier, bool deepsearch) const { std::map* actions = NULL; if (m_basicProperty) { actions = m_basicProperty->m_actions; } std::map::const_iterator i; if (actions) { i = actions->find(identifier); } if ((!actions) || (i == actions->end())) { if (m_inherited && deepsearch) { return m_inherited->getAction(identifier); } return NULL; } return i->second; } std::list Object::getActionIds() const { std::map* actions = NULL; if (m_basicProperty) { actions = m_basicProperty->m_actions; } std::list action_ids; if (actions) { std::map::const_iterator actions_it = actions->begin(); for(; actions_it != actions->end(); ++actions_it) { action_ids.push_back(actions_it->first); } } return action_ids; } void Object::setDefaultAction(const std::string& identifier) { std::map::const_iterator i; Action* action = NULL; std::map* actions = NULL; if (m_basicProperty) { actions = m_basicProperty->m_actions; } if (actions) { i = actions->find(identifier); } if ((!actions) || (i == actions->end())) { if (m_inherited) { action = m_inherited->getAction(identifier); } } else { action = i->second; } if (action && m_basicProperty) { m_basicProperty->m_defaultAction = action; } } Action* Object::getDefaultAction() const { if (m_basicProperty) { return m_basicProperty->m_defaultAction; } if (m_inherited) { return m_inherited->getDefaultAction(); } return NULL; } void Object::setPather(IPather* pather) { if (!m_moveProperty) { m_moveProperty = new MovableObjectProperty(); } m_moveProperty->m_pather = pather; } IPather* Object::getPather() const { if (m_moveProperty) { return m_moveProperty->m_pather; } if (m_inherited) { return m_inherited->getPather(); } return NULL; } Object* Object::getInherited() const { return m_inherited; } void Object::adoptVisual(IVisual* visual) { if (m_visual && m_visual != visual) { delete m_visual; } m_visual = visual; } void Object::setBlocking(bool blocking) { if (!m_basicProperty) { m_basicProperty = new BasicObjectProperty(); } m_basicProperty->m_blocking = blocking; } bool Object::isBlocking() const { if (m_basicProperty) { return m_basicProperty->m_blocking; } if (m_inherited) { return m_inherited->isBlocking(); } return false; } void Object::setStatic(bool stat) { if (!m_basicProperty) { m_basicProperty = new BasicObjectProperty(); } m_basicProperty->m_static = stat; } bool Object::isStatic() const { if (!m_basicProperty) { if (m_inherited) { return m_inherited->isStatic(); } return false; } return m_basicProperty->m_static; } void Object::setFilename(const std::string& file) { m_filename = file; } const std::string& Object::getFilename() const { return m_filename; } void Object::setCellStackPosition(uint8_t position) { if (!m_basicProperty) { m_basicProperty = new BasicObjectProperty(); } m_basicProperty->m_cellStack = position; } uint8_t Object::getCellStackPosition() const { if (m_basicProperty) { return m_basicProperty->m_cellStack; } if (m_inherited) { return m_inherited->getCellStackPosition(); } return 0; } bool Object::isSpecialCost() const { if (m_moveProperty) { return m_moveProperty->m_costId != ""; } if (m_inherited) { return m_inherited->isSpecialCost(); } return false; } void Object::setCostId(const std::string& cost) { if (!m_moveProperty) { m_moveProperty = new MovableObjectProperty(); } m_moveProperty->m_costId = cost; } std::string Object::getCostId() const { if (m_moveProperty) { return m_moveProperty->m_costId; } if (m_inherited) { return m_inherited->getCostId(); } return ""; } void Object::setCost(double cost) { if (!m_moveProperty) { m_moveProperty = new MovableObjectProperty(); } m_moveProperty->m_cost = cost; } double Object::getCost() const { if (m_moveProperty) { return m_moveProperty->m_cost; } if (m_inherited) { return m_inherited->getCost(); } return 1.0; } bool Object::isSpecialSpeed() const { if (m_moveProperty) { return !Mathd::Equal(m_moveProperty->m_speed, 1.0); } if (m_inherited) { return m_inherited->isSpecialSpeed(); } return false; } void Object::setSpeed(double speed) { if (!m_moveProperty) { m_moveProperty = new MovableObjectProperty(); } m_moveProperty->m_speed = speed; } double Object::getSpeed() const { if (m_moveProperty) { return m_moveProperty->m_speed; } if (m_inherited) { return m_inherited->getSpeed(); } return 1.0; } bool Object::isMultiObject() const { if (m_multiProperty) { return !m_multiProperty->m_multiPartIds.empty(); } if (m_inherited) { return m_inherited->isMultiObject(); } return false; } void Object::addMultiPartId(const std::string& partId) { if (!m_multiProperty) { m_multiProperty = new MultiObjectProperty(); } m_multiProperty->m_multiPartIds.push_back(partId); } std::list Object::getMultiPartIds() const { if (m_multiProperty) { return m_multiProperty->m_multiPartIds; } if (m_inherited) { return m_inherited->getMultiPartIds(); } return std::list(); } void Object::removeMultiPartId(const std::string& partId) { if (!m_multiProperty) { return; } std::list::iterator it = m_multiProperty->m_multiPartIds.begin(); for (; it != m_multiProperty->m_multiPartIds.end(); ++it) { if (*it == partId) { m_multiProperty->m_multiPartIds.erase(it); break; } } } void Object::removeAllMultiPartIds() { if (!m_multiProperty) { return; } m_multiProperty->m_multiPartIds.clear(); } bool Object::isMultiPart() const { if (m_multiProperty) { return m_multiProperty->m_multiPart; } if (m_inherited) { return m_inherited->isMultiPart(); } return false; } void Object::setMultiPart(bool part) { if (!m_multiProperty) { m_multiProperty = new MultiObjectProperty(); } m_multiProperty->m_multiPart = part; } void Object::addMultiPart(Object* obj) { if (!m_multiProperty) { m_multiProperty = new MultiObjectProperty(); } m_multiProperty->m_multiParts.insert(obj); } std::set Object::getMultiParts() const { if (m_multiProperty) { return m_multiProperty->m_multiParts; } if (m_inherited) { return m_inherited->getMultiParts(); } return std::set(); } void Object::removeMultiPart(Object* obj) { if (!m_multiProperty) { return; } m_multiProperty->m_multiParts.erase(obj); } void Object::removeMultiParts() { if (!m_multiProperty) { return; } m_multiProperty->m_multiParts.clear(); } void Object::addMultiPartCoordinate(int32_t rotation, ModelCoordinate coord) { if (!m_multiProperty) { m_multiProperty = new MultiObjectProperty(); } m_multiProperty->m_multiPartCoordinates.insert(std::pair(rotation, coord)); m_multiProperty->m_partAngleMap[rotation] = rotation; } std::multimap Object::getMultiPartCoordinates() const { if (m_multiProperty) { return m_multiProperty->m_multiPartCoordinates; } if (m_inherited) { return m_inherited->getMultiPartCoordinates(); } return std::multimap(); } std::vector Object::getMultiPartCoordinates(int32_t rotation) const { std::vector coordinates; if (m_multiProperty) { int32_t closest = 0; getIndexByAngle(rotation, m_multiProperty->m_partAngleMap, closest); std::pair::iterator, std::multimap::iterator> result = m_multiProperty->m_multiPartCoordinates.equal_range(closest); std::multimap::iterator it = result.first; for (; it != result.second; ++it) { coordinates.push_back((*it).second); } } else if (m_inherited) { return m_inherited->getMultiPartCoordinates(rotation); } return coordinates; } std::vector Object::getMultiObjectCoordinates(int32_t rotation) const { std::vector coordinates; if (m_multiProperty) { if (m_multiProperty->m_multiObjectCoordinates.empty()) { std::set::iterator subit = m_multiProperty->m_multiParts.begin(); for (; subit != m_multiProperty->m_multiParts.end(); ++subit) { const std::multimap& subcoords = (*subit)->getMultiPartCoordinates(); m_multiProperty->m_multiObjectCoordinates.insert(subcoords.begin(), subcoords.end()); } std::multimap::iterator it = m_multiProperty->m_multiObjectCoordinates.begin(); for (; it != m_multiProperty->m_multiObjectCoordinates.end(); ++it) { m_multiProperty->m_multiAngleMap[(*it).first] = (*it).first; } } int32_t closest = 0; getIndexByAngle(rotation, m_multiProperty->m_multiAngleMap, closest); std::pair::iterator, std::multimap::iterator> result = m_multiProperty->m_multiObjectCoordinates.equal_range(closest); std::multimap::iterator it = result.first; ModelCoordinate parent(0,0); coordinates.push_back(parent); for (; it != result.second; ++it) { coordinates.push_back((*it).second); } } else if (m_inherited) { return m_inherited->getMultiObjectCoordinates(rotation); } return coordinates; } void Object::setRotationAnchor(const ExactModelCoordinate& anchor) { if (!m_multiProperty) { m_multiProperty = new MultiObjectProperty(); } m_multiProperty->m_rotationAnchor = anchor; } ExactModelCoordinate Object::getRotationAnchor() const { if (m_multiProperty) { return m_multiProperty->m_rotationAnchor; } if (m_inherited) { return m_inherited->getRotationAnchor(); } return ExactModelCoordinate(); } void Object::setRestrictedRotation(bool restrict) { if (!m_multiProperty) { m_multiProperty = new MultiObjectProperty(); } m_multiProperty->m_restrictedRotation = restrict; } bool Object::isRestrictedRotation() const { if (m_multiProperty) { return m_multiProperty->m_restrictedRotation; } if (m_inherited) { return m_inherited->isRestrictedRotation(); } return false; } int32_t Object::getRestrictedRotation(int32_t rotation) { int32_t closest = rotation; if (m_multiProperty) { if (!m_multiProperty->m_multiAngleMap.empty()) { getIndexByAngle(rotation, m_multiProperty->m_multiAngleMap, closest); } else if (!m_multiProperty->m_partAngleMap.empty()) { getIndexByAngle(rotation, m_multiProperty->m_partAngleMap, closest); } } else if (m_inherited) { return m_inherited->getRestrictedRotation(rotation); } return closest; } void Object::setZStepRange(int32_t zRange) { if (!m_moveProperty) { m_moveProperty = new MovableObjectProperty(); } m_moveProperty->m_zRange = zRange; } int32_t Object::getZStepRange() const { if (m_moveProperty) { return m_moveProperty->m_zRange; } if (m_inherited) { return m_inherited->getZStepRange(); } return 0; } void Object::setArea(const std::string& id) { if (!m_basicProperty) { m_basicProperty = new BasicObjectProperty(); } m_basicProperty->m_area = id; } std::string Object::getArea() const { if (m_basicProperty) { return m_basicProperty->m_area; } if (m_inherited) { return m_inherited->getArea(); } return ""; } void Object::addWalkableArea(const std::string& id) { if (!m_moveProperty) { m_moveProperty = new MovableObjectProperty(); } m_moveProperty->m_walkableAreas.push_back(id); m_moveProperty->m_walkableAreas.sort(); m_moveProperty->m_walkableAreas.unique(); } void Object::removeWalkableArea(const std::string& id) { if (!m_moveProperty) { return; } m_moveProperty-> m_walkableAreas.remove(id); } std::list Object::getWalkableAreas() const { if (m_moveProperty) { return m_moveProperty->m_walkableAreas; } if (m_inherited) { return m_inherited->getWalkableAreas(); } return std::list(); } bool Object::operator==(const Object& obj) const { return m_id == obj.getId() && m_namespace == obj.getNamespace(); } bool Object::operator!=(const Object& obj) const { return m_id != obj.getId() || m_namespace != obj.getNamespace(); } } fifengine-0.4.1/engine/core/model/metamodel/object.h000066400000000000000000000335001304641216200223310ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2006-2012 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_PROTOTYPE_H #define FIFE_PROTOTYPE_H // Standard C++ library includes #include #include #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/resource/resource.h" #include "util/math/angles.h" namespace FIFE { class Action; class IPather; class IVisual; /** Object class * * Objects describe the properties of objects. * Objects may inherit default values from another object. * */ class Object { public: /** Constructor * An object may optionally inherit default attributes * from another object. This object may override these * defaults, but it may not CHANGE the inherited values. * * Objects are created by calling Model::createObject, thus * this method should really be called only by Model or test code * @see Model in model/model.h for creation of objects. */ Object(const std::string& identifier, const std::string& name_space, Object* inherited=NULL); /** Destructor */ ~Object(); const std::string& getId() const { return m_id; } const std::string& getNamespace() const { return m_namespace; } /** Sets the identifier for this object. */ void setId(const std::string& id) { m_id = id; } /** Adds new action with given id. In case there is action already * with given id, returns it instead of new object * Action instances are managed by object * @param identifier An identifier or name to give the action. * @param is_default if true, becomes default action for this object * default objects are used e.g. when showing them on editor. * if multiple default actions are created, last one remains. * In case there's no explicit default action created, first * action created becomes the default */ Action* createAction(const std::string& identifier, bool is_default=false); /** Gets action with given id. If not found, returns NULL */ Action* getAction(const std::string& identifier, bool deepsearch = true) const; /** Gets all available action ids of the object and packs them into a list */ std::list getActionIds() const; /** Sets default action assigned to this object. If not available, then default action is not changed. */ void setDefaultAction(const std::string& identifier); /** Gets default action assigned to this object. If none available, returns NULL */ Action* getDefaultAction() const; /** Sets pather used by instances created out of this object */ void setPather(IPather* pather); /** Gets associated pather */ IPather* getPather() const; /** Gets an object where this object was inherited from * @see inherited object */ Object* getInherited() const; /** Sets visualization to be used. Transfers ownership. */ void adoptVisual(IVisual* visual); /** Gets used visualization */ template T* getVisual() const { return reinterpret_cast(m_visual); } /** Sets if object blocks movement */ void setBlocking(bool blocking); /** Gets if object blocks movement */ bool isBlocking() const; /** Set to true, if object is such that it doesn't move */ void setStatic(bool stat); /** Gets if object moves */ bool isStatic() const; void setFilename(const std::string& file); const std::string& getFilename() const; /** Sets the cell stack position. * Is used to determine which Instance is on top of a cell. * @param position The stack position on a cell, range 0-255. */ void setCellStackPosition(uint8_t position); /** Returns cell stack position. * @return The stack position on a cell, range 0-255. */ uint8_t getCellStackPosition() const; /** Gets if object uses special cost. * @return A boolean, true if the object uses special cost, otherwise false. */ bool isSpecialCost() const; /** Sets the cost id. * @param cost A const reference to a string which contains the identifier. */ void setCostId(const std::string& cost); /** Returns the cost id. * @return A const reference to a string which contains the identifier. */ std::string getCostId() const; /** Sets the cost. * @param cost A double which value is used as cost. */ void setCost(double cost); /** Returns the cost. * @return A double which value is used as cost. */ double getCost() const; /** Gets if object uses special speed modifier. * @return A boolean, true if the object uses special speed, otherwise false. */ bool isSpecialSpeed() const; /** Sets the speed modifier. * @param cost A double which value is used as speed multiplier. */ void setSpeed(double cost); /** Returns the speed modifier. * @return A double which value is used as speed multiplier. */ double getSpeed() const; /** Gets if object uses special cost. * @return A boolean, true if the object uses special cost, otherwise false. */ bool isMultiObject() const; /** Adds a multi part identifier. * @param partId A const reference to a string that holds the identifier. */ void addMultiPartId(const std::string& partId); /** Returns all multi part identifiers. * @return A const reference to a list that holds the identifiers. */ std::list getMultiPartIds() const; /** Removes a multi part identifier. * @param partId A const reference to a string that holds the identifier. */ void removeMultiPartId(const std::string& partId); /** Removes all multi part identifiers. */ void removeAllMultiPartIds(); /** Gets if object is a part of a multi object. * @return A boolean, true if the object is a part of a multi object, otherwise false. */ bool isMultiPart() const; /** Sets the object as a part of a multi object. * @param part A boolean, true if the object is a part of a multi object, otherwise false. */ void setMultiPart(bool part); /** Adds a object as a part of a multi object. * @param obj A pointer to the multi part object. */ void addMultiPart(Object* obj); /** Returns all multi part objects. * @return A const reference to a set that holds the objects. */ std::set getMultiParts() const; /** Removes a multi part object. * @param obj A pointer to the part object. */ void removeMultiPart(Object* obj); /** Removes all multi part objects. */ void removeMultiParts(); /** Adds rotationally dependent coordinates for this object part. * @param rotation A integer value for the angle. * @param coord A ModelCoordinate as relative coordinate, 0,0 is always the multi object center. */ void addMultiPartCoordinate(int32_t rotation, ModelCoordinate coord); /** Returns all rotationally dependent coordinates from this object part. * @return A const reference to a multimap which contains the coordinates per rotation. */ std::multimap getMultiPartCoordinates() const; /** Returns all object part coordinates for the given rotation. * @param rotation A integer value for the angle. * @return A vector which contains the coordinates. */ std::vector getMultiPartCoordinates(int32_t rotation) const; /** Returns all multi object coordinates for the given rotation. * @param rotation A integer value for the angle. * @return A vector which contains the coordinates. */ std::vector getMultiObjectCoordinates(int32_t rotation) const; /** Sets the rotation anchor for this multi object. * Is used to rotate the images from multi part objects around this relative point, * default is 0.0, 0.0 the center of the multi object. * @param anchor A const reference to a ExactModelCoordinate that holds the anchor coordinate. */ void setRotationAnchor(const ExactModelCoordinate& anchor); /** Returns the rotation anchor for this multi object. * @return A const reference to a ExactModelCoordinate that holds the anchor coordinate. */ ExactModelCoordinate getRotationAnchor() const; /** Sets the rotation to restricted. * If this is enabled the multi object uses only rotation values are which based on multi coordinates. * @param restrict A boolean, if true the rotation will be restricted, false for free rotation. */ void setRestrictedRotation(bool restrict); /** Gets if object uses restricted rotations. * @return A boolean, true if the object uses restricted rotations, otherwise false. */ bool isRestrictedRotation() const; /** Returns the most obvious rotation, based on multi coordinates. * @param rotation A integer value for the original angle. * @return A integer value for the obvious rotation. */ int32_t getRestrictedRotation(int32_t rotation); /** Sets z-step range for object. * 0 means it can not climb, with a value of 1 it can climb a z-height of 1 and so on. * @param zRange The z-step range as int. */ void setZStepRange(int32_t zRange); /** Returns z-step range from object. In case it is not limited -1 is returned. * @return The z-step range as int. */ int32_t getZStepRange() const; /** Sets the area id that the instances of this object adds to their cells. * @param id The area id, default is "". */ void setArea(const std::string& id); /** Gets the area id that the instances of this object adds to their cells. * @return The area id, default is "". */ std::string getArea() const; /** Adds an area id to walkable area. The instances of this object * can only walk on cells that part of the given areas. * @param id The area id. */ void addWalkableArea(const std::string& id); /** Removes an area id from walkable areas. * @param id The area id. */ void removeWalkableArea(const std::string& id); /** Returns a list that contains all walkable area ids. * @return A list that contains all walkable area ids as strings. */ std::list getWalkableAreas() const; /** Compares equality of two objects */ bool operator==(const Object& obj) const; /** Compares unequality of two objects */ bool operator!=(const Object& obj) const; private: //! identifier std::string m_id; //! namespace std::string m_namespace; //! filename std::string m_filename; //! pointer to inherited object Object* m_inherited; //! pointer to object visual IVisual* m_visual; class BasicObjectProperty { public: //! Constructor BasicObjectProperty(); //! Destructor ~BasicObjectProperty(); //! area id std::string m_area; //! holds action ids and assigned actions std::map* m_actions; //! pointer to default action Action* m_defaultAction; //! indicates if object blocks bool m_blocking; //remove this with a if (MovableObjectProperty) //! indicates if object is static bool m_static; //! position on cellstack uint8_t m_cellStack; }; class MovableObjectProperty { public: //! Constructor MovableObjectProperty(); //! Destructor ~MovableObjectProperty(); //! pointer to pathfinder IPather* m_pather; //! cost identifier std::string m_costId; //! cost value, default 1.0 double m_cost; //! speed modifier, default 1.0 double m_speed; //! z range value int32_t m_zRange; //! list contains walkable area ids std::list m_walkableAreas; }; class MultiObjectProperty { public: //! Constructor MultiObjectProperty(); //! Destructor ~MultiObjectProperty(); //! indicates if object is part of multi object bool m_multiPart; //! indicates if object uses only restricted rotations bool m_restrictedRotation; //! list with part identifiers std::list m_multiPartIds; //! rotation anchor ExactModelCoordinate m_rotationAnchor; //! set contains part objects std::set m_multiParts; //! part object angles type_angle2id m_partAngleMap; //! multi object angles type_angle2id m_multiAngleMap; //! part object coordinates std::multimap m_multiPartCoordinates; //! multi object coordinates std::multimap m_multiObjectCoordinates; }; BasicObjectProperty* m_basicProperty; MovableObjectProperty* m_moveProperty; MultiObjectProperty* m_multiProperty; }; } //FIFE #endif fifengine-0.4.1/engine/core/model/metamodel/object.i000066400000000000000000000032471304641216200223370ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "model/metamodel/object.h" %} %include "util/base/utilbase.i" %include "model/metamodel/ivisual.i" %include "model/metamodel/object.h" fifengine-0.4.1/engine/core/model/metamodel/timeprovider.cpp000066400000000000000000000062111304641216200241260ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/exception.h" #include "util/time/timemanager.h" #include "timeprovider.h" namespace FIFE { TimeProvider::TimeProvider(TimeProvider* master): m_master(master), m_multiplier(1.0) { m_time_static = m_time_scaled = master ? master->getGameTime() : TimeManager::instance()->getTime(); } TimeProvider::~TimeProvider() {} void TimeProvider::setMultiplier(float multiplier) { if (multiplier < 0.0) { throw NotSupported("Negative time multiplier are not supported"); } m_time_static = getPreciseGameTime(); m_time_scaled = m_master ? m_master->getPreciseGameTime() : static_cast(TimeManager::instance()->getTime()); m_multiplier = multiplier; } float TimeProvider::getMultiplier() const { return m_multiplier; } float TimeProvider::getTotalMultiplier() const { if (m_master) { return m_master->getTotalMultiplier() * m_multiplier; } else { return m_multiplier; } } uint32_t TimeProvider::getGameTime() const { return static_cast(getPreciseGameTime()); } double TimeProvider::getPreciseGameTime() const { return m_time_static + m_multiplier * ((m_master ? m_master->getPreciseGameTime() : static_cast(TimeManager::instance()->getTime())) - m_time_scaled); } uint32_t scaleTime(float multiplier, uint32_t ticks) { return static_cast(static_cast(ticks) * multiplier); } } fifengine-0.4.1/engine/core/model/metamodel/timeprovider.h000066400000000000000000000065511304641216200236020ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_TIME_PROVIDER_H #define FIFE_TIME_PROVIDER_H // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/fife_stdint.h" #include "util/base/exception.h" namespace FIFE { /** Timeprovider is an utility providing time management functionality * You can have hierarchy of time providers, whose multiplier can be changed independently. * Changing providers upper in the hierarchy, changes also all subproviders with the same ratio */ class TimeProvider { public: /** Constructor * In case there there is no provider master, you can use NULL */ explicit TimeProvider(TimeProvider* master); ~TimeProvider(); /** With multiplier, you can adjust the time speed. 0.5 means time runs half as slow, * while 2.0 means it runs twice as fast */ void setMultiplier(float multiplier); /** @see setMultiplier. Returns mutliplier for this single provider */ float getMultiplier() const; /** @see setMultiplier. Returns mutliplier for whole chain of timeproviders * E.g. if master has multiplier 2.0 and this has 0.5, end result = 1.0 */ float getTotalMultiplier() const; /** Returns current game ticks, already scaled. */ uint32_t getGameTime() const; private: TimeProvider* m_master; float m_multiplier; double m_time_static, m_time_scaled; /** Returns current game ticks, already scaled, more precise. */ double getPreciseGameTime() const; }; /** Utility function to calculate time scaling. Mostly done to avoid littering other code * with related casting * @return multiplier * ticks */ uint32_t scaleTime(float multiplier, uint32_t ticks); } //FIFE #endif fifengine-0.4.1/engine/core/model/metamodel/timeprovider.i000066400000000000000000000035011304641216200235730ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "model/metamodel/timeprovider.h" %} namespace FIFE { class TimeProvider { public: TimeProvider(TimeProvider* master); ~TimeProvider(); void setMultiplier(float multiplier); float getMultiplier() const; float getTotalMultiplier() const; uint32_t getGameTime() const; }; } fifengine-0.4.1/engine/core/model/model.cpp000066400000000000000000000216151304641216200205530ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/structures/purge.h" #include "util/log/logger.h" #include "model/metamodel/ipather.h" #include "model/metamodel/object.h" #include "model/metamodel/grids/cellgrid.h" #include "structures/map.h" #include "structures/layer.h" #include "structures/instance.h" #include "util/base/exception.h" #include "view/rendererbase.h" #include "video/renderbackend.h" #include "model.h" namespace FIFE { static Logger _log(LM_MODEL); Model::Model(RenderBackend* renderbackend, const std::vector& renderers) : FifeClass(), m_last_namespace(NULL), m_timeprovider(NULL), m_renderbackend(renderbackend), m_renderers(renderers){ } Model::~Model() { purge(m_maps); for(std::list::iterator nspace = m_namespaces.begin(); nspace != m_namespaces.end(); ++nspace) purge_map(nspace->second); purge(m_pathers); purge(m_created_grids); purge(m_adopted_grids); } Map* Model::createMap(const std::string& identifier) { std::list::const_iterator it = m_maps.begin(); for(; it != m_maps.end(); ++it) { if(identifier == (*it)->getId()) { throw NameClash(identifier); } } Map* map = new Map(identifier, m_renderbackend, m_renderers, &m_timeprovider); m_maps.push_back(map); return map; } void Model::adoptPather(IPather* pather) { m_pathers.push_back(pather); } IPather* Model::getPather(const std::string& pathername) { std::vector::const_iterator it = m_pathers.begin(); for(; it != m_pathers.end(); ++it) { if ((*it)->getName() == pathername) { return *it; } } FL_WARN(_log, "No pather of requested type \"" + pathername + "\" found."); return NULL; } void Model::adoptCellGrid(CellGrid* grid) { m_adopted_grids.push_back(grid); } CellGrid* Model::getCellGrid(const std::string& gridtype) { std::vector::const_iterator it = m_adopted_grids.begin(); for(; it != m_adopted_grids.end(); ++it) { if ((*it)->getType() == gridtype) { CellGrid* newcg = (*it)->clone(); m_created_grids.push_back(newcg); return newcg; } } FL_WARN(_log, "No cellgrid of requested type \"" + gridtype + "\" found."); return NULL; } Map* Model::getMap(const std::string& identifier) const { std::list::const_iterator it = m_maps.begin(); for(; it != m_maps.end(); ++it) { if((*it)->getId() == identifier) return *it; } throw NotFound(std::string("Tried to get non-existent map: ") + identifier + "."); } void Model::deleteMap(Map* map) { std::list::iterator it = m_maps.begin(); for(; it != m_maps.end(); ++it) { if(*it == map) { delete *it; m_maps.erase(it); return ; } } } uint32_t Model::getMapCount() const { return m_maps.size(); } void Model::deleteMaps() { purge(m_maps); m_maps.clear(); } uint32_t Model::getActiveCameraCount() const { uint32_t count = 0; std::list::const_iterator it = m_maps.begin(); for(; it != m_maps.end(); ++it) { count += (*it)->getActiveCameraCount(); } return count; } std::list Model::getNamespaces() const { std::list namespace_list; std::list::const_iterator nspace = m_namespaces.begin(); for(; nspace != m_namespaces.end(); ++nspace) { namespace_list.push_back(nspace->first); } return namespace_list; } Object* Model::createObject(const std::string& identifier, const std::string& name_space, Object* parent) { // Find or create namespace namespace_t* nspace = selectNamespace(name_space); if(!nspace) { m_namespaces.push_back(namespace_t(name_space,objectmap_t())); nspace = selectNamespace(name_space); } // Check for nameclashes objectmap_t::const_iterator it = nspace->second.find(identifier); if( it != nspace->second.end() ) { throw NameClash(identifier); } // Finally insert & create Object* object = new Object(identifier, name_space, parent); nspace->second[identifier] = object; return object; } bool Model::deleteObject(Object* object) { // WARNING: This code has obviously not been tested (thoroughly). // Check if any instances exist. If yes - bail out. std::list::const_iterator jt; std::vector::const_iterator kt; for(std::list::iterator it = m_maps.begin(); it != m_maps.end(); ++it) { for(jt = (*it)->getLayers().begin(); jt != (*it)->getLayers().end(); ++jt) { for(kt = (*jt)->getInstances().begin(); kt != (*jt)->getInstances().end(); ++kt) { Object* o = (*kt)->getObject(); if(o == object) { return false; } } } } // Check if the namespace exists namespace_t* nspace = selectNamespace(object->getNamespace()); if(!nspace) return true; // If yes - delete+erase object. objectmap_t::iterator it = nspace->second.find(object->getId()); if( it != nspace->second.end()) { delete it->second; nspace->second.erase(it); } return true; } bool Model::deleteObjects() { // If we have layers with instances - bail out. std::list::const_iterator jt; for(std::list::iterator it = m_maps.begin(); it != m_maps.end(); ++it) { for(jt = (*it)->getLayers().begin(); jt != (*it)->getLayers().end(); ++jt) { if((*jt)->hasInstances()) return false; } } // Otherwise delete every object in every namespace std::list::iterator nspace = m_namespaces.begin(); while(nspace != m_namespaces.end()) { objectmap_t::iterator it = nspace->second.begin(); for(; it != nspace->second.end(); ++it) { delete it->second; } nspace = m_namespaces.erase(nspace); } m_last_namespace = 0; return true; } Object* Model::getObject(const std::string& id, const std::string& name_space) { namespace_t* nspace = selectNamespace(name_space); if(nspace) { objectmap_t::iterator it = nspace->second.find(id); if( it != nspace->second.end() ) return it->second; } return NULL; } std::list Model::getObjects(const std::string& name_space) const { std::list object_list; const namespace_t* nspace = selectNamespace(name_space); if(nspace) { objectmap_t::const_iterator it = nspace->second.begin(); for(; it != nspace->second.end(); ++it ) object_list.push_back(it->second); } return object_list; } const Model::namespace_t* Model::selectNamespace(const std::string& name_space) const { std::list::const_iterator nspace = m_namespaces.begin(); for(; nspace != m_namespaces.end(); ++nspace) { if( nspace->first == name_space ) { return &(*nspace); } } return NULL; } Model::namespace_t* Model::selectNamespace(const std::string& name_space) { if( m_last_namespace && m_last_namespace->first == name_space ) return m_last_namespace; std::list::iterator nspace = m_namespaces.begin(); for(; nspace != m_namespaces.end(); ++nspace) { if( nspace->first == name_space ) { m_last_namespace = &(*nspace); return m_last_namespace; } } m_last_namespace = 0; return NULL; } void Model::update() { std::list::iterator it = m_maps.begin(); for(; it != m_maps.end(); ++it) { (*it)->update(); } std::vector::iterator jt = m_pathers.begin(); for(; jt != m_pathers.end(); ++jt) { (*jt)->update(); } } } //FIFE fifengine-0.4.1/engine/core/model/model.h000066400000000000000000000142021304641216200202120ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2006-2011 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_MODEL_H #define FIFE_MODEL_H // Standard C++ library includes #include #include #include #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/fifeclass.h" #include "model/structures/map.h" #include "model/metamodel/timeprovider.h" namespace FIFE { class RenderBackend; class RendererBase; class MetaModel; class IPather; class Object; /** * A model is a facade for everything in the model. */ class Model: public FifeClass { public: /** Constructor * */ Model(RenderBackend* renderbackend, const std::vector& renderers); /** Destructor * */ ~Model(); /** Add a map this model, and get a pointer to it. * The returned pointer is owned by the Model, so don't delete it! */ Map* createMap(const std::string& identifier); /** Remove a map from this model */ void deleteMap(Map*); /** Get all the maps in the model. */ const std::list& getMaps() const { return m_maps; } /** Get a map. * * @param identifier the id of the map to be found. */ Map* getMap(const std::string& identifier) const; /** Return the number of maps in this model */ uint32_t getMapCount() const; /** Removes all maps from this model */ void deleteMaps(); /** Return the number of enabled cameras in this model. */ uint32_t getActiveCameraCount() const; /** Get a list of namespaces currently referenced by objects in the metamodel. */ std::list getNamespaces() const; /** Add an object to the metamodel. * * @param identifier A string for identifying this object; must be unique for its namespace. * @param name_space A string identifying the namespace this object resides in. * @param parent Objects may optionally inherit values from a parent object. * @note This object belongs to the model, so don't delete the returned pointer */ Object* createObject(const std::string& identifier, const std::string& name_space, Object* parent=0); /** Attempt to remove an object from the model * Fails and returns false if the object is referenced by an instance. */ bool deleteObject(Object*); /** Attempt to remove all objects from the model * Fails and returns false if any maps with instances are present. */ bool deleteObjects(); /** Get an object by its id. Returns 0 if object is not found. */ Object* getObject(const std::string& id, const std::string& name_space); /** Get all the objects in the given namespace. */ std::list getObjects(const std::string& name_space) const; /** Adds pather to model. Moves ownership to model */ void adoptPather(IPather* pather); /** Returns pather corresponding given name. If none found, returns NULL */ IPather* getPather(const std::string& pathername); /** Adds cellgrid to model. Moves ownership to model */ void adoptCellGrid(CellGrid* grid); /** Returns new copy of cellgrid corresponding given name. If none found, returns NULL */ CellGrid* getCellGrid(const std::string& gridtype); /** Called periodically to update events on model */ void update(); /** Sets speed for the model. With speed 1.0, everything runs with normal speed. * With speed 2.0, clock is ticking twice as fast. With 0, everything gets paused. * Negavtive values are not supported (throws NotSupported exception). */ void setTimeMultiplier(float multip) { m_timeprovider.setMultiplier(multip); } /** Gets model speed. @see setTimeMultiplier. */ double getTimeMultiplier() const { return m_timeprovider.getMultiplier(); } private: std::list m_maps; typedef std::map objectmap_t; typedef std::pair namespace_t; std::list m_namespaces; /// Used to remember last 'selected' namespace. namespace_t* m_last_namespace; /// Convenience function to retrieve a pointer to a namespace or NULL if it doesn't exist namespace_t* selectNamespace(const std::string& name_space); /// Convenience function to retrieve a pointer to a namespace or NULL if it doesn't exist const namespace_t* selectNamespace(const std::string& name_space) const; std::vector m_pathers; std::vector m_created_grids; std::vector m_adopted_grids; //std::vector m_created_grids; TimeProvider m_timeprovider; RenderBackend* m_renderbackend; std::vector m_renderers; }; }; //FIFE #endif fifengine-0.4.1/engine/core/model/model.i000066400000000000000000000053031304641216200202150ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2006-2011 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "model/model.h" %} namespace FIFE { class Map; class Object; } namespace std { %template(StringList) list; %template(ObjectList) list; %template(MapList) list; } namespace FIFE { class IPather; class Model: public FifeClass { public: Model(RenderBackend* renderbackend, const std::vector& renderers); ~Model(); Map* createMap(const std::string& identifier); void deleteMap(Map*); const std::list& getMaps() const; Map* getMap(const std::string& id) const; std::list getNamespaces() const; Object* createObject(const std::string& identifier, const std::string& name_space, Object* parent=0); bool deleteObject(Object*); bool deleteObjects(); Object* getObject(const std::string& id, const std::string& name_space); std::list getObjects(const std::string& name_space) const; uint32_t getMapCount() const; void deleteMaps(); void adoptPather(IPather* pather); IPather* getPather(const std::string& pathername); CellGrid* getCellGrid(const std::string& gridtype); void setTimeMultiplier(float multip); double getTimeMultiplier() const; }; } fifengine-0.4.1/engine/core/model/structures/000077500000000000000000000000001304641216200211655ustar00rootroot00000000000000fifengine-0.4.1/engine/core/model/structures/cell.cpp000066400000000000000000000447531304641216200226250ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/log/logger.h" #include "view/visual.h" #include "cell.h" #include "cellcache.h" #include "instance.h" #include "layer.h" namespace FIFE { static Logger _log(LM_STRUCTURES); Cell::Cell(int32_t coordint, ModelCoordinate coordinate, Layer* layer): m_coordId(coordint), m_coordinate(coordinate), m_layer(layer), m_zone(NULL), m_transition(NULL), m_inserted(false), m_protect(false), m_type(CTYPE_NO_BLOCKER), m_fowType(CELLV_CONCEALED) { } Cell::~Cell() { // calls CellDeleteListener, e.g. for transition if (!m_deleteListeners.empty()) { std::vector::iterator it = m_deleteListeners.begin(); for (; it != m_deleteListeners.end(); ++it) { if (*it) { (*it)->onCellDeleted(this); } } } // remove cell from zone if (m_zone) { m_zone->removeCell(this); } // delete m_transition; if (m_transition) { deleteTransition(); } // remove cell from cache (costs, narrow, area) m_layer->getCellCache()->removeCell(this); } void Cell::addInstances(const std::list& instances) { CellCache* cache = m_layer->getCellCache(); for (std::list::const_iterator it = instances.begin(); it != instances.end(); ++it) { std::pair::iterator, bool> ret = m_instances.insert(*it); if (ret.second) { if ((*it)->isVisitor()) { uint16_t visitorRadius = (*it)->getVisitorRadius(); std::vector cells; std::vector cellsExt; switch((*it)->getVisitorShape()) { case ITYPE_QUAD_SHAPE: { Rect size(m_coordinate.x-visitorRadius, m_coordinate.y-visitorRadius, (visitorRadius*2)+1, (visitorRadius*2)+1); cells = cache->getCellsInRect(size); Rect sizeExt(size.x-1, size.y-1, size.w+2, size.h+2); cellsExt = cache->getCellsInRect(sizeExt); } break; case ITYPE_CIRCLE_SHAPE: { cells = cache->getCellsInCircle(m_coordinate, visitorRadius); cellsExt = cache->getCellsInCircle(m_coordinate, visitorRadius+1); } break; default: continue; } for (std::vector::iterator szit = cellsExt.begin(); szit != cellsExt.end(); ++szit) { bool found = false; for (std::vector::iterator sit = cells.begin(); sit != cells.end(); ++sit) { if (*sit == *szit) { found = true; (*szit)->addVisitorInstance(*it); (*szit)->setFoWType(CELLV_REVEALED); break; } } if (!found) { const std::vector& cv = (*szit)->getVisitorInstances(); if (cv.empty()) { (*szit)->setFoWType(CELLV_MASKED); } } } cache->setFowUpdate(true); } if ((*it)->isSpecialCost()) { cache->registerCost((*it)->getCostId(), (*it)->getCost()); cache->addCellToCost((*it)->getCostId(), this); } if ((*it)->isSpecialSpeed()) { cache->setSpeedMultiplier(this, (*it)->getSpeed()); } if ((*it)->getObject()->getArea() != "") { cache->addCellToArea((*it)->getObject()->getArea(), this); } callOnInstanceEntered(*it); } } updateCellBlockingInfo(); } void Cell::addInstance(Instance* instance) { std::pair::iterator, bool> ret = m_instances.insert(instance); if (ret.second) { CellCache* cache = m_layer->getCellCache(); if (instance->isVisitor()) { uint16_t visitorRadius = instance->getVisitorRadius(); std::vector cells; std::vector cellsExt; switch(instance->getVisitorShape()) { case ITYPE_QUAD_SHAPE: { Rect size(m_coordinate.x-visitorRadius, m_coordinate.y-visitorRadius, (visitorRadius*2)+1, (visitorRadius*2)+1); cells = cache->getCellsInRect(size); Rect sizeExt(size.x-1, size.y-1, size.w+2, size.h+2); cellsExt = cache->getCellsInRect(sizeExt); } break; case ITYPE_CIRCLE_SHAPE: { cells = cache->getCellsInCircle(m_coordinate, visitorRadius); cellsExt = cache->getCellsInCircle(m_coordinate, visitorRadius+1); } break; default: break; } for (std::vector::iterator szit = cellsExt.begin(); szit != cellsExt.end(); ++szit) { bool found = false; for (std::vector::iterator sit = cells.begin(); sit != cells.end(); ++sit) { if (*sit == *szit) { found = true; (*szit)->addVisitorInstance(instance); (*szit)->setFoWType(CELLV_REVEALED); break; } } if (!found) { const std::vector& cv = (*szit)->getVisitorInstances(); if (cv.empty()) { (*szit)->setFoWType(CELLV_MASKED); } } } cache->setFowUpdate(true); } if (instance->isSpecialCost()) { cache->registerCost(instance->getCostId(), instance->getCost()); cache->addCellToCost(instance->getCostId(), this); } if (instance->isSpecialSpeed()) { cache->setSpeedMultiplier(this, instance->getSpeed()); } if (instance->getObject()->getArea() != "") { cache->addCellToArea(instance->getObject()->getArea(), this); } callOnInstanceEntered(instance); updateCellBlockingInfo(); } } void Cell::changeInstance(Instance* instance) { updateCellBlockingInfo(); } void Cell::removeInstance(Instance* instance) { if (m_instances.erase(instance) == 0) { FL_ERR(_log, "Tried to remove an instance from cell, but given instance could not be found."); return; } CellCache* cache = m_layer->getCellCache(); if (instance->isVisitor()) { uint16_t visitorRadius = instance->getVisitorRadius(); std::vector cells; switch(instance->getVisitorShape()) { case ITYPE_QUAD_SHAPE: { Rect size(m_coordinate.x-visitorRadius, m_coordinate.y-visitorRadius, (visitorRadius*2)+1, (visitorRadius*2)+1); cells = cache->getCellsInRect(size); } break; case ITYPE_CIRCLE_SHAPE: { cells = cache->getCellsInCircle(m_coordinate, visitorRadius); } break; default: break; } for (std::vector::iterator it = cells.begin(); it != cells.end(); ++it) { (*it)->removeVisitorInstance(instance); const std::vector& cv = (*it)->getVisitorInstances(); if (!cv.empty()) { (*it)->setFoWType(CELLV_REVEALED); } else { (*it)->setFoWType(CELLV_MASKED); } } cache->setFowUpdate(true); } if (instance->isSpecialCost()) { cache->removeCellFromCost(instance->getCostId(), this); } if (instance->isSpecialSpeed()) { cache->resetSpeedMultiplier(this); // try to find other speed value if (!m_instances.empty()) { std::set::iterator it = m_instances.begin(); for (; it != m_instances.end(); ++it) { if ((*it)->isSpecialSpeed()) { cache->setSpeedMultiplier(this, (*it)->getSpeed()); break; } } } } if (instance->getObject()->getArea() != "") { cache->removeCellFromArea(instance->getObject()->getArea(), this); } callOnInstanceExited(instance); updateCellBlockingInfo(); } bool Cell::isNeighbor(Cell* cell) { std::vector::iterator it = m_neighbors.begin(); for (; it != m_neighbors.end(); ++it) { if (*it == cell) { return true; } } return false; } void Cell::updateCellBlockingInfo() { CellTypeInfo old_type = m_type; m_coordinate.z = MIN_CELL_Z; if (!m_instances.empty()) { int32_t pos = -1; bool cellblock = (m_type == CTYPE_CELL_NO_BLOCKER || m_type == CTYPE_CELL_BLOCKER); for (std::set::iterator it = m_instances.begin(); it != m_instances.end(); ++it) { if (cellblock) { continue; } uint8_t stackpos = (*it)->getCellStackPosition(); if (stackpos < pos) { continue; } // update cell z if (m_coordinate.z < (*it)->getLocationRef().getLayerCoordinates().z && (*it)->getObject()->isStatic()) { m_coordinate.z = (*it)->getLocationRef().getLayerCoordinates().z; } if ((*it)->getCellStackPosition() > pos) { pos = (*it)->getCellStackPosition(); if ((*it)->isBlocking()) { if (!(*it)->getObject()->isStatic()) { m_type = CTYPE_DYNAMIC_BLOCKER; } else { m_type = CTYPE_STATIC_BLOCKER; } } else { m_type = CTYPE_NO_BLOCKER; } } else { // if positions are equal then static_blockers win if ((*it)->isBlocking() && m_type != CTYPE_STATIC_BLOCKER) { if (!(*it)->getObject()->isStatic()) { m_type = CTYPE_DYNAMIC_BLOCKER; } else { m_type = CTYPE_STATIC_BLOCKER; } } } } } else { if (m_type == CTYPE_STATIC_BLOCKER || m_type == CTYPE_DYNAMIC_BLOCKER) { m_type = CTYPE_NO_BLOCKER; } } if (Mathd::Equal(m_coordinate.z, MIN_CELL_Z)) { m_coordinate.z = 0; } if (old_type != m_type) { bool block = (m_type == CTYPE_STATIC_BLOCKER || m_type == CTYPE_DYNAMIC_BLOCKER || m_type == CTYPE_CELL_BLOCKER); m_layer->getCellCache()->setBlockingUpdate(true); callOnBlockingChanged(block); } } void Cell::updateCellFowInfo() { bool visitors = !m_visitors.empty(); bool instances = !m_instances.empty(); if (!visitors && !instances && m_fowType == CELLV_REVEALED) { m_fowType = CELLV_MASKED; } else if (visitors && instances) { CellCache* cache = m_layer->getCellCache(); std::vector::iterator visit = m_visitors.begin(); for (; visit != m_visitors.end(); ++visit) { std::set::iterator insfind = m_instances.find(*visit); if (insfind != m_instances.end()) { uint16_t visitorRadius = (*visit)->getVisitorRadius(); std::vector cells; std::vector cellsExt; switch((*visit)->getVisitorShape()) { case ITYPE_QUAD_SHAPE: { Rect size(m_coordinate.x-visitorRadius, m_coordinate.y-visitorRadius, (visitorRadius*2)+1, (visitorRadius*2)+1); cells = cache->getCellsInRect(size); Rect sizeExt(size.x-1, size.y-1, size.w+2, size.h+2); cellsExt = cache->getCellsInRect(sizeExt); } break; case ITYPE_CIRCLE_SHAPE: { cells = cache->getCellsInCircle(m_coordinate, visitorRadius); cellsExt = cache->getCellsInCircle(m_coordinate, visitorRadius+1); } break; default: continue; } for (std::vector::iterator szit = cellsExt.begin(); szit != cellsExt.end(); ++szit) { bool found = false; for (std::vector::iterator sit = cells.begin(); sit != cells.end(); ++sit) { if (*sit == *szit) { found = true; (*szit)->addVisitorInstance(*visit); (*szit)->setFoWType(CELLV_REVEALED); break; } } if (!found) { const std::vector& cv = (*szit)->getVisitorInstances(); if (cv.empty()) { (*szit)->setFoWType(CELLV_MASKED); } } } } } } } void Cell::updateCellInfo() { updateCellBlockingInfo(); updateCellFowInfo(); if (!m_deleteListeners.empty()) { m_deleteListeners.erase( std::remove(m_deleteListeners.begin(), m_deleteListeners.end(), (CellDeleteListener*)NULL), m_deleteListeners.end()); } if (!m_changeListeners.empty()) { m_changeListeners.erase( std::remove(m_changeListeners.begin(), m_changeListeners.end(), (CellChangeListener*)NULL), m_changeListeners.end()); } } void Cell::setFoWType(CellVisualEffect type) { m_fowType = type; } CellVisualEffect Cell::getFoWType() { return m_fowType; } void Cell::addVisitorInstance(Instance* instance) { if (m_visitors.empty()) { m_visitors.push_back(instance); return; } std::vector::iterator it = m_visitors.begin(); for (; it != m_visitors.end(); ++it) { if (*it == instance) { return; } } m_visitors.push_back(instance); } void Cell::removeVisitorInstance(Instance* instance) { std::vector::iterator it = m_visitors.begin(); for (; it != m_visitors.end(); ++it) { if (*it == instance) { m_visitors.erase(it); break; } } } const std::vector& Cell::getVisitorInstances() { return m_visitors; } bool Cell::defaultCost() { return m_layer->getCellCache()->isDefaultCost(this); } void Cell::setCostMultiplier(double multi) { m_layer->getCellCache()->setCostMultiplier(this, multi); } double Cell::getCostMultiplier() { return m_layer->getCellCache()->getCostMultiplier(this); } void Cell::resetCostMultiplier() { m_layer->getCellCache()->resetCostMultiplier(this); } bool Cell::defaultSpeed() { return m_layer->getCellCache()->isDefaultSpeed(this); } void Cell::setSpeedMultiplier(double multi) { m_layer->getCellCache()->setSpeedMultiplier(this, multi); } double Cell::getSpeedMultiplier() { return m_layer->getCellCache()->getSpeedMultiplier(this); } void Cell::resetSpeedMultiplier() { m_layer->getCellCache()->resetSpeedMultiplier(this); } Zone* Cell::getZone() { return m_zone; } void Cell::setZone(Zone* zone) { m_zone = zone; } void Cell::resetZone() { m_inserted = false; m_zone = NULL; } bool Cell::isInserted() { return m_inserted; } void Cell::setInserted(bool inserted) { m_inserted = inserted; } bool Cell::isZoneProtected() { return m_protect; } void Cell::setZoneProtected(bool protect) { m_protect = protect; } CellTypeInfo Cell::getCellType() { return m_type; } void Cell::setCellType(CellTypeInfo type) { m_type = type; } const std::set& Cell::getInstances() { return m_instances; } void Cell::setCellId(int32_t id) { m_coordId = id; } int32_t Cell::getCellId() { return m_coordId; } const ModelCoordinate Cell::getLayerCoordinates() const { return m_coordinate; } void Cell::addNeighbor(Cell* cell) { m_neighbors.push_back(cell); } const std::vector& Cell::getNeighbors() { return m_neighbors; } void Cell::resetNeighbors() { m_neighbors.clear(); if (m_transition) { CellCache* cache = m_transition->m_layer->getCellCache(); if (cache) { Cell* cell = cache->getCell(m_transition->m_mc); if (cell) { m_neighbors.push_back(cell); } } } } Layer* Cell::getLayer() { return m_layer; } void Cell::createTransition(Layer* layer, const ModelCoordinate& mc, bool immediate) { TransitionInfo* trans = new TransitionInfo(layer); // if layers are the same then it's a portal if (layer != m_layer) { trans->m_difflayer = true; } trans->m_immediate = immediate; trans->m_mc = mc; deleteTransition(); m_transition = trans; Cell* c = layer->getCellCache()->getCell(mc); if (c) { m_neighbors.push_back(c); c->addDeleteListener(this); m_layer->getCellCache()->addTransition(this); } else { delete m_transition; m_transition = NULL; } } void Cell::deleteTransition() { if (m_transition) { Cell* oldc = m_transition->m_layer->getCellCache()->getCell(m_transition->m_mc); std::vector::iterator it = m_neighbors.begin(); for (; it != m_neighbors.end(); ++it) { if (*it == oldc) { m_neighbors.erase(it); break; } } oldc->removeDeleteListener(this); m_layer->getCellCache()->removeTransition(this); delete m_transition; m_transition = NULL; } } TransitionInfo* Cell::getTransition() { return m_transition; } void Cell::addDeleteListener(CellDeleteListener* listener) { m_deleteListeners.push_back(listener); } void Cell::removeDeleteListener(CellDeleteListener* listener) { std::vector::iterator it = m_deleteListeners.begin(); for (; it != m_deleteListeners.end(); ++it) { if (*it == listener) { *it = NULL; break; } } } void Cell::onCellDeleted(Cell* cell) { std::vector::iterator it = m_neighbors.begin(); for (; it != m_neighbors.end(); ++it) { if (*it == cell) { deleteTransition(); break; } } } void Cell::addChangeListener(CellChangeListener* listener) { m_changeListeners.push_back(listener); } void Cell::removeChangeListener(CellChangeListener* listener) { std::vector::iterator it = m_changeListeners.begin(); for (; it != m_changeListeners.end(); ++it) { if (*it == listener) { *it = NULL; break; } } } void Cell::callOnInstanceEntered(Instance* instance) { if (m_changeListeners.empty()) { return; } std::vector::iterator i = m_changeListeners.begin(); while (i != m_changeListeners.end()) { if (*i) { (*i)->onInstanceEnteredCell(this, instance); } ++i; } } void Cell::callOnInstanceExited(Instance* instance) { if (m_changeListeners.empty()) { return; } std::vector::iterator i = m_changeListeners.begin(); while (i != m_changeListeners.end()) { if (*i) { (*i)->onInstanceExitedCell(this, instance); } ++i; } } void Cell::callOnBlockingChanged(bool blocks) { if (m_changeListeners.empty()) { return; } std::vector::iterator i = m_changeListeners.begin(); while (i != m_changeListeners.end()) { if (*i) { (*i)->onBlockingChangedCell(this, m_type, blocks); } ++i; } } } // FIFE fifengine-0.4.1/engine/core/model/structures/cell.h000066400000000000000000000321671304641216200222660ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_CELL_H #define FIFE_CELL_H // Standard C++ library includes #include #include #include #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/fifeclass.h" #include "model/metamodel/modelcoords.h" namespace FIFE { class Instance; class Layer; class Cell; class Zone; static const double MIN_CELL_Z = -9999999; /** Defines different blocker types. * * CTYPE_NO_BLOCKER means there is no blocker. * CTYPE_STATIC_BLOCKER means there is at least one blocking instance which is static. * CTYPE_DYNAMIC_BLOCKER means there is at least one blocking instance which is not static. * CTYPE_CELL_NO_BLOCKER means there will never be a blocker. Regardless of the instances on this cell. * CTYPE_CELL_BLOCKER means there will always be a blocker. Regardless of the instances on this cell. */ enum CellType { CTYPE_NO_BLOCKER = 0, CTYPE_CELL_NO_BLOCKER = 1, CTYPE_DYNAMIC_BLOCKER = 2, CTYPE_STATIC_BLOCKER = 3, CTYPE_CELL_BLOCKER = 4 }; typedef uint8_t CellTypeInfo; /** Defines different cell visuals which are used for Fog of War. * * CELLV_CONCEALED mark the cell as hidden. * CELLV_REVEALED mark the cell as explored and in visible range. * CELLV_MASKED mark the cell as explored but currently not in visible range. */ enum CellVisualType { CELLV_CONCEALED = 0, CELLV_REVEALED, CELLV_MASKED }; typedef uint8_t CellVisualEffect; /** Simple class to hold the data for transistions. */ class TransitionInfo { public: TransitionInfo(Layer* layer) { m_layer = layer; m_difflayer = false; m_immediate = true;} ~TransitionInfo() {}; //! target layer Layer* m_layer; //! target coordinates ModelCoordinate m_mc; //! is target on another layer bool m_difflayer; //! use immediate bool m_immediate; }; /** Listener interface for deletions happening on a cell, used for transistions. */ class CellDeleteListener { public: virtual ~CellDeleteListener() {}; /** Called when a cell gets deleted. * @param cell which will be deleted. */ virtual void onCellDeleted(Cell* cell) = 0; }; /** Listener interface for changes happening on a cell. */ class CellChangeListener { public: virtual ~CellChangeListener() {}; /** Called when some instance entered the cell. * @param cell where enter occurred. * @param instance which enter the cell. */ virtual void onInstanceEnteredCell(Cell* cell, Instance* instance) = 0; /** Called when some instance exited the cell. * @param cell where exit occurred. * @param instance which exit the cell. */ virtual void onInstanceExitedCell(Cell* cell, Instance* instance) = 0; /** Called when some instance changed its blocking property. * @param cell where exit occurred. * @param type blocking type @see CellType. * @param blocks true if the CellType indicates the cell as a blocker, otherwise false. */ virtual void onBlockingChangedCell(Cell* cell, CellTypeInfo type, bool blocks) = 0; }; /** A basic cell on a CellCache. */ class Cell: public FifeClass, public CellDeleteListener { public: /** Constructor * @param coordint A integer value that represents the cell identifier. Based on coordinates. * @param coordinate A ModelCoordinate that specifies the coordinates of the cell. * @param layer A pointer to the layer which is associated with the cell. */ Cell(int32_t coordint, ModelCoordinate coordinate, Layer* layer); /** Destructor */ ~Cell(); /** Adds instances to this cell. * @param instances A const reference to list that contains instances. */ void addInstances(const std::list& instances); /** Adds a instance to this cell. * @param instance A pointer to the instance. */ void addInstance(Instance* instance); /** Changes a instance on this cell. * @param instance A pointer to the instance. */ void changeInstance(Instance* instance); /** Removes a instance from this cell. * @param instance A pointer to the instance. */ void removeInstance(Instance* instance); /** Called to check if given cell is a neighbor. * @param cell A pointer to cell. * @return True if cell is a neighbor, otherwise false. */ bool isNeighbor(Cell* cell); /** Called to update cell data. * @return True if cell was changed since the last update, false otherwise. */ void updateCellInfo(); /** Returns if cell use default cost. * @return True if the cell use the default cost, otherwise false. */ bool defaultCost(); /** Changes the cell cost. * @param multi A double its value is used instead of the default cost. */ void setCostMultiplier(double multi); /** Returns the current cell cost. * @return The currently used cost value as a double. */ double getCostMultiplier(); /** Resets the cell cost to default, 1.0. */ void resetCostMultiplier(); /** Returns if cell use default speed. * @return True if the cell use the default speed, otherwise false. */ bool defaultSpeed(); /** Changes the cell speed. * @param multi A double its value is used instead of the default speed. */ void setSpeedMultiplier(double multi); /** Returns the current cell speed. * @return The currently used speed value as a double. */ double getSpeedMultiplier(); /** Resets the cell speed to default, 1.0. */ void resetSpeedMultiplier(); /** Returns zone. * @return A pointer to the zone. */ Zone* getZone(); /** Sets zone. * @param zone A pointer to the zone. */ void setZone(Zone* zone); /** Resets zone. * Zone pointer is NULL and isInserted() returns false. */ void resetZone(); /** Returns whether the cell is part of a zone. * @return True if the cell is inserted into a zone, otherwise false. */ bool isInserted(); /** Mark cell as inserted. * @param inserted A boolean, true marks the cell as inserted, false as not inserted. */ void setInserted(bool inserted); /** Returns whether the zone on this cell is protected. * @return True if the zone is protected, otherwise false. */ bool isZoneProtected(); /** Mark zone on this cell as protected. * @param protect A boolean, true marks the cell as inserted. */ void setZoneProtected(bool protect); /** Returns blocker type. * @see CellType */ CellTypeInfo getCellType(); /** Sets blocker type. * @see CellType */ void setCellType(CellTypeInfo type); /** Returns all instances on this cell. * @return A const reference to a set that refer to the instances on this cell. */ const std::set& getInstances(); /** Sets the cell identifier. * @param id A unique int value that is used as identifier. Based on the cell position. */ void setCellId(int32_t id); /** Returns the cell identifier. * @return A unique int value that is used as identifier. Based on the cell position. */ int32_t getCellId(); /** Returns the layer coordinates of this cell. * @return A const reference to a ModelCoordinate. */ const ModelCoordinate getLayerCoordinates() const; /** Adds a neighbor cell to this cell. * @param cell A pointer to the cell that should added as neighbor. */ void addNeighbor(Cell* cell); /** Returns the layer coordinates of this cell. * @return A const reference to a set of all neighbor cells. */ const std::vector& getNeighbors(); /** Removes all neighbors from cell. */ void resetNeighbors(); /** Returns the current layer. * @return A pointer to the currently used layer. */ Layer* getLayer(); /** Creates a transistion from this cell to the given layer and coordinates. * @param layer A pointer to the layer whereto the transition takes. * @param mc A const reference to a ModelCoordinate whereto the transition takes. * @param immediate A boolean, true means the transition is always used, if false the transistion is only used if it is a part of the path e.g. as an abbreviation. */ void createTransition(Layer* layer, const ModelCoordinate& mc, bool immediate = false); /** Removes the transistion from Cell and CellCache. */ void deleteTransition(); /** Returns the transition. * @return A pointer to the transition. */ TransitionInfo* getTransition(); /** Sets the cell visual. * @see CellVisualType */ void setFoWType(CellVisualEffect type); /** Returns the cell visual. * @see CellVisualType */ CellVisualEffect getFoWType(); /** Adds a instance as visitor to this cell. Instance visitor radius is then used e.g. for Fog of War. * @param instance A pointer to the instance. */ void addVisitorInstance(Instance* instance); /** Removes the visitor instance from this cell. * @param instance A pointer to the instance. */ void removeVisitorInstance(Instance* instance); /** Returns all visitor instances on this cell. * @return A const reference to a set of all visitor instances. */ const std::vector& getVisitorInstances(); /** Adds new cell delete listener. * @param listener A pointer to the listener. */ void addDeleteListener(CellDeleteListener* listener); /** Removes cell delete listener. * @param listener A pointer to the listener. */ void removeDeleteListener(CellDeleteListener* listener); /** Called when a cell gets deleted on this cell. If a delete listener was added. * @param cell A pointer to the cell which will be deleted. * @see CellDeleteListener */ void onCellDeleted(Cell* cell); /** Adds new cell change listener. * @param listener A pointer to the listener. * @see CellChangeListener */ void addChangeListener(CellChangeListener* listener); /** Removes cell change listener. * @param listener A pointer to the listener. * @see CellChangeListener */ void removeChangeListener(CellChangeListener* listener); /** Called when a instance entered this cell. * @param instance A pointer to the instance which will be entered. * @see CellChangeListener */ void callOnInstanceEntered(Instance* instance); /** Called when a instance exited this cell. * @param instance A pointer to the instance which will be exited. * @see CellChangeListener */ void callOnInstanceExited(Instance* instance); /** Called when the blocking property of this cell changed. * @param blocks A boolean, true mark the cell as blocker. * @see CellChangeListener */ void callOnBlockingChanged(bool blocks); private: void updateCellBlockingInfo(); void updateCellFowInfo(); //! holds coordinate as a unique integer id int32_t m_coordId; //! holds coordinate ModelCoordinate m_coordinate; //! parent layer Layer* m_layer; //! parent Zone Zone* m_zone; //! Pointer to Transistion TransitionInfo* m_transition; //! already inserted bool m_inserted; //! protected bool m_protect; //! CellType CellTypeInfo m_type; //! visual cell status CellVisualEffect m_fowType; // contained Instances std::set m_instances; //! contains visitor instances std::vector m_visitors; //! neighbor cells std::vector m_neighbors; //! delete listener std::vector m_deleteListeners; //! change listener std::vector m_changeListeners; }; } // FIFE #endif fifengine-0.4.1/engine/core/model/structures/cell.i000066400000000000000000000075411304641216200222650ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "model/structures/cell.h" %} namespace FIFE { class Instance; class Layer; class Cell; enum CellType { CTYPE_NO_BLOCKER = 0, CTYPE_STATIC_BLOCKER = 1, CTYPE_DYNAMIC_BLOCKER = 2, CTYPE_CELL_NO_BLOCKER = 3, CTYPE_CELL_BLOCKER = 4 }; typedef uint8_t CellTypeInfo; enum CellVisualType { CELLV_CONCEALED = 0, CELLV_REVEALED, CELLV_MASKED }; typedef uint8_t CellVisualEffect; %feature("director") CellChangeListener; class CellChangeListener { public: virtual ~CellChangeListener() {}; virtual void onInstanceEnteredCell(Cell* cell, Instance* instance) = 0; virtual void onInstanceExitedCell(Cell* cell, Instance* instance) = 0; virtual void onBlockingChangedCell(Cell* cell, CellTypeInfo type, bool blocks) = 0; }; %feature("director") CellDeleteListener; class CellDeleteListener { public: virtual ~CellDeleteListener() {}; virtual void onCellDeleted(Cell* cell) = 0; }; class Cell : public FifeClass { public: Cell(int32_t coordint, ModelCoordinate coordinate, Layer* layer); ~Cell(); void addInstances(const std::list& instances); void addInstance(Instance* instance); void changeInstance(Instance* instance); void removeInstance(Instance* instance); bool isNeighbor(Cell* cell); std::vector getNeighbors(); void updateCellInfo(); int32_t getCellId(); const ModelCoordinate getLayerCoordinates() const; bool defaultCost(); void setCostMultiplier(double multi); double getCostMultiplier(); void resetCostMultiplier(); bool defaultSpeed(); void setSpeedMultiplier(double multi); double getSpeedMultiplier(); void resetSpeedMultiplier(); const std::set& getInstances(); void setCellType(CellTypeInfo type); CellTypeInfo getCellType(); void setFoWType(CellVisualEffect type); CellVisualEffect getFoWType(); Layer* getLayer(); void createTransition(Layer* layer, const ModelCoordinate& mc); void deleteTransition(); void addChangeListener(CellChangeListener* listener); void removeChangeListener(CellChangeListener* listener); void addDeleteListener(CellDeleteListener* listener); void removeDeleteListener(CellDeleteListener* listener); }; } namespace std { %template(InstanceSet) set; %template(CellSet) set; %template(CellVector) vector; } fifengine-0.4.1/engine/core/model/structures/cellcache.cpp000066400000000000000000001277001304641216200236030ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "model/metamodel/grids/cellgrid.h" #include "util/log/logger.h" #include "util/structures/purge.h" #include "cellcache.h" #include "cell.h" #include "layer.h" #include "instance.h" #include "map.h" #include "instancetree.h" namespace FIFE { static Logger _log(LM_STRUCTURES); class CellCacheChangeListener : public LayerChangeListener { public: CellCacheChangeListener(Layer* layer) { m_layer = layer; } virtual ~CellCacheChangeListener() { } virtual void onLayerChanged(Layer* layer, std::vector& instances) { for(std::vector::iterator i = instances.begin(); i != instances.end(); ++i) { if ((*i)->isMultiCell()) { bool rotchange = ((*i)->getChangeInfo() & ICHANGE_ROTATION) == ICHANGE_ROTATION; bool locchange = ((*i)->getChangeInfo() & ICHANGE_LOC) == ICHANGE_LOC; bool celchange = ((*i)->getChangeInfo() & ICHANGE_CELL) == ICHANGE_CELL; bool blochange = ((*i)->getChangeInfo() & ICHANGE_BLOCK) == ICHANGE_BLOCK; if (!rotchange && !locchange && !celchange && !blochange) { continue; } int32_t oldrotation = (*i)->getOldRotation(); int32_t newrotation = (*i)->getRotation(); if (!rotchange) { oldrotation = newrotation; } if (rotchange || locchange || celchange) { // update visual positions (*i)->updateMultiInstances(); } if (rotchange || celchange) { // update cache positions ModelCoordinate oldmc; ModelCoordinate newmc; if (m_layer == layer) { oldmc = (*i)->getOldLocationRef().getLayerCoordinates(); newmc = (*i)->getLocationRef().getLayerCoordinates(); } else { oldmc = m_layer->getCellGrid()->toLayerCoordinates( layer->getCellGrid()->toMapCoordinates((*i)->getOldLocationRef().getExactLayerCoordinatesRef())); newmc = m_layer->getCellGrid()->toLayerCoordinates( layer->getCellGrid()->toMapCoordinates((*i)->getLocationRef().getExactLayerCoordinatesRef())); } if (!celchange) { oldmc = newmc; } CellGrid* cg = m_layer->getCellGrid(); const std::vector& multiinstances = (*i)->getMultiInstances(); std::vector::const_iterator it = multiinstances.begin(); for (; it != multiinstances.end(); ++it) { // remove std::vector coordinates = cg->toMultiCoordinates(oldmc, (*it)->getObject()->getMultiPartCoordinates(oldrotation)); std::vector::iterator mcit = coordinates.begin(); for (; mcit != coordinates.end(); ++mcit) { Cell* cell = m_layer->getCellCache()->getCell(*mcit); if (cell) { cell->removeInstance(*it); } } // add coordinates = cg->toMultiCoordinates(newmc, (*it)->getObject()->getMultiPartCoordinates(newrotation)); mcit = coordinates.begin(); for (; mcit != coordinates.end(); ++mcit) { Cell* cell = m_layer->getCellCache()->getCell(*mcit); if (cell) { cell->addInstance(*it); } } } if (celchange) { // leader instance Cell* oldcell = m_layer->getCellCache()->getCell(oldmc); Cell* newcell = m_layer->getCellCache()->getCell(newmc); if (oldcell == newcell) { continue; } if (oldcell) { oldcell->removeInstance(*i); } if (newcell) { newcell->addInstance(*i); } } } continue; } if ((*i)->getObject()->isMultiPart()) { continue; } if (((*i)->getChangeInfo() & ICHANGE_BLOCK) == ICHANGE_BLOCK) { ModelCoordinate mc; if (m_layer == layer) { mc = (*i)->getLocationRef().getLayerCoordinates(); } else { mc = m_layer->getCellGrid()->toLayerCoordinates( layer->getCellGrid()->toMapCoordinates((*i)->getLocationRef().getExactLayerCoordinatesRef())); } Cell* cell = m_layer->getCellCache()->getCell(mc); if (cell) { cell->changeInstance(*i); } } if (((*i)->getChangeInfo() & ICHANGE_CELL) == ICHANGE_CELL) { ModelCoordinate oldmc; ModelCoordinate newmc; if (m_layer == layer) { oldmc = (*i)->getOldLocationRef().getLayerCoordinates(); newmc = (*i)->getLocationRef().getLayerCoordinates(); } else { oldmc = m_layer->getCellGrid()->toLayerCoordinates( layer->getCellGrid()->toMapCoordinates((*i)->getOldLocationRef().getExactLayerCoordinatesRef())); newmc = m_layer->getCellGrid()->toLayerCoordinates( layer->getCellGrid()->toMapCoordinates((*i)->getLocationRef().getExactLayerCoordinatesRef())); } Cell* oldcell = m_layer->getCellCache()->getCell(oldmc); Cell* newcell = m_layer->getCellCache()->getCell(newmc); if (oldcell == newcell) { continue; } if (oldcell) { oldcell->removeInstance(*i); } if (newcell) { newcell->addInstance(*i); } } } } virtual void onInstanceCreate(Layer* layer, Instance* instance) { ModelCoordinate mc; if (m_layer == layer) { mc = instance->getLocationRef().getLayerCoordinates(); } else { mc = m_layer->getCellGrid()->toLayerCoordinates( layer->getCellGrid()->toMapCoordinates(instance->getLocationRef().getExactLayerCoordinatesRef())); } CellCache* cache = m_layer->getCellCache(); Location loc(m_layer); loc.setLayerCoordinates(mc); if (!cache->isInCellCache(loc)) { cache->resize(); } if (instance->isMultiCell()) { instance->updateMultiInstances(); CellGrid* cg = m_layer->getCellGrid(); const std::vector& multiinstances = instance->getMultiInstances(); std::vector::const_iterator it = multiinstances.begin(); for (; it != multiinstances.end(); ++it) { std::vector coordinates = cg->toMultiCoordinates(mc, (*it)->getObject()->getMultiPartCoordinates(instance->getRotation())); std::vector::iterator mcit = coordinates.begin(); for (; mcit != coordinates.end(); ++mcit) { loc.setLayerCoordinates(*mcit); if (!cache->isInCellCache(loc)) { cache->resize(); } Cell* cell = cache->getCell(*mcit); if (cell) { cell->addInstance(*it); } } } } Cell* cell = cache->getCell(mc); if (cell) { cell->addInstance(instance); } } virtual void onInstanceDelete(Layer* layer, Instance* instance) { ModelCoordinate mc; if (m_layer == layer) { mc = instance->getLocationRef().getLayerCoordinates(); } else { mc = m_layer->getCellGrid()->toLayerCoordinates( layer->getCellGrid()->toMapCoordinates(instance->getLocationRef().getExactLayerCoordinatesRef())); } CellCache* cache = m_layer->getCellCache(); if (instance->isMultiCell()) { instance->updateMultiInstances(); CellGrid* cg = m_layer->getCellGrid(); const std::vector& multiinstances = instance->getMultiInstances(); std::vector::const_iterator it = multiinstances.begin(); for (; it != multiinstances.end(); ++it) { std::vector coordinates = cg->toMultiCoordinates(mc, (*it)->getObject()->getMultiPartCoordinates(instance->getRotation())); std::vector::iterator mcit = coordinates.begin(); for (; mcit != coordinates.end(); ++mcit) { Cell* cell = cache->getCell(*mcit); if (cell) { cell->removeInstance(*it); } } } } Cell* cell = cache->getCell(mc); if (cell) { cell->removeInstance(instance); } // updates size on the next cache update (happens on same pump) cache->setSizeUpdate(true); } private: Layer* m_layer; }; Zone::Zone(uint32_t id): m_id(id) { } Zone::~Zone() { for (std::set::iterator i = m_cells.begin(); i != m_cells.end(); ++i) { (*i)->resetZone(); } } void Zone::addCell(Cell* cell) { if (!cell->getZone()) { cell->setZone(this); m_cells.insert(cell); } } void Zone::removeCell(Cell* cell) { std::set::iterator i = m_cells.find(cell); if (i != m_cells.end()) { (*i)->resetZone(); m_cells.erase(i); } } void Zone::mergeZone(Zone* zone) { const std::set& cells = zone->getCells(); m_cells.insert(cells.begin(), cells.end()); for (std::set::const_iterator it = cells.begin(); it != cells.end(); ++it) { (*it)->setZone(this); } zone->resetCells(); } const std::set& Zone::getCells() const { return m_cells; } void Zone::resetCells() { m_cells.clear(); } uint32_t Zone::getId() const { return m_id; } uint32_t Zone::getCellCount() const { return static_cast(m_cells.size()); } std::vector Zone::getTransitionCells(Layer* layer) { std::vector transitions; std::set::iterator it = m_cells.begin(); for (; it != m_cells.end(); ++it) { TransitionInfo* trans = (*it)->getTransition(); if (!trans) { continue; } if (layer) { if (layer == (*it)->getLayer()) { transitions.push_back(*it); } } else { transitions.push_back(*it); } } return transitions; } class ZoneCellChangeListener : public CellChangeListener { public: ZoneCellChangeListener(CellCache* cache) { m_cache = cache; } virtual ~ZoneCellChangeListener() { } virtual void onInstanceEnteredCell(Cell* cell, Instance* instance) { } virtual void onInstanceExitedCell(Cell* cell, Instance* instance) { } virtual void onBlockingChangedCell(Cell* cell, CellTypeInfo type, bool blocks) { if (blocks) { cell->setZoneProtected(true); m_cache->splitZone(cell); } else { Zone* z1 = cell->getZone(); Zone* z2 = NULL; const std::vector& neighbors = cell->getNeighbors(); std::vector::const_iterator it = neighbors.begin(); for (; it != neighbors.end(); ++it) { Zone* z = (*it)->getZone(); if (z && z != z1) { z2 = z; } } if (z1 && z2) { cell->setZoneProtected(false); m_cache->mergeZones(z1, z2); } } } private: CellCache* m_cache; }; CellCache::CellCache(Layer* layer): m_layer(layer), m_defaultCostMulti(1.0), m_defaultSpeedMulti(1.0), m_neighborZ(-1), m_blockingUpdate(false), m_fowUpdate(false), m_sizeUpdate(false), m_updated(false), m_searchNarrow(true), m_staticSize(false) { // create cell change listener m_cellZoneListener = new ZoneCellChangeListener(this); // set base size ModelCoordinate min, max; m_layer->getMinMaxCoordinates(min, max); m_size.w = max.x; m_size.h = max.y; m_size.x = min.x; m_size.y = min.y; // create and add layer listener m_cellListener = new CellCacheChangeListener(m_layer); m_layer->addChangeListener(m_cellListener); const std::vector& interacts = m_layer->getInteractLayers(); if (!interacts.empty()) { std::vector::const_iterator layit = interacts.begin(); for(; layit != interacts.end(); ++layit) { // set size (*layit)->getMinMaxCoordinates(min, max, m_layer); m_size.w = std::max(max.x, m_size.w); m_size.h = std::max(max.y, m_size.h); m_size.x = std::min(min.x, m_size.x); m_size.y = std::min(min.y, m_size.y); // add listener (*layit)->addChangeListener(m_cellListener); } } m_width = ABS(m_size.w - m_size.x) + 1; m_height = ABS(m_size.h - m_size.y) + 1; m_cells.resize(m_width); for (uint32_t i = 0; i < m_width; ++i) { m_cells[i].resize(m_height, NULL); } } CellCache::~CellCache() { // reset cache reset(); // remove listener from layers m_layer->removeChangeListener(m_cellListener); const std::vector& interacts = m_layer->getInteractLayers(); if (!interacts.empty()) { std::vector::const_iterator layit = interacts.begin(); for(; layit != interacts.end(); ++layit) { (*layit)->removeChangeListener(m_cellListener); } } // delete listener delete m_cellListener; delete m_cellZoneListener; } void CellCache::reset() { // delete zones if (!m_zones.empty()) { std::vector::iterator it = m_zones.begin(); for (; it != m_zones.end(); ++it) { delete *it; } m_zones.clear(); } // clear all containers m_costsToCells.clear(); m_costsTable.clear(); m_costMultipliers.clear(); m_speedMultipliers.clear(); m_narrowCells.clear(); m_cellAreas.clear(); // delete cells if (!m_cells.empty()) { std::vector >::iterator it = m_cells.begin(); for (; it != m_cells.end(); ++it) { std::vector::iterator cit = (*it).begin(); for (; cit != (*it).end(); ++cit) { delete *cit; } } m_cells.clear(); } // reset default cost and speed m_defaultCostMulti = 1.0; m_defaultSpeedMulti = 1.0; // reset size m_size.x = 0; m_size.y = 0; m_size.w = 0; m_size.h = 0; m_width = 0; m_height = 0; } void CellCache::resize() { if (m_staticSize) { return; } // get new size and check if it has changed Rect newsize = calculateCurrentSize(); resize(newsize); } void CellCache::resize(const Rect& rec) { // check if size has changed Rect newsize = rec; if (newsize.x != m_size.x || newsize.y != m_size.y || newsize.w != m_size.w || newsize.h != m_size.h) { uint32_t w = ABS(newsize.w - newsize.x) + 1; uint32_t h = ABS(newsize.h - newsize.y) + 1; std::vector > cells; cells.resize(w); for (uint32_t i = 0; i < w; ++i) { cells[i].resize(h, NULL); } const std::vector& interacts = m_layer->getInteractLayers(); for(uint32_t y = 0; y < h; ++y) { for(uint32_t x = 0; x < w; ++x) { // transfer cells ModelCoordinate mc(newsize.x+x, newsize.y+y); Cell* cell = NULL; int32_t old_x = mc.x - m_size.x; int32_t old_y = mc.y - m_size.y; // out of range in the old size, so we create a new cell if (old_x < 0 || old_x >= static_cast(m_width) || old_y < 0 || old_y >= static_cast(m_height)) { int32_t coordId = x + y * w; cell = new Cell(coordId, mc, m_layer); cells[x][y] = cell; std::list cell_instances; m_layer->getInstanceTree()->findInstances(mc, 0, 0, cell_instances); if (!interacts.empty()) { // fill interact Instances into Cell std::vector::const_iterator it = interacts.begin(); std::list interact_instances; for(; it != interacts.end(); ++it) { // convert coordinates ExactModelCoordinate emc(FIFE::intPt2doublePt(mc)); ModelCoordinate inter_mc = (*it)->getCellGrid()->toLayerCoordinates(m_layer->getCellGrid()->toMapCoordinates(emc)); // check interact layer for instances (*it)->getInstanceTree()->findInstances(inter_mc, 0, 0, interact_instances); if (!interact_instances.empty()) { cell_instances.insert(cell_instances.end(), interact_instances.begin(), interact_instances.end()); interact_instances.clear(); } } } if (!cell_instances.empty()) { // add instances to cell cell->addInstances(cell_instances); } // transfer ownership } else { cell = m_cells[static_cast(old_x)][static_cast(old_y)]; m_cells[static_cast(old_x)][static_cast(old_y)] = NULL; cells[x][y] = cell; int32_t coordId = x + y * w; cell->setCellId(coordId); cell->resetNeighbors(); } } } // delete old unused cells std::vector >::iterator it = m_cells.begin(); for (; it != m_cells.end(); ++it) { std::vector::iterator cit = (*it).begin(); for (; cit != (*it).end(); ++cit) { if (*cit) { delete *cit; *cit = NULL; } } } // use new values m_cells = cells; m_size = newsize; m_width = w; m_height = h; bool zCheck = m_neighborZ != -1; // fill neighbors into cells it = m_cells.begin(); for (; it != m_cells.end(); ++it) { std::vector::iterator cit = (*it).begin(); for (; cit != (*it).end(); ++cit) { int32_t cellZ = (*cit)->getLayerCoordinates().z; std::vector coordinates; m_layer->getCellGrid()->getAccessibleCoordinates((*cit)->getLayerCoordinates(), coordinates); for (std::vector::iterator mi = coordinates.begin(); mi != coordinates.end(); ++mi) { Cell* c = getCell(*mi); if (*cit == c || !c) { continue; } if (zCheck) { if (ABS(c->getLayerCoordinates().z - cellZ) > m_neighborZ) { continue; } } (*cit)->addNeighbor(c); } } } } } void CellCache::createCells() { const std::vector& interacts = m_layer->getInteractLayers(); for(uint32_t y = 0; y < m_height; ++y) { for(uint32_t x = 0; x < m_width; ++x) { ModelCoordinate mc(m_size.x+x, m_size.y+y); Cell* cell = getCell(mc); if (!cell) { cell = new Cell(convertCoordToInt(mc), mc, m_layer); m_cells[x][y] = cell; } // fill Instances into Cell std::list cell_instances; m_layer->getInstanceTree()->findInstances(mc, 0, 0, cell_instances); if (!interacts.empty()) { // fill interact Instances into Cell std::vector::const_iterator it = interacts.begin(); std::list interact_instances; for(; it != interacts.end(); ++it) { // convert coordinates ExactModelCoordinate emc(FIFE::intPt2doublePt(mc)); ModelCoordinate inter_mc = (*it)->getCellGrid()->toLayerCoordinates(m_layer->getCellGrid()->toMapCoordinates(emc)); // check interact layer for instances (*it)->getInstanceTree()->findInstances(inter_mc, 0, 0, interact_instances); if (!interact_instances.empty()) { cell_instances.insert(cell_instances.end(), interact_instances.begin(), interact_instances.end()); interact_instances.clear(); } } } if (!cell_instances.empty()) { // add instances to cell cell->addInstances(cell_instances); } } } // fill neighbors into cells std::vector >::iterator it = m_cells.begin(); for (; it != m_cells.end(); ++it) { std::vector::iterator cit = (*it).begin(); for (; cit != (*it).end(); ++cit) { uint8_t accessible = 0; bool selfblocker = (*cit)->getCellType() == CTYPE_STATIC_BLOCKER || (*cit)->getCellType() == CTYPE_CELL_BLOCKER; std::vector coordinates; m_layer->getCellGrid()->getAccessibleCoordinates((*cit)->getLayerCoordinates(), coordinates); for (std::vector::iterator mi = coordinates.begin(); mi != coordinates.end(); ++mi) { Cell* c = getCell(*mi); if (*cit == c || !c) { continue; } if (!selfblocker && c->getCellType() != CTYPE_STATIC_BLOCKER && c->getCellType() != CTYPE_CELL_BLOCKER) { ++accessible; } (*cit)->addNeighbor(c); } // add cell to narrow cells and add listener for zone change if (m_searchNarrow && !selfblocker && accessible < 3) { addNarrowCell(*cit); } } } // create Zones it = m_cells.begin(); for (; it != m_cells.end(); ++it) { std::vector::iterator cit = (*it).begin(); for (; cit != (*it).end(); ++cit) { Cell* cell = *cit; if (cell->getZone() || cell->isInserted()) { continue; } if (cell->getCellType() == CTYPE_STATIC_BLOCKER || cell->getCellType() == CTYPE_CELL_BLOCKER) { continue; } Zone* zone = createZone(); cell->setInserted(true); std::stack cellstack; cellstack.push(cell); while(!cellstack.empty()) { Cell* c = cellstack.top(); cellstack.pop(); zone->addCell(c); const std::vector& neighbors = c->getNeighbors(); for (std::vector::const_iterator nit = neighbors.begin(); nit != neighbors.end(); ++nit) { Cell* nc = *nit; if (!nc->isInserted() && nc->getCellType() != CTYPE_STATIC_BLOCKER && nc->getCellType() != CTYPE_CELL_BLOCKER) { nc->setInserted(true); cellstack.push(nc); } } } } } } void CellCache::forceUpdate() { std::vector >::iterator it = m_cells.begin(); for (; it != m_cells.end(); ++it) { std::vector::iterator cit = (*it).begin(); for (; cit != (*it).end(); ++cit) { (*cit)->updateCellInfo(); } } } void CellCache::addCell(Cell* cell) { ModelCoordinate mc = cell->getLayerCoordinates(); m_cells[(mc.x-m_size.x)][(mc.y-m_size.y)] = cell; } Cell* CellCache::createCell(const ModelCoordinate& mc) { Cell* cell = getCell(mc); if (!cell) { cell = new Cell(convertCoordToInt(mc), mc, m_layer); m_cells[(mc.x-m_size.x)][(mc.y-m_size.y)] = cell; } return cell; } Cell* CellCache::getCell(const ModelCoordinate& mc) { int32_t x = mc.x - m_size.x; int32_t y = mc.y - m_size.y; if (x < 0 || x >= static_cast(m_width) || y < 0 || y >= static_cast(m_height)) { return NULL; } return m_cells[static_cast(x)][static_cast(y)]; } const std::vector >& CellCache::getCells() { return m_cells; } void CellCache::removeCell(Cell* cell) { if (!m_costsToCells.empty()) { removeCellFromCost(cell); } if (!m_costMultipliers.empty()) { resetCostMultiplier(cell); } if (!m_speedMultipliers.empty()) { resetSpeedMultiplier(cell); } if (!m_narrowCells.empty()) { removeNarrowCell(cell); } if (!m_cellAreas.empty()) { removeCellFromArea(cell); } } void CellCache::addInteractOnRuntime(Layer* interact) { interact->setInteract(true, m_layer->getId()); m_layer->addInteractLayer(interact); interact->addChangeListener(m_cellListener); Rect newsize = calculateCurrentSize(); if (newsize.x != m_size.x || newsize.y != m_size.y || newsize.w != m_size.w || newsize.h != m_size.h) { resize(); } // not optimal but needed if the grids have different geometry for(uint32_t y = 0; y < m_height; ++y) { for(uint32_t x = 0; x < m_width; ++x) { ModelCoordinate mc(m_size.x+x, m_size.y+y); Cell* cell = getCell(mc); if (cell) { // convert coordinates ExactModelCoordinate emc(FIFE::intPt2doublePt(mc)); ModelCoordinate inter_mc = interact->getCellGrid()->toLayerCoordinates(m_layer->getCellGrid()->toMapCoordinates(emc)); // check interact layer for instances std::list interact_instances; interact->getInstanceTree()->findInstances(inter_mc, 0, 0, interact_instances); if (!interact_instances.empty()) { // fill interact Instances into Cell cell->addInstances(interact_instances); } } } } } void CellCache::removeInteractOnRuntime(Layer* interact) { interact->setInteract(false, ""); m_layer->removeInteractLayer(interact); Rect newsize = calculateCurrentSize(); if (newsize.x != m_size.x || newsize.y != m_size.y || newsize.w != m_size.w || newsize.h != m_size.h) { resize(); } // not optimal but needed if the grids have different geometry for(uint32_t y = 0; y < m_height; ++y) { for(uint32_t x = 0; x < m_width; ++x) { ModelCoordinate mc(m_size.x+x, m_size.y+y); Cell* cell = getCell(mc); if (cell) { // convert coordinates ExactModelCoordinate emc(FIFE::intPt2doublePt(mc)); ModelCoordinate inter_mc = interact->getCellGrid()->toLayerCoordinates(m_layer->getCellGrid()->toMapCoordinates(emc)); // check interact layer for instances std::list interact_instances; interact->getInstanceTree()->findInstances(inter_mc, 0, 0, interact_instances); if (!interact_instances.empty()) { // remove interact Instances from Cell for (std::list::iterator it = interact_instances.begin(); it != interact_instances.end(); ++it) { cell->removeInstance(*it); } } } } } } LayerChangeListener* CellCache::getCellCacheChangeListener() { return m_cellListener; } Layer* CellCache::getLayer() { return m_layer; } const Rect& CellCache::getSize() { return m_size; } void CellCache::setSize(const Rect& rec) { resize(rec); } uint32_t CellCache::getWidth() { return m_width; } uint32_t CellCache::getHeight() { return m_height; } bool CellCache::isInCellCache(const Location& location) const { if (m_layer != location.getLayer()) { return false; } int32_t x = location.getLayerCoordinates().x - m_size.x; int32_t y = location.getLayerCoordinates().y - m_size.y; if (x < 0 || x >= static_cast(m_width) || y < 0 || y >= static_cast(m_height)) { return false; } return true; } int32_t CellCache::convertCoordToInt(const ModelCoordinate& coord) const { ModelCoordinate newcoords(coord.x - m_size.x, coord.y - m_size.y); return newcoords.x + newcoords.y*m_width; } ModelCoordinate CellCache::convertIntToCoord(const int32_t cell) const { ModelCoordinate coord((cell % m_width) + m_size.x, (cell / m_width) + m_size.y); return coord; } int32_t CellCache::getMaxIndex() const { int32_t max_index = m_width*m_height; return max_index; } void CellCache::setMaxNeighborZ(int32_t z) { m_neighborZ = z; } int32_t CellCache::getMaxNeighborZ() { return m_neighborZ; } void CellCache::setUpdated(bool updated) { m_updated = updated; } bool CellCache::isUpdated() { return m_updated; } std::vector CellCache::getCellsInLine(const ModelCoordinate& pt1, const ModelCoordinate& pt2, bool blocker) { std::vector cells; std::vector coords = m_layer->getCellGrid()->getCoordinatesInLine(pt1, pt2); for (std::vector::iterator it = coords.begin(); it != coords.end(); ++it) { Cell* c = getCell(*it); if (c) { if (blocker && c->getCellType() != CTYPE_NO_BLOCKER) { return cells; } cells.push_back(c); } else { return cells; } } return cells; } std::vector CellCache::getCellsInRect(const Rect& rec) { std::vector cells; ModelCoordinate current(rec.x, rec.y); ModelCoordinate target(rec.x+rec.w, rec.y+rec.h); for (; current.y < target.y; ++current.y) { current.x = rec.x; for (; current.x < target.x; ++current.x) { Cell* c = getCell(current); if (c) { cells.push_back(c); } } } return cells; } std::vector CellCache::getCellsInCircle(const ModelCoordinate& center, uint16_t radius) { std::vector cells; //radius power 2 uint16_t radiusp2 = (radius+1) * radius; ModelCoordinate current(center.x-radius, center.y-radius); ModelCoordinate target(center.x+radius, center.y+radius); for (; current.y < center.y; current.y++) { current.x = center.x-radius; for (; current.x < center.x; current.x++) { Cell* c = getCell(current); if (c) { uint16_t dx = center.x - current.x; uint16_t dy = center.y - current.y; uint16_t distance = dx*dx + dy*dy; if (distance <= radiusp2) { cells.push_back(c); current.x = center.x + dx; c = getCell(current); if (c) cells.push_back(c); current.y = center.y + dy; c = getCell(current); if (c) cells.push_back(c); current.x = center.x-dx; c = getCell(current); if (c) cells.push_back(c); current.y = center.y-dy; } } } } current.x = center.x; current.y = center.y-radius; for (; current.y <= target.y; current.y++) { Cell* c = getCell(current); if (c) cells.push_back(c); } current.y = center.y; current.x = center.x-radius; for (; current.x <= target.x; current.x++) { Cell* c = getCell(current); if (c) cells.push_back(c); } return cells; } std::vector CellCache::getCellsInCircleSegment(const ModelCoordinate& center, uint16_t radius, int32_t sangle, int32_t eangle) { std::vector cells; ExactModelCoordinate exactCenter(center.x, center.y); std::vector tmpCells = getCellsInCircle(center, radius); int32_t s = (sangle + 360) % 360; int32_t e = (eangle + 360) % 360; bool greater = (s > e) ? true : false; for (std::vector::iterator it = tmpCells.begin(); it != tmpCells.end(); ++it) { int32_t angle = getAngleBetween(exactCenter, intPt2doublePt((*it)->getLayerCoordinates())); if (greater) { if (angle >= s || angle <= e) { cells.push_back(*it); } } else { if (angle >= s && angle <= e) { cells.push_back(*it); } } } return cells; } void CellCache::registerCost(const std::string& costId, double cost) { std::pair::iterator, bool> insertiter; insertiter = m_costsTable.insert(std::pair(costId, cost)); if (insertiter.second == false) { double& old_cost = insertiter.first->second; old_cost = cost; } } void CellCache::unregisterCost(const std::string& costId) { std::map::iterator it = m_costsTable.find(costId); if (it != m_costsTable.end()) { m_costsTable.erase(it); m_costsToCells.erase(costId); } } double CellCache::getCost(const std::string& costId) { std::map::iterator it = m_costsTable.find(costId); if (it != m_costsTable.end()) { return it->second; } return 0.0; } bool CellCache::existsCost(const std::string& costId) { std::map::iterator it = m_costsTable.find(costId); if (it != m_costsTable.end()) { return true; } return false; } std::list CellCache::getCosts() { std::list costs; std::map::iterator it = m_costsTable.begin(); for (; it != m_costsTable.end(); ++it) { costs.push_back((*it).first); } return costs; } void CellCache::unregisterAllCosts() { m_costsTable.clear(); m_costsToCells.clear(); } void CellCache::addCellToCost(const std::string& costId, Cell* cell) { if (existsCost(costId)) { StringCellPair result = m_costsToCells.equal_range(costId); StringCellIterator it = result.first; for (; it != result.second; ++it) { if ((*it).second == cell) { return; } } m_costsToCells.insert(std::pair(costId, cell)); } } void CellCache::addCellsToCost(const std::string& costId, const std::vector& cells) { std::vector::const_iterator it = cells.begin(); for (; it != cells.end(); ++it) { addCellToCost(costId, *it); } } void CellCache::removeCellFromCost(Cell* cell) { StringCellIterator it = m_costsToCells.begin(); for (; it != m_costsToCells.end();) { if ((*it).second == cell) { m_costsToCells.erase(it++); } else { ++it; } } } void CellCache::removeCellFromCost(const std::string& costId, Cell* cell) { StringCellPair result = m_costsToCells.equal_range(costId); StringCellIterator it = result.first; for (; it != result.second; ++it) { if ((*it).second == cell) { m_costsToCells.erase(it); break; } } } void CellCache::removeCellsFromCost(const std::string& costId, const std::vector& cells) { std::vector::const_iterator it = cells.begin(); for (; it != cells.end(); ++it) { removeCellFromCost(costId, *it); } } std::vector CellCache::getCostCells(const std::string& costId) { std::vector cells; StringCellPair result = m_costsToCells.equal_range(costId); StringCellIterator it = result.first; for (; it != result.second; ++it) { cells.push_back((*it).second); } return cells; } std::vector CellCache::getCellCosts(Cell* cell) { std::vector costs; StringCellIterator it = m_costsToCells.begin(); for (; it != m_costsToCells.end(); ++it) { if ((*it).second == cell) { costs.push_back((*it).first); } } return costs; } bool CellCache::existsCostForCell(const std::string& costId, Cell* cell) { StringCellPair result = m_costsToCells.equal_range(costId); StringCellIterator it = result.first; for (; it != result.second; ++it) { if ((*it).second == cell) { return true; } } return false; } double CellCache::getAdjacentCost(const ModelCoordinate& adjacent, const ModelCoordinate& next) { double cost = m_layer->getCellGrid()->getAdjacentCost(adjacent, next); Cell* nextcell = getCell(next); if (nextcell) { if (!nextcell->defaultCost()) { cost *= nextcell->getCostMultiplier(); } else { cost *= m_defaultCostMulti; } } return cost; } double CellCache::getAdjacentCost(const ModelCoordinate& adjacent, const ModelCoordinate& next, const std::string& costId) { double cost = m_layer->getCellGrid()->getAdjacentCost(adjacent, next); Cell* nextcell = getCell(next); if (nextcell) { if (existsCostForCell(costId, nextcell)) { cost *= getCost(costId); } else { if (!nextcell->defaultCost()) { cost *= nextcell->getCostMultiplier(); } else { cost *= m_defaultCostMulti; } } } return cost; } bool CellCache::getCellSpeedMultiplier(const ModelCoordinate& cell, double& multiplier) { Cell* nextcell = getCell(cell); if (nextcell) { if (!nextcell->defaultSpeed()) { multiplier = nextcell->getSpeedMultiplier(); return true; } } multiplier = m_defaultSpeedMulti; return false; } void CellCache::setDefaultCostMultiplier(double multi) { m_defaultCostMulti = multi; } double CellCache::getDefaultCostMultiplier() { return m_defaultCostMulti; } void CellCache::setDefaultSpeedMultiplier(double multi) { m_defaultSpeedMulti = multi; } double CellCache::getDefaultSpeedMultiplier() { return m_defaultSpeedMulti; } bool CellCache::isDefaultCost(Cell* cell) { std::map::iterator it = m_costMultipliers.find(cell); if (it != m_costMultipliers.end()) { return false; } return true; } void CellCache::setCostMultiplier(Cell* cell, double multi) { std::pair::iterator, bool> insertiter = m_costMultipliers.insert(std::pair(cell, multi)); if (insertiter.second == false) { double& old = insertiter.first->second; old = multi; } } double CellCache::getCostMultiplier(Cell* cell) { double cost = 1.0; std::map::iterator it = m_costMultipliers.find(cell); if (it != m_costMultipliers.end()) { cost = it->second; } return cost; } void CellCache::resetCostMultiplier(Cell* cell) { m_costMultipliers.erase(cell); } bool CellCache::isDefaultSpeed(Cell* cell) { std::map::iterator it = m_speedMultipliers.find(cell); if (it != m_speedMultipliers.end()) { return false; } return true; } void CellCache::setSpeedMultiplier(Cell* cell, double multi) { std::pair::iterator, bool> insertiter = m_speedMultipliers.insert(std::pair(cell, multi)); if (insertiter.second == false) { double& old = insertiter.first->second; old = multi; } } double CellCache::getSpeedMultiplier(Cell* cell) { double speed = 1.0; std::map::iterator it = m_speedMultipliers.find(cell); if (it != m_speedMultipliers.end()) { speed = it->second; } return speed; } void CellCache::resetSpeedMultiplier(Cell* cell) { m_speedMultipliers.erase(cell); } void CellCache::addTransition(Cell* cell) { m_transitions.push_back(cell); } void CellCache::removeTransition(Cell* cell) { std::vector::iterator it = m_transitions.begin(); for (; it != m_transitions.end(); ++it) { if (cell == *it) { m_transitions.erase(it); break; } } } std::vector CellCache::getTransitionCells(Layer* layer) { if (!layer) { return m_transitions; } std::vector cells; std::vector::iterator it = m_transitions.begin(); for (; it != m_transitions.end(); ++it) { TransitionInfo* trans = (*it)->getTransition(); if (trans) { if (trans->m_layer == layer) { cells.push_back(*it); } } } return cells; } Zone* CellCache::createZone() { uint32_t id = 0; bool search = true; while (search) { bool found = false; if (!m_zones.empty()) { for (std::vector::iterator i = m_zones.begin(); i != m_zones.end(); ++i) { if ((*i)->getId() == id) { found = true; ++id; break; } } } search = found; } Zone* zi = new Zone(id); m_zones.push_back(zi); return zi; } const std::vector& CellCache::getZones() { return m_zones; } Zone* CellCache::getZone(uint32_t id) { Zone* zi = 0; for (std::vector::iterator i = m_zones.begin(); i != m_zones.end(); ++i) { if ((*i)->getId() == id) { zi = (*i); break; } } if (!zi) { zi = new Zone(id); m_zones.push_back(zi); } return zi; } void CellCache::removeZone(Zone* zone) { for (std::vector::iterator i = m_zones.begin(); i != m_zones.end(); ++i) { if (*i == zone) { delete *i; m_zones.erase(i); break; } } } void CellCache::splitZone(Cell* cell) { Zone* currentZone = cell->getZone(); if (!currentZone) { return; } Zone* newZone = createZone(); std::stack cellstack; const std::vector& neighbors = cell->getNeighbors(); for (std::vector::const_iterator nit = neighbors.begin(); nit != neighbors.end(); ++nit) { Cell* nc = *nit; if (nc->isInserted() && !nc->isZoneProtected() && nc->getCellType() != CTYPE_STATIC_BLOCKER && nc->getCellType() != CTYPE_CELL_BLOCKER) { cellstack.push(nc); break; } } while(!cellstack.empty()) { Cell* c = cellstack.top(); cellstack.pop(); currentZone->removeCell(c); newZone->addCell(c); c->setInserted(true); if (c->isZoneProtected()) { continue; } const std::vector& neigh = c->getNeighbors(); for (std::vector::const_iterator nit = neigh.begin(); nit != neigh.end(); ++nit) { Cell* nc = *nit; if (nc->getZone() == currentZone && nc->isInserted() && nc->getCellType() != CTYPE_STATIC_BLOCKER && nc->getCellType() != CTYPE_CELL_BLOCKER) { cellstack.push(nc); nc->setInserted(false); } } } if (currentZone->getCellCount() == 0) { removeZone(currentZone); } } void CellCache::mergeZones(Zone* zone1, Zone* zone2) { if (!zone1 || !zone2) { return; } Zone* addZone = zone2; Zone* oldZone = zone1; if (zone1->getCellCount() > zone2->getCellCount()) { addZone = zone1; oldZone = zone2; } addZone->mergeZone(oldZone); removeZone(oldZone); } void CellCache::addNarrowCell(Cell* cell) { std::pair::iterator, bool> insertiter = m_narrowCells.insert(cell); if (insertiter.second) { cell->addChangeListener(m_cellZoneListener); } } const std::set& CellCache::getNarrowCells() { return m_narrowCells; } void CellCache::removeNarrowCell(Cell* cell) { std::set::iterator it = m_narrowCells.find(cell); if (it != m_narrowCells.end()) { (*it)->removeChangeListener(m_cellZoneListener); m_narrowCells.erase(it); } } void CellCache::resetNarrowCells() { std::set::const_iterator it = m_narrowCells.begin(); for (; it != m_narrowCells.end(); ++it) { (*it)->removeChangeListener(m_cellZoneListener); } m_narrowCells.clear(); } bool CellCache::isSearchNarrowCells() { return m_searchNarrow; } void CellCache::setSearchNarrowCells(bool search) { m_searchNarrow = search; } void CellCache::addCellToArea(const std::string& id, Cell* cell) { m_cellAreas.insert(std::pair(id, cell)); } void CellCache::addCellsToArea(const std::string& id, const std::vector& cells) { std::vector::const_iterator it = cells.begin(); for (; it != cells.end(); ++it) { addCellToArea(id, *it); } } void CellCache::removeCellFromArea(Cell* cell) { StringCellIterator it = m_cellAreas.begin(); while (it != m_cellAreas.end()) { if ((*it).second == cell) { m_cellAreas.erase(it++); } else { ++it; } } } void CellCache::removeCellFromArea(const std::string& id, Cell* cell) { StringCellPair result = m_cellAreas.equal_range(id); StringCellIterator it = result.first; for (; it != result.second; ++it) { if ((*it).second == cell) { m_cellAreas.erase(it); break; } } } void CellCache::removeCellsFromArea(const std::string& id, const std::vector& cells) { std::vector::const_iterator it = cells.begin(); for (; it != cells.end(); ++it) { removeCellFromArea(id, *it); } } void CellCache::removeArea(const std::string& id) { m_cellAreas.erase(id); } bool CellCache::existsArea(const std::string& id) { StringCellIterator it = m_cellAreas.find(id); if (it == m_cellAreas.end()) { return false; } return true; } std::vector CellCache::getAreas() { std::vector areas; std::string last(""); StringCellIterator it = m_cellAreas.begin(); for (; it != m_cellAreas.end(); ++it) { if (last != (*it).first) { last = (*it).first; areas.push_back(last); } } return areas; } std::vector CellCache::getCellAreas(Cell* cell) { std::vector areas; StringCellIterator it = m_cellAreas.begin(); for (; it != m_cellAreas.end(); ++it) { if ((*it).second == cell) { areas.push_back((*it).first); } } return areas; } std::vector CellCache::getAreaCells(const std::string& id) { std::vector cells; StringCellPair result = m_cellAreas.equal_range(id); StringCellIterator it = result.first; for (; it != result.second; ++it) { cells.push_back((*it).second); } return cells; } bool CellCache::isCellInArea(const std::string& id, Cell* cell) { StringCellPair result = m_cellAreas.equal_range(id); StringCellIterator it = result.first; for (; it != result.second; ++it) { if ((*it).second == cell) { return true; } } return false; } Rect CellCache::calculateCurrentSize() { // set base size ModelCoordinate min, max; m_layer->getMinMaxCoordinates(min, max); Rect newsize(min.x, min.y, max.x, max.y); const std::vector& interacts = m_layer->getInteractLayers(); if (!interacts.empty()) { std::vector::const_iterator layit = interacts.begin(); for(; layit != interacts.end(); ++layit) { // set size (*layit)->getMinMaxCoordinates(min, max, m_layer); newsize.w = std::max(max.x, newsize.w); newsize.h = std::max(max.y, newsize.h); newsize.x = std::min(min.x, newsize.x); newsize.y = std::min(min.y, newsize.y); } } return newsize; } void CellCache::setStaticSize(bool staticSize) { m_staticSize = staticSize; } bool CellCache::isStaticSize() { return m_staticSize; } void CellCache::setBlockingUpdate(bool update) { m_blockingUpdate = update; } void CellCache::setFowUpdate(bool update) { m_fowUpdate = update; } void CellCache::setSizeUpdate(bool update) { m_sizeUpdate = update; } void CellCache::update() { m_updated = m_fowUpdate; m_fowUpdate = false; if (m_sizeUpdate) { resize(); m_sizeUpdate = false; } m_blockingUpdate = false; } } // FIFE fifengine-0.4.1/engine/core/model/structures/cellcache.h000066400000000000000000000563501304641216200232520ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_CELLCACHE_H #define FIFE_CELLCACHE_H // Standard C++ library includes #include #include #include #include #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/fifeclass.h" #include "util/structures/rect.h" #include "model/metamodel/modelcoords.h" #include "model/metamodel/object.h" #include "layer.h" #include "cell.h" namespace FIFE { /** A Zone is an abstract depiction of a CellCache or of a part of it. */ class Zone { public: /** Constructor * @param id A integer value used as identifier. Simple counter values are used. */ Zone(uint32_t id); /** Destructor */ ~Zone(); /** Adds a cell to this zone. * @param cell A pointer to cell which should be added. */ void addCell(Cell* cell); /** Removes a cell from this zone. * @param cell A pointer to cell which should be removed. */ void removeCell(Cell* cell); /** Merge two zones to one. * @param zone A pointer to the old zone. */ void mergeZone(Zone* zone); /** Returns all cells of this zone. * @return A const reference to a set that contains all cells of this zone. */ const std::set& getCells() const; /** Remove all cells from zone but does not alter the cells. */ void resetCells(); /** Returns the zone identifier. * @return A unsigned integer with the identifier. */ uint32_t getId() const; /** Returns the number of cells. * @return A unsigned integer with the number of cells. */ uint32_t getCellCount() const; /** Returns transistion cells of this zone. * @param layer A pointer to the layer which should be the target of the transition. If NULL all transistions be returned. * @return A vector which contains the transition cells. */ std::vector getTransitionCells(Layer* layer = NULL); private: //! identifier uint32_t m_id; //! cells in the zone std::set m_cells; }; /** A CellCache is an abstract depiction of one or a few layers * and contains additional information, such as different cost and speed and so on. */ class CellCache : public FifeClass { public: /** Constructor * @param layer A pointer to the associated layer. */ CellCache(Layer* layer); /** Destructor */ ~CellCache(); /** Resets the CellCache */ void reset(); /** Checks the layer size and if the size is different with current size then the cache size is adjusted. */ void resize(); /** Checks the given size and if the size is different with current size then the cache is adjusted. * @param rec A rect that contains the new size in layer coordinates. */ void resize(const Rect& rec); /** Creates cells for this CellCache based on the size of the assigned layer. */ void createCells(); /** Updates all cells. */ void forceUpdate(); /** Adds cell to this CellCache. * @param cell A pointer to cell which should be added. */ void addCell(Cell* cell); /** Creates cell on this CellCache. * @param mc A const reference to ModelCoordinate where the cell should be created. * @return A pointer to the new cell. */ Cell* createCell(const ModelCoordinate& mc); /** Returns cell on this coordinate. * @param mc A const reference to ModelCoordinate where the cell should be. * @return A pointer to the cell or NULL if there is no. */ Cell* getCell(const ModelCoordinate& mc); /** Returns all cells of this CellCache. * @return A const reference to a two dimensional vector which contain all cells. */ const std::vector >& getCells(); /** Removes cell from CellCache. * Removes cell from cost table, special cost and speed, * futhermore from areas and narrows. * @param cell A pointer to the cell. */ void removeCell(Cell* cell); /** Adds a interact layer to the CellCache on runtime and sets all needed layer properties. * @param interact A pointer to the interact layer. */ void addInteractOnRuntime(Layer* interact); /** Removes a interact layer from the CellCache on runtime and sets all needed layer properties. * @param interact A pointer to the interact layer. */ void removeInteractOnRuntime(Layer* interact); /** Returns change listener. * @return A pointer to the change listener. */ LayerChangeListener* getCellCacheChangeListener(); /** Returns layer. * @return A pointer to the layer this CellCache is based on. */ Layer* getLayer(); /** Returns CellCache size. * @return A const reference to rect that contain the min and max coordinates. */ const Rect& getSize(); /** Sets CellCache size. * @param rec A const reference to a rect that contain new min, max coordinates. rec.x = min.x, rec.w = max.x, rec.y = min.y, rec.h = max.y */ void setSize(const Rect& rec); /** Returns width of the CellCache. * @return A unsigned integer that is the width. */ uint32_t getWidth(); /** Returns height of the CellCache. * @return A unsigned integer that is the height. */ uint32_t getHeight(); /** Checks whether the location is in CellCache range. * @param location A const reference to location which should be checked. * @return A boolean, true if the location is in range, otherwise false. */ bool isInCellCache(const Location& location) const; /** Convertes coordinate to unique identifier. * @param coord A const reference to ModelCoordinate which should be converted. * @return A integer, the cell identifier. */ int32_t convertCoordToInt(const ModelCoordinate& coord) const; /** Convertes unique identifier to coordinate. * @param cell A const reference to the integer id which should be converted. * @return A ModelCoordinate, contain the cell coordinate. */ ModelCoordinate convertIntToCoord(const int32_t cell) const; /** Returns the number of cells on this CellCache. * @return A integer value, the number of cells. */ int32_t getMaxIndex() const; /** Sets maximal z range for neighbors. * @param z The maximal z range as int. */ void setMaxNeighborZ(int32_t z); /** Gets maximal z range for neighbors. By default disabled with the value -1. * @return The maximal z range as int. */ int32_t getMaxNeighborZ(); /** Sets whether the CellCache need to be updated. * @param updated A boolean, true means no update is needed, false indicates a update. */ void setUpdated(bool updated); /** Gets whether the CellCache need to be updated. * @return A boolean, true means no update is needed, false indicates a update. */ bool isUpdated(); /** Returns all cells in the line. * @param pt1 A const reference to the ModelCoordinate where the line begin. * @param pt2 A const reference to the ModelCoordinate where the line end. * @param blocker A boolean, true stops when a blocker is found, false ignored blocker. * @return A vector that contain the cells. */ std::vector getCellsInLine(const ModelCoordinate& pt1, const ModelCoordinate& pt2, bool blocker = false); /** Returns all cells in the rect. * @param rec A const reference to the Rect which specifies the size. * @return A vector that contain the cells. */ std::vector getCellsInRect(const Rect& rec); /** Returns all cells in the circle. * @param center A const reference to the ModelCoordinate where the center of the circle is. * @param radius A unsigned integer, radius of the circle. * @return A vector that contain the cells. */ std::vector getCellsInCircle(const ModelCoordinate& center, uint16_t radius); /** Returns all cells in the circle segment. * @param center A const reference to the ModelCoordinate where the center of the circle is. * @param radius A unsigned integer, radius of the circle. * @param sangle A interger, start angle of the segment. * @param eangle A interger, end angle of the segment. * @return A vector that contain the cells. */ std::vector getCellsInCircleSegment(const ModelCoordinate& center, uint16_t radius, int32_t sangle, int32_t eangle); /** Adds a cost with the given id and value. * @param costId A const reference to a string that refs to the cost id. * @param cost A double that contains the cost value. Used as multiplier for default cost. */ void registerCost(const std::string& costId, double cost); /** Removes a cost with the given id. * @param costId A const reference to a string that refs to the cost id. */ void unregisterCost(const std::string& costId); /** Returns the cost value for the given id. * @param costId A const reference to a string that refs to the cost id. * @return cost value as a double, if cost id can not be found 1.0 is returned. */ double getCost(const std::string& costId); /** Returns if the cost for the given id exists. * @return True if cost id could be found otherwise false. */ bool existsCost(const std::string& costId); /** Returns all registered cost ids. * @return A list that contains the cost ids. */ std::list getCosts(); /** Removes all costs. */ void unregisterAllCosts(); /** Assigns a cell to a cost identifier. * @param costId A const reference to the cost identifier. * @param cell A pointer to the cell. */ void addCellToCost(const std::string& costId, Cell* cell); /** Assigns cells to a cost identifier. * @param costId A const reference to the cost identifier. * @param cells A const reference to a vector which contains the cells. */ void addCellsToCost(const std::string& costId, const std::vector& cells); /** Removes a cell from costs. * @param cell A pointer to the cell. */ void removeCellFromCost(Cell* cell); /** Removes a cell from a cost identifier. * @param costId A const reference to the cost identifier. * @param cell A pointer to the cell. */ void removeCellFromCost(const std::string& costId, Cell* cell); /** Removes cells from a cost identifier. * @param costId A const reference to the cost identifier. * @param cells A const reference to a vector which contains the cells. */ void removeCellsFromCost(const std::string& costId, const std::vector& cells); /** Returns cells for a cost identifier. * @param costId A const reference to the cost identifier. * @return A vector which contains the cells. */ std::vector getCostCells(const std::string& costId); /** Returns cost identifiers for cell. * @param cell A pointer to the cell. * @return A vector which contains the cost ids. */ std::vector getCellCosts(Cell* cell); /** Gets if cell is assigned to cost identifier. * @param costId A const reference to the cost identifier. * @param cell A pointer to the cell. * @return A boolean, true if the cell is assigned to the cost identifier, otherwise false. */ bool existsCostForCell(const std::string& costId, Cell* cell); /** Returns cost for movement between these two adjacent coordinates. * @param adjacent A const reference to the start ModelCoordinate. * @param next A const reference to the end ModelCoordinate. * @return A double which represents the cost. */ double getAdjacentCost(const ModelCoordinate& adjacent, const ModelCoordinate& next); /** Returns cost for movement between these two adjacent coordinates. * @param adjacent A const reference to the start ModelCoordinate. * @param next A const reference to the end ModelCoordinate. * @param costId A const reference to the string that contain a cost identifier. * @return A double which represents the cost. */ double getAdjacentCost(const ModelCoordinate& adjacent, const ModelCoordinate& next, const std::string& costId); /** Returns speed value from cell. * @param cell A const reference to the cell ModelCoordinate. * @param multiplier A reference to a double which receives the speed value. * @return A boolean, true if on next cell use special speed, otherwise false. */ bool getCellSpeedMultiplier(const ModelCoordinate& cell, double& multiplier); /** Sets default cost for this CellCache. * @param multi A double, the cost. */ void setDefaultCostMultiplier(double multi); /** Gets default cost for this CellCache. * @return A double, the cost. */ double getDefaultCostMultiplier(); /** Sets default speed for this CellCache. * @param multi A double, the speed. */ void setDefaultSpeedMultiplier(double multi); /** Gets default speed for this CellCache. * @return A double, the speed. */ double getDefaultSpeedMultiplier(); /** Gets if cell uses default cost multiplier. * @param cell A pointer to the cell. * @return A boolean, true if the cell uses default cost multiplier, otherwise false. */ bool isDefaultCost(Cell* cell); /** Sets cost multiplier for the cell. * @param cell A pointer to the cell. * @param multi A double, the cost multiplier. */ void setCostMultiplier(Cell* cell, double multi); /** Returns cost multiplier for the cell. * @param cell A pointer to the cell. * @return A double, the cost multiplier. 1.0 is default. */ double getCostMultiplier(Cell* cell); /** Resets the cost multiplier for the cell. * @param cell A pointer to the cell. */ void resetCostMultiplier(Cell* cell); /** Gets if cell uses default speed multiplier. * @param cell A pointer to the cell. * @return A boolean, true if the cell uses default speed multiplier, otherwise false. */ bool isDefaultSpeed(Cell* cell); /** Sets speed multiplier for the cell. * @param cell A pointer to the cell. * @param multi A double, the speed multiplier. */ void setSpeedMultiplier(Cell* cell, double multi); /** Returns speed multiplier for the cell. * @param cell A pointer to the cell. * @return A double, the speed multiplier. 1.0 is default. */ double getSpeedMultiplier(Cell* cell); /** Resets the speed multiplier for the cell. * @param cell A pointer to the cell. */ void resetSpeedMultiplier(Cell* cell); /** Adds a cell as transition. * @param cell A pointer to transition cell. */ void addTransition(Cell* cell); /** Removes a cell as transition. * @param cell A pointer to transition cell. */ void removeTransition(Cell* cell); /** Returns transistion cells of this CellCache. * @param layer A pointer to the layer which should be the target of the transition. If NULL all transistions be returned. * @return A vector which contains the transition cells. */ std::vector getTransitionCells(Layer* layer = NULL); /** Returns zones of this CellCache. * @return A vector which contains the zones. */ const std::vector& getZones(); /** Gets zone by identifier. * @param id A unsigned integer which is used as zone identifier, * @return A pointer to the zone. */ Zone* getZone(uint32_t id); /** Creates zone. * @return A pointer to the new zone. */ Zone* createZone(); /** Removes zone. * @param zone A pointer to the zone which should be removed. */ void removeZone(Zone* zone); /** Splits zone on the cell. * @param cell A pointer to the cell where the zone should be splited. */ void splitZone(Cell* cell); /** Merges two zones to one. * @param zone1 A pointer to the first zone. * @param zone2 A pointer to the second zone. */ void mergeZones(Zone* zone1, Zone* zone2); /** Adds cell to narrow cells. * Narrow cells are observed. On blocking change, the underlying zones are merged or splitted. * @param cell A pointer to the cell. */ void addNarrowCell(Cell* cell); /** Returns narrow cells. * @return A const reference to a set which contains the cells. */ const std::set& getNarrowCells(); /** Removes cell from narrow cells. * @param cell A pointer to the cell. */ void removeNarrowCell(Cell* cell); /** Resets narrow cells. */ void resetNarrowCells(); /** Gets if narrow cells should be searched automatic. * Note that narrow cells will only saved if this is disabled. * @return A boolean, if true the automatic search is enabled, otherwise false. */ bool isSearchNarrowCells(); /** Sets if narrow cells should be searched automatic. * @param search A boolean, if true the automatic search is enabled, otherwise false. */ void setSearchNarrowCells(bool search); /** Adds a cell to a specific area group. With an area you can group cells without the need * of checking the underlying instances or similar. * @param id A const reference to string that contains the area id. * @param cell A pointer to the cell which should be added. */ void addCellToArea(const std::string& id, Cell* cell); /** Adds few cell to a specific area group. With an area you can group cells without the need * of checking the underlying instances or similar. * @param id A const reference to string that contains the area id. * @param cells A const reference to vector which contains the cells. */ void addCellsToArea(const std::string& id, const std::vector& cells); /** Removes the cell from all areas. * @param cell A pointer to the cell which should be removed. */ void removeCellFromArea(Cell* cell); /** Removes the cell from a area. * @param id A const reference to string that contains the area id. * @param cell A pointer to the cell which should be removed. */ void removeCellFromArea(const std::string& id, Cell* cell); /** Removes few cells from a area. * @param id A const reference to string that contains the area id. * @param cells A const reference to vector which contains the cells. */ void removeCellsFromArea(const std::string& id, const std::vector& cells); /** Removes a area. * @param id A const reference to string that contains the area id. */ void removeArea(const std::string& id); /** Checks whether the area exists. * @param id A const reference to string that contains the area id. * @return A boolean, true if the area id exists, otherwise false. */ bool existsArea(const std::string& id); /** Returns all area ids. * @return A vector that contains the area ids. */ std::vector getAreas(); /** Returns all areas of a cell. * @param cell A pointer to the cell. * @return A vector that contains the area ids. */ std::vector getCellAreas(Cell* cell); /** Returns all cells of an area. * @param id A const reference to string that contains the area id. * @return A vector that contains the cells from the area. */ std::vector getAreaCells(const std::string& id); /** Returns true if cell is part of the area, otherwise false. * @param id A const reference to string that contains the area id. * @param cell A pointer to the cell which is used for the check. * @return A boolean, true if the cell is part of the area, otherwise false. */ bool isCellInArea(const std::string& id, Cell* cell); /** Sets the cache size to static so that automatic resize is disabled. * @param staticSize A boolean, true if the cache size is static, otherwise false. */ void setStaticSize(bool staticSize); /** Returns if the cache size is static. * @return A boolean, true if the cache size is static, otherwise false. */ bool isStaticSize(); void setBlockingUpdate(bool update); void setFowUpdate(bool update); void setSizeUpdate(bool update); void update(); private: typedef std::multimap StringCellMultimap; typedef StringCellMultimap::iterator StringCellIterator; typedef std::pair StringCellPair; /** Returns the current size. * @return A rect that contains the min, max coordinates. */ Rect calculateCurrentSize(); //! walkable layer Layer* m_layer; //! default cost double m_defaultCostMulti; //! default speed double m_defaultSpeedMulti; //! change listener LayerChangeListener* m_cellListener; // cells on this cache std::vector > m_cells; //! Rect holds the min and max size //! x = min.x, w = max.x, y = min.y, h = max.y Rect m_size; //! cache width uint32_t m_width; //! cache height uint32_t m_height; //! max z value for neighbors int32_t m_neighborZ; //! indicates blocking update bool m_blockingUpdate; //! indicates fow update bool m_fowUpdate; //! indicates size update bool m_sizeUpdate; //! need update bool m_updated; //! is automatic seach enabled bool m_searchNarrow; //! is automatic size update enabled/disabled bool m_staticSize; //! cells with transitions std::vector m_transitions; //! zones std::vector m_zones; //! special cells which are monitored (zone split and merge) std::set m_narrowCells; //! areas with assigned cells StringCellMultimap m_cellAreas; //! listener for zones CellChangeListener* m_cellZoneListener; //! holds cost table std::map m_costsTable; //! holds cells for each cost StringCellMultimap m_costsToCells; //! holds default cost multiplier, only if it is not default(1.0) std::map m_costMultipliers; //! holds default speed multiplier, only if it is not default(1.0) std::map m_speedMultipliers; }; } // FIFE #endif fifengine-0.4.1/engine/core/model/structures/cellcache.i000066400000000000000000000103001304641216200232340ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "model/structures/cellcache.h" %} namespace FIFE { class Cell; class Layer; class CellCache : public FifeClass { public: CellCache(Layer* layer); ~CellCache(); void createCells(); void forceUpdate(); void addCell(Cell* cell); Cell* createCell(const ModelCoordinate& mc); Cell* getCell(const ModelCoordinate& mc); void addInteractOnRuntime(Layer* interact); void removeInteractOnRuntime(Layer* interact); const Rect& getSize(); void setSize(const Rect& rec); uint32_t getWidth(); uint32_t getHeight(); int32_t getMaxIndex() const; void setMaxNeighborZ(int32_t z); int32_t getMaxNeighborZ(); bool isInCellCache(const Location& location) const; std::vector getCellsInLine(const ModelCoordinate& pt1, const ModelCoordinate& pt2, bool blocker = false); std::vector getCellsInRect(const Rect& rec); std::vector getCellsInCircle(const ModelCoordinate& center, uint16_t radius); std::vector getCellsInCircleSegment(const ModelCoordinate& center, uint16_t radius, int32_t sangle, int32_t eangle); void registerCost(const std::string& costId, double cost); void unregisterCost(const std::string& costId); double getCost(const std::string& costId); bool existsCost(const std::string& costId); std::list getCosts(); void unregisterAllCosts(); void addCellToCost(const std::string& costId, Cell* cell); void addCellsToCost(const std::string& costId, const std::vector& cells); void removeCellFromCost(Cell* cell); void removeCellFromCost(const std::string& costId, Cell* cell); void removeCellsFromCost(const std::string& costId, const std::vector& cells); std::vector getCostCells(const std::string& costId); std::vector getCellCosts(Cell* cell); bool existsCostForCell(const std::string& costId, Cell* cell); void setDefaultCostMultiplier(double multi); double getDefaultCostMultiplier(); void setDefaultSpeedMultiplier(double multi); double getDefaultSpeedMultiplier(); void addCellToArea(const std::string& id, Cell* cell); void addCellsToArea(const std::string& id, const std::vector& cells); void removeCellFromArea(const std::string& id, Cell* cell); void removeCellsFromArea(const std::string& id, const std::vector& cells); void removeArea(const std::string& id); bool existsArea(const std::string& id); std::vector getAreas(); std::vector getCellAreas(Cell* cell); std::vector getAreaCells(const std::string& id); bool isCellInArea(const std::string& id, Cell* cell); void setStaticSize(bool staticSize); bool isStaticSize(); }; } fifengine-0.4.1/engine/core/model/structures/instance.cpp000066400000000000000000001160671304641216200235100ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/log/logger.h" #include "util/base/exception.h" #include "util/math/fife_math.h" #include "util/time/timemanager.h" #include "model/metamodel/grids/cellgrid.h" #include "model/metamodel/ipather.h" #include "model/metamodel/action.h" #include "model/metamodel/timeprovider.h" #include "model/structures/layer.h" #include "model/structures/map.h" #include "model/structures/instancetree.h" #include "view/visual.h" #include "pathfinder/route.h" #include "instance.h" namespace FIFE { static Logger _log(LM_INSTANCE); class ActionInfo { public: ActionInfo(IPather* pather, const Location& curloc): m_action(NULL), m_target(NULL), m_speed(0), m_repeating(false), m_action_start_time(0), m_action_offset_time(0), m_prev_call_time(0), m_pather(pather), m_leader(NULL), m_route(NULL), m_delete_route(true) {} ~ActionInfo() { if (m_route && m_delete_route) { int32_t sessionId = m_route->getSessionId(); if (sessionId != -1) { m_pather->cancelSession(sessionId); } delete m_route; } delete m_target; } // Current action, owned by object Action* m_action; // target location for ongoing movement Location* m_target; // current movement speed double m_speed; // should action be repeated? used only for non-moving actions, moving ones repeat until movement is finished bool m_repeating; // action start time (ticks) uint32_t m_action_start_time; // action offset time (ticks) for resuming an action uint32_t m_action_offset_time; // ticks since last call uint32_t m_prev_call_time; // pather IPather* m_pather; // leader for follow activity Instance* m_leader; // pointer to route that contain path and additional information Route* m_route; bool m_delete_route; }; class SayInfo { public: SayInfo(const std::string& txt, uint32_t duration): m_txt(txt), m_duration(duration), m_start_time(0) {} std::string m_txt; uint32_t m_duration; uint32_t m_start_time; }; Instance::InstanceActivity::InstanceActivity(Instance& source): m_location(source.m_location), m_oldLocation(source.m_location), m_rotation(source.m_rotation), m_oldRotation(source.m_rotation), m_action(), m_speed(0), m_timeMultiplier(1.0), m_sayText(""), m_changeListeners(), m_actionListeners(), m_actionInfo(NULL), m_sayInfo(NULL), m_timeProvider(NULL), m_blocking(source.m_blocking), m_additional(ICHANGE_NO_CHANGES) { } Instance::InstanceActivity::~InstanceActivity() { delete m_actionInfo; delete m_sayInfo; delete m_timeProvider; } void Instance::InstanceActivity::update(Instance& source) { source.m_changeInfo = ICHANGE_NO_CHANGES; if (m_additional != ICHANGE_NO_CHANGES) { source.m_changeInfo = m_additional; m_additional = ICHANGE_NO_CHANGES; } if (m_location != source.m_location) { source.m_changeInfo |= ICHANGE_LOC; if (m_location.getLayerCoordinates() != source.m_location.getLayerCoordinates()) { m_oldLocation.setLayer(m_location.getLayer()); m_oldLocation.setLayerCoordinates(m_location.getLayerCoordinates()); source.m_changeInfo |= ICHANGE_CELL; } m_location = source.m_location; } if (m_rotation != source.m_rotation) { m_oldRotation = m_rotation; source.m_changeInfo |= ICHANGE_ROTATION; m_rotation = source.m_rotation; } if (m_actionInfo && (m_speed != m_actionInfo->m_speed)) { source.m_changeInfo |= ICHANGE_SPEED; m_speed = m_actionInfo->m_speed; } if (m_actionInfo && (m_action != m_actionInfo->m_action)) { source.m_changeInfo |= ICHANGE_ACTION; m_action = m_actionInfo->m_action; } if (m_timeProvider && (m_timeMultiplier != m_timeProvider->getMultiplier())) { source.m_changeInfo |= ICHANGE_TIME_MULTIPLIER; m_timeMultiplier = m_timeProvider->getMultiplier(); } if (m_sayInfo && (m_sayText != m_sayInfo->m_txt)) { source.m_changeInfo |= ICHANGE_SAYTEXT; m_sayText = m_sayInfo->m_txt; } if (m_blocking != source.m_blocking) { source.m_changeInfo |= ICHANGE_BLOCK; m_blocking = source.m_blocking; } if (source.m_changeInfo != ICHANGE_NO_CHANGES) { std::vector::iterator i = m_changeListeners.begin(); while (i != m_changeListeners.end()) { if (NULL != *i) { (*i)->onInstanceChanged(&source, source.m_changeInfo); } ++i; } // Really remove "removed" listeners. m_changeListeners.erase( std::remove(m_changeListeners.begin(),m_changeListeners.end(), (InstanceChangeListener*)NULL), m_changeListeners.end()); } } Instance::Instance(Object* object, const Location& location, const std::string& identifier): m_id(identifier), m_rotation(0), m_activity(NULL), m_changeInfo(ICHANGE_NO_CHANGES), m_object(object), m_ownObject(false), m_location(location), m_visual(NULL), m_blocking(object->isBlocking()), m_overrideBlocking(false), m_isVisitor(false), m_visitorShape(ITYPE_CIRCLE_SHAPE), m_visitorRadius(0), m_cellStackPos(object->getCellStackPosition()), m_specialCost(object->isSpecialCost()), m_cost(object->getCost()), m_costId(object->getCostId()), m_mainMultiInstance(NULL) { // create multi object instances if (object->isMultiObject()) { m_mainMultiInstance = this; uint32_t count = 0; Layer* layer = m_location.getLayer(); const ExactModelCoordinate& emc = m_location.getExactLayerCoordinatesRef(); const std::set& multis = object->getMultiParts(); std::set::const_iterator it = multis.begin(); for (; it != multis.end(); ++it, ++count) { if (*it == m_object) { continue; } std::vector partcoords = (*it)->getMultiPartCoordinates(m_rotation); std::vector::iterator coordit = partcoords.begin(); for (; coordit != partcoords.end(); ++coordit) { ExactModelCoordinate tmp_emc(emc.x+(*coordit).x, emc.y+(*coordit).y, emc.z+(*coordit).z); std::ostringstream counter; counter << count; Instance* instance = layer->createInstance(*it, tmp_emc, identifier+counter.str()); InstanceVisual::create(instance); m_multiInstances.push_back(instance); instance->addDeleteListener(this); instance->setMainMultiInstance(this); } } } } Instance::~Instance() { std::vector::iterator itor; for(itor = m_deleteListeners.begin(); itor != m_deleteListeners.end(); ++itor) { if (*itor != NULL) { (*itor)->onInstanceDeleted(this); } } if(m_activity && m_activity->m_actionInfo) { // Don't ditribute onActionFinished in case we're already // deleting. m_activity->m_actionListeners.clear(); finalizeAction(); } if (!m_multiInstances.empty()) { std::vector::iterator it = m_multiInstances.begin(); for (; it != m_multiInstances.end(); ++it) { (*it)->removeDeleteListener(this); (*it)->setMainMultiInstance(NULL); } } delete m_activity; delete m_visual; if (m_ownObject) { delete m_object; } } void Instance::initializeChanges() { if (!m_activity) { m_activity = new InstanceActivity(*this); } if (m_location.getLayer()) { m_location.getLayer()->setInstanceActivityStatus(this, true); } } void Instance::prepareForUpdate() { if (isActive()) { refresh(); } else { initializeChanges(); } } bool Instance::isActive() const { return (m_activity != 0); } Object* Instance::getObject() { return m_object; } void Instance::setLocation(const Location& loc) { // ToDo: Handle the case when the layers are different if(m_location != loc) { prepareForUpdate(); if (m_location.getLayerCoordinates() != loc.getLayerCoordinates()) { m_location.getLayer()->getInstanceTree()->removeInstance(this); m_location = loc; m_location.getLayer()->getInstanceTree()->addInstance(this); } else { m_location = loc; } } } Location Instance::getLocation() const { return m_location; } Location& Instance::getLocationRef() { return m_location; } void Instance::setRotation(int32_t rotation) { while (rotation < 0) { rotation += 360; } rotation %= 360; if(m_rotation != rotation) { prepareForUpdate(); m_rotation = rotation; } } int32_t Instance::getRotation() const { return m_rotation; } void Instance::setId(const std::string& identifier) { m_id = identifier; } const std::string& Instance::getId() { return m_id; } void Instance::setBlocking(bool blocking) { if (m_overrideBlocking) { prepareForUpdate(); m_blocking = blocking; } } bool Instance::isBlocking() const { return m_blocking; } void Instance::setOverrideBlocking(bool overblock) { m_overrideBlocking = overblock; } bool Instance::isOverrideBlocking() const { return m_overrideBlocking; } void Instance::addActionListener(InstanceActionListener* listener) { initializeChanges(); m_activity->m_actionListeners.push_back(listener); } void Instance::removeActionListener(InstanceActionListener* listener) { if (!m_activity) { return; } std::vector::iterator i = m_activity->m_actionListeners.begin(); while (i != m_activity->m_actionListeners.end()) { if ((*i) == listener) { *i = NULL; return; } ++i; } FL_WARN(_log, "Cannot remove unknown listener"); } void Instance::addChangeListener(InstanceChangeListener* listener) { initializeChanges(); m_activity->m_changeListeners.push_back(listener); } void Instance::callOnActionFrame(Action* action, int32_t frame) { if (!m_activity) { return; } std::vector::iterator i = m_activity->m_actionListeners.begin(); while (i != m_activity->m_actionListeners.end()) { if(*i) { (*i)->onInstanceActionFrame(this, action, frame); } ++i; } } void Instance::removeChangeListener(InstanceChangeListener* listener) { if (!m_activity) { return; } std::vector::iterator i = m_activity->m_changeListeners.begin(); while (i != m_activity->m_changeListeners.end()) { if ((*i) == listener) { *i = NULL; return; } ++i; } FL_WARN(_log, "Cannot remove unknown listener"); } void Instance::initializeAction(const std::string& actionName) { assert(m_object); initializeChanges(); const Action *old_action = m_activity->m_actionInfo ? m_activity->m_actionInfo->m_action : NULL; if (m_activity->m_actionInfo) { cancelAction(); } m_activity->m_actionInfo = new ActionInfo(m_object->getPather(), m_location); m_activity->m_actionInfo->m_action = m_object->getAction(actionName); if (!m_activity->m_actionInfo->m_action) { delete m_activity->m_actionInfo; m_activity->m_actionInfo = NULL; throw NotFound(std::string("action ") + actionName + " not found"); } m_activity->m_actionInfo->m_prev_call_time = getRuntime(); if (m_activity->m_actionInfo->m_action != old_action) { m_activity->m_actionInfo->m_action_start_time = m_activity->m_actionInfo->m_prev_call_time; } if (isMultiObject()) { std::vector::iterator multi_it = m_multiInstances.begin(); for (; multi_it != m_multiInstances.end(); ++multi_it) { (*multi_it)->initializeAction(actionName); } } } void Instance::move(const std::string& actionName, const Location& target, const double speed, const std::string& costId) { // if new move is identical with the old then return if (m_activity) { if (m_activity->m_actionInfo) { if (m_activity->m_actionInfo->m_target) { if (m_activity->m_actionInfo->m_target->getLayerCoordinates() == target.getLayerCoordinates() && Mathd::Equal(speed, m_activity->m_actionInfo->m_speed) && m_activity->m_actionInfo->m_action == m_object->getAction(actionName) && costId == m_activity->m_actionInfo->m_route->getCostId()) { return; } } } } initializeAction(actionName); m_activity->m_actionInfo->m_target = new Location(target); m_activity->m_actionInfo->m_speed = speed; FL_DBG(_log, LMsg("starting action ") << actionName << " from" << m_location << " to " << target << " with speed " << speed); Route* route = m_activity->m_actionInfo->m_route; if (!route) { route = new Route(m_location, *m_activity->m_actionInfo->m_target); route->setRotation(getRotation()); if (costId != "") { route->setCostId(costId); } if (isMultiCell()) { route->setObject(m_object); route->setOccupiedArea(m_location.getLayer()->getCellGrid()-> toMultiCoordinates(m_location.getLayerCoordinates(), m_object->getMultiObjectCoordinates(m_rotation))); } else if (m_object->getZStepRange() != -1 || !m_object->getWalkableAreas().empty()) { route->setObject(m_object); } m_activity->m_actionInfo->m_route = route; if (!m_activity->m_actionInfo->m_pather->solveRoute(route)) { setFacingLocation(target); finalizeAction(); } } } void Instance::follow(const std::string& actionName, Instance* leader, const double speed) { initializeAction(actionName); m_activity->m_actionInfo->m_target = new Location(leader->getLocationRef()); m_activity->m_actionInfo->m_speed = speed; m_activity->m_actionInfo->m_leader = leader; leader->addDeleteListener(this); FL_DBG(_log, LMsg("starting action ") << actionName << " from" << m_location << " to " << *m_activity->m_actionInfo->m_target << " with speed " << speed); } void Instance::follow(const std::string& actionName, Route* route, const double speed) { initializeAction(actionName); m_activity->m_actionInfo->m_target = new Location(route->getEndNode()); m_activity->m_actionInfo->m_speed = speed; m_activity->m_actionInfo->m_route = route; m_activity->m_actionInfo->m_delete_route = false; if (isMultiCell()) { route->setObject(m_object); route->setOccupiedArea(m_location.getLayer()->getCellGrid()-> toMultiCoordinates(m_location.getLayerCoordinates(), m_object->getMultiObjectCoordinates(m_rotation))); } else if (m_object->getZStepRange() != -1 || !m_object->getWalkableAreas().empty()) { route->setObject(m_object); } FL_DBG(_log, LMsg("starting action ") << actionName << " from" << m_location << " to " << *m_activity->m_actionInfo->m_target << " with speed " << speed); } void Instance::cancelMovement(uint32_t length) { if (m_activity) { ActionInfo* info = m_activity->m_actionInfo; if (info) { Route* route = info->m_route; if (route) { route->cutPath(length); } } } } Route* Instance::getRoute() { if (m_activity) { ActionInfo* info = m_activity->m_actionInfo; if (info) { return info->m_route; } } return NULL; } void Instance::setVisitor(bool visit) { m_isVisitor = visit; } bool Instance::isVisitor() { return m_isVisitor; } void Instance::setVisitorShape(VisitorShapeInfo info) { m_visitorShape = info; } VisitorShapeInfo Instance::getVisitorShape() { return m_visitorShape; } void Instance::setVisitorRadius(uint16_t radius) { m_visitorRadius = radius; } uint16_t Instance::getVisitorRadius() { return m_visitorRadius; } void Instance::setCellStackPosition(uint8_t stack) { m_cellStackPos = stack; } uint8_t Instance::getCellStackPosition() { return m_cellStackPos; } bool Instance::isSpecialCost() { return m_specialCost; } const std::vector& Instance::getMultiInstances() { return m_multiInstances; } void Instance::setMainMultiInstance(Instance* main) { m_mainMultiInstance = main; } Instance* Instance::getMainMultiInstance() { return m_mainMultiInstance; } void Instance::actOnce(const std::string& actionName, const Location& direction) { initializeAction(actionName); m_activity->m_actionInfo->m_repeating = false; setFacingLocation(direction); } void Instance::actOnce(const std::string& actionName, int32_t rotation) { initializeAction(actionName); m_activity->m_actionInfo->m_repeating = false; setRotation(rotation); } void Instance::actOnce(const std::string& actionName) { initializeAction(actionName); m_activity->m_actionInfo->m_repeating = false; } void Instance::actRepeat(const std::string& actionName, const Location& direction) { initializeAction(actionName); m_activity->m_actionInfo->m_repeating = true; setFacingLocation(direction); } void Instance::actRepeat(const std::string& actionName, int32_t rotation) { initializeAction(actionName); m_activity->m_actionInfo->m_repeating = true; setRotation(rotation); } void Instance::actRepeat(const std::string& actionName) { initializeAction(actionName); m_activity->m_actionInfo->m_repeating = true; } void Instance::say(const std::string& text, uint32_t duration) { initializeChanges(); delete m_activity->m_sayInfo; m_activity->m_sayInfo = NULL; if (text != "") { m_activity->m_sayInfo = new SayInfo(text, duration); m_activity->m_sayInfo->m_start_time = getRuntime(); } } const std::string* Instance::getSayText() const { if (m_activity && m_activity->m_sayInfo) { return &m_activity->m_sayInfo->m_txt; } return NULL; } bool Instance::processMovement() { ActionInfo* info = m_activity->m_actionInfo; Route* route = info->m_route; Location target; if (info->m_leader) { target = info->m_leader->getLocationRef(); } else { target = *info->m_target; } if (!route) { route = new Route(m_location, *info->m_target); route->setRotation(getRotation()); info->m_route = route; if (isMultiCell()) { route->setObject(m_object); route->setOccupiedArea(m_location.getLayer()->getCellGrid()-> toMultiCoordinates(m_location.getLayerCoordinates(), m_object->getMultiObjectCoordinates(m_rotation))); } else if (m_object->getZStepRange() != -1 || !m_object->getWalkableAreas().empty()) { route->setObject(m_object); } if (!info->m_pather->solveRoute(route)) { setFacingLocation(target); return true; } // update target if needed } else if (route->getEndNode().getLayerCoordinates() != target.getLayerCoordinates()) { if (route->isReplanned() || isMultiCell()) { *info->m_target = route->getEndNode(); route->setReplanned(false); if (isMultiCell()) { route->setOccupiedArea(m_location.getLayer()->getCellGrid()-> toMultiCoordinates(m_location.getLayerCoordinates(), m_object->getMultiObjectCoordinates(m_rotation))); } } else { if (route->getPathLength() == 0) { route->setStartNode(m_location); } else { route->setStartNode(route->getCurrentNode()); } route->setEndNode(target); if (!info->m_pather->solveRoute(route)) { setFacingLocation(target); return true; } } } if (route->getRouteStatus() == ROUTE_SOLVED) { // timeslice for this movement uint32_t timedelta = m_activity->m_timeProvider->getGameTime() - info->m_prev_call_time; // how far we can travel double distance_to_travel = (static_cast(timedelta) / 1000.0) * info->m_speed; // location for this movement Location nextLocation = m_location; bool can_follow = info->m_pather->followRoute(m_location, route, distance_to_travel, nextLocation); if (can_follow) { setRotation(route->getRotation()); // move to another layer if (m_location.getLayer() != nextLocation.getLayer()) { m_location.getLayer()->getMap()->addInstanceForTransfer(this, nextLocation); if (!m_multiInstances.empty()) { std::vector::iterator it = m_multiInstances.begin(); for (; it != m_multiInstances.end(); ++it) { Location newloc = nextLocation; std::vector tmpcoords = m_location.getLayer()->getCellGrid()-> toMultiCoordinates(nextLocation.getLayerCoordinates(), (*it)->getObject()->getMultiPartCoordinates(m_rotation)); newloc.setLayerCoordinates(tmpcoords.front()); m_location.getLayer()->getMap()->addInstanceForTransfer(*it, newloc); } } return false; } setLocation(nextLocation); return false; } // move to another layer if (m_location.getLayer() != nextLocation.getLayer()) { m_location.getLayer()->getMap()->addInstanceForTransfer(this, nextLocation); if (!m_multiInstances.empty()) { std::vector::iterator it = m_multiInstances.begin(); for (; it != m_multiInstances.end(); ++it) { Location newloc = nextLocation; std::vector tmpcoords = m_location.getLayer()->getCellGrid()-> toMultiCoordinates(nextLocation.getLayerCoordinates(), (*it)->getObject()->getMultiPartCoordinates(m_rotation)); newloc.setLayerCoordinates(tmpcoords.front()); m_location.getLayer()->getMap()->addInstanceForTransfer(*it, newloc); } } return true; } setLocation(nextLocation); // need new route? if (route->getEndNode().getLayerCoordinates() != m_location.getLayerCoordinates()) { if (m_location.getLayerDistanceTo(target) > 1.5) { if (route->getPathLength() == 0) { route->setStartNode(m_location); } else { route->setStartNode(route->getPreviousNode()); } route->setEndNode(target); route->setOccupiedArea(m_location.getLayer()->getCellGrid()-> toMultiCoordinates(m_location.getLayerCoordinates(), m_object->getMultiObjectCoordinates(m_rotation))); return !info->m_pather->solveRoute(route); } setFacingLocation(target); } return true; } else if (route->getRouteStatus() == ROUTE_FAILED) { return true; } return false; } InstanceChangeInfo Instance::update() { if (!m_activity) { return ICHANGE_NO_CHANGES; } // remove DeleteListeners m_deleteListeners.erase(std::remove(m_deleteListeners.begin(),m_deleteListeners.end(), (InstanceDeleteListener*)NULL), m_deleteListeners.end()); if (!m_activity->m_timeProvider) { bindTimeProvider(); } ActionInfo* info = m_activity->m_actionInfo; if (info) { // FL_DBG(_log, "updating instance"); if (info->m_target) { // FL_DBG(_log, "action contains target for movement"); bool movement_finished = processMovement(); if (movement_finished) { // FL_DBG(_log, "movement finished"); finalizeAction(); } } else { // FL_DBG(_log, "action does not contain target for movement"); if (m_activity->m_timeProvider->getGameTime() - info->m_action_start_time + info->m_action_offset_time >= info->m_action->getDuration()) { if (info->m_repeating) { info->m_action_start_time = m_activity->m_timeProvider->getGameTime(); // prock: offset no longer needed info->m_action_offset_time = 0; } else if (!m_object->isMultiPart()) { finalizeAction(); } } } // previous code may invalidate actioninfo. if( m_activity->m_actionInfo ) { m_activity->m_actionInfo->m_prev_call_time = m_activity->m_timeProvider->getGameTime(); } } m_activity->update(*this); if (m_activity->m_sayInfo) { if (m_activity->m_sayInfo->m_duration > 0) { if (m_activity->m_timeProvider->getGameTime() >= m_activity->m_sayInfo->m_start_time + m_activity->m_sayInfo->m_duration) { say(""); } } } else if (!m_activity->m_actionInfo && m_changeInfo == ICHANGE_NO_CHANGES && m_activity->m_actionListeners.empty() && m_activity->m_changeListeners.empty()) { // delete superfluous activity delete m_activity; m_activity = 0; return ICHANGE_NO_CHANGES; } return m_changeInfo; } void Instance::finalizeAction() { FL_DBG(_log, "finalizing action"); assert(m_activity); assert(m_activity->m_actionInfo); if( m_activity->m_actionInfo->m_leader ) { m_activity->m_actionInfo->m_leader->removeDeleteListener(this); } Action* action = m_activity->m_actionInfo->m_action; delete m_activity->m_actionInfo; m_activity->m_actionInfo = NULL; // this is needed in case the new action is set on the same pump and // it is the same action as the finalized action m_activity->m_action = NULL; if (isMultiObject()) { std::vector::iterator multi_it = m_multiInstances.begin(); for (; multi_it != m_multiInstances.end(); ++multi_it) { (*multi_it)->finalizeAction(); } } std::vector::iterator i = m_activity->m_actionListeners.begin(); while (i != m_activity->m_actionListeners.end()) { if(*i) (*i)->onInstanceActionFinished(this, action); ++i; } m_activity->m_actionListeners.erase( std::remove(m_activity->m_actionListeners.begin(), m_activity->m_actionListeners.end(), (InstanceActionListener*)NULL), m_activity->m_actionListeners.end()); } void Instance::cancelAction() { FL_DBG(_log, "cancel action"); assert(m_activity); assert(m_activity->m_actionInfo); if( m_activity->m_actionInfo->m_leader ) { m_activity->m_actionInfo->m_leader->removeDeleteListener(this); } Action* action = m_activity->m_actionInfo->m_action; delete m_activity->m_actionInfo; m_activity->m_actionInfo = NULL; // this is needed in case the new action is set on the same pump and // it is the same action as the canceled action m_activity->m_action = NULL; if (isMultiObject()) { std::vector::iterator multi_it = m_multiInstances.begin(); for (; multi_it != m_multiInstances.end(); ++multi_it) { (*multi_it)->cancelAction(); } } std::vector::iterator i = m_activity->m_actionListeners.begin(); while (i != m_activity->m_actionListeners.end()) { if(*i) (*i)->onInstanceActionCancelled(this, action); ++i; } m_activity->m_actionListeners.erase( std::remove(m_activity->m_actionListeners.begin(), m_activity->m_actionListeners.end(), (InstanceActionListener*)NULL), m_activity->m_actionListeners.end()); } Action* Instance::getCurrentAction() const { if (m_activity && m_activity->m_actionInfo) { return m_activity->m_actionInfo->m_action; } return NULL; } Location Instance::getTargetLocation() const { if (m_activity && m_activity->m_actionInfo && m_activity->m_actionInfo->m_target) { return *m_activity->m_actionInfo->m_target; } return m_location; } double Instance::getMovementSpeed() const { if (m_activity && m_activity->m_actionInfo) { return m_activity->m_actionInfo->m_speed; } return 0; } void Instance::setFacingLocation(const Location& loc) { setRotation(getAngleBetween(m_location, loc)); } Location Instance::getFacingLocation() { return getFacing(m_location, m_rotation); } Location& Instance::getOldLocationRef() { if (m_activity) { return m_activity->m_oldLocation; } return m_location; } int32_t Instance::getOldRotation() const { if (m_activity) { return m_activity->m_oldRotation; } return m_rotation; } uint32_t Instance::getActionRuntime() { if (m_activity && m_activity->m_actionInfo) { if(!m_activity->m_timeProvider) bindTimeProvider(); return m_activity->m_timeProvider->getGameTime() - m_activity->m_actionInfo->m_action_start_time + m_activity->m_actionInfo->m_action_offset_time; } return getRuntime(); } void Instance::setActionRuntime(uint32_t time_offset) { m_activity->m_actionInfo->m_action_offset_time = time_offset; } void Instance::bindTimeProvider() { float multiplier = 1.0; if (m_activity->m_timeProvider) { multiplier = m_activity->m_timeProvider->getMultiplier(); } delete m_activity->m_timeProvider; m_activity->m_timeProvider = NULL; if (m_location.getLayer()) { Map* map = m_location.getLayer()->getMap(); if (map) { m_activity->m_timeProvider = new TimeProvider(map->getTimeProvider()); } } if (!m_activity->m_timeProvider) { m_activity->m_timeProvider = new TimeProvider(NULL); } m_activity->m_timeProvider->setMultiplier(multiplier); } void Instance::refresh() { initializeChanges(); bindTimeProvider(); } InstanceChangeInfo Instance::getChangeInfo() { if (m_activity) { return m_changeInfo; } return ICHANGE_NO_CHANGES; } void Instance::callOnTransparencyChange() { prepareForUpdate(); m_activity->m_additional |= ICHANGE_TRANSPARENCY; } void Instance::callOnVisibleChange() { prepareForUpdate(); m_activity->m_additional |= ICHANGE_VISIBLE; } void Instance::callOnStackPositionChange() { prepareForUpdate(); m_activity->m_additional |= ICHANGE_STACKPOS; } void Instance::setTimeMultiplier(float multip) { initializeChanges(); if (!m_activity->m_timeProvider) { bindTimeProvider(); } m_activity->m_timeProvider->setMultiplier(multip); } float Instance::getTimeMultiplier() { if (m_activity && m_activity->m_timeProvider) { return m_activity->m_timeProvider->getMultiplier(); } return 1.0; } float Instance::getTotalTimeMultiplier() { if (m_activity && m_activity->m_timeProvider) { return m_activity->m_timeProvider->getTotalMultiplier(); } if (m_location.getLayer()) { Map* map = m_location.getLayer()->getMap(); if (map && map->getTimeProvider()) { return map->getTimeProvider()->getTotalMultiplier(); } } return 1.0; } uint32_t Instance::getRuntime() { if (m_activity) { if(!m_activity->m_timeProvider) bindTimeProvider(); return m_activity->m_timeProvider->getGameTime(); } if (m_location.getLayer()) { Map* map = m_location.getLayer()->getMap(); if (map && map->getTimeProvider()) { return map->getTimeProvider()->getGameTime(); } } return TimeManager::instance()->getTime(); } void Instance::setCost(const std::string& id, double cost) { m_specialCost = true; m_costId = id; m_cost = cost; } void Instance::resetCost() { m_specialCost = false; } double Instance::getCost() { if (m_specialCost) { return m_cost; } return m_object->getCost(); } std::string Instance::getCostId() { if (m_specialCost) { return m_costId; } return m_object->getCostId(); } double Instance::getSpeed() { return m_object->getSpeed(); } bool Instance::isSpecialSpeed() { return m_object->isSpecialSpeed(); } bool Instance::isMultiCell() { return m_object->isMultiObject(); } bool Instance::isMultiObject() { return !m_multiInstances.empty(); } void Instance::updateMultiInstances() { if (!m_multiInstances.empty()) { // use map coords for rotation and movement // instances are changed on InstanceTree but not on CellCache Location loc = m_location; const ExactModelCoordinate anchor = m_location.getMapCoordinates(); const ExactModelCoordinate& offset = m_object->getRotationAnchor(); loc.setExactLayerCoordinates(offset); const ExactModelCoordinate anchor_offset = loc.getMapCoordinates(); int32_t rot = m_rotation; if (m_object->isRestrictedRotation()) { rot = m_object->getRestrictedRotation(m_rotation); } double mcos = Mathd::Cos(double(rot) * (Mathd::pi()/180.0)); double msin = Mathd::Sin(double(rot) * (Mathd::pi()/180.0)); std::vector::iterator it = m_multiInstances.begin(); for (; it != m_multiInstances.end(); ++it) { // use rotation 0 to get the "default" coordinate std::vector mcv = (*it)->getObject()->getMultiPartCoordinates(0); loc.setLayerCoordinates(mcv.front()); ExactModelCoordinate emc = loc.getMapCoordinates(); ExactModelCoordinate nemc(emc.x-anchor_offset.x, emc.y-anchor_offset.y); emc.x = ((nemc.x * mcos + nemc.y * msin) + anchor_offset.x) + anchor.x; emc.y = ((-nemc.x * msin + nemc.y * mcos) + anchor_offset.y) + anchor.y; loc.setMapCoordinates(emc); (*it)->setLocation(loc); (*it)->setRotation(rot); } } } void Instance::addStaticColorOverlay(uint32_t angle, const OverlayColors& colors) { if (!m_ownObject) { createOwnObject(); } ObjectVisual* objVis = m_object->getVisual(); objVis->addStaticColorOverlay(angle, colors); prepareForUpdate(); m_activity->m_additional |= ICHANGE_VISUAL; } OverlayColors* Instance::getStaticColorOverlay(int32_t angle) { if (!m_ownObject) { return 0; } ObjectVisual* objVis = m_object->getVisual(); return objVis->getStaticColorOverlay(angle); } void Instance::removeStaticColorOverlay(int32_t angle) { if (m_ownObject) { ObjectVisual* objVis = m_object->getVisual(); objVis->removeStaticColorOverlay(angle); prepareForUpdate(); m_activity->m_additional |= ICHANGE_VISUAL; } } bool Instance::isStaticColorOverlay() { if (!m_ownObject) { return false; } ObjectVisual* objVis = m_object->getVisual(); return objVis->isColorOverlay(); } void Instance::addColorOverlay(const std::string& actionName, uint32_t angle, const OverlayColors& colors) { ActionVisual* visual = getActionVisual(actionName, true); if (visual) { visual->addColorOverlay(angle, colors); prepareForUpdate(); m_activity->m_additional |= ICHANGE_VISUAL; } } OverlayColors* Instance::getColorOverlay(const std::string& actionName, uint32_t angle) { ActionVisual* visual = getActionVisual(actionName, false); if (visual) { return visual->getColorOverlay(angle); } return NULL; } void Instance::removeColorOverlay(const std::string& actionName, int32_t angle) { ActionVisual* visual = getActionVisual(actionName, false); if (visual) { visual->removeColorOverlay(angle); prepareForUpdate(); m_activity->m_additional |= ICHANGE_VISUAL; } } void Instance::addAnimationOverlay(const std::string& actionName, uint32_t angle, int32_t order, const AnimationPtr& animationptr) { ActionVisual* visual = getActionVisual(actionName, true); if (visual) { visual->addAnimationOverlay(angle, order, animationptr); prepareForUpdate(); m_activity->m_additional |= ICHANGE_VISUAL; } } std::map Instance::getAnimationOverlay(const std::string& actionName, int32_t angle) { ActionVisual* visual = getActionVisual(actionName, false); if (visual) { return visual->getAnimationOverlay(angle); } return std::map(); } void Instance::removeAnimationOverlay(const std::string& actionName, uint32_t angle, int32_t order) { ActionVisual* visual = getActionVisual(actionName, false); if (visual) { visual->removeAnimationOverlay(angle, order); prepareForUpdate(); m_activity->m_additional |= ICHANGE_VISUAL; } } void Instance::addColorOverlay(const std::string& actionName, uint32_t angle, int32_t order, const OverlayColors& colors) { ActionVisual* visual = getActionVisual(actionName, true); if (visual) { visual->addColorOverlay(angle, order, colors); prepareForUpdate(); m_activity->m_additional |= ICHANGE_VISUAL; } } OverlayColors* Instance::getColorOverlay(const std::string& actionName, uint32_t angle, int32_t order) { ActionVisual* visual = getActionVisual(actionName, false); if (visual) { return visual->getColorOverlay(angle, order); } return NULL; } void Instance::removeColorOverlay(const std::string& actionName, int32_t angle, int32_t order) { ActionVisual* visual = getActionVisual(actionName, false); if (visual) { visual->removeColorOverlay(angle, order); prepareForUpdate(); m_activity->m_additional |= ICHANGE_VISUAL; } } bool Instance::isAnimationOverlay(const std::string& actionName) { ActionVisual* visual = getActionVisual(actionName, false); if (visual) { return visual->isAnimationOverlay(); } return false; } bool Instance::isColorOverlay(const std::string& actionName) { ActionVisual* visual = getActionVisual(actionName, false); if (visual) { return visual->isColorOverlay(); } return false; } void Instance::convertToOverlays(const std::string& actionName, bool color) { ActionVisual* visual = getActionVisual(actionName, true); visual->convertToOverlays(color); } void Instance::createOwnObject() { if (!m_ownObject) { m_ownObject = true; ObjectVisual* ov = m_object->getVisual(); ObjectVisual* nov = 0; m_object = new Object(m_object->getId(), m_object->getNamespace(), m_object); if (!ov) { ObjectVisual::create(m_object); } else { nov = new ObjectVisual(*ov); m_object->adoptVisual(nov); } } } ActionVisual* Instance::getActionVisual(const std::string& actionName, bool create) { ActionVisual* nav = NULL; if (!m_ownObject) { createOwnObject(); } Action* action = m_object->getAction(actionName, false); if (!action) { action = m_object->getAction(actionName); if (!action) { throw NotFound(std::string("action ") + actionName + " not found"); } else if (create) { // if we change the current action then we have to replace the pointer bool replace = getCurrentAction() == action; // check if its the default action bool defaultAction = m_object->getDefaultAction() == action; ActionVisual* av = action->getVisual(); action = m_object->createAction(actionName, defaultAction); nav = new ActionVisual(*av); action->adoptVisual(nav); if (replace) { m_activity->m_actionInfo->m_action = action; } } } else { nav = action->getVisual(); } return nav; } void Instance::addDeleteListener(InstanceDeleteListener *listener) { m_deleteListeners.push_back(listener); } void Instance::removeDeleteListener(InstanceDeleteListener *listener) { if (!m_deleteListeners.empty()) { std::vector::iterator itor; itor = std::find(m_deleteListeners.begin(), m_deleteListeners.end(), listener); if(itor != m_deleteListeners.end()) { if ((*itor) == listener) { *itor = NULL; return; } } else { FL_WARN(_log, "Cannot remove unknown listener"); } } } void Instance::onInstanceDeleted(Instance* instance) { if(m_activity && m_activity->m_actionInfo && m_activity->m_actionInfo->m_leader == instance) { m_activity->m_actionInfo->m_leader = NULL; } if (isMultiObject()) { std::vector::iterator multi_it = m_multiInstances.begin(); for (; multi_it != m_multiInstances.end(); ++multi_it) { if (*multi_it == instance) { m_multiInstances.erase(multi_it); break; } } } } } fifengine-0.4.1/engine/core/model/structures/instance.h000066400000000000000000000535521304641216200231540ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_INSTANCE_H #define FIFE_INSTANCE_H // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/fifeclass.h" #include "model/metamodel/object.h" #include "model/metamodel/ivisual.h" #include "view/visual.h" #include "location.h" namespace FIFE { class Layer; class Action; class Instance; class ActionInfo; class SayInfo; class TimeProvider; class Route; class InstanceActionListener { public: virtual ~InstanceActionListener() {}; virtual void onInstanceActionFinished(Instance* instance, Action* action) = 0; virtual void onInstanceActionCancelled(Instance* instance, Action* action) = 0; virtual void onInstanceActionFrame(Instance* instance, Action* action, int32_t frame) = 0; }; enum InstanceChangeType { ICHANGE_NO_CHANGES = 0x0000, ICHANGE_LOC = 0x0001, ICHANGE_ROTATION = 0x0002, ICHANGE_SPEED = 0x0004, ICHANGE_ACTION = 0x0008, ICHANGE_TIME_MULTIPLIER = 0x0010, ICHANGE_SAYTEXT = 0x0020, ICHANGE_BLOCK = 0x0040, ICHANGE_CELL = 0x0080, ICHANGE_TRANSPARENCY = 0x0100, ICHANGE_VISIBLE = 0x0200, ICHANGE_STACKPOS = 0x0400, ICHANGE_VISUAL = 0x0800 }; typedef uint32_t InstanceChangeInfo; class InstanceChangeListener { public: virtual ~InstanceChangeListener() {}; virtual void onInstanceChanged(Instance* instance, InstanceChangeInfo info) = 0; }; class InstanceDeleteListener { public: virtual ~InstanceDeleteListener() {}; virtual void onInstanceDeleted(Instance* instance) =0; }; enum VisitorShapeType { ITYPE_NO_SHAPE = 0, ITYPE_QUAD_SHAPE, ITYPE_CIRCLE_SHAPE }; typedef uint8_t VisitorShapeInfo; /** An Instance is an "instantiation" of an Object at a Location. * */ class Instance : public FifeClass, public InstanceDeleteListener { public: /** Constructor * Instances are created by calling addInstance from layer, thus * this method should really be called only by layer or test code */ Instance(Object* object, const Location& location, const std::string& identifier=""); /** Destructor */ virtual ~Instance(); /** Get the identifier for this instance; possibly null. */ const std::string& getId(); /** Set the identifier for this instance. */ void setId(const std::string& identifier=""); /** Gets object where this instance is instantiated from */ Object* getObject(); /** Sets location of the instance * @param loc new location */ void setLocation(const Location& loc); /** Gets current location of instance * @note does not return const Location&, since swig wont be const correct * @return current location */ Location getLocation() const; /** Gets reference of current location of instance * @return reference to current location */ Location& getLocationRef(); /** Gets movement target in case instance is moving. In case not, returns current location * To move target location, call move-method * @see move * @note does not return const Location&, since swig wont be const correct * @return Movement target location */ Location getTargetLocation() const; /** Sets the direction where instance is heading. Useful e.g. with static * instances which don't "move" or "act" */ void setFacingLocation(const Location& loc); /** Returns the direction where instance is heading * @note does not return const Location&, since swig wont be const correct * @return the direction of instance. */ Location getFacingLocation(); /** Gets reference of old location of instance * @return reference to old location */ Location& getOldLocationRef(); /** Set the rotation offset of this instance */ void setRotation(int32_t rotation); /** Get the rotation offset of this instance * Returns direction where instance is heading */ int32_t getRotation() const; /** Get the old rotation offset of this instance * Returns direction where instance was heading */ int32_t getOldRotation() const; /** Sets if instance blocks movement */ void setBlocking(bool blocking); /** Gets if instance blocks movement */ bool isBlocking() const; /** Sets if instance blocking can overriden */ void setOverrideBlocking(bool overblock); /** Gets if instance blocking can overriden */ bool isOverrideBlocking() const; /** Auxiliary function to inform ActionListeners about the active ActionFrame. * @param action pointer to the action * @param frame frame index number of the animation */ void callOnActionFrame(Action* action, int32_t frame); /** Adds new instance action listener * @param listener to add */ void addActionListener(InstanceActionListener* listener); /** Removes associated instance action listener * @param listener to remove */ void removeActionListener(InstanceActionListener* listener); /** Adds new instance change listener * @param listener to add */ void addChangeListener(InstanceChangeListener* listener); /** Removes associated instance change listener * @param listener to remove */ void removeChangeListener(InstanceChangeListener* listener); /** Adds new instance delete listener * @param listener to add */ void addDeleteListener(InstanceDeleteListener* listener); /** Removes associated instance delete listener * @param listener to remove */ void removeDeleteListener(InstanceDeleteListener* listener); /** Gets the currently active action. This is owned by * the instance's object, so don't delete it! * @return current action, NULL in case there is none */ Action* getCurrentAction() const; /** Gets the speed in case instance is moving * otherwise returns 0 * @return instance speed. Value 1 means distance 1 in layer coordinates / second */ double getMovementSpeed() const; /** Gets the time in milliseconds how long action has been active * In case there is no current action, returns -1 * @return action runtime */ uint32_t getActionRuntime(); /** Sets the time in milliseconds how long an action has been active * This was requested in Ticket #373. This way the state * of the action can be saved and restored at a later time * @param time_offset The action time offset that should be applied */ void setActionRuntime(uint32_t time_offset); /** Performs given named action to the instance. While performing the action * moves instance to given target with given speed * @param actionName name of the action * @param target place where to move this instance * @param speed speed used for movement. Units = distance 1 in layer coordinates per second * @param costId id for special costs which is be used as extra multiplier. */ void move(const std::string& actionName, const Location& target, const double speed, const std::string& costId = ""); /** Performs given named action to the instance, once only. Performs no movement * @param actionName name of the action * @param direction coordinates for cell towards instance is heading to when performing the action */ void actOnce(const std::string& actionName, const Location& direction); /** Performs given named action to the instance, once only. Performs no movement * @param actionName name of the action * @param rotation rotation which the instance use when performing the action */ void actOnce(const std::string& actionName, int32_t rotation); /** Performs given named action to the instance, once only. Performs no movement and use current rotation * @param actionName name of the action */ void actOnce(const std::string& actionName); /** Performs given named action to the instance, repeated. Performs no movement * @param actionName name of the action * @param direction coordinates for cell towards instance is heading to when performing the action */ void actRepeat(const std::string& actionName, const Location& direction); /** Performs given named action to the instance, repeated Performs no movement * @param actionName name of the action * @param rotation rotation which the instance use when performing the action */ void actRepeat(const std::string& actionName, int32_t rotation); /** Performs given named action to the instance, repeated. Performs no movement and use current rotation * @param actionName name of the action */ void actRepeat(const std::string& actionName); /** Causes instance to "say" given text (shown on screen next to the instance) * @param text text to say. If "" given, clear the text * @param duration duration to show the text (in ms). If 0, shows forever */ void say(const std::string& text, uint32_t duration=0); /** Performs given named action to the instance. While performing the action * follows given instance with given speed * @param actionName name of the action * @param leader followed instance * @param speed speed used for movement. Units = distance 1 in layer coordinates per second */ void follow(const std::string& actionName, Instance* leader, const double speed); /** Performs given named action to the instance. While performing the action * follows given route with given speed. Note: In this case route isn't deleted or resetted at the end. * @param actionName name of the action * @param route followed route * @param speed speed used for movement. Units = distance 1 in layer coordinates per second */ void follow(const std::string& actionName, Route* route, const double speed); /** Cancel movement after a given length. * If no length is set then 1 is used. This means that the instance * stops at the center of the next cell (can be the same as the current). */ void cancelMovement(uint32_t length = 1); /** Returns pointer to currently set saytext. In case no text is set, returns NULL */ const std::string* getSayText() const; /** Updates the instance related to the current action * @note call this only once in engine update cycle, so that tracking between * current position and previous position keeps in sync. * @returns marked changes */ InstanceChangeInfo update(); /** If this returns true, the instance needs to be updated */ bool isActive() const; /** Sets visualization to be used. Transfers ownership. */ void setVisual(IVisual* visual) { m_visual = visual; } /** Gets used visualization */ template T* getVisual() const { return reinterpret_cast(m_visual); } void callOnTransparencyChange(); void callOnVisibleChange(); void callOnStackPositionChange(); /** Sets speed for the map. See Model::setTimeMultiplier. */ void setTimeMultiplier(float multip); /** Gets instance speed. @see setTimeMultiplier. */ float getTimeMultiplier(); /** Gets instance speed, considering also model and map speeds. @see setTimeMultiplier. */ float getTotalTimeMultiplier(); /** Gets the scaled runtime in milliseconds * @return runtime */ uint32_t getRuntime(); /** Refreshes instance e.g. in case location is updated directly (not via setLocation) * In this case e.g. instance's master time provider is changed, so it needs to be updated */ void refresh(); /** Returns a bitmask of changes of the last update. */ InstanceChangeInfo getChangeInfo(); /** callback so other instances we depend on can notify us if they go away */ void onInstanceDeleted(Instance* instance); /** Returns a pointer to the route, in case there is no, it returns NULL. */ Route* getRoute(); /** Marks this instance as a visitor. */ void setVisitor(bool visit); /** If instance is a visitor it returns true otherwise false. */ bool isVisitor(); /** Sets the shape type for a visitor. */ void setVisitorShape(VisitorShapeInfo info); /** Gets the shape type for a visitor. */ VisitorShapeInfo getVisitorShape(); /** Sets the range for a visitor. */ void setVisitorRadius(uint16_t radius); /** Gets the visitor range. */ uint16_t getVisitorRadius(); /** Sets the cell stack position. */ void setCellStackPosition(uint8_t stack); /** Gets the cell stack position. */ uint8_t getCellStackPosition(); /** Returns true if instance or object have special cost otherwise false. */ bool isSpecialCost(); /** Sets for the given cost id a cost. * @param id name of the cost id * @param cost value for the cost */ void setCost(const std::string& id, double cost); /** Resets cost. */ void resetCost(); /** Returns cost value. In case there is no it returns the object cost. */ double getCost(); /** Returns cost id. In case there is no it returns the object cost id. */ std::string getCostId(); /** Returns speed modifier. */ double getSpeed(); /** Returns true if instance or object have special speed modifier otherwise false. */ bool isSpecialSpeed(); /** Returns true if it is multi cell otherwise false */ bool isMultiCell(); /** Returns true if it is multi object otherwise false */ bool isMultiObject(); /** Updates the visual positions of all instances in case this is a multi object */ void updateMultiInstances(); /** Returns a vector that contains all instances of a multi object */ const std::vector& getMultiInstances(); /** Sets a instance to the main multi instance of this instance. */ void setMainMultiInstance(Instance* main); /** Returns a pointer to the main mulit instance or Null if the instance is not part of a multi instance object. */ Instance* getMainMultiInstance(); /** Adds new static color overlay with given angle (degrees). */ void addStaticColorOverlay(uint32_t angle, const OverlayColors& colors); /** Returns closest matching static color overlay for given angle * @return pointer to OverlayColor class */ OverlayColors* getStaticColorOverlay(int32_t angle); /** Removes a static color overlay with given angle (degrees). */ void removeStaticColorOverlay(int32_t angle); /** Indicates if there exists a static color overlay. */ bool isStaticColorOverlay(); /** Adds new color overlay with given angle (degrees) to given action. */ void addColorOverlay(const std::string& actionName, uint32_t angle, const OverlayColors& colors); /** Returns closest matching color overlay for given angle and action. * @return pointer to OverlayColor class */ OverlayColors* getColorOverlay(const std::string& actionName, uint32_t angle); /** Removes a color overlay with given angle (degrees) from given action. */ void removeColorOverlay(const std::string& actionName, int32_t angle); /** Adds new animation overlay with given angle (degrees) and order to given action. */ void addAnimationOverlay(const std::string& actionName, uint32_t angle, int32_t order, const AnimationPtr& animationptr); /** Gets map with animations closest to given angle. * @return ordered animation map */ std::map getAnimationOverlay(const std::string& actionName, int32_t angle); /** Removes animation overlay with given angle (degrees) and order from action. */ void removeAnimationOverlay(const std::string& actionName, uint32_t angle, int32_t order); /** Adds new color overlay with given angle (degrees) and order to given action animation overlay. */ void addColorOverlay(const std::string& actionName, uint32_t angle, int32_t order, const OverlayColors& colors); /** Returns closest matching color overlay for given angle, order and action animation overlay. * @return pointer to OverlayColor class */ OverlayColors* getColorOverlay(const std::string& actionName, uint32_t angle, int32_t order); /** Removes a color overlay with given angle (degrees), order from given action animation overlay. */ void removeColorOverlay(const std::string& actionName, int32_t angle, int32_t order); /** If the action have base animation and optional color overlay it gets converted to animation overlay. */ void convertToOverlays(const std::string& actionName, bool color); /** Indicates if there exists a animation overlay for given action. */ bool isAnimationOverlay(const std::string& actionName); /** Indicates if there exists a color overlay for given action or animation overlay. */ bool isColorOverlay(const std::string& actionName); private: std::string m_id; //! The rotation offset of this instance. This is in addition to possible camera rotation and //! intended for setting, for example, a rotation of a tile. int32_t m_rotation; /** InstanceActivity gets allocated in case there is some runtime * activity related to the instance. Keeping activity related variables * in separate class keeps memory consumption lower e.g. for large tile * areas. * Class also keeps track of changes since the previous update call. * With this bookkeeping, it is possible to optimize several spots in * the engine, basically only reacting to changes instead of polling. */ class InstanceActivity { public: InstanceActivity(Instance& source); ~InstanceActivity(); // ----- Fields related to change tracking ----- //! updates cached variables, marks changes void update(Instance& source); //! location on previous round Location m_location; //! location on previous cell Location m_oldLocation; //! rotation on previous round int32_t m_rotation; //! rotation on previous round int32_t m_oldRotation; //! action on previous round. NOTE: might become invalid, only used for address comparison Action* m_action; //! speed on previous round double m_speed; //! time multiplier on previous round float m_timeMultiplier; //! say text on previous round std::string m_sayText; //! listeners for changes std::vector m_changeListeners; // ----- Fields related to generic activity ----- //! listeners for action related events std::vector m_actionListeners; //! action information, allocated when actions are bind ActionInfo* m_actionInfo; //! text to say + duration, allocated when something is said SayInfo* m_sayInfo; //! time scaler for this instance TimeProvider* m_timeProvider; //! blocking status on previous round bool m_blocking; //! additional change info, used for visual class (transparency, visible, stackpos) InstanceChangeInfo m_additional; }; InstanceActivity* m_activity; //! bitmask stating current changes InstanceChangeInfo m_changeInfo; //! listeners for deletion of the instance std::vector m_deleteListeners; //! object where instantiated from Object* m_object; //! indicates if m_object is customized bool m_ownObject; //! current location Location m_location; //! instance visualization IVisual* m_visual; //! instance blocking info bool m_blocking; //! allow to override the blocking property bool m_overrideBlocking; //! is instance a visitor (FoW) bool m_isVisitor; //! visitor shape type VisitorShapeInfo m_visitorShape; //! visitor radius (FoW) uint16_t m_visitorRadius; //! position on cell stack uint8_t m_cellStackPos; //! indicates special cost bool m_specialCost; //! holds cost value double m_cost; //! holds cost id std::string m_costId; //! vector that holds all multi instances std::vector m_multiInstances; //! pointer to the main multi instance Instance* m_mainMultiInstance; Instance(const Instance&); Instance& operator=(const Instance&); //! Finalize current action void finalizeAction(); //! Cancel current action void cancelAction(); //! Initialize action for use void initializeAction(const std::string& actionName); //! Moves instance. Returns true if finished bool processMovement(); //! Calculates movement based current location and speed void calcMovement(); //! rebinds time provider based on new location void bindTimeProvider(); //! called when instance has been changed. Causes instance to create InstanceActivity void initializeChanges(); //! called to prepare the instance for an update void prepareForUpdate(); //! Creates an own object for the instance to allow visual customization. void createOwnObject(); //! Returns pointer to action visual, can also create it. ActionVisual* getActionVisual(const std::string& actionName, bool create); }; } // FIFE #endif fifengine-0.4.1/engine/core/model/structures/instance.i000066400000000000000000000166221304641216200231520ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "model/structures/instance.h" %} %include "model/metamodel/modelcoords.i" %include "model/metamodel/ivisual.i" %include "util/structures/utilstructures.i" %include "util/base/utilbase.i" %include "location.i" namespace FIFE { class Layer; class Action; class Object; class Instance; class Route; class OverlayColors; class AnimationPtr; %feature("director") InstanceActionListener; class InstanceActionListener { public: virtual ~InstanceActionListener() {}; virtual void onInstanceActionFinished(Instance* instance, Action* action) = 0; virtual void onInstanceActionCancelled(Instance* instance, Action* action) = 0; virtual void onInstanceActionFrame(Instance* instance, Action* action, int32_t frame) = 0; }; enum InstanceChangeType { ICHANGE_NO_CHANGES = 0x0000, ICHANGE_LOC = 0x0001, ICHANGE_ROTATION = 0x0002, ICHANGE_SPEED = 0x0004, ICHANGE_ACTION = 0x0008, ICHANGE_TIME_MULTIPLIER = 0x0010, ICHANGE_SAYTEXT = 0x0020, ICHANGE_BLOCK = 0x0040, ICHANGE_CELL = 0x0080, ICHANGE_TRANSPARENCY = 0x0100, ICHANGE_VISIBLE = 0x0200, ICHANGE_STACKPOS = 0x0400 }; typedef uint32_t InstanceChangeInfo; %feature("director") InstanceChangeListener; class InstanceChangeListener { public: virtual ~InstanceChangeListener() {}; virtual void onInstanceChanged(Instance* instance, InstanceChangeInfo info) = 0; }; %feature("director") InstanceDeleteListener; class InstanceDeleteListener { public: virtual ~InstanceDeleteListener() {}; virtual void onInstanceDeleted(Instance* instance) = 0; }; enum VisitorShapeType { ITYPE_NO_SHAPE = 0, ITYPE_QUAD_SHAPE, ITYPE_CIRCLE_SHAPE }; typedef uint8_t VisitorShapeInfo; class Instance : public FifeClass { public: Instance(Object* object, const Location& location, const std::string& identifier=""); virtual ~Instance(); const std::string& getId(); void setId(const std::string& identifier=""); Object* getObject(); void setLocation(const Location& loc); Location getLocation() const; Location& getLocationRef(); Location getTargetLocation() const; void setRotation(int32_t); int32_t getRotation() const; int32_t getOldRotation() const; void setBlocking(bool blocking); bool isBlocking() const; void setOverrideBlocking(bool overblock); bool isOverrideBlocking() const; void addActionListener(InstanceActionListener* listener); void removeActionListener(InstanceActionListener* listener); void addChangeListener(InstanceChangeListener* listener); void removeChangeListener(InstanceChangeListener* listener); void addDeleteListener(InstanceDeleteListener* listener); void removeDeleteListener(InstanceDeleteListener* listener); Action* getCurrentAction() const; double getMovementSpeed() const; void setFacingLocation(const Location& loc); Location getFacingLocation(); uint32_t getActionRuntime(); void setActionRuntime(uint32_t time_offset); void move(const std::string& actionName, const Location& target, const double speed, const std::string& costId = ""); void actOnce(const std::string& actionName, const Location& direction); void actOnce(const std::string& actionName, int32_t rotation); void actOnce(const std::string& actionName); void actRepeat(const std::string& actionName, const Location& direction); void actRepeat(const std::string& actionName, int32_t rotation); void actRepeat(const std::string& actionName); void follow(const std::string& actionName, Instance* leader, const double speed); void follow(const std::string& actionName, Route* route, const double speed); void cancelMovement(uint32_t length = 1); void say(const std::string& text, uint32_t duration=0); void setTimeMultiplier(float multip); float getTimeMultiplier(); uint32_t getRuntime(); void refresh(); InstanceChangeInfo getChangeInfo(); void setVisual(IVisual* visual); template T* getVisual() const; Route* getRoute(); void setVisitor(bool visit); bool isVisitor(); void setVisitorShape(VisitorShapeInfo info); VisitorShapeInfo getVisitorShape(); void setVisitorRadius(uint16_t radius); uint16_t getVisitorRadius(); void setCellStackPosition(uint8_t stack); uint8_t getCellStackPosition(); bool isSpecialCost(); void setCost(const std::string& id, double cost); void resetCost(); double getCost(); std::string getCostId(); double getSpeed(); bool isSpecialSpeed(); bool isMultiCell(); bool isMultiObject(); const std::vector& getMultiInstances(); Instance* getMainMultiInstance(); void addStaticColorOverlay(uint32_t angle, const OverlayColors& colors); OverlayColors* getStaticColorOverlay(int32_t angle); void removeStaticColorOverlay(int32_t angle); bool isStaticColorOverlay(); void addColorOverlay(const std::string& actionName, uint32_t angle, const OverlayColors& colors); OverlayColors* getColorOverlay(const std::string& actionName, uint32_t angle); void removeColorOverlay(const std::string& actionName, int32_t angle); void addAnimationOverlay(const std::string& actionName, uint32_t angle, int32_t order, const AnimationPtr& animationptr); std::map getAnimationOverlay(const std::string& actionName, int32_t angle); void removeAnimationOverlay(const std::string& actionName, uint32_t angle, int32_t order); void addColorOverlay(const std::string& actionName, uint32_t angle, int32_t order, const OverlayColors& colors); OverlayColors* getColorOverlay(const std::string& actionName, uint32_t angle, int32_t order); void removeColorOverlay(const std::string& actionName, int32_t angle, int32_t order); void convertToOverlays(const std::string& actionName, bool color); bool isAnimationOverlay(const std::string& actionName); bool isColorOverlay(const std::string& actionName); }; } namespace std { %template(InstanceVector) vector; %template(InstanceList) list; %template(AnimationOverlayMap) map; } fifengine-0.4.1/engine/core/model/structures/instancetree.cpp000066400000000000000000000106631304641216200243630ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/exception.h" #include "util/log/logger.h" #include "model/structures/instance.h" #include "util/structures/rect.h" #include "instancetree.h" namespace FIFE { static Logger _log(LM_STRUCTURES); InstanceTree::InstanceTree(): FifeClass() { } InstanceTree::~InstanceTree() { } void InstanceTree::addInstance(Instance* instance) { ModelCoordinate coords = instance->getLocationRef().getLayerCoordinates(); InstanceTreeNode * node = m_tree.find_container(coords.x,coords.y,0,0); InstanceList& list = node->data(); list.push_back(instance); if( m_reverse.find(instance) != m_reverse.end() ) { FL_WARN(_log, "InstanceTree::addInstance() - Duplicate Instance. Ignoring."); return; } m_reverse[instance] = node; } void InstanceTree::removeInstance(Instance* instance) { InstanceTreeNode * node = m_reverse[instance]; if( !node ) { FL_WARN(_log, "InstanceTree::removeInstance() - Instance not part of tree."); return; } m_reverse.erase(instance); InstanceList& list = node->data(); for(InstanceList::iterator i = list.begin(); i != list.end(); ++i) { if((*i) == instance) { list.erase(i); return; } } FL_WARN(_log, "InstanceTree::removeInstance() - Instance part of tree but not found in the expected tree node."); } class InstanceListCollector { public: InstanceTree::InstanceList& instanceList; Rect searchRect; InstanceListCollector(InstanceTree::InstanceList& a_instanceList, const Rect& rect) : instanceList(a_instanceList), searchRect(rect) { } bool visit(InstanceTree::InstanceTreeNode* node, int32_t d); }; bool InstanceListCollector::visit(InstanceTree::InstanceTreeNode* node, int32_t d) { InstanceTree::InstanceList& list = node->data(); for(InstanceTree::InstanceList::const_iterator it(list.begin()); it != list.end(); ++it) { ModelCoordinate coords = (*it)->getLocationRef().getLayerCoordinates(); if( searchRect.contains(Point(coords.x,coords.y)) ) { instanceList.push_back(*it); } } return true; } void InstanceTree::findInstances(const ModelCoordinate& point, int32_t w, int32_t h, InstanceTree::InstanceList& list) { list.clear(); InstanceTreeNode * node = m_tree.find_container(point.x, point.y, w, h); Rect rect(point.x, point.y, w, h); InstanceListCollector collector(list,rect); node->apply_visitor(collector); node = node->parent(); while( node ) { for(InstanceList::const_iterator it(node->data().begin()); it != node->data().end(); ++it) { ModelCoordinate coords = (*it)->getLocationRef().getLayerCoordinates(); if( rect.contains(Point(coords.x,coords.y)) ) { list.push_back(*it); } } node = node->parent(); } } } fifengine-0.4.1/engine/core/model/structures/instancetree.h000066400000000000000000000072741304641216200240340ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_INSTANCETREE_H #define FIFE_INSTANCETREE_H // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src #include "util/base/fifeclass.h" #include "util/structures/quadtree.h" #include "model/metamodel/modelcoords.h" namespace FIFE { class Instance; class InstanceTree: public FifeClass { public: static const int32_t MIN_TREE_SIZE = 2; typedef std::list InstanceList; typedef QuadTree< InstanceList, MIN_TREE_SIZE > InstanceQuadTree; typedef InstanceQuadTree::Node InstanceTreeNode; /** Constructor * */ InstanceTree(); /** Destructor * */ virtual ~InstanceTree(); /** Adds an instance to the quad tree. * * Adds an instance to the quad tree based upon it's location on the layer and it's * area. * * @param instance A pointer to the instance to add. * @note In case you added the instance before this will throw. */ void addInstance(Instance* instance); /** Removes an instance from the quad tree. * * Locates an instance in the quad tree then removes it. * * @param instance A pointer to the instance to find and remove. * @note In case you did @b not add the instance before this will throw. */ void removeInstance(Instance* instance); /** Find all instances in a given area. * * Takes a box as an area then returns a vector filled with all instances that intersect * with that box. * * @param point A ModelCoordinate representing the upper left part of the search area. * @param w The width of the search area in Model Units. * @param h The height of the search area in Model Units. * @param list vector reference that will be filled with all instances within that space. */ void findInstances(const ModelCoordinate& point, int32_t w, int32_t h, InstanceList& list); /** See QuadNode::apply_visitor */ template void applyVisitor(Visitor& visitor) { m_tree.apply_visitor(visitor); } private: InstanceQuadTree m_tree; std::map m_reverse; }; } #endif fifengine-0.4.1/engine/core/model/structures/layer.cpp000066400000000000000000000467361304641216200230250ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/log/logger.h" #include "util/structures/purge.h" #include "model/metamodel/grids/cellgrid.h" #include "layer.h" #include "instance.h" #include "map.h" #include "instancetree.h" #include "cell.h" #include "cellcache.h" #include "trigger.h" namespace FIFE { /** Logger to use for this source file. * @relates Logger */ static Logger _log(LM_STRUCTURES); Layer::Layer(const std::string& identifier, Map* map, CellGrid* grid) : m_id(identifier), m_map(map), m_instancesVisibility(true), m_transparency(0), m_instanceTree(new InstanceTree()), m_grid(grid), m_pathingStrategy(CELL_EDGES_ONLY), m_sortingStrategy(SORTING_CAMERA), m_walkable(false), m_interact(false), m_walkableId(""), m_cellCache(NULL), m_changeListeners(), m_changedInstances(), m_changed(false), m_static(false) { } Layer::~Layer() { // if this is a walkable layer destroyCellCache(); // if this is a interact layer if (m_interact) { Layer* temp = m_map->getLayer(m_walkableId); if (temp) { temp->removeInteractLayer(this); } } purge(m_instances); delete m_instanceTree; } const std::string& Layer::getId() const { return m_id; } void Layer::setId(const std::string& id) { m_id = id; } Map* Layer::getMap() const { return m_map; } CellGrid* Layer::getCellGrid() const { return m_grid; } void Layer::setCellGrid(CellGrid* grid) { m_grid = grid; } InstanceTree* Layer::getInstanceTree(void) const { return m_instanceTree; } bool Layer::hasInstances() const { return !m_instances.empty(); } Instance* Layer::createInstance(Object* object, const ModelCoordinate& p, const std::string& id) { ExactModelCoordinate emc(static_cast(p.x), static_cast(p.y), static_cast(p.z)); return createInstance(object, emc, id); } Instance* Layer::createInstance(Object* object, const ExactModelCoordinate& p, const std::string& id) { Location location(this); location.setExactLayerCoordinates(p); Instance* instance = new Instance(object, location, id); if(instance->isActive()) { setInstanceActivityStatus(instance, instance->isActive()); } m_instances.push_back(instance); m_instanceTree->addInstance(instance); std::vector::iterator i = m_changeListeners.begin(); while (i != m_changeListeners.end()) { (*i)->onInstanceCreate(this, instance); ++i; } m_changed = true; return instance; } bool Layer::addInstance(Instance* instance, const ExactModelCoordinate& p){ if( !instance ){ FL_ERR(_log, "Tried to add an instance to layer, but given instance is invalid"); return false; } Location& location = instance->getLocationRef(); location.setLayer(this); location.setExactLayerCoordinates(p); m_instances.push_back(instance); m_instanceTree->addInstance(instance); if(instance->isActive()) { setInstanceActivityStatus(instance, instance->isActive()); } std::vector::iterator i = m_changeListeners.begin(); while (i != m_changeListeners.end()) { (*i)->onInstanceCreate(this, instance); ++i; } m_changed = true; return true; } void Layer::removeInstance(Instance* instance) { // If the instance is changed and removed on the same pump, // it can happen that the instance can not cleanly be removed, // to avoid this we have to update the instance first and send // the result to the LayerChangeListeners. if (instance->isActive()) { if (instance->update() != ICHANGE_NO_CHANGES) { std::vector updateInstances; updateInstances.push_back(instance); std::vector::iterator i = m_changeListeners.begin(); while (i != m_changeListeners.end()) { (*i)->onLayerChanged(this, updateInstances); ++i; } } } std::vector::iterator i = m_changeListeners.begin(); while (i != m_changeListeners.end()) { (*i)->onInstanceDelete(this, instance); ++i; } setInstanceActivityStatus(instance, false); std::vector::iterator it = m_instances.begin(); for(; it != m_instances.end(); ++it) { if(*it == instance) { m_instanceTree->removeInstance(*it); m_instances.erase(it); break; } } m_changed = true; } void Layer::deleteInstance(Instance* instance) { // If the instance is changed and deleted on the same pump, // it can happen that the instance can not cleanly be removed, // to avoid this we have to update the instance first and send // the result to the LayerChangeListeners. if (instance->isActive()) { if (instance->update() != ICHANGE_NO_CHANGES) { std::vector updateInstances; updateInstances.push_back(instance); std::vector::iterator i = m_changeListeners.begin(); while (i != m_changeListeners.end()) { (*i)->onLayerChanged(this, updateInstances); ++i; } } } std::vector::iterator i = m_changeListeners.begin(); while (i != m_changeListeners.end()) { (*i)->onInstanceDelete(this, instance); ++i; } setInstanceActivityStatus(instance, false); std::vector::iterator it = m_instances.begin(); for(; it != m_instances.end(); ++it) { if(*it == instance) { m_instanceTree->removeInstance(*it); delete *it; m_instances.erase(it); break; } } m_changed = true; } const std::vector& Layer::getInstances() const { return m_instances; } void Layer::setInstanceActivityStatus(Instance* instance, bool active) { if(active) { m_activeInstances.insert(instance); } else { m_activeInstances.erase(instance); } } Instance* Layer::getInstance(const std::string& id) { std::vector::iterator it = m_instances.begin(); for(; it != m_instances.end(); ++it) { if((*it)->getId() == id) return *it; } return 0; } std::vector Layer::getInstances(const std::string& id) { std::vector matching_instances; std::vector::iterator it = m_instances.begin(); for(; it != m_instances.end(); ++it) { if((*it)->getId() == id) matching_instances.push_back(*it); } return matching_instances; } std::vector Layer::getInstancesAt(Location& loc, bool use_exactcoordinates) { std::vector matching_instances; std::vector::iterator it = m_instances.begin(); for(; it != m_instances.end(); ++it) { if (use_exactcoordinates) { if ((*it)->getLocationRef().getExactLayerCoordinatesRef() == loc.getExactLayerCoordinatesRef()) { matching_instances.push_back(*it); } } else { if ((*it)->getLocationRef().getLayerCoordinates() == loc.getLayerCoordinates()) { matching_instances.push_back(*it); } } } return matching_instances; } std::list Layer::getInstancesIn(Rect& rec) { std::list matching_instances; ModelCoordinate mc(rec.x, rec.y); m_instanceTree->findInstances(mc, rec.w, rec.h, matching_instances); return matching_instances; } std::vector Layer::getInstancesInLine(const ModelCoordinate& pt1, const ModelCoordinate& pt2) { std::vector instances; std::list matchingInstances; std::vector coords = m_grid->getCoordinatesInLine(pt1, pt2); for (std::vector::iterator it = coords.begin(); it != coords.end(); ++it) { m_instanceTree->findInstances(*it, 0, 0, matchingInstances); if (!matchingInstances.empty()) { instances.insert(instances.end(), matchingInstances.begin(), matchingInstances.end()); } } return instances; } std::vector Layer::getInstancesInCircle(const ModelCoordinate& center, uint16_t radius) { std::vector instances; std::list matchingInstances; //radius power 2 uint16_t radiusp2 = (radius+1) * radius; ModelCoordinate current(center.x-radius, center.y-radius); ModelCoordinate target(center.x+radius, center.y+radius); for (; current.y < center.y; current.y++) { current.x = center.x-radius; for (; current.x < center.x; current.x++) { uint16_t dx = center.x - current.x; uint16_t dy = center.y - current.y; uint16_t distance = dx*dx + dy*dy; if (distance <= radiusp2) { m_instanceTree->findInstances(current, 0, 0, matchingInstances); if (!matchingInstances.empty()) { instances.insert(instances.end(), matchingInstances.begin(), matchingInstances.end()); } current.x = center.x + dx; m_instanceTree->findInstances(current, 0, 0, matchingInstances); if (!matchingInstances.empty()) { instances.insert(instances.end(), matchingInstances.begin(), matchingInstances.end()); } current.y = center.y + dy; m_instanceTree->findInstances(current, 0, 0, matchingInstances); if (!matchingInstances.empty()) { instances.insert(instances.end(), matchingInstances.begin(), matchingInstances.end()); } current.x = center.x-dx; m_instanceTree->findInstances(current, 0, 0, matchingInstances); if (!matchingInstances.empty()) { instances.insert(instances.end(), matchingInstances.begin(), matchingInstances.end()); } current.y = center.y-dy; } } } current.x = center.x; current.y = center.y-radius; for (; current.y <= target.y; current.y++) { m_instanceTree->findInstances(current, 0, 0, matchingInstances); if (!matchingInstances.empty()) { instances.insert(instances.end(), matchingInstances.begin(), matchingInstances.end()); } } current.y = center.y; current.x = center.x-radius; for (; current.x <= target.x; current.x++) { m_instanceTree->findInstances(current, 0, 0, matchingInstances); if (!matchingInstances.empty()) { instances.insert(instances.end(), matchingInstances.begin(), matchingInstances.end()); } } return instances; } std::vector Layer::getInstancesInCircleSegment(const ModelCoordinate& center, uint16_t radius, int32_t sangle, int32_t eangle) { std::vector instances; ExactModelCoordinate exactCenter(center.x, center.y); std::vector tmpInstances = getInstancesInCircle(center, radius); int32_t s = (sangle + 360) % 360; int32_t e = (eangle + 360) % 360; bool greater = (s > e) ? true : false; for (std::vector::iterator it = tmpInstances.begin(); it != tmpInstances.end(); ++it) { int32_t angle = getAngleBetween(exactCenter, intPt2doublePt((*it)->getLocationRef().getLayerCoordinates())); if (greater) { if (angle >= s || angle <= e) { instances.push_back(*it); } } else { if (angle >= s && angle <= e) { instances.push_back(*it); } } } return instances; } void Layer::getMinMaxCoordinates(ModelCoordinate& min, ModelCoordinate& max, const Layer* layer) const { if (!layer) { layer = this; } if (m_instances.empty()) { min = ModelCoordinate(); max = min; } else { min = m_instances.front()->getLocationRef().getLayerCoordinates(layer); max = min; for (std::vector::const_iterator i = m_instances.begin(); i != m_instances.end(); ++i) { ModelCoordinate coord = (*i)->getLocationRef().getLayerCoordinates(layer); min.x = std::min(min.x, coord.x); max.x = std::max(max.x, coord.x); min.y = std::min(min.y, coord.y); max.y = std::max(max.y, coord.y); } } } float Layer::getZOffset() const { static const float globalmax = 100.0; static const float globalrange = 200.0; int32_t numlayers = m_map->getLayerCount(); int32_t thislayer = 1; // we don't need 0 indexed const std::list& layers = m_map->getLayers(); std::list::const_iterator iter = layers.begin(); for (; iter != layers.end(); ++iter, ++thislayer) { if (*iter == this) { break; } } float offset = globalmax - (numlayers - (thislayer - 1)) * (globalrange/numlayers); return offset; } uint32_t Layer::getLayerCount() const { return m_map->getLayerCount(); } void Layer::setInstancesVisible(bool vis) { if (m_instancesVisibility != vis) { m_instancesVisibility = vis; std::vector::iterator it = m_instances.begin(); for (; it != m_instances.end(); ++it) { (*it)->callOnVisibleChange(); } } } void Layer::setLayerTransparency(uint8_t transparency) { if (m_transparency != transparency) { m_transparency = transparency; std::vector::iterator it = m_instances.begin(); for (; it != m_instances.end(); ++it) { (*it)->callOnTransparencyChange(); } } } uint8_t Layer::getLayerTransparency() { return m_transparency; } void Layer::toggleInstancesVisible() { setInstancesVisible(!m_instancesVisibility); } bool Layer::areInstancesVisible() const { return m_instancesVisibility; } bool Layer::cellContainsBlockingInstance(const ModelCoordinate& cellCoordinate) { bool blockingInstance = false; if (m_cellCache) { Cell* cell = m_cellCache->getCell(cellCoordinate); if (cell) { return cell->getCellType() != CTYPE_NO_BLOCKER; } } else { std::list adjacentInstances; m_instanceTree->findInstances(cellCoordinate, 0, 0, adjacentInstances); for(std::list::const_iterator j = adjacentInstances.begin(); j != adjacentInstances.end(); ++j) { if((*j)->isBlocking() && (*j)->getLocationRef().getLayerCoordinates() == cellCoordinate) { blockingInstance = true; break; } } } return blockingInstance; } std::vector Layer::getBlockingInstances(const ModelCoordinate& cellCoordinate) { std::vector blockingInstances; if (m_cellCache) { Cell* cell = m_cellCache->getCell(cellCoordinate); if (cell) { const std::set& blocker = cell->getInstances(); for (std::set::const_iterator it = blocker.begin(); it != blocker.end(); ++it) { if ((*it)->isBlocking()) { blockingInstances.push_back(*it); } } } } else { std::list adjacentInstances; m_instanceTree->findInstances(cellCoordinate, 0, 0, adjacentInstances); for(std::list::const_iterator j = adjacentInstances.begin(); j != adjacentInstances.end(); ++j) { if((*j)->isBlocking() && (*j)->getLocationRef().getLayerCoordinates() == cellCoordinate) { blockingInstances.push_back(*j); } } } return blockingInstances; } void Layer::setPathingStrategy(PathingStrategy strategy) { m_pathingStrategy = strategy; m_grid->setAllowDiagonals(m_pathingStrategy != CELL_EDGES_ONLY); } PathingStrategy Layer::getPathingStrategy() const { return m_pathingStrategy; } void Layer::setSortingStrategy(SortingStrategy strategy) { m_sortingStrategy = strategy; } SortingStrategy Layer::getSortingStrategy() const { return m_sortingStrategy; } void Layer::setWalkable(bool walkable) { m_walkable = walkable; } bool Layer::isWalkable() { return m_walkable; } void Layer::setInteract(bool interact, const std::string& id) { m_interact = interact; m_walkableId = id; } bool Layer::isInteract() { return m_interact; } const std::string& Layer::getWalkableId() { return m_walkableId; } void Layer::addInteractLayer(Layer* layer) { if (m_walkable) { m_interacts.push_back(layer); } } const std::vector& Layer::getInteractLayers() { return m_interacts; } void Layer::removeInteractLayer(Layer* layer) { if (m_walkable) { std::vector::iterator it = m_interacts.begin(); for (; it != m_interacts.end(); ++it) { if (*it == layer) { (*it)->removeChangeListener(m_cellCache->getCellCacheChangeListener()); m_interacts.erase(it); break; } } } } void Layer::createCellCache() { if (!m_cellCache && m_walkable) { m_cellCache = new CellCache(this); } } CellCache* Layer::getCellCache() { return m_cellCache; } void Layer::destroyCellCache() { if (m_walkable) { removeChangeListener(m_cellCache->getCellCacheChangeListener()); if (!m_interacts.empty()) { std::vector::iterator it = m_interacts.begin(); for (; it != m_interacts.end(); ++it) { (*it)->removeChangeListener(m_cellCache->getCellCacheChangeListener()); (*it)->setInteract(false, ""); } m_interacts.clear(); } delete m_cellCache; m_cellCache = NULL; m_walkable = false; } } bool Layer::update() { m_changedInstances.clear(); std::vector inactiveInstances; std::set::iterator it = m_activeInstances.begin(); for(; it != m_activeInstances.end(); ++it) { if ((*it)->update() != ICHANGE_NO_CHANGES) { m_changedInstances.push_back(*it); m_changed = true; } else if (!(*it)->isActive()) { inactiveInstances.push_back(*it); } } if (!m_changedInstances.empty()) { std::vector::iterator i = m_changeListeners.begin(); while (i != m_changeListeners.end()) { (*i)->onLayerChanged(this, m_changedInstances); ++i; } //std::cout << "Layer named " << Id() << " changed = 1\n"; } // remove inactive instances from m_activeInstances if (!inactiveInstances.empty()) { std::vector::iterator i = inactiveInstances.begin(); while (i != inactiveInstances.end()) { m_activeInstances.erase(*i); ++i; } } //std::cout << "Layer named " << Id() << " changed = 0\n"; bool retval = m_changed; m_changed = false; return retval; } void Layer::addChangeListener(LayerChangeListener* listener) { m_changeListeners.push_back(listener); } void Layer::removeChangeListener(LayerChangeListener* listener) { std::vector::iterator i = m_changeListeners.begin(); while (i != m_changeListeners.end()) { if ((*i) == listener) { m_changeListeners.erase(i); return; } ++i; } } bool Layer::isChanged() { return m_changed; } std::vector& Layer::getChangedInstances() { return m_changedInstances; } void Layer::setStatic(bool stati) { m_static = stati; } bool Layer::isStatic() { return m_static; } } // FIFE fifengine-0.4.1/engine/core/model/structures/layer.h000066400000000000000000000354651304641216200224670ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_LAYER_H #define FIFE_LAYER_H // Standard C++ library includes #include #include #include #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/fifeclass.h" #include "util/structures/rect.h" #include "model/metamodel/modelcoords.h" #include "model/metamodel/object.h" #include "instance.h" namespace FIFE { class Map; class CellGrid; class Object; class InstanceTree; class CellCache; class Trigger; /** Defines how pathing can be performed on this layer * * CELL_EDGES_ONLY allows pather to use only cell edges when moving instances from cell to cell on map * CELL_EDGES_AND_DIAGONALS allows pather to use both cell edges and diagonals when moving instances from cell to cell on map */ enum PathingStrategy { CELL_EDGES_ONLY, CELL_EDGES_AND_DIAGONALS }; enum SortingStrategy { SORTING_CAMERA, SORTING_LOCATION, SORTING_CAMERA_AND_LOCATION }; /** Listener interface for changes happening on a layer */ class LayerChangeListener { public: virtual ~LayerChangeListener() {}; /** Called when some instance is changed on layer. @see InstanceChangeType * @param layer where change occurred * @param changedInstances list of instances containing some changes * @note Does not report creations and deletions */ virtual void onLayerChanged(Layer* layer, std::vector& changedInstances) = 0; /** Called when some instance gets created on layer * @param layer where change occurred * @param instance which got created */ virtual void onInstanceCreate(Layer* layer, Instance* instance) = 0; /** Called when some instance gets deleted on layer * @param layer where change occurred * @param instance which will be deleted * @note right after this call, instance actually gets deleted! */ virtual void onInstanceDelete(Layer* layer, Instance* instance) = 0; }; /** A basic layer on a map */ class Layer : public FifeClass { public: /** Constructor * Layers are created by calling addLayer from map, thus * this method should really be called only by map or test code. */ Layer(const std::string& identifier, Map* map, CellGrid* grid); /** Destructs a Layer instance */ ~Layer(); /** Get the id of this layer. */ const std::string& getId() const; /** Sets the identifier for this layer. */ void setId(const std::string& id); /** Get the map this layer is contained in */ Map* getMap() const; /** Get the Cellgrid * @return pointer to a valid cellgrid */ CellGrid* getCellGrid() const; /** Set the Cellgrid */ void setCellGrid(CellGrid* grid); /** Get the instance tree. * @return this layers instance tree. */ InstanceTree* getInstanceTree(void) const; /** Check existance of objects on this layer * @return True, if objects exist. */ bool hasInstances() const; /** Add an instance of an object at a specific position */ Instance* createInstance(Object* object, const ModelCoordinate& p, const std::string& id=""); /** Add an instance of an object at a specific position */ Instance* createInstance(Object* object, const ExactModelCoordinate& p, const std::string& id=""); /** Add a valid instance at a specific position. This is temporary. It will be moved to a higher level later so that we can ensure that each Instance only lives in one layer. */ bool addInstance(Instance* instance, const ExactModelCoordinate& p); /** Remove an instance from the layer */ void removeInstance(Instance* instance); /** Remove an instance from the layer and delete it */ void deleteInstance(Instance* instance); /** Get the list of instances on this layer */ const std::vector& getInstances() const; /** Get the list of instances on this layer with the given identifier. */ std::vector getInstances(const std::string& id); /** Returns instances that match given location. * @param loc location where to fetch instances from * @param use_exactcoordinates if true, comparison is done using exact coordinates. if not, cell coordinates are used */ std::vector getInstancesAt(Location& loc, bool use_exactcoordinates=false); /** Returns instances that match given rect. * @param rec rect where to fetch instances from */ std::list getInstancesIn(Rect& rec); /** Returns instances that match given line between pt1 and pt2. * @param pt1 A const reference to the ModelCoordinate where to start from. * @param pt2 A const reference to the ModelCoordinate where the end is. * @return A vector that contain the instances. */ std::vector getInstancesInLine(const ModelCoordinate& pt1, const ModelCoordinate& pt2); /** Returns instances that match given center and radius of the circle. * @param center A const reference to the ModelCoordinate where the center of the circle is. * @param radius A unsigned integer, radius of the circle. * @return A vector that contain the instances. */ std::vector getInstancesInCircle(const ModelCoordinate& center, uint16_t radius); /** Returns all instances in the circle segment. * @param center A const reference to the ModelCoordinate where the center of the circle is. * @param radius A unsigned integer, radius of the circle. * @param sangle A interger, start angle of the segment. * @param eangle A interger, end angle of the segment. * @return A vector that contain the instances. */ std::vector getInstancesInCircleSegment(const ModelCoordinate& center, uint16_t radius, int32_t sangle, int32_t eangle); /** Get the first instance on this layer with the given identifier. */ Instance* getInstance(const std::string& identifier); /** Set object visibility */ void setInstancesVisible(bool vis); /** Sets the transparency of all instances on the layer. 0=opaque, 255=transparent * @param transparency Transparency value from 0-255. */ void setLayerTransparency(uint8_t transparency); /** Returns the layer's transparency value */ uint8_t getLayerTransparency(); /** Retrieves the minimum/maximum coordinates of instances on the layer. * @param min A reference to a ModelCoordinate that will hold the minimum coordinate. * @param max A reference to a ModelCoordinate that will hold the maximum coordinate. * @param layer A pointer to another layer that can be used to cast coordinates bettween layers. */ void getMinMaxCoordinates(ModelCoordinate& min, ModelCoordinate& max, const Layer* layer = 0) const; /** Calculates z offset for the layer. * Is in range [-100,100], see glOrtho settings. Used by LayerCache to calculate z values. */ float getZOffset() const; /** Get the overall number of layers. */ uint32_t getLayerCount() const; /** Determines if a given cell on the layer contains a blocking instance * * @param cellCoordinate A const reference to a model coordinate of the cell in question. * @return A boolean, true if it is blocked false otherwise. */ bool cellContainsBlockingInstance(const ModelCoordinate& cellCoordinate); /** Returns instances that blocks on given cell * * @param cellCoordinate A const reference to a model coordinate of the cell in question. * @return A vector that contains instances. */ std::vector getBlockingInstances(const ModelCoordinate& cellCoordinate); /** Toggle object visibility * @see setObjectsVisible */ void toggleInstancesVisible(); /** Check object visibility * @see setObjectsVisible */ bool areInstancesVisible() const; /** Called periodically to update events on layer * @returns true if layer was changed since the last update, false otherwise */ bool update(); /** Sets pathing strategy for the layer * @see PathingStrategy */ void setPathingStrategy(PathingStrategy strategy); /** Gets pathing strategy for the layer * @see PathingStrategy */ PathingStrategy getPathingStrategy() const; /** Sets sorting strategy for the layer * @see SortingStrategy */ void setSortingStrategy(SortingStrategy strategy); /** Gets sorting strategy for the layer * @see SortingStrategy */ SortingStrategy getSortingStrategy() const; /** Sets walkable for the layer. Only a walkable layer, can create a CellCache and * only on a walkable, instances can move. Also interact layer can only be added to walkables. * @param walkable A boolean that mark a layer as walkable. */ void setWalkable(bool walkable); /** Returns if a layer is walkable. * @return A boolean, true if the layer is walkable otherwise false. */ bool isWalkable(); /** Sets interact for the layer. The data(size, instances) from all interact layers * and the walkable layer will merged into one CellCache. * @param interact A boolean that mark a layer as interact. * @param id A const reference to a string that should refer to the id of the walkable layer. */ void setInteract(bool interact, const std::string& id); /** Returns if a layer is interact. * @return A boolean, true if the layer is interact otherwise false. */ bool isInteract(); /** Returns the id of the walkable layer if this is a interact layer otherwise the string is empty. * @return A const reference to a string that refer to the id of the walkable layer. */ const std::string& getWalkableId(); /** Adds a interact layer to the walkable layer. * @param layer A pointer to the interact layer that should be added. */ void addInteractLayer(Layer* layer); /** Returns all assigned interact layer. * @return A const reference to a vector with pointers to interact layers. */ const std::vector& getInteractLayers(); /** Removes a interact layer from the walkable layer. * @param layer A pointer to the interact layer that should be removed. */ void removeInteractLayer(Layer* layer); /** Called from Map to create a CellCache. Only walkable layers can create one CellCache. */ void createCellCache(); /** Returns the CellCache of this layer. In case there is no it returns NULL. * @return A pointer to the CellCache. */ CellCache* getCellCache(); /** Destroys the CellCache of this layer. */ void destroyCellCache(); /** Adds new change listener * @param listener to add */ void addChangeListener(LayerChangeListener* listener); /** Removes associated change listener * @param listener to remove */ void removeChangeListener(LayerChangeListener* listener); /** Returns true, if layer information was changed during previous update round */ bool isChanged(); /** Returns instances that were changed during previous update round. * @note does not contain created or deleted instances */ std::vector& getChangedInstances(); /** Sets the activity status for given instance on this layer. * @param instance A pointer to the Instance whose activity is to be changed. * @param active A boolean, true if the instance should be set active otherwise false. */ void setInstanceActivityStatus(Instance* instance, bool active); /** Marks this layer as visual static. The result is that everything is rendered as one texture. * If you have instances with actions/animations on this layer then they are not displayed correctly. * Note: Works currently only for OpenGL backend. SDL backend is restricted to the lowest layer. * @param stati A boolean, true if the layer should be static. */ void setStatic(bool stati); /** Returns true, if layer is static. * @return A boolean, true if the layer is static, otherwise false. */ bool isStatic(); protected: //! string identifier std::string m_id; //! pointer to map Map* m_map; //! if true the instances are visibility otherwise they are skipped during rendering bool m_instancesVisibility; //! transparency, value 0 means total visible, 128 semi-transparent and 255 invisibility uint8_t m_transparency; //! all the instances on this layer std::vector m_instances; //! all the active instances on this layer std::set m_activeInstances; //! The instance tree InstanceTree* m_instanceTree; //! layer's cellgrid CellGrid* m_grid; //! pathing strategy for the layer PathingStrategy m_pathingStrategy; //! sorting strategy for rendering SortingStrategy m_sortingStrategy; //! is walkable true/false bool m_walkable; //! is interact true/false bool m_interact; //! walkable id std::string m_walkableId; //! all assigned interact layers std::vector m_interacts; //! pointer to cellcache CellCache* m_cellCache; //! listeners for layer changes std::vector m_changeListeners; //! holds changed instances after each update std::vector m_changedInstances; //! true if layer (or it's instance) information was changed during previous update round bool m_changed; //! true if layer is static bool m_static; }; } // FIFE #endif fifengine-0.4.1/engine/core/model/structures/layer.i000066400000000000000000000116671304641216200224660ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "model/structures/layer.h" %} %include "model/metamodel/modelcoords.i" %include "model/metamodel/grids/cellgrids.i" %include "util/structures/utilstructures.i" %include "util/base/utilbase.i" namespace FIFE { class Map; class Instance; class Object; class CellGrid; class CellCache; enum PathingStrategy { CELL_EDGES_ONLY, CELL_EDGES_AND_DIAGONALS }; enum SortingStrategy { SORTING_CAMERA, SORTING_LOCATION, SORTING_CAMERA_AND_LOCATION }; %feature("director") LayerChangeListener; class LayerChangeListener { public: virtual ~LayerChangeListener() {}; virtual void onLayerChanged(Layer* layer, std::vector& changedInstances) = 0; virtual void onInstanceCreate(Layer* layer, Instance* instance) = 0; virtual void onInstanceDelete(Layer* layer, Instance* instance) = 0; }; class Layer : public FifeClass { public: Layer(const std::string& identifier, Map* map, CellGrid* geometry); ~Layer(); const std::string& getId() const; void setId(const std::string& id); CellGrid* getCellGrid() const; void setCellGrid(CellGrid* grid); Map* getMap(); bool hasInstances() const; Instance* createInstance(Object* object, const ModelCoordinate& p, const std::string& id=""); Instance* createInstance(Object* object, const ExactModelCoordinate& p, const std::string& id=""); bool addInstance(Instance* instance, const ExactModelCoordinate& p); void deleteInstance(Instance* object); void removeInstance(Instance* object); const std::vector& getInstances() const; std::vector getInstances(const std::string& identifier); std::vector getInstancesAt(Location& loc, bool use_exactcoordinates=false); std::list getInstancesIn(Rect& rec); std::vector getInstancesInLine(const ModelCoordinate& pt1, const ModelCoordinate& pt2); std::vector getInstancesInCircle(const ModelCoordinate& center, uint16_t radius); std::vector getInstancesInCircleSegment(const ModelCoordinate& center, uint16_t radius, int32_t sangle, int32_t eangle); Instance* getInstance(const std::string& id); void setInstancesVisible(bool vis); void setLayerTransparency(uint8_t transparency); uint8_t getLayerTransparency(); void getMinMaxCoordinates(ModelCoordinate& min, ModelCoordinate& max, const Layer* layer = 0) const; bool cellContainsBlockingInstance(const ModelCoordinate& cellCoordinate); std::vector getBlockingInstances(const ModelCoordinate& cellCoordinate); void toggleInstancesVisible(); bool areInstancesVisible() const; void setPathingStrategy(PathingStrategy strategy); PathingStrategy getPathingStrategy(); void setSortingStrategy(SortingStrategy strategy); SortingStrategy getSortingStrategy() const; void setWalkable(bool walkable); bool isWalkable(); void setInteract(bool interact, const std::string& id); bool isInteract(); const std::string& getWalkableId(); void addInteractLayer(Layer* layer); const std::vector& getInteractLayers(); void removeInteractLayer(Layer* layer); void createCellCache(); CellCache* getCellCache(); void destroyCellCache(); void addChangeListener(LayerChangeListener* listener); void removeChangeListener(LayerChangeListener* listener); bool isChanged(); std::vector& getChangedInstances(); void setStatic(bool stati); bool isStatic(); }; } fifengine-0.4.1/engine/core/model/structures/location.cpp000066400000000000000000000140661304641216200235100ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/exception.h" #include "model/metamodel/grids/cellgrid.h" #include "layer.h" namespace FIFE { static std::string INVALID_LAYER_SET = "Cannot set layer coordinates, given layer is not initialized properly"; static std::string INVALID_LAYER_GET = "Cannot get layer coordinates, layer is not initialized properly"; Location::Location() { reset(); } Location::Location(const Location& loc) { reset(); m_layer = loc.m_layer; m_exact_layer_coords = loc.m_exact_layer_coords; } Location::Location(Layer* layer) { reset(); m_layer = layer; } Location::~Location() { } void Location::reset() { m_exact_layer_coords.x = 0; m_exact_layer_coords.y = 0; m_exact_layer_coords.z = 0; m_layer = NULL; } Location& Location::operator=(const Location& rhs) { m_layer = rhs.m_layer; m_exact_layer_coords.x = rhs.m_exact_layer_coords.x; m_exact_layer_coords.y = rhs.m_exact_layer_coords.y; m_exact_layer_coords.z = rhs.m_exact_layer_coords.z; return *this; } Map* Location::getMap() const { if (!m_layer) { return NULL; } return m_layer->getMap(); } void Location::setLayer(Layer* layer) { m_layer = layer; } Layer* Location::getLayer() const { return m_layer; } void Location::setExactLayerCoordinates(const ExactModelCoordinate& coordinates) { if (!isValid()) { throw NotSet(INVALID_LAYER_SET); } m_exact_layer_coords = coordinates; } void Location::setLayerCoordinates(const ModelCoordinate& coordinates) { setExactLayerCoordinates(intPt2doublePt(coordinates)); } void Location::setMapCoordinates(const ExactModelCoordinate& coordinates) { if (!isValid()) { throw NotSet(INVALID_LAYER_SET); } m_exact_layer_coords = m_layer->getCellGrid()->toExactLayerCoordinates(coordinates); } ExactModelCoordinate& Location::getExactLayerCoordinatesRef() { return m_exact_layer_coords; } ExactModelCoordinate Location::getExactLayerCoordinates() const { return m_exact_layer_coords; } ModelCoordinate Location::getLayerCoordinates() const { return m_layer->getCellGrid()->toLayerCoordinatesFromExactLayerCoordinates(m_exact_layer_coords); } ExactModelCoordinate Location::getMapCoordinates() const { return m_layer->getCellGrid()->toMapCoordinates(m_exact_layer_coords); } bool Location::isValid() const { return isValid(m_layer); } bool Location::isValid(const Layer* layer) const { return (layer && layer->getCellGrid()); } ExactModelCoordinate Location::getExactLayerCoordinates(const Layer* layer) const { if (!isValid(layer)) { throw NotSet(INVALID_LAYER_GET); } if (layer == m_layer) { return m_exact_layer_coords; } CellGrid* cg1 = m_layer->getCellGrid(); CellGrid* cg2 = layer->getCellGrid(); return cg2->toExactLayerCoordinates(cg1->toMapCoordinates(m_exact_layer_coords)); } ModelCoordinate Location::getLayerCoordinates(const Layer* layer) const { if (!isValid(layer)) { throw NotSet(INVALID_LAYER_GET); } if (layer == m_layer) { return getLayerCoordinates(); } CellGrid* cg1 = m_layer->getCellGrid(); CellGrid* cg2 = layer->getCellGrid(); return cg2->toLayerCoordinates(cg1->toMapCoordinates(m_exact_layer_coords)); } double Location::getCellOffsetDistance() const { const ExactModelCoordinate& pt = m_exact_layer_coords; double dx = pt.x - static_cast(static_cast(pt.x)); double dy = pt.y - static_cast(static_cast(pt.y)); return Mathd::Sqrt(dx*dx + dy*dy); } std::ostream& operator<<(std::ostream& os, const Location& l) { ExactModelCoordinate p = l.getExactLayerCoordinates(); return os << "x=" << p.x << ", y=" << p.y; } double Location::getMapDistanceTo(const Location& location) const{ ExactModelCoordinate current = getMapCoordinates(); ExactModelCoordinate target = location.getMapCoordinates(); double rx = current.x - target.x; double ry = current.y - target.y; double rz = current.z - target.z; return Mathd::Sqrt(rx*rx + ry*ry + rz*rz); } double Location::getLayerDistanceTo(const Location& location) const{ ModelCoordinate current = getLayerCoordinates(); ModelCoordinate target = location.getLayerCoordinates(m_layer); double rx = current.x - target.x; double ry = current.y - target.y; double rz = current.z - target.z; return Mathd::Sqrt(rx*rx + ry*ry + rz*rz); } } fifengine-0.4.1/engine/core/model/structures/location.h000066400000000000000000000143151304641216200231520ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_LOCATION_H #define FIFE_LOCATION_H // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "model/metamodel/modelcoords.h" #include "util/base/exception.h" namespace FIFE { class Map; class Layer; class Location { public: /** Default constructor */ Location(); /** Copy constructor */ Location(const Location& loc); /** Utility constructor */ Location(Layer* layer); /** Destructor */ ~Location(); /** Resets location (so that layer and coordinate information becomes invalid) */ void reset(); /** Assignment operator */ Location& operator=(const Location& rhs); /** Compares equality of two locations */ inline bool operator==(const Location& loc) const { return ((m_layer == loc.m_layer) && (m_exact_layer_coords == loc.m_exact_layer_coords)); } /** Compares unequality of two locations */ inline bool operator!=(const Location& loc) const { return !(*this == loc); } /** Gets the map where this location is pointing to * @note this information is fetched from the set layer * @return map where this location is pointing to, NULL in case its invalid */ Map* getMap() const; /** Sets layer where this location is pointing to * @param layer layer to set */ void setLayer(Layer* layer); /** Gets the layer where this location is pointing to * @return layer where this location is pointing to, NULL in case its invalid */ Layer* getLayer() const; /** Sets precise layer coordinates to this location * @throws NotSet in the following cases: * - layer is not set (NULL) * - layer does not have cellgrid assigned * @param coordinates coordinates to set */ void setExactLayerCoordinates(const ExactModelCoordinate& coordinates); /** Sets "cell precise" layer coordinates to this location * @throws NotSet in the following cases: * - layer is not set (NULL) * - layer does not have cellgrid assigned * @see setLayerCoordinates(const ExactModelCoordinate& coordinates) */ void setLayerCoordinates(const ModelCoordinate& coordinates); /** Sets map coordinates to this location * @param coordinates coordinates to set */ void setMapCoordinates(const ExactModelCoordinate& coordinates); /** Gets reference to exact layer coordinates. This means that if you * modify the coordinates, location gets modified directly * @return reference to exact layer coordinates */ ExactModelCoordinate& getExactLayerCoordinatesRef(); /** Gets exact layer coordinates set to this location * @return exact layer coordinates */ ExactModelCoordinate getExactLayerCoordinates() const; /** Gets exact layer coordinates of this location mapped on given layer * @throws NotSet in the following cases: * - given layer is not set (NULL) * - given layer does not have cellgrid assigned * @return exact layer coordinates */ ExactModelCoordinate getExactLayerCoordinates(const Layer* layer) const; /** Gets cell precision layer coordinates set to this location * @see getExactLayerCoordinates() */ ModelCoordinate getLayerCoordinates() const; /** Gets cell precision layer coordinates of this location mapped on given layer * @see getExactLayerCoordinates(const Layer* layer) */ ModelCoordinate getLayerCoordinates(const Layer* layer) const; /** Gets map coordinates set to this location * @return map coordinates */ ExactModelCoordinate getMapCoordinates() const; /** Gets offset distance from cell center * @return offset distance */ double getCellOffsetDistance() const; /** Tells if location is valid * Location is valid if: * - layer is set * - layer has cellgrid */ bool isValid() const; /** Gets distance in map coordinates to another location on the Map * @param location is the location you want to get the distance to */ double getMapDistanceTo(const Location& location) const; /** Gets layer distance to another location * @param location is the location you want to get the distance to * In case location resides on different layer, it is mapped to this layer */ double getLayerDistanceTo(const Location& location) const; private: bool isValid(const Layer* layer) const; Layer* m_layer; ExactModelCoordinate m_exact_layer_coords; }; /** Stream output operator. * * Useful for debugging purposes */ std::ostream& operator<<(std::ostream&, const Location&); } #endif //FIFE_LOCATION_H fifengine-0.4.1/engine/core/model/structures/location.i000066400000000000000000000057411304641216200231560ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "model/structures/location.h" %} namespace FIFE { class Map; class Layer; class NotSet; class ModelCoordinate; class ExactModelCoordinate; // for some reason swig ignores operator= and gives warning. Ignore this for now %ignore Location::operator=; class Location { public: Location(); Location(const Location& loc); Location(Layer* layer); ~Location(); void reset(); Location& operator=(const Location& rhs) const; inline bool operator==(const Location& loc) const; Map* getMap() const; void setLayer(Layer* layer); Layer* getLayer() const; void setExactLayerCoordinates(const ExactModelCoordinate& coordinates); void setLayerCoordinates(const ModelCoordinate& coordinates); void setMapCoordinates(const ExactModelCoordinate& coordinates); ExactModelCoordinate& getExactLayerCoordinatesRef(); ExactModelCoordinate getExactLayerCoordinates() const; ExactModelCoordinate getExactLayerCoordinates(const Layer* layer) const; ModelCoordinate getLayerCoordinates() const; ModelCoordinate getLayerCoordinates(const Layer* layer) const; ExactModelCoordinate getMapCoordinates() const; bool isValid() const; double getCellOffsetDistance() const; double getMapDistanceTo(const Location& location) const; double getLayerDistanceTo(const Location& location) const; }; std::ostream& operator<<(std::ostream& os, const Location& l); } namespace std { %template(LocationVector) vector; } fifengine-0.4.1/engine/core/model/structures/map.cpp000066400000000000000000000244431304641216200224550ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/exception.h" #include "util/structures/purge.h" #include "util/structures/rect.h" #include "view/camera.h" #include "view/rendererbase.h" #include "video/renderbackend.h" #include "map.h" #include "layer.h" #include "cellcache.h" #include "instance.h" #include "triggercontroller.h" namespace FIFE { Map::Map(const std::string& identifier, RenderBackend* renderBackend, const std::vector& renderers, TimeProvider* tp_master): m_id(identifier), m_filename(""), m_timeProvider(tp_master), m_changeListeners(), m_changedLayers(), m_renderBackend(renderBackend), m_renderers(renderers), m_changed(false) { m_triggerController = new TriggerController(this); } Map::~Map() { delete m_triggerController; // remove all cameras std::vector::iterator iter = m_cameras.begin(); for ( ; iter != m_cameras.end(); ++iter) { delete *iter; } m_cameras.clear(); deleteLayers(); } Layer* Map::getLayer(const std::string& id) { std::list::const_iterator it = m_layers.begin(); for(; it != m_layers.end(); ++it) { if((*it)->getId() == id) return *it; } return NULL; } uint32_t Map::getLayerCount() const { return m_layers.size(); } Layer* Map::createLayer(const std::string& identifier, CellGrid* grid) { std::list::const_iterator it = m_layers.begin(); for(; it != m_layers.end(); ++it) { if(identifier == (*it)->getId()) throw NameClash(identifier); } Layer* layer = new Layer(identifier, this, grid); m_layers.push_back(layer); m_changed = true; std::vector::iterator i = m_changeListeners.begin(); while (i != m_changeListeners.end()) { (*i)->onLayerCreate(this, layer); ++i; } return layer; } void Map::deleteLayer(Layer* layer) { std::list::iterator it = m_layers.begin(); for(; it != m_layers.end(); ++it) { if((*it) == layer) { std::vector::iterator i = m_changeListeners.begin(); while (i != m_changeListeners.end()) { (*i)->onLayerDelete(this, layer); ++i; } delete layer; m_layers.erase(it); return ; } } m_changed = true; } void Map::deleteLayers() { std::list temp_layers = m_layers; std::list::iterator temp_it = temp_layers.begin(); for(; temp_it != temp_layers.end(); ++temp_it) { std::vector::iterator i = m_changeListeners.begin(); while (i != m_changeListeners.end()) { (*i)->onLayerDelete(this, *temp_it); ++i; } std::list::iterator it = m_layers.begin(); for(; it != m_layers.end(); ++it) { if(*it == *temp_it) { delete *it; m_layers.erase(it); break; } } } } void Map::getMinMaxCoordinates(ExactModelCoordinate& min, ExactModelCoordinate& max) { if (m_layers.empty()) { return; } std::list::iterator it = m_layers.begin(); Layer* layer = *it; for (; it != m_layers.end(); ++it) { ModelCoordinate newMin, newMax; (*it)->getMinMaxCoordinates(newMin, newMax, layer); if (newMin.x < min.x) { min.x = newMin.x; } if (newMax.x > max.x) { max.x = newMax.x; } if (newMin.y < min.y) { min.y = newMin.y; } if (newMax.y > max.y) { max.y = newMax.y; } } Location lmin(layer); Location lmax(layer); lmin.setExactLayerCoordinates(min); lmax.setExactLayerCoordinates(max); min = lmin.getMapCoordinates(); max = lmax.getMapCoordinates(); } bool Map::update() { m_changedLayers.clear(); // transfer instances from one layer to another if (!m_transferInstances.empty()) { std::map::iterator it = m_transferInstances.begin(); for (; it != m_transferInstances.end(); ++it) { Instance* inst = (*it).first; Location target_loc = (*it).second; Layer* source = inst->getOldLocationRef().getLayer(); Layer* target = target_loc.getLayer(); if (source != target) { source->removeInstance(inst); target->addInstance(inst, target_loc.getExactLayerCoordinates()); } } m_transferInstances.clear(); } std::vector cellCaches; std::list::iterator it = m_layers.begin(); // update Layers for(; it != m_layers.end(); ++it) { if ((*it)->update()) { m_changedLayers.push_back(*it); } CellCache* cache = (*it)->getCellCache(); if (cache) { cellCaches.push_back(cache); } } // loop over Caches and update for (std::vector::iterator cacheIt = cellCaches.begin(); cacheIt != cellCaches.end(); ++cacheIt) { (*cacheIt)->update(); } if (!m_changedLayers.empty()) { std::vector::iterator i = m_changeListeners.begin(); while (i != m_changeListeners.end()) { (*i)->onMapChanged(this, m_changedLayers); ++i; } } // loop over cameras and update if enabled std::vector::iterator camIter = m_cameras.begin(); for ( ; camIter != m_cameras.end(); ++camIter) { if ((*camIter)->isEnabled()) { (*camIter)->update(); (*camIter)->render(); } } bool retval = m_changed; m_changed = false; return retval; } void Map::addChangeListener(MapChangeListener* listener) { m_changeListeners.push_back(listener); } void Map::removeChangeListener(MapChangeListener* listener) { std::vector::iterator i = m_changeListeners.begin(); while (i != m_changeListeners.end()) { if ((*i) == listener) { m_changeListeners.erase(i); return; } ++i; } } Camera* Map::addCamera(const std::string &id, Layer *layer, const Rect& viewport) { if (layer == NULL) { throw NotSupported("Must have valid layer for camera"); } if (getCamera(id)) { std::string errorStr = "Camera: " + id + " already exists"; throw NameClash(errorStr); } // create new camera and add to list of cameras Camera* camera = new Camera(id, layer, viewport, m_renderBackend); m_cameras.push_back(camera); std::vector::iterator iter = m_renderers.begin(); for ( ; iter != m_renderers.end(); ++iter) { camera->addRenderer((*iter)->clone()); } return camera; } void Map::removeCamera(const std::string &id) { std::vector::iterator iter = m_cameras.begin(); for ( ; iter != m_cameras.end(); ++iter) { if ((*iter)->getId() == id) { // camera has been found delete it delete *iter; // now remove it from the vector // note this invalidates iterators, but we do not need // to worry about it in this case since we are done m_cameras.erase(iter); break; } } } Camera* Map::getCamera(const std::string &id) { std::vector::iterator iter = m_cameras.begin(); for ( ; iter != m_cameras.end(); ++iter) { if ((*iter)->getId() == id) { return *iter; } } return NULL; } const std::vector& Map::getCameras() const { return m_cameras; } uint32_t Map::getActiveCameraCount() const { uint32_t count = 0; std::vector::const_iterator it = m_cameras.begin(); for ( ; it != m_cameras.end(); ++it) { if ((*it)->isEnabled()) { count += 1; } } return count; } void Map::addInstanceForTransfer(Instance* instance, const Location& target) { std::pair::iterator, bool> insertiter = m_transferInstances.insert(std::make_pair(instance, target)); if (insertiter.second == false) { Location& loc = insertiter.first->second; loc.setLayer(target.getLayer()); loc.setExactLayerCoordinates(target.getExactLayerCoordinates()); } } void Map::removeInstanceForTransfer(Instance* instance) { std::map::iterator it = m_transferInstances.find(instance); if (it != m_transferInstances.end()) { m_transferInstances.erase(it); } } void Map::initializeCellCaches() { if (m_layers.empty()) { return; } std::list::iterator layit = m_layers.begin(); // first add interacts to walkables for (; layit != m_layers.end(); ++layit) { if ((*layit)->isInteract()) { Layer* temp = getLayer((*layit)->getWalkableId()); if (temp) { temp->addInteractLayer(*layit); } } } // then create CellCaches for walkables layit = m_layers.begin(); for (; layit != m_layers.end(); ++layit) { if ((*layit)->isWalkable()) { (*layit)->createCellCache(); } } } void Map::finalizeCellCaches() { // create Cells and generate neighbours std::list::iterator layit = m_layers.begin(); for (; layit != m_layers.end(); ++layit) { CellCache* cache = (*layit)->getCellCache(); if (cache) { cache->createCells(); cache->forceUpdate(); } } } } //FIFE fifengine-0.4.1/engine/core/model/structures/map.h000066400000000000000000000207761304641216200221270ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_MAP_MAP_H #define FIFE_MAP_MAP_H // Standard C++ library includes #include #include #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/fifeclass.h" #include "util/resource/resource.h" #include "model/metamodel/timeprovider.h" #include "util/structures/rect.h" #include "location.h" namespace FIFE { class RendererBase; class RenderBackend; class Layer; class CellGrid; class Map; class Camera; class Instance; class TriggerController; /** Listener interface for changes happening on map */ class MapChangeListener { public: virtual ~MapChangeListener() {}; /** Called when some layer is changed on map. @see LayerChangeListener * Layer is effectively changed, in case some of its instances * is created, deleted or changed during latest update cycle * @param map where change occurred * @param changedLayers list of layers containing some changes * @note Does not report layer creations and deletions */ virtual void onMapChanged(Map* map, std::vector& changedLayers) = 0; /** Called when some layer gets created on the map * @param map where change occurred * @param layer which got created */ virtual void onLayerCreate(Map* map, Layer* layer) = 0; /** Called when some instance gets deleted on layer * @param map where change occurred * @param layer which will be deleted * @note right after this call, layer actually gets deleted! */ virtual void onLayerDelete(Map* map, Layer* layer) = 0; }; /** A container of \c Layer(s). * * The actual data is contained in \c Layer objects * @see Layer */ class Map : public FifeClass { public: /** Construct a map * To add map to model, one should call Model::addMap (otherwise * map is not registered with the engine properly) */ Map(const std::string& identifier, RenderBackend* renderbackend, const std::vector& renderers, TimeProvider* tp_master=NULL); /** Destructor */ ~Map(); /** Get the identifier for this map. */ const std::string& getId() const { return m_id; } /** Sets the identifier for this map. */ void setId(const std::string& id) { m_id = id; } /** Add a Layer to this Map. Map owns the returned pointer to the new Layer, so don't delete it! */ Layer* createLayer(const std::string& identifier, CellGrid* grid); /** Delete a layer from the map */ void deleteLayer(Layer*); /** Get the layers on this map. */ const std::list& getLayers() const { return m_layers; } /** Get the layer with the given id. */ Layer* getLayer(const std::string& identifier); /** Get the overall number of layers */ uint32_t getLayerCount() const; /** Delete all layers from the map */ void deleteLayers(); /** Maps coordinate from one layer to another */ void getMatchingCoordinates(const ModelCoordinate& coord_to_map, const Layer* from_layer, const Layer* to_layer, std::vector& matching_coords) const; /** Retrieves the minimum/maximum coordinates of instances on the map. * @param min A reference to a ExactModelCoordinate that will hold the minimum coordinate. * @param max A reference to a ExactModelCoordinate that will hold the maximum coordinate. */ void getMinMaxCoordinates(ExactModelCoordinate& min, ExactModelCoordinate& max); /** Called periodically to update events on map * @returns true, if map was changed */ bool update(); /** Sets speed for the map. See Model::setTimeMultiplier. */ void setTimeMultiplier(float multip) { m_timeProvider.setMultiplier(multip); } /** Gets model speed. @see setTimeMultiplier. */ float getTimeMultiplier() const { return m_timeProvider.getMultiplier(); } /** Gets timeprovider used in the map */ TimeProvider* getTimeProvider() { return &m_timeProvider; } /** Adds new change listener * @param listener to add */ void addChangeListener(MapChangeListener* listener); /** Removes associated change listener * @param listener to remove */ void removeChangeListener(MapChangeListener* listener); /** Returns true, if map information was changed during previous update round */ bool isChanged() { return !m_changedLayers.empty(); } /** Returns layers that were changed during previous update round */ std::vector& getChangedLayers() { return m_changedLayers; } /** Adds camera to the map. The Map takes ownership of the camera so don't delete it. */ Camera* addCamera(const std::string& id, Layer *layer, const Rect& viewport); /** Removes a camera from the map */ void removeCamera(const std::string& id); /** Get a camera by its identifier. */ Camera* getCamera(const std::string& id); /** Get a list containing all cameras. */ const std::vector& getCameras() const; /** Return the number of enabled cameras in this map. */ uint32_t getActiveCameraCount() const; void setFilename(const std::string& file) { m_filename = file; } const std::string& getFilename() const { return m_filename; } /** Adds instance that is to be transferred to another layer. * @param instance A pointer to the instance that is to be transferred. * @param target A const reference to the target location. */ void addInstanceForTransfer(Instance* instance, const Location& target); /** Removes instance that should be transferred to another layer. * @param instance A pointer to the instance that should be transferred. */ void removeInstanceForTransfer(Instance* instance); /** Creates cellcaches for this map. Called from maploader. */ void initializeCellCaches(); /** Creates cellcaches for this map. Called from maploader. */ void finalizeCellCaches(); /** */ TriggerController* getTriggerController() const { return m_triggerController; }; private: std::string m_id; std::string m_filename; std::list m_layers; TimeProvider m_timeProvider; Map(const Map& map); Map& operator=(const Map& map); //! listeners for map changes std::vector m_changeListeners; //! holds changed layers after each update std::vector m_changedLayers; //! holds the cameras attached to this map std::vector m_cameras; //! pointer to renderbackend RenderBackend* m_renderBackend; //! holds handles to all created renderers std::vector m_renderers; //! true, if something was changed on map during previous update (layer change, creation, deletion) bool m_changed; //! holds instances which should be transferred on the next update std::map m_transferInstances; TriggerController* m_triggerController; }; } //FIFE #endif /* vim: set noexpandtab: set shiftwidth=2: set tabstop=2: */ fifengine-0.4.1/engine/core/model/structures/map.i000066400000000000000000000066751304641216200221320ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "model/structures/map.h" %} %include "util/base/utilbase.i" namespace FIFE { class Layer; class Camera; } namespace std { %template(LayerList) list; %template(LayerVector) vector; %template(CameraVector) vector; } namespace FIFE { class Map; class Rect; class TriggerController; %feature("director") MapChangeListener; class MapChangeListener { public: virtual ~MapChangeListener() {}; virtual void onMapChanged(Map* map, std::vector& changedLayers) = 0; virtual void onLayerCreate(Map* map, Layer* layer) = 0; virtual void onLayerDelete(Map* map, Layer* layer) = 0; }; class Map : public FifeClass { public: Map(const std::string& identifier, RenderBackend* renderbackend, const std::vector& renderers, TimeProvider* tp_master=NULL); ~Map(); const std::string& getId() const; void setId(const std::string& id); Layer* createLayer(const std::string& identifier, CellGrid* grid); void deleteLayer(Layer* index); std::list getLayers() const; Layer* getLayer(const std::string& id); uint32_t getLayerCount() const; void deleteLayers(); void getMinMaxCoordinates(ExactModelCoordinate& min, ExactModelCoordinate& max); void setTimeMultiplier(float multip); double getTimeMultiplier() const; void addChangeListener(MapChangeListener* listener); void removeChangeListener(MapChangeListener* listener); bool isChanged(); std::vector& getChangedLayers(); Camera* addCamera(const std::string& id, Layer *layer, const Rect& viewport); void removeCamera(const std::string& id); Camera* getCamera(const std::string& id); std::vector& getCameras(); void setFilename(const std::string& file); const std::string& getFilename() const; void initializeCellCaches(); void finalizeCellCaches(); TriggerController* getTriggerController() const; }; } fifengine-0.4.1/engine/core/model/structures/renderernode.cpp000066400000000000000000000241751304641216200243560ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "video/renderbackend.h" #include "util/math/fife_math.h" #include "util/log/logger.h" #include "model/structures/instance.h" #include "model/structures/layer.h" #include "model/structures/location.h" #include "view/camera.h" #include "renderernode.h" namespace FIFE { static Logger _log(LM_VIEWVIEW); class NodeInstanceDeleteListener : public InstanceDeleteListener { public: NodeInstanceDeleteListener(RendererNode* node) { m_node = node; } virtual ~NodeInstanceDeleteListener() {} virtual void onInstanceDeleted(Instance* instance) { m_node->removeInstance(instance, false); } private: RendererNode* m_node; }; RendererNode::RendererNode(Instance* attached_instance, const Location &relative_location, Layer* relative_layer, const Point &relative_point): m_instance(NULL), m_location(relative_location), m_layer(relative_layer), m_point(relative_point), m_listener(NULL) { addInstance(attached_instance); } RendererNode::RendererNode(Instance* attached_instance, const Location &relative_location, const Point &relative_point): m_instance(NULL), m_location(relative_location), m_layer(NULL), m_point(relative_point), m_listener(NULL) { addInstance(attached_instance); } RendererNode::RendererNode(Instance* attached_instance, Layer* relative_layer, const Point &relative_point): m_instance(NULL), m_location(NULL), m_layer(relative_layer), m_point(relative_point), m_listener(NULL) { addInstance(attached_instance); } RendererNode::RendererNode(Instance* attached_instance, const Point &relative_point): m_instance(NULL), m_location(NULL), m_layer(NULL), m_point(relative_point), m_listener(NULL) { addInstance(attached_instance); } RendererNode::RendererNode(const Location &attached_location, Layer* relative_layer, const Point &relative_point): m_instance(NULL), m_location(attached_location), m_layer(relative_layer), m_point(relative_point), m_listener(NULL) { } RendererNode::RendererNode(const Location &attached_location, const Point &relative_point): m_instance(NULL), m_location(attached_location), m_layer(NULL), m_point(relative_point), m_listener(NULL) { } RendererNode::RendererNode(Layer* attached_layer, const Point &relative_point): m_instance(NULL), m_location(NULL), m_layer(attached_layer), m_point(relative_point), m_listener(NULL) { } RendererNode::RendererNode(const Point &attached_point): m_instance(NULL), m_location(NULL), m_layer(NULL), m_point(attached_point), m_listener(NULL) { } RendererNode::RendererNode(const RendererNode& old): m_instance(NULL), m_location(old.m_location), m_layer(old.m_layer), m_point(old.m_point), m_listener(NULL) { addInstance(old.m_instance); } RendererNode& RendererNode::operator=(const RendererNode &source) { if (this != &source) { changeInstance(source.m_instance); m_location = source.m_location; m_layer = source.m_layer; m_point = source.m_point; } return *this; } RendererNode::~RendererNode() { removeInstance(m_instance); delete m_listener; } void RendererNode::setAttached(Instance* attached_instance, const Location &relative_location, const Point &relative_point) { changeInstance(attached_instance); m_location = relative_location; m_point = relative_point; } void RendererNode::setAttached(Instance* attached_instance, const Location &relative_location) { changeInstance(attached_instance); m_location = relative_location; } void RendererNode::setAttached(Instance* attached_instance, const Point &relative_point) { changeInstance(attached_instance); m_point = relative_point; } void RendererNode::setAttached(Instance* attached_instance) { changeInstance(attached_instance); } void RendererNode::setAttached(const Location &attached_location, const Point &relative_point) { changeInstance(NULL); m_location = attached_location; m_point = relative_point; } void RendererNode::setAttached(const Location &attached_location) { changeInstance(NULL); m_location = attached_location; } void RendererNode::setAttached(Layer* attached_layer) { m_layer = attached_layer; } void RendererNode::setAttached(const Point &attached_point) { changeInstance(NULL); m_location = NULL; m_point = attached_point; } void RendererNode::setRelative(const Location &relative_location) { if(m_instance == NULL) { FL_WARN(_log, LMsg("RendererNode::setRelative(Location) - ") << "No instance attached."); } m_location = relative_location; } void RendererNode::setRelative(const Location &relative_location, Point relative_point) { if(m_instance == NULL) { FL_WARN(_log, LMsg("RendererNode::setRelative(Location, Point) - ") << "No instance attached."); } m_location = relative_location; m_point = relative_point; } void RendererNode::setRelative(const Point &relative_point) { if(m_instance == NULL || m_location == NULL) { FL_WARN(_log, LMsg("RendererNode::setRelative(Point) - ") << "No instance or location attached."); } m_point = relative_point; } Instance* RendererNode::getAttachedInstance() { if(m_instance == NULL) { FL_WARN(_log, LMsg("RendererNode::getAttachedInstance() - ") << "No instance attached."); } return m_instance; } Location RendererNode::getAttachedLocation() { if(m_instance != NULL || m_location == NULL) { FL_WARN(_log, LMsg("RendererNode::getAttachedLocation() - ") << "No location attached."); } return m_location; } Layer* RendererNode::getAttachedLayer() { if(m_layer == NULL) { FL_WARN(_log, LMsg("RendererNode::getAttachedLayer() - ") << "No layer attached."); } return m_layer; } Point RendererNode::getAttachedPoint() { if(m_instance != NULL || m_location != NULL) { FL_WARN(_log, LMsg("RendererNode::getAttachedPoint() - ") << "No point attached."); } return m_point; } Location RendererNode::getOffsetLocation() { if(m_instance == NULL || m_location == NULL) { FL_WARN(_log, LMsg("RendererNode::getOffsetLocation() - ") << "No location as offset used."); } return m_location; } Point RendererNode::getOffsetPoint() { if(m_instance == NULL && m_location == NULL) { FL_WARN(_log, LMsg("RendererNode::getOffsetPoint() - ") << "No point as offset used."); } return m_point; } Instance* RendererNode::getInstance() { return m_instance; } Location RendererNode::getLocation() { return m_location; } const Location& RendererNode::getLocationRef() { return m_location; } Layer* RendererNode::getLayer() { return m_layer; } Point RendererNode::getPoint() { return m_point; } const Point& RendererNode::getPointRef() { return m_point; } void RendererNode::addInstance(Instance* instance) { checkDeleteListener(); m_instance = instance; if (m_instance) { m_instance->addDeleteListener(m_listener); } } void RendererNode::changeInstance(Instance* instance) { if (m_instance == instance) { return; } checkDeleteListener(); if (m_instance) { m_instance->removeDeleteListener(m_listener); } m_instance = instance; if (m_instance) { m_instance->addDeleteListener(m_listener); } } void RendererNode::removeInstance(Instance* instance, bool listener) { if (m_instance == instance && instance) { if (listener) { m_instance->removeDeleteListener(m_listener); } m_instance = NULL; } } void RendererNode::checkDeleteListener() { if (m_listener) { return; } m_listener = new NodeInstanceDeleteListener(this); } Point RendererNode::getCalculatedPoint(Camera* cam, Layer* layer, const bool zoomed) { ScreenPoint p; if(m_instance != NULL) { if(m_layer == NULL) { m_layer = m_instance->getLocationRef().getLayer(); } if(m_location != NULL) { p = cam->toScreenCoordinates(m_instance->getLocationRef().getMapCoordinates() + m_location.getMapCoordinates()); } else { p = cam->toScreenCoordinates(m_instance->getLocationRef().getMapCoordinates()); } } else if(m_location != NULL) { if(m_layer == NULL) { m_layer = m_location.getLayer(); } p = cam->toScreenCoordinates(m_location.getMapCoordinates()); } else if(m_layer == NULL) { // FIXME FL_WARN(_log, LMsg("RendererNode::getCalculatedPoint(Camera, Layer) - ") << "No layer attached. So we use the first active layer of the renderer."); setAttached(layer); } if(zoomed) { return Point(round(m_point.x * cam->getZoom()) + p.x, round(m_point.y * cam->getZoom()) + p.y); } else { return Point(m_point.x + p.x, m_point.y + p.y); } } } fifengine-0.4.1/engine/core/model/structures/renderernode.h000066400000000000000000000104331304641216200240130ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_RENDERERNODE_H #define FIFE_RENDERERNODE_H // Standard C++ library includes //#include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder namespace FIFE { class InstanceDeleteListener; class RendererNode { public: RendererNode(Instance* attached_instance, const Location &relative_location, Layer* relative_layer, const Point &relative_point = Point(0,0)); RendererNode(Instance* attached_instance, const Location &relative_location, const Point &relative_point = Point(0,0)); RendererNode(Instance* attached_instance, Layer* relative_layer, const Point &relative_point = Point(0,0)); RendererNode(Instance* attached_instance, const Point &relative_point = Point(0,0)); RendererNode(const Location &attached_location, Layer* relative_layer, const Point &relative_point = Point(0,0)); RendererNode(const Location &attached_location, const Point &relative_point = Point(0,0)); RendererNode(Layer* attached_layer, const Point &relative_point = Point(0,0)); RendererNode(const Point &attached_point); RendererNode(const RendererNode &old); RendererNode& operator=(const RendererNode &source); ~RendererNode(); void setAttached(Instance* attached_instance, const Location &relative_location, const Point &relative_point); void setAttached(Instance* attached_instance, const Location &relative_location); void setAttached(Instance* attached_instance, const Point &relative_point); void setAttached(Instance* attached_instance); void setAttached(const Location &attached_location, const Point &relative_point); void setAttached(const Location &attached_location); void setAttached(Layer* attached_layer); void setAttached(const Point &attached_point); void setRelative(const Location &relative_location); void setRelative(const Location &relative_location, Point relative_point); void setRelative(const Point &relative_point); Instance* getAttachedInstance(); Location getAttachedLocation(); Layer* getAttachedLayer(); Point getAttachedPoint(); Location getOffsetLocation(); Point getOffsetPoint(); Instance* getInstance(); Location getLocation(); const Location& getLocationRef(); Layer* getLayer(); Point getPoint(); const Point& getPointRef(); void addInstance(Instance* instance); void changeInstance(Instance* instance); void removeInstance(Instance* instance, bool listener = true); Point getCalculatedPoint(Camera* cam, Layer* layer, const bool zoomed = false); private: void checkDeleteListener(); Instance* m_instance; Location m_location; Layer* m_layer; Point m_point; InstanceDeleteListener* m_listener; }; } #endif fifengine-0.4.1/engine/core/model/structures/renderernode.i000066400000000000000000000073031304641216200240160ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "model/structures/renderernode.h" %} namespace FIFE { %ignore RendererNode::operator=; class RendererNode { public: RendererNode(Instance* attached_instance, const Location &relative_location, Layer* relative_layer, const Point &relative_point = Point(0,0)); RendererNode(Instance* attached_instance, const Location &relative_location, const Point &relative_point = Point(0,0)); RendererNode(Instance* attached_instance, Layer* relative_layer, const Point &relative_point = Point(0,0)); RendererNode(Instance* attached_instance, const Point &relative_point = Point(0,0)); RendererNode(const Location &attached_location, Layer* relative_layer, const Point &relative_point = Point(0,0)); RendererNode(const Location &attached_location, const Point &relative_point = Point(0,0)); RendererNode(Layer* attached_layer, const Point &relative_point = Point(0,0)); RendererNode(const Point &attached_point); RendererNode(const RendererNode &old); RendererNode& operator=(const RendererNode &source); ~RendererNode(); void setAttached(Instance* attached_instance, const Location &relative_location, const Point &relative_point); void setAttached(Instance* attached_instance, const Location &relative_location); void setAttached(Instance* attached_instance, const Point &relative_point); void setAttached(Instance* attached_instance); void setAttached(const Location &attached_location, const Point &relative_point); void setAttached(const Location &attached_location); void setAttached(Layer* attached_layer); void setAttached(const Point &attached_point); void setRelative(const Location &relative_location); void setRelative(const Location &relative_location, Point relative_point); void setRelative(const Point &relative_point); Instance* getAttachedInstance(); Location getAttachedLocation(); Layer* getAttachedLayer(); Point getAttachedPoint(); Location getOffsetLocation(); Point getOffsetPoint(); Instance* getInstance(); Location getLocation(); const Location& getLocationRef(); Layer* getLayer(); Point getPoint(); const Point& getPointRef(); Point getCalculatedPoint(Camera* cam, Layer* layer, const bool zoomed); }; } fifengine-0.4.1/engine/core/model/structures/trigger.cpp000066400000000000000000000303321304641216200233350ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "cell.h" #include "cellcache.h" #include "instance.h" #include "layer.h" #include "location.h" #include "trigger.h" namespace FIFE { class TriggerChangeListener : public CellChangeListener, public InstanceChangeListener, public InstanceDeleteListener { public: TriggerChangeListener(Trigger* trigger) { m_trigger = trigger; } virtual ~TriggerChangeListener() {} // InstanceDeleteListener callback virtual void onInstanceDeleted(Instance* instance) { const std::vector& types = m_trigger->getTriggerConditions(); if (std::find(types.begin(), types.end(), INSTANCE_TRIGGER_DELETE) != types.end()) { m_trigger->setTriggered(); } m_trigger->detach(); } // CellChangeListener callback virtual void onInstanceEnteredCell(Cell* cell, Instance* instance) { const std::vector& types = m_trigger->getTriggerConditions(); if (std::find(types.begin(), types.end(), CELL_TRIGGER_ENTER) != types.end()) { const std::vector& restrict = m_trigger->getEnabledInstances(); if (m_trigger->isEnabledForAllInstances() || std::find(restrict.begin(), restrict.end(), instance) != restrict.end()) { m_trigger->setTriggered(); } } } // CellChangeListener callback virtual void onInstanceExitedCell(Cell* cell, Instance* instance) { const std::vector& types = m_trigger->getTriggerConditions(); if (std::find(types.begin(), types.end(), CELL_TRIGGER_EXIT) != types.end()) { const std::vector& restrict = m_trigger->getEnabledInstances(); if (m_trigger->isEnabledForAllInstances() || std::find(restrict.begin(), restrict.end(), instance) != restrict.end()) { m_trigger->setTriggered(); } } } // CellChangeListener callback virtual void onBlockingChangedCell(Cell* cell, CellTypeInfo type, bool blocks) { const std::vector& types = m_trigger->getTriggerConditions(); if (std::find(types.begin(), types.end(), CELL_TRIGGER_BLOCKING_CHANGE) != types.end()) { m_trigger->setTriggered(); } } // InstanceChangeListener callback virtual void onInstanceChanged(Instance* instance, InstanceChangeInfo info) { const std::vector& types = m_trigger->getTriggerConditions(); if (m_trigger->getAttached() == instance && (info & ICHANGE_CELL) == ICHANGE_CELL) { m_trigger->move(); } if (types.empty()) { return; } if ((info & ICHANGE_LOC) == ICHANGE_LOC && std::find(types.begin(), types.end(), INSTANCE_TRIGGER_LOCATION) != types.end()) { m_trigger->setTriggered(); } else if ((info & ICHANGE_ROTATION) == ICHANGE_ROTATION && std::find(types.begin(), types.end(), INSTANCE_TRIGGER_ROTATION) != types.end()) { m_trigger->setTriggered(); } else if ((info & ICHANGE_SPEED) == ICHANGE_SPEED && std::find(types.begin(), types.end(), INSTANCE_TRIGGER_SPEED) != types.end()) { m_trigger->setTriggered(); } else if ((info & ICHANGE_ACTION) == ICHANGE_ACTION && std::find(types.begin(), types.end(), INSTANCE_TRIGGER_ACTION) != types.end()) { m_trigger->setTriggered(); } else if ((info & ICHANGE_TIME_MULTIPLIER) == ICHANGE_TIME_MULTIPLIER && std::find(types.begin(), types.end(), INSTANCE_TRIGGER_TIME_MULTIPLIER) != types.end()) { m_trigger->setTriggered(); } else if ((info & ICHANGE_SAYTEXT) == ICHANGE_SAYTEXT && std::find(types.begin(), types.end(), INSTANCE_TRIGGER_SAYTEXT) != types.end()) { m_trigger->setTriggered(); } else if ((info & ICHANGE_BLOCK) == ICHANGE_BLOCK && std::find(types.begin(), types.end(), INSTANCE_TRIGGER_BLOCK) != types.end()) { m_trigger->setTriggered(); } else if ((info & ICHANGE_CELL) == ICHANGE_CELL && std::find(types.begin(), types.end(), INSTANCE_TRIGGER_CELL) != types.end()) { m_trigger->setTriggered(); } else if ((info & ICHANGE_TRANSPARENCY) == ICHANGE_TRANSPARENCY && std::find(types.begin(), types.end(), INSTANCE_TRIGGER_TRANSPARENCY) != types.end()) { m_trigger->setTriggered(); } else if ((info & ICHANGE_VISIBLE) == ICHANGE_VISIBLE && std::find(types.begin(), types.end(), INSTANCE_TRIGGER_VISIBLE) != types.end()) { m_trigger->setTriggered(); } else if ((info & ICHANGE_STACKPOS) == ICHANGE_STACKPOS && std::find(types.begin(), types.end(), INSTANCE_TRIGGER_STACKPOS) != types.end()) { m_trigger->setTriggered(); } else if ((info & ICHANGE_VISUAL) == ICHANGE_VISUAL && std::find(types.begin(), types.end(), INSTANCE_TRIGGER_VISUAL) != types.end()) { m_trigger->setTriggered(); } } private: Trigger* m_trigger; }; Trigger::Trigger(): m_name(""), m_triggered(false), m_enabledAll(false), m_attached(NULL) { m_changeListener = new TriggerChangeListener(this); } Trigger::Trigger(const std::string& name): m_name(name), m_triggered(false), m_enabledAll(false), m_attached(NULL) { m_changeListener = new TriggerChangeListener(this); } Trigger::~Trigger() { detach(); std::vector::iterator it = m_assigned.begin(); for (; it != m_assigned.end(); ++it) { (*it)->removeChangeListener(m_changeListener); } delete m_changeListener; } void Trigger::addTriggerListener(ITriggerListener* listener) { std::vector::iterator it = std::find(m_triggerListeners.begin(), m_triggerListeners.end(), listener); if (it == m_triggerListeners.end()) { m_triggerListeners.push_back(listener); } } void Trigger::removeTriggerListener(ITriggerListener* listener) { std::vector::iterator i = m_triggerListeners.begin(); while (i != m_triggerListeners.end()) { if ((*i) == listener) { // set the pointer to null, so it can be removed later *i = NULL; return; } ++i; } } void Trigger::reset() { m_triggered = false; } void Trigger::setTriggered() { if (!m_triggered) { m_triggered = true; std::vector::iterator i = m_triggerListeners.begin(); while (i != m_triggerListeners.end()) { if (*i) { (*i)->onTriggered(); } ++i; } } // remove null pointer m_triggerListeners.erase(std::remove(m_triggerListeners.begin(), m_triggerListeners.end(), (ITriggerListener*)NULL), m_triggerListeners.end()); } void Trigger::addTriggerCondition(TriggerCondition type) { std::vector::iterator it = std::find(m_triggerConditions.begin(), m_triggerConditions.end(), type); if (it == m_triggerConditions.end()) { m_triggerConditions.push_back(type); } } const std::vector& Trigger::getTriggerConditions() { return m_triggerConditions; } void Trigger::removeTriggerCondition(TriggerCondition type) { std::vector::iterator it = std::find(m_triggerConditions.begin(), m_triggerConditions.end(), type); if (it != m_triggerConditions.end()) { m_triggerConditions.erase(it); } } void Trigger::enableForInstance(Instance* instance) { std::vector::iterator it = std::find(m_enabledInstances.begin(), m_enabledInstances.end(), instance); if (it == m_enabledInstances.end()) { m_enabledInstances.push_back(instance); } } const std::vector& Trigger::getEnabledInstances() { return m_enabledInstances; } void Trigger::disableForInstance(Instance* instance) { std::vector::iterator it = std::find(m_enabledInstances.begin(), m_enabledInstances.end(), instance); if (it != m_enabledInstances.end()) { m_enabledInstances.erase(it); } } void Trigger::enableForAllInstances() { m_enabledAll = true; } bool Trigger::isEnabledForAllInstances() { return m_enabledAll; } void Trigger::disableForAllInstances() { m_enabledAll = false; } void Trigger::assign(Layer* layer, const ModelCoordinate& pt) { Cell* cell = layer->getCellCache()->getCell(pt); if (!cell) { return; } std::vector::iterator it = std::find(m_assigned.begin(), m_assigned.end(), cell); if (it == m_assigned.end()) { m_assigned.push_back(cell); cell->addChangeListener(m_changeListener); } } void Trigger::remove(Layer* layer, const ModelCoordinate& pt) { Cell* cell = layer->getCellCache()->getCell(pt); if (!cell) { return; } std::vector::iterator it = std::find(m_assigned.begin(), m_assigned.end(), cell); if (it != m_assigned.end()) { m_assigned.erase(it); cell->removeChangeListener(m_changeListener); } } void Trigger::assign(Cell* cell) { std::vector::iterator it = std::find(m_assigned.begin(), m_assigned.end(), cell); if (it == m_assigned.end()) { m_assigned.push_back(cell); cell->addChangeListener(m_changeListener); } } void Trigger::remove(Cell* cell) { std::vector::iterator it = std::find(m_assigned.begin(), m_assigned.end(), cell); if (it != m_assigned.end()) { m_assigned.erase(it); cell->removeChangeListener(m_changeListener); } } const std::vector& Trigger::getAssignedCells() { return m_assigned; } void Trigger::attach(Instance* instance) { if (instance == m_attached) { return; } if (m_attached) { detach(); } m_attached = instance; m_attached->addDeleteListener(m_changeListener); m_attached->addChangeListener(m_changeListener); } void Trigger::detach() { if (m_attached) { m_attached->removeDeleteListener(m_changeListener); m_attached->removeChangeListener(m_changeListener); m_attached = 0; } } void Trigger::move() { if (m_assigned.empty()) { return; } ModelCoordinate newPos = m_attached->getLocationRef().getLayerCoordinates(); ModelCoordinate oldPos = m_attached->getOldLocationRef().getLayerCoordinates(); moveTo(newPos, oldPos); } void Trigger::moveTo(const ModelCoordinate& newPos, const ModelCoordinate& oldPos) { ModelCoordinate mc(newPos.x-oldPos.x, newPos.y-oldPos.y); CellCache* cache = m_attached->getLocationRef().getLayer()->getCellCache(); std::vector newCells; std::vector::iterator it = m_assigned.begin(); for (; it != m_assigned.end(); ++it) { ModelCoordinate coord = (*it)->getLayerCoordinates(); coord.x += mc.x; coord.y += mc.y; Cell* c = cache->getCell(coord); if (c) { newCells.push_back(c); } } for (it = newCells.begin(); it != newCells.end(); ++it) { std::vector::iterator found = std::find(m_assigned.begin(), m_assigned.end(), *it); if (found != m_assigned.end()) { m_assigned.erase(found); } else { // add new (*it)->addChangeListener(m_changeListener); } } // remove old for (it = m_assigned.begin(); it != m_assigned.end(); ++it) { (*it)->removeChangeListener(m_changeListener); } m_assigned = newCells; } } fifengine-0.4.1/engine/core/model/structures/trigger.h000066400000000000000000000205171304641216200230060ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_TRIGGER_H #define FIFE_TRIGGER_H // Standard C++ library includes #include #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/fifeclass.h" namespace FIFE { class Cell; class Layer; class Instance; class TriggerChangeListener; class ITriggerListener { public: virtual ~ITriggerListener() {}; virtual void onTriggered() = 0; }; enum TriggerCondition { // cell conditions CELL_TRIGGER_ENTER = 0, CELL_TRIGGER_EXIT, CELL_TRIGGER_BLOCKING_CHANGE, // instance conditions INSTANCE_TRIGGER_LOCATION, INSTANCE_TRIGGER_ROTATION, INSTANCE_TRIGGER_SPEED, INSTANCE_TRIGGER_ACTION, INSTANCE_TRIGGER_TIME_MULTIPLIER, INSTANCE_TRIGGER_SAYTEXT, INSTANCE_TRIGGER_BLOCK, INSTANCE_TRIGGER_CELL, INSTANCE_TRIGGER_TRANSPARENCY, INSTANCE_TRIGGER_VISIBLE, INSTANCE_TRIGGER_STACKPOS, INSTANCE_TRIGGER_VISUAL, INSTANCE_TRIGGER_DELETE }; // FORWARD REFERENCES /** Trigger get triggered when a specific set of criteria are met. * * Currently these can be added directly to Layers. In order to extend * their use we might consider abstracting them from the Layer and adding * a trigger manager of some sort which will then add the appropriate * listeners to the layer and any other object that might need to * trip a trigger. * * @see Layer */ class Trigger : public FifeClass { public: // LIFECYCLE /** Default constructor. * * TODO (fixme) * I'm not sure if I actually want to be able to call the default constructor. * Triggers should always be given a name. * The maps trigger controller should guarantee the uniqueness of the name. */ Trigger(); /** Constructor with name * * Triggers should be created with a name as that is how they will * be referred to in the map file. * */ Trigger(const std::string& name); /** Destructor. */ virtual ~Trigger(); /** Add a listener to the trigger. * * When a trigger gets triggered it will call the onTriggered() * function of the listener. * * The Trigger does NOT take ownership of the listener so clients * must be sure to free their memory after the trigger has been * deleted. * * @see ITriggerListener */ void addTriggerListener(ITriggerListener* listener); /** Removes a listener from the trigger. * * This listener will no longer get called. The Trigger does * NOT free the listener so you must be sure to do this. */ void removeTriggerListener(ITriggerListener* listener); /** Reset trigger * * Resets the status of the trigger so it can be triggered again. * */ void reset(); /** Gets the name of the trigger. * * @return name of the trigger. */ const std::string& getName() const { return m_name; }; /** Returns if the trigger has been triggered * * Triggers will only trigger once unless they are reset. * @return bool true if the trigger has been triggered, false * otherwise. */ bool isTriggered() { return m_triggered; }; /** Sets the trigger to triggered and calls ITriggerListener->onTriggered() */ void setTriggered(); /** Adds trigger condition. * * @param type The trigger condition. */ void addTriggerCondition(TriggerCondition type); /** Returns trigger conditions in an vector. */ const std::vector& getTriggerConditions(); /** Removes trigger condition. * * @param type The trigger condition. */ void removeTriggerCondition(TriggerCondition type); /** Enables trigger for given instance. * * @param instance The instance which is enabled for the trigger. */ void enableForInstance(Instance* instance); /** Returns instance which the trigger is enabled for. */ const std::vector& getEnabledInstances(); /** Disables trigger for given instance. * * @param instance The instance which is disabled for the trigger. */ void disableForInstance(Instance* instance); /** Enables trigger for all instances. */ void enableForAllInstances(); /** Returns if trigger is enabled for all instances. */ bool isEnabledForAllInstances(); /** Disables trigger for all instances. */ void disableForAllInstances(); /** Assigns trigger on given layer and position. * * @param layer A pointer to the layer in which to add the Trigger to. * @param pt The ModelCoordinate where the Trigger should be added. */ void assign(Layer* layer, const ModelCoordinate& pt); /** Removes trigger from given layer and position. * * @param layer A pointer to the layer in which to remove the Trigger from. * @param pt The ModelCoordinate where the Trigger should be removed. */ void remove(Layer* layer, const ModelCoordinate& pt); /** Assigns trigger on given cell. * * @param cell A pointer to the cell in which to add the Trigger to. */ void assign(Cell* cell); /** Removes trigger from given cell. * * @param cell A pointer to the cell in which to remove the Trigger from. */ void remove(Cell* cell); /** Returns vector with the cells where the trigger is assigned to. */ const std::vector& getAssignedCells(); /** Attaches the trigger to the given instance. So the trigger moves with the instance. * * @param instance A pointer to the instance which the Trigger is attached to. */ void attach(Instance* instance); /** Detaches trigger from instance. */ void detach(); /** Returns pointer to instance where the trigger is attached to. * Note: Returns Null if no instance is attached. */ Instance* getAttached() { return m_attached; } /** Callback for TriggerChangeListener. */ void move(); /** Moves the trigger from the old position to the new position. * * @param newPos The old position as ModelCoordinate. * @param oldPos The old position as ModelCoordinate. */ void moveTo(const ModelCoordinate& newPos, const ModelCoordinate& oldPos); private: //! name of the trigger. This should be unique per Map. std::string m_name; //! true if this trigger has been triggered bool m_triggered; //! true if the trigger is enabled for all instances bool m_enabledAll; //! Vector of the listeners that get called std::vector m_triggerListeners; //! main change listener (cell and instance listener) TriggerChangeListener* m_changeListener; //! cells in which the trigger is assigned std::vector m_assigned; //! all trigger conditions std::vector m_triggerConditions; //! all enabled instances std::vector m_enabledInstances; //! instance where the trigger is attached to Instance* m_attached; }; } //FIFE #endif fifengine-0.4.1/engine/core/model/structures/trigger.i000066400000000000000000000126751304641216200230150ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "model/structures/trigger.h" #include "model/structures/triggercontroller.h" %} namespace FIFE { class Map; class Layer; class Instance; enum TriggerCondition { CELL_TRIGGER_ENTER = 0, CELL_TRIGGER_EXIT, CELL_TRIGGER_BLOCKING_CHANGE, INSTANCE_TRIGGER_LOCATION, INSTANCE_TRIGGER_ROTATION, INSTANCE_TRIGGER_SPEED, INSTANCE_TRIGGER_ACTION, INSTANCE_TRIGGER_TIME_MULTIPLIER, INSTANCE_TRIGGER_SAYTEXT, INSTANCE_TRIGGER_BLOCK, INSTANCE_TRIGGER_CELL, INSTANCE_TRIGGER_TRANSPARENCY, INSTANCE_TRIGGER_VISIBLE, INSTANCE_TRIGGER_STACKPOS, INSTANCE_TRIGGER_VISUAL, INSTANCE_TRIGGER_DELETE }; %feature("director") ITriggerListener; class ITriggerListener { public: virtual ~ITriggerListener() {}; virtual void onTriggered() = 0; }; class Trigger : public FifeClass { public: virtual ~Trigger(); void addTriggerListener(ITriggerListener* listener); void removeTriggerListener(ITriggerListener* listener); void reset(); const std::string& getName() const; bool isTriggered(); void setTriggered(); void addTriggerCondition(TriggerCondition type); const std::vector& getTriggerConditions(); void removeTriggerCondition(TriggerCondition type); void enableForInstance(Instance* instance); const std::vector& getEnabledInstances(); void disableForInstance(Instance* instance); void enableForAllInstances(); bool isEnabledForAllInstances(); void disableForAllInstances(); void assign(Layer* layer, const ModelCoordinate& pt); void remove(Layer* layer, const ModelCoordinate& pt); void assign(Cell* cell); void remove(Cell* cell); void attach(Instance* instance); void detach(); Instance* getAttached(); void moveTo(const ModelCoordinate& newPos, const ModelCoordinate& oldPos); const std::vector& getAssignedCells(); private: Trigger(); Trigger(const std::string& name); }; class TriggerController : public FifeClass { public: virtual ~TriggerController(); Trigger* createTrigger(const std::string& triggerName); Trigger* createTriggerOnCoordinate(const std::string& triggerName, Layer* layer, const ModelCoordinate& pt); Trigger* createTriggerOnCoordinates(const std::string& triggerName, Layer* layer, const std::vector& coords); Trigger* createTriggerOnRect(const std::string& triggerName, Layer* layer, const Rect& rec); Trigger* createTriggerOnLocation(const std::string& triggerName, const Location& loc); Trigger* createTriggerOnLocations(const std::string& triggerName, const std::vector& locs); Trigger* createTriggerOnCell(const std::string& triggerName, Cell* cell); Trigger* createTriggerOnCells(const std::string& triggerName, const std::vector& cells); Trigger* createTriggerOnInstance(const std::string& triggerName, Instance* instance); Trigger* getTrigger(const std::string& triggerName); void deleteTrigger(const std::string& triggerName); void removeTriggerFromCoordinate(const std::string& triggerName, Layer* layer, const ModelCoordinate& pt); void removeTriggerFromCoordinates(const std::string& triggerName, Layer* layer, const std::vector& coords); void removeTriggerFromRect(const std::string& triggerName, Layer* layer, const Rect& rec); void removeTriggerFromLocation(const std::string& triggerName, const Location& loc); void removeTriggerFromLocations(const std::string& triggerName, const std::vector& locs); void removeTriggerFromCell(const std::string& triggerName, Cell* cell); void removeTriggerFromCells(const std::string& triggerName, const std::vector& cells); void removeTriggerFromInstance(const std::string& triggerName, Instance* instance); std::vector getAllTriggers(); std::vector getAllTriggerNames(); private: TriggerController(Map* map); }; } //FIFE namespace std { %template(TriggerConditionVector) vector; %template(TriggerVector) vector; }fifengine-0.4.1/engine/core/model/structures/triggercontroller.cpp000066400000000000000000000216521304641216200254460ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "model/metamodel/modelcoords.h" #include "util/log/logger.h" #include "cell.h" #include "cellcache.h" #include "map.h" #include "trigger.h" #include "triggercontroller.h" namespace FIFE { static Logger _log(LM_STRUCTURES); TriggerController::TriggerController(Map* map) : m_map(map) { } TriggerController::~TriggerController() { TriggerNameMapIterator it = m_triggerNameMap.begin(); for (; it != m_triggerNameMap.end(); ++it) { delete it->second; } } Trigger* TriggerController::createTrigger(const std::string& triggerName) { //assert(!exists(triggerName)); Trigger* trigger = new Trigger(triggerName); std::pair returnValue; returnValue = m_triggerNameMap.insert ( TriggerNameMapPair(triggerName, trigger)); if (!returnValue.second) { delete trigger; FL_WARN(_log, LMsg("TriggerController::createTrigger() - ") << "Trigger " << triggerName << " already exists.... ignoring."); } return returnValue.first->second; } Trigger* TriggerController::createTriggerOnCoordinate(const std::string& triggerName, Layer* layer, const ModelCoordinate& pt) { assert(layer); Trigger* trigger = createTrigger(triggerName); trigger->assign(layer, pt); return trigger; } Trigger* TriggerController::createTriggerOnCoordinates(const std::string& triggerName, Layer* layer, const std::vector& coords) { assert(layer); Trigger* trigger = createTrigger(triggerName); for (std::vector::const_iterator it = coords.begin(); it != coords.end(); ++it) { trigger->assign(layer, *it); } return trigger; } Trigger* TriggerController::createTriggerOnRect(const std::string& triggerName, Layer* layer, const Rect& rec) { assert(layer); assert(layer->getCellCache()); Trigger* trigger = createTrigger(triggerName); std::vector cells = layer->getCellCache()->getCellsInRect(rec); for (std::vector::iterator it = cells.begin(); it != cells.end(); ++it) { trigger->assign(*it); } return trigger; } Trigger* TriggerController::createTriggerOnLocation(const std::string& triggerName, const Location& loc) { assert(loc.getLayer()); assert(loc.getLayer()->getCellCache()); Trigger* trigger = createTrigger(triggerName); trigger->assign(loc.getLayer(), loc.getLayerCoordinates()); return trigger; } Trigger* TriggerController::createTriggerOnLocations(const std::string& triggerName, const std::vector& locs) { Trigger* trigger = createTrigger(triggerName); for (std::vector::const_iterator it = locs.begin(); it != locs.end(); ++it) { trigger->assign((*it).getLayer(), (*it).getLayerCoordinates()); } return trigger; } Trigger* TriggerController::createTriggerOnCell(const std::string& triggerName, Cell* cell) { assert(cell); Trigger* trigger = createTrigger(triggerName); trigger->assign(cell); return trigger; } Trigger* TriggerController::createTriggerOnCells(const std::string& triggerName, const std::vector& cells) { Trigger* trigger = createTrigger(triggerName); for (std::vector::const_iterator it = cells.begin(); it != cells.end(); ++it) { trigger->assign(*it); } return trigger; } Trigger* TriggerController::createTriggerOnInstance(const std::string& triggerName, Instance* instance) { assert(instance); Trigger* trigger = createTrigger(triggerName); trigger->attach(instance); return trigger; } Trigger* TriggerController::getTrigger(const std::string& triggerName) { TriggerNameMapIterator it = m_triggerNameMap.find(triggerName); if (it != m_triggerNameMap.end()) { return it->second; } return NULL; } void TriggerController::deleteTrigger(const std::string& triggerName) { TriggerNameMapIterator it = m_triggerNameMap.find(triggerName); if (it != m_triggerNameMap.end()) { delete it->second; m_triggerNameMap.erase(it); } } void TriggerController::removeTriggerFromCoordinate(const std::string& triggerName, Layer* layer, const ModelCoordinate& pt) { TriggerNameMapIterator it = m_triggerNameMap.find(triggerName); if (it != m_triggerNameMap.end()) { it->second->remove(layer, pt); } } void TriggerController::removeTriggerFromCoordinates(const std::string& triggerName, Layer* layer, const std::vector& coords) { TriggerNameMapIterator it = m_triggerNameMap.find(triggerName); if (it != m_triggerNameMap.end()) { for (std::vector::const_iterator cit = coords.begin(); cit != coords.end(); ++cit) { it->second->remove(layer, *cit); } } } void TriggerController::removeTriggerFromRect(const std::string& triggerName, Layer* layer, const Rect& rec) { TriggerNameMapIterator it = m_triggerNameMap.find(triggerName); if (it != m_triggerNameMap.end()) { std::vector cells = layer->getCellCache()->getCellsInRect(rec); for (std::vector::iterator cit = cells.begin(); cit != cells.end(); ++cit) { it->second->remove(*cit); } } } void TriggerController::removeTriggerFromLocation(const std::string& triggerName, const Location& loc) { TriggerNameMapIterator it = m_triggerNameMap.find(triggerName); if (it != m_triggerNameMap.end()) { it->second->remove(loc.getLayer(), loc.getLayerCoordinates()); } } void TriggerController::removeTriggerFromLocations(const std::string& triggerName, const std::vector& locs) { TriggerNameMapIterator it = m_triggerNameMap.find(triggerName); if (it != m_triggerNameMap.end()) { for (std::vector::const_iterator cit = locs.begin(); cit != locs.end(); ++cit) { it->second->remove((*cit).getLayer(), (*cit).getLayerCoordinates()); } } } void TriggerController::removeTriggerFromCell(const std::string& triggerName, Cell* cell) { TriggerNameMapIterator it = m_triggerNameMap.find(triggerName); if (it != m_triggerNameMap.end()) { it->second->remove(cell); } } void TriggerController::removeTriggerFromCells(const std::string& triggerName, const std::vector& cells) { TriggerNameMapIterator it = m_triggerNameMap.find(triggerName); if (it != m_triggerNameMap.end()) { for (std::vector::const_iterator cit = cells.begin(); cit != cells.end(); ++cit) { it->second->remove(*cit); } } } void TriggerController::removeTriggerFromInstance(const std::string& triggerName, Instance* instance) { TriggerNameMapIterator it = m_triggerNameMap.find(triggerName); if (it != m_triggerNameMap.end()) { if (it->second->getAttached() == instance) { it->second->detach(); } } } std::vector TriggerController::getAllTriggers() { std::vector triggers; TriggerNameMapIterator it = m_triggerNameMap.begin(); for (; it != m_triggerNameMap.end(); ++it) { triggers.push_back(it->second); } return triggers; } std::vector TriggerController::getAllTriggerNames() { std::vector names; TriggerNameMapIterator it = m_triggerNameMap.begin(); for (; it != m_triggerNameMap.end(); ++it) { names.push_back(it->first); } return names; } bool TriggerController::exists(const std::string& name) { TriggerNameMapIterator it = m_triggerNameMap.find(name); if (it != m_triggerNameMap.end()) { return true; } return false; } } //FIFE fifengine-0.4.1/engine/core/model/structures/triggercontroller.h000066400000000000000000000232671304641216200251170ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_TRIGGER_CONTROLLER_H #define FIFE_TRIGGER_CONTROLLER_H // Standard C++ library includes #include #include #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/fifeclass.h" #include "util/structures/rect.h" #include "model/metamodel/modelcoords.h" namespace FIFE { // FORWARD REFERENCES class Trigger; class Map; class Layer; class Location; class Instance; class Cell; /** This class serves as a central place to manage triggers for a Map. * * You should never instantiate this class directly as Map does it * when you create a new map. */ class TriggerController : public FifeClass { public: // LIFECYCLE /** Constructor. * * @param map A pointer to the map that the controller will interact with. */ TriggerController(Map* map); /** Destructor. */ virtual ~TriggerController(); /** Creates a trigger. * * @param triggerName The name of the trigger. This must be unique per map. */ Trigger* createTrigger(const std::string& triggerName); /** Creates and adds a trigger to the cell on the specified layer and coordinate. * * @param triggerName The name of the trigger. This must be unique per map. * @param layer A pointer to the layer in which to add the Trigger to * @param pt The ModelCoordinate where the Trigger should be added. */ Trigger* createTriggerOnCoordinate(const std::string& triggerName, Layer* layer, const ModelCoordinate& pt); /** Creates and adds a trigger to the cells on the specified layer and coordinates. * * @param triggerName The name of the trigger. This must be unique per map. * @param layer A pointer to the layer in which to add the Trigger to * @param coords Vector with ModelCoordinates where the Trigger should be added. */ Trigger* createTriggerOnCoordinates(const std::string& triggerName, Layer* layer, const std::vector& coords); /** Creates and adds a trigger to the cells on the specified layer and rect. * * @param triggerName The name of the trigger. This must be unique per map. * @param layer A pointer to the layer in which to add the Trigger to * @param rec a Rect with ModelCoordinates where the Trigger should be added. */ Trigger* createTriggerOnRect(const std::string& triggerName, Layer* layer, const Rect& rec); /** Creates and adds a trigger to the cell on the specified location. * * @param triggerName The name of the trigger. This must be unique per map. * @param loc The Location where the Trigger should be added. */ Trigger* createTriggerOnLocation(const std::string& triggerName, const Location& loc); /** Creates and adds a trigger to the cell on the specified locations. * * @param triggerName The name of the trigger. This must be unique per map. * @param locs Vector with Locations where the Trigger should be added. */ Trigger* createTriggerOnLocations(const std::string& triggerName, const std::vector& locs); /** Creates and adds a trigger to the specified cell. * * @param triggerName The name of the trigger. This must be unique per map. * @param cell The Cell where the Trigger should be added. */ Trigger* createTriggerOnCell(const std::string& triggerName, Cell* cell); /** Creates and adds a trigger to the specified cells. * * @param triggerName The name of the trigger. This must be unique per map. * @param cells Vector with Cell pointers where the Trigger should be added. */ Trigger* createTriggerOnCells(const std::string& triggerName, const std::vector& cells); /** Creates and attach a trigger to the specified instance. But not to the underlaying cell. * * @param triggerName The name of the trigger. This must be unique per map. * @param instance The Instance where the Trigger is attached to. */ Trigger* createTriggerOnInstance(const std::string& triggerName, Instance* instance); /** Returns a pointer to the trigger with the given name. * Note: Returns Null if the trigger does not exists. * * @param triggerName The name of the trigger. This must be unique per map. */ Trigger* getTrigger(const std::string& triggerName); /** Deletes a trigger with the given name. * * @param triggerName The name of the trigger. This must be unique per map. */ void deleteTrigger(const std::string& triggerName); /** Removes a trigger from the cell on the specified layer and coordinate. * * @param triggerName The name of the trigger. This must be unique per map. * @param layer A pointer to the layer in which to remove the Trigger from. * @param pt The ModelCoordinate where the Trigger should be removed. */ void removeTriggerFromCoordinate(const std::string& triggerName, Layer* layer, const ModelCoordinate& pt); /** Removes a trigger from the cell on the specified layer and coordinates. * * @param triggerName The name of the trigger. This must be unique per map. * @param layer A pointer to the layer in which to remove the Trigger from. * @param coords Vector with ModelCoordinates where the Trigger should be removed. */ void removeTriggerFromCoordinates(const std::string& triggerName, Layer* layer, const std::vector& coords); /** Removes a trigger from the cell on the specified layer and coordinates. * * @param triggerName The name of the trigger. This must be unique per map. * @param layer A pointer to the layer in which to remove the Trigger from. * @param rec Rect with ModelCoordinates where the Trigger should be removed. */ void removeTriggerFromRect(const std::string& triggerName, Layer* layer, const Rect& rec); /** Removes a trigger from the cell on the specified location. * * @param triggerName The name of the trigger. This must be unique per map. * @param loc Location where the Trigger should be removed. */ void removeTriggerFromLocation(const std::string& triggerName, const Location& loc); /** Removes a trigger from the cell on the specified locations. * * @param triggerName The name of the trigger. This must be unique per map. * @param locs Vector with Locations where the Trigger should be removed. */ void removeTriggerFromLocations(const std::string& triggerName, const std::vector& locs); /** Removes a trigger from the specified cell. * * @param triggerName The name of the trigger. This must be unique per map. * @param cell The Cell pointer where the Trigger should be removed. */ void removeTriggerFromCell(const std::string& triggerName, Cell* cell); /** Removes a trigger from the specified cells. * * @param triggerName The name of the trigger. This must be unique per map. * @param cells Vector with Cell pointers where the Trigger should be removed. */ void removeTriggerFromCells(const std::string& triggerName, const std::vector& cells); /** Detach a trigger from the specified instance. * * @param triggerName The name of the trigger. This must be unique per map. * @param instance The instance pointer where the Trigger is detached from. */ void removeTriggerFromInstance(const std::string& triggerName, Instance* instance); /** Returns a vector with all trigger pointers. */ std::vector getAllTriggers(); /** Returns a vector with all trigger names. */ std::vector getAllTriggerNames(); private: /** Checks to see if the trigger name already exists. * * @param name The name of the trigger to check * * @return true if the name already exists, false otherwise. */ bool exists(const std::string& name); //! Pointer to the map this controller is associated with. Map* m_map; typedef std::map< std::string, Trigger* > TriggerNameMap; typedef std::map< std::string, Trigger* >::iterator TriggerNameMapIterator; typedef std::map< std::string, Trigger* >::const_iterator TriggerNameMapConstIterator; typedef std::pair< std::string, Trigger* > TriggerNameMapPair; //! Trigger name map TriggerNameMap m_triggerNameMap; }; } //FIFE #endif fifengine-0.4.1/engine/core/modules.h000066400000000000000000000072721304641216200174730ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_MODULES_H #define FIFE_MODULES_H // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder /** Modules available for logging */ enum logmodule_t { LM_CORE = -1, LM_AUDIO, LM_CONTROLLER, LM_EVTCHANNEL, LM_GUI, LM_CONSOLE, LM_LOADERS, LM_NATIVE_LOADERS, LM_FO_LOADERS, LM_SAVERS, LM_NATIVE_SAVERS, LM_MODEL, LM_STRUCTURES, LM_INSTANCE, LM_LOCATION, LM_METAMODEL, LM_CELLGRID, LM_SQUAREGRID, LM_HEXGRID, LM_PATHFINDER, LM_UTIL, LM_RESMGR, LM_VFS, LM_VIDEO, LM_VIEW, LM_CAMERA, LM_VIEWVIEW, LM_XML, LM_EXCEPTION, LM_SCRIPT, LM_MODULE_MAX // sentinel }; /** Module hierarchy definition + display strings * format = module, module parent, module display name */ #define MODULE_INFO_RELATIONSHIPS \ ModuleInfo moduleInfos[] = { \ {LM_AUDIO, LM_CORE, "Audio"}, \ {LM_CONTROLLER, LM_CORE, "Controller"}, \ {LM_EVTCHANNEL, LM_CORE, "Event Channel"}, \ {LM_GUI, LM_CORE, "GUI"}, \ {LM_CONSOLE, LM_GUI, "Console"}, \ {LM_LOADERS, LM_CORE, "Loaders"}, \ {LM_NATIVE_LOADERS, LM_LOADERS, "Native loaders"}, \ {LM_FO_LOADERS, LM_LOADERS, "Fallout loaders"}, \ {LM_SAVERS, LM_CORE, "Savers"}, \ {LM_NATIVE_SAVERS, LM_CORE, "Native savers"}, \ {LM_MODEL, LM_CORE, "Model"}, \ {LM_STRUCTURES, LM_MODEL, "Structures"}, \ {LM_INSTANCE, LM_STRUCTURES, "Instance"}, \ {LM_LOCATION, LM_STRUCTURES, "Location"}, \ {LM_METAMODEL, LM_MODEL, "Metamodel"}, \ {LM_CELLGRID, LM_METAMODEL, "Cellgrid"}, \ {LM_SQUAREGRID, LM_METAMODEL, "Squaregrid"}, \ {LM_HEXGRID, LM_METAMODEL, "Hexgrid"}, \ {LM_PATHFINDER, LM_CORE, "Pathfinder"}, \ {LM_UTIL, LM_CORE, "Util"}, \ {LM_RESMGR, LM_UTIL, "Resource Manager"}, \ {LM_VFS, LM_CORE, "VFS"}, \ {LM_VIDEO, LM_CORE, "Video" }, \ {LM_VIEW, LM_CORE, "View"}, \ {LM_CAMERA, LM_VIEW, "Camera"}, \ {LM_VIEWVIEW, LM_VIEW, "View::View"}, \ {LM_XML, LM_CORE, "XML"}, \ {LM_EXCEPTION, LM_CORE, "Exception"}, \ {LM_SCRIPT, LM_CORE, "Script"} \ }; #endif fifengine-0.4.1/engine/core/pathfinder/000077500000000000000000000000001304641216200177665ustar00rootroot00000000000000fifengine-0.4.1/engine/core/pathfinder/route.cpp000066400000000000000000000162431304641216200216360ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/log/logger.h" #include "model/metamodel/object.h" #include "model/structures/layer.h" #include "model/structures/location.h" #include "route.h" namespace FIFE { static Logger _log(LM_STRUCTURES); Route::Route(const Location& start, const Location& end): m_status(ROUTE_CREATED), m_startNode(start), m_endNode(end), m_walked(0), m_sessionId(-1), m_rotation(0), m_replanned(false), m_ignoresBlocker(false), m_costId(""), m_object(NULL) { } Route::~Route() { } void Route::setRouteStatus(RouteStatusInfo status) { if (m_status != status) { m_status = status; } } RouteStatusInfo Route::getRouteStatus() { return m_status; } void Route::setStartNode(const Location& node) { m_startNode = node; if (m_status != ROUTE_CREATED) { m_status = ROUTE_CREATED; if (!m_path.empty()) { m_path.clear(); } m_walked = 1; } } const Location& Route::getStartNode() { return m_startNode; } void Route::setEndNode(const Location& node) { if (m_status != ROUTE_CREATED) { m_status = ROUTE_CREATED; if (!m_path.empty()) { m_startNode = *m_current; m_path.clear(); } m_walked = 1; } m_endNode = node; } const Location& Route::getEndNode() { return m_endNode; } const Location& Route::getCurrentNode() { if (m_path.empty()) { return m_startNode; } if (m_current == m_path.end()) { return m_path.back(); } return *m_current; } const Location& Route::getPreviousNode() { if (m_path.empty()) { return m_startNode; } if (m_current != m_path.begin()) { --m_current; const Location& loc = *m_current; ++m_current; return loc; } return *m_current; } const Location& Route::getNextNode() { if (m_path.empty()) { return m_startNode; } if (m_current != m_path.end()) { ++m_current; if (m_current != m_path.end()) { const Location& loc = *m_current; --m_current; return loc; } --m_current; } return *m_current; } bool Route::walkToNextNode(int32_t step) { if (m_path.empty() || step == 0) { return false; } int32_t pos = static_cast(m_walked) + step; if (pos > static_cast(m_path.size()) || pos < 0) { return false; } if (step > 0) { for (int32_t i = 0; i < step; ++i, ++m_current); } else { for (int32_t i = 0; i > step; --i, --m_current); } m_walked += step; return true; } bool Route::reachedEnd() { if (m_path.empty()) { return true; } return m_current == m_path.end(); } void Route::setPath(const Path& path) { m_path = path; if (!m_path.empty()) { m_status = ROUTE_SOLVED; m_current = m_path.begin(); m_startNode = m_path.front(); m_endNode = m_path.back(); } if (!isMultiCell()) { m_replanned = false; } m_walked = 1; } Path Route::getPath() { return m_path; } void Route::cutPath(uint32_t length) { if (length == 0) { if (!m_path.empty()) { m_startNode = *m_current; m_endNode = *m_current; m_path.clear(); m_current = m_path.end(); } m_status = ROUTE_CREATED; m_walked = 1; m_replanned = true; return; } else if (length >= m_path.size()) { return; } uint32_t newend = m_walked + length - 1; if (newend > m_path.size()) { return; } m_path.resize(newend); m_endNode = m_path.back(); m_replanned = true; } void Route::setReplanned(bool replanned) { m_replanned = replanned; } bool Route::isReplanned() { return m_replanned; } uint32_t Route::getPathLength() { return m_path.size(); } uint32_t Route::getWalkedLength() { return m_walked; } void Route::setSessionId(int32_t id) { m_sessionId = id; } int32_t Route::getSessionId() { return m_sessionId; } void Route::setRotation(int32_t rotation) { m_rotation = rotation; } int32_t Route::getRotation() { return m_rotation; } void Route::setCostId(const std::string& cost) { m_costId = cost; } const std::string& Route::getCostId() { return m_costId; } bool Route::isMultiCell() { if (m_object) { return m_object->isMultiObject(); } return false; } void Route::setOccupiedArea(const std::vector& area) { m_area = area; } const std::vector& Route::getOccupiedArea() { return m_area; } std::vector Route::getOccupiedCells(int32_t rotation) { if (m_object) { return m_object->getMultiObjectCoordinates(rotation); } std::vector coords; return coords; } int32_t Route::getZStepRange() { if (!m_object) { return -1; } return m_object->getZStepRange(); } bool Route::isAreaLimited() { if (m_object) { if (!m_object->getWalkableAreas().empty()) { return true; } } return false; } const std::list Route::getLimitedAreas() { std::list areas; if (m_object) { areas = m_object->getWalkableAreas(); } return areas; } void Route::setDynamicBlockerIgnored(bool ignore) { m_ignoresBlocker = ignore; } bool Route::isDynamicBlockerIgnored() { return m_ignoresBlocker; } Path Route::getBlockingPathLocations() { Path p; if (!m_path.empty()) { for (PathIterator it = m_path.begin(); it != m_path.end(); ++it) { Layer* layer = (*it).getLayer(); if (layer->cellContainsBlockingInstance((*it).getLayerCoordinates())) { p.push_back(*it); } } } return p; } void Route::setObject(Object* obj) { m_object = obj; } Object* Route::getObject() { return m_object; } } // FIFE fifengine-0.4.1/engine/core/pathfinder/route.h000066400000000000000000000217471304641216200213100ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_ROUTE_H #define FIFE_ROUTE_H // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/fifeclass.h" namespace FIFE { class Location; class Object; /** Defines different route status types for the search. * * ROUTE_CREATED means, route is created but has no path and no search. * ROUTE_SEARCHING means, route is created but has no path and it is still being sought. * ROUTE_SEARCHED means, route is created and the search completed, on the next step the route is solved. * ROUTE_SOLVED means that a path could be found. * ROUTE_FAILED means the search failed. No path could be found. */ enum RouteStatus { ROUTE_CREATED = 0, ROUTE_SEARCHING, ROUTE_SEARCHED, ROUTE_SOLVED, ROUTE_FAILED }; typedef uint8_t RouteStatusInfo; //! A path is a list with locations. Each location holds the coordinate for one cell. typedef std::list Path; /** A basic route. * Holds the path and all related infos. */ class Route : public FifeClass { public: /** Constructor * @param start A const reference to the start location. * @param end A const reference to the end/target location. */ Route(const Location& start, const Location& end); /** Destructor */ ~Route(); /** Sets route status. * @param status The seach status that should be set. */ void setRouteStatus(RouteStatusInfo status); /** Returns route status. * @return The seach status that is set. */ RouteStatusInfo getRouteStatus(); /** Sets the start location. * @param node A const reference to the start location. */ void setStartNode(const Location& node); /** Returns the start location. * @return A const reference to the start location. */ const Location& getStartNode(); /** Sets the target location. * @param node A const reference to the end location. */ void setEndNode(const Location& node); /** Returns the target location. * @return A const reference to the end location. */ const Location& getEndNode(); /** Returns current location. * @return A const reference to the currently used location. */ const Location& getCurrentNode(); /** Returns previous location. * @return A const reference to the previous location. */ const Location& getPreviousNode(); /** Returns next location. * @return A const reference to the next location. */ const Location& getNextNode(); /** Changes the position on the path. * Changes the results of getCurrentNode(), getPreviousNode() and getPreviousNode(). * @param step A integer that indicates how much steps should be walked along the path, default is one. * @return A boolean, true if the position could be changed, false otherwise e.g. at path end. */ bool walkToNextNode(int32_t step = 1); /** Gets if the end of the path was achieved. * @return A boolean, if true the end is achieved, false otherwise. */ bool reachedEnd(); /** Sets the path for the route. * @param path A const reference to the path. */ void setPath(const Path& path); /** Returns the path. * @return The path which contains all steps. */ Path getPath(); /** Cuts path after the given length. * @param length The new length of the path. */ void cutPath(uint32_t length = 1); /** Sets the route to replanned. * @param replanned A boolean that indicates if true the route is replanned, otherwise false. */ void setReplanned(bool replanned); /** Gets if the route is replanned. * @return A boolean, if true the route is replanned, otherwise false. */ bool isReplanned(); /** Returns the length of the path. * @return The path length. */ uint32_t getPathLength(); /** Returns the walked steps. * @return The number of walked steps. */ uint32_t getWalkedLength(); /** Sets the session identifier. * @param id A integer as identifier for the search session. */ void setSessionId(int32_t id); /** Returns the session identifier. * @return A integer as identifier for the search session. */ int32_t getSessionId(); /** Sets the current rotation. * @param rotation The rotation as integer. */ void setRotation(int32_t rotation); /** Returns the current rotation. * @return The rotation as integer. */ int32_t getRotation(); /** Sets cost identifier which should be used for pathfinding. * @param cost A const reference to the string that contains the identifier. */ void setCostId(const std::string& cost); /** Returns cost identifier which is used for pathfinding. * @return A const reference to the string that contains the identifier. */ const std::string& getCostId(); /** Gets if path is for a multi cell object. * @return A boolean, true if path is for multi cell, otherwise false. */ bool isMultiCell(); /** Sets occupied coordinates for multi cell object. * @param area A const reference to a vector that contains the coordinates. */ void setOccupiedArea(const std::vector& area); /** Returns occupied coordinates for multi cell object. * @return A const reference to a vector that contains the coordinates. */ const std::vector& getOccupiedArea(); /** Returns relative coordinates for multi cell object based on rotation. * @param rotation The angle which is used to determine the occupied coordinates. * @return A const reference to a vector that contains the coordinates. */ std::vector getOccupiedCells(int32_t rotation); /** Returns z-step range from object. In case it is not limited -1 is returned. * @return The z-step range as int. */ int32_t getZStepRange(); bool isAreaLimited(); const std::list getLimitedAreas(); /** Sets the route to ignore dynamic blocker. * @param ignore A boolean that indicates if true the route ignores blocker, otherwise false. */ void setDynamicBlockerIgnored(bool ignore); /** Gets if the route ignores dynamic blocker. * @return A boolean, if true the route ignores blocker, otherwise false. */ bool isDynamicBlockerIgnored(); /** Returns the blocking locations of the path. * Only useful in case the blocking ignore flag is set. * @return A location list that contains all blocking locations of the path. */ Path getBlockingPathLocations(); /** Sets the object, needed for multi cell and z-step range. * @param obj A pointer to the object. */ void setObject(Object* obj); /** Returns the object, needed for multi cell and z-step range. * @return A pointer to the object. */ Object* getObject(); private: //! path iterator typedef Path::iterator PathIterator; //! search status RouteStatusInfo m_status; //! start location Location m_startNode; //! end location Location m_endNode; //! path Path m_path; //! current position on the path PathIterator m_current; //! walked steps on the path uint32_t m_walked; //! session id of the search int32_t m_sessionId; //! current rotation int32_t m_rotation; //! is path replanned bool m_replanned; //! ignores dynamic blocker bool m_ignoresBlocker; //! used cost identifier std::string m_costId; //! occupied cells by multicell object std::vector m_area; //! pointer to multi object Object* m_object; }; } // FIFE #endif fifengine-0.4.1/engine/core/pathfinder/route.i000066400000000000000000000031541304641216200213010ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "pathfinder/route.h" %} %template(LocationList) std::list; fifengine-0.4.1/engine/core/pathfinder/routepather/000077500000000000000000000000001304641216200223305ustar00rootroot00000000000000fifengine-0.4.1/engine/core/pathfinder/routepather/multilayersearch.cpp000066400000000000000000000473041304641216200264210ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "model/metamodel/grids/cellgrid.h" #include "model/structures/layer.h" #include "model/structures/cellcache.h" #include "model/structures/cell.h" #include "model/structures/map.h" #include "pathfinder/route.h" #include "util/math/fife_math.h" #include "multilayersearch.h" namespace FIFE { MultiLayerSearch::MultiLayerSearch(Route* route, const int32_t sessionId): RoutePatherSearch(route, sessionId), m_to(route->getEndNode()), m_from(route->getStartNode()), m_startCache(m_from.getLayer()->getCellCache()), m_endCache(m_to.getLayer()->getCellCache()), m_currentCache(NULL), m_startZone(m_startCache->getCell(m_from.getLayerCoordinates())->getZone()), m_endZone(m_endCache->getCell(m_to.getLayerCoordinates())->getZone()), m_startCoordInt(m_startCache->convertCoordToInt(m_from.getLayerCoordinates())), m_lastStartCoordInt(m_startCoordInt), m_destCoordInt(m_endCache->convertCoordToInt(m_to.getLayerCoordinates())), m_lastDestCoordInt(-1), m_next(0), m_foundLast(true) { // if end zone is invalid (static blocker) then change it if (!m_endZone) { Cell* endcell = m_endCache->getCell(m_to.getLayerCoordinates()); const std::vector& neighbors = endcell->getNeighbors(); for (std::vector::const_iterator it = neighbors.begin(); it != neighbors.end(); ++it) { Zone* tmpzone = (*it)->getZone(); if (tmpzone) { m_endZone = tmpzone; if (tmpzone == m_startZone) { break; } } } } Cell* startCell = m_startCache->getCell(m_from.getLayerCoordinates()); // here we hope to find between targets // first test if target can be reached easy searchBetweenTargetsNeighbor(); // if no betweenTargets could be found we check as second the whole map if (m_betweenTargets.empty()) { searchBetweenTargetsMap(); } // if it is a protected cell it can have a second startzone if (m_betweenTargets.empty() && startCell->isZoneProtected()) { const std::vector& neighbors = startCell->getNeighbors(); for (std::vector::const_iterator it = neighbors.begin(); it != neighbors.end(); ++it) { Zone* tmpzone = (*it)->getZone(); if (tmpzone) { if (tmpzone != m_startZone) { m_startZone = tmpzone; break; } } } searchBetweenTargetsNeighbor(); if (m_betweenTargets.empty()) { searchBetweenTargetsMap(); } } // failed to find between targets, no Path can be created if (m_betweenTargets.empty()) { setSearchStatus(search_status_failed); m_route->setRouteStatus(ROUTE_FAILED); } } MultiLayerSearch::~MultiLayerSearch() { } void MultiLayerSearch::createSearchFrontier(int32_t startInt, CellCache* cache) { // reset all m_sortedFrontier.clear(); m_spt.clear(); m_sf.clear(); m_gCosts.clear(); // fill with defaults m_sortedFrontier.pushElement(PriorityQueue::value_type(startInt, 0.0)); int32_t max_index = cache->getMaxIndex(); m_spt.resize(max_index, -1); m_sf.resize(max_index, -1); m_gCosts.resize(max_index, 0.0); m_next = 0; } void MultiLayerSearch::updateSearch() { if (m_sortedFrontier.empty()) { if (!m_foundLast || m_lastDestCoordInt == m_destCoordInt || getSearchStatus() == search_status_failed) { setSearchStatus(search_status_failed); m_route->setRouteStatus(ROUTE_FAILED); return; } if (m_betweenTargets.empty()) { TransitionInfo* trans = m_currentCache->getCell(m_currentCache->convertIntToCoord(m_lastDestCoordInt))->getTransition(); if (trans) { m_lastStartCoordInt = m_endCache->convertCoordToInt(trans->m_mc); } m_currentCache = m_endCache; m_lastDestCoordInt = m_currentCache->getCell(m_to.getLayerCoordinates())->getCellId(); } else { if (m_lastDestCoordInt != -1) { TransitionInfo* trans = m_currentCache->getCell(m_currentCache->convertIntToCoord(m_lastDestCoordInt))->getTransition(); if (trans) { m_lastStartCoordInt = trans->m_layer->getCellCache()->convertCoordToInt(trans->m_mc); } } m_currentCache = m_betweenTargets.front()->getLayer()->getCellCache(); m_lastDestCoordInt = m_betweenTargets.front()->getCellId(); m_betweenTargets.pop_front(); m_foundLast = false; } createSearchFrontier(m_lastStartCoordInt, m_currentCache); } PriorityQueue::value_type topvalue = m_sortedFrontier.getPriorityElement(); m_sortedFrontier.popElement(); m_next = topvalue.first; m_spt[m_next] = m_sf[m_next]; // found destination if (m_destCoordInt == m_next && m_betweenTargets.empty()) { if (m_endCache == m_currentCache) { setSearchStatus(search_status_complete); m_route->setRouteStatus(ROUTE_SEARCHED); return; } } // found between target if (m_lastDestCoordInt == m_next) { calcPathStep(); m_sortedFrontier.clear(); m_foundLast = true; return; } ModelCoordinate destCoord = m_currentCache->convertIntToCoord(m_lastDestCoordInt); ModelCoordinate nextCoord = m_currentCache->convertIntToCoord(m_next); CellGrid* grid = m_currentCache->getLayer()->getCellGrid(); Cell* nextCell = m_currentCache->getCell(nextCoord); if (!nextCell) { return; } int32_t cellZ = nextCell->getLayerCoordinates().z; int32_t maxZ = m_route->getZStepRange(); bool zLimited = maxZ != -1; uint8_t blockerThreshold = m_ignoreDynamicBlockers ? 2 : 1; bool limitedArea = m_route->isAreaLimited(); const std::vector& adjacents = nextCell->getNeighbors(); if (adjacents.empty()) { return; } for (std::vector::const_iterator i = adjacents.begin(); i != adjacents.end(); ++i) { if (*i == NULL) { continue; } if ((*i)->getLayer()->getCellCache() != m_currentCache) { continue; } int32_t adjacentInt = (*i)->getCellId(); if (m_sf[adjacentInt] != -1 && m_spt[adjacentInt] != -1) { continue; } if (zLimited && ABS(cellZ-(*i)->getLayerCoordinates().z) > maxZ) { continue; } bool blocker = (*i)->getCellType() > blockerThreshold; ModelCoordinate adjacentCoord = (*i)->getLayerCoordinates(); if ((adjacentInt == m_next || blocker) && adjacentInt != m_destCoordInt) { if (blocker && m_multicell) { std::vector::iterator bc_it = std::find(m_ignoredBlockers.begin(), m_ignoredBlockers.end(), *i); if (bc_it == m_ignoredBlockers.end()) { continue; } } else { continue; } } // search if there are blockers which could block multicell object if (m_multicell) { blocker = false; Location currentLoc(nextCell->getLayer()); currentLoc.setLayerCoordinates(nextCell->getLayerCoordinates()); Location adjacentLoc((*i)->getLayer()); adjacentLoc.setLayerCoordinates((*i)->getLayerCoordinates()); int32_t rotation = getAngleBetween(currentLoc, adjacentLoc); std::vector coords = grid->toMultiCoordinates(adjacentLoc.getLayerCoordinates(), m_route->getOccupiedCells(rotation)); std::vector::iterator coord_it = coords.begin(); for (; coord_it != coords.end(); ++coord_it) { Cell* cell = m_currentCache->getCell(*coord_it); if (cell) { if (cell->getCellType() > blockerThreshold) { std::vector::iterator bc_it = std::find(m_ignoredBlockers.begin(), m_ignoredBlockers.end(), cell); if (bc_it == m_ignoredBlockers.end()) { blocker = true; break; } } if (limitedArea) { // check if cell is on one of the areas bool sameAreas = false; const std::list areas = m_route->getLimitedAreas(); std::list::const_iterator area_it = areas.begin(); for (; area_it != areas.end(); ++area_it) { if (m_currentCache->isCellInArea(*area_it, cell)) { sameAreas = true; break; } } if (!sameAreas) { blocker = true; break; } } } else { blocker = true; break; } } if (blocker) { continue; } } else if (limitedArea) { // check if cell is on one of the areas bool sameAreas = false; const std::list areas = m_route->getLimitedAreas(); std::list::const_iterator area_it = areas.begin(); for (; area_it != areas.end(); ++area_it) { if (m_currentCache->isCellInArea(*area_it, *i)) { sameAreas = true; break; } } if (!sameAreas) { continue; } } double gCost = m_gCosts[m_next]; if (m_specialCost) { gCost += m_currentCache->getAdjacentCost(adjacentCoord ,nextCoord, m_route->getCostId()); } else { gCost += m_currentCache->getAdjacentCost(adjacentCoord ,nextCoord); } double hCost = grid->getHeuristicCost(adjacentCoord, destCoord); if (m_sf[adjacentInt] == -1) { m_sortedFrontier.pushElement(PriorityQueue::value_type(adjacentInt, gCost + hCost)); m_gCosts[adjacentInt] = gCost; m_sf[adjacentInt] = m_next; } else if (gCost < m_gCosts[adjacentInt] && m_spt[adjacentInt] == -1) { m_sortedFrontier.changeElementPriority(adjacentInt, gCost + hCost); m_gCosts[adjacentInt] = gCost; m_sf[adjacentInt] = m_next; } } } void MultiLayerSearch::calcPathStep() { int32_t current = m_lastDestCoordInt; int32_t end = m_lastStartCoordInt; Location newnode(m_currentCache->getLayer()); Path path; // This assures that the agent always steps into the center of the target cell. newnode.setLayerCoordinates(m_currentCache->convertIntToCoord(current)); path.push_back(newnode); while(current != end) { if (m_spt[current] < 0 ) { // This is when the size of m_spt can not handle the distance of the location setSearchStatus(search_status_failed); m_route->setRouteStatus(ROUTE_FAILED); break; } current = m_spt[current]; newnode.setLayerCoordinates(m_currentCache->convertIntToCoord(current)); path.push_front(newnode); } // set exact start coordinates if (m_path.empty()) { path.front().setExactLayerCoordinates(m_from.getExactLayerCoordinatesRef()); } m_path.insert(m_path.end(), path.begin(), path.end()); } void MultiLayerSearch::calcPath() { int32_t current = m_lastDestCoordInt; int32_t end = m_lastStartCoordInt; Location newnode(m_currentCache->getLayer()); Path path; // This assures that the agent always steps into the center of the target cell. newnode.setLayerCoordinates( m_currentCache->getCell(m_currentCache->convertIntToCoord(current))->getLayerCoordinates()); path.push_back(newnode); while(current != end) { if (m_spt[current] < 0 ) { // This is when the size of m_spt can not handle the distance of the location setSearchStatus(search_status_failed); m_route->setRouteStatus(ROUTE_FAILED); break; } current = m_spt[current]; newnode.setLayerCoordinates(m_currentCache->convertIntToCoord(current)); path.push_front(newnode); } m_path.insert(m_path.end(), path.begin(), path.end()); m_route->setPath(m_path); } void MultiLayerSearch::searchBetweenTargetsNeighbor() { std::vector cells = m_startCache->getTransitionCells(m_endCache->getLayer()); if (!cells.empty()) { Location loc; Cell* cell = NULL; // find nearest portal (air-line distance) for (std::vector::iterator it = cells.begin(); it != cells.end(); ++it) { if ((*it)->getZone() != m_startZone) { continue; } TransitionInfo* trans = (*it)->getTransition(); Cell* transTarget = trans->m_layer->getCellCache()->getCell(trans->m_mc); if (transTarget->getZone() != m_endZone) { continue; } if (!cell) { loc.setLayer((*it)->getLayer()); loc.setLayerCoordinates((*it)->getLayerCoordinates()); cell = *it; continue; } Location temp((*it)->getLayer()); temp.setLayerCoordinates((*it)->getLayerCoordinates()); Location loc1(cell->getTransition()->m_layer); loc1.setLayerCoordinates(cell->getTransition()->m_mc); Location loc2((*it)->getTransition()->m_layer); loc2.setLayerCoordinates((*it)->getTransition()->m_mc); double temp_distance = temp.getLayerDistanceTo(m_from) + loc2.getLayerDistanceTo(m_to); double current_distance = loc.getLayerDistanceTo(m_from) + loc1.getLayerDistanceTo(m_to); if (current_distance > temp_distance) { loc = temp; cell = *it; } } if (cell) { m_betweenTargets.push_back(cell); } } } void MultiLayerSearch::searchBetweenTargetsMap() { // in case no transition is there then return std::vector endTransCells; std::vector tmpTransCells = m_endCache->getTransitionCells(); std::vector::iterator tcell_it = tmpTransCells.begin(); for (; tcell_it != tmpTransCells.end(); ++tcell_it) { Zone* zone = (*tcell_it)->getZone(); if (zone == m_endZone) { endTransCells.push_back(*tcell_it); } } if (endTransCells.empty()) { return; } // in case no transition is there then return std::vector startTransCells; tmpTransCells = m_startCache->getTransitionCells(); tcell_it = tmpTransCells.begin(); for (; tcell_it != tmpTransCells.end(); ++tcell_it) { Zone* zone = (*tcell_it)->getZone(); if (zone == m_startZone) { startTransCells.push_back(*tcell_it); } } if (startTransCells.empty()) { return; } // fetch zones std::vector zones; const std::list& allLayers = m_from.getLayer()->getMap()->getLayers(); std::list::const_iterator lay_it = allLayers.begin(); for (; lay_it != allLayers.end(); ++lay_it) { CellCache* cache = (*lay_it)->getCellCache(); if (cache) { const std::vector& tmp_zones = cache->getZones(); zones.insert(zones.end(), tmp_zones.begin(), tmp_zones.end()); } } // sort zones by iterator distance std::map zoneDistanceMap; std::map distanceZoneMap; for (std::vector::iterator zit = zones.begin(); zit != zones.end(); ++zit) { // pseudo distance int32_t distance = std::distance(zones.begin(), zit); zoneDistanceMap.insert(std::pair(*zit, distance)); distanceZoneMap.insert(std::pair(distance, *zit)); } // start zone int32_t startZone = zoneDistanceMap.find(m_startZone)->second; // target zone int32_t targetZone = zoneDistanceMap.find(m_endZone)->second; // Priority queue to sort zones PriorityQueue sortedfrontier; // add start zone sortedfrontier.pushElement(PriorityQueue::value_type(startZone, 0.0)); // max size zones int32_t max_index = zones.size(); // shortest tree std::vector spt(max_index, -1); // search frontier std::vector sf(max_index, -1); // costs std::vector costs(max_index, 0.0); bool found = false; while (!found) { if (sortedfrontier.empty()) { break; } PriorityQueue::value_type topvalue = sortedfrontier.getPriorityElement(); sortedfrontier.popElement(); int32_t next = topvalue.first; spt[next] = sf[next]; // found destination zone if (targetZone == next) { found = true; break; } Zone* nextZone = distanceZoneMap.find(next)->second; // look in zone for tranistions std::vector transCells = nextZone->getTransitionCells(); if (transCells.empty()) { continue; } std::vector::iterator cell_it = transCells.begin(); for (; cell_it != transCells.end(); ++cell_it) { // transition info TransitionInfo* trans = (*cell_it)->getTransition(); // target transition cache CellCache* transCache = trans->m_layer->getCellCache(); // target transition cell Cell* transCelle = transCache->getCell(trans->m_mc); // next zone as int int32_t nextInt = zoneDistanceMap.find(transCelle->getZone())->second; if (nextInt == next && nextInt != targetZone) { continue; } // iterator distance as cost double cost = costs[next] + static_cast(ABS(nextInt-startZone)); if (sf[nextInt] == -1) { sortedfrontier.pushElement(PriorityQueue::value_type(nextInt, cost)); costs[nextInt] = cost; sf[nextInt] = next; } else if (cost < costs[nextInt] && spt[nextInt] == -1) { sortedfrontier.changeElementPriority(nextInt, cost); costs[nextInt] = cost; sf[nextInt] = next; } } } // startZone to endZone could be solved if (found) { // fetch sorted zones int32_t current = targetZone; int32_t end = startZone; std::list betweenZones; Zone* tempZone = distanceZoneMap.find(current)->second; betweenZones.push_back(tempZone); while(current != end) { if (spt[current] < 0 ) { return; } current = spt[current]; tempZone = distanceZoneMap.find(current)->second; betweenZones.push_front(tempZone); } // so here we fetch the transistions Location lastLoc = m_from; for (std::list::iterator lit = betweenZones.begin(); lit != betweenZones.end(); ++lit) { ++lit; if (lit == betweenZones.end()) { break; } Zone* nextZone = *lit; --lit; Zone* currentZone = *lit; std::vector tempCells = currentZone->getTransitionCells(); if (tempCells.empty()) { continue; } Cell* transCell = NULL; double nextCost = 0.0; Location newLoc = lastLoc; for (std::vector::iterator cit = tempCells.begin(); cit != tempCells.end(); ++cit) { Cell* nextCell = *cit; TransitionInfo* nextTrans = nextCell->getTransition(); Cell* transTargetCell = nextTrans->m_layer->getCellCache()->getCell(nextTrans->m_mc); // skip wrong transitions if (nextZone != transTargetCell->getZone()) { continue; } // nearest transistion (air-line distance) Location tmpLoc((*cit)->getLayer()); tmpLoc.setLayerCoordinates((*cit)->getLayerCoordinates()); double locCost = lastLoc.getLayerDistanceTo(tmpLoc); if (!transCell || locCost < nextCost) { nextCost = locCost; transCell = *cit; newLoc.setLayer(transTargetCell->getLayer()); newLoc.setLayerCoordinates(transTargetCell->getLayerCoordinates()); } } // found valid transition cell if (transCell) { m_betweenTargets.push_back(transCell); lastLoc = newLoc; } } } } } fifengine-0.4.1/engine/core/pathfinder/routepather/multilayersearch.h000066400000000000000000000107611304641216200260630ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_PATHFINDER_MULTILAYERSEARCH #define FIFE_PATHFINDER_MULTILAYERSEARCH // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/structures/priorityqueue.h" #include "routepathersearch.h" namespace FIFE { class CellCache; class Route; class Zone; /** MultiLayerSearch using A* */ class MultiLayerSearch: public RoutePatherSearch { public: /** Constructor * * @param route A pointer to the route for which a path should be searched. * @param sessionId A integer containing the session id for this search. */ MultiLayerSearch(Route* route, const int32_t sessionId); /** Destructor */ ~MultiLayerSearch(); /** Updates the search. * * Each update checks all neighbors of the last checked coordinate and selects the most favorable. */ void updateSearch(); /** Calculates final path. * * If the search is successful then a path is created. */ void calcPath(); private: /** Creates or resets the SearchFrontier. * * @param startInt The start coordinate as integer identifier. * @param cache A pointer to the start CellCache. */ void createSearchFrontier(int32_t startInt, CellCache* cache); /** Calculates path parts per layer. * */ void calcPathStep(); /** Fetch targets from neighbor layers. * */ void searchBetweenTargetsNeighbor(); /** Fetch targets from map. * */ void searchBetweenTargetsMap(); //! A location object representing where the search started. Location m_to; //! A location object representing where the search ended. Location m_from; //! A pointer to the start CellCache. CellCache* m_startCache; //! A pointer to the end CellCache. CellCache* m_endCache; //! A pointer to the currently used CellCache. CellCache* m_currentCache; // A pointer to the start Zone. Zone* m_startZone; // A pointer to the end Zone. Zone* m_endZone; //! The start coordinate as an int32_t. int32_t m_startCoordInt; //! The last used start coordinate as an int32_t. int32_t m_lastStartCoordInt; //! The destination coordinate as an int32_t. int32_t m_destCoordInt; //! The last used destination coordinate as an int32_t. int32_t m_lastDestCoordInt; //! The next coordinate to check out. int32_t m_next; //! The shortest path tree. std::vector m_spt; //! The search frontier. std::vector m_sf; //! A table to hold the costs. std::vector m_gCosts; //! Priority queue to hold nodes on the sf in order. PriorityQueue m_sortedFrontier; //! List of targets that need to be solved to reach the real target. std::list m_betweenTargets; //! Indicates if last between target could be achieved bool m_foundLast; //! Path to which all steps are added. Path m_path; }; } #endif fifengine-0.4.1/engine/core/pathfinder/routepather/routepather.cpp000066400000000000000000000345641304641216200254120ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "model/metamodel/grids/cellgrid.h" #include "model/structures/instance.h" #include "model/structures/layer.h" #include "model/structures/cellcache.h" #include "util/math/angles.h" #include "pathfinder/route.h" #include "routepather.h" #include "routepathersearch.h" #include "singlelayersearch.h" #include "multilayersearch.h" namespace FIFE { int32_t RoutePather::makeSessionId() { return m_nextFreeSessionId++; } bool RoutePather::locationsEqual(const Location& a, const Location& b) { bool sameLayer = a.getLayer() == b.getLayer(); const ModelCoordinate a_coord = a.getLayerCoordinates(); const ModelCoordinate b_coord = b.getLayerCoordinates(); return (a_coord.x == b_coord.x) && (a_coord.y == b_coord.y) && sameLayer; } void RoutePather::update() { int32_t ticksleft = m_maxTicks; while (ticksleft > 0) { if(m_sessions.empty()) { break; } RoutePatherSearch* prioritySession = m_sessions.getPriorityElement().first; if(!sessionIdValid(prioritySession->getSessionId())) { delete prioritySession; m_sessions.popElement(); continue; } prioritySession->updateSearch(); if (prioritySession->getSearchStatus() == RoutePatherSearch::search_status_complete) { const int32_t sessionId = prioritySession->getSessionId(); prioritySession->calcPath(); Route* route = prioritySession->getRoute(); if (route->getRouteStatus() == ROUTE_SOLVED) { invalidateSessionId(sessionId); delete prioritySession; m_sessions.popElement(); } } else if (prioritySession->getSearchStatus() == RoutePatherSearch::search_status_failed) { const int32_t sessionId = prioritySession->getSessionId(); invalidateSessionId(sessionId); delete prioritySession; m_sessions.popElement(); } --ticksleft; } } bool RoutePather::cancelSession(const int32_t sessionId) { if (sessionId >= 0) { return invalidateSessionId(sessionId); } return false; } void RoutePather::addSessionId(const int32_t sessionId) { m_registeredSessionIds.push_back(sessionId); } bool RoutePather::sessionIdValid(const int32_t sessionId) { for(SessionList::const_iterator i = m_registeredSessionIds.begin(); i != m_registeredSessionIds.end(); ++i) { if((*i) == sessionId) { return true; } } return false; } bool RoutePather::invalidateSessionId(const int32_t sessionId) { for(SessionList::iterator i = m_registeredSessionIds.begin(); i != m_registeredSessionIds.end(); ++i) { if((*i) == sessionId) { m_registeredSessionIds.erase(i); return true; } } return false; } Route* RoutePather::createRoute(const Location& start, const Location& end, bool immediate, const std::string& costId) { Route* route = new Route(start, end); if (costId != "") { route->setCostId(costId); } if (immediate) { if (!solveRoute(route, MEDIUM_PRIORITY, true)) { route->setRouteStatus(ROUTE_FAILED); } return route; } return route; } bool RoutePather::solveRoute(Route* route, int32_t priority, bool immediate) { if (sessionIdValid(route->getSessionId())) { return false; } const Location& start = route->getStartNode(); const Location& end = route->getEndNode(); if (locationsEqual(start, end)) { return false; } CellCache* startCache = start.getLayer()->getCellCache(); CellCache* endCache = end.getLayer()->getCellCache(); if (!startCache || !endCache) { return false; } if (!startCache->isInCellCache(start) || !endCache->isInCellCache(end)) { return false; } Cell* startCell = startCache->getCell(start.getLayerCoordinates()); Cell* endCell = endCache->getCell(end.getLayerCoordinates()); bool multilayer = startCache != endCache; if (!multilayer) { Zone* startZone = startCell->getZone(); Zone* endZone = endCell->getZone(); if (startZone != endZone) { // look for special cases (start is zone border or end is static blocker) if (!endZone || startCell->isZoneProtected()) { bool found = false; const std::vector& neighbors = endCell->getNeighbors(); for (std::vector::const_iterator it = neighbors.begin(); it != neighbors.end(); ++it) { Zone* tmpZone = (*it)->getZone(); if (tmpZone) { endZone = tmpZone; if (tmpZone == startZone) { found = true; break; } } } if (!found && startCell->isZoneProtected()) { const std::vector& neighbors = startCell->getNeighbors(); for (std::vector::const_iterator it = neighbors.begin(); it != neighbors.end(); ++it) { Zone* tmpZone = (*it)->getZone(); if (tmpZone) { if (tmpZone == startZone) { endZone = tmpZone; break; } } } } } // target and all neighbors are static blockers if (!endZone) { return false; } // same CellCache but different zones if (startZone != endZone) { multilayer = true; } } } if (route->isAreaLimited()) { // check if target or neighbors are on one of the areas bool sameAreas = false; const std::list areas = route->getLimitedAreas(); std::list::const_iterator area_it = areas.begin(); for (; area_it != areas.end(); ++area_it) { if (endCache->isCellInArea(*area_it, endCell)) { sameAreas = true; break; } } if (!sameAreas) { const std::vector& neighbors = endCell->getNeighbors(); if (neighbors.empty()) { return false; } area_it = areas.begin(); for (; area_it != areas.end(); ++area_it) { std::vector::const_iterator neigh_it = neighbors.begin(); for (; neigh_it != neighbors.end(); ++neigh_it) { if (endCache->isCellInArea(*area_it, *neigh_it)) { sameAreas = true; break; } } } } if (!sameAreas) { return false; } } int32_t sessionId = route->getSessionId(); if (sessionId == -1) { sessionId = makeSessionId(); route->setSessionId(sessionId); } RoutePatherSearch* newSearch; if (multilayer) { newSearch = new MultiLayerSearch(route, sessionId); } else { newSearch = new SingleLayerSearch(route, sessionId); } if (immediate) { while (newSearch->getSearchStatus() != RoutePatherSearch::search_status_complete) { newSearch->updateSearch(); if (newSearch->getSearchStatus() == RoutePatherSearch::search_status_failed) { route->setRouteStatus(ROUTE_FAILED); break; } } if (newSearch->getSearchStatus() == RoutePatherSearch::search_status_complete) { newSearch->calcPath(); route->setRouteStatus(ROUTE_SOLVED); } delete newSearch; return true; } m_sessions.pushElement(SessionQueue::value_type(newSearch, priority)); addSessionId(sessionId); return true; } bool RoutePather::followRoute(const Location& current, Route* route, double speed, Location& nextLocation) { Path path = route->getPath(); if (path.empty()) { return false; } if (Mathd::Equal(speed, 0.0)) { return true; } bool nextBlocker = false; Location currentNode = route->getCurrentNode(); bool multiCell = route->isMultiCell(); if (!locationsEqual(current, currentNode)) { // special blocker check for multicell if (multiCell) { int32_t oldRotation = route->getRotation(); // old coordinates std::vector oldCoords = current.getLayer()->getCellGrid()-> toMultiCoordinates(current.getLayerCoordinates(), route->getOccupiedCells(route->getRotation())); oldCoords.push_back(current.getLayerCoordinates()); route->setRotation(getAngleBetween(current, currentNode)); // new coordinates std::vector newCoords = currentNode.getLayer()->getCellGrid()-> toMultiCoordinates(currentNode.getLayerCoordinates(), route->getOccupiedCells(route->getRotation())); newCoords.push_back(currentNode.getLayerCoordinates()); std::vector::const_iterator nco_it = newCoords.begin(); for (; nco_it != newCoords.end(); ++nco_it) { if (currentNode.getLayer()->cellContainsBlockingInstance(*nco_it)) { bool found = false; std::vector::const_iterator oco_it = oldCoords.begin(); for (; oco_it != oldCoords.end(); ++oco_it) { if (*oco_it == *nco_it) { found = true; break; } } // if we have a blocker that is not part of the object if (!found) { nextBlocker = true; } } if (nextBlocker) { route->setRotation(oldRotation); break; } } } else { route->setRotation(getAngleBetween(current, currentNode)); if (currentNode.getLayer()->cellContainsBlockingInstance(currentNode.getLayerCoordinates())) { nextBlocker = true; } } } // set facinglocation ExactModelCoordinate instancePos = current.getMapCoordinates(); // if next node is blocker if (nextBlocker) { nextLocation.setLayerCoordinates(FIFE::doublePt2intPt(current.getExactLayerCoordinates())); return false; } // calculate distance CellCache* nodeCache = currentNode.getLayer()->getCellCache(); CellGrid* nodeGrid = currentNode.getLayer()->getCellGrid(); ExactModelCoordinate targetPos = currentNode.getMapCoordinates(); Cell* tmpCell = nodeCache->getCell(currentNode.getLayerCoordinates()); if (tmpCell) { targetPos.z = tmpCell->getLayerCoordinates().z + nodeGrid->getZShift(); } double dx = (targetPos.x - instancePos.x) * nodeGrid->getXScale(); double dy = (targetPos.y - instancePos.y) * nodeGrid->getYScale(); double distance = Mathd::Sqrt(dx * dx + dy * dy); // cell speed multi double multi; if (nodeCache->getCellSpeedMultiplier(current.getLayerCoordinates(), multi)) { speed *= multi; } else { speed *= nodeCache->getDefaultSpeedMultiplier(); } bool pop = false; if (speed > distance) { speed = distance; pop = true; } if (!Mathd::Equal(distance, 0.0) && !pop) { Location prevNode = route->getPreviousNode(); CellCache* prevCache = prevNode.getLayer()->getCellCache(); CellGrid* prevGrid = prevNode.getLayer()->getCellGrid(); ExactModelCoordinate prevPos = route->getPreviousNode().getMapCoordinates(); tmpCell = prevCache->getCell(prevNode.getLayerCoordinates()); if (tmpCell) { prevPos.z = tmpCell->getLayerCoordinates().z + prevGrid->getZShift(); } double cell_dz = (targetPos.z - prevPos.z); if (!Mathd::Equal(cell_dz, 0.0)) { double cell_dx = (targetPos.x - prevPos.x); double cell_dy = (targetPos.y - prevPos.y); double cell_distance = Mathd::Sqrt(cell_dx * cell_dx + cell_dy * cell_dy); if (cell_dz > 0) { if (locationsEqual(current, currentNode)) { instancePos.z = targetPos.z; } else { instancePos.z = prevPos.z + cell_dz - 4*(0.5-distance/cell_distance)*(0.5-distance/cell_distance) * cell_dz; } } else if (cell_dz < 0) { if (locationsEqual(current, currentNode)) { instancePos.z = prevPos.z + 4*(0.5-distance/cell_distance)*(0.5-distance/cell_distance) * cell_dz; } } } instancePos.x += (dx / distance) * speed; instancePos.y += (dy / distance) * speed; } else { pop = true; } // pop to next node if (pop) { nextLocation.setMapCoordinates(targetPos); // if cw is false we have reached the end bool cw = route->walkToNextNode(); // check transistion CellCache* cache = nextLocation.getLayer()->getCellCache(); if (cache) { Cell* cell = cache->getCell(nextLocation.getLayerCoordinates()); if (cell) { TransitionInfo* ti = cell->getTransition(); if (ti) { // "beam" if it is a part of path if (cw && !cell->getLayer()->getCellGrid()->isAccessible(nextLocation.getLayerCoordinates(), route->getCurrentNode().getLayerCoordinates())) { if (ti->m_difflayer) { nextLocation.setLayer(ti->m_layer); } nextLocation.setLayerCoordinates(ti->m_mc); return cw; // immediate "beam" } else if (ti->m_immediate) { if (ti->m_difflayer) { nextLocation.setLayer(ti->m_layer); } nextLocation.setLayerCoordinates(ti->m_mc); route->setEndNode(nextLocation); return false; } } } } if (cw && !multiCell && currentNode.getLayer()->cellContainsBlockingInstance(route->getCurrentNode().getLayerCoordinates())) { //set facing to end blocker Location facing = route->getCurrentNode(); route->setRotation(getAngleBetween(current, facing)); return false; } return cw; } nextLocation.setMapCoordinates(instancePos); return true; } void RoutePather::setMaxTicks(int32_t ticks) { m_maxTicks = ticks; } int32_t RoutePather::getMaxTicks() { return m_maxTicks; } std::string RoutePather::getName() const { return "RoutePather"; } } fifengine-0.4.1/engine/core/pathfinder/routepather/routepather.h000066400000000000000000000153571304641216200250560ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_PATHFINDER_ROUTEPATHER #define FIFE_PATHFINDER_ROUTEPATHER // Standard C++ library includes #include #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "model/metamodel/ipather.h" #include "model/structures/location.h" #include "util/structures/priorityqueue.h" namespace FIFE { class CellCache; class RoutePatherSearch; class Route; class RoutePather : public IPather { public: /** Constructor. * */ RoutePather() : m_nextFreeSessionId(0), m_maxTicks(1000) { } /** Creates a route between the start and end location that needs be solved. * * @param start A const reference to the start location. * @param end A const reference to the target location. * @param immediate A optional boolean, if true the route bypass the max. ticks limit and solves the path immediately, otherwise false. * @param costId A const reference to the string that holds the cost identifier. You can use it optional then this cost id is used instead of the default cost. */ Route* createRoute(const Location& start, const Location& end, bool immediate = false, const std::string& costId = ""); /** Solves the route to create a path. * * @param route A pointer to the route which should be solved. * @param priority The priority to assign to search (high are pushed to the front of the queue). @see PriorityType * @param immediate A optional boolean, if true the route bypass the max. ticks limit and solves the path immediately, otherwise false. * @return A boolean, if true the route could be solved, otherwise false. */ bool solveRoute(Route* route, int32_t priority = MEDIUM_PRIORITY, bool immediate = false); /** Follows the path of the route. * * @param current A const reference to the current location. * @param route A pointer to the route which should be followed. * @param speed A double which holds the speed. * @param nextLocation A reference to the next location returned by the pather. * @return A boolean, if true the route could be followed, otherwise false. */ bool followRoute(const Location& current, Route* route, double speed, Location& nextLocation); /** Updates the route pather. * * Advances the active search by so many time steps. If the search * completes then this function pops it from the active session list and * continues updating the next session until it runs out of time. * @see setMaxTicks() */ void update(); /** Cancels a session. * * Cancels a route pather session. Determines if it is an active session * or not and acts accordingly. * * @param sessionId The id of the session to cancel. * @return True if the session could be canceled false otherwise. */ bool cancelSession(const int32_t sessionId); /** Sets maximal ticks (update steps) to solve routes. @see update() * @param ticks A integer which holds the steps. default is 1000 */ void setMaxTicks(int32_t ticks); /** Returns maximal ticks (update steps) to solve routes. @see update() * @return A integer which holds the steps. default is 1000 */ int32_t getMaxTicks(); /** Returns name of the pathfinder. * @return A string that contains the name of the pathfinder. */ std::string getName() const; private: //! A path is a list with locations. Each location holds the coordinate for one cell. typedef std::list Path; //! Holds the searches and their priority. typedef PriorityQueue SessionQueue; //! Holds the sessions. typedef std::list SessionList; /** Adds a session id to the session map. * * Stores the given session id in the session map. * * @param sessionId The session id to store. */ void addSessionId(const int32_t sessionId); /** Makes a new session id. * * @return The new session id. */ int32_t makeSessionId(); /** Are two locations equivalent from the perspective of pathing (same layer coordinates and layer). * * @param a A const reference to the first location to check. * @param b A const reference to the second location to check. * @return A boolean, true if the locations are equal, false otherwise. */ bool locationsEqual(const Location& a, const Location& b); /** Determines if the given session Id is valid. * * Searches the session list to determine if a search with the given session id * has been registered. * @param sessionId The session id to check. * @return true if one has, false otherwise. */ bool sessionIdValid(const int32_t sessionId); /** Removes a session id from the session map. * * @param sessionId The session id to remove. * @return True if the sessionId could be removed, false otherwise. */ bool invalidateSessionId(const int32_t sessionId); //! A map of currently running sessions (searches). SessionQueue m_sessions; //! A list of session ids that have been registered. SessionList m_registeredSessionIds; //! The next free session id. int32_t m_nextFreeSessionId; //! The maximum number of ticks allowed. int32_t m_maxTicks; }; } #endif fifengine-0.4.1/engine/core/pathfinder/routepather/routepather.i000066400000000000000000000034461304641216200250530ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "pathfinder/routepather/routepather.h" %} %include "model/metamodel/ipather.i" namespace FIFE { %feature("notabstract") RoutePather; class RoutePather : public IPather { public: RoutePather(); virtual ~RoutePather(); std::string getName() const; }; } fifengine-0.4.1/engine/core/pathfinder/routepather/routepathersearch.cpp000066400000000000000000000061751304641216200265750ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "model/metamodel/grids/cellgrid.h" #include "model/structures/layer.h" #include "model/structures/cellcache.h" #include "model/structures/cell.h" #include "pathfinder/route.h" #include "util/math/fife_math.h" #include "routepathersearch.h" namespace FIFE { RoutePatherSearch::RoutePatherSearch(Route* route, const int32_t sessionId): m_route(route), m_multicell(route->isMultiCell()), m_sessionId(sessionId), m_status(search_status_incomplete) { m_route->setRouteStatus(ROUTE_SEARCHING); m_specialCost = route->getCostId() != ""; m_ignoreDynamicBlockers = route->isDynamicBlockerIgnored(); if (m_multicell) { Location loc = route->getStartNode(); std::vector coords = route->getOccupiedArea(); std::vector::const_iterator co_it = coords.begin(); for (; co_it != coords.end(); ++co_it) { Cell* cell = loc.getLayer()->getCellCache()->getCell(*co_it); if (cell) { m_ignoredBlockers.push_back(cell); } } } } RoutePatherSearch::~RoutePatherSearch() { } int32_t RoutePatherSearch::getSessionId() const { return m_sessionId; } int32_t RoutePatherSearch::getSearchStatus() const { return m_status; } Route* RoutePatherSearch::getRoute() { return m_route; } void RoutePatherSearch::setSearchStatus(const SearchStatus status) { m_status = status; } } fifengine-0.4.1/engine/core/pathfinder/routepather/routepathersearch.h000066400000000000000000000077251304641216200262440ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_PATHFINDER_ROUTEPATHERSEARCH #define FIFE_PATHFINDER_ROUTEPATHERSEARCH // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/structures/priorityqueue.h" namespace FIFE { class CellCache; class Route; /** RoutePatherSearch using A* * */ class RoutePatherSearch { public: /** Constructor * * @param route A pointer to the route for which a path should be searched. * @param sessionId A integer containing the session id for this search. */ RoutePatherSearch(Route* route, const int32_t sessionId); virtual ~RoutePatherSearch(); /** An enumeration of the different status the search can be in. * */ enum SearchStatus { search_status_failed, search_status_complete, search_status_incomplete }; /** Updates the search. * * Each update checks all neighbors of the last checked coordinate and selects the most favorable. */ virtual void updateSearch() = 0; /** Calculates final path. * * If the search is successful then a path is created. */ virtual void calcPath() = 0; /** Retrieves the session id. * * @return The searches session id in the pather. */ int32_t getSessionId() const; /** A small function which returns the current status of the search. * * @return An integer value representing the status, which is enumerated by this class. */ int32_t getSearchStatus() const; /** Returns the associated route for this search. * * @return A pointer to the route. */ Route* getRoute(); protected: /** Sets the current status of the search. * * @param status The status to set. * @see SearchStatus */ void setSearchStatus(const SearchStatus status); //! Pointer to route Route* m_route; //! Indicates if the search should use special costs. bool m_specialCost; //! Indicates if the route is for a multi cell object. bool m_multicell; //! Indicates if dynamic blockers should be ignored. bool m_ignoreDynamicBlockers; //! Blockers from a multi cell object which should be ignored. std::vector m_ignoredBlockers; private: //! An integer containing the session id for this search. int32_t m_sessionId; //! An enumeration of the searches current status. SearchStatus m_status; }; } #endif fifengine-0.4.1/engine/core/pathfinder/routepather/singlelayersearch.cpp000066400000000000000000000201441304641216200265410ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "model/metamodel/grids/cellgrid.h" #include "model/structures/layer.h" #include "model/structures/cellcache.h" #include "model/structures/cell.h" #include "pathfinder/route.h" #include "util/math/fife_math.h" #include "singlelayersearch.h" namespace FIFE { SingleLayerSearch::SingleLayerSearch(Route* route, const int32_t sessionId): RoutePatherSearch(route, sessionId), m_to(route->getEndNode()), m_from(route->getStartNode()), m_cellCache(m_from.getLayer()->getCellCache()), m_startCoordInt(m_cellCache->convertCoordToInt(m_from.getLayerCoordinates())), m_destCoordInt(m_cellCache->convertCoordToInt(m_to.getLayerCoordinates())), m_next(0) { m_sortedfrontier.pushElement(PriorityQueue::value_type(m_startCoordInt, 0.0)); int32_t max_index = m_cellCache->getMaxIndex(); m_spt.resize(max_index, -1); m_sf.resize(max_index, -1); m_gCosts.resize(max_index, 0.0); } SingleLayerSearch::~SingleLayerSearch() { } void SingleLayerSearch::updateSearch() { if(m_sortedfrontier.empty()) { setSearchStatus(search_status_failed); m_route->setRouteStatus(ROUTE_FAILED); return; } PriorityQueue::value_type topvalue = m_sortedfrontier.getPriorityElement(); m_sortedfrontier.popElement(); m_next = topvalue.first; m_spt[m_next] = m_sf[m_next]; // found destination if (m_destCoordInt == m_next) { setSearchStatus(search_status_complete); m_route->setRouteStatus(ROUTE_SEARCHED); return; } ModelCoordinate destCoord = m_to.getLayerCoordinates(); ModelCoordinate nextCoord = m_cellCache->convertIntToCoord(m_next); CellGrid* grid = m_cellCache->getLayer()->getCellGrid(); Cell* nextCell = m_cellCache->getCell(nextCoord); if (!nextCell) { return; } int32_t cellZ = nextCell->getLayerCoordinates().z; int32_t maxZ = m_route->getZStepRange(); bool zLimited = maxZ != -1; uint8_t blockerThreshold = m_ignoreDynamicBlockers ? 2 : 1; bool limitedArea = m_route->isAreaLimited(); const std::vector& adjacents = nextCell->getNeighbors(); for (std::vector::const_iterator i = adjacents.begin(); i != adjacents.end(); ++i) { if (*i == NULL) { continue; } if ((*i)->getLayer()->getCellCache() != m_cellCache) { continue; } int32_t adjacentInt = (*i)->getCellId(); if (m_sf[adjacentInt] != -1 && m_spt[adjacentInt] != -1) { continue; } if (zLimited && ABS(cellZ-(*i)->getLayerCoordinates().z) > maxZ) { continue; } bool blocker = (*i)->getCellType() > blockerThreshold; ModelCoordinate adjacentCoord = (*i)->getLayerCoordinates(); if ((adjacentInt == m_next || blocker) && adjacentInt != m_destCoordInt) { if (!blocker && m_multicell) { continue; } else if (!m_multicell){ continue; } } // search if there are blockers which could block multicell object if (m_multicell) { blocker = false; Location currentLoc(nextCell->getLayer()); currentLoc.setLayerCoordinates(nextCell->getLayerCoordinates()); Location adjacentLoc((*i)->getLayer()); adjacentLoc.setLayerCoordinates((*i)->getLayerCoordinates()); int32_t rotation = getAngleBetween(currentLoc, adjacentLoc); std::vector coords = grid->toMultiCoordinates(adjacentLoc.getLayerCoordinates(), m_route->getOccupiedCells(rotation)); std::vector::iterator coord_it = coords.begin(); for (; coord_it != coords.end(); ++coord_it) { Cell* cell = m_cellCache->getCell(*coord_it); if (cell) { if (cell->getCellType() > blockerThreshold) { std::vector::iterator bc_it = std::find(m_ignoredBlockers.begin(), m_ignoredBlockers.end(), cell); if (bc_it == m_ignoredBlockers.end()) { blocker = true; break; } } if (limitedArea) { // check if cell is on one of the areas bool sameAreas = false; const std::list areas = m_route->getLimitedAreas(); std::list::const_iterator area_it = areas.begin(); for (; area_it != areas.end(); ++area_it) { if (m_cellCache->isCellInArea(*area_it, cell)) { sameAreas = true; break; } } if (!sameAreas) { blocker = true; break; } } } else { blocker = true; break; } } if (blocker) { continue; } } else if (limitedArea) { // check if cell is on one of the areas bool sameAreas = false; const std::list areas = m_route->getLimitedAreas(); std::list::const_iterator area_it = areas.begin(); for (; area_it != areas.end(); ++area_it) { if (m_cellCache->isCellInArea(*area_it, *i)) { sameAreas = true; break; } } if (!sameAreas) { continue; } } double gCost = m_gCosts[m_next]; if (m_specialCost) { gCost += m_cellCache->getAdjacentCost(adjacentCoord ,nextCoord, m_route->getCostId()); } else { gCost += m_cellCache->getAdjacentCost(adjacentCoord ,nextCoord); } double hCost = grid->getHeuristicCost(adjacentCoord, destCoord); if (m_sf[adjacentInt] == -1) { m_sortedfrontier.pushElement(PriorityQueue::value_type(adjacentInt, gCost + hCost)); m_gCosts[adjacentInt] = gCost; m_sf[adjacentInt] = m_next; } else if (gCost < m_gCosts[adjacentInt] && m_spt[adjacentInt] == -1) { m_sortedfrontier.changeElementPriority(adjacentInt, gCost + hCost); m_gCosts[adjacentInt] = gCost; m_sf[adjacentInt] = m_next; } } } void SingleLayerSearch::calcPath() { int32_t current = m_destCoordInt; int32_t end = m_startCoordInt; Path path; Location newnode(m_cellCache->getLayer()); // This assures that the agent always steps into the center of the cell. newnode.setExactLayerCoordinates(FIFE::intPt2doublePt(m_to.getLayerCoordinates())); path.push_back(newnode); while(current != end) { if (m_spt[current] < 0 ) { // This is when the size of m_spt can not handle the distance of the location setSearchStatus(search_status_failed); m_route->setRouteStatus(ROUTE_FAILED); break; } current = m_spt[current]; ModelCoordinate currentCoord = m_cellCache->convertIntToCoord(current); newnode.setLayerCoordinates(currentCoord); path.push_front(newnode); } path.front().setExactLayerCoordinates(m_from.getExactLayerCoordinatesRef()); m_route->setPath(path); } } fifengine-0.4.1/engine/core/pathfinder/routepather/singlelayersearch.h000066400000000000000000000065531304641216200262160ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_PATHFINDER_SINGLELAYERSEARCH #define FIFE_PATHFINDER_SINGLELAYERSEARCH // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/structures/priorityqueue.h" #include "routepathersearch.h" namespace FIFE { class CellCache; class Route; /** SingleLayerSearch using A* */ class SingleLayerSearch: public RoutePatherSearch { public: /** Constructor * * @param route A pointer to the route for which a path should be searched. * @param sessionId A integer containing the session id for this search. */ SingleLayerSearch(Route* route, const int32_t sessionId); /** Destructor */ ~SingleLayerSearch(); /** Updates the search. * * Each update checks all neighbors of the last checked coordinate and selects the most favorable. */ void updateSearch(); /** Calculates final path. * * If the search is successful then a path is created. */ void calcPath(); private: //! A location object representing where the search started. Location m_to; //! A location object representing where the search ended. Location m_from; //! A pointer to the CellCache. CellCache* m_cellCache; //! The start coordinate as an int32_t. int32_t m_startCoordInt; //! The destination coordinate as an int32_t. int32_t m_destCoordInt; //! The next coordinate to check out. int32_t m_next; //! The shortest path tree. std::vector m_spt; //! The search frontier. std::vector m_sf; //! A table to hold the costs. std::vector m_gCosts; //! Priority queue to hold nodes on the sf in order. PriorityQueue m_sortedfrontier; }; } #endif fifengine-0.4.1/engine/core/savers/000077500000000000000000000000001304641216200171455ustar00rootroot00000000000000fifengine-0.4.1/engine/core/savers/native/000077500000000000000000000000001304641216200204335ustar00rootroot00000000000000fifengine-0.4.1/engine/core/savers/native/map/000077500000000000000000000000001304641216200212105ustar00rootroot00000000000000fifengine-0.4.1/engine/core/savers/native/map/ianimationsaver.h000066400000000000000000000042401304641216200245520ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_IANIMATION_SAVER_H #define FIFE_IANIMATION_SAVER_H // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/sharedptr.h" namespace FIFE { class IAnimationSaver { public: virtual ~IAnimationSaver() { }; /** responsible for saving the animation */ virtual void save(const std::string& filename) = 0; }; typedef SharedPtr AnimationSaverPtr; } #endif fifengine-0.4.1/engine/core/savers/native/map/ianimationsaver.i000066400000000000000000000032371304641216200245600ustar00rootroot00000000000000/************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "savers/native/map/ianimationsaver.h" %} namespace FIFE { %feature("director") IAnimationSaver; } %include "savers/native/map/ianimationsaver.h" fifengine-0.4.1/engine/core/savers/native/map/iatlassaver.h000066400000000000000000000041451304641216200237030ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_IATLAS_SAVER_H #define FIFE_IATLAS_SAVER_H // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/sharedptr.h" namespace FIFE { class IAtlasSaver { public: virtual ~IAtlasSaver() { }; /** responsible for saving the atlas */ virtual void save(const std::string& filename) = 0; }; typedef SharedPtr AtlasSaverPtr; } #endif fifengine-0.4.1/engine/core/savers/native/map/iatlassaver.i000066400000000000000000000032231304641216200237000ustar00rootroot00000000000000/************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "savers/native/map/iatlassaver.h" %} namespace FIFE { %feature("director") IAtlasSaver; } %include "savers/native/map/iatlassaver.h" fifengine-0.4.1/engine/core/savers/native/map/imapsaver.h000066400000000000000000000055121304641216200233530ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_IMAPSAVER_H_ #define FIFE_IMAPSAVER_H_ // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "iatlassaver.h" #include "iobjectsaver.h" #include "ianimationsaver.h" namespace FIFE { class Map; /** Interface class that all map savers should derive from */ class IMapSaver { public: virtual ~IMapSaver() { }; /** allows setting which object saver will be * used to save object files */ virtual void setObjectSaver(const FIFE::ObjectSaverPtr& objectSaver) = 0; /** allows setting which animation saver will be * used to save animation files */ virtual void setAnimationSaver(const FIFE::AnimationSaverPtr& animationSaver) = 0; /** allows setting which atlas saver will be * used to save atlas files */ virtual void setAtlasSaver(const FIFE::AtlasSaverPtr& atlasSaver) = 0; /** responsible for saving the map resource * used to save map files */ virtual void save(const Map& map, const std::string& filename, const std::vector& importFiles) = 0; }; } #endif fifengine-0.4.1/engine/core/savers/native/map/imapsaver.i000066400000000000000000000032161304641216200233530ustar00rootroot00000000000000/************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "savers/native/map/imapsaver.h" %} namespace FIFE { %feature("director") IMapSaver; } %include "savers/native/map/imapsaver.h" fifengine-0.4.1/engine/core/savers/native/map/iobjectsaver.h000066400000000000000000000047011304641216200240430ustar00rootroot00000000000000/************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_IOBJECTSAVER_H_ #define FIFE_IOBJECTSAVER_H_ // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/sharedptr.h" #include "ianimationsaver.h" namespace FIFE { /** Interface class that all object savers should derive from */ class IObjectSaver { public: virtual ~IObjectSaver() { }; /** allows setting which animation saver will be * used to save animation files */ virtual void setAnimationSaver(const AnimationSaverPtr& animationSaver) = 0; /** responsible for saving the object resource */ virtual void save(const std::string& filename) = 0; }; typedef SharedPtr ObjectSaverPtr; } #endif fifengine-0.4.1/engine/core/savers/native/map/iobjectsaver.i000066400000000000000000000033051304641216200240430ustar00rootroot00000000000000/************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "savers/native/map/iobjectsaver.h" #include "savers/native/map/ianimationsaver.h" %} namespace FIFE { %feature("director") IObjectSaver; } %include "savers/native/map/iobjectsaver.h" fifengine-0.4.1/engine/core/savers/native/map/mapsaver.cpp000066400000000000000000000500611304641216200235340ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "model/structures/map.h" #include "model/structures/layer.h" #include "model/structures/instance.h" #include "model/structures/cell.h" #include "model/structures/cellcache.h" #include "model/structures/trigger.h" #include "model/structures/triggercontroller.h" #include "model/metamodel/object.h" #include "model/metamodel/grids/cellgrid.h" #include "util/structures/point.h" #include "util/structures/rect.h" #include "view/visual.h" #include "view/camera.h" #include "mapsaver.h" namespace FIFE { static Logger _log(LM_NATIVE_SAVERS); MapSaver::MapSaver() { //m_objectSaver = new ObjectSaver(); //m_animationSaver = new AnimationSaver(); //m_atlasSaver = new AtlasSaver(); } MapSaver::~MapSaver() { } void MapSaver::setObjectSaver(const FIFE::ObjectSaverPtr& objectSaver) { m_objectSaver = objectSaver; } void MapSaver::setAnimationSaver(const FIFE::AnimationSaverPtr& animationSaver) { m_animationSaver = animationSaver; } void MapSaver::setAtlasSaver(const FIFE::AtlasSaverPtr& atlasSaver) { m_atlasSaver = atlasSaver; } void MapSaver::save(const Map& map, const std::string& filename, const std::vector& importFiles) { TiXmlDocument doc; // add xml declaration TiXmlDeclaration* decl = new TiXmlDeclaration("1.0", "ascii", ""); doc.LinkEndChild(decl); // add map element TiXmlElement* mapElement = new TiXmlElement("map"); mapElement->SetAttribute("id", map.getId()); mapElement->SetAttribute("format", "1.0"); doc.LinkEndChild(mapElement); for (std::vector::const_iterator iter = importFiles.begin(); iter != importFiles.end(); ++iter) { TiXmlElement* importElement = new TiXmlElement("import"); importElement->SetAttribute("file", *iter); // link to map element mapElement->LinkEndChild(importElement); } typedef std::list LayerList; LayerList layers = map.getLayers(); for (LayerList::iterator iter = layers.begin(); iter != layers.end(); ++iter) { TiXmlElement* layerElement = new TiXmlElement("layer"); CellGrid* grid = (*iter)->getCellGrid(); layerElement->SetAttribute("id", (*iter)->getId()); layerElement->SetDoubleAttribute("x_offset", grid->getXShift()); layerElement->SetDoubleAttribute("y_offset", grid->getYShift()); layerElement->SetDoubleAttribute("z_offset", grid->getZShift()); layerElement->SetDoubleAttribute("x_scale", grid->getXScale()); layerElement->SetDoubleAttribute("y_scale", grid->getYScale()); layerElement->SetDoubleAttribute("rotation", grid->getRotation()); layerElement->SetAttribute("grid_type", grid->getType()); layerElement->SetAttribute("transparency", (*iter)->getLayerTransparency()); std::string pathingStrategy; switch ((*iter)->getPathingStrategy()) { case CELL_EDGES_ONLY: { pathingStrategy = "cell_edges_only"; } break; case CELL_EDGES_AND_DIAGONALS: { pathingStrategy = "cell_edges_and_diagonals"; } break; default: { pathingStrategy = "cell_edges_only"; } break; } layerElement->SetAttribute("pathing", pathingStrategy); std::string sortingStrategy; switch ((*iter)->getSortingStrategy()) { case SORTING_CAMERA: { sortingStrategy = "camera"; } break; case SORTING_LOCATION: { sortingStrategy = "location"; } break; case SORTING_CAMERA_AND_LOCATION: { sortingStrategy = "camera_and_location"; } break; default: { sortingStrategy = "camera"; } break; } layerElement->SetAttribute("sorting", sortingStrategy); if ((*iter)->isWalkable()) { layerElement->SetAttribute("layer_type", "walkable"); } else if ((*iter)->isInteract()) { layerElement->SetAttribute("layer_type", "interact"); layerElement->SetAttribute("layer_type_id", (*iter)->getWalkableId()); } // add layer to document mapElement->LinkEndChild(layerElement); // add instances tag to document TiXmlElement* instancesElement = new TiXmlElement("instances"); layerElement->LinkEndChild(instancesElement); std::string currentNamespace = ""; typedef std::vector InstancesContainer; InstancesContainer instances = (*iter)->getInstances(); for (InstancesContainer::iterator iter = instances.begin(); iter != instances.end(); ++iter) { Object* obj = (*iter)->getObject(); // don't save part instances if (obj->isMultiPart()) { continue; } // create instance element TiXmlElement* instanceElement = new TiXmlElement("i"); if (!obj->getNamespace().empty() && currentNamespace != obj->getNamespace()) { instanceElement->SetAttribute("ns", obj->getNamespace()); // update current namespace currentNamespace = obj->getNamespace(); } if (!(*iter)->getId().empty()) { instanceElement->SetAttribute("id", (*iter)->getId()); } instanceElement->SetAttribute("o", obj->getId()); ExactModelCoordinate position = (*iter)->getLocationRef().getExactLayerCoordinates(); instanceElement->SetDoubleAttribute("x", position.x); instanceElement->SetDoubleAttribute("y", position.y); instanceElement->SetDoubleAttribute("z", position.z); instanceElement->SetAttribute("r", (*iter)->getRotation()); if ((*iter)->isBlocking()) { instanceElement->SetAttribute("blocking", (*iter)->isBlocking()); } if ((*iter)->getCellStackPosition() != obj->getCellStackPosition()) { instanceElement->SetAttribute("cellstack", (*iter)->getCellStackPosition()); } if ((*iter)->isVisitor()) { instanceElement->SetAttribute("visitor_radius", (*iter)->getVisitorRadius()); std::string shape("none"); if ((*iter)->getVisitorShape() == ITYPE_QUAD_SHAPE) { shape = "quad"; } else if ((*iter)->getVisitorShape() == ITYPE_CIRCLE_SHAPE) { shape = "circle"; } instanceElement->SetAttribute("visitor_shape", shape); } if ((*iter)->isSpecialCost()) { if (!obj->isSpecialCost()) { instanceElement->SetAttribute("cost_id", (*iter)->getCostId()); instanceElement->SetDoubleAttribute("cost", (*iter)->getCost()); } else if ((*iter)->getCostId() != obj->getCostId() || !Mathd::Equal((*iter)->getCost(), obj->getCost())) { instanceElement->SetAttribute("cost_id", (*iter)->getCostId()); instanceElement->SetDoubleAttribute("cost", (*iter)->getCost()); } } InstanceVisual* instanceVisual = (*iter)->getVisual(); instanceElement->SetAttribute("stackpos", instanceVisual->getStackPosition()); instancesElement->LinkEndChild(instanceElement); } } // add cellcaches tag to document TiXmlElement* cellcachesElement = new TiXmlElement("cellcaches"); mapElement->LinkEndChild(cellcachesElement); for (LayerList::iterator iter = layers.begin(); iter != layers.end(); ++iter) { CellCache* cache = (*iter)->getCellCache(); if (!cache) { continue; } // add cellcache tag to document TiXmlElement* cellcacheElement = new TiXmlElement("cellcache"); cellcacheElement->SetAttribute("id", (*iter)->getId()); cellcacheElement->SetDoubleAttribute("default_cost", cache->getDefaultCostMultiplier()); cellcacheElement->SetDoubleAttribute("default_speed", cache->getDefaultSpeedMultiplier()); cellcacheElement->SetAttribute("search_narrow", cache->isSearchNarrowCells()); const std::set& narrowCells = cache->getNarrowCells(); bool saveNarrows = !cache->isSearchNarrowCells() && !narrowCells.empty(); const std::vector >& cells = cache->getCells(); std::vector >::const_iterator it = cells.begin(); for (; it != cells.end(); ++it) { std::vector::const_iterator cit = (*it).begin(); for (; cit != (*it).end(); ++cit) { Cell* cell = *cit; std::list costIds = cache->getCosts(); bool costsEmpty = costIds.empty(); bool defaultCost = cell->defaultCost(); bool defaultSpeed = cell->defaultSpeed(); // check if area is part of the cell or object std::vector areaIds = cache->getCellAreas(cell); std::vector cellAreaIds; bool areasEmpty = areaIds.empty(); if (!areasEmpty) { const std::set& cellInstances = cell->getInstances(); if (!cellInstances.empty()) { std::vector::iterator area_it = areaIds.begin(); for (; area_it != areaIds.end(); ++area_it) { bool objectArea = false; std::set::const_iterator instance_it = cellInstances.begin(); for (; instance_it != cellInstances.end(); ++instance_it) { if ((*instance_it)->getObject()->getArea() == *area_it) { objectArea = true; break; } } if (!objectArea) { cellAreaIds.push_back(*area_it); } } } else { cellAreaIds = areaIds; } areasEmpty = cellAreaIds.empty(); } CellVisualEffect cve = cell->getFoWType(); bool cellVisual = cve == CELLV_CONCEALED; CellTypeInfo cti = cell->getCellType(); bool cellBlocker = (cti != CTYPE_CELL_NO_BLOCKER && cti != CTYPE_CELL_BLOCKER); TransitionInfo* transition = cell->getTransition(); bool isNarrow = false; if (saveNarrows) { std::set::const_iterator narrow_it = narrowCells.find(cell); if (narrow_it != narrowCells.end()) { isNarrow = true; } } if (costsEmpty && defaultCost && defaultSpeed && areasEmpty && cellVisual && cellBlocker && !transition && !isNarrow) { continue; } // add cell tag to document ModelCoordinate cellCoord = cell->getLayerCoordinates(); TiXmlElement* cellElement = new TiXmlElement("cell"); cellElement->SetAttribute("x", cellCoord.x); cellElement->SetAttribute("y", cellCoord.y); if (!defaultCost) { cellElement->SetDoubleAttribute("default_cost", cell->getCostMultiplier()); } if (!defaultSpeed) { cellElement->SetDoubleAttribute("default_speed", cell->getSpeedMultiplier()); } if (!cellVisual) { if (cve == CELLV_REVEALED) { cellElement->SetAttribute("state", "revealed"); } else { cellElement->SetAttribute("state", "masked"); } } if (!cellBlocker) { if (cti == CTYPE_CELL_NO_BLOCKER) { cellElement->SetAttribute("blocker_type", "no_blocker"); } else { cellElement->SetAttribute("blocker_type", "blocker"); } } if (isNarrow) { cellElement->SetAttribute("narrow", true); } // add cost tag if (!costsEmpty) { std::list::iterator cost_it = costIds.begin(); for (; cost_it != costIds.end(); ++cost_it) { if (cache->existsCostForCell(*cost_it, cell)) { TiXmlElement* costElement = new TiXmlElement("cost"); costElement->SetAttribute("id", *cost_it); costElement->SetDoubleAttribute("value", cache->getCost(*cost_it)); cellElement->LinkEndChild(costElement); } } } // add area tag if (!areasEmpty) { std::vector::iterator area_it = cellAreaIds.begin(); for (; area_it != cellAreaIds.end(); ++area_it) { TiXmlElement* areaElement = new TiXmlElement("area"); areaElement->SetAttribute("id", *area_it); areaElement->LinkEndChild(areaElement); } } // add transition tag if (transition) { TiXmlElement* transitionElement = new TiXmlElement("transition"); transitionElement->SetAttribute("id", transition->m_layer->getId()); transitionElement->SetAttribute("x", transition->m_mc.x); transitionElement->SetAttribute("y", transition->m_mc.y); if (transition->m_mc.z != 0) { transitionElement->SetAttribute("z", transition->m_mc.z); } if (transition->m_immediate) { transitionElement->SetAttribute("immediate", true); } else { transitionElement->SetAttribute("immediate", false); } cellElement->LinkEndChild(transitionElement); } cellcacheElement->LinkEndChild(cellElement); } } cellcachesElement->LinkEndChild(cellcacheElement); } TriggerController* triggerController = map.getTriggerController(); std::vector triggers = triggerController->getAllTriggers(); if (!triggers.empty()) { // add triggers tag to document TiXmlElement* triggersElement = new TiXmlElement("triggers"); mapElement->LinkEndChild(triggersElement); for (std::vector::iterator iter = triggers.begin(); iter != triggers.end(); ++iter) { // add trigger tag to document TiXmlElement* triggerElement = new TiXmlElement("trigger"); triggerElement->SetAttribute("name", (*iter)->getName()); triggerElement->SetAttribute("triggered", (*iter)->isTriggered()); triggerElement->SetAttribute("all_instances", (*iter)->isEnabledForAllInstances()); if ((*iter)->getAttached()) { triggerElement->SetAttribute("attached_instance", (*iter)->getAttached()->getId()); triggerElement->SetAttribute("attached_layer", (*iter)->getAttached()->getLocationRef().getLayer()->getId()); } const std::vector& cells = (*iter)->getAssignedCells(); if (!cells.empty()) { for (std::vector::const_iterator citer = cells.begin(); citer != cells.end(); ++citer) { TiXmlElement* cellElement = new TiXmlElement("assign"); cellElement->SetAttribute("layer_id", (*citer)->getLayer()->getId()); cellElement->SetAttribute("x", (*citer)->getLayerCoordinates().x); cellElement->SetAttribute("y", (*citer)->getLayerCoordinates().y); triggerElement->LinkEndChild(cellElement); } } const std::vector& instances = (*iter)->getEnabledInstances(); if (!instances.empty()) { for (std::vector::const_iterator citer = instances.begin(); citer != instances.end(); ++citer) { TiXmlElement* instanceElement = new TiXmlElement("enabled"); instanceElement->SetAttribute("layer_id", (*citer)->getLocationRef().getLayer()->getId()); instanceElement->SetAttribute("instance_id", (*citer)->getId()); triggerElement->LinkEndChild(instanceElement); } } const std::vector& conditions = (*iter)->getTriggerConditions(); if (!conditions.empty()) { for (std::vector::const_iterator citer = conditions.begin(); citer != conditions.end(); ++citer) { TiXmlElement* conditionElement = new TiXmlElement("condition"); conditionElement->SetAttribute("id", (*citer)); triggerElement->LinkEndChild(conditionElement); } } triggersElement->LinkEndChild(triggerElement); } } typedef std::vector CameraContainer; CameraContainer cameras = map.getCameras(); for (CameraContainer::iterator iter = cameras.begin(); iter != cameras.end(); ++iter) { if ((*iter)->getLocationRef().getMap()->getId() == map.getId()) { TiXmlElement* cameraElement = new TiXmlElement("camera"); cameraElement->SetAttribute("id", (*iter)->getId()); cameraElement->SetAttribute("ref_layer_id", (*iter)->getLocation().getLayer()->getId()); cameraElement->SetDoubleAttribute("zoom", (*iter)->getZoom()); cameraElement->SetDoubleAttribute("tilt", (*iter)->getTilt()); cameraElement->SetDoubleAttribute("rotation", (*iter)->getRotation()); if ((*iter)->isZToYEnabled()) { cameraElement->SetDoubleAttribute("ztoy", (*iter)->getZToY()); } Rect viewport = (*iter)->getViewPort(); std::ostringstream viewportString; viewportString << viewport.x << "," << viewport.y << "," << viewport.w << "," << viewport.h; cameraElement->SetAttribute("viewport", viewportString.str()); Point p = (*iter)->getCellImageDimensions(); cameraElement->SetAttribute("ref_cell_width", p.x); cameraElement->SetAttribute("ref_cell_height", p.y); std::vector lightingColor = (*iter)->getLightingColor(); bool writeLightingColor = false; for (uint32_t i=0; i < lightingColor.size(); ++i) { if (lightingColor[i] < 1.0) { writeLightingColor = true; break; } } if (writeLightingColor) { std::ostringstream lightingColorString; for (uint32_t i=0; i < lightingColor.size(); ++i) { if (i > 0) { lightingColorString << ","; } lightingColorString << lightingColor[i]; cameraElement->SetAttribute("light_color", lightingColorString.str()); } } mapElement->LinkEndChild(cameraElement); } } FILE* fp = 0; #if defined(_MSC_VER) && (_MSC_VER >= 1400 ) fp = _fsopen( filename.c_str(), "w", _SH_DENYNO ); #else fp = fopen( filename.c_str(), "w" ); #endif // save the map xml file doc.SaveFile(fp); fclose(fp); } } fifengine-0.4.1/engine/core/savers/native/map/mapsaver.h000066400000000000000000000057771304641216200232170ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_MAPSAVER_H_ #define FIFE_MAPSAVER_H_ // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "imapsaver.h" namespace FIFE { class Map; /** default map saver class implementing the IMapSaver interface */ class MapSaver : public IMapSaver { public: /** constructor */ MapSaver(); /** destructor */ ~MapSaver(); /** allows setting which object saver will be * used to save object files */ virtual void setObjectSaver(const FIFE::ObjectSaverPtr& objectSaver); /** allows setting which animation saver will be * used to save animation files */ virtual void setAnimationSaver(const FIFE::AnimationSaverPtr& animationSaver); /** allows setting which atlas saver will be * used to save atlas files */ virtual void setAtlasSaver(const FIFE::AtlasSaverPtr& atlasSaver); /** responsible for saving the map resource * used to save map files */ virtual void save(const Map& map, const std::string& filename, const std::vector& importFiles); private: ObjectSaverPtr m_objectSaver; AnimationSaverPtr m_animationSaver; AtlasSaverPtr m_atlasSaver; }; } #endiffifengine-0.4.1/engine/core/savers/native/map/mapsaver.i000066400000000000000000000031261304641216200232020ustar00rootroot00000000000000/************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "savers/native/map/mapsaver.h" %} %include "savers/native/map/mapsaver.h" fifengine-0.4.1/engine/core/util/000077500000000000000000000000001304641216200166175ustar00rootroot00000000000000fifengine-0.4.1/engine/core/util/base/000077500000000000000000000000001304641216200175315ustar00rootroot00000000000000fifengine-0.4.1/engine/core/util/base/exception.cpp000066400000000000000000000042441304641216200222370ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "exception.h" namespace FIFE { static Logger _log(LM_EXCEPTION); Exception::Exception(const std::string& msg): std::runtime_error(msg), m_what(msg) { } Exception::~Exception() throw() {} const char* Exception::what() const throw() { return m_what.c_str(); } void Exception::update() { m_what = "_[" + getTypeStr() + "]_ , " + getDescription() + " :: " + m_what; } }//FIFE fifengine-0.4.1/engine/core/util/base/exception.h000066400000000000000000000104711304641216200217030ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_EXCEPTION_H #define FIFE_EXCEPTION_H // Standard C++ library includes #include #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/log/logger.h" namespace FIFE { /** Exception base class. * All other exceptions derived from this merely adjust the error string * to be slightly more specific. */ class Exception : public std::runtime_error { public: /** Constructor. * @param msg The error mesage to be stored. */ Exception(const std::string& msg); /** Destructor. */ virtual ~Exception() throw(); /** Returns the error message. * @return The error message. */ virtual const char* what() const throw(); virtual const std::string& getTypeStr() const { static const std::string s = "Exception"; return s; } virtual const std::string& getDescription() const { static const std::string s = "Generic FIFE exception"; return s; } // little helper to change m_what void update(); private: std::string m_what; }; #define FIFE_EXCEPTION_DECL(_name, _description) \ class _name : public Exception { \ public: \ _name(const std::string& msg) : Exception(msg) { Logger _log(LM_EXCEPTION); update(); FL_ERR(_log, what()); } \ const std::string& getTypeStr() const { static const std::string s = #_name; return s; } \ const std::string& getDescription() const { static const std::string s = _description; return s; } \ } FIFE_EXCEPTION_DECL(SDLException, "SDL reported something bad"); FIFE_EXCEPTION_DECL(NotFound, "Something was searched, but not found"); FIFE_EXCEPTION_DECL(NotSet, "Something was not set correctly"); FIFE_EXCEPTION_DECL(IndexOverflow, "Someone tried to access a non-existing element"); FIFE_EXCEPTION_DECL(InvalidFormat, "Found invalid data"); FIFE_EXCEPTION_DECL(CannotOpenFile, "File couldn't be opened"); FIFE_EXCEPTION_DECL(InvalidConversion, "Tried an invalid conversion"); FIFE_EXCEPTION_DECL(NotSupported, "This action was not supported"); FIFE_EXCEPTION_DECL(NameClash, "A name or identifier is already in use"); FIFE_EXCEPTION_DECL(Duplicate, "A duplicate item was added, where this is not allowed"); FIFE_EXCEPTION_DECL(ScriptException, "Error related to scripting functionality"); FIFE_EXCEPTION_DECL(EventException, "Error related to event functionality"); FIFE_EXCEPTION_DECL(GuiException, "Error related to gui functionality"); FIFE_EXCEPTION_DECL(InconsistencyDetected, "An inconsistency in FIFE internals was detected. Please report this is a FIFE Bug."); /** @bug The memory allocation in @c std::string might fail, resulting in terminate. */ FIFE_EXCEPTION_DECL(OutOfMemory, "Buy more ram ;)"); }//FIFE #endif fifengine-0.4.1/engine/core/util/base/fife_stdint.h000066400000000000000000000053141304641216200222030ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_UTIL_FIFE_STDINT_H #define FIFE_UTIL_FIFE_STDINT_H // Standard C++ library includes // Platform specific includes #if defined( WIN32 ) && defined( _MSC_VER ) #ifndef _SDL_H typedef signed __int8 int8_t; typedef unsigned __int8 uint8_t; typedef signed __int16 int16_t; typedef unsigned __int16 uint16_t; typedef signed __int32 int32_t; typedef unsigned __int32 uint32_t; typedef signed __int64 int64_t; typedef unsigned __int64 uint64_t; #endif #else #include #endif // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder // SDL masks for SDL_CreateRGBSurface namespace FIFE { #if SDL_BYTEORDER == SDL_BIG_ENDIAN const uint32_t RMASK = 0xff000000; const uint32_t GMASK = 0x00ff0000; const uint32_t BMASK = 0x0000ff00; const uint32_t AMASK = 0x000000ff; #else const uint32_t RMASK = 0x000000ff; const uint32_t GMASK = 0x0000ff00; const uint32_t BMASK = 0x00ff0000; const uint32_t AMASK = 0xff000000; #endif const uint32_t NULLMASK = 0x00000000; } //FIFE #endif // FIFEINT_H fifengine-0.4.1/engine/core/util/base/fifeclass.cpp000066400000000000000000000035511304641216200222000ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "fifeclass.h" namespace FIFE { fifeid_t FifeClass::m_curid = 0; }//FIFE fifengine-0.4.1/engine/core/util/base/fifeclass.h000066400000000000000000000044141304641216200216440ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_CLASS_H #define FIFE_CLASS_H // Standard C++ library includes #include #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder namespace FIFE { typedef std::size_t fifeid_t; /** Base class for all fife classes * Used e.g. to track instances over swig conversion */ class FifeClass { public: FifeClass(): m_fifeid(m_curid++) { } virtual ~FifeClass() { } /** Gets unique id of this instance inside the engine */ fifeid_t getFifeId() { return m_fifeid; } private: fifeid_t m_fifeid; static fifeid_t m_curid; }; } #endif fifengine-0.4.1/engine/core/util/base/sharedptr.h000066400000000000000000000212521304641216200217000ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_SHARED_PTR_H_ #define FIFE_SHARED_PTR_H_ // Standard C++ library includes #include #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "fife_stdint.h" namespace FIFE { /** shared pointer implementation to provide automatic * reference counting and deletion when last reference * falls out of scope. */ template class SharedPtr { public: /** Constructor * default constructor * creates a null shared pointer */ SharedPtr() : m_ptr(0), m_refCount(0) { } /** Constructor * takes over ownership of the provided pointer * and will delete it automatically when last * reference falls out of scope. */ template explicit SharedPtr(U *ptr) : m_ptr(ptr), m_refCount(ptr ? new uint32_t(1) : 0) { } /** Copy Constructor * provides ability to properly copy a shared resource */ SharedPtr(const SharedPtr& rhs) : m_ptr(rhs.m_ptr), m_refCount(rhs.m_refCount) { // increase reference count incRefCount(); } /** Constructor * shares ownership with the value passed into rhs * the pointer type passed in must be convertible * to this shared pointer type */ template SharedPtr(const SharedPtr& rhs) { m_ptr = rhs.get(); m_refCount = rhs.useCountPtr(); incRefCount(); } /** Destructor * handles deletion of underlying pointer * if the reference count reaches 0 */ ~SharedPtr() { // decrement reference count decRefCount(); // check to see if we need to delete if (m_refCount && *m_refCount == 0) { // delete and set pointers to null delete m_ptr; delete m_refCount; m_ptr = 0; m_refCount = 0; } } /** provides functionality for the equality operator */ SharedPtr& operator=(const SharedPtr& rhs) { // handle self assignment if (rhs.get() == m_ptr) { return *this; } // store in temporary (which causes a ref count increase) // and swap with this object SharedPtr temp(rhs); swap(temp); return *this; } /** provides functionality for the equality operator * the passed in pointer type must be convertible to * this pointer type */ template SharedPtr& operator=(const SharedPtr& rhs) { // handle self assignment if (rhs.get() == m_ptr) { return *this; } // store in temporary (which causes a ref count increase) // and swap with this object SharedPtr temp(rhs); swap(temp); return *this; } /** allows dereferencing of shared pointer to act * identical to dereferencing the underlying pointer */ inline T& operator*() const { assert(m_ptr); return *m_ptr; } /** allows dereferencing of shared pointer to act * identical to dereferencing the underlying pointer */ inline T* operator->() const { assert(m_ptr); return m_ptr; } /** allows direct access to underlying pointer */ inline T* get() const { return m_ptr; } /** reset this pointer to a null shared pointer * this can be used to lower the reference count * of the shared resource or set the underlying pointer * to different pointer. */ inline void reset(T* ptr = 0) { assert(ptr == 0 || ptr != m_ptr); SharedPtr(ptr).swap(*this); } /** returns the current reference count * this should only be called on a non-null * shared pointer */ inline uint32_t useCount() const { assert(m_refCount); if (!m_refCount) { return 0; } return *m_refCount; } /** returns the current reference count * provides direct access to the user count pointer * this should really only be used internally */ inline uint32_t* useCountPtr() const { return m_refCount; } /** provides the ability to see if * a shared resource is currently only * held by a single shared pointer * this should only be called on a non-null * shared pointer */ inline bool unique() const { assert(m_refCount); return (*m_refCount == 1); } /** provides the ability to convert a * shared pointer to a bool, this is * a convenience for checking validity * of a shared pointer in a conditional */ operator bool() const { return (m_ptr != 0); } /** negation operator overload */ bool operator!() const { return (m_ptr == 0); } private: /** provides swapping function between * two shared pointers, used internally */ inline void swap(SharedPtr& rhs) { std::swap(m_ptr, rhs.m_ptr); std::swap(m_refCount, rhs.m_refCount); } /** increases the reference count for * this shared resource, used internally */ inline void incRefCount() { if (m_refCount) { ++(*m_refCount); } } /** decreases the reference count for * this shared resource, used internally */ inline void decRefCount() { if (m_refCount) { --(*m_refCount); } } private: T* m_ptr; uint32_t* m_refCount; }; /** provides equality operator for shared pointers */ template inline bool operator==(const SharedPtr& lhs, const SharedPtr& rhs) { return (lhs.get() == rhs.get()); } /** provides inequality operator for shared pointers */ template inline bool operator!=(const SharedPtr& lhs, const SharedPtr& rhs) { return (lhs.get() != rhs.get()); } /** provides less than operator for shared pointers */ template inline bool operator<(SharedPtr const& lhs, SharedPtr const& rhs) { return std::less()(lhs.get(), rhs.get()); } /** convenience function for making a shared pointer * can be used anytime a shared pointer should be created */ template SharedPtr make_shared(T* ptr) { return SharedPtr(ptr); } } //FIFE #endif //FIFE_SHARED_PTR_H_ fifengine-0.4.1/engine/core/util/base/singleton.h000066400000000000000000000067051304641216200217140ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_SINGLETON_H #define FIFE_SINGLETON_H #define SINGLEFRIEND(classname) friend class FIFE::StaticSingleton; classname(); virtual ~classname(); // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "fifeclass.h" namespace FIFE { /** The "classic" Singleton. * * @see DynamicSingleton */ template class StaticSingleton { public: static T* instance() { static T inst; return &inst; } protected: StaticSingleton() { } virtual ~StaticSingleton() { } private: StaticSingleton(const StaticSingleton&) {} StaticSingleton& operator=(const StaticSingleton&) { return this; } }; /** Another Singleton. * * This implementations needs to be created and destroyed explicitly. * That way the order of construction and destruction is well defined, so we don't * get those nasty static initialization/destruction order problems. * * Engine will create all standard FIFE Singletons when created (just call Engine::instance()) * and destroy them on exit. * * Maybe we'll change this one day to use one of those funny NiftyCounter implementations. * * @see StaticSingleton * @see Engine */ template class DynamicSingleton { public: static T* instance() { assert(m_instance); return m_instance; } DynamicSingleton() { assert(!m_instance); m_instance = static_cast(this); } virtual ~DynamicSingleton() { m_instance = 0; } private: static T* m_instance; DynamicSingleton(const DynamicSingleton&) {}; DynamicSingleton operator=(const DynamicSingleton&) {}; }; template T* DynamicSingleton::m_instance = 0; }//FIFE #endif fifengine-0.4.1/engine/core/util/base/stringutils.cpp000066400000000000000000000056361304641216200226360ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "stringutils.h" namespace FIFE { int32_t makeInt32(const std::string& str) { int32_t ret; sscanf(str.c_str(), "%d", &ret); return ret; } IntVector tokenize(const std::string& str, char delim, char group) { IntVector tokens; if(str.empty()) { return tokens; } int curr = 0; int start = 0; start = curr = static_cast(str.find_first_not_of(delim)); while(str[curr]) { if(str[curr] == group) { curr = static_cast(str.find_first_of(group, curr+1)); if((size_t)curr == std::string::npos) { return IntVector(); } std::string token = str.substr(start+1, curr-start-1); tokens.push_back(makeInt32(token)); start = curr + 1; } else if(str[curr] == delim) { if(str[curr-1] != delim && str[curr-1] != group) { std::string token = str.substr(start, curr-start); tokens.push_back(makeInt32(token)); } start = curr + 1; } ++curr; } if(tokens.size() == 0) { tokens.push_back(makeInt32(str)); return tokens; } if(str[curr-1] != delim && str[curr-1] != group) { std::string token = str.substr(start, curr - 1); tokens.push_back(makeInt32(token)); } return tokens; } } fifengine-0.4.1/engine/core/util/base/stringutils.h000066400000000000000000000035131304641216200222730ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_STRINGUTILS_H_ #define FIFE_STRINGUTILS_H_ // Standard C++ library includes #include #include #include "util/base/fife_stdint.h" namespace FIFE { typedef std::vector IntVector; int makeInt32(const std::string& str); IntVector tokenize(const std::string& str, char delim, char group = 0); } #endif fifengine-0.4.1/engine/core/util/base/utilbase.i000066400000000000000000000034051304641216200215150ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "util/base/fifeclass.h" %} %include "util/base/exception.h" %include "util/resource/resource.i" namespace FIFE { typedef std::size_t fifeid_t; class FifeClass{ public: virtual ~FifeClass(); fifeid_t getFifeId(); }; } fifengine-0.4.1/engine/core/util/log/000077500000000000000000000000001304641216200174005ustar00rootroot00000000000000fifengine-0.4.1/engine/core/util/log/logger.cpp000066400000000000000000000137211304641216200213670ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include #include #include // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "modules.h" #include "logger.h" #include "util/base/exception.h" // define the module info relationships structure here, begin struct ModuleInfo { logmodule_t module; logmodule_t parent; std::string name; }; MODULE_INFO_RELATIONSHIPS // end namespace FIFE { LogManager* LogManager::m_instance = NULL; Logger::Logger(logmodule_t module): m_module(module) { } Logger::~Logger() { } void Logger::log(LogManager::LogLevel level, const std::string& msg) { LogManager::instance()->log(level, m_module, msg); } void Logger::log(LogManager::LogLevel level, const LMsg& msg) { LogManager::instance()->log(level, m_module, msg.str); } LogManager* LogManager::instance() { if (!m_instance) { m_instance = new LogManager(); } return m_instance; } LogManager::~LogManager() { delete m_instance; } void LogManager::log(LogLevel level, logmodule_t module, const std::string& msg) { if (level < m_level) { return; } if (!isVisible(module)) { return; } std::string lvlstr = ""; switch (level) { case LEVEL_DEBUG: lvlstr = "DEBUG"; break; case LEVEL_LOG: lvlstr = "LOG"; break; case LEVEL_WARN: lvlstr = "WARN"; break; case LEVEL_ERROR: lvlstr = "ERROR"; break; case LEVEL_PANIC: lvlstr = "PANIC"; break; default: lvlstr = "ERROR"; break; } if (m_logtoprompt) { std::cout << moduleInfos[module].name << ":" << lvlstr << ":" << msg << std::endl; } if (m_logtofile) { *m_logfile << moduleInfos[module].name << ":" << lvlstr << ":" << msg << std::endl; } if (level == LEVEL_PANIC) { abort(); } } void LogManager::setLevelFilter(LogLevel level) { m_level = level; } LogManager::LogLevel LogManager::getLevelFilter() { return m_level; } void LogManager::addVisibleModule(logmodule_t module) { validateModule(module); int32_t ind = static_cast(module); m_modules[ind] = true; if (moduleInfos[ind].parent != LM_CORE) { addVisibleModule(moduleInfos[ind].parent); } } void LogManager::removeVisibleModule(logmodule_t module) { validateModule(module); m_modules[module] = false; } void LogManager::clearVisibleModules() { for (int32_t i = 0; i < LM_MODULE_MAX; i++) { m_modules[i] = false; } } void LogManager::setLogToPrompt(bool logtoprompt) { m_logtoprompt = logtoprompt; } bool LogManager::isLogToPrompt() { return m_logtoprompt; } void LogManager::setLogToFile(bool logtofile) { if(logtofile){ m_logfile = new std::ofstream("fife.log"); } else { if (m_logfile){ delete m_logfile; } } m_logtofile = logtofile; } bool LogManager::isLogToFile() { return m_logtofile; } bool LogManager::isVisible(logmodule_t module) { if (!m_modules[module]) { return false; } if (moduleInfos[module].parent != LM_CORE) { return isVisible(moduleInfos[module].parent); } return true; } LogManager::LogManager(): m_level(LEVEL_DEBUG), module_check_stack(), m_logtofile(false), m_logtoprompt(false) { validateModuleDescription(LM_CORE); m_logfile = 0; clearVisibleModules(); } void LogManager::validateModule(logmodule_t m) { if ((m <= LM_CORE) || (m >= LM_MODULE_MAX)) { std::cout << "Invalid module received in LogManager: " << m << ", aborting\n"; abort(); } } void LogManager::validateModuleDescription(logmodule_t module) { if (module == LM_CORE) { for (int32_t m = static_cast(LM_CORE)+1; m < static_cast(LM_MODULE_MAX); m++) { if (moduleInfos[m].module != static_cast(m)) { std::ostringstream stream; stream << m; std::string msg = "Log module definition ids do not match in index "; msg += stream.str(); std::cout << msg << std::endl; throw InvalidFormat(msg); } module_check_stack.clear(); validateModuleDescription(static_cast(m)); } } else { module_check_stack.push_back(module); if (count(module_check_stack.begin(), module_check_stack.end(), module) > 1) { throw InvalidFormat("Log module definition hierarchy contains cycles"); } } } std::string LogManager::getModuleName(logmodule_t module) { return moduleInfos[module].name; } } fifengine-0.4.1/engine/core/util/log/logger.h000066400000000000000000000210761304641216200210360ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_LOGGER_H #define FIFE_LOGGER_H // Standard C++ library includes #include #include #include #include #include #include #include #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/fife_stdint.h" #include "modules.h" #ifdef LOG_ENABLED /** Logs given message with log level "debug" using given logger instance */ #define FL_DBG(logger, msg) do { if (FIFE::LogManager::instance()->isVisible(logger.getModule())) logger.log(FIFE::LogManager::LEVEL_DEBUG, msg); } while(0) /** Logs given message with log level "log" using given logger instance */ #define FL_LOG(logger, msg) do { if (FIFE::LogManager::instance()->isVisible(logger.getModule())) logger.log(FIFE::LogManager::LEVEL_LOG, msg); } while(0) /** Logs given message with log level "warning" using given logger instance */ #define FL_WARN(logger, msg) do { if (FIFE::LogManager::instance()->isVisible(logger.getModule())) logger.log(FIFE::LogManager::LEVEL_WARN, msg); } while(0) /** Logs given message with log level "error" using given logger instance */ #define FL_ERR(logger, msg) do { if (FIFE::LogManager::instance()->isVisible(logger.getModule())) logger.log(FIFE::LogManager::LEVEL_ERROR, msg); } while(0) /** Logs given message with log level "pacic" using given logger instance. * Causes also program to abort */ #define FL_PANIC(logger, msg) do { if (FIFE::LogManager::instance()->isVisible(logger.getModule())) logger.log(FIFE::LogManager::LEVEL_PANIC, msg); } while(0) #else // empty definitions in case logs are turned off for speed #define FL_DBG(logger, msg) #define FL_LOG(logger, msg) #define FL_WARN(logger, msg) #define FL_ERR(logger, msg) #define FL_PANIC(logger, msg) #endif namespace FIFE { /** Helper class to create log strings out from separate parts * Usage: LMsg("some text") << variable << ", " << other variable */ class LMsg { public: LMsg(const std::string& msg=""): str(msg) {} ~LMsg() {} template LMsg& operator<<(const T& t) { std::ostringstream stream; stream << t; str += stream.str(); return *this; } std::string str; }; /** Logmanager takes care of log filtering and output direction */ class LogManager { public: /** Loglevel is used to set a treshold for output messages + related filter * E.g. in case log message has LEVEL_WARN, but the filter treshold is LEVEL_ERROR, * log message is not outputted */ enum LogLevel { LEVEL_DEBUG = 0, LEVEL_LOG = 1, LEVEL_WARN = 2, LEVEL_ERROR = 3, LEVEL_PANIC = 4 }; /** Returns instance to log manager. Log manager is a singleton class */ static LogManager* instance(); /** Destructor */ ~LogManager(); /** Logs given message * @param level level of this log (e.g. warning) * @param module module where this log message is coming from. Modules are defined in modules.h-file * @param msg message to log * @note do not use this method directly, instead use FL_WARN (or any other FL_XXX) macro */ void log(LogLevel level, logmodule_t module, const std::string& msg); /** Sets currently used level filter. * For usage, @see LogManager::LogLevel */ void setLevelFilter(LogLevel level); /** Gets currently used level filter. * @see LogManager::LogLevel */ LogLevel getLevelFilter(); /** Adds visible module into logmanager * Module corresponds some module in the engine. Modules may contain other modules. * Modules and their structure is defined in file modules.h. * In case module is not visible, LogManager filters corresponding log messages * from output. In case some lower-level module is set visible, it also sets * all upper level modules visible * @param module module to set visible */ void addVisibleModule(logmodule_t module); /** Removes visible module, @see addVisibleModule */ void removeVisibleModule(logmodule_t module); /** Removes all visible modules, @see addVisibleModule */ void clearVisibleModules(); /** Tells if given module is visible */ bool isVisible(logmodule_t module); /** Sets LogManager to log to prompt */ void setLogToPrompt(bool logtoprompt); /** Returns if LogManager is set to log to prompt */ bool isLogToPrompt(); /** Sets LogManager to log to a file */ void setLogToFile(bool logtofile); /** Returns if LogManager is set to log to a file */ bool isLogToFile(); /** Gets display name for given module id * E.g. LM_AUDIO -> "Audio" */ std::string getModuleName(logmodule_t module); private: void validateModule(logmodule_t m); // hidden constructor for singleton LogManager(); // validates if definitions in module.h are valid void validateModuleDescription(logmodule_t module); // singleton instance static LogManager* m_instance; // current filter level LogLevel m_level; // visibility array for modules bool m_modules[LM_MODULE_MAX]; // used during module description validation to check cycles in hierarchy std::vector module_check_stack; bool m_logtofile; bool m_logtoprompt; std::ofstream* m_logfile; }; /** Create a Logger instance to communicate with LogManager * Logger stores information about the current module thus reducing * the typing needed for individual traces * Common way of doing things is to instantiate a static Logger on * top of .cpp file and then use that in .cpp-file's methods */ class Logger { public: /** Creates new logger and associates it with given module */ Logger(logmodule_t module); /** Destructor */ ~Logger(); /** logs given message with given log level */ void log(LogManager::LogLevel level, const std::string& msg); /** logs given message with given log level. * Message is wrapped into LMsg instance for easy formatting */ void log(LogManager::LogLevel level, const LMsg& msg); /** gets module where this logger is associated to */ inline logmodule_t getModule() const { return m_module; } private: logmodule_t m_module; }; /** Helper for printing a pointer * * This is a helper structure that allows printing any kind of pointer * on (hopefully) any platform in hex, kind of like the %p format * string of printf. * * The mechanism is used by calling something like: * somestream << pprint(ptr); **/ struct pprint { void* p; pprint( void* _p ) : p(_p) {} }; } namespace std { /** Print a pprint object to an ostream. * * This is pure Stroustrup, overloading the ostream operator<< to print * a formatted pointer from a pprint object to an ostream. * * \param s output stream * \param p pointer to print * \return reference to the modified stream * */ template basic_ostream& operator<<( basic_ostream& s, const FIFE::pprint& p ) { s << "0x" << hex << setw( 2*sizeof(void*) ) << setfill('0') << reinterpret_cast( p.p ); return s; } } #endif fifengine-0.4.1/engine/core/util/log/logger.i000066400000000000000000000047231304641216200210370ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "util/log/logger.h" %} %include "modules.h" namespace std { %template(moduleVector) std::vector; }; namespace FIFE { class LogManager { public: enum LogLevel { LEVEL_DEBUG = 0, LEVEL_LOG = 1, LEVEL_WARN = 2, LEVEL_ERROR = 3 }; ~LogManager(); void log(LogLevel level, logmodule_t module, const std::string& msg); void setLevelFilter(LogLevel level); LogLevel getLevelFilter(); void addVisibleModule(logmodule_t module); void removeVisibleModule(logmodule_t module); void clearVisibleModules(); bool isVisible(logmodule_t module); void setLogToPrompt(bool logtoprompt); bool isLogToPrompt(); void setLogToFile(bool logtofile); bool isLogToFile(); std::string getModuleName(logmodule_t module); private: LogManager(); }; class Logger { public: Logger(logmodule_t module); ~Logger(); void log(LogManager::LogLevel level, const std::string& msg); }; } fifengine-0.4.1/engine/core/util/math/000077500000000000000000000000001304641216200175505ustar00rootroot00000000000000fifengine-0.4.1/engine/core/util/math/angles.cpp000066400000000000000000000120631304641216200215270ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "model/metamodel/grids/cellgrid.h" #include "model/structures/layer.h" #include "angles.h" namespace FIFE { int32_t getIndexByAngle(int32_t angle, const type_angle2id& angle2id, int32_t& closestMatchingAngle) { if (angle2id.empty()) { return -1; } if (angle2id.size() == 1) { closestMatchingAngle = angle2id.begin()->first; return angle2id.begin()->second; } int32_t wangle = (360 + angle) % 360; type_angle2id::const_iterator u(angle2id.upper_bound(wangle)); type_angle2id::const_iterator tmp; // take care of the forward wrapping case if (u == angle2id.end()) { int32_t ud = wangle - (--u)->first; int32_t ld = 360 - wangle + angle2id.begin()->first; if (ud > ld) { // wrapped value (first) closestMatchingAngle = angle2id.begin()->first; return angle2id.begin()->second; } // non-wrapped value closestMatchingAngle = u->first; return u->second; } // take care of the backward wrapping case if (u == angle2id.begin()) { tmp = angle2id.end(); tmp--; int32_t ld = u->first - wangle; int32_t ud = 360 - tmp->first + wangle; if (ud > ld) { // non-wrapped value (first) closestMatchingAngle = angle2id.begin()->first; return angle2id.begin()->second; } // wrapped value (last) closestMatchingAngle = tmp->first; return tmp->second; } // value in the middle... int32_t ud = u->first - wangle; int32_t ucm = u->first; int32_t ui = u->second; u--; int32_t ld = wangle - u->first; int32_t lcm = u->first; int32_t li = u->second; // if ud and ls is equal then lcm is prefered (next angle) if (ud < ld) { closestMatchingAngle = ucm; return ui; } closestMatchingAngle = lcm; return li; } int32_t getAngleBetween(const Location& loc1, const Location& loc2) { ExactModelCoordinate c1 = loc1.getMapCoordinates(); ExactModelCoordinate c2 = loc2.getMapCoordinates(); double dy = (c2.y - c1.y); double dx = (c2.x - c1.x); // add grid rotation to angle, to guarantee uniform angles (not grid based) int32_t angle = round(Mathd::ATan2(-dy,dx)*(180.0/Mathd::pi()) + loc1.getLayer()->getCellGrid()->getRotation()); if (angle < 0) { angle += 360; } angle %= 360; return angle; } Location getFacing(const Location& loc, const int32_t angle) { Location facing(loc); ExactModelCoordinate emc = facing.getMapCoordinates(); // remove grid rotation from angle, to guarantee uniform angles (not grid based) double tmpAngle = static_cast(angle) - loc.getLayer()->getCellGrid()->getRotation(); emc.x += Mathd::Cos(tmpAngle * (Mathd::pi()/180.0)); emc.y -= Mathd::Sin(tmpAngle * (Mathd::pi()/180.0)); facing.setMapCoordinates(emc); return facing; } int32_t getAngleBetween(const ExactModelCoordinate& emc1, const ExactModelCoordinate& emc2) { double dy = (emc2.y - emc1.y); double dx = (emc2.x - emc1.x); int32_t angle = round(Mathd::ATan2(-dy,dx)*(180.0/Mathd::pi())); if (angle < 0) { angle += 360; } angle %= 360; return angle; } ExactModelCoordinate getFacing(const ExactModelCoordinate& emc, const int32_t angle) { ExactModelCoordinate result = emc; result.x += Mathd::Cos(static_cast(angle) * (Mathd::pi()/180.0)); result.y -= Mathd::Sin(static_cast(angle) * (Mathd::pi()/180.0)); return result; } } fifengine-0.4.1/engine/core/util/math/angles.h000066400000000000000000000061111304641216200211710ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_ANGLES_H #define FIFE_ANGLES_H // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "model/structures/location.h" namespace FIFE { typedef std::map type_angle2id; /** Returns id for given angle from angle2id map * in case there are no elements in the map, negative value is returned */ int32_t getIndexByAngle(int32_t angle, const type_angle2id& angle2id, int32_t& closestMatchingAngle); /** Gets angle of vector defined by given locations * @return angle in polar coordinates between the line * defined by the two locations and the horizontal axis (East <-> West) */ int32_t getAngleBetween(const Location& loc1, const Location& loc2); /** Gets facing location defined by given angle and location * @return facing location */ Location getFacing(const Location& loc, const int32_t angle); /** Gets angle of vector defined by given map coordinates * @return angle in polar coordinates between the line * defined by the two map coordinates and the horizontal axis (East <-> West) */ int32_t getAngleBetween(const ExactModelCoordinate& emc1, const ExactModelCoordinate& emc2); /** Gets facing map coordinate defined by given angle and map coordinate * @return facing map coordinate */ ExactModelCoordinate getFacing(const ExactModelCoordinate& emc, const int32_t angle); } #endif fifengine-0.4.1/engine/core/util/math/fife_math.h000066400000000000000000000235011304641216200216440ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_UTIL_FIFE_MATH_H #define FIFE_UTIL_FIFE_MATH_H // Standard C++ library includes #include #include #include #include // Platform specific includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #ifndef ABS #define ABS(x) ((x)<0?-(x):(x)) #endif // Sort out the missing round function in MSVC: #if defined( WIN32 ) && defined( _MSC_VER ) inline double round(const double x) { return x < 0.0 ? ceil(x - 0.5) : floor(x + 0.5); } #endif namespace FIFE { static const float FLT_STD_EPSILON = std::numeric_limits::epsilon(); static const float FLT_STD_MAX = (std::numeric_limits::max)(); static const float FLT_ZERO_TOLERANCE = 1e-06f; static const float FLT_PI = 4.0f*std::atan(1.0f); static const float FLT_TWO_PI = 2.0f*FLT_PI; static const float FLT_HALF_PI = 0.5f*FLT_PI; static const float FLT_INVERSE_PI = 1.0f/FLT_PI; static const float FLT_INVERSE_TWO_PI = 1.0f/FLT_TWO_PI; static const float FLT_DEG_TO_RAD = FLT_PI/180.0f; static const float FLT_RAD_TO_DEG = 180.0f/FLT_PI; static const float FLT_LOG_2 = std::log(2.0f); static const float FLT_LOG_10 = std::log(10.0f); static const float FLT_INV_LOG_2 = 1.0f/std::log(2.0f); static const float FLT_INV_LOG_10 = 1.0f/std::log(10.0f); static const double DBL_STD_EPSILON = std::numeric_limits::epsilon(); static const double DBL_STD_MAX = (std::numeric_limits::max)(); static const double DBL_ZERO_TOLERANCE = 1e-08; static const double DBL_PI = 4.0*std::atan(1.0); static const double DBL_TWO_PI = 2.0*DBL_PI; static const double DBL_HALF_PI = 0.5*DBL_PI; static const double DBL_INVERSE_PI = 1.0/DBL_PI; static const double DBL_INVERSE_TWO_PI = 1.0/DBL_TWO_PI; static const double DBL_DEG_TO_RAD = DBL_PI/180.0; static const double DBL_RAD_TO_DEG = 180.0f/DBL_PI; static const double DBL_LOG_2 = std::log(2.0); static const double DBL_LOG_10 = std::log(10.0); static const double DBL_INV_LOG_2 = 1.0/std::log(2.0); static const double DBL_INV_LOG_10 = 1.0/std::log(10.0); template struct float_traits { }; template <> struct float_traits { typedef float float_type; static inline float_type epsilon() { return FLT_STD_EPSILON; } static inline float_type zeroTolerance() { return FLT_ZERO_TOLERANCE; } static inline float_type max() { return FLT_STD_MAX; } static inline float_type pi() { return FLT_PI; } static inline float_type twoPi() { return FLT_TWO_PI; } static inline float_type halfPi() { return FLT_HALF_PI; } static inline float_type inversePi() { return FLT_INVERSE_PI; } static inline float_type inverseTwoPi() { return FLT_INVERSE_TWO_PI; } static inline float_type degToRad() { return FLT_DEG_TO_RAD; } static inline float_type radToDeg() { return FLT_RAD_TO_DEG; } static inline float_type log2() { return FLT_LOG_2; } static inline float_type log10() { return FLT_LOG_10; } static inline float_type invLog2() { return FLT_INV_LOG_2; } static inline float_type invLog10() { return FLT_INV_LOG_10; } }; template <> struct float_traits { typedef double float_type; static inline float_type epsilon() { return DBL_STD_EPSILON; } static inline float_type zeroTolerance() { return DBL_ZERO_TOLERANCE; } static inline float_type max() { return DBL_STD_MAX; } static inline float_type pi() { return DBL_PI; } static inline float_type twoPi() { return DBL_TWO_PI; } static inline float_type halfPi() { return DBL_HALF_PI; } static inline float_type inversePi() { return DBL_INVERSE_PI; } static inline float_type inverseTwoPi() { return DBL_INVERSE_TWO_PI; } static inline float_type degToRad() { return DBL_DEG_TO_RAD; } static inline float_type radToDeg() { return DBL_RAD_TO_DEG; } static inline float_type log2() { return DBL_LOG_2; } static inline float_type log10() { return DBL_LOG_10; } static inline float_type invLog2() { return DBL_INV_LOG_2; } static inline float_type invLog10() { return DBL_INV_LOG_10; } }; template class Math { public: typedef T num_type; typedef float_traits traits_type; static inline num_type epsilon() { return traits_type::epsilon(); } static inline num_type zeroTolerance() { return traits_type::zeroTolerance(); } static inline num_type max() { return traits_type::max(); } static inline num_type pi() { return traits_type::pi(); } static inline num_type twoPi() { return traits_type::twoPi(); } static inline num_type halfPi() { return traits_type::halfPi(); } static inline num_type inversePi() { return traits_type::inversePi(); } static inline num_type inverseTwoPi() { return traits_type::inverseTwoPi(); } static inline num_type degToRad() { return traits_type::degToRad(); } static inline num_type radToDeg() { return traits_type::radToDeg(); } static inline num_type log2() { return traits_type::log2(); } static inline num_type log10() { return traits_type::log10(); } static inline num_type invLog2() { return traits_type::invLog2(); } static inline num_type invLog10() { return traits_type::invLog10(); } static T ACos(T _val); static T ASin(T _val); static T ATan(T _val); static T ATan2(T _x, T _y); static T Ceil(T _val); static T Cos(T _val); static T Exp(T _val); static T FAbs(T _val); static T Floor(T _val); static T FMod (T _x, T _y); static T InvSqrt(T _val); static T Log(T _val); static T Log2(T _val); static T Log10(T _val); static T Pow(T _base, T _exponent); static T Sin(T _val); static T Sqr(T _val); static T Sqrt(T _val); static T Tan(T _val); static bool Equal(T _val1, T _val2); }; typedef Math Mathf; typedef Math Mathd; template inline T Math::ACos(T _val) { if (-static_cast(1) < _val) { if (_val < static_cast(1)) { return static_cast(std::acos(_val)); } else { return static_cast(0); } } else { return pi(); } } template inline T Math::ASin(T _val) { if (-static_cast(1) < _val) { if (_val < static_cast(1)) { return static_cast(std::asin(_val)); } else { return halfPi(); } } else { return -halfPi(); } } template inline T Math::ATan(T _val) { return static_cast(std::atan(_val)); } template inline T Math::ATan2(T _x, T _y) { return static_cast(std::atan2(_x, _y)); } template inline T Math::Ceil(T _val) { return static_cast(std::ceil(_val)); } template inline T Math::Cos(T _val) { return static_cast(std::cos(_val)); } template inline T Math::Exp(T _val){ return static_cast(std::exp(_val)); } template inline T Math::FAbs(T _val) { return static_cast(std::fabs(_val)); } template inline T Math::Floor(T _val) { return static_cast(std::floor(_val)); } template inline T Math::FMod(T _x, T _y) { return static_cast(std::fmod(_x, _y)); } template inline T Math::InvSqrt(T _val) { return static_cast(1/std::sqrt(_val)); } template inline T Math::Log(T _val) { return static_cast(std::log(_val)); } template inline T Math::Log2(T _val) { return invLog2() * static_cast(std::log(_val)); } template inline T Math::Log10(T _val) { return invLog10() * static_cast(std::log(_val)); } template inline T Math::Pow(T _base, T _exponent) { return static_cast(std::pow(_base, _exponent)); } template inline T Math::Sin(T _val) { return static_cast(std::sin(_val)); } template inline T Math::Sqr(T _val) { return _val*_val; } template inline T Math::Sqrt(T _val) { return static_cast(std::sqrt(_val)); } template inline T Math::Tan(T _val) { return static_cast(std::tan(_val)); } template inline bool Math::Equal(T _val1, T _val2) { return std::fabs(_val1 - _val2) < epsilon(); } /** Returns the next higher power of 2 based on the passed argument */ inline unsigned nextPow2(unsigned x) { --x; x |= x >> 1; x |= x >> 2; x |= x >> 4; x |= x >> 8; x |= x >> 16; return ++x; } } //FIFE #endif // FIFE_UTIL_FIFE_MATH_H fifengine-0.4.1/engine/core/util/math/math.i000066400000000000000000000062661304641216200206650ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "util/math/angles.h" #include "util/math/fife_math.h" %} namespace FIFE { template struct float_traits { }; template class Math { public: typedef T num_type; typedef float_traits traits_type; static inline num_type epsilon(); static inline num_type zeroTolerance(); static inline num_type max(); static inline num_type pi(); static inline num_type twoPi(); static inline num_type halfPi(); static inline num_type inversePi(); static inline num_type inverseTwoPi(); static inline num_type degToRad(); static inline num_type radToDeg(); static inline num_type log2(); static inline num_type log10(); static inline num_type invLog2(); static inline num_type invLog10(); static T ACos(T _val); static T ASin(T _val); static T ATan(T _val); static T ATan2(T _x, T _y); static T Ceil(T _val); static T Cos(T _val); static T Exp(T _val); static T FAbs(T _val); static T Floor(T _val); static T FMod (T _x, T _y); static T InvSqrt(T _val); static T Log(T _val); static T Log2(T _val); static T Log10(T _val); static T Pow(T _base, T _exponent); static T Sin(T _val); static T Sqr(T _val); static T Sqrt(T _val); static T Tan(T _val); }; int32_t getAngleBetween(const Location& loc1, const Location& loc2); Location getFacing(const Location& loc, const int32_t angle); int32_t getAngleBetween(const ExactModelCoordinate& emc1, const ExactModelCoordinate& emc2); ExactModelCoordinate getFacing(const ExactModelCoordinate& emc, const int32_t angle); typedef Math Mathf; typedef Math Mathd; %template(Mathf) Math; %template(Mathd) Math; } fifengine-0.4.1/engine/core/util/math/matrix.h000066400000000000000000000276561304641216200212450ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ /*************************************************************************** * Includes some heavy copying from mathgl-pp project * * (http://sourceforge.net/projects/mathgl-pp/) * ***************************************************************************/ #ifndef FIFE_UTIL_MATRIX_H #define FIFE_UTIL_MATRIX_H // Standard C++ library includes #include #include // Platform specific includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/fife_stdint.h" #include "util/structures/point.h" #include "fife_math.h" namespace FIFE { /** Minimal matrix class to assist in view 3d calculations */ template class Matrix { public: Matrix() {} template friend class Matrix; template Matrix(const Matrix& mat) { memmove(m, mat.m, 16*sizeof(T)); } ~Matrix() {} /** Adjoint method inverse, constant time inversion implementation */ Matrix inverse() const { Matrix ret(adjoint()); T determinant = m0*ret[0] + m1*ret[4] + m2*ret[8] + m3*ret[12]; assert(determinant!=0 && "Singular matrix has no inverse"); ret/=determinant; return ret; } /** Divide this matrix by a scalar */ inline Matrix& operator/= (T val) { for (register unsigned i = 0; i < 16; ++i) m[i] /= val; return *this; } /** Get the adjoint matrix */ Matrix adjoint() const { Matrix ret; ret[0] = cofactorm0(); ret[1] = -cofactorm4(); ret[2] = cofactorm8(); ret[3] = -cofactorm12(); ret[4] = -cofactorm1(); ret[5] = cofactorm5(); ret[6] = -cofactorm9(); ret[7] = cofactorm13(); ret[8] = cofactorm2(); ret[9] = -cofactorm6(); ret[10] = cofactorm10(); ret[11] = -cofactorm14(); ret[12] = -cofactorm3(); ret[13] = cofactorm7(); ret[14] = -cofactorm11(); ret[15] = cofactorm15(); return ret; } /** Make this a rotation matrix */ inline Matrix& loadRotate(T angle, T x, T y, T z) { register T magSqr = x*x + y*y + z*z; if (magSqr != 1.0) { register T mag = Math::Sqrt(magSqr); x/=mag; y/=mag; z/=mag; } T c = Math::Cos(angle*Math::pi()/180); T s = Math::Sin(angle*Math::pi()/180); m0 = x*x*(1-c)+c; m1 = y*x*(1-c)+z*s; m2 = z*x*(1-c)-y*s; m3 = 0; m4 = x*y*(1-c)-z*s; m5 = y*y*(1-c)+c; m6 = z*y*(1-c)+x*s; m7 = 0; m8 = x*z*(1-c)+y*s; m9 = y*z*(1-c)-x*s; m10 = z*z*(1-c)+c; m11 = 0; m12 = 0; m13 = 0; m14 = 0; m15 = 1; return *this; } /** Apply scale into this matrix */ inline Matrix& applyScale(T x, T y, T z) { static Matrix temp; temp.loadScale(x,y,z); *this = temp.mult4by4(*this); return *this; } /** Make this a scale matrix */ inline Matrix& loadScale(T x, T y, T z = 1) { m0 = x; m4 = 0; m8 = 0; m12 = 0; m1 = 0; m5 = y; m9 = 0; m13 = 0; m2 = 0; m6 = 0; m10 = z; m14 = 0; m3 = 0; m7 = 0; m11 = 0; m15 = 1; return *this; } /** Apply translation into this matrix */ inline Matrix& applyTranslate(T x, T y, T z) { static Matrix temp; temp.loadTranslate(x,y,z); *this = temp.mult4by4(*this); return *this; } /** Make this a translation matrix */ inline Matrix& loadTranslate( const T x, const T y, const T z) { m0 = 1; m4 = 0; m8 = 0; m12 = x; m1 = 0; m5 = 1; m9 = 0; m13 = y; m2 = 0; m6 = 0; m10 = 1; m14 = z; m3 = 0; m7 = 0; m11 = 0; m15 = 1; return *this; } /** Transform given point using this matrix */ inline PointType3D operator* (const PointType3D& vec) { return PointType3D ( vec.x * m0 + vec.y * m4 + vec.z * m8 + m12, vec.x * m1 + vec.y * m5 + vec.z * m9 + m13, vec.x * m2 + vec.y * m6 + vec.z * m10 + m14 ); } /** Direct access to the matrix elements, just remember they are in column major format!! */ inline T& operator[] (int32_t ind) { assert(ind > -1 && ind < 16); return m[ind]; } inline const T& operator[] (int32_t ind) const { assert(ind > -1 && ind < 16); return m[ind]; } /** Apply the matrix dot product to this matrix */ inline Matrix& mult3by3(const Matrix& mat) { Matrix temp(*this); m0 = temp.m0*mat.m0+temp.m4*mat.m1+temp.m8*mat.m2; m4 = temp.m0*mat.m4+temp.m4*mat.m5+temp.m8*mat.m6; m8 = temp.m0*mat.m8+temp.m4*mat.m9+temp.m8*mat.m10; m1 = temp.m1*mat.m0+temp.m5*mat.m1+temp.m9*mat.m2; m5 = temp.m1*mat.m4+temp.m5*mat.m5+temp.m9*mat.m6; m9 = temp.m1*mat.m8+temp.m5*mat.m9+temp.m9*mat.m10; m2 = temp.m2*mat.m0+temp.m6*mat.m1+temp.m10*mat.m2; m6 = temp.m2*mat.m4+temp.m6*mat.m5+temp.m10*mat.m6; m10 = temp.m2*mat.m8+temp.m6*mat.m9+temp.m10*mat.m10; m3 = temp.m3*mat.m0+temp.m7*mat.m1+temp.m11*mat.m2; m7 = temp.m3*mat.m4+temp.m7*mat.m5+temp.m11*mat.m6; m11 = temp.m3*mat.m8+temp.m7*mat.m9+temp.m11*mat.m10; return *this; } /** this->Rmult4by4(temp) == [temp] X [*this] **/ /** also equal to temp->mult4by4(*this) **/ inline Matrix& Rmult4by4(const Matrix& mat) { Matrix temp(*this); m0 = mat.m0*temp.m0+mat.m4*temp.m1+mat.m8*temp.m2+mat.m12*temp.m3; m4 = mat.m0*temp.m4+mat.m4*temp.m5+mat.m8*temp.m6+mat.m12*temp.m7; m8 = mat.m0*temp.m8+mat.m4*temp.m9+mat.m8*temp.m10+mat.m12*temp.m11; m12 = mat.m0*temp.m12+mat.m4*temp.m13+mat.m8*temp.m14+mat.m12*temp.m15; m1 = mat.m1*temp.m0 + mat.m5*temp.m1 + mat.m9*temp.m2+mat.m13*temp.m3; m5 = mat.m1*temp.m4 + mat.m5*temp.m5 + mat.m9*temp.m6+mat.m13*temp.m7; m9 = mat.m1*temp.m8 + mat.m5*temp.m9 + mat.m9*temp.m10+mat.m13*temp.m11; m13 = mat.m1*temp.m12+ mat.m5*temp.m13 + mat.m9*temp.m14+mat.m13*temp.m15; m2 = mat.m2*temp.m0+mat.m6*temp.m1+mat.m10*temp.m2+mat.m14*temp.m3; m6 = mat.m2*temp.m4+mat.m6*temp.m5+mat.m10*temp.m6+mat.m14*temp.m7; m10 = mat.m2*temp.m8+mat.m6*temp.m9+mat.m10*temp.m10+mat.m14*temp.m11; m14 = mat.m2*temp.m12+mat.m6*temp.m13+mat.m10*temp.m14+mat.m14*temp.m15; m3 = mat.m3*temp.m0+mat.m7*temp.m1+mat.m11*temp.m2+mat.m15*temp.m3; m7 = mat.m3*temp.m4+mat.m7*temp.m5+mat.m11*temp.m6+mat.m15*temp.m7; m11 = mat.m3*temp.m8+mat.m7*temp.m9+mat.m11*temp.m10+mat.m15*temp.m11; m15 = mat.m3*temp.m12+mat.m7*temp.m13+mat.m11*temp.m14+mat.m15*temp.m15; return *this; } inline Matrix& mult4by4(const Matrix& mat) { Matrix temp(*this); m0 = temp.m0*mat.m0+temp.m4*mat.m1+temp.m8*mat.m2+temp.m12*mat.m3; m4 = temp.m0*mat.m4+temp.m4*mat.m5+temp.m8*mat.m6+temp.m12*mat.m7; m8 = temp.m0*mat.m8+temp.m4*mat.m9+temp.m8*mat.m10+temp.m12*mat.m11; m12 = temp.m0*mat.m12+temp.m4*mat.m13+temp.m8*mat.m14+temp.m12*mat.m15; m1 = temp.m1*mat.m0 + temp.m5*mat.m1 + temp.m9*mat.m2+temp.m13*mat.m3; m5 = temp.m1*mat.m4 + temp.m5*mat.m5 + temp.m9*mat.m6+temp.m13*mat.m7; m9 = temp.m1*mat.m8 + temp.m5*mat.m9 + temp.m9*mat.m10+temp.m13*mat.m11; m13 = temp.m1*mat.m12+ temp.m5*mat.m13 + temp.m9*mat.m14+temp.m13*mat.m15; m2 = temp.m2*mat.m0+temp.m6*mat.m1+temp.m10*mat.m2+temp.m14*mat.m3; m6 = temp.m2*mat.m4+temp.m6*mat.m5+temp.m10*mat.m6+temp.m14*mat.m7; m10 = temp.m2*mat.m8+temp.m6*mat.m9+temp.m10*mat.m10+temp.m14*mat.m11; m14 = temp.m2*mat.m12+temp.m6*mat.m13+temp.m10*mat.m14+temp.m14*mat.m15; m3 = temp.m3*mat.m0+temp.m7*mat.m1+temp.m11*mat.m2+temp.m15*mat.m3; m7 = temp.m3*mat.m4+temp.m7*mat.m5+temp.m11*mat.m6+temp.m15*mat.m7; m11 = temp.m3*mat.m8+temp.m7*mat.m9+temp.m11*mat.m10+temp.m15*mat.m11; m15 = temp.m3*mat.m12+temp.m7*mat.m13+temp.m11*mat.m14+temp.m15*mat.m15; return *this; } Matrix& applyRotate(T angle, T x, T y, T z) { static Matrix temp; temp.loadRotate(angle,x,y,z); *this = temp.mult4by4(*this); return *this; } private: #define cofactor_maker(f1,mj1,mi1, f2,mj2,mi2, f3,mj3,mi3) \ f1*(mj1*mi1-mj2*mi3) + f2*(mj2*mi2-mj3*mi1) + f3*(mj3*mi3-mj1*mi2) inline T cofactorm0() const { return cofactor_maker(m5,m10,m15, m6,m11,m13, m7,m9,m14); } inline T cofactorm1() const { return cofactor_maker(m6,m11,m12, m7,m8,m14, m4,m10,m15); } inline T cofactorm2() const { return cofactor_maker(m7,m8,m13, m4,m9,m15, m5,m11,m12); } inline T cofactorm3() const { return cofactor_maker(m4,m9,m14, m5,m10,m12, m6,m8,m13); } inline T cofactorm4() const { return cofactor_maker(m9,m14,m3, m10,m15,m1, m11,m13,m2); } inline T cofactorm5() const { return cofactor_maker(m10,m15,m0, m11,m12,m2, m8,m14,m3); } inline T cofactorm6() const { return cofactor_maker(m11,m12,m1, m8,m13,m3, m9,m15,m0); } inline T cofactorm7() const { return cofactor_maker(m8,m13,m2, m9,m14,m0, m10,m12,m1); } inline T cofactorm8() const { return cofactor_maker(m13,m2,m7, m14,m3,m5, m15,m1,m6); } inline T cofactorm9() const { return cofactor_maker(m14,m13,m4, m15,m0,m6, m12,m2,m7); } inline T cofactorm10() const { return cofactor_maker(m15,m0,m5, m12,m1,m7, m13,m3,m4); } inline T cofactorm11() const { return cofactor_maker(m12,m1,m6, m13,m2,m4, m14,m0,m5); } inline T cofactorm12() const { return cofactor_maker(m1,m6,m11, m2,m7,m9, m3,m5,m10); } inline T cofactorm13() const { return cofactor_maker(m2,m7,m8, m3,m4,m10, m10,m6,m11); } inline T cofactorm14() const { return cofactor_maker(m3,m4,m9, m0,m5,m11, m1,m7,m8); } inline T cofactorm15() const { return cofactor_maker(m0,m5,m10, m1,m6,m8, m2,m4,m9); } public: union { T m[16]; struct { T m0,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15; }; }; }; typedef Matrix DoubleMatrix; typedef Matrix IntMatrix; /** Print coords of the Matrix to a stream */ template std::ostream& operator<<(std::ostream& os, const Matrix& m) { return os << "\n|" << m[0] << "," << m[4] << "," << m[8] << "," << m[12] << "|\n" << \ "|" << m[1] << "," << m[5] << "," << m[9] << "," << m[13] << "|\n" << \ "|" << m[2] << "," << m[6] << "," << m[10] << "," << m[14] << "|\n" << \ "|" << m[3] << "," << m[7] << "," << m[11] << "," << m[15] << "|\n"; } } #endif fifengine-0.4.1/engine/core/util/resource/000077500000000000000000000000001304641216200204465ustar00rootroot00000000000000fifengine-0.4.1/engine/core/util/resource/resource.cpp000066400000000000000000000035621304641216200230070ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "resource.h" namespace FIFE { ResourceHandle IResource::m_curhandle = 1; }//FIFE fifengine-0.4.1/engine/core/util/resource/resource.h000066400000000000000000000056611304641216200224560ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_RESOURE_H #define FIFE_RESOURE_H // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/sharedptr.h" namespace FIFE { typedef std::size_t ResourceHandle; class IResource; class IResourceLoader { public: IResourceLoader() { } virtual ~IResourceLoader() { } virtual void load(IResource* resource) = 0; }; class IResource { public: enum ResourceState { RES_INVALID = 0, RES_NOT_LOADED, RES_LOADED }; IResource(const std::string& name, IResourceLoader* loader = 0) : m_name(name), m_loader(loader), m_state(RES_NOT_LOADED), m_handle(m_curhandle++) { } virtual ~IResource() { } virtual const std::string& getName() { return m_name; } ResourceHandle getHandle() { return m_handle; } virtual ResourceState getState() { return m_state; } virtual void setState(const ResourceState& state) { m_state = state; } virtual size_t getSize() = 0; virtual void load() = 0; virtual void free() = 0; protected: std::string m_name; IResourceLoader* m_loader; ResourceState m_state; private: ResourceHandle m_handle; static ResourceHandle m_curhandle; }; typedef SharedPtr ResourcePtr; } //FIFE #endif fifengine-0.4.1/engine/core/util/resource/resource.i000066400000000000000000000067071304641216200224610ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "util/base/sharedptr.h" #include "util/resource/resource.h" #include "util/resource/resourcemanager.h" %} namespace FIFE { // %warnfilter(473) ResourceLoader; // filter out "returning a pointer or reference in a director method is not recommended" // %feature("director") ResourceLoader; // class ResourceLoader { // public: // virtual ~ResourceLoader() { }; // virtual IResource* loadResource(const ResourceLocation& location) = 0; // }; typedef std::size_t ResourceHandle; class IResource; class IResourceLoader { public: virtual ~IResourceLoader() { } virtual void load(IResource* resource) = 0; }; class IResource { public: enum ResourceState { RES_NOT_LOADED, RES_LOADED }; virtual ~IResource(); virtual const std::string& getName(); ResourceHandle getHandle(); virtual ResourceState getState(); virtual void setState(const ResourceState& state); virtual size_t getSize() = 0; virtual void load() = 0; virtual void free() = 0; }; template class SharedPtr { public: SharedPtr(); template explicit SharedPtr(U *ptr); SharedPtr(const SharedPtr& rhs); template SharedPtr(const SharedPtr& rhs); ~SharedPtr(); inline T& operator*() const; inline T* operator->() const; inline T* get() const; inline void reset(T* ptr = 0); inline uint32_t useCount() const; inline uint32_t* useCountPtr() const; inline bool unique() const; operator bool(); }; typedef SharedPtr ResourcePtr; %template(SharedResourcePointer) SharedPtr; class IResourceManager { public: virtual size_t getMemoryUsed() const = 0; virtual size_t getTotalResourcesCreated() const = 0; virtual size_t getTotalResourcesLoaded() const = 0; virtual size_t getTotalResources() const = 0; }; } fifengine-0.4.1/engine/core/util/resource/resourcemanager.h000066400000000000000000000067741304641216200240170ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_RESOURE_MANAGER_H #define FIFE_RESOURE_MANAGER_H // Standard C++ library includes #include #include #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "resource.h" namespace FIFE { /** IResourceManager * * An interface for managing resources. * * @see IResource * @see IResourceLoader * */ class IResourceManager { public: /** Default constructor. */ IResourceManager() { } /** destructor */ virtual ~IResourceManager() { } /** Gets the total amount of memory used by resources * * This function uses the IResource's getSize() function * to calculate the total memory used. It does not include * memory used by the internal resource manager book keeping * structures. This value is only accurate if the resources * getSize() function returns an accurate result. * * @return Total memory used * */ virtual size_t getMemoryUsed() const = 0; /** Returns the number of unloaded resources * * Gets the total number of resources created but not loaded. * These resources have been defined in the resource manager * but have yet to be loaded from disk. * * @return Total resources created * */ virtual size_t getTotalResourcesCreated() const = 0; /** Returns the number of loaded resources * * Gets the total number of resources created and loaded. * These resources have been defined in the resource manager * have been loaded from disk. * * @return Total resources loaded * */ virtual size_t getTotalResourcesLoaded() const = 0; /** Returns the number of defined resources * * Gets the total number of resources managed by the manager. * * @return Total resources managed * */ virtual size_t getTotalResources() const = 0; }; } //FIFE #endif fifengine-0.4.1/engine/core/util/structures/000077500000000000000000000000001304641216200210425ustar00rootroot00000000000000fifengine-0.4.1/engine/core/util/structures/point.h000066400000000000000000000213411304641216200223450ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_VIDEO_POINT_H #define FIFE_VIDEO_POINT_H // Standard C++ library includes #include #include // Platform specific includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/fife_stdint.h" #include "util/math/fife_math.h" namespace FIFE { /** A 2D Point * * This is a small helper class to aid in 2d vector arithmetics. * @see Rect */ template class PointType2D { public: union { T val[2]; struct { T x,y; }; }; /** Constructor * * Creates a with 0 as default values. */ explicit PointType2D(T _x = 0, T _y = 0): x(_x), y(_y) { } /** Copy Constructor */ PointType2D(const PointType2D& rhs): x(rhs.x), y(rhs.y) { } /** Vector addition */ PointType2D operator+(const PointType2D& p) const { return PointType2D(x + p.x, y + p.y); } /** Vector substraction */ PointType2D operator-(const PointType2D& p) const { return PointType2D(x - p.x, y - p.y); } /** Vector inplace addition */ PointType2D& operator+=(const PointType2D& p) { x += p.x; y += p.y; return *this; } /** Vector inplace substraction */ PointType2D& operator-=(const PointType2D& p) { x -= p.x; y -= p.y; return *this; } /** Scalar multiplication with an integer value */ PointType2D operator*(const T& i) const { return PointType2D(x * i, y * i); } /** Scalar division with an integer value */ PointType2D operator/(const T& i) const { return PointType2D(x / i, y / i); } /** Equality comparision */ bool operator==(const PointType2D& p) const { return x == p.x && y == p.y; } /** Equality comparision */ bool operator!=(const PointType2D& p) const { return !(x == p.x && y == p.y); } /** Return length */ T length() const { double sq; sq = x*x + y*y; return static_cast(Mathd::Sqrt(sq)); } /** Normalizes the point */ void normalize() { T invLength = static_cast(1.0/length()); //TODO: get rid of this static cast if (invLength > static_cast(Mathd::zeroTolerance())) { x = x * invLength; y = y * invLength; } else { x = 0; y = 0; } } /** Rotates the point around the origin */ void rotate(T angle){ //TODO: get rid of this static cast T theta = (angle * static_cast(Mathd::pi()))/180; T costheta = static_cast(Mathd::Cos(theta)); T sintheta = static_cast(Mathd::Sin(theta)); T nx = x; T ny = y; x = costheta * nx - sintheta * ny; y = sintheta * nx + costheta * ny; } /** Rotates the point around an origin */ void rotate(const PointType2D& origin, T angle){ //TODO: get rid of this static cast T theta = (angle * static_cast(Mathd::pi()))/180; T costheta = static_cast(Mathd::Cos(theta)); T sintheta = static_cast(Mathd::Sin(theta)); T nx = x - origin.x; T ny = y - origin.y; x = costheta * nx - sintheta * ny; y = sintheta * nx + costheta * ny; } /** Sets the x and y coordinate of the 2D point */ void set(T _x, T _y) { x = _x; y = _y; } inline T& operator[] (int32_t ind) { assert(ind > -1 && ind < 2); return val[ind]; } }; /** Print coords of the Point to a stream */ template std::ostream& operator<<(std::ostream& os, const PointType2D& p) { return os << "(" << p.x << ":" << p.y << ")"; } typedef PointType2D Point; typedef PointType2D DoublePoint; /** A 3D Point * * This is a small helper class to aid in 3d vector arithmetics. * @see Rect */ template class PointType3D { public: union { T val[3]; struct { T x,y,z; }; }; /** Constructor * * Creates a with 0 as default values. */ explicit PointType3D(T _x = 0, T _y = 0, T _z = 0): x(_x), y(_y), z(_z) { } /** Copy Constructor */ PointType3D(const PointType3D& rhs): x(rhs.x), y(rhs.y), z(rhs.z) { } /** Vector addition */ PointType3D operator+(const PointType3D& p) const { return PointType3D(x + p.x, y + p.y, z + p.z); } /** Vector substraction */ PointType3D operator-(const PointType3D& p) const { return PointType3D(x - p.x, y - p.y, z - p.z); } /** Vector inplace addition */ PointType3D& operator+=(const PointType3D& p) { x += p.x; y += p.y; z += p.z; return *this; } /** Vector inplace substraction */ PointType3D& operator-=(const PointType3D& p) { x -= p.x; y -= p.y; z -= p.z; return *this; } /** Scalar multiplication with an integer value */ PointType3D operator*(const T& i) const { return PointType3D(x * i, y * i, z * i); } /** Scalar division with an integer value */ PointType3D operator/(const T& i) const { return PointType3D(x / i, y / i, z / i); } /** Equality comparision */ bool operator==(const PointType3D& p) const { /*return x == p.x && y == p.y && z == p.z;*/ return Mathd::Equal(x, p.x) && Mathd::Equal(y, p.y) && Mathd::Equal(z, p.z); } /** Equality comparision */ bool operator!=(const PointType3D& p) const { return !(Mathd::Equal(x, p.x) && Mathd::Equal(y, p.y) && Mathd::Equal(z, p.z)); } /** Return length */ T length() const { double sq; sq = x*x + y*y + z*z; return static_cast(Mathd::Sqrt(sq)); } /** Normalizes the point */ void normalize() { T invLength = static_cast(1.0/length()); //TODO: get rid of this static cast if (invLength > static_cast(Mathd::zeroTolerance())) { x = x * invLength; y = y * invLength; z = z * invLength; } else { x = 0; y = 0; z = 0; } } /** Sets the x, y and z coordinates of the 3D point */ void set(T _x, T _y, T _z) { x = _x; y = _y; z = _z; } inline T& operator[] (int32_t ind) { assert(ind > -1 && ind < 3); return val[ind]; } }; /** Print coords of the Point to a stream */ template std::ostream& operator<<(std::ostream& os, const PointType3D& p) { return os << "(" << p.x << ":" << p.y << ":" << p.z << ")"; } typedef PointType3D Point3D; typedef PointType3D DoublePoint3D; /** Convert from 2D double point to 2D int32_t point */ inline Point doublePt2intPt(DoublePoint pt) { Point tmp(static_cast(round(pt.x)), static_cast(round(pt.y))); return tmp; } /** Convert from 3D double point to 3D int32_t point */ inline Point3D doublePt2intPt(DoublePoint3D pt) { Point3D tmp(static_cast(round(pt.x)), static_cast(round(pt.y)), static_cast(round(pt.z))); return tmp; } /** Convert from 2D int32_t point to 2D double point */ inline DoublePoint intPt2doublePt(Point pt) { DoublePoint tmp(static_cast(pt.x), static_cast(pt.y)); return tmp; } /** Convert from 3D int32_t point to 3D double point */ inline DoublePoint3D intPt2doublePt(Point3D pt) { DoublePoint3D tmp(static_cast(pt.x), static_cast(pt.y), static_cast(pt.z)); return tmp; } } #endif fifengine-0.4.1/engine/core/util/structures/priorityqueue.h000066400000000000000000000205071304641216200241450ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_SOLVER_INDEXEDPQ_H #define FIFE_SOLVER_INDEXEDPQ_H #include #include namespace FIFE { /** A pq which stores index-value pairs for elements. * * This acts as a normal PQ but stores some extra information about the * elements that it's storing, namely a special unique index. */ template class PriorityQueue { public: /** Used for element ordering. * */ enum Ordering { Ascending, //!< lowest priority first. Descending //!< highest priority first. }; typedef std::pair value_type; /** Constructor * */ PriorityQueue(void) : m_ordering(Ascending) { } /** Constructor * * @param ordering The ordering the priority queue should use. */ PriorityQueue(const Ordering ordering) : m_ordering(ordering) { } /** Pushes a new element onto the queue. * * The element is pushed onto the queue and then moved up the queue until it's * in the correct position by priority. * * @param element Of type value_type which contains both the index and the priority of the element. */ void pushElement(const value_type& element); /** Pops the element with the highest priority from the queue. * * Removes and deletes the highest priority element. */ void popElement(void); /** Changes the priority of an element. * * Locates the element with the given index and changes it's priority to the given * priority, it then re-orders the priority queue to take account of this new information. * * @param index The index of the element to change the priority of. * @param newPriority The new priority of the element. * @return True if the element could be found, false otherwise. */ bool changeElementPriority(const index_type& index, const priority_type& newPriority); /** Removes all elements from the priority queue. * */ void clear(void); /** Retrieves the element with the highest priority. * * This function will generate an assertion error if the pq is * empty. * * @return A const reference to the highest priority element. */ const value_type getPriorityElement(void) const { assert(!empty()); return m_elements.front(); } /** Determines whether the queue is currently empty. * * @return true if it is empty, false otherwise. */ bool empty(void) const { return m_elements.empty(); } /** Returns the current size of the queue. * */ size_t size(void) const { return m_elements.size(); } private: typedef std::list ElementList; typedef typename ElementList::iterator ElementListIt; typedef typename ElementList::const_iterator ElementListConstIt; //A list of valuetype pairs that represents the pq. ElementList m_elements; //The order to use when sorting the pq. Ordering m_ordering; /** Orders a PQ element up the list. * * @param i An iterator representing the element in the list to be sorted up. */ void orderUp(ElementListIt i); /** Orders a PQ element up the list. * * @param entry A const reference to a value_type which represents the element to be added to the * pq. */ void orderUp(const value_type& entry); /** Orders a PQ element down the list. * * @param i An iterator representing the element in the PQ to order down. */ void orderDown(ElementListIt i); /** Retrieves the iterator to the element with the given index. * * @param index A const reference to the index to find. */ ElementListIt getElementIterator(const index_type& index) { for(ElementListIt i = m_elements.begin(); i != m_elements.end(); ++i) { if(i->first == index) { return i; } } return m_elements.end(); } /** The comparison function, used to compare two elements. * * @param a The l-operand of the comparison operation. * @param b The r-operand of the comparison operation. * @return An integer representing the result of the comparison operation. 1 being a is greather than b, * -1 being a is less than b and 0 meaning that they're equal. */ int32_t compare(const value_type& a, const value_type& b); }; } template void FIFE::PriorityQueue::pushElement(const value_type& element) { if(empty()) { m_elements.push_front(element); } else { orderUp(element); } } template void FIFE::PriorityQueue::popElement(void) { if(!empty()) { m_elements.pop_front(); } } template bool FIFE::PriorityQueue::changeElementPriority(const index_type& index, const priority_type& newPriority) { ElementListIt i = getElementIterator(index); if(i == m_elements.end()) { return false; } int32_t compare_res = compare(value_type(index, newPriority), (*i)); i->second = newPriority; if(compare_res > 0 && i != m_elements.begin()) { orderDown(i); } else if(compare_res < 0) { orderUp(i); } return true; } template void FIFE::PriorityQueue::clear(void) { m_elements.clear(); } template void FIFE::PriorityQueue::orderUp(ElementListIt i) { assert(i != m_elements.end() && L"Invalid iterator passed to function"); value_type vt = (*i); i = m_elements.erase(i); while(i != m_elements.end()) { if(compare(vt, (*i)) > 0) { m_elements.insert(i, vt); return; } ++i; } m_elements.push_back(vt); } template void FIFE::PriorityQueue::orderUp(const value_type& val) { for(ElementListIt i = m_elements.begin(); i != m_elements.end(); ++i) { assert(val.first != i->first); if(compare(val, (*i)) > 0) { assert(val.first != i->first); m_elements.insert(i, val); return; } } m_elements.push_back(val); } template void FIFE::PriorityQueue::orderDown(ElementListIt i) { assert(i != m_elements.end()); value_type vt = (*i); i = m_elements.erase(i); if(i == m_elements.end()) { --i; } ElementListIt j = i; ++j; while(i != m_elements.begin()) { if(compare(vt, (*i)) < 0) { m_elements.insert(j, vt); return; } --i; --j; } m_elements.push_front(vt); } template int32_t FIFE::PriorityQueue::compare(const value_type& a, const value_type& b) { if(m_ordering == Descending) { if(a.second > b.second) { return 1; } else if(b.second > a.second) { return -1; } } else { if(a.second < b.second) { return 1; } else if(b.second < a.second) { return -1; } } return 0; } #endif fifengine-0.4.1/engine/core/util/structures/purge.h000066400000000000000000000043441304641216200223420ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Delete pointers in an STL sequence container #ifndef PURGE_H #define PURGE_H #include template void purge(Seq& c) { typename Seq::iterator i; for(i = c.begin(); i != c.end(); i++) { delete *i; *i = 0; } } // Iterator version: template void purge(InpIt begin, InpIt end) { while(begin != end) { delete *begin; *begin = 0; begin++; } } template void purge_map(Seq& c) { typename Seq::iterator i; for(i = c.begin(); i != c.end(); i++) { delete i->second; i->second = 0; } } // Iterator version: template void purge_map(InpIt begin, InpIt end) { while(begin != end) { delete begin->second; begin->second = 0; begin++; } } #endif // PURGE_H fifengine-0.4.1/engine/core/util/structures/quadtree.h000066400000000000000000000267731304641216200230440ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_UTIL_QUADTREE_H #define FIFE_UTIL_QUADTREE_H // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "rect.h" namespace FIFE { /** QuadTree Node */ template class QuadNode { protected: QuadNode *m_parent; QuadNode *m_nodes[4]; int32_t m_x,m_y,m_size; DataType m_data; public: /** Create a new QuadNode * @param parent The parent QuadNode this node is contained in or null. * @param x The X position of this QuadNode. * @param y The Y position of this QuadNode. * @param size The width and height of this QuadNode. */ QuadNode(QuadNode* parent, int32_t x, int32_t y, int32_t size) : m_parent(parent),m_x(x),m_y(y),m_size(size),m_data() { m_nodes[0] = m_nodes[1] = m_nodes[2] = m_nodes[3] = 0L; } ~QuadNode() { delete m_nodes[0]; delete m_nodes[1]; delete m_nodes[2]; delete m_nodes[3]; } /** Find a container node for a given rectangle. * This guarantees to return a Node with the following * properties: * 1.) The node contains the rectangle (as defined by the contains * function). 2.) All subnodes can not contain the rectangle or it has the MinimumSize. * 3.) In case these properties can only be fulfilled by extending the tree upwards, * that is by creating a new root node - this function will return null. * * This function will extend the tree automatically so that this guarantee * can be fulfilled. */ QuadNode* find_container(int32_t x, int32_t y, int32_t w, int32_t h); QuadNode* find_container(const Rect& rect) { return find_container(rect.x,rect.y,rect.w,rect.h); } /** Apply a visitor recursively to the QuadTree * A visitor is an object which has a @c visit method which * takes as parameters a pointer to a @c QuadNode and an integer. * The integer is the depth of the given node. * If the method returns @c true it is applied recursivly to all * existing subnodes with a depth increased by one. * The application happens in Z order (top left, top right, bottom * left and finally bottom right). */ template void apply_visitor(Visitor& visitor, int32_t d = 0) { if( !visitor.visit(this, d) ) return; if( m_nodes[0] ) m_nodes[0]->apply_visitor(visitor, d + 1); if( m_nodes[1] ) m_nodes[1]->apply_visitor(visitor, d + 1); if( m_nodes[2] ) m_nodes[2]->apply_visitor(visitor, d + 1); if( m_nodes[3] ) m_nodes[3]->apply_visitor(visitor, d + 1); } /** Return the X position of the node. */ int32_t x() const { return m_x; }; /** Return the Y position of the node. */ int32_t y() const { return m_y; }; /** Return the size (width and height) of the node. */ int32_t size() const { return m_size; }; /** Return a reference to the data of the node. */ DataType& data() { return m_data; }; /** Check whether a rectangle is contained in the node. * A rectangle is contained in a node, iff: * @code * x >= x() and x + w < x() + size() and y >= y() and y + h < y() + size() * @endcode * That is the top and left borders are inclusive, but the right and bottom * borders are exclusive. */ bool contains(int32_t x, int32_t y, int32_t w, int32_t h) const; /// Expand the subnodes - only needed for debugging/profiling worst cases. void splice(); /** Return the parent node */ QuadNode* parent() { return m_parent; }; /** Create a new parent node for a rectangle * This will create a new parent node end expand the tree so that * the given rectangle will eventually be contained after enough calls * of this function. */ QuadNode* create_parent(int32_t x, int32_t y, int32_t w, int32_t h); protected: int32_t subnode(int32_t x, int32_t y, int32_t w, int32_t h) const; }; /** Dynamic QuadTree * A space partitioning tree automatically expanding to adjust * to any object size put into the data structure. */ template class QuadTree { public: typedef QuadNode Node; /** Create a new QuadTree * @param x The X position of the starting node. * @param y The Y position of the starting node. * @param starting_size The width and height of the starting node. */ QuadTree(int32_t x = 0, int32_t y = 0, int32_t starting_size = MinimumSize) { assert(starting_size>1); m_cursor = m_root = new Node(0L,x,y,starting_size); } ~QuadTree() { assert( m_root->parent() == 0 ); delete m_root; } /** Find a container node for a given rectangle. * This guarantees to return a Node with the following * properties: * 1.) The node contains the rectangle (as defined by the contains * function). 2.) All subnodes can not contain the rectangle or it has the MinimumSize. * This function will extend the tree automatically so that this guarantee * can be fulfilled. * This function is optimized for sequential access. This means accessing different rectangles * that are 'near' to each other will be fast. * @warning If you put different sized objects in (for example) lists in the quadnode, * the returned node will @b not contain all objects which might intersect with the given * rectangle. */ Node* find_container(int32_t x, int32_t y, int32_t w, int32_t h); Node* find_container(const Rect& rect) { return find_container(rect.x,rect.y,rect.w,rect.h); } /** Apply a visitor recursively to the QuadTree */ template Visitor& apply_visitor(Visitor& visitor) { m_root->apply_visitor(visitor,0); return visitor; } void clear() { int32_t x = m_root->x(); int32_t y = m_root->y(); int32_t s = m_root->size(); delete m_root; m_cursor = m_root = new Node(0L,x,y,s); } protected: Node *m_root; Node *m_cursor; }; template inline bool QuadNode::contains(int32_t x, int32_t y, int32_t w, int32_t h) const { if (x < m_x) return false; if (y < m_y) return false; if (x + w >= m_x + m_size) return false; if (y + h >= m_y + m_size) return false; return true; } template inline int32_t QuadNode::subnode(int32_t x, int32_t y, int32_t w, int32_t h) const { /* Very small performance impact - roughly 5% for the already very fast find_container function. */ //assert(contains(x,y,w,h)); if (x >= m_x + m_size/2) { if (y >= m_y + m_size/2) { return 3; } if (y + h < m_y + m_size/2) { return 1; } return -1; } if (x + w < m_x + m_size/2) { if (y >= m_y + m_size/2) { return 2; } if (y + h < m_y + m_size/2) { return 0; } } return -1; } template QuadNode* QuadNode::find_container(int32_t x, int32_t y, int32_t w, int32_t h) { if( !contains(x,y,w,h) ) { if (m_parent) { return m_parent->find_container(x,y,w,h); } return 0L; } if (m_size <= MinimumSize) { return this; } int32_t r = subnode(x,y,w,h); switch(r) { case -1: return this; case 0: if( m_nodes[0] == 0) { m_nodes[0] = new QuadNode(this,m_x,m_y,m_size/2); } return m_nodes[0]->find_container(x,y,w,h); case 1: if( m_nodes[1] == 0) { m_nodes[1] = new QuadNode(this,m_x + m_size/2,m_y,m_size/2); } return m_nodes[1]->find_container(x,y,w,h); case 2: if( m_nodes[2] == 0) { m_nodes[2] = new QuadNode(this,m_x,m_y + m_size/2,m_size/2); } return m_nodes[2]->find_container(x,y,w,h); case 3: if( m_nodes[3] == 0) { m_nodes[3] = new QuadNode(this,m_x + m_size/2,m_y + m_size/2,m_size/2); } return m_nodes[3]->find_container(x,y,w,h); default: assert("BUG in QuadTree !" == 0); return 0L; } } template QuadNode* QuadNode::create_parent(int32_t x, int32_t y, int32_t w, int32_t h) { /* If used only by the tree, these two are superfluous. */ if( contains(x,y,w,h) ) return this; if( m_parent ) return m_parent; if (x >= m_x) { if (y >= m_y) { // we are node 0 m_parent = new QuadNode(0L,m_x,m_y,m_size*2); m_parent->m_nodes[0] = this; return m_parent; } if (y + w < m_y + m_size) { // we are node 2 m_parent = new QuadNode(0L,m_x,m_y - m_size,m_size*2); m_parent->m_nodes[2] = this; return m_parent; } } if (x + h < m_x + m_size) { if (y >= m_y) { // we are node 1 m_parent = new QuadNode(0L,m_x-m_size,m_y,m_size*2); m_parent->m_nodes[1] = this; return m_parent; } if (y + w < m_y + m_size) { // we are node 3 m_parent = new QuadNode(0L,m_x-m_size,m_y - m_size,m_size*2); m_parent->m_nodes[3] = this; return m_parent; } } // It does not matter.... m_parent = new QuadNode(0L,m_x,m_y,m_size*2); m_parent->m_nodes[0] = this; return m_parent; } template void QuadNode::splice() { if (m_size <= MinimumSize) return; if( m_nodes[0] == 0) { m_nodes[0] = new QuadNode(this,m_x,m_y,m_size/2); } if( m_nodes[1] == 0) { m_nodes[1] = new QuadNode(this,m_x + m_size/2,m_y,m_size/2); } if( m_nodes[2] == 0) { m_nodes[2] = new QuadNode(this,m_x,m_y + m_size/2,m_size/2); } if( m_nodes[3] == 0) { m_nodes[3] = new QuadNode(this,m_x + m_size/2,m_y + m_size/2,m_size/2); } } template QuadNode* QuadTree::find_container(int32_t x, int32_t y, int32_t w, int32_t h) { m_cursor = m_cursor->find_container(x,y,w,h); while( m_cursor == 0L ) { m_root = m_root->create_parent(x,y,w,h); m_cursor = m_root->find_container(x,y,w,h); } return m_cursor; } } #endif // QUADTREE_H fifengine-0.4.1/engine/core/util/structures/rect.h000066400000000000000000000174411304641216200221570ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ /*************************************************************************** Rectangle intersection code copied and modified from the guichan 0.4 source, which is released under the BSD license. Copyright (c) 2004, 2005, 2006 Olof Naessén and Per Larsson All rights reserved. * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the Guichan nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. For more Information about guichan see: http://guichan.sourceforge.net ****************************************************************************/ #ifndef FIFE_VIDEO_RECT_H #define FIFE_VIDEO_RECT_H // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "point.h" namespace FIFE { /** A Rectangle on screen. * * This is a small helper class used for screen coordinate arithmetics. * The same thoughts reasong using @b int32_t as value type as in Point apply. * * @see Point */ template class RectType { public: /** The X Coordinate. */ T x; /** The Y Coordinate. */ T y; /** Width of the rectangle. */ T w; /** Height of the rectangle. */ T h; /** Constructor. * * Creates a new Rect with the values defaulting to 0. */ explicit RectType(T x = 0, T y = 0, T w = 0, T h = 0) : x(x), y(y), w(w), h(h) { } /** Constructor. * * Creates a new Rect of type T from the given Rect of type U */ template explicit RectType(const RectType& r) : x(static_cast(r.x)), y(static_cast(r.y)), w(static_cast(r.w)), h(static_cast(r.h)) { } /** The X coordinate of the right edge. */ T right() const; /** The Y coordinate of the bottom edge. */ T bottom() const; /** Equivalence operator. * * @param rect The rectangle to which this is compared. * @return True only if both rectangle values are all equal. */ bool operator==(const RectType& rect ) const; /** Checks whether a rectangle contains a Point. * * @param point The point that is checked. * @return True if the point lies inside the rectangle or on one of its borders. */ bool contains( const PointType2D& point ) const; /** Check whether two rectangles share some area. * * @param rect The other rectangle that is checked. * @return True, if and only if both rectangles have some covered area in common. * This includes edges that cover each other. * @note This operation is commutative. */ bool intersects( const RectType& rect ) const; /** Calculate rectangle intersection in place * * @param rect The other rectangle that is checked. * @return True, if and only if both rectangles have some covered area in common. * This includes edges that cover each other. */ bool intersectInplace( const RectType& rect ); }; /** Stream output operator. * * Useful for debugging purposes, this will output the coordinates * of the rectangle to the stream. */ template std::ostream& operator<<(std::ostream& os, const RectType& r) { return os << "("< inline T RectType::right() const { return x + w; } template inline T RectType::bottom() const { return y + h; } template inline bool RectType::operator==(const RectType& rect ) const { return x == rect.x && y == rect.y && w == rect.w && h == rect.h; } template inline bool RectType::contains( const PointType2D& point ) const { return (((point.x >= x) && (point.x <= x + w)) && ((point.y >= y) && (point.y <= y + h))); } template inline bool RectType::intersectInplace( const RectType& rectangle ) { x = x - rectangle.x; y = y - rectangle.y; if (x < 0) { w += x; x = 0; } if (y < 0) { h += y; y = 0; } if (x + w > rectangle.w) { w = rectangle.w - x; } if (y + h > rectangle.h) { h = rectangle.h - y; } x += rectangle.x; y += rectangle.y; if (w <= 0 || h <= 0) { h = 0; w = 0; return false; } return true; } template inline bool RectType::intersects( const RectType& rectangle ) const { T _x = x - rectangle.x; T _y = y - rectangle.y; T _w = w; T _h = h; if (_x < 0) { _w += _x; _x = 0; } if (_y < 0) { _h += _y; _y = 0; } if (_x + _w > rectangle.w) { _w = rectangle.w - _x; } if (_y + _h > rectangle.h) { _h = rectangle.h - _y; } if (_w <= 0 || _h <= 0) { return false; } return true; } typedef RectType Rect; typedef RectType FloatRect; typedef RectType DoubleRect; } #endif fifengine-0.4.1/engine/core/util/structures/utilstructures.i000066400000000000000000000105101304641216200243320ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %{ #include "util/structures/point.h" #include "util/structures/rect.h" %} namespace FIFE { template class PointType2D { public: T x; T y; explicit PointType2D(T _x = 0, T _y = 0); PointType2D(const PointType2D& rhs); PointType2D operator+(const PointType2D& p) const; PointType2D operator-(const PointType2D& p) const; PointType2D& operator+=(const PointType2D& p); PointType2D& operator-=(const PointType2D& p); PointType2D operator*(const T& i) const; PointType2D operator/(const T& i) const; bool operator==(const PointType2D& p) const; bool operator!=(const PointType2D& p) const; T length() const; void normalize(); void rotate(T angle); void rotate(const PointType2D& origin, T angle); void set(T _x, T _y); }; template std::ostream& operator<<(std::ostream& os, const PointType2D& p); typedef PointType2D Point; typedef PointType2D IntPoint; typedef PointType2D DoublePoint; typedef PointType2D IntPoint2D; typedef PointType2D DoublePoint2D; %template(Point) PointType2D; %template(DoublePoint) PointType2D; template class PointType3D { public: T x; T y; T z; explicit PointType3D(T _x = 0, T _y = 0, T _z = 0); PointType3D(const PointType3D& rhs); PointType3D operator+(const PointType3D& p) const; PointType3D operator-(const PointType3D& p) const; PointType3D& operator+=(const PointType3D& p); PointType3D& operator-=(const PointType3D& p); PointType3D operator*(const T& i) const; PointType3D operator/(const T& i) const; bool operator==(const PointType3D& p) const; bool operator!=(const PointType3D& p) const; T length() const; void normalize(); void set(T _x, T _y, T _z); }; template std::ostream& operator<<(std::ostream& os, const PointType3D& p); typedef PointType3D Point3D; typedef PointType3D IntPoint3D; typedef PointType3D DoublePoint3D; %template(Point3D) PointType3D; %template(DoublePoint3D) PointType3D; template class RectType { public: T x; T y; T w; T h; explicit RectType(T x = 0, T y = 0, T width = 0, T height = 0); T right() const; T bottom() const; bool operator==(const RectType& rect ) const; bool contains( const PointType2D& point ) const; bool intersects( const RectType& rect ) const; bool intersectInplace( const RectType& rect ); }; template std::ostream& operator<<(std::ostream&, const RectType&); typedef RectType Rect; typedef RectType FloatRect; typedef RectType DoubleRect; %template(Rect) RectType; %template(FloatRect) RectType; %template(DoubleRect) RectType; } fifengine-0.4.1/engine/core/util/time/000077500000000000000000000000001304641216200175555ustar00rootroot00000000000000fifengine-0.4.1/engine/core/util/time/timeevent.cpp000066400000000000000000000051131304641216200222610ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "timemanager.h" #include "timeevent.h" namespace FIFE { TimeEvent::TimeEvent(int32_t period): m_period(period), m_last_updated(TimeManager::instance()->getTime()) { } TimeEvent::~TimeEvent() { return; } void TimeEvent::managerUpdateEvent(uint32_t time) { int32_t time_delta = static_cast(time - m_last_updated); if (m_period < 0) { return; } else if (m_period == 0 || time_delta >= m_period) { updateEvent(time_delta); m_last_updated = time; } } void TimeEvent::setPeriod(int32_t period) { m_period = period; } int32_t TimeEvent::getPeriod() { return m_period; } uint32_t TimeEvent::getLastUpdateTime() { return m_last_updated; } void TimeEvent::setLastUpdateTime(uint32_t ms) { m_last_updated = ms; } } //FIFE fifengine-0.4.1/engine/core/util/time/timeevent.h000066400000000000000000000071141304641216200217310ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_TIMEVENT_H #define FIFE_TIMEVENT_H // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/fife_stdint.h" namespace FIFE { /** Interface for events to be registered with TimeManager. * * To register a class with TimeManager firstly derive a class * from this and override the updateEvent() function. updateEvent() * will be called periodically depending on the value of getPeriod() * which can be set using the constructor or setPeriod(). A value * of -1 will never be updated, 0 will updated every frame and a value * over 0 defines the number of milliseconds between updates. * * @see TimeManager */ class TimeEvent { public: /** Default constructor. * * @param period The period of the event. See class description. */ TimeEvent(int32_t period = -1); /** Destructor. * */ virtual ~TimeEvent(); /** Update function to be overridden by client. * * @param time Time delta. */ virtual void updateEvent(uint32_t time) = 0; /** Called by TimeManager to update the event. * * @param time Current time. Used To check if its time to update. */ void managerUpdateEvent(uint32_t time); /** Set the period of the event. * * @param period The period of the event. See class description. */ void setPeriod(int32_t period); /** Get the period of the event. * * @return The period of the event. See class description. */ int32_t getPeriod(); /** Get the last time the event was updated. * * @return Time of last update. */ uint32_t getLastUpdateTime(); /** Set the last time the event was updated. * * @param ms Time of last update. */ void setLastUpdateTime(uint32_t ms); private: // The period of the event. See the class description. int32_t m_period; // The last time the class was updated. uint32_t m_last_updated; }; }//FIFE #endif fifengine-0.4.1/engine/core/util/time/timeevent.i000066400000000000000000000035671304641216200217420ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "util/time/timeevent.h" %} namespace FIFE { %feature("director") TimeEvent; class TimeEvent { public: TimeEvent(int32_t period = -1); virtual ~TimeEvent(); virtual void updateEvent(uint32_t time) = 0; void setPeriod(int32_t period); int32_t getPeriod(); uint32_t getLastUpdateTime(); void setLastUpdateTime(uint32_t); }; } fifengine-0.4.1/engine/core/util/time/timemanager.cpp000066400000000000000000000075071304641216200225630ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include #include // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/log/logger.h" #include "timeevent.h" #include "timemanager.h" namespace FIFE { static const uint32_t UNDEFINED_TIME_DELTA = 999999; static Logger _log(LM_UTIL); TimeManager::TimeManager(): m_current_time (0), m_time_delta(UNDEFINED_TIME_DELTA), m_average_frame_time(0) { } TimeManager::~TimeManager() { } void TimeManager::update() { // if first update... double avg_multiplier = 0.985; if (m_current_time == 0) { m_current_time = SDL_GetTicks(); avg_multiplier = 0; m_time_delta = 0; } else { m_time_delta = m_current_time; m_current_time = SDL_GetTicks(); m_time_delta = m_current_time - m_time_delta; } m_average_frame_time = m_average_frame_time * avg_multiplier + double(m_time_delta) * (1.0 - avg_multiplier); // Update live events. // // It is very important to NOT use iterators (over a vector) // here, as an event might add enough events to resize the vector. // -> Ugly segfault for (size_t i = 0; i < m_events_list.size(); ++i) { TimeEvent* event = m_events_list[ i ]; if( event ) { event->managerUpdateEvent(m_current_time); } } // Remove dead events std::vector::iterator it; it = std::remove( m_events_list.begin(), m_events_list.end(), static_cast(0)); m_events_list.erase( it, m_events_list.end()); } void TimeManager::registerEvent(TimeEvent* event) { // Register. m_events_list.push_back(event); } void TimeManager::unregisterEvent(TimeEvent* event) { // Unregister. for (size_t i = 0; i < m_events_list.size(); ++i) { TimeEvent*& event_i = m_events_list[ i ]; if( event_i == event) { event_i = 0; return; } } } uint32_t TimeManager::getTime() const { return m_current_time; } uint32_t TimeManager::getTimeDelta() const { return m_time_delta; } double TimeManager::getAverageFrameTime() const { return m_average_frame_time; } void TimeManager::printStatistics() const { FL_LOG(_log, LMsg("Timers: ") << m_events_list.size()); } } //FIFE fifengine-0.4.1/engine/core/util/time/timemanager.h000066400000000000000000000071011304641216200222160ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_TIMEMANAGER_H #define FIFE_TIMEMANAGER_H // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/singleton.h" #include "util/base/fife_stdint.h" namespace FIFE { class TimeEvent; /** Time Manager * * This class is in charge of storing the current time, * average frame time, as well as controlling periodic events. * Users of this class will have to manually register and * unregister events. * * @see TimeEvent */ class TimeManager : public DynamicSingleton { public: /** Default constructor. */ TimeManager(); /** Destructor. */ virtual ~TimeManager(); /** Called once a frame and updates the timer objects and events. */ void update(); /** Adds a TimeEvent. * * The event will be updated regularly, depending on its settings. * @param event The TimeEvent object to be added. */ void registerEvent(TimeEvent* event); /** Removes a TimeEvent. * * Removes an event from the list. It will not be deleted. * @param event The TimeEvent object to be removed. */ void unregisterEvent(TimeEvent* event); /** Get the time. * * @return The time in milliseconds. */ uint32_t getTime() const; /** Get the time since the last frame. * * @return Time since last frame in milliseconds. */ uint32_t getTimeDelta() const; /** Gets average frame time * * @return Average frame time in milliseconds. */ double getAverageFrameTime() const; /** Prints Timer statistics */ void printStatistics() const; private: /// Current time in milliseconds. uint32_t m_current_time; /// Time since last frame in milliseconds. uint32_t m_time_delta; /// Average frame time in milliseconds. double m_average_frame_time; /// List of active TimeEvents. std::vector m_events_list; }; }//FIFE #endif fifengine-0.4.1/engine/core/util/time/timemanager.i000066400000000000000000000036341304641216200222260ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "util/time/timemanager.h" %} namespace FIFE { class TimeEvent; class TimeManager { public: TimeManager(); virtual ~TimeManager(); void update(); uint32_t getTime() const; uint32_t getTimeDelta() const; double getAverageFrameTime() const; void printStatistics() const; void registerEvent(TimeEvent* event); void unregisterEvent(TimeEvent* event); }; } fifengine-0.4.1/engine/core/util/time/timer.cpp000066400000000000000000000050611304641216200214030ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "timemanager.h" #include "timer.h" namespace FIFE { // Remember TimeEvent(-1) means that even a registered event won't be called Timer::Timer() : TimeEvent(-1), m_active(false) { } Timer::~Timer() { stop(); } void Timer::start() { if(m_active) return; setLastUpdateTime( TimeManager::instance()->getTime() ); TimeManager::instance()->registerEvent(this); m_active = true; } void Timer::stop() { if(!m_active) return; TimeManager::instance()->unregisterEvent(this); m_active = false; } void Timer::setInterval(int32_t msec) { setPeriod(msec); stop(); } void Timer::setCallback(const type_callback& cb) { m_callback = cb; } void Timer::updateEvent(uint32_t) { if(!m_active) return; if( m_callback ) { m_callback(); } } } fifengine-0.4.1/engine/core/util/time/timer.h000066400000000000000000000072031304641216200210500ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_TIMER_H #define FIFE_TIMER_H // Standard C++ library includes // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "timeevent.h" namespace FIFE { /** Simple Timer class * * This is a simple wrapper around the TimeEvent, * which makes the later usable without having to * subclass it every time. * * @code * m_timer.setInterval(1000); * m_timer.setCallback( boost::bind(&Class::update, this) ); * m_timer.start(); * @endcode * * @warning Note that the callback must be available * when it is triggered. If your called function is a * bound member function and it goes out of scope, * when the callback is called you'll most likely * have a segfault. So this is best used as a member * calling an update function. * * @note You don't have to call TimeManager::registerEvent @b ever * * @see Console */ class Timer : protected TimeEvent { public: typedef boost::function0 type_callback; /** Default constructor. * * Constructs an idle timer, use @see setInterval and @see setCallback * to set it up for use. */ Timer(); /** Destructor. * * Stops and destroys the timer. */ virtual ~Timer(); /** Set the interval in milliseconds * * @param msec The interval * If you use an intervall 0 the timer will fire every frame. */ void setInterval(int32_t msec); /** Start the timer * * Without calling this function, nothing will happen. * It is save to call this more than once. */ void start(); /** Stop the timer * * Stops execution of the callback * It is save to call this more than once. */ void stop(); /** Set the callback that will be called * * @param callback A @c boost::function0 returning void */ void setCallback(const type_callback& callback); protected: bool m_active; type_callback m_callback; void updateEvent(uint32_t); }; }//FIFE #endif fifengine-0.4.1/engine/core/util/utf8/000077500000000000000000000000001304641216200175055ustar00rootroot00000000000000fifengine-0.4.1/engine/core/util/utf8/utf8.h000066400000000000000000000027611304641216200205520ustar00rootroot00000000000000// Copyright 2006 Nemanja Trifunovic /* Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the "Software") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following: The copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef UTF8_FOR_CPP_2675DCD0_9480_4c0c_B92A_CC14C027B731 #define UTF8_FOR_CPP_2675DCD0_9480_4c0c_B92A_CC14C027B731 #include "utf8/checked.h" #include "utf8/unchecked.h" #endif // header guard fifengine-0.4.1/engine/core/util/utf8/utf8/000077500000000000000000000000001304641216200203735ustar00rootroot00000000000000fifengine-0.4.1/engine/core/util/utf8/utf8/checked.h000066400000000000000000000276141304641216200221440ustar00rootroot00000000000000// Copyright 2006 Nemanja Trifunovic /* Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the "Software") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following: The copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef UTF8_FOR_CPP_CHECKED_H_2675DCD0_9480_4c0c_B92A_CC14C027B731 #define UTF8_FOR_CPP_CHECKED_H_2675DCD0_9480_4c0c_B92A_CC14C027B731 #include "core.h" #include namespace utf8 { // Base for the exceptions that may be thrown from the library class exception : public ::std::exception { }; // Exceptions that may be thrown from the library functions. class invalid_code_point : public exception { uint32_t cp; public: invalid_code_point(uint32_t cp) : cp(cp) {} virtual const char* what() const throw() { return "Invalid code point"; } uint32_t code_point() const {return cp;} }; class invalid_utf8 : public exception { uint8_t u8; public: invalid_utf8 (uint8_t u) : u8(u) {} virtual const char* what() const throw() { return "Invalid UTF-8"; } uint8_t utf8_octet() const {return u8;} }; class invalid_utf16 : public exception { uint16_t u16; public: invalid_utf16 (uint16_t u) : u16(u) {} virtual const char* what() const throw() { return "Invalid UTF-16"; } uint16_t utf16_word() const {return u16;} }; class not_enough_room : public exception { public: virtual const char* what() const throw() { return "Not enough space"; } }; /// The library API - functions intended to be called by the users template octet_iterator append(uint32_t cp, octet_iterator result) { if (!utf8::internal::is_code_point_valid(cp)) throw invalid_code_point(cp); if (cp < 0x80) // one octet *(result++) = static_cast(cp); else if (cp < 0x800) { // two octets *(result++) = static_cast((cp >> 6) | 0xc0); *(result++) = static_cast((cp & 0x3f) | 0x80); } else if (cp < 0x10000) { // three octets *(result++) = static_cast((cp >> 12) | 0xe0); *(result++) = static_cast(((cp >> 6) & 0x3f) | 0x80); *(result++) = static_cast((cp & 0x3f) | 0x80); } else { // four octets *(result++) = static_cast((cp >> 18) | 0xf0); *(result++) = static_cast(((cp >> 12) & 0x3f) | 0x80); *(result++) = static_cast(((cp >> 6) & 0x3f) | 0x80); *(result++) = static_cast((cp & 0x3f) | 0x80); } return result; } template output_iterator replace_invalid(octet_iterator start, octet_iterator end, output_iterator out, uint32_t replacement) { while (start != end) { octet_iterator sequence_start = start; internal::utf_error err_code = utf8::internal::validate_next(start, end); switch (err_code) { case internal::UTF8_OK : for (octet_iterator it = sequence_start; it != start; ++it) *out++ = *it; break; case internal::NOT_ENOUGH_ROOM: throw not_enough_room(); case internal::INVALID_LEAD: out = utf8::append (replacement, out); ++start; break; case internal::INCOMPLETE_SEQUENCE: case internal::OVERLONG_SEQUENCE: case internal::INVALID_CODE_POINT: out = utf8::append (replacement, out); ++start; // just one replacement mark for the sequence while (start != end && utf8::internal::is_trail(*start)) ++start; break; } } return out; } template inline output_iterator replace_invalid(octet_iterator start, octet_iterator end, output_iterator out) { static const uint32_t replacement_marker = utf8::internal::mask16(0xfffd); return utf8::replace_invalid(start, end, out, replacement_marker); } template uint32_t next(octet_iterator& it, octet_iterator end) { uint32_t cp = 0; internal::utf_error err_code = utf8::internal::validate_next(it, end, cp); switch (err_code) { case internal::UTF8_OK : break; case internal::NOT_ENOUGH_ROOM : throw not_enough_room(); case internal::INVALID_LEAD : case internal::INCOMPLETE_SEQUENCE : case internal::OVERLONG_SEQUENCE : throw invalid_utf8(*it); case internal::INVALID_CODE_POINT : throw invalid_code_point(cp); } return cp; } template uint32_t peek_next(octet_iterator it, octet_iterator end) { return utf8::next(it, end); } template uint32_t prior(octet_iterator& it, octet_iterator start) { // can't do much if it == start if (it == start) throw not_enough_room(); octet_iterator end = it; // Go back until we hit either a lead octet or start while (utf8::internal::is_trail(*(--it))) if (it == start) throw invalid_utf8(*it); // error - no lead byte in the sequence return utf8::peek_next(it, end); } /// Deprecated in versions that include "prior" template uint32_t previous(octet_iterator& it, octet_iterator pass_start) { octet_iterator end = it; while (utf8::internal::is_trail(*(--it))) if (it == pass_start) throw invalid_utf8(*it); // error - no lead byte in the sequence octet_iterator temp = it; return utf8::next(temp, end); } template void advance (octet_iterator& it, distance_type n, octet_iterator end) { for (distance_type i = 0; i < n; ++i) utf8::next(it, end); } template typename std::iterator_traits::difference_type distance (octet_iterator first, octet_iterator last) { typename std::iterator_traits::difference_type dist; for (dist = 0; first < last; ++dist) utf8::next(first, last); return dist; } template octet_iterator utf16to8 (u16bit_iterator start, u16bit_iterator end, octet_iterator result) { while (start != end) { uint32_t cp = utf8::internal::mask16(*start++); // Take care of surrogate pairs first if (utf8::internal::is_lead_surrogate(cp)) { if (start != end) { uint32_t trail_surrogate = utf8::internal::mask16(*start++); if (utf8::internal::is_trail_surrogate(trail_surrogate)) cp = (cp << 10) + trail_surrogate + internal::SURROGATE_OFFSET; else throw invalid_utf16(static_cast(trail_surrogate)); } else throw invalid_utf16(static_cast(cp)); } // Lone trail surrogate else if (utf8::internal::is_trail_surrogate(cp)) throw invalid_utf16(static_cast(cp)); result = utf8::append(cp, result); } return result; } template u16bit_iterator utf8to16 (octet_iterator start, octet_iterator end, u16bit_iterator result) { while (start != end) { uint32_t cp = utf8::next(start, end); if (cp > 0xffff) { //make a surrogate pair *result++ = static_cast((cp >> 10) + internal::LEAD_OFFSET); *result++ = static_cast((cp & 0x3ff) + internal::TRAIL_SURROGATE_MIN); } else *result++ = static_cast(cp); } return result; } template octet_iterator utf32to8 (u32bit_iterator start, u32bit_iterator end, octet_iterator result) { while (start != end) result = utf8::append(*(start++), result); return result; } template u32bit_iterator utf8to32 (octet_iterator start, octet_iterator end, u32bit_iterator result) { while (start != end) (*result++) = utf8::next(start, end); return result; } // The iterator class template class iterator : public std::iterator { octet_iterator it; octet_iterator range_start; octet_iterator range_end; public: iterator () {} explicit iterator (const octet_iterator& octet_it, const octet_iterator& range_start, const octet_iterator& range_end) : it(octet_it), range_start(range_start), range_end(range_end) { if (it < range_start || it > range_end) throw std::out_of_range("Invalid utf-8 iterator position"); } // the default "big three" are OK octet_iterator base () const { return it; } uint32_t operator * () const { octet_iterator temp = it; return utf8::next(temp, range_end); } bool operator == (const iterator& rhs) const { if (range_start != rhs.range_start || range_end != rhs.range_end) throw std::logic_error("Comparing utf-8 iterators defined with different ranges"); return (it == rhs.it); } bool operator != (const iterator& rhs) const { return !(operator == (rhs)); } iterator& operator ++ () { utf8::next(it, range_end); return *this; } iterator operator ++ (int) { iterator temp = *this; utf8::next(it, range_end); return temp; } iterator& operator -- () { utf8::prior(it, range_start); return *this; } iterator operator -- (int) { iterator temp = *this; utf8::prior(it, range_start); return temp; } }; // class iterator } // namespace utf8 #endif //header guard fifengine-0.4.1/engine/core/util/utf8/utf8/core.h000066400000000000000000000247111304641216200215010ustar00rootroot00000000000000// Copyright 2006 Nemanja Trifunovic /* Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the "Software") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following: The copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef UTF8_FOR_CPP_CORE_H_2675DCD0_9480_4c0c_B92A_CC14C027B731 #define UTF8_FOR_CPP_CORE_H_2675DCD0_9480_4c0c_B92A_CC14C027B731 #include namespace utf8 { // The typedefs for 8-bit, 16-bit and 32-bit unsigned integers // You may need to change them to match your system. // These typedefs have the same names as ones from cstdint, or boost/cstdint typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned int uint32_t; // Helper code - not intended to be directly called by the library users. May be changed at any time namespace internal { // Unicode constants // Leading (high) surrogates: 0xd800 - 0xdbff // Trailing (low) surrogates: 0xdc00 - 0xdfff const uint16_t LEAD_SURROGATE_MIN = 0xd800u; const uint16_t LEAD_SURROGATE_MAX = 0xdbffu; const uint16_t TRAIL_SURROGATE_MIN = 0xdc00u; const uint16_t TRAIL_SURROGATE_MAX = 0xdfffu; const uint16_t LEAD_OFFSET = LEAD_SURROGATE_MIN - (0x10000 >> 10); const uint32_t SURROGATE_OFFSET = 0x10000u - (LEAD_SURROGATE_MIN << 10) - TRAIL_SURROGATE_MIN; // Maximum valid value for a Unicode code point const uint32_t CODE_POINT_MAX = 0x0010ffffu; template inline uint8_t mask8(octet_type oc) { return static_cast(0xff & oc); } template inline uint16_t mask16(u16_type oc) { return static_cast(0xffff & oc); } template inline bool is_trail(octet_type oc) { return ((utf8::internal::mask8(oc) >> 6) == 0x2); } template inline bool is_lead_surrogate(u16 cp) { return (cp >= LEAD_SURROGATE_MIN && cp <= LEAD_SURROGATE_MAX); } template inline bool is_trail_surrogate(u16 cp) { return (cp >= TRAIL_SURROGATE_MIN && cp <= TRAIL_SURROGATE_MAX); } template inline bool is_surrogate(u16 cp) { return (cp >= LEAD_SURROGATE_MIN && cp <= TRAIL_SURROGATE_MAX); } template inline bool is_code_point_valid(u32 cp) { return (cp <= CODE_POINT_MAX && !utf8::internal::is_surrogate(cp)); } template inline typename std::iterator_traits::difference_type sequence_length(octet_iterator lead_it) { uint8_t lead = utf8::internal::mask8(*lead_it); if (lead < 0x80) return 1; else if ((lead >> 5) == 0x6) return 2; else if ((lead >> 4) == 0xe) return 3; else if ((lead >> 3) == 0x1e) return 4; else return 0; } template inline bool is_overlong_sequence(uint32_t cp, octet_difference_type length) { if (cp < 0x80) { if (length != 1) return true; } else if (cp < 0x800) { if (length != 2) return true; } else if (cp < 0x10000) { if (length != 3) return true; } return false; } enum utf_error {UTF8_OK, NOT_ENOUGH_ROOM, INVALID_LEAD, INCOMPLETE_SEQUENCE, OVERLONG_SEQUENCE, INVALID_CODE_POINT}; /// Helper for get_sequence_x template utf_error increase_safely(octet_iterator& it, octet_iterator end) { if (++it == end) return NOT_ENOUGH_ROOM; if (!utf8::internal::is_trail(*it)) return INCOMPLETE_SEQUENCE; return UTF8_OK; } #define UTF8_CPP_INCREASE_AND_RETURN_ON_ERROR(IT, END) {utf_error ret = increase_safely(IT, END); if (ret != UTF8_OK) return ret;} /// get_sequence_x functions decode utf-8 sequences of the length x template utf_error get_sequence_1(octet_iterator& it, octet_iterator end, uint32_t& code_point) { if (it == end) return NOT_ENOUGH_ROOM; code_point = utf8::internal::mask8(*it); return UTF8_OK; } template utf_error get_sequence_2(octet_iterator& it, octet_iterator end, uint32_t& code_point) { if (it == end) return NOT_ENOUGH_ROOM; code_point = utf8::internal::mask8(*it); UTF8_CPP_INCREASE_AND_RETURN_ON_ERROR(it, end) code_point = ((code_point << 6) & 0x7ff) + ((*it) & 0x3f); return UTF8_OK; } template utf_error get_sequence_3(octet_iterator& it, octet_iterator end, uint32_t& code_point) { if (it == end) return NOT_ENOUGH_ROOM; code_point = utf8::internal::mask8(*it); UTF8_CPP_INCREASE_AND_RETURN_ON_ERROR(it, end) code_point = ((code_point << 12) & 0xffff) + ((utf8::internal::mask8(*it) << 6) & 0xfff); UTF8_CPP_INCREASE_AND_RETURN_ON_ERROR(it, end) code_point += (*it) & 0x3f; return UTF8_OK; } template utf_error get_sequence_4(octet_iterator& it, octet_iterator end, uint32_t& code_point) { if (it == end) return NOT_ENOUGH_ROOM; code_point = utf8::internal::mask8(*it); UTF8_CPP_INCREASE_AND_RETURN_ON_ERROR(it, end) code_point = ((code_point << 18) & 0x1fffff) + ((utf8::internal::mask8(*it) << 12) & 0x3ffff); UTF8_CPP_INCREASE_AND_RETURN_ON_ERROR(it, end) code_point += (utf8::internal::mask8(*it) << 6) & 0xfff; UTF8_CPP_INCREASE_AND_RETURN_ON_ERROR(it, end) code_point += (*it) & 0x3f; return UTF8_OK; } #undef UTF8_CPP_INCREASE_AND_RETURN_ON_ERROR template utf_error validate_next(octet_iterator& it, octet_iterator end, uint32_t& code_point) { // Save the original value of it so we can go back in case of failure // Of course, it does not make much sense with i.e. stream iterators octet_iterator original_it = it; uint32_t cp = 0; // Determine the sequence length based on the lead octet typedef typename std::iterator_traits::difference_type octet_difference_type; const octet_difference_type length = utf8::internal::sequence_length(it); // Get trail octets and calculate the code point utf_error err = UTF8_OK; switch (length) { case 0: return INVALID_LEAD; case 1: err = utf8::internal::get_sequence_1(it, end, cp); break; case 2: err = utf8::internal::get_sequence_2(it, end, cp); break; case 3: err = utf8::internal::get_sequence_3(it, end, cp); break; case 4: err = utf8::internal::get_sequence_4(it, end, cp); break; } if (err == UTF8_OK) { // Decoding succeeded. Now, security checks... if (utf8::internal::is_code_point_valid(cp)) { if (!utf8::internal::is_overlong_sequence(cp, length)){ // Passed! Return here. code_point = cp; ++it; return UTF8_OK; } else err = OVERLONG_SEQUENCE; } else err = INVALID_CODE_POINT; } // Failure branch - restore the original value of the iterator it = original_it; return err; } template inline utf_error validate_next(octet_iterator& it, octet_iterator end) { uint32_t ignored; return utf8::internal::validate_next(it, end, ignored); } } // namespace internal /// The library API - functions intended to be called by the users // Byte order mark const uint8_t bom[] = {0xef, 0xbb, 0xbf}; template octet_iterator find_invalid(octet_iterator start, octet_iterator end) { octet_iterator result = start; while (result != end) { utf8::internal::utf_error err_code = utf8::internal::validate_next(result, end); if (err_code != internal::UTF8_OK) return result; } return result; } template inline bool is_valid(octet_iterator start, octet_iterator end) { return (utf8::find_invalid(start, end) == end); } template inline bool starts_with_bom (octet_iterator it, octet_iterator end) { return ( ((it != end) && (utf8::internal::mask8(*it++)) == bom[0]) && ((it != end) && (utf8::internal::mask8(*it++)) == bom[1]) && ((it != end) && (utf8::internal::mask8(*it)) == bom[2]) ); } //Deprecated in release 2.3 template inline bool is_bom (octet_iterator it) { return ( (utf8::internal::mask8(*it++)) == bom[0] && (utf8::internal::mask8(*it++)) == bom[1] && (utf8::internal::mask8(*it)) == bom[2] ); } } // namespace utf8 #endif // header guard fifengine-0.4.1/engine/core/util/utf8/utf8/unchecked.h000066400000000000000000000213131304641216200224750ustar00rootroot00000000000000// Copyright 2006 Nemanja Trifunovic /* Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the "Software") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following: The copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef UTF8_FOR_CPP_UNCHECKED_H_2675DCD0_9480_4c0c_B92A_CC14C027B731 #define UTF8_FOR_CPP_UNCHECKED_H_2675DCD0_9480_4c0c_B92A_CC14C027B731 #include "core.h" namespace utf8 { namespace unchecked { template octet_iterator append(uint32_t cp, octet_iterator result) { if (cp < 0x80) // one octet *(result++) = static_cast(cp); else if (cp < 0x800) { // two octets *(result++) = static_cast((cp >> 6) | 0xc0); *(result++) = static_cast((cp & 0x3f) | 0x80); } else if (cp < 0x10000) { // three octets *(result++) = static_cast((cp >> 12) | 0xe0); *(result++) = static_cast(((cp >> 6) & 0x3f) | 0x80); *(result++) = static_cast((cp & 0x3f) | 0x80); } else { // four octets *(result++) = static_cast((cp >> 18) | 0xf0); *(result++) = static_cast(((cp >> 12) & 0x3f)| 0x80); *(result++) = static_cast(((cp >> 6) & 0x3f) | 0x80); *(result++) = static_cast((cp & 0x3f) | 0x80); } return result; } template uint32_t next(octet_iterator& it) { uint32_t cp = utf8::internal::mask8(*it); typename std::iterator_traits::difference_type length = utf8::internal::sequence_length(it); switch (length) { case 1: break; case 2: it++; cp = ((cp << 6) & 0x7ff) + ((*it) & 0x3f); break; case 3: ++it; cp = ((cp << 12) & 0xffff) + ((utf8::internal::mask8(*it) << 6) & 0xfff); ++it; cp += (*it) & 0x3f; break; case 4: ++it; cp = ((cp << 18) & 0x1fffff) + ((utf8::internal::mask8(*it) << 12) & 0x3ffff); ++it; cp += (utf8::internal::mask8(*it) << 6) & 0xfff; ++it; cp += (*it) & 0x3f; break; } ++it; return cp; } template uint32_t peek_next(octet_iterator it) { return utf8::unchecked::next(it); } template uint32_t prior(octet_iterator& it) { while (utf8::internal::is_trail(*(--it))) ; octet_iterator temp = it; return utf8::unchecked::next(temp); } // Deprecated in versions that include prior, but only for the sake of consistency (see utf8::previous) template inline uint32_t previous(octet_iterator& it) { return utf8::unchecked::prior(it); } template void advance (octet_iterator& it, distance_type n) { for (distance_type i = 0; i < n; ++i) utf8::unchecked::next(it); } template typename std::iterator_traits::difference_type distance (octet_iterator first, octet_iterator last) { typename std::iterator_traits::difference_type dist; for (dist = 0; first < last; ++dist) utf8::unchecked::next(first); return dist; } template octet_iterator utf16to8 (u16bit_iterator start, u16bit_iterator end, octet_iterator result) { while (start != end) { uint32_t cp = utf8::internal::mask16(*start++); // Take care of surrogate pairs first if (utf8::internal::is_lead_surrogate(cp)) { uint32_t trail_surrogate = utf8::internal::mask16(*start++); cp = (cp << 10) + trail_surrogate + internal::SURROGATE_OFFSET; } result = utf8::unchecked::append(cp, result); } return result; } template u16bit_iterator utf8to16 (octet_iterator start, octet_iterator end, u16bit_iterator result) { while (start < end) { uint32_t cp = utf8::unchecked::next(start); if (cp > 0xffff) { //make a surrogate pair *result++ = static_cast((cp >> 10) + internal::LEAD_OFFSET); *result++ = static_cast((cp & 0x3ff) + internal::TRAIL_SURROGATE_MIN); } else *result++ = static_cast(cp); } return result; } template octet_iterator utf32to8 (u32bit_iterator start, u32bit_iterator end, octet_iterator result) { while (start != end) result = utf8::unchecked::append(*(start++), result); return result; } template u32bit_iterator utf8to32 (octet_iterator start, octet_iterator end, u32bit_iterator result) { while (start < end) (*result++) = utf8::unchecked::next(start); return result; } // The iterator class template class iterator : public std::iterator { octet_iterator it; public: iterator () {} explicit iterator (const octet_iterator& octet_it): it(octet_it) {} // the default "big three" are OK octet_iterator base () const { return it; } uint32_t operator * () const { octet_iterator temp = it; return utf8::unchecked::next(temp); } bool operator == (const iterator& rhs) const { return (it == rhs.it); } bool operator != (const iterator& rhs) const { return !(operator == (rhs)); } iterator& operator ++ () { ::std::advance(it, utf8::internal::sequence_length(it)); return *this; } iterator operator ++ (int) { iterator temp = *this; ::std::advance(it, utf8::internal::sequence_length(it)); return temp; } iterator& operator -- () { utf8::unchecked::prior(it); return *this; } iterator operator -- (int) { iterator temp = *this; utf8::unchecked::prior(it); return temp; } }; // class iterator } // namespace utf8::unchecked } // namespace utf8 #endif // header guard fifengine-0.4.1/engine/core/version.h.in000066400000000000000000000071121304641216200201060ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_VERSION_H #define FIFE_VERSION_H /** * These version numbers are updated as part of the release process for FIFE. */ #ifndef FIFE_VERSION #define FIFE_VERSION "@FIFE_VERSION@" #endif #ifndef FIFE_MAJOR_VERSION #define FIFE_MAJOR_VERSION @FIFE_MAJOR_VERSION@ #endif #ifndef FIFE_MINOR_VERSION #define FIFE_MINOR_VERSION @FIFE_MINOR_VERSION@ #endif #ifndef FIFE_PATCH_VERSION #define FIFE_PATCH_VERSION @FIFE_PATCH_VERSION@ #endif /*************************************************************************** * Do not update anything below this line! ***************************************************************************/ #define FIFE_STR(s) # s #define FIFE_XSTR(s) FIFE_STR(s) #define FIFE_DOT(a,b) a.b #define FIFE_XDOT(a,b) FIFE_DOT(a,b) #define FIFE_PLUS(a,b) a+b #define FIFE_XPLUS(a,b) FIFE_PLUS(a,b) #define FIFE_MINUS(a,b) a-b #define FIFE_XMINUS(a,b) FIFE_MINUS(a,b) #ifdef FIFE_GIT_HASH #ifndef FIFE_VERSION_STRING #define FIFE_VERSION_STRING \ FIFE_XPLUS( \ FIFE_VERSION, \ FIFE_GIT_HASH \ ) #else #undef FIFE_VERSION_STRING #define FIFE_VERSION_STRING \ FIFE_XPLUS( \ FIFE_VERSION, \ FIFE_GIT_HASH \ ) #endif #else #define FIFE_GIT_HASH "" #endif // This is an actual release #ifndef FIFE_VERSION_STRING #define FIFE_VERSION_STRING FIFE_VERSION #endif /** * All FIFE related code is in this namespace. * We currently only use one namespace for all our code with the exception of * the gcn namespace which is used for our custom widgets. */ namespace FIFE { inline const char* getVersion() { return FIFE_XSTR(FIFE_VERSION_STRING); } inline int getMajor() { return FIFE_MAJOR_VERSION; } inline int getMinor() { return FIFE_MINOR_VERSION; } inline int getPatch() { return FIFE_PATCH_VERSION; } inline const char* getHash() { return FIFE_XSTR(FIFE_GIT_HASH); } } //FIFE //cleanup #undef FIFE_STR #undef FIFE_XSTR #undef FIFE_DOT #undef FIFE_XDOT #undef FIFE_PLUS #undef FIFE_XPLUS #undef FIFE_MINUS #undef FIFE_XMINUS #undef FIFE_VERSION_STRING #undef FIFE_VERSION #endif //FIFE_VERSION_H fifengine-0.4.1/engine/core/version.i000066400000000000000000000033211304641216200175000ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "version.h" %} namespace FIFE { inline const char* getVersion(); inline int getMajor(); inline int getMinor(); inline int getPatch(); inline const char* getHash(); } //FIFE fifengine-0.4.1/engine/core/vfs/000077500000000000000000000000001304641216200164405ustar00rootroot00000000000000fifengine-0.4.1/engine/core/vfs/dat/000077500000000000000000000000001304641216200172105ustar00rootroot00000000000000fifengine-0.4.1/engine/core/vfs/dat/dat1.cpp000066400000000000000000000121531304641216200205470ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "vfs/raw/rawdata.h" #include "util/base/exception.h" #include "util/log/logger.h" #include "dat1.h" namespace FIFE { static Logger _log(LM_FO_LOADERS); DAT1::DAT1(VFS* vfs, const std::string& file) : VFSSource(vfs), m_datpath(file), m_data(vfs->open(file)) { FL_LOG(_log, LMsg("MFFalloutDAT1") << "loading: " << file << " filesize: " << m_data->getDataLength()); m_data->setIndex(0); const uint32_t dircount = m_data->read32Big(); m_data->moveIndex(4*3); FL_LOG(_log, LMsg("MFFalloutDAT1") << "number of directories " << dircount); // Sanity check. Each dir entry needs min. 16 bytes. if( dircount*16 > m_data->getDataLength() ) { throw InvalidFormat("directory count larger than filesize."); } std::list dir_names; for (uint32_t i = 0; i < dircount; ++i) { std::string name = readString(); if (name == ".") { name = ""; } dir_names.push_back(name); } for(std::list::iterator i= dir_names.begin(); i!= dir_names.end(); ++i) loadFileList(*i); } void DAT1::loadFileList(const std::string& dirname) { const uint32_t filecount = m_data->read32Big(); m_data->moveIndex(4*3); for (uint32_t i = 0; i < filecount; ++i) { RawDataDAT1::s_info info; info.name = fixPath(dirname + "/" + readString()); info.type = m_data->read32Big(); info.offset = m_data->read32Big(); info.unpackedLength = m_data->read32Big(); info.packedLength = m_data->read32Big(); m_filelist.insert(std::make_pair(info.name, info)); } } std::string DAT1::readString() { uint8_t length = m_data->read8(); return m_data->readString(length); } RawData* DAT1::open(const std::string& file) const { const RawDataDAT1::s_info& info = getInfo(file); return new RawData(new RawDataDAT1(getVFS(), m_datpath, info)); } bool DAT1::fileExists(const std::string& name) const { return m_filelist.find(name) != m_filelist.end(); } const RawDataDAT1::s_info& DAT1::getInfo(const std::string& name) const { type_filelist::const_iterator i = m_filelist.find(name); if (i == m_filelist.end()) throw NotFound(name); return i->second; } std::set DAT1::listFiles(const std::string& pathstr) const { return list(pathstr, false); } std::set DAT1::listDirectories(const std::string& pathstr) const { return list(pathstr, true); } std::set DAT1::list(const std::string& pathstr, bool dirs) const { std::set list; std::string path = pathstr; // Normalize the path if (path.find("./") == 0) { path.erase(0, 2); } size_t lastIndex = path.size(); if (lastIndex != 0 && path[lastIndex-1] != '/') { path += '/'; } type_filelist::const_iterator end = m_filelist.end(); for (type_filelist::const_iterator i = m_filelist.begin(); i != end; ++i) { const std::string& file = i->first; if (file.find(path) == 0) { std::string cleanedfile = file.substr(path.size(), file.size()); // strip the pathstr bool isdir = cleanedfile.find('/') != std::string::npos; // if we still have a / it's a subdir if (isdir) { cleanedfile = cleanedfile.substr(0, cleanedfile.find('/')); if (cleanedfile.find('/') != cleanedfile.rfind('/')) { // check if this is a direct subdir continue; } } if (isdir == dirs) { list.insert(cleanedfile); } } } return list; } } // FIFE fifengine-0.4.1/engine/core/vfs/dat/dat1.h000066400000000000000000000066211304641216200202170ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_MAP_LOADERS_FALLOUT_DAT1_H #define FIFE_MAP_LOADERS_FALLOUT_DAT1_H // Standard C++ library includes #include #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "vfs/vfs.h" #include "vfs/vfssource.h" #include "rawdatadat1.h" namespace FIFE { /** VFSource for the Fallout1 DAT file format. */ class DAT1 : public VFSSource { public: /** Constructor * Create a VFSSource for a Fallout1 DAT file. * @param vfs A pointer to the VFS. * @param file A Fallout1 DAT file - e.g. master.DAT */ DAT1(VFS* vfs, const std::string& file); bool fileExists(const std::string& name) const; RawData* open(const std::string& file) const; /** Get the needed information to unpack and extract a file from the * DAT file. * Retrieves the Information needed to extract a specific file, this * is passed as argument to a mffalloutrawdatadat1 RawMemSource, * which itself fills its memory content with the unpacked file. * * @throw NotFound * @see MFFalloutRawDataDAT1, RawMemSource */ const RawDataDAT1::s_info& getInfo(const std::string& name) const; std::set listFiles(const std::string& pathstr) const; std::set listDirectories(const std::string& pathstr) const; private: std::string m_datpath; boost::scoped_ptr m_data; typedef std::map type_filelist; type_filelist m_filelist; std::set list(const std::string& pathstr, bool dirs) const; std::string readString(); void loadFileList(const std::string& dirname); // Not copyable DAT1(const DAT1&); DAT1& operator=(const DAT1&); }; } // FIFE #endif fifengine-0.4.1/engine/core/vfs/dat/dat2.cpp000066400000000000000000000154171304641216200205560ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "vfs/raw/rawdata.h" #include "util/base/exception.h" #include "util/log/logger.h" #include "dat2.h" namespace FIFE { /** Logger to use for this source file. * @relates Logger */ static Logger _log(LM_FO_LOADERS); DAT2::DAT2(VFS* vfs, const std::string& file) : VFSSource(vfs), m_datpath(file), m_data(vfs->open(file)), m_filelist() { FL_LOG(_log, LMsg("MFFalloutDAT2") << "loading: " << file << " filesize: " << m_data->getDataLength()); m_data->setIndex(m_data->getDataLength() - 8); uint32_t fileListLength = m_data->read32Little(); uint32_t archiveSize = m_data->read32Little(); FL_LOG(_log, LMsg("MFFalloutDAT2") << "FileListLength: " << fileListLength << " ArchiveSize: " << archiveSize); if (archiveSize != m_data->getDataLength()) throw InvalidFormat("size mismatch"); m_data->setIndex( archiveSize - fileListLength - 8); m_filecount = m_data->read32Little(); m_currentIndex = m_data->getCurrentIndex(); FL_LOG(_log, LMsg("MFFalloutDAT2 FileCount: ") << m_filecount); // Do not read the complete file list at startup. // Instead read a chunk each frame. m_timer.setInterval(0); m_timer.setCallback( boost::bind( &DAT2::readFileEntry, this) ); m_timer.start(); } void DAT2::readFileEntry() const { assert( m_filecount != 0); // Load more items per call, // otherwise it takes _ages_ until everything is in. uint32_t load_per_cycle = 50; if( load_per_cycle > m_filecount ) load_per_cycle = m_filecount; m_filecount -= load_per_cycle; // Save the old index in an exception save way. IndexSaver isaver(m_data.get()); // Move index to file list and read the entries. m_data->setIndex(m_currentIndex); RawDataDAT2::s_info info; while( load_per_cycle-- ) { uint32_t namelen = m_data->read32Little(); info.name = fixPath(m_data->readString(namelen)); info.type = m_data->read8(); info.unpackedLength = m_data->read32Little(); info.packedLength = m_data->read32Little(); info.offset = m_data->read32Little(); m_filelist.insert(std::make_pair(info.name, info)); } m_currentIndex = m_data->getCurrentIndex(); // Finally log on completion and stop the timer. if( m_filecount == 0 ) { FL_LOG(_log, LMsg("MFFalloutDAT2, All file entries in '") << m_datpath << "' loaded."); m_timer.stop(); } } RawData* DAT2::open(const std::string& file) const { const RawDataDAT2::s_info& info = getInfo(file); return new RawData(new RawDataDAT2(getVFS(), m_datpath, info)); } bool DAT2::fileExists(const std::string& name) const { return findFileEntry(name) != m_filelist.end(); } const RawDataDAT2::s_info& DAT2::getInfo(const std::string& name) const { type_filelist::const_iterator i = findFileEntry(name); if (i == m_filelist.end()) { throw NotFound(name); } return i->second; } DAT2::type_filelist::const_iterator DAT2::findFileEntry(const std::string& path) const { // Either the normalization is bogus, or we have to do // it here, too. Otherwise we can't load the files returned // by listFiles. std::string name = path; // Normalize the path if (name.find("./") == 0) { name.erase(0, 2); } type_filelist::const_iterator i = m_filelist.find(name); // We might have another chance to find the file // if the number of file entries not zero. if ( m_filecount && i == m_filelist.end()) { FL_LOG(_log, LMsg("MFFalloutDAT2") << "Missing '" << name << "' in partially(" << m_filecount <<") loaded "<< m_datpath); while( m_filecount && i == m_filelist.end()) { readFileEntry(); i = m_filelist.find(name); } } return i; } std::set DAT2::listFiles(const std::string& pathstr) const { return list(pathstr, false); } std::set DAT2::listDirectories(const std::string& pathstr) const { return list(pathstr, true); } std::set DAT2::list(const std::string& pathstr, bool dirs) const { std::set list; std::string path = pathstr; // Force loading the complete file entries // This is a costly operation... right after startup. // Later this should do nothing. while( m_filecount ) { readFileEntry(); } // Normalize the path if (path.find("./") == 0) { path.erase(0, 2); } size_t lastIndex = path.size(); if (lastIndex != 0 && path[lastIndex-1] != '/') { path += '/'; } type_filelist::const_iterator end = m_filelist.end(); for (type_filelist::const_iterator i = m_filelist.begin(); i != end; ++i) { const std::string& file = i->first; if (file.find(path) == 0) { std::string cleanedfile = file.substr(path.size(), file.size()); // strip the pathstr bool isdir = cleanedfile.find('/') != std::string::npos; // if we still have a / it's a subdir if (isdir) { cleanedfile = cleanedfile.substr(0, cleanedfile.find('/')); if (cleanedfile.find('/') != cleanedfile.rfind('/')) { // check if this is a direct subdir continue; } } if (isdir == dirs) { list.insert(cleanedfile); } } } return list; } } // FIFE fifengine-0.4.1/engine/core/vfs/dat/dat2.h000066400000000000000000000076571304641216200202320ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_MAP_LOADERS_FALLOUT_DAT2_H #define FIFE_MAP_LOADERS_FALLOUT_DAT2_H // Standard C++ library includes #include #include // Platform specific includes #include "util/base/fife_stdint.h" // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/time/timer.h" #include "vfs/vfs.h" #include "vfs/vfssource.h" #include "rawdatadat2.h" namespace FIFE { class RawData; /** VFSource for the Fallout2 DAT file format * * Implements a kind of lazy initializing, by reading the file list * in chunks. Behaviour is the same as if it wouldn't do this, * but startup is very fast. But a open/fileExists call with a * filename that doesn't exist, does trigger completely loading * the file entries. * * @see MFFalloutDAT1 * @todo @b maybe merge common DAT1/DAT2 code in a common base class */ class DAT2 : public VFSSource { public: /** Constructor * Create a VFSSource for a Fallout2 DAT file. * @param vfs A pointer to the VFS. * @param path A Fallout2 DAT file - e.g. master.DAT */ DAT2(VFS* vfs, const std::string& path); bool fileExists(const std::string& name) const; RawData* open(const std::string& file) const; /** Get Information needed to unpack and extract data * * @see MFFalloutDAT1::getInfo */ const RawDataDAT2::s_info& getInfo(const std::string& name) const; std::set listFiles(const std::string& pathstr) const; std::set listDirectories(const std::string& pathstr) const; private: std::string m_datpath; mutable boost::scoped_ptr m_data; typedef std::map type_filelist; mutable type_filelist m_filelist; /// number of file entries to read mutable uint32_t m_filecount; /// current index in file mutable uint32_t m_currentIndex; /// lazy loading timer mutable Timer m_timer; /// read a bunch of file entries void readFileEntry() const; /// find a file entry type_filelist::const_iterator findFileEntry(const std::string& name) const; std::set list(const std::string& pathstr, bool dirs) const; // Not copyable DAT2(const DAT2&); DAT2& operator=(const DAT2&); }; } // FIFE #endif fifengine-0.4.1/engine/core/vfs/dat/lzssdecoder.cpp000066400000000000000000000073241304641216200222430ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // 3rd party library includes // FIFE includes #include "vfs/raw/rawdata.h" #include "util/base/exception.h" #include "lzssdecoder.h" // just a quick&dirty wrapper around anchorites implementation - needs to be replaced with our own LZSS implementation namespace FIFE { LZSSDecoder::LZSSDecoder() {} LZSSDecoder::~LZSSDecoder() {} void LZSSDecoder::decode(RawData* input, uint8_t* output, const uint32_t outputsize) { m_outindex = 0; m_outlen = outputsize; while (m_outindex < outputsize) { uint16_t blockdesc = input->read16Big(); uint16_t bytesToRead = blockdesc & 0x7fff; if (blockdesc & 0x8000) { // uncompressed input->readInto(output + m_outindex, bytesToRead); m_outindex += bytesToRead; } else { // Allocate +2 bytes so that on corrupt data the LZSS // decoder won't crash the input buffer. std::vector indata(bytesToRead + 2); input->readInto(&indata[0], bytesToRead); LZSSDecode(&indata[0], bytesToRead, output); // Note outindex is advanced inside LZSSDecode. } } } void LZSSDecoder::LZSSDecode(uint8_t* in , int64_t len, uint8_t* out) { const int64_t c_nRingBufferSize = 4096; const int64_t c_nMatchLengthUpperLimit = 18; const int64_t c_nThreshold = 2; char buffer[c_nRingBufferSize + c_nMatchLengthUpperLimit - 1]; int32_t ibuf = 0; int32_t c; int32_t i; int32_t j; int32_t k; int32_t r; uint32_t flags; for (i = 0; i < c_nRingBufferSize - c_nMatchLengthUpperLimit; i++) { buffer[i] = ' '; } r = c_nRingBufferSize - c_nMatchLengthUpperLimit; flags = 0; while ( ibuf < len ) { if (((flags >>= 1) & 256) == 0) { c = in[ibuf++]; flags = c | 0xff00;/* uses higher byte cleverly to count eight */ } if (flags & 1) { c = in[ibuf++]; out[m_outindex++] = c; buffer[r++] = c; r &= (c_nRingBufferSize - 1); } else { i = in[ibuf++]; j = in[ibuf++]; i |= ((j & 0xf0) << 4); j = (j & 0x0f) + c_nThreshold; for (k = 0; k <= j; k++) { c = buffer[(i + k) & (c_nRingBufferSize - 1)]; out[m_outindex++] = c; buffer[r++] = c; r &= (c_nRingBufferSize - 1); } } } } } fifengine-0.4.1/engine/core/vfs/dat/lzssdecoder.h000066400000000000000000000050061304641216200217030ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_LZSSDECODER_H #define FIFE_LZSSDECODER_H // Standard C++ library includes // 3rd party library includes // FIFE includes #include "util/base/fife_stdint.h" #include "vfs/vfs.h" namespace FIFE { /** A helper class for unpacking LZSS encoded data * @bug just a quick&dirty LZSS implementation, optimized a bit * see revision 719 for the original one and 795 for the broken optimized one * @bug the lzss decoder might very well crash on corrupt data. */ class LZSSDecoder { public: /** Constructor */ LZSSDecoder(); /** Destructor */ ~LZSSDecoder(); /** Decodes from a file into a pointer. * @param input The VFS file to read from * @param output The memory location to write to * @param outputsize The size of the memory location in byte */ void decode(RawData* input, uint8_t* output, const uint32_t outputsize); private: uint32_t m_outlen; uint32_t m_outindex; void LZSSDecode(uint8_t* in, int64_t len, uint8_t* out); }; } #endif fifengine-0.4.1/engine/core/vfs/dat/rawdatadat1.cpp000066400000000000000000000045231304641216200221150ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "vfs/raw/rawdata.h" #include "util/base/exception.h" #include "lzssdecoder.h" #include "rawdatadat1.h" namespace FIFE { RawDataDAT1::RawDataDAT1(VFS* vfs, const std::string& datfile, const s_info& info) : RawDataMemSource(info.unpackedLength) { boost::scoped_ptr input (vfs->open(datfile)); input->setIndex(info.offset); if (info.type == 0x40) { // compressed LZSSDecoder decoder; decoder.decode(input.get(), getRawData(), getSize()); } else input->readInto(getRawData(), getSize()); } } // FIFE fifengine-0.4.1/engine/core/vfs/dat/rawdatadat1.h000066400000000000000000000051401304641216200215560ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_MAP_LOADERS_FALLOUT_RAWDATADAT1_H #define FIFE_MAP_LOADERS_FALLOUT_RAWDATADAT1_H // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "vfs/raw/rawdatamemsource.h" #include "vfs/vfs.h" namespace FIFE { /** A subclass of RawDataMemSource, that fills itself with a FALLOUT1 .DAT file entry * @see MFFalloutDAT1 */ class RawDataDAT1 : public RawDataMemSource { public: /** The needed information for the extraction. */ struct s_info { std::string name; uint32_t packedLength; uint32_t unpackedLength; uint32_t offset; uint32_t type; }; /** Constructor * @param vfs The vfs to open with. * @param datfile The .DAT archive - e.g. master.DAT * @param info The .DAT file entry, as retrieved by MFFalloutDAT1 */ RawDataDAT1(VFS* vfs, const std::string& datfile, const s_info& info); }; } #endif fifengine-0.4.1/engine/core/vfs/dat/rawdatadat2.cpp000066400000000000000000000053261304641216200221200ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // 3rd party library includes #include #include #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "vfs/raw/rawdata.h" #include "vfs/vfs.h" #include "util/base/exception.h" #include "rawdatadat2.h" namespace FIFE { RawDataDAT2::RawDataDAT2(VFS* vfs, const std::string& datfile, const s_info& info) : RawDataMemSource(info.unpackedLength) { boost::scoped_ptr input (vfs->open(datfile)); input->setIndex(info.offset); if (info.type == 1) { // compressed boost::scoped_array compressed(new uint8_t[info.packedLength]); input->readInto(compressed.get(), info.packedLength); uLongf dstlen = info.unpackedLength; if (uncompress(getRawData(), &dstlen, compressed.get(), info.packedLength) != Z_OK || dstlen != info.unpackedLength) { throw InvalidFormat("failed to decompress " + info.name + " (inside: " + datfile + ")"); } } else { input->readInto(getRawData(), info.unpackedLength); } } } fifengine-0.4.1/engine/core/vfs/dat/rawdatadat2.h000066400000000000000000000052471304641216200215670ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_MAP_LOADERS_FALLOUT_RAWDATADAT2_H #define FIFE_MAP_LOADERS_FALLOUT_RAWDATADAT2_H // Standard C++ library includes #include // Platform specific includes #include "util/base/fife_stdint.h" // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "vfs/raw/rawdatamemsource.h" #include "rawdatadat2.h" namespace FIFE { /** A subclass of RawDataMemSource, that fills itself with a FALLOUT1 .DAT file entry * @see MFFalloutDAT2 */ class RawDataDAT2 : public RawDataMemSource { public: /** The needed information for the extraction. */ struct s_info { std::string name; uint32_t packedLength; uint32_t unpackedLength; uint32_t offset; uint32_t type; }; /** Constructor * @param vfs The vfs to open with. * @param datfile The .DAT archive - e.g. master.DAT * @param info The .DAT file entry, as retrieved by MFFalloutDAT2 */ RawDataDAT2(VFS* vfs, const std::string& datfile, const s_info& info); }; } #endif fifengine-0.4.1/engine/core/vfs/directoryprovider.cpp000066400000000000000000000053311304641216200227250ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/exception.h" #include "fife_boost_filesystem.h" #include "vfs.h" #include "directoryprovider.h" #include "vfsdirectory.h" namespace FIFE { bool DirectoryProvider::isReadable(const std::string& path) const { return bfs::is_directory(bfs::path(path)); } FIFE::VFSSource* DirectoryProvider::createSource(const std::string& path) { if (isReadable(path)) { VFSSource* source = NULL; if ( hasSource(path)) { source = m_sources[path]; } else { source = new VFSDirectory(getVFS(), path); m_sources[path] = source; } return source; } else throw Exception("Path " + path + " is not readable."); } VFSSource* DirectoryProvider::getSource(const std::string& path) const { VFSSource* source = NULL; if (hasSource(path)) { source = m_sources.find(path)->second; } return source; } bool DirectoryProvider::hasSource(const std::string & path) const { return m_sources.count(path) > 0; } } fifengine-0.4.1/engine/core/vfs/directoryprovider.h000066400000000000000000000066551304641216200224040ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_VFS_DIRECTORYPROVIDER_H #define FIFE_VFS_DIRECTORYPROVIDER_H // Standard C++ library includes #include #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "vfssourceprovider.h" namespace FIFE { class VFSSource; /** Provider for OS directories. */ class DirectoryProvider : public VFSSourceProvider { public: DirectoryProvider() : VFSSourceProvider("OS Directory") { } /** Check if a given directory is readable. * The path must either be an absolute path or relative * to the current working directory where the client was launched * * @param path the filename to check * @return true if readable, false otherwise */ virtual bool isReadable(const std::string& path) const; /** Create a new instance of a VFSSource initialized with the given directory * This will only pass if the path is readable and recognized * as a directory as per the description of isReadable * * @param path the directory to open * @return the new VFSSource */ virtual VFSSource* createSource(const std::string& path); /** Get the source instance of the path * * @param path The source path * @return A VFSSource or NULL of none is present */ virtual VFSSource* getSource(const std::string& path) const; /** Check whether the provider already has created a source with that path * * @param path The path to the source * @return true if the provider has already created a source with that path, false if not */ virtual bool hasSource(const std::string & path) const; private: std::string m_name; std::map m_sources; }; } #endif fifengine-0.4.1/engine/core/vfs/fife_boost_filesystem.cpp000066400000000000000000000205411304641216200235310ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // 3rd party library includes #include #include #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "fife_boost_filesystem.h" namespace { // grab the major and minor version of boost, // calculations taken from boost/version.hpp #define BOOST_MAJOR_VERSION BOOST_VERSION / 100000 #define BOOST_MINOR_VERSION BOOST_VERSION / 100 % 1000 #if (BOOST_MAJOR_VERSION >= 1 && BOOST_MINOR_VERSION >= 44 && defined(BOOST_FILESYSTEM_VERSION)) #if (BOOST_FILESYSTEM_VERSION == 2) // if this macro is defined to 2 the the user wants to // force the use of boost filesystem version 2 so we // will set our internal macros correctly to do that #define USE_NON_DEPRECATED_BOOST_FILESYSTEM_V2 #elif (BOOST_FILESYSTEM_VERSION == 3) // if this macro is set to 3 then the user wants to force // the use of boost filesystem version 3 so we will set // our internal macros correctly to do that #define USE_BOOST_FILESYSTEM_V3 #endif #elif (BOOST_MAJOR_VERSION >= 1 && BOOST_MINOR_VERSION >= 46) // this define will tell us to use boost filesystem // version 3 since this is the default version of the library // starting in boost version 1.46 and above #define USE_BOOST_FILESYSTEM_V3 #elif (BOOST_MAJOR_VERSION >= 1 && BOOST_MINOR_VERSION >= 36) // this define will tell us not to use the deprecated functions // in boost filesystem version 2 library which were introduced // in boost version 1.36 and above #define USE_NON_DEPRECATED_BOOST_FILESYSTEM_V2 #endif } namespace FIFE { bool HasParentPath(const bfs::path& path) { #if defined(USE_BOOST_FILESYSTEM_V3) || defined(USE_NON_DEPRECATED_BOOST_FILESYSTEM_V2) return path.has_parent_path(); #else return path.has_branch_path(); #endif } bfs::path GetParentPath(const bfs::path& path) { #if defined(USE_BOOST_FILESYSTEM_V3) || defined(USE_NON_DEPRECATED_BOOST_FILESYSTEM_V2) return path.parent_path(); #else return path.branch_path(); #endif } std::string GetFilenameFromPath(const bfs::path& path) { #if defined(USE_BOOST_FILESYSTEM_V3) // boost version 1.46 and above uses // boost filesystem version 3 as the default // which has yet a different way of getting // a filename string return path.filename().string(); #elif defined(USE_NON_DEPRECATED_BOOST_FILESYSTEM_V2) // the new way in boost filesystem version 2 // to get a filename string //(this is for boost version 1.36 and above) return path.filename(); #else // the old way in boost filesystem version 2 // to get a filename string //(this is for boost version 1.35 and below) return path.leaf(); #endif } std::string GetFilenameFromDirectoryIterator(const bfs::directory_iterator& iter) { bfs::directory_iterator badIter; // early exit for bad directory_iterator parameter if (iter == badIter) { return ""; } #if defined(USE_BOOST_FILESYSTEM_V3) // boost version 1.46 and above uses // boost filesystem version 3 as the default // which has yet a different way of getting // a filename string return iter->path().filename().string(); #elif defined(USE_NON_DEPRECATED_BOOST_FILESYSTEM_V2) // the new way in boost filesystem version 2 // to get a filename string //(this is for boost version 1.36 and above) return iter->path().filename(); #else // the old way in boost filesystem version 2 // to get a filename string //(this is for boost version 1.35 and below) return iter->leaf(); #endif } std::string GetPathIteratorAsString(const bfs::path::iterator& pathIter) { #if defined(USE_BOOST_FILESYSTEM_V3) // in boost::filesystem v3 the path iterator is now // represented by a path object internally so we // must now additionally call the .string() method // to get an std::string representation return (*pathIter).string(); #else // in boost::filesystem v2 the path iterator // holds the string representation so we can // use it directly return (*pathIter); #endif } bfs::path GetAbsolutePath(const std::string& path) { return GetAbsolutePath(bfs::path(path)); } bfs::path GetAbsolutePath(const bfs::path& path) { #if defined(USE_BOOST_FILESYSTEM_V3) return bfs::absolute(path); #else return bfs::complete(path); #endif } bool HasExtension(const std::string& path) { return HasExtension(bfs::path(path)); } bool HasExtension(const bfs::path& path) { // not sure this gives the same results as below // because the "." will be included in the extension // meaning that this may return true for a path that // is simply has an empty extension // see link for more information: // http://www.boost.org/doc/libs/1_49_0/libs/filesystem/v3/doc/reference.html#path-extension //return path.has_extension(); std::string extension = GetExtension(path); if (extension.empty() || extension == ".") { return false; } else { return true; } } std::string GetExtension(const std::string& path) { return GetExtension(bfs::path(path)); } std::string GetExtension(const bfs::path& path) { #if defined(USE_BOOST_FILESYSTEM_V3) return path.extension().string(); #else return bfs::extension(path); #endif } std::string GetStem(const std::string& path){ return GetStem(bfs::path(path)); } std::string GetStem(const bfs::path& path) { #if defined(USE_BOOST_FILESYSTEM_V3) if (!HasExtension(path)) { // if no extension return empty string return ""; } else { return path.stem().string(); } #else if (!HasExtension(path)) { // if no extension, return empty string return ""; } else { return path.stem(); } #endif } }fifengine-0.4.1/engine/core/vfs/fife_boost_filesystem.h000066400000000000000000000122741304641216200232020ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_VFS_H_ #define FIFE_VFS_H_ // Standard C++ library includes // 3rd party library includes #include // #include // #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder namespace bfs = boost::filesystem; namespace FIFE { /** Helper function to determine if a path object has a parent path * @param path boost filesystem path object * @return true - does have parent path * false - does not have parent path */ bool HasParentPath(const bfs::path& path); /** Helper function to retrieve a parent path object from a path object * @param path boost filesystem path object * @return a path object with parent of passed in parameter */ bfs::path GetParentPath(const bfs::path& path); /** Helper function to retrieve the filename from a boost filesystem path * filename is just the name of the file and any extension without a path * @param path boost filesystem path object * @return filename string */ std::string GetFilenameFromPath(const bfs::path& path); /** Helper function to retrieve a filename string from a directory iterator * @param iter boost filesystem directory_iterator object * @return a filename string */ std::string GetFilenameFromDirectoryIterator(const bfs::directory_iterator& iter); /** Helper function to retrieve the path iterator in a string representation * @param pathIter the iterator to get the string from * @return a string representing the value in the path iterator */ std::string GetPathIteratorAsString(const bfs::path::iterator& pathIter); /** Helper function to retrieve an absolute path from a given relative path * @param path std::string object * @return a boost filesystem path object */ bfs::path GetAbsolutePath(const std::string& path); /** Helper function to retrieve an absolute path from a given relative path * @param path boost filesystem path object * @return a boost filesystem path object */ bfs::path GetAbsolutePath(const bfs::path& path); /** Helper function to check if a filename has an extension * @param path boost filesystem path object * @return true if filename has extension, false if not */ bool HasExtension(const std::string& path); /** Helper function to check if a filename has an extension * @param path boost filesystem path object * @return true if filename has extension, false if not */ bool HasExtension(const bfs::path& path); /** Helper function to retrieve the extension * @note the extension includes the "." * @param path the input path string * @return the extension on the input path */ std::string GetExtension(const std::string& path); /** Helper function to retrieve the extension * @note the extension includes the "." * @param path the input path object * @return the extension on the input path */ std::string GetExtension(const bfs::path& path); /** Helper function to retrieve the filename minus any extension * @note the "." is NOT included * @param path the input path string * @return the filename minus any extension */ std::string GetStem(const std::string& path); /** Helper function to retrieve the filename minus any extension * @note the "." is NOT included * @param path the input path object * @return the filename minus any extension */ std::string GetStem(const bfs::path& path); } #endif fifengine-0.4.1/engine/core/vfs/raw/000077500000000000000000000000001304641216200172315ustar00rootroot00000000000000fifengine-0.4.1/engine/core/vfs/raw/rawdata.cpp000066400000000000000000000117371304641216200213710ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include #include #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/exception.h" #include "util/log/logger.h" #include "rawdata.h" namespace FIFE { static Logger _log(LM_VFS); RawData::RawData(RawDataSource* datasource) : m_datasource(datasource), m_index_current(0) { } RawData::~RawData() { delete m_datasource; } std::vector RawData::getDataInBytes() { // get the total file size uint32_t size = getDataLength(); // create output vector std::vector target; // resize vector to file size target.resize(size); // read bytes directly into vector readInto(&target[0], target.size()); return target; } std::vector RawData::getDataInLines() { std::vector target; std::string line; while (getLine(line)) { target.push_back(line); } return target; } uint32_t RawData::getDataLength() const { return m_datasource->getSize(); } uint32_t RawData::getCurrentIndex() const { return m_index_current; } void RawData::setIndex(uint32_t index) { if (index > getDataLength()) throw IndexOverflow(__FUNCTION__); m_index_current = index; } void RawData::moveIndex(int32_t offset) { setIndex(getCurrentIndex() + offset); } void RawData::readInto(uint8_t* buffer, size_t len) { if (m_index_current + len > getDataLength()) { FL_LOG(_log, LMsg("RawData") << m_index_current << " : " << len << " : " << getDataLength()); throw IndexOverflow(__FUNCTION__); } m_datasource->readInto(buffer, m_index_current, len); m_index_current += len; } uint8_t RawData::read8() { return readSingle(); } uint16_t RawData::read16Little() { uint16_t val = readSingle(); return littleToHost(val); } uint32_t RawData::read32Little() { uint32_t val = readSingle(); return littleToHost(val); } uint16_t RawData::read16Big() { uint16_t val = readSingle(); return bigToHost(val); } uint32_t RawData::read32Big() { uint32_t val = readSingle(); return bigToHost(val); } std::string RawData::readString(size_t len) { std::vector strVector; strVector.resize(len); readInto(&strVector[0], len); std::string ret(strVector.begin(), strVector.end()); return ret; } void RawData::read(std::string& outbuffer, int32_t size) { if ((size < 0) || ((size + m_index_current) > getDataLength())) { size = getDataLength() - m_index_current; } if (size == 0) { outbuffer = ""; return; } outbuffer.resize(size); // read directly into string readInto(reinterpret_cast(&outbuffer[0]), size); } bool RawData::getLine(std::string& buffer) { if (getCurrentIndex() >= getDataLength()) return false; buffer = ""; char c; while (getCurrentIndex() < getDataLength() && (c = read8()) != '\n') buffer += c; return true; } bool RawData::littleEndian() { static int32_t endian = 2; if (endian == 2) { uint32_t value = 0x01; endian = reinterpret_cast(&value)[0]; FL_LOG(_log, LMsg("RawData") << "we are on a " << (endian == 1 ? "little endian" : "big endian") << " machine"); } return endian == 1; } }//FIFE fifengine-0.4.1/engine/core/vfs/raw/rawdata.h000066400000000000000000000141311304641216200210250ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_VFS_RAW_RAWDATA_H #define FIFE_VFS_RAW_RAWDATA_H // Standard C++ library includes #include // Platform specific includes #include "util/base/fife_stdint.h" // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "rawdatasource.h" namespace FIFE { /** Used to access diffrent kinds of data. * * RawData uses RawDataSource to get the real data - that way the user doesn't have to know where the data comes * from (real files, files inside archives etc.) */ class RawData { public: RawData(RawDataSource* datasource); virtual ~RawData(); /** get the data as a vector of bytes * This does not append a null terminator to the end */ std::vector getDataInBytes(); /** get the data in distinct lines */ std::vector getDataInLines(); /** get the complete datalength * * @return the complete datalength */ uint32_t getDataLength() const; /** get the current index * * @return the current index */ uint32_t getCurrentIndex() const; /** set the current index * * @param index the new index * @throws IndexOverflow if index is >= getDataLength() */ void setIndex(uint32_t index); /** move the current index * * @param offset the offset * @throws IndexOverflow if we move outside the datalength */ void moveIndex(int32_t offset); /** helper-function * * reads sizeof(T) bytes - should be used with fixed-size datatypes like uint32_t, uint16_t, uint8_t etc. * @return the data */ template T readSingle() { T val; readInto(reinterpret_cast(&val), sizeof(T)); return val; } /** read len bytes into buffer * * @param buffer the data will be written into it * @param len len bytes will be written * @throws IndexOverflow if currentindex + len > getCurrentIndex() */ void readInto(uint8_t* buffer, size_t len); /** reads 1 byte */ uint8_t read8(); /** reads a uint16_t littleEndian and converts them to the host-byteorder * @throws IndexOverflow */ uint16_t read16Little(); /** reads a uint16_t littleEndian and converts them to the host-byteorder * * @throws IndexOverflow */ uint32_t read32Little(); /** reads a uint16_t bigEndian and converts them to the host-byteorder * * @throws IndexOverflow */ uint16_t read16Big(); /** reads a uint16_t bigEndian and converts them to the host-byteorder * * @throws IndexOverflow */ uint32_t read32Big(); /** read a string with len bytes, not assuming a terminating 0 * Appends a null terminator character to the end * * @param len the stringlen * @return the string * @throws IndexOverflow */ std::string readString(size_t len); /** Reads all data into the buffer * This does not append a null terminator to the end * Created to especially fulfill python file interface requirements */ void read(std::string& outbuffer, int32_t size=-1); /** reads until a \\n is encountered or no more data is available * * @param buffer if successfull the new string will be assigned to buffer * @return true if data was available, false otherwise (in that case buffer won't be touched) */ bool getLine(std::string& buffer); private: RawDataSource* m_datasource; size_t m_index_current; template T littleToHost(T value) const { if (littleEndian()) return value; else return revert(value); } template T bigToHost(T value) const { if (!littleEndian()) return value; else return revert(value); } template T revert(T value) const { T retval; for (uint32_t i = 0; i < sizeof(T); ++i) reinterpret_cast(&retval)[i] = reinterpret_cast(&value)[sizeof(T)-1-i]; return retval; } RawData(const RawData&); RawData& operator=(const RawData&) { return *this; }; static bool littleEndian(); }; typedef boost::shared_ptr RawDataPtr; class IndexSaver { public: IndexSaver(RawData* d) : m_rd(d), m_index(m_rd->getCurrentIndex()) {} ~IndexSaver() { m_rd->setIndex(m_index); } private: RawData* m_rd; uint32_t m_index; IndexSaver(const IndexSaver&); IndexSaver& operator=(const IndexSaver&) { return *this; } }; }//FIFE #endif fifengine-0.4.1/engine/core/vfs/raw/rawdata.i000066400000000000000000000045541304641216200210360ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "vfs/raw/rawdata.h" %} %include "vfs/raw/rawdatasource.h" namespace FIFE { %apply std::string &OUTPUT { std::string& outbuffer }; %apply uint8_t *OUTPUT { uint8_t* buffer }; class RawData { public: RawData(RawDataSource* datasource); virtual ~RawData(); std::vector getDataInBytes(); std::vector getDataInLines(); uint32_t getDataLength() const; uint32_t getCurrentIndex() const; void setIndex(uint32_t index); void moveIndex(int32_t offset); void readInto(uint8_t* buffer, size_t len); uint8_t read8(); uint16_t read16Little(); uint32_t read32Little(); uint16_t read16Big(); uint32_t read32Big(); void read(std::string& outbuffer, int32_t size=-1); std::string readString(size_t len); bool getLine(std::string& buffer); }; %clear std::string& outbuffer; } fifengine-0.4.1/engine/core/vfs/raw/rawdatafile.cpp000066400000000000000000000046251304641216200222270ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/exception.h" #include "rawdatafile.h" namespace FIFE { RawDataFile::RawDataFile(const std::string& file) : m_file(file), m_stream(m_file.c_str(), std::ios::binary), m_filesize(0) { if (!m_stream) throw CannotOpenFile(m_file); m_stream.seekg(0, std::ios::end); m_filesize = m_stream.tellg(); m_stream.seekg(0, std::ios::beg); } RawDataFile::~RawDataFile() { } uint32_t RawDataFile::getSize( ) const { return m_filesize; } void RawDataFile::readInto(uint8_t* buffer, uint32_t start, uint32_t length) { m_stream.seekg(start); m_stream.read(reinterpret_cast(buffer), length); } } fifengine-0.4.1/engine/core/vfs/raw/rawdatafile.h000066400000000000000000000047731304641216200217000ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_VFS_RAW_RAWDATAFILE_H #define FIFE_VFS_RAW_RAWDATAFILE_H // Standard C++ library includes #include #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "rawdatasource.h" namespace FIFE { /** A RawDataSource for a file on the host system * @see VFSHostSystem * @see RawDataSource */ class RawDataFile : public RawDataSource { public: /** Constructor * Constructs a RawDataSource for file. * @param file The path to the file to load. * @throw CannotOpenFile */ RawDataFile(const std::string& file); virtual ~RawDataFile(); virtual uint32_t getSize() const; virtual void readInto(uint8_t* buffer, uint32_t start, uint32_t length); private: std::string m_file; std::ifstream m_stream; uint32_t m_filesize; }; } #endif fifengine-0.4.1/engine/core/vfs/raw/rawdatamemsource.cpp000066400000000000000000000044441304641216200233060ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "rawdatamemsource.h" namespace FIFE { RawDataMemSource::RawDataMemSource(uint32_t len) : m_data(new uint8_t[len]), m_datalen(len) { } RawDataMemSource::~RawDataMemSource() { delete[] m_data; } uint32_t RawDataMemSource::getSize() const { return m_datalen; } void RawDataMemSource::readInto(uint8_t* buffer, uint32_t start, uint32_t length) { std::copy(m_data + start, m_data + start + length, buffer); } uint8_t* RawDataMemSource::getRawData() const { return m_data; } } fifengine-0.4.1/engine/core/vfs/raw/rawdatamemsource.h000066400000000000000000000055321304641216200227520ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_VFS_RAW_RAWDATAMEMSOURE_H #define FIFE_VFS_RAW_RAWDATAMEMSOURE_H // Standard C++ library includes // Platform specific includes #include "util/base/fife_stdint.h" // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "rawdatasource.h" namespace FIFE { /** * Simpe RawDataSource that reads data from raw memory * * @note This Class is @b not incomplete. Use @c getRawData to * write into the Buffer. * * @see RawDataSource */ class RawDataMemSource : public RawDataSource { public: /** * Create a new RawDataMemSource that allocates datalen bytes. * @param datalen the datalen to allocate */ RawDataMemSource(uint32_t datalen); virtual ~RawDataMemSource(); /** Get a Pointer to the data * You need to use this function to fill the class with meaningfull data. */ uint8_t* getRawData() const; virtual uint32_t getSize() const; virtual void readInto(uint8_t* buffer, uint32_t start, uint32_t length); private: uint8_t* m_data; uint32_t m_datalen; RawDataMemSource(const RawDataMemSource&) {}; RawDataMemSource& operator=(const RawDataMemSource) { return *this; } }; } #endif fifengine-0.4.1/engine/core/vfs/raw/rawdatasource.cpp000066400000000000000000000036161304641216200226070ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "rawdatasource.h" namespace FIFE { RawDataSource::RawDataSource() {} RawDataSource::~RawDataSource() {} } fifengine-0.4.1/engine/core/vfs/raw/rawdatasource.h000066400000000000000000000051341304641216200222510ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_VFS_RAW_RAWDATASOURCE_H #define FIFE_VFS_RAW_RAWDATASOURCE_H // Standard C++ library includes // Platform specific includes #include "util/base/fife_stdint.h" // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder namespace FIFE { /** Abstract baseclass - provides data for RawData * * RawData uses RawDataSources to access the data - if you want to add support for a new archivetype this is one of * the classes you need. */ class RawDataSource { public: RawDataSource(); virtual ~RawDataSource(); /** get the complete datasize */ virtual uint32_t getSize() const = 0; /** read data from the source * * @param buffer the data will be written into buffer * @param start the startindex inside the source * @param length length bytes will be written into buffer */ virtual void readInto(uint8_t* buffer, uint32_t start, uint32_t length) = 0; }; } #endif fifengine-0.4.1/engine/core/vfs/vfs.cpp000066400000000000000000000176001304641216200177460ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // 3rd party library includes #include #include #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/exception.h" #include "util/log/logger.h" #include "vfs.h" #include "vfssource.h" #include "vfssourceprovider.h" namespace FIFE { /** Logger to use for this source file. * @relates Logger */ static Logger _log(LM_VFS); VFS::VFS() : m_sources() {} VFS::~VFS() { cleanup(); } void VFS::cleanup() { type_sources sources = m_sources; type_sources::const_iterator end = sources.end(); for (type_sources::iterator i = sources.begin(); i != end; ++i) delete *i; type_providers::const_iterator end2 = m_providers.end(); for (type_providers::iterator j = m_providers.begin(); j != end2; ++j) delete *j; m_providers.clear(); } void VFS::addProvider(VFSSourceProvider* provider) { provider->setVFS(this); m_providers.push_back(provider); FL_LOG(_log, LMsg("new provider: ") << provider->getName()); } VFSSource* VFS::createSource(const std::string& path) { if (hasSource(path)) { FL_WARN(_log, LMsg(path) << " is already used as VFS source"); return 0; } type_providers::const_iterator end = m_providers.end(); for (type_providers::const_iterator i = m_providers.begin(); i != end; ++i) { VFSSourceProvider* provider = *i; if (!provider->isReadable(path)) continue; try { VFSSource* source = provider->createSource(path); return source; } catch (const Exception& ex) { FL_WARN(_log, LMsg(provider->getName()) << " thought it could load " << path << " but didn't succeed (" << ex.what() << ")"); continue; } catch (...) { FL_WARN(_log, LMsg(provider->getName()) << " thought it could load " << path << " but didn't succeed (unknown exception)"); continue; } } FL_WARN(_log, LMsg("no provider for ") << path << " found"); return 0; } void VFS::addNewSource(const std::string& path) { VFSSource* source = createSource(path); if (source) { addSource(source); } else { FL_WARN(_log, LMsg("Failed to add new VFS source: ") << path); } } void VFS::addSource(VFSSource* source) { m_sources.push_back(source); } void VFS::removeSource(VFSSource* source) { type_sources::iterator i = std::find(m_sources.begin(), m_sources.end(), source); if (i != m_sources.end()) m_sources.erase(i); } void VFS::removeSource(const std::string& path) { type_providers::iterator end = m_providers.end(); for (type_providers::iterator i = m_providers.begin(); i != end; ++i) { VFSSourceProvider* provider = *i; if (provider->hasSource(path)) { VFSSource* source = provider->getSource(path); type_sources::iterator i = std::find(m_sources.begin(), m_sources.end(), source); if (i == m_sources.end()) { removeSource(*i); return; } } } } VFSSource* VFS::getSourceForFile(const std::string& file) const { type_sources::const_iterator i = std::find_if(m_sources.begin(), m_sources.end(), boost::bind2nd(boost::mem_fun(&VFSSource::fileExists), file)); if (i == m_sources.end()) { FL_WARN(_log, LMsg("no source for ") << file << " found"); return 0; } return *i; } bool VFS::exists(const std::string& file) const { return getSourceForFile(file) != 0; } bool VFS::isDirectory(const std::string& path) const { std::vector tokens; // Add a slash in case there isn't one in the string const std::string newpath = path + "/"; boost::algorithm::split(tokens, newpath, boost::algorithm::is_any_of("/")); std::string currentpath = "/"; std::vector::const_iterator token=tokens.begin(); while (token != tokens.end()) { if (*token != "") { if (*token != "." && *token != ".." && listDirectories(currentpath, *token).size() == 0) { return false; } else { currentpath += *token + "/"; } } ++token; } return true; } RawData* VFS::open(const std::string& path) { FL_DBG(_log, LMsg("Opening: ") << path); VFSSource* source = getSourceForFile(path); if (!source) throw NotFound(path); return source->open(path); } std::set VFS::listFiles(const std::string& pathstr) const { std::set list; type_sources::const_iterator end = m_sources.end(); for (type_sources::const_iterator i = m_sources.begin(); i != end; ++i) { std::set sourcelist = (*i)->listFiles(pathstr); list.insert(sourcelist.begin(), sourcelist.end()); } return list; } std::set VFS::listFiles(const std::string& path, const std::string& filterregex) const { std::set list = listFiles(path); return filterList(list, filterregex); } std::set VFS::listDirectories(const std::string& pathstr) const { std::set list; type_sources::const_iterator end = m_sources.end(); for (type_sources::const_iterator i = m_sources.begin(); i != end; ++i) { std::set sourcelist = (*i)->listDirectories(pathstr); list.insert(sourcelist.begin(), sourcelist.end()); } return list; } std::set VFS::listDirectories(const std::string& path, const std::string& filterregex) const { std::set list = listDirectories(path); return filterList(list, filterregex); } std::set VFS::filterList(const std::set& list, const std::string& fregex) const { std::set results; boost::regex regex(fregex); std::set::const_iterator end = list.end(); for (std::set::const_iterator i = list.begin(); i != end;) { boost::cmatch match; if (boost::regex_match((*i).c_str(), match, regex)) { results.insert(*i); } ++i; } return results; } bool VFS::hasSource(const std::string& path) const { type_providers::const_iterator end = m_providers.end(); for (type_providers::const_iterator i = m_providers.begin(); i != end; ++i) { const VFSSourceProvider* provider = *i; if (provider->hasSource(path)) { const VFSSource* source = provider->getSource(path); type_sources::const_iterator i = std::find(m_sources.begin(), m_sources.end(), source); if (i == m_sources.end()) return false; return true; } } return false; } } fifengine-0.4.1/engine/core/vfs/vfs.h000066400000000000000000000140461304641216200174140ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_VFS_VFS_H #define FIFE_VFS_VFS_H // Standard C++ library includes #include #include #include // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/singleton.h" namespace FIFE { class RawData; class VFSSourceProvider; class VFSSource; /** the main VFS (virtual file system) class * * The VFS is intended to provide transparent and portable access to files. * @note The VFS searches for a provider in the order they are added to the * VFS. Since the VFSHostSystem is added first, this implies, that host filesystem * files will override whatever might be in other VFS Sources (e.g. the DAT files) * * @note All filenames have to be @b lowercase. The VFS will convert them to lowercase * and emit a warning. This is done to avoid problems with filesystems which are not * case sensitive. */ class VFS : public DynamicSingleton{ public: /** Constructor * Called by the Engine on startup. Never create one yourself. */ VFS(); /** Destructor */ virtual ~VFS(); void cleanup(); /** add new VFSSourceProvider * * @note VFS assumes ownership over the given provider - so don't do anything with it * after you call this function, especialy don't delete it! * @param provider the new provider */ void addProvider(VFSSourceProvider* provider); /** tries to create a new VFSSource for the given file * * all currently known VFSSourceProviders are tried until one succeeds - if no provider succeeds 0 is returned * @param path the archive-file * @return the new VFSSource or 0 if no provider was succesfull or the file was already used as source */ VFSSource* createSource(const std::string& path); /** create a new Source and add it to VFS * @see VFSSource* createSource(const std::string& file) */ void addNewSource(const std::string& path); /** Add a new VFSSource */ void addSource(VFSSource* source); /** remove a VFSSource */ void removeSource(VFSSource* source); void removeSource(const std::string& path); /** Check if the given file exists * * @param file the filename * @return true if it exists, false if not */ bool exists(const std::string& file) const; /** Check if the given path is a directory * * @param path to check * @return true if it is a directory, false if not */ bool isDirectory(const std::string& path) const; /** Open a file * * @param path the file to open * @return the opened file; delete this when done. * @throws NotFound if the file cannot be found */ RawData* open(const std::string& path); /** Get a filelist of the given directory * * @param path the directory * @return the filelist */ std::set listFiles(const std::string& path) const; /** List the files of a given directory matching a regex * * The whole string has to match the regex, this means if you want all files that end with .map don't search for * "\.map" but ".*\.map" (and escape the \) * * @param path the directory * @param filterregex the regex the files have to match * @return the filelist */ std::set listFiles(const std::string& path, const std::string& filterregex) const; /** Get a directorylist of the given directory * * @param path the directory * @return the directorylist */ std::set listDirectories(const std::string& path) const; /** List the subdirectorys of a given directory matching a regex * * @param path the directory * @param filterregex the regex the files have to match * @return the filelist */ std::set listDirectories(const std::string& path, const std::string& filterregex) const; /** Checks if a source is already present in a provider * * @param path the directory * @return true if the source is present, false if not */ bool hasSource(const std::string& path) const; private: typedef std::vector type_providers; type_providers m_providers; typedef std::vector type_sources; type_sources m_sources; std::set filterList(const std::set& list, const std::string& fregex) const; VFSSource* getSourceForFile(const std::string& file) const; }; } #endif fifengine-0.4.1/engine/core/vfs/vfs.i000066400000000000000000000042001304641216200174040ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "util/base/exception.h" #include "vfs/vfs.h" %} %include "vfs/raw/rawdata.i" namespace std{ %template(StringSet) set; } namespace std { %template(vectoru) vector; }; namespace FIFE { class VFS { public: VFS(); virtual ~VFS(); void cleanup(); void addNewSource(const std::string& path); void removeSource(const std::string& path); bool exists(const std::string& file) const; RawData* open(const std::string& path); std::set listFiles(const std::string& path) const; std::set listDirectories(const std::string& path) const; }; } fifengine-0.4.1/engine/core/vfs/vfsdirectory.cpp000066400000000000000000000074611304641216200216770ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "vfs/raw/rawdata.h" #include "vfs/raw/rawdatafile.h" #include "util/log/logger.h" #include "util/base/exception.h" #include "fife_boost_filesystem.h" #include "vfsdirectory.h" namespace FIFE { /** Logger to use for this source file. * @relates Logger */ static Logger _log(LM_VFS); VFSDirectory::VFSDirectory(VFS* vfs, const std::string& root) : VFSSource(vfs), m_root(root) { FL_DBG(_log, LMsg("VFSDirectory created with root path ") << m_root); if(!m_root.empty() && *(m_root.end() - 1) != '/') m_root.append(1,'/'); } VFSDirectory::~VFSDirectory() { } bool VFSDirectory::fileExists(const std::string& name) const { std::string fullFilename = m_root + name; bfs::path fullPath(fullFilename); std::ifstream file(fullPath.string().c_str()); if (file) return true; return false; } RawData* VFSDirectory::open(const std::string& file) const { return new RawData(new RawDataFile(m_root + file)); } std::set VFSDirectory::listFiles(const std::string& path) const { return list(path, false); } std::set VFSDirectory::listDirectories(const std::string& path) const { return list(path, true); } std::set VFSDirectory::list(const std::string& path, bool directorys) const { std::set list; std::string dir = m_root; // Avoid double slashes if(path[0] == '/' && m_root[m_root.size()-1] == '/') { dir.append(path.substr(1)); } else { dir.append(path); } try { bfs::path boost_path(dir); if (!bfs::exists(boost_path) || !bfs::is_directory(boost_path)) return list; bfs::directory_iterator end; for (bfs::directory_iterator i(boost_path); i != end; ++i) { if (bfs::is_directory(*i) != directorys) continue; std::string filename = GetFilenameFromDirectoryIterator(i); if (!filename.empty()) { list.insert(filename); } } } catch (const bfs::filesystem_error& ex) { throw Exception(ex.what()); } return list; } } fifengine-0.4.1/engine/core/vfs/vfsdirectory.h000066400000000000000000000065761304641216200213520ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_VFS_VFSHOSTSYSTEM_H #define FIFE_VFS_VFSHOSTSYSTEM_H // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "vfssource.h" namespace FIFE { /** The most basic VFSSource for "normal" filesystems. * For example, '/' or './tests/data'. * * Uses boost_filesystem to achieve Plattform independancy. * This also means you have to use slashes as directory * separators. */ class VFSDirectory : public VFSSource { public: /** Constructor * Creates the given file system's VFS Source, Uses boost_filesystem to * achieve Plattform independancy. */ VFSDirectory(VFS* vfs, const std::string& root = "./"); /** Destructor */ virtual ~VFSDirectory(); /** Tests whether a file can be opened. * @param filename The file to test. * @return True, if the file filename can be opened. */ virtual bool fileExists(const std::string& filename) const; /** Opens a file. * @param filename The file to open. */ virtual RawData* open(const std::string& filename) const; /** List files in a directory * @param path The directory to list the files in * @return A string list of filenames * Will return an empty list on \b any error */ std::set listFiles(const std::string& path) const; /** List directories in a directory * @param path The directory to list the directories in * @return A string list of directories * Will return an empty list on \b any error */ std::set listDirectories(const std::string& path) const; private: std::string m_root; std::set list(const std::string& path, bool directorys) const; }; } #endif fifengine-0.4.1/engine/core/vfs/vfssource.cpp000066400000000000000000000043361304641216200211710ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "vfs.h" #include "vfssource.h" namespace FIFE { VFSSource::VFSSource(VFS* vfs) : m_vfs(vfs) {} VFSSource::~VFSSource() { m_vfs->removeSource(this); } } std::string FIFE::VFSSource::fixPath(std::string path) const { if (!path.size()) return path; size_t pos; while ((pos = path.find('\\')) != std::string::npos) path[pos] = '/'; if (path[0] == '/') path = path.substr(1, path.length()); return path; } fifengine-0.4.1/engine/core/vfs/vfssource.h000066400000000000000000000064261304641216200206400ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_VFS_VFSSOURCE_H #define FIFE_VFS_VFSSOURCE_H // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "vfs.h" namespace FIFE { class RawData; /** VFSSource abstract baseclass * * VFSSources are used to provide transparent access to diffrent archives/filesystems etc. * Examples are VFSHostSystem * @see VFS * @see VFSSourceProvider */ class VFSSource { public: VFSSource(VFS* vfs); virtual ~VFSSource(); /** check if the given file exists * * @param file filename to check * @return true if it exists, false otherwise */ virtual bool fileExists(const std::string& file) const = 0; /** get the VFS this source is associated with. */ VFS* getVFS() const { return m_vfs; } /** open a file inside this source * * @param file the file to open * @return a new RawData* * @throws CannotOpenFile if the file can't be found */ virtual RawData* open(const std::string& file) const = 0; /** list all files in a directory of this source * * @param path path to list files in * Will return an empty list on \b any error */ virtual std::set listFiles(const std::string& path) const = 0; /** list all directories in a directory of this source * * @param path path to list directories in * Will return an empty list on \b any error */ virtual std::set listDirectories(const std::string& path) const = 0; protected: std::string fixPath(std::string path) const; private: VFS* m_vfs; }; } #endif fifengine-0.4.1/engine/core/vfs/vfssourceprovider.cpp000066400000000000000000000045661304641216200227510ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/log/logger.h" #include "vfssource.h" #include "vfssourceprovider.h" namespace FIFE { /** Logger to use for this source file. * @relates Logger */ static Logger _log(LM_VFS); VFSSourceProvider::VFSSourceProvider(const std::string& name) : m_vfs(0), m_name(name) { } VFSSourceProvider::~VFSSourceProvider() { } void VFSSourceProvider::setVFS(VFS* vfs) { if (m_vfs) { FL_WARN(_log, "Attempt to set a VFSSourceProvider that is already associated with a VFS."); return ; } m_vfs = vfs; } const std::string& VFSSourceProvider::getName() const { return m_name; } } fifengine-0.4.1/engine/core/vfs/vfssourceprovider.h000066400000000000000000000076161304641216200224150ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_VFS_VFSSOURCEPROVIDER_H #define FIFE_VFS_VFSSOURCEPROVIDER_H // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/exception.h" namespace FIFE { class VFSSource; /** VFSSourceProvider abstract baseclass * * If you add support for a new archive-type (like the fallout1&dat files) you should * also create a new VFSSourceProvider for your VFSSource - once this is done * its very easy to load new archives even without knowing their real type. * @see VFS * @see VFSSource * @see VFSSourceFactory */ class VFSSourceProvider{ public: VFSSourceProvider(const std::string& name); virtual ~VFSSourceProvider(); /** Returns the name of this VFSSourceProvider * * @return name */ const std::string& getName() const; /** Get the VFS this provider is using. Providers will not be able to locate * sources before a VFS is set. VFS::addProvider sets this automatically. */ void setVFS(VFS* vfs); VFS* getVFS() const { if(!m_vfs) throw NotSet("Attempt to load from VFSSourceProvider without setting a VFS!"); return m_vfs; } /** Check if a given file is readable for this VFSSource * * * @param file the filename to check * @return true if readable, false otherwise */ virtual bool isReadable(const std::string& file) const = 0; /** Create a new instance of a VFSSource initialized with the given file * * @param file the filename to open (the archive-file) * @return the new VFSSource */ virtual VFSSource* createSource(const std::string& file) = 0; /** Get the source instance of the path * * @param path The source path * @return A VFSSource or NULL of none is present */ virtual VFSSource* getSource(const std::string& path) const = 0; /** Check whether the provider already has created a source with that path * * @param path The path to the source * @return true if the provider has already created a source with that path, false if not */ virtual bool hasSource(const std::string & path) const = 0; private: VFS* m_vfs; std::string m_name; }; } #endif fifengine-0.4.1/engine/core/vfs/zip/000077500000000000000000000000001304641216200172425ustar00rootroot00000000000000fifengine-0.4.1/engine/core/vfs/zip/zipfilesource.cpp000066400000000000000000000043571304641216200226420ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "zipfilesource.h" namespace FIFE { ZipFileSource::ZipFileSource(uint8_t* data, uint32_t datalen) : m_data(data), m_datalen(datalen) { } ZipFileSource::~ZipFileSource() { delete[] m_data; } uint32_t ZipFileSource::getSize() const { return m_datalen; } void ZipFileSource::readInto(uint8_t* target, uint32_t start, uint32_t len) { assert(start + len <= m_datalen); memcpy(target, m_data + start, len); } } fifengine-0.4.1/engine/core/vfs/zip/zipfilesource.h000066400000000000000000000037201304641216200223000ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_VFS_ZIP_ZIPFILESOURCE_H #define FIFE_VFS_ZIP_ZIPFILESOURCE_H #include "vfs/raw/rawdatasource.h" namespace FIFE { class VFS; class ZipFileSource : public RawDataSource { public: ZipFileSource(uint8_t* data, uint32_t datalen); virtual ~ZipFileSource(); virtual uint32_t getSize() const; virtual void readInto(uint8_t* target, uint32_t start, uint32_t len); private: uint8_t* m_data; uint32_t m_datalen; }; } #endif fifengine-0.4.1/engine/core/vfs/zip/zipnode.cpp000066400000000000000000000221431304641216200214200ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "vfs/fife_boost_filesystem.h" #include "zipnode.h" namespace { /** helper function to find a value in a ZipNodeContainer * @param container the ZipNodeContainer to search through @param the name to search for @return the ZipNode pointer, or NULL if not found */ FIFE::ZipNode* FindNameInContainer(const FIFE::ZipNodeContainer& container, const std::string& name) { for (FIFE::ZipNodeContainer::const_iterator iter = container.begin(); iter != container.end(); ++iter) { if ((*iter)->getName() == name) { return *iter; } } return 0; } FIFE::ZipNodeContainer::iterator FindNameInContainer(FIFE::ZipNodeContainer& container, const std::string& name) { for (FIFE::ZipNodeContainer::iterator iter = container.begin(); iter != container.end(); ++iter) { if ((*iter)->getName() == name) { return iter; } } return container.end(); } } namespace FIFE { ZipEntryData::ZipEntryData() : comp(0), crc32(0), size_comp(0), size_real(0), offset(0) { } ZipNode::ZipNode(const std::string& name, ZipNode* parent/*=0*/) : m_name(name), m_parent(parent) { // set the content type based on whether // the name has an extension if (HasExtension(m_name)) { m_contentType = ZipContentType::File; } else { m_contentType = ZipContentType::Directory; } } ZipNode::~ZipNode() { ZipNodeContainer::iterator iter; for (iter = m_fileChildren.begin(); iter != m_fileChildren.end(); ++iter) { delete *iter; } m_fileChildren.clear(); for (iter = m_directoryChildren.begin(); iter != m_directoryChildren.end(); ++iter) { delete *iter; } m_directoryChildren.clear(); } std::string ZipNode::getName() const { return m_name; } std::string ZipNode::getFullName() const { // traverse up the hierarchy of parents // to build the full path if (m_parent) { bfs::path path(m_parent->getFullName()); path /= m_name; return (path.string()); } else { return m_name; } } ZipContentType::Enum ZipNode::getContentType() const { return m_contentType; } ZipNode* ZipNode::getParent() const { return m_parent; } std::vector ZipNode::getChildren(ZipContentType::Enum contentType/*=ZipContentType::All*/) const { switch (contentType) { default: // fall through on purpose case ZipContentType::All: { // concatenate directory and file children // putting all directories before files // reserve space in destination vector to avoid // tons of vector resizing overhead ZipNodeContainer allNodes; allNodes.reserve(m_directoryChildren.size() + m_fileChildren.size()); allNodes.insert(allNodes.end(), m_directoryChildren.begin(), m_directoryChildren.end()); allNodes.insert(allNodes.end(), m_fileChildren.begin(), m_fileChildren.end()); return allNodes; } case ZipContentType::File: { return m_fileChildren; } case ZipContentType::Directory: { return m_directoryChildren; } } } ZipNode* ZipNode::getChild(const std::string& name, ZipContentType::Enum contentType/*=ZipContentType::All*/) const { bool hasExtension = HasExtension(name); switch (contentType) { default: // fall through on purpose case ZipContentType::All: { ZipNode* node = 0; if (hasExtension) { node = FindNameInContainer(m_fileChildren, name); } else { node = FindNameInContainer(m_directoryChildren, name); } return node; } case ZipContentType::File: { if (!hasExtension) { return 0; } return FindNameInContainer(m_fileChildren, name); } case ZipContentType::Directory: { if (hasExtension) { return 0; } return FindNameInContainer(m_directoryChildren, name); } } } ZipNode* ZipNode::addChild(const std::string& name) { ZipNode* child = new ZipNode(name, this); if (child) { if (child->getContentType() == ZipContentType::File) { m_fileChildren.push_back(child); } else if (child->getContentType() == ZipContentType::Directory) { m_directoryChildren.push_back(child); } else { // TODO - vtchill - error case here, maybe exception } } return child; } void ZipNode::removeChild(ZipNode* child) { if (child) { if (child->getContentType() == ZipContentType::File) { ZipNodeContainer::iterator iter; iter = std::find(m_fileChildren.begin(), m_fileChildren.end(), child); if (iter != m_fileChildren.end()) { delete *iter; m_fileChildren.erase(iter); } } } } void ZipNode::removeChild(const std::string& name) { if (HasExtension(name)) { ZipNodeContainer::iterator iter = FindNameInContainer(m_fileChildren, name); if (iter != m_fileChildren.end()) { delete *iter; m_fileChildren.erase(iter); } } else { ZipNodeContainer::iterator iter = FindNameInContainer(m_directoryChildren, name); if (iter != m_directoryChildren.end()) { delete *iter; m_directoryChildren.erase(iter); } } } bool ZipNode::isLeaf() const { return (m_fileChildren.empty() && m_directoryChildren.empty()); } bool ZipNode::isBranch() const { return (!isLeaf()); } void ZipNode::setZipEntryData(const ZipEntryData& entryData) { m_entryData = entryData; } const ZipEntryData& ZipNode::getZipEntryData() const { return m_entryData; } } std::ostream& operator<<(std::ostream& os, const FIFE::ZipNode& node) { // print node name first os << node.getName() << std::endl; // print all file children FIFE::ZipNodeContainer fileChildren = node.getChildren(FIFE::ZipContentType::File); FIFE::ZipNodeContainer::iterator iter; for (iter = fileChildren.begin(); iter != fileChildren.end(); ++iter) { os << *(*iter) << std::endl; } // print all directory children (recursively) FIFE::ZipNodeContainer directoryChildren = node.getChildren(FIFE::ZipContentType::Directory); for (iter = directoryChildren.begin(); iter != directoryChildren.end(); ++iter) { os << *(*iter) << std::endl; } return os; }fifengine-0.4.1/engine/core/vfs/zip/zipnode.h000066400000000000000000000141541304641216200210700ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_VFS_ZIP_ZIPNODE_H #define FIFE_VFS_ZIP_ZIPNODE_H // Standard C++ library includes #include #include #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/fife_stdint.h" namespace FIFE { struct ZipContentType { enum Enum { File = 0, // specifies files as content type Directory, // specifies directories as content type All // specifies everything as content type (no filter) }; }; struct ZipEntryData { /** constructor */ ZipEntryData(); uint16_t comp; uint32_t crc32; uint32_t size_comp; uint32_t size_real; uint32_t offset; }; // convenience typedef class ZipNode; typedef std::vector ZipNodeContainer; class ZipNode { public: /** constructor for creating a node * @param name the name of the node * @param parent the parent of this node, defaults to NULL */ ZipNode(const std::string& name, ZipNode* parent=0); /** destructor */ ~ZipNode(); /** accessor for the name of this node * */ std::string getName() const; /** accessor for the absolute path name of this node */ std::string getFullName() const; /** accessor for the content type of this node * @return ZipContentType enumeration */ ZipContentType::Enum getContentType() const; /** accessor for the parent node of this node * will be NULL if this node has no parent */ ZipNode* getParent() const; /** gives access to retrieve the children of this node * @param contentType allows filtering on the type of nodes * returned, @see ZipContentType for description * @return vector of ZipNode pointers matching the request */ std::vector getChildren(ZipContentType::Enum contentType=ZipContentType::All) const; /** gives access to retrieving a specific child node by name * @param name the name of the child node to search for * @param contentType optional for filtering on the type of node to return * @return the ZipNode pointer matching the child (NULL if not found) */ ZipNode* getChild(const std::string& name, ZipContentType::Enum contentType=ZipContentType::All) const; /** allows adding a child node to this node * @note this should only be used internally by the FIFE zip classes * @param child the name to add as a child node * @return the newly created child ZipNode */ ZipNode* addChild(const std::string& child); /** allows removing a child from this node * @param child the child node to remove */ void removeChild(ZipNode* child); /** allows removing a child node by name * @param name the name of the child to remove */ void removeChild(const std::string& name); /** accessor for checking if this node has any children * @return true if node has no children * false if node has children */ bool isLeaf() const; /** accessor for checking if this node has children * @return true if node has children * false if node does not have children */ bool isBranch() const; /** sets the zip file entry information for this * node in the zip archive * @param entryData the entry data that goes with this node */ void setZipEntryData(const ZipEntryData& entryData); /** accessor for the entry data associated with this node * in the zip archive * @return ZipEntryData for this node */ const ZipEntryData& getZipEntryData() const; private: std::string m_name; ZipContentType::Enum m_contentType; ZipEntryData m_entryData; ZipNode* m_parent; ZipNodeContainer m_fileChildren; ZipNodeContainer m_directoryChildren; }; } /** debug stream for a zip node * useful for debugging * @param os output stream * @param node the ZipNode to output * @return os output stream to allow for chaining */ std::ostream& operator<<(std::ostream& os, const FIFE::ZipNode& node); #endif fifengine-0.4.1/engine/core/vfs/zip/zipprovider.cpp000066400000000000000000000056211304641216200223270ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/exception.h" #include "vfs/vfs.h" #include "zipprovider.h" #include "zipsource.h" namespace FIFE { bool ZipProvider::isReadable(const std::string& file) const { // File name must have a .zip extension: // TODO: Case sensitive? if (file.find(".zip") == std::string::npos) return false; // File should exist: if (!getVFS()->exists(file)) return false; // File should start with the bytes "PK": // TODO: ... return true; } FIFE::VFSSource* ZipProvider::createSource(const std::string& file) { if (isReadable(file)) { VFSSource* source = NULL; if ( hasSource(file)) { source = m_sources[file]; } else { source = new ZipSource(getVFS(), file); m_sources[file] = source; } return source; } else throw Exception("File " + file + " is not readable."); } VFSSource* ZipProvider::getSource(const std::string& path) const { VFSSource* source = NULL; if (hasSource(path)) { source = m_sources.find(path)->second; } return source; } bool ZipProvider::hasSource(const std::string & path) const { return m_sources.count(path) > 0; } } fifengine-0.4.1/engine/core/vfs/zip/zipprovider.h000066400000000000000000000045711304641216200217770ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_ZIP_PROVIDER_H #define FIFE_ZIP_PROVIDER_H // Standard C++ library includes // #include // 3rd party library includes // // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "vfs/vfssourceprovider.h" namespace FIFE { /** A VFS provider for Zip archives. * * @see FIFE::VFSSourceProvider */ class ZipProvider : public VFSSourceProvider { public: ZipProvider() : VFSSourceProvider("ZIP") { } bool isReadable(const std::string& file) const; VFSSource* createSource(const std::string& file); VFSSource* getSource(const std::string& path) const; virtual bool hasSource(const std::string & path) const; private: std::map m_sources; }; } //FIFE #endif fifengine-0.4.1/engine/core/vfs/zip/zipsource.cpp000066400000000000000000000167371304641216200220070ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include #include // 3rd party library includes #include "zlib.h" #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "vfs/raw/rawdata.h" #include "vfs/fife_boost_filesystem.h" #include "util/base/exception.h" #include "util/log/logger.h" #include "zipsource.h" #include "zipfilesource.h" #include "zipnode.h" namespace FIFE { static const uint32_t LF_HEADER = 0x04034b50; static const uint32_t DE_HEADER = 0x08064b50; static const uint32_t CF_HEADER = 0x02014b50; static Logger _log(LM_LOADERS); ZipSource::ZipSource(VFS* vfs, const std::string& zip_file) : VFSSource(vfs), m_zipfile(vfs->open(zip_file)) { readIndex(); } ZipSource::~ZipSource() { delete m_zipfile; } bool ZipSource::fileExists(const std::string& file) const { bfs::path path(file); return (m_zipTree.getNode(path.string()) != 0); } RawData* ZipSource::open(const std::string& path) const { bfs::path filePath(path); ZipNode* node = m_zipTree.getNode(filePath.string()); assert(node != 0); if (node) { const ZipEntryData& entryData = node->getZipEntryData(); m_zipfile->setIndex(entryData.offset); uint8_t* data = new uint8_t[entryData.size_real]; // beware of me - one day i WILL cause memory leaks if (entryData.comp == 8) { // compressed using deflate FL_DBG(_log, LMsg("trying to uncompress file ") << path << " (compressed with method " << entryData.comp << ")"); boost::scoped_array compdata(new uint8_t[entryData.size_comp]); m_zipfile->readInto(compdata.get(), entryData.size_comp); z_stream zstream; zstream.next_in = compdata.get(); zstream.avail_in = entryData.size_comp; zstream.zalloc = Z_NULL; zstream.zfree = Z_NULL; zstream.opaque = Z_NULL; zstream.next_out = data; zstream.avail_out = entryData.size_real; if (inflateInit2(&zstream, -15) != Z_OK) { FL_ERR(_log, LMsg("inflateInit2 failed")); delete[] data; return 0; } int32_t err = inflate(&zstream, Z_FINISH); if (err != Z_STREAM_END) { if (zstream.msg) { FL_ERR(_log, LMsg("inflate failed: ") << zstream.msg); } else { FL_ERR(_log, LMsg("inflate failed without msg, err: ") << err); } inflateEnd(&zstream); delete[] data; return 0; } inflateEnd(&zstream); } else if (entryData.comp == 0) { // uncompressed m_zipfile->readInto(data, entryData.size_real); } else { FL_ERR(_log, LMsg("unsupported compression")); return 0; } return new RawData(new ZipFileSource(data, entryData.size_real)); } return 0; } void ZipSource::readIndex() { m_zipfile->setIndex(0); while (!readFileToIndex()) {} } bool ZipSource::readFileToIndex() { uint32_t header = m_zipfile->read32Little(); if (header == DE_HEADER || header == CF_HEADER) { // decryption header or central directory header - we are finished return true; } uint16_t vneeded = m_zipfile->read16Little(); uint16_t gflags = m_zipfile->read16Little(); uint16_t comp = m_zipfile->read16Little(); uint16_t lmodtime = m_zipfile->read16Little(); uint16_t lmoddate = m_zipfile->read16Little(); uint32_t crc = m_zipfile->read32Little(); uint32_t compsize = m_zipfile->read32Little(); uint32_t realsize = m_zipfile->read32Little(); uint16_t fnamelen = m_zipfile->read16Little(); uint16_t extralen = m_zipfile->read16Little(); if (header != LF_HEADER) { FL_ERR(_log, LMsg("invalid local file header: ") << header); return true; } if (vneeded > 20) { FL_ERR(_log, LMsg("only zip version 2 is supported, required: ") << vneeded); return true; } bfs::path filePath = bfs::path(m_zipfile->readString(fnamelen)); m_zipfile->moveIndex(extralen); uint32_t offset = m_zipfile->getCurrentIndex(); FL_DBG(_log, LMsg("found file: ") << filePath.string() << " (" << compsize << "/" << realsize << ") on offset " << offset); m_zipfile->moveIndex(compsize); if (gflags & (0x01 << 3)) { crc = m_zipfile->read32Little(); compsize = m_zipfile->read32Little(); realsize = m_zipfile->read32Little(); } if (lmodtime || lmoddate) {} // shut up the compiler (warnings of unused variables) ZipEntryData data; data.comp = comp; data.size_real = realsize; data.size_comp = compsize; data.offset = offset; data.crc32 = crc; std::string filename = filePath.string(); ZipNode* node = m_zipTree.addNode(filename); if (node) { // store the zip entry information in the node node->setZipEntryData(data); } return false; } std::set ZipSource::listFiles(const std::string& path) const { std::set result; bfs::path fixedPath(path); ZipNode* node = m_zipTree.getNode(fixedPath.string()); if (node) { ZipNodeContainer files = node->getChildren(ZipContentType::File); ZipNodeContainer::iterator iter; for (iter = files.begin(); iter != files.end(); ++iter) { result.insert((*iter)->getFullName()); } } return result; } // FIXME: quick&very dirty.. std::set ZipSource::listDirectories(const std::string& path) const { std::set result; bfs::path fixedPath(path); ZipNode* node = m_zipTree.getNode(fixedPath.string()); if (node) { ZipNodeContainer files = node->getChildren(ZipContentType::Directory); ZipNodeContainer::iterator iter; for (iter = files.begin(); iter != files.end(); ++iter) { result.insert((*iter)->getFullName()); } } return result; } } fifengine-0.4.1/engine/core/vfs/zip/zipsource.h000066400000000000000000000053661304641216200214500ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_ZIP_SOURCE_H #define FIFE_ZIP_SOURCE_H // Standard C++ library includes // #include // 3rd party library includes // // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/fife_stdint.h" #include "vfs/vfssource.h" #include "ziptree.h" namespace FIFE { /** Implements a Zip archive file source. * * @see FIFE::VFSSource */ class ZipSource : public VFSSource { public: ZipSource(VFS* vfs, const std::string& zip_file); ~ZipSource(); /// WARNING: fileExists, listFiles and listDirectories are not // thread-safe, and will probably break if called from multiple // threads at the same time. bool fileExists(const std::string& file) const; std::set listFiles(const std::string& path) const; std::set listDirectories(const std::string& path) const; virtual RawData* open(const std::string& path) const; private: void readIndex(); bool readFileToIndex(); private: ZipTree m_zipTree; RawData* m_zipfile; }; } //FIFE #endif fifengine-0.4.1/engine/core/vfs/zip/ziptree.cpp000066400000000000000000000111711304641216200214310ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "vfs/fife_boost_filesystem.h" #include "ziptree.h" #include "zipnode.h" namespace FIFE { ZipTree::ZipTree() : m_rootNode(new ZipNode("/")) { } ZipTree::~ZipTree() { delete m_rootNode; } ZipNode* ZipTree::addNode(const std::string& nodePath) { bfs::path filePath(nodePath); std::string filename = filePath.string(); // remove the trailing '/' if it exists because the // boost::filesystem::path objects will report extra // path parts otherwise if (filename[filename.length()-1] == '/') { filename = filename.erase(filename.length()-1); } filePath = bfs::path(filename); ZipNode* node = m_rootNode; ZipNode* tempNode = 0; ZipNode* returnNode = 0; for (bfs::path::iterator iter = filePath.begin(); iter != filePath.end(); ++iter) { std::string pathString = GetPathIteratorAsString(iter); tempNode = node->getChild(pathString); if (!tempNode) { // attempt to add the child since it was not found // and reset the node to the new child node node = node->addChild(pathString); } else { // node found so reset node node = tempNode; } if (node) { // node was found or added, set the return node properly returnNode = node; } else { // node was not found and could not be added return 0; } } return returnNode; } ZipNode* ZipTree::getNode(const std::string& name) const { bfs::path filePath(name); ZipNode* returnNode = 0; ZipNode* tempNode = 0; ZipNode* node = getRootNode(); for (bfs::path::iterator iter = filePath.begin(); iter != filePath.end(); ++iter) { std::string pathString = GetPathIteratorAsString(iter); if (pathString == ".." && (node != getRootNode())) { // handle ".." path case by setting the node back to the parent node = node->getParent(); } else { // look for the path name in the child nodes tempNode = node->getChild(pathString); if (tempNode) { node = tempNode; // node was found so we reset the return node // to the newly found node returnNode = node; } } } return returnNode; } ZipNode* ZipTree::getRootNode() const { return m_rootNode; } } std::ostream& operator<<(std::ostream& os, const FIFE::ZipTree& zipTree) { assert(zipTree.getRootNode() != 0); os << *(zipTree.getRootNode()); return os; }fifengine-0.4.1/engine/core/vfs/zip/ziptree.h000066400000000000000000000062321304641216200211000ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_VFS_ZIP_ZIPTREE_H #define FIFE_VFS_ZIP_ZIPTREE_H // Standard C++ library includes #include #include #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder namespace FIFE { class ZipNode; class ZipTree { public: /** constructor */ ZipTree(); /** destructor */ ~ZipTree(); /** adds a node to the proper place in the tree * based on the node path name * @param nodePath the node description * @return ZipNode of the most derived path added (value after the last path separator) or NULL if the path could not be added */ ZipNode* addNode(const std::string& nodePath); /** accessor for getting a node by name * @param name the name to search for * @ param ZipNode pointer, or NULL if not found */ ZipNode* getNode(const std::string& name) const; /** accessor for the root node of the tree * mostly used for debugging purposes * @return ZipNode pointer to the root node */ ZipNode* getRootNode() const; private: ZipNode* m_rootNode; }; } /** debug stream for a zip tree * useful for debugging * @param os output stream * @param zipTree the ZipTree to output * @return os output stream to allow for chaining */ std::ostream& operator<<(std::ostream& os, const FIFE::ZipTree& zipTree); #endif fifengine-0.4.1/engine/core/video/000077500000000000000000000000001304641216200167505ustar00rootroot00000000000000fifengine-0.4.1/engine/core/video/animation.cpp000066400000000000000000000130011304641216200214260ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/exception.h" #include "util/time/timemanager.h" #include "loaders/native/video/resourceanimationloader.h" #include "animation.h" #include "image.h" namespace FIFE { Animation::Animation(IResourceLoader* loader): IResource(createUniqueAnimationName(), loader), m_action_frame(-1), m_animation_endtime(-1), m_direction(0) { } Animation::Animation(const std::string& name, IResourceLoader* loader): IResource(name, loader), m_action_frame(-1), m_animation_endtime(-1), m_direction(0) { } Animation::~Animation() { // note: we don't need to free the images, as they are handled via // smart references. } size_t Animation::getSize() { return 0; } void Animation::load() { if (m_loader){ m_loader->load(this); } else { ResourceAnimationLoader loader; loader.load(this); } m_state = IResource::RES_LOADED; } void Animation::free() { std::vector::iterator it = m_frames.begin(); for (; it != m_frames.end(); ++it) { (*it).image->free(); } m_state = IResource::RES_NOT_LOADED; } void Animation::invalidate() { free(); m_framemap.clear(); m_frames.clear(); m_action_frame = -1; m_animation_endtime = -1; m_direction = 0; } std::string Animation::createUniqueAnimationName() { // automated counting for name generation, in case the user doesn't provide a name static uint32_t uniqueNumber = 0; static std::string baseName = "animation"; std::ostringstream oss; oss << uniqueNumber << "_" << baseName; const std::string name = oss.str(); ++uniqueNumber; return name; } void Animation::addFrame(ImagePtr image, uint32_t duration) { FrameInfo info; info.index = m_frames.size(); info.duration = duration; info.image = image; m_frames.push_back(info); std::map::const_iterator i(m_framemap.end()); if (i == m_framemap.begin()) { m_framemap[0] = info; m_animation_endtime = duration; } else { --i; uint32_t frametime = i->first + i->second.duration; m_framemap[frametime] = info; m_animation_endtime = frametime + duration; } } int32_t Animation::getFrameIndex(uint32_t timestamp) { int32_t val = -1; if ((static_cast(timestamp) <= m_animation_endtime) && (m_animation_endtime > 0)) { std::map::const_iterator i(m_framemap.upper_bound(timestamp)); --i; val = i->second.index; } return val; } bool Animation::isValidIndex(int32_t index) const{ int32_t size = m_frames.size(); return size > 0 && index >= 0 && index < size; } ImagePtr Animation::getFrame(int32_t index) { ImagePtr image; if (isValidIndex(index)) { image = m_frames[index].image; if (image->getState() == IResource::RES_NOT_LOADED) { image->load(); } } return image; } ImagePtr Animation::getFrameByTimestamp(uint32_t timestamp) { ImagePtr val; if ((static_cast(timestamp) <= m_animation_endtime) && (m_animation_endtime > 0)) { std::map::const_iterator i(m_framemap.upper_bound(timestamp)); --i; val = i->second.image; } if(val && val->getState() == IResource::RES_NOT_LOADED) { val->load(); } return val; } std::vector Animation::getFrames() { std::vector frames; for (std::vector::iterator it = m_frames.begin(); it != m_frames.end(); ++it) { frames.push_back((*it).image); } return frames; } int32_t Animation::getFrameDuration(int32_t index) const{ if (isValidIndex(index)) { return m_frames[index].duration; } return -1; } uint32_t Animation::getFrameCount() const { return m_frames.size(); } void Animation::setDirection(uint32_t direction) { m_direction = direction % 360; } } /* vim: set noexpandtab: set shiftwidth=2: set tabstop=2: */ fifengine-0.4.1/engine/core/video/animation.h000066400000000000000000000136721304641216200211110ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_VIDEO_ANIMATION_H #define FIFE_VIDEO_ANIMATION_H // Standard C++ library includes #include #include #include // Platform specific includes #include "util/base/fife_stdint.h" #include "util/resource/resource.h" #include "image.h" // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder namespace FIFE { /** Animation. * * A container of Images describing an animation. Animation itself does * not take care of animating the images. Instead it contains images * having associated timestamps. It is the responsibility of the * animation user to query frames based on current timestamp and show * returned images on screen. */ class Animation : public IResource { public: /** Constructor. */ Animation(IResourceLoader* loader = 0); Animation(const std::string& name, IResourceLoader* loader = 0); /** Destructor. Decreases the reference count of all referred images. */ ~Animation(); virtual size_t getSize(); virtual void load(); virtual void free(); void invalidate(); /** Adds new frame into animation * Frames must be added starting from first frame. Increases the reference * count of the given image. * @param image Pointer to Image. Does not transfer the ownership * @param duration Duration for given frame in the animation */ void addFrame(ImagePtr image, uint32_t duration); /** Get the frame index that matches given timestamp. In case there is no exact match, * correct frame is calculated. E.g. if there are frames for timestamps 50 and 100 * and frame for 75 is asked, frame associated with value 50 is given back. * In case the timestamp is past the sequence, negative value is returned * @see addFrame */ int32_t getFrameIndex(uint32_t timestamp); /** Gets the frame iamge that matches the given index. If no matches found, returns an invalid ImagePtr */ ImagePtr getFrame(int32_t index); /** Gets the frame image that matches the given timestamp. */ ImagePtr getFrameByTimestamp(uint32_t timestamp); /** Gets all frame images. */ std::vector getFrames(); /** Gets the frame duration for given (indexed) frame. Returns negative value in case * of incorrect index */ int32_t getFrameDuration(int32_t index) const; /** Get the number of frames */ uint32_t getFrameCount() const; /** Sets the action frame. Action frame is the frame when the related * action actually happens. E.g. in case of punch animation, action frame is * the frame when punch hits the target. In case there is no associated * action frame, value is negative * @param num index of the action frame. */ void setActionFrame(int32_t num) { m_action_frame = num; } /** Gets the action frame. * @see setActionFrame */ int32_t getActionFrame() const { return m_action_frame; } /** Animation direction tells how this animation is associated * with movement when played starting from frame 0 * E.g. in walking animation there should be direction assigned so * that engine can choose the correct animation when characters are * moved around the map area * @param direction direction to set */ void setDirection(uint32_t direction); /** Gets the animation direction * @see setDirection * @return direction for this animation */ uint32_t getDirection() const { return m_direction; } /** Gets the total duration for the whole animation */ uint32_t getDuration() const { return m_animation_endtime; } private: /** Contains information about one animation frame (duration + frame index + frame pointer) */ struct FrameInfo { uint32_t index; uint32_t duration; ImagePtr image; }; std::string createUniqueAnimationName(); /** Checks for animation frame index overflows */ bool isValidIndex(int32_t index) const; // Map of timestamp + associated frame std::map m_framemap; // vector of frames for fast indexed access std::vector m_frames; // Action frame of the Animation. int32_t m_action_frame; // time when animation ends (zero based) int32_t m_animation_endtime; // Direction for this animation uint32_t m_direction; }; typedef SharedPtr AnimationPtr; } #endif /* vim: set noexpandtab: set shiftwidth=2: set tabstop=2: */ fifengine-0.4.1/engine/core/video/animationmanager.cpp000066400000000000000000000330521304641216200227710ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2013 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/log/logger.h" #include "util/resource/resourcemanager.h" #include "util/resource/resource.h" #include "video/renderbackend.h" #include "animationmanager.h" namespace FIFE { /** Logger to use for this source file. * @relates Logger */ static Logger _log(LM_RESMGR); AnimationManager::~AnimationManager() { } size_t AnimationManager::getMemoryUsed() const { size_t totalSize = 0; AnimationHandleMapConstIterator it = m_animHandleMap.begin(), itend = m_animHandleMap.end(); for ( ; it != itend; ++it) { totalSize += it->second->getSize(); } return totalSize; } size_t AnimationManager::getTotalResourcesCreated() const { AnimationHandleMapConstIterator it = m_animHandleMap.begin(), itend = m_animHandleMap.end(); size_t count = 0; for ( ; it != itend; ++it) { if ( it->second->getState() == IResource::RES_NOT_LOADED ) { count++; } } return count; } size_t AnimationManager::getTotalResourcesLoaded() const { AnimationHandleMapConstIterator it = m_animHandleMap.begin(), itend = m_animHandleMap.end(); size_t count = 0; for ( ; it != itend; ++it) { if ( it->second->getState() == IResource::RES_LOADED ) { count++; } } return count; } size_t AnimationManager::getTotalResources() const { return m_animHandleMap.size(); } AnimationPtr AnimationManager::create(IResourceLoader* loader){ Animation* ptr = new Animation(loader); return add(ptr); } AnimationPtr AnimationManager::create(const std::string& name, IResourceLoader* loader){ if (exists(name)) { FL_WARN(_log, LMsg("AnimationManager::create(std::string, IResourceLoader* loader) - ") << "Resource name " << name << " was previously created. Returning original Animation..."); return getPtr(name); } Animation* ptr = new Animation(name, loader); return add(ptr); } AnimationPtr AnimationManager::load(const std::string& name, IResourceLoader* loader) { AnimationNameMapIterator nit = m_animNameMap.find(name); if (nit != m_animNameMap.end()) { if ( nit->second->getState() == IResource::RES_NOT_LOADED ) { nit->second->load(); } return nit->second; } //was not found so create and load resource AnimationPtr ptr = create(name, loader); ptr->load(); if (ptr->getState() == IResource::RES_NOT_LOADED){ FL_WARN(_log, LMsg("AnimationManager::load(std::string) - ") << "Resource name " << name << " was not found and could not be loaded."); remove(name); } return ptr; } AnimationPtr AnimationManager::add(Animation* res) { assert(res); assert(!(exists(res->getHandle()) || exists(res->getName()))); AnimationPtr resptr(res); std::pair returnValue; returnValue = m_animHandleMap.insert ( AnimationHandleMapPair(res->getHandle(), resptr)); if (returnValue.second) { m_animNameMap.insert ( AnimationNameMapPair(returnValue.first->second->getName(), returnValue.first->second) ); } else { FL_WARN(_log, LMsg("AnimationManager::add(IResource*) - ") << "Resource " << res->getName() << " already exists.... ignoring."); } return returnValue.first->second; } bool AnimationManager::exists(const std::string& name) { AnimationNameMapIterator it = m_animNameMap.find(name); if (it != m_animNameMap.end()) { return true; } return false; } bool AnimationManager::exists(ResourceHandle handle) { AnimationHandleMapConstIterator it = m_animHandleMap.find(handle); if (it != m_animHandleMap.end()) { return true; } return false; } void AnimationManager::reload(const std::string& name) { AnimationNameMapIterator nit = m_animNameMap.find(name); if (nit != m_animNameMap.end()) { if ( nit->second->getState() == IResource::RES_LOADED) { nit->second->free(); } nit->second->load(); return; } FL_WARN(_log, LMsg("AnimationManager::reload(std::string) - ") << "Resource name " << name << " not found."); } void AnimationManager::reload(ResourceHandle handle) { AnimationHandleMapIterator it = m_animHandleMap.find(handle); if ( it != m_animHandleMap.end()) { if ( it->second->getState() == IResource::RES_LOADED) { it->second->free(); } it->second->load(); return; } FL_WARN(_log, LMsg("AnimationManager::reload(ResourceHandle) - ") << "Resource handle " << handle << " not found."); } void AnimationManager::reloadAll() { AnimationHandleMapIterator it = m_animHandleMap.begin(), itend = m_animHandleMap.end(); for ( ; it != itend; ++it) { if ( it->second->getState() == IResource::RES_LOADED) { it->second->free(); } it->second->load(); } } void AnimationManager::loadUnreferenced() { AnimationHandleMapIterator it = m_animHandleMap.begin(), itend = m_animHandleMap.end(); int32_t count = 0; for ( ; it != itend; ++it) { if (it->second.useCount() == 2 && it->second->getState() != IResource::RES_LOADED){ it->second->load(); count++; } } FL_DBG(_log, LMsg("AnimationManager::loadUnreferenced() - ") << "Loaded " << count << " unreferenced resources."); } void AnimationManager::free(const std::string& name) { AnimationNameMapIterator nit = m_animNameMap.find(name); if (nit != m_animNameMap.end()) { if ( nit->second->getState() == IResource::RES_LOADED) { nit->second->free(); } return; } FL_WARN(_log, LMsg("AnimationManager::free(std::string) - ") << "Resource name " << name << " not found."); } void AnimationManager::free(ResourceHandle handle) { AnimationHandleMapConstIterator it = m_animHandleMap.find(handle); if (it != m_animHandleMap.end()) { if ( it->second->getState() == IResource::RES_LOADED) { it->second->free(); } return; } FL_WARN(_log, LMsg("AnimationManager::free(ResourceHandle) - ") << "Resource handle " << handle << " not found."); } void AnimationManager::freeAll() { AnimationHandleMapIterator it = m_animHandleMap.begin(), itend = m_animHandleMap.end(); int32_t count = 0; for ( ; it != itend; ++it) { if ( it->second->getState() == IResource::RES_LOADED) { it->second->free(); count++; } } FL_DBG(_log, LMsg("AnimationManager::freeAll() - ") << "Freed all " << count << " resources."); } void AnimationManager::freeUnreferenced() { AnimationHandleMapIterator it = m_animHandleMap.begin(), itend = m_animHandleMap.end(); int32_t count = 0; for ( ; it != itend; ++it) { if (it->second.useCount() == 2 && it->second->getState() == IResource::RES_LOADED ){ it->second->free(); count++; } } FL_DBG(_log, LMsg("AnimationManager::freeUnreferenced() - ") << "Freed " << count << " unreferenced resources."); } void AnimationManager::remove(AnimationPtr& resource) { AnimationHandleMapIterator it = m_animHandleMap.find(resource->getHandle()); AnimationNameMapIterator nit = m_animNameMap.find(resource->getName()); if (it != m_animHandleMap.end()) { m_animHandleMap.erase(it); if (nit != m_animNameMap.end()) { m_animNameMap.erase(nit); return; } assert(false); //should never get here } FL_WARN(_log, LMsg("AnimationManager::remove(ResourcePtr&) - ") << "Resource " << resource->getName() << " was not found."); } void AnimationManager::remove(const std::string& name) { std::size_t handle; AnimationNameMapIterator nit = m_animNameMap.find(name); if (nit != m_animNameMap.end()) { handle = nit->second->getHandle(); m_animNameMap.erase(nit); } else { FL_WARN(_log, LMsg("AnimationManager::remove(std::string) - ") << "Resource " << name << " was not found."); return; } AnimationHandleMapIterator it = m_animHandleMap.find(handle); if ( it != m_animHandleMap.end()) { m_animHandleMap.erase(it); return; } assert(false); //should never get here } void AnimationManager::remove(ResourceHandle handle) { std::string name; AnimationHandleMapIterator it = m_animHandleMap.find(handle); if (it != m_animHandleMap.end()) { name = it->second->getName(); m_animHandleMap.erase(it); } else { FL_WARN(_log, LMsg("AnimationManager::remove(ResourceHandle) - ") << "Resource handle " << handle << " was not found."); return; } AnimationNameMapIterator nit = m_animNameMap.find(name); if ( nit != m_animNameMap.end() ) { m_animNameMap.erase(nit); return; } assert(false); //should never get here } void AnimationManager::removeAll() { //should always be equal assert (m_animHandleMap.size() == m_animNameMap.size()); size_t count = m_animHandleMap.size(); m_animHandleMap.clear(); m_animNameMap.clear(); FL_DBG(_log, LMsg("AnimationManager::removeAll() - ") << "Removed all " << count << " resources."); } void AnimationManager::removeUnreferenced() { AnimationHandleMapIterator it = m_animHandleMap.begin(), itend = m_animHandleMap.end(); std::vector imgHandles; int32_t count = 0; for ( ; it != itend; ++it) { if ( it->second.useCount() == 2) { imgHandles.push_back(it->second->getHandle()); count++; } } for (std::vector::iterator it = imgHandles.begin(); it != imgHandles.end(); ++it) { remove(*it); } FL_DBG(_log, LMsg("AnimationManager::removeUnreferenced() - ") << "Removed " << count << " unreferenced resources."); } AnimationPtr AnimationManager::get(const std::string& name) { AnimationNameMapIterator nit = m_animNameMap.find(name); if (nit != m_animNameMap.end()) { if (nit->second->getState() != IResource::RES_LOADED){ //resource is not loaded so load it nit->second->load(); } return nit->second; } //not found so attempt to create and load the resource AnimationPtr ptr = load(name); return ptr; } AnimationPtr AnimationManager::get(ResourceHandle handle) { AnimationHandleMapConstIterator it = m_animHandleMap.find(handle); if (it != m_animHandleMap.end()) { if (it->second->getState() != IResource::RES_LOADED){ //resource is not loaded so load it it->second->load(); } return it->second; } FL_WARN(_log, LMsg("AnimationManager::get(ResourceHandle) - ") << "Resource handle " << handle << " is undefined."); return AnimationPtr(); } AnimationPtr AnimationManager::getPtr(const std::string& name) { AnimationNameMapIterator nit = m_animNameMap.find(name); if (nit != m_animNameMap.end()) { return nit->second; } FL_WARN(_log, LMsg("AnimationManager::getPtr(std::string) - ") << "Resource " << name << " is undefined."); return AnimationPtr(); } AnimationPtr AnimationManager::getPtr(ResourceHandle handle) { AnimationHandleMapConstIterator it = m_animHandleMap.find(handle); if (it != m_animHandleMap.end()) { return it->second; } FL_WARN(_log, LMsg("AnimationManager::getPtr(ResourceHandle) - ") << "Resource handle " << handle << " is undefined."); return AnimationPtr(); } ResourceHandle AnimationManager::getResourceHandle(const std::string& name) { AnimationNameMapIterator nit = m_animNameMap.find(name); if (nit != m_animNameMap.end()) { return nit->second->getHandle(); } FL_WARN(_log, LMsg("AnimationManager::getResourceHandle(std::string) - ") << "Resource " << name << " is undefined."); return 0; } void AnimationManager::invalidate(const std::string& name) { AnimationNameMapIterator it = m_animNameMap.find(name); if (it != m_animNameMap.end()) { if (it->second->getState() == IResource::RES_LOADED){ it->second.get()->invalidate(); } } } void AnimationManager::invalidate(ResourceHandle handle) { AnimationHandleMapIterator it = m_animHandleMap.find(handle); if (it != m_animHandleMap.end()) { if (it->second->getState() == IResource::RES_LOADED) { it->second.get()->invalidate(); } } } void AnimationManager::invalidateAll() { AnimationHandleMapIterator it = m_animHandleMap.begin(), itend = m_animHandleMap.end(); for ( ; it != itend; ++it) { if (it->second->getState() == IResource::RES_LOADED) { it->second.get()->invalidate(); } } } } //FIFE fifengine-0.4.1/engine/core/video/animationmanager.h000066400000000000000000000275351304641216200224470ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2013 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_ANIMATION_MANAGER_H #define FIFE_ANIMATION_MANAGER_H // Standard C++ library includes #include #include #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/singleton.h" #include "util/resource/resource.h" #include "util/resource/resourcemanager.h" #include "animation.h" namespace FIFE { /** AnimationManager * * An interface for managing animations. * * @see IResource * @see IResourceLoader * @see IResourceManager * */ class AnimationManager : public IResourceManager, public DynamicSingleton { public: /** Default constructor. */ AnimationManager() : IResourceManager() { } /** Destructor. */ virtual ~AnimationManager(); virtual size_t getMemoryUsed() const; virtual size_t getTotalResourcesCreated() const; virtual size_t getTotalResourcesLoaded() const; virtual size_t getTotalResources() const; /** Creates a blank Animation but does not load it immediately * * @param loader A pointer to the custom resource loader. The * default is NULL. If this parameter is present the resource * will use the loader to load instead of the default built in * functions. * @return An AnimationPtr to the newly created Animation * * @see Animation * @see AnimationLoader * @see IResourceLoader * */ virtual AnimationPtr create(IResourceLoader* loader = 0); /** Creates a blank Animation but does not load it immediately * * @param name The resource name. Typically a filename. * @param loader A pointer to the custom resource loader. The * default is NULL. If this parameter is present the resource * will use the loader to load instead of the default built in * functions. * @return An AnimationPtr to the newly created Animation * * @see Animation * @see AnimationLoader * @see IResourceLoader * */ virtual AnimationPtr create(const std::string& name, IResourceLoader* loader = 0); /** Creates a blank resource and loads it from disk * * This function will create the Animation if necessary and load * the Animation from disk. If the Animation is not defined it * will call AnimationManager::create() before loading. * * @param name The resource name. Typically a filename. * @param loader A pointer to the custom resource loader. The * default is NULL. If this parameter is present the resource * will use the loader to load instead of the default built in * functions. * @return A AnimationPtr to the loaded Animation * * @see Animation * @see AnimationLoader * @see IResourceLoader * */ virtual AnimationPtr load(const std::string& name, IResourceLoader* loader = 0); /** Add an Animation to the manager * * This function will create a AnimationPtr and add the Animation * to the manager. The manager assumes ownership of the Animation * so DO NOT delete it. * * @param res A pointer to the Animation * @return A AnimationPtr to the added resource * * @see Animation * */ virtual AnimationPtr add(Animation* res); /** Checks to see if an Animation exists * * This function will search the manager for Animations * that match the parameter * * @param name The name of the Animation * @return True if the Animation exists. False otherwise. * */ virtual bool exists(const std::string& name); /** Checks to see if an Animation exists * * This function will search the manager for Animations * that match the parameter * * @param handle The handle of the Animation * @return True if the Animation exists. False otherwise. * */ virtual bool exists(ResourceHandle handle); /** Reloads an Animation * * This function will reload an Animation if it is managed * by the manager. If not it creates an entry in the log * specifying that the Animation could not be found. It will * load the Animation if it is not already loaded. * * @param name The name of the resource * */ virtual void reload(const std::string& name); /** Reloads a resource * * This function will reload an Animation if it is managed * by the manager. If not it creates an entry in the log * specifying that the Animation could not be found. It will * load the Animation if it is not already loaded. * * @param handle The handle of the resource * */ virtual void reload(ResourceHandle handle); /** Reloads all Animations * * This function will reload all Animations managed by the * manager. It will load an Animation if it is not already loaded. * * @todo It might be beneficial to supply a parameter to * only reload resources that are already loaded * */ virtual void reloadAll(); /** Loads all unreferenced Animations * * All Animations that have no external references will be * loaded into memory. * */ virtual void loadUnreferenced(); /** Frees an Animation from memory * * The Animation is not deleted but it's data is freed. * This calls the Animation::free() function and it is * up to the resource to properly free it's memory. The * manager keeps a reference to the Animation in case * its required in the future. * * @param name The name of the Animation * * @see Animation * */ virtual void free(const std::string& name); /** Frees an Animation from memory * * The Animation is not deleted but it's data is freed. * This calls the Animation::free() function and it is * up to the resource to properly free it's memory. The * manager keeps a reference to the Animation in case * its required in the future. * * @param handle The handle of the Animation * * @see Animation * */ virtual void free(ResourceHandle handle); /** Frees all Animations * * This calls the Animation::free() function for every * Animation the manager is managing. It does not remove * them from the manager. * * @see Animation * */ virtual void freeAll(); /** Frees all unreferenced Animation * * This calls the IResource::free() function for Animations * that have no external references to them. It does not * remove them from the manager. * * @see IResource * */ virtual void freeUnreferenced(); /** Removes an Animation from the manager * * This removes all references to the Animation from the * manager. It does not however guarantee that the resources * destructor is called. If the client has any left over * references to the resource it will not be freed. * * @param resource A AnimationPtr to the Animation to be removed * from the manager * * @note This is useful if you want to remove ownership of a resource * from the manager * * @see Animation * */ virtual void remove(AnimationPtr& resource); /** Removes an Animation from the manager * * This removes all references to the Animation from the * manager. It does not however guarantee that the resources * destructor is called. If the client has any left over * references to the resource it will not be freed. * * @param name The name of the Animation * * @see Animation * */ virtual void remove(const std::string& name); /** Removes an Animation from the manager * * This removes all references to the Animation from the * manager. It does not however guarantee that the resources * destructor is called. If the client has any left over * references to the resource it will not be freed. * * @param handle The handle of the Animation * * @see Animation * */ virtual void remove(ResourceHandle handle); /** Removes all Animations from the manager * * This effectively removes all references to all Animations from * the manager. If there are left over shared pointers to * any resources they will not be deleted. * * @see Animation * */ virtual void removeAll(); /** Removes all unreferenced Animations * * This effectively removes all Animations that dont have an * external reference. The resources will be deleted. * * @see Animation * */ virtual void removeUnreferenced(); /** Gets a shared pointer to the Animation * * If the Animation is not defined it will attempt to create * and load the Animation based on the name (it assumes the name * is a filename) * * @param name The name of the Animation * @return An AnimationPtr to the Animation * */ virtual AnimationPtr get(const std::string& name); /** Gets a shared pointer to the Animation * * If the resource is not defined it returns an empty * (or invalid) AnimationPtr and makes an entry in the log. * * @param handle The handle of the resource * @return A AnimationPtr to the resource * * @todo This should throw an exception instead of an * empty AnimationPtr * */ virtual AnimationPtr get(ResourceHandle handle); virtual AnimationPtr getPtr(const std::string& name); virtual AnimationPtr getPtr(ResourceHandle handle); /** Gets an Animation handle by name * * Returns the Animation handle associated with the name * * @param name The name of the Animation * @return 0 if the resource name is invalid * */ virtual ResourceHandle getResourceHandle(const std::string& name); virtual void invalidate(const std::string& name); virtual void invalidate(ResourceHandle handle); virtual void invalidateAll(); private: typedef std::map< ResourceHandle, AnimationPtr > AnimationHandleMap; typedef std::map< ResourceHandle, AnimationPtr >::iterator AnimationHandleMapIterator; typedef std::map< ResourceHandle, AnimationPtr >::const_iterator AnimationHandleMapConstIterator; typedef std::pair< ResourceHandle, AnimationPtr > AnimationHandleMapPair; typedef std::map< std::string, AnimationPtr > AnimationNameMap; typedef std::map< std::string, AnimationPtr >::iterator AnimationNameMapIterator; typedef std::map< std::string, AnimationPtr >::const_iterator AnimationNameMapConstIterator; typedef std::pair< std::string, AnimationPtr > AnimationNameMapPair; AnimationHandleMap m_animHandleMap; AnimationNameMap m_animNameMap; }; } //FIFE #endif //FIFE_ANIMATION_MANAGER_H fifengine-0.4.1/engine/core/video/atlasbook.cpp000066400000000000000000000154301304641216200214360ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/exception.h" #include "atlasbook.h" namespace FIFE { AtlasBlock AtlasBlock::intersects(AtlasBlock const& rect) const { AtlasBlock ret; ret.left = std::max(rect.left, left); ret.right = std::min(rect.right, right); ret.top = std::max(rect.top, top); ret.bottom = std::min(rect.bottom, bottom); if(ret.left > ret.right || ret.top > ret.bottom) { ret.setTrivial(); } return ret; } void AtlasBlock::merge(AtlasBlock const& rect) { left = std::min(rect.left, left); right = std::max(rect.right, right); top = std::min(rect.top, top); bottom = std::max(rect.bottom, bottom); } AtlasBlock* AtlasPage::getBlock(uint32_t width, uint32_t height) { if(static_cast(width*height*pixelSize) > freePixels) { return 0; } blocks.push_back(AtlasBlock(Rect(), 0)); AtlasBlock* newBlock = &blocks[blocks.size() - 1]; for(uint32_t v = 0; (v+1)*height <= this->height; ++v) { newBlock->top = v * height; newBlock->bottom = (v+1) * height; for(uint32_t u = 0; (u+1)*width <= this->width; ++u) { newBlock->left = u * width; newBlock->right = (u+1) * width; AtlasBlock const* intersection = intersects(newBlock); if(!intersection) { freePixels -= width*height*pixelSize; assert(freePixels >= 0); // try to squeeze a little bit (horizontal) if(newBlock->left > 0) { AtlasBlock squeezed(*newBlock); --squeezed.left; --squeezed.right; if(!(intersection = intersects(&squeezed))) { ++squeezed.left; ++squeezed.right; int blockWidth = newBlock->getWidth(); // binary search for(int i = 0, div = 2; i < 4; ++i) { squeezed.left -= blockWidth / div; squeezed.right -= blockWidth / div; if((intersection = intersects(&squeezed))) { squeezed.left += blockWidth / div; squeezed.right += blockWidth / div; } div <<= 1; } // linear search while(!(intersection = intersects(&squeezed)) && squeezed.left > 0) { --squeezed.left; --squeezed.right; } newBlock->left = squeezed.left + 1; newBlock->right = squeezed.right + 1; } } // try to squeeze a little bit (vertical) if(newBlock->top > 0) { AtlasBlock squeezed(*newBlock); --squeezed.top; --squeezed.bottom; if(!(intersection = intersects(&squeezed))) { ++squeezed.top; ++squeezed.bottom; int blockHeight = newBlock->getHeight(); // binary search for(int i = 0, div = 2; i < 4; ++i) { squeezed.top -= blockHeight / div; squeezed.bottom -= blockHeight / div; if((intersection = intersects(&squeezed))) { squeezed.top += blockHeight / div; squeezed.bottom += blockHeight / div; } div <<= 1; } // linear search while(!(intersection = intersects(&squeezed)) && squeezed.top > 0) { --squeezed.top; --squeezed.bottom; } newBlock->top = squeezed.top + 1; newBlock->bottom = squeezed.bottom + 1; } } newBlock->page = this->page; return newBlock; } } } // couldn't find suitable place for a new block blocks.pop_back(); return 0; } void AtlasPage::shrink(bool pot) { AtlasBlock boundaryBox(Rect(), 0); for(Blocks::iterator block = blocks.begin(); block != blocks.end(); ++block) { boundaryBox.merge(*block); } assert(boundaryBox.left == 0); assert(boundaryBox.top == 0); if(pot) { uint32_t bwidth = boundaryBox.getWidth(); uint32_t bheight = boundaryBox.getHeight(); if(bwidth < width) { // look for next power of 2 for width uint32_t powof2 = 1; while(powof2 < bwidth) powof2 <<= 1; width = std::min(powof2, width); } if(bheight < height) { // look for next power of 2 for width uint32_t powof2 = 1; while(powof2 < bheight) powof2 <<= 1; height = std::min(powof2, height); } } else { width = boundaryBox.getWidth(); height = boundaryBox.getHeight(); } } AtlasBlock const* AtlasPage::intersects(AtlasBlock const* block) const { for(size_t b = 0; b < blocks.size() - 1; ++b) { if(!blocks[b].intersects(*block).isTrivial()) return block; } // no intersection return 0; } AtlasBlock* AtlasBook::getBlock(uint32_t width, uint32_t height) { for(Pages::iterator page = pages.begin(); page != pages.end(); ++page) { AtlasBlock* block = page->getBlock(width, height); if(block) { return block; } } return extendCache(width, height)->getBlock(width, height); } AtlasPage* AtlasBook::extendCache(uint32_t minPageWidth, uint32_t minPageHeight) { if(minPageWidth > pageWidth || minPageHeight > pageHeight) { throw Exception("Texture is too big for this atlas."); } assert(minPageWidth <= pageWidth); assert(minPageHeight <= pageHeight); pages.push_back(AtlasPage(pageWidth, pageHeight, pixelSize, pages.size())); return &pages[pages.size()-1]; } void AtlasBook::shrink(bool pot) { for(Pages::iterator page = pages.begin(); page != pages.end(); ++page) { page->shrink(pot); } } }fifengine-0.4.1/engine/core/video/atlasbook.h000066400000000000000000000103071304641216200211010ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_VIDEO_ATLASBOOK_H #define FIFE_VIDEO_ATLASBOOK_H // Standard C++ library includes #include #include #include #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/structures/rect.h" namespace FIFE { class AtlasBlock { public: uint32_t page; uint32_t left, right, top, bottom; AtlasBlock(const Rect& rect, uint32_t page) : page(page), left(rect.x), right(rect.right()), top(rect.y), bottom(rect.bottom()){ } AtlasBlock() { } // (0,0) [left] [right] // +-------------------- // | // [top] | +---------+ // | | | // | | | // | | | // | | | // [bottom] | +---------+ // | // bottom > top // right > left void setTrivial() { left = right = top = bottom = 0; } bool isTrivial() const { return getWidth() == 0 || getHeight() == 0; } uint32_t getWidth() const { return right - left; } uint32_t getHeight() const { return bottom - top; } AtlasBlock intersects(AtlasBlock const& rect) const; void merge(AtlasBlock const& rect); }; class AtlasPage { public: AtlasPage(uint32_t width, uint32_t height, uint32_t pixelSize, uint32_t page) : width(width), height(height), pixelSize(pixelSize), page(page), freePixels(width*height*pixelSize){ } AtlasBlock* getBlock(uint32_t width, uint32_t height); void shrink(bool pot); uint32_t getWidth() const { return width; } uint32_t getHeight() const { return height; } private: AtlasBlock const* intersects(AtlasBlock const* block) const; uint32_t width, height; uint32_t pixelSize; uint32_t page; int32_t freePixels; typedef std::vector Blocks; Blocks blocks; }; class AtlasBook { public: AtlasBook(uint32_t pageWidth, uint32_t pageHeight, uint32_t pixelSize = 4) : pageWidth(pageWidth), pageHeight(pageHeight), pixelSize(pixelSize) { } AtlasBlock* getBlock(uint32_t width, uint32_t height); // try to shrink every atlas page void shrink(bool pot); AtlasPage& getPage(size_t index) { return pages[index]; } private: // add new atlas to atlas container AtlasPage* extendCache(uint32_t minPageWidth, uint32_t minPageHeight); // How big the new atlases should be uint32_t pageWidth, pageHeight; uint32_t pixelSize; typedef std::vector Pages; Pages pages; }; } #endif /* vim: set noexpandtab: set shiftwidth=2: set tabstop=2: */ fifengine-0.4.1/engine/core/video/color.cpp000066400000000000000000000050221304641216200205710ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // Platform specific includes #include "util/base/fife_stdint.h" // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "color.h" namespace FIFE { Color::Color(uint8_t r, uint8_t g, uint8_t b, uint8_t alpha) : m_r(r), m_g(g), m_b(b), m_a(alpha) { } Color::~Color() { } void Color::set(uint8_t r, uint8_t g, uint8_t b, uint8_t alpha) { m_r = r; m_g = g; m_b = b; m_a = alpha; } void Color::setR(uint8_t r) { m_r = r; } void Color::setG(uint8_t g) { m_g = g; } void Color::setB(uint8_t b) { m_b = b; } void Color::setAlpha(uint8_t alpha) { m_a = alpha; } uint8_t Color::getR() const { return m_r; } uint8_t Color::getG() const { return m_g; } uint8_t Color::getB() const { return m_b; } uint8_t Color::getAlpha() const { return m_a; } }fifengine-0.4.1/engine/core/video/color.h000066400000000000000000000075431304641216200202500ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_VIDEO_COLOR_H #define FIFE_VIDEO_COLOR_H // Standard C++ library includes #include #include // Platform specific includes #include "util/base/fife_stdint.h" // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder namespace FIFE { class Color { public: /** Constructor. * * @param r Red channel value. * @param g Green channel value. * @param b Blue channel value. * @param alpha Alpha channel value. */ Color(uint8_t r = 0, uint8_t g = 0, uint8_t b = 0, uint8_t alpha = 255); /** Destructor */ ~Color(); /** Compares equality of two colors */ inline bool operator==(const Color& color) const { return (m_r == color.m_r && m_g == color.m_g && m_b == color.m_b && m_a == color.m_a); } /** Compares unequality of two colors */ inline bool operator!=(const Color& color) const { return !(*this == color); } /** Overload less operator */ inline bool operator<(const Color& rhs) const { if (m_r != rhs.m_r) { return m_r < rhs.m_r; } else if (m_g != rhs.m_g) { return m_g < rhs.m_g; } else if (m_b != rhs.m_b) { return m_b < rhs.m_b; } return m_a < rhs.m_a; } /** Set all color channel values. * * @param r Red channel value. * @param g Green channel value. * @param b Blue channel value. * @param alpha Alpha channel value. */ void set(uint8_t r, uint8_t g, uint8_t b, uint8_t alpha); /** Set red channel value. * * @param r New value. */ void setR(uint8_t r); /** Set green channel value. * * @param g New value. */ void setG(uint8_t g); /** Set blue channel value. * * @param b New value. */ void setB(uint8_t b); /** Set alpha channel value. * * @param alpha New value. */ void setAlpha(uint8_t alpha); /** @return Red channel value. */ uint8_t getR() const; /** @return Green channel value. */ uint8_t getG() const; /** @return Blue channel value. */ uint8_t getB() const; /** @return Alpha channel value. */ uint8_t getAlpha() const; private: uint8_t m_r; uint8_t m_g; uint8_t m_b; uint8_t m_a; }; } #endif //FIFE_VIDEO_COLOR_Hfifengine-0.4.1/engine/core/video/cursor.cpp000066400000000000000000000170271304641216200210000ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #if defined( WIN32 ) #include #include #endif #if defined( __unix__ ) #include #endif // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/structures/rect.h" #include "util/time/timemanager.h" #include "util/log/logger.h" #include "video/imagemanager.h" #include "animation.h" #include "image.h" #include "renderbackend.h" #include "cursor.h" #if defined( WIN32 ) // From SDL_sysmouse.c struct WMcursor { HCURSOR curs; #ifndef _WIN32_WCE Uint8 *ands; Uint8 *xors; #endif }; #endif #if defined( __unix__ ) // Stops the compiler from confusing it with FIFE:Cursor typedef Cursor XCursor; // From SDL_x11mouse.c struct WMcursor { Cursor x_cursor; }; #endif namespace FIFE { /** Logger to use for this source file. * @relates Logger */ static Logger _log(LM_GUI); //@todo We should have a log module for cursor Cursor::Cursor(RenderBackend* renderbackend): m_cursor_id(NC_ARROW), m_cursor_type(CURSOR_NATIVE), m_drag_type(CURSOR_NONE), m_native_cursor(NULL), m_renderbackend(renderbackend), m_animtime(0), m_drag_animtime(0), m_drag_offset_x(0), m_drag_offset_y(0), m_mx(0), m_my(0), m_timemanager(TimeManager::instance()), m_invalidated(false) { assert(m_timemanager); set(m_cursor_id); } void Cursor::set(uint32_t cursor_id) { m_cursor_type = CURSOR_NATIVE; if (!SDL_ShowCursor(1)) { SDL_PumpEvents(); } setNativeCursor(cursor_id); m_cursor_image.reset(); m_cursor_animation.reset(); } void Cursor::set(ImagePtr image) { assert(image != 0); m_cursor_image = image; m_cursor_type = CURSOR_IMAGE; if (SDL_ShowCursor(0)) { SDL_PumpEvents(); } m_cursor_id = NC_ARROW; m_cursor_animation.reset(); } void Cursor::set(AnimationPtr anim) { assert(anim != 0); m_cursor_animation = anim; m_cursor_type = CURSOR_ANIMATION; if (SDL_ShowCursor(0)) { SDL_PumpEvents(); } m_animtime = m_timemanager->getTime(); m_cursor_id = NC_ARROW; m_cursor_image.reset(); } void Cursor::setDrag(ImagePtr image, int32_t drag_offset_x, int32_t drag_offset_y) { assert(image != 0); m_cursor_drag_image = image; m_drag_type = CURSOR_IMAGE; m_drag_offset_x = drag_offset_x; m_drag_offset_y = drag_offset_y; m_cursor_drag_animation.reset(); } void Cursor::setDrag(AnimationPtr anim, int32_t drag_offset_x, int32_t drag_offset_y) { assert(anim != 0); m_cursor_drag_animation = anim; m_drag_type = CURSOR_ANIMATION; m_drag_offset_x = drag_offset_x; m_drag_offset_y = drag_offset_y; m_drag_animtime = m_timemanager->getTime(); m_cursor_drag_image.reset(); } void Cursor::resetDrag() { m_drag_type = CURSOR_NONE; m_drag_animtime = 0; m_drag_offset_x = 0; m_drag_offset_y = 0; m_cursor_drag_animation.reset(); m_cursor_drag_image.reset(); } void Cursor::setPosition(uint32_t x, uint32_t y) { m_mx = x; m_my = y; SDL_WarpMouseInWindow(RenderBackend::instance()->getWindow(), m_mx, m_my); } void Cursor::getPosition(int32_t* x, int32_t* y) { *x = m_mx; *y = m_my; } void Cursor::invalidate() { if (m_native_cursor != NULL) { SDL_FreeCursor(m_native_cursor); m_native_cursor = NULL; m_invalidated = true; } } void Cursor::draw() { if (m_invalidated) { if (m_cursor_type != CURSOR_ANIMATION || m_cursor_type == CURSOR_IMAGE ) { set(m_cursor_id); } m_invalidated = false; } SDL_GetMouseState(&m_mx, &m_my); if ((m_cursor_type == CURSOR_NATIVE) && (m_drag_type == CURSOR_NONE)) { return; } // render possible drag image ImagePtr img; if (m_drag_type == CURSOR_IMAGE) { img = m_cursor_drag_image; } else if (m_drag_type == CURSOR_ANIMATION) { int32_t animtime = (m_timemanager->getTime() - m_drag_animtime) % m_cursor_drag_animation->getDuration(); img = m_cursor_drag_animation->getFrameByTimestamp(animtime); } if (img != 0) { Rect area(m_mx + m_drag_offset_x + img->getXShift(), m_my + m_drag_offset_y + img->getYShift(), img->getWidth(), img->getHeight()); m_renderbackend->pushClipArea(area, false); img->render(area); m_renderbackend->renderVertexArrays(); m_renderbackend->popClipArea(); } ImagePtr img2; // render possible cursor image if (m_cursor_type == CURSOR_IMAGE) { img2 = m_cursor_image; } else if (m_cursor_type == CURSOR_ANIMATION) { int32_t animtime = (m_timemanager->getTime() - m_animtime) % m_cursor_animation->getDuration(); img2 = m_cursor_animation->getFrameByTimestamp(animtime); } if (img2 != 0) { Rect area(m_mx + img2->getXShift(), m_my + img2->getYShift(), img2->getWidth(), img2->getHeight()); m_renderbackend->pushClipArea(area, false); img2->render(area); m_renderbackend->renderVertexArrays(); m_renderbackend->popClipArea(); } } uint32_t Cursor::getNativeId(uint32_t cursor_id) { switch (cursor_id) { case NC_ARROW: return SDL_SYSTEM_CURSOR_ARROW; case NC_IBEAM: return SDL_SYSTEM_CURSOR_IBEAM; case NC_WAIT: return SDL_SYSTEM_CURSOR_WAIT; case NC_CROSS: return SDL_SYSTEM_CURSOR_CROSSHAIR; case NC_WAITARROW: return SDL_SYSTEM_CURSOR_WAITARROW; case NC_RESIZENWSE: return SDL_SYSTEM_CURSOR_SIZENWSE; case NC_RESIZENESW: return SDL_SYSTEM_CURSOR_SIZENESW; case NC_RESIZEWE: return SDL_SYSTEM_CURSOR_SIZEWE; case NC_RESIZENS: return SDL_SYSTEM_CURSOR_SIZENS; case NC_RESIZEALL: return SDL_SYSTEM_CURSOR_SIZEALL; case NC_NO: return SDL_SYSTEM_CURSOR_NO; case NC_HAND: return SDL_SYSTEM_CURSOR_HAND; } return cursor_id; } void Cursor::setNativeCursor(uint32_t cursor_id) { cursor_id = getNativeId(cursor_id); SDL_Cursor* cursor = SDL_CreateSystemCursor(static_cast(cursor_id)); if (!cursor) { FL_WARN(_log, "Cursor: No cursor matching cursor_id was found."); return; } m_native_cursor = cursor; SDL_SetCursor(cursor); } } fifengine-0.4.1/engine/core/video/cursor.h000066400000000000000000000151351304641216200204430ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_CURSOR_H #define FIFE_CURSOR_H // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "animation.h" struct SDL_Cursor; namespace FIFE { class RenderBackend; class TimeManager; /** Defines the type of shown cursor * native -> default cursor * image -> cursor from image pool * animation -> cursor from animation pool */ enum MouseCursorType { CURSOR_NONE, CURSOR_NATIVE, CURSOR_IMAGE, CURSOR_ANIMATION }; enum NativeCursor { // Start on 1000000 to avoid id-clashes with SDL NC_ARROW = 1000000, // Standard arrow NC_IBEAM, // I-beam for text selection NC_WAIT, // Hourglass NC_CROSS, // Crosshair NC_WAITARROW, // Small wait cursor (or Wait if not available) NC_RESIZENWSE, // Double arrow pointing northwest and southeast NC_RESIZENESW, // Double arrow pointing northeast and southwest NC_RESIZEWE, // Double arrow pointing west and east NC_RESIZENS, // Double arrow pointing north and south NC_RESIZEALL, // Four-pointed arrow pointing north, south, east, and west NC_NO, // Slashed circle NC_HAND // Hand. Common for links, etc. }; /** Cursor class manages mouse cursor handling */ class Cursor { public: /** Constructor. */ Cursor(RenderBackend* renderbackend); /** Destructor. */ virtual ~Cursor() { invalidate(); } void invalidate(); /** draws cursor on screen */ virtual void draw(); /** Sets the current mouse cursor * @param cursor_id For native cursors, this is the resource id to native cursor, or one of the values in NativeCursor */ void set(uint32_t cursor_id=0); /** Sets the current mouse cursor type to image * @param image ImagePtr to a image used for the cursor */ void set(ImagePtr image); /** Sets the current mouse cursor type to animation * @param anim AnimationPtr to a loaded animation used for the cursor */ void set(AnimationPtr anim); /** Sets the current drag image cursor * @param image ImagePtr to a image used for the drag * @param drag_offset_x X Offset to display image when dragging. * @param drag_offset_y Y Offset to display image when dragging. * @note to reset the cursors drag call cursor.setDrag(Cursor::CURSOR_NONE, 0, 0) */ void setDrag(ImagePtr image, int32_t drag_offset_x=0, int32_t drag_offset_y=0); /** Sets the current drag animated cursor * @param anim AnimationPtr to a loaded animation used for the drag * @param drag_offset_x X Offset to display animation when dragging. * @param drag_offset_y Y Offset to display animation when dragging. * @note to reset the cursors drag call cursor.setDrag(Cursor::CURSOR_NONE, 0, 0) */ void setDrag(AnimationPtr anim, int32_t drag_offset_x=0, int32_t drag_offset_y=0); /** Resets the cursor drag type to CURSOR_NONE */ void resetDrag(); /** Gets the current mouse cursor type */ MouseCursorType getType() const { return m_cursor_type; } /** Gets the current mouse cursor handle */ uint32_t getId() const { return m_cursor_id; } /** Gets the current mouse image */ ImagePtr getImage() { return m_cursor_image; } /** Gets the current mouse animation */ AnimationPtr getAnimation() { return m_cursor_animation; } /** Gets the current mouse cursor type */ MouseCursorType getDragType() const { return m_drag_type; } /** Gets the current mouse drag image */ ImagePtr getDragImage() { return m_cursor_drag_image; } /** Gets the current mouse drag animation */ AnimationPtr getDragAnimation() { return m_cursor_drag_animation; } /** Gets the current mouse x position */ uint32_t getX() const { return m_mx; } /** Gets the current mouse y position */ uint32_t getY() const { return m_my; } /** Set the mouse position * @param x,y: The new position in screen coordinates */ void setPosition(uint32_t x, uint32_t y); /** Get the current mouse position */ void getPosition(int32_t* x, int32_t* y); protected: /** Sets the cursor to a native type. * @param cursor_id One of the values in NativeCursor */ void setNativeCursor(uint32_t cursor_id); /** To get some consistancy between platforms, this function checks * if cursor_id matches any of the values in NativeCursor, and * returns the SDL_SystemCursor. * If no match is found, cursor_id is returned. * * @param cursor_id One of the values in NativeCursor */ uint32_t getNativeId(uint32_t cursor_id); private: uint32_t m_cursor_id; MouseCursorType m_cursor_type; MouseCursorType m_drag_type; SDL_Cursor* m_native_cursor; ImagePtr m_cursor_image; ImagePtr m_cursor_drag_image; AnimationPtr m_cursor_animation; AnimationPtr m_cursor_drag_animation; RenderBackend* m_renderbackend; uint32_t m_animtime; uint32_t m_drag_animtime; int32_t m_drag_offset_x; int32_t m_drag_offset_y; int32_t m_mx; int32_t m_my; TimeManager* m_timemanager; bool m_invalidated; }; } //FIFE #endif fifengine-0.4.1/engine/core/video/devicecaps.cpp000066400000000000000000000245551304641216200215750ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include #include // 3rd party library includes #include #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/exception.h" #include "devicecaps.h" namespace FIFE { ScreenMode::ScreenMode() : m_width(0), m_height(0), m_bpp(0), m_refreshRate(0), m_SDLFlags(0), m_format(0), m_display(0), m_renderDriver(""), m_renderDriverIndex(-1) { } ScreenMode::ScreenMode(uint16_t width, uint16_t height, uint16_t bpp, uint32_t SDLFlags) : m_width(width), m_height(height), m_bpp(bpp), m_refreshRate(0), m_SDLFlags(SDLFlags), m_format(0), m_display(0), m_renderDriver(""), m_renderDriverIndex(-1){ } ScreenMode::ScreenMode(uint16_t width, uint16_t height, uint16_t bpp, uint16_t rate, uint32_t SDLFlags) : m_width(width), m_height(height), m_bpp(bpp), m_refreshRate(rate), m_SDLFlags(SDLFlags), m_format(0), m_display(0), m_renderDriver(""), m_renderDriverIndex(-1){ } ScreenMode::ScreenMode(const ScreenMode& rhs){ m_width = rhs.getWidth(); m_height = rhs.getHeight(); m_bpp = rhs.getBPP(); m_SDLFlags = rhs.getSDLFlags(); m_refreshRate = rhs.getRefreshRate(); m_format = rhs.getFormat(); m_display = rhs.getDisplay(); m_renderDriver = rhs.getRenderDriverName(); m_renderDriverIndex = rhs.getRenderDriverIndex(); } bool ScreenMode::operator <(const ScreenMode& rhs) const { // first by display, from lower to higher if (m_display > rhs.getDisplay()){ return true; } else if (m_display < rhs.getDisplay()){ return false; } //sort by fullscreen first if (!isFullScreen() && rhs.isFullScreen()){ return true; } else if (isFullScreen() && !rhs.isFullScreen()){ return false; } //next by bpp if (m_bpp < rhs.getBPP()){ return true; } else if (m_bpp > rhs.getBPP()){ return false; } //then by screen dimensions if (m_width < rhs.getWidth() || m_height < rhs.getHeight()) { return true; } else if (m_width > rhs.getWidth() || m_height > rhs.getHeight()) { return false; } //last by refresh rate if (m_refreshRate < rhs.getRefreshRate()) { return true; } return false; } DeviceCaps::DeviceCaps() : m_videoDriverName("dummy"), m_renderDriverName(""), m_renderDriverIndex(-1) { } DeviceCaps::~DeviceCaps() { } void DeviceCaps::reset() { m_screenModes.clear(); m_renderDriverName = ""; m_renderDriverIndex = -1; fillAvailableDrivers(); } void DeviceCaps::fillAvailableDrivers() { // video driver section (x11, windows, dummy, ...) m_availableVideoDrivers.clear(); uint8_t driverCount = SDL_GetNumVideoDrivers(); for (uint8_t i = 0; i != driverCount; i++) { std::string driver(SDL_GetVideoDriver(i)); m_availableVideoDrivers.push_back(driver); } m_videoDriverName = std::string(SDL_GetCurrentVideoDriver()); // render driver section (opengl, direct3d, software, ...) m_availableRenderDrivers.clear(); SDL_RendererInfo info; driverCount = SDL_GetNumRenderDrivers(); for (uint8_t i = 0; i != driverCount; i++) { SDL_GetRenderDriverInfo(i, &info); std::string name(info.name); m_availableRenderDrivers.push_back(name); } } void DeviceCaps::fillDeviceCaps() { //clear in case this is called twice m_screenModes.clear(); fillAvailableDrivers(); //FLAGS #ifdef HAVE_OPENGL const uint32_t numFlags = 4; uint32_t flags[numFlags]; //OpenGL, windowed flags[0] = ScreenMode::WINDOWED_OPENGL; //OpenGL, fullscreen flags[1] = ScreenMode::FULLSCREEN_OPENGL; //SDL, windowed flags[2] = ScreenMode::WINDOWED_SDL; //SDL, fullscreen flags[3] = ScreenMode::FULLSCREEN_SDL; #else const uint32_t numFlags = 2; uint32_t flags[numFlags]; //SDL, windowed flags[0] = ScreenMode::WINDOWED_SDL; //SDL, fullscreen flags[1] = ScreenMode::FULLSCREEN_SDL; #endif //BITS PER PIXEL const uint32_t numBPP = 3; uint16_t bpps[numBPP]; bpps[0] = 16; bpps[1] = 24; bpps[2] = 32; bool renderDriver = m_renderDriverIndex != -1; uint8_t displayCount = SDL_GetNumVideoDisplays(); for (uint8_t i = 0; i != displayCount; i++) { SDL_DisplayMode mode; uint8_t displayModes = SDL_GetNumDisplayModes(i); for (uint8_t m = 0; m != displayModes; m++) { if (SDL_GetDisplayMode(i, m, &mode) == 0) { for (uint32_t ii = 0; ii < numBPP; ++ii){ for (uint32_t j = 0; j < numFlags; ++j) { //m_screenModes.push_back(ScreenMode(mode.w, mode.h, SDL_BITSPERPIXEL(mode.format), mode.refresh_rate, flags[j])); ScreenMode m(mode.w, mode.h, bpps[ii], mode.refresh_rate, flags[j]); m.setFormat(mode.format); m.setDisplay(i); if (renderDriver) { m.setRenderDriverName(m_renderDriverName); m.setRenderDriverIndex(m_renderDriverIndex); } m_screenModes.push_back(m); } } } else { throw SDLException(SDL_GetError()); } } } //sort the list to keep the most preferred modes at the top of the selection process std::sort(m_screenModes.begin(), m_screenModes.end()); std::reverse(m_screenModes.begin(), m_screenModes.end()); } ScreenMode DeviceCaps::getNearestScreenMode(uint16_t width, uint16_t height, uint16_t bpp, const std::string& renderer, bool fs) const { // refresh rate is set to 0 so that desktop setting is used and the first display is used return getNearestScreenMode(width, height, bpp, renderer, fs, 0, 0); } ScreenMode DeviceCaps::getNearestScreenMode(uint16_t width, uint16_t height, uint16_t bpp, const std::string& renderer, bool fs, uint16_t refresh, uint8_t display) const { ScreenMode mode; SDL_DisplayMode target, closest; bool foundMode = false; // Set the desired resolution, etc. target.w = width; target.h = height; if (bpp == 0) { target.format = 0; // don't care, should be desktop bpp } else if (bpp == 16) { target.format = SDL_PIXELFORMAT_RGB565; } else { target.format = SDL_PIXELFORMAT_RGB888; } target.refresh_rate = refresh; target.driverdata = 0; // initialize to 0 // only first display if (SDL_GetClosestDisplayMode(display, &target, &closest)) { uint32_t flags = 0; if (renderer == "OpenGL") { if (fs) { flags = SDL_WINDOW_OPENGL | SDL_WINDOW_FULLSCREEN; } else { flags = SDL_WINDOW_OPENGL; } } else { if (fs) { flags = SDL_WINDOW_FULLSCREEN; } } mode = ScreenMode(closest.w, closest.h, bpp, closest.refresh_rate, flags); mode.setFormat(closest.format); mode.setDisplay(display); if (m_renderDriverIndex != -1) { mode.setRenderDriverName(m_renderDriverName); mode.setRenderDriverIndex(m_renderDriverIndex); } foundMode = true; } if (!foundMode) { throw NotSupported("Could not find a matching screen mode for the values given!"); } return mode; } void DeviceCaps::setRenderDriverName(const std::string& driver) { bool found = false; uint8_t driverCount = m_availableRenderDrivers.size(); for (uint8_t i = 0; i != driverCount; i++) { if (driver == m_availableRenderDrivers[i]) { m_renderDriverName = driver; m_renderDriverIndex = i; found = true; break; } } if (!found) { if (driver != "") { throw NotSupported("Could not find a matching render driver!"); } m_renderDriverName = ""; m_renderDriverIndex = -1; } // refill fillDeviceCaps(); } uint8_t DeviceCaps::getDisplayCount() const { uint8_t displayCount = SDL_GetNumVideoDisplays(); return displayCount; } std::string DeviceCaps::getDisplayName(uint8_t display) const { if (display >= getDisplayCount()) { throw NotSupported("Could not find a matching display!"); return std::string("Invalid"); } std::string displayName(SDL_GetDisplayName(display)); return displayName; } uint32_t DeviceCaps::getDesktopFormat(uint8_t display) const { SDL_DisplayMode mode; if (SDL_GetDesktopDisplayMode(display, &mode) != 0) { throw SDLException(SDL_GetError()); } return mode.format; } int32_t DeviceCaps::getDesktopRefreshRate(uint8_t display) const { SDL_DisplayMode mode; if (SDL_GetDesktopDisplayMode(display, &mode) != 0) { throw SDLException(SDL_GetError()); } return mode.refresh_rate; } int32_t DeviceCaps::getDesktopWidth(uint8_t display) const { SDL_DisplayMode mode; if (SDL_GetDesktopDisplayMode(display, &mode) != 0) { throw SDLException(SDL_GetError()); } return mode.w; } int32_t DeviceCaps::getDesktopHeight(uint8_t display) const { SDL_DisplayMode mode; if (SDL_GetDesktopDisplayMode(display, &mode) != 0) { throw SDLException(SDL_GetError()); } return mode.h; } Rect DeviceCaps::getDisplayBounds(uint8_t display) const { SDL_Rect srec; if (SDL_GetDisplayBounds(display, &srec) != 0) { throw SDLException(SDL_GetError()); } Rect rec(srec.x, srec.y, srec.w, srec.h); return rec; } } //FIFE fifengine-0.4.1/engine/core/video/devicecaps.h000066400000000000000000000204031304641216200212260ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_DEVICECAPS_H #define FIFE_DEVICECAPS_H // Standard C++ library includes #include #include // Platform specific includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/structures/rect.h" namespace FIFE { class ScreenMode { public: /** Default Constructor * @note You shouldn't construct these objects yourself. This default * constructor was provided because swig complained that was none. */ ScreenMode(); ScreenMode(uint16_t width, uint16_t height, uint16_t bpp, uint32_t SDLFlags); ScreenMode(uint16_t width, uint16_t height, uint16_t bpp, uint16_t rate, uint32_t SDLFlags); ScreenMode(const ScreenMode& rhs); /** Destructor. */ ~ScreenMode() {}; bool operator <(const ScreenMode& rhs) const; /** Returns the width of the screen mode. * @note If both width and height are 0 it means that ALL modes are available * for use with the specified flags. Most likely this is a windowed mode. */ uint16_t getWidth() const { return m_width; }; /** Returns the height of the screen mode. * @note If both width and height are 0 it means that ALL modes are available * for use with the specified flags. Most likely this is a windowed mode. */ uint16_t getHeight() const { return m_height; }; /** Returns the number of bits per pixel this mode uses. */ uint16_t getBPP() const { return m_bpp; }; /** Returns the refresh rate in Hz of this mode. */ uint16_t getRefreshRate() const { return m_refreshRate; } /** Returns the SDL flags used when testing this mode. */ uint32_t getSDLFlags() const { return m_SDLFlags; }; /** True if this is a fullscreen mode. False if it is a windowed mode. */ bool isFullScreen() const { return (m_SDLFlags & SDL_WINDOW_FULLSCREEN) ? true : false;}; /** True if this mode uses the OpenGL renderer. False otherwise. */ bool isOpenGL() const { return (m_SDLFlags & SDL_WINDOW_OPENGL) ? true : false; }; /** Is this screen mode an SDL only screen mode */ bool isSDL() const { return (!(m_SDLFlags & SDL_WINDOW_OPENGL)) ? true : false; }; /** Sets the pixel format enum. */ void setFormat(uint32_t format) { m_format = format;} /** Returns the pixel format enum. */ uint32_t getFormat() const { return m_format; } /** Sets the display index. */ void setDisplay(uint8_t display) { m_display = display; } /** Returns the display index. */ uint8_t getDisplay() const { return m_display; } /** Sets the render driver name. */ void setRenderDriverName(const std::string driver) { m_renderDriver = driver; } /** Returns the render driver name. Default is "". */ const std::string& getRenderDriverName() const { return m_renderDriver; } /** Sets the index of the render driver used by SDL. */ void setRenderDriverIndex(int8_t index) { m_renderDriverIndex = index; } /** Returns the index of the render driver. Default is -1. */ int8_t getRenderDriverIndex() const { return m_renderDriverIndex; } //OpenGL, windowed static const uint32_t WINDOWED_OPENGL = SDL_WINDOW_OPENGL; //OpenGL, fullscreen static const uint32_t FULLSCREEN_OPENGL = SDL_WINDOW_OPENGL | SDL_WINDOW_FULLSCREEN; //SDL, windowed static const uint32_t WINDOWED_SDL = 0; //SDL, fullscreen static const uint32_t FULLSCREEN_SDL = SDL_WINDOW_FULLSCREEN; private: uint16_t m_width; uint16_t m_height; uint16_t m_bpp; uint16_t m_refreshRate; uint32_t m_SDLFlags; uint32_t m_format; uint8_t m_display; std::string m_renderDriver; int8_t m_renderDriverIndex; }; //ScreenMode class DeviceCaps { public: /** Constructor. */ DeviceCaps(); /** Destructor. */ ~DeviceCaps(); /** Should be called AFTER SDL_Init() has been called */ void fillDeviceCaps(); /** Clears all information gathered for the device */ void reset(); /** Gets the available video drivers for your operating system */ std::vector getAvailableVideoDrivers() const { return m_availableVideoDrivers; }; /** Gets the available render drivers for your operating system */ std::vector getAvailableRenderDrivers() const { return m_availableRenderDrivers; }; /** Returns a vector containing screen modes. */ std::vector getSupportedScreenModes() const { return m_screenModes; }; /** Gets the nearest valid screen mode based on the arguments passed */ ScreenMode getNearestScreenMode(uint16_t width, uint16_t height, uint16_t bpp, const std::string& renderer, bool fs) const; /** Gets the nearest valid screen mode based on the arguments passed */ ScreenMode getNearestScreenMode(uint16_t width, uint16_t height, uint16_t bpp, const std::string& renderer, bool fs, uint16_t refresh, uint8_t display = 0) const; /** Returns the name of the current video driver. */ std::string getVideoDriverName() const { return m_videoDriverName; } /** Sets the name of the video driver. */ void setVideoDriverName(const std::string& driver) { m_videoDriverName = driver; } /** Returns the name of the current render driver or * an empty string to initialize the first one supporting the requested flags. */ std::string getRenderDriverName() const { return m_renderDriverName; } /** Sets the name of the render driver. */ void setRenderDriverName(const std::string& driver); /** Returns the number of displays. */ uint8_t getDisplayCount() const; /** Returns the display name for the given display index. */ std::string getDisplayName(uint8_t display = 0) const; /** Returns the SDL_PixelFormatEnum of the desktop for the given display index. */ uint32_t getDesktopFormat(uint8_t display = 0) const; /** Returns the refresh rate in Hz of the desktop for the given display index. */ int32_t getDesktopRefreshRate(uint8_t display = 0) const; /** Returns the width of the desktop resolution for the given display index. */ int32_t getDesktopWidth(uint8_t display = 0) const; /** Returns the height of the desktop resolution for the given display index. */ int32_t getDesktopHeight(uint8_t display = 0) const; /** Returns the bounding points for the given display index. */ Rect getDisplayBounds(uint8_t display = 0) const; private: std::vector m_screenModes; std::string m_videoDriverName; std::vector m_availableVideoDrivers; std::string m_renderDriverName; int8_t m_renderDriverIndex; std::vector m_availableRenderDrivers; /** Called in the constructor. No need for anyone to call this */ void fillAvailableDrivers(); }; //DeviceCaps } //FIFE #endif //FIFE_DEVICECAPS_H fifengine-0.4.1/engine/core/video/fonts/000077500000000000000000000000001304641216200201015ustar00rootroot00000000000000fifengine-0.4.1/engine/core/video/fonts/fontbase.cpp000066400000000000000000000164361304641216200224200ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // Platform specific includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/structures/rect.h" #include "util/base/exception.h" #include "util/utf8/utf8.h" #include "video/image.h" #include "video/renderbackend.h" #include "fontbase.h" namespace FIFE { FontBase::FontBase(): m_pool(), mColor(), mGlyphSpacing(0), mRowSpacing(0), mFilename(""), m_antiAlias(true) { } void FontBase::invalidate() { m_pool.invalidateCachedText(); } void FontBase::setRowSpacing(int32_t spacing) { mRowSpacing = spacing; } int32_t FontBase::getRowSpacing() const { return mRowSpacing; } void FontBase::setGlyphSpacing(int32_t spacing) { mGlyphSpacing = spacing; } int32_t FontBase::getGlyphSpacing() const { return mGlyphSpacing; } void FontBase::setAntiAlias(bool antiAlias) { m_antiAlias = antiAlias; } bool FontBase::isAntiAlias() { return m_antiAlias; } SDL_Color FontBase::getColor() const { return mColor; } int32_t FontBase::getStringIndexAt(const std::string &text, int32_t x) const { assert( utf8::is_valid(text.begin(), text.end()) ); std::string::const_iterator cur; if (text.size() == 0) return 0; if (x <= 0) return 0; cur = text.begin(); utf8::next(cur, text.end()); std::string buff; while(cur != text.end()) { buff = std::string(text.begin(), cur); if (getWidth(buff) > x) { return buff.size(); } else { utf8::next(cur, text.end()); } } if (x > getWidth(text)) { return text.size(); } else { return buff.size(); } } Image* FontBase::getAsImage(const std::string& text) { Image* image = m_pool.getRenderedText(this, text); if (!image) { SDL_Surface* textSurface = renderString(text); image = RenderBackend::instance()->createImage(textSurface); m_pool.addRenderedText( this, text, image ); } return image; } Image* FontBase::getAsImageMultiline(const std::string& text) { const uint8_t newline_utf8 = '\n'; uint32_t newline; utf8::utf8to32(&newline_utf8,&newline_utf8 + 1,&newline); //std::cout << "Text:" << text << std::endl; Image* image = m_pool.getRenderedText(this, text); if (!image) { std::vector lines; std::string::const_iterator it = text.begin(); // split text as needed int32_t render_width = 0, render_height = 0; do { uint32_t codepoint = 0; std::string line; while( codepoint != newline && it != text.end() ) { codepoint = utf8::next(it,text.end()); if( codepoint != newline ) utf8::append(codepoint, back_inserter(line)); } //std::cout << "Line:" << line << std::endl; SDL_Surface* text_surface = renderString(line); if (text_surface->w > render_width) { render_width = text_surface->w; } lines.push_back(text_surface); } while (it != text.end()); render_height = (getRowSpacing() + getHeight()) * lines.size(); SDL_Surface* final_surface = SDL_CreateRGBSurface(0, render_width,render_height,32, RMASK, GMASK, BMASK ,AMASK); if (!final_surface) { throw SDLException(std::string("CreateRGBSurface failed: ") + SDL_GetError()); } SDL_FillRect(final_surface, 0, 0x00000000); int32_t ypos = 0; for (std::vector::iterator i = lines.begin(); i != lines.end(); ++i) { SDL_Rect dst_rect = { 0, 0, 0, 0 }; dst_rect.y = ypos; // Disable alpha blending //SDL_SetAlpha(*i,0,SDL_ALPHA_OPAQUE); SDL_SetSurfaceBlendMode(*i, SDL_BLENDMODE_NONE); SDL_BlitSurface(*i, 0, final_surface, &dst_rect); ypos += getRowSpacing() + getHeight(); SDL_FreeSurface(*i); } image = RenderBackend::instance()->createImage(final_surface); m_pool.addRenderedText(this, text, image); } return image; } std::string FontBase::splitTextToWidth (const std::string& text, int32_t render_width) { const uint32_t whitespace = ' '; const uint8_t newline_utf8 = '\n'; uint32_t newline; utf8::utf8to32(&newline_utf8,&newline_utf8 + 1,&newline); if (render_width <= 0 || text.empty()) { return text; } std::string output; std::string line; std::string::const_iterator pos = text.begin(); std::list > break_pos; bool firstLine = true; while( pos != text.end()) { break_pos.clear(); if( !firstLine ) { line = "\n"; } else { firstLine = false; } bool haveNewLine = false; while( getWidth(line) < render_width && pos != text.end() ) { uint32_t codepoint = utf8::next(pos, text.end()); if (codepoint == whitespace && !line.empty()) break_pos.push_back( std::make_pair(line.length(),pos) ); if( codepoint != newline ) utf8::append(codepoint, back_inserter(line) ); // Special case: Already newlines in string: if( codepoint == newline ) { output.append(line); line = ""; haveNewLine = true; break; } } if( haveNewLine ) continue; if( pos == text.end() ) break; if( break_pos.empty() ) { // No break position and line length smaller than 2 // means the renderwidth is really screwed. Just continue // appending single character lines. if( utf8::distance(line.begin(),line.end()) <= 1 && line != "\n") { output.append(line); continue; } if (line == "\n") { ++pos; } // We can't do hyphenation here, // so we just retreat one character :-( // FIXME //line = line.erase(line.length() - 1); //--pos; } else { line = line.substr(0,break_pos.back().first); pos = break_pos.back().second; } output.append(line); } if( !line.empty() ) { output.append(line); } return output; } } fifengine-0.4.1/engine/core/video/fonts/fontbase.h000066400000000000000000000056661304641216200220700ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_FONTS_FONTBASE_H #define FIFE_FONTS_FONTBASE_H // Standard C++ library includes #include // Platform specific includes #include "util/base/fife_stdint.h" // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "textrenderpool.h" #include "ifont.h" struct SDL_Surface; namespace FIFE { /** Abstract Font Base Class * Uses a pool for rendered strings. * @see TextRenderPool */ class FontBase: public IFont { public: FontBase(); virtual ~FontBase() {}; void invalidate(); void setRowSpacing (int32_t spacing); int32_t getRowSpacing() const; void setGlyphSpacing(int32_t spacing); int32_t getGlyphSpacing() const; void setAntiAlias(bool antiAlias); bool isAntiAlias(); virtual int32_t getStringIndexAt(const std::string &text, int32_t x) const; Image* getAsImage(const std::string& text); Image* getAsImageMultiline(const std::string& text); std::string splitTextToWidth (const std::string& text, int32_t render_width); SDL_Color getColor() const; virtual SDL_Surface* renderString(const std::string& text) = 0; protected: TextRenderPool m_pool; SDL_Color mColor; int32_t mGlyphSpacing; int32_t mRowSpacing; std::string mFilename; bool m_antiAlias; }; } #endif fifengine-0.4.1/engine/core/video/fonts/fonts.i000066400000000000000000000060261304641216200214100ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "video/fonts/ifont.h" #include "video/fonts/fontbase.h" #include "video/fonts/truetypefont.h" #include "video/fonts/subimagefont.h" %} typedef uint8_t Uint8; namespace FIFE { class IFont { public: virtual ~IFont(); virtual void setRowSpacing (int32_t spacing) = 0; virtual int32_t getRowSpacing() const = 0; virtual void setGlyphSpacing(int32_t spacing) = 0; virtual int32_t getGlyphSpacing() const = 0; virtual void setAntiAlias(bool antiAlias) = 0; virtual bool isAntiAlias() = 0; virtual void setColor(uint8_t r,uint8_t g,uint8_t b, uint8_t a = 255) = 0; virtual SDL_Color getColor() const = 0; virtual int32_t getWidth(const std::string& text) const = 0; virtual int32_t getHeight() const = 0; }; class FontBase: public IFont { public: virtual ~FontBase(){ } }; %feature("notabstract") TrueTypeFont; %rename(TTFont) TrueTypeFont; class TrueTypeFont: public FontBase { public: TrueTypeFont(const std::string& filename, int32_t size); virtual ~TrueTypeFont(); virtual void setColor(Uint8 r, Uint8 g, Uint8 b, Uint8 a = 255); virtual int32_t getWidth(const std::string& text) const; virtual int32_t getHeight() const; }; %feature("notabstract") SubImageFont; class SubImageFont: public FontBase { public: SubImageFont(const std::string& filename, const std::string& glyphs); virtual ~SubImageFont(); virtual void setColor(Uint8 r, Uint8 g, Uint8 b, Uint8 a = 255); virtual int32_t getWidth(const std::string& text) const; virtual int32_t getHeight() const; }; } fifengine-0.4.1/engine/core/video/fonts/ifont.h000066400000000000000000000077331304641216200214030ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_IFONT_H #define FIFE_IFONT_H // Standard C++ library includes #include // Platform specific includes // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder namespace FIFE { class Image; /** Pure abstract Font interface */ class IFont { public: virtual ~IFont() {} /** * Sets the spacing between rows in pixels. Default is 0 pixels. * The spacing can be negative. * * @param spacing the spacing in pixels. */ virtual void setRowSpacing (int32_t spacing) = 0; /** * Gets the spacing between rows in pixels. * * @return the spacing. */ virtual int32_t getRowSpacing() const = 0; /** * Sets the spacing between letters in pixels. Default is 0 pixels. * The spacing can be negative. * * @param spacing the spacing in pixels. */ virtual void setGlyphSpacing(int32_t spacing) = 0; /** * Gets the spacing between letters in pixels. * * @return the spacing. */ virtual int32_t getGlyphSpacing() const = 0; /** * Sets the use of anti aliasing. * * @param antiAlias true for use of anti aliasing. */ virtual void setAntiAlias(bool antiAlias) = 0; /** * Checks if anti aliasing is used. * * @return true if anti aliasing is used. */ virtual bool isAntiAlias() = 0; virtual int32_t getStringIndexAt(const std::string &text, int32_t x) const = 0; /** Gets given text as Image * The rsulting image is pooled, so it's not that time critical */ virtual Image* getAsImage(const std::string& text) = 0; /** Gets given text as Image. Text is splitted on multiple lines based "\n" marks * The rsulting image is pooled, so it's not that time critical */ virtual Image* getAsImageMultiline(const std::string& text) = 0; virtual std::string splitTextToWidth (const std::string& text, int32_t render_width) = 0; /** Set the color the text should be rendered in */ virtual void setColor(uint8_t r,uint8_t g,uint8_t b, uint8_t a = 255) = 0; /** Get the color the text was rendered in */ virtual SDL_Color getColor() const = 0; /** gets width of given text */ virtual int32_t getWidth(const std::string& text) const = 0; /** gets height of this font */ virtual int32_t getHeight() const = 0; virtual void invalidate() = 0; }; } #endif fifengine-0.4.1/engine/core/video/fonts/imagefontbase.cpp000066400000000000000000000073141304641216200234160ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // 3rd party library includes #include #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/exception.h" #include "util/structures/rect.h" #include "util/utf8/utf8.h" #include "video/image.h" #include "video/renderbackend.h" #include "imagefontbase.h" namespace FIFE { ImageFontBase::ImageFontBase() : FontBase(), m_height(0) { } ImageFontBase::~ImageFontBase() { type_glyphs::iterator i = m_glyphs.begin(); for(; i != m_glyphs.end(); ++i) { SDL_FreeSurface(i->second.surface); } } int32_t ImageFontBase::getWidth(const std::string& text) const { int32_t w = 0; std::string::const_iterator text_it = text.begin(); while(text_it != text.end()) { uint32_t codepoint = utf8::next(text_it,text.end()); type_glyphs::const_iterator it = m_glyphs.find( codepoint ); if( it != m_glyphs.end() ) { w += it->second.surface->w + getGlyphSpacing(); continue; } if( m_placeholder.surface ) { w += m_placeholder.surface->w + getGlyphSpacing(); } } return w; } int32_t ImageFontBase::getHeight() const { return m_height; } SDL_Surface *ImageFontBase::renderString(const std::string& text) { SDL_Surface *surface = SDL_CreateRGBSurface(0, getWidth(text),getHeight(),32, RMASK, GMASK, BMASK ,AMASK); SDL_FillRect(surface,0,0x00000000); SDL_Rect dst; dst.x = dst.y = 0; s_glyph *glyph = 0; std::string::const_iterator text_it = text.begin(); while(text_it != text.end()) { uint32_t codepoint = utf8::next(text_it,text.end()); type_glyphs::iterator it = m_glyphs.find( codepoint ); if( it == m_glyphs.end() ) { if( !m_placeholder.surface ) { continue; } glyph = &m_placeholder; } else { glyph = &(it->second); } dst.y = glyph->offset.y; dst.x += glyph->offset.x; SDL_BlitSurface(glyph->surface,0,surface,&dst); dst.x += glyph->surface->w + getGlyphSpacing(); } return surface; } void ImageFontBase::setColor(Uint8 r, Uint8 g, Uint8 b, Uint8 a) { } } fifengine-0.4.1/engine/core/video/fonts/imagefontbase.h000066400000000000000000000063461304641216200230670ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_FONTS_IMAGEFONTBASE_H #define FIFE_FONTS_IMAGEFONTBASE_H // Standard C++ library includes #include #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/structures/point.h" #include "fontbase.h" namespace FIFE { /** ImageFont base class * * Just set the glyphs/placeholder in any derived class and the rendering * is handled by this class. Also frees all glyph surfaces on destruction. */ class ImageFontBase: public FontBase { public: /** * Constructor. */ ImageFontBase(); /** * Destructor. */ virtual ~ImageFontBase(); /** Get the width in pixels a given text would occupy * @param text The text that should be measured. */ virtual int32_t getWidth(const std::string& text) const; /** Get the height in pixels a text line would occupy */ virtual int32_t getHeight() const; virtual SDL_Surface *renderString(const std::string& text); virtual void setColor(Uint8 r, Uint8 g, Uint8 b, Uint8 a = 255); protected: // A glyph (visible character) typedef struct { // The offset of the glyph relative to the top-left corner. Point offset; // The glyphs image // should be with SDL_SRCALPHA off, so that it's just copied over. SDL_Surface* surface; } s_glyph; typedef std::map type_glyphs; type_glyphs m_glyphs; // The glyph used, when the real glyph is not found // Should default to '?' s_glyph m_placeholder; int32_t m_height; }; } #endif // end GCN_SDLTRUETYPEFONT_HPP fifengine-0.4.1/engine/core/video/fonts/subimagefont.cpp000066400000000000000000000115061304641216200232730ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // Platform specific includes #include "util/base/fife_stdint.h" // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/exception.h" #include "util/log/logger.h" #include "util/structures/rect.h" #include "util/utf8/utf8.h" #include "video/image.h" #include "video/imagemanager.h" #include "video/renderbackend.h" #include "subimagefont.h" namespace FIFE { /** Logger to use for this source file. * @relates Logger */ static Logger _log(LM_GUI); SubImageFont::SubImageFont(const std::string& filename, const std::string& glyphs) : ImageFontBase() { FL_LOG(_log, LMsg("fifechan_image_font, loading ") << filename << " glyphs " << glyphs); ImagePtr img = ImageManager::instance()->load(filename); SDL_Surface* surface = img->getSurface(); m_colorkey = RenderBackend::instance()->getColorKey(); if( !surface ) { throw CannotOpenFile(filename); } // Make sure we get 32bit RGB // and copy the Pixelbuffers surface SDL_Surface *tmp = SDL_CreateRGBSurface(0, surface->w,surface->h,32, RMASK, GMASK, BMASK ,NULLMASK); SDL_BlitSurface(surface,0,tmp,0); surface = tmp; // Prepare the data for extracting the glyphs. uint32_t *pixels = reinterpret_cast(surface->pixels); int32_t x = 0; SDL_Rect src; src.h = surface->h; src.y = 0; uint32_t separator = pixels[0]; uint32_t colorkey = SDL_MapRGB(surface->format, m_colorkey.r, m_colorkey.g, m_colorkey.b); // if colorkey feature is not enabled then manually find the color key in the font if (!RenderBackend::instance()->isColorKeyEnabled()) { while(x < surface->w && pixels[x] == separator) { ++x; } colorkey = pixels[x]; } // Disable alpha blending, so that we use color keying //SDL_SetAlpha(surface,0,255); //SDL_SetColorKey(surface,SDL_SRCCOLORKEY,colorkey); FL_DBG(_log, LMsg("image_font") << " glyph separator is " << pprint(reinterpret_cast(separator)) << " transparent color is " << pprint(reinterpret_cast(colorkey))); // Finally extract all glyphs std::string::const_iterator text_it = glyphs.begin(); while(text_it != glyphs.end()) { int32_t w = 0; while(x < surface->w && pixels[x] == separator) ++x; if( x == surface->w ) break; while(x + w < surface->w && pixels[x + w] != separator) ++w; src.x = x; src.w = w; tmp = SDL_CreateRGBSurface(0, w,surface->h,32, RMASK, GMASK, BMASK ,NULLMASK); SDL_FillRect(tmp,0,colorkey); SDL_BlitSurface(surface,&src,tmp,0); // Disable alpha blending, so that we use colorkeying //SDL_SetAlpha(tmp,0,255); //SDL_SetColorKey(tmp,SDL_SRCCOLORKEY,colorkey); SDL_SetSurfaceBlendMode(tmp, SDL_BLENDMODE_NONE); SDL_SetColorKey(tmp, SDL_TRUE, colorkey); uint32_t codepoint = utf8::next(text_it, glyphs.end()); m_glyphs[ codepoint ].surface = tmp; x += w; } // Set placeholder glyph // This should actually work ith utf8. if( m_glyphs.find('?') != m_glyphs.end() ) { m_placeholder = m_glyphs['?']; } else { m_placeholder.surface = 0; } m_height = surface->h; SDL_FreeSurface(surface); } } fifengine-0.4.1/engine/core/video/fonts/subimagefont.h000066400000000000000000000046711304641216200227450ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_FONTS_SUBIMAGEFONT_H #define FIFE_FONTS_SUBIMAGEFONT_H // Standard C++ library includes #include // Platform specific includes #include "util/base/fife_stdint.h" // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "imagefontbase.h" namespace FIFE { /** Imagefont that is able to read glyphs from single image sheet, see e.g. * fifechan imagefontcollection (google for it) */ class SubImageFont: public ImageFontBase { public: /** * Constructor. * * @param filename the filename of the Image Font. * @param glyphs the glyphs for Guichan format. */ SubImageFont(const std::string& filename, const std::string& glyphs); ~SubImageFont() {} private: SDL_Color m_colorkey; }; } #endif fifengine-0.4.1/engine/core/video/fonts/textrenderpool.cpp000066400000000000000000000107001304641216200236610ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // Platform specific includes // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "video/image.h" #include "util/time/timemanager.h" #include "fontbase.h" #include "textrenderpool.h" namespace FIFE { TextRenderPool::TextRenderPool(size_t poolSize) { m_poolMaxSize = poolSize; m_poolSize = 0; m_collectTimer.setInterval( 1000 * 60 ); m_collectTimer.setCallback( boost::bind( &TextRenderPool::removeOldEntries, this) ); } TextRenderPool::~TextRenderPool() { type_pool::iterator it= m_pool.begin(); for(;it != m_pool.end(); ++it) { delete it->image; } } Image* TextRenderPool::getRenderedText( FontBase* fontbase, const std::string& text) { SDL_Color c = fontbase->getColor(); type_pool::iterator it= m_pool.begin(); for(;it != m_pool.end(); ++it) { if( it->antialias != fontbase->isAntiAlias() ) continue; if( it->glyph_spacing != fontbase->getGlyphSpacing() ) continue; if( it->row_spacing != fontbase->getRowSpacing() ) continue; if( it->color.r != c.r || it->color.g != c.g || it->color.b != c.b ) continue; if( it->text != text ) continue; // Stay sorted after access time it->timestamp = TimeManager::instance()->getTime(); m_pool.push_front( *it ); m_pool.erase( it ); return m_pool.front().image; } return 0; } void TextRenderPool::addRenderedText( FontBase* fontbase,const std::string& text, Image* image) { // Construct a entry and add it. s_pool_entry centry; centry.antialias = fontbase->isAntiAlias(); centry.glyph_spacing = fontbase->getGlyphSpacing(); centry.row_spacing = fontbase->getRowSpacing(); centry.text = text; centry.color = fontbase->getColor(); centry.image = image; centry.timestamp = TimeManager::instance()->getTime(); m_pool.push_front( centry ); // Some minimal amount of entries -> start collection timer // Don't have a timer active if only _some_ text is pooled. if( m_poolSize >= m_poolMaxSize/10 ) m_collectTimer.start(); // Maintain max pool size if( m_poolSize < m_poolMaxSize ) { m_poolSize++; return; } else { delete m_pool.back().image; m_pool.pop_back(); } } void TextRenderPool::removeOldEntries() { type_pool::iterator it = m_pool.begin(); uint32_t now = TimeManager::instance()->getTime(); while (it != m_pool.end()) { if( (now - it->timestamp) > 1000*60 ) { delete it->image; it = m_pool.erase(it); --m_poolSize; } else { ++it; } } // Stop if nothing can grow old =) if( m_poolSize == 0 ) m_collectTimer.stop(); } void TextRenderPool::invalidateCachedText() { type_pool::iterator it = m_pool.begin(); while (it != m_pool.end()) { it->image->invalidate(); ++it; } } } fifengine-0.4.1/engine/core/video/fonts/textrenderpool.h000066400000000000000000000065761304641216200233460ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_FONTS_TEXTRENDERPOOL_H #define FIFE_FONTS_TEXTRENDERPOOL_H // Standard C++ library includes #include #include // Platform specific includes // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/time/timer.h" struct SDL_Surface; namespace FIFE { class FontBase; class Image; /** Generic pool for rendered text * Caches a number of Images with text, as rendered by a Font. * Makes sure no more than a maximum number of strings is pooled at a time. * Automatically removes pooled strings not used for a minute. * Doesn't use resources (apart from a minimum) if not used after a while. * * @todo Should probably use a @c std::map instead of a @c std::list */ class TextRenderPool { public: /** Constructor * Constructs a pool with a maximum of poolSize entries */ TextRenderPool(size_t poolSize = 200); /** Destructor */ ~TextRenderPool(); /** Invalidates all cached text images */ void invalidateCachedText(); /** Get a string image */ Image* getRenderedText( FontBase* fontbase, const std::string& text); /** Add a string image */ void addRenderedText( FontBase* fontbase, const std::string& text, Image* image); /** Remove entries not used since a minute * Is a timer callback. */ void removeOldEntries(); protected: typedef struct { std::string text; SDL_Color color; bool antialias; int glyph_spacing; int row_spacing; uint32_t timestamp; Image* image; } s_pool_entry; typedef std::list type_pool; type_pool m_pool; size_t m_poolSize; size_t m_poolMaxSize; Timer m_collectTimer; }; } #endif fifengine-0.4.1/engine/core/video/fonts/truetypefont.cpp000066400000000000000000000075721304641216200233700ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/exception.h" #include "util/structures/rect.h" #include "util/utf8/utf8.h" #include "video/image.h" #include "video/renderbackend.h" #include "truetypefont.h" namespace FIFE { TrueTypeFont::TrueTypeFont(const std::string& filename, int32_t size) : FIFE::FontBase() { mFilename = filename; mFont = NULL; mFont = TTF_OpenFont(filename.c_str(), size); if (mFont == NULL) { throw FIFE::CannotOpenFile(filename + " (" + TTF_GetError() + ")"); } // Maybe we should add an setting for that // TTF_HINTING_NORMAL // default // TTF_HINTING_LIGHT // TTF_HINTING_MONO // TTF_HINTING_NONE //TTF_SetFontHinting(mFont, TTF_HINTING_LIGHT); mColor.r = mColor.g = mColor.b = mColor.a = 255; } TrueTypeFont::~TrueTypeFont() { TTF_CloseFont(mFont); } int32_t TrueTypeFont::getWidth(const std::string& text) const { int32_t w, h; assert( utf8::is_valid(text.begin(), text.end()) ); TTF_SizeUTF8(mFont, text.c_str(), &w, &h); return w; } int32_t TrueTypeFont::getHeight() const { return TTF_FontHeight(mFont) + getRowSpacing(); } SDL_Surface* TrueTypeFont::renderString(const std::string& text) { if( text.empty() ) { SDL_Surface *surface = SDL_CreateRGBSurface(0, 1,getHeight(),32, RMASK, GMASK, BMASK ,AMASK); SDL_FillRect(surface,0,0x00000000); return surface; } SDL_Surface* renderedText = 0; if (m_antiAlias) { renderedText = TTF_RenderUTF8_Blended(mFont, text.c_str(), mColor); } else { renderedText = TTF_RenderUTF8_Solid(mFont, text.c_str(), mColor); } // Workaround for a freetype bug, see here: // http://www.nabble.com/SDL_ttf-and-DPMSDisable-bug-is-back-or-still-there-to9578884.html if (renderedText == 0 && !m_antiAlias) { renderedText = TTF_RenderUTF8_Blended(mFont, text.c_str(), mColor); } // Still could not render? Something went horribly wrong! if (renderedText == 0) { throw FIFE::SDLException(TTF_GetError()); } return renderedText; } void TrueTypeFont::setColor(Uint8 r, Uint8 g, Uint8 b, Uint8 a) { mColor.r = r; mColor.g = g; mColor.b = b; mColor.a = a; } } fifengine-0.4.1/engine/core/video/fonts/truetypefont.h000066400000000000000000000057471304641216200230370ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_FONTS_TRUETYPEFONT_H #define FIFE_FONTS_TRUETYPEFONT_H // Standard C++ library includes #include #include // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "fontbase.h" namespace FIFE { /** * SDL True Type Font implementation of Font. It uses the SDL_ttf library * to display True Type Fonts with SDL. * * NOTE: You must initialize the SDL_ttf library before using this * class. Also, remember to call the SDL_ttf libraries quit * function. * * Original author of this class is Walluce Pinkham. Some modifications * made by the Guichan team, and additonal modifications by the FIFE team. */ class TrueTypeFont: public FontBase { public: /** * Constructor. * * @param filename the filename of the True Type Font. * @param size the size the font should be in. */ TrueTypeFont(const std::string& filename, int32_t size); /** * Destructor. */ virtual ~TrueTypeFont(); // Inherited from Font virtual int32_t getWidth(const std::string& text) const; virtual int32_t getHeight() const; virtual SDL_Surface *renderString(const std::string& text); virtual void setColor(Uint8 r, Uint8 g, Uint8 b, Uint8 a = 255); protected: TTF_Font *mFont; }; } #endif // fifengine-0.4.1/engine/core/video/image.cpp000066400000000000000000000251771304641216200205520ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include #include #include // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/resource/resource.h" #include "loaders/native/video/imageloader.h" #include "image.h" namespace FIFE { Image::Image(IResourceLoader* loader): IResource(createUniqueImageName(), loader), m_surface(NULL), m_xshift(0), m_yshift(0), m_shared(false){ } Image::Image(const std::string& name, IResourceLoader* loader): IResource(name, loader), m_surface(NULL), m_xshift(0), m_yshift(0), m_shared(false){ } Image::Image(SDL_Surface* surface): IResource(createUniqueImageName()), m_surface(NULL), m_xshift(0), m_yshift(0), m_shared(false){ reset(surface); } Image::Image(const std::string& name, SDL_Surface* surface): IResource(name), m_surface(NULL), m_xshift(0), m_yshift(0), m_shared(false){ reset(surface); } //@todo make a private function to handle this Image::Image(const uint8_t* data, uint32_t width, uint32_t height): IResource(createUniqueImageName()), m_surface(NULL), m_xshift(0), m_yshift(0), m_shared(false){ SDL_Surface* surface = SDL_CreateRGBSurface(0, width,height, 32, RMASK, GMASK, BMASK ,AMASK); SDL_LockSurface(surface); uint32_t size = width * height * 4; uint8_t* pixeldata = static_cast(surface->pixels); std::copy(data, data + size, pixeldata); SDL_UnlockSurface(surface); reset(surface); } Image::Image(const std::string& name, const uint8_t* data, uint32_t width, uint32_t height): IResource(name), m_surface(NULL), m_xshift(0), m_yshift(0), m_shared(false) { SDL_Surface* surface = SDL_CreateRGBSurface(0, width,height, 32, RMASK, GMASK, BMASK ,AMASK); SDL_LockSurface(surface); uint32_t size = width * height * 4; uint8_t* pixeldata = static_cast(surface->pixels); std::copy(data, data + size, pixeldata); SDL_UnlockSurface(surface); reset(surface); } void Image::reset(SDL_Surface* surface) { if( m_surface && !m_shared) { SDL_FreeSurface(m_surface); } m_xshift = 0; m_yshift = 0; m_surface = surface; } Image::~Image() { reset(NULL); } void Image::load() { if (m_loader){ m_loader->load(this); } else { ImageLoader loader; loader.load(this); } m_state = IResource::RES_LOADED; } void Image::free() { // save the image offsets int32_t xshift = m_xshift; int32_t yshift = m_yshift; reset(NULL); m_xshift = xshift; m_yshift = yshift; m_state = IResource::RES_NOT_LOADED; } SDL_Surface* Image::detachSurface() { SDL_Surface* srf = m_surface; m_surface = NULL; return srf; } uint32_t Image::getWidth() const { if (m_shared) { return m_subimagerect.w; } else if (!m_surface) { return 0; } return m_surface->w; } uint32_t Image::getHeight() const { if (m_shared) { return m_subimagerect.h; } else if (!m_surface) { return 0; } return m_surface->h; } size_t Image::getSize() { if (!m_surface || m_shared) { return 0; } return m_surface->h * m_surface->pitch; } Rect Image::getArea() const { Rect r(0, 0, getWidth(), getHeight()); return r; } void Image::getPixelRGBA(int32_t x, int32_t y, uint8_t* r, uint8_t* g, uint8_t* b, uint8_t* a) { Uint8 *p; assert(m_surface); int32_t bpp = m_surface->format->BytesPerPixel; if(!isSharedImage()) { if ((x < 0) || (x >= m_surface->w) || (y < 0) || (y >= m_surface->h)) { r = g = b = a = 0; return; } p = (Uint8*)m_surface->pixels + y * m_surface->pitch + x * bpp; } else { if ((x < 0) || ((x + m_subimagerect.x) >= m_surface->w) || (y < 0) || ((y + m_subimagerect.y) >= m_surface->h)) { r = g = b = a = 0; return; } p = (Uint8*)m_surface->pixels + (y + m_subimagerect.y) * m_surface->pitch + (x + m_subimagerect.x) * bpp; } uint32_t pixel = 0; switch(bpp) { case 1: pixel = *p; break; case 2: pixel = *(Uint16 *)p; break; case 3: if (SDL_BYTEORDER == SDL_BIG_ENDIAN) { pixel = p[0] << 16 | p[1] << 8 | p[2]; } else { pixel = p[0] | p[1] << 8 | p[2] << 16; } break; case 4: pixel = *(Uint32 *)p; break; } SDL_GetRGBA(pixel, m_surface->format, r, g, b, a); } void Image::saveImage(const std::string& filename) { saveAsPng(filename, *m_surface); } void Image::saveAsPng(const std::string& filename, const SDL_Surface& surface) { FILE *fp; png_structp pngptr; png_infop infoptr; int32_t colortype; png_bytep *rowpointers = NULL; fp = fopen(filename.c_str(), "wb"); if (fp == NULL) { return; } //create the png file pngptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); if (pngptr == NULL) { fclose(fp); return; } //create information struct infoptr = png_create_info_struct(pngptr); if (infoptr == NULL) { fclose(fp); png_destroy_write_struct(&pngptr, (png_infopp)NULL); return; } if (setjmp(png_jmpbuf(pngptr))) { png_destroy_write_struct(&pngptr, &infoptr); fclose(fp); return; } //initialize io png_init_io(pngptr, fp); // lock the surface for access (we strip it off of const but we promise not to modify it, just read) SDL_LockSurface(const_cast(&surface)); colortype = PNG_COLOR_TYPE_RGB; if(surface.format->palette){ colortype |= PNG_COLOR_TYPE_PALETTE; } else if (surface.format->Amask){ colortype |= PNG_COLOR_TYPE_RGB_ALPHA; } else{} png_set_IHDR(pngptr, infoptr, surface.w, surface.h, 8, colortype, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); png_write_info(pngptr, infoptr); png_set_packing(pngptr); rowpointers = new png_bytep[surface.h]; for (int32_t i = 0; i < surface.h; i++) { rowpointers[i] = (png_bytep)(Uint8 *)surface.pixels + i*surface.pitch; } //write the image png_write_image(pngptr, rowpointers); png_write_end(pngptr, infoptr); SDL_UnlockSurface(const_cast(&surface)); delete [] rowpointers; png_destroy_write_struct(&pngptr, &infoptr); fclose(fp); } std::string Image::createUniqueImageName() { // automated counting for name generation, in case the user doesn't provide a name static uint32_t uniqueNumber = 0; static std::string baseName = "image"; std::ostringstream oss; oss << uniqueNumber << "_" << baseName; const std::string name = oss.str(); ++uniqueNumber; return name; } void Image::copySubimage(uint32_t xoffset, uint32_t yoffset, const ImagePtr& srcimg){ if (!srcimg->m_surface) { return; } else if (!m_surface) { m_surface = SDL_CreateRGBSurface(0, srcimg->getWidth(), srcimg->getHeight(), 32, RMASK, GMASK, BMASK ,AMASK); } // disable blending SDL_SetSurfaceBlendMode(srcimg->m_surface, SDL_BLENDMODE_NONE); if(this->isSharedImage()) { Rect const& rect = this->getSubImageRect(); SDL_Rect dstrect = { static_cast(rect.x + xoffset), static_cast(rect.y + yoffset), static_cast(srcimg->getWidth()), static_cast(srcimg->getHeight()) }; if(srcimg->isSharedImage()) { Rect const& rect = srcimg->getSubImageRect(); SDL_Rect srcrect = { static_cast(rect.x), static_cast(rect.y), static_cast(rect.w), static_cast(rect.h) }; SDL_BlitSurface(srcimg->m_surface, &srcrect, m_surface, &dstrect); } else { SDL_BlitSurface(srcimg->m_surface, NULL, m_surface, &dstrect); } } else { SDL_Rect dstrect = { static_cast(xoffset), static_cast(yoffset), static_cast(srcimg->getWidth()), static_cast(srcimg->getHeight()) }; if(srcimg->isSharedImage()) { Rect const& rect = srcimg->getSubImageRect(); SDL_Rect srcrect = { static_cast(rect.x), static_cast(rect.y), static_cast(rect.w), static_cast(rect.h) }; SDL_BlitSurface(srcimg->m_surface, &srcrect, m_surface, &dstrect); } else { SDL_BlitSurface(srcimg->m_surface, NULL, m_surface, &dstrect); } } // enable blending SDL_SetSurfaceBlendMode(srcimg->m_surface, SDL_BLENDMODE_BLEND); } bool Image::putPixel(SDL_Surface* surface, int32_t x, int32_t y, uint8_t r, uint8_t g, uint8_t b, uint8_t a) { if ((x < 0) || (x >= surface->w) || (y < 0) || (y >= surface->h)) { return false; } int32_t bpp = surface->format->BytesPerPixel; SDL_LockSurface(surface); Uint8* p = (Uint8*)surface->pixels + y * surface->pitch + x * bpp; Uint32 pixel = SDL_MapRGBA(surface->format, r, g, b, a); switch(bpp) { case 1: *p = pixel; break; case 2: *(Uint16 *)p = pixel; break; case 3: if(SDL_BYTEORDER == SDL_BIG_ENDIAN) { p[0] = (pixel >> 16) & 0xff; p[1] = (pixel >> 8) & 0xff; p[2] = pixel & 0xff; } else { p[0] = pixel & 0xff; p[1] = (pixel >> 8) & 0xff; p[2] = (pixel >> 16) & 0xff; } break; case 4: *(Uint32 *)p = pixel; break; } SDL_UnlockSurface(surface); return true; } } fifengine-0.4.1/engine/core/video/image.h000066400000000000000000000152331304641216200202070ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_VIDEO_IMAGE_H #define FIFE_VIDEO_IMAGE_H // Standard C++ library includes #include // 3rd party library includes #include #define PNG_SKIP_SETJMP_CHECK #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/fife_stdint.h" #include "util/resource/resource.h" #include "util/structures/point.h" #include "util/structures/rect.h" namespace FIFE { class Image; typedef SharedPtr ImagePtr; /** Base Class for Images. */ class Image : public IResource { public: /** Constructor. */ Image(IResourceLoader* loader = 0); Image(const std::string& name, IResourceLoader* loader = 0); /** Constructor. * @note Takes ownership of the SDL Surface * @param surface SDL Surface in RGBA format */ Image(SDL_Surface* surface); Image(const std::string& name, SDL_Surface* surface); /** Constructor * @param data Pointer to the imagedata (needs to be in RGBA, 8 bits per channel). * @param width Width of the image. * @param height Height of the image. */ Image(const uint8_t* data, uint32_t width, uint32_t height); Image(const std::string& name, const uint8_t* data, uint32_t width, uint32_t height); /** Destructor. */ virtual ~Image(); /** Invalidates the Image causing it to be reset or re-loaded */ virtual void invalidate() = 0; /** Renders itself to the current render target (main screen or attached destination image) at the rectangle rect. * Convenience function * @param rect The position and clipping where to draw this image to. * @param alpha The alpha value, with which to draw self. * @param rgb The color value of overlay if any. */ virtual void render(const Rect& rect, uint8_t alpha = 255, uint8_t const* rgb = 0) = 0; virtual void render(const Rect& rect, const ImagePtr& overlay, uint8_t alpha = 255, uint8_t const* rgb = 0) {} virtual void renderZ(const Rect& rect, float vertexZ, uint8_t alpha = 255, uint8_t const* rgb = 0) {} virtual void renderZ(const Rect& rect, float vertexZ, const ImagePtr& overlay, uint8_t alpha = 255, uint8_t const* rgb = 0) {} virtual void renderZ(const Rect& rect, float vertexZ, uint8_t alpha = 255, bool forceNewBatch = false, uint8_t const* rgb = 0) {} /** Removes underlying SDL_Surface from the image (if exists) and returns this * @note this effectively causes SDL_Surface not to be freed on destruction */ SDL_Surface* detachSurface(); SDL_Surface* getSurface() { assert(m_surface); return m_surface; } const SDL_Surface* getSurface() const { assert(m_surface); return m_surface; } /** This frees the current suface and replaces it with the * surface passed in the parameter (which can be NULL). * @see Image::reset(SDL_Surface* surface) * @param surface the SDL_Surface to use for this image */ virtual void setSurface(SDL_Surface* surface) = 0; /** Saves the image using given filename. */ void saveImage(const std::string& filename); /** Saves the SDL_Surface to png format */ static void saveAsPng(const std::string& filename, const SDL_Surface& surface); static bool putPixel(SDL_Surface* surface, int32_t x, int32_t y, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); uint32_t getWidth() const; uint32_t getHeight() const; Rect getArea() const; void setXShift(int32_t xshift) { m_xshift = xshift; } int32_t getXShift() const { return m_xshift; } void setYShift(int32_t yshift) { m_yshift = yshift; } int32_t getYShift() const { return m_yshift; } void getPixelRGBA(int32_t x, int32_t y, uint8_t* r, uint8_t* g, uint8_t* b, uint8_t* a); virtual size_t getSize(); virtual void load(); virtual void free(); /** After this call all image data will be taken from the given image and its subregion */ virtual void useSharedImage(const ImagePtr& shared, const Rect& region) = 0; /** Forces to load the image into internal memory of GPU */ virtual void forceLoadInternal() = 0; /** Returns true if this image shares data with another one */ bool isSharedImage() const { return m_shared; } /** Returns area of the image it occupies in the shared image */ const Rect& getSubImageRect() const { return m_subimagerect; } /** Copies given image into this one with respect to given offsets */ virtual void copySubimage(uint32_t xoffset, uint32_t yoffset, const ImagePtr& img); protected: // The SDL Surface used. SDL_Surface* m_surface; // The X shift of the Image int32_t m_xshift; // The Y shift of the Image int32_t m_yshift; /** Resets the image to default values (including the x and y shift * values), frees the current surface and sets the surface to the * passed SDL_Surface (which can be NULL). * @see IImage::setSurface(SDL_Surface* surface) * @param surface the SDL_Surface to use for this image */ void reset(SDL_Surface* surface); // Does this image share data with another bool m_shared; // Area which this image occupy in shared image Rect m_subimagerect; private: std::string createUniqueImageName(); }; } #endif fifengine-0.4.1/engine/core/video/imagemanager.cpp000066400000000000000000000336611304641216200221020ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/log/logger.h" #include "util/resource/resourcemanager.h" #include "util/resource/resource.h" #include "video/image.h" #include "video/renderbackend.h" #include "imagemanager.h" namespace FIFE { /** Logger to use for this source file. * @relates Logger */ static Logger _log(LM_RESMGR); ImageManager::~ImageManager() { } size_t ImageManager::getMemoryUsed() const { size_t totalSize = 0; ImageHandleMapConstIterator it = m_imgHandleMap.begin(), itend = m_imgHandleMap.end(); for ( ; it != itend; ++it) { totalSize += it->second->getSize(); } return totalSize; } size_t ImageManager::getTotalResourcesCreated() const { ImageHandleMapConstIterator it = m_imgHandleMap.begin(), itend = m_imgHandleMap.end(); size_t count = 0; for ( ; it != itend; ++it) { if ( it->second->getState() == IResource::RES_NOT_LOADED ) { count++; } } return count; } size_t ImageManager::getTotalResourcesLoaded() const { ImageHandleMapConstIterator it = m_imgHandleMap.begin(), itend = m_imgHandleMap.end(); size_t count = 0; for ( ; it != itend; ++it) { if ( it->second->getState() == IResource::RES_LOADED ) { count++; } } return count; } size_t ImageManager::getTotalResources() const { return m_imgHandleMap.size(); } ImagePtr ImageManager::create(IResourceLoader* loader){ Image* ptr = RenderBackend::instance()->createImage(loader); return add(ptr); } ImagePtr ImageManager::create(const std::string& name, IResourceLoader* loader){ if (exists(name)) { FL_WARN(_log, LMsg("ImageManager::create(std::string, IResourceLoader* loader) - ") << "Resource name " << name << " was previously created. Returning original Image..."); return getPtr(name); } Image* ptr = RenderBackend::instance()->createImage(name, loader); return add(ptr); } ImagePtr ImageManager::load(const std::string& name, IResourceLoader* loader) { ImageNameMapIterator nit = m_imgNameMap.find(name); if (nit != m_imgNameMap.end()) { if ( nit->second->getState() == IResource::RES_NOT_LOADED ) { nit->second->load(); } return nit->second; } //was not found so create and load resource ImagePtr ptr = create(name, loader); ptr->load(); if (ptr->getState() == IResource::RES_NOT_LOADED){ FL_WARN(_log, LMsg("ImageManager::load(std::string) - ") << "Resource name " << name << " was not found and could not be loaded."); remove(name); } return ptr; } ImagePtr ImageManager::loadBlank(uint32_t width, uint32_t height) { uint8_t* pixdata = new uint8_t[width * height * 4]; memset(pixdata, 0, width * height * 4); Image* ptr = RenderBackend::instance()->createImage(pixdata, width, height); delete [] pixdata; ptr->setState(IResource::RES_LOADED); return add(ptr); } ImagePtr ImageManager::loadBlank(const std::string& name, uint32_t width, uint32_t height) { ImageNameMapIterator nit = m_imgNameMap.find(name); if (nit != m_imgNameMap.end()) { remove(nit->second); } uint8_t* pixdata = new uint8_t[width * height * 4]; memset(pixdata, 0, width * height * 4); Image* ptr = RenderBackend::instance()->createImage(name, pixdata, width, height); delete [] pixdata; ptr->setState(IResource::RES_LOADED); return add(ptr); } ImagePtr ImageManager::add(Image* res) { assert(res); assert(!(exists(res->getHandle()) || exists(res->getName()))); ImagePtr resptr(res); std::pair returnValue; returnValue = m_imgHandleMap.insert ( ImageHandleMapPair(res->getHandle(), resptr)); if (returnValue.second) { m_imgNameMap.insert ( ImageNameMapPair(returnValue.first->second->getName(), returnValue.first->second) ); } else { FL_WARN(_log, LMsg("ImageManager::add(IResource*) - ") << "Resource " << res->getName() << " already exists.... ignoring."); } return returnValue.first->second; } bool ImageManager::exists(const std::string& name) { ImageNameMapIterator it = m_imgNameMap.find(name); if (it != m_imgNameMap.end()) { return true; } return false; } bool ImageManager::exists(ResourceHandle handle) { ImageHandleMapConstIterator it = m_imgHandleMap.find(handle); if (it != m_imgHandleMap.end()) { return true; } return false; } void ImageManager::reload(const std::string& name) { ImageNameMapIterator nit = m_imgNameMap.find(name); if (nit != m_imgNameMap.end()) { if ( nit->second->getState() == IResource::RES_LOADED) { nit->second->free(); } nit->second->load(); return; } FL_WARN(_log, LMsg("ImageManager::reload(std::string) - ") << "Resource name " << name << " not found."); } void ImageManager::reload(ResourceHandle handle) { ImageHandleMapIterator it = m_imgHandleMap.find(handle); if ( it != m_imgHandleMap.end()) { if ( it->second->getState() == IResource::RES_LOADED) { it->second->free(); } it->second->load(); return; } FL_WARN(_log, LMsg("ImageManager::reload(ResourceHandle) - ") << "Resource handle " << handle << " not found."); } void ImageManager::reloadAll() { ImageHandleMapIterator it = m_imgHandleMap.begin(), itend = m_imgHandleMap.end(); for ( ; it != itend; ++it) { if ( it->second->getState() == IResource::RES_LOADED) { it->second->free(); } it->second->load(); } } void ImageManager::loadUnreferenced() { ImageHandleMapIterator it = m_imgHandleMap.begin(), itend = m_imgHandleMap.end(); int32_t count = 0; for ( ; it != itend; ++it) { if (it->second.useCount() == 2 && it->second->getState() != IResource::RES_LOADED){ it->second->load(); count++; } } FL_DBG(_log, LMsg("ImageManager::loadUnreferenced() - ") << "Loaded " << count << " unreferenced resources."); } void ImageManager::free(const std::string& name) { ImageNameMapIterator nit = m_imgNameMap.find(name); if (nit != m_imgNameMap.end()) { if ( nit->second->getState() == IResource::RES_LOADED) { nit->second->free(); } return; } FL_WARN(_log, LMsg("ImageManager::free(std::string) - ") << "Resource name " << name << " not found."); } void ImageManager::free(ResourceHandle handle) { ImageHandleMapConstIterator it = m_imgHandleMap.find(handle); if (it != m_imgHandleMap.end()) { if ( it->second->getState() == IResource::RES_LOADED) { it->second->free(); } return; } FL_WARN(_log, LMsg("ImageManager::free(ResourceHandle) - ") << "Resource handle " << handle << " not found."); } void ImageManager::freeAll() { ImageHandleMapIterator it = m_imgHandleMap.begin(), itend = m_imgHandleMap.end(); int32_t count = 0; for ( ; it != itend; ++it) { if ( it->second->getState() == IResource::RES_LOADED) { it->second->free(); count++; } } FL_DBG(_log, LMsg("ImageManager::freeAll() - ") << "Freed all " << count << " resources."); } void ImageManager::freeUnreferenced() { ImageHandleMapIterator it = m_imgHandleMap.begin(), itend = m_imgHandleMap.end(); int32_t count = 0; for ( ; it != itend; ++it) { if (it->second.useCount() == 2 && it->second->getState() == IResource::RES_LOADED ){ it->second->free(); count++; } } FL_DBG(_log, LMsg("ImageManager::freeUnreferenced() - ") << "Freed " << count << " unreferenced resources."); } void ImageManager::remove(ImagePtr& resource) { ImageHandleMapIterator it = m_imgHandleMap.find(resource->getHandle()); ImageNameMapIterator nit = m_imgNameMap.find(resource->getName()); if (it != m_imgHandleMap.end()) { m_imgHandleMap.erase(it); if (nit != m_imgNameMap.end()) { m_imgNameMap.erase(nit); return; } assert(false); //should never get here } FL_WARN(_log, LMsg("ImageManager::remove(ResourcePtr&) - ") << "Resource " << resource->getName() << " was not found."); } void ImageManager::remove(const std::string& name) { std::size_t handle; ImageNameMapIterator nit = m_imgNameMap.find(name); if (nit != m_imgNameMap.end()) { handle = nit->second->getHandle(); m_imgNameMap.erase(nit); } else { FL_WARN(_log, LMsg("ImageManager::remove(std::string) - ") << "Resource " << name << " was not found."); return; } ImageHandleMapIterator it = m_imgHandleMap.find(handle); if ( it != m_imgHandleMap.end()) { m_imgHandleMap.erase(it); return; } assert(false); //should never get here } void ImageManager::remove(ResourceHandle handle) { std::string name; ImageHandleMapIterator it = m_imgHandleMap.find(handle); if (it != m_imgHandleMap.end()) { name = it->second->getName(); m_imgHandleMap.erase(it); } else { FL_WARN(_log, LMsg("ImageManager::remove(ResourceHandle) - ") << "Resource handle " << handle << " was not found."); return; } ImageNameMapIterator nit = m_imgNameMap.find(name); if ( nit != m_imgNameMap.end() ) { m_imgNameMap.erase(nit); return; } assert(false); //should never get here } void ImageManager::removeAll() { //should always be equal assert (m_imgHandleMap.size() == m_imgNameMap.size()); size_t count = m_imgHandleMap.size(); m_imgHandleMap.clear(); m_imgNameMap.clear(); FL_DBG(_log, LMsg("ImageManager::removeAll() - ") << "Removed all " << count << " resources."); } void ImageManager::removeUnreferenced() { ImageHandleMapIterator it = m_imgHandleMap.begin(), itend = m_imgHandleMap.end(); std::vector imgHandles; int32_t count = 0; for ( ; it != itend; ++it) { if ( it->second.useCount() == 2) { imgHandles.push_back(it->second->getHandle()); count++; } } for (std::vector::iterator it = imgHandles.begin(); it != imgHandles.end(); ++it) { remove(*it); } FL_DBG(_log, LMsg("ImageManager::removeUnreferenced() - ") << "Removed " << count << " unreferenced resources."); } ImagePtr ImageManager::get(const std::string& name) { ImageNameMapIterator nit = m_imgNameMap.find(name); if (nit != m_imgNameMap.end()) { if (nit->second->getState() != IResource::RES_LOADED){ //resource is not loaded so load it nit->second->load(); } return nit->second; } //not found so attempt to create and load the resource ImagePtr ptr = load(name); return ptr; } ImagePtr ImageManager::get(ResourceHandle handle) { ImageHandleMapConstIterator it = m_imgHandleMap.find(handle); if (it != m_imgHandleMap.end()) { if (it->second->getState() != IResource::RES_LOADED){ //resource is not loaded so load it it->second->load(); } return it->second; } FL_WARN(_log, LMsg("ImageManager::get(ResourceHandle) - ") << "Resource handle " << handle << " is undefined."); return ImagePtr(); } ImagePtr ImageManager::getPtr(const std::string& name) { ImageNameMapIterator nit = m_imgNameMap.find(name); if (nit != m_imgNameMap.end()) { return nit->second; } FL_WARN(_log, LMsg("ImageManager::getPtr(std::string) - ") << "Resource " << name << " is undefined."); return ImagePtr(); } ImagePtr ImageManager::getPtr(ResourceHandle handle) { ImageHandleMapConstIterator it = m_imgHandleMap.find(handle); if (it != m_imgHandleMap.end()) { return it->second; } FL_WARN(_log, LMsg("ImageManager::getPtr(ResourceHandle) - ") << "Resource handle " << handle << " is undefined."); return ImagePtr(); } ResourceHandle ImageManager::getResourceHandle(const std::string& name) { ImageNameMapIterator nit = m_imgNameMap.find(name); if (nit != m_imgNameMap.end()) { return nit->second->getHandle(); } FL_WARN(_log, LMsg("ImageManager::getResourceHandle(std::string) - ") << "Resource " << name << " is undefined."); return 0; } void ImageManager::invalidate(const std::string& name) { ImageNameMapIterator it = m_imgNameMap.find(name); if (it != m_imgNameMap.end()) { if (it->second->getState() == IResource::RES_LOADED){ it->second.get()->invalidate(); } } } void ImageManager::invalidate(ResourceHandle handle) { ImageHandleMapIterator it = m_imgHandleMap.find(handle); if (it != m_imgHandleMap.end()) { if (it->second->getState() == IResource::RES_LOADED) { it->second.get()->invalidate(); } } } void ImageManager::invalidateAll() { ImageHandleMapIterator it = m_imgHandleMap.begin(), itend = m_imgHandleMap.end(); for ( ; it != itend; ++it) { if (it->second->getState() == IResource::RES_LOADED) { it->second.get()->invalidate(); } } } } //FIFE fifengine-0.4.1/engine/core/video/imagemanager.h000066400000000000000000000274211304641216200215440ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_IMAGE_MANAGER_H #define FIFE_IMAGE_MANAGER_H // Standard C++ library includes #include #include #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/singleton.h" #include "util/resource/resource.h" #include "util/resource/resourcemanager.h" #include "image.h" namespace FIFE { /** ImageManager * * An interface for managing images. * * @see IResource * @see IResourceLoader * @see IResourceManager * */ class ImageManager : public IResourceManager, public DynamicSingleton { public: /** Default constructor. */ ImageManager() : IResourceManager() { } /** Destructor. */ virtual ~ImageManager(); virtual size_t getMemoryUsed() const; virtual size_t getTotalResourcesCreated() const; virtual size_t getTotalResourcesLoaded() const; virtual size_t getTotalResources() const; /** Creates a blank Image but does not load it immediately * * @param loader A pointer to the custom resource loader. The * default is NULL. If this parameter is present the resource * will use the loader to load instead of the default built in * functions. * @return An ImagePtr to the newly created Image * * @see Image * @see ImageLoader * @see IResourceLoader * */ virtual ImagePtr create(IResourceLoader* loader = 0); /** Creates a blank Image but does not load it immediately * * @param name The resource name. Typically a filename. * @param loader A pointer to the custom resource loader. The * default is NULL. If this parameter is present the resource * will use the loader to load instead of the default built in * functions. * @return An ImagePtr to the newly created Image * * @see Image * @see ImageLoader * @see IResourceLoader * */ virtual ImagePtr create(const std::string& name, IResourceLoader* loader = 0); /** Creates a blank resource and loads it from disk * * This function will create the Image if necessary and load * the Image from disk. If the Image is not defined it * will call ImageManager::create() before loading. * * @param name The resource name. Typically a filename. * @param loader A pointer to the custom resource loader. The * default is NULL. If this parameter is present the resource * will use the loader to load instead of the default built in * functions. * @return A ImagePtr to the loaded Image * * @see Image * @see ImageLoader * @see IResourceLoader * */ virtual ImagePtr load(const std::string& name, IResourceLoader* loader = 0); /** Loads a blank resource * * @param width * @param height * @return An ImagePtr to the blank image (ready to be modified) */ virtual ImagePtr loadBlank(uint32_t width, uint32_t height); /** Loads a blank resource * * @param name * @param width * @param height * @return An ImagePtr to the blank image (ready to be modified) */ virtual ImagePtr loadBlank(const std::string& name, uint32_t width, uint32_t height); /** Add an Image to the manager * * This function will create a ImagePtr and add the Image * to the manager. The manager assumes ownership of the Image * so DO NOT delete it. * * @param res A pointer to the Image * @return A ImagePtr to the added resource * * @see Image * */ virtual ImagePtr add(Image* res); /** Checks to see if an Image exists * * This function will search the manager for Images * that match the parameter * * @param name The name of the Image * @return True if the Image exists. False otherwise. * */ virtual bool exists(const std::string& name); /** Checks to see if an Image exists * * This function will search the manager for Images * that match the parameter * * @param handle The handle of the Image * @return True if the Image exists. False otherwise. * */ virtual bool exists(ResourceHandle handle); /** Reloads an Image * * This function will reload an Image if it is managed * by the manager. If not it creates an entry in the log * specifying that the Image could not be found. It will * load the Image if it is not already loaded. * * @param name The name of the resource * */ virtual void reload(const std::string& name); /** Reloads a resource * * This function will reload an Image if it is managed * by the manager. If not it creates an entry in the log * specifying that the Image could not be found. It will * load the Image if it is not already loaded. * * @param handle The handle of the resource * */ virtual void reload(ResourceHandle handle); /** Reloads all Images * * This function will reload all Images managed by the * manager. It will load an Image if it is not already loaded. * * @todo It might be beneficial to supply a parameter to * only reload resources that are already loaded * */ virtual void reloadAll(); /** Loads all unreferenced Images * * All Images that have no external references will be * loaded into memory. * */ virtual void loadUnreferenced(); /** Frees an Image from memory * * The Image is not deleted but it's data is freed. * This calls the Image::free() function and it is * up to the resource to properly free it's memory. The * manager keeps a reference to the Image in case * its required in the future. * * @param name The name of the Image * * @see Image * */ virtual void free(const std::string& name); /** Frees an Image from memory * * The Image is not deleted but it's data is freed. * This calls the Image::free() function and it is * up to the resource to properly free it's memory. The * manager keeps a reference to the Image in case * its required in the future. * * @param handle The handle of the Image * * @see Image * */ virtual void free(ResourceHandle handle); /** Frees all Images * * This calls the Image::free() function for every * Image the manager is managing. It does not remove * them from the manager. * * @see Image * */ virtual void freeAll(); /** Frees all unreferenced Image * * This calls the IResource::free() function for Images * that have no external references to them. It does not * remove them from the manager. * * @see IResource * */ virtual void freeUnreferenced(); /** Removes an Image from the manager * * This removes all references to the Image from the * manager. It does not however guarantee that the resources * destructor is called. If the client has any left over * references to the resource it will not be freed. * * @param resource A ImagePtr to the image to be removed * from the manager * * @note This is useful if you want to remove ownership of a resource * from the manager * * @see Image * */ virtual void remove(ImagePtr& resource); /** Removes an Image from the manager * * This removes all references to the Image from the * manager. It does not however guarantee that the resources * destructor is called. If the client has any left over * references to the resource it will not be freed. * * @param name The name of the Image * * @see Image * */ virtual void remove(const std::string& name); /** Removes an Image from the manager * * This removes all references to the Image from the * manager. It does not however guarantee that the resources * destructor is called. If the client has any left over * references to the resource it will not be freed. * * @param handle The handle of the Image * * @see Image * */ virtual void remove(ResourceHandle handle); /** Removes all Images from the manager * * This effectively removes all references to all Images from * the manager. If there are left over shared pointers to * any resources they will not be deleted. * * @see Image * */ virtual void removeAll(); /** Removes all unreferenced Images * * This effectively removes all Images that dont have an * external reference. The resources will be deleted. * * @see Image * */ virtual void removeUnreferenced(); /** Gets a shared pointer to the Image * * If the Image is not defined it will attempt to create * and load the Image based on the name (it assumes the name * is a filename) * * @param name The name of the Image * @return An ImagePtr to the Image * */ virtual ImagePtr get(const std::string& name); /** Gets a shared pointer to the Image * * If the resource is not defined it returns an empty * (or invalid) ImagePtr and makes an entry in the log. * * @param handle The handle of the resource * @return A ImagePtr to the resource * * @todo This should throw an exception instead of an * empty ImagePtr * */ virtual ImagePtr get(ResourceHandle handle); virtual ImagePtr getPtr(const std::string& name); virtual ImagePtr getPtr(ResourceHandle handle); /** Gets an Image handle by name * * Returns the Image handle associated with the name * * @param name The name of the Image * @return 0 if the resource name is invalid * */ virtual ResourceHandle getResourceHandle(const std::string& name); virtual void invalidate(const std::string& name); virtual void invalidate(ResourceHandle handle); virtual void invalidateAll(); private: typedef std::map< ResourceHandle, ImagePtr > ImageHandleMap; typedef std::map< ResourceHandle, ImagePtr >::iterator ImageHandleMapIterator; typedef std::map< ResourceHandle, ImagePtr >::const_iterator ImageHandleMapConstIterator; typedef std::pair< ResourceHandle, ImagePtr > ImageHandleMapPair; typedef std::map< std::string, ImagePtr > ImageNameMap; typedef std::map< std::string, ImagePtr >::iterator ImageNameMapIterator; typedef std::map< std::string, ImagePtr >::const_iterator ImageNameMapConstIterator; typedef std::pair< std::string, ImagePtr > ImageNameMapPair; ImageHandleMap m_imgHandleMap; ImageNameMap m_imgNameMap; }; } //FIFE #endif //FIFE_IMAGE_MANAGER_H fifengine-0.4.1/engine/core/video/opengl/000077500000000000000000000000001304641216200202345ustar00rootroot00000000000000fifengine-0.4.1/engine/core/video/opengl/fife_opengl.h000066400000000000000000000044311304641216200226640ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_UTIL_FIFEGL_H #define FIFE_UTIL_FIFEGL_H // Standard C++ library includes // 3rd party library includes #include "ext/glee/GLee.h" // GLee.h includes windows.h when on a windows platform // In winnt.h (which is included from windows.h) DELETE // is a defined macro which causes problems with our // FIFE::Key::DELETE enumeration, therefore we undef // the DELETE macro here to fix the compilation errors // that occur in ec_key.h as well as fife_wrap.cc #if defined (WIN32) #undef DELETE #endif // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder namespace FIFE { } //FIFE #endif fifengine-0.4.1/engine/core/video/opengl/glimage.cpp000066400000000000000000000464021304641216200223530ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/structures/rect.h" #include "video/imagemanager.h" #include "video/sdl/sdlimage.h" #include "video/renderbackend.h" #include "video/opengl/renderbackendopengl.h" #include "glimage.h" namespace FIFE { GLImage::GLImage(IResourceLoader* loader): Image(loader), m_compressed(false), m_texId(0) { resetGlimage(); } GLImage::GLImage(const std::string& name, IResourceLoader* loader): Image(name, loader), m_compressed(false), m_texId(0) { resetGlimage(); } GLImage::GLImage(SDL_Surface* surface): Image(surface), m_compressed(false), m_texId(0) { resetGlimage(); } GLImage::GLImage(const std::string& name, SDL_Surface* surface): Image(name, surface), m_compressed(false), m_texId(0) { resetGlimage(); } GLImage::GLImage(const uint8_t* data, uint32_t width, uint32_t height): Image(data, width, height), m_compressed(false), m_texId(0) { assert(m_surface); resetGlimage(); } GLImage::GLImage(const std::string& name, const uint8_t* data, uint32_t width, uint32_t height): Image(name, data, width, height), m_compressed(false), m_texId(0) { assert(m_surface); resetGlimage(); } GLImage::~GLImage() { cleanup(); } void GLImage::invalidate() { resetGlimage(); } void GLImage::setSurface(SDL_Surface* surface) { reset(surface); resetGlimage(); } void GLImage::resetGlimage() { cleanup(); m_chunk_size_w = 0; m_chunk_size_h = 0; m_colorkey = RenderBackend::instance()->getColorKey(); } void GLImage::cleanup() { if (m_texId) { if(!m_shared) { glDeleteTextures(1, &m_texId); } m_texId = 0; m_compressed = false; } m_tex_coords[0] = m_tex_coords[1] = m_tex_coords[2] = m_tex_coords[3] = 0.0f; } void GLImage::render(const Rect& rect, uint8_t alpha, uint8_t const* rgb) { // completely transparent so dont bother rendering if (0 == alpha) { return; } RenderBackend* rb = RenderBackend::instance(); SDL_Surface* target = rb->getRenderTargetSurface(); assert(target != m_surface); // can't draw on the source surface // not on the screen. dont render if (rect.right() < 0 || rect.x > static_cast(target->w) || rect.bottom() < 0 || rect.y > static_cast(target->h)) { return; } if (!m_texId) { generateGLTexture(); } else if (m_shared) { validateShared(); } rb->addImageToArray(m_texId, rect, m_tex_coords, alpha, rgb); } void GLImage::render(const Rect& rect, const ImagePtr& overlay, uint8_t alpha, uint8_t const* rgb) { // completely transparent so dont bother rendering if (0 == alpha) { return; } RenderBackend* rb = RenderBackend::instance(); SDL_Surface* target = rb->getRenderTargetSurface(); assert(target != m_surface); // can't draw on the source surface // not on the screen. dont render if (rect.right() < 0 || rect.x > static_cast(target->w) || rect.bottom() < 0 || rect.y > static_cast(target->h)) { return; } if (!m_texId) { generateGLTexture(); } else if (m_shared) { validateShared(); } GLImage* img = static_cast(overlay.get()); img->forceLoadInternal(); static_cast(rb)->addImageToArray(rect, m_texId, m_tex_coords, img->getTexId(), img->getTexCoords(), alpha, rgb); //rb->addImageToArray(rect, m_texId, m_tex_coords, img->getTexId(), img->getTexCoords(), alpha, rgb); } void GLImage::renderZ(const Rect& rect, float vertexZ, uint8_t alpha, uint8_t const* rgb) { // completely transparent so dont bother rendering if (0 == alpha) { return; } RenderBackend* rb = RenderBackend::instance(); SDL_Surface* target = rb->getRenderTargetSurface(); assert(target != m_surface); // can't draw on the source surface // not on the screen. dont render if (rect.right() < 0 || rect.x > static_cast(target->w) || rect.bottom() < 0 || rect.y > static_cast(target->h)) { return; } if (!m_texId) { generateGLTexture(); } else if (m_shared) { validateShared(); } static_cast(rb)->addImageToArrayZ(m_texId, rect, vertexZ, m_tex_coords, alpha, rgb); //rb->addImageToArray(m_texId, rect, m_tex_coords, alpha, rgb); } void GLImage::renderZ(const Rect& rect, float vertexZ, const ImagePtr& overlay, uint8_t alpha, uint8_t const* rgb) { // completely transparent so dont bother rendering if (0 == alpha) { return; } RenderBackend* rb = RenderBackend::instance(); SDL_Surface* target = rb->getRenderTargetSurface(); assert(target != m_surface); // can't draw on the source surface // not on the screen. dont render if (rect.right() < 0 || rect.x > static_cast(target->w) || rect.bottom() < 0 || rect.y > static_cast(target->h)) { return; } if (!m_texId) { generateGLTexture(); } else if (m_shared) { validateShared(); } GLImage* img = static_cast(overlay.get()); img->forceLoadInternal(); static_cast(rb)->addImageToArrayZ(rect, vertexZ, m_texId, m_tex_coords, img->getTexId(), img->getTexCoords(), alpha, rgb); //rb->addImageToArray(rect, m_texId, m_tex_coords, img->getTexId(), img->getTexCoords(), alpha, rgb); } void GLImage::generateGLTexture() { if (m_shared) { // First make sure we loaded big image to opengl validateShared(); return; } // ultimate possibility to load the image // is used e.g. in case a cursor or gui image is freed even if there is a reference if (!m_surface) { if (m_state == IResource::RES_NOT_LOADED) { load(); } } const uint32_t width = m_surface->w; const uint32_t height = m_surface->h; // With OpenGL 2.0 or GL_ARB_texture_non_power_of_two we don't really need to care // about non power of 2 textures if(GLEE_ARB_texture_non_power_of_two && RenderBackend::instance()->isNPOTEnabled()) { m_chunk_size_w = width; m_chunk_size_h = height; } else { //calculate the nearest larger power of 2 m_chunk_size_w = nextPow2(width); m_chunk_size_h = nextPow2(height); } // used to calculate the fill ratio for given chunk m_tex_coords[0] = m_tex_coords[1] = 0.0f; m_tex_coords[2] = static_cast(m_surface->w%m_chunk_size_w) / static_cast(m_chunk_size_w); m_tex_coords[3] = static_cast(m_surface->h%m_chunk_size_h) / static_cast(m_chunk_size_h); if (m_tex_coords[2] == 0.0f){ m_tex_coords[2] = 1.0f; } if (m_tex_coords[3] == 0.0f){ m_tex_coords[3] = 1.0f; } uint8_t* data = static_cast(m_surface->pixels); int32_t pitch = m_surface->pitch; assert(!m_texId); // get texture id from opengl glGenTextures(1, &m_texId); // set focus on that texture static_cast(RenderBackend::instance())->bindTexture(m_texId); // set filters for texture glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); bool mipmapping = RenderBackend::instance()->isMipmappingEnabled(); if (mipmapping) { glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE); } // without mipmapping, trilinear and bilinear filters are the same switch (RenderBackend::instance()->getTextureFiltering()) { case TEXTURE_FILTER_NONE: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, mipmapping ? GL_NEAREST_MIPMAP_NEAREST : GL_NEAREST); break; case TEXTURE_FILTER_BILINEAR: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, mipmapping ? GL_LINEAR_MIPMAP_NEAREST : GL_LINEAR); break; case TEXTURE_FILTER_TRILINEAR: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, mipmapping ? GL_LINEAR_MIPMAP_LINEAR : GL_LINEAR); break; case TEXTURE_FILTER_ANISOTROPIC: // currently trilinear anisotropic glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, static_cast(RenderBackend::instance()->getMaxAnisotropy())); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, mipmapping ? GL_LINEAR_MIPMAP_LINEAR : GL_LINEAR); break; default: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, mipmapping ? GL_NEAREST_MIPMAP_NEAREST : GL_NEAREST); break; } GLint internalFormat = GL_RGBA8; if(GLEE_ARB_texture_compression && RenderBackend::instance()->isImageCompressingEnabled()) { internalFormat = GL_COMPRESSED_RGBA; m_compressed = true; } else { m_compressed = false; } bool monochrome = RenderBackend::instance()->isMonochromeEnabled(); SDL_Surface* target = RenderBackend::instance()->getRenderTargetSurface(); int32_t bpp_target = RenderBackend::instance()->getPixelFormat().BitsPerPixel; int32_t bpp_source = m_surface->format->BitsPerPixel; // create 16 bit texture, RGBA_4444 if (bpp_target == 16 && bpp_source == 32) { uint16_t* oglbuffer = new uint16_t[m_chunk_size_w * m_chunk_size_h]; memset(oglbuffer, 0x00, m_chunk_size_w*m_chunk_size_h*sizeof(uint16_t)); for (uint32_t y = 0; y < height; ++y) { for (uint32_t x = 0; x < width; ++x) { uint32_t pos = (y * pitch) + (x * 4); uint8_t r = data[pos + 0]; uint8_t g = data[pos + 1]; uint8_t b = data[pos + 2]; uint8_t a = data[pos + 3]; if (RenderBackend::instance()->isColorKeyEnabled()) { // only set alpha to zero if colorkey feature is enabled if (r == m_colorkey.r && g == m_colorkey.g && b == m_colorkey.b) { a = 0; } } // if monochrome rendering is enabled, then the colors are converted to grayscale if (monochrome) { uint8_t lum = static_cast(r*0.3 + g*0.59 + b*0.11); r = lum; g = lum; b = lum; } oglbuffer[(y*m_chunk_size_w) + x] = ((r >> 4) << 12) | ((g >> 4) << 8) | ((b >> 4) << 4) | ((a >> 4) << 0); } } // in case of compression we let OpenGL handle it if (!m_compressed) { internalFormat = GL_RGBA4; } // transfer data from sdl buffer glTexImage2D(GL_TEXTURE_2D, 0, internalFormat, m_chunk_size_w, m_chunk_size_h, 0, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, oglbuffer); delete[] oglbuffer; return; } if(GLEE_ARB_texture_non_power_of_two && RenderBackend::instance()->isNPOTEnabled()) { if(RenderBackend::instance()->isColorKeyEnabled()) { uint8_t* oglbuffer = new uint8_t[width * height * 4]; memcpy(oglbuffer, data, width * height * 4 * sizeof(uint8_t)); for (uint32_t y = 0; y < height; ++y) { for (uint32_t x = 0; x < width * 4; x += 4) { uint32_t gid = x + y * pitch; uint8_t r = oglbuffer[gid + 0]; uint8_t g = oglbuffer[gid + 1]; uint8_t b = oglbuffer[gid + 2]; // set alpha to zero if (r == m_colorkey.r && g == m_colorkey.g && b == m_colorkey.b) { oglbuffer[gid + 3] = 0; } // if monochrome rendering is enabled, then the colors are converted to grayscale if (monochrome) { uint8_t lum = static_cast(r*0.3 + g*0.59 + b*0.11); oglbuffer[gid + 0] = lum; oglbuffer[gid + 1] = lum; oglbuffer[gid + 2] = lum; } } } // transfer data from sdl buffer glTexImage2D(GL_TEXTURE_2D, 0, internalFormat, m_chunk_size_w, m_chunk_size_h, 0, GL_RGBA, GL_UNSIGNED_BYTE, oglbuffer); delete [] oglbuffer; } else if (monochrome) { uint8_t* oglbuffer = new uint8_t[width * height * 4]; memcpy(oglbuffer, data, width * height * 4 * sizeof(uint8_t)); for (uint32_t y = 0; y < height; ++y) { for (uint32_t x = 0; x < width * 4; x += 4) { uint32_t gid = x + y * pitch; // if monochrome rendering is enabled, then the colors are converted to grayscale uint8_t lum = static_cast(oglbuffer[gid + 0]*0.3 + oglbuffer[gid + 1]*0.59 + oglbuffer[gid + 2]*0.11); oglbuffer[gid + 0] = lum; oglbuffer[gid + 1] = lum; oglbuffer[gid + 2] = lum; } } // transfer data from sdl buffer glTexImage2D(GL_TEXTURE_2D, 0, internalFormat, m_chunk_size_w, m_chunk_size_h, 0, GL_RGBA, GL_UNSIGNED_BYTE, oglbuffer); delete [] oglbuffer; } else { // transfer data directly from sdl buffer glTexImage2D(GL_TEXTURE_2D, 0, internalFormat, m_chunk_size_w, m_chunk_size_h, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); } // Non power of 2 textures are not supported, we need to pad the size of texture to nearest power of 2 } else { uint32_t* oglbuffer = new uint32_t[m_chunk_size_w * m_chunk_size_h]; memset(oglbuffer, 0x00, m_chunk_size_w*m_chunk_size_h*sizeof(uint32_t)); for (uint32_t y = 0; y < height; ++y) { for (uint32_t x = 0; x < width; ++x) { uint32_t pos = (y * pitch) + (x * 4); uint8_t a = data[pos + 3]; uint8_t b = data[pos + 2]; uint8_t g = data[pos + 1]; uint8_t r = data[pos + 0]; if (RenderBackend::instance()->isColorKeyEnabled()) { // only set alpha to zero if colorkey feature is enabled if (r == m_colorkey.r && g == m_colorkey.g && b == m_colorkey.b) { a = 0; } } // if monochrome rendering is enabled, then the colors are converted to grayscale if (monochrome) { uint8_t lum = static_cast(r*0.3 + g*0.59 + b*0.11); r = lum; g = lum; b = lum; } oglbuffer[(y*m_chunk_size_w) + x] = r | (g << 8) | (b << 16) | (a<<24); } } // transfer data from sdl buffer glTexImage2D(GL_TEXTURE_2D, 0, internalFormat, m_chunk_size_w, m_chunk_size_h, 0, GL_RGBA, GL_UNSIGNED_BYTE, static_cast(oglbuffer)); delete[] oglbuffer; } } void GLImage::generateGLSharedTexture(const GLImage* shared, const Rect& region) { uint32_t width = shared->getWidth(); uint32_t height = shared->getHeight(); if(!GLEE_ARB_texture_non_power_of_two || !RenderBackend::instance()->isNPOTEnabled()) { width = nextPow2(width); height = nextPow2(height); } if (RenderBackend::instance()->getTextureFiltering() != TEXTURE_FILTER_NONE || RenderBackend::instance()->isMipmappingEnabled()) { // half pixel correction m_tex_coords[0] = (static_cast(region.x)+0.5) / static_cast(width); m_tex_coords[1] = (static_cast(region.y)+0.5) / static_cast(height); m_tex_coords[2] = (static_cast(region.x + region.w)-0.5) / static_cast(width); m_tex_coords[3] = (static_cast(region.y + region.h)-0.5) / static_cast(height); } else { m_tex_coords[0] = static_cast(region.x) / static_cast(width); m_tex_coords[1] = static_cast(region.y) / static_cast(height); m_tex_coords[2] = static_cast(region.x + region.w) / static_cast(width); m_tex_coords[3] = static_cast(region.y + region.h) / static_cast(height); } } void GLImage::useSharedImage(const ImagePtr& shared, const Rect& region) { GLImage* img = static_cast(shared.get()); m_shared_img = img; m_texId = img->m_texId; m_shared = true; m_subimagerect = region; m_atlas_img = shared; m_surface = m_shared_img->m_surface; m_compressed = m_shared_img->m_compressed; m_atlas_name = m_shared_img->getName(); if(m_texId) { generateGLSharedTexture(img, region); } setState(IResource::RES_LOADED); } void GLImage::forceLoadInternal() { if (m_texId == 0) { generateGLTexture(); } else if (m_shared) { validateShared(); } } void GLImage::validateShared() { // if image is valid we can return if (m_shared_img->m_texId && m_shared_img->m_texId == m_texId) { return; } if (m_shared_img->getState() == IResource::RES_NOT_LOADED) { m_shared_img->load(); m_shared_img->generateGLTexture(); } else if (!m_shared_img->m_texId) { m_shared_img->generateGLTexture(); } m_texId = m_shared_img->m_texId; m_surface = m_shared_img->m_surface; m_compressed = m_shared_img->m_compressed; generateGLSharedTexture(m_shared_img, m_subimagerect); } void GLImage::copySubimage(uint32_t xoffset, uint32_t yoffset, const ImagePtr& img) { Image::copySubimage(xoffset, yoffset, img); if(m_texId) { static_cast(RenderBackend::instance())->bindTexture(m_texId); glTexSubImage2D(GL_TEXTURE_2D, 0, xoffset, yoffset, img->getWidth(), img->getHeight(), GL_RGBA, GL_UNSIGNED_BYTE, img->getSurface()->pixels); } } void GLImage::load() { if (m_shared) { // check atlas image // if it does not exist, it is generated. if (!ImageManager::instance()->exists(m_atlas_name)) { ImagePtr newAtlas = ImageManager::instance()->create(m_atlas_name); GLImage* img = static_cast(newAtlas.get()); m_atlas_img = newAtlas; m_shared_img = img; } validateShared(); // check if texture ids and surfaces are identical if (m_shared_img->m_surface != m_surface || m_texId != m_shared_img->m_texId) { m_texId = m_shared_img->m_texId; m_surface = m_shared_img->m_surface; m_compressed = m_shared_img->m_compressed; if (m_texId) { generateGLSharedTexture(m_shared_img, m_subimagerect); } } m_state = IResource::RES_LOADED; } else { Image::load(); } } void GLImage::free() { // save the image offsets int32_t xshift = m_xshift; int32_t yshift = m_yshift; setSurface(NULL); m_xshift = xshift; m_yshift = yshift; m_state = IResource::RES_NOT_LOADED; } GLuint GLImage::getTexId() const { return m_texId; } const GLfloat* GLImage::getTexCoords() const { return m_tex_coords; } } fifengine-0.4.1/engine/core/video/opengl/glimage.h000066400000000000000000000117631304641216200220220ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_VIDEO_RENDERBACKENDS_OPENGL_GLIMAGE_H #define FIFE_VIDEO_RENDERBACKENDS_OPENGL_GLIMAGE_H // Standard C++ library includes #include // Platform specific includes #include "util/base/fife_stdint.h" // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "video/image.h" #include "fife_opengl.h" namespace FIFE { /** Implements an Image using OpenGL. * * This class contains a texture handle bound to the data given to the constructor; * it draws a textured Quad to the screen. * * @see Image * @note Width and height are not limited to powers of two; non-power of two images will be converted internally if they are not supported by the hardware (GLEE_ARB_texture_non_power_of_two). * @todo Check the correctness of the generateTexture function on big endian systems (ppc) */ class GLImage : public Image { public: GLImage(IResourceLoader* loader = 0); GLImage(const std::string& name, IResourceLoader* loader = 0); GLImage(SDL_Surface* surface); GLImage(const std::string& name, SDL_Surface* surface); GLImage(const uint8_t* data, uint32_t width, uint32_t height); GLImage(const std::string& name, const uint8_t* data, uint32_t width, uint32_t height); virtual ~GLImage(); virtual void invalidate(); virtual void setSurface(SDL_Surface* surface); virtual void render(const Rect& rect, uint8_t alpha = 255, uint8_t const* rgb = 0); virtual void render(const Rect& rect, const ImagePtr& overlay, uint8_t alpha = 255, uint8_t const* rgb = 0); virtual void renderZ(const Rect& rect, float vertexZ, uint8_t alpha = 255, uint8_t const* rgb = 0); virtual void renderZ(const Rect& rect, float vertexZ, const ImagePtr& overlay, uint8_t alpha = 255, uint8_t const* rgb = 0); virtual void useSharedImage(const ImagePtr& shared, const Rect& region); virtual void forceLoadInternal(); virtual void copySubimage(uint32_t xoffset, uint32_t yoffset, const ImagePtr& img); virtual void load(); virtual void free(); GLuint getTexId() const; const GLfloat* getTexCoords() const; bool isCompressed() const { return m_compressed; } void setCompressed(bool compressed) { m_compressed = compressed; } private: // texture coords to use GLfloat m_tex_coords[4]; // Was this image compressed by OpenGL driver during loading ? bool m_compressed; // [0] [2] ->(x) // [1] +------+ // | | // | | // [3] +------+ // // | // v // (y) // To map these indices with previous one: // [0]:=[1]:=0.0f, [2]:=m_col_tex_coords, [3]:=m_row_tex_coords /** Holds texture ids that are used to access textures in GL rendering context */ GLuint m_texId; /** Frees allocated memory and calls resetGlImage */ void cleanup(); /** Resets GLImage variables */ void resetGlimage(); /** Generates the GL Texture for use when rendering. */ void generateGLTexture(); void generateGLSharedTexture(const GLImage* shared, const Rect& region); void validateShared(); uint32_t m_chunk_size_w; uint32_t m_chunk_size_h; SDL_Color m_colorkey; GLImage* m_shared_img; // Holds Atlas ImagePtr if this is a shared image ImagePtr m_atlas_img; // Holds Atlas Name if this is a shared image std::string m_atlas_name; }; } #endif /* vim: set noexpandtab: set shiftwidth=2: set tabstop=2: */ fifengine-0.4.1/engine/core/video/opengl/renderbackendopengl.cpp000066400000000000000000002114541304641216200247430ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // Platform specific includes // 3rd party library includes #include // FIFE includes #include "util/base/exception.h" #include "util/log/logger.h" #include "video/devicecaps.h" #include "glimage.h" #include "renderbackendopengl.h" #include "SDL_image.h" namespace FIFE { /** Logger to use for this source file. * @relates Logger */ static Logger _log(LM_VIDEO); class RenderBackendOpenGL::RenderObject { public: RenderObject(GLenum m, uint16_t s, uint32_t t1=0, uint32_t t2=0): mode(m), size(s), texture_id(t1), overlay_id(t2), src(4), dst(5), light(true), stencil_test(false), color(true), overlay_type(OVERLAY_TYPE_NONE), stencil_ref(0), stencil_op(0), stencil_func(0) {} GLenum mode; uint16_t size; uint32_t texture_id; uint32_t overlay_id; int32_t src; int32_t dst; bool light; bool stencil_test; bool color; OverlayType overlay_type; uint8_t stencil_ref; GLenum stencil_op; GLenum stencil_func; uint8_t rgba[4]; }; RenderBackendOpenGL::RenderBackendOpenGL(const SDL_Color& colorkey) : RenderBackend(colorkey), m_maskOverlay(0){ m_state.tex_enabled[0] = false; m_state.tex_enabled[1] = false; m_state.tex_enabled[2] = false; m_state.tex_enabled[3] = false; m_state.texture[0] = 0; m_state.texture[1] = 0; m_state.texture[2] = 0; m_state.texture[3] = 0; m_state.active_tex = 0; m_state.alpha_test = 0.0; m_state.vertex_pointer_size = 2; m_state.color_pointer = 0; m_state.tex_pointer[0] = 0; m_state.tex_pointer[1] = 0; m_state.tex_pointer[2] = 0; m_state.tex_pointer[3] = 0; m_state.vertex_pointer = 0; m_state.sten_enabled = false; m_state.sten_ref = 0; m_state.sten_buf = 0; m_state.sten_op = 0; m_state.sten_func = 0; m_state.lightmodel = 0; m_state.light_enabled = false; m_state.env_color[0] = 0; m_state.env_color[1] = 0; m_state.env_color[2] = 0; m_state.env_color[3] = 0; m_state.blend_src = GL_SRC_ALPHA; m_state.blend_dst = GL_ONE_MINUS_SRC_ALPHA; m_state.alpha_enabled = true; m_state.scissor_test = true; m_state.depth_enabled = true; m_state.color_enabled = true; } RenderBackendOpenGL::~RenderBackendOpenGL() { glDeleteTextures(1, &m_maskOverlay); if(GLEE_EXT_framebuffer_object && m_useframebuffer) { glDeleteFramebuffers(1, &m_fbo_id); } SDL_GL_DeleteContext(m_context); SDL_DestroyWindow(m_window); deinit(); } const std::string& RenderBackendOpenGL::getName() const { static std::string backend_name = "OpenGL"; return backend_name; } void RenderBackendOpenGL::init(const std::string& driver) { Uint32 flags = SDL_INIT_VIDEO; if (SDL_InitSubSystem(flags) < 0) { throw SDLException(SDL_GetError()); } if (driver != "") { if (SDL_VideoInit(driver.c_str()) < 0) { throw SDLException(SDL_GetError()); } } // defines buffer sizes SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 32); //SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 32); // sync swaping with refresh rate if VSync is enabled SDL_GL_SetSwapInterval(static_cast(m_vSync)); } void RenderBackendOpenGL::clearBackBuffer() { disableScissorTest(); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); enableScissorTest(); } void RenderBackendOpenGL::createMainScreen(const ScreenMode& mode, const std::string& title, const std::string& icon){ setScreenMode(mode); if (m_window) { if (icon != "") { SDL_Surface *img = IMG_Load(icon.c_str()); if (img != NULL) { SDL_SetWindowIcon(m_window, img); SDL_FreeSurface(img); } } SDL_SetWindowTitle(m_window, title.c_str()); } } void RenderBackendOpenGL::setScreenMode(const ScreenMode& mode) { uint16_t width = mode.getWidth(); uint16_t height = mode.getHeight(); uint16_t bitsPerPixel = mode.getBPP(); uint32_t flags = mode.getSDLFlags(); // in case of recreating if (m_window) { SDL_GL_DeleteContext(m_context); SDL_DestroyWindow(m_window); m_screen = NULL; } // create window uint8_t displayIndex = mode.getDisplay(); if (mode.isFullScreen()) { m_window = SDL_CreateWindow("", SDL_WINDOWPOS_UNDEFINED_DISPLAY(displayIndex), SDL_WINDOWPOS_UNDEFINED_DISPLAY(displayIndex), width, height, flags | SDL_WINDOW_SHOWN); } else { m_window = SDL_CreateWindow("", SDL_WINDOWPOS_CENTERED_DISPLAY(displayIndex), SDL_WINDOWPOS_CENTERED_DISPLAY(displayIndex), width, height, flags | SDL_WINDOW_SHOWN); } if (!m_window) { throw SDLException(SDL_GetError()); } // make sure the window have the right settings SDL_DisplayMode displayMode; displayMode.format = mode.getFormat(); displayMode.w = width; displayMode.h = height; displayMode.refresh_rate = mode.getRefreshRate(); if (SDL_SetWindowDisplayMode(m_window, &displayMode) != 0) { throw SDLException(SDL_GetError()); } // create render context m_context = SDL_GL_CreateContext(m_window); // set the window surface as main surface, not really needed anymore m_screen = SDL_GetWindowSurface(m_window); m_target = m_screen; if (!m_screen) { throw SDLException(SDL_GetError()); } FL_LOG(_log, LMsg("RenderBackendOpenGL") << "Videomode " << width << "x" << height << " at " << int32_t(bitsPerPixel) << " bpp with " << displayMode.refresh_rate << " Hz"); // this is needed, otherwise we would have screen pixel formats which will not work with // our texture generation. 32 bit surfaces to BitsPerPixel texturen. m_rgba_format = *(m_screen->format); if (bitsPerPixel != 16) { m_rgba_format.format = SDL_PIXELFORMAT_RGBA8888; m_rgba_format.BitsPerPixel = 32; } else { m_rgba_format.format = SDL_PIXELFORMAT_RGBA4444; m_rgba_format.BitsPerPixel = 16; } m_rgba_format.Rmask = RMASK; m_rgba_format.Gmask = GMASK; m_rgba_format.Bmask = BMASK; m_rgba_format.Amask = AMASK; //update the screen mode with the actual flags used m_screenMode = mode; glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0, width, height, 0, -100, 100); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glEnable(GL_CULL_FACE); glFrontFace(GL_CCW); glCullFace(GL_BACK); glPixelStorei(GL_PACK_ALIGNMENT, 1); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClearDepth(1.0f); glClearStencil(0); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); setAlphaTest(m_alphaValue); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); glEnable(GL_SCISSOR_TEST); glEnableClientState(GL_COLOR_ARRAY); glEnableClientState(GL_VERTEX_ARRAY); prepareForOverlays(); glPointSize(1.0); glLineWidth(1.0); if(GLEE_EXT_framebuffer_object && m_useframebuffer) { glGenFramebuffers(1, &m_fbo_id); } if (m_textureFilter == TEXTURE_FILTER_ANISOTROPIC) { if (GLEE_EXT_texture_filter_anisotropic) { GLint largest = 0; glGetIntegerv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &largest); m_maxAnisotropy = static_cast(largest); } else { // if not available use trilinear filter m_maxAnisotropy = 0; m_textureFilter = TEXTURE_FILTER_TRILINEAR; } } // currently unused, 1000 objects x 400 textures x 4 renderDataZ //m_renderZ_datas.resize(1600000); } void RenderBackendOpenGL::startFrame() { RenderBackend::startFrame(); } void RenderBackendOpenGL::endFrame() { if (m_window) { SDL_GL_SwapWindow(m_window); } RenderBackend::endFrame(); } Image* RenderBackendOpenGL::createImage(IResourceLoader* loader) { return new GLImage(loader); } Image* RenderBackendOpenGL::createImage(const std::string& name, IResourceLoader* loader) { return new GLImage(name, loader); } Image* RenderBackendOpenGL::createImage(SDL_Surface* surface) { // Given an abritary surface, we must convert it to the format GLImage will understand. // It's easiest to let SDL do this for us. // Uh. Gotta love this :-) // Check for colorkey too? // Leave out the loss/shift checks? if (32 == surface->format->BitsPerPixel && m_rgba_format.Rmask == surface->format->Rmask && m_rgba_format.Gmask == surface->format->Gmask && m_rgba_format.Bmask == surface->format->Bmask && m_rgba_format.Amask == surface->format->Amask && m_rgba_format.Rshift == surface->format->Rshift && m_rgba_format.Gshift == surface->format->Gshift && m_rgba_format.Bshift == surface->format->Bshift && m_rgba_format.Ashift == surface->format->Ashift && m_rgba_format.Rloss == surface->format->Rloss && m_rgba_format.Gloss == surface->format->Gloss && m_rgba_format.Bloss == surface->format->Bloss && m_rgba_format.Aloss == surface->format->Aloss) { return new GLImage(surface); } uint8_t bpp = m_rgba_format.BitsPerPixel; m_rgba_format.BitsPerPixel = 32; SDL_Surface* conv = SDL_ConvertSurface(surface, &m_rgba_format, 0); m_rgba_format.BitsPerPixel = bpp; GLImage* image = new GLImage(conv); SDL_FreeSurface(surface); return image; } Image* RenderBackendOpenGL::createImage(const std::string& name, SDL_Surface* surface) { // Given an abritary surface, we must convert it to the format GLImage will understand. // It's easiest to let SDL do this for us. // Uh. Gotta love this :-) // Check for colorkey too? // Leave out the loss/shift checks? if (32 == surface->format->BitsPerPixel && m_rgba_format.Rmask == surface->format->Rmask && m_rgba_format.Gmask == surface->format->Gmask && m_rgba_format.Bmask == surface->format->Bmask && m_rgba_format.Amask == surface->format->Amask && m_rgba_format.Rshift == surface->format->Rshift && m_rgba_format.Gshift == surface->format->Gshift && m_rgba_format.Bshift == surface->format->Bshift && m_rgba_format.Ashift == surface->format->Ashift && m_rgba_format.Rloss == surface->format->Rloss && m_rgba_format.Gloss == surface->format->Gloss && m_rgba_format.Bloss == surface->format->Bloss && m_rgba_format.Aloss == surface->format->Aloss) { return new GLImage(name, surface); } uint8_t bpp = m_rgba_format.BitsPerPixel; m_rgba_format.BitsPerPixel = 32; SDL_Surface* conv = SDL_ConvertSurface(surface, &m_rgba_format, 0); m_rgba_format.BitsPerPixel = bpp; GLImage* image = new GLImage(name, conv); SDL_FreeSurface(surface); return image; } Image* RenderBackendOpenGL::createImage(const uint8_t* data, uint32_t width, uint32_t height) { return new GLImage(data, width, height); } Image* RenderBackendOpenGL::createImage(const std::string& name, const uint8_t* data, uint32_t width, uint32_t height) { return new GLImage(name, data, width, height); } void RenderBackendOpenGL::setLightingModel(uint32_t lighting) { if (m_state.lightmodel != lighting) { if (m_state.lightmodel != 0) { disableLighting(); glDisable(GL_COLOR_MATERIAL); } else if (lighting != 0) { enableLighting(); glEnable(GL_LIGHT0); glColorMaterial(GL_FRONT, GL_DIFFUSE); glEnable(GL_COLOR_MATERIAL); } m_state.lightmodel = lighting; } } uint32_t RenderBackendOpenGL::getLightingModel() const { return m_state.lightmodel; } void RenderBackendOpenGL::enableTextures(uint32_t texUnit) { if(m_state.tex_enabled[texUnit] == false) { if(m_state.active_tex != texUnit) { m_state.active_tex = texUnit; glActiveTexture(GL_TEXTURE0 + texUnit); } if (m_state.active_client_tex != texUnit) { m_state.active_client_tex = texUnit; glClientActiveTexture(GL_TEXTURE0 + texUnit); } m_state.tex_enabled[texUnit] = true; glEnable(GL_TEXTURE_2D); glEnableClientState(GL_TEXTURE_COORD_ARRAY); } } void RenderBackendOpenGL::disableTextures(uint32_t texUnit) { if(m_state.tex_enabled[texUnit] == true) { if(m_state.active_tex != texUnit) { m_state.active_tex = texUnit; glActiveTexture(GL_TEXTURE0 + texUnit); } if (m_state.active_client_tex != texUnit) { m_state.active_client_tex = texUnit; glClientActiveTexture(GL_TEXTURE0 + texUnit); } m_state.tex_enabled[texUnit] = false; glDisable(GL_TEXTURE_2D); glDisableClientState(GL_TEXTURE_COORD_ARRAY); } } void RenderBackendOpenGL::bindTexture(uint32_t texUnit, GLuint texId) { enableTextures(texUnit); if(m_state.texture[texUnit] != texId) { if(m_state.active_tex != texUnit) { m_state.active_tex = texUnit; glActiveTexture(GL_TEXTURE0 + texUnit); } if (m_state.active_client_tex != texUnit) { m_state.active_client_tex = texUnit; glClientActiveTexture(GL_TEXTURE0 + texUnit); } m_state.texture[texUnit] = texId; glBindTexture(GL_TEXTURE_2D, texId); } } void RenderBackendOpenGL::bindTexture(GLuint texId) { if(m_state.texture[m_state.active_tex] != texId) { m_state.texture[m_state.active_tex] = texId; glBindTexture(GL_TEXTURE_2D, texId); } } void RenderBackendOpenGL::enableLighting() { if (m_state.lightmodel != 0 && !m_state.light_enabled) { glEnable(GL_LIGHTING); m_state.light_enabled = true; } } void RenderBackendOpenGL::disableLighting() { if (m_state.lightmodel != 0 && m_state.light_enabled) { glDisable(GL_LIGHTING); m_state.light_enabled = false; } } void RenderBackendOpenGL::setLighting(float red, float green, float blue) { if (m_state.lightmodel != 0) { GLfloat lightDiffuse[] = {red, green, blue, 1.0f}; glLightfv(GL_LIGHT0, GL_DIFFUSE, lightDiffuse); } } void RenderBackendOpenGL::resetLighting() { if (m_state.lightmodel != 0) { setLighting(1.0, 1.0, 1.0); } } void RenderBackendOpenGL::enableStencilTest() { if (!m_state.sten_enabled) { glEnable(GL_STENCIL_TEST); m_state.sten_enabled = true; } } void RenderBackendOpenGL::disableStencilTest() { if (m_state.sten_enabled) { glDisable(GL_STENCIL_TEST); m_state.sten_enabled = false; } } void RenderBackendOpenGL::setStencilTest(uint8_t stencil_ref, GLenum stencil_op, GLenum stencil_func) { enableStencilTest(); if(m_state.sten_op != stencil_op) { m_state.sten_op = stencil_op; glStencilOp(GL_KEEP, GL_KEEP, m_state.sten_op); } if(m_state.sten_ref != stencil_ref || m_state.sten_func != stencil_func) { m_state.sten_ref = stencil_ref; m_state.sten_func = stencil_func; glStencilFunc(m_state.sten_func, stencil_ref, 0xff); } } void RenderBackendOpenGL::resetStencilBuffer(uint8_t buffer) { if (buffer != m_state.sten_buf) { m_state.sten_buf = buffer; glClearStencil(buffer); } disableScissorTest(); glClear(GL_STENCIL_BUFFER_BIT); enableScissorTest(); } uint8_t RenderBackendOpenGL::getStencilRef() const { return m_state.sten_ref; } void RenderBackendOpenGL::enableAlphaTest() { if (!m_state.alpha_enabled) { glEnable(GL_ALPHA_TEST); m_state.alpha_enabled = true; } } void RenderBackendOpenGL::disableAlphaTest() { if (m_state.alpha_enabled) { glDisable(GL_ALPHA_TEST); m_state.alpha_enabled = false; } } void RenderBackendOpenGL::setAlphaTest(float ref_alpha) { enableAlphaTest(); if (!Mathf::Equal(m_state.alpha_test, ref_alpha)) { m_state.alpha_test = ref_alpha; glAlphaFunc(GL_GREATER, ref_alpha); } } void RenderBackendOpenGL::enableDepthTest() { if (!m_state.depth_enabled) { glEnable(GL_DEPTH_TEST); m_state.depth_enabled = true; } } void RenderBackendOpenGL::disableDepthTest() { if (m_state.depth_enabled) { glDisable(GL_DEPTH_TEST); m_state.depth_enabled = false; } } void RenderBackendOpenGL::enableColorArray() { if (!m_state.color_enabled) { glEnableClientState(GL_COLOR_ARRAY); m_state.color_enabled = true; } } void RenderBackendOpenGL::disableColorArray() { if (m_state.color_enabled) { glDisableClientState(GL_COLOR_ARRAY); glColor4ub(255,255,255,255); m_state.color_enabled = false; } } void RenderBackendOpenGL::setEnvironmentalColor(uint32_t texUnit, const uint8_t* rgba) { if (memcmp(m_state.env_color, rgba, sizeof(uint8_t) * 4) || m_state.active_tex != texUnit) { memcpy(m_state.env_color, rgba, sizeof(uint8_t) * 4); GLfloat rgbaf[4] = { static_cast(m_state.env_color[0]) / 255.0f, static_cast(m_state.env_color[1]) / 255.0f, static_cast(m_state.env_color[2]) / 255.0f, static_cast(m_state.env_color[3]) / 255.0f}; if(m_state.active_tex != texUnit) { m_state.active_tex = texUnit; glActiveTexture(GL_TEXTURE0 + texUnit); m_state.active_client_tex = texUnit; glClientActiveTexture(GL_TEXTURE0 + texUnit); } glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, rgbaf); } } void RenderBackendOpenGL::setVertexPointer(GLint size, GLsizei stride, const GLvoid* ptr) { if(m_state.vertex_pointer != ptr || m_state.vertex_pointer_size != size) { m_state.vertex_pointer = ptr; m_state.vertex_pointer_size = size; glVertexPointer(size, GL_FLOAT, stride, ptr); } } void RenderBackendOpenGL::setColorPointer(GLsizei stride, const GLvoid* ptr) { if(m_state.color_pointer != ptr) { m_state.color_pointer = ptr; glColorPointer(4, GL_UNSIGNED_BYTE, stride, ptr); } } void RenderBackendOpenGL::setTexCoordPointer(uint32_t texUnit, GLsizei stride, const GLvoid* ptr) { if(m_state.tex_pointer[texUnit] != ptr) { if(m_state.active_tex != texUnit) { m_state.active_tex = texUnit; glActiveTexture(GL_TEXTURE0 + texUnit); } if (m_state.active_client_tex != texUnit) { m_state.active_client_tex = texUnit; glClientActiveTexture(GL_TEXTURE0 + texUnit); } m_state.tex_pointer[texUnit] = ptr; glTexCoordPointer(2, GL_FLOAT, stride, ptr); } } void RenderBackendOpenGL::enableScissorTest() { if(m_state.scissor_test == false) { m_state.scissor_test = true; glEnable(GL_SCISSOR_TEST); } } void RenderBackendOpenGL::disableScissorTest() { if(m_state.scissor_test == true) { m_state.scissor_test = false; glDisable(GL_SCISSOR_TEST); } } void RenderBackendOpenGL::changeBlending(int32_t src, int32_t dst) { GLenum src_fact; GLenum dst_fact; switch(src) { case 0 : src_fact = GL_ZERO; break; case 1 : src_fact = GL_ONE; break; case 2 : src_fact = GL_DST_COLOR; break; case 3 : src_fact = GL_ONE_MINUS_DST_COLOR; break; case 4 : src_fact = GL_SRC_ALPHA; break; case 5 : src_fact = GL_ONE_MINUS_SRC_ALPHA; break; case 6 : src_fact = GL_DST_ALPHA; break; case 7 : src_fact = GL_ONE_MINUS_DST_ALPHA; break; default : src_fact = GL_DST_COLOR; break; } switch(dst) { case 0 : dst_fact = GL_ZERO; break; case 1 : dst_fact = GL_ONE; break; case 2 : dst_fact = GL_SRC_COLOR; break; case 3 : dst_fact = GL_ONE_MINUS_SRC_COLOR; break; case 4 : dst_fact = GL_SRC_ALPHA; break; case 5 : dst_fact = GL_ONE_MINUS_SRC_ALPHA; break; case 6 : dst_fact = GL_DST_ALPHA; break; case 7 : dst_fact = GL_ONE_MINUS_DST_ALPHA; break; default : dst_fact = GL_SRC_ALPHA; break; } if (m_state.blend_src != src_fact || m_state.blend_dst != dst_fact) { m_state.blend_src = src_fact; m_state.blend_dst = dst_fact; glBlendFunc(src_fact, dst_fact); } } void RenderBackendOpenGL::changeRenderInfos(RenderDataType type, uint16_t elements, int32_t src, int32_t dst, bool light, bool stentest, uint8_t stenref, GLConstants stenop, GLConstants stenfunc, OverlayType otype) { uint16_t count = 0; switch (type) { case RENDER_DATA_WITHOUT_Z: { uint32_t size = m_renderObjects.size(); while (count != elements) { ++count; RenderObject& r = m_renderObjects.at(size-count); r.src = src; r.dst = dst; r.light = light; r.overlay_type = otype; if (stentest) { r.stencil_test = stentest; r.stencil_ref = stenref; r.stencil_op = stenop; r.stencil_func = stenfunc; } } } break; case RENDER_DATA_TEXTURE_Z: { // not needed currently } break; case RENDER_DATA_TEXCOLOR_Z : { // not needed currently } break; case RENDER_DATA_MULTITEXTURE_Z: { uint32_t size = m_renderMultitextureObjectsZ.size(); while (count != elements) { ++count; RenderObject& r = m_renderMultitextureObjectsZ.at(size-count); // only overlay_type is important r.src = src; r.dst = dst; r.light = light; r.overlay_type = otype; if (stentest) { r.stencil_test = stentest; r.stencil_ref = stenref; r.stencil_op = stenop; r.stencil_func = stenfunc; } } } break; default: { // nothing } break; } } void RenderBackendOpenGL::renderWithoutZ() { // bools to indicate changes bool type = false; bool texture = false; bool blending = false; bool light = false; bool stencil = false; bool color = false; bool mt = false; bool render = false; // render mode GLenum mode = GL_QUADS; // texture id uint32_t texture_id = 0; uint32_t texture_id2 = 0; // src blending mode int32_t src = 4; // dst blending mode int32_t dst = 5; // overlay type OverlayType overlay_type = OVERLAY_TYPE_NONE; // overlay color uint8_t rgba[4] = {0}; // array indices int32_t indexP = 0; int32_t indexT = 0; int32_t indexTC = 0; int32_t index2TC = 0; // elements to render uint32_t elementsP = 0; uint32_t elementsT = 0; uint32_t elementsTC = 0; uint32_t elements2TC = 0; int32_t* currentIndex = 0; uint32_t* currentElements = 0; //stride const uint32_t strideP = sizeof(renderDataP); const uint32_t strideT = sizeof(renderDataT); const uint32_t strideTC = sizeof(renderDataTC); const uint32_t stride2TC = sizeof(renderData2TC); // disable alpha and depth tests disableAlphaTest(); disableDepthTest(); if (m_renderObjects[0].overlay_type == OVERLAY_TYPE_NONE) { // texture without color/alpha if (!m_renderObjects[0].color) { // set pointer disableColorArray(); setVertexPointer(2, strideT, &m_renderTextureDatas[0].vertex); setTexCoordPointer(0, strideT, &m_renderTextureDatas[0].texel); currentIndex = &indexT; currentElements = &elementsT; // texture with color/alpha } else if (m_renderObjects[0].texture_id != 0){ // set pointer enableColorArray(); setVertexPointer(2, strideTC, &m_renderTextureColorDatas[0].vertex); setTexCoordPointer(0, strideTC, &m_renderTextureColorDatas[0].texel); setColorPointer(strideTC, &m_renderTextureColorDatas[0].color); currentIndex = &indexTC; currentElements = &elementsTC; // primitive } else { // set pointer enableColorArray(); setVertexPointer(2, strideP, &m_renderPrimitiveDatas[0].vertex); setColorPointer(strideP, &m_renderPrimitiveDatas[0].color); currentIndex = &indexP; currentElements = &elementsP; } // multitexture overlay } else { // set pointer setVertexPointer(2, stride2TC, &m_renderMultitextureDatas[0].vertex); setColorPointer(stride2TC, &m_renderMultitextureDatas[0].color); setTexCoordPointer(0, stride2TC, &m_renderMultitextureDatas[0].texel); currentIndex = &index2TC; currentElements = &elements2TC; } for(std::vector::iterator ir = m_renderObjects.begin(); ir != m_renderObjects.end(); ++ir) { RenderObject& ro = (*ir); // first we look for changes if (ro.mode != mode) { type = true; render = true; } if (ro.texture_id != texture_id) { texture = true; render = true; } if (ro.color != m_state.color_enabled) { color = true; render = true; } if (ro.overlay_type != overlay_type || (ro.overlay_type != OVERLAY_TYPE_NONE && (memcmp(rgba, ro.rgba, sizeof(uint8_t) * 4) || ro.overlay_id != texture_id2))) { mt = true; render = true; } if (m_state.lightmodel) { if (ro.src != src || ro.dst != dst) { blending = true; render = true; } if (ro.light != m_state.light_enabled) { light = true; render = true; } if (ro.stencil_test != m_state.sten_enabled) { stencil = true; render = true; } else if (ro.stencil_test) { if (ro.stencil_ref != m_state.sten_ref || ro.stencil_op != m_state.sten_op || ro.stencil_func != m_state.sten_func) { stencil = true; render = true; } } } // if changes then we render all previously elements if (render) { if (*currentElements > 0) { //render glDrawArrays(mode, *currentIndex, *currentElements); *currentIndex += *currentElements; } // switch mode if (type) { mode = ro.mode; type = false; } // switch coloring if (color) { if (ro.color && !m_state.color_enabled) { enableColorArray(); if (ro.overlay_type == OVERLAY_TYPE_NONE) { if (ro.texture_id != 0) { setVertexPointer(2, strideTC, &m_renderTextureColorDatas[0].vertex); setTexCoordPointer(0, strideTC, &m_renderTextureColorDatas[0].texel); setColorPointer(strideTC, &m_renderTextureColorDatas[0].color); currentElements = &elementsTC; currentIndex = &indexTC; } else { setVertexPointer(2, strideP, &m_renderPrimitiveDatas[0].vertex); setColorPointer(strideP, &m_renderPrimitiveDatas[0].color); currentElements = &elementsP; currentIndex = &indexP; } } } else if (!ro.color && m_state.color_enabled) { disableColorArray(); if (ro.overlay_type == OVERLAY_TYPE_NONE) { setVertexPointer(2, strideT, &m_renderTextureDatas[0].vertex); setTexCoordPointer(0, strideT, &m_renderTextureDatas[0].texel); currentElements = &elementsT; currentIndex = &indexT; } } color = false; } // multitexturing if (mt) { switch (ro.overlay_type) { case OVERLAY_TYPE_NONE: disableTextures(3); disableTextures(2); disableTextures(1); if (ro.texture_id != 0) { enableTextures(0); if (m_state.color_enabled) { setVertexPointer(2, strideTC, &m_renderTextureColorDatas[0].vertex); setTexCoordPointer(0, strideTC, &m_renderTextureColorDatas[0].texel); setColorPointer(strideTC, &m_renderTextureColorDatas[0].color); currentElements = &elementsTC; currentIndex = &indexTC; } else { setVertexPointer(2, strideT, &m_renderTextureDatas[0].vertex); setTexCoordPointer(0, strideT, &m_renderTextureDatas[0].texel); currentIndex = &indexT; currentElements = &elementsT; } } else { setVertexPointer(2, strideP, &m_renderPrimitiveDatas[0].vertex); setColorPointer(strideP, &m_renderPrimitiveDatas[0].color); currentElements = &elementsP; currentIndex = &indexP; } texture_id2 = 0; break; case OVERLAY_TYPE_COLOR: disableTextures(3); disableTextures(2); bindTexture(1, m_maskOverlay); setEnvironmentalColor(1, ro.rgba); enableTextures(0); // set pointer setVertexPointer(2, stride2TC, &m_renderMultitextureDatas[0].vertex); setColorPointer(stride2TC, &m_renderMultitextureDatas[0].color); setTexCoordPointer(1, stride2TC, &m_renderMultitextureDatas[0].texel2); setTexCoordPointer(0, stride2TC, &m_renderMultitextureDatas[0].texel); texture_id2 = m_maskOverlay; currentElements = &elements2TC; currentIndex = &index2TC; break; case OVERLAY_TYPE_COLOR_AND_TEXTURE: disableTextures(3); disableTextures(1); bindTexture(2, ro.overlay_id); setEnvironmentalColor(2, ro.rgba); enableTextures(0); // set pointer setVertexPointer(2, stride2TC, &m_renderMultitextureDatas[0].vertex); setColorPointer(stride2TC, &m_renderMultitextureDatas[0].color); setTexCoordPointer(2, stride2TC, &m_renderMultitextureDatas[0].texel2); setTexCoordPointer(0, stride2TC, &m_renderMultitextureDatas[0].texel); texture_id2 = ro.overlay_id; currentElements = &elements2TC; currentIndex = &index2TC; break; case OVERLAY_TYPE_TEXTURES_AND_FACTOR: disableTextures(2); disableTextures(1); bindTexture(3, ro.overlay_id); setEnvironmentalColor(3, ro.rgba); enableTextures(0); // set pointer setVertexPointer(2, stride2TC, &m_renderMultitextureDatas[0].vertex); setColorPointer(stride2TC, &m_renderMultitextureDatas[0].color); setTexCoordPointer(3, stride2TC, &m_renderMultitextureDatas[0].texel2); setTexCoordPointer(0, stride2TC, &m_renderMultitextureDatas[0].texel); texture_id2 = ro.overlay_id; currentElements = &elements2TC; currentIndex = &index2TC; break; } memcpy(rgba, ro.rgba, sizeof(uint8_t) * 4); overlay_type = ro.overlay_type; mt = false; } // switch texturing if (texture) { if (ro.texture_id != 0) { bindTexture(0, ro.texture_id); texture_id = ro.texture_id; if (ro.overlay_type == OVERLAY_TYPE_NONE) { if (m_state.color_enabled) { setVertexPointer(2, strideTC, &m_renderTextureColorDatas[0].vertex); setTexCoordPointer(0, strideTC, &m_renderTextureColorDatas[0].texel); setColorPointer(strideTC, &m_renderTextureColorDatas[0].color); currentElements = &elementsTC; currentIndex = &indexTC; } else { setVertexPointer(2, strideT, &m_renderTextureDatas[0].vertex); setTexCoordPointer(0, strideT, &m_renderTextureDatas[0].texel); currentElements = &elementsT; currentIndex = &indexT; } } } else { disableTextures(0); texture_id = 0; if (ro.overlay_type == OVERLAY_TYPE_NONE) { setVertexPointer(2, strideP, &m_renderPrimitiveDatas[0].vertex); setColorPointer(strideP, &m_renderPrimitiveDatas[0].color); currentElements = &elementsP; currentIndex = &indexP; } } texture = false; } // set element to current size *currentElements = ro.size; // if lighting is enabled we have to consider a few more values if (m_state.lightmodel) { // change blending if (blending) { src = ro.src; dst = ro.dst; changeBlending(ro.src, ro.dst); blending = false; } // change light if (light) { if (ro.light && !m_state.light_enabled) { enableLighting(); } else if (!ro.light && m_state.light_enabled) { disableLighting(); } light = false; } // change stencil if (stencil) { if (ro.stencil_test) { setStencilTest(ro.stencil_ref, ro.stencil_op, ro.stencil_func); setAlphaTest(0.0); } else { disableAlphaTest(); disableStencilTest(); } stencil = false; } } render = false; } else { // else add the element *currentElements += ro.size; } } // render glDrawArrays(mode, *currentIndex, *currentElements); // reset all states if (overlay_type != OVERLAY_TYPE_NONE) { disableTextures(3); disableTextures(2); disableTextures(1); } disableTextures(0); enableColorArray(); if (m_state.lightmodel != 0) { changeBlending(4, 5); disableLighting(); disableStencilTest(); disableAlphaTest(); } m_renderPrimitiveDatas.clear(); m_renderTextureDatas.clear(); m_renderTextureColorDatas.clear(); m_renderMultitextureDatas.clear(); m_renderObjects.clear(); } void RenderBackendOpenGL::renderWithZ() { // stride const uint32_t stride = sizeof(renderDataZ); // set pointer setVertexPointer(3, stride, &m_renderTextureDatasZ[0].vertex); setTexCoordPointer(0, stride, &m_renderTextureDatasZ[0].texel); // array index int32_t index = 0; // elements to render uint32_t elements = 0; // texture id uint32_t texture_id = 0; int32_t* currentIndex = &index; uint32_t* currentElements = &elements; enableAlphaTest(); enableDepthTest(); enableTextures(0); enableLighting(); disableColorArray(); for(std::vector::iterator ir = m_renderTextureObjectsZ.begin(); ir != m_renderTextureObjectsZ.end(); ++ir) { RenderZObject& ro = (*ir); // if changes then we render all previously elements if (ro.texture_id != texture_id) { if (*currentElements > 0) { //render glDrawArrays(GL_QUADS, *currentIndex, *currentElements); *currentIndex += *currentElements; } if (ro.texture_id != 0) { bindTexture(0, ro.texture_id); texture_id = ro.texture_id; } else { disableTextures(0); texture_id = 0; } // set element to current size *currentElements = 4; } else { // else add the element *currentElements += 4; } } // render glDrawArrays(GL_QUADS, *currentIndex, *currentElements); //reset all states disableLighting(); disableTextures(0); disableAlphaTest(); disableDepthTest(); enableColorArray(); m_renderTextureDatasZ.clear(); m_renderTextureObjectsZ.clear(); } void RenderBackendOpenGL::renderWithZTest() { // stride const uint32_t stride = sizeof(renderDataZ); // set pointer setVertexPointer(3, stride, &m_renderZ_datas[0].vertex); setTexCoordPointer(0, stride, &m_renderZ_datas[0].texel); enableAlphaTest(); enableDepthTest(); enableTextures(0); enableLighting(); disableColorArray(); std::vector::iterator iter = m_renderZ_objects.begin(); for ( ; iter != m_renderZ_objects.end(); ++iter) { bindTexture(iter->texture_id); glDrawArrays(GL_QUADS, iter->index, iter->elements); } m_renderZ_objects.clear(); //reset all states disableLighting(); disableTextures(0); disableAlphaTest(); disableDepthTest(); enableColorArray(); } void RenderBackendOpenGL::renderWithColorAndZ() { // stride const uint32_t stride = sizeof(renderDataColorZ); // set pointer setVertexPointer(3, stride, &m_renderTextureColorDatasZ[0].vertex); setTexCoordPointer(0, stride, &m_renderTextureColorDatasZ[0].texel); setColorPointer(stride, &m_renderTextureColorDatasZ[0].color); // array index int32_t index = 0; // elements to render uint32_t elements = 0; // texture id uint32_t texture_id = 0; int32_t* currentIndex = &index; uint32_t* currentElements = &elements; enableDepthTest(); // use own value, other option would be to disable it setAlphaTest(0.008); enableTextures(0); enableLighting(); for(std::vector::iterator ir = m_renderTextureColorObjectsZ.begin(); ir != m_renderTextureColorObjectsZ.end(); ++ir) { RenderZObject& ro = (*ir); // if changes then we render all previously elements if (ro.texture_id != texture_id) { if (*currentElements > 0) { //render glDrawArrays(GL_QUADS, *currentIndex, *currentElements); *currentIndex += *currentElements; } if (ro.texture_id != 0) { bindTexture(0, ro.texture_id); texture_id = ro.texture_id; } else { disableTextures(0); texture_id = 0; } // set element to current size *currentElements = 4; } else { // else add the element *currentElements += 4; } } // render glDrawArrays(GL_QUADS, *currentIndex, *currentElements); //reset all states disableLighting(); disableTextures(0); setAlphaTest(m_alphaValue); disableAlphaTest(); disableDepthTest(); m_renderTextureColorDatasZ.clear(); m_renderTextureColorObjectsZ.clear(); } void RenderBackendOpenGL::renderWithMultitextureAndZ() { //bools to indicate changes bool texture = false; bool render = false; bool mt = false; // stride const uint32_t stride = sizeof(renderData2TCZ); // set pointer setVertexPointer(3, stride, &m_renderMultitextureDatasZ[0].vertex); setTexCoordPointer(0, stride, &m_renderMultitextureDatasZ[0].texel); setTexCoordPointer(1, stride, &m_renderMultitextureDatasZ[0].texel2); setTexCoordPointer(2, stride, &m_renderMultitextureDatasZ[0].texel2); setTexCoordPointer(3, stride, &m_renderMultitextureDatasZ[0].texel2); setColorPointer(stride, &m_renderMultitextureDatasZ[0].color); // array index int32_t index = 0; // elements to render uint32_t elements = 0; // texture id uint32_t texture_id = 0; uint32_t texture_id2 = 0; // overlay type OverlayType overlay_type = OVERLAY_TYPE_NONE; // overlay color uint8_t color[4] = {0}; int32_t* currentIndex = &index; uint32_t* currentElements = &elements; enableDepthTest(); enableAlphaTest(); enableTextures(0); enableLighting(); for(std::vector::iterator ir = m_renderMultitextureObjectsZ.begin(); ir != m_renderMultitextureObjectsZ.end(); ++ir) { RenderObject& ro = (*ir); // first we look for changes if (ro.texture_id != texture_id) { texture = true; render = true; } if (ro.overlay_type != overlay_type || (ro.overlay_type != OVERLAY_TYPE_NONE && (memcmp(color, ro.rgba, sizeof(uint8_t) * 4) || ro.overlay_id != texture_id2))) { mt = true; render = true; } // if changes then we render all previously elements if (render) { if (*currentElements > 0) { //render glDrawArrays(GL_QUADS, *currentIndex, *currentElements); *currentIndex += *currentElements; } // multitexturing if(mt) { switch (ro.overlay_type) { case OVERLAY_TYPE_NONE: disableTextures(3); disableTextures(2); disableTextures(1); enableTextures(0); texture_id2 = 0; break; case OVERLAY_TYPE_COLOR: disableTextures(3); disableTextures(2); bindTexture(1, m_maskOverlay); setEnvironmentalColor(1, ro.rgba); enableTextures(0); texture_id2 = m_maskOverlay; break; case OVERLAY_TYPE_COLOR_AND_TEXTURE: disableTextures(3); disableTextures(1); bindTexture(2, ro.overlay_id); setEnvironmentalColor(2, ro.rgba); enableTextures(0); texture_id2 = ro.overlay_id; break; case OVERLAY_TYPE_TEXTURES_AND_FACTOR: disableTextures(2); disableTextures(1); bindTexture(3, ro.overlay_id); setEnvironmentalColor(3, ro.rgba); enableTextures(0); texture_id2 = ro.overlay_id; break; } memcpy(color, ro.rgba, sizeof(uint8_t) * 4); overlay_type = ro.overlay_type; mt = false; } // switch texturing if (texture) { if (ro.texture_id != 0) { bindTexture(0, ro.texture_id); texture_id = ro.texture_id; } else { disableTextures(0); texture_id = 0; } texture = false; } // set element to current size *currentElements = ro.size; render = false; } else { // else add the element *currentElements += ro.size; } } // render glDrawArrays(GL_QUADS, *currentIndex, *currentElements); //reset all states if (overlay_type != OVERLAY_TYPE_NONE) { disableTextures(3); disableTextures(2); disableTextures(1); } disableTextures(0); disableLighting(); disableAlphaTest(); disableDepthTest(); m_renderMultitextureDatasZ.clear(); m_renderMultitextureObjectsZ.clear(); } void RenderBackendOpenGL::renderVertexArrays() { // z stuff if (!m_renderZ_objects.empty()) { renderWithZTest(); } if (!m_renderTextureObjectsZ.empty()) { renderWithZ(); } if (!m_renderMultitextureObjectsZ.empty()) { renderWithMultitextureAndZ(); } if (!m_renderTextureColorObjectsZ.empty()) { renderWithColorAndZ(); } // objects without z if (!m_renderObjects.empty()) { renderWithoutZ(); } } bool RenderBackendOpenGL::putPixel(int32_t x, int32_t y, uint8_t r, uint8_t g, uint8_t b, uint8_t a) { if ((x < 0) || (x >= (int32_t)m_target->w) || (y < 0) || (y >= (int32_t)m_target->h)) { return false; } renderDataP rd; rd.vertex[0] = static_cast(x)+0.375; rd.vertex[1] = static_cast(y)+0.375; rd.color[0] = r; rd.color[1] = g; rd.color[2] = b; rd.color[3] = a; m_renderPrimitiveDatas.push_back(rd); RenderObject ro(GL_POINTS, 1); m_renderObjects.push_back(ro); return true; } void RenderBackendOpenGL::drawLine(const Point& p1, const Point& p2, uint8_t r, uint8_t g, uint8_t b, uint8_t a) { renderDataP rd; rd.vertex[0] = static_cast(p1.x)-0.375; rd.vertex[1] = static_cast(p1.y)-0.375; rd.color[0] = r; rd.color[1] = g; rd.color[2] = b; rd.color[3] = a; m_renderPrimitiveDatas.push_back(rd); rd.vertex[0] = static_cast(p2.x)-0.375; rd.vertex[1] = static_cast(p2.y)-0.375; m_renderPrimitiveDatas.push_back(rd); RenderObject ro(GL_LINES, 2); m_renderObjects.push_back(ro); } void RenderBackendOpenGL::drawTriangle(const Point& p1, const Point& p2, const Point& p3, uint8_t r, uint8_t g, uint8_t b, uint8_t a) { renderDataP rd; rd.vertex[0] = static_cast(p1.x); rd.vertex[1] = static_cast(p1.y); rd.color[0] = r; rd.color[1] = g; rd.color[2] = b; rd.color[3] = a; m_renderPrimitiveDatas.push_back(rd); rd.vertex[0] = static_cast(p2.x); rd.vertex[1] = static_cast(p2.y); m_renderPrimitiveDatas.push_back(rd); rd.vertex[0] = static_cast(p3.x); rd.vertex[1] = static_cast(p3.y); m_renderPrimitiveDatas.push_back(rd); RenderObject ro(GL_TRIANGLES, 3); m_renderObjects.push_back(ro); } void RenderBackendOpenGL::drawRectangle(const Point& p, uint16_t w, uint16_t h, uint8_t r, uint8_t g, uint8_t b, uint8_t a) { renderDataP rd; rd.vertex[0] = static_cast(p.x); rd.vertex[1] = static_cast(p.y); rd.color[0] = r; rd.color[1] = g; rd.color[2] = b; rd.color[3] = a; m_renderPrimitiveDatas.push_back(rd); rd.vertex[0] = static_cast(p.x+w); m_renderPrimitiveDatas.push_back(rd); rd.vertex[1] = static_cast(p.y+h); m_renderPrimitiveDatas.push_back(rd); rd.vertex[0] = static_cast(p.x); m_renderPrimitiveDatas.push_back(rd); RenderObject ro(GL_LINE_LOOP, 4); m_renderObjects.push_back(ro); } void RenderBackendOpenGL::fillRectangle(const Point& p, uint16_t w, uint16_t h, uint8_t r, uint8_t g, uint8_t b, uint8_t a) { renderDataP rd; rd.vertex[0] = static_cast(p.x); rd.vertex[1] = static_cast(p.y); rd.color[0] = r; rd.color[1] = g; rd.color[2] = b; rd.color[3] = a; m_renderPrimitiveDatas.push_back(rd); rd.vertex[1] = static_cast(p.y+h); m_renderPrimitiveDatas.push_back(rd); rd.vertex[0] = static_cast(p.x+w); m_renderPrimitiveDatas.push_back(rd); rd.vertex[1] = static_cast(p.y); m_renderPrimitiveDatas.push_back(rd); RenderObject ro(GL_QUADS, 4); m_renderObjects.push_back(ro); } void RenderBackendOpenGL::drawQuad(const Point& p1, const Point& p2, const Point& p3, const Point& p4, uint8_t r, uint8_t g, uint8_t b, uint8_t a) { renderDataP rd; rd.vertex[0] = static_cast(p1.x); rd.vertex[1] = static_cast(p1.y); rd.color[0] = r; rd.color[1] = g; rd.color[2] = b; rd.color[3] = a; m_renderPrimitiveDatas.push_back(rd); rd.vertex[0] = static_cast(p2.x); rd.vertex[1] = static_cast(p2.y); m_renderPrimitiveDatas.push_back(rd); rd.vertex[0] = static_cast(p3.x); rd.vertex[1] = static_cast(p3.y); m_renderPrimitiveDatas.push_back(rd); rd.vertex[0] = static_cast(p4.x); rd.vertex[1] = static_cast(p4.y); m_renderPrimitiveDatas.push_back(rd); RenderObject ro(GL_QUADS, 4); m_renderObjects.push_back(ro); } void RenderBackendOpenGL::drawVertex(const Point& p, const uint8_t size, uint8_t r, uint8_t g, uint8_t b, uint8_t a) { renderDataP rd; rd.vertex[0] = static_cast(p.x-size); rd.vertex[1] = static_cast(p.y+size); rd.color[0] = r; rd.color[1] = g; rd.color[2] = b; rd.color[3] = a; m_renderPrimitiveDatas.push_back(rd); rd.vertex[0] = static_cast(p.x+size); m_renderPrimitiveDatas.push_back(rd); rd.vertex[1] = static_cast(p.y-size); m_renderPrimitiveDatas.push_back(rd); rd.vertex[0] = static_cast(p.x-size); m_renderPrimitiveDatas.push_back(rd); RenderObject ro(GL_LINE_LOOP, 4); m_renderObjects.push_back(ro); } void RenderBackendOpenGL::drawLightPrimitive(const Point& p, uint8_t intensity, float radius, int32_t subdivisions, float xstretch, float ystretch, uint8_t red, uint8_t green, uint8_t blue) { const float step = Mathf::twoPi()/subdivisions; renderDataP rd; RenderObject ro(GL_TRIANGLES, 3); for(float angle=0; angle<=Mathf::twoPi(); angle+=step){ rd.vertex[0] = static_cast(p.x); rd.vertex[1] = static_cast(p.y); rd.color[0] = red; rd.color[1] = green; rd.color[2] = blue; rd.color[3] = intensity; m_renderPrimitiveDatas.push_back(rd); rd.vertex[0] = radius*Mathf::Cos(angle+step)*xstretch + p.x; rd.vertex[1] = radius*Mathf::Sin(angle+step)*ystretch + p.y; rd.color[0] = 0; rd.color[1] = 0; rd.color[2] = 0; rd.color[3] = 255; m_renderPrimitiveDatas.push_back(rd); rd.vertex[0] = radius*Mathf::Cos(angle)*xstretch + p.x; rd.vertex[1] = radius*Mathf::Sin(angle)*ystretch + p.y; m_renderPrimitiveDatas.push_back(rd); m_renderObjects.push_back(ro); } } void RenderBackendOpenGL::addImageToArray(uint32_t id, const Rect& rect, float const* st, uint8_t alpha, uint8_t const* rgba) { RenderObject ro(GL_QUADS, 4, id); // texture quad without alpha if (alpha == 255 && !rgba) { renderDataT rd; rd.vertex[0] = static_cast(rect.x); rd.vertex[1] = static_cast(rect.y); rd.texel[0] = st[0]; rd.texel[1] = st[1]; m_renderTextureDatas.push_back(rd); rd.vertex[0] = static_cast(rect.x); rd.vertex[1] = static_cast(rect.y+rect.h); rd.texel[1] = st[3]; m_renderTextureDatas.push_back(rd); rd.vertex[0] = static_cast(rect.x+rect.w); rd.vertex[1] = static_cast(rect.y+rect.h); rd.texel[0] = st[2]; m_renderTextureDatas.push_back(rd); rd.vertex[0] = static_cast(rect.x+rect.w); rd.vertex[1] = static_cast(rect.y); rd.texel[1] = st[1]; m_renderTextureDatas.push_back(rd); ro.color = false; } else { if (rgba) { renderData2TC rd; rd.vertex[0] = static_cast(rect.x); rd.vertex[1] = static_cast(rect.y); rd.texel[0] = st[0]; rd.texel[1] = st[1]; rd.texel2[0] = 0.0; rd.texel2[1] = 0.0; rd.color[0] = 255; rd.color[1] = 255; rd.color[2] = 255; rd.color[3] = alpha; m_renderMultitextureDatas.push_back(rd); rd.vertex[0] = static_cast(rect.x); rd.vertex[1] = static_cast(rect.y+rect.h); rd.texel[1] = st[3]; rd.texel2[1] = 1.0; m_renderMultitextureDatas.push_back(rd); rd.vertex[0] = static_cast(rect.x+rect.w); rd.vertex[1] = static_cast(rect.y+rect.h); rd.texel[0] = st[2]; rd.texel2[0] = 1.0; m_renderMultitextureDatas.push_back(rd); rd.vertex[0] = static_cast(rect.x+rect.w); rd.vertex[1] = static_cast(rect.y); rd.texel[1] = st[1]; rd.texel2[1] = 0.0; m_renderMultitextureDatas.push_back(rd); ro.color = true; ro.overlay_type = OVERLAY_TYPE_COLOR; ro.rgba[0] = rgba[0]; ro.rgba[1] = rgba[1]; ro.rgba[2] = rgba[2]; ro.rgba[3] = rgba[3]; // texture quad with alpha } else { renderDataTC rd; rd.vertex[0] = static_cast(rect.x); rd.vertex[1] = static_cast(rect.y); rd.texel[0] = st[0]; rd.texel[1] = st[1]; rd.color[0] = 255; rd.color[1] = 255; rd.color[2] = 255; rd.color[3] = alpha; m_renderTextureColorDatas.push_back(rd); rd.vertex[0] = static_cast(rect.x); rd.vertex[1] = static_cast(rect.y+rect.h); rd.texel[1] = st[3]; m_renderTextureColorDatas.push_back(rd); rd.vertex[0] = static_cast(rect.x+rect.w); rd.vertex[1] = static_cast(rect.y+rect.h); rd.texel[0] = st[2]; m_renderTextureColorDatas.push_back(rd); rd.vertex[0] = static_cast(rect.x+rect.w); rd.vertex[1] = static_cast(rect.y); rd.texel[1] = st[1]; m_renderTextureColorDatas.push_back(rd); ro.color = true; } } m_renderObjects.push_back(ro); } void RenderBackendOpenGL::addImageToArray(const Rect& rect, uint32_t id1, float const* st1, uint32_t id2, float const* st2, uint8_t alpha, uint8_t const* rgba) { if (rgba) { renderData2TC rd; rd.vertex[0] = static_cast(rect.x); rd.vertex[1] = static_cast(rect.y); rd.texel[0] = st1[0]; rd.texel[1] = st1[1]; rd.texel2[0] = st2[0]; rd.texel2[1] = st2[1]; rd.color[0] = 255; rd.color[1] = 255; rd.color[2] = 255; rd.color[3] = alpha; m_renderMultitextureDatas.push_back(rd); rd.vertex[0] = static_cast(rect.x); rd.vertex[1] = static_cast(rect.y+rect.h); rd.texel[1] = st1[3]; rd.texel2[1] = st2[3]; m_renderMultitextureDatas.push_back(rd); rd.vertex[0] = static_cast(rect.x+rect.w); rd.vertex[1] = static_cast(rect.y+rect.h); rd.texel[0] = st1[2]; rd.texel2[0] = st2[2]; m_renderMultitextureDatas.push_back(rd); rd.vertex[0] = static_cast(rect.x+rect.w); rd.vertex[1] = static_cast(rect.y); rd.texel[1] = st1[1]; rd.texel2[1] = st2[1]; m_renderMultitextureDatas.push_back(rd); RenderObject ro(GL_QUADS, 4, id1, id2); ro.overlay_type = OVERLAY_TYPE_TEXTURES_AND_FACTOR; ro.rgba[0] = rgba[0]; ro.rgba[1] = rgba[1]; ro.rgba[2] = rgba[2]; ro.rgba[3] = rgba[3]; m_renderObjects.push_back(ro); } } RenderBackendOpenGL::RenderZObjectTest* RenderBackendOpenGL::getRenderBufferObject(GLuint texture_id) { for (std::vector::iterator it = m_renderZ_objects.begin(); it != m_renderZ_objects.end(); ++it) { if (it->texture_id == texture_id) { if (it->elements < it->max_size - 4) { return &(*it); } } } int32_t max_quads_per_texbatch = 1000; // nothing was found (or we were forced to make new batch), we need to create new one RenderZObjectTest obj; if (!m_renderZ_objects.empty()) { obj.index = m_renderZ_objects.back().index + m_renderZ_objects.back().max_size; } else { obj.index = 0; } obj.texture_id = texture_id; obj.elements = 0; obj.max_size = max_quads_per_texbatch * 4; m_renderZ_objects.push_back(obj); return &m_renderZ_objects.back(); } void RenderBackendOpenGL::addImageToArrayZ(uint32_t id, const Rect& rect, float vertexZ, float const* st, uint8_t alpha, uint8_t const* rgba) { // texture quad without alpha and coloring if (alpha == 255 && !rgba) { // ToDo: Consider if this is better. /*RenderZObjectTest* renderObj = getRenderBufferObject(id); uint32_t offset = renderObj->index + renderObj->elements; renderObj->elements += 4; renderDataZ* rd = &m_renderZ_datas[offset]; rd->vertex[0] = static_cast(rect.x); rd->vertex[1] = static_cast(rect.y); rd->vertex[2] = vertexZ; rd->texel[0] = st[0]; rd->texel[1] = st[1]; ++rd; rd->vertex[0] = static_cast(rect.x); rd->vertex[1] = static_cast(rect.y+rect.h); rd->vertex[2] = vertexZ; rd->texel[0] = st[0]; rd->texel[1] = st[3]; ++rd; rd->vertex[0] = static_cast(rect.x+rect.w); rd->vertex[1] = static_cast(rect.y+rect.h); rd->vertex[2] = vertexZ; rd->texel[0] = st[2]; rd->texel[1] = st[3]; ++rd; rd->vertex[0] = static_cast(rect.x+rect.w); rd->vertex[1] = static_cast(rect.y); rd->vertex[2] = vertexZ; rd->texel[0] = st[2]; rd->texel[1] = st[1];*/ renderDataZ rd; rd.vertex[0] = static_cast(rect.x); rd.vertex[1] = static_cast(rect.y); rd.vertex[2] = vertexZ; rd.texel[0] = st[0]; rd.texel[1] = st[1]; m_renderTextureDatasZ.push_back(rd); rd.vertex[0] = static_cast(rect.x); rd.vertex[1] = static_cast(rect.y+rect.h); rd.texel[1] = st[3]; m_renderTextureDatasZ.push_back(rd); rd.vertex[0] = static_cast(rect.x+rect.w); rd.vertex[1] = static_cast(rect.y+rect.h); rd.texel[0] = st[2]; m_renderTextureDatasZ.push_back(rd); rd.vertex[0] = static_cast(rect.x+rect.w); rd.vertex[1] = static_cast(rect.y); rd.texel[1] = st[1]; m_renderTextureDatasZ.push_back(rd); RenderZObject ro; ro.texture_id = id; m_renderTextureObjectsZ.push_back(ro); } else { // multitexture with color, second texel is used for m_maskOverlay if (rgba) { renderData2TCZ rd; rd.vertex[0] = static_cast(rect.x); rd.vertex[1] = static_cast(rect.y); rd.vertex[2] = vertexZ; rd.texel[0] = st[0]; rd.texel[1] = st[1]; rd.texel2[0] = 0.0; rd.texel2[1] = 0.0; rd.color[0] = 255; rd.color[1] = 255; rd.color[2] = 255; rd.color[3] = alpha; m_renderMultitextureDatasZ.push_back(rd); rd.vertex[0] = static_cast(rect.x); rd.vertex[1] = static_cast(rect.y+rect.h); rd.texel[1] = st[3]; rd.texel2[1] = 1.0; m_renderMultitextureDatasZ.push_back(rd); rd.vertex[0] = static_cast(rect.x+rect.w); rd.vertex[1] = static_cast(rect.y+rect.h); rd.texel[0] = st[2]; rd.texel2[0] = 1.0; m_renderMultitextureDatasZ.push_back(rd); rd.vertex[0] = static_cast(rect.x+rect.w); rd.vertex[1] = static_cast(rect.y); rd.texel[1] = st[1]; rd.texel2[1] = 0.0; m_renderMultitextureDatasZ.push_back(rd); RenderObject ro(GL_QUADS, 4, id); ro.color = true; ro.overlay_type = OVERLAY_TYPE_COLOR; ro.rgba[0] = rgba[0]; ro.rgba[1] = rgba[1]; ro.rgba[2] = rgba[2]; ro.rgba[3] = rgba[3]; m_renderMultitextureObjectsZ.push_back(ro); // texture with alpha } else { renderDataColorZ rd; rd.vertex[0] = static_cast(rect.x); rd.vertex[1] = static_cast(rect.y); rd.vertex[2] = vertexZ; rd.texel[0] = st[0]; rd.texel[1] = st[1]; rd.color[0] = 255; rd.color[1] = 255; rd.color[2] = 255; rd.color[3] = alpha; m_renderTextureColorDatasZ.push_back(rd); rd.vertex[0] = static_cast(rect.x); rd.vertex[1] = static_cast(rect.y+rect.h); rd.texel[1] = st[3]; m_renderTextureColorDatasZ.push_back(rd); rd.vertex[0] = static_cast(rect.x+rect.w); rd.vertex[1] = static_cast(rect.y+rect.h); rd.texel[0] = st[2]; m_renderTextureColorDatasZ.push_back(rd); rd.vertex[0] = static_cast(rect.x+rect.w); rd.vertex[1] = static_cast(rect.y); rd.texel[1] = st[1]; m_renderTextureColorDatasZ.push_back(rd); RenderZObject ro; ro.texture_id = id; m_renderTextureColorObjectsZ.push_back(ro); } } } void RenderBackendOpenGL::addImageToArrayZ(const Rect& rect, float vertexZ, uint32_t id1, float const* st1, uint32_t id2, float const* st2, uint8_t alpha, uint8_t const* rgba) { if (rgba) { renderData2TCZ rd; rd.vertex[0] = static_cast(rect.x); rd.vertex[1] = static_cast(rect.y); rd.vertex[2] = vertexZ; rd.texel[0] = st1[0]; rd.texel[1] = st1[1]; rd.texel2[0] = st2[0]; rd.texel2[1] = st2[1]; rd.color[0] = 255; rd.color[1] = 255; rd.color[2] = 255; rd.color[3] = alpha; m_renderMultitextureDatasZ.push_back(rd); rd.vertex[0] = static_cast(rect.x); rd.vertex[1] = static_cast(rect.y+rect.h); rd.texel[1] = st1[3]; rd.texel2[1] = st2[3]; m_renderMultitextureDatasZ.push_back(rd); rd.vertex[0] = static_cast(rect.x+rect.w); rd.vertex[1] = static_cast(rect.y+rect.h); rd.texel[0] = st1[2]; rd.texel2[0] = st2[2]; m_renderMultitextureDatasZ.push_back(rd); rd.vertex[0] = static_cast(rect.x+rect.w); rd.vertex[1] = static_cast(rect.y); rd.texel[1] = st1[1]; rd.texel2[1] = st2[1]; m_renderMultitextureDatasZ.push_back(rd); //RenderObject ro(GL_QUADS, 4, id1); RenderObject ro(GL_QUADS, 4, id1, id2); ro.overlay_type = OVERLAY_TYPE_TEXTURES_AND_FACTOR; ro.rgba[0] = rgba[0]; ro.rgba[1] = rgba[1]; ro.rgba[2] = rgba[2]; ro.rgba[3] = rgba[3]; m_renderMultitextureObjectsZ.push_back(ro); } } void RenderBackendOpenGL::prepareForOverlays() { glActiveTexture(GL_TEXTURE1); glEnable(GL_TEXTURE_2D); if(m_maskOverlay == 0) { // Constant texture - can be constant across every tilesets glGenTextures(1, &m_maskOverlay); uint8_t dummydata[3] = {127, 127, 127}; glBindTexture(GL_TEXTURE_2D, m_maskOverlay); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, dummydata); } else { glBindTexture(GL_TEXTURE_2D, m_maskOverlay); } m_state.texture[1] = m_maskOverlay; // Texture Unit 1 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_INTERPOLATE); glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_MODULATE); // Arg0 glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_TEXTURE0); glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_TEXTURE0); glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA); // The alpha component is taken only from 0th tex unit which is // Arg0 in our case, therefore we doesn't need to set operands // and sources for the rest of arguments // Arg1 glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_CONSTANT); glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR); // Arg2 // uses alpha part of environmental color as interpolation factor glTexEnvi(GL_TEXTURE_ENV, GL_SRC2_RGB, GL_CONSTANT); glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB, GL_SRC_ALPHA); glDisable(GL_TEXTURE_2D); // Texture Unit 2 glClientActiveTexture(GL_TEXTURE2); glActiveTexture(GL_TEXTURE2); glEnable(GL_TEXTURE_2D); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_INTERPOLATE); glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_MODULATE); // Arg0 glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_TEXTURE0); glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_TEXTURE2); glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA); // The alpha component is taken only from 0th tex unit which is // Arg0 in our case, therefore we doesn't need to set operands // and sources for the rest of arguments // Arg1 glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_CONSTANT); glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR); // Arg2 // uses alpha part of environmental color as interpolation factor glTexEnvi(GL_TEXTURE_ENV, GL_SRC2_RGB, GL_CONSTANT); glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB, GL_SRC_ALPHA); glDisable(GL_TEXTURE_2D); // Texture Unit 3 glClientActiveTexture(GL_TEXTURE3); glActiveTexture(GL_TEXTURE3); glEnable(GL_TEXTURE_2D); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_INTERPOLATE); glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_MODULATE); // Arg0 glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_TEXTURE0); glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_TEXTURE3); glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA); // The alpha component is taken only from 3th tex unit which is // Arg0 in our case, therefore we doesn't need to set operands // and sources for the rest of arguments // Arg1 glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_TEXTURE3); glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR); // Arg2 // uses alpha part of environmental color as interpolation factor glTexEnvi(GL_TEXTURE_ENV, GL_SRC2_RGB, GL_CONSTANT); glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB, GL_SRC_ALPHA); // Return to normal sampling mode glDisable(GL_TEXTURE_2D); glActiveTexture(GL_TEXTURE0); m_state.active_tex = 0; glClientActiveTexture(GL_TEXTURE0); m_state.active_client_tex = 0; // For now it's unneecessary - Only needed if we intend to use the next texture unit in different case //glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); } void RenderBackendOpenGL::captureScreen(const std::string& filename) { const uint32_t swidth = getWidth(); const uint32_t sheight = getHeight(); uint8_t *pixels; SDL_Surface *surface = SDL_CreateRGBSurface(0, swidth, sheight, 24, RMASK, GMASK, BMASK, NULLMASK); if (!surface) { return; } SDL_LockSurface(surface); pixels = new uint8_t[swidth * sheight * 3]; glReadPixels(0, 0, swidth, sheight, GL_RGB, GL_UNSIGNED_BYTE, reinterpret_cast(pixels)); uint8_t *imagepixels = reinterpret_cast(surface->pixels); // Copy the "reversed_image" memory to the "image" memory for (int32_t y = (sheight - 1); y >= 0; --y) { uint8_t *rowbegin = pixels + y * swidth * 3; uint8_t *rowend = rowbegin + swidth * 3; std::copy(rowbegin, rowend, imagepixels); // Advance a row in the output surface. imagepixels += surface->pitch; } SDL_UnlockSurface(surface); Image::saveAsPng(filename, *surface); SDL_FreeSurface(surface); delete[] pixels; } void RenderBackendOpenGL::captureScreen(const std::string& filename, uint32_t width, uint32_t height) { const uint32_t swidth = getWidth(); const uint32_t sheight = getHeight(); const bool same_size = (width == swidth && height == sheight); if (width < 1 || height < 1) { return; } if (same_size) { captureScreen(filename); return; } uint8_t *pixels; // create source surface SDL_Surface* src = SDL_CreateRGBSurface(0, swidth, sheight, 32, RMASK, GMASK, BMASK, AMASK); if (!src) { return; } if (SDL_MUSTLOCK(src)) { SDL_LockSurface(src); } pixels = new uint8_t[swidth * sheight * 4]; glReadPixels(0, 0, swidth, sheight, GL_RGBA, GL_UNSIGNED_BYTE, reinterpret_cast(pixels)); uint8_t* imagepixels = reinterpret_cast(src->pixels); // Copy the "reversed_image" memory to the "image" memory for (int32_t y = (sheight - 1); y >= 0; --y) { uint8_t *rowbegin = pixels + y * swidth * 4; uint8_t *rowend = rowbegin + swidth * 4; std::copy(rowbegin, rowend, imagepixels); // Advance a row in the output surface. imagepixels += src->pitch; } // create destination surface SDL_Surface* dst = SDL_CreateRGBSurface(0, width, height, 32, RMASK, GMASK, BMASK, AMASK); uint32_t* src_pointer = static_cast(src->pixels); uint32_t* src_help_pointer = src_pointer; uint32_t* dst_pointer = static_cast(dst->pixels); int32_t x, y, *sx_ca, *sy_ca; int32_t sx = static_cast(0xffff * src->w / dst->w); int32_t sy = static_cast(0xffff * src->h / dst->h); int32_t sx_c = 0; int32_t sy_c = 0; // Allocates memory and calculates row wide&height int32_t* sx_a = new int32_t[dst->w + 1]; sx_ca = sx_a; for (x = 0; x <= dst->w; x++) { *sx_ca = sx_c; sx_ca++; sx_c &= 0xffff; sx_c += sx; } int32_t* sy_a = new int32_t[dst->h + 1]; sy_ca = sy_a; for (y = 0; y <= dst->h; y++) { *sy_ca = sy_c; sy_ca++; sy_c &= 0xffff; sy_c += sy; } sy_ca = sy_a; // Transfers the image data if (SDL_MUSTLOCK(dst)) { SDL_LockSurface(dst); } for (y = 0; y < dst->h; y++) { src_pointer = src_help_pointer; sx_ca = sx_a; for (x = 0; x < dst->w; x++) { *dst_pointer = *src_pointer; sx_ca++; src_pointer += (*sx_ca >> 16); dst_pointer++; } sy_ca++; src_help_pointer = (uint32_t*)((uint8_t*)src_help_pointer + (*sy_ca >> 16) * src->pitch); } if (SDL_MUSTLOCK(dst)) { SDL_UnlockSurface(dst); } if (SDL_MUSTLOCK(src)) { SDL_UnlockSurface(src); } Image::saveAsPng(filename, *dst); // Free memory SDL_FreeSurface(src); SDL_FreeSurface(dst); delete[] sx_a; delete[] sy_a; delete[] pixels; } void RenderBackendOpenGL::setClipArea(const Rect& cliparea, bool clear) { glScissor(cliparea.x, getHeight() - cliparea.y - cliparea.h, cliparea.w, cliparea.h); if (clear) { if (m_isbackgroundcolor) { float red = float(m_backgroundcolor.r/255.0); float green = float(m_backgroundcolor.g/255.0); float blue = float(m_backgroundcolor.b/255.0); glClearColor(red, green, blue, 0.0); m_isbackgroundcolor = false; } glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } } void RenderBackendOpenGL::attachRenderTarget(ImagePtr& img, bool discard) { // flush down what we batched for the old target renderVertexArrays(); m_img_target = img; m_target_discard = discard; // to render on something, we need to make sure its loaded already in gpu memory m_img_target->forceLoadInternal(); m_target = m_img_target->getSurface(); GLImage* glimage = static_cast(m_img_target.get()); GLuint targetid = glimage->getTexId(); uint32_t w = m_img_target->getWidth(); uint32_t h = m_img_target->getHeight(); // quick & dirty hack for attaching compressed texture if(glimage->isCompressed()) { bindTexture(targetid); GLubyte* pixels = new GLubyte[w*h*4]; // here we get decompressed pixels glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels); delete [] pixels; glimage->setCompressed(false); } // can we use fbo? if (GLEE_EXT_framebuffer_object && m_useframebuffer) { glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_fbo_id); glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, targetid, 0); // currenty unused, is needed in case the static layers should be rendered with depth buffer (instead of sorting) // see LayerCache //glBindRenderbuffer(GL_RENDERBUFFER, m_depthbuffer_id); //glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, w, h); //glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, m_depthbuffer_id); } glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); // invert top with bottom glOrtho(0, w, 0, h, -100, 100); glMatrixMode(GL_MODELVIEW); // because of inversion 2 lines above we need to also invert culling faces glCullFace(GL_FRONT); if (m_target_discard) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } else if (!m_target_discard && (!GLEE_EXT_framebuffer_object || !m_useframebuffer)) { // if we wanna just add something to render target, we need to first render previous contents addImageToArray(targetid, m_img_target->getArea(), static_cast(m_img_target.get())->getTexCoords(), 255, 0); } } void RenderBackendOpenGL::detachRenderTarget() { assert(m_target != m_screen); // flush down what we batched renderVertexArrays(); if (GLEE_EXT_framebuffer_object && m_useframebuffer) { glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); } else { bindTexture(0, static_cast(m_img_target.get())->getTexId()); glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 0, 0, m_img_target->getWidth(), m_img_target->getHeight(), 0); } m_target = m_screen; glViewport(0, 0, m_screen->w, m_screen->h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0, m_screen->w, m_screen->h, 0, -100, 100); glMatrixMode(GL_MODELVIEW); glCullFace(GL_BACK); } void RenderBackendOpenGL::renderGuiGeometry(const std::vector& vertices, const std::vector& indices, const DoublePoint& translation, ImagePtr texture) { glPushMatrix(); glTranslatef(translation.x, translation.y, 0); glVertexPointer(2, GL_DOUBLE, sizeof(GuiVertex), &vertices[0].position); glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(GuiVertex), &vertices[0].color); GLuint texId = 0; GLImage* glImage = dynamic_cast(texture.get()); if(glImage) { glImage->forceLoadInternal(); texId = glImage->getTexId(); } if(texId == 0) { glDisable(GL_TEXTURE_2D); glDisableClientState(GL_TEXTURE_COORD_ARRAY); } else { glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, texId); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glTexCoordPointer(2, GL_DOUBLE, sizeof(GuiVertex), &vertices[0].texCoords); } glDrawElements(GL_TRIANGLES, indices.size(), GL_UNSIGNED_INT, &indices[0]); glPopMatrix(); } } fifengine-0.4.1/engine/core/video/opengl/renderbackendopengl.h000066400000000000000000000247771304641216200244220ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_VIDEO_RENDERBACKENSD_OPENGL_RENDERBACKENDOPENGL_H #define FIFE_VIDEO_RENDERBACKENSD_OPENGL_RENDERBACKENDOPENGL_H // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "video/renderbackend.h" #include "fife_opengl.h" namespace FIFE { class ScreenMode; /** The main class of the OpenGL-based renderer. * @see RenderBackend */ class RenderBackendOpenGL : public RenderBackend { public: RenderBackendOpenGL(const SDL_Color& colorkey); virtual ~RenderBackendOpenGL(); virtual const std::string& getName() const; virtual void startFrame(); virtual void endFrame(); virtual void init(const std::string& driver); virtual void clearBackBuffer(); virtual void setLightingModel(uint32_t lighting); virtual uint32_t getLightingModel() const; virtual void setLighting(float red, float green, float blue); virtual void resetLighting(); virtual void resetStencilBuffer(uint8_t buffer); virtual void changeBlending(int32_t scr, int32_t dst); virtual void createMainScreen(const ScreenMode& mode, const std::string& title, const std::string& icon); virtual void setScreenMode(const ScreenMode& mode); virtual Image* createImage(IResourceLoader* loader = 0); virtual Image* createImage(const std::string& name, IResourceLoader* loader = 0); virtual Image* createImage(const uint8_t* data, uint32_t width, uint32_t height); virtual Image* createImage(const std::string& name, const uint8_t* data, uint32_t width, uint32_t height); virtual Image* createImage(SDL_Surface* surface); virtual Image* createImage(const std::string& name, SDL_Surface* surface); virtual void renderVertexArrays(); virtual void addImageToArray(uint32_t id, const Rect& rec, float const* st, uint8_t alpha, uint8_t const* rgba); virtual void addImageToArray(const Rect& rect, uint32_t id1, float const* st1, uint32_t id2, float const* st2, uint8_t alpha, uint8_t const* rgba); virtual void addImageToArrayZ(uint32_t id, const Rect& rect, float vertexZ, float const* st, uint8_t alpha, uint8_t const* rgba); virtual void addImageToArrayZ(const Rect& rect, float vertexZ, uint32_t id1, float const* st1, uint32_t id2, float const* st2, uint8_t alpha, uint8_t const* rgba); virtual void changeRenderInfos(RenderDataType type, uint16_t elements, int32_t src, int32_t dst, bool light, bool stentest, uint8_t stenref, GLConstants stenop, GLConstants stenfunc, OverlayType otype = OVERLAY_TYPE_NONE); virtual void captureScreen(const std::string& filename); virtual void captureScreen(const std::string& filename, uint32_t width, uint32_t height); virtual bool putPixel(int32_t x, int32_t y, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); virtual void drawLine(const Point& p1, const Point& p2, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); virtual void drawTriangle(const Point& p1, const Point& p2, const Point& p3, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); virtual void drawRectangle(const Point& p, uint16_t w, uint16_t h, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); virtual void fillRectangle(const Point& p, uint16_t w, uint16_t h, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); virtual void drawQuad(const Point& p1, const Point& p2, const Point& p3, const Point& p4, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); virtual void drawVertex(const Point& p, const uint8_t size, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); virtual void drawLightPrimitive(const Point& p, uint8_t intensity, float radius, int32_t subdivisions, float xstretch, float ystretch, uint8_t red, uint8_t green, uint8_t blue); virtual void enableScissorTest(); virtual void disableScissorTest(); virtual void attachRenderTarget(ImagePtr& img, bool discard); virtual void detachRenderTarget(); virtual void renderGuiGeometry(const std::vector& vertices, const std::vector& indices, const DoublePoint& translation, ImagePtr texture); void enableTextures(uint32_t texUnit); void disableTextures(uint32_t texUnit); void bindTexture(uint32_t texUnit, GLuint texId); void bindTexture(GLuint textId); protected: virtual void setClipArea(const Rect& cliparea, bool clear); void enableLighting(); void disableLighting(); void enableStencilTest(); void disableStencilTest(); void setStencilTest(uint8_t stencil_ref, GLenum stencil_op, GLenum stencil_func); uint8_t getStencilRef() const; void enableAlphaTest(); void disableAlphaTest(); void setAlphaTest(float ref_alpha); void enableDepthTest(); void disableDepthTest(); void enableColorArray(); void disableColorArray(); void setEnvironmentalColor(uint32_t texUnit, const uint8_t* rgba); void setVertexPointer(GLint size, GLsizei stride, const GLvoid* ptr); void setColorPointer(GLsizei stride, const GLvoid* ptr); void setTexCoordPointer(uint32_t texUnit, GLsizei stride, const GLvoid* ptr); GLuint m_maskOverlay; void prepareForOverlays(); void renderWithoutZ(); void renderWithZ(); void renderWithZTest(); void renderWithColorAndZ(); void renderWithMultitextureAndZ(); class RenderObject; struct RenderZObject { GLuint texture_id; //uint32_t elements; }; // for regular primitives with color and alpha struct renderDataP { GLfloat vertex[2]; GLubyte color[4]; }; // for regular textured quads struct renderDataT { GLfloat vertex[2]; GLfloat texel[2]; }; // for textured quads with alpha struct renderDataTC { GLfloat vertex[2]; GLfloat texel[2]; GLubyte color[4]; }; // for multitextured quads struct renderData2TC { GLfloat vertex[2]; GLfloat texel[2]; GLfloat texel2[2]; GLubyte color[4]; }; // for regular textured quads with z struct renderDataZ { GLfloat vertex[3]; GLfloat texel[2]; }; // for textured quads with alpha and z struct renderDataColorZ { GLfloat vertex[3]; GLfloat texel[2]; GLubyte color[4]; }; // for multitextured quads with z struct renderData2TCZ { GLfloat vertex[3]; GLfloat texel[2]; GLfloat texel2[2]; GLubyte color[4]; }; struct RenderZObjectTest { GLuint texture_id; uint32_t elements; uint32_t index; uint32_t max_size; }; RenderZObjectTest* getRenderBufferObject(GLuint texture_id); std::vector m_renderZ_datas; std::vector m_renderZ_objects; // Vertex data structs that dont use the depth buffer / z // vertex data source for primitives that dont use depth buffer and texture - described by m_renderObjects std::vector m_renderPrimitiveDatas; // vertex data source for textured quads that dont use depth buffer and color/alpha - described by m_renderObjects std::vector m_renderTextureDatas; // vertex data source for textured quads with color/alpha that dont use depth buffer - described by m_renderObjects std::vector m_renderTextureColorDatas; // // vertex data source for multitexture quads that dont use depth buffer - described by m_renderObjects std::vector m_renderMultitextureDatas; std::vector m_renderObjects; // Now the vertex data that do use the depth buffer / z // vertex data source for textured quads that do use depth buffer but no color/alpha - described by m_renderTextureObjectsZ std::vector m_renderTextureDatasZ; std::vector m_renderTextureObjectsZ; // vertex data source for textured quads that do use depth buffer and color/alpha - described by m_renderTextureColorObjectsZ std::vector m_renderTextureColorDatasZ; std::vector m_renderTextureColorObjectsZ; // vertex data source for multitexture quads that do use depth buffer - described by m_renderMultitextureObjectsZ std::vector m_renderMultitextureDatasZ; std::vector m_renderMultitextureObjectsZ; // vertex data source for other stuff, unlit quads like outlines and unlit demanded instances - described by m_renderForcedObjectsZ std::vector m_renderForcedDatasZ; std::vector m_renderForcedObjectsZ; struct currentState { // Textures bool tex_enabled[4]; GLuint texture[4]; uint32_t active_tex; uint32_t active_client_tex; float alpha_test; GLint vertex_pointer_size; // Pointers const void* vertex_pointer; const void* tex_pointer[4]; const void* color_pointer; // Stencil bool sten_enabled; uint8_t sten_ref; GLint sten_buf; GLenum sten_op; GLenum sten_func; // Light uint32_t lightmodel; bool light_enabled; // The rest uint8_t env_color[4]; GLenum blend_src; GLenum blend_dst; bool alpha_enabled; bool scissor_test; bool depth_enabled; bool color_enabled; } m_state; GLuint m_fbo_id; ImagePtr m_img_target; bool m_target_discard; SDL_GLContext m_context; }; } #endif /* vim: set noexpandtab: set shiftwidth=2: set tabstop=2: */ fifengine-0.4.1/engine/core/video/renderbackend.cpp000066400000000000000000000145431304641216200222520ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "renderbackend.h" #include "video/devicecaps.h" namespace FIFE { RenderBackend::RenderBackend(const SDL_Color& colorkey): m_window(NULL), m_screen(NULL), m_target(NULL), m_compressimages(false), m_useframebuffer(false), m_usenpot(false), m_isalphaoptimized(false), m_iscolorkeyenabled(false), m_colorkey(colorkey), m_isMipmapping(false), m_textureFilter(TEXTURE_FILTER_NONE), m_maxAnisotropy(0), m_monochrome(false), m_isDepthBuffer(false), m_alphaValue(0.3), m_vSync(false), m_isframelimit(false), m_frame_start(0), m_framelimit(60) { m_isbackgroundcolor = false; m_backgroundcolor.r = 0; m_backgroundcolor.g = 0; m_backgroundcolor.b = 0; } RenderBackend::~RenderBackend() { } void RenderBackend::deinit() { SDL_QuitSubSystem(SDL_INIT_VIDEO); SDL_Quit(); } void RenderBackend::startFrame() { if (m_isframelimit) { m_frame_start = SDL_GetTicks(); } } void RenderBackend::endFrame () { if (m_isframelimit) { uint16_t frame_time = SDL_GetTicks() - m_frame_start; const float frame_limit = 1000.0f/m_framelimit; if (frame_time < frame_limit) { SDL_Delay(static_cast(frame_limit) - frame_time); } } } const ScreenMode& RenderBackend::getCurrentScreenMode() const{ return m_screenMode; } uint32_t RenderBackend::getWidth() const { return m_screen->w; } uint32_t RenderBackend::getHeight() const { return m_screen->h; } const Rect& RenderBackend::getArea() const { static Rect r(0, 0, m_screen->w, m_screen->h); return r; } void RenderBackend::pushClipArea(const Rect& cliparea, bool clear) { ClipInfo ci; ci.r = cliparea; ci.clearing = clear; m_clipstack.push(ci); setClipArea(cliparea, clear); } void RenderBackend::popClipArea() { assert(!m_clipstack.empty()); m_clipstack.pop(); if (m_clipstack.empty()) { setClipArea(getArea(), false); } else { ClipInfo ci = m_clipstack.top(); // instead of using ci.clearing, we set it to false // to avoid double clearing setClipArea(ci.r, false); } } const Rect& RenderBackend::getClipArea() const { if (!m_clipstack.empty()) { return m_clipstack.top().r; } else { return getArea(); } } void RenderBackend::clearClipArea() { setClipArea(getArea(), true); } void RenderBackend::setTextureFiltering(TextureFiltering filter) { m_textureFilter = filter; } TextureFiltering RenderBackend::getTextureFiltering() const { return m_textureFilter; } void RenderBackend::setMipmappingEnabled(bool enabled) { m_isMipmapping = enabled; } bool RenderBackend::isMipmappingEnabled() const { return m_isMipmapping; } int32_t RenderBackend::getMaxAnisotropy() const { return m_maxAnisotropy; } void RenderBackend::setMonochromeEnabled(bool enabled) { m_monochrome = enabled; } bool RenderBackend::isMonochromeEnabled() const { return m_monochrome; } void RenderBackend::setDepthBufferEnabled(bool enabled) { m_isDepthBuffer = enabled; } bool RenderBackend::isDepthBufferEnabled() const { return m_isDepthBuffer; } void RenderBackend::setAlphaTestValue(float alpha) { m_alphaValue = alpha; } float RenderBackend::getAlphaTestValue() const { return m_alphaValue; } void RenderBackend::setColorKeyEnabled(bool colorkeyenable) { m_iscolorkeyenabled = colorkeyenable; } bool RenderBackend::isColorKeyEnabled() const { return m_iscolorkeyenabled; } void RenderBackend::setColorKey(const SDL_Color& colorkey) { m_colorkey = colorkey; } const SDL_Color& RenderBackend::getColorKey() const { return m_colorkey; } void RenderBackend::setBackgroundColor(uint8_t r, uint8_t g, uint8_t b) { if (r != m_backgroundcolor.r || g != m_backgroundcolor.g || b != m_backgroundcolor.b) { m_isbackgroundcolor = true; m_backgroundcolor.r = r; m_backgroundcolor.g = g; m_backgroundcolor.b = b; } } void RenderBackend::resetBackgroundColor() { setBackgroundColor(0,0,0); } const SDL_PixelFormat& RenderBackend::getPixelFormat() const { return m_rgba_format; } void RenderBackend::setVSyncEnabled(bool vsync) { m_vSync = vsync; } bool RenderBackend::isVSyncEnabled() const { return m_vSync; } void RenderBackend::setFrameLimitEnabled(bool limited) { m_isframelimit = limited; } bool RenderBackend::isFrameLimitEnabled() const { return m_isframelimit; } void RenderBackend::setFrameLimit(uint16_t framelimit) { m_framelimit = framelimit; } uint16_t RenderBackend::getFrameLimit() const { return m_framelimit; } SDL_Surface* RenderBackend::getScreenSurface() { return m_screen; } SDL_Surface* RenderBackend::getRenderTargetSurface() { return m_target; } } fifengine-0.4.1/engine/core/video/renderbackend.h000066400000000000000000000353641304641216200217230ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_VIDEO_RENDERBACKEND_H #define FIFE_VIDEO_RENDERBACKEND_H // Standard C++ library includes #include #include // Platform specific includes #include "util/base/fife_stdint.h" // 3rd party library includes #include #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/singleton.h" #include "util/structures/point.h" #include "util/structures/rect.h" #include "video/devicecaps.h" #include "image.h" #include "color.h" #ifdef HAVE_OPENGL #include "video/opengl/fife_opengl.h" #endif namespace FIFE { class Image; #ifdef HAVE_OPENGL enum GLConstants { KEEP = GL_KEEP, ZERO = GL_ZERO, REPLACE = GL_REPLACE, INCR = GL_INCR, DECR = GL_DECR, INVERT = GL_INVERT, NEVER = GL_NEVER, LESS = GL_LESS, LEQUAL = GL_LEQUAL, GREATER = GL_GREATER, GEQUAL = GL_GEQUAL, EQUAL = GL_EQUAL, NOTEQUAL = GL_NOTEQUAL, ALWAYS = GL_ALWAYS }; #else enum GLConstants { KEEP = 0, ZERO, REPLACE, INCR, DECR, INVERT, NEVER, LESS, LEQUAL, GREATER, GEQUAL, EQUAL, NOTEQUAL, ALWAYS }; #endif enum OverlayType { OVERLAY_TYPE_NONE = 0, OVERLAY_TYPE_COLOR = 1, OVERLAY_TYPE_COLOR_AND_TEXTURE = 2, OVERLAY_TYPE_TEXTURES_AND_FACTOR = 3 }; enum TextureFiltering { TEXTURE_FILTER_NONE = 0, TEXTURE_FILTER_BILINEAR = 1, TEXTURE_FILTER_TRILINEAR = 2, TEXTURE_FILTER_ANISOTROPIC = 3 }; enum RenderDataType { RENDER_DATA_WITHOUT_Z = 0, RENDER_DATA_TEXTURE_Z = 1, RENDER_DATA_TEXCOLOR_Z = 2, RENDER_DATA_MULTITEXTURE_Z = 3 }; class GuiVertex { public: DoublePoint position; Color color; DoublePoint texCoords; }; /** Abstract interface for all the renderbackends. */ class RenderBackend: public DynamicSingleton { public: /** Constructor. * @param colorkey The colorkey to use. */ RenderBackend(const SDL_Color& colorkey); /** Destructor. */ virtual ~RenderBackend(); /** The name of the renderbackend. * @return The name of this renderbackend. */ virtual const std::string& getName() const = 0; /** Called when a new frame starts. */ virtual void startFrame(); /** Called when a frame is finished and ready to be displayed. */ virtual void endFrame(); /** Initializes the backend. */ virtual void init(const std::string& driver) = 0; /** Forces a clear of the backbuffer */ virtual void clearBackBuffer() = 0; /** Initializes the light. */ virtual void setLightingModel(uint32_t lighting) = 0; /** Gets the current light model. */ virtual uint32_t getLightingModel() const = 0; /** Set colors for lighting */ virtual void setLighting(float red, float green, float blue) = 0; /** Reset lighting with default values. */ virtual void resetLighting() = 0; /** Reset stencil buffer with given value. */ virtual void resetStencilBuffer(uint8_t buffer) = 0; /** Change the Blendingmodel. */ virtual void changeBlending(int32_t scr, int32_t dst) = 0; /** Performs cleanup actions. */ void deinit(); /** Creates the mainscreen (the display window). * @param mode The ScreenMode to use. @see FIFE::ScreenMode. * @param title The window title to use. * @param icon The window icon to use. */ virtual void createMainScreen(const ScreenMode& mode, const std::string& title, const std::string& icon) = 0; /** Sets the mainscreen display mode. * @param mode The ScreenMode to change the display to. @see FIFE::ScreenMode. */ virtual void setScreenMode(const ScreenMode& mode) = 0; virtual Image* createImage(IResourceLoader* loader = 0) = 0; virtual Image* createImage(const std::string& name, IResourceLoader* loader = 0) = 0; /** Creates an Image suitable for this renderbackend. * @param data Pointer to the imagedata (needs to be in RGBA, 8 bits per channel). * @param width Width of the image. * @param height Height of the image. * @return The new Image. */ virtual Image* createImage(const uint8_t* data, uint32_t width, uint32_t height) = 0; virtual Image* createImage(const std::string& name, const uint8_t* data, uint32_t width, uint32_t height) = 0; /** Helper function to create images from SDL_Surfaces. * Takes ownership over the surface. * @param surface The surface to convert. * @return The new Image. */ virtual Image* createImage(SDL_Surface* surface) = 0; virtual Image* createImage(const std::string& name, SDL_Surface* surface) = 0; /** Render the Vertex Arrays, only for primitives (points, lines,...) */ virtual void renderVertexArrays() = 0; /** Add the Image data to the array */ virtual void addImageToArray(uint32_t id, const Rect& rec, float const* st, uint8_t alpha, uint8_t const* rgba) = 0; /** Dirty helper function to change the render infos */ virtual void changeRenderInfos(RenderDataType type, uint16_t elements, int32_t src, int32_t dst, bool light, bool stentest, uint8_t stenref, GLConstants stenop, GLConstants stenfunc, OverlayType otype = OVERLAY_TYPE_NONE) = 0; /** Creates a Screenshot and saves it to a file. */ virtual void captureScreen(const std::string& filename) = 0; /** Creates a Screenshot with the given size(w,h) and saves it to a file. */ virtual void captureScreen(const std::string& filename, uint32_t width, uint32_t height) = 0; SDL_Window* getWindow() {return m_window; } /** Get current screen mode * @return The current screen mode */ const ScreenMode& getCurrentScreenMode() const; uint32_t getWidth() const; uint32_t getHeight() const; uint32_t getScreenWidth() const { return getWidth(); } uint32_t getScreenHeight() const { return getHeight(); } const Rect& getArea() const; /** Pushes clip area to clip stack * Clip areas define which area is drawn on screen. Usable e.g. with viewports * note that previous items in stack do not affect the latest area pushed */ void pushClipArea(const Rect& cliparea, bool clear=true); /** Pops clip area from clip stack * @see pushClipArea */ void popClipArea(); /** Gets the current clip area * @see pushClipArea */ const Rect& getClipArea() const; /** Writes pixel to given position. Returns true, if pixel was written (not out of bounds) */ virtual bool putPixel(int32_t x, int32_t y, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255) = 0; /** Draws line between given points with given RGBA */ virtual void drawLine(const Point& p1, const Point& p2, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255) = 0; /** Draws triangle between given points with given RGBA */ virtual void drawTriangle(const Point& p1, const Point& p2, const Point& p3, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255) = 0; /** Draws an axis parallel rectangle. */ virtual void drawRectangle(const Point& p, uint16_t w, uint16_t h, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255) = 0; /** Draws a filled axis parallel rectangle. */ virtual void fillRectangle(const Point& p, uint16_t w, uint16_t h, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255) = 0; /** Draws quad between given points with given RGBA */ virtual void drawQuad(const Point& p1, const Point& p2, const Point& p3, const Point& p4, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255) = 0; /** Draws a quad that represents a vertex with given RGBA */ virtual void drawVertex(const Point& p, const uint8_t size, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255) = 0; /** Draws a light primitive that based on a triangle fan */ virtual void drawLightPrimitive(const Point& p, uint8_t intensity, float radius, int32_t subdivisions, float xstretch, float ystretch, uint8_t red, uint8_t green, uint8_t blue) = 0; /** Enables scissor test on the render backend. */ virtual void enableScissorTest() = 0; /** Disables scissor test on the render backend. */ virtual void disableScissorTest() = 0; /** Enable or disable the alpha 'optimizing' code * * @param enabled Optimize whether the image shall be analysed for 'fake' alpha images. * Only implemented by and useful for the SDL backend at the moment. */ void setAlphaOptimizerEnabled(bool enabled){ m_isalphaoptimized = enabled; } /** @see setAlphaOptimizerEnabled */ bool isAlphaOptimizerEnabled() const { return m_isalphaoptimized; } /** Enables or disable compressing images by video driver. * @remarks This is relevant for in OpenGL renderbackend */ void setImageCompressingEnabled(bool enabled) { m_compressimages = enabled; } /** @see setImageCompressingEnabled */ bool isImageCompressingEnabled() const { return m_compressimages; } /** Enables or disable the usage of the framebuffer, if available */ void setFramebufferEnabled(bool enabled) { m_useframebuffer = enabled; } /** @see setFramebufferEnabled */ bool isFramebufferEnabled() const { return m_useframebuffer; } /** Enables or disable the usage of npot, if available */ void setNPOTEnabled(bool enabled) { m_usenpot = enabled; } /** @see setNPOTEnabled */ bool isNPOTEnabled() const { return m_usenpot; } /** Sets the texture filtering method. * Supports none, bilinear, trilinear and anisotropic filtering. * Note! Works only for OpenGL backends. * @see TextureFiltering */ void setTextureFiltering(TextureFiltering filter); /** @see setTextureFiltering */ TextureFiltering getTextureFiltering() const; /** Enables or disables the usage of mipmapping. * Note! Works only for OpenGL backends. */ void setMipmappingEnabled(bool enabled); /** @see setMipmappingEnabled */ bool isMipmappingEnabled() const; /** Gets max antisotropy for antisotropic filtering. */ int32_t getMaxAnisotropy() const; /** Enables or disables monochrome rendering. * Note! Works only for OpenGL backends. */ void setMonochromeEnabled(bool enabled); /** @see setMonochromeEnabled */ bool isMonochromeEnabled() const; /** Enables or disables depth buffer rendering. * Note! Works only for OpenGL backend. */ void setDepthBufferEnabled(bool enabled); /** @see setMonochromeEnabled */ bool isDepthBufferEnabled() const; /** Sets the value for alpha test. * Discards a fragment if its value is not greater. Only used if depth buffer is enabled. * Note! Works only for OpenGL backend. */ void setAlphaTestValue(float alpha); /** @see setAlphaValue */ float getAlphaTestValue() const; /** Sets whether to use the colorkey feature */ void setColorKeyEnabled(bool colorkeyenable); /** Gets whether the colorkey feature is in use */ bool isColorKeyEnabled() const; /** Sets the global colorkey to use for images */ void setColorKey(const SDL_Color& colorkey); /** Gets the global colorkey setting */ const SDL_Color& getColorKey() const; /** Set the background color */ void setBackgroundColor(uint8_t r, uint8_t g, uint8_t b); /** Reset the background color to black */ void resetBackgroundColor(); /** Gets the current screen rgba format */ const SDL_PixelFormat& getPixelFormat() const; /** Sets whether to use VSync */ void setVSyncEnabled(bool vsync); /** Gets whether VSync is in use */ bool isVSyncEnabled() const; /** Sets whether to use the frame limiter */ void setFrameLimitEnabled(bool limited); /** Gets whether the frame limiter is in use */ bool isFrameLimitEnabled() const; /** Sets the frame limit */ void setFrameLimit(uint16_t framelimit); /** Gets the frame limit */ uint16_t getFrameLimit() const; /** Returns screen render surface */ SDL_Surface* getScreenSurface(); /** Returns currently attached render surface */ SDL_Surface* getRenderTargetSurface(); /** Attaches given image as a new render surface */ virtual void attachRenderTarget(ImagePtr& img, bool discard) = 0; /** Detaches current render surface */ virtual void detachRenderTarget() = 0; /** Renders geometry required by gui. */ virtual void renderGuiGeometry(const std::vector& vertices, const std::vector& indices, const DoublePoint& translation, ImagePtr texture) = 0; protected: /** Sets given clip area into image * @see pushClipArea */ virtual void setClipArea(const Rect& cliparea, bool clear) = 0; SDL_Window* m_window; SDL_Surface* m_screen; SDL_Surface* m_target; bool m_compressimages; bool m_useframebuffer; bool m_usenpot; bool m_isalphaoptimized; bool m_iscolorkeyenabled; SDL_Color m_colorkey; ScreenMode m_screenMode; SDL_PixelFormat m_rgba_format; bool m_isbackgroundcolor; SDL_Color m_backgroundcolor; // mipmapping bool m_isMipmapping; // texture filter TextureFiltering m_textureFilter; // max anisotropy int32_t m_maxAnisotropy; // monochrome rendering bool m_monochrome; // depth buffer rendering bool m_isDepthBuffer; // alpha test value float m_alphaValue; // vsync value bool m_vSync; /** Clears any possible clip areas * @see pushClipArea */ void clearClipArea(); class ClipInfo { public: Rect r; bool clearing; }; std::stack m_clipstack; ClipInfo m_guiClip; private: bool m_isframelimit; uint32_t m_frame_start; uint16_t m_framelimit; }; } #endif fifengine-0.4.1/engine/core/video/sdl/000077500000000000000000000000001304641216200175325ustar00rootroot00000000000000fifengine-0.4.1/engine/core/video/sdl/renderbackendsdl.cpp000066400000000000000000000346371304641216200235450ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/exception.h" #include "util/math/fife_math.h" #include "util/log/logger.h" #include "video/devicecaps.h" #include "renderbackendsdl.h" #include "sdlimage.h" #include "SDL_image.h" namespace FIFE { /** Logger to use for this source file. * @relates Logger */ static Logger _log(LM_VIDEO); RenderBackendSDL::RenderBackendSDL(const SDL_Color& colorkey) : RenderBackend(colorkey), m_renderer(NULL) { } RenderBackendSDL::~RenderBackendSDL() { SDL_DestroyRenderer(m_renderer); SDL_DestroyWindow(m_window); deinit(); } const std::string& RenderBackendSDL::getName() const { static std::string backend_name = "SDL"; return backend_name; } void RenderBackendSDL::init(const std::string& driver) { if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0) { throw SDLException(SDL_GetError()); } if (driver != "") { if (SDL_VideoInit(driver.c_str()) < 0) { throw SDLException(SDL_GetError()); } } } void RenderBackendSDL::clearBackBuffer() { SDL_Rect rect; rect.x = 0; rect.y = 0; rect.w = getWidth(); rect.h = getHeight(); SDL_RenderSetClipRect(m_renderer, &rect); SDL_SetRenderDrawColor(m_renderer, 0, 0, 0, 255); SDL_RenderClear(m_renderer); } void RenderBackendSDL::createMainScreen(const ScreenMode& mode, const std::string& title, const std::string& icon){ setScreenMode(mode); if (m_window) { if (icon != "") { SDL_Surface *img = IMG_Load(icon.c_str()); if (img != NULL) { SDL_SetWindowIcon(m_window, img); SDL_FreeSurface(img); } } SDL_SetWindowTitle(m_window, title.c_str()); } } void RenderBackendSDL::setScreenMode(const ScreenMode& mode) { uint16_t width = mode.getWidth(); uint16_t height = mode.getHeight(); uint16_t bitsPerPixel = mode.getBPP(); uint32_t flags = mode.getSDLFlags(); // in case of recreating if (m_window) { SDL_DestroyRenderer(m_renderer); SDL_DestroyWindow(m_window); m_screen = NULL; } // create window uint8_t displayIndex = mode.getDisplay(); if (mode.isFullScreen()) { m_window = SDL_CreateWindow("", SDL_WINDOWPOS_UNDEFINED_DISPLAY(displayIndex), SDL_WINDOWPOS_UNDEFINED_DISPLAY(displayIndex), width, height, flags | SDL_WINDOW_SHOWN); } else { m_window = SDL_CreateWindow("", SDL_WINDOWPOS_CENTERED_DISPLAY(displayIndex), SDL_WINDOWPOS_CENTERED_DISPLAY(displayIndex), width, height, flags | SDL_WINDOW_SHOWN); } if (!m_window) { throw SDLException(SDL_GetError()); } // make sure the window have the right settings SDL_DisplayMode displayMode; displayMode.format = mode.getFormat(); displayMode.w = width; displayMode.h = height; displayMode.refresh_rate = mode.getRefreshRate(); if (SDL_SetWindowDisplayMode(m_window, &displayMode) != 0) { throw SDLException(SDL_GetError()); } // create renderer with given flags flags = SDL_RENDERER_ACCELERATED | SDL_RENDERER_TARGETTEXTURE; if (m_vSync) { flags |= SDL_RENDERER_PRESENTVSYNC; } m_renderer = SDL_CreateRenderer(m_window, mode.getRenderDriverIndex(), flags); if (!m_renderer) { throw SDLException(SDL_GetError()); } // set texture filtering if (m_textureFilter == TEXTURE_FILTER_ANISOTROPIC) { SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "best"); } else if (m_textureFilter != TEXTURE_FILTER_NONE) { SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear"); } else { SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "nearest"); } // enable alpha blending SDL_SetRenderDrawBlendMode(m_renderer, SDL_BLENDMODE_BLEND); // set the window surface as main surface, not really needed anymore m_screen = SDL_GetWindowSurface(m_window); m_target = m_screen; if (!m_screen) { throw SDLException(SDL_GetError()); } FL_LOG(_log, LMsg("RenderBackendSDL") << "Videomode " << width << "x" << height << " at " << int32_t(bitsPerPixel) << " bpp with " << displayMode.refresh_rate << " Hz"); // this is needed, otherwise we would have screen pixel formats which will not work with // our texture generation. 32 bit surfaces to BitsPerPixel texturen. m_rgba_format = *(m_screen->format); if (bitsPerPixel != 16) { m_rgba_format.format = SDL_PIXELFORMAT_RGBA8888; m_rgba_format.BitsPerPixel = 32; } else { m_rgba_format.format = SDL_PIXELFORMAT_RGBA4444; m_rgba_format.BitsPerPixel = 16; } m_rgba_format.Rmask = RMASK; m_rgba_format.Gmask = GMASK; m_rgba_format.Bmask = BMASK; m_rgba_format.Amask = AMASK; //update the screen mode with the actual flags used m_screenMode = mode; } void RenderBackendSDL::startFrame() { RenderBackend::startFrame(); } void RenderBackendSDL::endFrame() { SDL_RenderPresent(m_renderer); RenderBackend::endFrame(); } Image* RenderBackendSDL::createImage(IResourceLoader* loader) { return new SDLImage(loader); } Image* RenderBackendSDL::createImage(const std::string& name, IResourceLoader* loader) { return new SDLImage(name, loader); } Image* RenderBackendSDL::createImage(SDL_Surface* surface) { return new SDLImage(surface); } Image* RenderBackendSDL::createImage(const std::string& name, SDL_Surface* surface) { return new SDLImage(name, surface); } Image* RenderBackendSDL::createImage(const uint8_t* data, uint32_t width, uint32_t height) { return new SDLImage(data, width, height); } Image* RenderBackendSDL::createImage(const std::string& name, const uint8_t* data, uint32_t width, uint32_t height) { return new SDLImage(name, data, width, height); } void RenderBackendSDL::setLightingModel(uint32_t lighting) { SDLException("Lighting not available under SDL"); } uint32_t RenderBackendSDL::getLightingModel() const { return 0; } void RenderBackendSDL::setLighting(float red, float green, float blue) { } void RenderBackendSDL::resetLighting() { } void RenderBackendSDL::resetStencilBuffer(uint8_t buffer) { } void RenderBackendSDL::changeBlending(int32_t scr, int32_t dst){ } void RenderBackendSDL::renderVertexArrays() { } void RenderBackendSDL::addImageToArray(uint32_t id, const Rect& rec, float const* st, uint8_t alpha, uint8_t const* rgba) { } void RenderBackendSDL::changeRenderInfos(RenderDataType type, uint16_t elements, int32_t src, int32_t dst, bool light, bool stentest, uint8_t stenref, GLConstants stenop, GLConstants stenfunc, OverlayType otype) { } bool RenderBackendSDL::putPixel(int32_t x, int32_t y, uint8_t r, uint8_t g, uint8_t b, uint8_t a) { SDL_SetRenderDrawColor(m_renderer, r, g, b, a); if (SDL_RenderDrawPoint(m_renderer, x, y) == 0) { return true; } return false; } void RenderBackendSDL::drawLine(const Point& p1, const Point& p2, uint8_t r, uint8_t g, uint8_t b, uint8_t a) { SDL_SetRenderDrawColor(m_renderer, r, g, b, a); SDL_RenderDrawLine(m_renderer, p1.x, p1.y, p2.x, p2.y); } void RenderBackendSDL::drawTriangle(const Point& p1, const Point& p2, const Point& p3, uint8_t r, uint8_t g, uint8_t b, uint8_t a) { SDL_SetRenderDrawColor(m_renderer, r, g, b, a); SDL_RenderDrawLine(m_renderer, p1.x, p1.y, p2.x, p2.y); SDL_RenderDrawLine(m_renderer, p2.x, p2.y, p3.x, p3.y); SDL_RenderDrawLine(m_renderer, p3.x, p1.y, p1.x, p1.y); } void RenderBackendSDL::drawRectangle(const Point& p, uint16_t w, uint16_t h, uint8_t r, uint8_t g, uint8_t b, uint8_t a) { SDL_Rect rect; rect.x = p.x; rect.y = p.y; rect.w = w; rect.h = h; SDL_SetRenderDrawColor(m_renderer, r, g, b, a); SDL_RenderDrawRect(m_renderer, &rect); } void RenderBackendSDL::fillRectangle(const Point& p, uint16_t w, uint16_t h, uint8_t r, uint8_t g, uint8_t b, uint8_t a) { SDL_Rect rect; rect.x = p.x; rect.y = p.y; rect.w = w; rect.h = h; SDL_SetRenderDrawColor(m_renderer, r, g, b, a); SDL_RenderFillRect(m_renderer, &rect); } void RenderBackendSDL::drawQuad(const Point& p1, const Point& p2, const Point& p3, const Point& p4, uint8_t r, uint8_t g, uint8_t b, uint8_t a) { fillRectangle(p1, static_cast(p3.x-p1.x), static_cast(p3.y-p1.y), r, g, b, a); } void RenderBackendSDL::drawVertex(const Point& p, const uint8_t size, uint8_t r, uint8_t g, uint8_t b, uint8_t a){ Point p1 = Point(p.x-size, p.y+size); Point p2 = Point(p.x+size, p.y+size); Point p3 = Point(p.x+size, p.y-size); Point p4 = Point(p.x-size, p.y-size); SDL_SetRenderDrawColor(m_renderer, r, g, b, a); SDL_RenderDrawLine(m_renderer, p1.x, p1.y, p2.x, p2.y); SDL_RenderDrawLine(m_renderer, p2.x, p2.y, p3.x, p3.y); SDL_RenderDrawLine(m_renderer, p3.x, p3.y, p4.x, p4.y); SDL_RenderDrawLine(m_renderer, p4.x, p4.y, p1.x, p1.y); } void RenderBackendSDL::drawLightPrimitive(const Point& p, uint8_t intensity, float radius, int32_t subdivisions, float xstretch, float ystretch, uint8_t red, uint8_t green, uint8_t blue) { } void RenderBackendSDL::enableScissorTest() { } void RenderBackendSDL::disableScissorTest() { } void RenderBackendSDL::captureScreen(const std::string& filename) { if(m_screen) { const uint32_t swidth = getWidth(); const uint32_t sheight = getHeight(); SDL_Surface* surface = SDL_CreateRGBSurface(0, swidth, sheight, 24, RMASK, GMASK, BMASK, NULLMASK); if(!surface) { return; } SDL_BlitSurface(m_screen, NULL, surface, NULL); Image::saveAsPng(filename, *surface); SDL_FreeSurface(surface); } } void RenderBackendSDL::captureScreen(const std::string& filename, uint32_t width, uint32_t height) { if(m_screen) { const uint32_t swidth = getWidth(); const uint32_t sheight = getHeight(); const bool same_size = (width == swidth && height == sheight); if (width < 1 || height < 1) { return; } if (same_size) { captureScreen(filename); return; } // create source surface SDL_Surface* src = SDL_CreateRGBSurface(0, swidth, sheight, 32, RMASK, GMASK, BMASK, AMASK); if(!src) { return; } // copy screen suface to source surface SDL_BlitSurface(m_screen, NULL, src, NULL); // create destination surface SDL_Surface* dst = SDL_CreateRGBSurface(0, width, height, 32, RMASK, GMASK, BMASK, AMASK); uint32_t* src_pointer = static_cast(src->pixels); uint32_t* src_help_pointer = src_pointer; uint32_t* dst_pointer = static_cast(dst->pixels); int32_t x, y, *sx_ca, *sy_ca; int32_t sx = static_cast(0xffff * src->w / dst->w); int32_t sy = static_cast(0xffff * src->h / dst->h); int32_t sx_c = 0; int32_t sy_c = 0; // Allocates memory and calculates row wide&height int32_t* sx_a = new int32_t[dst->w + 1]; sx_ca = sx_a; for (x = 0; x <= dst->w; x++) { *sx_ca = sx_c; sx_ca++; sx_c &= 0xffff; sx_c += sx; } int32_t* sy_a = new int32_t[dst->h + 1]; sy_ca = sy_a; for (y = 0; y <= dst->h; y++) { *sy_ca = sy_c; sy_ca++; sy_c &= 0xffff; sy_c += sy; } sy_ca = sy_a; // Transfers the image data if (SDL_MUSTLOCK(src)) { SDL_LockSurface(src); } if (SDL_MUSTLOCK(dst)) { SDL_LockSurface(dst); } for (y = 0; y < dst->h; y++) { src_pointer = src_help_pointer; sx_ca = sx_a; for (x = 0; x < dst->w; x++) { *dst_pointer = *src_pointer; sx_ca++; src_pointer += (*sx_ca >> 16); dst_pointer++; } sy_ca++; src_help_pointer = (uint32_t*)((uint8_t*)src_help_pointer + (*sy_ca >> 16) * src->pitch); } if (SDL_MUSTLOCK(dst)) { SDL_UnlockSurface(dst); } if (SDL_MUSTLOCK(src)) { SDL_UnlockSurface(src); } Image::saveAsPng(filename, *dst); // Free memory SDL_FreeSurface(src); SDL_FreeSurface(dst); delete[] sx_a; delete[] sy_a; } } void RenderBackendSDL::setClipArea(const Rect& cliparea, bool clear) { SDL_Rect rect; rect.x = cliparea.x; rect.y = cliparea.y; rect.w = cliparea.w; rect.h = cliparea.h; SDL_RenderSetClipRect(m_renderer, &rect); if (clear) { if (m_isbackgroundcolor) { SDL_SetRenderDrawColor(m_renderer, m_backgroundcolor.r, m_backgroundcolor.g, m_backgroundcolor.b, m_backgroundcolor.a); } else { SDL_SetRenderDrawColor(m_renderer, 0, 0, 0, 255); } SDL_RenderClear(m_renderer); } } void RenderBackendSDL::attachRenderTarget(ImagePtr& img, bool discard) { SDLImage* image = static_cast(img.get()); m_target = img->getSurface(); SDL_Texture* texture = image->getTexture(); if (!texture) { texture = SDL_CreateTexture(m_renderer, m_rgba_format.format, SDL_TEXTUREACCESS_TARGET, m_target->w, m_target->h); image->setTexture(texture); } SDL_SetRenderTarget(m_renderer, texture); setClipArea(img->getArea(), discard); } void RenderBackendSDL::detachRenderTarget(){ SDL_RenderPresent(m_renderer); m_target = m_screen; SDL_SetRenderTarget(m_renderer, NULL); } void RenderBackendSDL::renderGuiGeometry(const std::vector& vertices, const std::vector& indices, const DoublePoint& translation, ImagePtr texture) { } } fifengine-0.4.1/engine/core/video/sdl/renderbackendsdl.h000066400000000000000000000124101304641216200231730ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_VIDEO_RENDERBACKENDS_SDL_RENDERBACKENDSDL_H #define FIFE_VIDEO_RENDERBACKENDS_SDL_RENDERBACKENDSDL_H // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "video/renderbackend.h" namespace FIFE { class ScreenMode; /** The main class of the SDL-based renderer. * * @see RenderBackend */ class RenderBackendSDL : public RenderBackend { public: RenderBackendSDL(const SDL_Color& colorkey); virtual ~RenderBackendSDL(); virtual const std::string& getName() const; virtual void startFrame(); virtual void endFrame(); virtual void init(const std::string& driver); virtual void clearBackBuffer(); virtual void setLightingModel(uint32_t lighting); virtual uint32_t getLightingModel() const; virtual void setLighting(float red, float green, float blue); virtual void resetLighting(); virtual void resetStencilBuffer(uint8_t buffer); virtual void changeBlending(int32_t scr, int32_t dst); virtual void createMainScreen(const ScreenMode& mode, const std::string& title, const std::string& icon); virtual void setScreenMode(const ScreenMode& mode); virtual Image* createImage(IResourceLoader* loader = 0); virtual Image* createImage(const std::string& name, IResourceLoader* loader = 0); virtual Image* createImage(const uint8_t* data, uint32_t width, uint32_t height); virtual Image* createImage(const std::string& name, const uint8_t* data, uint32_t width, uint32_t height); virtual Image* createImage(SDL_Surface* surface); virtual Image* createImage(const std::string& name, SDL_Surface* surface); virtual void renderVertexArrays(); virtual void addImageToArray(uint32_t id, const Rect& rec, float const* st, uint8_t alpha, uint8_t const* rgba); virtual void changeRenderInfos(RenderDataType type, uint16_t elements, int32_t src, int32_t dst, bool light, bool stentest, uint8_t stenref, GLConstants stenop, GLConstants stenfunc, OverlayType otype = OVERLAY_TYPE_NONE); virtual void captureScreen(const std::string& filename); virtual void captureScreen(const std::string& filename, uint32_t width, uint32_t height); virtual bool putPixel(int32_t x, int32_t y, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); virtual void drawLine(const Point& p1, const Point& p2, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); virtual void drawTriangle(const Point& p1, const Point& p2, const Point& p3, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); virtual void drawRectangle(const Point& p, uint16_t w, uint16_t h, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); virtual void fillRectangle(const Point& p, uint16_t w, uint16_t h, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); virtual void drawQuad(const Point& p1, const Point& p2, const Point& p3, const Point& p4, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); virtual void drawVertex(const Point& p, const uint8_t size, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); virtual void drawLightPrimitive(const Point& p, uint8_t intensity, float radius, int32_t subdivisions, float xstretch, float ystretch, uint8_t red, uint8_t green, uint8_t blue); virtual void enableScissorTest(); virtual void disableScissorTest(); virtual void attachRenderTarget(ImagePtr& img, bool discard); virtual void detachRenderTarget(); virtual void renderGuiGeometry(const std::vector& vertices, const std::vector& indices, const DoublePoint& translation, ImagePtr texture); SDL_Renderer* getRenderer() { return m_renderer; } protected: virtual void setClipArea(const Rect& cliparea, bool clear); SDL_Renderer* m_renderer; }; } #endif fifengine-0.4.1/engine/core/video/sdl/sdlblendingfunctions.cpp000066400000000000000000000120561304641216200244600ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "sdlblendingfunctions.h" namespace FIFE { struct ColorRGB8 { uint8_t r, g, b; }; struct ColorRGBA8 { uint8_t r, g, b, a; }; void SDL_BlendRow_RGBA8_to_RGBA8( const uint8_t* src, uint8_t* dst, uint32_t alpha, int32_t n ) { const ColorRGBA8* srcColor = reinterpret_cast< const ColorRGBA8* >( src ); ColorRGBA8* dstColor = reinterpret_cast< ColorRGBA8* >( dst ); for( int32_t i = n; 0 < i; --i ) { register uint32_t aMulA = alpha * srcColor->a; if( aMulA ) { register uint32_t OneMin_aMulA = 65535 - aMulA; dstColor->r = ( aMulA * srcColor->r + OneMin_aMulA * dstColor->r ) >> 16; dstColor->g = ( aMulA * srcColor->g + OneMin_aMulA * dstColor->g ) >> 16; dstColor->b = ( aMulA * srcColor->b + OneMin_aMulA * dstColor->b ) >> 16; dstColor->a = 255; } ++dstColor; ++srcColor; } } void SDL_BlendRow_RGBA8_to_RGB8( const uint8_t* src, uint8_t* dst, uint32_t alpha, int32_t n ) { const ColorRGBA8* srcColor = reinterpret_cast< const ColorRGBA8* >( src ); ColorRGB8* dstColor = reinterpret_cast< ColorRGB8* >( dst ); for( int32_t i = n; 0 < i; --i ) { register uint32_t aMulA = alpha * srcColor->a; if( aMulA ) { register uint32_t OneMin_aMulA = 65535 - aMulA; dstColor->r = ( aMulA * srcColor->r + OneMin_aMulA * dstColor->r ) >> 16; dstColor->g = ( aMulA * srcColor->g + OneMin_aMulA * dstColor->g ) >> 16; dstColor->b = ( aMulA * srcColor->b + OneMin_aMulA * dstColor->b ) >> 16; } ++dstColor; ++srcColor; } } void SDL_BlendRow_RGBA8_to_RGB565( const uint8_t* src, uint8_t* dst, uint32_t alpha, int32_t n ) { const ColorRGBA8* srcColor = reinterpret_cast< const ColorRGBA8* >( src ); uint16_t* dstColor = reinterpret_cast< uint16_t* >( dst ); for( int32_t i = n; 0 < i; --i ) { register uint32_t aMulA = ( alpha * srcColor->a ) >> 8; if( aMulA ) { register uint32_t OneMin_aMulA = 255 - aMulA; register uint32_t c = *dstColor; *dstColor = ( ( ( srcColor->b * aMulA ) + ( ( ( c & 0xF800 ) >> 8 ) * OneMin_aMulA ) ) & 0xF800 ) | ( ( ( ( srcColor->g * aMulA ) + ( ( ( c & 0x07E0 ) >> 3 ) * OneMin_aMulA ) ) >> 5 ) & 0x07E0 ) | ( ( ( ( srcColor->r * aMulA ) + ( ( ( c & 0x001F ) << 3 ) * OneMin_aMulA ) ) >> 11 ) & 0x001F ); } ++dstColor; ++srcColor; } } void SDL_BlendRow_RGBA4_to_RGB565( const uint8_t* src, uint8_t* dst, uint32_t alpha, int32_t n ) { const uint16_t* srcColor = reinterpret_cast< const uint16_t* >( src ); uint16_t* dstColor = reinterpret_cast< uint16_t* >( dst ); for( int32_t i = n; 0 < i; --i ) { register uint32_t c1 = *dstColor; register uint32_t c2 = *srcColor; uint32_t aMulA = c2 & 0xF; aMulA = ( alpha * aMulA ) / 15; ///< upgrade to range 0-255 if( aMulA ) { register uint32_t OneMin_aMulA = 255 - aMulA; register uint32_t result; result = ( ( ( ( c2 & 0xF000 ) | 0x0800 ) * aMulA ) + ( ( c1 & 0xF800 ) * OneMin_aMulA ) ) & 0xF80000; result |= ( ( ( ( ( c2 & 0x0F00 ) >> 1 ) | 0x0040 ) * aMulA ) + ( ( c1 & 0x07E0 ) * OneMin_aMulA ) ) & 0x07E000; result |= ( ( ( ( ( c2 & 0x00F0 ) >> 3 ) | 0x0001 ) * aMulA ) + ( ( c1 & 0x001F ) * OneMin_aMulA ) ) & 0x001F00; /// multiplying by alpha resulted in shift. *dstColor = static_cast< uint16_t >( result >> 8 ); } ++dstColor; ++srcColor; } } } fifengine-0.4.1/engine/core/video/sdl/sdlblendingfunctions.h000066400000000000000000000061611304641216200241250ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_VIDEO_RENDERBACKENDS_SDL_SDLBLENDINGFUNCTIONS_H #define FIFE_VIDEO_RENDERBACKENDS_SDL_SDLBLENDINGFUNCTIONS_H // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/fife_stdint.h" namespace FIFE { /** Blends one row of n pixels from src with n pixels of dst. * * @param src Source. * @param dst Destiny. * @param alpha Level of alphablending. * @param n Number of pixels. */ void SDL_BlendRow_RGBA8_to_RGBA8( const uint8_t* src, uint8_t* dst, uint32_t alpha, int32_t n ); /** Blends one row of n pixels from src with n pixels of dst. * * @param src Source. * @param dst Destiny. * @param alpha Level of alphablending. * @param n Number of pixels. */ void SDL_BlendRow_RGBA8_to_RGB8( const uint8_t* src, uint8_t* dst, uint32_t alpha, int32_t n ); /** Blends one row of n pixels from src with n pixels of dst. * * @param src Source. * @param dst Destiny. * @param alpha Level of alphablending. * @param n Number of pixels. */ void SDL_BlendRow_RGBA8_to_RGB565( const uint8_t* src, uint8_t* dst, uint32_t alpha, int32_t n ); /** Blends one row of n pixels from src with n pixels of dst. * * @param src Source. * @param dst Destiny. * @param alpha Level of alphablending. * @param n Number of pixels. */ void SDL_BlendRow_RGBA4_to_RGB565( const uint8_t* src, uint8_t* dst, uint32_t alpha, int32_t n ); } #endif fifengine-0.4.1/engine/core/video/sdl/sdlimage.cpp000066400000000000000000000151361304641216200220310ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/base/exception.h" #include "util/log/logger.h" #include "util/structures/rect.h" #include "video/imagemanager.h" #include "video/renderbackend.h" #include "renderbackendsdl.h" #include "sdlimage.h" namespace FIFE { /** Logger to use for this source file. * @relates Logger */ static Logger _log(LM_VIDEO); SDLImage::SDLImage(IResourceLoader* loader): Image(loader) { resetSdlimage(); } SDLImage::SDLImage(const std::string& name, IResourceLoader* loader): Image(name, loader) { resetSdlimage(); } SDLImage::SDLImage(SDL_Surface* surface): Image(surface) { resetSdlimage(); } SDLImage::SDLImage(const std::string& name, SDL_Surface* surface): Image(name, surface) { resetSdlimage(); } SDLImage::SDLImage(const uint8_t* data, uint32_t width, uint32_t height): Image(data, width, height) { resetSdlimage(); } SDLImage::SDLImage(const std::string& name, const uint8_t* data, uint32_t width, uint32_t height): Image(name, data, width, height) { resetSdlimage(); } void SDLImage::resetSdlimage() { m_colorkey = RenderBackend::instance()->getColorKey(); m_texture = NULL; } SDLImage::~SDLImage() { invalidate(); } void SDLImage::invalidate() { if (m_texture && !m_shared) { SDL_DestroyTexture(m_texture); } m_texture = NULL; } void SDLImage::setSurface(SDL_Surface* surface) { invalidate(); reset(surface); resetSdlimage(); } void SDLImage::render(const Rect& rect, uint8_t alpha, uint8_t const* rgb) { if (alpha == 0) { return; } SDL_Surface* target = RenderBackend::instance()->getRenderTargetSurface(); assert(target != m_surface); // can't draw on the source surface if (rect.right() < 0 || rect.x > static_cast(target->w) || rect.bottom() < 0 || rect.y > static_cast(target->h)) { return; } SDL_Rect tarRect; tarRect.x = rect.x; tarRect.y = rect.y; tarRect.w = rect.w; tarRect.h = rect.h; Rect tmpRect = m_shared ? getSubImageRect() : getArea(); SDL_Rect srcRect; srcRect.x = tmpRect.x; srcRect.y = tmpRect.y; srcRect.w = tmpRect.w; srcRect.h = tmpRect.h; SDL_Renderer* renderer = static_cast(RenderBackend::instance())->getRenderer(); // create texture if (!m_texture) { if (!m_surface) { load(); } m_texture = SDL_CreateTextureFromSurface(renderer, m_surface); } // set additonal color and alpha mods if (rgb) { SDL_SetTextureColorMod(m_texture, rgb[0], rgb[1], rgb[2]); SDL_SetTextureAlphaMod(m_texture, rgb[3]); } else { SDL_SetTextureColorMod(m_texture, 255, 255, 255); SDL_SetTextureAlphaMod(m_texture, 255); } // set render color SDL_SetRenderDrawColor(renderer, 255, 255, 255, alpha); if (SDL_RenderCopy(renderer, m_texture, &srcRect, &tarRect) != 0) { throw SDLException(SDL_GetError()); } } size_t SDLImage::getSize() { size_t size = 0; if (m_surface && !m_shared) { size += m_surface->h * m_surface->pitch; } return size; } void SDLImage::useSharedImage(const ImagePtr& shared, const Rect& region) { if(shared->getState() != IResource::RES_LOADED) { shared->load(); } SDL_Surface* surface = shared->getSurface(); if (!surface) { shared->load(); surface = shared->getSurface(); } SDLImage* image = static_cast(shared.get()); m_texture = image->getTexture(); if (!m_texture) { // create atlas texture SDL_Renderer* renderer = static_cast(RenderBackend::instance())->getRenderer(); m_texture = SDL_CreateTextureFromSurface(renderer, surface); image->setTexture(m_texture); } setSurface(surface); m_shared = true; m_subimagerect = region; m_atlas_img = shared; m_atlas_name = shared->getName(); setState(IResource::RES_LOADED); } void SDLImage::forceLoadInternal() { validateShared(); } void SDLImage::validateShared() { if (m_atlas_name.empty()) { return; } if (m_atlas_img->getState() == IResource::RES_NOT_LOADED || getState() == IResource::RES_NOT_LOADED) { load(); } } void SDLImage::load() { if (!m_atlas_name.empty()) { // check atlas image // if it does not exist, it is created. if (!ImageManager::instance()->exists(m_atlas_name)) { ImagePtr newAtlas = ImageManager::instance()->create(m_atlas_name); m_atlas_img = newAtlas; } useSharedImage(m_atlas_img , m_subimagerect); } else { Image::load(); } } void SDLImage::free() { // save the image offsets int32_t xshift = m_xshift; int32_t yshift = m_yshift; setSurface(NULL); m_xshift = xshift; m_yshift = yshift; m_state = IResource::RES_NOT_LOADED; } SDL_Texture* SDLImage::getTexture() { return m_texture; } void SDLImage::setTexture(SDL_Texture* texture) { if (m_texture == texture) { return; } if (m_texture && !m_shared) { SDL_DestroyTexture(m_texture); } m_texture = texture; } } fifengine-0.4.1/engine/core/video/sdl/sdlimage.h000066400000000000000000000062151304641216200214740ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_VIDEO_RENDERBACKENDS_SDL_SDLIMAGE_H #define FIFE_VIDEO_RENDERBACKENDS_SDL_SDLIMAGE_H // Standard C++ library includes // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "video/image.h" namespace FIFE { /** The SDL implementation of the @c Image base class. */ class SDLImage : public Image { public: SDLImage(IResourceLoader* loader = 0); SDLImage(const std::string& name, IResourceLoader* loader = 0); SDLImage(SDL_Surface* surface); SDLImage(const std::string& name, SDL_Surface* surface); SDLImage(const uint8_t* data, uint32_t width, uint32_t height); SDLImage(const std::string& name, const uint8_t* data, uint32_t width, uint32_t height); virtual ~SDLImage(); virtual void invalidate(); virtual void setSurface(SDL_Surface* surface); virtual void render(const Rect& rect, uint8_t alpha = 255, uint8_t const* rgb = 0); virtual size_t getSize(); virtual void useSharedImage(const ImagePtr& shared, const Rect& region); virtual void forceLoadInternal(); virtual void load(); virtual void free(); SDL_Texture* getTexture(); void setTexture(SDL_Texture* texture); private: void resetSdlimage(); void validateShared(); // colorkey for the image SDL_Color m_colorkey; // texture of image SDL_Texture* m_texture; // Holds Atlas ImagePtr if this is a shared image ImagePtr m_atlas_img; // Holds Atlas Name if this is a shared image std::string m_atlas_name; }; } #endif fifengine-0.4.1/engine/core/video/video.i000066400000000000000000000304201304641216200202270ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "video/image.h" #include "video/cursor.h" #include "video/animation.h" #include "video/imagemanager.h" #include "video/animationmanager.h" #include "video/renderbackend.h" #include "video/devicecaps.h" #include "video/atlasbook.h" #include "video/color.h" #include "util/base/sharedptr.h" #include "util/base/exception.h" %} %include %include "util/base/utilbase.i" %include "util/structures/utilstructures.i" %include "util/resource/resource.i" namespace FIFE { class ScreenMode; } namespace std { %template(ScreenModeVector) std::vector; } %attribute(FIFE::Color, uint8_t, r, getR, setR); %attribute(FIFE::Color, uint8_t, g, getG, setG); %attribute(FIFE::Color, uint8_t, b, getB, setB); %attribute(FIFE::Color, uint8_t, a, getAlpha, setAlpha); namespace FIFE { class Point; class ResourceLocation; %apply uint8_t *OUTPUT { uint8_t* r, uint8_t* g, uint8_t* b, uint8_t* a }; class Image : public IResource { public: //void render(const Rect& rect, uint8_t alpha = 255, uint8_t const* rgb = 0); virtual ~Image(); SDL_Surface* getSurface(); uint32_t getWidth() const; uint32_t getHeight() const; Rect getArea() const; void setXShift(int32_t xshift); inline int32_t getXShift() const; void setYShift(int32_t yshift); inline int32_t getYShift() const; void getPixelRGBA(int32_t x, int32_t y, uint8_t* r, uint8_t* g, uint8_t* b, uint8_t* a); void saveImage(const std::string& filename); virtual void useSharedImage(const FIFE::ImagePtr& shared, const Rect& region) = 0; virtual void forceLoadInternal() = 0; bool isSharedImage() const; const Rect& getSubImageRect() const; void copySubimage(uint32_t xoffset, uint32_t yoffset, const FIFE::ImagePtr& img); private: Image(SDL_Surface* surface); Image(const uint8_t* data, uint32_t width, uint32_t height); }; typedef SharedPtr ImagePtr; %template(SharedImagePointer) SharedPtr; class ImageManager : public IResourceManager { public: virtual ~ImageManager(); virtual size_t getMemoryUsed() const; virtual size_t getTotalResourcesCreated() const; virtual size_t getTotalResourcesLoaded() const; virtual size_t getTotalResources() const; virtual ImagePtr create(const std::string& name, IResourceLoader* loader = 0); virtual ImagePtr load(const std::string& name, IResourceLoader* loader = 0); virtual ImagePtr loadBlank(uint32_t width, uint32_t height); virtual ImagePtr add(Image* res); virtual bool exists(const std::string& name); virtual bool exists(ResourceHandle handle); virtual void reload(const std::string& name); virtual void reload(ResourceHandle handle); virtual void reloadAll(); virtual void loadUnreferenced(); virtual void free(const std::string& name); virtual void free(ResourceHandle handle); virtual void freeAll(); virtual void freeUnreferenced(); virtual void remove(ImagePtr& resource); virtual void remove(const std::string& name); virtual void remove(ResourceHandle handle); virtual void removeAll(); virtual void removeUnreferenced(); virtual ImagePtr get(const std::string& name); virtual ImagePtr get(ResourceHandle handle); virtual ResourceHandle getResourceHandle(const std::string& name); virtual void invalidate(const std::string& name); virtual void invalidate(ResourceHandle handle); virtual void invalidateAll(); }; class Animation: public IResource { public: ~Animation(); void addFrame(ImagePtr image, uint32_t duration); int32_t getFrameIndex(uint32_t timestamp); ImagePtr getFrame(int32_t index); ImagePtr getFrameByTimestamp(uint32_t timestamp); int32_t getFrameDuration(int32_t index); uint32_t getFrameCount() const; void setActionFrame(int32_t num); int32_t getActionFrame(); void setDirection(uint32_t direction); uint32_t getDirection(); int32_t getDuration(); }; typedef SharedPtr AnimationPtr; %template(SharedAnimationPointer) SharedPtr; class AnimationManager : public IResourceManager { public: virtual ~AnimationManager(); virtual size_t getMemoryUsed() const; virtual size_t getTotalResourcesCreated() const; virtual size_t getTotalResourcesLoaded() const; virtual size_t getTotalResources() const; virtual AnimationPtr create(const std::string& name, IResourceLoader* loader = 0); virtual AnimationPtr add(Animation* res); virtual bool exists(const std::string& name); virtual bool exists(ResourceHandle handle); virtual void reload(const std::string& name); virtual void reload(ResourceHandle handle); virtual void reloadAll(); virtual void loadUnreferenced(); virtual void free(const std::string& name); virtual void free(ResourceHandle handle); virtual void freeAll(); virtual void freeUnreferenced(); virtual void remove(ImagePtr& resource); virtual void remove(const std::string& name); virtual void remove(ResourceHandle handle); virtual void removeAll(); virtual void removeUnreferenced(); virtual AnimationPtr get(const std::string& name); virtual AnimationPtr get(ResourceHandle handle); virtual AnimationPtr getPtr(const std::string& name); virtual AnimationPtr getPtr(ResourceHandle handle); virtual ResourceHandle getResourceHandle(const std::string& name); virtual void invalidate(const std::string& name); virtual void invalidate(ResourceHandle handle); virtual void invalidateAll(); }; enum TextureFiltering { TEXTURE_FILTER_NONE = 0, TEXTURE_FILTER_BILINEAR = 1, TEXTURE_FILTER_TRILINEAR = 2, TEXTURE_FILTER_ANISOTROPIC = 3 }; class RenderBackend { public: virtual ~RenderBackend(); virtual const std::string& getName() const = 0; void captureScreen(const std::string& filename); void captureScreen(const std::string& filename, uint32_t width, uint32_t height); const ScreenMode& getCurrentScreenMode() const; uint32_t getWidth() const; uint32_t getHeight() const; uint32_t getScreenWidth() const; uint32_t getScreenHeight() const; const Rect& getArea(); const Rect& getClipArea() const; void setAlphaOptimizerEnabled(bool enabled); bool isAlphaOptimizerEnabled(); void setImageCompressingEnabled(bool enabled); bool isImageCompressingEnabled() const; void setFramebufferEnabled(bool enabled); bool isFramebufferEnabled() const; void setNPOTEnabled(bool enabled); bool isNPOTEnabled() const; void setTextureFiltering(TextureFiltering filter); TextureFiltering getTextureFiltering() const; void setMipmappingEnabled(bool enabled); bool isMipmappingEnabled() const; void setMonochromeEnabled(bool enabled); bool isMonochromeEnabled() const; void setColorKeyEnabled(bool colorkeyenable); bool isColorKeyEnabled() const; void setColorKey(const SDL_Color& colorkey); const SDL_Color& getColorKey() const; const SDL_PixelFormat& getPixelFormat() const; void setBackgroundColor(uint8_t r, uint8_t g, uint8_t b); void resetBackgroundColor(); void setVSyncEnabled(bool vsync); bool isVSyncEnabled() const; void setFrameLimitEnabled(bool limited); bool isFrameLimitEnabled() const; void setFrameLimit(uint16_t framelimit); uint16_t getFrameLimit() const; }; enum MouseCursorType { CURSOR_NONE, CURSOR_NATIVE, CURSOR_IMAGE, CURSOR_ANIMATION }; enum NativeCursor { NC_ARROW = 1000000, NC_IBEAM, NC_WAIT, NC_CROSS, NC_WAITARROW, NC_RESIZENWSE, NC_RESIZENESW, NC_RESIZEWE, NC_RESIZENS, NC_RESIZEALL, NC_NO, NC_HAND }; %apply int32_t *OUTPUT { int32_t* x, int32_t* y }; class Cursor { public: virtual ~Cursor() {} virtual void draw(); void set(uint32_t cursor_id=0); void set(AnimationPtr anim); void set(ImagePtr image); void setDrag(AnimationPtr anim, int32_t drag_offset_x=0, int32_t drag_offset_y=0); void setDrag(ImagePtr image, int32_t drag_offset_x=0, int32_t drag_offset_y=0); void resetDrag(); MouseCursorType getType() const; uint32_t getId() const; ImagePtr getImage(); AnimationPtr getAnimation(); MouseCursorType getDragType() const; ImagePtr getDragImage(); AnimationPtr getDragAnimation(); uint32_t getX() const; uint32_t getY() const; void setPosition(uint32_t x, uint32_t y); void getPosition(int32_t* x, int32_t* y); private: Cursor(); }; class ScreenMode { public: ~ScreenMode(); uint16_t getWidth() const; uint16_t getHeight() const; uint16_t getBPP() const; uint16_t getRefreshRate() const; uint32_t getSDLFlags() const; bool isFullScreen(); bool isOpenGL(); bool isSDL() const; uint8_t getDisplay() const; const std::string& getRenderDriverName() const; static const uint32_t WINDOWED_OPENGL; static const uint32_t FULLSCREEN_OPENGL; static const uint32_t WINDOWED_SDL; static const uint32_t FULLSCREEN_SDL; }; class DeviceCaps { public: DeviceCaps(); ~DeviceCaps(); void fillDeviceCaps(); std::vector getSupportedScreenModes() const; ScreenMode getNearestScreenMode(uint16_t width, uint16_t height, uint16_t bpp, const std::string& renderer, bool fs) const; ScreenMode getNearestScreenMode(uint16_t width, uint16_t height, uint16_t bpp, const std::string& renderer, bool fs, uint16_t refresh, uint8_t display = 0) const; std::string getVideoDriverName() const; std::vector getAvailableVideoDrivers() const; std::string getRenderDriverName() const; void setRenderDriverName(const std::string& driver); std::vector getAvailableRenderDrivers() const; uint8_t getDisplayCount() const; std::string getDisplayName(uint8_t display = 0) const; uint32_t getDesktopFormat(uint8_t display = 0) const; int32_t getDesktopRefreshRate(uint8_t display = 0) const; int32_t getDesktopWidth(uint8_t display = 0) const; int32_t getDesktopHeight(uint8_t display = 0) const; Rect getDisplayBounds(uint8_t display = 0) const; }; class AtlasBlock { public: uint32_t page; uint32_t left, right, top, bottom; AtlasBlock(const Rect& rect, uint32_t page); AtlasBlock(); void setTrivial(); bool isTrivial() const; uint32_t getWidth() const; uint32_t getHeight() const; AtlasBlock intersects(AtlasBlock const& rect) const; void merge(AtlasBlock const& rect); }; class AtlasBook { public: AtlasBook(uint32_t pageWidth, uint32_t pageHeight, uint32_t pixelSize = 4); AtlasBlock* getBlock(uint32_t width, uint32_t height); void shrink(bool pot); }; %extend AtlasBook { uint32_t getPageWidth(uint32_t index) { return $self->getPage(index).getWidth(); } uint32_t getPageHeight(uint32_t index) { return $self->getPage(index).getHeight(); } } class Color { public: Color(uint8_t r = 0, uint8_t g = 0, uint8_t b = 0, uint8_t alpha = 255); ~Color(); void set(uint8_t r, uint8_t g, uint8_t b, uint8_t alpha); void setR(uint8_t r); void setG(uint8_t g); void setB(uint8_t b); void setAlpha(uint8_t alpha); uint8_t getR() const; uint8_t getG() const; uint8_t getB() const; uint8_t getAlpha() const; }; } fifengine-0.4.1/engine/core/view/000077500000000000000000000000001304641216200166145ustar00rootroot00000000000000fifengine-0.4.1/engine/core/view/camera.cpp000066400000000000000000000771051304641216200205620ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "model/metamodel/grids/cellgrid.h" #include "model/metamodel/action.h" #include "model/metamodel/timeprovider.h" #include "model/structures/map.h" #include "model/structures/layer.h" #include "model/structures/instancetree.h" #include "model/structures/instance.h" #include "model/structures/location.h" #include "util/log/logger.h" #include "util/math/fife_math.h" #include "util/math/angles.h" #include "util/time/timemanager.h" #include "video/renderbackend.h" #include "video/image.h" #include "video/animation.h" #include "video/imagemanager.h" #include "camera.h" #include "layercache.h" #include "visual.h" namespace FIFE { static Logger _log(LM_CAMERA); // to avoid std::bad_alloc errors, we determine the maximum size of batches const uint32_t MAX_BATCH_SIZE = 100000; class MapObserver : public MapChangeListener { Camera* m_camera; public: MapObserver(Camera* camera) { m_camera = camera; } virtual ~MapObserver() {} virtual void onMapChanged(Map* map, std::vector& changedLayers) { } virtual void onLayerCreate(Map* map, Layer* layer) { m_camera->addLayer(layer); } virtual void onLayerDelete(Map* map, Layer* layer) { m_camera->removeLayer(layer); } }; Camera::Camera(const std::string& id, Layer *layer, const Rect& viewport, RenderBackend* renderbackend): m_id(id), m_matrix(), m_inverse_matrix(), m_tilt(0), m_rotation(0), m_zoom(1), m_zToY(0), m_enabledZToY(false), m_location(), m_cur_origo(ScreenPoint(0,0,0)), m_viewport(), m_mapViewPort(), m_mapViewPortUpdated(false), m_screen_cell_width(1), m_screen_cell_height(1), m_referenceScaleX(1), m_referenceScaleY(1), m_enabled(true), m_attachedto(NULL), m_image_dimensions(), m_transform(NoneTransform), m_renderers(), m_pipeline(), m_updated(false), m_renderbackend(renderbackend), m_layerToInstances(), m_lighting(false), m_light_colors(), m_col_overlay(false), m_img_overlay(false), m_ani_overlay(false) { m_viewport = viewport; m_map_observer = new MapObserver(this); m_map = 0; Location location; location.setLayer(layer); setLocation(location); } Camera::~Camera() { // Trigger removal of LayerCaches and MapObserver updateMap(NULL); std::map::iterator r_it = m_renderers.begin(); for(; r_it != m_renderers.end(); ++r_it) { r_it->second->reset(); delete r_it->second; } m_renderers.clear(); delete m_map_observer; } void Camera::setTilt(double tilt) { if (!Mathd::Equal(m_tilt, tilt)) { m_transform |= TiltTransform; m_tilt = tilt; updateReferenceScale(); updateMatrices(); } } double Camera::getTilt() const { return m_tilt; } void Camera::setRotation(double rotation) { if (!Mathd::Equal(m_rotation, rotation)) { m_transform |= RotationTransform; m_rotation = rotation; updateMatrices(); } } double Camera::getRotation() const { return m_rotation; } void Camera::setZoom(double zoom) { if (!Mathd::Equal(m_zoom, zoom)) { m_transform |= ZoomTransform; m_zoom = zoom; if (m_zoom < 0.001) { m_zoom = 0.001; } updateMatrices(); } } double Camera::getZoom() const { return m_zoom; } double Camera::getOriginalZToY() const { DoubleMatrix matrix; matrix.loadScale(m_referenceScaleX, m_referenceScaleY, m_referenceScaleX); if (m_location.getLayer()) { CellGrid* cg = m_location.getLayer()->getCellGrid(); if (cg) { ExactModelCoordinate pt = m_location.getMapCoordinates(); matrix.applyTranslate(-pt.x*m_referenceScaleX, -pt.y*m_referenceScaleY, -pt.z*m_referenceScaleX); } } matrix.applyRotate(-m_rotation, 0.0, 0.0, 1.0); matrix.applyRotate(-m_tilt, 1.0, 0.0, 0.0); return matrix.m9 * -1.0; } void Camera::setZToY(double zToY) { m_enabledZToY = true; if (!Mathd::Equal(m_zToY, zToY)) { m_transform |= ZTransform; m_zToY = zToY; updateMatrices(); } } double Camera::getZToY() const { return m_zToY; } void Camera::setZToYEnabled(bool enabled) { m_enabledZToY = enabled; } bool Camera::isZToYEnabled() const { return m_enabledZToY; } void Camera::setCellImageDimensions(uint32_t width, uint32_t height) { m_screen_cell_width = width; m_screen_cell_height = height; updateReferenceScale(); updateMatrices(); m_transform |= PositionTransform; } void Camera::setLocation(const Location& location) { if (m_location == location ) { return; } CellGrid* cell_grid = NULL; if (location.getLayer()) { cell_grid = location.getLayer()->getCellGrid(); } else { throw Exception("Location without layer given to Camera::setLocation"); } if (!cell_grid) { throw Exception("Camera layer has no cellgrid specified"); } m_transform |= PositionTransform; m_location = location; updateMatrices(); ExactModelCoordinate emc = m_location.getMapCoordinates(); m_cur_origo = toScreenCoordinates(emc); // WARNING // It is important that m_location is already set, // as the updates which are triggered here // need to calculate screen-coordinates // which depend on m_location. updateMap(m_location.getMap()); } void Camera::updateMap(Map* map) { if(m_map == map) { return; } if(m_map) { m_map->removeChangeListener(m_map_observer); const std::list& layers = m_map->getLayers(); for(std::list::const_iterator i = layers.begin(); i !=layers.end(); ++i) { removeLayer(*i); } } if(map) { map->addChangeListener(m_map_observer); const std::list& layers = map->getLayers(); for(std::list::const_iterator i = layers.begin(); i !=layers.end(); ++i) { addLayer(*i); } } m_map = map; } Point Camera::getCellImageDimensions() { return getCellImageDimensions(m_location.getLayer()); } Point Camera::getCellImageDimensions(Layer* layer) { if (layer == m_location.getLayer()) { return Point( m_screen_cell_width, m_screen_cell_height ); } std::map::iterator it = m_image_dimensions.find(layer); if (it != m_image_dimensions.end()) { return it->second; } Point p; DoublePoint dimensions = getLogicalCellDimensions(layer); p.x = static_cast(round(m_referenceScaleX * dimensions.x)); p.y = static_cast(round(m_referenceScaleY * dimensions.y)); m_image_dimensions[layer] = p; return p; } Location Camera::getLocation() const { return m_location; } Location& Camera::getLocationRef() { return m_location; } void Camera::setViewPort(const Rect& viewport) { m_viewport = viewport; } const Rect& Camera::getViewPort() const { return m_viewport; } const Rect& Camera::getMapViewPort() { if (!m_mapViewPortUpdated) { ScreenPoint sp1(m_viewport.x, m_viewport.y); ScreenPoint sp2(m_viewport.x, m_viewport.y + m_viewport.h); ScreenPoint sp3(m_viewport.x + m_viewport.w, m_viewport.y); ScreenPoint sp4(m_viewport.x + m_viewport.w, m_viewport.y + m_viewport.h); std::vector coords; coords.push_back(toMapCoordinates(sp2, false)); coords.push_back(toMapCoordinates(sp3, false)); coords.push_back(toMapCoordinates(sp4, false)); ExactModelCoordinate emc = toMapCoordinates(sp1, false); ModelCoordinate min(static_cast(emc.x), static_cast(emc.y)); ModelCoordinate max(static_cast(emc.x+0.5), static_cast(emc.y+0.5)); std::vector::iterator it = coords.begin(); for (; it != coords.end(); ++it) { min.x = std::min(min.x, static_cast((*it).x)); min.y = std::min(min.y, static_cast((*it).y)); max.x = std::max(max.x, static_cast((*it).x+0.5)); max.y = std::max(max.y, static_cast((*it).y+0.5)); } // makes the viewport a bit larger m_mapViewPort.x = min.x - 1; m_mapViewPort.y = min.y - 1; m_mapViewPort.w = ABS(max.x - min.x) + 2; m_mapViewPort.h = ABS(max.y - min.y) + 2; m_mapViewPortUpdated = true; } return m_mapViewPort; } Rect Camera::getLayerViewPort(Layer* layer) { Rect mapView = getMapViewPort(); Location loc(layer); ExactModelCoordinate emc(mapView.x, mapView.y); loc.setMapCoordinates(emc); emc.x = mapView.x+mapView.w; emc.y = mapView.y+mapView.h; mapView.x = loc.getLayerCoordinates().x; mapView.y = loc.getLayerCoordinates().y; loc.setMapCoordinates(emc); mapView.w = ABS(loc.getLayerCoordinates().x - mapView.x); mapView.h = ABS(loc.getLayerCoordinates().y - mapView.y); return mapView; } void Camera::setEnabled(bool enabled) { m_enabled = enabled; } bool Camera::isEnabled() { return m_enabled; } Point3D Camera::getOrigin() const { return m_cur_origo; } void Camera::updateMatrices() { m_matrix.loadScale(m_referenceScaleX, m_referenceScaleY, m_referenceScaleX); m_vs_matrix.loadScale(m_referenceScaleX, m_referenceScaleY, m_referenceScaleX); if (m_location.getLayer()) { CellGrid* cg = m_location.getLayer()->getCellGrid(); if (cg) { ExactModelCoordinate pt = m_location.getMapCoordinates(); m_matrix.applyTranslate(-pt.x*m_referenceScaleX, -pt.y*m_referenceScaleY, -pt.z*m_referenceScaleX); } } m_matrix.applyRotate(-m_rotation, 0.0, 0.0, 1.0); m_matrix.applyRotate(-m_tilt, 1.0, 0.0, 0.0); if (m_enabledZToY) { m_matrix.m9 = -m_zToY; // z -> y height in pixels } double scale = m_zoom; m_matrix.applyScale(scale, scale, scale); m_matrix.applyTranslate(+m_viewport.x+m_viewport.w/2, +m_viewport.y+m_viewport.h/2, 0); m_inverse_matrix = m_matrix.inverse(); m_vs_matrix.applyRotate(-m_rotation, 0.0, 0.0, 1.0); m_vs_matrix.applyRotate(-m_tilt, 1.0, 0.0, 0.0); if (m_enabledZToY) { m_vs_matrix.m9 = -m_zToY; // z -> y height in pixels } m_vs_inverse_matrix = m_vs_matrix.inverse(); // calculate the screen<->virtual screen transformation // this explicitly ignores the z-value. m_vscreen_2_screen = m_matrix; // NOTE: mult4by4 is an in-place modification. m_vscreen_2_screen.mult4by4(m_vs_inverse_matrix); // set the z transformation to unity const int32_t N=4; for(int32_t i=0; i!=N; ++i) { m_vscreen_2_screen[2*N + i] = 0; m_vscreen_2_screen[i*N + 2] = 0; } m_vscreen_2_screen[2*N + 2] = 1; m_screen_2_vscreen = m_vscreen_2_screen.inverse(); m_mapViewPortUpdated = false; // FL_WARN(_log, LMsg("matrix: ") << m_matrix << " 1: " << m_matrix.inverse().mult4by4(m_matrix)); // FL_WARN(_log, LMsg("vs2s matrix: ") << m_vscreen_2_screen << " s2vs matrix: " << m_screen_2_vscreen); } void Camera::calculateZValue(ScreenPoint& screen_coords) { int32_t dy = -(screen_coords.y - toScreenCoordinates(m_location.getMapCoordinates()).y); screen_coords.z = static_cast(Mathd::Tan(m_tilt * (Mathd::pi() / 180.0)) * static_cast(dy)); } ExactModelCoordinate Camera::toMapCoordinates(ScreenPoint screen_coords, bool z_calculated) { if (!z_calculated) { calculateZValue(screen_coords); } return m_inverse_matrix * intPt2doublePt(screen_coords); } ScreenPoint Camera::toScreenCoordinates(const ExactModelCoordinate& elevation_coords) { ScreenPoint pt = doublePt2intPt(m_matrix * elevation_coords); return pt; } DoublePoint3D Camera::toVirtualScreenCoordinates(const ExactModelCoordinate& elevation_coords) { DoublePoint3D pt = (m_vs_matrix * elevation_coords); return pt; } ScreenPoint Camera::virtualScreenToScreen(const DoublePoint3D& p) { return doublePt2intPt(m_vscreen_2_screen * p); } DoublePoint3D Camera::screenToVirtualScreen(const ScreenPoint& p) { return m_screen_2_vscreen * intPt2doublePt(p); } DoublePoint Camera::getLogicalCellDimensions(Layer* layer) { assert(layer); CellGrid* cg = layer->getCellGrid(); assert(cg); ModelCoordinate cell(0,0); std::vector vertices; cg->getVertices(vertices, cell); DoubleMatrix mtx; mtx.loadRotate(m_rotation, 0.0, 0.0, 1.0); mtx.applyRotate(m_tilt, 1.0, 0.0, 0.0); double x1 = 0; double x2 = 0; double y1 = 0; double y2 = 0; for (uint32_t i = 0; i < vertices.size(); i++) { vertices[i] = cg->toMapCoordinates(vertices[i]); vertices[i] = mtx * vertices[i]; if (i == 0) { x1 = x2 = vertices[0].x; y1 = y2 = vertices[0].y; } else { x1 = std::min(vertices[i].x, x1); x2 = std::max(vertices[i].x, x2); y1 = std::min(vertices[i].y, y1); y2 = std::max(vertices[i].y, y2); } } return DoublePoint( x2 - x1, y2 - y1 ); } Point Camera::getRealCellDimensions(Layer* layer) { assert(layer && layer->getCellGrid()); Location loc(layer); ModelCoordinate cell(0,0); loc.setLayerCoordinates(cell); ScreenPoint sp1 = toScreenCoordinates(loc.getMapCoordinates()); ++cell.y; loc.setLayerCoordinates(cell); ScreenPoint sp2 = toScreenCoordinates(loc.getMapCoordinates()); Point p(ABS(sp2.x - sp1.x), ABS(sp2.y - sp1.y)); if (p.x == 0) { p.x = 1; } if (p.y == 0) { p.y = 1; } return p; } Point3D Camera::getZOffset(Layer* layer) { assert(layer && layer->getCellGrid()); Location loc(layer); ModelCoordinate cell(0,0,0); loc.setLayerCoordinates(cell); ScreenPoint sp1 = toScreenCoordinates(loc.getMapCoordinates()); ++cell.z; loc.setLayerCoordinates(cell); ScreenPoint sp2 = toScreenCoordinates(loc.getMapCoordinates()); return Point3D(sp2.x - sp1.x, sp2.y - sp1.y, sp2.z - sp1.z); } void Camera::updateReferenceScale() { DoublePoint dim = getLogicalCellDimensions(m_location.getLayer()); m_referenceScaleX = static_cast(m_screen_cell_width) / dim.x; m_referenceScaleY = static_cast(m_screen_cell_height) / dim.y; FL_DBG(_log, "Updating reference scale"); FL_DBG(_log, LMsg(" tilt=") << m_tilt << " rot=" << m_rotation); FL_DBG(_log, LMsg(" m_screen_cell_width=") << m_screen_cell_width); FL_DBG(_log, LMsg(" m_screen_cell_height=") << m_screen_cell_height); FL_DBG(_log, LMsg(" m_referenceScaleX=") << m_referenceScaleX); FL_DBG(_log, LMsg(" m_referenceScaleY=") << m_referenceScaleY); } RenderList& Camera::getRenderListRef(Layer* layer) { return m_layerToInstances[layer]; } void Camera::getMatchingInstances(ScreenPoint screen_coords, Layer& layer, std::list& instances, uint8_t alpha) { instances.clear(); bool zoomed = !Mathd::Equal(m_zoom, 1.0); bool special_alpha = alpha != 0; const RenderList& layer_instances = m_layerToInstances[&layer]; RenderList::const_iterator instance_it = layer_instances.end(); while (instance_it != layer_instances.begin()) { --instance_it; Instance* i = (*instance_it)->instance; const RenderItem& vc = **instance_it; if ((vc.dimensions.contains(Point(screen_coords.x, screen_coords.y)))) { if(vc.image->isSharedImage()) { vc.image->forceLoadInternal(); } uint8_t r, g, b, a = 0; int32_t x = screen_coords.x - vc.dimensions.x; int32_t y = screen_coords.y - vc.dimensions.y; if (zoomed) { double fx = static_cast(x); double fy = static_cast(y); double fow = static_cast(vc.image->getWidth()); double foh = static_cast(vc.image->getHeight()); double fsw = static_cast(vc.dimensions.w); double fsh = static_cast(vc.dimensions.h); x = static_cast(round(fx / fsw * fow)); y = static_cast(round(fy / fsh * foh)); } if (vc.getAnimationOverlay()) { std::vector* ao = vc.getAnimationOverlay(); std::vector::iterator it = ao->begin(); for (; it != ao->end(); ++it) { if ((*it)->isSharedImage()) { (*it)->forceLoadInternal(); } (*it)->getPixelRGBA(x, y, &r, &g, &b, &a); // instance is hit with mouse if not totally transparent if (a == 0 || (special_alpha && a < alpha)) { continue; } instances.push_back(i); break; } } else { vc.image->getPixelRGBA(x, y, &r, &g, &b, &a); // instance is hit with mouse if not totally transparent if (a == 0 || (special_alpha && a < alpha)) { continue; } instances.push_back(i); } } } } void Camera::getMatchingInstances(Rect screen_rect, Layer& layer, std::list& instances, uint8_t alpha) { instances.clear(); bool zoomed = !Mathd::Equal(m_zoom, 1.0); bool special_alpha = alpha != 0; const RenderList& layer_instances = m_layerToInstances[&layer]; RenderList::const_iterator instance_it = layer_instances.end(); while (instance_it != layer_instances.begin()) { --instance_it; Instance* i = (*instance_it)->instance;; const RenderItem& vc = **instance_it; if ((vc.dimensions.intersects(screen_rect))) { if(vc.image->isSharedImage()) { vc.image->forceLoadInternal(); } uint8_t r, g, b, a = 0; for(int32_t xx = screen_rect.x; xx < screen_rect.x + screen_rect.w; xx++) { for(int32_t yy = screen_rect.y; yy < screen_rect.y + screen_rect.h; yy++) { if ((vc.dimensions.contains(Point(xx, yy)))) { int32_t x = xx - vc.dimensions.x; int32_t y = yy - vc.dimensions.y; if (zoomed) { double fx = static_cast(x); double fy = static_cast(y); double fow = static_cast(vc.image->getWidth()); double foh = static_cast(vc.image->getHeight()); double fsw = static_cast(vc.dimensions.w); double fsh = static_cast(vc.dimensions.h); x = static_cast(round(fx / fsw * fow)); y = static_cast(round(fy / fsh * foh)); } if (vc.getAnimationOverlay()) { std::vector* ao = vc.getAnimationOverlay(); std::vector::iterator it = ao->begin(); for (; it != ao->end(); ++it) { if ((*it)->isSharedImage()) { (*it)->forceLoadInternal(); } (*it)->getPixelRGBA(x, y, &r, &g, &b, &a); // instance is hit with mouse if not totally transparent if (a == 0 || (special_alpha && a < alpha)) { continue; } instances.push_back(i); goto found_non_transparent_pixel; } } else { vc.image->getPixelRGBA(x, y, &r, &g, &b, &a); // instance is hit with mouse if not totally transparent if (a == 0 || (special_alpha && a < alpha)) { continue; } instances.push_back(i); goto found_non_transparent_pixel; } } } } found_non_transparent_pixel:; } } } void Camera::getMatchingInstances(Location& loc, std::list& instances, bool use_exactcoordinates) { instances.clear(); Layer* layer = loc.getLayer(); if(!layer) { return; } const RenderList& layer_instances = m_layerToInstances[layer]; RenderList::const_iterator instance_it = layer_instances.end(); while (instance_it != layer_instances.begin()) { --instance_it; Instance* i = (*instance_it)->instance; if (use_exactcoordinates) { if (i->getLocationRef().getExactLayerCoordinatesRef() == loc.getExactLayerCoordinatesRef()) { instances.push_back(i); } } else { if (i->getLocationRef().getLayerCoordinates() == loc.getLayerCoordinates()) { instances.push_back(i); } } } } void Camera::attach(Instance *instance) { // fail if the layers aren't the same if (m_location.getLayer()->getId() != instance->getLocation().getLayer()->getId()) { FL_WARN(_log, "Tried to attach camera to instance on different layer."); return ; } m_attachedto = instance; } void Camera::detach() { m_attachedto = NULL; } void Camera::update() { if (!m_attachedto) { return; } ExactModelCoordinate& old_emc = m_location.getExactLayerCoordinatesRef(); ExactModelCoordinate new_emc = m_attachedto->getLocationRef().getExactLayerCoordinates(m_location.getLayer()); if (Mathd::Equal(old_emc.x, new_emc.x) && Mathd::Equal(old_emc.y, new_emc.y)) { return; } m_transform |= PositionTransform; old_emc = new_emc; updateMatrices(); } void Camera::refresh() { updateMatrices(); m_transform |= RotationTransform; } void Camera::resetUpdates() { if (m_transform == NoneTransform) { m_updated = false; } else { m_updated = true; } m_transform = NoneTransform; } bool pipelineSort(const RendererBase* lhs, const RendererBase* rhs) { return (lhs->getPipelinePosition() < rhs->getPipelinePosition()); } void Camera::addRenderer(RendererBase* renderer) { renderer->setRendererListener(this); m_renderers[renderer->getName()] = renderer; if (renderer->isEnabled()) { m_pipeline.push_back(renderer); } m_pipeline.sort(pipelineSort); } void Camera::onRendererPipelinePositionChanged(RendererBase* renderer) { m_pipeline.sort(pipelineSort); } void Camera::onRendererEnabledChanged(RendererBase* renderer) { assert(m_renderers[renderer->getName()]); if (renderer->isEnabled()) { FL_LOG(_log, LMsg("Enabling renderer ") << renderer->getName()); m_pipeline.push_back(renderer); m_pipeline.sort(pipelineSort); } else { m_pipeline.remove(renderer); } } RendererBase* Camera::getRenderer(const std::string& name) { return m_renderers[name]; } void Camera::resetRenderers() { std::map::iterator r_it = m_renderers.begin(); for (; r_it != m_renderers.end(); ++r_it) { r_it->second->reset(); } } void Camera::addLayer(Layer* layer) { m_cache[layer] = new LayerCache(this); m_cache[layer]->setLayer(layer); m_layerToInstances[layer] = RenderList(); refresh(); } void Camera::removeLayer(Layer* layer) { delete m_cache[layer]; m_cache.erase(layer); m_layerToInstances.erase(layer); refresh(); } void Camera::setLightingColor(float red, float green, float blue) { m_lighting = true; m_light_colors.clear(); m_light_colors.push_back(red); m_light_colors.push_back(green); m_light_colors.push_back(blue); } std::vector Camera::getLightingColor() { if(m_light_colors.empty()) { for(int32_t colors = 0; colors != 3; ++colors) { m_light_colors.push_back(1.0f); } } return m_light_colors; } void Camera::resetLightingColor() { m_lighting = false; m_renderbackend->resetLighting(); } void Camera::setOverlayColor(uint8_t red, uint8_t green, uint8_t blue, uint8_t alpha) { m_col_overlay = true; m_overlay_color.r = red; m_overlay_color.g = green; m_overlay_color.b = blue; m_overlay_color.a = alpha; } std::vector Camera::getOverlayColor() { std::vector colors; if (m_col_overlay) { colors.push_back(m_overlay_color.r); colors.push_back(m_overlay_color.g); colors.push_back(m_overlay_color.b); colors.push_back(m_overlay_color.a); } else { for(uint8_t cc = 0; cc != 4; ++cc) { colors.push_back(255); } } return colors; } void Camera::resetOverlayColor() { m_col_overlay = false; } void Camera::setOverlayImage(int32_t id, bool fill) { m_img_overlay = true; m_img_id = id; m_img_fill = fill; } int32_t Camera::getOverlayImage() { int32_t id = -1; if (m_img_overlay) { id = m_img_id; } return id; } void Camera::resetOverlayImage() { m_img_overlay = false; m_img_id = -1; } void Camera::setOverlayAnimation(AnimationPtr anim, bool fill) { m_ani_overlay = true; m_ani_ptr = anim; m_ani_fill = fill; m_start_time = 0; } AnimationPtr Camera::getOverlayAnimation() { return m_ani_ptr; } void Camera::resetOverlayAnimation() { m_ani_overlay = false; m_ani_ptr.reset(); } void Camera::renderOverlay() { if (!m_col_overlay && !m_img_overlay && !m_ani_overlay) { return; } uint16_t width = m_viewport.w; uint16_t height = m_viewport.h; Point pm = Point(m_viewport.x + width/2, m_viewport.y + height/2); Rect r; // color overlay if (m_col_overlay) { Point p = Point(m_viewport.x, m_viewport.y); m_renderbackend->fillRectangle(p, width, height, m_overlay_color.r, m_overlay_color.g, m_overlay_color.b, m_overlay_color.a); } // image overlay if (m_img_overlay) { ImagePtr resptr = ImageManager::instance()->get(m_img_id); Image* img = resptr.get(); if (img) { if (m_img_fill) { r.w = width; r.h = height; } else { r.w = img->getWidth(); r.h = img->getHeight(); } r.x = pm.x-r.w/2; r.y = pm.y-r.h/2; img->render(r); } } // animation overlay if (m_ani_overlay) { assert(m_ani_ptr != 0); if (m_start_time == 0) { m_start_time = TimeManager::instance()->getTime(); } uint32_t animtime = scaleTime(1.0, TimeManager::instance()->getTime() - m_start_time) % m_ani_ptr->getDuration(); ImagePtr img = m_ani_ptr->getFrameByTimestamp(animtime); if (img) { if (m_ani_fill) { r.w = width; r.h = height; } else { r.w = img->getWidth(); r.h = img->getHeight(); } r.x = pm.x-r.w/2; r.y = pm.y-r.h/2; img->render(r); } } } void Camera::renderStaticLayer(Layer* layer, bool update) { // ToDo: Remove this function from the camera class to something like engine pre-render. // ToDo: Check if partial rendering of only updated RenderItems to existing FBO is possible/faster in our case. // ToDo: Add and fix support for SDL backend, for SDL it works only on the lowest layer(alpha/transparent bug). LayerCache* cache = m_cache[layer]; ImagePtr cacheImage = cache->getCacheImage(); if (!cacheImage.get()) { // the cacheImage name will be, camera id + _virtual_layer_image_ + layer id cacheImage = ImageManager::instance()->loadBlank(m_id+"_virtual_layer_image_"+layer->getId(), m_viewport.w, m_viewport.h); cache->setCacheImage(cacheImage); update = true; } if (update) { // for the case that the viewport size is not the same as the screen size, // we have to change the values for OpenGL backend Rect rec(0, m_renderbackend->getHeight()-m_viewport.h, m_viewport.w, m_viewport.h); if (m_renderbackend->getName() == "SDL") { rec = m_viewport; } m_renderbackend->attachRenderTarget(cacheImage, true); // here we use the new viewport size m_renderbackend->pushClipArea(rec, false); // render stuff to texture RenderList& instancesToRender = m_layerToInstances[layer]; // split the RenderList into smaller parts if (instancesToRender.size() > MAX_BATCH_SIZE) { uint8_t batches = ceil(instancesToRender.size() / static_cast(MAX_BATCH_SIZE)); uint32_t residual = instancesToRender.size() % MAX_BATCH_SIZE; for (uint8_t i = 0; i < batches; ++i) { uint32_t start = i*MAX_BATCH_SIZE; uint32_t end = start + ((i+1 == batches) ? residual : MAX_BATCH_SIZE); RenderList tempList(instancesToRender.begin() + start, instancesToRender.begin() + end); std::list::iterator r_it = m_pipeline.begin(); for (; r_it != m_pipeline.end(); ++r_it) { if ((*r_it)->isActivedLayer(layer)) { (*r_it)->render(this, layer, tempList); m_renderbackend->renderVertexArrays(); } } } } else { std::list::iterator r_it = m_pipeline.begin(); for (; r_it != m_pipeline.end(); ++r_it) { if ((*r_it)->isActivedLayer(layer)) { (*r_it)->render(this, layer, instancesToRender); m_renderbackend->renderVertexArrays(); } } } m_renderbackend->detachRenderTarget(); m_renderbackend->popClipArea(); } } void Camera::updateRenderLists() { Map* map = m_location.getMap(); if (!map) { FL_ERR(_log, "No map for camera found"); return; } const std::list& layers = map->getLayers(); std::list::const_iterator layer_it = layers.begin(); for (;layer_it != layers.end(); ++layer_it) { LayerCache* cache = m_cache[*layer_it]; if(!cache) { addLayer(*layer_it); cache = m_cache[*layer_it]; FL_ERR(_log, LMsg("Layer Cache miss! (This shouldn't happen!)") << (*layer_it)->getId()); } RenderList& instancesToRender = m_layerToInstances[*layer_it]; if ((*layer_it)->isStatic() && m_transform == NoneTransform) { continue; } cache->update(m_transform, instancesToRender); } resetUpdates(); } void Camera::render() { updateRenderLists(); Map* map = m_location.getMap(); if (!map) { return; } uint32_t lm = m_renderbackend->getLightingModel(); if (lm != 0) { m_renderbackend->resetStencilBuffer(0); if (m_lighting) { m_renderbackend->setLighting(m_light_colors[0], m_light_colors[1], m_light_colors[2]); } } const std::list& layers = map->getLayers(); std::list::const_iterator layer_it = layers.begin(); for ( ; layer_it != layers.end(); ++layer_it) { // layer with static flag will rendered as one texture if ((*layer_it)->isStatic()) { renderStaticLayer(*layer_it, m_updated); continue; } } m_renderbackend->pushClipArea(getViewPort()); layer_it = layers.begin(); for ( ; layer_it != layers.end(); ++layer_it) { // layer with static flag will rendered as one texture if ((*layer_it)->isStatic()) { m_cache[*layer_it]->getCacheImage()->render(m_viewport); m_renderbackend->renderVertexArrays(); continue; } RenderList& instancesToRender = m_layerToInstances[*layer_it]; // split the RenderList into smaller parts if (instancesToRender.size() > MAX_BATCH_SIZE) { uint8_t batches = ceil(instancesToRender.size() / static_cast(MAX_BATCH_SIZE)); uint32_t residual = instancesToRender.size() % MAX_BATCH_SIZE; for (uint8_t i = 0; i < batches; ++i) { uint32_t start = i*MAX_BATCH_SIZE; uint32_t end = start + ((i+1 == batches) ? residual : MAX_BATCH_SIZE); RenderList tempList(instancesToRender.begin() + start, instancesToRender.begin() + end); std::list::iterator r_it = m_pipeline.begin(); for (; r_it != m_pipeline.end(); ++r_it) { if ((*r_it)->isActivedLayer(*layer_it)) { (*r_it)->render(this, *layer_it, tempList); m_renderbackend->renderVertexArrays(); } } } } else { std::list::iterator r_it = m_pipeline.begin(); for (; r_it != m_pipeline.end(); ++r_it) { if ((*r_it)->isActivedLayer(*layer_it)) { (*r_it)->render(this, *layer_it, instancesToRender); m_renderbackend->renderVertexArrays(); } } } } renderOverlay(); m_renderbackend->renderVertexArrays(); if (m_lighting && lm != 0) { m_renderbackend->resetLighting(); } m_renderbackend->popClipArea(); } } fifengine-0.4.1/engine/core/view/camera.h000066400000000000000000000407441304641216200202260ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_VIEW_CAMERA_H #define FIFE_VIEW_CAMERA_H // Standard C++ library includes #include #include #include // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "model/structures/location.h" #include "util/structures/rect.h" #include "util/math/matrix.h" #include "video/animation.h" #include "rendererbase.h" namespace FIFE { typedef Point3D ScreenPoint; class Layer; class Instance; class RenderBackend; class LayerCache; class MapObserver; typedef std::map t_layer_to_instances; /** Camera describes properties of a view port shown in the main screen * Main screen can have multiple cameras active simultanously * Different cameras can have different properties, like location * to shoot, zoom or tilt */ class Camera: public IRendererListener, public IRendererContainer { public: enum TransformType { NoneTransform = 0x00, TiltTransform = 0x01, RotationTransform = 0x02, ZoomTransform = 0x04, PositionTransform = 0x08, ZTransform = 0x10 }; typedef uint32_t Transform; /** Constructor * Camera needs to be added to the view. If not done so, it is not rendered. * @param id identifier for the camera * @param layer layer where camera is bound. Camera is bound to a layer for two reasons: * * camera's scaling is done based on cell image dimensions. Cell image is layer based (@see setCellImageDimensions) * * camera could be bound to a pather, which operates on layer * @param viewport used viewport for the camera. Viewport is measured in pixels in relation to game main screen * @param renderbackend to use with rendering */ Camera(const std::string& id, Layer* layer, const Rect& viewport, RenderBackend* renderbackend); /** Destructor */ virtual ~Camera(); /** Gets the identifier for this camera. */ const std::string& getId() const { return m_id; } /** Sets the identifier for this camera. */ void setId(const std::string& id) { m_id = id; } /** Sets tilt for the camera. * e.g. overhead camera has tilt 0, while traditional isometric camera has tilt 45 * @param tilt tilt for the camera */ void setTilt(double tilt); /** Gets camera tilt * @return tilt of camera */ double getTilt() const; /** Sets rotation for the camera. * Rotation can be visualized by thinking camera that rotates around an object * that it is rendering * @param rotation rotation for the camera */ void setRotation(double rotation); /** Gets camera rotation * @return rotation of the camera */ double getRotation() const; /** Sets zoom for the camera. * @param zoom zoom for the camera */ void setZoom(double zoom); /** Gets camera zoom * @return zoom of the camera */ double getZoom() const; /** Gets original zToY transformation value. * @return zToY value of the camera. */ double getOriginalZToY() const; /** Sets zToY value for the camera and enables their use. * This means the factor which influenced the z to y transformation, * so if you set zToY=32 then 1z corresponds to 32 pixels in y direction. * @param zToY influenced the z to y transformation of the camera. */ void setZToY(double zToY); /** Gets zToY value. * @return zToY value of the camera. */ double getZToY() const; /** Sets z to y manipulation enabled / disabled. * @param enabled If true then the zToY value is used instead of the original matrix value. */ void setZToYEnabled(bool enabled); /** Gets if z to y manipulation is enabled / disabled. * @return true if z to y manipulation is enabled, otherwise false. */ bool isZToYEnabled() const; /** Sets screen cell image dimensions. * Cell image dimension is basically width and height of a bitmap, that covers * one cell in the layer where camera is bind * @return Point Point containing x=width and y=height */ void setCellImageDimensions(uint32_t width, uint32_t height); /** Gets screen cell image dimensions. * @see setCellImageDimensions * @return Point containing x=width and y=height */ Point getCellImageDimensions(); /** Gets screen cell image dimensions for given layer. * @return Point Point containing x=width and y=height */ Point getCellImageDimensions(Layer* layer); /** Gets x reference scale for cell image dimensions */ double getReferenceScaleX() const { return m_referenceScaleX; } /** Gets y reference scale for cell image dimensions */ double getReferenceScaleY() const { return m_referenceScaleY; } /** Gets a point that contain the visual z(z=1) difference, based on the given layer. * @return Point3D Point3D containing x, y, z */ Point3D getZOffset(Layer* layer); /** Sets the location for camera * @param location location (center point) to render */ void setLocation(const Location& location); /** Gets the location camera is rendering * @return camera location */ Location getLocation() const; /** Gets screen point for the camera location * @return camera screen point */ Point3D getOrigin() const; /** Gets a reference to the camera location * @note if you change returned location without calling Camera::setLocation(...), * remember to call Camera::refresh() (otherwise camera transforms are not updated) * @return reference to the camera location */ Location& getLocationRef(); /** Attaches the camera to an instance. * @param instance Instance to which the camera shall be attached * @note The camera can only be attached to an instance at the same layer! */ void attach(Instance *instance); /** Detaches the camera from an instance. */ void detach(); /** Returns instance where camera is attached. NULL if not attached */ Instance* getAttached() const { return m_attachedto; } /** Sets the viewport for camera * viewport is rectangle inside the view where camera renders * @param viewport area for camera render */ void setViewPort(const Rect& viewport); /** Gets the viewport for camera in pixel coordinates * @return camera viewport */ const Rect& getViewPort() const; /** Gets the viewport for camera in map coordinates * @return camera viewport */ const Rect& getMapViewPort(); /** Gets the viewport for camera in layer coordinates * @param layer A pointer to the layer whose geometry is used for the conversion * @return camera viewport */ Rect getLayerViewPort(Layer* layer); /** Transforms given point from screen coordinates to map coordinates * @param screen_coords screen coordinates to transform * @param z_calculated if true, z-value (depth cut point) is pre-calculated. If false, camera calculates it * @return point in map coordinates */ ExactModelCoordinate toMapCoordinates(ScreenPoint screen_coords, bool z_calculated=true); /** Transforms given point from map coordinates to screen coordinates * @return point in screen coordinates */ ScreenPoint toScreenCoordinates(const ExactModelCoordinate& map_coords); /** Transforms given point from map coordinates to virtual screen coordinates * @return point in virtual screen coordinates */ DoublePoint3D toVirtualScreenCoordinates(const ExactModelCoordinate& map_coords); /** Transforms given point from virtual screen coordinates to screen coordinates * @return point in screen coordinates */ ScreenPoint virtualScreenToScreen(const DoublePoint3D& p); /** Transforms given point from screen coordinates to virtual screen coordinates * @return point in virtual screen coordinates */ DoublePoint3D screenToVirtualScreen(const ScreenPoint& p); /** Sets camera enabled / disabled */ void setEnabled(bool enabled); /** Gets if camera is enabled / disabled */ bool isEnabled(); /** Returns reference to RenderList. */ RenderList& getRenderListRef(Layer* layer); /** Returns instances that match given screen coordinate * @param screen_coords screen coordinates to be used for hit search * @param layer layer to use for search * @param instances list of instances that is filled based on hit test results * @param alpha the alpha to use to filter the matching instances. Pixels * that have an alpha value higher than what is specified here are * considered a hit. */ void getMatchingInstances(ScreenPoint screen_coords, Layer& layer, std::list& instances, uint8_t alpha = 0); /** Returns instances that match given screen coordinate * @param screen_rect rect that contains screen coordinates to be used for search * @param layer layer to use for search * @param instances list of instances that is filled based on hit test results * @param alpha the alpha to use to filter the matching instances. Pixels * that have an alpha value higher than what is specified here are * considered a hit. */ void getMatchingInstances(Rect screen_rect, Layer& layer, std::list& instances, uint8_t alpha = 0); /** Returns instances that match given location. Instances are sorted based on camera view, so that "topmost" * instance is first in returned list * @param loc location where to fetch instances from * @param instances list of instances that is filled based on hit test results * @param use_exactcoordinates if true, comparison is done using exact coordinates. if not, cell coordinates are used */ void getMatchingInstances(Location& loc, std::list& instances, bool use_exactcoordinates=false); /** General update routine. * In this function, the camera's position gets updated when its attached * to another instance. * @note call this only once in engine update cycle, so that tracking between * current position and previous position keeps in sync. This information * is used e.g. by view to fix the pixel wobbling problem */ void update(); /** Refreshes camera view in case e.g. location is updated directly (not via setLocation) * @note calling this function marks camera as "warped", therefore it causes all instance * positions to be recalculated. If you constantly call this, you end up with pixel wobbling * effect when camera is moved. */ void refresh(); /** Resets temporary values from last update round, like warped flag */ void resetUpdates(); /** Returns true if camera view has been updated, otherwise false */ bool isUpdated() { return m_updated; } /** Adds new renderer on the view. Ownership is transferred to the camera. */ void addRenderer(RendererBase* renderer); /** Gets renderer with given name */ RendererBase* getRenderer(const std::string& name); /** resets active layer information on all renderers. */ void resetRenderers(); /** calculates z-value for given screenpoint */ void calculateZValue(ScreenPoint& screen_coords); void onRendererPipelinePositionChanged(RendererBase* renderer); void onRendererEnabledChanged(RendererBase* renderer); /** Sets lighting color */ void setLightingColor(float red, float green, float blue); /** Resets lighting color */ void resetLightingColor(); /** Returns a vector that contain the light color */ std::vector getLightingColor(); /** Sets a color as overlay */ void setOverlayColor(uint8_t red, uint8_t green, uint8_t blue, uint8_t alpha); /** Returns a vector that contain the overlay color */ std::vector getOverlayColor(); /** Resets the color overlay */ void resetOverlayColor(); /** Sets a image as overlay, * if fill is true the image gets the viewport size. */ void setOverlayImage(int32_t id, bool fill = false); /** Returns the pool id of the overlay image */ int32_t getOverlayImage(); /** Resets the image overlay */ void resetOverlayImage(); /** Sets a animation as overlay, * if fill is true the animation gets the viewport size. */ void setOverlayAnimation(AnimationPtr anim, bool fill = false); /** Returns an AnimationPtr to the overlay animation */ AnimationPtr getOverlayAnimation(); /** Resets the animation overlay */ void resetOverlayAnimation(); /** Renders camera */ void render(); private: friend class MapObserver; void addLayer(Layer* layer); void removeLayer(Layer* layer); void updateMap(Map* map); std::string m_id; /** Updates the camera transformation matrix T with requested values. * The requests are done using these functions : * - setLocation * - setRotation * - setTilt */ void updateMatrices(); /** Updates camera reference scale * Reference scale is in a sense an internal zooming factor, * which adjusts cell dimensions in logical space to ones shown on * screen. Calculation is based on current camera properties (e.g. rotation) * + given cell image dimensions for camera's layer */ void updateReferenceScale(); /** Updates camera RenderLists */ void updateRenderLists(); /** Gets logical cell image dimensions for given layer */ DoublePoint getLogicalCellDimensions(Layer* layer); /** Gets real cell image dimensions for given layer */ Point getRealCellDimensions(Layer* layer); /** Renders the overlay(color, image, animation) for the camera. */ void renderOverlay(); /** Renders the layer part that is on screen as one image. */ void renderStaticLayer(Layer* layer, bool update); DoubleMatrix m_matrix; DoubleMatrix m_inverse_matrix; DoubleMatrix m_vs_matrix; DoubleMatrix m_vs_inverse_matrix; DoubleMatrix m_vscreen_2_screen; DoubleMatrix m_screen_2_vscreen; double m_tilt; double m_rotation; double m_zoom; double m_zToY; bool m_enabledZToY; Location m_location; ScreenPoint m_cur_origo; Rect m_viewport; Rect m_mapViewPort; bool m_mapViewPortUpdated; uint32_t m_screen_cell_width; uint32_t m_screen_cell_height; double m_referenceScaleX; double m_referenceScaleY; bool m_enabled; Instance* m_attachedto; // caches calculated image dimensions for already queried & calculated layers std::map m_image_dimensions; // contains the geometry changes Transform m_transform; // list of renderers managed by the view std::map m_renderers; std::list m_pipeline; // false, if view has not been updated bool m_updated; RenderBackend* m_renderbackend; // caches layer -> instances structure between renders e.g. to fast query of mouse picking order t_layer_to_instances m_layerToInstances; std::map m_cache; MapObserver* m_map_observer; Map* m_map; // is lighting enable bool m_lighting; // caches the light color for the camera std::vector m_light_colors; // overlay stuff bool m_col_overlay; bool m_img_overlay; bool m_ani_overlay; SDL_Color m_overlay_color; int32_t m_img_id; AnimationPtr m_ani_ptr; bool m_img_fill; bool m_ani_fill; uint32_t m_start_time; }; } #endif fifengine-0.4.1/engine/core/view/camera.i000066400000000000000000000077341304641216200202310ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "view/camera.h" #include "view/rendererbase.h" %} %include "view/rendererbase.i" namespace FIFE { typedef Point3D ScreenPoint; %template(ScreenPoint) PointType3D; %apply std::list &OUTPUT { std::list& instances }; class Camera: public IRendererContainer { public: ~Camera(); const std::string& getId() const; void setId(const std::string& id); void setTilt(double tilt); double getTilt() const; void setRotation(double rotation); double getRotation() const; void setZoom(double zoom); double getZoom() const; double getOriginalZToY() const; void setZToY(double zToY); double getZToY() const; void setZToYEnabled(bool enabled); bool isZToYEnabled() const; void setLocation(Location location); Location getLocation() const; Location& getLocationRef(); void attach(Instance *instance); void detach(); Instance* getAttached() const; void setViewPort(const Rect& viewport); const Rect& getViewPort() const; const Rect& getMapViewPort(); Rect getLayerViewPort(Layer* layer); void setCellImageDimensions(uint32_t width, uint32_t height); Point getCellImageDimensions(); Point3D getZOffset(Layer* layer); ScreenPoint toScreenCoordinates(const ExactModelCoordinate& map_coords); ExactModelCoordinate toMapCoordinates(ScreenPoint screen_coords, bool z_calculated=true); void setEnabled(bool enabled); bool isEnabled(); void getMatchingInstances(ScreenPoint screen_coords, Layer& layer, std::list& instances, uint8_t alpha = 0); void getMatchingInstances(Rect screen_rect, Layer& layer, std::list& instances, uint8_t alpha = 0); void getMatchingInstances(Location& loc, std::list& instances, bool use_exactcoordinates=false); RendererBase* getRenderer(const std::string& name); void resetRenderers(); void setLightingColor(float red, float green, float blue); void resetLightingColor(); std::vector getLightingColor(); void setOverlayColor(uint8_t red, uint8_t green, uint8_t blue, uint8_t alpha); std::vector getOverlayColor(); void resetOverlayColor(); void setOverlayImage(int32_t id, bool fill = false); int32_t getOverlayImage(); void resetOverlayImage(); void setOverlayAnimation(AnimationPtr anim, bool fill = false); AnimationPtr getOverlayAnimation(); void resetOverlayAnimation(); void refresh(); private: Camera(); }; %clear std::list& instances; } %clear InstanceLst& instances; fifengine-0.4.1/engine/core/view/layercache.cpp000066400000000000000000000664441304641216200214360ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "model/metamodel/grids/cellgrid.h" #include "model/metamodel/action.h" #include "model/structures/layer.h" #include "model/structures/instance.h" #include "model/structures/location.h" #include "util/base/exception.h" #include "util/log/logger.h" #include "util/math/fife_math.h" #include "util/math/angles.h" #include "video/renderbackend.h" #include "video/image.h" #include "video/animation.h" #include "video/imagemanager.h" #include "camera.h" #include "layercache.h" #include "visual.h" namespace FIFE { /** Logger to use for this source file. * @relates Logger */ static Logger _log(LM_CAMERA); class CacheLayerChangeListener : public LayerChangeListener { public: CacheLayerChangeListener(LayerCache* cache) { m_cache = cache; } virtual ~CacheLayerChangeListener() {}; virtual void onLayerChanged(Layer* layer, std::vector& instances) { for(std::vector::iterator i = instances.begin(); i != instances.end(); ++i) { m_cache->updateInstance(*i); } } virtual void onInstanceCreate(Layer* layer, Instance* instance) { m_cache->addInstance(instance); } virtual void onInstanceDelete(Layer* layer, Instance* instance) { m_cache->removeInstance(instance); } private: LayerCache* m_cache; }; /** Comparison functions for sorting */ // used screenpoint z for sorting, calculated from camera class InstanceDistanceSortCamera { public: inline bool operator()(RenderItem* const & lhs, RenderItem* const & rhs) { if (Mathd::Equal(lhs->screenpoint.z, rhs->screenpoint.z)) { InstanceVisual* liv = lhs->instance->getVisual(); InstanceVisual* riv = rhs->instance->getVisual(); return liv->getStackPosition() < riv->getStackPosition(); } return lhs->screenpoint.z < rhs->screenpoint.z; } }; // used instance location and camera rotation for sorting class InstanceDistanceSortLocation { public: InstanceDistanceSortLocation(double rotation) { if ((rotation >= 0) && (rotation <= 60)) { // 30 deg xtox = 0; xtoy = -1; ytox = 1; ytoy = 0.5; } else if ((rotation >= 60) && (rotation <= 120)) { // 90 deg xtox = -1; xtoy = -1; ytox = 0.5; ytoy = -0.5; } else if ((rotation >= 120) && (rotation <= 180)) { // 150 deg xtox = 0; xtoy = -1; ytox = -1; ytoy = -0.5; } else if ((rotation >= 180) && (rotation <= 240)) { // 210 deg xtox = 0; xtoy = 1; ytox = -1; ytoy = -0.5; } else if ((rotation >= 240) && (rotation <= 300)) { // 270 deg xtox = 1; xtoy = 1; ytox = -0.5; ytoy = 0.5; } else if ((rotation >= 300) && (rotation <= 360)) { // 330 deg xtox = 0; xtoy = 1; ytox = 1; ytoy = 0.5; } } inline bool operator()(RenderItem* const & lhs, RenderItem* const & rhs) { ExactModelCoordinate lpos = lhs->instance->getLocationRef().getExactLayerCoordinates(); ExactModelCoordinate rpos = rhs->instance->getLocationRef().getExactLayerCoordinates(); lpos.x += lpos.y / 2; rpos.x += rpos.y / 2; InstanceVisual* liv = lhs->instance->getVisual(); InstanceVisual* riv = rhs->instance->getVisual(); int32_t lvc = ceil(xtox*lpos.x + ytox*lpos.y) + ceil(xtoy*lpos.x + ytoy*lpos.y) + liv->getStackPosition(); int32_t rvc = ceil(xtox*rpos.x + ytox*rpos.y) + ceil(xtoy*rpos.x + ytoy*rpos.y) + riv->getStackPosition(); if (lvc == rvc) { if (Mathd::Equal(lpos.z, rpos.z)) { return liv->getStackPosition() < riv->getStackPosition(); } return lpos.z < rpos.z; } return lvc < rvc; } private: double xtox; double xtoy; double ytox; double ytoy; }; // used screenpoint z for sorting and as fallback first the instance location z and then the stack position class InstanceDistanceSortCameraAndLocation { public: inline bool operator()(RenderItem* const & lhs, RenderItem* const & rhs) { if (Mathd::Equal(lhs->screenpoint.z, rhs->screenpoint.z)) { const ExactModelCoordinate& lpos = lhs->instance->getLocationRef().getExactLayerCoordinatesRef(); const ExactModelCoordinate& rpos = rhs->instance->getLocationRef().getExactLayerCoordinatesRef(); if (Mathd::Equal(lpos.z, rpos.z)) { InstanceVisual* liv = lhs->instance->getVisual(); InstanceVisual* riv = rhs->instance->getVisual(); return liv->getStackPosition() < riv->getStackPosition(); } return lpos.z < rpos.z; } return lhs->screenpoint.z < rhs->screenpoint.z; } }; LayerCache::LayerCache(Camera* camera) { m_camera = camera; m_layer = 0; m_layerObserver = 0; m_tree = 0; m_zMin = 0.0; m_zMax = 0.0; m_zoom = camera->getZoom(); m_zoomed = !Mathd::Equal(m_zoom, 1.0); m_straightZoom = Mathd::Equal(fmod(m_zoom, 1.0), 0.0); if(RenderBackend::instance()->getName() == "OpenGL" && RenderBackend::instance()->isDepthBufferEnabled()) { m_needSorting = false; } else { m_needSorting = true; } } LayerCache::~LayerCache() { // removes all Entries for (std::vector::iterator it = m_entries.begin(); it != m_entries.end(); ++it) { delete *it; } // removes all RenderItems for (std::vector::iterator it = m_renderItems.begin(); it != m_renderItems.end(); ++it) { delete *it; } m_layer->removeChangeListener(m_layerObserver); delete m_layerObserver; delete m_tree; } void LayerCache::setLayer(Layer* layer) { if (m_layer != layer) { if (m_layer) { m_layer->removeChangeListener(m_layerObserver); delete m_layerObserver; } m_layer = layer; m_layerObserver = new CacheLayerChangeListener(this); layer->addChangeListener(m_layerObserver); reset(); } } void LayerCache::reset() { // removes all Entries for (std::vector::iterator it = m_entries.begin(); it != m_entries.end(); ++it) { delete *it; } m_entries.clear(); // removes all RenderItems for (std::vector::iterator it = m_renderItems.begin(); it != m_renderItems.end(); ++it) { delete *it; } m_renderItems.clear(); m_instance_map.clear(); m_entriesToUpdate.clear(); m_freeEntries.clear(); m_cacheImage.reset(); delete m_tree; m_tree = new CacheTree; const std::vector& instances = m_layer->getInstances(); for(std::vector::const_iterator i = instances.begin(); i != instances.end(); ++i) { addInstance(*i); } } void LayerCache::addInstance(Instance* instance) { assert(m_instance_map.find(instance) == m_instance_map.end()); RenderItem* item; Entry* entry; if (m_freeEntries.empty()) { // creates new RenderItem item = new RenderItem(instance); m_renderItems.push_back(item); m_instance_map[instance] = m_renderItems.size() - 1; // creates new Entry entry = new Entry(); m_entries.push_back(entry); entry->instanceIndex = m_renderItems.size() - 1; entry->entryIndex = m_entries.size() - 1; } else { // uses free/unused RenderItem int32_t index = m_freeEntries.front(); m_freeEntries.pop_front(); item = m_renderItems[index]; item->instance = instance; m_instance_map[instance] = index; // uses free/unused Entry entry = m_entries[index]; entry->instanceIndex = index; entry->entryIndex = index; } entry->node = 0; entry->forceUpdate = true; entry->visible = true; entry->updateInfo = EntryFullUpdate; m_entriesToUpdate.insert(entry->entryIndex); } void LayerCache::removeInstance(Instance* instance) { assert(m_instance_map.find(instance) != m_instance_map.end()); Entry* entry = m_entries[m_instance_map[instance]]; assert(entry->instanceIndex == m_instance_map[instance]); RenderItem* item = m_renderItems[entry->instanceIndex]; // removes entry from updates std::set::iterator it = m_entriesToUpdate.find(entry->entryIndex); if (it != m_entriesToUpdate.end()) { m_entriesToUpdate.erase(it); } // removes entry from CacheTree if (entry->node) { entry->node->data().erase(entry->entryIndex); entry->node = 0; } entry->instanceIndex = -1; entry->forceUpdate = false; m_instance_map.erase(instance); // removes instance from RenderList RenderList& renderList = m_camera->getRenderListRef(m_layer); for (RenderList::iterator it = renderList.begin(); it != renderList.end(); ++it) { if ((*it)->instance == instance) { renderList.erase(it); break; } } // resets RenderItem item->reset(); // adds free entry m_freeEntries.push_back(entry->entryIndex); } void LayerCache::updateInstance(Instance* instance) { Entry* entry = m_entries[m_instance_map[instance]]; if (entry->instanceIndex == -1) { return; } // convert necessary instance update flags to entry update flags const InstanceChangeInfo ici = instance->getChangeInfo(); if ((ici & ICHANGE_LOC) == ICHANGE_LOC) { entry->updateInfo |= EntryPositionUpdate; } if ((ici & ICHANGE_ROTATION) == ICHANGE_ROTATION || (ici & ICHANGE_ACTION) == ICHANGE_ACTION || (ici & ICHANGE_TRANSPARENCY) == ICHANGE_TRANSPARENCY || (ici & ICHANGE_VISIBLE) == ICHANGE_VISIBLE || (ici & ICHANGE_VISUAL) == ICHANGE_VISUAL) { entry->updateInfo |= EntryVisualUpdate; } // if entry is not already inserted if (!entry->forceUpdate && entry->updateInfo != EntryNoneUpdate) { entry->forceUpdate = true; m_entriesToUpdate.insert(entry->entryIndex); } } class CacheTreeCollector { std::vector& m_indices; Rect m_viewport; public: CacheTreeCollector(std::vector& indices, const Rect& viewport) : m_indices(indices), m_viewport(viewport) { } bool visit(LayerCache::CacheTree::Node* node, int32_t d = -1); }; bool CacheTreeCollector::visit(LayerCache::CacheTree::Node* node, int32_t d) { if(!m_viewport.intersects(Rect(node->x(), node->y(),node->size(),node->size()))) { return false; } m_indices.insert(m_indices.end(), node->data().begin(), node->data().end()); return true; } void LayerCache::collect(const Rect& viewport, std::vector& index_list) { CacheTree::Node * node = m_tree->find_container(viewport); CacheTreeCollector collector(index_list, viewport); node->apply_visitor(collector); node = node->parent(); while(node) { collector.visit(node); node = node->parent(); } } void LayerCache::update(Camera::Transform transform, RenderList& renderlist) { // this is only a bit faster, but works without this block too. if(!m_layer->areInstancesVisible()) { FL_DBG(_log, "Layer instances hidden"); std::set::const_iterator entry_it = m_entriesToUpdate.begin(); for (; entry_it != m_entriesToUpdate.end(); ++entry_it) { Entry* entry = m_entries[*entry_it]; entry->forceUpdate = false; entry->visible = false; } m_entriesToUpdate.clear(); renderlist.clear(); return; } // if transform is none then we have only to update the instances with an update info. if (transform == Camera::NoneTransform) { if (!m_entriesToUpdate.empty()) { std::set entryToRemove; updateEntries(entryToRemove, renderlist); //std::cout << "update entries: " << int32_t(m_entriesToUpdate.size()) << " remove entries: " << int32_t(entryToRemove.size()) <<"\n"; if (!entryToRemove.empty()) { std::set::iterator entry_it = entryToRemove.begin(); for (; entry_it != entryToRemove.end(); ++entry_it) { m_entriesToUpdate.erase(*entry_it); } } } } else { m_zoom = m_camera->getZoom(); m_zoomed = !Mathd::Equal(m_zoom, 1.0); m_straightZoom = Mathd::Equal(fmod(m_zoom, 1.0), 0.0); // clear old renderlist renderlist.clear(); // update all entries if ((transform & Camera::RotationTransform) == Camera::RotationTransform || (transform & Camera::TiltTransform) == Camera::TiltTransform || (transform & Camera::ZTransform) == Camera::ZTransform) { fullUpdate(transform); } else { fullCoordinateUpdate(transform); } // create viewport coordinates to collect entries Rect viewport = m_camera->getViewPort(); Rect screenViewport = viewport; DoublePoint3D viewport_a = m_camera->screenToVirtualScreen(Point3D(viewport.x, viewport.y)); DoublePoint3D viewport_b = m_camera->screenToVirtualScreen(Point3D(viewport.right(), viewport.bottom())); viewport.x = static_cast(std::min(viewport_a.x, viewport_b.x)); viewport.y = static_cast(std::min(viewport_a.y, viewport_b.y)); viewport.w = static_cast(std::max(viewport_a.x, viewport_b.x) - viewport.x); viewport.h = static_cast(std::max(viewport_a.y, viewport_b.y) - viewport.y); m_zMin = 0.0; m_zMax = 0.0; // FL_LOG(_log, LMsg("camera-update viewport") << viewport); std::vector index_list; collect(viewport, index_list); // fill renderlist for (uint32_t i = 0; i != index_list.size(); ++i) { Entry* entry = m_entries[index_list[i]]; RenderItem* item = m_renderItems[entry->instanceIndex]; if (!item->image || !entry->visible) { continue; } if (item->dimensions.intersects(screenViewport)) { renderlist.push_back(item); } } if (m_needSorting) { sortRenderList(renderlist); } else { // calculates zmin and zmax of the current viewport Rect r = m_camera->getMapViewPort(); std::vector coords; coords.push_back(ExactModelCoordinate(r.x, r.y)); coords.push_back(ExactModelCoordinate(r.x, r.y+r.h)); coords.push_back(ExactModelCoordinate(r.x+r.w, r.y)); coords.push_back(ExactModelCoordinate(r.x+r.w, r.y+r.h)); for (uint8_t i = 0; i < 4; ++i) { double z = m_camera->toVirtualScreenCoordinates(coords[i]).z; m_zMin = std::min(z, m_zMin); m_zMax = std::max(z, m_zMax); } sortRenderList(renderlist); } } } void LayerCache::fullUpdate(Camera::Transform transform) { bool rotationChange = (transform & Camera::RotationTransform) == Camera::RotationTransform; for (uint32_t i = 0; i != m_entries.size(); ++i) { Entry* entry = m_entries[i]; if (entry->instanceIndex != -1) { if (rotationChange || entry->forceUpdate) { bool force = entry->forceUpdate; updateVisual(entry); if (force && !entry->forceUpdate) { // no action entry->updateInfo = EntryNoneUpdate; m_entriesToUpdate.erase(entry->entryIndex); } else if (!force && entry->forceUpdate) { // new action entry->updateInfo |= EntryVisualUpdate; m_entriesToUpdate.insert(entry->entryIndex); } } updatePosition(entry); } } } void LayerCache::fullCoordinateUpdate(Camera::Transform transform) { bool zoomChange = (transform & Camera::ZoomTransform) == Camera::ZoomTransform; for (uint32_t i = 0; i != m_entries.size(); ++i) { Entry* entry = m_entries[i]; if (entry->instanceIndex != -1) { if (entry->forceUpdate) { updateVisual(entry); updatePosition(entry); if (!entry->forceUpdate) { // no action entry->updateInfo = EntryNoneUpdate; m_entriesToUpdate.erase(entry->entryIndex); } continue; } updateScreenCoordinate(m_renderItems[entry->instanceIndex], zoomChange); } } } void LayerCache::updateEntries(std::set& removes, RenderList& renderlist) { RenderList needSorting; Rect viewport = m_camera->getViewPort(); std::set::const_iterator entry_it = m_entriesToUpdate.begin(); for (; entry_it != m_entriesToUpdate.end(); ++entry_it) { Entry* entry = m_entries[*entry_it]; entry->forceUpdate = false; if (entry->instanceIndex == -1) { entry->updateInfo = EntryNoneUpdate; removes.insert(*entry_it); continue; } RenderItem* item = m_renderItems[entry->instanceIndex]; bool onScreenA = entry->visible && item->image && item->dimensions.intersects(viewport); bool positionUpdate = (entry->updateInfo & EntryPositionUpdate) == EntryPositionUpdate; if ((entry->updateInfo & EntryVisualUpdate) == EntryVisualUpdate) { positionUpdate |= updateVisual(entry); } if (positionUpdate) { updatePosition(entry); } bool onScreenB = entry->visible && item->image && item->dimensions.intersects(viewport); if (onScreenA != onScreenB) { if (!onScreenA) { // add to renderlist and sort renderlist.push_back(item); needSorting.push_back(item); } else { // remove from renderlist for (RenderList::iterator it = renderlist.begin(); it != renderlist.end(); ++it) { if ((*it)->instance == item->instance) { renderlist.erase(it); break; } } } } else if (onScreenA && onScreenB && positionUpdate) { // sort needSorting.push_back(item); } if (!entry->forceUpdate) { entry->forceUpdate = false; entry->updateInfo = EntryNoneUpdate; removes.insert(*entry_it); } else { entry->updateInfo = EntryVisualUpdate; } } if (!needSorting.empty()) { if (m_needSorting) { sortRenderList(renderlist); } else { sortRenderList(needSorting); } } } bool LayerCache::updateVisual(Entry* entry) { RenderItem* item = m_renderItems[entry->instanceIndex]; Instance* instance = item->instance; InstanceVisual* visual = instance->getVisual(); item->facingAngle = instance->getRotation(); int32_t angle = static_cast(m_camera->getRotation()) + item->facingAngle; Action* action = instance->getCurrentAction(); ImagePtr image; if (visual) { uint8_t layerTrans = m_layer->getLayerTransparency(); uint8_t instanceTrans = visual->getTransparency(); if (layerTrans != 0) { if (instanceTrans != 0) { uint8_t calcTrans = layerTrans - instanceTrans; if (calcTrans >= 0) { instanceTrans = calcTrans; } else { instanceTrans = 0; } } else { instanceTrans = layerTrans; } } item->transparency = 255 - instanceTrans; // only visible if visual and layer are visible and item is not totally transparent entry->visible = (visual->isVisible() && item->transparency != 0) && m_layer->areInstancesVisible(); } // delete old overlay item->deleteOverlayData(); if (!action) { // Try static images then default action. int32_t image_id = item->getStaticImageIndexByAngle(angle, instance); if (image_id == -1) { if (!instance->getObject()->isStatic()) { action = instance->getObject()->getDefaultAction(); } } else { image = ImageManager::instance()->get(image_id); } } entry->forceUpdate = (action != 0); if (action) { ActionVisual* actionVisual = action->getVisual(); bool colorOverlay = actionVisual->isColorOverlay(); // assumed all have the same size if (actionVisual->isAnimationOverlay()) { std::map animations = actionVisual->getAnimationOverlay(angle); std::map::iterator it = animations.begin(); std::vector* animOverlays = new std::vector(); std::vector* animationColorOverlays = colorOverlay ? new std::vector() : 0; for (; it != animations.end(); ++it) { uint32_t animationTime = instance->getActionRuntime() % it->second->getDuration(); image = it->second->getFrameByTimestamp(animationTime); animOverlays->push_back(image); if (colorOverlay) { OverlayColors* co = actionVisual->getColorOverlay(angle, it->first); if (co) { AnimationPtr ovAnim = co->getColorOverlayAnimation(); animationTime = instance->getActionRuntime() % ovAnim->getDuration(); co->setColorOverlayImage(ovAnim->getFrameByTimestamp(animationTime)); } animationColorOverlays->push_back(co); } // works only for one animation int32_t actionFrame = it->second->getActionFrame(); if (actionFrame != -1) { int32_t newFrame = it->second->getFrameIndex(animationTime); if (item->currentFrame != newFrame) { if (actionFrame == newFrame) { instance->callOnActionFrame(action, actionFrame); // if action frame was skipped } else if (newFrame > actionFrame && item->currentFrame < actionFrame) { instance->callOnActionFrame(action, actionFrame); } item->currentFrame = newFrame; } } } // transfer ownership of the vectors to RenderItem item->setAnimationOverlay(animOverlays, animationColorOverlays); } else { AnimationPtr animation = action->getVisual()->getAnimationByAngle(angle); uint32_t animationTime = instance->getActionRuntime() % animation->getDuration(); image = animation->getFrameByTimestamp(animationTime); // if the action have an animation with only one frame (idle animation) then // a forced update is not necessary. if (animation->getFrameCount() <= 1) { entry->forceUpdate = false; } if (colorOverlay) { OverlayColors* co = actionVisual->getColorOverlay(angle); if (co) { AnimationPtr ovAnim = co->getColorOverlayAnimation(); animationTime = instance->getActionRuntime() % ovAnim->getDuration(); co->setColorOverlayImage(ovAnim->getFrameByTimestamp(animationTime)); item->setColorOverlay(co); } } int32_t actionFrame = animation->getActionFrame(); if (actionFrame != -1) { if (item->image != image) { int32_t newFrame = animation->getFrameIndex(animationTime); if (actionFrame == newFrame) { instance->callOnActionFrame(action, actionFrame); // if action frame was skipped } else if (newFrame > actionFrame && item->currentFrame < actionFrame) { instance->callOnActionFrame(action, actionFrame); } item->currentFrame = newFrame; } } } } bool newPosition = false; if (image != item->image) { if (!item->image || !image) { newPosition = true; } else if (image->getWidth() != item->image->getWidth() || image->getHeight() != item->image->getHeight() || image->getXShift() != item->image->getXShift() || image->getYShift() != item->image->getYShift()) { newPosition = true; } item->image = image; } return newPosition; } void LayerCache::updatePosition(Entry* entry) { RenderItem* item = m_renderItems[entry->instanceIndex]; Instance* instance = item->instance; ExactModelCoordinate mapCoords = instance->getLocationRef().getMapCoordinates(); DoublePoint3D screenPosition = m_camera->toVirtualScreenCoordinates(mapCoords); ImagePtr image = item->image; if (image) { int32_t w = image->getWidth(); int32_t h = image->getHeight(); screenPosition.x = (screenPosition.x - w / 2) + image->getXShift(); screenPosition.y = (screenPosition.y - h / 2) + image->getYShift(); item->bbox.w = w; item->bbox.h = h; } else { item->bbox.w = 0; item->bbox.h = 0; } item->screenpoint = screenPosition; item->bbox.x = static_cast(screenPosition.x); item->bbox.y = static_cast(screenPosition.y); updateScreenCoordinate(item); CacheTree::Node* node = m_tree->find_container(item->bbox); if (node) { if (node != entry->node) { if (entry->node) { entry->node->data().erase(entry->entryIndex); } entry->node = node; node->data().insert(entry->entryIndex); } } } inline void LayerCache::updateScreenCoordinate(RenderItem* item, bool changedZoom) { Point3D screenPoint = m_camera->virtualScreenToScreen(item->screenpoint); // NOTE: // One would expect this to be necessary here, // however it works the same without, sofar // m_camera->calculateZValue(screenPoint); // item->screenpoint.z = -screenPoint.z; item->dimensions.x = screenPoint.x; item->dimensions.y = screenPoint.y; if (changedZoom) { if (m_zoomed) { item->dimensions.w = round(static_cast(item->bbox.w) * m_zoom); item->dimensions.h = round(static_cast(item->bbox.h) * m_zoom); } else { item->dimensions.w = item->bbox.w; item->dimensions.h = item->bbox.h; } } } void LayerCache::sortRenderList(RenderList& renderlist) { if (renderlist.empty()) { return; } // We want to put every z value in layer z range. // To do it, we simply solve // { y1 = a*x1 + b // { y2 = a*x2 + b // where [y1,y2]' = layer z offset min/max is required z range, // and [x1,x2]' is expected min,max z coords. // more an workaround, because z values are wrong in case of inverted top with bottom if (!m_needSorting && !m_layer->isStatic()) { //if (!m_needSorting) { float det = m_zMin - m_zMax; if (fabs(det) > FLT_EPSILON) { static const float globalrange = 200.0; static const float stackdelta = (FLT_EPSILON * 100.0); int32_t numlayers = m_layer->getLayerCount(); float lmin = m_layer->getZOffset(); float lmax = lmin + globalrange/numlayers; float a = (lmin - lmax) / det; float b = (lmax * m_zMin - lmin * m_zMax) / det; RenderList::iterator it = renderlist.begin(); for ( ; it != renderlist.end(); ++it) { InstanceVisual* vis = (*it)->instance->getVisual(); float& z = (*it)->vertexZ; z = (a * (*it)->screenpoint.z + b) + vis->getStackPosition() * stackdelta; } } } else { SortingStrategy strat = m_layer->getSortingStrategy(); switch (strat) { case SORTING_CAMERA: { InstanceDistanceSortCamera ids; std::stable_sort(renderlist.begin(), renderlist.end(), ids); } break; case SORTING_LOCATION: { InstanceDistanceSortLocation ids(m_camera->getRotation()); std::stable_sort(renderlist.begin(), renderlist.end(), ids); } break; case SORTING_CAMERA_AND_LOCATION: { InstanceDistanceSortCameraAndLocation ids; std::stable_sort(renderlist.begin(), renderlist.end(), ids); } break; default: { InstanceDistanceSortCamera ids; std::stable_sort(renderlist.begin(), renderlist.end(), ids); } break; } } } ImagePtr LayerCache::getCacheImage() { return m_cacheImage; } void LayerCache::setCacheImage(ImagePtr image) { m_cacheImage = image; } } fifengine-0.4.1/engine/core/view/layercache.h000066400000000000000000000077461304641216200211030ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_VIEW_LAYERCACHE_H #define FIFE_VIEW_LAYERCACHE_H // Standard C++ library includes #include #include #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "model/structures/location.h" #include "util/math/matrix.h" #include "util/structures/rect.h" #include "util/structures/quadtree.h" #include "model/metamodel/grids/cellgrid.h" #include "rendererbase.h" namespace FIFE { class Camera; class CacheLayerChangeListener; class LayerCache { public: typedef QuadTree > CacheTree; LayerCache(Camera* camera); ~LayerCache(); void setLayer(Layer* layer); void update(Camera::Transform transform, RenderList& renderlist); void addInstance(Instance* instance); void removeInstance(Instance* instance); void updateInstance(Instance* instance); ImagePtr getCacheImage(); void setCacheImage(ImagePtr image); private: enum RenderEntryUpdateType { EntryNoneUpdate = 0x00, EntryVisualUpdate = 0x01, EntryPositionUpdate = 0x02, EntryFullUpdate = 0x03 }; typedef uint8_t RenderEntryUpdate; struct Entry { // Node in m_tree; CacheTree::Node* node; // Index in m_renderItems; int32_t instanceIndex; // Index in m_entries; int32_t entryIndex; // Force update for entries with animation bool forceUpdate; // Is visible bool visible; // Update info RenderEntryUpdate updateInfo; }; void collect(const Rect& viewport, std::vector& indices); void reset(); void fullUpdate(Camera::Transform transform); void fullCoordinateUpdate(Camera::Transform transform); void updateEntries(std::set& removes, RenderList& renderlist); bool updateVisual(Entry* entry); void updatePosition(Entry* entry); void updateScreenCoordinate(RenderItem* item, bool changedZoom = true); void sortRenderList(RenderList& renderlist); Camera* m_camera; Layer* m_layer; CacheLayerChangeListener* m_layerObserver; CacheTree* m_tree; ImagePtr m_cacheImage; std::map m_instance_map; std::vector m_entries; std::vector m_renderItems; std::set m_entriesToUpdate; std::deque m_freeEntries; bool m_needSorting; double m_zMin; double m_zMax; double m_zoom; bool m_zoomed; bool m_straightZoom; }; } #endif fifengine-0.4.1/engine/core/view/rendererbase.cpp000066400000000000000000000075321304641216200217700ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "model/structures/layer.h" #include "model/structures/map.h" #include "util/log/logger.h" #include "rendererbase.h" namespace FIFE { static Logger _log(LM_VIEW); // use some big value, so that non-positioned renderers show on top const int32_t DEFAULT_RENDERER_POSITION = 1000; RendererBase::RendererBase(RenderBackend* renderbackend, int32_t position): m_renderbackend(renderbackend), m_enabled(false), m_pipeline_position(DEFAULT_RENDERER_POSITION), m_listener(NULL) { setPipelinePosition(position); } RendererBase::RendererBase(const RendererBase& old): m_renderbackend(old.m_renderbackend), m_enabled(old.m_enabled), m_pipeline_position(old.m_pipeline_position), m_listener(NULL) { setPipelinePosition(old.m_pipeline_position); } RendererBase::RendererBase(): m_renderbackend(NULL), m_enabled(false), m_pipeline_position(DEFAULT_RENDERER_POSITION), m_listener(NULL) { } void RendererBase::setPipelinePosition(int32_t position) { if (position !=m_pipeline_position) { m_pipeline_position = position; if (m_listener) { m_listener->onRendererPipelinePositionChanged(this); } } } void RendererBase::setEnabled(bool enabled) { if (m_enabled != enabled) { m_enabled = enabled; if (m_listener) { m_listener->onRendererEnabledChanged(this); } } } void RendererBase::addActiveLayer(Layer* layer) { if (std::find(m_active_layers.begin(), m_active_layers.end(), layer) == m_active_layers.end()) { m_active_layers.push_back(layer); } } void RendererBase::removeActiveLayer(Layer* layer) { m_active_layers.remove(layer); } void RendererBase::clearActiveLayers() { m_active_layers.clear(); } bool RendererBase::isActivedLayer(Layer* layer) { return std::find(m_active_layers.begin(), m_active_layers.end(), layer) != m_active_layers.end(); } void RendererBase::activateAllLayers(Map* map) { clearActiveLayers(); const std::list& tmp = map->getLayers(); std::list::const_iterator it = tmp.begin(); for (; it != tmp.end(); ++it) { addActiveLayer(*it); } } } fifengine-0.4.1/engine/core/view/rendererbase.h000066400000000000000000000133451304641216200214340ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_RENDERERBASE_H #define FIFE_RENDERERBASE_H // Standard C++ library includes #include #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "renderitem.h" namespace FIFE { class Camera; class Layer; class Map; class Instance; class RenderBackend; class RendererBase; /** RendererListener allows reaction to changes in renderer * Having this implemented via callback mechanism should speed up the rendering a bit * (e.g. no need to sort pipeline order per each frame) */ class IRendererListener { public: virtual ~IRendererListener() {} /** Renderer's pipeline position has been changed */ virtual void onRendererPipelinePositionChanged(RendererBase* renderer) = 0; /** Renderer is enabled / disabled */ virtual void onRendererEnabledChanged(RendererBase* renderer) = 0; }; /** Interface to class owning the renderers * Used to get correct subclass of renderer in scripting side (via renderer's static method) */ class IRendererContainer { public: virtual ~IRendererContainer() {} /** Returns renderer with given name */ virtual RendererBase* getRenderer(const std::string& renderername) = 0; }; /** Base class for all view renderers * View renderer renders one aspect of the view shown on screen */ class RendererBase { public: /** Constructor * @param renderbackend to use * @param position position for this renderer in rendering pipeline */ RendererBase(RenderBackend* renderbackend, int32_t position); /** Copy Constructor */ RendererBase(const RendererBase& old); /** Makes copy of this renderer */ virtual RendererBase* clone() = 0; /** Destructor */ virtual ~RendererBase() {}; /** This method is called by the view to ask renderer to draw its rendering aspect based on * given parameters. Renderers receive non-clipped instance stack since there is no * way to know which information is relevant for the renderer. E.g. effect renderer * might need to know offscreen instance locations to be able to draw radiation coming from * some instance not visible on the screen. * * @param cam camera view to draw * @param layer current layer to be rendered * @param instances instances on the current layer * @ see setPipelinePosition */ virtual void render(Camera* cam, Layer* layer, RenderList& instances) = 0; /** Name of the renderer */ virtual std::string getName() = 0; /** Gets renderer position in the rendering pipeline */ int32_t getPipelinePosition() const { return m_pipeline_position; } /** Sets renderer position in the rendering pipeline * Pipeline position defines in which order view calls the renderers when update occurs * Note that renderers are called once per rendered layer, thus to update the * whole screen, renderer might receive multiple calls */ void setPipelinePosition(int32_t position); /** Enables renderer */ virtual void setEnabled(bool enabled); /** Resets information in the renderer */ virtual void reset() {} /** Is renderer enabled */ bool isEnabled() const { return m_enabled; } /** Sets listener for renderer */ void setRendererListener(IRendererListener* listener) { m_listener = listener; } /** Adds active layer to renderer. Only active layers are rendered */ void addActiveLayer(Layer* layer); /** Removes active layer from renderer. */ void removeActiveLayer(Layer* layer); /** Clears all active layers from renderer */ void clearActiveLayers(); /** Activates all layers from given elevation */ void activateAllLayers(Map* elevation); /** Returns if given layer is currently activated */ bool isActivedLayer(Layer* layer); /** Returns list of activated layer */ std::list getActiveLayers() const {return m_active_layers;} protected: RendererBase(); std::list m_active_layers; RenderBackend* m_renderbackend; private: bool m_enabled; int32_t m_pipeline_position; IRendererListener* m_listener; }; } #endif fifengine-0.4.1/engine/core/view/rendererbase.i000066400000000000000000000044041304641216200214310ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "view/rendererbase.h" %} namespace FIFE { class Camera; class Layer; class Instance; class Map; class RendererBase { public: RendererBase(); virtual ~RendererBase(); virtual std::string getName() = 0; int32_t getPipelinePosition() { return m_position; } void setPipelinePosition(int32_t position); void setEnabled(bool enabled); bool isEnabled(); void addActiveLayer(Layer* layer); void removeActiveLayer(Layer* layer); void clearActiveLayers(); void activateAllLayers(Map* map); std::list getActiveLayers() const {return m_active_layers;} }; class IRendererContainer { public: virtual ~IRendererContainer() {} virtual RendererBase* getRenderer(const std::string& renderername) = 0; }; } fifengine-0.4.1/engine/core/view/renderers/000077500000000000000000000000001304641216200206055ustar00rootroot00000000000000fifengine-0.4.1/engine/core/view/renderers/blockinginforenderer.cpp000066400000000000000000000146121304641216200255100ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "video/renderbackend.h" #include "util/math/fife_math.h" #include "util/log/logger.h" #include "model/metamodel/grids/cellgrid.h" #include "model/structures/instance.h" #include "model/structures/layer.h" #include "model/structures/location.h" #include "model/structures/cell.h" #include "model/structures/cellcache.h" #include "view/camera.h" #include "blockinginforenderer.h" namespace FIFE { /** Logger to use for this source file. * @relates Logger */ static Logger _log(LM_VIEWVIEW); BlockingInfoRenderer::BlockingInfoRenderer(RenderBackend* renderbackend, int32_t position): RendererBase(renderbackend, position) { setEnabled(false); m_color.r = 0; m_color.g = 255; m_color.b = 0; } BlockingInfoRenderer::BlockingInfoRenderer(const BlockingInfoRenderer& old): RendererBase(old), m_color(old.m_color) { setEnabled(false); } RendererBase* BlockingInfoRenderer::clone() { return new BlockingInfoRenderer(*this); } BlockingInfoRenderer::~BlockingInfoRenderer() { } BlockingInfoRenderer* BlockingInfoRenderer::getInstance(IRendererContainer* cnt) { return dynamic_cast(cnt->getRenderer("BlockingInfoRenderer")); } void BlockingInfoRenderer::render(Camera* cam, Layer* layer, RenderList& instances) { CellGrid* cg = layer->getCellGrid(); if (!cg) { FL_WARN(_log, "No cellgrid assigned to layer, cannot draw grid"); return; } Rect cv = cam->getViewPort(); CellCache* cache = layer->getCellCache(); if (cache) { const std::vector >& cells = cache->getCells(); std::vector >::const_iterator it = cells.begin(); for (; it != cells.end(); ++it) { std::vector::const_iterator cit = (*it).begin(); for (; cit != (*it).end(); ++cit) { ExactModelCoordinate emc = FIFE::intPt2doublePt((*cit)->getLayerCoordinates()); ScreenPoint sp = cam->toScreenCoordinates(cg->toMapCoordinates(emc)); // if it is not in cameras view continue if (sp.x < cv.x || sp.x > cv.x + cv.w || sp.y < cv.y || sp.y > cv.y + cv.h) { continue; } if ((*cit)->getCellType() != CTYPE_NO_BLOCKER) { std::vector vertices; cg->getVertices(vertices, (*cit)->getLayerCoordinates()); std::vector::const_iterator it = vertices.begin(); int32_t halfind = vertices.size() / 2; ScreenPoint firstpt = cam->toScreenCoordinates(cg->toMapCoordinates(*it)); Point pt1(firstpt.x, firstpt.y); Point pt2; ++it; for (; it != vertices.end(); it++) { ScreenPoint pts = cam->toScreenCoordinates(cg->toMapCoordinates(*it)); pt2.x = pts.x; pt2.y = pts.y; m_renderbackend->drawLine(pt1, pt2, m_color.r, m_color.g, m_color.b); pt1 = pt2; } m_renderbackend->drawLine(pt2, Point(firstpt.x, firstpt.y), m_color.r, m_color.g, m_color.b); ScreenPoint spt1 = cam->toScreenCoordinates(cg->toMapCoordinates(vertices[0])); Point pt3(spt1.x, spt1.y); ScreenPoint spt2 = cam->toScreenCoordinates(cg->toMapCoordinates(vertices[halfind])); Point pt4(spt2.x, spt2.y); m_renderbackend->drawLine(pt3, pt4, m_color.r, m_color.g, m_color.b); } } } } else { RenderList::const_iterator instance_it = instances.begin(); for (;instance_it != instances.end(); ++instance_it) { Instance* instance = (*instance_it)->instance; if (!instance->getObject()->isBlocking() || !instance->isBlocking()) { continue; } std::vector vertices; cg->getVertices(vertices, instance->getLocationRef().getLayerCoordinates()); std::vector::const_iterator it = vertices.begin(); int32_t halfind = vertices.size() / 2; ScreenPoint firstpt = cam->toScreenCoordinates(cg->toMapCoordinates(*it)); Point pt1(firstpt.x, firstpt.y); Point pt2; ++it; for (; it != vertices.end(); it++) { ScreenPoint pts = cam->toScreenCoordinates(cg->toMapCoordinates(*it)); pt2.x = pts.x; pt2.y = pts.y; m_renderbackend->drawLine(pt1, pt2, m_color.r, m_color.g, m_color.b); pt1 = pt2; } m_renderbackend->drawLine(pt2, Point(firstpt.x, firstpt.y), m_color.r, m_color.g, m_color.b); ScreenPoint spt1 = cam->toScreenCoordinates(cg->toMapCoordinates(vertices[0])); Point pt3(spt1.x, spt1.y); ScreenPoint spt2 = cam->toScreenCoordinates(cg->toMapCoordinates(vertices[halfind])); Point pt4(spt2.x, spt2.y); m_renderbackend->drawLine(pt3, pt4, m_color.r, m_color.g, m_color.b); } } } void BlockingInfoRenderer::setColor(uint8_t r, uint8_t g, uint8_t b) { m_color.r = r; m_color.g = g; m_color.b = b; } } fifengine-0.4.1/engine/core/view/renderers/blockinginforenderer.h000066400000000000000000000064711304641216200251610ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_BLOCKINGINFORENDERER_H #define FIFE_BLOCKINGINFORENDERER_H // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "view/rendererbase.h" namespace FIFE { class RenderBackend; class BlockingInfoRenderer: public RendererBase { public: /** Constructor. * * @param renderbackend The renderbackend to use. * @param position The position for this renderer in rendering pipeline. * @ see setPipelinePosition */ BlockingInfoRenderer(RenderBackend* renderbackend, int32_t position); /** Copy Constructor. */ BlockingInfoRenderer(const BlockingInfoRenderer& old); /** Makes copy of this renderer. */ RendererBase* clone(); /** Destructor. */ virtual ~BlockingInfoRenderer(); /** Returns the renderer name. * * @return The name as string. */ std::string getName() { return "BlockingInfoRenderer"; } /** This method is called by the view to ask renderer to draw its rendering aspect based on * given parameters. * * @param cam Camera view to draw * @param layer Current layer to be rendered * @param instances Instances on the current layer */ void render(Camera* cam, Layer* layer, RenderList& instances); /** Changes the used color. * * @param r The value for red, range 0-255. * @param g The value for green, range 0-255. * @param b The value for blue, range 0-255. */ void setColor(uint8_t r, uint8_t g, uint8_t b); /** Gets instance for interface access. */ static BlockingInfoRenderer* getInstance(IRendererContainer* cnt); private: //! currently used color SDL_Color m_color; }; } #endif fifengine-0.4.1/engine/core/view/renderers/blockinginforenderer.i000066400000000000000000000037011304641216200251530ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "view/renderers/blockinginforenderer.h" %} namespace FIFE { class RenderBackend; class BlockingInfoRenderer: public RendererBase { public: virtual ~BlockingInfoRenderer(); std::string getName(); void setColor(uint8_t r, uint8_t g, uint8_t b); static BlockingInfoRenderer* getInstance(IRendererContainer* cnt); private: BlockingInfoRenderer(RenderBackend* renderbackend, int32_t position); }; } fifengine-0.4.1/engine/core/view/renderers/cellrenderer.cpp000066400000000000000000000300461304641216200237620ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "video/renderbackend.h" #include "video/image.h" #include "video/imagemanager.h" #include "video/fonts/ifont.h" #include "util/math/fife_math.h" #include "util/log/logger.h" #include "model/metamodel/grids/cellgrid.h" #include "model/structures/instance.h" #include "model/structures/layer.h" #include "model/structures/location.h" #include "model/structures/cell.h" #include "model/structures/cellcache.h" #include "pathfinder/route.h" #include "view/camera.h" #include "cellrenderer.h" namespace FIFE { static Logger _log(LM_VIEWVIEW); CellRenderer::CellRenderer(RenderBackend* renderbackend, int32_t position): RendererBase(renderbackend, position) { setEnabled(false); m_blockerColor.r = 255; m_blockerColor.g = 0; m_blockerColor.b = 0; m_pathColor.r = 0; m_pathColor.g = 0; m_pathColor.b = 255; m_blockingEnabled = false; m_fowEnabled = false; m_pathVisualEnabled = false; m_targetRenderer = m_renderbackend->isFramebufferEnabled() ? new TargetRenderer(m_renderbackend) : NULL; m_fowLayer = NULL; m_font = NULL; } CellRenderer::CellRenderer(const CellRenderer& old): RendererBase(old), m_blockerColor(old.m_blockerColor), m_pathColor(old.m_pathColor){ setEnabled(false); m_blockingEnabled = false; m_fowEnabled = false; m_pathVisualEnabled = false; m_targetRenderer = m_renderbackend->isFramebufferEnabled() ? new TargetRenderer(m_renderbackend) : NULL; m_fowLayer = NULL; m_font = NULL; } RendererBase* CellRenderer::clone() { return new CellRenderer(*this); } CellRenderer::~CellRenderer() { delete m_targetRenderer; } CellRenderer* CellRenderer::getInstance(IRendererContainer* cnt) { return dynamic_cast(cnt->getRenderer("CellRenderer")); } std::string CellRenderer::getName() { return "CellRenderer"; } void CellRenderer::render(Camera* cam, Layer* layer, RenderList& instances) { CellGrid* cg = layer->getCellGrid(); if (!cg) { FL_WARN(_log, "No cellgrid assigned to layer, cannot draw grid"); return; } CellCache* cache = layer->getCellCache(); if (!cache) { FL_WARN(_log, "No cellcache on layer created, cannot draw cells"); return; } const bool fow = m_fowEnabled && (m_fowLayer == layer); bool fow_update = fow && (cam->isUpdated() || cache->isUpdated()); if (!m_fowImage.get() && fow) { createFowMap(cam, layer); } const bool render_costs = (!m_visualCosts.empty() && m_font); const bool zoomed = !Mathd::Equal(1.0, cam->getZoom()); Rect layerView = cam->getLayerViewPort(layer); std::vector cells = cache->getCellsInRect(layerView); std::vector::iterator cit = cells.begin(); for (; cit != cells.end(); ++cit) { if (m_blockingEnabled) { if ((*cit)->getCellType() != CTYPE_NO_BLOCKER) { std::vector vertices; cg->getVertices(vertices, (*cit)->getLayerCoordinates()); std::vector::const_iterator it = vertices.begin(); int32_t halfind = vertices.size() / 2; ScreenPoint firstpt = cam->toScreenCoordinates(cg->toMapCoordinates(*it)); Point pt1(firstpt.x, firstpt.y); Point pt2; ++it; for (; it != vertices.end(); it++) { ScreenPoint pts = cam->toScreenCoordinates(cg->toMapCoordinates(*it)); pt2.x = pts.x; pt2.y = pts.y; m_renderbackend->drawLine(pt1, pt2, m_blockerColor.r, m_blockerColor.g, m_blockerColor.b); pt1 = pt2; } m_renderbackend->drawLine(pt2, Point(firstpt.x, firstpt.y), m_blockerColor.r, m_blockerColor.g, m_blockerColor.b); ScreenPoint spt1 = cam->toScreenCoordinates(cg->toMapCoordinates(vertices[0])); Point pt3(spt1.x, spt1.y); ScreenPoint spt2 = cam->toScreenCoordinates(cg->toMapCoordinates(vertices[halfind])); Point pt4(spt2.x, spt2.y); m_renderbackend->drawLine(pt3, pt4, m_blockerColor.r, m_blockerColor.g, m_blockerColor.b); } } if (render_costs) { bool match = false; double cost; std::set::iterator cost_it = m_visualCosts.begin(); for (; cost_it != m_visualCosts.end(); ++cost_it) { std::vector cell_costs = cache->getCellCosts(*cit); std::vector::iterator cc_it = cell_costs.begin(); for (; cc_it != cell_costs.end(); ++cc_it) { if (*cc_it == *cost_it) { match = true; cost = cache->getCost(*cost_it); break; } } if (match) { break; } } if (match) { Location loc(layer); loc.setLayerCoordinates((*cit)->getLayerCoordinates()); ScreenPoint drawpt = cam->toScreenCoordinates(loc.getMapCoordinates()); std::stringstream stream; stream << cost; Image* img = m_font->getAsImage(stream.str()); Rect r; if (zoomed) { double zoom = cam->getZoom(); r.x = drawpt.x - (img->getWidth()/2) * zoom; r.y = drawpt.y - (img->getHeight()/2) * zoom; r.w = img->getWidth() * zoom; r.h = img->getHeight() * zoom; img->render(r); } else { r.x = drawpt.x - img->getWidth()/2; r.y = drawpt.y - img->getHeight()/2; r.w = img->getWidth(); r.h = img->getHeight(); img->render(r); } } } if (fow_update || (fow && !m_targetRenderer)) { ScreenPoint sp = cam->toScreenCoordinates(cg->toMapCoordinates( FIFE::intPt2doublePt((*cit)->getLayerCoordinates()))); CellVisualEffect cve = (*cit)->getFoWType(); if (cve == CELLV_CONCEALED) { if (m_concealImage.get()) { addImageToMap(cam, Point(sp.x, sp.y), m_concealImage, "c_img"); } } else if (cve == CELLV_MASKED) { if (m_maskImage.get()) { addImageToMap(cam, Point(sp.x, sp.y), m_maskImage, "b_img"); } } } } if (m_pathVisualEnabled && !m_visualPaths.empty()) { std::vector::iterator it = m_visualPaths.begin(); for (; it != m_visualPaths.end(); ++it) { Route* route = (*it)->getRoute(); if (route) { Path path = route->getPath(); if (!path.empty()) { Path::iterator pit = path.begin(); for (; pit != path.end(); ++pit) { if ((*pit).getLayer() != layer) { continue; } std::vector vertices; cg->getVertices(vertices, (*pit).getLayerCoordinates()); std::vector::const_iterator it = vertices.begin(); int32_t halfind = vertices.size() / 2; ScreenPoint firstpt = cam->toScreenCoordinates(cg->toMapCoordinates(*it)); Point pt1(firstpt.x, firstpt.y); Point pt2; ++it; for (; it != vertices.end(); it++) { ScreenPoint pts = cam->toScreenCoordinates(cg->toMapCoordinates(*it)); pt2.x = pts.x; pt2.y = pts.y; m_renderbackend->drawLine(pt1, pt2, m_pathColor.r, m_pathColor.g, m_pathColor.b); pt1 = pt2; } m_renderbackend->drawLine(pt2, Point(firstpt.x, firstpt.y), m_pathColor.r, m_pathColor.g, m_pathColor.b); } } } } } if (fow && m_targetRenderer) { if (fow_update) { updateFowMap(); } m_fowImage.get()->render(cam->getViewPort()); } } void CellRenderer::setBlockerColor(uint8_t r, uint8_t g, uint8_t b) { m_blockerColor.r = r; m_blockerColor.g = g; m_blockerColor.b = b; } void CellRenderer::setPathColor(uint8_t r, uint8_t g, uint8_t b) { m_pathColor.r = r; m_pathColor.g = g; m_pathColor.b = b; } void CellRenderer::setFogOfWarLayer(Layer* layer) { m_fowLayer = layer; } void CellRenderer::setEnabledBlocking(bool enabled) { m_blockingEnabled = enabled; } bool CellRenderer::isEnabledBlocking() { return m_blockingEnabled; } void CellRenderer::setEnabledFogOfWar(bool enabled) { m_fowEnabled = enabled; } bool CellRenderer::isEnabledFogOfWar() { return m_fowEnabled; } void CellRenderer::setEnabledPathVisual(bool enabled) { m_pathVisualEnabled = enabled; } bool CellRenderer::isEnabledPathVisual() { return m_pathVisualEnabled; } void CellRenderer::createFowMap(Camera* cam, Layer* layer) { if (!m_targetRenderer) { return; } Rect view = cam->getViewPort(); m_fowImage = ImageManager::instance()->loadBlank("virtual_fow_map", view.w, view.h); m_fowTarget = m_targetRenderer->createRenderTarget(m_fowImage); m_targetRenderer->setRenderTarget("virtual_fow_map", true, 0); Point n1(0, 0); Point n2(0, view.h); Point n3(view.w, view.h); Point n4(view.w, 0); m_fowTarget->addQuad("a_quad", n1, n2, n3, n4, 0, 0, 0, 0); } void CellRenderer::setConcealImage(ImagePtr image) { m_concealImage = image; } void CellRenderer::setMaskImage(ImagePtr image) { m_maskImage = image; } void CellRenderer::addImageToMap(Camera* cam, Point center, ImagePtr image, const std::string& id) { double zoom = cam->getZoom(); bool zoomed = !Mathd::Equal(zoom, 1.0); bool straightZoom = Mathd::Equal(fmod(zoom, 1.0), 0.0); if (m_targetRenderer) { if (!zoomed) { m_fowTarget->addImage(id, center, image); } else { int32_t w = round(image->getWidth() * zoom); int32_t h = round(image->getHeight() * zoom); m_fowTarget->resizeImage(id, center, image, w, h); } } else { int32_t w = image->getWidth(); int32_t h = image->getHeight(); if (zoomed) { w = round(w * zoom); h = round(h * zoom); } Rect dimensions(center.x, center.y, w, h); image->render(dimensions); } } Layer* CellRenderer::getFowLayer() { return m_fowLayer; } void CellRenderer::setFont(IFont* font) { m_font = font; } IFont* CellRenderer::getFont() { return m_font; } void CellRenderer::updateFowMap() { m_targetRenderer->setRenderTarget("virtual_fow_map", true, 0); m_targetRenderer->render(); m_fowTarget->removeAll("b_img"); m_fowTarget->removeAll("c_img"); } void CellRenderer::addPathVisual(Instance* instance) { m_visualPaths.push_back(instance); } void CellRenderer::removePathVisual(Instance* instance) { for (std::vector::iterator it = m_visualPaths.begin(); it != m_visualPaths.end(); ++it) { if (*it == instance) { m_visualPaths.erase(it); break; } } } void CellRenderer::setEnabledCost(const std::string& costId, bool enabled) { if (enabled) { m_visualCosts.insert(costId); } else { m_visualCosts.erase(costId); } } bool CellRenderer::isEnabledCost(const std::string& costId) { std::set::iterator it = m_visualCosts.find(costId); if (it != m_visualCosts.end()) { return true; } return false; } } fifengine-0.4.1/engine/core/view/renderers/cellrenderer.h000066400000000000000000000156101304641216200234270ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_CELLRENDERER_H #define FIFE_CELLRENDERER_H // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "view/rendererbase.h" #include "targetrenderer.h" namespace FIFE { class RenderBackend; class Cell; class IFont; class CellRenderer: public RendererBase { public: /** Constructor. * * @param renderbackend The renderbackend to use. * @param position The position for this renderer in rendering pipeline. * @ see setPipelinePosition */ CellRenderer(RenderBackend* renderbackend, int32_t position); /** Copy Constructor. */ CellRenderer(const CellRenderer& old); /** Makes copy of this renderer. */ RendererBase* clone(); /** Destructor. */ virtual ~CellRenderer(); /** Returns the renderer name. * * @return The name as string. */ std::string getName(); /** This method is called by the view to ask renderer to draw its rendering aspect based on * given parameters. * * @param cam Camera view to draw * @param layer Current layer to be rendered * @param instances Instances on the current layer */ void render(Camera* cam, Layer* layer, RenderList& instances); /** Sets color that is used to visualize blocker. * * @param r The value for red, range 0-255. * @param g The value for green, range 0-255. * @param b The value for blue, range 0-255. */ void setBlockerColor(uint8_t r, uint8_t g, uint8_t b); /** Sets color that is used to visualize paths. * * @param r The value for red, range 0-255. * @param g The value for green, range 0-255. * @param b The value for blue, range 0-255. */ void setPathColor(uint8_t r, uint8_t g, uint8_t b); /** Enables blocking visualization. * * @param enabled A bool that enables or disables the visualization. */ void setEnabledBlocking(bool enabled); /** Gets whether blocking visualization is enabled. * * @return A bool, true if visualization is enabled, otherwise false. */ bool isEnabledBlocking(); /** Enables Fog of War visualization. * * @param enabled A bool that enables or disables the visualization. */ void setEnabledFogOfWar(bool enabled); /** Gets whether Fog of War visualization is enabled. * * @return A bool, true if visualization is enabled, otherwise false. */ bool isEnabledFogOfWar(); /** Enables path visualization. * * @param enabled A bool that enables or disables the visualization. */ void setEnabledPathVisual(bool enabled); /** Gets whether path visualization is enabled. * * @return A bool, true if visualization is enabled, otherwise false. */ bool isEnabledPathVisual(); /** Sets the layer that is used for Fog of War visualization. * * @param layer The layer that is used for visualization. */ void setFogOfWarLayer(Layer* layer); /** Sets the image that is used for concealed spaces. * * @param image The used image. */ void setConcealImage(ImagePtr image); /** Sets the fog image. * * @param image The used image. */ void setMaskImage(ImagePtr image); /** Adds a instance to path visualization. The current path is automatically rendered. * * @param instance The instance's path is visualized. */ void addPathVisual(Instance* instance); /** Removes a instance from path visualization. * * @param instance The instance's path is visualized. */ void removePathVisual(Instance* instance); /** Creates render target for Fog of War. * * @param cam The used camera. * @param layer The used layer. */ void createFowMap(Camera* cam, Layer* layer); /** Adds image to FoW render target. * * @param cam The used camera. * @param center The coordinates. * @param image The used image. * @param id The id as string. */ void addImageToMap(Camera* cam, Point center, ImagePtr image, const std::string& id); /** Returns the layer that is used for Fog of War visualization. * * @return The used layer. */ Layer* getFowLayer(); /** Enables cost visualization. * * @param costId The cost identifier as string. * @param enabled A bool that enables or disables the visualization. */ void setEnabledCost(const std::string& costId, bool enabled); /** Gets whether a cost visualization is enabled. * * @param costId The cost identifier as string. * @return A bool, true if visualization is enabled, otherwise false. */ bool isEnabledCost(const std::string& costId); /** Sets the font. * * @param font The used font. */ void setFont(IFont* font); /** Returns the font. * * @return The used font. */ IFont* getFont(); /** Updates render target. */ void updateFowMap(); /** Gets instance for interface access. */ static CellRenderer* getInstance(IRendererContainer* cnt); private: SDL_Color m_blockerColor; SDL_Color m_pathColor; bool m_blockingEnabled; bool m_fowEnabled; bool m_pathVisualEnabled; // FoW stuff TargetRenderer* m_targetRenderer; RenderTargetPtr m_fowTarget; Layer* m_fowLayer; ImagePtr m_concealImage; ImagePtr m_maskImage; ImagePtr m_fowImage; IFont* m_font; std::vector m_visualPaths; std::set m_visualCosts; }; } #endif fifengine-0.4.1/engine/core/view/renderers/cellrenderer.i000066400000000000000000000050441304641216200234300ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "view/renderers/cellrenderer.h" %} namespace FIFE { class RenderBackend; class IFont; class CellRenderer: public RendererBase { public: virtual ~CellRenderer(); std::string getName(); void setBlockerColor(uint8_t r, uint8_t g, uint8_t b); void setPathColor(uint8_t r, uint8_t g, uint8_t b); void setEnabledBlocking(bool enabled); bool isEnabledBlocking(); void setEnabledFogOfWar(bool enabled); bool isEnabledFogOfWar(); void setEnabledPathVisual(bool enabled); bool isEnabledPathVisual(); void setFogOfWarLayer(Layer* layer); void setConcealImage(ImagePtr image); void setMaskImage(ImagePtr image); void addPathVisual(Instance* instance); void removePathVisual(Instance* instance); void setEnabledCost(const std::string& costId, bool enabled); bool isEnabledCost(const std::string& costId); void setFont(IFont* font); IFont* getFont(); static CellRenderer* getInstance(IRendererContainer* cnt); private: CellRenderer(RenderBackend* renderbackend, int32_t position); }; } fifengine-0.4.1/engine/core/view/renderers/cellselectionrenderer.cpp000066400000000000000000000115721304641216200256730ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "video/renderbackend.h" #include "util/math/fife_math.h" #include "util/log/logger.h" #include "model/metamodel/grids/cellgrid.h" #include "model/structures/instance.h" #include "model/structures/layer.h" #include "model/structures/location.h" #include "view/camera.h" #include "cellselectionrenderer.h" namespace FIFE { /** Logger to use for this source file. * @relates Logger */ static Logger _log(LM_VIEWVIEW); CellSelectionRenderer::CellSelectionRenderer(RenderBackend* renderbackend, int32_t position): RendererBase(renderbackend, position) { setEnabled(false); m_color.r = 255; m_color.g = 0; m_color.b = 0; } CellSelectionRenderer::CellSelectionRenderer(const CellSelectionRenderer& old): RendererBase(old), m_color(old.m_color) { setEnabled(false); } RendererBase* CellSelectionRenderer::clone() { return new CellSelectionRenderer(*this); } CellSelectionRenderer::~CellSelectionRenderer() { } CellSelectionRenderer* CellSelectionRenderer::getInstance(IRendererContainer* cnt) { return dynamic_cast(cnt->getRenderer("CellSelectionRenderer")); } void CellSelectionRenderer::reset() { m_locations.clear(); } void CellSelectionRenderer::selectLocation(const Location* loc) { if (loc) { std::vector::const_iterator it = m_locations.begin(); for (; it != m_locations.end(); it++) { if ((*it).getLayerCoordinates() == loc->getLayerCoordinates()) { return; } } m_locations.push_back(Location(*loc)); } } void CellSelectionRenderer::deselectLocation(const Location* loc) { if (loc) { std::vector::iterator it = m_locations.begin(); for (; it != m_locations.end(); it++) { if ((*it).getLayerCoordinates() == loc->getLayerCoordinates()) { m_locations.erase(it); break; } } } } void CellSelectionRenderer::render(Camera* cam, Layer* layer, RenderList& instances) { if (m_locations.empty()) { return; } std::vector::const_iterator locit = m_locations.begin(); for (; locit != m_locations.end(); locit++) { const Location loc = *locit; if (layer != loc.getLayer()) { continue; } CellGrid* cg = layer->getCellGrid(); if (!cg) { FL_WARN(_log, "No cellgrid assigned to layer, cannot draw selection"); continue; } std::vector vertices; cg->getVertices(vertices, loc.getLayerCoordinates()); std::vector::const_iterator it = vertices.begin(); ScreenPoint firstpt = cam->toScreenCoordinates(cg->toMapCoordinates(*it)); Point pt1(firstpt.x, firstpt.y); Point pt2; ++it; for (; it != vertices.end(); it++) { ScreenPoint pts = cam->toScreenCoordinates(cg->toMapCoordinates(*it)); pt2.x = pts.x; pt2.y = pts.y; Point cpt1 = pt1; Point cpt2 = pt2; m_renderbackend->drawLine(cpt1, cpt2, m_color.r, m_color.g, m_color.b); pt1 = pt2; } m_renderbackend->drawLine(pt2, Point(firstpt.x, firstpt.y), m_color.r, m_color.g, m_color.b); } } void CellSelectionRenderer::setColor(uint8_t r, uint8_t g, uint8_t b) { m_color.r = r; m_color.g = g; m_color.b = b; } } fifengine-0.4.1/engine/core/view/renderers/cellselectionrenderer.h000066400000000000000000000077251304641216200253450ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_CELLSELECTIONRENDERER_H #define FIFE_CELLSELECTIONRENDERER_H // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "view/rendererbase.h" #include "model/structures/location.h" namespace FIFE { class RenderBackend; /** CellSelectionRenderer renders a frame around selected cells. */ class CellSelectionRenderer: public RendererBase { public: /** Constructor. * * @param renderbackend The renderbackend to use. * @param position The position for this renderer in rendering pipeline. * @ see setPipelinePosition */ CellSelectionRenderer(RenderBackend* renderbackend, int32_t position); /** Copy Constructor. */ CellSelectionRenderer(const CellSelectionRenderer& old); /** Makes copy of this renderer. */ RendererBase* clone(); /** Destructor. */ virtual ~CellSelectionRenderer(); /** This method is called by the view to ask renderer to draw its rendering aspect based on * given parameters. * * @param cam Camera view to draw * @param layer Current layer to be rendered * @param instances Instances on the current layer */ void render(Camera* cam, Layer* layer, RenderList& instances); /** Returns the renderer name. * * @return The name as string. */ std::string getName() { return "CellSelectionRenderer"; } /** Gets instance for interface access. */ static CellSelectionRenderer* getInstance(IRendererContainer* cnt); /** Deselects all locations. */ void reset(); /** Selects given location on map. * * @param loc The location. */ void selectLocation(const Location* loc); /** Deselects given location on map. * * @param loc The location. */ void deselectLocation(const Location* loc); /** Returns selected locations. * * @return A vector that contains all selected locations. */ const std::vector getLocations() const { return m_locations; } /** Changes the used color. * * @param r The value for red, range 0-255. * @param g The value for green, range 0-255. * @param b The value for blue, range 0-255. */ void setColor(uint8_t r, uint8_t g, uint8_t b); private: //! selected locations std::vector m_locations; //! currently used color SDL_Color m_color; }; } #endif fifengine-0.4.1/engine/core/view/renderers/cellselectionrenderer.i000066400000000000000000000041421304641216200253340ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "view/renderers/cellselectionrenderer.h" %} namespace FIFE { class RenderBackend; class CellSelectionRenderer: public RendererBase { public: virtual ~CellSelectionRenderer(); std::string getName(); static CellSelectionRenderer* getInstance(IRendererContainer* cnt); void reset(); void selectLocation(const Location* loc); void deselectLocation(const Location* loc); const std::vector getLocations() const; void setColor(uint8_t r, uint8_t g, uint8_t b); private: CellSelectionRenderer(RenderBackend* renderbackend, int32_t position); }; } fifengine-0.4.1/engine/core/view/renderers/coordinaterenderer.cpp000066400000000000000000000144531304641216200251760ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "video/renderbackend.h" #include "video/image.h" #include "video/fonts/ifont.h" #include "util/math/fife_math.h" #include "util/log/logger.h" #include "model/metamodel/grids/cellgrid.h" #include "model/metamodel/action.h" #include "model/structures/instance.h" #include "model/structures/layer.h" #include "model/structures/location.h" #include "view/camera.h" #include "view/visual.h" #include "coordinaterenderer.h" namespace FIFE { /** Logger to use for this source file. * @relates Logger */ static Logger _log(LM_VIEWVIEW); CoordinateRenderer::CoordinateRenderer(RenderBackend* renderbackend, int32_t position): RendererBase(renderbackend, position), m_layer_area(), m_tmploc(), m_c(), m_font(0), m_font_color(false), m_zoom(true) { setEnabled(false); } CoordinateRenderer::CoordinateRenderer(const CoordinateRenderer& old): RendererBase(old), m_layer_area(), m_tmploc(), m_c(), m_font(old.m_font), m_font_color(false), m_color(old.m_color), m_zoom(old.m_zoom) { setEnabled(false); } RendererBase* CoordinateRenderer::clone() { return new CoordinateRenderer(*this); } CoordinateRenderer::~CoordinateRenderer() { } CoordinateRenderer* CoordinateRenderer::getInstance(IRendererContainer* cnt) { return dynamic_cast(cnt->getRenderer("CoordinateRenderer")); } void CoordinateRenderer::adjustLayerArea() { m_tmploc.setMapCoordinates(m_c); ModelCoordinate c = m_tmploc.getLayerCoordinates(); m_layer_area.x = std::min(c.x, m_layer_area.x); m_layer_area.w = std::max(c.x, m_layer_area.w); m_layer_area.y = std::min(c.y, m_layer_area.y); m_layer_area.h = std::max(c.y, m_layer_area.h); } const int32_t MIN_COORD = -9999999; const int32_t MAX_COORD = 9999999; void CoordinateRenderer::render(Camera* cam, Layer* layer, RenderList& instances) { if (!m_font) { //no font selected.. nothing to render return; } Rect r = Rect(); const bool zoomed = (!Mathd::Equal(1.0, cam->getZoom()) && m_zoom); Rect cv = cam->getViewPort(); m_tmploc.setLayer(layer); m_layer_area.x = MAX_COORD; m_layer_area.y = MAX_COORD; m_layer_area.w = MIN_COORD; m_layer_area.h = MIN_COORD; m_c = cam->toMapCoordinates(ScreenPoint(cv.x, cv.y), false); adjustLayerArea(); m_c = cam->toMapCoordinates(ScreenPoint(cv.x+cv.w, cv.y), false); adjustLayerArea(); m_c = cam->toMapCoordinates(ScreenPoint(cv.x, cv.y+cv.h), false); adjustLayerArea(); m_c = cam->toMapCoordinates(ScreenPoint(cv.x+cv.w, cv.y+cv.h), false); adjustLayerArea(); SDL_Color old_color = m_font->getColor(); if(old_color.r != m_color.r || old_color.g != m_color.g || old_color.b != m_color.b) { m_font->setColor(m_color.r, m_color.g, m_color.b); m_font_color = true; } for (int32_t x = m_layer_area.x-1; x < m_layer_area.w+1; x++) { for (int32_t y = m_layer_area.y-1; y < m_layer_area.h+1; y++) { ModelCoordinate mc(x, y); m_tmploc.setLayerCoordinates(mc); ScreenPoint drawpt = cam->toScreenCoordinates(m_tmploc.getMapCoordinates()); if (drawpt.x < cv.x || drawpt.x > cv.x + cv.w || drawpt.y < cv.y || drawpt.y > cv.y + cv.h) { continue; } // we split the stringstream in three images, because so the TextRenderPool can reuse the most images. // more to render but less images to generate std::stringstream sts; sts << mc.x; Image* imgx = m_font->getAsImage(sts.str()); sts.str(","); Image* imgc = m_font->getAsImage(sts.str()); sts.str(""); sts << mc.y; Image* imgy = m_font->getAsImage(sts.str()); if (zoomed) { double zoom = cam->getZoom(); r.x = drawpt.x - ((imgx->getWidth() + imgc->getWidth() + imgy->getWidth())/2) * zoom; r.y = drawpt.y - (imgx->getHeight()/2) * zoom; r.w = imgx->getWidth() * zoom; r.h = imgx->getHeight() * zoom; imgx->render(r); r.x += r.w; r.w = imgc->getWidth() * zoom; imgc->render(r); r.x += r.w; r.w = imgy->getWidth() * zoom; imgy->render(r); } else { r.x = drawpt.x - (imgx->getWidth() + imgc->getWidth() + imgy->getWidth())/2; r.y = drawpt.y - imgx->getHeight()/2; r.w = imgx->getWidth(); r.h = imgx->getHeight(); imgx->render(r); r.x += r.w; r.w = imgc->getWidth(); imgc->render(r); r.x += r.w; r.w = imgy->getWidth(); imgy->render(r); } } } if(m_font_color) { m_font->setColor(old_color.r, old_color.g, old_color.b); m_font_color = false; } } void CoordinateRenderer::setColor(uint8_t r, uint8_t g, uint8_t b) { m_color.r = r; m_color.g = g; m_color.b = b; } } fifengine-0.4.1/engine/core/view/renderers/coordinaterenderer.h000066400000000000000000000074401304641216200246410ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_COORDINATERENDERER_H #define FIFE_COORDINATERENDERER_H // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "view/rendererbase.h" #include "util/structures/rect.h" namespace FIFE { class RenderBackend; class IFont; class CoordinateRenderer: public RendererBase { public: /** Constructor. * * @param renderbackend The renderbackend to use. * @param position The position for this renderer in rendering pipeline. * @ see setPipelinePosition */ CoordinateRenderer(RenderBackend* renderbackend, int32_t position); /** Copy Constructor. */ CoordinateRenderer(const CoordinateRenderer& old); /** Makes copy of this renderer. */ RendererBase* clone(); /** Destructor. */ virtual ~CoordinateRenderer(); /** This method is called by the view to ask renderer to draw its rendering aspect based on * given parameters. * * @param cam Camera view to draw * @param layer Current layer to be rendered * @param instances Instances on the current layer */ void render(Camera* cam, Layer* layer, RenderList& instances); /** Returns the renderer name. * * @return The name as string. */ std::string getName() { return "CoordinateRenderer"; } /** Changes the used color. * * @param r The value for red, range 0-255. * @param g The value for green, range 0-255. * @param b The value for blue, range 0-255. */ void setColor(uint8_t r, uint8_t g, uint8_t b); /** Changes default font in the renderer * @note that this does not change the font ownership * * @param font Pointer to the font */ void setFont(IFont* font) { m_font = font; } /** Enables / disables zooming for coordinate images, by default it is enabled. */ void setZoom(bool enable) { m_zoom = enable; } /** Gets instance for interface access. */ static CoordinateRenderer* getInstance(IRendererContainer* cnt); private: void adjustLayerArea(); Rect m_layer_area; Location m_tmploc; ExactModelCoordinate m_c; IFont* m_font; bool m_font_color; SDL_Color m_color; bool m_zoom; }; } #endif fifengine-0.4.1/engine/core/view/renderers/coordinaterenderer.i000066400000000000000000000040011304641216200246300ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "view/renderers/coordinaterenderer.h" %} namespace FIFE { class RenderBackend; class IFont; class CoordinateRenderer: public RendererBase { public: virtual ~CoordinateRenderer(); std::string getName(); void setFont(IFont* font); void setColor(uint8_t r, uint8_t g, uint8_t b); void setZoom(bool enable); static CoordinateRenderer* getInstance(IRendererContainer* cnt); private: CoordinateRenderer(RenderBackend* renderbackend, int32_t position); }; } fifengine-0.4.1/engine/core/view/renderers/floatingtextrenderer.cpp000066400000000000000000000141751304641216200255600ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "video/renderbackend.h" #include "util/math/fife_math.h" #include "util/log/logger.h" #include "video/fonts/ifont.h" #include "video/image.h" #include "model/structures/instance.h" #include "model/structures/layer.h" #include "model/structures/location.h" #include "view/visual.h" #include "view/camera.h" #include "floatingtextrenderer.h" namespace FIFE { /** Logger to use for this source file. * @relates Logger */ static Logger _log(LM_VIEWVIEW); FloatingTextRenderer::FloatingTextRenderer(RenderBackend* renderbackend, int32_t position): RendererBase(renderbackend, position), m_renderbackend(renderbackend), m_font(0), m_font_color(false), m_background(false), m_backborder(false) { setEnabled(false); } FloatingTextRenderer::FloatingTextRenderer(const FloatingTextRenderer& old): RendererBase(old), m_renderbackend(old.m_renderbackend), m_font(old.m_font), m_font_color(old.m_font_color), m_color(old.m_color), m_background(old.m_background), m_backborder(old.m_backborder) { setEnabled(false); } RendererBase* FloatingTextRenderer::clone() { return new FloatingTextRenderer(*this); } FloatingTextRenderer::~FloatingTextRenderer() { } void FloatingTextRenderer::render(Camera* cam, Layer* layer, RenderList& instances) { if (!m_font) { //no font selected.. nothing to render return; } RenderList::const_iterator instance_it = instances.begin(); uint32_t lm = m_renderbackend->getLightingModel(); SDL_Color old_color = m_font->getColor(); if(m_font_color) { m_font->setColor(m_color.r, m_color.g, m_color.b, m_color.a); } for (;instance_it != instances.end(); ++instance_it) { Instance* instance = (*instance_it)->instance; const std::string* saytext = instance->getSayText(); if (saytext) { const Rect& ir = (*instance_it)->dimensions; Image* img = m_font->getAsImageMultiline(*saytext); Rect r; r.x = (ir.x + ir.w/2) - img->getWidth()/2; /// the center of the text rect is always aligned to the instance's rect center. r.y = ir.y- img->getHeight(); /// make the text rect floating higher than the instance. r.w = img->getWidth(); r.h = img->getHeight(); // Without this check it can happen that changeRenderInfos() call produces an out_of_range error // because the image rendering can be skipped, if it's not on the screen. // The result is that it tried to modify more objects as exist. if (r.right() < 0 || r.x > static_cast(m_renderbackend->getWidth()) || r.bottom() < 0 || r.y > static_cast(m_renderbackend->getHeight())) { continue; } if(m_background || m_backborder) { const int32_t overdraw = 5; Point p = Point(r.x-overdraw, r.y-overdraw); if(m_background) { m_renderbackend->fillRectangle(p, r.w+2*overdraw, r.h+2*overdraw, m_backcolor.r, m_backcolor.g, m_backcolor.b, m_backcolor.a); } if(m_backborder) { m_renderbackend->drawRectangle(p, r.w+2*overdraw, r.h+2*overdraw, m_backbordercolor.r, m_backbordercolor.g, m_backbordercolor.b, m_backbordercolor.a); } } img->render(r); if(lm > 0) { uint16_t elements = 1; if (m_background) { ++elements; } if (m_backborder) { ++elements; } m_renderbackend->changeRenderInfos(RENDER_DATA_WITHOUT_Z, elements, 4, 5, false, true, 255, REPLACE, ALWAYS); } } } if(m_font_color) { m_font->setColor(old_color.r, old_color.g, old_color.b, old_color.a); } } void FloatingTextRenderer::setColor(uint8_t r, uint8_t g, uint8_t b, uint8_t a) { m_color.r = r; m_color.g = g; m_color.b = b; m_color.a = a; m_font_color = true; } void FloatingTextRenderer::setBackground(uint8_t br, uint8_t bg, uint8_t bb, uint8_t ba) { m_backcolor.r = br; m_backcolor.g = bg; m_backcolor.b = bb; m_backcolor.a = ba; m_background = true; } void FloatingTextRenderer::setBorder(uint8_t bbr, uint8_t bbg, uint8_t bbb, uint8_t bba) { m_backbordercolor.r = bbr; m_backbordercolor.g = bbg; m_backbordercolor.b = bbb; m_backbordercolor.a = bba; m_backborder = true; } void FloatingTextRenderer::resetBackground() { m_background = false; } void FloatingTextRenderer::resetBorder() { m_backborder = false; } FloatingTextRenderer* FloatingTextRenderer::getInstance(IRendererContainer* cnt) { return dynamic_cast(cnt->getRenderer("FloatingTextRenderer")); } } fifengine-0.4.1/engine/core/view/renderers/floatingtextrenderer.h000066400000000000000000000100641304641216200252160ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_FLOATINGTEXTRENDERER_H #define FIFE_FLOATINGTEXTRENDERER_H // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "view/rendererbase.h" namespace FIFE { class RenderBackend; class IFont; class FloatingTextRenderer: public RendererBase { public: /** Constructor. * * @param renderbackend The renderbackend to use. * @param position The position for this renderer in rendering pipeline. * @ see setPipelinePosition */ FloatingTextRenderer(RenderBackend* renderbackend, int32_t position); /** Copy Constructor. */ FloatingTextRenderer(const FloatingTextRenderer& old); /** Makes copy of this renderer. */ RendererBase* clone(); /** Destructor. */ virtual ~FloatingTextRenderer(); /** This method is called by the view to ask renderer to draw its rendering aspect based on * given parameters. * * @param cam Camera view to draw * @param layer Current layer to be rendered * @param instances Instances on the current layer */ void render(Camera* cam, Layer* layer, RenderList& instances); /** Returns the renderer name. * * @return The name as string. */ std::string getName() { return "FloatingTextRenderer"; } /** Changes default font in the renderer * Note that this does not change the font ownership */ void setFont(IFont* font) { m_font = font; } /** Changes default font color * Only useful for .ttf fonts */ void setColor(uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); /** Set default background quad * r,g,b,a values for background */ void setBackground(uint8_t br, uint8_t bg, uint8_t bb, uint8_t ba = 255); /** Set default border * r,g,b,a values for border */ void setBorder(uint8_t bbr, uint8_t bbg, uint8_t bbb, uint8_t bba = 255); /** Disable the default background */ void resetBackground(); /** Disable the default border */ void resetBorder(); /** Gets instance for interface access. */ static FloatingTextRenderer* getInstance(IRendererContainer* cnt); /** Provides access point to the RenderBackend */ RenderBackend* getRenderBackend() const {return m_renderbackend;} private: RenderBackend* m_renderbackend; IFont* m_font; bool m_font_color; SDL_Color m_color; bool m_background; bool m_backborder; SDL_Color m_backcolor; SDL_Color m_backbordercolor; }; } #endif fifengine-0.4.1/engine/core/view/renderers/floatingtextrenderer.i000066400000000000000000000042661304641216200252260ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "view/renderers/floatingtextrenderer.h" %} namespace FIFE { class RenderBackend; class IFont; class FloatingTextRenderer: public RendererBase { public: virtual ~FloatingTextRenderer(); void setFont(IFont* font); void setColor(uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); void setBackground(uint8_t br, uint8_t bg, uint8_t bb, uint8_t ba = 255); void setBorder(uint8_t bbr, uint8_t bbg, uint8_t bbb, uint8_t bba = 255); void resetBackground(); void resetBorder(); static FloatingTextRenderer* getInstance(IRendererContainer* cnt); private: FloatingTextRenderer(RenderBackend* renderbackend, int32_t position, IFont* font); }; } fifengine-0.4.1/engine/core/view/renderers/genericrenderer.cpp000066400000000000000000000344311304641216200244610ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "video/renderbackend.h" #include "video/animation.h" #include "video/fonts/ifont.h" #include "video/image.h" #include "video/imagemanager.h" #include "util/math/fife_math.h" #include "util/log/logger.h" #include "util/time/timemanager.h" #include "model/metamodel/grids/cellgrid.h" #include "model/metamodel/timeprovider.h" #include "model/structures/instance.h" #include "model/structures/layer.h" #include "model/structures/location.h" #include "view/camera.h" #include "genericrenderer.h" namespace FIFE { /** Logger to use for this source file. * @relates Logger */ static Logger _log(LM_VIEWVIEW); GenericRendererLineInfo::GenericRendererLineInfo(RendererNode n1, RendererNode n2, uint8_t r, uint8_t g, uint8_t b, uint8_t a): GenericRendererElementInfo(), m_edge1(n1), m_edge2(n2), m_red(r), m_green(g), m_blue(b), m_alpha(a) { } void GenericRendererLineInfo::render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend) { Point p1 = m_edge1.getCalculatedPoint(cam, layer); Point p2 = m_edge2.getCalculatedPoint(cam, layer); if(m_edge1.getLayer() == layer) { renderbackend->drawLine(p1, p2, m_red, m_green, m_blue, m_alpha); if (renderbackend->getLightingModel() > 0) { renderbackend->changeRenderInfos(RENDER_DATA_WITHOUT_Z, 1, 4, 5, false, false, 0, KEEP, ALWAYS); } } } GenericRendererPointInfo::GenericRendererPointInfo(RendererNode anchor, uint8_t r, uint8_t g, uint8_t b, uint8_t a): GenericRendererElementInfo(), m_anchor(anchor), m_red(r), m_green(g), m_blue(b), m_alpha(a) { } void GenericRendererPointInfo::render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend) { Point p = m_anchor.getCalculatedPoint(cam, layer); if(m_anchor.getLayer() == layer) { renderbackend->putPixel(p.x, p.y, m_red, m_green, m_blue, m_alpha); if (renderbackend->getLightingModel() > 0) { renderbackend->changeRenderInfos(RENDER_DATA_WITHOUT_Z, 1, 4, 5, false, false, 0, KEEP, ALWAYS); } } } GenericRendererTriangleInfo::GenericRendererTriangleInfo(RendererNode n1, RendererNode n2, RendererNode n3, uint8_t r, uint8_t g, uint8_t b, uint8_t a): GenericRendererElementInfo(), m_edge1(n1), m_edge2(n2), m_edge3(n3), m_red(r), m_green(g), m_blue(b), m_alpha(a) { } void GenericRendererTriangleInfo::render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend) { Point p1 = m_edge1.getCalculatedPoint(cam, layer); Point p2 = m_edge2.getCalculatedPoint(cam, layer); Point p3 = m_edge3.getCalculatedPoint(cam, layer); if(m_edge1.getLayer() == layer) { renderbackend->drawTriangle(p1, p2, p3, m_red, m_green, m_blue, m_alpha); if (renderbackend->getLightingModel() > 0) { renderbackend->changeRenderInfos(RENDER_DATA_WITHOUT_Z, 1, 4, 5, false, false, 0, KEEP, ALWAYS); } } } GenericRendererQuadInfo::GenericRendererQuadInfo(RendererNode n1, RendererNode n2, RendererNode n3, RendererNode n4, uint8_t r, uint8_t g, uint8_t b, uint8_t a): GenericRendererElementInfo(), m_edge1(n1), m_edge2(n2), m_edge3(n3), m_edge4(n4), m_red(r), m_green(g), m_blue(b), m_alpha(a) { } void GenericRendererQuadInfo::render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend) { Point p1 = m_edge1.getCalculatedPoint(cam, layer); Point p2 = m_edge2.getCalculatedPoint(cam, layer); Point p3 = m_edge3.getCalculatedPoint(cam, layer); Point p4 = m_edge4.getCalculatedPoint(cam, layer); if(m_edge1.getLayer() == layer) { renderbackend->drawQuad(p1, p2, p3, p4, m_red, m_green, m_blue, m_alpha); if (renderbackend->getLightingModel() > 0) { renderbackend->changeRenderInfos(RENDER_DATA_WITHOUT_Z, 1, 4, 5, false, false, 0, KEEP, ALWAYS); } } } GenericRendererVertexInfo::GenericRendererVertexInfo(RendererNode center, int32_t size, uint8_t r, uint8_t g, uint8_t b, uint8_t a): GenericRendererElementInfo(), m_center(center), m_size(size), m_red(r), m_green(g), m_blue(b), m_alpha(a) { } void GenericRendererVertexInfo::render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend) { Point p = m_center.getCalculatedPoint(cam, layer); if(m_center.getLayer() == layer) { renderbackend->drawVertex(p, m_size, m_red, m_green, m_blue, m_alpha); if (renderbackend->getLightingModel() > 0) { renderbackend->changeRenderInfos(RENDER_DATA_WITHOUT_Z, 1, 4, 5, false, false, 0, KEEP, ALWAYS); } } } GenericRendererImageInfo::GenericRendererImageInfo(RendererNode anchor, ImagePtr image, bool zoomed): GenericRendererElementInfo(), m_anchor(anchor), m_image(image), m_zoomed(zoomed) { } void GenericRendererImageInfo::render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend) { Point p = m_anchor.getCalculatedPoint(cam, layer, m_zoomed); if(m_anchor.getLayer() == layer) { Rect r; Rect viewport = cam->getViewPort(); uint32_t width, height; if(m_zoomed) { width = static_cast(round(m_image->getWidth() * cam->getZoom())); height = static_cast(round(m_image->getHeight() * cam->getZoom())); } else { width = m_image->getWidth(); height = m_image->getHeight(); } r.x = p.x-width/2; r.y = p.y-height/2; r.w = width; r.h = height; if(r.intersects(viewport)) { m_image->render(r); } } } GenericRendererAnimationInfo::GenericRendererAnimationInfo(RendererNode anchor, AnimationPtr animation, bool zoomed): GenericRendererElementInfo(), m_anchor(anchor), m_animation(animation), m_start_time(TimeManager::instance()->getTime()), m_time_scale(1.0), m_zoomed(zoomed) { } void GenericRendererAnimationInfo::render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend) { Point p = m_anchor.getCalculatedPoint(cam, layer, m_zoomed); if(m_anchor.getLayer() == layer) { int32_t animtime = scaleTime(m_time_scale, TimeManager::instance()->getTime() - m_start_time) % m_animation->getDuration(); ImagePtr img = m_animation->getFrameByTimestamp(animtime); Rect r; Rect viewport = cam->getViewPort(); uint32_t width, height; if(m_zoomed) { width = static_cast(round(img->getWidth() * cam->getZoom())); height = static_cast(round(img->getHeight() * cam->getZoom())); } else { width = img->getWidth(); height = img->getHeight(); } r.x = p.x-width/2; r.y = p.y-height/2; r.w = width; r.h = height; if(r.intersects(viewport)) { img->render(r); } } } GenericRendererTextInfo::GenericRendererTextInfo(RendererNode anchor, IFont* font, std::string text, bool zoomed): GenericRendererElementInfo(), m_anchor(anchor), m_font(font), m_text(text), m_zoomed(zoomed) { } void GenericRendererTextInfo::render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend) { Point p = m_anchor.getCalculatedPoint(cam, layer, m_zoomed); if(m_anchor.getLayer() == layer) { Image* img = m_font->getAsImageMultiline(m_text); Rect r; Rect viewport = cam->getViewPort(); uint32_t width, height; if(m_zoomed) { width = static_cast(round(img->getWidth() * cam->getZoom())); height = static_cast(round(img->getHeight() * cam->getZoom())); } else { width = img->getWidth(); height = img->getHeight(); } r.x = p.x-width/2; r.y = p.y-height/2; r.w = width; r.h = height; if(r.intersects(viewport)) { img->render(r); if (renderbackend->getLightingModel() > 0) { renderbackend->changeRenderInfos(RENDER_DATA_WITHOUT_Z, 1, 4, 5, false, false, 0, KEEP, ALWAYS); } } } } GenericRendererResizeInfo::GenericRendererResizeInfo(RendererNode anchor, ImagePtr image, int32_t width, int32_t height, bool zoomed): GenericRendererElementInfo(), m_anchor(anchor), m_image(image), m_width(width), m_height(height), m_zoomed(zoomed) { } void GenericRendererResizeInfo::render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend) { Point p = m_anchor.getCalculatedPoint(cam, layer, m_zoomed); if(m_anchor.getLayer() == layer) { Rect r; Rect viewport = cam->getViewPort(); uint32_t width, height; if(m_zoomed) { width = static_cast(round(m_width * cam->getZoom())); height = static_cast(round(m_height * cam->getZoom())); } else { width = m_width; height = m_height; } r.x = p.x-width/2; r.y = p.y-height/2; r.w = width; r.h = height; if(r.intersects(viewport)) { m_image->render(r); } } } GenericRenderer* GenericRenderer::getInstance(IRendererContainer* cnt) { return dynamic_cast(cnt->getRenderer("GenericRenderer")); } GenericRenderer::GenericRenderer(RenderBackend* renderbackend, int32_t position): RendererBase(renderbackend, position), m_groups() { setEnabled(false); } GenericRenderer::GenericRenderer(const GenericRenderer& old): RendererBase(old), m_groups() { setEnabled(false); } RendererBase* GenericRenderer::clone() { return new GenericRenderer(*this); } GenericRenderer::~GenericRenderer() { } void GenericRenderer::addLine(const std::string &group, RendererNode n1, RendererNode n2, uint8_t r, uint8_t g, uint8_t b, uint8_t a) { GenericRendererElementInfo* info = new GenericRendererLineInfo(n1, n2, r, g, b, a); m_groups[group].push_back(info); } void GenericRenderer::addPoint(const std::string &group, RendererNode n, uint8_t r, uint8_t g, uint8_t b, uint8_t a) { GenericRendererElementInfo* info = new GenericRendererPointInfo(n, r, g, b, a); m_groups[group].push_back(info); } void GenericRenderer::addTriangle(const std::string &group, RendererNode n1, RendererNode n2, RendererNode n3, uint8_t r, uint8_t g, uint8_t b, uint8_t a) { GenericRendererElementInfo* info = new GenericRendererTriangleInfo(n1, n2, n3, r, g, b, a); m_groups[group].push_back(info); } void GenericRenderer::addQuad(const std::string &group, RendererNode n1, RendererNode n2, RendererNode n3, RendererNode n4, uint8_t r, uint8_t g, uint8_t b, uint8_t a) { GenericRendererElementInfo* info = new GenericRendererQuadInfo(n1, n2, n3, n4, r, g, b, a); m_groups[group].push_back(info); } void GenericRenderer::addVertex(const std::string &group, RendererNode n, int32_t size, uint8_t r, uint8_t g, uint8_t b, uint8_t a) { GenericRendererElementInfo* info = new GenericRendererVertexInfo(n, size, r, g, b, a); m_groups[group].push_back(info); } void GenericRenderer::addText(const std::string &group, RendererNode n, IFont* font, const std::string &text, bool zoomed) { GenericRendererElementInfo* info = new GenericRendererTextInfo(n, font, text, zoomed); m_groups[group].push_back(info); } void GenericRenderer::addImage(const std::string &group, RendererNode n, ImagePtr image, bool zoomed) { GenericRendererElementInfo* info = new GenericRendererImageInfo(n, image, zoomed); m_groups[group].push_back(info); } void GenericRenderer::addAnimation(const std::string &group, RendererNode n, AnimationPtr animation, bool zoomed) { GenericRendererElementInfo* info = new GenericRendererAnimationInfo(n, animation, zoomed); m_groups[group].push_back(info); } void GenericRenderer::resizeImage(const std::string &group, RendererNode n, ImagePtr image, int32_t width, int32_t height, bool zoomed) { GenericRendererElementInfo* info = new GenericRendererResizeInfo(n, image, width, height, zoomed); m_groups[group].push_back(info); } void GenericRenderer::removeAll(const std::string &group) { std::vector::const_iterator info_it = m_groups[group].begin(); for (;info_it != m_groups[group].end(); ++info_it) { delete *info_it; } m_groups[group].clear(); m_groups.erase(group); } // Remove all groups void GenericRenderer::removeAll() { std::map >::iterator it = m_groups.begin(); for (; it != m_groups.end(); ++it) { std::vector::const_iterator info_it = it->second.begin(); for (;info_it != it->second.end(); ++info_it) { delete *info_it; } } m_groups.clear(); } // Clear all groups void GenericRenderer::reset() { removeAll(); } void GenericRenderer::render(Camera* cam, Layer* layer, RenderList& instances) { std::map >::iterator group_it = m_groups.begin(); for(; group_it != m_groups.end(); ++group_it) { std::vector::const_iterator info_it = group_it->second.begin(); for (;info_it != group_it->second.end(); ++info_it) { (*info_it)->render(cam, layer, instances, m_renderbackend); } } } } fifengine-0.4.1/engine/core/view/renderers/genericrenderer.h000066400000000000000000000277431304641216200241360ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_GENERICRENDERER_H #define FIFE_GENERICRENDERER_H // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "model/structures/renderernode.h" #include "view/rendererbase.h" #include "video/animation.h" namespace FIFE { class RenderBackend; class IFont; class GenericRendererElementInfo { public: virtual void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend) {}; virtual ~GenericRendererElementInfo() {}; }; class GenericRendererLineInfo : public GenericRendererElementInfo { public: void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend); GenericRendererLineInfo(RendererNode n1, RendererNode n2, uint8_t r, uint8_t g, uint8_t b, uint8_t a); virtual ~GenericRendererLineInfo() {}; private: RendererNode m_edge1; RendererNode m_edge2; uint8_t m_red; uint8_t m_green; uint8_t m_blue; uint8_t m_alpha; }; class GenericRendererPointInfo : public GenericRendererElementInfo { public: void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend); GenericRendererPointInfo(RendererNode n, uint8_t r, uint8_t g, uint8_t b, uint8_t a); virtual ~GenericRendererPointInfo() {}; private: RendererNode m_anchor; uint8_t m_red; uint8_t m_green; uint8_t m_blue; uint8_t m_alpha; }; class GenericRendererTriangleInfo : public GenericRendererElementInfo { public: void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend); GenericRendererTriangleInfo(RendererNode n1, RendererNode n2, RendererNode n3, uint8_t r, uint8_t g, uint8_t b, uint8_t a); virtual ~GenericRendererTriangleInfo() {}; private: RendererNode m_edge1; RendererNode m_edge2; RendererNode m_edge3; uint8_t m_red; uint8_t m_green; uint8_t m_blue; uint8_t m_alpha; }; class GenericRendererQuadInfo : public GenericRendererElementInfo { public: void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend); GenericRendererQuadInfo(RendererNode n1, RendererNode n2, RendererNode n3, RendererNode n4, uint8_t r, uint8_t g, uint8_t b, uint8_t a); virtual ~GenericRendererQuadInfo() {}; private: RendererNode m_edge1; RendererNode m_edge2; RendererNode m_edge3; RendererNode m_edge4; uint8_t m_red; uint8_t m_green; uint8_t m_blue; uint8_t m_alpha; }; class GenericRendererVertexInfo : public GenericRendererElementInfo { public: void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend); GenericRendererVertexInfo(RendererNode center, int32_t size, uint8_t r, uint8_t g, uint8_t b, uint8_t a); virtual ~GenericRendererVertexInfo() {}; private: RendererNode m_center; int32_t m_size; uint8_t m_red; uint8_t m_green; uint8_t m_blue; uint8_t m_alpha; }; class GenericRendererImageInfo : public GenericRendererElementInfo { public: void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend); GenericRendererImageInfo(RendererNode n, ImagePtr image, bool zoomed = true); virtual ~GenericRendererImageInfo() {}; private: RendererNode m_anchor; ImagePtr m_image; bool m_zoomed; }; class GenericRendererAnimationInfo : public GenericRendererElementInfo { public: void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend); GenericRendererAnimationInfo(RendererNode n, AnimationPtr animation, bool zoomed = true); virtual ~GenericRendererAnimationInfo() {}; private: RendererNode m_anchor; AnimationPtr m_animation; uint32_t m_start_time; float m_time_scale; bool m_zoomed; }; class GenericRendererTextInfo : public GenericRendererElementInfo { public: void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend); GenericRendererTextInfo(RendererNode n, IFont* font, std::string text, bool zoomed = true); virtual ~GenericRendererTextInfo() {}; private: RendererNode m_anchor; IFont* m_font; std::string m_text; bool m_zoomed; }; class GenericRendererResizeInfo : public GenericRendererElementInfo { public: void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend); GenericRendererResizeInfo(RendererNode n, ImagePtr image, int32_t width, int32_t height, bool zoomed = true); virtual ~GenericRendererResizeInfo() {}; private: RendererNode m_anchor; ImagePtr m_image; int32_t m_width; int32_t m_height; bool m_zoomed; }; class GenericRenderer: public RendererBase { public: /** Constructor. * * @param renderbackend The renderbackend to use. * @param position The position for this renderer in rendering pipeline. * @ see setPipelinePosition */ GenericRenderer(RenderBackend* renderbackend, int32_t position); /** Copy Constructor. */ GenericRenderer(const GenericRenderer& old); /** Makes copy of this renderer. */ RendererBase* clone(); /** Destructor. */ virtual ~GenericRenderer(); /** This method is called by the view to ask renderer to draw its rendering aspect based on * given parameters. * * @param cam Camera view to draw * @param layer Current layer to be rendered * @param instances Instances on the current layer */ void render(Camera* cam, Layer* layer, RenderList& instances); /** Returns the renderer name. * * @return The name as string. */ std::string getName() { return "GenericRenderer"; } /** Gets instance for interface access. */ static GenericRenderer* getInstance(IRendererContainer* cnt); /** Adds a line. * * @param group The group name as string. * @param n1 A RendererNode, contains the coordinates. * @param n2 A RendererNode, contains the coordinates. * @param r The value for red, range 0-255. * @param g The value for green, range 0-255. * @param b The value for blue, range 0-255. * @param a The value for alpha, range 0-255. Default value is 255, full opaque. */ void addLine(const std::string &group, RendererNode n1, RendererNode n2, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); /** Adds a point. * * @param group The group name as string. * @param n A RendererNode, contains the coordinates. * @param r The value for red, range 0-255. * @param g The value for green, range 0-255. * @param b The value for blue, range 0-255. * @param a The value for alpha, range 0-255. Default value is 255, full opaque. */ void addPoint(const std::string &group, RendererNode n, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); /** Adds a triangle. * * @param group The group name as string. * @param n1 A RendererNode, contains the coordinates. * @param n2 A RendererNode, contains the coordinates. * @param n3 A RendererNode, contains the coordinates. * @param r The value for red, range 0-255. * @param g The value for green, range 0-255. * @param b The value for blue, range 0-255. * @param a The value for alpha, range 0-255. Default value is 255, full opaque. */ void addTriangle(const std::string &group, RendererNode n1, RendererNode n2, RendererNode n3, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); /** Adds a quad. * * @param group The group name as string. * @param n1 A RendererNode, contains the coordinates. * @param n2 A RendererNode, contains the coordinates. * @param n3 A RendererNode, contains the coordinates. * @param n4 A RendererNode, contains the coordinates. * @param r The value for red, range 0-255. * @param g The value for green, range 0-255. * @param b The value for blue, range 0-255. * @param a The value for alpha, range 0-255. Default value is 255, full opaque. */ void addQuad(const std::string &group, RendererNode n1, RendererNode n2, RendererNode n3, RendererNode n4, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); /** Adds a vertex. * * @param group The group name as string. * @param n A RendererNode, contains the coordinates. * @param size The size of the vertex. * @param r The value for red, range 0-255. * @param g The value for green, range 0-255. * @param b The value for blue, range 0-255. * @param a The value for alpha, range 0-255. Default value is 255, full opaque. */ void addVertex(const std::string &group, RendererNode n, int32_t size, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); /** Adds text. * * @param group The group name as string. * @param n A RendererNode, contains the coordinates. * @param font The used font. * @param text The text as string. * @param zoomed A flag that indicates whether the camera zoom to be used. Default is true. */ void addText(const std::string &group, RendererNode n, IFont* font, const std::string &text, bool zoomed = true); /** Adds an image. * * @param group The group name as string. * @param n A RendererNode, contains the coordinates. * @param image The used image. * @param zoomed A flag that indicates whether the camera zoom to be used. Default is true. */ void addImage(const std::string &group, RendererNode n, ImagePtr image, bool zoomed = true); /** Adds an animation. * * @param group The group name as string. * @param n A RendererNode, contains the coordinates. * @param animation The used animation. * @param zoomed A flag that indicates whether the camera zoom to be used. Default is true. */ void addAnimation(const std::string &group, RendererNode n, AnimationPtr animation, bool zoomed = true); /** Adds an image with another size. * * @param group The group name as string. * @param n A RendererNode, contains the coordinates. * @param image The used image. * @param width New width of the image. * @param height New height of the image. * @param zoomed A flag that indicates whether the camera zoom to be used. Default is true. */ void resizeImage(const std::string &group, RendererNode n, ImagePtr image, int32_t width, int32_t height, bool zoomed = true); /** Removes all elements of a group. * * @param group The group name as string. */ void removeAll(const std::string &group); /** Removes all elements. */ void removeAll(); /** Resets the renderer. */ void reset(); private: //! A map that holds the groups together with the appended render elements. std::map > m_groups; }; } #endif fifengine-0.4.1/engine/core/view/renderers/genericrenderer.i000066400000000000000000000121661304641216200241300ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "view/renderers/genericrenderer.h" %} namespace FIFE { class RenderBackend; class GenericRendererElementInfo { public: virtual ~GenericRendererElementInfo() {}; }; class GenericRendererLineInfo : public GenericRendererElementInfo { public: GenericRendererLineInfo(RendererNode n1, RendererNode n2, uint8_t r, uint8_t g, uint8_t b, uint8_t a); virtual ~GenericRendererLineInfo() {}; }; class GenericRendererPointInfo : public GenericRendererElementInfo { public: GenericRendererPointInfo(RendererNode n, uint8_t r, uint8_t g, uint8_t b, uint8_t a); virtual ~GenericRendererPointInfo() {}; }; class GenericRendererTriangleInfo : public GenericRendererElementInfo { public: GenericRendererTriangleInfo(RendererNode n1, RendererNode n2, RendererNode n3, uint8_t r, uint8_t g, uint8_t b, uint8_t a); virtual ~GenericRendererTriangleInfo() {}; }; class GenericRendererQuadInfo : public GenericRendererElementInfo { public: GenericRendererQuadInfo(RendererNode n1, RendererNode n2, RendererNode n3, RendererNode n4, uint8_t r, uint8_t g, uint8_t b, uint8_t a); virtual ~GenericRendererQuadInfo() {}; }; class GenericRendererVertexInfo : public GenericRendererElementInfo { public: GenericRendererVertexInfo(RendererNode center, int32_t size, uint8_t r, uint8_t g, uint8_t b, uint8_t a); virtual ~GenericRendererVertexInfo() {}; }; class GenericRendererImageInfo : public GenericRendererElementInfo { public: GenericRendererImageInfo(RendererNode n, ImagePtr image, bool zoomed = true); virtual ~GenericRendererImageInfo() {}; }; class GenericRendererAnimationInfo : public GenericRendererElementInfo { public: GenericRendererAnimationInfo(RendererNode n, AnimationPtr animation, bool zoomed = true); virtual ~GenericRendererAnimationInfo() {}; }; class GenericRendererTextInfo : public GenericRendererElementInfo { public: GenericRendererTextInfo(RendererNode n, IFont* font, std::string text, bool zoomed = true); virtual ~GenericRendererTextInfo() {}; }; class GenericRendererResizeInfo : public GenericRendererElementInfo { public: GenericRendererResizeInfo(RendererNode n, ImagePtr image, int32_t width, int32_t height, bool zoomed = true); virtual ~GenericRendererResizeInfo() {}; }; class GenericRenderer: public RendererBase { public: GenericRenderer(RenderBackend* renderbackend, int32_t position); ~GenericRenderer(); std::string getName(); static GenericRenderer* getInstance(IRendererContainer* cnt); void addLine(const std::string &group, RendererNode n1, RendererNode n2, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); void addPoint(const std::string &group, RendererNode n, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); void addTriangle(const std::string &group, RendererNode n1, RendererNode n2, RendererNode n3, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); void addQuad(const std::string &group, RendererNode n1, RendererNode n2, RendererNode n3, RendererNode n4, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); void addVertex(const std::string &group, RendererNode n, int32_t size, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); void addText(const std::string &group, RendererNode n, IFont* font, const std::string &text, bool zoomed = true); void addImage(const std::string &group, RendererNode n, ImagePtr image, bool zoomed = true); void addAnimation(const std::string &group, RendererNode n, AnimationPtr animation, bool zoomed = true); void resizeImage(const std::string &group, RendererNode n, ImagePtr image, int32_t width, int32_t height, bool zoomed = true); void removeAll(const std::string &group); void removeAll(); }; } fifengine-0.4.1/engine/core/view/renderers/gridrenderer.cpp000066400000000000000000000162221304641216200237700ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "video/renderbackend.h" #include "util/math/fife_math.h" #include "util/log/logger.h" #include "model/metamodel/grids/cellgrid.h" #include "model/structures/instance.h" #include "model/structures/layer.h" #include "model/structures/location.h" #include "view/camera.h" #include "gridrenderer.h" namespace FIFE { /** Logger to use for this source file. * @relates Logger */ static Logger _log(LM_VIEWVIEW); GridRenderer::GridRenderer(RenderBackend* renderbackend, int32_t position): RendererBase(renderbackend, position) { setEnabled(false); m_color.r = 0; m_color.g = 255; m_color.b = 0; } GridRenderer::GridRenderer(const GridRenderer& old): RendererBase(old), m_color(old.m_color) { setEnabled(false); } RendererBase* GridRenderer::clone() { return new GridRenderer(*this); } GridRenderer::~GridRenderer() { } GridRenderer* GridRenderer::getInstance(IRendererContainer* cnt) { return dynamic_cast(cnt->getRenderer("GridRenderer")); } void GridRenderer::render(Camera* cam, Layer* layer, RenderList& instances) { CellGrid* cg = layer->getCellGrid(); if (!cg) { FL_WARN(_log, "No cellgrid assigned to layer, cannot draw grid"); return; } // // //render elev_coord box // //draw front quad // // 1,1,1 // //1,-1,1 // //-1,-1,1 // //-1,1,1 //We don't need the elevation box atm // Point a,b,c,d; // // // ScreenPoint copt1 =cam->toScreenCoordinates(ExactModelCoordinate(1,1,1) ); // ScreenPoint copt2 =cam->toScreenCoordinates(ExactModelCoordinate(1,-1,1) ); // Point coptt1(copt1.x,copt1.y); // Point coptt2(copt2.x,copt2.y); // m_renderbackend->drawLine(coptt1,coptt2 ,15, 15, 200); // a = coptt1; // // copt1 =cam->toScreenCoordinates(ExactModelCoordinate(1,-1,1) ); // copt2 =cam->toScreenCoordinates(ExactModelCoordinate(-1,-1,1) ); // coptt1 = Point(copt1.x,copt1.y); // coptt2 = Point(copt2.x,copt2.y); // m_renderbackend->drawLine(coptt1,coptt2 ,15, 15, 200); // b = coptt1; // // copt1 =cam->toScreenCoordinates(ExactModelCoordinate(-1,-1,1) ); // copt2 =cam->toScreenCoordinates(ExactModelCoordinate(-1,1,1) ); // coptt1 = Point(copt1.x,copt1.y); // coptt2 = Point(copt2.x,copt2.y); // m_renderbackend->drawLine(coptt1,coptt2 ,15, 15, 200); // c = coptt1; // // copt1 =cam->toScreenCoordinates(ExactModelCoordinate(-1,1,1) ); // copt2 =cam->toScreenCoordinates(ExactModelCoordinate(1,1,1) ); // coptt1 = Point(copt1.x,copt1.y); // coptt2 = Point(copt2.x,copt2.y); // m_renderbackend->drawLine(coptt1,coptt2 ,15, 15, 20); // d = coptt1; // // m_renderbackend->drawQuad(a,b,c,d,15, 15, 200); // // // //draw back quad // copt1 =cam->toScreenCoordinates(ExactModelCoordinate(-1,-1,-1) ); // copt2 =cam->toScreenCoordinates(ExactModelCoordinate(-1,1,-1) ); // coptt1 = Point(copt1.x,copt1.y); // coptt2 = Point(copt2.x,copt2.y); // m_renderbackend->drawLine(coptt1,coptt2 ,200, 200, 200); // // copt1 =cam->toScreenCoordinates(ExactModelCoordinate(-1,1,-1) ); // copt2 =cam->toScreenCoordinates(ExactModelCoordinate(1,1,-1) ); // coptt1 = Point(copt1.x,copt1.y); // coptt2 = Point(copt2.x,copt2.y); // m_renderbackend->drawLine(coptt1,coptt2 ,200, 200, 200); // // copt1 =cam->toScreenCoordinates(ExactModelCoordinate(1,1,-1) ); // copt2 =cam->toScreenCoordinates(ExactModelCoordinate(1,-1,-1) ); // coptt1 = Point(copt1.x,copt1.y); // coptt2 = Point(copt2.x,copt2.y); // m_renderbackend->drawLine(coptt1,coptt2 ,200, 200, 200); // // copt1 =cam->toScreenCoordinates(ExactModelCoordinate(1,-1,-1) ); // copt2 =cam->toScreenCoordinates(ExactModelCoordinate(-1,-1,-1) ); // coptt1 = Point(copt1.x,copt1.y); // coptt2 = Point(copt2.x,copt2.y); // m_renderbackend->drawLine(coptt1,coptt2 ,200, 200, 200); // make the viewport 25% larger Rect cv = cam->getViewPort(); int32_t cvx2 = round((cv.x+cv.w) * 1.25); int32_t cvy2 = round((cv.y+cv.h) * 1.25); cv.x -= round((cv.x+cv.w) * 0.125); cv.y -= round((cv.y+cv.h) * 0.125); RenderList::const_iterator instance_it = instances.begin(); for (;instance_it != instances.end(); ++instance_it) { Instance* instance = (*instance_it)->instance; std::vector vertices; cg->getVertices(vertices, instance->getLocationRef().getLayerCoordinates()); std::vector::const_iterator it = vertices.begin(); ScreenPoint firstpt = cam->toScreenCoordinates(cg->toMapCoordinates(*it)); Point pt1(firstpt.x, firstpt.y); Point pt2; ++it; for (; it != vertices.end(); it++) { ScreenPoint pts = cam->toScreenCoordinates(cg->toMapCoordinates(*it)); pt2.x = pts.x; pt2.y = pts.y; Point cpt1 = pt1; Point cpt2 = pt2; if (cpt1.x < cv.x) cpt1.x = cv.x; if (cpt2.x < cv.x) cpt2.x = cv.x; if (cpt1.y < cv.y) cpt1.y = cv.y; if (cpt2.y < cv.y) cpt2.y = cv.y; if (cpt1.x > cvx2) cpt1.x = cvx2; if (cpt2.x > cvx2) cpt2.x = cvx2; if (cpt1.y > cvy2) cpt1.y = cvy2; if (cpt2.y > cvy2) cpt2.y = cvy2; m_renderbackend->drawLine(cpt1, cpt2, m_color.r, m_color.g, m_color.b); pt1 = pt2; } if ((pt2.x >= cv.x) && (pt2.x <= cvx2) && (pt2.y >= cv.y) && (pt2.y <= cvy2)) { if ((firstpt.x >= cv.x) && (firstpt.x <= cvx2) && (firstpt.y >= cv.y) && (firstpt.y <= cvy2)) { m_renderbackend->drawLine(pt2, Point(firstpt.x, firstpt.y), m_color.r, m_color.g, m_color.b); } } } } void GridRenderer::setColor(Uint8 r, Uint8 g, Uint8 b) { m_color.r = r; m_color.g = g; m_color.b = b; } } fifengine-0.4.1/engine/core/view/renderers/gridrenderer.h000066400000000000000000000050201304641216200234270ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_GRIDRENDERER_H #define FIFE_GRIDRENDERER_H // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "view/rendererbase.h" namespace FIFE { class RenderBackend; class GridRenderer: public RendererBase { public: /** constructor. * @param renderbackend to use * @param position position for this renderer in rendering pipeline */ GridRenderer(RenderBackend* renderbackend, int32_t position); GridRenderer(const GridRenderer& old); RendererBase* clone(); /** Destructor. */ virtual ~GridRenderer(); void render(Camera* cam, Layer* layer, RenderList& instances); std::string getName() { return "GridRenderer"; } void setColor(Uint8 r, Uint8 g, Uint8 b); static GridRenderer* getInstance(IRendererContainer* cnt); private: SDL_Color m_color; }; } #endif fifengine-0.4.1/engine/core/view/renderers/gridrenderer.i000066400000000000000000000036171304641216200234420ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "view/renderers/gridrenderer.h" %} namespace FIFE { class RenderBackend; class GridRenderer: public RendererBase { public: virtual ~GridRenderer(); std::string getName(); void setColor(Uint8 r, Uint8 g, Uint8 b); static GridRenderer* getInstance(IRendererContainer* cnt); private: GridRenderer(RenderBackend* renderbackend, int32_t position); }; } fifengine-0.4.1/engine/core/view/renderers/instancerenderer.cpp000066400000000000000000001457151304641216200246610ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes #include // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "video/renderbackend.h" #include "video/image.h" #include "video/imagemanager.h" #include "video/sdl/sdlimage.h" #include "video/animation.h" #include "util/math/fife_math.h" #include "util/log/logger.h" #include "util/time/timemanager.h" #include "model/metamodel/grids/cellgrid.h" #include "model/metamodel/action.h" #include "model/structures/instance.h" #include "model/structures/layer.h" #include "model/structures/location.h" #include "model/structures/map.h" #include "model/structures/cell.h" #include "model/structures/cellcache.h" #include "video/opengl/fife_opengl.h" #include "view/camera.h" #include "view/visual.h" #include "cellrenderer.h" #include "instancerenderer.h" namespace FIFE { /** Logger to use for this source file. * @relates Logger */ static Logger _log(LM_VIEWVIEW); class InstanceRendererDeleteListener : public InstanceDeleteListener { public: InstanceRendererDeleteListener(InstanceRenderer* r) { m_renderer = r; } virtual ~InstanceRendererDeleteListener() {} virtual void onInstanceDeleted(Instance* instance) { m_renderer->removeInstance(instance); } private: InstanceRenderer* m_renderer; }; InstanceRenderer::OutlineInfo::OutlineInfo(InstanceRenderer* r): r(0), g(0), b(0), width(1), threshold(1), dirty(false), curimg(NULL), renderer(r) { } InstanceRenderer::ColoringInfo::ColoringInfo(InstanceRenderer* r): r(0), g(0), b(0), a(128), dirty(false), curimg(NULL), renderer(r) { } InstanceRenderer::AreaInfo::AreaInfo(): instance(NULL), groups(), w(1), h(1), trans(0), front(true), z(0) { } InstanceRenderer::OutlineInfo::~OutlineInfo() { renderer->addToCheck(outline); } InstanceRenderer::ColoringInfo::~ColoringInfo() { if (renderer->needColorBinding()) { renderer->addToCheck(overlay); } } InstanceRenderer::AreaInfo::~AreaInfo() { } InstanceRenderer* InstanceRenderer::getInstance(IRendererContainer* cnt) { return dynamic_cast(cnt->getRenderer("InstanceRenderer")); } InstanceRenderer::InstanceRenderer(RenderBackend* renderbackend, int32_t position): RendererBase(renderbackend, position), m_area_layer(false), m_interval(60*1000), m_timer_enabled(false) { setEnabled(true); if (m_renderbackend->getName() == "OpenGL" && m_renderbackend->isDepthBufferEnabled()) { m_need_sorting = false; m_need_bind_coloring = false; } else { m_need_sorting = true; if (m_renderbackend->getName() == "SDL") { m_need_bind_coloring = true; } else { m_need_bind_coloring = false; } } // init timer m_timer.setInterval(m_interval); m_timer.setCallback(boost::bind(&InstanceRenderer::check, this)); // create delete listener m_delete_listener = new InstanceRendererDeleteListener(this); } InstanceRenderer::InstanceRenderer(const InstanceRenderer& old): RendererBase(old), m_area_layer(false), m_interval(old.m_interval), m_timer_enabled(false) { setEnabled(true); if (m_renderbackend->getName() == "OpenGL" && m_renderbackend->isDepthBufferEnabled()) { m_need_sorting = false; m_need_bind_coloring = false; } else { m_need_sorting = true; if (m_renderbackend->getName() == "SDL") { m_need_bind_coloring = true; } else { m_need_bind_coloring = false; } } // init timer m_timer.setInterval(m_interval); m_timer.setCallback(boost::bind(&InstanceRenderer::check, this)); // create delete listener m_delete_listener = new InstanceRendererDeleteListener(this); } RendererBase* InstanceRenderer::clone() { return new InstanceRenderer(*this); } InstanceRenderer::~InstanceRenderer() { // remove listener from instances if (!m_assigned_instances.empty()) { reset(); } // delete listener delete m_delete_listener; } void InstanceRenderer::render(Camera* cam, Layer* layer, RenderList& instances) { // FL_DBG(_log, "Iterating layer..."); CellGrid* cg = layer->getCellGrid(); if (!cg) { FL_WARN(_log, "No cellgrid assigned to layer, cannot draw instances"); return; } if(m_need_sorting) { renderAlreadySorted(cam, layer, instances); } else { renderUnsorted(cam, layer, instances); } } void InstanceRenderer::renderUnsorted(Camera* cam, Layer* layer, RenderList& instances) { // FIXME: Unlit is currently broken, maybe it would be the best to change Lightsystem const bool any_effects = !(m_instance_outlines.empty() && m_instance_colorings.empty()); const bool unlit = !m_unlit_groups.empty(); uint32_t lm = m_renderbackend->getLightingModel(); // thanks to multimap, we will have transparent instances already sorted by their z value (key) std::multimap transparentInstances; m_area_layer = false; if(!m_instance_areas.empty()) { InstanceToAreas_t::iterator area_it = m_instance_areas.begin(); for(;area_it != m_instance_areas.end(); area_it++) { AreaInfo& info = area_it->second; if(info.instance->getLocation().getLayer() == layer) { if(info.front) { DoublePoint3D instance_posv = cam->toVirtualScreenCoordinates(info.instance->getLocation().getMapCoordinates()); info.z = instance_posv.z; } m_area_layer = true; } } } // Fixme CellRenderer* cr = dynamic_cast(cam->getRenderer("CellRenderer")); Layer* fow_layer = cr->getFowLayer(); const bool check_fow = (fow_layer == layer && cr->isEnabledFogOfWar()); RenderList::iterator instance_it = instances.begin(); for (;instance_it != instances.end(); ++instance_it) { // FL_DBG(_log, "Iterating instances..."); Instance* instance = (*instance_it)->instance; RenderItem& vc = **instance_it; float vertexZ = vc.vertexZ; if (check_fow) { Cell* cell = layer->getCellCache()->getCell(instance->getLocationRef().getLayerCoordinates()); if (cell) { if (cell->getFoWType() != CELLV_REVEALED) { continue; } } } if (m_area_layer) { InstanceToAreas_t::iterator areas_it = m_instance_areas.begin(); for(;areas_it != m_instance_areas.end(); areas_it++) { AreaInfo& infoa = areas_it->second; if (infoa.front) { if (infoa.z >= vc.screenpoint.z) { continue; } } std::string str_name = instance->getObject()->getNamespace(); std::list::iterator group_it = infoa.groups.begin(); for (;group_it != infoa.groups.end(); ++group_it) { if (str_name.find((*group_it)) != std::string::npos) { ScreenPoint p; Rect rec; p = cam->toScreenCoordinates(infoa.instance->getLocation().getMapCoordinates()); rec.x = p.x - infoa.w / 2; rec.y = p.y - infoa.h / 2; rec.w = infoa.w; rec.h = infoa.h; if (infoa.instance != instance && vc.dimensions.intersects(rec)) { vc.transparency = 255 - infoa.trans; // dirty hack to reset the transparency on next pump InstanceVisual* visual = instance->getVisual(); visual->setVisible(!visual->isVisible()); visual->setVisible(!visual->isVisible()); } } } } } // if instance is not opacous if (vc.transparency != 255) { transparentInstances.insert(std::pair(vertexZ, &vc)); continue; } uint8_t coloringColor[4] = { 0 }; Image* outlineImage = 0; bool recoloring = false; if (any_effects) { // coloring InstanceToColoring_t::iterator coloring_it = m_instance_colorings.find(instance); const bool coloring = coloring_it != m_instance_colorings.end(); if (coloring) { coloringColor[0] = coloring_it->second.r; coloringColor[1] = coloring_it->second.g; coloringColor[2] = coloring_it->second.b; coloringColor[3] = coloring_it->second.a; recoloring = true; } // outline InstanceToOutlines_t::iterator outline_it = m_instance_outlines.find(instance); const bool outline = outline_it != m_instance_outlines.end(); if (outline) { if (lm != 0) { // first render normal image without stencil and alpha test (0) // so it wont look aliased and then with alpha test render only outline (its 'binary' image) outlineImage = bindOutline(outline_it->second, vc, cam); } else { bindOutline(outline_it->second, vc, cam)->renderZ(vc.dimensions, vertexZ, vc.transparency, static_cast(0)); } } } // if(lm != 0) { // if(unlit) { // bool found = false; // std::string lit_name = instance->getObject()->getNamespace(); // std::list::iterator unlit_it = m_unlit_groups.begin(); // for(;unlit_it != m_unlit_groups.end(); ++unlit_it) { // if(lit_name.find(*unlit_it) != std::string::npos) { // found = true; // break; // } // } // vc.image->render(vc.dimensions, vc.transparency, recoloring ? coloringColor : 0); // if (found) { // m_renderbackend->changeRenderInfos(1, 4, 5, true, true, 255, REPLACE, ALWAYS, recoloring ? OVERLAY_TYPE_COLOR : OVERLAY_TYPE_NONE); // } else { // m_renderbackend->changeRenderInfos(1, 4, 5, true, true, 0, ZERO, ALWAYS, recoloring ? OVERLAY_TYPE_COLOR : OVERLAY_TYPE_NONE); // } // if (outlineImage) { // outlineImage->render(vc.dimensions, vc.transparency); // m_renderbackend->changeRenderInfos(1, 4, 5, false, true, 255, REPLACE, ALWAYS); // } // continue; // } // } // overlay if (vc.m_overlay) { renderOverlay(RENDER_DATA_MULTITEXTURE_Z, &vc, coloringColor, recoloring); // no overlay } else { vc.image->renderZ(vc.dimensions, vertexZ, vc.transparency, recoloring ? coloringColor : 0); } if (outlineImage) { outlineImage->renderZ(vc.dimensions, vertexZ, vc.transparency, static_cast(0)); m_renderbackend->changeRenderInfos(RENDER_DATA_TEXTURE_Z, 1, 4, 5, false, true, 255, REPLACE, ALWAYS); } } // iterate through all (semi) transparent instances std::multimap::iterator it = transparentInstances.begin(); for( ; it != transparentInstances.end(); ++it) { RenderItem& vc = *(it->second); Instance* instance = vc.instance; uint8_t alpha = vc.transparency; float vertexZ = it->first; uint8_t coloringColor[4] = { 0 }; Image* outlineImage = 0; bool recoloring = false; if (any_effects) { // coloring InstanceToColoring_t::iterator coloring_it = m_instance_colorings.find(instance); const bool coloring = coloring_it != m_instance_colorings.end(); if (coloring) { coloringColor[0] = coloring_it->second.r; coloringColor[1] = coloring_it->second.g; coloringColor[2] = coloring_it->second.b; coloringColor[3] = coloring_it->second.a; recoloring = true; } // outline InstanceToOutlines_t::iterator outline_it = m_instance_outlines.find(instance); const bool outline = outline_it != m_instance_outlines.end(); if (outline) { if (lm != 0) { // first render normal image without stencil and alpha test (0) // so it wont look aliased and then with alpha test render only outline (its 'binary' image) outlineImage = bindOutline(outline_it->second, vc, cam); } else { bindOutline(outline_it->second, vc, cam)->renderZ(vc.dimensions, vertexZ, vc.transparency, static_cast(0)); } } } // overlay if (vc.m_overlay) { renderOverlay(RENDER_DATA_MULTITEXTURE_Z, &vc, coloringColor, recoloring); // no overlay } else { vc.image->renderZ(vc.dimensions, vertexZ, vc.transparency, recoloring ? coloringColor : 0); } if (outlineImage) { outlineImage->renderZ(vc.dimensions, vertexZ, vc.transparency, static_cast(0)); m_renderbackend->changeRenderInfos(RENDER_DATA_TEXCOLOR_Z, 1, 4, 5, false, true, 255, REPLACE, ALWAYS); } } } void InstanceRenderer::renderAlreadySorted(Camera* cam, Layer* layer, RenderList& instances) { const bool any_effects = !(m_instance_outlines.empty() && m_instance_colorings.empty()); const bool unlit = !m_unlit_groups.empty(); uint32_t lm = m_renderbackend->getLightingModel(); m_area_layer = false; if(!m_instance_areas.empty()) { InstanceToAreas_t::iterator area_it = m_instance_areas.begin(); for(;area_it != m_instance_areas.end(); area_it++) { AreaInfo& info = area_it->second; if(info.instance->getLocation().getLayer() == layer) { if(info.front) { DoublePoint3D instance_posv = cam->toVirtualScreenCoordinates(info.instance->getLocation().getMapCoordinates()); info.z = instance_posv.z; } m_area_layer = true; } } } // Fixme CellRenderer* cr = dynamic_cast(cam->getRenderer("CellRenderer")); Layer* fow_layer = cr->getFowLayer(); bool check_fow = (fow_layer == layer && cr->isEnabledFogOfWar()); RenderList::iterator instance_it = instances.begin(); for (;instance_it != instances.end(); ++instance_it) { // FL_DBG(_log, "Iterating instances..."); Instance* instance = (*instance_it)->instance; RenderItem& vc = **instance_it; if (check_fow) { Cell* cell = layer->getCellCache()->getCell(instance->getLocationRef().getLayerCoordinates()); if (cell) { if (cell->getFoWType() != CELLV_REVEALED) { continue; } } } if(m_area_layer) { InstanceToAreas_t::iterator areas_it = m_instance_areas.begin(); for(;areas_it != m_instance_areas.end(); areas_it++) { AreaInfo& infoa = areas_it->second; if(infoa.front) { if(infoa.z >= vc.screenpoint.z) { continue; } } std::string str_name = instance->getObject()->getNamespace(); std::list::iterator group_it = infoa.groups.begin(); for(;group_it != infoa.groups.end(); ++group_it) { if(str_name.find((*group_it)) != std::string::npos) { ScreenPoint p; Rect rec; p = cam->toScreenCoordinates(infoa.instance->getLocation().getMapCoordinates()); rec.x = p.x - infoa.w / 2; rec.y = p.y - infoa.h / 2; rec.w = infoa.w; rec.h = infoa.h; if(infoa.instance != instance && vc.dimensions.intersects(rec)) { vc.transparency = 255 - infoa.trans; // dirty hack to reset the transparency on next pump InstanceVisual* visual = instance->getVisual(); visual->setVisible(!visual->isVisible()); visual->setVisible(!visual->isVisible()); } } } } } // FL_DBG(_log, LMsg("Instance layer coordinates = ") << instance->getLocationRef().getLayerCoordinates()); uint8_t coloringColor[4] = { 0 }; Image* outlineImage = 0; bool recoloring = false; if (any_effects) { // coloring InstanceToColoring_t::iterator coloring_it = m_instance_colorings.find(instance); const bool coloring = coloring_it != m_instance_colorings.end(); if (coloring && !m_need_bind_coloring) { coloringColor[0] = coloring_it->second.r; coloringColor[1] = coloring_it->second.g; coloringColor[2] = coloring_it->second.b; coloringColor[3] = coloring_it->second.a; recoloring = true; } // outline InstanceToOutlines_t::iterator outline_it = m_instance_outlines.find(instance); const bool outline = outline_it != m_instance_outlines.end(); if (outline) { if (lm != 0) { // first render normal image without stencil and alpha test (0) // so it wont look aliased and then with alpha test render only outline (its 'binary' image) outlineImage = bindOutline(outline_it->second, vc, cam); } else { bindOutline(outline_it->second, vc, cam)->render(vc.dimensions, vc.transparency); } } // coloring for SDL if (coloring && m_need_bind_coloring) { bindColoring(coloring_it->second, vc, cam)->render(vc.dimensions, vc.transparency); m_renderbackend->changeRenderInfos(RENDER_DATA_WITHOUT_Z, 1, 4, 5, true, false, 0, KEEP, ALWAYS); continue; } } if(lm != 0) { if(unlit) { bool found = false; std::string lit_name = instance->getObject()->getNamespace(); std::list::iterator unlit_it = m_unlit_groups.begin(); for(;unlit_it != m_unlit_groups.end(); ++unlit_it) { if(lit_name.find(*unlit_it) != std::string::npos) { found = true; break; } } vc.image->render(vc.dimensions, vc.transparency, recoloring ? coloringColor : 0); if (found) { m_renderbackend->changeRenderInfos(RENDER_DATA_WITHOUT_Z, 1, 4, 5, false, true, 255, REPLACE, ALWAYS, recoloring ? OVERLAY_TYPE_COLOR : OVERLAY_TYPE_NONE); } else { m_renderbackend->changeRenderInfos(RENDER_DATA_WITHOUT_Z, 1, 4, 5, true, true, 0, ZERO, ALWAYS, recoloring ? OVERLAY_TYPE_COLOR : OVERLAY_TYPE_NONE); } if (outlineImage) { outlineImage->render(vc.dimensions, vc.transparency); m_renderbackend->changeRenderInfos(RENDER_DATA_WITHOUT_Z, 1, 4, 5, false, true, 255, REPLACE, ALWAYS); } continue; } } // overlay if (vc.m_overlay) { renderOverlay(RENDER_DATA_WITHOUT_Z, &vc, coloringColor, recoloring); // no overlay } else { vc.image->render(vc.dimensions, vc.transparency, recoloring ? coloringColor : 0); } if (outlineImage) { outlineImage->render(vc.dimensions, vc.transparency); m_renderbackend->changeRenderInfos(RENDER_DATA_WITHOUT_Z, 1, 4, 5, false, true, 255, REPLACE, ALWAYS); } } } void InstanceRenderer::renderOverlay(RenderDataType type, RenderItem* item, uint8_t const* coloringColor, bool recoloring) { RenderItem& vc = *item; Instance* instance = vc.instance; bool withZ = type != RENDER_DATA_WITHOUT_Z; float vertexZ = vc.vertexZ; // animation overlay std::vector* animationOverlay = vc.getAnimationOverlay(); // animation color overlay std::vector* animationColorOverlay = vc.getAnimationColorOverlay(); // animation overlay without color overlay if (animationOverlay && !animationColorOverlay) { if (withZ) { for (std::vector::iterator it = animationOverlay->begin(); it != animationOverlay->end(); ++it) { (*it)->renderZ(vc.dimensions, vertexZ, vc.transparency, recoloring ? coloringColor : 0); } } else { for (std::vector::iterator it = animationOverlay->begin(); it != animationOverlay->end(); ++it) { (*it)->render(vc.dimensions, vc.transparency, recoloring ? coloringColor : 0); } } // animation overlay with color overlay } else if (animationOverlay && animationColorOverlay) { std::vector::iterator ovit = animationColorOverlay->begin(); std::vector::iterator it = animationOverlay->begin(); for (; it != animationOverlay->end(); ++it, ++ovit) { OverlayColors* oc = (*ovit); if (!oc) { if (withZ) { (*it)->renderZ(vc.dimensions, vertexZ, vc.transparency, recoloring ? coloringColor : 0); } else { (*it)->render(vc.dimensions, vc.transparency, recoloring ? coloringColor : 0); } } else { if (oc->getColors().size() > 1) { std::map::const_iterator cit = oc->getColors().begin(); uint8_t factor[4] = { 0, 0, 0, cit->second.getAlpha() }; // multi color overlay ImagePtr multiColorOverlay; if (recoloring) { // create temp OverlayColors OverlayColors* temp = new OverlayColors(oc->getColorOverlayImage()); float alphaFactor1 = static_cast(coloringColor[3] / 255.0); const std::map& defaultColors = oc->getColors(); for (std::map::const_iterator c_it = defaultColors.begin(); c_it != defaultColors.end(); ++c_it) { if (c_it->second.getAlpha() == 0) { continue; } float alphaFactor2 = static_cast(c_it->second.getAlpha() / 255.0); Color c(coloringColor[0]*(1.0-alphaFactor1) + (c_it->second.getR()*alphaFactor2)*alphaFactor1, coloringColor[1]*(1.0-alphaFactor1) + (c_it->second.getG()*alphaFactor2)*alphaFactor1, coloringColor[2]*(1.0-alphaFactor1) + (c_it->second.getB()*alphaFactor2)*alphaFactor1, 255); temp->changeColor(c_it->first, c); } // create new factor factor[3] = static_cast(255 - factor[3]); factor[3] = std::min(coloringColor[3], factor[3]); // get overlay image with temp colors multiColorOverlay = getMultiColorOverlay(vc, temp); delete temp; } else { multiColorOverlay = getMultiColorOverlay(vc, oc); factor[3] = 0; } if (withZ) { (*it)->renderZ(vc.dimensions, vertexZ, vc.transparency, recoloring ? coloringColor : 0); (*it)->renderZ(vc.dimensions, vertexZ, multiColorOverlay, vc.transparency, factor); } else { (*it)->render(vc.dimensions, vc.transparency, recoloring ? coloringColor : 0); (*it)->render(vc.dimensions, multiColorOverlay, vc.transparency, factor); } continue; } // single color overlay std::map::const_iterator color_it = oc->getColors().begin(); uint8_t rgba[4] = { color_it->second.getR(), color_it->second.getG(), color_it->second.getB(), static_cast(255-color_it->second.getAlpha()) }; bool noOverlay = rgba[3] == 255; if (recoloring) { if (!noOverlay) { float alphaFactor1 = static_cast(coloringColor[3] / 255.0); float alphaFactor2 = 1.0-static_cast(rgba[3] / 255.0); rgba[0] = coloringColor[0]*(1.0-alphaFactor1) + (rgba[0]*alphaFactor2)*alphaFactor1; rgba[1] = coloringColor[1]*(1.0-alphaFactor1) + (rgba[1]*alphaFactor2)*alphaFactor1; rgba[2] = coloringColor[2]*(1.0-alphaFactor1) + (rgba[2]*alphaFactor2)*alphaFactor1; rgba[3] = std::min(coloringColor[3], rgba[3]); } } if (withZ) { (*it)->renderZ(vc.dimensions, vertexZ, vc.transparency, recoloring ? coloringColor : 0); if (!noOverlay) { (*it)->renderZ(vc.dimensions, vertexZ, oc->getColorOverlayImage(), vc.transparency, rgba); m_renderbackend->changeRenderInfos(type, 1, 4, 5, true, false, 0, KEEP, ALWAYS, OVERLAY_TYPE_COLOR_AND_TEXTURE); } } else { (*it)->render(vc.dimensions, vc.transparency, recoloring ? coloringColor : 0); if (!noOverlay) { (*it)->render(vc.dimensions, oc->getColorOverlayImage(), vc.transparency, rgba); m_renderbackend->changeRenderInfos(type, 1, 4, 5, true, false, 0, KEEP, ALWAYS, OVERLAY_TYPE_COLOR_AND_TEXTURE); } } } } } else { OverlayColors* colorOverlay = vc.getColorOverlay(); if (colorOverlay->getColors().size() > 1) { // multi color overlay ImagePtr multiColorOverlay; // interpolation factor std::map::const_iterator it = colorOverlay->getColors().begin(); uint8_t factor[4] = { 0, 0, 0, it->second.getAlpha() }; if (recoloring) { // create temp OverlayColors OverlayColors* temp = new OverlayColors(colorOverlay->getColorOverlayImage()); float alphaFactor1 = static_cast(coloringColor[3] / 255.0); const std::map& defaultColors = colorOverlay->getColors(); for (std::map::const_iterator c_it = defaultColors.begin(); c_it != defaultColors.end(); ++c_it) { if (c_it->second.getAlpha() == 0) { continue; } float alphaFactor2 = static_cast(c_it->second.getAlpha() / 255.0); Color c(coloringColor[0]*(1.0-alphaFactor1) + (c_it->second.getR()*alphaFactor2)*alphaFactor1, coloringColor[1]*(1.0-alphaFactor1) + (c_it->second.getG()*alphaFactor2)*alphaFactor1, coloringColor[2]*(1.0-alphaFactor1) + (c_it->second.getB()*alphaFactor2)*alphaFactor1, 255); temp->changeColor(c_it->first, c); } // create new factor factor[3] = static_cast(255 - factor[3]); factor[3] = std::min(coloringColor[3], factor[3]); // get overlay image with temp colors multiColorOverlay = getMultiColorOverlay(vc, temp); delete temp; } if (!multiColorOverlay) { multiColorOverlay = getMultiColorOverlay(vc); factor[3] = 0; } if (withZ) { vc.image->renderZ(vc.dimensions, vertexZ, vc.transparency, recoloring ? coloringColor : 0); vc.image->renderZ(vc.dimensions, vertexZ, multiColorOverlay, vc.transparency, factor); } else { vc.image->render(vc.dimensions, vc.transparency, recoloring ? coloringColor : 0); vc.image->render(vc.dimensions, multiColorOverlay, vc.transparency, factor); } } else { // single color overlay std::map::const_iterator color_it = colorOverlay->getColors().begin(); uint8_t rgba[4] = { color_it->second.getR(), color_it->second.getG(), color_it->second.getB(), static_cast(255-color_it->second.getAlpha()) }; bool noOverlay = rgba[3] == 255; if (recoloring) { if (!noOverlay) { float alphaFactor1 = static_cast(coloringColor[3] / 255.0); float alphaFactor2 = 1.0-static_cast(rgba[3] / 255.0); rgba[0] = coloringColor[0]*(1.0-alphaFactor1) + (rgba[0]*alphaFactor2)*alphaFactor1; rgba[1] = coloringColor[1]*(1.0-alphaFactor1) + (rgba[1]*alphaFactor2)*alphaFactor1; rgba[2] = coloringColor[2]*(1.0-alphaFactor1) + (rgba[2]*alphaFactor2)*alphaFactor1; rgba[3] = std::min(coloringColor[3], rgba[3]); } } if (withZ) { vc.image->renderZ(vc.dimensions, vertexZ, vc.transparency, recoloring ? coloringColor : 0); if (!noOverlay) { vc.image->renderZ(vc.dimensions, vertexZ, colorOverlay->getColorOverlayImage(), vc.transparency, rgba); m_renderbackend->changeRenderInfos(type, 1, 4, 5, true, false, 0, KEEP, ALWAYS, OVERLAY_TYPE_COLOR_AND_TEXTURE); } } else { vc.image->render(vc.dimensions, vc.transparency, recoloring ? coloringColor : 0); if (!noOverlay) { vc.image->render(vc.dimensions, colorOverlay->getColorOverlayImage(), vc.transparency, rgba); m_renderbackend->changeRenderInfos(type, 1, 4, 5, true, false, 0, KEEP, ALWAYS, OVERLAY_TYPE_COLOR_AND_TEXTURE); } } } } } inline bool aboveThreshold(int32_t threshold, int32_t alpha, int32_t prev_alpha) { if(threshold > 1) { // new behavior if (((alpha - threshold) >= 0 || (prev_alpha - threshold) >= 0) && (alpha != prev_alpha)) { return true; } else { return false; } } else { // old behavior if((alpha == 0 || prev_alpha == 0) && (alpha != prev_alpha)) { return true; } else { return false; } } } Image* InstanceRenderer::bindOutline(OutlineInfo& info, RenderItem& vc, Camera* cam) { bool valid = isValidImage(info.outline); if (!info.dirty && info.curimg == vc.image.get() && valid) { removeFromCheck(info.outline); // optimization for outline that has not changed return info.outline.get(); } else { info.curimg = vc.image.get(); } // if outline has changed we can maybe free the old effect image if (valid) { addToCheck(info.outline); } // special case for animation overlay if (vc.getAnimationOverlay()) { return bindMultiOutline(info, vc, cam); } // NOTE: Since r3721 outline is just the 'border' so to render everything correctly // we need to first render normal image, and then its outline. // This helps much with lighting stuff and doesn't require from us to copy image. bool found = false; // create name std::stringstream sts; sts << vc.image.get()->getName() << "," << static_cast(info.r) << "," << static_cast(info.g) << "," << static_cast(info.b) << "," << info.width; // search image if (ImageManager::instance()->exists(sts.str())) { info.outline = ImageManager::instance()->getPtr(sts.str()); if (isValidImage(info.outline)) { removeFromCheck(info.outline); // mark outline as not dirty since we found it here info.dirty = false; return info.outline.get(); } found = true; } // With lazy loading we can come upon a situation where we need to generate outline from // uninitialised shared image if(vc.image->isSharedImage()) { vc.image->forceLoadInternal(); } SDL_Surface* outline_surface = SDL_CreateRGBSurface(0, vc.image->getWidth(), vc.image->getHeight(), 32, RMASK, GMASK, BMASK, AMASK); // TODO: optimize... uint8_t r, g, b, a = 0; // vertical sweep for (int32_t x = 0; x < outline_surface->w; x ++) { int32_t prev_a = 0; for (int32_t y = 0; y < outline_surface->h; y ++) { vc.image->getPixelRGBA(x, y, &r, &g, &b, &a); if (aboveThreshold(info.threshold, static_cast(a), prev_a)) { if (a < prev_a) { for (int32_t yy = y; yy < y + info.width; yy++) { Image::putPixel(outline_surface, x, yy, info.r, info.g, info.b); } } else { for (int32_t yy = y - info.width; yy < y; yy++) { Image::putPixel(outline_surface, x, yy, info.r, info.g, info.b); } } } prev_a = a; } } // horizontal sweep for (int32_t y = 0; y < outline_surface->h; y ++) { int32_t prev_a = 0; for (int32_t x = 0; x < outline_surface->w; x ++) { vc.image->getPixelRGBA(x, y, &r, &g, &b, &a); if (aboveThreshold(info.threshold, static_cast(a), prev_a)) { if (a < prev_a) { for (int32_t xx = x; xx < x + info.width; xx++) { Image::putPixel(outline_surface, xx, y, info.r, info.g, info.b); } } else { for (int32_t xx = x - info.width; xx < x; xx++) { Image::putPixel(outline_surface, xx, y, info.r, info.g, info.b); } } } prev_a = a; } } // In case of OpenGL backend, SDLImage needs to be converted Image* img = m_renderbackend->createImage(sts.str(), outline_surface); img->setState(IResource::RES_LOADED); if (found) { // image exists but is not "loaded" removeFromCheck(info.outline); ImagePtr temp(img); info.outline.get()->copySubimage(0, 0, temp); info.outline.get()->setState(IResource::RES_LOADED); } else { // create and add image info.outline = ImageManager::instance()->add(img); } // mark outline as not dirty since we created/recreated it here info.dirty = false; return info.outline.get(); } Image* InstanceRenderer::bindMultiOutline(OutlineInfo& info, RenderItem& vc, Camera* cam) { // NOTE: Since r3721 outline is just the 'border' so to render everything correctly // we need to first render normal image, and then its outline. // This helps much with lighting stuff and doesn't require from us to copy image. bool found = false; // create name std::stringstream sts; uint32_t mw = 0; uint32_t mh = 0; std::vector* animationOverlays = vc.getAnimationOverlay(); std::vector::iterator it = animationOverlays->begin(); for (; it != animationOverlays->end(); ++it) { // With lazy loading we can come upon a situation where we need to generate outline from // uninitialised shared image if ((*it)->isSharedImage()) { (*it)->forceLoadInternal(); } sts << (*it)->getName() << ","; mw = std::max(mw, (*it)->getWidth()); mh = std::max(mh, (*it)->getHeight()); } sts << static_cast(info.r) << "," << static_cast(info.g) << "," << static_cast(info.b) << "," << info.width; // search image if (ImageManager::instance()->exists(sts.str())) { info.outline = ImageManager::instance()->getPtr(sts.str()); if (isValidImage(info.outline)) { removeFromCheck(info.outline); // mark outline as not dirty since we found it here info.dirty = false; return info.outline.get(); } found = true; } SDL_Surface* outline_surface = SDL_CreateRGBSurface(0, mw, mh, 32, RMASK, GMASK, BMASK, AMASK); // TODO: optimize... uint8_t r, g, b, a = 0; it = animationOverlays->begin(); for (; it != animationOverlays->end(); ++it) { // vertical sweep for (uint32_t x = 0; x < (*it)->getWidth(); x++) { int32_t prev_a = 0; for (uint32_t y = 0; y < (*it)->getHeight(); y++) { (*it)->getPixelRGBA(x, y, &r, &g, &b, &a); if (aboveThreshold(info.threshold, static_cast(a), prev_a)) { if (a < prev_a) { for (uint32_t yy = y; yy < y + info.width; yy++) { int32_t tx = x + (mw/2 - (*it)->getWidth()/2); int32_t ty = yy + (mh/2 - (*it)->getHeight()/2); Image::putPixel(outline_surface, tx, ty, info.r, info.g, info.b); } } else { for (uint32_t yy = y - info.width; yy < y; yy++) { int32_t tx = x + (mw/2 - (*it)->getWidth()/2); int32_t ty = yy + (mh/2 - (*it)->getHeight()/2); Image::putPixel(outline_surface, tx, ty, info.r, info.g, info.b); } } } prev_a = a; } } // horizontal sweep for (uint32_t y = 0; y < (*it)->getHeight(); y++) { int32_t prev_a = 0; for (uint32_t x = 0; x < (*it)->getWidth(); x++) { (*it)->getPixelRGBA(x, y, &r, &g, &b, &a); if (aboveThreshold(info.threshold, static_cast(a), prev_a)) { if (a < prev_a) { for (uint32_t xx = x; xx < x + info.width; xx++) { int32_t tx = xx + (mw/2 - (*it)->getWidth()/2); int32_t ty = y + (mh/2 - (*it)->getHeight()/2); Image::putPixel(outline_surface, tx, ty, info.r, info.g, info.b); } } else { for (uint32_t xx = x - info.width; xx < x; xx++) { int32_t tx = xx + (mw/2 - (*it)->getWidth()/2); int32_t ty = y + (mh/2 - (*it)->getHeight()/2); Image::putPixel(outline_surface, tx, ty, info.r, info.g, info.b); } } } prev_a = a; } } } // In case of OpenGL backend, SDLImage needs to be converted Image* img = m_renderbackend->createImage(sts.str(), outline_surface); img->setState(IResource::RES_LOADED); if (found) { // image exists but is not "loaded" removeFromCheck(info.outline); ImagePtr temp(img); info.outline.get()->copySubimage(0, 0, temp); info.outline.get()->setState(IResource::RES_LOADED); } else { // create and add image info.outline = ImageManager::instance()->add(img); } // mark outline as not dirty since we created/recreated it here info.dirty = false; return info.outline.get(); } Image* InstanceRenderer::bindColoring(ColoringInfo& info, RenderItem& vc, Camera* cam) { bool valid = isValidImage(info.overlay); if (!info.dirty && info.curimg == vc.image.get() && valid) { removeFromCheck(info.overlay); // optimization for coloring that has not changed return info.overlay.get(); } else { info.curimg = vc.image.get(); } // if coloring has changed we can maybe free the old effect image if (valid) { addToCheck(info.overlay); } bool found = false; // create name std::stringstream sts; sts << vc.image.get()->getName() << "," << static_cast(info.r) << "," << static_cast(info.g) << "," << static_cast(info.b) << "," << static_cast(info.a); // search image if (ImageManager::instance()->exists(sts.str())) { info.overlay = ImageManager::instance()->getPtr(sts.str()); valid = isValidImage(info.overlay); if (valid) { removeFromCheck(info.overlay); // mark overlay as not dirty since we found it here info.dirty = false; return info.overlay.get(); } found = true; } // With lazy loading we can come upon a situation where we need to generate coloring from // uninitialised shared image if(vc.image->isSharedImage()) { vc.image->forceLoadInternal(); } // not found so we create it SDL_Surface* overlay_surface = SDL_CreateRGBSurface(0, vc.image->getWidth(), vc.image->getHeight(), 32, RMASK, GMASK, BMASK, AMASK); uint8_t r, g, b, a = 0; float alphaFactor = static_cast(info.a/255.0); for (int32_t x = 0; x < overlay_surface->w; x ++) { for (int32_t y = 0; y < overlay_surface->h; y ++) { vc.image->getPixelRGBA(x, y, &r, &g, &b, &a); if (a > 0) { Image::putPixel(overlay_surface, x, y, info.r*(1.0-alphaFactor) + r*alphaFactor, info.g*(1.0-alphaFactor) + g*alphaFactor, info.b*(1.0-alphaFactor) + b*alphaFactor, a); } } } // In case of OpenGL backend, SDLImage needs to be converted Image* img = m_renderbackend->createImage(sts.str(), overlay_surface); if (found) { // image exists but is not "loaded" removeFromCheck(info.overlay); ImagePtr temp(img); info.overlay.get()->copySubimage(0, 0, temp); info.overlay.get()->setState(IResource::RES_LOADED); } else { // add image img->setState(IResource::RES_LOADED); info.overlay = ImageManager::instance()->add(img); } // mark overlay as not dirty since we created/recreated it here info.dirty = false; return info.overlay.get(); } ImagePtr InstanceRenderer::getMultiColorOverlay(const RenderItem& vc, OverlayColors* colors) { // multi color overlay const std::map& colorMap = colors ? colors->getColors() : vc.getColorOverlay()->getColors(); std::map::const_iterator it = colorMap.begin(); ImagePtr colorOverlayImage = colors ? colors->getColorOverlayImage() : vc.getColorOverlay()->getColorOverlayImage(); ImagePtr colorOverlay; // create name std::stringstream sts; sts << colorOverlayImage.get()->getName(); for (; it != colorMap.end(); ++it) { sts << "," << static_cast(it->second.getR() | (it->second.getG() << 8) | (it->second.getB() << 16) | (it->second.getAlpha()<<24)); } bool exist = false; bool found = false; if (ImageManager::instance()->exists(sts.str())) { exist = true; colorOverlay = ImageManager::instance()->getPtr(sts.str()); if (isValidImage(colorOverlay)) { removeFromCheck(colorOverlay); found = true; } } if (!exist || !found) { // With lazy loading we can come upon a situation where we need to generate color overlay from // uninitialised shared image if (colorOverlayImage->isSharedImage()) { colorOverlayImage->forceLoadInternal(); } // not found so we create it SDL_Surface* overlay_surface = SDL_CreateRGBSurface(0, colorOverlayImage->getWidth(), colorOverlayImage->getHeight(), 32, RMASK, GMASK, BMASK, AMASK); uint8_t r, g, b, a = 0; for (int32_t x = 0; x < overlay_surface->w; x++) { for (int32_t y = 0; y < overlay_surface->h; y++) { colorOverlayImage->getPixelRGBA(x, y, &r, &g, &b, &a); Color c(r, g, b, a); it = colorMap.find(c); if (it != colorMap.end()) { Image::putPixel(overlay_surface, x, y, it->second.getR(), it->second.getG(), it->second.getB(), it->second.getAlpha()); } else { Image::putPixel(overlay_surface, x, y, r, g, b, a); } } } // In case of OpenGL backend, SDLImage needs to be converted Image* img = m_renderbackend->createImage(sts.str(), overlay_surface); if (exist) { // image exists but is not "loaded" removeFromCheck(colorOverlay); ImagePtr temp(img); colorOverlay.get()->setSurface(img->detachSurface()); colorOverlay.get()->setState(IResource::RES_LOADED); } else { // add image img->setState(IResource::RES_LOADED); colorOverlay = ImageManager::instance()->add(img); } } addToCheck(colorOverlay); return colorOverlay; } void InstanceRenderer::addOutlined(Instance* instance, int32_t r, int32_t g, int32_t b, int32_t width, int32_t threshold) { OutlineInfo newinfo(this); newinfo.r = r; newinfo.g = g; newinfo.b = b; newinfo.threshold = threshold; newinfo.width = width; newinfo.dirty = true; // attempts to insert the element into the outline map // will return false in the second value of the pair if the instance already exists // in the map and the first value of the pair will then be an iterator to the // existing data for the instance std::pair insertiter = m_instance_outlines.insert(std::make_pair(instance, newinfo)); if (insertiter.second == false) { // the insertion did not happen because the instance // already exists in the map so lets just update its outline info OutlineInfo& info = insertiter.first->second; if (info.r != r || info.g != g || info.b != b || info.width != width) { // only update the outline info if its changed since the last call // flag the outline info as dirty so it will get processed during rendering info.r = r; info.b = b; info.g = g; info.width = width; info.threshold = threshold; info.dirty = true; } } else { std::pair iter = m_assigned_instances.insert(std::make_pair(instance, OUTLINE)); if (iter.second) { instance->addDeleteListener(m_delete_listener); } else { Effect& effect = iter.first->second; if ((effect & OUTLINE) != OUTLINE) { effect += OUTLINE; } } } } void InstanceRenderer::addColored(Instance* instance, int32_t r, int32_t g, int32_t b, int32_t a) { ColoringInfo newinfo(this); newinfo.r = r; newinfo.g = g; newinfo.b = b; newinfo.a = a; newinfo.dirty = true; // attempts to insert the element into the coloring map // will return false in the second value of the pair if the instance already exists // in the map and the first value of the pair will then be an iterator to the // existing data for the instance std::pair insertiter = m_instance_colorings.insert(std::make_pair(instance, newinfo)); if (insertiter.second == false) { // the insertion did not happen because the instance // already exists in the map so lets just update its coloring info ColoringInfo& info = insertiter.first->second; if (info.r != r || info.g != g || info.b != b || info.a != a) { // only update the coloring info if its changed since the last call info.r = r; info.b = b; info.g = g; info.a = a; info.dirty = true; } } else { std::pair iter = m_assigned_instances.insert(std::make_pair(instance, COLOR)); if (iter.second) { instance->addDeleteListener(m_delete_listener); } else { Effect& effect = iter.first->second; if ((effect & COLOR) != COLOR) { effect += COLOR; } } } } void InstanceRenderer::addTransparentArea(Instance* instance, const std::list &groups, uint32_t w, uint32_t h, uint8_t trans, bool front) { AreaInfo newinfo; newinfo.instance = instance; newinfo.groups = groups; newinfo.w = w; newinfo.h = h; newinfo.trans = trans; newinfo.front = front; // attempts to insert the element into the area map // will return false in the second value of the pair if the instance already exists // in the map and the first value of the pair will then be an iterator to the // existing data for the instance std::pair insertiter = m_instance_areas.insert(std::make_pair(instance, newinfo)); if (insertiter.second == false) { // the insertion did not happen because the instance // already exists in the map so lets just update its area info AreaInfo& info = insertiter.first->second; info.groups = groups; info.w = w; info.h = h; info.trans = trans; info.front = front; } else { std::pair iter = m_assigned_instances.insert(std::make_pair(instance, AREA)); if (iter.second) { instance->addDeleteListener(m_delete_listener); } else { Effect& effect = iter.first->second; if ((effect & AREA) != AREA) { effect += AREA; } } } } void InstanceRenderer::removeOutlined(Instance* instance) { InstanceToEffects_t::iterator it = m_assigned_instances.find(instance); if (it != m_assigned_instances.end()) { if (it->second == OUTLINE) { instance->removeDeleteListener(m_delete_listener); m_instance_outlines.erase(instance); m_assigned_instances.erase(it); } else if ((it->second & OUTLINE) == OUTLINE) { it->second -= OUTLINE; m_instance_outlines.erase(instance); } } } void InstanceRenderer::removeColored(Instance* instance) { InstanceToEffects_t::iterator it = m_assigned_instances.find(instance); if (it != m_assigned_instances.end()) { if (it->second == COLOR) { instance->removeDeleteListener(m_delete_listener); m_instance_colorings.erase(instance); m_assigned_instances.erase(it); } else if ((it->second & COLOR) == COLOR) { it->second -= COLOR; m_instance_colorings.erase(instance); } } } void InstanceRenderer::removeTransparentArea(Instance* instance) { InstanceToEffects_t::iterator it = m_assigned_instances.find(instance); if (it != m_assigned_instances.end()) { if (it->second == AREA) { instance->removeDeleteListener(m_delete_listener); m_instance_areas.erase(instance); m_assigned_instances.erase(it); } else if ((it->second & AREA) == AREA) { it->second -= AREA; m_instance_areas.erase(instance); } } } void InstanceRenderer::removeAllOutlines() { if (!m_instance_outlines.empty()) { InstanceToOutlines_t::iterator outline_it = m_instance_outlines.begin(); for (; outline_it != m_instance_outlines.end(); ++outline_it) { InstanceToEffects_t::iterator it = m_assigned_instances.find((*outline_it).first); if (it != m_assigned_instances.end()) { if (it->second == OUTLINE) { (*outline_it).first->removeDeleteListener(m_delete_listener); m_assigned_instances.erase(it); } else if ((it->second & OUTLINE) == OUTLINE) { it->second -= OUTLINE; } } } m_instance_outlines.clear(); } } void InstanceRenderer::removeAllColored() { if (!m_instance_colorings.empty()) { InstanceToColoring_t::iterator color_it = m_instance_colorings.begin(); for (; color_it != m_instance_colorings.end(); ++color_it) { InstanceToEffects_t::iterator it = m_assigned_instances.find((*color_it).first); if (it != m_assigned_instances.end()) { if (it->second == COLOR) { (*color_it).first->removeDeleteListener(m_delete_listener); m_assigned_instances.erase(it); } else if ((it->second & COLOR) == COLOR) { it->second -= COLOR; } } } m_instance_colorings.clear(); } } void InstanceRenderer::removeAllTransparentAreas() { if (!m_instance_areas.empty()) { InstanceToAreas_t::iterator area_it = m_instance_areas.begin(); for (; area_it != m_instance_areas.end(); ++area_it) { InstanceToEffects_t::iterator it = m_assigned_instances.find((*area_it).first); if (it != m_assigned_instances.end()) { if (it->second == AREA) { (*area_it).first->removeDeleteListener(m_delete_listener); m_assigned_instances.erase(it); } else if ((it->second & AREA) == AREA) { it->second -= AREA; } } } m_instance_areas.clear(); } } void InstanceRenderer::addIgnoreLight(const std::list &groups) { std::list::const_iterator group_it = groups.begin(); for(;group_it != groups.end(); ++group_it) { m_unlit_groups.push_back(*group_it); } m_unlit_groups.sort(); m_unlit_groups.unique(); } void InstanceRenderer::removeIgnoreLight(const std::list &groups) { std::list::const_iterator group_it = groups.begin(); for(;group_it != groups.end(); ++group_it) { std::list::iterator unlit_it = m_unlit_groups.begin(); for(;unlit_it != m_unlit_groups.end(); ++unlit_it) { if((*group_it).find(*unlit_it) != std::string::npos) { m_unlit_groups.remove(*unlit_it); break; } } } } void InstanceRenderer::removeAllIgnoreLight() { m_unlit_groups.clear(); } void InstanceRenderer::reset() { // stop timer if (m_timer_enabled) { m_timer.stop(); } // remove all effects and listener removeAllOutlines(); removeAllColored(); removeAllTransparentAreas(); removeAllIgnoreLight(); // removes the references to the effect images m_check_images.clear(); } void InstanceRenderer::setRemoveInterval(uint32_t interval) { if (m_interval != interval*1000) { m_interval = interval*1000; m_timer.setInterval(m_interval); } } uint32_t InstanceRenderer::getRemoveInterval() const { return m_interval/1000; } void InstanceRenderer::addToCheck(const ImagePtr& image) { if (isValidImage(image)) { // if image is already inserted then return ImagesToCheck_t::iterator it = m_check_images.begin(); for (; it != m_check_images.end(); ++it) { if (it->image.get()->getName() == image.get()->getName()) { return; } } s_image_entry entry; entry.image = image; entry.timestamp = TimeManager::instance()->getTime(); m_check_images.push_front(entry); if (!m_timer_enabled) { m_timer_enabled = true; m_timer.start(); } } } void InstanceRenderer::check() { uint32_t now = TimeManager::instance()->getTime(); ImagesToCheck_t::iterator it = m_check_images.begin(); // free unused images while (it != m_check_images.end()) { if (now - it->timestamp > m_interval) { if (isValidImage(it->image)) { ImageManager::instance()->free(it->image.get()->getName()); } it = m_check_images.erase(it); } else { ++it; } } if (m_check_images.empty() && m_timer_enabled) { m_timer_enabled = false; m_timer.stop(); } } void InstanceRenderer::removeFromCheck(const ImagePtr& image) { if (isValidImage(image)) { // if the image is used then remove it here ImagesToCheck_t::iterator it = m_check_images.begin(); for (; it != m_check_images.end(); ++it) { if (it->image.get()->getName() == image.get()->getName()) { m_check_images.erase(it); break; } } if (m_check_images.empty() && m_timer_enabled) { m_timer_enabled = false; m_timer.stop(); } } } void InstanceRenderer::removeInstance(Instance* instance) { InstanceToEffects_t::iterator it = m_assigned_instances.find(instance); if (it != m_assigned_instances.end()) { m_instance_outlines.erase(instance); m_instance_colorings.erase(instance); m_instance_areas.erase(instance); instance->removeDeleteListener(m_delete_listener); m_assigned_instances.erase(it); } } bool InstanceRenderer::isValidImage(const ImagePtr& image) { if (image.get()) { if (image.get()->getState() == IResource::RES_LOADED) { return true; } } return false; } } fifengine-0.4.1/engine/core/view/renderers/instancerenderer.h000066400000000000000000000170231304641216200243140ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_INSTANCERENDERER_H #define FIFE_INSTANCERENDERER_H // Standard C++ library includes #include #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "view/rendererbase.h" #include "util/time/timer.h" namespace FIFE { class Location; class RenderBackend; class InstanceDeleteListener; class InstanceRenderer: public RendererBase { public: /** constructor. * @param renderbackend to use * @param position position for this renderer in rendering pipeline */ InstanceRenderer(RenderBackend* renderbackend, int32_t position); InstanceRenderer(const InstanceRenderer& old); RendererBase* clone(); /** Destructor. */ virtual ~InstanceRenderer(); void render(Camera* cam, Layer* layer, RenderList& instances); std::string getName() { return "InstanceRenderer"; } /** Marks given instance to be outlined with given parameters */ void addOutlined(Instance* instance, int32_t r, int32_t g, int32_t b, int32_t width, int32_t threshold = 1); /** Marks given instance to be colored with given parameters */ void addColored(Instance* instance, int32_t r, int32_t g, int32_t b, int32_t a = 128); /** Marks given instance to have a transparent area with given parameters */ void addTransparentArea(Instance* instance, const std::list &groups, uint32_t w, uint32_t h, uint8_t trans, bool front = true); /** Removes instance from outlining list */ void removeOutlined(Instance* instance); /** Removes instance from coloring list */ void removeColored(Instance* instance); /** Removes instance form area list */ void removeTransparentArea(Instance* instance); /** Removes all outlines */ void removeAllOutlines(); /** Removes all coloring */ void removeAllColored(); /** Removes all transparent areas */ void removeAllTransparentAreas(); /** Add groups(Namespaces) into a list. All instances, whose namespace is in the list * will not lighted from the LightRenderer. */ void addIgnoreLight(const std::list &groups); /** Removes groups(Namespaces) from the list */ void removeIgnoreLight(const std::list &groups); /** Removes all groups(Namespaces) */ void removeAllIgnoreLight(); /** Gets instance for interface access */ static InstanceRenderer* getInstance(IRendererContainer* cnt); /** Provides access point to the RenderBackend */ RenderBackend* getRenderBackend() const {return m_renderbackend;} /** Removes all stuff */ void reset(); /** Sets the interval in seconds (default is 60). */ void setRemoveInterval(uint32_t interval); /** Gets the interval in seconds (default is 60). */ uint32_t getRemoveInterval() const; /** Add properly old ImagePtr into a check list. * If it is still not used after a time(interval) then it is freed. */ void addToCheck(const ImagePtr& image); /** Timer callback, tried to remove old effect images */ void check(); /** Removes instance from all effects. * Should only be called by delete listener! */ void removeInstance(Instance* instance); /** Returns true if coloring need binding, otherwise false */ bool needColorBinding() { return m_need_bind_coloring; } private: bool m_area_layer; uint32_t m_interval; bool m_timer_enabled; std::list m_unlit_groups; bool m_need_sorting; bool m_need_bind_coloring; enum InstanceRendererEffect { NOTHING = 0x00, OUTLINE = 0x01, COLOR = 0x02, AREA = 0x04 }; typedef uint8_t Effect; // contains per-instance information for outline drawing class OutlineInfo { public: uint8_t r; uint8_t g; uint8_t b; int32_t width; int32_t threshold; bool dirty; ImagePtr outline; Image* curimg; InstanceRenderer* renderer; OutlineInfo(InstanceRenderer* r); ~OutlineInfo(); }; // contains per-instance information for overlay drawing class ColoringInfo { public: uint8_t r; uint8_t g; uint8_t b; uint8_t a; bool dirty; ImagePtr overlay; Image* curimg; InstanceRenderer* renderer; ColoringInfo(InstanceRenderer* r); ~ColoringInfo(); }; class AreaInfo { public: Instance* instance; std::list groups; uint32_t w; uint32_t h; uint8_t trans; bool front; double z; AreaInfo(); ~AreaInfo(); }; typedef std::map InstanceToOutlines_t; typedef std::map InstanceToColoring_t; typedef std::map InstanceToAreas_t; InstanceToOutlines_t m_instance_outlines; InstanceToColoring_t m_instance_colorings; InstanceToAreas_t m_instance_areas; // struct to hold the ImagePtr with a timestamp typedef struct { ImagePtr image; uint32_t timestamp; } s_image_entry; typedef std::list ImagesToCheck_t; // old effect images ImagesToCheck_t m_check_images; // timer Timer m_timer; // InstanceDeleteListener to automatically remove Instance effect (outline, coloring, ...) InstanceDeleteListener* m_delete_listener; typedef std::map InstanceToEffects_t; InstanceToEffects_t m_assigned_instances; void renderOverlay(RenderDataType type, RenderItem* item, uint8_t const* coloringColor, bool recoloring); /** Binds new outline (if needed) to the instance's OutlineInfo */ Image* bindOutline(OutlineInfo& info, RenderItem& vc, Camera* cam); Image* bindMultiOutline(OutlineInfo& info, RenderItem& vc, Camera* cam); Image* bindColoring(ColoringInfo& info, RenderItem& vc, Camera* cam); ImagePtr getMultiColorOverlay(const RenderItem& vc, OverlayColors* colors = 0); void renderUnsorted(Camera* cam, Layer* layer, RenderList& instances); void renderAlreadySorted(Camera* cam, Layer* layer, RenderList& instances); void removeFromCheck(const ImagePtr& image); bool isValidImage(const ImagePtr& image); }; } #endif fifengine-0.4.1/engine/core/view/renderers/instancerenderer.i000066400000000000000000000052551304641216200243210ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "view/renderers/instancerenderer.h" %} namespace FIFE { class Location; class RenderBackend; class InstanceRenderer: public RendererBase { public: virtual ~InstanceRenderer(); std::string getName(); void addOutlined(Instance* instance, int32_t r, int32_t g, int32_t b, int32_t width, int32_t threshold = 1); void removeOutlined(Instance* instance); void removeAllOutlines(); void addColored(Instance* instance, int32_t r, int32_t g, int32_t b, int32_t a = 128); void removeColored(Instance* instance); void removeAllColored(); void addTransparentArea(Instance* instance, const std::list &groups, uint32_t w, uint32_t h, uint8_t trans, bool front = true); void removeTransparentArea(Instance* instance); void removeAllTransparentAreas(); void addIgnoreLight(const std::list &groups); void removeIgnoreLight(const std::list &groups); void removeAllIgnoreLight(); static InstanceRenderer* getInstance(IRendererContainer* cnt); void setRemoveInterval(uint32_t interval); uint32_t getRemoveInterval() const; private: InstanceRenderer(RenderBackend* renderbackend, int32_t position); }; } fifengine-0.4.1/engine/core/view/renderers/lightrenderer.cpp000066400000000000000000000311661304641216200241560ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "video/renderbackend.h" #include "video/animation.h" #include "video/fonts/ifont.h" #include "video/imagemanager.h" #include "video/image.h" #include "video/opengl/glimage.h" #include "video/opengl/renderbackendopengl.h" #include "util/math/fife_math.h" #include "util/log/logger.h" #include "util/time/timemanager.h" #include "model/metamodel/grids/cellgrid.h" #include "model/metamodel/timeprovider.h" #include "model/structures/instance.h" #include "model/structures/layer.h" #include "model/structures/location.h" #include "view/camera.h" #include "lightrenderer.h" namespace FIFE { /** Logger to use for this source file. * @relates Logger */ static Logger _log(LM_VIEWVIEW); LightRendererElementInfo::LightRendererElementInfo(RendererNode n, int32_t src, int32_t dst): m_anchor(n), m_src(src), m_dst(dst), m_stencil(false), m_stencil_ref(0) { } void LightRendererElementInfo::setStencil(uint8_t stencil_ref) { m_stencil = true; m_stencil_ref = stencil_ref; } int32_t LightRendererElementInfo::getStencil() { if(!m_stencil) { return -1; } return m_stencil_ref; } void LightRendererElementInfo::removeStencil() { m_stencil = false; m_stencil_ref = 0; } LightRendererImageInfo::LightRendererImageInfo(RendererNode anchor, ImagePtr image, int32_t src, int32_t dst): LightRendererElementInfo(anchor, src, dst), m_image(image){ } void LightRendererImageInfo::render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend) { Point p = m_anchor.getCalculatedPoint(cam, layer); if(m_anchor.getLayer() == layer) { Rect r; Rect viewport = cam->getViewPort(); uint32_t width = static_cast(round(m_image->getWidth() * cam->getZoom())); uint32_t height = static_cast(round(m_image->getHeight() * cam->getZoom())); r.x = p.x-width/2; r.y = p.y-height/2; r.w = width; r.h = height; if(r.intersects(viewport)) { uint8_t lm = renderbackend->getLightingModel(); m_image->render(r); if (m_stencil) { renderbackend->changeRenderInfos(RENDER_DATA_WITHOUT_Z, 1, m_src, m_dst, false, true, m_stencil_ref, INCR, GEQUAL); } else if (lm == 1) { renderbackend->changeRenderInfos(RENDER_DATA_WITHOUT_Z, 1, m_src, m_dst, false, true, 255, KEEP, NOTEQUAL); } } } } LightRendererAnimationInfo::LightRendererAnimationInfo(RendererNode anchor, AnimationPtr animation, int32_t src, int32_t dst): LightRendererElementInfo(anchor, src, dst), m_animation(animation), m_start_time(TimeManager::instance()->getTime()), m_time_scale(1.0){ } void LightRendererAnimationInfo::render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend) { Point p = m_anchor.getCalculatedPoint(cam, layer); if(m_anchor.getLayer() == layer) { int32_t animtime = scaleTime(m_time_scale, TimeManager::instance()->getTime() - m_start_time) % m_animation->getDuration(); ImagePtr img = m_animation->getFrameByTimestamp(animtime); Rect r; Rect viewport = cam->getViewPort(); uint32_t width = static_cast(round(img->getWidth() * cam->getZoom())); uint32_t height = static_cast(round(img->getHeight() * cam->getZoom())); r.x = p.x-width/2; r.y = p.y-height/2; r.w = width; r.h = height; if(r.intersects(viewport)) { uint8_t lm = renderbackend->getLightingModel(); img->render(r); if (m_stencil) { renderbackend->changeRenderInfos(RENDER_DATA_WITHOUT_Z, 1, m_src, m_dst, false, true, m_stencil_ref, INCR, GEQUAL); } else if (lm == 1) { renderbackend->changeRenderInfos(RENDER_DATA_WITHOUT_Z, 1, m_src, m_dst, false, true, 255, KEEP, NOTEQUAL); } } } } LightRendererResizeInfo::LightRendererResizeInfo(RendererNode anchor, ImagePtr image, int32_t width, int32_t height, int32_t src, int32_t dst): LightRendererElementInfo(anchor, src, dst), m_image(image), m_width(width), m_height(height) { } void LightRendererResizeInfo::render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend) { Point p = m_anchor.getCalculatedPoint(cam, layer); if(m_anchor.getLayer() == layer) { Rect r; Rect viewport = cam->getViewPort(); uint32_t width = static_cast(round(m_width * cam->getZoom())); uint32_t height = static_cast(round(m_height * cam->getZoom())); r.x = p.x-width/2; r.y = p.y-height/2; r.w = width; r.h = height; if(r.intersects(viewport)) { uint8_t lm = renderbackend->getLightingModel(); m_image->render(r); if (m_stencil) { renderbackend->changeRenderInfos(RENDER_DATA_WITHOUT_Z, 1, m_src, m_dst, false, true, m_stencil_ref, INCR, GEQUAL); } else if (lm == 1) { renderbackend->changeRenderInfos(RENDER_DATA_WITHOUT_Z, 1, m_src, m_dst, false, true, 255, KEEP, NOTEQUAL); } } } } LightRendererSimpleLightInfo::LightRendererSimpleLightInfo(RendererNode anchor, uint8_t intensity, float radius, int32_t subdivisions, float xstretch, float ystretch, uint8_t r, uint8_t g, uint8_t b, int32_t src, int32_t dst): LightRendererElementInfo(anchor, src, dst), m_intensity(intensity), m_radius(radius), m_subdivisions(subdivisions), m_xstretch(xstretch), m_ystretch(ystretch), m_red(r), m_green(g), m_blue(b){ } void LightRendererSimpleLightInfo::render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend) { Point p = m_anchor.getCalculatedPoint(cam, layer); if(m_anchor.getLayer() == layer) { double zoom = cam->getZoom(); uint8_t lm = renderbackend->getLightingModel(); renderbackend->drawLightPrimitive(p, m_intensity, m_radius, m_subdivisions, static_cast(m_xstretch * zoom), static_cast(m_ystretch * zoom), m_red, m_green, m_blue); if (m_stencil) { renderbackend->changeRenderInfos(RENDER_DATA_WITHOUT_Z, m_subdivisions, m_src, m_dst, false, true, m_stencil_ref, INCR, GEQUAL); } else if (lm == 1) { renderbackend->changeRenderInfos(RENDER_DATA_WITHOUT_Z, m_subdivisions, m_src, m_dst, false, true, 255, KEEP, NOTEQUAL); } } } std::vector LightRendererSimpleLightInfo::getColor() { std::vector colors; colors.push_back(m_red); colors.push_back(m_green); colors.push_back(m_blue); colors.push_back(m_intensity); return colors; } LightRenderer* LightRenderer::getInstance(IRendererContainer* cnt) { return dynamic_cast(cnt->getRenderer("LightRenderer")); } LightRenderer::LightRenderer(RenderBackend* renderbackend, int32_t position): RendererBase(renderbackend, position), m_groups() { setEnabled(false); } LightRenderer::LightRenderer(const LightRenderer& old): RendererBase(old), m_groups() { setEnabled(false); } RendererBase* LightRenderer::clone() { return new LightRenderer(*this); } LightRenderer::~LightRenderer() { } // Add a static lightmap void LightRenderer::addImage(const std::string &group, RendererNode n, ImagePtr image, int32_t src, int32_t dst) { LightRendererElementInfo* info = new LightRendererImageInfo(n, image, src, dst); m_groups[group].push_back(info); } // Add a animation lightmap void LightRenderer::addAnimation(const std::string &group, RendererNode n, AnimationPtr animation, int32_t src, int32_t dst) { LightRendererElementInfo* info = new LightRendererAnimationInfo(n, animation, src, dst); m_groups[group].push_back(info); } // Add a simple light void LightRenderer::addSimpleLight(const std::string &group, RendererNode n, uint8_t intensity, float radius, int32_t subdivisions, float xstretch, float ystretch, uint8_t r, uint8_t g, uint8_t b, int32_t src, int32_t dst) { LightRendererElementInfo* info = new LightRendererSimpleLightInfo(n, intensity, radius, subdivisions, xstretch, ystretch, r, g, b, src, dst); m_groups[group].push_back(info); } // Resize an Image void LightRenderer::resizeImage(const std::string &group, RendererNode n, ImagePtr image, int32_t width, int32_t height, int32_t src, int32_t dst) { LightRendererElementInfo* info = new LightRendererResizeInfo(n, image, width, height, src, dst); m_groups[group].push_back(info); } // Enable stencil test for the group void LightRenderer::addStencilTest(const std::string &group, uint8_t stencil_ref) { std::vector::const_iterator info_it = m_groups[group].begin(); for (;info_it != m_groups[group].end(); ++info_it) { (*info_it)->setStencil(stencil_ref); } } // Disable stencil test for the group void LightRenderer::removeStencilTest(const std::string &group) { std::vector::const_iterator info_it = m_groups[group].begin(); for (;info_it != m_groups[group].end(); ++info_it) { (*info_it)->removeStencil(); } } // Return a list of all groups std::list LightRenderer::getGroups() { std::list groups; std::map >::iterator group_it = m_groups.begin(); for(; group_it != m_groups.end(); ++group_it) { groups.push_back(group_it->first); } groups.sort(); groups.unique(); return groups; } // Return a vector of all LightElementInfos std::vector LightRenderer::getLightInfo(const std::string &group) { std::vector info; std::vector::const_iterator info_it = m_groups[group].begin(); for (;info_it != m_groups[group].end(); ++info_it) { info.push_back(*info_it); } return info; } // Remove the group void LightRenderer::removeAll(const std::string &group) { std::vector::const_iterator info_it = m_groups[group].begin(); for (;info_it != m_groups[group].end(); ++info_it) { delete *info_it; } m_groups[group].clear(); m_groups.erase(group); } // Remove all groups void LightRenderer::removeAll() { std::map >::iterator it = m_groups.begin(); for (; it != m_groups.end(); ++it) { std::vector::const_iterator info_it = it->second.begin(); for (;info_it != it->second.end(); ++info_it) { delete *info_it; } } m_groups.clear(); } // Clear all groups void LightRenderer::reset() { removeAll(); } // Render void LightRenderer::render(Camera* cam, Layer* layer, RenderList& instances) { uint8_t lm = m_renderbackend->getLightingModel(); if (!layer->areInstancesVisible()) { return; } std::map >::iterator group_it = m_groups.begin(); for (; group_it != m_groups.end(); ++group_it) { std::vector::const_iterator info_it = group_it->second.begin(); for (;info_it != group_it->second.end(); ++info_it) { if (lm != 0) { if ((*info_it)->getStencil() != -1 && (*info_it)->getStencil() < 255) { if(info_it != group_it->second.begin()) { (*info_it)->setStencil((*info_it)->getStencil()+1); } } } (*info_it)->render(cam, layer, instances, m_renderbackend); } } } } fifengine-0.4.1/engine/core/view/renderers/lightrenderer.h000066400000000000000000000154041304641216200236200ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_LIGHTRENDERER_H #define FIFE_LIGHTRENDERER_H // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "model/structures/renderernode.h" #include "view/rendererbase.h" #include "video/animation.h" namespace FIFE { class RenderBackend; class IFont; class LightRendererElementInfo { public: LightRendererElementInfo(RendererNode n, int32_t src, int32_t dst); virtual ~LightRendererElementInfo() {}; virtual void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend) = 0; virtual std::string getName() = 0; RendererNode* getNode() { return &m_anchor; }; int32_t getSrcBlend() { return m_src; }; int32_t getDstBlend() { return m_dst; }; void setStencil(uint8_t stencil_ref); int32_t getStencil(); void removeStencil(); virtual std::vector getColor() { return std::vector(); }; virtual float getRadius() { return 0; }; virtual int32_t getSubdivisions() { return 0; }; virtual float getXStretch() { return 0; }; virtual float getYStretch() { return 0; }; protected: RendererNode m_anchor; int32_t m_src; int32_t m_dst; bool m_stencil; uint8_t m_stencil_ref; }; class LightRendererImageInfo : public LightRendererElementInfo { public: LightRendererImageInfo(RendererNode n, ImagePtr image, int32_t src, int32_t dst); virtual ~LightRendererImageInfo() {}; virtual void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend); virtual std::string getName() { return "image"; }; ImagePtr getImage() { return m_image; }; private: ImagePtr m_image; }; class LightRendererAnimationInfo : public LightRendererElementInfo { public: LightRendererAnimationInfo(RendererNode n, AnimationPtr animation, int32_t src, int32_t dst); virtual ~LightRendererAnimationInfo() {}; virtual void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend); virtual std::string getName() { return "animation"; }; AnimationPtr getAnimation() { return m_animation; }; private: AnimationPtr m_animation; uint32_t m_start_time; float m_time_scale; }; class LightRendererSimpleLightInfo : public LightRendererElementInfo { public: LightRendererSimpleLightInfo(RendererNode n, uint8_t intensity, float radius, int32_t subdivisions, float xstretch, float ystretch, uint8_t r, uint8_t g, uint8_t b, int32_t src, int32_t dst); virtual ~LightRendererSimpleLightInfo() {}; virtual void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend); virtual std::string getName() { return "simple"; }; std::vector getColor(); float getRadius() { return m_radius; }; int32_t getSubdivisions() { return m_subdivisions; }; float getXStretch() { return m_xstretch; }; float getYStretch() { return m_ystretch; }; private: uint8_t m_intensity; float m_radius; int32_t m_subdivisions; float m_xstretch; float m_ystretch; uint8_t m_red; uint8_t m_green; uint8_t m_blue; }; class LightRendererResizeInfo : public LightRendererElementInfo { public: LightRendererResizeInfo(RendererNode n, ImagePtr image, int32_t width, int32_t height, int32_t src, int32_t dst); virtual ~LightRendererResizeInfo() {}; virtual void render(Camera* cam, Layer* layer, RenderList& instances, RenderBackend* renderbackend); virtual std::string getName() { return "resize"; }; ImagePtr getImage() { return m_image; }; private: ImagePtr m_image; int32_t m_width; int32_t m_height; }; class LightRenderer: public RendererBase { public: /** constructor. * @param renderbackend to use * @param position position for this renderer in rendering pipeline */ LightRenderer(RenderBackend* renderbackend, int32_t position); LightRenderer(const LightRenderer& old); RendererBase* clone(); /** Destructor. */ virtual ~LightRenderer(); void render(Camera* cam, Layer* layer, RenderList& instances); std::string getName() { return "LightRenderer"; } /** Gets instance for interface access */ static LightRenderer* getInstance(IRendererContainer* cnt); void addImage(const std::string &group, RendererNode n, ImagePtr image, int32_t src=-1, int32_t dst=-1); void addAnimation(const std::string &group, RendererNode n, AnimationPtr animation, int32_t src=-1, int32_t dst=-1); void addSimpleLight(const std::string &group, RendererNode n, uint8_t intensity, float radius, int32_t subdivisions, float xstretch, float ystretch, uint8_t r, uint8_t g, uint8_t b, int32_t src=-1, int32_t dst=-1); void resizeImage(const std::string &group, RendererNode n, ImagePtr image, int32_t width, int32_t height, int32_t src=-1, int32_t dst=-1); void addStencilTest(const std::string &group, uint8_t stencil_ref=0); void removeStencilTest(const std::string &group); std::list getGroups(); std::vector getLightInfo(const std::string &group); void removeAll(const std::string &group); void removeAll(); void reset(); private: std::map > m_groups; }; } #endif fifengine-0.4.1/engine/core/view/renderers/lightrenderer.i000066400000000000000000000107711304641216200236230ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "view/renderers/lightrenderer.h" %} namespace FIFE { class RenderBackend; class LightRendererElementInfo { public: LightRendererElementInfo(RendererNode n, int32_t src, int32_t dst); virtual ~LightRendererElementInfo(); virtual std::string getName() = 0; RendererNode* getNode(); int32_t getSrcBlend(); int32_t getDstBlend(); void setStencil(uint8_t stencil_ref); int32_t getStencil(); void removeStencil(); virtual std::vector getColor(); virtual float getRadius(); virtual int32_t getSubdivisions(); virtual float getXStretch(); virtual float getYStretch(); }; class LightRendererImageInfo : public LightRendererElementInfo { public: LightRendererImageInfo(RendererNode n, ImagePtr image, int32_t src, int32_t dst); virtual ~LightRendererImageInfo(); ImagePtr getImage(); }; class LightRendererAnimationInfo : public LightRendererElementInfo { public: LightRendererAnimationInfo(RendererNode n, AnimationPtr animation, int32_t src, int32_t dst); virtual ~LightRendererAnimationInfo(); AnimationPtr getAnimation(); }; class LightRendererSimpleLightInfo : public LightRendererElementInfo { public: LightRendererSimpleLightInfo(RendererNode n, uint8_t intensity, float radius, int32_t subdivisions, float xstretch, float ystretch, uint8_t r, uint8_t g, uint8_t b, int32_t src, int32_t dst); virtual ~LightRendererSimpleLightInfo(); std::vector getColor(); float getRadius(); int32_t getSubdivisions(); float getXStretch(); float getYStretch(); }; class LightRendererResizeInfo : public LightRendererElementInfo { public: LightRendererResizeInfo(RendererNode n, ImagePtr image, int32_t width, int32_t height, int32_t src, int32_t dst); virtual ~LightRendererResizeInfo(); ImagePtr getImage(); }; class LightRenderer: public RendererBase { public: LightRenderer(RenderBackend* renderbackend, int32_t position); ~LightRenderer(); std::string getName(); static LightRenderer* getInstance(IRendererContainer* cnt); void addImage(const std::string &group, RendererNode n, ImagePtr image, int32_t src=-1, int32_t dst=-1); void addAnimation(const std::string &group, RendererNode n, AnimationPtr animation, int32_t src=-1, int32_t dst=-1); void addSimpleLight(const std::string &group, RendererNode n, uint8_t intensity, float radius, int32_t subdivisions, float xstretch, float ystretch, uint8_t r, uint8_t g, uint8_t b, int32_t src=-1, int32_t dst=-1); void resizeImage(const std::string &group, RendererNode n, ImagePtr image, int32_t width, int32_t height, int32_t src=-1, int32_t dst=-1); void addStencilTest(const std::string &group, uint8_t stencil_ref=0); void removeStencilTest(const std::string &group); std::list getGroups(); std::vector getLightInfo(const std::string &group); void removeAll(const std::string &group); void removeAll(); }; } namespace std { %template(LightRendererElementInfoVector) vector; } fifengine-0.4.1/engine/core/view/renderers/offrenderer.cpp000066400000000000000000000227341304641216200236220ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "video/renderbackend.h" #include "video/fonts/ifont.h" #include "video/image.h" #include "video/imagemanager.h" #include "util/math/fife_math.h" #include "util/log/logger.h" #include "util/time/timemanager.h" #include "model/metamodel/timeprovider.h" #include "offrenderer.h" namespace FIFE { /** Logger to use for this source file. * @relates Logger */ static Logger _log(LM_VIEWVIEW); OffRendererLineInfo::OffRendererLineInfo(Point n1, Point n2, uint8_t r, uint8_t g, uint8_t b, uint8_t a): OffRendererElementInfo(), m_edge1(n1), m_edge2(n2), m_red(r), m_green(g), m_blue(b), m_alpha(a) { } void OffRendererLineInfo::render(RenderBackend* renderbackend) { renderbackend->drawLine(m_edge1, m_edge2, m_red, m_green, m_blue, m_alpha); } OffRendererPointInfo::OffRendererPointInfo(Point anchor, uint8_t r, uint8_t g, uint8_t b, uint8_t a): OffRendererElementInfo(), m_anchor(anchor), m_red(r), m_green(g), m_blue(b), m_alpha(a) { } void OffRendererPointInfo::render(RenderBackend* renderbackend) { renderbackend->putPixel(m_anchor.x, m_anchor.y, m_red, m_green, m_blue, m_alpha); } OffRendererTriangleInfo::OffRendererTriangleInfo(Point n1, Point n2, Point n3, uint8_t r, uint8_t g, uint8_t b, uint8_t a): OffRendererElementInfo(), m_edge1(n1), m_edge2(n2), m_edge3(n3), m_red(r), m_green(g), m_blue(b), m_alpha(a) { } void OffRendererTriangleInfo::render(RenderBackend* renderbackend) { renderbackend->drawTriangle(m_edge1, m_edge2, m_edge3, m_red, m_green, m_blue, m_alpha); } OffRendererQuadInfo::OffRendererQuadInfo(Point n1, Point n2, Point n3, Point n4, uint8_t r, uint8_t g, uint8_t b, uint8_t a): OffRendererElementInfo(), m_edge1(n1), m_edge2(n2), m_edge3(n3), m_edge4(n4), m_red(r), m_green(g), m_blue(b), m_alpha(a) { } void OffRendererQuadInfo::render(RenderBackend* renderbackend) { renderbackend->drawQuad(m_edge1, m_edge2, m_edge3, m_edge4, m_red, m_green, m_blue, m_alpha); } OffRendererVertexInfo::OffRendererVertexInfo(Point center, int32_t size, uint8_t r, uint8_t g, uint8_t b, uint8_t a): OffRendererElementInfo(), m_center(center), m_size(size), m_red(r), m_green(g), m_blue(b), m_alpha(a) { } void OffRendererVertexInfo::render(RenderBackend* renderbackend) { renderbackend->drawVertex(m_center, m_size, m_red, m_green, m_blue, m_alpha); } OffRendererImageInfo::OffRendererImageInfo(Point anchor, ImagePtr image): OffRendererElementInfo(), m_anchor(anchor), m_image(image) { } void OffRendererImageInfo::render(RenderBackend* renderbackend) { Rect r; uint16_t width = m_image->getWidth(); uint16_t height = m_image->getHeight(); r.x = m_anchor.x-width/2; r.y = m_anchor.y-height/2; r.w = width; r.h = height; m_image->render(r); } OffRendererAnimationInfo::OffRendererAnimationInfo(Point anchor, AnimationPtr animation): OffRendererElementInfo(), m_anchor(anchor), m_animation(animation), m_start_time(TimeManager::instance()->getTime()), m_time_scale(1.0) { } void OffRendererAnimationInfo::render(RenderBackend* renderbackend) { int32_t animtime = scaleTime(m_time_scale, TimeManager::instance()->getTime() - m_start_time) % m_animation->getDuration(); ImagePtr img = m_animation->getFrameByTimestamp(animtime); Rect r; uint16_t width = img->getWidth(); uint16_t height = img->getHeight(); r.x = m_anchor.x-width/2; r.y = m_anchor.y-height/2; r.w = width; r.h = height; img->render(r); } OffRendererTextInfo::OffRendererTextInfo(Point anchor, IFont* font, std::string text): OffRendererElementInfo(), m_anchor(anchor), m_font(font), m_text(text) { } void OffRendererTextInfo::render(RenderBackend* renderbackend) { Image* img = m_font->getAsImageMultiline(m_text); Rect r; uint16_t width = img->getWidth(); uint16_t height = img->getHeight(); r.x = m_anchor.x-width/2; r.y = m_anchor.y-height/2; r.w = width; r.h = height; img->render(r); } OffRendererResizeInfo::OffRendererResizeInfo(Point anchor, ImagePtr image, int32_t width, int32_t height): OffRendererElementInfo(), m_anchor(anchor), m_image(image), m_width(width), m_height(height){ } void OffRendererResizeInfo::render(RenderBackend* renderbackend) { Rect r; uint16_t width = m_width; uint16_t height = m_height; r.x = m_anchor.x-width/2; r.y = m_anchor.y-height/2; r.w = width; r.h = height; m_image->render(r); } OffRenderer::OffRenderer(RenderBackend* renderbackend): m_groups(), m_renderbackend(renderbackend), m_enabled(false), m_area(renderbackend->getArea()) { } OffRenderer::~OffRenderer() { removeAll(); } void OffRenderer::setEnabled(bool enabled) { m_enabled = enabled; } bool OffRenderer::isEnabled() { return m_enabled; } void OffRenderer::setClipArea(Rect area) { m_area = area; } const Rect& OffRenderer::getClipArea() const { return m_area; } void OffRenderer::addLine(const std::string &group, Point n1, Point n2, uint8_t r, uint8_t g, uint8_t b, uint8_t a) { OffRendererElementInfo* info = new OffRendererLineInfo(n1, n2, r, g, b, a); m_groups[group].push_back(info); } void OffRenderer::addPoint(const std::string &group, Point n, uint8_t r, uint8_t g, uint8_t b, uint8_t a) { OffRendererElementInfo* info = new OffRendererPointInfo(n, r, g, b, a); m_groups[group].push_back(info); } void OffRenderer::addTriangle(const std::string &group, Point n1, Point n2, Point n3, uint8_t r, uint8_t g, uint8_t b, uint8_t a) { OffRendererElementInfo* info = new OffRendererTriangleInfo(n1, n2, n3, r, g, b, a); m_groups[group].push_back(info); } void OffRenderer::addQuad(const std::string &group, Point n1, Point n2, Point n3, Point n4, uint8_t r, uint8_t g, uint8_t b, uint8_t a) { OffRendererElementInfo* info = new OffRendererQuadInfo(n1, n2, n3, n4, r, g, b, a); m_groups[group].push_back(info); } void OffRenderer::addVertex(const std::string &group, Point n, int32_t size, uint8_t r, uint8_t g, uint8_t b, uint8_t a) { OffRendererElementInfo* info = new OffRendererVertexInfo(n, size, r, g, b, a); m_groups[group].push_back(info); } void OffRenderer::addText(const std::string &group, Point n, IFont* font, const std::string &text) { OffRendererElementInfo* info = new OffRendererTextInfo(n, font, text); m_groups[group].push_back(info); } void OffRenderer::addImage(const std::string &group, Point n, ImagePtr image) { OffRendererElementInfo* info = new OffRendererImageInfo(n, image); m_groups[group].push_back(info); } void OffRenderer::addAnimation(const std::string &group, Point n, AnimationPtr animation) { OffRendererElementInfo* info = new OffRendererAnimationInfo(n, animation); m_groups[group].push_back(info); } void OffRenderer::resizeImage(const std::string &group, Point n, ImagePtr image, int32_t width, int32_t height) { OffRendererElementInfo* info = new OffRendererResizeInfo(n, image, width, height); m_groups[group].push_back(info); } void OffRenderer::removeAll(const std::string &group) { std::vector::const_iterator info_it = m_groups[group].begin(); for (;info_it != m_groups[group].end(); ++info_it) { delete *info_it; } m_groups[group].clear(); m_groups.erase(group); } void OffRenderer::removeAll() { m_groups.clear(); } void OffRenderer::render() { if (!m_enabled) { return; } m_renderbackend->pushClipArea(m_area); std::map >::iterator group_it = m_groups.begin(); for(; group_it != m_groups.end(); ++group_it) { std::vector::const_iterator info_it = group_it->second.begin(); for (;info_it != group_it->second.end(); ++info_it) { (*info_it)->render(m_renderbackend); } } m_renderbackend->renderVertexArrays(); m_renderbackend->popClipArea(); } } fifengine-0.4.1/engine/core/view/renderers/offrenderer.h000066400000000000000000000150051304641216200232600ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_OFFRENDERER_H #define FIFE_OFFRENDERER_H // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "video/animation.h" namespace FIFE { class RenderBackend; class IFont; class OffRendererElementInfo { public: virtual void render(RenderBackend* renderbackend) {}; virtual ~OffRendererElementInfo() {}; }; class OffRendererLineInfo : public OffRendererElementInfo { public: void render(RenderBackend* renderbackend); OffRendererLineInfo(Point n1, Point n2, uint8_t r, uint8_t g, uint8_t b, uint8_t a); virtual ~OffRendererLineInfo() {}; private: Point m_edge1; Point m_edge2; uint8_t m_red; uint8_t m_green; uint8_t m_blue; uint8_t m_alpha; }; class OffRendererPointInfo : public OffRendererElementInfo { public: void render(RenderBackend* renderbackend); OffRendererPointInfo(Point n, uint8_t r, uint8_t g, uint8_t b, uint8_t a); virtual ~OffRendererPointInfo() {}; private: Point m_anchor; uint8_t m_red; uint8_t m_green; uint8_t m_blue; uint8_t m_alpha; }; class OffRendererTriangleInfo : public OffRendererElementInfo { public: void render(RenderBackend* renderbackend); OffRendererTriangleInfo(Point n1, Point n2, Point n3, uint8_t r, uint8_t g, uint8_t b, uint8_t a); virtual ~OffRendererTriangleInfo() {}; private: Point m_edge1; Point m_edge2; Point m_edge3; uint8_t m_red; uint8_t m_green; uint8_t m_blue; uint8_t m_alpha; }; class OffRendererQuadInfo : public OffRendererElementInfo { public: void render(RenderBackend* renderbackend); OffRendererQuadInfo(Point n1, Point n2, Point n3, Point n4, uint8_t r, uint8_t g, uint8_t b, uint8_t a); virtual ~OffRendererQuadInfo() {}; private: Point m_edge1; Point m_edge2; Point m_edge3; Point m_edge4; uint8_t m_red; uint8_t m_green; uint8_t m_blue; uint8_t m_alpha; }; class OffRendererVertexInfo : public OffRendererElementInfo { public: void render(RenderBackend* renderbackend); OffRendererVertexInfo(Point center, int32_t size, uint8_t r, uint8_t g, uint8_t b, uint8_t a); virtual ~OffRendererVertexInfo() {}; private: Point m_center; int32_t m_size; uint8_t m_red; uint8_t m_green; uint8_t m_blue; uint8_t m_alpha; }; class OffRendererImageInfo : public OffRendererElementInfo { public: void render(RenderBackend* renderbackend); OffRendererImageInfo(Point n, ImagePtr image); virtual ~OffRendererImageInfo() {}; private: Point m_anchor; ImagePtr m_image; }; class OffRendererAnimationInfo : public OffRendererElementInfo { public: void render(RenderBackend* renderbackend); OffRendererAnimationInfo(Point n, AnimationPtr animation); virtual ~OffRendererAnimationInfo() {}; private: Point m_anchor; AnimationPtr m_animation; uint32_t m_start_time; float m_time_scale; }; class OffRendererTextInfo : public OffRendererElementInfo { public: void render(RenderBackend* renderbackend); OffRendererTextInfo(Point n, IFont* font, std::string text); virtual ~OffRendererTextInfo() {}; private: Point m_anchor; IFont* m_font; std::string m_text; }; class OffRendererResizeInfo : public OffRendererElementInfo { public: void render(RenderBackend* renderbackend); OffRendererResizeInfo(Point n, ImagePtr image, int32_t width, int32_t height); virtual ~OffRendererResizeInfo() {}; private: Point m_anchor; ImagePtr m_image; int32_t m_width; int32_t m_height; }; class OffRenderer { public: /** constructor. * @param renderbackend to use */ OffRenderer(RenderBackend* renderbackend); /** Destructor. */ virtual ~OffRenderer(); void setEnabled(bool enabled); bool isEnabled(); void setClipArea(Rect area); const Rect& getClipArea() const; void render(); void addLine(const std::string &group, Point n1, Point n2, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); void addPoint(const std::string &group, Point n, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); void addTriangle(const std::string &group, Point n1, Point n2, Point n3, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); void addQuad(const std::string &group, Point n1, Point n2, Point n3, Point n4, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); void addVertex(const std::string &group, Point n, int32_t size, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); void addText(const std::string &group, Point n, IFont* font, const std::string &text); void addImage(const std::string &group, Point n, ImagePtr image); void addAnimation(const std::string &group, Point n, AnimationPtr animation); void resizeImage(const std::string &group, Point n, ImagePtr image, int32_t width, int32_t height); void removeAll(const std::string &group); void removeAll(); private: std::map > m_groups; RenderBackend* m_renderbackend; bool m_enabled; Rect m_area; }; } #endif fifengine-0.4.1/engine/core/view/renderers/offrenderer.i000066400000000000000000000111231304641216200232560ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "view/renderers/offrenderer.h" %} namespace FIFE { class RenderBackend; class OffRendererElementInfo { public: virtual ~OffRendererElementInfo() {}; }; class OffRendererLineInfo : public OffRendererElementInfo { public: OffRendererLineInfo(Point n1, Point n2, uint8_t r, uint8_t g, uint8_t b, uint8_t a); virtual ~OffRendererLineInfo() {}; }; class OffRendererPointInfo : public OffRendererElementInfo { public: OffRendererPointInfo(Point n, uint8_t r, uint8_t g, uint8_t b, uint8_t a); virtual ~OffRendererPointInfo() {}; }; class OffRendererTriangleInfo : public OffRendererElementInfo { public: OffRendererTriangleInfo(Point n1, Point n2, Point n3, uint8_t r, uint8_t g, uint8_t b, uint8_t a); virtual ~OffRendererTriangleInfo() {}; }; class OffRendererQuadInfo : public OffRendererElementInfo { public: OffRendererQuadInfo(Point n1, Point n2, Point n3, Point n4, uint8_t r, uint8_t g, uint8_t b, uint8_t a); virtual ~OffRendererQuadInfo() {}; }; class OffRendererVertexInfo : public OffRendererElementInfo { public: OffRendererVertexInfo(Point center, int32_t size, uint8_t r, uint8_t g, uint8_t b, uint8_t a); virtual ~OffRendererVertexInfo() {}; }; class OffRendererImageInfo : public OffRendererElementInfo { public: OffRendererImageInfo(Point n, ImagePtr image); virtual ~OffRendererImageInfo() {}; }; class OffRendererAnimationInfo : public OffRendererElementInfo { public: OffRendererAnimationInfo(Point n, AnimationPtr animation); virtual ~OffRendererAnimationInfo() {}; }; class OffRendererTextInfo : public OffRendererElementInfo { public: OffRendererTextInfo(Point n, IFont* font, std::string text); virtual ~OffRendererTextInfo() {}; }; class OffRendererResizeInfo : public OffRendererElementInfo { public: OffRendererResizeInfo(Point n, ImagePtr image, int32_t width, int32_t height); virtual ~OffRendererResizeInfo() {}; }; class OffRenderer { public: OffRenderer(RenderBackend* renderbackend); ~OffRenderer(); void setEnabled(bool enabled); bool isEnabled(); void setClipArea(Rect area); const Rect& getClipArea() const; void addLine(const std::string &group, Point n1, Point n2, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); void addPoint(const std::string &group, Point n, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); void addTriangle(const std::string &group, Point n1, Point n2, Point n3, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); void addQuad(const std::string &group, Point n1, Point n2, Point n3, Point n4, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); void addVertex(const std::string &group, Point n, int32_t size, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); void addText(const std::string &group, Point n, IFont* font, const std::string &text); void addImage(const std::string &group, Point n, ImagePtr image); void addAnimation(const std::string &group, Point n, AnimationPtr animation); void resizeImage(const std::string &group, Point n, ImagePtr image, int32_t width, int32_t height); void removeAll(const std::string &group); void removeAll(); }; } fifengine-0.4.1/engine/core/view/renderers/quadtreerenderer.cpp000066400000000000000000000112171304641216200246540ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "video/renderbackend.h" #include "util/math/fife_math.h" #include "util/log/logger.h" #include "model/metamodel/grids/cellgrid.h" #include "model/structures/instance.h" #include "model/structures/layer.h" #include "model/structures/location.h" #include "view/camera.h" #include "quadtreerenderer.h" #include "model/structures/instancetree.h" #include "util/structures/quadtree.h" //credit to phoku for his NodeDisplay example which the visitor code is adapted from ( he coded the quadtree after all ) namespace FIFE { /** Logger to use for this source file. * @relates Logger */ static Logger _log(LM_VIEWVIEW); QuadTreeRenderer::QuadTreeRenderer(RenderBackend* renderbackend, int32_t position): RendererBase(renderbackend, position) { setEnabled(false); } QuadTreeRenderer::QuadTreeRenderer(const QuadTreeRenderer& old): RendererBase(old) { setEnabled(false); } RendererBase* QuadTreeRenderer::clone() { return new QuadTreeRenderer(*this); } QuadTreeRenderer::~QuadTreeRenderer() { } RenderVisitor::RenderVisitor(RenderBackend * rb, Layer * layer, Camera *camera) { m_renderbackend = rb; m_layer = layer; m_camera = camera; } RenderVisitor::~RenderVisitor() {} template bool RenderVisitor::visit(QuadNode* node, int32_t d) { if (d==0) visited = 0; int32_t x = node->x(); int32_t y = node->y(); int32_t size = node->size(); ++visited; CellGrid *cg = m_layer->getCellGrid(); ///we have checked for null pointer in quadtreerenderer::render().. no need to check again ExactModelCoordinate emc= cg->toMapCoordinates(ExactModelCoordinate( x,y) );//0.5 for each cell's half-width ScreenPoint scrpt1 =m_camera->toScreenCoordinates( emc ); emc= cg->toMapCoordinates(ExactModelCoordinate( x,y+size) );// this size usage is wrong.. me thinks ScreenPoint scrpt2 =m_camera->toScreenCoordinates( emc ); emc= cg->toMapCoordinates(ExactModelCoordinate( x+size,y) ); ScreenPoint scrpt3 =m_camera->toScreenCoordinates( emc ); emc= cg->toMapCoordinates(ExactModelCoordinate( x+size,y+size) ); ScreenPoint scrpt4 =m_camera->toScreenCoordinates( emc ); m_renderbackend->drawLine(Point(scrpt1.x,scrpt1.y), Point(scrpt2.x,scrpt2.y), 255, 255, 255); m_renderbackend->drawLine(Point(scrpt1.x,scrpt1.y), Point(scrpt3.x,scrpt3.y), 255, 255, 255); m_renderbackend->drawLine(Point(scrpt3.x,scrpt3.y), Point(scrpt4.x,scrpt4.y), 255, 255, 255); m_renderbackend->drawLine(Point(scrpt2.x,scrpt2.y), Point(scrpt4.x,scrpt4.y), 255, 255, 255); return true; } void QuadTreeRenderer::render(Camera* cam, Layer* layer, RenderList& instances) { CellGrid* cg = layer->getCellGrid(); if (!cg) { FL_WARN(_log, "No cellgrid assigned to layer, cannot draw grid"); return; } InstanceTree * itree = layer->getInstanceTree(); RenderVisitor VIPguess(m_renderbackend, layer,cam); itree->applyVisitor(VIPguess); } } fifengine-0.4.1/engine/core/view/renderers/quadtreerenderer.h000066400000000000000000000054751304641216200243320ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_QUADTREERENDERER_H #define FIFE_QUADTREERENDERER_H // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "view/rendererbase.h" #include "util/structures/quadtree.h" #include "model/structures/instancetree.h" namespace FIFE { class RenderBackend; class RenderVisitor { public: int32_t visited; RenderBackend * m_renderbackend; Layer * m_layer; Camera *m_camera; RenderVisitor(RenderBackend * rb, Layer * layer, Camera *camera); ~RenderVisitor(); template bool visit(QuadNode* node, int32_t d); }; class QuadTreeRenderer: public RendererBase { public: /** constructor. * @param renderbackend to use * @param position position for this renderer in rendering pipeline */ QuadTreeRenderer(RenderBackend* renderbackend, int32_t position); QuadTreeRenderer(const QuadTreeRenderer& old); RendererBase* clone(); /** Destructor. */ virtual ~QuadTreeRenderer(); void render(Camera* cam, Layer* layer, RenderList& instances); std::string getName() { return "QuadTreeRenderer"; } }; } #endif fifengine-0.4.1/engine/core/view/renderers/targetrenderer.cpp000066400000000000000000000156361304641216200243410ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "video/renderbackend.h" #include "video/imagemanager.h" #include "util/log/logger.h" #include "view/camera.h" #include "targetrenderer.h" namespace FIFE { /** Logger to use for this source file. * @relates Logger */ static Logger _log(LM_VIEWVIEW); RenderTarget::RenderTarget(RenderBackend* rb, const std::string& name, uint32_t width, uint32_t height): m_renderbackend(rb) { m_target = ImageManager::instance()->loadBlank(name, width, height); } RenderTarget::RenderTarget(RenderBackend* rb, ImagePtr& image): m_renderbackend(rb), m_target(image) { } RenderTarget::~RenderTarget() { } void RenderTarget::addLine(const std::string &group, Point n1, Point n2, uint8_t r, uint8_t g, uint8_t b, uint8_t a) { OffRendererElementInfo* info = new OffRendererLineInfo(n1, n2, r, g, b, a); m_groups[group].push_back(info); } void RenderTarget::addPoint(const std::string &group, Point n, uint8_t r, uint8_t g, uint8_t b, uint8_t a) { OffRendererElementInfo* info = new OffRendererPointInfo(n, r, g, b, a); m_groups[group].push_back(info); } void RenderTarget::addTriangle(const std::string &group, Point n1, Point n2, Point n3, uint8_t r, uint8_t g, uint8_t b, uint8_t a) { OffRendererElementInfo* info = new OffRendererTriangleInfo(n1, n2, n3, r, g, b, a); m_groups[group].push_back(info); } void RenderTarget::addQuad(const std::string &group, Point n1, Point n2, Point n3, Point n4, uint8_t r, uint8_t g, uint8_t b, uint8_t a) { OffRendererElementInfo* info = new OffRendererQuadInfo(n1, n2, n3, n4, r, g, b, a); m_groups[group].push_back(info); } void RenderTarget::addVertex(const std::string &group, Point n, int32_t size, uint8_t r, uint8_t g, uint8_t b, uint8_t a) { OffRendererElementInfo* info = new OffRendererVertexInfo(n, size, r, g, b, a); m_groups[group].push_back(info); } void RenderTarget::addText(const std::string &group, Point n, IFont* font, const std::string &text) { OffRendererElementInfo* info = new OffRendererTextInfo(n, font, text); m_groups[group].push_back(info); } void RenderTarget::addImage(const std::string &group, Point n, ImagePtr image) { OffRendererElementInfo* info = new OffRendererImageInfo(n, image); m_groups[group].push_back(info); } void RenderTarget::addAnimation(const std::string &group, Point n, AnimationPtr animation) { OffRendererElementInfo* info = new OffRendererAnimationInfo(n, animation); m_groups[group].push_back(info); } void RenderTarget::resizeImage(const std::string &group, Point n, ImagePtr image, int32_t width, int32_t height) { OffRendererElementInfo* info = new OffRendererResizeInfo(n, image, width, height); m_groups[group].push_back(info); } void RenderTarget::removeAll(const std::string &group) { std::vector::const_iterator info_it = m_groups[group].begin(); for (;info_it != m_groups[group].end(); ++info_it) { delete *info_it; } m_groups[group].clear(); m_groups.erase(group); } void RenderTarget::removeAll() { m_groups.clear(); } void RenderTarget::render() { std::map >::iterator group_it = m_groups.begin(); for(; group_it != m_groups.end(); ++group_it) { std::vector::const_iterator info_it = group_it->second.begin(); for (; info_it != group_it->second.end(); ++info_it) { (*info_it)->render(m_renderbackend); } } } TargetRenderer::TargetRenderer(RenderBackend* renderbackend) : m_renderbackend(renderbackend) { } TargetRenderer::~TargetRenderer() { } RenderTargetPtr TargetRenderer::createRenderTarget(const std::string& name, uint32_t width, uint32_t height) { RenderJob rj; rj.ndraws = -1; rj.lasttime_draw = 1; rj.target = RenderTargetPtr(new RenderTarget(m_renderbackend, name, width, height)); rj.discard = false; std::pair ret = m_targets.insert(std::make_pair(name, rj)); return ret.first->second.target; } RenderTargetPtr TargetRenderer::createRenderTarget(ImagePtr& image) { RenderJob rj; rj.ndraws = -1; rj.lasttime_draw = 1; rj.target = RenderTargetPtr(new RenderTarget(m_renderbackend, image)); rj.discard = false; std::pair ret = m_targets.insert(std::make_pair(image->getName(), rj)); return ret.first->second.target; } void TargetRenderer::setRenderTarget(const std::string& targetname, bool discard, int32_t ndraws) { RenderJobMap::iterator it = m_targets.find(targetname); if (it != m_targets.end()) { it->second.ndraws = ndraws; it->second.discard = discard; } } void TargetRenderer::render() { if (!m_targets.empty()) { for (RenderJobMap::iterator it = m_targets.begin(); it != m_targets.end(); ++it) { if (it->second.ndraws != -1) { if (it->second.ndraws <= it->second.lasttime_draw) { RenderTargetPtr rt = it->second.target; m_renderbackend->attachRenderTarget(rt->m_target, it->second.discard); rt->render(); m_renderbackend->detachRenderTarget(); if(it->second.ndraws == 0) { it->second.ndraws = -1; } else { it->second.lasttime_draw = 1; } } else { ++it->second.lasttime_draw; } } } } } } fifengine-0.4.1/engine/core/view/renderers/targetrenderer.h000066400000000000000000000105151304641216200237750ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_TARGETRENDERER_H #define FIFE_TARGETRENDERER_H // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "view/renderers/offrenderer.h" namespace FIFE { class RenderTarget { friend class TargetRenderer; public: /** Destructor. */ ~RenderTarget(); void addLine(const std::string &group, Point n1, Point n2, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); void addPoint(const std::string &group, Point n, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); void addTriangle(const std::string &group, Point n1, Point n2, Point n3, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); void addQuad(const std::string &group, Point n1, Point n2, Point n3, Point n4, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); void addVertex(const std::string &group, Point n, int32_t size, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); void addText(const std::string &group, Point n, IFont* font, const std::string &text); void addImage(const std::string &group, Point n, ImagePtr image); void addAnimation(const std::string &group, Point n, AnimationPtr animation); void resizeImage(const std::string &group, Point n, ImagePtr image, int32_t width, int32_t height); void removeAll(const std::string &group); void removeAll(); void render(); ImagePtr getTarget() { return m_target; } private: RenderTarget(RenderBackend* rb, const std::string& name, uint32_t width, uint32_t height); RenderTarget(RenderBackend* rb, ImagePtr& image); // Non copyable RenderTarget(const RenderTarget& rhs); /* = delete */ RenderTarget& operator=(const RenderTarget& rhs); /* = delete */ std::map > m_groups; RenderBackend* m_renderbackend; ImagePtr m_target; }; typedef SharedPtr RenderTargetPtr; class TargetRenderer { public: /** Constructor. * @param renderbackend to use */ TargetRenderer(RenderBackend* renderbackend); /** Destructor. */ virtual ~TargetRenderer(); /** Creates render target */ RenderTargetPtr createRenderTarget(const std::string& name, uint32_t width, uint32_t height); RenderTargetPtr createRenderTarget(ImagePtr& image); // -1 - dont render // 0 - just for the next frame // 1 - every frame // 2 - every two frames, etc... void setRenderTarget(const std::string& targetname, bool discard, int32_t ndraws = 0); void render(); private: struct RenderJob { int32_t ndraws; int32_t lasttime_draw; RenderTargetPtr target; bool discard; }; typedef std::map RenderJobMap; RenderJobMap m_targets; RenderBackend* m_renderbackend; }; } #endif fifengine-0.4.1/engine/core/view/renderers/targetrenderer.i000066400000000000000000000064301304641216200237770ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "view/renderers/targetrenderer.h" %} namespace FIFE { class RenderTarget { public: ~RenderTarget(); void addLine(const std::string &group, Point n1, Point n2, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); void addPoint(const std::string &group, Point n, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); void addTriangle(const std::string &group, Point n1, Point n2, Point n3, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); void addQuad(const std::string &group, Point n1, Point n2, Point n3, Point n4, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); void addVertex(const std::string &group, Point n, int32_t size, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255); void addText(const std::string &group, Point n, IFont* font, const std::string &text); void addImage(const std::string &group, Point n, ImagePtr image); void addAnimation(const std::string &group, Point n, AnimationPtr animation); void resizeImage(const std::string &group, Point n, ImagePtr image, int32_t width, int32_t height); void removeAll(const std::string &group); void removeAll(); void render(); ImagePtr getTarget(); private: // Non copyable RenderTarget(const RenderTarget& rhs); /* = delete */ RenderTarget& operator=(const RenderTarget& rhs); /* = delete */ }; typedef SharedPtr RenderTargetPtr; %template(SharedRenderTargetPointer) SharedPtr; class TargetRenderer { public: TargetRenderer(RenderBackend* renderbackend); virtual ~TargetRenderer(); RenderTargetPtr createRenderTarget(const std::string& name, uint32_t width, uint32_t height); RenderTargetPtr createRenderTarget(ImagePtr& image); void setRenderTarget(const std::string& targetname, bool discard, int32_t ndraws = 0); void render(); }; } fifengine-0.4.1/engine/core/view/renderitem.cpp000066400000000000000000000106461304641216200214650ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "model/structures/instance.h" #include "model/metamodel/object.h" #include "model/metamodel/action.h" #include "visual.h" #include "renderitem.h" namespace FIFE { const int32_t STATIC_IMAGE_NOT_INITIALIZED = -1; OverlayData::OverlayData(): colorOverlay(0), animationOverlayImages(0), animationColorOverlays(0) { } OverlayData::~OverlayData() { delete animationOverlayImages; delete animationColorOverlays; // don't delete colorOverlay here } RenderItem::RenderItem(Instance* parent): instance(parent), screenpoint(), dimensions(), vertexZ(0), facingAngle(0), transparency(255), currentFrame(-1), m_overlay(0), m_cachedStaticImgId(STATIC_IMAGE_NOT_INITIALIZED), m_cachedStaticImgAngle(0) { } RenderItem::~RenderItem() { delete m_overlay; } int32_t RenderItem::getStaticImageIndexByAngle(uint32_t angle, Instance* instance) { ObjectVisual* objVis = instance->getObject()->getVisual(); if (!objVis) { return STATIC_IMAGE_NOT_INITIALIZED; } if (static_cast(angle) != m_cachedStaticImgAngle) { m_cachedStaticImgId = STATIC_IMAGE_NOT_INITIALIZED; } if (objVis->isColorOverlay()) { if (!m_overlay) { m_overlay = new OverlayData(); } m_overlay->colorOverlay = objVis->getStaticColorOverlay(angle); } if (m_cachedStaticImgId != STATIC_IMAGE_NOT_INITIALIZED) { return m_cachedStaticImgId; } m_cachedStaticImgId = objVis->getStaticImageIndexByAngle(angle); m_cachedStaticImgAngle = angle; return m_cachedStaticImgId; } void RenderItem::setAnimationOverlay(std::vector* ao, std::vector* aco) { if (!m_overlay) { m_overlay = new OverlayData(); } m_overlay->animationOverlayImages = ao; m_overlay->animationColorOverlays = aco; } std::vector* RenderItem::getAnimationOverlay() const { if (m_overlay) { return m_overlay->animationOverlayImages; } return NULL; } std::vector* RenderItem::getAnimationColorOverlay() const { if (m_overlay) { return m_overlay->animationColorOverlays; } return NULL; } void RenderItem::setColorOverlay(OverlayColors* co) { if (!m_overlay) { m_overlay = new OverlayData(); } m_overlay->colorOverlay = co; } OverlayColors* RenderItem::getColorOverlay() const { if (m_overlay) { return m_overlay->colorOverlay; } return NULL; } void RenderItem::deleteOverlayData() { if (m_overlay) { delete m_overlay; m_overlay = 0; } } void RenderItem::reset() { instance = 0; dimensions = Rect(); image.reset(); transparency = 255; currentFrame = -1; m_cachedStaticImgId = STATIC_IMAGE_NOT_INITIALIZED; deleteOverlayData(); } } fifengine-0.4.1/engine/core/view/renderitem.h000066400000000000000000000104731304641216200211300ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_VIEW_RENDERITEM_H #define FIFE_VIEW_RENDERITEM_H // Standard C++ library includes #include // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "visual.h" namespace FIFE { class Instance; class OverlayData { public: OverlayData(); ~OverlayData(); // pointer to single color overlay OverlayColors* colorOverlay; // pointer to vector that holds animation overlay images std::vector* animationOverlayImages; // pointer to vector that holds color overlays for animation overlay std::vector* animationColorOverlays; }; class RenderItem { public: RenderItem(Instance* parent); ~RenderItem(); Instance* instance; /** Returns closest matching static image for given angle * @return id for static image * @see ObjectVisual::getStaticImageIndexByAngle */ int32_t getStaticImageIndexByAngle(uint32_t angle, Instance* instance); /** Sets AnimationOverlay and if available AnimationOverlayColors. * Note: Ownership of the vectors do change. */ void setAnimationOverlay(std::vector* ao, std::vector* aco); /** Returns pointer to AnimationOverlay vector. * Returns 0 if no OverlayData or AnimationOverlay exists. */ std::vector* getAnimationOverlay() const; /** Returns pointer to AnimationColorOverlay vector. * Returns 0 if no OverlayData or AnimationColorOverlay exists. */ std::vector* getAnimationColorOverlay() const; /** Sets single ColorOverlay. * Note: Ownership does not change. */ void setColorOverlay(OverlayColors* co); /** Returns pointer to single ColorOverlay. * Returns 0 if no OverlayData or ColorOverlay exists. */ OverlayColors* getColorOverlay() const; /** Deletes OverlayData. */ void deleteOverlayData(); /** Resets the important values. */ void reset(); // point where instance was drawn during the previous render DoublePoint3D screenpoint; // dimensions of this visual on the virtual screen Rect bbox; // dimensions of this visual during the previous render Rect dimensions; // z value for sorting or depth buffer rendering float vertexZ; // image used during previous render ImagePtr image; // current facing angle int32_t facingAngle; // current transparency uint8_t transparency; // current frame index (e.g. needed for action frame) int32_t currentFrame; // pointer to overlay data class OverlayData* m_overlay; private: int32_t m_cachedStaticImgId; int32_t m_cachedStaticImgAngle; }; typedef std::vector RenderList; } #endif fifengine-0.4.1/engine/core/view/visual.cpp000066400000000000000000000270171304641216200206320ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "util/log/logger.h" #include "util/base/exception.h" #include "model/structures/instance.h" #include "model/metamodel/object.h" #include "model/metamodel/action.h" #include "visual.h" namespace FIFE { /** Logger to use for this source file. * @relates Logger */ static Logger _log(LM_VIEW); OverlayColors::OverlayColors() { } OverlayColors::OverlayColors(ImagePtr image): m_image(image) { } OverlayColors::OverlayColors(AnimationPtr animation): m_animation(animation) { } OverlayColors::~OverlayColors() { } void OverlayColors::setColorOverlayImage(ImagePtr image) { m_image = image; } ImagePtr OverlayColors::getColorOverlayImage() { return m_image; } void OverlayColors::setColorOverlayAnimation(AnimationPtr animation) { m_animation = animation; } AnimationPtr OverlayColors::getColorOverlayAnimation() { return m_animation; } void OverlayColors::changeColor(const Color& source, const Color& target) { std::pair::iterator, bool> inserter = m_colorMap.insert(std::make_pair(source, target)); if (!inserter.second) { Color& c = inserter.first->second; c.set(target.getR(), target.getG(), target.getB(), target.getAlpha()); } } const std::map& OverlayColors::getColors() { return m_colorMap; } void OverlayColors::resetColors() { m_colorMap.clear(); } Visual2DGfx::Visual2DGfx() { } Visual2DGfx::~Visual2DGfx() { } ObjectVisual::ObjectVisual() { } ObjectVisual* ObjectVisual::create(Object* object) { if (object->getVisual()) { throw Duplicate("Object already contains visualization"); } ObjectVisual* v = new ObjectVisual(); object->adoptVisual(v); return v; } ObjectVisual::~ObjectVisual() { } void ObjectVisual::addStaticImage(uint32_t angle, int32_t image_index) { m_angle2img[angle % 360] = image_index; } int32_t ObjectVisual::getStaticImageIndexByAngle(int32_t angle) { int32_t closestMatch = 0; return getIndexByAngle(angle, m_angle2img, closestMatch); } void ObjectVisual::addStaticColorOverlay(uint32_t angle, const OverlayColors& colors) { OverlayColors t = colors; m_map[angle % 360] = angle % 360; std::pair inserter = m_colorOverlayMap.insert(std::make_pair(angle % 360, colors)); if (!inserter.second) { OverlayColors tmp = colors; OverlayColors& c = inserter.first->second; c.setColorOverlayImage(tmp.getColorOverlayImage()); const std::map& colorMap = tmp.getColors(); std::map::const_iterator it = colorMap.begin(); for (; it != colorMap.end(); ++it) { c.changeColor(it->first, it->second); } } } OverlayColors* ObjectVisual::getStaticColorOverlay(int32_t angle) { if (m_colorOverlayMap.empty()) { return 0; } int32_t closestMatch = 0; return &m_colorOverlayMap[getIndexByAngle(angle, m_map, closestMatch)]; } void ObjectVisual::removeStaticColorOverlay(int32_t angle) { if (m_colorOverlayMap.empty()) { return; } int32_t closestMatch = 0; int32_t index = getIndexByAngle(angle, m_map, closestMatch); m_colorOverlayMap.erase(index); m_map.erase(index); } int32_t ObjectVisual::getClosestMatchingAngle(int32_t angle) { int32_t closestMatch = 0; getIndexByAngle(angle, m_angle2img, closestMatch); return closestMatch; } void ObjectVisual::getStaticImageAngles(std::vector& angles) { angles.clear(); type_angle2id::const_iterator i(m_angle2img.begin()); while (i != m_angle2img.end()) { angles.push_back(i->first); ++i; } } InstanceVisual::InstanceVisual(): m_transparency(0), m_visible(true), m_stackposition(0), m_instance(NULL) { } InstanceVisual* InstanceVisual::create(Instance* instance) { if (instance->getVisual()) { throw Duplicate("Instance already contains visualization"); } InstanceVisual* v = new InstanceVisual(); instance->setVisual(v); v->m_instance = instance; return v; } InstanceVisual::~InstanceVisual() { } void InstanceVisual::setTransparency(uint8_t transparency) { if (m_transparency != transparency) { m_transparency = transparency; m_instance->callOnTransparencyChange(); } } uint8_t InstanceVisual::getTransparency() { return m_transparency; } void InstanceVisual::setVisible(bool visible) { if (m_visible != visible) { m_visible = visible; m_instance->callOnVisibleChange(); } } bool InstanceVisual::isVisible() { return m_visible; } void InstanceVisual::setStackPosition(int32_t stackposition) { if (m_stackposition != stackposition) { m_stackposition = stackposition; m_instance->callOnStackPositionChange(); } } int32_t InstanceVisual::getStackPosition() { return m_stackposition; } ActionVisual::ActionVisual(): m_animation_map(), m_map() { } ActionVisual* ActionVisual::create(Action* action) { if (action->getVisual()) { throw Duplicate("Action already contains visualization"); } ActionVisual* v = new ActionVisual(); action->adoptVisual(v); return v; } ActionVisual::~ActionVisual() { } void ActionVisual::addAnimation(uint32_t angle, AnimationPtr animationptr) { m_animation_map[angle % 360] = animationptr; m_map[angle % 360] = angle % 360; } AnimationPtr ActionVisual::getAnimationByAngle(int32_t angle) { int32_t closestMatch = 0; return m_animation_map[getIndexByAngle(angle, m_map, closestMatch)]; } void ActionVisual::addAnimationOverlay(uint32_t angle, int32_t order, AnimationPtr animationptr) { std::map& orderMap = m_animationOverlayMap[angle % 360]; m_map[angle % 360] = angle % 360; orderMap.insert(std::pair(order, animationptr)); } std::map ActionVisual::getAnimationOverlay(int32_t angle) { int32_t closestMatch = 0; return m_animationOverlayMap[getIndexByAngle(angle, m_map, closestMatch)]; } void ActionVisual::removeAnimationOverlay(uint32_t angle, int32_t order) { if (m_animationOverlayMap.empty()) { return; } int32_t closestMatch = 0; AngleAnimationOverlayMap::iterator it = m_animationOverlayMap.find(getIndexByAngle(angle, m_map, closestMatch)); if (it != m_animationOverlayMap.end()) { it->second.erase(order); if (it->second.empty()) { m_animationOverlayMap.erase(it); } } } void ActionVisual::addColorOverlay(uint32_t angle, const OverlayColors& colors) { m_map[angle % 360] = angle % 360; std::pair inserter = m_colorOverlayMap.insert(std::make_pair(angle % 360, colors)); if (!inserter.second) { OverlayColors tmp = colors; OverlayColors& c = inserter.first->second; c.setColorOverlayAnimation(tmp.getColorOverlayAnimation()); const std::map& colorMap = tmp.getColors(); std::map::const_iterator it = colorMap.begin(); for (; it != colorMap.end(); ++it) { c.changeColor(it->first, it->second); } } } OverlayColors* ActionVisual::getColorOverlay(int32_t angle) { if (m_colorOverlayMap.empty()) { return 0; } int32_t closestMatch = 0; int32_t index = getIndexByAngle(angle, m_map, closestMatch); if (m_colorOverlayMap.find(index) == m_colorOverlayMap.end()) { return 0; } return &m_colorOverlayMap[getIndexByAngle(angle, m_map, closestMatch)]; } void ActionVisual::removeColorOverlay(int32_t angle) { if (m_colorOverlayMap.empty()) { return; } int32_t closestMatch = 0; int32_t index = getIndexByAngle(angle, m_map, closestMatch); m_colorOverlayMap.erase(index); } void ActionVisual::addColorOverlay(uint32_t angle, int32_t order, const OverlayColors& colors) { std::map& orderMap = m_colorAnimationOverlayMap[angle % 360]; m_map[angle % 360] = angle % 360; std::pair::iterator, bool> inserter = orderMap.insert(std::make_pair(order, colors)); if (!inserter.second) { OverlayColors tmp = colors; OverlayColors& c = inserter.first->second; c.setColorOverlayAnimation(tmp.getColorOverlayAnimation()); const std::map& colorMap = tmp.getColors(); std::map::const_iterator it = colorMap.begin(); for (; it != colorMap.end(); ++it) { c.changeColor(it->first, it->second); } } } OverlayColors* ActionVisual::getColorOverlay(int32_t angle, int32_t order) { if (m_colorAnimationOverlayMap.empty()) { return 0; } int32_t closestMatch = 0; AngleColorAnimationOverlayMap::iterator it = m_colorAnimationOverlayMap.find(getIndexByAngle(angle, m_map, closestMatch)); if (it != m_colorAnimationOverlayMap.end()) { std::map::iterator sit = it->second.find(order); if (sit != it->second.end()) { return &it->second[order]; } } return 0; } void ActionVisual::removeColorOverlay(int32_t angle, int32_t order) { if (m_colorAnimationOverlayMap.empty()) { return; } int32_t closestMatch = 0; AngleColorAnimationOverlayMap::iterator it = m_colorAnimationOverlayMap.find(getIndexByAngle(angle, m_map, closestMatch)); if (it != m_colorAnimationOverlayMap.end()) { it->second.erase(order); if (it->second.empty()) { m_colorAnimationOverlayMap.erase(it); } } } void ActionVisual::getActionImageAngles(std::vector& angles) { angles.clear(); type_angle2id::const_iterator i(m_map.begin()); while (i != m_map.end()) { angles.push_back(i->first); ++i; } } void ActionVisual::convertToOverlays(bool color) { bool colorOverlay = color && !m_colorOverlayMap.empty(); type_angle2id::const_iterator it = m_map.begin(); for (; it != m_map.end(); ++it) { addAnimationOverlay(it->first, 0, getAnimationByAngle(it->first)); if (colorOverlay) { OverlayColors* oldC = getColorOverlay(it->first); if (oldC) { OverlayColors c = OverlayColors(*oldC); addColorOverlay(it->first, 0, c); } } } } } fifengine-0.4.1/engine/core/view/visual.h000066400000000000000000000236171304641216200203010ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #ifndef FIFE_VIEW_VISUAL_H #define FIFE_VIEW_VISUAL_H // Standard C++ library includes // 3rd party library includes // FIFE includes // These includes are split up in two parts, separated by one empty line // First block: files included from the FIFE root src directory // Second block: files included from the same folder #include "model/metamodel/ivisual.h" #include "util/math/angles.h" #include "util/structures/rect.h" #include "video/animation.h" #include "video/color.h" namespace FIFE { class Object; class Instance; class Action; class Image; class OverlayColors { public: /** Constructors */ OverlayColors(); OverlayColors(ImagePtr image); OverlayColors(AnimationPtr animation); /** Destructor */ ~OverlayColors(); void setColorOverlayImage(ImagePtr image); ImagePtr getColorOverlayImage(); void setColorOverlayAnimation(AnimationPtr animation); AnimationPtr getColorOverlayAnimation(); void changeColor(const Color& source, const Color& target); const std::map& getColors(); void resetColors(); private: std::map m_colorMap; ImagePtr m_image; AnimationPtr m_animation; }; /** Base class for all 2 dimensional visual classes * Visual classes are extensions to visualize the stuff in model (e.g. instances) * The reason why its separated is to keep model view-agnostic, so that we could * have e.g. 3d, 2d and character based visualizations to the same data */ class Visual2DGfx: public IVisual { public: /** Destructor */ virtual ~Visual2DGfx(); protected: /** Constructor */ Visual2DGfx(); }; /** Object visual contains data that is needed for visualizing objects */ class ObjectVisual: public Visual2DGfx { public: /** Constructs and assigns it to the passed item */ static ObjectVisual* create(Object* object); /** Destructor */ virtual ~ObjectVisual(); /** Adds new static image with given angle (degrees) * Static images are used in case there are no actions active in the instance * There can be several static images for different angles, that are used in * case view / layer is rotated * In case there are no exact matches for current view angles, closest one is used * @param angle angle for image. 0 degrees starts from right and turns counter-clockwise * (normal math notation) @param image_index index of image to use for given degress */ void addStaticImage(uint32_t angle, int32_t image_index); /** Returns closest matching static image for given angle * @return id for static image */ int32_t getStaticImageIndexByAngle(int32_t angle); /** Adds new static color overlay with given angle (degrees). */ void addStaticColorOverlay(uint32_t angle, const OverlayColors& colors); /** Returns closest matching static color overlay for given angle * @return pointer to OverlayColor class */ OverlayColors* getStaticColorOverlay(int32_t angle); /** Removes a static color overlay with given angle (degrees). */ void removeStaticColorOverlay(int32_t angle); /** Returns closest matching image angle for given angle * @return closest matching angle */ int32_t getClosestMatchingAngle(int32_t angle); /** Returns list of available static image angles for this object */ void getStaticImageAngles(std::vector& angles); /** Indicates if there exists a color overlay. */ bool isColorOverlay() { return !m_colorOverlayMap.empty(); } private: /** Constructor */ ObjectVisual(); type_angle2id m_angle2img; typedef std::map AngleColorOverlayMap; AngleColorOverlayMap m_colorOverlayMap; type_angle2id m_map; }; /** Instance visual contains data that is needed to visualize the instance on screen */ class InstanceVisual: public Visual2DGfx { public: /** Constructs and assigns it to the passed item */ static InstanceVisual* create(Instance* instance); /** Destructor */ virtual ~InstanceVisual(); /** Sets transparency value for object to be visualized * @param transparency set the transparency */ void setTransparency(uint8_t transparency); /** Gets current transparency value (0-255) * @return current transparency value */ uint8_t getTransparency(); /** Sets visibility value for object to be visualized * @param visible is object visible or not */ void setVisible(bool visible); /** Is instance visible or not * @return is instance visible or not */ bool isVisible(); /** Sets stack position of the instance * Stack position is used to define the order in which instances residing * in the same location are drawn * @param stackposition new stack position */ void setStackPosition(int32_t stackposition); /** Gets current stack position of instance * @return current stack position */ int32_t getStackPosition(); private: /** Constructor */ InstanceVisual(); uint8_t m_transparency; bool m_visible; int32_t m_stackposition; Instance* m_instance; }; /** Action visual contains data that is needed to visualize different actions on screen */ class ActionVisual: public Visual2DGfx { public: /** Constructs and assigns it to the passed item */ static ActionVisual* create(Action* action); /** Destructor */ virtual ~ActionVisual(); /** Adds new animation with given angle (degrees) */ void addAnimation(uint32_t angle, AnimationPtr animationptr); /** Gets index to animation closest to given angle * @return animation index, -1 if no animations available */ AnimationPtr getAnimationByAngle(int32_t angle); /** Adds new animation overlay with given angle (degrees) and order */ void addAnimationOverlay(uint32_t angle, int32_t order, AnimationPtr animationptr); /** Gets map with animations closest to given angle * @return animation map */ std::map getAnimationOverlay(int32_t angle); /** Removes animation overlay with given angle (degrees) and order */ void removeAnimationOverlay(uint32_t angle, int32_t order); /** Adds new color overlay with given angle (degrees) and colors. * Note: Works only for single animations not for AnimationOverlays. (order is missing) */ void addColorOverlay(uint32_t angle, const OverlayColors& colors); /** Gets OverlayColors for given angle (degrees). * @return pointer to OverlayColors or Null */ OverlayColors* getColorOverlay(int32_t angle); /** Removes color overlay with given angle (degrees). */ void removeColorOverlay(int32_t angle); /** Adds new color overlay with given angle (degrees), order and colors. * Note: Works only for AnimationOverlays. */ void addColorOverlay(uint32_t angle, int32_t order, const OverlayColors& colors); /** Gets OverlayColors for given angle (degrees) and order. * @return pointer to OverlayColors or Null */ OverlayColors* getColorOverlay(int32_t angle, int32_t order); /** Removes color overlay with given angle (degrees) and order. */ void removeColorOverlay(int32_t angle, int32_t order); /** Returns list of available angles for this Action */ void getActionImageAngles(std::vector& angles); /** Convertes animations and optional color overlay to default animation overlay. * The default order value for both is 0. The old data remain, so if you remove the animation overlay * the old plain animations and colors be used again. */ void convertToOverlays(bool color); /** Returns true if it exists a animation overlay, otherwise false. */ bool isAnimationOverlay() { return !m_animationOverlayMap.empty(); } /** Returns true if it exists a color overlay, otherwise false. */ bool isColorOverlay() { return !m_colorOverlayMap.empty() || !m_colorAnimationOverlayMap.empty(); } private: /** Constructor */ ActionVisual(); // animations associated with this action typedef std::map AngleAnimationMap; AngleAnimationMap m_animation_map; typedef std::map > AngleAnimationOverlayMap; AngleAnimationOverlayMap m_animationOverlayMap; typedef std::map AngleColorOverlayMap; AngleColorOverlayMap m_colorOverlayMap; typedef std::map > AngleColorAnimationOverlayMap; AngleColorAnimationOverlayMap m_colorAnimationOverlayMap; //need this map to use the getIndexByAngle() function in angles.h type_angle2id m_map; }; } #endif fifengine-0.4.1/engine/core/view/visual.i000066400000000000000000000105521304641216200202740ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005-2017 by the FIFE team * * http://www.fifengine.net * * This file is part of FIFE. * * * * FIFE is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library 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 * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ %module fife %{ #include "view/visual.h" %} namespace FIFE { class OverlayColors { public: OverlayColors(); OverlayColors(ImagePtr image); OverlayColors(AnimationPtr animation); ~OverlayColors(); void setColorOverlayImage(ImagePtr image); ImagePtr getColorOverlayImage(); void setColorOverlayAnimation(AnimationPtr animation); AnimationPtr getColorOverlayAnimation(); void changeColor(const Color& source, const Color& target); const std::map& getColors(); void resetColors(); }; class Visual2DGfx { public: virtual ~Visual2DGfx(); private: Visual2DGfx(); }; %apply std::vector &OUTPUT { std::vector& angles }; class ObjectVisual: public Visual2DGfx { public: static ObjectVisual* create(Object* object); virtual ~ObjectVisual(); void addStaticImage(uint32_t angle, int32_t image_index); int32_t getStaticImageIndexByAngle(int32_t angle); void addStaticColorOverlay(uint32_t angle, const OverlayColors& colors); OverlayColors* getStaticColorOverlay(int32_t angle); void removeStaticColorOverlay(int32_t angle); int32_t getClosestMatchingAngle(int32_t angle); void getStaticImageAngles(std::vector& angles); private: ObjectVisual(); }; %template(get2dGfxVisual) Object::getVisual; %clear std::vector angles; class InstanceVisual: public Visual2DGfx { public: static InstanceVisual* create(Instance* instance); virtual ~InstanceVisual(); void setTransparency(uint8_t transparency); uint8_t getTransparency(); void setVisible(bool visible); bool isVisible(); void setStackPosition(int32_t stackposition); int32_t getStackPosition(); private: InstanceVisual(); }; %template(get2dGfxVisual) Instance::getVisual; %apply std::vector &OUTPUT { std::vector& angles }; class ActionVisual: public Visual2DGfx { public: static ActionVisual* create(Action* action); virtual ~ActionVisual(); void addAnimation(uint32_t angle, AnimationPtr animationptr); AnimationPtr getAnimationByAngle(int32_t angle); void addAnimationOverlay(uint32_t angle, int32_t order, AnimationPtr animationptr); void removeAnimationOverlay(uint32_t angle, int32_t order); std::map getAnimationOverlay(int32_t angle); void addColorOverlay(uint32_t angle, const OverlayColors& colors); OverlayColors* getColorOverlay(int32_t angle); void removeColorOverlay(int32_t angle); void addColorOverlay(uint32_t angle, int32_t order, const OverlayColors& colors); OverlayColors* getColorOverlay(int32_t angle, int32_t order); void removeColorOverlay(int32_t angle, int32_t order); void getActionImageAngles(std::vector& angles); void convertToOverlays(bool color); bool isAnimationOverlay(); bool isColorOverlay(); private: ActionVisual(); }; %template(get2dGfxVisual) Action::getVisual; } fifengine-0.4.1/engine/python/000077500000000000000000000000001304641216200162335ustar00rootroot00000000000000fifengine-0.4.1/engine/python/fife/000077500000000000000000000000001304641216200171445ustar00rootroot00000000000000fifengine-0.4.1/engine/python/fife/__init__.py000066400000000000000000000000561304641216200212560ustar00rootroot00000000000000# -*- coding: utf-8 -*- __all__ = [ 'fife' ]fifengine-0.4.1/engine/python/fife/extensions/000077500000000000000000000000001304641216200213435ustar00rootroot00000000000000fifengine-0.4.1/engine/python/fife/extensions/__init__.py000066400000000000000000000002751304641216200234600ustar00rootroot00000000000000# -*- coding: utf-8 -*- __all__ = [ 'basicapplication', 'fife_compat', 'fife_timer', 'fife_utils', 'fife_settings', 'fifelog', 'pythonize', 'savers', 'loaders', 'soundmanager' ] fifengine-0.4.1/engine/python/fife/extensions/basicapplication.py000066400000000000000000000205771304641216200252350ustar00rootroot00000000000000# -*- coding: utf-8 -*- # #################################################################### # Copyright (C) 2005-2017 by the FIFE team # http://www.fifengine.net # This file is part of FIFE. # # FIFE is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the # Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # #################################################################### """ The basic application and main loop. See the L{ApplicationBase} documentation. """ from fife import fife from fife.extensions import fifelog from fife.extensions.fife_settings import Setting class ExitEventListener(fife.IKeyListener): """ Default, rudimentary event listener. Will cause the application to quit on pressing ESC. """ def __init__(self, app): self.app = app self.engine = app.engine eventmanager = self.engine.getEventManager() #eventmanager.setNonConsumableKeys([fife.Key.ESCAPE]) fife.IKeyListener.__init__(self) eventmanager.addKeyListener(self) self.quitRequested = False def keyPressed(self, evt): keyval = evt.getKey().getValue() if keyval == fife.Key.ESCAPE: self.app.quit() def keyReleased(self, evt): pass class ApplicationBase(object): """ ApplicationBase is an extendable class that provides a basic environment for a FIFE-based client. This kind of application base does not offer GUI support. The unextended application reads in and initializes engine settings, sets up a simple event listener, and pumps the engine while listening for a quit message. Specialized applications can modify settings.py to change initial engine settings. They can provide their own event listener by overriding L{createListener}. And they can override the L{_pump} method to define runtime behavior of the application. """ def __init__(self, setting=None): if setting: self._setting = setting else: self._setting = Setting(app_name="", settings_file="./settings.xml") self.engine = fife.Engine() self.initLogging() self.loadSettings() self.engine.init() """ we are giving users a valid screen resolution option that is supported """ screen_modes = self.engine.getDeviceCaps().getSupportedScreenModes() resolutions = list(set([(mode.getWidth(), mode.getHeight()) for mode in screen_modes])) resolutions = ["{0}x{1}".format(item[0], item[1]) for item in sorted(resolutions)[1:]] self._setting.setValidResolutions(resolutions) self.quitRequested = False self.breakRequested = False self.returnValues = [] def loadSettings(self): """ Load the settings from a python file and load them into the engine. Called in the ApplicationBase constructor. """ # get finalSetting (from the xml file, or if absent the default value) self._finalSetting = self._setting.getSettingsFromFile("FIFE", self._log) engineSetting = self.engine.getSettings() engineSetting.setDefaultFontGlyphs(self._finalSetting['FontGlyphs']) engineSetting.setDefaultFontPath(self._finalSetting['Font']) engineSetting.setDefaultFontSize(self._finalSetting['DefaultFontSize']) engineSetting.setBitsPerPixel(self._finalSetting['BitsPerPixel']) engineSetting.setInitialVolume(self._finalSetting['InitialVolume']) engineSetting.setSDLRemoveFakeAlpha(self._finalSetting['SDLRemoveFakeAlpha']) engineSetting.setGLCompressImages(self._finalSetting['GLCompressImages']) engineSetting.setGLUseFramebuffer(self._finalSetting['GLUseFramebuffer']) engineSetting.setGLUseNPOT(self._finalSetting['GLUseNPOT']) engineSetting.setGLUseMipmapping(self._finalSetting['GLUseMipmapping']) engineSetting.setGLUseMonochrome(self._finalSetting['GLUseMonochrome']) engineSetting.setGLUseDepthBuffer(self._finalSetting['GLUseDepthBuffer']) engineSetting.setGLAlphaTestValue(self._finalSetting['GLAlphaTestValue']) if self._finalSetting['GLTextureFiltering'] == 'None': engineSetting.setGLTextureFiltering(fife.TEXTURE_FILTER_NONE) elif self._finalSetting['GLTextureFiltering'] == 'Bilinear': engineSetting.setGLTextureFiltering(fife.TEXTURE_FILTER_BILINEAR) elif self._finalSetting['GLTextureFiltering'] == 'Trilinear': engineSetting.setGLTextureFiltering(fife.TEXTURE_FILTER_TRILINEAR) elif self._finalSetting['GLTextureFiltering'] == 'Anisotropic': engineSetting.setGLTextureFiltering(fife.TEXTURE_FILTER_ANISOTROPIC) (width, height) = self._finalSetting['ScreenResolution'].split('x') engineSetting.setScreenWidth(int(width)) engineSetting.setScreenHeight(int(height)) engineSetting.setRenderBackend(self._finalSetting['RenderBackend']) engineSetting.setFullScreen(self._finalSetting['FullScreen']) engineSetting.setRefreshRate(self._finalSetting['RefreshRate']) engineSetting.setDisplay(self._finalSetting['Display']) engineSetting.setVSync(self._finalSetting['VSync']) engineSetting.setVideoDriver(self._finalSetting['VideoDriver']) engineSetting.setSDLDriver(self._finalSetting['RenderDriver']) engineSetting.setLightingModel(self._finalSetting['Lighting']) try: engineSetting.setColorKeyEnabled(self._finalSetting['ColorKeyEnabled']) except: pass try: engineSetting.setColorKey(self._finalSetting['ColorKey'][0],self._finalSetting['ColorKey'][1],self._finalSetting['ColorKey'][2]) except: pass try: engineSetting.setWindowTitle(self._finalSetting['WindowTitle']) engineSetting.setWindowIcon(self._finalSetting['WindowIcon']) except: pass try: engineSetting.setFrameLimitEnabled(self._finalSetting['FrameLimitEnabled']) engineSetting.setFrameLimit(self._finalSetting['FrameLimit']) except: pass try: engineSetting.setMouseSensitivity(self._finalSetting['MouseSensitivity']) except: pass try: engineSetting.setMouseAccelerationEnabled(self._finalSetting['MouseAcceleration']) except: pass def initLogging(self): """ Initialize the LogManager. """ engineSetting = self.engine.getSettings() logmodules = self._setting.get("FIFE", "LogModules", ["controller"]) #log to both the console and log file self._log = fifelog.LogManager(self.engine, self._setting.get("FIFE", "LogToPrompt", False), self._setting.get("FIFE", "LogToFile", False)) self._log.setLevelFilter(self._setting.get("FIFE", "LogLevelFilter", fife.LogManager.LEVEL_DEBUG)) if logmodules: self._log.setVisibleModules(*logmodules) def createListener(self): """ This creates a default event listener, which will just close the program after pressing ESC. You should override this method to provide your own event handling. """ return ExitEventListener(self) def run(self): """ Initialize the event listener and event loop - and start it. """ eventlistener = self.createListener() self.engine.initializePumping() retval = self.mainLoop() self.engine.finalizePumping() self.engine.destroy() return retval def mainLoop(self): """ The programs main loop. Do not override this, instead provide your own L{_pump} method. You can call this recursively, e.g. to provide synchronous Dialogs :-) and break out of the current mainLoop by calling L{breakFromMainLoop}. It will return the argument passed to L{breakFromMainLoop}. """ self.returnValues.append(None) while not self.quitRequested: try: self.engine.pump() except fife.Exception as e: print str(e) self.quitRequested = True self._pump() if self.breakRequested: self.breakRequested = False break return self.returnValues.pop() def breakFromMainLoop(self,returnValue): """ Break from the currently running L{mainLoop}. The passed argument will be returned by the mainLoop. """ self.returnValues[-1] = returnValue self.breakRequested = True def _pump(self): """ Application pump. Derived classes can specialize this for unique behavior. This is called every frame. """ def quit(self): """ Quit the application. Really! """ self.quitRequested = True fifengine-0.4.1/engine/python/fife/extensions/cegui/000077500000000000000000000000001304641216200224375ustar00rootroot00000000000000fifengine-0.4.1/engine/python/fife/extensions/cegui/__init__.py000066400000000000000000000000021304641216200245400ustar00rootroot00000000000000 fifengine-0.4.1/engine/python/fife/extensions/cegui/ceguibasicapplication.py000066400000000000000000000113131304641216200273320ustar00rootroot00000000000000# -*- coding: utf-8 -*- # #################################################################### # Copyright (C) 2005-2017 by the FIFE team # http://www.fifengine.net # This file is part of FIFE. # # FIFE is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the # Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # #################################################################### """ The basic application and main loop. See the L{ApplicationBase} documentation. """ from fife import fife from fife.extensions.basicapplication import ApplicationBase import PyCEGUI class CEGUIEventListener(fife.IKeyListener, fife.ICommandListener): """ Default, rudimentary event listener. Will cause the application to quit on pressing ESC. """ def __init__(self, app): self.app = app self.engine = app.engine eventmanager = self.engine.getEventManager() #eventmanager.setNonConsumableKeys([fife.Key.ESCAPE]) fife.IKeyListener.__init__(self) eventmanager.addKeyListener(self) fife.ICommandListener.__init__(self) eventmanager.addCommandListener(self) self.quitrequested = False self.debuggeractive = False def keyPressed(self, evt): keyval = evt.getKey().getValue() if keyval == fife.Key.ESCAPE: self.app.quit() def keyReleased(self, evt): pass def onCommand(self, command): if command.getCommandType() == fife.CMD_QUIT_GAME: self.quitrequested = True command.consume() DEFAULT_GUI_DIR = "gui/" class CEGUIApplicationBase(ApplicationBase): def __init__(self, setting=None): super(CEGUIApplicationBase, self).__init__(setting) self._initGuiManager() self._loadCEGuiSettings() def _initGuiManager(self): settings = self.engine.getSettings() major_v, minor_v = map(int, PyCEGUI.Version__.split('.')[:2]) #For CEGUI versions lower than 0.8.0 we use the old CEGuiManager if major_v == 0 and minor_v <= 7: guimanager = fife.CEGuiManager() else: guimanager = fife.CEGuiManager() #transfer ownership to the engine guimanager.thisown = 0 self.guimanager = guimanager self.engine.setGuiManager(self.guimanager) self.engine.getEventManager().addSdlEventListener(self.guimanager) def _loadCEGuiSettings(self): self._loadResourcePaths() def _loadResourcePaths(self): resourceprovider = PyCEGUI.System.getSingleton().getResourceProvider() major_v, minor_v = map(int, PyCEGUI.Version__.split('.')[:2]) if major_v == 0 and minor_v <= 7: resourcetypemap = { "schemes" : PyCEGUI.Scheme.setDefaultResourceGroup, "imagesets" : PyCEGUI.Imageset.setDefaultResourceGroup, "fonts" : PyCEGUI.Font.setDefaultResourceGroup, "layouts" : PyCEGUI.WindowManager.setDefaultResourceGroup, "looksnfeels" : PyCEGUI.WidgetLookManager.setDefaultResourceGroup, } else: resourcetypemap = { "schemes" : PyCEGUI.Scheme.setDefaultResourceGroup, "imagesets" : PyCEGUI.ImageManager.setImagesetDefaultResourceGroup, "fonts" : PyCEGUI.Font.setDefaultResourceGroup, "layouts" : PyCEGUI.WindowManager.setDefaultResourceGroup, "looksnfeels" : PyCEGUI.WidgetLookManager.setDefaultResourceGroup, } if not self._setting: for restype, res_setfunc in resourcetypemap.iteritems(): resourceprovider.setResourceGroupDirectory(restype, DEFAULT_GUI_DIR + restype) res_setfunc(restype) else: for restype, res_setfunc in resourcetypemap.iteritems(): path = self._setting.get("CEGUI", restype) if path: resourceprovider.setResourceGroupDirectory(restype, path) res_setfunc(restype) else: #set default path resourceprovider.setResourceGroupDirectory(restype, DEFAULT_GUI_DIR + restype) res_setfunc(restype) parser = PyCEGUI.System.getSingleton().getXMLParser() if parser.isPropertyPresent("SchemaDefaultResourceGroup"): path = self._setting.get("CEGUI", "schemas") if path: rp.setResourceGroupDirectory("schemas", path) else: rp.setResourceGroupDirectory("schemas", DEFAULT_GUI_DIR + "schemas") parser.setProperty("SchemaDefaultResourceGroup", "schemas") def createListener(self): self._listener = CEGUIEventListener(self) return self._listener fifengine-0.4.1/engine/python/fife/extensions/fife_compat.py000066400000000000000000000052161304641216200241750ustar00rootroot00000000000000# -*- coding: utf-8 -*- # #################################################################### # Copyright (C) 2005-2017 by the FIFE team # http://www.fifengine.net # This file is part of FIFE. # # FIFE is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the # Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # #################################################################### """ FIFE Backwards Combatibility Layer ================================== This module can be imported if you want to run code that wasn't adapted to API changes in FIFE. 2008.1 ------ - Animation.addFrame now expects a fife.ResourcePtr instead of an fife.Image - Pool.getIndex is just an alias for Pool.addResourceFromFile. - EventManager.setNonConsumableKeys is superseeded by EventManager.setKeyFilter """ from fife import fife # Utility functions def deprecated(revision,message): print "fife_compat: Deprecation warning - See revision %d " % revision print " - ",message def this_is_deprecated(func,revision=0,message=None): if message is None: message = repr(func) + " is deprecated." def wrapped_func(*args,**kwargs): deprecated(revision,message) return func(*args,**kwargs) return wrapped_func def _compat_NonConsumableKeys(): class CompatKeyFilter(fife.IKeyFilter): def __init__(self, keys): fife.IKeyFilter.__init__(self) self.keys = keys def isFiltered(self, event): return event.getKey().getValue() in self.keys def _setNonConsumableKeys(self,keys): deprecated(2636, "Write an IKeyFilter instead of using EventManager.setNonConsumableKeys.\n" + "You probably don't need it anyway") self.compat_keyfilter = CompatKeyFilter(keys) self.compat_keyfilter.__disown__() self.setKeyFilter(self.compat_keyfilter) def _getNonConsumableKeys(self,keys): deprecated(2636, "Write an IKeyFilter instead of using EventManager.getNonConsumableKeys.") return self.compat_keyfilter.keys fife.EventManager.setNonConsumableKeys = _setNonConsumableKeys fife.EventManager.getNonConsumableKeys = _getNonConsumableKeys _compat_NonConsumableKeys() fifengine-0.4.1/engine/python/fife/extensions/fife_settings.py000066400000000000000000000527201304641216200245540ustar00rootroot00000000000000# -*- coding: utf-8 -*- # #################################################################### # Copyright (C) 2005-2017 by the FIFE team # http://www.fifengine.net # This file is part of FIFE. # # FIFE is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the # Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # #################################################################### """ Settings ================================== This module provides a nice framework for loading and saving game settings. It is by no means complete but it does provide a good starting point. """ import shutil import os from StringIO import StringIO from fife.extensions import fifelog from fife.extensions.fife_utils import getUserDataDirectory from fife.extensions.serializers.simplexml import SimpleXMLSerializer FIFE_MODULE = "FIFE" class Setting(object): """ This class manages loading and saving of game settings. Usage:: from fife.extensions.fife_settings import Setting settings = Setting(app_name="myapp") screen_width = settings.get("FIFE", "ScreenWidth", 1024) screen_height = settings.get("FIFE", "ScreenHeight", 768) """ def __init__(self, app_name="", settings_file="", default_settings_file= "settings-dist.xml", copy_dist=True, serializer=None): """ Initializes the Setting object. @param app_name: The applications name. If this parameter is provided alone it will try to read the settings file from the users home directory. In windows this will be something like: C:\Documents and Settings\user\Application Data\fife @type app_name: C{string} @param settings_file: The name of the settings file. If this parameter is provided it will look for the setting file as you specify it, first looking in the working directory. It will NOT look in the users home directory. @type settings_file: C{string} @param default_settings_file: The name of the default settings file. If the settings_file does not exist this file will be copied into the place of the settings_file. This file must exist in the root directory of your project! @type default_settings_file: C{string} @param copy_dist: Copies the default settings file to the settings_file location. If this is False it will create a new empty setting file. @param serializer: Overrides the default XML serializer @type serializer: C{SimpleSerializer} """ self._app_name = app_name self._settings_file = settings_file self._default_settings_file = default_settings_file # Holds SettingEntries self._entries = {} if self._settings_file == "": self._settings_file = "settings.xml" self._appdata = getUserDataDirectory("fife", self._app_name) else: self._appdata = os.path.dirname(self._settings_file) self._settings_file = os.path.basename(self._settings_file) if not os.path.exists(os.path.join(self._appdata, self._settings_file)): if os.path.exists(self._default_settings_file) and copy_dist: shutil.copyfile(self._default_settings_file, os.path.join(self._appdata, self._settings_file)) # valid values possible for the engineSettings self._validSetting = {} self._validSetting['FIFE'] = { 'FullScreen':[True,False], 'RefreshRate':[0,200], 'Display':[0,9], 'VSync':[True,False], 'PychanDebug':[True,False] , 'ProfilingOn':[True,False], 'SDLRemoveFakeAlpha':[True,False], 'GLCompressImages':[False,True], 'GLUseFramebuffer':[False,True], 'GLUseNPOT':[False,True], 'GLUseMipmapping':[False,True], 'GLTextureFiltering':['None', 'Bilinear', 'Trilinear', 'Anisotropic'], 'GLUseMonochrome':[False,True], 'GLUseDepthBuffer':[False,True], 'GLAlphaTestValue':[0.0,1.0], 'RenderBackend':['OpenGL', 'SDL'], 'ScreenResolution':['640x480', '800x600', '1024x600', '1024x768', '1280x768', '1280x800', '1280x960', '1280x1024', '1366x768', '1440x900', '1600x900', '1600x1200', '1680x1050', '1920x1080', '1920x1200'], 'BitsPerPixel':[0,16,24,32], 'InitialVolume':[0.0,10.0], 'WindowTitle':"", 'WindowIcon':"", 'Font':"", 'FontGlyphs':"", 'DefaultFontSize':"", 'Lighting':[0,1], 'ColorKeyEnabled':[True,False], 'ColorKey':['a','b','c'], 'VideoDriver':"", 'RenderDriver':"", 'PlaySounds':[True,False], 'LogToFile':[True,False], 'LogToPrompt':[True,False], 'LogLevelFilter':[0,1,2,3], 'LogModules':['all', 'controller','script','video','audio','loaders','vfs','pool','view','model','metamodel','event_channel','xml'], 'FrameLimitEnabled':[True,False], 'FrameLimit':[0], 'MouseSensitivity':[0.0], 'MouseAcceleration':[True,False] } glyphDft = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,!?-+/():;%&`'*#=[]\\\"" # we at this point assume default values are final values for engineSettings self._defaultSetting = {} self._defaultSetting['FIFE'] = { 'FullScreen':False, 'RefreshRate':60, 'Display':0, 'VSync':False, 'PychanDebug':False, 'ProfilingOn':False, 'SDLRemoveFakeAlpha':False, 'GLCompressImages':False, 'GLUseFramebuffer':True, 'GLUseNPOT':True, 'GLUseMipmapping':False, 'GLTextureFiltering':'None', 'GLUseMonochrome':False, 'GLUseDepthBuffer':False, 'GLAlphaTestValue':0.3, 'RenderBackend':'OpenGL', 'ScreenResolution':"1024x768", 'BitsPerPixel':0, 'InitialVolume':5.0, 'WindowTitle':"", 'WindowIcon':"", 'Font':"", 'FontGlyphs':glyphDft, 'DefaultFontSize':12, 'Lighting':0, 'ColorKeyEnabled':False, 'ColorKey':[255,0,255], 'VideoDriver':"", 'RenderDriver':"", 'PlaySounds':True, 'LogToFile':False, 'LogToPrompt':False,'LogLevelFilter':0, 'LogModules':['controller','script'], 'FrameLimitEnabled':False, 'FrameLimit':60, 'MouseSensitivity':0.0, 'MouseAcceleration':False } # has the settings file been read self._readSettingsCompleted = {} # the global dictionary from which we will read after self._readSettingsCompleted is True self._settingsFromFile = {} # the logger needed to write in log file. It will be initialized in this file when self.getSettings() # method is called by logger self._logger = None #default settings self._resolutions = self._validSetting['FIFE']['ScreenResolution'] self._renderbackends = self._validSetting['FIFE']['RenderBackend'] self._lightingmodels = self._validSetting['FIFE']['Lighting'] #Used to stylize the options gui self._gui_style = "default" #Initialize the serializer if serializer: self._serializer = serializer else: self._serializer = SimpleXMLSerializer() self.initSerializer() # if there's no FIFE module assume the settings file is broken # and replace with default settings file if "FIFE" not in self._serializer.getModuleNameList(): self.setDefaults() # Get all modules and initialize reading of them from xml file as false self._allModules = self._serializer.getModuleNameList() # print("All Module Names:",self._allModules) for module in self._allModules: self._readSettingsCompleted[module] = False self._initDefaultSettingEntries() #self.setOneSetting('FIFE','Font','fonts/FreeSans.ttf',False) #print self.getSettingsFromFile('unknownhorizons') # set all Settings in either validSetting or defaultSetting def setAllSettings(self,module,settings,validSetting = True): if validSetting: self._validSetting[module] = settings else: self._defaultSetting[module] = settings # set an entry in the validSetting or defaultSetting dictionary def setOneSetting(self,module,name,value,validSetting = True): if validSetting: self._validSetting[module][name] = value else: self._defaultSetting[module][name] = value # get all the Settings(either validSetting or defaultSetting) def getAllSettings(self,module,validSetting = True): if validSetting: return self._validSetting[module] else: return self._defaultSetting[module] # get an entry from either validSetting or defaultSetting def getOneSetting(self,module,name,validSetting = True): if validSetting: return self._validSetting[module][name] else: return self._defaultSetting[module][name] # sets valid resolution options in the settings->Resolution def setValidResolutions(self, options): if options: self._resolutions = options self.createAndAddEntry(FIFE_MODULE, "ScreenResolution", initialdata = self._resolutions, requiresrestart=True) def initSerializer(self): self._serializer.load(os.path.join(self._appdata, self._settings_file)) def _initDefaultSettingEntries(self): """Initializes the default fife setting entries. Not to be called from outside this class.""" self.createAndAddEntry(FIFE_MODULE, "PlaySounds", requiresrestart=True) self.createAndAddEntry(FIFE_MODULE, "FullScreen", requiresrestart=True) self.createAndAddEntry(FIFE_MODULE, "ScreenResolution", initialdata = self._resolutions, requiresrestart=True) self.createAndAddEntry(FIFE_MODULE, "RenderBackend", initialdata = self._renderbackends, requiresrestart=True) def createAndAddEntry(self, module, name, applyfunction=None, initialdata=None, requiresrestart=False): """" @param module: The Setting module this Entry belongs to @type module: C{String} @param name: The Setting's name @type name: C{String} @param applyfunction: function that makes the changes when the Setting is saved @type applyfunction: C{function} @param initialdata: If the widget supports the setInitialData() function this can be used to set the initial data @type initialdata: C{String} or C{Boolean} @param requiresrestart: Whether or not the changing of this setting requires a restart @type requiresrestart: C{Boolean} """ entry = SettingEntry(module, name, applyfunction, initialdata, requiresrestart) self.addEntry(entry) def addEntry(self, entry): """Adds a new C{SettingEntry} to the Settting @param entry: A new SettingEntry that is to be added @type entry: C{SettingEntry} """ if entry.module not in self._entries: self._entries[entry.module] = {} self._entries[entry.module][entry.name] = entry """ # Make sure the new entry is available if self.get(entry.module, entry.name) is None: print "Updating", self._settings_file, "to the default, it is missing the entry:"\ , entry.name ,"for module", entry.module #self.setDefaults() if self.get(entry.module, entry.name) is None: print "WARNING:", entry.module, ":", entry.name, "still not found!" """ def saveSettings(self, filename=""): """ Writes the settings to the settings file @param filename: Specifies the file to save the settings to. If it is not specified the original settings file is used. @type filename: C{string} """ if self._serializer: if filename == "": self._serializer.save(os.path.join(self._appdata, self._settings_file)) else: self._serializer.save(filename) # get all the settings of a module name module def getSettingsFromFile(self, module, logger=None): if self._serializer: self._logger = logger modules = self._serializer.getModuleNameList() self._settingsFromFile[module] = self._serializer.getAllSettings(module) if self._logger: self._logger.log_log("Loading Settings From File ...") if self._settingsFromFile[module] is not None: self._readSettingsCompleted[module] = True # we need validation for the module FIFE only if module is not "FIFE": return self._settingsFromFile[module] """ Now we have all the settings we needed. We have to validate the settings. Applicable for module FIFE only """ for name in self._settingsFromFile[module]: # if the setting name is known, so that it is # both in self._settingsFromFile and validSetting if name in self._validSetting[module]: e_value = self._settingsFromFile[module][name] if name == "InitialVolume": if e_value >= self._validSetting[module][name][0] and e_value <= self._validSetting[module][name][1]: self._settingsFromFile[module][name] = e_value else: if self._logger: self._logger.log_log("InitalVolume must have a value between 0.0 and 10.0") elif name == "GLAlphaTestValue": if e_value >= self._validSetting[module][name][0] and e_value <= self._validSetting[module][name][1]: self._settingsFromFile[module][name] = e_value else: if self._logger: self._logger.log_log("GLAlphaTestValue must have a value between 0.0 and 1.0") elif name == "ColorKey": e_value = e_value.split(',') if int(e_value[0]) in range(0,256) and int(e_value[1]) in range(0,256) and int(e_value[2]) in range(0,256): self._settingsFromFile[name] = [int(e_value[0]),int(e_value[1]),int(e_value[2])]; else: if self._logger: self._logger.log_log("ColorKey values must be within 0 and 255. Setting to Default Value.") elif name == "ScreenResolution": temp = e_value.split('x') if len(temp) == 2: self._settingsFromFile[module][name]=e_value else: if self._logger: self._logger.log_log("Invalid Screen Resolution value. We expect two integer separated by x") elif len(self._validSetting[module][name]) == 0: self._settingsFromFile[module][name] = e_value elif name == "LogModules": for checking_element in e_value: module_valid = False for base_element in self._validSetting[module][name]: # checking_element is valid if checking_element == base_element: module_valid = True already_in = False for element in self._settingsFromFile[module][name]: if element == checking_element: already_in = True if already_in == False: self._settingsFromFile[module][name].append(checking_element) if module_valid == False: if self._logger: self._logger.log_log(checking_element +" is not a valid logModule") elif name == "FrameLimit": if e_value > 0: self._settingsFromFile[module][name] = e_value else: if self._logger: self._logger.log_log(e_value + " is not a valid FrameLimit setting. You must specify a positive integer!") elif name == "MouseSensitivity": self._settingsFromFile[module][name] = e_value elif name == "MouseAcceleration": self._settingsFromFile[module][name] = e_value elif name in ("SDLRemoveFakeAlpha", "LogToPrompt", "LogToFile"): if type(e_value) == int: try: e_value = (False, True)[e_value] except IndexError: self._logger.log_warn("Invalid int-value for %s. Defaulted to False!"%name) e_value = False self._logger.log_warn("Use of type int for %s is deprecated. Use bool instead!"%name) self._settingsFromFile[module][name] = e_value else: if isinstance(self._settingsFromFile[module][name],list) == True or isinstance(self._settingsFromFile[module][name],dict) == True: valid = False for value in self._validSetting[module][name]: if value == e_value: valid = True self._settingsFromFile[module][name] = e_value; if valid == False: if self._logger: self._logger.log_log("Setting " + name + " got invalid value. Setting to Default.") else: self._settingsFromFile[module][name] = e_value # name is unknown else: if self._logger: self._logger.log_log("Setting "+ name + " is unknown") if self._logger: self._logger.log_log("Settings Loaded ...") """ Upto this point we have validated all the settings that are in settings.xml file. But, what if a setting is valid and still it is not present in the settings.xml file. For this, we should give them the default Values that are in defaultSetting. """ for name in self._defaultSetting[module]: if name not in self._settingsFromFile[module]: self._settingsFromFile[module][name] = self._defaultSetting[module][name] return self._settingsFromFile[module] else: return None def get(self, module, name, defaultValue=None): """ Gets the value of a specified setting @param module: Name of the module to get the setting from @param name: Setting name @param defaultValue: Specifies the default value to return if the setting is not found @type defaultValue: C{str} or C{unicode} or C{int} or C{float} or C{bool} or C{list} or C{dict} """ if self._serializer: if module is "FIFE": # check whether getAllSettings has been called already if self._readSettingsCompleted[module] is not True: value = self._serializer.get(module, name, defaultValue) if value is not None: return value else: if name in self._defaultSetting[module]: return self._defaultSetting[module][name] else: raise Exception(str(name) + ' is neither in settings.xml nor it has a default value set') else: if name in self._settingsFromFile[module]: return self._settingsFromFile[module][name] else: raise Exception(str(name) + ' is neither in settings.xml nor it has a default value set') else: return self._serializer.get(module, name, defaultValue) else: """ serializer not set, reading from default value """ if name in self._defaultSetting: return self._defaultSetting[module][name] else: raise Exception(str(name) + ' is neither in settings.xml nor it has a default value set') def set(self, module, name, value, extra_attrs={}): """ Sets a setting to specified value. @param module: Module where the setting should be set @param name: Name of setting @param value: Value to assign to setting @type value: C{str} or C{unicode} or C{int} or C{float} or C{bool} or C{list} or C{dict} @param extra_attrs: Extra attributes to be stored in the XML-file @type extra_attrs: C{dict} """ #update the setting cache if module in self._settingsFromFile: self._settingsFromFile[module][name] = value else: self._settingsFromFile[module] = { name: value } if self._serializer: self._serializer.set(module, name, value, extra_attrs) def remove(self, module, name): """ Removes a variable @param module: Module where the variable should be set @param name: Name of the variable """ #update the setting cache if module in self._settingsFromFile: del self._settingsFromFile[module][name] if self._serializer: self._serializer.remove(module, name) def setAvailableScreenResolutions(self, reslist): """ A list of valid default screen resolutions. This should be called once right after you instantiate Settings. Valid screen resolutions must be strings in the form of: WIDTHxHEIGHT Example: settings.setAvailableScreenResolutions(["800x600", "1024x768"]) """ self._resolutions = reslist def setDefaults(self): """ Overwrites the setting file with the default settings file. """ shutil.copyfile(self._default_settings_file, os.path.join(self._appdata, self._settings_file)) self.changesRequireRestart = True self.initSerializer() def _getEntries(self): return self._entries def _setEntries(self, entries): self._entries = entries def _getSerializer(self): return self._serializer entries = property(_getEntries, _setEntries) serializer = property(_getSerializer) class SettingEntry(object): def __init__(self, module, name, applyfunction=None, initialdata=None, requiresrestart=False): """ @param module: The Setting module this Entry belongs to @type module: C{String} @param name: The Setting's name @type name: C{String} @param applyfunction: function that makes the changes when the Setting is saved @type applyfunction: C{function} @param initialdata: If the widget supports the setInitialData() function this can be used to set the initial data @type initialdata: C{String} or C{Boolean} @param requiresrestart: Whether or not the changing of this setting requires a restart @type requiresrestart: C{Boolean} """ self._module = module self._name = name self._requiresrestart = requiresrestart self._initialdata = initialdata self._applyfunction = applyfunction def onApply(self, data): """Implement actions that need to be taken when the setting is changed here. """ if self._applyfunction is not None: self._applyfunction(data) def _getModule(self): return self._module def _setModule(self, module): self._module = module def _getName(self): return self._name def _setName(self, name): self._name = name def _getRequiresRestart(self): return self._requiresrestart def _setRequiresRestart(self, requiresrestart): self._requiresrestart = requiresrestart def _getInitialData(self): return self._initialdata def _setInitialData(self, initialdata): self._initialdata = initialdata def _getApplyFunction(self): return self._applyfunction def _setApplyFunction(self, applyfunction): self._applyfunction = applyfunction module = property(_getModule, _setModule) name = property(_getName, _setName) requiresrestart = property(_getRequiresRestart, _setRequiresRestart) initialdata = property(_getInitialData, _setInitialData) applyfunction = property(_getApplyFunction, _setApplyFunction) def __str__(self): return "SettingEntry: " + self.name + " Module: " + self.module + \ " requiresrestart: " + str(self.requiresrestart) + \ " initialdata: " + str(self.initialdata) fifengine-0.4.1/engine/python/fife/extensions/fife_timer.py000066400000000000000000000136411304641216200240330ustar00rootroot00000000000000# -*- coding: utf-8 -*- # #################################################################### # Copyright (C) 2005-2017 by the FIFE team # http://www.fifengine.net # This file is part of FIFE. # # FIFE is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the # Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # #################################################################### """ Convenient timers ================= Usage:: import fife.extensions.fife_timer fife_timer.init( my_fife_engine.getTimeManager() ) def spam(): print "SPAM SPAM ", repeater = fife_timer.repeatCall(500,spam) def stop_spam(): repeater.stop() print "BACON EGGS AND SPAM" delayed = fife_timer.delayCall(50000,stop_spam) """ from fife import fife #global time manager _manager = None def init(timemanager): """ Initialize timers. @param timemanager: A L{fife.TimeManager} as retuned by L{fife.Engine.getTimeManager}. """ global _manager _manager = timemanager class Timer(fife.TimeEvent): """ Timer This class wraps the fife.TimeEvent class to make it easily usable from Python It allows for a TimeEvent to be executed once or multiple times. Remember FIFE::TimeManager does NOT delete the timer so make sure you keep a reference to this timer to ensure python doesnt delete the timer prematurely. """ def __init__(self,delay=0,callback=None,repeat=0): """ @param delay: The delay in milliseconds to execute the callback @param callback: The function to execute when the time delay has passed @param repeat: The number of times to execute the callback. 1=once, 0=forever """ super(Timer,self).__init__(delay) self._active = False self._callback = callback self._manager = _manager self.setPeriod(delay) self._repeat = repeat self._executed = 0 def start(self): """ Call this to start the timer. This registers the timer with the time manager. The time manger then calls the timers updateEvent() function when the delay time has passed. """ if self._active: return self._active = True self._executed = 0 self.setLastUpdateTime(self._manager.getTime()) self._manager.registerEvent(self) def stop(self): """ Stops the timer This unregisters the timer from the time manager. """ if not self._active: return self._active = False self._manager.unregisterEvent(self) def updateEvent(self,delta): """ This is called by FIFE::TimeManager when the delay has passed. Should not be called directly. """ if self._repeat != 0: self._executed += 1 if self._executed >= self._repeat: self.stop() if callable(self._callback): self._callback() def _setDelay(self, delay): """ Sets how many milliseconds to wait before executing the callback. The timer must not be active to change this value @param delay: Number of milliseconds to wait before executing the callback. @type delay: C{integer} """ if not self._active: self.setPeriod(delay) def _getDelay(self): """ Returns the number of milliseconds to wait before executing the callback. @return: Number of milliseconds. @rtype: C{integer} """ return self.getPeriod() def _setCallback(self, callback): self._callback = callback def _getCallback(self): return self._callback def _setRepeat(self, repeat): """ Sets how many times the timer should be repeated. The timer must not be active to change it's repeat value. @param repeat: Number of times to repeat the timer. 0=forever, 1=once. @type repeat: C{integer} """ if not self._active: self._repeat = repeat def _getRepeat(self, repeat): """ Returns the number of times the timer will be executed. @return: Number of times the timer will be executed. @rtype: C{integer} """ return self._repeat def _getActive(self): """ Returns True if the timer is active and False if it is not. @return: True if timer is active, False if it is not. @rtype: C{boolean} """ return self._active def _getNumExecuted(self): """ Returns the number of times the timer has been executed @return: Number of times the timer has been executed @rtype: C{integer} """ return self._executed delay = property(_getDelay, _setDelay) callback = property(_getCallback, _setCallback) repeat = property(_getRepeat, _setRepeat) active = property(_getActive) numexecuted = property(_getNumExecuted) def delayCall(delay,callback): """ Delay a function call by a number of milliseconds. Remember to keep a reference to the timer this function returns. If you do not python will delete the timer prematurely which may case a segfault. @param delay: Delay in milliseconds. @param callback: The function to call. @return: The timer. @rtype: L{Timer} """ timer = Timer(delay, callback, 1) timer.start() return timer def repeatCall(period,callback): """ Repeat a function call. The call is repeated until the timer is stopped. Remember to keep a reference to the timer this function returns. If you do not python will delete the timer prematurely which may case a segfault. @param period: Period between calls in milliseconds. @param callback: The function to call. @return: The timer. @rtype: L{Timer} """ timer = Timer(period, callback, 0) timer.start() return timer __all__ = ['init','Timer','delayCall','repeatCall'] fifengine-0.4.1/engine/python/fife/extensions/fife_utils.py000066400000000000000000000063131304641216200240510ustar00rootroot00000000000000# -*- coding: utf-8 -*- # #################################################################### # Copyright (C) 2005-2017 by the FIFE team # http://www.fifengine.net # This file is part of FIFE. # # FIFE is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the # Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # #################################################################### """ This file contains some functions that may be useful """ import fife, re, sys, os __all__ = ['is_fife_exc', 'getUserDataDirectory'] _exc_re = re.compile(r'_\[(\w+)\]_') def is_fife_exc(type, original_exc): """ Checks if an exception is of given type. Example:: try: obj = self.model.createObject(str(id), str(nspace), parent) except RuntimeError, e: if is_fife_exc(fife.NameClash, e): raise NameClash('Tried to create already existing object, ignoring') raise """ ret = False m = _exc_re.search(str(original_exc)) if m: if m.group(1) == type('').getTypeStr(): ret = True return ret def getUserDataDirectory(vendor, appname): """ Gets the proper location to save configuration and data files, depending on depending on OS. Windows: %APPDATA%\vendor\appname Mac: ~/Library/Application Support/vendor/appname Linux/Unix/Other: ~/.vendor/appname See: Brian Vanderburg II @ http://mail.python.org/pipermail/python-list/2008-May/660779.html """ dir = None # WINDOWS if os.name == "nt": # Try env APPDATA or USERPROFILE or HOMEDRIVE/HOMEPATH if "APPDATA" in os.environ: dir = os.environ["APPDATA"] if ((dir is None) or (not os.path.isdir(dir))) and ("USERPROFILE" in os.environ): dir = os.environ["USERPROFILE"] if os.path.isdir(os.path.join(dir, "Application Data")): dir = os.path.join(dir, "Application Data") if ((dir is None) or (not os.path.isdir(dir))) and ("HOMEDRIVE" in os.environ) and ("HOMEPATH" in os.environ): dir = os.environ["HOMEDRIVE"] + os.environ["HOMEPATH"] if os.path.isdir(os.path.join(dir, "Application Data")): dir = os.path.join(dir, "Application Data") if (dir is None) or (not os.path.isdir(dir)): dir = os.path.expanduser("~") # On windows, add vendor and app name dir = os.path.join(dir, vendor, appname) # Mac elif os.name == "mac": # ?? may not be entirely correct dir = os.path.expanduser("~") dir = os.path.join(dir, "Library", "Application Support") dir = os.path.join(dir, vendor, appname) # Unix/Linux/all others if dir is None: dir = os.path.expanduser("~") dir = os.path.join(dir, "."+vendor, appname) # Create vendor/appname folder if it doesn't exist if not os.path.isdir(dir): os.makedirs(dir) return dir fifengine-0.4.1/engine/python/fife/extensions/fifelog.py000066400000000000000000000103671304641216200233370ustar00rootroot00000000000000# -*- coding: utf-8 -*- # #################################################################### # Copyright (C) 2005-2017 by the FIFE team # http://www.fifengine.net # This file is part of FIFE. # # FIFE is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the # Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # #################################################################### from fife import fife class LogManager(object): """ Log manager provides convenient apis to access engine logging functionality. You can set log targets individually (prompt, file). You can also adjust things like visible modules through log manager. """ def __init__(self, engine, promptlog=True, filelog=False): """ Constructs new log manager @param engine: Engine to hook into @param promptlog: If true, logs to prompt @param filelog: If true, logs to file (fife.log) """ self.engine = engine self.lm = engine.getLogManager() self.lm.setLogToPrompt(promptlog) self.lm.setLogToFile(filelog) self.mod2name = {} for k, v in fife.__dict__.items(): if k.startswith('LM_') and k not in ('LM_CORE', 'LM_MODULE_MAX'): self.mod2name[v] = self.lm.getModuleName(v) self.name2mod = dict([(v.lower(), k) for k, v in self.mod2name.items()]) def addVisibleModules(self, *names): """ Adds modules that are visible in logs. By default, all modules are disabled. Does not remove previously visible modules @param names: module names to set visible @see: modules.h file for available modules in the engine """ names = [n.lower() for n in names] if 'all' in names: for k in self.mod2name.keys(): self.lm.addVisibleModule(k) else: for m in names: try: self.lm.addVisibleModule(self.name2mod[m]) except KeyError: print 'Tried to enable non-existing log module "%s"' % m def removeVisibleModules(self, *names): """ Removes modules that are visible in logs. By default, all modules are disabled. @param names: module names to set invisible @see: addVisibleModules """ names = [n.lower() for n in names] if 'all' in names: for k in self.mod2name.keys(): self.lm.removeVisibleModule(k) else: for m in names: self.lm.removeVisibleModule(self.name2mod[m]) def getVisibleModules(self): """ Gets currently visible modules @see: addVisibleModules """ mods = [] for k in self.mod2name.keys(): if self.lm.isVisible(k): mods.append(self.mod2name[k]) def setVisibleModules(self, *names): """ Sets visible modules. Clears previously set modules. @param names: module names to set visible @see: addVisibleModules """ self.lm.clearVisibleModules() self.addVisibleModules(*names) def setLevelFilter(self, fltr): """ Sets the minimum log level to view. @param fltr: The filter level Valid values: - L{fife.LogManager.LEVEL_DEBUG} - L{fife.LogManager.LEVEL_LOG} - L{fife.LogManager.LEVEL_WARN} - L{fife.LogManager.LEVEL_ERROR} """ self.lm.setLevelFilter(fltr) def setLogToPrompt(self, promptlog): return self.lm.setLogToPrompt(promptlog) def getLogToPrompt(self): return self.lm.isLogToPrompt() logToPrompt = property(getLogToPrompt, setLogToPrompt) def setLogToFile(self, filelog): return self.lm.setLogToFile(filelog) def getLogToFile(self): return self.lm.isLogToFile() logToFile = property(getLogToFile, setLogToFile) def log_debug(self, message): self.lm.log(0, self.name2mod["script"], message) def log_log(self, message): self.lm.log(1, self.name2mod["script"], message) def log_warn(self, message): self.lm.log(2, self.name2mod["script"], message) def log_error(self, message): self.lm.log(3, self.name2mod["script"], message) fifengine-0.4.1/engine/python/fife/extensions/librocket/000077500000000000000000000000001304641216200233215ustar00rootroot00000000000000fifengine-0.4.1/engine/python/fife/extensions/librocket/__init__.py000066400000000000000000000000001304641216200254200ustar00rootroot00000000000000fifengine-0.4.1/engine/python/fife/extensions/librocket/rocketbasicapplication.py000066400000000000000000000067331304641216200304210ustar00rootroot00000000000000# -*- coding: utf-8 -*- # #################################################################### # Copyright (C) 2005-2017 by the FIFE team # http://www.fifengine.net # This file is part of FIFE. # # FIFE is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the # Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # #################################################################### """ The basic application and main loop. See the L{ApplicationBase} documentation. """ from fife import fife from fife.extensions.basicapplication import ApplicationBase import rocket class RocketEventListener(fife.IKeyListener, fife.ICommandListener): """ Default, rudimentary event listener. Will cause the application to quit on pressing ESC. """ def __init__(self, app): self.app = app self.engine = app.engine eventmanager = self.engine.getEventManager() #eventmanager.setNonConsumableKeys([fife.Key.ESCAPE]) fife.IKeyListener.__init__(self) eventmanager.addKeyListener(self) fife.ICommandListener.__init__(self) eventmanager.addCommandListener(self) self.quitrequested = False self.debuggeractive = False def keyPressed(self, evt): keyval = evt.getKey().getValue() if keyval == fife.Key.ESCAPE: self.app.quit() def keyReleased(self, evt): keyval = evt.getKey().getValue() if keyval == fife.Key.F12: if not self.debuggeractive: self.app.guimanager.showDebugger() self.debuggeractive = True else: self.app.guimanager.hideDebugger() self.debuggeractive = False def onCommand(self, command): if command.getCommandType() == fife.CMD_QUIT_GAME: self.quitrequested = True command.consume() class RocketApplicationBase(ApplicationBase): """ PychanApplicationBase is an extendable class that provides a basic environment for a FIFE-based client. This class should be extended if you 've built fife with librocket support and want to create a game using it. """ def __init__(self, setting=None): super(RocketApplicationBase, self).__init__(setting) settings = self.engine.getSettings() guimanager = fife.LibRocketManager() #transfer ownership to the engine guimanager.thisown = 0 #initialize gui manager and set it as the engine's active gui manager guimanager.init(settings.getRenderBackend(), settings.getScreenWidth(), settings.getScreenHeight()) self.engine.setGuiManager(guimanager) self.guimanager = guimanager self.engine.getEventManager().addSdlEventListener(guimanager) #get reference to the active rocket context self.rocketcontext = rocket.contexts['default'] def createListener(self): self._listener = RocketEventListener(self) return self._listener def quit(self): self.rocketcontext.UnloadAllDocuments() self.rocketcontext.UnloadAllMouseCursors() #release reference to rocket context self.rocketcontext = None #call parent's quit super(RocketApplicationBase, self).quit() fifengine-0.4.1/engine/python/fife/extensions/loaders.py000066400000000000000000000050641304641216200233530ustar00rootroot00000000000000# -*- coding: utf-8 -*- # #################################################################### # Copyright (C) 2005-2017 by the FIFE team # http://www.fifengine.net # This file is part of FIFE. # # FIFE is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the # Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # #################################################################### """ Loaders plugin manager """ import os.path from fife import fife from fife.extensions.serializers.xmlmap import XMLMapLoader mapFileMapping = { 'xml' : XMLMapLoader} fileExtensions = set(['xml']) def loadMapFile(path, engine, callback=None, debug=True, extensions={}): """ load map file and get (an optional) callback if major stuff is done: - map creation - parsed imports - parsed layers - parsed cameras the callback will send both a string and a float (which shows the overall process), callback(string, float) @type engine: object @param engine: FIFE engine instance @type callback: function @param callback: callback for maploading progress @type debug: bool @param debug: flag to activate / deactivate print statements @rtype object @return FIFE map object """ (filename, extension) = os.path.splitext(path) map_loader = mapFileMapping[extension[1:]](engine, callback, debug, extensions) map = map_loader.loadResource(path) if debug: print "--- Loading map took: ", map_loader.time_to_load, " seconds." return map def addMapLoader(fileExtension, loaderClass): """Add a new loader for fileextension @type fileExtension: string @param fileExtension: The file extension the loader is registered for @type loaderClass: object @param loaderClass: A fife.ResourceLoader implementation that loads maps from files with the given fileExtension """ mapFileMapping[fileExtension] = loaderClass _updateMapFileExtensions() def _updateMapFileExtensions(): global fileExtensions fileExtensions = set(mapFileMapping.keys()) fifengine-0.4.1/engine/python/fife/extensions/pychan/000077500000000000000000000000001304641216200226255ustar00rootroot00000000000000fifengine-0.4.1/engine/python/fife/extensions/pychan/__init__.py000066400000000000000000000360431304641216200247440ustar00rootroot00000000000000# -*- coding: utf-8 -*- # #################################################################### # Copyright (C) 2005-2017 by the FIFE team # http://www.fifengine.net # This file is part of FIFE. # # FIFE is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the # Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # #################################################################### """\ Pythonic Guichan Wrapper - PyChan ================================= Pythonic GUI API. Features -------- - Simpler Interface - Very Basic XML Format support - Basic Layout Engine - Pseudo-Synchronous Dialogs. - Automagic background tiling (WIP) - Basic Styling support. - Simple Font Handling TODO ---- - Make setting parent attribute imply containment relation. - Finalize Widget.execute - Documentation ( Allways not enough :-( ) - Handle Image Fonts - Move Font config files to XML, too ... - Implement real Menus - Implement StackWidget - Then implement TabWidget - GridLayout - Table BUGS ---- - Focus problems with Widget.execute. - Font.glyph_spacing is rendered incorrectly. - Is this a bug? At least inconvenient. MouseEntered events are not distributed for freshly shown widget. - It just looks bad. Problems -------- - Reference counting problems again -sigh- ... and thus possible leaks. - High amount of code reuse -> Complex code - Needs at least new style classes and other goodies. - Missing documentation on: - Styling - ScrollArea - Fonts How to use ========== At its core you only need a few functions. After setting up FIFE you need to initialize pychan. After that you can load a GUI from an XML file. Please see the documentation of L{loadXML} for the details of the XML format :: import pychan pychan.init(fifeEngine) guiElement = pychan.loadXML("contents/gui/myform.xml") The resulting guiElement can be shown and hidden with the obvious L{widgets.Widget.show} and L{widgets.Widget.hide} methods. To get a specific widget you have to give it a name in the XML definition and use that to extract the widget from the returned GUI element. :: okButton = guiElement.findChild(name="okButton") myInput = guiElement.findChild(name="myInput") The data is extracted and set via direct attribute access. These are using the python property technique to hide behind the scenes manipulations. Please keep in mind that the Layout engine and the exact way the widgets are displayed is somewhat limited. :: myInput.text = "Blahblah" myList.items = ["1","2"] guiElement.position = (80,90) A dialog without an OK button would be futile - so here's how you hook widget events to function calls. Every widget has a L{widgets.Widget.capture} method, which will directly call the passed function when a widget event occurs. As a convenience a L{widgets.Widget.mapEvents} function will batch the L{widgets.Widget.findChild} and L{widgets.Widget.capture} calls in an obvious way. :: myButton.capture( application.quit ) guiElement.mapEvents({ 'okButton' : self.applyAndClose, 'closeButton': guiElement.hide }) Other important places to look for information: - L{widgets.Widget} - Attributes explained. - L{loadXML} - Explain the XML format. - L{widgets.layout.LayoutBase} - Working of the layout engine. Initialization, data distribution and collection ================================================ Very often a dialogs text fields, labels and listboxes have to be filled with data after the creation of the dialog. This can be a tiresome process. After a dialog has executed, B{other} attributes have to be read out again, this to can be tiresome. PyChan simplifies both processes. But it treats them as three processes. One is setting the data that will never be read out again - called B{initial data} - the text of a checkbox or the list of a listBox are good examples. The second is setting the data that is mutable by the user and may be read out again - for example the state of a checkbox or the selected index in a list. The third and final process is collection of the user-mutable data:: guiElement.distributeInitialData({ 'myListBox' : choices, 'myLabel' : map.name, }) guiElement.distributeData({ 'myTextField' : map.description }) # ... process dialog. map.description, choice = guiElement.collectData('myListBox','myTextField') print "You selected:",choice,", good choice!" See L{widgets.Widget.distributeData},L{widgets.Widget.distributeInitialData}, L{widgets.Widget.collectData} and L{widgets.Widget.collectDataAsDict}. Styling and font handling ========================= Note: These features are B{work in progress} and likely to change. A style is a set of rules for matching widgets and a set of attributes applied to them after creation. The attributes can be any of the given attributes. Matching happens currently only by the widget class name itself. As an example the following style - written as a python data structure - will set the border size of all labels to 10:: style = { 'ListBox' : { # Matches all listboxes 'border_size : 10 # After creation call lisbox.border_size = 10 } } As a convenience you can use the string B{default} to match all widget classes and thus - for example apply a common font:: style = { 'default' : { 'font' : 'console_small' } } A new style is added to pychan with L{internal.Manager.addStyle}. You can set a new default style by adding a style with the name 'default'. The font is set via a string identifier pulled from a font definition in a PyChan configuration file. You have to load these by calling L{loadFonts} in your startup code:: import pychan pychan.init( fifeEngine ) pychan.loadFonts( "content/fonts/console.fontdef" ) The font definition files are in the following format:: [Font/FIRST_FONT_NAME] type: truetype source: path/to/font.ttf # The font size in point size: 30 [Font/SECOND_FONT_NAME] type: truetype source: content/fonts/samanata.ttf size: 8 # And so on. I hope the example is clear enough ... Other options you can set: - color: A list of comma separated integers from 0 to 255. White (255,255,255) by default. - antialias: Zero or one - enable or disable antialialising. Enabled by default. - row_spacing: Extra height per row. Default is 0. - glyph_spacing: Extra space per glyph. Default is 0. B{Currently buggy in the engine!} Unicode and internationalisation ================================ All text that is visible and editable by the player has to be a unicode object. All text that is used internally, e.g. widget names, have to be normal strings. While PyChan will not raise an exception, if you do not follow this guideline, you are encouraged to so. You can change the way unicode encoding errors are handled by using the function L{setUnicodePolicy}. Widget hierachy =============== Every widget can be contained in another container widget like L{Window}, L{VBox}, L{HBox}, L{Container} or L{ScrollArea}. Container widgets can contain any number of widgets. Thus we have a tree like structure of the widgets - which finally makes up the window or frame that is placed on the screen. In PyChan widgets are supposed to be manipulated via the root of this hierachy, so that the actual layout can be changed in the XML files without hassle. It can be compared to how HTML works. These bits and pieces connect things up:: - name - A (hopefully) unique name in the widget hierachy - findChildren - The accessor method to find widgets by name or any other attribute. - _parent - The parent widget in the widget hierachy - deepApply - The method used to walk over the widget hierachy. You have to reimplement this in case you want to provide custom widgets. Wrapping machinery ================== The wrapping mechanism works be redirecting attribute access to the Widget derived classes to a C{real_widget} member variable which in turn is an instance of the SWIG wrapped Guichan widget. To ensure the real widget has already been constructed, when the wrapping machinery is already in use, this has to be the first attribute to set in the constructors. This leads to a reversed construction sequence as the super classes constructor has to be invoked I{after} the subclass specific construction has taken place. """ __all__ = [ 'loadXML', 'loadFonts', 'init', 'manager' ] # For epydoc import widgets import widgets.ext # This *import should really be removed! from widgets import * from exceptions import * from fonts import loadFonts ### Initialisation ### manager = None def init(engine,debug=False, compat_layout=False): """ This has to be called before any other pychan methods can be used. It sets up a manager object which is available under pychan.manager. @param engine: The FIFE engine object. @param debug: bool - Enables and disables debugging output. Default is False. @param compat_layout: bool - Enables and disables compat layout. Default is False. """ from compat import _munge_engine_hook from internal import Manager global manager manager = Manager(_munge_engine_hook(engine),debug,compat_layout) # XML Loader from xml.sax import saxutils, handler from traceback import print_exc def traced(f): """ Simple decorator that prints tracebacks for any exceptions occuring in a function. Useful to avoid the infamous 'finally pops bad exception' that shadows the real cause of the error ... """ def traced_f(*args,**kwargs): try: return f(*args,**kwargs) except: print_exc() raise return traced_f class _GuiLoader(object, handler.ContentHandler): def __init__(self): super(_GuiLoader,self).__init__() self.root = None self.indent = "" self.stack = [] def _printTag(self,name,attrs): if not manager.debug: return attrstrings = map(lambda t: '%s="%s"' % tuple(map(unicode,t)),attrs.items()) tag = "<%s " % name + " ".join(attrstrings) + ">" try: print self.indent + tag except UnicodeEncodeError, e: print self.indent + tag.encode('ascii', 'backslashreplace') def _resolveTag(self,name): """ Resolve a XML Tag to a PyChan GUI class. """ cls = WIDGETS.get(name,None) if cls is None and name == "Spacer": cls = Spacer if cls is None: raise GuiXMLError("Unknown GUI Element: %s" % name) return cls def _setAttr(self,obj,name,value): if not hasattr(obj.__class__,'ATTRIBUTES'): raise PyChanException("The registered widget/spacer class %s does not supply an 'ATTRIBUTES'." % repr(obj)) try: for attr in obj.ATTRIBUTES: if attr.name == name: attr.set(obj,value) return except GuiXMLError, e: raise GuiXMLError("Error parsing attr '%s'='%s' for '%s': '%s'" % (name,value,obj,e)) raise GuiXMLError("Unknown GUI Attribute '%s' on '%s'" % (name,repr(obj))) def startElement(self, name, attrs): self._printTag(name,attrs) cls = self._resolveTag(name) if issubclass(cls,Widget): self.stack.append('gui_element') self._createInstance(cls,name,attrs) elif cls == Spacer: self.stack.append('spacer') self._createSpacer(cls,name,attrs) else: self.stack.append('unknown') self.indent += " "*4 def _createInstance(self,cls,name,attrs): obj = cls(parent=self.root) for k,v in attrs.items(): self._setAttr(obj,k,v) if self.root: self.root.addChild( obj ) self.root = obj def _createSpacer(self,cls,name,attrs): obj = cls(parent=self.root) for k,v in attrs.items(): self._setAttr(obj,k,v) if hasattr(self.root,'add'): self.root.addSpacer(obj) else: raise GuiXMLError("A spacer needs to be added to a container widget!") self.root = obj def endElement(self, name): self.indent = self.indent[:-4] if manager.debug: print self.indent + "" % name if self.stack.pop() in ('gui_element','spacer'): self.root = self.root.parent or self.root def loadXML(filename_or_stream): """ Loads a PyChan XML file and generates a widget from it. @param filename_or_stream: A filename or a file-like object (for example using StringIO). The XML format is very dynamic, in the sense, that the actual allowed tags and attributes depend on the PyChan code. So when a tag C{Button} is encountered, an instance of class Button will be generated, and added to the parent object. All attributes will then be parsed and then set in the following way: - position,size,min_size,max_size,margins - These are assumed to be comma separated tuples of integers. - foreground_color,base_color,background_color - These are assumed to be triples or quadruples of comma separated integers. (triples: r,g,b; quadruples: r,g,b,a) - opaque,border_size,padding - These are assumed to be simple integers. All other attributes are set verbatim as strings on the generated instance. In case a Widget does not accept an attribute to be set or the attribute can not be parsed correctly, the function will raise a GuiXMLError. In short::